crc-fast-1.10.0/.cargo_vcs_info.json0000644000000001360000000000100126150ustar { "git": { "sha1": "3a853cc7daf2cd47cc4466f198680cabdfb0b5fa" }, "path_in_vcs": "" }crc-fast-1.10.0/.github/PULL_REQUEST_TEMPLATE.md000064400000000000000000000014531046102023000165510ustar 00000000000000## The Problem [ What are you trying to solve? Why are you trying to solve it? ] ## The Solution [ How are you fixing the problem? High-level explanation. ] ### Changes [ A more detailed explanation of the solution to guide reviewers. Point out tricky or magic areas. ] ### Planned version bump - Which: [ `MAJOR`, `MINOR`, `PATCH` ] - Why: [ non-breaking bug fix, doc change, test coverage, formatting, debugging, profiling, security fix, internal change, experimental change, non-breaking new functionality, breaking change, etc ] ### Links * [ Any important other PRs, Issues, PRs, etc? ] ## Notes [ @mentions for anyone who should be alerted to this PR ] [ **Please assign reviewers if you want someone specific to review this** ] [ **Please do not forget to add labels specific to this PR** ] crc-fast-1.10.0/.github/workflows/release.yml000064400000000000000000000663611046102023000171610ustar 00000000000000name: Release on: workflow_run: workflows: [Tests] types: - completed workflow_dispatch: permissions: contents: write jobs: check-trigger: name: Check if triggered by tag runs-on: ubuntu-latest if: github.event.workflow_run.conclusion == 'success' outputs: is_tag: ${{ steps.check.outputs.is_tag }} tag_name: ${{ steps.check.outputs.tag_name }} steps: - name: Check if workflow was triggered by a version tag id: check env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | echo "Workflow run event: ${{ github.event.workflow_run.event }}" echo "Head branch: ${{ github.event.workflow_run.head_branch }}" echo "Head SHA: ${{ github.event.workflow_run.head_sha }}" # Get tags for this commit TAGS=$(gh api repos/${{ github.repository }}/git/refs/tags --jq '.[] | select(.object.sha == "${{ github.event.workflow_run.head_sha }}") | .ref' | sed 's|refs/tags/||') if [ -z "$TAGS" ]; then echo "No tags found for this commit" echo "is_tag=false" >> $GITHUB_OUTPUT else # Check if any tag matches version pattern VERSION_TAG=$(echo "$TAGS" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1) if [ -n "$VERSION_TAG" ]; then echo "Found version tag: $VERSION_TAG" echo "is_tag=true" >> $GITHUB_OUTPUT echo "tag_name=$VERSION_TAG" >> $GITHUB_OUTPUT else echo "Tags found but none match version pattern" echo "is_tag=false" >> $GITHUB_OUTPUT fi fi validate: name: Validate needs: check-trigger if: needs.check-trigger.outputs.is_tag == 'true' runs-on: ubuntu-latest timeout-minutes: 60 outputs: tag_name: ${{ needs.check-trigger.outputs.tag_name }} steps: - name: Checkout code uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust with: ref: ${{ github.event.workflow_run.head_sha }} - name: Setup Rust toolchain uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c # pinned commit for 1.15.2 with: toolchain: stable components: rustfmt, clippy - name: Check code formatting run: cargo fmt --check - name: Run clippy run: cargo clippy -- -D warnings - name: Run tests run: cargo test build: name: Build ${{ matrix.platform }}-${{ matrix.arch }} needs: validate runs-on: ${{ matrix.os }} env: TAG_NAME: ${{ needs.validate.outputs.tag_name }} strategy: fail-fast: false matrix: include: - target: x86_64-unknown-linux-gnu os: ubuntu-22.04 platform: linux arch: x86_64 ext: tar.gz - target: i686-unknown-linux-gnu os: ubuntu-22.04 platform: linux arch: x86 ext: tar.gz - target: aarch64-unknown-linux-gnu os: ubuntu-22.04-arm platform: linux arch: aarch64 ext: tar.gz - target: aarch64-apple-darwin os: macos-14 platform: macos arch: aarch64 ext: tar.gz - target: x86_64-pc-windows-msvc os: windows-2022 platform: windows arch: x86_64 ext: zip - target: i686-pc-windows-msvc os: windows-2022 platform: windows arch: x86 ext: zip - target: aarch64-pc-windows-msvc os: windows-11-arm platform: windows arch: aarch64 ext: zip steps: - name: Checkout code uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust - name: Setup Rust toolchain uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c # pinned commit for 1.15.2 with: toolchain: stable - name: Install cross if: matrix.target == 'i686-unknown-linux-gnu' run: cargo install cross --git https://github.com/cross-rs/cross - name: Build release binaries (native) if: matrix.target != 'i686-unknown-linux-gnu' run: cargo build --all-features --release --target ${{ matrix.target }} - name: Build release binaries (cross) if: matrix.target == 'i686-unknown-linux-gnu' run: cross build --all-features --release --target ${{ matrix.target }} - name: Verify library files (Unix) if: runner.os != 'Windows' shell: bash run: | echo "Verifying library files..." if [ "${{ matrix.platform }}" = "linux" ]; then test -f target/${{ matrix.target }}/release/libcrc_fast.so || { echo "Missing libcrc_fast.so"; exit 1; } test -f target/${{ matrix.target }}/release/libcrc_fast.a || { echo "Missing libcrc_fast.a"; exit 1; } echo "✓ Found libcrc_fast.so and libcrc_fast.a" elif [ "${{ matrix.platform }}" = "macos" ]; then test -f target/${{ matrix.target }}/release/libcrc_fast.dylib || { echo "Missing libcrc_fast.dylib"; exit 1; } test -f target/${{ matrix.target }}/release/libcrc_fast.a || { echo "Missing libcrc_fast.a"; exit 1; } echo "✓ Found libcrc_fast.dylib and libcrc_fast.a" fi - name: Verify library files (Windows) if: runner.os == 'Windows' shell: pwsh run: | Write-Host "Verifying library files..." if (-not (Test-Path "target/${{ matrix.target }}/release/crc_fast.dll")) { Write-Error "Missing crc_fast.dll" exit 1 } if (-not (Test-Path "target/${{ matrix.target }}/release/crc_fast.dll.lib")) { Write-Error "Missing crc_fast.dll.lib" exit 1 } if (-not (Test-Path "target/${{ matrix.target }}/release/crc_fast.lib")) { Write-Error "Missing crc_fast.lib" exit 1 } Write-Host "✓ Found crc_fast.dll, crc_fast.dll.lib, and crc_fast.lib" - name: Verify CLI binaries (Unix) if: runner.os != 'Windows' shell: bash run: | echo "Verifying CLI binaries..." test -f target/${{ matrix.target }}/release/checksum || { echo "Missing checksum"; exit 1; } test -f target/${{ matrix.target }}/release/arch-check || { echo "Missing arch-check"; exit 1; } test -f target/${{ matrix.target }}/release/get-custom-params || { echo "Missing get-custom-params"; exit 1; } echo "✓ Found checksum, arch-check, and get-custom-params" - name: Verify CLI binaries (Windows) if: runner.os == 'Windows' shell: pwsh run: | Write-Host "Verifying CLI binaries..." if (-not (Test-Path "target/${{ matrix.target }}/release/checksum.exe")) { Write-Error "Missing checksum.exe" exit 1 } if (-not (Test-Path "target/${{ matrix.target }}/release/arch-check.exe")) { Write-Error "Missing arch-check.exe" exit 1 } if (-not (Test-Path "target/${{ matrix.target }}/release/get-custom-params.exe")) { Write-Error "Missing get-custom-params.exe" exit 1 } Write-Host "✓ Found checksum.exe, arch-check.exe, and get-custom-params.exe" - name: Stage Linux package if: matrix.platform == 'linux' shell: bash run: | PKG_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}" echo "Creating package directory structure for $PKG_NAME..." mkdir -p "$PKG_NAME/lib" mkdir -p "$PKG_NAME/include" mkdir -p "$PKG_NAME/bin" echo "Copying library files..." cp target/${{ matrix.target }}/release/libcrc_fast.so "$PKG_NAME/lib/" cp target/${{ matrix.target }}/release/libcrc_fast.a "$PKG_NAME/lib/" echo "Copying header file..." cp libcrc_fast.h "$PKG_NAME/include/" echo "Copying CLI binaries..." cp target/${{ matrix.target }}/release/checksum "$PKG_NAME/bin/" cp target/${{ matrix.target }}/release/arch-check "$PKG_NAME/bin/" cp target/${{ matrix.target }}/release/get-custom-params "$PKG_NAME/bin/" echo "Setting executable permissions on binaries..." chmod +x "$PKG_NAME/bin/checksum" chmod +x "$PKG_NAME/bin/arch-check" chmod +x "$PKG_NAME/bin/get-custom-params" echo "Creating VERSION file..." echo "$TAG_NAME" > "$PKG_NAME/VERSION" echo "Creating README.txt..." cat > "$PKG_NAME/README.txt" < "$CHECKSUM_FILE" echo "Verifying checksum file was created..." test -f "$CHECKSUM_FILE" || { echo "Failed to create $CHECKSUM_FILE"; exit 1; } echo "Checksum file contents:" cat "$CHECKSUM_FILE" echo "✓ SHA256 checksum generated successfully" - name: Stage macOS package if: matrix.platform == 'macos' shell: bash run: | PKG_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}" echo "Creating package directory structure for $PKG_NAME..." mkdir -p "$PKG_NAME/lib" mkdir -p "$PKG_NAME/include" mkdir -p "$PKG_NAME/bin" echo "Copying library files..." cp target/${{ matrix.target }}/release/libcrc_fast.dylib "$PKG_NAME/lib/" cp target/${{ matrix.target }}/release/libcrc_fast.a "$PKG_NAME/lib/" echo "Copying header file..." cp libcrc_fast.h "$PKG_NAME/include/" echo "Copying CLI binaries..." cp target/${{ matrix.target }}/release/checksum "$PKG_NAME/bin/" cp target/${{ matrix.target }}/release/arch-check "$PKG_NAME/bin/" cp target/${{ matrix.target }}/release/get-custom-params "$PKG_NAME/bin/" echo "Setting executable permissions on binaries..." chmod +x "$PKG_NAME/bin/checksum" chmod +x "$PKG_NAME/bin/arch-check" chmod +x "$PKG_NAME/bin/get-custom-params" echo "Creating VERSION file..." echo "$TAG_NAME" > "$PKG_NAME/VERSION" echo "Creating README.txt..." cat > "$PKG_NAME/README.txt" < "$CHECKSUM_FILE" echo "Verifying checksum file was created..." test -f "$CHECKSUM_FILE" || { echo "Failed to create $CHECKSUM_FILE"; exit 1; } echo "Checksum file contents:" cat "$CHECKSUM_FILE" echo "✓ SHA256 checksum generated successfully" - name: Stage Windows package if: matrix.platform == 'windows' shell: pwsh run: | $PKG_NAME = "crc-fast-$env:TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}" Write-Host "Creating package directory structure for $PKG_NAME..." New-Item -ItemType Directory -Path "$PKG_NAME/bin" -Force | Out-Null New-Item -ItemType Directory -Path "$PKG_NAME/lib" -Force | Out-Null New-Item -ItemType Directory -Path "$PKG_NAME/include" -Force | Out-Null Write-Host "Copying library files..." Copy-Item "target/${{ matrix.target }}/release/crc_fast.dll" "$PKG_NAME/bin/" Copy-Item "target/${{ matrix.target }}/release/crc_fast.dll.lib" "$PKG_NAME/lib/" Copy-Item "target/${{ matrix.target }}/release/crc_fast.lib" "$PKG_NAME/lib/" Write-Host "Copying header file..." Copy-Item "libcrc_fast.h" "$PKG_NAME/include/" Write-Host "Copying CLI binaries..." Copy-Item "target/${{ matrix.target }}/release/checksum.exe" "$PKG_NAME/bin/" Copy-Item "target/${{ matrix.target }}/release/arch-check.exe" "$PKG_NAME/bin/" Copy-Item "target/${{ matrix.target }}/release/get-custom-params.exe" "$PKG_NAME/bin/" Write-Host "Creating VERSION file..." "$env:TAG_NAME" | Out-File -FilePath "$PKG_NAME/VERSION" -Encoding utf8 -NoNewline Write-Host "Creating README.txt..." @" crc-fast Binary Distribution Version: $env:TAG_NAME Platform: Windows ${{ matrix.arch }} CONTENTS ======== This package contains: - Dynamic library (crc_fast.dll) with import library (crc_fast.dll.lib) - Static library (crc_fast.lib) - C/C++ header file (libcrc_fast.h) - Command-line utilities (checksum.exe, arch-check.exe, get-custom-params.exe) INSTALLATION ============ 1. Extract this archive to your desired location 2. Add the bin\ directory to your PATH environment variable: - Open System Properties > Environment Variables - Edit the PATH variable and add: C:\path\to\crc-fast\bin For development: - Add lib\ directory to your linker library path - Add include\ directory to your compiler include path LINKING ======= Dynamic linking (MSVC): cl your_program.c /I"C:\path\to\crc-fast\include" /link crc_fast.dll.lib /LIBPATH:"C:\path\to\crc-fast\lib" Note: crc_fast.dll must be in PATH or same directory as your executable Static linking (MSVC): cl your_program.c /I"C:\path\to\crc-fast\include" /link crc_fast.lib /LIBPATH:"C:\path\to\crc-fast\lib" Dynamic linking (MinGW): gcc your_program.c -I"C:\path\to\crc-fast\include" -L"C:\path\to\crc-fast\lib" -lcrc_fast USAGE ===== Command-line tools: checksum.exe --help # Calculate CRC checksums arch-check.exe # Display CPU architecture features get-custom-params.exe --help # Generate CRC parameters DOCUMENTATION ============= Full documentation: https://github.com/awesomized/crc-fast-rust LICENSE ======= This software is dual-licensed under MIT OR Apache-2.0. See LICENSE-MIT and LICENSE-Apache files for details. "@ | Out-File -FilePath "$PKG_NAME/README.txt" -Encoding utf8 Write-Host "Copying license files..." Copy-Item "LICENSE-MIT" "$PKG_NAME/" Copy-Item "LICENSE-Apache" "$PKG_NAME/" Write-Host "✓ Windows package staged successfully" Get-ChildItem -Recurse "$PKG_NAME" - name: Create zip package (Windows) if: matrix.platform == 'windows' shell: pwsh run: | $PKG_NAME = "crc-fast-$env:TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}" $ARCHIVE_NAME = "${PKG_NAME}.zip" Write-Host "Creating compressed archive: $ARCHIVE_NAME" Compress-Archive -Path "$PKG_NAME" -DestinationPath "$ARCHIVE_NAME" -CompressionLevel Optimal Write-Host "Verifying archive was created..." if (-not (Test-Path "$ARCHIVE_NAME")) { Write-Error "Failed to create $ARCHIVE_NAME" exit 1 } Write-Host "Archive details:" Get-Item "$ARCHIVE_NAME" | Format-List Name, Length, LastWriteTime Write-Host "✓ zip package created successfully" - name: Generate SHA256 checksum (Windows) if: matrix.platform == 'windows' shell: pwsh run: | $ARCHIVE_NAME = "crc-fast-$env:TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}.zip" $CHECKSUM_FILE = "${ARCHIVE_NAME}.sha256" Write-Host "Generating SHA256 checksum for $ARCHIVE_NAME..." $hash = (Get-FileHash -Path "$ARCHIVE_NAME" -Algorithm SHA256).Hash.ToLower() "$hash $ARCHIVE_NAME" | Out-File -FilePath "$CHECKSUM_FILE" -Encoding utf8 -NoNewline Write-Host "Verifying checksum file was created..." if (-not (Test-Path "$CHECKSUM_FILE")) { Write-Error "Failed to create $CHECKSUM_FILE" exit 1 } Write-Host "Checksum file contents:" Get-Content "$CHECKSUM_FILE" Write-Host "✓ SHA256 checksum generated successfully" - name: Upload package artifact uses: actions/upload-artifact@v4 # not pinning to commit hash since this is a GitHub action, which we trust with: name: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }} path: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }} if-no-files-found: error retention-days: 90 - name: Upload checksum artifact uses: actions/upload-artifact@v4 # not pinning to commit hash since this is a GitHub action, which we trust with: name: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }}.sha256 path: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }}.sha256 if-no-files-found: error retention-days: 90 publish: name: Publish needs: [validate, build] runs-on: ubuntu-latest env: TAG_NAME: ${{ needs.validate.outputs.tag_name }} steps: - name: Download all artifacts uses: actions/download-artifact@v4 # not pinning to commit hash since this is a GitHub action, which we trust with: path: artifacts merge-multiple: false - name: Check for existing release id: check_release shell: bash env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | echo "Checking if release exists for tag: $TAG_NAME" RELEASE_DATA=$(curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \ -H "Accept: application/vnd.github+json" \ "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG_NAME") if echo "$RELEASE_DATA" | jq -e '.id' > /dev/null 2>&1; then RELEASE_ID=$(echo "$RELEASE_DATA" | jq -r '.id') echo "release_exists=true" >> $GITHUB_OUTPUT echo "release_id=$RELEASE_ID" >> $GITHUB_OUTPUT echo "✓ Release already exists with ID: $RELEASE_ID" else echo "release_exists=false" >> $GITHUB_OUTPUT echo "release_id=" >> $GITHUB_OUTPUT echo "✓ No existing release found for this tag" fi - name: Organize files for upload shell: bash run: | echo "Organizing downloaded artifacts..." mkdir -p release-assets echo "Moving packages and checksums to release-assets directory..." find artifacts -type f \( -name "*.tar.gz" -o -name "*.zip" -o -name "*.sha256" \) -exec mv {} release-assets/ \; echo "Release assets ready for upload:" ls -lh release-assets/ echo "Verifying all expected files are present..." EXPECTED_FILES=( "crc-fast-$TAG_NAME-linux-x86_64.tar.gz" "crc-fast-$TAG_NAME-linux-x86_64.tar.gz.sha256" "crc-fast-$TAG_NAME-linux-x86.tar.gz" "crc-fast-$TAG_NAME-linux-x86.tar.gz.sha256" "crc-fast-$TAG_NAME-linux-aarch64.tar.gz" "crc-fast-$TAG_NAME-linux-aarch64.tar.gz.sha256" "crc-fast-$TAG_NAME-macos-aarch64.tar.gz" "crc-fast-$TAG_NAME-macos-aarch64.tar.gz.sha256" "crc-fast-$TAG_NAME-windows-x86_64.zip" "crc-fast-$TAG_NAME-windows-x86_64.zip.sha256" "crc-fast-$TAG_NAME-windows-x86.zip" "crc-fast-$TAG_NAME-windows-x86.zip.sha256" "crc-fast-$TAG_NAME-windows-aarch64.zip" "crc-fast-$TAG_NAME-windows-aarch64.zip.sha256" ) MISSING_FILES=() for file in "${EXPECTED_FILES[@]}"; do if [ ! -f "release-assets/$file" ]; then MISSING_FILES+=("$file") fi done if [ ${#MISSING_FILES[@]} -gt 0 ]; then echo "ERROR: Missing expected files:" printf '%s\n' "${MISSING_FILES[@]}" exit 1 fi echo "✓ All expected files are present" echo "Total number of files: $(ls -1 release-assets/ | wc -l)" echo "Total size: $(du -sh release-assets/ | cut -f1)" - name: Create or update GitHub release uses: softprops/action-gh-release@6da8fa9354ddfdc4aeace5fc48d7f679b5214090 # pinned commit for 2.4.1 with: files: release-assets/* draft: true prerelease: false fail_on_unmatched_files: true generate_release_notes: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} crc-fast-1.10.0/.github/workflows/tests.yml000064400000000000000000000371011046102023000166710ustar 00000000000000name: Tests on: push: pull_request: workflow_dispatch: jobs: check-previous-run: name: Check for previous successful run runs-on: ubuntu-latest outputs: should_skip: ${{ steps.check.outputs.should_skip }} steps: - name: Check if commit was already tested id: check env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | echo "Current commit: ${{ github.sha }}" echo "Current ref: ${{ github.ref }}" # Check if there's a previous successful workflow run for this exact commit PREVIOUS_RUN=$(gh api \ -H "Accept: application/vnd.github+json" \ "/repos/${{ github.repository }}/actions/workflows/tests.yml/runs?status=success&per_page=5" \ --jq '.workflow_runs[] | select(.head_sha == "${{ github.sha }}") | .id' \ | head -n 1) if [ -n "$PREVIOUS_RUN" ] && [ "$PREVIOUS_RUN" != "${{ github.run_id }}" ]; then echo "Found previous successful run: $PREVIOUS_RUN" echo "should_skip=true" >> $GITHUB_OUTPUT else echo "No previous successful run found for this commit" echo "should_skip=false" >> $GITHUB_OUTPUT fi test-aarch64: name: Test aarch64 needs: check-previous-run if: needs.check-previous-run.outputs.should_skip != 'true' strategy: matrix: os: [ubuntu-22.04-arm, ubuntu-24.04-arm, macos-14, macos-15, macos-26, macos-latest, windows-11-arm] rust-toolchain: - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized - "stable" - "nightly" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0 with: toolchain: ${{ matrix.rust-toolchain }} components: rustfmt, clippy cache-key: ${{ matrix.os }}-${{ matrix.rust-toolchain }}-v2 - name: Check run: cargo check --all-features - name: Architecture check run: cargo run --features cli --bin arch-check - if: ${{ matrix.rust-toolchain != 'nightly' }} name: Format run: cargo fmt -- --check - if: ${{ matrix.rust-toolchain != 'nightly' }} name: Clippy run: cargo clippy --all-features -- -D warnings - name: Test run: cargo test --all-features test-x86_64: name: Test x86_64 needs: check-previous-run if: needs.check-previous-run.outputs.should_skip != 'true' strategy: matrix: os: [ ubuntu-latest, ubuntu-22.04, ubuntu-24.04, macos-15-intel, windows-2022, windows-2025, windows-latest ] rust-toolchain: - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized - "stable" - "nightly" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0 with: toolchain: ${{ matrix.rust-toolchain }} components: rustfmt, clippy cache-key: ${{ matrix.os }}-${{ matrix.rust-toolchain }}-v2 - name: Check run: cargo check --all-features - name: Architecture check run: cargo run --features cli --bin arch-check - if: ${{ matrix.rust-toolchain != 'nightly' }} name: Format run: cargo fmt -- --check - if: ${{ matrix.rust-toolchain != 'nightly' }} name: Clippy run: cargo clippy --all-features -- -D warnings - name: Test run: cargo test --all-features test-x86-linux: name: Test x86 Linux needs: check-previous-run if: needs.check-previous-run.outputs.should_skip != 'true' runs-on: ubuntu-latest strategy: matrix: target: [i586-unknown-linux-gnu, i686-unknown-linux-gnu] rust-toolchain: - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized - "stable" - "nightly" steps: - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0 with: toolchain: ${{ matrix.rust-toolchain }} components: rustfmt, clippy - name: Set up cross run: cargo install cross --locked --version 0.2.5 - name: Check run: cross check --all-features --target ${{ matrix.target }} - name: Architecture check run: cross run --features cli --bin arch-check --target ${{ matrix.target }} - name: Test run: cross test --all-features --target ${{ matrix.target }} test-x86-windows: name: Test x86 Windows needs: check-previous-run if: needs.check-previous-run.outputs.should_skip != 'true' runs-on: windows-2022 strategy: matrix: rust-toolchain: - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized - "stable" - "nightly" steps: - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0 with: toolchain: ${{ matrix.rust-toolchain }} target: i686-pc-windows-msvc components: rustfmt, clippy cache-key: windows-x86-${{ matrix.rust-toolchain }} - name: Check run: cargo check --all-features --target i686-pc-windows-msvc - name: Architecture check run: cargo run --features cli --bin arch-check --target i686-pc-windows-msvc - if: ${{ matrix.rust-toolchain != 'nightly' }} name: Format run: cargo fmt -- --check - if: ${{ matrix.rust-toolchain != 'nightly' }} name: Clippy run: cargo clippy --all-features --target i686-pc-windows-msvc -- -D warnings - name: Test run: cargo test --all-features --target i686-pc-windows-msvc test-software: name: Test software fallback needs: check-previous-run if: needs.check-previous-run.outputs.should_skip != 'true' runs-on: ubuntu-latest strategy: matrix: target: [powerpc-unknown-linux-gnu, powerpc64-unknown-linux-gnu] rust-toolchain: - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized - "stable" - "nightly" steps: - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0 with: toolchain: ${{ matrix.rust-toolchain }} components: rustfmt, clippy - name: Set up cross run: cargo install cross --locked --version 0.2.5 - name: Check run: cross check --all-features --target ${{ matrix.target }} - name: Architecture check run: cross run --features cli --bin arch-check --target ${{ matrix.target }} - name: Test run: cross test --all-features --target ${{ matrix.target }} miri-test-x86_64: name: Miri Test x86_64 needs: [check-previous-run, test-x86_64] if: needs.check-previous-run.outputs.should_skip != 'true' runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 with: toolchain: nightly components: miri - name: Detect CPU cores id: cores run: | CORES=$(nproc) echo "count=$CORES" >> $GITHUB_OUTPUT echo "use_nextest=$([[ $CORES -ge 2 ]] && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT - name: Install nextest if: steps.cores.outputs.use_nextest == 'true' run: cargo install cargo-nextest --locked - name: Setup Miri run: cargo miri setup - name: Run Miri tests (parallel) if: steps.cores.outputs.use_nextest == 'true' run: cargo miri nextest run --all-features -j${{ steps.cores.outputs.count }} - name: Run Miri tests (serial) if: steps.cores.outputs.use_nextest == 'false' run: cargo miri test --all-features test-no-std: name: Test no_std needs: check-previous-run if: needs.check-previous-run.outputs.should_skip != 'true' runs-on: ubuntu-latest strategy: matrix: target: - thumbv7em-none-eabihf # ARM Cortex-M4F/M7F - thumbv8m.main-none-eabihf # ARM Cortex-M33/M35P - riscv32imac-unknown-none-elf # RISC-V 32-bit rust-toolchain: - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized - "stable" - "nightly" steps: - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0 with: toolchain: ${{ matrix.rust-toolchain }} target: ${{ matrix.target }} components: rustfmt, clippy cache-key: ${{ matrix.target }}-${{ matrix.rust-toolchain }}-v2 - name: Check no_std (no features) run: cargo check --target ${{ matrix.target }} --no-default-features --features panic-handler --lib - name: Check no_std with alloc run: cargo check --target ${{ matrix.target }} --no-default-features --features alloc,panic-handler --lib - name: Check no_std with cache run: cargo check --target ${{ matrix.target }} --no-default-features --features cache,panic-handler --lib - name: Run no_std tests (on host with std test harness) run: cargo test --test no_std_tests test-wasm: name: Test WASM needs: check-previous-run if: needs.check-previous-run.outputs.should_skip != 'true' runs-on: ubuntu-latest strategy: matrix: include: # WASM 1.0/2.0 (32-bit) - all toolchains - target: wasm32-unknown-unknown rust-toolchain: "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized - target: wasm32-unknown-unknown rust-toolchain: "stable" - target: wasm32-unknown-unknown rust-toolchain: "nightly" # WASI preview 1 (32-bit) - all toolchains - target: wasm32-wasip1 rust-toolchain: "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized - target: wasm32-wasip1 rust-toolchain: "stable" - target: wasm32-wasip1 rust-toolchain: "nightly" # WASI preview 2 (32-bit) - nightly only (experimental) - target: wasm32-wasip2 rust-toolchain: "nightly" # Note: wasm64-unknown-unknown removed - not consistently available in nightly steps: - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0 with: toolchain: ${{ matrix.rust-toolchain }} target: ${{ matrix.target }} components: rustfmt, clippy cache-key: ${{ matrix.target }}-${{ matrix.rust-toolchain }}-v2 - name: Check WASM (no features) run: cargo check --target ${{ matrix.target }} --no-default-features --features panic-handler --lib - name: Check WASM with alloc run: cargo check --target ${{ matrix.target }} --no-default-features --features alloc,panic-handler --lib - name: Check WASM with cache run: cargo check --target ${{ matrix.target }} --no-default-features --features cache,panic-handler --lib - name: Build WASM release run: cargo build --target ${{ matrix.target }} --no-default-features --features alloc,panic-handler --lib --release - name: Run WASM tests (on host with std test harness) run: cargo test --test wasm_tests - if: ${{ matrix.target == 'wasm32-unknown-unknown' && matrix.rust-toolchain == 'stable' }} name: Install wasm-pack run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh - if: ${{ matrix.target == 'wasm32-unknown-unknown' && matrix.rust-toolchain == 'stable' }} name: Build WASM package with wasm-pack run: wasm-pack build --target web --no-default-features --features alloc,panic-handler fuzz-test: name: Fuzz Testing needs: check-previous-run if: needs.check-previous-run.outputs.should_skip != 'true' runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-24.04, ubuntu-24.04-arm] fuzz-target: - digest_crc32_autosar - digest_crc32_bzip2 - digest_crc32_iscsi - digest_crc32_iso_hdlc - digest_crc64_ecma_182 - digest_crc64_nvme - checksum_crc32_autosar - checksum_crc32_bzip2 - checksum_crc32_iscsi - checksum_crc32_iso_hdlc - checksum_crc64_ecma_182 - checksum_crc64_nvme steps: - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0 with: toolchain: nightly cache-key: ${{ matrix.os }}-nightly-fuzz - name: Install cargo-fuzz run: cargo install cargo-fuzz - name: Run fuzzer run: | cargo fuzz run ${{ matrix.fuzz-target }} -- \ -max_total_time=60 \ -rss_limit_mb=2048 \ -timeout=10 \ -print_final_stats=1 continue-on-error: true - name: Upload artifacts on crash if: failure() uses: actions/upload-artifact@v4 with: name: fuzz-artifacts-${{ matrix.os }}-${{ matrix.fuzz-target }} path: fuzz/artifacts/${{ matrix.fuzz-target }}/ tests-complete: name: All tests complete needs: [check-previous-run, test-aarch64, test-x86_64, test-x86-linux, test-x86-windows, test-software, miri-test-x86_64, test-no-std, test-wasm, fuzz-test] if: always() runs-on: ubuntu-latest steps: - name: Check test results run: | echo "Checking test results..." echo "Previous run check: ${{ needs.check-previous-run.result }}" echo "Should skip: ${{ needs.check-previous-run.outputs.should_skip }}" if [ "${{ needs.check-previous-run.outputs.should_skip }}" == "true" ]; then echo "✓ Tests were skipped because this commit was already tested successfully" exit 0 fi # Check if any test job failed if [ "${{ needs.test-aarch64.result }}" == "failure" ] || \ [ "${{ needs.test-x86_64.result }}" == "failure" ] || \ [ "${{ needs.test-x86-linux.result }}" == "failure" ] || \ [ "${{ needs.test-x86-windows.result }}" == "failure" ] || \ [ "${{ needs.test-software.result }}" == "failure" ] || \ [ "${{ needs.miri-test-x86_64.result }}" == "failure" ] || \ [ "${{ needs.test-no-std.result }}" == "failure" ] || \ [ "${{ needs.test-wasm.result }}" == "failure" ] || \ [ "${{ needs.fuzz-test.result }}" == "failure" ]; then echo "✗ One or more test jobs failed" exit 1 fi echo "✓ All test jobs passed" crc-fast-1.10.0/.gitignore000064400000000000000000000001101046102023000133650ustar 00000000000000/target /scratch /test/test_*.bin .idea .DS_Store .git .vscode /scripts crc-fast-1.10.0/.kiro/specs/checksum-benchmark-option/design.md000064400000000000000000000133041046102023000224000ustar 00000000000000# Design Document ## Overview This design extends the existing `bin/checksum.rs` tool with benchmark functionality through a new `-b` flag. The benchmark mode will measure CRC performance using either user-provided data (files/strings) or randomly generated data, reporting throughput in GiB/s along with the acceleration target used. The design maintains backward compatibility while adding a clean benchmark interface that leverages existing patterns from the `benches/benchmark.rs` implementation. ## Architecture ### Command Line Interface The tool will extend the existing argument parsing to support: - `-b`: Enable benchmark mode - `--size `: Specify data size for random generation (when no file/string provided) - `--duration `: Benchmark duration as floating-point seconds (default: 10.0) - Existing `-a `: CRC algorithm (required in benchmark mode) - Existing `-f ` or `-s `: Optional data source for benchmarking ### Data Flow ``` User Input → Argument Parsing → Mode Detection → Benchmark Execution → Results Display ↓ [Normal Checksum Mode] ↓ [Existing Functionality] ``` In benchmark mode: 1. Parse and validate benchmark parameters 2. Determine data source (file, string, or generated) 3. For string/generated data: Load/generate test data once; For file data: use file path directly 4. Run benchmark loop for specified duration using appropriate checksum function 5. Calculate and display results ## Components and Interfaces ### Enhanced Config Structure ```rust #[derive(Debug)] struct Config { algorithm: String, file: Option, string: Option, format: OutputFormat, benchmark: Option, } #[derive(Debug)] struct BenchmarkConfig { size: Option, duration: f64, } ``` ### Benchmark Execution Module ```rust enum BenchmarkData { InMemory(Vec), File(String), } struct BenchmarkRunner { algorithm: CrcAlgorithm, data: BenchmarkData, duration: f64, } impl BenchmarkRunner { fn new(algorithm: CrcAlgorithm, data: BenchmarkData, duration: f64) -> Self fn run(&self) -> BenchmarkResult } struct BenchmarkResult { iterations: u64, elapsed_seconds: f64, throughput_gibs: f64, time_per_iteration_nanos: f64, acceleration_target: String, data_size: u64, } ``` ### Data Generation The benchmark will reuse the random data generation pattern from `benches/benchmark.rs`: ```rust fn generate_random_data(size: usize) -> Vec { let mut rng = rand::rng(); let mut buf = vec![0u8; size]; rng.fill_bytes(&mut buf); buf } ``` ## Data Models ### Input Data Sources 1. **File Input**: Use `checksum_file()` function to benchmark the entire file I/O and checksum stack 2. **String Input**: Use string bytes directly with in-memory `checksum()` function 3. **Generated Data**: Create random data of specified size using `rand::RngCore::fill_bytes()` and use in-memory `checksum()` function ### Benchmark Metrics - **Iterations**: Number of checksum calculations performed - **Elapsed Time**: Actual benchmark duration in seconds - **Throughput**: Calculated as `(data_size * iterations) / elapsed_time / (1024^3)` GiB/s - **Acceleration Target**: Result from `crc_fast::get_calculator_target(algorithm)` ## Error Handling ### Validation Errors - Invalid algorithm names (reuse existing validation) - Invalid size parameters (non-positive values) - Invalid duration parameters (non-positive values) - File read errors (reuse existing error handling) ### Runtime Errors - Memory allocation failures for large data sizes - Timer precision issues (fallback to alternative timing methods) ### Error Messages All errors will follow the existing pattern of displaying the error message followed by usage information. ## Testing Strategy ### Unit Tests - Argument parsing validation for benchmark flags - BenchmarkConfig creation and validation - Data generation with various sizes - Throughput calculation accuracy ### Integration Tests - End-to-end benchmark execution with different algorithms - File and string input handling in benchmark mode - Error handling for invalid parameters - Backward compatibility verification ### Performance Validation - Verify benchmark results are reasonable (within expected ranges) - Compare with existing `benches/benchmark.rs` results for consistency - Test with various data sizes to ensure linear scaling ## Implementation Notes ### Timing Mechanism Use `std::time::Instant` for high-precision timing, with different approaches for different data sources: ```rust let start = std::time::Instant::now(); let mut iterations = 0u64; while start.elapsed().as_secs_f64() < duration { match &self.data { BenchmarkData::InMemory(data) => { std::hint::black_box(checksum(algorithm, data)); } BenchmarkData::File(filename) => { std::hint::black_box(checksum_file(algorithm, filename, None).unwrap()); } } iterations += 1; } let elapsed = start.elapsed().as_secs_f64(); ``` ### Memory Considerations - Pre-allocate test data once before benchmark loop - Use `std::hint::black_box()` to prevent compiler optimizations - Consider memory alignment for optimal performance (optional enhancement) ### Output Format ``` Algorithm: CRC-32/ISCSI Acceleration Target: aarch64-neon-sha3 Data Size: 1,048,576 bytes (1.0 MiB) Duration: 10.00 seconds Iterations: 12,345 Throughput: 45.67 GiB/s Time per iteration: 810.2 μs ``` ### Default Values - **Size**: 1,048,576 bytes (1 MiB) - **Duration**: 10.0 seconds - **Algorithm**: Must be specified via `-a` flag (no default)crc-fast-1.10.0/.kiro/specs/checksum-benchmark-option/requirements.md000064400000000000000000000065451046102023000236630ustar 00000000000000# Requirements Document ## Introduction This feature adds a simple benchmark option to the existing `bin/checksum.rs` tool via a command-line flag. The benchmark will allow users to test performance across different platforms using a single binary, reporting throughput in GiB/s and the acceleration target used. This enables cross-platform performance comparison without requiring a full development environment checkout. ## Glossary - **Checksum_Tool**: The existing `bin/checksum.rs` binary application - **Benchmark_Mode**: A new operational mode that measures and reports performance metrics - **Acceleration_Target**: The hardware-specific optimization path returned by `get_calculator_target()` - **Throughput_Metric**: Performance measurement expressed in GiB/s (gibibytes per second) - **Test_Data**: Randomly generated byte array used for benchmark measurements - **Black_Box**: Rust's `std::hint::black_box()` function that prevents compiler optimizations during benchmarking ## Requirements ### Requirement 1 **User Story:** As a developer, I want to run performance benchmarks from the checksum tool, so that I can compare CRC performance across different hardware platforms without setting up a full development environment. #### Acceptance Criteria 1. WHEN the user provides a `-b` flag, THE Checksum_Tool SHALL enter Benchmark_Mode 2. WHILE in Benchmark_Mode, THE Checksum_Tool SHALL generate Test_Data of the specified size once and reuse it for all iterations 3. THE Checksum_Tool SHALL report Throughput_Metric in GiB/s format 4. THE Checksum_Tool SHALL display the Acceleration_Target used for the benchmark 5. THE Checksum_Tool SHALL use Black_Box to prevent compiler optimizations during measurement ### Requirement 2 **User Story:** As a developer, I want to specify benchmark parameters, so that I can control the test conditions for consistent cross-platform comparisons. #### Acceptance Criteria 1. WHEN the user provides `-a` parameter with `-b` flag, THE Checksum_Tool SHALL use the specified CRC algorithm for benchmarking 2. WHEN the user provides `--size` parameter, THE Checksum_Tool SHALL generate Test_Data of the specified byte size 3. WHEN the user provides `--duration` parameter, THE Checksum_Tool SHALL run the benchmark for the specified number of seconds 4. WHERE no benchmark parameters are provided, THE Checksum_Tool SHALL use default values of 1 MiB for size and 10 seconds for duration 5. THE Checksum_Tool SHALL validate all benchmark parameter values before starting the benchmark ### Requirement 3 **User Story:** As a developer, I want the benchmark to support both file/string input and generated data, so that I can benchmark with specific data or use random data for consistent testing. #### Acceptance Criteria 1. WHEN the user provides `-b` with `-f` or `-s` flags, THE Checksum_Tool SHALL use the file or string content as Test_Data for benchmarking 2. WHEN the user provides `-b` with `--size` parameter but no `-f` or `-s` flags, THE Checksum_Tool SHALL generate random Test_Data of the specified size 3. IF the user provides `-b` without any data source or size specification, THEN THE Checksum_Tool SHALL generate random Test_Data using the default size 4. THE Checksum_Tool SHALL display appropriate usage information when benchmark parameters are invalid 5. THE Checksum_Tool SHALL maintain backward compatibility with existing checksum functionalitycrc-fast-1.10.0/.kiro/specs/checksum-benchmark-option/tasks.md000064400000000000000000000050221046102023000222520ustar 00000000000000# Implementation Plan - [x] 1. Extend command line argument parsing for benchmark options - Add `-b` flag to enable benchmark mode in the argument parser - Add `--size` parameter for specifying random data size - Add `--duration` parameter for benchmark duration (floating-point seconds) - Update the `Config` struct to include optional `BenchmarkConfig` - Update usage/help text to include new benchmark options - _Requirements: 1.1, 2.1, 2.2, 2.3, 2.4_ - [x] 2. Implement benchmark data structures and validation - Create `BenchmarkConfig` struct with size and duration fields - Create `BenchmarkData` enum to handle in-memory vs file data sources - Create `BenchmarkRunner` struct with algorithm, data, and duration - Create `BenchmarkResult` struct with all metrics including time per iteration - Add validation logic for benchmark parameters (positive values) - _Requirements: 2.5, 3.4_ - [x] 3. Implement benchmark execution logic - Create benchmark runner with timing loop using `std::time::Instant` - Implement separate execution paths for in-memory data vs file data - Use `std::hint::black_box()` to prevent compiler optimizations - Calculate throughput in GiB/s and time per iteration with appropriate units - Integrate `get_calculator_target()` for acceleration target reporting - _Requirements: 1.2, 1.3, 1.4, 1.5_ - [x] 4. Implement data source handling - Add random data generation function using `rand::RngCore::fill_bytes()` - Implement logic to determine data source (file, string, or generated) - Handle file size detection for throughput calculations - Create `BenchmarkData` instances based on user input - _Requirements: 3.1, 3.2, 3.3_ - [x] 5. Integrate benchmark mode into main application flow - Modify main function to detect benchmark mode and route accordingly - Ensure mutual exclusivity validation between benchmark and normal modes - Add benchmark result formatting and display - Update error handling to include benchmark-specific errors - Maintain backward compatibility with existing functionality - _Requirements: 3.4, 3.5_ - [x] 6. Add comprehensive testing for benchmark functionality - Write unit tests for argument parsing with benchmark flags - Test benchmark parameter validation (invalid sizes, durations) - Test data source selection logic (file vs string vs generated) - Test benchmark execution with different algorithms - Verify throughput calculation accuracy - Test error handling for invalid benchmark configurations - _Requirements: All requirements_crc-fast-1.10.0/.kiro/specs/crc-params-caching/design.md000064400000000000000000000200721046102023000207620ustar 00000000000000# Design Document ## Overview The CRC parameters caching system will add a thread-safe, memory-efficient cache to the `CrcParams::new()` method. The cache will store pre-computed folding keys indexed by the input parameters, eliminating redundant key generation for identical parameter sets. The design prioritizes performance, thread safety, and minimal memory overhead while maintaining complete API compatibility. ## Architecture ### Cache Structure The caching system will use a global, thread-safe cache implemented with: - **Cache Storage**: `std::collections::HashMap` - **Thread Safety**: `std::sync::RwLock` for concurrent read access with exclusive write access - **Cache Key**: Custom struct containing all parameters that affect key generation - **Lazy Initialization**: `std::sync::OnceLock` to initialize the cache on first use ### Cache Key Design ```rust #[derive(Debug, Clone, PartialEq, Eq, Hash)] struct CrcParamsCacheKey { width: u8, poly: u64, reflected: bool, } ``` The cache key includes only the parameters that directly affect key generation (`width`, `poly`, `reflected`), excluding parameters like `name`, `init`, `xorout`, and `check` which don't influence the mathematical key computation. ### Cache Access Pattern 1. **Cache Hit Path**: Read lock → HashMap lookup → Return cached keys 2. **Cache Miss Path**: Read lock → Cache miss → Generate keys → Write lock → Store in cache → Return keys 3. **Concurrent Access**: Multiple readers can access simultaneously; writers get exclusive access ## Components and Interfaces ### Core Components #### 1. Cache Module (`src/cache.rs`) ```rust use std::collections::HashMap; use std::sync::{OnceLock, RwLock}; static CACHE: OnceLock>> = OnceLock::new(); pub fn get_or_generate_keys(width: u8, poly: u64, reflected: bool) -> [u64; 23] pub fn clear_cache() // For testing and memory management ``` #### 2. Cache Key Structure ```rust #[derive(Debug, Clone, PartialEq, Eq, Hash)] struct CrcParamsCacheKey { width: u8, poly: u64, reflected: bool, } ``` #### 3. Modified CrcParams Implementation The existing `CrcParams::new()` method will be updated to use the cache: ```rust impl CrcParams { pub fn new( name: &'static str, width: u8, poly: u64, init: u64, reflected: bool, xorout: u64, check: u64, ) -> Self { let keys = cache::get_or_generate_keys(width, poly, reflected); let algorithm = match width { 32 => CrcAlgorithm::Crc32Custom, 64 => CrcAlgorithm::Crc64Custom, _ => panic!("Unsupported width: {}", width), }; Self { algorithm, name, width, poly, init, refin: reflected, refout: reflected, xorout, check, keys, } } } ``` ### Interface Design #### Public Interface - No changes to existing public APIs - `CrcParams::new()` maintains identical signature and behavior - Cache operations are completely internal #### Internal Interface - `cache::get_or_generate_keys()` - Primary cache interface - `cache::clear_cache()` - For testing and memory management - Cache key creation and hashing handled internally ## Data Models ### Cache Key Model ```rust #[derive(Debug, Clone, PartialEq, Eq, Hash)] struct CrcParamsCacheKey { width: u8, // CRC width (32 or 64) poly: u64, // Polynomial value reflected: bool, // Reflection mode } ``` ### Cache Storage Model ```rust type CacheStorage = HashMap; type ThreadSafeCache = RwLock; ``` ### Memory Layout Considerations - Cache keys: ~17 bytes per entry (8 + 8 + 1 bytes + HashMap overhead) - Cache values: 184 bytes per entry (23 × 8 bytes) - Total per entry: ~201 bytes + HashMap overhead - Expected usage: 1-10 unique parameter sets in typical applications (single parameter set most common) ## Error Handling ### Cache Access Errors - **RwLock Poisoning**: If a thread panics while holding the write lock, subsequent accesses will fall back to direct key generation - **Memory Allocation**: HashMap growth failures will be handled by Rust's standard allocation error handling ### Fallback Strategy ```rust fn get_or_generate_keys(width: u8, poly: u64, reflected: bool) -> [u64; 23] { let cache_key = CrcParamsCacheKey { width, poly, reflected }; // Try cache read first if let Ok(cache) = get_cache().read() { if let Some(keys) = cache.get(&cache_key) { return *keys; } } // Generate keys outside of write lock to minimize lock hold time let keys = generate::keys(width, poly, reflected); // Try to cache the result (best effort) if let Ok(mut cache) = get_cache().write() { cache.insert(cache_key, keys); } keys } ``` ### Error Recovery - Lock poisoning: Continue with direct key generation - Memory pressure: Cache operations become no-ops, functionality preserved - Hash collisions: Handled by HashMap implementation ## Testing Strategy ### Unit Tests 1. **Cache Functionality** - Verify cache hits return identical keys - Verify cache misses generate and store keys - Test cache key equality and hashing 2. **Thread Safety** - Concurrent read access tests - Read-write contention tests - Cache consistency under concurrent access 3. **Performance Tests** - Benchmark cache hit vs. miss performance - Memory usage validation - Comparison with uncached implementation 4. **Edge Cases** - Empty cache behavior - Cache with single entry - Maximum realistic cache size - Lock poisoning recovery ### Integration Tests 1. **API Compatibility** - Existing CrcParams::new() behavior unchanged - All existing tests continue to pass - Identical results for cached vs. uncached keys 2. **Real-world Usage Patterns** - Multiple CrcParams instances with same parameters - Mixed usage with different parameters - Long-running application simulation ### Performance Benchmarks 1. **Cache Hit Performance**: Measure lookup time vs. key generation time 2. **Cache Miss Performance**: Measure overhead of cache check + generation 3. **Memory Usage**: Track cache memory consumption over time 4. **Concurrent Access**: Measure performance under thread contention ## Implementation Phases ### Phase 1: Core Cache Implementation - Create cache module with basic HashMap storage - Implement thread-safe access with RwLock - Add cache key structure and hashing ### Phase 2: Integration - Modify CrcParams::new() to use cache - Add fallback error handling - Ensure API compatibility ### Phase 3: Testing and Optimization - Comprehensive test suite - Performance benchmarking - Memory usage optimization - Documentation updates ## Performance Considerations ### Cache Hit Performance - Expected improvement: 50-100x faster than key generation - RwLock read access: ~10-20ns overhead - HashMap lookup: O(1) average case, ~50-100ns ### Cache Miss Performance - Additional overhead: ~100-200ns for cache check - Write lock acquisition: ~50-100ns - HashMap insertion: O(1) average case ### Memory Efficiency - Cache overhead per entry: ~201 bytes - Expected cache size: 200 bytes - 2KB for typical applications - Memory growth: Linear with unique parameter combinations ### Thread Contention - Read-heavy workload: Excellent scalability - Write contention: Minimal impact (writes are rare after warmup) - Lock-free reads: Multiple threads can read simultaneously ## Security Considerations ### Memory Safety - All cache operations use safe Rust constructs - No unsafe code in cache implementation - HashMap provides memory safety guarantees ### Thread Safety - RwLock prevents data races - Cache key immutability prevents modification after creation - Atomic operations for cache initialization ### Resource Management - Cache growth is bounded by unique parameter combinations - No automatic eviction policy (acceptable for typical usage) - Manual cache clearing available for memory managementcrc-fast-1.10.0/.kiro/specs/crc-params-caching/requirements.md000064400000000000000000000073551046102023000222450ustar 00000000000000# Requirements Document ## Introduction This feature adds a caching layer to the `CrcParams::new()` method to optimize performance when the same CRC parameters are used multiple times during program execution. Currently, each call to `CrcParams::new()` regenerates the folding keys through expensive mathematical operations, even when identical parameters have been used before. The caching system will store generated keys in memory and reuse them for subsequent requests with matching parameters, significantly improving performance for applications that create multiple CRC instances with the same configuration. ## Requirements ### Requirement 1 **User Story:** As a developer using the crc-fast library, I want CrcParams::new() to cache generated keys so that repeated calls with identical parameters don't regenerate keys unnecessarily. #### Acceptance Criteria 1. WHEN CrcParams::new() is called with parameters that have been used before THEN the system SHALL return cached keys instead of regenerating them 2. WHEN CrcParams::new() is called with new parameters for the first time THEN the system SHALL generate the keys and cache them for future use 3. WHEN multiple threads call CrcParams::new() concurrently with the same parameters THEN the system SHALL handle thread safety correctly without data races ### Requirement 2 **User Story:** As a performance-conscious developer, I want the caching mechanism to have minimal overhead so that it doesn't negatively impact single-use scenarios. #### Acceptance Criteria 1. WHEN CrcParams::new() is called for the first time with any parameters THEN the performance overhead SHALL be minimal compared to the current implementation 2. WHEN CrcParams::new() is called with cached parameters THEN the lookup SHALL be significantly faster than key generation 3. WHEN the cache is accessed THEN the lookup mechanism SHALL use efficient data structures optimized for the expected access patterns ### Requirement 3 **User Story:** As a developer working with custom CRC parameters, I want the cache to correctly identify identical parameter sets so that functionally equivalent calls are properly cached. #### Acceptance Criteria 1. WHEN two CrcParams::new() calls use identical values for all parameters (name, width, poly, init, reflected, xorout, check) THEN the system SHALL treat them as cache hits 2. WHEN two CrcParams::new() calls differ in any parameter value THEN the system SHALL treat them as separate cache entries 3. WHEN parameter comparison is performed THEN the system SHALL use all relevant fields to determine cache key uniqueness ### Requirement 4 **User Story:** As a developer concerned about memory usage, I want the cache to have reasonable memory management so that it doesn't grow unbounded in long-running applications. #### Acceptance Criteria 1. WHEN the cache stores parameter sets THEN it SHALL use memory-efficient storage for the cache keys and values 2. WHEN the application runs for extended periods THEN the cache SHALL not consume excessive memory for typical usage patterns 3. IF the cache grows large THEN the system SHALL provide a way to clear or manage cache size (though automatic eviction is not required for this initial implementation) ### Requirement 5 **User Story:** As a developer integrating this library, I want the caching to be transparent so that existing code continues to work without modifications. #### Acceptance Criteria 1. WHEN existing code calls CrcParams::new() THEN it SHALL work exactly as before with no API changes required 2. WHEN CrcParams instances are created THEN they SHALL have identical behavior regardless of whether keys came from cache or generation 3. WHEN the caching system is active THEN it SHALL not affect the public interface or return values of CrcParams::new()crc-fast-1.10.0/.kiro/specs/crc-params-caching/tasks.md000064400000000000000000000072141046102023000206410ustar 00000000000000# Implementation Plan - [x] 1. Create cache module with core data structures - Create `src/cache.rs` module file - Define `CrcParamsCacheKey` struct with `width`, `poly`, and `reflected` fields - Implement `Debug`, `Clone`, `PartialEq`, `Eq`, and `Hash` traits for the cache key - Add module declaration to `src/lib.rs` - _Requirements: 1.1, 3.1, 3.2_ - [x] 2. Implement thread-safe cache storage - Define global cache using `std::sync::OnceLock>>` - Implement `get_cache()` function to initialize and return cache reference - Add necessary imports for `std::collections::HashMap`, `std::sync::{OnceLock, RwLock}` - _Requirements: 1.3, 2.3_ - [x] 3. Implement cache lookup and storage functions - Create `get_or_generate_keys(width: u8, poly: u64, reflected: bool) -> [u64; 23]` function - Implement cache hit path with read lock and HashMap lookup - Implement cache miss path with key generation followed by write lock and storage - Add error handling for lock poisoning with fallback to direct key generation - _Requirements: 1.1, 1.2, 4.1_ - [x] 4. Add cache management utilities - Implement `clear_cache()` function for testing and memory management - Add proper error handling for all cache operations - Ensure all cache operations are best-effort with graceful degradation - _Requirements: 4.3_ - [x] 5. Integrate cache into CrcParams::new() - Modify `CrcParams::new()` in `src/structs.rs` to use `cache::get_or_generate_keys()` - Replace direct call to `generate::keys()` with cache lookup - Ensure all existing functionality remains unchanged - Verify that the function signature and behavior are identical - _Requirements: 1.1, 1.2, 5.1, 5.2, 5.3_ - [x] 6. Create comprehensive unit tests for cache functionality - Add tests to `src/cache.rs` - Write tests for cache key creation, equality, and hashing - Test cache hit scenarios (same parameters return cached keys) - Test cache miss scenarios (new parameters generate and cache keys) - Test that cached keys are identical to directly generated keys - _Requirements: 1.1, 1.2, 3.1, 3.2_ - [x] 7. Add thread safety tests - Write concurrent access tests using `std::thread` - Test multiple threads reading from cache simultaneously - Test read-write contention scenarios - Verify cache consistency under concurrent access - Test lock poisoning recovery behavior - _Requirements: 1.3_ - [x] 8. Create integration tests for CrcParams compatibility - Add tests to verify `CrcParams::new()` behavior is unchanged - Test that all existing CRC parameter combinations work correctly - Verify that cached and uncached results are identical - Test multiple `CrcParams` instances with same parameters use cached keys - _Requirements: 5.1, 5.2, 5.3_ - [x] 9. Add comprehensive error handling tests - Test cache behavior when locks are poisoned - Test memory allocation failure scenarios - Verify fallback to direct key generation works correctly - Test cache operations under memory pressure - _Requirements: 4.1, 4.2_ - [x] 10. Update existing tests to work with caching - Run all existing tests to ensure no regressions - Update any tests that might be affected by caching behavior - Ensure test isolation by clearing cache between tests if needed - Verify all CRC algorithm tests still pass - _Requirements: 5.1, 5.2, 5.3_ - [x] 11. Add documentation and finalize implementation - Add inline documentation for all new public and internal functions - Update module-level documentation - Add usage examples in code comments - Ensure all code follows existing project style and conventions - _Requirements: 5.3_crc-fast-1.10.0/.kiro/specs/crc-width32-shared-base/design.md000064400000000000000000000255601046102023000215540ustar 00000000000000# Design Document: CRC Width-32 Shared Base ## Overview This design refactors the CRC-16 and CRC-32 algorithm implementations to share a common base module. Since CRC-16 operates in 32-bit space (scaling 16-bit values up for processing, then down for results), both widths use nearly identical SIMD operations. By extracting this shared logic into `src/crc32/width32_ops.rs`, we eliminate ~200 lines of duplicated code and prepare the codebase for future CRC width additions. ## Architecture ### Current Structure ``` src/ ├── crc16/ │ ├── algorithm.rs # Width16 impl + process_0_to_15 (duplicated) │ ├── consts.rs │ └── mod.rs ├── crc32/ │ ├── algorithm.rs # Width32 impl + process_0_to_15 (duplicated) │ ├── consts.rs │ └── mod.rs ├── crc64/ │ ├── algorithm.rs # Width64 impl + process_0_to_15 (unique) │ ├── consts.rs │ └── mod.rs └── algorithm.rs # Shared algorithm infrastructure ``` ### Proposed Structure ``` src/ ├── crc16/ │ ├── algorithm.rs # Width16 impl (delegates to width32_ops) │ ├── consts.rs │ └── mod.rs ├── crc32/ │ ├── algorithm.rs # Width32 impl (delegates to width32_ops) │ ├── consts.rs │ ├── mod.rs │ └── width32_ops.rs # NEW: Shared 32-bit-space operations ├── crc64/ │ ├── algorithm.rs # Width64 impl + process_0_to_15 (unchanged) │ ├── consts.rs │ └── mod.rs └── algorithm.rs # Shared algorithm infrastructure ``` ## Components and Interfaces ### 1. New Module: `src/crc32/width32_ops.rs` This module contains all shared 32-bit-space operations: ```rust //! Shared operations for CRC widths that operate in 32-bit space (CRC-16, CRC-32). //! //! CRC-16 computation scales 16-bit values to 32-bit space, uses these operations, //! then scales results back to 16 bits. CRC-32 uses these operations directly. use crate::algorithm; use crate::consts::CRC_CHUNK_SIZE; use crate::crc32::consts::{PSHUFB_SHF_TABLE_FORWARD, PSHUFB_SHF_TABLE_REVERSE, SIMD_CONSTANTS}; use crate::enums::Reflector; use crate::structs::CrcState; use crate::traits::{ArchOps, EnhancedCrcWidth}; /// SIMD constants shared by CRC-16 and CRC-32 pub const WIDTH32_CONSTANTS_REFLECTED: [[u64; 2]; 4] = [ [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask [0x8080808080808080, 0x8080808080808080], // mask1 [0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF], // mask2 reverse [0x0000000000000000, 0x0000000000000000], // unused ]; pub const WIDTH32_CONSTANTS_FORWARD: [[u64; 2]; 4] = [ [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask [0x8080808080808080, 0x8080808080808080], // mask1 [0xffffffffffffffff, 0x00000000ffffffff], // mask2 forward [0x0000000000000000, 0x0000000000000000], // unused ]; /// Load constants for 32-bit-space CRC operations #[inline(always)] pub fn load_constants(reflected: bool) -> [[u64; 2]; 4] { if reflected { WIDTH32_CONSTANTS_REFLECTED } else { WIDTH32_CONSTANTS_FORWARD } } /// Fold 16 bytes for 32-bit-space CRC operations #[inline(always)] pub unsafe fn fold_16( state: &mut CrcState, coeff: T::Vector, data_to_xor: T::Vector, ops: &T, ) where T::Vector: Copy, { let (h, l) = if state.reflected { ( ops.carryless_mul_10(state.value, coeff), ops.carryless_mul_01(state.value, coeff), ) } else { ( ops.carryless_mul_00(state.value, coeff), ops.carryless_mul_11(state.value, coeff), ) }; state.value = ops.xor3_vectors(h, l, data_to_xor); } /// Fold to width for 32-bit-space CRC operations #[inline(always)] pub unsafe fn fold_width( state: &mut CrcState, high: u64, low: u64, ops: &T, ) where T::Vector: Copy, { let coeff_vector_low = ops.create_vector_from_u64_pair_non_reflected(0, low); let coeff_vector_high = ops.create_vector_from_u64_pair_non_reflected(high, 0); state.value = if state.reflected { ops.xor_vectors( ops.carryless_mul_00(state.value, coeff_vector_low), ops.shift_right_8(state.value), ) } else { ops.xor_vectors( ops.carryless_mul_01(state.value, coeff_vector_low), ops.shift_left_8(state.value), ) }; let (clmul, masked) = if state.reflected { let mask2 = ops.load_aligned(&[0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF]); let masked = ops.and_vectors(state.value, mask2); let shifted = ops.shift_left_12(state.value); let clmul = ops.carryless_mul_11(shifted, coeff_vector_high); (clmul, masked) } else { let mask2 = ops.load_aligned(&[0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF]); let masked = ops.and_vectors(state.value, mask2); let shifted = ops.shift_right_12(state.value); let clmul = ops.carryless_mul_10(shifted, coeff_vector_high); (clmul, masked) }; state.value = ops.xor_vectors(clmul, masked); } /// Barrett reduction for 32-bit-space CRC operations /// Returns the full u64 result; caller extracts appropriate bits #[inline(always)] pub unsafe fn barrett_reduction( state: &CrcState, poly: u64, mu: u64, ops: &T, ) -> [u64; 2] where T::Vector: Copy, { let x = state.value; let mu_poly = ops.create_vector_from_u64_pair_non_reflected(poly, mu); if state.reflected { let clmul1 = ops.carryless_mul_00(x, mu_poly); let clmul2 = ops.carryless_mul_10(clmul1, mu_poly); let xorred = ops.xor_vectors(x, clmul2); ops.extract_u64s(xorred) } else { let clmul1 = ops.shift_left_4(ops.carryless_mul_01(x, mu_poly)); let clmul2_shifted = ops.shift_left_4(ops.carryless_mul_11(clmul1, mu_poly)); let final_xor = ops.xor_vectors(clmul2_shifted, x); ops.extract_u64s(final_xor) } } /// Create coefficient vector for 32-bit-space CRC operations #[inline(always)] pub unsafe fn create_coefficient( high: u64, low: u64, ops: &T, ) -> T::Vector where T::Vector: Copy, { ops.create_vector_from_u64_pair_non_reflected(high, low) } /// Get shuffle table pointer for 32-bit-space CRC operations #[inline(always)] pub fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize) { if reflected { let base_ptr = &PSHUFB_SHF_TABLE_REVERSE as *const _ as *const u8; (base_ptr, remaining_len) } else { let base_ptr = &PSHUFB_SHF_TABLE_FORWARD as *const _ as *const u8; (base_ptr, 16 - remaining_len) } } /// Process inputs smaller than 16 bytes for 32-bit-space CRC operations #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] pub unsafe fn process_0_to_15( data: &[u8], state: &mut CrcState, reflector: &Reflector, keys: [u64; 23], ops: &T, ) -> W::Value where T::Vector: Copy, { // Implementation shared by CRC-16 and CRC-32 // ... (full implementation) } ``` ### 2. Updated `src/crc16/algorithm.rs` The Width16 implementation delegates to shared operations: ```rust impl EnhancedCrcWidth for Width16 { #[inline(always)] fn load_constants(reflected: bool) -> [[u64; 2]; 4] { crate::crc32::width32_ops::load_constants(reflected) } #[inline(always)] unsafe fn fold_16(...) { crate::crc32::width32_ops::fold_16(state, coeff, data_to_xor, ops) } #[inline(always)] unsafe fn barrett_reduction(...) -> Self::Value { let u64s = crate::crc32::width32_ops::barrett_reduction(state, poly, mu, ops); // Extract 16-bit result if state.reflected { u64s[1] as u16 } else { ((u64s[0] >> 32) >> 16) as u16 } } // ... other delegating methods } // process_0_to_15 delegates to shared implementation pub(crate) unsafe fn process_0_to_15(...) -> W::Value { crate::crc32::width32_ops::process_0_to_15::(data, state, reflector, keys, ops) } ``` ### 3. Updated `src/crc32/algorithm.rs` The Width32 implementation also delegates to shared operations: ```rust impl EnhancedCrcWidth for Width32 { #[inline(always)] fn load_constants(reflected: bool) -> [[u64; 2]; 4] { crate::crc32::width32_ops::load_constants(reflected) } #[inline(always)] unsafe fn barrett_reduction(...) -> Self::Value { let u64s = crate::crc32::width32_ops::barrett_reduction(state, poly, mu, ops); // Extract 32-bit result if state.reflected { u64s[1] as u32 } else { (u64s[0] >> 32) as u32 } } // ... other delegating methods } // process_0_to_15 delegates to shared implementation pub(crate) unsafe fn process_0_to_15(...) -> W::Value { crate::crc32::width32_ops::process_0_to_15::(data, state, reflector, keys, ops) } ``` ### 4. Updated `src/crc32/mod.rs` Export the new module: ```rust pub mod algorithm; pub mod consts; pub(crate) mod width32_ops; // NEW ``` ## Data Models No changes to data models. The refactoring only affects internal implementation. ## Correctness Properties *A property is a characteristic or behavior that should hold true across all valid executions of a system.* ### Property 1: CRC-16 Computation Unchanged *For any* input byte sequence and any CRC-16 parameters, the computed checksum after refactoring SHALL equal the checksum computed before refactoring. **Validates: Requirements 4.1** ### Property 2: CRC-32 Computation Unchanged *For any* input byte sequence and any CRC-32 parameters, the computed checksum after refactoring SHALL equal the checksum computed before refactoring. **Validates: Requirements 4.2** ### Property 3: CRC-64 Computation Unchanged *For any* input byte sequence and any CRC-64 parameters, the computed checksum after refactoring SHALL equal the checksum computed before refactoring. **Validates: Requirements 4.3** ## Error Handling No changes to error handling. The refactoring is purely internal. ## Testing Strategy ### Existing Tests All existing tests serve as regression tests: - CRC-16 check value tests (0x906E, 0xD0DB) - CRC-32 check value tests - CRC-64 check value tests - Property-based tests comparing against `crc` crate - Length-based tests for various input sizes ### Verification Approach 1. Run `cargo test` before refactoring to establish baseline 2. Perform refactoring 3. Run `cargo test` after refactoring to verify no regressions 4. Run `cargo fmt --check` and `cargo clippy -- -D warnings` No new tests are needed since this is a pure refactoring with no behavior changes. crc-fast-1.10.0/.kiro/specs/crc-width32-shared-base/prompt.md000064400000000000000000000025431046102023000216200ustar 00000000000000# CRC Width-32 Shared Base Refactoring ## Goal Refactor the CRC-16 and CRC-32 algorithm implementations to share a common base, reducing code duplication and preparing for future CRC width additions (like CRC-8). ## Background CRC-16 computation is performed by scaling 16-bit values to 32-bit space, using the CRC-32 algorithm infrastructure, and then scaling the result back to 16 bits. This means CRC-16 and CRC-32 share nearly identical implementations for: - `process_0_to_15()` function (~100 lines each, nearly identical) - `load_constants()` - identical constants - `fold_16()` - identical logic - `fold_width()` - identical logic - `barrett_reduction()` - nearly identical (just different final extraction) - `create_coefficient()` - identical - `perform_final_reduction()` - identical - `get_last_bytes_table_ptr()` - identical ## Approach Create a shared module (`src/crc32/width32_ops.rs`) containing the common 32-bit-space operations that both CRC-16 and CRC-32 use. The Width16 and Width32 trait implementations will delegate to these shared functions, with Width16 performing the final 16-bit extraction where needed. ## Constraints - Must maintain full backwards compatibility with existing CRC-16, CRC-32, and CRC-64 functionality - All existing tests must continue to pass - The refactoring should make it easier to add future CRC widths (like CRC-8) crc-fast-1.10.0/.kiro/specs/crc-width32-shared-base/requirements.md000064400000000000000000000120731046102023000230210ustar 00000000000000# Requirements Document ## Introduction This feature refactors the CRC-16 and CRC-32 algorithm implementations to share a common base module, reducing code duplication. Since CRC-16 operates in 32-bit space (scaling values up and down), both widths use nearly identical SIMD operations. Extracting this shared logic into a common module improves maintainability and prepares the codebase for future CRC width additions. ## Glossary - **Width32_Ops**: The shared module containing 32-bit-space SIMD operations used by both CRC-16 and CRC-32 - **EnhancedCrcWidth**: The trait that defines width-specific CRC operations - **Width16**: The CRC-16 width implementation that operates in 32-bit space - **Width32**: The CRC-32 width implementation - **Width64**: The CRC-64 width implementation (unchanged by this refactoring) - **process_0_to_15**: The function handling small inputs (0-15 bytes) - **Barrett_Reduction**: The algorithm for fast modular reduction used in final CRC computation ## Requirements ### Requirement 1: Create Shared Width32 Operations Module **User Story:** As a library maintainer, I want shared 32-bit-space operations in a common module, so that CRC-16 and CRC-32 implementations don't duplicate code. #### Acceptance Criteria 1. THE system SHALL create a new module `src/crc32/width32_ops.rs` containing shared 32-bit-space operations 2. THE Width32_Ops module SHALL export a `process_0_to_15_width32()` function that handles small inputs for both CRC-16 and CRC-32 3. THE Width32_Ops module SHALL export helper functions for `fold_16`, `fold_width`, and `barrett_reduction` operations 4. THE Width32_Ops module SHALL export the shared `load_constants()` values 5. THE Width32_Ops module SHALL export the shared `get_last_bytes_table_ptr()` logic ### Requirement 2: Refactor Width16 Implementation **User Story:** As a library maintainer, I want the Width16 implementation to delegate to shared operations, so that code duplication is eliminated. #### Acceptance Criteria 1. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `fold_16()` to the shared Width32_Ops module 2. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `fold_width()` to the shared Width32_Ops module 3. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `create_coefficient()` to the shared Width32_Ops module 4. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `perform_final_reduction()` to the shared Width32_Ops module 5. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `get_last_bytes_table_ptr()` to the shared Width32_Ops module 6. THE Width16 `barrett_reduction()` SHALL call the shared implementation and extract the 16-bit result 7. THE crc16::algorithm::process_0_to_15 function SHALL be removed and replaced with a call to the shared implementation ### Requirement 3: Refactor Width32 Implementation **User Story:** As a library maintainer, I want the Width32 implementation to use shared operations, so that code duplication is eliminated. #### Acceptance Criteria 1. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `fold_16()` to the shared Width32_Ops module 2. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `fold_width()` to the shared Width32_Ops module 3. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `create_coefficient()` to the shared Width32_Ops module 4. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `perform_final_reduction()` to the shared Width32_Ops module 5. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `get_last_bytes_table_ptr()` to the shared Width32_Ops module 6. THE Width32 `barrett_reduction()` SHALL call the shared implementation and extract the 32-bit result 7. THE crc32::algorithm::process_0_to_15 function SHALL call the shared implementation ### Requirement 4: Backwards Compatibility **User Story:** As an existing library user, I want all CRC functionality to remain unchanged, so that my existing code continues to work correctly. #### Acceptance Criteria 1. WHEN computing CRC-16 checksums after refactoring, THE system SHALL produce identical results to the current implementation 2. WHEN computing CRC-32 checksums after refactoring, THE system SHALL produce identical results to the current implementation 3. WHEN computing CRC-64 checksums after refactoring, THE system SHALL produce identical results to the current implementation 4. THE public API SHALL remain unchanged with no breaking changes 5. ALL existing tests SHALL continue to pass without modification ### Requirement 5: Code Quality **User Story:** As a library maintainer, I want the refactored code to be clean and maintainable, so that future development is easier. #### Acceptance Criteria 1. THE refactored code SHALL pass `cargo fmt --check` without errors 2. THE refactored code SHALL pass `cargo clippy -- -D warnings` without warnings 3. THE refactored code SHALL pass all existing tests via `cargo test` 4. THE shared module SHALL have clear documentation explaining its purpose 5. THE Width16 and Width32 implementations SHALL have comments indicating delegation to shared operations where applicable crc-fast-1.10.0/.kiro/specs/crc-width32-shared-base/tasks.md000064400000000000000000000110231046102023000214150ustar 00000000000000# Implementation Plan: CRC Width-32 Shared Base ## Overview This implementation refactors CRC-16 and CRC-32 to share common 32-bit-space operations, eliminating ~200 lines of duplicated code. The refactoring creates a new `width32_ops.rs` module and updates both Width16 and Width32 implementations to delegate to it. ## Tasks - [x] 1. Create shared width32_ops module - [x] 1.1 Create src/crc32/width32_ops.rs with shared constants - Add module documentation explaining purpose - Add WIDTH32_CONSTANTS_REFLECTED and WIDTH32_CONSTANTS_FORWARD - Add load_constants() function - _Requirements: 1.1, 1.4_ - [x] 1.2 Add shared fold operations to width32_ops - Implement fold_16() function - Implement fold_width() function - _Requirements: 1.3_ - [x] 1.3 Add shared barrett_reduction to width32_ops - Implement barrett_reduction() returning [u64; 2] for caller to extract bits - _Requirements: 1.3_ - [x] 1.4 Add shared helper functions to width32_ops - Implement create_coefficient() function - Implement get_last_bytes_table_ptr() function - _Requirements: 1.3, 1.5_ - [x] 1.5 Add shared process_0_to_15 to width32_ops - Move the shared implementation from crc32/algorithm.rs - _Requirements: 1.2_ - [x] 1.6 Update src/crc32/mod.rs to export width32_ops - Add `pub(crate) mod width32_ops;` - _Requirements: 1.1_ - [x] 2. Checkpoint - Verify module compiles - Ensure `cargo check` passes - [x] 3. Refactor Width32 implementation - [x] 3.1 Update Width32 load_constants to delegate - Call width32_ops::load_constants() - _Requirements: 3.1_ - [x] 3.2 Update Width32 fold_16 to delegate - Call width32_ops::fold_16() - _Requirements: 3.1_ - [x] 3.3 Update Width32 fold_width to delegate - Call width32_ops::fold_width() - _Requirements: 3.2_ - [x] 3.4 Update Width32 barrett_reduction to delegate - Call width32_ops::barrett_reduction() and extract 32-bit result - _Requirements: 3.6_ - [x] 3.5 Update Width32 create_coefficient to delegate - Call width32_ops::create_coefficient() - _Requirements: 3.3_ - [x] 3.6 Update Width32 perform_final_reduction to delegate - Call width32_ops::fold_width() and width32_ops::barrett_reduction() - _Requirements: 3.4_ - [x] 3.7 Update Width32 get_last_bytes_table_ptr to delegate - Call width32_ops::get_last_bytes_table_ptr() - _Requirements: 3.5_ - [x] 3.8 Update crc32::algorithm::process_0_to_15 to delegate - Call width32_ops::process_0_to_15() - _Requirements: 3.7_ - [x] 4. Checkpoint - Verify CRC-32 still works - Run `cargo test` to ensure CRC-32 tests pass - [x] 5. Refactor Width16 implementation - [x] 5.1 Update Width16 load_constants to delegate - Call width32_ops::load_constants() - _Requirements: 2.1_ - [x] 5.2 Update Width16 fold_16 to delegate - Call width32_ops::fold_16() - _Requirements: 2.1_ - [x] 5.3 Update Width16 fold_width to delegate - Call width32_ops::fold_width() - _Requirements: 2.2_ - [x] 5.4 Update Width16 barrett_reduction to delegate - Call width32_ops::barrett_reduction() and extract 16-bit result - _Requirements: 2.6_ - [x] 5.5 Update Width16 create_coefficient to delegate - Call width32_ops::create_coefficient() - _Requirements: 2.3_ - [x] 5.6 Update Width16 perform_final_reduction to delegate - Call width32_ops::fold_width() and width32_ops::barrett_reduction() - _Requirements: 2.4_ - [x] 5.7 Update Width16 get_last_bytes_table_ptr to delegate - Call width32_ops::get_last_bytes_table_ptr() - _Requirements: 2.5_ - [x] 5.8 Update crc16::algorithm::process_0_to_15 to delegate - Call width32_ops::process_0_to_15() - _Requirements: 2.7_ - [x] 6. Checkpoint - Verify CRC-16 still works - Run `cargo test` to ensure CRC-16 tests pass - [x] 7. Final verification and cleanup - [x] 7.1 Run full test suite - Run `cargo test` to verify all tests pass - _Requirements: 4.5_ - [x] 7.2 Run code quality checks - Run `cargo fmt --check` - Run `cargo clippy -- -D warnings` - _Requirements: 5.1, 5.2, 5.3_ - [x] 7.3 Verify CRC-64 unchanged - Confirm CRC-64 tests still pass - _Requirements: 4.3_ ## Notes - This is a pure refactoring with no behavior changes - All existing tests serve as regression tests - The shared module is placed in crc32/ since CRC-32 is the "native" width for these operations - CRC-16 scales to 32-bit space, uses shared ops, then scales back to 16 bits - CRC-64 remains unchanged as it has different SIMD operations crc-fast-1.10.0/.kiro/specs/crc16-hardware-acceleration/design.md000064400000000000000000000336461046102023000225130ustar 00000000000000# Design Document: CRC-16 Hardware Acceleration ## Overview This design extends the crc-fast library to support hardware-accelerated CRC-16 computation using the same PCLMULQDQ/PMULL-based approach already implemented for CRC-32 and CRC-64. The key insight from the reference implementations is that CRC-16 computation can be performed by scaling the 16-bit values to 32-bit space, using the existing CRC-32 algorithm infrastructure, and then scaling the result back to 16 bits. The implementation follows a two-phase approach: 1. **Phase 1**: Extend the key generator (`generate.rs`) to produce correct CRC-16 folding keys 2. **Phase 2**: Extend the algorithm module to handle width=16 by leveraging the CRC-32 code path with appropriate scaling ## Architecture ### High-Level Design ``` ┌─────────────────────────────────────────────────────────────────────┐ │ Public API │ │ checksum(), Digest, checksum_with_params(), CrcParams::new() │ └─────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ Width Dispatcher │ │ arch/mod.rs: routes to Width16, Width32, or Width64 │ └─────────────────────────────────────────────────────────────────────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ Width16 │ │ Width32 │ │ Width64 │ │ (NEW) │ │(existing)│ │(existing)│ └──────────┘ └──────────┘ └──────────┘ │ │ │ └───────────────┼───────────────┘ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ SIMD Algorithm Core │ │ algorithm.rs: fold-by-8, Barrett reduction │ └─────────────────────────────────────────────────────────────────────┘ ``` ### CRC-16 Scaling Strategy The reference assembly implementations reveal that CRC-16 uses the same PCLMULQDQ algorithm as CRC-32, but with values scaled to 32-bit space: **Forward (non-reflected) CRC-16:** 1. Scale initial CRC: `initial_crc << 16` (shift left 16 bits) 2. Process using CRC-32 algorithm with CRC-16 polynomial scaled to 32 bits 3. Scale result: `result >> 16` (shift right 16 bits) **Reflected CRC-16:** 1. Initial CRC used directly (no scaling needed for reflected) 2. Process using CRC-32 algorithm with reflected CRC-16 polynomial 3. Result extracted from appropriate register position ## Components and Interfaces ### 1. Key Generator Extension (`src/generate.rs`) The key generator must be extended to handle width=16. CRC-16 uses the same exponents as CRC-32 (32*N distances) because the folding algorithm operates on 128-bit SIMD registers regardless of CRC width. ```rust /// Exponents for CRC-16 key generation (same as CRC-32) const CRC16_EXPONENTS: [u64; 23] = CRC32_EXPONENTS; /// Generates folding keys for CRC-16 pub fn keys(width: u8, poly: u64, reflected: bool) -> [u64; 23] { let exponents = match width { 16 => CRC16_EXPONENTS, // NEW 32 => CRC32_EXPONENTS, 64 => CRC64_EXPONENTS, _ => panic!("Unsupported width: {width}"), }; // ... rest of implementation } ``` **Key Generation Functions:** ```rust /// Computes a CRC-16 folding key for a given bit distance fn crc16_key(exponent: u64, reflected: bool, polynomial: u64) -> u64 { // CRC-16 uses 17-bit polynomial (16 bits + implicit leading 1) // Algorithm similar to CRC-32 but with different bit positions if exponent < 32 { return 0; } let mut n: u64 = 0x080000000; // Start at x^32 (same as CRC-32) let e = exponent - 31; for _ in 0..e { n <<= 1; if (n & 0x100000000) != 0 { n ^= polynomial; // polynomial already has bit 32 set } } if reflected { bit_reverse_16(n) >> 31 // Reverse 16 bits, align } else { n << 32 // Shift to upper 32 bits } } /// Computes Barrett reduction constant (μ) for CRC-16 fn crc16_mu(polynomial: u64, reflected: bool) -> u64 { // Same algorithm as CRC-32 mu let mut n: u64 = 0x100000000; let mut q: u64 = 0; for _ in 0..33 { q <<= 1; if n & 0x100000000 != 0 { q |= 1; n ^= polynomial; } n <<= 1; } if reflected { bit_reverse(q) >> 31 } else { q } } /// Formats CRC-16 polynomial for PCLMULQDQ operations fn crc16_polynomial(polynomial: u64, reflected: bool) -> u64 { if !reflected { // Forward: polynomial << 16 with bit 32 set (polynomial << 16) | (1u64 << 32) } else { // Reflected: bit-reverse 16-bit poly, shift left 1, set LSB let reversed = bit_reverse_16(polynomial as u16); ((reversed as u64) << 1) | 1 } } ``` ### 2. Width16 Implementation (`src/structs.rs`) Add a new width type for CRC-16: ```rust /// CRC-16 width implementation #[derive(Clone, Copy)] pub struct Width16; impl CrcWidth for Width16 { const WIDTH: u32 = 16; type Value = u16; } ``` ### 3. EnhancedCrcWidth for Width16 (`src/crc16/algorithm.rs`) The CRC-16 implementation leverages the CRC-32 infrastructure with scaling: ```rust impl EnhancedCrcWidth for Width16 { fn load_constants(reflected: bool) -> [[u64; 2]; 4] { // Use CRC-32 constants - same SIMD operations crc32::consts::SIMD_CONSTANTS } unsafe fn create_state( value: Self::Value, reflected: bool, ops: &T, ) -> CrcState { if reflected { // Reflected: value in low position CrcState { value: ops.create_vector_from_u32(value as u32, false), reflected, } } else { // Forward: scale to 32 bits, position in high bytes let scaled = (value as u32) << 16; CrcState { value: ops.create_vector_from_u32(scaled, true), reflected, } } } unsafe fn extract_result( vector: T::Vector, reflected: bool, ops: &T, ) -> Self::Value { let [low, _high] = ops.extract_u64s(vector); if reflected { // Reflected: extract from appropriate position ((low >> 32) & 0xFFFF) as u16 } else { // Forward: scale back from 32 bits ((low >> 48) & 0xFFFF) as u16 } } // fold_16, fold_width, barrett_reduction delegate to CRC-32 implementations // with appropriate value scaling } ``` ### 4. Architecture Dispatcher Update (`src/arch/mod.rs`) Update the dispatcher to handle width=16: ```rust pub(crate) unsafe fn update(state: u64, bytes: &[u8], params: &CrcParams) -> u64 { match params.width { 16 => algorithm::update::<_, Width16>(state as u16, bytes, params, ops) as u64, 32 => algorithm::update::<_, Width32>(state as u32, bytes, params, ops) as u64, 64 => algorithm::update::<_, Width64>(state, bytes, params, ops), _ => panic!("Unsupported CRC width: {}", params.width), } } ``` ### 5. CRC-16 Constants (`src/crc16/consts.rs`) Update the existing stub with complete constants: ```rust pub const CRC16_IBM_SDLC: CrcParams = CrcParams { name: NAME_CRC16_IBM_SDLC, algorithm: CrcAlgorithm::Crc16IbmSdlc, width: 16, poly: 0x1021, init: 0xFFFF, refin: true, refout: true, xorout: 0xFFFF, check: 0x906E, keys: CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE), }; pub const CRC16_T10_DIF: CrcParams = CrcParams { name: NAME_CRC16_T10_DIF, algorithm: CrcAlgorithm::Crc16T10Dif, width: 16, poly: 0x8BB7, init: 0x0000, refin: false, refout: false, xorout: 0x0000, check: 0xD0DB, keys: CrcKeysStorage::from_keys_fold_256(KEYS_8BB7_FORWARD), }; ``` ## Data Models ### CRC-16 Polynomial Representation | Variant | Polynomial | Scaled Polynomial (32-bit) | Reflected Polynomial | |---------|------------|---------------------------|---------------------| | T10-DIF | 0x8BB7 | 0x18BB70000 | N/A (forward) | | IBM-SDLC | 0x1021 | 0x110210000 | 0x10811 | ### Key Array Structure The 23-key array structure remains unchanged: | Index | Purpose | CRC-16 Value | |-------|---------|--------------| | 0 | Unused | 0 | | 1-2 | 16-byte fold (32*3, 32*5) | Computed | | 3-4 | 128-byte fold (32*31, 32*33) | Computed | | 5-6 | Short fold (32*3, 32*2) | Computed | | 7 | μ (Barrett constant) | Computed | | 8 | Polynomial | Scaled poly | | 9-20 | Progressive fold distances | Computed | | 21-22 | 256-byte fold (32*63, 32*65) | Computed | ## Correctness Properties *A property is a characteristic or behavior that should hold true across all valid executions of a system—essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees.* ### Property 1: Forward CRC-16 Polynomial Formatting *For any* 16-bit polynomial value P, when generating the polynomial key for forward (non-reflected) CRC-16, the result SHALL equal `(P << 16) | (1 << 32)`. **Validates: Requirements 1.5** ### Property 2: Reflected CRC-16 Polynomial Formatting *For any* 16-bit polynomial value P, when generating the polynomial key for reflected CRC-16, the result SHALL equal `(bit_reverse_16(P) << 1) | 1`. **Validates: Requirements 1.6** ### Property 3: CRC-16 Computation Matches Reference *For any* valid CRC-16 parameters (polynomial, init, refin, refout, xorout) and any input byte sequence, the computed CRC-16 checksum SHALL match the result from the `crc` crate reference implementation. **Validates: Requirements 2.1, 2.2, 5.5, 6.1, 6.2, 6.3** ### Property 4: CRC-32 and CRC-64 Backwards Compatibility *For any* existing CRC-32 or CRC-64 configuration and any input byte sequence, the computed checksum SHALL match the result from the `crc` crate reference implementation, ensuring no regression from CRC-16 changes. **Validates: Requirements 3.1, 3.2, 3.4** ### Property 5: CRC-16 Checksum Combination Round-Trip *For any* valid CRC-16 parameters and any two input byte sequences A and B, `checksum_combine(checksum(A), checksum(B), len(B))` SHALL equal `checksum(A + B)`. **Validates: Requirements 6.4** ## Error Handling ### Invalid Width When `CrcParams::new()` is called with an unsupported width (not 16, 32, or 64), the function SHALL panic with a descriptive error message. ### Invalid Polynomial CRC-16 polynomials must fit in 16 bits. If a polynomial larger than 0xFFFF is provided for width=16, the behavior is undefined (caller's responsibility to provide valid parameters). ### Empty Input Empty input (`&[]`) is valid and SHALL return the initial CRC value XORed with xorout, consistent with existing CRC-32 and CRC-64 behavior. ## Testing Strategy ### Unit Tests Unit tests will verify specific examples and edge cases: 1. **Check Value Tests**: Verify "123456789" produces correct check values for CRC-16/IBM-SDLC (0x906E) and CRC-16/T10-DIF (0xD0DB) 2. **Key Generation Tests**: Verify generated keys match reference values in `KEYS_8BB7_FORWARD` and `KEYS_1021_REVERSE` 3. **Empty Input Tests**: Verify empty input returns expected value 4. **Constant Definition Tests**: Verify CRC16_IBM_SDLC and CRC16_T10_DIF have correct parameter values ### Property-Based Tests Property-based tests will use the `proptest` crate (already used in the project) with minimum 100 iterations per property: 1. **Property 1 & 2**: Generate random 16-bit polynomials and verify polynomial key formatting 2. **Property 3**: Generate random CRC-16 parameters and random byte sequences, compare against `crc` crate 3. **Property 4**: Use existing CRC-32/64 configurations with random byte sequences, compare against `crc` crate 4. **Property 5**: Generate random CRC-16 parameters and two random byte sequences, verify combination ### Test Configuration ```rust // Property test configuration proptest! { #![proptest_config(ProptestConfig::with_cases(100))] // Feature: crc16-hardware-acceleration, Property 1: Forward polynomial formatting #[test] fn prop_forward_polynomial_formatting(poly in 0u16..=0xFFFFu16) { let result = crc16_polynomial(poly as u64, false); let expected = ((poly as u64) << 16) | (1u64 << 32); prop_assert_eq!(result, expected); } } ``` ### Regression Testing All existing tests in `src/arch/mod.rs`, `src/test/`, and `tests/` must continue to pass after CRC-16 implementation. crc-fast-1.10.0/.kiro/specs/crc16-hardware-acceleration/prompt.md000064400000000000000000000044351046102023000225550ustar 00000000000000I would like to add hardware accelerated CRC-16 calculations to this Rust library which already has working hardware accelerated CRC-32 and CRC-64 calculations, as well as a working software fallback. There are reference implementations written in MASM in the `/reference` folder which should be useful when comparing the current algorithm implementation in Rust. I have also stubbed out known good values in `/crc16` already for both forward and reverse CRC-16 variants, which match the values in `/reference/crc16f` (forward) and `/reference/crc16r` (reverse) exactly. Those values are missing the wide 256-byte folding keys, though, which we must generate, since the reference doesn't include them. Step one is definitely to update `generate.rs` to properly generate all the CRC-16 folding keys, including the missing 256-byte keys for use with AVX512. The CRC-32 and CRC-64 logic for key generating is working, so we should update it to also generate CRC-16 keys, and test against the known good values in `/reference` and `/crc16`. Once we're sure key generation is correct, including test coverage, we can begin working on the algorithm changes to support CRC-16 calculation as well. By comparing our existing, working Rust implementations of CRC-32 and CRC-16, plus the working MASM examples for CRC-16, CRC-32, and CRC-64 in the `/reference` folder, we should be able to update our Rust algorithm to also compute CRC-16. It will be important to pay special attention to not just the algorithm, but any other constants that might differ from CRC-16, CRC-32, and CRC-64, such as the shuffling constants. We can use the industry standard "123456789" input string to test CRC-16, using the known good check values already established in `/crc16`, as the basis for our tests to ensure we've correctly calculated the CRC-16 values. Do not test any other input strings until the industry standard is to be correctly working. It's very important that we do not break any of the existing functionality around CRC-32 and CRC-64 calculation while adding CRC-16 support, and that we keep the API totally backwards compatible. It's also important that, while we focus on the two reference CRC-16 variants, we are able to support all CRC-16 variants, including ones using custom polynomials, just like we do for CRC-32 and CRC-64.crc-fast-1.10.0/.kiro/specs/crc16-hardware-acceleration/requirements.md000064400000000000000000000200321046102023000237460ustar 00000000000000# Requirements Document ## Introduction This feature adds hardware-accelerated CRC-16 calculation support to the crc-fast library, which already has working hardware-accelerated CRC-32 and CRC-64 implementations. The implementation will leverage PCLMULQDQ/PMULL SIMD instructions for high-performance CRC-16 computation, supporting any CRC-16 variant (both forward/non-reflected and reflected). While CRC-16/IBM-SDLC and CRC-16/T10-DIF serve as reference variants for initial validation, the final implementation must support custom CRC-16 variants with arbitrary polynomials, just like the existing CRC-32 and CRC-64 support. The feature must maintain full backwards compatibility with existing CRC-32 and CRC-64 functionality. ## Glossary - **CRC-16**: A 16-bit Cyclic Redundancy Check algorithm used for error detection - **Key_Generator**: The module responsible for generating PCLMULQDQ folding keys from CRC polynomials - **Folding_Keys**: Precomputed constants (x^n mod P(x)) used for parallel CRC computation via PCLMULQDQ - **PCLMULQDQ**: Intel's carryless multiplication instruction used for hardware-accelerated CRC computation - **PMULL**: ARM's polynomial multiplication instruction, equivalent to PCLMULQDQ - **Forward_CRC**: A CRC variant where data is processed MSB-first (refin=false) - **Reflected_CRC**: A CRC variant where data is processed LSB-first (refin=true) - **CRC-16/T10-DIF**: A forward (non-reflected) CRC-16 variant with polynomial 0x8BB7 - **CRC-16/IBM-SDLC**: A reflected CRC-16 variant with polynomial 0x1021 - **Barrett_Reduction**: An algorithm for fast modular reduction without division, used in final CRC computation - **Mu_Constant**: The Barrett reduction constant (μ = floor(x^64/P(x))) used for final reduction - **Algorithm_Module**: The SIMD-based CRC calculation module that processes data using folding keys - **Check_Value**: The expected CRC result for the industry standard test string "123456789" - **256-Byte_Folding_Keys**: Extended folding keys (indices 21-22) for AVX-512 VPCLMULQDQ 256-byte chunk processing ## Requirements ### Requirement 1: CRC-16 Key Generation **User Story:** As a library maintainer, I want the key generator to produce correct CRC-16 folding keys for any CRC-16 polynomial, so that hardware-accelerated CRC-16 computation produces correct results for all variants. #### Acceptance Criteria 1. WHEN the Key_Generator receives a 16-bit polynomial and forward reflection mode, THE Key_Generator SHALL produce folding keys that match the reference values in KEYS_8BB7_FORWARD for CRC-16/T10-DIF 2. WHEN the Key_Generator receives a 16-bit polynomial and reflected mode, THE Key_Generator SHALL produce folding keys that match the reference values in KEYS_1021_REVERSE for CRC-16/IBM-SDLC 3. WHEN generating CRC-16 keys for any 16-bit polynomial, THE Key_Generator SHALL use exponents based on 32-bit distances (32*N) matching the CRC-32 exponent pattern 4. WHEN generating the Mu_Constant for any CRC-16 polynomial, THE Key_Generator SHALL compute floor(x^64/P(x)) where P(x) is the 17-bit polynomial (16-bit poly with implicit leading 1) 5. WHEN generating the polynomial key for any forward CRC-16, THE Key_Generator SHALL shift the polynomial left by 16 bits and set bit 32 6. WHEN generating the polynomial key for any reflected CRC-16, THE Key_Generator SHALL bit-reverse the 16-bit polynomial, shift left by 1, and set the LSB 7. WHEN generating 256-byte folding keys (indices 21-22) for any CRC-16 polynomial, THE Key_Generator SHALL compute keys for distances 32*63 and 32*65 bits ### Requirement 2: CRC-16 Algorithm Implementation **User Story:** As a developer, I want to compute CRC-16 checksums using hardware acceleration for any CRC-16 variant, so that I can achieve high-performance CRC-16 calculations. #### Acceptance Criteria 1. WHEN computing CRC-16 for the industry standard string "123456789", THE Algorithm_Module SHALL produce the Check_Value 0x906E for CRC-16/IBM-SDLC 2. WHEN computing CRC-16 for the industry standard string "123456789", THE Algorithm_Module SHALL produce the Check_Value 0xD0DB for CRC-16/T10-DIF 3. WHEN processing data for any forward CRC-16 variant, THE Algorithm_Module SHALL byte-reflect input data using pshufb before folding operations 4. WHEN processing data for any reflected CRC-16 variant, THE Algorithm_Module SHALL process input data without byte reflection 5. WHEN performing the final Barrett reduction for any CRC-16 variant, THE Algorithm_Module SHALL extract the 16-bit result from the appropriate register position 6. WHEN the initial CRC value is provided for any forward CRC-16 variant, THE Algorithm_Module SHALL scale it to 32 bits by shifting left 16 bits before processing 7. WHEN the final CRC is computed for any forward CRC-16 variant, THE Algorithm_Module SHALL scale the result back to 16 bits by shifting right 16 bits ### Requirement 3: Backwards Compatibility **User Story:** As an existing library user, I want CRC-32 and CRC-64 functionality to remain unchanged, so that my existing code continues to work correctly. #### Acceptance Criteria 1. WHEN computing CRC-32 checksums after CRC-16 support is added, THE Algorithm_Module SHALL produce identical results to the current implementation 2. WHEN computing CRC-64 checksums after CRC-16 support is added, THE Algorithm_Module SHALL produce identical results to the current implementation 3. WHEN using the existing public API functions (checksum, Digest, checksum_combine), THE API SHALL maintain the same function signatures and behavior 4. WHEN generating CRC-32 or CRC-64 keys, THE Key_Generator SHALL produce identical keys to the current implementation ### Requirement 4: Test Coverage **User Story:** As a library maintainer, I want comprehensive tests for CRC-16 functionality, so that I can ensure correctness and prevent regressions. #### Acceptance Criteria 1. WHEN testing CRC-16 key generation, THE Test_Suite SHALL verify generated keys match the known good reference values from the reference implementation 2. WHEN testing CRC-16 computation, THE Test_Suite SHALL verify the Check_Value for the industry standard "123456789" string for both CRC-16/IBM-SDLC and CRC-16/T10-DIF 3. WHEN testing CRC-16 computation, THE Test_Suite SHALL compare results against the `crc` crate reference implementation for various input sizes 4. WHEN testing backwards compatibility, THE Test_Suite SHALL verify all existing CRC-32 and CRC-64 tests continue to pass ### Requirement 5: CRC-16 Constants and Parameters **User Story:** As a library maintainer, I want properly defined CRC-16 constants and parameters, so that the implementation is consistent with industry standards and supports custom variants. #### Acceptance Criteria 1. THE CRC-16 module SHALL define CRC16_IBM_SDLC with polynomial 0x1021, init 0xFFFF, refin=true, refout=true, xorout=0xFFFF, check=0x906E 2. THE CRC-16 module SHALL define CRC16_T10_DIF with polynomial 0x8BB7, init 0x0000, refin=false, refout=false, xorout=0x0000, check=0xD0DB 3. WHEN storing CRC-16 parameters, THE CrcParams structure SHALL use width=16 to distinguish from CRC-32 and CRC-64 variants 4. THE CRC-16 module SHALL include SIMD constants (smask, mask1, mask2) appropriate for 16-bit CRC computation 5. WHEN creating custom CRC-16 parameters via CrcParams::new(), THE Key_Generator SHALL dynamically generate folding keys for the provided polynomial ### Requirement 6: Custom CRC-16 Variant Support **User Story:** As a developer, I want to use custom CRC-16 parameters with any polynomial, so that I can compute CRC-16 checksums for non-standard variants. #### Acceptance Criteria 1. WHEN CrcParams::new() is called with width=16 and any valid polynomial, THE system SHALL generate correct folding keys for that polynomial 2. WHEN checksum_with_params() is called with custom CRC-16 parameters, THE Algorithm_Module SHALL compute the correct CRC-16 checksum 3. WHEN Digest::new_with_params() is called with custom CRC-16 parameters, THE Digest SHALL correctly accumulate and finalize CRC-16 checksums 4. WHEN checksum_combine_with_params() is called with custom CRC-16 parameters, THE system SHALL correctly combine two CRC-16 checksums crc-fast-1.10.0/.kiro/specs/crc16-hardware-acceleration/tasks.md000064400000000000000000000131161046102023000223550ustar 00000000000000# Implementation Plan: CRC-16 Hardware Acceleration ## Overview This implementation adds hardware-accelerated CRC-16 support to the crc-fast library in two phases: first extending the key generator, then extending the algorithm module. The implementation leverages the existing CRC-32 infrastructure by scaling CRC-16 values to 32-bit space. ## Tasks - [x] 1. Extend Key Generator for CRC-16 - [x] 1.1 Add CRC-16 exponents constant and update keys() function - Add `CRC16_EXPONENTS` constant (same as CRC32_EXPONENTS) - Update `keys()` function to handle width=16 - Update `key()` function to dispatch to `crc16_key()` - _Requirements: 1.3_ - [x] 1.2 Implement crc16_key() function - Compute x^exponent mod P(x) for 17-bit CRC-16 polynomial - Handle both forward and reflected modes - Follow the pattern from reference/crc16f/crc16fg.cpp and reference/crc16r/crc16rg.cpp - _Requirements: 1.1, 1.2, 1.7_ - [x] 1.3 Implement crc16_mu() function - Compute Barrett reduction constant floor(x^64/P(x)) - Handle both forward and reflected modes - _Requirements: 1.4_ - [x] 1.4 Implement crc16_polynomial() function - Format polynomial for forward mode: (poly << 16) | (1 << 32) - Format polynomial for reflected mode: (bit_reverse_16(poly) << 1) | 1 - _Requirements: 1.5, 1.6_ - [x] 1.5 Write property tests for CRC-16 key generation - **Property 1: Forward polynomial formatting** - **Property 2: Reflected polynomial formatting** - **Validates: Requirements 1.5, 1.6** - [x] 1.6 Add unit tests for CRC-16 key generation - Test generated keys match KEYS_8BB7_FORWARD for CRC-16/T10-DIF - Test generated keys match KEYS_1021_REVERSE for CRC-16/IBM-SDLC - Add CRC-16 test configs to TEST_ALL_CONFIGS - _Requirements: 1.1, 1.2, 4.1_ - [x] 2. Checkpoint - Verify key generation - Ensure all tests pass, ask the user if questions arise. - [x] 3. Update CRC-16 Constants and Parameters - [x] 3.1 Update src/crc16/consts.rs with complete constants - Update KEYS_8BB7_FORWARD with 256-byte folding keys (indices 21-22) - Update KEYS_1021_REVERSE with 256-byte folding keys (indices 21-22) - Add SIMD_CONSTANTS if different from CRC-32 - _Requirements: 5.1, 5.2, 5.4_ - [x] 3.2 Add Width16 struct to src/structs.rs - Implement CrcWidth trait for Width16 - _Requirements: 5.3_ - [x] 3.3 Update CrcAlgorithm enum and CrcParams::new() - Add Crc16Custom variant to CrcAlgorithm enum - Update CrcParams::new() to handle width=16 - Update cache module if needed for CRC-16 key caching - _Requirements: 5.5, 6.1_ - [x] 4. Implement CRC-16 Algorithm - [x] 4.1 Create src/crc16/algorithm.rs with EnhancedCrcWidth implementation - Implement EnhancedCrcWidth for Width16 - Implement create_state() with proper scaling for forward mode - Implement extract_result() with proper scaling - Implement fold_16(), fold_width(), barrett_reduction() - Implement create_coefficient() and perform_final_reduction() - Implement get_last_bytes_table_ptr() - _Requirements: 2.3, 2.4, 2.5, 2.6, 2.7_ - [x] 4.2 Implement process_0_to_15 for CRC-16 - Handle small inputs (0-15 bytes) for CRC-16 - Follow pattern from crc32/algorithm.rs - _Requirements: 2.1, 2.2_ - [x] 4.3 Update architecture dispatcher for CRC-16 - Update src/arch/mod.rs to handle width=16 - Route to Width16 implementation - _Requirements: 2.1, 2.2_ - [x] 4.4 Update software fallback for CRC-16 - Update src/arch/software.rs to handle CRC-16 algorithms - Add CRC-16 reference implementations from crc crate - _Requirements: 2.1, 2.2_ - [x] 5. Checkpoint - Verify basic CRC-16 computation - Ensure all tests pass, ask the user if questions arise. - [x] 6. Add Public API Support for CRC-16 - [x] 6.1 Update src/lib.rs checksum() function - Add cases for Crc16IbmSdlc and Crc16T10Dif - _Requirements: 2.1, 2.2_ - [x] 6.2 Update Digest and other public APIs - Ensure Digest works with CRC-16 algorithms - Ensure checksum_combine works with CRC-16 - _Requirements: 6.2, 6.3, 6.4_ - [-] 7. Add Comprehensive Tests - [x] 7.1 Add CRC-16 check value tests - Test "123456789" produces 0x906E for CRC-16/IBM-SDLC - Test "123456789" produces 0xD0DB for CRC-16/T10-DIF - _Requirements: 2.1, 2.2, 4.2_ - [x] 7.2 Write property test for CRC-16 computation matches reference - **Property 3: CRC-16 computation matches reference** - **Validates: Requirements 2.1, 2.2, 5.5, 6.1, 6.2, 6.3** - [x] 7.3 Write property test for backwards compatibility - **Property 4: CRC-32 and CRC-64 backwards compatibility** - **Validates: Requirements 3.1, 3.2, 3.4** - [x] 7.4 Write property test for CRC-16 checksum combination - **Property 5: CRC-16 checksum combination round-trip** - **Validates: Requirements 6.4** - [x] 7.5 Add CRC-16 to existing test suites - Add CRC-16 configs to TEST_ALL_CONFIGS in src/test/consts.rs - Ensure all length-based tests include CRC-16 - _Requirements: 4.3, 4.4_ - [x] 8. Final Checkpoint - Ensure all tests pass - Ensure all tests pass, ask the user if questions arise. - Run cargo fmt --check - Run cargo clippy -- -D warnings - Run cargo test ## Notes - Tasks marked with `*` are optional and can be skipped for faster MVP - Each task references specific requirements for traceability - Checkpoints ensure incremental validation - Property tests validate universal correctness properties - Unit tests validate specific examples and edge cases - The implementation leverages existing CRC-32 infrastructure to minimize code duplication crc-fast-1.10.0/.kiro/specs/future-proof-crc-params/design.md000064400000000000000000000272201046102023000220250ustar 00000000000000# Design Document ## Overview This design implements a future-proof CrcParams structure using an internal enum-based key storage system that can expand to support different key array sizes without breaking compatibility. The approach maintains the simplicity of const definitions while providing safe key access and zero runtime overhead through compiler optimizations. ## Architecture ### Core Components 1. **CrcKeysStorage Enum**: Internal storage that can hold different key array sizes 2. **CrcParams Structure**: Updated to use CrcKeysStorage internally while maintaining public API 3. **Safe Accessor Methods**: Bounds-checked key access methods on CrcParams 4. **Helper Functions**: Const-friendly constructors for CrcKeysStorage variants ### Design Principles - **Zero Runtime Overhead**: Enum dispatch optimized away by compiler - **Backwards Compatibility**: Existing const definitions require minimal changes - **Gradual Migration**: Can be implemented in phases without breaking builds - **Safety First**: Bounds checking prevents panics from out-of-range access ## Components and Interfaces ### CrcKeysStorage Enum ```rust #[derive(Clone, Copy, Debug)] enum CrcKeysStorage { /// Current 23-key format (for existing algorithms which includes 256 byte folding distances) KeysFold256([u64; 23]), /// Future 25-key format (for potential future expanded folding distances, for testing purposes only) KeysFutureTest([u64; 25]), // Additional variants can be added as needed } ``` **Key Methods:** - `get_key(index: usize) -> u64`: Safe key access with bounds checking - `key_count() -> usize`: Returns actual number of keys available - `from_keys_fold_256(keys: [u64; 23]) -> Self`: Const constructor for 23-key arrays - `from_keys_fold_future_test(keys: [u64; 25]) -> Self`: Const constructor for 25-key arrays ### Updated CrcParams Structure ```rust #[derive(Clone, Copy, Debug)] pub struct CrcParams { pub algorithm: CrcAlgorithm, pub name: &'static str, pub width: u8, pub poly: u64, pub init: u64, pub refin: bool, pub refout: bool, pub xorout: u64, pub check: u64, pub keys: CrcKeysStorage, // Changed from [u64; 23] } ``` **Key Methods:** - `get_key(index: usize) -> u64`: Delegates to CrcKeysStorage - `get_key_checked(index: usize) -> Option`: Optional key access - `key_count() -> usize`: Returns actual key count ### Const Definition Pattern ```rust // Before (Phase 2): pub const CRC32_ISCSI: CrcParams = CrcParams { // ... other fields unchanged ... keys: KEYS_1EDC6F41_REFLECTED, // [u64; 23] }; // After (Phase 3): pub const CRC32_ISCSI: CrcParams = CrcParams { // ... other fields unchanged ... keys: CrcKeysStorage::from_keys_fold_256(KEYS_1EDC6F41_REFLECTED), }; ``` ## Data Models ### Key Storage Variants | Variant | Array Size | Use Case | |---------|------------|----------| | KeysFold256 | [u64; 23] | Current implementation (128/256-byte folding) | | KeysFutureTest | [u64; 25] | Future expansion | ### Migration States | Phase | CrcParams.keys Type | Architecture Code | Const Definitions | |-------|-------------------|------------------|------------------| | 1 | [u64; 23] | Direct access | Unchanged | | 2 | [u64; 23] | Safe accessors | Unchanged | | 3 | CrcKeysStorage | Safe accessors | Updated | ## Error Handling ### Bounds Checking Strategy 1. **Safe Default**: Out-of-bounds key access returns 0 instead of panicking 2. **Optional Access**: `get_key_checked()` returns `None` for invalid indices 3. **Graceful Degradation**: Code continues to function with missing keys ### Error Scenarios | Scenario | Behavior | Rationale | |----------|----------|-----------| | Access key[30] with 23-key storage | Returns 0 | Allows future expansion without breaking existing code | | Invalid key index | Returns 0 | Prevents panics, maintains stability | | Empty key storage | Returns 0 for all indices | Defensive programming | ## Testing Strategy ### Unit Tests 1. **CrcKeysStorage Tests**: - Verify correct key storage and retrieval for each variant - Test bounds checking behavior - Validate const constructor functions 2. **CrcParams Integration Tests**: - Verify safe accessor methods work correctly - Test backwards compatibility with existing const definitions - Validate zero runtime overhead through benchmarks 3. **Migration Tests**: - Test each phase independently - Verify existing functionality remains intact - Validate const definition updates ### Compatibility Tests 1. **Third-Party Simulation**: - Create mock third-party const definitions - Verify they continue working through all phases - Test key access patterns used by external code 2. **Performance Tests**: - Benchmark key access performance vs direct array access - Verify compiler optimizations eliminate enum dispatch - Measure memory usage impact ### Integration Tests 1. **Architecture Code Tests**: - Update existing architecture tests to use safe accessors - Verify SIMD operations work correctly with new key access - Test folding operations across different key storage variants 2. **End-to-End Tests**: - Verify CRC calculations remain correct after migration - Test custom CrcParams creation and usage - Validate `get-custom-params` binary output ## Implementation Phases ### Phase 1: Add New Types - Add CrcKeysStorage enum to codebase - Add helper methods to CrcParams (delegating to existing keys field) - Maintain existing [u64; 23] field for compatibility - All tests continue to pass ### Phase 2: Update Architecture Code - Replace direct key array access with safe accessor methods - Update SIMD and folding code to use `params.get_key(index)` - Maintain backwards compatibility - Performance remains identical ### Phase 3: Switch to New Storage - Change CrcParams.keys field from [u64; 23] to CrcKeysStorage - Update all const definitions to use CrcKeysStorage::from_keys_23() - Update `get-custom-params` binary output format - This is the only breaking change, but minimal impact ## Performance Considerations ### Compiler Optimizations The Rust compiler optimizes enum dispatch when: 1. All variants have the same access pattern 2. The enum is used in hot paths with predictable patterns 3. Inlining is enabled for accessor methods Expected assembly output for `params.get_key(21)`: ```assembly ; Same as direct array access keys[21] mov rax, qword ptr [rdi + 168 + 21*8] ``` ### Memory Layout | Storage Type | Memory Usage | Alignment | |--------------|--------------|-----------| | KeysFold256 | 184 bytes | 8-byte aligned | | KeysFutureTest | 200 bytes | 8-byte aligned | | Enum overhead | 0 bytes | (optimized away) | ## FFI Future-Proofing Design ### Problem Analysis The current C FFI interface has several limitations: 1. **Fixed Key Array**: `CrcFastParams` struct uses `uint64_t keys[23]` hardcoded 2. **No Expansion Path**: Cannot support future key variants with different sizes 3. **Conversion Limitation**: `to_keys_array_23()` only works for current 23-key variant ### FFI Design Solution Since the current FFI hasn't shipped yet, we can make it truly future-proof from the start using a pointer-based approach that can handle any number of keys. #### Truly Future-Proof CrcFastParams Structure ```c // Completely future-proof structure using pointer to keys typedef struct CrcFastParams { enum CrcFastAlgorithm algorithm; uint8_t width; uint64_t poly; uint64_t init; bool refin; bool refout; uint64_t xorout; uint64_t check; uint32_t key_count; // Number of keys available const uint64_t *keys; // Pointer to keys array (managed by Rust) } CrcFastParams; ``` #### Key Management Strategy 1. **Rust-Managed Memory**: Keys remain in Rust-managed memory 2. **Stable Pointers**: Use Box::leak or static storage for stable pointers 3. **Automatic Cleanup**: Rust handles memory management transparently 4. **No Size Limits**: Can support any number of keys (23, 25, 50, 100+) #### Internal Implementation ```rust // Helper to create stable key pointers fn create_stable_key_pointer(keys: &CrcKeysStorage) -> *const u64 { match keys { CrcKeysStorage::KeysFold256(keys) => keys.as_ptr(), CrcKeysStorage::KeysFutureTest(keys) => keys.as_ptr(), // Future variants automatically supported } } impl From for CrcFastParams { fn from(params: CrcParams) -> Self { CrcFastParams { algorithm: params.algorithm.into(), width: params.width, poly: params.poly, init: params.init, refin: params.refin, refout: params.refout, xorout: params.xorout, check: params.check, key_count: params.key_count() as u32, keys: create_stable_key_pointer(¶ms.keys), } } } impl From for CrcParams { fn from(value: CrcFastParams) -> Self { // Convert C array back to appropriate CrcKeysStorage let keys = unsafe { std::slice::from_raw_parts(value.keys, value.key_count as usize) }; let storage = match value.key_count { 23 => CrcKeysStorage::from_keys_fold_256( keys.try_into().expect("Invalid key count for fold_256") ), 25 => CrcKeysStorage::from_keys_fold_future_test( keys.try_into().expect("Invalid key count for future_test") ), _ => panic!("Unsupported key count: {}", value.key_count), }; CrcParams { algorithm: value.algorithm.into(), name: "custom", width: value.width, poly: value.poly, init: value.init, refin: value.refin, refout: value.refout, xorout: value.xorout, check: value.check, keys: storage, } } } ``` #### Enhanced FFI Functions ```rust #[no_mangle] pub extern "C" fn crc_fast_get_custom_params(...) -> CrcFastParams { let params = CrcParams::new(...); params.into() // Automatic conversion } ``` #### Benefits of This Approach 1. **Truly Future-Proof**: No hardcoded limits, supports any key count 2. **Zero Copy**: Keys remain in original Rust memory, just expose pointer 3. **Memory Safe**: Rust manages memory, C gets stable pointers 4. **Performance**: Direct pointer access, no copying overhead 5. **Automatic Support**: New CrcKeysStorage variants automatically work 6. **Idiomatic C**: Direct array access pattern familiar to C developers #### C Usage Pattern ```c // Get custom parameters CrcFastParams params = crc_fast_get_custom_params(...); // Direct access with bounds checking (C developer responsibility) for (uint32_t i = 0; i < params.key_count; i++) { uint64_t key = params.keys[i]; // Use key... } // Or access specific keys directly uint64_t key21 = params.keys[21]; // Direct access (if bounds known) ``` ## Security Considerations ### Bounds Safety The new design eliminates array bounds panics, which could be exploited in unsafe contexts. Safe key access prevents: - Buffer overflow attacks through malicious key indices - Denial of service through panic-induced crashes - Information disclosure through out-of-bounds memory access ### FFI Safety The enhanced FFI design adds additional safety measures: - **Key Count Validation**: V2 functions validate key_count before conversion - **Buffer Bounds**: 32-key buffer prevents overflow while allowing future expansion - **Graceful Degradation**: Invalid key counts return error codes instead of panicking ### Const Safety All const definitions remain compile-time validated, preventing: - Runtime key generation vulnerabilities - Dynamic key modification attacks - Timing-based side-channel attacks on key accesscrc-fast-1.10.0/.kiro/specs/future-proof-crc-params/requirements.md000064400000000000000000000121301046102023000232710ustar 00000000000000# Requirements Document ## Introduction This feature implements a future-proof CrcParams structure that can expand to support additional folding keys (for example, larger folding distances) without breaking API compatibility for third-party applications. The solution maintains the simplicity of const definitions while providing safe key access and internal flexibility for future expansion. ## Requirements ### Requirement 1 **User Story:** As a library maintainer, I want to expand CRC folding key support from 23 to 24+ keys for potentially larger folding distances in the future, so that I can improve performance for large data processing. #### Acceptance Criteria 1. WHEN I add support for larger folding distances THEN existing third-party applications with hardcoded 23-key CrcParams SHALL continue to compile and function correctly 2. WHEN I expand key arrays from 23 to 24+ elements THEN existing const definitions SHALL require minimal changes (only the keys field) ### Requirement 2 **User Story:** As a third-party application developer, I want to define custom CrcParams as const definitions, so that I can embed CRC configurations directly in my code without runtime overhead. #### Acceptance Criteria 1. WHEN I define a custom CrcParams const THEN I SHALL be able to use the same simple struct literal syntax as currently exists 2. WHEN I access CRC keys through the CrcParams interface THEN the performance SHALL be identical to direct array access (zero runtime overhead) 3. WHEN the library expands key support THEN my existing const definitions SHALL continue to work without modification ### Requirement 3 **User Story:** As a library maintainer, I want safe key access methods that prevent array bounds panics, so that the library is robust against future expansion and misuse. #### Acceptance Criteria 1. WHEN architecture code accesses CRC keys THEN it SHALL use bounds-checked methods instead of direct array indexing 2. WHEN code requests key count information THEN it SHALL receive the actual number of available keys for that CrcParams instance ### Requirement 4 **User Story:** As a library maintainer, I want internal flexibility to support different key array sizes, so that I can optimize different CRC algorithms with varying folding distance requirements. #### Acceptance Criteria 1. WHEN I create CrcParams with 23 keys THEN the system SHALL store and access exactly 23 keys efficiently 2. WHEN I create CrcParams with 25 keys THEN the system SHALL store and access exactly 25 keys efficiently 4. WHEN the compiler optimizes the code THEN enum dispatch for key access SHALL be eliminated (zero runtime overhead) ### Requirement 5 **User Story:** As a library maintainer, I want to migrate existing code gradually, so that I can implement the changes in phases without breaking the build at any point. #### Acceptance Criteria 1. WHEN I add the new CrcKeysStorage types THEN existing code SHALL continue to compile and function 2. WHEN I update architecture code to use safe accessors THEN the change SHALL be backward compatible 3. WHEN I switch CrcParams to use CrcKeysStorage THEN the migration SHALL require only updating const definitions 4. WHEN each phase is complete THEN all existing tests SHALL continue to pass ### Requirement 6 **User Story:** As a third-party application developer, I want the `get-custom-params` binary to output the updated `CrcParams` const definition using the new key storage approach, so that I can easily generate future-proof custom CRC parameter definitions. #### Acceptance Criteria 1. WHEN I run the `get-custom-params` binary THEN it SHALL output CrcParams const definitions using CrcKeysStorage::from_keys_fold_256() 2. WHEN I copy the generated const definition THEN it SHALL compile and work correctly with the new CrcParams structure 3. WHEN the output format changes THEN the generated code SHALL remain compatible with the current CrcParams API ### Requirement 7 **User Story:** As a C/C++ application developer, I want the FFI interface to be future-proof for key expansion, so that my applications can benefit from future performance improvements without requiring code changes. #### Acceptance Criteria 1. WHEN the library adds support for larger key arrays THEN existing C code using CrcFastParams SHALL continue to compile and function correctly 2. WHEN I create custom CRC parameters in C THEN I SHALL be able to specify the key count and keys dynamically 3. WHEN I access CRC functionality through the C API THEN the performance SHALL remain identical to direct Rust usage ### Requirement 8 **User Story:** As a library maintainer, I want the C FFI interface to support different key array sizes internally, so that C users can benefit from future CRC algorithm improvements. #### Acceptance Criteria 1. WHEN I add new CrcKeysStorage variants with different key counts THEN the C API SHALL automatically support them 2. WHEN C code specifies custom key arrays THEN they SHALL be automatically converted to the appropriate internal storage format 3. WHEN C code queries key information THEN it SHALL receive accurate key count and key data for the specific CRC algorithm being used crc-fast-1.10.0/.kiro/specs/future-proof-crc-params/tasks.md000064400000000000000000000137441046102023000217070ustar 00000000000000# Implementation Plan - [x] 1. Phase 1: Add CrcKeysStorage enum and helper methods - Add CrcKeysStorage enum with KeysFold256 and KeysFutureTest variants - Implement get_key() and key_count() methods on CrcKeysStorage - Add const constructor methods from_keys_fold_256() and from_keys_fold_future_test() - Add safe accessor methods to CrcParams that delegate to existing keys field - Write comprehensive unit tests for CrcKeysStorage functionality - _Requirements: 4.1, 4.2, 4.4, 5.1_ - [x] 2. Phase 2: Update architecture code to use safe accessors - [x] 2.1 Update SIMD folding code in src/arch/ to use params.get_key() - Replace direct keys[index] access with params.get_key(index) in algorithm.rs - Update VPCLMULQDQ code to use safe key access methods - Update aarch64 and x86 architecture-specific code - _Requirements: 3.1, 5.2_ - [x] 2.2 Update CRC32 algorithm code to use safe accessors - Modify src/crc32/algorithm.rs to use params.get_key() instead of keys[index] - Update fusion code in src/crc32/fusion/ if it accesses keys directly - _Requirements: 3.1, 5.2_ - [x] 2.3 Update CRC64 algorithm code to use safe accessors - Modify src/crc64/algorithm.rs to use params.get_key() instead of keys[index] - Update any other CRC64-specific code that accesses keys directly - _Requirements: 3.1, 5.2_ - [x] 2.4 Run performance benchmarks to verify zero overhead - Benchmark key access performance before and after changes - Verify compiler optimizations eliminate any performance regression - Document that performance remains identical to direct array access - _Requirements: 2.2, 4.4_ - [x] 3. Phase 3: Switch CrcParams to use CrcKeysStorage - [x] 3.1 Update CrcParams struct definition - Change keys field from [u64; 23] to CrcKeysStorage - Update CrcParams accessor methods to delegate to CrcKeysStorage - Remove temporary delegation methods added in Phase 1 - _Requirements: 5.3_ - [x] 3.2 Update all CRC32 const definitions - Update src/crc32/consts.rs to use CrcKeysStorage::from_keys_fold_256() - Modify all CRC32_* const definitions to use new key storage format - Ensure all existing key arrays are properly wrapped - _Requirements: 1.2, 2.1_ - [x] 3.3 Update all CRC64 const definitions - Update src/crc64/consts.rs to use CrcKeysStorage::from_keys_fold_256() - Modify all CRC64_* const definitions to use new key storage format - Ensure all existing key arrays are properly wrapped - _Requirements: 1.2, 2.1_ - [x] 3.4 Update get-custom-params binary output - Modify src/bin/get-custom-params.rs to output CrcKeysStorage format - Update output template to use CrcKeysStorage::from_keys_fold_256() - Test that generated const definitions compile and work correctly - _Requirements: 6.1, 6.2, 6.3_ - [x] 3.5 Update cache system for new CrcParams structure - Modify src/cache.rs to work with CrcKeysStorage-based CrcParams - Update CrcParams::new() method to use new key storage format - Ensure cache functionality remains intact after structural changes - _Requirements: 2.3, 5.3_ - [x] 4. Create comprehensive test suite for future-proof functionality - [x] 4.1 Add unit tests for bounds checking behavior - Test that get_key() returns 0 for out-of-bounds indices - Test that get_key_checked() returns None for invalid indices - Verify key_count() returns correct values for different storage variants - _Requirements: 3.2_ - [x] 4.2 Add integration tests for third-party compatibility - Create mock third-party const definitions using new format - Test that existing key access patterns continue to work - Verify backwards compatibility throughout migration phases - _Requirements: 1.1, 2.3_ - [x] 4.3 Add performance regression tests - Benchmark CRC calculation performance before and after changes - Verify that key access performance matches direct array access - Test memory usage impact of enum-based storage - _Requirements: 2.2, 4.4_ - [x] 4.4 Add future expansion simulation tests - Create test CrcParams using KeysFutureTest variant with 25 keys - Test that code gracefully handles different key array sizes - Verify that expansion to larger key arrays works as designed - _Requirements: 1.1, 4.2_ - [x] 5. Validate migration and run full test suite - Run cargo test to ensure all existing tests pass - Run cargo clippy to ensure code quality standards - Run cargo fmt to ensure consistent formatting - Verify that all CRC calculations produce identical results - Test that third-party usage patterns remain functional - _Requirements: 5.4_ - [x] 6. Implement FFI future-proofing for C/C++ compatibility - [x] 6.1 Update CrcFastParams struct to use pointer-based keys - Change keys field from [u64; 23] to const uint64_t *keys pointer - Add key_count field to track number of available keys - Update From and From conversion implementations - _Requirements: 7.2, 8.1_ - [x] 6.2 Implement stable key pointer management - Add create_stable_key_pointer() helper function for CrcKeysStorage - Ensure key pointers remain valid for the lifetime of CrcFastParams - Handle memory management safely between Rust and C boundaries - _Requirements: 8.2, 8.3_ - [x] 6.3 Update FFI functions to use new CrcFastParams structure - Update existing FFI functions to use new pointer-based CrcFastParams - Ensure all FFI functions handle variable key counts correctly - Test conversion between CrcKeysStorage variants and C pointer access - _Requirements: 7.1, 7.3_ - [x] 6.4 Update C header file and add comprehensive FFI tests - Update CrcFastParams struct definition in libcrc_fast.h to use pointer - Create FFI tests for direct pointer access with different key counts - Test future expansion scenarios with different key counts (23, 25, etc.) - Verify memory safety and pointer stability across FFI boundary - _Requirements: 7.1, 8.1_crc-fast-1.10.0/.kiro/specs/github-release-automation/design.md000064400000000000000000000367461046102023000224350ustar 00000000000000# Design Document ## Overview This design implements a GitHub Actions workflow that automatically builds and publishes binary packages when version tags are pushed to the repository. The workflow leverages the existing test infrastructure, builds optimized binaries for five target platforms, packages them according to platform conventions, and uploads them as GitHub release assets. The solution uses a single workflow file that orchestrates testing, building, packaging, and publishing steps. It reuses the existing test workflow to ensure quality gates are met before creating releases. ## Architecture ### Workflow Structure The release workflow consists of three main stages: 1. **Validation Stage**: Triggers existing test workflow and waits for completion 2. **Build Stage**: Compiles release binaries for all target platforms in parallel 3. **Publish Stage**: Creates packages, generates checksums, and uploads to GitHub release ### Workflow Trigger ```yaml on: push: tags: - '[0-9]+.[0-9]+.[0-9]+' ``` This pattern matches semantic version tags like `1.5.0`, `2.0.1`, etc. ### Build Matrix The workflow uses a matrix strategy to build for multiple platforms: | Target Triple | OS Runner | Package Extension | Runner Rationale | |--------------|-----------|-------------------|------------------| | x86_64-unknown-linux-gnu | ubuntu-22.04 | .tar.gz | Native x86_64 Linux runner, explicit version for stability | | aarch64-unknown-linux-gnu | ubuntu-22.04-arm | .tar.gz | Native ARM64 Linux runner, explicit version for stability | | aarch64-apple-darwin | macos-14 | .tar.gz | Native Apple Silicon runner (M1/M2), explicit version for stability | | x86_64-pc-windows-msvc | windows-2022 | .zip | Native x86_64 Windows runner, explicit version for stability | | aarch64-pc-windows-msvc | windows-11-arm | .zip | Native ARM64 Windows runner (only ARM64 option available) | **Runner Selection Rationale**: #### General Principles 1. **Native Compilation**: Each runner matches the target architecture for optimal performance and to leverage architecture-specific CPU features (AVX-512, NEON, etc.) 2. **Binary Compatibility**: Binaries built on older OS versions are forward-compatible with newer versions, but not backward-compatible 3. **Single Binary Per Architecture**: One binary package per architecture is sufficient due to OS forward compatibility 4. **Explicit Versions**: Using explicit runner versions (ubuntu-22.04, windows-2022, macos-14) instead of -latest provides stability and predictability, preventing unexpected changes when GitHub updates their -latest pointers #### Platform-Specific Decisions **Linux (ubuntu-22.04 for x86_64, ubuntu-22.04-arm for aarch64)**: - Explicit version (22.04) ensures consistent build environment over time - Ubuntu 22.04 uses glibc 2.35, providing good compatibility with modern distributions - Ubuntu binaries have excellent forward compatibility across distributions (Ubuntu, Debian, RHEL, etc.) - When ubuntu-latest moves to 24.04 or newer, our release builds remain stable on 22.04 - No need for multiple Linux versions; one binary per architecture covers the ecosystem - Using explicit versions allows intentional upgrades rather than automatic changes **macOS (macos-14 for aarch64)**: - `macos-14` is the first stable Apple Silicon (M1/M2) runner - macOS binaries built on older versions run on newer versions (forward compatible) - `macos-15` and `macos-latest` would work but offer no compatibility advantage - Using `macos-14` provides maximum compatibility (works on macOS 14, 15, and future versions) - No x86_64 macOS build needed: Apple Silicon Macs can run x86_64 binaries via Rosetta 2, but native ARM64 is preferred - Single ARM64 binary covers all Apple Silicon Macs (M1, M2, M3, M4, etc.) **Windows (windows-2022 for x86_64, windows-11-arm for aarch64)**: - Explicit version (2022) ensures consistent build environment over time - Windows Server 2022 binaries have excellent forward compatibility (run on Windows 11, future versions) - MSVC runtime is statically linked in Rust release builds, eliminating runtime dependencies - When windows-latest moves to Server 2025 or newer, our release builds remain stable on 2022 - `windows-11-arm` is the only ARM64 Windows runner available (no version choice) - Using explicit versions allows intentional upgrades rather than automatic changes - No need for multiple Windows versions; one binary per architecture covers the ecosystem #### Why Not Multiple OS Versions? **Rejected Approach**: Building separate packages for each OS version (e.g., macos-14, macos-15, ubuntu-22.04, ubuntu-24.04) **Reasons**: 1. **Forward Compatibility**: Binaries built on older OS versions work on newer versions 2. **Maintenance Burden**: Multiple packages per architecture increases complexity without benefit 3. **User Confusion**: Users would need to choose between multiple packages for the same architecture 4. **Storage Costs**: More packages means more storage and bandwidth 5. **Testing Overhead**: The existing test workflow already validates across multiple OS versions (macos-14, macos-15, ubuntu-22.04, ubuntu-24.04, etc.), proving binary compatibility **Conclusion**: One binary package per architecture provides maximum compatibility with minimum complexity. The test workflow validates compatibility across OS versions, while the release workflow builds on the oldest supported version for maximum forward compatibility. ## Components and Interfaces ### 1. Release Workflow File **Location**: `.github/workflows/release.yml` **Responsibilities**: - Trigger on version tags - Wait for test workflow completion - Build release binaries for all targets - Create platform-specific packages - Generate SHA256 checksums - Upload packages and checksums to GitHub release **Key Jobs**: #### Job: `validate` - Waits for the existing test workflow to complete for the tagged commit - Uses an action like `lewagon/wait-on-check-action` to poll test workflow status - Fails the release if tests don't pass - Includes timeout to prevent infinite waiting (e.g., 60 minutes) - Runs quality checks (fmt, clippy) after tests pass #### Job: `build` (matrix) - Depends on `validate` job - Checks out code - Sets up Rust toolchain (stable) - Runs quality checks (fmt, clippy) - Builds release binaries with `cargo build --release` (LTO and stripping handled by Cargo.toml profile) - Builds CLI binaries (checksum, arch-check, get-custom-params) - Stages files in platform-specific directory structure - Creates compressed package - Generates SHA256 checksum - Uploads package and checksum as artifacts #### Job: `publish` - Depends on all `build` jobs - Downloads all artifacts - Checks if GitHub release already exists for the tag - If release exists, uploads packages and checksums to existing release - If release doesn't exist, creates new release and uploads assets - Allows manual release creation with custom notes before workflow runs ### 2. Package Structure #### Linux Packages (x86_64 and aarch64) ``` crc-fast-{version}-linux-{arch}/ ├── lib/ │ ├── libcrc_fast.so │ └── libcrc_fast.a ├── include/ │ └── libcrc_fast.h ├── bin/ │ ├── checksum │ ├── arch-check │ └── get-custom-params ├── LICENSE-MIT ├── LICENSE-Apache ├── VERSION └── README.txt ``` #### macOS Package (aarch64) ``` crc-fast-{version}-macos-aarch64/ ├── lib/ │ ├── libcrc_fast.dylib │ └── libcrc_fast.a ├── include/ │ └── libcrc_fast.h ├── bin/ │ ├── checksum │ ├── arch-check │ └── get-custom-params ├── LICENSE-MIT ├── LICENSE-Apache ├── VERSION └── README.txt ``` #### Windows Packages (x86_64 and aarch64) ``` crc-fast-{version}-windows-{arch}/ ├── bin/ │ ├── crc_fast.dll │ ├── checksum.exe │ ├── arch-check.exe │ └── get-custom-params.exe ├── lib/ │ ├── crc_fast.dll.lib (import library for linking against DLL) │ └── crc_fast.lib (static library) ├── include/ │ └── libcrc_fast.h ├── LICENSE-MIT ├── LICENSE-Apache ├── VERSION └── README.txt ``` **Windows Library Files Explained**: - `crc_fast.dll`: The dynamic library containing the actual code - `crc_fast.dll.lib`: Import library needed to link against the DLL at compile time - `crc_fast.lib`: Static library for static linking (standalone, doesn't need DLL) ### 3. Package Metadata Files #### VERSION File Contains the version number extracted from the git tag: ``` 1.5.0 ``` #### README.txt File Provides basic installation and usage instructions: ``` crc-fast Binary Distribution Version: {version} Platform: {platform}-{arch} Contents: - Library files (dynamic and static) - Header file for C/C++ integration - Command-line utilities Installation: [Platform-specific instructions] Usage: See https://github.com/awesomized/crc-fast-rust for documentation License: MIT OR Apache-2.0 ``` ### 4. Checksum Files Each package has an accompanying `.sha256` file: ``` {sha256_hash} crc-fast-{version}-{platform}-{arch}.{ext} ``` ## Data Models ### Build Artifact Structure ```yaml artifacts: - name: "crc-fast-{version}-{platform}-{arch}.{ext}" type: "package" checksum: "{sha256_hash}" - name: "crc-fast-{version}-{platform}-{arch}.{ext}.sha256" type: "checksum" ``` ### Matrix Configuration ```yaml matrix: include: - target: x86_64-unknown-linux-gnu os: ubuntu-22.04 platform: linux arch: x86_64 ext: tar.gz - target: aarch64-unknown-linux-gnu os: ubuntu-22.04-arm platform: linux arch: aarch64 ext: tar.gz - target: aarch64-apple-darwin os: macos-14 platform: macos arch: aarch64 ext: tar.gz - target: x86_64-pc-windows-msvc os: windows-2022 platform: windows arch: x86_64 ext: zip - target: aarch64-pc-windows-msvc os: windows-11-arm platform: windows arch: aarch64 ext: zip ``` ## Error Handling ### Test Failure - If the test workflow fails, the `validate` job fails - The `build` jobs don't execute (dependency chain) - No release is created - GitHub Actions shows clear failure status ### Build Failure - If any platform build fails, that specific matrix job fails - Other platform builds continue - The `publish` job waits for all builds - If any build failed, `publish` job is skipped - Partial releases are prevented ### Quality Check Failure - If `cargo fmt --check` fails, build stops - If `cargo clippy` produces warnings, build stops - Ensures all released binaries meet quality standards ### Missing Files - Build script validates all expected files exist before packaging - Fails with clear error message if files are missing - Prevents incomplete packages ### Upload Failure - If GitHub release creation fails, workflow fails - If asset upload fails, workflow retries (GitHub Actions default) - All artifacts remain available for manual inspection ## Testing Strategy ### Pre-Release Testing 1. The existing test workflow must pass completely 2. All platforms in the test matrix must succeed 3. Format and clippy checks must pass ### Build Verification 1. Verify all expected files are present in target/release 2. Check file sizes are reasonable (not empty) 3. Validate binary executables are actually executable 4. Confirm library files have correct extensions ### Package Verification 1. Verify package structure matches specification 2. Check all metadata files are included 3. Validate checksums are generated correctly 4. Ensure package names follow naming convention ### Integration Testing 1. Test workflow on a feature branch with test tags 2. Verify packages can be downloaded 3. Test that libraries can be linked 4. Verify CLI binaries execute correctly 5. Validate checksums match package contents ### Manual Testing Checklist Before first production release: - [ ] Create test tag on feature branch - [ ] Verify workflow triggers correctly - [ ] Download each platform package - [ ] Extract and verify contents - [ ] Test linking dynamic library - [ ] Test linking static library - [ ] Run each CLI binary - [ ] Verify checksums - [ ] Test on actual target platforms ## Design Decisions ### Decision 1: Single Package Per Platform **Rationale**: Combining libraries and CLI tools in one package simplifies distribution and ensures users get everything they need. Separate packages would create confusion about which package to download. **Alternative Considered**: Separate library and CLI packages. Rejected because it adds complexity for minimal benefit. ### Decision 2: Include Both Dynamic and Static Libraries **Rationale**: Different projects have different linking requirements. Providing both gives maximum flexibility without requiring users to build from source. **Alternative Considered**: Separate packages for dynamic and static. Rejected because the size overhead is minimal and user experience is worse. ### Decision 3: Platform-Specific Directory Layouts **Rationale**: Following platform conventions makes integration easier for users familiar with their platform's standards. Windows expects DLLs in bin/, while Unix expects shared libraries in lib/. **Alternative Considered**: Unified layout across all platforms. Rejected because it would be non-standard on all platforms. ### Decision 4: Reuse Existing Test Workflow **Rationale**: The existing test workflow is comprehensive and already validates all target platforms. Duplicating tests would be wasteful and create maintenance burden. **Alternative Considered**: Inline tests in release workflow. Rejected because it duplicates logic and increases workflow complexity. ### Decision 5: Matrix Build Strategy **Rationale**: Building all platforms in parallel maximizes speed and allows independent failure handling. GitHub Actions provides excellent matrix support. **Alternative Considered**: Sequential builds. Rejected because it would significantly increase release time. ### Decision 6: SHA256 Checksums **Rationale**: SHA256 is the industry standard for verifying download integrity. It's widely supported and provides strong security guarantees. **Alternative Considered**: MD5 or SHA1. Rejected because they're cryptographically weak. Multiple checksums rejected as unnecessary. ### Decision 7: Separate Checksum Files **Rationale**: Separate files allow users to download and verify checksums independently. This is the standard practice for software distribution. **Alternative Considered**: Checksums in release notes. Rejected because it's less convenient for automated verification. ### Decision 8: Tag Pattern Without 'v' Prefix **Rationale**: The project already uses tags like `1.5.0` without the 'v' prefix. Maintaining consistency with existing practice is important. **Alternative Considered**: Requiring 'v' prefix. Rejected because it would break existing tagging convention. ### Decision 9: Update Existing Release Rather Than Create **Rationale**: Allowing manual release creation before the workflow runs gives maintainers control over release notes, descriptions, and other metadata. The workflow focuses on building and uploading binaries, not managing release content. **Workflow**: 1. Maintainer creates release manually with desired notes 2. Maintainer creates and pushes tag 3. Workflow builds binaries and uploads to existing release 4. If no release exists, workflow creates a minimal one **Alternative Considered**: Workflow always creates release. Rejected because it forces auto-generated release notes and removes maintainer control over release presentation. crc-fast-1.10.0/.kiro/specs/github-release-automation/requirements.md000064400000000000000000000136131046102023000236730ustar 00000000000000# Requirements Document ## Introduction This feature automates the creation and distribution of binary packages for the crc-fast library when a tagged version release is created on GitHub. The system will build platform-specific packages containing both library files (dynamic and static) and command-line utilities, following industry-standard packaging conventions for each target platform and architecture combination. ## Glossary - **Release Workflow**: A GitHub Actions workflow that triggers on git tag creation and produces binary artifacts - **Binary Package**: A compressed archive containing compiled library files, headers, and executables for a specific platform-architecture combination - **Dynamic Library**: A shared library file (.so, .dylib, or .dll) that can be linked at runtime - **Static Library**: A library archive (.a or .lib) that is linked at compile time - **CLI Binary**: Command-line executable programs (checksum, arch-check, get-custom-params) - **Target Triple**: A Rust platform identifier (e.g., x86_64-unknown-linux-gnu) - **Package Layout**: The directory structure and file organization within a binary package - **Release Asset**: A file attached to a GitHub release that users can download ## Requirements ### Requirement 1 **User Story:** As a library consumer, I want to download pre-built binaries for my platform, so that I can use crc-fast without compiling from source #### Acceptance Criteria 1. WHEN a git tag matching the pattern {MAJOR}.{MINOR}.{PATCH} is pushed, THE Release Workflow SHALL trigger automatically 2. THE Release Workflow SHALL build binaries for x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, aarch64-apple-darwin, x86_64-pc-windows-msvc, and aarch64-pc-windows-msvc targets 3. THE Release Workflow SHALL execute all tests successfully before building release binaries 4. THE Release Workflow SHALL produce release-optimized builds using the existing Cargo.toml release profile (LTO, strip, opt-level 3) 5. THE Release Workflow SHALL upload all binary packages as GitHub release assets ### Requirement 2 **User Story:** As a C/C++ developer, I want library packages with both dynamic and static libraries, so that I can choose the linking strategy that fits my project #### Acceptance Criteria 1. THE Release Workflow SHALL include both dynamic library files and static library files in library packages 2. WHERE the target is Linux, THE Release Workflow SHALL include libcrc_fast.so and libcrc_fast.a files 3. WHERE the target is macOS, THE Release Workflow SHALL include libcrc_fast.dylib and libcrc_fast.a files 4. WHERE the target is Windows, THE Release Workflow SHALL include crc_fast.dll, crc_fast.dll.lib (import library), and crc_fast.lib (static library) files 5. THE Release Workflow SHALL include the libcrc_fast.h header file in all library packages ### Requirement 3 **User Story:** As a command-line user, I want executable binaries for the checksum utilities, so that I can use crc-fast tools directly from my terminal #### Acceptance Criteria 1. THE Release Workflow SHALL build checksum, arch-check, and get-custom-params executable binaries 2. THE Release Workflow SHALL include CLI binaries in library packages 3. WHERE the target is Windows, THE Release Workflow SHALL include .exe extensions on executable files 4. WHERE the target is Linux or macOS, THE Release Workflow SHALL set executable permissions on binary files ### Requirement 4 **User Story:** As a package consumer, I want packages organized according to platform conventions, so that I can easily integrate them into my build system #### Acceptance Criteria 1. WHERE the target is Linux, THE Release Workflow SHALL organize files in lib/ and include/ directories 2. WHERE the target is macOS, THE Release Workflow SHALL organize files in lib/ and include/ directories 3. WHERE the target is Windows, THE Release Workflow SHALL organize files in bin/ and include/ directories 4. THE Release Workflow SHALL place CLI executables in bin/ subdirectory for Linux and macOS targets 5. THE Release Workflow SHALL place CLI executables in bin/ subdirectory for Windows targets alongside the DLL ### Requirement 5 **User Story:** As a release maintainer, I want descriptive package names, so that users can easily identify the correct package for their platform #### Acceptance Criteria 1. THE Release Workflow SHALL name packages using the format crc-fast-{version}-{os}-{arch}.{extension} 2. WHERE the target is Linux, THE Release Workflow SHALL use .tar.gz extension 3. WHERE the target is macOS, THE Release Workflow SHALL use .tar.gz extension 4. WHERE the target is Windows, THE Release Workflow SHALL use .zip extension 5. THE Release Workflow SHALL include the git tag version in the package filename ### Requirement 6 **User Story:** As a quality-conscious maintainer, I want the release workflow to reuse existing test infrastructure, so that releases are only created when all tests pass #### Acceptance Criteria 1. THE Release Workflow SHALL depend on successful completion of the existing test workflow 2. THE Release Workflow SHALL use the same Rust toolchain version as the test workflow 3. THE Release Workflow SHALL fail and prevent release creation if any test fails 4. THE Release Workflow SHALL run cargo fmt and cargo clippy checks before building 5. THE Release Workflow SHALL only trigger on tags matching [0-9]+.[0-9]+.[0-9]+ pattern ### Requirement 7 **User Story:** As a downstream consumer, I want packages to include version information, so that I can verify I'm using the correct release #### Acceptance Criteria 1. THE Release Workflow SHALL include a VERSION or version.txt file in each package 2. THE Release Workflow SHALL include a README or INSTALL file with basic usage instructions 3. THE Release Workflow SHALL include LICENSE files in each package 4. THE Release Workflow SHALL generate a checksum file (SHA256) for each package 5. THE Release Workflow SHALL upload checksum files as separate release assets crc-fast-1.10.0/.kiro/specs/github-release-automation/tasks.md000064400000000000000000000137761046102023000223070ustar 00000000000000# Implementation Plan - [x] 1. Create GitHub Actions release workflow file - Create `.github/workflows/release.yml` with workflow structure - Configure workflow to trigger on tags matching `[0-9]+.[0-9]+.[0-9]+` pattern - Set up workflow permissions for creating releases and uploading assets - _Requirements: 1.1, 6.5_ - [x] 2. Implement validation job - [x] 2.1 Create validate job that waits for test workflow completion - Use `lewagon/wait-on-check-action` or similar to wait for test workflow to complete - Poll test workflow status until it completes (success or failure) - Fail the validate job if test workflow fails - Set reasonable timeout (e.g., 60 minutes) to prevent infinite waiting - _Requirements: 6.1, 6.3_ - [x] 2.2 Add quality checks to validate job - Run `cargo fmt --check` to verify code formatting - Run `cargo clippy -- -D warnings` to catch linting issues - _Requirements: 6.4_ - [x] 3. Implement build matrix job - [x] 3.1 Define build matrix with all target platforms - Configure matrix with 5 targets: x86_64-linux, aarch64-linux, aarch64-macos, x86_64-windows, aarch64-windows - Map each target to appropriate runner: ubuntu-22.04, ubuntu-22.04-arm, macos-14, windows-2022, windows-11-arm - Include platform, arch, and extension variables in matrix - _Requirements: 1.2_ - [x] 3.2 Set up Rust toolchain in build job - Use `actions-rust-lang/setup-rust-toolchain` action - Configure stable toolchain - _Requirements: 6.2_ - [x] 3.3 Build release binaries - Run `cargo build --release` to build library and CLI binaries - Verify all expected files exist in target/release directory - _Requirements: 1.4, 2.1, 3.1_ - [x] 4. Create platform-specific package staging - [x] 4.1 Implement Linux package staging - Create directory structure: lib/, include/, bin/ - Copy libcrc_fast.so and libcrc_fast.a to lib/ - Copy libcrc_fast.h to include/ - Copy checksum, arch-check, get-custom-params to bin/ - Set executable permissions on binaries - _Requirements: 2.2, 3.2, 3.4, 4.1, 4.4_ - [x] 4.2 Implement macOS package staging - Create directory structure: lib/, include/, bin/ - Copy libcrc_fast.dylib and libcrc_fast.a to lib/ - Copy libcrc_fast.h to include/ - Copy checksum, arch-check, get-custom-params to bin/ - Set executable permissions on binaries - _Requirements: 2.3, 3.2, 3.4, 4.2, 4.4_ - [x] 4.3 Implement Windows package staging - Create directory structure: bin/, lib/, include/ - Copy crc_fast.dll to bin/ - Copy crc_fast.dll.lib and crc_fast.lib to lib/ - Copy libcrc_fast.h to include/ - Copy checksum.exe, arch-check.exe, get-custom-params.exe to bin/ - _Requirements: 2.4, 3.3, 4.3, 4.5_ - [ ] 5. Add package metadata files - [x] 5.1 Create VERSION file - Extract version from git tag - Write version number to VERSION file in package root - _Requirements: 7.1_ - [x] 5.2 Create README.txt file - Generate platform-specific installation instructions - Include basic usage information and link to documentation - Add to package root - _Requirements: 7.2_ - [x] 5.3 Copy license files - Copy LICENSE-MIT and LICENSE-Apache to package root - _Requirements: 7.3_ - [x] 6. Create compressed packages - [x] 6.1 Implement tar.gz creation for Linux and macOS - Use tar command to create compressed archive - Name package: crc-fast-{version}-{platform}-{arch}.tar.gz - _Requirements: 5.2, 5.3, 5.5_ - [x] 6.2 Implement zip creation for Windows - Use PowerShell Compress-Archive or 7zip - Name package: crc-fast-{version}-windows-{arch}.zip - _Requirements: 5.4, 5.5_ - [X] 7. Generate and upload checksums - [x] 7.1 Generate SHA256 checksums - Calculate SHA256 hash for each package - Create .sha256 file with hash and filename - _Requirements: 7.4_ - [x] 7.2 Upload packages and checksums as artifacts - Use `actions/upload-artifact` to upload package files - Upload checksum files as separate artifacts - _Requirements: 7.5_ - [X] 8. Implement publish job - [x] 8.1 Download all build artifacts - Use `actions/download-artifact` to retrieve all packages and checksums - Organize files for upload - _Requirements: 1.5_ - [x] 8.2 Check for existing release - Use GitHub API to check if release exists for the tag - Get release ID if it exists - _Requirements: Decision 9_ - [x] 8.3 Create or update GitHub release - If release doesn't exist, create new release with basic information - If release exists, prepare to update it with assets - Use `softprops/action-gh-release` or similar action - _Requirements: 1.5_ - [x] 8.4 Upload packages and checksums to release - Upload all .tar.gz and .zip packages as release assets - Upload all .sha256 checksum files as release assets - _Requirements: 1.5, 7.5_ - [ ]* 9. Add workflow documentation - [ ]* 9.1 Create workflow README - Document how to trigger releases - Explain manual release creation workflow - Document package naming conventions - _Requirements: All_ - [ ]* 9.2 Add inline workflow comments - Comment complex workflow steps - Explain matrix configuration - Document platform-specific logic - _Requirements: All_ - [ ]* 10. Test release workflow - [ ]* 10.1 Test on feature branch - Create test tag on feature branch - Verify workflow triggers correctly - Check that all jobs complete successfully - _Requirements: All_ - [ ]* 10.2 Validate package contents - Download each platform package - Extract and verify directory structure - Check that all files are present - Verify file permissions on Unix platforms - _Requirements: 2.1-2.5, 3.1-3.4, 4.1-4.5, 7.1-7.3_ - [ ]* 10.3 Test package functionality - Test linking against dynamic library - Test linking against static library - Run each CLI binary to verify functionality - Verify checksums match package contents - _Requirements: 2.1-2.5, 3.1-3.4_ crc-fast-1.10.0/.kiro/steering/code-quality-requirements.md000064400000000000000000000023421046102023000217130ustar 00000000000000--- inclusion: always --- # Code Quality Requirements ## Pre-Completion Checks Before marking any task as completed, you MUST run the following commands and ensure they pass without errors or warnings: ### 1. Code Formatting ```bash cargo fmt --check ``` If this fails, run `cargo fmt` to fix formatting issues, then verify with `--check` again. ### 2. Linting ```bash cargo clippy -- -D warnings ``` All clippy warnings must be resolved. This ensures code follows Rust best practices and catches potential issues. ### 3. Testing ```bash cargo test ``` All tests must pass to ensure no regressions were introduced. ## Why These Requirements Matter - **cargo fmt**: Ensures consistent code formatting across the entire codebase, making it easier to read and maintain - **cargo clippy**: Catches common mistakes, suggests idiomatic Rust patterns, and helps prevent bugs before they reach production - **cargo test**: Validates that all functionality works as expected and no existing features were broken ## Failure Handling If any of these commands fail: 1. Fix the issues identified 2. Re-run the commands to verify fixes 3. Only then mark the task as completed These checks are non-negotiable for maintaining code quality and consistency.crc-fast-1.10.0/.kiro/steering/commenting-guidelines.md000064400000000000000000000022641046102023000210630ustar 00000000000000--- inclusion: always --- # Code Commenting Guidelines ## Comment Philosophy - Only add comments when they explain WHY something is done a particular way - NEVER explain WHAT the code is doing unless it's hard to understand without a comment - Code should be self-documenting through clear naming and structure - Comments should provide context, reasoning, or non-obvious implications ## Examples ### Good Comments (WHY) ```rust // Use 512KiB chunks because benchmarks showed this was fastest on Apple M2 Ultra let chunk_size = chunk_size.unwrap_or(524288); // Remove xorout since it's already been applied and needs to be re-added on final output self.state = combine::checksums( self.state ^ self.params.xorout, other_crc, other.amount, self.params, ) ^ self.params.xorout; ``` ### Avoid (WHAT) ```rust // Set chunk_size to 524288 if None let chunk_size = chunk_size.unwrap_or(524288); // XOR the state with xorout self.state = self.state ^ self.params.xorout; ``` ### Exception: Complex Logic Comments explaining WHAT are acceptable when the code logic is genuinely hard to follow: ```rust // Fold 8 bytes at a time using SIMD, then handle remainder with scalar operations ```crc-fast-1.10.0/CHANGELOG.md000064400000000000000000000114161046102023000132210ustar 00000000000000# Changes for crc-fast-rust ## [1.10.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.10.0) - 2025-12-26 * [Rust 1.89 baseline](https://github.com/awesomized/crc-fast-rust/pull/27) * [Remove 'crc' dependency](https://github.com/awesomized/crc-fast-rust/pull/40) ## [1.9.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.9.0) - 2025-12-22 * [Optimize performance for smaller sizes](https://github.com/awesomized/crc-fast-rust/pull/38) * [Add CRC-16 support](https://github.com/awesomized/crc-fast-rust/pull/39) ## [1.8.2](https://github.com/awesomized/crc-fast-rust/releases/tag/1.8.2) - 2025-12-14 * [Fix the crc dependency minimum](https://github.com/awesomized/crc-fast-rust/pull/33) * [Fix no_std build for embedded targets](https://github.com/awesomized/crc-fast-rust/pull/35) ## [1.8.1](https://github.com/awesomized/crc-fast-rust/releases/tag/1.8.1) - 2025-11-16 * [Add support for fuzz testing using libFuzzer](https://github.com/awesomized/crc-fast-rust/pull/30) ## [1.8.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.8.0) - 2025-11-14 * [Add no_std and WASM support with full backward compatibility](https://github.com/awesomized/crc-fast-rust/pull/28) * [Use feature_detection instead of func calls for fusion](https://github.com/awesomized/crc-fast-rust/commit/3af5cdbec9cf85ed5ce325c131845514873e2e3e) * [Improve test and release coverage for x86](https://github.com/awesomized/crc-fast-rust/commit/bba891b97cc5cb32b3320e717749f76e2f46c053) ## [1.7.1](https://github.com/awesomized/crc-fast-rust/releases/tag/1.7.1) - 2025-11-10 * [Ensure Miri passes on x86_64 and x86](https://github.com/awesomized/crc-fast-rust/pull/26) ## [1.7.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.7.0) - 2025-11-07 * [Fix/no std feature (currently wasm compatible; groundwork for no_std)](https://github.com/awesomized/crc-fast-rust/pull/25) * Support and publish [immutable releases](https://github.blog/changelog/2025-10-28-immutable-releases-are-now-generally-available/) on GitHub ## [1.6.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.6.0) - 2025-10-30 * [Improve runtime feature detection (and performance)](https://github.com/awesomized/crc-fast-rust/pull/21) * [remove libc](https://github.com/awesomized/crc-fast-rust/pull/20) * [Enable generating and publishing binary packages](https://github.com/awesomized/crc-fast-rust/pull/22) ## [1.5.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.5.0) - 2025-09-01 * [Improve state handling](https://github.com/awesomized/crc-fast-rust/pull/16) * [Add support for building a static library](https://github.com/awesomized/crc-fast-rust/pull/17) ## [1.4.1](https://github.com/awesomized/crc-fast-rust/releases/tag/1.4.1) - 2025-09-01 * [change unconditional x86-64-v4 reliance to the former x86-64-v2 reliance](https://github.com/awesomized/crc-fast-rust/pull/15) ## [1.4.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.4.0) - 2025-08-08 * [Enable VPCLMULQDQ support on Rust 1.89+](https://github.com/awesomized/crc-fast-rust/pull/10) * [Support custom CRC parameters](https://github.com/awesomized/crc-fast-rust/pull/11) * [Add checksum command-line utility](https://github.com/awesomized/crc-fast-rust/pull/12) * [Remove bindgen](https://github.com/awesomized/crc-fast-rust/pull/13) ## [1.3.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.3.0) - 2025-06-10 * [Replace C bindings for CRC32 fusion calculation](https://github.com/awesomized/crc-fast-rust/pull/9) * [Improve VPCLMULQDQ to use 512-bit wide registers](https://github.com/awesomized/crc-fast-rust/pull/8) * [Implement hardware accelerated XOR3 support](https://github.com/awesomized/crc-fast-rust/pull/9) ## [1.2.2](https://github.com/awesomized/crc-fast-rust/releases/tag/1.2.2) - 2025-06-02 * [Remove println! from software fallback](https://github.com/awesomized/crc-fast-rust/pull/4) ## [1.2.1](https://github.com/awesomized/crc-fast-rust/releases/tag/1.2.1) - 2025-05-10 * [Limit FFI to supported architectures](https://github.com/awesomized/crc-fast-rust/commit/55b967bf623953879fdce74447a9b84f820ac879) ## [1.2.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.2.0) - 2025-05-08 * [Add table-based software fallback](https://github.com/awesomized/crc-fast-rust/commit/9432876eb47e322a35046485b498e18053f889f9) ## [1.1.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.1.0) - 2025-05-02 * [Add digest::DynDigest::box_clone() and Debug support](https://github.com/awesomized/crc-fast-rust/commit/8a494c30ef8ff640ddb113d9fe171611dfb211e5) ## [1.0.1](https://github.com/awesomized/crc-fast-rust/releases/tag/1.0.1) - 2025-04-30 * [Use Rust 1.81+](https://github.com/awesomized/crc-fast-rust/pull/1) ## [1.0.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.0.0) - 2025-04-10 - First release for crates.iocrc-fast-1.10.0/Cargo.lock0000644000000702300000000000100105720ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 4 [[package]] name = "aho-corasick" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] [[package]] name = "allocator-api2" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "anes" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ "windows-sys", ] [[package]] name = "anstyle-wincon" version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", "windows-sys", ] [[package]] name = "async-trait" version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "bit-set" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bumpalo" version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "cast" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cbindgen" version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "befbfd072a8e81c02f8c507aefce431fe5e7d051f83d48a23ffc9b9fe5a11799" dependencies = [ "clap", "heck", "indexmap", "log", "proc-macro2", "quote", "serde", "serde_json", "syn", "tempfile", "toml", ] [[package]] name = "cc" version = "1.2.51" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" dependencies = [ "find-msvc-tools", "shlex", ] [[package]] name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "ciborium" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ "ciborium-io", "ciborium-ll", "serde", ] [[package]] name = "ciborium-io" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" [[package]] name = "ciborium-ll" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ "ciborium-io", "half", ] [[package]] name = "clap" version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" dependencies = [ "anstream", "anstyle", "clap_lex", "strsim", ] [[package]] name = "clap_lex" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "colorchoice" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "crc" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ "crc-catalog", ] [[package]] name = "crc-catalog" version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc-fast" version = "1.10.0" dependencies = [ "cbindgen", "crc", "criterion", "digest", "hashbrown", "proptest", "rand", "regex", "spin", "wasm-bindgen-test", ] [[package]] name = "criterion" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1c047a62b0cc3e145fa84415a3191f628e980b194c2755aa12300a4e6cbd928" dependencies = [ "anes", "cast", "ciborium", "clap", "criterion-plot", "itertools", "num-traits", "oorandom", "plotters", "rayon", "regex", "serde", "serde_json", "tinytemplate", "walkdir", ] [[package]] name = "criterion-plot" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b1bcc0dc7dfae599d84ad0b1a55f80cde8af3725da8313b528da95ef783e338" dependencies = [ "cast", "itertools", ] [[package]] name = "crossbeam-deque" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", ] [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "crypto-common", ] [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", "windows-sys", ] [[package]] name = "fastrand" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "find-msvc-tools" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", ] [[package]] name = "getrandom" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", "wasip2", ] [[package]] name = "half" version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", "zerocopy", ] [[package]] name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "indexmap" version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", "hashbrown", ] [[package]] name = "is_terminal_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] [[package]] name = "itoa" version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" [[package]] name = "js-sys" version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", ] [[package]] name = "libc" version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "libm" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "linux-raw-sys" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "log" version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "memchr" version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "minicov" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4869b6a491569605d66d3952bcdf03df789e5b536e5f0cf7758a7f08a55ae24d" dependencies = [ "cc", "walkdir", ] [[package]] name = "nu-ansi-term" version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ "windows-sys", ] [[package]] name = "num-traits" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", ] [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "oorandom" version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "plotters" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" dependencies = [ "num-traits", "plotters-backend", "plotters-svg", "wasm-bindgen", "web-sys", ] [[package]] name = "plotters-backend" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" [[package]] name = "plotters-svg" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" dependencies = [ "plotters-backend", ] [[package]] name = "ppv-lite86" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] [[package]] name = "proc-macro2" version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] [[package]] name = "proptest" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" dependencies = [ "bit-set", "bit-vec", "bitflags", "num-traits", "rand", "rand_chacha", "rand_xorshift", "regex-syntax", "rusty-fork", "tempfile", "unarray", ] [[package]] name = "quick-error" version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "rand" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha", "rand_core", ] [[package]] name = "rand_chacha" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", "rand_core", ] [[package]] name = "rand_core" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ "getrandom", ] [[package]] name = "rand_xorshift" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ "rand_core", ] [[package]] name = "rayon" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", ] [[package]] name = "rayon-core" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] [[package]] name = "regex" version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "rustix" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", "windows-sys", ] [[package]] name = "rustversion" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-fork" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" dependencies = [ "fnv", "quick-error", "tempfile", "wait-timeout", ] [[package]] name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ "winapi-util", ] [[package]] name = "serde" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", ] [[package]] name = "serde_core" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "serde_json" version = "1.0.147" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6af14725505314343e673e9ecb7cd7e8a36aa9791eb936235a3567cc31447ae4" dependencies = [ "itoa", "memchr", "serde", "serde_core", "zmij", ] [[package]] name = "serde_spanned" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" dependencies = [ "serde_core", ] [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "spin" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "tempfile" version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", "getrandom", "once_cell", "rustix", "windows-sys", ] [[package]] name = "tinytemplate" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" dependencies = [ "serde", "serde_json", ] [[package]] name = "toml" version = "0.9.10+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48" dependencies = [ "indexmap", "serde_core", "serde_spanned", "toml_datetime", "toml_parser", "toml_writer", "winnow", ] [[package]] name = "toml_datetime" version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] [[package]] name = "toml_parser" version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] [[package]] name = "toml_writer" version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "typenum" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "unarray" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-ident" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wait-timeout" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ "libc", ] [[package]] name = "walkdir" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", ] [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ "bumpalo", "proc-macro2", "quote", "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-bindgen-test" version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25e90e66d265d3a1efc0e72a54809ab90b9c0c515915c67cdf658689d2c22c6c" dependencies = [ "async-trait", "cast", "js-sys", "libm", "minicov", "nu-ansi-term", "num-traits", "oorandom", "serde", "serde_json", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", ] [[package]] name = "wasm-bindgen-test-macro" version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7150335716dce6028bead2b848e72f47b45e7b9422f64cccdc23bedca89affc1" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "web-sys" version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] name = "winapi-util" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ "windows-sys", ] [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-sys" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", ] [[package]] name = "winnow" version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" [[package]] name = "wit-bindgen" version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "zerocopy" version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "zmij" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4af59da1029247450b54ba43e0b62c8e376582464bbe5504dd525fe521e7e8fd" crc-fast-1.10.0/Cargo.toml0000644000000072540000000000100106230ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2021" rust-version = "1.89" name = "crc-fast" version = "1.10.0" authors = ["Don MacAskill"] build = false autolib = false autobins = false autoexamples = false autotests = false autobenches = false description = "World's fastest generic CRC16, CRC32, and CRC64 calculator using SIMD. Supplies a C-compatible shared library for use in other languages." readme = "README.md" keywords = [ "crc", "checksum", "simd", "accelerated", "fast", ] categories = [ "algorithms", "encoding", "hardware-support", ] license = "MIT OR Apache-2.0" repository = "https://github.com/awesomized/crc-fast-rust" [package.metadata.docs.rs] features = ["std"] rustdoc-args = [ "--cfg", "docsrs", ] [features] alloc = ["digest"] cache = [ "alloc", "hashbrown", "spin", ] cli = ["std"] default = [ "std", "panic-handler", "ffi", ] ffi = [] optimize_crc32_auto = [] optimize_crc32_avx512_v4s3x3 = [] optimize_crc32_avx512_vpclmulqdq_v3x2 = [] optimize_crc32_neon_blended = [] optimize_crc32_neon_eor3_v9s3x2e_s3 = [] optimize_crc32_neon_v12e_v1 = [] optimize_crc32_neon_v3s4x2e_v2 = [] optimize_crc32_sse_v4s3x3 = [] panic-handler = [] std = ["alloc"] vpclmulqdq = [] [lib] name = "crc_fast" crate-type = [ "lib", "cdylib", "staticlib", ] path = "src/lib.rs" bench = true [[bin]] name = "arch-check" path = "src/bin/arch-check.rs" required-features = ["cli"] [[bin]] name = "checksum" path = "src/bin/checksum.rs" required-features = ["cli"] [[bin]] name = "generate-tables" path = "src/bin/generate-tables.rs" required-features = ["cli"] [[bin]] name = "get-custom-params" path = "src/bin/get-custom-params.rs" required-features = ["cli"] [[test]] name = "checksum_integration_tests" path = "tests/checksum_integration_tests.rs" required-features = ["cli"] [[test]] name = "no_std_tests" path = "tests/no_std_tests.rs" [[test]] name = "wasm_tests" path = "tests/wasm_tests.rs" [[bench]] name = "benchmark" path = "benches/benchmark.rs" harness = false required-features = ["std"] [dependencies.digest] version = "0.10" features = ["alloc"] optional = true default-features = false [dependencies.hashbrown] version = "0.16.0" optional = true [dependencies.spin] version = "0.10.0" features = [ "once", "rwlock", "mutex", "spin_mutex", ] optional = true default-features = false [dev-dependencies.cbindgen] version = "0.29" [dev-dependencies.crc] version = "3.4" [dev-dependencies.criterion] version = "0.7" [dev-dependencies.proptest] version = "1.9" [dev-dependencies.rand] version = "0.9" [dev-dependencies.regex] version = "1.12" [dev-dependencies.wasm-bindgen-test] version = "0.3" [target.'cfg(target_arch = "aarch64")'.dependencies.spin] version = "0.10.0" features = [ "once", "rwlock", "mutex", "spin_mutex", ] default-features = false [target.'cfg(target_arch = "x86")'.dependencies.spin] version = "0.10.0" features = [ "once", "rwlock", "mutex", "spin_mutex", ] default-features = false [target.'cfg(target_arch = "x86_64")'.dependencies.spin] version = "0.10.0" features = [ "once", "rwlock", "mutex", "spin_mutex", ] default-features = false [profile.release] opt-level = 3 lto = true codegen-units = 1 strip = true crc-fast-1.10.0/Cargo.toml.orig000064400000000000000000000103271046102023000142770ustar 00000000000000[package] name = "crc-fast" version = "1.10.0" edition = "2021" authors = ["Don MacAskill"] license = "MIT OR Apache-2.0" keywords = ["crc", "checksum", "simd", "accelerated", "fast"] categories = ["algorithms", "encoding", "hardware-support"] repository = "https://github.com/awesomized/crc-fast-rust" description = "World's fastest generic CRC16, CRC32, and CRC64 calculator using SIMD. Supplies a C-compatible shared library for use in other languages." readme = "README.md" # important intrinsics stabilization notes: # 1.69.0 added VPCLMULQDQ x86 detection support # 1.70.0 added LLVM 16 which supports PMULL2 on Aarch64 # 1.89.0 stabilized AVX-512 intrinsics, including VPCLMULQDQ rust-version = "1.89" [lib] name = "crc_fast" crate-type = ["lib", "cdylib", "staticlib"] bench = true [dependencies] # We use digest with default-features = false and features = ["alloc"] to enable heap allocation support in no_std # environments. This configuration is safe because the alloc feature in digest does not depend on its default features # as of digest v0.10. digest = { version = "0.10", optional = true, default-features = false, features = ["alloc"] } # no_std support # spin is optional - only needed on architectures with SIMD (for feature detection) # or when cache feature is enabled spin = { version = "0.10.0", default-features = false, features = [ "once", "rwlock", "mutex", "spin_mutex", ], optional = true } # hashbrown is only needed when caching is enabled in no_std hashbrown = { version = "0.16.0", optional = true } # Target-specific dependencies: spin is needed for feature detection on SIMD-capable architectures [target.'cfg(target_arch = "aarch64")'.dependencies] spin = { version = "0.10.0", default-features = false, features = [ "once", "rwlock", "mutex", "spin_mutex", ] } [target.'cfg(target_arch = "x86")'.dependencies] spin = { version = "0.10.0", default-features = false, features = [ "once", "rwlock", "mutex", "spin_mutex", ] } [target.'cfg(target_arch = "x86_64")'.dependencies] spin = { version = "0.10.0", default-features = false, features = [ "once", "rwlock", "mutex", "spin_mutex", ] } [dev-dependencies] crc = "3.4" criterion = "0.7" cbindgen = "0.29" proptest = "1.9" rand = "0.9" regex = "1.12" wasm-bindgen-test = "0.3" # lto=true has a big improvement in performance [profile.release] lto = true strip = true codegen-units = 1 opt-level = 3 [[bin]] name = "checksum" path = "src/bin/checksum.rs" required-features = ["cli"] [[bin]] name = "arch-check" path = "src/bin/arch-check.rs" required-features = ["cli"] [[bin]] name = "get-custom-params" path = "src/bin/get-custom-params.rs" required-features = ["cli"] [[bin]] name = "generate-tables" path = "src/bin/generate-tables.rs" required-features = ["cli"] [[bench]] name = "benchmark" harness = false required-features = ["std"] [features] # default features default = ["std", "panic-handler", "ffi"] std = ["alloc"] # std implies alloc is available alloc = ["digest"] # marker feature for heap allocation support panic-handler = [] # Provides panic handler for no_std library checks (disable in binaries) ffi = [ ] # C/C++ compatible dynamic/static library, planned to become optional in the next MAJOR version (v2) to reduce overhead # optional features cli = ["std"] # command line interface binaries (checksum, arch-check, get-custom-params) cache = [ "alloc", "hashbrown", "spin", ] # no_std caching requires alloc + hashbrown HashMap + spin for synchronization # the features below are deprecated, aren't in use, and will be removed in the next MAJOR version (v2) vpclmulqdq = [] # deprecated, VPCLMULQDQ stabilized in Rust 1.89.0 optimize_crc32_auto = [] # deprecated optimize_crc32_neon_eor3_v9s3x2e_s3 = [] # deprecated optimize_crc32_neon_v12e_v1 = [] # deprecated optimize_crc32_neon_v3s4x2e_v2 = [] # deprecated optimize_crc32_neon_blended = [] # deprecated optimize_crc32_avx512_vpclmulqdq_v3x2 = [] # deprecated optimize_crc32_avx512_v4s3x3 = [] # deprecated optimize_crc32_sse_v4s3x3 = [] # deprecated [package.metadata.docs.rs] features = ["std"] rustdoc-args = ["--cfg", "docsrs"] [[test]] name = "checksum_integration_tests" path = "tests/checksum_integration_tests.rs" required-features = ["cli"] crc-fast-1.10.0/LICENSE-Apache000064400000000000000000000261351046102023000136000ustar 00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. crc-fast-1.10.0/LICENSE-MIT000064400000000000000000000020351046102023000130410ustar 00000000000000Copyright 2025 Don MacAskill Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. crc-fast-1.10.0/Makefile000064400000000000000000000065171046102023000130560ustar 00000000000000PROJECT_NAME := crc_fast # Detect operating system UNAME_S := $(shell uname -s) # Determine OS-specific variables ifeq ($(UNAME_S),Linux) DESTDIR ?= /usr/local LIB_EXTENSION := so STATIC_LIB_EXTENSION := a INSTALL_LIB_DIR := /lib INSTALL_BIN_DIR := /bin INSTALL_INCLUDE_DIR := /include POST_INSTALL := ldconfig else ifeq ($(UNAME_S),Darwin) DESTDIR ?= # on macOS, there's not really a default location, so require DESTDIR ifeq ($(DESTDIR),) $(error On macOS, DESTDIR must be set for installation. Common locations include /usr/local or /opt/homebrew) endif LIB_EXTENSION := dylib STATIC_LIB_EXTENSION := a INSTALL_LIB_DIR := /lib INSTALL_BIN_DIR := /bin INSTALL_INCLUDE_DIR := /include POST_INSTALL := true else # Windows DESTDIR ?= ifeq ($(DESTDIR),) $(error On Windows, DESTDIR must be set for installation. Common locations include C:\) endif LIB_EXTENSION := dll STATIC_LIB_EXTENSION := lib # Use relative paths when DESTDIR is set to avoid path joining issues PREFIX ?= Program Files\\$(PROJECT_NAME) INSTALL_LIB_DIR := $(PREFIX)\\bin INSTALL_BIN_DIR := $(PREFIX)\\bin INSTALL_INCLUDE_DIR := $(PREFIX)\\include POST_INSTALL := true endif # Library name with extension LIB_NAME := lib$(PROJECT_NAME).$(LIB_EXTENSION) STATIC_LIB_NAME := lib$(PROJECT_NAME).$(STATIC_LIB_EXTENSION) # CLI binaries CLI_BINARIES := checksum arch-check get-custom-params # Default target .PHONY: all all: build # Build the library using Cargo .PHONY: build build: test cargo build --all-features --release # Test the library using Cargo .PHONY: test test: cargo test --all-features # Install the library and headers .PHONY: install install: print-paths build @install -d $(DESTDIR)$(INSTALL_LIB_DIR) @install -d $(DESTDIR)$(INSTALL_BIN_DIR) @install -d $(DESTDIR)$(INSTALL_INCLUDE_DIR) install -m 644 target/release/$(LIB_NAME) $(DESTDIR)$(INSTALL_LIB_DIR)/ install -m 644 target/release/$(STATIC_LIB_NAME) $(DESTDIR)$(INSTALL_LIB_DIR)/ install -m 644 lib$(PROJECT_NAME).h $(DESTDIR)$(INSTALL_INCLUDE_DIR)/ @for bin in $(CLI_BINARIES); do \ install -m 755 target/release/$$bin $(DESTDIR)$(INSTALL_BIN_DIR)/; \ done @if [ -z "$(DESTDIR)" ] && [ "$(POST_INSTALL)" != "true" ]; then \ $(POST_INSTALL); \ fi # Uninstall the library and headers .PHONY: uninstall uninstall: print-paths rm -f $(DESTDIR)$(INSTALL_LIB_DIR)/$(LIB_NAME) rm -f $(DESTDIR)$(INSTALL_LIB_DIR)/$(STATIC_LIB_NAME) rm -f $(DESTDIR)$(INSTALL_INCLUDE_DIR)/lib$(PROJECT_NAME).h @for bin in $(CLI_BINARIES); do \ rm -f $(DESTDIR)$(INSTALL_BIN_DIR)/$$bin; \ done @if [ -z "$(DESTDIR)" ] && [ "$(UNAME_S)" = "Linux" ]; then \ ldconfig; \ fi # Run all code quality checks .PHONY: check check: cargo fmt --all cargo check --workspace --all-targets --all-features cargo clippy --workspace --all-targets --all-features --fix --allow-dirty -- -D warnings # cargo deny check all # RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps --all-features # cargo audit # Clean build artifacts .PHONY: clean clean: cargo clean # Print installation paths (useful for debugging) .PHONY: print-paths print-paths: @echo "Installation paths:" @echo "Library dir: $(DESTDIR)$(INSTALL_LIB_DIR)" @echo "Binary dir: $(DESTDIR)$(INSTALL_BIN_DIR)" @echo "Include dir: $(DESTDIR)$(INSTALL_INCLUDE_DIR)"crc-fast-1.10.0/README.md000064400000000000000000000613541046102023000126750ustar 00000000000000`crc-fast` =========== [![Test status](https://github.com/awesomized/crc-fast-rust/workflows/Tests/badge.svg)](https://github.com/awesomized/crc-fast-rust/actions?query=workflow%3ATests) [![Latest Version](https://img.shields.io/crates/v/crc-fast.svg)](https://crates.io/crates/crc-fast) [![Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/crc-fast) World's fastest generic CRC calculator for [all known CRC-16, CRC-32, and CRC-64 variants](https://reveng.sourceforge.io/crc-catalogue/all.htm), as well as bring-your-own custom parameters, using SIMD intrinsics, which can exceed [100GiB/s](#performance) on modern systems. Supports acceleration on `aarch64`, `x86_64`, and `x86` architectures, plus has a safe non-accelerated table-based software fallback for others. The [crc crate](https://crates.io/crates/crc) is ~0.5GiB/s by default, so this is [up to >220X faster](#tldr-just-tell-me-how-to-turn-it-up-to-11-). This is unique, not just because of the performance, but also because I couldn't find a single generic SIMD-accelerated implementation (in any language) which worked for _all_ known variants, using the [Rocksoft model](http://www.ross.net/crc/download/crc_v3.txt), especially the "non-reflected" variants. So I wrote one. :) ## Other languages Supplies a [C/C++ compatible library](#cc-compatible-library) for use with other non-`Rust` languages. ## Implementations * [AWS SDK for Rust](https://awslabs.github.io/aws-sdk-rust/) via the [aws-smithy-checksums](https://crates.io/crates/aws-smithy-checksums) crate. * [crc-fast-php-ext](https://github.com/awesomized/crc-fast-php-ext) `PHP` extension using this library. ## Changes See [CHANGELOG](CHANGELOG.md). ## Build & Install ### Library `cargo build --release` will obviously build the Rust library, including the [C/C++ compatible dynamic and static libraries](#cc-compatible-library). ### CLI tools There are some command-line tools available: - `checksum` calculates CRC checksums from the supplied string or file - `get-custom-params` generates the custom CRC parameters for the supplied Rocksoft model values - `arch-check` checks the current architecture's hardware acceleration features (primarily for debugging) To build them, enable the `cli` feature: `cargo build --features cli --release`. ### Everything To build the libraries and the CLI tools, use the `--all-features` flag: `cargo build --all-features --release`. A _very_ basic [Makefile](Makefile) is supplied which supports `make install` to install the libraries, header file, and CLI binaries to the local system. Specifying the `DESTDIR` environment variable will allow you to customize the install location. ``` DESTDIR=/my/custom/path make install ``` ## Features The library supports various feature flags for different environments: ### Default Features * `std` - Standard library support, includes `alloc` * `ffi` - C/C++ FFI bindings for shared library (will become optional in v2.0) * `panic-handler` - Provides panic handler for `no_std` environments (disable when building binaries) ### Optional Features * `alloc` - Heap allocation support (enables `Digest` trait, custom CRC params, checksum combining) * `cache` - Caches generated constants for custom CRC parameters (requires `alloc`) * `cli` - Enables command-line tools (`checksum`, `arch-check`, `get-custom-params`) ### Building for `no_std` For embedded targets without standard library: ```bash # Minimal no_std (core CRC only, no heap) cargo build --target thumbv7em-none-eabihf --no-default-features --lib # With heap allocation (enables Digest, custom params) cargo build --target thumbv7em-none-eabihf --no-default-features --features alloc --lib # With caching (requires alloc) cargo build --target thumbv7em-none-eabihf --no-default-features --features cache --lib ``` Tested on ARM Cortex-M (`thumbv7em-none-eabihf`, `thumbv8m.main-none-eabihf`) and RISC-V ( `riscv32imac-unknown-none-elf`). ### Building for `WASM` For WebAssembly targets: ```bash # Minimal WASM cargo build --target wasm32-unknown-unknown --no-default-features --lib # With heap allocation (typical use case) cargo build --target wasm32-unknown-unknown --no-default-features --features alloc --lib # Using wasm-pack for browser wasm-pack build --target web --no-default-features --features alloc ``` Tested on `wasm32-unknown-unknown`, `wasm32-wasip1`, and `wasm32-wasip2` targets. ## Usage Add `crc-fast = "1"` to your `Cargo.toml` dependencies, which will enable every available optimization for the `stable` toolchain. ### Fast helper functions For the [most common and popular](#important-crc-variants) CRC variants, there are specialized one-shot functions to make adoption easier and performance faster, particularly for smaller input sizes, since it reduces some of the overhead of the generic `checksum` path. #### CRC-32/ISCSI Also commonly known as `crc32c` in many, but not all, implementations. ```rust use crc_fast::crc32_iscsi; let checksum = crc32_iscsi(b"123456789"); assert_eq!(checksum, 0xe3069283); ``` #### CRC-32/ISO-HDLC Also commonly known as `crc32` in many, but not all, implementations. ```rust use crc_fast::crc32_iso_hdlc; let checksum = crc32_iso_hdlc(b"123456789"); assert_eq!(checksum, 0xcbf43926); ``` #### CRC-64/NVME ```rust use crc_fast::crc64_nvme; let checksum = crc64_nvme(b"123456789"); assert_eq!(checksum, 0xae8b14860a799888); ``` ### Digest Implements the [digest::DynDigest](https://docs.rs/digest/latest/digest/trait.DynDigest.html) trait for easier integration with existing Rust code. Creates a `Digest` which can be updated over time, for stream processing, intermittent workloads, etc, enabling finalizing the checksum once processing is complete. ```rust use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc}; let mut digest = Digest::new(Crc32IsoHdlc); digest.update(b"1234"); digest.update(b"56789"); let checksum = digest.finalize(); assert_eq!(checksum, 0xcbf43926); ``` ### Digest Write Implements the [std::io::Write](https://doc.rust-lang.org/std/io/trait.Write.html) trait for easier integration with existing Rust code. ```rust use std::env; use std::fs::File; use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc}; // for example/test purposes only, use your own file path let binding = env::current_dir().expect("missing working dir").join("crc-check.txt"); let file_on_disk = binding.to_str().unwrap(); // actual usage let mut digest = Digest::new(Crc32IsoHdlc); let mut file = File::open(file_on_disk).unwrap(); std::io::copy( & mut file, & mut digest).unwrap(); let checksum = digest.finalize(); assert_eq!(checksum, 0xcbf43926); ``` ### checksum Checksums a string. ```rust use crc_fast::{checksum, CrcAlgorithm::Crc32IsoHdlc}; let checksum = checksum(Crc32IsoHdlc, b"123456789"); assert_eq!(checksum, 0xcbf43926); ``` ### checksum_combine Combines checksums from two different sources, which can be useful for distributed or multithreaded workloads, etc. ```rust use crc_fast::{checksum, checksum_combine, CrcAlgorithm::Crc32IsoHdlc}; let checksum_1 = checksum(Crc32IsoHdlc, b"1234"); let checksum_2 = checksum(Crc32IsoHdlc, b"56789"); let checksum = checksum_combine(Crc32IsoHdlc, checksum_1, checksum_2, 5); assert_eq!(checksum, 0xcbf43926); ``` ### checksum_file Checksums a file, which will chunk through the file optimally, limiting RAM usage and maximizing throughput. Chunk size is optional. ```rust use crc_fast::{checksum_file, CrcAlgorithm::Crc32IsoHdlc}; // for example/test purposes only, use your own file path let binding = env::current_dir().expect("missing working dir").join("crc-check.txt"); let file_on_disk = binding.to_str().unwrap(); let checksum = checksum_file(Crc32IsoHdlc, file_on_disk, None); assert_eq!(checksum.unwrap(), 0xcbf43926); ``` ## Custom CRC Parameters For cases where you need to use CRC variants not included in the predefined algorithms, you can define custom CRC parameters and use the `*_with_params` functions. ### Digest with custom parameters Creates a `Digest` with custom CRC parameters for stream processing. ```rust use crc_fast::{Digest, CrcParams}; // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC) let custom_params = CrcParams::new( "CRC-32/CUSTOM", 32, 0x04c11db7, 0xffffffff, true, 0xffffffff, 0xcbf43926, ); let mut digest = Digest::new_with_params(custom_params); digest.update(b"123456789"); let checksum = digest.finalize(); assert_eq!(checksum, 0xcbf43926); ``` ### checksum_with_params Checksums data using custom CRC parameters. ```rust use crc_fast::{checksum_with_params, CrcParams}; // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC) let custom_params = CrcParams::new( "CRC-32/CUSTOM", 32, 0x04c11db7, 0xffffffff, true, 0xffffffff, 0xcbf43926, ); let checksum = checksum_with_params(custom_params, b"123456789"); assert_eq!(checksum, 0xcbf43926); ``` ### checksum_combine_with_params Combines checksums from two different sources using custom CRC parameters. ```rust use crc_fast::{checksum_with_params, checksum_combine_with_params, CrcParams}; // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC) let custom_params = CrcParams::new( "CRC-32/CUSTOM", 32, 0x04c11db7, 0xffffffff, true, 0xffffffff, 0xcbf43926, ); let checksum_1 = checksum_with_params(custom_params, b"1234"); let checksum_2 = checksum_with_params(custom_params, b"56789"); let checksum = checksum_combine_with_params(custom_params, checksum_1, checksum_2, 5); assert_eq!(checksum, 0xcbf43926); ``` ### checksum_file_with_params Checksums a file using custom CRC parameters, chunking through the file optimally. ```rust use std::env; use crc_fast::{checksum_file_with_params, CrcParams}; // for example/test purposes only, use your own file path let binding = env::current_dir().expect("missing working dir").join("crc-check.txt"); let file_on_disk = binding.to_str().unwrap(); // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC) let custom_params = CrcParams::new( "CRC-32/CUSTOM", 32, 0x04c11db7, 0xffffffff, true, 0xffffffff, 0xcbf43926, ); let checksum = checksum_file_with_params(custom_params, file_on_disk, None); assert_eq!(checksum.unwrap(), 0xcbf43926); ``` ## C/C++ compatible library `cargo build` will produce a shared library target (`.so` on Linux, `.dll` on Windows, `.dylib` on macOS, etc) and an auto-generated [libcrc_fast.h](libcrc_fast.h) header file for use in non-Rust projects, such as through [FFI](https://en.wikipedia.org/wiki/Foreign_function_interface). It will also produce a static library target (`.a` on Linux and macOS, `.lib` on Windows, etc) for projects which prefer statically linking. There is a [crc-fast PHP extension](https://github.com/awesomized/crc-fast-php-ext) using it, for example. ## Background This implementation is based on Intel's [Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction](https://web.archive.org/web/20131224125630/https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf) white paper, though it folds 8-at-a-time, like other modern implementations, rather than the 4-at-a-time as in Intel's paper. This library works on `aarch64`, `x86_64`, and `x86` architectures, and is hardware-accelerated and optimized for each architecture. Inspired by [`crc32fast`](https://crates.io/crates/crc32fast), [`crc64fast`](https://crates.io/crates/crc64fast), and [`crc64fast-nvme`](https://crates.io/crates/crc64fast-nvme), each of which only accelerates a single, different CRC variant, and all of them were "reflected" variants. In contrast, this library accelerates _every known variant_ (and should accelerate any future variants without changes), including all the "non-reflected" variants. ## Important CRC variants While there are [many variants](https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iso-hdlc), three stand out as being the most important and widely used (all of which are "reflected"): ### [CRC-32/ISCSI](https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iscsi) Many, but not all, implementations simply call this `crc32c` and it's probably the 2nd most popular and widely used, after `CRC-32/ISO-HDLC`. It's used in `iSCSI`, `ext4`, `btrfs`, etc. Both `x86_64` and `aarch64` have native hardware support for this CRC variant, so we can use [fusion](https://www.corsix.org/content/fast-crc32c-4k) in many cases to accelerate it further by fusing SIMD CLMUL instructions with the native CRC instructions. ### [CRC-32/ISO-HDLC](https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iso-hdlc) Many, but not all, implementations simply call this `crc32` and it may be the most popular and widely used. It's used in `Ethernet`, `PKZIP`, `xz`, etc. Only `aarch64` has native hardware support for this CRC variant, so we can use [fusion](https://www.corsix.org/content/fast-crc32c-4k) on that platform, but not `x86_64`. ### [CRC-64/NVME](https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-64-nvme) `CRC-64/NVME` comes from the [NVM Express® NVM Command Set Specification](https://nvmexpress.org/wp-content/uploads/NVM-Express-NVM-Command-Set-Specification-1.0d-2023.12.28-Ratified.pdf) (Revision 1.0d, December 2023), is [AWS S3's recommended checksum option](https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html) (as `CRC64-NVME`), and has also been implemented in the [Linux kernel](https://github.com/torvalds/linux/blob/786c8248dbd33a5a7a07f7c6e55a7bfc68d2ca48/lib/crc64.c#L66-L73) (where it's been called `CRC-64/Rocksoft` in the past). Note that the `Check` value in the `NVMe` spec uses incorrect endianness (see `Section 5.2.1.3.4, Figure 120, page 83`) but all known public & private implementations agree on the correct value, which this library produces. # Acceleration targets This library has baseline support for accelerating all known `CRC-16`, `CRC-32`, and `CRC-64` variants on `aarch64`, `x86_64`, and `x86` internally in pure `Rust`. It uses the best available acceleration method for the detected CPU features at runtime, including: * `aarch64`: * `neon-pmull-sha3` (preferred, if available) * `neon-pmull` * `x86_64` and `x86`: * `avx512-vpclmulqdq` (preferred, if available) * `avx512-pclmulqdq` * `sse-pclmulqdq` There is a safe table-based software fallback for other architectures, or if no acceleration features are detected. ### Checking your platform capabilities There's an [arch-check](src/bin/arch-check.rs) binary which will explain the selected target architecture. ``` // test it works on your system (patches welcome!) cargo test // examine the chosen acceleration targets cargo run arch-check // build for release cargo build --release ``` ## Minimum Supported Rust Version (MSRV) This crate targets a `stable-2` policy (ie, the latest stable Rust version minus 2 minor versions) as the Minimum Supported Rust Version (MSRV). Bumping the `rust-version` will be considered a **MINOR** version bump. We'll try to support even older versions when possible, but given the high-performance use of SIMD intrinsics and other modern Rust features, this is merely a stated goal. We'll move up to `stable-2` ASAP when a sufficiently high performance improvement or necessary feature requires it. ## Performance Modern systems can exceed 100 GiB/s for calculating `CRC-32/ISCSI`, and nearly 90 GiB/s for `CRC-32/ISO-HDLC`, `CRC-64/NVME`, and all other reflected variants. (Forward variants are slower, due to the extra shuffle-masking, but are still extremely fast in this library). This is a summary of the performance for the most important and popular CRC checksums. ### CRC-32/ISCSI (reflected) AKA `crc32c` in many, but not all, implementations. | Arch | Brand | CPU | System | Target | 1KiB (GiB/s) | 1MiB (GiB/s) | |:--------|:------|:----------------|:--------------------------|:------------------|-------------:|-------------:| | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-24xl | avx512-vpclmulqdq | ~61 | ~111 | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx512-vpclmulqdq | ~26 | ~54 | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon-pmull-sha3 | ~23 | ~54 | | aarch64 | AWS | Graviton2 | EC2 c6g.metal | neon-pmull | ~11 | ~17 | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon-pmull-sha3 | ~60 | ~99 | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon-pmull-sha3 | ~56 | ~94 | ### CRC-32/ISO-HDLC (reflected) AKA `crc32` in many, but not all, implementations. | Arch | Brand | CPU | System | Target | 1KiB (GiB/s) | 1MiB (GiB/s) | |:--------|:------|:----------------|:--------------------------|:------------------|-------------:|-------------:| | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-248xl | avx512-vpclmulqdq | ~28 | ~88 | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx512-vpclmulqdq | ~21 | ~55 | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon-pmull-sha3 | ~23 | ~54 | | aarch64 | AWS | Graviton2 | EC2 c6g.metal | neon-pmull | ~11 | ~17 | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon-pmull-sha3 | ~48 | ~98 | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon-pmull-sha3 | ~56 | ~94 | ### CRC-64/NVME (reflected) [AWS S3's recommended checksum option](https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html) | Arch | Brand | CPU | System | Target | 1KiB (GiB/s) | 1MiB (GiB/s) | |:--------|:------|:----------------|:--------------------------|:------------------|-------------:|-------------:| | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-24xl | avx512-vpclmulqdq | ~28 | ~88 | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx512-vpclmulqdq | ~22 | ~55 | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon-pmull-sha3 | ~28 | ~41 | | aarch64 | AWS | Graviton2 | EC2 c6g.metal | neon-pmull | ~11 | ~16 | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon-pmull-sha3 | ~58 | ~72 | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon-pmull-sha3 | ~52 | ~72 | ### CRC-32/BZIP2 (forward) | Arch | Brand | CPU | System | Target | 1KiB (GiB/s) | 1MiB (GiB/s) | |:--------|:------|:----------------|:--------------------------|:------------------|-------------:|-------------:| | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-24xl | avx512-vpclmulqdq | ~20 | ~56 | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx512-vpclmulqdq | ~14 | ~43 | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon-pmull-eor3 | ~18 | ~40 | | aarch64 | AWS | Graviton2 | EC2 c6g.metal | neon-pmull | ~9 | ~14 | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon-pmull-eor3 | ~41 | ~59 | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon-pmull-eor3 | ~47 | ~64 | ### CRC-64/ECMA-182 (forward) | Arch | Brand | CPU | System | Target | 1KiB (GiB/s) | 1MiB (GiB/s) | |:--------|:------|:----------------|:--------------------------|:------------------|-------------:|-------------:| | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-24xl | avx512-vpclmulqdq | ~21 | ~56 | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx512-vpclmulqdq | ~14 | ~43 | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon-pmull-eor3 | ~19 | ~40 | | aarch64 | AWS | Graviton2 | EC2 c6g.metal | neon-pmull | ~9 | ~14 | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon-pmull-eor3 | ~40 | ~59 | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon-pmull-eor3 | ~46 | ~61 | ## Other CRC widths There are [a lot of other known CRC widths and variants](https://reveng.sourceforge.io/crc-catalogue/all.htm), ranging from `CRC-3/GSM` to `CRC-82/DARC`, and everything in between. Since [Awesome](https://awesome.co) only uses `CRC-32` or `CRC-64` widths in our products, this library began by supporting only those widths, including all known variants plus support for custom [Rocksoft](http://www.ross.net/crc/download/crc_v3.txt) parameters. `CRC-16` has since been added, including all known variants plus support for custom parameters as well. In theory, much of the "heavy lifting" has been done, so it should be possible to add other widths with minimal effort. PRs welcome! ## Memory Safety Given the heavy use of hardware intrinsics, this crate uses a decent amount of `unsafe` code. To help ensure memory safety and stability, this crate is validated using [Miri](https://github.com/rust-lang/miri) on `x86_64` as well as fuzz tested using [libFuzzer](https://github.com/rust-fuzz/libfuzzer) over millions of iterations. ## References * [Catalogue of parametrised CRC algorithms](https://reveng.sourceforge.io/crc-catalogue/all.htm) * [crc32-fast](https://crates.io/crates/crc32fast) Original `CRC-32/ISO-HDLC` (`crc32`) implementation in `Rust`. * [crc64-fast](https://github.com/tikv/crc64fast) Original `CRC-64/XZ` implementation in `Rust`. * [crc64fast-nvme](https://github.com/awesomized/crc64fast-nvme) Original `CRC-64/NVME` implementation in `Rust`. * [Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction](https://web.archive.org/web/20131224125630/https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf) Intel's paper. * [NVM Express® NVM Command Set Specification](https://nvmexpress.org/wp-content/uploads/NVM-Express-NVM-Command-Set-Specification-1.0d-2023.12.28-Ratified.pdf) The NVMe spec, including `CRC-64-NVME` (with incorrect endian `Check` value in `Section 5.2.1.3.4, Figure 120, page 83`). * [CRC-64/NVME](https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-64-nvme) The `CRC-64/NVME` quick definition. * [A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS](http://www.ross.net/crc/download/crc_v3.txt) Best description of CRC I've seen to date (and the definition of the Rocksoft model). * [Linux implementation](https://github.com/torvalds/linux/blob/786c8248dbd33a5a7a07f7c6e55a7bfc68d2ca48/lib/crc64.c) Linux implementation of `CRC-64/NVME`. * [MASM/C++ artifacts implementation](https://github.com/jeffareid/crc/) - Reference MASM/C++ implementation for generating artifacts. * [Intel isa-l GH issue #88](https://github.com/intel/isa-l/issues/88) - Additional insight into generating artifacts. * [StackOverflow PCLMULQDQ CRC32 answer](https://stackoverflow.com/questions/71328336/fast-crc-with-pclmulqdq-not-reflected/71329114#71329114) Insightful answer to implementation details for CRC32. * [StackOverflow PCLMULQDQ CRC32 question](https://stackoverflow.com/questions/21171733/calculating-constants-for-crc32-using-pclmulqdq) Insightful question & answer to CRC32 implementation details. * [AWS S3 announcement about CRC64-NVME support](https://aws.amazon.com/blogs/aws/introducing-default-data-integrity-protections-for-new-objects-in-amazon-s3/) * [AWS S3 docs on checking object integrity using CRC64-NVME](https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html) * [Vector Carry-Less Multiplication of Quadwords (VPCLMULQDQ) details](https://en.wikichip.org/wiki/x86/vpclmulqdq) * [Linux kernel updates by Eric Biggers to use VPCLMULQDQ, etc](https://lkml.org/lkml/2025/2/10/1367) * [Faster CRC32-C on x86](https://www.corsix.org/content/fast-crc32c-4k) * [Faster CRC32 on the Apple M1](https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/) * [An alternative exposition of crc32_4k_pclmulqdq](https://www.corsix.org/content/alternative-exposition-crc32_4k_pclmulqdq) * [fast-crc32](https://github.com/corsix/fast-crc32) - implementations of fusion for two CRC-32 variants. ## License `cfc-fast` is dual-licensed under * Apache 2.0 license ([LICENSE-Apache](./LICENSE-Apache) or ) * MIT license ([LICENSE-MIT](./LICENSE-MIT) or )crc-fast-1.10.0/benches/README.md000064400000000000000000000401651046102023000143010ustar 00000000000000# Performance ## "Reflected" vs "Forward" There is a significant performance penalty for the "forward" implementations, due to the extra shuffle-masking. I've noted the different variants in the table below. ## Aarch64 Also note that, on Aarch64 NEON platforms, there is a measurable difference between some of the target implementations for the major CRC-32 variants depending on typical payload size. You may wish to tune for your specific environment and use cases using the target feature when building (we will certainly do this on our production systems). ## Blending For some of the CRC-32 implementations, a blended approach where "large" (>1KiB) payloads are processed by a different implementation than "small" payloads, is supplied. Particularly for x86_64, the blended approach yields the best result on CRC-32/ISO-HDLC, where hardware support lags behind. On aarch64, the blended approach is the ideal sweet spot for AWS Graviton4 instances, which is probably the primary production deployment. In cases where it makes sense, the blended approaches are the default. You can fine-tune this for your deployment strategy using feature flags. ### CRC-32/AUTOSAR (reflected) | Arch | Brand | CPU | System | Target | Throughput (1 KiB) | Throughput (1 MiB) | |:--------|:------|:----------------|:--------------------------|:----------------|-------------------:|-------------------:| | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | avx2_vpclmulqdq | ~16.204 GiB/s | ~55.921 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | sse_pclmulqdq | ~14.243 GiB/s | ~28.148 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx2_vpclmulqdq | ~17.135 GiB/s | ~27.378 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | sse_pclmulqdq | ~10.237 GiB/s | ~13.708 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_pclmulqdq | ~15.061 GiB/s | ~24.871 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_pclmulqdq | ~39.201 GiB/s | ~72.359 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_pclmulqdq | ~36.917 GiB/s | ~64.916 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_pclmulqdq | ~38.245 GiB/s | ~71.382 GiB/s | ### CRC-32/BZIP2 (forward) | Arch | Brand | CPU | System | Target | Throughput (1 KiB) | Throughput (1 MiB) | |:--------|:------|:----------------|:--------------------------|:----------------|-------------------:|-------------------:| | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | avx2_vpclmulqdq | ~15.613 GiB/s | ~27.997 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | sse_pclmulqdq | ~13.369 GiB/s | ~28.142 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx2_vpclmulqdq | ~14.100 GiB/s | ~25.755 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | sse_pclmulqdq | ~9.8876 GiB/s | ~13.293 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_pclmulqdq | ~14.040 GiB/s | ~21.014 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_pclmulqdq | ~37.052 GiB/s | ~58.513 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_pclmulqdq | ~34.099 GiB/ | ~53.448 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_pclmulqdq | ~38.424 GiB/s | ~59.369 GiB/s | ### CRC-32/ISCSI (reflected) [aka "crc32c" in many, but not all, implementations] | Arch | Brand | CPU | System | Target | Throughput (1 KiB) | Throughput (1 MiB) | |:--------|:------|:----------------|:--------------------------|:---------------------------|-------------------:|-------------------:| | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | **avx512_vpclmulqdq_v3x2** | ~38.013 GiB/s | ~111.72 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | avx512_v4s3x3 | ~18.684 GiB/s | ~43.461 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | sse_v4s3x3 | ~16.780 GiB/s | ~43.471 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | sse_pclmulqdq | ~14.050 GiB/s | ~28.045 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | avx2_vpclmulqdq | ~16.597 GiB/s | ~56.318 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | **avx512_vpclmulqdq_v3x2** | ~21.125 GiB/s | ~54.638 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx512_v4s3x3 | ~12.549 GiB/s | ~29.019 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | sse_v4s3x3 | ~11.786 GiB/s | ~24.365 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | sse_pclmulqdq | ~10.690 GiB/s | ~13.656 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx2_vpclmulqdq | ~16.625 GiB/s | ~27.308 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_eor3_v9s3x2e_s3 | ~12.182 GiB/s | ~31.463 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_v12e_v1 | ~19.076 GiB/s | ~21.931 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_v3s4x2e_v2 | ~13.123 GiB/s | ~28.757 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | **neon_blended** | ~18.530 GiB/s | ~31.598 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_pclmulqdq | ~14.685 GiB/s | ~24.676 GiB/s | | aarch64 | Apple | M3 Max | MacBook Pro 16" | neon_eor3_v9s3x2e_s3 | ~19.848 GiB/s | ~95.026 GiB/s | | aarch64 | Apple | M3 Max | MacBook Pro 16" | neon_v12e_v1 | ~50.518 GiB/s | ~94.455 GiB/s | | aarch64 | Apple | M3 Max | MacBook Pro 16" | neon_v3s4x2e_v2 | ~14.499 GiB/s | ~48.604 GiB/s | | aarch64 | Apple | M3 Max | MacBook Pro 16" | neon_pclmulqdq | ~25.107 GiB/s | ~67.141 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_eor3_v9s3x2e_s3 | ~29.130 GiB/s | ~96.865 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_v12e_v1 | ~59.834 GiB/s | ~105.31 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_v3s4x2e_v2 | ~22.472 GiB/s | ~54.195 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | **neon_blended** | ~60.791 GiB/s | ~96.310 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_pclmulqdq | ~39.322 GiB/s | ~72.366 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_eor3_v9s3x2e_s3 | ~20.183 GiB/s | ~87.630 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_v12e_v1 | ~50.776 GiB/s | ~82.354 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_v3s4x2e_v2 | ~19.021 GiB/s | ~44.149 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | **neon_blended** | ~50.260 GiB/s | ~87.601 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_pclmulqdq | ~34.384 GiB/s | ~65.159 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_eor3_v9s3x2e_s3 | ~23.398 GiB/s | ~97.221 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | **neon_v12e_v1** | ~54.760 GiB/s | ~99.616 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_v3s4x2e_v2 | ~18.425 GiB/s | ~52.132 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_blended | ~55.806 GiB/s | ~95.427 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_pclmulqdq | ~40.545 GiB/s | ~72.045 GiB/s | ### CRC-32/ISO-HDLC (reflected) [aka "crc32" in many, but not all, implementations] | Arch | Brand | CPU | System | Target | Throughput (1 KiB) | Throughput (1 MiB) | |:--------|:------|:----------------|:--------------------------|:-----------------------|-------------------:|-------------------:| | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | avx512_vpclmulqdq_v3x2 | ~8.1734 GiB/s | ~111.60 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | avx512_v4s3x3 | ~7.2054 GiB/s | ~11.953 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | sse_v4s3x3 | ~7.1272 GiB/s | ~11.883 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | sse_pclmulqdq | ~14.050 GiB/s | ~28.045 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | avx2_vpclmulqdq | ~16.615 GiB/s | ~56.090 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | **avx2_blended** | ~16.563 GiB/s | ~110.41 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx512_vpclmulqdq_v3x2 | ~6.8854 GiB/s | ~53.906 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx512_v4s3x3 | ~4.4371 GiB/s | ~8.9257 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | sse_v4s3x3 | ~4.1876 GiB/s | ~8.2890 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | sse_pclmulqdq | ~10.690 GiB/s | ~13.656 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx2_vpclmulqdq | ~17.806 GiB/s | ~27.312 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | **avx2_blended** | ~17.231 GiB/s | ~53.796 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_eor3_v9s3x2e_s3 | ~12.187 GiB/s | ~31.140 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_v12e_v1 | ~18.965 GiB/s | ~22.512 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_v3s4x2e_v2 | ~13.093 GiB/s | ~28.971 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | **neon_blended** | ~18.470 GiB/s | ~31.536 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_pclmulqdq | ~14.654 GiB/s | ~24.264 GiB/s | | aarch64 | Apple | M3 Max | MacBook Pro 16" | neon_eor3_v9s3x2e_s3 | ~21.994 GiB/s | ~95.329 GiB/s | | aarch64 | Apple | M3 Max | MacBook Pro 16" | neon_v12e_v1 | ~40.351 GiB/s | ~95.176 GiB/s | | aarch64 | Apple | M3 Max | MacBook Pro 16" | neon_v3s4x2e_v2 | ~17.035 GiB/s | ~48.650 GiB/s | | aarch64 | Apple | M3 Max | MacBook Pro 16" | neon_pclmulqdq | ~39.514 GiB/s | ~67.118 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_eor3_v9s3x2e_s3 | ~29.186 GiB/s | ~96.635 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | **neon_v12e_v1** | ~59.174 GiB/s | ~105.28 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_v3s4x2e_v2 | ~22.576 GiB/s | ~54.050 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_blended | ~59.331 GiB/s | ~96.238 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_pclmulqdq | ~39.546 GiB/s | ~72.143 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_eor3_v9s3x2e_s3 | ~20.433 GiB/s | ~87.812 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_v12e_v1 | ~50.557 GiB/s | ~82.379 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_v3s4x2e_v2 | ~18.785 GiB/s | ~44.212 GiB/ | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | **neon_blended** | ~50.106 GiB/s | ~86.992 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_pclmulqdq | ~33.112 GiB/s | ~64.870 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_eor3_v9s3x2e_s3 | ~23.382 GiB/s | ~97.845 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | **neon_v12e_v1** | ~56.451 GiB/s | ~98.768 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_v3s4x2e_v2 | ~18.083 GiB/s | ~52.059 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_blended | ~53.937 GiB/s | ~97.331 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_pclmulqdq | ~40.117 GiB/s | ~71.966 GiB/s | ### CRC-64/ECMA-182 (forward) | Arch | Brand | CPU | System | Target | Throughput (1 KiB) | Throughput (1 MiB) | |:--------|:------|:----------------|:--------------------------|:----------------|-------------------:|-------------------:| | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | avx2_vpclmulqdq | ~16.733 GiB/s | ~27.976 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | sse_pclmulqdq | ~13.896 GiB/s | ~28.171 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx2_vpclmulqdq | ~14.807 GiB/s | ~25.764 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | sse_pclmulqdq | ~10.145 GiB/s | ~13.277 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_pclmulqdq | ~14.367 GiB/s | ~21.078 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_pclmulqdq | ~37.538 GiB/s | ~59.511 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_pclmulqdq | ~34.098 GiB/s | ~53.587 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_pclmulqdq | ~37.525 GiB/s | ~59.392 GiB/s | ### CRC-64/NVME (reflected) | Arch | Brand | CPU | System | Target | Throughput (1 KiB) | Throughput (1 MiB) | |:--------|:------|:----------------|:--------------------------|:----------------|-------------------:|-------------------:| | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | avx2_vpclmulqdq | ~16.967 GiB/s | ~56.369 GiB/s | | x86_64 | Intel | Sapphire Rapids | EC2 c7i.metal-48xl | sse_pclmulqdq | ~14.082 GiB/s | ~28.104 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | avx2_vpclmulqdq | ~17.347 GiB/s | ~27.377 GiB/s | | x86_64 | AMD | Genoa | EC2 c7a.metal-48xl | sse_pclmulqdq | ~10.661 GiB/s | ~13.664 GiB/s | | aarch64 | AWS | Graviton4 | EC2 c8g.metal-48xl | neon_pclmulqdq | ~16.272 GiB/s | ~16.272 GiB/s | | aarch64 | Apple | M4 Max | MacBook Pro 16" (16 core) | neon_pclmulqdq | ~40.335 GiB/s | ~72.282 GiB/s | | aarch64 | Apple | M2 Ultra | Mac Studio (24 core) | neon_pclmulqdq | ~39.315 GiB/s | ~64.987 GiB/s | | aarch64 | Apple | M3 Ultra | Mac Studio (32 core) | neon_pclmulqdq | ~43.987 GiB/s | ~71.891 GiB/s | crc-fast-1.10.0/benches/benchmark.rs000064400000000000000000000137201046102023000153170ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. use crc_fast::checksum; use crc_fast::CrcAlgorithm; use criterion::*; use rand::{rng, RngCore}; use std::hint::black_box; use std::time::Duration; pub const SIZES: &[(&str, i32)] = &[ ("1 MiB", 1024 * 1024), //("512 KiB", 512 * 1024), //("256 KiB", 256 * 1024), //("128 KiB", 128 * 1024), //("64 KiB", 64 * 1024), //("16 KiB", 16 * 1024), //("8 KiB", 8 * 1024), //("4 KiB", 4 * 1024), //("2 KiB", 4 * 1024), ("1 KiB", 1024), //("768 bytes", 768), //("512 bytes", 512), //("256 bytes", 256), //("255 bytes", 255), //("128 bytes", 128), //("127 bytes", 127), //("64 bytes", 64), //("32 bytes", 32), //("16 bytes", 16), //("1 bytes", 1), ]; // these are the most important algorithms in popular use, with forward/reflected coverage pub const CRC32_ALGORITHMS: &[CrcAlgorithm] = &[ // benchmark both CRC-32/ISCSI and CRC-32/ISO-HDLC since they're special flowers with lots of // different acceleration targets. CrcAlgorithm::Crc32Autosar, // reflected CrcAlgorithm::Crc32Iscsi, // reflected, fusion CrcAlgorithm::Crc32IsoHdlc, // reflected, fusion CrcAlgorithm::Crc32Bzip2, // forward ]; // these are the most important algorithms in popular use, with forward/reflected coverage pub const CRC64_ALGORITHMS: &[CrcAlgorithm] = &[ CrcAlgorithm::Crc64Ecma182, // forward CrcAlgorithm::Crc64Nvme, // reflected ]; #[inline(always)] fn random_data(size: i32) -> Vec { let mut rng = rng(); let mut buf = vec![0u8; size as usize]; rng.fill_bytes(&mut buf); buf } fn create_aligned_data(input: &[u8]) -> Vec { // Size of our target alignment structure let align_size = std::mem::size_of::<[[u64; 4]; 2]>(); // 64 bytes // Create a zero-filled vector with padding to ensure we can find a properly aligned position let mut padded = vec![0; input.len() + align_size]; // Find the first address that satisfies our alignment let start_addr = padded.as_ptr() as usize; let align_offset = (align_size - (start_addr % align_size)) % align_size; // Copy the input into the aligned position let aligned_start = &mut padded[align_offset..]; aligned_start[..input.len()].copy_from_slice(input); // Return the exact slice we need aligned_start[..input.len()].to_vec() } #[inline(always)] fn bench_crc32(c: &mut Criterion) { let mut group = c.benchmark_group("CRC-32"); println!( "Acceleration target: {}", crc_fast::get_calculator_target(CrcAlgorithm::Crc32Iscsi) ); for (size_name, size) in SIZES { let buf = create_aligned_data(&random_data(*size)); let (part1, rest) = buf.split_at(buf.len() / 4); let (part2, rest) = rest.split_at(rest.len() / 3); let (part3, part4) = rest.split_at(rest.len() / 2); for algorithm in CRC32_ALGORITHMS { let algorithm_name = algorithm.to_string(); let mut algorithm_name_parts = algorithm_name.split('/'); let _ = algorithm_name_parts.next(); let alg_suffix = algorithm_name_parts.next(); group.throughput(Throughput::Bytes(*size as u64)); group.sample_size(1000); group.measurement_time(Duration::from_secs(30)); let bench_name = [alg_suffix.unwrap(), "(checksum)"].join(" "); group.bench_function(BenchmarkId::new(bench_name, size_name), |b| { b.iter(|| black_box(checksum(*algorithm, &buf))) }); let bench_name = [algorithm_name.clone(), "(4-part digest)".parse().unwrap()].join(" "); group.bench_function(BenchmarkId::new(bench_name, size_name), |b| { b.iter(|| { black_box({ let mut digest = crc_fast::Digest::new(*algorithm); digest.update(part1); digest.update(part2); digest.update(part3); digest.update(part4); digest.finalize() }) }) }); } } } #[inline(always)] fn bench_crc64(c: &mut Criterion) { println!( "Acceleration target: {}", crc_fast::get_calculator_target(CrcAlgorithm::Crc64Nvme) ); let mut group = c.benchmark_group("CRC-64"); for (size_name, size) in SIZES { let buf = create_aligned_data(&random_data(*size)); let (part1, rest) = buf.split_at(buf.len() / 4); let (part2, rest) = rest.split_at(rest.len() / 3); let (part3, part4) = rest.split_at(rest.len() / 2); for algorithm in CRC64_ALGORITHMS { let algorithm_name = algorithm.to_string(); let mut algorithm_name_parts = algorithm_name.split('/'); let _ = algorithm_name_parts.next(); let alg_suffix = algorithm_name_parts.next(); group.throughput(Throughput::Bytes(*size as u64)); group.sample_size(1000); group.measurement_time(Duration::from_secs(30)); let bench_name = [alg_suffix.unwrap(), "(checksum)"].join(" "); group.bench_function(BenchmarkId::new(bench_name, size_name), |b| { b.iter(|| black_box(checksum(*algorithm, &buf))) }); let bench_name = [algorithm_name.clone(), "(4-part digest)".parse().unwrap()].join(" "); group.bench_function(BenchmarkId::new(bench_name, size_name), |b| { b.iter(|| { black_box({ let mut digest = crc_fast::Digest::new(*algorithm); digest.update(part1); digest.update(part2); digest.update(part3); digest.update(part4); digest.finalize() }) }) }); } } } criterion_group!(benches, bench_crc32, bench_crc64); criterion_main!(benches); crc-fast-1.10.0/crc-check.txt000064400000000000000000000000111046102023000137600ustar 00000000000000123456789crc-fast-1.10.0/libcrc_fast.h000064400000000000000000000217671046102023000140460ustar 00000000000000/* crc_fast library C/C++ API - Copyright 2025 Don MacAskill */ /* This header is auto-generated. Do not edit directly. */ #ifndef CRC_FAST_H #define CRC_FAST_H #include #include #include #include /** * Error codes for FFI operations */ typedef enum CrcFastError { /** * Operation completed successfully */ Success = 0, /** * Lock was poisoned (thread panicked while holding lock) */ LockPoisoned = 1, /** * Null pointer was passed where non-null required */ NullPointer = 2, /** * Invalid key count for CRC parameters */ InvalidKeyCount = 3, /** * Unsupported CRC width (must be 32 or 64) */ UnsupportedWidth = 4, /** * Invalid UTF-8 string */ InvalidUtf8 = 5, /** * File I/O error */ IoError = 6, /** * Internal string conversion error */ StringConversionError = 7, } CrcFastError; /** * The supported CRC algorithms */ typedef enum CrcFastAlgorithm { CrcCustom, Crc16Arc, Crc16Cdma2000, Crc16Cms, Crc16Dds110, Crc16DectR, Crc16DectX, Crc16Dnp, Crc16En13757, Crc16Genibus, Crc16Gsm, Crc16Ibm3740, Crc16IbmSdlc, Crc16IsoIec144433A, Crc16Kermit, Crc16Lj1200, Crc16M17, Crc16MaximDow, Crc16Mcrf4xx, Crc16Modbus, Crc16Nrsc5, Crc16OpensafetyA, Crc16OpensafetyB, Crc16Profibus, Crc16Riello, Crc16SpiFujitsu, Crc16T10Dif, Crc16Teledisk, Crc16Tms37157, Crc16Umts, Crc16Usb, Crc16Xmodem, Crc32Aixm, Crc32Autosar, Crc32Base91D, Crc32Bzip2, Crc32CdRomEdc, Crc32Cksum, Crc32Custom, Crc32Iscsi, Crc32IsoHdlc, Crc32Jamcrc, Crc32Mef, Crc32Mpeg2, Crc32Xfer, Crc64Custom, Crc64Ecma182, Crc64GoIso, Crc64Ms, Crc64Nvme, Crc64Redis, Crc64We, Crc64Xz, } CrcFastAlgorithm; /** * Represents a CRC Digest, which is used to compute CRC checksums. * * The `Digest` struct maintains the state of the CRC computation, including * the current state, the amount of data processed, the CRC parameters, and * the calculator function used to perform the CRC calculation. */ typedef struct CrcFastDigest CrcFastDigest; /** * A handle to the Digest object */ typedef struct CrcFastDigestHandle { struct CrcFastDigest *_0; } CrcFastDigestHandle; /** * Custom CRC parameters */ typedef struct CrcFastParams { enum CrcFastAlgorithm algorithm; uint8_t width; uint64_t poly; uint64_t init; bool refin; bool refout; uint64_t xorout; uint64_t check; uint32_t key_count; const uint64_t *keys; } CrcFastParams; #ifdef __cplusplus extern "C" { #endif // __cplusplus /** * Gets the last error that occurred in the current thread * Returns CrcFastError::Success if no error has occurred */ enum CrcFastError crc_fast_get_last_error(void); /** * Clears the last error for the current thread */ void crc_fast_clear_error(void); /** * Gets a human-readable error message for the given error code * Returns a pointer to a static string (do not free) */ const char *crc_fast_error_message(enum CrcFastError error); /** * Creates a new Digest to compute CRC checksums using algorithm */ struct CrcFastDigestHandle *crc_fast_digest_new(enum CrcFastAlgorithm algorithm); /** * Creates a new Digest with a custom initial state */ struct CrcFastDigestHandle *crc_fast_digest_new_with_init_state(enum CrcFastAlgorithm algorithm, uint64_t init_state); /** * Creates a new Digest to compute CRC checksums using custom parameters * Returns NULL if parameters are invalid (invalid key count or null pointer) * Call crc_fast_get_last_error() to get the specific error code */ struct CrcFastDigestHandle *crc_fast_digest_new_with_params(struct CrcFastParams params); /** * Updates the Digest with data */ void crc_fast_digest_update(struct CrcFastDigestHandle *handle, const char *data, uintptr_t len); /** * Calculates the CRC checksum for data that's been written to the Digest * Returns 0 on error (e.g. null handle) */ uint64_t crc_fast_digest_finalize(struct CrcFastDigestHandle *handle); /** * Free the Digest resources without finalizing */ void crc_fast_digest_free(struct CrcFastDigestHandle *handle); /** * Reset the Digest state */ void crc_fast_digest_reset(struct CrcFastDigestHandle *handle); /** * Finalize and reset the Digest in one operation * Returns 0 on error (e.g. null handle) */ uint64_t crc_fast_digest_finalize_reset(struct CrcFastDigestHandle *handle); /** * Combine two Digest checksums */ void crc_fast_digest_combine(struct CrcFastDigestHandle *handle1, struct CrcFastDigestHandle *handle2); /** * Gets the amount of data processed by the Digest so far * Returns 0 on error (e.g. null handle) */ uint64_t crc_fast_digest_get_amount(struct CrcFastDigestHandle *handle); /** * Gets the current state of the Digest * Returns 0 on error (e.g. null handle) */ uint64_t crc_fast_digest_get_state(struct CrcFastDigestHandle *handle); /** * Helper method to calculate a CRC checksum directly for a string using algorithm * Returns 0 on error (e.g. null data pointer) */ uint64_t crc_fast_checksum(enum CrcFastAlgorithm algorithm, const char *data, uintptr_t len); /** * Helper method to calculate a CRC checksum directly for data using custom parameters * Returns 0 if parameters are invalid or data is null * Call crc_fast_get_last_error() to get the specific error code */ uint64_t crc_fast_checksum_with_params(struct CrcFastParams params, const char *data, uintptr_t len); /** * Helper method to just calculate a CRC checksum directly for a file using algorithm * Returns 0 if path is null or file I/O fails * Call crc_fast_get_last_error() to get the specific error code */ uint64_t crc_fast_checksum_file(enum CrcFastAlgorithm algorithm, const uint8_t *path_ptr, uintptr_t path_len); /** * Helper method to calculate a CRC checksum directly for a file using custom parameters * Returns 0 if parameters are invalid, path is null, or file I/O fails * Call crc_fast_get_last_error() to get the specific error code */ uint64_t crc_fast_checksum_file_with_params(struct CrcFastParams params, const uint8_t *path_ptr, uintptr_t path_len); /** * Combine two CRC checksums using algorithm */ uint64_t crc_fast_checksum_combine(enum CrcFastAlgorithm algorithm, uint64_t checksum1, uint64_t checksum2, uint64_t checksum2_len); /** * Combine two CRC checksums using custom parameters * Returns 0 if parameters are invalid * Call crc_fast_get_last_error() to get the specific error code */ uint64_t crc_fast_checksum_combine_with_params(struct CrcFastParams params, uint64_t checksum1, uint64_t checksum2, uint64_t checksum2_len); /** * Returns the custom CRC parameters for a given set of Rocksoft CRC parameters * If width is not 32 or 64, sets error to UnsupportedWidth */ struct CrcFastParams crc_fast_get_custom_params(const char *name_ptr, uint8_t width, uint64_t poly, uint64_t init, bool reflected, uint64_t xorout, uint64_t check); /** * Gets the target build properties (CPU architecture and fine-tuning parameters) for this algorithm * Returns NULL if string conversion fails * Call crc_fast_get_last_error() to get the specific error code */ const char *crc_fast_get_calculator_target(enum CrcFastAlgorithm algorithm); /** * Gets the version of this library * Returns a pointer to "unknown" if version string is invalid */ const char *crc_fast_get_version(void); /** * Calculates the CRC-32/ISCSI checksum (commonly called "crc32c" in many, but not all, * implementations). * * https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iscsi * * Returns 0 on error (e.g. null data pointer) */ uint32_t crc_fast_crc32_iscsi(const char *data, uintptr_t len); /** * Calculates the CRC-32/ISO-HDLC checksum (commonly called "crc32" in many, but not all, * implementations). * * https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iso-hdlc * * Returns 0 on error (e.g. null data pointer) */ uint32_t crc_fast_crc32_iso_hdlc(const char *data, uintptr_t len); /** * Calculates the CRC-64/NVME checksum. * * https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-64-nvme * * Returns 0 on error (e.g. null data pointer) */ uint64_t crc_fast_crc64_nvme(const char *data, uintptr_t len); #ifdef __cplusplus } // extern "C" #endif // __cplusplus #endif /* CRC_FAST_H */ crc-fast-1.10.0/src/algorithm.rs000064400000000000000000000452631046102023000145420ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module contains the main algorithm for CRC calculation. //! //! This implementation is designed to work with both CRC-32 and CRC-64 algorithms. //! //! It uses SIMD instructions for performance optimization and is designed to be //! platform-agnostic. //! //! The code is structured to allow for easy extension and modification for //! different architectures and CRC algorithms. //! //! The main entry point is the `update` function, which takes the current CRC state, //! the input data, CRC parameters, and architecture-specific operations. #![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] use crate::consts::CRC_CHUNK_SIZE; use crate::enums::{DataChunkProcessor, Reflector}; use crate::structs::CrcState; use crate::traits::{ArchOps, EnhancedCrcWidth}; use crate::{crc16, crc32, crc64, CrcParams}; /// Extract keys from CrcParams using safe accessor methods /// This ensures bounds checking and future compatibility #[inline(always)] fn extract_keys_array(params: &CrcParams) -> [u64; 23] { [ params.get_key(0), params.get_key(1), params.get_key(2), params.get_key(3), params.get_key(4), params.get_key(5), params.get_key(6), params.get_key(7), params.get_key(8), params.get_key(9), params.get_key(10), params.get_key(11), params.get_key(12), params.get_key(13), params.get_key(14), params.get_key(15), params.get_key(16), params.get_key(17), params.get_key(18), params.get_key(19), params.get_key(20), params.get_key(21), params.get_key(22), ] } /// Main entry point that works for both CRC-32 and CRC-64 #[inline(always)] pub unsafe fn update( state: W::Value, bytes: &[u8], params: &CrcParams, ops: &T, ) -> W::Value where T::Vector: Copy, { let len = bytes.len(); if len == 0 { return state; } // Create the appropriate reflector based on CRC type let reflector = if params.refin { Reflector::NoReflector } else { // Load mask for byte-swapping operations let smask = ops.load_aligned(&W::load_constants(params.refin)[0] as *const [u64; 2]); Reflector::ForwardReflector { smask } }; // Create initial CRC state let mut crc_state = W::create_state(state, params.refin, ops); // Extract keys once and pass by reference to avoid repeated stack copies let keys = extract_keys_array(params); // Process data differently based on length // On ARM M4 Max, ARM c8g, x86 c7a, and x86 c7i, using 128 bytes is a measurably faster // threshold than 256 bytes... if len < 128 { // Select processor based on input length let processor = DataChunkProcessor::for_length(len); return process_by_strategy::( processor, bytes, &mut crc_state, reflector, &keys, ops, ); } // Process large inputs with SIMD-optimized approach process_large_aligned::(bytes, &mut crc_state, reflector, &keys, ops) } /// Process data with the selected strategy #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] unsafe fn process_by_strategy( strategy: DataChunkProcessor, data: &[u8], state: &mut CrcState, reflector: Reflector, keys: &[u64; 23], ops: &T, ) -> W::Value where T::Vector: Copy, { match strategy { DataChunkProcessor::From0To15 => match W::WIDTH { 16 => crc16::algorithm::process_0_to_15::(data, state, &reflector, keys, ops), 32 => crc32::algorithm::process_0_to_15::(data, state, &reflector, keys, ops), 64 => crc64::algorithm::process_0_to_15::(data, state, &reflector, keys, ops), _ => panic!("Unsupported CRC width"), }, DataChunkProcessor::From16 => { process_exactly_16::(data, state, &reflector, keys, ops) } DataChunkProcessor::From17To31 => { process_17_to_31::(data, state, &reflector, keys, ops) } DataChunkProcessor::From32To255 => { process_32_to_255::(data, state, &reflector, keys, ops) } } } /// Process large inputs with proper SIMD alignment #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] unsafe fn process_large_aligned( bytes: &[u8], state: &mut CrcState, reflector: Reflector, keys: &[u64; 23], ops: &T, ) -> W::Value where T::Vector: Copy, { // Align data for SIMD processing let (left, middle, right) = bytes.align_to::<[T::Vector; 8]>(); if let Some((first, rest)) = middle.split_first() { if !left.is_empty() { let processor = DataChunkProcessor::for_length(left.len()); // Process unaligned bytes at the start let left_crc = process_by_strategy::(processor, left, state, reflector, keys, ops); // Update state with the result from processing left bytes *state = W::create_state(left_crc, state.reflected, ops); } // try to use the enhanced SIMD implementation first, fall back to non-enhanced if necessary if rest.is_empty() || !ops.process_enhanced_simd_blocks::(state, first, rest, &reflector, keys) { process_simd_chunks::(state, first, rest, &reflector, keys, ops); } // Process any unaligned bytes at the end if !right.is_empty() { let processor = DataChunkProcessor::for_length(right.len()); // Use the current state to process the right bytes return process_by_strategy::(processor, right, state, reflector, keys, ops); } // Extract the final result return W::extract_result(state.value, state.reflected, ops); } // Fall back to existing implementation if proper alignment isn't possible let processor = DataChunkProcessor::for_length(bytes.len()); process_by_strategy::(processor, bytes, state, reflector, keys, ops) } /// Process SIMD-aligned chunks of 128 bytes #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] unsafe fn process_simd_chunks( state: &mut CrcState, first: &[T::Vector; 8], rest: &[[T::Vector; 8]], reflector: &Reflector, keys: &[u64; 23], ops: &T, ) where T::Vector: Copy, { // Create a copy of the first 128 bytes let mut x = *first; // Apply initial reflection if needed for item in &mut x { *item = reflect_bytes(reflector, *item, ops); } // XOR initial CRC with the first 16 bytes x[0] = ops.xor_vectors(x[0], state.value); // Load the coefficient pair for folding let coeff = W::create_coefficient(keys[4], keys[3], state.reflected, ops); // Process remaining 128-byte chunks for chunk in rest { for (xi, yi) in x.iter_mut().zip(chunk.iter()) { // Load and reflect the new data if needed let yi = reflect_bytes(reflector, *yi, ops); // Create a temporary state for folding let mut temp_state = CrcState { value: *xi, reflected: state.reflected, }; // Fold 16 bytes W::fold_16(&mut temp_state, coeff, yi, ops); // XOR with new data *xi = temp_state.value; } } // Fold the 8 xmm registers to 1 xmm register with different constants let mut res = x[7]; // Create fold coefficients for different distances let fold_coefficients = [ W::create_coefficient(keys[10], keys[9], state.reflected, ops), // 112 bytes W::create_coefficient(keys[12], keys[11], state.reflected, ops), // 96 bytes W::create_coefficient(keys[14], keys[13], state.reflected, ops), // 80 bytes W::create_coefficient(keys[16], keys[15], state.reflected, ops), // 64 bytes W::create_coefficient(keys[18], keys[17], state.reflected, ops), // 48 bytes W::create_coefficient(keys[20], keys[19], state.reflected, ops), // 32 bytes W::create_coefficient(keys[2], keys[1], state.reflected, ops), // 16 bytes ]; for (i, &coeff) in fold_coefficients.iter().enumerate() { let mut temp_state = CrcState { value: x[i], reflected: state.reflected, }; W::fold_16(&mut temp_state, coeff, res, ops); res = temp_state.value } // Perform final reduction and update state let final_value = W::perform_final_reduction(res, state.reflected, keys, ops); *state = W::create_state(final_value, state.reflected, ops); } /// Process exactly 16 bytes #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] unsafe fn process_exactly_16( data: &[u8], state: &mut CrcState, reflector: &Reflector, keys: &[u64; 23], ops: &T, ) -> W::Value where T::Vector: Copy, { // Process 16 bytes and fold to width-specific size W::perform_final_reduction( process_16_byte_block(data.as_ptr(), state.value, reflector, ops), state.reflected, keys, ops, ) } /// Process a 16-byte block of data #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] unsafe fn process_16_byte_block( data_ptr: *const u8, initial_crc: T::Vector, reflector: &Reflector, ops: &T, ) -> T::Vector where T::Vector: Copy, { // Load data, apply reflection, and XOR with initial CRC ops.xor_vectors( reflect_bytes(reflector, ops.load_bytes(data_ptr), ops), initial_crc, ) } /// Reflect bytes according to the reflector strategy #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] pub(crate) unsafe fn reflect_bytes( reflector: &Reflector, data: T::Vector, ops: &T, ) -> T::Vector where T::Vector: Copy, { match reflector { Reflector::NoReflector => data, Reflector::ForwardReflector { smask } => ops.shuffle_bytes(data, *smask), } } /// Fold and XOR generic implementation #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] unsafe fn fold_and_xor( current: T::Vector, coefficient: T::Vector, data_to_xor: T::Vector, reflected: bool, ops: &T, ) -> T::Vector where T::Vector: Copy, { // Create a temporary state for folding let mut temp_state = CrcState { value: current, reflected, }; // Fold 16 bytes using width-specific method W::fold_16(&mut temp_state, coefficient, data_to_xor, ops); temp_state.value } /// Process inputs between 17 and 31 bytes /// This implementation works for both CRC-32 and CRC-64 using the width-specific traits #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] unsafe fn process_17_to_31( data: &[u8], state: &mut CrcState, reflector: &Reflector, keys: &[u64; 23], ops: &T, ) -> W::Value where T::Vector: Copy, { // Process the first 16 bytes let xmm7 = process_16_byte_block(data.as_ptr(), state.value, reflector, ops); // Process the remaining bytes (1-15) let remaining_len = data.len() - CRC_CHUNK_SIZE; // Use the shared function to handle the last two chunks let final_xmm7 = get_last_two_xmms::( DataRegion { full_data: data, offset: CRC_CHUNK_SIZE, remaining: remaining_len, }, xmm7, keys, reflector, state.reflected, ops, ); // Perform final reduction W::perform_final_reduction(final_xmm7, state.reflected, keys, ops) } // Process inputs between 32 and 255 bytes /// This implementation works for both CRC-32 and CRC-64 using the width-specific traits #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] unsafe fn process_32_to_255( data: &[u8], state: &mut CrcState, reflector: &Reflector, keys: &[u64; 23], ops: &T, ) -> W::Value where T::Vector: Copy, { let mut current_pos = CRC_CHUNK_SIZE; let mut remaining_len = data.len() - CRC_CHUNK_SIZE; // Process first 16 bytes let mut xmm7 = process_16_byte_block(data.as_ptr(), state.value, reflector, ops); // Create coefficient for folding operations let rk01rk02 = W::create_coefficient(keys[2], keys[1], state.reflected, ops); // Main processing loop - 16 bytes at a time while remaining_len >= CRC_CHUNK_SIZE { // Load next 16 bytes of data let next_data = reflect_bytes( reflector, ops.load_bytes(data.as_ptr().add(current_pos)), ops, ); // Fold and XOR xmm7 = fold_and_xor::(xmm7, rk01rk02, next_data, state.reflected, ops); // Update position tracking current_pos += CRC_CHUNK_SIZE; remaining_len -= CRC_CHUNK_SIZE; } // Handle remaining bytes (if any) if remaining_len > 0 { // Use the shared get_last_two_xmms function to handle the remaining bytes xmm7 = get_last_two_xmms::( DataRegion { full_data: data, offset: current_pos, remaining: remaining_len, }, xmm7, keys, reflector, state.reflected, ops, ); } // Perform final reduction W::perform_final_reduction(xmm7, state.reflected, keys, ops) } /// Data region descriptor for overlapping SIMD reads in CRC processing /// /// # Safety Invariants /// /// When this struct is used with overlapping SIMD reads: /// - `offset` must be >= `CRC_CHUNK_SIZE` (16 bytes) /// - `remaining` must be in range 1..=15 /// - `full_data` must contain at least `offset + remaining` bytes struct DataRegion<'a> { full_data: &'a [u8], offset: usize, remaining: usize, } /// Handle the last two chunks of data using an overlapping SIMD read /// /// # Safety /// /// - `region.full_data` must contain at least `region.offset + region.remaining` bytes /// - `region.offset` must be >= `CRC_CHUNK_SIZE` (16 bytes) /// - `region.remaining` must be in range 1..=15 /// - Caller must ensure appropriate SIMD features are available #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] unsafe fn get_last_two_xmms( region: DataRegion, current_state: T::Vector, keys: &[u64; 23], reflector: &Reflector, reflected: bool, ops: &T, ) -> T::Vector where T::Vector: Copy, { debug_assert!(region.offset >= CRC_CHUNK_SIZE); debug_assert!(region.remaining > 0 && region.remaining < CRC_CHUNK_SIZE); debug_assert!(region.offset + region.remaining <= region.full_data.len()); let coefficient = W::create_coefficient(keys[2], keys[1], reflected, ops); let const_mask = ops.set_all_bytes(0x80); let (table_ptr, offset) = W::get_last_bytes_table_ptr(reflected, region.remaining); if reflected { // Overlapping read: loads tail of previous chunk + remaining data let read_offset = region.offset - CRC_CHUNK_SIZE + region.remaining; let xmm1 = ops.load_bytes(region.full_data.as_ptr().add(read_offset)); let mut xmm0 = ops.load_bytes(table_ptr.add(offset)); let shuffled = ops.shuffle_bytes(current_state, xmm0); xmm0 = ops.xor_vectors(xmm0, const_mask); let shuffled_masked = ops.shuffle_bytes(current_state, xmm0); // CRC-16 and CRC-32 use the same logic (both operate in 32-bit space) let (xmm2_blended, mut temp_state) = if W::WIDTH <= 32 { let compare_mask = ops.create_compare_mask(xmm0); let xmm2_blended = ops.blend_vectors(xmm1, shuffled, compare_mask); let temp_state = CrcState { value: shuffled_masked, reflected, }; (xmm2_blended, temp_state) } else { let xmm2_blended = ops.blend_vectors(shuffled_masked, xmm1, xmm0); let temp_state = CrcState { value: shuffled, reflected, }; (xmm2_blended, temp_state) }; W::fold_16(&mut temp_state, coefficient, xmm2_blended, ops); temp_state.value } else { let read_offset = region.offset - CRC_CHUNK_SIZE + region.remaining; let mut xmm1 = ops.load_bytes(region.full_data.as_ptr().add(read_offset)); if let Reflector::ForwardReflector { smask } = reflector { xmm1 = ops.shuffle_bytes(xmm1, *smask); } let xmm0 = ops.load_bytes(table_ptr.add(offset)); let shuffled = ops.shuffle_bytes(current_state, xmm0); let xmm0_masked = ops.xor_vectors(xmm0, const_mask); let shuffled_masked = ops.shuffle_bytes(current_state, xmm0_masked); let xmm2_blended = ops.blend_vectors(xmm1, shuffled, xmm0_masked); // Create a temporary state for folding let mut temp_state = CrcState { value: shuffled_masked, reflected, }; W::fold_16(&mut temp_state, coefficient, xmm2_blended, ops); temp_state.value } } crc-fast-1.10.0/src/arch/aarch64/aes.rs000064400000000000000000000176561046102023000154760ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides AArch64-specific implementations of the ArchOps trait for architectures //! with AES support. #![cfg(target_arch = "aarch64")] use crate::traits::ArchOps; use core::arch::aarch64::*; // Tier-specific ArchOps implementations for AArch64 /// Base AArch64 implementation with AES+NEON optimizations /// NEON is implicit with AES support on AArch64 #[derive(Debug, Copy, Clone)] pub struct Aarch64AesOps; // Base implementation for AArch64 AES tier impl ArchOps for Aarch64AesOps { type Vector = uint8x16_t; #[inline] #[target_feature(enable = "neon")] unsafe fn create_vector_from_u64_pair( &self, high: u64, low: u64, reflected: bool, ) -> Self::Vector { // Note: AArch64 switches the order for reflected mode if reflected { self.load_key_pair(high, low) } else { self.load_key_pair(low, high) } } #[inline] #[target_feature(enable = "neon")] unsafe fn create_vector_from_u64_pair_non_reflected( &self, high: u64, low: u64, ) -> Self::Vector { self.load_key_pair(low, high) } #[inline] #[target_feature(enable = "neon")] unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector { let mut result = vdupq_n_u64(0); if high { result = vsetq_lane_u64(value, result, 1); // Set high 64 bits } else { result = vsetq_lane_u64(value, result, 0); // Set low 64 bits } vreinterpretq_u8_u64(result) } #[inline] #[target_feature(enable = "neon")] unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2] { let x = vreinterpretq_u64_u8(vector); [vgetq_lane_u64(x, 0), vgetq_lane_u64(x, 1)] } #[inline] #[target_feature(enable = "neon")] unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2] { let x = vreinterpretq_p64_u8(vector); [vgetq_lane_p64(x, 0), vgetq_lane_p64(x, 1)] } #[inline] #[target_feature(enable = "neon")] unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { veorq_u8(a, b) } #[inline] #[target_feature(enable = "neon")] unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector { vld1q_u8(ptr) } #[inline] #[target_feature(enable = "neon")] unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector { vreinterpretq_u8_u64(vld1q_u64(ptr as *const u64)) } #[inline] #[target_feature(enable = "neon")] unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector { vqtbl1q_u8(data, mask) } #[inline] #[target_feature(enable = "neon")] unsafe fn blend_vectors( &self, a: Self::Vector, b: Self::Vector, mask: Self::Vector, ) -> Self::Vector { let msb_mask = vcltq_s8(vreinterpretq_s8_u8(mask), vdupq_n_s8(0)); vbslq_u8(msb_mask, b, a) } #[inline] #[target_feature(enable = "neon")] unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector { vextq_u8(vdupq_n_u8(0), vector, 8) } #[inline] #[target_feature(enable = "neon")] unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector { vdupq_n_u8(value) } #[inline] #[target_feature(enable = "neon")] unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector { vcltq_s8(vreinterpretq_s8_u8(vector), vdupq_n_s8(0)) } #[inline] #[target_feature(enable = "neon")] unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { vandq_u8(a, b) } #[inline] #[target_feature(enable = "neon")] unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector { vextq_u8(vector, vdupq_n_u8(0), 4) } #[inline] #[target_feature(enable = "neon")] unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector { vextq_u8(vdupq_n_u8(0), vector, 12) // 16-4=12 } #[inline] #[target_feature(enable = "neon")] unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector { let mut result = vdupq_n_u64(0); if high { // For high=true, place in the high 32 bits of the high 64 bits result = vreinterpretq_u64_u32(vsetq_lane_u32(value, vreinterpretq_u32_u64(result), 3)); } else { // For high=false, place in the low 32 bits of the low 64 bits result = vreinterpretq_u64_u32(vsetq_lane_u32(value, vreinterpretq_u32_u64(result), 0)); } vreinterpretq_u8_u64(result) } #[inline] #[target_feature(enable = "neon")] unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector { vextq_u8(vdupq_n_u8(0), vector, 12) // 16-4=12 } #[inline] #[target_feature(enable = "neon")] unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector { vextq_u8(vector, vdupq_n_u8(0), 4) } #[inline] #[target_feature(enable = "neon")] unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector { vextq_u8(vector, vdupq_n_u8(0), 8) } #[inline] #[target_feature(enable = "neon")] unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector { vextq_u8(vector, vdupq_n_u8(0), 5) } #[inline] #[target_feature(enable = "neon")] unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector { vextq_u8(vector, vdupq_n_u8(0), 6) } #[inline] #[target_feature(enable = "neon")] unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector { vextq_u8(vector, vdupq_n_u8(0), 7) } #[inline] #[target_feature(enable = "neon")] unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector { vextq_u8(vector, vdupq_n_u8(0), 12) } #[inline] #[target_feature(enable = "neon")] unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector { let low_32 = vgetq_lane_u32(vreinterpretq_u32_u8(vector), 0); let result = vsetq_lane_u32(low_32, vdupq_n_u32(0), 3); vreinterpretq_u8_u32(result) } #[inline] #[target_feature(enable = "aes")] unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { vreinterpretq_u8_p128(vmull_p64( vgetq_lane_p64(vreinterpretq_p64_u8(a), 0), vgetq_lane_p64(vreinterpretq_p64_u8(b), 0), )) } #[inline] #[target_feature(enable = "aes")] unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { let a_low = vgetq_lane_p64(vreinterpretq_p64_u8(a), 1); let b_high = vgetq_lane_p64(vreinterpretq_p64_u8(b), 0); vreinterpretq_u8_p128(vmull_p64(a_low, b_high)) } #[inline] #[target_feature(enable = "aes")] unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { vreinterpretq_u8_p128(vmull_p64( vgetq_lane_p64(vreinterpretq_p64_u8(a), 0), vgetq_lane_p64(vreinterpretq_p64_u8(b), 1), )) } #[inline] #[target_feature(enable = "aes")] unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { vreinterpretq_u8_p128(vmull_p64( vgetq_lane_p64(vreinterpretq_p64_u8(a), 1), vgetq_lane_p64(vreinterpretq_p64_u8(b), 1), )) } #[inline] #[target_feature(enable = "neon")] unsafe fn xor3_vectors( &self, a: Self::Vector, b: Self::Vector, c: Self::Vector, ) -> Self::Vector { veorq_u8(veorq_u8(a, b), c) } } impl Aarch64AesOps { #[inline] #[target_feature(enable = "neon")] unsafe fn load_key_pair(&self, idx1: u64, idx2: u64) -> uint8x16_t { vreinterpretq_u8_u64(vld1q_u64([idx1, idx2].as_ptr())) } } crc-fast-1.10.0/src/arch/aarch64/aes_sha3.rs000064400000000000000000000132761046102023000164060ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides AArch64-specific implementations of the ArchOps trait for architectures //! with AES+SHA3 support. #![cfg(target_arch = "aarch64")] use crate::arch::aarch64::aes::Aarch64AesOps; use crate::traits::ArchOps; use core::arch::aarch64::*; /// AArch64 AES+SHA3 tier - delegates to AES tier and overrides XOR3 operations /// Provides EOR3 instruction for optimal XOR3 performance #[derive(Debug, Copy, Clone)] pub struct Aarch64AesSha3Ops(Aarch64AesOps); impl Default for Aarch64AesSha3Ops { fn default() -> Self { Self::new() } } impl Aarch64AesSha3Ops { #[inline(always)] pub fn new() -> Self { Self(Aarch64AesOps) } } // SHA3 tier implementation - delegates to AES tier and overrides XOR3 impl ArchOps for Aarch64AesSha3Ops { type Vector = uint8x16_t; // Delegate methods to the base AES implementation #[inline(always)] unsafe fn create_vector_from_u64_pair( &self, high: u64, low: u64, reflected: bool, ) -> Self::Vector { self.0.create_vector_from_u64_pair(high, low, reflected) } #[inline(always)] unsafe fn create_vector_from_u64_pair_non_reflected( &self, high: u64, low: u64, ) -> Self::Vector { self.0.create_vector_from_u64_pair_non_reflected(high, low) } #[inline(always)] unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector { self.0.create_vector_from_u64(value, high) } #[inline(always)] unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2] { self.0.extract_u64s(vector) } #[inline(always)] unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2] { self.0.extract_poly64s(vector) } #[inline(always)] unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.xor_vectors(a, b) } #[inline(always)] unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector { self.0.load_bytes(ptr) } #[inline(always)] unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector { self.0.load_aligned(ptr) } #[inline(always)] unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector { self.0.shuffle_bytes(data, mask) } #[inline(always)] unsafe fn blend_vectors( &self, a: Self::Vector, b: Self::Vector, mask: Self::Vector, ) -> Self::Vector { self.0.blend_vectors(a, b, mask) } #[inline(always)] unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_8(vector) } #[inline(always)] unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector { self.0.set_all_bytes(value) } #[inline(always)] unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector { self.0.create_compare_mask(vector) } #[inline(always)] unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.and_vectors(a, b) } #[inline(always)] unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_32(vector) } #[inline(always)] unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_32(vector) } #[inline(always)] unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector { self.0.create_vector_from_u32(value, high) } #[inline(always)] unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_4(vector) } #[inline(always)] unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_4(vector) } #[inline(always)] unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_8(vector) } #[inline(always)] unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_5(vector) } #[inline(always)] unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_6(vector) } #[inline(always)] unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_7(vector) } #[inline(always)] unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_12(vector) } #[inline(always)] unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_12(vector) } #[inline(always)] unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_00(a, b) } #[inline(always)] unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_01(a, b) } #[inline(always)] unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_10(a, b) } #[inline(always)] unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_11(a, b) } // Override XOR3 to use SHA3 EOR3 instruction when available #[inline] #[target_feature(enable = "sha3")] unsafe fn xor3_vectors( &self, a: Self::Vector, b: Self::Vector, c: Self::Vector, ) -> Self::Vector { // SHA3 tier always uses EOR3 instruction // Feature detection is handled at the dispatch level veor3q_u8(a, b, c) } } crc-fast-1.10.0/src/arch/aarch64/mod.rs000064400000000000000000000003261046102023000154670ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides AArch64-specific implementations of the ArchOps trait. #![cfg(target_arch = "aarch64")] pub mod aes; pub mod aes_sha3; crc-fast-1.10.0/src/arch/mod.rs000064400000000000000000000411461046102023000142440ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides the main entry point for the SIMD CRC calculation. //! //! It dispatches to the appropriate architecture-specific implementation #[cfg(all(target_arch = "aarch64", feature = "std"))] use std::arch::is_aarch64_feature_detected; use crate::CrcParams; #[cfg(target_arch = "aarch64")] use crate::arch::aarch64::aes::Aarch64AesOps; #[cfg(target_arch = "aarch64")] use crate::arch::aarch64::aes_sha3::Aarch64AesSha3Ops; #[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] use crate::{ algorithm, structs::{Width16, Width32, Width64}, }; pub mod aarch64; pub mod software; pub mod x86; pub mod x86_64; /// Main entry point that dispatches to the appropriate architecture /// /// # Safety /// May use native CPU features #[inline(always)] #[cfg(target_arch = "aarch64")] pub(crate) unsafe fn update(state: u64, bytes: &[u8], params: &CrcParams) -> u64 { use crate::feature_detection::{get_arch_ops, ArchOpsInstance}; match get_arch_ops() { ArchOpsInstance::Aarch64AesSha3(ops) => update_aarch64_aes_sha3(state, bytes, params, *ops), ArchOpsInstance::Aarch64Aes(ops) => update_aarch64_aes(state, bytes, params, *ops), ArchOpsInstance::SoftwareFallback => { #[cfg(feature = "std")] let has_features = is_aarch64_feature_detected!("aes") && is_aarch64_feature_detected!("neon"); #[cfg(not(feature = "std"))] let has_features = cfg!(target_feature = "aes") && cfg!(target_feature = "neon"); if !has_features { #[cfg(any(not(target_feature = "aes"), not(target_feature = "neon")))] { // Use software implementation when no SIMD support is available return crate::arch::software::update(state, bytes, params); } } // This should likely never happen, but just in case panic!("aarch64 features missing (NEON and/or AES)"); } } } #[inline] #[cfg(target_arch = "aarch64")] #[target_feature(enable = "aes")] unsafe fn update_aarch64_aes( state: u64, bytes: &[u8], params: &CrcParams, ops: Aarch64AesOps, ) -> u64 { match params.width { 64 => algorithm::update::<_, Width64>(state, bytes, params, &ops), 32 => algorithm::update::<_, Width32>(state as u32, bytes, params, &ops) as u64, 16 => algorithm::update::<_, Width16>(state as u16, bytes, params, &ops) as u64, _ => panic!("Unsupported CRC width: {}", params.width), } } #[inline] #[cfg(target_arch = "aarch64")] #[target_feature(enable = "aes,sha3")] unsafe fn update_aarch64_aes_sha3( state: u64, bytes: &[u8], params: &CrcParams, ops: Aarch64AesSha3Ops, ) -> u64 { match params.width { 64 => algorithm::update::<_, Width64>(state, bytes, params, &ops), 32 => algorithm::update::<_, Width32>(state as u32, bytes, params, &ops) as u64, 16 => algorithm::update::<_, Width16>(state as u16, bytes, params, &ops) as u64, _ => panic!("Unsupported CRC width: {}", params.width), } } /// Main entry point for x86/x86_64 /// /// # Safety /// May use native CPU features #[inline(always)] #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] pub(crate) unsafe fn update(state: u64, bytes: &[u8], params: &CrcParams) -> u64 { use crate::feature_detection::{get_arch_ops, ArchOpsInstance}; match get_arch_ops() { #[cfg(target_arch = "x86_64")] ArchOpsInstance::X86_64Avx512Vpclmulqdq(ops) => { update_x86_64_avx512_vpclmulqdq(state, bytes, params, *ops) } #[cfg(target_arch = "x86_64")] ArchOpsInstance::X86_64Avx512Pclmulqdq(ops) => { update_x86_64_avx512_pclmulqdq(state, bytes, params, *ops) } ArchOpsInstance::X86SsePclmulqdq(ops) => { update_x86_sse_pclmulqdq(state, bytes, params, *ops) } ArchOpsInstance::SoftwareFallback => crate::arch::software::update(state, bytes, params), } } #[inline] #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] #[target_feature(enable = "sse4.1,pclmulqdq")] unsafe fn update_x86_sse_pclmulqdq( state: u64, bytes: &[u8], params: &CrcParams, ops: crate::arch::x86::sse::X86SsePclmulqdqOps, ) -> u64 { match params.width { 64 => algorithm::update::<_, Width64>(state, bytes, params, &ops), 32 => algorithm::update::<_, Width32>(state as u32, bytes, params, &ops) as u64, 16 => algorithm::update::<_, Width16>(state as u16, bytes, params, &ops) as u64, _ => panic!("Unsupported CRC width: {}", params.width), } } #[inline] #[cfg(target_arch = "x86_64")] #[target_feature(enable = "avx512vl,pclmulqdq")] unsafe fn update_x86_64_avx512_pclmulqdq( state: u64, bytes: &[u8], params: &CrcParams, ops: crate::arch::x86_64::avx512::X86_64Avx512PclmulqdqOps, ) -> u64 { match params.width { 64 => algorithm::update::<_, Width64>(state, bytes, params, &ops), 32 => algorithm::update::<_, Width32>(state as u32, bytes, params, &ops) as u64, 16 => algorithm::update::<_, Width16>(state as u16, bytes, params, &ops) as u64, _ => panic!("Unsupported CRC width: {}", params.width), } } #[inline] #[cfg(target_arch = "x86_64")] #[target_feature(enable = "avx512vl,vpclmulqdq")] unsafe fn update_x86_64_avx512_vpclmulqdq( state: u64, bytes: &[u8], params: &CrcParams, ops: crate::arch::x86_64::avx512_vpclmulqdq::X86_64Avx512VpclmulqdqOps, ) -> u64 { match params.width { 64 => algorithm::update::<_, Width64>(state, bytes, params, &ops), 32 => algorithm::update::<_, Width32>(state as u32, bytes, params, &ops) as u64, 16 => algorithm::update::<_, Width16>(state as u16, bytes, params, &ops) as u64, _ => panic!("Unsupported CRC width: {}", params.width), } } #[inline(always)] #[cfg(all( not(target_arch = "x86"), not(target_arch = "x86_64"), not(target_arch = "aarch64") ))] pub(crate) unsafe fn update(state: u64, bytes: &[u8], params: &CrcParams) -> u64 { crate::arch::software::update(state, bytes, params) } #[cfg(test)] mod tests { use super::*; use crate::crc32::consts::CRC32_BZIP2; use crate::crc64::consts::CRC64_NVME; use crate::test::consts::{TEST_256_BYTES_STRING, TEST_ALL_CONFIGS, TEST_CHECK_STRING}; use crate::test::create_aligned_data; use crate::test::enums::AnyCrcTestConfig; use rand::{rng, Rng}; #[test] fn test_check_value() { for config in TEST_ALL_CONFIGS { // direct update() call, which needs XOROUT applied let actual = unsafe { update( config.get_init_algorithm(), TEST_CHECK_STRING, config.get_params(), ) ^ config.get_xorout() }; assert_eq!( actual, config.get_check(), "Mismatch CRC, {}, expected {:#x}, got {:#x}", config.get_name(), config.get_check(), actual ); } } #[test] fn test_256_string() { for config in TEST_ALL_CONFIGS { let actual = unsafe { update( config.get_init_algorithm(), &create_aligned_data(TEST_256_BYTES_STRING), config.get_params(), ) ^ config.get_xorout() }; assert_eq!( actual, config.checksum_with_reference(TEST_256_BYTES_STRING), "Mismatch CRC, {}, expected {:#x}, got {:#x}", config.get_name(), config.get_check(), actual ); } } #[test] fn test_512_string() { let test_string = b"12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234561234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"; for config in TEST_ALL_CONFIGS { let actual = unsafe { update( config.get_init_algorithm(), &create_aligned_data(test_string), config.get_params(), ) ^ config.get_xorout() }; assert_eq!( actual, config.checksum_with_reference(test_string), "Mismatch CRC, {}, expected {:#x}, got {:#x}", config.get_name(), config.get_check(), actual ); } } #[test] fn test_1024_string() { let test_string = b"1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345612345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234561234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"; for config in TEST_ALL_CONFIGS { let actual = unsafe { update( config.get_init_algorithm(), &create_aligned_data(test_string), config.get_params(), ) ^ config.get_xorout() }; assert_eq!( actual, config.checksum_with_reference(test_string), "Mismatch CRC, {}, expected {:#x}, got {:#x}", config.get_name(), config.get_check(), actual ); } } // CRC-64/NVME is a special flower in that Rust's crc library doesn't support it yet, so we have // tested values to check against. #[test] fn test_crc64_nvme_standard_vectors() { static CASES: &[(&[u8], u64)] = &[ // from our own internal tests, since the Check value in the NVM Express® NVM Command // Set Specification (Revision 1.0d, December 2023) is incorrect // (Section 5.2.1.3.4, Figure 120, page 83). (b"123456789", 0xae8b14860a799888), // from the NVM Express® NVM Command Set Specification (Revision 1.0d, December 2023), // Section 5.2.1.3.5, Figure 122, page 84. // https://nvmexpress.org/wp-content/uploads/NVM-Express-NVM-Command-Set-Specification-1.0d-2023.12.28-Ratified.pdf // and the Linux kernel // https://github.com/torvalds/linux/blob/f3813f4b287e480b1fcd62ca798d8556644b8278/crypto/testmgr.h#L3685-L3695 (&[0; 4096], 0x6482d367eb22b64e), (&[255; 4096], 0xc0ddba7302eca3ac), // custom values (TEST_256_BYTES_STRING, 0xabdb9e6c30937916), (b"", 0), (b"@", 0x2808afa9582aa47), (b"1\x97", 0xb4af0ae0feb08e0f), (b"M\"\xdf", 0x85d7cd041a2a8a5d), (b"l\xcd\x13\xd7", 0x1860820ea79b0fa3), (&[0; 32], 0xcf3473434d4ecf3b), (&[255; 32], 0xa0a06974c34d63c4), (b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F", 0xb9d9d4a8492cbd7f), (&[0; 1024], 0x691bb2b09be5498a), (b"hello, world!", 0xf8046e40c403f1d0), ]; for (input, expected) in CASES { unsafe { let actual = update(CRC64_NVME.init, input, &CRC64_NVME) ^ CRC64_NVME.xorout; assert_eq!( actual, *expected, "Mismatch CRC, expected {:#x}, got {:#x}, input: {:?}", expected, actual, input ); } } } /// Test the "crc32" variant used in PHP's hash() function, which is different from the /// crc32() function. It's really just CRC-32/BZIP2 with the output byte-reversed to little /// endian. /// /// https://www.php.net/manual/en/function.hash-file.php#104836 #[test] fn test_crc32_php_standard_vectors() { static CASES: &[(&[u8], u64)] = &[ (b"123456789", 0x181989fc), (&[0; 4096], 0xe3380088), (&[255; 4096], 0x8f2ae650), (b"hello, world!", 0x5eacce7), ]; for (input, expected) in CASES { let bzip2_crc = unsafe { (update(CRC32_BZIP2.init, input, &CRC32_BZIP2) ^ CRC32_BZIP2.xorout) as u32 }; // PHP reverses the byte order of the CRC for some reason let actual = bzip2_crc.swap_bytes(); assert_eq!( actual, *expected as u32, "Mismatch CRC, expected {:#x}, got {:#x}, input: {:?}", expected, actual, input ); } } /// Test CRC-16/IBM-SDLC check value (reflected variant) #[test] fn test_crc16_ibm_sdlc_check_value() { use crate::crc16::consts::CRC16_IBM_SDLC; let actual = unsafe { update(CRC16_IBM_SDLC.init, TEST_CHECK_STRING, &CRC16_IBM_SDLC) ^ CRC16_IBM_SDLC.xorout }; assert_eq!( actual, 0x906E, "CRC-16/IBM-SDLC check value mismatch: expected 0x906E, got {:#x}", actual ); } /// Test CRC-16/T10-DIF check value (forward/non-reflected variant) #[test] fn test_crc16_t10_dif_check_value() { use crate::crc16::consts::CRC16_T10_DIF; let actual = unsafe { update(CRC16_T10_DIF.init, TEST_CHECK_STRING, &CRC16_T10_DIF) ^ CRC16_T10_DIF.xorout }; assert_eq!( actual, 0xD0DB, "CRC-16/T10-DIF check value mismatch: expected 0xD0DB, got {:#x}", actual ); } /// Skipping for Miri runs due to time constraints, underlying code already covered by other /// tests. #[test] #[cfg_attr(miri, ignore)] fn test_small_lengths_all() { // Test each CRC variant for config in TEST_ALL_CONFIGS { // Test each length from 0 to 255 for len in 0..=255 { test_length(len, config); } } } /// Skipping for Miri runs due to time constraints, underlying code already covered by other /// tests. #[test] #[cfg_attr(miri, ignore)] fn test_medium_lengths() { // Test each CRC variant for config in TEST_ALL_CONFIGS { // Test each length from 256 to 1024, which should fold and include handling remainders for len in 256..=1024 { test_length(len, config); } } } /// Skipping for Miri runs due to time constraints, underlying code already covered by other /// tests. #[test] #[cfg_attr(miri, ignore)] fn test_large_lengths() { // Test each CRC variant for config in TEST_ALL_CONFIGS { // Test ~1 MiB just before, at, and just after the folding boundaries for len in 1048575..=1048577 { test_length(len, config); } } } fn test_length(length: usize, config: &AnyCrcTestConfig) { let mut data = vec![0u8; length]; rng().fill(&mut data[..]); // Calculate expected CRC using the reference implementation let expected = config.checksum_with_reference(&data); // direct update() call, which needs XOROUT applied let actual = unsafe { update(config.get_init_algorithm(), &data, config.get_params()) ^ config.get_xorout() }; assert_eq!( actual, expected, "\nFailed for {} with length {}\nGot: {:016x}\nExpected: {:016x}", config.get_name(), length, actual, expected ); } } crc-fast-1.10.0/src/arch/software.rs000064400000000000000000001343331046102023000153200ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module contains a software fallback for unsupported architectures. use crate::tables; use crate::CrcAlgorithm; use crate::CrcParams; // ============================================================================ // Native Table Generation Functions // ============================================================================ /// Computes a single CRC-16 value for table generation. const fn crc16_single(poly: u16, reflect: bool, mut value: u16) -> u16 { if reflect { let mut i = 0; while i < 8 { value = (value >> 1) ^ ((value & 1) * poly); i += 1; } } else { value <<= 8; let mut i = 0; while i < 8 { value = (value << 1) ^ (((value >> 15) & 1) * poly); i += 1; } } value } /// Computes a single CRC-32 value for table generation. const fn crc32_single(poly: u32, reflect: bool, mut value: u32) -> u32 { if reflect { let mut i = 0; while i < 8 { value = (value >> 1) ^ ((value & 1) * poly); i += 1; } } else { value <<= 24; let mut i = 0; while i < 8 { value = (value << 1) ^ (((value >> 31) & 1) * poly); i += 1; } } value } /// Computes a single CRC-64 value for table generation. const fn crc64_single(poly: u64, reflect: bool, mut value: u64) -> u64 { if reflect { let mut i = 0; while i < 8 { value = (value >> 1) ^ ((value & 1) * poly); i += 1; } } else { value <<= 56; let mut i = 0; while i < 8 { value = (value << 1) ^ (((value >> 63) & 1) * poly); i += 1; } } value } /// Generates a 16-lane lookup table for CRC-16 calculations. /// /// This function creates a table compatible with the `crc` crate's `Table<16>` format, /// enabling processing of 16 bytes at a time for improved performance. pub const fn generate_table_u16(width: u8, poly: u16, reflect: bool) -> [[u16; 256]; 16] { let poly = if reflect { let poly = poly.reverse_bits(); poly >> (16u8 - width) } else { poly << (16u8 - width) }; let mut table = [[0u16; 256]; 16]; // Generate first table (lane 0) directly let mut i = 0; while i < 256 { table[0][i] = crc16_single(poly, reflect, i as u16); i += 1; } // Generate subsequent lanes based on lane 0 let mut i = 0; while i < 256 { let mut e = 1; while e < 16 { let one_lower = table[e - 1][i]; if reflect { table[e][i] = (one_lower >> 8) ^ table[0][(one_lower & 0xFF) as usize]; } else { table[e][i] = (one_lower << 8) ^ table[0][((one_lower >> 8) & 0xFF) as usize]; } e += 1; } i += 1; } table } /// Generates a 16-lane lookup table for CRC-32 calculations. /// /// This function creates a table compatible with the `crc` crate's `Table<16>` format, /// enabling processing of 16 bytes at a time for improved performance. pub const fn generate_table_u32(width: u8, poly: u32, reflect: bool) -> [[u32; 256]; 16] { let poly = if reflect { let poly = poly.reverse_bits(); poly >> (32u8 - width) } else { poly << (32u8 - width) }; let mut table = [[0u32; 256]; 16]; // Generate first table (lane 0) directly let mut i = 0; while i < 256 { table[0][i] = crc32_single(poly, reflect, i as u32); i += 1; } // Generate subsequent lanes based on lane 0 let mut i = 0; while i < 256 { let mut e = 1; while e < 16 { let one_lower = table[e - 1][i]; if reflect { table[e][i] = (one_lower >> 8) ^ table[0][(one_lower & 0xFF) as usize]; } else { table[e][i] = (one_lower << 8) ^ table[0][((one_lower >> 24) & 0xFF) as usize]; } e += 1; } i += 1; } table } /// Generates a 16-lane lookup table for CRC-64 calculations. /// /// This function creates a table compatible with the `crc` crate's `Table<16>` format, /// enabling processing of 16 bytes at a time for improved performance. pub const fn generate_table_u64(width: u8, poly: u64, reflect: bool) -> [[u64; 256]; 16] { let poly = if reflect { let poly = poly.reverse_bits(); poly >> (64u8 - width) } else { poly << (64u8 - width) }; let mut table = [[0u64; 256]; 16]; // Generate first table (lane 0) directly let mut i = 0; while i < 256 { table[0][i] = crc64_single(poly, reflect, i as u64); i += 1; } // Generate subsequent lanes based on lane 0 let mut i = 0; while i < 256 { let mut e = 1; while e < 16 { let one_lower = table[e - 1][i]; if reflect { table[e][i] = (one_lower >> 8) ^ table[0][(one_lower & 0xFF) as usize]; } else { table[e][i] = (one_lower << 8) ^ table[0][((one_lower >> 56) & 0xFF) as usize]; } e += 1; } i += 1; } table } // ============================================================================ // Caching for custom CRC algorithms // ============================================================================ #[cfg(feature = "alloc")] #[cfg(feature = "std")] use std::collections::HashMap; #[cfg(feature = "alloc")] #[cfg(feature = "std")] use std::sync::{Mutex, OnceLock}; #[cfg(feature = "alloc")] #[cfg(all(not(feature = "std"), feature = "cache"))] use hashbrown::HashMap; #[cfg(feature = "alloc")] #[cfg(all(not(feature = "std"), feature = "cache"))] use spin::{Mutex, Once}; // Cache key types for custom algorithms #[cfg(feature = "alloc")] #[cfg(any(feature = "std", feature = "cache"))] type Crc16Key = (u16, u16, bool, bool, u16, u16); #[cfg(feature = "alloc")] #[cfg(any(feature = "std", feature = "cache"))] type Crc32Key = (u32, u32, bool, bool, u32, u32); #[cfg(feature = "alloc")] #[cfg(any(feature = "std", feature = "cache"))] type Crc64Key = (u64, u64, bool, bool, u64, u64); // Cache value types for custom algorithms - stores the generated table #[cfg(feature = "alloc")] #[cfg(any(feature = "std", feature = "cache"))] type Crc16CacheValue = &'static [[u16; 256]; 16]; #[cfg(feature = "alloc")] #[cfg(any(feature = "std", feature = "cache"))] type Crc32CacheValue = &'static [[u32; 256]; 16]; #[cfg(feature = "alloc")] #[cfg(any(feature = "std", feature = "cache"))] type Crc64CacheValue = &'static [[u64; 256]; 16]; // Global caches for custom algorithms (std version) #[cfg(feature = "alloc")] #[cfg(feature = "std")] static CUSTOM_CRC16_CACHE: OnceLock>> = OnceLock::new(); #[cfg(feature = "alloc")] #[cfg(feature = "std")] static CUSTOM_CRC32_CACHE: OnceLock>> = OnceLock::new(); #[cfg(feature = "alloc")] #[cfg(feature = "std")] static CUSTOM_CRC64_CACHE: OnceLock>> = OnceLock::new(); // Global caches for custom algorithms (no_std + cache version) #[cfg(feature = "alloc")] #[cfg(all(not(feature = "std"), feature = "cache"))] static CUSTOM_CRC16_CACHE: Once>> = Once::new(); #[cfg(feature = "alloc")] #[cfg(all(not(feature = "std"), feature = "cache"))] static CUSTOM_CRC32_CACHE: Once>> = Once::new(); #[cfg(feature = "alloc")] #[cfg(all(not(feature = "std"), feature = "cache"))] static CUSTOM_CRC64_CACHE: Once>> = Once::new(); // ============================================================================ // Main dispatch function // ============================================================================ #[allow(unused)] #[allow(deprecated)] pub(crate) fn update(state: u64, data: &[u8], params: &CrcParams) -> u64 { match params.width { 16 => update_crc16(state as u16, data, params) as u64, 32 => update_crc32(state as u32, data, params) as u64, 64 => update_crc64(state, data, params), _ => panic!("Unsupported CRC width: {}", params.width), } } // ============================================================================ // CRC-16 dispatch // ============================================================================ fn update_crc16(state: u16, data: &[u8], params: &CrcParams) -> u16 { let (table, refin) = match params.algorithm { CrcAlgorithm::Crc16Arc => (&tables::crc16::CRC16_ARC_TABLE, true), CrcAlgorithm::Crc16Cdma2000 => (&tables::crc16::CRC16_CDMA2000_TABLE, false), CrcAlgorithm::Crc16Cms => (&tables::crc16::CRC16_CMS_TABLE, false), CrcAlgorithm::Crc16Dds110 => (&tables::crc16::CRC16_DDS_110_TABLE, false), CrcAlgorithm::Crc16DectR => (&tables::crc16::CRC16_DECT_R_TABLE, false), CrcAlgorithm::Crc16DectX => (&tables::crc16::CRC16_DECT_X_TABLE, false), CrcAlgorithm::Crc16Dnp => (&tables::crc16::CRC16_DNP_TABLE, true), CrcAlgorithm::Crc16En13757 => (&tables::crc16::CRC16_EN_13757_TABLE, false), CrcAlgorithm::Crc16Genibus => (&tables::crc16::CRC16_GENIBUS_TABLE, false), CrcAlgorithm::Crc16Gsm => (&tables::crc16::CRC16_GSM_TABLE, false), CrcAlgorithm::Crc16Ibm3740 => (&tables::crc16::CRC16_IBM_3740_TABLE, false), CrcAlgorithm::Crc16IbmSdlc => (&tables::crc16::CRC16_IBM_SDLC_TABLE, true), CrcAlgorithm::Crc16IsoIec144433A => (&tables::crc16::CRC16_ISO_IEC_14443_3_A_TABLE, true), CrcAlgorithm::Crc16Kermit => (&tables::crc16::CRC16_KERMIT_TABLE, true), CrcAlgorithm::Crc16Lj1200 => (&tables::crc16::CRC16_LJ1200_TABLE, false), CrcAlgorithm::Crc16M17 => (&tables::crc16::CRC16_M17_TABLE, false), CrcAlgorithm::Crc16MaximDow => (&tables::crc16::CRC16_MAXIM_DOW_TABLE, true), CrcAlgorithm::Crc16Mcrf4xx => (&tables::crc16::CRC16_MCRF4XX_TABLE, true), CrcAlgorithm::Crc16Modbus => (&tables::crc16::CRC16_MODBUS_TABLE, true), CrcAlgorithm::Crc16Nrsc5 => (&tables::crc16::CRC16_NRSC_5_TABLE, true), CrcAlgorithm::Crc16OpensafetyA => (&tables::crc16::CRC16_OPENSAFETY_A_TABLE, false), CrcAlgorithm::Crc16OpensafetyB => (&tables::crc16::CRC16_OPENSAFETY_B_TABLE, false), CrcAlgorithm::Crc16Profibus => (&tables::crc16::CRC16_PROFIBUS_TABLE, false), CrcAlgorithm::Crc16Riello => (&tables::crc16::CRC16_RIELLO_TABLE, true), CrcAlgorithm::Crc16SpiFujitsu => (&tables::crc16::CRC16_SPI_FUJITSU_TABLE, false), CrcAlgorithm::Crc16T10Dif => (&tables::crc16::CRC16_T10_DIF_TABLE, false), CrcAlgorithm::Crc16Teledisk => (&tables::crc16::CRC16_TELEDISK_TABLE, false), CrcAlgorithm::Crc16Tms37157 => (&tables::crc16::CRC16_TMS37157_TABLE, true), CrcAlgorithm::Crc16Umts => (&tables::crc16::CRC16_UMTS_TABLE, false), CrcAlgorithm::Crc16Usb => (&tables::crc16::CRC16_USB_TABLE, true), CrcAlgorithm::Crc16Xmodem => (&tables::crc16::CRC16_XMODEM_TABLE, false), CrcAlgorithm::CrcCustom => { return update_crc16_custom(state, data, params); } _ => panic!("Invalid algorithm for u16 CRC"), }; native_update_u16(state, table, refin, data) } #[cfg(feature = "alloc")] fn update_crc16_custom(state: u16, data: &[u8], params: &CrcParams) -> u16 { extern crate alloc; use alloc::boxed::Box; let refin = params.refin; #[cfg(any(feature = "std", feature = "cache"))] let table: &'static [[u16; 256]; 16] = { let key: Crc16Key = ( params.poly as u16, params.init as u16, params.refin, params.refout, params.xorout as u16, params.check as u16, ); #[cfg(feature = "std")] { let cache = CUSTOM_CRC16_CACHE.get_or_init(|| Mutex::new(HashMap::new())); let mut cache_guard = cache.lock().unwrap(); cache_guard.entry(key).or_insert_with(|| { let table = generate_table_u16(params.width, params.poly as u16, refin); Box::leak(Box::new(table)) }) } #[cfg(all(not(feature = "std"), feature = "cache"))] { let cache = CUSTOM_CRC16_CACHE.call_once(|| Mutex::new(HashMap::new())); let mut cache_guard = cache.lock(); cache_guard.entry(key).or_insert_with(|| { let table = generate_table_u16(params.width, params.poly as u16, refin); Box::leak(Box::new(table)) }) } }; #[cfg(not(any(feature = "std", feature = "cache")))] let table: &'static [[u16; 256]; 16] = { let table = generate_table_u16(params.width, params.poly as u16, refin); Box::leak(Box::new(table)) }; native_update_u16(state, table, refin, data) } #[cfg(not(feature = "alloc"))] fn update_crc16_custom(_state: u16, _data: &[u8], _params: &CrcParams) -> u16 { panic!("Custom CRC parameters require the 'alloc' feature") } // ============================================================================ // CRC-32 dispatch // ============================================================================ fn update_crc32(state: u32, data: &[u8], params: &CrcParams) -> u32 { let (table, refin) = match params.algorithm { CrcAlgorithm::Crc32Aixm => (&tables::crc32::CRC32_AIXM_TABLE, false), CrcAlgorithm::Crc32Autosar => (&tables::crc32::CRC32_AUTOSAR_TABLE, true), CrcAlgorithm::Crc32Base91D => (&tables::crc32::CRC32_BASE91_D_TABLE, true), CrcAlgorithm::Crc32Bzip2 => (&tables::crc32::CRC32_BZIP2_TABLE, false), CrcAlgorithm::Crc32CdRomEdc => (&tables::crc32::CRC32_CD_ROM_EDC_TABLE, true), CrcAlgorithm::Crc32Cksum => (&tables::crc32::CRC32_CKSUM_TABLE, false), CrcAlgorithm::Crc32Iscsi => (&tables::crc32::CRC32_ISCSI_TABLE, true), CrcAlgorithm::Crc32IsoHdlc => (&tables::crc32::CRC32_ISO_HDLC_TABLE, true), CrcAlgorithm::Crc32Jamcrc => (&tables::crc32::CRC32_JAMCRC_TABLE, true), CrcAlgorithm::Crc32Mef => (&tables::crc32::CRC32_MEF_TABLE, true), CrcAlgorithm::Crc32Mpeg2 => (&tables::crc32::CRC32_MPEG_2_TABLE, false), CrcAlgorithm::Crc32Xfer => (&tables::crc32::CRC32_XFER_TABLE, false), #[allow(deprecated)] CrcAlgorithm::Crc32Custom | CrcAlgorithm::CrcCustom => { return update_crc32_custom(state, data, params); } _ => panic!("Invalid algorithm for u32 CRC"), }; native_update_u32(state, table, refin, data) } #[cfg(feature = "alloc")] fn update_crc32_custom(state: u32, data: &[u8], params: &CrcParams) -> u32 { extern crate alloc; use alloc::boxed::Box; let refin = params.refin; #[cfg(any(feature = "std", feature = "cache"))] let table: &'static [[u32; 256]; 16] = { let key: Crc32Key = ( params.poly as u32, params.init as u32, params.refin, params.refout, params.xorout as u32, params.check as u32, ); #[cfg(feature = "std")] { let cache = CUSTOM_CRC32_CACHE.get_or_init(|| Mutex::new(HashMap::new())); let mut cache_guard = cache.lock().unwrap(); cache_guard.entry(key).or_insert_with(|| { let table = generate_table_u32(params.width, params.poly as u32, refin); Box::leak(Box::new(table)) }) } #[cfg(all(not(feature = "std"), feature = "cache"))] { let cache = CUSTOM_CRC32_CACHE.call_once(|| Mutex::new(HashMap::new())); let mut cache_guard = cache.lock(); cache_guard.entry(key).or_insert_with(|| { let table = generate_table_u32(params.width, params.poly as u32, refin); Box::leak(Box::new(table)) }) } }; #[cfg(not(any(feature = "std", feature = "cache")))] let table: &'static [[u32; 256]; 16] = { let table = generate_table_u32(params.width, params.poly as u32, refin); Box::leak(Box::new(table)) }; native_update_u32(state, table, refin, data) } #[cfg(not(feature = "alloc"))] fn update_crc32_custom(_state: u32, _data: &[u8], _params: &CrcParams) -> u32 { panic!("Custom CRC parameters require the 'alloc' feature") } // ============================================================================ // CRC-64 dispatch // ============================================================================ fn update_crc64(state: u64, data: &[u8], params: &CrcParams) -> u64 { let (table, refin) = match params.algorithm { CrcAlgorithm::Crc64Ecma182 => (&tables::crc64::CRC64_ECMA_182_TABLE, false), CrcAlgorithm::Crc64GoIso => (&tables::crc64::CRC64_GO_ISO_TABLE, true), CrcAlgorithm::Crc64Ms => (&tables::crc64::CRC64_MS_TABLE, true), CrcAlgorithm::Crc64Nvme => (&tables::crc64::CRC64_NVME_TABLE, true), CrcAlgorithm::Crc64Redis => (&tables::crc64::CRC64_REDIS_TABLE, true), CrcAlgorithm::Crc64We => (&tables::crc64::CRC64_WE_TABLE, false), CrcAlgorithm::Crc64Xz => (&tables::crc64::CRC64_XZ_TABLE, true), #[allow(deprecated)] CrcAlgorithm::Crc64Custom | CrcAlgorithm::CrcCustom => { return update_crc64_custom(state, data, params); } _ => panic!("Invalid algorithm for u64 CRC"), }; native_update_u64(state, table, refin, data) } #[cfg(feature = "alloc")] fn update_crc64_custom(state: u64, data: &[u8], params: &CrcParams) -> u64 { extern crate alloc; use alloc::boxed::Box; let refin = params.refin; #[cfg(any(feature = "std", feature = "cache"))] let table: &'static [[u64; 256]; 16] = { let key: Crc64Key = ( params.poly, params.init, params.refin, params.refout, params.xorout, params.check, ); #[cfg(feature = "std")] { let cache = CUSTOM_CRC64_CACHE.get_or_init(|| Mutex::new(HashMap::new())); let mut cache_guard = cache.lock().unwrap(); cache_guard.entry(key).or_insert_with(|| { let table = generate_table_u64(params.width, params.poly, refin); Box::leak(Box::new(table)) }) } #[cfg(all(not(feature = "std"), feature = "cache"))] { let cache = CUSTOM_CRC64_CACHE.call_once(|| Mutex::new(HashMap::new())); let mut cache_guard = cache.lock(); cache_guard.entry(key).or_insert_with(|| { let table = generate_table_u64(params.width, params.poly, refin); Box::leak(Box::new(table)) }) } }; #[cfg(not(any(feature = "std", feature = "cache")))] let table: &'static [[u64; 256]; 16] = { let table = generate_table_u64(params.width, params.poly, refin); Box::leak(Box::new(table)) }; native_update_u64(state, table, refin, data) } #[cfg(not(feature = "alloc"))] fn update_crc64_custom(_state: u64, _data: &[u8], _params: &CrcParams) -> u64 { panic!("Custom CRC parameters require the 'alloc' feature") } // ============================================================================ // Native CRC Update Functions (Table<16> equivalent) // ============================================================================ /// Native CRC-16 update function using 16-lane lookup tables. /// /// Processes 16 bytes at a time for improved performance, then handles /// remaining bytes with single-byte lookups. #[allow(dead_code)] pub(crate) fn native_update_u16( mut crc: u16, table: &[[u16; 256]; 16], reflect: bool, bytes: &[u8], ) -> u16 { let len = bytes.len(); let mut i = 0; // Process 16 bytes at a time while i + 16 <= len { if reflect { let current0 = bytes[i] ^ (crc as u8); let current1 = bytes[i + 1] ^ ((crc >> 8) as u8); crc = table[0][bytes[i + 15] as usize] ^ table[1][bytes[i + 14] as usize] ^ table[2][bytes[i + 13] as usize] ^ table[3][bytes[i + 12] as usize] ^ table[4][bytes[i + 11] as usize] ^ table[5][bytes[i + 10] as usize] ^ table[6][bytes[i + 9] as usize] ^ table[7][bytes[i + 8] as usize] ^ table[8][bytes[i + 7] as usize] ^ table[9][bytes[i + 6] as usize] ^ table[10][bytes[i + 5] as usize] ^ table[11][bytes[i + 4] as usize] ^ table[12][bytes[i + 3] as usize] ^ table[13][bytes[i + 2] as usize] ^ table[14][current1 as usize] ^ table[15][current0 as usize]; } else { let current0 = bytes[i] ^ ((crc >> 8) as u8); let current1 = bytes[i + 1] ^ (crc as u8); crc = table[0][bytes[i + 15] as usize] ^ table[1][bytes[i + 14] as usize] ^ table[2][bytes[i + 13] as usize] ^ table[3][bytes[i + 12] as usize] ^ table[4][bytes[i + 11] as usize] ^ table[5][bytes[i + 10] as usize] ^ table[6][bytes[i + 9] as usize] ^ table[7][bytes[i + 8] as usize] ^ table[8][bytes[i + 7] as usize] ^ table[9][bytes[i + 6] as usize] ^ table[10][bytes[i + 5] as usize] ^ table[11][bytes[i + 4] as usize] ^ table[12][bytes[i + 3] as usize] ^ table[13][bytes[i + 2] as usize] ^ table[14][current1 as usize] ^ table[15][current0 as usize]; } i += 16; } // Process remaining bytes one at a time if reflect { while i < len { let table_index = ((crc ^ bytes[i] as u16) & 0xFF) as usize; crc = table[0][table_index] ^ (crc >> 8); i += 1; } } else { while i < len { let table_index = (((crc >> 8) ^ bytes[i] as u16) & 0xFF) as usize; crc = table[0][table_index] ^ (crc << 8); i += 1; } } crc } /// Native CRC-32 update function using 16-lane lookup tables. /// /// Processes 16 bytes at a time for improved performance, then handles /// remaining bytes with single-byte lookups. #[allow(dead_code)] pub(crate) fn native_update_u32( mut crc: u32, table: &[[u32; 256]; 16], reflect: bool, bytes: &[u8], ) -> u32 { let len = bytes.len(); let mut i = 0; // Process 16 bytes at a time while i + 16 <= len { if reflect { let current0 = bytes[i] ^ (crc as u8); let current1 = bytes[i + 1] ^ ((crc >> 8) as u8); let current2 = bytes[i + 2] ^ ((crc >> 16) as u8); let current3 = bytes[i + 3] ^ ((crc >> 24) as u8); crc = table[0][bytes[i + 15] as usize] ^ table[1][bytes[i + 14] as usize] ^ table[2][bytes[i + 13] as usize] ^ table[3][bytes[i + 12] as usize] ^ table[4][bytes[i + 11] as usize] ^ table[5][bytes[i + 10] as usize] ^ table[6][bytes[i + 9] as usize] ^ table[7][bytes[i + 8] as usize] ^ table[8][bytes[i + 7] as usize] ^ table[9][bytes[i + 6] as usize] ^ table[10][bytes[i + 5] as usize] ^ table[11][bytes[i + 4] as usize] ^ table[12][current3 as usize] ^ table[13][current2 as usize] ^ table[14][current1 as usize] ^ table[15][current0 as usize]; } else { let current0 = bytes[i] ^ ((crc >> 24) as u8); let current1 = bytes[i + 1] ^ ((crc >> 16) as u8); let current2 = bytes[i + 2] ^ ((crc >> 8) as u8); let current3 = bytes[i + 3] ^ (crc as u8); crc = table[0][bytes[i + 15] as usize] ^ table[1][bytes[i + 14] as usize] ^ table[2][bytes[i + 13] as usize] ^ table[3][bytes[i + 12] as usize] ^ table[4][bytes[i + 11] as usize] ^ table[5][bytes[i + 10] as usize] ^ table[6][bytes[i + 9] as usize] ^ table[7][bytes[i + 8] as usize] ^ table[8][bytes[i + 7] as usize] ^ table[9][bytes[i + 6] as usize] ^ table[10][bytes[i + 5] as usize] ^ table[11][bytes[i + 4] as usize] ^ table[12][current3 as usize] ^ table[13][current2 as usize] ^ table[14][current1 as usize] ^ table[15][current0 as usize]; } i += 16; } // Process remaining bytes one at a time if reflect { while i < len { let table_index = ((crc ^ bytes[i] as u32) & 0xFF) as usize; crc = table[0][table_index] ^ (crc >> 8); i += 1; } } else { while i < len { let table_index = (((crc >> 24) ^ bytes[i] as u32) & 0xFF) as usize; crc = table[0][table_index] ^ (crc << 8); i += 1; } } crc } /// Native CRC-64 update function using 16-lane lookup tables. /// /// Processes 16 bytes at a time for improved performance, then handles /// remaining bytes with single-byte lookups. #[allow(dead_code)] pub(crate) fn native_update_u64( mut crc: u64, table: &[[u64; 256]; 16], reflect: bool, bytes: &[u8], ) -> u64 { let len = bytes.len(); let mut i = 0; // Process 16 bytes at a time while i + 16 <= len { if reflect { let current0 = bytes[i] ^ (crc as u8); let current1 = bytes[i + 1] ^ ((crc >> 8) as u8); let current2 = bytes[i + 2] ^ ((crc >> 16) as u8); let current3 = bytes[i + 3] ^ ((crc >> 24) as u8); let current4 = bytes[i + 4] ^ ((crc >> 32) as u8); let current5 = bytes[i + 5] ^ ((crc >> 40) as u8); let current6 = bytes[i + 6] ^ ((crc >> 48) as u8); let current7 = bytes[i + 7] ^ ((crc >> 56) as u8); crc = table[0][bytes[i + 15] as usize] ^ table[1][bytes[i + 14] as usize] ^ table[2][bytes[i + 13] as usize] ^ table[3][bytes[i + 12] as usize] ^ table[4][bytes[i + 11] as usize] ^ table[5][bytes[i + 10] as usize] ^ table[6][bytes[i + 9] as usize] ^ table[7][bytes[i + 8] as usize] ^ table[8][current7 as usize] ^ table[9][current6 as usize] ^ table[10][current5 as usize] ^ table[11][current4 as usize] ^ table[12][current3 as usize] ^ table[13][current2 as usize] ^ table[14][current1 as usize] ^ table[15][current0 as usize]; } else { let current0 = bytes[i] ^ ((crc >> 56) as u8); let current1 = bytes[i + 1] ^ ((crc >> 48) as u8); let current2 = bytes[i + 2] ^ ((crc >> 40) as u8); let current3 = bytes[i + 3] ^ ((crc >> 32) as u8); let current4 = bytes[i + 4] ^ ((crc >> 24) as u8); let current5 = bytes[i + 5] ^ ((crc >> 16) as u8); let current6 = bytes[i + 6] ^ ((crc >> 8) as u8); let current7 = bytes[i + 7] ^ (crc as u8); crc = table[0][bytes[i + 15] as usize] ^ table[1][bytes[i + 14] as usize] ^ table[2][bytes[i + 13] as usize] ^ table[3][bytes[i + 12] as usize] ^ table[4][bytes[i + 11] as usize] ^ table[5][bytes[i + 10] as usize] ^ table[6][bytes[i + 9] as usize] ^ table[7][bytes[i + 8] as usize] ^ table[8][current7 as usize] ^ table[9][current6 as usize] ^ table[10][current5 as usize] ^ table[11][current4 as usize] ^ table[12][current3 as usize] ^ table[13][current2 as usize] ^ table[14][current1 as usize] ^ table[15][current0 as usize]; } i += 16; } // Process remaining bytes one at a time if reflect { while i < len { let table_index = ((crc ^ bytes[i] as u64) & 0xFF) as usize; crc = table[0][table_index] ^ (crc >> 8); i += 1; } } else { while i < len { let table_index = (((crc >> 56) ^ bytes[i] as u64) & 0xFF) as usize; crc = table[0][table_index] ^ (crc << 8); i += 1; } } crc } // ============================================================================ // Property Tests for Native Implementation // ============================================================================ #[cfg(test)] mod property_tests { use crate::test::consts::{ RUST_CRC16_ARC, RUST_CRC16_IBM_SDLC, RUST_CRC16_T10_DIF, RUST_CRC32_BZIP2, RUST_CRC32_ISCSI, RUST_CRC32_ISO_HDLC, RUST_CRC64_ECMA_182, RUST_CRC64_NVME, RUST_CRC64_XZ, TEST_CHECK_STRING, }; use crate::test::miri_compatible_proptest_config; use crate::{checksum, checksum_with_params, CrcAlgorithm, CrcParams, Digest}; use proptest::prelude::*; proptest! { #![proptest_config(miri_compatible_proptest_config())] /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation /// SHALL produce the same checksum as the `crc` crate reference implementation. /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5** #[test] fn prop_native_crc16_reflected_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { // Test CRC-16/IBM-SDLC (reflected) let our_result = checksum(CrcAlgorithm::Crc16IbmSdlc, &data); let reference_result = RUST_CRC16_IBM_SDLC.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-16/IBM-SDLC native mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}", data.len(), our_result, reference_result ); } /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation /// SHALL produce the same checksum as the `crc` crate reference implementation. /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5** #[test] fn prop_native_crc16_forward_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { // Test CRC-16/T10-DIF (forward/non-reflected) let our_result = checksum(CrcAlgorithm::Crc16T10Dif, &data); let reference_result = RUST_CRC16_T10_DIF.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-16/T10-DIF native mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}", data.len(), our_result, reference_result ); } /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation /// SHALL produce the same checksum as the `crc` crate reference implementation. /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5** #[test] fn prop_native_crc32_reflected_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { // Test CRC-32/ISO-HDLC (reflected) let our_result = checksum(CrcAlgorithm::Crc32IsoHdlc, &data); let reference_result = RUST_CRC32_ISO_HDLC.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-32/ISO-HDLC native mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}", data.len(), our_result, reference_result ); } /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation /// SHALL produce the same checksum as the `crc` crate reference implementation. /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5** #[test] fn prop_native_crc32_forward_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { // Test CRC-32/BZIP2 (forward/non-reflected) let our_result = checksum(CrcAlgorithm::Crc32Bzip2, &data); let reference_result = RUST_CRC32_BZIP2.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-32/BZIP2 native mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}", data.len(), our_result, reference_result ); } /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation /// SHALL produce the same checksum as the `crc` crate reference implementation. /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5** #[test] fn prop_native_crc64_reflected_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { // Test CRC-64/XZ (reflected) let our_result = checksum(CrcAlgorithm::Crc64Xz, &data); let reference_result = RUST_CRC64_XZ.checksum(&data); prop_assert_eq!( our_result, reference_result, "CRC-64/XZ native mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}", data.len(), our_result, reference_result ); } /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation /// SHALL produce the same checksum as the `crc` crate reference implementation. /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5** #[test] fn prop_native_crc64_forward_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { // Test CRC-64/ECMA-182 (forward/non-reflected) let our_result = checksum(CrcAlgorithm::Crc64Ecma182, &data); let reference_result = RUST_CRC64_ECMA_182.checksum(&data); prop_assert_eq!( our_result, reference_result, "CRC-64/ECMA-182 native mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}", data.len(), our_result, reference_result ); } /// Feature: remove-crc-runtime-dependency, Property 3: Incremental Update Equivalence /// *For any* CRC algorithm and *for any* way of partitioning input data into chunks, /// computing the CRC incrementally via `Digest::update()` calls SHALL produce the same /// result as computing it in a single `checksum()` call. /// **Validates: Requirements 6.3, 6.5** #[test] fn prop_incremental_update_crc32_equivalence( data in proptest::collection::vec(any::(), 0..1024), split_point in 0usize..=1024usize ) { let split_point = split_point.min(data.len()); let (part1, part2) = data.split_at(split_point); // Compute incrementally let mut digest = Digest::new(CrcAlgorithm::Crc32IsoHdlc); digest.update(part1); digest.update(part2); let incremental_result = digest.finalize(); // Compute in one shot let single_result = checksum(CrcAlgorithm::Crc32IsoHdlc, &data); prop_assert_eq!( incremental_result, single_result, "CRC-32/ISO-HDLC incremental mismatch: incremental=0x{:08X}, single=0x{:08X}, split_point={}", incremental_result, single_result, split_point ); } /// Feature: remove-crc-runtime-dependency, Property 3: Incremental Update Equivalence /// *For any* CRC algorithm and *for any* way of partitioning input data into chunks, /// computing the CRC incrementally via `Digest::update()` calls SHALL produce the same /// result as computing it in a single `checksum()` call. /// **Validates: Requirements 6.3, 6.5** #[test] fn prop_incremental_update_crc64_equivalence( data in proptest::collection::vec(any::(), 0..1024), split_point in 0usize..=1024usize ) { let split_point = split_point.min(data.len()); let (part1, part2) = data.split_at(split_point); // Compute incrementally let mut digest = Digest::new(CrcAlgorithm::Crc64Nvme); digest.update(part1); digest.update(part2); let incremental_result = digest.finalize(); // Compute in one shot let single_result = checksum(CrcAlgorithm::Crc64Nvme, &data); prop_assert_eq!( incremental_result, single_result, "CRC-64/NVME incremental mismatch: incremental=0x{:016X}, single=0x{:016X}, split_point={}", incremental_result, single_result, split_point ); } /// Feature: remove-crc-runtime-dependency, Property 4: Custom Parameters Correctness /// *For any* valid custom CRC parameters (width 16, 32, or 64) and *for any* byte sequence, /// the native implementation SHALL produce the same checksum as the `crc` crate when /// configured with equivalent parameters. /// **Validates: Requirements 5.1, 6.4** #[test] fn prop_custom_params_crc16_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { // Custom CRC-16 parameters equivalent to CRC-16/ARC let custom_params = CrcParams::new( "CRC-16/CUSTOM-ARC", 16, 0x8005, // poly 0x0000, // init true, // refin 0x0000, // xorout 0xBB3D, // check ); let our_result = checksum_with_params(custom_params, &data); let reference_result = RUST_CRC16_ARC.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-16 custom params mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}", data.len(), our_result, reference_result ); } /// Feature: remove-crc-runtime-dependency, Property 4: Custom Parameters Correctness /// *For any* valid custom CRC parameters (width 16, 32, or 64) and *for any* byte sequence, /// the native implementation SHALL produce the same checksum as the `crc` crate when /// configured with equivalent parameters. /// **Validates: Requirements 5.1, 6.4** #[test] fn prop_custom_params_crc32_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { // Custom CRC-32 parameters equivalent to CRC-32/ISCSI let custom_params = CrcParams::new( "CRC-32/CUSTOM-ISCSI", 32, 0x1EDC6F41, // poly 0xFFFFFFFF, // init true, // refin 0xFFFFFFFF, // xorout 0xE3069283, // check ); let our_result = checksum_with_params(custom_params, &data); let reference_result = RUST_CRC32_ISCSI.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-32 custom params mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}", data.len(), our_result, reference_result ); } /// Feature: remove-crc-runtime-dependency, Property 4: Custom Parameters Correctness /// *For any* valid custom CRC parameters (width 16, 32, or 64) and *for any* byte sequence, /// the native implementation SHALL produce the same checksum as the `crc` crate when /// configured with equivalent parameters. /// **Validates: Requirements 5.1, 6.4** #[test] fn prop_custom_params_crc64_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { // Custom CRC-64 parameters equivalent to CRC-64/NVME let custom_params = CrcParams::new( "CRC-64/CUSTOM-NVME", 64, 0xAD93D23594C93659, // poly 0xFFFFFFFFFFFFFFFF, // init true, // refin 0xFFFFFFFFFFFFFFFF, // xorout 0xAE8B14860A799888, // check ); let our_result = checksum_with_params(custom_params, &data); let reference_result = RUST_CRC64_NVME.checksum(&data); prop_assert_eq!( our_result, reference_result, "CRC-64 custom params mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}", data.len(), our_result, reference_result ); } } /// Feature: remove-crc-runtime-dependency, Property 2: Check Value Verification /// *For any* known CRC algorithm constant, computing the CRC of the byte sequence /// `b"123456789"` SHALL produce the documented check value from the CRC catalogue specification. /// **Validates: Requirements 3.2, 3.3, 3.4, 3.5** #[test] fn test_check_values_crc16() { use crate::crc16::consts::*; let test_cases: &[(&str, CrcParams, u64)] = &[ ("CRC-16/ARC", CRC16_ARC, 0xBB3D), ("CRC-16/CDMA2000", CRC16_CDMA2000, 0x4C06), ("CRC-16/CMS", CRC16_CMS, 0xAEE7), ("CRC-16/DDS-110", CRC16_DDS_110, 0x9ECF), ("CRC-16/DECT-R", CRC16_DECT_R, 0x007E), ("CRC-16/DECT-X", CRC16_DECT_X, 0x007F), ("CRC-16/DNP", CRC16_DNP, 0xEA82), ("CRC-16/EN-13757", CRC16_EN_13757, 0xC2B7), ("CRC-16/GENIBUS", CRC16_GENIBUS, 0xD64E), ("CRC-16/GSM", CRC16_GSM, 0xCE3C), ("CRC-16/IBM-3740", CRC16_IBM_3740, 0x29B1), ("CRC-16/IBM-SDLC", CRC16_IBM_SDLC, 0x906E), ("CRC-16/ISO-IEC-14443-3-A", CRC16_ISO_IEC_14443_3_A, 0xBF05), ("CRC-16/KERMIT", CRC16_KERMIT, 0x2189), ("CRC-16/LJ1200", CRC16_LJ1200, 0xBDF4), ("CRC-16/M17", CRC16_M17, 0x772B), ("CRC-16/MAXIM-DOW", CRC16_MAXIM_DOW, 0x44C2), ("CRC-16/MCRF4XX", CRC16_MCRF4XX, 0x6F91), ("CRC-16/MODBUS", CRC16_MODBUS, 0x4B37), ("CRC-16/NRSC-5", CRC16_NRSC_5, 0xA066), ("CRC-16/OPENSAFETY-A", CRC16_OPENSAFETY_A, 0x5D38), ("CRC-16/OPENSAFETY-B", CRC16_OPENSAFETY_B, 0x20FE), ("CRC-16/PROFIBUS", CRC16_PROFIBUS, 0xA819), ("CRC-16/RIELLO", CRC16_RIELLO, 0x63D0), ("CRC-16/SPI-FUJITSU", CRC16_SPI_FUJITSU, 0xE5CC), ("CRC-16/T10-DIF", CRC16_T10_DIF, 0xD0DB), ("CRC-16/TELEDISK", CRC16_TELEDISK, 0x0FB3), ("CRC-16/TMS37157", CRC16_TMS37157, 0x26B1), ("CRC-16/UMTS", CRC16_UMTS, 0xFEE8), ("CRC-16/USB", CRC16_USB, 0xB4C8), ("CRC-16/XMODEM", CRC16_XMODEM, 0x31C3), ]; for (name, params, expected_check) in test_cases { let result = checksum_with_params(*params, TEST_CHECK_STRING); assert_eq!( result, *expected_check, "{} check value mismatch: got 0x{:04X}, expected 0x{:04X}", name, result, expected_check ); } } /// Feature: remove-crc-runtime-dependency, Property 2: Check Value Verification /// *For any* known CRC algorithm constant, computing the CRC of the byte sequence /// `b"123456789"` SHALL produce the documented check value from the CRC catalogue specification. /// **Validates: Requirements 3.2, 3.3, 3.4, 3.5** #[test] fn test_check_values_crc32() { use crate::crc32::consts::*; let test_cases: &[(&str, CrcParams, u64)] = &[ ("CRC-32/AIXM", CRC32_AIXM, 0x3010BF7F), ("CRC-32/AUTOSAR", CRC32_AUTOSAR, 0x1697D06A), ("CRC-32/BASE91-D", CRC32_BASE91_D, 0x87315576), ("CRC-32/BZIP2", CRC32_BZIP2, 0xFC891918), ("CRC-32/CD-ROM-EDC", CRC32_CD_ROM_EDC, 0x6EC2EDC4), ("CRC-32/CKSUM", CRC32_CKSUM, 0x765E7680), ("CRC-32/ISCSI", CRC32_ISCSI, 0xE3069283), ("CRC-32/ISO-HDLC", CRC32_ISO_HDLC, 0xCBF43926), ("CRC-32/JAMCRC", CRC32_JAMCRC, 0x340BC6D9), ("CRC-32/MEF", CRC32_MEF, 0xD2C22F51), ("CRC-32/MPEG-2", CRC32_MPEG_2, 0x0376E6E7), ("CRC-32/XFER", CRC32_XFER, 0xBD0BE338), ]; for (name, params, expected_check) in test_cases { let result = checksum_with_params(*params, TEST_CHECK_STRING); assert_eq!( result, *expected_check, "{} check value mismatch: got 0x{:08X}, expected 0x{:08X}", name, result, expected_check ); } } /// Feature: remove-crc-runtime-dependency, Property 2: Check Value Verification /// *For any* known CRC algorithm constant, computing the CRC of the byte sequence /// `b"123456789"` SHALL produce the documented check value from the CRC catalogue specification. /// **Validates: Requirements 3.2, 3.3, 3.4, 3.5** #[test] fn test_check_values_crc64() { use crate::crc64::consts::*; let test_cases: &[(&str, CrcParams, u64)] = &[ ("CRC-64/ECMA-182", CRC64_ECMA_182, 0x6C40DF5F0B497347), ("CRC-64/GO-ISO", CRC64_GO_ISO, 0xB90956C775A41001), ("CRC-64/MS", CRC64_MS, 0x75D4B74F024ECEEA), ("CRC-64/NVME", CRC64_NVME, 0xAE8B14860A799888), ("CRC-64/REDIS", CRC64_REDIS, 0xE9C6D914C4B8D9CA), ("CRC-64/WE", CRC64_WE, 0x62EC59E3F1A4F00A), ("CRC-64/XZ", CRC64_XZ, 0x995DC9BBDF1939FA), ]; for (name, params, expected_check) in test_cases { let result = checksum_with_params(*params, TEST_CHECK_STRING); assert_eq!( result, *expected_check, "{} check value mismatch: got 0x{:016X}, expected 0x{:016X}", name, result, expected_check ); } } } crc-fast-1.10.0/src/arch/x86/mod.rs000064400000000000000000000003311046102023000146600ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides x86-specific implementations of the ArchOps trait. #![cfg(any(target_arch = "x86", target_arch = "x86_64"))] pub mod sse; crc-fast-1.10.0/src/arch/x86/sse.rs000064400000000000000000000210251046102023000146760ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides x86-specific implementations of the ArchOps trait. //! //! This module is designed to work with both x86 and x86_64 architectures. //! //! It uses the SSE4.1 instruction sets for SIMD operations. #![cfg(any(target_arch = "x86", target_arch = "x86_64"))] #[cfg(target_arch = "x86")] use core::arch::x86::*; #[cfg(target_arch = "x86_64")] use core::arch::x86_64::*; use crate::traits::ArchOps; // Tier-specific ArchOps implementations for x86/x86_64 /// Base x86/x86_64 SSE+PCLMULQDQ implementation - baseline performance for both architectures /// Uses SSE4.1 and PCLMULQDQ instructions #[derive(Debug, Copy, Clone)] pub struct X86SsePclmulqdqOps; // Base implementation for x86/x86_64 SSE+PCLMULQDQ tier impl ArchOps for X86SsePclmulqdqOps { type Vector = __m128i; #[inline] #[target_feature(enable = "sse2")] unsafe fn create_vector_from_u64_pair( &self, high: u64, low: u64, reflected: bool, ) -> Self::Vector { // Note order is different from AArch64 if reflected { self.set_epi64x(low, high) } else { self.set_epi64x(high, low) } } #[inline] #[target_feature(enable = "sse2")] unsafe fn create_vector_from_u64_pair_non_reflected( &self, high: u64, low: u64, ) -> Self::Vector { // Note order is different from AArch64 self.set_epi64x(high, low) } #[inline] #[target_feature(enable = "sse4.1")] unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector { self.create_u64_vector(value, high) } #[inline] #[target_feature(enable = "sse2")] unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2] { [self.extract_u64_low(vector), self.extract_u64_high(vector)] } #[inline] #[target_feature(enable = "sse2")] unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2] { // On x86, poly64s and u64s extraction is the same self.extract_u64s(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { _mm_xor_si128(a, b) } #[inline] #[target_feature(enable = "sse2")] unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector { _mm_loadu_si128(ptr as *const __m128i) } #[inline] #[target_feature(enable = "sse2")] unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector { _mm_loadu_si128(ptr as *const __m128i) } #[inline] #[target_feature(enable = "ssse3")] unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector { _mm_shuffle_epi8(data, mask) } #[inline] #[target_feature(enable = "sse4.1")] unsafe fn blend_vectors( &self, a: Self::Vector, b: Self::Vector, mask: Self::Vector, ) -> Self::Vector { _mm_blendv_epi8(a, b, mask) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector { _mm_slli_si128(vector, 8) } #[inline] #[target_feature(enable = "sse2")] unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector { _mm_set1_epi8(value as i8) } #[inline(always)] unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector { // On x86, MSB is already used for blending, so we just return the vector vector } #[inline] #[target_feature(enable = "sse2")] unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { _mm_and_si128(a, b) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector { _mm_srli_si128(vector, 4) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector { _mm_slli_si128(vector, 4) } #[inline] #[target_feature(enable = "sse4.1")] unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector { if high { _mm_insert_epi32(_mm_set1_epi32(0), value as i32, 3) } else { _mm_set_epi32(0, 0, 0, value as i32) } } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector { _mm_slli_si128(vector, 4) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector { _mm_srli_si128(vector, 4) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector { _mm_srli_si128(vector, 8) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector { _mm_srli_si128(vector, 5) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector { _mm_srli_si128(vector, 6) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector { _mm_srli_si128(vector, 7) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector { _mm_srli_si128(vector, 12) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector { _mm_slli_si128(vector, 12) } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { _mm_clmulepi64_si128(a, b, 0x00) } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { _mm_clmulepi64_si128(a, b, 0x01) } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { _mm_clmulepi64_si128(a, b, 0x10) } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { _mm_clmulepi64_si128(a, b, 0x11) } #[inline] #[target_feature(enable = "sse4.1")] unsafe fn xor3_vectors( &self, a: Self::Vector, b: Self::Vector, c: Self::Vector, ) -> Self::Vector { // SSE tier always uses two XOR operations _mm_xor_si128(_mm_xor_si128(a, b), c) } } impl X86SsePclmulqdqOps { #[inline] #[target_feature(enable = "sse2")] unsafe fn set_epi64x(&self, e1: u64, e0: u64) -> __m128i { #[cfg(target_arch = "x86_64")] { _mm_set_epi64x(e1 as i64, e0 as i64) } #[cfg(target_arch = "x86")] { // _mm_set_epi32 takes (highest, higher, lower, lowest) // We need to ensure e0 is in the lower 64 bits and e1 in the higher 64 bits let lo = _mm_set_epi32(0, 0, (e0 >> 32) as i32, e0 as i32); let hi = _mm_set_epi32(0, 0, (e1 >> 32) as i32, e1 as i32); _mm_unpacklo_epi64(lo, hi) } } #[inline] #[target_feature(enable = "sse4.1")] unsafe fn create_u64_vector(&self, value: u64, high: bool) -> __m128i { if high { self.set_epi64x(value, 0) } else { self.set_epi64x(0, value) } } #[inline] #[target_feature(enable = "sse2")] unsafe fn extract_u64_low(&self, v: __m128i) -> u64 { #[cfg(target_arch = "x86_64")] { _mm_cvtsi128_si64(v) as u64 } #[cfg(target_arch = "x86")] { let lo = _mm_cvtsi128_si32(v) as u32 as u64; let hi = _mm_cvtsi128_si32(_mm_srli_si128(v, 4)) as u32 as u64; lo | (hi << 32) } } #[inline] #[target_feature(enable = "sse2")] unsafe fn extract_u64_high(&self, v: __m128i) -> u64 { #[cfg(target_arch = "x86_64")] { _mm_cvtsi128_si64(_mm_srli_si128(v, 8)) as u64 } #[cfg(target_arch = "x86")] { let lo = _mm_cvtsi128_si32(_mm_srli_si128(v, 8)) as u32 as u64; let hi = _mm_cvtsi128_si32(_mm_srli_si128(v, 12)) as u32 as u64; lo | (hi << 32) } } } crc-fast-1.10.0/src/arch/x86_64/avx512.rs000064400000000000000000000131541046102023000154470ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides x86_64-specific implementations of the ArchOps trait. //! //! It uses the AVX-512 instruction sets for SIMD operations. #![cfg(target_arch = "x86_64")] use crate::arch::x86::sse::X86SsePclmulqdqOps; use crate::traits::ArchOps; use std::arch::x86_64::*; /// x86_64-only AVX512+PCLMULQDQ tier - delegates to SSE tier and overrides XOR3 operations /// Uses AVX512 ternary logic for XOR3 operations with PCLMULQDQ #[derive(Debug, Copy, Clone)] pub struct X86_64Avx512PclmulqdqOps(X86SsePclmulqdqOps); impl Default for X86_64Avx512PclmulqdqOps { fn default() -> Self { Self::new() } } impl X86_64Avx512PclmulqdqOps { #[inline(always)] pub fn new() -> Self { Self(X86SsePclmulqdqOps) } } impl ArchOps for X86_64Avx512PclmulqdqOps { type Vector = __m128i; // Delegate all methods to the base SSE implementation #[inline(always)] unsafe fn create_vector_from_u64_pair( &self, high: u64, low: u64, reflected: bool, ) -> Self::Vector { self.0.create_vector_from_u64_pair(high, low, reflected) } #[inline(always)] unsafe fn create_vector_from_u64_pair_non_reflected( &self, high: u64, low: u64, ) -> Self::Vector { self.0.create_vector_from_u64_pair_non_reflected(high, low) } #[inline(always)] unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector { self.0.create_vector_from_u64(value, high) } #[inline(always)] unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2] { self.0.extract_u64s(vector) } #[inline(always)] unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2] { self.0.extract_poly64s(vector) } #[inline(always)] unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.xor_vectors(a, b) } #[inline(always)] unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector { self.0.load_bytes(ptr) } #[inline(always)] unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector { self.0.load_aligned(ptr) } #[inline(always)] unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector { self.0.shuffle_bytes(data, mask) } #[inline(always)] unsafe fn blend_vectors( &self, a: Self::Vector, b: Self::Vector, mask: Self::Vector, ) -> Self::Vector { self.0.blend_vectors(a, b, mask) } #[inline(always)] unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_8(vector) } #[inline(always)] unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector { self.0.set_all_bytes(value) } #[inline(always)] unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector { self.0.create_compare_mask(vector) } #[inline(always)] unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.and_vectors(a, b) } #[inline(always)] unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_32(vector) } #[inline(always)] unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_32(vector) } #[inline(always)] unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector { self.0.create_vector_from_u32(value, high) } #[inline(always)] unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_4(vector) } #[inline(always)] unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_4(vector) } #[inline(always)] unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_8(vector) } #[inline(always)] unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_5(vector) } #[inline(always)] unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_6(vector) } #[inline(always)] unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_7(vector) } #[inline(always)] unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_12(vector) } #[inline(always)] unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_12(vector) } #[inline(always)] unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_00(a, b) } #[inline(always)] unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_01(a, b) } #[inline(always)] unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_10(a, b) } #[inline(always)] unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_11(a, b) } #[inline] #[target_feature(enable = "avx512vl")] unsafe fn xor3_vectors( &self, a: Self::Vector, b: Self::Vector, c: Self::Vector, ) -> Self::Vector { // AVX512 tier always uses ternary logic _mm_ternarylogic_epi64(a, b, c, 0x96) // XOR3 operation } } crc-fast-1.10.0/src/arch/x86_64/avx512_vpclmulqdq.rs000064400000000000000000000471621046102023000177250ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides AVX-512 and VPCLMULQDQ-specific implementations of the ArchOps trait. //! //! It performs folding using 4 x ZMM registers of 512-bits each. #![cfg(target_arch = "x86_64")] use crate::arch::x86::sse::X86SsePclmulqdqOps; use crate::enums::Reflector; use crate::structs::CrcState; use crate::traits::{ArchOps, EnhancedCrcWidth}; use core::arch::x86_64::*; use core::ops::BitXor; /// Implements the ArchOps trait using 512-bit AVX-512 and VPCLMULQDQ instructions at 512 bits. /// Delegates to X86SsePclmulqdqOps for standard 128-bit operations #[derive(Debug, Copy, Clone)] pub struct X86_64Avx512VpclmulqdqOps(X86SsePclmulqdqOps); impl Default for X86_64Avx512VpclmulqdqOps { fn default() -> Self { Self::new() } } impl X86_64Avx512VpclmulqdqOps { #[inline(always)] pub fn new() -> Self { Self(X86SsePclmulqdqOps) } } // Wrapper for __m512i to make it easier to work with #[derive(Debug, Copy, Clone)] struct Simd512(__m512i); impl Simd512 { #[inline] #[target_feature(enable = "avx512f")] #[allow(clippy::too_many_arguments)] unsafe fn new(x7: u64, x6: u64, x5: u64, x4: u64, x3: u64, x2: u64, x1: u64, x0: u64) -> Self { Self(_mm512_set_epi64( x7 as i64, x6 as i64, x5 as i64, x4 as i64, x3 as i64, x2 as i64, x1 as i64, x0 as i64, )) } #[inline] #[target_feature(enable = "avx512vl,vpclmulqdq")] unsafe fn fold_64(&self, coeff: &Self, new_data: &Self) -> Self { // Use 512-bit ternary logic XOR3 with carryless multiplication Self(_mm512_ternarylogic_epi64( _mm512_clmulepi64_epi128(self.0, coeff.0, 0), // Low parts _mm512_clmulepi64_epi128(self.0, coeff.0, 17), // High parts new_data.0, 0x96, // XOR3 operation )) } #[cfg(feature = "std")] #[inline] #[target_feature(enable = "avx512f")] unsafe fn extract_u64s(&self) -> [u64; 8] { let mut result = [0u64; 8]; _mm512_storeu_si512(result.as_mut_ptr().cast(), self.0); result } #[inline] #[target_feature(enable = "avx512f")] unsafe fn load_from_ptr(ptr: *const u8) -> Self { Self(_mm512_loadu_si512(ptr as *const __m512i)) } #[inline] #[target_feature(enable = "avx512f")] unsafe fn to_128i_extract(self) -> __m128i { _mm512_extracti32x4_epi32(self.0, INDEX) } #[inline] #[target_feature(enable = "avx512f")] unsafe fn xor(&self, other: &Self) -> Self { Self(_mm512_xor_si512(self.0, other.0)) } #[cfg(feature = "std")] #[inline] #[target_feature(enable = "avx512f")] #[allow(unused)] unsafe fn print_hex(&self, prefix: &str) { let values = self.extract_u64s(); println!( "{}={:#016x}_{:016x}_{:016x}_{:016x}_{:016x}_{:016x}_{:016x}_{:016x}", prefix, values[7], values[6], values[5], values[4], values[3], values[2], values[1], values[0] ); } } impl X86_64Avx512VpclmulqdqOps { /// Process aligned blocks using VPCLMULQDQ with 4 x 512-bit registers /// /// Note that #[inline(always)] loses the inlining performance boost, despite no native /// target_features being used directly. Odd since that's not how Rust's docs make it sound... #[inline] #[target_feature(enable = "avx512vl,avx512bw,vpclmulqdq")] unsafe fn process_blocks( &self, state: &mut CrcState<::Vector>, first: &[__m128i; 8], rest: &[[__m128i; 8]], keys: &[u64; 23], reflected: bool, ) -> W::Value where W::Value: Copy + BitXor, { let state_u64s = self.extract_u64s(state.value); let positioned_state = if reflected { Simd512::new(0, 0, 0, 0, 0, 0, 0, state_u64s[0]) } else { Simd512::new(state_u64s[1], 0, 0, 0, 0, 0, 0, 0) }; let reflector = create_reflector512(reflected); // Load first 256 bytes (2nd half is rest[0] since these are 128-byte blocks) let first_ptr = first.as_ptr() as *const u8; let first_rest_ptr = rest[0].as_ptr() as *const u8; let mut x = [ reflect_bytes512(&reflector, Simd512::load_from_ptr(first_ptr)), reflect_bytes512(&reflector, Simd512::load_from_ptr(first_ptr.add(64))), reflect_bytes512(&reflector, Simd512::load_from_ptr(first_rest_ptr)), reflect_bytes512(&reflector, Simd512::load_from_ptr(first_rest_ptr.add(64))), ]; x[0] = positioned_state.xor(&x[0]); let coeff = self.create_avx512_256byte_coefficient(keys, reflected); let remaining_rest = &rest[1..]; let pair_count = remaining_rest.len() / 2; for i in 0..pair_count { let block1_ptr = remaining_rest[i * 2].as_ptr() as *const u8; let block2_ptr = remaining_rest[i * 2 + 1].as_ptr() as *const u8; x[0] = x[0].fold_64( &coeff, &reflect_bytes512(&reflector, Simd512::load_from_ptr(block1_ptr)), ); x[1] = x[1].fold_64( &coeff, &reflect_bytes512(&reflector, Simd512::load_from_ptr(block1_ptr.add(64))), ); x[2] = x[2].fold_64( &coeff, &reflect_bytes512(&reflector, Simd512::load_from_ptr(block2_ptr)), ); x[3] = x[3].fold_64( &coeff, &reflect_bytes512(&reflector, Simd512::load_from_ptr(block2_ptr.add(64))), ); } let processed_pairs = pair_count * 2; let remaining_single_count = remaining_rest.len() - processed_pairs; if remaining_single_count > 0 { // We have 1 unprocessed block (128 bytes) // Fold 4×512 down to 2×512 and process the remaining block with 2-register mode let folded_2reg = self.fold_from_4x512_to_2x256(x, keys, reflected); let coeff_2reg = self.create_avx512_128byte_coefficient(keys, reflected); let last_block_ptr = remaining_rest[processed_pairs].as_ptr() as *const u8; let final_x = [ folded_2reg[0].fold_64( &coeff_2reg, &reflect_bytes512(&reflector, Simd512::load_from_ptr(last_block_ptr)), ), folded_2reg[1].fold_64( &coeff_2reg, &reflect_bytes512(&reflector, Simd512::load_from_ptr(last_block_ptr.add(64))), ), ]; let folded = self.fold_from_2x512_to_1x128(final_x, keys, reflected); return W::perform_final_reduction(folded, reflected, keys, self); } // All blocks processed in pairs - fold from 4 x 512-bit to 1 x 128-bit let folded = self.fold_from_4x512_to_1x128(x, keys, reflected); W::perform_final_reduction(folded, reflected, keys, self) } /// Create a folding coefficient for AVX-512 for 128-byte folding distances #[inline(always)] unsafe fn create_avx512_128byte_coefficient( &self, keys: &[u64; 23], reflected: bool, ) -> Simd512 { let (k1, k2) = if reflected { (keys[3], keys[4]) } else { (keys[4], keys[3]) }; // Replicate the coefficient pair Simd512::new(k1, k2, k1, k2, k1, k2, k1, k2) } /// Create a folding coefficient for AVX-512 for 256-byte folding distances #[inline(always)] unsafe fn create_avx512_256byte_coefficient( &self, keys: &[u64; 23], reflected: bool, ) -> Simd512 { let (k1, k2) = if reflected { (keys[21], keys[22]) } else { (keys[22], keys[21]) }; // Replicate the coefficient pair Simd512::new(k1, k2, k1, k2, k1, k2, k1, k2) } /// Fold from 4 x 512-bit to 1 x 128-bit #[inline(always)] unsafe fn fold_from_4x512_to_1x128( &self, x: [Simd512; 4], keys: &[u64; 23], reflected: bool, ) -> __m128i { // Step 1: Fold 4 x 512-bit to 2 x 512-bit let x2 = self.fold_from_4x512_to_2x256(x, keys, reflected); // Step 2: Fold 2 x 512-bit to 1 x 128-bit self.fold_from_2x512_to_1x128(x2, keys, reflected) } /// Fold from 4 x 512-bit to 2 x 512-bit #[inline(always)] unsafe fn fold_from_4x512_to_2x256( &self, x: [Simd512; 4], keys: &[u64; 23], reflected: bool, ) -> [Simd512; 2] { // This folds registers that are 128 bytes apart (x[0] with x[2], x[1] with x[3]) let coeff = self.create_avx512_128byte_coefficient(keys, reflected); // Fold pairs: // x[0] (bytes 0-63) + x[2] (bytes 128-191) → result[0] // x[1] (bytes 64-127) + x[3] (bytes 192-255) → result[1] [x[0].fold_64(&coeff, &x[2]), x[1].fold_64(&coeff, &x[3])] } /// Fold from 2 x 512-bit to 1 x 128-bit #[inline(always)] unsafe fn fold_from_2x512_to_1x128( &self, x: [Simd512; 2], keys: &[u64; 23], reflected: bool, ) -> __m128i { // Create the fold coefficients for different distances let fold_coefficients = [ self.create_vector_from_u64_pair(keys[10], keys[9], reflected), // 112 bytes self.create_vector_from_u64_pair(keys[12], keys[11], reflected), // 96 bytes self.create_vector_from_u64_pair(keys[14], keys[13], reflected), // 80 bytes self.create_vector_from_u64_pair(keys[16], keys[15], reflected), // 64 bytes self.create_vector_from_u64_pair(keys[18], keys[17], reflected), // 48 bytes self.create_vector_from_u64_pair(keys[20], keys[19], reflected), // 32 bytes self.create_vector_from_u64_pair(keys[2], keys[1], reflected), // 16 bytes ]; // Extract the 8 x 128-bit vectors from the 2 x 512-bit vectors (this is faster than // using 256-bit intrinsics for 1KiB payloads) let v128 = if reflected { [ x[0].to_128i_extract::<0>(), // 256-x0.low x[0].to_128i_extract::<1>(), // 256-x0.high x[0].to_128i_extract::<2>(), // 256-x1.low x[0].to_128i_extract::<3>(), // 256-x1.high x[1].to_128i_extract::<0>(), // 256-x2.low x[1].to_128i_extract::<1>(), // 256-x2.high x[1].to_128i_extract::<2>(), // 256-x3.low x[1].to_128i_extract::<3>(), // 256-x3.high ] } else { [ x[0].to_128i_extract::<3>(), // 256-x1.high x[0].to_128i_extract::<2>(), // 256-x1.low x[0].to_128i_extract::<1>(), // 256-x0.high x[0].to_128i_extract::<0>(), // 256-x0.low x[1].to_128i_extract::<3>(), // 256-x3.high x[1].to_128i_extract::<2>(), // 256-x3.low x[1].to_128i_extract::<1>(), // 256-x2.high x[1].to_128i_extract::<0>(), // 256-x2.low ] }; // Fold the 8 xmm registers to 1 xmm register let mut res = v128[7]; for (i, &coeff) in fold_coefficients.iter().enumerate() { let folded_h = self.carryless_mul_00(v128[i], coeff); let folded_l = self.carryless_mul_11(v128[i], coeff); res = self.xor3_vectors(folded_h, folded_l, res); } res } } // 512-bit version of the Reflector #[derive(Clone, Copy)] enum Reflector512 { NoReflector, ForwardReflector { smask: Simd512 }, } // Function to create the appropriate reflector based on CRC parameters #[inline(always)] unsafe fn create_reflector512(reflected: bool) -> Reflector512 { if reflected { Reflector512::NoReflector } else { // Load shuffle mask let smask = Simd512::new( 0x08090a0b0c0d0e0f, 0x0001020304050607, 0x08090a0b0c0d0e0f, 0x0001020304050607, 0x08090a0b0c0d0e0f, 0x0001020304050607, 0x08090a0b0c0d0e0f, 0x0001020304050607, ); Reflector512::ForwardReflector { smask } } } // Function to apply reflection to a 512-bit vector #[inline(always)] unsafe fn reflect_bytes512(reflector: &Reflector512, data: Simd512) -> Simd512 { match reflector { Reflector512::NoReflector => data, Reflector512::ForwardReflector { smask } => shuffle_bytes512(data, *smask), } } // pre-compute the reverse indices for 512-bit shuffling static REVERSE_INDICES_512: __m512i = unsafe { core::mem::transmute([7u64, 6u64, 5u64, 4u64, 3u64, 2u64, 1u64, 0u64]) }; // Implement a 512-bit byte shuffle function #[inline] #[target_feature(enable = "avx512f,avx512bw")] unsafe fn shuffle_bytes512(data: Simd512, mask: Simd512) -> Simd512 { Simd512(_mm512_permutexvar_epi64( // Reverse the order using 512-bit permutation REVERSE_INDICES_512, // reverse indices _mm512_shuffle_epi8(data.0, mask.0), // shuffled data )) } // Delegate all ArchOps methods to the inner X86SsePclmulqdqOps instance impl ArchOps for X86_64Avx512VpclmulqdqOps { type Vector = __m128i; #[inline(always)] unsafe fn process_enhanced_simd_blocks( &self, state: &mut CrcState, first: &[Self::Vector; 8], rest: &[[Self::Vector; 8]], _reflector: &Reflector, keys: &[u64; 23], ) -> bool where Self::Vector: Copy, { // Update the state with the result *state = W::create_state( self.process_blocks::(state, first, rest, keys, state.reflected), state.reflected, self, ); // Return true to indicate we handled it true } // Delegate all other methods to X86SsePclmulqdqOps #[inline] #[target_feature(enable = "sse2")] unsafe fn create_vector_from_u64_pair( &self, high: u64, low: u64, reflected: bool, ) -> Self::Vector { self.0.create_vector_from_u64_pair(high, low, reflected) } #[inline] #[target_feature(enable = "sse2")] unsafe fn create_vector_from_u64_pair_non_reflected( &self, high: u64, low: u64, ) -> Self::Vector { self.0.create_vector_from_u64_pair_non_reflected(high, low) } #[inline] #[target_feature(enable = "sse4.1")] unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector { self.0.create_vector_from_u64(value, high) } #[inline] #[target_feature(enable = "sse2")] unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2] { self.0.extract_u64s(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2] { self.0.extract_poly64s(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.xor_vectors(a, b) } #[inline] #[target_feature(enable = "sse2")] unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector { self.0.load_bytes(ptr) } #[inline] #[target_feature(enable = "sse2")] unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector { self.0.load_aligned(ptr) } #[inline] #[target_feature(enable = "ssse3")] unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector { self.0.shuffle_bytes(data, mask) } #[inline] #[target_feature(enable = "sse4.1")] unsafe fn blend_vectors( &self, a: Self::Vector, b: Self::Vector, mask: Self::Vector, ) -> Self::Vector { self.0.blend_vectors(a, b, mask) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_8(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector { self.0.set_all_bytes(value) } #[inline] #[target_feature(enable = "sse2")] unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector { self.0.create_compare_mask(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.and_vectors(a, b) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_32(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_32(vector) } #[inline] #[target_feature(enable = "sse4.1")] unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector { self.0.create_vector_from_u32(value, high) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_4(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_4(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_8(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_5(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_6(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_7(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_right_12(vector) } #[inline] #[target_feature(enable = "sse2")] unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector { self.0.shift_left_12(vector) } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_00(a, b) } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_01(a, b) } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_10(a, b) } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector { self.0.carryless_mul_11(a, b) } #[inline] #[target_feature(enable = "avx512vl")] unsafe fn xor3_vectors( &self, a: Self::Vector, b: Self::Vector, c: Self::Vector, ) -> Self::Vector { // VPCLMULQDQ implementation always uses AVX512 ternary logic // Feature detection is handled at the dispatch level _mm_ternarylogic_epi64( a, b, c, 0x96, // XOR3 operation ) } } crc-fast-1.10.0/src/arch/x86_64/mod.rs000064400000000000000000000003401046102023000151710ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides x86_64-specific implementations of the ArchOps trait. #![cfg(target_arch = "x86_64")] pub mod avx512; pub mod avx512_vpclmulqdq; crc-fast-1.10.0/src/bin/arch-check.rs000064400000000000000000000066401046102023000153100ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This is a simple program that checks if the target architecture supports certain features. #[cfg(target_arch = "aarch64")] use std::arch::is_aarch64_feature_detected; #[cfg(any(target_arch = "x86_64", target_arch = "x86"))] use std::arch::is_x86_feature_detected; use crc_fast::get_calculator_target; use crc_fast::CrcAlgorithm::{Crc32Iscsi, Crc32IsoHdlc, Crc64Nvme}; fn main() { // Check the target architecture and call the appropriate function #[cfg(target_arch = "aarch64")] aarch64_features(); #[cfg(any(target_arch = "x86_64", target_arch = "x86"))] x86_features(); print_targets(); print_cpu_info(); } #[cfg(target_arch = "aarch64")] fn aarch64_features() { let checkmark: char = '✓'; println!("[AArch64] Checking for features..."); if is_aarch64_feature_detected!("neon") { println!(" {checkmark} NEON",); } else { println!(" x NEON"); } if is_aarch64_feature_detected!("crc") { println!(" {checkmark} CRC",); } else { println!(" x CRC"); } if is_aarch64_feature_detected!("sha3") { println!(" {checkmark} SHA3\n",); } else { println!(" x SHA3\n"); } } #[cfg(any(target_arch = "x86_64", target_arch = "x86"))] fn x86_features() { let checkmark: char = '✓'; println!("[X86] Checking for features..."); if is_x86_feature_detected!("sse2") { println!(" {checkmark} SSE2",); } else { println!(" x SSE2"); } if is_x86_feature_detected!("sse4.1") { println!(" {checkmark} SSE4.1",); } else { println!(" x SSE4.1"); } if is_x86_feature_detected!("pclmulqdq") { println!(" {checkmark} PCLMULQDQ",); } else { println!(" x PCLMULQDQ"); } if is_x86_feature_detected!("avx2") { println!(" {checkmark} AVX2",); } else { println!(" x AVX2"); } if is_x86_feature_detected!("vpclmulqdq") { println!(" {checkmark} VPCLMULQDQ",); } else { println!(" x VPCLMULQDQ"); } if is_x86_feature_detected!("avx512f") { println!(" {checkmark} AVX512F",); } else { println!(" x AVX512F"); } if is_x86_feature_detected!("avx512vl") { println!(" {checkmark} AVX512VL\n",); } else { println!(" x AVX512VL\n"); } } /// Print the acceleration targets fn print_targets() { let checkmark: char = '✓'; println!("[Acceleration targets]"); println!( " {} CRC-32/ISCSI target: {}", checkmark, get_calculator_target(Crc32Iscsi) ); println!( " {} CRC-32/ISO-HDLC target: {}", checkmark, get_calculator_target(Crc32IsoHdlc) ); println!( " {} CRC-64/NVME target: {}\n", checkmark, get_calculator_target(Crc64Nvme) ); } /// Print the first entry of /proc/cpuinfo if it's available fn print_cpu_info() { println!("\n[CPU Info]"); if let Ok(cpuinfo) = std::fs::read_to_string("/proc/cpuinfo") { // Split the content by double newlines and take the first entry if let Some(first_cpu) = cpuinfo.split("\n\n").next() { println!("{first_cpu}",); } else { println!("No CPU information found."); } } else { println!("Failed to read /proc/cpuinfo. This may not be available on your platform.\n"); } } crc-fast-1.10.0/src/bin/checksum.rs000064400000000000000000000562151046102023000151250ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This is a simple program to calculate a checksum from the command line use crc_fast::{checksum, checksum_file, CrcAlgorithm}; use std::env; use std::process::ExitCode; use std::str::FromStr; #[derive(Debug)] struct Config { algorithm: String, file: Option, string: Option, format: OutputFormat, benchmark: Option, } #[derive(Debug)] struct BenchmarkConfig { size: Option, duration: f64, } #[derive(Debug)] enum BenchmarkData { InMemory(Vec), File(String), } #[derive(Debug)] struct BenchmarkRunner { algorithm: CrcAlgorithm, data: BenchmarkData, duration: f64, } #[derive(Debug)] struct BenchmarkResult { iterations: u64, elapsed_seconds: f64, throughput_gibs: f64, time_per_iteration_nanos: f64, acceleration_target: String, data_size: u64, } #[derive(Debug, Clone)] enum OutputFormat { Hex, Decimal, } impl BenchmarkConfig { fn validate(&self) -> Result<(), String> { if self.duration <= 0.0 { return Err("Duration must be greater than 0".to_string()); } if let Some(size) = self.size { if size == 0 { return Err("Size must be greater than 0".to_string()); } } Ok(()) } } impl BenchmarkRunner { fn new(algorithm: CrcAlgorithm, data: BenchmarkData, duration: f64) -> Self { Self { algorithm, data, duration, } } fn run(&self) -> Result { use std::time::Instant; let start = Instant::now(); let mut iterations = 0u64; while start.elapsed().as_secs_f64() < self.duration { match &self.data { BenchmarkData::InMemory(data) => { std::hint::black_box(checksum(self.algorithm, data)); } BenchmarkData::File(filename) => { match checksum_file(self.algorithm, filename, None) { Ok(result) => { std::hint::black_box(result); } Err(e) => { return Err(format!("Failed to read file during benchmark: {}", e)); } } } } iterations += 1; } let elapsed = start.elapsed().as_secs_f64(); let data_size = match &self.data { BenchmarkData::InMemory(data) => data.len() as u64, BenchmarkData::File(filename) => std::fs::metadata(filename) .map(|m| m.len()) .map_err(|e| format!("Failed to get file size: {}", e))?, }; let acceleration_target = crc_fast::get_calculator_target(self.algorithm); Ok(BenchmarkResult::new( iterations, elapsed, acceleration_target, data_size, )) } } impl BenchmarkResult { fn new( iterations: u64, elapsed_seconds: f64, acceleration_target: String, data_size: u64, ) -> Self { let throughput_gibs = if elapsed_seconds > 0.0 { (data_size as f64 * iterations as f64) / elapsed_seconds / (1024.0 * 1024.0 * 1024.0) } else { 0.0 }; let time_per_iteration_nanos = if iterations > 0 { elapsed_seconds * 1_000_000_000.0 / iterations as f64 } else { 0.0 }; Self { iterations, elapsed_seconds, throughput_gibs, time_per_iteration_nanos, acceleration_target, data_size, } } } /// Fills a buffer with pseudo-random data using xorshift64* algorithm. /// This is a deterministic PRNG that's tiny, fast, and suitable for benchmark data generation. /// The seed is derived from the buffer size to provide some variability. /// This solves the problem of having to use a full-featured PRNG like rand for benchmark data generation. #[inline] fn fill_pseudo_random(buf: &mut [u8], seed: u64) { let mut x = seed; for b in buf { x ^= x >> 12; x ^= x << 25; x ^= x >> 27; let r = x.wrapping_mul(0x2545_F491_4F6C_DD1D); *b = r as u8; } } fn generate_random_data(size: usize) -> Result, String> { // Check for reasonable size limits to prevent memory issues if size > 1_073_741_824 { // 1 GiB limit return Err("Data size too large (maximum 1 GiB)".to_string()); } // Use vec! macro to avoid clippy warning about slow initialization let mut buf = vec![0u8; size]; // Derive seed from size for deterministic but varied data let seed = 0x9E37_79B9_7F4A_7C15_u64.wrapping_add(size as u64); fill_pseudo_random(&mut buf, seed); Ok(buf) } fn print_usage() { println!("Usage: checksum -a algorithm [-f file] [-s string] [--format hex|decimal]"); println!( " checksum -a algorithm -b [--size bytes] [--duration seconds] [-f file] [-s string]" ); println!(); println!("Example: checksum -a CRC-32/ISCSI -f myfile.txt"); println!("Example: checksum -a CRC-64/NVME -s 'Hello, world!' --format decimal"); println!("Example: checksum -a CRC-32/ISCSI -b --size 1048576 --duration 5.0"); println!(); println!("Options:"); println!(" -a algorithm Specify the checksum algorithm (required)"); println!(" -f file Calculate checksum for the specified file"); println!(" -h, --help Show this help message"); println!(" -s string Calculate checksum for the specified string"); println!(" --format hex|decimal Output format (default: hex)"); println!(); println!("Benchmarking:"); println!(" -b Enable benchmark mode"); println!(" --duration seconds Benchmark duration in seconds (default: 10.0)"); println!(" --size bytes Data size for random generation in benchmark mode (default: 1048576 [1MiB])"); println!(); println!(); println!("Note: In normal mode, either -f or -s must be provided, but not both."); println!(" In benchmark mode (-b), -f or -s are optional for using specific data."); } fn parse_args() -> Result { let args: Vec = env::args().collect(); if args.len() == 1 { return Err("No arguments provided".to_string()); } // Check for help flag if args.contains(&"-h".to_string()) || args.contains(&"--help".to_string()) { return Err("help".to_string()); } let mut algorithm: Option = None; let mut file: Option = None; let mut string: Option = None; let mut format = OutputFormat::Hex; // Default to hex let mut benchmark_mode = false; let mut benchmark_size: Option = None; let mut benchmark_duration = 10.0; // Default duration let mut i = 1; // Skip program name while i < args.len() { match args[i].as_str() { "-a" => { if i + 1 >= args.len() { return Err("Missing algorithm after -a flag".to_string()); } algorithm = Some(args[i + 1].clone()); i += 2; } "-f" => { if i + 1 >= args.len() { return Err("Missing filename after -f flag".to_string()); } if string.is_some() { return Err("Cannot specify both -f and -s flags".to_string()); } file = Some(args[i + 1].clone()); i += 2; } "-s" => { if i + 1 >= args.len() { return Err("Missing string after -s flag".to_string()); } if file.is_some() { return Err("Cannot specify both -f and -s flags".to_string()); } string = Some(args[i + 1].clone()); i += 2; } "--format" => { if i + 1 >= args.len() { return Err("Missing format after --format flag".to_string()); } match args[i + 1].as_str() { "hex" => format = OutputFormat::Hex, "decimal" => format = OutputFormat::Decimal, invalid => { return Err(format!( "Invalid format '{}'. Use 'hex' or 'decimal'", invalid )) } } i += 2; } "-b" => { benchmark_mode = true; i += 1; } "--size" => { if i + 1 >= args.len() { return Err("Missing size value after --size flag".to_string()); } benchmark_size = Some( args[i + 1] .parse::() .map_err(|_| format!("Invalid size value: {}", args[i + 1]))?, ); i += 2; } "--duration" => { if i + 1 >= args.len() { return Err("Missing duration value after --duration flag".to_string()); } benchmark_duration = args[i + 1] .parse::() .map_err(|_| format!("Invalid duration value: {}", args[i + 1]))?; i += 2; } arg => { return Err(format!("Unknown argument: {}", arg)); } } } // Validate required arguments let algorithm = algorithm.ok_or("Algorithm (-a) is required")?; // Validate mutual exclusivity between benchmark and normal modes if !benchmark_mode && (benchmark_size.is_some() || benchmark_duration != 10.0) { return Err("--size and --duration can only be used with -b flag".to_string()); } // Create benchmark config if in benchmark mode let benchmark = if benchmark_mode { let config = BenchmarkConfig { size: benchmark_size, duration: benchmark_duration, }; config.validate()?; Some(config) } else { None }; // Validate input requirements based on mode if benchmark.is_none() { // Normal mode: require either file or string input if file.is_none() && string.is_none() { return Err( "Either -f (file) or -s (string) must be provided in normal mode".to_string(), ); } } // Benchmark mode: file and string are optional (will use generated data if neither provided) Ok(Config { algorithm, file, string, format, benchmark, }) } fn calculate_checksum(config: &Config) -> Result<(), String> { let algorithm = CrcAlgorithm::from_str(&config.algorithm) .map_err(|_| format!("Invalid algorithm: {}", config.algorithm))?; // Check if benchmark mode is enabled if let Some(benchmark_config) = &config.benchmark { return run_benchmark(config, benchmark_config, algorithm); } let checksum = if let Some(ref filename) = config.file { checksum_file(algorithm, filename, None).unwrap() } else if let Some(ref text) = config.string { checksum(algorithm, text.as_bytes()) } else { return Err("No input provided for checksum calculation".to_string()); }; match config.format { OutputFormat::Hex => println!("{:#x?}", checksum), OutputFormat::Decimal => println!("{}", checksum), } Ok(()) } fn run_benchmark( config: &Config, benchmark_config: &BenchmarkConfig, algorithm: CrcAlgorithm, ) -> Result<(), String> { // Determine data source and create BenchmarkData let data = if let Some(ref filename) = config.file { // Validate file exists before benchmarking if !std::path::Path::new(filename).exists() { return Err(format!("File not found: {}", filename)); } BenchmarkData::File(filename.clone()) } else if let Some(ref text) = config.string { BenchmarkData::InMemory(text.as_bytes().to_vec()) } else { // Generate random data with specified size or default (1 MiB) let size = benchmark_config.size.unwrap_or(1_048_576); let random_data = generate_random_data(size)?; BenchmarkData::InMemory(random_data) }; // Create and run benchmark let runner = BenchmarkRunner::new(algorithm, data, benchmark_config.duration); let result = runner.run()?; // Display results with algorithm name display_benchmark_results(&result, &config.algorithm); Ok(()) } // Format numbers with comma separators for better readability fn format_number_with_commas(n: u64) -> String { let s = n.to_string(); let mut result = String::new(); let chars: Vec = s.chars().collect(); for (i, ch) in chars.iter().enumerate() { if i > 0 && (chars.len() - i).is_multiple_of(3) { result.push(','); } result.push(*ch); } result } fn display_benchmark_results(result: &BenchmarkResult, algorithm_name: &str) { println!("Algorithm: {}", algorithm_name); println!("Acceleration Target: {}", result.acceleration_target); // Format data size with appropriate units let (size_value, size_unit) = if result.data_size >= 1_048_576 { (result.data_size as f64 / 1_048_576.0, "MiB") } else if result.data_size >= 1024 { (result.data_size as f64 / 1024.0, "KiB") } else { (result.data_size as f64, "bytes") }; println!( "Data Size: {} bytes ({:.1} {})", format_number_with_commas(result.data_size), size_value, size_unit ); println!("Duration: {:.2} seconds", result.elapsed_seconds); println!( "Iterations: {}", format_number_with_commas(result.iterations) ); println!("Throughput: {:.2} GiB/s", result.throughput_gibs); // Format time per iteration with appropriate units let (time_value, time_unit) = if result.time_per_iteration_nanos >= 1_000_000.0 { (result.time_per_iteration_nanos / 1_000_000.0, "ms") } else if result.time_per_iteration_nanos >= 1_000.0 { (result.time_per_iteration_nanos / 1_000.0, "μs") } else { (result.time_per_iteration_nanos, "ns") }; println!("Time per iteration: {:.1} {}", time_value, time_unit); } fn main() -> ExitCode { match parse_args() { Ok(config) => { if let Err(e) = calculate_checksum(&config) { eprintln!("Error: {}", e); return ExitCode::from(1); } } Err(msg) => { if msg == "help" { print_usage(); return ExitCode::SUCCESS; } else { eprintln!("Error: {}", msg); println!(); print_usage(); return ExitCode::from(1); } } } ExitCode::SUCCESS } #[cfg(test)] mod tests { use super::*; use std::str::FromStr; #[test] fn test_benchmark_config_validation_valid() { let config = BenchmarkConfig { size: Some(1024), duration: 5.0, }; assert!(config.validate().is_ok()); } #[test] fn test_benchmark_config_validation_zero_duration() { let config = BenchmarkConfig { size: Some(1024), duration: 0.0, }; assert!(config.validate().is_err()); assert_eq!( config.validate().unwrap_err(), "Duration must be greater than 0" ); } #[test] fn test_benchmark_config_validation_negative_duration() { let config = BenchmarkConfig { size: Some(1024), duration: -1.0, }; assert!(config.validate().is_err()); assert_eq!( config.validate().unwrap_err(), "Duration must be greater than 0" ); } #[test] fn test_benchmark_config_validation_zero_size() { let config = BenchmarkConfig { size: Some(0), duration: 5.0, }; assert!(config.validate().is_err()); assert_eq!( config.validate().unwrap_err(), "Size must be greater than 0" ); } #[test] fn test_benchmark_config_validation_none_size() { let config = BenchmarkConfig { size: None, duration: 5.0, }; assert!(config.validate().is_ok()); } #[test] fn test_generate_random_data_valid_size() { let data = generate_random_data(1024).unwrap(); assert_eq!(data.len(), 1024); } #[test] fn test_generate_random_data_large_size() { let result = generate_random_data(1_073_741_825); // 1 GiB + 1 assert!(result.is_err()); assert_eq!(result.unwrap_err(), "Data size too large (maximum 1 GiB)"); } #[test] fn test_benchmark_result_calculation() { let result = BenchmarkResult::new( 1000, // iterations 2.0, // elapsed_seconds "test".to_string(), // acceleration_target 1024, // data_size ); assert_eq!(result.iterations, 1000); assert_eq!(result.elapsed_seconds, 2.0); assert_eq!(result.data_size, 1024); // Throughput should be (1024 * 1000) / 2.0 / (1024^3) GiB/s let expected_throughput = (1024.0 * 1000.0) / 2.0 / (1024.0 * 1024.0 * 1024.0); assert!((result.throughput_gibs - expected_throughput).abs() < 1e-10); // Time per iteration should be 2.0 * 1e9 / 1000 nanoseconds let expected_time_per_iter = 2.0 * 1_000_000_000.0 / 1000.0; assert!((result.time_per_iteration_nanos - expected_time_per_iter).abs() < 1e-6); } #[test] fn test_benchmark_runner_creation() { let algorithm = CrcAlgorithm::from_str("CRC-32/ISCSI").unwrap(); let data = BenchmarkData::InMemory(vec![1, 2, 3, 4]); let runner = BenchmarkRunner::new(algorithm, data, 1.0); assert_eq!(runner.duration, 1.0); assert_eq!(runner.algorithm, algorithm); } #[test] fn test_benchmark_runner_execution_in_memory() { let algorithm = CrcAlgorithm::from_str("CRC-32/ISCSI").unwrap(); let data = BenchmarkData::InMemory(vec![1, 2, 3, 4]); let runner = BenchmarkRunner::new(algorithm, data, 0.1); // Short duration for test let result = runner.run().unwrap(); assert!(result.iterations > 0); assert!(result.elapsed_seconds > 0.0); assert_eq!(result.data_size, 4); assert!(result.throughput_gibs >= 0.0); } #[test] fn test_parse_args_benchmark_mode() { // We can't easily mock std::env::args in unit tests, so we'll test the parsing logic // by creating a Config directly and validating its structure let config = Config { algorithm: "CRC-32/ISCSI".to_string(), file: None, string: None, format: OutputFormat::Hex, benchmark: Some(BenchmarkConfig { size: Some(1024), duration: 5.0, }), }; assert!(config.benchmark.is_some()); let benchmark_config = config.benchmark.unwrap(); assert_eq!(benchmark_config.size, Some(1024)); assert_eq!(benchmark_config.duration, 5.0); } #[test] fn test_parse_args_normal_mode() { let config = Config { algorithm: "CRC-32/ISCSI".to_string(), file: Some("test.txt".to_string()), string: None, format: OutputFormat::Hex, benchmark: None, }; assert!(config.benchmark.is_none()); assert_eq!(config.file, Some("test.txt".to_string())); } #[test] fn test_data_source_selection_file() { // Test that file input creates File variant let config = Config { algorithm: "CRC-32/ISCSI".to_string(), file: Some("test.txt".to_string()), string: None, format: OutputFormat::Hex, benchmark: Some(BenchmarkConfig { size: None, duration: 1.0, }), }; // This would be tested in the run_benchmark function // We can verify the config structure is correct for file input assert!(config.file.is_some()); assert!(config.string.is_none()); } #[test] fn test_data_source_selection_string() { let config = Config { algorithm: "CRC-32/ISCSI".to_string(), file: None, string: Some("test data".to_string()), format: OutputFormat::Hex, benchmark: Some(BenchmarkConfig { size: None, duration: 1.0, }), }; assert!(config.file.is_none()); assert!(config.string.is_some()); } #[test] fn test_data_source_selection_generated() { let config = Config { algorithm: "CRC-32/ISCSI".to_string(), file: None, string: None, format: OutputFormat::Hex, benchmark: Some(BenchmarkConfig { size: Some(1024), duration: 1.0, }), }; // When neither file nor string is provided, generated data should be used assert!(config.file.is_none()); assert!(config.string.is_none()); assert_eq!(config.benchmark.as_ref().unwrap().size, Some(1024)); } #[test] fn test_throughput_calculation_accuracy() { // Test with known values to verify calculation accuracy let data_size = 1_048_576u64; // 1 MiB let iterations = 1000u64; let elapsed_seconds = 1.0; let result = BenchmarkResult::new(iterations, elapsed_seconds, "test".to_string(), data_size); // Expected throughput: (1 MiB * 1000) / 1 second = 1000 MiB/s = ~0.9537 GiB/s let expected_gibs = (data_size as f64 * iterations as f64) / elapsed_seconds / (1024.0 * 1024.0 * 1024.0); assert!((result.throughput_gibs - expected_gibs).abs() < 1e-10); } #[test] fn test_output_format_variants() { let hex_format = OutputFormat::Hex; let decimal_format = OutputFormat::Decimal; // Test that both variants can be created and are different assert!(matches!(hex_format, OutputFormat::Hex)); assert!(matches!(decimal_format, OutputFormat::Decimal)); } #[test] fn test_format_number_with_commas() { assert_eq!(format_number_with_commas(0), "0"); assert_eq!(format_number_with_commas(123), "123"); assert_eq!(format_number_with_commas(1234), "1,234"); assert_eq!(format_number_with_commas(12345), "12,345"); assert_eq!(format_number_with_commas(123456), "123,456"); assert_eq!(format_number_with_commas(1234567), "1,234,567"); assert_eq!(format_number_with_commas(12345678), "12,345,678"); assert_eq!(format_number_with_commas(123456789), "123,456,789"); assert_eq!(format_number_with_commas(1000000000), "1,000,000,000"); } } crc-fast-1.10.0/src/bin/generate-tables.rs000064400000000000000000000134271046102023000163630ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! Utility to generate pre-computed 16-lane lookup tables for all CRC algorithms. //! //! This generates Rust source code that can be used to create the `src/tables.rs` module. //! Run with: `cargo run --bin generate_tables > src/tables.rs` use crc_fast::arch::software::{generate_table_u16, generate_table_u32, generate_table_u64}; fn main() { println!("// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0."); println!(); println!("//! Pre-generated 16-lane lookup tables for CRC calculations."); println!("//!"); println!("//! This file is auto-generated by `cargo run --bin generate_tables`."); println!("//! Do not edit manually."); println!(); println!("#![allow(dead_code)]"); println!(); generate_crc16_tables(); generate_crc32_tables(); generate_crc64_tables(); } fn generate_crc16_tables() { println!("pub mod crc16 {{"); println!(" //! CRC-16 lookup tables"); println!(); // CRC-16 algorithms with their parameters: (name, poly, reflect) let algorithms: &[(&str, u16, bool)] = &[ ("ARC", 0x8005, true), ("CDMA2000", 0xc867, false), ("CMS", 0x8005, false), ("DDS_110", 0x8005, false), ("DECT_R", 0x0589, false), ("DECT_X", 0x0589, false), ("DNP", 0x3d65, true), ("EN_13757", 0x3d65, false), ("GENIBUS", 0x1021, false), ("GSM", 0x1021, false), ("IBM_3740", 0x1021, false), ("IBM_SDLC", 0x1021, true), ("ISO_IEC_14443_3_A", 0x1021, true), ("KERMIT", 0x1021, true), ("LJ1200", 0x6f63, false), ("M17", 0x5935, false), ("MAXIM_DOW", 0x8005, true), ("MCRF4XX", 0x1021, true), ("MODBUS", 0x8005, true), ("NRSC_5", 0x080b, true), ("OPENSAFETY_A", 0x5935, false), ("OPENSAFETY_B", 0x755b, false), ("PROFIBUS", 0x1dcf, false), ("RIELLO", 0x1021, true), ("SPI_FUJITSU", 0x1021, false), ("T10_DIF", 0x8bb7, false), ("TELEDISK", 0xa097, false), ("TMS37157", 0x1021, true), ("UMTS", 0x8005, false), ("USB", 0x8005, true), ("XMODEM", 0x1021, false), ]; for (name, poly, reflect) in algorithms { print_table_u16(name, 16, *poly, *reflect); } println!("}}"); println!(); } fn generate_crc32_tables() { println!("pub mod crc32 {{"); println!(" //! CRC-32 lookup tables"); println!(); // CRC-32 algorithms with their parameters: (name, poly, reflect) let algorithms: &[(&str, u32, bool)] = &[ ("AIXM", 0x814141ab, false), ("AUTOSAR", 0xf4acfb13, true), ("BASE91_D", 0xa833982b, true), ("BZIP2", 0x04c11db7, false), ("CD_ROM_EDC", 0x8001801b, true), ("CKSUM", 0x04c11db7, false), ("ISCSI", 0x1edc6f41, true), ("ISO_HDLC", 0x04c11db7, true), ("JAMCRC", 0x04c11db7, true), ("MEF", 0x741b8cd7, true), ("MPEG_2", 0x04c11db7, false), ("XFER", 0x000000af, false), ]; for (name, poly, reflect) in algorithms { print_table_u32(name, 32, *poly, *reflect); } println!("}}"); println!(); } fn generate_crc64_tables() { println!("pub mod crc64 {{"); println!(" //! CRC-64 lookup tables"); println!(); // CRC-64 algorithms with their parameters: (name, poly, reflect) let algorithms: &[(&str, u64, bool)] = &[ ("ECMA_182", 0x42f0e1eba9ea3693, false), ("GO_ISO", 0x000000000000001b, true), ("MS", 0x259c84cba6426349, true), ("NVME", 0xad93d23594c93659, true), ("REDIS", 0xad93d23594c935a9, true), ("WE", 0x42f0e1eba9ea3693, false), ("XZ", 0x42f0e1eba9ea3693, true), ]; for (name, poly, reflect) in algorithms { print_table_u64(name, 64, *poly, *reflect); } println!("}}"); } fn print_table_u16(name: &str, width: u8, poly: u16, reflect: bool) { let table = generate_table_u16(width, poly, reflect); println!(" pub static CRC16_{}_TABLE: [[u16; 256]; 16] = [", name); for lane in &table { println!(" ["); for chunk in lane.chunks(8) { print!(" "); for (i, val) in chunk.iter().enumerate() { print!("0x{:04x}", val); if i < chunk.len() - 1 { print!(", "); } } println!(","); } println!(" ],"); } println!(" ];"); println!(); } fn print_table_u32(name: &str, width: u8, poly: u32, reflect: bool) { let table = generate_table_u32(width, poly, reflect); println!(" pub static CRC32_{}_TABLE: [[u32; 256]; 16] = [", name); for lane in &table { println!(" ["); for chunk in lane.chunks(4) { print!(" "); for (i, val) in chunk.iter().enumerate() { print!("0x{:08x}", val); if i < chunk.len() - 1 { print!(", "); } } println!(","); } println!(" ],"); } println!(" ];"); println!(); } fn print_table_u64(name: &str, width: u8, poly: u64, reflect: bool) { let table = generate_table_u64(width, poly, reflect); println!(" pub static CRC64_{}_TABLE: [[u64; 256]; 16] = [", name); for lane in &table { println!(" ["); for chunk in lane.chunks(2) { print!(" "); for (i, val) in chunk.iter().enumerate() { print!("0x{:016x}", val); if i < chunk.len() - 1 { print!(", "); } } println!(","); } println!(" ],"); } println!(" ];"); println!(); } crc-fast-1.10.0/src/bin/get-custom-params.rs000064400000000000000000000156261046102023000166740ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This is a simple program to get custom CRC parameters from the command line. use std::env; use std::process::ExitCode; #[derive(Debug)] struct Config { width: Option, polynomial: Option, init: Option, reflected: Option, xorout: Option, check: Option, name: Option, } impl Config { fn new() -> Self { Config { width: None, polynomial: None, init: None, reflected: None, xorout: None, check: None, name: None, } } fn is_complete(&self) -> bool { self.width.is_some() && self.polynomial.is_some() && self.init.is_some() && self.reflected.is_some() && self.xorout.is_some() && self.check.is_some() && self.name.is_some() } } fn parse_hex_or_decimal(s: &str) -> Result { if s.starts_with("0x") || s.starts_with("0X") { u64::from_str_radix(&s[2..], 16).map_err(|_| format!("Invalid hexadecimal value: {s}",)) } else { s.parse::() .map_err(|_| format!("Invalid decimal value: {s}",)) } } fn parse_bool(s: &str) -> Result { match s.to_lowercase().as_str() { "true" | "1" | "yes" | "on" => Ok(true), "false" | "0" | "no" | "off" => Ok(false), _ => Err(format!("Invalid boolean value: {s} (use true/false)",)), } } fn parse_args(args: &[String]) -> Result { let mut config = Config::new(); let mut i = 1; // Skip program name while i < args.len() { match args[i].as_str() { "-n" => { if i + 1 >= args.len() { return Err("Missing value for -n (name)".to_string()); } config.name = Some(args[i + 1].clone()); i += 2; } "-w" => { if i + 1 >= args.len() { return Err("Missing value for -w (width)".to_string()); } config.width = Some( args[i + 1] .parse::() .map_err(|_| format!("Invalid width value: {}", args[i + 1]))?, ); i += 2; } "-p" => { if i + 1 >= args.len() { return Err("Missing value for -p (polynomial)".to_string()); } config.polynomial = Some(parse_hex_or_decimal(&args[i + 1])?); i += 2; } "-i" => { if i + 1 >= args.len() { return Err("Missing value for -i (init)".to_string()); } config.init = Some(parse_hex_or_decimal(&args[i + 1])?); i += 2; } "-r" => { if i + 1 >= args.len() { return Err("Missing value for -r (reflected)".to_string()); } config.reflected = Some(parse_bool(&args[i + 1])?); i += 2; } "-x" => { if i + 1 >= args.len() { return Err("Missing value for -x (xorout)".to_string()); } config.xorout = Some(parse_hex_or_decimal(&args[i + 1])?); i += 2; } "-c" => { if i + 1 >= args.len() { return Err("Missing value for -c (check)".to_string()); } config.check = Some(parse_hex_or_decimal(&args[i + 1])?); i += 2; } arg => { return Err(format!("Unknown argument: {arg}",)); } } } Ok(config) } fn print_usage() { println!("Usage: get-custom-params -n -w -p -i -r -x -c "); println!(); println!("Example: get-custom-params -n CRC-32/ISCSI -w 32 -p 0x1edc6f41 -i 0xFFFFFFFF -r true -x 0xFFFFFFFF -c 0xe3069283"); println!("Example: get-custom-params -n CRC-64/NVME -w 64 -p 0xad93d23594c93659 -i 0xffffffffffffffff -r true -x 0xffffffffffffffff -c 0xae8b14860a799888"); println!(); println!("Arguments:"); println!(" -n Name of the CRC algorithm (e.g., CRC-32/ISCSI)"); println!(" -w CRC width (number of bits)"); println!(" -p CRC polynomial (hex or decimal)"); println!(" -i Initial value (hex or decimal)"); println!(" -r Reflected input/output (true/false)"); println!(" -x XOR output value (hex or decimal)"); println!(" -c Check value (hex or decimal)"); } fn main() -> ExitCode { let args: Vec = env::args().collect(); if args.len() == 1 { print_usage(); return ExitCode::from(1); } let config = match parse_args(&args) { Ok(config) => config, Err(error) => { eprintln!("Error: {error}",); println!(); print_usage(); return ExitCode::from(1); } }; // Check if all required arguments are provided if !config.is_complete() { eprintln!("Error: All arguments are required"); println!(); print_usage(); return ExitCode::from(1); } let static_name: &'static str = Box::leak(config.name.unwrap().into_boxed_str()); let params = crc_fast::CrcParams::new( static_name, config.width.unwrap() as u8, config.polynomial.unwrap(), config.init.unwrap(), config.reflected.unwrap(), config.xorout.unwrap(), config.check.unwrap(), ); println!(); println!("// Generated CRC parameters for {static_name}",); println!( "pub const {}: CrcParams = CrcParams {{", static_name .to_uppercase() .replace("-", "_") .replace("/", "_") ); println!( " algorithm: CrcAlgorithm::{}Custom,", if config.width.unwrap() == 32 { "Crc32" } else { "Crc64" } ); println!(" name: \"{static_name}\",",); println!(" width: {},", config.width.unwrap()); println!(" poly: 0x{:x},", config.polynomial.unwrap()); println!(" init: 0x{:x},", config.init.unwrap()); println!(" refin: {},", config.reflected.unwrap()); println!(" refout: {},", config.reflected.unwrap()); println!(" xorout: 0x{:x},", config.xorout.unwrap()); println!(" check: 0x{:x},", config.check.unwrap()); println!(" keys: CrcKeysStorage::from_keys_fold_256(["); // Print the keys array for i in 0..23 { let key = params.get_key(i); println!(" 0x{key:016x},",); } println!(" ]),"); println!("}};"); println!(); ExitCode::from(0) } crc-fast-1.10.0/src/cache.rs000064400000000000000000001751271046102023000136220ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! CRC parameter caching system //! //! This module provides a thread-safe cache for CRC folding keys to avoid expensive //! regeneration when the same CRC parameters are used multiple times. The cache uses //! a read-write lock pattern optimized for the common case of cache hits. //! //! # Performance Characteristics //! //! - Cache hits: ~50-100x faster than key generation //! - Cache misses: ~100-200ns overhead compared to direct generation //! - Memory usage: ~200 bytes per unique parameter set //! - Thread safety: Multiple concurrent readers, exclusive writers //! //! # Usage //! //! The cache is used automatically by `CrcParams::new()` and requires no manual management. //! The cache is transparent to users and handles all memory management internally. use crate::generate; #[cfg(feature = "std")] use std::collections::HashMap; #[cfg(feature = "std")] use std::sync::{OnceLock, RwLock}; #[cfg(all(not(feature = "std"), feature = "cache"))] use hashbrown::HashMap; #[cfg(all(not(feature = "std"), feature = "cache"))] use spin::{Once, RwLock}; /// Global cache storage for CRC parameter keys /// /// Uses OnceLock for thread-safe lazy initialization and RwLock for concurrent access. /// The cache maps parameter combinations to their pre-computed folding keys. #[cfg(feature = "std")] static CACHE: OnceLock>> = OnceLock::new(); #[cfg(all(not(feature = "std"), feature = "cache"))] static CACHE: Once>> = Once::new(); /// Cache key for storing CRC parameters that affect key generation /// /// Only includes parameters that directly influence the mathematical computation /// of folding keys. Parameters like `init`, `xorout`, and `check` are excluded /// because they don't affect the key generation process. /// /// The cache key implements `Hash`, `Eq`, and `PartialEq` to enable efficient /// HashMap storage and lookup operations. #[cfg(any(feature = "std", feature = "cache"))] #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub(crate) struct CrcParamsCacheKey { /// CRC width in bits (32 or 64) pub width: u8, /// Polynomial value used for CRC calculation pub poly: u64, /// Whether the CRC uses reflected input/output processing pub reflected: bool, } #[cfg(any(feature = "std", feature = "cache"))] impl CrcParamsCacheKey { /// Create a new cache key from CRC parameters /// /// # Arguments /// /// * `width` - CRC width in bits (32 or 64) /// * `poly` - Polynomial value for the CRC algorithm /// * `reflected` - Whether input/output should be bit-reflected pub fn new(width: u8, poly: u64, reflected: bool) -> Self { Self { width, poly, reflected, } } } /// Initialize and return reference to the global cache /// /// Uses OnceLock to ensure thread-safe lazy initialization without requiring /// static initialization overhead. The cache is only created when first accessed. #[cfg(feature = "std")] fn get_cache() -> &'static RwLock> { CACHE.get_or_init(|| RwLock::new(HashMap::new())) } #[cfg(all(not(feature = "std"), feature = "cache"))] fn get_cache() -> &'static RwLock> { CACHE.call_once(|| RwLock::new(HashMap::new())) } /// Get cached keys or generate and cache them if not present /// /// This function implements a read-then-write pattern optimized for the common case /// of cache hits while minimizing lock contention: /// /// 1. **Read phase**: Attempts read lock to check for cached keys (allows concurrent reads) /// 2. **Generation phase**: If cache miss, generates keys outside any lock to minimize hold time /// 3. **Write phase**: Acquires write lock only to store the generated keys /// /// The key generation happens outside the write lock because it's computationally expensive /// (~1000x slower than cache lookup) and we want to minimize the time other threads are blocked. /// /// All cache operations use best-effort error handling - lock poisoning or allocation failures /// don't cause panics, instead falling back to direct key generation to maintain functionality. /// /// # Arguments /// /// * `width` - CRC width in bits (32 or 64) /// * `poly` - Polynomial value for the CRC algorithm /// * `reflected` - Whether input/output should be bit-reflected /// /// # Returns /// /// Array of 23 pre-computed folding keys for SIMD CRC calculation pub fn get_or_generate_keys(width: u8, poly: u64, reflected: bool) -> [u64; 23] { #[cfg(feature = "std")] { let cache_key = CrcParamsCacheKey::new(width, poly, reflected); // Try cache read first - multiple threads can read simultaneously // If lock is poisoned or read fails, continue to key generation if let Ok(cache) = get_cache().read() { if let Some(keys) = cache.get(&cache_key) { return *keys; } } // Generate keys outside of write lock to minimize lock hold time let keys = generate::keys(width, poly, reflected); // Try to cache the result (best effort - if this fails, we still return valid keys) // Lock poisoning or write failure doesn't affect functionality let _ = get_cache() .write() .map(|mut cache| cache.insert(cache_key, keys)); keys } #[cfg(all(not(feature = "std"), feature = "cache"))] { let cache_key = CrcParamsCacheKey::new(width, poly, reflected); // Try cache read first - multiple threads can read simultaneously // spin::RwLock returns guards directly (no Result wrapper) { let cache = get_cache().read(); if let Some(keys) = cache.get(&cache_key) { return *keys; } } // Drop read lock before generating keys // Generate keys outside of write lock to minimize lock hold time let keys = generate::keys(width, poly, reflected); // Cache the result - spin::RwLock doesn't use Result wrapper { let mut cache = get_cache().write(); cache.insert(cache_key, keys); } keys } #[cfg(not(any(feature = "std", feature = "cache")))] { generate::keys(width, poly, reflected) } } /// Clear all cached CRC parameter keys /// /// This function is primarily intended for testing scenarios where you need to reset /// the cache state to ensure test isolation. /// /// Uses best-effort error handling - lock poisoning or other failures don't cause /// panics, ensuring this function never disrupts program execution. If the cache /// cannot be cleared, the function silently continues without error. /// /// # Thread Safety /// /// This function is thread-safe and can be called concurrently with other cache operations. /// However, clearing the cache while other threads are actively using it may temporarily /// reduce performance as those threads will need to regenerate keys on their next access. #[cfg(test)] pub(crate) fn clear_cache() { #[cfg(feature = "std")] { // Best-effort cache clear - if lock is poisoned or unavailable, silently continue // This ensures the function never panics or blocks program execution let _ = get_cache().write().map(|mut cache| cache.clear()); } #[cfg(all(not(feature = "std"), feature = "cache"))] { // spin::RwLock doesn't use Result wrapper let mut cache = get_cache().write(); cache.clear(); } } #[cfg(test)] mod tests { use super::*; use std::collections::HashSet; #[test] fn test_cache_key_creation() { let key1 = CrcParamsCacheKey::new(32, 0x04C11DB7, true); let key2 = CrcParamsCacheKey::new(64, 0x42F0E1EBA9EA3693, false); assert_eq!(key1.width, 32); assert_eq!(key1.poly, 0x04C11DB7); assert!(key1.reflected); assert_eq!(key2.width, 64); assert_eq!(key2.poly, 0x42F0E1EBA9EA3693); assert!(!key2.reflected); } #[test] fn test_cache_key_equality() { let key1 = CrcParamsCacheKey::new(32, 0x04C11DB7, true); let key2 = CrcParamsCacheKey::new(32, 0x04C11DB7, true); let key3 = CrcParamsCacheKey::new(32, 0x04C11DB7, false); // Different reflected let key4 = CrcParamsCacheKey::new(64, 0x04C11DB7, true); // Different width let key5 = CrcParamsCacheKey::new(32, 0x1EDC6F41, true); // Different poly // Test equality assert_eq!(key1, key2); assert_eq!(key1.clone(), key2.clone()); // Test inequality assert_ne!(key1, key3); assert_ne!(key1, key4); assert_ne!(key1, key5); assert_ne!(key3, key4); assert_ne!(key3, key5); assert_ne!(key4, key5); } #[test] fn test_cache_key_hashing() { let key1 = CrcParamsCacheKey::new(32, 0x04C11DB7, true); let key2 = CrcParamsCacheKey::new(32, 0x04C11DB7, true); let key3 = CrcParamsCacheKey::new(32, 0x04C11DB7, false); // Create a HashSet to test that keys can be used as hash keys let mut set = HashSet::new(); set.insert(key1.clone()); set.insert(key2.clone()); set.insert(key3.clone()); // Should only have 2 unique keys (key1 and key2 are equal) assert_eq!(set.len(), 2); // Test that equal keys can be found in the set assert!(set.contains(&key1)); assert!(set.contains(&key2)); assert!(set.contains(&key3)); // Test that a new equivalent key can be found let key4 = CrcParamsCacheKey::new(32, 0x04C11DB7, true); assert!(set.contains(&key4)); } #[test] fn test_cache_hit_scenarios() { clear_cache(); // First call should be a cache miss and generate keys let keys1 = get_or_generate_keys(32, 0x04C11DB7, true); // Second call with same parameters should be a cache hit let keys2 = get_or_generate_keys(32, 0x04C11DB7, true); // Keys should be identical (same array contents) assert_eq!(keys1, keys2); // Test multiple cache hits let keys3 = get_or_generate_keys(32, 0x04C11DB7, true); let keys4 = get_or_generate_keys(32, 0x04C11DB7, true); assert_eq!(keys1, keys3); assert_eq!(keys1, keys4); assert_eq!(keys2, keys3); assert_eq!(keys2, keys4); } #[test] fn test_cache_miss_scenarios() { clear_cache(); // Different width - should be cache miss let keys_32 = get_or_generate_keys(32, 0x04C11DB7, true); let keys_64 = get_or_generate_keys(64, 0x04C11DB7, true); assert_ne!(keys_32, keys_64); // Different poly - should be cache miss let keys_poly1 = get_or_generate_keys(32, 0x04C11DB7, true); let keys_poly2 = get_or_generate_keys(32, 0x1EDC6F41, true); assert_ne!(keys_poly1, keys_poly2); // Different reflected - should be cache miss let keys_refl_true = get_or_generate_keys(32, 0x04C11DB7, true); let keys_refl_false = get_or_generate_keys(32, 0x04C11DB7, false); assert_ne!(keys_refl_true, keys_refl_false); // Verify each parameter set is cached independently let keys_32_again = get_or_generate_keys(32, 0x04C11DB7, true); let keys_64_again = get_or_generate_keys(64, 0x04C11DB7, true); let keys_poly1_again = get_or_generate_keys(32, 0x04C11DB7, true); let keys_poly2_again = get_or_generate_keys(32, 0x1EDC6F41, true); let keys_refl_true_again = get_or_generate_keys(32, 0x04C11DB7, true); let keys_refl_false_again = get_or_generate_keys(32, 0x04C11DB7, false); assert_eq!(keys_32, keys_32_again); assert_eq!(keys_64, keys_64_again); assert_eq!(keys_poly1, keys_poly1_again); assert_eq!(keys_poly2, keys_poly2_again); assert_eq!(keys_refl_true, keys_refl_true_again); assert_eq!(keys_refl_false, keys_refl_false_again); } #[test] fn test_cached_keys_identical_to_generated_keys() { clear_cache(); // Test CRC32 parameters let width = 32; let poly = 0x04C11DB7; let reflected = true; // Generate keys directly (bypassing cache) let direct_keys = generate::keys(width, poly, reflected); // Get keys through cache (first call will be cache miss, generates and caches) let cached_keys_first = get_or_generate_keys(width, poly, reflected); // Get keys through cache again (should be cache hit) let cached_keys_second = get_or_generate_keys(width, poly, reflected); // All should be identical assert_eq!(direct_keys, cached_keys_first); assert_eq!(direct_keys, cached_keys_second); assert_eq!(cached_keys_first, cached_keys_second); // Test CRC64 parameters let width64 = 64; let poly64 = 0x42F0E1EBA9EA3693; let reflected64 = false; let direct_keys64 = generate::keys(width64, poly64, reflected64); let cached_keys64_first = get_or_generate_keys(width64, poly64, reflected64); let cached_keys64_second = get_or_generate_keys(width64, poly64, reflected64); assert_eq!(direct_keys64, cached_keys64_first); assert_eq!(direct_keys64, cached_keys64_second); assert_eq!(cached_keys64_first, cached_keys64_second); // Verify different parameters produce different keys assert_ne!(direct_keys, direct_keys64); assert_ne!(cached_keys_first, cached_keys64_first); } #[test] fn test_multiple_parameter_combinations() { clear_cache(); // Test various common CRC parameter combinations let test_cases = [ (32, 0x04C11DB7, true), // CRC32 (32, 0x04C11DB7, false), // CRC32 non-reflected (32, 0x1EDC6F41, true), // CRC32C (64, 0x42F0E1EBA9EA3693, true), // CRC64 ISO (64, 0x42F0E1EBA9EA3693, false), // CRC64 ISO non-reflected (64, 0xD800000000000000, true), // CRC64 ECMA ]; let mut all_keys = Vec::new(); // Generate keys for all test cases for &(width, poly, reflected) in &test_cases { let keys = get_or_generate_keys(width, poly, reflected); all_keys.push(keys); } // Verify all keys are different (no collisions) for i in 0..all_keys.len() { for j in (i + 1)..all_keys.len() { assert_ne!( all_keys[i], all_keys[j], "Keys should be different for test cases {} and {}", i, j ); } } // Verify cache hits return same keys for (i, &(width, poly, reflected)) in test_cases.iter().enumerate() { let cached_keys = get_or_generate_keys(width, poly, reflected); assert_eq!( all_keys[i], cached_keys, "Cache hit should return same keys for test case {}", i ); } } #[test] fn test_cache_management_utilities() { // Clear cache to start with clean state clear_cache(); // Generate and cache some keys let keys1 = get_or_generate_keys(32, 0x04C11DB7, true); let keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); // Verify cache hits return same keys let cached_keys1 = get_or_generate_keys(32, 0x04C11DB7, true); let cached_keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); assert_eq!(keys1, cached_keys1); assert_eq!(keys2, cached_keys2); // Clear cache clear_cache(); // Verify cache was cleared by checking that new calls still work // (we can't directly verify cache is empty, but we can verify functionality) let new_keys1 = get_or_generate_keys(32, 0x04C11DB7, true); assert_eq!(keys1, new_keys1); // Should be same values, but freshly generated } #[test] fn test_cache_error_handling() { // Test that cache operations don't panic even if called multiple times clear_cache(); clear_cache(); // Should not panic on empty cache // Test that get_or_generate_keys works even after multiple clears let keys = get_or_generate_keys(32, 0x04C11DB7, true); clear_cache(); let keys2 = get_or_generate_keys(32, 0x04C11DB7, true); // Keys should be identical (same parameters produce same keys) assert_eq!(keys, keys2); } #[test] fn test_cache_key_debug_and_clone() { let key = CrcParamsCacheKey::new(32, 0x04C11DB7, true); // Test Debug trait let debug_str = format!("{:?}", key); assert!(debug_str.contains("CrcParamsCacheKey")); assert!(debug_str.contains("32")); assert!(debug_str.contains("0x4c11db7") || debug_str.contains("79764919")); assert!(debug_str.contains("true")); // Test Clone trait let cloned_key = key.clone(); assert_eq!(key, cloned_key); assert_eq!(key.width, cloned_key.width); assert_eq!(key.poly, cloned_key.poly); assert_eq!(key.reflected, cloned_key.reflected); } // Thread safety tests #[test] fn test_concurrent_cache_reads() { use std::sync::{Arc, Barrier}; use std::thread; clear_cache(); // Pre-populate cache with a known value let expected_keys = get_or_generate_keys(32, 0x04C11DB7, true); let num_threads = 8; let barrier = Arc::new(Barrier::new(num_threads)); let mut handles = Vec::new(); // Spawn multiple threads that all read the same cached value simultaneously for i in 0..num_threads { let barrier_clone = Arc::clone(&barrier); let handle = thread::spawn(move || { // Wait for all threads to be ready barrier_clone.wait(); // All threads read from cache simultaneously let keys = get_or_generate_keys(32, 0x04C11DB7, true); (i, keys) }); handles.push(handle); } // Collect results from all threads let mut results = Vec::new(); for handle in handles { results.push(handle.join().expect("Thread should not panic")); } // Verify all threads got the same cached keys assert_eq!(results.len(), num_threads); for (thread_id, keys) in results { assert_eq!( keys, expected_keys, "Thread {} should get same cached keys", thread_id ); } } #[test] #[allow(clippy::needless_range_loop)] // Intentionally testing concurrent indexed access fn test_concurrent_cache_writes() { use std::sync::{Arc, Barrier}; use std::thread; clear_cache(); let num_threads = 6; let barrier = Arc::new(Barrier::new(num_threads)); let mut handles = Vec::new(); // Test parameters for different cache entries let test_params = [ (32, 0x04C11DB7, true), (32, 0x04C11DB7, false), (32, 0x1EDC6F41, true), (64, 0x42F0E1EBA9EA3693, true), (64, 0x42F0E1EBA9EA3693, false), (64, 0xD800000000000000, true), ]; // Spawn threads that write different cache entries simultaneously for i in 0..num_threads { let barrier_clone = Arc::clone(&barrier); let (width, poly, reflected) = test_params[i]; let handle = thread::spawn(move || { // Wait for all threads to be ready barrier_clone.wait(); // Each thread generates and caches different parameters let keys = get_or_generate_keys(width, poly, reflected); (i, width, poly, reflected, keys) }); handles.push(handle); } // Collect results from all threads let mut results = Vec::new(); for handle in handles { results.push(handle.join().expect("Thread should not panic")); } // Verify all threads completed successfully and got correct keys assert_eq!(results.len(), num_threads); // Verify each thread's keys match what we'd expect from direct generation for (thread_id, width, poly, reflected, keys) in results { let expected_keys = generate::keys(width, poly, reflected); assert_eq!( keys, expected_keys, "Thread {} should generate correct keys for params ({}, {:#x}, {})", thread_id, width, poly, reflected ); // Verify the keys are now cached by reading them again let cached_keys = get_or_generate_keys(width, poly, reflected); assert_eq!( keys, cached_keys, "Thread {} keys should be cached", thread_id ); } } #[test] fn test_read_write_contention() { use std::sync::{Arc, Barrier}; use std::thread; use std::time::Duration; clear_cache(); // Pre-populate cache with some values let _keys1 = get_or_generate_keys(32, 0x04C11DB7, true); let _keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); let num_readers = 6; let num_writers = 3; let total_threads = num_readers + num_writers; let barrier = Arc::new(Barrier::new(total_threads)); let mut handles = Vec::new(); // Spawn reader threads that continuously read cached values for i in 0..num_readers { let barrier_clone = Arc::clone(&barrier); let handle = thread::spawn(move || { barrier_clone.wait(); let mut read_count = 0; let start = std::time::Instant::now(); // Read for a short duration while start.elapsed() < Duration::from_millis(50) { let keys1 = get_or_generate_keys(32, 0x04C11DB7, true); let keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); // Verify we get consistent results assert_eq!(keys1.len(), 23); assert_eq!(keys2.len(), 23); read_count += 1; } (format!("reader_{}", i), read_count) }); handles.push(handle); } // Spawn writer threads that add new cache entries for i in 0..num_writers { let barrier_clone = Arc::clone(&barrier); let handle = thread::spawn(move || { barrier_clone.wait(); let mut write_count = 0; let start = std::time::Instant::now(); // Write new entries for a short duration while start.elapsed() < Duration::from_millis(50) { // Use different parameters to create new cache entries let poly = 0x1EDC6F41 + (i as u64 * 0x1000) + (write_count as u64); let keys = get_or_generate_keys(32, poly, true); assert_eq!(keys.len(), 23); write_count += 1; } (format!("writer_{}", i), write_count) }); handles.push(handle); } // Wait for all threads to complete let mut results = Vec::new(); for handle in handles { results.push(handle.join().expect("Thread should not panic")); } // Verify all threads completed successfully assert_eq!(results.len(), total_threads); // Verify readers and writers both made progress let reader_results: Vec<_> = results .iter() .filter(|(name, _)| name.starts_with("reader_")) .collect(); let writer_results: Vec<_> = results .iter() .filter(|(name, _)| name.starts_with("writer_")) .collect(); assert_eq!(reader_results.len(), num_readers); assert_eq!(writer_results.len(), num_writers); // All threads should have made some progress for (name, count) in &results { assert!(*count > 0, "Thread {} should have made progress", name); } } #[test] fn test_cache_consistency_under_concurrent_access() { use std::sync::{Arc, Barrier}; use std::thread; clear_cache(); let num_threads = 10; let barrier = Arc::new(Barrier::new(num_threads)); let mut handles = Vec::new(); // All threads will try to get the same cache entry simultaneously // This tests the race condition where multiple threads might try to // generate and cache the same keys at the same time for i in 0..num_threads { let barrier_clone = Arc::clone(&barrier); let handle = thread::spawn(move || { barrier_clone.wait(); // All threads request the same parameters simultaneously let keys = get_or_generate_keys(32, 0x04C11DB7, true); (i, keys) }); handles.push(handle); } // Collect results from all threads let mut results = Vec::new(); for handle in handles { results.push(handle.join().expect("Thread should not panic")); } // Verify all threads got identical keys assert_eq!(results.len(), num_threads); let first_keys = results[0].1; for (thread_id, keys) in results { assert_eq!( keys, first_keys, "Thread {} should get identical keys to other threads", thread_id ); } // Verify the keys are correct by comparing with direct generation let expected_keys = generate::keys(32, 0x04C11DB7, true); assert_eq!( first_keys, expected_keys, "Cached keys should match directly generated keys" ); // Verify subsequent access still returns the same keys let final_keys = get_or_generate_keys(32, 0x04C11DB7, true); assert_eq!( final_keys, first_keys, "Final cache access should return same keys" ); } #[test] fn test_mixed_concurrent_operations() { use std::sync::{Arc, Barrier}; use std::thread; use std::time::Duration; clear_cache(); let num_threads = 8; let barrier = Arc::new(Barrier::new(num_threads)); let mut handles = Vec::new(); // Mix of operations: some threads do cache hits, some do cache misses, // some clear the cache, all happening concurrently for i in 0..num_threads { let barrier_clone = Arc::clone(&barrier); let handle = thread::spawn(move || { barrier_clone.wait(); let mut operations = 0; let start = std::time::Instant::now(); while start.elapsed() < Duration::from_millis(30) { match i % 4 { 0 => { // Cache hit operations - same parameters let _keys = get_or_generate_keys(32, 0x04C11DB7, true); } 1 => { // Cache miss operations - different parameters each time let poly = 0x1EDC6F41 + (operations as u64); let _keys = get_or_generate_keys(32, poly, true); } 2 => { // Mixed read operations let _keys1 = get_or_generate_keys(32, 0x04C11DB7, true); let _keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); } 3 => { // Occasional cache clear (but not too often to avoid disrupting other tests) if operations % 10 == 0 { clear_cache(); } let _keys = get_or_generate_keys(32, 0x04C11DB7, true); } _ => unreachable!(), } operations += 1; } (i, operations) }); handles.push(handle); } // Wait for all threads to complete let mut results = Vec::new(); for handle in handles { results.push(handle.join().expect("Thread should not panic")); } // Verify all threads completed successfully assert_eq!(results.len(), num_threads); for (thread_id, operations) in results { assert!( operations > 0, "Thread {} should have completed some operations", thread_id ); } // Verify cache is still functional after all the concurrent operations let final_keys = get_or_generate_keys(32, 0x04C11DB7, true); let expected_keys = generate::keys(32, 0x04C11DB7, true); assert_eq!( final_keys, expected_keys, "Cache should still work correctly after concurrent operations" ); } // Error handling tests #[test] fn test_cache_lock_poisoning_recovery() { use std::panic; use std::sync::{Arc, Mutex}; use std::thread; clear_cache(); // Pre-populate cache with known values let expected_keys = get_or_generate_keys(32, 0x04C11DB7, true); // Create a scenario that could potentially poison the lock // We'll use a separate test to avoid actually poisoning our cache let poisoned_flag = Arc::new(Mutex::new(false)); let poisoned_flag_clone = Arc::clone(&poisoned_flag); // Spawn a thread that panics while holding a lock (simulated) let handle = thread::spawn(move || { // Simulate a panic scenario - we don't actually poison the cache lock // because that would break other tests, but we test the recovery path let _guard = poisoned_flag_clone.lock().unwrap(); panic!("Simulated panic"); }); // Wait for the thread to panic let result = handle.join(); assert!(result.is_err(), "Thread should have panicked"); // Verify that our cache still works despite the simulated error scenario let keys_after_panic = get_or_generate_keys(32, 0x04C11DB7, true); assert_eq!( keys_after_panic, expected_keys, "Cache should still work after simulated panic scenario" ); // Test that new cache entries can still be created let new_keys = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); assert_eq!(new_keys.len(), 23, "New cache entries should still work"); // Verify the new keys are cached let cached_new_keys = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); assert_eq!(new_keys, cached_new_keys, "New keys should be cached"); } #[test] fn test_cache_fallback_to_direct_generation() { clear_cache(); // Test that even if cache operations fail, we still get valid keys // This tests the fallback mechanism in get_or_generate_keys // Generate expected keys directly let expected_keys_32 = generate::keys(32, 0x04C11DB7, true); let expected_keys_64 = generate::keys(64, 0x42F0E1EBA9EA3693, false); // Get keys through cache (should work normally) let cached_keys_32 = get_or_generate_keys(32, 0x04C11DB7, true); let cached_keys_64 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); // Verify keys are correct regardless of cache state assert_eq!( cached_keys_32, expected_keys_32, "CRC32 keys should be correct even with cache issues" ); assert_eq!( cached_keys_64, expected_keys_64, "CRC64 keys should be correct even with cache issues" ); // Test multiple calls to ensure consistency for _ in 0..5 { let keys_32 = get_or_generate_keys(32, 0x04C11DB7, true); let keys_64 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); assert_eq!( keys_32, expected_keys_32, "Repeated calls should return consistent CRC32 keys" ); assert_eq!( keys_64, expected_keys_64, "Repeated calls should return consistent CRC64 keys" ); } } #[test] fn test_cache_operations_under_memory_pressure() { clear_cache(); // Simulate memory pressure by creating many cache entries // This tests that cache operations remain stable under load let mut test_keys = Vec::new(); let num_entries = 100; // Create many different cache entries for i in 0..num_entries { let poly = 0x04C11DB7 + (i as u64); let reflected = i % 2 == 0; let width = if i % 3 == 0 { 64 } else { 32 }; let keys = get_or_generate_keys(width, poly, reflected); test_keys.push((width, poly, reflected, keys)); } // Verify all entries are correctly cached and retrievable for (i, &(width, poly, reflected, ref expected_keys)) in test_keys.iter().enumerate() { let cached_keys = get_or_generate_keys(width, poly, reflected); assert_eq!( cached_keys, *expected_keys, "Entry {} should be correctly cached", i ); } // Test that cache operations still work after creating many entries let new_keys = get_or_generate_keys(32, 0x1EDC6F41, true); assert_eq!( new_keys.len(), 23, "New entries should still work under memory pressure" ); // Verify the new entry is cached let cached_new_keys = get_or_generate_keys(32, 0x1EDC6F41, true); assert_eq!(new_keys, cached_new_keys, "New entry should be cached"); // Test cache clearing still works clear_cache(); // Verify cache was cleared by testing that operations still work let post_clear_keys = get_or_generate_keys(32, 0x04C11DB7, true); assert_eq!( post_clear_keys.len(), 23, "Cache should work after clearing under memory pressure" ); } #[test] fn test_cache_error_recovery_patterns() { clear_cache(); // Test various error recovery patterns to ensure robustness // Pattern 1: Rapid cache operations for i in 0..50 { let poly = 0x04C11DB7 + (i as u64 % 10); // Create some duplicates let keys = get_or_generate_keys(32, poly, true); assert_eq!(keys.len(), 23, "Rapid operation {} should succeed", i); } // Pattern 2: Interleaved cache hits and misses let base_keys = get_or_generate_keys(32, 0x04C11DB7, true); for i in 0..20 { // Cache hit let hit_keys = get_or_generate_keys(32, 0x04C11DB7, true); assert_eq!(hit_keys, base_keys, "Cache hit {} should be consistent", i); // Cache miss let miss_keys = get_or_generate_keys(32, 0x1EDC6F41 + (i as u64), false); assert_eq!(miss_keys.len(), 23, "Cache miss {} should succeed", i); } // Pattern 3: Mixed operations with clearing for i in 0..10 { let keys1 = get_or_generate_keys(32, 0x04C11DB7, true); let keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); if i % 3 == 0 { clear_cache(); } // Operations should still work after clearing let keys3 = get_or_generate_keys(32, 0x04C11DB7, true); let keys4 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); // Keys should be consistent (same parameters = same keys) assert_eq!(keys1, keys3, "Keys should be consistent across clears"); assert_eq!(keys2, keys4, "Keys should be consistent across clears"); } } #[test] fn test_cache_concurrent_error_scenarios() { use std::sync::{Arc, Barrier}; use std::thread; use std::time::Duration; clear_cache(); let num_threads = 8; let barrier = Arc::new(Barrier::new(num_threads)); let mut handles = Vec::new(); // Create concurrent scenarios that could potentially cause errors for i in 0..num_threads { let barrier_clone = Arc::clone(&barrier); let handle = thread::spawn(move || { barrier_clone.wait(); let mut operations = 0; let errors = 0; let start = std::time::Instant::now(); // Run operations for a short time with various patterns while start.elapsed() < Duration::from_millis(100) { match operations % 5 { 0 => { // Normal cache operations let _keys = get_or_generate_keys(32, 0x04C11DB7, true); } 1 => { // Rapid different parameters let poly = 0x1EDC6F41 + (operations as u64); let _keys = get_or_generate_keys(32, poly, true); } 2 => { // Cache clearing (potential contention point) clear_cache(); } 3 => { // Mixed width operations let _keys32 = get_or_generate_keys(32, 0x04C11DB7, true); let _keys64 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false); } 4 => { // Rapid same-parameter calls (cache hits) for _ in 0..5 { let _keys = get_or_generate_keys(32, 0x04C11DB7, true); } } _ => unreachable!(), } operations += 1; } (i, operations, errors) }); handles.push(handle); } // Collect results let mut results = Vec::new(); for handle in handles { match handle.join() { Ok(result) => results.push(result), Err(_) => panic!("Thread should not panic during error scenarios"), } } // Verify all threads completed successfully assert_eq!(results.len(), num_threads); for (thread_id, operations, errors) in results { assert!( operations > 0, "Thread {} should have completed operations", thread_id ); // In our implementation, errors should be handled gracefully without propagating assert_eq!( errors, 0, "Thread {} should not have unhandled errors", thread_id ); } // Verify cache is still functional after all concurrent error scenarios let final_keys = get_or_generate_keys(32, 0x04C11DB7, true); let expected_keys = generate::keys(32, 0x04C11DB7, true); assert_eq!( final_keys, expected_keys, "Cache should still work correctly after concurrent error scenarios" ); } /// Non-stress version of the stress test to allow Miri to evaluate without timing out. #[test] fn test_cache_memory_allocation_non_stress() { cache_memory_allocation_stress(2); } /// Skipping for Miri runs due to time constraints, underlying code already covered by other /// tests. #[test] #[cfg_attr(miri, ignore)] fn test_cache_memory_allocation_stress() { cache_memory_allocation_stress(1000); } fn cache_memory_allocation_stress(count: i32) { clear_cache(); // Test cache behavior under memory allocation stress // Create a large number of unique cache entries to stress memory allocation let mut created_entries = Vec::new(); let stress_count = count; // Create many unique cache entries for i in 0..stress_count { let width = if i % 2 == 0 { 32 } else { 64 }; let poly = 0x04C11DB7 + (i as u64); let reflected = i % 3 == 0; let keys = get_or_generate_keys(width, poly, reflected); created_entries.push((width, poly, reflected, keys)); // Verify each entry is valid assert_eq!(keys.len(), 23, "Entry {} should have valid keys", i); } // Verify all entries are still accessible (testing cache integrity) for (i, &(width, poly, reflected, ref expected_keys)) in created_entries.iter().enumerate() { let retrieved_keys = get_or_generate_keys(width, poly, reflected); assert_eq!( retrieved_keys, *expected_keys, "Entry {} should be retrievable after stress test", i ); } // Test that new entries can still be created let new_keys = get_or_generate_keys(32, 0xFFFFFFFF, true); assert_eq!( new_keys.len(), 23, "New entries should work after memory stress" ); // Test cache clearing works under memory pressure clear_cache(); // Verify cache operations still work after clearing let post_stress_keys = get_or_generate_keys(32, 0x04C11DB7, true); assert_eq!( post_stress_keys.len(), 23, "Cache should work after memory stress and clearing" ); } // Integration tests for CrcParams compatibility #[test] fn test_crc_params_new_behavior_unchanged() { use crate::CrcParams; clear_cache(); // Test that CrcParams::new() creates identical instances regardless of caching let params1 = CrcParams::new( "TEST_CRC32", 32, 0x04C11DB7, 0xFFFFFFFF, true, 0xFFFFFFFF, 0xCBF43926, ); let params2 = CrcParams::new( "TEST_CRC32", 32, 0x04C11DB7, 0xFFFFFFFF, true, 0xFFFFFFFF, 0xCBF43926, ); // All fields should be identical assert_eq!(params1.name, params2.name); assert_eq!(params1.width, params2.width); assert_eq!(params1.poly, params2.poly); assert_eq!(params1.init, params2.init); assert_eq!(params1.refin, params2.refin); assert_eq!(params1.refout, params2.refout); assert_eq!(params1.xorout, params2.xorout); assert_eq!(params1.check, params2.check); assert_eq!(params1.keys, params2.keys); // Test CRC64 parameters as well let params64_1 = CrcParams::new( "TEST_CRC64", 64, 0x42F0E1EBA9EA3693, 0xFFFFFFFFFFFFFFFF, false, 0x0, 0x6C40DF5F0B497347, ); let params64_2 = CrcParams::new( "TEST_CRC64", 64, 0x42F0E1EBA9EA3693, 0xFFFFFFFFFFFFFFFF, false, 0x0, 0x6C40DF5F0B497347, ); assert_eq!(params64_1.name, params64_2.name); assert_eq!(params64_1.width, params64_2.width); assert_eq!(params64_1.poly, params64_2.poly); assert_eq!(params64_1.init, params64_2.init); assert_eq!(params64_1.refin, params64_2.refin); assert_eq!(params64_1.refout, params64_2.refout); assert_eq!(params64_1.xorout, params64_2.xorout); assert_eq!(params64_1.check, params64_2.check); assert_eq!(params64_1.keys, params64_2.keys); } #[test] fn test_existing_crc_parameter_combinations() { use crate::test::consts::TEST_ALL_CONFIGS; clear_cache(); // Test all existing CRC parameter combinations work correctly with caching for config in TEST_ALL_CONFIGS { let params = crate::CrcParams::new( config.get_name(), config.get_width(), config.get_poly(), config.get_init(), config.get_refin(), config.get_xorout(), config.get_check(), ); // Verify the parameters are set correctly assert_eq!(params.name, config.get_name()); assert_eq!(params.width, config.get_width()); assert_eq!(params.poly, config.get_poly()); assert_eq!(params.init, config.get_init()); assert_eq!(params.refin, config.get_refin()); assert_eq!(params.refout, config.get_refin()); assert_eq!(params.xorout, config.get_xorout()); assert_eq!(params.check, config.get_check()); // Verify keys are correct by comparing with expected keys let expected_keys = config.get_keys(); assert_eq!( params.keys, expected_keys, "Keys mismatch for {}: expected {:?}, got {:?}", config.get_name(), expected_keys, params.keys ); } } #[test] fn test_cached_vs_uncached_results_identical() { clear_cache(); // Test parameters that affect key generation let test_cases = [ (32, 0x04C11DB7, true), // CRC32 reflected (32, 0x04C11DB7, false), // CRC32 non-reflected (32, 0x1EDC6F41, true), // CRC32C (64, 0x42F0E1EBA9EA3693, true), // CRC64 ISO reflected (64, 0x42F0E1EBA9EA3693, false), // CRC64 ISO non-reflected (64, 0xD800000000000000, true), // CRC64 ECMA ]; for &(width, poly, reflected) in &test_cases { // Generate keys directly (uncached) let uncached_keys = generate::keys(width, poly, reflected); // Clear cache to ensure first call is cache miss clear_cache(); // Create CrcParams instance (first call - cache miss) let params1 = crate::CrcParams::new("TEST", width, poly, 0xFFFFFFFFFFFFFFFF, reflected, 0x0, 0x0); // Create another CrcParams instance with same parameters (cache hit) let params2 = crate::CrcParams::new("TEST", width, poly, 0xFFFFFFFFFFFFFFFF, reflected, 0x0, 0x0); // All should be identical assert_eq!( uncached_keys, params1.keys, "Uncached keys should match CrcParams keys for width={}, poly={:#x}, reflected={}", width, poly, reflected ); assert_eq!( params1.keys, params2.keys, "Cached and uncached CrcParams should have identical keys for width={}, poly={:#x}, reflected={}", width, poly, reflected ); assert_eq!( uncached_keys, params2.keys, "All key generation methods should produce identical results for width={}, poly={:#x}, reflected={}", width, poly, reflected ); } } #[test] fn test_multiple_crc_params_instances_use_cached_keys() { clear_cache(); // Create multiple CrcParams instances with the same parameters let width = 32; let poly = 0x04C11DB7; let reflected = true; let init = 0xFFFFFFFF; let xorout = 0xFFFFFFFF; let check = 0xCBF43926; // First instance - should generate and cache keys let params1 = crate::CrcParams::new("TEST1", width, poly, init, reflected, xorout, check); // Subsequent instances - should use cached keys let params2 = crate::CrcParams::new("TEST2", width, poly, init, reflected, xorout, check); let params3 = crate::CrcParams::new("TEST3", width, poly, init, reflected, xorout, check); let params4 = crate::CrcParams::new("TEST4", width, poly, init, reflected, xorout, check); // All should have identical keys (proving cache is working) assert_eq!( params1.keys, params2.keys, "Instance 1 and 2 should have identical keys" ); assert_eq!( params1.keys, params3.keys, "Instance 1 and 3 should have identical keys" ); assert_eq!( params1.keys, params4.keys, "Instance 1 and 4 should have identical keys" ); assert_eq!( params2.keys, params3.keys, "Instance 2 and 3 should have identical keys" ); assert_eq!( params2.keys, params4.keys, "Instance 2 and 4 should have identical keys" ); assert_eq!( params3.keys, params4.keys, "Instance 3 and 4 should have identical keys" ); // Verify keys are mathematically correct let expected_keys = generate::keys(width, poly, reflected); assert_eq!( params1.keys, expected_keys, "Cached keys should be mathematically correct" ); // Test with different parameters that don't affect key generation let params5 = crate::CrcParams::new( "DIFFERENT_NAME", width, poly, 0x12345678, reflected, 0x87654321, 0xABCDEF, ); assert_eq!( params1.keys, params5.keys, "Different init/xorout/check/name should not affect cached keys" ); // Test with CRC64 parameters let width64 = 64; let poly64 = 0x42F0E1EBA9EA3693; let reflected64 = false; let params64_1 = crate::CrcParams::new( "CRC64_1", width64, poly64, 0xFFFFFFFFFFFFFFFF, reflected64, 0x0, 0x0, ); let params64_2 = crate::CrcParams::new( "CRC64_2", width64, poly64, 0x0, reflected64, 0xFFFFFFFFFFFFFFFF, 0x12345, ); let params64_3 = crate::CrcParams::new( "CRC64_3", width64, poly64, 0x123456789ABCDEF0, reflected64, 0x0FEDCBA987654321, 0x999, ); assert_eq!( params64_1.keys, params64_2.keys, "CRC64 instances should have identical keys" ); assert_eq!( params64_1.keys, params64_3.keys, "CRC64 instances should have identical keys" ); let expected_keys64 = generate::keys(width64, poly64, reflected64); assert_eq!( params64_1.keys, expected_keys64, "CRC64 cached keys should be mathematically correct" ); } #[test] fn test_crc_params_api_compatibility() { use crate::{CrcAlgorithm, CrcParams}; clear_cache(); // Test that the CrcParams API remains unchanged let params = CrcParams::new( "API_TEST", 32, 0x04C11DB7, 0xFFFFFFFF, true, 0xFFFFFFFF, 0xCBF43926, ); // Verify all public fields are accessible and have expected types let _algorithm: CrcAlgorithm = params.algorithm; let _name: &'static str = params.name; let _width: u8 = params.width; let _poly: u64 = params.poly; let _init: u64 = params.init; let _refin: bool = params.refin; let _refout: bool = params.refout; let _xorout: u64 = params.xorout; let _check: u64 = params.check; let _keys: [u64; 23] = params.keys.to_keys_array_23(); // Verify the algorithm is set to CrcCustom (unified custom variant) assert!(matches!(params.algorithm, CrcAlgorithm::CrcCustom)); // Test that CrcParams can be copied and cloned let params_copy = params; let params_clone = params; assert_eq!(params.keys, params_copy.keys); assert_eq!(params.keys, params_clone.keys); // Test Debug formatting works let debug_str = format!("{:?}", params); assert!(debug_str.contains("CrcParams")); assert!(debug_str.contains("API_TEST")); } #[test] fn test_crc_params_with_all_standard_algorithms() { use crate::test::consts::TEST_ALL_CONFIGS; clear_cache(); // Test creating CrcParams for all standard CRC algorithms for config in TEST_ALL_CONFIGS { // Create CrcParams using the same parameters as the standard algorithm let params = crate::CrcParams::new( config.get_name(), config.get_width(), config.get_poly(), config.get_init(), config.get_refin(), config.get_xorout(), config.get_check(), ); // Verify the created params match the expected configuration assert_eq!(params.name, config.get_name()); assert_eq!(params.width, config.get_width()); assert_eq!(params.poly, config.get_poly()); assert_eq!(params.init, config.get_init()); assert_eq!(params.refin, config.get_refin()); assert_eq!(params.refout, config.get_refin()); assert_eq!(params.xorout, config.get_xorout()); assert_eq!(params.check, config.get_check()); // Most importantly, verify the keys are correct assert_eq!( params.keys, config.get_keys(), "Keys should match expected values for {}", config.get_name() ); // Create a second instance to test caching let params2 = crate::CrcParams::new( "CACHED_VERSION", // Different name shouldn't affect caching config.get_width(), config.get_poly(), 0x12345678, // Different init shouldn't affect caching config.get_refin(), 0x87654321, // Different xorout shouldn't affect caching 0xABCDEF, // Different check shouldn't affect caching ); // Keys should be identical (proving cache hit) assert_eq!( params.keys, params2.keys, "Cached keys should be identical for {}", config.get_name() ); } } #[test] fn test_crc_params_edge_cases() { clear_cache(); // Test edge cases for CrcParams creation // Test minimum and maximum polynomial values let params_min_poly = crate::CrcParams::new("MIN_POLY", 32, 0x1, 0x0, false, 0x0, 0x0); let params_max_poly = crate::CrcParams::new("MAX_POLY", 32, 0xFFFFFFFF, 0x0, false, 0x0, 0x0); // Both should create valid instances assert_eq!(params_min_poly.width, 32); assert_eq!(params_min_poly.poly, 0x1); assert_eq!(params_max_poly.width, 32); assert_eq!(params_max_poly.poly, 0xFFFFFFFF); // Test both reflection modes let params_reflected = crate::CrcParams::new("REFLECTED", 32, 0x04C11DB7, 0x0, true, 0x0, 0x0); let params_normal = crate::CrcParams::new("NORMAL", 32, 0x04C11DB7, 0x0, false, 0x0, 0x0); // Should have different keys due to different reflection assert_ne!(params_reflected.keys, params_normal.keys); assert!(params_reflected.refin); assert!(params_reflected.refout); assert!(!params_normal.refin); assert!(!params_normal.refout); // Test 64-bit edge cases let params64_min = crate::CrcParams::new("CRC64_MIN", 64, 0x1, 0x0, false, 0x0, 0x0); let params64_max = crate::CrcParams::new("CRC64_MAX", 64, 0xFFFFFFFFFFFFFFFF, 0x0, false, 0x0, 0x0); assert_eq!(params64_min.width, 64); assert_eq!(params64_min.poly, 0x1); assert_eq!(params64_max.width, 64); assert_eq!(params64_max.poly, 0xFFFFFFFFFFFFFFFF); // Verify all instances have valid 23-element key arrays assert_eq!(params_min_poly.keys.key_count(), 23); assert_eq!(params_max_poly.keys.key_count(), 23); assert_eq!(params_reflected.keys.key_count(), 23); assert_eq!(params_normal.keys.key_count(), 23); assert_eq!(params64_min.keys.key_count(), 23); assert_eq!(params64_max.keys.key_count(), 23); } #[test] fn test_crc_params_concurrent_creation() { use std::sync::{Arc, Barrier}; use std::thread; clear_cache(); let num_threads = 8; let barrier = Arc::new(Barrier::new(num_threads)); let mut handles = Vec::new(); // All threads create CrcParams with the same parameters simultaneously for i in 0..num_threads { let barrier_clone = Arc::clone(&barrier); let handle = thread::spawn(move || { barrier_clone.wait(); // All threads create the same CrcParams let params = crate::CrcParams::new( "CONCURRENT_TEST", 32, 0x04C11DB7, 0xFFFFFFFF, true, 0xFFFFFFFF, 0xCBF43926, ); (i, params) }); handles.push(handle); } // Collect results from all threads let mut results = Vec::new(); for handle in handles { results.push(handle.join().expect("Thread should not panic")); } // Verify all threads completed successfully assert_eq!(results.len(), num_threads); // Verify all CrcParams instances have identical keys let first_keys = results[0].1.keys; for (thread_id, params) in results { assert_eq!( params.keys, first_keys, "Thread {} should have identical keys to other threads", thread_id ); // Verify other fields are also correct assert_eq!(params.name, "CONCURRENT_TEST"); assert_eq!(params.width, 32); assert_eq!(params.poly, 0x04C11DB7); assert_eq!(params.init, 0xFFFFFFFF); assert!(params.refin); assert!(params.refout); assert_eq!(params.xorout, 0xFFFFFFFF); assert_eq!(params.check, 0xCBF43926); } // Verify the keys are mathematically correct let expected_keys = generate::keys(32, 0x04C11DB7, true); assert_eq!( first_keys, expected_keys, "All concurrent CrcParams should have correct keys" ); } #[test] fn test_lock_poisoning_recovery() { use std::sync::{Arc, Barrier}; use std::thread; clear_cache(); // This test is tricky because we need to poison the lock without // actually breaking our test. We'll simulate lock poisoning by // creating a scenario where a thread panics while holding a write lock. // However, since our implementation uses best-effort error handling, // it should gracefully degrade rather than propagate panics. // First, verify normal operation let keys_before = get_or_generate_keys(32, 0x04C11DB7, true); assert_eq!(keys_before.len(), 23); // Test that even if internal operations fail, the function still returns valid keys // We can't easily poison the lock in a controlled way, but we can verify // that our error handling works by testing edge cases // Multiple rapid cache operations that might stress the locking mechanism let num_threads = 4; let barrier = Arc::new(Barrier::new(num_threads)); let mut handles = Vec::new(); for i in 0..num_threads { let barrier_clone = Arc::clone(&barrier); let handle = thread::spawn(move || { barrier_clone.wait(); // Rapid cache operations that might cause contention for j in 0..20 { let poly = 0x04C11DB7 + (i as u64 * 1000) + (j as u64); let keys = get_or_generate_keys(32, poly, true); assert_eq!( keys.len(), 23, "Thread {} iteration {} should return valid keys", i, j ); // Occasional cache clear to increase contention if j % 7 == 0 { clear_cache(); } } i }); handles.push(handle); } // All threads should complete successfully for handle in handles { let thread_id = handle.join().expect("Thread should not panic"); assert!(thread_id < num_threads); } // Verify cache is still functional after stress testing let keys_after = get_or_generate_keys(32, 0x04C11DB7, true); assert_eq!(keys_after.len(), 23); // Keys should be mathematically correct regardless of cache state let expected_keys = generate::keys(32, 0x04C11DB7, true); assert_eq!(keys_after, expected_keys); } #[test] fn test_cache_behavior_with_thread_local_access() { use std::thread; clear_cache(); // Test that cache works correctly when accessed from different threads // in sequence (not concurrently) let keys_main = get_or_generate_keys(32, 0x04C11DB7, true); let handle = thread::spawn(|| { // This thread should see the cached value from the main thread get_or_generate_keys(32, 0x04C11DB7, true) }); let keys_from_thread = handle.join().expect("Thread should not panic"); // Both should be identical assert_eq!(keys_main, keys_from_thread); // Test multiple sequential threads let mut thread_keys = Vec::new(); for i in 0..5 { let handle = thread::spawn(move || { let keys = get_or_generate_keys(32, 0x04C11DB7, true); (i, keys) }); let (thread_id, keys) = handle.join().expect("Thread should not panic"); thread_keys.push((thread_id, keys)); } // All threads should get the same cached keys for (thread_id, keys) in thread_keys { assert_eq!( keys, keys_main, "Thread {} should get same cached keys", thread_id ); } } } crc-fast-1.10.0/src/combine.rs000064400000000000000000000140711046102023000141610ustar 00000000000000//! This module provides a function to combine CRCs of two sequences of bytes. //! //! It is based on the work of Mark Adler and is designed to be used with //! different CRC algorithms. /* Derived from this excellent answer by Mark Adler on StackOverflow: https://stackoverflow.com/questions/29915764/generic-crc-8-16-32-64-combine-implementation/29928573#29928573 */ /* crccomb.c -- generalized combination of CRCs * Copyright (C) 2015 Mark Adler * Version 1.1 29 Apr 2015 Mark Adler */ /* This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Mark Adler madler@alumni.caltech.edu */ /* zlib provides a fast operation to combine the CRCs of two sequences of bytes into a single CRC, which is the CRC of the two sequences concatenated. That operation requires only the two CRC's and the length of the second sequence. The routine in zlib only works on the particular CRC-32 used by zlib. The code provided here generalizes that operation to apply to a wide range of CRCs. The CRC is specified in a series of #defines, based on the parameterization found in Ross William's excellent CRC tutorial here: http://www.ross.net/crc/download/crc_v3.txt A comprehensive catalogue of known CRCs, their parameters, check values, and references can be found here: http://reveng.sourceforge.net/crc-catalogue/all.htm */ use crate::CrcParams; /* Multiply the GF(2) vector vec by the GF(2) matrix mat, returning the resulting vector. The vector is stored as bits in a crc_t. The matrix is similarly stored with each column as a crc_t, where the number of columns is at least enough to cover the position of the most significant 1 bit in the vector (so a dimension parameter is not needed). */ fn gf2_matrix_times(mat: &[u64; 64], mut vec: u64) -> u64 { let mut sum = 0; let mut idx = 0; while vec > 0 { if vec & 1 == 1 { sum ^= mat[idx]; } vec >>= 1; idx += 1; } sum } /* Multiply the matrix mat by itself, returning the result in square. WIDTH is the dimension of the matrices, i.e., the number of bits in each crc_t (rows), and the number of crc_t's (columns). */ fn gf2_matrix_square(square: &mut [u64; 64], mat: &[u64; 64]) { for n in 0..64 { square[n] = gf2_matrix_times(mat, mat[n]); } } /* Combine the CRCs of two successive sequences, where crc1 is the CRC of the first sequence of bytes, crc2 is the CRC of the immediately following sequence of bytes, and len2 is the length of the second sequence. The CRC of the combined sequence is returned. */ pub fn checksums(mut crc1: u64, crc2: u64, mut len2: u64, params: &CrcParams) -> u64 { let mut col: u64; let mut even = [0u64; 64]; /* even-power-of-two zeros operator */ let mut odd = [0u64; 64]; /* odd-power-of-two zeros operator */ /* exclusive-or the result with len2 zeros applied to the CRC of an empty sequence */ crc1 ^= params.init_algorithm ^ params.xorout; /* construct the operator for one zero bit and put in odd[] */ if params.refin && params.refout { // use the reflected POLY odd[0] = reflect_poly(params.poly, params.width as u32); col = 1; for n in 1..params.width { odd[n as usize] = col; col <<= 1; } } else if !params.refin && !params.refout { col = 2; for n in 0..params.width - 1 { odd[n as usize] = col; col <<= 1; } // Put poly at the last valid index (width-1) odd[(params.width - 1) as usize] = params.poly; } else { panic!("Unsupported CRC configuration"); } /* put operator for two zero bits in even */ gf2_matrix_square(&mut even, &odd); /* put operator for four zero bits in odd */ gf2_matrix_square(&mut odd, &even); /* apply len2 zeros to crc1 (first square will put the operator for one zero byte, eight zero bits, in even) */ loop { /* apply zeros operator for this bit of len2 */ gf2_matrix_square(&mut even, &odd); if len2 & 1 == 1 { crc1 = gf2_matrix_times(&even, crc1); } len2 >>= 1; /* if no more bits set, then done */ if len2 == 0 { break; } /* another iteration of the loop with odd and even swapped */ gf2_matrix_square(&mut odd, &even); if len2 & 1 == 1 { crc1 = gf2_matrix_times(&odd, crc1); } len2 >>= 1; /* if no more bits set, then done */ if len2 == 0 { break; } } /* return combined crc */ crc1 ^= crc2; crc1 } fn reflect_poly(poly: u64, width: u32) -> u64 { assert!(width <= 64, "Width must be <= 64 bits"); // First reverse all bits let reversed = bit_reverse(poly); // Shift right to get the significant bits in the correct position // For a 32-bit poly, we need to shift right by (64 - 32) = 32 bits let shifted = reversed >> (64 - width); // Create mask for the target width let mask = if width == 64 { u64::MAX } else { (1u64 << width) - 1 }; // Apply mask to ensure we only keep the bits we want shifted & mask } fn bit_reverse(mut forward: u64) -> u64 { let mut reversed = 0; for _ in 0..64 { reversed <<= 1; reversed |= forward & 1; forward >>= 1; } reversed } crc-fast-1.10.0/src/consts.rs000064400000000000000000000057211046102023000140600ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. #![allow(dead_code)] // Constants for common values with semantic meaning pub(crate) const CRC_CHUNK_SIZE: usize = 16; pub(crate) const CRC_HALF_CHUNK_SIZE: usize = 8; pub(crate) const CRC_LARGE_CHUNK_THRESHOLD: usize = 256; pub const NAME_CRC16_ARC: &str = "CRC-16/ARC"; pub const NAME_CRC16_CDMA2000: &str = "CRC-16/CDMA2000"; pub const NAME_CRC16_CMS: &str = "CRC-16/CMS"; pub const NAME_CRC16_DDS_110: &str = "CRC-16/DDS-110"; pub const NAME_CRC16_DECT_R: &str = "CRC-16/DECT-R"; pub const NAME_CRC16_DECT_X: &str = "CRC-16/DECT-X"; pub const NAME_CRC16_DNP: &str = "CRC-16/DNP"; pub const NAME_CRC16_EN_13757: &str = "CRC-16/EN-13757"; pub const NAME_CRC16_GENIBUS: &str = "CRC-16/GENIBUS"; pub const NAME_CRC16_GSM: &str = "CRC-16/GSM"; pub const NAME_CRC16_IBM_3740: &str = "CRC-16/IBM-3740"; pub const NAME_CRC16_IBM_SDLC: &str = "CRC-16/IBM-SDLC"; pub const NAME_CRC16_ISO_IEC_14443_3_A: &str = "CRC-16/ISO-IEC-14443-3-A"; pub const NAME_CRC16_KERMIT: &str = "CRC-16/KERMIT"; pub const NAME_CRC16_LJ1200: &str = "CRC-16/LJ1200"; pub const NAME_CRC16_M17: &str = "CRC-16/M17"; pub const NAME_CRC16_MAXIM_DOW: &str = "CRC-16/MAXIM-DOW"; pub const NAME_CRC16_MCRF4XX: &str = "CRC-16/MCRF4XX"; pub const NAME_CRC16_MODBUS: &str = "CRC-16/MODBUS"; pub const NAME_CRC16_NRSC_5: &str = "CRC-16/NRSC-5"; pub const NAME_CRC16_OPENSAFETY_A: &str = "CRC-16/OPENSAFETY-A"; pub const NAME_CRC16_OPENSAFETY_B: &str = "CRC-16/OPENSAFETY-B"; pub const NAME_CRC16_PROFIBUS: &str = "CRC-16/PROFIBUS"; pub const NAME_CRC16_RIELLO: &str = "CRC-16/RIELLO"; pub const NAME_CRC16_SPI_FUJITSU: &str = "CRC-16/SPI-FUJITSU"; pub const NAME_CRC16_T10_DIF: &str = "CRC-16/T10-DIF"; pub const NAME_CRC16_TELEDISK: &str = "CRC-16/TELEDISK"; pub const NAME_CRC16_TMS37157: &str = "CRC-16/TMS37157"; pub const NAME_CRC16_UMTS: &str = "CRC-16/UMTS"; pub const NAME_CRC16_USB: &str = "CRC-16/USB"; pub const NAME_CRC16_X25: &str = "CRC-16/X-25"; pub const NAME_CRC16_XMODEM: &str = "CRC-16/XMODEM"; pub const NAME_CRC32_AIXM: &str = "CRC-32/AIXM"; pub const NAME_CRC32_AUTOSAR: &str = "CRC-32/AUTOSAR"; pub const NAME_CRC32_BASE91_D: &str = "CRC-32/BASE91-D"; pub const NAME_CRC32_BZIP2: &str = "CRC-32/BZIP2"; pub const NAME_CRC32_CD_ROM_EDC: &str = "CRC-32/CD-ROM-EDC"; pub const NAME_CRC32_CKSUM: &str = "CRC-32/CKSUM"; pub const NAME_CRC32_ISCSI: &str = "CRC-32/ISCSI"; pub const NAME_CRC32_ISO_HDLC: &str = "CRC-32/ISO-HDLC"; pub const NAME_CRC32_JAMCRC: &str = "CRC-32/JAMCRC"; pub const NAME_CRC32_MEF: &str = "CRC-32/MEF"; pub const NAME_CRC32_MPEG_2: &str = "CRC-32/MPEG-2"; pub const NAME_CRC32_XFER: &str = "CRC-32/XFER"; pub const NAME_CRC64_ECMA_182: &str = "CRC-64/ECMA-182"; pub const NAME_CRC64_GO_ISO: &str = "CRC-64/GO-ISO"; pub const NAME_CRC64_MS: &str = "CRC-64/MS"; pub const NAME_CRC64_NVME: &str = "CRC-64/NVME"; pub const NAME_CRC64_REDIS: &str = "CRC-64/REDIS"; pub const NAME_CRC64_WE: &str = "CRC-64/WE"; pub const NAME_CRC64_XZ: &str = "CRC-64/XZ"; crc-fast-1.10.0/src/crc16/algorithm.rs000064400000000000000000000110751046102023000154520ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides the CRC-16 algorithm implementations. //! //! CRC-16 computation is performed by scaling 16-bit values to 32-bit space, //! using the shared width32_ops module, and then scaling the result back to 16 bits. #![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] use crate::enums::Reflector; use crate::structs::CrcState; use crate::traits::{ArchOps, EnhancedCrcWidth}; impl EnhancedCrcWidth for crate::structs::Width16 { #[inline(always)] fn load_constants(reflected: bool) -> [[u64; 2]; 4] { crate::crc32::width32_ops::load_constants(reflected) } #[inline(always)] unsafe fn create_state( value: Self::Value, reflected: bool, ops: &T, ) -> CrcState where T::Vector: Copy, { let vector = if reflected { // For reflected mode, state goes in the low 32 bits (no scaling needed) ops.create_vector_from_u32(value as u32, false) } else { // For non-reflected mode, scale to 32 bits and position in high bytes // CRC-16 forward: shift left 16 bits to scale to 32-bit space let scaled = (value as u32) << 16; ops.create_vector_from_u32(scaled, true) }; CrcState { value: vector, reflected, } } #[inline(always)] unsafe fn extract_result(vector: T::Vector, reflected: bool, ops: &T) -> Self::Value where T::Vector: Copy, { let u64s = ops.extract_u64s(vector); if reflected { // In reflected mode, the result is in the low 32 bits of the low 64 bits // Extract the 16-bit result u64s[0] as u16 } else { // In non-reflected mode, the result is in the high 32 bits of the low 64 bits // Scale back from 32 bits to 16 bits ((u64s[1] >> 32) >> 16) as u16 } } #[inline(always)] unsafe fn fold_16( state: &mut CrcState, coeff: T::Vector, data_to_xor: T::Vector, ops: &T, ) where T::Vector: Copy, { crate::crc32::width32_ops::fold_16(state, coeff, data_to_xor, ops) } #[inline(always)] unsafe fn fold_width(state: &mut CrcState, high: u64, low: u64, ops: &T) where T::Vector: Copy, { crate::crc32::width32_ops::fold_width(state, high, low, ops) } #[inline(always)] unsafe fn barrett_reduction( state: &CrcState, poly: u64, mu: u64, ops: &T, ) -> Self::Value where T::Vector: Copy, { let u64s = crate::crc32::width32_ops::barrett_reduction(state, poly, mu, ops); if state.reflected { u64s[1] as u16 } else { // Scale back from 32 bits to 16 bits ((u64s[0] >> 32) >> 16) as u16 } } #[inline(always)] unsafe fn create_coefficient( high: u64, low: u64, _reflected: bool, ops: &T, ) -> T::Vector where T::Vector: Copy, { crate::crc32::width32_ops::create_coefficient(high, low, ops) } #[inline(always)] unsafe fn perform_final_reduction( state: T::Vector, reflected: bool, keys: &[u64; 23], ops: &T, ) -> Self::Value where T::Vector: Copy, { let u64s = crate::crc32::width32_ops::perform_final_reduction(state, reflected, keys, ops); if reflected { u64s[1] as u16 } else { // Scale back from 32 bits to 16 bits ((u64s[0] >> 32) >> 16) as u16 } } #[inline(always)] fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize) { crate::crc32::width32_ops::get_last_bytes_table_ptr(reflected, remaining_len) } } /// Process inputs smaller than 16 bytes for CRC-16 #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] pub(crate) unsafe fn process_0_to_15( data: &[u8], state: &mut CrcState, reflector: &Reflector, keys: &[u64; 23], ops: &T, ) -> W::Value where T::Vector: Copy, { crate::crc32::width32_ops::process_0_to_15::(data, state, reflector, keys, ops) } crc-fast-1.10.0/src/crc16/consts.rs000064400000000000000000001100001046102023000147610ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. #![allow(dead_code)] use crate::consts::{ NAME_CRC16_ARC, NAME_CRC16_CDMA2000, NAME_CRC16_CMS, NAME_CRC16_DDS_110, NAME_CRC16_DECT_R, NAME_CRC16_DECT_X, NAME_CRC16_DNP, NAME_CRC16_EN_13757, NAME_CRC16_GENIBUS, NAME_CRC16_GSM, NAME_CRC16_IBM_3740, NAME_CRC16_IBM_SDLC, NAME_CRC16_ISO_IEC_14443_3_A, NAME_CRC16_KERMIT, NAME_CRC16_LJ1200, NAME_CRC16_M17, NAME_CRC16_MAXIM_DOW, NAME_CRC16_MCRF4XX, NAME_CRC16_MODBUS, NAME_CRC16_NRSC_5, NAME_CRC16_OPENSAFETY_A, NAME_CRC16_OPENSAFETY_B, NAME_CRC16_PROFIBUS, NAME_CRC16_RIELLO, NAME_CRC16_SPI_FUJITSU, NAME_CRC16_T10_DIF, NAME_CRC16_TELEDISK, NAME_CRC16_TMS37157, NAME_CRC16_UMTS, NAME_CRC16_USB, NAME_CRC16_XMODEM, }; use crate::structs::Algorithm; use crate::CrcAlgorithm; use crate::CrcParams; // Native CRC-16 algorithm constants matching the CRC catalogue specification // https://reveng.sourceforge.io/crc-catalogue/all.htm pub const CRC_16_ARC: Algorithm = Algorithm { width: 16, poly: 0x8005, init: 0x0, refin: true, refout: true, xorout: 0x0, check: 0xbb3d, residue: 0x0, }; pub const CRC_16_CDMA2000: Algorithm = Algorithm { width: 16, poly: 0xc867, init: 0xffff, refin: false, refout: false, xorout: 0x0, check: 0x4c06, residue: 0x0, }; pub const CRC_16_CMS: Algorithm = Algorithm { width: 16, poly: 0x8005, init: 0xffff, refin: false, refout: false, xorout: 0x0, check: 0xaee7, residue: 0x0, }; pub const CRC_16_DDS_110: Algorithm = Algorithm { width: 16, poly: 0x8005, init: 0x800d, refin: false, refout: false, xorout: 0x0, check: 0x9ecf, residue: 0x0, }; pub const CRC_16_DECT_R: Algorithm = Algorithm { width: 16, poly: 0x0589, init: 0x0, refin: false, refout: false, xorout: 0x1, check: 0x007e, residue: 0x0589, }; pub const CRC_16_DECT_X: Algorithm = Algorithm { width: 16, poly: 0x0589, init: 0x0, refin: false, refout: false, xorout: 0x0, check: 0x007f, residue: 0x0, }; pub const CRC_16_DNP: Algorithm = Algorithm { width: 16, poly: 0x3d65, init: 0x0, refin: true, refout: true, xorout: 0xffff, check: 0xea82, residue: 0x66c5, }; pub const CRC_16_EN_13757: Algorithm = Algorithm { width: 16, poly: 0x3d65, init: 0x0, refin: false, refout: false, xorout: 0xffff, check: 0xc2b7, residue: 0xa366, }; pub const CRC_16_GENIBUS: Algorithm = Algorithm { width: 16, poly: 0x1021, init: 0xffff, refin: false, refout: false, xorout: 0xffff, check: 0xd64e, residue: 0x1d0f, }; pub const CRC_16_GSM: Algorithm = Algorithm { width: 16, poly: 0x1021, init: 0x0, refin: false, refout: false, xorout: 0xffff, check: 0xce3c, residue: 0x1d0f, }; pub const CRC_16_IBM_3740: Algorithm = Algorithm { width: 16, poly: 0x1021, init: 0xffff, refin: false, refout: false, xorout: 0x0, check: 0x29b1, residue: 0x0, }; pub const CRC_16_IBM_SDLC: Algorithm = Algorithm { width: 16, poly: 0x1021, init: 0xffff, refin: true, refout: true, xorout: 0xffff, check: 0x906e, residue: 0xf0b8, }; pub const CRC_16_ISO_IEC_14443_3_A: Algorithm = Algorithm { width: 16, poly: 0x1021, init: 0xc6c6, refin: true, refout: true, xorout: 0x0, check: 0xbf05, residue: 0x0, }; pub const CRC_16_KERMIT: Algorithm = Algorithm { width: 16, poly: 0x1021, init: 0x0, refin: true, refout: true, xorout: 0x0, check: 0x2189, residue: 0x0, }; pub const CRC_16_LJ1200: Algorithm = Algorithm { width: 16, poly: 0x6f63, init: 0x0, refin: false, refout: false, xorout: 0x0, check: 0xbdf4, residue: 0x0, }; pub const CRC_16_M17: Algorithm = Algorithm { width: 16, poly: 0x5935, init: 0xffff, refin: false, refout: false, xorout: 0x0, check: 0x772b, residue: 0x0, }; pub const CRC_16_MAXIM_DOW: Algorithm = Algorithm { width: 16, poly: 0x8005, init: 0x0, refin: true, refout: true, xorout: 0xffff, check: 0x44c2, residue: 0xb001, }; pub const CRC_16_MCRF4XX: Algorithm = Algorithm { width: 16, poly: 0x1021, init: 0xffff, refin: true, refout: true, xorout: 0x0, check: 0x6f91, residue: 0x0, }; pub const CRC_16_MODBUS: Algorithm = Algorithm { width: 16, poly: 0x8005, init: 0xffff, refin: true, refout: true, xorout: 0x0, check: 0x4b37, residue: 0x0, }; pub const CRC_16_NRSC_5: Algorithm = Algorithm { width: 16, poly: 0x080b, init: 0xffff, refin: true, refout: true, xorout: 0x0, check: 0xa066, residue: 0x0, }; pub const CRC_16_OPENSAFETY_A: Algorithm = Algorithm { width: 16, poly: 0x5935, init: 0x0, refin: false, refout: false, xorout: 0x0, check: 0x5d38, residue: 0x0, }; pub const CRC_16_OPENSAFETY_B: Algorithm = Algorithm { width: 16, poly: 0x755b, init: 0x0, refin: false, refout: false, xorout: 0x0, check: 0x20fe, residue: 0x0, }; pub const CRC_16_PROFIBUS: Algorithm = Algorithm { width: 16, poly: 0x1dcf, init: 0xffff, refin: false, refout: false, xorout: 0xffff, check: 0xa819, residue: 0xe394, }; pub const CRC_16_RIELLO: Algorithm = Algorithm { width: 16, poly: 0x1021, init: 0xb2aa, refin: true, refout: true, xorout: 0x0, check: 0x63d0, residue: 0x0, }; pub const CRC_16_SPI_FUJITSU: Algorithm = Algorithm { width: 16, poly: 0x1021, init: 0x1d0f, refin: false, refout: false, xorout: 0x0, check: 0xe5cc, residue: 0x0, }; pub const CRC_16_T10_DIF: Algorithm = Algorithm { width: 16, poly: 0x8bb7, init: 0x0, refin: false, refout: false, xorout: 0x0, check: 0xd0db, residue: 0x0, }; pub const CRC_16_TELEDISK: Algorithm = Algorithm { width: 16, poly: 0xa097, init: 0x0, refin: false, refout: false, xorout: 0x0, check: 0x0fb3, residue: 0x0, }; pub const CRC_16_TMS37157: Algorithm = Algorithm { width: 16, poly: 0x1021, init: 0x89ec, refin: true, refout: true, xorout: 0x0, check: 0x26b1, residue: 0x0, }; pub const CRC_16_UMTS: Algorithm = Algorithm { width: 16, poly: 0x8005, init: 0x0, refin: false, refout: false, xorout: 0x0, check: 0xfee8, residue: 0x0, }; pub const CRC_16_USB: Algorithm = Algorithm { width: 16, poly: 0x8005, init: 0xffff, refin: true, refout: true, xorout: 0xffff, check: 0xb4c8, residue: 0xb001, }; pub const CRC_16_XMODEM: Algorithm = Algorithm { width: 16, poly: 0x1021, init: 0x0, refin: false, refout: false, xorout: 0x0, check: 0x31c3, residue: 0x0, }; // width=16 poly=0x8005 init=0x0000 refin=true refout=true xorout=0x0000 check=0xbb3d residue=0x0000 name="CRC-16/ARC" pub const CRC16_ARC: CrcParams = CrcParams { name: NAME_CRC16_ARC, algorithm: CrcAlgorithm::Crc16Arc, width: 16, poly: CRC_16_ARC.poly as u64, init: CRC_16_ARC.init as u64, init_algorithm: CRC_16_ARC.init as u64, // 0x0000 is symmetric under bit-reversal refin: CRC_16_ARC.refin, refout: CRC_16_ARC.refout, xorout: CRC_16_ARC.xorout as u64, check: CRC_16_ARC.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_REFLECTED), }; // width=16 poly=0xc867 init=0xffff refin=false refout=false xorout=0x0000 check=0x4c06 residue=0x0000 name="CRC-16/CDMA2000" pub const CRC16_CDMA2000: CrcParams = CrcParams { name: NAME_CRC16_CDMA2000, algorithm: CrcAlgorithm::Crc16Cdma2000, width: 16, poly: CRC_16_CDMA2000.poly as u64, init: CRC_16_CDMA2000.init as u64, init_algorithm: CRC_16_CDMA2000.init as u64, refin: CRC_16_CDMA2000.refin, refout: CRC_16_CDMA2000.refout, xorout: CRC_16_CDMA2000.xorout as u64, check: CRC_16_CDMA2000.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_C867_FORWARD), }; // width=16 poly=0x8005 init=0xffff refin=false refout=false xorout=0x0000 check=0xaee7 residue=0x0000 name="CRC-16/CMS" pub const CRC16_CMS: CrcParams = CrcParams { name: NAME_CRC16_CMS, algorithm: CrcAlgorithm::Crc16Cms, width: 16, poly: CRC_16_CMS.poly as u64, init: CRC_16_CMS.init as u64, init_algorithm: CRC_16_CMS.init as u64, refin: CRC_16_CMS.refin, refout: CRC_16_CMS.refout, xorout: CRC_16_CMS.xorout as u64, check: CRC_16_CMS.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_FORWARD), }; // width=16 poly=0x8005 init=0x800d refin=false refout=false xorout=0x0000 check=0x9ecf residue=0x0000 name="CRC-16/DDS-110" pub const CRC16_DDS_110: CrcParams = CrcParams { name: NAME_CRC16_DDS_110, algorithm: CrcAlgorithm::Crc16Dds110, width: 16, poly: CRC_16_DDS_110.poly as u64, init: CRC_16_DDS_110.init as u64, init_algorithm: CRC_16_DDS_110.init as u64, refin: CRC_16_DDS_110.refin, refout: CRC_16_DDS_110.refout, xorout: CRC_16_DDS_110.xorout as u64, check: CRC_16_DDS_110.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_FORWARD), }; // width=16 poly=0x0589 init=0x0000 refin=false refout=false xorout=0x0001 check=0x007e residue=0x0589 name="CRC-16/DECT-R" pub const CRC16_DECT_R: CrcParams = CrcParams { name: NAME_CRC16_DECT_R, algorithm: CrcAlgorithm::Crc16DectR, width: 16, poly: CRC_16_DECT_R.poly as u64, init: CRC_16_DECT_R.init as u64, init_algorithm: CRC_16_DECT_R.init as u64, refin: CRC_16_DECT_R.refin, refout: CRC_16_DECT_R.refout, xorout: CRC_16_DECT_R.xorout as u64, check: CRC_16_DECT_R.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_0589_FORWARD), }; // width=16 poly=0x0589 init=0x0000 refin=false refout=false xorout=0x0000 check=0x007f residue=0x0000 name="CRC-16/DECT-X" pub const CRC16_DECT_X: CrcParams = CrcParams { name: NAME_CRC16_DECT_X, algorithm: CrcAlgorithm::Crc16DectX, width: 16, poly: CRC_16_DECT_X.poly as u64, init: CRC_16_DECT_X.init as u64, init_algorithm: CRC_16_DECT_X.init as u64, refin: CRC_16_DECT_X.refin, refout: CRC_16_DECT_X.refout, xorout: CRC_16_DECT_X.xorout as u64, check: CRC_16_DECT_X.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_0589_FORWARD), }; // width=16 poly=0x3d65 init=0x0000 refin=true refout=true xorout=0xffff check=0xea82 residue=0x66c5 name="CRC-16/DNP" pub const CRC16_DNP: CrcParams = CrcParams { name: NAME_CRC16_DNP, algorithm: CrcAlgorithm::Crc16Dnp, width: 16, poly: CRC_16_DNP.poly as u64, init: CRC_16_DNP.init as u64, init_algorithm: CRC_16_DNP.init as u64, // 0x0000 is symmetric under bit-reversal refin: CRC_16_DNP.refin, refout: CRC_16_DNP.refout, xorout: CRC_16_DNP.xorout as u64, check: CRC_16_DNP.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_3D65_REFLECTED), }; // width=16 poly=0x3d65 init=0x0000 refin=false refout=false xorout=0xffff check=0xc2b7 residue=0xa366 name="CRC-16/EN-13757" pub const CRC16_EN_13757: CrcParams = CrcParams { name: NAME_CRC16_EN_13757, algorithm: CrcAlgorithm::Crc16En13757, width: 16, poly: CRC_16_EN_13757.poly as u64, init: CRC_16_EN_13757.init as u64, init_algorithm: CRC_16_EN_13757.init as u64, refin: CRC_16_EN_13757.refin, refout: CRC_16_EN_13757.refout, xorout: CRC_16_EN_13757.xorout as u64, check: CRC_16_EN_13757.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_3D65_FORWARD), }; // width=16 poly=0x1021 init=0xffff refin=false refout=false xorout=0xffff check=0xd64e residue=0x1d0f name="CRC-16/GENIBUS" pub const CRC16_GENIBUS: CrcParams = CrcParams { name: NAME_CRC16_GENIBUS, algorithm: CrcAlgorithm::Crc16Genibus, width: 16, poly: CRC_16_GENIBUS.poly as u64, init: CRC_16_GENIBUS.init as u64, init_algorithm: CRC_16_GENIBUS.init as u64, refin: CRC_16_GENIBUS.refin, refout: CRC_16_GENIBUS.refout, xorout: CRC_16_GENIBUS.xorout as u64, check: CRC_16_GENIBUS.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_FORWARD), }; // width=16 poly=0x1021 init=0x0000 refin=false refout=false xorout=0xffff check=0xce3c residue=0x1d0f name="CRC-16/GSM" pub const CRC16_GSM: CrcParams = CrcParams { name: NAME_CRC16_GSM, algorithm: CrcAlgorithm::Crc16Gsm, width: 16, poly: CRC_16_GSM.poly as u64, init: CRC_16_GSM.init as u64, init_algorithm: CRC_16_GSM.init as u64, refin: CRC_16_GSM.refin, refout: CRC_16_GSM.refout, xorout: CRC_16_GSM.xorout as u64, check: CRC_16_GSM.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_FORWARD), }; // width=16 poly=0x1021 init=0xffff refin=false refout=false xorout=0x0000 check=0x29b1 residue=0x0000 name="CRC-16/IBM-3740" pub const CRC16_IBM_3740: CrcParams = CrcParams { name: NAME_CRC16_IBM_3740, algorithm: CrcAlgorithm::Crc16Ibm3740, width: 16, poly: CRC_16_IBM_3740.poly as u64, init: CRC_16_IBM_3740.init as u64, init_algorithm: CRC_16_IBM_3740.init as u64, refin: CRC_16_IBM_3740.refin, refout: CRC_16_IBM_3740.refout, xorout: CRC_16_IBM_3740.xorout as u64, check: CRC_16_IBM_3740.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_FORWARD), }; // width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff check=0x906e residue=0xf0b8 name="CRC-16/IBM-SDLC" pub const CRC16_IBM_SDLC: CrcParams = CrcParams { name: NAME_CRC16_IBM_SDLC, algorithm: CrcAlgorithm::Crc16IbmSdlc, width: 16, poly: CRC_16_IBM_SDLC.poly as u64, init: CRC_16_IBM_SDLC.init as u64, init_algorithm: CRC_16_IBM_SDLC.init as u64, // 0xFFFF is symmetric under bit-reversal refin: CRC_16_IBM_SDLC.refin, refout: CRC_16_IBM_SDLC.refout, xorout: CRC_16_IBM_SDLC.xorout as u64, check: CRC_16_IBM_SDLC.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE), }; // width=16 poly=0x1021 init=0xc6c6 refin=true refout=true xorout=0x0000 check=0xbf05 residue=0x0000 name="CRC-16/ISO-IEC-14443-3-A" pub const CRC16_ISO_IEC_14443_3_A: CrcParams = CrcParams { name: NAME_CRC16_ISO_IEC_14443_3_A, algorithm: CrcAlgorithm::Crc16IsoIec144433A, width: 16, poly: CRC_16_ISO_IEC_14443_3_A.poly as u64, init: CRC_16_ISO_IEC_14443_3_A.init as u64, // 0xC6C6 bit-reversed = 0x6363; pre-computed to avoid runtime reversal init_algorithm: 0x6363, refin: CRC_16_ISO_IEC_14443_3_A.refin, refout: CRC_16_ISO_IEC_14443_3_A.refout, xorout: CRC_16_ISO_IEC_14443_3_A.xorout as u64, check: CRC_16_ISO_IEC_14443_3_A.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE), }; // width=16 poly=0x1021 init=0x0000 refin=true refout=true xorout=0x0000 check=0x2189 residue=0x0000 name="CRC-16/KERMIT" pub const CRC16_KERMIT: CrcParams = CrcParams { name: NAME_CRC16_KERMIT, algorithm: CrcAlgorithm::Crc16Kermit, width: 16, poly: CRC_16_KERMIT.poly as u64, init: CRC_16_KERMIT.init as u64, init_algorithm: CRC_16_KERMIT.init as u64, // 0x0000 is symmetric under bit-reversal refin: CRC_16_KERMIT.refin, refout: CRC_16_KERMIT.refout, xorout: CRC_16_KERMIT.xorout as u64, check: CRC_16_KERMIT.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE), }; // width=16 poly=0x6f63 init=0x0000 refin=false refout=false xorout=0x0000 check=0xbdf4 residue=0x0000 name="CRC-16/LJ1200" pub const CRC16_LJ1200: CrcParams = CrcParams { name: NAME_CRC16_LJ1200, algorithm: CrcAlgorithm::Crc16Lj1200, width: 16, poly: CRC_16_LJ1200.poly as u64, init: CRC_16_LJ1200.init as u64, init_algorithm: CRC_16_LJ1200.init as u64, refin: CRC_16_LJ1200.refin, refout: CRC_16_LJ1200.refout, xorout: CRC_16_LJ1200.xorout as u64, check: CRC_16_LJ1200.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_6F63_FORWARD), }; // width=16 poly=0x5935 init=0xffff refin=false refout=false xorout=0x0000 check=0x772b residue=0x0000 name="CRC-16/M17" pub const CRC16_M17: CrcParams = CrcParams { name: NAME_CRC16_M17, algorithm: CrcAlgorithm::Crc16M17, width: 16, poly: CRC_16_M17.poly as u64, init: CRC_16_M17.init as u64, init_algorithm: CRC_16_M17.init as u64, refin: CRC_16_M17.refin, refout: CRC_16_M17.refout, xorout: CRC_16_M17.xorout as u64, check: CRC_16_M17.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_5935_FORWARD), }; // width=16 poly=0x8005 init=0x0000 refin=true refout=true xorout=0xffff check=0x44c2 residue=0xb001 name="CRC-16/MAXIM-DOW" pub const CRC16_MAXIM_DOW: CrcParams = CrcParams { name: NAME_CRC16_MAXIM_DOW, algorithm: CrcAlgorithm::Crc16MaximDow, width: 16, poly: CRC_16_MAXIM_DOW.poly as u64, init: CRC_16_MAXIM_DOW.init as u64, init_algorithm: CRC_16_MAXIM_DOW.init as u64, // 0x0000 is symmetric under bit-reversal refin: CRC_16_MAXIM_DOW.refin, refout: CRC_16_MAXIM_DOW.refout, xorout: CRC_16_MAXIM_DOW.xorout as u64, check: CRC_16_MAXIM_DOW.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_REFLECTED), }; // width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0x0000 check=0x6f91 residue=0x0000 name="CRC-16/MCRF4XX" pub const CRC16_MCRF4XX: CrcParams = CrcParams { name: NAME_CRC16_MCRF4XX, algorithm: CrcAlgorithm::Crc16Mcrf4xx, width: 16, poly: CRC_16_MCRF4XX.poly as u64, init: CRC_16_MCRF4XX.init as u64, init_algorithm: CRC_16_MCRF4XX.init as u64, // 0xFFFF is symmetric under bit-reversal refin: CRC_16_MCRF4XX.refin, refout: CRC_16_MCRF4XX.refout, xorout: CRC_16_MCRF4XX.xorout as u64, check: CRC_16_MCRF4XX.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE), }; // width=16 poly=0x8005 init=0xffff refin=true refout=true xorout=0x0000 check=0x4b37 residue=0x0000 name="CRC-16/MODBUS" pub const CRC16_MODBUS: CrcParams = CrcParams { name: NAME_CRC16_MODBUS, algorithm: CrcAlgorithm::Crc16Modbus, width: 16, poly: CRC_16_MODBUS.poly as u64, init: CRC_16_MODBUS.init as u64, init_algorithm: CRC_16_MODBUS.init as u64, // 0xFFFF is symmetric under bit-reversal refin: CRC_16_MODBUS.refin, refout: CRC_16_MODBUS.refout, xorout: CRC_16_MODBUS.xorout as u64, check: CRC_16_MODBUS.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_REFLECTED), }; // width=16 poly=0x080b init=0xffff refin=true refout=true xorout=0x0000 check=0xa066 residue=0x0000 name="CRC-16/NRSC-5" pub const CRC16_NRSC_5: CrcParams = CrcParams { name: NAME_CRC16_NRSC_5, algorithm: CrcAlgorithm::Crc16Nrsc5, width: 16, poly: CRC_16_NRSC_5.poly as u64, init: CRC_16_NRSC_5.init as u64, init_algorithm: CRC_16_NRSC_5.init as u64, // 0xFFFF is symmetric under bit-reversal refin: CRC_16_NRSC_5.refin, refout: CRC_16_NRSC_5.refout, xorout: CRC_16_NRSC_5.xorout as u64, check: CRC_16_NRSC_5.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_080B_REFLECTED), }; // width=16 poly=0x5935 init=0x0000 refin=false refout=false xorout=0x0000 check=0x5d38 residue=0x0000 name="CRC-16/OPENSAFETY-A" pub const CRC16_OPENSAFETY_A: CrcParams = CrcParams { name: NAME_CRC16_OPENSAFETY_A, algorithm: CrcAlgorithm::Crc16OpensafetyA, width: 16, poly: CRC_16_OPENSAFETY_A.poly as u64, init: CRC_16_OPENSAFETY_A.init as u64, init_algorithm: CRC_16_OPENSAFETY_A.init as u64, refin: CRC_16_OPENSAFETY_A.refin, refout: CRC_16_OPENSAFETY_A.refout, xorout: CRC_16_OPENSAFETY_A.xorout as u64, check: CRC_16_OPENSAFETY_A.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_5935_FORWARD), }; // width=16 poly=0x755b init=0x0000 refin=false refout=false xorout=0x0000 check=0x20fe residue=0x0000 name="CRC-16/OPENSAFETY-B" pub const CRC16_OPENSAFETY_B: CrcParams = CrcParams { name: NAME_CRC16_OPENSAFETY_B, algorithm: CrcAlgorithm::Crc16OpensafetyB, width: 16, poly: CRC_16_OPENSAFETY_B.poly as u64, init: CRC_16_OPENSAFETY_B.init as u64, init_algorithm: CRC_16_OPENSAFETY_B.init as u64, refin: CRC_16_OPENSAFETY_B.refin, refout: CRC_16_OPENSAFETY_B.refout, xorout: CRC_16_OPENSAFETY_B.xorout as u64, check: CRC_16_OPENSAFETY_B.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_755B_FORWARD), }; // width=16 poly=0x1dcf init=0xffff refin=false refout=false xorout=0xffff check=0xa819 residue=0xe394 name="CRC-16/PROFIBUS" pub const CRC16_PROFIBUS: CrcParams = CrcParams { name: NAME_CRC16_PROFIBUS, algorithm: CrcAlgorithm::Crc16Profibus, width: 16, poly: CRC_16_PROFIBUS.poly as u64, init: CRC_16_PROFIBUS.init as u64, init_algorithm: CRC_16_PROFIBUS.init as u64, refin: CRC_16_PROFIBUS.refin, refout: CRC_16_PROFIBUS.refout, xorout: CRC_16_PROFIBUS.xorout as u64, check: CRC_16_PROFIBUS.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1DCF_FORWARD), }; // width=16 poly=0x1021 init=0xb2aa refin=true refout=true xorout=0x0000 check=0x63d0 residue=0x0000 name="CRC-16/RIELLO" pub const CRC16_RIELLO: CrcParams = CrcParams { name: NAME_CRC16_RIELLO, algorithm: CrcAlgorithm::Crc16Riello, width: 16, poly: CRC_16_RIELLO.poly as u64, init: CRC_16_RIELLO.init as u64, // 0xB2AA bit-reversed = 0x554D; pre-computed to avoid runtime reversal init_algorithm: 0x554D, refin: CRC_16_RIELLO.refin, refout: CRC_16_RIELLO.refout, xorout: CRC_16_RIELLO.xorout as u64, check: CRC_16_RIELLO.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE), }; // width=16 poly=0x1021 init=0x1d0f refin=false refout=false xorout=0x0000 check=0xe5cc residue=0x0000 name="CRC-16/SPI-FUJITSU" pub const CRC16_SPI_FUJITSU: CrcParams = CrcParams { name: NAME_CRC16_SPI_FUJITSU, algorithm: CrcAlgorithm::Crc16SpiFujitsu, width: 16, poly: CRC_16_SPI_FUJITSU.poly as u64, init: CRC_16_SPI_FUJITSU.init as u64, init_algorithm: CRC_16_SPI_FUJITSU.init as u64, refin: CRC_16_SPI_FUJITSU.refin, refout: CRC_16_SPI_FUJITSU.refout, xorout: CRC_16_SPI_FUJITSU.xorout as u64, check: CRC_16_SPI_FUJITSU.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_FORWARD), }; // width=16 poly=0x8bb7 init=0x0000 refin=false refout=false xorout=0x0000 check=0xd0db residue=0x0000 name="CRC-16/T10-DIF" pub const CRC16_T10_DIF: CrcParams = CrcParams { name: NAME_CRC16_T10_DIF, algorithm: CrcAlgorithm::Crc16T10Dif, width: 16, poly: CRC_16_T10_DIF.poly as u64, init: CRC_16_T10_DIF.init as u64, init_algorithm: CRC_16_T10_DIF.init as u64, refin: CRC_16_T10_DIF.refin, refout: CRC_16_T10_DIF.refout, xorout: CRC_16_T10_DIF.xorout as u64, check: CRC_16_T10_DIF.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8BB7_FORWARD), }; // width=16 poly=0xa097 init=0x0000 refin=false refout=false xorout=0x0000 check=0x0fb3 residue=0x0000 name="CRC-16/TELEDISK" pub const CRC16_TELEDISK: CrcParams = CrcParams { name: NAME_CRC16_TELEDISK, algorithm: CrcAlgorithm::Crc16Teledisk, width: 16, poly: CRC_16_TELEDISK.poly as u64, init: CRC_16_TELEDISK.init as u64, init_algorithm: CRC_16_TELEDISK.init as u64, refin: CRC_16_TELEDISK.refin, refout: CRC_16_TELEDISK.refout, xorout: CRC_16_TELEDISK.xorout as u64, check: CRC_16_TELEDISK.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_A097_FORWARD), }; // width=16 poly=0x1021 init=0x89ec refin=true refout=true xorout=0x0000 check=0x26b1 residue=0x0000 name="CRC-16/TMS37157" pub const CRC16_TMS37157: CrcParams = CrcParams { name: NAME_CRC16_TMS37157, algorithm: CrcAlgorithm::Crc16Tms37157, width: 16, poly: CRC_16_TMS37157.poly as u64, init: CRC_16_TMS37157.init as u64, // 0x89EC bit-reversed = 0x3791; pre-computed to avoid runtime reversal init_algorithm: 0x3791, refin: CRC_16_TMS37157.refin, refout: CRC_16_TMS37157.refout, xorout: CRC_16_TMS37157.xorout as u64, check: CRC_16_TMS37157.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE), }; // width=16 poly=0x8005 init=0x0000 refin=false refout=false xorout=0x0000 check=0xfee8 residue=0x0000 name="CRC-16/UMTS" pub const CRC16_UMTS: CrcParams = CrcParams { name: NAME_CRC16_UMTS, algorithm: CrcAlgorithm::Crc16Umts, width: 16, poly: CRC_16_UMTS.poly as u64, init: CRC_16_UMTS.init as u64, init_algorithm: CRC_16_UMTS.init as u64, refin: CRC_16_UMTS.refin, refout: CRC_16_UMTS.refout, xorout: CRC_16_UMTS.xorout as u64, check: CRC_16_UMTS.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_FORWARD), }; // width=16 poly=0x8005 init=0xffff refin=true refout=true xorout=0xffff check=0xb4c8 residue=0xb001 name="CRC-16/USB" pub const CRC16_USB: CrcParams = CrcParams { name: NAME_CRC16_USB, algorithm: CrcAlgorithm::Crc16Usb, width: 16, poly: CRC_16_USB.poly as u64, init: CRC_16_USB.init as u64, init_algorithm: CRC_16_USB.init as u64, // 0xFFFF is symmetric under bit-reversal refin: CRC_16_USB.refin, refout: CRC_16_USB.refout, xorout: CRC_16_USB.xorout as u64, check: CRC_16_USB.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_REFLECTED), }; // width=16 poly=0x1021 init=0x0000 refin=false refout=false xorout=0x0000 check=0x31c3 residue=0x0000 name="CRC-16/XMODEM" pub const CRC16_XMODEM: CrcParams = CrcParams { name: NAME_CRC16_XMODEM, algorithm: CrcAlgorithm::Crc16Xmodem, width: 16, poly: CRC_16_XMODEM.poly as u64, init: CRC_16_XMODEM.init as u64, init_algorithm: CRC_16_XMODEM.init as u64, refin: CRC_16_XMODEM.refin, refout: CRC_16_XMODEM.refout, xorout: CRC_16_XMODEM.xorout as u64, check: CRC_16_XMODEM.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_FORWARD), }; pub const KEYS_8005_FORWARD: [u64; 23] = [ 0x0000000000000000, 0x8663000000000000, 0x8617000000000000, 0x8665000000000000, 0x8077000000000000, 0x8663000000000000, 0x807b000000000000, 0x00000001fffbffe7, 0x0000000180050000, 0x6a7a000000000000, 0x5ccb000000000000, 0x006b000000000000, 0xedb3000000000000, 0xf997000000000000, 0x8c47000000000000, 0xbffa000000000000, 0x861b000000000000, 0xeac3000000000000, 0xed6b000000000000, 0xf557000000000000, 0x806f000000000000, 0xf337000000000000, 0x867b000000000000, ]; pub const KEYS_8005_REFLECTED: [u64; 23] = [ 0x0000000000000000, 0x0000000000018cc2, 0x000000000001d0c2, 0x0000000000014cc2, 0x000000000001dc02, 0x0000000000018cc2, 0x000000000001bc02, 0x00000001cfffbfff, 0x0000000000014003, 0x000000000000bcac, 0x000000000001a674, 0x000000000001ac00, 0x0000000000019b6e, 0x000000000001d33e, 0x000000000001c462, 0x000000000000bffa, 0x000000000001b0c2, 0x00000000000186ae, 0x000000000001ad6e, 0x000000000001d55e, 0x000000000001ec02, 0x000000000001d99e, 0x000000000001bcc2, ]; pub const KEYS_C867_FORWARD: [u64; 23] = [ 0x0000000000000000, 0x1473000000000000, 0x7386000000000000, 0x8388000000000000, 0x1494000000000000, 0x1473000000000000, 0xb4eb000000000000, 0x00000001bcf9ccb5, 0x00000001c8670000, 0x7b7c000000000000, 0xe363000000000000, 0x594f000000000000, 0xd7bc000000000000, 0x47ca000000000000, 0x971e000000000000, 0x6acb000000000000, 0xbd49000000000000, 0x9f17000000000000, 0x1db5000000000000, 0xd834000000000000, 0x70c7000000000000, 0xb010000000000000, 0x7d8b000000000000, ]; pub const KEYS_0589_FORWARD: [u64; 23] = [ 0x0000000000000000, 0xc2ee000000000000, 0xf795000000000000, 0x58e7000000000000, 0x9aad000000000000, 0xc2ee000000000000, 0xa847000000000000, 0x0000000105981d3f, 0x0000000105890000, 0x5230000000000000, 0x3315000000000000, 0xd59f000000000000, 0x67c9000000000000, 0x148c000000000000, 0x4da7000000000000, 0xf6c1000000000000, 0x5890000000000000, 0x0523000000000000, 0xd0cf000000000000, 0x7cd2000000000000, 0x1624000000000000, 0xf411000000000000, 0x1d58000000000000, ]; pub const KEYS_3D65_REFLECTED: [u64; 23] = [ 0x0000000000000000, 0x0000000000001612, 0x0000000000004d8c, 0x0000000000017d88, 0x000000000001b860, 0x0000000000001612, 0x000000000000c2e8, 0x00000000f81e8e39, 0x0000000000014d79, 0x000000000001b406, 0x0000000000000400, 0x000000000000c654, 0x0000000000006f94, 0x00000000000140ba, 0x000000000000aa92, 0x0000000000000020, 0x00000000000058b2, 0x000000000001c116, 0x0000000000009664, 0x0000000000015cfa, 0x000000000001c458, 0x000000000000cdc0, 0x000000000000b470, ]; pub const KEYS_3D65_FORWARD: [u64; 23] = [ 0x0000000000000000, 0x90d0000000000000, 0x6364000000000000, 0x237d000000000000, 0x0c3b000000000000, 0x90d0000000000000, 0x2e86000000000000, 0x0000000138e2f03e, 0x000000013d650000, 0xc05b000000000000, 0x0040000000000000, 0x54c6000000000000, 0x53ec000000000000, 0xba05000000000000, 0x92aa000000000000, 0x0800000000000000, 0x9a34000000000000, 0xd107000000000000, 0x4cd2000000000000, 0xbe75000000000000, 0x3447000000000000, 0x0766000000000000, 0x1c5a000000000000, ]; pub const KEYS_1021_FORWARD: [u64; 23] = [ 0x0000000000000000, 0xeb23000000000000, 0x10e2000000000000, 0xfa0d000000000000, 0x36fb000000000000, 0xeb23000000000000, 0xaa51000000000000, 0x0000000111303471, 0x0000000110210000, 0xf4e7000000000000, 0x4347000000000000, 0x15b7000000000000, 0x9e3a000000000000, 0x8420000000000000, 0x9c1a000000000000, 0x9fe5000000000000, 0x78b3000000000000, 0xb8e0000000000000, 0xbd64000000000000, 0x45b4000000000000, 0x8ddc000000000000, 0x2093000000000000, 0x3f68000000000000, ]; pub const KEYS_6F63_FORWARD: [u64; 23] = [ 0x0000000000000000, 0xe601000000000000, 0xf83f000000000000, 0x29c0000000000000, 0xfa19000000000000, 0xe601000000000000, 0x4dd4000000000000, 0x000000017d0b9ecc, 0x000000016f630000, 0x5342000000000000, 0xa2b2000000000000, 0x14e0000000000000, 0xcabd000000000000, 0x29a1000000000000, 0x5159000000000000, 0x0a70000000000000, 0xd2ef000000000000, 0xa361000000000000, 0x9f1d000000000000, 0x0538000000000000, 0xdec6000000000000, 0x42c6000000000000, 0x0867000000000000, ]; pub const KEYS_5935_FORWARD: [u64; 23] = [ 0x0000000000000000, 0x0d0e000000000000, 0x5163000000000000, 0x1286000000000000, 0x1000000000000000, 0x0d0e000000000000, 0x5866000000000000, 0x000000014ce5c8be, 0x0000000159350000, 0xfb76000000000000, 0xdbdd000000000000, 0x250c000000000000, 0x2000000000000000, 0xafd9000000000000, 0xee8f000000000000, 0x4a18000000000000, 0x4000000000000000, 0x0687000000000000, 0x842b000000000000, 0x9430000000000000, 0x8000000000000000, 0xd0d9000000000000, 0x0100000000000000, ]; pub const KEYS_080B_REFLECTED: [u64; 23] = [ 0x0000000000000000, 0x000000000001986c, 0x0000000000006b98, 0x00000000000016a8, 0x0000000000011ef6, 0x000000000001986c, 0x00000000000170fa, 0x0000000180912421, 0x000000000001a021, 0x000000000001f852, 0x000000000001b176, 0x000000000000183c, 0x0000000000016ffc, 0x00000000000015f4, 0x0000000000003308, 0x00000000000018a4, 0x000000000000cd12, 0x0000000000010052, 0x000000000001faaa, 0x0000000000013e86, 0x0000000000009bc4, 0x0000000000005f3a, 0x000000000001c124, ]; pub const KEYS_755B_FORWARD: [u64; 23] = [ 0x0000000000000000, 0x0e5f000000000000, 0x21d3000000000000, 0x16bf000000000000, 0x8e20000000000000, 0x0e5f000000000000, 0x3c73000000000000, 0x0000000167c863d9, 0x00000001755b0000, 0xa8cb000000000000, 0x7562000000000000, 0x0f7d000000000000, 0x8c80000000000000, 0x6285000000000000, 0x8c37000000000000, 0x06a7000000000000, 0x937d000000000000, 0x9aac000000000000, 0xb5b7000000000000, 0xff2f000000000000, 0xf1df000000000000, 0x407d000000000000, 0x597e000000000000, ]; pub const KEYS_1DCF_FORWARD: [u64; 23] = [ 0x0000000000000000, 0x4ee2000000000000, 0x8462000000000000, 0xfe12000000000000, 0x2690000000000000, 0x4ee2000000000000, 0x19ae000000000000, 0x000000011c842752, 0x000000011dcf0000, 0xe047000000000000, 0x0ad2000000000000, 0x4c6c000000000000, 0xe7e9000000000000, 0x1940000000000000, 0x22a2000000000000, 0xaddd000000000000, 0x5fd5000000000000, 0x28c9000000000000, 0x6186000000000000, 0xeb76000000000000, 0x1db2000000000000, 0xa36b000000000000, 0x3557000000000000, ]; pub const KEYS_A097_FORWARD: [u64; 23] = [ 0x0000000000000000, 0x4c3f000000000000, 0xc8aa000000000000, 0x6e48000000000000, 0x6c83000000000000, 0x4c3f000000000000, 0xf15f000000000000, 0x00000001d31c0419, 0x00000001a0970000, 0x8cfa000000000000, 0x3a08000000000000, 0xff4f000000000000, 0x872c000000000000, 0xe3ac000000000000, 0x38d7000000000000, 0xd7ae000000000000, 0x5be1000000000000, 0xb5e1000000000000, 0x2a65000000000000, 0x2922000000000000, 0x7d9d000000000000, 0xf735000000000000, 0xb9e2000000000000, ]; pub const KEYS_8BB7_FORWARD: [u64; 23] = [ 0x0000000000000000, 0x2d56000000000000, // 2^(32* 3) mod Q << 32 0x06df000000000000, // 2^(32* 5) mod Q << 32 0x9d9d000000000000, // 2^(32*31) mod Q << 32 0x7cf5000000000000, // 2^(32*33) mod Q << 32 0x2d56000000000000, // 2^(32* 3) mod Q << 32 0x1368000000000000, // 2^(32* 2) mod Q << 32 0x00000001f65a57f8, // floor(2^64/Q) 0x000000018bb70000, // Q 0xceae000000000000, // 2^(32*27) mod Q << 32 0xbfd6000000000000, // 2^(32*29) mod Q << 32 0x1e16000000000000, // 2^(32*23) mod Q << 32 0x713c000000000000, // 2^(32*25) mod Q << 32 0xf7f9000000000000, // 2^(32*19) mod Q << 32 0x80a6000000000000, // 2^(32*21) mod Q << 32 0x044c000000000000, // 2^(32*15) mod Q << 32 0xe658000000000000, // 2^(32*17) mod Q << 32 0xad18000000000000, // 2^(32*11) mod Q << 32 0xa497000000000000, // 2^(32*13) mod Q << 32 0x6ee3000000000000, // 2^(32* 7) mod Q << 32 0xe7b5000000000000, // 2^(32* 9) mod Q << 32 0xdccf000000000000, // 2^(32*63) mod Q << 32 (256-byte folding) 0x4b0b000000000000, // 2^(32*65) mod Q << 32 (256-byte folding) ]; pub const KEYS_1021_REVERSE: [u64; 23] = [ 0x0000000000000000, 0x00000000000189ae, // (2^(32* 3) mod P(x))' << 1 0x0000000000008e10, // (2^(32* 5) mod P(x))' << 1 0x00000000000160be, // (2^(32*31) mod P(x))' << 1 0x000000000001bed8, // (2^(32*33) mod P(x))' << 1 0x00000000000189ae, // (2^(32* 3) mod P(x))' << 1 0x00000000000114aa, // (2^(32* 2) mod P(x))' << 1 0x000000011c581911, // (floor(2^64/P(x)))' 0x0000000000010811, // (P(x))' 0x000000000001ce5e, // (2^(32*27) mod P(x))' << 1 0x000000000001c584, // (2^(32*29) mod P(x))' << 1 0x000000000001db50, // (2^(32*23) mod P(x))' << 1 0x000000000000b8f2, // (2^(32*25) mod P(x))' << 1 0x0000000000000842, // (2^(32*19) mod P(x))' << 1 0x000000000000b072, // (2^(32*21) mod P(x))' << 1 0x0000000000014ff2, // (2^(32*15) mod P(x))' << 1 0x0000000000019a3c, // (2^(32*17) mod P(x))' << 1 0x0000000000000e3a, // (2^(32*11) mod P(x))' << 1 0x0000000000004d7a, // (2^(32*13) mod P(x))' << 1 0x0000000000005b44, // (2^(32* 7) mod P(x))' << 1 0x0000000000007762, // (2^(32* 9) mod P(x))' << 1 0x0000000000019208, // (2^(32*63) mod P(x))' << 1 (256-byte folding) 0x0000000000002df8, // (2^(32*65) mod P(x))' << 1 (256-byte folding) ]; crc-fast-1.10.0/src/crc16/mod.rs000064400000000000000000000262461046102023000142510ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. pub(crate) mod algorithm; pub(crate) mod consts; #[cfg(test)] mod property_tests { use crate::crc16::consts::{CRC16_IBM_SDLC, CRC16_T10_DIF}; use crate::test::consts::{RUST_CRC16_IBM_SDLC, RUST_CRC16_T10_DIF}; use crate::test::miri_compatible_proptest_config; use crate::{ checksum, checksum_combine, checksum_combine_with_params, checksum_with_params, CrcAlgorithm, CrcParams, }; use proptest::prelude::*; proptest! { #![proptest_config(miri_compatible_proptest_config())] /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference /// *For any* valid CRC-16 parameters (polynomial, init, refin, refout, xorout) and any /// input byte sequence, the computed CRC-16 checksum SHALL match the result from the /// `crc` crate reference implementation. /// **Validates: Requirements 2.1, 2.2, 5.5, 6.1, 6.2, 6.3** #[test] fn prop_crc16_ibm_sdlc_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { let our_result = checksum(CrcAlgorithm::Crc16IbmSdlc, &data); let reference_result = RUST_CRC16_IBM_SDLC.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-16/IBM-SDLC mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}", data.len(), our_result, reference_result ); } /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference /// *For any* valid CRC-16 parameters (polynomial, init, refin, refout, xorout) and any /// input byte sequence, the computed CRC-16 checksum SHALL match the result from the /// `crc` crate reference implementation. /// **Validates: Requirements 2.1, 2.2, 5.5, 6.1, 6.2, 6.3** #[test] fn prop_crc16_t10_dif_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { let our_result = checksum(CrcAlgorithm::Crc16T10Dif, &data); let reference_result = RUST_CRC16_T10_DIF.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-16/T10-DIF mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}", data.len(), our_result, reference_result ); } /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference /// Tests checksum_with_params for CRC-16/IBM-SDLC (reflected variant) /// **Validates: Requirements 5.5, 6.1, 6.2, 6.3** #[test] fn prop_crc16_ibm_sdlc_with_params_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { let our_result = checksum_with_params(CRC16_IBM_SDLC, &data); let reference_result = RUST_CRC16_IBM_SDLC.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-16/IBM-SDLC (with_params) mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}", data.len(), our_result, reference_result ); } /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference /// Tests checksum_with_params for CRC-16/T10-DIF (forward variant) /// **Validates: Requirements 5.5, 6.1, 6.2, 6.3** #[test] fn prop_crc16_t10_dif_with_params_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { let our_result = checksum_with_params(CRC16_T10_DIF, &data); let reference_result = RUST_CRC16_T10_DIF.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-16/T10-DIF (with_params) mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}", data.len(), our_result, reference_result ); } /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference /// Tests custom CRC-16 parameters (equivalent to IBM-SDLC) to validate CrcParams::new() /// **Validates: Requirements 5.5, 6.1, 6.2, 6.3** #[test] fn prop_crc16_custom_reflected_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { // Custom CRC-16 parameters equivalent to CRC-16/IBM-SDLC let custom_params = CrcParams::new( "CRC-16/CUSTOM-REFLECTED", 16, 0x1021, 0xFFFF, true, // reflected 0xFFFF, 0x906E, ); let our_result = checksum_with_params(custom_params, &data); let reference_result = RUST_CRC16_IBM_SDLC.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-16 custom reflected mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}", data.len(), our_result, reference_result ); } /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference /// Tests custom CRC-16 parameters (equivalent to T10-DIF) to validate CrcParams::new() /// **Validates: Requirements 5.5, 6.1, 6.2, 6.3** #[test] fn prop_crc16_custom_forward_matches_reference(data in proptest::collection::vec(any::(), 0..1024)) { // Custom CRC-16 parameters equivalent to CRC-16/T10-DIF let custom_params = CrcParams::new( "CRC-16/CUSTOM-FORWARD", 16, 0x8BB7, 0x0000, false, // forward (non-reflected) 0x0000, 0xD0DB, ); let our_result = checksum_with_params(custom_params, &data); let reference_result = RUST_CRC16_T10_DIF.checksum(&data) as u64; prop_assert_eq!( our_result, reference_result, "CRC-16 custom forward mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}", data.len(), our_result, reference_result ); } /// Feature: crc16-hardware-acceleration, Property 5: CRC-16 checksum combination round-trip /// *For any* valid CRC-16 parameters and any two input byte sequences A and B, /// `checksum_combine(checksum(A), checksum(B), len(B))` SHALL equal `checksum(A + B)`. /// **Validates: Requirements 6.4** #[test] fn prop_crc16_ibm_sdlc_checksum_combine_roundtrip( data_a in proptest::collection::vec(any::(), 0..512), data_b in proptest::collection::vec(any::(), 0..512) ) { let checksum_a = checksum(CrcAlgorithm::Crc16IbmSdlc, &data_a); let checksum_b = checksum(CrcAlgorithm::Crc16IbmSdlc, &data_b); let combined = checksum_combine( CrcAlgorithm::Crc16IbmSdlc, checksum_a, checksum_b, data_b.len() as u64, ); let mut concatenated = data_a.clone(); concatenated.extend(&data_b); let expected = checksum(CrcAlgorithm::Crc16IbmSdlc, &concatenated); prop_assert_eq!( combined, expected, "CRC-16/IBM-SDLC combine mismatch: combined=0x{:04X}, expected=0x{:04X}, len_a={}, len_b={}", combined, expected, data_a.len(), data_b.len() ); } /// Feature: crc16-hardware-acceleration, Property 5: CRC-16 checksum combination round-trip /// *For any* valid CRC-16 parameters and any two input byte sequences A and B, /// `checksum_combine(checksum(A), checksum(B), len(B))` SHALL equal `checksum(A + B)`. /// **Validates: Requirements 6.4** #[test] fn prop_crc16_t10_dif_checksum_combine_roundtrip( data_a in proptest::collection::vec(any::(), 0..512), data_b in proptest::collection::vec(any::(), 0..512) ) { let checksum_a = checksum(CrcAlgorithm::Crc16T10Dif, &data_a); let checksum_b = checksum(CrcAlgorithm::Crc16T10Dif, &data_b); let combined = checksum_combine( CrcAlgorithm::Crc16T10Dif, checksum_a, checksum_b, data_b.len() as u64, ); let mut concatenated = data_a.clone(); concatenated.extend(&data_b); let expected = checksum(CrcAlgorithm::Crc16T10Dif, &concatenated); prop_assert_eq!( combined, expected, "CRC-16/T10-DIF combine mismatch: combined=0x{:04X}, expected=0x{:04X}, len_a={}, len_b={}", combined, expected, data_a.len(), data_b.len() ); } /// Feature: crc16-hardware-acceleration, Property 5: CRC-16 checksum combination round-trip /// Tests checksum_combine_with_params for CRC-16/IBM-SDLC /// **Validates: Requirements 6.4** #[test] fn prop_crc16_ibm_sdlc_checksum_combine_with_params_roundtrip( data_a in proptest::collection::vec(any::(), 0..512), data_b in proptest::collection::vec(any::(), 0..512) ) { let checksum_a = checksum_with_params(CRC16_IBM_SDLC, &data_a); let checksum_b = checksum_with_params(CRC16_IBM_SDLC, &data_b); let combined = checksum_combine_with_params( CRC16_IBM_SDLC, checksum_a, checksum_b, data_b.len() as u64, ); let mut concatenated = data_a.clone(); concatenated.extend(&data_b); let expected = checksum_with_params(CRC16_IBM_SDLC, &concatenated); prop_assert_eq!( combined, expected, "CRC-16/IBM-SDLC combine_with_params mismatch: combined=0x{:04X}, expected=0x{:04X}, len_a={}, len_b={}", combined, expected, data_a.len(), data_b.len() ); } /// Feature: crc16-hardware-acceleration, Property 5: CRC-16 checksum combination round-trip /// Tests checksum_combine_with_params for CRC-16/T10-DIF /// **Validates: Requirements 6.4** #[test] fn prop_crc16_t10_dif_checksum_combine_with_params_roundtrip( data_a in proptest::collection::vec(any::(), 0..512), data_b in proptest::collection::vec(any::(), 0..512) ) { let checksum_a = checksum_with_params(CRC16_T10_DIF, &data_a); let checksum_b = checksum_with_params(CRC16_T10_DIF, &data_b); let combined = checksum_combine_with_params( CRC16_T10_DIF, checksum_a, checksum_b, data_b.len() as u64, ); let mut concatenated = data_a.clone(); concatenated.extend(&data_b); let expected = checksum_with_params(CRC16_T10_DIF, &concatenated); prop_assert_eq!( combined, expected, "CRC-16/T10-DIF combine_with_params mismatch: combined=0x{:04X}, expected=0x{:04X}, len_a={}, len_b={}", combined, expected, data_a.len(), data_b.len() ); } } } crc-fast-1.10.0/src/crc32/algorithm.rs000064400000000000000000000103751046102023000154520ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides the CRC-32 algorithm implementations for areas where it differs from //! CRC-64. #![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] use crate::enums::Reflector; use crate::structs::CrcState; use crate::traits::{ArchOps, EnhancedCrcWidth}; impl EnhancedCrcWidth for crate::structs::Width32 { #[inline(always)] fn load_constants(reflected: bool) -> [[u64; 2]; 4] { crate::crc32::width32_ops::load_constants(reflected) } #[inline(always)] unsafe fn create_state( value: Self::Value, reflected: bool, ops: &T, ) -> CrcState where T::Vector: Copy, { let vector = if reflected { // For reflected mode, state goes in the low 32 bits ops.create_vector_from_u32(value, false) } else { // For non-reflected mode, state goes in high 32 bits of the // high 64-bit part of the 128-bit register (need to shift 12 bytes) ops.create_vector_from_u32(value, true) }; CrcState { value: vector, reflected, } } #[inline(always)] unsafe fn extract_result(vector: T::Vector, reflected: bool, ops: &T) -> Self::Value where T::Vector: Copy, { // Extract u64s from the vector let u64s = ops.extract_u64s(vector); if reflected { // In reflected mode, the result is in the low 32 bits of the low 64 bits u64s[0] as u32 } else { // In non-reflected mode, the result is in the high 32 bits of the low 64 bits (u64s[1] >> 32) as u32 } } #[inline(always)] unsafe fn fold_16( state: &mut CrcState, coeff: T::Vector, data_to_xor: T::Vector, ops: &T, ) where T::Vector: Copy, { crate::crc32::width32_ops::fold_16(state, coeff, data_to_xor, ops) } /// CRC-32 specific implementation for folding 8 bytes to 4 bytes #[inline(always)] unsafe fn fold_width(state: &mut CrcState, high: u64, low: u64, ops: &T) where T::Vector: Copy, { crate::crc32::width32_ops::fold_width(state, high, low, ops) } #[inline(always)] unsafe fn barrett_reduction( state: &CrcState, poly: u64, mu: u64, ops: &T, ) -> Self::Value where T::Vector: Copy, { let u64s = crate::crc32::width32_ops::barrett_reduction(state, poly, mu, ops); if state.reflected { u64s[1] as u32 } else { (u64s[0] >> 32) as u32 } } #[inline(always)] unsafe fn create_coefficient( high: u64, low: u64, _reflected: bool, ops: &T, ) -> T::Vector where T::Vector: Copy, { crate::crc32::width32_ops::create_coefficient(high, low, ops) } #[inline(always)] unsafe fn perform_final_reduction( state: T::Vector, reflected: bool, keys: &[u64; 23], ops: &T, ) -> Self::Value where T::Vector: Copy, { let u64s = crate::crc32::width32_ops::perform_final_reduction(state, reflected, keys, ops); if reflected { u64s[1] as u32 } else { (u64s[0] >> 32) as u32 } } #[inline(always)] fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize) { crate::crc32::width32_ops::get_last_bytes_table_ptr(reflected, remaining_len) } } /// Process inputs smaller than 16 bytes #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] pub(crate) unsafe fn process_0_to_15( data: &[u8], state: &mut CrcState, reflector: &Reflector, keys: &[u64; 23], ops: &T, ) -> W::Value where T::Vector: Copy, { crate::crc32::width32_ops::process_0_to_15::(data, state, reflector, keys, ops) } crc-fast-1.10.0/src/crc32/consts.rs000064400000000000000000000445531046102023000150020ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. #![allow(dead_code)] use crate::consts::{ NAME_CRC32_AIXM, NAME_CRC32_AUTOSAR, NAME_CRC32_BASE91_D, NAME_CRC32_BZIP2, NAME_CRC32_CD_ROM_EDC, NAME_CRC32_CKSUM, NAME_CRC32_ISCSI, NAME_CRC32_ISO_HDLC, NAME_CRC32_JAMCRC, NAME_CRC32_MEF, NAME_CRC32_MPEG_2, NAME_CRC32_XFER, }; use crate::structs::Algorithm; use crate::CrcAlgorithm; use crate::CrcParams; pub const CRC_32_AIXM: Algorithm = Algorithm { width: 32, poly: 0x814141ab, init: 0x0, refin: false, refout: false, xorout: 0x0, check: 0x3010bf7f, residue: 0x0, }; pub const CRC_32_AUTOSAR: Algorithm = Algorithm { width: 32, poly: 0xf4acfb13, init: 0xffffffff, refin: true, refout: true, xorout: 0xffffffff, check: 0x1697d06a, residue: 0x904cddbf, }; pub const CRC_32_BASE91_D: Algorithm = Algorithm { width: 32, poly: 0xa833982b, init: 0xffffffff, refin: true, refout: true, xorout: 0xffffffff, check: 0x87315576, residue: 0x45270551, }; pub const CRC_32_BZIP2: Algorithm = Algorithm { width: 32, poly: 0x4c11db7, init: 0xffffffff, refin: false, refout: false, xorout: 0xffffffff, check: 0xfc891918, residue: 0xc704dd7b, }; pub const CRC_32_CD_ROM_EDC: Algorithm = Algorithm { width: 32, poly: 0x8001801b, init: 0x0, refin: true, refout: true, xorout: 0x0, check: 0x6ec2edc4, residue: 0x0, }; pub const CRC_32_CKSUM: Algorithm = Algorithm { width: 32, poly: 0x4c11db7, init: 0x0, refin: false, refout: false, xorout: 0xffffffff, check: 0x765e7680, residue: 0xc704dd7b, }; pub const CRC_32_ISCSI: Algorithm = Algorithm { width: 32, poly: 0x1edc6f41, init: 0xffffffff, refin: true, refout: true, xorout: 0xffffffff, check: 0xe3069283, residue: 0xb798b438, }; pub const CRC_32_ISO_HDLC: Algorithm = Algorithm { width: 32, poly: 0x4c11db7, init: 0xffffffff, refin: true, refout: true, xorout: 0xffffffff, check: 0xcbf43926, residue: 0xdebb20e3, }; pub const CRC_32_JAMCRC: Algorithm = Algorithm { width: 32, poly: 0x4c11db7, init: 0xffffffff, refin: true, refout: true, xorout: 0x0, check: 0x340bc6d9, residue: 0x0, }; pub const CRC_32_MEF: Algorithm = Algorithm { width: 32, poly: 0x741b8cd7, init: 0xffffffff, refin: true, refout: true, xorout: 0x0, check: 0xd2c22f51, residue: 0x0, }; pub const CRC_32_MPEG_2: Algorithm = Algorithm { width: 32, poly: 0x4c11db7, init: 0xffffffff, refin: false, refout: false, xorout: 0x0, check: 0x376e6e7, residue: 0x0, }; pub const CRC_32_XFER: Algorithm = Algorithm { width: 32, poly: 0xaf, init: 0x0, refin: false, refout: false, xorout: 0x0, check: 0xbd0be338, residue: 0x0, }; // width=32 poly=0x814141ab init=0x00000000 refin=false refout=false xorout=0x00000000 check=0x3010bf7f residue=0x00000000 name="CRC-32/AIXM" pub const CRC32_AIXM: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32Aixm, name: NAME_CRC32_AIXM, width: 32, poly: CRC_32_AIXM.poly as u64, init: CRC_32_AIXM.init as u64, init_algorithm: CRC_32_AIXM.init as u64, refin: CRC_32_AIXM.refin, // false refout: CRC_32_AIXM.refout, // false xorout: CRC_32_AIXM.xorout as u64, check: CRC_32_AIXM.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_814141AB_FORWARD), }; // width=32 poly=0xf4acfb13 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0x1697d06a residue=0x904cddbf name="CRC-32/AUTOSAR" pub const CRC32_AUTOSAR: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32Autosar, name: NAME_CRC32_AUTOSAR, width: 32, poly: CRC_32_AUTOSAR.poly as u64, init: CRC_32_AUTOSAR.init as u64, init_algorithm: CRC_32_AUTOSAR.init as u64, refin: CRC_32_AUTOSAR.refin, // true refout: CRC_32_AUTOSAR.refout, // true xorout: CRC_32_AUTOSAR.xorout as u64, check: CRC_32_AUTOSAR.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_F4ACFB13_REFLECTED), }; // width=32 poly=0xa833982b init=0xffffffff refin=true refout=true xorout=0xffffffff check=0x87315576 residue=0x45270551 name="CRC-32/BASE91-D" pub const CRC32_BASE91_D: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32Base91D, name: NAME_CRC32_BASE91_D, width: 32, poly: CRC_32_BASE91_D.poly as u64, init: CRC_32_BASE91_D.init as u64, init_algorithm: CRC_32_BASE91_D.init as u64, refin: CRC_32_BASE91_D.refin, // true refout: CRC_32_BASE91_D.refout, // true xorout: CRC_32_BASE91_D.xorout as u64, check: CRC_32_BASE91_D.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_A833982B_REFLECTED), }; // width=32 poly=0x04c11db7 init=0xffffffff refin=false refout=false xorout=0xffffffff check=0xfc891918 residue=0xc704dd7b name="CRC-32/BZIP2" pub const CRC32_BZIP2: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32Bzip2, name: NAME_CRC32_BZIP2, width: 32, poly: CRC_32_BZIP2.poly as u64, init: CRC_32_BZIP2.init as u64, init_algorithm: CRC_32_BZIP2.init as u64, refin: CRC_32_BZIP2.refin, // false refout: CRC_32_BZIP2.refout, // false xorout: CRC_32_BZIP2.xorout as u64, check: CRC_32_BZIP2.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_04C11DB7_FORWARD), }; // width=32 poly=0x8001801b init=0x00000000 refin=true refout=true xorout=0x00000000 check=0x6ec2edc4 residue=0x00000000 name="CRC-32/CD-ROM-EDC" pub const CRC32_CD_ROM_EDC: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32CdRomEdc, name: NAME_CRC32_CD_ROM_EDC, width: 32, poly: CRC_32_CD_ROM_EDC.poly as u64, init: CRC_32_CD_ROM_EDC.init as u64, init_algorithm: CRC_32_CD_ROM_EDC.init as u64, refin: CRC_32_CD_ROM_EDC.refin, // true refout: CRC_32_CD_ROM_EDC.refout, // true xorout: CRC_32_CD_ROM_EDC.xorout as u64, check: CRC_32_CD_ROM_EDC.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8001801B_REFLECTED), }; // width=32 poly=0x04c11db7 init=0x00000000 refin=false refout=false xorout=0xffffffff check=0x765e7680 residue=0xc704dd7b name="CRC-32/CKSUM" pub const CRC32_CKSUM: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32Cksum, name: NAME_CRC32_CKSUM, width: 32, poly: CRC_32_CKSUM.poly as u64, init: CRC_32_CKSUM.init as u64, init_algorithm: CRC_32_CKSUM.init as u64, refin: CRC_32_CKSUM.refin, // false refout: CRC_32_CKSUM.refout, // false xorout: CRC_32_CKSUM.xorout as u64, check: CRC_32_CKSUM.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_04C11DB7_FORWARD), }; // width=32 poly=0x1edc6f41 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0xe3069283 residue=0xb798b438 name="CRC-32/ISCSI" pub const CRC32_ISCSI: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32Iscsi, name: NAME_CRC32_ISCSI, width: 32, poly: CRC_32_ISCSI.poly as u64, init: CRC_32_ISCSI.init as u64, init_algorithm: CRC_32_ISCSI.init as u64, refin: CRC_32_ISCSI.refin, // true refout: CRC_32_ISCSI.refout, // true xorout: CRC_32_ISCSI.xorout as u64, check: CRC_32_ISCSI.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1EDC6F41_REFLECTED), }; // width=32 poly=0x04c11db7 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0xcbf43926 residue=0xdebb20e3 name="CRC-32/ISO-HDLC" pub const CRC32_ISO_HDLC: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32IsoHdlc, name: NAME_CRC32_ISO_HDLC, width: 32, poly: CRC_32_ISO_HDLC.poly as u64, init: CRC_32_ISO_HDLC.init as u64, init_algorithm: CRC_32_ISO_HDLC.init as u64, refin: CRC_32_ISO_HDLC.refin, // true refout: CRC_32_ISO_HDLC.refout, // true xorout: CRC_32_ISO_HDLC.xorout as u64, check: CRC_32_ISO_HDLC.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_04C11DB7_REFLECTED), }; // width=32 poly=0x04c11db7 init=0xffffffff refin=true refout=true xorout=0x00000000 check=0x340bc6d9 residue=0x00000000 name="CRC-32/JAMCRC" pub const CRC32_JAMCRC: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32Jamcrc, name: NAME_CRC32_JAMCRC, width: 32, poly: CRC_32_JAMCRC.poly as u64, init: CRC_32_JAMCRC.init as u64, init_algorithm: CRC_32_JAMCRC.init as u64, refin: CRC_32_JAMCRC.refin, // true refout: CRC_32_JAMCRC.refout, // true xorout: CRC_32_JAMCRC.xorout as u64, check: CRC_32_JAMCRC.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_04C11DB7_REFLECTED), }; // width=32 poly=0x741b8cd7 init=0xffffffff refin=true refout=true xorout=0x00000000 check=0xd2c22f51 residue=0x00000000 name="CRC-32/MEF" pub const CRC32_MEF: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32Mef, name: NAME_CRC32_MEF, width: 32, poly: CRC_32_MEF.poly as u64, init: CRC_32_MEF.init as u64, init_algorithm: CRC_32_MEF.init as u64, refin: CRC_32_MEF.refin, // true refout: CRC_32_MEF.refout, // true xorout: CRC_32_MEF.xorout as u64, check: CRC_32_MEF.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_741B8CD7_REFLECTED), }; // width=32 poly=0x04c11db7 init=0xffffffff refin=false refout=false xorout=0x00000000 check=0x0376e6e7 residue=0x00000000 name="CRC-32/MPEG-2" pub const CRC32_MPEG_2: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32Mpeg2, name: NAME_CRC32_MPEG_2, width: 32, poly: CRC_32_MPEG_2.poly as u64, init: CRC_32_MPEG_2.init as u64, init_algorithm: CRC_32_MPEG_2.init as u64, refin: CRC_32_MPEG_2.refin, // false refout: CRC_32_MPEG_2.refout, // false xorout: CRC_32_MPEG_2.xorout as u64, check: CRC_32_MPEG_2.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_04C11DB7_FORWARD), }; // width=32 poly=0x000000af init=0x00000000 refin=false refout=false xorout=0x00000000 check=0xbd0be338 residue=0x00000000 name="CRC-32/XFER" pub const CRC32_XFER: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32Xfer, name: NAME_CRC32_XFER, width: 32, poly: CRC_32_XFER.poly as u64, init: CRC_32_XFER.init as u64, init_algorithm: CRC_32_XFER.init as u64, refin: CRC_32_XFER.refin, // false refout: CRC_32_XFER.refout, // false xorout: CRC_32_XFER.xorout as u64, check: CRC_32_XFER.check as u64, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_000000AF_FORWARD), }; // CRC-32/AIXM pub const KEYS_814141AB_FORWARD: [u64; 23] = [ 0x0000000000000000, 0x9be9878f00000000, 0x85b2a6e400000000, 0x2aa81be300000000, 0xa488a24c00000000, 0x9be9878f00000000, 0xb1efc5f600000000, 0x00000001feff7f62, 0x00000001814141ab, 0x143b9cd200000000, 0x9853011900000000, 0x7836e63a00000000, 0xaa29818100000000, 0x3bd96ca700000000, 0x60205cd400000000, 0x74f21e8b00000000, 0x3540871b00000000, 0x0442099000000000, 0x361f380200000000, 0x6757ee2f00000000, 0xffc42e7700000000, 0xd12a88300000000, 0x93a03b8800000000, ]; // CRC-32/AUTOSAR pub const KEYS_F4ACFB13_REFLECTED: [u64; 23] = [ 0x0000000000000000, 0x000000016130902a, 0x0000000050428a9c, 0x000000010b1e9a08, 0x00000000d77bb854, 0x000000016130902a, 0x00000001b0d566c0, 0x000000013cfdbf23, 0x0000000191be6a5f, 0x00000000b105f098, 0x00000001b260c18a, 0x00000001b0d68118, 0x00000000c6f0b5d2, 0x00000000ce9a9f48, 0x00000000fc24cbf6, 0x0000000018c71228, 0x000000014b462960, 0x00000001848ecbce, 0x0000000049cb6c68, 0x00000000c9d55d76, 0x0000000022919656, 0x00000001e97b6a9e, 0x00000000000cbd7c, ]; // CRC-32/BASE91-D pub const KEYS_A833982B_REFLECTED: [u64; 23] = [ 0x0000000000000000, 0x00000001e065d896, 0x00000001aca6d990, 0x000000007ec6845e, 0x000000009aa0f3be, 0x00000001e065d896, 0x00000000cf690ff2, 0x000000009167fd37, 0x00000001a833982b, 0x00000001f0023e48, 0x0000000054bacd0c, 0x00000001677129ba, 0x00000000ac52eee8, 0x0000000068be1470, 0x000000017208fc52, 0x00000001c2e169fc, 0x0000000122f9bd98, 0x0000000192d6d10c, 0x00000001942367fa, 0x00000000c2044564, 0x00000001a07ba234, 0x000000010ffc58e6, 0x000000015920d7a6, ]; // CRC-32/CD-ROM-EDC pub const KEYS_8001801B_REFLECTED: [u64; 23] = [ 0x0000000000000000, 0x00000001d5934102, 0x000000006c90c100, 0x00000001fbea69a0, 0x000000006500d000, 0x00000001d5934102, 0x00000001f1030002, 0x000000017000ffff, 0x00000001b0030003, 0x0000000178be62fe, 0x00000001353195ce, 0x0000000085a25e78, 0x00000000a23c9cc0, 0x000000005ead8550, 0x00000001eab75dd2, 0x000000012e7928a2, 0x00000001f8931102, 0x0000000086acf0c0, 0x00000001517f91c2, 0x00000001f75a6182, 0x00000000bd01c000, 0x00000001bcb30820, 0x000000010d925102, ]; // CRC-32/MEF pub const KEYS_741B8CD7_REFLECTED: [u64; 23] = [ 0x0000000000000000, 0x000000014b0602f8, 0x000000007b4bc878, 0x0000000023b08408, 0x00000001e9bbe8a4, 0x000000014b0602f8, 0x0000000018c5564c, 0x0000000017d232cd, 0x00000001d663b05d, 0x00000001f5dbe222, 0x00000001290fe3ca, 0x00000000048d6a82, 0x0000000063b45844, 0x00000001a9b7f536, 0x0000000190afdbca, 0x00000000be6d8f38, 0x00000001c06a9816, 0x00000001b5a46922, 0x0000000097259f1a, 0x00000000adfa5198, 0x000000009c899030, 0x00000001adf2908e, 0x00000001f91b48f0, ]; // CRC-32/XFER pub const KEYS_000000AF_FORWARD: [u64; 23] = [ 0x0000000000000000, 0x00295f2300000000, 0xfafa517900000000, 0x5cd86bb500000000, 0xaf6f37a300000000, 0x00295f2300000000, 0x0000445500000000, 0x00000001000000af, 0x00000001000000af, 0x9bd57b5d00000000, 0xb7a4d76400000000, 0x1ae0004200000000, 0xe7720be600000000, 0x9c7fc8fe00000000, 0x3885faf800000000, 0xb477ad7100000000, 0x0ac2ae3d00000000, 0x5eae9dbe00000000, 0x784a483800000000, 0x7d21bf2000000000, 0xfaebd3d300000000, 0x25ed382b00000000, 0x6d2b811a00000000, ]; // CRC-32/ISO-HDLC (aka 'crc32'), CRC-32/JAMCRC const KEYS_04C11DB7_REFLECTED: [u64; 23] = [ 0x0000000000000000, // unused placeholder to match 1-based indexing 0x00000000ccaa009e, // (2^(32* 3) mod P(x))' << 1 0x00000001751997d0, // (2^(32* 5) mod P(x))' << 1 0x000000014a7fe880, // (2^(32*31) mod P(x))' << 1 0x00000001e88ef372, // (2^(32*33) mod P(x))' << 1 0x00000000ccaa009e, // (2^(32* 3) mod P(x))' << 1 0x0000000163cd6124, // (2^(32* 2) mod P(x))' << 1 0x00000001f7011641, // (floor(2^64/P(x)))' 0x00000001db710641, // (P(x))' 0x00000001d7cfc6ac, // (2^(32*27) mod P(x))' << 1 0x00000001ea89367e, // (2^(32*29) mod P(x))' << 1 0x000000018cb44e58, // (2^(32*23) mod P(x))' << 1 0x00000000df068dc2, // (2^(32*25) mod P(x))' << 1 0x00000000ae0b5394, // (2^(32*19) mod P(x))' << 1 0x00000001c7569e54, // (2^(32*21) mod P(x))' << 1 0x00000001c6e41596, // (2^(32*15) mod P(x))' << 1 0x0000000154442bd4, // (2^(32*17) mod P(x))' << 1 0x0000000174359406, // (2^(32*11) mod P(x))' << 1 0x000000003db1ecdc, // (2^(32*13) mod P(x))' << 1 0x000000015a546366, // (2^(32* 7) mod P(x))' << 1 0x00000000f1da05aa, // (2^(32* 9) mod P(x))' << 1 0x00000001322d1430, 0x000000011542778a, ]; // CRC-32/ISCSI (aka 'crc32c') const KEYS_1EDC6F41_REFLECTED: [u64; 23] = [ 0x0000000000000000, // unused placeholder to match 1-based indexing 0x000000014cd00bd6, // (2^(32* 3) mod P(x))' << 1 0x00000000f20c0dfe, // (2^(32* 5) mod P(x))' << 1 0x000000000d3b6092, // (2^(32*31) mod P(x))' << 1 0x000000006992cea2, // (2^(32*33) mod P(x))' << 1 0x000000014cd00bd6, // (2^(32* 3) mod P(x))' << 1 0x00000000dd45aab8, // (2^(32* 2) mod P(x))' << 1 0x00000000dea713f1, // (floor(2^64/P(x)))' 0x0000000105ec76f1, // (P(x))' 0x000000014237f5e6, // (2^(32*27) mod P(x))' << 1 0x000000002ad91c30, // (2^(32*29) mod P(x))' << 1 0x0000000102f9b8a2, // (2^(32*23) mod P(x))' << 1 0x00000001c1733996, // (2^(32*25) mod P(x))' << 1 0x0000000039d3b296, // (2^(32*19) mod P(x))' << 1 0x00000000083a6eec, // (2^(32*21) mod P(x))' << 1 0x000000009e4addf8, // (2^(32*15) mod P(x))' << 1 0x00000000740eef02, // (2^(32*17) mod P(x))' << 1 0x00000001d82c63da, // (2^(32*11) mod P(x))' << 1 0x000000001c291d04, // (2^(32*13) mod P(x))' << 1 0x00000000ba4fc28e, // (2^(32* 7) mod P(x))' << 1 0x00000001384aa63a, // (2^(32* 9) mod P(x))' << 1 0x00000000b9e02b86, 0x00000000dcb17aa4, ]; // CRC-32/BZIP2, CRC-32/CKSUM, CRC-32/MPEG-2 const KEYS_04C11DB7_FORWARD: [u64; 23] = [ 0x0000000000000000, // unused placeholder to match 1-based indexing 0xf200aa6600000000, // 2^(32* 3) mod P(x) << 32 0x17d3315d00000000, // 2^(32* 5) mod P(x) << 32 0x022ffca500000000, // 2^(32*31) mod P(x) << 32 0x9d9ee22f00000000, // 2^(32*33) mod P(x) << 32 0xf200aa6600000000, // 2^(32* 3) mod P(x) << 32 0x490d678d00000000, // 2^(32* 2) mod P(x) << 32 0x0000000104d101df, // floor(2^64/P(x)) 0x0000000104c11db7, // P(x) 0x6ac7e7d700000000, // 2^(32*27) mod P(x) << 32 0xfcd922af00000000, // 2^(32*29) mod P(x) << 32 0x34e45a6300000000, // 2^(32*23) mod P(x) << 32 0x8762c1f600000000, // 2^(32*25) mod P(x) << 32 0x5395a0ea00000000, // 2^(32*19) mod P(x) << 32 0x54f2d5c700000000, // 2^(32*21) mod P(x) << 32 0xd3504ec700000000, // 2^(32*15) mod P(x) << 32 0x57a8445500000000, // 2^(32*17) mod P(x) << 32 0xc053585d00000000, // 2^(32*11) mod P(x) << 32 0x766f1b7800000000, // 2^(32*13) mod P(x) << 32 0xcd8c54b500000000, // 2^(32* 7) mod P(x) << 32 0xab40b71e00000000, // 2^(32* 9) mod P(x) << 32 0x1851689900000000, 0xa3dc855100000000, ]; pub(crate) const SIMD_CONSTANTS: [[u64; 2]; 4] = [ [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask [0x8080808080808080, 0x8080808080808080], // mask1 [0xffffffffffffffff, 0x00000000ffffffff], // mask2 forward [0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF], // mask2 reverse ]; pub(crate) const PSHUFB_SHF_TABLE_REVERSE: [[u64; 2]; 2] = [ [0x0706050403020100, 0x0f0e0d0c0b0a0908], [0x8786858483828180, 0x8f8e8d8c8b8a8988], ]; pub(crate) const PSHUFB_SHF_TABLE_FORWARD: [[u64; 2]; 2] = [ [0x8786858483828100, 0x8f8e8d8c8b8a8988], [0x0706050403020100, 0x0f0e0d0c0b0a0908], ]; crc-fast-1.10.0/src/crc32/fusion/aarch64/iscsi/crc_pmull.rs000064400000000000000000000152331046102023000213070ustar 00000000000000//! Provides CRC-32/ISCSI calculations using a fusion of native CLMUL //! instructions and native CRC calculation instructions on aarch64. //! //! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/ //! //! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ //! with the help of Claude.ai. //! //! Modified as necessary for this Rust implementation. //! //! MIT licensed. #![cfg(target_arch = "aarch64")] use crate::crc32::fusion::aarch64::{clmul_hi_and_xor, clmul_lo_and_xor}; use core::arch::aarch64::{ __crc32cb, __crc32cd, veorq_u64, vgetq_lane_u64, vld1q_u64, vmovq_n_u64, vsetq_lane_u64, }; /// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ /// with the help of Claude.ai using: /// /// ./generate -i neon -p crc32c -a v12e_v1 /// /// Modified as necessary for this Rust implementation. #[inline] #[target_feature(enable = "crc,aes")] pub(crate) unsafe fn crc32_iscsi_v12e_v1(mut crc0: u32, mut buf: *const u8, mut len: usize) -> u32 { // Align to 8-byte boundary while len > 0 && (buf as usize & 7) != 0 { crc0 = __crc32cb(crc0, *buf); buf = buf.add(1); len -= 1; } // Handle 8-byte alignment if (buf as usize & 8) != 0 && len >= 8 { crc0 = __crc32cd(crc0, *(buf as *const u64)); buf = buf.add(8); len -= 8; } if len >= 192 { let end = buf.add(len); let limit = buf.add(len - 192); // First vector chunk let mut x0 = vld1q_u64(buf as *const u64); let mut x1 = vld1q_u64(buf.add(16) as *const u64); let mut x2 = vld1q_u64(buf.add(32) as *const u64); let mut x3 = vld1q_u64(buf.add(48) as *const u64); let mut x4 = vld1q_u64(buf.add(64) as *const u64); let mut x5 = vld1q_u64(buf.add(80) as *const u64); let mut x6 = vld1q_u64(buf.add(96) as *const u64); let mut x7 = vld1q_u64(buf.add(112) as *const u64); let mut x8 = vld1q_u64(buf.add(128) as *const u64); let mut x9 = vld1q_u64(buf.add(144) as *const u64); let mut x10 = vld1q_u64(buf.add(160) as *const u64); let mut x11 = vld1q_u64(buf.add(176) as *const u64); let k_vals: [u64; 2] = [0xa87ab8a8, 0xab7aff2a]; let mut k = vld1q_u64(k_vals.as_ptr()); // Create CRC vector and XOR with first vector let crc_vec = vsetq_lane_u64(crc0 as u64, vmovq_n_u64(0), 0); x0 = veorq_u64(crc_vec, x0); buf = buf.add(192); // Main loop while buf <= limit { let y0 = clmul_lo_and_xor(x0, k, vld1q_u64(buf as *const u64)); x0 = clmul_hi_and_xor(x0, k, y0); let y1 = clmul_lo_and_xor(x1, k, vld1q_u64(buf.add(16) as *const u64)); x1 = clmul_hi_and_xor(x1, k, y1); let y2 = clmul_lo_and_xor(x2, k, vld1q_u64(buf.add(32) as *const u64)); x2 = clmul_hi_and_xor(x2, k, y2); let y3 = clmul_lo_and_xor(x3, k, vld1q_u64(buf.add(48) as *const u64)); x3 = clmul_hi_and_xor(x3, k, y3); let y4 = clmul_lo_and_xor(x4, k, vld1q_u64(buf.add(64) as *const u64)); x4 = clmul_hi_and_xor(x4, k, y4); let y5 = clmul_lo_and_xor(x5, k, vld1q_u64(buf.add(80) as *const u64)); x5 = clmul_hi_and_xor(x5, k, y5); let y6 = clmul_lo_and_xor(x6, k, vld1q_u64(buf.add(96) as *const u64)); x6 = clmul_hi_and_xor(x6, k, y6); let y7 = clmul_lo_and_xor(x7, k, vld1q_u64(buf.add(112) as *const u64)); x7 = clmul_hi_and_xor(x7, k, y7); let y8 = clmul_lo_and_xor(x8, k, vld1q_u64(buf.add(128) as *const u64)); x8 = clmul_hi_and_xor(x8, k, y8); let y9 = clmul_lo_and_xor(x9, k, vld1q_u64(buf.add(144) as *const u64)); x9 = clmul_hi_and_xor(x9, k, y9); let y10 = clmul_lo_and_xor(x10, k, vld1q_u64(buf.add(160) as *const u64)); x10 = clmul_hi_and_xor(x10, k, y10); let y11 = clmul_lo_and_xor(x11, k, vld1q_u64(buf.add(176) as *const u64)); x11 = clmul_hi_and_xor(x11, k, y11); buf = buf.add(192); } // Reduce x0 ... x11 to just x0 let k_vals: [u64; 2] = [0xf20c0dfe, 0x493c7d27]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo_and_xor(x0, k, x1); x0 = clmul_hi_and_xor(x0, k, y0); let y2 = clmul_lo_and_xor(x2, k, x3); x2 = clmul_hi_and_xor(x2, k, y2); let y4 = clmul_lo_and_xor(x4, k, x5); x4 = clmul_hi_and_xor(x4, k, y4); let y6 = clmul_lo_and_xor(x6, k, x7); x6 = clmul_hi_and_xor(x6, k, y6); let y8 = clmul_lo_and_xor(x8, k, x9); x8 = clmul_hi_and_xor(x8, k, y8); let y10 = clmul_lo_and_xor(x10, k, x11); x10 = clmul_hi_and_xor(x10, k, y10); let k_vals: [u64; 2] = [0x3da6d0cb, 0xba4fc28e]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo_and_xor(x0, k, x2); x0 = clmul_hi_and_xor(x0, k, y0); let y4 = clmul_lo_and_xor(x4, k, x6); x4 = clmul_hi_and_xor(x4, k, y4); let y8 = clmul_lo_and_xor(x8, k, x10); x8 = clmul_hi_and_xor(x8, k, y8); let k_vals: [u64; 2] = [0x740eef02, 0x9e4addf8]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo_and_xor(x0, k, x4); x0 = clmul_hi_and_xor(x0, k, y0); x4 = x8; let y0 = clmul_lo_and_xor(x0, k, x4); x0 = clmul_hi_and_xor(x0, k, y0); // Reduce 128 bits to 32 bits, and multiply by x^32 crc0 = __crc32cd(0, vgetq_lane_u64(x0, 0)); crc0 = __crc32cd(crc0, vgetq_lane_u64(x0, 1)); len = end.offset_from(buf) as usize; } if len >= 16 { // First vector chunk let mut x0 = vld1q_u64(buf as *const u64); let k_vals: [u64; 2] = [0xf20c0dfe, 0x493c7d27]; let k = vld1q_u64(k_vals.as_ptr()); // Create CRC vector and XOR with first vector let crc_vec = vsetq_lane_u64(crc0 as u64, vmovq_n_u64(0), 0); x0 = veorq_u64(crc_vec, x0); buf = buf.add(16); len -= 16; // Main loop while len >= 16 { let y0 = clmul_lo_and_xor(x0, k, vld1q_u64(buf as *const u64)); x0 = clmul_hi_and_xor(x0, k, y0); buf = buf.add(16); len -= 16; } // Reduce 128 bits to 32 bits, and multiply by x^32 crc0 = __crc32cd(0, vgetq_lane_u64(x0, 0)); crc0 = __crc32cd(crc0, vgetq_lane_u64(x0, 1)); } while len >= 8 { crc0 = __crc32cd(crc0, *(buf as *const u64)); buf = buf.add(8); len -= 8; } while len > 0 { crc0 = __crc32cb(crc0, *buf); buf = buf.add(1); len -= 1; } crc0 } crc-fast-1.10.0/src/crc32/fusion/aarch64/iscsi/crc_pmull_sha3.rs000064400000000000000000000206411046102023000222240ustar 00000000000000//! Provides CRC-32/ISCSI calculations using a fusion of native CLMUL //! instructions and native CRC calculation instructions on aarch64. //! //! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/ //! //! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ //! with the help of Claude.ai. //! //! Modified as necessary for this Rust implementation. //! //! MIT licensed. #![cfg(target_arch = "aarch64")] use crate::crc32::fusion::aarch64::{clmul_hi, clmul_lo, clmul_scalar}; use core::arch::aarch64::{ __crc32cb, __crc32cd, __crc32cw, uint64x2_t, veor3q_u64, veorq_u64, vgetq_lane_u64, vld1q_u64, vmov_n_u64, vmull_p8, vreinterpret_p8_u64, vreinterpretq_u64_p16, }; /// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ /// with the help of Claude.ai using: /// /// ./generate -i neon_eor3 -p crc32c -a v9s3x2e_s3 /// /// Modified as necessary for this Rust implementation. #[inline] #[target_feature(enable = "crc,aes,sha3")] pub(crate) unsafe fn crc32_iscsi_eor3_v9s3x2e_s3( mut crc0: u32, mut buf: *const u8, mut len: usize, ) -> u32 { // Align to 8-byte boundary while len > 0 && (buf as usize & 7) != 0 { crc0 = __crc32cb(crc0, *buf); buf = buf.add(1); len -= 1; } // Handle 8-byte alignment if (buf as usize & 8) != 0 && len >= 8 { crc0 = __crc32cd(crc0, *(buf as *const u64)); buf = buf.add(8); len -= 8; } if len >= 192 { let end = buf.add(len); let blk = len / 192; let klen = blk * 16; let buf2 = buf.add(klen * 3); let limit = buf.add(klen).sub(32); let mut crc1 = 0u32; let mut crc2 = 0u32; // First vector chunk let mut x0 = vld1q_u64(buf2 as *const u64); let mut x1 = vld1q_u64(buf2.add(16) as *const u64); let mut x2 = vld1q_u64(buf2.add(32) as *const u64); let mut x3 = vld1q_u64(buf2.add(48) as *const u64); let mut x4 = vld1q_u64(buf2.add(64) as *const u64); let mut x5 = vld1q_u64(buf2.add(80) as *const u64); let mut x6 = vld1q_u64(buf2.add(96) as *const u64); let mut x7 = vld1q_u64(buf2.add(112) as *const u64); let mut x8 = vld1q_u64(buf2.add(128) as *const u64); let k_vals: [u64; 2] = [0x7e908048, 0xc96cfdc0]; let mut k = vld1q_u64(k_vals.as_ptr()); let mut buf2 = buf2.add(144); // Main loop while buf <= limit { let y0 = clmul_lo(x0, k); x0 = clmul_hi(x0, k); let y1 = clmul_lo(x1, k); x1 = clmul_hi(x1, k); let y2 = clmul_lo(x2, k); x2 = clmul_hi(x2, k); let y3 = clmul_lo(x3, k); x3 = clmul_hi(x3, k); let y4 = clmul_lo(x4, k); x4 = clmul_hi(x4, k); let y5 = clmul_lo(x5, k); x5 = clmul_hi(x5, k); let y6 = clmul_lo(x6, k); x6 = clmul_hi(x6, k); let y7 = clmul_lo(x7, k); x7 = clmul_hi(x7, k); let y8 = clmul_lo(x8, k); x8 = clmul_hi(x8, k); x0 = veor3q_u64(x0, y0, vld1q_u64(buf2 as *const u64)); x1 = veor3q_u64(x1, y1, vld1q_u64(buf2.add(16) as *const u64)); x2 = veor3q_u64(x2, y2, vld1q_u64(buf2.add(32) as *const u64)); x3 = veor3q_u64(x3, y3, vld1q_u64(buf2.add(48) as *const u64)); x4 = veor3q_u64(x4, y4, vld1q_u64(buf2.add(64) as *const u64)); x5 = veor3q_u64(x5, y5, vld1q_u64(buf2.add(80) as *const u64)); x6 = veor3q_u64(x6, y6, vld1q_u64(buf2.add(96) as *const u64)); x7 = veor3q_u64(x7, y7, vld1q_u64(buf2.add(112) as *const u64)); x8 = veor3q_u64(x8, y8, vld1q_u64(buf2.add(128) as *const u64)); crc0 = __crc32cd(crc0, *(buf as *const u64)); crc1 = __crc32cd(crc1, *(buf.add(klen) as *const u64)); crc2 = __crc32cd(crc2, *(buf.add(klen * 2) as *const u64)); crc0 = __crc32cd(crc0, *(buf.add(8) as *const u64)); crc1 = __crc32cd(crc1, *(buf.add(klen + 8) as *const u64)); crc2 = __crc32cd(crc2, *(buf.add(klen * 2 + 8) as *const u64)); buf = buf.add(16); buf2 = buf2.add(144); } // Reduce x0 ... x8 to just x0 let k_vals: [u64; 2] = [0xf20c0dfe, 0x493c7d27]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo(x0, k); x0 = clmul_hi(x0, k); x0 = veor3q_u64(x0, y0, x1); x1 = x2; x2 = x3; x3 = x4; x4 = x5; x5 = x6; x6 = x7; x7 = x8; let y0 = clmul_lo(x0, k); x0 = clmul_hi(x0, k); let y2 = clmul_lo(x2, k); x2 = clmul_hi(x2, k); let y4 = clmul_lo(x4, k); x4 = clmul_hi(x4, k); let y6 = clmul_lo(x6, k); x6 = clmul_hi(x6, k); x0 = veor3q_u64(x0, y0, x1); x2 = veor3q_u64(x2, y2, x3); x4 = veor3q_u64(x4, y4, x5); x6 = veor3q_u64(x6, y6, x7); let k_vals: [u64; 2] = [0x3da6d0cb, 0xba4fc28e]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo(x0, k); x0 = clmul_hi(x0, k); let y4 = clmul_lo(x4, k); x4 = clmul_hi(x4, k); x0 = veor3q_u64(x0, y0, x2); x4 = veor3q_u64(x4, y4, x6); let k_vals: [u64; 2] = [0x740eef02, 0x9e4addf8]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo(x0, k); x0 = clmul_hi(x0, k); x0 = veor3q_u64(x0, y0, x4); // Final scalar chunk crc0 = __crc32cd(crc0, *(buf as *const u64)); crc1 = __crc32cd(crc1, *(buf.add(klen) as *const u64)); crc2 = __crc32cd(crc2, *(buf.add(klen * 2) as *const u64)); crc0 = __crc32cd(crc0, *(buf.add(8) as *const u64)); crc1 = __crc32cd(crc1, *(buf.add(klen + 8) as *const u64)); crc2 = __crc32cd(crc2, *(buf.add(klen * 2 + 8) as *const u64)); let vc0 = crc_shift_iscsi(crc0, klen * 2 + blk * 144); let vc1 = crc_shift_iscsi(crc1, klen + blk * 144); let vc2 = crc_shift_iscsi(crc2, blk * 144); let vc = vgetq_lane_u64(veor3q_u64(vc0, vc1, vc2), 0); // Reduce 128 bits to 32 bits, and multiply by x^32 crc0 = __crc32cd(0, vgetq_lane_u64(x0, 0)); crc0 = __crc32cd(crc0, vc ^ vgetq_lane_u64(x0, 1)); buf = buf2; len = end.offset_from(buf) as usize; } if len >= 32 { let klen = ((len - 8) / 24) * 8; let mut crc1 = 0u32; let mut crc2 = 0u32; // Main loop loop { crc0 = __crc32cd(crc0, *(buf as *const u64)); crc1 = __crc32cd(crc1, *(buf.add(klen) as *const u64)); crc2 = __crc32cd(crc2, *(buf.add(klen * 2) as *const u64)); buf = buf.add(8); len -= 24; if len < 32 { break; } } let vc0 = crc_shift_iscsi(crc0, klen * 2 + 8); let vc1 = crc_shift_iscsi(crc1, klen + 8); let vc = vgetq_lane_u64(veorq_u64(vc0, vc1), 0); // Final 8 bytes buf = buf.add(klen * 2); crc0 = crc2; crc0 = __crc32cd(crc0, *(buf as *const u64) ^ vc); buf = buf.add(8); len -= 8; } while len >= 8 { crc0 = __crc32cd(crc0, *(buf as *const u64)); buf = buf.add(8); len -= 8; } while len > 0 { crc0 = __crc32cb(crc0, *buf); buf = buf.add(1); len -= 1; } crc0 } #[inline] #[target_feature(enable = "aes")] unsafe fn crc_shift_iscsi(crc: u32, nbytes: usize) -> uint64x2_t { clmul_scalar(crc, xnmodp_crc32_iscsi((nbytes * 8 - 33) as u64)) } // x^n mod P, in log(n) time #[inline] #[target_feature(enable = "crc,aes")] unsafe fn xnmodp_crc32_iscsi(mut n: u64) -> u32 { let mut stack = !1u64; let mut acc: u32; let mut low: u32; while n > 191 { stack = (stack << 1) + (n & 1); n = (n >> 1) - 16; } stack = !stack; acc = 0x80000000u32 >> (n & 31); n >>= 5; while n > 0 { // ARM CRC32 instruction acc = __crc32cw(acc, 0); n -= 1; } while { low = (stack & 1) as u32; stack >>= 1; stack != 0 } { // Convert to polynomial type and square it let x = vreinterpret_p8_u64(vmov_n_u64(acc as u64)); let squared = vmull_p8(x, x); let y = vgetq_lane_u64(vreinterpretq_u64_p16(squared), 0); acc = __crc32cd(0, y << low); } acc } crc-fast-1.10.0/src/crc32/fusion/aarch64/iscsi/mod.rs000064400000000000000000000004241046102023000201020ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides aarch64-specific implementations of CRC-32/ISCSI calculations using //! fusion techniques. #![cfg(target_arch = "aarch64")] pub(crate) mod crc_pmull; pub(crate) mod crc_pmull_sha3; crc-fast-1.10.0/src/crc32/fusion/aarch64/iso_hdlc/crc_pmull.rs000064400000000000000000000153451046102023000217650ustar 00000000000000//! Provides CRC-32/ISO-HDLC calculations using a fusion of native CLMUL //! instructions and native CRC calculation instructions on aarch64. //! //! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/ //! //! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ //! with the help of Claude.ai. //! //! Modified as necessary for this Rust implementation. //! //! MIT licensed. #![cfg(target_arch = "aarch64")] use crate::crc32::fusion::aarch64::{clmul_hi_and_xor, clmul_lo_and_xor}; use core::arch::aarch64::{ __crc32b, __crc32d, veorq_u64, vgetq_lane_u64, vld1q_u64, vmovq_n_u64, vsetq_lane_u64, }; /// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ /// with the help of Claude.ai using: /// /// ./generate -i neon -p crc32 -a v12e_v1 /// /// Modified as necessary for this Rust implementation. #[inline] #[target_feature(enable = "crc,aes")] pub(crate) unsafe fn crc32_iso_hdlc_v12e_v1( mut crc0: u32, mut buf: *const u8, mut len: usize, ) -> u32 { // Align to 8-byte boundary while len > 0 && (buf as usize & 7) != 0 { crc0 = __crc32b(crc0, *buf); buf = buf.add(1); len -= 1; } // Handle 8-byte alignment if (buf as usize & 8) != 0 && len >= 8 { crc0 = __crc32d(crc0, *(buf as *const u64)); buf = buf.add(8); len -= 8; } if len >= 192 { let end = buf.add(len); let limit = buf.add(len - 192); // First vector chunk let mut x0 = vld1q_u64(buf as *const u64); let mut x1 = vld1q_u64(buf.add(16) as *const u64); let mut x2 = vld1q_u64(buf.add(32) as *const u64); let mut x3 = vld1q_u64(buf.add(48) as *const u64); let mut x4 = vld1q_u64(buf.add(64) as *const u64); let mut x5 = vld1q_u64(buf.add(80) as *const u64); let mut x6 = vld1q_u64(buf.add(96) as *const u64); let mut x7 = vld1q_u64(buf.add(112) as *const u64); let mut x8 = vld1q_u64(buf.add(128) as *const u64); let mut x9 = vld1q_u64(buf.add(144) as *const u64); let mut x10 = vld1q_u64(buf.add(160) as *const u64); let mut x11 = vld1q_u64(buf.add(176) as *const u64); // ISO-HDLC specific constants for small implementation let k_vals: [u64; 2] = [0x596c8d81, 0xf5e48c85]; let mut k = vld1q_u64(k_vals.as_ptr()); // Create CRC vector and XOR with first vector let crc_vec = vsetq_lane_u64(crc0 as u64, vmovq_n_u64(0), 0); x0 = veorq_u64(crc_vec, x0); buf = buf.add(192); // Main loop while buf <= limit { let y0 = clmul_lo_and_xor(x0, k, vld1q_u64(buf as *const u64)); x0 = clmul_hi_and_xor(x0, k, y0); let y1 = clmul_lo_and_xor(x1, k, vld1q_u64(buf.add(16) as *const u64)); x1 = clmul_hi_and_xor(x1, k, y1); let y2 = clmul_lo_and_xor(x2, k, vld1q_u64(buf.add(32) as *const u64)); x2 = clmul_hi_and_xor(x2, k, y2); let y3 = clmul_lo_and_xor(x3, k, vld1q_u64(buf.add(48) as *const u64)); x3 = clmul_hi_and_xor(x3, k, y3); let y4 = clmul_lo_and_xor(x4, k, vld1q_u64(buf.add(64) as *const u64)); x4 = clmul_hi_and_xor(x4, k, y4); let y5 = clmul_lo_and_xor(x5, k, vld1q_u64(buf.add(80) as *const u64)); x5 = clmul_hi_and_xor(x5, k, y5); let y6 = clmul_lo_and_xor(x6, k, vld1q_u64(buf.add(96) as *const u64)); x6 = clmul_hi_and_xor(x6, k, y6); let y7 = clmul_lo_and_xor(x7, k, vld1q_u64(buf.add(112) as *const u64)); x7 = clmul_hi_and_xor(x7, k, y7); let y8 = clmul_lo_and_xor(x8, k, vld1q_u64(buf.add(128) as *const u64)); x8 = clmul_hi_and_xor(x8, k, y8); let y9 = clmul_lo_and_xor(x9, k, vld1q_u64(buf.add(144) as *const u64)); x9 = clmul_hi_and_xor(x9, k, y9); let y10 = clmul_lo_and_xor(x10, k, vld1q_u64(buf.add(160) as *const u64)); x10 = clmul_hi_and_xor(x10, k, y10); let y11 = clmul_lo_and_xor(x11, k, vld1q_u64(buf.add(176) as *const u64)); x11 = clmul_hi_and_xor(x11, k, y11); buf = buf.add(192); } // Reduce x0 ... x11 to just x0 let k_vals: [u64; 2] = [0xae689191, 0xccaa009e]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo_and_xor(x0, k, x1); x0 = clmul_hi_and_xor(x0, k, y0); let y2 = clmul_lo_and_xor(x2, k, x3); x2 = clmul_hi_and_xor(x2, k, y2); let y4 = clmul_lo_and_xor(x4, k, x5); x4 = clmul_hi_and_xor(x4, k, y4); let y6 = clmul_lo_and_xor(x6, k, x7); x6 = clmul_hi_and_xor(x6, k, y6); let y8 = clmul_lo_and_xor(x8, k, x9); x8 = clmul_hi_and_xor(x8, k, y8); let y10 = clmul_lo_and_xor(x10, k, x11); x10 = clmul_hi_and_xor(x10, k, y10); let k_vals: [u64; 2] = [0xf1da05aa, 0x81256527]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo_and_xor(x0, k, x2); x0 = clmul_hi_and_xor(x0, k, y0); let y4 = clmul_lo_and_xor(x4, k, x6); x4 = clmul_hi_and_xor(x4, k, y4); let y8 = clmul_lo_and_xor(x8, k, x10); x8 = clmul_hi_and_xor(x8, k, y8); let k_vals: [u64; 2] = [0x8f352d95, 0x1d9513d7]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo_and_xor(x0, k, x4); x0 = clmul_hi_and_xor(x0, k, y0); x4 = x8; let y0 = clmul_lo_and_xor(x0, k, x4); x0 = clmul_hi_and_xor(x0, k, y0); // Reduce 128 bits to 32 bits, and multiply by x^32 crc0 = __crc32d(0, vgetq_lane_u64(x0, 0)); crc0 = __crc32d(crc0, vgetq_lane_u64(x0, 1)); len = end.offset_from(buf) as usize; } if len >= 16 { // First vector chunk let mut x0 = vld1q_u64(buf as *const u64); let k_vals: [u64; 2] = [0xae689191, 0xccaa009e]; let k = vld1q_u64(k_vals.as_ptr()); // Create CRC vector and XOR with first vector let crc_vec = vsetq_lane_u64(crc0 as u64, vmovq_n_u64(0), 0); x0 = veorq_u64(crc_vec, x0); buf = buf.add(16); len -= 16; // Main loop while len >= 16 { let y0 = clmul_lo_and_xor(x0, k, vld1q_u64(buf as *const u64)); x0 = clmul_hi_and_xor(x0, k, y0); buf = buf.add(16); len -= 16; } // Reduce 128 bits to 32 bits, and multiply by x^32 crc0 = __crc32d(0, vgetq_lane_u64(x0, 0)); crc0 = __crc32d(crc0, vgetq_lane_u64(x0, 1)); } while len >= 8 { crc0 = __crc32d(crc0, *(buf as *const u64)); buf = buf.add(8); len -= 8; } while len > 0 { crc0 = __crc32b(crc0, *buf); buf = buf.add(1); len -= 1; } crc0 } crc-fast-1.10.0/src/crc32/fusion/aarch64/iso_hdlc/crc_pmull_sha3.rs000064400000000000000000000207511046102023000227000ustar 00000000000000//! Provides CRC-32/ISO-HDLC calculations using a fusion of native CLMUL //! instructions and native CRC calculation instructions on aarch64. //! //! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/ //! //! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ //! with the help of Claude.ai. //! //! Modified as necessary for this Rust implementation. //! //! MIT licensed. #![cfg(target_arch = "aarch64")] use crate::crc32::fusion::aarch64::{clmul_hi, clmul_lo, clmul_scalar}; use core::arch::aarch64::{ __crc32b, __crc32d, __crc32w, uint64x2_t, veor3q_u64, veorq_u64, vgetq_lane_u64, vld1q_u64, vmov_n_u64, vmull_p8, vreinterpret_p8_u64, vreinterpretq_u64_p16, }; /// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ /// with the help of Claude.ai using: /// /// ./generate -i neon_eor3 -p crc32 -a v9s3x2e_s3 /// /// Modified as necessary for this Rust implementation. #[inline] #[target_feature(enable = "crc,aes,sha3")] pub(crate) unsafe fn crc32_iso_hdlc_eor3_v9s3x2e_s3( mut crc0: u32, mut buf: *const u8, mut len: usize, ) -> u32 { // Align to 8-byte boundary while len > 0 && (buf as usize & 7) != 0 { crc0 = __crc32b(crc0, *buf); buf = buf.add(1); len -= 1; } // Handle 8-byte alignment if (buf as usize & 8) != 0 && len >= 8 { crc0 = __crc32d(crc0, *(buf as *const u64)); buf = buf.add(8); len -= 8; } if len >= 192 { let end = buf.add(len); let blk = len / 192; let klen = blk * 16; let buf2 = buf.add(klen * 3); let limit = buf.add(klen).sub(32); let mut crc1 = 0u32; let mut crc2 = 0u32; // First vector chunk let mut x0 = vld1q_u64(buf2 as *const u64); let mut x1 = vld1q_u64(buf2.add(16) as *const u64); let mut x2 = vld1q_u64(buf2.add(32) as *const u64); let mut x3 = vld1q_u64(buf2.add(48) as *const u64); let mut x4 = vld1q_u64(buf2.add(64) as *const u64); let mut x5 = vld1q_u64(buf2.add(80) as *const u64); let mut x6 = vld1q_u64(buf2.add(96) as *const u64); let mut x7 = vld1q_u64(buf2.add(112) as *const u64); let mut x8 = vld1q_u64(buf2.add(128) as *const u64); // ISO-HDLC specific constants let k_vals: [u64; 2] = [0x26b70c3d, 0x3f41287a]; let mut k = vld1q_u64(k_vals.as_ptr()); let mut buf2 = buf2.add(144); // Main loop while buf <= limit { let y0 = clmul_lo(x0, k); x0 = clmul_hi(x0, k); let y1 = clmul_lo(x1, k); x1 = clmul_hi(x1, k); let y2 = clmul_lo(x2, k); x2 = clmul_hi(x2, k); let y3 = clmul_lo(x3, k); x3 = clmul_hi(x3, k); let y4 = clmul_lo(x4, k); x4 = clmul_hi(x4, k); let y5 = clmul_lo(x5, k); x5 = clmul_hi(x5, k); let y6 = clmul_lo(x6, k); x6 = clmul_hi(x6, k); let y7 = clmul_lo(x7, k); x7 = clmul_hi(x7, k); let y8 = clmul_lo(x8, k); x8 = clmul_hi(x8, k); x0 = veor3q_u64(x0, y0, vld1q_u64(buf2 as *const u64)); x1 = veor3q_u64(x1, y1, vld1q_u64(buf2.add(16) as *const u64)); x2 = veor3q_u64(x2, y2, vld1q_u64(buf2.add(32) as *const u64)); x3 = veor3q_u64(x3, y3, vld1q_u64(buf2.add(48) as *const u64)); x4 = veor3q_u64(x4, y4, vld1q_u64(buf2.add(64) as *const u64)); x5 = veor3q_u64(x5, y5, vld1q_u64(buf2.add(80) as *const u64)); x6 = veor3q_u64(x6, y6, vld1q_u64(buf2.add(96) as *const u64)); x7 = veor3q_u64(x7, y7, vld1q_u64(buf2.add(112) as *const u64)); x8 = veor3q_u64(x8, y8, vld1q_u64(buf2.add(128) as *const u64)); crc0 = __crc32d(crc0, *(buf as *const u64)); crc1 = __crc32d(crc1, *(buf.add(klen) as *const u64)); crc2 = __crc32d(crc2, *(buf.add(klen * 2) as *const u64)); crc0 = __crc32d(crc0, *(buf.add(8) as *const u64)); crc1 = __crc32d(crc1, *(buf.add(klen + 8) as *const u64)); crc2 = __crc32d(crc2, *(buf.add(klen * 2 + 8) as *const u64)); buf = buf.add(16); buf2 = buf2.add(144); } // Reduce x0 ... x8 to just x0 let k_vals: [u64; 2] = [0xae689191, 0xccaa009e]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo(x0, k); x0 = clmul_hi(x0, k); x0 = veor3q_u64(x0, y0, x1); x1 = x2; x2 = x3; x3 = x4; x4 = x5; x5 = x6; x6 = x7; x7 = x8; let y0 = clmul_lo(x0, k); x0 = clmul_hi(x0, k); let y2 = clmul_lo(x2, k); x2 = clmul_hi(x2, k); let y4 = clmul_lo(x4, k); x4 = clmul_hi(x4, k); let y6 = clmul_lo(x6, k); x6 = clmul_hi(x6, k); x0 = veor3q_u64(x0, y0, x1); x2 = veor3q_u64(x2, y2, x3); x4 = veor3q_u64(x4, y4, x5); x6 = veor3q_u64(x6, y6, x7); let k_vals: [u64; 2] = [0xf1da05aa, 0x81256527]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo(x0, k); x0 = clmul_hi(x0, k); let y4 = clmul_lo(x4, k); x4 = clmul_hi(x4, k); x0 = veor3q_u64(x0, y0, x2); x4 = veor3q_u64(x4, y4, x6); let k_vals: [u64; 2] = [0x8f352d95, 0x1d9513d7]; k = vld1q_u64(k_vals.as_ptr()); let y0 = clmul_lo(x0, k); x0 = clmul_hi(x0, k); x0 = veor3q_u64(x0, y0, x4); // Final scalar chunk crc0 = __crc32d(crc0, *(buf as *const u64)); crc1 = __crc32d(crc1, *(buf.add(klen) as *const u64)); crc2 = __crc32d(crc2, *(buf.add(klen * 2) as *const u64)); crc0 = __crc32d(crc0, *(buf.add(8) as *const u64)); crc1 = __crc32d(crc1, *(buf.add(klen + 8) as *const u64)); crc2 = __crc32d(crc2, *(buf.add(klen * 2 + 8) as *const u64)); let vc0 = crc_shift_iso_hdlc(crc0, klen * 2 + blk * 144); let vc1 = crc_shift_iso_hdlc(crc1, klen + blk * 144); let vc2 = crc_shift_iso_hdlc(crc2, blk * 144); let vc = vgetq_lane_u64(veor3q_u64(vc0, vc1, vc2), 0); // Reduce 128 bits to 32 bits, and multiply by x^32 crc0 = __crc32d(0, vgetq_lane_u64(x0, 0)); crc0 = __crc32d(crc0, vc ^ vgetq_lane_u64(x0, 1)); buf = buf2; len = end.offset_from(buf) as usize; } if len >= 32 { let klen = ((len - 8) / 24) * 8; let mut crc1 = 0u32; let mut crc2 = 0u32; // Main loop loop { crc0 = __crc32d(crc0, *(buf as *const u64)); crc1 = __crc32d(crc1, *(buf.add(klen) as *const u64)); crc2 = __crc32d(crc2, *(buf.add(klen * 2) as *const u64)); buf = buf.add(8); len -= 24; if len < 32 { break; } } let vc0 = crc_shift_iso_hdlc(crc0, klen * 2 + 8); let vc1 = crc_shift_iso_hdlc(crc1, klen + 8); let vc = vgetq_lane_u64(veorq_u64(vc0, vc1), 0); // Final 8 bytes buf = buf.add(klen * 2); crc0 = crc2; crc0 = __crc32d(crc0, *(buf as *const u64) ^ vc); buf = buf.add(8); len -= 8; } while len >= 8 { crc0 = __crc32d(crc0, *(buf as *const u64)); buf = buf.add(8); len -= 8; } while len > 0 { crc0 = __crc32b(crc0, *buf); buf = buf.add(1); len -= 1; } crc0 } #[inline] #[target_feature(enable = "aes")] unsafe fn crc_shift_iso_hdlc(crc: u32, nbytes: usize) -> uint64x2_t { clmul_scalar(crc, xnmodp_iso_hdlc((nbytes * 8 - 33) as u64)) } // x^n mod P, in log(n) time #[inline] #[target_feature(enable = "crc,aes")] unsafe fn xnmodp_iso_hdlc(mut n: u64) -> u32 { let mut stack = !1u64; let mut acc: u32; let mut low: u32; while n > 191 { stack = (stack << 1) + (n & 1); n = (n >> 1) - 16; } stack = !stack; acc = 0x80000000u32 >> (n & 31); n >>= 5; while n > 0 { // ARM CRC32 instruction (ISO-HDLC uses standard CRC32, not CRC32C) acc = __crc32w(acc, 0); n -= 1; } while { low = (stack & 1) as u32; stack >>= 1; stack != 0 } { // Convert to polynomial type and square it let x = vreinterpret_p8_u64(vmov_n_u64(acc as u64)); let squared = vmull_p8(x, x); let y = vgetq_lane_u64(vreinterpretq_u64_p16(squared), 0); acc = __crc32d(0, y << low); } acc } crc-fast-1.10.0/src/crc32/fusion/aarch64/iso_hdlc/mod.rs000064400000000000000000000004271046102023000205570ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides aarch64-specific implementations of CRC-32/ISO-HDLC calculations using //! fusion techniques. #![cfg(target_arch = "aarch64")] pub(crate) mod crc_pmull; pub(crate) mod crc_pmull_sha3; crc-fast-1.10.0/src/crc32/fusion/aarch64/mod.rs000064400000000000000000000255371046102023000170040ustar 00000000000000//! Provides CRC-32/ISCSI and CRC-32/ISO-HDLC calculations using a fusion of native CLMUL //! instructions and native CRC calculation instructions on aarch64. //! //! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/ //! //! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ //! with the help of Claude.ai. //! //! Modified as necessary for this Rust implementation. //! //! MIT licensed. #![cfg(target_arch = "aarch64")] mod iscsi; mod iso_hdlc; use core::arch::aarch64::*; #[cfg(feature = "std")] use std::arch::is_aarch64_feature_detected; use iscsi::crc_pmull::crc32_iscsi_v12e_v1; use iscsi::crc_pmull_sha3::crc32_iscsi_eor3_v9s3x2e_s3; use iso_hdlc::crc_pmull::crc32_iso_hdlc_v12e_v1; use iso_hdlc::crc_pmull_sha3::crc32_iso_hdlc_eor3_v9s3x2e_s3; #[inline(always)] pub fn crc32_iscsi(crc: u32, data: &[u8]) -> u32 { let data_len = data.len(); // there's some variance among different aarch64 CPUs (Apple Silicon, AWS Graviton, etc.), but // 127 bytes is the "small" threshold where this is generally faster if data_len < 128 { return unsafe { crc32_iscsi_small_fast(crc, data) }; } #[cfg(feature = "std")] let has_sha3 = is_aarch64_feature_detected!("sha3"); #[cfg(not(feature = "std"))] let has_sha3 = cfg!(target_feature = "sha3"); if has_sha3 { unsafe { crc32_iscsi_aes_sha3(crc, data, data_len) } } else { unsafe { crc32_iscsi_aes(crc, data, data_len) } } } #[inline(always)] pub fn crc32_iso_hdlc(crc: u32, data: &[u8]) -> u32 { let data_len = data.len(); // there's some variance among different aarch64 CPUs (Apple Silicon, AWS Graviton, etc.), but // 127 bytes is the "small" threshold where this is generally faster if data_len < 128 { return unsafe { crc32_iso_hdlc_small_fast(crc, data) }; } #[cfg(feature = "std")] let has_sha3 = is_aarch64_feature_detected!("sha3"); #[cfg(not(feature = "std"))] let has_sha3 = cfg!(target_feature = "sha3"); if has_sha3 { unsafe { crc32_iso_hdlc_aes_sha3(crc, data, data_len) } } else { unsafe { crc32_iso_hdlc_aes(crc, data, data_len) } } } #[inline] #[target_feature(enable = "crc,aes,sha3")] unsafe fn crc32_iscsi_aes_sha3(crc: u32, data: &[u8], data_len: usize) -> u32 { unsafe { const LARGE_BUFFER_THRESHOLD: usize = 1024; // Select implementation based on buffer size if data_len <= LARGE_BUFFER_THRESHOLD { crc32_iscsi_v12e_v1(crc, data.as_ptr(), data_len) } else { crc32_iscsi_eor3_v9s3x2e_s3(crc, data.as_ptr(), data_len) } } } #[inline] #[target_feature(enable = "crc,aes")] unsafe fn crc32_iscsi_aes(crc: u32, data: &[u8], data_len: usize) -> u32 { unsafe { crc32_iscsi_v12e_v1(crc, data.as_ptr(), data_len) } } #[inline] #[target_feature(enable = "crc,aes,sha3")] unsafe fn crc32_iso_hdlc_aes_sha3(crc: u32, data: &[u8], data_len: usize) -> u32 { unsafe { const LARGE_BUFFER_THRESHOLD: usize = 1024; // Select implementation based on buffer size if data_len <= LARGE_BUFFER_THRESHOLD { crc32_iso_hdlc_v12e_v1(crc, data.as_ptr(), data_len) } else { crc32_iso_hdlc_eor3_v9s3x2e_s3(crc, data.as_ptr(), data_len) } } } #[inline] #[target_feature(enable = "crc,aes")] unsafe fn crc32_iso_hdlc_aes(crc: u32, data: &[u8], data_len: usize) -> u32 { unsafe { crc32_iso_hdlc_v12e_v1(crc, data.as_ptr(), data_len) } } #[inline] #[target_feature(enable = "aes")] unsafe fn clmul_lo(a: uint64x2_t, b: uint64x2_t) -> uint64x2_t { // Polynomial multiply low parts - convert u128 result to uint64x2_t let result = vmull_p64(vgetq_lane_u64(a, 0), vgetq_lane_u64(b, 0)); vreinterpretq_u64_p128(result) } #[inline] #[target_feature(enable = "aes")] unsafe fn clmul_hi(a: uint64x2_t, b: uint64x2_t) -> uint64x2_t { // Polynomial multiply high parts - convert u128 result to uint64x2_t let result = vmull_p64(vgetq_lane_u64(a, 1), vgetq_lane_u64(b, 1)); vreinterpretq_u64_p128(result) } #[inline] #[target_feature(enable = "aes")] unsafe fn clmul_scalar(a: u32, b: u32) -> uint64x2_t { // Polynomial multiply scalars - convert u128 result to uint64x2_t let result = vmull_p64(a as u64, b as u64); vreinterpretq_u64_p128(result) } #[inline] #[target_feature(enable = "aes")] unsafe fn clmul_lo_and_xor(a: uint64x2_t, b: uint64x2_t, c: uint64x2_t) -> uint64x2_t { veorq_u64(clmul_lo(a, b), c) } #[inline] #[target_feature(enable = "aes")] unsafe fn clmul_hi_and_xor(a: uint64x2_t, b: uint64x2_t, c: uint64x2_t) -> uint64x2_t { veorq_u64(clmul_hi(a, b), c) } /// CRC-32/ISCSI calculation for small buffers (< 128 bytes) using unrolled native CRC instructions #[inline] #[target_feature(enable = "crc")] pub unsafe fn crc32_iscsi_small_fast(mut crc: u32, data: &[u8]) -> u32 { let (prefix, aligned, suffix) = data.align_to::(); // Process unaligned prefix bytes for &byte in prefix { crc = __crc32cb(crc, byte); } // Process aligned u64s with 8-way unrolling (64 bytes per iteration) let mut chunks = aligned.chunks_exact(8); for chunk in &mut chunks { crc = __crc32cd(crc, chunk[0]); crc = __crc32cd(crc, chunk[1]); crc = __crc32cd(crc, chunk[2]); crc = __crc32cd(crc, chunk[3]); crc = __crc32cd(crc, chunk[4]); crc = __crc32cd(crc, chunk[5]); crc = __crc32cd(crc, chunk[6]); crc = __crc32cd(crc, chunk[7]); } // Process remaining aligned u64s for &val in chunks.remainder() { crc = __crc32cd(crc, val); } // Process unaligned suffix bytes for &byte in suffix { crc = __crc32cb(crc, byte); } crc } /// CRC-32/ISO-HDLC calculation for small buffers (< 128 bytes) using unrolled native CRC instructions #[inline] #[target_feature(enable = "crc")] pub unsafe fn crc32_iso_hdlc_small_fast(mut crc: u32, data: &[u8]) -> u32 { let (prefix, aligned, suffix) = data.align_to::(); // Process unaligned prefix bytes for &byte in prefix { crc = __crc32b(crc, byte); } // Process aligned u64s with 8-way unrolling (64 bytes per iteration) let mut chunks = aligned.chunks_exact(8); for chunk in &mut chunks { crc = __crc32d(crc, chunk[0]); crc = __crc32d(crc, chunk[1]); crc = __crc32d(crc, chunk[2]); crc = __crc32d(crc, chunk[3]); crc = __crc32d(crc, chunk[4]); crc = __crc32d(crc, chunk[5]); crc = __crc32d(crc, chunk[6]); crc = __crc32d(crc, chunk[7]); } // Process remaining aligned u64s for &val in chunks.remainder() { crc = __crc32d(crc, val); } // Process unaligned suffix bytes for &byte in suffix { crc = __crc32b(crc, byte); } crc } #[cfg(test)] mod tests { use super::*; use crate::test::consts::TEST_CHECK_STRING; use crc::{Crc, Table}; use rand::{rng, Rng}; const RUST_CRC32_ISO_HDLC: Crc> = Crc::>::new(&crc::CRC_32_ISO_HDLC); const RUST_CRC32_ISCSI: Crc> = Crc::>::new(&crc::CRC_32_ISCSI); #[test] fn test_crc32_iso_hdlc_check() { assert_eq!( crc32_iso_hdlc(0xffffffff, TEST_CHECK_STRING) ^ 0xffffffff, 0xcbf43926 ); } #[test] fn test_crc32_iso_hdlc_small_all_lengths() { for len in 1..=255 { crc32_iso_hdlc_random(len) } } #[test] fn test_crc32_iso_hdlc_medium_lengths() { // Test each length from 256 to 1024, which should fold and include handling remainders for len in 256..=1024 { crc32_iso_hdlc_random(len) } } #[test] fn test_crc32_iso_hdlc_large_lengths() { // Test 1 MiB just before, at, and just after the folding boundaries for len in 1048575..1048577 { crc32_iso_hdlc_random(len) } } #[test] fn test_crc32_iscsi_check() { assert_eq!( crc32_iscsi(0xffffffff, TEST_CHECK_STRING) ^ 0xffffffff, 0xe3069283 ); } #[test] fn test_crc32_iscsi_small_all_lengths() { for len in 1..=255 { crc32_iscsi_random(len); } } #[test] fn test_crc32_iscsi_medium_lengths() { // Test each length from 256 to 1024, which should fold and include handling remainders for len in 256..=1024 { crc32_iscsi_random(len); } } #[test] fn test_crc32_iscsi_large_lengths() { // Test 1 MiB just before, at, and just after the folding boundaries for len in 1048575..1048577 { crc32_iscsi_random(len); } } #[cfg(target_feature = "sha3")] fn crc32_iso_hdlc_random(len: usize) { let mut data = vec![0u8; len]; rng().fill(&mut data[..]); let checksum = RUST_CRC32_ISO_HDLC.checksum(&data); assert_eq!(crc32_iso_hdlc(0xffffffff, &data) ^ 0xffffffff, checksum); unsafe { assert_eq!( crc32_iso_hdlc_eor3_v9s3x2e_s3(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff, checksum ); assert_eq!( crc32_iso_hdlc_v12e_v1(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff, checksum ); } } #[cfg(not(target_feature = "sha3"))] fn crc32_iso_hdlc_random(len: usize) { let mut data = vec![0u8; len]; rng().fill(&mut data[..]); let checksum = RUST_CRC32_ISO_HDLC.checksum(&data); assert_eq!(crc32_iso_hdlc(0xffffffff, &data) ^ 0xffffffff, checksum); unsafe { assert_eq!( crc32_iso_hdlc_v12e_v1(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff, checksum ); } } #[cfg(target_feature = "sha3")] fn crc32_iscsi_random(len: usize) { let mut data = vec![0u8; len]; rng().fill(&mut data[..]); let checksum = RUST_CRC32_ISCSI.checksum(&data); assert_eq!(crc32_iscsi(0xffffffff, &data) ^ 0xffffffff, checksum); unsafe { assert_eq!( crc32_iscsi_eor3_v9s3x2e_s3(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff, checksum ); assert_eq!( crc32_iscsi_v12e_v1(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff, checksum ); } } #[cfg(not(target_feature = "sha3"))] fn crc32_iscsi_random(len: usize) { let mut data = vec![0u8; len]; rng().fill(&mut data[..]); let checksum = RUST_CRC32_ISCSI.checksum(&data); assert_eq!(crc32_iscsi(0xffffffff, &data) ^ 0xffffffff, checksum); unsafe { assert_eq!( crc32_iscsi_v12e_v1(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff, checksum ); } } } crc-fast-1.10.0/src/crc32/fusion/mod.rs000064400000000000000000000017631046102023000155470ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides support for calculating CRC-32/ISO-HDLC and CRC-32/ISCSI using //! fusion techniques. //! //! https://www.corsix.org/content/fast-crc32c-4k //! https://www.corsix.org/content/alternative-exposition-crc32_4k_pclmulqdq //! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/ //! https://github.com/corsix/fast-crc32/ mod aarch64; mod x86; /// Only AArch64 has native CRC-32/ISO-HDLC instructions #[inline(always)] #[cfg(target_arch = "aarch64")] pub(crate) fn crc32_iso_hdlc(state: u32, data: &[u8]) -> u32 { aarch64::crc32_iso_hdlc(state, data) } /// Both AArch64 and x86 have native CRC-32/ISCSI instructions #[inline(always)] pub(crate) fn crc32_iscsi(state: u32, data: &[u8]) -> u32 { #[cfg(target_arch = "aarch64")] { aarch64::crc32_iscsi(state, data) } #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] { x86::crc32_iscsi(state, data) } } crc-fast-1.10.0/src/crc32/fusion/x86/iscsi/avx512_pclmulqdq.rs000064400000000000000000000146701046102023000216400ustar 00000000000000//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ //! with the help of Claude.ai. //! //! MIT licensed. #![cfg(target_arch = "x86_64")] /// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ /// with the help of Claude.ai using: /// /// ./generate -i avx512 -p crc32c -a v4s3x3 /// /// Modified as necessary for this Rust implementation. /// /// Uses AVX-512 instructions #[inline] #[target_feature(enable = "avx512vl,pclmulqdq")] pub unsafe fn crc32_iscsi_avx512_v4s3x3(mut crc0: u32, mut buf: *const u8, mut len: usize) -> u32 { use crate::fusion::x86::*; // Align to 8-byte boundary using hardware CRC32C instructions while len > 0 && (buf as usize & 7) != 0 { crc0 = _mm_crc32_u8(crc0, *buf); buf = buf.add(1); len -= 1; } // Handle 8-byte alignment if (buf as usize & 8) != 0 && len >= 8 { crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32; buf = buf.add(8); len -= 8; } if len >= 144 { let blk = (len - 8) / 136; let klen = blk * 24; let buf2 = buf; let mut crc1 = 0u32; let mut crc2 = 0u32; // First vector chunk - load four 128-bit vectors (64 bytes total) let mut x0 = _mm_loadu_si128(buf2 as *const __m128i); let mut x1 = _mm_loadu_si128(buf2.add(16) as *const __m128i); let mut x2 = _mm_loadu_si128(buf2.add(32) as *const __m128i); let mut x3 = _mm_loadu_si128(buf2.add(48) as *const __m128i); // iSCSI-specific folding constant (different from ISO-HDLC) let mut k = _mm_setr_epi32(0x740eef02u32 as i32, 0, 0x9e4addf8u32 as i32, 0); // XOR the CRC into the first vector's low 32 bits x0 = _mm_xor_si128(_mm_cvtsi32_si128(crc0 as i32), x0); crc0 = 0; let mut buf2 = buf2.add(64); len -= 136; buf = buf.add(blk * 64); // Main loop - process 144 bytes at a time while len >= 144 { let y0 = clmul_lo_sse(x0, k); x0 = clmul_hi_sse(x0, k); let y1 = clmul_lo_sse(x1, k); x1 = clmul_hi_sse(x1, k); let y2 = clmul_lo_sse(x2, k); x2 = clmul_hi_sse(x2, k); let y3 = clmul_lo_sse(x3, k); x3 = clmul_hi_sse(x3, k); // XOR with next chunk of data using ternary logic (A XOR B XOR C) x0 = _mm_ternarylogic_epi64(x0, y0, _mm_loadu_si128(buf2 as *const __m128i), 0x96); x1 = _mm_ternarylogic_epi64( x1, y1, _mm_loadu_si128(buf2.add(16) as *const __m128i), 0x96, ); x2 = _mm_ternarylogic_epi64( x2, y2, _mm_loadu_si128(buf2.add(32) as *const __m128i), 0x96, ); x3 = _mm_ternarylogic_epi64( x3, y3, _mm_loadu_si128(buf2.add(48) as *const __m128i), 0x96, ); // Process scalar data in parallel using hardware CRC32C crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32; crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen) as *const u64)) as u32; crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2) as *const u64)) as u32; crc0 = _mm_crc32_u64(crc0.into(), *(buf.add(8) as *const u64)) as u32; crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen + 8) as *const u64)) as u32; crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2 + 8) as *const u64)) as u32; crc0 = _mm_crc32_u64(crc0.into(), *(buf.add(16) as *const u64)) as u32; crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen + 16) as *const u64)) as u32; crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2 + 16) as *const u64)) as u32; buf = buf.add(24); buf2 = buf2.add(64); len -= 136; } // Reduce x0 ... x3 to just x0 using iSCSI-specific constants k = _mm_setr_epi32(0xf20c0dfeu32 as i32, 0, 0x493c7d27u32 as i32, 0); let y0 = clmul_lo_sse(x0, k); x0 = clmul_hi_sse(x0, k); let y2 = clmul_lo_sse(x2, k); x2 = clmul_hi_sse(x2, k); x0 = _mm_ternarylogic_epi64(x0, y0, x1, 0x96); x2 = _mm_ternarylogic_epi64(x2, y2, x3, 0x96); k = _mm_setr_epi32(0x3da6d0cbu32 as i32, 0, 0xba4fc28eu32 as i32, 0); let y0 = clmul_lo_sse(x0, k); x0 = clmul_hi_sse(x0, k); x0 = _mm_ternarylogic_epi64(x0, y0, x2, 0x96); // Final scalar chunk crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32; crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen) as *const u64)) as u32; crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2) as *const u64)) as u32; crc0 = _mm_crc32_u64(crc0.into(), *(buf.add(8) as *const u64)) as u32; crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen + 8) as *const u64)) as u32; crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2 + 8) as *const u64)) as u32; crc0 = _mm_crc32_u64(crc0.into(), *(buf.add(16) as *const u64)) as u32; crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen + 16) as *const u64)) as u32; crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2 + 16) as *const u64)) as u32; buf = buf.add(24); let vc0 = crc_shift_iscsi_sse(crc0, klen * 2 + 8); let vc1 = crc_shift_iscsi_sse(crc1, klen + 8); let mut vc = _mm_extract_epi64(_mm_xor_si128(vc0, vc1), 0) as u64; // Reduce 128 bits to 32 bits, and multiply by x^32 let x0_low = _mm_extract_epi64(x0, 0) as u64; let x0_high = _mm_extract_epi64(x0, 1) as u64; let vec_crc = _mm_crc32_u64(_mm_crc32_u64(0, x0_low), x0_high); vc ^= _mm_extract_epi64(crc_shift_iscsi_sse(vec_crc as u32, klen * 3 + 8), 0) as u64; // Final 8 bytes buf = buf.add(klen * 2); crc0 = crc2; crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64) ^ vc) as u32; buf = buf.add(8); len -= 8; } // Process remaining 8-byte chunks using hardware CRC32C while len >= 8 { crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32; buf = buf.add(8); len -= 8; } // Process remaining bytes using hardware CRC32C while len > 0 { crc0 = _mm_crc32_u8(crc0, *buf); buf = buf.add(1); len -= 1; } crc0 } crc-fast-1.10.0/src/crc32/fusion/x86/iscsi/avx512_vpclmulqdq.rs000064400000000000000000000154701046102023000220250ustar 00000000000000//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ //! with the help of Claude.ai. //! //! MIT licensed. #![cfg(target_arch = "x86_64")] /// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ /// with the help of Claude.ai using: /// /// ./generate -i avx512_vpclmulqdq -p crc32c -a v3x2 /// /// Modified as necessary for this Rust implementation. /// /// Uses AVX-512 VPCLMULQDQ instructions #[inline] #[target_feature(enable = "avx512vl,vpclmulqdq")] pub unsafe fn crc32_iscsi_avx512_vpclmulqdq_v3x2( mut crc0: u32, mut buf: *const u8, mut len: usize, ) -> u32 { use crate::fusion::x86::*; // Align to 8-byte boundary while len > 0 && (buf as usize & 7) != 0 { crc0 = _mm_crc32_u8(crc0, *buf); buf = buf.add(1); len -= 1; } // Align to 64-byte boundary (cache line) while (buf as usize & 56) != 0 && len >= 8 { crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32; buf = buf.add(8); len -= 8; } if len >= 384 { // First vector chunk - load three 512-bit vectors (192 bytes total) let mut x0 = _mm512_loadu_si512(buf as *const __m512i); let mut x1 = _mm512_loadu_si512(buf.add(64) as *const __m512i); let mut x2 = _mm512_loadu_si512(buf.add(128) as *const __m512i); // Create the multiplication constant vector // Pattern: [0xa87ab8a8, 0, 0xab7aff2a, 0] repeated across all 128-bit lanes let k_128 = _mm_setr_epi32(0xa87ab8a8u32 as i32, 0, 0xab7aff2au32 as i32, 0); let mut k = _mm512_broadcast_i32x4(k_128); // XOR the CRC into the first vector's low 32 bits let crc_vec = _mm512_castsi128_si512(_mm_cvtsi32_si128(crc0 as i32)); x0 = _mm512_xor_si512(crc_vec, x0); // First round of polynomial multiplication let mut y0 = clmul_lo_avx512_vpclmulqdq(x0, k); x0 = clmul_hi_avx512_vpclmulqdq(x0, k); let mut y1 = clmul_lo_avx512_vpclmulqdq(x1, k); x1 = clmul_hi_avx512_vpclmulqdq(x1, k); let mut y2 = clmul_lo_avx512_vpclmulqdq(x2, k); x2 = clmul_hi_avx512_vpclmulqdq(x2, k); // XOR with next chunk of data using ternary logic (A XOR B XOR C) // 0x96 = A XOR B XOR C in ternary logic notation x0 = _mm512_ternarylogic_epi64( x0, y0, _mm512_loadu_si512(buf.add(192) as *const __m512i), 0x96, ); x1 = _mm512_ternarylogic_epi64( x1, y1, _mm512_loadu_si512(buf.add(256) as *const __m512i), 0x96, ); x2 = _mm512_ternarylogic_epi64( x2, y2, _mm512_loadu_si512(buf.add(320) as *const __m512i), 0x96, ); buf = buf.add(384); len -= 384; // Main loop - process 384 bytes at a time while len >= 384 { // First folding step y0 = clmul_lo_avx512_vpclmulqdq(x0, k); x0 = clmul_hi_avx512_vpclmulqdq(x0, k); y1 = clmul_lo_avx512_vpclmulqdq(x1, k); x1 = clmul_hi_avx512_vpclmulqdq(x1, k); y2 = clmul_lo_avx512_vpclmulqdq(x2, k); x2 = clmul_hi_avx512_vpclmulqdq(x2, k); x0 = _mm512_ternarylogic_epi64(x0, y0, _mm512_loadu_si512(buf as *const __m512i), 0x96); x1 = _mm512_ternarylogic_epi64( x1, y1, _mm512_loadu_si512(buf.add(64) as *const __m512i), 0x96, ); x2 = _mm512_ternarylogic_epi64( x2, y2, _mm512_loadu_si512(buf.add(128) as *const __m512i), 0x96, ); // Second folding step y0 = clmul_lo_avx512_vpclmulqdq(x0, k); x0 = clmul_hi_avx512_vpclmulqdq(x0, k); y1 = clmul_lo_avx512_vpclmulqdq(x1, k); x1 = clmul_hi_avx512_vpclmulqdq(x1, k); y2 = clmul_lo_avx512_vpclmulqdq(x2, k); x2 = clmul_hi_avx512_vpclmulqdq(x2, k); x0 = _mm512_ternarylogic_epi64( x0, y0, _mm512_loadu_si512(buf.add(192) as *const __m512i), 0x96, ); x1 = _mm512_ternarylogic_epi64( x1, y1, _mm512_loadu_si512(buf.add(256) as *const __m512i), 0x96, ); x2 = _mm512_ternarylogic_epi64( x2, y2, _mm512_loadu_si512(buf.add(320) as *const __m512i), 0x96, ); buf = buf.add(384); len -= 384; } // Reduce x0, x1, x2 to just x0 let k_128 = _mm_setr_epi32(0x740eef02u32 as i32, 0, 0x9e4addf8u32 as i32, 0); k = _mm512_broadcast_i32x4(k_128); y0 = clmul_lo_avx512_vpclmulqdq(x0, k); x0 = clmul_hi_avx512_vpclmulqdq(x0, k); x0 = _mm512_ternarylogic_epi64(x0, y0, x1, 0x96); x1 = x2; y0 = clmul_lo_avx512_vpclmulqdq(x0, k); x0 = clmul_hi_avx512_vpclmulqdq(x0, k); x0 = _mm512_ternarylogic_epi64(x0, y0, x1, 0x96); // Reduce 512 bits to 128 bits // Multiple reduction constants for different parts of the 512-bit vector k = _mm512_setr_epi32( 0x1c291d04u32 as i32, 0, 0xddc0152bu32 as i32, 0, // Lane 0 0x3da6d0cbu32 as i32, 0, 0xba4fc28eu32 as i32, 0, // Lane 1 0xf20c0dfeu32 as i32, 0, 0x493c7d27u32 as i32, 0, // Lane 2 0, 0, 0, 0, // Lane 3 (unused) ); y0 = clmul_lo_avx512_vpclmulqdq(x0, k); k = clmul_hi_avx512_vpclmulqdq(x0, k); y0 = _mm512_xor_si512(y0, k); // Extract 128-bit lanes and combine them let lane0 = _mm512_castsi512_si128(y0); let lane1 = _mm512_extracti32x4_epi32(y0, 1); let lane2 = _mm512_extracti32x4_epi32(y0, 2); let lane3 = _mm512_extracti32x4_epi32(x0, 3); // Combine all lanes using ternary logic let mut z0 = _mm_ternarylogic_epi64(lane0, lane1, lane2, 0x96); z0 = _mm_xor_si128(z0, lane3); // Reduce 128 bits to 32 bits using CRC32 instructions crc0 = _mm_crc32_u64(0, _mm_extract_epi64(z0, 0) as u64) as u32; crc0 = _mm_crc32_u64(crc0.into(), _mm_extract_epi64(z0, 1) as u64) as u32; } // Process remaining 8-byte chunks while len >= 8 { crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32; buf = buf.add(8); len -= 8; } // Process remaining bytes while len > 0 { crc0 = _mm_crc32_u8(crc0, *buf); buf = buf.add(1); len -= 1; } crc0 } crc-fast-1.10.0/src/crc32/fusion/x86/iscsi/mod.rs000064400000000000000000000005211046102023000172750ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides x86-specific implementations of CRC-32/ISCSI calculations using //! fusion techniques. #![cfg(any(target_arch = "x86", target_arch = "x86_64"))] pub(crate) mod avx512_pclmulqdq; pub(crate) mod avx512_vpclmulqdq; pub(crate) mod sse_pclmulqdq; crc-fast-1.10.0/src/crc32/fusion/x86/iscsi/sse_pclmulqdq.rs000064400000000000000000000143211046102023000213750ustar 00000000000000//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ //! with the help of Claude.ai. //! //! MIT licensed. #![cfg(any(target_arch = "x86_64", target_arch = "x86"))] #[cfg(target_arch = "x86")] use core::arch::x86::*; #[cfg(target_arch = "x86_64")] use core::arch::x86_64::*; use crate::fusion::x86::*; /// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ /// with the help of Claude.ai using: /// /// ./generate -i sse -p crc32c -a v4s3x3 /// /// Modified as necessary for this Rust implementation. #[inline] #[target_feature(enable = "sse4.2,pclmulqdq")] pub unsafe fn crc32_iscsi_sse_v4s3x3(mut crc0: u32, mut buf: *const u8, mut len: usize) -> u32 { // Align to 8-byte boundary using hardware CRC32C instructions while len > 0 && (buf as usize & 7) != 0 { crc0 = _mm_crc32_u8(crc0, *buf); buf = buf.add(1); len -= 1; } // Handle 8-byte alignment if (buf as usize & 8) != 0 && len >= 8 { crc0 = mm_crc32_u64(crc0, *(buf as *const u64)); buf = buf.add(8); len -= 8; } if len >= 144 { let blk = (len - 8) / 136; let klen = blk * 24; let buf2 = buf; let mut crc1 = 0u32; let mut crc2 = 0u32; // First vector chunk - load four 128-bit vectors (64 bytes total) let mut x0 = _mm_loadu_si128(buf2 as *const __m128i); let mut x1 = _mm_loadu_si128(buf2.add(16) as *const __m128i); let mut x2 = _mm_loadu_si128(buf2.add(32) as *const __m128i); let mut x3 = _mm_loadu_si128(buf2.add(48) as *const __m128i); // iSCSI-specific folding constant (same as AVX-512 version) let mut k = _mm_setr_epi32(0x740eef02u32 as i32, 0, 0x9e4addf8u32 as i32, 0); // XOR the CRC into the first vector's low 32 bits x0 = _mm_xor_si128(_mm_cvtsi32_si128(crc0 as i32), x0); crc0 = 0; let mut buf2 = buf2.add(64); len -= 136; buf = buf.add(blk * 64); // Main loop - process 144 bytes at a time while len >= 144 { let mut y0 = clmul_lo_sse(x0, k); x0 = clmul_hi_sse(x0, k); let mut y1 = clmul_lo_sse(x1, k); x1 = clmul_hi_sse(x1, k); let mut y2 = clmul_lo_sse(x2, k); x2 = clmul_hi_sse(x2, k); let mut y3 = clmul_lo_sse(x3, k); x3 = clmul_hi_sse(x3, k); // XOR operations using separate XOR instructions (no ternary logic in SSE) y0 = _mm_xor_si128(y0, _mm_loadu_si128(buf2 as *const __m128i)); x0 = _mm_xor_si128(x0, y0); y1 = _mm_xor_si128(y1, _mm_loadu_si128(buf2.add(16) as *const __m128i)); x1 = _mm_xor_si128(x1, y1); y2 = _mm_xor_si128(y2, _mm_loadu_si128(buf2.add(32) as *const __m128i)); x2 = _mm_xor_si128(x2, y2); y3 = _mm_xor_si128(y3, _mm_loadu_si128(buf2.add(48) as *const __m128i)); x3 = _mm_xor_si128(x3, y3); // Process scalar data in parallel using hardware CRC32C crc0 = mm_crc32_u64(crc0, *(buf as *const u64)); crc1 = mm_crc32_u64(crc1, *(buf.add(klen) as *const u64)); crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2) as *const u64)); crc0 = mm_crc32_u64(crc0, *(buf.add(8) as *const u64)); crc1 = mm_crc32_u64(crc1, *(buf.add(klen + 8) as *const u64)); crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2 + 8) as *const u64)); crc0 = mm_crc32_u64(crc0, *(buf.add(16) as *const u64)); crc1 = mm_crc32_u64(crc1, *(buf.add(klen + 16) as *const u64)); crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2 + 16) as *const u64)); buf = buf.add(24); buf2 = buf2.add(64); len -= 136; } // Reduce x0 ... x3 to just x0 using iSCSI-specific constants k = _mm_setr_epi32(0xf20c0dfeu32 as i32, 0, 0x493c7d27u32 as i32, 0); let mut y0 = clmul_lo_sse(x0, k); x0 = clmul_hi_sse(x0, k); let mut y2 = clmul_lo_sse(x2, k); x2 = clmul_hi_sse(x2, k); y0 = _mm_xor_si128(y0, x1); x0 = _mm_xor_si128(x0, y0); y2 = _mm_xor_si128(y2, x3); x2 = _mm_xor_si128(x2, y2); k = _mm_setr_epi32(0x3da6d0cbu32 as i32, 0, 0xba4fc28eu32 as i32, 0); y0 = clmul_lo_sse(x0, k); x0 = clmul_hi_sse(x0, k); y0 = _mm_xor_si128(y0, x2); x0 = _mm_xor_si128(x0, y0); // Final scalar chunk crc0 = mm_crc32_u64(crc0, *(buf as *const u64)); crc1 = mm_crc32_u64(crc1, *(buf.add(klen) as *const u64)); crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2) as *const u64)); crc0 = mm_crc32_u64(crc0, *(buf.add(8) as *const u64)); crc1 = mm_crc32_u64(crc1, *(buf.add(klen + 8) as *const u64)); crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2 + 8) as *const u64)); crc0 = mm_crc32_u64(crc0, *(buf.add(16) as *const u64)); crc1 = mm_crc32_u64(crc1, *(buf.add(klen + 16) as *const u64)); crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2 + 16) as *const u64)); buf = buf.add(24); let vc0 = crc_shift_iscsi_sse(crc0, klen * 2 + 8); let vc1 = crc_shift_iscsi_sse(crc1, klen + 8); let mut vc = mm_extract_epi64(_mm_xor_si128(vc0, vc1), 0); // Reduce 128 bits to 32 bits, and multiply by x^32 // Extract the two 64-bit parts of x0 and combine them let x0_low = mm_extract_epi64(x0, 0); let x0_high = mm_extract_epi64(x0, 1); let x0_combined = mm_extract_epi64( crc_shift_iscsi_sse(mm_crc32_u64(mm_crc32_u64(0, x0_low), x0_high), klen * 3 + 8), 0, ); vc ^= x0_combined; // Final 8 bytes buf = buf.add(klen * 2); crc0 = crc2; crc0 = mm_crc32_u64(crc0, *(buf as *const u64) ^ vc); buf = buf.add(8); len -= 8; } // Process remaining 8-byte chunks using hardware CRC32C while len >= 8 { crc0 = mm_crc32_u64(crc0, *(buf as *const u64)); buf = buf.add(8); len -= 8; } // Process remaining bytes using hardware CRC32C while len > 0 { crc0 = _mm_crc32_u8(crc0, *buf); buf = buf.add(1); len -= 1; } crc0 } crc-fast-1.10.0/src/crc32/fusion/x86/mod.rs000064400000000000000000000237221046102023000161730ustar 00000000000000//! Provides CRC-32/ISCSI calculations using a fusion of native CLMUL //! instructions and native CRC calculation instructions on x86 / x86_64. //! //! https://www.corsix.org/content/fast-crc32c-4k //! https://www.corsix.org/content/alternative-exposition-crc32_4k_pclmulqdq //! //! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/ //! with the help of Claude.ai. //! //! Modified as necessary for this Rust implementation. //! //! MIT licensed. #![cfg(any(target_arch = "x86", target_arch = "x86_64"))] mod iscsi; use iscsi::sse_pclmulqdq::crc32_iscsi_sse_v4s3x3; #[cfg(target_arch = "x86")] use core::arch::x86::*; #[cfg(target_arch = "x86_64")] use core::arch::x86_64::*; #[cfg(target_arch = "x86_64")] use iscsi::avx512_pclmulqdq::crc32_iscsi_avx512_v4s3x3; #[cfg(target_arch = "x86_64")] use iscsi::avx512_vpclmulqdq::crc32_iscsi_avx512_vpclmulqdq_v3x2; /// CRC32 iSCSI calculation using the highest available instruction set (post-AVX-512 support) /// /// This function is called by the wrapper layer after feature detection has been performed. /// The wrapper layer ensures that only the appropriate implementation is called based on /// cached feature detection results, removing runtime checks from the hot path. #[inline(always)] pub fn crc32_iscsi(crc: u32, data: &[u8]) -> u32 { let data_len = data.len(); // SSE4.2 is required for native CRC32 instructions used in small buffer path if data_len <= 256 && is_x86_feature_detected!("sse4.2") { unsafe { return crc32_iscsi_small_fast(crc, data); } } #[cfg(target_arch = "x86_64")] { // AVX512 + VPCLMULQDQ if is_x86_feature_detected!("avx512vl") && is_x86_feature_detected!("vpclmulqdq") { unsafe { return crc32_iscsi_avx512_vpclmulqdq_v3x2(crc, data.as_ptr(), data_len); } } // AVX512 if is_x86_feature_detected!("avx512vl") { unsafe { return crc32_iscsi_avx512_v4s3x3(crc, data.as_ptr(), data_len); } } } // Fallback to SSE implementation unsafe { crc32_iscsi_sse_v4s3x3(crc, data.as_ptr(), data_len) } } #[cfg(target_arch = "x86_64")] #[inline] #[target_feature(enable = "avx512vl,vpclmulqdq")] unsafe fn clmul_lo_avx512_vpclmulqdq(a: __m512i, b: __m512i) -> __m512i { _mm512_clmulepi64_epi128(a, b, 0) } #[cfg(target_arch = "x86_64")] #[inline] #[target_feature(enable = "avx512vl,vpclmulqdq")] unsafe fn clmul_hi_avx512_vpclmulqdq(a: __m512i, b: __m512i) -> __m512i { _mm512_clmulepi64_epi128(a, b, 17) } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn clmul_lo_sse(a: __m128i, b: __m128i) -> __m128i { _mm_clmulepi64_si128(a, b, 0) } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn clmul_hi_sse(a: __m128i, b: __m128i) -> __m128i { _mm_clmulepi64_si128(a, b, 17) } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn clmul_scalar_sse(a: u32, b: u32) -> __m128i { _mm_clmulepi64_si128(_mm_cvtsi32_si128(a as i32), _mm_cvtsi32_si128(b as i32), 0) } // x^n mod P, in log(n) time #[target_feature(enable = "sse4.2,pclmulqdq")] unsafe fn xnmodp_iscsi_sse(mut n: u64) -> u32 { let mut stack = !1u64; let mut acc: u32; let mut low: u32; while n > 191 { stack = (stack << 1) + (n & 1); n = (n >> 1) - 16; } stack = !stack; acc = 0x80000000u32 >> (n & 31); n >>= 5; while n > 0 { // Use hardware CRC32C instruction acc = _mm_crc32_u32(acc, 0); n -= 1; } while { low = (stack & 1) as u32; stack >>= 1; stack != 0 } { let x = _mm_cvtsi32_si128(acc as i32); let clmul_result = _mm_clmulepi64_si128(x, x, 0); let y = mm_extract_epi64(clmul_result, 0); acc = mm_crc32_u64(0, y << low); } acc } #[inline] #[target_feature(enable = "pclmulqdq")] unsafe fn crc_shift_iscsi_sse(crc: u32, nbytes: usize) -> __m128i { clmul_scalar_sse(crc, xnmodp_iscsi_sse((nbytes * 8 - 33) as u64)) } #[inline] #[target_feature(enable = "sse4.1")] unsafe fn mm_extract_epi64(val: __m128i, idx: i32) -> u64 { #[cfg(target_arch = "x86_64")] { if idx == 0 { _mm_cvtsi128_si64(val) as u64 } else { _mm_cvtsi128_si64(_mm_srli_si128(val, 8)) as u64 } } #[cfg(target_arch = "x86")] { // On 32-bit x86, extract two 32-bit values and combine them let shifted = if idx == 0 { val } else { _mm_srli_si128(val, 8) }; let low = _mm_cvtsi128_si32(shifted) as u32; let high = _mm_cvtsi128_si32(_mm_srli_si128(shifted, 4)) as u32; (low as u64) | ((high as u64) << 32) } } #[inline] #[target_feature(enable = "sse4.2")] unsafe fn mm_crc32_u64(crc: u32, val: u64) -> u32 { #[cfg(target_arch = "x86_64")] { _mm_crc32_u64(crc.into(), val) as u32 } #[cfg(target_arch = "x86")] { // On 32-bit x86, process 64-bit value as two 32-bit CRC operations let low = val as u32; let high = (val >> 32) as u32; let crc = _mm_crc32_u32(crc, low); _mm_crc32_u32(crc, high) } } /// CRC-32/ISCSI calculation for small buffers (<= 256 bytes) using unrolled native CRC instructions #[inline] #[target_feature(enable = "sse4.2")] pub unsafe fn crc32_iscsi_small_fast(mut crc: u32, data: &[u8]) -> u32 { let (prefix, aligned, suffix) = data.align_to::(); for &byte in prefix { crc = _mm_crc32_u8(crc, byte); } let mut chunks = aligned.chunks_exact(8); for chunk in &mut chunks { crc = mm_crc32_u64(crc, chunk[0]); crc = mm_crc32_u64(crc, chunk[1]); crc = mm_crc32_u64(crc, chunk[2]); crc = mm_crc32_u64(crc, chunk[3]); crc = mm_crc32_u64(crc, chunk[4]); crc = mm_crc32_u64(crc, chunk[5]); crc = mm_crc32_u64(crc, chunk[6]); crc = mm_crc32_u64(crc, chunk[7]); } for &val in chunks.remainder() { crc = mm_crc32_u64(crc, val); } for &byte in suffix { crc = _mm_crc32_u8(crc, byte); } crc } #[cfg(test)] mod tests { use super::*; use crate::test::consts::TEST_CHECK_STRING; use crc::{Crc, Table}; use rand::{rng, Rng}; const RUST_CRC32_ISCSI: Crc> = Crc::>::new(&crc::CRC_32_ISCSI); #[test] fn test_crc32_iscsi_check() { if is_x86_feature_detected!("sse4.2") && is_x86_feature_detected!("pclmulqdq") { assert_eq!( crc32_iscsi(0xffffffff, TEST_CHECK_STRING) ^ 0xffffffff, 0xe3069283 ); } } #[test] fn test_crc32_iscsi_small_fast_check() { if is_x86_feature_detected!("sse4.2") { unsafe { assert_eq!( crc32_iscsi_small_fast(0xffffffff, TEST_CHECK_STRING) ^ 0xffffffff, 0xe3069283 ); } } } #[test] fn test_crc32_iscsi_small_fast_all_lengths() { if is_x86_feature_detected!("sse4.2") { for len in 1..=255 { test_crc32_iscsi_small_fast_random(len); } } } fn test_crc32_iscsi_small_fast_random(len: usize) { let mut data = vec![0u8; len]; rng().fill(&mut data[..]); let checksum = RUST_CRC32_ISCSI.checksum(&data); if is_x86_feature_detected!("sse4.2") { unsafe { assert_eq!( crc32_iscsi_small_fast(0xffffffff, &data) ^ 0xffffffff, checksum ); } } } #[test] fn test_crc32_iscsi_small_all_lengths() { if is_x86_feature_detected!("sse4.2") && is_x86_feature_detected!("pclmulqdq") { for len in 1..=255 { test_crc32_iscsi_random(len); } } } #[test] fn test_crc32_iscsi_medium_lengths() { if is_x86_feature_detected!("sse4.2") && is_x86_feature_detected!("pclmulqdq") { // Test each length from 256 to 1024, which should fold and include handling remainders for len in 256..=1024 { test_crc32_iscsi_random(len); } } } #[test] fn test_crc32_iscsi_large_lengths() { if is_x86_feature_detected!("sse4.2") && is_x86_feature_detected!("pclmulqdq") { // Test 1 MiB just before, at, and just after the folding boundaries for len in 1048575..1048577 { test_crc32_iscsi_random(len); } } } fn test_crc32_iscsi_random(len: usize) { let mut data = vec![0u8; len]; rng().fill(&mut data[..]); let checksum = RUST_CRC32_ISCSI.checksum(&data); if is_x86_feature_detected!("sse4.2") && is_x86_feature_detected!("pclmulqdq") { assert_eq!(crc32_iscsi(0xffffffff, &data) ^ 0xffffffff, checksum); } unsafe { #[cfg(target_arch = "x86_64")] { if is_x86_feature_detected!("vpclmulqdq") && is_x86_feature_detected!("avx512vl") && is_x86_feature_detected!("avx512f") { assert_eq!( crc32_iscsi_avx512_vpclmulqdq_v3x2(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff, checksum ); } if is_x86_feature_detected!("avx512vl") && is_x86_feature_detected!("avx512f") && is_x86_feature_detected!("pclmulqdq") { assert_eq!( crc32_iscsi_avx512_v4s3x3(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff, checksum ); } } assert_eq!( crc32_iscsi_sse_v4s3x3(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff, checksum ); } } } crc-fast-1.10.0/src/crc32/mod.rs000064400000000000000000000054211046102023000142370ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides CRC-32 support. pub mod algorithm; pub mod consts; pub(crate) mod width32_ops; #[cfg(all( feature = "std", any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64") ))] pub(crate) mod fusion; #[cfg(test)] mod property_tests { use crate::test::miri_compatible_proptest_config; use crate::{checksum, CrcAlgorithm}; use proptest::prelude::*; proptest! { #![proptest_config(miri_compatible_proptest_config())] /// Feature: crc16-hardware-acceleration, Property 4: CRC-32 and CRC-64 backwards compatibility /// *For any* existing CRC-32 or CRC-64 configuration and any input byte sequence, the /// computed checksum SHALL match the result from the `crc` crate reference implementation, /// ensuring no regression from CRC-16 changes. /// **Validates: Requirements 3.1, 3.2, 3.4** #[test] fn prop_crc32_compatibility(data in proptest::collection::vec(any::(), 0..1024)) { use crate::test::consts::{RUST_CRC32_ISCSI, RUST_CRC32_ISO_HDLC, RUST_CRC32_BZIP2, RUST_CRC32_MPEG_2}; // Test CRC-32/ISCSI (reflected) let our_iscsi = checksum(CrcAlgorithm::Crc32Iscsi, &data); let ref_iscsi = RUST_CRC32_ISCSI.checksum(&data) as u64; prop_assert_eq!( our_iscsi, ref_iscsi, "CRC-32/ISCSI mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}", data.len(), our_iscsi, ref_iscsi ); // Test CRC-32/ISO-HDLC (reflected) let our_hdlc = checksum(CrcAlgorithm::Crc32IsoHdlc, &data); let ref_hdlc = RUST_CRC32_ISO_HDLC.checksum(&data) as u64; prop_assert_eq!( our_hdlc, ref_hdlc, "CRC-32/ISO-HDLC mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}", data.len(), our_hdlc, ref_hdlc ); // Test CRC-32/BZIP2 (forward/non-reflected) let our_bzip2 = checksum(CrcAlgorithm::Crc32Bzip2, &data); let ref_bzip2 = RUST_CRC32_BZIP2.checksum(&data) as u64; prop_assert_eq!( our_bzip2, ref_bzip2, "CRC-32/BZIP2 mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}", data.len(), our_bzip2, ref_bzip2 ); // Test CRC-32/MPEG-2 (forward/non-reflected) let our_mpeg2 = checksum(CrcAlgorithm::Crc32Mpeg2, &data); let ref_mpeg2 = RUST_CRC32_MPEG_2.checksum(&data) as u64; prop_assert_eq!( our_mpeg2, ref_mpeg2, "CRC-32/MPEG-2 mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}", data.len(), our_mpeg2, ref_mpeg2 ); } } } crc-fast-1.10.0/src/crc32/width32_ops.rs000064400000000000000000000226771046102023000156410ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! Shared operations for CRC widths that operate in 32-bit space (CRC-16, CRC-32). //! //! CRC-16 computation scales 16-bit values to 32-bit space, uses these operations, //! then scales results back to 16 bits. CRC-32 uses these operations directly. //! //! This module eliminates code duplication between the CRC-16 and CRC-32 implementations, //! which share nearly identical SIMD operations for folding, Barrett reduction, and //! small input processing. #![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] use crate::algorithm; use crate::consts::CRC_CHUNK_SIZE; use crate::crc32::consts::{PSHUFB_SHF_TABLE_FORWARD, PSHUFB_SHF_TABLE_REVERSE, SIMD_CONSTANTS}; use crate::enums::Reflector; use crate::structs::CrcState; use crate::traits::{ArchOps, EnhancedCrcWidth}; /// SIMD constants for reflected 32-bit-space CRC operations pub const WIDTH32_CONSTANTS_REFLECTED: [[u64; 2]; 4] = [ [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask [0x8080808080808080, 0x8080808080808080], // mask1 [0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF], // mask2 reverse [0x0000000000000000, 0x0000000000000000], // unused ]; /// SIMD constants for forward (non-reflected) 32-bit-space CRC operations pub const WIDTH32_CONSTANTS_FORWARD: [[u64; 2]; 4] = [ [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask [0x8080808080808080, 0x8080808080808080], // mask1 [0xffffffffffffffff, 0x00000000ffffffff], // mask2 forward [0x0000000000000000, 0x0000000000000000], // unused ]; /// Load SIMD constants for 32-bit-space CRC operations #[inline(always)] pub fn load_constants(reflected: bool) -> [[u64; 2]; 4] { if reflected { WIDTH32_CONSTANTS_REFLECTED } else { WIDTH32_CONSTANTS_FORWARD } } /// Fold 16 bytes for 32-bit-space CRC operations (used by CRC-16 and CRC-32) #[inline(always)] pub unsafe fn fold_16( state: &mut CrcState, coeff: T::Vector, data_to_xor: T::Vector, ops: &T, ) where T::Vector: Copy, { let (h, l) = if state.reflected { ( ops.carryless_mul_10(state.value, coeff), ops.carryless_mul_01(state.value, coeff), ) } else { ( ops.carryless_mul_00(state.value, coeff), ops.carryless_mul_11(state.value, coeff), ) }; state.value = ops.xor3_vectors(h, l, data_to_xor); } /// Fold to width for 32-bit-space CRC operations (used by CRC-16 and CRC-32) #[inline(always)] pub unsafe fn fold_width(state: &mut CrcState, high: u64, low: u64, ops: &T) where T::Vector: Copy, { let coeff_vector_low = ops.create_vector_from_u64_pair_non_reflected(0, low); let coeff_vector_high = ops.create_vector_from_u64_pair_non_reflected(high, 0); state.value = if state.reflected { ops.xor_vectors( ops.carryless_mul_00(state.value, coeff_vector_low), ops.shift_right_8(state.value), ) } else { ops.xor_vectors( ops.carryless_mul_01(state.value, coeff_vector_low), ops.shift_left_8(state.value), ) }; let (clmul, masked) = if state.reflected { let mask2 = ops.load_aligned(&[0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF]); let masked = ops.and_vectors(state.value, mask2); let shifted = ops.shift_left_12(state.value); let clmul = ops.carryless_mul_11(shifted, coeff_vector_high); (clmul, masked) } else { let mask2 = ops.load_aligned(&[0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF]); let masked = ops.and_vectors(state.value, mask2); let shifted = ops.shift_right_12(state.value); let clmul = ops.carryless_mul_10(shifted, coeff_vector_high); (clmul, masked) }; state.value = ops.xor_vectors(clmul, masked); } /// Barrett reduction for 32-bit-space CRC operations (used by CRC-16 and CRC-32) /// /// Returns the raw u64 values from the vector; caller extracts appropriate bits: /// - CRC-32: extracts 32 bits /// - CRC-16: extracts 16 bits (after scaling back from 32-bit space) #[inline(always)] pub unsafe fn barrett_reduction( state: &CrcState, poly: u64, mu: u64, ops: &T, ) -> [u64; 2] where T::Vector: Copy, { let x = state.value; let mu_poly = ops.create_vector_from_u64_pair_non_reflected(poly, mu); if state.reflected { let clmul1 = ops.carryless_mul_00(x, mu_poly); let clmul2 = ops.carryless_mul_10(clmul1, mu_poly); let xorred = ops.xor_vectors(x, clmul2); ops.extract_u64s(xorred) } else { let clmul1 = ops.shift_left_4(ops.carryless_mul_01(x, mu_poly)); let clmul2_shifted = ops.shift_left_4(ops.carryless_mul_11(clmul1, mu_poly)); let final_xor = ops.xor_vectors(clmul2_shifted, x); ops.extract_u64s(final_xor) } } /// Create coefficient vector for 32-bit-space CRC operations (used by CRC-16 and CRC-32) #[inline(always)] pub unsafe fn create_coefficient(high: u64, low: u64, ops: &T) -> T::Vector where T::Vector: Copy, { ops.create_vector_from_u64_pair_non_reflected(high, low) } /// Get shuffle table pointer for 32-bit-space CRC operations (used by CRC-16 and CRC-32) #[inline(always)] pub fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize) { if reflected { let base_ptr = &PSHUFB_SHF_TABLE_REVERSE as *const _ as *const u8; (base_ptr, remaining_len) } else { let base_ptr = &PSHUFB_SHF_TABLE_FORWARD as *const _ as *const u8; (base_ptr, 16 - remaining_len) } } /// Perform final reduction for 32-bit-space CRC operations (used by CRC-16 and CRC-32) /// /// Returns the raw u64 values; caller extracts appropriate bits. #[inline(always)] pub unsafe fn perform_final_reduction( state: T::Vector, reflected: bool, keys: &[u64; 23], ops: &T, ) -> [u64; 2] where T::Vector: Copy, { let mut crc_state = CrcState { value: state, reflected, }; // Fold 16 bytes into 8 bytes, then 8 bytes into 4 bytes fold_width(&mut crc_state, keys[6], keys[5], ops); // Perform Barrett reduction to finalize barrett_reduction(&crc_state, keys[8], keys[7], ops) } /// Process inputs smaller than 16 bytes for 32-bit-space CRC operations (used by CRC-16 and CRC-32) #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] pub unsafe fn process_0_to_15( data: &[u8], state: &mut CrcState, reflector: &Reflector, keys: &[u64; 23], ops: &T, ) -> W::Value where T::Vector: Copy, { let mut buffer = [0u8; CRC_CHUNK_SIZE]; if state.reflected { buffer[CRC_CHUNK_SIZE - data.len()..].copy_from_slice(data); } else { buffer[..data.len()].copy_from_slice(data); } let len = data.len() as i32; let base = &PSHUFB_SHF_TABLE_REVERSE as *const _ as *const u8; let xmm7 = if state.reflected { let data = ops.load_bytes(buffer.as_ptr()); let mask1 = ops.load_aligned(&SIMD_CONSTANTS[1]); let ptr = base.add(if len < 4 { 8 + len as usize } else { len as usize }); let mask = ops.load_bytes(ptr); let modified_mask = ops.xor_vectors(mask, mask1); let shuffled_crc = ops.shuffle_bytes(state.value, modified_mask); ops.xor_vectors( if len < 4 { ops.shift_right_8(data) } else { data }, shuffled_crc, ) } else { let data_arr = ops.load_bytes(buffer.as_ptr()); let reflected_data = algorithm::reflect_bytes(reflector, data_arr, ops); let data_with_crc = ops.xor_vectors(reflected_data, state.value); if len < 4 { let result = match len { 3 => ops.shift_right_5(data_with_crc), 2 => ops.shift_right_6(data_with_crc), 1 => ops.shift_right_7(data_with_crc), _ => data_with_crc, }; return W::barrett_reduction( &CrcState { value: result, reflected: false, }, keys[8], keys[7], ops, ); } let base = &PSHUFB_SHF_TABLE_FORWARD as *const _ as *const u8; let ptr = base.add(16 - len as usize); let x0 = ops.load_bytes(ptr); let mask1 = ops.load_aligned(&SIMD_CONSTANTS[1]); let x0 = ops.xor_vectors(x0, mask1); if len < 8 { ops.shuffle_bytes(data_with_crc, x0) } else { let mut xmm7 = ops.load_bytes(buffer.as_ptr()); if let Reflector::ForwardReflector { smask } = reflector { xmm7 = ops.shuffle_bytes(xmm7, *smask); } xmm7 = ops.xor_vectors(xmm7, state.value); let ptr = base.add(16 - len as usize); let x0 = ops.load_bytes(ptr); let xmm0 = ops.xor_vectors(x0, mask1); ops.shuffle_bytes(xmm7, xmm0) } }; if len >= 4 { return W::perform_final_reduction(xmm7, state.reflected, keys, ops); } let final_state = CrcState { value: xmm7, reflected: state.reflected, }; W::barrett_reduction(&final_state, keys[8], keys[7], ops) } crc-fast-1.10.0/src/crc64/algorithm.rs000064400000000000000000000224701046102023000154560ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides the CRC-64 implementation for areas where it differs from CRC-32. #![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] use crate::algorithm; use crate::consts::{CRC_CHUNK_SIZE, CRC_HALF_CHUNK_SIZE}; use crate::crc64::consts::SIMD_CONSTANTS; use crate::enums::Reflector; use crate::structs::CrcState; use crate::traits::{ArchOps, EnhancedCrcWidth}; impl EnhancedCrcWidth for crate::structs::Width64 { #[inline(always)] fn load_constants(_reflected: bool) -> [[u64; 2]; 4] { [ [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask [0x8080808080808080, 0x8080808080808080], // mask1 (mask3 reflected) [0xffffffffffffffff, 0x00000000ffffffff], // mask2 [0x0000000000000000, 0xffffffffffffffff], // mask3 (forward) ] } #[inline(always)] unsafe fn create_state( value: Self::Value, reflected: bool, ops: &T, ) -> CrcState where T::Vector: Copy, { let vector = if reflected { ops.create_vector_from_u64(value, false) // Set low 64 bits } else { ops.create_vector_from_u64(value, true) // Set high 64 bits }; CrcState { value: vector, reflected, } } #[inline(always)] unsafe fn extract_result(vector: T::Vector, reflected: bool, ops: &T) -> Self::Value where T::Vector: Copy, { let u64s = ops.extract_u64s(vector); if reflected { u64s[0] // Low 64 bits for reflected mode } else { u64s[1] // High 64 bits for non-reflected mode } } #[inline(always)] unsafe fn fold_16( state: &mut CrcState, coeff: T::Vector, data_to_xor: T::Vector, ops: &T, ) where T::Vector: Copy, { // CRC-64 specific implementation for folding 16 bytes state.value = { ops.xor3_vectors( ops.carryless_mul_00(state.value, coeff), ops.carryless_mul_11(state.value, coeff), data_to_xor, ) }; } #[inline(always)] unsafe fn fold_width(state: &mut CrcState, high: u64, low: u64, ops: &T) where T::Vector: Copy, { // CRC-64 specific implementation for folding 8 bytes let coeff = Self::create_coefficient(high, low, state.reflected, ops); if state.reflected { let h = ops.carryless_mul_01(coeff, state.value); let shifted = ops.shift_right_8(state.value); state.value = ops.xor_vectors(h, shifted); } else { let clmul = ops.carryless_mul_01(state.value, coeff); let shifted = ops.shift_left_8(state.value); state.value = ops.xor_vectors(clmul, shifted); } } #[inline(always)] unsafe fn barrett_reduction( state: &CrcState, poly: u64, mu: u64, ops: &T, ) -> Self::Value where T::Vector: Copy, { // CRC-64 Barrett reduction let x = state.value; let mu_poly = Self::create_coefficient(mu, poly, state.reflected, ops); if state.reflected { let clmul1 = ops.carryless_mul_00(x, mu_poly); let clmul2 = ops.carryless_mul_10(clmul1, mu_poly); let clmul1_shifted = ops.shift_left_8(clmul1); let final_xor = ops.xor3_vectors(clmul2, clmul1_shifted, x); ops.extract_u64s(final_xor)[1] } else { // Load mask3 for non-reflected mode let mask3 = ops.load_aligned(&[0x0000000000000000, 0xffffffffffffffff]); let x1 = ops.and_vectors(x, mask3); let clmul1 = ops.carryless_mul_11(x1, mu_poly); let clmul2 = ops.carryless_mul_01(ops.xor_vectors(clmul1, x1), mu_poly); let final_xor = ops.xor_vectors(clmul2, x); ops.extract_u64s(final_xor)[0] } } #[inline(always)] unsafe fn create_coefficient( high: u64, low: u64, reflected: bool, ops: &T, ) -> T::Vector where T::Vector: Copy, { ops.create_vector_from_u64_pair(high, low, reflected) } #[inline(always)] unsafe fn perform_final_reduction( state: T::Vector, reflected: bool, keys: &[u64; 23], ops: &T, ) -> Self::Value where T::Vector: Copy, { let mut crc_state = CrcState { value: state, reflected, }; // Fold 16 bytes into 8 bytes Self::fold_width(&mut crc_state, keys[6], keys[5], ops); // Perform Barrett reduction to finalize Self::barrett_reduction(&crc_state, keys[8], keys[7], ops) } #[inline(always)] fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize) { use crate::crc64::consts::{PSBTBL_FORWARD, PSBTBL_REVERSE}; if reflected { // For reflected mode let base_ptr = &PSBTBL_REVERSE as *const _ as *const u8; let offset = if remaining_len <= CRC_CHUNK_SIZE { remaining_len } else { let real_remaining = remaining_len % CRC_CHUNK_SIZE; if real_remaining == 0 { 0 } else { real_remaining } }; (base_ptr, offset) } else { // For non-reflected mode let base_ptr = &PSBTBL_FORWARD as *const _ as *const u8; let offset = if remaining_len <= CRC_CHUNK_SIZE { CRC_CHUNK_SIZE - remaining_len } else { let real_remaining = remaining_len % CRC_CHUNK_SIZE; if real_remaining == 0 { 0 } else { CRC_CHUNK_SIZE - real_remaining } }; (base_ptr, offset) } } } /// Process inputs smaller than 16 bytes #[inline] #[cfg_attr( any(target_arch = "x86", target_arch = "x86_64"), target_feature(enable = "ssse3,sse4.1,pclmulqdq") )] #[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))] pub(crate) unsafe fn process_0_to_15( data: &[u8], state: &mut CrcState, reflector: &Reflector, keys: &[u64; 23], ops: &T, ) -> W::Value where T::Vector: Copy, { // Create a zero-initialized aligned buffer let mut buffer = [0u8; CRC_CHUNK_SIZE]; // Copy input data into the buffer buffer[..data.len()].copy_from_slice(data); // Get the length for processing let len = data.len() as i32; // Process the buffer let xmm7 = if state.reflected { // Get base pointer and standard offset from the trait method let (base_ptr, standard_offset) = W::get_last_bytes_table_ptr(true, len as usize); // Apply special adjustment for 1-7 bytes let ptr = if len < CRC_HALF_CHUNK_SIZE as i32 { // For 1-7 bytes: Add CRC_HALF_CHUNK_SIZE (8) to the offset base_ptr.add(standard_offset + CRC_HALF_CHUNK_SIZE) } else { // For 8-15 bytes: Use the standard offset directly base_ptr.add(standard_offset) }; // Load shuffle mask let xmm0 = ops.load_bytes(ptr); // Apply shuffle to data XORed with initial state let data_with_crc = ops.xor_vectors(ops.load_bytes(buffer.as_ptr()), state.value); ops.shuffle_bytes(data_with_crc, xmm0) } else { // Calculate pointer offset for forward table // For non-reflected mode, we need to apply a special base offset let base_offset = if len < CRC_HALF_CHUNK_SIZE as i32 { 24 } else { 16 }; // Use the trait method to get the base pointer and standard offset let (base_ptr, _) = W::get_last_bytes_table_ptr(false, len as usize); // Instead of using standard_offset directly, we use our special base_offset // This is the key difference that makes the code work correctly let ptr = base_ptr.add(base_offset - len as usize); // Load and reflect data let reflected_data = algorithm::reflect_bytes(reflector, ops.load_bytes(buffer.as_ptr()), ops); let data_with_crc = ops.xor_vectors(reflected_data, state.value); // Load shuffle mask let x0 = ops.load_bytes(ptr); if len >= CRC_HALF_CHUNK_SIZE as i32 { // For lengths 8-15, XOR with mask1 let mask1 = ops.load_aligned(&SIMD_CONSTANTS[1]); ops.shuffle_bytes(data_with_crc, ops.xor_vectors(x0, mask1)) } else { // For lengths 1-7, just return shuffled data ops.shuffle_bytes(data_with_crc, x0) } }; if len >= CRC_HALF_CHUNK_SIZE as i32 { // For 8-15 bytes, perform additional folding return W::perform_final_reduction(xmm7, state.reflected, keys, ops); } let final_state = CrcState { value: xmm7, reflected: state.reflected, }; // Barrett reduction to finalize W::barrett_reduction(&final_state, keys[8], keys[7], ops) } crc-fast-1.10.0/src/crc64/consts.rs000064400000000000000000000331311046102023000147750ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. #![allow(dead_code)] use crate::consts::*; use crate::structs::Algorithm; use crate::CrcAlgorithm; use crate::CrcParams; pub const CRC_64_ECMA_182: Algorithm = Algorithm { width: 64, poly: 0x42f0e1eba9ea3693, init: 0x0, refin: false, refout: false, xorout: 0x0, check: 0x6c40df5f0b497347, residue: 0x0, }; pub const CRC_64_GO_ISO: Algorithm = Algorithm { width: 64, poly: 0x1b, init: 0xffffffffffffffff, refin: true, refout: true, xorout: 0xffffffffffffffff, check: 0xb90956c775a41001, residue: 0x5300000000000000, }; pub const CRC_64_MS: Algorithm = Algorithm { width: 64, poly: 0x259c84cba6426349, init: 0xffffffffffffffff, refin: true, refout: true, xorout: 0x0, check: 0x75d4b74f024eceea, residue: 0x0, }; pub const CRC_64_NVME: Algorithm = Algorithm { width: 64, poly: 0xad93d23594c93659, init: 0xffffffffffffffff, refin: true, refout: true, xorout: 0xffffffffffffffff, check: 0xae8b14860a799888, residue: 0xf310303b2b6f6e42, }; pub const CRC_64_REDIS: Algorithm = Algorithm { width: 64, poly: 0xad93d23594c935a9, init: 0x0, refin: true, refout: true, xorout: 0x0, check: 0xe9c6d914c4b8d9ca, residue: 0x0, }; pub const CRC_64_WE: Algorithm = Algorithm { width: 64, poly: 0x42f0e1eba9ea3693, init: 0xffffffffffffffff, refin: false, refout: false, xorout: 0xffffffffffffffff, check: 0x62ec59e3f1a4f00a, residue: 0xfcacbebd5931a992, }; pub const CRC_64_XZ: Algorithm = Algorithm { width: 64, poly: 0x42f0e1eba9ea3693, init: 0xffffffffffffffff, refin: true, refout: true, xorout: 0xffffffffffffffff, check: 0x995dc9bbdf1939fa, residue: 0x49958c9abd7d353f, }; // width=64 poly=0x42f0e1eba9ea3693 init=0x0000000000000000 refin=false refout=false xorout=0x0000000000000000 check=0x6c40df5f0b497347 residue=0x0000000000000000 name="CRC-64/ECMA-182" pub const CRC64_ECMA_182: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc64Ecma182, name: NAME_CRC64_ECMA_182, width: CRC_64_ECMA_182.width, poly: CRC_64_ECMA_182.poly, init: CRC_64_ECMA_182.init, init_algorithm: CRC_64_ECMA_182.init, refin: CRC_64_ECMA_182.refin, // false refout: CRC_64_ECMA_182.refout, // false xorout: CRC_64_ECMA_182.xorout, check: CRC_64_ECMA_182.check, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_42F0E1EBA9EA3693_FORWARD), }; // width=64 poly=0x000000000000001b init=0xffffffffffffffff refin=true refout=true xorout=0xffffffffffffffff check=0xb90956c775a41001 residue=0x5300000000000000 name="CRC-64/GO-ISO" pub const CRC64_GO_ISO: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc64GoIso, name: NAME_CRC64_GO_ISO, width: CRC_64_GO_ISO.width, poly: CRC_64_GO_ISO.poly, init: CRC_64_GO_ISO.init, init_algorithm: CRC_64_GO_ISO.init, refin: CRC_64_GO_ISO.refin, // true refout: CRC_64_GO_ISO.refout, // true xorout: CRC_64_GO_ISO.xorout, check: CRC_64_GO_ISO.check, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_000000000000001B_REFLECTED), }; // width=64 poly=0x259c84cba6426349 init=0xffffffffffffffff refin=true refout=true xorout=0x0000000000000000 check=0x75d4b74f024eceea residue=0x0000000000000000 name="CRC-64/MS" pub const CRC64_MS: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc64Ms, name: NAME_CRC64_MS, width: 64, poly: CRC_64_MS.poly, init: CRC_64_MS.init, init_algorithm: CRC_64_MS.init, refin: CRC_64_MS.refin, // true refout: CRC_64_MS.refout, // true xorout: CRC_64_MS.xorout, check: CRC_64_MS.check, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_259C84CBA6426349_REFLECTED), }; // https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-64-nvme // width=64 poly=0xad93d23594c93659 init=0xffffffffffffffff refin=true refout=true xorout=0xffffffffffffffff check=0xae8b14860a799888 residue=0xf310303b2b6f6e42 name="CRC-64/NVME" pub const CRC64_NVME: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc64Nvme, name: NAME_CRC64_NVME, width: CRC_64_NVME.width, poly: CRC_64_NVME.poly, init: CRC_64_NVME.init, init_algorithm: CRC_64_NVME.init, refin: CRC_64_NVME.refin, // true refout: CRC_64_NVME.refout, // true xorout: CRC_64_NVME.xorout, check: CRC_64_NVME.check, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_AD93D23594C93659_REFLECTED), }; // width=64 poly=0xad93d23594c935a9 init=0x0000000000000000 refin=true refout=true xorout=0x0000000000000000 check=0xe9c6d914c4b8d9ca residue=0x0000000000000000 name="CRC-64/REDIS" pub const CRC64_REDIS: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc64Redis, name: NAME_CRC64_REDIS, width: CRC_64_REDIS.width, poly: CRC_64_REDIS.poly, init: CRC_64_REDIS.init, init_algorithm: CRC_64_REDIS.init, refin: CRC_64_REDIS.refin, // true refout: CRC_64_REDIS.refout, // true xorout: CRC_64_REDIS.xorout, check: CRC_64_REDIS.check, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_AD93D23594C935A9_REFLECTED), }; // width=64 poly=0x42f0e1eba9ea3693 init=0xffffffffffffffff refin=false refout=false xorout=0xffffffffffffffff check=0x62ec59e3f1a4f00a residue=0xfcacbebd5931a992 name="CRC-64/WE" pub const CRC64_WE: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc64We, name: NAME_CRC64_WE, width: CRC_64_WE.width, poly: CRC_64_WE.poly, init: CRC_64_WE.init, init_algorithm: CRC_64_WE.init, refin: CRC_64_WE.refin, // false refout: CRC_64_WE.refout, // false xorout: CRC_64_WE.xorout, check: CRC_64_WE.check, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_42F0E1EBA9EA3693_FORWARD), }; // width=64 poly=0x42f0e1eba9ea3693 init=0xffffffffffffffff refin=true refout=true xorout=0xffffffffffffffff check=0x995dc9bbdf1939fa residue=0x49958c9abd7d353f name="CRC-64/XZ" pub const CRC64_XZ: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc64Xz, name: NAME_CRC64_XZ, width: CRC_64_XZ.width, poly: CRC_64_XZ.poly, init: CRC_64_XZ.init, init_algorithm: CRC_64_XZ.init, refin: CRC_64_XZ.refin, // true refout: CRC_64_XZ.refout, // true xorout: CRC_64_XZ.xorout, check: CRC_64_XZ.check, keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_42F0E1EBA9EA3693_REFLECTED), }; // CRC-64/MS const KEYS_259C84CBA6426349_REFLECTED: [u64; 23] = [ 0x0000000000000000, 0xcef05cca14bbf4df, 0xfd5d7a0700b5ba38, 0xafde70a30ebb4286, 0xe7a651bf12fbb17b, 0xcef05cca14bbf4df, 0x0000000000000000, 0xd7eb06822197a109, 0x258c84cba6427349, 0x9f5bbc2a0e2e4c6f, 0x50e15bfbd337753a, 0x064a94c5212d44f4, 0x4aaa0531d46f3c70, 0xebd4e5a2eb6d83a1, 0x295b872fea8473f0, 0xa62bc2d50bf03c03, 0xd3e2dc3a51dacee1, 0x4aa4564b4042092b, 0x717984ed338c465f, 0x70bd522114faceb8, 0x2188097f5687b43c, 0xb7c2f9fa47c4fe55, 0x8dccaf9d6169d0fa, ]; // CRC-64/REDIS const KEYS_AD93D23594C935A9_REFLECTED: [u64; 23] = [ 0x0000000000000000, 0x381d0015c96f4444, 0xd9d7be7d505da32c, 0x768361524d29ed0b, 0xcc26fa7c57f8054c, 0x381d0015c96f4444, 0x0000000000000000, 0x3e6cfa329aef9f77, 0x2b5926535897936b, 0x5bc94ba8e2087636, 0x6cf09c8f37710b75, 0x3885fd59e440d95a, 0xbccba3936411fb7e, 0xe4dd0d81cbfce585, 0xb715e37b96ed8633, 0xf49784a634f014e4, 0xaf86efb16d9ab4fb, 0x7b3211a760160db8, 0xa062b2319d66692f, 0xef3d1d18ed889ed2, 0x6ba4d760ab38201e, 0x9471a5389095fe44, 0x9a8908341a6d6d52, ]; // CRC-64/ECMA-182, CRC-64/WE const KEYS_42F0E1EBA9EA3693_FORWARD: [u64; 23] = [ 0x0000000000000000, // unused placeholder to match 1-based indexing 0x05f5c3c7eb52fab6, // 2^(64* 2) mod P(x) 0x4eb938a7d257740e, // 2^(64* 3) mod P(x) 0x05cf79dea9ac37d6, // 2^(64*16) mod P(x) 0x001067e571d7d5c2, // 2^(64*17) mod P(x) 0x05f5c3c7eb52fab6, // 2^(64* 2) mod P(x) 0x0000000000000000, // 2^(64* 1) mod P(x) 0x578d29d06cc4f872, // floor(2^128/P(x)) - 2^64, mu 0x42f0e1eba9ea3693, // P(x) - 2^64, poly_simd 0xe464f4df5fb60ac1, // 2^(64*14) mod P(x) 0xb649c5b35a759cf2, // 2^(64*15) mod P(x) 0x9af04e1eff82d0dd, // 2^(64*12) mod P(x) 0x6e82e609297f8fe8, // 2^(64*13) mod P(x) 0x097c516e98bd2e73, // 2^(64*10) mod P(x) 0x0b76477b31e22e7b, // 2^(64*11) mod P(x) 0x5f6843ca540df020, // 2^(64* 8) mod P(x) 0xddf4b6981205b83f, // 2^(64* 9) mod P(x) 0x54819d8713758b2c, // 2^(64* 6) mod P(x) 0x4a6b90073eb0af5a, // 2^(64* 7) mod P(x) 0x571bee0a227ef92b, // 2^(64* 4) mod P(x) 0x44bef2a201b5200c, // 2^(64* 5) mod P(x) 0x7f52691a60ddc70d, 0x7036b0389f6a0c82, ]; // CRC-64/XZ const KEYS_42F0E1EBA9EA3693_REFLECTED: [u64; 23] = [ 0x0000000000000000, // unused placeholder to match 1-based indexing 0xdabe95afc7875f40, // 2^((64* 2)-1) mod P(x) 0xe05dd497ca393ae4, // 2^((64* 3)-1) mod P(x) 0xd7d86b2af73de740, // 2^((64*16)-1) mod P(x) 0x8757d71d4fcc1000, // 2^((64*17)-1) mod P(x) 0xdabe95afc7875f40, // 2^((64* 2)-1) mod P(x) 0x0000000000000000, // 2^((64* 1)-1) mod P(x) 0x9c3e466c172963d5, // floor((2^127)/(P(x)), mu 0x92d8af2baf0e1e85, // P(x) - 1, poly_simd 0x947874de595052cb, // 2^((64*14)-1) mod P(x) 0x9e735cb59b4724da, // 2^((64*15)-1) mod P(x) 0xe4ce2cd55fea0037, // 2^((64*12)-1) mod P(x) 0x2fe3fd2920ce82ec, // 2^((64*13)-1) mod P(x) 0x0e31d519421a63a5, // 2^((64*10)-1) mod P(x) 0x2e30203212cac325, // 2^((64*11)-1) mod P(x) 0x081f6054a7842df4, // 2^((64* 8)-1) mod P(x) 0x6ae3efbb9dd441f3, // 2^((64* 9)-1) mod P(x) 0x69a35d91c3730254, // 2^((64* 6)-1) mod P(x) 0xb5ea1af9c013aca4, // 2^((64* 7)-1) mod P(x) 0x3be653a30fe1af51, // 2^((64* 4)-1) mod P(x) 0x60095b008a9efa44, // 2^((64* 5)-1) mod P(x) 0xf31fd9271e228b79, 0x8260adf2381ad81c, ]; // CRC-64/GO-ISO const KEYS_000000000000001B_REFLECTED: [u64; 23] = [ 0x0000000000000000, // unused placeholder to match 1-based indexing 0xf500000000000001, // 2^((64* 2)-1) mod P(x) 0x6b70000000000001, // 2^((64* 3)-1) mod P(x) 0xb001000000010000, // 2^((64*16)-1) mod P(x) 0xf501b0000001b000, // 2^((64*17)-1) mod P(x) 0xf500000000000001, // 2^((64* 2)-1) mod P(x) 0x0000000000000000, // 2^((64* 1)-1) mod P(x) 0xb000000000000001, // floor((2^127)/(P(x)), mu 0xb000000000000001, // P(x) - 1, poly_simd 0xe014514514501501, // 2^((64*14)-1) mod P(x) 0x771db6db6db71c71, // 2^((64*15)-1) mod P(x) 0xa101101101110001, // 2^((64*12)-1) mod P(x) 0x1ab1ab1ab1aab001, // 2^((64*13)-1) mod P(x) 0xf445014445000001, // 2^((64*10)-1) mod P(x) 0x6aab71daab700001, // 2^((64*11)-1) mod P(x) 0xb100010100000001, // 2^((64* 8)-1) mod P(x) 0x01b001b1b0000001, // 2^((64* 9)-1) mod P(x) 0xe145150000000001, // 2^((64* 6)-1) mod P(x) 0x76db6c7000000001, // 2^((64* 7)-1) mod P(x) 0xa011000000000001, // 2^((64* 4)-1) mod P(x) 0x1b1ab00000000001, // 2^((64* 5)-1) mod P(x) 0x45000000b0000000, 0x6b700000f5000000, ]; // CRC-64/NVME const KEYS_AD93D23594C93659_REFLECTED: [u64; 23] = [ 0x0000000000000000, // unused placeholder to match 1-based indexing 0x21e9_761e_2526_21ac, 0xeadc_41fd_2ba3_d420, 0x5f85_2fb6_1e8d_92dc, 0xa1ca_681e_733f_9c40, 0x21e9_761e_2526_21ac, 0x0000000000000000, 0x27ec_fa32_9aef_9f77, // mu 0x34d9_2653_5897_936b, // poly 0x9465_8840_3d4a_dcbc, 0xd083_dd59_4d96_319d, 0x34f5_a24e_22d6_6e90, 0x3c25_5f5e_bc41_4423, 0x0336_3823_e6e7_91e5, 0x7b0a_b10d_d0f8_09fe, 0x6224_2240_ace5_045a, 0x0c32_cdb3_1e18_a84a, 0xa3ff_dc1f_e8e8_2a8b, 0xbdd7_ac0e_e1a4_a0f0, 0xe1e0_bb9d_45d7_a44c, 0xb0bc_2e58_9204_f500, 0xa043_808c_0f78_2663, 0x37cc_d3e1_4069_cabc, ]; pub const SIMD_CONSTANTS: [[u64; 2]; 4] = [ [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask [0x8080808080808080, 0x8080808080808080], // mask1 [0xffffffffffffffff, 0x00000000ffffffff], // mask2 [0x0000000000000000, 0xffffffffffffffff], // mask3 ]; /// Lookup tables for byte reflection and other operations #[repr(C, align(16))] pub struct AlignedTableReverse { row1: [u8; 16], row2: [u8; 16], } pub const PSBTBL_REVERSE: AlignedTableReverse = AlignedTableReverse { row1: [ // First row (quadwords 1&2): 08786858483828100h, 08f8e8d8c8b8a8988h 0x00, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, ], row2: [ // Second row (quadwords 3&4): 00706050403020100h, 0000e0d0c0b0a0908h 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x00, ], }; #[repr(C, align(16))] pub struct AlignedTableForward { row1: [u8; 16], row2: [u8; 16], row3: [u8; 16], row4: [u8; 16], } pub const PSBTBL_FORWARD: AlignedTableForward = AlignedTableForward { // First row: 08786858483828100h, 08f8e8d8c8b8a8988h row1: [ 0x00, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, ], // Second row: 00706050403020100h, 00f0e0d0c0b0a0908h row2: [ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, ], // Third row: 08080808080808080h, 00f0e0d0c0b0a0908h row3: [ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, ], // Fourth row: 08080808080808080h, 08080808080808080h row4: [ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, ], }; crc-fast-1.10.0/src/crc64/mod.rs000064400000000000000000000050641046102023000142470ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides CRC-64 support. pub mod algorithm; pub mod consts; pub mod utils; #[cfg(test)] mod property_tests { use crate::test::miri_compatible_proptest_config; use crate::{checksum, CrcAlgorithm}; use proptest::prelude::*; proptest! { #![proptest_config(miri_compatible_proptest_config())] /// Feature: crc16-hardware-acceleration, Property 4: CRC-32 and CRC-64 backwards compatibility /// *For any* existing CRC-32 or CRC-64 configuration and any input byte sequence, the /// computed checksum SHALL match the result from the `crc` crate reference implementation, /// ensuring no regression from CRC-16 changes. /// **Validates: Requirements 3.1, 3.2, 3.4** #[test] fn prop_crc64_compatibility(data in proptest::collection::vec(any::(), 0..1024)) { use crate::test::consts::{RUST_CRC64_NVME, RUST_CRC64_XZ, RUST_CRC64_ECMA_182, RUST_CRC64_GO_ISO}; // Test CRC-64/NVME (reflected) let our_nvme = checksum(CrcAlgorithm::Crc64Nvme, &data); let ref_nvme = RUST_CRC64_NVME.checksum(&data); prop_assert_eq!( our_nvme, ref_nvme, "CRC-64/NVME mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}", data.len(), our_nvme, ref_nvme ); // Test CRC-64/XZ (reflected) let our_xz = checksum(CrcAlgorithm::Crc64Xz, &data); let ref_xz = RUST_CRC64_XZ.checksum(&data); prop_assert_eq!( our_xz, ref_xz, "CRC-64/XZ mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}", data.len(), our_xz, ref_xz ); // Test CRC-64/ECMA-182 (forward/non-reflected) let our_ecma = checksum(CrcAlgorithm::Crc64Ecma182, &data); let ref_ecma = RUST_CRC64_ECMA_182.checksum(&data); prop_assert_eq!( our_ecma, ref_ecma, "CRC-64/ECMA-182 mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}", data.len(), our_ecma, ref_ecma ); // Test CRC-64/GO-ISO (reflected) let our_go_iso = checksum(CrcAlgorithm::Crc64GoIso, &data); let ref_go_iso = RUST_CRC64_GO_ISO.checksum(&data); prop_assert_eq!( our_go_iso, ref_go_iso, "CRC-64/GO-ISO mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}", data.len(), our_go_iso, ref_go_iso ); } } } crc-fast-1.10.0/src/crc64/utils.rs000064400000000000000000000045401046102023000146260ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. #![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] // SIMD intrinsics for debug printing (std only) #[cfg(all(feature = "std", target_arch = "aarch64"))] use core::arch::aarch64::*; #[cfg(all(feature = "std", target_arch = "x86"))] use core::arch::x86::*; #[cfg(all(feature = "std", target_arch = "x86_64"))] use core::arch::x86_64::*; // ArchOps trait for generic vector printing (std only) #[cfg(feature = "std")] use crate::traits::ArchOps; #[cfg(all(feature = "std", target_arch = "aarch64"))] #[allow(dead_code)] #[target_feature(enable = "aes")] pub(crate) unsafe fn print_xmm_hex(prefix: &str, xmm: uint8x16_t) { let mut temp = [0u64; 2]; vst1q_u64(temp.as_mut_ptr(), vreinterpretq_u64_u8(xmm)); println!("{}={:#016x}{:016x}", prefix, temp[1], temp[0]); } #[cfg(all(feature = "std", any(target_arch = "x86", target_arch = "x86_64")))] #[allow(dead_code)] #[target_feature(enable = "sse4.1")] pub(crate) unsafe fn print_xmm_hex(prefix: &str, xmm: __m128i) { let mut temp = [0u64; 2]; _mm_storeu_si128(temp.as_mut_ptr() as *mut __m128i, xmm); println!("{}={:#016x}{:016x}", prefix, temp[1], temp[0]); } #[cfg(feature = "std")] #[allow(dead_code)] pub(crate) unsafe fn print_vector_hex(prefix: &str, vector: T::Vector, ops: &T) { // Extract the u64 values from the vector using the ArchOps trait let values = ops.extract_u64s(vector); // Print in the same format as your original functions println!("{}={:#016x}_{:016x}", prefix, values[1], values[0]); } /// Print a vector as u8 array (useful for byte-level debugging) #[cfg(feature = "std")] #[allow(dead_code)] pub(crate) unsafe fn print_vector_bytes(prefix: &str, vector: T::Vector, ops: &T) { // Extract the u64 values let values = ops.extract_u64s(vector); // Convert to bytes for detailed inspection let bytes: [u8; 16] = core::mem::transmute([values[0], values[1]]); println!("{}=[{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x}]", prefix, bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7], bytes[8], bytes[9], bytes[10], bytes[11], bytes[12], bytes[13], bytes[14], bytes[15] ); } crc-fast-1.10.0/src/enums.rs000064400000000000000000000207621046102023000137000ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. use crate::consts::*; use crate::CrcAlgorithm; use core::fmt::{Display, Formatter}; use core::str::FromStr; impl FromStr for CrcAlgorithm { type Err = (); fn from_str(s: &str) -> Result { match s { NAME_CRC16_ARC => Ok(CrcAlgorithm::Crc16Arc), NAME_CRC16_CDMA2000 => Ok(CrcAlgorithm::Crc16Cdma2000), NAME_CRC16_CMS => Ok(CrcAlgorithm::Crc16Cms), NAME_CRC16_DDS_110 => Ok(CrcAlgorithm::Crc16Dds110), NAME_CRC16_DECT_R => Ok(CrcAlgorithm::Crc16DectR), NAME_CRC16_DECT_X => Ok(CrcAlgorithm::Crc16DectX), NAME_CRC16_DNP => Ok(CrcAlgorithm::Crc16Dnp), NAME_CRC16_EN_13757 => Ok(CrcAlgorithm::Crc16En13757), NAME_CRC16_GENIBUS => Ok(CrcAlgorithm::Crc16Genibus), NAME_CRC16_GSM => Ok(CrcAlgorithm::Crc16Gsm), NAME_CRC16_IBM_3740 => Ok(CrcAlgorithm::Crc16Ibm3740), NAME_CRC16_IBM_SDLC => Ok(CrcAlgorithm::Crc16IbmSdlc), NAME_CRC16_ISO_IEC_14443_3_A => Ok(CrcAlgorithm::Crc16IsoIec144433A), NAME_CRC16_KERMIT => Ok(CrcAlgorithm::Crc16Kermit), NAME_CRC16_LJ1200 => Ok(CrcAlgorithm::Crc16Lj1200), NAME_CRC16_M17 => Ok(CrcAlgorithm::Crc16M17), NAME_CRC16_MAXIM_DOW => Ok(CrcAlgorithm::Crc16MaximDow), NAME_CRC16_MCRF4XX => Ok(CrcAlgorithm::Crc16Mcrf4xx), NAME_CRC16_MODBUS => Ok(CrcAlgorithm::Crc16Modbus), NAME_CRC16_NRSC_5 => Ok(CrcAlgorithm::Crc16Nrsc5), NAME_CRC16_OPENSAFETY_A => Ok(CrcAlgorithm::Crc16OpensafetyA), NAME_CRC16_OPENSAFETY_B => Ok(CrcAlgorithm::Crc16OpensafetyB), NAME_CRC16_PROFIBUS => Ok(CrcAlgorithm::Crc16Profibus), NAME_CRC16_RIELLO => Ok(CrcAlgorithm::Crc16Riello), NAME_CRC16_SPI_FUJITSU => Ok(CrcAlgorithm::Crc16SpiFujitsu), NAME_CRC16_T10_DIF => Ok(CrcAlgorithm::Crc16T10Dif), NAME_CRC16_TELEDISK => Ok(CrcAlgorithm::Crc16Teledisk), NAME_CRC16_TMS37157 => Ok(CrcAlgorithm::Crc16Tms37157), NAME_CRC16_UMTS => Ok(CrcAlgorithm::Crc16Umts), NAME_CRC16_USB => Ok(CrcAlgorithm::Crc16Usb), NAME_CRC16_XMODEM => Ok(CrcAlgorithm::Crc16Xmodem), NAME_CRC32_AIXM => Ok(CrcAlgorithm::Crc32Aixm), NAME_CRC32_AUTOSAR => Ok(CrcAlgorithm::Crc32Autosar), NAME_CRC32_BASE91_D => Ok(CrcAlgorithm::Crc32Base91D), NAME_CRC32_BZIP2 => Ok(CrcAlgorithm::Crc32Bzip2), NAME_CRC32_CD_ROM_EDC => Ok(CrcAlgorithm::Crc32CdRomEdc), NAME_CRC32_CKSUM => Ok(CrcAlgorithm::Crc32Cksum), NAME_CRC32_ISCSI => Ok(CrcAlgorithm::Crc32Iscsi), NAME_CRC32_ISO_HDLC => Ok(CrcAlgorithm::Crc32IsoHdlc), NAME_CRC32_JAMCRC => Ok(CrcAlgorithm::Crc32Jamcrc), NAME_CRC32_MEF => Ok(CrcAlgorithm::Crc32Mef), NAME_CRC32_MPEG_2 => Ok(CrcAlgorithm::Crc32Mpeg2), NAME_CRC32_XFER => Ok(CrcAlgorithm::Crc32Xfer), NAME_CRC64_GO_ISO => Ok(CrcAlgorithm::Crc64GoIso), NAME_CRC64_MS => Ok(CrcAlgorithm::Crc64Ms), NAME_CRC64_NVME => Ok(CrcAlgorithm::Crc64Nvme), NAME_CRC64_REDIS => Ok(CrcAlgorithm::Crc64Redis), NAME_CRC64_XZ => Ok(CrcAlgorithm::Crc64Xz), NAME_CRC64_ECMA_182 => Ok(CrcAlgorithm::Crc64Ecma182), NAME_CRC64_WE => Ok(CrcAlgorithm::Crc64We), _ => Err(()), } } } #[allow(deprecated)] impl Display for CrcAlgorithm { fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result { match self { CrcAlgorithm::Crc16Arc => write!(f, "{NAME_CRC16_ARC}"), CrcAlgorithm::Crc16Cdma2000 => write!(f, "{NAME_CRC16_CDMA2000}"), CrcAlgorithm::Crc16Cms => write!(f, "{NAME_CRC16_CMS}"), CrcAlgorithm::Crc16Dds110 => write!(f, "{NAME_CRC16_DDS_110}"), CrcAlgorithm::Crc16DectR => write!(f, "{NAME_CRC16_DECT_R}"), CrcAlgorithm::Crc16DectX => write!(f, "{NAME_CRC16_DECT_X}"), CrcAlgorithm::Crc16Dnp => write!(f, "{NAME_CRC16_DNP}"), CrcAlgorithm::Crc16En13757 => write!(f, "{NAME_CRC16_EN_13757}"), CrcAlgorithm::Crc16Genibus => write!(f, "{NAME_CRC16_GENIBUS}"), CrcAlgorithm::Crc16Gsm => write!(f, "{NAME_CRC16_GSM}"), CrcAlgorithm::Crc16Ibm3740 => write!(f, "{NAME_CRC16_IBM_3740}",), CrcAlgorithm::Crc16IbmSdlc => write!(f, "{NAME_CRC16_IBM_SDLC}",), CrcAlgorithm::Crc16IsoIec144433A => { write!(f, "{NAME_CRC16_ISO_IEC_14443_3_A}",) } CrcAlgorithm::Crc16Kermit => write!(f, "{NAME_CRC16_KERMIT}"), CrcAlgorithm::Crc16Lj1200 => write!(f, "{NAME_CRC16_LJ1200}"), CrcAlgorithm::Crc16M17 => write!(f, "{NAME_CRC16_M17}"), CrcAlgorithm::Crc16MaximDow => write!(f, "{NAME_CRC16_MAXIM_DOW}"), CrcAlgorithm::Crc16Mcrf4xx => write!(f, "{NAME_CRC16_MCRF4XX}"), CrcAlgorithm::Crc16Modbus => write!(f, "{NAME_CRC16_MODBUS}"), CrcAlgorithm::Crc16Nrsc5 => write!(f, "{NAME_CRC16_NRSC_5}"), CrcAlgorithm::Crc16OpensafetyA => write!(f, "{NAME_CRC16_OPENSAFETY_A}"), CrcAlgorithm::Crc16OpensafetyB => write!(f, "{NAME_CRC16_OPENSAFETY_B}"), CrcAlgorithm::Crc16Profibus => write!(f, "{NAME_CRC16_PROFIBUS}"), CrcAlgorithm::Crc16Riello => write!(f, "{NAME_CRC16_RIELLO}"), CrcAlgorithm::Crc16SpiFujitsu => write!(f, "{NAME_CRC16_SPI_FUJITSU}"), CrcAlgorithm::Crc16T10Dif => write!(f, "{NAME_CRC16_T10_DIF}",), CrcAlgorithm::Crc16Teledisk => write!(f, "{NAME_CRC16_TELEDISK}"), CrcAlgorithm::Crc16Tms37157 => write!(f, "{NAME_CRC16_TMS37157}"), CrcAlgorithm::Crc16Umts => write!(f, "{NAME_CRC16_UMTS}"), CrcAlgorithm::Crc16Usb => write!(f, "{NAME_CRC16_USB}"), CrcAlgorithm::Crc16Xmodem => write!(f, "{NAME_CRC16_XMODEM}"), CrcAlgorithm::Crc32Aixm => write!(f, "{NAME_CRC32_AIXM}",), CrcAlgorithm::Crc32Autosar => write!(f, "{NAME_CRC32_AUTOSAR}",), CrcAlgorithm::Crc32Base91D => write!(f, "{NAME_CRC32_BASE91_D}",), CrcAlgorithm::Crc32Bzip2 => write!(f, "{NAME_CRC32_BZIP2}",), CrcAlgorithm::Crc32CdRomEdc => write!(f, "{NAME_CRC32_CD_ROM_EDC}",), CrcAlgorithm::Crc32Cksum => write!(f, "{NAME_CRC32_CKSUM}",), CrcAlgorithm::Crc32Custom => write!(f, "CRC-32/CUSTOM"), CrcAlgorithm::Crc32Iscsi => write!(f, "{NAME_CRC32_ISCSI}",), CrcAlgorithm::Crc32IsoHdlc => write!(f, "{NAME_CRC32_ISO_HDLC}",), CrcAlgorithm::Crc32Jamcrc => write!(f, "{NAME_CRC32_JAMCRC}",), CrcAlgorithm::Crc32Mef => write!(f, "{NAME_CRC32_MEF}",), CrcAlgorithm::Crc32Mpeg2 => write!(f, "{NAME_CRC32_MPEG_2}",), CrcAlgorithm::Crc32Xfer => write!(f, "{NAME_CRC32_XFER}",), CrcAlgorithm::CrcCustom => write!(f, "CRC/CUSTOM"), CrcAlgorithm::Crc64Custom => write!(f, "CRC-64/CUSTOM"), CrcAlgorithm::Crc64GoIso => write!(f, "{NAME_CRC64_GO_ISO}",), CrcAlgorithm::Crc64Ms => write!(f, "{NAME_CRC64_MS}",), CrcAlgorithm::Crc64Nvme => write!(f, "{NAME_CRC64_NVME}",), CrcAlgorithm::Crc64Redis => write!(f, "{NAME_CRC64_REDIS}",), CrcAlgorithm::Crc64Xz => write!(f, "{NAME_CRC64_XZ}",), CrcAlgorithm::Crc64Ecma182 => write!(f, "{NAME_CRC64_ECMA_182}",), CrcAlgorithm::Crc64We => write!(f, "{NAME_CRC64_WE}",), } } } #[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] #[derive(Debug, Copy, Clone)] pub(crate) enum Reflector { NoReflector, ForwardReflector { smask: T }, } #[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] /// Different processing strategies based on data length pub(crate) enum DataChunkProcessor { From0To15, // 0-15 bytes From16, // exactly 16 bytes From17To31, // 17-31 bytes From32To255, // 32-255 bytes } #[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] impl DataChunkProcessor { /// Select the appropriate processor based on data length pub fn for_length(len: usize) -> Self { match len { 0..=15 => Self::From0To15, 16 => Self::From16, 17..=31 => Self::From17To31, 32..=255 => Self::From32To255, _ => panic!("data length too large"), } } } crc-fast-1.10.0/src/feature_detection.rs000064400000000000000000001171451046102023000162440ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! Feature detection system for safe and efficient hardware acceleration across different //! platforms. #[cfg(all( not(feature = "std"), any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64") ))] use spin::Once; #[cfg(all( feature = "std", any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64") ))] use std::sync::OnceLock; #[cfg(all(feature = "alloc", not(feature = "std")))] extern crate alloc; #[cfg(all( feature = "alloc", not(feature = "std"), any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64") ))] use alloc::string::{String, ToString}; #[cfg(any( test, all( feature = "std", any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64") ) ))] use std::string::{String, ToString}; /// Global ArchOps instance cache - initialized once based on feature detection results #[cfg(all( feature = "std", any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64") ))] static ARCH_OPS_INSTANCE: OnceLock = OnceLock::new(); #[cfg(all( not(feature = "std"), any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64") ))] static ARCH_OPS_INSTANCE: Once = Once::new(); /// Performance tiers representing different hardware capability levels #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[allow(dead_code)] // Some variants may not be constructed on all target architectures pub enum PerformanceTier { // AArch64 tiers AArch64AesSha3, AArch64Aes, // x86_64 tiers X86_64Avx512Vpclmulqdq, X86_64Avx512Pclmulqdq, X86_64SsePclmulqdq, // x86 tiers X86SsePclmulqdq, // Fallback SoftwareTable, } /// Architecture-specific capabilities #[derive(Debug, Clone, Copy)] #[allow(dead_code)] // Some fields may not be read on all target architectures pub struct ArchCapabilities { // AArch64 features pub has_aes: bool, // provides PMULL support for CRC calculations (NEON is implicit) pub has_crc: bool, // provides native CRC32 instructions for fusion techniques pub has_sha3: bool, // requires 'aes', provides EOR3 for XOR3 operations // x86/x86_64 features pub has_sse41: bool, pub has_sse42: bool, // provides native CRC32C instructions for fusion techniques pub has_pclmulqdq: bool, pub has_avx512vl: bool, // implicitly enables avx512f, has XOR3 operations pub has_vpclmulqdq: bool, } /// Helper function to convert a performance tier to a human-readable target string /// Format: {architecture}-{intrinsics-family}-{intrinsics-features} #[cfg(any( test, all( feature = "alloc", any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64") ) ))] #[inline(always)] fn tier_to_target_string(tier: PerformanceTier) -> String { match tier { PerformanceTier::AArch64AesSha3 => "aarch64-neon-pmull-sha3".to_string(), PerformanceTier::AArch64Aes => "aarch64-neon-pmull".to_string(), PerformanceTier::X86_64Avx512Vpclmulqdq => "x86_64-avx512-vpclmulqdq".to_string(), PerformanceTier::X86_64Avx512Pclmulqdq => "x86_64-avx512-pclmulqdq".to_string(), PerformanceTier::X86_64SsePclmulqdq => "x86_64-sse-pclmulqdq".to_string(), PerformanceTier::X86SsePclmulqdq => "x86-sse-pclmulqdq".to_string(), PerformanceTier::SoftwareTable => "software-fallback-tables".to_string(), } } /// Detect architecture-specific capabilities combining compile-time and runtime checks /// /// # Safety /// Uses runtime feature detection which may access CPU-specific registers #[cfg(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64"))] unsafe fn detect_arch_capabilities() -> ArchCapabilities { #[cfg(target_arch = "aarch64")] { detect_aarch64_features() } #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] { detect_x86_features() } #[cfg(not(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")))] { // Other architectures use software fallback ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, } } } /// AArch64-specific feature detection /// /// Note: NEON is always available on AArch64 and is implicitly enabled by AES support. /// AES support provides the PMULL instructions needed for CRC calculations. #[inline(always)] #[cfg(all(target_arch = "aarch64", feature = "std"))] unsafe fn detect_aarch64_features() -> ArchCapabilities { use std::arch::is_aarch64_feature_detected; // AES is available on essentially all AArch64 CPUs and provides the PMULL instructions let has_aes = is_aarch64_feature_detected!("aes"); // CRC provides native CRC32 instructions for fusion techniques let has_crc = is_aarch64_feature_detected!("crc"); // SHA3 is available on modern Aarch64 CPUs, and provides the EOR3 instruction for efficient // XOR3 operations. let has_sha3 = is_aarch64_feature_detected!("sha3"); ArchCapabilities { has_aes, has_crc, has_sha3, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, } } #[inline(always)] #[cfg(all(target_arch = "aarch64", not(feature = "std")))] unsafe fn detect_aarch64_features() -> ArchCapabilities { ArchCapabilities { has_aes: cfg!(target_feature = "aes"), has_crc: cfg!(target_feature = "crc"), has_sha3: cfg!(target_feature = "sha3"), has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, } } /// x86/x86_64-specific feature detection #[inline(always)] #[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), feature = "std"))] unsafe fn detect_x86_features() -> ArchCapabilities { use std::arch::is_x86_feature_detected; // SSE 4.1 and PCLMULQDQ support are the baseline for hardware acceleration let has_sse41 = is_x86_feature_detected!("sse4.1"); let has_pclmulqdq = has_sse41 && is_x86_feature_detected!("pclmulqdq"); let has_avx512vl = has_pclmulqdq && is_x86_feature_detected!("avx512vl"); let has_vpclmulqdq = has_avx512vl && is_x86_feature_detected!("vpclmulqdq"); // SSE 4.2 provides native CRC32C instructions for fusion techniques let has_sse42 = is_x86_feature_detected!("sse4.2"); ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41, has_sse42, has_pclmulqdq, has_avx512vl, has_vpclmulqdq, } } #[inline(always)] #[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), not(feature = "std")))] unsafe fn detect_x86_features() -> ArchCapabilities { let has_sse41 = cfg!(target_feature = "sse4.1"); let has_sse42 = cfg!(target_feature = "sse4.2"); let has_pclmulqdq = has_sse41 && cfg!(target_feature = "pclmulqdq"); let has_avx512vl = has_pclmulqdq && cfg!(target_feature = "avx512vl"); let has_vpclmulqdq = has_avx512vl && cfg!(target_feature = "vpclmulqdq"); ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41, has_sse42, has_pclmulqdq, has_avx512vl, has_vpclmulqdq, } } /// Select the appropriate performance tier based on detected capabilities #[inline(always)] #[allow(unused)] pub(crate) fn select_performance_tier(capabilities: &ArchCapabilities) -> PerformanceTier { #[cfg(target_arch = "aarch64")] { if capabilities.has_sha3 && capabilities.has_aes { return PerformanceTier::AArch64AesSha3; } if capabilities.has_aes { return PerformanceTier::AArch64Aes; } } #[cfg(target_arch = "x86_64")] { if capabilities.has_vpclmulqdq { return PerformanceTier::X86_64Avx512Vpclmulqdq; } if capabilities.has_avx512vl { return PerformanceTier::X86_64Avx512Pclmulqdq; } if capabilities.has_pclmulqdq { return PerformanceTier::X86_64SsePclmulqdq; } } #[cfg(target_arch = "x86")] { if capabilities.has_pclmulqdq { return PerformanceTier::X86SsePclmulqdq; } } // Fallback to software implementation PerformanceTier::SoftwareTable } /// Enum that holds the different ArchOps implementations for compile-time dispatch /// This avoids the need for trait objects while still providing factory-based selection #[cfg(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64"))] #[derive(Debug, Clone, Copy)] pub enum ArchOpsInstance { #[cfg(target_arch = "aarch64")] Aarch64Aes(crate::arch::aarch64::aes::Aarch64AesOps), #[cfg(target_arch = "aarch64")] Aarch64AesSha3(crate::arch::aarch64::aes_sha3::Aarch64AesSha3Ops), #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] X86SsePclmulqdq(crate::arch::x86::sse::X86SsePclmulqdqOps), #[cfg(target_arch = "x86_64")] X86_64Avx512Pclmulqdq(crate::arch::x86_64::avx512::X86_64Avx512PclmulqdqOps), #[cfg(target_arch = "x86_64")] X86_64Avx512Vpclmulqdq(crate::arch::x86_64::avx512_vpclmulqdq::X86_64Avx512VpclmulqdqOps), /// Software fallback - no ArchOps struct needed SoftwareFallback, } #[cfg(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64"))] impl ArchOpsInstance { #[inline(always)] pub fn get_tier(&self) -> PerformanceTier { match self { #[cfg(target_arch = "aarch64")] ArchOpsInstance::Aarch64Aes(_) => PerformanceTier::AArch64Aes, #[cfg(target_arch = "aarch64")] ArchOpsInstance::Aarch64AesSha3(_) => PerformanceTier::AArch64AesSha3, #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] ArchOpsInstance::X86SsePclmulqdq(_) => PerformanceTier::X86SsePclmulqdq, #[cfg(target_arch = "x86_64")] ArchOpsInstance::X86_64Avx512Pclmulqdq(_) => PerformanceTier::X86_64Avx512Pclmulqdq, #[cfg(target_arch = "x86_64")] ArchOpsInstance::X86_64Avx512Vpclmulqdq(_) => PerformanceTier::X86_64Avx512Vpclmulqdq, ArchOpsInstance::SoftwareFallback => PerformanceTier::SoftwareTable, } } /// Get a human-readable target string describing the active configuration #[cfg(all( feature = "alloc", any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64") ))] #[inline(always)] pub fn get_target_string(&self) -> String { tier_to_target_string(self.get_tier()) } } /// Get the global ArchOps instance (thread-safe, initialized once based on feature detection) /// /// This function provides access to the cached ArchOps instance that was selected based on /// feature detection results at library initialization time, eliminating runtime feature /// detection overhead from hot paths. #[cfg(all( feature = "std", any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64") ))] pub fn get_arch_ops() -> &'static ArchOpsInstance { ARCH_OPS_INSTANCE.get_or_init(create_arch_ops) } #[cfg(all( not(feature = "std"), any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64") ))] pub fn get_arch_ops() -> &'static ArchOpsInstance { ARCH_OPS_INSTANCE.call_once(create_arch_ops) } /// Factory function that creates the appropriate ArchOps struct based on cached feature detection /// /// This function uses the cached feature detection results to select the optimal /// architecture-specific implementation at library initialization time, eliminating /// runtime feature detection overhead from hot paths. #[cfg(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64"))] fn create_arch_ops() -> ArchOpsInstance { let capabilities = unsafe { detect_arch_capabilities() }; let tier = select_performance_tier(&capabilities); create_arch_ops_from_tier(tier) } /// Helper function to create ArchOpsInstance from a performance tier #[cfg(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64"))] fn create_arch_ops_from_tier(tier: PerformanceTier) -> ArchOpsInstance { match tier { #[cfg(target_arch = "aarch64")] PerformanceTier::AArch64AesSha3 => { use crate::arch::aarch64::aes_sha3::Aarch64AesSha3Ops; ArchOpsInstance::Aarch64AesSha3(Aarch64AesSha3Ops::new()) } #[cfg(target_arch = "aarch64")] PerformanceTier::AArch64Aes => { use crate::arch::aarch64::aes::Aarch64AesOps; ArchOpsInstance::Aarch64Aes(Aarch64AesOps) } #[cfg(target_arch = "x86_64")] PerformanceTier::X86_64Avx512Vpclmulqdq => { use crate::arch::x86_64::avx512_vpclmulqdq::X86_64Avx512VpclmulqdqOps; ArchOpsInstance::X86_64Avx512Vpclmulqdq(X86_64Avx512VpclmulqdqOps::new()) } #[cfg(target_arch = "x86_64")] PerformanceTier::X86_64Avx512Pclmulqdq => { use crate::arch::x86_64::avx512::X86_64Avx512PclmulqdqOps; ArchOpsInstance::X86_64Avx512Pclmulqdq(X86_64Avx512PclmulqdqOps::new()) } #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] PerformanceTier::X86_64SsePclmulqdq | PerformanceTier::X86SsePclmulqdq => { create_x86_sse_pclmulqdq_ops() } PerformanceTier::SoftwareTable => { // Use software fallback ArchOpsInstance::SoftwareFallback } // Handle cases where the performance tier doesn't match the current architecture _ => { // This can happen when a tier is selected for a different architecture // Fall back to software implementation ArchOpsInstance::SoftwareFallback } } } #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] fn create_x86_sse_pclmulqdq_ops() -> ArchOpsInstance { use crate::arch::x86::sse::X86SsePclmulqdqOps; ArchOpsInstance::X86SsePclmulqdq(X86SsePclmulqdqOps) } /// Test-specific tier selection that works across all architectures for comprehensive testing #[cfg(test)] pub fn select_performance_tier_for_test(capabilities: &ArchCapabilities) -> PerformanceTier { // AArch64 tier selection - SHA3 requires AES to be available if capabilities.has_sha3 && capabilities.has_aes { return PerformanceTier::AArch64AesSha3; } if capabilities.has_aes { return PerformanceTier::AArch64Aes; } // x86_64 tier selection - VPCLMULQDQ requires AVX512VL if capabilities.has_vpclmulqdq && capabilities.has_avx512vl { return PerformanceTier::X86_64Avx512Vpclmulqdq; } // AVX512VL requires PCLMULQDQ and SSE4.1 if capabilities.has_avx512vl && capabilities.has_pclmulqdq { return PerformanceTier::X86_64Avx512Pclmulqdq; } // PCLMULQDQ requires SSE4.1 if capabilities.has_pclmulqdq && capabilities.has_sse41 { return PerformanceTier::X86_64SsePclmulqdq; } // Fallback to software implementation PerformanceTier::SoftwareTable } #[cfg(test)] mod tests { use super::*; #[test] fn test_aarch64_tier_selection() { // Test that aarch64 tier selection follows the expected hierarchy // Test SHA3 + AES (highest tier) - NEON is implicit with AES let capabilities_sha3 = ArchCapabilities { has_aes: true, has_crc: false, has_sha3: true, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&capabilities_sha3), PerformanceTier::AArch64AesSha3 ); // Test AES only (baseline tier) - NEON is implicit with AES let capabilities_aes = ArchCapabilities { has_aes: true, has_crc: false, has_sha3: false, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&capabilities_aes), PerformanceTier::AArch64Aes ); // Test missing AES (should fall back to software) let capabilities_no_aes = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&capabilities_no_aes), PerformanceTier::SoftwareTable ); } #[test] fn test_aarch64_feature_hierarchy() { // Test that AArch64 feature hierarchy is properly maintained // NEON is always available on AArch64 and implicit with AES // AES provides PMULL instructions, SHA3 provides EOR3 // Create test capabilities with AES support (NEON is implicit) let capabilities_with_aes = ArchCapabilities { has_aes: true, has_crc: false, has_sha3: false, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; // AES support means we have PMULL instructions available for CRC calculations assert!(capabilities_with_aes.has_aes); // SHA3 requires AES to be available first let capabilities_with_sha3 = ArchCapabilities { has_aes: true, has_crc: false, has_sha3: true, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert!(capabilities_with_sha3.has_aes); assert!(capabilities_with_sha3.has_sha3); } #[test] #[cfg(target_arch = "x86_64")] fn test_x86_64_tier_selection() { // Test that x86_64 tier selection follows the expected hierarchy // Test VPCLMULQDQ + AVX512 (highest tier) let capabilities_vpclmulqdq = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: true, has_vpclmulqdq: true, }; assert_eq!( select_performance_tier_for_test(&capabilities_vpclmulqdq), PerformanceTier::X86_64Avx512Vpclmulqdq ); // Test AVX512 + PCLMULQDQ (mid-tier) let capabilities_avx512 = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: true, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&capabilities_avx512), PerformanceTier::X86_64Avx512Pclmulqdq ); // Test SSE + PCLMULQDQ (baseline tier) let capabilities_sse = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&capabilities_sse), PerformanceTier::X86_64SsePclmulqdq ); // Test missing PCLMULQDQ (should fall back to software) let capabilities_no_pclmul = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&capabilities_no_pclmul), PerformanceTier::SoftwareTable ); } #[test] #[cfg(target_arch = "x86")] fn test_x86_tier_selection() { // Test that x86 (32-bit) tier selection works correctly // Test SSE + PCLMULQDQ (only available tier for x86) let capabilities_sse = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&capabilities_sse), PerformanceTier::X86_64SsePclmulqdq ); // For x86 32-bit testing, we need a special case since AVX512VL indicates x86_64 // Create capabilities without AVX512VL to simulate x86 32-bit let capabilities_x86_sse = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: false, // No AVX512 on 32-bit x86 has_vpclmulqdq: false, }; // This should select x86_64 tier since we're testing the general case assert_eq!( select_performance_tier_for_test(&capabilities_x86_sse), PerformanceTier::X86_64SsePclmulqdq ); // Test missing PCLMULQDQ (should fall back to software) let capabilities_no_pclmul = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&capabilities_no_pclmul), PerformanceTier::SoftwareTable ); } #[test] fn test_x86_feature_hierarchy() { // Test that x86 feature hierarchy is properly maintained // SSE4.1 is required for PCLMULQDQ // AVX512VL requires PCLMULQDQ // VPCLMULQDQ requires AVX512VL // Test feature dependencies are enforced let capabilities_full = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: true, has_vpclmulqdq: true, }; // All x86 features should be available when hierarchy is satisfied assert!(capabilities_full.has_sse41); assert!(capabilities_full.has_pclmulqdq); assert!(capabilities_full.has_avx512vl); assert!(capabilities_full.has_vpclmulqdq); } // Mock tests for compile-time and runtime feature agreement scenarios mod mock_feature_agreement_tests { use super::*; #[test] fn test_feature_dependency_validation() { // Test that feature dependencies are properly validated // SHA3 without AES should not be possible let invalid_sha3_caps = ArchCapabilities { has_aes: false, // Missing required dependency has_crc: false, has_sha3: true, // This should be impossible in real detection has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; // Should fall back to software since AES is required for SHA3 assert_eq!( select_performance_tier_for_test(&invalid_sha3_caps), PerformanceTier::SoftwareTable ); // VPCLMULQDQ without AVX512VL should not be possible let invalid_vpclmul_caps = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: false, // Missing required dependency has_vpclmulqdq: true, // This should be impossible in real detection }; // Should fall back to SSE tier since AVX512VL is required for VPCLMULQDQ assert_eq!( select_performance_tier_for_test(&invalid_vpclmul_caps), PerformanceTier::X86_64SsePclmulqdq ); } } // Comprehensive tier selection tests across different hardware configurations mod tier_selection_comprehensive_tests { use super::*; #[test] fn test_all_aarch64_tier_combinations() { // Test all possible AArch64 capability combinations // No features - software fallback let no_features = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&no_features), PerformanceTier::SoftwareTable ); // AES only - baseline AArch64 tier let aes_only = ArchCapabilities { has_aes: true, has_crc: false, has_sha3: false, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&aes_only), PerformanceTier::AArch64Aes ); // AES + SHA3 - highest AArch64 tier let aes_sha3 = ArchCapabilities { has_aes: true, has_crc: false, has_sha3: true, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&aes_sha3), PerformanceTier::AArch64AesSha3 ); } #[test] fn test_all_x86_64_tier_combinations() { // Test all possible x86_64 capability combinations // No features - software fallback let no_features = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&no_features), PerformanceTier::SoftwareTable ); // SSE4.1 only - software fallback (PCLMULQDQ required) let sse_only = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&sse_only), PerformanceTier::SoftwareTable ); // SSE4.1 + PCLMULQDQ - baseline x86_64 tier let sse_pclmul = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&sse_pclmul), PerformanceTier::X86_64SsePclmulqdq ); // SSE4.1 + PCLMULQDQ + AVX512VL - mid-tier let avx512_pclmul_new_rust = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: true, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&avx512_pclmul_new_rust), PerformanceTier::X86_64Avx512Pclmulqdq ); // All features - highest tier let all_features_new_rust = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: true, has_vpclmulqdq: true, }; assert_eq!( select_performance_tier_for_test(&all_features_new_rust), PerformanceTier::X86_64Avx512Vpclmulqdq ); } #[test] fn test_x86_32bit_tier_combinations() { // Test x86 (32-bit) capability combinations // No features - software fallback let no_features = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; assert_eq!( select_performance_tier_for_test(&no_features), PerformanceTier::SoftwareTable ); // SSE4.1 + PCLMULQDQ - for x86 32-bit testing, we expect x86_64 tier in our test function // since the test function doesn't distinguish between x86 and x86_64 architectures let sse_pclmul = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: false, // AVX512 not available on 32-bit x86 has_vpclmulqdq: false, }; // The test function will return x86_64 tier since it doesn't distinguish architectures assert_eq!( select_performance_tier_for_test(&sse_pclmul), PerformanceTier::X86_64SsePclmulqdq ); } #[test] fn test_target_string_consistency() { // Test that target strings are consistent with selected tiers let test_cases = [ (PerformanceTier::AArch64AesSha3, "aarch64-neon-pmull-sha3"), (PerformanceTier::AArch64Aes, "aarch64-neon-pmull"), ( PerformanceTier::X86_64Avx512Vpclmulqdq, "x86_64-avx512-vpclmulqdq", ), ( PerformanceTier::X86_64Avx512Pclmulqdq, "x86_64-avx512-pclmulqdq", ), (PerformanceTier::X86_64SsePclmulqdq, "x86_64-sse-pclmulqdq"), (PerformanceTier::X86SsePclmulqdq, "x86-sse-pclmulqdq"), (PerformanceTier::SoftwareTable, "software-fallback-tables"), ]; for (tier, expected_string) in test_cases { assert_eq!(tier_to_target_string(tier), expected_string); } } } // Tests for graceful degradation between performance tiers mod graceful_degradation_tests { use super::*; #[test] fn test_aarch64_degradation_path() { // Test the degradation path for AArch64: SHA3+AES -> AES -> Software // Start with highest tier capabilities let mut capabilities = ArchCapabilities { has_aes: true, has_crc: false, has_sha3: true, has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; // Should select highest tier assert_eq!( select_performance_tier_for_test(&capabilities), PerformanceTier::AArch64AesSha3 ); // Remove SHA3 - should degrade to AES tier capabilities.has_sha3 = false; assert_eq!( select_performance_tier_for_test(&capabilities), PerformanceTier::AArch64Aes ); // Remove AES - should degrade to software capabilities.has_aes = false; assert_eq!( select_performance_tier_for_test(&capabilities), PerformanceTier::SoftwareTable ); } #[test] fn test_x86_64_degradation_path() { // Test the degradation path for x86_64: VPCLMULQDQ -> AVX512 -> SSE -> Software // Start with highest tier capabilities let mut capabilities = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: true, has_vpclmulqdq: true, }; // Should select highest tier assert_eq!( select_performance_tier_for_test(&capabilities), PerformanceTier::X86_64Avx512Vpclmulqdq ); // Remove VPCLMULQDQ - should degrade to AVX512 tier capabilities.has_vpclmulqdq = false; assert_eq!( select_performance_tier_for_test(&capabilities), PerformanceTier::X86_64Avx512Pclmulqdq ); // Remove AVX512VL - should degrade to SSE tier capabilities.has_avx512vl = false; assert_eq!( select_performance_tier_for_test(&capabilities), PerformanceTier::X86_64SsePclmulqdq ); // Remove PCLMULQDQ - should degrade to software capabilities.has_pclmulqdq = false; assert_eq!( select_performance_tier_for_test(&capabilities), PerformanceTier::SoftwareTable ); // Remove SSE4.1 - should still be software (already at lowest tier) capabilities.has_sse41 = false; assert_eq!( select_performance_tier_for_test(&capabilities), PerformanceTier::SoftwareTable ); } #[test] fn test_partial_feature_availability() { // Test scenarios where only some features in a tier are available // AArch64: SHA3 available but AES not (impossible in real hardware, but test safety) let aarch64_partial = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: true, // This would be impossible in real detection has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; // Should fall back to software since AES is required for SHA3 assert_eq!( select_performance_tier_for_test(&aarch64_partial), PerformanceTier::SoftwareTable ); // x86_64: VPCLMULQDQ available but AVX512VL not (impossible in real hardware) let x86_64_partial = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, has_sse42: false, has_pclmulqdq: true, has_avx512vl: false, has_vpclmulqdq: true, // This would be impossible in real detection }; // Should fall back to SSE tier since AVX512VL is required for VPCLMULQDQ assert_eq!( select_performance_tier_for_test(&x86_64_partial), PerformanceTier::X86_64SsePclmulqdq ); } } } #[cfg(test)] mod software_fallback_tests { use super::*; #[test] fn test_aarch64_without_aes_falls_back_to_software() { // Test that AArch64 without AES support falls back to software implementation let capabilities_no_aes = ArchCapabilities { has_aes: false, // No AES support has_crc: false, has_sha3: false, // SHA3 requires AES, so also false has_sse41: false, has_sse42: false, has_pclmulqdq: false, has_avx512vl: false, has_vpclmulqdq: false, }; let tier = select_performance_tier_for_test(&capabilities_no_aes); assert_eq!( tier, PerformanceTier::SoftwareTable, "AArch64 without AES should fall back to software implementation" ); } #[test] fn test_x86_without_pclmulqdq_falls_back_to_software() { // Test that x86 without SSE4.1/PCLMULQDQ falls back to software implementation let capabilities_no_pclmul = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: true, // SSE4.1 available has_sse42: false, has_pclmulqdq: false, // But PCLMULQDQ not available has_avx512vl: false, has_vpclmulqdq: false, }; let tier = select_performance_tier_for_test(&capabilities_no_pclmul); assert_eq!( tier, PerformanceTier::SoftwareTable, "x86 without PCLMULQDQ should fall back to software implementation" ); // Test x86 without SSE4.1 let capabilities_no_sse = ArchCapabilities { has_aes: false, has_crc: false, has_sha3: false, has_sse41: false, // No SSE4.1 support has_sse42: false, has_pclmulqdq: false, // PCLMULQDQ requires SSE4.1 has_avx512vl: false, has_vpclmulqdq: false, }; let tier = select_performance_tier_for_test(&capabilities_no_sse); assert_eq!( tier, PerformanceTier::SoftwareTable, "x86 without SSE4.1 should fall back to software implementation" ); } #[test] fn test_conditional_compilation_coverage() { // Test that software fallback is properly conditionally compiled // This test ensures the conditional compilation logic is working correctly // Software fallback should be available when needed #[cfg(any( not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")), target_arch = "x86", all(target_arch = "aarch64", not(target_feature = "aes")) ))] { // Software fallback should be compiled in these cases use crate::arch::software; let _test_fn = software::update; // This test passes if it compiles successfully } // For x86_64, software fallback should not be needed since SSE4.1/PCLMULQDQ are always available // But it may still be compiled for testing purposes } } crc-fast-1.10.0/src/ffi.rs000064400000000000000000001002761046102023000133140ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! FFI bindings for the Rust library //! //! This module provides a C-compatible interface for the Rust library, allowing //! C programs to use the library's functionality. #![cfg(all( feature = "ffi", any(target_arch = "aarch64", target_arch = "x86_64", target_arch = "x86") ))] use crate::CrcAlgorithm; use crate::CrcParams; use crate::{get_calculator_target, Digest}; use std::collections::HashMap; use std::collections::HashSet; use std::ffi::CStr; use std::os::raw::c_char; use std::slice; use std::sync::{Mutex, OnceLock}; static STRING_CACHE: OnceLock>> = OnceLock::new(); /// Error codes for FFI operations #[repr(C)] #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum CrcFastError { /// Operation completed successfully Success = 0, /// Lock was poisoned (thread panicked while holding lock) LockPoisoned = 1, /// Null pointer was passed where non-null required NullPointer = 2, /// Invalid key count for CRC parameters InvalidKeyCount = 3, /// Unsupported CRC width (must be 32 or 64) UnsupportedWidth = 4, /// Invalid UTF-8 string InvalidUtf8 = 5, /// File I/O error IoError = 6, /// Internal string conversion error StringConversionError = 7, } impl CrcFastError { /// Returns a static string describing the error fn message(&self) -> &'static str { match self { CrcFastError::Success => "Operation completed successfully", CrcFastError::LockPoisoned => "Lock was poisoned (thread panicked while holding lock)", CrcFastError::NullPointer => "Null pointer was passed where non-null required", CrcFastError::InvalidKeyCount => "Invalid key count for CRC parameters", CrcFastError::UnsupportedWidth => "Unsupported CRC width (must be 32 or 64)", CrcFastError::InvalidUtf8 => "Invalid UTF-8 string", CrcFastError::IoError => "File I/O error", CrcFastError::StringConversionError => "Internal string conversion error", } } } // Thread-local storage for the last error that occurred thread_local! { static LAST_ERROR: std::cell::Cell = const { std::cell::Cell::new(CrcFastError::Success) }; } /// Sets the thread-local last error fn set_last_error(error: CrcFastError) { LAST_ERROR.with(|e| e.set(error)); } /// Clears the thread-local last error (sets it to Success) fn clear_last_error() { LAST_ERROR.with(|e| e.set(CrcFastError::Success)); } // Global storage for stable key pointers to ensure they remain valid across FFI boundary static STABLE_KEY_STORAGE: OnceLock>>> = OnceLock::new(); /// Creates a stable pointer to the keys for FFI usage. /// The keys are stored in global memory to ensure the pointer remains valid. /// Returns (pointer, count) on success, or (null, 0) on error. /// Sets CrcFastError::LockPoisoned on lock failure. fn create_stable_key_pointer(keys: &crate::CrcKeysStorage) -> (*const u64, u32) { let storage = STABLE_KEY_STORAGE.get_or_init(|| Mutex::new(HashMap::new())); // Create a unique hash for this key set to avoid duplicates let key_hash = match keys { crate::CrcKeysStorage::KeysFold256(keys) => { let mut hasher = std::collections::hash_map::DefaultHasher::new(); use std::hash::{Hash, Hasher}; keys.hash(&mut hasher); hasher.finish() } crate::CrcKeysStorage::KeysFutureTest(keys) => { let mut hasher = std::collections::hash_map::DefaultHasher::new(); use std::hash::{Hash, Hasher}; keys.hash(&mut hasher); hasher.finish() } }; let mut storage_map = match storage.lock() { Ok(guard) => guard, Err(_) => { set_last_error(CrcFastError::LockPoisoned); return (std::ptr::null(), 0); } }; // Check if we already have this key set stored if let Some(stored_keys) = storage_map.get(&key_hash) { return (stored_keys.as_ptr(), stored_keys.len() as u32); } // Store the keys in stable memory let key_vec: Vec = match keys { crate::CrcKeysStorage::KeysFold256(keys) => keys.to_vec(), crate::CrcKeysStorage::KeysFutureTest(keys) => keys.to_vec(), }; let boxed_keys = key_vec.into_boxed_slice(); let count = boxed_keys.len() as u32; storage_map.insert(key_hash, boxed_keys); let ptr = storage_map.get(&key_hash).expect("just inserted").as_ptr(); (ptr, count) } /// A handle to the Digest object #[repr(C)] pub struct CrcFastDigestHandle(*mut Digest); /// The supported CRC algorithms #[repr(C)] #[derive(Clone, Copy)] pub enum CrcFastAlgorithm { // CrcCustom works with any supported widths (16, 32, 64) CrcCustom, Crc16Arc, Crc16Cdma2000, Crc16Cms, Crc16Dds110, Crc16DectR, Crc16DectX, Crc16Dnp, Crc16En13757, Crc16Genibus, Crc16Gsm, Crc16Ibm3740, Crc16IbmSdlc, Crc16IsoIec144433A, Crc16Kermit, Crc16Lj1200, Crc16M17, Crc16MaximDow, Crc16Mcrf4xx, Crc16Modbus, Crc16Nrsc5, Crc16OpensafetyA, Crc16OpensafetyB, Crc16Profibus, Crc16Riello, Crc16SpiFujitsu, Crc16T10Dif, Crc16Teledisk, Crc16Tms37157, Crc16Umts, Crc16Usb, Crc16Xmodem, Crc32Aixm, Crc32Autosar, Crc32Base91D, Crc32Bzip2, Crc32CdRomEdc, Crc32Cksum, Crc32Custom, Crc32Iscsi, Crc32IsoHdlc, Crc32Jamcrc, Crc32Mef, Crc32Mpeg2, Crc32Xfer, Crc64Custom, Crc64Ecma182, Crc64GoIso, Crc64Ms, Crc64Nvme, Crc64Redis, Crc64We, Crc64Xz, } // Convert from FFI enum to internal enum #[allow(deprecated)] impl From for CrcAlgorithm { fn from(value: CrcFastAlgorithm) -> Self { match value { CrcFastAlgorithm::Crc16Arc => CrcAlgorithm::Crc16Arc, CrcFastAlgorithm::Crc16Cdma2000 => CrcAlgorithm::Crc16Cdma2000, CrcFastAlgorithm::Crc16Cms => CrcAlgorithm::Crc16Cms, CrcFastAlgorithm::Crc16Dds110 => CrcAlgorithm::Crc16Dds110, CrcFastAlgorithm::Crc16DectR => CrcAlgorithm::Crc16DectR, CrcFastAlgorithm::Crc16DectX => CrcAlgorithm::Crc16DectX, CrcFastAlgorithm::Crc16Dnp => CrcAlgorithm::Crc16Dnp, CrcFastAlgorithm::Crc16En13757 => CrcAlgorithm::Crc16En13757, CrcFastAlgorithm::Crc16Genibus => CrcAlgorithm::Crc16Genibus, CrcFastAlgorithm::Crc16Gsm => CrcAlgorithm::Crc16Gsm, CrcFastAlgorithm::Crc16Ibm3740 => CrcAlgorithm::Crc16Ibm3740, CrcFastAlgorithm::Crc16IbmSdlc => CrcAlgorithm::Crc16IbmSdlc, CrcFastAlgorithm::Crc16IsoIec144433A => CrcAlgorithm::Crc16IsoIec144433A, CrcFastAlgorithm::Crc16Kermit => CrcAlgorithm::Crc16Kermit, CrcFastAlgorithm::Crc16Lj1200 => CrcAlgorithm::Crc16Lj1200, CrcFastAlgorithm::Crc16M17 => CrcAlgorithm::Crc16M17, CrcFastAlgorithm::Crc16MaximDow => CrcAlgorithm::Crc16MaximDow, CrcFastAlgorithm::Crc16Mcrf4xx => CrcAlgorithm::Crc16Mcrf4xx, CrcFastAlgorithm::Crc16Modbus => CrcAlgorithm::Crc16Modbus, CrcFastAlgorithm::Crc16Nrsc5 => CrcAlgorithm::Crc16Nrsc5, CrcFastAlgorithm::Crc16OpensafetyA => CrcAlgorithm::Crc16OpensafetyA, CrcFastAlgorithm::Crc16OpensafetyB => CrcAlgorithm::Crc16OpensafetyB, CrcFastAlgorithm::Crc16Profibus => CrcAlgorithm::Crc16Profibus, CrcFastAlgorithm::Crc16Riello => CrcAlgorithm::Crc16Riello, CrcFastAlgorithm::Crc16SpiFujitsu => CrcAlgorithm::Crc16SpiFujitsu, CrcFastAlgorithm::Crc16T10Dif => CrcAlgorithm::Crc16T10Dif, CrcFastAlgorithm::Crc16Teledisk => CrcAlgorithm::Crc16Teledisk, CrcFastAlgorithm::Crc16Tms37157 => CrcAlgorithm::Crc16Tms37157, CrcFastAlgorithm::Crc16Umts => CrcAlgorithm::Crc16Umts, CrcFastAlgorithm::Crc16Usb => CrcAlgorithm::Crc16Usb, CrcFastAlgorithm::Crc16Xmodem => CrcAlgorithm::Crc16Xmodem, CrcFastAlgorithm::Crc32Aixm => CrcAlgorithm::Crc32Aixm, CrcFastAlgorithm::Crc32Autosar => CrcAlgorithm::Crc32Autosar, CrcFastAlgorithm::Crc32Base91D => CrcAlgorithm::Crc32Base91D, CrcFastAlgorithm::Crc32Bzip2 => CrcAlgorithm::Crc32Bzip2, CrcFastAlgorithm::Crc32CdRomEdc => CrcAlgorithm::Crc32CdRomEdc, CrcFastAlgorithm::Crc32Cksum => CrcAlgorithm::Crc32Cksum, CrcFastAlgorithm::Crc32Custom => CrcAlgorithm::Crc32Custom, CrcFastAlgorithm::Crc32Iscsi => CrcAlgorithm::Crc32Iscsi, CrcFastAlgorithm::Crc32IsoHdlc => CrcAlgorithm::Crc32IsoHdlc, CrcFastAlgorithm::Crc32Jamcrc => CrcAlgorithm::Crc32Jamcrc, CrcFastAlgorithm::Crc32Mef => CrcAlgorithm::Crc32Mef, CrcFastAlgorithm::Crc32Mpeg2 => CrcAlgorithm::Crc32Mpeg2, CrcFastAlgorithm::Crc32Xfer => CrcAlgorithm::Crc32Xfer, CrcFastAlgorithm::CrcCustom => CrcAlgorithm::CrcCustom, CrcFastAlgorithm::Crc64Custom => CrcAlgorithm::Crc64Custom, CrcFastAlgorithm::Crc64Ecma182 => CrcAlgorithm::Crc64Ecma182, CrcFastAlgorithm::Crc64GoIso => CrcAlgorithm::Crc64GoIso, CrcFastAlgorithm::Crc64Ms => CrcAlgorithm::Crc64Ms, CrcFastAlgorithm::Crc64Nvme => CrcAlgorithm::Crc64Nvme, CrcFastAlgorithm::Crc64Redis => CrcAlgorithm::Crc64Redis, CrcFastAlgorithm::Crc64We => CrcAlgorithm::Crc64We, CrcFastAlgorithm::Crc64Xz => CrcAlgorithm::Crc64Xz, } } } /// Gets the last error that occurred in the current thread /// Returns CrcFastError::Success if no error has occurred #[no_mangle] pub extern "C" fn crc_fast_get_last_error() -> CrcFastError { LAST_ERROR.with(|e| e.get()) } /// Clears the last error for the current thread #[no_mangle] pub extern "C" fn crc_fast_clear_error() { clear_last_error(); } /// Gets a human-readable error message for the given error code /// Returns a pointer to a static string (do not free) #[no_mangle] pub extern "C" fn crc_fast_error_message(error: CrcFastError) -> *const c_char { let message = error.message(); // These are static strings, so we can safely return them as C strings // The strings are guaranteed to be valid UTF-8 and null-terminated match std::ffi::CString::new(message) { Ok(c_str) => { // Leak the string so it remains valid for the lifetime of the program // This is safe because error messages are static and small Box::leak(Box::new(c_str)).as_ptr() } Err(_) => std::ptr::null(), } } /// Custom CRC parameters #[repr(C)] pub struct CrcFastParams { pub algorithm: CrcFastAlgorithm, pub width: u8, pub poly: u64, pub init: u64, pub refin: bool, pub refout: bool, pub xorout: u64, pub check: u64, pub key_count: u32, pub keys: *const u64, } /// Fallible conversion from FFI struct to internal struct /// Returns None if the parameters are invalid (unsupported key count) fn try_params_from_ffi(value: &CrcFastParams) -> Option { // Validate key pointer if value.keys.is_null() { return None; } // Convert C array back to appropriate CrcKeysStorage let keys = unsafe { std::slice::from_raw_parts(value.keys, value.key_count as usize) }; let storage = match value.key_count { 23 => match keys.try_into() { Ok(arr) => crate::CrcKeysStorage::from_keys_fold_256(arr), Err(_) => return None, }, 25 => match keys.try_into() { Ok(arr) => crate::CrcKeysStorage::from_keys_fold_future_test(arr), Err(_) => return None, }, _ => return None, // Unsupported key count }; // For reflected CRC-16, bit-reverse the init value for the SIMD algorithm let init_algorithm = if value.width == 16 && value.refin { (value.init as u16).reverse_bits() as u64 } else { value.init }; Some(CrcParams { algorithm: value.algorithm.into(), name: "custom", // C interface doesn't need the name field width: value.width, poly: value.poly, init: value.init, init_algorithm, refin: value.refin, refout: value.refout, xorout: value.xorout, check: value.check, keys: storage, }) } // Convert from FFI struct to internal struct (legacy, may panic) // For backwards compatibility, but prefer try_params_from_ffi impl From for CrcParams { fn from(value: CrcFastParams) -> Self { try_params_from_ffi(&value) .expect("Invalid CRC parameters: unsupported key count or null pointer") } } // Convert from internal struct to FFI struct #[allow(deprecated)] impl From for CrcFastParams { fn from(params: CrcParams) -> Self { // Create stable key pointer for FFI usage let (keys_ptr, key_count) = create_stable_key_pointer(¶ms.keys); CrcFastParams { algorithm: match params.algorithm { CrcAlgorithm::Crc16Arc => CrcFastAlgorithm::Crc16Arc, CrcAlgorithm::Crc16Cdma2000 => CrcFastAlgorithm::Crc16Cdma2000, CrcAlgorithm::Crc16Cms => CrcFastAlgorithm::Crc16Cms, CrcAlgorithm::Crc16Dds110 => CrcFastAlgorithm::Crc16Dds110, CrcAlgorithm::Crc16DectR => CrcFastAlgorithm::Crc16DectR, CrcAlgorithm::Crc16DectX => CrcFastAlgorithm::Crc16DectX, CrcAlgorithm::Crc16Dnp => CrcFastAlgorithm::Crc16Dnp, CrcAlgorithm::Crc16En13757 => CrcFastAlgorithm::Crc16En13757, CrcAlgorithm::Crc16Genibus => CrcFastAlgorithm::Crc16Genibus, CrcAlgorithm::Crc16Gsm => CrcFastAlgorithm::Crc16Gsm, CrcAlgorithm::Crc16Ibm3740 => CrcFastAlgorithm::Crc16Ibm3740, CrcAlgorithm::Crc16IbmSdlc => CrcFastAlgorithm::Crc16IbmSdlc, CrcAlgorithm::Crc16IsoIec144433A => CrcFastAlgorithm::Crc16IsoIec144433A, CrcAlgorithm::Crc16Kermit => CrcFastAlgorithm::Crc16Kermit, CrcAlgorithm::Crc16Lj1200 => CrcFastAlgorithm::Crc16Lj1200, CrcAlgorithm::Crc16M17 => CrcFastAlgorithm::Crc16M17, CrcAlgorithm::Crc16MaximDow => CrcFastAlgorithm::Crc16MaximDow, CrcAlgorithm::Crc16Mcrf4xx => CrcFastAlgorithm::Crc16Mcrf4xx, CrcAlgorithm::Crc16Modbus => CrcFastAlgorithm::Crc16Modbus, CrcAlgorithm::Crc16Nrsc5 => CrcFastAlgorithm::Crc16Nrsc5, CrcAlgorithm::Crc16OpensafetyA => CrcFastAlgorithm::Crc16OpensafetyA, CrcAlgorithm::Crc16OpensafetyB => CrcFastAlgorithm::Crc16OpensafetyB, CrcAlgorithm::Crc16Profibus => CrcFastAlgorithm::Crc16Profibus, CrcAlgorithm::Crc16Riello => CrcFastAlgorithm::Crc16Riello, CrcAlgorithm::Crc16SpiFujitsu => CrcFastAlgorithm::Crc16SpiFujitsu, CrcAlgorithm::Crc16T10Dif => CrcFastAlgorithm::Crc16T10Dif, CrcAlgorithm::Crc16Teledisk => CrcFastAlgorithm::Crc16Teledisk, CrcAlgorithm::Crc16Tms37157 => CrcFastAlgorithm::Crc16Tms37157, CrcAlgorithm::Crc16Umts => CrcFastAlgorithm::Crc16Umts, CrcAlgorithm::Crc16Usb => CrcFastAlgorithm::Crc16Usb, CrcAlgorithm::Crc16Xmodem => CrcFastAlgorithm::Crc16Xmodem, CrcAlgorithm::Crc32Aixm => CrcFastAlgorithm::Crc32Aixm, CrcAlgorithm::Crc32Autosar => CrcFastAlgorithm::Crc32Autosar, CrcAlgorithm::Crc32Base91D => CrcFastAlgorithm::Crc32Base91D, CrcAlgorithm::Crc32Bzip2 => CrcFastAlgorithm::Crc32Bzip2, CrcAlgorithm::Crc32CdRomEdc => CrcFastAlgorithm::Crc32CdRomEdc, CrcAlgorithm::Crc32Cksum => CrcFastAlgorithm::Crc32Cksum, CrcAlgorithm::Crc32Custom => CrcFastAlgorithm::Crc32Custom, CrcAlgorithm::Crc32Iscsi => CrcFastAlgorithm::Crc32Iscsi, CrcAlgorithm::Crc32IsoHdlc => CrcFastAlgorithm::Crc32IsoHdlc, CrcAlgorithm::Crc32Jamcrc => CrcFastAlgorithm::Crc32Jamcrc, CrcAlgorithm::Crc32Mef => CrcFastAlgorithm::Crc32Mef, CrcAlgorithm::Crc32Mpeg2 => CrcFastAlgorithm::Crc32Mpeg2, CrcAlgorithm::Crc32Xfer => CrcFastAlgorithm::Crc32Xfer, CrcAlgorithm::CrcCustom => CrcFastAlgorithm::CrcCustom, CrcAlgorithm::Crc64Custom => CrcFastAlgorithm::Crc64Custom, CrcAlgorithm::Crc64Ecma182 => CrcFastAlgorithm::Crc64Ecma182, CrcAlgorithm::Crc64GoIso => CrcFastAlgorithm::Crc64GoIso, CrcAlgorithm::Crc64Ms => CrcFastAlgorithm::Crc64Ms, CrcAlgorithm::Crc64Nvme => CrcFastAlgorithm::Crc64Nvme, CrcAlgorithm::Crc64Redis => CrcFastAlgorithm::Crc64Redis, CrcAlgorithm::Crc64We => CrcFastAlgorithm::Crc64We, CrcAlgorithm::Crc64Xz => CrcFastAlgorithm::Crc64Xz, }, width: params.width, poly: params.poly, init: params.init, refin: params.refin, refout: params.refout, xorout: params.xorout, check: params.check, key_count, keys: keys_ptr, } } } /// Creates a new Digest to compute CRC checksums using algorithm #[no_mangle] pub extern "C" fn crc_fast_digest_new(algorithm: CrcFastAlgorithm) -> *mut CrcFastDigestHandle { clear_last_error(); let digest = Box::new(Digest::new(algorithm.into())); let handle = Box::new(CrcFastDigestHandle(Box::into_raw(digest))); Box::into_raw(handle) } /// Creates a new Digest with a custom initial state #[no_mangle] pub extern "C" fn crc_fast_digest_new_with_init_state( algorithm: CrcFastAlgorithm, init_state: u64, ) -> *mut CrcFastDigestHandle { clear_last_error(); let digest = Box::new(Digest::new_with_init_state(algorithm.into(), init_state)); let handle = Box::new(CrcFastDigestHandle(Box::into_raw(digest))); Box::into_raw(handle) } /// Creates a new Digest to compute CRC checksums using custom parameters /// Returns NULL if parameters are invalid (invalid key count or null pointer) /// Call crc_fast_get_last_error() to get the specific error code #[no_mangle] pub extern "C" fn crc_fast_digest_new_with_params( params: CrcFastParams, ) -> *mut CrcFastDigestHandle { clear_last_error(); match try_params_from_ffi(¶ms) { Some(crc_params) => { let digest = Box::new(Digest::new_with_params(crc_params)); let handle = Box::new(CrcFastDigestHandle(Box::into_raw(digest))); Box::into_raw(handle) } None => { // Set appropriate error based on the failure if params.keys.is_null() { set_last_error(CrcFastError::NullPointer); } else { set_last_error(CrcFastError::InvalidKeyCount); } std::ptr::null_mut() } } } /// Updates the Digest with data #[no_mangle] pub extern "C" fn crc_fast_digest_update( handle: *mut CrcFastDigestHandle, data: *const c_char, len: usize, ) { if handle.is_null() { set_last_error(CrcFastError::NullPointer); return; } if data.is_null() { set_last_error(CrcFastError::NullPointer); return; } clear_last_error(); unsafe { let digest = &mut *(*handle).0; #[allow(clippy::unnecessary_cast)] let bytes = slice::from_raw_parts(data as *const u8, len); digest.update(bytes); } } /// Calculates the CRC checksum for data that's been written to the Digest /// Returns 0 on error (e.g. null handle) #[no_mangle] pub extern "C" fn crc_fast_digest_finalize(handle: *mut CrcFastDigestHandle) -> u64 { if handle.is_null() { set_last_error(CrcFastError::NullPointer); return 0; } clear_last_error(); unsafe { let digest = &*(*handle).0; digest.finalize() } } /// Free the Digest resources without finalizing #[no_mangle] pub extern "C" fn crc_fast_digest_free(handle: *mut CrcFastDigestHandle) { if handle.is_null() { set_last_error(CrcFastError::NullPointer); return; } clear_last_error(); unsafe { let handle = Box::from_raw(handle); let _ = Box::from_raw(handle.0); // This drops the digest } } /// Reset the Digest state #[no_mangle] pub extern "C" fn crc_fast_digest_reset(handle: *mut CrcFastDigestHandle) { if handle.is_null() { set_last_error(CrcFastError::NullPointer); return; } clear_last_error(); unsafe { let digest = &mut *(*handle).0; digest.reset(); } } /// Finalize and reset the Digest in one operation /// Returns 0 on error (e.g. null handle) #[no_mangle] pub extern "C" fn crc_fast_digest_finalize_reset(handle: *mut CrcFastDigestHandle) -> u64 { if handle.is_null() { set_last_error(CrcFastError::NullPointer); return 0; } clear_last_error(); unsafe { let digest = &mut *(*handle).0; digest.finalize_reset() } } /// Combine two Digest checksums #[no_mangle] pub extern "C" fn crc_fast_digest_combine( handle1: *mut CrcFastDigestHandle, handle2: *mut CrcFastDigestHandle, ) { if handle1.is_null() || handle2.is_null() { set_last_error(CrcFastError::NullPointer); return; } clear_last_error(); unsafe { let digest1 = &mut *(*handle1).0; let digest2 = &*(*handle2).0; digest1.combine(digest2); } } /// Gets the amount of data processed by the Digest so far /// Returns 0 on error (e.g. null handle) #[no_mangle] pub extern "C" fn crc_fast_digest_get_amount(handle: *mut CrcFastDigestHandle) -> u64 { if handle.is_null() { set_last_error(CrcFastError::NullPointer); return 0; } clear_last_error(); unsafe { let digest = &*(*handle).0; digest.get_amount() } } /// Gets the current state of the Digest /// Returns 0 on error (e.g. null handle) #[no_mangle] pub extern "C" fn crc_fast_digest_get_state(handle: *mut CrcFastDigestHandle) -> u64 { if handle.is_null() { set_last_error(CrcFastError::NullPointer); return 0; } clear_last_error(); unsafe { let digest = &*(*handle).0; digest.get_state() } } /// Helper method to calculate a CRC checksum directly for a string using algorithm /// Returns 0 on error (e.g. null data pointer) #[no_mangle] pub extern "C" fn crc_fast_checksum( algorithm: CrcFastAlgorithm, data: *const c_char, len: usize, ) -> u64 { if data.is_null() { set_last_error(CrcFastError::NullPointer); return 0; } clear_last_error(); unsafe { #[allow(clippy::unnecessary_cast)] let bytes = slice::from_raw_parts(data as *const u8, len); crate::checksum(algorithm.into(), bytes) } } /// Helper method to calculate a CRC checksum directly for data using custom parameters /// Returns 0 if parameters are invalid or data is null /// Call crc_fast_get_last_error() to get the specific error code #[no_mangle] pub extern "C" fn crc_fast_checksum_with_params( params: CrcFastParams, data: *const c_char, len: usize, ) -> u64 { if data.is_null() { set_last_error(CrcFastError::NullPointer); return 0; } match try_params_from_ffi(¶ms) { Some(crc_params) => { clear_last_error(); unsafe { #[allow(clippy::unnecessary_cast)] let bytes = slice::from_raw_parts(data as *const u8, len); crate::checksum_with_params(crc_params, bytes) } } None => { if params.keys.is_null() { set_last_error(CrcFastError::NullPointer); } else { set_last_error(CrcFastError::InvalidKeyCount); } 0 } } } /// Helper method to just calculate a CRC checksum directly for a file using algorithm /// Returns 0 if path is null or file I/O fails /// Call crc_fast_get_last_error() to get the specific error code #[no_mangle] pub extern "C" fn crc_fast_checksum_file( algorithm: CrcFastAlgorithm, path_ptr: *const u8, path_len: usize, ) -> u64 { if path_ptr.is_null() { set_last_error(CrcFastError::NullPointer); return 0; } unsafe { match crate::checksum_file( algorithm.into(), &convert_to_string(path_ptr, path_len), None, ) { Ok(result) => { clear_last_error(); result } Err(_) => { set_last_error(CrcFastError::IoError); 0 } } } } /// Helper method to calculate a CRC checksum directly for a file using custom parameters /// Returns 0 if parameters are invalid, path is null, or file I/O fails /// Call crc_fast_get_last_error() to get the specific error code #[no_mangle] pub extern "C" fn crc_fast_checksum_file_with_params( params: CrcFastParams, path_ptr: *const u8, path_len: usize, ) -> u64 { if path_ptr.is_null() { set_last_error(CrcFastError::NullPointer); return 0; } match try_params_from_ffi(¶ms) { Some(crc_params) => unsafe { match crate::checksum_file_with_params( crc_params, &convert_to_string(path_ptr, path_len), None, ) { Ok(result) => { clear_last_error(); result } Err(_) => { set_last_error(CrcFastError::IoError); 0 } } }, None => { if params.keys.is_null() { set_last_error(CrcFastError::NullPointer); } else { set_last_error(CrcFastError::InvalidKeyCount); } 0 } } } /// Combine two CRC checksums using algorithm #[no_mangle] pub extern "C" fn crc_fast_checksum_combine( algorithm: CrcFastAlgorithm, checksum1: u64, checksum2: u64, checksum2_len: u64, ) -> u64 { clear_last_error(); crate::checksum_combine(algorithm.into(), checksum1, checksum2, checksum2_len) } /// Combine two CRC checksums using custom parameters /// Returns 0 if parameters are invalid /// Call crc_fast_get_last_error() to get the specific error code #[no_mangle] pub extern "C" fn crc_fast_checksum_combine_with_params( params: CrcFastParams, checksum1: u64, checksum2: u64, checksum2_len: u64, ) -> u64 { match try_params_from_ffi(¶ms) { Some(crc_params) => { clear_last_error(); crate::checksum_combine_with_params(crc_params, checksum1, checksum2, checksum2_len) } None => { if params.keys.is_null() { set_last_error(CrcFastError::NullPointer); } else { set_last_error(CrcFastError::InvalidKeyCount); } 0 } } } /// Returns the custom CRC parameters for a given set of Rocksoft CRC parameters /// If width is not 32 or 64, sets error to UnsupportedWidth #[no_mangle] pub extern "C" fn crc_fast_get_custom_params( name_ptr: *const c_char, width: u8, poly: u64, init: u64, reflected: bool, xorout: u64, check: u64, ) -> CrcFastParams { // Validate width if width != 32 && width != 64 { set_last_error(CrcFastError::UnsupportedWidth); } else { clear_last_error(); } let name = if name_ptr.is_null() { "custom" } else { unsafe { match CStr::from_ptr(name_ptr).to_str() { Ok(s) => s, Err(_) => { set_last_error(CrcFastError::InvalidUtf8); "custom" } } } }; // Get the custom params from the library let params = CrcParams::new( get_or_leak_string(name), // ✅ Use cached leak width, poly, init, reflected, xorout, check, ); // Create stable key pointer for FFI usage let (keys_ptr, key_count) = create_stable_key_pointer(¶ms.keys); // Convert to FFI struct - use CrcCustom for all widths since CrcParams::new now uses it CrcFastParams { algorithm: CrcFastAlgorithm::CrcCustom, width: params.width, poly: params.poly, init: params.init, refin: params.refin, refout: params.refout, xorout: params.xorout, check: params.check, key_count, keys: keys_ptr, } } /// Gets the target build properties (CPU architecture and fine-tuning parameters) for this algorithm /// Returns NULL if string conversion fails /// Call crc_fast_get_last_error() to get the specific error code #[no_mangle] pub extern "C" fn crc_fast_get_calculator_target(algorithm: CrcFastAlgorithm) -> *const c_char { let target = get_calculator_target(algorithm.into()); match std::ffi::CString::new(target) { Ok(s) => { clear_last_error(); s.into_raw() } Err(_) => { set_last_error(CrcFastError::StringConversionError); std::ptr::null_mut() } } } /// Gets the version of this library /// Returns a pointer to "unknown" if version string is invalid #[no_mangle] pub extern "C" fn crc_fast_get_version() -> *const c_char { const VERSION: &CStr = match CStr::from_bytes_with_nul(concat!(env!("CARGO_PKG_VERSION"), "\0").as_bytes()) { Ok(version) => version, // Fallback to "unknown" if version string is malformed Err(_) => c"unknown", }; VERSION.as_ptr() } /// Calculates the CRC-32/ISCSI checksum (commonly called "crc32c" in many, but not all, /// implementations). /// /// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iscsi /// /// Returns 0 on error (e.g. null data pointer) #[no_mangle] pub extern "C" fn crc_fast_crc32_iscsi(data: *const c_char, len: usize) -> u32 { if data.is_null() { set_last_error(CrcFastError::NullPointer); return 0; } clear_last_error(); unsafe { #[allow(clippy::unnecessary_cast)] let bytes = slice::from_raw_parts(data as *const u8, len); crate::crc32_iscsi(bytes) } } /// Calculates the CRC-32/ISO-HDLC checksum (commonly called "crc32" in many, but not all, /// implementations). /// /// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iso-hdlc /// /// Returns 0 on error (e.g. null data pointer) #[no_mangle] pub extern "C" fn crc_fast_crc32_iso_hdlc(data: *const c_char, len: usize) -> u32 { if data.is_null() { set_last_error(CrcFastError::NullPointer); return 0; } clear_last_error(); unsafe { #[allow(clippy::unnecessary_cast)] let bytes = slice::from_raw_parts(data as *const u8, len); crate::crc32_iso_hdlc(bytes) } } /// Calculates the CRC-64/NVME checksum. /// /// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-64-nvme /// /// Returns 0 on error (e.g. null data pointer) #[no_mangle] pub extern "C" fn crc_fast_crc64_nvme(data: *const c_char, len: usize) -> u64 { if data.is_null() { set_last_error(CrcFastError::NullPointer); return 0; } clear_last_error(); unsafe { #[allow(clippy::unnecessary_cast)] let bytes = slice::from_raw_parts(data as *const u8, len); crate::crc64_nvme(bytes) } } unsafe fn convert_to_string(data: *const u8, len: usize) -> String { if data.is_null() { return String::new(); } // Safely construct string slice from raw parts match std::str::from_utf8(slice::from_raw_parts(data, len)) { Ok(s) => s.to_string(), Err(_) => String::new(), // Return empty string for invalid UTF-8 } } fn get_or_leak_string(s: &str) -> &'static str { let cache = STRING_CACHE.get_or_init(|| Mutex::new(HashSet::new())); let mut cache = cache.lock().unwrap(); // Check if we already have this string if let Some(&cached) = cache.get(s) { return cached; } // Leak it and cache the result let leaked: &'static str = Box::leak(s.to_string().into_boxed_str()); cache.insert(leaked); leaked } crc-fast-1.10.0/src/generate.rs000064400000000000000000000644421046102023000143460ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module calculates the keys needed for CRC calculations using PCLMULQDQ. //! //! Docs generated by Claude.ai //! //! # Overview //! //! This implements key generation for hardware-accelerated CRC computation using Intel's //! PCLMULQDQ instruction (carryless multiplication). The keys enable a "fold-by-8" algorithm //! that processes data in parallel chunks. //! //! # The PCLMULQDQ Algorithm //! //! Traditional CRC computation processes data byte-by-byte, which is slow. The PCLMULQDQ //! instruction enables parallel processing by treating CRC computation as polynomial //! multiplication in GF(2) (Galois Field with 2 elements, where addition is XOR). //! //! The algorithm works by: //! 1. Loading multiple data chunks into SIMD registers //! 2. Using precomputed keys to "fold" distant chunks together //! 3. Reducing the result modulo the CRC polynomial //! //! # What Are "Keys"? //! //! Keys are precomputed constants representing x^n mod P(x), where: //! - x^n represents a bit shift of n positions //! - P(x) is the CRC polynomial //! - The modulo operation is polynomial division in GF(2) //! //! Each key answers: "If I have a CRC value, and I want to shift it by N bits and reduce it, //! what constant should I multiply by?" //! //! # The Distance Concept //! //! The "distance" or "exponent" refers to how many bits apart two data chunks are. When //! processing data in 128-bit (16-byte) SIMD registers: //! //! - For fold-by-8: We process 8 registers (128 bytes) at once //! - Keys at distance 32*N (CRC-32) or 64*N (CRC-64) let us combine chunks N registers apart //! //! Example for CRC-32: //! - Distance 32*3 = 96 bits = 12 bytes (3 registers of 32-bit data) //! - This key folds together data chunks that are 12 bytes apart //! //! The larger distances (32*63, 32*65) handle 256-byte chunks for very high throughput, such as //! using AVX-512 VPCLMULQDQ. //! # Why CRC-32 and CRC-64 Implementations Differ So Greatly //! //! The implementations look very different, but they're solving the same problem at //! different scales. Here are the key differences: //! //! ## 1. Polynomial Size //! //! - **CRC-32**: 33-bit polynomial (32 data bits + implicit leading 1) //! - **CRC-64**: 65-bit polynomial (64 data bits + implicit leading 1) //! //! This fundamental difference cascades through every function. //! //! ## 2. Register Representation //! //! - **CRC-32**: Uses u64 with values in upper bits (e.g., 0x080000000 = bit 35) //! - Has "headroom" above 32 bits for intermediate calculations //! - Results often need alignment shifts (>> 31) //! //! - **CRC-64**: Uses u64 directly (e.g., 0x8000000000000000 = bit 63) //! - No headroom - must use two u64s for μ calculation //! - Results are naturally aligned, no extra shifts needed //! //! ## 3. Distance Scaling //! //! Both algorithms fold data in chunks, but the chunk sizes differ: //! //! | Concept | CRC-32 | CRC-64 | Why? | //! |---------|--------|--------|------| //! | Base unit | 32 bits (4 bytes) | 64 bits (8 bytes) | Matches polynomial width | //! | Distance 1 | 96 bits (12 bytes) | 128 bits (16 bytes) | 3× vs 2× base unit | //! | Large chunk | 2016 bits (252 bytes) | 2048 bits (256 bytes) | Aligned to cache lines | //! //! The multipliers are smaller for CRC-64 (2×, 3× vs 3×, 5×) because the base unit //! is already larger. //! //! ## 4. Algorithm Variations //! //! - **Key generation**: CRC-32 uses simple if-check; CRC-64 uses bit-mask trick //! - Both compute x^n mod P(x), but CRC-64's approach is more efficient //! //! - **Mu calculation**: CRC-32 uses single u64; CRC-64 needs double-register //! - CRC-64 can't fit x^128 ÷ P(x) in one u64 //! //! - **Iteration counts**: Off-by-one differences everywhere //! - Reflects different starting points and alignment requirements //! //! ## 5. Reflection Handling //! //! - **CRC-32**: Reverses 32 bits, then shifts by 31 //! - **CRC-64**: Reverses 64 bits, no additional shift //! //! Both create the reflected representation needed for LSB-first CRCs, but //! CRC-64's cleaner alignment means less post-processing. //! //! ## The Big Picture //! //! Despite the implementation differences, both are doing the same thing: //! precomputing constants that let PCLMULQDQ fold distant data chunks together //! efficiently. The differences arise from working with different-sized polynomials //! within the constraints of fixed-size integer types (u64). #![allow(dead_code)] use core::ops::{BitAnd, BitOr, Shl, Shr}; /// Exponents (bit distances) for CRC-16 key generation. /// /// CRC-16 uses the same exponents as CRC-32 because the folding algorithm operates on /// 128-bit SIMD registers regardless of CRC width. CRC-16 computation is performed by /// scaling 16-bit values to 32-bit space, using the CRC-32 algorithm infrastructure, /// and then scaling the result back to 16 bits. /// /// See CRC32_EXPONENTS for detailed documentation of the exponent values. const CRC16_EXPONENTS: [u64; 23] = [ 0, // unused, just aligns indexes with the literature 32 * 3, 32 * 5, 32 * 31, 32 * 33, 32 * 3, 32 * 2, 0, // mu, generate separately 0, // poly, generate separately 32 * 27, 32 * 29, 32 * 23, 32 * 25, 32 * 19, 32 * 21, 32 * 15, 32 * 17, 32 * 11, 32 * 13, 32 * 7, 32 * 9, 32 * 63, // for 256 byte distances (2048 - 32) 32 * 65, // for 256 byte distances (2048 + 32) ]; /// Exponents (bit distances) for CRC-32 key generation. /// /// These represent bit distances for the fold-by-8 algorithm. Each exponent defines /// how many bits apart two data chunks are when folding. /// /// # Why These Specific Values? /// /// For CRC-32, the polynomial is 33 bits (including the implicit leading 1), so we work /// with 32-bit data chunks. The exponents are designed to efficiently fold 128-byte chunks: /// /// - Indices 1-4: Primary folding constants for 8-chunk (128-byte) processing /// - 32*3, 32*5: Used for folding the first half /// - 32*31, 32*33: Used for folding the second half /// - Indices 5-6: Short-distance folding /// - 32*3, 32*2: For final reduction stages /// - Indices 7-8: Special values (mu and polynomial) computed separately /// - Indices 9-20: Additional folding distances for progressive reduction /// - These allow folding from 8 chunks down to 4, then 2, then 1 /// - Indices 21-22: Large distances for 256-byte chunk processing, such as using AVX-512 VPCLMULQDQ /// - 32*63 = 2016 bits (252 bytes) /// - 32*65 = 2080 bits (260 bytes) /// - These enable very high-throughput processing of large buffers const CRC32_EXPONENTS: [u64; 23] = [ 0, // unused, just aligns indexes with the literature 32 * 3, 32 * 5, 32 * 31, 32 * 33, 32 * 3, 32 * 2, 0, // mu, generate separately 0, // poly, generate separately 32 * 27, 32 * 29, 32 * 23, 32 * 25, 32 * 19, 32 * 21, 32 * 15, 32 * 17, 32 * 11, 32 * 13, 32 * 7, 32 * 9, 32 * 63, // for 256 byte distances (2048 - 32) 32 * 65, // for 256 byte distances (2048 + 32) ]; /// Exponents (bit distances) for CRC-64 key generation. /// /// Similar to CRC32_EXPONENTS but scaled for 64-bit CRC polynomials. /// /// # Why Different From CRC-32? /// /// CRC-64 uses a 65-bit polynomial (64 bits + implicit leading 1), so: /// - Data chunks are 64 bits instead of 32 /// - All distances are in multiples of 64 instead of 32 /// - The actual byte distances are larger (64*N bits = 8*N bytes) /// /// # Distance Comparison /// /// | Index | CRC-32 Distance | CRC-64 Distance | Purpose | /// |-------|-----------------|-----------------|----------------------| /// | 1 | 96 bits (12B) | 128 bits (16B) | Primary fold | /// | 2 | 160 bits (20B) | 192 bits (24B) | Primary fold | /// | 21 | 2016 bits (252B)| 2048 bits (256B)| Large chunk folding | /// /// The smaller multipliers (2, 3 vs 3, 5) reflect the larger base unit (64 vs 32 bits). const CRC64_EXPONENTS: [u64; 23] = [ 0, // unused, just aligns indexes with the literature 64 * 2, 64 * 3, 64 * 16, 64 * 17, 64 * 2, 64, 0, // mu, generate separately 0, // poly, generate separately 64 * 14, 64 * 15, 64 * 12, 64 * 13, 64 * 10, 64 * 11, 64 * 8, 64 * 9, 64 * 6, 64 * 7, 64 * 4, 64 * 5, 64 * 32, // for 256 byte distances (2048) 64 * 33, // for 256 byte distances (2048 + 64) ]; /// Generates the 23 keys needed to calculate CRCs for a given polynomial using PCLMULQDQ when /// folding by 8. pub fn keys(width: u8, poly: u64, reflected: bool) -> [u64; 23] { let mut keys: [u64; 23] = [0; 23]; let exponents = if 16 == width { CRC16_EXPONENTS } else if 32 == width { CRC32_EXPONENTS } else if 64 == width { CRC64_EXPONENTS } else { panic!("Unsupported width: {width}",); }; let poly = if 16 == width { // CRC-16 uses a 17-bit polynomial (16 bits + implicit leading 1) scaled to 32-bit space (poly << 16) | (1u64 << 32) } else if 32 == width { poly | (1u64 << 32) } else { poly }; for i in 1..23 { keys[i] = key(width, poly, reflected, exponents[i]); } keys[7] = mu(width, poly, reflected); keys[8] = polynomial(width, poly, reflected); keys } fn key(width: u8, poly: u64, reflected: bool, exponent: u64) -> u64 { if width == 16 { crc16_key(exponent, reflected, poly) } else if width == 32 { crc32_key(exponent, reflected, poly) } else if width == 64 { crc64_key(exponent, reflected, poly) } else { panic!("Unsupported width: {width}",); } } /// Computes a CRC-16 folding key for a given bit distance (exponent). /// /// # Algorithm /// /// CRC-16 key generation uses the same algorithm as CRC-32 because CRC-16 computation /// is performed by scaling 16-bit values to 32-bit space. The polynomial is already /// scaled to 32-bit space (poly << 16 | 1 << 32) before this function is called. /// /// 1. Start with x^32 (represented as 0x080000000, bit 35 set) /// 2. Multiply by x repeatedly (left shift), reducing modulo P(x) each time /// 3. After (exponent - 31) iterations, we have x^exponent mod P(x) /// /// # Reflection /// /// For reflected CRC-16, we bit-reverse the 16-bit result and shift right by 31 bits /// to align it properly for PCLMULQDQ operations. fn crc16_key(exponent: u64, reflected: bool, polynomial: u64) -> u64 { if exponent < 32 { return 0; } let mut n: u64 = 0x080000000; let e = exponent - 31; for _ in 0..e { n <<= 1; if (n & 0x100000000) != 0 { n ^= polynomial; } } if reflected { bit_reverse(n) >> 31 } else { n << 32 } } /// Computes a CRC-32 folding key for a given bit distance (exponent). /// /// # Algorithm /// /// This calculates x^exponent mod P(x) where P(x) is the CRC-32 polynomial. /// /// 1. Start with x^32 (represented as 0x080000000, bit 35 set) /// 2. Multiply by x repeatedly (left shift), reducing modulo P(x) each time /// 3. After (exponent - 31) iterations, we have x^exponent mod P(x) /// /// # Why Start at x^32? /// /// For CRC-32, we're working with 33-bit polynomials (32 data bits + leading 1). /// Starting at x^32 (bit 35 in a 36-bit representation) gives us the right alignment /// for the first reduction step. /// /// # Why exponent - 31? /// /// We start at x^32 and want to reach x^exponent, so we need (exponent - 32) more /// multiplications. But the first shift happens before the first check, so it's /// actually (exponent - 31) iterations. /// /// # Reflection /// /// If the CRC is reflected (LSB-first), we bit-reverse the result and shift right /// by 31 bits to align it properly for PCLMULQDQ operations. fn crc32_key(exponent: u64, reflected: bool, polynomial: u64) -> u64 { if exponent < 32 { return 0; } let mut n: u64 = 0x080000000; let e = exponent - 31; for _ in 0..e { n <<= 1; if (n & 0x100000000) != 0 { n ^= polynomial; } } if reflected { bit_reverse(n) >> 31 } else { n << 32 } } /// Computes a CRC-64 folding key for a given bit distance (exponent). /// /// # Algorithm /// /// Similar to CRC-32 but adapted for 64-bit polynomials: /// /// 1. Start with x^63 (represented as 0x8000000000000000, bit 63 set) /// 2. Multiply by x repeatedly, reducing modulo P(x) each time /// 3. After (exponent - 63 or - 64) iterations, we have x^exponent mod P(x) /// /// # Key Differences From CRC-32 /// /// 1. **Starting point**: 0x8000000000000000 vs 0x080000000 /// - CRC-64 uses bit 63 (the MSB of a 64-bit value) /// - CRC-32 uses bit 35 (extended beyond 32 bits) /// /// 2. **Iteration count**: Depends on reflection /// - Reflected: exponent - 64 (because we iterate from x^64) /// - Non-reflected: exponent - 63 (because we start at x^63) /// /// 3. **Reduction step**: Uses a more efficient formulation /// - `(n << 1) ^ ((0_u64.wrapping_sub(n >> 63)) & polynomial)` /// - This is equivalent to: if MSB is set, shift and XOR with poly; else just shift /// - The wrapping_sub creates a mask of all 1s or all 0s based on the MSB /// /// 4. **No additional shift in result**: The result is already properly aligned /// - CRC-32 needs `>> 31` adjustment for reflected case /// - CRC-64 doesn't need this because it operates on full 64-bit values fn crc64_key(exponent: u64, reflected: bool, polynomial: u64) -> u64 { if exponent <= 64 { return 0; } let mut n: u64 = 0x8000000000000000; let e = if reflected { exponent - 64 } else { exponent - 63 }; for _ in 0..e { n = (n << 1) ^ ((0_u64.wrapping_sub(n >> 63)) & polynomial); } if reflected { bit_reverse(n) } else { n } } fn polynomial(width: u8, polynomial: u64, reflected: bool) -> u64 { if width == 16 { crc16_polynomial(polynomial, reflected) } else if width == 32 { crc32_polynomial(polynomial, reflected) } else if width == 64 { crc64_polynomial(polynomial, reflected) } else { panic!("Unsupported width: {width}",); } } /// Formats a CRC-16 polynomial for use in PCLMULQDQ operations. /// /// # Polynomial Representation /// /// The polynomial passed to this function is already scaled to 32-bit space /// (original_poly << 16 | 1 << 32). This function formats it for PCLMULQDQ. /// /// # Non-Reflected Case /// /// For non-reflected CRCs, the polynomial is already in the correct format /// from the scaling done in keys(). /// /// # Reflected Case /// /// For reflected (LSB-first) CRCs, we need to: /// 1. Extract the original 16-bit polynomial from the scaled value /// 2. Bit-reverse the 16-bit polynomial /// 3. Shift left by 1 bit and set the LSB to 1 fn crc16_polynomial(polynomial: u64, reflected: bool) -> u64 { if !reflected { return polynomial; } // Extract original 16-bit poly from scaled polynomial (poly << 16 | 1 << 32) let original_poly = ((polynomial >> 16) & 0xFFFF) as u16; let reversed = bit_reverse(original_poly); ((reversed as u64) << 1) | 1 } /// Formats a CRC-32 polynomial for use in PCLMULQDQ operations. /// /// # Polynomial Representation /// /// CRC polynomials are typically written without the implicit leading 1. For example: /// - CRC-32 (IEEE 802.3): 0x04C11DB7 /// - The full polynomial is actually 0x104C11DB7 (33 bits) /// /// # Non-Reflected Case /// /// For non-reflected CRCs, we simply add the leading 1: /// - Input: 0x04C11DB7 /// - Output: 0x104C11DB7 (bit 32 set) /// /// # Reflected Case /// /// For reflected (LSB-first) CRCs, we need to: /// 1. Bit-reverse the 32-bit polynomial value /// 2. Shift left by 1 bit /// 3. Set the LSB to 1 /// /// This creates the reflected polynomial in the format expected by PCLMULQDQ. /// /// Example: /// - Original: 0x04C11DB7 /// - Bit-reversed: 0xEDB88320 /// - Shifted and ORed: 0x1DB710641 fn crc32_polynomial(polynomial: u64, reflected: bool) -> u64 { if !reflected { return polynomial | (1u64 << 32); }; // For 32-bit polynomials, operate on full 33 bits including leading 1 let reversed = bit_reverse((polynomial & 0xFFFFFFFF) as u32); // Need to set bit 32 (33rd bit) to get the 1 in the right position after reflection ((reversed as u64) << 1) | 1 } /// Formats a CRC-64 polynomial for use in PCLMULQDQ operations. /// /// # Key Difference From CRC-32 /// /// # Non-Reflected Case /// /// For non-reflected CRCs, we simply return the polynomial as-is. /// /// # Reflected Case /// /// For reflected CRC-64: /// 1. Bit-reverse all 64 bits of the polynomial /// 2. Shift left by 1 /// 3. Set LSB to 1 /// /// Unlike CRC-32 which only reverses 32 bits, this reverses the full 64-bit value. fn crc64_polynomial(polynomial: u64, reflected: bool) -> u64 { if !reflected { return polynomial; }; // For 64-bit polynomials, operate on all 64 bits (bit_reverse(polynomial) << 1) | 1 } fn mu(width: u8, polynomial: u64, reflected: bool) -> u64 { if width == 16 { crc16_mu(polynomial, reflected) } else if width == 32 { crc32_mu(polynomial, reflected) } else if width == 64 { crc64_mu(polynomial, reflected) } else { panic!("Unsupported width: {width}",); } } /// Computes the Barrett reduction constant (μ) for CRC-16. /// /// # What Is μ (Mu)? /// /// Mu is used in Barrett reduction for fast modular reduction without division. /// For CRC-16 operations (scaled to 32-bit space), μ = floor(x^64 / P(x)). /// /// # Algorithm /// /// This uses the same algorithm as CRC-32 mu calculation because CRC-16 is /// computed in 32-bit space. The polynomial is already scaled (poly << 16 | 1 << 32). /// /// 1. Start with x^64 (represented as 0x100000000, bit 32 set) /// 2. For each bit position from MSB down: /// - If the dividend has a bit at position 32, record a 1 in quotient /// - XOR the dividend with the polynomial /// - Shift dividend left /// 3. After 33 iterations, q contains μ fn crc16_mu(polynomial: u64, reflected: bool) -> u64 { let mut n: u64 = 0x100000000; let mut q: u64 = 0; for _ in 0..33 { q <<= 1; if n & 0x100000000 != 0 { q |= 1; n ^= polynomial; } n <<= 1; } if reflected { bit_reverse(q) >> 31 } else { q } } /// Computes the Barrett reduction constant (μ) for CRC-32. /// /// # What Is μ (Mu)? /// /// Mu is used in Barrett reduction, an algorithm for fast modular reduction without division. /// For CRC operations, μ = floor(x^(2n) / P(x)) where n is the polynomial degree. /// /// # Algorithm /// /// This performs polynomial long division: /// 1. Start with x^64 (represented as 0x100000000, bit 32 set in a 65-bit view) /// 2. For each bit position from MSB down: /// - If the dividend has a bit at position 32, record a 1 in quotient /// - XOR the dividend with the polynomial (subtract in GF(2)) /// - Shift dividend left /// 3. After 33 iterations, q contains μ /// /// # Why 33 Iterations? /// /// We're dividing a 65-bit value (x^64) by a 33-bit polynomial, giving a 33-bit quotient. /// /// # Reflection /// /// If reflected, the result is bit-reversed and shifted right by 31 to align properly. fn crc32_mu(polynomial: u64, reflected: bool) -> u64 { let mut n: u64 = 0x100000000; let mut q: u64 = 0; for _ in 0..33 { q <<= 1; if n & 0x100000000 != 0 { q |= 1; n ^= polynomial; } n <<= 1; } if reflected { bit_reverse(q) >> 31 } else { q } } /// Computes the Barrett reduction constant (μ) for CRC-64. /// /// # Key Differences From CRC-32 /// /// CRC-64 requires dividing a 129-bit value (x^128) by a 65-bit polynomial, which /// doesn't fit in a single u64. This implementation uses two u64 variables to represent /// a 128-bit dividend. /// /// # Algorithm /// /// 1. Start with x^128 represented as (n_hi=1, n_lo=0) /// 2. For each bit position: /// - If n_hi is non-zero, record 1 in quotient and XOR n_lo with polynomial /// - Shift the double-register left: n_hi = n_lo >> 63; n_lo <<= 1 /// 3. After 64 or 65 iterations, q contains μ /// /// # Why Two Registers? /// /// - n_hi:n_lo forms a 128-bit value /// - We can only XOR with the polynomial when "bit 64" is set (n_hi != 0) /// - The shift operation propagates the MSB of n_lo into n_hi /// /// # Iteration Count Difference /// /// - Reflected: 64 iterations (matches the polynomial degree) /// - Non-reflected: 65 iterations (one extra for proper alignment) /// /// This asymmetry exists because reflected CRCs process data LSB-first, /// changing the division mechanics slightly. /// /// # No Additional Shift /// /// Unlike CRC-32's `>> 31`, CRC-64 doesn't need an extra shift in the reflected /// case because the 64-bit result is already properly aligned. fn crc64_mu(polynomial: u64, reflected: bool) -> u64 { let mut n_hi: u64 = 0x0000000000000001; let mut n_lo: u64 = 0x0000000000000000; let mut q: u64 = 0; let max = if reflected { 64 } else { 65 }; for _ in 0..max { q <<= 1; if n_hi != 0 { q |= 1; n_lo ^= polynomial; } n_hi = n_lo >> 63; n_lo <<= 1; } if reflected { bit_reverse(q) } else { q } } /// Reverses the bits of a value (MSB becomes LSB and vice versa). /// /// # Purpose in CRC Calculations /// /// Reflected (LSB-first) CRCs process data in reverse bit order. This function /// converts between normal and reflected representations. /// /// # Why Generic? /// /// This works with any unsigned integer type (u32, u64) through trait bounds, /// allowing the same code to handle both CRC-32 (which reverses 32 bits) and /// CRC-64 (which reverses 64 bits). /// /// # Example /// /// For u32: 0x12345678 → 0x1E6A2C48 /// - Binary: 0001 0010 0011 0100 0101 0110 0111 1000 /// - Reversed: 0001 1110 0110 1010 0010 1100 0100 1000 fn bit_reverse(mut value: T) -> T where T: Copy + Default + PartialEq + BitAnd + BitOr + Shl + Shr + From, { let one = T::from(1u8); let mut result = T::default(); // Zero value // Get the bit size of type T let bit_size = core::mem::size_of::() * 8; for _ in 0..bit_size { // Shift result left by 1 result = result << 1; // OR with least significant bit of value result = result | (value & one); // Shift value right by 1 value = value >> 1; } result } #[cfg(test)] mod tests { use super::*; use crate::crc16::consts::{KEYS_1021_REVERSE, KEYS_8BB7_FORWARD}; use crate::test::consts::TEST_ALL_CONFIGS; #[test] fn test_all() { for config in TEST_ALL_CONFIGS { let keys = keys(config.get_width(), config.get_poly(), config.get_refin()); let expected = config.get_keys(); for (i, key) in keys.iter().enumerate() { assert_eq!( *key, expected[i], "Mismatch in keys for {} at index {}: expected 0x{:016x}, got 0x{:016x}", config.get_name(), i, expected[i], *key ); } } } #[test] fn test_crc16_t10_dif_keys() { // CRC-16/T10-DIF: forward mode, poly=0x8BB7 let generated = keys(16, 0x8BB7, false); for (i, key) in generated.iter().enumerate().take(21) { assert_eq!( *key, KEYS_8BB7_FORWARD[i], "CRC-16/T10-DIF key mismatch at index {}: expected 0x{:016x}, got 0x{:016x}", i, KEYS_8BB7_FORWARD[i], *key ); } } #[test] fn test_crc16_ibm_sdlc_keys() { // CRC-16/IBM-SDLC: reflected mode, poly=0x1021 let generated = keys(16, 0x1021, true); for (i, key) in generated.iter().enumerate().take(21) { assert_eq!( *key, KEYS_1021_REVERSE[i], "CRC-16/IBM-SDLC key mismatch at index {}: expected 0x{:016x}, got 0x{:016x}", i, KEYS_1021_REVERSE[i], *key ); } } } #[cfg(test)] mod property_tests { use super::*; use crate::test::miri_compatible_proptest_config; use proptest::prelude::*; /// Helper function to bit-reverse a 16-bit value fn bit_reverse_16(value: u16) -> u16 { let mut v = value; let mut result: u16 = 0; for _ in 0..16 { result = (result << 1) | (v & 1); v >>= 1; } result } proptest! { #![proptest_config(miri_compatible_proptest_config())] /// Feature: crc16-hardware-acceleration, Property 1: Forward polynomial formatting /// *For any* 16-bit polynomial value P, when generating the polynomial key for forward /// (non-reflected) CRC-16, the result SHALL equal `(P << 16) | (1 << 32)`. /// **Validates: Requirements 1.5** #[test] fn prop_forward_polynomial_formatting(poly in 0u16..=0xFFFFu16) { let generated_keys = keys(16, poly as u64, false); let polynomial_key = generated_keys[8]; let expected = ((poly as u64) << 16) | (1u64 << 32); prop_assert_eq!( polynomial_key, expected, "Forward polynomial formatting failed for poly=0x{:04X}: expected 0x{:016X}, got 0x{:016X}", poly, expected, polynomial_key ); } /// Feature: crc16-hardware-acceleration, Property 2: Reflected polynomial formatting /// *For any* 16-bit polynomial value P, when generating the polynomial key for reflected /// CRC-16, the result SHALL equal `(bit_reverse_16(P) << 1) | 1`. /// **Validates: Requirements 1.6** #[test] fn prop_reflected_polynomial_formatting(poly in 0u16..=0xFFFFu16) { let generated_keys = keys(16, poly as u64, true); let polynomial_key = generated_keys[8]; let reversed = bit_reverse_16(poly); let expected = ((reversed as u64) << 1) | 1; prop_assert_eq!( polynomial_key, expected, "Reflected polynomial formatting failed for poly=0x{:04X}: expected 0x{:016X}, got 0x{:016X}", poly, expected, polynomial_key ); } } } crc-fast-1.10.0/src/lib.rs000064400000000000000000002132001046102023000133060ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. // Future proofing for no_std support #![cfg_attr(not(feature = "std"), no_std)] //! `crc-fast` //! =========== //! //! Hardware-accelerated CRC calculation for //! [all known CRC-32 and CRC-64 variants](https://reveng.sourceforge.io/crc-catalogue/all.htm) //! using SIMD intrinsics which can exceed 100GiB/s for CRC-32 and 50GiB/s for CRC-64 on modern //! systems. //! //! # Other languages //! //! Supplies a C-compatible shared library for use with other non-Rust languages. See //! [PHP extension](https://github.com/awesomized/crc-fast-php-ext) example. //! //! # Background //! //! The implementation is based on Intel's //! [Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction](https://web.archive.org/web/20131224125630/https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf), //! white paper though it folds 8-at-a-time, like other modern implementations, rather than the //! 4-at-a-time as in Intel's paper. //! //! Works on `aarch64`, `x86_64`, and `x86` architectures, and is hardware-accelerated and optimized //! for each architecture. //! //! Inspired by [`crc32fast`](https://crates.io/crates/crc32fast), //! [`crc64fast`](https://crates.io/crates/crc64fast), //! and [`crc64fast-nvme`](https://crates.io/crates/crc64fast-nvme), each of which only accelerates //! a single, different CRC variant, and all of them were "reflected" variants. //! //! In contrast, this library accelerates _every known variant_ (and should accelerate any future //! variants without changes), including all the "non-reflected" variants. //! //! # Usage //! //! ## Digest //! //! Implements the [digest::DynDigest](https://docs.rs/digest/latest/digest/trait.DynDigest.html) //! trait for easier integration with existing code. //! //! ```rust //! use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc}; //! //! let mut digest = Digest::new(Crc32IsoHdlc); //! digest.update(b"1234"); //! digest.update(b"56789"); //! let checksum = digest.finalize(); //! //! assert_eq!(checksum, 0xcbf43926); //! ``` //! //! ## Digest Write //! //! Implements the [std::io::Write](https://doc.rust-lang.org/std/io/trait.Write.html) trait for //! easier integration with existing code. //! //! ```rust //! use std::env; //! use std::fs::File; //! use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc}; //! //! // for example/test purposes only, use your own file path //! let file_path = env::current_dir().expect("missing working dir").join("crc-check.txt"); //! let file_on_disk = file_path.to_str().unwrap(); //! //! // actual usage //! let mut digest = Digest::new(Crc32IsoHdlc); //! let mut file = File::open(file_on_disk).unwrap(); //! std::io::copy(&mut file, &mut digest).unwrap(); //! let checksum = digest.finalize(); //! //! assert_eq!(checksum, 0xcbf43926); //! ``` //! ## checksum //!```rust //! use crc_fast::{checksum, CrcAlgorithm::Crc32IsoHdlc}; //! //! let checksum = checksum(Crc32IsoHdlc, b"123456789"); //! //! assert_eq!(checksum, 0xcbf43926); //! ``` //! //! ## checksum_combine //!```rust //! use crc_fast::{checksum, checksum_combine, CrcAlgorithm::Crc32IsoHdlc}; //! //! let checksum_1 = checksum(Crc32IsoHdlc, b"1234"); //! let checksum_2 = checksum(Crc32IsoHdlc, b"56789"); //! let checksum = checksum_combine(Crc32IsoHdlc, checksum_1, checksum_2, 5); //! //! assert_eq!(checksum, 0xcbf43926); //! ``` //! //! ## checksum_file //!```rust //! use std::env; //! use crc_fast::{checksum_file, CrcAlgorithm::Crc32IsoHdlc}; //! //! // for example/test purposes only, use your own file path //! let file_path = env::current_dir().expect("missing working dir").join("crc-check.txt"); //! let file_on_disk = file_path.to_str().unwrap(); //! //! let checksum = checksum_file(Crc32IsoHdlc, file_on_disk, None); //! //! assert_eq!(checksum.unwrap(), 0xcbf43926); //! ``` //! //! ## Custom CRC Parameters //! //! For cases where you need to use CRC variants not included in the predefined algorithms, //! you can define custom CRC parameters using `CrcParams::new()` and use the `*_with_params` functions. //! //! ## checksum_with_params //!```rust //! use crc_fast::{checksum_with_params, CrcParams}; //! //! // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC) //! let custom_params = CrcParams::new( //! "CRC-32/CUSTOM", //! 32, //! 0x04c11db7, //! 0xffffffff, //! true, //! 0xffffffff, //! 0xcbf43926, //! ); //! //! let checksum = checksum_with_params(custom_params, b"123456789"); //! //! assert_eq!(checksum, 0xcbf43926); //! ``` //! //! # no_std Support //! //! Supports `no_std` environments. Use `default-features = false` in Cargo.toml. //! //! Note: When using this library in a `no_std` environment, the final binary must provide: //! - A `#[panic_handler]` (e.g., via the `panic-halt` crate) //! - A `#[global_allocator]` if using the `alloc` feature // Provide a panic handler for no_std library checks // Disabled with default-features = false (which binaries should use) #[cfg(all( feature = "panic-handler", not(feature = "std"), not(test), not(doctest) ))] #[panic_handler] fn panic(_info: &core::panic::PanicInfo) -> ! { loop {} } // Provide a global allocator for no_std + alloc library checks // Disabled with default-features = false (which binaries should use) #[cfg(all( feature = "panic-handler", feature = "alloc", not(feature = "std"), not(test), not(doctest) ))] #[global_allocator] static ALLOCATOR: StubAllocator = StubAllocator; #[cfg(all( feature = "panic-handler", feature = "alloc", not(feature = "std"), not(test), not(doctest) ))] struct StubAllocator; #[cfg(all( feature = "panic-handler", feature = "alloc", not(feature = "std"), not(test), not(doctest) ))] unsafe impl core::alloc::GlobalAlloc for StubAllocator { unsafe fn alloc(&self, _layout: core::alloc::Layout) -> *mut u8 { core::ptr::null_mut() } unsafe fn dealloc(&self, _ptr: *mut u8, _layout: core::alloc::Layout) {} } use crate::crc16::consts::{ CRC16_ARC, CRC16_CDMA2000, CRC16_CMS, CRC16_DDS_110, CRC16_DECT_R, CRC16_DECT_X, CRC16_DNP, CRC16_EN_13757, CRC16_GENIBUS, CRC16_GSM, CRC16_IBM_3740, CRC16_IBM_SDLC, CRC16_ISO_IEC_14443_3_A, CRC16_KERMIT, CRC16_LJ1200, CRC16_M17, CRC16_MAXIM_DOW, CRC16_MCRF4XX, CRC16_MODBUS, CRC16_NRSC_5, CRC16_OPENSAFETY_A, CRC16_OPENSAFETY_B, CRC16_PROFIBUS, CRC16_RIELLO, CRC16_SPI_FUJITSU, CRC16_T10_DIF, CRC16_TELEDISK, CRC16_TMS37157, CRC16_UMTS, CRC16_USB, CRC16_XMODEM, }; use crate::crc32::consts::{ CRC32_AIXM, CRC32_AUTOSAR, CRC32_BASE91_D, CRC32_BZIP2, CRC32_CD_ROM_EDC, CRC32_CKSUM, CRC32_ISCSI, CRC32_ISO_HDLC, CRC32_JAMCRC, CRC32_MEF, CRC32_MPEG_2, CRC32_XFER, }; #[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] #[cfg(feature = "std")] use crate::crc32::fusion; use crate::crc64::consts::{ CRC64_ECMA_182, CRC64_GO_ISO, CRC64_MS, CRC64_NVME, CRC64_REDIS, CRC64_WE, CRC64_XZ, }; use crate::structs::Calculator; use crate::traits::CrcCalculator; #[cfg(feature = "alloc")] use digest::DynDigest; #[cfg(feature = "alloc")] use digest::InvalidBufferSize; #[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] use crate::feature_detection::get_arch_ops; #[cfg(feature = "std")] use std::fs::File; #[cfg(feature = "std")] use std::io::{Read, Write}; #[cfg(all(feature = "alloc", not(feature = "std")))] extern crate alloc; #[cfg(all(feature = "alloc", not(feature = "std")))] use alloc::boxed::Box; #[cfg(all(feature = "alloc", not(feature = "std")))] use alloc::string::String; mod algorithm; pub mod arch; mod cache; mod combine; mod consts; mod crc16; mod crc32; mod crc64; mod enums; mod feature_detection; #[cfg(feature = "ffi")] mod ffi; mod generate; mod structs; mod tables; mod test; mod traits; /// Supported CRC-16, CRC-32, and CRC-64 variants #[derive(Debug, Clone, Copy, PartialEq)] pub enum CrcAlgorithm { /// Generic custom CRC variant that works with any supported width (16, 32, 64). /// The actual width is determined by the `width` field in `CrcParams`. CrcCustom, Crc16Arc, Crc16Cdma2000, Crc16Cms, Crc16Dds110, Crc16DectR, Crc16DectX, Crc16Dnp, Crc16En13757, Crc16Genibus, Crc16Gsm, Crc16Ibm3740, Crc16IbmSdlc, Crc16IsoIec144433A, Crc16Kermit, Crc16Lj1200, Crc16M17, Crc16MaximDow, Crc16Mcrf4xx, Crc16Modbus, Crc16Nrsc5, Crc16OpensafetyA, Crc16OpensafetyB, Crc16Profibus, Crc16Riello, Crc16SpiFujitsu, Crc16T10Dif, Crc16Teledisk, Crc16Tms37157, Crc16Umts, Crc16Usb, Crc16Xmodem, Crc32Aixm, Crc32Autosar, Crc32Base91D, Crc32Bzip2, Crc32CdRomEdc, Crc32Cksum, #[deprecated( since = "1.9.0", note = "Use CrcCustom instead, which works with any supported width (16, 32, 64)" )] Crc32Custom, // Custom CRC-32 implementation, not defined in consts Crc32Iscsi, Crc32IsoHdlc, Crc32Jamcrc, Crc32Mef, Crc32Mpeg2, Crc32Xfer, #[deprecated( since = "1.9.0", note = "Use CrcCustom instead, which works with any supported width (16, 32, 64)" )] Crc64Custom, // Custom CRC-64 implementation, not defined in consts Crc64Ecma182, Crc64GoIso, Crc64Ms, Crc64Nvme, Crc64Redis, Crc64We, Crc64Xz, } /// Internal storage for CRC folding keys that can accommodate different array sizes. /// This enum allows future expansion to support larger folding distances while maintaining /// backwards compatibility with existing const definitions. #[derive(Clone, Copy, Debug, PartialEq)] pub enum CrcKeysStorage { /// Current 23-key format for existing algorithms (supports up to 256-byte folding distances) KeysFold256([u64; 23]), /// Future 25-key format for potential expanded folding distances (testing purposes only) KeysFutureTest([u64; 25]), } impl CrcKeysStorage { /// Safe key access with bounds checking. Returns 0 for out-of-bounds indices. #[inline(always)] const fn get_key(self, index: usize) -> u64 { match self { CrcKeysStorage::KeysFold256(keys) => { if index < 23 { keys[index] } else { 0 } } CrcKeysStorage::KeysFutureTest(keys) => { if index < 25 { keys[index] } else { 0 } } } } /// Returns the number of keys available in this storage variant. #[inline(always)] const fn key_count(self) -> usize { match self { CrcKeysStorage::KeysFold256(_) => 23, CrcKeysStorage::KeysFutureTest(_) => 25, } } /// Const constructor for 23-key arrays (current format). #[inline(always)] const fn from_keys_fold_256(keys: [u64; 23]) -> Self { CrcKeysStorage::KeysFold256(keys) } /// Const constructor for 25-key arrays (future expansion testing). #[inline(always)] #[allow(dead_code)] // Reserved for future expansion const fn from_keys_fold_future_test(keys: [u64; 25]) -> Self { CrcKeysStorage::KeysFutureTest(keys) } /// Extracts keys as a [u64; 23] array for FFI compatibility. /// For variants with more than 23 keys, only the first 23 are returned. /// For variants with fewer keys, remaining slots are filled with 0. #[inline(always)] pub fn to_keys_array_23(self) -> [u64; 23] { match self { CrcKeysStorage::KeysFold256(keys) => keys, CrcKeysStorage::KeysFutureTest(keys) => { let mut result = [0u64; 23]; result.copy_from_slice(&keys[..23]); result } } } } // Implement PartialEq between CrcKeysStorage and [u64; 23] for test compatibility impl PartialEq<[u64; 23]> for CrcKeysStorage { fn eq(&self, other: &[u64; 23]) -> bool { self.to_keys_array_23() == *other } } impl PartialEq for [u64; 23] { fn eq(&self, other: &CrcKeysStorage) -> bool { *self == other.to_keys_array_23() } } /// Parameters for CRC computation, including polynomial, initial value, and other settings. #[derive(Clone, Copy, Debug)] pub struct CrcParams { pub algorithm: CrcAlgorithm, pub name: &'static str, pub width: u8, pub poly: u64, pub init: u64, /// The init value in "algorithm form" for the SIMD implementation. /// /// For most CRC variants, this equals `init`. However, for reflected CRC-16 variants /// with non-symmetric init values (e.g., CRC-16/ISO-IEC-14443-3-A with init=0xC6C6), /// this stores the bit-reversed init value. This avoids runtime bit-reversal on every /// update() call, which would otherwise be needed because the SIMD algorithm operates /// on data in a different bit order than the catalog specification. /// /// Examples: /// - CRC-16/IBM-SDLC: init=0xFFFF, init_algorithm=0xFFFF (symmetric) /// - CRC-16/ISO-IEC-14443-3-A: init=0xC6C6, init_algorithm=0x6363 (0xC6C6.reverse_bits()) pub init_algorithm: u64, pub refin: bool, pub refout: bool, pub xorout: u64, pub check: u64, pub keys: CrcKeysStorage, } /// Type alias for a function pointer that represents a CRC calculation function. /// /// The function takes the following parameters: /// - `state`: The current state of the CRC computation. /// - `data`: A slice of bytes to be processed. /// - `params`: The parameters for the CRC computation, such as polynomial, initial value, etc. /// /// The function returns the updated state after processing the data. /// /// Note: CrcParams is passed by reference to avoid copying the large struct (200+ bytes) /// which causes significant overhead for small data sizes. type CalculatorFn = fn( u64, // state &[u8], // data &CrcParams, // CRC implementation parameters ) -> u64; /// Represents a CRC Digest, which is used to compute CRC checksums. /// /// The `Digest` struct maintains the state of the CRC computation, including /// the current state, the amount of data processed, the CRC parameters, and /// the calculator function used to perform the CRC calculation. #[derive(Copy, Clone, Debug)] pub struct Digest { /// The current state of the CRC computation. state: u64, /// The total amount of data processed so far. amount: u64, /// The parameters for the CRC computation, such as polynomial, initial value, etc. params: CrcParams, /// The function used to perform the CRC calculation. calculator: CalculatorFn, } #[cfg(feature = "alloc")] impl DynDigest for Digest { #[inline(always)] fn update(&mut self, data: &[u8]) { self.update(data); } #[inline(always)] fn finalize_into(self, buf: &mut [u8]) -> Result<(), InvalidBufferSize> { if buf.len() != self.output_size() { return Err(InvalidBufferSize); } let result = self.finalize(); let be_bytes = result.to_be_bytes(); let start = 8 - self.output_size(); buf.copy_from_slice(&be_bytes[start..]); Ok(()) } #[inline(always)] fn finalize_into_reset(&mut self, out: &mut [u8]) -> Result<(), InvalidBufferSize> { if out.len() != self.output_size() { return Err(InvalidBufferSize); } let result = self.finalize(); self.reset(); let be_bytes = result.to_be_bytes(); let start = 8 - self.output_size(); out.copy_from_slice(&be_bytes[start..]); Ok(()) } #[inline(always)] fn reset(&mut self) { self.reset(); } #[inline(always)] fn output_size(&self) -> usize { self.params.width as usize / 8 } fn box_clone(&self) -> Box { Box::new(*self) } } impl Digest { /// Creates a new `Digest` instance for the specified CRC algorithm. /// /// # Examples /// /// ```rust /// use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc}; /// /// let mut digest = Digest::new(Crc32IsoHdlc); /// digest.update(b"123456789"); /// let checksum = digest.finalize(); /// /// assert_eq!(checksum, 0xcbf43926); /// ``` #[inline(always)] pub fn new(algorithm: CrcAlgorithm) -> Self { let (calculator, params) = get_calculator_params(algorithm); Self { state: params.init_algorithm, amount: 0, params, calculator, } } /// Creates a new `Digest` instance for the specified CRC algorithm with a custom initial state. /// /// # Examples /// /// ```rust /// use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc}; /// /// // CRC-32/ISO-HDLC with initial state of 0x00000000, instead of the default initial state /// // of 0xffffffff, /// let mut digest = Digest::new_with_init_state(Crc32IsoHdlc, 0x00000000); /// digest.update(b"123456789"); /// let checksum = digest.finalize(); /// /// // different initial state, so checksum will be different /// assert_eq!(checksum, 0xd202d277); /// /// let mut digest = Digest::new_with_init_state(Crc32IsoHdlc, 0xffffffff); /// digest.update(b"123456789"); /// let checksum = digest.finalize(); /// /// // same initial state as the default, so checksum will be the same /// assert_eq!(checksum, 0xcbf43926); /// ``` #[inline(always)] pub fn new_with_init_state(algorithm: CrcAlgorithm, init_state: u64) -> Self { let (calculator, params) = get_calculator_params(algorithm); Self { state: init_state, amount: 0, params, calculator, } } /// Creates a new `Digest` instance with custom CRC parameters. /// /// # Examples /// /// ```rust /// use crc_fast::{Digest, CrcParams}; /// /// // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC) /// let custom_params = CrcParams::new( /// "CRC-32/CUSTOM", /// 32, /// 0x04c11db7, /// 0xffffffff, /// true, /// 0xffffffff, /// 0xcbf43926, /// ); /// /// let mut digest = Digest::new_with_params(custom_params); /// digest.update(b"123456789"); /// let checksum = digest.finalize(); /// /// assert_eq!(checksum, 0xcbf43926); /// ``` #[inline(always)] pub fn new_with_params(params: CrcParams) -> Self { let calculator = Calculator::calculate as CalculatorFn; Self { state: params.init_algorithm, amount: 0, params, calculator, } } /// Updates the CRC state with the given data. #[inline(always)] pub fn update(&mut self, data: &[u8]) { self.state = (self.calculator)(self.state, data, &self.params); self.amount += data.len() as u64; } /// Finalizes the CRC computation and returns the result. #[inline(always)] pub fn finalize(&self) -> u64 { self.state ^ self.params.xorout } /// Finalizes the CRC computation, resets the state, and returns the result. #[inline(always)] pub fn finalize_reset(&mut self) -> u64 { let result = self.finalize(); self.reset(); result } /// Resets the CRC state to its initial value. #[inline(always)] pub fn reset(&mut self) { self.state = self.params.init_algorithm; self.amount = 0; } /// Combines the CRC state with a second `Digest` instance. #[inline(always)] pub fn combine(&mut self, other: &Self) { self.amount += other.amount; let other_crc = other.finalize(); // note the xorout for the input, since it's already been applied so it has to be removed, // and then re-adding it on the final output self.state = combine::checksums( self.state ^ self.params.xorout, other_crc, other.amount, &self.params, ) ^ self.params.xorout; } /// Gets the amount of data processed so far #[inline(always)] pub fn get_amount(&self) -> u64 { self.amount } /// Gets the current CRC state. /// /// # Examples /// ```rust /// use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc}; /// /// let mut digest = Digest::new(Crc32IsoHdlc); /// digest.update(b"123456789"); /// let state = digest.get_state(); /// /// // non-finalized state, so it won't match the final checksum /// assert_eq!(state, 0x340bc6d9); /// /// // finalized state will match the checksum /// assert_eq!(digest.finalize(), 0xcbf43926); /// ``` #[inline(always)] pub fn get_state(&self) -> u64 { self.state } } #[cfg(feature = "std")] impl Write for Digest { #[inline(always)] fn write(&mut self, buf: &[u8]) -> std::io::Result { self.update(buf); Ok(buf.len()) } #[inline(always)] fn write_vectored(&mut self, bufs: &[std::io::IoSlice<'_>]) -> std::io::Result { let len: usize = bufs .iter() .map(|buf| { self.update(buf); buf.len() }) .sum(); Ok(len) } #[inline(always)] fn flush(&mut self) -> std::io::Result<()> { Ok(()) } #[inline(always)] fn write_all(&mut self, buf: &[u8]) -> std::io::Result<()> { self.update(buf); Ok(()) } } /// Computes the CRC checksum for the given data using the specified algorithm. /// ///```rust /// use crc_fast::{checksum, CrcAlgorithm::Crc32IsoHdlc}; /// let checksum = checksum(Crc32IsoHdlc, b"123456789"); /// /// assert_eq!(checksum, 0xcbf43926); /// ``` #[inline] #[allow(deprecated)] pub fn checksum(algorithm: CrcAlgorithm, buf: &[u8]) -> u64 { // avoid using get_calculator_params() here to reduce overhead for small data sizes match algorithm { CrcAlgorithm::Crc16Arc => { Calculator::calculate(CRC16_ARC.init, buf, &CRC16_ARC) ^ CRC16_ARC.xorout } CrcAlgorithm::Crc16Cdma2000 => { Calculator::calculate(CRC16_CDMA2000.init, buf, &CRC16_CDMA2000) ^ CRC16_CDMA2000.xorout } CrcAlgorithm::Crc16Cms => { Calculator::calculate(CRC16_CMS.init, buf, &CRC16_CMS) ^ CRC16_CMS.xorout } CrcAlgorithm::Crc16Dds110 => { Calculator::calculate(CRC16_DDS_110.init, buf, &CRC16_DDS_110) ^ CRC16_DDS_110.xorout } CrcAlgorithm::Crc16DectR => { Calculator::calculate(CRC16_DECT_R.init, buf, &CRC16_DECT_R) ^ CRC16_DECT_R.xorout } CrcAlgorithm::Crc16DectX => { Calculator::calculate(CRC16_DECT_X.init, buf, &CRC16_DECT_X) ^ CRC16_DECT_X.xorout } CrcAlgorithm::Crc16Dnp => { Calculator::calculate(CRC16_DNP.init, buf, &CRC16_DNP) ^ CRC16_DNP.xorout } CrcAlgorithm::Crc16En13757 => { Calculator::calculate(CRC16_EN_13757.init, buf, &CRC16_EN_13757) ^ CRC16_EN_13757.xorout } CrcAlgorithm::Crc16Genibus => { Calculator::calculate(CRC16_GENIBUS.init, buf, &CRC16_GENIBUS) ^ CRC16_GENIBUS.xorout } CrcAlgorithm::Crc16Gsm => { Calculator::calculate(CRC16_GSM.init, buf, &CRC16_GSM) ^ CRC16_GSM.xorout } CrcAlgorithm::Crc16Ibm3740 => { Calculator::calculate(CRC16_IBM_3740.init, buf, &CRC16_IBM_3740) ^ CRC16_IBM_3740.xorout } CrcAlgorithm::Crc16IbmSdlc => { Calculator::calculate(CRC16_IBM_SDLC.init, buf, &CRC16_IBM_SDLC) ^ CRC16_IBM_SDLC.xorout } CrcAlgorithm::Crc16IsoIec144433A => { Calculator::calculate( CRC16_ISO_IEC_14443_3_A.init_algorithm, buf, &CRC16_ISO_IEC_14443_3_A, ) ^ CRC16_ISO_IEC_14443_3_A.xorout } CrcAlgorithm::Crc16Kermit => { Calculator::calculate(CRC16_KERMIT.init, buf, &CRC16_KERMIT) ^ CRC16_KERMIT.xorout } CrcAlgorithm::Crc16Lj1200 => { Calculator::calculate(CRC16_LJ1200.init, buf, &CRC16_LJ1200) ^ CRC16_LJ1200.xorout } CrcAlgorithm::Crc16M17 => { Calculator::calculate(CRC16_M17.init, buf, &CRC16_M17) ^ CRC16_M17.xorout } CrcAlgorithm::Crc16MaximDow => { Calculator::calculate(CRC16_MAXIM_DOW.init, buf, &CRC16_MAXIM_DOW) ^ CRC16_MAXIM_DOW.xorout } CrcAlgorithm::Crc16Mcrf4xx => { Calculator::calculate(CRC16_MCRF4XX.init, buf, &CRC16_MCRF4XX) ^ CRC16_MCRF4XX.xorout } CrcAlgorithm::Crc16Modbus => { Calculator::calculate(CRC16_MODBUS.init, buf, &CRC16_MODBUS) ^ CRC16_MODBUS.xorout } CrcAlgorithm::Crc16Nrsc5 => { Calculator::calculate(CRC16_NRSC_5.init, buf, &CRC16_NRSC_5) ^ CRC16_NRSC_5.xorout } CrcAlgorithm::Crc16OpensafetyA => { Calculator::calculate(CRC16_OPENSAFETY_A.init, buf, &CRC16_OPENSAFETY_A) ^ CRC16_OPENSAFETY_A.xorout } CrcAlgorithm::Crc16OpensafetyB => { Calculator::calculate(CRC16_OPENSAFETY_B.init, buf, &CRC16_OPENSAFETY_B) ^ CRC16_OPENSAFETY_B.xorout } CrcAlgorithm::Crc16Profibus => { Calculator::calculate(CRC16_PROFIBUS.init, buf, &CRC16_PROFIBUS) ^ CRC16_PROFIBUS.xorout } CrcAlgorithm::Crc16Riello => { Calculator::calculate(CRC16_RIELLO.init_algorithm, buf, &CRC16_RIELLO) ^ CRC16_RIELLO.xorout } CrcAlgorithm::Crc16SpiFujitsu => { Calculator::calculate(CRC16_SPI_FUJITSU.init, buf, &CRC16_SPI_FUJITSU) ^ CRC16_SPI_FUJITSU.xorout } CrcAlgorithm::Crc16T10Dif => { Calculator::calculate(CRC16_T10_DIF.init, buf, &CRC16_T10_DIF) ^ CRC16_T10_DIF.xorout } CrcAlgorithm::Crc16Teledisk => { Calculator::calculate(CRC16_TELEDISK.init, buf, &CRC16_TELEDISK) ^ CRC16_TELEDISK.xorout } CrcAlgorithm::Crc16Tms37157 => { Calculator::calculate(CRC16_TMS37157.init_algorithm, buf, &CRC16_TMS37157) ^ CRC16_TMS37157.xorout } CrcAlgorithm::Crc16Umts => { Calculator::calculate(CRC16_UMTS.init, buf, &CRC16_UMTS) ^ CRC16_UMTS.xorout } CrcAlgorithm::Crc16Usb => { Calculator::calculate(CRC16_USB.init, buf, &CRC16_USB) ^ CRC16_USB.xorout } CrcAlgorithm::Crc16Xmodem => { Calculator::calculate(CRC16_XMODEM.init, buf, &CRC16_XMODEM) ^ CRC16_XMODEM.xorout } CrcAlgorithm::Crc32Aixm => { Calculator::calculate(CRC32_AIXM.init, buf, &CRC32_AIXM) ^ CRC32_AIXM.xorout } CrcAlgorithm::Crc32Autosar => { Calculator::calculate(CRC32_AUTOSAR.init, buf, &CRC32_AUTOSAR) ^ CRC32_AUTOSAR.xorout } CrcAlgorithm::Crc32Base91D => { Calculator::calculate(CRC32_BASE91_D.init, buf, &CRC32_BASE91_D) ^ CRC32_BASE91_D.xorout } CrcAlgorithm::Crc32Bzip2 => { Calculator::calculate(CRC32_BZIP2.init, buf, &CRC32_BZIP2) ^ CRC32_BZIP2.xorout } CrcAlgorithm::Crc32CdRomEdc => { Calculator::calculate(CRC32_CD_ROM_EDC.init, buf, &CRC32_CD_ROM_EDC) ^ CRC32_CD_ROM_EDC.xorout } CrcAlgorithm::Crc32Cksum => { Calculator::calculate(CRC32_CKSUM.init, buf, &CRC32_CKSUM) ^ CRC32_CKSUM.xorout } CrcAlgorithm::Crc32Custom => { panic!("Custom CRC-32 requires parameters via CrcParams::new()") } CrcAlgorithm::Crc32Iscsi => { crc32_iscsi_calculator(CRC32_ISCSI.init, buf, &CRC32_ISCSI) ^ CRC32_ISCSI.xorout } CrcAlgorithm::Crc32IsoHdlc => { crc32_iso_hdlc_calculator(CRC32_ISO_HDLC.init, buf, &CRC32_ISO_HDLC) ^ CRC32_ISO_HDLC.xorout } CrcAlgorithm::Crc32Jamcrc => { Calculator::calculate(CRC32_JAMCRC.init, buf, &CRC32_JAMCRC) ^ CRC32_JAMCRC.xorout } CrcAlgorithm::Crc32Mef => { Calculator::calculate(CRC32_MEF.init, buf, &CRC32_MEF) ^ CRC32_MEF.xorout } CrcAlgorithm::Crc32Mpeg2 => { Calculator::calculate(CRC32_MPEG_2.init, buf, &CRC32_MPEG_2) ^ CRC32_MPEG_2.xorout } CrcAlgorithm::Crc32Xfer => { Calculator::calculate(CRC32_XFER.init, buf, &CRC32_XFER) ^ CRC32_XFER.xorout } CrcAlgorithm::CrcCustom => { panic!("Custom CRC requires parameters via CrcParams::new()") } CrcAlgorithm::Crc64Custom => { panic!("Custom CRC-64 requires parameters via CrcParams::new()") } CrcAlgorithm::Crc64Ecma182 => { Calculator::calculate(CRC64_ECMA_182.init, buf, &CRC64_ECMA_182) ^ CRC64_ECMA_182.xorout } CrcAlgorithm::Crc64GoIso => { Calculator::calculate(CRC64_GO_ISO.init, buf, &CRC64_GO_ISO) ^ CRC64_GO_ISO.xorout } CrcAlgorithm::Crc64Ms => { Calculator::calculate(CRC64_MS.init, buf, &CRC64_MS) ^ CRC64_MS.xorout } CrcAlgorithm::Crc64Nvme => { Calculator::calculate(CRC64_NVME.init, buf, &CRC64_NVME) ^ CRC64_NVME.xorout } CrcAlgorithm::Crc64Redis => { Calculator::calculate(CRC64_REDIS.init, buf, &CRC64_REDIS) ^ CRC64_REDIS.xorout } CrcAlgorithm::Crc64We => { Calculator::calculate(CRC64_WE.init, buf, &CRC64_WE) ^ CRC64_WE.xorout } CrcAlgorithm::Crc64Xz => { Calculator::calculate(CRC64_XZ.init, buf, &CRC64_XZ) ^ CRC64_XZ.xorout } } } /// Computes the CRC checksum for the given data using custom CRC parameters. /// /// # Examples /// /// ```rust /// use crc_fast::{checksum_with_params, CrcParams}; /// /// // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC) /// let custom_params = CrcParams::new( /// "CRC-32/CUSTOM", /// 32, /// 0x04c11db7, /// 0xffffffff, /// true, /// 0xffffffff, /// 0xcbf43926, /// ); /// /// let checksum = checksum_with_params(custom_params, b"123456789"); /// /// assert_eq!(checksum, 0xcbf43926); /// ``` pub fn checksum_with_params(params: CrcParams, buf: &[u8]) -> u64 { let calculator = Calculator::calculate as CalculatorFn; calculator(params.init_algorithm, buf, ¶ms) ^ params.xorout } /// Computes the CRC checksum for the given file using the specified algorithm. /// /// Appears to be much faster (~2X) than using Writer and io::*, at least on Apple M2 Ultra /// /// # Errors /// /// This function will return an error if the file cannot be read. /// /// # Examples /// ### checksum_file ///```rust /// use std::env; /// use crc_fast::{checksum_file, CrcAlgorithm::Crc32IsoHdlc}; /// /// // for example/test purposes only, use your own file path /// let file_path = env::current_dir().expect("missing working dir").join("crc-check.txt"); /// let file_on_disk = file_path.to_str().unwrap(); /// /// let checksum = checksum_file(Crc32IsoHdlc, file_on_disk, None); /// /// assert_eq!(checksum.unwrap(), 0xcbf43926); /// ``` #[cfg(feature = "std")] #[inline(always)] pub fn checksum_file( algorithm: CrcAlgorithm, path: &str, chunk_size: Option, ) -> Result { checksum_file_with_digest(Digest::new(algorithm), path, chunk_size) } /// Computes the CRC checksum for the given file using custom CRC parameters. /// /// Appears to be much faster (~2X) than using Writer and io::*, at least on Apple M2 Ultra /// /// # Errors /// /// This function will return an error if the file cannot be read. /// /// # Examples /// /// ```rust /// use std::env; /// use crc_fast::{checksum_file_with_params, CrcParams}; /// /// // for example/test purposes only, use your own file path /// let file_path = env::current_dir().expect("missing working dir").join("crc-check.txt"); /// let file_on_disk = file_path.to_str().unwrap(); /// /// // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC) /// let custom_params = CrcParams::new( /// "CRC-32/CUSTOM", /// 32, /// 0x04c11db7, /// 0xffffffff, /// true, /// 0xffffffff, /// 0xcbf43926, /// ); /// /// let checksum = checksum_file_with_params(custom_params, file_on_disk, None); /// /// assert_eq!(checksum.unwrap(), 0xcbf43926); /// ``` #[cfg(feature = "std")] pub fn checksum_file_with_params( params: CrcParams, path: &str, chunk_size: Option, ) -> Result { checksum_file_with_digest(Digest::new_with_params(params), path, chunk_size) } /// Computes the CRC checksum for the given file using the specified Digest. /// /// # Errors /// /// This function will return an error if the file cannot be read. #[cfg(feature = "std")] fn checksum_file_with_digest( mut digest: Digest, path: &str, chunk_size: Option, ) -> Result { let mut file = File::open(path)?; // 512KiB KiB was fastest in my benchmarks on an Apple M2 Ultra // // 4KiB ~7GiB/s // 64KiB ~22 GiB/s // 512KiB ~24 GiB/s let chunk_size = chunk_size.unwrap_or(524288); let mut buf = vec![0; chunk_size]; while let Ok(n) = file.read(&mut buf) { if n == 0 { break; } digest.update(&buf[..n]); } Ok(digest.finalize()) } /// Combines two CRC checksums using the specified algorithm. /// /// # Examples ///```rust /// use crc_fast::{checksum, checksum_combine, CrcAlgorithm::Crc32IsoHdlc}; /// /// let checksum_1 = checksum(Crc32IsoHdlc, b"1234"); /// let checksum_2 = checksum(Crc32IsoHdlc, b"56789"); /// let checksum = checksum_combine(Crc32IsoHdlc, checksum_1, checksum_2, 5); /// /// assert_eq!(checksum, 0xcbf43926); /// ``` #[inline(always)] pub fn checksum_combine( algorithm: CrcAlgorithm, checksum1: u64, checksum2: u64, checksum2_len: u64, ) -> u64 { let params = get_calculator_params(algorithm).1; combine::checksums(checksum1, checksum2, checksum2_len, ¶ms) } /// Combines two CRC checksums using custom CRC parameters. /// /// # Examples /// /// ```rust /// use crc_fast::{checksum_with_params, checksum_combine_with_params, CrcParams}; /// /// // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC) /// let custom_params = CrcParams::new( /// "CRC-32/CUSTOM", /// 32, /// 0x04c11db7, /// 0xffffffff, /// true, /// 0xffffffff, /// 0xcbf43926, /// ); /// /// let checksum_1 = checksum_with_params(custom_params, b"1234"); /// let checksum_2 = checksum_with_params(custom_params, b"56789"); /// let checksum = checksum_combine_with_params(custom_params, checksum_1, checksum_2, 5); /// /// assert_eq!(checksum, 0xcbf43926); /// ``` pub fn checksum_combine_with_params( params: CrcParams, checksum1: u64, checksum2: u64, checksum2_len: u64, ) -> u64 { combine::checksums(checksum1, checksum2, checksum2_len, ¶ms) } /// Returns the target used to calculate the CRC checksum for the specified algorithm. /// /// This function provides visibility into the active performance tier being used for CRC calculations. /// The target string follows the format `{architecture}-{intrinsics-family}-{intrinsics-features}`, /// such as `aarch64-aes-sha3` or `x86_64-avx512-vpclmulqdq`. /// /// The performance tier system provides graceful degradation across different hardware capabilities: /// - **AArch64**: `aarch64-aes-sha3` (highest) → `aarch64-aes-pmull` (baseline) /// - **x86_64**: `x86_64-avx512-vpclmulqdq` (highest) → `x86_64-avx512-pclmulqdq` (mid) → `x86_64-sse-pclmulqdq` (baseline) /// - **x86**: `x86-sse-pclmulqdq` (baseline) → `software-fallback-tables` (fallback) /// - **Other architectures**: `software-fallback-tables` /// /// The tier selection is deterministic and consistent across runs on the same hardware, /// combining compile-time and runtime feature detection for safety and optimal performance. /// /// These strings are informational only, not stable, and shouldn't be relied on to match across /// versions. /// /// # Examples ///```rust /// use crc_fast::{get_calculator_target, CrcAlgorithm::Crc32IsoHdlc}; /// /// let target = get_calculator_target(Crc32IsoHdlc); /// println!("Using performance tier: {}", target); /// // Example outputs: /// // "aarch64-aes-sha3" - AArch64 with SHA3 and AES support /// // "x86_64-avx512-vpclmulqdq" - x86_64 with VPCLMULQDQ support /// // "x86_64-sse-pclmulqdq" - x86_64 baseline with SSE4.1 and PCLMULQDQ /// ``` #[cfg(all( feature = "alloc", any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64") ))] pub fn get_calculator_target(_algorithm: CrcAlgorithm) -> String { let arch_ops = get_arch_ops(); arch_ops.get_target_string() } /// Calculates the CRC-32/ISCSI checksum (commonly called "crc32c" in many, but not all, /// implementations). /// /// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iscsi /// /// Nano-optimized to be faster than calling checksum() for this specific algorithm, since it avoids /// the match statement overhead. /// /// # Examples /// /// ```rust /// use crc_fast::crc32_iscsi; /// let checksum = crc32_iscsi(b"123456789"); /// assert_eq!(checksum, 0xe3069283); /// ``` #[inline(always)] pub fn crc32_iscsi(data: &[u8]) -> u32 { crc32_iscsi_calculator(CRC32_ISCSI.init, data, &CRC32_ISCSI) as u32 ^ CRC32_ISCSI.xorout as u32 } /// Calculates the CRC-32/ISO-HDLC checksum (commonly called "crc32" in many, but not all, /// implementations). /// /// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iso-hdlc /// /// Nano-optimized to be faster than calling checksum() for this specific algorithm, since it avoids /// the match statement overhead. /// /// # Examples /// /// ```rust /// use crc_fast::crc32_iso_hdlc; /// let checksum = crc32_iso_hdlc(b"123456789"); /// assert_eq!(checksum, 0xcbf43926); /// ``` #[inline(always)] pub fn crc32_iso_hdlc(data: &[u8]) -> u32 { crc32_iso_hdlc_calculator(CRC32_ISO_HDLC.init, data, &CRC32_ISO_HDLC) as u32 ^ CRC32_ISO_HDLC.xorout as u32 } /// Calculates the CRC-64/NVME checksum. /// /// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-64-nvme /// /// Nano-optimized to be faster than calling checksum() for this specific algorithm, since it avoids /// the match statement overhead. /// /// # Examples /// /// ```rust /// use crc_fast::crc64_nvme; /// let checksum = crc64_nvme(b"123456789"); /// assert_eq!(checksum, 0xae8b14860a799888); /// ``` #[inline(always)] pub fn crc64_nvme(data: &[u8]) -> u64 { Calculator::calculate(CRC64_NVME.init, data, &CRC64_NVME) ^ CRC64_NVME.xorout } /// Fallback version of get_calculator_target for unsupported architectures #[cfg(all( feature = "alloc", not(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")) ))] pub fn get_calculator_target(_algorithm: CrcAlgorithm) -> String { extern crate alloc; use alloc::string::ToString; "software-fallback-tables".to_string() } /// Returns the calculator function and parameters for the specified CRC algorithm. #[inline(always)] #[allow(deprecated)] fn get_calculator_params(algorithm: CrcAlgorithm) -> (CalculatorFn, CrcParams) { match algorithm { CrcAlgorithm::Crc16Arc => (Calculator::calculate as CalculatorFn, CRC16_ARC), CrcAlgorithm::Crc16Cdma2000 => (Calculator::calculate as CalculatorFn, CRC16_CDMA2000), CrcAlgorithm::Crc16Cms => (Calculator::calculate as CalculatorFn, CRC16_CMS), CrcAlgorithm::Crc16Dds110 => (Calculator::calculate as CalculatorFn, CRC16_DDS_110), CrcAlgorithm::Crc16DectR => (Calculator::calculate as CalculatorFn, CRC16_DECT_R), CrcAlgorithm::Crc16DectX => (Calculator::calculate as CalculatorFn, CRC16_DECT_X), CrcAlgorithm::Crc16Dnp => (Calculator::calculate as CalculatorFn, CRC16_DNP), CrcAlgorithm::Crc16En13757 => (Calculator::calculate as CalculatorFn, CRC16_EN_13757), CrcAlgorithm::Crc16Genibus => (Calculator::calculate as CalculatorFn, CRC16_GENIBUS), CrcAlgorithm::Crc16Gsm => (Calculator::calculate as CalculatorFn, CRC16_GSM), CrcAlgorithm::Crc16Ibm3740 => (Calculator::calculate as CalculatorFn, CRC16_IBM_3740), CrcAlgorithm::Crc16IbmSdlc => (Calculator::calculate as CalculatorFn, CRC16_IBM_SDLC), CrcAlgorithm::Crc16IsoIec144433A => ( Calculator::calculate as CalculatorFn, CRC16_ISO_IEC_14443_3_A, ), CrcAlgorithm::Crc16Kermit => (Calculator::calculate as CalculatorFn, CRC16_KERMIT), CrcAlgorithm::Crc16Lj1200 => (Calculator::calculate as CalculatorFn, CRC16_LJ1200), CrcAlgorithm::Crc16M17 => (Calculator::calculate as CalculatorFn, CRC16_M17), CrcAlgorithm::Crc16MaximDow => (Calculator::calculate as CalculatorFn, CRC16_MAXIM_DOW), CrcAlgorithm::Crc16Mcrf4xx => (Calculator::calculate as CalculatorFn, CRC16_MCRF4XX), CrcAlgorithm::Crc16Modbus => (Calculator::calculate as CalculatorFn, CRC16_MODBUS), CrcAlgorithm::Crc16Nrsc5 => (Calculator::calculate as CalculatorFn, CRC16_NRSC_5), CrcAlgorithm::Crc16OpensafetyA => { (Calculator::calculate as CalculatorFn, CRC16_OPENSAFETY_A) } CrcAlgorithm::Crc16OpensafetyB => { (Calculator::calculate as CalculatorFn, CRC16_OPENSAFETY_B) } CrcAlgorithm::Crc16Profibus => (Calculator::calculate as CalculatorFn, CRC16_PROFIBUS), CrcAlgorithm::Crc16Riello => (Calculator::calculate as CalculatorFn, CRC16_RIELLO), CrcAlgorithm::Crc16SpiFujitsu => (Calculator::calculate as CalculatorFn, CRC16_SPI_FUJITSU), CrcAlgorithm::Crc16T10Dif => (Calculator::calculate as CalculatorFn, CRC16_T10_DIF), CrcAlgorithm::Crc16Teledisk => (Calculator::calculate as CalculatorFn, CRC16_TELEDISK), CrcAlgorithm::Crc16Tms37157 => (Calculator::calculate as CalculatorFn, CRC16_TMS37157), CrcAlgorithm::Crc16Umts => (Calculator::calculate as CalculatorFn, CRC16_UMTS), CrcAlgorithm::Crc16Usb => (Calculator::calculate as CalculatorFn, CRC16_USB), CrcAlgorithm::Crc16Xmodem => (Calculator::calculate as CalculatorFn, CRC16_XMODEM), CrcAlgorithm::Crc32Aixm => (Calculator::calculate as CalculatorFn, CRC32_AIXM), CrcAlgorithm::Crc32Autosar => (Calculator::calculate as CalculatorFn, CRC32_AUTOSAR), CrcAlgorithm::Crc32Base91D => (Calculator::calculate as CalculatorFn, CRC32_BASE91_D), CrcAlgorithm::Crc32Bzip2 => (Calculator::calculate as CalculatorFn, CRC32_BZIP2), CrcAlgorithm::Crc32CdRomEdc => (Calculator::calculate as CalculatorFn, CRC32_CD_ROM_EDC), CrcAlgorithm::Crc32Cksum => (Calculator::calculate as CalculatorFn, CRC32_CKSUM), CrcAlgorithm::Crc32Custom => { panic!("Custom CRC-32 requires parameters via CrcParams::new()") } CrcAlgorithm::Crc32Iscsi => (crc32_iscsi_calculator as CalculatorFn, CRC32_ISCSI), CrcAlgorithm::Crc32IsoHdlc => (crc32_iso_hdlc_calculator as CalculatorFn, CRC32_ISO_HDLC), CrcAlgorithm::Crc32Jamcrc => (Calculator::calculate as CalculatorFn, CRC32_JAMCRC), CrcAlgorithm::Crc32Mef => (Calculator::calculate as CalculatorFn, CRC32_MEF), CrcAlgorithm::Crc32Mpeg2 => (Calculator::calculate as CalculatorFn, CRC32_MPEG_2), CrcAlgorithm::Crc32Xfer => (Calculator::calculate as CalculatorFn, CRC32_XFER), CrcAlgorithm::CrcCustom => { panic!("Custom CRC requires parameters via CrcParams::new()") } CrcAlgorithm::Crc64Custom => { panic!("Custom CRC-64 requires parameters via CrcParams::new()") } CrcAlgorithm::Crc64Ecma182 => (Calculator::calculate as CalculatorFn, CRC64_ECMA_182), CrcAlgorithm::Crc64GoIso => (Calculator::calculate as CalculatorFn, CRC64_GO_ISO), CrcAlgorithm::Crc64Ms => (Calculator::calculate as CalculatorFn, CRC64_MS), CrcAlgorithm::Crc64Nvme => (Calculator::calculate as CalculatorFn, CRC64_NVME), CrcAlgorithm::Crc64Redis => (Calculator::calculate as CalculatorFn, CRC64_REDIS), CrcAlgorithm::Crc64We => (Calculator::calculate as CalculatorFn, CRC64_WE), CrcAlgorithm::Crc64Xz => (Calculator::calculate as CalculatorFn, CRC64_XZ), } } /// Calculates the CRC-32/ISCSI (commonly called "crc32c" in many, but not all, implementations) /// checksum. /// /// Because both aarch64 and x86 have native hardware support for CRC-32/ISCSI, we can use /// fusion techniques to accelerate the calculation beyond what SIMD can do alone. #[inline(always)] fn crc32_iscsi_calculator(state: u64, data: &[u8], _params: &CrcParams) -> u64 { #[cfg(all(target_arch = "aarch64", feature = "std"))] { use crate::feature_detection::PerformanceTier; let arch_ops = get_arch_ops(); match arch_ops.get_tier() { PerformanceTier::AArch64AesSha3 | PerformanceTier::AArch64Aes => { return fusion::crc32_iscsi(state as u32, data) as u64; } _ => {} } } #[cfg(all(any(target_arch = "x86_64", target_arch = "x86"), feature = "std"))] { use crate::feature_detection::PerformanceTier; let arch_ops = get_arch_ops(); match arch_ops.get_tier() { PerformanceTier::X86_64Avx512Vpclmulqdq | PerformanceTier::X86_64Avx512Pclmulqdq | PerformanceTier::X86_64SsePclmulqdq | PerformanceTier::X86SsePclmulqdq => { // fusion path requires both pclmulqdq (checked by tier) and sse4.2 (for CRC32 instructions) if is_x86_feature_detected!("sse4.2") { return fusion::crc32_iscsi(state as u32, data) as u64; } } _ => {} } } Calculator::calculate(state, data, _params) } /// Calculates the CRC-32/ISO-HDLC (commonly called "crc32" in many, but not all, implementations) /// checksum. /// /// Because aarch64 has native hardware support for CRC-32/ISO-HDLC, we can use fusion techniques /// to accelerate the calculation beyond what SIMD can do alone. x86 does not have native support, /// so we use the traditional calculation. #[inline(always)] fn crc32_iso_hdlc_calculator(state: u64, data: &[u8], _params: &CrcParams) -> u64 { #[cfg(all(target_arch = "aarch64", feature = "std"))] { use crate::feature_detection::{get_arch_ops, PerformanceTier}; let arch_ops = get_arch_ops(); match arch_ops.get_tier() { PerformanceTier::AArch64AesSha3 | PerformanceTier::AArch64Aes => { return fusion::crc32_iso_hdlc(state as u32, data) as u64; } _ => {} } } Calculator::calculate(state, data, _params) } #[cfg(test)] mod lib { #![allow(unused)] use super::*; use crate::test::consts::{TEST_ALL_CONFIGS, TEST_CHECK_STRING}; use crate::test::enums::AnyCrcTestConfig; use cbindgen::Language::C; use cbindgen::Style::Both; use rand::{rng, Rng}; use std::fs::{read, write}; #[test] fn test_checksum_check() { for config in TEST_ALL_CONFIGS { assert_eq!( checksum(config.get_algorithm(), TEST_CHECK_STRING), config.get_check() ); } } #[test] fn test_checksum_reference() { for config in TEST_ALL_CONFIGS { assert_eq!( checksum(config.get_algorithm(), TEST_CHECK_STRING), config.checksum_with_reference(TEST_CHECK_STRING) ); } } #[test] fn test_checksum_with_custom_params() { crate::cache::clear_cache(); // CRC-32 reflected assert_eq!( checksum_with_params(get_custom_crc32_reflected(), TEST_CHECK_STRING), CRC32_ISCSI.check, ); // CRC-32 forward assert_eq!( checksum_with_params(get_custom_crc32_forward(), TEST_CHECK_STRING), CRC32_BZIP2.check, ); // CRC-64 reflected assert_eq!( checksum_with_params(get_custom_crc64_reflected(), TEST_CHECK_STRING), CRC64_NVME.check, ); // CRC-64 forward assert_eq!( checksum_with_params(get_custom_crc64_forward(), TEST_CHECK_STRING), CRC64_ECMA_182.check, ); } #[test] fn test_get_custom_params() { crate::cache::clear_cache(); assert_eq!( checksum_with_params(get_custom_crc32_reflected(), TEST_CHECK_STRING), CRC32_ISCSI.check, ); assert_eq!( checksum_with_params(get_custom_crc32_forward(), TEST_CHECK_STRING), CRC32_BZIP2.check, ); assert_eq!( checksum_with_params(get_custom_crc64_reflected(), TEST_CHECK_STRING), CRC64_NVME.check, ); assert_eq!( checksum_with_params(get_custom_crc64_forward(), TEST_CHECK_STRING), CRC64_ECMA_182.check, ); } #[test] fn test_get_calculator_target_format() { let target = get_calculator_target(CrcAlgorithm::Crc32IsoHdlc); // Target string should not be empty assert!(!target.is_empty()); // Should follow the expected format with valid architecture prefixes let valid_prefixes = ["aarch64-", "x86_64-", "x86-", "software-"]; assert!( valid_prefixes .iter() .any(|prefix| target.starts_with(prefix)), "Target '{}' should start with a valid architecture prefix", target ); // Should contain intrinsics family and features information let parts: Vec<&str> = target.split('-').collect(); assert!( parts.len() >= 3, "Target '{}' should have at least 3 parts: architecture-family-features", target ); } #[test] fn test_get_calculator_target_consistency() { // Multiple calls should return the same result (deterministic) let target1 = get_calculator_target(CrcAlgorithm::Crc32IsoHdlc); let target2 = get_calculator_target(CrcAlgorithm::Crc32Iscsi); let target3 = get_calculator_target(CrcAlgorithm::Crc64Nvme); assert_eq!( target1, target2, "Target should be consistent across different CRC-32 algorithms" ); assert_eq!( target1, target3, "Target should be consistent across CRC-32 and CRC-64 algorithms" ); } #[test] fn test_get_calculator_target_uses_cached_detection() { // This test verifies that the function uses cached feature detection // by checking that multiple calls are consistent and don't perform // redundant feature detection let target1 = get_calculator_target(CrcAlgorithm::Crc32IsoHdlc); let target2 = get_calculator_target(CrcAlgorithm::Crc32IsoHdlc); assert_eq!( target1, target2, "Cached detection should return identical results" ); } #[test] fn test_digest_updates_check() { for config in TEST_ALL_CONFIGS { check_digest(Digest::new(config.get_algorithm()), config.get_check()); } } #[test] fn test_digest_updates_check_with_custom_params() { crate::cache::clear_cache(); // CRC-32 reflected check_digest( Digest::new_with_params(get_custom_crc32_reflected()), CRC32_ISCSI.check, ); // CRC-32 forward check_digest( Digest::new_with_params(get_custom_crc32_forward()), CRC32_BZIP2.check, ); // CRC-64 reflected check_digest( Digest::new_with_params(get_custom_crc64_reflected()), CRC64_NVME.check, ); // CRC-64 forward check_digest( Digest::new_with_params(get_custom_crc64_forward()), CRC64_ECMA_182.check, ); } fn check_digest(mut digest: Digest, check: u64) { digest.update(b"123"); digest.update(b"456"); digest.update(b"789"); assert_eq!(digest.finalize(), check,); } #[test] fn test_1024_length() { for config in TEST_ALL_CONFIGS { test_length(1024, config); } } /// Skipping for Miri runs due to time constraints, underlying code already covered by other /// tests. #[test] #[cfg_attr(miri, ignore)] fn test_small_all_lengths() { for config in TEST_ALL_CONFIGS { // Test each length from 1 to 255 for len in 1..=255 { test_length(len, config); } } } /// Skipping for Miri runs due to time constraints, underlying code already covered by other /// tests. #[test] #[cfg_attr(miri, ignore)] fn test_medium_lengths() { for config in TEST_ALL_CONFIGS { // Test each length from 256 to 1024, which should fold and include handling remainders for len in 256..=1024 { test_length(len, config); } } } /// Skipping for Miri runs due to time constraints, underlying code already covered by other /// tests. #[test] #[cfg_attr(miri, ignore)] fn test_large_lengths() { for config in TEST_ALL_CONFIGS { // Test 1 MiB just before, at, and just after the folding boundaries for len in 1048575..1048577 { test_length(len, config); } } } fn test_length(length: usize, config: &AnyCrcTestConfig) { let mut data = vec![0u8; length]; rng().fill(&mut data[..]); // Calculate expected CRC using the reference implementation let expected = config.checksum_with_reference(&data); let result = checksum(config.get_algorithm(), &data); assert_eq!( result, expected, "Failed for algorithm: {:?}, length: {}, expected: {:#x}, got: {:#x}", config.get_algorithm(), length, expected, result ); } #[test] fn test_combine() { for config in TEST_ALL_CONFIGS { let algorithm = config.get_algorithm(); let check = config.get_check(); // checksums let checksum1 = checksum(algorithm, "1234".as_ref()); let checksum2 = checksum(algorithm, "56789".as_ref()); // checksum_combine() assert_eq!(checksum_combine(algorithm, checksum1, checksum2, 5), check); // Digest let mut digest1 = Digest::new(algorithm); digest1.update("1234".as_ref()); let mut digest2 = Digest::new(algorithm); digest2.update("56789".as_ref()); digest1.combine(&digest2); assert_eq!(digest1.finalize(), check) } } #[test] fn test_combine_with_custom_params() { crate::cache::clear_cache(); // CRC-32 reflected let crc32_params = get_custom_crc32_reflected(); let checksum1 = checksum_with_params(crc32_params, "1234".as_ref()); let checksum2 = checksum_with_params(crc32_params, "56789".as_ref()); assert_eq!( checksum_combine_with_params(crc32_params, checksum1, checksum2, 5), CRC32_ISCSI.check, ); // CRC-32 forward let crc32_params = get_custom_crc32_forward(); let checksum1 = checksum_with_params(crc32_params, "1234".as_ref()); let checksum2 = checksum_with_params(crc32_params, "56789".as_ref()); assert_eq!( checksum_combine_with_params(crc32_params, checksum1, checksum2, 5), CRC32_BZIP2.check, ); // CRC-64 reflected let crc64_params = get_custom_crc64_reflected(); let checksum1 = checksum_with_params(crc64_params, "1234".as_ref()); let checksum2 = checksum_with_params(crc64_params, "56789".as_ref()); assert_eq!( checksum_combine_with_params(crc64_params, checksum1, checksum2, 5), CRC64_NVME.check, ); // CRC-64 forward let crc64_params = get_custom_crc64_forward(); let checksum1 = checksum_with_params(crc64_params, "1234".as_ref()); let checksum2 = checksum_with_params(crc64_params, "56789".as_ref()); assert_eq!( checksum_combine_with_params(crc64_params, checksum1, checksum2, 5), CRC64_ECMA_182.check, ); } /// Skipping for Miri runs due to isolation constraints, underlying code other than I/O already /// covered by other tests. #[test] #[cfg_attr(miri, ignore)] fn test_checksum_file() { // Create a test file with repeating zeros let test_file_path = "test/test_crc32_hash_file.bin"; let data = vec![0u8; 1024 * 1024]; // 1 MiB of zeros if let Err(e) = write(test_file_path, &data) { eprintln!("Skipping test due to write error: {}", e); return; } for config in TEST_ALL_CONFIGS { let result = checksum_file(config.get_algorithm(), test_file_path, None).unwrap(); assert_eq!(result, config.checksum_with_reference(&data)); } std::fs::remove_file(test_file_path).unwrap(); } /// Skipping for Miri runs due to isolation constraints, underlying code other than I/O already /// covered by other tests. #[test] #[cfg_attr(miri, ignore)] fn test_checksum_file_with_custom_params() { crate::cache::clear_cache(); // Create a test file with repeating zeros let test_file_path = "test/test_crc32_hash_file_custom.bin"; let data = vec![0u8; 1024 * 1024]; // 1 MiB of zeros if let Err(e) = write(test_file_path, &data) { eprintln!("Skipping test due to write error: {}", e); return; } // CRC-32 reflected check_file( get_custom_crc32_reflected(), test_file_path, CRC32_ISCSI.check, ); // CRC-32 forward check_file( get_custom_crc32_forward(), test_file_path, CRC32_BZIP2.check, ); // CRC-64 reflected check_file( get_custom_crc64_reflected(), test_file_path, CRC64_NVME.check, ); // CRC-64 forward check_file( get_custom_crc64_forward(), test_file_path, CRC64_ECMA_182.check, ); std::fs::remove_file(test_file_path).unwrap(); } fn check_file(params: CrcParams, file_path: &str, check: u64) { let result = checksum_file_with_params(params, file_path, None).unwrap(); assert_eq!(result, check); } /// Skipping for Miri runs due to isolation constraints, underlying code other than I/O already /// covered by other tests. #[test] #[cfg_attr(miri, ignore)] fn test_writer() { // Create a test file with repeating zeros let test_file_path = "test/test_crc32_writer_file.bin"; let data = vec![0u8; 1024 * 1024]; // 1 MiB of zeros if let Err(e) = std::fs::write(test_file_path, &data) { eprintln!("Skipping test due to write error: {}", e); return; } for config in TEST_ALL_CONFIGS { let mut digest = Digest::new(config.get_algorithm()); let mut file = File::open(test_file_path).unwrap(); std::io::copy(&mut file, &mut digest).unwrap(); assert_eq!(digest.finalize(), config.checksum_with_reference(&data)); } std::fs::remove_file(test_file_path).unwrap(); } #[test] fn test_digest_reset() { for config in TEST_ALL_CONFIGS { let mut digest = Digest::new(config.get_algorithm()); digest.update(b"42"); digest.reset(); digest.update(TEST_CHECK_STRING); assert_eq!(digest.finalize(), config.get_check()); } } #[test] fn test_digest_finalize_reset() { for config in TEST_ALL_CONFIGS { let check = config.get_check(); let mut digest = Digest::new(config.get_algorithm()); digest.update(TEST_CHECK_STRING); assert_eq!(digest.finalize_reset(), check); digest.update(TEST_CHECK_STRING); assert_eq!(digest.finalize(), check); } } #[test] fn test_digest_finalize_into() { for config in TEST_ALL_CONFIGS { let mut digest = Digest::new(config.get_algorithm()); digest.update(TEST_CHECK_STRING); match digest.params.width { 16 => { let mut output = [0u8; 2]; digest.finalize_into(&mut output).unwrap(); let result = u16::from_be_bytes(output) as u64; assert_eq!(result, config.get_check()); } 32 => { let mut output = [0u8; 4]; digest.finalize_into(&mut output).unwrap(); let result = u32::from_be_bytes(output) as u64; assert_eq!(result, config.get_check()); } 64 => { let mut output = [0u8; 8]; digest.finalize_into(&mut output).unwrap(); let result = u64::from_be_bytes(output); assert_eq!(result, config.get_check()); } _ => panic!("Unsupported CRC width"), } } } #[test] fn test_digest_finalize_into_reset() { for config in TEST_ALL_CONFIGS { let mut digest = Digest::new(config.get_algorithm()); digest.update(TEST_CHECK_STRING); let mut output: Vec = match digest.params.width { 16 => vec![0u8; 2], 32 => vec![0u8; 4], 64 => vec![0u8; 8], _ => panic!("Unsupported CRC width"), }; digest.finalize_into_reset(&mut output).unwrap(); let result = match output.len() { 2 => u16::from_be_bytes(output.try_into().unwrap()) as u64, 4 => u32::from_be_bytes(output.try_into().unwrap()) as u64, 8 => u64::from_be_bytes(output.try_into().unwrap()), _ => panic!("Unsupported CRC width"), }; assert_eq!(result, config.get_check()); digest.update(TEST_CHECK_STRING); assert_eq!(digest.finalize(), config.get_check()); } } /// Tests whether the FFI header is up-to-date #[test] #[cfg_attr(miri, ignore)] fn test_ffi_header() -> Result<(), String> { #[cfg(target_os = "windows")] { // Skip this test on Windows, since CRLF vs LF is a PITA eprintln!("Skipping test on Windows"); return Ok(()); } const HEADER: &str = "libcrc_fast.h"; let crate_dir = std::env::var("CARGO_MANIFEST_DIR").map_err(|error| error.to_string())?; let mut expected = Vec::new(); cbindgen::Builder::new() .with_crate(crate_dir) .with_include_guard("CRC_FAST_H") .with_header("/* crc_fast library C/C++ API - Copyright 2025 Don MacAskill */\n/* This header is auto-generated. Do not edit directly. */\n") // exclude internal implementation functions .exclude_item("crc32_iscsi_impl") .exclude_item("crc32_iso_hdlc_impl") .exclude_item("get_iscsi_target") .exclude_item("get_iso_hdlc_target") .exclude_item("ISO_HDLC_TARGET") .exclude_item("ISCSI_TARGET") .exclude_item("CrcParams") .rename_item("Digest", "CrcFastDigest") .with_style(Both) // generate C header .with_language(C) // with C++ compatibility .with_cpp_compat(true) .generate() .map_err(|error| error.to_string())? .write(&mut expected); // Convert the expected bytes to string for pattern replacement, since cbindgen // generates an annoying amount of empty contiguous newlines let header_content = String::from_utf8(expected).map_err(|error| error.to_string())?; // Replace excessive newlines (3 or more consecutive newlines) with 2 newlines let regex = regex::Regex::new(r"\n{3,}").map_err(|error| error.to_string())?; let cleaned_content = regex.replace_all(&header_content, "\n\n").to_string(); // Convert back to bytes expected = cleaned_content.into_bytes(); let actual = read(HEADER).map_err(|error| error.to_string())?; if expected != actual { write(HEADER, expected).map_err(|error| error.to_string())?; return Err(format!( "{HEADER} is not up-to-date, commit the generated file and try again" )); } Ok(()) } fn get_custom_crc32_reflected() -> CrcParams { CrcParams::new( "Custom CRC-32/ISCSI", 32, CRC32_ISCSI.poly, CRC32_ISCSI.init, CRC32_ISCSI.refin, CRC32_ISCSI.xorout, CRC32_ISCSI.check, ) } fn get_custom_crc32_forward() -> CrcParams { CrcParams::new( "Custom CRC-32/BZIP2", 32, CRC32_BZIP2.poly, CRC32_BZIP2.init, CRC32_BZIP2.refin, CRC32_BZIP2.xorout, CRC32_BZIP2.check, ) } fn get_custom_crc64_reflected() -> CrcParams { CrcParams::new( "Custom CRC-64/NVME", 64, CRC64_NVME.poly, CRC64_NVME.init, CRC64_NVME.refin, CRC64_NVME.xorout, CRC64_NVME.check, ) } fn get_custom_crc64_forward() -> CrcParams { CrcParams::new( "Custom CRC-64/ECMA-182", 64, CRC64_ECMA_182.poly, CRC64_ECMA_182.init, CRC64_ECMA_182.refin, CRC64_ECMA_182.xorout, CRC64_ECMA_182.check, ) } #[test] #[allow(clippy::needless_range_loop)] // Intentionally testing indexed get_key() method fn test_crc_keys_storage_fold_256() { let test_keys = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ]; let storage = CrcKeysStorage::from_keys_fold_256(test_keys); // Test valid key access for i in 0..23 { assert_eq!(storage.get_key(i), test_keys[i]); } // Test out-of-bounds access returns 0 assert_eq!(storage.get_key(23), 0); assert_eq!(storage.get_key(24), 0); assert_eq!(storage.get_key(100), 0); // Test key count assert_eq!(storage.key_count(), 23); } #[test] #[allow(clippy::needless_range_loop)] // Intentionally testing indexed get_key() method fn test_crc_keys_storage_future_test() { let test_keys = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, ]; let storage = CrcKeysStorage::from_keys_fold_future_test(test_keys); // Test valid key access for i in 0..25 { assert_eq!(storage.get_key(i), test_keys[i]); } // Test out-of-bounds access returns 0 assert_eq!(storage.get_key(25), 0); assert_eq!(storage.get_key(26), 0); assert_eq!(storage.get_key(100), 0); // Test key count assert_eq!(storage.key_count(), 25); } #[test] #[allow(clippy::needless_range_loop)] // Intentionally testing indexed get_key() and get_key_checked() methods fn test_crc_params_safe_accessors() { // Create a test CrcParams with known keys let test_keys = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ]; let params = CrcParams { algorithm: CrcAlgorithm::Crc32IsoHdlc, name: "test", width: 32, poly: 0x04C11DB7, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0xCBF43926, keys: CrcKeysStorage::from_keys_fold_256(test_keys), }; // Test valid key access for i in 0..23 { assert_eq!(params.get_key(i), test_keys[i]); assert_eq!(params.get_key_checked(i), Some(test_keys[i])); } // Test out-of-bounds access assert_eq!(params.get_key(23), 0); assert_eq!(params.get_key(24), 0); assert_eq!(params.get_key(100), 0); assert_eq!(params.get_key_checked(23), None); assert_eq!(params.get_key_checked(24), None); assert_eq!(params.get_key_checked(100), None); // Test key count assert_eq!(params.key_count(), 23); } #[test] fn test_crc_keys_storage_const_constructors() { // Test that const constructors work in const context const TEST_KEYS_23: [u64; 23] = [1; 23]; const TEST_KEYS_25: [u64; 25] = [2; 25]; const STORAGE_256: CrcKeysStorage = CrcKeysStorage::from_keys_fold_256(TEST_KEYS_23); const STORAGE_FUTURE: CrcKeysStorage = CrcKeysStorage::from_keys_fold_future_test(TEST_KEYS_25); // Verify the const constructors work correctly assert_eq!(STORAGE_256.get_key(0), 1); assert_eq!(STORAGE_256.key_count(), 23); assert_eq!(STORAGE_FUTURE.get_key(0), 2); assert_eq!(STORAGE_FUTURE.key_count(), 25); } #[test] fn test_crc_keys_storage_bounds_safety() { let storage_256 = CrcKeysStorage::from_keys_fold_256([42; 23]); let storage_future = CrcKeysStorage::from_keys_fold_future_test([84; 25]); // Test edge cases for bounds checking assert_eq!(storage_256.get_key(22), 42); // Last valid index assert_eq!(storage_256.get_key(23), 0); // First invalid index assert_eq!(storage_future.get_key(24), 84); // Last valid index assert_eq!(storage_future.get_key(25), 0); // First invalid index // Test very large indices assert_eq!(storage_256.get_key(usize::MAX), 0); assert_eq!(storage_future.get_key(usize::MAX), 0); } } crc-fast-1.10.0/src/structs.rs000064400000000000000000000117541046102023000142610ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. #![allow(dead_code)] use crate::traits::{CrcCalculator, CrcWidth}; use crate::{arch, cache, CrcAlgorithm, CrcParams}; /// CRC algorithm parameters matching the CRC catalogue specification. /// /// This struct describes a CRC algorithm using the fields specified by the /// [Catalogue of parametrised CRC algorithms](https://reveng.sourceforge.io/crc-catalogue/all.htm). #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct Algorithm { /// The number of bit cells in the linear feedback shift register; the degree of the generator /// polynomial, minus one. pub width: u8, /// The generator polynomial that sets the feedback tap positions of the shift register. pub poly: W, /// The settings of the bit cells at the start of each calculation, before reading the first /// message bit. pub init: W, /// If `true`, characters are read bit-by-bit, least significant bit (LSB) first; /// if `false`, most significant bit (MSB) first. pub refin: bool, /// If `true`, the contents of the register after reading the last message bit are reflected /// before presentation; if `false`, they are unreflected. pub refout: bool, /// The XOR value applied to the contents of the register after the last message bit has been /// read and after the optional reflection. pub xorout: W, /// The contents of the register after initialising, reading the UTF-8 string `"123456789"`, /// optionally reflecting, and applying the final XOR. pub check: W, /// The contents of the register after initialising, reading an error-free codeword and /// optionally reflecting the register, but not applying the final XOR. pub residue: W, } /// CRC-16 width implementation #[derive(Clone, Copy)] pub struct Width16; impl CrcWidth for Width16 { const WIDTH: u32 = 16; type Value = u16; } /// CRC-32 width implementation #[derive(Clone, Copy)] pub struct Width32; impl CrcWidth for Width32 { const WIDTH: u32 = 32; type Value = u32; } /// CRC-64 width implementation #[derive(Clone, Copy)] pub struct Width64; impl CrcWidth for Width64 { const WIDTH: u32 = 64; type Value = u64; } /// CRC State wrapper to manage the SIMD operations and reflection mode #[derive(Debug, Clone, Copy)] pub struct CrcState { pub value: T, pub reflected: bool, } pub(crate) struct Calculator {} impl CrcCalculator for Calculator { #[inline(always)] fn calculate(state: u64, data: &[u8], params: &CrcParams) -> u64 { unsafe { arch::update(state, data, params) } } } impl CrcParams { /// Creates custom CRC parameters for a given set of Rocksoft CRC parameters. /// /// Uses an internal cache to avoid regenerating folding keys for identical parameter sets. /// The first call with a given set of parameters will generate and cache the keys, while /// subsequent calls with the same parameters will use the cached keys for optimal performance. /// /// Does not support mis-matched refin/refout parameters, so both must be true or both false. /// /// Rocksoft parameters for lots of variants: https://reveng.sourceforge.io/crc-catalogue/all.htm pub fn new( name: &'static str, width: u8, poly: u64, init: u64, reflected: bool, xorout: u64, check: u64, ) -> Self { let keys_array = cache::get_or_generate_keys(width, poly, reflected); let keys = crate::CrcKeysStorage::from_keys_fold_256(keys_array); // Validate width is supported if width != 16 && width != 32 && width != 64 { panic!("Unsupported width: {width}"); } // For reflected CRC-16, bit-reverse the init value for the SIMD algorithm let init_algorithm = if width == 16 && reflected { (init as u16).reverse_bits() as u64 } else { init }; Self { algorithm: CrcAlgorithm::CrcCustom, name, width, poly, init, init_algorithm, refin: reflected, refout: reflected, xorout, check, keys, } } /// Gets a key at the specified index, returning 0 if out of bounds. /// This provides safe access regardless of internal key storage format. #[inline(always)] pub fn get_key(&self, index: usize) -> u64 { self.keys.get_key(index) } /// Gets a key at the specified index, returning None if out of bounds. /// This provides optional key access for cases where bounds checking is needed. #[inline(always)] pub fn get_key_checked(&self, index: usize) -> Option { if index < self.keys.key_count() { Some(self.keys.get_key(index)) } else { None } } /// Returns the number of keys available in this CrcParams instance. #[inline(always)] pub fn key_count(&self) -> usize { self.keys.key_count() } } crc-fast-1.10.0/src/tables.rs000064400000000000000000124452731046102023000140360ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! Pre-generated 16-lane lookup tables for CRC calculations. //! //! This file is auto-generated by `cargo run --bin generate_tables`. //! Do not edit manually. #![allow(dead_code)] pub mod crc16 { //! CRC-16 lookup tables pub static CRC16_ARC_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040, ], [ 0x0000, 0x9001, 0x6001, 0xf000, 0xc002, 0x5003, 0xa003, 0x3002, 0xc007, 0x5006, 0xa006, 0x3007, 0x0005, 0x9004, 0x6004, 0xf005, 0xc00d, 0x500c, 0xa00c, 0x300d, 0x000f, 0x900e, 0x600e, 0xf00f, 0x000a, 0x900b, 0x600b, 0xf00a, 0xc008, 0x5009, 0xa009, 0x3008, 0xc019, 0x5018, 0xa018, 0x3019, 0x001b, 0x901a, 0x601a, 0xf01b, 0x001e, 0x901f, 0x601f, 0xf01e, 0xc01c, 0x501d, 0xa01d, 0x301c, 0x0014, 0x9015, 0x6015, 0xf014, 0xc016, 0x5017, 0xa017, 0x3016, 0xc013, 0x5012, 0xa012, 0x3013, 0x0011, 0x9010, 0x6010, 0xf011, 0xc031, 0x5030, 0xa030, 0x3031, 0x0033, 0x9032, 0x6032, 0xf033, 0x0036, 0x9037, 0x6037, 0xf036, 0xc034, 0x5035, 0xa035, 0x3034, 0x003c, 0x903d, 0x603d, 0xf03c, 0xc03e, 0x503f, 0xa03f, 0x303e, 0xc03b, 0x503a, 0xa03a, 0x303b, 0x0039, 0x9038, 0x6038, 0xf039, 0x0028, 0x9029, 0x6029, 0xf028, 0xc02a, 0x502b, 0xa02b, 0x302a, 0xc02f, 0x502e, 0xa02e, 0x302f, 0x002d, 0x902c, 0x602c, 0xf02d, 0xc025, 0x5024, 0xa024, 0x3025, 0x0027, 0x9026, 0x6026, 0xf027, 0x0022, 0x9023, 0x6023, 0xf022, 0xc020, 0x5021, 0xa021, 0x3020, 0xc061, 0x5060, 0xa060, 0x3061, 0x0063, 0x9062, 0x6062, 0xf063, 0x0066, 0x9067, 0x6067, 0xf066, 0xc064, 0x5065, 0xa065, 0x3064, 0x006c, 0x906d, 0x606d, 0xf06c, 0xc06e, 0x506f, 0xa06f, 0x306e, 0xc06b, 0x506a, 0xa06a, 0x306b, 0x0069, 0x9068, 0x6068, 0xf069, 0x0078, 0x9079, 0x6079, 0xf078, 0xc07a, 0x507b, 0xa07b, 0x307a, 0xc07f, 0x507e, 0xa07e, 0x307f, 0x007d, 0x907c, 0x607c, 0xf07d, 0xc075, 0x5074, 0xa074, 0x3075, 0x0077, 0x9076, 0x6076, 0xf077, 0x0072, 0x9073, 0x6073, 0xf072, 0xc070, 0x5071, 0xa071, 0x3070, 0x0050, 0x9051, 0x6051, 0xf050, 0xc052, 0x5053, 0xa053, 0x3052, 0xc057, 0x5056, 0xa056, 0x3057, 0x0055, 0x9054, 0x6054, 0xf055, 0xc05d, 0x505c, 0xa05c, 0x305d, 0x005f, 0x905e, 0x605e, 0xf05f, 0x005a, 0x905b, 0x605b, 0xf05a, 0xc058, 0x5059, 0xa059, 0x3058, 0xc049, 0x5048, 0xa048, 0x3049, 0x004b, 0x904a, 0x604a, 0xf04b, 0x004e, 0x904f, 0x604f, 0xf04e, 0xc04c, 0x504d, 0xa04d, 0x304c, 0x0044, 0x9045, 0x6045, 0xf044, 0xc046, 0x5047, 0xa047, 0x3046, 0xc043, 0x5042, 0xa042, 0x3043, 0x0041, 0x9040, 0x6040, 0xf041, ], [ 0x0000, 0xc051, 0xc0a1, 0x00f0, 0xc141, 0x0110, 0x01e0, 0xc1b1, 0xc281, 0x02d0, 0x0220, 0xc271, 0x03c0, 0xc391, 0xc361, 0x0330, 0xc501, 0x0550, 0x05a0, 0xc5f1, 0x0440, 0xc411, 0xc4e1, 0x04b0, 0x0780, 0xc7d1, 0xc721, 0x0770, 0xc6c1, 0x0690, 0x0660, 0xc631, 0xca01, 0x0a50, 0x0aa0, 0xcaf1, 0x0b40, 0xcb11, 0xcbe1, 0x0bb0, 0x0880, 0xc8d1, 0xc821, 0x0870, 0xc9c1, 0x0990, 0x0960, 0xc931, 0x0f00, 0xcf51, 0xcfa1, 0x0ff0, 0xce41, 0x0e10, 0x0ee0, 0xceb1, 0xcd81, 0x0dd0, 0x0d20, 0xcd71, 0x0cc0, 0xcc91, 0xcc61, 0x0c30, 0xd401, 0x1450, 0x14a0, 0xd4f1, 0x1540, 0xd511, 0xd5e1, 0x15b0, 0x1680, 0xd6d1, 0xd621, 0x1670, 0xd7c1, 0x1790, 0x1760, 0xd731, 0x1100, 0xd151, 0xd1a1, 0x11f0, 0xd041, 0x1010, 0x10e0, 0xd0b1, 0xd381, 0x13d0, 0x1320, 0xd371, 0x12c0, 0xd291, 0xd261, 0x1230, 0x1e00, 0xde51, 0xdea1, 0x1ef0, 0xdf41, 0x1f10, 0x1fe0, 0xdfb1, 0xdc81, 0x1cd0, 0x1c20, 0xdc71, 0x1dc0, 0xdd91, 0xdd61, 0x1d30, 0xdb01, 0x1b50, 0x1ba0, 0xdbf1, 0x1a40, 0xda11, 0xdae1, 0x1ab0, 0x1980, 0xd9d1, 0xd921, 0x1970, 0xd8c1, 0x1890, 0x1860, 0xd831, 0xe801, 0x2850, 0x28a0, 0xe8f1, 0x2940, 0xe911, 0xe9e1, 0x29b0, 0x2a80, 0xead1, 0xea21, 0x2a70, 0xebc1, 0x2b90, 0x2b60, 0xeb31, 0x2d00, 0xed51, 0xeda1, 0x2df0, 0xec41, 0x2c10, 0x2ce0, 0xecb1, 0xef81, 0x2fd0, 0x2f20, 0xef71, 0x2ec0, 0xee91, 0xee61, 0x2e30, 0x2200, 0xe251, 0xe2a1, 0x22f0, 0xe341, 0x2310, 0x23e0, 0xe3b1, 0xe081, 0x20d0, 0x2020, 0xe071, 0x21c0, 0xe191, 0xe161, 0x2130, 0xe701, 0x2750, 0x27a0, 0xe7f1, 0x2640, 0xe611, 0xe6e1, 0x26b0, 0x2580, 0xe5d1, 0xe521, 0x2570, 0xe4c1, 0x2490, 0x2460, 0xe431, 0x3c00, 0xfc51, 0xfca1, 0x3cf0, 0xfd41, 0x3d10, 0x3de0, 0xfdb1, 0xfe81, 0x3ed0, 0x3e20, 0xfe71, 0x3fc0, 0xff91, 0xff61, 0x3f30, 0xf901, 0x3950, 0x39a0, 0xf9f1, 0x3840, 0xf811, 0xf8e1, 0x38b0, 0x3b80, 0xfbd1, 0xfb21, 0x3b70, 0xfac1, 0x3a90, 0x3a60, 0xfa31, 0xf601, 0x3650, 0x36a0, 0xf6f1, 0x3740, 0xf711, 0xf7e1, 0x37b0, 0x3480, 0xf4d1, 0xf421, 0x3470, 0xf5c1, 0x3590, 0x3560, 0xf531, 0x3300, 0xf351, 0xf3a1, 0x33f0, 0xf241, 0x3210, 0x32e0, 0xf2b1, 0xf181, 0x31d0, 0x3120, 0xf171, 0x30c0, 0xf091, 0xf061, 0x3030, ], [ 0x0000, 0xfc01, 0xb801, 0x4400, 0x3001, 0xcc00, 0x8800, 0x7401, 0x6002, 0x9c03, 0xd803, 0x2402, 0x5003, 0xac02, 0xe802, 0x1403, 0xc004, 0x3c05, 0x7805, 0x8404, 0xf005, 0x0c04, 0x4804, 0xb405, 0xa006, 0x5c07, 0x1807, 0xe406, 0x9007, 0x6c06, 0x2806, 0xd407, 0xc00b, 0x3c0a, 0x780a, 0x840b, 0xf00a, 0x0c0b, 0x480b, 0xb40a, 0xa009, 0x5c08, 0x1808, 0xe409, 0x9008, 0x6c09, 0x2809, 0xd408, 0x000f, 0xfc0e, 0xb80e, 0x440f, 0x300e, 0xcc0f, 0x880f, 0x740e, 0x600d, 0x9c0c, 0xd80c, 0x240d, 0x500c, 0xac0d, 0xe80d, 0x140c, 0xc015, 0x3c14, 0x7814, 0x8415, 0xf014, 0x0c15, 0x4815, 0xb414, 0xa017, 0x5c16, 0x1816, 0xe417, 0x9016, 0x6c17, 0x2817, 0xd416, 0x0011, 0xfc10, 0xb810, 0x4411, 0x3010, 0xcc11, 0x8811, 0x7410, 0x6013, 0x9c12, 0xd812, 0x2413, 0x5012, 0xac13, 0xe813, 0x1412, 0x001e, 0xfc1f, 0xb81f, 0x441e, 0x301f, 0xcc1e, 0x881e, 0x741f, 0x601c, 0x9c1d, 0xd81d, 0x241c, 0x501d, 0xac1c, 0xe81c, 0x141d, 0xc01a, 0x3c1b, 0x781b, 0x841a, 0xf01b, 0x0c1a, 0x481a, 0xb41b, 0xa018, 0x5c19, 0x1819, 0xe418, 0x9019, 0x6c18, 0x2818, 0xd419, 0xc029, 0x3c28, 0x7828, 0x8429, 0xf028, 0x0c29, 0x4829, 0xb428, 0xa02b, 0x5c2a, 0x182a, 0xe42b, 0x902a, 0x6c2b, 0x282b, 0xd42a, 0x002d, 0xfc2c, 0xb82c, 0x442d, 0x302c, 0xcc2d, 0x882d, 0x742c, 0x602f, 0x9c2e, 0xd82e, 0x242f, 0x502e, 0xac2f, 0xe82f, 0x142e, 0x0022, 0xfc23, 0xb823, 0x4422, 0x3023, 0xcc22, 0x8822, 0x7423, 0x6020, 0x9c21, 0xd821, 0x2420, 0x5021, 0xac20, 0xe820, 0x1421, 0xc026, 0x3c27, 0x7827, 0x8426, 0xf027, 0x0c26, 0x4826, 0xb427, 0xa024, 0x5c25, 0x1825, 0xe424, 0x9025, 0x6c24, 0x2824, 0xd425, 0x003c, 0xfc3d, 0xb83d, 0x443c, 0x303d, 0xcc3c, 0x883c, 0x743d, 0x603e, 0x9c3f, 0xd83f, 0x243e, 0x503f, 0xac3e, 0xe83e, 0x143f, 0xc038, 0x3c39, 0x7839, 0x8438, 0xf039, 0x0c38, 0x4838, 0xb439, 0xa03a, 0x5c3b, 0x183b, 0xe43a, 0x903b, 0x6c3a, 0x283a, 0xd43b, 0xc037, 0x3c36, 0x7836, 0x8437, 0xf036, 0x0c37, 0x4837, 0xb436, 0xa035, 0x5c34, 0x1834, 0xe435, 0x9034, 0x6c35, 0x2835, 0xd434, 0x0033, 0xfc32, 0xb832, 0x4433, 0x3032, 0xcc33, 0x8833, 0x7432, 0x6031, 0x9c30, 0xd830, 0x2431, 0x5030, 0xac31, 0xe831, 0x1430, ], [ 0x0000, 0xc03d, 0xc079, 0x0044, 0xc0f1, 0x00cc, 0x0088, 0xc0b5, 0xc1e1, 0x01dc, 0x0198, 0xc1a5, 0x0110, 0xc12d, 0xc169, 0x0154, 0xc3c1, 0x03fc, 0x03b8, 0xc385, 0x0330, 0xc30d, 0xc349, 0x0374, 0x0220, 0xc21d, 0xc259, 0x0264, 0xc2d1, 0x02ec, 0x02a8, 0xc295, 0xc781, 0x07bc, 0x07f8, 0xc7c5, 0x0770, 0xc74d, 0xc709, 0x0734, 0x0660, 0xc65d, 0xc619, 0x0624, 0xc691, 0x06ac, 0x06e8, 0xc6d5, 0x0440, 0xc47d, 0xc439, 0x0404, 0xc4b1, 0x048c, 0x04c8, 0xc4f5, 0xc5a1, 0x059c, 0x05d8, 0xc5e5, 0x0550, 0xc56d, 0xc529, 0x0514, 0xcf01, 0x0f3c, 0x0f78, 0xcf45, 0x0ff0, 0xcfcd, 0xcf89, 0x0fb4, 0x0ee0, 0xcedd, 0xce99, 0x0ea4, 0xce11, 0x0e2c, 0x0e68, 0xce55, 0x0cc0, 0xccfd, 0xccb9, 0x0c84, 0xcc31, 0x0c0c, 0x0c48, 0xcc75, 0xcd21, 0x0d1c, 0x0d58, 0xcd65, 0x0dd0, 0xcded, 0xcda9, 0x0d94, 0x0880, 0xc8bd, 0xc8f9, 0x08c4, 0xc871, 0x084c, 0x0808, 0xc835, 0xc961, 0x095c, 0x0918, 0xc925, 0x0990, 0xc9ad, 0xc9e9, 0x09d4, 0xcb41, 0x0b7c, 0x0b38, 0xcb05, 0x0bb0, 0xcb8d, 0xcbc9, 0x0bf4, 0x0aa0, 0xca9d, 0xcad9, 0x0ae4, 0xca51, 0x0a6c, 0x0a28, 0xca15, 0xde01, 0x1e3c, 0x1e78, 0xde45, 0x1ef0, 0xdecd, 0xde89, 0x1eb4, 0x1fe0, 0xdfdd, 0xdf99, 0x1fa4, 0xdf11, 0x1f2c, 0x1f68, 0xdf55, 0x1dc0, 0xddfd, 0xddb9, 0x1d84, 0xdd31, 0x1d0c, 0x1d48, 0xdd75, 0xdc21, 0x1c1c, 0x1c58, 0xdc65, 0x1cd0, 0xdced, 0xdca9, 0x1c94, 0x1980, 0xd9bd, 0xd9f9, 0x19c4, 0xd971, 0x194c, 0x1908, 0xd935, 0xd861, 0x185c, 0x1818, 0xd825, 0x1890, 0xd8ad, 0xd8e9, 0x18d4, 0xda41, 0x1a7c, 0x1a38, 0xda05, 0x1ab0, 0xda8d, 0xdac9, 0x1af4, 0x1ba0, 0xdb9d, 0xdbd9, 0x1be4, 0xdb51, 0x1b6c, 0x1b28, 0xdb15, 0x1100, 0xd13d, 0xd179, 0x1144, 0xd1f1, 0x11cc, 0x1188, 0xd1b5, 0xd0e1, 0x10dc, 0x1098, 0xd0a5, 0x1010, 0xd02d, 0xd069, 0x1054, 0xd2c1, 0x12fc, 0x12b8, 0xd285, 0x1230, 0xd20d, 0xd249, 0x1274, 0x1320, 0xd31d, 0xd359, 0x1364, 0xd3d1, 0x13ec, 0x13a8, 0xd395, 0xd681, 0x16bc, 0x16f8, 0xd6c5, 0x1670, 0xd64d, 0xd609, 0x1634, 0x1760, 0xd75d, 0xd719, 0x1724, 0xd791, 0x17ac, 0x17e8, 0xd7d5, 0x1540, 0xd57d, 0xd539, 0x1504, 0xd5b1, 0x158c, 0x15c8, 0xd5f5, 0xd4a1, 0x149c, 0x14d8, 0xd4e5, 0x1450, 0xd46d, 0xd429, 0x1414, ], [ 0x0000, 0xd101, 0xe201, 0x3300, 0x8401, 0x5500, 0x6600, 0xb701, 0x4801, 0x9900, 0xaa00, 0x7b01, 0xcc00, 0x1d01, 0x2e01, 0xff00, 0x9002, 0x4103, 0x7203, 0xa302, 0x1403, 0xc502, 0xf602, 0x2703, 0xd803, 0x0902, 0x3a02, 0xeb03, 0x5c02, 0x8d03, 0xbe03, 0x6f02, 0x6007, 0xb106, 0x8206, 0x5307, 0xe406, 0x3507, 0x0607, 0xd706, 0x2806, 0xf907, 0xca07, 0x1b06, 0xac07, 0x7d06, 0x4e06, 0x9f07, 0xf005, 0x2104, 0x1204, 0xc305, 0x7404, 0xa505, 0x9605, 0x4704, 0xb804, 0x6905, 0x5a05, 0x8b04, 0x3c05, 0xed04, 0xde04, 0x0f05, 0xc00e, 0x110f, 0x220f, 0xf30e, 0x440f, 0x950e, 0xa60e, 0x770f, 0x880f, 0x590e, 0x6a0e, 0xbb0f, 0x0c0e, 0xdd0f, 0xee0f, 0x3f0e, 0x500c, 0x810d, 0xb20d, 0x630c, 0xd40d, 0x050c, 0x360c, 0xe70d, 0x180d, 0xc90c, 0xfa0c, 0x2b0d, 0x9c0c, 0x4d0d, 0x7e0d, 0xaf0c, 0xa009, 0x7108, 0x4208, 0x9309, 0x2408, 0xf509, 0xc609, 0x1708, 0xe808, 0x3909, 0x0a09, 0xdb08, 0x6c09, 0xbd08, 0x8e08, 0x5f09, 0x300b, 0xe10a, 0xd20a, 0x030b, 0xb40a, 0x650b, 0x560b, 0x870a, 0x780a, 0xa90b, 0x9a0b, 0x4b0a, 0xfc0b, 0x2d0a, 0x1e0a, 0xcf0b, 0xc01f, 0x111e, 0x221e, 0xf31f, 0x441e, 0x951f, 0xa61f, 0x771e, 0x881e, 0x591f, 0x6a1f, 0xbb1e, 0x0c1f, 0xdd1e, 0xee1e, 0x3f1f, 0x501d, 0x811c, 0xb21c, 0x631d, 0xd41c, 0x051d, 0x361d, 0xe71c, 0x181c, 0xc91d, 0xfa1d, 0x2b1c, 0x9c1d, 0x4d1c, 0x7e1c, 0xaf1d, 0xa018, 0x7119, 0x4219, 0x9318, 0x2419, 0xf518, 0xc618, 0x1719, 0xe819, 0x3918, 0x0a18, 0xdb19, 0x6c18, 0xbd19, 0x8e19, 0x5f18, 0x301a, 0xe11b, 0xd21b, 0x031a, 0xb41b, 0x651a, 0x561a, 0x871b, 0x781b, 0xa91a, 0x9a1a, 0x4b1b, 0xfc1a, 0x2d1b, 0x1e1b, 0xcf1a, 0x0011, 0xd110, 0xe210, 0x3311, 0x8410, 0x5511, 0x6611, 0xb710, 0x4810, 0x9911, 0xaa11, 0x7b10, 0xcc11, 0x1d10, 0x2e10, 0xff11, 0x9013, 0x4112, 0x7212, 0xa313, 0x1412, 0xc513, 0xf613, 0x2712, 0xd812, 0x0913, 0x3a13, 0xeb12, 0x5c13, 0x8d12, 0xbe12, 0x6f13, 0x6016, 0xb117, 0x8217, 0x5316, 0xe417, 0x3516, 0x0616, 0xd717, 0x2817, 0xf916, 0xca16, 0x1b17, 0xac16, 0x7d17, 0x4e17, 0x9f16, 0xf014, 0x2115, 0x1215, 0xc314, 0x7415, 0xa514, 0x9614, 0x4715, 0xb815, 0x6914, 0x5a14, 0x8b15, 0x3c14, 0xed15, 0xde15, 0x0f14, ], [ 0x0000, 0xc010, 0xc023, 0x0033, 0xc045, 0x0055, 0x0066, 0xc076, 0xc089, 0x0099, 0x00aa, 0xc0ba, 0x00cc, 0xc0dc, 0xc0ef, 0x00ff, 0xc111, 0x0101, 0x0132, 0xc122, 0x0154, 0xc144, 0xc177, 0x0167, 0x0198, 0xc188, 0xc1bb, 0x01ab, 0xc1dd, 0x01cd, 0x01fe, 0xc1ee, 0xc221, 0x0231, 0x0202, 0xc212, 0x0264, 0xc274, 0xc247, 0x0257, 0x02a8, 0xc2b8, 0xc28b, 0x029b, 0xc2ed, 0x02fd, 0x02ce, 0xc2de, 0x0330, 0xc320, 0xc313, 0x0303, 0xc375, 0x0365, 0x0356, 0xc346, 0xc3b9, 0x03a9, 0x039a, 0xc38a, 0x03fc, 0xc3ec, 0xc3df, 0x03cf, 0xc441, 0x0451, 0x0462, 0xc472, 0x0404, 0xc414, 0xc427, 0x0437, 0x04c8, 0xc4d8, 0xc4eb, 0x04fb, 0xc48d, 0x049d, 0x04ae, 0xc4be, 0x0550, 0xc540, 0xc573, 0x0563, 0xc515, 0x0505, 0x0536, 0xc526, 0xc5d9, 0x05c9, 0x05fa, 0xc5ea, 0x059c, 0xc58c, 0xc5bf, 0x05af, 0x0660, 0xc670, 0xc643, 0x0653, 0xc625, 0x0635, 0x0606, 0xc616, 0xc6e9, 0x06f9, 0x06ca, 0xc6da, 0x06ac, 0xc6bc, 0xc68f, 0x069f, 0xc771, 0x0761, 0x0752, 0xc742, 0x0734, 0xc724, 0xc717, 0x0707, 0x07f8, 0xc7e8, 0xc7db, 0x07cb, 0xc7bd, 0x07ad, 0x079e, 0xc78e, 0xc881, 0x0891, 0x08a2, 0xc8b2, 0x08c4, 0xc8d4, 0xc8e7, 0x08f7, 0x0808, 0xc818, 0xc82b, 0x083b, 0xc84d, 0x085d, 0x086e, 0xc87e, 0x0990, 0xc980, 0xc9b3, 0x09a3, 0xc9d5, 0x09c5, 0x09f6, 0xc9e6, 0xc919, 0x0909, 0x093a, 0xc92a, 0x095c, 0xc94c, 0xc97f, 0x096f, 0x0aa0, 0xcab0, 0xca83, 0x0a93, 0xcae5, 0x0af5, 0x0ac6, 0xcad6, 0xca29, 0x0a39, 0x0a0a, 0xca1a, 0x0a6c, 0xca7c, 0xca4f, 0x0a5f, 0xcbb1, 0x0ba1, 0x0b92, 0xcb82, 0x0bf4, 0xcbe4, 0xcbd7, 0x0bc7, 0x0b38, 0xcb28, 0xcb1b, 0x0b0b, 0xcb7d, 0x0b6d, 0x0b5e, 0xcb4e, 0x0cc0, 0xccd0, 0xcce3, 0x0cf3, 0xcc85, 0x0c95, 0x0ca6, 0xccb6, 0xcc49, 0x0c59, 0x0c6a, 0xcc7a, 0x0c0c, 0xcc1c, 0xcc2f, 0x0c3f, 0xcdd1, 0x0dc1, 0x0df2, 0xcde2, 0x0d94, 0xcd84, 0xcdb7, 0x0da7, 0x0d58, 0xcd48, 0xcd7b, 0x0d6b, 0xcd1d, 0x0d0d, 0x0d3e, 0xcd2e, 0xcee1, 0x0ef1, 0x0ec2, 0xced2, 0x0ea4, 0xceb4, 0xce87, 0x0e97, 0x0e68, 0xce78, 0xce4b, 0x0e5b, 0xce2d, 0x0e3d, 0x0e0e, 0xce1e, 0x0ff0, 0xcfe0, 0xcfd3, 0x0fc3, 0xcfb5, 0x0fa5, 0x0f96, 0xcf86, 0xcf79, 0x0f69, 0x0f5a, 0xcf4a, 0x0f3c, 0xcf2c, 0xcf1f, 0x0f0f, ], [ 0x0000, 0xccc1, 0xd981, 0x1540, 0xf301, 0x3fc0, 0x2a80, 0xe641, 0xa601, 0x6ac0, 0x7f80, 0xb341, 0x5500, 0x99c1, 0x8c81, 0x4040, 0x0c01, 0xc0c0, 0xd580, 0x1941, 0xff00, 0x33c1, 0x2681, 0xea40, 0xaa00, 0x66c1, 0x7381, 0xbf40, 0x5901, 0x95c0, 0x8080, 0x4c41, 0x1802, 0xd4c3, 0xc183, 0x0d42, 0xeb03, 0x27c2, 0x3282, 0xfe43, 0xbe03, 0x72c2, 0x6782, 0xab43, 0x4d02, 0x81c3, 0x9483, 0x5842, 0x1403, 0xd8c2, 0xcd82, 0x0143, 0xe702, 0x2bc3, 0x3e83, 0xf242, 0xb202, 0x7ec3, 0x6b83, 0xa742, 0x4103, 0x8dc2, 0x9882, 0x5443, 0x3004, 0xfcc5, 0xe985, 0x2544, 0xc305, 0x0fc4, 0x1a84, 0xd645, 0x9605, 0x5ac4, 0x4f84, 0x8345, 0x6504, 0xa9c5, 0xbc85, 0x7044, 0x3c05, 0xf0c4, 0xe584, 0x2945, 0xcf04, 0x03c5, 0x1685, 0xda44, 0x9a04, 0x56c5, 0x4385, 0x8f44, 0x6905, 0xa5c4, 0xb084, 0x7c45, 0x2806, 0xe4c7, 0xf187, 0x3d46, 0xdb07, 0x17c6, 0x0286, 0xce47, 0x8e07, 0x42c6, 0x5786, 0x9b47, 0x7d06, 0xb1c7, 0xa487, 0x6846, 0x2407, 0xe8c6, 0xfd86, 0x3147, 0xd706, 0x1bc7, 0x0e87, 0xc246, 0x8206, 0x4ec7, 0x5b87, 0x9746, 0x7107, 0xbdc6, 0xa886, 0x6447, 0x6008, 0xacc9, 0xb989, 0x7548, 0x9309, 0x5fc8, 0x4a88, 0x8649, 0xc609, 0x0ac8, 0x1f88, 0xd349, 0x3508, 0xf9c9, 0xec89, 0x2048, 0x6c09, 0xa0c8, 0xb588, 0x7949, 0x9f08, 0x53c9, 0x4689, 0x8a48, 0xca08, 0x06c9, 0x1389, 0xdf48, 0x3909, 0xf5c8, 0xe088, 0x2c49, 0x780a, 0xb4cb, 0xa18b, 0x6d4a, 0x8b0b, 0x47ca, 0x528a, 0x9e4b, 0xde0b, 0x12ca, 0x078a, 0xcb4b, 0x2d0a, 0xe1cb, 0xf48b, 0x384a, 0x740b, 0xb8ca, 0xad8a, 0x614b, 0x870a, 0x4bcb, 0x5e8b, 0x924a, 0xd20a, 0x1ecb, 0x0b8b, 0xc74a, 0x210b, 0xedca, 0xf88a, 0x344b, 0x500c, 0x9ccd, 0x898d, 0x454c, 0xa30d, 0x6fcc, 0x7a8c, 0xb64d, 0xf60d, 0x3acc, 0x2f8c, 0xe34d, 0x050c, 0xc9cd, 0xdc8d, 0x104c, 0x5c0d, 0x90cc, 0x858c, 0x494d, 0xaf0c, 0x63cd, 0x768d, 0xba4c, 0xfa0c, 0x36cd, 0x238d, 0xef4c, 0x090d, 0xc5cc, 0xd08c, 0x1c4d, 0x480e, 0x84cf, 0x918f, 0x5d4e, 0xbb0f, 0x77ce, 0x628e, 0xae4f, 0xee0f, 0x22ce, 0x378e, 0xfb4f, 0x1d0e, 0xd1cf, 0xc48f, 0x084e, 0x440f, 0x88ce, 0x9d8e, 0x514f, 0xb70e, 0x7bcf, 0x6e8f, 0xa24e, 0xe20e, 0x2ecf, 0x3b8f, 0xf74e, 0x110f, 0xddce, 0xc88e, 0x044f, ], [ 0x0000, 0x900d, 0x6019, 0xf014, 0xc032, 0x503f, 0xa02b, 0x3026, 0xc067, 0x506a, 0xa07e, 0x3073, 0x0055, 0x9058, 0x604c, 0xf041, 0xc0cd, 0x50c0, 0xa0d4, 0x30d9, 0x00ff, 0x90f2, 0x60e6, 0xf0eb, 0x00aa, 0x90a7, 0x60b3, 0xf0be, 0xc098, 0x5095, 0xa081, 0x308c, 0xc199, 0x5194, 0xa180, 0x318d, 0x01ab, 0x91a6, 0x61b2, 0xf1bf, 0x01fe, 0x91f3, 0x61e7, 0xf1ea, 0xc1cc, 0x51c1, 0xa1d5, 0x31d8, 0x0154, 0x9159, 0x614d, 0xf140, 0xc166, 0x516b, 0xa17f, 0x3172, 0xc133, 0x513e, 0xa12a, 0x3127, 0x0101, 0x910c, 0x6118, 0xf115, 0xc331, 0x533c, 0xa328, 0x3325, 0x0303, 0x930e, 0x631a, 0xf317, 0x0356, 0x935b, 0x634f, 0xf342, 0xc364, 0x5369, 0xa37d, 0x3370, 0x03fc, 0x93f1, 0x63e5, 0xf3e8, 0xc3ce, 0x53c3, 0xa3d7, 0x33da, 0xc39b, 0x5396, 0xa382, 0x338f, 0x03a9, 0x93a4, 0x63b0, 0xf3bd, 0x02a8, 0x92a5, 0x62b1, 0xf2bc, 0xc29a, 0x5297, 0xa283, 0x328e, 0xc2cf, 0x52c2, 0xa2d6, 0x32db, 0x02fd, 0x92f0, 0x62e4, 0xf2e9, 0xc265, 0x5268, 0xa27c, 0x3271, 0x0257, 0x925a, 0x624e, 0xf243, 0x0202, 0x920f, 0x621b, 0xf216, 0xc230, 0x523d, 0xa229, 0x3224, 0xc661, 0x566c, 0xa678, 0x3675, 0x0653, 0x965e, 0x664a, 0xf647, 0x0606, 0x960b, 0x661f, 0xf612, 0xc634, 0x5639, 0xa62d, 0x3620, 0x06ac, 0x96a1, 0x66b5, 0xf6b8, 0xc69e, 0x5693, 0xa687, 0x368a, 0xc6cb, 0x56c6, 0xa6d2, 0x36df, 0x06f9, 0x96f4, 0x66e0, 0xf6ed, 0x07f8, 0x97f5, 0x67e1, 0xf7ec, 0xc7ca, 0x57c7, 0xa7d3, 0x37de, 0xc79f, 0x5792, 0xa786, 0x378b, 0x07ad, 0x97a0, 0x67b4, 0xf7b9, 0xc735, 0x5738, 0xa72c, 0x3721, 0x0707, 0x970a, 0x671e, 0xf713, 0x0752, 0x975f, 0x674b, 0xf746, 0xc760, 0x576d, 0xa779, 0x3774, 0x0550, 0x955d, 0x6549, 0xf544, 0xc562, 0x556f, 0xa57b, 0x3576, 0xc537, 0x553a, 0xa52e, 0x3523, 0x0505, 0x9508, 0x651c, 0xf511, 0xc59d, 0x5590, 0xa584, 0x3589, 0x05af, 0x95a2, 0x65b6, 0xf5bb, 0x05fa, 0x95f7, 0x65e3, 0xf5ee, 0xc5c8, 0x55c5, 0xa5d1, 0x35dc, 0xc4c9, 0x54c4, 0xa4d0, 0x34dd, 0x04fb, 0x94f6, 0x64e2, 0xf4ef, 0x04ae, 0x94a3, 0x64b7, 0xf4ba, 0xc49c, 0x5491, 0xa485, 0x3488, 0x0404, 0x9409, 0x641d, 0xf410, 0xc436, 0x543b, 0xa42f, 0x3422, 0xc463, 0x546e, 0xa47a, 0x3477, 0x0451, 0x945c, 0x6448, 0xf445, ], [ 0x0000, 0xc551, 0xcaa1, 0x0ff0, 0xd541, 0x1010, 0x1fe0, 0xdab1, 0xea81, 0x2fd0, 0x2020, 0xe571, 0x3fc0, 0xfa91, 0xf561, 0x3030, 0x9501, 0x5050, 0x5fa0, 0x9af1, 0x4040, 0x8511, 0x8ae1, 0x4fb0, 0x7f80, 0xbad1, 0xb521, 0x7070, 0xaac1, 0x6f90, 0x6060, 0xa531, 0x6a01, 0xaf50, 0xa0a0, 0x65f1, 0xbf40, 0x7a11, 0x75e1, 0xb0b0, 0x8080, 0x45d1, 0x4a21, 0x8f70, 0x55c1, 0x9090, 0x9f60, 0x5a31, 0xff00, 0x3a51, 0x35a1, 0xf0f0, 0x2a41, 0xef10, 0xe0e0, 0x25b1, 0x1581, 0xd0d0, 0xdf20, 0x1a71, 0xc0c0, 0x0591, 0x0a61, 0xcf30, 0xd402, 0x1153, 0x1ea3, 0xdbf2, 0x0143, 0xc412, 0xcbe2, 0x0eb3, 0x3e83, 0xfbd2, 0xf422, 0x3173, 0xebc2, 0x2e93, 0x2163, 0xe432, 0x4103, 0x8452, 0x8ba2, 0x4ef3, 0x9442, 0x5113, 0x5ee3, 0x9bb2, 0xab82, 0x6ed3, 0x6123, 0xa472, 0x7ec3, 0xbb92, 0xb462, 0x7133, 0xbe03, 0x7b52, 0x74a2, 0xb1f3, 0x6b42, 0xae13, 0xa1e3, 0x64b2, 0x5482, 0x91d3, 0x9e23, 0x5b72, 0x81c3, 0x4492, 0x4b62, 0x8e33, 0x2b02, 0xee53, 0xe1a3, 0x24f2, 0xfe43, 0x3b12, 0x34e2, 0xf1b3, 0xc183, 0x04d2, 0x0b22, 0xce73, 0x14c2, 0xd193, 0xde63, 0x1b32, 0xe807, 0x2d56, 0x22a6, 0xe7f7, 0x3d46, 0xf817, 0xf7e7, 0x32b6, 0x0286, 0xc7d7, 0xc827, 0x0d76, 0xd7c7, 0x1296, 0x1d66, 0xd837, 0x7d06, 0xb857, 0xb7a7, 0x72f6, 0xa847, 0x6d16, 0x62e6, 0xa7b7, 0x9787, 0x52d6, 0x5d26, 0x9877, 0x42c6, 0x8797, 0x8867, 0x4d36, 0x8206, 0x4757, 0x48a7, 0x8df6, 0x5747, 0x9216, 0x9de6, 0x58b7, 0x6887, 0xadd6, 0xa226, 0x6777, 0xbdc6, 0x7897, 0x7767, 0xb236, 0x1707, 0xd256, 0xdda6, 0x18f7, 0xc246, 0x0717, 0x08e7, 0xcdb6, 0xfd86, 0x38d7, 0x3727, 0xf276, 0x28c7, 0xed96, 0xe266, 0x2737, 0x3c05, 0xf954, 0xf6a4, 0x33f5, 0xe944, 0x2c15, 0x23e5, 0xe6b4, 0xd684, 0x13d5, 0x1c25, 0xd974, 0x03c5, 0xc694, 0xc964, 0x0c35, 0xa904, 0x6c55, 0x63a5, 0xa6f4, 0x7c45, 0xb914, 0xb6e4, 0x73b5, 0x4385, 0x86d4, 0x8924, 0x4c75, 0x96c4, 0x5395, 0x5c65, 0x9934, 0x5604, 0x9355, 0x9ca5, 0x59f4, 0x8345, 0x4614, 0x49e4, 0x8cb5, 0xbc85, 0x79d4, 0x7624, 0xb375, 0x69c4, 0xac95, 0xa365, 0x6634, 0xc305, 0x0654, 0x09a4, 0xccf5, 0x1644, 0xd315, 0xdce5, 0x19b4, 0x2984, 0xecd5, 0xe325, 0x2674, 0xfcc5, 0x3994, 0x3664, 0xf335, ], [ 0x0000, 0xfc04, 0xb80b, 0x440f, 0x3015, 0xcc11, 0x881e, 0x741a, 0x602a, 0x9c2e, 0xd821, 0x2425, 0x503f, 0xac3b, 0xe834, 0x1430, 0xc054, 0x3c50, 0x785f, 0x845b, 0xf041, 0x0c45, 0x484a, 0xb44e, 0xa07e, 0x5c7a, 0x1875, 0xe471, 0x906b, 0x6c6f, 0x2860, 0xd464, 0xc0ab, 0x3caf, 0x78a0, 0x84a4, 0xf0be, 0x0cba, 0x48b5, 0xb4b1, 0xa081, 0x5c85, 0x188a, 0xe48e, 0x9094, 0x6c90, 0x289f, 0xd49b, 0x00ff, 0xfcfb, 0xb8f4, 0x44f0, 0x30ea, 0xccee, 0x88e1, 0x74e5, 0x60d5, 0x9cd1, 0xd8de, 0x24da, 0x50c0, 0xacc4, 0xe8cb, 0x14cf, 0xc155, 0x3d51, 0x795e, 0x855a, 0xf140, 0x0d44, 0x494b, 0xb54f, 0xa17f, 0x5d7b, 0x1974, 0xe570, 0x916a, 0x6d6e, 0x2961, 0xd565, 0x0101, 0xfd05, 0xb90a, 0x450e, 0x3114, 0xcd10, 0x891f, 0x751b, 0x612b, 0x9d2f, 0xd920, 0x2524, 0x513e, 0xad3a, 0xe935, 0x1531, 0x01fe, 0xfdfa, 0xb9f5, 0x45f1, 0x31eb, 0xcdef, 0x89e0, 0x75e4, 0x61d4, 0x9dd0, 0xd9df, 0x25db, 0x51c1, 0xadc5, 0xe9ca, 0x15ce, 0xc1aa, 0x3dae, 0x79a1, 0x85a5, 0xf1bf, 0x0dbb, 0x49b4, 0xb5b0, 0xa180, 0x5d84, 0x198b, 0xe58f, 0x9195, 0x6d91, 0x299e, 0xd59a, 0xc2a9, 0x3ead, 0x7aa2, 0x86a6, 0xf2bc, 0x0eb8, 0x4ab7, 0xb6b3, 0xa283, 0x5e87, 0x1a88, 0xe68c, 0x9296, 0x6e92, 0x2a9d, 0xd699, 0x02fd, 0xfef9, 0xbaf6, 0x46f2, 0x32e8, 0xceec, 0x8ae3, 0x76e7, 0x62d7, 0x9ed3, 0xdadc, 0x26d8, 0x52c2, 0xaec6, 0xeac9, 0x16cd, 0x0202, 0xfe06, 0xba09, 0x460d, 0x3217, 0xce13, 0x8a1c, 0x7618, 0x6228, 0x9e2c, 0xda23, 0x2627, 0x523d, 0xae39, 0xea36, 0x1632, 0xc256, 0x3e52, 0x7a5d, 0x8659, 0xf243, 0x0e47, 0x4a48, 0xb64c, 0xa27c, 0x5e78, 0x1a77, 0xe673, 0x9269, 0x6e6d, 0x2a62, 0xd666, 0x03fc, 0xfff8, 0xbbf7, 0x47f3, 0x33e9, 0xcfed, 0x8be2, 0x77e6, 0x63d6, 0x9fd2, 0xdbdd, 0x27d9, 0x53c3, 0xafc7, 0xebc8, 0x17cc, 0xc3a8, 0x3fac, 0x7ba3, 0x87a7, 0xf3bd, 0x0fb9, 0x4bb6, 0xb7b2, 0xa382, 0x5f86, 0x1b89, 0xe78d, 0x9397, 0x6f93, 0x2b9c, 0xd798, 0xc357, 0x3f53, 0x7b5c, 0x8758, 0xf342, 0x0f46, 0x4b49, 0xb74d, 0xa37d, 0x5f79, 0x1b76, 0xe772, 0x9368, 0x6f6c, 0x2b63, 0xd767, 0x0303, 0xff07, 0xbb08, 0x470c, 0x3316, 0xcf12, 0x8b1d, 0x7719, 0x6329, 0x9f2d, 0xdb22, 0x2726, 0x533c, 0xaf38, 0xeb37, 0x1733, ], [ 0x0000, 0xc3fd, 0xc7f9, 0x0404, 0xcff1, 0x0c0c, 0x0808, 0xcbf5, 0xdfe1, 0x1c1c, 0x1818, 0xdbe5, 0x1010, 0xd3ed, 0xd7e9, 0x1414, 0xffc1, 0x3c3c, 0x3838, 0xfbc5, 0x3030, 0xf3cd, 0xf7c9, 0x3434, 0x2020, 0xe3dd, 0xe7d9, 0x2424, 0xefd1, 0x2c2c, 0x2828, 0xebd5, 0xbf81, 0x7c7c, 0x7878, 0xbb85, 0x7070, 0xb38d, 0xb789, 0x7474, 0x6060, 0xa39d, 0xa799, 0x6464, 0xaf91, 0x6c6c, 0x6868, 0xab95, 0x4040, 0x83bd, 0x87b9, 0x4444, 0x8fb1, 0x4c4c, 0x4848, 0x8bb5, 0x9fa1, 0x5c5c, 0x5858, 0x9ba5, 0x5050, 0x93ad, 0x97a9, 0x5454, 0x3f01, 0xfcfc, 0xf8f8, 0x3b05, 0xf0f0, 0x330d, 0x3709, 0xf4f4, 0xe0e0, 0x231d, 0x2719, 0xe4e4, 0x2f11, 0xecec, 0xe8e8, 0x2b15, 0xc0c0, 0x033d, 0x0739, 0xc4c4, 0x0f31, 0xcccc, 0xc8c8, 0x0b35, 0x1f21, 0xdcdc, 0xd8d8, 0x1b25, 0xd0d0, 0x132d, 0x1729, 0xd4d4, 0x8080, 0x437d, 0x4779, 0x8484, 0x4f71, 0x8c8c, 0x8888, 0x4b75, 0x5f61, 0x9c9c, 0x9898, 0x5b65, 0x9090, 0x536d, 0x5769, 0x9494, 0x7f41, 0xbcbc, 0xb8b8, 0x7b45, 0xb0b0, 0x734d, 0x7749, 0xb4b4, 0xa0a0, 0x635d, 0x6759, 0xa4a4, 0x6f51, 0xacac, 0xa8a8, 0x6b55, 0x7e02, 0xbdff, 0xb9fb, 0x7a06, 0xb1f3, 0x720e, 0x760a, 0xb5f7, 0xa1e3, 0x621e, 0x661a, 0xa5e7, 0x6e12, 0xadef, 0xa9eb, 0x6a16, 0x81c3, 0x423e, 0x463a, 0x85c7, 0x4e32, 0x8dcf, 0x89cb, 0x4a36, 0x5e22, 0x9ddf, 0x99db, 0x5a26, 0x91d3, 0x522e, 0x562a, 0x95d7, 0xc183, 0x027e, 0x067a, 0xc587, 0x0e72, 0xcd8f, 0xc98b, 0x0a76, 0x1e62, 0xdd9f, 0xd99b, 0x1a66, 0xd193, 0x126e, 0x166a, 0xd597, 0x3e42, 0xfdbf, 0xf9bb, 0x3a46, 0xf1b3, 0x324e, 0x364a, 0xf5b7, 0xe1a3, 0x225e, 0x265a, 0xe5a7, 0x2e52, 0xedaf, 0xe9ab, 0x2a56, 0x4103, 0x82fe, 0x86fa, 0x4507, 0x8ef2, 0x4d0f, 0x490b, 0x8af6, 0x9ee2, 0x5d1f, 0x591b, 0x9ae6, 0x5113, 0x92ee, 0x96ea, 0x5517, 0xbec2, 0x7d3f, 0x793b, 0xbac6, 0x7133, 0xb2ce, 0xb6ca, 0x7537, 0x6123, 0xa2de, 0xa6da, 0x6527, 0xaed2, 0x6d2f, 0x692b, 0xaad6, 0xfe82, 0x3d7f, 0x397b, 0xfa86, 0x3173, 0xf28e, 0xf68a, 0x3577, 0x2163, 0xe29e, 0xe69a, 0x2567, 0xee92, 0x2d6f, 0x296b, 0xea96, 0x0143, 0xc2be, 0xc6ba, 0x0547, 0xceb2, 0x0d4f, 0x094b, 0xcab6, 0xdea2, 0x1d5f, 0x195b, 0xdaa6, 0x1153, 0xd2ae, 0xd6aa, 0x1557, ], [ 0x0000, 0x8102, 0x4207, 0xc305, 0x840e, 0x050c, 0xc609, 0x470b, 0x481f, 0xc91d, 0x0a18, 0x8b1a, 0xcc11, 0x4d13, 0x8e16, 0x0f14, 0x903e, 0x113c, 0xd239, 0x533b, 0x1430, 0x9532, 0x5637, 0xd735, 0xd821, 0x5923, 0x9a26, 0x1b24, 0x5c2f, 0xdd2d, 0x1e28, 0x9f2a, 0x607f, 0xe17d, 0x2278, 0xa37a, 0xe471, 0x6573, 0xa676, 0x2774, 0x2860, 0xa962, 0x6a67, 0xeb65, 0xac6e, 0x2d6c, 0xee69, 0x6f6b, 0xf041, 0x7143, 0xb246, 0x3344, 0x744f, 0xf54d, 0x3648, 0xb74a, 0xb85e, 0x395c, 0xfa59, 0x7b5b, 0x3c50, 0xbd52, 0x7e57, 0xff55, 0xc0fe, 0x41fc, 0x82f9, 0x03fb, 0x44f0, 0xc5f2, 0x06f7, 0x87f5, 0x88e1, 0x09e3, 0xcae6, 0x4be4, 0x0cef, 0x8ded, 0x4ee8, 0xcfea, 0x50c0, 0xd1c2, 0x12c7, 0x93c5, 0xd4ce, 0x55cc, 0x96c9, 0x17cb, 0x18df, 0x99dd, 0x5ad8, 0xdbda, 0x9cd1, 0x1dd3, 0xded6, 0x5fd4, 0xa081, 0x2183, 0xe286, 0x6384, 0x248f, 0xa58d, 0x6688, 0xe78a, 0xe89e, 0x699c, 0xaa99, 0x2b9b, 0x6c90, 0xed92, 0x2e97, 0xaf95, 0x30bf, 0xb1bd, 0x72b8, 0xf3ba, 0xb4b1, 0x35b3, 0xf6b6, 0x77b4, 0x78a0, 0xf9a2, 0x3aa7, 0xbba5, 0xfcae, 0x7dac, 0xbea9, 0x3fab, 0xc1ff, 0x40fd, 0x83f8, 0x02fa, 0x45f1, 0xc4f3, 0x07f6, 0x86f4, 0x89e0, 0x08e2, 0xcbe7, 0x4ae5, 0x0dee, 0x8cec, 0x4fe9, 0xceeb, 0x51c1, 0xd0c3, 0x13c6, 0x92c4, 0xd5cf, 0x54cd, 0x97c8, 0x16ca, 0x19de, 0x98dc, 0x5bd9, 0xdadb, 0x9dd0, 0x1cd2, 0xdfd7, 0x5ed5, 0xa180, 0x2082, 0xe387, 0x6285, 0x258e, 0xa48c, 0x6789, 0xe68b, 0xe99f, 0x689d, 0xab98, 0x2a9a, 0x6d91, 0xec93, 0x2f96, 0xae94, 0x31be, 0xb0bc, 0x73b9, 0xf2bb, 0xb5b0, 0x34b2, 0xf7b7, 0x76b5, 0x79a1, 0xf8a3, 0x3ba6, 0xbaa4, 0xfdaf, 0x7cad, 0xbfa8, 0x3eaa, 0x0101, 0x8003, 0x4306, 0xc204, 0x850f, 0x040d, 0xc708, 0x460a, 0x491e, 0xc81c, 0x0b19, 0x8a1b, 0xcd10, 0x4c12, 0x8f17, 0x0e15, 0x913f, 0x103d, 0xd338, 0x523a, 0x1531, 0x9433, 0x5736, 0xd634, 0xd920, 0x5822, 0x9b27, 0x1a25, 0x5d2e, 0xdc2c, 0x1f29, 0x9e2b, 0x617e, 0xe07c, 0x2379, 0xa27b, 0xe570, 0x6472, 0xa777, 0x2675, 0x2961, 0xa863, 0x6b66, 0xea64, 0xad6f, 0x2c6d, 0xef68, 0x6e6a, 0xf140, 0x7042, 0xb347, 0x3245, 0x754e, 0xf44c, 0x3749, 0xb64b, 0xb95f, 0x385d, 0xfb58, 0x7a5a, 0x3d51, 0xbc53, 0x7f56, 0xfe54, ], [ 0x0000, 0xc100, 0xc203, 0x0303, 0xc405, 0x0505, 0x0606, 0xc706, 0xc809, 0x0909, 0x0a0a, 0xcb0a, 0x0c0c, 0xcd0c, 0xce0f, 0x0f0f, 0xd011, 0x1111, 0x1212, 0xd312, 0x1414, 0xd514, 0xd617, 0x1717, 0x1818, 0xd918, 0xda1b, 0x1b1b, 0xdc1d, 0x1d1d, 0x1e1e, 0xdf1e, 0xe021, 0x2121, 0x2222, 0xe322, 0x2424, 0xe524, 0xe627, 0x2727, 0x2828, 0xe928, 0xea2b, 0x2b2b, 0xec2d, 0x2d2d, 0x2e2e, 0xef2e, 0x3030, 0xf130, 0xf233, 0x3333, 0xf435, 0x3535, 0x3636, 0xf736, 0xf839, 0x3939, 0x3a3a, 0xfb3a, 0x3c3c, 0xfd3c, 0xfe3f, 0x3f3f, 0x8041, 0x4141, 0x4242, 0x8342, 0x4444, 0x8544, 0x8647, 0x4747, 0x4848, 0x8948, 0x8a4b, 0x4b4b, 0x8c4d, 0x4d4d, 0x4e4e, 0x8f4e, 0x5050, 0x9150, 0x9253, 0x5353, 0x9455, 0x5555, 0x5656, 0x9756, 0x9859, 0x5959, 0x5a5a, 0x9b5a, 0x5c5c, 0x9d5c, 0x9e5f, 0x5f5f, 0x6060, 0xa160, 0xa263, 0x6363, 0xa465, 0x6565, 0x6666, 0xa766, 0xa869, 0x6969, 0x6a6a, 0xab6a, 0x6c6c, 0xad6c, 0xae6f, 0x6f6f, 0xb071, 0x7171, 0x7272, 0xb372, 0x7474, 0xb574, 0xb677, 0x7777, 0x7878, 0xb978, 0xba7b, 0x7b7b, 0xbc7d, 0x7d7d, 0x7e7e, 0xbf7e, 0x4081, 0x8181, 0x8282, 0x4382, 0x8484, 0x4584, 0x4687, 0x8787, 0x8888, 0x4988, 0x4a8b, 0x8b8b, 0x4c8d, 0x8d8d, 0x8e8e, 0x4f8e, 0x9090, 0x5190, 0x5293, 0x9393, 0x5495, 0x9595, 0x9696, 0x5796, 0x5899, 0x9999, 0x9a9a, 0x5b9a, 0x9c9c, 0x5d9c, 0x5e9f, 0x9f9f, 0xa0a0, 0x61a0, 0x62a3, 0xa3a3, 0x64a5, 0xa5a5, 0xa6a6, 0x67a6, 0x68a9, 0xa9a9, 0xaaaa, 0x6baa, 0xacac, 0x6dac, 0x6eaf, 0xafaf, 0x70b1, 0xb1b1, 0xb2b2, 0x73b2, 0xb4b4, 0x75b4, 0x76b7, 0xb7b7, 0xb8b8, 0x79b8, 0x7abb, 0xbbbb, 0x7cbd, 0xbdbd, 0xbebe, 0x7fbe, 0xc0c0, 0x01c0, 0x02c3, 0xc3c3, 0x04c5, 0xc5c5, 0xc6c6, 0x07c6, 0x08c9, 0xc9c9, 0xcaca, 0x0bca, 0xcccc, 0x0dcc, 0x0ecf, 0xcfcf, 0x10d1, 0xd1d1, 0xd2d2, 0x13d2, 0xd4d4, 0x15d4, 0x16d7, 0xd7d7, 0xd8d8, 0x19d8, 0x1adb, 0xdbdb, 0x1cdd, 0xdddd, 0xdede, 0x1fde, 0x20e1, 0xe1e1, 0xe2e2, 0x23e2, 0xe4e4, 0x25e4, 0x26e7, 0xe7e7, 0xe8e8, 0x29e8, 0x2aeb, 0xebeb, 0x2ced, 0xeded, 0xeeee, 0x2fee, 0xf0f0, 0x31f0, 0x32f3, 0xf3f3, 0x34f5, 0xf5f5, 0xf6f6, 0x37f6, 0x38f9, 0xf9f9, 0xfafa, 0x3bfa, 0xfcfc, 0x3dfc, 0x3eff, 0xffff, ], [ 0x0000, 0x00c1, 0x0182, 0x0143, 0x0304, 0x03c5, 0x0286, 0x0247, 0x0608, 0x06c9, 0x078a, 0x074b, 0x050c, 0x05cd, 0x048e, 0x044f, 0x0c10, 0x0cd1, 0x0d92, 0x0d53, 0x0f14, 0x0fd5, 0x0e96, 0x0e57, 0x0a18, 0x0ad9, 0x0b9a, 0x0b5b, 0x091c, 0x09dd, 0x089e, 0x085f, 0x1820, 0x18e1, 0x19a2, 0x1963, 0x1b24, 0x1be5, 0x1aa6, 0x1a67, 0x1e28, 0x1ee9, 0x1faa, 0x1f6b, 0x1d2c, 0x1ded, 0x1cae, 0x1c6f, 0x1430, 0x14f1, 0x15b2, 0x1573, 0x1734, 0x17f5, 0x16b6, 0x1677, 0x1238, 0x12f9, 0x13ba, 0x137b, 0x113c, 0x11fd, 0x10be, 0x107f, 0x3040, 0x3081, 0x31c2, 0x3103, 0x3344, 0x3385, 0x32c6, 0x3207, 0x3648, 0x3689, 0x37ca, 0x370b, 0x354c, 0x358d, 0x34ce, 0x340f, 0x3c50, 0x3c91, 0x3dd2, 0x3d13, 0x3f54, 0x3f95, 0x3ed6, 0x3e17, 0x3a58, 0x3a99, 0x3bda, 0x3b1b, 0x395c, 0x399d, 0x38de, 0x381f, 0x2860, 0x28a1, 0x29e2, 0x2923, 0x2b64, 0x2ba5, 0x2ae6, 0x2a27, 0x2e68, 0x2ea9, 0x2fea, 0x2f2b, 0x2d6c, 0x2dad, 0x2cee, 0x2c2f, 0x2470, 0x24b1, 0x25f2, 0x2533, 0x2774, 0x27b5, 0x26f6, 0x2637, 0x2278, 0x22b9, 0x23fa, 0x233b, 0x217c, 0x21bd, 0x20fe, 0x203f, 0x6080, 0x6041, 0x6102, 0x61c3, 0x6384, 0x6345, 0x6206, 0x62c7, 0x6688, 0x6649, 0x670a, 0x67cb, 0x658c, 0x654d, 0x640e, 0x64cf, 0x6c90, 0x6c51, 0x6d12, 0x6dd3, 0x6f94, 0x6f55, 0x6e16, 0x6ed7, 0x6a98, 0x6a59, 0x6b1a, 0x6bdb, 0x699c, 0x695d, 0x681e, 0x68df, 0x78a0, 0x7861, 0x7922, 0x79e3, 0x7ba4, 0x7b65, 0x7a26, 0x7ae7, 0x7ea8, 0x7e69, 0x7f2a, 0x7feb, 0x7dac, 0x7d6d, 0x7c2e, 0x7cef, 0x74b0, 0x7471, 0x7532, 0x75f3, 0x77b4, 0x7775, 0x7636, 0x76f7, 0x72b8, 0x7279, 0x733a, 0x73fb, 0x71bc, 0x717d, 0x703e, 0x70ff, 0x50c0, 0x5001, 0x5142, 0x5183, 0x53c4, 0x5305, 0x5246, 0x5287, 0x56c8, 0x5609, 0x574a, 0x578b, 0x55cc, 0x550d, 0x544e, 0x548f, 0x5cd0, 0x5c11, 0x5d52, 0x5d93, 0x5fd4, 0x5f15, 0x5e56, 0x5e97, 0x5ad8, 0x5a19, 0x5b5a, 0x5b9b, 0x59dc, 0x591d, 0x585e, 0x589f, 0x48e0, 0x4821, 0x4962, 0x49a3, 0x4be4, 0x4b25, 0x4a66, 0x4aa7, 0x4ee8, 0x4e29, 0x4f6a, 0x4fab, 0x4dec, 0x4d2d, 0x4c6e, 0x4caf, 0x44f0, 0x4431, 0x4572, 0x45b3, 0x47f4, 0x4735, 0x4676, 0x46b7, 0x42f8, 0x4239, 0x437a, 0x43bb, 0x41fc, 0x413d, 0x407e, 0x40bf, ], [ 0x0000, 0x90c1, 0x6181, 0xf140, 0xc302, 0x53c3, 0xa283, 0x3242, 0xc607, 0x56c6, 0xa786, 0x3747, 0x0505, 0x95c4, 0x6484, 0xf445, 0xcc0d, 0x5ccc, 0xad8c, 0x3d4d, 0x0f0f, 0x9fce, 0x6e8e, 0xfe4f, 0x0a0a, 0x9acb, 0x6b8b, 0xfb4a, 0xc908, 0x59c9, 0xa889, 0x3848, 0xd819, 0x48d8, 0xb998, 0x2959, 0x1b1b, 0x8bda, 0x7a9a, 0xea5b, 0x1e1e, 0x8edf, 0x7f9f, 0xef5e, 0xdd1c, 0x4ddd, 0xbc9d, 0x2c5c, 0x1414, 0x84d5, 0x7595, 0xe554, 0xd716, 0x47d7, 0xb697, 0x2656, 0xd213, 0x42d2, 0xb392, 0x2353, 0x1111, 0x81d0, 0x7090, 0xe051, 0xf031, 0x60f0, 0x91b0, 0x0171, 0x3333, 0xa3f2, 0x52b2, 0xc273, 0x3636, 0xa6f7, 0x57b7, 0xc776, 0xf534, 0x65f5, 0x94b5, 0x0474, 0x3c3c, 0xacfd, 0x5dbd, 0xcd7c, 0xff3e, 0x6fff, 0x9ebf, 0x0e7e, 0xfa3b, 0x6afa, 0x9bba, 0x0b7b, 0x3939, 0xa9f8, 0x58b8, 0xc879, 0x2828, 0xb8e9, 0x49a9, 0xd968, 0xeb2a, 0x7beb, 0x8aab, 0x1a6a, 0xee2f, 0x7eee, 0x8fae, 0x1f6f, 0x2d2d, 0xbdec, 0x4cac, 0xdc6d, 0xe425, 0x74e4, 0x85a4, 0x1565, 0x2727, 0xb7e6, 0x46a6, 0xd667, 0x2222, 0xb2e3, 0x43a3, 0xd362, 0xe120, 0x71e1, 0x80a1, 0x1060, 0xa061, 0x30a0, 0xc1e0, 0x5121, 0x6363, 0xf3a2, 0x02e2, 0x9223, 0x6666, 0xf6a7, 0x07e7, 0x9726, 0xa564, 0x35a5, 0xc4e5, 0x5424, 0x6c6c, 0xfcad, 0x0ded, 0x9d2c, 0xaf6e, 0x3faf, 0xceef, 0x5e2e, 0xaa6b, 0x3aaa, 0xcbea, 0x5b2b, 0x6969, 0xf9a8, 0x08e8, 0x9829, 0x7878, 0xe8b9, 0x19f9, 0x8938, 0xbb7a, 0x2bbb, 0xdafb, 0x4a3a, 0xbe7f, 0x2ebe, 0xdffe, 0x4f3f, 0x7d7d, 0xedbc, 0x1cfc, 0x8c3d, 0xb475, 0x24b4, 0xd5f4, 0x4535, 0x7777, 0xe7b6, 0x16f6, 0x8637, 0x7272, 0xe2b3, 0x13f3, 0x8332, 0xb170, 0x21b1, 0xd0f1, 0x4030, 0x5050, 0xc091, 0x31d1, 0xa110, 0x9352, 0x0393, 0xf2d3, 0x6212, 0x9657, 0x0696, 0xf7d6, 0x6717, 0x5555, 0xc594, 0x34d4, 0xa415, 0x9c5d, 0x0c9c, 0xfddc, 0x6d1d, 0x5f5f, 0xcf9e, 0x3ede, 0xae1f, 0x5a5a, 0xca9b, 0x3bdb, 0xab1a, 0x9958, 0x0999, 0xf8d9, 0x6818, 0x8849, 0x1888, 0xe9c8, 0x7909, 0x4b4b, 0xdb8a, 0x2aca, 0xba0b, 0x4e4e, 0xde8f, 0x2fcf, 0xbf0e, 0x8d4c, 0x1d8d, 0xeccd, 0x7c0c, 0x4444, 0xd485, 0x25c5, 0xb504, 0x8746, 0x1787, 0xe6c7, 0x7606, 0x8243, 0x1282, 0xe3c2, 0x7303, 0x4141, 0xd180, 0x20c0, 0xb001, ], ]; pub static CRC16_CDMA2000_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0xc867, 0x58a9, 0x90ce, 0xb152, 0x7935, 0xe9fb, 0x219c, 0xaac3, 0x62a4, 0xf26a, 0x3a0d, 0x1b91, 0xd3f6, 0x4338, 0x8b5f, 0x9de1, 0x5586, 0xc548, 0x0d2f, 0x2cb3, 0xe4d4, 0x741a, 0xbc7d, 0x3722, 0xff45, 0x6f8b, 0xa7ec, 0x8670, 0x4e17, 0xded9, 0x16be, 0xf3a5, 0x3bc2, 0xab0c, 0x636b, 0x42f7, 0x8a90, 0x1a5e, 0xd239, 0x5966, 0x9101, 0x01cf, 0xc9a8, 0xe834, 0x2053, 0xb09d, 0x78fa, 0x6e44, 0xa623, 0x36ed, 0xfe8a, 0xdf16, 0x1771, 0x87bf, 0x4fd8, 0xc487, 0x0ce0, 0x9c2e, 0x5449, 0x75d5, 0xbdb2, 0x2d7c, 0xe51b, 0x2f2d, 0xe74a, 0x7784, 0xbfe3, 0x9e7f, 0x5618, 0xc6d6, 0x0eb1, 0x85ee, 0x4d89, 0xdd47, 0x1520, 0x34bc, 0xfcdb, 0x6c15, 0xa472, 0xb2cc, 0x7aab, 0xea65, 0x2202, 0x039e, 0xcbf9, 0x5b37, 0x9350, 0x180f, 0xd068, 0x40a6, 0x88c1, 0xa95d, 0x613a, 0xf1f4, 0x3993, 0xdc88, 0x14ef, 0x8421, 0x4c46, 0x6dda, 0xa5bd, 0x3573, 0xfd14, 0x764b, 0xbe2c, 0x2ee2, 0xe685, 0xc719, 0x0f7e, 0x9fb0, 0x57d7, 0x4169, 0x890e, 0x19c0, 0xd1a7, 0xf03b, 0x385c, 0xa892, 0x60f5, 0xebaa, 0x23cd, 0xb303, 0x7b64, 0x5af8, 0x929f, 0x0251, 0xca36, 0x5e5a, 0x963d, 0x06f3, 0xce94, 0xef08, 0x276f, 0xb7a1, 0x7fc6, 0xf499, 0x3cfe, 0xac30, 0x6457, 0x45cb, 0x8dac, 0x1d62, 0xd505, 0xc3bb, 0x0bdc, 0x9b12, 0x5375, 0x72e9, 0xba8e, 0x2a40, 0xe227, 0x6978, 0xa11f, 0x31d1, 0xf9b6, 0xd82a, 0x104d, 0x8083, 0x48e4, 0xadff, 0x6598, 0xf556, 0x3d31, 0x1cad, 0xd4ca, 0x4404, 0x8c63, 0x073c, 0xcf5b, 0x5f95, 0x97f2, 0xb66e, 0x7e09, 0xeec7, 0x26a0, 0x301e, 0xf879, 0x68b7, 0xa0d0, 0x814c, 0x492b, 0xd9e5, 0x1182, 0x9add, 0x52ba, 0xc274, 0x0a13, 0x2b8f, 0xe3e8, 0x7326, 0xbb41, 0x7177, 0xb910, 0x29de, 0xe1b9, 0xc025, 0x0842, 0x988c, 0x50eb, 0xdbb4, 0x13d3, 0x831d, 0x4b7a, 0x6ae6, 0xa281, 0x324f, 0xfa28, 0xec96, 0x24f1, 0xb43f, 0x7c58, 0x5dc4, 0x95a3, 0x056d, 0xcd0a, 0x4655, 0x8e32, 0x1efc, 0xd69b, 0xf707, 0x3f60, 0xafae, 0x67c9, 0x82d2, 0x4ab5, 0xda7b, 0x121c, 0x3380, 0xfbe7, 0x6b29, 0xa34e, 0x2811, 0xe076, 0x70b8, 0xb8df, 0x9943, 0x5124, 0xc1ea, 0x098d, 0x1f33, 0xd754, 0x479a, 0x8ffd, 0xae61, 0x6606, 0xf6c8, 0x3eaf, 0xb5f0, 0x7d97, 0xed59, 0x253e, 0x04a2, 0xccc5, 0x5c0b, 0x946c, ], [ 0x0000, 0xbcb4, 0xb10f, 0x0dbb, 0xaa79, 0x16cd, 0x1b76, 0xa7c2, 0x9c95, 0x2021, 0x2d9a, 0x912e, 0x36ec, 0x8a58, 0x87e3, 0x3b57, 0xf14d, 0x4df9, 0x4042, 0xfcf6, 0x5b34, 0xe780, 0xea3b, 0x568f, 0x6dd8, 0xd16c, 0xdcd7, 0x6063, 0xc7a1, 0x7b15, 0x76ae, 0xca1a, 0x2afd, 0x9649, 0x9bf2, 0x2746, 0x8084, 0x3c30, 0x318b, 0x8d3f, 0xb668, 0x0adc, 0x0767, 0xbbd3, 0x1c11, 0xa0a5, 0xad1e, 0x11aa, 0xdbb0, 0x6704, 0x6abf, 0xd60b, 0x71c9, 0xcd7d, 0xc0c6, 0x7c72, 0x4725, 0xfb91, 0xf62a, 0x4a9e, 0xed5c, 0x51e8, 0x5c53, 0xe0e7, 0x55fa, 0xe94e, 0xe4f5, 0x5841, 0xff83, 0x4337, 0x4e8c, 0xf238, 0xc96f, 0x75db, 0x7860, 0xc4d4, 0x6316, 0xdfa2, 0xd219, 0x6ead, 0xa4b7, 0x1803, 0x15b8, 0xa90c, 0x0ece, 0xb27a, 0xbfc1, 0x0375, 0x3822, 0x8496, 0x892d, 0x3599, 0x925b, 0x2eef, 0x2354, 0x9fe0, 0x7f07, 0xc3b3, 0xce08, 0x72bc, 0xd57e, 0x69ca, 0x6471, 0xd8c5, 0xe392, 0x5f26, 0x529d, 0xee29, 0x49eb, 0xf55f, 0xf8e4, 0x4450, 0x8e4a, 0x32fe, 0x3f45, 0x83f1, 0x2433, 0x9887, 0x953c, 0x2988, 0x12df, 0xae6b, 0xa3d0, 0x1f64, 0xb8a6, 0x0412, 0x09a9, 0xb51d, 0xabf4, 0x1740, 0x1afb, 0xa64f, 0x018d, 0xbd39, 0xb082, 0x0c36, 0x3761, 0x8bd5, 0x866e, 0x3ada, 0x9d18, 0x21ac, 0x2c17, 0x90a3, 0x5ab9, 0xe60d, 0xebb6, 0x5702, 0xf0c0, 0x4c74, 0x41cf, 0xfd7b, 0xc62c, 0x7a98, 0x7723, 0xcb97, 0x6c55, 0xd0e1, 0xdd5a, 0x61ee, 0x8109, 0x3dbd, 0x3006, 0x8cb2, 0x2b70, 0x97c4, 0x9a7f, 0x26cb, 0x1d9c, 0xa128, 0xac93, 0x1027, 0xb7e5, 0x0b51, 0x06ea, 0xba5e, 0x7044, 0xccf0, 0xc14b, 0x7dff, 0xda3d, 0x6689, 0x6b32, 0xd786, 0xecd1, 0x5065, 0x5dde, 0xe16a, 0x46a8, 0xfa1c, 0xf7a7, 0x4b13, 0xfe0e, 0x42ba, 0x4f01, 0xf3b5, 0x5477, 0xe8c3, 0xe578, 0x59cc, 0x629b, 0xde2f, 0xd394, 0x6f20, 0xc8e2, 0x7456, 0x79ed, 0xc559, 0x0f43, 0xb3f7, 0xbe4c, 0x02f8, 0xa53a, 0x198e, 0x1435, 0xa881, 0x93d6, 0x2f62, 0x22d9, 0x9e6d, 0x39af, 0x851b, 0x88a0, 0x3414, 0xd4f3, 0x6847, 0x65fc, 0xd948, 0x7e8a, 0xc23e, 0xcf85, 0x7331, 0x4866, 0xf4d2, 0xf969, 0x45dd, 0xe21f, 0x5eab, 0x5310, 0xefa4, 0x25be, 0x990a, 0x94b1, 0x2805, 0x8fc7, 0x3373, 0x3ec8, 0x827c, 0xb92b, 0x059f, 0x0824, 0xb490, 0x1352, 0xafe6, 0xa25d, 0x1ee9, ], [ 0x0000, 0x9f8f, 0xf779, 0x68f6, 0x2695, 0xb91a, 0xd1ec, 0x4e63, 0x4d2a, 0xd2a5, 0xba53, 0x25dc, 0x6bbf, 0xf430, 0x9cc6, 0x0349, 0x9a54, 0x05db, 0x6d2d, 0xf2a2, 0xbcc1, 0x234e, 0x4bb8, 0xd437, 0xd77e, 0x48f1, 0x2007, 0xbf88, 0xf1eb, 0x6e64, 0x0692, 0x991d, 0xfccf, 0x6340, 0x0bb6, 0x9439, 0xda5a, 0x45d5, 0x2d23, 0xb2ac, 0xb1e5, 0x2e6a, 0x469c, 0xd913, 0x9770, 0x08ff, 0x6009, 0xff86, 0x669b, 0xf914, 0x91e2, 0x0e6d, 0x400e, 0xdf81, 0xb777, 0x28f8, 0x2bb1, 0xb43e, 0xdcc8, 0x4347, 0x0d24, 0x92ab, 0xfa5d, 0x65d2, 0x31f9, 0xae76, 0xc680, 0x590f, 0x176c, 0x88e3, 0xe015, 0x7f9a, 0x7cd3, 0xe35c, 0x8baa, 0x1425, 0x5a46, 0xc5c9, 0xad3f, 0x32b0, 0xabad, 0x3422, 0x5cd4, 0xc35b, 0x8d38, 0x12b7, 0x7a41, 0xe5ce, 0xe687, 0x7908, 0x11fe, 0x8e71, 0xc012, 0x5f9d, 0x376b, 0xa8e4, 0xcd36, 0x52b9, 0x3a4f, 0xa5c0, 0xeba3, 0x742c, 0x1cda, 0x8355, 0x801c, 0x1f93, 0x7765, 0xe8ea, 0xa689, 0x3906, 0x51f0, 0xce7f, 0x5762, 0xc8ed, 0xa01b, 0x3f94, 0x71f7, 0xee78, 0x868e, 0x1901, 0x1a48, 0x85c7, 0xed31, 0x72be, 0x3cdd, 0xa352, 0xcba4, 0x542b, 0x63f2, 0xfc7d, 0x948b, 0x0b04, 0x4567, 0xdae8, 0xb21e, 0x2d91, 0x2ed8, 0xb157, 0xd9a1, 0x462e, 0x084d, 0x97c2, 0xff34, 0x60bb, 0xf9a6, 0x6629, 0x0edf, 0x9150, 0xdf33, 0x40bc, 0x284a, 0xb7c5, 0xb48c, 0x2b03, 0x43f5, 0xdc7a, 0x9219, 0x0d96, 0x6560, 0xfaef, 0x9f3d, 0x00b2, 0x6844, 0xf7cb, 0xb9a8, 0x2627, 0x4ed1, 0xd15e, 0xd217, 0x4d98, 0x256e, 0xbae1, 0xf482, 0x6b0d, 0x03fb, 0x9c74, 0x0569, 0x9ae6, 0xf210, 0x6d9f, 0x23fc, 0xbc73, 0xd485, 0x4b0a, 0x4843, 0xd7cc, 0xbf3a, 0x20b5, 0x6ed6, 0xf159, 0x99af, 0x0620, 0x520b, 0xcd84, 0xa572, 0x3afd, 0x749e, 0xeb11, 0x83e7, 0x1c68, 0x1f21, 0x80ae, 0xe858, 0x77d7, 0x39b4, 0xa63b, 0xcecd, 0x5142, 0xc85f, 0x57d0, 0x3f26, 0xa0a9, 0xeeca, 0x7145, 0x19b3, 0x863c, 0x8575, 0x1afa, 0x720c, 0xed83, 0xa3e0, 0x3c6f, 0x5499, 0xcb16, 0xaec4, 0x314b, 0x59bd, 0xc632, 0x8851, 0x17de, 0x7f28, 0xe0a7, 0xe3ee, 0x7c61, 0x1497, 0x8b18, 0xc57b, 0x5af4, 0x3202, 0xad8d, 0x3490, 0xab1f, 0xc3e9, 0x5c66, 0x1205, 0x8d8a, 0xe57c, 0x7af3, 0x79ba, 0xe635, 0x8ec3, 0x114c, 0x5f2f, 0xc0a0, 0xa856, 0x37d9, ], [ 0x0000, 0xc7e4, 0x47af, 0x804b, 0x8f5e, 0x48ba, 0xc8f1, 0x0f15, 0xd6db, 0x113f, 0x9174, 0x5690, 0x5985, 0x9e61, 0x1e2a, 0xd9ce, 0x65d1, 0xa235, 0x227e, 0xe59a, 0xea8f, 0x2d6b, 0xad20, 0x6ac4, 0xb30a, 0x74ee, 0xf4a5, 0x3341, 0x3c54, 0xfbb0, 0x7bfb, 0xbc1f, 0xcba2, 0x0c46, 0x8c0d, 0x4be9, 0x44fc, 0x8318, 0x0353, 0xc4b7, 0x1d79, 0xda9d, 0x5ad6, 0x9d32, 0x9227, 0x55c3, 0xd588, 0x126c, 0xae73, 0x6997, 0xe9dc, 0x2e38, 0x212d, 0xe6c9, 0x6682, 0xa166, 0x78a8, 0xbf4c, 0x3f07, 0xf8e3, 0xf7f6, 0x3012, 0xb059, 0x77bd, 0x5f23, 0x98c7, 0x188c, 0xdf68, 0xd07d, 0x1799, 0x97d2, 0x5036, 0x89f8, 0x4e1c, 0xce57, 0x09b3, 0x06a6, 0xc142, 0x4109, 0x86ed, 0x3af2, 0xfd16, 0x7d5d, 0xbab9, 0xb5ac, 0x7248, 0xf203, 0x35e7, 0xec29, 0x2bcd, 0xab86, 0x6c62, 0x6377, 0xa493, 0x24d8, 0xe33c, 0x9481, 0x5365, 0xd32e, 0x14ca, 0x1bdf, 0xdc3b, 0x5c70, 0x9b94, 0x425a, 0x85be, 0x05f5, 0xc211, 0xcd04, 0x0ae0, 0x8aab, 0x4d4f, 0xf150, 0x36b4, 0xb6ff, 0x711b, 0x7e0e, 0xb9ea, 0x39a1, 0xfe45, 0x278b, 0xe06f, 0x6024, 0xa7c0, 0xa8d5, 0x6f31, 0xef7a, 0x289e, 0xbe46, 0x79a2, 0xf9e9, 0x3e0d, 0x3118, 0xf6fc, 0x76b7, 0xb153, 0x689d, 0xaf79, 0x2f32, 0xe8d6, 0xe7c3, 0x2027, 0xa06c, 0x6788, 0xdb97, 0x1c73, 0x9c38, 0x5bdc, 0x54c9, 0x932d, 0x1366, 0xd482, 0x0d4c, 0xcaa8, 0x4ae3, 0x8d07, 0x8212, 0x45f6, 0xc5bd, 0x0259, 0x75e4, 0xb200, 0x324b, 0xf5af, 0xfaba, 0x3d5e, 0xbd15, 0x7af1, 0xa33f, 0x64db, 0xe490, 0x2374, 0x2c61, 0xeb85, 0x6bce, 0xac2a, 0x1035, 0xd7d1, 0x579a, 0x907e, 0x9f6b, 0x588f, 0xd8c4, 0x1f20, 0xc6ee, 0x010a, 0x8141, 0x46a5, 0x49b0, 0x8e54, 0x0e1f, 0xc9fb, 0xe165, 0x2681, 0xa6ca, 0x612e, 0x6e3b, 0xa9df, 0x2994, 0xee70, 0x37be, 0xf05a, 0x7011, 0xb7f5, 0xb8e0, 0x7f04, 0xff4f, 0x38ab, 0x84b4, 0x4350, 0xc31b, 0x04ff, 0x0bea, 0xcc0e, 0x4c45, 0x8ba1, 0x526f, 0x958b, 0x15c0, 0xd224, 0xdd31, 0x1ad5, 0x9a9e, 0x5d7a, 0x2ac7, 0xed23, 0x6d68, 0xaa8c, 0xa599, 0x627d, 0xe236, 0x25d2, 0xfc1c, 0x3bf8, 0xbbb3, 0x7c57, 0x7342, 0xb4a6, 0x34ed, 0xf309, 0x4f16, 0x88f2, 0x08b9, 0xcf5d, 0xc048, 0x07ac, 0x87e7, 0x4003, 0x99cd, 0x5e29, 0xde62, 0x1986, 0x1693, 0xd177, 0x513c, 0x96d8, ], [ 0x0000, 0xb4eb, 0xa1b1, 0x155a, 0x8b05, 0x3fee, 0x2ab4, 0x9e5f, 0xde6d, 0x6a86, 0x7fdc, 0xcb37, 0x5568, 0xe183, 0xf4d9, 0x4032, 0x74bd, 0xc056, 0xd50c, 0x61e7, 0xffb8, 0x4b53, 0x5e09, 0xeae2, 0xaad0, 0x1e3b, 0x0b61, 0xbf8a, 0x21d5, 0x953e, 0x8064, 0x348f, 0xe97a, 0x5d91, 0x48cb, 0xfc20, 0x627f, 0xd694, 0xc3ce, 0x7725, 0x3717, 0x83fc, 0x96a6, 0x224d, 0xbc12, 0x08f9, 0x1da3, 0xa948, 0x9dc7, 0x292c, 0x3c76, 0x889d, 0x16c2, 0xa229, 0xb773, 0x0398, 0x43aa, 0xf741, 0xe21b, 0x56f0, 0xc8af, 0x7c44, 0x691e, 0xddf5, 0x1a93, 0xae78, 0xbb22, 0x0fc9, 0x9196, 0x257d, 0x3027, 0x84cc, 0xc4fe, 0x7015, 0x654f, 0xd1a4, 0x4ffb, 0xfb10, 0xee4a, 0x5aa1, 0x6e2e, 0xdac5, 0xcf9f, 0x7b74, 0xe52b, 0x51c0, 0x449a, 0xf071, 0xb043, 0x04a8, 0x11f2, 0xa519, 0x3b46, 0x8fad, 0x9af7, 0x2e1c, 0xf3e9, 0x4702, 0x5258, 0xe6b3, 0x78ec, 0xcc07, 0xd95d, 0x6db6, 0x2d84, 0x996f, 0x8c35, 0x38de, 0xa681, 0x126a, 0x0730, 0xb3db, 0x8754, 0x33bf, 0x26e5, 0x920e, 0x0c51, 0xb8ba, 0xade0, 0x190b, 0x5939, 0xedd2, 0xf888, 0x4c63, 0xd23c, 0x66d7, 0x738d, 0xc766, 0x3526, 0x81cd, 0x9497, 0x207c, 0xbe23, 0x0ac8, 0x1f92, 0xab79, 0xeb4b, 0x5fa0, 0x4afa, 0xfe11, 0x604e, 0xd4a5, 0xc1ff, 0x7514, 0x419b, 0xf570, 0xe02a, 0x54c1, 0xca9e, 0x7e75, 0x6b2f, 0xdfc4, 0x9ff6, 0x2b1d, 0x3e47, 0x8aac, 0x14f3, 0xa018, 0xb542, 0x01a9, 0xdc5c, 0x68b7, 0x7ded, 0xc906, 0x5759, 0xe3b2, 0xf6e8, 0x4203, 0x0231, 0xb6da, 0xa380, 0x176b, 0x8934, 0x3ddf, 0x2885, 0x9c6e, 0xa8e1, 0x1c0a, 0x0950, 0xbdbb, 0x23e4, 0x970f, 0x8255, 0x36be, 0x768c, 0xc267, 0xd73d, 0x63d6, 0xfd89, 0x4962, 0x5c38, 0xe8d3, 0x2fb5, 0x9b5e, 0x8e04, 0x3aef, 0xa4b0, 0x105b, 0x0501, 0xb1ea, 0xf1d8, 0x4533, 0x5069, 0xe482, 0x7add, 0xce36, 0xdb6c, 0x6f87, 0x5b08, 0xefe3, 0xfab9, 0x4e52, 0xd00d, 0x64e6, 0x71bc, 0xc557, 0x8565, 0x318e, 0x24d4, 0x903f, 0x0e60, 0xba8b, 0xafd1, 0x1b3a, 0xc6cf, 0x7224, 0x677e, 0xd395, 0x4dca, 0xf921, 0xec7b, 0x5890, 0x18a2, 0xac49, 0xb913, 0x0df8, 0x93a7, 0x274c, 0x3216, 0x86fd, 0xb272, 0x0699, 0x13c3, 0xa728, 0x3977, 0x8d9c, 0x98c6, 0x2c2d, 0x6c1f, 0xd8f4, 0xcdae, 0x7945, 0xe71a, 0x53f1, 0x46ab, 0xf240, ], [ 0x0000, 0x6a4c, 0xd498, 0xbed4, 0x6157, 0x0b1b, 0xb5cf, 0xdf83, 0xc2ae, 0xa8e2, 0x1636, 0x7c7a, 0xa3f9, 0xc9b5, 0x7761, 0x1d2d, 0x4d3b, 0x2777, 0x99a3, 0xf3ef, 0x2c6c, 0x4620, 0xf8f4, 0x92b8, 0x8f95, 0xe5d9, 0x5b0d, 0x3141, 0xeec2, 0x848e, 0x3a5a, 0x5016, 0x9a76, 0xf03a, 0x4eee, 0x24a2, 0xfb21, 0x916d, 0x2fb9, 0x45f5, 0x58d8, 0x3294, 0x8c40, 0xe60c, 0x398f, 0x53c3, 0xed17, 0x875b, 0xd74d, 0xbd01, 0x03d5, 0x6999, 0xb61a, 0xdc56, 0x6282, 0x08ce, 0x15e3, 0x7faf, 0xc17b, 0xab37, 0x74b4, 0x1ef8, 0xa02c, 0xca60, 0xfc8b, 0x96c7, 0x2813, 0x425f, 0x9ddc, 0xf790, 0x4944, 0x2308, 0x3e25, 0x5469, 0xeabd, 0x80f1, 0x5f72, 0x353e, 0x8bea, 0xe1a6, 0xb1b0, 0xdbfc, 0x6528, 0x0f64, 0xd0e7, 0xbaab, 0x047f, 0x6e33, 0x731e, 0x1952, 0xa786, 0xcdca, 0x1249, 0x7805, 0xc6d1, 0xac9d, 0x66fd, 0x0cb1, 0xb265, 0xd829, 0x07aa, 0x6de6, 0xd332, 0xb97e, 0xa453, 0xce1f, 0x70cb, 0x1a87, 0xc504, 0xaf48, 0x119c, 0x7bd0, 0x2bc6, 0x418a, 0xff5e, 0x9512, 0x4a91, 0x20dd, 0x9e09, 0xf445, 0xe968, 0x8324, 0x3df0, 0x57bc, 0x883f, 0xe273, 0x5ca7, 0x36eb, 0x3171, 0x5b3d, 0xe5e9, 0x8fa5, 0x5026, 0x3a6a, 0x84be, 0xeef2, 0xf3df, 0x9993, 0x2747, 0x4d0b, 0x9288, 0xf8c4, 0x4610, 0x2c5c, 0x7c4a, 0x1606, 0xa8d2, 0xc29e, 0x1d1d, 0x7751, 0xc985, 0xa3c9, 0xbee4, 0xd4a8, 0x6a7c, 0x0030, 0xdfb3, 0xb5ff, 0x0b2b, 0x6167, 0xab07, 0xc14b, 0x7f9f, 0x15d3, 0xca50, 0xa01c, 0x1ec8, 0x7484, 0x69a9, 0x03e5, 0xbd31, 0xd77d, 0x08fe, 0x62b2, 0xdc66, 0xb62a, 0xe63c, 0x8c70, 0x32a4, 0x58e8, 0x876b, 0xed27, 0x53f3, 0x39bf, 0x2492, 0x4ede, 0xf00a, 0x9a46, 0x45c5, 0x2f89, 0x915d, 0xfb11, 0xcdfa, 0xa7b6, 0x1962, 0x732e, 0xacad, 0xc6e1, 0x7835, 0x1279, 0x0f54, 0x6518, 0xdbcc, 0xb180, 0x6e03, 0x044f, 0xba9b, 0xd0d7, 0x80c1, 0xea8d, 0x5459, 0x3e15, 0xe196, 0x8bda, 0x350e, 0x5f42, 0x426f, 0x2823, 0x96f7, 0xfcbb, 0x2338, 0x4974, 0xf7a0, 0x9dec, 0x578c, 0x3dc0, 0x8314, 0xe958, 0x36db, 0x5c97, 0xe243, 0x880f, 0x9522, 0xff6e, 0x41ba, 0x2bf6, 0xf475, 0x9e39, 0x20ed, 0x4aa1, 0x1ab7, 0x70fb, 0xce2f, 0xa463, 0x7be0, 0x11ac, 0xaf78, 0xc534, 0xd819, 0xb255, 0x0c81, 0x66cd, 0xb94e, 0xd302, 0x6dd6, 0x079a, ], [ 0x0000, 0x62e2, 0xc5c4, 0xa726, 0x43ef, 0x210d, 0x862b, 0xe4c9, 0x87de, 0xe53c, 0x421a, 0x20f8, 0xc431, 0xa6d3, 0x01f5, 0x6317, 0xc7db, 0xa539, 0x021f, 0x60fd, 0x8434, 0xe6d6, 0x41f0, 0x2312, 0x4005, 0x22e7, 0x85c1, 0xe723, 0x03ea, 0x6108, 0xc62e, 0xa4cc, 0x47d1, 0x2533, 0x8215, 0xe0f7, 0x043e, 0x66dc, 0xc1fa, 0xa318, 0xc00f, 0xa2ed, 0x05cb, 0x6729, 0x83e0, 0xe102, 0x4624, 0x24c6, 0x800a, 0xe2e8, 0x45ce, 0x272c, 0xc3e5, 0xa107, 0x0621, 0x64c3, 0x07d4, 0x6536, 0xc210, 0xa0f2, 0x443b, 0x26d9, 0x81ff, 0xe31d, 0x8fa2, 0xed40, 0x4a66, 0x2884, 0xcc4d, 0xaeaf, 0x0989, 0x6b6b, 0x087c, 0x6a9e, 0xcdb8, 0xaf5a, 0x4b93, 0x2971, 0x8e57, 0xecb5, 0x4879, 0x2a9b, 0x8dbd, 0xef5f, 0x0b96, 0x6974, 0xce52, 0xacb0, 0xcfa7, 0xad45, 0x0a63, 0x6881, 0x8c48, 0xeeaa, 0x498c, 0x2b6e, 0xc873, 0xaa91, 0x0db7, 0x6f55, 0x8b9c, 0xe97e, 0x4e58, 0x2cba, 0x4fad, 0x2d4f, 0x8a69, 0xe88b, 0x0c42, 0x6ea0, 0xc986, 0xab64, 0x0fa8, 0x6d4a, 0xca6c, 0xa88e, 0x4c47, 0x2ea5, 0x8983, 0xeb61, 0x8876, 0xea94, 0x4db2, 0x2f50, 0xcb99, 0xa97b, 0x0e5d, 0x6cbf, 0xd723, 0xb5c1, 0x12e7, 0x7005, 0x94cc, 0xf62e, 0x5108, 0x33ea, 0x50fd, 0x321f, 0x9539, 0xf7db, 0x1312, 0x71f0, 0xd6d6, 0xb434, 0x10f8, 0x721a, 0xd53c, 0xb7de, 0x5317, 0x31f5, 0x96d3, 0xf431, 0x9726, 0xf5c4, 0x52e2, 0x3000, 0xd4c9, 0xb62b, 0x110d, 0x73ef, 0x90f2, 0xf210, 0x5536, 0x37d4, 0xd31d, 0xb1ff, 0x16d9, 0x743b, 0x172c, 0x75ce, 0xd2e8, 0xb00a, 0x54c3, 0x3621, 0x9107, 0xf3e5, 0x5729, 0x35cb, 0x92ed, 0xf00f, 0x14c6, 0x7624, 0xd102, 0xb3e0, 0xd0f7, 0xb215, 0x1533, 0x77d1, 0x9318, 0xf1fa, 0x56dc, 0x343e, 0x5881, 0x3a63, 0x9d45, 0xffa7, 0x1b6e, 0x798c, 0xdeaa, 0xbc48, 0xdf5f, 0xbdbd, 0x1a9b, 0x7879, 0x9cb0, 0xfe52, 0x5974, 0x3b96, 0x9f5a, 0xfdb8, 0x5a9e, 0x387c, 0xdcb5, 0xbe57, 0x1971, 0x7b93, 0x1884, 0x7a66, 0xdd40, 0xbfa2, 0x5b6b, 0x3989, 0x9eaf, 0xfc4d, 0x1f50, 0x7db2, 0xda94, 0xb876, 0x5cbf, 0x3e5d, 0x997b, 0xfb99, 0x988e, 0xfa6c, 0x5d4a, 0x3fa8, 0xdb61, 0xb983, 0x1ea5, 0x7c47, 0xd88b, 0xba69, 0x1d4f, 0x7fad, 0x9b64, 0xf986, 0x5ea0, 0x3c42, 0x5f55, 0x3db7, 0x9a91, 0xf873, 0x1cba, 0x7e58, 0xd97e, 0xbb9c, ], [ 0x0000, 0x6621, 0xcc42, 0xaa63, 0x50e3, 0x36c2, 0x9ca1, 0xfa80, 0xa1c6, 0xc7e7, 0x6d84, 0x0ba5, 0xf125, 0x9704, 0x3d67, 0x5b46, 0x8beb, 0xedca, 0x47a9, 0x2188, 0xdb08, 0xbd29, 0x174a, 0x716b, 0x2a2d, 0x4c0c, 0xe66f, 0x804e, 0x7ace, 0x1cef, 0xb68c, 0xd0ad, 0xdfb1, 0xb990, 0x13f3, 0x75d2, 0x8f52, 0xe973, 0x4310, 0x2531, 0x7e77, 0x1856, 0xb235, 0xd414, 0x2e94, 0x48b5, 0xe2d6, 0x84f7, 0x545a, 0x327b, 0x9818, 0xfe39, 0x04b9, 0x6298, 0xc8fb, 0xaeda, 0xf59c, 0x93bd, 0x39de, 0x5fff, 0xa57f, 0xc35e, 0x693d, 0x0f1c, 0x7705, 0x1124, 0xbb47, 0xdd66, 0x27e6, 0x41c7, 0xeba4, 0x8d85, 0xd6c3, 0xb0e2, 0x1a81, 0x7ca0, 0x8620, 0xe001, 0x4a62, 0x2c43, 0xfcee, 0x9acf, 0x30ac, 0x568d, 0xac0d, 0xca2c, 0x604f, 0x066e, 0x5d28, 0x3b09, 0x916a, 0xf74b, 0x0dcb, 0x6bea, 0xc189, 0xa7a8, 0xa8b4, 0xce95, 0x64f6, 0x02d7, 0xf857, 0x9e76, 0x3415, 0x5234, 0x0972, 0x6f53, 0xc530, 0xa311, 0x5991, 0x3fb0, 0x95d3, 0xf3f2, 0x235f, 0x457e, 0xef1d, 0x893c, 0x73bc, 0x159d, 0xbffe, 0xd9df, 0x8299, 0xe4b8, 0x4edb, 0x28fa, 0xd27a, 0xb45b, 0x1e38, 0x7819, 0xee0a, 0x882b, 0x2248, 0x4469, 0xbee9, 0xd8c8, 0x72ab, 0x148a, 0x4fcc, 0x29ed, 0x838e, 0xe5af, 0x1f2f, 0x790e, 0xd36d, 0xb54c, 0x65e1, 0x03c0, 0xa9a3, 0xcf82, 0x3502, 0x5323, 0xf940, 0x9f61, 0xc427, 0xa206, 0x0865, 0x6e44, 0x94c4, 0xf2e5, 0x5886, 0x3ea7, 0x31bb, 0x579a, 0xfdf9, 0x9bd8, 0x6158, 0x0779, 0xad1a, 0xcb3b, 0x907d, 0xf65c, 0x5c3f, 0x3a1e, 0xc09e, 0xa6bf, 0x0cdc, 0x6afd, 0xba50, 0xdc71, 0x7612, 0x1033, 0xeab3, 0x8c92, 0x26f1, 0x40d0, 0x1b96, 0x7db7, 0xd7d4, 0xb1f5, 0x4b75, 0x2d54, 0x8737, 0xe116, 0x990f, 0xff2e, 0x554d, 0x336c, 0xc9ec, 0xafcd, 0x05ae, 0x638f, 0x38c9, 0x5ee8, 0xf48b, 0x92aa, 0x682a, 0x0e0b, 0xa468, 0xc249, 0x12e4, 0x74c5, 0xdea6, 0xb887, 0x4207, 0x2426, 0x8e45, 0xe864, 0xb322, 0xd503, 0x7f60, 0x1941, 0xe3c1, 0x85e0, 0x2f83, 0x49a2, 0x46be, 0x209f, 0x8afc, 0xecdd, 0x165d, 0x707c, 0xda1f, 0xbc3e, 0xe778, 0x8159, 0x2b3a, 0x4d1b, 0xb79b, 0xd1ba, 0x7bd9, 0x1df8, 0xcd55, 0xab74, 0x0117, 0x6736, 0x9db6, 0xfb97, 0x51f4, 0x37d5, 0x6c93, 0x0ab2, 0xa0d1, 0xc6f0, 0x3c70, 0x5a51, 0xf032, 0x9613, ], [ 0x0000, 0x1473, 0x28e6, 0x3c95, 0x51cc, 0x45bf, 0x792a, 0x6d59, 0xa398, 0xb7eb, 0x8b7e, 0x9f0d, 0xf254, 0xe627, 0xdab2, 0xcec1, 0x8f57, 0x9b24, 0xa7b1, 0xb3c2, 0xde9b, 0xcae8, 0xf67d, 0xe20e, 0x2ccf, 0x38bc, 0x0429, 0x105a, 0x7d03, 0x6970, 0x55e5, 0x4196, 0xd6c9, 0xc2ba, 0xfe2f, 0xea5c, 0x8705, 0x9376, 0xafe3, 0xbb90, 0x7551, 0x6122, 0x5db7, 0x49c4, 0x249d, 0x30ee, 0x0c7b, 0x1808, 0x599e, 0x4ded, 0x7178, 0x650b, 0x0852, 0x1c21, 0x20b4, 0x34c7, 0xfa06, 0xee75, 0xd2e0, 0xc693, 0xabca, 0xbfb9, 0x832c, 0x975f, 0x65f5, 0x7186, 0x4d13, 0x5960, 0x3439, 0x204a, 0x1cdf, 0x08ac, 0xc66d, 0xd21e, 0xee8b, 0xfaf8, 0x97a1, 0x83d2, 0xbf47, 0xab34, 0xeaa2, 0xfed1, 0xc244, 0xd637, 0xbb6e, 0xaf1d, 0x9388, 0x87fb, 0x493a, 0x5d49, 0x61dc, 0x75af, 0x18f6, 0x0c85, 0x3010, 0x2463, 0xb33c, 0xa74f, 0x9bda, 0x8fa9, 0xe2f0, 0xf683, 0xca16, 0xde65, 0x10a4, 0x04d7, 0x3842, 0x2c31, 0x4168, 0x551b, 0x698e, 0x7dfd, 0x3c6b, 0x2818, 0x148d, 0x00fe, 0x6da7, 0x79d4, 0x4541, 0x5132, 0x9ff3, 0x8b80, 0xb715, 0xa366, 0xce3f, 0xda4c, 0xe6d9, 0xf2aa, 0xcbea, 0xdf99, 0xe30c, 0xf77f, 0x9a26, 0x8e55, 0xb2c0, 0xa6b3, 0x6872, 0x7c01, 0x4094, 0x54e7, 0x39be, 0x2dcd, 0x1158, 0x052b, 0x44bd, 0x50ce, 0x6c5b, 0x7828, 0x1571, 0x0102, 0x3d97, 0x29e4, 0xe725, 0xf356, 0xcfc3, 0xdbb0, 0xb6e9, 0xa29a, 0x9e0f, 0x8a7c, 0x1d23, 0x0950, 0x35c5, 0x21b6, 0x4cef, 0x589c, 0x6409, 0x707a, 0xbebb, 0xaac8, 0x965d, 0x822e, 0xef77, 0xfb04, 0xc791, 0xd3e2, 0x9274, 0x8607, 0xba92, 0xaee1, 0xc3b8, 0xd7cb, 0xeb5e, 0xff2d, 0x31ec, 0x259f, 0x190a, 0x0d79, 0x6020, 0x7453, 0x48c6, 0x5cb5, 0xae1f, 0xba6c, 0x86f9, 0x928a, 0xffd3, 0xeba0, 0xd735, 0xc346, 0x0d87, 0x19f4, 0x2561, 0x3112, 0x5c4b, 0x4838, 0x74ad, 0x60de, 0x2148, 0x353b, 0x09ae, 0x1ddd, 0x7084, 0x64f7, 0x5862, 0x4c11, 0x82d0, 0x96a3, 0xaa36, 0xbe45, 0xd31c, 0xc76f, 0xfbfa, 0xef89, 0x78d6, 0x6ca5, 0x5030, 0x4443, 0x291a, 0x3d69, 0x01fc, 0x158f, 0xdb4e, 0xcf3d, 0xf3a8, 0xe7db, 0x8a82, 0x9ef1, 0xa264, 0xb617, 0xf781, 0xe3f2, 0xdf67, 0xcb14, 0xa64d, 0xb23e, 0x8eab, 0x9ad8, 0x5419, 0x406a, 0x7cff, 0x688c, 0x05d5, 0x11a6, 0x2d33, 0x3940, ], [ 0x0000, 0x5fb3, 0xbf66, 0xe0d5, 0xb6ab, 0xe918, 0x09cd, 0x567e, 0xa531, 0xfa82, 0x1a57, 0x45e4, 0x139a, 0x4c29, 0xacfc, 0xf34f, 0x8205, 0xddb6, 0x3d63, 0x62d0, 0x34ae, 0x6b1d, 0x8bc8, 0xd47b, 0x2734, 0x7887, 0x9852, 0xc7e1, 0x919f, 0xce2c, 0x2ef9, 0x714a, 0xcc6d, 0x93de, 0x730b, 0x2cb8, 0x7ac6, 0x2575, 0xc5a0, 0x9a13, 0x695c, 0x36ef, 0xd63a, 0x8989, 0xdff7, 0x8044, 0x6091, 0x3f22, 0x4e68, 0x11db, 0xf10e, 0xaebd, 0xf8c3, 0xa770, 0x47a5, 0x1816, 0xeb59, 0xb4ea, 0x543f, 0x0b8c, 0x5df2, 0x0241, 0xe294, 0xbd27, 0x50bd, 0x0f0e, 0xefdb, 0xb068, 0xe616, 0xb9a5, 0x5970, 0x06c3, 0xf58c, 0xaa3f, 0x4aea, 0x1559, 0x4327, 0x1c94, 0xfc41, 0xa3f2, 0xd2b8, 0x8d0b, 0x6dde, 0x326d, 0x6413, 0x3ba0, 0xdb75, 0x84c6, 0x7789, 0x283a, 0xc8ef, 0x975c, 0xc122, 0x9e91, 0x7e44, 0x21f7, 0x9cd0, 0xc363, 0x23b6, 0x7c05, 0x2a7b, 0x75c8, 0x951d, 0xcaae, 0x39e1, 0x6652, 0x8687, 0xd934, 0x8f4a, 0xd0f9, 0x302c, 0x6f9f, 0x1ed5, 0x4166, 0xa1b3, 0xfe00, 0xa87e, 0xf7cd, 0x1718, 0x48ab, 0xbbe4, 0xe457, 0x0482, 0x5b31, 0x0d4f, 0x52fc, 0xb229, 0xed9a, 0xa17a, 0xfec9, 0x1e1c, 0x41af, 0x17d1, 0x4862, 0xa8b7, 0xf704, 0x044b, 0x5bf8, 0xbb2d, 0xe49e, 0xb2e0, 0xed53, 0x0d86, 0x5235, 0x237f, 0x7ccc, 0x9c19, 0xc3aa, 0x95d4, 0xca67, 0x2ab2, 0x7501, 0x864e, 0xd9fd, 0x3928, 0x669b, 0x30e5, 0x6f56, 0x8f83, 0xd030, 0x6d17, 0x32a4, 0xd271, 0x8dc2, 0xdbbc, 0x840f, 0x64da, 0x3b69, 0xc826, 0x9795, 0x7740, 0x28f3, 0x7e8d, 0x213e, 0xc1eb, 0x9e58, 0xef12, 0xb0a1, 0x5074, 0x0fc7, 0x59b9, 0x060a, 0xe6df, 0xb96c, 0x4a23, 0x1590, 0xf545, 0xaaf6, 0xfc88, 0xa33b, 0x43ee, 0x1c5d, 0xf1c7, 0xae74, 0x4ea1, 0x1112, 0x476c, 0x18df, 0xf80a, 0xa7b9, 0x54f6, 0x0b45, 0xeb90, 0xb423, 0xe25d, 0xbdee, 0x5d3b, 0x0288, 0x73c2, 0x2c71, 0xcca4, 0x9317, 0xc569, 0x9ada, 0x7a0f, 0x25bc, 0xd6f3, 0x8940, 0x6995, 0x3626, 0x6058, 0x3feb, 0xdf3e, 0x808d, 0x3daa, 0x6219, 0x82cc, 0xdd7f, 0x8b01, 0xd4b2, 0x3467, 0x6bd4, 0x989b, 0xc728, 0x27fd, 0x784e, 0x2e30, 0x7183, 0x9156, 0xcee5, 0xbfaf, 0xe01c, 0x00c9, 0x5f7a, 0x0904, 0x56b7, 0xb662, 0xe9d1, 0x1a9e, 0x452d, 0xa5f8, 0xfa4b, 0xac35, 0xf386, 0x1353, 0x4ce0, ], [ 0x0000, 0x8a93, 0xdd41, 0x57d2, 0x72e5, 0xf876, 0xafa4, 0x2537, 0xe5ca, 0x6f59, 0x388b, 0xb218, 0x972f, 0x1dbc, 0x4a6e, 0xc0fd, 0x03f3, 0x8960, 0xdeb2, 0x5421, 0x7116, 0xfb85, 0xac57, 0x26c4, 0xe639, 0x6caa, 0x3b78, 0xb1eb, 0x94dc, 0x1e4f, 0x499d, 0xc30e, 0x07e6, 0x8d75, 0xdaa7, 0x5034, 0x7503, 0xff90, 0xa842, 0x22d1, 0xe22c, 0x68bf, 0x3f6d, 0xb5fe, 0x90c9, 0x1a5a, 0x4d88, 0xc71b, 0x0415, 0x8e86, 0xd954, 0x53c7, 0x76f0, 0xfc63, 0xabb1, 0x2122, 0xe1df, 0x6b4c, 0x3c9e, 0xb60d, 0x933a, 0x19a9, 0x4e7b, 0xc4e8, 0x0fcc, 0x855f, 0xd28d, 0x581e, 0x7d29, 0xf7ba, 0xa068, 0x2afb, 0xea06, 0x6095, 0x3747, 0xbdd4, 0x98e3, 0x1270, 0x45a2, 0xcf31, 0x0c3f, 0x86ac, 0xd17e, 0x5bed, 0x7eda, 0xf449, 0xa39b, 0x2908, 0xe9f5, 0x6366, 0x34b4, 0xbe27, 0x9b10, 0x1183, 0x4651, 0xccc2, 0x082a, 0x82b9, 0xd56b, 0x5ff8, 0x7acf, 0xf05c, 0xa78e, 0x2d1d, 0xede0, 0x6773, 0x30a1, 0xba32, 0x9f05, 0x1596, 0x4244, 0xc8d7, 0x0bd9, 0x814a, 0xd698, 0x5c0b, 0x793c, 0xf3af, 0xa47d, 0x2eee, 0xee13, 0x6480, 0x3352, 0xb9c1, 0x9cf6, 0x1665, 0x41b7, 0xcb24, 0x1f98, 0x950b, 0xc2d9, 0x484a, 0x6d7d, 0xe7ee, 0xb03c, 0x3aaf, 0xfa52, 0x70c1, 0x2713, 0xad80, 0x88b7, 0x0224, 0x55f6, 0xdf65, 0x1c6b, 0x96f8, 0xc12a, 0x4bb9, 0x6e8e, 0xe41d, 0xb3cf, 0x395c, 0xf9a1, 0x7332, 0x24e0, 0xae73, 0x8b44, 0x01d7, 0x5605, 0xdc96, 0x187e, 0x92ed, 0xc53f, 0x4fac, 0x6a9b, 0xe008, 0xb7da, 0x3d49, 0xfdb4, 0x7727, 0x20f5, 0xaa66, 0x8f51, 0x05c2, 0x5210, 0xd883, 0x1b8d, 0x911e, 0xc6cc, 0x4c5f, 0x6968, 0xe3fb, 0xb429, 0x3eba, 0xfe47, 0x74d4, 0x2306, 0xa995, 0x8ca2, 0x0631, 0x51e3, 0xdb70, 0x1054, 0x9ac7, 0xcd15, 0x4786, 0x62b1, 0xe822, 0xbff0, 0x3563, 0xf59e, 0x7f0d, 0x28df, 0xa24c, 0x877b, 0x0de8, 0x5a3a, 0xd0a9, 0x13a7, 0x9934, 0xcee6, 0x4475, 0x6142, 0xebd1, 0xbc03, 0x3690, 0xf66d, 0x7cfe, 0x2b2c, 0xa1bf, 0x8488, 0x0e1b, 0x59c9, 0xd35a, 0x17b2, 0x9d21, 0xcaf3, 0x4060, 0x6557, 0xefc4, 0xb816, 0x3285, 0xf278, 0x78eb, 0x2f39, 0xa5aa, 0x809d, 0x0a0e, 0x5ddc, 0xd74f, 0x1441, 0x9ed2, 0xc900, 0x4393, 0x66a4, 0xec37, 0xbbe5, 0x3176, 0xf18b, 0x7b18, 0x2cca, 0xa659, 0x836e, 0x09fd, 0x5e2f, 0xd4bc, ], [ 0x0000, 0x3f30, 0x7e60, 0x4150, 0xfcc0, 0xc3f0, 0x82a0, 0xbd90, 0x31e7, 0x0ed7, 0x4f87, 0x70b7, 0xcd27, 0xf217, 0xb347, 0x8c77, 0x63ce, 0x5cfe, 0x1dae, 0x229e, 0x9f0e, 0xa03e, 0xe16e, 0xde5e, 0x5229, 0x6d19, 0x2c49, 0x1379, 0xaee9, 0x91d9, 0xd089, 0xefb9, 0xc79c, 0xf8ac, 0xb9fc, 0x86cc, 0x3b5c, 0x046c, 0x453c, 0x7a0c, 0xf67b, 0xc94b, 0x881b, 0xb72b, 0x0abb, 0x358b, 0x74db, 0x4beb, 0xa452, 0x9b62, 0xda32, 0xe502, 0x5892, 0x67a2, 0x26f2, 0x19c2, 0x95b5, 0xaa85, 0xebd5, 0xd4e5, 0x6975, 0x5645, 0x1715, 0x2825, 0x475f, 0x786f, 0x393f, 0x060f, 0xbb9f, 0x84af, 0xc5ff, 0xfacf, 0x76b8, 0x4988, 0x08d8, 0x37e8, 0x8a78, 0xb548, 0xf418, 0xcb28, 0x2491, 0x1ba1, 0x5af1, 0x65c1, 0xd851, 0xe761, 0xa631, 0x9901, 0x1576, 0x2a46, 0x6b16, 0x5426, 0xe9b6, 0xd686, 0x97d6, 0xa8e6, 0x80c3, 0xbff3, 0xfea3, 0xc193, 0x7c03, 0x4333, 0x0263, 0x3d53, 0xb124, 0x8e14, 0xcf44, 0xf074, 0x4de4, 0x72d4, 0x3384, 0x0cb4, 0xe30d, 0xdc3d, 0x9d6d, 0xa25d, 0x1fcd, 0x20fd, 0x61ad, 0x5e9d, 0xd2ea, 0xedda, 0xac8a, 0x93ba, 0x2e2a, 0x111a, 0x504a, 0x6f7a, 0x8ebe, 0xb18e, 0xf0de, 0xcfee, 0x727e, 0x4d4e, 0x0c1e, 0x332e, 0xbf59, 0x8069, 0xc139, 0xfe09, 0x4399, 0x7ca9, 0x3df9, 0x02c9, 0xed70, 0xd240, 0x9310, 0xac20, 0x11b0, 0x2e80, 0x6fd0, 0x50e0, 0xdc97, 0xe3a7, 0xa2f7, 0x9dc7, 0x2057, 0x1f67, 0x5e37, 0x6107, 0x4922, 0x7612, 0x3742, 0x0872, 0xb5e2, 0x8ad2, 0xcb82, 0xf4b2, 0x78c5, 0x47f5, 0x06a5, 0x3995, 0x8405, 0xbb35, 0xfa65, 0xc555, 0x2aec, 0x15dc, 0x548c, 0x6bbc, 0xd62c, 0xe91c, 0xa84c, 0x977c, 0x1b0b, 0x243b, 0x656b, 0x5a5b, 0xe7cb, 0xd8fb, 0x99ab, 0xa69b, 0xc9e1, 0xf6d1, 0xb781, 0x88b1, 0x3521, 0x0a11, 0x4b41, 0x7471, 0xf806, 0xc736, 0x8666, 0xb956, 0x04c6, 0x3bf6, 0x7aa6, 0x4596, 0xaa2f, 0x951f, 0xd44f, 0xeb7f, 0x56ef, 0x69df, 0x288f, 0x17bf, 0x9bc8, 0xa4f8, 0xe5a8, 0xda98, 0x6708, 0x5838, 0x1968, 0x2658, 0x0e7d, 0x314d, 0x701d, 0x4f2d, 0xf2bd, 0xcd8d, 0x8cdd, 0xb3ed, 0x3f9a, 0x00aa, 0x41fa, 0x7eca, 0xc35a, 0xfc6a, 0xbd3a, 0x820a, 0x6db3, 0x5283, 0x13d3, 0x2ce3, 0x9173, 0xae43, 0xef13, 0xd023, 0x5c54, 0x6364, 0x2234, 0x1d04, 0xa094, 0x9fa4, 0xdef4, 0xe1c4, ], [ 0x0000, 0xd51b, 0x6251, 0xb74a, 0xc4a2, 0x11b9, 0xa6f3, 0x73e8, 0x4123, 0x9438, 0x2372, 0xf669, 0x8581, 0x509a, 0xe7d0, 0x32cb, 0x8246, 0x575d, 0xe017, 0x350c, 0x46e4, 0x93ff, 0x24b5, 0xf1ae, 0xc365, 0x167e, 0xa134, 0x742f, 0x07c7, 0xd2dc, 0x6596, 0xb08d, 0xcceb, 0x19f0, 0xaeba, 0x7ba1, 0x0849, 0xdd52, 0x6a18, 0xbf03, 0x8dc8, 0x58d3, 0xef99, 0x3a82, 0x496a, 0x9c71, 0x2b3b, 0xfe20, 0x4ead, 0x9bb6, 0x2cfc, 0xf9e7, 0x8a0f, 0x5f14, 0xe85e, 0x3d45, 0x0f8e, 0xda95, 0x6ddf, 0xb8c4, 0xcb2c, 0x1e37, 0xa97d, 0x7c66, 0x51b1, 0x84aa, 0x33e0, 0xe6fb, 0x9513, 0x4008, 0xf742, 0x2259, 0x1092, 0xc589, 0x72c3, 0xa7d8, 0xd430, 0x012b, 0xb661, 0x637a, 0xd3f7, 0x06ec, 0xb1a6, 0x64bd, 0x1755, 0xc24e, 0x7504, 0xa01f, 0x92d4, 0x47cf, 0xf085, 0x259e, 0x5676, 0x836d, 0x3427, 0xe13c, 0x9d5a, 0x4841, 0xff0b, 0x2a10, 0x59f8, 0x8ce3, 0x3ba9, 0xeeb2, 0xdc79, 0x0962, 0xbe28, 0x6b33, 0x18db, 0xcdc0, 0x7a8a, 0xaf91, 0x1f1c, 0xca07, 0x7d4d, 0xa856, 0xdbbe, 0x0ea5, 0xb9ef, 0x6cf4, 0x5e3f, 0x8b24, 0x3c6e, 0xe975, 0x9a9d, 0x4f86, 0xf8cc, 0x2dd7, 0xa362, 0x7679, 0xc133, 0x1428, 0x67c0, 0xb2db, 0x0591, 0xd08a, 0xe241, 0x375a, 0x8010, 0x550b, 0x26e3, 0xf3f8, 0x44b2, 0x91a9, 0x2124, 0xf43f, 0x4375, 0x966e, 0xe586, 0x309d, 0x87d7, 0x52cc, 0x6007, 0xb51c, 0x0256, 0xd74d, 0xa4a5, 0x71be, 0xc6f4, 0x13ef, 0x6f89, 0xba92, 0x0dd8, 0xd8c3, 0xab2b, 0x7e30, 0xc97a, 0x1c61, 0x2eaa, 0xfbb1, 0x4cfb, 0x99e0, 0xea08, 0x3f13, 0x8859, 0x5d42, 0xedcf, 0x38d4, 0x8f9e, 0x5a85, 0x296d, 0xfc76, 0x4b3c, 0x9e27, 0xacec, 0x79f7, 0xcebd, 0x1ba6, 0x684e, 0xbd55, 0x0a1f, 0xdf04, 0xf2d3, 0x27c8, 0x9082, 0x4599, 0x3671, 0xe36a, 0x5420, 0x813b, 0xb3f0, 0x66eb, 0xd1a1, 0x04ba, 0x7752, 0xa249, 0x1503, 0xc018, 0x7095, 0xa58e, 0x12c4, 0xc7df, 0xb437, 0x612c, 0xd666, 0x037d, 0x31b6, 0xe4ad, 0x53e7, 0x86fc, 0xf514, 0x200f, 0x9745, 0x425e, 0x3e38, 0xeb23, 0x5c69, 0x8972, 0xfa9a, 0x2f81, 0x98cb, 0x4dd0, 0x7f1b, 0xaa00, 0x1d4a, 0xc851, 0xbbb9, 0x6ea2, 0xd9e8, 0x0cf3, 0xbc7e, 0x6965, 0xde2f, 0x0b34, 0x78dc, 0xadc7, 0x1a8d, 0xcf96, 0xfd5d, 0x2846, 0x9f0c, 0x4a17, 0x39ff, 0xece4, 0x5bae, 0x8eb5, ], [ 0x0000, 0x8ea3, 0xd521, 0x5b82, 0x6225, 0xec86, 0xb704, 0x39a7, 0xc44a, 0x4ae9, 0x116b, 0x9fc8, 0xa66f, 0x28cc, 0x734e, 0xfded, 0x40f3, 0xce50, 0x95d2, 0x1b71, 0x22d6, 0xac75, 0xf7f7, 0x7954, 0x84b9, 0x0a1a, 0x5198, 0xdf3b, 0xe69c, 0x683f, 0x33bd, 0xbd1e, 0x81e6, 0x0f45, 0x54c7, 0xda64, 0xe3c3, 0x6d60, 0x36e2, 0xb841, 0x45ac, 0xcb0f, 0x908d, 0x1e2e, 0x2789, 0xa92a, 0xf2a8, 0x7c0b, 0xc115, 0x4fb6, 0x1434, 0x9a97, 0xa330, 0x2d93, 0x7611, 0xf8b2, 0x055f, 0x8bfc, 0xd07e, 0x5edd, 0x677a, 0xe9d9, 0xb25b, 0x3cf8, 0xcbab, 0x4508, 0x1e8a, 0x9029, 0xa98e, 0x272d, 0x7caf, 0xf20c, 0x0fe1, 0x8142, 0xdac0, 0x5463, 0x6dc4, 0xe367, 0xb8e5, 0x3646, 0x8b58, 0x05fb, 0x5e79, 0xd0da, 0xe97d, 0x67de, 0x3c5c, 0xb2ff, 0x4f12, 0xc1b1, 0x9a33, 0x1490, 0x2d37, 0xa394, 0xf816, 0x76b5, 0x4a4d, 0xc4ee, 0x9f6c, 0x11cf, 0x2868, 0xa6cb, 0xfd49, 0x73ea, 0x8e07, 0x00a4, 0x5b26, 0xd585, 0xec22, 0x6281, 0x3903, 0xb7a0, 0x0abe, 0x841d, 0xdf9f, 0x513c, 0x689b, 0xe638, 0xbdba, 0x3319, 0xcef4, 0x4057, 0x1bd5, 0x9576, 0xacd1, 0x2272, 0x79f0, 0xf753, 0x5f31, 0xd192, 0x8a10, 0x04b3, 0x3d14, 0xb3b7, 0xe835, 0x6696, 0x9b7b, 0x15d8, 0x4e5a, 0xc0f9, 0xf95e, 0x77fd, 0x2c7f, 0xa2dc, 0x1fc2, 0x9161, 0xcae3, 0x4440, 0x7de7, 0xf344, 0xa8c6, 0x2665, 0xdb88, 0x552b, 0x0ea9, 0x800a, 0xb9ad, 0x370e, 0x6c8c, 0xe22f, 0xded7, 0x5074, 0x0bf6, 0x8555, 0xbcf2, 0x3251, 0x69d3, 0xe770, 0x1a9d, 0x943e, 0xcfbc, 0x411f, 0x78b8, 0xf61b, 0xad99, 0x233a, 0x9e24, 0x1087, 0x4b05, 0xc5a6, 0xfc01, 0x72a2, 0x2920, 0xa783, 0x5a6e, 0xd4cd, 0x8f4f, 0x01ec, 0x384b, 0xb6e8, 0xed6a, 0x63c9, 0x949a, 0x1a39, 0x41bb, 0xcf18, 0xf6bf, 0x781c, 0x239e, 0xad3d, 0x50d0, 0xde73, 0x85f1, 0x0b52, 0x32f5, 0xbc56, 0xe7d4, 0x6977, 0xd469, 0x5aca, 0x0148, 0x8feb, 0xb64c, 0x38ef, 0x636d, 0xedce, 0x1023, 0x9e80, 0xc502, 0x4ba1, 0x7206, 0xfca5, 0xa727, 0x2984, 0x157c, 0x9bdf, 0xc05d, 0x4efe, 0x7759, 0xf9fa, 0xa278, 0x2cdb, 0xd136, 0x5f95, 0x0417, 0x8ab4, 0xb313, 0x3db0, 0x6632, 0xe891, 0x558f, 0xdb2c, 0x80ae, 0x0e0d, 0x37aa, 0xb909, 0xe28b, 0x6c28, 0x91c5, 0x1f66, 0x44e4, 0xca47, 0xf3e0, 0x7d43, 0x26c1, 0xa862, ], [ 0x0000, 0xbe62, 0xb4a3, 0x0ac1, 0xa121, 0x1f43, 0x1582, 0xabe0, 0x8a25, 0x3447, 0x3e86, 0x80e4, 0x2b04, 0x9566, 0x9fa7, 0x21c5, 0xdc2d, 0x624f, 0x688e, 0xd6ec, 0x7d0c, 0xc36e, 0xc9af, 0x77cd, 0x5608, 0xe86a, 0xe2ab, 0x5cc9, 0xf729, 0x494b, 0x438a, 0xfde8, 0x703d, 0xce5f, 0xc49e, 0x7afc, 0xd11c, 0x6f7e, 0x65bf, 0xdbdd, 0xfa18, 0x447a, 0x4ebb, 0xf0d9, 0x5b39, 0xe55b, 0xef9a, 0x51f8, 0xac10, 0x1272, 0x18b3, 0xa6d1, 0x0d31, 0xb353, 0xb992, 0x07f0, 0x2635, 0x9857, 0x9296, 0x2cf4, 0x8714, 0x3976, 0x33b7, 0x8dd5, 0xe07a, 0x5e18, 0x54d9, 0xeabb, 0x415b, 0xff39, 0xf5f8, 0x4b9a, 0x6a5f, 0xd43d, 0xdefc, 0x609e, 0xcb7e, 0x751c, 0x7fdd, 0xc1bf, 0x3c57, 0x8235, 0x88f4, 0x3696, 0x9d76, 0x2314, 0x29d5, 0x97b7, 0xb672, 0x0810, 0x02d1, 0xbcb3, 0x1753, 0xa931, 0xa3f0, 0x1d92, 0x9047, 0x2e25, 0x24e4, 0x9a86, 0x3166, 0x8f04, 0x85c5, 0x3ba7, 0x1a62, 0xa400, 0xaec1, 0x10a3, 0xbb43, 0x0521, 0x0fe0, 0xb182, 0x4c6a, 0xf208, 0xf8c9, 0x46ab, 0xed4b, 0x5329, 0x59e8, 0xe78a, 0xc64f, 0x782d, 0x72ec, 0xcc8e, 0x676e, 0xd90c, 0xd3cd, 0x6daf, 0x0893, 0xb6f1, 0xbc30, 0x0252, 0xa9b2, 0x17d0, 0x1d11, 0xa373, 0x82b6, 0x3cd4, 0x3615, 0x8877, 0x2397, 0x9df5, 0x9734, 0x2956, 0xd4be, 0x6adc, 0x601d, 0xde7f, 0x759f, 0xcbfd, 0xc13c, 0x7f5e, 0x5e9b, 0xe0f9, 0xea38, 0x545a, 0xffba, 0x41d8, 0x4b19, 0xf57b, 0x78ae, 0xc6cc, 0xcc0d, 0x726f, 0xd98f, 0x67ed, 0x6d2c, 0xd34e, 0xf28b, 0x4ce9, 0x4628, 0xf84a, 0x53aa, 0xedc8, 0xe709, 0x596b, 0xa483, 0x1ae1, 0x1020, 0xae42, 0x05a2, 0xbbc0, 0xb101, 0x0f63, 0x2ea6, 0x90c4, 0x9a05, 0x2467, 0x8f87, 0x31e5, 0x3b24, 0x8546, 0xe8e9, 0x568b, 0x5c4a, 0xe228, 0x49c8, 0xf7aa, 0xfd6b, 0x4309, 0x62cc, 0xdcae, 0xd66f, 0x680d, 0xc3ed, 0x7d8f, 0x774e, 0xc92c, 0x34c4, 0x8aa6, 0x8067, 0x3e05, 0x95e5, 0x2b87, 0x2146, 0x9f24, 0xbee1, 0x0083, 0x0a42, 0xb420, 0x1fc0, 0xa1a2, 0xab63, 0x1501, 0x98d4, 0x26b6, 0x2c77, 0x9215, 0x39f5, 0x8797, 0x8d56, 0x3334, 0x12f1, 0xac93, 0xa652, 0x1830, 0xb3d0, 0x0db2, 0x0773, 0xb911, 0x44f9, 0xfa9b, 0xf05a, 0x4e38, 0xe5d8, 0x5bba, 0x517b, 0xef19, 0xcedc, 0x70be, 0x7a7f, 0xc41d, 0x6ffd, 0xd19f, 0xdb5e, 0x653c, ], [ 0x0000, 0x1126, 0x224c, 0x336a, 0x4498, 0x55be, 0x66d4, 0x77f2, 0x8930, 0x9816, 0xab7c, 0xba5a, 0xcda8, 0xdc8e, 0xefe4, 0xfec2, 0xda07, 0xcb21, 0xf84b, 0xe96d, 0x9e9f, 0x8fb9, 0xbcd3, 0xadf5, 0x5337, 0x4211, 0x717b, 0x605d, 0x17af, 0x0689, 0x35e3, 0x24c5, 0x7c69, 0x6d4f, 0x5e25, 0x4f03, 0x38f1, 0x29d7, 0x1abd, 0x0b9b, 0xf559, 0xe47f, 0xd715, 0xc633, 0xb1c1, 0xa0e7, 0x938d, 0x82ab, 0xa66e, 0xb748, 0x8422, 0x9504, 0xe2f6, 0xf3d0, 0xc0ba, 0xd19c, 0x2f5e, 0x3e78, 0x0d12, 0x1c34, 0x6bc6, 0x7ae0, 0x498a, 0x58ac, 0xf8d2, 0xe9f4, 0xda9e, 0xcbb8, 0xbc4a, 0xad6c, 0x9e06, 0x8f20, 0x71e2, 0x60c4, 0x53ae, 0x4288, 0x357a, 0x245c, 0x1736, 0x0610, 0x22d5, 0x33f3, 0x0099, 0x11bf, 0x664d, 0x776b, 0x4401, 0x5527, 0xabe5, 0xbac3, 0x89a9, 0x988f, 0xef7d, 0xfe5b, 0xcd31, 0xdc17, 0x84bb, 0x959d, 0xa6f7, 0xb7d1, 0xc023, 0xd105, 0xe26f, 0xf349, 0x0d8b, 0x1cad, 0x2fc7, 0x3ee1, 0x4913, 0x5835, 0x6b5f, 0x7a79, 0x5ebc, 0x4f9a, 0x7cf0, 0x6dd6, 0x1a24, 0x0b02, 0x3868, 0x294e, 0xd78c, 0xc6aa, 0xf5c0, 0xe4e6, 0x9314, 0x8232, 0xb158, 0xa07e, 0x39c3, 0x28e5, 0x1b8f, 0x0aa9, 0x7d5b, 0x6c7d, 0x5f17, 0x4e31, 0xb0f3, 0xa1d5, 0x92bf, 0x8399, 0xf46b, 0xe54d, 0xd627, 0xc701, 0xe3c4, 0xf2e2, 0xc188, 0xd0ae, 0xa75c, 0xb67a, 0x8510, 0x9436, 0x6af4, 0x7bd2, 0x48b8, 0x599e, 0x2e6c, 0x3f4a, 0x0c20, 0x1d06, 0x45aa, 0x548c, 0x67e6, 0x76c0, 0x0132, 0x1014, 0x237e, 0x3258, 0xcc9a, 0xddbc, 0xeed6, 0xfff0, 0x8802, 0x9924, 0xaa4e, 0xbb68, 0x9fad, 0x8e8b, 0xbde1, 0xacc7, 0xdb35, 0xca13, 0xf979, 0xe85f, 0x169d, 0x07bb, 0x34d1, 0x25f7, 0x5205, 0x4323, 0x7049, 0x616f, 0xc111, 0xd037, 0xe35d, 0xf27b, 0x8589, 0x94af, 0xa7c5, 0xb6e3, 0x4821, 0x5907, 0x6a6d, 0x7b4b, 0x0cb9, 0x1d9f, 0x2ef5, 0x3fd3, 0x1b16, 0x0a30, 0x395a, 0x287c, 0x5f8e, 0x4ea8, 0x7dc2, 0x6ce4, 0x9226, 0x8300, 0xb06a, 0xa14c, 0xd6be, 0xc798, 0xf4f2, 0xe5d4, 0xbd78, 0xac5e, 0x9f34, 0x8e12, 0xf9e0, 0xe8c6, 0xdbac, 0xca8a, 0x3448, 0x256e, 0x1604, 0x0722, 0x70d0, 0x61f6, 0x529c, 0x43ba, 0x677f, 0x7659, 0x4533, 0x5415, 0x23e7, 0x32c1, 0x01ab, 0x108d, 0xee4f, 0xff69, 0xcc03, 0xdd25, 0xaad7, 0xbbf1, 0x889b, 0x99bd, ], ]; pub static CRC16_CMS_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011, 0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022, 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072, 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041, 0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2, 0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1, 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1, 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082, 0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192, 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1, 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1, 0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2, 0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151, 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162, 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132, 0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101, 0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312, 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321, 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371, 0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342, 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1, 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2, 0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2, 0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381, 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291, 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2, 0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2, 0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1, 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252, 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261, 0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231, 0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202, ], [ 0x0000, 0x8603, 0x8c03, 0x0a00, 0x9803, 0x1e00, 0x1400, 0x9203, 0xb003, 0x3600, 0x3c00, 0xba03, 0x2800, 0xae03, 0xa403, 0x2200, 0xe003, 0x6600, 0x6c00, 0xea03, 0x7800, 0xfe03, 0xf403, 0x7200, 0x5000, 0xd603, 0xdc03, 0x5a00, 0xc803, 0x4e00, 0x4400, 0xc203, 0x4003, 0xc600, 0xcc00, 0x4a03, 0xd800, 0x5e03, 0x5403, 0xd200, 0xf000, 0x7603, 0x7c03, 0xfa00, 0x6803, 0xee00, 0xe400, 0x6203, 0xa000, 0x2603, 0x2c03, 0xaa00, 0x3803, 0xbe00, 0xb400, 0x3203, 0x1003, 0x9600, 0x9c00, 0x1a03, 0x8800, 0x0e03, 0x0403, 0x8200, 0x8006, 0x0605, 0x0c05, 0x8a06, 0x1805, 0x9e06, 0x9406, 0x1205, 0x3005, 0xb606, 0xbc06, 0x3a05, 0xa806, 0x2e05, 0x2405, 0xa206, 0x6005, 0xe606, 0xec06, 0x6a05, 0xf806, 0x7e05, 0x7405, 0xf206, 0xd006, 0x5605, 0x5c05, 0xda06, 0x4805, 0xce06, 0xc406, 0x4205, 0xc005, 0x4606, 0x4c06, 0xca05, 0x5806, 0xde05, 0xd405, 0x5206, 0x7006, 0xf605, 0xfc05, 0x7a06, 0xe805, 0x6e06, 0x6406, 0xe205, 0x2006, 0xa605, 0xac05, 0x2a06, 0xb805, 0x3e06, 0x3406, 0xb205, 0x9005, 0x1606, 0x1c06, 0x9a05, 0x0806, 0x8e05, 0x8405, 0x0206, 0x8009, 0x060a, 0x0c0a, 0x8a09, 0x180a, 0x9e09, 0x9409, 0x120a, 0x300a, 0xb609, 0xbc09, 0x3a0a, 0xa809, 0x2e0a, 0x240a, 0xa209, 0x600a, 0xe609, 0xec09, 0x6a0a, 0xf809, 0x7e0a, 0x740a, 0xf209, 0xd009, 0x560a, 0x5c0a, 0xda09, 0x480a, 0xce09, 0xc409, 0x420a, 0xc00a, 0x4609, 0x4c09, 0xca0a, 0x5809, 0xde0a, 0xd40a, 0x5209, 0x7009, 0xf60a, 0xfc0a, 0x7a09, 0xe80a, 0x6e09, 0x6409, 0xe20a, 0x2009, 0xa60a, 0xac0a, 0x2a09, 0xb80a, 0x3e09, 0x3409, 0xb20a, 0x900a, 0x1609, 0x1c09, 0x9a0a, 0x0809, 0x8e0a, 0x840a, 0x0209, 0x000f, 0x860c, 0x8c0c, 0x0a0f, 0x980c, 0x1e0f, 0x140f, 0x920c, 0xb00c, 0x360f, 0x3c0f, 0xba0c, 0x280f, 0xae0c, 0xa40c, 0x220f, 0xe00c, 0x660f, 0x6c0f, 0xea0c, 0x780f, 0xfe0c, 0xf40c, 0x720f, 0x500f, 0xd60c, 0xdc0c, 0x5a0f, 0xc80c, 0x4e0f, 0x440f, 0xc20c, 0x400c, 0xc60f, 0xcc0f, 0x4a0c, 0xd80f, 0x5e0c, 0x540c, 0xd20f, 0xf00f, 0x760c, 0x7c0c, 0xfa0f, 0x680c, 0xee0f, 0xe40f, 0x620c, 0xa00f, 0x260c, 0x2c0c, 0xaa0f, 0x380c, 0xbe0f, 0xb40f, 0x320c, 0x100c, 0x960f, 0x9c0f, 0x1a0c, 0x880f, 0x0e0c, 0x040c, 0x820f, ], [ 0x0000, 0x8017, 0x802b, 0x003c, 0x8053, 0x0044, 0x0078, 0x806f, 0x80a3, 0x00b4, 0x0088, 0x809f, 0x00f0, 0x80e7, 0x80db, 0x00cc, 0x8143, 0x0154, 0x0168, 0x817f, 0x0110, 0x8107, 0x813b, 0x012c, 0x01e0, 0x81f7, 0x81cb, 0x01dc, 0x81b3, 0x01a4, 0x0198, 0x818f, 0x8283, 0x0294, 0x02a8, 0x82bf, 0x02d0, 0x82c7, 0x82fb, 0x02ec, 0x0220, 0x8237, 0x820b, 0x021c, 0x8273, 0x0264, 0x0258, 0x824f, 0x03c0, 0x83d7, 0x83eb, 0x03fc, 0x8393, 0x0384, 0x03b8, 0x83af, 0x8363, 0x0374, 0x0348, 0x835f, 0x0330, 0x8327, 0x831b, 0x030c, 0x8503, 0x0514, 0x0528, 0x853f, 0x0550, 0x8547, 0x857b, 0x056c, 0x05a0, 0x85b7, 0x858b, 0x059c, 0x85f3, 0x05e4, 0x05d8, 0x85cf, 0x0440, 0x8457, 0x846b, 0x047c, 0x8413, 0x0404, 0x0438, 0x842f, 0x84e3, 0x04f4, 0x04c8, 0x84df, 0x04b0, 0x84a7, 0x849b, 0x048c, 0x0780, 0x8797, 0x87ab, 0x07bc, 0x87d3, 0x07c4, 0x07f8, 0x87ef, 0x8723, 0x0734, 0x0708, 0x871f, 0x0770, 0x8767, 0x875b, 0x074c, 0x86c3, 0x06d4, 0x06e8, 0x86ff, 0x0690, 0x8687, 0x86bb, 0x06ac, 0x0660, 0x8677, 0x864b, 0x065c, 0x8633, 0x0624, 0x0618, 0x860f, 0x8a03, 0x0a14, 0x0a28, 0x8a3f, 0x0a50, 0x8a47, 0x8a7b, 0x0a6c, 0x0aa0, 0x8ab7, 0x8a8b, 0x0a9c, 0x8af3, 0x0ae4, 0x0ad8, 0x8acf, 0x0b40, 0x8b57, 0x8b6b, 0x0b7c, 0x8b13, 0x0b04, 0x0b38, 0x8b2f, 0x8be3, 0x0bf4, 0x0bc8, 0x8bdf, 0x0bb0, 0x8ba7, 0x8b9b, 0x0b8c, 0x0880, 0x8897, 0x88ab, 0x08bc, 0x88d3, 0x08c4, 0x08f8, 0x88ef, 0x8823, 0x0834, 0x0808, 0x881f, 0x0870, 0x8867, 0x885b, 0x084c, 0x89c3, 0x09d4, 0x09e8, 0x89ff, 0x0990, 0x8987, 0x89bb, 0x09ac, 0x0960, 0x8977, 0x894b, 0x095c, 0x8933, 0x0924, 0x0918, 0x890f, 0x0f00, 0x8f17, 0x8f2b, 0x0f3c, 0x8f53, 0x0f44, 0x0f78, 0x8f6f, 0x8fa3, 0x0fb4, 0x0f88, 0x8f9f, 0x0ff0, 0x8fe7, 0x8fdb, 0x0fcc, 0x8e43, 0x0e54, 0x0e68, 0x8e7f, 0x0e10, 0x8e07, 0x8e3b, 0x0e2c, 0x0ee0, 0x8ef7, 0x8ecb, 0x0edc, 0x8eb3, 0x0ea4, 0x0e98, 0x8e8f, 0x8d83, 0x0d94, 0x0da8, 0x8dbf, 0x0dd0, 0x8dc7, 0x8dfb, 0x0dec, 0x0d20, 0x8d37, 0x8d0b, 0x0d1c, 0x8d73, 0x0d64, 0x0d58, 0x8d4f, 0x0cc0, 0x8cd7, 0x8ceb, 0x0cfc, 0x8c93, 0x0c84, 0x0cb8, 0x8caf, 0x8c63, 0x0c74, 0x0c48, 0x8c5f, 0x0c30, 0x8c27, 0x8c1b, 0x0c0c, ], [ 0x0000, 0x9403, 0xa803, 0x3c00, 0xd003, 0x4400, 0x7800, 0xec03, 0x2003, 0xb400, 0x8800, 0x1c03, 0xf000, 0x6403, 0x5803, 0xcc00, 0x4006, 0xd405, 0xe805, 0x7c06, 0x9005, 0x0406, 0x3806, 0xac05, 0x6005, 0xf406, 0xc806, 0x5c05, 0xb006, 0x2405, 0x1805, 0x8c06, 0x800c, 0x140f, 0x280f, 0xbc0c, 0x500f, 0xc40c, 0xf80c, 0x6c0f, 0xa00f, 0x340c, 0x080c, 0x9c0f, 0x700c, 0xe40f, 0xd80f, 0x4c0c, 0xc00a, 0x5409, 0x6809, 0xfc0a, 0x1009, 0x840a, 0xb80a, 0x2c09, 0xe009, 0x740a, 0x480a, 0xdc09, 0x300a, 0xa409, 0x9809, 0x0c0a, 0x801d, 0x141e, 0x281e, 0xbc1d, 0x501e, 0xc41d, 0xf81d, 0x6c1e, 0xa01e, 0x341d, 0x081d, 0x9c1e, 0x701d, 0xe41e, 0xd81e, 0x4c1d, 0xc01b, 0x5418, 0x6818, 0xfc1b, 0x1018, 0x841b, 0xb81b, 0x2c18, 0xe018, 0x741b, 0x481b, 0xdc18, 0x301b, 0xa418, 0x9818, 0x0c1b, 0x0011, 0x9412, 0xa812, 0x3c11, 0xd012, 0x4411, 0x7811, 0xec12, 0x2012, 0xb411, 0x8811, 0x1c12, 0xf011, 0x6412, 0x5812, 0xcc11, 0x4017, 0xd414, 0xe814, 0x7c17, 0x9014, 0x0417, 0x3817, 0xac14, 0x6014, 0xf417, 0xc817, 0x5c14, 0xb017, 0x2414, 0x1814, 0x8c17, 0x803f, 0x143c, 0x283c, 0xbc3f, 0x503c, 0xc43f, 0xf83f, 0x6c3c, 0xa03c, 0x343f, 0x083f, 0x9c3c, 0x703f, 0xe43c, 0xd83c, 0x4c3f, 0xc039, 0x543a, 0x683a, 0xfc39, 0x103a, 0x8439, 0xb839, 0x2c3a, 0xe03a, 0x7439, 0x4839, 0xdc3a, 0x3039, 0xa43a, 0x983a, 0x0c39, 0x0033, 0x9430, 0xa830, 0x3c33, 0xd030, 0x4433, 0x7833, 0xec30, 0x2030, 0xb433, 0x8833, 0x1c30, 0xf033, 0x6430, 0x5830, 0xcc33, 0x4035, 0xd436, 0xe836, 0x7c35, 0x9036, 0x0435, 0x3835, 0xac36, 0x6036, 0xf435, 0xc835, 0x5c36, 0xb035, 0x2436, 0x1836, 0x8c35, 0x0022, 0x9421, 0xa821, 0x3c22, 0xd021, 0x4422, 0x7822, 0xec21, 0x2021, 0xb422, 0x8822, 0x1c21, 0xf022, 0x6421, 0x5821, 0xcc22, 0x4024, 0xd427, 0xe827, 0x7c24, 0x9027, 0x0424, 0x3824, 0xac27, 0x6027, 0xf424, 0xc824, 0x5c27, 0xb024, 0x2427, 0x1827, 0x8c24, 0x802e, 0x142d, 0x282d, 0xbc2e, 0x502d, 0xc42e, 0xf82e, 0x6c2d, 0xa02d, 0x342e, 0x082e, 0x9c2d, 0x702e, 0xe42d, 0xd82d, 0x4c2e, 0xc028, 0x542b, 0x682b, 0xfc28, 0x102b, 0x8428, 0xb828, 0x2c2b, 0xe02b, 0x7428, 0x4828, 0xdc2b, 0x3028, 0xa42b, 0x982b, 0x0c28, ], [ 0x0000, 0x807b, 0x80f3, 0x0088, 0x81e3, 0x0198, 0x0110, 0x816b, 0x83c3, 0x03b8, 0x0330, 0x834b, 0x0220, 0x825b, 0x82d3, 0x02a8, 0x8783, 0x07f8, 0x0770, 0x870b, 0x0660, 0x861b, 0x8693, 0x06e8, 0x0440, 0x843b, 0x84b3, 0x04c8, 0x85a3, 0x05d8, 0x0550, 0x852b, 0x8f03, 0x0f78, 0x0ff0, 0x8f8b, 0x0ee0, 0x8e9b, 0x8e13, 0x0e68, 0x0cc0, 0x8cbb, 0x8c33, 0x0c48, 0x8d23, 0x0d58, 0x0dd0, 0x8dab, 0x0880, 0x88fb, 0x8873, 0x0808, 0x8963, 0x0918, 0x0990, 0x89eb, 0x8b43, 0x0b38, 0x0bb0, 0x8bcb, 0x0aa0, 0x8adb, 0x8a53, 0x0a28, 0x9e03, 0x1e78, 0x1ef0, 0x9e8b, 0x1fe0, 0x9f9b, 0x9f13, 0x1f68, 0x1dc0, 0x9dbb, 0x9d33, 0x1d48, 0x9c23, 0x1c58, 0x1cd0, 0x9cab, 0x1980, 0x99fb, 0x9973, 0x1908, 0x9863, 0x1818, 0x1890, 0x98eb, 0x9a43, 0x1a38, 0x1ab0, 0x9acb, 0x1ba0, 0x9bdb, 0x9b53, 0x1b28, 0x1100, 0x917b, 0x91f3, 0x1188, 0x90e3, 0x1098, 0x1010, 0x906b, 0x92c3, 0x12b8, 0x1230, 0x924b, 0x1320, 0x935b, 0x93d3, 0x13a8, 0x9683, 0x16f8, 0x1670, 0x960b, 0x1760, 0x971b, 0x9793, 0x17e8, 0x1540, 0x953b, 0x95b3, 0x15c8, 0x94a3, 0x14d8, 0x1450, 0x942b, 0xbc03, 0x3c78, 0x3cf0, 0xbc8b, 0x3de0, 0xbd9b, 0xbd13, 0x3d68, 0x3fc0, 0xbfbb, 0xbf33, 0x3f48, 0xbe23, 0x3e58, 0x3ed0, 0xbeab, 0x3b80, 0xbbfb, 0xbb73, 0x3b08, 0xba63, 0x3a18, 0x3a90, 0xbaeb, 0xb843, 0x3838, 0x38b0, 0xb8cb, 0x39a0, 0xb9db, 0xb953, 0x3928, 0x3300, 0xb37b, 0xb3f3, 0x3388, 0xb2e3, 0x3298, 0x3210, 0xb26b, 0xb0c3, 0x30b8, 0x3030, 0xb04b, 0x3120, 0xb15b, 0xb1d3, 0x31a8, 0xb483, 0x34f8, 0x3470, 0xb40b, 0x3560, 0xb51b, 0xb593, 0x35e8, 0x3740, 0xb73b, 0xb7b3, 0x37c8, 0xb6a3, 0x36d8, 0x3650, 0xb62b, 0x2200, 0xa27b, 0xa2f3, 0x2288, 0xa3e3, 0x2398, 0x2310, 0xa36b, 0xa1c3, 0x21b8, 0x2130, 0xa14b, 0x2020, 0xa05b, 0xa0d3, 0x20a8, 0xa583, 0x25f8, 0x2570, 0xa50b, 0x2460, 0xa41b, 0xa493, 0x24e8, 0x2640, 0xa63b, 0xa6b3, 0x26c8, 0xa7a3, 0x27d8, 0x2750, 0xa72b, 0xad03, 0x2d78, 0x2df0, 0xad8b, 0x2ce0, 0xac9b, 0xac13, 0x2c68, 0x2ec0, 0xaebb, 0xae33, 0x2e48, 0xaf23, 0x2f58, 0x2fd0, 0xafab, 0x2a80, 0xaafb, 0xaa73, 0x2a08, 0xab63, 0x2b18, 0x2b90, 0xabeb, 0xa943, 0x2938, 0x29b0, 0xa9cb, 0x28a0, 0xa8db, 0xa853, 0x2828, ], [ 0x0000, 0xf803, 0x7003, 0x8800, 0xe006, 0x1805, 0x9005, 0x6806, 0x4009, 0xb80a, 0x300a, 0xc809, 0xa00f, 0x580c, 0xd00c, 0x280f, 0x8012, 0x7811, 0xf011, 0x0812, 0x6014, 0x9817, 0x1017, 0xe814, 0xc01b, 0x3818, 0xb018, 0x481b, 0x201d, 0xd81e, 0x501e, 0xa81d, 0x8021, 0x7822, 0xf022, 0x0821, 0x6027, 0x9824, 0x1024, 0xe827, 0xc028, 0x382b, 0xb02b, 0x4828, 0x202e, 0xd82d, 0x502d, 0xa82e, 0x0033, 0xf830, 0x7030, 0x8833, 0xe035, 0x1836, 0x9036, 0x6835, 0x403a, 0xb839, 0x3039, 0xc83a, 0xa03c, 0x583f, 0xd03f, 0x283c, 0x8047, 0x7844, 0xf044, 0x0847, 0x6041, 0x9842, 0x1042, 0xe841, 0xc04e, 0x384d, 0xb04d, 0x484e, 0x2048, 0xd84b, 0x504b, 0xa848, 0x0055, 0xf856, 0x7056, 0x8855, 0xe053, 0x1850, 0x9050, 0x6853, 0x405c, 0xb85f, 0x305f, 0xc85c, 0xa05a, 0x5859, 0xd059, 0x285a, 0x0066, 0xf865, 0x7065, 0x8866, 0xe060, 0x1863, 0x9063, 0x6860, 0x406f, 0xb86c, 0x306c, 0xc86f, 0xa069, 0x586a, 0xd06a, 0x2869, 0x8074, 0x7877, 0xf077, 0x0874, 0x6072, 0x9871, 0x1071, 0xe872, 0xc07d, 0x387e, 0xb07e, 0x487d, 0x207b, 0xd878, 0x5078, 0xa87b, 0x808b, 0x7888, 0xf088, 0x088b, 0x608d, 0x988e, 0x108e, 0xe88d, 0xc082, 0x3881, 0xb081, 0x4882, 0x2084, 0xd887, 0x5087, 0xa884, 0x0099, 0xf89a, 0x709a, 0x8899, 0xe09f, 0x189c, 0x909c, 0x689f, 0x4090, 0xb893, 0x3093, 0xc890, 0xa096, 0x5895, 0xd095, 0x2896, 0x00aa, 0xf8a9, 0x70a9, 0x88aa, 0xe0ac, 0x18af, 0x90af, 0x68ac, 0x40a3, 0xb8a0, 0x30a0, 0xc8a3, 0xa0a5, 0x58a6, 0xd0a6, 0x28a5, 0x80b8, 0x78bb, 0xf0bb, 0x08b8, 0x60be, 0x98bd, 0x10bd, 0xe8be, 0xc0b1, 0x38b2, 0xb0b2, 0x48b1, 0x20b7, 0xd8b4, 0x50b4, 0xa8b7, 0x00cc, 0xf8cf, 0x70cf, 0x88cc, 0xe0ca, 0x18c9, 0x90c9, 0x68ca, 0x40c5, 0xb8c6, 0x30c6, 0xc8c5, 0xa0c3, 0x58c0, 0xd0c0, 0x28c3, 0x80de, 0x78dd, 0xf0dd, 0x08de, 0x60d8, 0x98db, 0x10db, 0xe8d8, 0xc0d7, 0x38d4, 0xb0d4, 0x48d7, 0x20d1, 0xd8d2, 0x50d2, 0xa8d1, 0x80ed, 0x78ee, 0xf0ee, 0x08ed, 0x60eb, 0x98e8, 0x10e8, 0xe8eb, 0xc0e4, 0x38e7, 0xb0e7, 0x48e4, 0x20e2, 0xd8e1, 0x50e1, 0xa8e2, 0x00ff, 0xf8fc, 0x70fc, 0x88ff, 0xe0f9, 0x18fa, 0x90fa, 0x68f9, 0x40f6, 0xb8f5, 0x30f5, 0xc8f6, 0xa0f0, 0x58f3, 0xd0f3, 0x28f0, ], [ 0x0000, 0x8113, 0x8223, 0x0330, 0x8443, 0x0550, 0x0660, 0x8773, 0x8883, 0x0990, 0x0aa0, 0x8bb3, 0x0cc0, 0x8dd3, 0x8ee3, 0x0ff0, 0x9103, 0x1010, 0x1320, 0x9233, 0x1540, 0x9453, 0x9763, 0x1670, 0x1980, 0x9893, 0x9ba3, 0x1ab0, 0x9dc3, 0x1cd0, 0x1fe0, 0x9ef3, 0xa203, 0x2310, 0x2020, 0xa133, 0x2640, 0xa753, 0xa463, 0x2570, 0x2a80, 0xab93, 0xa8a3, 0x29b0, 0xaec3, 0x2fd0, 0x2ce0, 0xadf3, 0x3300, 0xb213, 0xb123, 0x3030, 0xb743, 0x3650, 0x3560, 0xb473, 0xbb83, 0x3a90, 0x39a0, 0xb8b3, 0x3fc0, 0xbed3, 0xbde3, 0x3cf0, 0xc403, 0x4510, 0x4620, 0xc733, 0x4040, 0xc153, 0xc263, 0x4370, 0x4c80, 0xcd93, 0xcea3, 0x4fb0, 0xc8c3, 0x49d0, 0x4ae0, 0xcbf3, 0x5500, 0xd413, 0xd723, 0x5630, 0xd143, 0x5050, 0x5360, 0xd273, 0xdd83, 0x5c90, 0x5fa0, 0xdeb3, 0x59c0, 0xd8d3, 0xdbe3, 0x5af0, 0x6600, 0xe713, 0xe423, 0x6530, 0xe243, 0x6350, 0x6060, 0xe173, 0xee83, 0x6f90, 0x6ca0, 0xedb3, 0x6ac0, 0xebd3, 0xe8e3, 0x69f0, 0xf703, 0x7610, 0x7520, 0xf433, 0x7340, 0xf253, 0xf163, 0x7070, 0x7f80, 0xfe93, 0xfda3, 0x7cb0, 0xfbc3, 0x7ad0, 0x79e0, 0xf8f3, 0x0803, 0x8910, 0x8a20, 0x0b33, 0x8c40, 0x0d53, 0x0e63, 0x8f70, 0x8080, 0x0193, 0x02a3, 0x83b0, 0x04c3, 0x85d0, 0x86e0, 0x07f3, 0x9900, 0x1813, 0x1b23, 0x9a30, 0x1d43, 0x9c50, 0x9f60, 0x1e73, 0x1183, 0x9090, 0x93a0, 0x12b3, 0x95c0, 0x14d3, 0x17e3, 0x96f0, 0xaa00, 0x2b13, 0x2823, 0xa930, 0x2e43, 0xaf50, 0xac60, 0x2d73, 0x2283, 0xa390, 0xa0a0, 0x21b3, 0xa6c0, 0x27d3, 0x24e3, 0xa5f0, 0x3b03, 0xba10, 0xb920, 0x3833, 0xbf40, 0x3e53, 0x3d63, 0xbc70, 0xb380, 0x3293, 0x31a3, 0xb0b0, 0x37c3, 0xb6d0, 0xb5e0, 0x34f3, 0xcc00, 0x4d13, 0x4e23, 0xcf30, 0x4843, 0xc950, 0xca60, 0x4b73, 0x4483, 0xc590, 0xc6a0, 0x47b3, 0xc0c0, 0x41d3, 0x42e3, 0xc3f0, 0x5d03, 0xdc10, 0xdf20, 0x5e33, 0xd940, 0x5853, 0x5b63, 0xda70, 0xd580, 0x5493, 0x57a3, 0xd6b0, 0x51c3, 0xd0d0, 0xd3e0, 0x52f3, 0x6e03, 0xef10, 0xec20, 0x6d33, 0xea40, 0x6b53, 0x6863, 0xe970, 0xe680, 0x6793, 0x64a3, 0xe5b0, 0x62c3, 0xe3d0, 0xe0e0, 0x61f3, 0xff00, 0x7e13, 0x7d23, 0xfc30, 0x7b43, 0xfa50, 0xf960, 0x7873, 0x7783, 0xf690, 0xf5a0, 0x74b3, 0xf3c0, 0x72d3, 0x71e3, 0xf0f0, ], [ 0x0000, 0x1006, 0x200c, 0x300a, 0x4018, 0x501e, 0x6014, 0x7012, 0x8030, 0x9036, 0xa03c, 0xb03a, 0xc028, 0xd02e, 0xe024, 0xf022, 0x8065, 0x9063, 0xa069, 0xb06f, 0xc07d, 0xd07b, 0xe071, 0xf077, 0x0055, 0x1053, 0x2059, 0x305f, 0x404d, 0x504b, 0x6041, 0x7047, 0x80cf, 0x90c9, 0xa0c3, 0xb0c5, 0xc0d7, 0xd0d1, 0xe0db, 0xf0dd, 0x00ff, 0x10f9, 0x20f3, 0x30f5, 0x40e7, 0x50e1, 0x60eb, 0x70ed, 0x00aa, 0x10ac, 0x20a6, 0x30a0, 0x40b2, 0x50b4, 0x60be, 0x70b8, 0x809a, 0x909c, 0xa096, 0xb090, 0xc082, 0xd084, 0xe08e, 0xf088, 0x819b, 0x919d, 0xa197, 0xb191, 0xc183, 0xd185, 0xe18f, 0xf189, 0x01ab, 0x11ad, 0x21a7, 0x31a1, 0x41b3, 0x51b5, 0x61bf, 0x71b9, 0x01fe, 0x11f8, 0x21f2, 0x31f4, 0x41e6, 0x51e0, 0x61ea, 0x71ec, 0x81ce, 0x91c8, 0xa1c2, 0xb1c4, 0xc1d6, 0xd1d0, 0xe1da, 0xf1dc, 0x0154, 0x1152, 0x2158, 0x315e, 0x414c, 0x514a, 0x6140, 0x7146, 0x8164, 0x9162, 0xa168, 0xb16e, 0xc17c, 0xd17a, 0xe170, 0xf176, 0x8131, 0x9137, 0xa13d, 0xb13b, 0xc129, 0xd12f, 0xe125, 0xf123, 0x0101, 0x1107, 0x210d, 0x310b, 0x4119, 0x511f, 0x6115, 0x7113, 0x8333, 0x9335, 0xa33f, 0xb339, 0xc32b, 0xd32d, 0xe327, 0xf321, 0x0303, 0x1305, 0x230f, 0x3309, 0x431b, 0x531d, 0x6317, 0x7311, 0x0356, 0x1350, 0x235a, 0x335c, 0x434e, 0x5348, 0x6342, 0x7344, 0x8366, 0x9360, 0xa36a, 0xb36c, 0xc37e, 0xd378, 0xe372, 0xf374, 0x03fc, 0x13fa, 0x23f0, 0x33f6, 0x43e4, 0x53e2, 0x63e8, 0x73ee, 0x83cc, 0x93ca, 0xa3c0, 0xb3c6, 0xc3d4, 0xd3d2, 0xe3d8, 0xf3de, 0x8399, 0x939f, 0xa395, 0xb393, 0xc381, 0xd387, 0xe38d, 0xf38b, 0x03a9, 0x13af, 0x23a5, 0x33a3, 0x43b1, 0x53b7, 0x63bd, 0x73bb, 0x02a8, 0x12ae, 0x22a4, 0x32a2, 0x42b0, 0x52b6, 0x62bc, 0x72ba, 0x8298, 0x929e, 0xa294, 0xb292, 0xc280, 0xd286, 0xe28c, 0xf28a, 0x82cd, 0x92cb, 0xa2c1, 0xb2c7, 0xc2d5, 0xd2d3, 0xe2d9, 0xf2df, 0x02fd, 0x12fb, 0x22f1, 0x32f7, 0x42e5, 0x52e3, 0x62e9, 0x72ef, 0x8267, 0x9261, 0xa26b, 0xb26d, 0xc27f, 0xd279, 0xe273, 0xf275, 0x0257, 0x1251, 0x225b, 0x325d, 0x424f, 0x5249, 0x6243, 0x7245, 0x0202, 0x1204, 0x220e, 0x3208, 0x421a, 0x521c, 0x6216, 0x7210, 0x8232, 0x9234, 0xa23e, 0xb238, 0xc22a, 0xd22c, 0xe226, 0xf220, ], [ 0x0000, 0x8663, 0x8cc3, 0x0aa0, 0x9983, 0x1fe0, 0x1540, 0x9323, 0xb303, 0x3560, 0x3fc0, 0xb9a3, 0x2a80, 0xace3, 0xa643, 0x2020, 0xe603, 0x6060, 0x6ac0, 0xeca3, 0x7f80, 0xf9e3, 0xf343, 0x7520, 0x5500, 0xd363, 0xd9c3, 0x5fa0, 0xcc83, 0x4ae0, 0x4040, 0xc623, 0x4c03, 0xca60, 0xc0c0, 0x46a3, 0xd580, 0x53e3, 0x5943, 0xdf20, 0xff00, 0x7963, 0x73c3, 0xf5a0, 0x6683, 0xe0e0, 0xea40, 0x6c23, 0xaa00, 0x2c63, 0x26c3, 0xa0a0, 0x3383, 0xb5e0, 0xbf40, 0x3923, 0x1903, 0x9f60, 0x95c0, 0x13a3, 0x8080, 0x06e3, 0x0c43, 0x8a20, 0x9806, 0x1e65, 0x14c5, 0x92a6, 0x0185, 0x87e6, 0x8d46, 0x0b25, 0x2b05, 0xad66, 0xa7c6, 0x21a5, 0xb286, 0x34e5, 0x3e45, 0xb826, 0x7e05, 0xf866, 0xf2c6, 0x74a5, 0xe786, 0x61e5, 0x6b45, 0xed26, 0xcd06, 0x4b65, 0x41c5, 0xc7a6, 0x5485, 0xd2e6, 0xd846, 0x5e25, 0xd405, 0x5266, 0x58c6, 0xdea5, 0x4d86, 0xcbe5, 0xc145, 0x4726, 0x6706, 0xe165, 0xebc5, 0x6da6, 0xfe85, 0x78e6, 0x7246, 0xf425, 0x3206, 0xb465, 0xbec5, 0x38a6, 0xab85, 0x2de6, 0x2746, 0xa125, 0x8105, 0x0766, 0x0dc6, 0x8ba5, 0x1886, 0x9ee5, 0x9445, 0x1226, 0xb009, 0x366a, 0x3cca, 0xbaa9, 0x298a, 0xafe9, 0xa549, 0x232a, 0x030a, 0x8569, 0x8fc9, 0x09aa, 0x9a89, 0x1cea, 0x164a, 0x9029, 0x560a, 0xd069, 0xdac9, 0x5caa, 0xcf89, 0x49ea, 0x434a, 0xc529, 0xe509, 0x636a, 0x69ca, 0xefa9, 0x7c8a, 0xfae9, 0xf049, 0x762a, 0xfc0a, 0x7a69, 0x70c9, 0xf6aa, 0x6589, 0xe3ea, 0xe94a, 0x6f29, 0x4f09, 0xc96a, 0xc3ca, 0x45a9, 0xd68a, 0x50e9, 0x5a49, 0xdc2a, 0x1a09, 0x9c6a, 0x96ca, 0x10a9, 0x838a, 0x05e9, 0x0f49, 0x892a, 0xa90a, 0x2f69, 0x25c9, 0xa3aa, 0x3089, 0xb6ea, 0xbc4a, 0x3a29, 0x280f, 0xae6c, 0xa4cc, 0x22af, 0xb18c, 0x37ef, 0x3d4f, 0xbb2c, 0x9b0c, 0x1d6f, 0x17cf, 0x91ac, 0x028f, 0x84ec, 0x8e4c, 0x082f, 0xce0c, 0x486f, 0x42cf, 0xc4ac, 0x578f, 0xd1ec, 0xdb4c, 0x5d2f, 0x7d0f, 0xfb6c, 0xf1cc, 0x77af, 0xe48c, 0x62ef, 0x684f, 0xee2c, 0x640c, 0xe26f, 0xe8cf, 0x6eac, 0xfd8f, 0x7bec, 0x714c, 0xf72f, 0xd70f, 0x516c, 0x5bcc, 0xddaf, 0x4e8c, 0xc8ef, 0xc24f, 0x442c, 0x820f, 0x046c, 0x0ecc, 0x88af, 0x1b8c, 0x9def, 0x974f, 0x112c, 0x310c, 0xb76f, 0xbdcf, 0x3bac, 0xa88f, 0x2eec, 0x244c, 0xa22f, ], [ 0x0000, 0xe017, 0x402b, 0xa03c, 0x8056, 0x6041, 0xc07d, 0x206a, 0x80a9, 0x60be, 0xc082, 0x2095, 0x00ff, 0xe0e8, 0x40d4, 0xa0c3, 0x8157, 0x6140, 0xc17c, 0x216b, 0x0101, 0xe116, 0x412a, 0xa13d, 0x01fe, 0xe1e9, 0x41d5, 0xa1c2, 0x81a8, 0x61bf, 0xc183, 0x2194, 0x82ab, 0x62bc, 0xc280, 0x2297, 0x02fd, 0xe2ea, 0x42d6, 0xa2c1, 0x0202, 0xe215, 0x4229, 0xa23e, 0x8254, 0x6243, 0xc27f, 0x2268, 0x03fc, 0xe3eb, 0x43d7, 0xa3c0, 0x83aa, 0x63bd, 0xc381, 0x2396, 0x8355, 0x6342, 0xc37e, 0x2369, 0x0303, 0xe314, 0x4328, 0xa33f, 0x8553, 0x6544, 0xc578, 0x256f, 0x0505, 0xe512, 0x452e, 0xa539, 0x05fa, 0xe5ed, 0x45d1, 0xa5c6, 0x85ac, 0x65bb, 0xc587, 0x2590, 0x0404, 0xe413, 0x442f, 0xa438, 0x8452, 0x6445, 0xc479, 0x246e, 0x84ad, 0x64ba, 0xc486, 0x2491, 0x04fb, 0xe4ec, 0x44d0, 0xa4c7, 0x07f8, 0xe7ef, 0x47d3, 0xa7c4, 0x87ae, 0x67b9, 0xc785, 0x2792, 0x8751, 0x6746, 0xc77a, 0x276d, 0x0707, 0xe710, 0x472c, 0xa73b, 0x86af, 0x66b8, 0xc684, 0x2693, 0x06f9, 0xe6ee, 0x46d2, 0xa6c5, 0x0606, 0xe611, 0x462d, 0xa63a, 0x8650, 0x6647, 0xc67b, 0x266c, 0x8aa3, 0x6ab4, 0xca88, 0x2a9f, 0x0af5, 0xeae2, 0x4ade, 0xaac9, 0x0a0a, 0xea1d, 0x4a21, 0xaa36, 0x8a5c, 0x6a4b, 0xca77, 0x2a60, 0x0bf4, 0xebe3, 0x4bdf, 0xabc8, 0x8ba2, 0x6bb5, 0xcb89, 0x2b9e, 0x8b5d, 0x6b4a, 0xcb76, 0x2b61, 0x0b0b, 0xeb1c, 0x4b20, 0xab37, 0x0808, 0xe81f, 0x4823, 0xa834, 0x885e, 0x6849, 0xc875, 0x2862, 0x88a1, 0x68b6, 0xc88a, 0x289d, 0x08f7, 0xe8e0, 0x48dc, 0xa8cb, 0x895f, 0x6948, 0xc974, 0x2963, 0x0909, 0xe91e, 0x4922, 0xa935, 0x09f6, 0xe9e1, 0x49dd, 0xa9ca, 0x89a0, 0x69b7, 0xc98b, 0x299c, 0x0ff0, 0xefe7, 0x4fdb, 0xafcc, 0x8fa6, 0x6fb1, 0xcf8d, 0x2f9a, 0x8f59, 0x6f4e, 0xcf72, 0x2f65, 0x0f0f, 0xef18, 0x4f24, 0xaf33, 0x8ea7, 0x6eb0, 0xce8c, 0x2e9b, 0x0ef1, 0xeee6, 0x4eda, 0xaecd, 0x0e0e, 0xee19, 0x4e25, 0xae32, 0x8e58, 0x6e4f, 0xce73, 0x2e64, 0x8d5b, 0x6d4c, 0xcd70, 0x2d67, 0x0d0d, 0xed1a, 0x4d26, 0xad31, 0x0df2, 0xede5, 0x4dd9, 0xadce, 0x8da4, 0x6db3, 0xcd8f, 0x2d98, 0x0c0c, 0xec1b, 0x4c27, 0xac30, 0x8c5a, 0x6c4d, 0xcc71, 0x2c66, 0x8ca5, 0x6cb2, 0xcc8e, 0x2c99, 0x0cf3, 0xece4, 0x4cd8, 0xaccf, ], [ 0x0000, 0x9543, 0xaa83, 0x3fc0, 0xd503, 0x4040, 0x7f80, 0xeac3, 0x2a03, 0xbf40, 0x8080, 0x15c3, 0xff00, 0x6a43, 0x5583, 0xc0c0, 0x5406, 0xc145, 0xfe85, 0x6bc6, 0x8105, 0x1446, 0x2b86, 0xbec5, 0x7e05, 0xeb46, 0xd486, 0x41c5, 0xab06, 0x3e45, 0x0185, 0x94c6, 0xa80c, 0x3d4f, 0x028f, 0x97cc, 0x7d0f, 0xe84c, 0xd78c, 0x42cf, 0x820f, 0x174c, 0x288c, 0xbdcf, 0x570c, 0xc24f, 0xfd8f, 0x68cc, 0xfc0a, 0x6949, 0x5689, 0xc3ca, 0x2909, 0xbc4a, 0x838a, 0x16c9, 0xd609, 0x434a, 0x7c8a, 0xe9c9, 0x030a, 0x9649, 0xa989, 0x3cca, 0xd01d, 0x455e, 0x7a9e, 0xefdd, 0x051e, 0x905d, 0xaf9d, 0x3ade, 0xfa1e, 0x6f5d, 0x509d, 0xc5de, 0x2f1d, 0xba5e, 0x859e, 0x10dd, 0x841b, 0x1158, 0x2e98, 0xbbdb, 0x5118, 0xc45b, 0xfb9b, 0x6ed8, 0xae18, 0x3b5b, 0x049b, 0x91d8, 0x7b1b, 0xee58, 0xd198, 0x44db, 0x7811, 0xed52, 0xd292, 0x47d1, 0xad12, 0x3851, 0x0791, 0x92d2, 0x5212, 0xc751, 0xf891, 0x6dd2, 0x8711, 0x1252, 0x2d92, 0xb8d1, 0x2c17, 0xb954, 0x8694, 0x13d7, 0xf914, 0x6c57, 0x5397, 0xc6d4, 0x0614, 0x9357, 0xac97, 0x39d4, 0xd317, 0x4654, 0x7994, 0xecd7, 0x203f, 0xb57c, 0x8abc, 0x1fff, 0xf53c, 0x607f, 0x5fbf, 0xcafc, 0x0a3c, 0x9f7f, 0xa0bf, 0x35fc, 0xdf3f, 0x4a7c, 0x75bc, 0xe0ff, 0x7439, 0xe17a, 0xdeba, 0x4bf9, 0xa13a, 0x3479, 0x0bb9, 0x9efa, 0x5e3a, 0xcb79, 0xf4b9, 0x61fa, 0x8b39, 0x1e7a, 0x21ba, 0xb4f9, 0x8833, 0x1d70, 0x22b0, 0xb7f3, 0x5d30, 0xc873, 0xf7b3, 0x62f0, 0xa230, 0x3773, 0x08b3, 0x9df0, 0x7733, 0xe270, 0xddb0, 0x48f3, 0xdc35, 0x4976, 0x76b6, 0xe3f5, 0x0936, 0x9c75, 0xa3b5, 0x36f6, 0xf636, 0x6375, 0x5cb5, 0xc9f6, 0x2335, 0xb676, 0x89b6, 0x1cf5, 0xf022, 0x6561, 0x5aa1, 0xcfe2, 0x2521, 0xb062, 0x8fa2, 0x1ae1, 0xda21, 0x4f62, 0x70a2, 0xe5e1, 0x0f22, 0x9a61, 0xa5a1, 0x30e2, 0xa424, 0x3167, 0x0ea7, 0x9be4, 0x7127, 0xe464, 0xdba4, 0x4ee7, 0x8e27, 0x1b64, 0x24a4, 0xb1e7, 0x5b24, 0xce67, 0xf1a7, 0x64e4, 0x582e, 0xcd6d, 0xf2ad, 0x67ee, 0x8d2d, 0x186e, 0x27ae, 0xb2ed, 0x722d, 0xe76e, 0xd8ae, 0x4ded, 0xa72e, 0x326d, 0x0dad, 0x98ee, 0x0c28, 0x996b, 0xa6ab, 0x33e8, 0xd92b, 0x4c68, 0x73a8, 0xe6eb, 0x262b, 0xb368, 0x8ca8, 0x19eb, 0xf328, 0x666b, 0x59ab, 0xcce8, ], [ 0x0000, 0x407e, 0x80fc, 0xc082, 0x81fd, 0xc183, 0x0101, 0x417f, 0x83ff, 0xc381, 0x0303, 0x437d, 0x0202, 0x427c, 0x82fe, 0xc280, 0x87fb, 0xc785, 0x0707, 0x4779, 0x0606, 0x4678, 0x86fa, 0xc684, 0x0404, 0x447a, 0x84f8, 0xc486, 0x85f9, 0xc587, 0x0505, 0x457b, 0x8ff3, 0xcf8d, 0x0f0f, 0x4f71, 0x0e0e, 0x4e70, 0x8ef2, 0xce8c, 0x0c0c, 0x4c72, 0x8cf0, 0xcc8e, 0x8df1, 0xcd8f, 0x0d0d, 0x4d73, 0x0808, 0x4876, 0x88f4, 0xc88a, 0x89f5, 0xc98b, 0x0909, 0x4977, 0x8bf7, 0xcb89, 0x0b0b, 0x4b75, 0x0a0a, 0x4a74, 0x8af6, 0xca88, 0x9fe3, 0xdf9d, 0x1f1f, 0x5f61, 0x1e1e, 0x5e60, 0x9ee2, 0xde9c, 0x1c1c, 0x5c62, 0x9ce0, 0xdc9e, 0x9de1, 0xdd9f, 0x1d1d, 0x5d63, 0x1818, 0x5866, 0x98e4, 0xd89a, 0x99e5, 0xd99b, 0x1919, 0x5967, 0x9be7, 0xdb99, 0x1b1b, 0x5b65, 0x1a1a, 0x5a64, 0x9ae6, 0xda98, 0x1010, 0x506e, 0x90ec, 0xd092, 0x91ed, 0xd193, 0x1111, 0x516f, 0x93ef, 0xd391, 0x1313, 0x536d, 0x1212, 0x526c, 0x92ee, 0xd290, 0x97eb, 0xd795, 0x1717, 0x5769, 0x1616, 0x5668, 0x96ea, 0xd694, 0x1414, 0x546a, 0x94e8, 0xd496, 0x95e9, 0xd597, 0x1515, 0x556b, 0xbfc3, 0xffbd, 0x3f3f, 0x7f41, 0x3e3e, 0x7e40, 0xbec2, 0xfebc, 0x3c3c, 0x7c42, 0xbcc0, 0xfcbe, 0xbdc1, 0xfdbf, 0x3d3d, 0x7d43, 0x3838, 0x7846, 0xb8c4, 0xf8ba, 0xb9c5, 0xf9bb, 0x3939, 0x7947, 0xbbc7, 0xfbb9, 0x3b3b, 0x7b45, 0x3a3a, 0x7a44, 0xbac6, 0xfab8, 0x3030, 0x704e, 0xb0cc, 0xf0b2, 0xb1cd, 0xf1b3, 0x3131, 0x714f, 0xb3cf, 0xf3b1, 0x3333, 0x734d, 0x3232, 0x724c, 0xb2ce, 0xf2b0, 0xb7cb, 0xf7b5, 0x3737, 0x7749, 0x3636, 0x7648, 0xb6ca, 0xf6b4, 0x3434, 0x744a, 0xb4c8, 0xf4b6, 0xb5c9, 0xf5b7, 0x3535, 0x754b, 0x2020, 0x605e, 0xa0dc, 0xe0a2, 0xa1dd, 0xe1a3, 0x2121, 0x615f, 0xa3df, 0xe3a1, 0x2323, 0x635d, 0x2222, 0x625c, 0xa2de, 0xe2a0, 0xa7db, 0xe7a5, 0x2727, 0x6759, 0x2626, 0x6658, 0xa6da, 0xe6a4, 0x2424, 0x645a, 0xa4d8, 0xe4a6, 0xa5d9, 0xe5a7, 0x2525, 0x655b, 0xafd3, 0xefad, 0x2f2f, 0x6f51, 0x2e2e, 0x6e50, 0xaed2, 0xeeac, 0x2c2c, 0x6c52, 0xacd0, 0xecae, 0xadd1, 0xedaf, 0x2d2d, 0x6d53, 0x2828, 0x6856, 0xa8d4, 0xe8aa, 0xa9d5, 0xe9ab, 0x2929, 0x6957, 0xabd7, 0xeba9, 0x2b2b, 0x6b55, 0x2a2a, 0x6a54, 0xaad6, 0xeaa8, ], [ 0x0000, 0xff83, 0x7f03, 0x8080, 0xfe06, 0x0185, 0x8105, 0x7e86, 0x7c09, 0x838a, 0x030a, 0xfc89, 0x820f, 0x7d8c, 0xfd0c, 0x028f, 0xf812, 0x0791, 0x8711, 0x7892, 0x0614, 0xf997, 0x7917, 0x8694, 0x841b, 0x7b98, 0xfb18, 0x049b, 0x7a1d, 0x859e, 0x051e, 0xfa9d, 0x7021, 0x8fa2, 0x0f22, 0xf0a1, 0x8e27, 0x71a4, 0xf124, 0x0ea7, 0x0c28, 0xf3ab, 0x732b, 0x8ca8, 0xf22e, 0x0dad, 0x8d2d, 0x72ae, 0x8833, 0x77b0, 0xf730, 0x08b3, 0x7635, 0x89b6, 0x0936, 0xf6b5, 0xf43a, 0x0bb9, 0x8b39, 0x74ba, 0x0a3c, 0xf5bf, 0x753f, 0x8abc, 0xe042, 0x1fc1, 0x9f41, 0x60c2, 0x1e44, 0xe1c7, 0x6147, 0x9ec4, 0x9c4b, 0x63c8, 0xe348, 0x1ccb, 0x624d, 0x9dce, 0x1d4e, 0xe2cd, 0x1850, 0xe7d3, 0x6753, 0x98d0, 0xe656, 0x19d5, 0x9955, 0x66d6, 0x6459, 0x9bda, 0x1b5a, 0xe4d9, 0x9a5f, 0x65dc, 0xe55c, 0x1adf, 0x9063, 0x6fe0, 0xef60, 0x10e3, 0x6e65, 0x91e6, 0x1166, 0xeee5, 0xec6a, 0x13e9, 0x9369, 0x6cea, 0x126c, 0xedef, 0x6d6f, 0x92ec, 0x6871, 0x97f2, 0x1772, 0xe8f1, 0x9677, 0x69f4, 0xe974, 0x16f7, 0x1478, 0xebfb, 0x6b7b, 0x94f8, 0xea7e, 0x15fd, 0x957d, 0x6afe, 0x4081, 0xbf02, 0x3f82, 0xc001, 0xbe87, 0x4104, 0xc184, 0x3e07, 0x3c88, 0xc30b, 0x438b, 0xbc08, 0xc28e, 0x3d0d, 0xbd8d, 0x420e, 0xb893, 0x4710, 0xc790, 0x3813, 0x4695, 0xb916, 0x3996, 0xc615, 0xc49a, 0x3b19, 0xbb99, 0x441a, 0x3a9c, 0xc51f, 0x459f, 0xba1c, 0x30a0, 0xcf23, 0x4fa3, 0xb020, 0xcea6, 0x3125, 0xb1a5, 0x4e26, 0x4ca9, 0xb32a, 0x33aa, 0xcc29, 0xb2af, 0x4d2c, 0xcdac, 0x322f, 0xc8b2, 0x3731, 0xb7b1, 0x4832, 0x36b4, 0xc937, 0x49b7, 0xb634, 0xb4bb, 0x4b38, 0xcbb8, 0x343b, 0x4abd, 0xb53e, 0x35be, 0xca3d, 0xa0c3, 0x5f40, 0xdfc0, 0x2043, 0x5ec5, 0xa146, 0x21c6, 0xde45, 0xdcca, 0x2349, 0xa3c9, 0x5c4a, 0x22cc, 0xdd4f, 0x5dcf, 0xa24c, 0x58d1, 0xa752, 0x27d2, 0xd851, 0xa6d7, 0x5954, 0xd9d4, 0x2657, 0x24d8, 0xdb5b, 0x5bdb, 0xa458, 0xdade, 0x255d, 0xa5dd, 0x5a5e, 0xd0e2, 0x2f61, 0xafe1, 0x5062, 0x2ee4, 0xd167, 0x51e7, 0xae64, 0xaceb, 0x5368, 0xd3e8, 0x2c6b, 0x52ed, 0xad6e, 0x2dee, 0xd26d, 0x28f0, 0xd773, 0x57f3, 0xa870, 0xd6f6, 0x2975, 0xa9f5, 0x5676, 0x54f9, 0xab7a, 0x2bfa, 0xd479, 0xaaff, 0x557c, 0xd5fc, 0x2a7f, ], [ 0x0000, 0x8102, 0x8201, 0x0303, 0x8407, 0x0505, 0x0606, 0x8704, 0x880b, 0x0909, 0x0a0a, 0x8b08, 0x0c0c, 0x8d0e, 0x8e0d, 0x0f0f, 0x9013, 0x1111, 0x1212, 0x9310, 0x1414, 0x9516, 0x9615, 0x1717, 0x1818, 0x991a, 0x9a19, 0x1b1b, 0x9c1f, 0x1d1d, 0x1e1e, 0x9f1c, 0xa023, 0x2121, 0x2222, 0xa320, 0x2424, 0xa526, 0xa625, 0x2727, 0x2828, 0xa92a, 0xaa29, 0x2b2b, 0xac2f, 0x2d2d, 0x2e2e, 0xaf2c, 0x3030, 0xb132, 0xb231, 0x3333, 0xb437, 0x3535, 0x3636, 0xb734, 0xb83b, 0x3939, 0x3a3a, 0xbb38, 0x3c3c, 0xbd3e, 0xbe3d, 0x3f3f, 0xc043, 0x4141, 0x4242, 0xc340, 0x4444, 0xc546, 0xc645, 0x4747, 0x4848, 0xc94a, 0xca49, 0x4b4b, 0xcc4f, 0x4d4d, 0x4e4e, 0xcf4c, 0x5050, 0xd152, 0xd251, 0x5353, 0xd457, 0x5555, 0x5656, 0xd754, 0xd85b, 0x5959, 0x5a5a, 0xdb58, 0x5c5c, 0xdd5e, 0xde5d, 0x5f5f, 0x6060, 0xe162, 0xe261, 0x6363, 0xe467, 0x6565, 0x6666, 0xe764, 0xe86b, 0x6969, 0x6a6a, 0xeb68, 0x6c6c, 0xed6e, 0xee6d, 0x6f6f, 0xf073, 0x7171, 0x7272, 0xf370, 0x7474, 0xf576, 0xf675, 0x7777, 0x7878, 0xf97a, 0xfa79, 0x7b7b, 0xfc7f, 0x7d7d, 0x7e7e, 0xff7c, 0x0083, 0x8181, 0x8282, 0x0380, 0x8484, 0x0586, 0x0685, 0x8787, 0x8888, 0x098a, 0x0a89, 0x8b8b, 0x0c8f, 0x8d8d, 0x8e8e, 0x0f8c, 0x9090, 0x1192, 0x1291, 0x9393, 0x1497, 0x9595, 0x9696, 0x1794, 0x189b, 0x9999, 0x9a9a, 0x1b98, 0x9c9c, 0x1d9e, 0x1e9d, 0x9f9f, 0xa0a0, 0x21a2, 0x22a1, 0xa3a3, 0x24a7, 0xa5a5, 0xa6a6, 0x27a4, 0x28ab, 0xa9a9, 0xaaaa, 0x2ba8, 0xacac, 0x2dae, 0x2ead, 0xafaf, 0x30b3, 0xb1b1, 0xb2b2, 0x33b0, 0xb4b4, 0x35b6, 0x36b5, 0xb7b7, 0xb8b8, 0x39ba, 0x3ab9, 0xbbbb, 0x3cbf, 0xbdbd, 0xbebe, 0x3fbc, 0xc0c0, 0x41c2, 0x42c1, 0xc3c3, 0x44c7, 0xc5c5, 0xc6c6, 0x47c4, 0x48cb, 0xc9c9, 0xcaca, 0x4bc8, 0xcccc, 0x4dce, 0x4ecd, 0xcfcf, 0x50d3, 0xd1d1, 0xd2d2, 0x53d0, 0xd4d4, 0x55d6, 0x56d5, 0xd7d7, 0xd8d8, 0x59da, 0x5ad9, 0xdbdb, 0x5cdf, 0xdddd, 0xdede, 0x5fdc, 0x60e3, 0xe1e1, 0xe2e2, 0x63e0, 0xe4e4, 0x65e6, 0x66e5, 0xe7e7, 0xe8e8, 0x69ea, 0x6ae9, 0xebeb, 0x6cef, 0xeded, 0xeeee, 0x6fec, 0xf0f0, 0x71f2, 0x72f1, 0xf3f3, 0x74f7, 0xf5f5, 0xf6f6, 0x77f4, 0x78fb, 0xf9f9, 0xfafa, 0x7bf8, 0xfcfc, 0x7dfe, 0x7efd, 0xffff, ], [ 0x0000, 0x0106, 0x020c, 0x030a, 0x0418, 0x051e, 0x0614, 0x0712, 0x0830, 0x0936, 0x0a3c, 0x0b3a, 0x0c28, 0x0d2e, 0x0e24, 0x0f22, 0x1060, 0x1166, 0x126c, 0x136a, 0x1478, 0x157e, 0x1674, 0x1772, 0x1850, 0x1956, 0x1a5c, 0x1b5a, 0x1c48, 0x1d4e, 0x1e44, 0x1f42, 0x20c0, 0x21c6, 0x22cc, 0x23ca, 0x24d8, 0x25de, 0x26d4, 0x27d2, 0x28f0, 0x29f6, 0x2afc, 0x2bfa, 0x2ce8, 0x2dee, 0x2ee4, 0x2fe2, 0x30a0, 0x31a6, 0x32ac, 0x33aa, 0x34b8, 0x35be, 0x36b4, 0x37b2, 0x3890, 0x3996, 0x3a9c, 0x3b9a, 0x3c88, 0x3d8e, 0x3e84, 0x3f82, 0x4180, 0x4086, 0x438c, 0x428a, 0x4598, 0x449e, 0x4794, 0x4692, 0x49b0, 0x48b6, 0x4bbc, 0x4aba, 0x4da8, 0x4cae, 0x4fa4, 0x4ea2, 0x51e0, 0x50e6, 0x53ec, 0x52ea, 0x55f8, 0x54fe, 0x57f4, 0x56f2, 0x59d0, 0x58d6, 0x5bdc, 0x5ada, 0x5dc8, 0x5cce, 0x5fc4, 0x5ec2, 0x6140, 0x6046, 0x634c, 0x624a, 0x6558, 0x645e, 0x6754, 0x6652, 0x6970, 0x6876, 0x6b7c, 0x6a7a, 0x6d68, 0x6c6e, 0x6f64, 0x6e62, 0x7120, 0x7026, 0x732c, 0x722a, 0x7538, 0x743e, 0x7734, 0x7632, 0x7910, 0x7816, 0x7b1c, 0x7a1a, 0x7d08, 0x7c0e, 0x7f04, 0x7e02, 0x8300, 0x8206, 0x810c, 0x800a, 0x8718, 0x861e, 0x8514, 0x8412, 0x8b30, 0x8a36, 0x893c, 0x883a, 0x8f28, 0x8e2e, 0x8d24, 0x8c22, 0x9360, 0x9266, 0x916c, 0x906a, 0x9778, 0x967e, 0x9574, 0x9472, 0x9b50, 0x9a56, 0x995c, 0x985a, 0x9f48, 0x9e4e, 0x9d44, 0x9c42, 0xa3c0, 0xa2c6, 0xa1cc, 0xa0ca, 0xa7d8, 0xa6de, 0xa5d4, 0xa4d2, 0xabf0, 0xaaf6, 0xa9fc, 0xa8fa, 0xafe8, 0xaeee, 0xade4, 0xace2, 0xb3a0, 0xb2a6, 0xb1ac, 0xb0aa, 0xb7b8, 0xb6be, 0xb5b4, 0xb4b2, 0xbb90, 0xba96, 0xb99c, 0xb89a, 0xbf88, 0xbe8e, 0xbd84, 0xbc82, 0xc280, 0xc386, 0xc08c, 0xc18a, 0xc698, 0xc79e, 0xc494, 0xc592, 0xcab0, 0xcbb6, 0xc8bc, 0xc9ba, 0xcea8, 0xcfae, 0xcca4, 0xcda2, 0xd2e0, 0xd3e6, 0xd0ec, 0xd1ea, 0xd6f8, 0xd7fe, 0xd4f4, 0xd5f2, 0xdad0, 0xdbd6, 0xd8dc, 0xd9da, 0xdec8, 0xdfce, 0xdcc4, 0xddc2, 0xe240, 0xe346, 0xe04c, 0xe14a, 0xe658, 0xe75e, 0xe454, 0xe552, 0xea70, 0xeb76, 0xe87c, 0xe97a, 0xee68, 0xef6e, 0xec64, 0xed62, 0xf220, 0xf326, 0xf02c, 0xf12a, 0xf638, 0xf73e, 0xf434, 0xf532, 0xfa10, 0xfb16, 0xf81c, 0xf91a, 0xfe08, 0xff0e, 0xfc04, 0xfd02, ], [ 0x0000, 0x8605, 0x8c0f, 0x0a0a, 0x981b, 0x1e1e, 0x1414, 0x9211, 0xb033, 0x3636, 0x3c3c, 0xba39, 0x2828, 0xae2d, 0xa427, 0x2222, 0xe063, 0x6666, 0x6c6c, 0xea69, 0x7878, 0xfe7d, 0xf477, 0x7272, 0x5050, 0xd655, 0xdc5f, 0x5a5a, 0xc84b, 0x4e4e, 0x4444, 0xc241, 0x40c3, 0xc6c6, 0xcccc, 0x4ac9, 0xd8d8, 0x5edd, 0x54d7, 0xd2d2, 0xf0f0, 0x76f5, 0x7cff, 0xfafa, 0x68eb, 0xeeee, 0xe4e4, 0x62e1, 0xa0a0, 0x26a5, 0x2caf, 0xaaaa, 0x38bb, 0xbebe, 0xb4b4, 0x32b1, 0x1093, 0x9696, 0x9c9c, 0x1a99, 0x8888, 0x0e8d, 0x0487, 0x8282, 0x8186, 0x0783, 0x0d89, 0x8b8c, 0x199d, 0x9f98, 0x9592, 0x1397, 0x31b5, 0xb7b0, 0xbdba, 0x3bbf, 0xa9ae, 0x2fab, 0x25a1, 0xa3a4, 0x61e5, 0xe7e0, 0xedea, 0x6bef, 0xf9fe, 0x7ffb, 0x75f1, 0xf3f4, 0xd1d6, 0x57d3, 0x5dd9, 0xdbdc, 0x49cd, 0xcfc8, 0xc5c2, 0x43c7, 0xc145, 0x4740, 0x4d4a, 0xcb4f, 0x595e, 0xdf5b, 0xd551, 0x5354, 0x7176, 0xf773, 0xfd79, 0x7b7c, 0xe96d, 0x6f68, 0x6562, 0xe367, 0x2126, 0xa723, 0xad29, 0x2b2c, 0xb93d, 0x3f38, 0x3532, 0xb337, 0x9115, 0x1710, 0x1d1a, 0x9b1f, 0x090e, 0x8f0b, 0x8501, 0x0304, 0x8309, 0x050c, 0x0f06, 0x8903, 0x1b12, 0x9d17, 0x971d, 0x1118, 0x333a, 0xb53f, 0xbf35, 0x3930, 0xab21, 0x2d24, 0x272e, 0xa12b, 0x636a, 0xe56f, 0xef65, 0x6960, 0xfb71, 0x7d74, 0x777e, 0xf17b, 0xd359, 0x555c, 0x5f56, 0xd953, 0x4b42, 0xcd47, 0xc74d, 0x4148, 0xc3ca, 0x45cf, 0x4fc5, 0xc9c0, 0x5bd1, 0xddd4, 0xd7de, 0x51db, 0x73f9, 0xf5fc, 0xfff6, 0x79f3, 0xebe2, 0x6de7, 0x67ed, 0xe1e8, 0x23a9, 0xa5ac, 0xafa6, 0x29a3, 0xbbb2, 0x3db7, 0x37bd, 0xb1b8, 0x939a, 0x159f, 0x1f95, 0x9990, 0x0b81, 0x8d84, 0x878e, 0x018b, 0x028f, 0x848a, 0x8e80, 0x0885, 0x9a94, 0x1c91, 0x169b, 0x909e, 0xb2bc, 0x34b9, 0x3eb3, 0xb8b6, 0x2aa7, 0xaca2, 0xa6a8, 0x20ad, 0xe2ec, 0x64e9, 0x6ee3, 0xe8e6, 0x7af7, 0xfcf2, 0xf6f8, 0x70fd, 0x52df, 0xd4da, 0xded0, 0x58d5, 0xcac4, 0x4cc1, 0x46cb, 0xc0ce, 0x424c, 0xc449, 0xce43, 0x4846, 0xda57, 0x5c52, 0x5658, 0xd05d, 0xf27f, 0x747a, 0x7e70, 0xf875, 0x6a64, 0xec61, 0xe66b, 0x606e, 0xa22f, 0x242a, 0x2e20, 0xa825, 0x3a34, 0xbc31, 0xb63b, 0x303e, 0x121c, 0x9419, 0x9e13, 0x1816, 0x8a07, 0x0c02, 0x0608, 0x800d, ], ]; pub static CRC16_DDS_110_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011, 0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022, 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072, 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041, 0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2, 0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1, 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1, 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082, 0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192, 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1, 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1, 0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2, 0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151, 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162, 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132, 0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101, 0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312, 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321, 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371, 0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342, 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1, 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2, 0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2, 0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381, 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291, 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2, 0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2, 0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1, 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252, 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261, 0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231, 0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202, ], [ 0x0000, 0x8603, 0x8c03, 0x0a00, 0x9803, 0x1e00, 0x1400, 0x9203, 0xb003, 0x3600, 0x3c00, 0xba03, 0x2800, 0xae03, 0xa403, 0x2200, 0xe003, 0x6600, 0x6c00, 0xea03, 0x7800, 0xfe03, 0xf403, 0x7200, 0x5000, 0xd603, 0xdc03, 0x5a00, 0xc803, 0x4e00, 0x4400, 0xc203, 0x4003, 0xc600, 0xcc00, 0x4a03, 0xd800, 0x5e03, 0x5403, 0xd200, 0xf000, 0x7603, 0x7c03, 0xfa00, 0x6803, 0xee00, 0xe400, 0x6203, 0xa000, 0x2603, 0x2c03, 0xaa00, 0x3803, 0xbe00, 0xb400, 0x3203, 0x1003, 0x9600, 0x9c00, 0x1a03, 0x8800, 0x0e03, 0x0403, 0x8200, 0x8006, 0x0605, 0x0c05, 0x8a06, 0x1805, 0x9e06, 0x9406, 0x1205, 0x3005, 0xb606, 0xbc06, 0x3a05, 0xa806, 0x2e05, 0x2405, 0xa206, 0x6005, 0xe606, 0xec06, 0x6a05, 0xf806, 0x7e05, 0x7405, 0xf206, 0xd006, 0x5605, 0x5c05, 0xda06, 0x4805, 0xce06, 0xc406, 0x4205, 0xc005, 0x4606, 0x4c06, 0xca05, 0x5806, 0xde05, 0xd405, 0x5206, 0x7006, 0xf605, 0xfc05, 0x7a06, 0xe805, 0x6e06, 0x6406, 0xe205, 0x2006, 0xa605, 0xac05, 0x2a06, 0xb805, 0x3e06, 0x3406, 0xb205, 0x9005, 0x1606, 0x1c06, 0x9a05, 0x0806, 0x8e05, 0x8405, 0x0206, 0x8009, 0x060a, 0x0c0a, 0x8a09, 0x180a, 0x9e09, 0x9409, 0x120a, 0x300a, 0xb609, 0xbc09, 0x3a0a, 0xa809, 0x2e0a, 0x240a, 0xa209, 0x600a, 0xe609, 0xec09, 0x6a0a, 0xf809, 0x7e0a, 0x740a, 0xf209, 0xd009, 0x560a, 0x5c0a, 0xda09, 0x480a, 0xce09, 0xc409, 0x420a, 0xc00a, 0x4609, 0x4c09, 0xca0a, 0x5809, 0xde0a, 0xd40a, 0x5209, 0x7009, 0xf60a, 0xfc0a, 0x7a09, 0xe80a, 0x6e09, 0x6409, 0xe20a, 0x2009, 0xa60a, 0xac0a, 0x2a09, 0xb80a, 0x3e09, 0x3409, 0xb20a, 0x900a, 0x1609, 0x1c09, 0x9a0a, 0x0809, 0x8e0a, 0x840a, 0x0209, 0x000f, 0x860c, 0x8c0c, 0x0a0f, 0x980c, 0x1e0f, 0x140f, 0x920c, 0xb00c, 0x360f, 0x3c0f, 0xba0c, 0x280f, 0xae0c, 0xa40c, 0x220f, 0xe00c, 0x660f, 0x6c0f, 0xea0c, 0x780f, 0xfe0c, 0xf40c, 0x720f, 0x500f, 0xd60c, 0xdc0c, 0x5a0f, 0xc80c, 0x4e0f, 0x440f, 0xc20c, 0x400c, 0xc60f, 0xcc0f, 0x4a0c, 0xd80f, 0x5e0c, 0x540c, 0xd20f, 0xf00f, 0x760c, 0x7c0c, 0xfa0f, 0x680c, 0xee0f, 0xe40f, 0x620c, 0xa00f, 0x260c, 0x2c0c, 0xaa0f, 0x380c, 0xbe0f, 0xb40f, 0x320c, 0x100c, 0x960f, 0x9c0f, 0x1a0c, 0x880f, 0x0e0c, 0x040c, 0x820f, ], [ 0x0000, 0x8017, 0x802b, 0x003c, 0x8053, 0x0044, 0x0078, 0x806f, 0x80a3, 0x00b4, 0x0088, 0x809f, 0x00f0, 0x80e7, 0x80db, 0x00cc, 0x8143, 0x0154, 0x0168, 0x817f, 0x0110, 0x8107, 0x813b, 0x012c, 0x01e0, 0x81f7, 0x81cb, 0x01dc, 0x81b3, 0x01a4, 0x0198, 0x818f, 0x8283, 0x0294, 0x02a8, 0x82bf, 0x02d0, 0x82c7, 0x82fb, 0x02ec, 0x0220, 0x8237, 0x820b, 0x021c, 0x8273, 0x0264, 0x0258, 0x824f, 0x03c0, 0x83d7, 0x83eb, 0x03fc, 0x8393, 0x0384, 0x03b8, 0x83af, 0x8363, 0x0374, 0x0348, 0x835f, 0x0330, 0x8327, 0x831b, 0x030c, 0x8503, 0x0514, 0x0528, 0x853f, 0x0550, 0x8547, 0x857b, 0x056c, 0x05a0, 0x85b7, 0x858b, 0x059c, 0x85f3, 0x05e4, 0x05d8, 0x85cf, 0x0440, 0x8457, 0x846b, 0x047c, 0x8413, 0x0404, 0x0438, 0x842f, 0x84e3, 0x04f4, 0x04c8, 0x84df, 0x04b0, 0x84a7, 0x849b, 0x048c, 0x0780, 0x8797, 0x87ab, 0x07bc, 0x87d3, 0x07c4, 0x07f8, 0x87ef, 0x8723, 0x0734, 0x0708, 0x871f, 0x0770, 0x8767, 0x875b, 0x074c, 0x86c3, 0x06d4, 0x06e8, 0x86ff, 0x0690, 0x8687, 0x86bb, 0x06ac, 0x0660, 0x8677, 0x864b, 0x065c, 0x8633, 0x0624, 0x0618, 0x860f, 0x8a03, 0x0a14, 0x0a28, 0x8a3f, 0x0a50, 0x8a47, 0x8a7b, 0x0a6c, 0x0aa0, 0x8ab7, 0x8a8b, 0x0a9c, 0x8af3, 0x0ae4, 0x0ad8, 0x8acf, 0x0b40, 0x8b57, 0x8b6b, 0x0b7c, 0x8b13, 0x0b04, 0x0b38, 0x8b2f, 0x8be3, 0x0bf4, 0x0bc8, 0x8bdf, 0x0bb0, 0x8ba7, 0x8b9b, 0x0b8c, 0x0880, 0x8897, 0x88ab, 0x08bc, 0x88d3, 0x08c4, 0x08f8, 0x88ef, 0x8823, 0x0834, 0x0808, 0x881f, 0x0870, 0x8867, 0x885b, 0x084c, 0x89c3, 0x09d4, 0x09e8, 0x89ff, 0x0990, 0x8987, 0x89bb, 0x09ac, 0x0960, 0x8977, 0x894b, 0x095c, 0x8933, 0x0924, 0x0918, 0x890f, 0x0f00, 0x8f17, 0x8f2b, 0x0f3c, 0x8f53, 0x0f44, 0x0f78, 0x8f6f, 0x8fa3, 0x0fb4, 0x0f88, 0x8f9f, 0x0ff0, 0x8fe7, 0x8fdb, 0x0fcc, 0x8e43, 0x0e54, 0x0e68, 0x8e7f, 0x0e10, 0x8e07, 0x8e3b, 0x0e2c, 0x0ee0, 0x8ef7, 0x8ecb, 0x0edc, 0x8eb3, 0x0ea4, 0x0e98, 0x8e8f, 0x8d83, 0x0d94, 0x0da8, 0x8dbf, 0x0dd0, 0x8dc7, 0x8dfb, 0x0dec, 0x0d20, 0x8d37, 0x8d0b, 0x0d1c, 0x8d73, 0x0d64, 0x0d58, 0x8d4f, 0x0cc0, 0x8cd7, 0x8ceb, 0x0cfc, 0x8c93, 0x0c84, 0x0cb8, 0x8caf, 0x8c63, 0x0c74, 0x0c48, 0x8c5f, 0x0c30, 0x8c27, 0x8c1b, 0x0c0c, ], [ 0x0000, 0x9403, 0xa803, 0x3c00, 0xd003, 0x4400, 0x7800, 0xec03, 0x2003, 0xb400, 0x8800, 0x1c03, 0xf000, 0x6403, 0x5803, 0xcc00, 0x4006, 0xd405, 0xe805, 0x7c06, 0x9005, 0x0406, 0x3806, 0xac05, 0x6005, 0xf406, 0xc806, 0x5c05, 0xb006, 0x2405, 0x1805, 0x8c06, 0x800c, 0x140f, 0x280f, 0xbc0c, 0x500f, 0xc40c, 0xf80c, 0x6c0f, 0xa00f, 0x340c, 0x080c, 0x9c0f, 0x700c, 0xe40f, 0xd80f, 0x4c0c, 0xc00a, 0x5409, 0x6809, 0xfc0a, 0x1009, 0x840a, 0xb80a, 0x2c09, 0xe009, 0x740a, 0x480a, 0xdc09, 0x300a, 0xa409, 0x9809, 0x0c0a, 0x801d, 0x141e, 0x281e, 0xbc1d, 0x501e, 0xc41d, 0xf81d, 0x6c1e, 0xa01e, 0x341d, 0x081d, 0x9c1e, 0x701d, 0xe41e, 0xd81e, 0x4c1d, 0xc01b, 0x5418, 0x6818, 0xfc1b, 0x1018, 0x841b, 0xb81b, 0x2c18, 0xe018, 0x741b, 0x481b, 0xdc18, 0x301b, 0xa418, 0x9818, 0x0c1b, 0x0011, 0x9412, 0xa812, 0x3c11, 0xd012, 0x4411, 0x7811, 0xec12, 0x2012, 0xb411, 0x8811, 0x1c12, 0xf011, 0x6412, 0x5812, 0xcc11, 0x4017, 0xd414, 0xe814, 0x7c17, 0x9014, 0x0417, 0x3817, 0xac14, 0x6014, 0xf417, 0xc817, 0x5c14, 0xb017, 0x2414, 0x1814, 0x8c17, 0x803f, 0x143c, 0x283c, 0xbc3f, 0x503c, 0xc43f, 0xf83f, 0x6c3c, 0xa03c, 0x343f, 0x083f, 0x9c3c, 0x703f, 0xe43c, 0xd83c, 0x4c3f, 0xc039, 0x543a, 0x683a, 0xfc39, 0x103a, 0x8439, 0xb839, 0x2c3a, 0xe03a, 0x7439, 0x4839, 0xdc3a, 0x3039, 0xa43a, 0x983a, 0x0c39, 0x0033, 0x9430, 0xa830, 0x3c33, 0xd030, 0x4433, 0x7833, 0xec30, 0x2030, 0xb433, 0x8833, 0x1c30, 0xf033, 0x6430, 0x5830, 0xcc33, 0x4035, 0xd436, 0xe836, 0x7c35, 0x9036, 0x0435, 0x3835, 0xac36, 0x6036, 0xf435, 0xc835, 0x5c36, 0xb035, 0x2436, 0x1836, 0x8c35, 0x0022, 0x9421, 0xa821, 0x3c22, 0xd021, 0x4422, 0x7822, 0xec21, 0x2021, 0xb422, 0x8822, 0x1c21, 0xf022, 0x6421, 0x5821, 0xcc22, 0x4024, 0xd427, 0xe827, 0x7c24, 0x9027, 0x0424, 0x3824, 0xac27, 0x6027, 0xf424, 0xc824, 0x5c27, 0xb024, 0x2427, 0x1827, 0x8c24, 0x802e, 0x142d, 0x282d, 0xbc2e, 0x502d, 0xc42e, 0xf82e, 0x6c2d, 0xa02d, 0x342e, 0x082e, 0x9c2d, 0x702e, 0xe42d, 0xd82d, 0x4c2e, 0xc028, 0x542b, 0x682b, 0xfc28, 0x102b, 0x8428, 0xb828, 0x2c2b, 0xe02b, 0x7428, 0x4828, 0xdc2b, 0x3028, 0xa42b, 0x982b, 0x0c28, ], [ 0x0000, 0x807b, 0x80f3, 0x0088, 0x81e3, 0x0198, 0x0110, 0x816b, 0x83c3, 0x03b8, 0x0330, 0x834b, 0x0220, 0x825b, 0x82d3, 0x02a8, 0x8783, 0x07f8, 0x0770, 0x870b, 0x0660, 0x861b, 0x8693, 0x06e8, 0x0440, 0x843b, 0x84b3, 0x04c8, 0x85a3, 0x05d8, 0x0550, 0x852b, 0x8f03, 0x0f78, 0x0ff0, 0x8f8b, 0x0ee0, 0x8e9b, 0x8e13, 0x0e68, 0x0cc0, 0x8cbb, 0x8c33, 0x0c48, 0x8d23, 0x0d58, 0x0dd0, 0x8dab, 0x0880, 0x88fb, 0x8873, 0x0808, 0x8963, 0x0918, 0x0990, 0x89eb, 0x8b43, 0x0b38, 0x0bb0, 0x8bcb, 0x0aa0, 0x8adb, 0x8a53, 0x0a28, 0x9e03, 0x1e78, 0x1ef0, 0x9e8b, 0x1fe0, 0x9f9b, 0x9f13, 0x1f68, 0x1dc0, 0x9dbb, 0x9d33, 0x1d48, 0x9c23, 0x1c58, 0x1cd0, 0x9cab, 0x1980, 0x99fb, 0x9973, 0x1908, 0x9863, 0x1818, 0x1890, 0x98eb, 0x9a43, 0x1a38, 0x1ab0, 0x9acb, 0x1ba0, 0x9bdb, 0x9b53, 0x1b28, 0x1100, 0x917b, 0x91f3, 0x1188, 0x90e3, 0x1098, 0x1010, 0x906b, 0x92c3, 0x12b8, 0x1230, 0x924b, 0x1320, 0x935b, 0x93d3, 0x13a8, 0x9683, 0x16f8, 0x1670, 0x960b, 0x1760, 0x971b, 0x9793, 0x17e8, 0x1540, 0x953b, 0x95b3, 0x15c8, 0x94a3, 0x14d8, 0x1450, 0x942b, 0xbc03, 0x3c78, 0x3cf0, 0xbc8b, 0x3de0, 0xbd9b, 0xbd13, 0x3d68, 0x3fc0, 0xbfbb, 0xbf33, 0x3f48, 0xbe23, 0x3e58, 0x3ed0, 0xbeab, 0x3b80, 0xbbfb, 0xbb73, 0x3b08, 0xba63, 0x3a18, 0x3a90, 0xbaeb, 0xb843, 0x3838, 0x38b0, 0xb8cb, 0x39a0, 0xb9db, 0xb953, 0x3928, 0x3300, 0xb37b, 0xb3f3, 0x3388, 0xb2e3, 0x3298, 0x3210, 0xb26b, 0xb0c3, 0x30b8, 0x3030, 0xb04b, 0x3120, 0xb15b, 0xb1d3, 0x31a8, 0xb483, 0x34f8, 0x3470, 0xb40b, 0x3560, 0xb51b, 0xb593, 0x35e8, 0x3740, 0xb73b, 0xb7b3, 0x37c8, 0xb6a3, 0x36d8, 0x3650, 0xb62b, 0x2200, 0xa27b, 0xa2f3, 0x2288, 0xa3e3, 0x2398, 0x2310, 0xa36b, 0xa1c3, 0x21b8, 0x2130, 0xa14b, 0x2020, 0xa05b, 0xa0d3, 0x20a8, 0xa583, 0x25f8, 0x2570, 0xa50b, 0x2460, 0xa41b, 0xa493, 0x24e8, 0x2640, 0xa63b, 0xa6b3, 0x26c8, 0xa7a3, 0x27d8, 0x2750, 0xa72b, 0xad03, 0x2d78, 0x2df0, 0xad8b, 0x2ce0, 0xac9b, 0xac13, 0x2c68, 0x2ec0, 0xaebb, 0xae33, 0x2e48, 0xaf23, 0x2f58, 0x2fd0, 0xafab, 0x2a80, 0xaafb, 0xaa73, 0x2a08, 0xab63, 0x2b18, 0x2b90, 0xabeb, 0xa943, 0x2938, 0x29b0, 0xa9cb, 0x28a0, 0xa8db, 0xa853, 0x2828, ], [ 0x0000, 0xf803, 0x7003, 0x8800, 0xe006, 0x1805, 0x9005, 0x6806, 0x4009, 0xb80a, 0x300a, 0xc809, 0xa00f, 0x580c, 0xd00c, 0x280f, 0x8012, 0x7811, 0xf011, 0x0812, 0x6014, 0x9817, 0x1017, 0xe814, 0xc01b, 0x3818, 0xb018, 0x481b, 0x201d, 0xd81e, 0x501e, 0xa81d, 0x8021, 0x7822, 0xf022, 0x0821, 0x6027, 0x9824, 0x1024, 0xe827, 0xc028, 0x382b, 0xb02b, 0x4828, 0x202e, 0xd82d, 0x502d, 0xa82e, 0x0033, 0xf830, 0x7030, 0x8833, 0xe035, 0x1836, 0x9036, 0x6835, 0x403a, 0xb839, 0x3039, 0xc83a, 0xa03c, 0x583f, 0xd03f, 0x283c, 0x8047, 0x7844, 0xf044, 0x0847, 0x6041, 0x9842, 0x1042, 0xe841, 0xc04e, 0x384d, 0xb04d, 0x484e, 0x2048, 0xd84b, 0x504b, 0xa848, 0x0055, 0xf856, 0x7056, 0x8855, 0xe053, 0x1850, 0x9050, 0x6853, 0x405c, 0xb85f, 0x305f, 0xc85c, 0xa05a, 0x5859, 0xd059, 0x285a, 0x0066, 0xf865, 0x7065, 0x8866, 0xe060, 0x1863, 0x9063, 0x6860, 0x406f, 0xb86c, 0x306c, 0xc86f, 0xa069, 0x586a, 0xd06a, 0x2869, 0x8074, 0x7877, 0xf077, 0x0874, 0x6072, 0x9871, 0x1071, 0xe872, 0xc07d, 0x387e, 0xb07e, 0x487d, 0x207b, 0xd878, 0x5078, 0xa87b, 0x808b, 0x7888, 0xf088, 0x088b, 0x608d, 0x988e, 0x108e, 0xe88d, 0xc082, 0x3881, 0xb081, 0x4882, 0x2084, 0xd887, 0x5087, 0xa884, 0x0099, 0xf89a, 0x709a, 0x8899, 0xe09f, 0x189c, 0x909c, 0x689f, 0x4090, 0xb893, 0x3093, 0xc890, 0xa096, 0x5895, 0xd095, 0x2896, 0x00aa, 0xf8a9, 0x70a9, 0x88aa, 0xe0ac, 0x18af, 0x90af, 0x68ac, 0x40a3, 0xb8a0, 0x30a0, 0xc8a3, 0xa0a5, 0x58a6, 0xd0a6, 0x28a5, 0x80b8, 0x78bb, 0xf0bb, 0x08b8, 0x60be, 0x98bd, 0x10bd, 0xe8be, 0xc0b1, 0x38b2, 0xb0b2, 0x48b1, 0x20b7, 0xd8b4, 0x50b4, 0xa8b7, 0x00cc, 0xf8cf, 0x70cf, 0x88cc, 0xe0ca, 0x18c9, 0x90c9, 0x68ca, 0x40c5, 0xb8c6, 0x30c6, 0xc8c5, 0xa0c3, 0x58c0, 0xd0c0, 0x28c3, 0x80de, 0x78dd, 0xf0dd, 0x08de, 0x60d8, 0x98db, 0x10db, 0xe8d8, 0xc0d7, 0x38d4, 0xb0d4, 0x48d7, 0x20d1, 0xd8d2, 0x50d2, 0xa8d1, 0x80ed, 0x78ee, 0xf0ee, 0x08ed, 0x60eb, 0x98e8, 0x10e8, 0xe8eb, 0xc0e4, 0x38e7, 0xb0e7, 0x48e4, 0x20e2, 0xd8e1, 0x50e1, 0xa8e2, 0x00ff, 0xf8fc, 0x70fc, 0x88ff, 0xe0f9, 0x18fa, 0x90fa, 0x68f9, 0x40f6, 0xb8f5, 0x30f5, 0xc8f6, 0xa0f0, 0x58f3, 0xd0f3, 0x28f0, ], [ 0x0000, 0x8113, 0x8223, 0x0330, 0x8443, 0x0550, 0x0660, 0x8773, 0x8883, 0x0990, 0x0aa0, 0x8bb3, 0x0cc0, 0x8dd3, 0x8ee3, 0x0ff0, 0x9103, 0x1010, 0x1320, 0x9233, 0x1540, 0x9453, 0x9763, 0x1670, 0x1980, 0x9893, 0x9ba3, 0x1ab0, 0x9dc3, 0x1cd0, 0x1fe0, 0x9ef3, 0xa203, 0x2310, 0x2020, 0xa133, 0x2640, 0xa753, 0xa463, 0x2570, 0x2a80, 0xab93, 0xa8a3, 0x29b0, 0xaec3, 0x2fd0, 0x2ce0, 0xadf3, 0x3300, 0xb213, 0xb123, 0x3030, 0xb743, 0x3650, 0x3560, 0xb473, 0xbb83, 0x3a90, 0x39a0, 0xb8b3, 0x3fc0, 0xbed3, 0xbde3, 0x3cf0, 0xc403, 0x4510, 0x4620, 0xc733, 0x4040, 0xc153, 0xc263, 0x4370, 0x4c80, 0xcd93, 0xcea3, 0x4fb0, 0xc8c3, 0x49d0, 0x4ae0, 0xcbf3, 0x5500, 0xd413, 0xd723, 0x5630, 0xd143, 0x5050, 0x5360, 0xd273, 0xdd83, 0x5c90, 0x5fa0, 0xdeb3, 0x59c0, 0xd8d3, 0xdbe3, 0x5af0, 0x6600, 0xe713, 0xe423, 0x6530, 0xe243, 0x6350, 0x6060, 0xe173, 0xee83, 0x6f90, 0x6ca0, 0xedb3, 0x6ac0, 0xebd3, 0xe8e3, 0x69f0, 0xf703, 0x7610, 0x7520, 0xf433, 0x7340, 0xf253, 0xf163, 0x7070, 0x7f80, 0xfe93, 0xfda3, 0x7cb0, 0xfbc3, 0x7ad0, 0x79e0, 0xf8f3, 0x0803, 0x8910, 0x8a20, 0x0b33, 0x8c40, 0x0d53, 0x0e63, 0x8f70, 0x8080, 0x0193, 0x02a3, 0x83b0, 0x04c3, 0x85d0, 0x86e0, 0x07f3, 0x9900, 0x1813, 0x1b23, 0x9a30, 0x1d43, 0x9c50, 0x9f60, 0x1e73, 0x1183, 0x9090, 0x93a0, 0x12b3, 0x95c0, 0x14d3, 0x17e3, 0x96f0, 0xaa00, 0x2b13, 0x2823, 0xa930, 0x2e43, 0xaf50, 0xac60, 0x2d73, 0x2283, 0xa390, 0xa0a0, 0x21b3, 0xa6c0, 0x27d3, 0x24e3, 0xa5f0, 0x3b03, 0xba10, 0xb920, 0x3833, 0xbf40, 0x3e53, 0x3d63, 0xbc70, 0xb380, 0x3293, 0x31a3, 0xb0b0, 0x37c3, 0xb6d0, 0xb5e0, 0x34f3, 0xcc00, 0x4d13, 0x4e23, 0xcf30, 0x4843, 0xc950, 0xca60, 0x4b73, 0x4483, 0xc590, 0xc6a0, 0x47b3, 0xc0c0, 0x41d3, 0x42e3, 0xc3f0, 0x5d03, 0xdc10, 0xdf20, 0x5e33, 0xd940, 0x5853, 0x5b63, 0xda70, 0xd580, 0x5493, 0x57a3, 0xd6b0, 0x51c3, 0xd0d0, 0xd3e0, 0x52f3, 0x6e03, 0xef10, 0xec20, 0x6d33, 0xea40, 0x6b53, 0x6863, 0xe970, 0xe680, 0x6793, 0x64a3, 0xe5b0, 0x62c3, 0xe3d0, 0xe0e0, 0x61f3, 0xff00, 0x7e13, 0x7d23, 0xfc30, 0x7b43, 0xfa50, 0xf960, 0x7873, 0x7783, 0xf690, 0xf5a0, 0x74b3, 0xf3c0, 0x72d3, 0x71e3, 0xf0f0, ], [ 0x0000, 0x1006, 0x200c, 0x300a, 0x4018, 0x501e, 0x6014, 0x7012, 0x8030, 0x9036, 0xa03c, 0xb03a, 0xc028, 0xd02e, 0xe024, 0xf022, 0x8065, 0x9063, 0xa069, 0xb06f, 0xc07d, 0xd07b, 0xe071, 0xf077, 0x0055, 0x1053, 0x2059, 0x305f, 0x404d, 0x504b, 0x6041, 0x7047, 0x80cf, 0x90c9, 0xa0c3, 0xb0c5, 0xc0d7, 0xd0d1, 0xe0db, 0xf0dd, 0x00ff, 0x10f9, 0x20f3, 0x30f5, 0x40e7, 0x50e1, 0x60eb, 0x70ed, 0x00aa, 0x10ac, 0x20a6, 0x30a0, 0x40b2, 0x50b4, 0x60be, 0x70b8, 0x809a, 0x909c, 0xa096, 0xb090, 0xc082, 0xd084, 0xe08e, 0xf088, 0x819b, 0x919d, 0xa197, 0xb191, 0xc183, 0xd185, 0xe18f, 0xf189, 0x01ab, 0x11ad, 0x21a7, 0x31a1, 0x41b3, 0x51b5, 0x61bf, 0x71b9, 0x01fe, 0x11f8, 0x21f2, 0x31f4, 0x41e6, 0x51e0, 0x61ea, 0x71ec, 0x81ce, 0x91c8, 0xa1c2, 0xb1c4, 0xc1d6, 0xd1d0, 0xe1da, 0xf1dc, 0x0154, 0x1152, 0x2158, 0x315e, 0x414c, 0x514a, 0x6140, 0x7146, 0x8164, 0x9162, 0xa168, 0xb16e, 0xc17c, 0xd17a, 0xe170, 0xf176, 0x8131, 0x9137, 0xa13d, 0xb13b, 0xc129, 0xd12f, 0xe125, 0xf123, 0x0101, 0x1107, 0x210d, 0x310b, 0x4119, 0x511f, 0x6115, 0x7113, 0x8333, 0x9335, 0xa33f, 0xb339, 0xc32b, 0xd32d, 0xe327, 0xf321, 0x0303, 0x1305, 0x230f, 0x3309, 0x431b, 0x531d, 0x6317, 0x7311, 0x0356, 0x1350, 0x235a, 0x335c, 0x434e, 0x5348, 0x6342, 0x7344, 0x8366, 0x9360, 0xa36a, 0xb36c, 0xc37e, 0xd378, 0xe372, 0xf374, 0x03fc, 0x13fa, 0x23f0, 0x33f6, 0x43e4, 0x53e2, 0x63e8, 0x73ee, 0x83cc, 0x93ca, 0xa3c0, 0xb3c6, 0xc3d4, 0xd3d2, 0xe3d8, 0xf3de, 0x8399, 0x939f, 0xa395, 0xb393, 0xc381, 0xd387, 0xe38d, 0xf38b, 0x03a9, 0x13af, 0x23a5, 0x33a3, 0x43b1, 0x53b7, 0x63bd, 0x73bb, 0x02a8, 0x12ae, 0x22a4, 0x32a2, 0x42b0, 0x52b6, 0x62bc, 0x72ba, 0x8298, 0x929e, 0xa294, 0xb292, 0xc280, 0xd286, 0xe28c, 0xf28a, 0x82cd, 0x92cb, 0xa2c1, 0xb2c7, 0xc2d5, 0xd2d3, 0xe2d9, 0xf2df, 0x02fd, 0x12fb, 0x22f1, 0x32f7, 0x42e5, 0x52e3, 0x62e9, 0x72ef, 0x8267, 0x9261, 0xa26b, 0xb26d, 0xc27f, 0xd279, 0xe273, 0xf275, 0x0257, 0x1251, 0x225b, 0x325d, 0x424f, 0x5249, 0x6243, 0x7245, 0x0202, 0x1204, 0x220e, 0x3208, 0x421a, 0x521c, 0x6216, 0x7210, 0x8232, 0x9234, 0xa23e, 0xb238, 0xc22a, 0xd22c, 0xe226, 0xf220, ], [ 0x0000, 0x8663, 0x8cc3, 0x0aa0, 0x9983, 0x1fe0, 0x1540, 0x9323, 0xb303, 0x3560, 0x3fc0, 0xb9a3, 0x2a80, 0xace3, 0xa643, 0x2020, 0xe603, 0x6060, 0x6ac0, 0xeca3, 0x7f80, 0xf9e3, 0xf343, 0x7520, 0x5500, 0xd363, 0xd9c3, 0x5fa0, 0xcc83, 0x4ae0, 0x4040, 0xc623, 0x4c03, 0xca60, 0xc0c0, 0x46a3, 0xd580, 0x53e3, 0x5943, 0xdf20, 0xff00, 0x7963, 0x73c3, 0xf5a0, 0x6683, 0xe0e0, 0xea40, 0x6c23, 0xaa00, 0x2c63, 0x26c3, 0xa0a0, 0x3383, 0xb5e0, 0xbf40, 0x3923, 0x1903, 0x9f60, 0x95c0, 0x13a3, 0x8080, 0x06e3, 0x0c43, 0x8a20, 0x9806, 0x1e65, 0x14c5, 0x92a6, 0x0185, 0x87e6, 0x8d46, 0x0b25, 0x2b05, 0xad66, 0xa7c6, 0x21a5, 0xb286, 0x34e5, 0x3e45, 0xb826, 0x7e05, 0xf866, 0xf2c6, 0x74a5, 0xe786, 0x61e5, 0x6b45, 0xed26, 0xcd06, 0x4b65, 0x41c5, 0xc7a6, 0x5485, 0xd2e6, 0xd846, 0x5e25, 0xd405, 0x5266, 0x58c6, 0xdea5, 0x4d86, 0xcbe5, 0xc145, 0x4726, 0x6706, 0xe165, 0xebc5, 0x6da6, 0xfe85, 0x78e6, 0x7246, 0xf425, 0x3206, 0xb465, 0xbec5, 0x38a6, 0xab85, 0x2de6, 0x2746, 0xa125, 0x8105, 0x0766, 0x0dc6, 0x8ba5, 0x1886, 0x9ee5, 0x9445, 0x1226, 0xb009, 0x366a, 0x3cca, 0xbaa9, 0x298a, 0xafe9, 0xa549, 0x232a, 0x030a, 0x8569, 0x8fc9, 0x09aa, 0x9a89, 0x1cea, 0x164a, 0x9029, 0x560a, 0xd069, 0xdac9, 0x5caa, 0xcf89, 0x49ea, 0x434a, 0xc529, 0xe509, 0x636a, 0x69ca, 0xefa9, 0x7c8a, 0xfae9, 0xf049, 0x762a, 0xfc0a, 0x7a69, 0x70c9, 0xf6aa, 0x6589, 0xe3ea, 0xe94a, 0x6f29, 0x4f09, 0xc96a, 0xc3ca, 0x45a9, 0xd68a, 0x50e9, 0x5a49, 0xdc2a, 0x1a09, 0x9c6a, 0x96ca, 0x10a9, 0x838a, 0x05e9, 0x0f49, 0x892a, 0xa90a, 0x2f69, 0x25c9, 0xa3aa, 0x3089, 0xb6ea, 0xbc4a, 0x3a29, 0x280f, 0xae6c, 0xa4cc, 0x22af, 0xb18c, 0x37ef, 0x3d4f, 0xbb2c, 0x9b0c, 0x1d6f, 0x17cf, 0x91ac, 0x028f, 0x84ec, 0x8e4c, 0x082f, 0xce0c, 0x486f, 0x42cf, 0xc4ac, 0x578f, 0xd1ec, 0xdb4c, 0x5d2f, 0x7d0f, 0xfb6c, 0xf1cc, 0x77af, 0xe48c, 0x62ef, 0x684f, 0xee2c, 0x640c, 0xe26f, 0xe8cf, 0x6eac, 0xfd8f, 0x7bec, 0x714c, 0xf72f, 0xd70f, 0x516c, 0x5bcc, 0xddaf, 0x4e8c, 0xc8ef, 0xc24f, 0x442c, 0x820f, 0x046c, 0x0ecc, 0x88af, 0x1b8c, 0x9def, 0x974f, 0x112c, 0x310c, 0xb76f, 0xbdcf, 0x3bac, 0xa88f, 0x2eec, 0x244c, 0xa22f, ], [ 0x0000, 0xe017, 0x402b, 0xa03c, 0x8056, 0x6041, 0xc07d, 0x206a, 0x80a9, 0x60be, 0xc082, 0x2095, 0x00ff, 0xe0e8, 0x40d4, 0xa0c3, 0x8157, 0x6140, 0xc17c, 0x216b, 0x0101, 0xe116, 0x412a, 0xa13d, 0x01fe, 0xe1e9, 0x41d5, 0xa1c2, 0x81a8, 0x61bf, 0xc183, 0x2194, 0x82ab, 0x62bc, 0xc280, 0x2297, 0x02fd, 0xe2ea, 0x42d6, 0xa2c1, 0x0202, 0xe215, 0x4229, 0xa23e, 0x8254, 0x6243, 0xc27f, 0x2268, 0x03fc, 0xe3eb, 0x43d7, 0xa3c0, 0x83aa, 0x63bd, 0xc381, 0x2396, 0x8355, 0x6342, 0xc37e, 0x2369, 0x0303, 0xe314, 0x4328, 0xa33f, 0x8553, 0x6544, 0xc578, 0x256f, 0x0505, 0xe512, 0x452e, 0xa539, 0x05fa, 0xe5ed, 0x45d1, 0xa5c6, 0x85ac, 0x65bb, 0xc587, 0x2590, 0x0404, 0xe413, 0x442f, 0xa438, 0x8452, 0x6445, 0xc479, 0x246e, 0x84ad, 0x64ba, 0xc486, 0x2491, 0x04fb, 0xe4ec, 0x44d0, 0xa4c7, 0x07f8, 0xe7ef, 0x47d3, 0xa7c4, 0x87ae, 0x67b9, 0xc785, 0x2792, 0x8751, 0x6746, 0xc77a, 0x276d, 0x0707, 0xe710, 0x472c, 0xa73b, 0x86af, 0x66b8, 0xc684, 0x2693, 0x06f9, 0xe6ee, 0x46d2, 0xa6c5, 0x0606, 0xe611, 0x462d, 0xa63a, 0x8650, 0x6647, 0xc67b, 0x266c, 0x8aa3, 0x6ab4, 0xca88, 0x2a9f, 0x0af5, 0xeae2, 0x4ade, 0xaac9, 0x0a0a, 0xea1d, 0x4a21, 0xaa36, 0x8a5c, 0x6a4b, 0xca77, 0x2a60, 0x0bf4, 0xebe3, 0x4bdf, 0xabc8, 0x8ba2, 0x6bb5, 0xcb89, 0x2b9e, 0x8b5d, 0x6b4a, 0xcb76, 0x2b61, 0x0b0b, 0xeb1c, 0x4b20, 0xab37, 0x0808, 0xe81f, 0x4823, 0xa834, 0x885e, 0x6849, 0xc875, 0x2862, 0x88a1, 0x68b6, 0xc88a, 0x289d, 0x08f7, 0xe8e0, 0x48dc, 0xa8cb, 0x895f, 0x6948, 0xc974, 0x2963, 0x0909, 0xe91e, 0x4922, 0xa935, 0x09f6, 0xe9e1, 0x49dd, 0xa9ca, 0x89a0, 0x69b7, 0xc98b, 0x299c, 0x0ff0, 0xefe7, 0x4fdb, 0xafcc, 0x8fa6, 0x6fb1, 0xcf8d, 0x2f9a, 0x8f59, 0x6f4e, 0xcf72, 0x2f65, 0x0f0f, 0xef18, 0x4f24, 0xaf33, 0x8ea7, 0x6eb0, 0xce8c, 0x2e9b, 0x0ef1, 0xeee6, 0x4eda, 0xaecd, 0x0e0e, 0xee19, 0x4e25, 0xae32, 0x8e58, 0x6e4f, 0xce73, 0x2e64, 0x8d5b, 0x6d4c, 0xcd70, 0x2d67, 0x0d0d, 0xed1a, 0x4d26, 0xad31, 0x0df2, 0xede5, 0x4dd9, 0xadce, 0x8da4, 0x6db3, 0xcd8f, 0x2d98, 0x0c0c, 0xec1b, 0x4c27, 0xac30, 0x8c5a, 0x6c4d, 0xcc71, 0x2c66, 0x8ca5, 0x6cb2, 0xcc8e, 0x2c99, 0x0cf3, 0xece4, 0x4cd8, 0xaccf, ], [ 0x0000, 0x9543, 0xaa83, 0x3fc0, 0xd503, 0x4040, 0x7f80, 0xeac3, 0x2a03, 0xbf40, 0x8080, 0x15c3, 0xff00, 0x6a43, 0x5583, 0xc0c0, 0x5406, 0xc145, 0xfe85, 0x6bc6, 0x8105, 0x1446, 0x2b86, 0xbec5, 0x7e05, 0xeb46, 0xd486, 0x41c5, 0xab06, 0x3e45, 0x0185, 0x94c6, 0xa80c, 0x3d4f, 0x028f, 0x97cc, 0x7d0f, 0xe84c, 0xd78c, 0x42cf, 0x820f, 0x174c, 0x288c, 0xbdcf, 0x570c, 0xc24f, 0xfd8f, 0x68cc, 0xfc0a, 0x6949, 0x5689, 0xc3ca, 0x2909, 0xbc4a, 0x838a, 0x16c9, 0xd609, 0x434a, 0x7c8a, 0xe9c9, 0x030a, 0x9649, 0xa989, 0x3cca, 0xd01d, 0x455e, 0x7a9e, 0xefdd, 0x051e, 0x905d, 0xaf9d, 0x3ade, 0xfa1e, 0x6f5d, 0x509d, 0xc5de, 0x2f1d, 0xba5e, 0x859e, 0x10dd, 0x841b, 0x1158, 0x2e98, 0xbbdb, 0x5118, 0xc45b, 0xfb9b, 0x6ed8, 0xae18, 0x3b5b, 0x049b, 0x91d8, 0x7b1b, 0xee58, 0xd198, 0x44db, 0x7811, 0xed52, 0xd292, 0x47d1, 0xad12, 0x3851, 0x0791, 0x92d2, 0x5212, 0xc751, 0xf891, 0x6dd2, 0x8711, 0x1252, 0x2d92, 0xb8d1, 0x2c17, 0xb954, 0x8694, 0x13d7, 0xf914, 0x6c57, 0x5397, 0xc6d4, 0x0614, 0x9357, 0xac97, 0x39d4, 0xd317, 0x4654, 0x7994, 0xecd7, 0x203f, 0xb57c, 0x8abc, 0x1fff, 0xf53c, 0x607f, 0x5fbf, 0xcafc, 0x0a3c, 0x9f7f, 0xa0bf, 0x35fc, 0xdf3f, 0x4a7c, 0x75bc, 0xe0ff, 0x7439, 0xe17a, 0xdeba, 0x4bf9, 0xa13a, 0x3479, 0x0bb9, 0x9efa, 0x5e3a, 0xcb79, 0xf4b9, 0x61fa, 0x8b39, 0x1e7a, 0x21ba, 0xb4f9, 0x8833, 0x1d70, 0x22b0, 0xb7f3, 0x5d30, 0xc873, 0xf7b3, 0x62f0, 0xa230, 0x3773, 0x08b3, 0x9df0, 0x7733, 0xe270, 0xddb0, 0x48f3, 0xdc35, 0x4976, 0x76b6, 0xe3f5, 0x0936, 0x9c75, 0xa3b5, 0x36f6, 0xf636, 0x6375, 0x5cb5, 0xc9f6, 0x2335, 0xb676, 0x89b6, 0x1cf5, 0xf022, 0x6561, 0x5aa1, 0xcfe2, 0x2521, 0xb062, 0x8fa2, 0x1ae1, 0xda21, 0x4f62, 0x70a2, 0xe5e1, 0x0f22, 0x9a61, 0xa5a1, 0x30e2, 0xa424, 0x3167, 0x0ea7, 0x9be4, 0x7127, 0xe464, 0xdba4, 0x4ee7, 0x8e27, 0x1b64, 0x24a4, 0xb1e7, 0x5b24, 0xce67, 0xf1a7, 0x64e4, 0x582e, 0xcd6d, 0xf2ad, 0x67ee, 0x8d2d, 0x186e, 0x27ae, 0xb2ed, 0x722d, 0xe76e, 0xd8ae, 0x4ded, 0xa72e, 0x326d, 0x0dad, 0x98ee, 0x0c28, 0x996b, 0xa6ab, 0x33e8, 0xd92b, 0x4c68, 0x73a8, 0xe6eb, 0x262b, 0xb368, 0x8ca8, 0x19eb, 0xf328, 0x666b, 0x59ab, 0xcce8, ], [ 0x0000, 0x407e, 0x80fc, 0xc082, 0x81fd, 0xc183, 0x0101, 0x417f, 0x83ff, 0xc381, 0x0303, 0x437d, 0x0202, 0x427c, 0x82fe, 0xc280, 0x87fb, 0xc785, 0x0707, 0x4779, 0x0606, 0x4678, 0x86fa, 0xc684, 0x0404, 0x447a, 0x84f8, 0xc486, 0x85f9, 0xc587, 0x0505, 0x457b, 0x8ff3, 0xcf8d, 0x0f0f, 0x4f71, 0x0e0e, 0x4e70, 0x8ef2, 0xce8c, 0x0c0c, 0x4c72, 0x8cf0, 0xcc8e, 0x8df1, 0xcd8f, 0x0d0d, 0x4d73, 0x0808, 0x4876, 0x88f4, 0xc88a, 0x89f5, 0xc98b, 0x0909, 0x4977, 0x8bf7, 0xcb89, 0x0b0b, 0x4b75, 0x0a0a, 0x4a74, 0x8af6, 0xca88, 0x9fe3, 0xdf9d, 0x1f1f, 0x5f61, 0x1e1e, 0x5e60, 0x9ee2, 0xde9c, 0x1c1c, 0x5c62, 0x9ce0, 0xdc9e, 0x9de1, 0xdd9f, 0x1d1d, 0x5d63, 0x1818, 0x5866, 0x98e4, 0xd89a, 0x99e5, 0xd99b, 0x1919, 0x5967, 0x9be7, 0xdb99, 0x1b1b, 0x5b65, 0x1a1a, 0x5a64, 0x9ae6, 0xda98, 0x1010, 0x506e, 0x90ec, 0xd092, 0x91ed, 0xd193, 0x1111, 0x516f, 0x93ef, 0xd391, 0x1313, 0x536d, 0x1212, 0x526c, 0x92ee, 0xd290, 0x97eb, 0xd795, 0x1717, 0x5769, 0x1616, 0x5668, 0x96ea, 0xd694, 0x1414, 0x546a, 0x94e8, 0xd496, 0x95e9, 0xd597, 0x1515, 0x556b, 0xbfc3, 0xffbd, 0x3f3f, 0x7f41, 0x3e3e, 0x7e40, 0xbec2, 0xfebc, 0x3c3c, 0x7c42, 0xbcc0, 0xfcbe, 0xbdc1, 0xfdbf, 0x3d3d, 0x7d43, 0x3838, 0x7846, 0xb8c4, 0xf8ba, 0xb9c5, 0xf9bb, 0x3939, 0x7947, 0xbbc7, 0xfbb9, 0x3b3b, 0x7b45, 0x3a3a, 0x7a44, 0xbac6, 0xfab8, 0x3030, 0x704e, 0xb0cc, 0xf0b2, 0xb1cd, 0xf1b3, 0x3131, 0x714f, 0xb3cf, 0xf3b1, 0x3333, 0x734d, 0x3232, 0x724c, 0xb2ce, 0xf2b0, 0xb7cb, 0xf7b5, 0x3737, 0x7749, 0x3636, 0x7648, 0xb6ca, 0xf6b4, 0x3434, 0x744a, 0xb4c8, 0xf4b6, 0xb5c9, 0xf5b7, 0x3535, 0x754b, 0x2020, 0x605e, 0xa0dc, 0xe0a2, 0xa1dd, 0xe1a3, 0x2121, 0x615f, 0xa3df, 0xe3a1, 0x2323, 0x635d, 0x2222, 0x625c, 0xa2de, 0xe2a0, 0xa7db, 0xe7a5, 0x2727, 0x6759, 0x2626, 0x6658, 0xa6da, 0xe6a4, 0x2424, 0x645a, 0xa4d8, 0xe4a6, 0xa5d9, 0xe5a7, 0x2525, 0x655b, 0xafd3, 0xefad, 0x2f2f, 0x6f51, 0x2e2e, 0x6e50, 0xaed2, 0xeeac, 0x2c2c, 0x6c52, 0xacd0, 0xecae, 0xadd1, 0xedaf, 0x2d2d, 0x6d53, 0x2828, 0x6856, 0xa8d4, 0xe8aa, 0xa9d5, 0xe9ab, 0x2929, 0x6957, 0xabd7, 0xeba9, 0x2b2b, 0x6b55, 0x2a2a, 0x6a54, 0xaad6, 0xeaa8, ], [ 0x0000, 0xff83, 0x7f03, 0x8080, 0xfe06, 0x0185, 0x8105, 0x7e86, 0x7c09, 0x838a, 0x030a, 0xfc89, 0x820f, 0x7d8c, 0xfd0c, 0x028f, 0xf812, 0x0791, 0x8711, 0x7892, 0x0614, 0xf997, 0x7917, 0x8694, 0x841b, 0x7b98, 0xfb18, 0x049b, 0x7a1d, 0x859e, 0x051e, 0xfa9d, 0x7021, 0x8fa2, 0x0f22, 0xf0a1, 0x8e27, 0x71a4, 0xf124, 0x0ea7, 0x0c28, 0xf3ab, 0x732b, 0x8ca8, 0xf22e, 0x0dad, 0x8d2d, 0x72ae, 0x8833, 0x77b0, 0xf730, 0x08b3, 0x7635, 0x89b6, 0x0936, 0xf6b5, 0xf43a, 0x0bb9, 0x8b39, 0x74ba, 0x0a3c, 0xf5bf, 0x753f, 0x8abc, 0xe042, 0x1fc1, 0x9f41, 0x60c2, 0x1e44, 0xe1c7, 0x6147, 0x9ec4, 0x9c4b, 0x63c8, 0xe348, 0x1ccb, 0x624d, 0x9dce, 0x1d4e, 0xe2cd, 0x1850, 0xe7d3, 0x6753, 0x98d0, 0xe656, 0x19d5, 0x9955, 0x66d6, 0x6459, 0x9bda, 0x1b5a, 0xe4d9, 0x9a5f, 0x65dc, 0xe55c, 0x1adf, 0x9063, 0x6fe0, 0xef60, 0x10e3, 0x6e65, 0x91e6, 0x1166, 0xeee5, 0xec6a, 0x13e9, 0x9369, 0x6cea, 0x126c, 0xedef, 0x6d6f, 0x92ec, 0x6871, 0x97f2, 0x1772, 0xe8f1, 0x9677, 0x69f4, 0xe974, 0x16f7, 0x1478, 0xebfb, 0x6b7b, 0x94f8, 0xea7e, 0x15fd, 0x957d, 0x6afe, 0x4081, 0xbf02, 0x3f82, 0xc001, 0xbe87, 0x4104, 0xc184, 0x3e07, 0x3c88, 0xc30b, 0x438b, 0xbc08, 0xc28e, 0x3d0d, 0xbd8d, 0x420e, 0xb893, 0x4710, 0xc790, 0x3813, 0x4695, 0xb916, 0x3996, 0xc615, 0xc49a, 0x3b19, 0xbb99, 0x441a, 0x3a9c, 0xc51f, 0x459f, 0xba1c, 0x30a0, 0xcf23, 0x4fa3, 0xb020, 0xcea6, 0x3125, 0xb1a5, 0x4e26, 0x4ca9, 0xb32a, 0x33aa, 0xcc29, 0xb2af, 0x4d2c, 0xcdac, 0x322f, 0xc8b2, 0x3731, 0xb7b1, 0x4832, 0x36b4, 0xc937, 0x49b7, 0xb634, 0xb4bb, 0x4b38, 0xcbb8, 0x343b, 0x4abd, 0xb53e, 0x35be, 0xca3d, 0xa0c3, 0x5f40, 0xdfc0, 0x2043, 0x5ec5, 0xa146, 0x21c6, 0xde45, 0xdcca, 0x2349, 0xa3c9, 0x5c4a, 0x22cc, 0xdd4f, 0x5dcf, 0xa24c, 0x58d1, 0xa752, 0x27d2, 0xd851, 0xa6d7, 0x5954, 0xd9d4, 0x2657, 0x24d8, 0xdb5b, 0x5bdb, 0xa458, 0xdade, 0x255d, 0xa5dd, 0x5a5e, 0xd0e2, 0x2f61, 0xafe1, 0x5062, 0x2ee4, 0xd167, 0x51e7, 0xae64, 0xaceb, 0x5368, 0xd3e8, 0x2c6b, 0x52ed, 0xad6e, 0x2dee, 0xd26d, 0x28f0, 0xd773, 0x57f3, 0xa870, 0xd6f6, 0x2975, 0xa9f5, 0x5676, 0x54f9, 0xab7a, 0x2bfa, 0xd479, 0xaaff, 0x557c, 0xd5fc, 0x2a7f, ], [ 0x0000, 0x8102, 0x8201, 0x0303, 0x8407, 0x0505, 0x0606, 0x8704, 0x880b, 0x0909, 0x0a0a, 0x8b08, 0x0c0c, 0x8d0e, 0x8e0d, 0x0f0f, 0x9013, 0x1111, 0x1212, 0x9310, 0x1414, 0x9516, 0x9615, 0x1717, 0x1818, 0x991a, 0x9a19, 0x1b1b, 0x9c1f, 0x1d1d, 0x1e1e, 0x9f1c, 0xa023, 0x2121, 0x2222, 0xa320, 0x2424, 0xa526, 0xa625, 0x2727, 0x2828, 0xa92a, 0xaa29, 0x2b2b, 0xac2f, 0x2d2d, 0x2e2e, 0xaf2c, 0x3030, 0xb132, 0xb231, 0x3333, 0xb437, 0x3535, 0x3636, 0xb734, 0xb83b, 0x3939, 0x3a3a, 0xbb38, 0x3c3c, 0xbd3e, 0xbe3d, 0x3f3f, 0xc043, 0x4141, 0x4242, 0xc340, 0x4444, 0xc546, 0xc645, 0x4747, 0x4848, 0xc94a, 0xca49, 0x4b4b, 0xcc4f, 0x4d4d, 0x4e4e, 0xcf4c, 0x5050, 0xd152, 0xd251, 0x5353, 0xd457, 0x5555, 0x5656, 0xd754, 0xd85b, 0x5959, 0x5a5a, 0xdb58, 0x5c5c, 0xdd5e, 0xde5d, 0x5f5f, 0x6060, 0xe162, 0xe261, 0x6363, 0xe467, 0x6565, 0x6666, 0xe764, 0xe86b, 0x6969, 0x6a6a, 0xeb68, 0x6c6c, 0xed6e, 0xee6d, 0x6f6f, 0xf073, 0x7171, 0x7272, 0xf370, 0x7474, 0xf576, 0xf675, 0x7777, 0x7878, 0xf97a, 0xfa79, 0x7b7b, 0xfc7f, 0x7d7d, 0x7e7e, 0xff7c, 0x0083, 0x8181, 0x8282, 0x0380, 0x8484, 0x0586, 0x0685, 0x8787, 0x8888, 0x098a, 0x0a89, 0x8b8b, 0x0c8f, 0x8d8d, 0x8e8e, 0x0f8c, 0x9090, 0x1192, 0x1291, 0x9393, 0x1497, 0x9595, 0x9696, 0x1794, 0x189b, 0x9999, 0x9a9a, 0x1b98, 0x9c9c, 0x1d9e, 0x1e9d, 0x9f9f, 0xa0a0, 0x21a2, 0x22a1, 0xa3a3, 0x24a7, 0xa5a5, 0xa6a6, 0x27a4, 0x28ab, 0xa9a9, 0xaaaa, 0x2ba8, 0xacac, 0x2dae, 0x2ead, 0xafaf, 0x30b3, 0xb1b1, 0xb2b2, 0x33b0, 0xb4b4, 0x35b6, 0x36b5, 0xb7b7, 0xb8b8, 0x39ba, 0x3ab9, 0xbbbb, 0x3cbf, 0xbdbd, 0xbebe, 0x3fbc, 0xc0c0, 0x41c2, 0x42c1, 0xc3c3, 0x44c7, 0xc5c5, 0xc6c6, 0x47c4, 0x48cb, 0xc9c9, 0xcaca, 0x4bc8, 0xcccc, 0x4dce, 0x4ecd, 0xcfcf, 0x50d3, 0xd1d1, 0xd2d2, 0x53d0, 0xd4d4, 0x55d6, 0x56d5, 0xd7d7, 0xd8d8, 0x59da, 0x5ad9, 0xdbdb, 0x5cdf, 0xdddd, 0xdede, 0x5fdc, 0x60e3, 0xe1e1, 0xe2e2, 0x63e0, 0xe4e4, 0x65e6, 0x66e5, 0xe7e7, 0xe8e8, 0x69ea, 0x6ae9, 0xebeb, 0x6cef, 0xeded, 0xeeee, 0x6fec, 0xf0f0, 0x71f2, 0x72f1, 0xf3f3, 0x74f7, 0xf5f5, 0xf6f6, 0x77f4, 0x78fb, 0xf9f9, 0xfafa, 0x7bf8, 0xfcfc, 0x7dfe, 0x7efd, 0xffff, ], [ 0x0000, 0x0106, 0x020c, 0x030a, 0x0418, 0x051e, 0x0614, 0x0712, 0x0830, 0x0936, 0x0a3c, 0x0b3a, 0x0c28, 0x0d2e, 0x0e24, 0x0f22, 0x1060, 0x1166, 0x126c, 0x136a, 0x1478, 0x157e, 0x1674, 0x1772, 0x1850, 0x1956, 0x1a5c, 0x1b5a, 0x1c48, 0x1d4e, 0x1e44, 0x1f42, 0x20c0, 0x21c6, 0x22cc, 0x23ca, 0x24d8, 0x25de, 0x26d4, 0x27d2, 0x28f0, 0x29f6, 0x2afc, 0x2bfa, 0x2ce8, 0x2dee, 0x2ee4, 0x2fe2, 0x30a0, 0x31a6, 0x32ac, 0x33aa, 0x34b8, 0x35be, 0x36b4, 0x37b2, 0x3890, 0x3996, 0x3a9c, 0x3b9a, 0x3c88, 0x3d8e, 0x3e84, 0x3f82, 0x4180, 0x4086, 0x438c, 0x428a, 0x4598, 0x449e, 0x4794, 0x4692, 0x49b0, 0x48b6, 0x4bbc, 0x4aba, 0x4da8, 0x4cae, 0x4fa4, 0x4ea2, 0x51e0, 0x50e6, 0x53ec, 0x52ea, 0x55f8, 0x54fe, 0x57f4, 0x56f2, 0x59d0, 0x58d6, 0x5bdc, 0x5ada, 0x5dc8, 0x5cce, 0x5fc4, 0x5ec2, 0x6140, 0x6046, 0x634c, 0x624a, 0x6558, 0x645e, 0x6754, 0x6652, 0x6970, 0x6876, 0x6b7c, 0x6a7a, 0x6d68, 0x6c6e, 0x6f64, 0x6e62, 0x7120, 0x7026, 0x732c, 0x722a, 0x7538, 0x743e, 0x7734, 0x7632, 0x7910, 0x7816, 0x7b1c, 0x7a1a, 0x7d08, 0x7c0e, 0x7f04, 0x7e02, 0x8300, 0x8206, 0x810c, 0x800a, 0x8718, 0x861e, 0x8514, 0x8412, 0x8b30, 0x8a36, 0x893c, 0x883a, 0x8f28, 0x8e2e, 0x8d24, 0x8c22, 0x9360, 0x9266, 0x916c, 0x906a, 0x9778, 0x967e, 0x9574, 0x9472, 0x9b50, 0x9a56, 0x995c, 0x985a, 0x9f48, 0x9e4e, 0x9d44, 0x9c42, 0xa3c0, 0xa2c6, 0xa1cc, 0xa0ca, 0xa7d8, 0xa6de, 0xa5d4, 0xa4d2, 0xabf0, 0xaaf6, 0xa9fc, 0xa8fa, 0xafe8, 0xaeee, 0xade4, 0xace2, 0xb3a0, 0xb2a6, 0xb1ac, 0xb0aa, 0xb7b8, 0xb6be, 0xb5b4, 0xb4b2, 0xbb90, 0xba96, 0xb99c, 0xb89a, 0xbf88, 0xbe8e, 0xbd84, 0xbc82, 0xc280, 0xc386, 0xc08c, 0xc18a, 0xc698, 0xc79e, 0xc494, 0xc592, 0xcab0, 0xcbb6, 0xc8bc, 0xc9ba, 0xcea8, 0xcfae, 0xcca4, 0xcda2, 0xd2e0, 0xd3e6, 0xd0ec, 0xd1ea, 0xd6f8, 0xd7fe, 0xd4f4, 0xd5f2, 0xdad0, 0xdbd6, 0xd8dc, 0xd9da, 0xdec8, 0xdfce, 0xdcc4, 0xddc2, 0xe240, 0xe346, 0xe04c, 0xe14a, 0xe658, 0xe75e, 0xe454, 0xe552, 0xea70, 0xeb76, 0xe87c, 0xe97a, 0xee68, 0xef6e, 0xec64, 0xed62, 0xf220, 0xf326, 0xf02c, 0xf12a, 0xf638, 0xf73e, 0xf434, 0xf532, 0xfa10, 0xfb16, 0xf81c, 0xf91a, 0xfe08, 0xff0e, 0xfc04, 0xfd02, ], [ 0x0000, 0x8605, 0x8c0f, 0x0a0a, 0x981b, 0x1e1e, 0x1414, 0x9211, 0xb033, 0x3636, 0x3c3c, 0xba39, 0x2828, 0xae2d, 0xa427, 0x2222, 0xe063, 0x6666, 0x6c6c, 0xea69, 0x7878, 0xfe7d, 0xf477, 0x7272, 0x5050, 0xd655, 0xdc5f, 0x5a5a, 0xc84b, 0x4e4e, 0x4444, 0xc241, 0x40c3, 0xc6c6, 0xcccc, 0x4ac9, 0xd8d8, 0x5edd, 0x54d7, 0xd2d2, 0xf0f0, 0x76f5, 0x7cff, 0xfafa, 0x68eb, 0xeeee, 0xe4e4, 0x62e1, 0xa0a0, 0x26a5, 0x2caf, 0xaaaa, 0x38bb, 0xbebe, 0xb4b4, 0x32b1, 0x1093, 0x9696, 0x9c9c, 0x1a99, 0x8888, 0x0e8d, 0x0487, 0x8282, 0x8186, 0x0783, 0x0d89, 0x8b8c, 0x199d, 0x9f98, 0x9592, 0x1397, 0x31b5, 0xb7b0, 0xbdba, 0x3bbf, 0xa9ae, 0x2fab, 0x25a1, 0xa3a4, 0x61e5, 0xe7e0, 0xedea, 0x6bef, 0xf9fe, 0x7ffb, 0x75f1, 0xf3f4, 0xd1d6, 0x57d3, 0x5dd9, 0xdbdc, 0x49cd, 0xcfc8, 0xc5c2, 0x43c7, 0xc145, 0x4740, 0x4d4a, 0xcb4f, 0x595e, 0xdf5b, 0xd551, 0x5354, 0x7176, 0xf773, 0xfd79, 0x7b7c, 0xe96d, 0x6f68, 0x6562, 0xe367, 0x2126, 0xa723, 0xad29, 0x2b2c, 0xb93d, 0x3f38, 0x3532, 0xb337, 0x9115, 0x1710, 0x1d1a, 0x9b1f, 0x090e, 0x8f0b, 0x8501, 0x0304, 0x8309, 0x050c, 0x0f06, 0x8903, 0x1b12, 0x9d17, 0x971d, 0x1118, 0x333a, 0xb53f, 0xbf35, 0x3930, 0xab21, 0x2d24, 0x272e, 0xa12b, 0x636a, 0xe56f, 0xef65, 0x6960, 0xfb71, 0x7d74, 0x777e, 0xf17b, 0xd359, 0x555c, 0x5f56, 0xd953, 0x4b42, 0xcd47, 0xc74d, 0x4148, 0xc3ca, 0x45cf, 0x4fc5, 0xc9c0, 0x5bd1, 0xddd4, 0xd7de, 0x51db, 0x73f9, 0xf5fc, 0xfff6, 0x79f3, 0xebe2, 0x6de7, 0x67ed, 0xe1e8, 0x23a9, 0xa5ac, 0xafa6, 0x29a3, 0xbbb2, 0x3db7, 0x37bd, 0xb1b8, 0x939a, 0x159f, 0x1f95, 0x9990, 0x0b81, 0x8d84, 0x878e, 0x018b, 0x028f, 0x848a, 0x8e80, 0x0885, 0x9a94, 0x1c91, 0x169b, 0x909e, 0xb2bc, 0x34b9, 0x3eb3, 0xb8b6, 0x2aa7, 0xaca2, 0xa6a8, 0x20ad, 0xe2ec, 0x64e9, 0x6ee3, 0xe8e6, 0x7af7, 0xfcf2, 0xf6f8, 0x70fd, 0x52df, 0xd4da, 0xded0, 0x58d5, 0xcac4, 0x4cc1, 0x46cb, 0xc0ce, 0x424c, 0xc449, 0xce43, 0x4846, 0xda57, 0x5c52, 0x5658, 0xd05d, 0xf27f, 0x747a, 0x7e70, 0xf875, 0x6a64, 0xec61, 0xe66b, 0x606e, 0xa22f, 0x242a, 0x2e20, 0xa825, 0x3a34, 0xbc31, 0xb63b, 0x303e, 0x121c, 0x9419, 0x9e13, 0x1816, 0x8a07, 0x0c02, 0x0608, 0x800d, ], ]; pub static CRC16_DECT_R_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x0589, 0x0b12, 0x0e9b, 0x1624, 0x13ad, 0x1d36, 0x18bf, 0x2c48, 0x29c1, 0x275a, 0x22d3, 0x3a6c, 0x3fe5, 0x317e, 0x34f7, 0x5890, 0x5d19, 0x5382, 0x560b, 0x4eb4, 0x4b3d, 0x45a6, 0x402f, 0x74d8, 0x7151, 0x7fca, 0x7a43, 0x62fc, 0x6775, 0x69ee, 0x6c67, 0xb120, 0xb4a9, 0xba32, 0xbfbb, 0xa704, 0xa28d, 0xac16, 0xa99f, 0x9d68, 0x98e1, 0x967a, 0x93f3, 0x8b4c, 0x8ec5, 0x805e, 0x85d7, 0xe9b0, 0xec39, 0xe2a2, 0xe72b, 0xff94, 0xfa1d, 0xf486, 0xf10f, 0xc5f8, 0xc071, 0xceea, 0xcb63, 0xd3dc, 0xd655, 0xd8ce, 0xdd47, 0x67c9, 0x6240, 0x6cdb, 0x6952, 0x71ed, 0x7464, 0x7aff, 0x7f76, 0x4b81, 0x4e08, 0x4093, 0x451a, 0x5da5, 0x582c, 0x56b7, 0x533e, 0x3f59, 0x3ad0, 0x344b, 0x31c2, 0x297d, 0x2cf4, 0x226f, 0x27e6, 0x1311, 0x1698, 0x1803, 0x1d8a, 0x0535, 0x00bc, 0x0e27, 0x0bae, 0xd6e9, 0xd360, 0xddfb, 0xd872, 0xc0cd, 0xc544, 0xcbdf, 0xce56, 0xfaa1, 0xff28, 0xf1b3, 0xf43a, 0xec85, 0xe90c, 0xe797, 0xe21e, 0x8e79, 0x8bf0, 0x856b, 0x80e2, 0x985d, 0x9dd4, 0x934f, 0x96c6, 0xa231, 0xa7b8, 0xa923, 0xacaa, 0xb415, 0xb19c, 0xbf07, 0xba8e, 0xcf92, 0xca1b, 0xc480, 0xc109, 0xd9b6, 0xdc3f, 0xd2a4, 0xd72d, 0xe3da, 0xe653, 0xe8c8, 0xed41, 0xf5fe, 0xf077, 0xfeec, 0xfb65, 0x9702, 0x928b, 0x9c10, 0x9999, 0x8126, 0x84af, 0x8a34, 0x8fbd, 0xbb4a, 0xbec3, 0xb058, 0xb5d1, 0xad6e, 0xa8e7, 0xa67c, 0xa3f5, 0x7eb2, 0x7b3b, 0x75a0, 0x7029, 0x6896, 0x6d1f, 0x6384, 0x660d, 0x52fa, 0x5773, 0x59e8, 0x5c61, 0x44de, 0x4157, 0x4fcc, 0x4a45, 0x2622, 0x23ab, 0x2d30, 0x28b9, 0x3006, 0x358f, 0x3b14, 0x3e9d, 0x0a6a, 0x0fe3, 0x0178, 0x04f1, 0x1c4e, 0x19c7, 0x175c, 0x12d5, 0xa85b, 0xadd2, 0xa349, 0xa6c0, 0xbe7f, 0xbbf6, 0xb56d, 0xb0e4, 0x8413, 0x819a, 0x8f01, 0x8a88, 0x9237, 0x97be, 0x9925, 0x9cac, 0xf0cb, 0xf542, 0xfbd9, 0xfe50, 0xe6ef, 0xe366, 0xedfd, 0xe874, 0xdc83, 0xd90a, 0xd791, 0xd218, 0xcaa7, 0xcf2e, 0xc1b5, 0xc43c, 0x197b, 0x1cf2, 0x1269, 0x17e0, 0x0f5f, 0x0ad6, 0x044d, 0x01c4, 0x3533, 0x30ba, 0x3e21, 0x3ba8, 0x2317, 0x269e, 0x2805, 0x2d8c, 0x41eb, 0x4462, 0x4af9, 0x4f70, 0x57cf, 0x5246, 0x5cdd, 0x5954, 0x6da3, 0x682a, 0x66b1, 0x6338, 0x7b87, 0x7e0e, 0x7095, 0x751c, ], [ 0x0000, 0x9aad, 0x30d3, 0xaa7e, 0x61a6, 0xfb0b, 0x5175, 0xcbd8, 0xc34c, 0x59e1, 0xf39f, 0x6932, 0xa2ea, 0x3847, 0x9239, 0x0894, 0x8311, 0x19bc, 0xb3c2, 0x296f, 0xe2b7, 0x781a, 0xd264, 0x48c9, 0x405d, 0xdaf0, 0x708e, 0xea23, 0x21fb, 0xbb56, 0x1128, 0x8b85, 0x03ab, 0x9906, 0x3378, 0xa9d5, 0x620d, 0xf8a0, 0x52de, 0xc873, 0xc0e7, 0x5a4a, 0xf034, 0x6a99, 0xa141, 0x3bec, 0x9192, 0x0b3f, 0x80ba, 0x1a17, 0xb069, 0x2ac4, 0xe11c, 0x7bb1, 0xd1cf, 0x4b62, 0x43f6, 0xd95b, 0x7325, 0xe988, 0x2250, 0xb8fd, 0x1283, 0x882e, 0x0756, 0x9dfb, 0x3785, 0xad28, 0x66f0, 0xfc5d, 0x5623, 0xcc8e, 0xc41a, 0x5eb7, 0xf4c9, 0x6e64, 0xa5bc, 0x3f11, 0x956f, 0x0fc2, 0x8447, 0x1eea, 0xb494, 0x2e39, 0xe5e1, 0x7f4c, 0xd532, 0x4f9f, 0x470b, 0xdda6, 0x77d8, 0xed75, 0x26ad, 0xbc00, 0x167e, 0x8cd3, 0x04fd, 0x9e50, 0x342e, 0xae83, 0x655b, 0xfff6, 0x5588, 0xcf25, 0xc7b1, 0x5d1c, 0xf762, 0x6dcf, 0xa617, 0x3cba, 0x96c4, 0x0c69, 0x87ec, 0x1d41, 0xb73f, 0x2d92, 0xe64a, 0x7ce7, 0xd699, 0x4c34, 0x44a0, 0xde0d, 0x7473, 0xeede, 0x2506, 0xbfab, 0x15d5, 0x8f78, 0x0eac, 0x9401, 0x3e7f, 0xa4d2, 0x6f0a, 0xf5a7, 0x5fd9, 0xc574, 0xcde0, 0x574d, 0xfd33, 0x679e, 0xac46, 0x36eb, 0x9c95, 0x0638, 0x8dbd, 0x1710, 0xbd6e, 0x27c3, 0xec1b, 0x76b6, 0xdcc8, 0x4665, 0x4ef1, 0xd45c, 0x7e22, 0xe48f, 0x2f57, 0xb5fa, 0x1f84, 0x8529, 0x0d07, 0x97aa, 0x3dd4, 0xa779, 0x6ca1, 0xf60c, 0x5c72, 0xc6df, 0xce4b, 0x54e6, 0xfe98, 0x6435, 0xafed, 0x3540, 0x9f3e, 0x0593, 0x8e16, 0x14bb, 0xbec5, 0x2468, 0xefb0, 0x751d, 0xdf63, 0x45ce, 0x4d5a, 0xd7f7, 0x7d89, 0xe724, 0x2cfc, 0xb651, 0x1c2f, 0x8682, 0x09fa, 0x9357, 0x3929, 0xa384, 0x685c, 0xf2f1, 0x588f, 0xc222, 0xcab6, 0x501b, 0xfa65, 0x60c8, 0xab10, 0x31bd, 0x9bc3, 0x016e, 0x8aeb, 0x1046, 0xba38, 0x2095, 0xeb4d, 0x71e0, 0xdb9e, 0x4133, 0x49a7, 0xd30a, 0x7974, 0xe3d9, 0x2801, 0xb2ac, 0x18d2, 0x827f, 0x0a51, 0x90fc, 0x3a82, 0xa02f, 0x6bf7, 0xf15a, 0x5b24, 0xc189, 0xc91d, 0x53b0, 0xf9ce, 0x6363, 0xa8bb, 0x3216, 0x9868, 0x02c5, 0x8940, 0x13ed, 0xb993, 0x233e, 0xe8e6, 0x724b, 0xd835, 0x4298, 0x4a0c, 0xd0a1, 0x7adf, 0xe072, 0x2baa, 0xb107, 0x1b79, 0x81d4, ], [ 0x0000, 0x1d58, 0x3ab0, 0x27e8, 0x7560, 0x6838, 0x4fd0, 0x5288, 0xeac0, 0xf798, 0xd070, 0xcd28, 0x9fa0, 0x82f8, 0xa510, 0xb848, 0xd009, 0xcd51, 0xeab9, 0xf7e1, 0xa569, 0xb831, 0x9fd9, 0x8281, 0x3ac9, 0x2791, 0x0079, 0x1d21, 0x4fa9, 0x52f1, 0x7519, 0x6841, 0xa59b, 0xb8c3, 0x9f2b, 0x8273, 0xd0fb, 0xcda3, 0xea4b, 0xf713, 0x4f5b, 0x5203, 0x75eb, 0x68b3, 0x3a3b, 0x2763, 0x008b, 0x1dd3, 0x7592, 0x68ca, 0x4f22, 0x527a, 0x00f2, 0x1daa, 0x3a42, 0x271a, 0x9f52, 0x820a, 0xa5e2, 0xb8ba, 0xea32, 0xf76a, 0xd082, 0xcdda, 0x4ebf, 0x53e7, 0x740f, 0x6957, 0x3bdf, 0x2687, 0x016f, 0x1c37, 0xa47f, 0xb927, 0x9ecf, 0x8397, 0xd11f, 0xcc47, 0xebaf, 0xf6f7, 0x9eb6, 0x83ee, 0xa406, 0xb95e, 0xebd6, 0xf68e, 0xd166, 0xcc3e, 0x7476, 0x692e, 0x4ec6, 0x539e, 0x0116, 0x1c4e, 0x3ba6, 0x26fe, 0xeb24, 0xf67c, 0xd194, 0xcccc, 0x9e44, 0x831c, 0xa4f4, 0xb9ac, 0x01e4, 0x1cbc, 0x3b54, 0x260c, 0x7484, 0x69dc, 0x4e34, 0x536c, 0x3b2d, 0x2675, 0x019d, 0x1cc5, 0x4e4d, 0x5315, 0x74fd, 0x69a5, 0xd1ed, 0xccb5, 0xeb5d, 0xf605, 0xa48d, 0xb9d5, 0x9e3d, 0x8365, 0x9d7e, 0x8026, 0xa7ce, 0xba96, 0xe81e, 0xf546, 0xd2ae, 0xcff6, 0x77be, 0x6ae6, 0x4d0e, 0x5056, 0x02de, 0x1f86, 0x386e, 0x2536, 0x4d77, 0x502f, 0x77c7, 0x6a9f, 0x3817, 0x254f, 0x02a7, 0x1fff, 0xa7b7, 0xbaef, 0x9d07, 0x805f, 0xd2d7, 0xcf8f, 0xe867, 0xf53f, 0x38e5, 0x25bd, 0x0255, 0x1f0d, 0x4d85, 0x50dd, 0x7735, 0x6a6d, 0xd225, 0xcf7d, 0xe895, 0xf5cd, 0xa745, 0xba1d, 0x9df5, 0x80ad, 0xe8ec, 0xf5b4, 0xd25c, 0xcf04, 0x9d8c, 0x80d4, 0xa73c, 0xba64, 0x022c, 0x1f74, 0x389c, 0x25c4, 0x774c, 0x6a14, 0x4dfc, 0x50a4, 0xd3c1, 0xce99, 0xe971, 0xf429, 0xa6a1, 0xbbf9, 0x9c11, 0x8149, 0x3901, 0x2459, 0x03b1, 0x1ee9, 0x4c61, 0x5139, 0x76d1, 0x6b89, 0x03c8, 0x1e90, 0x3978, 0x2420, 0x76a8, 0x6bf0, 0x4c18, 0x5140, 0xe908, 0xf450, 0xd3b8, 0xcee0, 0x9c68, 0x8130, 0xa6d8, 0xbb80, 0x765a, 0x6b02, 0x4cea, 0x51b2, 0x033a, 0x1e62, 0x398a, 0x24d2, 0x9c9a, 0x81c2, 0xa62a, 0xbb72, 0xe9fa, 0xf4a2, 0xd34a, 0xce12, 0xa653, 0xbb0b, 0x9ce3, 0x81bb, 0xd333, 0xce6b, 0xe983, 0xf4db, 0x4c93, 0x51cb, 0x7623, 0x6b7b, 0x39f3, 0x24ab, 0x0343, 0x1e1b, ], [ 0x0000, 0x3f75, 0x7eea, 0x419f, 0xfdd4, 0xc2a1, 0x833e, 0xbc4b, 0xfe21, 0xc154, 0x80cb, 0xbfbe, 0x03f5, 0x3c80, 0x7d1f, 0x426a, 0xf9cb, 0xc6be, 0x8721, 0xb854, 0x041f, 0x3b6a, 0x7af5, 0x4580, 0x07ea, 0x389f, 0x7900, 0x4675, 0xfa3e, 0xc54b, 0x84d4, 0xbba1, 0xf61f, 0xc96a, 0x88f5, 0xb780, 0x0bcb, 0x34be, 0x7521, 0x4a54, 0x083e, 0x374b, 0x76d4, 0x49a1, 0xf5ea, 0xca9f, 0x8b00, 0xb475, 0x0fd4, 0x30a1, 0x713e, 0x4e4b, 0xf200, 0xcd75, 0x8cea, 0xb39f, 0xf1f5, 0xce80, 0x8f1f, 0xb06a, 0x0c21, 0x3354, 0x72cb, 0x4dbe, 0xe9b7, 0xd6c2, 0x975d, 0xa828, 0x1463, 0x2b16, 0x6a89, 0x55fc, 0x1796, 0x28e3, 0x697c, 0x5609, 0xea42, 0xd537, 0x94a8, 0xabdd, 0x107c, 0x2f09, 0x6e96, 0x51e3, 0xeda8, 0xd2dd, 0x9342, 0xac37, 0xee5d, 0xd128, 0x90b7, 0xafc2, 0x1389, 0x2cfc, 0x6d63, 0x5216, 0x1fa8, 0x20dd, 0x6142, 0x5e37, 0xe27c, 0xdd09, 0x9c96, 0xa3e3, 0xe189, 0xdefc, 0x9f63, 0xa016, 0x1c5d, 0x2328, 0x62b7, 0x5dc2, 0xe663, 0xd916, 0x9889, 0xa7fc, 0x1bb7, 0x24c2, 0x655d, 0x5a28, 0x1842, 0x2737, 0x66a8, 0x59dd, 0xe596, 0xdae3, 0x9b7c, 0xa409, 0xd6e7, 0xe992, 0xa80d, 0x9778, 0x2b33, 0x1446, 0x55d9, 0x6aac, 0x28c6, 0x17b3, 0x562c, 0x6959, 0xd512, 0xea67, 0xabf8, 0x948d, 0x2f2c, 0x1059, 0x51c6, 0x6eb3, 0xd2f8, 0xed8d, 0xac12, 0x9367, 0xd10d, 0xee78, 0xafe7, 0x9092, 0x2cd9, 0x13ac, 0x5233, 0x6d46, 0x20f8, 0x1f8d, 0x5e12, 0x6167, 0xdd2c, 0xe259, 0xa3c6, 0x9cb3, 0xded9, 0xe1ac, 0xa033, 0x9f46, 0x230d, 0x1c78, 0x5de7, 0x6292, 0xd933, 0xe646, 0xa7d9, 0x98ac, 0x24e7, 0x1b92, 0x5a0d, 0x6578, 0x2712, 0x1867, 0x59f8, 0x668d, 0xdac6, 0xe5b3, 0xa42c, 0x9b59, 0x3f50, 0x0025, 0x41ba, 0x7ecf, 0xc284, 0xfdf1, 0xbc6e, 0x831b, 0xc171, 0xfe04, 0xbf9b, 0x80ee, 0x3ca5, 0x03d0, 0x424f, 0x7d3a, 0xc69b, 0xf9ee, 0xb871, 0x8704, 0x3b4f, 0x043a, 0x45a5, 0x7ad0, 0x38ba, 0x07cf, 0x4650, 0x7925, 0xc56e, 0xfa1b, 0xbb84, 0x84f1, 0xc94f, 0xf63a, 0xb7a5, 0x88d0, 0x349b, 0x0bee, 0x4a71, 0x7504, 0x376e, 0x081b, 0x4984, 0x76f1, 0xcaba, 0xf5cf, 0xb450, 0x8b25, 0x3084, 0x0ff1, 0x4e6e, 0x711b, 0xcd50, 0xf225, 0xb3ba, 0x8ccf, 0xcea5, 0xf1d0, 0xb04f, 0x8f3a, 0x3371, 0x0c04, 0x4d9b, 0x72ee, ], [ 0x0000, 0xa847, 0x5507, 0xfd40, 0xaa0e, 0x0249, 0xff09, 0x574e, 0x5195, 0xf9d2, 0x0492, 0xacd5, 0xfb9b, 0x53dc, 0xae9c, 0x06db, 0xa32a, 0x0b6d, 0xf62d, 0x5e6a, 0x0924, 0xa163, 0x5c23, 0xf464, 0xf2bf, 0x5af8, 0xa7b8, 0x0fff, 0x58b1, 0xf0f6, 0x0db6, 0xa5f1, 0x43dd, 0xeb9a, 0x16da, 0xbe9d, 0xe9d3, 0x4194, 0xbcd4, 0x1493, 0x1248, 0xba0f, 0x474f, 0xef08, 0xb846, 0x1001, 0xed41, 0x4506, 0xe0f7, 0x48b0, 0xb5f0, 0x1db7, 0x4af9, 0xe2be, 0x1ffe, 0xb7b9, 0xb162, 0x1925, 0xe465, 0x4c22, 0x1b6c, 0xb32b, 0x4e6b, 0xe62c, 0x87ba, 0x2ffd, 0xd2bd, 0x7afa, 0x2db4, 0x85f3, 0x78b3, 0xd0f4, 0xd62f, 0x7e68, 0x8328, 0x2b6f, 0x7c21, 0xd466, 0x2926, 0x8161, 0x2490, 0x8cd7, 0x7197, 0xd9d0, 0x8e9e, 0x26d9, 0xdb99, 0x73de, 0x7505, 0xdd42, 0x2002, 0x8845, 0xdf0b, 0x774c, 0x8a0c, 0x224b, 0xc467, 0x6c20, 0x9160, 0x3927, 0x6e69, 0xc62e, 0x3b6e, 0x9329, 0x95f2, 0x3db5, 0xc0f5, 0x68b2, 0x3ffc, 0x97bb, 0x6afb, 0xc2bc, 0x674d, 0xcf0a, 0x324a, 0x9a0d, 0xcd43, 0x6504, 0x9844, 0x3003, 0x36d8, 0x9e9f, 0x63df, 0xcb98, 0x9cd6, 0x3491, 0xc9d1, 0x6196, 0x0afd, 0xa2ba, 0x5ffa, 0xf7bd, 0xa0f3, 0x08b4, 0xf5f4, 0x5db3, 0x5b68, 0xf32f, 0x0e6f, 0xa628, 0xf166, 0x5921, 0xa461, 0x0c26, 0xa9d7, 0x0190, 0xfcd0, 0x5497, 0x03d9, 0xab9e, 0x56de, 0xfe99, 0xf842, 0x5005, 0xad45, 0x0502, 0x524c, 0xfa0b, 0x074b, 0xaf0c, 0x4920, 0xe167, 0x1c27, 0xb460, 0xe32e, 0x4b69, 0xb629, 0x1e6e, 0x18b5, 0xb0f2, 0x4db2, 0xe5f5, 0xb2bb, 0x1afc, 0xe7bc, 0x4ffb, 0xea0a, 0x424d, 0xbf0d, 0x174a, 0x4004, 0xe843, 0x1503, 0xbd44, 0xbb9f, 0x13d8, 0xee98, 0x46df, 0x1191, 0xb9d6, 0x4496, 0xecd1, 0x8d47, 0x2500, 0xd840, 0x7007, 0x2749, 0x8f0e, 0x724e, 0xda09, 0xdcd2, 0x7495, 0x89d5, 0x2192, 0x76dc, 0xde9b, 0x23db, 0x8b9c, 0x2e6d, 0x862a, 0x7b6a, 0xd32d, 0x8463, 0x2c24, 0xd164, 0x7923, 0x7ff8, 0xd7bf, 0x2aff, 0x82b8, 0xd5f6, 0x7db1, 0x80f1, 0x28b6, 0xce9a, 0x66dd, 0x9b9d, 0x33da, 0x6494, 0xccd3, 0x3193, 0x99d4, 0x9f0f, 0x3748, 0xca08, 0x624f, 0x3501, 0x9d46, 0x6006, 0xc841, 0x6db0, 0xc5f7, 0x38b7, 0x90f0, 0xc7be, 0x6ff9, 0x92b9, 0x3afe, 0x3c25, 0x9462, 0x6922, 0xc165, 0x962b, 0x3e6c, 0xc32c, 0x6b6b, ], [ 0x0000, 0x15fa, 0x2bf4, 0x3e0e, 0x57e8, 0x4212, 0x7c1c, 0x69e6, 0xafd0, 0xba2a, 0x8424, 0x91de, 0xf838, 0xedc2, 0xd3cc, 0xc636, 0x5a29, 0x4fd3, 0x71dd, 0x6427, 0x0dc1, 0x183b, 0x2635, 0x33cf, 0xf5f9, 0xe003, 0xde0d, 0xcbf7, 0xa211, 0xb7eb, 0x89e5, 0x9c1f, 0xb452, 0xa1a8, 0x9fa6, 0x8a5c, 0xe3ba, 0xf640, 0xc84e, 0xddb4, 0x1b82, 0x0e78, 0x3076, 0x258c, 0x4c6a, 0x5990, 0x679e, 0x7264, 0xee7b, 0xfb81, 0xc58f, 0xd075, 0xb993, 0xac69, 0x9267, 0x879d, 0x41ab, 0x5451, 0x6a5f, 0x7fa5, 0x1643, 0x03b9, 0x3db7, 0x284d, 0x6d2d, 0x78d7, 0x46d9, 0x5323, 0x3ac5, 0x2f3f, 0x1131, 0x04cb, 0xc2fd, 0xd707, 0xe909, 0xfcf3, 0x9515, 0x80ef, 0xbee1, 0xab1b, 0x3704, 0x22fe, 0x1cf0, 0x090a, 0x60ec, 0x7516, 0x4b18, 0x5ee2, 0x98d4, 0x8d2e, 0xb320, 0xa6da, 0xcf3c, 0xdac6, 0xe4c8, 0xf132, 0xd97f, 0xcc85, 0xf28b, 0xe771, 0x8e97, 0x9b6d, 0xa563, 0xb099, 0x76af, 0x6355, 0x5d5b, 0x48a1, 0x2147, 0x34bd, 0x0ab3, 0x1f49, 0x8356, 0x96ac, 0xa8a2, 0xbd58, 0xd4be, 0xc144, 0xff4a, 0xeab0, 0x2c86, 0x397c, 0x0772, 0x1288, 0x7b6e, 0x6e94, 0x509a, 0x4560, 0xda5a, 0xcfa0, 0xf1ae, 0xe454, 0x8db2, 0x9848, 0xa646, 0xb3bc, 0x758a, 0x6070, 0x5e7e, 0x4b84, 0x2262, 0x3798, 0x0996, 0x1c6c, 0x8073, 0x9589, 0xab87, 0xbe7d, 0xd79b, 0xc261, 0xfc6f, 0xe995, 0x2fa3, 0x3a59, 0x0457, 0x11ad, 0x784b, 0x6db1, 0x53bf, 0x4645, 0x6e08, 0x7bf2, 0x45fc, 0x5006, 0x39e0, 0x2c1a, 0x1214, 0x07ee, 0xc1d8, 0xd422, 0xea2c, 0xffd6, 0x9630, 0x83ca, 0xbdc4, 0xa83e, 0x3421, 0x21db, 0x1fd5, 0x0a2f, 0x63c9, 0x7633, 0x483d, 0x5dc7, 0x9bf1, 0x8e0b, 0xb005, 0xa5ff, 0xcc19, 0xd9e3, 0xe7ed, 0xf217, 0xb777, 0xa28d, 0x9c83, 0x8979, 0xe09f, 0xf565, 0xcb6b, 0xde91, 0x18a7, 0x0d5d, 0x3353, 0x26a9, 0x4f4f, 0x5ab5, 0x64bb, 0x7141, 0xed5e, 0xf8a4, 0xc6aa, 0xd350, 0xbab6, 0xaf4c, 0x9142, 0x84b8, 0x428e, 0x5774, 0x697a, 0x7c80, 0x1566, 0x009c, 0x3e92, 0x2b68, 0x0325, 0x16df, 0x28d1, 0x3d2b, 0x54cd, 0x4137, 0x7f39, 0x6ac3, 0xacf5, 0xb90f, 0x8701, 0x92fb, 0xfb1d, 0xeee7, 0xd0e9, 0xc513, 0x590c, 0x4cf6, 0x72f8, 0x6702, 0x0ee4, 0x1b1e, 0x2510, 0x30ea, 0xf6dc, 0xe326, 0xdd28, 0xc8d2, 0xa134, 0xb4ce, 0x8ac0, 0x9f3a, ], [ 0x0000, 0xb13d, 0x67f3, 0xd6ce, 0xcfe6, 0x7edb, 0xa815, 0x1928, 0x9a45, 0x2b78, 0xfdb6, 0x4c8b, 0x55a3, 0xe49e, 0x3250, 0x836d, 0x3103, 0x803e, 0x56f0, 0xe7cd, 0xfee5, 0x4fd8, 0x9916, 0x282b, 0xab46, 0x1a7b, 0xccb5, 0x7d88, 0x64a0, 0xd59d, 0x0353, 0xb26e, 0x6206, 0xd33b, 0x05f5, 0xb4c8, 0xade0, 0x1cdd, 0xca13, 0x7b2e, 0xf843, 0x497e, 0x9fb0, 0x2e8d, 0x37a5, 0x8698, 0x5056, 0xe16b, 0x5305, 0xe238, 0x34f6, 0x85cb, 0x9ce3, 0x2dde, 0xfb10, 0x4a2d, 0xc940, 0x787d, 0xaeb3, 0x1f8e, 0x06a6, 0xb79b, 0x6155, 0xd068, 0xc40c, 0x7531, 0xa3ff, 0x12c2, 0x0bea, 0xbad7, 0x6c19, 0xdd24, 0x5e49, 0xef74, 0x39ba, 0x8887, 0x91af, 0x2092, 0xf65c, 0x4761, 0xf50f, 0x4432, 0x92fc, 0x23c1, 0x3ae9, 0x8bd4, 0x5d1a, 0xec27, 0x6f4a, 0xde77, 0x08b9, 0xb984, 0xa0ac, 0x1191, 0xc75f, 0x7662, 0xa60a, 0x1737, 0xc1f9, 0x70c4, 0x69ec, 0xd8d1, 0x0e1f, 0xbf22, 0x3c4f, 0x8d72, 0x5bbc, 0xea81, 0xf3a9, 0x4294, 0x945a, 0x2567, 0x9709, 0x2634, 0xf0fa, 0x41c7, 0x58ef, 0xe9d2, 0x3f1c, 0x8e21, 0x0d4c, 0xbc71, 0x6abf, 0xdb82, 0xc2aa, 0x7397, 0xa559, 0x1464, 0x8d91, 0x3cac, 0xea62, 0x5b5f, 0x4277, 0xf34a, 0x2584, 0x94b9, 0x17d4, 0xa6e9, 0x7027, 0xc11a, 0xd832, 0x690f, 0xbfc1, 0x0efc, 0xbc92, 0x0daf, 0xdb61, 0x6a5c, 0x7374, 0xc249, 0x1487, 0xa5ba, 0x26d7, 0x97ea, 0x4124, 0xf019, 0xe931, 0x580c, 0x8ec2, 0x3fff, 0xef97, 0x5eaa, 0x8864, 0x3959, 0x2071, 0x914c, 0x4782, 0xf6bf, 0x75d2, 0xc4ef, 0x1221, 0xa31c, 0xba34, 0x0b09, 0xddc7, 0x6cfa, 0xde94, 0x6fa9, 0xb967, 0x085a, 0x1172, 0xa04f, 0x7681, 0xc7bc, 0x44d1, 0xf5ec, 0x2322, 0x921f, 0x8b37, 0x3a0a, 0xecc4, 0x5df9, 0x499d, 0xf8a0, 0x2e6e, 0x9f53, 0x867b, 0x3746, 0xe188, 0x50b5, 0xd3d8, 0x62e5, 0xb42b, 0x0516, 0x1c3e, 0xad03, 0x7bcd, 0xcaf0, 0x789e, 0xc9a3, 0x1f6d, 0xae50, 0xb778, 0x0645, 0xd08b, 0x61b6, 0xe2db, 0x53e6, 0x8528, 0x3415, 0x2d3d, 0x9c00, 0x4ace, 0xfbf3, 0x2b9b, 0x9aa6, 0x4c68, 0xfd55, 0xe47d, 0x5540, 0x838e, 0x32b3, 0xb1de, 0x00e3, 0xd62d, 0x6710, 0x7e38, 0xcf05, 0x19cb, 0xa8f6, 0x1a98, 0xaba5, 0x7d6b, 0xcc56, 0xd57e, 0x6443, 0xb28d, 0x03b0, 0x80dd, 0x31e0, 0xe72e, 0x5613, 0x4f3b, 0xfe06, 0x28c8, 0x99f5, ], [ 0x0000, 0x1eab, 0x3d56, 0x23fd, 0x7aac, 0x6407, 0x47fa, 0x5951, 0xf558, 0xebf3, 0xc80e, 0xd6a5, 0x8ff4, 0x915f, 0xb2a2, 0xac09, 0xef39, 0xf192, 0xd26f, 0xccc4, 0x9595, 0x8b3e, 0xa8c3, 0xb668, 0x1a61, 0x04ca, 0x2737, 0x399c, 0x60cd, 0x7e66, 0x5d9b, 0x4330, 0xdbfb, 0xc550, 0xe6ad, 0xf806, 0xa157, 0xbffc, 0x9c01, 0x82aa, 0x2ea3, 0x3008, 0x13f5, 0x0d5e, 0x540f, 0x4aa4, 0x6959, 0x77f2, 0x34c2, 0x2a69, 0x0994, 0x173f, 0x4e6e, 0x50c5, 0x7338, 0x6d93, 0xc19a, 0xdf31, 0xfccc, 0xe267, 0xbb36, 0xa59d, 0x8660, 0x98cb, 0xb27f, 0xacd4, 0x8f29, 0x9182, 0xc8d3, 0xd678, 0xf585, 0xeb2e, 0x4727, 0x598c, 0x7a71, 0x64da, 0x3d8b, 0x2320, 0x00dd, 0x1e76, 0x5d46, 0x43ed, 0x6010, 0x7ebb, 0x27ea, 0x3941, 0x1abc, 0x0417, 0xa81e, 0xb6b5, 0x9548, 0x8be3, 0xd2b2, 0xcc19, 0xefe4, 0xf14f, 0x6984, 0x772f, 0x54d2, 0x4a79, 0x1328, 0x0d83, 0x2e7e, 0x30d5, 0x9cdc, 0x8277, 0xa18a, 0xbf21, 0xe670, 0xf8db, 0xdb26, 0xc58d, 0x86bd, 0x9816, 0xbbeb, 0xa540, 0xfc11, 0xe2ba, 0xc147, 0xdfec, 0x73e5, 0x6d4e, 0x4eb3, 0x5018, 0x0949, 0x17e2, 0x341f, 0x2ab4, 0x6177, 0x7fdc, 0x5c21, 0x428a, 0x1bdb, 0x0570, 0x268d, 0x3826, 0x942f, 0x8a84, 0xa979, 0xb7d2, 0xee83, 0xf028, 0xd3d5, 0xcd7e, 0x8e4e, 0x90e5, 0xb318, 0xadb3, 0xf4e2, 0xea49, 0xc9b4, 0xd71f, 0x7b16, 0x65bd, 0x4640, 0x58eb, 0x01ba, 0x1f11, 0x3cec, 0x2247, 0xba8c, 0xa427, 0x87da, 0x9971, 0xc020, 0xde8b, 0xfd76, 0xe3dd, 0x4fd4, 0x517f, 0x7282, 0x6c29, 0x3578, 0x2bd3, 0x082e, 0x1685, 0x55b5, 0x4b1e, 0x68e3, 0x7648, 0x2f19, 0x31b2, 0x124f, 0x0ce4, 0xa0ed, 0xbe46, 0x9dbb, 0x8310, 0xda41, 0xc4ea, 0xe717, 0xf9bc, 0xd308, 0xcda3, 0xee5e, 0xf0f5, 0xa9a4, 0xb70f, 0x94f2, 0x8a59, 0x2650, 0x38fb, 0x1b06, 0x05ad, 0x5cfc, 0x4257, 0x61aa, 0x7f01, 0x3c31, 0x229a, 0x0167, 0x1fcc, 0x469d, 0x5836, 0x7bcb, 0x6560, 0xc969, 0xd7c2, 0xf43f, 0xea94, 0xb3c5, 0xad6e, 0x8e93, 0x9038, 0x08f3, 0x1658, 0x35a5, 0x2b0e, 0x725f, 0x6cf4, 0x4f09, 0x51a2, 0xfdab, 0xe300, 0xc0fd, 0xde56, 0x8707, 0x99ac, 0xba51, 0xa4fa, 0xe7ca, 0xf961, 0xda9c, 0xc437, 0x9d66, 0x83cd, 0xa030, 0xbe9b, 0x1292, 0x0c39, 0x2fc4, 0x316f, 0x683e, 0x7695, 0x5568, 0x4bc3, ], [ 0x0000, 0xc2ee, 0x8055, 0x42bb, 0x0523, 0xc7cd, 0x8576, 0x4798, 0x0a46, 0xc8a8, 0x8a13, 0x48fd, 0x0f65, 0xcd8b, 0x8f30, 0x4dde, 0x148c, 0xd662, 0x94d9, 0x5637, 0x11af, 0xd341, 0x91fa, 0x5314, 0x1eca, 0xdc24, 0x9e9f, 0x5c71, 0x1be9, 0xd907, 0x9bbc, 0x5952, 0x2918, 0xebf6, 0xa94d, 0x6ba3, 0x2c3b, 0xeed5, 0xac6e, 0x6e80, 0x235e, 0xe1b0, 0xa30b, 0x61e5, 0x267d, 0xe493, 0xa628, 0x64c6, 0x3d94, 0xff7a, 0xbdc1, 0x7f2f, 0x38b7, 0xfa59, 0xb8e2, 0x7a0c, 0x37d2, 0xf53c, 0xb787, 0x7569, 0x32f1, 0xf01f, 0xb2a4, 0x704a, 0x5230, 0x90de, 0xd265, 0x108b, 0x5713, 0x95fd, 0xd746, 0x15a8, 0x5876, 0x9a98, 0xd823, 0x1acd, 0x5d55, 0x9fbb, 0xdd00, 0x1fee, 0x46bc, 0x8452, 0xc6e9, 0x0407, 0x439f, 0x8171, 0xc3ca, 0x0124, 0x4cfa, 0x8e14, 0xccaf, 0x0e41, 0x49d9, 0x8b37, 0xc98c, 0x0b62, 0x7b28, 0xb9c6, 0xfb7d, 0x3993, 0x7e0b, 0xbce5, 0xfe5e, 0x3cb0, 0x716e, 0xb380, 0xf13b, 0x33d5, 0x744d, 0xb6a3, 0xf418, 0x36f6, 0x6fa4, 0xad4a, 0xeff1, 0x2d1f, 0x6a87, 0xa869, 0xead2, 0x283c, 0x65e2, 0xa70c, 0xe5b7, 0x2759, 0x60c1, 0xa22f, 0xe094, 0x227a, 0xa460, 0x668e, 0x2435, 0xe6db, 0xa143, 0x63ad, 0x2116, 0xe3f8, 0xae26, 0x6cc8, 0x2e73, 0xec9d, 0xab05, 0x69eb, 0x2b50, 0xe9be, 0xb0ec, 0x7202, 0x30b9, 0xf257, 0xb5cf, 0x7721, 0x359a, 0xf774, 0xbaaa, 0x7844, 0x3aff, 0xf811, 0xbf89, 0x7d67, 0x3fdc, 0xfd32, 0x8d78, 0x4f96, 0x0d2d, 0xcfc3, 0x885b, 0x4ab5, 0x080e, 0xcae0, 0x873e, 0x45d0, 0x076b, 0xc585, 0x821d, 0x40f3, 0x0248, 0xc0a6, 0x99f4, 0x5b1a, 0x19a1, 0xdb4f, 0x9cd7, 0x5e39, 0x1c82, 0xde6c, 0x93b2, 0x515c, 0x13e7, 0xd109, 0x9691, 0x547f, 0x16c4, 0xd42a, 0xf650, 0x34be, 0x7605, 0xb4eb, 0xf373, 0x319d, 0x7326, 0xb1c8, 0xfc16, 0x3ef8, 0x7c43, 0xbead, 0xf935, 0x3bdb, 0x7960, 0xbb8e, 0xe2dc, 0x2032, 0x6289, 0xa067, 0xe7ff, 0x2511, 0x67aa, 0xa544, 0xe89a, 0x2a74, 0x68cf, 0xaa21, 0xedb9, 0x2f57, 0x6dec, 0xaf02, 0xdf48, 0x1da6, 0x5f1d, 0x9df3, 0xda6b, 0x1885, 0x5a3e, 0x98d0, 0xd50e, 0x17e0, 0x555b, 0x97b5, 0xd02d, 0x12c3, 0x5078, 0x9296, 0xcbc4, 0x092a, 0x4b91, 0x897f, 0xcee7, 0x0c09, 0x4eb2, 0x8c5c, 0xc182, 0x036c, 0x41d7, 0x8339, 0xc4a1, 0x064f, 0x44f4, 0x861a, ], [ 0x0000, 0x4d49, 0x9a92, 0xd7db, 0x30ad, 0x7de4, 0xaa3f, 0xe776, 0x615a, 0x2c13, 0xfbc8, 0xb681, 0x51f7, 0x1cbe, 0xcb65, 0x862c, 0xc2b4, 0x8ffd, 0x5826, 0x156f, 0xf219, 0xbf50, 0x688b, 0x25c2, 0xa3ee, 0xeea7, 0x397c, 0x7435, 0x9343, 0xde0a, 0x09d1, 0x4498, 0x80e1, 0xcda8, 0x1a73, 0x573a, 0xb04c, 0xfd05, 0x2ade, 0x6797, 0xe1bb, 0xacf2, 0x7b29, 0x3660, 0xd116, 0x9c5f, 0x4b84, 0x06cd, 0x4255, 0x0f1c, 0xd8c7, 0x958e, 0x72f8, 0x3fb1, 0xe86a, 0xa523, 0x230f, 0x6e46, 0xb99d, 0xf4d4, 0x13a2, 0x5eeb, 0x8930, 0xc479, 0x044b, 0x4902, 0x9ed9, 0xd390, 0x34e6, 0x79af, 0xae74, 0xe33d, 0x6511, 0x2858, 0xff83, 0xb2ca, 0x55bc, 0x18f5, 0xcf2e, 0x8267, 0xc6ff, 0x8bb6, 0x5c6d, 0x1124, 0xf652, 0xbb1b, 0x6cc0, 0x2189, 0xa7a5, 0xeaec, 0x3d37, 0x707e, 0x9708, 0xda41, 0x0d9a, 0x40d3, 0x84aa, 0xc9e3, 0x1e38, 0x5371, 0xb407, 0xf94e, 0x2e95, 0x63dc, 0xe5f0, 0xa8b9, 0x7f62, 0x322b, 0xd55d, 0x9814, 0x4fcf, 0x0286, 0x461e, 0x0b57, 0xdc8c, 0x91c5, 0x76b3, 0x3bfa, 0xec21, 0xa168, 0x2744, 0x6a0d, 0xbdd6, 0xf09f, 0x17e9, 0x5aa0, 0x8d7b, 0xc032, 0x0896, 0x45df, 0x9204, 0xdf4d, 0x383b, 0x7572, 0xa2a9, 0xefe0, 0x69cc, 0x2485, 0xf35e, 0xbe17, 0x5961, 0x1428, 0xc3f3, 0x8eba, 0xca22, 0x876b, 0x50b0, 0x1df9, 0xfa8f, 0xb7c6, 0x601d, 0x2d54, 0xab78, 0xe631, 0x31ea, 0x7ca3, 0x9bd5, 0xd69c, 0x0147, 0x4c0e, 0x8877, 0xc53e, 0x12e5, 0x5fac, 0xb8da, 0xf593, 0x2248, 0x6f01, 0xe92d, 0xa464, 0x73bf, 0x3ef6, 0xd980, 0x94c9, 0x4312, 0x0e5b, 0x4ac3, 0x078a, 0xd051, 0x9d18, 0x7a6e, 0x3727, 0xe0fc, 0xadb5, 0x2b99, 0x66d0, 0xb10b, 0xfc42, 0x1b34, 0x567d, 0x81a6, 0xccef, 0x0cdd, 0x4194, 0x964f, 0xdb06, 0x3c70, 0x7139, 0xa6e2, 0xebab, 0x6d87, 0x20ce, 0xf715, 0xba5c, 0x5d2a, 0x1063, 0xc7b8, 0x8af1, 0xce69, 0x8320, 0x54fb, 0x19b2, 0xfec4, 0xb38d, 0x6456, 0x291f, 0xaf33, 0xe27a, 0x35a1, 0x78e8, 0x9f9e, 0xd2d7, 0x050c, 0x4845, 0x8c3c, 0xc175, 0x16ae, 0x5be7, 0xbc91, 0xf1d8, 0x2603, 0x6b4a, 0xed66, 0xa02f, 0x77f4, 0x3abd, 0xddcb, 0x9082, 0x4759, 0x0a10, 0x4e88, 0x03c1, 0xd41a, 0x9953, 0x7e25, 0x336c, 0xe4b7, 0xa9fe, 0x2fd2, 0x629b, 0xb540, 0xf809, 0x1f7f, 0x5236, 0x85ed, 0xc8a4, ], [ 0x0000, 0x112c, 0x2258, 0x3374, 0x44b0, 0x559c, 0x66e8, 0x77c4, 0x8960, 0x984c, 0xab38, 0xba14, 0xcdd0, 0xdcfc, 0xef88, 0xfea4, 0x1749, 0x0665, 0x3511, 0x243d, 0x53f9, 0x42d5, 0x71a1, 0x608d, 0x9e29, 0x8f05, 0xbc71, 0xad5d, 0xda99, 0xcbb5, 0xf8c1, 0xe9ed, 0x2e92, 0x3fbe, 0x0cca, 0x1de6, 0x6a22, 0x7b0e, 0x487a, 0x5956, 0xa7f2, 0xb6de, 0x85aa, 0x9486, 0xe342, 0xf26e, 0xc11a, 0xd036, 0x39db, 0x28f7, 0x1b83, 0x0aaf, 0x7d6b, 0x6c47, 0x5f33, 0x4e1f, 0xb0bb, 0xa197, 0x92e3, 0x83cf, 0xf40b, 0xe527, 0xd653, 0xc77f, 0x5d24, 0x4c08, 0x7f7c, 0x6e50, 0x1994, 0x08b8, 0x3bcc, 0x2ae0, 0xd444, 0xc568, 0xf61c, 0xe730, 0x90f4, 0x81d8, 0xb2ac, 0xa380, 0x4a6d, 0x5b41, 0x6835, 0x7919, 0x0edd, 0x1ff1, 0x2c85, 0x3da9, 0xc30d, 0xd221, 0xe155, 0xf079, 0x87bd, 0x9691, 0xa5e5, 0xb4c9, 0x73b6, 0x629a, 0x51ee, 0x40c2, 0x3706, 0x262a, 0x155e, 0x0472, 0xfad6, 0xebfa, 0xd88e, 0xc9a2, 0xbe66, 0xaf4a, 0x9c3e, 0x8d12, 0x64ff, 0x75d3, 0x46a7, 0x578b, 0x204f, 0x3163, 0x0217, 0x133b, 0xed9f, 0xfcb3, 0xcfc7, 0xdeeb, 0xa92f, 0xb803, 0x8b77, 0x9a5b, 0xba48, 0xab64, 0x9810, 0x893c, 0xfef8, 0xefd4, 0xdca0, 0xcd8c, 0x3328, 0x2204, 0x1170, 0x005c, 0x7798, 0x66b4, 0x55c0, 0x44ec, 0xad01, 0xbc2d, 0x8f59, 0x9e75, 0xe9b1, 0xf89d, 0xcbe9, 0xdac5, 0x2461, 0x354d, 0x0639, 0x1715, 0x60d1, 0x71fd, 0x4289, 0x53a5, 0x94da, 0x85f6, 0xb682, 0xa7ae, 0xd06a, 0xc146, 0xf232, 0xe31e, 0x1dba, 0x0c96, 0x3fe2, 0x2ece, 0x590a, 0x4826, 0x7b52, 0x6a7e, 0x8393, 0x92bf, 0xa1cb, 0xb0e7, 0xc723, 0xd60f, 0xe57b, 0xf457, 0x0af3, 0x1bdf, 0x28ab, 0x3987, 0x4e43, 0x5f6f, 0x6c1b, 0x7d37, 0xe76c, 0xf640, 0xc534, 0xd418, 0xa3dc, 0xb2f0, 0x8184, 0x90a8, 0x6e0c, 0x7f20, 0x4c54, 0x5d78, 0x2abc, 0x3b90, 0x08e4, 0x19c8, 0xf025, 0xe109, 0xd27d, 0xc351, 0xb495, 0xa5b9, 0x96cd, 0x87e1, 0x7945, 0x6869, 0x5b1d, 0x4a31, 0x3df5, 0x2cd9, 0x1fad, 0x0e81, 0xc9fe, 0xd8d2, 0xeba6, 0xfa8a, 0x8d4e, 0x9c62, 0xaf16, 0xbe3a, 0x409e, 0x51b2, 0x62c6, 0x73ea, 0x042e, 0x1502, 0x2676, 0x375a, 0xdeb7, 0xcf9b, 0xfcef, 0xedc3, 0x9a07, 0x8b2b, 0xb85f, 0xa973, 0x57d7, 0x46fb, 0x758f, 0x64a3, 0x1367, 0x024b, 0x313f, 0x2013, ], [ 0x0000, 0x7119, 0xe232, 0x932b, 0xc1ed, 0xb0f4, 0x23df, 0x52c6, 0x8653, 0xf74a, 0x6461, 0x1578, 0x47be, 0x36a7, 0xa58c, 0xd495, 0x092f, 0x7836, 0xeb1d, 0x9a04, 0xc8c2, 0xb9db, 0x2af0, 0x5be9, 0x8f7c, 0xfe65, 0x6d4e, 0x1c57, 0x4e91, 0x3f88, 0xaca3, 0xddba, 0x125e, 0x6347, 0xf06c, 0x8175, 0xd3b3, 0xa2aa, 0x3181, 0x4098, 0x940d, 0xe514, 0x763f, 0x0726, 0x55e0, 0x24f9, 0xb7d2, 0xc6cb, 0x1b71, 0x6a68, 0xf943, 0x885a, 0xda9c, 0xab85, 0x38ae, 0x49b7, 0x9d22, 0xec3b, 0x7f10, 0x0e09, 0x5ccf, 0x2dd6, 0xbefd, 0xcfe4, 0x24bc, 0x55a5, 0xc68e, 0xb797, 0xe551, 0x9448, 0x0763, 0x767a, 0xa2ef, 0xd3f6, 0x40dd, 0x31c4, 0x6302, 0x121b, 0x8130, 0xf029, 0x2d93, 0x5c8a, 0xcfa1, 0xbeb8, 0xec7e, 0x9d67, 0x0e4c, 0x7f55, 0xabc0, 0xdad9, 0x49f2, 0x38eb, 0x6a2d, 0x1b34, 0x881f, 0xf906, 0x36e2, 0x47fb, 0xd4d0, 0xa5c9, 0xf70f, 0x8616, 0x153d, 0x6424, 0xb0b1, 0xc1a8, 0x5283, 0x239a, 0x715c, 0x0045, 0x936e, 0xe277, 0x3fcd, 0x4ed4, 0xddff, 0xace6, 0xfe20, 0x8f39, 0x1c12, 0x6d0b, 0xb99e, 0xc887, 0x5bac, 0x2ab5, 0x7873, 0x096a, 0x9a41, 0xeb58, 0x4978, 0x3861, 0xab4a, 0xda53, 0x8895, 0xf98c, 0x6aa7, 0x1bbe, 0xcf2b, 0xbe32, 0x2d19, 0x5c00, 0x0ec6, 0x7fdf, 0xecf4, 0x9ded, 0x4057, 0x314e, 0xa265, 0xd37c, 0x81ba, 0xf0a3, 0x6388, 0x1291, 0xc604, 0xb71d, 0x2436, 0x552f, 0x07e9, 0x76f0, 0xe5db, 0x94c2, 0x5b26, 0x2a3f, 0xb914, 0xc80d, 0x9acb, 0xebd2, 0x78f9, 0x09e0, 0xdd75, 0xac6c, 0x3f47, 0x4e5e, 0x1c98, 0x6d81, 0xfeaa, 0x8fb3, 0x5209, 0x2310, 0xb03b, 0xc122, 0x93e4, 0xe2fd, 0x71d6, 0x00cf, 0xd45a, 0xa543, 0x3668, 0x4771, 0x15b7, 0x64ae, 0xf785, 0x869c, 0x6dc4, 0x1cdd, 0x8ff6, 0xfeef, 0xac29, 0xdd30, 0x4e1b, 0x3f02, 0xeb97, 0x9a8e, 0x09a5, 0x78bc, 0x2a7a, 0x5b63, 0xc848, 0xb951, 0x64eb, 0x15f2, 0x86d9, 0xf7c0, 0xa506, 0xd41f, 0x4734, 0x362d, 0xe2b8, 0x93a1, 0x008a, 0x7193, 0x2355, 0x524c, 0xc167, 0xb07e, 0x7f9a, 0x0e83, 0x9da8, 0xecb1, 0xbe77, 0xcf6e, 0x5c45, 0x2d5c, 0xf9c9, 0x88d0, 0x1bfb, 0x6ae2, 0x3824, 0x493d, 0xda16, 0xab0f, 0x76b5, 0x07ac, 0x9487, 0xe59e, 0xb758, 0xc641, 0x556a, 0x2473, 0xf0e6, 0x81ff, 0x12d4, 0x63cd, 0x310b, 0x4012, 0xd339, 0xa220, ], [ 0x0000, 0x92f0, 0x2069, 0xb299, 0x40d2, 0xd222, 0x60bb, 0xf24b, 0x81a4, 0x1354, 0xa1cd, 0x333d, 0xc176, 0x5386, 0xe11f, 0x73ef, 0x06c1, 0x9431, 0x26a8, 0xb458, 0x4613, 0xd4e3, 0x667a, 0xf48a, 0x8765, 0x1595, 0xa70c, 0x35fc, 0xc7b7, 0x5547, 0xe7de, 0x752e, 0x0d82, 0x9f72, 0x2deb, 0xbf1b, 0x4d50, 0xdfa0, 0x6d39, 0xffc9, 0x8c26, 0x1ed6, 0xac4f, 0x3ebf, 0xccf4, 0x5e04, 0xec9d, 0x7e6d, 0x0b43, 0x99b3, 0x2b2a, 0xb9da, 0x4b91, 0xd961, 0x6bf8, 0xf908, 0x8ae7, 0x1817, 0xaa8e, 0x387e, 0xca35, 0x58c5, 0xea5c, 0x78ac, 0x1b04, 0x89f4, 0x3b6d, 0xa99d, 0x5bd6, 0xc926, 0x7bbf, 0xe94f, 0x9aa0, 0x0850, 0xbac9, 0x2839, 0xda72, 0x4882, 0xfa1b, 0x68eb, 0x1dc5, 0x8f35, 0x3dac, 0xaf5c, 0x5d17, 0xcfe7, 0x7d7e, 0xef8e, 0x9c61, 0x0e91, 0xbc08, 0x2ef8, 0xdcb3, 0x4e43, 0xfcda, 0x6e2a, 0x1686, 0x8476, 0x36ef, 0xa41f, 0x5654, 0xc4a4, 0x763d, 0xe4cd, 0x9722, 0x05d2, 0xb74b, 0x25bb, 0xd7f0, 0x4500, 0xf799, 0x6569, 0x1047, 0x82b7, 0x302e, 0xa2de, 0x5095, 0xc265, 0x70fc, 0xe20c, 0x91e3, 0x0313, 0xb18a, 0x237a, 0xd131, 0x43c1, 0xf158, 0x63a8, 0x3608, 0xa4f8, 0x1661, 0x8491, 0x76da, 0xe42a, 0x56b3, 0xc443, 0xb7ac, 0x255c, 0x97c5, 0x0535, 0xf77e, 0x658e, 0xd717, 0x45e7, 0x30c9, 0xa239, 0x10a0, 0x8250, 0x701b, 0xe2eb, 0x5072, 0xc282, 0xb16d, 0x239d, 0x9104, 0x03f4, 0xf1bf, 0x634f, 0xd1d6, 0x4326, 0x3b8a, 0xa97a, 0x1be3, 0x8913, 0x7b58, 0xe9a8, 0x5b31, 0xc9c1, 0xba2e, 0x28de, 0x9a47, 0x08b7, 0xfafc, 0x680c, 0xda95, 0x4865, 0x3d4b, 0xafbb, 0x1d22, 0x8fd2, 0x7d99, 0xef69, 0x5df0, 0xcf00, 0xbcef, 0x2e1f, 0x9c86, 0x0e76, 0xfc3d, 0x6ecd, 0xdc54, 0x4ea4, 0x2d0c, 0xbffc, 0x0d65, 0x9f95, 0x6dde, 0xff2e, 0x4db7, 0xdf47, 0xaca8, 0x3e58, 0x8cc1, 0x1e31, 0xec7a, 0x7e8a, 0xcc13, 0x5ee3, 0x2bcd, 0xb93d, 0x0ba4, 0x9954, 0x6b1f, 0xf9ef, 0x4b76, 0xd986, 0xaa69, 0x3899, 0x8a00, 0x18f0, 0xeabb, 0x784b, 0xcad2, 0x5822, 0x208e, 0xb27e, 0x00e7, 0x9217, 0x605c, 0xf2ac, 0x4035, 0xd2c5, 0xa12a, 0x33da, 0x8143, 0x13b3, 0xe1f8, 0x7308, 0xc191, 0x5361, 0x264f, 0xb4bf, 0x0626, 0x94d6, 0x669d, 0xf46d, 0x46f4, 0xd404, 0xa7eb, 0x351b, 0x8782, 0x1572, 0xe739, 0x75c9, 0xc750, 0x55a0, ], [ 0x0000, 0x6c10, 0xd820, 0xb430, 0xb5c9, 0xd9d9, 0x6de9, 0x01f9, 0x6e1b, 0x020b, 0xb63b, 0xda2b, 0xdbd2, 0xb7c2, 0x03f2, 0x6fe2, 0xdc36, 0xb026, 0x0416, 0x6806, 0x69ff, 0x05ef, 0xb1df, 0xddcf, 0xb22d, 0xde3d, 0x6a0d, 0x061d, 0x07e4, 0x6bf4, 0xdfc4, 0xb3d4, 0xbde5, 0xd1f5, 0x65c5, 0x09d5, 0x082c, 0x643c, 0xd00c, 0xbc1c, 0xd3fe, 0xbfee, 0x0bde, 0x67ce, 0x6637, 0x0a27, 0xbe17, 0xd207, 0x61d3, 0x0dc3, 0xb9f3, 0xd5e3, 0xd41a, 0xb80a, 0x0c3a, 0x602a, 0x0fc8, 0x63d8, 0xd7e8, 0xbbf8, 0xba01, 0xd611, 0x6221, 0x0e31, 0x7e43, 0x1253, 0xa663, 0xca73, 0xcb8a, 0xa79a, 0x13aa, 0x7fba, 0x1058, 0x7c48, 0xc878, 0xa468, 0xa591, 0xc981, 0x7db1, 0x11a1, 0xa275, 0xce65, 0x7a55, 0x1645, 0x17bc, 0x7bac, 0xcf9c, 0xa38c, 0xcc6e, 0xa07e, 0x144e, 0x785e, 0x79a7, 0x15b7, 0xa187, 0xcd97, 0xc3a6, 0xafb6, 0x1b86, 0x7796, 0x766f, 0x1a7f, 0xae4f, 0xc25f, 0xadbd, 0xc1ad, 0x759d, 0x198d, 0x1874, 0x7464, 0xc054, 0xac44, 0x1f90, 0x7380, 0xc7b0, 0xaba0, 0xaa59, 0xc649, 0x7279, 0x1e69, 0x718b, 0x1d9b, 0xa9ab, 0xc5bb, 0xc442, 0xa852, 0x1c62, 0x7072, 0xfc86, 0x9096, 0x24a6, 0x48b6, 0x494f, 0x255f, 0x916f, 0xfd7f, 0x929d, 0xfe8d, 0x4abd, 0x26ad, 0x2754, 0x4b44, 0xff74, 0x9364, 0x20b0, 0x4ca0, 0xf890, 0x9480, 0x9579, 0xf969, 0x4d59, 0x2149, 0x4eab, 0x22bb, 0x968b, 0xfa9b, 0xfb62, 0x9772, 0x2342, 0x4f52, 0x4163, 0x2d73, 0x9943, 0xf553, 0xf4aa, 0x98ba, 0x2c8a, 0x409a, 0x2f78, 0x4368, 0xf758, 0x9b48, 0x9ab1, 0xf6a1, 0x4291, 0x2e81, 0x9d55, 0xf145, 0x4575, 0x2965, 0x289c, 0x448c, 0xf0bc, 0x9cac, 0xf34e, 0x9f5e, 0x2b6e, 0x477e, 0x4687, 0x2a97, 0x9ea7, 0xf2b7, 0x82c5, 0xeed5, 0x5ae5, 0x36f5, 0x370c, 0x5b1c, 0xef2c, 0x833c, 0xecde, 0x80ce, 0x34fe, 0x58ee, 0x5917, 0x3507, 0x8137, 0xed27, 0x5ef3, 0x32e3, 0x86d3, 0xeac3, 0xeb3a, 0x872a, 0x331a, 0x5f0a, 0x30e8, 0x5cf8, 0xe8c8, 0x84d8, 0x8521, 0xe931, 0x5d01, 0x3111, 0x3f20, 0x5330, 0xe700, 0x8b10, 0x8ae9, 0xe6f9, 0x52c9, 0x3ed9, 0x513b, 0x3d2b, 0x891b, 0xe50b, 0xe4f2, 0x88e2, 0x3cd2, 0x50c2, 0xe316, 0x8f06, 0x3b36, 0x5726, 0x56df, 0x3acf, 0x8eff, 0xe2ef, 0x8d0d, 0xe11d, 0x552d, 0x393d, 0x38c4, 0x54d4, 0xe0e4, 0x8cf4, ], [ 0x0000, 0xfc85, 0xfc83, 0x0006, 0xfc8f, 0x000a, 0x000c, 0xfc89, 0xfc97, 0x0012, 0x0014, 0xfc91, 0x0018, 0xfc9d, 0xfc9b, 0x001e, 0xfca7, 0x0022, 0x0024, 0xfca1, 0x0028, 0xfcad, 0xfcab, 0x002e, 0x0030, 0xfcb5, 0xfcb3, 0x0036, 0xfcbf, 0x003a, 0x003c, 0xfcb9, 0xfcc7, 0x0042, 0x0044, 0xfcc1, 0x0048, 0xfccd, 0xfccb, 0x004e, 0x0050, 0xfcd5, 0xfcd3, 0x0056, 0xfcdf, 0x005a, 0x005c, 0xfcd9, 0x0060, 0xfce5, 0xfce3, 0x0066, 0xfcef, 0x006a, 0x006c, 0xfce9, 0xfcf7, 0x0072, 0x0074, 0xfcf1, 0x0078, 0xfcfd, 0xfcfb, 0x007e, 0xfc07, 0x0082, 0x0084, 0xfc01, 0x0088, 0xfc0d, 0xfc0b, 0x008e, 0x0090, 0xfc15, 0xfc13, 0x0096, 0xfc1f, 0x009a, 0x009c, 0xfc19, 0x00a0, 0xfc25, 0xfc23, 0x00a6, 0xfc2f, 0x00aa, 0x00ac, 0xfc29, 0xfc37, 0x00b2, 0x00b4, 0xfc31, 0x00b8, 0xfc3d, 0xfc3b, 0x00be, 0x00c0, 0xfc45, 0xfc43, 0x00c6, 0xfc4f, 0x00ca, 0x00cc, 0xfc49, 0xfc57, 0x00d2, 0x00d4, 0xfc51, 0x00d8, 0xfc5d, 0xfc5b, 0x00de, 0xfc67, 0x00e2, 0x00e4, 0xfc61, 0x00e8, 0xfc6d, 0xfc6b, 0x00ee, 0x00f0, 0xfc75, 0xfc73, 0x00f6, 0xfc7f, 0x00fa, 0x00fc, 0xfc79, 0xfd87, 0x0102, 0x0104, 0xfd81, 0x0108, 0xfd8d, 0xfd8b, 0x010e, 0x0110, 0xfd95, 0xfd93, 0x0116, 0xfd9f, 0x011a, 0x011c, 0xfd99, 0x0120, 0xfda5, 0xfda3, 0x0126, 0xfdaf, 0x012a, 0x012c, 0xfda9, 0xfdb7, 0x0132, 0x0134, 0xfdb1, 0x0138, 0xfdbd, 0xfdbb, 0x013e, 0x0140, 0xfdc5, 0xfdc3, 0x0146, 0xfdcf, 0x014a, 0x014c, 0xfdc9, 0xfdd7, 0x0152, 0x0154, 0xfdd1, 0x0158, 0xfddd, 0xfddb, 0x015e, 0xfde7, 0x0162, 0x0164, 0xfde1, 0x0168, 0xfded, 0xfdeb, 0x016e, 0x0170, 0xfdf5, 0xfdf3, 0x0176, 0xfdff, 0x017a, 0x017c, 0xfdf9, 0x0180, 0xfd05, 0xfd03, 0x0186, 0xfd0f, 0x018a, 0x018c, 0xfd09, 0xfd17, 0x0192, 0x0194, 0xfd11, 0x0198, 0xfd1d, 0xfd1b, 0x019e, 0xfd27, 0x01a2, 0x01a4, 0xfd21, 0x01a8, 0xfd2d, 0xfd2b, 0x01ae, 0x01b0, 0xfd35, 0xfd33, 0x01b6, 0xfd3f, 0x01ba, 0x01bc, 0xfd39, 0xfd47, 0x01c2, 0x01c4, 0xfd41, 0x01c8, 0xfd4d, 0xfd4b, 0x01ce, 0x01d0, 0xfd55, 0xfd53, 0x01d6, 0xfd5f, 0x01da, 0x01dc, 0xfd59, 0x01e0, 0xfd65, 0xfd63, 0x01e6, 0xfd6f, 0x01ea, 0x01ec, 0xfd69, 0xfd77, 0x01f2, 0x01f4, 0xfd71, 0x01f8, 0xfd7d, 0xfd7b, 0x01fe, ], [ 0x0000, 0xfe87, 0xf887, 0x0600, 0xf487, 0x0a00, 0x0c00, 0xf287, 0xec87, 0x1200, 0x1400, 0xea87, 0x1800, 0xe687, 0xe087, 0x1e00, 0xdc87, 0x2200, 0x2400, 0xda87, 0x2800, 0xd687, 0xd087, 0x2e00, 0x3000, 0xce87, 0xc887, 0x3600, 0xc487, 0x3a00, 0x3c00, 0xc287, 0xbc87, 0x4200, 0x4400, 0xba87, 0x4800, 0xb687, 0xb087, 0x4e00, 0x5000, 0xae87, 0xa887, 0x5600, 0xa487, 0x5a00, 0x5c00, 0xa287, 0x6000, 0x9e87, 0x9887, 0x6600, 0x9487, 0x6a00, 0x6c00, 0x9287, 0x8c87, 0x7200, 0x7400, 0x8a87, 0x7800, 0x8687, 0x8087, 0x7e00, 0x7c87, 0x8200, 0x8400, 0x7a87, 0x8800, 0x7687, 0x7087, 0x8e00, 0x9000, 0x6e87, 0x6887, 0x9600, 0x6487, 0x9a00, 0x9c00, 0x6287, 0xa000, 0x5e87, 0x5887, 0xa600, 0x5487, 0xaa00, 0xac00, 0x5287, 0x4c87, 0xb200, 0xb400, 0x4a87, 0xb800, 0x4687, 0x4087, 0xbe00, 0xc000, 0x3e87, 0x3887, 0xc600, 0x3487, 0xca00, 0xcc00, 0x3287, 0x2c87, 0xd200, 0xd400, 0x2a87, 0xd800, 0x2687, 0x2087, 0xde00, 0x1c87, 0xe200, 0xe400, 0x1a87, 0xe800, 0x1687, 0x1087, 0xee00, 0xf000, 0x0e87, 0x0887, 0xf600, 0x0487, 0xfa00, 0xfc00, 0x0287, 0xf90e, 0x0789, 0x0189, 0xff0e, 0x0d89, 0xf30e, 0xf50e, 0x0b89, 0x1589, 0xeb0e, 0xed0e, 0x1389, 0xe10e, 0x1f89, 0x1989, 0xe70e, 0x2589, 0xdb0e, 0xdd0e, 0x2389, 0xd10e, 0x2f89, 0x2989, 0xd70e, 0xc90e, 0x3789, 0x3189, 0xcf0e, 0x3d89, 0xc30e, 0xc50e, 0x3b89, 0x4589, 0xbb0e, 0xbd0e, 0x4389, 0xb10e, 0x4f89, 0x4989, 0xb70e, 0xa90e, 0x5789, 0x5189, 0xaf0e, 0x5d89, 0xa30e, 0xa50e, 0x5b89, 0x990e, 0x6789, 0x6189, 0x9f0e, 0x6d89, 0x930e, 0x950e, 0x6b89, 0x7589, 0x8b0e, 0x8d0e, 0x7389, 0x810e, 0x7f89, 0x7989, 0x870e, 0x8589, 0x7b0e, 0x7d0e, 0x8389, 0x710e, 0x8f89, 0x8989, 0x770e, 0x690e, 0x9789, 0x9189, 0x6f0e, 0x9d89, 0x630e, 0x650e, 0x9b89, 0x590e, 0xa789, 0xa189, 0x5f0e, 0xad89, 0x530e, 0x550e, 0xab89, 0xb589, 0x4b0e, 0x4d0e, 0xb389, 0x410e, 0xbf89, 0xb989, 0x470e, 0x390e, 0xc789, 0xc189, 0x3f0e, 0xcd89, 0x330e, 0x350e, 0xcb89, 0xd589, 0x2b0e, 0x2d0e, 0xd389, 0x210e, 0xdf89, 0xd989, 0x270e, 0xe589, 0x1b0e, 0x1d0e, 0xe389, 0x110e, 0xef89, 0xe989, 0x170e, 0x090e, 0xf789, 0xf189, 0x0f0e, 0xfd89, 0x030e, 0x050e, 0xfb89, ], ]; pub static CRC16_DECT_X_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x0589, 0x0b12, 0x0e9b, 0x1624, 0x13ad, 0x1d36, 0x18bf, 0x2c48, 0x29c1, 0x275a, 0x22d3, 0x3a6c, 0x3fe5, 0x317e, 0x34f7, 0x5890, 0x5d19, 0x5382, 0x560b, 0x4eb4, 0x4b3d, 0x45a6, 0x402f, 0x74d8, 0x7151, 0x7fca, 0x7a43, 0x62fc, 0x6775, 0x69ee, 0x6c67, 0xb120, 0xb4a9, 0xba32, 0xbfbb, 0xa704, 0xa28d, 0xac16, 0xa99f, 0x9d68, 0x98e1, 0x967a, 0x93f3, 0x8b4c, 0x8ec5, 0x805e, 0x85d7, 0xe9b0, 0xec39, 0xe2a2, 0xe72b, 0xff94, 0xfa1d, 0xf486, 0xf10f, 0xc5f8, 0xc071, 0xceea, 0xcb63, 0xd3dc, 0xd655, 0xd8ce, 0xdd47, 0x67c9, 0x6240, 0x6cdb, 0x6952, 0x71ed, 0x7464, 0x7aff, 0x7f76, 0x4b81, 0x4e08, 0x4093, 0x451a, 0x5da5, 0x582c, 0x56b7, 0x533e, 0x3f59, 0x3ad0, 0x344b, 0x31c2, 0x297d, 0x2cf4, 0x226f, 0x27e6, 0x1311, 0x1698, 0x1803, 0x1d8a, 0x0535, 0x00bc, 0x0e27, 0x0bae, 0xd6e9, 0xd360, 0xddfb, 0xd872, 0xc0cd, 0xc544, 0xcbdf, 0xce56, 0xfaa1, 0xff28, 0xf1b3, 0xf43a, 0xec85, 0xe90c, 0xe797, 0xe21e, 0x8e79, 0x8bf0, 0x856b, 0x80e2, 0x985d, 0x9dd4, 0x934f, 0x96c6, 0xa231, 0xa7b8, 0xa923, 0xacaa, 0xb415, 0xb19c, 0xbf07, 0xba8e, 0xcf92, 0xca1b, 0xc480, 0xc109, 0xd9b6, 0xdc3f, 0xd2a4, 0xd72d, 0xe3da, 0xe653, 0xe8c8, 0xed41, 0xf5fe, 0xf077, 0xfeec, 0xfb65, 0x9702, 0x928b, 0x9c10, 0x9999, 0x8126, 0x84af, 0x8a34, 0x8fbd, 0xbb4a, 0xbec3, 0xb058, 0xb5d1, 0xad6e, 0xa8e7, 0xa67c, 0xa3f5, 0x7eb2, 0x7b3b, 0x75a0, 0x7029, 0x6896, 0x6d1f, 0x6384, 0x660d, 0x52fa, 0x5773, 0x59e8, 0x5c61, 0x44de, 0x4157, 0x4fcc, 0x4a45, 0x2622, 0x23ab, 0x2d30, 0x28b9, 0x3006, 0x358f, 0x3b14, 0x3e9d, 0x0a6a, 0x0fe3, 0x0178, 0x04f1, 0x1c4e, 0x19c7, 0x175c, 0x12d5, 0xa85b, 0xadd2, 0xa349, 0xa6c0, 0xbe7f, 0xbbf6, 0xb56d, 0xb0e4, 0x8413, 0x819a, 0x8f01, 0x8a88, 0x9237, 0x97be, 0x9925, 0x9cac, 0xf0cb, 0xf542, 0xfbd9, 0xfe50, 0xe6ef, 0xe366, 0xedfd, 0xe874, 0xdc83, 0xd90a, 0xd791, 0xd218, 0xcaa7, 0xcf2e, 0xc1b5, 0xc43c, 0x197b, 0x1cf2, 0x1269, 0x17e0, 0x0f5f, 0x0ad6, 0x044d, 0x01c4, 0x3533, 0x30ba, 0x3e21, 0x3ba8, 0x2317, 0x269e, 0x2805, 0x2d8c, 0x41eb, 0x4462, 0x4af9, 0x4f70, 0x57cf, 0x5246, 0x5cdd, 0x5954, 0x6da3, 0x682a, 0x66b1, 0x6338, 0x7b87, 0x7e0e, 0x7095, 0x751c, ], [ 0x0000, 0x9aad, 0x30d3, 0xaa7e, 0x61a6, 0xfb0b, 0x5175, 0xcbd8, 0xc34c, 0x59e1, 0xf39f, 0x6932, 0xa2ea, 0x3847, 0x9239, 0x0894, 0x8311, 0x19bc, 0xb3c2, 0x296f, 0xe2b7, 0x781a, 0xd264, 0x48c9, 0x405d, 0xdaf0, 0x708e, 0xea23, 0x21fb, 0xbb56, 0x1128, 0x8b85, 0x03ab, 0x9906, 0x3378, 0xa9d5, 0x620d, 0xf8a0, 0x52de, 0xc873, 0xc0e7, 0x5a4a, 0xf034, 0x6a99, 0xa141, 0x3bec, 0x9192, 0x0b3f, 0x80ba, 0x1a17, 0xb069, 0x2ac4, 0xe11c, 0x7bb1, 0xd1cf, 0x4b62, 0x43f6, 0xd95b, 0x7325, 0xe988, 0x2250, 0xb8fd, 0x1283, 0x882e, 0x0756, 0x9dfb, 0x3785, 0xad28, 0x66f0, 0xfc5d, 0x5623, 0xcc8e, 0xc41a, 0x5eb7, 0xf4c9, 0x6e64, 0xa5bc, 0x3f11, 0x956f, 0x0fc2, 0x8447, 0x1eea, 0xb494, 0x2e39, 0xe5e1, 0x7f4c, 0xd532, 0x4f9f, 0x470b, 0xdda6, 0x77d8, 0xed75, 0x26ad, 0xbc00, 0x167e, 0x8cd3, 0x04fd, 0x9e50, 0x342e, 0xae83, 0x655b, 0xfff6, 0x5588, 0xcf25, 0xc7b1, 0x5d1c, 0xf762, 0x6dcf, 0xa617, 0x3cba, 0x96c4, 0x0c69, 0x87ec, 0x1d41, 0xb73f, 0x2d92, 0xe64a, 0x7ce7, 0xd699, 0x4c34, 0x44a0, 0xde0d, 0x7473, 0xeede, 0x2506, 0xbfab, 0x15d5, 0x8f78, 0x0eac, 0x9401, 0x3e7f, 0xa4d2, 0x6f0a, 0xf5a7, 0x5fd9, 0xc574, 0xcde0, 0x574d, 0xfd33, 0x679e, 0xac46, 0x36eb, 0x9c95, 0x0638, 0x8dbd, 0x1710, 0xbd6e, 0x27c3, 0xec1b, 0x76b6, 0xdcc8, 0x4665, 0x4ef1, 0xd45c, 0x7e22, 0xe48f, 0x2f57, 0xb5fa, 0x1f84, 0x8529, 0x0d07, 0x97aa, 0x3dd4, 0xa779, 0x6ca1, 0xf60c, 0x5c72, 0xc6df, 0xce4b, 0x54e6, 0xfe98, 0x6435, 0xafed, 0x3540, 0x9f3e, 0x0593, 0x8e16, 0x14bb, 0xbec5, 0x2468, 0xefb0, 0x751d, 0xdf63, 0x45ce, 0x4d5a, 0xd7f7, 0x7d89, 0xe724, 0x2cfc, 0xb651, 0x1c2f, 0x8682, 0x09fa, 0x9357, 0x3929, 0xa384, 0x685c, 0xf2f1, 0x588f, 0xc222, 0xcab6, 0x501b, 0xfa65, 0x60c8, 0xab10, 0x31bd, 0x9bc3, 0x016e, 0x8aeb, 0x1046, 0xba38, 0x2095, 0xeb4d, 0x71e0, 0xdb9e, 0x4133, 0x49a7, 0xd30a, 0x7974, 0xe3d9, 0x2801, 0xb2ac, 0x18d2, 0x827f, 0x0a51, 0x90fc, 0x3a82, 0xa02f, 0x6bf7, 0xf15a, 0x5b24, 0xc189, 0xc91d, 0x53b0, 0xf9ce, 0x6363, 0xa8bb, 0x3216, 0x9868, 0x02c5, 0x8940, 0x13ed, 0xb993, 0x233e, 0xe8e6, 0x724b, 0xd835, 0x4298, 0x4a0c, 0xd0a1, 0x7adf, 0xe072, 0x2baa, 0xb107, 0x1b79, 0x81d4, ], [ 0x0000, 0x1d58, 0x3ab0, 0x27e8, 0x7560, 0x6838, 0x4fd0, 0x5288, 0xeac0, 0xf798, 0xd070, 0xcd28, 0x9fa0, 0x82f8, 0xa510, 0xb848, 0xd009, 0xcd51, 0xeab9, 0xf7e1, 0xa569, 0xb831, 0x9fd9, 0x8281, 0x3ac9, 0x2791, 0x0079, 0x1d21, 0x4fa9, 0x52f1, 0x7519, 0x6841, 0xa59b, 0xb8c3, 0x9f2b, 0x8273, 0xd0fb, 0xcda3, 0xea4b, 0xf713, 0x4f5b, 0x5203, 0x75eb, 0x68b3, 0x3a3b, 0x2763, 0x008b, 0x1dd3, 0x7592, 0x68ca, 0x4f22, 0x527a, 0x00f2, 0x1daa, 0x3a42, 0x271a, 0x9f52, 0x820a, 0xa5e2, 0xb8ba, 0xea32, 0xf76a, 0xd082, 0xcdda, 0x4ebf, 0x53e7, 0x740f, 0x6957, 0x3bdf, 0x2687, 0x016f, 0x1c37, 0xa47f, 0xb927, 0x9ecf, 0x8397, 0xd11f, 0xcc47, 0xebaf, 0xf6f7, 0x9eb6, 0x83ee, 0xa406, 0xb95e, 0xebd6, 0xf68e, 0xd166, 0xcc3e, 0x7476, 0x692e, 0x4ec6, 0x539e, 0x0116, 0x1c4e, 0x3ba6, 0x26fe, 0xeb24, 0xf67c, 0xd194, 0xcccc, 0x9e44, 0x831c, 0xa4f4, 0xb9ac, 0x01e4, 0x1cbc, 0x3b54, 0x260c, 0x7484, 0x69dc, 0x4e34, 0x536c, 0x3b2d, 0x2675, 0x019d, 0x1cc5, 0x4e4d, 0x5315, 0x74fd, 0x69a5, 0xd1ed, 0xccb5, 0xeb5d, 0xf605, 0xa48d, 0xb9d5, 0x9e3d, 0x8365, 0x9d7e, 0x8026, 0xa7ce, 0xba96, 0xe81e, 0xf546, 0xd2ae, 0xcff6, 0x77be, 0x6ae6, 0x4d0e, 0x5056, 0x02de, 0x1f86, 0x386e, 0x2536, 0x4d77, 0x502f, 0x77c7, 0x6a9f, 0x3817, 0x254f, 0x02a7, 0x1fff, 0xa7b7, 0xbaef, 0x9d07, 0x805f, 0xd2d7, 0xcf8f, 0xe867, 0xf53f, 0x38e5, 0x25bd, 0x0255, 0x1f0d, 0x4d85, 0x50dd, 0x7735, 0x6a6d, 0xd225, 0xcf7d, 0xe895, 0xf5cd, 0xa745, 0xba1d, 0x9df5, 0x80ad, 0xe8ec, 0xf5b4, 0xd25c, 0xcf04, 0x9d8c, 0x80d4, 0xa73c, 0xba64, 0x022c, 0x1f74, 0x389c, 0x25c4, 0x774c, 0x6a14, 0x4dfc, 0x50a4, 0xd3c1, 0xce99, 0xe971, 0xf429, 0xa6a1, 0xbbf9, 0x9c11, 0x8149, 0x3901, 0x2459, 0x03b1, 0x1ee9, 0x4c61, 0x5139, 0x76d1, 0x6b89, 0x03c8, 0x1e90, 0x3978, 0x2420, 0x76a8, 0x6bf0, 0x4c18, 0x5140, 0xe908, 0xf450, 0xd3b8, 0xcee0, 0x9c68, 0x8130, 0xa6d8, 0xbb80, 0x765a, 0x6b02, 0x4cea, 0x51b2, 0x033a, 0x1e62, 0x398a, 0x24d2, 0x9c9a, 0x81c2, 0xa62a, 0xbb72, 0xe9fa, 0xf4a2, 0xd34a, 0xce12, 0xa653, 0xbb0b, 0x9ce3, 0x81bb, 0xd333, 0xce6b, 0xe983, 0xf4db, 0x4c93, 0x51cb, 0x7623, 0x6b7b, 0x39f3, 0x24ab, 0x0343, 0x1e1b, ], [ 0x0000, 0x3f75, 0x7eea, 0x419f, 0xfdd4, 0xc2a1, 0x833e, 0xbc4b, 0xfe21, 0xc154, 0x80cb, 0xbfbe, 0x03f5, 0x3c80, 0x7d1f, 0x426a, 0xf9cb, 0xc6be, 0x8721, 0xb854, 0x041f, 0x3b6a, 0x7af5, 0x4580, 0x07ea, 0x389f, 0x7900, 0x4675, 0xfa3e, 0xc54b, 0x84d4, 0xbba1, 0xf61f, 0xc96a, 0x88f5, 0xb780, 0x0bcb, 0x34be, 0x7521, 0x4a54, 0x083e, 0x374b, 0x76d4, 0x49a1, 0xf5ea, 0xca9f, 0x8b00, 0xb475, 0x0fd4, 0x30a1, 0x713e, 0x4e4b, 0xf200, 0xcd75, 0x8cea, 0xb39f, 0xf1f5, 0xce80, 0x8f1f, 0xb06a, 0x0c21, 0x3354, 0x72cb, 0x4dbe, 0xe9b7, 0xd6c2, 0x975d, 0xa828, 0x1463, 0x2b16, 0x6a89, 0x55fc, 0x1796, 0x28e3, 0x697c, 0x5609, 0xea42, 0xd537, 0x94a8, 0xabdd, 0x107c, 0x2f09, 0x6e96, 0x51e3, 0xeda8, 0xd2dd, 0x9342, 0xac37, 0xee5d, 0xd128, 0x90b7, 0xafc2, 0x1389, 0x2cfc, 0x6d63, 0x5216, 0x1fa8, 0x20dd, 0x6142, 0x5e37, 0xe27c, 0xdd09, 0x9c96, 0xa3e3, 0xe189, 0xdefc, 0x9f63, 0xa016, 0x1c5d, 0x2328, 0x62b7, 0x5dc2, 0xe663, 0xd916, 0x9889, 0xa7fc, 0x1bb7, 0x24c2, 0x655d, 0x5a28, 0x1842, 0x2737, 0x66a8, 0x59dd, 0xe596, 0xdae3, 0x9b7c, 0xa409, 0xd6e7, 0xe992, 0xa80d, 0x9778, 0x2b33, 0x1446, 0x55d9, 0x6aac, 0x28c6, 0x17b3, 0x562c, 0x6959, 0xd512, 0xea67, 0xabf8, 0x948d, 0x2f2c, 0x1059, 0x51c6, 0x6eb3, 0xd2f8, 0xed8d, 0xac12, 0x9367, 0xd10d, 0xee78, 0xafe7, 0x9092, 0x2cd9, 0x13ac, 0x5233, 0x6d46, 0x20f8, 0x1f8d, 0x5e12, 0x6167, 0xdd2c, 0xe259, 0xa3c6, 0x9cb3, 0xded9, 0xe1ac, 0xa033, 0x9f46, 0x230d, 0x1c78, 0x5de7, 0x6292, 0xd933, 0xe646, 0xa7d9, 0x98ac, 0x24e7, 0x1b92, 0x5a0d, 0x6578, 0x2712, 0x1867, 0x59f8, 0x668d, 0xdac6, 0xe5b3, 0xa42c, 0x9b59, 0x3f50, 0x0025, 0x41ba, 0x7ecf, 0xc284, 0xfdf1, 0xbc6e, 0x831b, 0xc171, 0xfe04, 0xbf9b, 0x80ee, 0x3ca5, 0x03d0, 0x424f, 0x7d3a, 0xc69b, 0xf9ee, 0xb871, 0x8704, 0x3b4f, 0x043a, 0x45a5, 0x7ad0, 0x38ba, 0x07cf, 0x4650, 0x7925, 0xc56e, 0xfa1b, 0xbb84, 0x84f1, 0xc94f, 0xf63a, 0xb7a5, 0x88d0, 0x349b, 0x0bee, 0x4a71, 0x7504, 0x376e, 0x081b, 0x4984, 0x76f1, 0xcaba, 0xf5cf, 0xb450, 0x8b25, 0x3084, 0x0ff1, 0x4e6e, 0x711b, 0xcd50, 0xf225, 0xb3ba, 0x8ccf, 0xcea5, 0xf1d0, 0xb04f, 0x8f3a, 0x3371, 0x0c04, 0x4d9b, 0x72ee, ], [ 0x0000, 0xa847, 0x5507, 0xfd40, 0xaa0e, 0x0249, 0xff09, 0x574e, 0x5195, 0xf9d2, 0x0492, 0xacd5, 0xfb9b, 0x53dc, 0xae9c, 0x06db, 0xa32a, 0x0b6d, 0xf62d, 0x5e6a, 0x0924, 0xa163, 0x5c23, 0xf464, 0xf2bf, 0x5af8, 0xa7b8, 0x0fff, 0x58b1, 0xf0f6, 0x0db6, 0xa5f1, 0x43dd, 0xeb9a, 0x16da, 0xbe9d, 0xe9d3, 0x4194, 0xbcd4, 0x1493, 0x1248, 0xba0f, 0x474f, 0xef08, 0xb846, 0x1001, 0xed41, 0x4506, 0xe0f7, 0x48b0, 0xb5f0, 0x1db7, 0x4af9, 0xe2be, 0x1ffe, 0xb7b9, 0xb162, 0x1925, 0xe465, 0x4c22, 0x1b6c, 0xb32b, 0x4e6b, 0xe62c, 0x87ba, 0x2ffd, 0xd2bd, 0x7afa, 0x2db4, 0x85f3, 0x78b3, 0xd0f4, 0xd62f, 0x7e68, 0x8328, 0x2b6f, 0x7c21, 0xd466, 0x2926, 0x8161, 0x2490, 0x8cd7, 0x7197, 0xd9d0, 0x8e9e, 0x26d9, 0xdb99, 0x73de, 0x7505, 0xdd42, 0x2002, 0x8845, 0xdf0b, 0x774c, 0x8a0c, 0x224b, 0xc467, 0x6c20, 0x9160, 0x3927, 0x6e69, 0xc62e, 0x3b6e, 0x9329, 0x95f2, 0x3db5, 0xc0f5, 0x68b2, 0x3ffc, 0x97bb, 0x6afb, 0xc2bc, 0x674d, 0xcf0a, 0x324a, 0x9a0d, 0xcd43, 0x6504, 0x9844, 0x3003, 0x36d8, 0x9e9f, 0x63df, 0xcb98, 0x9cd6, 0x3491, 0xc9d1, 0x6196, 0x0afd, 0xa2ba, 0x5ffa, 0xf7bd, 0xa0f3, 0x08b4, 0xf5f4, 0x5db3, 0x5b68, 0xf32f, 0x0e6f, 0xa628, 0xf166, 0x5921, 0xa461, 0x0c26, 0xa9d7, 0x0190, 0xfcd0, 0x5497, 0x03d9, 0xab9e, 0x56de, 0xfe99, 0xf842, 0x5005, 0xad45, 0x0502, 0x524c, 0xfa0b, 0x074b, 0xaf0c, 0x4920, 0xe167, 0x1c27, 0xb460, 0xe32e, 0x4b69, 0xb629, 0x1e6e, 0x18b5, 0xb0f2, 0x4db2, 0xe5f5, 0xb2bb, 0x1afc, 0xe7bc, 0x4ffb, 0xea0a, 0x424d, 0xbf0d, 0x174a, 0x4004, 0xe843, 0x1503, 0xbd44, 0xbb9f, 0x13d8, 0xee98, 0x46df, 0x1191, 0xb9d6, 0x4496, 0xecd1, 0x8d47, 0x2500, 0xd840, 0x7007, 0x2749, 0x8f0e, 0x724e, 0xda09, 0xdcd2, 0x7495, 0x89d5, 0x2192, 0x76dc, 0xde9b, 0x23db, 0x8b9c, 0x2e6d, 0x862a, 0x7b6a, 0xd32d, 0x8463, 0x2c24, 0xd164, 0x7923, 0x7ff8, 0xd7bf, 0x2aff, 0x82b8, 0xd5f6, 0x7db1, 0x80f1, 0x28b6, 0xce9a, 0x66dd, 0x9b9d, 0x33da, 0x6494, 0xccd3, 0x3193, 0x99d4, 0x9f0f, 0x3748, 0xca08, 0x624f, 0x3501, 0x9d46, 0x6006, 0xc841, 0x6db0, 0xc5f7, 0x38b7, 0x90f0, 0xc7be, 0x6ff9, 0x92b9, 0x3afe, 0x3c25, 0x9462, 0x6922, 0xc165, 0x962b, 0x3e6c, 0xc32c, 0x6b6b, ], [ 0x0000, 0x15fa, 0x2bf4, 0x3e0e, 0x57e8, 0x4212, 0x7c1c, 0x69e6, 0xafd0, 0xba2a, 0x8424, 0x91de, 0xf838, 0xedc2, 0xd3cc, 0xc636, 0x5a29, 0x4fd3, 0x71dd, 0x6427, 0x0dc1, 0x183b, 0x2635, 0x33cf, 0xf5f9, 0xe003, 0xde0d, 0xcbf7, 0xa211, 0xb7eb, 0x89e5, 0x9c1f, 0xb452, 0xa1a8, 0x9fa6, 0x8a5c, 0xe3ba, 0xf640, 0xc84e, 0xddb4, 0x1b82, 0x0e78, 0x3076, 0x258c, 0x4c6a, 0x5990, 0x679e, 0x7264, 0xee7b, 0xfb81, 0xc58f, 0xd075, 0xb993, 0xac69, 0x9267, 0x879d, 0x41ab, 0x5451, 0x6a5f, 0x7fa5, 0x1643, 0x03b9, 0x3db7, 0x284d, 0x6d2d, 0x78d7, 0x46d9, 0x5323, 0x3ac5, 0x2f3f, 0x1131, 0x04cb, 0xc2fd, 0xd707, 0xe909, 0xfcf3, 0x9515, 0x80ef, 0xbee1, 0xab1b, 0x3704, 0x22fe, 0x1cf0, 0x090a, 0x60ec, 0x7516, 0x4b18, 0x5ee2, 0x98d4, 0x8d2e, 0xb320, 0xa6da, 0xcf3c, 0xdac6, 0xe4c8, 0xf132, 0xd97f, 0xcc85, 0xf28b, 0xe771, 0x8e97, 0x9b6d, 0xa563, 0xb099, 0x76af, 0x6355, 0x5d5b, 0x48a1, 0x2147, 0x34bd, 0x0ab3, 0x1f49, 0x8356, 0x96ac, 0xa8a2, 0xbd58, 0xd4be, 0xc144, 0xff4a, 0xeab0, 0x2c86, 0x397c, 0x0772, 0x1288, 0x7b6e, 0x6e94, 0x509a, 0x4560, 0xda5a, 0xcfa0, 0xf1ae, 0xe454, 0x8db2, 0x9848, 0xa646, 0xb3bc, 0x758a, 0x6070, 0x5e7e, 0x4b84, 0x2262, 0x3798, 0x0996, 0x1c6c, 0x8073, 0x9589, 0xab87, 0xbe7d, 0xd79b, 0xc261, 0xfc6f, 0xe995, 0x2fa3, 0x3a59, 0x0457, 0x11ad, 0x784b, 0x6db1, 0x53bf, 0x4645, 0x6e08, 0x7bf2, 0x45fc, 0x5006, 0x39e0, 0x2c1a, 0x1214, 0x07ee, 0xc1d8, 0xd422, 0xea2c, 0xffd6, 0x9630, 0x83ca, 0xbdc4, 0xa83e, 0x3421, 0x21db, 0x1fd5, 0x0a2f, 0x63c9, 0x7633, 0x483d, 0x5dc7, 0x9bf1, 0x8e0b, 0xb005, 0xa5ff, 0xcc19, 0xd9e3, 0xe7ed, 0xf217, 0xb777, 0xa28d, 0x9c83, 0x8979, 0xe09f, 0xf565, 0xcb6b, 0xde91, 0x18a7, 0x0d5d, 0x3353, 0x26a9, 0x4f4f, 0x5ab5, 0x64bb, 0x7141, 0xed5e, 0xf8a4, 0xc6aa, 0xd350, 0xbab6, 0xaf4c, 0x9142, 0x84b8, 0x428e, 0x5774, 0x697a, 0x7c80, 0x1566, 0x009c, 0x3e92, 0x2b68, 0x0325, 0x16df, 0x28d1, 0x3d2b, 0x54cd, 0x4137, 0x7f39, 0x6ac3, 0xacf5, 0xb90f, 0x8701, 0x92fb, 0xfb1d, 0xeee7, 0xd0e9, 0xc513, 0x590c, 0x4cf6, 0x72f8, 0x6702, 0x0ee4, 0x1b1e, 0x2510, 0x30ea, 0xf6dc, 0xe326, 0xdd28, 0xc8d2, 0xa134, 0xb4ce, 0x8ac0, 0x9f3a, ], [ 0x0000, 0xb13d, 0x67f3, 0xd6ce, 0xcfe6, 0x7edb, 0xa815, 0x1928, 0x9a45, 0x2b78, 0xfdb6, 0x4c8b, 0x55a3, 0xe49e, 0x3250, 0x836d, 0x3103, 0x803e, 0x56f0, 0xe7cd, 0xfee5, 0x4fd8, 0x9916, 0x282b, 0xab46, 0x1a7b, 0xccb5, 0x7d88, 0x64a0, 0xd59d, 0x0353, 0xb26e, 0x6206, 0xd33b, 0x05f5, 0xb4c8, 0xade0, 0x1cdd, 0xca13, 0x7b2e, 0xf843, 0x497e, 0x9fb0, 0x2e8d, 0x37a5, 0x8698, 0x5056, 0xe16b, 0x5305, 0xe238, 0x34f6, 0x85cb, 0x9ce3, 0x2dde, 0xfb10, 0x4a2d, 0xc940, 0x787d, 0xaeb3, 0x1f8e, 0x06a6, 0xb79b, 0x6155, 0xd068, 0xc40c, 0x7531, 0xa3ff, 0x12c2, 0x0bea, 0xbad7, 0x6c19, 0xdd24, 0x5e49, 0xef74, 0x39ba, 0x8887, 0x91af, 0x2092, 0xf65c, 0x4761, 0xf50f, 0x4432, 0x92fc, 0x23c1, 0x3ae9, 0x8bd4, 0x5d1a, 0xec27, 0x6f4a, 0xde77, 0x08b9, 0xb984, 0xa0ac, 0x1191, 0xc75f, 0x7662, 0xa60a, 0x1737, 0xc1f9, 0x70c4, 0x69ec, 0xd8d1, 0x0e1f, 0xbf22, 0x3c4f, 0x8d72, 0x5bbc, 0xea81, 0xf3a9, 0x4294, 0x945a, 0x2567, 0x9709, 0x2634, 0xf0fa, 0x41c7, 0x58ef, 0xe9d2, 0x3f1c, 0x8e21, 0x0d4c, 0xbc71, 0x6abf, 0xdb82, 0xc2aa, 0x7397, 0xa559, 0x1464, 0x8d91, 0x3cac, 0xea62, 0x5b5f, 0x4277, 0xf34a, 0x2584, 0x94b9, 0x17d4, 0xa6e9, 0x7027, 0xc11a, 0xd832, 0x690f, 0xbfc1, 0x0efc, 0xbc92, 0x0daf, 0xdb61, 0x6a5c, 0x7374, 0xc249, 0x1487, 0xa5ba, 0x26d7, 0x97ea, 0x4124, 0xf019, 0xe931, 0x580c, 0x8ec2, 0x3fff, 0xef97, 0x5eaa, 0x8864, 0x3959, 0x2071, 0x914c, 0x4782, 0xf6bf, 0x75d2, 0xc4ef, 0x1221, 0xa31c, 0xba34, 0x0b09, 0xddc7, 0x6cfa, 0xde94, 0x6fa9, 0xb967, 0x085a, 0x1172, 0xa04f, 0x7681, 0xc7bc, 0x44d1, 0xf5ec, 0x2322, 0x921f, 0x8b37, 0x3a0a, 0xecc4, 0x5df9, 0x499d, 0xf8a0, 0x2e6e, 0x9f53, 0x867b, 0x3746, 0xe188, 0x50b5, 0xd3d8, 0x62e5, 0xb42b, 0x0516, 0x1c3e, 0xad03, 0x7bcd, 0xcaf0, 0x789e, 0xc9a3, 0x1f6d, 0xae50, 0xb778, 0x0645, 0xd08b, 0x61b6, 0xe2db, 0x53e6, 0x8528, 0x3415, 0x2d3d, 0x9c00, 0x4ace, 0xfbf3, 0x2b9b, 0x9aa6, 0x4c68, 0xfd55, 0xe47d, 0x5540, 0x838e, 0x32b3, 0xb1de, 0x00e3, 0xd62d, 0x6710, 0x7e38, 0xcf05, 0x19cb, 0xa8f6, 0x1a98, 0xaba5, 0x7d6b, 0xcc56, 0xd57e, 0x6443, 0xb28d, 0x03b0, 0x80dd, 0x31e0, 0xe72e, 0x5613, 0x4f3b, 0xfe06, 0x28c8, 0x99f5, ], [ 0x0000, 0x1eab, 0x3d56, 0x23fd, 0x7aac, 0x6407, 0x47fa, 0x5951, 0xf558, 0xebf3, 0xc80e, 0xd6a5, 0x8ff4, 0x915f, 0xb2a2, 0xac09, 0xef39, 0xf192, 0xd26f, 0xccc4, 0x9595, 0x8b3e, 0xa8c3, 0xb668, 0x1a61, 0x04ca, 0x2737, 0x399c, 0x60cd, 0x7e66, 0x5d9b, 0x4330, 0xdbfb, 0xc550, 0xe6ad, 0xf806, 0xa157, 0xbffc, 0x9c01, 0x82aa, 0x2ea3, 0x3008, 0x13f5, 0x0d5e, 0x540f, 0x4aa4, 0x6959, 0x77f2, 0x34c2, 0x2a69, 0x0994, 0x173f, 0x4e6e, 0x50c5, 0x7338, 0x6d93, 0xc19a, 0xdf31, 0xfccc, 0xe267, 0xbb36, 0xa59d, 0x8660, 0x98cb, 0xb27f, 0xacd4, 0x8f29, 0x9182, 0xc8d3, 0xd678, 0xf585, 0xeb2e, 0x4727, 0x598c, 0x7a71, 0x64da, 0x3d8b, 0x2320, 0x00dd, 0x1e76, 0x5d46, 0x43ed, 0x6010, 0x7ebb, 0x27ea, 0x3941, 0x1abc, 0x0417, 0xa81e, 0xb6b5, 0x9548, 0x8be3, 0xd2b2, 0xcc19, 0xefe4, 0xf14f, 0x6984, 0x772f, 0x54d2, 0x4a79, 0x1328, 0x0d83, 0x2e7e, 0x30d5, 0x9cdc, 0x8277, 0xa18a, 0xbf21, 0xe670, 0xf8db, 0xdb26, 0xc58d, 0x86bd, 0x9816, 0xbbeb, 0xa540, 0xfc11, 0xe2ba, 0xc147, 0xdfec, 0x73e5, 0x6d4e, 0x4eb3, 0x5018, 0x0949, 0x17e2, 0x341f, 0x2ab4, 0x6177, 0x7fdc, 0x5c21, 0x428a, 0x1bdb, 0x0570, 0x268d, 0x3826, 0x942f, 0x8a84, 0xa979, 0xb7d2, 0xee83, 0xf028, 0xd3d5, 0xcd7e, 0x8e4e, 0x90e5, 0xb318, 0xadb3, 0xf4e2, 0xea49, 0xc9b4, 0xd71f, 0x7b16, 0x65bd, 0x4640, 0x58eb, 0x01ba, 0x1f11, 0x3cec, 0x2247, 0xba8c, 0xa427, 0x87da, 0x9971, 0xc020, 0xde8b, 0xfd76, 0xe3dd, 0x4fd4, 0x517f, 0x7282, 0x6c29, 0x3578, 0x2bd3, 0x082e, 0x1685, 0x55b5, 0x4b1e, 0x68e3, 0x7648, 0x2f19, 0x31b2, 0x124f, 0x0ce4, 0xa0ed, 0xbe46, 0x9dbb, 0x8310, 0xda41, 0xc4ea, 0xe717, 0xf9bc, 0xd308, 0xcda3, 0xee5e, 0xf0f5, 0xa9a4, 0xb70f, 0x94f2, 0x8a59, 0x2650, 0x38fb, 0x1b06, 0x05ad, 0x5cfc, 0x4257, 0x61aa, 0x7f01, 0x3c31, 0x229a, 0x0167, 0x1fcc, 0x469d, 0x5836, 0x7bcb, 0x6560, 0xc969, 0xd7c2, 0xf43f, 0xea94, 0xb3c5, 0xad6e, 0x8e93, 0x9038, 0x08f3, 0x1658, 0x35a5, 0x2b0e, 0x725f, 0x6cf4, 0x4f09, 0x51a2, 0xfdab, 0xe300, 0xc0fd, 0xde56, 0x8707, 0x99ac, 0xba51, 0xa4fa, 0xe7ca, 0xf961, 0xda9c, 0xc437, 0x9d66, 0x83cd, 0xa030, 0xbe9b, 0x1292, 0x0c39, 0x2fc4, 0x316f, 0x683e, 0x7695, 0x5568, 0x4bc3, ], [ 0x0000, 0xc2ee, 0x8055, 0x42bb, 0x0523, 0xc7cd, 0x8576, 0x4798, 0x0a46, 0xc8a8, 0x8a13, 0x48fd, 0x0f65, 0xcd8b, 0x8f30, 0x4dde, 0x148c, 0xd662, 0x94d9, 0x5637, 0x11af, 0xd341, 0x91fa, 0x5314, 0x1eca, 0xdc24, 0x9e9f, 0x5c71, 0x1be9, 0xd907, 0x9bbc, 0x5952, 0x2918, 0xebf6, 0xa94d, 0x6ba3, 0x2c3b, 0xeed5, 0xac6e, 0x6e80, 0x235e, 0xe1b0, 0xa30b, 0x61e5, 0x267d, 0xe493, 0xa628, 0x64c6, 0x3d94, 0xff7a, 0xbdc1, 0x7f2f, 0x38b7, 0xfa59, 0xb8e2, 0x7a0c, 0x37d2, 0xf53c, 0xb787, 0x7569, 0x32f1, 0xf01f, 0xb2a4, 0x704a, 0x5230, 0x90de, 0xd265, 0x108b, 0x5713, 0x95fd, 0xd746, 0x15a8, 0x5876, 0x9a98, 0xd823, 0x1acd, 0x5d55, 0x9fbb, 0xdd00, 0x1fee, 0x46bc, 0x8452, 0xc6e9, 0x0407, 0x439f, 0x8171, 0xc3ca, 0x0124, 0x4cfa, 0x8e14, 0xccaf, 0x0e41, 0x49d9, 0x8b37, 0xc98c, 0x0b62, 0x7b28, 0xb9c6, 0xfb7d, 0x3993, 0x7e0b, 0xbce5, 0xfe5e, 0x3cb0, 0x716e, 0xb380, 0xf13b, 0x33d5, 0x744d, 0xb6a3, 0xf418, 0x36f6, 0x6fa4, 0xad4a, 0xeff1, 0x2d1f, 0x6a87, 0xa869, 0xead2, 0x283c, 0x65e2, 0xa70c, 0xe5b7, 0x2759, 0x60c1, 0xa22f, 0xe094, 0x227a, 0xa460, 0x668e, 0x2435, 0xe6db, 0xa143, 0x63ad, 0x2116, 0xe3f8, 0xae26, 0x6cc8, 0x2e73, 0xec9d, 0xab05, 0x69eb, 0x2b50, 0xe9be, 0xb0ec, 0x7202, 0x30b9, 0xf257, 0xb5cf, 0x7721, 0x359a, 0xf774, 0xbaaa, 0x7844, 0x3aff, 0xf811, 0xbf89, 0x7d67, 0x3fdc, 0xfd32, 0x8d78, 0x4f96, 0x0d2d, 0xcfc3, 0x885b, 0x4ab5, 0x080e, 0xcae0, 0x873e, 0x45d0, 0x076b, 0xc585, 0x821d, 0x40f3, 0x0248, 0xc0a6, 0x99f4, 0x5b1a, 0x19a1, 0xdb4f, 0x9cd7, 0x5e39, 0x1c82, 0xde6c, 0x93b2, 0x515c, 0x13e7, 0xd109, 0x9691, 0x547f, 0x16c4, 0xd42a, 0xf650, 0x34be, 0x7605, 0xb4eb, 0xf373, 0x319d, 0x7326, 0xb1c8, 0xfc16, 0x3ef8, 0x7c43, 0xbead, 0xf935, 0x3bdb, 0x7960, 0xbb8e, 0xe2dc, 0x2032, 0x6289, 0xa067, 0xe7ff, 0x2511, 0x67aa, 0xa544, 0xe89a, 0x2a74, 0x68cf, 0xaa21, 0xedb9, 0x2f57, 0x6dec, 0xaf02, 0xdf48, 0x1da6, 0x5f1d, 0x9df3, 0xda6b, 0x1885, 0x5a3e, 0x98d0, 0xd50e, 0x17e0, 0x555b, 0x97b5, 0xd02d, 0x12c3, 0x5078, 0x9296, 0xcbc4, 0x092a, 0x4b91, 0x897f, 0xcee7, 0x0c09, 0x4eb2, 0x8c5c, 0xc182, 0x036c, 0x41d7, 0x8339, 0xc4a1, 0x064f, 0x44f4, 0x861a, ], [ 0x0000, 0x4d49, 0x9a92, 0xd7db, 0x30ad, 0x7de4, 0xaa3f, 0xe776, 0x615a, 0x2c13, 0xfbc8, 0xb681, 0x51f7, 0x1cbe, 0xcb65, 0x862c, 0xc2b4, 0x8ffd, 0x5826, 0x156f, 0xf219, 0xbf50, 0x688b, 0x25c2, 0xa3ee, 0xeea7, 0x397c, 0x7435, 0x9343, 0xde0a, 0x09d1, 0x4498, 0x80e1, 0xcda8, 0x1a73, 0x573a, 0xb04c, 0xfd05, 0x2ade, 0x6797, 0xe1bb, 0xacf2, 0x7b29, 0x3660, 0xd116, 0x9c5f, 0x4b84, 0x06cd, 0x4255, 0x0f1c, 0xd8c7, 0x958e, 0x72f8, 0x3fb1, 0xe86a, 0xa523, 0x230f, 0x6e46, 0xb99d, 0xf4d4, 0x13a2, 0x5eeb, 0x8930, 0xc479, 0x044b, 0x4902, 0x9ed9, 0xd390, 0x34e6, 0x79af, 0xae74, 0xe33d, 0x6511, 0x2858, 0xff83, 0xb2ca, 0x55bc, 0x18f5, 0xcf2e, 0x8267, 0xc6ff, 0x8bb6, 0x5c6d, 0x1124, 0xf652, 0xbb1b, 0x6cc0, 0x2189, 0xa7a5, 0xeaec, 0x3d37, 0x707e, 0x9708, 0xda41, 0x0d9a, 0x40d3, 0x84aa, 0xc9e3, 0x1e38, 0x5371, 0xb407, 0xf94e, 0x2e95, 0x63dc, 0xe5f0, 0xa8b9, 0x7f62, 0x322b, 0xd55d, 0x9814, 0x4fcf, 0x0286, 0x461e, 0x0b57, 0xdc8c, 0x91c5, 0x76b3, 0x3bfa, 0xec21, 0xa168, 0x2744, 0x6a0d, 0xbdd6, 0xf09f, 0x17e9, 0x5aa0, 0x8d7b, 0xc032, 0x0896, 0x45df, 0x9204, 0xdf4d, 0x383b, 0x7572, 0xa2a9, 0xefe0, 0x69cc, 0x2485, 0xf35e, 0xbe17, 0x5961, 0x1428, 0xc3f3, 0x8eba, 0xca22, 0x876b, 0x50b0, 0x1df9, 0xfa8f, 0xb7c6, 0x601d, 0x2d54, 0xab78, 0xe631, 0x31ea, 0x7ca3, 0x9bd5, 0xd69c, 0x0147, 0x4c0e, 0x8877, 0xc53e, 0x12e5, 0x5fac, 0xb8da, 0xf593, 0x2248, 0x6f01, 0xe92d, 0xa464, 0x73bf, 0x3ef6, 0xd980, 0x94c9, 0x4312, 0x0e5b, 0x4ac3, 0x078a, 0xd051, 0x9d18, 0x7a6e, 0x3727, 0xe0fc, 0xadb5, 0x2b99, 0x66d0, 0xb10b, 0xfc42, 0x1b34, 0x567d, 0x81a6, 0xccef, 0x0cdd, 0x4194, 0x964f, 0xdb06, 0x3c70, 0x7139, 0xa6e2, 0xebab, 0x6d87, 0x20ce, 0xf715, 0xba5c, 0x5d2a, 0x1063, 0xc7b8, 0x8af1, 0xce69, 0x8320, 0x54fb, 0x19b2, 0xfec4, 0xb38d, 0x6456, 0x291f, 0xaf33, 0xe27a, 0x35a1, 0x78e8, 0x9f9e, 0xd2d7, 0x050c, 0x4845, 0x8c3c, 0xc175, 0x16ae, 0x5be7, 0xbc91, 0xf1d8, 0x2603, 0x6b4a, 0xed66, 0xa02f, 0x77f4, 0x3abd, 0xddcb, 0x9082, 0x4759, 0x0a10, 0x4e88, 0x03c1, 0xd41a, 0x9953, 0x7e25, 0x336c, 0xe4b7, 0xa9fe, 0x2fd2, 0x629b, 0xb540, 0xf809, 0x1f7f, 0x5236, 0x85ed, 0xc8a4, ], [ 0x0000, 0x112c, 0x2258, 0x3374, 0x44b0, 0x559c, 0x66e8, 0x77c4, 0x8960, 0x984c, 0xab38, 0xba14, 0xcdd0, 0xdcfc, 0xef88, 0xfea4, 0x1749, 0x0665, 0x3511, 0x243d, 0x53f9, 0x42d5, 0x71a1, 0x608d, 0x9e29, 0x8f05, 0xbc71, 0xad5d, 0xda99, 0xcbb5, 0xf8c1, 0xe9ed, 0x2e92, 0x3fbe, 0x0cca, 0x1de6, 0x6a22, 0x7b0e, 0x487a, 0x5956, 0xa7f2, 0xb6de, 0x85aa, 0x9486, 0xe342, 0xf26e, 0xc11a, 0xd036, 0x39db, 0x28f7, 0x1b83, 0x0aaf, 0x7d6b, 0x6c47, 0x5f33, 0x4e1f, 0xb0bb, 0xa197, 0x92e3, 0x83cf, 0xf40b, 0xe527, 0xd653, 0xc77f, 0x5d24, 0x4c08, 0x7f7c, 0x6e50, 0x1994, 0x08b8, 0x3bcc, 0x2ae0, 0xd444, 0xc568, 0xf61c, 0xe730, 0x90f4, 0x81d8, 0xb2ac, 0xa380, 0x4a6d, 0x5b41, 0x6835, 0x7919, 0x0edd, 0x1ff1, 0x2c85, 0x3da9, 0xc30d, 0xd221, 0xe155, 0xf079, 0x87bd, 0x9691, 0xa5e5, 0xb4c9, 0x73b6, 0x629a, 0x51ee, 0x40c2, 0x3706, 0x262a, 0x155e, 0x0472, 0xfad6, 0xebfa, 0xd88e, 0xc9a2, 0xbe66, 0xaf4a, 0x9c3e, 0x8d12, 0x64ff, 0x75d3, 0x46a7, 0x578b, 0x204f, 0x3163, 0x0217, 0x133b, 0xed9f, 0xfcb3, 0xcfc7, 0xdeeb, 0xa92f, 0xb803, 0x8b77, 0x9a5b, 0xba48, 0xab64, 0x9810, 0x893c, 0xfef8, 0xefd4, 0xdca0, 0xcd8c, 0x3328, 0x2204, 0x1170, 0x005c, 0x7798, 0x66b4, 0x55c0, 0x44ec, 0xad01, 0xbc2d, 0x8f59, 0x9e75, 0xe9b1, 0xf89d, 0xcbe9, 0xdac5, 0x2461, 0x354d, 0x0639, 0x1715, 0x60d1, 0x71fd, 0x4289, 0x53a5, 0x94da, 0x85f6, 0xb682, 0xa7ae, 0xd06a, 0xc146, 0xf232, 0xe31e, 0x1dba, 0x0c96, 0x3fe2, 0x2ece, 0x590a, 0x4826, 0x7b52, 0x6a7e, 0x8393, 0x92bf, 0xa1cb, 0xb0e7, 0xc723, 0xd60f, 0xe57b, 0xf457, 0x0af3, 0x1bdf, 0x28ab, 0x3987, 0x4e43, 0x5f6f, 0x6c1b, 0x7d37, 0xe76c, 0xf640, 0xc534, 0xd418, 0xa3dc, 0xb2f0, 0x8184, 0x90a8, 0x6e0c, 0x7f20, 0x4c54, 0x5d78, 0x2abc, 0x3b90, 0x08e4, 0x19c8, 0xf025, 0xe109, 0xd27d, 0xc351, 0xb495, 0xa5b9, 0x96cd, 0x87e1, 0x7945, 0x6869, 0x5b1d, 0x4a31, 0x3df5, 0x2cd9, 0x1fad, 0x0e81, 0xc9fe, 0xd8d2, 0xeba6, 0xfa8a, 0x8d4e, 0x9c62, 0xaf16, 0xbe3a, 0x409e, 0x51b2, 0x62c6, 0x73ea, 0x042e, 0x1502, 0x2676, 0x375a, 0xdeb7, 0xcf9b, 0xfcef, 0xedc3, 0x9a07, 0x8b2b, 0xb85f, 0xa973, 0x57d7, 0x46fb, 0x758f, 0x64a3, 0x1367, 0x024b, 0x313f, 0x2013, ], [ 0x0000, 0x7119, 0xe232, 0x932b, 0xc1ed, 0xb0f4, 0x23df, 0x52c6, 0x8653, 0xf74a, 0x6461, 0x1578, 0x47be, 0x36a7, 0xa58c, 0xd495, 0x092f, 0x7836, 0xeb1d, 0x9a04, 0xc8c2, 0xb9db, 0x2af0, 0x5be9, 0x8f7c, 0xfe65, 0x6d4e, 0x1c57, 0x4e91, 0x3f88, 0xaca3, 0xddba, 0x125e, 0x6347, 0xf06c, 0x8175, 0xd3b3, 0xa2aa, 0x3181, 0x4098, 0x940d, 0xe514, 0x763f, 0x0726, 0x55e0, 0x24f9, 0xb7d2, 0xc6cb, 0x1b71, 0x6a68, 0xf943, 0x885a, 0xda9c, 0xab85, 0x38ae, 0x49b7, 0x9d22, 0xec3b, 0x7f10, 0x0e09, 0x5ccf, 0x2dd6, 0xbefd, 0xcfe4, 0x24bc, 0x55a5, 0xc68e, 0xb797, 0xe551, 0x9448, 0x0763, 0x767a, 0xa2ef, 0xd3f6, 0x40dd, 0x31c4, 0x6302, 0x121b, 0x8130, 0xf029, 0x2d93, 0x5c8a, 0xcfa1, 0xbeb8, 0xec7e, 0x9d67, 0x0e4c, 0x7f55, 0xabc0, 0xdad9, 0x49f2, 0x38eb, 0x6a2d, 0x1b34, 0x881f, 0xf906, 0x36e2, 0x47fb, 0xd4d0, 0xa5c9, 0xf70f, 0x8616, 0x153d, 0x6424, 0xb0b1, 0xc1a8, 0x5283, 0x239a, 0x715c, 0x0045, 0x936e, 0xe277, 0x3fcd, 0x4ed4, 0xddff, 0xace6, 0xfe20, 0x8f39, 0x1c12, 0x6d0b, 0xb99e, 0xc887, 0x5bac, 0x2ab5, 0x7873, 0x096a, 0x9a41, 0xeb58, 0x4978, 0x3861, 0xab4a, 0xda53, 0x8895, 0xf98c, 0x6aa7, 0x1bbe, 0xcf2b, 0xbe32, 0x2d19, 0x5c00, 0x0ec6, 0x7fdf, 0xecf4, 0x9ded, 0x4057, 0x314e, 0xa265, 0xd37c, 0x81ba, 0xf0a3, 0x6388, 0x1291, 0xc604, 0xb71d, 0x2436, 0x552f, 0x07e9, 0x76f0, 0xe5db, 0x94c2, 0x5b26, 0x2a3f, 0xb914, 0xc80d, 0x9acb, 0xebd2, 0x78f9, 0x09e0, 0xdd75, 0xac6c, 0x3f47, 0x4e5e, 0x1c98, 0x6d81, 0xfeaa, 0x8fb3, 0x5209, 0x2310, 0xb03b, 0xc122, 0x93e4, 0xe2fd, 0x71d6, 0x00cf, 0xd45a, 0xa543, 0x3668, 0x4771, 0x15b7, 0x64ae, 0xf785, 0x869c, 0x6dc4, 0x1cdd, 0x8ff6, 0xfeef, 0xac29, 0xdd30, 0x4e1b, 0x3f02, 0xeb97, 0x9a8e, 0x09a5, 0x78bc, 0x2a7a, 0x5b63, 0xc848, 0xb951, 0x64eb, 0x15f2, 0x86d9, 0xf7c0, 0xa506, 0xd41f, 0x4734, 0x362d, 0xe2b8, 0x93a1, 0x008a, 0x7193, 0x2355, 0x524c, 0xc167, 0xb07e, 0x7f9a, 0x0e83, 0x9da8, 0xecb1, 0xbe77, 0xcf6e, 0x5c45, 0x2d5c, 0xf9c9, 0x88d0, 0x1bfb, 0x6ae2, 0x3824, 0x493d, 0xda16, 0xab0f, 0x76b5, 0x07ac, 0x9487, 0xe59e, 0xb758, 0xc641, 0x556a, 0x2473, 0xf0e6, 0x81ff, 0x12d4, 0x63cd, 0x310b, 0x4012, 0xd339, 0xa220, ], [ 0x0000, 0x92f0, 0x2069, 0xb299, 0x40d2, 0xd222, 0x60bb, 0xf24b, 0x81a4, 0x1354, 0xa1cd, 0x333d, 0xc176, 0x5386, 0xe11f, 0x73ef, 0x06c1, 0x9431, 0x26a8, 0xb458, 0x4613, 0xd4e3, 0x667a, 0xf48a, 0x8765, 0x1595, 0xa70c, 0x35fc, 0xc7b7, 0x5547, 0xe7de, 0x752e, 0x0d82, 0x9f72, 0x2deb, 0xbf1b, 0x4d50, 0xdfa0, 0x6d39, 0xffc9, 0x8c26, 0x1ed6, 0xac4f, 0x3ebf, 0xccf4, 0x5e04, 0xec9d, 0x7e6d, 0x0b43, 0x99b3, 0x2b2a, 0xb9da, 0x4b91, 0xd961, 0x6bf8, 0xf908, 0x8ae7, 0x1817, 0xaa8e, 0x387e, 0xca35, 0x58c5, 0xea5c, 0x78ac, 0x1b04, 0x89f4, 0x3b6d, 0xa99d, 0x5bd6, 0xc926, 0x7bbf, 0xe94f, 0x9aa0, 0x0850, 0xbac9, 0x2839, 0xda72, 0x4882, 0xfa1b, 0x68eb, 0x1dc5, 0x8f35, 0x3dac, 0xaf5c, 0x5d17, 0xcfe7, 0x7d7e, 0xef8e, 0x9c61, 0x0e91, 0xbc08, 0x2ef8, 0xdcb3, 0x4e43, 0xfcda, 0x6e2a, 0x1686, 0x8476, 0x36ef, 0xa41f, 0x5654, 0xc4a4, 0x763d, 0xe4cd, 0x9722, 0x05d2, 0xb74b, 0x25bb, 0xd7f0, 0x4500, 0xf799, 0x6569, 0x1047, 0x82b7, 0x302e, 0xa2de, 0x5095, 0xc265, 0x70fc, 0xe20c, 0x91e3, 0x0313, 0xb18a, 0x237a, 0xd131, 0x43c1, 0xf158, 0x63a8, 0x3608, 0xa4f8, 0x1661, 0x8491, 0x76da, 0xe42a, 0x56b3, 0xc443, 0xb7ac, 0x255c, 0x97c5, 0x0535, 0xf77e, 0x658e, 0xd717, 0x45e7, 0x30c9, 0xa239, 0x10a0, 0x8250, 0x701b, 0xe2eb, 0x5072, 0xc282, 0xb16d, 0x239d, 0x9104, 0x03f4, 0xf1bf, 0x634f, 0xd1d6, 0x4326, 0x3b8a, 0xa97a, 0x1be3, 0x8913, 0x7b58, 0xe9a8, 0x5b31, 0xc9c1, 0xba2e, 0x28de, 0x9a47, 0x08b7, 0xfafc, 0x680c, 0xda95, 0x4865, 0x3d4b, 0xafbb, 0x1d22, 0x8fd2, 0x7d99, 0xef69, 0x5df0, 0xcf00, 0xbcef, 0x2e1f, 0x9c86, 0x0e76, 0xfc3d, 0x6ecd, 0xdc54, 0x4ea4, 0x2d0c, 0xbffc, 0x0d65, 0x9f95, 0x6dde, 0xff2e, 0x4db7, 0xdf47, 0xaca8, 0x3e58, 0x8cc1, 0x1e31, 0xec7a, 0x7e8a, 0xcc13, 0x5ee3, 0x2bcd, 0xb93d, 0x0ba4, 0x9954, 0x6b1f, 0xf9ef, 0x4b76, 0xd986, 0xaa69, 0x3899, 0x8a00, 0x18f0, 0xeabb, 0x784b, 0xcad2, 0x5822, 0x208e, 0xb27e, 0x00e7, 0x9217, 0x605c, 0xf2ac, 0x4035, 0xd2c5, 0xa12a, 0x33da, 0x8143, 0x13b3, 0xe1f8, 0x7308, 0xc191, 0x5361, 0x264f, 0xb4bf, 0x0626, 0x94d6, 0x669d, 0xf46d, 0x46f4, 0xd404, 0xa7eb, 0x351b, 0x8782, 0x1572, 0xe739, 0x75c9, 0xc750, 0x55a0, ], [ 0x0000, 0x6c10, 0xd820, 0xb430, 0xb5c9, 0xd9d9, 0x6de9, 0x01f9, 0x6e1b, 0x020b, 0xb63b, 0xda2b, 0xdbd2, 0xb7c2, 0x03f2, 0x6fe2, 0xdc36, 0xb026, 0x0416, 0x6806, 0x69ff, 0x05ef, 0xb1df, 0xddcf, 0xb22d, 0xde3d, 0x6a0d, 0x061d, 0x07e4, 0x6bf4, 0xdfc4, 0xb3d4, 0xbde5, 0xd1f5, 0x65c5, 0x09d5, 0x082c, 0x643c, 0xd00c, 0xbc1c, 0xd3fe, 0xbfee, 0x0bde, 0x67ce, 0x6637, 0x0a27, 0xbe17, 0xd207, 0x61d3, 0x0dc3, 0xb9f3, 0xd5e3, 0xd41a, 0xb80a, 0x0c3a, 0x602a, 0x0fc8, 0x63d8, 0xd7e8, 0xbbf8, 0xba01, 0xd611, 0x6221, 0x0e31, 0x7e43, 0x1253, 0xa663, 0xca73, 0xcb8a, 0xa79a, 0x13aa, 0x7fba, 0x1058, 0x7c48, 0xc878, 0xa468, 0xa591, 0xc981, 0x7db1, 0x11a1, 0xa275, 0xce65, 0x7a55, 0x1645, 0x17bc, 0x7bac, 0xcf9c, 0xa38c, 0xcc6e, 0xa07e, 0x144e, 0x785e, 0x79a7, 0x15b7, 0xa187, 0xcd97, 0xc3a6, 0xafb6, 0x1b86, 0x7796, 0x766f, 0x1a7f, 0xae4f, 0xc25f, 0xadbd, 0xc1ad, 0x759d, 0x198d, 0x1874, 0x7464, 0xc054, 0xac44, 0x1f90, 0x7380, 0xc7b0, 0xaba0, 0xaa59, 0xc649, 0x7279, 0x1e69, 0x718b, 0x1d9b, 0xa9ab, 0xc5bb, 0xc442, 0xa852, 0x1c62, 0x7072, 0xfc86, 0x9096, 0x24a6, 0x48b6, 0x494f, 0x255f, 0x916f, 0xfd7f, 0x929d, 0xfe8d, 0x4abd, 0x26ad, 0x2754, 0x4b44, 0xff74, 0x9364, 0x20b0, 0x4ca0, 0xf890, 0x9480, 0x9579, 0xf969, 0x4d59, 0x2149, 0x4eab, 0x22bb, 0x968b, 0xfa9b, 0xfb62, 0x9772, 0x2342, 0x4f52, 0x4163, 0x2d73, 0x9943, 0xf553, 0xf4aa, 0x98ba, 0x2c8a, 0x409a, 0x2f78, 0x4368, 0xf758, 0x9b48, 0x9ab1, 0xf6a1, 0x4291, 0x2e81, 0x9d55, 0xf145, 0x4575, 0x2965, 0x289c, 0x448c, 0xf0bc, 0x9cac, 0xf34e, 0x9f5e, 0x2b6e, 0x477e, 0x4687, 0x2a97, 0x9ea7, 0xf2b7, 0x82c5, 0xeed5, 0x5ae5, 0x36f5, 0x370c, 0x5b1c, 0xef2c, 0x833c, 0xecde, 0x80ce, 0x34fe, 0x58ee, 0x5917, 0x3507, 0x8137, 0xed27, 0x5ef3, 0x32e3, 0x86d3, 0xeac3, 0xeb3a, 0x872a, 0x331a, 0x5f0a, 0x30e8, 0x5cf8, 0xe8c8, 0x84d8, 0x8521, 0xe931, 0x5d01, 0x3111, 0x3f20, 0x5330, 0xe700, 0x8b10, 0x8ae9, 0xe6f9, 0x52c9, 0x3ed9, 0x513b, 0x3d2b, 0x891b, 0xe50b, 0xe4f2, 0x88e2, 0x3cd2, 0x50c2, 0xe316, 0x8f06, 0x3b36, 0x5726, 0x56df, 0x3acf, 0x8eff, 0xe2ef, 0x8d0d, 0xe11d, 0x552d, 0x393d, 0x38c4, 0x54d4, 0xe0e4, 0x8cf4, ], [ 0x0000, 0xfc85, 0xfc83, 0x0006, 0xfc8f, 0x000a, 0x000c, 0xfc89, 0xfc97, 0x0012, 0x0014, 0xfc91, 0x0018, 0xfc9d, 0xfc9b, 0x001e, 0xfca7, 0x0022, 0x0024, 0xfca1, 0x0028, 0xfcad, 0xfcab, 0x002e, 0x0030, 0xfcb5, 0xfcb3, 0x0036, 0xfcbf, 0x003a, 0x003c, 0xfcb9, 0xfcc7, 0x0042, 0x0044, 0xfcc1, 0x0048, 0xfccd, 0xfccb, 0x004e, 0x0050, 0xfcd5, 0xfcd3, 0x0056, 0xfcdf, 0x005a, 0x005c, 0xfcd9, 0x0060, 0xfce5, 0xfce3, 0x0066, 0xfcef, 0x006a, 0x006c, 0xfce9, 0xfcf7, 0x0072, 0x0074, 0xfcf1, 0x0078, 0xfcfd, 0xfcfb, 0x007e, 0xfc07, 0x0082, 0x0084, 0xfc01, 0x0088, 0xfc0d, 0xfc0b, 0x008e, 0x0090, 0xfc15, 0xfc13, 0x0096, 0xfc1f, 0x009a, 0x009c, 0xfc19, 0x00a0, 0xfc25, 0xfc23, 0x00a6, 0xfc2f, 0x00aa, 0x00ac, 0xfc29, 0xfc37, 0x00b2, 0x00b4, 0xfc31, 0x00b8, 0xfc3d, 0xfc3b, 0x00be, 0x00c0, 0xfc45, 0xfc43, 0x00c6, 0xfc4f, 0x00ca, 0x00cc, 0xfc49, 0xfc57, 0x00d2, 0x00d4, 0xfc51, 0x00d8, 0xfc5d, 0xfc5b, 0x00de, 0xfc67, 0x00e2, 0x00e4, 0xfc61, 0x00e8, 0xfc6d, 0xfc6b, 0x00ee, 0x00f0, 0xfc75, 0xfc73, 0x00f6, 0xfc7f, 0x00fa, 0x00fc, 0xfc79, 0xfd87, 0x0102, 0x0104, 0xfd81, 0x0108, 0xfd8d, 0xfd8b, 0x010e, 0x0110, 0xfd95, 0xfd93, 0x0116, 0xfd9f, 0x011a, 0x011c, 0xfd99, 0x0120, 0xfda5, 0xfda3, 0x0126, 0xfdaf, 0x012a, 0x012c, 0xfda9, 0xfdb7, 0x0132, 0x0134, 0xfdb1, 0x0138, 0xfdbd, 0xfdbb, 0x013e, 0x0140, 0xfdc5, 0xfdc3, 0x0146, 0xfdcf, 0x014a, 0x014c, 0xfdc9, 0xfdd7, 0x0152, 0x0154, 0xfdd1, 0x0158, 0xfddd, 0xfddb, 0x015e, 0xfde7, 0x0162, 0x0164, 0xfde1, 0x0168, 0xfded, 0xfdeb, 0x016e, 0x0170, 0xfdf5, 0xfdf3, 0x0176, 0xfdff, 0x017a, 0x017c, 0xfdf9, 0x0180, 0xfd05, 0xfd03, 0x0186, 0xfd0f, 0x018a, 0x018c, 0xfd09, 0xfd17, 0x0192, 0x0194, 0xfd11, 0x0198, 0xfd1d, 0xfd1b, 0x019e, 0xfd27, 0x01a2, 0x01a4, 0xfd21, 0x01a8, 0xfd2d, 0xfd2b, 0x01ae, 0x01b0, 0xfd35, 0xfd33, 0x01b6, 0xfd3f, 0x01ba, 0x01bc, 0xfd39, 0xfd47, 0x01c2, 0x01c4, 0xfd41, 0x01c8, 0xfd4d, 0xfd4b, 0x01ce, 0x01d0, 0xfd55, 0xfd53, 0x01d6, 0xfd5f, 0x01da, 0x01dc, 0xfd59, 0x01e0, 0xfd65, 0xfd63, 0x01e6, 0xfd6f, 0x01ea, 0x01ec, 0xfd69, 0xfd77, 0x01f2, 0x01f4, 0xfd71, 0x01f8, 0xfd7d, 0xfd7b, 0x01fe, ], [ 0x0000, 0xfe87, 0xf887, 0x0600, 0xf487, 0x0a00, 0x0c00, 0xf287, 0xec87, 0x1200, 0x1400, 0xea87, 0x1800, 0xe687, 0xe087, 0x1e00, 0xdc87, 0x2200, 0x2400, 0xda87, 0x2800, 0xd687, 0xd087, 0x2e00, 0x3000, 0xce87, 0xc887, 0x3600, 0xc487, 0x3a00, 0x3c00, 0xc287, 0xbc87, 0x4200, 0x4400, 0xba87, 0x4800, 0xb687, 0xb087, 0x4e00, 0x5000, 0xae87, 0xa887, 0x5600, 0xa487, 0x5a00, 0x5c00, 0xa287, 0x6000, 0x9e87, 0x9887, 0x6600, 0x9487, 0x6a00, 0x6c00, 0x9287, 0x8c87, 0x7200, 0x7400, 0x8a87, 0x7800, 0x8687, 0x8087, 0x7e00, 0x7c87, 0x8200, 0x8400, 0x7a87, 0x8800, 0x7687, 0x7087, 0x8e00, 0x9000, 0x6e87, 0x6887, 0x9600, 0x6487, 0x9a00, 0x9c00, 0x6287, 0xa000, 0x5e87, 0x5887, 0xa600, 0x5487, 0xaa00, 0xac00, 0x5287, 0x4c87, 0xb200, 0xb400, 0x4a87, 0xb800, 0x4687, 0x4087, 0xbe00, 0xc000, 0x3e87, 0x3887, 0xc600, 0x3487, 0xca00, 0xcc00, 0x3287, 0x2c87, 0xd200, 0xd400, 0x2a87, 0xd800, 0x2687, 0x2087, 0xde00, 0x1c87, 0xe200, 0xe400, 0x1a87, 0xe800, 0x1687, 0x1087, 0xee00, 0xf000, 0x0e87, 0x0887, 0xf600, 0x0487, 0xfa00, 0xfc00, 0x0287, 0xf90e, 0x0789, 0x0189, 0xff0e, 0x0d89, 0xf30e, 0xf50e, 0x0b89, 0x1589, 0xeb0e, 0xed0e, 0x1389, 0xe10e, 0x1f89, 0x1989, 0xe70e, 0x2589, 0xdb0e, 0xdd0e, 0x2389, 0xd10e, 0x2f89, 0x2989, 0xd70e, 0xc90e, 0x3789, 0x3189, 0xcf0e, 0x3d89, 0xc30e, 0xc50e, 0x3b89, 0x4589, 0xbb0e, 0xbd0e, 0x4389, 0xb10e, 0x4f89, 0x4989, 0xb70e, 0xa90e, 0x5789, 0x5189, 0xaf0e, 0x5d89, 0xa30e, 0xa50e, 0x5b89, 0x990e, 0x6789, 0x6189, 0x9f0e, 0x6d89, 0x930e, 0x950e, 0x6b89, 0x7589, 0x8b0e, 0x8d0e, 0x7389, 0x810e, 0x7f89, 0x7989, 0x870e, 0x8589, 0x7b0e, 0x7d0e, 0x8389, 0x710e, 0x8f89, 0x8989, 0x770e, 0x690e, 0x9789, 0x9189, 0x6f0e, 0x9d89, 0x630e, 0x650e, 0x9b89, 0x590e, 0xa789, 0xa189, 0x5f0e, 0xad89, 0x530e, 0x550e, 0xab89, 0xb589, 0x4b0e, 0x4d0e, 0xb389, 0x410e, 0xbf89, 0xb989, 0x470e, 0x390e, 0xc789, 0xc189, 0x3f0e, 0xcd89, 0x330e, 0x350e, 0xcb89, 0xd589, 0x2b0e, 0x2d0e, 0xd389, 0x210e, 0xdf89, 0xd989, 0x270e, 0xe589, 0x1b0e, 0x1d0e, 0xe389, 0x110e, 0xef89, 0xe989, 0x170e, 0x090e, 0xf789, 0xf189, 0x0f0e, 0xfd89, 0x030e, 0x050e, 0xfb89, ], ]; pub static CRC16_DNP_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x365e, 0x6cbc, 0x5ae2, 0xd978, 0xef26, 0xb5c4, 0x839a, 0xff89, 0xc9d7, 0x9335, 0xa56b, 0x26f1, 0x10af, 0x4a4d, 0x7c13, 0xb26b, 0x8435, 0xded7, 0xe889, 0x6b13, 0x5d4d, 0x07af, 0x31f1, 0x4de2, 0x7bbc, 0x215e, 0x1700, 0x949a, 0xa2c4, 0xf826, 0xce78, 0x29af, 0x1ff1, 0x4513, 0x734d, 0xf0d7, 0xc689, 0x9c6b, 0xaa35, 0xd626, 0xe078, 0xba9a, 0x8cc4, 0x0f5e, 0x3900, 0x63e2, 0x55bc, 0x9bc4, 0xad9a, 0xf778, 0xc126, 0x42bc, 0x74e2, 0x2e00, 0x185e, 0x644d, 0x5213, 0x08f1, 0x3eaf, 0xbd35, 0x8b6b, 0xd189, 0xe7d7, 0x535e, 0x6500, 0x3fe2, 0x09bc, 0x8a26, 0xbc78, 0xe69a, 0xd0c4, 0xacd7, 0x9a89, 0xc06b, 0xf635, 0x75af, 0x43f1, 0x1913, 0x2f4d, 0xe135, 0xd76b, 0x8d89, 0xbbd7, 0x384d, 0x0e13, 0x54f1, 0x62af, 0x1ebc, 0x28e2, 0x7200, 0x445e, 0xc7c4, 0xf19a, 0xab78, 0x9d26, 0x7af1, 0x4caf, 0x164d, 0x2013, 0xa389, 0x95d7, 0xcf35, 0xf96b, 0x8578, 0xb326, 0xe9c4, 0xdf9a, 0x5c00, 0x6a5e, 0x30bc, 0x06e2, 0xc89a, 0xfec4, 0xa426, 0x9278, 0x11e2, 0x27bc, 0x7d5e, 0x4b00, 0x3713, 0x014d, 0x5baf, 0x6df1, 0xee6b, 0xd835, 0x82d7, 0xb489, 0xa6bc, 0x90e2, 0xca00, 0xfc5e, 0x7fc4, 0x499a, 0x1378, 0x2526, 0x5935, 0x6f6b, 0x3589, 0x03d7, 0x804d, 0xb613, 0xecf1, 0xdaaf, 0x14d7, 0x2289, 0x786b, 0x4e35, 0xcdaf, 0xfbf1, 0xa113, 0x974d, 0xeb5e, 0xdd00, 0x87e2, 0xb1bc, 0x3226, 0x0478, 0x5e9a, 0x68c4, 0x8f13, 0xb94d, 0xe3af, 0xd5f1, 0x566b, 0x6035, 0x3ad7, 0x0c89, 0x709a, 0x46c4, 0x1c26, 0x2a78, 0xa9e2, 0x9fbc, 0xc55e, 0xf300, 0x3d78, 0x0b26, 0x51c4, 0x679a, 0xe400, 0xd25e, 0x88bc, 0xbee2, 0xc2f1, 0xf4af, 0xae4d, 0x9813, 0x1b89, 0x2dd7, 0x7735, 0x416b, 0xf5e2, 0xc3bc, 0x995e, 0xaf00, 0x2c9a, 0x1ac4, 0x4026, 0x7678, 0x0a6b, 0x3c35, 0x66d7, 0x5089, 0xd313, 0xe54d, 0xbfaf, 0x89f1, 0x4789, 0x71d7, 0x2b35, 0x1d6b, 0x9ef1, 0xa8af, 0xf24d, 0xc413, 0xb800, 0x8e5e, 0xd4bc, 0xe2e2, 0x6178, 0x5726, 0x0dc4, 0x3b9a, 0xdc4d, 0xea13, 0xb0f1, 0x86af, 0x0535, 0x336b, 0x6989, 0x5fd7, 0x23c4, 0x159a, 0x4f78, 0x7926, 0xfabc, 0xcce2, 0x9600, 0xa05e, 0x6e26, 0x5878, 0x029a, 0x34c4, 0xb75e, 0x8100, 0xdbe2, 0xedbc, 0x91af, 0xa7f1, 0xfd13, 0xcb4d, 0x48d7, 0x7e89, 0x246b, 0x1235, ], [ 0x0000, 0xab4e, 0x1be5, 0xb0ab, 0x37ca, 0x9c84, 0x2c2f, 0x8761, 0x6f94, 0xc4da, 0x7471, 0xdf3f, 0x585e, 0xf310, 0x43bb, 0xe8f5, 0xdf28, 0x7466, 0xc4cd, 0x6f83, 0xe8e2, 0x43ac, 0xf307, 0x5849, 0xb0bc, 0x1bf2, 0xab59, 0x0017, 0x8776, 0x2c38, 0x9c93, 0x37dd, 0xf329, 0x5867, 0xe8cc, 0x4382, 0xc4e3, 0x6fad, 0xdf06, 0x7448, 0x9cbd, 0x37f3, 0x8758, 0x2c16, 0xab77, 0x0039, 0xb092, 0x1bdc, 0x2c01, 0x874f, 0x37e4, 0x9caa, 0x1bcb, 0xb085, 0x002e, 0xab60, 0x4395, 0xe8db, 0x5870, 0xf33e, 0x745f, 0xdf11, 0x6fba, 0xc4f4, 0xab2b, 0x0065, 0xb0ce, 0x1b80, 0x9ce1, 0x37af, 0x8704, 0x2c4a, 0xc4bf, 0x6ff1, 0xdf5a, 0x7414, 0xf375, 0x583b, 0xe890, 0x43de, 0x7403, 0xdf4d, 0x6fe6, 0xc4a8, 0x43c9, 0xe887, 0x582c, 0xf362, 0x1b97, 0xb0d9, 0x0072, 0xab3c, 0x2c5d, 0x8713, 0x37b8, 0x9cf6, 0x5802, 0xf34c, 0x43e7, 0xe8a9, 0x6fc8, 0xc486, 0x742d, 0xdf63, 0x3796, 0x9cd8, 0x2c73, 0x873d, 0x005c, 0xab12, 0x1bb9, 0xb0f7, 0x872a, 0x2c64, 0x9ccf, 0x3781, 0xb0e0, 0x1bae, 0xab05, 0x004b, 0xe8be, 0x43f0, 0xf35b, 0x5815, 0xdf74, 0x743a, 0xc491, 0x6fdf, 0x1b2f, 0xb061, 0x00ca, 0xab84, 0x2ce5, 0x87ab, 0x3700, 0x9c4e, 0x74bb, 0xdff5, 0x6f5e, 0xc410, 0x4371, 0xe83f, 0x5894, 0xf3da, 0xc407, 0x6f49, 0xdfe2, 0x74ac, 0xf3cd, 0x5883, 0xe828, 0x4366, 0xab93, 0x00dd, 0xb076, 0x1b38, 0x9c59, 0x3717, 0x87bc, 0x2cf2, 0xe806, 0x4348, 0xf3e3, 0x58ad, 0xdfcc, 0x7482, 0xc429, 0x6f67, 0x8792, 0x2cdc, 0x9c77, 0x3739, 0xb058, 0x1b16, 0xabbd, 0x00f3, 0x372e, 0x9c60, 0x2ccb, 0x8785, 0x00e4, 0xabaa, 0x1b01, 0xb04f, 0x58ba, 0xf3f4, 0x435f, 0xe811, 0x6f70, 0xc43e, 0x7495, 0xdfdb, 0xb004, 0x1b4a, 0xabe1, 0x00af, 0x87ce, 0x2c80, 0x9c2b, 0x3765, 0xdf90, 0x74de, 0xc475, 0x6f3b, 0xe85a, 0x4314, 0xf3bf, 0x58f1, 0x6f2c, 0xc462, 0x74c9, 0xdf87, 0x58e6, 0xf3a8, 0x4303, 0xe84d, 0x00b8, 0xabf6, 0x1b5d, 0xb013, 0x3772, 0x9c3c, 0x2c97, 0x87d9, 0x432d, 0xe863, 0x58c8, 0xf386, 0x74e7, 0xdfa9, 0x6f02, 0xc44c, 0x2cb9, 0x87f7, 0x375c, 0x9c12, 0x1b73, 0xb03d, 0x0096, 0xabd8, 0x9c05, 0x374b, 0x87e0, 0x2cae, 0xabcf, 0x0081, 0xb02a, 0x1b64, 0xf391, 0x58df, 0xe874, 0x433a, 0xc45b, 0x6f15, 0xdfbe, 0x74f0, ], [ 0x0000, 0x19b8, 0x3370, 0x2ac8, 0x66e0, 0x7f58, 0x5590, 0x4c28, 0xcdc0, 0xd478, 0xfeb0, 0xe708, 0xab20, 0xb298, 0x9850, 0x81e8, 0xd6f9, 0xcf41, 0xe589, 0xfc31, 0xb019, 0xa9a1, 0x8369, 0x9ad1, 0x1b39, 0x0281, 0x2849, 0x31f1, 0x7dd9, 0x6461, 0x4ea9, 0x5711, 0xe08b, 0xf933, 0xd3fb, 0xca43, 0x866b, 0x9fd3, 0xb51b, 0xaca3, 0x2d4b, 0x34f3, 0x1e3b, 0x0783, 0x4bab, 0x5213, 0x78db, 0x6163, 0x3672, 0x2fca, 0x0502, 0x1cba, 0x5092, 0x492a, 0x63e2, 0x7a5a, 0xfbb2, 0xe20a, 0xc8c2, 0xd17a, 0x9d52, 0x84ea, 0xae22, 0xb79a, 0x8c6f, 0x95d7, 0xbf1f, 0xa6a7, 0xea8f, 0xf337, 0xd9ff, 0xc047, 0x41af, 0x5817, 0x72df, 0x6b67, 0x274f, 0x3ef7, 0x143f, 0x0d87, 0x5a96, 0x432e, 0x69e6, 0x705e, 0x3c76, 0x25ce, 0x0f06, 0x16be, 0x9756, 0x8eee, 0xa426, 0xbd9e, 0xf1b6, 0xe80e, 0xc2c6, 0xdb7e, 0x6ce4, 0x755c, 0x5f94, 0x462c, 0x0a04, 0x13bc, 0x3974, 0x20cc, 0xa124, 0xb89c, 0x9254, 0x8bec, 0xc7c4, 0xde7c, 0xf4b4, 0xed0c, 0xba1d, 0xa3a5, 0x896d, 0x90d5, 0xdcfd, 0xc545, 0xef8d, 0xf635, 0x77dd, 0x6e65, 0x44ad, 0x5d15, 0x113d, 0x0885, 0x224d, 0x3bf5, 0x55a7, 0x4c1f, 0x66d7, 0x7f6f, 0x3347, 0x2aff, 0x0037, 0x198f, 0x9867, 0x81df, 0xab17, 0xb2af, 0xfe87, 0xe73f, 0xcdf7, 0xd44f, 0x835e, 0x9ae6, 0xb02e, 0xa996, 0xe5be, 0xfc06, 0xd6ce, 0xcf76, 0x4e9e, 0x5726, 0x7dee, 0x6456, 0x287e, 0x31c6, 0x1b0e, 0x02b6, 0xb52c, 0xac94, 0x865c, 0x9fe4, 0xd3cc, 0xca74, 0xe0bc, 0xf904, 0x78ec, 0x6154, 0x4b9c, 0x5224, 0x1e0c, 0x07b4, 0x2d7c, 0x34c4, 0x63d5, 0x7a6d, 0x50a5, 0x491d, 0x0535, 0x1c8d, 0x3645, 0x2ffd, 0xae15, 0xb7ad, 0x9d65, 0x84dd, 0xc8f5, 0xd14d, 0xfb85, 0xe23d, 0xd9c8, 0xc070, 0xeab8, 0xf300, 0xbf28, 0xa690, 0x8c58, 0x95e0, 0x1408, 0x0db0, 0x2778, 0x3ec0, 0x72e8, 0x6b50, 0x4198, 0x5820, 0x0f31, 0x1689, 0x3c41, 0x25f9, 0x69d1, 0x7069, 0x5aa1, 0x4319, 0xc2f1, 0xdb49, 0xf181, 0xe839, 0xa411, 0xbda9, 0x9761, 0x8ed9, 0x3943, 0x20fb, 0x0a33, 0x138b, 0x5fa3, 0x461b, 0x6cd3, 0x756b, 0xf483, 0xed3b, 0xc7f3, 0xde4b, 0x9263, 0x8bdb, 0xa113, 0xb8ab, 0xefba, 0xf602, 0xdcca, 0xc572, 0x895a, 0x90e2, 0xba2a, 0xa392, 0x227a, 0x3bc2, 0x110a, 0x08b2, 0x449a, 0x5d22, 0x77ea, 0x6e52, ], [ 0x0000, 0xc2e8, 0xc8a9, 0x0a41, 0xdc2b, 0x1ec3, 0x1482, 0xd66a, 0xf52f, 0x37c7, 0x3d86, 0xff6e, 0x2904, 0xebec, 0xe1ad, 0x2345, 0xa727, 0x65cf, 0x6f8e, 0xad66, 0x7b0c, 0xb9e4, 0xb3a5, 0x714d, 0x5208, 0x90e0, 0x9aa1, 0x5849, 0x8e23, 0x4ccb, 0x468a, 0x8462, 0x0337, 0xc1df, 0xcb9e, 0x0976, 0xdf1c, 0x1df4, 0x17b5, 0xd55d, 0xf618, 0x34f0, 0x3eb1, 0xfc59, 0x2a33, 0xe8db, 0xe29a, 0x2072, 0xa410, 0x66f8, 0x6cb9, 0xae51, 0x783b, 0xbad3, 0xb092, 0x727a, 0x513f, 0x93d7, 0x9996, 0x5b7e, 0x8d14, 0x4ffc, 0x45bd, 0x8755, 0x066e, 0xc486, 0xcec7, 0x0c2f, 0xda45, 0x18ad, 0x12ec, 0xd004, 0xf341, 0x31a9, 0x3be8, 0xf900, 0x2f6a, 0xed82, 0xe7c3, 0x252b, 0xa149, 0x63a1, 0x69e0, 0xab08, 0x7d62, 0xbf8a, 0xb5cb, 0x7723, 0x5466, 0x968e, 0x9ccf, 0x5e27, 0x884d, 0x4aa5, 0x40e4, 0x820c, 0x0559, 0xc7b1, 0xcdf0, 0x0f18, 0xd972, 0x1b9a, 0x11db, 0xd333, 0xf076, 0x329e, 0x38df, 0xfa37, 0x2c5d, 0xeeb5, 0xe4f4, 0x261c, 0xa27e, 0x6096, 0x6ad7, 0xa83f, 0x7e55, 0xbcbd, 0xb6fc, 0x7414, 0x5751, 0x95b9, 0x9ff8, 0x5d10, 0x8b7a, 0x4992, 0x43d3, 0x813b, 0x0cdc, 0xce34, 0xc475, 0x069d, 0xd0f7, 0x121f, 0x185e, 0xdab6, 0xf9f3, 0x3b1b, 0x315a, 0xf3b2, 0x25d8, 0xe730, 0xed71, 0x2f99, 0xabfb, 0x6913, 0x6352, 0xa1ba, 0x77d0, 0xb538, 0xbf79, 0x7d91, 0x5ed4, 0x9c3c, 0x967d, 0x5495, 0x82ff, 0x4017, 0x4a56, 0x88be, 0x0feb, 0xcd03, 0xc742, 0x05aa, 0xd3c0, 0x1128, 0x1b69, 0xd981, 0xfac4, 0x382c, 0x326d, 0xf085, 0x26ef, 0xe407, 0xee46, 0x2cae, 0xa8cc, 0x6a24, 0x6065, 0xa28d, 0x74e7, 0xb60f, 0xbc4e, 0x7ea6, 0x5de3, 0x9f0b, 0x954a, 0x57a2, 0x81c8, 0x4320, 0x4961, 0x8b89, 0x0ab2, 0xc85a, 0xc21b, 0x00f3, 0xd699, 0x1471, 0x1e30, 0xdcd8, 0xff9d, 0x3d75, 0x3734, 0xf5dc, 0x23b6, 0xe15e, 0xeb1f, 0x29f7, 0xad95, 0x6f7d, 0x653c, 0xa7d4, 0x71be, 0xb356, 0xb917, 0x7bff, 0x58ba, 0x9a52, 0x9013, 0x52fb, 0x8491, 0x4679, 0x4c38, 0x8ed0, 0x0985, 0xcb6d, 0xc12c, 0x03c4, 0xd5ae, 0x1746, 0x1d07, 0xdfef, 0xfcaa, 0x3e42, 0x3403, 0xf6eb, 0x2081, 0xe269, 0xe828, 0x2ac0, 0xaea2, 0x6c4a, 0x660b, 0xa4e3, 0x7289, 0xb061, 0xba20, 0x78c8, 0x5b8d, 0x9965, 0x9324, 0x51cc, 0x87a6, 0x454e, 0x4f0f, 0x8de7, ], [ 0x0000, 0x2306, 0x460c, 0x650a, 0x8c18, 0xaf1e, 0xca14, 0xe912, 0x5549, 0x764f, 0x1345, 0x3043, 0xd951, 0xfa57, 0x9f5d, 0xbc5b, 0xaa92, 0x8994, 0xec9e, 0xcf98, 0x268a, 0x058c, 0x6086, 0x4380, 0xffdb, 0xdcdd, 0xb9d7, 0x9ad1, 0x73c3, 0x50c5, 0x35cf, 0x16c9, 0x185d, 0x3b5b, 0x5e51, 0x7d57, 0x9445, 0xb743, 0xd249, 0xf14f, 0x4d14, 0x6e12, 0x0b18, 0x281e, 0xc10c, 0xe20a, 0x8700, 0xa406, 0xb2cf, 0x91c9, 0xf4c3, 0xd7c5, 0x3ed7, 0x1dd1, 0x78db, 0x5bdd, 0xe786, 0xc480, 0xa18a, 0x828c, 0x6b9e, 0x4898, 0x2d92, 0x0e94, 0x30ba, 0x13bc, 0x76b6, 0x55b0, 0xbca2, 0x9fa4, 0xfaae, 0xd9a8, 0x65f3, 0x46f5, 0x23ff, 0x00f9, 0xe9eb, 0xcaed, 0xafe7, 0x8ce1, 0x9a28, 0xb92e, 0xdc24, 0xff22, 0x1630, 0x3536, 0x503c, 0x733a, 0xcf61, 0xec67, 0x896d, 0xaa6b, 0x4379, 0x607f, 0x0575, 0x2673, 0x28e7, 0x0be1, 0x6eeb, 0x4ded, 0xa4ff, 0x87f9, 0xe2f3, 0xc1f5, 0x7dae, 0x5ea8, 0x3ba2, 0x18a4, 0xf1b6, 0xd2b0, 0xb7ba, 0x94bc, 0x8275, 0xa173, 0xc479, 0xe77f, 0x0e6d, 0x2d6b, 0x4861, 0x6b67, 0xd73c, 0xf43a, 0x9130, 0xb236, 0x5b24, 0x7822, 0x1d28, 0x3e2e, 0x6174, 0x4272, 0x2778, 0x047e, 0xed6c, 0xce6a, 0xab60, 0x8866, 0x343d, 0x173b, 0x7231, 0x5137, 0xb825, 0x9b23, 0xfe29, 0xdd2f, 0xcbe6, 0xe8e0, 0x8dea, 0xaeec, 0x47fe, 0x64f8, 0x01f2, 0x22f4, 0x9eaf, 0xbda9, 0xd8a3, 0xfba5, 0x12b7, 0x31b1, 0x54bb, 0x77bd, 0x7929, 0x5a2f, 0x3f25, 0x1c23, 0xf531, 0xd637, 0xb33d, 0x903b, 0x2c60, 0x0f66, 0x6a6c, 0x496a, 0xa078, 0x837e, 0xe674, 0xc572, 0xd3bb, 0xf0bd, 0x95b7, 0xb6b1, 0x5fa3, 0x7ca5, 0x19af, 0x3aa9, 0x86f2, 0xa5f4, 0xc0fe, 0xe3f8, 0x0aea, 0x29ec, 0x4ce6, 0x6fe0, 0x51ce, 0x72c8, 0x17c2, 0x34c4, 0xddd6, 0xfed0, 0x9bda, 0xb8dc, 0x0487, 0x2781, 0x428b, 0x618d, 0x889f, 0xab99, 0xce93, 0xed95, 0xfb5c, 0xd85a, 0xbd50, 0x9e56, 0x7744, 0x5442, 0x3148, 0x124e, 0xae15, 0x8d13, 0xe819, 0xcb1f, 0x220d, 0x010b, 0x6401, 0x4707, 0x4993, 0x6a95, 0x0f9f, 0x2c99, 0xc58b, 0xe68d, 0x8387, 0xa081, 0x1cda, 0x3fdc, 0x5ad6, 0x79d0, 0x90c2, 0xb3c4, 0xd6ce, 0xf5c8, 0xe301, 0xc007, 0xa50d, 0x860b, 0x6f19, 0x4c1f, 0x2915, 0x0a13, 0xb648, 0x954e, 0xf044, 0xd342, 0x3a50, 0x1956, 0x7c5c, 0x5f5a, ], [ 0x0000, 0xb5e7, 0x26b7, 0x9350, 0x4d6e, 0xf889, 0x6bd9, 0xde3e, 0x9adc, 0x2f3b, 0xbc6b, 0x098c, 0xd7b2, 0x6255, 0xf105, 0x44e2, 0x78c1, 0xcd26, 0x5e76, 0xeb91, 0x35af, 0x8048, 0x1318, 0xa6ff, 0xe21d, 0x57fa, 0xc4aa, 0x714d, 0xaf73, 0x1a94, 0x89c4, 0x3c23, 0xf182, 0x4465, 0xd735, 0x62d2, 0xbcec, 0x090b, 0x9a5b, 0x2fbc, 0x6b5e, 0xdeb9, 0x4de9, 0xf80e, 0x2630, 0x93d7, 0x0087, 0xb560, 0x8943, 0x3ca4, 0xaff4, 0x1a13, 0xc42d, 0x71ca, 0xe29a, 0x577d, 0x139f, 0xa678, 0x3528, 0x80cf, 0x5ef1, 0xeb16, 0x7846, 0xcda1, 0xae7d, 0x1b9a, 0x88ca, 0x3d2d, 0xe313, 0x56f4, 0xc5a4, 0x7043, 0x34a1, 0x8146, 0x1216, 0xa7f1, 0x79cf, 0xcc28, 0x5f78, 0xea9f, 0xd6bc, 0x635b, 0xf00b, 0x45ec, 0x9bd2, 0x2e35, 0xbd65, 0x0882, 0x4c60, 0xf987, 0x6ad7, 0xdf30, 0x010e, 0xb4e9, 0x27b9, 0x925e, 0x5fff, 0xea18, 0x7948, 0xccaf, 0x1291, 0xa776, 0x3426, 0x81c1, 0xc523, 0x70c4, 0xe394, 0x5673, 0x884d, 0x3daa, 0xaefa, 0x1b1d, 0x273e, 0x92d9, 0x0189, 0xb46e, 0x6a50, 0xdfb7, 0x4ce7, 0xf900, 0xbde2, 0x0805, 0x9b55, 0x2eb2, 0xf08c, 0x456b, 0xd63b, 0x63dc, 0x1183, 0xa464, 0x3734, 0x82d3, 0x5ced, 0xe90a, 0x7a5a, 0xcfbd, 0x8b5f, 0x3eb8, 0xade8, 0x180f, 0xc631, 0x73d6, 0xe086, 0x5561, 0x6942, 0xdca5, 0x4ff5, 0xfa12, 0x242c, 0x91cb, 0x029b, 0xb77c, 0xf39e, 0x4679, 0xd529, 0x60ce, 0xbef0, 0x0b17, 0x9847, 0x2da0, 0xe001, 0x55e6, 0xc6b6, 0x7351, 0xad6f, 0x1888, 0x8bd8, 0x3e3f, 0x7add, 0xcf3a, 0x5c6a, 0xe98d, 0x37b3, 0x8254, 0x1104, 0xa4e3, 0x98c0, 0x2d27, 0xbe77, 0x0b90, 0xd5ae, 0x6049, 0xf319, 0x46fe, 0x021c, 0xb7fb, 0x24ab, 0x914c, 0x4f72, 0xfa95, 0x69c5, 0xdc22, 0xbffe, 0x0a19, 0x9949, 0x2cae, 0xf290, 0x4777, 0xd427, 0x61c0, 0x2522, 0x90c5, 0x0395, 0xb672, 0x684c, 0xddab, 0x4efb, 0xfb1c, 0xc73f, 0x72d8, 0xe188, 0x546f, 0x8a51, 0x3fb6, 0xace6, 0x1901, 0x5de3, 0xe804, 0x7b54, 0xceb3, 0x108d, 0xa56a, 0x363a, 0x83dd, 0x4e7c, 0xfb9b, 0x68cb, 0xdd2c, 0x0312, 0xb6f5, 0x25a5, 0x9042, 0xd4a0, 0x6147, 0xf217, 0x47f0, 0x99ce, 0x2c29, 0xbf79, 0x0a9e, 0x36bd, 0x835a, 0x100a, 0xa5ed, 0x7bd3, 0xce34, 0x5d64, 0xe883, 0xac61, 0x1986, 0x8ad6, 0x3f31, 0xe10f, 0x54e8, 0xc7b8, 0x725f, ], [ 0x0000, 0x5f62, 0xbec4, 0xe1a6, 0x30f1, 0x6f93, 0x8e35, 0xd157, 0x61e2, 0x3e80, 0xdf26, 0x8044, 0x5113, 0x0e71, 0xefd7, 0xb0b5, 0xc3c4, 0x9ca6, 0x7d00, 0x2262, 0xf335, 0xac57, 0x4df1, 0x1293, 0xa226, 0xfd44, 0x1ce2, 0x4380, 0x92d7, 0xcdb5, 0x2c13, 0x7371, 0xcaf1, 0x9593, 0x7435, 0x2b57, 0xfa00, 0xa562, 0x44c4, 0x1ba6, 0xab13, 0xf471, 0x15d7, 0x4ab5, 0x9be2, 0xc480, 0x2526, 0x7a44, 0x0935, 0x5657, 0xb7f1, 0xe893, 0x39c4, 0x66a6, 0x8700, 0xd862, 0x68d7, 0x37b5, 0xd613, 0x8971, 0x5826, 0x0744, 0xe6e2, 0xb980, 0xd89b, 0x87f9, 0x665f, 0x393d, 0xe86a, 0xb708, 0x56ae, 0x09cc, 0xb979, 0xe61b, 0x07bd, 0x58df, 0x8988, 0xd6ea, 0x374c, 0x682e, 0x1b5f, 0x443d, 0xa59b, 0xfaf9, 0x2bae, 0x74cc, 0x956a, 0xca08, 0x7abd, 0x25df, 0xc479, 0x9b1b, 0x4a4c, 0x152e, 0xf488, 0xabea, 0x126a, 0x4d08, 0xacae, 0xf3cc, 0x229b, 0x7df9, 0x9c5f, 0xc33d, 0x7388, 0x2cea, 0xcd4c, 0x922e, 0x4379, 0x1c1b, 0xfdbd, 0xa2df, 0xd1ae, 0x8ecc, 0x6f6a, 0x3008, 0xe15f, 0xbe3d, 0x5f9b, 0x00f9, 0xb04c, 0xef2e, 0x0e88, 0x51ea, 0x80bd, 0xdfdf, 0x3e79, 0x611b, 0xfc4f, 0xa32d, 0x428b, 0x1de9, 0xccbe, 0x93dc, 0x727a, 0x2d18, 0x9dad, 0xc2cf, 0x2369, 0x7c0b, 0xad5c, 0xf23e, 0x1398, 0x4cfa, 0x3f8b, 0x60e9, 0x814f, 0xde2d, 0x0f7a, 0x5018, 0xb1be, 0xeedc, 0x5e69, 0x010b, 0xe0ad, 0xbfcf, 0x6e98, 0x31fa, 0xd05c, 0x8f3e, 0x36be, 0x69dc, 0x887a, 0xd718, 0x064f, 0x592d, 0xb88b, 0xe7e9, 0x575c, 0x083e, 0xe998, 0xb6fa, 0x67ad, 0x38cf, 0xd969, 0x860b, 0xf57a, 0xaa18, 0x4bbe, 0x14dc, 0xc58b, 0x9ae9, 0x7b4f, 0x242d, 0x9498, 0xcbfa, 0x2a5c, 0x753e, 0xa469, 0xfb0b, 0x1aad, 0x45cf, 0x24d4, 0x7bb6, 0x9a10, 0xc572, 0x1425, 0x4b47, 0xaae1, 0xf583, 0x4536, 0x1a54, 0xfbf2, 0xa490, 0x75c7, 0x2aa5, 0xcb03, 0x9461, 0xe710, 0xb872, 0x59d4, 0x06b6, 0xd7e1, 0x8883, 0x6925, 0x3647, 0x86f2, 0xd990, 0x3836, 0x6754, 0xb603, 0xe961, 0x08c7, 0x57a5, 0xee25, 0xb147, 0x50e1, 0x0f83, 0xded4, 0x81b6, 0x6010, 0x3f72, 0x8fc7, 0xd0a5, 0x3103, 0x6e61, 0xbf36, 0xe054, 0x01f2, 0x5e90, 0x2de1, 0x7283, 0x9325, 0xcc47, 0x1d10, 0x4272, 0xa3d4, 0xfcb6, 0x4c03, 0x1361, 0xf2c7, 0xada5, 0x7cf2, 0x2390, 0xc236, 0x9d54, ], [ 0x0000, 0x1612, 0x2c24, 0x3a36, 0x5848, 0x4e5a, 0x746c, 0x627e, 0xb090, 0xa682, 0x9cb4, 0x8aa6, 0xe8d8, 0xfeca, 0xc4fc, 0xd2ee, 0x2c59, 0x3a4b, 0x007d, 0x166f, 0x7411, 0x6203, 0x5835, 0x4e27, 0x9cc9, 0x8adb, 0xb0ed, 0xa6ff, 0xc481, 0xd293, 0xe8a5, 0xfeb7, 0x58b2, 0x4ea0, 0x7496, 0x6284, 0x00fa, 0x16e8, 0x2cde, 0x3acc, 0xe822, 0xfe30, 0xc406, 0xd214, 0xb06a, 0xa678, 0x9c4e, 0x8a5c, 0x74eb, 0x62f9, 0x58cf, 0x4edd, 0x2ca3, 0x3ab1, 0x0087, 0x1695, 0xc47b, 0xd269, 0xe85f, 0xfe4d, 0x9c33, 0x8a21, 0xb017, 0xa605, 0xb164, 0xa776, 0x9d40, 0x8b52, 0xe92c, 0xff3e, 0xc508, 0xd31a, 0x01f4, 0x17e6, 0x2dd0, 0x3bc2, 0x59bc, 0x4fae, 0x7598, 0x638a, 0x9d3d, 0x8b2f, 0xb119, 0xa70b, 0xc575, 0xd367, 0xe951, 0xff43, 0x2dad, 0x3bbf, 0x0189, 0x179b, 0x75e5, 0x63f7, 0x59c1, 0x4fd3, 0xe9d6, 0xffc4, 0xc5f2, 0xd3e0, 0xb19e, 0xa78c, 0x9dba, 0x8ba8, 0x5946, 0x4f54, 0x7562, 0x6370, 0x010e, 0x171c, 0x2d2a, 0x3b38, 0xc58f, 0xd39d, 0xe9ab, 0xffb9, 0x9dc7, 0x8bd5, 0xb1e3, 0xa7f1, 0x751f, 0x630d, 0x593b, 0x4f29, 0x2d57, 0x3b45, 0x0173, 0x1761, 0x2fb1, 0x39a3, 0x0395, 0x1587, 0x77f9, 0x61eb, 0x5bdd, 0x4dcf, 0x9f21, 0x8933, 0xb305, 0xa517, 0xc769, 0xd17b, 0xeb4d, 0xfd5f, 0x03e8, 0x15fa, 0x2fcc, 0x39de, 0x5ba0, 0x4db2, 0x7784, 0x6196, 0xb378, 0xa56a, 0x9f5c, 0x894e, 0xeb30, 0xfd22, 0xc714, 0xd106, 0x7703, 0x6111, 0x5b27, 0x4d35, 0x2f4b, 0x3959, 0x036f, 0x157d, 0xc793, 0xd181, 0xebb7, 0xfda5, 0x9fdb, 0x89c9, 0xb3ff, 0xa5ed, 0x5b5a, 0x4d48, 0x777e, 0x616c, 0x0312, 0x1500, 0x2f36, 0x3924, 0xebca, 0xfdd8, 0xc7ee, 0xd1fc, 0xb382, 0xa590, 0x9fa6, 0x89b4, 0x9ed5, 0x88c7, 0xb2f1, 0xa4e3, 0xc69d, 0xd08f, 0xeab9, 0xfcab, 0x2e45, 0x3857, 0x0261, 0x1473, 0x760d, 0x601f, 0x5a29, 0x4c3b, 0xb28c, 0xa49e, 0x9ea8, 0x88ba, 0xeac4, 0xfcd6, 0xc6e0, 0xd0f2, 0x021c, 0x140e, 0x2e38, 0x382a, 0x5a54, 0x4c46, 0x7670, 0x6062, 0xc667, 0xd075, 0xea43, 0xfc51, 0x9e2f, 0x883d, 0xb20b, 0xa419, 0x76f7, 0x60e5, 0x5ad3, 0x4cc1, 0x2ebf, 0x38ad, 0x029b, 0x1489, 0xea3e, 0xfc2c, 0xc61a, 0xd008, 0xb276, 0xa464, 0x9e52, 0x8840, 0x5aae, 0x4cbc, 0x768a, 0x6098, 0x02e6, 0x14f4, 0x2ec2, 0x38d0, ], [ 0x0000, 0xdec1, 0xf0fb, 0x2e3a, 0xac8f, 0x724e, 0x5c74, 0x82b5, 0x1467, 0xcaa6, 0xe49c, 0x3a5d, 0xb8e8, 0x6629, 0x4813, 0x96d2, 0x28ce, 0xf60f, 0xd835, 0x06f4, 0x8441, 0x5a80, 0x74ba, 0xaa7b, 0x3ca9, 0xe268, 0xcc52, 0x1293, 0x9026, 0x4ee7, 0x60dd, 0xbe1c, 0x519c, 0x8f5d, 0xa167, 0x7fa6, 0xfd13, 0x23d2, 0x0de8, 0xd329, 0x45fb, 0x9b3a, 0xb500, 0x6bc1, 0xe974, 0x37b5, 0x198f, 0xc74e, 0x7952, 0xa793, 0x89a9, 0x5768, 0xd5dd, 0x0b1c, 0x2526, 0xfbe7, 0x6d35, 0xb3f4, 0x9dce, 0x430f, 0xc1ba, 0x1f7b, 0x3141, 0xef80, 0xa338, 0x7df9, 0x53c3, 0x8d02, 0x0fb7, 0xd176, 0xff4c, 0x218d, 0xb75f, 0x699e, 0x47a4, 0x9965, 0x1bd0, 0xc511, 0xeb2b, 0x35ea, 0x8bf6, 0x5537, 0x7b0d, 0xa5cc, 0x2779, 0xf9b8, 0xd782, 0x0943, 0x9f91, 0x4150, 0x6f6a, 0xb1ab, 0x331e, 0xeddf, 0xc3e5, 0x1d24, 0xf2a4, 0x2c65, 0x025f, 0xdc9e, 0x5e2b, 0x80ea, 0xaed0, 0x7011, 0xe6c3, 0x3802, 0x1638, 0xc8f9, 0x4a4c, 0x948d, 0xbab7, 0x6476, 0xda6a, 0x04ab, 0x2a91, 0xf450, 0x76e5, 0xa824, 0x861e, 0x58df, 0xce0d, 0x10cc, 0x3ef6, 0xe037, 0x6282, 0xbc43, 0x9279, 0x4cb8, 0x0b09, 0xd5c8, 0xfbf2, 0x2533, 0xa786, 0x7947, 0x577d, 0x89bc, 0x1f6e, 0xc1af, 0xef95, 0x3154, 0xb3e1, 0x6d20, 0x431a, 0x9ddb, 0x23c7, 0xfd06, 0xd33c, 0x0dfd, 0x8f48, 0x5189, 0x7fb3, 0xa172, 0x37a0, 0xe961, 0xc75b, 0x199a, 0x9b2f, 0x45ee, 0x6bd4, 0xb515, 0x5a95, 0x8454, 0xaa6e, 0x74af, 0xf61a, 0x28db, 0x06e1, 0xd820, 0x4ef2, 0x9033, 0xbe09, 0x60c8, 0xe27d, 0x3cbc, 0x1286, 0xcc47, 0x725b, 0xac9a, 0x82a0, 0x5c61, 0xded4, 0x0015, 0x2e2f, 0xf0ee, 0x663c, 0xb8fd, 0x96c7, 0x4806, 0xcab3, 0x1472, 0x3a48, 0xe489, 0xa831, 0x76f0, 0x58ca, 0x860b, 0x04be, 0xda7f, 0xf445, 0x2a84, 0xbc56, 0x6297, 0x4cad, 0x926c, 0x10d9, 0xce18, 0xe022, 0x3ee3, 0x80ff, 0x5e3e, 0x7004, 0xaec5, 0x2c70, 0xf2b1, 0xdc8b, 0x024a, 0x9498, 0x4a59, 0x6463, 0xbaa2, 0x3817, 0xe6d6, 0xc8ec, 0x162d, 0xf9ad, 0x276c, 0x0956, 0xd797, 0x5522, 0x8be3, 0xa5d9, 0x7b18, 0xedca, 0x330b, 0x1d31, 0xc3f0, 0x4145, 0x9f84, 0xb1be, 0x6f7f, 0xd163, 0x0fa2, 0x2198, 0xff59, 0x7dec, 0xa32d, 0x8d17, 0x53d6, 0xc504, 0x1bc5, 0x35ff, 0xeb3e, 0x698b, 0xb74a, 0x9970, 0x47b1, ], [ 0x0000, 0xc362, 0xcbbd, 0x08df, 0xda03, 0x1961, 0x11be, 0xd2dc, 0xf97f, 0x3a1d, 0x32c2, 0xf1a0, 0x237c, 0xe01e, 0xe8c1, 0x2ba3, 0xbf87, 0x7ce5, 0x743a, 0xb758, 0x6584, 0xa6e6, 0xae39, 0x6d5b, 0x46f8, 0x859a, 0x8d45, 0x4e27, 0x9cfb, 0x5f99, 0x5746, 0x9424, 0x3277, 0xf115, 0xf9ca, 0x3aa8, 0xe874, 0x2b16, 0x23c9, 0xe0ab, 0xcb08, 0x086a, 0x00b5, 0xc3d7, 0x110b, 0xd269, 0xdab6, 0x19d4, 0x8df0, 0x4e92, 0x464d, 0x852f, 0x57f3, 0x9491, 0x9c4e, 0x5f2c, 0x748f, 0xb7ed, 0xbf32, 0x7c50, 0xae8c, 0x6dee, 0x6531, 0xa653, 0x64ee, 0xa78c, 0xaf53, 0x6c31, 0xbeed, 0x7d8f, 0x7550, 0xb632, 0x9d91, 0x5ef3, 0x562c, 0x954e, 0x4792, 0x84f0, 0x8c2f, 0x4f4d, 0xdb69, 0x180b, 0x10d4, 0xd3b6, 0x016a, 0xc208, 0xcad7, 0x09b5, 0x2216, 0xe174, 0xe9ab, 0x2ac9, 0xf815, 0x3b77, 0x33a8, 0xf0ca, 0x5699, 0x95fb, 0x9d24, 0x5e46, 0x8c9a, 0x4ff8, 0x4727, 0x8445, 0xafe6, 0x6c84, 0x645b, 0xa739, 0x75e5, 0xb687, 0xbe58, 0x7d3a, 0xe91e, 0x2a7c, 0x22a3, 0xe1c1, 0x331d, 0xf07f, 0xf8a0, 0x3bc2, 0x1061, 0xd303, 0xdbdc, 0x18be, 0xca62, 0x0900, 0x01df, 0xc2bd, 0xc9dc, 0x0abe, 0x0261, 0xc103, 0x13df, 0xd0bd, 0xd862, 0x1b00, 0x30a3, 0xf3c1, 0xfb1e, 0x387c, 0xeaa0, 0x29c2, 0x211d, 0xe27f, 0x765b, 0xb539, 0xbde6, 0x7e84, 0xac58, 0x6f3a, 0x67e5, 0xa487, 0x8f24, 0x4c46, 0x4499, 0x87fb, 0x5527, 0x9645, 0x9e9a, 0x5df8, 0xfbab, 0x38c9, 0x3016, 0xf374, 0x21a8, 0xe2ca, 0xea15, 0x2977, 0x02d4, 0xc1b6, 0xc969, 0x0a0b, 0xd8d7, 0x1bb5, 0x136a, 0xd008, 0x442c, 0x874e, 0x8f91, 0x4cf3, 0x9e2f, 0x5d4d, 0x5592, 0x96f0, 0xbd53, 0x7e31, 0x76ee, 0xb58c, 0x6750, 0xa432, 0xaced, 0x6f8f, 0xad32, 0x6e50, 0x668f, 0xa5ed, 0x7731, 0xb453, 0xbc8c, 0x7fee, 0x544d, 0x972f, 0x9ff0, 0x5c92, 0x8e4e, 0x4d2c, 0x45f3, 0x8691, 0x12b5, 0xd1d7, 0xd908, 0x1a6a, 0xc8b6, 0x0bd4, 0x030b, 0xc069, 0xebca, 0x28a8, 0x2077, 0xe315, 0x31c9, 0xf2ab, 0xfa74, 0x3916, 0x9f45, 0x5c27, 0x54f8, 0x979a, 0x4546, 0x8624, 0x8efb, 0x4d99, 0x663a, 0xa558, 0xad87, 0x6ee5, 0xbc39, 0x7f5b, 0x7784, 0xb4e6, 0x20c2, 0xe3a0, 0xeb7f, 0x281d, 0xfac1, 0x39a3, 0x317c, 0xf21e, 0xd9bd, 0x1adf, 0x1200, 0xd162, 0x03be, 0xc0dc, 0xc803, 0x0b61, ], [ 0x0000, 0x168e, 0x2d1c, 0x3b92, 0x5a38, 0x4cb6, 0x7724, 0x61aa, 0xb470, 0xa2fe, 0x996c, 0x8fe2, 0xee48, 0xf8c6, 0xc354, 0xd5da, 0x2599, 0x3317, 0x0885, 0x1e0b, 0x7fa1, 0x692f, 0x52bd, 0x4433, 0x91e9, 0x8767, 0xbcf5, 0xaa7b, 0xcbd1, 0xdd5f, 0xe6cd, 0xf043, 0x4b32, 0x5dbc, 0x662e, 0x70a0, 0x110a, 0x0784, 0x3c16, 0x2a98, 0xff42, 0xe9cc, 0xd25e, 0xc4d0, 0xa57a, 0xb3f4, 0x8866, 0x9ee8, 0x6eab, 0x7825, 0x43b7, 0x5539, 0x3493, 0x221d, 0x198f, 0x0f01, 0xdadb, 0xcc55, 0xf7c7, 0xe149, 0x80e3, 0x966d, 0xadff, 0xbb71, 0x9664, 0x80ea, 0xbb78, 0xadf6, 0xcc5c, 0xdad2, 0xe140, 0xf7ce, 0x2214, 0x349a, 0x0f08, 0x1986, 0x782c, 0x6ea2, 0x5530, 0x43be, 0xb3fd, 0xa573, 0x9ee1, 0x886f, 0xe9c5, 0xff4b, 0xc4d9, 0xd257, 0x078d, 0x1103, 0x2a91, 0x3c1f, 0x5db5, 0x4b3b, 0x70a9, 0x6627, 0xdd56, 0xcbd8, 0xf04a, 0xe6c4, 0x876e, 0x91e0, 0xaa72, 0xbcfc, 0x6926, 0x7fa8, 0x443a, 0x52b4, 0x331e, 0x2590, 0x1e02, 0x088c, 0xf8cf, 0xee41, 0xd5d3, 0xc35d, 0xa2f7, 0xb479, 0x8feb, 0x9965, 0x4cbf, 0x5a31, 0x61a3, 0x772d, 0x1687, 0x0009, 0x3b9b, 0x2d15, 0x61b1, 0x773f, 0x4cad, 0x5a23, 0x3b89, 0x2d07, 0x1695, 0x001b, 0xd5c1, 0xc34f, 0xf8dd, 0xee53, 0x8ff9, 0x9977, 0xa2e5, 0xb46b, 0x4428, 0x52a6, 0x6934, 0x7fba, 0x1e10, 0x089e, 0x330c, 0x2582, 0xf058, 0xe6d6, 0xdd44, 0xcbca, 0xaa60, 0xbcee, 0x877c, 0x91f2, 0x2a83, 0x3c0d, 0x079f, 0x1111, 0x70bb, 0x6635, 0x5da7, 0x4b29, 0x9ef3, 0x887d, 0xb3ef, 0xa561, 0xc4cb, 0xd245, 0xe9d7, 0xff59, 0x0f1a, 0x1994, 0x2206, 0x3488, 0x5522, 0x43ac, 0x783e, 0x6eb0, 0xbb6a, 0xade4, 0x9676, 0x80f8, 0xe152, 0xf7dc, 0xcc4e, 0xdac0, 0xf7d5, 0xe15b, 0xdac9, 0xcc47, 0xaded, 0xbb63, 0x80f1, 0x967f, 0x43a5, 0x552b, 0x6eb9, 0x7837, 0x199d, 0x0f13, 0x3481, 0x220f, 0xd24c, 0xc4c2, 0xff50, 0xe9de, 0x8874, 0x9efa, 0xa568, 0xb3e6, 0x663c, 0x70b2, 0x4b20, 0x5dae, 0x3c04, 0x2a8a, 0x1118, 0x0796, 0xbce7, 0xaa69, 0x91fb, 0x8775, 0xe6df, 0xf051, 0xcbc3, 0xdd4d, 0x0897, 0x1e19, 0x258b, 0x3305, 0x52af, 0x4421, 0x7fb3, 0x693d, 0x997e, 0x8ff0, 0xb462, 0xa2ec, 0xc346, 0xd5c8, 0xee5a, 0xf8d4, 0x2d0e, 0x3b80, 0x0012, 0x169c, 0x7736, 0x61b8, 0x5a2a, 0x4ca4, ], [ 0x0000, 0xece7, 0x94b7, 0x7850, 0x6417, 0x88f0, 0xf0a0, 0x1c47, 0xc82e, 0x24c9, 0x5c99, 0xb07e, 0xac39, 0x40de, 0x388e, 0xd469, 0xdd25, 0x31c2, 0x4992, 0xa575, 0xb932, 0x55d5, 0x2d85, 0xc162, 0x150b, 0xf9ec, 0x81bc, 0x6d5b, 0x711c, 0x9dfb, 0xe5ab, 0x094c, 0xf733, 0x1bd4, 0x6384, 0x8f63, 0x9324, 0x7fc3, 0x0793, 0xeb74, 0x3f1d, 0xd3fa, 0xabaa, 0x474d, 0x5b0a, 0xb7ed, 0xcfbd, 0x235a, 0x2a16, 0xc6f1, 0xbea1, 0x5246, 0x4e01, 0xa2e6, 0xdab6, 0x3651, 0xe238, 0x0edf, 0x768f, 0x9a68, 0x862f, 0x6ac8, 0x1298, 0xfe7f, 0xa31f, 0x4ff8, 0x37a8, 0xdb4f, 0xc708, 0x2bef, 0x53bf, 0xbf58, 0x6b31, 0x87d6, 0xff86, 0x1361, 0x0f26, 0xe3c1, 0x9b91, 0x7776, 0x7e3a, 0x92dd, 0xea8d, 0x066a, 0x1a2d, 0xf6ca, 0x8e9a, 0x627d, 0xb614, 0x5af3, 0x22a3, 0xce44, 0xd203, 0x3ee4, 0x46b4, 0xaa53, 0x542c, 0xb8cb, 0xc09b, 0x2c7c, 0x303b, 0xdcdc, 0xa48c, 0x486b, 0x9c02, 0x70e5, 0x08b5, 0xe452, 0xf815, 0x14f2, 0x6ca2, 0x8045, 0x8909, 0x65ee, 0x1dbe, 0xf159, 0xed1e, 0x01f9, 0x79a9, 0x954e, 0x4127, 0xadc0, 0xd590, 0x3977, 0x2530, 0xc9d7, 0xb187, 0x5d60, 0x0b47, 0xe7a0, 0x9ff0, 0x7317, 0x6f50, 0x83b7, 0xfbe7, 0x1700, 0xc369, 0x2f8e, 0x57de, 0xbb39, 0xa77e, 0x4b99, 0x33c9, 0xdf2e, 0xd662, 0x3a85, 0x42d5, 0xae32, 0xb275, 0x5e92, 0x26c2, 0xca25, 0x1e4c, 0xf2ab, 0x8afb, 0x661c, 0x7a5b, 0x96bc, 0xeeec, 0x020b, 0xfc74, 0x1093, 0x68c3, 0x8424, 0x9863, 0x7484, 0x0cd4, 0xe033, 0x345a, 0xd8bd, 0xa0ed, 0x4c0a, 0x504d, 0xbcaa, 0xc4fa, 0x281d, 0x2151, 0xcdb6, 0xb5e6, 0x5901, 0x4546, 0xa9a1, 0xd1f1, 0x3d16, 0xe97f, 0x0598, 0x7dc8, 0x912f, 0x8d68, 0x618f, 0x19df, 0xf538, 0xa858, 0x44bf, 0x3cef, 0xd008, 0xcc4f, 0x20a8, 0x58f8, 0xb41f, 0x6076, 0x8c91, 0xf4c1, 0x1826, 0x0461, 0xe886, 0x90d6, 0x7c31, 0x757d, 0x999a, 0xe1ca, 0x0d2d, 0x116a, 0xfd8d, 0x85dd, 0x693a, 0xbd53, 0x51b4, 0x29e4, 0xc503, 0xd944, 0x35a3, 0x4df3, 0xa114, 0x5f6b, 0xb38c, 0xcbdc, 0x273b, 0x3b7c, 0xd79b, 0xafcb, 0x432c, 0x9745, 0x7ba2, 0x03f2, 0xef15, 0xf352, 0x1fb5, 0x67e5, 0x8b02, 0x824e, 0x6ea9, 0x16f9, 0xfa1e, 0xe659, 0x0abe, 0x72ee, 0x9e09, 0x4a60, 0xa687, 0xded7, 0x3230, 0x2e77, 0xc290, 0xbac0, 0x5627, ], [ 0x0000, 0x5f3b, 0xbe76, 0xe14d, 0x3195, 0x6eae, 0x8fe3, 0xd0d8, 0x632a, 0x3c11, 0xdd5c, 0x8267, 0x52bf, 0x0d84, 0xecc9, 0xb3f2, 0xc654, 0x996f, 0x7822, 0x2719, 0xf7c1, 0xa8fa, 0x49b7, 0x168c, 0xa57e, 0xfa45, 0x1b08, 0x4433, 0x94eb, 0xcbd0, 0x2a9d, 0x75a6, 0xc1d1, 0x9eea, 0x7fa7, 0x209c, 0xf044, 0xaf7f, 0x4e32, 0x1109, 0xa2fb, 0xfdc0, 0x1c8d, 0x43b6, 0x936e, 0xcc55, 0x2d18, 0x7223, 0x0785, 0x58be, 0xb9f3, 0xe6c8, 0x3610, 0x692b, 0x8866, 0xd75d, 0x64af, 0x3b94, 0xdad9, 0x85e2, 0x553a, 0x0a01, 0xeb4c, 0xb477, 0xcedb, 0x91e0, 0x70ad, 0x2f96, 0xff4e, 0xa075, 0x4138, 0x1e03, 0xadf1, 0xf2ca, 0x1387, 0x4cbc, 0x9c64, 0xc35f, 0x2212, 0x7d29, 0x088f, 0x57b4, 0xb6f9, 0xe9c2, 0x391a, 0x6621, 0x876c, 0xd857, 0x6ba5, 0x349e, 0xd5d3, 0x8ae8, 0x5a30, 0x050b, 0xe446, 0xbb7d, 0x0f0a, 0x5031, 0xb17c, 0xee47, 0x3e9f, 0x61a4, 0x80e9, 0xdfd2, 0x6c20, 0x331b, 0xd256, 0x8d6d, 0x5db5, 0x028e, 0xe3c3, 0xbcf8, 0xc95e, 0x9665, 0x7728, 0x2813, 0xf8cb, 0xa7f0, 0x46bd, 0x1986, 0xaa74, 0xf54f, 0x1402, 0x4b39, 0x9be1, 0xc4da, 0x2597, 0x7aac, 0xd0cf, 0x8ff4, 0x6eb9, 0x3182, 0xe15a, 0xbe61, 0x5f2c, 0x0017, 0xb3e5, 0xecde, 0x0d93, 0x52a8, 0x8270, 0xdd4b, 0x3c06, 0x633d, 0x169b, 0x49a0, 0xa8ed, 0xf7d6, 0x270e, 0x7835, 0x9978, 0xc643, 0x75b1, 0x2a8a, 0xcbc7, 0x94fc, 0x4424, 0x1b1f, 0xfa52, 0xa569, 0x111e, 0x4e25, 0xaf68, 0xf053, 0x208b, 0x7fb0, 0x9efd, 0xc1c6, 0x7234, 0x2d0f, 0xcc42, 0x9379, 0x43a1, 0x1c9a, 0xfdd7, 0xa2ec, 0xd74a, 0x8871, 0x693c, 0x3607, 0xe6df, 0xb9e4, 0x58a9, 0x0792, 0xb460, 0xeb5b, 0x0a16, 0x552d, 0x85f5, 0xdace, 0x3b83, 0x64b8, 0x1e14, 0x412f, 0xa062, 0xff59, 0x2f81, 0x70ba, 0x91f7, 0xcecc, 0x7d3e, 0x2205, 0xc348, 0x9c73, 0x4cab, 0x1390, 0xf2dd, 0xade6, 0xd840, 0x877b, 0x6636, 0x390d, 0xe9d5, 0xb6ee, 0x57a3, 0x0898, 0xbb6a, 0xe451, 0x051c, 0x5a27, 0x8aff, 0xd5c4, 0x3489, 0x6bb2, 0xdfc5, 0x80fe, 0x61b3, 0x3e88, 0xee50, 0xb16b, 0x5026, 0x0f1d, 0xbcef, 0xe3d4, 0x0299, 0x5da2, 0x8d7a, 0xd241, 0x330c, 0x6c37, 0x1991, 0x46aa, 0xa7e7, 0xf8dc, 0x2804, 0x773f, 0x9672, 0xc949, 0x7abb, 0x2580, 0xc4cd, 0x9bf6, 0x4b2e, 0x1415, 0xf558, 0xaa63, ], [ 0x0000, 0x3ef0, 0x7de0, 0x4310, 0xfbc0, 0xc530, 0x8620, 0xb8d0, 0xbaf9, 0x8409, 0xc719, 0xf9e9, 0x4139, 0x7fc9, 0x3cd9, 0x0229, 0x388b, 0x067b, 0x456b, 0x7b9b, 0xc34b, 0xfdbb, 0xbeab, 0x805b, 0x8272, 0xbc82, 0xff92, 0xc162, 0x79b2, 0x4742, 0x0452, 0x3aa2, 0x7116, 0x4fe6, 0x0cf6, 0x3206, 0x8ad6, 0xb426, 0xf736, 0xc9c6, 0xcbef, 0xf51f, 0xb60f, 0x88ff, 0x302f, 0x0edf, 0x4dcf, 0x733f, 0x499d, 0x776d, 0x347d, 0x0a8d, 0xb25d, 0x8cad, 0xcfbd, 0xf14d, 0xf364, 0xcd94, 0x8e84, 0xb074, 0x08a4, 0x3654, 0x7544, 0x4bb4, 0xe22c, 0xdcdc, 0x9fcc, 0xa13c, 0x19ec, 0x271c, 0x640c, 0x5afc, 0x58d5, 0x6625, 0x2535, 0x1bc5, 0xa315, 0x9de5, 0xdef5, 0xe005, 0xdaa7, 0xe457, 0xa747, 0x99b7, 0x2167, 0x1f97, 0x5c87, 0x6277, 0x605e, 0x5eae, 0x1dbe, 0x234e, 0x9b9e, 0xa56e, 0xe67e, 0xd88e, 0x933a, 0xadca, 0xeeda, 0xd02a, 0x68fa, 0x560a, 0x151a, 0x2bea, 0x29c3, 0x1733, 0x5423, 0x6ad3, 0xd203, 0xecf3, 0xafe3, 0x9113, 0xabb1, 0x9541, 0xd651, 0xe8a1, 0x5071, 0x6e81, 0x2d91, 0x1361, 0x1148, 0x2fb8, 0x6ca8, 0x5258, 0xea88, 0xd478, 0x9768, 0xa998, 0x8921, 0xb7d1, 0xf4c1, 0xca31, 0x72e1, 0x4c11, 0x0f01, 0x31f1, 0x33d8, 0x0d28, 0x4e38, 0x70c8, 0xc818, 0xf6e8, 0xb5f8, 0x8b08, 0xb1aa, 0x8f5a, 0xcc4a, 0xf2ba, 0x4a6a, 0x749a, 0x378a, 0x097a, 0x0b53, 0x35a3, 0x76b3, 0x4843, 0xf093, 0xce63, 0x8d73, 0xb383, 0xf837, 0xc6c7, 0x85d7, 0xbb27, 0x03f7, 0x3d07, 0x7e17, 0x40e7, 0x42ce, 0x7c3e, 0x3f2e, 0x01de, 0xb90e, 0x87fe, 0xc4ee, 0xfa1e, 0xc0bc, 0xfe4c, 0xbd5c, 0x83ac, 0x3b7c, 0x058c, 0x469c, 0x786c, 0x7a45, 0x44b5, 0x07a5, 0x3955, 0x8185, 0xbf75, 0xfc65, 0xc295, 0x6b0d, 0x55fd, 0x16ed, 0x281d, 0x90cd, 0xae3d, 0xed2d, 0xd3dd, 0xd1f4, 0xef04, 0xac14, 0x92e4, 0x2a34, 0x14c4, 0x57d4, 0x6924, 0x5386, 0x6d76, 0x2e66, 0x1096, 0xa846, 0x96b6, 0xd5a6, 0xeb56, 0xe97f, 0xd78f, 0x949f, 0xaa6f, 0x12bf, 0x2c4f, 0x6f5f, 0x51af, 0x1a1b, 0x24eb, 0x67fb, 0x590b, 0xe1db, 0xdf2b, 0x9c3b, 0xa2cb, 0xa0e2, 0x9e12, 0xdd02, 0xe3f2, 0x5b22, 0x65d2, 0x26c2, 0x1832, 0x2290, 0x1c60, 0x5f70, 0x6180, 0xd950, 0xe7a0, 0xa4b0, 0x9a40, 0x9869, 0xa699, 0xe589, 0xdb79, 0x63a9, 0x5d59, 0x1e49, 0x20b9, ], [ 0x0000, 0x6e18, 0xdc30, 0xb228, 0xf519, 0x9b01, 0x2929, 0x4731, 0xa74b, 0xc953, 0x7b7b, 0x1563, 0x5252, 0x3c4a, 0x8e62, 0xe07a, 0x03ef, 0x6df7, 0xdfdf, 0xb1c7, 0xf6f6, 0x98ee, 0x2ac6, 0x44de, 0xa4a4, 0xcabc, 0x7894, 0x168c, 0x51bd, 0x3fa5, 0x8d8d, 0xe395, 0x07de, 0x69c6, 0xdbee, 0xb5f6, 0xf2c7, 0x9cdf, 0x2ef7, 0x40ef, 0xa095, 0xce8d, 0x7ca5, 0x12bd, 0x558c, 0x3b94, 0x89bc, 0xe7a4, 0x0431, 0x6a29, 0xd801, 0xb619, 0xf128, 0x9f30, 0x2d18, 0x4300, 0xa37a, 0xcd62, 0x7f4a, 0x1152, 0x5663, 0x387b, 0x8a53, 0xe44b, 0x0fbc, 0x61a4, 0xd38c, 0xbd94, 0xfaa5, 0x94bd, 0x2695, 0x488d, 0xa8f7, 0xc6ef, 0x74c7, 0x1adf, 0x5dee, 0x33f6, 0x81de, 0xefc6, 0x0c53, 0x624b, 0xd063, 0xbe7b, 0xf94a, 0x9752, 0x257a, 0x4b62, 0xab18, 0xc500, 0x7728, 0x1930, 0x5e01, 0x3019, 0x8231, 0xec29, 0x0862, 0x667a, 0xd452, 0xba4a, 0xfd7b, 0x9363, 0x214b, 0x4f53, 0xaf29, 0xc131, 0x7319, 0x1d01, 0x5a30, 0x3428, 0x8600, 0xe818, 0x0b8d, 0x6595, 0xd7bd, 0xb9a5, 0xfe94, 0x908c, 0x22a4, 0x4cbc, 0xacc6, 0xc2de, 0x70f6, 0x1eee, 0x59df, 0x37c7, 0x85ef, 0xebf7, 0x1f78, 0x7160, 0xc348, 0xad50, 0xea61, 0x8479, 0x3651, 0x5849, 0xb833, 0xd62b, 0x6403, 0x0a1b, 0x4d2a, 0x2332, 0x911a, 0xff02, 0x1c97, 0x728f, 0xc0a7, 0xaebf, 0xe98e, 0x8796, 0x35be, 0x5ba6, 0xbbdc, 0xd5c4, 0x67ec, 0x09f4, 0x4ec5, 0x20dd, 0x92f5, 0xfced, 0x18a6, 0x76be, 0xc496, 0xaa8e, 0xedbf, 0x83a7, 0x318f, 0x5f97, 0xbfed, 0xd1f5, 0x63dd, 0x0dc5, 0x4af4, 0x24ec, 0x96c4, 0xf8dc, 0x1b49, 0x7551, 0xc779, 0xa961, 0xee50, 0x8048, 0x3260, 0x5c78, 0xbc02, 0xd21a, 0x6032, 0x0e2a, 0x491b, 0x2703, 0x952b, 0xfb33, 0x10c4, 0x7edc, 0xccf4, 0xa2ec, 0xe5dd, 0x8bc5, 0x39ed, 0x57f5, 0xb78f, 0xd997, 0x6bbf, 0x05a7, 0x4296, 0x2c8e, 0x9ea6, 0xf0be, 0x132b, 0x7d33, 0xcf1b, 0xa103, 0xe632, 0x882a, 0x3a02, 0x541a, 0xb460, 0xda78, 0x6850, 0x0648, 0x4179, 0x2f61, 0x9d49, 0xf351, 0x171a, 0x7902, 0xcb2a, 0xa532, 0xe203, 0x8c1b, 0x3e33, 0x502b, 0xb051, 0xde49, 0x6c61, 0x0279, 0x4548, 0x2b50, 0x9978, 0xf760, 0x14f5, 0x7aed, 0xc8c5, 0xa6dd, 0xe1ec, 0x8ff4, 0x3ddc, 0x53c4, 0xb3be, 0xdda6, 0x6f8e, 0x0196, 0x46a7, 0x28bf, 0x9a97, 0xf48f, ], [ 0x0000, 0x4d8c, 0x9b18, 0xd694, 0x7b49, 0x36c5, 0xe051, 0xaddd, 0xf692, 0xbb1e, 0x6d8a, 0x2006, 0x8ddb, 0xc057, 0x16c3, 0x5b4f, 0xa05d, 0xedd1, 0x3b45, 0x76c9, 0xdb14, 0x9698, 0x400c, 0x0d80, 0x56cf, 0x1b43, 0xcdd7, 0x805b, 0x2d86, 0x600a, 0xb69e, 0xfb12, 0x0dc3, 0x404f, 0x96db, 0xdb57, 0x768a, 0x3b06, 0xed92, 0xa01e, 0xfb51, 0xb6dd, 0x6049, 0x2dc5, 0x8018, 0xcd94, 0x1b00, 0x568c, 0xad9e, 0xe012, 0x3686, 0x7b0a, 0xd6d7, 0x9b5b, 0x4dcf, 0x0043, 0x5b0c, 0x1680, 0xc014, 0x8d98, 0x2045, 0x6dc9, 0xbb5d, 0xf6d1, 0x1b86, 0x560a, 0x809e, 0xcd12, 0x60cf, 0x2d43, 0xfbd7, 0xb65b, 0xed14, 0xa098, 0x760c, 0x3b80, 0x965d, 0xdbd1, 0x0d45, 0x40c9, 0xbbdb, 0xf657, 0x20c3, 0x6d4f, 0xc092, 0x8d1e, 0x5b8a, 0x1606, 0x4d49, 0x00c5, 0xd651, 0x9bdd, 0x3600, 0x7b8c, 0xad18, 0xe094, 0x1645, 0x5bc9, 0x8d5d, 0xc0d1, 0x6d0c, 0x2080, 0xf614, 0xbb98, 0xe0d7, 0xad5b, 0x7bcf, 0x3643, 0x9b9e, 0xd612, 0x0086, 0x4d0a, 0xb618, 0xfb94, 0x2d00, 0x608c, 0xcd51, 0x80dd, 0x5649, 0x1bc5, 0x408a, 0x0d06, 0xdb92, 0x961e, 0x3bc3, 0x764f, 0xa0db, 0xed57, 0x370c, 0x7a80, 0xac14, 0xe198, 0x4c45, 0x01c9, 0xd75d, 0x9ad1, 0xc19e, 0x8c12, 0x5a86, 0x170a, 0xbad7, 0xf75b, 0x21cf, 0x6c43, 0x9751, 0xdadd, 0x0c49, 0x41c5, 0xec18, 0xa194, 0x7700, 0x3a8c, 0x61c3, 0x2c4f, 0xfadb, 0xb757, 0x1a8a, 0x5706, 0x8192, 0xcc1e, 0x3acf, 0x7743, 0xa1d7, 0xec5b, 0x4186, 0x0c0a, 0xda9e, 0x9712, 0xcc5d, 0x81d1, 0x5745, 0x1ac9, 0xb714, 0xfa98, 0x2c0c, 0x6180, 0x9a92, 0xd71e, 0x018a, 0x4c06, 0xe1db, 0xac57, 0x7ac3, 0x374f, 0x6c00, 0x218c, 0xf718, 0xba94, 0x1749, 0x5ac5, 0x8c51, 0xc1dd, 0x2c8a, 0x6106, 0xb792, 0xfa1e, 0x57c3, 0x1a4f, 0xccdb, 0x8157, 0xda18, 0x9794, 0x4100, 0x0c8c, 0xa151, 0xecdd, 0x3a49, 0x77c5, 0x8cd7, 0xc15b, 0x17cf, 0x5a43, 0xf79e, 0xba12, 0x6c86, 0x210a, 0x7a45, 0x37c9, 0xe15d, 0xacd1, 0x010c, 0x4c80, 0x9a14, 0xd798, 0x2149, 0x6cc5, 0xba51, 0xf7dd, 0x5a00, 0x178c, 0xc118, 0x8c94, 0xd7db, 0x9a57, 0x4cc3, 0x014f, 0xac92, 0xe11e, 0x378a, 0x7a06, 0x8114, 0xcc98, 0x1a0c, 0x5780, 0xfa5d, 0xb7d1, 0x6145, 0x2cc9, 0x7786, 0x3a0a, 0xec9e, 0xa112, 0x0ccf, 0x4143, 0x97d7, 0xda5b, ], ]; pub static CRC16_EN_13757_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x3d65, 0x7aca, 0x47af, 0xf594, 0xc8f1, 0x8f5e, 0xb23b, 0xd64d, 0xeb28, 0xac87, 0x91e2, 0x23d9, 0x1ebc, 0x5913, 0x6476, 0x91ff, 0xac9a, 0xeb35, 0xd650, 0x646b, 0x590e, 0x1ea1, 0x23c4, 0x47b2, 0x7ad7, 0x3d78, 0x001d, 0xb226, 0x8f43, 0xc8ec, 0xf589, 0x1e9b, 0x23fe, 0x6451, 0x5934, 0xeb0f, 0xd66a, 0x91c5, 0xaca0, 0xc8d6, 0xf5b3, 0xb21c, 0x8f79, 0x3d42, 0x0027, 0x4788, 0x7aed, 0x8f64, 0xb201, 0xf5ae, 0xc8cb, 0x7af0, 0x4795, 0x003a, 0x3d5f, 0x5929, 0x644c, 0x23e3, 0x1e86, 0xacbd, 0x91d8, 0xd677, 0xeb12, 0x3d36, 0x0053, 0x47fc, 0x7a99, 0xc8a2, 0xf5c7, 0xb268, 0x8f0d, 0xeb7b, 0xd61e, 0x91b1, 0xacd4, 0x1eef, 0x238a, 0x6425, 0x5940, 0xacc9, 0x91ac, 0xd603, 0xeb66, 0x595d, 0x6438, 0x2397, 0x1ef2, 0x7a84, 0x47e1, 0x004e, 0x3d2b, 0x8f10, 0xb275, 0xf5da, 0xc8bf, 0x23ad, 0x1ec8, 0x5967, 0x6402, 0xd639, 0xeb5c, 0xacf3, 0x9196, 0xf5e0, 0xc885, 0x8f2a, 0xb24f, 0x0074, 0x3d11, 0x7abe, 0x47db, 0xb252, 0x8f37, 0xc898, 0xf5fd, 0x47c6, 0x7aa3, 0x3d0c, 0x0069, 0x641f, 0x597a, 0x1ed5, 0x23b0, 0x918b, 0xacee, 0xeb41, 0xd624, 0x7a6c, 0x4709, 0x00a6, 0x3dc3, 0x8ff8, 0xb29d, 0xf532, 0xc857, 0xac21, 0x9144, 0xd6eb, 0xeb8e, 0x59b5, 0x64d0, 0x237f, 0x1e1a, 0xeb93, 0xd6f6, 0x9159, 0xac3c, 0x1e07, 0x2362, 0x64cd, 0x59a8, 0x3dde, 0x00bb, 0x4714, 0x7a71, 0xc84a, 0xf52f, 0xb280, 0x8fe5, 0x64f7, 0x5992, 0x1e3d, 0x2358, 0x9163, 0xac06, 0xeba9, 0xd6cc, 0xb2ba, 0x8fdf, 0xc870, 0xf515, 0x472e, 0x7a4b, 0x3de4, 0x0081, 0xf508, 0xc86d, 0x8fc2, 0xb2a7, 0x009c, 0x3df9, 0x7a56, 0x4733, 0x2345, 0x1e20, 0x598f, 0x64ea, 0xd6d1, 0xebb4, 0xac1b, 0x917e, 0x475a, 0x7a3f, 0x3d90, 0x00f5, 0xb2ce, 0x8fab, 0xc804, 0xf561, 0x9117, 0xac72, 0xebdd, 0xd6b8, 0x6483, 0x59e6, 0x1e49, 0x232c, 0xd6a5, 0xebc0, 0xac6f, 0x910a, 0x2331, 0x1e54, 0x59fb, 0x649e, 0x00e8, 0x3d8d, 0x7a22, 0x4747, 0xf57c, 0xc819, 0x8fb6, 0xb2d3, 0x59c1, 0x64a4, 0x230b, 0x1e6e, 0xac55, 0x9130, 0xd69f, 0xebfa, 0x8f8c, 0xb2e9, 0xf546, 0xc823, 0x7a18, 0x477d, 0x00d2, 0x3db7, 0xc83e, 0xf55b, 0xb2f4, 0x8f91, 0x3daa, 0x00cf, 0x4760, 0x7a05, 0x1e73, 0x2316, 0x64b9, 0x59dc, 0xebe7, 0xd682, 0x912d, 0xac48, ], [ 0x0000, 0xf4d8, 0xd4d5, 0x200d, 0x94cf, 0x6017, 0x401a, 0xb4c2, 0x14fb, 0xe023, 0xc02e, 0x34f6, 0x8034, 0x74ec, 0x54e1, 0xa039, 0x29f6, 0xdd2e, 0xfd23, 0x09fb, 0xbd39, 0x49e1, 0x69ec, 0x9d34, 0x3d0d, 0xc9d5, 0xe9d8, 0x1d00, 0xa9c2, 0x5d1a, 0x7d17, 0x89cf, 0x53ec, 0xa734, 0x8739, 0x73e1, 0xc723, 0x33fb, 0x13f6, 0xe72e, 0x4717, 0xb3cf, 0x93c2, 0x671a, 0xd3d8, 0x2700, 0x070d, 0xf3d5, 0x7a1a, 0x8ec2, 0xaecf, 0x5a17, 0xeed5, 0x1a0d, 0x3a00, 0xced8, 0x6ee1, 0x9a39, 0xba34, 0x4eec, 0xfa2e, 0x0ef6, 0x2efb, 0xda23, 0xa7d8, 0x5300, 0x730d, 0x87d5, 0x3317, 0xc7cf, 0xe7c2, 0x131a, 0xb323, 0x47fb, 0x67f6, 0x932e, 0x27ec, 0xd334, 0xf339, 0x07e1, 0x8e2e, 0x7af6, 0x5afb, 0xae23, 0x1ae1, 0xee39, 0xce34, 0x3aec, 0x9ad5, 0x6e0d, 0x4e00, 0xbad8, 0x0e1a, 0xfac2, 0xdacf, 0x2e17, 0xf434, 0x00ec, 0x20e1, 0xd439, 0x60fb, 0x9423, 0xb42e, 0x40f6, 0xe0cf, 0x1417, 0x341a, 0xc0c2, 0x7400, 0x80d8, 0xa0d5, 0x540d, 0xddc2, 0x291a, 0x0917, 0xfdcf, 0x490d, 0xbdd5, 0x9dd8, 0x6900, 0xc939, 0x3de1, 0x1dec, 0xe934, 0x5df6, 0xa92e, 0x8923, 0x7dfb, 0x72d5, 0x860d, 0xa600, 0x52d8, 0xe61a, 0x12c2, 0x32cf, 0xc617, 0x662e, 0x92f6, 0xb2fb, 0x4623, 0xf2e1, 0x0639, 0x2634, 0xd2ec, 0x5b23, 0xaffb, 0x8ff6, 0x7b2e, 0xcfec, 0x3b34, 0x1b39, 0xefe1, 0x4fd8, 0xbb00, 0x9b0d, 0x6fd5, 0xdb17, 0x2fcf, 0x0fc2, 0xfb1a, 0x2139, 0xd5e1, 0xf5ec, 0x0134, 0xb5f6, 0x412e, 0x6123, 0x95fb, 0x35c2, 0xc11a, 0xe117, 0x15cf, 0xa10d, 0x55d5, 0x75d8, 0x8100, 0x08cf, 0xfc17, 0xdc1a, 0x28c2, 0x9c00, 0x68d8, 0x48d5, 0xbc0d, 0x1c34, 0xe8ec, 0xc8e1, 0x3c39, 0x88fb, 0x7c23, 0x5c2e, 0xa8f6, 0xd50d, 0x21d5, 0x01d8, 0xf500, 0x41c2, 0xb51a, 0x9517, 0x61cf, 0xc1f6, 0x352e, 0x1523, 0xe1fb, 0x5539, 0xa1e1, 0x81ec, 0x7534, 0xfcfb, 0x0823, 0x282e, 0xdcf6, 0x6834, 0x9cec, 0xbce1, 0x4839, 0xe800, 0x1cd8, 0x3cd5, 0xc80d, 0x7ccf, 0x8817, 0xa81a, 0x5cc2, 0x86e1, 0x7239, 0x5234, 0xa6ec, 0x122e, 0xe6f6, 0xc6fb, 0x3223, 0x921a, 0x66c2, 0x46cf, 0xb217, 0x06d5, 0xf20d, 0xd200, 0x26d8, 0xaf17, 0x5bcf, 0x7bc2, 0x8f1a, 0x3bd8, 0xcf00, 0xef0d, 0x1bd5, 0xbbec, 0x4f34, 0x6f39, 0x9be1, 0x2f23, 0xdbfb, 0xfbf6, 0x0f2e, ], [ 0x0000, 0xe5aa, 0xf631, 0x139b, 0xd107, 0x34ad, 0x2736, 0xc29c, 0x9f6b, 0x7ac1, 0x695a, 0x8cf0, 0x4e6c, 0xabc6, 0xb85d, 0x5df7, 0x03b3, 0xe619, 0xf582, 0x1028, 0xd2b4, 0x371e, 0x2485, 0xc12f, 0x9cd8, 0x7972, 0x6ae9, 0x8f43, 0x4ddf, 0xa875, 0xbbee, 0x5e44, 0x0766, 0xe2cc, 0xf157, 0x14fd, 0xd661, 0x33cb, 0x2050, 0xc5fa, 0x980d, 0x7da7, 0x6e3c, 0x8b96, 0x490a, 0xaca0, 0xbf3b, 0x5a91, 0x04d5, 0xe17f, 0xf2e4, 0x174e, 0xd5d2, 0x3078, 0x23e3, 0xc649, 0x9bbe, 0x7e14, 0x6d8f, 0x8825, 0x4ab9, 0xaf13, 0xbc88, 0x5922, 0x0ecc, 0xeb66, 0xf8fd, 0x1d57, 0xdfcb, 0x3a61, 0x29fa, 0xcc50, 0x91a7, 0x740d, 0x6796, 0x823c, 0x40a0, 0xa50a, 0xb691, 0x533b, 0x0d7f, 0xe8d5, 0xfb4e, 0x1ee4, 0xdc78, 0x39d2, 0x2a49, 0xcfe3, 0x9214, 0x77be, 0x6425, 0x818f, 0x4313, 0xa6b9, 0xb522, 0x5088, 0x09aa, 0xec00, 0xff9b, 0x1a31, 0xd8ad, 0x3d07, 0x2e9c, 0xcb36, 0x96c1, 0x736b, 0x60f0, 0x855a, 0x47c6, 0xa26c, 0xb1f7, 0x545d, 0x0a19, 0xefb3, 0xfc28, 0x1982, 0xdb1e, 0x3eb4, 0x2d2f, 0xc885, 0x9572, 0x70d8, 0x6343, 0x86e9, 0x4475, 0xa1df, 0xb244, 0x57ee, 0x1d98, 0xf832, 0xeba9, 0x0e03, 0xcc9f, 0x2935, 0x3aae, 0xdf04, 0x82f3, 0x6759, 0x74c2, 0x9168, 0x53f4, 0xb65e, 0xa5c5, 0x406f, 0x1e2b, 0xfb81, 0xe81a, 0x0db0, 0xcf2c, 0x2a86, 0x391d, 0xdcb7, 0x8140, 0x64ea, 0x7771, 0x92db, 0x5047, 0xb5ed, 0xa676, 0x43dc, 0x1afe, 0xff54, 0xeccf, 0x0965, 0xcbf9, 0x2e53, 0x3dc8, 0xd862, 0x8595, 0x603f, 0x73a4, 0x960e, 0x5492, 0xb138, 0xa2a3, 0x4709, 0x194d, 0xfce7, 0xef7c, 0x0ad6, 0xc84a, 0x2de0, 0x3e7b, 0xdbd1, 0x8626, 0x638c, 0x7017, 0x95bd, 0x5721, 0xb28b, 0xa110, 0x44ba, 0x1354, 0xf6fe, 0xe565, 0x00cf, 0xc253, 0x27f9, 0x3462, 0xd1c8, 0x8c3f, 0x6995, 0x7a0e, 0x9fa4, 0x5d38, 0xb892, 0xab09, 0x4ea3, 0x10e7, 0xf54d, 0xe6d6, 0x037c, 0xc1e0, 0x244a, 0x37d1, 0xd27b, 0x8f8c, 0x6a26, 0x79bd, 0x9c17, 0x5e8b, 0xbb21, 0xa8ba, 0x4d10, 0x1432, 0xf198, 0xe203, 0x07a9, 0xc535, 0x209f, 0x3304, 0xd6ae, 0x8b59, 0x6ef3, 0x7d68, 0x98c2, 0x5a5e, 0xbff4, 0xac6f, 0x49c5, 0x1781, 0xf22b, 0xe1b0, 0x041a, 0xc686, 0x232c, 0x30b7, 0xd51d, 0x88ea, 0x6d40, 0x7edb, 0x9b71, 0x59ed, 0xbc47, 0xafdc, 0x4a76, ], [ 0x0000, 0x3b30, 0x7660, 0x4d50, 0xecc0, 0xd7f0, 0x9aa0, 0xa190, 0xe4e5, 0xdfd5, 0x9285, 0xa9b5, 0x0825, 0x3315, 0x7e45, 0x4575, 0xf4af, 0xcf9f, 0x82cf, 0xb9ff, 0x186f, 0x235f, 0x6e0f, 0x553f, 0x104a, 0x2b7a, 0x662a, 0x5d1a, 0xfc8a, 0xc7ba, 0x8aea, 0xb1da, 0xd43b, 0xef0b, 0xa25b, 0x996b, 0x38fb, 0x03cb, 0x4e9b, 0x75ab, 0x30de, 0x0bee, 0x46be, 0x7d8e, 0xdc1e, 0xe72e, 0xaa7e, 0x914e, 0x2094, 0x1ba4, 0x56f4, 0x6dc4, 0xcc54, 0xf764, 0xba34, 0x8104, 0xc471, 0xff41, 0xb211, 0x8921, 0x28b1, 0x1381, 0x5ed1, 0x65e1, 0x9513, 0xae23, 0xe373, 0xd843, 0x79d3, 0x42e3, 0x0fb3, 0x3483, 0x71f6, 0x4ac6, 0x0796, 0x3ca6, 0x9d36, 0xa606, 0xeb56, 0xd066, 0x61bc, 0x5a8c, 0x17dc, 0x2cec, 0x8d7c, 0xb64c, 0xfb1c, 0xc02c, 0x8559, 0xbe69, 0xf339, 0xc809, 0x6999, 0x52a9, 0x1ff9, 0x24c9, 0x4128, 0x7a18, 0x3748, 0x0c78, 0xade8, 0x96d8, 0xdb88, 0xe0b8, 0xa5cd, 0x9efd, 0xd3ad, 0xe89d, 0x490d, 0x723d, 0x3f6d, 0x045d, 0xb587, 0x8eb7, 0xc3e7, 0xf8d7, 0x5947, 0x6277, 0x2f27, 0x1417, 0x5162, 0x6a52, 0x2702, 0x1c32, 0xbda2, 0x8692, 0xcbc2, 0xf0f2, 0x1743, 0x2c73, 0x6123, 0x5a13, 0xfb83, 0xc0b3, 0x8de3, 0xb6d3, 0xf3a6, 0xc896, 0x85c6, 0xbef6, 0x1f66, 0x2456, 0x6906, 0x5236, 0xe3ec, 0xd8dc, 0x958c, 0xaebc, 0x0f2c, 0x341c, 0x794c, 0x427c, 0x0709, 0x3c39, 0x7169, 0x4a59, 0xebc9, 0xd0f9, 0x9da9, 0xa699, 0xc378, 0xf848, 0xb518, 0x8e28, 0x2fb8, 0x1488, 0x59d8, 0x62e8, 0x279d, 0x1cad, 0x51fd, 0x6acd, 0xcb5d, 0xf06d, 0xbd3d, 0x860d, 0x37d7, 0x0ce7, 0x41b7, 0x7a87, 0xdb17, 0xe027, 0xad77, 0x9647, 0xd332, 0xe802, 0xa552, 0x9e62, 0x3ff2, 0x04c2, 0x4992, 0x72a2, 0x8250, 0xb960, 0xf430, 0xcf00, 0x6e90, 0x55a0, 0x18f0, 0x23c0, 0x66b5, 0x5d85, 0x10d5, 0x2be5, 0x8a75, 0xb145, 0xfc15, 0xc725, 0x76ff, 0x4dcf, 0x009f, 0x3baf, 0x9a3f, 0xa10f, 0xec5f, 0xd76f, 0x921a, 0xa92a, 0xe47a, 0xdf4a, 0x7eda, 0x45ea, 0x08ba, 0x338a, 0x566b, 0x6d5b, 0x200b, 0x1b3b, 0xbaab, 0x819b, 0xcccb, 0xf7fb, 0xb28e, 0x89be, 0xc4ee, 0xffde, 0x5e4e, 0x657e, 0x282e, 0x131e, 0xa2c4, 0x99f4, 0xd4a4, 0xef94, 0x4e04, 0x7534, 0x3864, 0x0354, 0x4621, 0x7d11, 0x3041, 0x0b71, 0xaae1, 0x91d1, 0xdc81, 0xe7b1, ], [ 0x0000, 0x2e86, 0x5d0c, 0x738a, 0xba18, 0x949e, 0xe714, 0xc992, 0x4955, 0x67d3, 0x1459, 0x3adf, 0xf34d, 0xddcb, 0xae41, 0x80c7, 0x92aa, 0xbc2c, 0xcfa6, 0xe120, 0x28b2, 0x0634, 0x75be, 0x5b38, 0xdbff, 0xf579, 0x86f3, 0xa875, 0x61e7, 0x4f61, 0x3ceb, 0x126d, 0x1831, 0x36b7, 0x453d, 0x6bbb, 0xa229, 0x8caf, 0xff25, 0xd1a3, 0x5164, 0x7fe2, 0x0c68, 0x22ee, 0xeb7c, 0xc5fa, 0xb670, 0x98f6, 0x8a9b, 0xa41d, 0xd797, 0xf911, 0x3083, 0x1e05, 0x6d8f, 0x4309, 0xc3ce, 0xed48, 0x9ec2, 0xb044, 0x79d6, 0x5750, 0x24da, 0x0a5c, 0x3062, 0x1ee4, 0x6d6e, 0x43e8, 0x8a7a, 0xa4fc, 0xd776, 0xf9f0, 0x7937, 0x57b1, 0x243b, 0x0abd, 0xc32f, 0xeda9, 0x9e23, 0xb0a5, 0xa2c8, 0x8c4e, 0xffc4, 0xd142, 0x18d0, 0x3656, 0x45dc, 0x6b5a, 0xeb9d, 0xc51b, 0xb691, 0x9817, 0x5185, 0x7f03, 0x0c89, 0x220f, 0x2853, 0x06d5, 0x755f, 0x5bd9, 0x924b, 0xbccd, 0xcf47, 0xe1c1, 0x6106, 0x4f80, 0x3c0a, 0x128c, 0xdb1e, 0xf598, 0x8612, 0xa894, 0xbaf9, 0x947f, 0xe7f5, 0xc973, 0x00e1, 0x2e67, 0x5ded, 0x736b, 0xf3ac, 0xdd2a, 0xaea0, 0x8026, 0x49b4, 0x6732, 0x14b8, 0x3a3e, 0x60c4, 0x4e42, 0x3dc8, 0x134e, 0xdadc, 0xf45a, 0x87d0, 0xa956, 0x2991, 0x0717, 0x749d, 0x5a1b, 0x9389, 0xbd0f, 0xce85, 0xe003, 0xf26e, 0xdce8, 0xaf62, 0x81e4, 0x4876, 0x66f0, 0x157a, 0x3bfc, 0xbb3b, 0x95bd, 0xe637, 0xc8b1, 0x0123, 0x2fa5, 0x5c2f, 0x72a9, 0x78f5, 0x5673, 0x25f9, 0x0b7f, 0xc2ed, 0xec6b, 0x9fe1, 0xb167, 0x31a0, 0x1f26, 0x6cac, 0x422a, 0x8bb8, 0xa53e, 0xd6b4, 0xf832, 0xea5f, 0xc4d9, 0xb753, 0x99d5, 0x5047, 0x7ec1, 0x0d4b, 0x23cd, 0xa30a, 0x8d8c, 0xfe06, 0xd080, 0x1912, 0x3794, 0x441e, 0x6a98, 0x50a6, 0x7e20, 0x0daa, 0x232c, 0xeabe, 0xc438, 0xb7b2, 0x9934, 0x19f3, 0x3775, 0x44ff, 0x6a79, 0xa3eb, 0x8d6d, 0xfee7, 0xd061, 0xc20c, 0xec8a, 0x9f00, 0xb186, 0x7814, 0x5692, 0x2518, 0x0b9e, 0x8b59, 0xa5df, 0xd655, 0xf8d3, 0x3141, 0x1fc7, 0x6c4d, 0x42cb, 0x4897, 0x6611, 0x159b, 0x3b1d, 0xf28f, 0xdc09, 0xaf83, 0x8105, 0x01c2, 0x2f44, 0x5cce, 0x7248, 0xbbda, 0x955c, 0xe6d6, 0xc850, 0xda3d, 0xf4bb, 0x8731, 0xa9b7, 0x6025, 0x4ea3, 0x3d29, 0x13af, 0x9368, 0xbdee, 0xce64, 0xe0e2, 0x2970, 0x07f6, 0x747c, 0x5afa, ], [ 0x0000, 0xc188, 0xbe75, 0x7ffd, 0x418f, 0x8007, 0xfffa, 0x3e72, 0x831e, 0x4296, 0x3d6b, 0xfce3, 0xc291, 0x0319, 0x7ce4, 0xbd6c, 0x3b59, 0xfad1, 0x852c, 0x44a4, 0x7ad6, 0xbb5e, 0xc4a3, 0x052b, 0xb847, 0x79cf, 0x0632, 0xc7ba, 0xf9c8, 0x3840, 0x47bd, 0x8635, 0x76b2, 0xb73a, 0xc8c7, 0x094f, 0x373d, 0xf6b5, 0x8948, 0x48c0, 0xf5ac, 0x3424, 0x4bd9, 0x8a51, 0xb423, 0x75ab, 0x0a56, 0xcbde, 0x4deb, 0x8c63, 0xf39e, 0x3216, 0x0c64, 0xcdec, 0xb211, 0x7399, 0xcef5, 0x0f7d, 0x7080, 0xb108, 0x8f7a, 0x4ef2, 0x310f, 0xf087, 0xed64, 0x2cec, 0x5311, 0x9299, 0xaceb, 0x6d63, 0x129e, 0xd316, 0x6e7a, 0xaff2, 0xd00f, 0x1187, 0x2ff5, 0xee7d, 0x9180, 0x5008, 0xd63d, 0x17b5, 0x6848, 0xa9c0, 0x97b2, 0x563a, 0x29c7, 0xe84f, 0x5523, 0x94ab, 0xeb56, 0x2ade, 0x14ac, 0xd524, 0xaad9, 0x6b51, 0x9bd6, 0x5a5e, 0x25a3, 0xe42b, 0xda59, 0x1bd1, 0x642c, 0xa5a4, 0x18c8, 0xd940, 0xa6bd, 0x6735, 0x5947, 0x98cf, 0xe732, 0x26ba, 0xa08f, 0x6107, 0x1efa, 0xdf72, 0xe100, 0x2088, 0x5f75, 0x9efd, 0x2391, 0xe219, 0x9de4, 0x5c6c, 0x621e, 0xa396, 0xdc6b, 0x1de3, 0xe7ad, 0x2625, 0x59d8, 0x9850, 0xa622, 0x67aa, 0x1857, 0xd9df, 0x64b3, 0xa53b, 0xdac6, 0x1b4e, 0x253c, 0xe4b4, 0x9b49, 0x5ac1, 0xdcf4, 0x1d7c, 0x6281, 0xa309, 0x9d7b, 0x5cf3, 0x230e, 0xe286, 0x5fea, 0x9e62, 0xe19f, 0x2017, 0x1e65, 0xdfed, 0xa010, 0x6198, 0x911f, 0x5097, 0x2f6a, 0xeee2, 0xd090, 0x1118, 0x6ee5, 0xaf6d, 0x1201, 0xd389, 0xac74, 0x6dfc, 0x538e, 0x9206, 0xedfb, 0x2c73, 0xaa46, 0x6bce, 0x1433, 0xd5bb, 0xebc9, 0x2a41, 0x55bc, 0x9434, 0x2958, 0xe8d0, 0x972d, 0x56a5, 0x68d7, 0xa95f, 0xd6a2, 0x172a, 0x0ac9, 0xcb41, 0xb4bc, 0x7534, 0x4b46, 0x8ace, 0xf533, 0x34bb, 0x89d7, 0x485f, 0x37a2, 0xf62a, 0xc858, 0x09d0, 0x762d, 0xb7a5, 0x3190, 0xf018, 0x8fe5, 0x4e6d, 0x701f, 0xb197, 0xce6a, 0x0fe2, 0xb28e, 0x7306, 0x0cfb, 0xcd73, 0xf301, 0x3289, 0x4d74, 0x8cfc, 0x7c7b, 0xbdf3, 0xc20e, 0x0386, 0x3df4, 0xfc7c, 0x8381, 0x4209, 0xff65, 0x3eed, 0x4110, 0x8098, 0xbeea, 0x7f62, 0x009f, 0xc117, 0x4722, 0x86aa, 0xf957, 0x38df, 0x06ad, 0xc725, 0xb8d8, 0x7950, 0xc43c, 0x05b4, 0x7a49, 0xbbc1, 0x85b3, 0x443b, 0x3bc6, 0xfa4e, ], [ 0x0000, 0xf23f, 0xd91b, 0x2b24, 0x8f53, 0x7d6c, 0x5648, 0xa477, 0x23c3, 0xd1fc, 0xfad8, 0x08e7, 0xac90, 0x5eaf, 0x758b, 0x87b4, 0x4786, 0xb5b9, 0x9e9d, 0x6ca2, 0xc8d5, 0x3aea, 0x11ce, 0xe3f1, 0x6445, 0x967a, 0xbd5e, 0x4f61, 0xeb16, 0x1929, 0x320d, 0xc032, 0x8f0c, 0x7d33, 0x5617, 0xa428, 0x005f, 0xf260, 0xd944, 0x2b7b, 0xaccf, 0x5ef0, 0x75d4, 0x87eb, 0x239c, 0xd1a3, 0xfa87, 0x08b8, 0xc88a, 0x3ab5, 0x1191, 0xe3ae, 0x47d9, 0xb5e6, 0x9ec2, 0x6cfd, 0xeb49, 0x1976, 0x3252, 0xc06d, 0x641a, 0x9625, 0xbd01, 0x4f3e, 0x237d, 0xd142, 0xfa66, 0x0859, 0xac2e, 0x5e11, 0x7535, 0x870a, 0x00be, 0xf281, 0xd9a5, 0x2b9a, 0x8fed, 0x7dd2, 0x56f6, 0xa4c9, 0x64fb, 0x96c4, 0xbde0, 0x4fdf, 0xeba8, 0x1997, 0x32b3, 0xc08c, 0x4738, 0xb507, 0x9e23, 0x6c1c, 0xc86b, 0x3a54, 0x1170, 0xe34f, 0xac71, 0x5e4e, 0x756a, 0x8755, 0x2322, 0xd11d, 0xfa39, 0x0806, 0x8fb2, 0x7d8d, 0x56a9, 0xa496, 0x00e1, 0xf2de, 0xd9fa, 0x2bc5, 0xebf7, 0x19c8, 0x32ec, 0xc0d3, 0x64a4, 0x969b, 0xbdbf, 0x4f80, 0xc834, 0x3a0b, 0x112f, 0xe310, 0x4767, 0xb558, 0x9e7c, 0x6c43, 0x46fa, 0xb4c5, 0x9fe1, 0x6dde, 0xc9a9, 0x3b96, 0x10b2, 0xe28d, 0x6539, 0x9706, 0xbc22, 0x4e1d, 0xea6a, 0x1855, 0x3371, 0xc14e, 0x017c, 0xf343, 0xd867, 0x2a58, 0x8e2f, 0x7c10, 0x5734, 0xa50b, 0x22bf, 0xd080, 0xfba4, 0x099b, 0xadec, 0x5fd3, 0x74f7, 0x86c8, 0xc9f6, 0x3bc9, 0x10ed, 0xe2d2, 0x46a5, 0xb49a, 0x9fbe, 0x6d81, 0xea35, 0x180a, 0x332e, 0xc111, 0x6566, 0x9759, 0xbc7d, 0x4e42, 0x8e70, 0x7c4f, 0x576b, 0xa554, 0x0123, 0xf31c, 0xd838, 0x2a07, 0xadb3, 0x5f8c, 0x74a8, 0x8697, 0x22e0, 0xd0df, 0xfbfb, 0x09c4, 0x6587, 0x97b8, 0xbc9c, 0x4ea3, 0xead4, 0x18eb, 0x33cf, 0xc1f0, 0x4644, 0xb47b, 0x9f5f, 0x6d60, 0xc917, 0x3b28, 0x100c, 0xe233, 0x2201, 0xd03e, 0xfb1a, 0x0925, 0xad52, 0x5f6d, 0x7449, 0x8676, 0x01c2, 0xf3fd, 0xd8d9, 0x2ae6, 0x8e91, 0x7cae, 0x578a, 0xa5b5, 0xea8b, 0x18b4, 0x3390, 0xc1af, 0x65d8, 0x97e7, 0xbcc3, 0x4efc, 0xc948, 0x3b77, 0x1053, 0xe26c, 0x461b, 0xb424, 0x9f00, 0x6d3f, 0xad0d, 0x5f32, 0x7416, 0x8629, 0x225e, 0xd061, 0xfb45, 0x097a, 0x8ece, 0x7cf1, 0x57d5, 0xa5ea, 0x019d, 0xf3a2, 0xd886, 0x2ab9, ], [ 0x0000, 0x8df4, 0x268d, 0xab79, 0x4d1a, 0xc0ee, 0x6b97, 0xe663, 0x9a34, 0x17c0, 0xbcb9, 0x314d, 0xd72e, 0x5ada, 0xf1a3, 0x7c57, 0x090d, 0x84f9, 0x2f80, 0xa274, 0x4417, 0xc9e3, 0x629a, 0xef6e, 0x9339, 0x1ecd, 0xb5b4, 0x3840, 0xde23, 0x53d7, 0xf8ae, 0x755a, 0x121a, 0x9fee, 0x3497, 0xb963, 0x5f00, 0xd2f4, 0x798d, 0xf479, 0x882e, 0x05da, 0xaea3, 0x2357, 0xc534, 0x48c0, 0xe3b9, 0x6e4d, 0x1b17, 0x96e3, 0x3d9a, 0xb06e, 0x560d, 0xdbf9, 0x7080, 0xfd74, 0x8123, 0x0cd7, 0xa7ae, 0x2a5a, 0xcc39, 0x41cd, 0xeab4, 0x6740, 0x2434, 0xa9c0, 0x02b9, 0x8f4d, 0x692e, 0xe4da, 0x4fa3, 0xc257, 0xbe00, 0x33f4, 0x988d, 0x1579, 0xf31a, 0x7eee, 0xd597, 0x5863, 0x2d39, 0xa0cd, 0x0bb4, 0x8640, 0x6023, 0xedd7, 0x46ae, 0xcb5a, 0xb70d, 0x3af9, 0x9180, 0x1c74, 0xfa17, 0x77e3, 0xdc9a, 0x516e, 0x362e, 0xbbda, 0x10a3, 0x9d57, 0x7b34, 0xf6c0, 0x5db9, 0xd04d, 0xac1a, 0x21ee, 0x8a97, 0x0763, 0xe100, 0x6cf4, 0xc78d, 0x4a79, 0x3f23, 0xb2d7, 0x19ae, 0x945a, 0x7239, 0xffcd, 0x54b4, 0xd940, 0xa517, 0x28e3, 0x839a, 0x0e6e, 0xe80d, 0x65f9, 0xce80, 0x4374, 0x4868, 0xc59c, 0x6ee5, 0xe311, 0x0572, 0x8886, 0x23ff, 0xae0b, 0xd25c, 0x5fa8, 0xf4d1, 0x7925, 0x9f46, 0x12b2, 0xb9cb, 0x343f, 0x4165, 0xcc91, 0x67e8, 0xea1c, 0x0c7f, 0x818b, 0x2af2, 0xa706, 0xdb51, 0x56a5, 0xfddc, 0x7028, 0x964b, 0x1bbf, 0xb0c6, 0x3d32, 0x5a72, 0xd786, 0x7cff, 0xf10b, 0x1768, 0x9a9c, 0x31e5, 0xbc11, 0xc046, 0x4db2, 0xe6cb, 0x6b3f, 0x8d5c, 0x00a8, 0xabd1, 0x2625, 0x537f, 0xde8b, 0x75f2, 0xf806, 0x1e65, 0x9391, 0x38e8, 0xb51c, 0xc94b, 0x44bf, 0xefc6, 0x6232, 0x8451, 0x09a5, 0xa2dc, 0x2f28, 0x6c5c, 0xe1a8, 0x4ad1, 0xc725, 0x2146, 0xacb2, 0x07cb, 0x8a3f, 0xf668, 0x7b9c, 0xd0e5, 0x5d11, 0xbb72, 0x3686, 0x9dff, 0x100b, 0x6551, 0xe8a5, 0x43dc, 0xce28, 0x284b, 0xa5bf, 0x0ec6, 0x8332, 0xff65, 0x7291, 0xd9e8, 0x541c, 0xb27f, 0x3f8b, 0x94f2, 0x1906, 0x7e46, 0xf3b2, 0x58cb, 0xd53f, 0x335c, 0xbea8, 0x15d1, 0x9825, 0xe472, 0x6986, 0xc2ff, 0x4f0b, 0xa968, 0x249c, 0x8fe5, 0x0211, 0x774b, 0xfabf, 0x51c6, 0xdc32, 0x3a51, 0xb7a5, 0x1cdc, 0x9128, 0xed7f, 0x608b, 0xcbf2, 0x4606, 0xa065, 0x2d91, 0x86e8, 0x0b1c, ], [ 0x0000, 0x90d0, 0x1cc5, 0x8c15, 0x398a, 0xa95a, 0x254f, 0xb59f, 0x7314, 0xe3c4, 0x6fd1, 0xff01, 0x4a9e, 0xda4e, 0x565b, 0xc68b, 0xe628, 0x76f8, 0xfaed, 0x6a3d, 0xdfa2, 0x4f72, 0xc367, 0x53b7, 0x953c, 0x05ec, 0x89f9, 0x1929, 0xacb6, 0x3c66, 0xb073, 0x20a3, 0xf135, 0x61e5, 0xedf0, 0x7d20, 0xc8bf, 0x586f, 0xd47a, 0x44aa, 0x8221, 0x12f1, 0x9ee4, 0x0e34, 0xbbab, 0x2b7b, 0xa76e, 0x37be, 0x171d, 0x87cd, 0x0bd8, 0x9b08, 0x2e97, 0xbe47, 0x3252, 0xa282, 0x6409, 0xf4d9, 0x78cc, 0xe81c, 0x5d83, 0xcd53, 0x4146, 0xd196, 0xdf0f, 0x4fdf, 0xc3ca, 0x531a, 0xe685, 0x7655, 0xfa40, 0x6a90, 0xac1b, 0x3ccb, 0xb0de, 0x200e, 0x9591, 0x0541, 0x8954, 0x1984, 0x3927, 0xa9f7, 0x25e2, 0xb532, 0x00ad, 0x907d, 0x1c68, 0x8cb8, 0x4a33, 0xdae3, 0x56f6, 0xc626, 0x73b9, 0xe369, 0x6f7c, 0xffac, 0x2e3a, 0xbeea, 0x32ff, 0xa22f, 0x17b0, 0x8760, 0x0b75, 0x9ba5, 0x5d2e, 0xcdfe, 0x41eb, 0xd13b, 0x64a4, 0xf474, 0x7861, 0xe8b1, 0xc812, 0x58c2, 0xd4d7, 0x4407, 0xf198, 0x6148, 0xed5d, 0x7d8d, 0xbb06, 0x2bd6, 0xa7c3, 0x3713, 0x828c, 0x125c, 0x9e49, 0x0e99, 0x837b, 0x13ab, 0x9fbe, 0x0f6e, 0xbaf1, 0x2a21, 0xa634, 0x36e4, 0xf06f, 0x60bf, 0xecaa, 0x7c7a, 0xc9e5, 0x5935, 0xd520, 0x45f0, 0x6553, 0xf583, 0x7996, 0xe946, 0x5cd9, 0xcc09, 0x401c, 0xd0cc, 0x1647, 0x8697, 0x0a82, 0x9a52, 0x2fcd, 0xbf1d, 0x3308, 0xa3d8, 0x724e, 0xe29e, 0x6e8b, 0xfe5b, 0x4bc4, 0xdb14, 0x5701, 0xc7d1, 0x015a, 0x918a, 0x1d9f, 0x8d4f, 0x38d0, 0xa800, 0x2415, 0xb4c5, 0x9466, 0x04b6, 0x88a3, 0x1873, 0xadec, 0x3d3c, 0xb129, 0x21f9, 0xe772, 0x77a2, 0xfbb7, 0x6b67, 0xdef8, 0x4e28, 0xc23d, 0x52ed, 0x5c74, 0xcca4, 0x40b1, 0xd061, 0x65fe, 0xf52e, 0x793b, 0xe9eb, 0x2f60, 0xbfb0, 0x33a5, 0xa375, 0x16ea, 0x863a, 0x0a2f, 0x9aff, 0xba5c, 0x2a8c, 0xa699, 0x3649, 0x83d6, 0x1306, 0x9f13, 0x0fc3, 0xc948, 0x5998, 0xd58d, 0x455d, 0xf0c2, 0x6012, 0xec07, 0x7cd7, 0xad41, 0x3d91, 0xb184, 0x2154, 0x94cb, 0x041b, 0x880e, 0x18de, 0xde55, 0x4e85, 0xc290, 0x5240, 0xe7df, 0x770f, 0xfb1a, 0x6bca, 0x4b69, 0xdbb9, 0x57ac, 0xc77c, 0x72e3, 0xe233, 0x6e26, 0xfef6, 0x387d, 0xa8ad, 0x24b8, 0xb468, 0x01f7, 0x9127, 0x1d32, 0x8de2, ], [ 0x0000, 0x3b93, 0x7726, 0x4cb5, 0xee4c, 0xd5df, 0x996a, 0xa2f9, 0xe1fd, 0xda6e, 0x96db, 0xad48, 0x0fb1, 0x3422, 0x7897, 0x4304, 0xfe9f, 0xc50c, 0x89b9, 0xb22a, 0x10d3, 0x2b40, 0x67f5, 0x5c66, 0x1f62, 0x24f1, 0x6844, 0x53d7, 0xf12e, 0xcabd, 0x8608, 0xbd9b, 0xc05b, 0xfbc8, 0xb77d, 0x8cee, 0x2e17, 0x1584, 0x5931, 0x62a2, 0x21a6, 0x1a35, 0x5680, 0x6d13, 0xcfea, 0xf479, 0xb8cc, 0x835f, 0x3ec4, 0x0557, 0x49e2, 0x7271, 0xd088, 0xeb1b, 0xa7ae, 0x9c3d, 0xdf39, 0xe4aa, 0xa81f, 0x938c, 0x3175, 0x0ae6, 0x4653, 0x7dc0, 0xbdd3, 0x8640, 0xcaf5, 0xf166, 0x539f, 0x680c, 0x24b9, 0x1f2a, 0x5c2e, 0x67bd, 0x2b08, 0x109b, 0xb262, 0x89f1, 0xc544, 0xfed7, 0x434c, 0x78df, 0x346a, 0x0ff9, 0xad00, 0x9693, 0xda26, 0xe1b5, 0xa2b1, 0x9922, 0xd597, 0xee04, 0x4cfd, 0x776e, 0x3bdb, 0x0048, 0x7d88, 0x461b, 0x0aae, 0x313d, 0x93c4, 0xa857, 0xe4e2, 0xdf71, 0x9c75, 0xa7e6, 0xeb53, 0xd0c0, 0x7239, 0x49aa, 0x051f, 0x3e8c, 0x8317, 0xb884, 0xf431, 0xcfa2, 0x6d5b, 0x56c8, 0x1a7d, 0x21ee, 0x62ea, 0x5979, 0x15cc, 0x2e5f, 0x8ca6, 0xb735, 0xfb80, 0xc013, 0x46c3, 0x7d50, 0x31e5, 0x0a76, 0xa88f, 0x931c, 0xdfa9, 0xe43a, 0xa73e, 0x9cad, 0xd018, 0xeb8b, 0x4972, 0x72e1, 0x3e54, 0x05c7, 0xb85c, 0x83cf, 0xcf7a, 0xf4e9, 0x5610, 0x6d83, 0x2136, 0x1aa5, 0x59a1, 0x6232, 0x2e87, 0x1514, 0xb7ed, 0x8c7e, 0xc0cb, 0xfb58, 0x8698, 0xbd0b, 0xf1be, 0xca2d, 0x68d4, 0x5347, 0x1ff2, 0x2461, 0x6765, 0x5cf6, 0x1043, 0x2bd0, 0x8929, 0xb2ba, 0xfe0f, 0xc59c, 0x7807, 0x4394, 0x0f21, 0x34b2, 0x964b, 0xadd8, 0xe16d, 0xdafe, 0x99fa, 0xa269, 0xeedc, 0xd54f, 0x77b6, 0x4c25, 0x0090, 0x3b03, 0xfb10, 0xc083, 0x8c36, 0xb7a5, 0x155c, 0x2ecf, 0x627a, 0x59e9, 0x1aed, 0x217e, 0x6dcb, 0x5658, 0xf4a1, 0xcf32, 0x8387, 0xb814, 0x058f, 0x3e1c, 0x72a9, 0x493a, 0xebc3, 0xd050, 0x9ce5, 0xa776, 0xe472, 0xdfe1, 0x9354, 0xa8c7, 0x0a3e, 0x31ad, 0x7d18, 0x468b, 0x3b4b, 0x00d8, 0x4c6d, 0x77fe, 0xd507, 0xee94, 0xa221, 0x99b2, 0xdab6, 0xe125, 0xad90, 0x9603, 0x34fa, 0x0f69, 0x43dc, 0x784f, 0xc5d4, 0xfe47, 0xb2f2, 0x8961, 0x2b98, 0x100b, 0x5cbe, 0x672d, 0x2429, 0x1fba, 0x530f, 0x689c, 0xca65, 0xf1f6, 0xbd43, 0x86d0, ], [ 0x0000, 0x8d86, 0x2669, 0xabef, 0x4cd2, 0xc154, 0x6abb, 0xe73d, 0x99a4, 0x1422, 0xbfcd, 0x324b, 0xd576, 0x58f0, 0xf31f, 0x7e99, 0x0e2d, 0x83ab, 0x2844, 0xa5c2, 0x42ff, 0xcf79, 0x6496, 0xe910, 0x9789, 0x1a0f, 0xb1e0, 0x3c66, 0xdb5b, 0x56dd, 0xfd32, 0x70b4, 0x1c5a, 0x91dc, 0x3a33, 0xb7b5, 0x5088, 0xdd0e, 0x76e1, 0xfb67, 0x85fe, 0x0878, 0xa397, 0x2e11, 0xc92c, 0x44aa, 0xef45, 0x62c3, 0x1277, 0x9ff1, 0x341e, 0xb998, 0x5ea5, 0xd323, 0x78cc, 0xf54a, 0x8bd3, 0x0655, 0xadba, 0x203c, 0xc701, 0x4a87, 0xe168, 0x6cee, 0x38b4, 0xb532, 0x1edd, 0x935b, 0x7466, 0xf9e0, 0x520f, 0xdf89, 0xa110, 0x2c96, 0x8779, 0x0aff, 0xedc2, 0x6044, 0xcbab, 0x462d, 0x3699, 0xbb1f, 0x10f0, 0x9d76, 0x7a4b, 0xf7cd, 0x5c22, 0xd1a4, 0xaf3d, 0x22bb, 0x8954, 0x04d2, 0xe3ef, 0x6e69, 0xc586, 0x4800, 0x24ee, 0xa968, 0x0287, 0x8f01, 0x683c, 0xe5ba, 0x4e55, 0xc3d3, 0xbd4a, 0x30cc, 0x9b23, 0x16a5, 0xf198, 0x7c1e, 0xd7f1, 0x5a77, 0x2ac3, 0xa745, 0x0caa, 0x812c, 0x6611, 0xeb97, 0x4078, 0xcdfe, 0xb367, 0x3ee1, 0x950e, 0x1888, 0xffb5, 0x7233, 0xd9dc, 0x545a, 0x7168, 0xfcee, 0x5701, 0xda87, 0x3dba, 0xb03c, 0x1bd3, 0x9655, 0xe8cc, 0x654a, 0xcea5, 0x4323, 0xa41e, 0x2998, 0x8277, 0x0ff1, 0x7f45, 0xf2c3, 0x592c, 0xd4aa, 0x3397, 0xbe11, 0x15fe, 0x9878, 0xe6e1, 0x6b67, 0xc088, 0x4d0e, 0xaa33, 0x27b5, 0x8c5a, 0x01dc, 0x6d32, 0xe0b4, 0x4b5b, 0xc6dd, 0x21e0, 0xac66, 0x0789, 0x8a0f, 0xf496, 0x7910, 0xd2ff, 0x5f79, 0xb844, 0x35c2, 0x9e2d, 0x13ab, 0x631f, 0xee99, 0x4576, 0xc8f0, 0x2fcd, 0xa24b, 0x09a4, 0x8422, 0xfabb, 0x773d, 0xdcd2, 0x5154, 0xb669, 0x3bef, 0x9000, 0x1d86, 0x49dc, 0xc45a, 0x6fb5, 0xe233, 0x050e, 0x8888, 0x2367, 0xaee1, 0xd078, 0x5dfe, 0xf611, 0x7b97, 0x9caa, 0x112c, 0xbac3, 0x3745, 0x47f1, 0xca77, 0x6198, 0xec1e, 0x0b23, 0x86a5, 0x2d4a, 0xa0cc, 0xde55, 0x53d3, 0xf83c, 0x75ba, 0x9287, 0x1f01, 0xb4ee, 0x3968, 0x5586, 0xd800, 0x73ef, 0xfe69, 0x1954, 0x94d2, 0x3f3d, 0xb2bb, 0xcc22, 0x41a4, 0xea4b, 0x67cd, 0x80f0, 0x0d76, 0xa699, 0x2b1f, 0x5bab, 0xd62d, 0x7dc2, 0xf044, 0x1779, 0x9aff, 0x3110, 0xbc96, 0xc20f, 0x4f89, 0xe466, 0x69e0, 0x8edd, 0x035b, 0xa8b4, 0x2532, ], [ 0x0000, 0xe2d0, 0xf8c5, 0x1a15, 0xccef, 0x2e3f, 0x342a, 0xd6fa, 0xa4bb, 0x466b, 0x5c7e, 0xbeae, 0x6854, 0x8a84, 0x9091, 0x7241, 0x7413, 0x96c3, 0x8cd6, 0x6e06, 0xb8fc, 0x5a2c, 0x4039, 0xa2e9, 0xd0a8, 0x3278, 0x286d, 0xcabd, 0x1c47, 0xfe97, 0xe482, 0x0652, 0xe826, 0x0af6, 0x10e3, 0xf233, 0x24c9, 0xc619, 0xdc0c, 0x3edc, 0x4c9d, 0xae4d, 0xb458, 0x5688, 0x8072, 0x62a2, 0x78b7, 0x9a67, 0x9c35, 0x7ee5, 0x64f0, 0x8620, 0x50da, 0xb20a, 0xa81f, 0x4acf, 0x388e, 0xda5e, 0xc04b, 0x229b, 0xf461, 0x16b1, 0x0ca4, 0xee74, 0xed29, 0x0ff9, 0x15ec, 0xf73c, 0x21c6, 0xc316, 0xd903, 0x3bd3, 0x4992, 0xab42, 0xb157, 0x5387, 0x857d, 0x67ad, 0x7db8, 0x9f68, 0x993a, 0x7bea, 0x61ff, 0x832f, 0x55d5, 0xb705, 0xad10, 0x4fc0, 0x3d81, 0xdf51, 0xc544, 0x2794, 0xf16e, 0x13be, 0x09ab, 0xeb7b, 0x050f, 0xe7df, 0xfdca, 0x1f1a, 0xc9e0, 0x2b30, 0x3125, 0xd3f5, 0xa1b4, 0x4364, 0x5971, 0xbba1, 0x6d5b, 0x8f8b, 0x959e, 0x774e, 0x711c, 0x93cc, 0x89d9, 0x6b09, 0xbdf3, 0x5f23, 0x4536, 0xa7e6, 0xd5a7, 0x3777, 0x2d62, 0xcfb2, 0x1948, 0xfb98, 0xe18d, 0x035d, 0xe737, 0x05e7, 0x1ff2, 0xfd22, 0x2bd8, 0xc908, 0xd31d, 0x31cd, 0x438c, 0xa15c, 0xbb49, 0x5999, 0x8f63, 0x6db3, 0x77a6, 0x9576, 0x9324, 0x71f4, 0x6be1, 0x8931, 0x5fcb, 0xbd1b, 0xa70e, 0x45de, 0x379f, 0xd54f, 0xcf5a, 0x2d8a, 0xfb70, 0x19a0, 0x03b5, 0xe165, 0x0f11, 0xedc1, 0xf7d4, 0x1504, 0xc3fe, 0x212e, 0x3b3b, 0xd9eb, 0xabaa, 0x497a, 0x536f, 0xb1bf, 0x6745, 0x8595, 0x9f80, 0x7d50, 0x7b02, 0x99d2, 0x83c7, 0x6117, 0xb7ed, 0x553d, 0x4f28, 0xadf8, 0xdfb9, 0x3d69, 0x277c, 0xc5ac, 0x1356, 0xf186, 0xeb93, 0x0943, 0x0a1e, 0xe8ce, 0xf2db, 0x100b, 0xc6f1, 0x2421, 0x3e34, 0xdce4, 0xaea5, 0x4c75, 0x5660, 0xb4b0, 0x624a, 0x809a, 0x9a8f, 0x785f, 0x7e0d, 0x9cdd, 0x86c8, 0x6418, 0xb2e2, 0x5032, 0x4a27, 0xa8f7, 0xdab6, 0x3866, 0x2273, 0xc0a3, 0x1659, 0xf489, 0xee9c, 0x0c4c, 0xe238, 0x00e8, 0x1afd, 0xf82d, 0x2ed7, 0xcc07, 0xd612, 0x34c2, 0x4683, 0xa453, 0xbe46, 0x5c96, 0x8a6c, 0x68bc, 0x72a9, 0x9079, 0x962b, 0x74fb, 0x6eee, 0x8c3e, 0x5ac4, 0xb814, 0xa201, 0x40d1, 0x3290, 0xd040, 0xca55, 0x2885, 0xfe7f, 0x1caf, 0x06ba, 0xe46a, ], [ 0x0000, 0xf30b, 0xdb73, 0x2878, 0x8b83, 0x7888, 0x50f0, 0xa3fb, 0x2a63, 0xd968, 0xf110, 0x021b, 0xa1e0, 0x52eb, 0x7a93, 0x8998, 0x54c6, 0xa7cd, 0x8fb5, 0x7cbe, 0xdf45, 0x2c4e, 0x0436, 0xf73d, 0x7ea5, 0x8dae, 0xa5d6, 0x56dd, 0xf526, 0x062d, 0x2e55, 0xdd5e, 0xa98c, 0x5a87, 0x72ff, 0x81f4, 0x220f, 0xd104, 0xf97c, 0x0a77, 0x83ef, 0x70e4, 0x589c, 0xab97, 0x086c, 0xfb67, 0xd31f, 0x2014, 0xfd4a, 0x0e41, 0x2639, 0xd532, 0x76c9, 0x85c2, 0xadba, 0x5eb1, 0xd729, 0x2422, 0x0c5a, 0xff51, 0x5caa, 0xafa1, 0x87d9, 0x74d2, 0x6e7d, 0x9d76, 0xb50e, 0x4605, 0xe5fe, 0x16f5, 0x3e8d, 0xcd86, 0x441e, 0xb715, 0x9f6d, 0x6c66, 0xcf9d, 0x3c96, 0x14ee, 0xe7e5, 0x3abb, 0xc9b0, 0xe1c8, 0x12c3, 0xb138, 0x4233, 0x6a4b, 0x9940, 0x10d8, 0xe3d3, 0xcbab, 0x38a0, 0x9b5b, 0x6850, 0x4028, 0xb323, 0xc7f1, 0x34fa, 0x1c82, 0xef89, 0x4c72, 0xbf79, 0x9701, 0x640a, 0xed92, 0x1e99, 0x36e1, 0xc5ea, 0x6611, 0x951a, 0xbd62, 0x4e69, 0x9337, 0x603c, 0x4844, 0xbb4f, 0x18b4, 0xebbf, 0xc3c7, 0x30cc, 0xb954, 0x4a5f, 0x6227, 0x912c, 0x32d7, 0xc1dc, 0xe9a4, 0x1aaf, 0xdcfa, 0x2ff1, 0x0789, 0xf482, 0x5779, 0xa472, 0x8c0a, 0x7f01, 0xf699, 0x0592, 0x2dea, 0xdee1, 0x7d1a, 0x8e11, 0xa669, 0x5562, 0x883c, 0x7b37, 0x534f, 0xa044, 0x03bf, 0xf0b4, 0xd8cc, 0x2bc7, 0xa25f, 0x5154, 0x792c, 0x8a27, 0x29dc, 0xdad7, 0xf2af, 0x01a4, 0x7576, 0x867d, 0xae05, 0x5d0e, 0xfef5, 0x0dfe, 0x2586, 0xd68d, 0x5f15, 0xac1e, 0x8466, 0x776d, 0xd496, 0x279d, 0x0fe5, 0xfcee, 0x21b0, 0xd2bb, 0xfac3, 0x09c8, 0xaa33, 0x5938, 0x7140, 0x824b, 0x0bd3, 0xf8d8, 0xd0a0, 0x23ab, 0x8050, 0x735b, 0x5b23, 0xa828, 0xb287, 0x418c, 0x69f4, 0x9aff, 0x3904, 0xca0f, 0xe277, 0x117c, 0x98e4, 0x6bef, 0x4397, 0xb09c, 0x1367, 0xe06c, 0xc814, 0x3b1f, 0xe641, 0x154a, 0x3d32, 0xce39, 0x6dc2, 0x9ec9, 0xb6b1, 0x45ba, 0xcc22, 0x3f29, 0x1751, 0xe45a, 0x47a1, 0xb4aa, 0x9cd2, 0x6fd9, 0x1b0b, 0xe800, 0xc078, 0x3373, 0x9088, 0x6383, 0x4bfb, 0xb8f0, 0x3168, 0xc263, 0xea1b, 0x1910, 0xbaeb, 0x49e0, 0x6198, 0x9293, 0x4fcd, 0xbcc6, 0x94be, 0x67b5, 0xc44e, 0x3745, 0x1f3d, 0xec36, 0x65ae, 0x96a5, 0xbedd, 0x4dd6, 0xee2d, 0x1d26, 0x355e, 0xc655, ], [ 0x0000, 0x8491, 0x3447, 0xb0d6, 0x688e, 0xec1f, 0x5cc9, 0xd858, 0xd11c, 0x558d, 0xe55b, 0x61ca, 0xb992, 0x3d03, 0x8dd5, 0x0944, 0x9f5d, 0x1bcc, 0xab1a, 0x2f8b, 0xf7d3, 0x7342, 0xc394, 0x4705, 0x4e41, 0xcad0, 0x7a06, 0xfe97, 0x26cf, 0xa25e, 0x1288, 0x9619, 0x03df, 0x874e, 0x3798, 0xb309, 0x6b51, 0xefc0, 0x5f16, 0xdb87, 0xd2c3, 0x5652, 0xe684, 0x6215, 0xba4d, 0x3edc, 0x8e0a, 0x0a9b, 0x9c82, 0x1813, 0xa8c5, 0x2c54, 0xf40c, 0x709d, 0xc04b, 0x44da, 0x4d9e, 0xc90f, 0x79d9, 0xfd48, 0x2510, 0xa181, 0x1157, 0x95c6, 0x07be, 0x832f, 0x33f9, 0xb768, 0x6f30, 0xeba1, 0x5b77, 0xdfe6, 0xd6a2, 0x5233, 0xe2e5, 0x6674, 0xbe2c, 0x3abd, 0x8a6b, 0x0efa, 0x98e3, 0x1c72, 0xaca4, 0x2835, 0xf06d, 0x74fc, 0xc42a, 0x40bb, 0x49ff, 0xcd6e, 0x7db8, 0xf929, 0x2171, 0xa5e0, 0x1536, 0x91a7, 0x0461, 0x80f0, 0x3026, 0xb4b7, 0x6cef, 0xe87e, 0x58a8, 0xdc39, 0xd57d, 0x51ec, 0xe13a, 0x65ab, 0xbdf3, 0x3962, 0x89b4, 0x0d25, 0x9b3c, 0x1fad, 0xaf7b, 0x2bea, 0xf3b2, 0x7723, 0xc7f5, 0x4364, 0x4a20, 0xceb1, 0x7e67, 0xfaf6, 0x22ae, 0xa63f, 0x16e9, 0x9278, 0x0f7c, 0x8bed, 0x3b3b, 0xbfaa, 0x67f2, 0xe363, 0x53b5, 0xd724, 0xde60, 0x5af1, 0xea27, 0x6eb6, 0xb6ee, 0x327f, 0x82a9, 0x0638, 0x9021, 0x14b0, 0xa466, 0x20f7, 0xf8af, 0x7c3e, 0xcce8, 0x4879, 0x413d, 0xc5ac, 0x757a, 0xf1eb, 0x29b3, 0xad22, 0x1df4, 0x9965, 0x0ca3, 0x8832, 0x38e4, 0xbc75, 0x642d, 0xe0bc, 0x506a, 0xd4fb, 0xddbf, 0x592e, 0xe9f8, 0x6d69, 0xb531, 0x31a0, 0x8176, 0x05e7, 0x93fe, 0x176f, 0xa7b9, 0x2328, 0xfb70, 0x7fe1, 0xcf37, 0x4ba6, 0x42e2, 0xc673, 0x76a5, 0xf234, 0x2a6c, 0xaefd, 0x1e2b, 0x9aba, 0x08c2, 0x8c53, 0x3c85, 0xb814, 0x604c, 0xe4dd, 0x540b, 0xd09a, 0xd9de, 0x5d4f, 0xed99, 0x6908, 0xb150, 0x35c1, 0x8517, 0x0186, 0x979f, 0x130e, 0xa3d8, 0x2749, 0xff11, 0x7b80, 0xcb56, 0x4fc7, 0x4683, 0xc212, 0x72c4, 0xf655, 0x2e0d, 0xaa9c, 0x1a4a, 0x9edb, 0x0b1d, 0x8f8c, 0x3f5a, 0xbbcb, 0x6393, 0xe702, 0x57d4, 0xd345, 0xda01, 0x5e90, 0xee46, 0x6ad7, 0xb28f, 0x361e, 0x86c8, 0x0259, 0x9440, 0x10d1, 0xa007, 0x2496, 0xfcce, 0x785f, 0xc889, 0x4c18, 0x455c, 0xc1cd, 0x711b, 0xf58a, 0x2dd2, 0xa943, 0x1995, 0x9d04, ], [ 0x0000, 0x1ef8, 0x3df0, 0x2308, 0x7be0, 0x6518, 0x4610, 0x58e8, 0xf7c0, 0xe938, 0xca30, 0xd4c8, 0x8c20, 0x92d8, 0xb1d0, 0xaf28, 0xd2e5, 0xcc1d, 0xef15, 0xf1ed, 0xa905, 0xb7fd, 0x94f5, 0x8a0d, 0x2525, 0x3bdd, 0x18d5, 0x062d, 0x5ec5, 0x403d, 0x6335, 0x7dcd, 0x98af, 0x8657, 0xa55f, 0xbba7, 0xe34f, 0xfdb7, 0xdebf, 0xc047, 0x6f6f, 0x7197, 0x529f, 0x4c67, 0x148f, 0x0a77, 0x297f, 0x3787, 0x4a4a, 0x54b2, 0x77ba, 0x6942, 0x31aa, 0x2f52, 0x0c5a, 0x12a2, 0xbd8a, 0xa372, 0x807a, 0x9e82, 0xc66a, 0xd892, 0xfb9a, 0xe562, 0x0c3b, 0x12c3, 0x31cb, 0x2f33, 0x77db, 0x6923, 0x4a2b, 0x54d3, 0xfbfb, 0xe503, 0xc60b, 0xd8f3, 0x801b, 0x9ee3, 0xbdeb, 0xa313, 0xdede, 0xc026, 0xe32e, 0xfdd6, 0xa53e, 0xbbc6, 0x98ce, 0x8636, 0x291e, 0x37e6, 0x14ee, 0x0a16, 0x52fe, 0x4c06, 0x6f0e, 0x71f6, 0x9494, 0x8a6c, 0xa964, 0xb79c, 0xef74, 0xf18c, 0xd284, 0xcc7c, 0x6354, 0x7dac, 0x5ea4, 0x405c, 0x18b4, 0x064c, 0x2544, 0x3bbc, 0x4671, 0x5889, 0x7b81, 0x6579, 0x3d91, 0x2369, 0x0061, 0x1e99, 0xb1b1, 0xaf49, 0x8c41, 0x92b9, 0xca51, 0xd4a9, 0xf7a1, 0xe959, 0x1876, 0x068e, 0x2586, 0x3b7e, 0x6396, 0x7d6e, 0x5e66, 0x409e, 0xefb6, 0xf14e, 0xd246, 0xccbe, 0x9456, 0x8aae, 0xa9a6, 0xb75e, 0xca93, 0xd46b, 0xf763, 0xe99b, 0xb173, 0xaf8b, 0x8c83, 0x927b, 0x3d53, 0x23ab, 0x00a3, 0x1e5b, 0x46b3, 0x584b, 0x7b43, 0x65bb, 0x80d9, 0x9e21, 0xbd29, 0xa3d1, 0xfb39, 0xe5c1, 0xc6c9, 0xd831, 0x7719, 0x69e1, 0x4ae9, 0x5411, 0x0cf9, 0x1201, 0x3109, 0x2ff1, 0x523c, 0x4cc4, 0x6fcc, 0x7134, 0x29dc, 0x3724, 0x142c, 0x0ad4, 0xa5fc, 0xbb04, 0x980c, 0x86f4, 0xde1c, 0xc0e4, 0xe3ec, 0xfd14, 0x144d, 0x0ab5, 0x29bd, 0x3745, 0x6fad, 0x7155, 0x525d, 0x4ca5, 0xe38d, 0xfd75, 0xde7d, 0xc085, 0x986d, 0x8695, 0xa59d, 0xbb65, 0xc6a8, 0xd850, 0xfb58, 0xe5a0, 0xbd48, 0xa3b0, 0x80b8, 0x9e40, 0x3168, 0x2f90, 0x0c98, 0x1260, 0x4a88, 0x5470, 0x7778, 0x6980, 0x8ce2, 0x921a, 0xb112, 0xafea, 0xf702, 0xe9fa, 0xcaf2, 0xd40a, 0x7b22, 0x65da, 0x46d2, 0x582a, 0x00c2, 0x1e3a, 0x3d32, 0x23ca, 0x5e07, 0x40ff, 0x63f7, 0x7d0f, 0x25e7, 0x3b1f, 0x1817, 0x06ef, 0xa9c7, 0xb73f, 0x9437, 0x8acf, 0xd227, 0xccdf, 0xefd7, 0xf12f, ], [ 0x0000, 0x30ec, 0x61d8, 0x5134, 0xc3b0, 0xf35c, 0xa268, 0x9284, 0xba05, 0x8ae9, 0xdbdd, 0xeb31, 0x79b5, 0x4959, 0x186d, 0x2881, 0x496f, 0x7983, 0x28b7, 0x185b, 0x8adf, 0xba33, 0xeb07, 0xdbeb, 0xf36a, 0xc386, 0x92b2, 0xa25e, 0x30da, 0x0036, 0x5102, 0x61ee, 0x92de, 0xa232, 0xf306, 0xc3ea, 0x516e, 0x6182, 0x30b6, 0x005a, 0x28db, 0x1837, 0x4903, 0x79ef, 0xeb6b, 0xdb87, 0x8ab3, 0xba5f, 0xdbb1, 0xeb5d, 0xba69, 0x8a85, 0x1801, 0x28ed, 0x79d9, 0x4935, 0x61b4, 0x5158, 0x006c, 0x3080, 0xa204, 0x92e8, 0xc3dc, 0xf330, 0x18d9, 0x2835, 0x7901, 0x49ed, 0xdb69, 0xeb85, 0xbab1, 0x8a5d, 0xa2dc, 0x9230, 0xc304, 0xf3e8, 0x616c, 0x5180, 0x00b4, 0x3058, 0x51b6, 0x615a, 0x306e, 0x0082, 0x9206, 0xa2ea, 0xf3de, 0xc332, 0xebb3, 0xdb5f, 0x8a6b, 0xba87, 0x2803, 0x18ef, 0x49db, 0x7937, 0x8a07, 0xbaeb, 0xebdf, 0xdb33, 0x49b7, 0x795b, 0x286f, 0x1883, 0x3002, 0x00ee, 0x51da, 0x6136, 0xf3b2, 0xc35e, 0x926a, 0xa286, 0xc368, 0xf384, 0xa2b0, 0x925c, 0x00d8, 0x3034, 0x6100, 0x51ec, 0x796d, 0x4981, 0x18b5, 0x2859, 0xbadd, 0x8a31, 0xdb05, 0xebe9, 0x31b2, 0x015e, 0x506a, 0x6086, 0xf202, 0xc2ee, 0x93da, 0xa336, 0x8bb7, 0xbb5b, 0xea6f, 0xda83, 0x4807, 0x78eb, 0x29df, 0x1933, 0x78dd, 0x4831, 0x1905, 0x29e9, 0xbb6d, 0x8b81, 0xdab5, 0xea59, 0xc2d8, 0xf234, 0xa300, 0x93ec, 0x0168, 0x3184, 0x60b0, 0x505c, 0xa36c, 0x9380, 0xc2b4, 0xf258, 0x60dc, 0x5030, 0x0104, 0x31e8, 0x1969, 0x2985, 0x78b1, 0x485d, 0xdad9, 0xea35, 0xbb01, 0x8bed, 0xea03, 0xdaef, 0x8bdb, 0xbb37, 0x29b3, 0x195f, 0x486b, 0x7887, 0x5006, 0x60ea, 0x31de, 0x0132, 0x93b6, 0xa35a, 0xf26e, 0xc282, 0x296b, 0x1987, 0x48b3, 0x785f, 0xeadb, 0xda37, 0x8b03, 0xbbef, 0x936e, 0xa382, 0xf2b6, 0xc25a, 0x50de, 0x6032, 0x3106, 0x01ea, 0x6004, 0x50e8, 0x01dc, 0x3130, 0xa3b4, 0x9358, 0xc26c, 0xf280, 0xda01, 0xeaed, 0xbbd9, 0x8b35, 0x19b1, 0x295d, 0x7869, 0x4885, 0xbbb5, 0x8b59, 0xda6d, 0xea81, 0x7805, 0x48e9, 0x19dd, 0x2931, 0x01b0, 0x315c, 0x6068, 0x5084, 0xc200, 0xf2ec, 0xa3d8, 0x9334, 0xf2da, 0xc236, 0x9302, 0xa3ee, 0x316a, 0x0186, 0x50b2, 0x605e, 0x48df, 0x7833, 0x2907, 0x19eb, 0x8b6f, 0xbb83, 0xeab7, 0xda5b, ], ]; pub static CRC16_GENIBUS_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, ], [ 0x0000, 0x3331, 0x6662, 0x5553, 0xccc4, 0xfff5, 0xaaa6, 0x9997, 0x89a9, 0xba98, 0xefcb, 0xdcfa, 0x456d, 0x765c, 0x230f, 0x103e, 0x0373, 0x3042, 0x6511, 0x5620, 0xcfb7, 0xfc86, 0xa9d5, 0x9ae4, 0x8ada, 0xb9eb, 0xecb8, 0xdf89, 0x461e, 0x752f, 0x207c, 0x134d, 0x06e6, 0x35d7, 0x6084, 0x53b5, 0xca22, 0xf913, 0xac40, 0x9f71, 0x8f4f, 0xbc7e, 0xe92d, 0xda1c, 0x438b, 0x70ba, 0x25e9, 0x16d8, 0x0595, 0x36a4, 0x63f7, 0x50c6, 0xc951, 0xfa60, 0xaf33, 0x9c02, 0x8c3c, 0xbf0d, 0xea5e, 0xd96f, 0x40f8, 0x73c9, 0x269a, 0x15ab, 0x0dcc, 0x3efd, 0x6bae, 0x589f, 0xc108, 0xf239, 0xa76a, 0x945b, 0x8465, 0xb754, 0xe207, 0xd136, 0x48a1, 0x7b90, 0x2ec3, 0x1df2, 0x0ebf, 0x3d8e, 0x68dd, 0x5bec, 0xc27b, 0xf14a, 0xa419, 0x9728, 0x8716, 0xb427, 0xe174, 0xd245, 0x4bd2, 0x78e3, 0x2db0, 0x1e81, 0x0b2a, 0x381b, 0x6d48, 0x5e79, 0xc7ee, 0xf4df, 0xa18c, 0x92bd, 0x8283, 0xb1b2, 0xe4e1, 0xd7d0, 0x4e47, 0x7d76, 0x2825, 0x1b14, 0x0859, 0x3b68, 0x6e3b, 0x5d0a, 0xc49d, 0xf7ac, 0xa2ff, 0x91ce, 0x81f0, 0xb2c1, 0xe792, 0xd4a3, 0x4d34, 0x7e05, 0x2b56, 0x1867, 0x1b98, 0x28a9, 0x7dfa, 0x4ecb, 0xd75c, 0xe46d, 0xb13e, 0x820f, 0x9231, 0xa100, 0xf453, 0xc762, 0x5ef5, 0x6dc4, 0x3897, 0x0ba6, 0x18eb, 0x2bda, 0x7e89, 0x4db8, 0xd42f, 0xe71e, 0xb24d, 0x817c, 0x9142, 0xa273, 0xf720, 0xc411, 0x5d86, 0x6eb7, 0x3be4, 0x08d5, 0x1d7e, 0x2e4f, 0x7b1c, 0x482d, 0xd1ba, 0xe28b, 0xb7d8, 0x84e9, 0x94d7, 0xa7e6, 0xf2b5, 0xc184, 0x5813, 0x6b22, 0x3e71, 0x0d40, 0x1e0d, 0x2d3c, 0x786f, 0x4b5e, 0xd2c9, 0xe1f8, 0xb4ab, 0x879a, 0x97a4, 0xa495, 0xf1c6, 0xc2f7, 0x5b60, 0x6851, 0x3d02, 0x0e33, 0x1654, 0x2565, 0x7036, 0x4307, 0xda90, 0xe9a1, 0xbcf2, 0x8fc3, 0x9ffd, 0xaccc, 0xf99f, 0xcaae, 0x5339, 0x6008, 0x355b, 0x066a, 0x1527, 0x2616, 0x7345, 0x4074, 0xd9e3, 0xead2, 0xbf81, 0x8cb0, 0x9c8e, 0xafbf, 0xfaec, 0xc9dd, 0x504a, 0x637b, 0x3628, 0x0519, 0x10b2, 0x2383, 0x76d0, 0x45e1, 0xdc76, 0xef47, 0xba14, 0x8925, 0x991b, 0xaa2a, 0xff79, 0xcc48, 0x55df, 0x66ee, 0x33bd, 0x008c, 0x13c1, 0x20f0, 0x75a3, 0x4692, 0xdf05, 0xec34, 0xb967, 0x8a56, 0x9a68, 0xa959, 0xfc0a, 0xcf3b, 0x56ac, 0x659d, 0x30ce, 0x03ff, ], [ 0x0000, 0x3730, 0x6e60, 0x5950, 0xdcc0, 0xebf0, 0xb2a0, 0x8590, 0xa9a1, 0x9e91, 0xc7c1, 0xf0f1, 0x7561, 0x4251, 0x1b01, 0x2c31, 0x4363, 0x7453, 0x2d03, 0x1a33, 0x9fa3, 0xa893, 0xf1c3, 0xc6f3, 0xeac2, 0xddf2, 0x84a2, 0xb392, 0x3602, 0x0132, 0x5862, 0x6f52, 0x86c6, 0xb1f6, 0xe8a6, 0xdf96, 0x5a06, 0x6d36, 0x3466, 0x0356, 0x2f67, 0x1857, 0x4107, 0x7637, 0xf3a7, 0xc497, 0x9dc7, 0xaaf7, 0xc5a5, 0xf295, 0xabc5, 0x9cf5, 0x1965, 0x2e55, 0x7705, 0x4035, 0x6c04, 0x5b34, 0x0264, 0x3554, 0xb0c4, 0x87f4, 0xdea4, 0xe994, 0x1dad, 0x2a9d, 0x73cd, 0x44fd, 0xc16d, 0xf65d, 0xaf0d, 0x983d, 0xb40c, 0x833c, 0xda6c, 0xed5c, 0x68cc, 0x5ffc, 0x06ac, 0x319c, 0x5ece, 0x69fe, 0x30ae, 0x079e, 0x820e, 0xb53e, 0xec6e, 0xdb5e, 0xf76f, 0xc05f, 0x990f, 0xae3f, 0x2baf, 0x1c9f, 0x45cf, 0x72ff, 0x9b6b, 0xac5b, 0xf50b, 0xc23b, 0x47ab, 0x709b, 0x29cb, 0x1efb, 0x32ca, 0x05fa, 0x5caa, 0x6b9a, 0xee0a, 0xd93a, 0x806a, 0xb75a, 0xd808, 0xef38, 0xb668, 0x8158, 0x04c8, 0x33f8, 0x6aa8, 0x5d98, 0x71a9, 0x4699, 0x1fc9, 0x28f9, 0xad69, 0x9a59, 0xc309, 0xf439, 0x3b5a, 0x0c6a, 0x553a, 0x620a, 0xe79a, 0xd0aa, 0x89fa, 0xbeca, 0x92fb, 0xa5cb, 0xfc9b, 0xcbab, 0x4e3b, 0x790b, 0x205b, 0x176b, 0x7839, 0x4f09, 0x1659, 0x2169, 0xa4f9, 0x93c9, 0xca99, 0xfda9, 0xd198, 0xe6a8, 0xbff8, 0x88c8, 0x0d58, 0x3a68, 0x6338, 0x5408, 0xbd9c, 0x8aac, 0xd3fc, 0xe4cc, 0x615c, 0x566c, 0x0f3c, 0x380c, 0x143d, 0x230d, 0x7a5d, 0x4d6d, 0xc8fd, 0xffcd, 0xa69d, 0x91ad, 0xfeff, 0xc9cf, 0x909f, 0xa7af, 0x223f, 0x150f, 0x4c5f, 0x7b6f, 0x575e, 0x606e, 0x393e, 0x0e0e, 0x8b9e, 0xbcae, 0xe5fe, 0xd2ce, 0x26f7, 0x11c7, 0x4897, 0x7fa7, 0xfa37, 0xcd07, 0x9457, 0xa367, 0x8f56, 0xb866, 0xe136, 0xd606, 0x5396, 0x64a6, 0x3df6, 0x0ac6, 0x6594, 0x52a4, 0x0bf4, 0x3cc4, 0xb954, 0x8e64, 0xd734, 0xe004, 0xcc35, 0xfb05, 0xa255, 0x9565, 0x10f5, 0x27c5, 0x7e95, 0x49a5, 0xa031, 0x9701, 0xce51, 0xf961, 0x7cf1, 0x4bc1, 0x1291, 0x25a1, 0x0990, 0x3ea0, 0x67f0, 0x50c0, 0xd550, 0xe260, 0xbb30, 0x8c00, 0xe352, 0xd462, 0x8d32, 0xba02, 0x3f92, 0x08a2, 0x51f2, 0x66c2, 0x4af3, 0x7dc3, 0x2493, 0x13a3, 0x9633, 0xa103, 0xf853, 0xcf63, ], [ 0x0000, 0x76b4, 0xed68, 0x9bdc, 0xcaf1, 0xbc45, 0x2799, 0x512d, 0x85c3, 0xf377, 0x68ab, 0x1e1f, 0x4f32, 0x3986, 0xa25a, 0xd4ee, 0x1ba7, 0x6d13, 0xf6cf, 0x807b, 0xd156, 0xa7e2, 0x3c3e, 0x4a8a, 0x9e64, 0xe8d0, 0x730c, 0x05b8, 0x5495, 0x2221, 0xb9fd, 0xcf49, 0x374e, 0x41fa, 0xda26, 0xac92, 0xfdbf, 0x8b0b, 0x10d7, 0x6663, 0xb28d, 0xc439, 0x5fe5, 0x2951, 0x787c, 0x0ec8, 0x9514, 0xe3a0, 0x2ce9, 0x5a5d, 0xc181, 0xb735, 0xe618, 0x90ac, 0x0b70, 0x7dc4, 0xa92a, 0xdf9e, 0x4442, 0x32f6, 0x63db, 0x156f, 0x8eb3, 0xf807, 0x6e9c, 0x1828, 0x83f4, 0xf540, 0xa46d, 0xd2d9, 0x4905, 0x3fb1, 0xeb5f, 0x9deb, 0x0637, 0x7083, 0x21ae, 0x571a, 0xccc6, 0xba72, 0x753b, 0x038f, 0x9853, 0xeee7, 0xbfca, 0xc97e, 0x52a2, 0x2416, 0xf0f8, 0x864c, 0x1d90, 0x6b24, 0x3a09, 0x4cbd, 0xd761, 0xa1d5, 0x59d2, 0x2f66, 0xb4ba, 0xc20e, 0x9323, 0xe597, 0x7e4b, 0x08ff, 0xdc11, 0xaaa5, 0x3179, 0x47cd, 0x16e0, 0x6054, 0xfb88, 0x8d3c, 0x4275, 0x34c1, 0xaf1d, 0xd9a9, 0x8884, 0xfe30, 0x65ec, 0x1358, 0xc7b6, 0xb102, 0x2ade, 0x5c6a, 0x0d47, 0x7bf3, 0xe02f, 0x969b, 0xdd38, 0xab8c, 0x3050, 0x46e4, 0x17c9, 0x617d, 0xfaa1, 0x8c15, 0x58fb, 0x2e4f, 0xb593, 0xc327, 0x920a, 0xe4be, 0x7f62, 0x09d6, 0xc69f, 0xb02b, 0x2bf7, 0x5d43, 0x0c6e, 0x7ada, 0xe106, 0x97b2, 0x435c, 0x35e8, 0xae34, 0xd880, 0x89ad, 0xff19, 0x64c5, 0x1271, 0xea76, 0x9cc2, 0x071e, 0x71aa, 0x2087, 0x5633, 0xcdef, 0xbb5b, 0x6fb5, 0x1901, 0x82dd, 0xf469, 0xa544, 0xd3f0, 0x482c, 0x3e98, 0xf1d1, 0x8765, 0x1cb9, 0x6a0d, 0x3b20, 0x4d94, 0xd648, 0xa0fc, 0x7412, 0x02a6, 0x997a, 0xefce, 0xbee3, 0xc857, 0x538b, 0x253f, 0xb3a4, 0xc510, 0x5ecc, 0x2878, 0x7955, 0x0fe1, 0x943d, 0xe289, 0x3667, 0x40d3, 0xdb0f, 0xadbb, 0xfc96, 0x8a22, 0x11fe, 0x674a, 0xa803, 0xdeb7, 0x456b, 0x33df, 0x62f2, 0x1446, 0x8f9a, 0xf92e, 0x2dc0, 0x5b74, 0xc0a8, 0xb61c, 0xe731, 0x9185, 0x0a59, 0x7ced, 0x84ea, 0xf25e, 0x6982, 0x1f36, 0x4e1b, 0x38af, 0xa373, 0xd5c7, 0x0129, 0x779d, 0xec41, 0x9af5, 0xcbd8, 0xbd6c, 0x26b0, 0x5004, 0x9f4d, 0xe9f9, 0x7225, 0x0491, 0x55bc, 0x2308, 0xb8d4, 0xce60, 0x1a8e, 0x6c3a, 0xf7e6, 0x8152, 0xd07f, 0xa6cb, 0x3d17, 0x4ba3, ], [ 0x0000, 0xaa51, 0x4483, 0xeed2, 0x8906, 0x2357, 0xcd85, 0x67d4, 0x022d, 0xa87c, 0x46ae, 0xecff, 0x8b2b, 0x217a, 0xcfa8, 0x65f9, 0x045a, 0xae0b, 0x40d9, 0xea88, 0x8d5c, 0x270d, 0xc9df, 0x638e, 0x0677, 0xac26, 0x42f4, 0xe8a5, 0x8f71, 0x2520, 0xcbf2, 0x61a3, 0x08b4, 0xa2e5, 0x4c37, 0xe666, 0x81b2, 0x2be3, 0xc531, 0x6f60, 0x0a99, 0xa0c8, 0x4e1a, 0xe44b, 0x839f, 0x29ce, 0xc71c, 0x6d4d, 0x0cee, 0xa6bf, 0x486d, 0xe23c, 0x85e8, 0x2fb9, 0xc16b, 0x6b3a, 0x0ec3, 0xa492, 0x4a40, 0xe011, 0x87c5, 0x2d94, 0xc346, 0x6917, 0x1168, 0xbb39, 0x55eb, 0xffba, 0x986e, 0x323f, 0xdced, 0x76bc, 0x1345, 0xb914, 0x57c6, 0xfd97, 0x9a43, 0x3012, 0xdec0, 0x7491, 0x1532, 0xbf63, 0x51b1, 0xfbe0, 0x9c34, 0x3665, 0xd8b7, 0x72e6, 0x171f, 0xbd4e, 0x539c, 0xf9cd, 0x9e19, 0x3448, 0xda9a, 0x70cb, 0x19dc, 0xb38d, 0x5d5f, 0xf70e, 0x90da, 0x3a8b, 0xd459, 0x7e08, 0x1bf1, 0xb1a0, 0x5f72, 0xf523, 0x92f7, 0x38a6, 0xd674, 0x7c25, 0x1d86, 0xb7d7, 0x5905, 0xf354, 0x9480, 0x3ed1, 0xd003, 0x7a52, 0x1fab, 0xb5fa, 0x5b28, 0xf179, 0x96ad, 0x3cfc, 0xd22e, 0x787f, 0x22d0, 0x8881, 0x6653, 0xcc02, 0xabd6, 0x0187, 0xef55, 0x4504, 0x20fd, 0x8aac, 0x647e, 0xce2f, 0xa9fb, 0x03aa, 0xed78, 0x4729, 0x268a, 0x8cdb, 0x6209, 0xc858, 0xaf8c, 0x05dd, 0xeb0f, 0x415e, 0x24a7, 0x8ef6, 0x6024, 0xca75, 0xada1, 0x07f0, 0xe922, 0x4373, 0x2a64, 0x8035, 0x6ee7, 0xc4b6, 0xa362, 0x0933, 0xe7e1, 0x4db0, 0x2849, 0x8218, 0x6cca, 0xc69b, 0xa14f, 0x0b1e, 0xe5cc, 0x4f9d, 0x2e3e, 0x846f, 0x6abd, 0xc0ec, 0xa738, 0x0d69, 0xe3bb, 0x49ea, 0x2c13, 0x8642, 0x6890, 0xc2c1, 0xa515, 0x0f44, 0xe196, 0x4bc7, 0x33b8, 0x99e9, 0x773b, 0xdd6a, 0xbabe, 0x10ef, 0xfe3d, 0x546c, 0x3195, 0x9bc4, 0x7516, 0xdf47, 0xb893, 0x12c2, 0xfc10, 0x5641, 0x37e2, 0x9db3, 0x7361, 0xd930, 0xbee4, 0x14b5, 0xfa67, 0x5036, 0x35cf, 0x9f9e, 0x714c, 0xdb1d, 0xbcc9, 0x1698, 0xf84a, 0x521b, 0x3b0c, 0x915d, 0x7f8f, 0xd5de, 0xb20a, 0x185b, 0xf689, 0x5cd8, 0x3921, 0x9370, 0x7da2, 0xd7f3, 0xb027, 0x1a76, 0xf4a4, 0x5ef5, 0x3f56, 0x9507, 0x7bd5, 0xd184, 0xb650, 0x1c01, 0xf2d3, 0x5882, 0x3d7b, 0x972a, 0x79f8, 0xd3a9, 0xb47d, 0x1e2c, 0xf0fe, 0x5aaf, ], [ 0x0000, 0x45a0, 0x8b40, 0xcee0, 0x06a1, 0x4301, 0x8de1, 0xc841, 0x0d42, 0x48e2, 0x8602, 0xc3a2, 0x0be3, 0x4e43, 0x80a3, 0xc503, 0x1a84, 0x5f24, 0x91c4, 0xd464, 0x1c25, 0x5985, 0x9765, 0xd2c5, 0x17c6, 0x5266, 0x9c86, 0xd926, 0x1167, 0x54c7, 0x9a27, 0xdf87, 0x3508, 0x70a8, 0xbe48, 0xfbe8, 0x33a9, 0x7609, 0xb8e9, 0xfd49, 0x384a, 0x7dea, 0xb30a, 0xf6aa, 0x3eeb, 0x7b4b, 0xb5ab, 0xf00b, 0x2f8c, 0x6a2c, 0xa4cc, 0xe16c, 0x292d, 0x6c8d, 0xa26d, 0xe7cd, 0x22ce, 0x676e, 0xa98e, 0xec2e, 0x246f, 0x61cf, 0xaf2f, 0xea8f, 0x6a10, 0x2fb0, 0xe150, 0xa4f0, 0x6cb1, 0x2911, 0xe7f1, 0xa251, 0x6752, 0x22f2, 0xec12, 0xa9b2, 0x61f3, 0x2453, 0xeab3, 0xaf13, 0x7094, 0x3534, 0xfbd4, 0xbe74, 0x7635, 0x3395, 0xfd75, 0xb8d5, 0x7dd6, 0x3876, 0xf696, 0xb336, 0x7b77, 0x3ed7, 0xf037, 0xb597, 0x5f18, 0x1ab8, 0xd458, 0x91f8, 0x59b9, 0x1c19, 0xd2f9, 0x9759, 0x525a, 0x17fa, 0xd91a, 0x9cba, 0x54fb, 0x115b, 0xdfbb, 0x9a1b, 0x459c, 0x003c, 0xcedc, 0x8b7c, 0x433d, 0x069d, 0xc87d, 0x8ddd, 0x48de, 0x0d7e, 0xc39e, 0x863e, 0x4e7f, 0x0bdf, 0xc53f, 0x809f, 0xd420, 0x9180, 0x5f60, 0x1ac0, 0xd281, 0x9721, 0x59c1, 0x1c61, 0xd962, 0x9cc2, 0x5222, 0x1782, 0xdfc3, 0x9a63, 0x5483, 0x1123, 0xcea4, 0x8b04, 0x45e4, 0x0044, 0xc805, 0x8da5, 0x4345, 0x06e5, 0xc3e6, 0x8646, 0x48a6, 0x0d06, 0xc547, 0x80e7, 0x4e07, 0x0ba7, 0xe128, 0xa488, 0x6a68, 0x2fc8, 0xe789, 0xa229, 0x6cc9, 0x2969, 0xec6a, 0xa9ca, 0x672a, 0x228a, 0xeacb, 0xaf6b, 0x618b, 0x242b, 0xfbac, 0xbe0c, 0x70ec, 0x354c, 0xfd0d, 0xb8ad, 0x764d, 0x33ed, 0xf6ee, 0xb34e, 0x7dae, 0x380e, 0xf04f, 0xb5ef, 0x7b0f, 0x3eaf, 0xbe30, 0xfb90, 0x3570, 0x70d0, 0xb891, 0xfd31, 0x33d1, 0x7671, 0xb372, 0xf6d2, 0x3832, 0x7d92, 0xb5d3, 0xf073, 0x3e93, 0x7b33, 0xa4b4, 0xe114, 0x2ff4, 0x6a54, 0xa215, 0xe7b5, 0x2955, 0x6cf5, 0xa9f6, 0xec56, 0x22b6, 0x6716, 0xaf57, 0xeaf7, 0x2417, 0x61b7, 0x8b38, 0xce98, 0x0078, 0x45d8, 0x8d99, 0xc839, 0x06d9, 0x4379, 0x867a, 0xc3da, 0x0d3a, 0x489a, 0x80db, 0xc57b, 0x0b9b, 0x4e3b, 0x91bc, 0xd41c, 0x1afc, 0x5f5c, 0x971d, 0xd2bd, 0x1c5d, 0x59fd, 0x9cfe, 0xd95e, 0x17be, 0x521e, 0x9a5f, 0xdfff, 0x111f, 0x54bf, ], [ 0x0000, 0xb861, 0x60e3, 0xd882, 0xc1c6, 0x79a7, 0xa125, 0x1944, 0x93ad, 0x2bcc, 0xf34e, 0x4b2f, 0x526b, 0xea0a, 0x3288, 0x8ae9, 0x377b, 0x8f1a, 0x5798, 0xeff9, 0xf6bd, 0x4edc, 0x965e, 0x2e3f, 0xa4d6, 0x1cb7, 0xc435, 0x7c54, 0x6510, 0xdd71, 0x05f3, 0xbd92, 0x6ef6, 0xd697, 0x0e15, 0xb674, 0xaf30, 0x1751, 0xcfd3, 0x77b2, 0xfd5b, 0x453a, 0x9db8, 0x25d9, 0x3c9d, 0x84fc, 0x5c7e, 0xe41f, 0x598d, 0xe1ec, 0x396e, 0x810f, 0x984b, 0x202a, 0xf8a8, 0x40c9, 0xca20, 0x7241, 0xaac3, 0x12a2, 0x0be6, 0xb387, 0x6b05, 0xd364, 0xddec, 0x658d, 0xbd0f, 0x056e, 0x1c2a, 0xa44b, 0x7cc9, 0xc4a8, 0x4e41, 0xf620, 0x2ea2, 0x96c3, 0x8f87, 0x37e6, 0xef64, 0x5705, 0xea97, 0x52f6, 0x8a74, 0x3215, 0x2b51, 0x9330, 0x4bb2, 0xf3d3, 0x793a, 0xc15b, 0x19d9, 0xa1b8, 0xb8fc, 0x009d, 0xd81f, 0x607e, 0xb31a, 0x0b7b, 0xd3f9, 0x6b98, 0x72dc, 0xcabd, 0x123f, 0xaa5e, 0x20b7, 0x98d6, 0x4054, 0xf835, 0xe171, 0x5910, 0x8192, 0x39f3, 0x8461, 0x3c00, 0xe482, 0x5ce3, 0x45a7, 0xfdc6, 0x2544, 0x9d25, 0x17cc, 0xafad, 0x772f, 0xcf4e, 0xd60a, 0x6e6b, 0xb6e9, 0x0e88, 0xabf9, 0x1398, 0xcb1a, 0x737b, 0x6a3f, 0xd25e, 0x0adc, 0xb2bd, 0x3854, 0x8035, 0x58b7, 0xe0d6, 0xf992, 0x41f3, 0x9971, 0x2110, 0x9c82, 0x24e3, 0xfc61, 0x4400, 0x5d44, 0xe525, 0x3da7, 0x85c6, 0x0f2f, 0xb74e, 0x6fcc, 0xd7ad, 0xcee9, 0x7688, 0xae0a, 0x166b, 0xc50f, 0x7d6e, 0xa5ec, 0x1d8d, 0x04c9, 0xbca8, 0x642a, 0xdc4b, 0x56a2, 0xeec3, 0x3641, 0x8e20, 0x9764, 0x2f05, 0xf787, 0x4fe6, 0xf274, 0x4a15, 0x9297, 0x2af6, 0x33b2, 0x8bd3, 0x5351, 0xeb30, 0x61d9, 0xd9b8, 0x013a, 0xb95b, 0xa01f, 0x187e, 0xc0fc, 0x789d, 0x7615, 0xce74, 0x16f6, 0xae97, 0xb7d3, 0x0fb2, 0xd730, 0x6f51, 0xe5b8, 0x5dd9, 0x855b, 0x3d3a, 0x247e, 0x9c1f, 0x449d, 0xfcfc, 0x416e, 0xf90f, 0x218d, 0x99ec, 0x80a8, 0x38c9, 0xe04b, 0x582a, 0xd2c3, 0x6aa2, 0xb220, 0x0a41, 0x1305, 0xab64, 0x73e6, 0xcb87, 0x18e3, 0xa082, 0x7800, 0xc061, 0xd925, 0x6144, 0xb9c6, 0x01a7, 0x8b4e, 0x332f, 0xebad, 0x53cc, 0x4a88, 0xf2e9, 0x2a6b, 0x920a, 0x2f98, 0x97f9, 0x4f7b, 0xf71a, 0xee5e, 0x563f, 0x8ebd, 0x36dc, 0xbc35, 0x0454, 0xdcd6, 0x64b7, 0x7df3, 0xc592, 0x1d10, 0xa571, ], [ 0x0000, 0x47d3, 0x8fa6, 0xc875, 0x0f6d, 0x48be, 0x80cb, 0xc718, 0x1eda, 0x5909, 0x917c, 0xd6af, 0x11b7, 0x5664, 0x9e11, 0xd9c2, 0x3db4, 0x7a67, 0xb212, 0xf5c1, 0x32d9, 0x750a, 0xbd7f, 0xfaac, 0x236e, 0x64bd, 0xacc8, 0xeb1b, 0x2c03, 0x6bd0, 0xa3a5, 0xe476, 0x7b68, 0x3cbb, 0xf4ce, 0xb31d, 0x7405, 0x33d6, 0xfba3, 0xbc70, 0x65b2, 0x2261, 0xea14, 0xadc7, 0x6adf, 0x2d0c, 0xe579, 0xa2aa, 0x46dc, 0x010f, 0xc97a, 0x8ea9, 0x49b1, 0x0e62, 0xc617, 0x81c4, 0x5806, 0x1fd5, 0xd7a0, 0x9073, 0x576b, 0x10b8, 0xd8cd, 0x9f1e, 0xf6d0, 0xb103, 0x7976, 0x3ea5, 0xf9bd, 0xbe6e, 0x761b, 0x31c8, 0xe80a, 0xafd9, 0x67ac, 0x207f, 0xe767, 0xa0b4, 0x68c1, 0x2f12, 0xcb64, 0x8cb7, 0x44c2, 0x0311, 0xc409, 0x83da, 0x4baf, 0x0c7c, 0xd5be, 0x926d, 0x5a18, 0x1dcb, 0xdad3, 0x9d00, 0x5575, 0x12a6, 0x8db8, 0xca6b, 0x021e, 0x45cd, 0x82d5, 0xc506, 0x0d73, 0x4aa0, 0x9362, 0xd4b1, 0x1cc4, 0x5b17, 0x9c0f, 0xdbdc, 0x13a9, 0x547a, 0xb00c, 0xf7df, 0x3faa, 0x7879, 0xbf61, 0xf8b2, 0x30c7, 0x7714, 0xaed6, 0xe905, 0x2170, 0x66a3, 0xa1bb, 0xe668, 0x2e1d, 0x69ce, 0xfd81, 0xba52, 0x7227, 0x35f4, 0xf2ec, 0xb53f, 0x7d4a, 0x3a99, 0xe35b, 0xa488, 0x6cfd, 0x2b2e, 0xec36, 0xabe5, 0x6390, 0x2443, 0xc035, 0x87e6, 0x4f93, 0x0840, 0xcf58, 0x888b, 0x40fe, 0x072d, 0xdeef, 0x993c, 0x5149, 0x169a, 0xd182, 0x9651, 0x5e24, 0x19f7, 0x86e9, 0xc13a, 0x094f, 0x4e9c, 0x8984, 0xce57, 0x0622, 0x41f1, 0x9833, 0xdfe0, 0x1795, 0x5046, 0x975e, 0xd08d, 0x18f8, 0x5f2b, 0xbb5d, 0xfc8e, 0x34fb, 0x7328, 0xb430, 0xf3e3, 0x3b96, 0x7c45, 0xa587, 0xe254, 0x2a21, 0x6df2, 0xaaea, 0xed39, 0x254c, 0x629f, 0x0b51, 0x4c82, 0x84f7, 0xc324, 0x043c, 0x43ef, 0x8b9a, 0xcc49, 0x158b, 0x5258, 0x9a2d, 0xddfe, 0x1ae6, 0x5d35, 0x9540, 0xd293, 0x36e5, 0x7136, 0xb943, 0xfe90, 0x3988, 0x7e5b, 0xb62e, 0xf1fd, 0x283f, 0x6fec, 0xa799, 0xe04a, 0x2752, 0x6081, 0xa8f4, 0xef27, 0x7039, 0x37ea, 0xff9f, 0xb84c, 0x7f54, 0x3887, 0xf0f2, 0xb721, 0x6ee3, 0x2930, 0xe145, 0xa696, 0x618e, 0x265d, 0xee28, 0xa9fb, 0x4d8d, 0x0a5e, 0xc22b, 0x85f8, 0x42e0, 0x0533, 0xcd46, 0x8a95, 0x5357, 0x1484, 0xdcf1, 0x9b22, 0x5c3a, 0x1be9, 0xd39c, 0x944f, ], [ 0x0000, 0xeb23, 0xc667, 0x2d44, 0x9cef, 0x77cc, 0x5a88, 0xb1ab, 0x29ff, 0xc2dc, 0xef98, 0x04bb, 0xb510, 0x5e33, 0x7377, 0x9854, 0x53fe, 0xb8dd, 0x9599, 0x7eba, 0xcf11, 0x2432, 0x0976, 0xe255, 0x7a01, 0x9122, 0xbc66, 0x5745, 0xe6ee, 0x0dcd, 0x2089, 0xcbaa, 0xa7fc, 0x4cdf, 0x619b, 0x8ab8, 0x3b13, 0xd030, 0xfd74, 0x1657, 0x8e03, 0x6520, 0x4864, 0xa347, 0x12ec, 0xf9cf, 0xd48b, 0x3fa8, 0xf402, 0x1f21, 0x3265, 0xd946, 0x68ed, 0x83ce, 0xae8a, 0x45a9, 0xddfd, 0x36de, 0x1b9a, 0xf0b9, 0x4112, 0xaa31, 0x8775, 0x6c56, 0x5fd9, 0xb4fa, 0x99be, 0x729d, 0xc336, 0x2815, 0x0551, 0xee72, 0x7626, 0x9d05, 0xb041, 0x5b62, 0xeac9, 0x01ea, 0x2cae, 0xc78d, 0x0c27, 0xe704, 0xca40, 0x2163, 0x90c8, 0x7beb, 0x56af, 0xbd8c, 0x25d8, 0xcefb, 0xe3bf, 0x089c, 0xb937, 0x5214, 0x7f50, 0x9473, 0xf825, 0x1306, 0x3e42, 0xd561, 0x64ca, 0x8fe9, 0xa2ad, 0x498e, 0xd1da, 0x3af9, 0x17bd, 0xfc9e, 0x4d35, 0xa616, 0x8b52, 0x6071, 0xabdb, 0x40f8, 0x6dbc, 0x869f, 0x3734, 0xdc17, 0xf153, 0x1a70, 0x8224, 0x6907, 0x4443, 0xaf60, 0x1ecb, 0xf5e8, 0xd8ac, 0x338f, 0xbfb2, 0x5491, 0x79d5, 0x92f6, 0x235d, 0xc87e, 0xe53a, 0x0e19, 0x964d, 0x7d6e, 0x502a, 0xbb09, 0x0aa2, 0xe181, 0xccc5, 0x27e6, 0xec4c, 0x076f, 0x2a2b, 0xc108, 0x70a3, 0x9b80, 0xb6c4, 0x5de7, 0xc5b3, 0x2e90, 0x03d4, 0xe8f7, 0x595c, 0xb27f, 0x9f3b, 0x7418, 0x184e, 0xf36d, 0xde29, 0x350a, 0x84a1, 0x6f82, 0x42c6, 0xa9e5, 0x31b1, 0xda92, 0xf7d6, 0x1cf5, 0xad5e, 0x467d, 0x6b39, 0x801a, 0x4bb0, 0xa093, 0x8dd7, 0x66f4, 0xd75f, 0x3c7c, 0x1138, 0xfa1b, 0x624f, 0x896c, 0xa428, 0x4f0b, 0xfea0, 0x1583, 0x38c7, 0xd3e4, 0xe06b, 0x0b48, 0x260c, 0xcd2f, 0x7c84, 0x97a7, 0xbae3, 0x51c0, 0xc994, 0x22b7, 0x0ff3, 0xe4d0, 0x557b, 0xbe58, 0x931c, 0x783f, 0xb395, 0x58b6, 0x75f2, 0x9ed1, 0x2f7a, 0xc459, 0xe91d, 0x023e, 0x9a6a, 0x7149, 0x5c0d, 0xb72e, 0x0685, 0xeda6, 0xc0e2, 0x2bc1, 0x4797, 0xacb4, 0x81f0, 0x6ad3, 0xdb78, 0x305b, 0x1d1f, 0xf63c, 0x6e68, 0x854b, 0xa80f, 0x432c, 0xf287, 0x19a4, 0x34e0, 0xdfc3, 0x1469, 0xff4a, 0xd20e, 0x392d, 0x8886, 0x63a5, 0x4ee1, 0xa5c2, 0x3d96, 0xd6b5, 0xfbf1, 0x10d2, 0xa179, 0x4a5a, 0x671e, 0x8c3d, ], [ 0x0000, 0x6f45, 0xde8a, 0xb1cf, 0xad35, 0xc270, 0x73bf, 0x1cfa, 0x4a4b, 0x250e, 0x94c1, 0xfb84, 0xe77e, 0x883b, 0x39f4, 0x56b1, 0x9496, 0xfbd3, 0x4a1c, 0x2559, 0x39a3, 0x56e6, 0xe729, 0x886c, 0xdedd, 0xb198, 0x0057, 0x6f12, 0x73e8, 0x1cad, 0xad62, 0xc227, 0x390d, 0x5648, 0xe787, 0x88c2, 0x9438, 0xfb7d, 0x4ab2, 0x25f7, 0x7346, 0x1c03, 0xadcc, 0xc289, 0xde73, 0xb136, 0x00f9, 0x6fbc, 0xad9b, 0xc2de, 0x7311, 0x1c54, 0x00ae, 0x6feb, 0xde24, 0xb161, 0xe7d0, 0x8895, 0x395a, 0x561f, 0x4ae5, 0x25a0, 0x946f, 0xfb2a, 0x721a, 0x1d5f, 0xac90, 0xc3d5, 0xdf2f, 0xb06a, 0x01a5, 0x6ee0, 0x3851, 0x5714, 0xe6db, 0x899e, 0x9564, 0xfa21, 0x4bee, 0x24ab, 0xe68c, 0x89c9, 0x3806, 0x5743, 0x4bb9, 0x24fc, 0x9533, 0xfa76, 0xacc7, 0xc382, 0x724d, 0x1d08, 0x01f2, 0x6eb7, 0xdf78, 0xb03d, 0x4b17, 0x2452, 0x959d, 0xfad8, 0xe622, 0x8967, 0x38a8, 0x57ed, 0x015c, 0x6e19, 0xdfd6, 0xb093, 0xac69, 0xc32c, 0x72e3, 0x1da6, 0xdf81, 0xb0c4, 0x010b, 0x6e4e, 0x72b4, 0x1df1, 0xac3e, 0xc37b, 0x95ca, 0xfa8f, 0x4b40, 0x2405, 0x38ff, 0x57ba, 0xe675, 0x8930, 0xe434, 0x8b71, 0x3abe, 0x55fb, 0x4901, 0x2644, 0x978b, 0xf8ce, 0xae7f, 0xc13a, 0x70f5, 0x1fb0, 0x034a, 0x6c0f, 0xddc0, 0xb285, 0x70a2, 0x1fe7, 0xae28, 0xc16d, 0xdd97, 0xb2d2, 0x031d, 0x6c58, 0x3ae9, 0x55ac, 0xe463, 0x8b26, 0x97dc, 0xf899, 0x4956, 0x2613, 0xdd39, 0xb27c, 0x03b3, 0x6cf6, 0x700c, 0x1f49, 0xae86, 0xc1c3, 0x9772, 0xf837, 0x49f8, 0x26bd, 0x3a47, 0x5502, 0xe4cd, 0x8b88, 0x49af, 0x26ea, 0x9725, 0xf860, 0xe49a, 0x8bdf, 0x3a10, 0x5555, 0x03e4, 0x6ca1, 0xdd6e, 0xb22b, 0xaed1, 0xc194, 0x705b, 0x1f1e, 0x962e, 0xf96b, 0x48a4, 0x27e1, 0x3b1b, 0x545e, 0xe591, 0x8ad4, 0xdc65, 0xb320, 0x02ef, 0x6daa, 0x7150, 0x1e15, 0xafda, 0xc09f, 0x02b8, 0x6dfd, 0xdc32, 0xb377, 0xaf8d, 0xc0c8, 0x7107, 0x1e42, 0x48f3, 0x27b6, 0x9679, 0xf93c, 0xe5c6, 0x8a83, 0x3b4c, 0x5409, 0xaf23, 0xc066, 0x71a9, 0x1eec, 0x0216, 0x6d53, 0xdc9c, 0xb3d9, 0xe568, 0x8a2d, 0x3be2, 0x54a7, 0x485d, 0x2718, 0x96d7, 0xf992, 0x3bb5, 0x54f0, 0xe53f, 0x8a7a, 0x9680, 0xf9c5, 0x480a, 0x274f, 0x71fe, 0x1ebb, 0xaf74, 0xc031, 0xdccb, 0xb38e, 0x0241, 0x6d04, ], [ 0x0000, 0xd849, 0xa0b3, 0x78fa, 0x5147, 0x890e, 0xf1f4, 0x29bd, 0xa28e, 0x7ac7, 0x023d, 0xda74, 0xf3c9, 0x2b80, 0x537a, 0x8b33, 0x553d, 0x8d74, 0xf58e, 0x2dc7, 0x047a, 0xdc33, 0xa4c9, 0x7c80, 0xf7b3, 0x2ffa, 0x5700, 0x8f49, 0xa6f4, 0x7ebd, 0x0647, 0xde0e, 0xaa7a, 0x7233, 0x0ac9, 0xd280, 0xfb3d, 0x2374, 0x5b8e, 0x83c7, 0x08f4, 0xd0bd, 0xa847, 0x700e, 0x59b3, 0x81fa, 0xf900, 0x2149, 0xff47, 0x270e, 0x5ff4, 0x87bd, 0xae00, 0x7649, 0x0eb3, 0xd6fa, 0x5dc9, 0x8580, 0xfd7a, 0x2533, 0x0c8e, 0xd4c7, 0xac3d, 0x7474, 0x44d5, 0x9c9c, 0xe466, 0x3c2f, 0x1592, 0xcddb, 0xb521, 0x6d68, 0xe65b, 0x3e12, 0x46e8, 0x9ea1, 0xb71c, 0x6f55, 0x17af, 0xcfe6, 0x11e8, 0xc9a1, 0xb15b, 0x6912, 0x40af, 0x98e6, 0xe01c, 0x3855, 0xb366, 0x6b2f, 0x13d5, 0xcb9c, 0xe221, 0x3a68, 0x4292, 0x9adb, 0xeeaf, 0x36e6, 0x4e1c, 0x9655, 0xbfe8, 0x67a1, 0x1f5b, 0xc712, 0x4c21, 0x9468, 0xec92, 0x34db, 0x1d66, 0xc52f, 0xbdd5, 0x659c, 0xbb92, 0x63db, 0x1b21, 0xc368, 0xead5, 0x329c, 0x4a66, 0x922f, 0x191c, 0xc155, 0xb9af, 0x61e6, 0x485b, 0x9012, 0xe8e8, 0x30a1, 0x89aa, 0x51e3, 0x2919, 0xf150, 0xd8ed, 0x00a4, 0x785e, 0xa017, 0x2b24, 0xf36d, 0x8b97, 0x53de, 0x7a63, 0xa22a, 0xdad0, 0x0299, 0xdc97, 0x04de, 0x7c24, 0xa46d, 0x8dd0, 0x5599, 0x2d63, 0xf52a, 0x7e19, 0xa650, 0xdeaa, 0x06e3, 0x2f5e, 0xf717, 0x8fed, 0x57a4, 0x23d0, 0xfb99, 0x8363, 0x5b2a, 0x7297, 0xaade, 0xd224, 0x0a6d, 0x815e, 0x5917, 0x21ed, 0xf9a4, 0xd019, 0x0850, 0x70aa, 0xa8e3, 0x76ed, 0xaea4, 0xd65e, 0x0e17, 0x27aa, 0xffe3, 0x8719, 0x5f50, 0xd463, 0x0c2a, 0x74d0, 0xac99, 0x8524, 0x5d6d, 0x2597, 0xfdde, 0xcd7f, 0x1536, 0x6dcc, 0xb585, 0x9c38, 0x4471, 0x3c8b, 0xe4c2, 0x6ff1, 0xb7b8, 0xcf42, 0x170b, 0x3eb6, 0xe6ff, 0x9e05, 0x464c, 0x9842, 0x400b, 0x38f1, 0xe0b8, 0xc905, 0x114c, 0x69b6, 0xb1ff, 0x3acc, 0xe285, 0x9a7f, 0x4236, 0x6b8b, 0xb3c2, 0xcb38, 0x1371, 0x6705, 0xbf4c, 0xc7b6, 0x1fff, 0x3642, 0xee0b, 0x96f1, 0x4eb8, 0xc58b, 0x1dc2, 0x6538, 0xbd71, 0x94cc, 0x4c85, 0x347f, 0xec36, 0x3238, 0xea71, 0x928b, 0x4ac2, 0x637f, 0xbb36, 0xc3cc, 0x1b85, 0x90b6, 0x48ff, 0x3005, 0xe84c, 0xc1f1, 0x19b8, 0x6142, 0xb90b, ], [ 0x0000, 0x0375, 0x06ea, 0x059f, 0x0dd4, 0x0ea1, 0x0b3e, 0x084b, 0x1ba8, 0x18dd, 0x1d42, 0x1e37, 0x167c, 0x1509, 0x1096, 0x13e3, 0x3750, 0x3425, 0x31ba, 0x32cf, 0x3a84, 0x39f1, 0x3c6e, 0x3f1b, 0x2cf8, 0x2f8d, 0x2a12, 0x2967, 0x212c, 0x2259, 0x27c6, 0x24b3, 0x6ea0, 0x6dd5, 0x684a, 0x6b3f, 0x6374, 0x6001, 0x659e, 0x66eb, 0x7508, 0x767d, 0x73e2, 0x7097, 0x78dc, 0x7ba9, 0x7e36, 0x7d43, 0x59f0, 0x5a85, 0x5f1a, 0x5c6f, 0x5424, 0x5751, 0x52ce, 0x51bb, 0x4258, 0x412d, 0x44b2, 0x47c7, 0x4f8c, 0x4cf9, 0x4966, 0x4a13, 0xdd40, 0xde35, 0xdbaa, 0xd8df, 0xd094, 0xd3e1, 0xd67e, 0xd50b, 0xc6e8, 0xc59d, 0xc002, 0xc377, 0xcb3c, 0xc849, 0xcdd6, 0xcea3, 0xea10, 0xe965, 0xecfa, 0xef8f, 0xe7c4, 0xe4b1, 0xe12e, 0xe25b, 0xf1b8, 0xf2cd, 0xf752, 0xf427, 0xfc6c, 0xff19, 0xfa86, 0xf9f3, 0xb3e0, 0xb095, 0xb50a, 0xb67f, 0xbe34, 0xbd41, 0xb8de, 0xbbab, 0xa848, 0xab3d, 0xaea2, 0xadd7, 0xa59c, 0xa6e9, 0xa376, 0xa003, 0x84b0, 0x87c5, 0x825a, 0x812f, 0x8964, 0x8a11, 0x8f8e, 0x8cfb, 0x9f18, 0x9c6d, 0x99f2, 0x9a87, 0x92cc, 0x91b9, 0x9426, 0x9753, 0xaaa1, 0xa9d4, 0xac4b, 0xaf3e, 0xa775, 0xa400, 0xa19f, 0xa2ea, 0xb109, 0xb27c, 0xb7e3, 0xb496, 0xbcdd, 0xbfa8, 0xba37, 0xb942, 0x9df1, 0x9e84, 0x9b1b, 0x986e, 0x9025, 0x9350, 0x96cf, 0x95ba, 0x8659, 0x852c, 0x80b3, 0x83c6, 0x8b8d, 0x88f8, 0x8d67, 0x8e12, 0xc401, 0xc774, 0xc2eb, 0xc19e, 0xc9d5, 0xcaa0, 0xcf3f, 0xcc4a, 0xdfa9, 0xdcdc, 0xd943, 0xda36, 0xd27d, 0xd108, 0xd497, 0xd7e2, 0xf351, 0xf024, 0xf5bb, 0xf6ce, 0xfe85, 0xfdf0, 0xf86f, 0xfb1a, 0xe8f9, 0xeb8c, 0xee13, 0xed66, 0xe52d, 0xe658, 0xe3c7, 0xe0b2, 0x77e1, 0x7494, 0x710b, 0x727e, 0x7a35, 0x7940, 0x7cdf, 0x7faa, 0x6c49, 0x6f3c, 0x6aa3, 0x69d6, 0x619d, 0x62e8, 0x6777, 0x6402, 0x40b1, 0x43c4, 0x465b, 0x452e, 0x4d65, 0x4e10, 0x4b8f, 0x48fa, 0x5b19, 0x586c, 0x5df3, 0x5e86, 0x56cd, 0x55b8, 0x5027, 0x5352, 0x1941, 0x1a34, 0x1fab, 0x1cde, 0x1495, 0x17e0, 0x127f, 0x110a, 0x02e9, 0x019c, 0x0403, 0x0776, 0x0f3d, 0x0c48, 0x09d7, 0x0aa2, 0x2e11, 0x2d64, 0x28fb, 0x2b8e, 0x23c5, 0x20b0, 0x252f, 0x265a, 0x35b9, 0x36cc, 0x3353, 0x3026, 0x386d, 0x3b18, 0x3e87, 0x3df2, ], [ 0x0000, 0x4563, 0x8ac6, 0xcfa5, 0x05ad, 0x40ce, 0x8f6b, 0xca08, 0x0b5a, 0x4e39, 0x819c, 0xc4ff, 0x0ef7, 0x4b94, 0x8431, 0xc152, 0x16b4, 0x53d7, 0x9c72, 0xd911, 0x1319, 0x567a, 0x99df, 0xdcbc, 0x1dee, 0x588d, 0x9728, 0xd24b, 0x1843, 0x5d20, 0x9285, 0xd7e6, 0x2d68, 0x680b, 0xa7ae, 0xe2cd, 0x28c5, 0x6da6, 0xa203, 0xe760, 0x2632, 0x6351, 0xacf4, 0xe997, 0x239f, 0x66fc, 0xa959, 0xec3a, 0x3bdc, 0x7ebf, 0xb11a, 0xf479, 0x3e71, 0x7b12, 0xb4b7, 0xf1d4, 0x3086, 0x75e5, 0xba40, 0xff23, 0x352b, 0x7048, 0xbfed, 0xfa8e, 0x5ad0, 0x1fb3, 0xd016, 0x9575, 0x5f7d, 0x1a1e, 0xd5bb, 0x90d8, 0x518a, 0x14e9, 0xdb4c, 0x9e2f, 0x5427, 0x1144, 0xdee1, 0x9b82, 0x4c64, 0x0907, 0xc6a2, 0x83c1, 0x49c9, 0x0caa, 0xc30f, 0x866c, 0x473e, 0x025d, 0xcdf8, 0x889b, 0x4293, 0x07f0, 0xc855, 0x8d36, 0x77b8, 0x32db, 0xfd7e, 0xb81d, 0x7215, 0x3776, 0xf8d3, 0xbdb0, 0x7ce2, 0x3981, 0xf624, 0xb347, 0x794f, 0x3c2c, 0xf389, 0xb6ea, 0x610c, 0x246f, 0xebca, 0xaea9, 0x64a1, 0x21c2, 0xee67, 0xab04, 0x6a56, 0x2f35, 0xe090, 0xa5f3, 0x6ffb, 0x2a98, 0xe53d, 0xa05e, 0xb5a0, 0xf0c3, 0x3f66, 0x7a05, 0xb00d, 0xf56e, 0x3acb, 0x7fa8, 0xbefa, 0xfb99, 0x343c, 0x715f, 0xbb57, 0xfe34, 0x3191, 0x74f2, 0xa314, 0xe677, 0x29d2, 0x6cb1, 0xa6b9, 0xe3da, 0x2c7f, 0x691c, 0xa84e, 0xed2d, 0x2288, 0x67eb, 0xade3, 0xe880, 0x2725, 0x6246, 0x98c8, 0xddab, 0x120e, 0x576d, 0x9d65, 0xd806, 0x17a3, 0x52c0, 0x9392, 0xd6f1, 0x1954, 0x5c37, 0x963f, 0xd35c, 0x1cf9, 0x599a, 0x8e7c, 0xcb1f, 0x04ba, 0x41d9, 0x8bd1, 0xceb2, 0x0117, 0x4474, 0x8526, 0xc045, 0x0fe0, 0x4a83, 0x808b, 0xc5e8, 0x0a4d, 0x4f2e, 0xef70, 0xaa13, 0x65b6, 0x20d5, 0xeadd, 0xafbe, 0x601b, 0x2578, 0xe42a, 0xa149, 0x6eec, 0x2b8f, 0xe187, 0xa4e4, 0x6b41, 0x2e22, 0xf9c4, 0xbca7, 0x7302, 0x3661, 0xfc69, 0xb90a, 0x76af, 0x33cc, 0xf29e, 0xb7fd, 0x7858, 0x3d3b, 0xf733, 0xb250, 0x7df5, 0x3896, 0xc218, 0x877b, 0x48de, 0x0dbd, 0xc7b5, 0x82d6, 0x4d73, 0x0810, 0xc942, 0x8c21, 0x4384, 0x06e7, 0xccef, 0x898c, 0x4629, 0x034a, 0xd4ac, 0x91cf, 0x5e6a, 0x1b09, 0xd101, 0x9462, 0x5bc7, 0x1ea4, 0xdff6, 0x9a95, 0x5530, 0x1053, 0xda5b, 0x9f38, 0x509d, 0x15fe, ], [ 0x0000, 0x7b61, 0xf6c2, 0x8da3, 0xfda5, 0x86c4, 0x0b67, 0x7006, 0xeb6b, 0x900a, 0x1da9, 0x66c8, 0x16ce, 0x6daf, 0xe00c, 0x9b6d, 0xc6f7, 0xbd96, 0x3035, 0x4b54, 0x3b52, 0x4033, 0xcd90, 0xb6f1, 0x2d9c, 0x56fd, 0xdb5e, 0xa03f, 0xd039, 0xab58, 0x26fb, 0x5d9a, 0x9dcf, 0xe6ae, 0x6b0d, 0x106c, 0x606a, 0x1b0b, 0x96a8, 0xedc9, 0x76a4, 0x0dc5, 0x8066, 0xfb07, 0x8b01, 0xf060, 0x7dc3, 0x06a2, 0x5b38, 0x2059, 0xadfa, 0xd69b, 0xa69d, 0xddfc, 0x505f, 0x2b3e, 0xb053, 0xcb32, 0x4691, 0x3df0, 0x4df6, 0x3697, 0xbb34, 0xc055, 0x2bbf, 0x50de, 0xdd7d, 0xa61c, 0xd61a, 0xad7b, 0x20d8, 0x5bb9, 0xc0d4, 0xbbb5, 0x3616, 0x4d77, 0x3d71, 0x4610, 0xcbb3, 0xb0d2, 0xed48, 0x9629, 0x1b8a, 0x60eb, 0x10ed, 0x6b8c, 0xe62f, 0x9d4e, 0x0623, 0x7d42, 0xf0e1, 0x8b80, 0xfb86, 0x80e7, 0x0d44, 0x7625, 0xb670, 0xcd11, 0x40b2, 0x3bd3, 0x4bd5, 0x30b4, 0xbd17, 0xc676, 0x5d1b, 0x267a, 0xabd9, 0xd0b8, 0xa0be, 0xdbdf, 0x567c, 0x2d1d, 0x7087, 0x0be6, 0x8645, 0xfd24, 0x8d22, 0xf643, 0x7be0, 0x0081, 0x9bec, 0xe08d, 0x6d2e, 0x164f, 0x6649, 0x1d28, 0x908b, 0xebea, 0x577e, 0x2c1f, 0xa1bc, 0xdadd, 0xaadb, 0xd1ba, 0x5c19, 0x2778, 0xbc15, 0xc774, 0x4ad7, 0x31b6, 0x41b0, 0x3ad1, 0xb772, 0xcc13, 0x9189, 0xeae8, 0x674b, 0x1c2a, 0x6c2c, 0x174d, 0x9aee, 0xe18f, 0x7ae2, 0x0183, 0x8c20, 0xf741, 0x8747, 0xfc26, 0x7185, 0x0ae4, 0xcab1, 0xb1d0, 0x3c73, 0x4712, 0x3714, 0x4c75, 0xc1d6, 0xbab7, 0x21da, 0x5abb, 0xd718, 0xac79, 0xdc7f, 0xa71e, 0x2abd, 0x51dc, 0x0c46, 0x7727, 0xfa84, 0x81e5, 0xf1e3, 0x8a82, 0x0721, 0x7c40, 0xe72d, 0x9c4c, 0x11ef, 0x6a8e, 0x1a88, 0x61e9, 0xec4a, 0x972b, 0x7cc1, 0x07a0, 0x8a03, 0xf162, 0x8164, 0xfa05, 0x77a6, 0x0cc7, 0x97aa, 0xeccb, 0x6168, 0x1a09, 0x6a0f, 0x116e, 0x9ccd, 0xe7ac, 0xba36, 0xc157, 0x4cf4, 0x3795, 0x4793, 0x3cf2, 0xb151, 0xca30, 0x515d, 0x2a3c, 0xa79f, 0xdcfe, 0xacf8, 0xd799, 0x5a3a, 0x215b, 0xe10e, 0x9a6f, 0x17cc, 0x6cad, 0x1cab, 0x67ca, 0xea69, 0x9108, 0x0a65, 0x7104, 0xfca7, 0x87c6, 0xf7c0, 0x8ca1, 0x0102, 0x7a63, 0x27f9, 0x5c98, 0xd13b, 0xaa5a, 0xda5c, 0xa13d, 0x2c9e, 0x57ff, 0xcc92, 0xb7f3, 0x3a50, 0x4131, 0x3137, 0x4a56, 0xc7f5, 0xbc94, ], [ 0x0000, 0xaefc, 0x4dd9, 0xe325, 0x9bb2, 0x354e, 0xd66b, 0x7897, 0x2745, 0x89b9, 0x6a9c, 0xc460, 0xbcf7, 0x120b, 0xf12e, 0x5fd2, 0x4e8a, 0xe076, 0x0353, 0xadaf, 0xd538, 0x7bc4, 0x98e1, 0x361d, 0x69cf, 0xc733, 0x2416, 0x8aea, 0xf27d, 0x5c81, 0xbfa4, 0x1158, 0x9d14, 0x33e8, 0xd0cd, 0x7e31, 0x06a6, 0xa85a, 0x4b7f, 0xe583, 0xba51, 0x14ad, 0xf788, 0x5974, 0x21e3, 0x8f1f, 0x6c3a, 0xc2c6, 0xd39e, 0x7d62, 0x9e47, 0x30bb, 0x482c, 0xe6d0, 0x05f5, 0xab09, 0xf4db, 0x5a27, 0xb902, 0x17fe, 0x6f69, 0xc195, 0x22b0, 0x8c4c, 0x2a09, 0x84f5, 0x67d0, 0xc92c, 0xb1bb, 0x1f47, 0xfc62, 0x529e, 0x0d4c, 0xa3b0, 0x4095, 0xee69, 0x96fe, 0x3802, 0xdb27, 0x75db, 0x6483, 0xca7f, 0x295a, 0x87a6, 0xff31, 0x51cd, 0xb2e8, 0x1c14, 0x43c6, 0xed3a, 0x0e1f, 0xa0e3, 0xd874, 0x7688, 0x95ad, 0x3b51, 0xb71d, 0x19e1, 0xfac4, 0x5438, 0x2caf, 0x8253, 0x6176, 0xcf8a, 0x9058, 0x3ea4, 0xdd81, 0x737d, 0x0bea, 0xa516, 0x4633, 0xe8cf, 0xf997, 0x576b, 0xb44e, 0x1ab2, 0x6225, 0xccd9, 0x2ffc, 0x8100, 0xded2, 0x702e, 0x930b, 0x3df7, 0x4560, 0xeb9c, 0x08b9, 0xa645, 0x5412, 0xfaee, 0x19cb, 0xb737, 0xcfa0, 0x615c, 0x8279, 0x2c85, 0x7357, 0xddab, 0x3e8e, 0x9072, 0xe8e5, 0x4619, 0xa53c, 0x0bc0, 0x1a98, 0xb464, 0x5741, 0xf9bd, 0x812a, 0x2fd6, 0xccf3, 0x620f, 0x3ddd, 0x9321, 0x7004, 0xdef8, 0xa66f, 0x0893, 0xebb6, 0x454a, 0xc906, 0x67fa, 0x84df, 0x2a23, 0x52b4, 0xfc48, 0x1f6d, 0xb191, 0xee43, 0x40bf, 0xa39a, 0x0d66, 0x75f1, 0xdb0d, 0x3828, 0x96d4, 0x878c, 0x2970, 0xca55, 0x64a9, 0x1c3e, 0xb2c2, 0x51e7, 0xff1b, 0xa0c9, 0x0e35, 0xed10, 0x43ec, 0x3b7b, 0x9587, 0x76a2, 0xd85e, 0x7e1b, 0xd0e7, 0x33c2, 0x9d3e, 0xe5a9, 0x4b55, 0xa870, 0x068c, 0x595e, 0xf7a2, 0x1487, 0xba7b, 0xc2ec, 0x6c10, 0x8f35, 0x21c9, 0x3091, 0x9e6d, 0x7d48, 0xd3b4, 0xab23, 0x05df, 0xe6fa, 0x4806, 0x17d4, 0xb928, 0x5a0d, 0xf4f1, 0x8c66, 0x229a, 0xc1bf, 0x6f43, 0xe30f, 0x4df3, 0xaed6, 0x002a, 0x78bd, 0xd641, 0x3564, 0x9b98, 0xc44a, 0x6ab6, 0x8993, 0x276f, 0x5ff8, 0xf104, 0x1221, 0xbcdd, 0xad85, 0x0379, 0xe05c, 0x4ea0, 0x3637, 0x98cb, 0x7bee, 0xd512, 0x8ac0, 0x243c, 0xc719, 0x69e5, 0x1172, 0xbf8e, 0x5cab, 0xf257, ], [ 0x0000, 0xa824, 0x4069, 0xe84d, 0x80d2, 0x28f6, 0xc0bb, 0x689f, 0x1185, 0xb9a1, 0x51ec, 0xf9c8, 0x9157, 0x3973, 0xd13e, 0x791a, 0x230a, 0x8b2e, 0x6363, 0xcb47, 0xa3d8, 0x0bfc, 0xe3b1, 0x4b95, 0x328f, 0x9aab, 0x72e6, 0xdac2, 0xb25d, 0x1a79, 0xf234, 0x5a10, 0x4614, 0xee30, 0x067d, 0xae59, 0xc6c6, 0x6ee2, 0x86af, 0x2e8b, 0x5791, 0xffb5, 0x17f8, 0xbfdc, 0xd743, 0x7f67, 0x972a, 0x3f0e, 0x651e, 0xcd3a, 0x2577, 0x8d53, 0xe5cc, 0x4de8, 0xa5a5, 0x0d81, 0x749b, 0xdcbf, 0x34f2, 0x9cd6, 0xf449, 0x5c6d, 0xb420, 0x1c04, 0x8c28, 0x240c, 0xcc41, 0x6465, 0x0cfa, 0xa4de, 0x4c93, 0xe4b7, 0x9dad, 0x3589, 0xddc4, 0x75e0, 0x1d7f, 0xb55b, 0x5d16, 0xf532, 0xaf22, 0x0706, 0xef4b, 0x476f, 0x2ff0, 0x87d4, 0x6f99, 0xc7bd, 0xbea7, 0x1683, 0xfece, 0x56ea, 0x3e75, 0x9651, 0x7e1c, 0xd638, 0xca3c, 0x6218, 0x8a55, 0x2271, 0x4aee, 0xe2ca, 0x0a87, 0xa2a3, 0xdbb9, 0x739d, 0x9bd0, 0x33f4, 0x5b6b, 0xf34f, 0x1b02, 0xb326, 0xe936, 0x4112, 0xa95f, 0x017b, 0x69e4, 0xc1c0, 0x298d, 0x81a9, 0xf8b3, 0x5097, 0xb8da, 0x10fe, 0x7861, 0xd045, 0x3808, 0x902c, 0x0871, 0xa055, 0x4818, 0xe03c, 0x88a3, 0x2087, 0xc8ca, 0x60ee, 0x19f4, 0xb1d0, 0x599d, 0xf1b9, 0x9926, 0x3102, 0xd94f, 0x716b, 0x2b7b, 0x835f, 0x6b12, 0xc336, 0xaba9, 0x038d, 0xebc0, 0x43e4, 0x3afe, 0x92da, 0x7a97, 0xd2b3, 0xba2c, 0x1208, 0xfa45, 0x5261, 0x4e65, 0xe641, 0x0e0c, 0xa628, 0xceb7, 0x6693, 0x8ede, 0x26fa, 0x5fe0, 0xf7c4, 0x1f89, 0xb7ad, 0xdf32, 0x7716, 0x9f5b, 0x377f, 0x6d6f, 0xc54b, 0x2d06, 0x8522, 0xedbd, 0x4599, 0xadd4, 0x05f0, 0x7cea, 0xd4ce, 0x3c83, 0x94a7, 0xfc38, 0x541c, 0xbc51, 0x1475, 0x8459, 0x2c7d, 0xc430, 0x6c14, 0x048b, 0xacaf, 0x44e2, 0xecc6, 0x95dc, 0x3df8, 0xd5b5, 0x7d91, 0x150e, 0xbd2a, 0x5567, 0xfd43, 0xa753, 0x0f77, 0xe73a, 0x4f1e, 0x2781, 0x8fa5, 0x67e8, 0xcfcc, 0xb6d6, 0x1ef2, 0xf6bf, 0x5e9b, 0x3604, 0x9e20, 0x766d, 0xde49, 0xc24d, 0x6a69, 0x8224, 0x2a00, 0x429f, 0xeabb, 0x02f6, 0xaad2, 0xd3c8, 0x7bec, 0x93a1, 0x3b85, 0x531a, 0xfb3e, 0x1373, 0xbb57, 0xe147, 0x4963, 0xa12e, 0x090a, 0x6195, 0xc9b1, 0x21fc, 0x89d8, 0xf0c2, 0x58e6, 0xb0ab, 0x188f, 0x7010, 0xd834, 0x3079, 0x985d, ], ]; pub static CRC16_GSM_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, ], [ 0x0000, 0x3331, 0x6662, 0x5553, 0xccc4, 0xfff5, 0xaaa6, 0x9997, 0x89a9, 0xba98, 0xefcb, 0xdcfa, 0x456d, 0x765c, 0x230f, 0x103e, 0x0373, 0x3042, 0x6511, 0x5620, 0xcfb7, 0xfc86, 0xa9d5, 0x9ae4, 0x8ada, 0xb9eb, 0xecb8, 0xdf89, 0x461e, 0x752f, 0x207c, 0x134d, 0x06e6, 0x35d7, 0x6084, 0x53b5, 0xca22, 0xf913, 0xac40, 0x9f71, 0x8f4f, 0xbc7e, 0xe92d, 0xda1c, 0x438b, 0x70ba, 0x25e9, 0x16d8, 0x0595, 0x36a4, 0x63f7, 0x50c6, 0xc951, 0xfa60, 0xaf33, 0x9c02, 0x8c3c, 0xbf0d, 0xea5e, 0xd96f, 0x40f8, 0x73c9, 0x269a, 0x15ab, 0x0dcc, 0x3efd, 0x6bae, 0x589f, 0xc108, 0xf239, 0xa76a, 0x945b, 0x8465, 0xb754, 0xe207, 0xd136, 0x48a1, 0x7b90, 0x2ec3, 0x1df2, 0x0ebf, 0x3d8e, 0x68dd, 0x5bec, 0xc27b, 0xf14a, 0xa419, 0x9728, 0x8716, 0xb427, 0xe174, 0xd245, 0x4bd2, 0x78e3, 0x2db0, 0x1e81, 0x0b2a, 0x381b, 0x6d48, 0x5e79, 0xc7ee, 0xf4df, 0xa18c, 0x92bd, 0x8283, 0xb1b2, 0xe4e1, 0xd7d0, 0x4e47, 0x7d76, 0x2825, 0x1b14, 0x0859, 0x3b68, 0x6e3b, 0x5d0a, 0xc49d, 0xf7ac, 0xa2ff, 0x91ce, 0x81f0, 0xb2c1, 0xe792, 0xd4a3, 0x4d34, 0x7e05, 0x2b56, 0x1867, 0x1b98, 0x28a9, 0x7dfa, 0x4ecb, 0xd75c, 0xe46d, 0xb13e, 0x820f, 0x9231, 0xa100, 0xf453, 0xc762, 0x5ef5, 0x6dc4, 0x3897, 0x0ba6, 0x18eb, 0x2bda, 0x7e89, 0x4db8, 0xd42f, 0xe71e, 0xb24d, 0x817c, 0x9142, 0xa273, 0xf720, 0xc411, 0x5d86, 0x6eb7, 0x3be4, 0x08d5, 0x1d7e, 0x2e4f, 0x7b1c, 0x482d, 0xd1ba, 0xe28b, 0xb7d8, 0x84e9, 0x94d7, 0xa7e6, 0xf2b5, 0xc184, 0x5813, 0x6b22, 0x3e71, 0x0d40, 0x1e0d, 0x2d3c, 0x786f, 0x4b5e, 0xd2c9, 0xe1f8, 0xb4ab, 0x879a, 0x97a4, 0xa495, 0xf1c6, 0xc2f7, 0x5b60, 0x6851, 0x3d02, 0x0e33, 0x1654, 0x2565, 0x7036, 0x4307, 0xda90, 0xe9a1, 0xbcf2, 0x8fc3, 0x9ffd, 0xaccc, 0xf99f, 0xcaae, 0x5339, 0x6008, 0x355b, 0x066a, 0x1527, 0x2616, 0x7345, 0x4074, 0xd9e3, 0xead2, 0xbf81, 0x8cb0, 0x9c8e, 0xafbf, 0xfaec, 0xc9dd, 0x504a, 0x637b, 0x3628, 0x0519, 0x10b2, 0x2383, 0x76d0, 0x45e1, 0xdc76, 0xef47, 0xba14, 0x8925, 0x991b, 0xaa2a, 0xff79, 0xcc48, 0x55df, 0x66ee, 0x33bd, 0x008c, 0x13c1, 0x20f0, 0x75a3, 0x4692, 0xdf05, 0xec34, 0xb967, 0x8a56, 0x9a68, 0xa959, 0xfc0a, 0xcf3b, 0x56ac, 0x659d, 0x30ce, 0x03ff, ], [ 0x0000, 0x3730, 0x6e60, 0x5950, 0xdcc0, 0xebf0, 0xb2a0, 0x8590, 0xa9a1, 0x9e91, 0xc7c1, 0xf0f1, 0x7561, 0x4251, 0x1b01, 0x2c31, 0x4363, 0x7453, 0x2d03, 0x1a33, 0x9fa3, 0xa893, 0xf1c3, 0xc6f3, 0xeac2, 0xddf2, 0x84a2, 0xb392, 0x3602, 0x0132, 0x5862, 0x6f52, 0x86c6, 0xb1f6, 0xe8a6, 0xdf96, 0x5a06, 0x6d36, 0x3466, 0x0356, 0x2f67, 0x1857, 0x4107, 0x7637, 0xf3a7, 0xc497, 0x9dc7, 0xaaf7, 0xc5a5, 0xf295, 0xabc5, 0x9cf5, 0x1965, 0x2e55, 0x7705, 0x4035, 0x6c04, 0x5b34, 0x0264, 0x3554, 0xb0c4, 0x87f4, 0xdea4, 0xe994, 0x1dad, 0x2a9d, 0x73cd, 0x44fd, 0xc16d, 0xf65d, 0xaf0d, 0x983d, 0xb40c, 0x833c, 0xda6c, 0xed5c, 0x68cc, 0x5ffc, 0x06ac, 0x319c, 0x5ece, 0x69fe, 0x30ae, 0x079e, 0x820e, 0xb53e, 0xec6e, 0xdb5e, 0xf76f, 0xc05f, 0x990f, 0xae3f, 0x2baf, 0x1c9f, 0x45cf, 0x72ff, 0x9b6b, 0xac5b, 0xf50b, 0xc23b, 0x47ab, 0x709b, 0x29cb, 0x1efb, 0x32ca, 0x05fa, 0x5caa, 0x6b9a, 0xee0a, 0xd93a, 0x806a, 0xb75a, 0xd808, 0xef38, 0xb668, 0x8158, 0x04c8, 0x33f8, 0x6aa8, 0x5d98, 0x71a9, 0x4699, 0x1fc9, 0x28f9, 0xad69, 0x9a59, 0xc309, 0xf439, 0x3b5a, 0x0c6a, 0x553a, 0x620a, 0xe79a, 0xd0aa, 0x89fa, 0xbeca, 0x92fb, 0xa5cb, 0xfc9b, 0xcbab, 0x4e3b, 0x790b, 0x205b, 0x176b, 0x7839, 0x4f09, 0x1659, 0x2169, 0xa4f9, 0x93c9, 0xca99, 0xfda9, 0xd198, 0xe6a8, 0xbff8, 0x88c8, 0x0d58, 0x3a68, 0x6338, 0x5408, 0xbd9c, 0x8aac, 0xd3fc, 0xe4cc, 0x615c, 0x566c, 0x0f3c, 0x380c, 0x143d, 0x230d, 0x7a5d, 0x4d6d, 0xc8fd, 0xffcd, 0xa69d, 0x91ad, 0xfeff, 0xc9cf, 0x909f, 0xa7af, 0x223f, 0x150f, 0x4c5f, 0x7b6f, 0x575e, 0x606e, 0x393e, 0x0e0e, 0x8b9e, 0xbcae, 0xe5fe, 0xd2ce, 0x26f7, 0x11c7, 0x4897, 0x7fa7, 0xfa37, 0xcd07, 0x9457, 0xa367, 0x8f56, 0xb866, 0xe136, 0xd606, 0x5396, 0x64a6, 0x3df6, 0x0ac6, 0x6594, 0x52a4, 0x0bf4, 0x3cc4, 0xb954, 0x8e64, 0xd734, 0xe004, 0xcc35, 0xfb05, 0xa255, 0x9565, 0x10f5, 0x27c5, 0x7e95, 0x49a5, 0xa031, 0x9701, 0xce51, 0xf961, 0x7cf1, 0x4bc1, 0x1291, 0x25a1, 0x0990, 0x3ea0, 0x67f0, 0x50c0, 0xd550, 0xe260, 0xbb30, 0x8c00, 0xe352, 0xd462, 0x8d32, 0xba02, 0x3f92, 0x08a2, 0x51f2, 0x66c2, 0x4af3, 0x7dc3, 0x2493, 0x13a3, 0x9633, 0xa103, 0xf853, 0xcf63, ], [ 0x0000, 0x76b4, 0xed68, 0x9bdc, 0xcaf1, 0xbc45, 0x2799, 0x512d, 0x85c3, 0xf377, 0x68ab, 0x1e1f, 0x4f32, 0x3986, 0xa25a, 0xd4ee, 0x1ba7, 0x6d13, 0xf6cf, 0x807b, 0xd156, 0xa7e2, 0x3c3e, 0x4a8a, 0x9e64, 0xe8d0, 0x730c, 0x05b8, 0x5495, 0x2221, 0xb9fd, 0xcf49, 0x374e, 0x41fa, 0xda26, 0xac92, 0xfdbf, 0x8b0b, 0x10d7, 0x6663, 0xb28d, 0xc439, 0x5fe5, 0x2951, 0x787c, 0x0ec8, 0x9514, 0xe3a0, 0x2ce9, 0x5a5d, 0xc181, 0xb735, 0xe618, 0x90ac, 0x0b70, 0x7dc4, 0xa92a, 0xdf9e, 0x4442, 0x32f6, 0x63db, 0x156f, 0x8eb3, 0xf807, 0x6e9c, 0x1828, 0x83f4, 0xf540, 0xa46d, 0xd2d9, 0x4905, 0x3fb1, 0xeb5f, 0x9deb, 0x0637, 0x7083, 0x21ae, 0x571a, 0xccc6, 0xba72, 0x753b, 0x038f, 0x9853, 0xeee7, 0xbfca, 0xc97e, 0x52a2, 0x2416, 0xf0f8, 0x864c, 0x1d90, 0x6b24, 0x3a09, 0x4cbd, 0xd761, 0xa1d5, 0x59d2, 0x2f66, 0xb4ba, 0xc20e, 0x9323, 0xe597, 0x7e4b, 0x08ff, 0xdc11, 0xaaa5, 0x3179, 0x47cd, 0x16e0, 0x6054, 0xfb88, 0x8d3c, 0x4275, 0x34c1, 0xaf1d, 0xd9a9, 0x8884, 0xfe30, 0x65ec, 0x1358, 0xc7b6, 0xb102, 0x2ade, 0x5c6a, 0x0d47, 0x7bf3, 0xe02f, 0x969b, 0xdd38, 0xab8c, 0x3050, 0x46e4, 0x17c9, 0x617d, 0xfaa1, 0x8c15, 0x58fb, 0x2e4f, 0xb593, 0xc327, 0x920a, 0xe4be, 0x7f62, 0x09d6, 0xc69f, 0xb02b, 0x2bf7, 0x5d43, 0x0c6e, 0x7ada, 0xe106, 0x97b2, 0x435c, 0x35e8, 0xae34, 0xd880, 0x89ad, 0xff19, 0x64c5, 0x1271, 0xea76, 0x9cc2, 0x071e, 0x71aa, 0x2087, 0x5633, 0xcdef, 0xbb5b, 0x6fb5, 0x1901, 0x82dd, 0xf469, 0xa544, 0xd3f0, 0x482c, 0x3e98, 0xf1d1, 0x8765, 0x1cb9, 0x6a0d, 0x3b20, 0x4d94, 0xd648, 0xa0fc, 0x7412, 0x02a6, 0x997a, 0xefce, 0xbee3, 0xc857, 0x538b, 0x253f, 0xb3a4, 0xc510, 0x5ecc, 0x2878, 0x7955, 0x0fe1, 0x943d, 0xe289, 0x3667, 0x40d3, 0xdb0f, 0xadbb, 0xfc96, 0x8a22, 0x11fe, 0x674a, 0xa803, 0xdeb7, 0x456b, 0x33df, 0x62f2, 0x1446, 0x8f9a, 0xf92e, 0x2dc0, 0x5b74, 0xc0a8, 0xb61c, 0xe731, 0x9185, 0x0a59, 0x7ced, 0x84ea, 0xf25e, 0x6982, 0x1f36, 0x4e1b, 0x38af, 0xa373, 0xd5c7, 0x0129, 0x779d, 0xec41, 0x9af5, 0xcbd8, 0xbd6c, 0x26b0, 0x5004, 0x9f4d, 0xe9f9, 0x7225, 0x0491, 0x55bc, 0x2308, 0xb8d4, 0xce60, 0x1a8e, 0x6c3a, 0xf7e6, 0x8152, 0xd07f, 0xa6cb, 0x3d17, 0x4ba3, ], [ 0x0000, 0xaa51, 0x4483, 0xeed2, 0x8906, 0x2357, 0xcd85, 0x67d4, 0x022d, 0xa87c, 0x46ae, 0xecff, 0x8b2b, 0x217a, 0xcfa8, 0x65f9, 0x045a, 0xae0b, 0x40d9, 0xea88, 0x8d5c, 0x270d, 0xc9df, 0x638e, 0x0677, 0xac26, 0x42f4, 0xe8a5, 0x8f71, 0x2520, 0xcbf2, 0x61a3, 0x08b4, 0xa2e5, 0x4c37, 0xe666, 0x81b2, 0x2be3, 0xc531, 0x6f60, 0x0a99, 0xa0c8, 0x4e1a, 0xe44b, 0x839f, 0x29ce, 0xc71c, 0x6d4d, 0x0cee, 0xa6bf, 0x486d, 0xe23c, 0x85e8, 0x2fb9, 0xc16b, 0x6b3a, 0x0ec3, 0xa492, 0x4a40, 0xe011, 0x87c5, 0x2d94, 0xc346, 0x6917, 0x1168, 0xbb39, 0x55eb, 0xffba, 0x986e, 0x323f, 0xdced, 0x76bc, 0x1345, 0xb914, 0x57c6, 0xfd97, 0x9a43, 0x3012, 0xdec0, 0x7491, 0x1532, 0xbf63, 0x51b1, 0xfbe0, 0x9c34, 0x3665, 0xd8b7, 0x72e6, 0x171f, 0xbd4e, 0x539c, 0xf9cd, 0x9e19, 0x3448, 0xda9a, 0x70cb, 0x19dc, 0xb38d, 0x5d5f, 0xf70e, 0x90da, 0x3a8b, 0xd459, 0x7e08, 0x1bf1, 0xb1a0, 0x5f72, 0xf523, 0x92f7, 0x38a6, 0xd674, 0x7c25, 0x1d86, 0xb7d7, 0x5905, 0xf354, 0x9480, 0x3ed1, 0xd003, 0x7a52, 0x1fab, 0xb5fa, 0x5b28, 0xf179, 0x96ad, 0x3cfc, 0xd22e, 0x787f, 0x22d0, 0x8881, 0x6653, 0xcc02, 0xabd6, 0x0187, 0xef55, 0x4504, 0x20fd, 0x8aac, 0x647e, 0xce2f, 0xa9fb, 0x03aa, 0xed78, 0x4729, 0x268a, 0x8cdb, 0x6209, 0xc858, 0xaf8c, 0x05dd, 0xeb0f, 0x415e, 0x24a7, 0x8ef6, 0x6024, 0xca75, 0xada1, 0x07f0, 0xe922, 0x4373, 0x2a64, 0x8035, 0x6ee7, 0xc4b6, 0xa362, 0x0933, 0xe7e1, 0x4db0, 0x2849, 0x8218, 0x6cca, 0xc69b, 0xa14f, 0x0b1e, 0xe5cc, 0x4f9d, 0x2e3e, 0x846f, 0x6abd, 0xc0ec, 0xa738, 0x0d69, 0xe3bb, 0x49ea, 0x2c13, 0x8642, 0x6890, 0xc2c1, 0xa515, 0x0f44, 0xe196, 0x4bc7, 0x33b8, 0x99e9, 0x773b, 0xdd6a, 0xbabe, 0x10ef, 0xfe3d, 0x546c, 0x3195, 0x9bc4, 0x7516, 0xdf47, 0xb893, 0x12c2, 0xfc10, 0x5641, 0x37e2, 0x9db3, 0x7361, 0xd930, 0xbee4, 0x14b5, 0xfa67, 0x5036, 0x35cf, 0x9f9e, 0x714c, 0xdb1d, 0xbcc9, 0x1698, 0xf84a, 0x521b, 0x3b0c, 0x915d, 0x7f8f, 0xd5de, 0xb20a, 0x185b, 0xf689, 0x5cd8, 0x3921, 0x9370, 0x7da2, 0xd7f3, 0xb027, 0x1a76, 0xf4a4, 0x5ef5, 0x3f56, 0x9507, 0x7bd5, 0xd184, 0xb650, 0x1c01, 0xf2d3, 0x5882, 0x3d7b, 0x972a, 0x79f8, 0xd3a9, 0xb47d, 0x1e2c, 0xf0fe, 0x5aaf, ], [ 0x0000, 0x45a0, 0x8b40, 0xcee0, 0x06a1, 0x4301, 0x8de1, 0xc841, 0x0d42, 0x48e2, 0x8602, 0xc3a2, 0x0be3, 0x4e43, 0x80a3, 0xc503, 0x1a84, 0x5f24, 0x91c4, 0xd464, 0x1c25, 0x5985, 0x9765, 0xd2c5, 0x17c6, 0x5266, 0x9c86, 0xd926, 0x1167, 0x54c7, 0x9a27, 0xdf87, 0x3508, 0x70a8, 0xbe48, 0xfbe8, 0x33a9, 0x7609, 0xb8e9, 0xfd49, 0x384a, 0x7dea, 0xb30a, 0xf6aa, 0x3eeb, 0x7b4b, 0xb5ab, 0xf00b, 0x2f8c, 0x6a2c, 0xa4cc, 0xe16c, 0x292d, 0x6c8d, 0xa26d, 0xe7cd, 0x22ce, 0x676e, 0xa98e, 0xec2e, 0x246f, 0x61cf, 0xaf2f, 0xea8f, 0x6a10, 0x2fb0, 0xe150, 0xa4f0, 0x6cb1, 0x2911, 0xe7f1, 0xa251, 0x6752, 0x22f2, 0xec12, 0xa9b2, 0x61f3, 0x2453, 0xeab3, 0xaf13, 0x7094, 0x3534, 0xfbd4, 0xbe74, 0x7635, 0x3395, 0xfd75, 0xb8d5, 0x7dd6, 0x3876, 0xf696, 0xb336, 0x7b77, 0x3ed7, 0xf037, 0xb597, 0x5f18, 0x1ab8, 0xd458, 0x91f8, 0x59b9, 0x1c19, 0xd2f9, 0x9759, 0x525a, 0x17fa, 0xd91a, 0x9cba, 0x54fb, 0x115b, 0xdfbb, 0x9a1b, 0x459c, 0x003c, 0xcedc, 0x8b7c, 0x433d, 0x069d, 0xc87d, 0x8ddd, 0x48de, 0x0d7e, 0xc39e, 0x863e, 0x4e7f, 0x0bdf, 0xc53f, 0x809f, 0xd420, 0x9180, 0x5f60, 0x1ac0, 0xd281, 0x9721, 0x59c1, 0x1c61, 0xd962, 0x9cc2, 0x5222, 0x1782, 0xdfc3, 0x9a63, 0x5483, 0x1123, 0xcea4, 0x8b04, 0x45e4, 0x0044, 0xc805, 0x8da5, 0x4345, 0x06e5, 0xc3e6, 0x8646, 0x48a6, 0x0d06, 0xc547, 0x80e7, 0x4e07, 0x0ba7, 0xe128, 0xa488, 0x6a68, 0x2fc8, 0xe789, 0xa229, 0x6cc9, 0x2969, 0xec6a, 0xa9ca, 0x672a, 0x228a, 0xeacb, 0xaf6b, 0x618b, 0x242b, 0xfbac, 0xbe0c, 0x70ec, 0x354c, 0xfd0d, 0xb8ad, 0x764d, 0x33ed, 0xf6ee, 0xb34e, 0x7dae, 0x380e, 0xf04f, 0xb5ef, 0x7b0f, 0x3eaf, 0xbe30, 0xfb90, 0x3570, 0x70d0, 0xb891, 0xfd31, 0x33d1, 0x7671, 0xb372, 0xf6d2, 0x3832, 0x7d92, 0xb5d3, 0xf073, 0x3e93, 0x7b33, 0xa4b4, 0xe114, 0x2ff4, 0x6a54, 0xa215, 0xe7b5, 0x2955, 0x6cf5, 0xa9f6, 0xec56, 0x22b6, 0x6716, 0xaf57, 0xeaf7, 0x2417, 0x61b7, 0x8b38, 0xce98, 0x0078, 0x45d8, 0x8d99, 0xc839, 0x06d9, 0x4379, 0x867a, 0xc3da, 0x0d3a, 0x489a, 0x80db, 0xc57b, 0x0b9b, 0x4e3b, 0x91bc, 0xd41c, 0x1afc, 0x5f5c, 0x971d, 0xd2bd, 0x1c5d, 0x59fd, 0x9cfe, 0xd95e, 0x17be, 0x521e, 0x9a5f, 0xdfff, 0x111f, 0x54bf, ], [ 0x0000, 0xb861, 0x60e3, 0xd882, 0xc1c6, 0x79a7, 0xa125, 0x1944, 0x93ad, 0x2bcc, 0xf34e, 0x4b2f, 0x526b, 0xea0a, 0x3288, 0x8ae9, 0x377b, 0x8f1a, 0x5798, 0xeff9, 0xf6bd, 0x4edc, 0x965e, 0x2e3f, 0xa4d6, 0x1cb7, 0xc435, 0x7c54, 0x6510, 0xdd71, 0x05f3, 0xbd92, 0x6ef6, 0xd697, 0x0e15, 0xb674, 0xaf30, 0x1751, 0xcfd3, 0x77b2, 0xfd5b, 0x453a, 0x9db8, 0x25d9, 0x3c9d, 0x84fc, 0x5c7e, 0xe41f, 0x598d, 0xe1ec, 0x396e, 0x810f, 0x984b, 0x202a, 0xf8a8, 0x40c9, 0xca20, 0x7241, 0xaac3, 0x12a2, 0x0be6, 0xb387, 0x6b05, 0xd364, 0xddec, 0x658d, 0xbd0f, 0x056e, 0x1c2a, 0xa44b, 0x7cc9, 0xc4a8, 0x4e41, 0xf620, 0x2ea2, 0x96c3, 0x8f87, 0x37e6, 0xef64, 0x5705, 0xea97, 0x52f6, 0x8a74, 0x3215, 0x2b51, 0x9330, 0x4bb2, 0xf3d3, 0x793a, 0xc15b, 0x19d9, 0xa1b8, 0xb8fc, 0x009d, 0xd81f, 0x607e, 0xb31a, 0x0b7b, 0xd3f9, 0x6b98, 0x72dc, 0xcabd, 0x123f, 0xaa5e, 0x20b7, 0x98d6, 0x4054, 0xf835, 0xe171, 0x5910, 0x8192, 0x39f3, 0x8461, 0x3c00, 0xe482, 0x5ce3, 0x45a7, 0xfdc6, 0x2544, 0x9d25, 0x17cc, 0xafad, 0x772f, 0xcf4e, 0xd60a, 0x6e6b, 0xb6e9, 0x0e88, 0xabf9, 0x1398, 0xcb1a, 0x737b, 0x6a3f, 0xd25e, 0x0adc, 0xb2bd, 0x3854, 0x8035, 0x58b7, 0xe0d6, 0xf992, 0x41f3, 0x9971, 0x2110, 0x9c82, 0x24e3, 0xfc61, 0x4400, 0x5d44, 0xe525, 0x3da7, 0x85c6, 0x0f2f, 0xb74e, 0x6fcc, 0xd7ad, 0xcee9, 0x7688, 0xae0a, 0x166b, 0xc50f, 0x7d6e, 0xa5ec, 0x1d8d, 0x04c9, 0xbca8, 0x642a, 0xdc4b, 0x56a2, 0xeec3, 0x3641, 0x8e20, 0x9764, 0x2f05, 0xf787, 0x4fe6, 0xf274, 0x4a15, 0x9297, 0x2af6, 0x33b2, 0x8bd3, 0x5351, 0xeb30, 0x61d9, 0xd9b8, 0x013a, 0xb95b, 0xa01f, 0x187e, 0xc0fc, 0x789d, 0x7615, 0xce74, 0x16f6, 0xae97, 0xb7d3, 0x0fb2, 0xd730, 0x6f51, 0xe5b8, 0x5dd9, 0x855b, 0x3d3a, 0x247e, 0x9c1f, 0x449d, 0xfcfc, 0x416e, 0xf90f, 0x218d, 0x99ec, 0x80a8, 0x38c9, 0xe04b, 0x582a, 0xd2c3, 0x6aa2, 0xb220, 0x0a41, 0x1305, 0xab64, 0x73e6, 0xcb87, 0x18e3, 0xa082, 0x7800, 0xc061, 0xd925, 0x6144, 0xb9c6, 0x01a7, 0x8b4e, 0x332f, 0xebad, 0x53cc, 0x4a88, 0xf2e9, 0x2a6b, 0x920a, 0x2f98, 0x97f9, 0x4f7b, 0xf71a, 0xee5e, 0x563f, 0x8ebd, 0x36dc, 0xbc35, 0x0454, 0xdcd6, 0x64b7, 0x7df3, 0xc592, 0x1d10, 0xa571, ], [ 0x0000, 0x47d3, 0x8fa6, 0xc875, 0x0f6d, 0x48be, 0x80cb, 0xc718, 0x1eda, 0x5909, 0x917c, 0xd6af, 0x11b7, 0x5664, 0x9e11, 0xd9c2, 0x3db4, 0x7a67, 0xb212, 0xf5c1, 0x32d9, 0x750a, 0xbd7f, 0xfaac, 0x236e, 0x64bd, 0xacc8, 0xeb1b, 0x2c03, 0x6bd0, 0xa3a5, 0xe476, 0x7b68, 0x3cbb, 0xf4ce, 0xb31d, 0x7405, 0x33d6, 0xfba3, 0xbc70, 0x65b2, 0x2261, 0xea14, 0xadc7, 0x6adf, 0x2d0c, 0xe579, 0xa2aa, 0x46dc, 0x010f, 0xc97a, 0x8ea9, 0x49b1, 0x0e62, 0xc617, 0x81c4, 0x5806, 0x1fd5, 0xd7a0, 0x9073, 0x576b, 0x10b8, 0xd8cd, 0x9f1e, 0xf6d0, 0xb103, 0x7976, 0x3ea5, 0xf9bd, 0xbe6e, 0x761b, 0x31c8, 0xe80a, 0xafd9, 0x67ac, 0x207f, 0xe767, 0xa0b4, 0x68c1, 0x2f12, 0xcb64, 0x8cb7, 0x44c2, 0x0311, 0xc409, 0x83da, 0x4baf, 0x0c7c, 0xd5be, 0x926d, 0x5a18, 0x1dcb, 0xdad3, 0x9d00, 0x5575, 0x12a6, 0x8db8, 0xca6b, 0x021e, 0x45cd, 0x82d5, 0xc506, 0x0d73, 0x4aa0, 0x9362, 0xd4b1, 0x1cc4, 0x5b17, 0x9c0f, 0xdbdc, 0x13a9, 0x547a, 0xb00c, 0xf7df, 0x3faa, 0x7879, 0xbf61, 0xf8b2, 0x30c7, 0x7714, 0xaed6, 0xe905, 0x2170, 0x66a3, 0xa1bb, 0xe668, 0x2e1d, 0x69ce, 0xfd81, 0xba52, 0x7227, 0x35f4, 0xf2ec, 0xb53f, 0x7d4a, 0x3a99, 0xe35b, 0xa488, 0x6cfd, 0x2b2e, 0xec36, 0xabe5, 0x6390, 0x2443, 0xc035, 0x87e6, 0x4f93, 0x0840, 0xcf58, 0x888b, 0x40fe, 0x072d, 0xdeef, 0x993c, 0x5149, 0x169a, 0xd182, 0x9651, 0x5e24, 0x19f7, 0x86e9, 0xc13a, 0x094f, 0x4e9c, 0x8984, 0xce57, 0x0622, 0x41f1, 0x9833, 0xdfe0, 0x1795, 0x5046, 0x975e, 0xd08d, 0x18f8, 0x5f2b, 0xbb5d, 0xfc8e, 0x34fb, 0x7328, 0xb430, 0xf3e3, 0x3b96, 0x7c45, 0xa587, 0xe254, 0x2a21, 0x6df2, 0xaaea, 0xed39, 0x254c, 0x629f, 0x0b51, 0x4c82, 0x84f7, 0xc324, 0x043c, 0x43ef, 0x8b9a, 0xcc49, 0x158b, 0x5258, 0x9a2d, 0xddfe, 0x1ae6, 0x5d35, 0x9540, 0xd293, 0x36e5, 0x7136, 0xb943, 0xfe90, 0x3988, 0x7e5b, 0xb62e, 0xf1fd, 0x283f, 0x6fec, 0xa799, 0xe04a, 0x2752, 0x6081, 0xa8f4, 0xef27, 0x7039, 0x37ea, 0xff9f, 0xb84c, 0x7f54, 0x3887, 0xf0f2, 0xb721, 0x6ee3, 0x2930, 0xe145, 0xa696, 0x618e, 0x265d, 0xee28, 0xa9fb, 0x4d8d, 0x0a5e, 0xc22b, 0x85f8, 0x42e0, 0x0533, 0xcd46, 0x8a95, 0x5357, 0x1484, 0xdcf1, 0x9b22, 0x5c3a, 0x1be9, 0xd39c, 0x944f, ], [ 0x0000, 0xeb23, 0xc667, 0x2d44, 0x9cef, 0x77cc, 0x5a88, 0xb1ab, 0x29ff, 0xc2dc, 0xef98, 0x04bb, 0xb510, 0x5e33, 0x7377, 0x9854, 0x53fe, 0xb8dd, 0x9599, 0x7eba, 0xcf11, 0x2432, 0x0976, 0xe255, 0x7a01, 0x9122, 0xbc66, 0x5745, 0xe6ee, 0x0dcd, 0x2089, 0xcbaa, 0xa7fc, 0x4cdf, 0x619b, 0x8ab8, 0x3b13, 0xd030, 0xfd74, 0x1657, 0x8e03, 0x6520, 0x4864, 0xa347, 0x12ec, 0xf9cf, 0xd48b, 0x3fa8, 0xf402, 0x1f21, 0x3265, 0xd946, 0x68ed, 0x83ce, 0xae8a, 0x45a9, 0xddfd, 0x36de, 0x1b9a, 0xf0b9, 0x4112, 0xaa31, 0x8775, 0x6c56, 0x5fd9, 0xb4fa, 0x99be, 0x729d, 0xc336, 0x2815, 0x0551, 0xee72, 0x7626, 0x9d05, 0xb041, 0x5b62, 0xeac9, 0x01ea, 0x2cae, 0xc78d, 0x0c27, 0xe704, 0xca40, 0x2163, 0x90c8, 0x7beb, 0x56af, 0xbd8c, 0x25d8, 0xcefb, 0xe3bf, 0x089c, 0xb937, 0x5214, 0x7f50, 0x9473, 0xf825, 0x1306, 0x3e42, 0xd561, 0x64ca, 0x8fe9, 0xa2ad, 0x498e, 0xd1da, 0x3af9, 0x17bd, 0xfc9e, 0x4d35, 0xa616, 0x8b52, 0x6071, 0xabdb, 0x40f8, 0x6dbc, 0x869f, 0x3734, 0xdc17, 0xf153, 0x1a70, 0x8224, 0x6907, 0x4443, 0xaf60, 0x1ecb, 0xf5e8, 0xd8ac, 0x338f, 0xbfb2, 0x5491, 0x79d5, 0x92f6, 0x235d, 0xc87e, 0xe53a, 0x0e19, 0x964d, 0x7d6e, 0x502a, 0xbb09, 0x0aa2, 0xe181, 0xccc5, 0x27e6, 0xec4c, 0x076f, 0x2a2b, 0xc108, 0x70a3, 0x9b80, 0xb6c4, 0x5de7, 0xc5b3, 0x2e90, 0x03d4, 0xe8f7, 0x595c, 0xb27f, 0x9f3b, 0x7418, 0x184e, 0xf36d, 0xde29, 0x350a, 0x84a1, 0x6f82, 0x42c6, 0xa9e5, 0x31b1, 0xda92, 0xf7d6, 0x1cf5, 0xad5e, 0x467d, 0x6b39, 0x801a, 0x4bb0, 0xa093, 0x8dd7, 0x66f4, 0xd75f, 0x3c7c, 0x1138, 0xfa1b, 0x624f, 0x896c, 0xa428, 0x4f0b, 0xfea0, 0x1583, 0x38c7, 0xd3e4, 0xe06b, 0x0b48, 0x260c, 0xcd2f, 0x7c84, 0x97a7, 0xbae3, 0x51c0, 0xc994, 0x22b7, 0x0ff3, 0xe4d0, 0x557b, 0xbe58, 0x931c, 0x783f, 0xb395, 0x58b6, 0x75f2, 0x9ed1, 0x2f7a, 0xc459, 0xe91d, 0x023e, 0x9a6a, 0x7149, 0x5c0d, 0xb72e, 0x0685, 0xeda6, 0xc0e2, 0x2bc1, 0x4797, 0xacb4, 0x81f0, 0x6ad3, 0xdb78, 0x305b, 0x1d1f, 0xf63c, 0x6e68, 0x854b, 0xa80f, 0x432c, 0xf287, 0x19a4, 0x34e0, 0xdfc3, 0x1469, 0xff4a, 0xd20e, 0x392d, 0x8886, 0x63a5, 0x4ee1, 0xa5c2, 0x3d96, 0xd6b5, 0xfbf1, 0x10d2, 0xa179, 0x4a5a, 0x671e, 0x8c3d, ], [ 0x0000, 0x6f45, 0xde8a, 0xb1cf, 0xad35, 0xc270, 0x73bf, 0x1cfa, 0x4a4b, 0x250e, 0x94c1, 0xfb84, 0xe77e, 0x883b, 0x39f4, 0x56b1, 0x9496, 0xfbd3, 0x4a1c, 0x2559, 0x39a3, 0x56e6, 0xe729, 0x886c, 0xdedd, 0xb198, 0x0057, 0x6f12, 0x73e8, 0x1cad, 0xad62, 0xc227, 0x390d, 0x5648, 0xe787, 0x88c2, 0x9438, 0xfb7d, 0x4ab2, 0x25f7, 0x7346, 0x1c03, 0xadcc, 0xc289, 0xde73, 0xb136, 0x00f9, 0x6fbc, 0xad9b, 0xc2de, 0x7311, 0x1c54, 0x00ae, 0x6feb, 0xde24, 0xb161, 0xe7d0, 0x8895, 0x395a, 0x561f, 0x4ae5, 0x25a0, 0x946f, 0xfb2a, 0x721a, 0x1d5f, 0xac90, 0xc3d5, 0xdf2f, 0xb06a, 0x01a5, 0x6ee0, 0x3851, 0x5714, 0xe6db, 0x899e, 0x9564, 0xfa21, 0x4bee, 0x24ab, 0xe68c, 0x89c9, 0x3806, 0x5743, 0x4bb9, 0x24fc, 0x9533, 0xfa76, 0xacc7, 0xc382, 0x724d, 0x1d08, 0x01f2, 0x6eb7, 0xdf78, 0xb03d, 0x4b17, 0x2452, 0x959d, 0xfad8, 0xe622, 0x8967, 0x38a8, 0x57ed, 0x015c, 0x6e19, 0xdfd6, 0xb093, 0xac69, 0xc32c, 0x72e3, 0x1da6, 0xdf81, 0xb0c4, 0x010b, 0x6e4e, 0x72b4, 0x1df1, 0xac3e, 0xc37b, 0x95ca, 0xfa8f, 0x4b40, 0x2405, 0x38ff, 0x57ba, 0xe675, 0x8930, 0xe434, 0x8b71, 0x3abe, 0x55fb, 0x4901, 0x2644, 0x978b, 0xf8ce, 0xae7f, 0xc13a, 0x70f5, 0x1fb0, 0x034a, 0x6c0f, 0xddc0, 0xb285, 0x70a2, 0x1fe7, 0xae28, 0xc16d, 0xdd97, 0xb2d2, 0x031d, 0x6c58, 0x3ae9, 0x55ac, 0xe463, 0x8b26, 0x97dc, 0xf899, 0x4956, 0x2613, 0xdd39, 0xb27c, 0x03b3, 0x6cf6, 0x700c, 0x1f49, 0xae86, 0xc1c3, 0x9772, 0xf837, 0x49f8, 0x26bd, 0x3a47, 0x5502, 0xe4cd, 0x8b88, 0x49af, 0x26ea, 0x9725, 0xf860, 0xe49a, 0x8bdf, 0x3a10, 0x5555, 0x03e4, 0x6ca1, 0xdd6e, 0xb22b, 0xaed1, 0xc194, 0x705b, 0x1f1e, 0x962e, 0xf96b, 0x48a4, 0x27e1, 0x3b1b, 0x545e, 0xe591, 0x8ad4, 0xdc65, 0xb320, 0x02ef, 0x6daa, 0x7150, 0x1e15, 0xafda, 0xc09f, 0x02b8, 0x6dfd, 0xdc32, 0xb377, 0xaf8d, 0xc0c8, 0x7107, 0x1e42, 0x48f3, 0x27b6, 0x9679, 0xf93c, 0xe5c6, 0x8a83, 0x3b4c, 0x5409, 0xaf23, 0xc066, 0x71a9, 0x1eec, 0x0216, 0x6d53, 0xdc9c, 0xb3d9, 0xe568, 0x8a2d, 0x3be2, 0x54a7, 0x485d, 0x2718, 0x96d7, 0xf992, 0x3bb5, 0x54f0, 0xe53f, 0x8a7a, 0x9680, 0xf9c5, 0x480a, 0x274f, 0x71fe, 0x1ebb, 0xaf74, 0xc031, 0xdccb, 0xb38e, 0x0241, 0x6d04, ], [ 0x0000, 0xd849, 0xa0b3, 0x78fa, 0x5147, 0x890e, 0xf1f4, 0x29bd, 0xa28e, 0x7ac7, 0x023d, 0xda74, 0xf3c9, 0x2b80, 0x537a, 0x8b33, 0x553d, 0x8d74, 0xf58e, 0x2dc7, 0x047a, 0xdc33, 0xa4c9, 0x7c80, 0xf7b3, 0x2ffa, 0x5700, 0x8f49, 0xa6f4, 0x7ebd, 0x0647, 0xde0e, 0xaa7a, 0x7233, 0x0ac9, 0xd280, 0xfb3d, 0x2374, 0x5b8e, 0x83c7, 0x08f4, 0xd0bd, 0xa847, 0x700e, 0x59b3, 0x81fa, 0xf900, 0x2149, 0xff47, 0x270e, 0x5ff4, 0x87bd, 0xae00, 0x7649, 0x0eb3, 0xd6fa, 0x5dc9, 0x8580, 0xfd7a, 0x2533, 0x0c8e, 0xd4c7, 0xac3d, 0x7474, 0x44d5, 0x9c9c, 0xe466, 0x3c2f, 0x1592, 0xcddb, 0xb521, 0x6d68, 0xe65b, 0x3e12, 0x46e8, 0x9ea1, 0xb71c, 0x6f55, 0x17af, 0xcfe6, 0x11e8, 0xc9a1, 0xb15b, 0x6912, 0x40af, 0x98e6, 0xe01c, 0x3855, 0xb366, 0x6b2f, 0x13d5, 0xcb9c, 0xe221, 0x3a68, 0x4292, 0x9adb, 0xeeaf, 0x36e6, 0x4e1c, 0x9655, 0xbfe8, 0x67a1, 0x1f5b, 0xc712, 0x4c21, 0x9468, 0xec92, 0x34db, 0x1d66, 0xc52f, 0xbdd5, 0x659c, 0xbb92, 0x63db, 0x1b21, 0xc368, 0xead5, 0x329c, 0x4a66, 0x922f, 0x191c, 0xc155, 0xb9af, 0x61e6, 0x485b, 0x9012, 0xe8e8, 0x30a1, 0x89aa, 0x51e3, 0x2919, 0xf150, 0xd8ed, 0x00a4, 0x785e, 0xa017, 0x2b24, 0xf36d, 0x8b97, 0x53de, 0x7a63, 0xa22a, 0xdad0, 0x0299, 0xdc97, 0x04de, 0x7c24, 0xa46d, 0x8dd0, 0x5599, 0x2d63, 0xf52a, 0x7e19, 0xa650, 0xdeaa, 0x06e3, 0x2f5e, 0xf717, 0x8fed, 0x57a4, 0x23d0, 0xfb99, 0x8363, 0x5b2a, 0x7297, 0xaade, 0xd224, 0x0a6d, 0x815e, 0x5917, 0x21ed, 0xf9a4, 0xd019, 0x0850, 0x70aa, 0xa8e3, 0x76ed, 0xaea4, 0xd65e, 0x0e17, 0x27aa, 0xffe3, 0x8719, 0x5f50, 0xd463, 0x0c2a, 0x74d0, 0xac99, 0x8524, 0x5d6d, 0x2597, 0xfdde, 0xcd7f, 0x1536, 0x6dcc, 0xb585, 0x9c38, 0x4471, 0x3c8b, 0xe4c2, 0x6ff1, 0xb7b8, 0xcf42, 0x170b, 0x3eb6, 0xe6ff, 0x9e05, 0x464c, 0x9842, 0x400b, 0x38f1, 0xe0b8, 0xc905, 0x114c, 0x69b6, 0xb1ff, 0x3acc, 0xe285, 0x9a7f, 0x4236, 0x6b8b, 0xb3c2, 0xcb38, 0x1371, 0x6705, 0xbf4c, 0xc7b6, 0x1fff, 0x3642, 0xee0b, 0x96f1, 0x4eb8, 0xc58b, 0x1dc2, 0x6538, 0xbd71, 0x94cc, 0x4c85, 0x347f, 0xec36, 0x3238, 0xea71, 0x928b, 0x4ac2, 0x637f, 0xbb36, 0xc3cc, 0x1b85, 0x90b6, 0x48ff, 0x3005, 0xe84c, 0xc1f1, 0x19b8, 0x6142, 0xb90b, ], [ 0x0000, 0x0375, 0x06ea, 0x059f, 0x0dd4, 0x0ea1, 0x0b3e, 0x084b, 0x1ba8, 0x18dd, 0x1d42, 0x1e37, 0x167c, 0x1509, 0x1096, 0x13e3, 0x3750, 0x3425, 0x31ba, 0x32cf, 0x3a84, 0x39f1, 0x3c6e, 0x3f1b, 0x2cf8, 0x2f8d, 0x2a12, 0x2967, 0x212c, 0x2259, 0x27c6, 0x24b3, 0x6ea0, 0x6dd5, 0x684a, 0x6b3f, 0x6374, 0x6001, 0x659e, 0x66eb, 0x7508, 0x767d, 0x73e2, 0x7097, 0x78dc, 0x7ba9, 0x7e36, 0x7d43, 0x59f0, 0x5a85, 0x5f1a, 0x5c6f, 0x5424, 0x5751, 0x52ce, 0x51bb, 0x4258, 0x412d, 0x44b2, 0x47c7, 0x4f8c, 0x4cf9, 0x4966, 0x4a13, 0xdd40, 0xde35, 0xdbaa, 0xd8df, 0xd094, 0xd3e1, 0xd67e, 0xd50b, 0xc6e8, 0xc59d, 0xc002, 0xc377, 0xcb3c, 0xc849, 0xcdd6, 0xcea3, 0xea10, 0xe965, 0xecfa, 0xef8f, 0xe7c4, 0xe4b1, 0xe12e, 0xe25b, 0xf1b8, 0xf2cd, 0xf752, 0xf427, 0xfc6c, 0xff19, 0xfa86, 0xf9f3, 0xb3e0, 0xb095, 0xb50a, 0xb67f, 0xbe34, 0xbd41, 0xb8de, 0xbbab, 0xa848, 0xab3d, 0xaea2, 0xadd7, 0xa59c, 0xa6e9, 0xa376, 0xa003, 0x84b0, 0x87c5, 0x825a, 0x812f, 0x8964, 0x8a11, 0x8f8e, 0x8cfb, 0x9f18, 0x9c6d, 0x99f2, 0x9a87, 0x92cc, 0x91b9, 0x9426, 0x9753, 0xaaa1, 0xa9d4, 0xac4b, 0xaf3e, 0xa775, 0xa400, 0xa19f, 0xa2ea, 0xb109, 0xb27c, 0xb7e3, 0xb496, 0xbcdd, 0xbfa8, 0xba37, 0xb942, 0x9df1, 0x9e84, 0x9b1b, 0x986e, 0x9025, 0x9350, 0x96cf, 0x95ba, 0x8659, 0x852c, 0x80b3, 0x83c6, 0x8b8d, 0x88f8, 0x8d67, 0x8e12, 0xc401, 0xc774, 0xc2eb, 0xc19e, 0xc9d5, 0xcaa0, 0xcf3f, 0xcc4a, 0xdfa9, 0xdcdc, 0xd943, 0xda36, 0xd27d, 0xd108, 0xd497, 0xd7e2, 0xf351, 0xf024, 0xf5bb, 0xf6ce, 0xfe85, 0xfdf0, 0xf86f, 0xfb1a, 0xe8f9, 0xeb8c, 0xee13, 0xed66, 0xe52d, 0xe658, 0xe3c7, 0xe0b2, 0x77e1, 0x7494, 0x710b, 0x727e, 0x7a35, 0x7940, 0x7cdf, 0x7faa, 0x6c49, 0x6f3c, 0x6aa3, 0x69d6, 0x619d, 0x62e8, 0x6777, 0x6402, 0x40b1, 0x43c4, 0x465b, 0x452e, 0x4d65, 0x4e10, 0x4b8f, 0x48fa, 0x5b19, 0x586c, 0x5df3, 0x5e86, 0x56cd, 0x55b8, 0x5027, 0x5352, 0x1941, 0x1a34, 0x1fab, 0x1cde, 0x1495, 0x17e0, 0x127f, 0x110a, 0x02e9, 0x019c, 0x0403, 0x0776, 0x0f3d, 0x0c48, 0x09d7, 0x0aa2, 0x2e11, 0x2d64, 0x28fb, 0x2b8e, 0x23c5, 0x20b0, 0x252f, 0x265a, 0x35b9, 0x36cc, 0x3353, 0x3026, 0x386d, 0x3b18, 0x3e87, 0x3df2, ], [ 0x0000, 0x4563, 0x8ac6, 0xcfa5, 0x05ad, 0x40ce, 0x8f6b, 0xca08, 0x0b5a, 0x4e39, 0x819c, 0xc4ff, 0x0ef7, 0x4b94, 0x8431, 0xc152, 0x16b4, 0x53d7, 0x9c72, 0xd911, 0x1319, 0x567a, 0x99df, 0xdcbc, 0x1dee, 0x588d, 0x9728, 0xd24b, 0x1843, 0x5d20, 0x9285, 0xd7e6, 0x2d68, 0x680b, 0xa7ae, 0xe2cd, 0x28c5, 0x6da6, 0xa203, 0xe760, 0x2632, 0x6351, 0xacf4, 0xe997, 0x239f, 0x66fc, 0xa959, 0xec3a, 0x3bdc, 0x7ebf, 0xb11a, 0xf479, 0x3e71, 0x7b12, 0xb4b7, 0xf1d4, 0x3086, 0x75e5, 0xba40, 0xff23, 0x352b, 0x7048, 0xbfed, 0xfa8e, 0x5ad0, 0x1fb3, 0xd016, 0x9575, 0x5f7d, 0x1a1e, 0xd5bb, 0x90d8, 0x518a, 0x14e9, 0xdb4c, 0x9e2f, 0x5427, 0x1144, 0xdee1, 0x9b82, 0x4c64, 0x0907, 0xc6a2, 0x83c1, 0x49c9, 0x0caa, 0xc30f, 0x866c, 0x473e, 0x025d, 0xcdf8, 0x889b, 0x4293, 0x07f0, 0xc855, 0x8d36, 0x77b8, 0x32db, 0xfd7e, 0xb81d, 0x7215, 0x3776, 0xf8d3, 0xbdb0, 0x7ce2, 0x3981, 0xf624, 0xb347, 0x794f, 0x3c2c, 0xf389, 0xb6ea, 0x610c, 0x246f, 0xebca, 0xaea9, 0x64a1, 0x21c2, 0xee67, 0xab04, 0x6a56, 0x2f35, 0xe090, 0xa5f3, 0x6ffb, 0x2a98, 0xe53d, 0xa05e, 0xb5a0, 0xf0c3, 0x3f66, 0x7a05, 0xb00d, 0xf56e, 0x3acb, 0x7fa8, 0xbefa, 0xfb99, 0x343c, 0x715f, 0xbb57, 0xfe34, 0x3191, 0x74f2, 0xa314, 0xe677, 0x29d2, 0x6cb1, 0xa6b9, 0xe3da, 0x2c7f, 0x691c, 0xa84e, 0xed2d, 0x2288, 0x67eb, 0xade3, 0xe880, 0x2725, 0x6246, 0x98c8, 0xddab, 0x120e, 0x576d, 0x9d65, 0xd806, 0x17a3, 0x52c0, 0x9392, 0xd6f1, 0x1954, 0x5c37, 0x963f, 0xd35c, 0x1cf9, 0x599a, 0x8e7c, 0xcb1f, 0x04ba, 0x41d9, 0x8bd1, 0xceb2, 0x0117, 0x4474, 0x8526, 0xc045, 0x0fe0, 0x4a83, 0x808b, 0xc5e8, 0x0a4d, 0x4f2e, 0xef70, 0xaa13, 0x65b6, 0x20d5, 0xeadd, 0xafbe, 0x601b, 0x2578, 0xe42a, 0xa149, 0x6eec, 0x2b8f, 0xe187, 0xa4e4, 0x6b41, 0x2e22, 0xf9c4, 0xbca7, 0x7302, 0x3661, 0xfc69, 0xb90a, 0x76af, 0x33cc, 0xf29e, 0xb7fd, 0x7858, 0x3d3b, 0xf733, 0xb250, 0x7df5, 0x3896, 0xc218, 0x877b, 0x48de, 0x0dbd, 0xc7b5, 0x82d6, 0x4d73, 0x0810, 0xc942, 0x8c21, 0x4384, 0x06e7, 0xccef, 0x898c, 0x4629, 0x034a, 0xd4ac, 0x91cf, 0x5e6a, 0x1b09, 0xd101, 0x9462, 0x5bc7, 0x1ea4, 0xdff6, 0x9a95, 0x5530, 0x1053, 0xda5b, 0x9f38, 0x509d, 0x15fe, ], [ 0x0000, 0x7b61, 0xf6c2, 0x8da3, 0xfda5, 0x86c4, 0x0b67, 0x7006, 0xeb6b, 0x900a, 0x1da9, 0x66c8, 0x16ce, 0x6daf, 0xe00c, 0x9b6d, 0xc6f7, 0xbd96, 0x3035, 0x4b54, 0x3b52, 0x4033, 0xcd90, 0xb6f1, 0x2d9c, 0x56fd, 0xdb5e, 0xa03f, 0xd039, 0xab58, 0x26fb, 0x5d9a, 0x9dcf, 0xe6ae, 0x6b0d, 0x106c, 0x606a, 0x1b0b, 0x96a8, 0xedc9, 0x76a4, 0x0dc5, 0x8066, 0xfb07, 0x8b01, 0xf060, 0x7dc3, 0x06a2, 0x5b38, 0x2059, 0xadfa, 0xd69b, 0xa69d, 0xddfc, 0x505f, 0x2b3e, 0xb053, 0xcb32, 0x4691, 0x3df0, 0x4df6, 0x3697, 0xbb34, 0xc055, 0x2bbf, 0x50de, 0xdd7d, 0xa61c, 0xd61a, 0xad7b, 0x20d8, 0x5bb9, 0xc0d4, 0xbbb5, 0x3616, 0x4d77, 0x3d71, 0x4610, 0xcbb3, 0xb0d2, 0xed48, 0x9629, 0x1b8a, 0x60eb, 0x10ed, 0x6b8c, 0xe62f, 0x9d4e, 0x0623, 0x7d42, 0xf0e1, 0x8b80, 0xfb86, 0x80e7, 0x0d44, 0x7625, 0xb670, 0xcd11, 0x40b2, 0x3bd3, 0x4bd5, 0x30b4, 0xbd17, 0xc676, 0x5d1b, 0x267a, 0xabd9, 0xd0b8, 0xa0be, 0xdbdf, 0x567c, 0x2d1d, 0x7087, 0x0be6, 0x8645, 0xfd24, 0x8d22, 0xf643, 0x7be0, 0x0081, 0x9bec, 0xe08d, 0x6d2e, 0x164f, 0x6649, 0x1d28, 0x908b, 0xebea, 0x577e, 0x2c1f, 0xa1bc, 0xdadd, 0xaadb, 0xd1ba, 0x5c19, 0x2778, 0xbc15, 0xc774, 0x4ad7, 0x31b6, 0x41b0, 0x3ad1, 0xb772, 0xcc13, 0x9189, 0xeae8, 0x674b, 0x1c2a, 0x6c2c, 0x174d, 0x9aee, 0xe18f, 0x7ae2, 0x0183, 0x8c20, 0xf741, 0x8747, 0xfc26, 0x7185, 0x0ae4, 0xcab1, 0xb1d0, 0x3c73, 0x4712, 0x3714, 0x4c75, 0xc1d6, 0xbab7, 0x21da, 0x5abb, 0xd718, 0xac79, 0xdc7f, 0xa71e, 0x2abd, 0x51dc, 0x0c46, 0x7727, 0xfa84, 0x81e5, 0xf1e3, 0x8a82, 0x0721, 0x7c40, 0xe72d, 0x9c4c, 0x11ef, 0x6a8e, 0x1a88, 0x61e9, 0xec4a, 0x972b, 0x7cc1, 0x07a0, 0x8a03, 0xf162, 0x8164, 0xfa05, 0x77a6, 0x0cc7, 0x97aa, 0xeccb, 0x6168, 0x1a09, 0x6a0f, 0x116e, 0x9ccd, 0xe7ac, 0xba36, 0xc157, 0x4cf4, 0x3795, 0x4793, 0x3cf2, 0xb151, 0xca30, 0x515d, 0x2a3c, 0xa79f, 0xdcfe, 0xacf8, 0xd799, 0x5a3a, 0x215b, 0xe10e, 0x9a6f, 0x17cc, 0x6cad, 0x1cab, 0x67ca, 0xea69, 0x9108, 0x0a65, 0x7104, 0xfca7, 0x87c6, 0xf7c0, 0x8ca1, 0x0102, 0x7a63, 0x27f9, 0x5c98, 0xd13b, 0xaa5a, 0xda5c, 0xa13d, 0x2c9e, 0x57ff, 0xcc92, 0xb7f3, 0x3a50, 0x4131, 0x3137, 0x4a56, 0xc7f5, 0xbc94, ], [ 0x0000, 0xaefc, 0x4dd9, 0xe325, 0x9bb2, 0x354e, 0xd66b, 0x7897, 0x2745, 0x89b9, 0x6a9c, 0xc460, 0xbcf7, 0x120b, 0xf12e, 0x5fd2, 0x4e8a, 0xe076, 0x0353, 0xadaf, 0xd538, 0x7bc4, 0x98e1, 0x361d, 0x69cf, 0xc733, 0x2416, 0x8aea, 0xf27d, 0x5c81, 0xbfa4, 0x1158, 0x9d14, 0x33e8, 0xd0cd, 0x7e31, 0x06a6, 0xa85a, 0x4b7f, 0xe583, 0xba51, 0x14ad, 0xf788, 0x5974, 0x21e3, 0x8f1f, 0x6c3a, 0xc2c6, 0xd39e, 0x7d62, 0x9e47, 0x30bb, 0x482c, 0xe6d0, 0x05f5, 0xab09, 0xf4db, 0x5a27, 0xb902, 0x17fe, 0x6f69, 0xc195, 0x22b0, 0x8c4c, 0x2a09, 0x84f5, 0x67d0, 0xc92c, 0xb1bb, 0x1f47, 0xfc62, 0x529e, 0x0d4c, 0xa3b0, 0x4095, 0xee69, 0x96fe, 0x3802, 0xdb27, 0x75db, 0x6483, 0xca7f, 0x295a, 0x87a6, 0xff31, 0x51cd, 0xb2e8, 0x1c14, 0x43c6, 0xed3a, 0x0e1f, 0xa0e3, 0xd874, 0x7688, 0x95ad, 0x3b51, 0xb71d, 0x19e1, 0xfac4, 0x5438, 0x2caf, 0x8253, 0x6176, 0xcf8a, 0x9058, 0x3ea4, 0xdd81, 0x737d, 0x0bea, 0xa516, 0x4633, 0xe8cf, 0xf997, 0x576b, 0xb44e, 0x1ab2, 0x6225, 0xccd9, 0x2ffc, 0x8100, 0xded2, 0x702e, 0x930b, 0x3df7, 0x4560, 0xeb9c, 0x08b9, 0xa645, 0x5412, 0xfaee, 0x19cb, 0xb737, 0xcfa0, 0x615c, 0x8279, 0x2c85, 0x7357, 0xddab, 0x3e8e, 0x9072, 0xe8e5, 0x4619, 0xa53c, 0x0bc0, 0x1a98, 0xb464, 0x5741, 0xf9bd, 0x812a, 0x2fd6, 0xccf3, 0x620f, 0x3ddd, 0x9321, 0x7004, 0xdef8, 0xa66f, 0x0893, 0xebb6, 0x454a, 0xc906, 0x67fa, 0x84df, 0x2a23, 0x52b4, 0xfc48, 0x1f6d, 0xb191, 0xee43, 0x40bf, 0xa39a, 0x0d66, 0x75f1, 0xdb0d, 0x3828, 0x96d4, 0x878c, 0x2970, 0xca55, 0x64a9, 0x1c3e, 0xb2c2, 0x51e7, 0xff1b, 0xa0c9, 0x0e35, 0xed10, 0x43ec, 0x3b7b, 0x9587, 0x76a2, 0xd85e, 0x7e1b, 0xd0e7, 0x33c2, 0x9d3e, 0xe5a9, 0x4b55, 0xa870, 0x068c, 0x595e, 0xf7a2, 0x1487, 0xba7b, 0xc2ec, 0x6c10, 0x8f35, 0x21c9, 0x3091, 0x9e6d, 0x7d48, 0xd3b4, 0xab23, 0x05df, 0xe6fa, 0x4806, 0x17d4, 0xb928, 0x5a0d, 0xf4f1, 0x8c66, 0x229a, 0xc1bf, 0x6f43, 0xe30f, 0x4df3, 0xaed6, 0x002a, 0x78bd, 0xd641, 0x3564, 0x9b98, 0xc44a, 0x6ab6, 0x8993, 0x276f, 0x5ff8, 0xf104, 0x1221, 0xbcdd, 0xad85, 0x0379, 0xe05c, 0x4ea0, 0x3637, 0x98cb, 0x7bee, 0xd512, 0x8ac0, 0x243c, 0xc719, 0x69e5, 0x1172, 0xbf8e, 0x5cab, 0xf257, ], [ 0x0000, 0xa824, 0x4069, 0xe84d, 0x80d2, 0x28f6, 0xc0bb, 0x689f, 0x1185, 0xb9a1, 0x51ec, 0xf9c8, 0x9157, 0x3973, 0xd13e, 0x791a, 0x230a, 0x8b2e, 0x6363, 0xcb47, 0xa3d8, 0x0bfc, 0xe3b1, 0x4b95, 0x328f, 0x9aab, 0x72e6, 0xdac2, 0xb25d, 0x1a79, 0xf234, 0x5a10, 0x4614, 0xee30, 0x067d, 0xae59, 0xc6c6, 0x6ee2, 0x86af, 0x2e8b, 0x5791, 0xffb5, 0x17f8, 0xbfdc, 0xd743, 0x7f67, 0x972a, 0x3f0e, 0x651e, 0xcd3a, 0x2577, 0x8d53, 0xe5cc, 0x4de8, 0xa5a5, 0x0d81, 0x749b, 0xdcbf, 0x34f2, 0x9cd6, 0xf449, 0x5c6d, 0xb420, 0x1c04, 0x8c28, 0x240c, 0xcc41, 0x6465, 0x0cfa, 0xa4de, 0x4c93, 0xe4b7, 0x9dad, 0x3589, 0xddc4, 0x75e0, 0x1d7f, 0xb55b, 0x5d16, 0xf532, 0xaf22, 0x0706, 0xef4b, 0x476f, 0x2ff0, 0x87d4, 0x6f99, 0xc7bd, 0xbea7, 0x1683, 0xfece, 0x56ea, 0x3e75, 0x9651, 0x7e1c, 0xd638, 0xca3c, 0x6218, 0x8a55, 0x2271, 0x4aee, 0xe2ca, 0x0a87, 0xa2a3, 0xdbb9, 0x739d, 0x9bd0, 0x33f4, 0x5b6b, 0xf34f, 0x1b02, 0xb326, 0xe936, 0x4112, 0xa95f, 0x017b, 0x69e4, 0xc1c0, 0x298d, 0x81a9, 0xf8b3, 0x5097, 0xb8da, 0x10fe, 0x7861, 0xd045, 0x3808, 0x902c, 0x0871, 0xa055, 0x4818, 0xe03c, 0x88a3, 0x2087, 0xc8ca, 0x60ee, 0x19f4, 0xb1d0, 0x599d, 0xf1b9, 0x9926, 0x3102, 0xd94f, 0x716b, 0x2b7b, 0x835f, 0x6b12, 0xc336, 0xaba9, 0x038d, 0xebc0, 0x43e4, 0x3afe, 0x92da, 0x7a97, 0xd2b3, 0xba2c, 0x1208, 0xfa45, 0x5261, 0x4e65, 0xe641, 0x0e0c, 0xa628, 0xceb7, 0x6693, 0x8ede, 0x26fa, 0x5fe0, 0xf7c4, 0x1f89, 0xb7ad, 0xdf32, 0x7716, 0x9f5b, 0x377f, 0x6d6f, 0xc54b, 0x2d06, 0x8522, 0xedbd, 0x4599, 0xadd4, 0x05f0, 0x7cea, 0xd4ce, 0x3c83, 0x94a7, 0xfc38, 0x541c, 0xbc51, 0x1475, 0x8459, 0x2c7d, 0xc430, 0x6c14, 0x048b, 0xacaf, 0x44e2, 0xecc6, 0x95dc, 0x3df8, 0xd5b5, 0x7d91, 0x150e, 0xbd2a, 0x5567, 0xfd43, 0xa753, 0x0f77, 0xe73a, 0x4f1e, 0x2781, 0x8fa5, 0x67e8, 0xcfcc, 0xb6d6, 0x1ef2, 0xf6bf, 0x5e9b, 0x3604, 0x9e20, 0x766d, 0xde49, 0xc24d, 0x6a69, 0x8224, 0x2a00, 0x429f, 0xeabb, 0x02f6, 0xaad2, 0xd3c8, 0x7bec, 0x93a1, 0x3b85, 0x531a, 0xfb3e, 0x1373, 0xbb57, 0xe147, 0x4963, 0xa12e, 0x090a, 0x6195, 0xc9b1, 0x21fc, 0x89d8, 0xf0c2, 0x58e6, 0xb0ab, 0x188f, 0x7010, 0xd834, 0x3079, 0x985d, ], ]; pub static CRC16_IBM_3740_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, ], [ 0x0000, 0x3331, 0x6662, 0x5553, 0xccc4, 0xfff5, 0xaaa6, 0x9997, 0x89a9, 0xba98, 0xefcb, 0xdcfa, 0x456d, 0x765c, 0x230f, 0x103e, 0x0373, 0x3042, 0x6511, 0x5620, 0xcfb7, 0xfc86, 0xa9d5, 0x9ae4, 0x8ada, 0xb9eb, 0xecb8, 0xdf89, 0x461e, 0x752f, 0x207c, 0x134d, 0x06e6, 0x35d7, 0x6084, 0x53b5, 0xca22, 0xf913, 0xac40, 0x9f71, 0x8f4f, 0xbc7e, 0xe92d, 0xda1c, 0x438b, 0x70ba, 0x25e9, 0x16d8, 0x0595, 0x36a4, 0x63f7, 0x50c6, 0xc951, 0xfa60, 0xaf33, 0x9c02, 0x8c3c, 0xbf0d, 0xea5e, 0xd96f, 0x40f8, 0x73c9, 0x269a, 0x15ab, 0x0dcc, 0x3efd, 0x6bae, 0x589f, 0xc108, 0xf239, 0xa76a, 0x945b, 0x8465, 0xb754, 0xe207, 0xd136, 0x48a1, 0x7b90, 0x2ec3, 0x1df2, 0x0ebf, 0x3d8e, 0x68dd, 0x5bec, 0xc27b, 0xf14a, 0xa419, 0x9728, 0x8716, 0xb427, 0xe174, 0xd245, 0x4bd2, 0x78e3, 0x2db0, 0x1e81, 0x0b2a, 0x381b, 0x6d48, 0x5e79, 0xc7ee, 0xf4df, 0xa18c, 0x92bd, 0x8283, 0xb1b2, 0xe4e1, 0xd7d0, 0x4e47, 0x7d76, 0x2825, 0x1b14, 0x0859, 0x3b68, 0x6e3b, 0x5d0a, 0xc49d, 0xf7ac, 0xa2ff, 0x91ce, 0x81f0, 0xb2c1, 0xe792, 0xd4a3, 0x4d34, 0x7e05, 0x2b56, 0x1867, 0x1b98, 0x28a9, 0x7dfa, 0x4ecb, 0xd75c, 0xe46d, 0xb13e, 0x820f, 0x9231, 0xa100, 0xf453, 0xc762, 0x5ef5, 0x6dc4, 0x3897, 0x0ba6, 0x18eb, 0x2bda, 0x7e89, 0x4db8, 0xd42f, 0xe71e, 0xb24d, 0x817c, 0x9142, 0xa273, 0xf720, 0xc411, 0x5d86, 0x6eb7, 0x3be4, 0x08d5, 0x1d7e, 0x2e4f, 0x7b1c, 0x482d, 0xd1ba, 0xe28b, 0xb7d8, 0x84e9, 0x94d7, 0xa7e6, 0xf2b5, 0xc184, 0x5813, 0x6b22, 0x3e71, 0x0d40, 0x1e0d, 0x2d3c, 0x786f, 0x4b5e, 0xd2c9, 0xe1f8, 0xb4ab, 0x879a, 0x97a4, 0xa495, 0xf1c6, 0xc2f7, 0x5b60, 0x6851, 0x3d02, 0x0e33, 0x1654, 0x2565, 0x7036, 0x4307, 0xda90, 0xe9a1, 0xbcf2, 0x8fc3, 0x9ffd, 0xaccc, 0xf99f, 0xcaae, 0x5339, 0x6008, 0x355b, 0x066a, 0x1527, 0x2616, 0x7345, 0x4074, 0xd9e3, 0xead2, 0xbf81, 0x8cb0, 0x9c8e, 0xafbf, 0xfaec, 0xc9dd, 0x504a, 0x637b, 0x3628, 0x0519, 0x10b2, 0x2383, 0x76d0, 0x45e1, 0xdc76, 0xef47, 0xba14, 0x8925, 0x991b, 0xaa2a, 0xff79, 0xcc48, 0x55df, 0x66ee, 0x33bd, 0x008c, 0x13c1, 0x20f0, 0x75a3, 0x4692, 0xdf05, 0xec34, 0xb967, 0x8a56, 0x9a68, 0xa959, 0xfc0a, 0xcf3b, 0x56ac, 0x659d, 0x30ce, 0x03ff, ], [ 0x0000, 0x3730, 0x6e60, 0x5950, 0xdcc0, 0xebf0, 0xb2a0, 0x8590, 0xa9a1, 0x9e91, 0xc7c1, 0xf0f1, 0x7561, 0x4251, 0x1b01, 0x2c31, 0x4363, 0x7453, 0x2d03, 0x1a33, 0x9fa3, 0xa893, 0xf1c3, 0xc6f3, 0xeac2, 0xddf2, 0x84a2, 0xb392, 0x3602, 0x0132, 0x5862, 0x6f52, 0x86c6, 0xb1f6, 0xe8a6, 0xdf96, 0x5a06, 0x6d36, 0x3466, 0x0356, 0x2f67, 0x1857, 0x4107, 0x7637, 0xf3a7, 0xc497, 0x9dc7, 0xaaf7, 0xc5a5, 0xf295, 0xabc5, 0x9cf5, 0x1965, 0x2e55, 0x7705, 0x4035, 0x6c04, 0x5b34, 0x0264, 0x3554, 0xb0c4, 0x87f4, 0xdea4, 0xe994, 0x1dad, 0x2a9d, 0x73cd, 0x44fd, 0xc16d, 0xf65d, 0xaf0d, 0x983d, 0xb40c, 0x833c, 0xda6c, 0xed5c, 0x68cc, 0x5ffc, 0x06ac, 0x319c, 0x5ece, 0x69fe, 0x30ae, 0x079e, 0x820e, 0xb53e, 0xec6e, 0xdb5e, 0xf76f, 0xc05f, 0x990f, 0xae3f, 0x2baf, 0x1c9f, 0x45cf, 0x72ff, 0x9b6b, 0xac5b, 0xf50b, 0xc23b, 0x47ab, 0x709b, 0x29cb, 0x1efb, 0x32ca, 0x05fa, 0x5caa, 0x6b9a, 0xee0a, 0xd93a, 0x806a, 0xb75a, 0xd808, 0xef38, 0xb668, 0x8158, 0x04c8, 0x33f8, 0x6aa8, 0x5d98, 0x71a9, 0x4699, 0x1fc9, 0x28f9, 0xad69, 0x9a59, 0xc309, 0xf439, 0x3b5a, 0x0c6a, 0x553a, 0x620a, 0xe79a, 0xd0aa, 0x89fa, 0xbeca, 0x92fb, 0xa5cb, 0xfc9b, 0xcbab, 0x4e3b, 0x790b, 0x205b, 0x176b, 0x7839, 0x4f09, 0x1659, 0x2169, 0xa4f9, 0x93c9, 0xca99, 0xfda9, 0xd198, 0xe6a8, 0xbff8, 0x88c8, 0x0d58, 0x3a68, 0x6338, 0x5408, 0xbd9c, 0x8aac, 0xd3fc, 0xe4cc, 0x615c, 0x566c, 0x0f3c, 0x380c, 0x143d, 0x230d, 0x7a5d, 0x4d6d, 0xc8fd, 0xffcd, 0xa69d, 0x91ad, 0xfeff, 0xc9cf, 0x909f, 0xa7af, 0x223f, 0x150f, 0x4c5f, 0x7b6f, 0x575e, 0x606e, 0x393e, 0x0e0e, 0x8b9e, 0xbcae, 0xe5fe, 0xd2ce, 0x26f7, 0x11c7, 0x4897, 0x7fa7, 0xfa37, 0xcd07, 0x9457, 0xa367, 0x8f56, 0xb866, 0xe136, 0xd606, 0x5396, 0x64a6, 0x3df6, 0x0ac6, 0x6594, 0x52a4, 0x0bf4, 0x3cc4, 0xb954, 0x8e64, 0xd734, 0xe004, 0xcc35, 0xfb05, 0xa255, 0x9565, 0x10f5, 0x27c5, 0x7e95, 0x49a5, 0xa031, 0x9701, 0xce51, 0xf961, 0x7cf1, 0x4bc1, 0x1291, 0x25a1, 0x0990, 0x3ea0, 0x67f0, 0x50c0, 0xd550, 0xe260, 0xbb30, 0x8c00, 0xe352, 0xd462, 0x8d32, 0xba02, 0x3f92, 0x08a2, 0x51f2, 0x66c2, 0x4af3, 0x7dc3, 0x2493, 0x13a3, 0x9633, 0xa103, 0xf853, 0xcf63, ], [ 0x0000, 0x76b4, 0xed68, 0x9bdc, 0xcaf1, 0xbc45, 0x2799, 0x512d, 0x85c3, 0xf377, 0x68ab, 0x1e1f, 0x4f32, 0x3986, 0xa25a, 0xd4ee, 0x1ba7, 0x6d13, 0xf6cf, 0x807b, 0xd156, 0xa7e2, 0x3c3e, 0x4a8a, 0x9e64, 0xe8d0, 0x730c, 0x05b8, 0x5495, 0x2221, 0xb9fd, 0xcf49, 0x374e, 0x41fa, 0xda26, 0xac92, 0xfdbf, 0x8b0b, 0x10d7, 0x6663, 0xb28d, 0xc439, 0x5fe5, 0x2951, 0x787c, 0x0ec8, 0x9514, 0xe3a0, 0x2ce9, 0x5a5d, 0xc181, 0xb735, 0xe618, 0x90ac, 0x0b70, 0x7dc4, 0xa92a, 0xdf9e, 0x4442, 0x32f6, 0x63db, 0x156f, 0x8eb3, 0xf807, 0x6e9c, 0x1828, 0x83f4, 0xf540, 0xa46d, 0xd2d9, 0x4905, 0x3fb1, 0xeb5f, 0x9deb, 0x0637, 0x7083, 0x21ae, 0x571a, 0xccc6, 0xba72, 0x753b, 0x038f, 0x9853, 0xeee7, 0xbfca, 0xc97e, 0x52a2, 0x2416, 0xf0f8, 0x864c, 0x1d90, 0x6b24, 0x3a09, 0x4cbd, 0xd761, 0xa1d5, 0x59d2, 0x2f66, 0xb4ba, 0xc20e, 0x9323, 0xe597, 0x7e4b, 0x08ff, 0xdc11, 0xaaa5, 0x3179, 0x47cd, 0x16e0, 0x6054, 0xfb88, 0x8d3c, 0x4275, 0x34c1, 0xaf1d, 0xd9a9, 0x8884, 0xfe30, 0x65ec, 0x1358, 0xc7b6, 0xb102, 0x2ade, 0x5c6a, 0x0d47, 0x7bf3, 0xe02f, 0x969b, 0xdd38, 0xab8c, 0x3050, 0x46e4, 0x17c9, 0x617d, 0xfaa1, 0x8c15, 0x58fb, 0x2e4f, 0xb593, 0xc327, 0x920a, 0xe4be, 0x7f62, 0x09d6, 0xc69f, 0xb02b, 0x2bf7, 0x5d43, 0x0c6e, 0x7ada, 0xe106, 0x97b2, 0x435c, 0x35e8, 0xae34, 0xd880, 0x89ad, 0xff19, 0x64c5, 0x1271, 0xea76, 0x9cc2, 0x071e, 0x71aa, 0x2087, 0x5633, 0xcdef, 0xbb5b, 0x6fb5, 0x1901, 0x82dd, 0xf469, 0xa544, 0xd3f0, 0x482c, 0x3e98, 0xf1d1, 0x8765, 0x1cb9, 0x6a0d, 0x3b20, 0x4d94, 0xd648, 0xa0fc, 0x7412, 0x02a6, 0x997a, 0xefce, 0xbee3, 0xc857, 0x538b, 0x253f, 0xb3a4, 0xc510, 0x5ecc, 0x2878, 0x7955, 0x0fe1, 0x943d, 0xe289, 0x3667, 0x40d3, 0xdb0f, 0xadbb, 0xfc96, 0x8a22, 0x11fe, 0x674a, 0xa803, 0xdeb7, 0x456b, 0x33df, 0x62f2, 0x1446, 0x8f9a, 0xf92e, 0x2dc0, 0x5b74, 0xc0a8, 0xb61c, 0xe731, 0x9185, 0x0a59, 0x7ced, 0x84ea, 0xf25e, 0x6982, 0x1f36, 0x4e1b, 0x38af, 0xa373, 0xd5c7, 0x0129, 0x779d, 0xec41, 0x9af5, 0xcbd8, 0xbd6c, 0x26b0, 0x5004, 0x9f4d, 0xe9f9, 0x7225, 0x0491, 0x55bc, 0x2308, 0xb8d4, 0xce60, 0x1a8e, 0x6c3a, 0xf7e6, 0x8152, 0xd07f, 0xa6cb, 0x3d17, 0x4ba3, ], [ 0x0000, 0xaa51, 0x4483, 0xeed2, 0x8906, 0x2357, 0xcd85, 0x67d4, 0x022d, 0xa87c, 0x46ae, 0xecff, 0x8b2b, 0x217a, 0xcfa8, 0x65f9, 0x045a, 0xae0b, 0x40d9, 0xea88, 0x8d5c, 0x270d, 0xc9df, 0x638e, 0x0677, 0xac26, 0x42f4, 0xe8a5, 0x8f71, 0x2520, 0xcbf2, 0x61a3, 0x08b4, 0xa2e5, 0x4c37, 0xe666, 0x81b2, 0x2be3, 0xc531, 0x6f60, 0x0a99, 0xa0c8, 0x4e1a, 0xe44b, 0x839f, 0x29ce, 0xc71c, 0x6d4d, 0x0cee, 0xa6bf, 0x486d, 0xe23c, 0x85e8, 0x2fb9, 0xc16b, 0x6b3a, 0x0ec3, 0xa492, 0x4a40, 0xe011, 0x87c5, 0x2d94, 0xc346, 0x6917, 0x1168, 0xbb39, 0x55eb, 0xffba, 0x986e, 0x323f, 0xdced, 0x76bc, 0x1345, 0xb914, 0x57c6, 0xfd97, 0x9a43, 0x3012, 0xdec0, 0x7491, 0x1532, 0xbf63, 0x51b1, 0xfbe0, 0x9c34, 0x3665, 0xd8b7, 0x72e6, 0x171f, 0xbd4e, 0x539c, 0xf9cd, 0x9e19, 0x3448, 0xda9a, 0x70cb, 0x19dc, 0xb38d, 0x5d5f, 0xf70e, 0x90da, 0x3a8b, 0xd459, 0x7e08, 0x1bf1, 0xb1a0, 0x5f72, 0xf523, 0x92f7, 0x38a6, 0xd674, 0x7c25, 0x1d86, 0xb7d7, 0x5905, 0xf354, 0x9480, 0x3ed1, 0xd003, 0x7a52, 0x1fab, 0xb5fa, 0x5b28, 0xf179, 0x96ad, 0x3cfc, 0xd22e, 0x787f, 0x22d0, 0x8881, 0x6653, 0xcc02, 0xabd6, 0x0187, 0xef55, 0x4504, 0x20fd, 0x8aac, 0x647e, 0xce2f, 0xa9fb, 0x03aa, 0xed78, 0x4729, 0x268a, 0x8cdb, 0x6209, 0xc858, 0xaf8c, 0x05dd, 0xeb0f, 0x415e, 0x24a7, 0x8ef6, 0x6024, 0xca75, 0xada1, 0x07f0, 0xe922, 0x4373, 0x2a64, 0x8035, 0x6ee7, 0xc4b6, 0xa362, 0x0933, 0xe7e1, 0x4db0, 0x2849, 0x8218, 0x6cca, 0xc69b, 0xa14f, 0x0b1e, 0xe5cc, 0x4f9d, 0x2e3e, 0x846f, 0x6abd, 0xc0ec, 0xa738, 0x0d69, 0xe3bb, 0x49ea, 0x2c13, 0x8642, 0x6890, 0xc2c1, 0xa515, 0x0f44, 0xe196, 0x4bc7, 0x33b8, 0x99e9, 0x773b, 0xdd6a, 0xbabe, 0x10ef, 0xfe3d, 0x546c, 0x3195, 0x9bc4, 0x7516, 0xdf47, 0xb893, 0x12c2, 0xfc10, 0x5641, 0x37e2, 0x9db3, 0x7361, 0xd930, 0xbee4, 0x14b5, 0xfa67, 0x5036, 0x35cf, 0x9f9e, 0x714c, 0xdb1d, 0xbcc9, 0x1698, 0xf84a, 0x521b, 0x3b0c, 0x915d, 0x7f8f, 0xd5de, 0xb20a, 0x185b, 0xf689, 0x5cd8, 0x3921, 0x9370, 0x7da2, 0xd7f3, 0xb027, 0x1a76, 0xf4a4, 0x5ef5, 0x3f56, 0x9507, 0x7bd5, 0xd184, 0xb650, 0x1c01, 0xf2d3, 0x5882, 0x3d7b, 0x972a, 0x79f8, 0xd3a9, 0xb47d, 0x1e2c, 0xf0fe, 0x5aaf, ], [ 0x0000, 0x45a0, 0x8b40, 0xcee0, 0x06a1, 0x4301, 0x8de1, 0xc841, 0x0d42, 0x48e2, 0x8602, 0xc3a2, 0x0be3, 0x4e43, 0x80a3, 0xc503, 0x1a84, 0x5f24, 0x91c4, 0xd464, 0x1c25, 0x5985, 0x9765, 0xd2c5, 0x17c6, 0x5266, 0x9c86, 0xd926, 0x1167, 0x54c7, 0x9a27, 0xdf87, 0x3508, 0x70a8, 0xbe48, 0xfbe8, 0x33a9, 0x7609, 0xb8e9, 0xfd49, 0x384a, 0x7dea, 0xb30a, 0xf6aa, 0x3eeb, 0x7b4b, 0xb5ab, 0xf00b, 0x2f8c, 0x6a2c, 0xa4cc, 0xe16c, 0x292d, 0x6c8d, 0xa26d, 0xe7cd, 0x22ce, 0x676e, 0xa98e, 0xec2e, 0x246f, 0x61cf, 0xaf2f, 0xea8f, 0x6a10, 0x2fb0, 0xe150, 0xa4f0, 0x6cb1, 0x2911, 0xe7f1, 0xa251, 0x6752, 0x22f2, 0xec12, 0xa9b2, 0x61f3, 0x2453, 0xeab3, 0xaf13, 0x7094, 0x3534, 0xfbd4, 0xbe74, 0x7635, 0x3395, 0xfd75, 0xb8d5, 0x7dd6, 0x3876, 0xf696, 0xb336, 0x7b77, 0x3ed7, 0xf037, 0xb597, 0x5f18, 0x1ab8, 0xd458, 0x91f8, 0x59b9, 0x1c19, 0xd2f9, 0x9759, 0x525a, 0x17fa, 0xd91a, 0x9cba, 0x54fb, 0x115b, 0xdfbb, 0x9a1b, 0x459c, 0x003c, 0xcedc, 0x8b7c, 0x433d, 0x069d, 0xc87d, 0x8ddd, 0x48de, 0x0d7e, 0xc39e, 0x863e, 0x4e7f, 0x0bdf, 0xc53f, 0x809f, 0xd420, 0x9180, 0x5f60, 0x1ac0, 0xd281, 0x9721, 0x59c1, 0x1c61, 0xd962, 0x9cc2, 0x5222, 0x1782, 0xdfc3, 0x9a63, 0x5483, 0x1123, 0xcea4, 0x8b04, 0x45e4, 0x0044, 0xc805, 0x8da5, 0x4345, 0x06e5, 0xc3e6, 0x8646, 0x48a6, 0x0d06, 0xc547, 0x80e7, 0x4e07, 0x0ba7, 0xe128, 0xa488, 0x6a68, 0x2fc8, 0xe789, 0xa229, 0x6cc9, 0x2969, 0xec6a, 0xa9ca, 0x672a, 0x228a, 0xeacb, 0xaf6b, 0x618b, 0x242b, 0xfbac, 0xbe0c, 0x70ec, 0x354c, 0xfd0d, 0xb8ad, 0x764d, 0x33ed, 0xf6ee, 0xb34e, 0x7dae, 0x380e, 0xf04f, 0xb5ef, 0x7b0f, 0x3eaf, 0xbe30, 0xfb90, 0x3570, 0x70d0, 0xb891, 0xfd31, 0x33d1, 0x7671, 0xb372, 0xf6d2, 0x3832, 0x7d92, 0xb5d3, 0xf073, 0x3e93, 0x7b33, 0xa4b4, 0xe114, 0x2ff4, 0x6a54, 0xa215, 0xe7b5, 0x2955, 0x6cf5, 0xa9f6, 0xec56, 0x22b6, 0x6716, 0xaf57, 0xeaf7, 0x2417, 0x61b7, 0x8b38, 0xce98, 0x0078, 0x45d8, 0x8d99, 0xc839, 0x06d9, 0x4379, 0x867a, 0xc3da, 0x0d3a, 0x489a, 0x80db, 0xc57b, 0x0b9b, 0x4e3b, 0x91bc, 0xd41c, 0x1afc, 0x5f5c, 0x971d, 0xd2bd, 0x1c5d, 0x59fd, 0x9cfe, 0xd95e, 0x17be, 0x521e, 0x9a5f, 0xdfff, 0x111f, 0x54bf, ], [ 0x0000, 0xb861, 0x60e3, 0xd882, 0xc1c6, 0x79a7, 0xa125, 0x1944, 0x93ad, 0x2bcc, 0xf34e, 0x4b2f, 0x526b, 0xea0a, 0x3288, 0x8ae9, 0x377b, 0x8f1a, 0x5798, 0xeff9, 0xf6bd, 0x4edc, 0x965e, 0x2e3f, 0xa4d6, 0x1cb7, 0xc435, 0x7c54, 0x6510, 0xdd71, 0x05f3, 0xbd92, 0x6ef6, 0xd697, 0x0e15, 0xb674, 0xaf30, 0x1751, 0xcfd3, 0x77b2, 0xfd5b, 0x453a, 0x9db8, 0x25d9, 0x3c9d, 0x84fc, 0x5c7e, 0xe41f, 0x598d, 0xe1ec, 0x396e, 0x810f, 0x984b, 0x202a, 0xf8a8, 0x40c9, 0xca20, 0x7241, 0xaac3, 0x12a2, 0x0be6, 0xb387, 0x6b05, 0xd364, 0xddec, 0x658d, 0xbd0f, 0x056e, 0x1c2a, 0xa44b, 0x7cc9, 0xc4a8, 0x4e41, 0xf620, 0x2ea2, 0x96c3, 0x8f87, 0x37e6, 0xef64, 0x5705, 0xea97, 0x52f6, 0x8a74, 0x3215, 0x2b51, 0x9330, 0x4bb2, 0xf3d3, 0x793a, 0xc15b, 0x19d9, 0xa1b8, 0xb8fc, 0x009d, 0xd81f, 0x607e, 0xb31a, 0x0b7b, 0xd3f9, 0x6b98, 0x72dc, 0xcabd, 0x123f, 0xaa5e, 0x20b7, 0x98d6, 0x4054, 0xf835, 0xe171, 0x5910, 0x8192, 0x39f3, 0x8461, 0x3c00, 0xe482, 0x5ce3, 0x45a7, 0xfdc6, 0x2544, 0x9d25, 0x17cc, 0xafad, 0x772f, 0xcf4e, 0xd60a, 0x6e6b, 0xb6e9, 0x0e88, 0xabf9, 0x1398, 0xcb1a, 0x737b, 0x6a3f, 0xd25e, 0x0adc, 0xb2bd, 0x3854, 0x8035, 0x58b7, 0xe0d6, 0xf992, 0x41f3, 0x9971, 0x2110, 0x9c82, 0x24e3, 0xfc61, 0x4400, 0x5d44, 0xe525, 0x3da7, 0x85c6, 0x0f2f, 0xb74e, 0x6fcc, 0xd7ad, 0xcee9, 0x7688, 0xae0a, 0x166b, 0xc50f, 0x7d6e, 0xa5ec, 0x1d8d, 0x04c9, 0xbca8, 0x642a, 0xdc4b, 0x56a2, 0xeec3, 0x3641, 0x8e20, 0x9764, 0x2f05, 0xf787, 0x4fe6, 0xf274, 0x4a15, 0x9297, 0x2af6, 0x33b2, 0x8bd3, 0x5351, 0xeb30, 0x61d9, 0xd9b8, 0x013a, 0xb95b, 0xa01f, 0x187e, 0xc0fc, 0x789d, 0x7615, 0xce74, 0x16f6, 0xae97, 0xb7d3, 0x0fb2, 0xd730, 0x6f51, 0xe5b8, 0x5dd9, 0x855b, 0x3d3a, 0x247e, 0x9c1f, 0x449d, 0xfcfc, 0x416e, 0xf90f, 0x218d, 0x99ec, 0x80a8, 0x38c9, 0xe04b, 0x582a, 0xd2c3, 0x6aa2, 0xb220, 0x0a41, 0x1305, 0xab64, 0x73e6, 0xcb87, 0x18e3, 0xa082, 0x7800, 0xc061, 0xd925, 0x6144, 0xb9c6, 0x01a7, 0x8b4e, 0x332f, 0xebad, 0x53cc, 0x4a88, 0xf2e9, 0x2a6b, 0x920a, 0x2f98, 0x97f9, 0x4f7b, 0xf71a, 0xee5e, 0x563f, 0x8ebd, 0x36dc, 0xbc35, 0x0454, 0xdcd6, 0x64b7, 0x7df3, 0xc592, 0x1d10, 0xa571, ], [ 0x0000, 0x47d3, 0x8fa6, 0xc875, 0x0f6d, 0x48be, 0x80cb, 0xc718, 0x1eda, 0x5909, 0x917c, 0xd6af, 0x11b7, 0x5664, 0x9e11, 0xd9c2, 0x3db4, 0x7a67, 0xb212, 0xf5c1, 0x32d9, 0x750a, 0xbd7f, 0xfaac, 0x236e, 0x64bd, 0xacc8, 0xeb1b, 0x2c03, 0x6bd0, 0xa3a5, 0xe476, 0x7b68, 0x3cbb, 0xf4ce, 0xb31d, 0x7405, 0x33d6, 0xfba3, 0xbc70, 0x65b2, 0x2261, 0xea14, 0xadc7, 0x6adf, 0x2d0c, 0xe579, 0xa2aa, 0x46dc, 0x010f, 0xc97a, 0x8ea9, 0x49b1, 0x0e62, 0xc617, 0x81c4, 0x5806, 0x1fd5, 0xd7a0, 0x9073, 0x576b, 0x10b8, 0xd8cd, 0x9f1e, 0xf6d0, 0xb103, 0x7976, 0x3ea5, 0xf9bd, 0xbe6e, 0x761b, 0x31c8, 0xe80a, 0xafd9, 0x67ac, 0x207f, 0xe767, 0xa0b4, 0x68c1, 0x2f12, 0xcb64, 0x8cb7, 0x44c2, 0x0311, 0xc409, 0x83da, 0x4baf, 0x0c7c, 0xd5be, 0x926d, 0x5a18, 0x1dcb, 0xdad3, 0x9d00, 0x5575, 0x12a6, 0x8db8, 0xca6b, 0x021e, 0x45cd, 0x82d5, 0xc506, 0x0d73, 0x4aa0, 0x9362, 0xd4b1, 0x1cc4, 0x5b17, 0x9c0f, 0xdbdc, 0x13a9, 0x547a, 0xb00c, 0xf7df, 0x3faa, 0x7879, 0xbf61, 0xf8b2, 0x30c7, 0x7714, 0xaed6, 0xe905, 0x2170, 0x66a3, 0xa1bb, 0xe668, 0x2e1d, 0x69ce, 0xfd81, 0xba52, 0x7227, 0x35f4, 0xf2ec, 0xb53f, 0x7d4a, 0x3a99, 0xe35b, 0xa488, 0x6cfd, 0x2b2e, 0xec36, 0xabe5, 0x6390, 0x2443, 0xc035, 0x87e6, 0x4f93, 0x0840, 0xcf58, 0x888b, 0x40fe, 0x072d, 0xdeef, 0x993c, 0x5149, 0x169a, 0xd182, 0x9651, 0x5e24, 0x19f7, 0x86e9, 0xc13a, 0x094f, 0x4e9c, 0x8984, 0xce57, 0x0622, 0x41f1, 0x9833, 0xdfe0, 0x1795, 0x5046, 0x975e, 0xd08d, 0x18f8, 0x5f2b, 0xbb5d, 0xfc8e, 0x34fb, 0x7328, 0xb430, 0xf3e3, 0x3b96, 0x7c45, 0xa587, 0xe254, 0x2a21, 0x6df2, 0xaaea, 0xed39, 0x254c, 0x629f, 0x0b51, 0x4c82, 0x84f7, 0xc324, 0x043c, 0x43ef, 0x8b9a, 0xcc49, 0x158b, 0x5258, 0x9a2d, 0xddfe, 0x1ae6, 0x5d35, 0x9540, 0xd293, 0x36e5, 0x7136, 0xb943, 0xfe90, 0x3988, 0x7e5b, 0xb62e, 0xf1fd, 0x283f, 0x6fec, 0xa799, 0xe04a, 0x2752, 0x6081, 0xa8f4, 0xef27, 0x7039, 0x37ea, 0xff9f, 0xb84c, 0x7f54, 0x3887, 0xf0f2, 0xb721, 0x6ee3, 0x2930, 0xe145, 0xa696, 0x618e, 0x265d, 0xee28, 0xa9fb, 0x4d8d, 0x0a5e, 0xc22b, 0x85f8, 0x42e0, 0x0533, 0xcd46, 0x8a95, 0x5357, 0x1484, 0xdcf1, 0x9b22, 0x5c3a, 0x1be9, 0xd39c, 0x944f, ], [ 0x0000, 0xeb23, 0xc667, 0x2d44, 0x9cef, 0x77cc, 0x5a88, 0xb1ab, 0x29ff, 0xc2dc, 0xef98, 0x04bb, 0xb510, 0x5e33, 0x7377, 0x9854, 0x53fe, 0xb8dd, 0x9599, 0x7eba, 0xcf11, 0x2432, 0x0976, 0xe255, 0x7a01, 0x9122, 0xbc66, 0x5745, 0xe6ee, 0x0dcd, 0x2089, 0xcbaa, 0xa7fc, 0x4cdf, 0x619b, 0x8ab8, 0x3b13, 0xd030, 0xfd74, 0x1657, 0x8e03, 0x6520, 0x4864, 0xa347, 0x12ec, 0xf9cf, 0xd48b, 0x3fa8, 0xf402, 0x1f21, 0x3265, 0xd946, 0x68ed, 0x83ce, 0xae8a, 0x45a9, 0xddfd, 0x36de, 0x1b9a, 0xf0b9, 0x4112, 0xaa31, 0x8775, 0x6c56, 0x5fd9, 0xb4fa, 0x99be, 0x729d, 0xc336, 0x2815, 0x0551, 0xee72, 0x7626, 0x9d05, 0xb041, 0x5b62, 0xeac9, 0x01ea, 0x2cae, 0xc78d, 0x0c27, 0xe704, 0xca40, 0x2163, 0x90c8, 0x7beb, 0x56af, 0xbd8c, 0x25d8, 0xcefb, 0xe3bf, 0x089c, 0xb937, 0x5214, 0x7f50, 0x9473, 0xf825, 0x1306, 0x3e42, 0xd561, 0x64ca, 0x8fe9, 0xa2ad, 0x498e, 0xd1da, 0x3af9, 0x17bd, 0xfc9e, 0x4d35, 0xa616, 0x8b52, 0x6071, 0xabdb, 0x40f8, 0x6dbc, 0x869f, 0x3734, 0xdc17, 0xf153, 0x1a70, 0x8224, 0x6907, 0x4443, 0xaf60, 0x1ecb, 0xf5e8, 0xd8ac, 0x338f, 0xbfb2, 0x5491, 0x79d5, 0x92f6, 0x235d, 0xc87e, 0xe53a, 0x0e19, 0x964d, 0x7d6e, 0x502a, 0xbb09, 0x0aa2, 0xe181, 0xccc5, 0x27e6, 0xec4c, 0x076f, 0x2a2b, 0xc108, 0x70a3, 0x9b80, 0xb6c4, 0x5de7, 0xc5b3, 0x2e90, 0x03d4, 0xe8f7, 0x595c, 0xb27f, 0x9f3b, 0x7418, 0x184e, 0xf36d, 0xde29, 0x350a, 0x84a1, 0x6f82, 0x42c6, 0xa9e5, 0x31b1, 0xda92, 0xf7d6, 0x1cf5, 0xad5e, 0x467d, 0x6b39, 0x801a, 0x4bb0, 0xa093, 0x8dd7, 0x66f4, 0xd75f, 0x3c7c, 0x1138, 0xfa1b, 0x624f, 0x896c, 0xa428, 0x4f0b, 0xfea0, 0x1583, 0x38c7, 0xd3e4, 0xe06b, 0x0b48, 0x260c, 0xcd2f, 0x7c84, 0x97a7, 0xbae3, 0x51c0, 0xc994, 0x22b7, 0x0ff3, 0xe4d0, 0x557b, 0xbe58, 0x931c, 0x783f, 0xb395, 0x58b6, 0x75f2, 0x9ed1, 0x2f7a, 0xc459, 0xe91d, 0x023e, 0x9a6a, 0x7149, 0x5c0d, 0xb72e, 0x0685, 0xeda6, 0xc0e2, 0x2bc1, 0x4797, 0xacb4, 0x81f0, 0x6ad3, 0xdb78, 0x305b, 0x1d1f, 0xf63c, 0x6e68, 0x854b, 0xa80f, 0x432c, 0xf287, 0x19a4, 0x34e0, 0xdfc3, 0x1469, 0xff4a, 0xd20e, 0x392d, 0x8886, 0x63a5, 0x4ee1, 0xa5c2, 0x3d96, 0xd6b5, 0xfbf1, 0x10d2, 0xa179, 0x4a5a, 0x671e, 0x8c3d, ], [ 0x0000, 0x6f45, 0xde8a, 0xb1cf, 0xad35, 0xc270, 0x73bf, 0x1cfa, 0x4a4b, 0x250e, 0x94c1, 0xfb84, 0xe77e, 0x883b, 0x39f4, 0x56b1, 0x9496, 0xfbd3, 0x4a1c, 0x2559, 0x39a3, 0x56e6, 0xe729, 0x886c, 0xdedd, 0xb198, 0x0057, 0x6f12, 0x73e8, 0x1cad, 0xad62, 0xc227, 0x390d, 0x5648, 0xe787, 0x88c2, 0x9438, 0xfb7d, 0x4ab2, 0x25f7, 0x7346, 0x1c03, 0xadcc, 0xc289, 0xde73, 0xb136, 0x00f9, 0x6fbc, 0xad9b, 0xc2de, 0x7311, 0x1c54, 0x00ae, 0x6feb, 0xde24, 0xb161, 0xe7d0, 0x8895, 0x395a, 0x561f, 0x4ae5, 0x25a0, 0x946f, 0xfb2a, 0x721a, 0x1d5f, 0xac90, 0xc3d5, 0xdf2f, 0xb06a, 0x01a5, 0x6ee0, 0x3851, 0x5714, 0xe6db, 0x899e, 0x9564, 0xfa21, 0x4bee, 0x24ab, 0xe68c, 0x89c9, 0x3806, 0x5743, 0x4bb9, 0x24fc, 0x9533, 0xfa76, 0xacc7, 0xc382, 0x724d, 0x1d08, 0x01f2, 0x6eb7, 0xdf78, 0xb03d, 0x4b17, 0x2452, 0x959d, 0xfad8, 0xe622, 0x8967, 0x38a8, 0x57ed, 0x015c, 0x6e19, 0xdfd6, 0xb093, 0xac69, 0xc32c, 0x72e3, 0x1da6, 0xdf81, 0xb0c4, 0x010b, 0x6e4e, 0x72b4, 0x1df1, 0xac3e, 0xc37b, 0x95ca, 0xfa8f, 0x4b40, 0x2405, 0x38ff, 0x57ba, 0xe675, 0x8930, 0xe434, 0x8b71, 0x3abe, 0x55fb, 0x4901, 0x2644, 0x978b, 0xf8ce, 0xae7f, 0xc13a, 0x70f5, 0x1fb0, 0x034a, 0x6c0f, 0xddc0, 0xb285, 0x70a2, 0x1fe7, 0xae28, 0xc16d, 0xdd97, 0xb2d2, 0x031d, 0x6c58, 0x3ae9, 0x55ac, 0xe463, 0x8b26, 0x97dc, 0xf899, 0x4956, 0x2613, 0xdd39, 0xb27c, 0x03b3, 0x6cf6, 0x700c, 0x1f49, 0xae86, 0xc1c3, 0x9772, 0xf837, 0x49f8, 0x26bd, 0x3a47, 0x5502, 0xe4cd, 0x8b88, 0x49af, 0x26ea, 0x9725, 0xf860, 0xe49a, 0x8bdf, 0x3a10, 0x5555, 0x03e4, 0x6ca1, 0xdd6e, 0xb22b, 0xaed1, 0xc194, 0x705b, 0x1f1e, 0x962e, 0xf96b, 0x48a4, 0x27e1, 0x3b1b, 0x545e, 0xe591, 0x8ad4, 0xdc65, 0xb320, 0x02ef, 0x6daa, 0x7150, 0x1e15, 0xafda, 0xc09f, 0x02b8, 0x6dfd, 0xdc32, 0xb377, 0xaf8d, 0xc0c8, 0x7107, 0x1e42, 0x48f3, 0x27b6, 0x9679, 0xf93c, 0xe5c6, 0x8a83, 0x3b4c, 0x5409, 0xaf23, 0xc066, 0x71a9, 0x1eec, 0x0216, 0x6d53, 0xdc9c, 0xb3d9, 0xe568, 0x8a2d, 0x3be2, 0x54a7, 0x485d, 0x2718, 0x96d7, 0xf992, 0x3bb5, 0x54f0, 0xe53f, 0x8a7a, 0x9680, 0xf9c5, 0x480a, 0x274f, 0x71fe, 0x1ebb, 0xaf74, 0xc031, 0xdccb, 0xb38e, 0x0241, 0x6d04, ], [ 0x0000, 0xd849, 0xa0b3, 0x78fa, 0x5147, 0x890e, 0xf1f4, 0x29bd, 0xa28e, 0x7ac7, 0x023d, 0xda74, 0xf3c9, 0x2b80, 0x537a, 0x8b33, 0x553d, 0x8d74, 0xf58e, 0x2dc7, 0x047a, 0xdc33, 0xa4c9, 0x7c80, 0xf7b3, 0x2ffa, 0x5700, 0x8f49, 0xa6f4, 0x7ebd, 0x0647, 0xde0e, 0xaa7a, 0x7233, 0x0ac9, 0xd280, 0xfb3d, 0x2374, 0x5b8e, 0x83c7, 0x08f4, 0xd0bd, 0xa847, 0x700e, 0x59b3, 0x81fa, 0xf900, 0x2149, 0xff47, 0x270e, 0x5ff4, 0x87bd, 0xae00, 0x7649, 0x0eb3, 0xd6fa, 0x5dc9, 0x8580, 0xfd7a, 0x2533, 0x0c8e, 0xd4c7, 0xac3d, 0x7474, 0x44d5, 0x9c9c, 0xe466, 0x3c2f, 0x1592, 0xcddb, 0xb521, 0x6d68, 0xe65b, 0x3e12, 0x46e8, 0x9ea1, 0xb71c, 0x6f55, 0x17af, 0xcfe6, 0x11e8, 0xc9a1, 0xb15b, 0x6912, 0x40af, 0x98e6, 0xe01c, 0x3855, 0xb366, 0x6b2f, 0x13d5, 0xcb9c, 0xe221, 0x3a68, 0x4292, 0x9adb, 0xeeaf, 0x36e6, 0x4e1c, 0x9655, 0xbfe8, 0x67a1, 0x1f5b, 0xc712, 0x4c21, 0x9468, 0xec92, 0x34db, 0x1d66, 0xc52f, 0xbdd5, 0x659c, 0xbb92, 0x63db, 0x1b21, 0xc368, 0xead5, 0x329c, 0x4a66, 0x922f, 0x191c, 0xc155, 0xb9af, 0x61e6, 0x485b, 0x9012, 0xe8e8, 0x30a1, 0x89aa, 0x51e3, 0x2919, 0xf150, 0xd8ed, 0x00a4, 0x785e, 0xa017, 0x2b24, 0xf36d, 0x8b97, 0x53de, 0x7a63, 0xa22a, 0xdad0, 0x0299, 0xdc97, 0x04de, 0x7c24, 0xa46d, 0x8dd0, 0x5599, 0x2d63, 0xf52a, 0x7e19, 0xa650, 0xdeaa, 0x06e3, 0x2f5e, 0xf717, 0x8fed, 0x57a4, 0x23d0, 0xfb99, 0x8363, 0x5b2a, 0x7297, 0xaade, 0xd224, 0x0a6d, 0x815e, 0x5917, 0x21ed, 0xf9a4, 0xd019, 0x0850, 0x70aa, 0xa8e3, 0x76ed, 0xaea4, 0xd65e, 0x0e17, 0x27aa, 0xffe3, 0x8719, 0x5f50, 0xd463, 0x0c2a, 0x74d0, 0xac99, 0x8524, 0x5d6d, 0x2597, 0xfdde, 0xcd7f, 0x1536, 0x6dcc, 0xb585, 0x9c38, 0x4471, 0x3c8b, 0xe4c2, 0x6ff1, 0xb7b8, 0xcf42, 0x170b, 0x3eb6, 0xe6ff, 0x9e05, 0x464c, 0x9842, 0x400b, 0x38f1, 0xe0b8, 0xc905, 0x114c, 0x69b6, 0xb1ff, 0x3acc, 0xe285, 0x9a7f, 0x4236, 0x6b8b, 0xb3c2, 0xcb38, 0x1371, 0x6705, 0xbf4c, 0xc7b6, 0x1fff, 0x3642, 0xee0b, 0x96f1, 0x4eb8, 0xc58b, 0x1dc2, 0x6538, 0xbd71, 0x94cc, 0x4c85, 0x347f, 0xec36, 0x3238, 0xea71, 0x928b, 0x4ac2, 0x637f, 0xbb36, 0xc3cc, 0x1b85, 0x90b6, 0x48ff, 0x3005, 0xe84c, 0xc1f1, 0x19b8, 0x6142, 0xb90b, ], [ 0x0000, 0x0375, 0x06ea, 0x059f, 0x0dd4, 0x0ea1, 0x0b3e, 0x084b, 0x1ba8, 0x18dd, 0x1d42, 0x1e37, 0x167c, 0x1509, 0x1096, 0x13e3, 0x3750, 0x3425, 0x31ba, 0x32cf, 0x3a84, 0x39f1, 0x3c6e, 0x3f1b, 0x2cf8, 0x2f8d, 0x2a12, 0x2967, 0x212c, 0x2259, 0x27c6, 0x24b3, 0x6ea0, 0x6dd5, 0x684a, 0x6b3f, 0x6374, 0x6001, 0x659e, 0x66eb, 0x7508, 0x767d, 0x73e2, 0x7097, 0x78dc, 0x7ba9, 0x7e36, 0x7d43, 0x59f0, 0x5a85, 0x5f1a, 0x5c6f, 0x5424, 0x5751, 0x52ce, 0x51bb, 0x4258, 0x412d, 0x44b2, 0x47c7, 0x4f8c, 0x4cf9, 0x4966, 0x4a13, 0xdd40, 0xde35, 0xdbaa, 0xd8df, 0xd094, 0xd3e1, 0xd67e, 0xd50b, 0xc6e8, 0xc59d, 0xc002, 0xc377, 0xcb3c, 0xc849, 0xcdd6, 0xcea3, 0xea10, 0xe965, 0xecfa, 0xef8f, 0xe7c4, 0xe4b1, 0xe12e, 0xe25b, 0xf1b8, 0xf2cd, 0xf752, 0xf427, 0xfc6c, 0xff19, 0xfa86, 0xf9f3, 0xb3e0, 0xb095, 0xb50a, 0xb67f, 0xbe34, 0xbd41, 0xb8de, 0xbbab, 0xa848, 0xab3d, 0xaea2, 0xadd7, 0xa59c, 0xa6e9, 0xa376, 0xa003, 0x84b0, 0x87c5, 0x825a, 0x812f, 0x8964, 0x8a11, 0x8f8e, 0x8cfb, 0x9f18, 0x9c6d, 0x99f2, 0x9a87, 0x92cc, 0x91b9, 0x9426, 0x9753, 0xaaa1, 0xa9d4, 0xac4b, 0xaf3e, 0xa775, 0xa400, 0xa19f, 0xa2ea, 0xb109, 0xb27c, 0xb7e3, 0xb496, 0xbcdd, 0xbfa8, 0xba37, 0xb942, 0x9df1, 0x9e84, 0x9b1b, 0x986e, 0x9025, 0x9350, 0x96cf, 0x95ba, 0x8659, 0x852c, 0x80b3, 0x83c6, 0x8b8d, 0x88f8, 0x8d67, 0x8e12, 0xc401, 0xc774, 0xc2eb, 0xc19e, 0xc9d5, 0xcaa0, 0xcf3f, 0xcc4a, 0xdfa9, 0xdcdc, 0xd943, 0xda36, 0xd27d, 0xd108, 0xd497, 0xd7e2, 0xf351, 0xf024, 0xf5bb, 0xf6ce, 0xfe85, 0xfdf0, 0xf86f, 0xfb1a, 0xe8f9, 0xeb8c, 0xee13, 0xed66, 0xe52d, 0xe658, 0xe3c7, 0xe0b2, 0x77e1, 0x7494, 0x710b, 0x727e, 0x7a35, 0x7940, 0x7cdf, 0x7faa, 0x6c49, 0x6f3c, 0x6aa3, 0x69d6, 0x619d, 0x62e8, 0x6777, 0x6402, 0x40b1, 0x43c4, 0x465b, 0x452e, 0x4d65, 0x4e10, 0x4b8f, 0x48fa, 0x5b19, 0x586c, 0x5df3, 0x5e86, 0x56cd, 0x55b8, 0x5027, 0x5352, 0x1941, 0x1a34, 0x1fab, 0x1cde, 0x1495, 0x17e0, 0x127f, 0x110a, 0x02e9, 0x019c, 0x0403, 0x0776, 0x0f3d, 0x0c48, 0x09d7, 0x0aa2, 0x2e11, 0x2d64, 0x28fb, 0x2b8e, 0x23c5, 0x20b0, 0x252f, 0x265a, 0x35b9, 0x36cc, 0x3353, 0x3026, 0x386d, 0x3b18, 0x3e87, 0x3df2, ], [ 0x0000, 0x4563, 0x8ac6, 0xcfa5, 0x05ad, 0x40ce, 0x8f6b, 0xca08, 0x0b5a, 0x4e39, 0x819c, 0xc4ff, 0x0ef7, 0x4b94, 0x8431, 0xc152, 0x16b4, 0x53d7, 0x9c72, 0xd911, 0x1319, 0x567a, 0x99df, 0xdcbc, 0x1dee, 0x588d, 0x9728, 0xd24b, 0x1843, 0x5d20, 0x9285, 0xd7e6, 0x2d68, 0x680b, 0xa7ae, 0xe2cd, 0x28c5, 0x6da6, 0xa203, 0xe760, 0x2632, 0x6351, 0xacf4, 0xe997, 0x239f, 0x66fc, 0xa959, 0xec3a, 0x3bdc, 0x7ebf, 0xb11a, 0xf479, 0x3e71, 0x7b12, 0xb4b7, 0xf1d4, 0x3086, 0x75e5, 0xba40, 0xff23, 0x352b, 0x7048, 0xbfed, 0xfa8e, 0x5ad0, 0x1fb3, 0xd016, 0x9575, 0x5f7d, 0x1a1e, 0xd5bb, 0x90d8, 0x518a, 0x14e9, 0xdb4c, 0x9e2f, 0x5427, 0x1144, 0xdee1, 0x9b82, 0x4c64, 0x0907, 0xc6a2, 0x83c1, 0x49c9, 0x0caa, 0xc30f, 0x866c, 0x473e, 0x025d, 0xcdf8, 0x889b, 0x4293, 0x07f0, 0xc855, 0x8d36, 0x77b8, 0x32db, 0xfd7e, 0xb81d, 0x7215, 0x3776, 0xf8d3, 0xbdb0, 0x7ce2, 0x3981, 0xf624, 0xb347, 0x794f, 0x3c2c, 0xf389, 0xb6ea, 0x610c, 0x246f, 0xebca, 0xaea9, 0x64a1, 0x21c2, 0xee67, 0xab04, 0x6a56, 0x2f35, 0xe090, 0xa5f3, 0x6ffb, 0x2a98, 0xe53d, 0xa05e, 0xb5a0, 0xf0c3, 0x3f66, 0x7a05, 0xb00d, 0xf56e, 0x3acb, 0x7fa8, 0xbefa, 0xfb99, 0x343c, 0x715f, 0xbb57, 0xfe34, 0x3191, 0x74f2, 0xa314, 0xe677, 0x29d2, 0x6cb1, 0xa6b9, 0xe3da, 0x2c7f, 0x691c, 0xa84e, 0xed2d, 0x2288, 0x67eb, 0xade3, 0xe880, 0x2725, 0x6246, 0x98c8, 0xddab, 0x120e, 0x576d, 0x9d65, 0xd806, 0x17a3, 0x52c0, 0x9392, 0xd6f1, 0x1954, 0x5c37, 0x963f, 0xd35c, 0x1cf9, 0x599a, 0x8e7c, 0xcb1f, 0x04ba, 0x41d9, 0x8bd1, 0xceb2, 0x0117, 0x4474, 0x8526, 0xc045, 0x0fe0, 0x4a83, 0x808b, 0xc5e8, 0x0a4d, 0x4f2e, 0xef70, 0xaa13, 0x65b6, 0x20d5, 0xeadd, 0xafbe, 0x601b, 0x2578, 0xe42a, 0xa149, 0x6eec, 0x2b8f, 0xe187, 0xa4e4, 0x6b41, 0x2e22, 0xf9c4, 0xbca7, 0x7302, 0x3661, 0xfc69, 0xb90a, 0x76af, 0x33cc, 0xf29e, 0xb7fd, 0x7858, 0x3d3b, 0xf733, 0xb250, 0x7df5, 0x3896, 0xc218, 0x877b, 0x48de, 0x0dbd, 0xc7b5, 0x82d6, 0x4d73, 0x0810, 0xc942, 0x8c21, 0x4384, 0x06e7, 0xccef, 0x898c, 0x4629, 0x034a, 0xd4ac, 0x91cf, 0x5e6a, 0x1b09, 0xd101, 0x9462, 0x5bc7, 0x1ea4, 0xdff6, 0x9a95, 0x5530, 0x1053, 0xda5b, 0x9f38, 0x509d, 0x15fe, ], [ 0x0000, 0x7b61, 0xf6c2, 0x8da3, 0xfda5, 0x86c4, 0x0b67, 0x7006, 0xeb6b, 0x900a, 0x1da9, 0x66c8, 0x16ce, 0x6daf, 0xe00c, 0x9b6d, 0xc6f7, 0xbd96, 0x3035, 0x4b54, 0x3b52, 0x4033, 0xcd90, 0xb6f1, 0x2d9c, 0x56fd, 0xdb5e, 0xa03f, 0xd039, 0xab58, 0x26fb, 0x5d9a, 0x9dcf, 0xe6ae, 0x6b0d, 0x106c, 0x606a, 0x1b0b, 0x96a8, 0xedc9, 0x76a4, 0x0dc5, 0x8066, 0xfb07, 0x8b01, 0xf060, 0x7dc3, 0x06a2, 0x5b38, 0x2059, 0xadfa, 0xd69b, 0xa69d, 0xddfc, 0x505f, 0x2b3e, 0xb053, 0xcb32, 0x4691, 0x3df0, 0x4df6, 0x3697, 0xbb34, 0xc055, 0x2bbf, 0x50de, 0xdd7d, 0xa61c, 0xd61a, 0xad7b, 0x20d8, 0x5bb9, 0xc0d4, 0xbbb5, 0x3616, 0x4d77, 0x3d71, 0x4610, 0xcbb3, 0xb0d2, 0xed48, 0x9629, 0x1b8a, 0x60eb, 0x10ed, 0x6b8c, 0xe62f, 0x9d4e, 0x0623, 0x7d42, 0xf0e1, 0x8b80, 0xfb86, 0x80e7, 0x0d44, 0x7625, 0xb670, 0xcd11, 0x40b2, 0x3bd3, 0x4bd5, 0x30b4, 0xbd17, 0xc676, 0x5d1b, 0x267a, 0xabd9, 0xd0b8, 0xa0be, 0xdbdf, 0x567c, 0x2d1d, 0x7087, 0x0be6, 0x8645, 0xfd24, 0x8d22, 0xf643, 0x7be0, 0x0081, 0x9bec, 0xe08d, 0x6d2e, 0x164f, 0x6649, 0x1d28, 0x908b, 0xebea, 0x577e, 0x2c1f, 0xa1bc, 0xdadd, 0xaadb, 0xd1ba, 0x5c19, 0x2778, 0xbc15, 0xc774, 0x4ad7, 0x31b6, 0x41b0, 0x3ad1, 0xb772, 0xcc13, 0x9189, 0xeae8, 0x674b, 0x1c2a, 0x6c2c, 0x174d, 0x9aee, 0xe18f, 0x7ae2, 0x0183, 0x8c20, 0xf741, 0x8747, 0xfc26, 0x7185, 0x0ae4, 0xcab1, 0xb1d0, 0x3c73, 0x4712, 0x3714, 0x4c75, 0xc1d6, 0xbab7, 0x21da, 0x5abb, 0xd718, 0xac79, 0xdc7f, 0xa71e, 0x2abd, 0x51dc, 0x0c46, 0x7727, 0xfa84, 0x81e5, 0xf1e3, 0x8a82, 0x0721, 0x7c40, 0xe72d, 0x9c4c, 0x11ef, 0x6a8e, 0x1a88, 0x61e9, 0xec4a, 0x972b, 0x7cc1, 0x07a0, 0x8a03, 0xf162, 0x8164, 0xfa05, 0x77a6, 0x0cc7, 0x97aa, 0xeccb, 0x6168, 0x1a09, 0x6a0f, 0x116e, 0x9ccd, 0xe7ac, 0xba36, 0xc157, 0x4cf4, 0x3795, 0x4793, 0x3cf2, 0xb151, 0xca30, 0x515d, 0x2a3c, 0xa79f, 0xdcfe, 0xacf8, 0xd799, 0x5a3a, 0x215b, 0xe10e, 0x9a6f, 0x17cc, 0x6cad, 0x1cab, 0x67ca, 0xea69, 0x9108, 0x0a65, 0x7104, 0xfca7, 0x87c6, 0xf7c0, 0x8ca1, 0x0102, 0x7a63, 0x27f9, 0x5c98, 0xd13b, 0xaa5a, 0xda5c, 0xa13d, 0x2c9e, 0x57ff, 0xcc92, 0xb7f3, 0x3a50, 0x4131, 0x3137, 0x4a56, 0xc7f5, 0xbc94, ], [ 0x0000, 0xaefc, 0x4dd9, 0xe325, 0x9bb2, 0x354e, 0xd66b, 0x7897, 0x2745, 0x89b9, 0x6a9c, 0xc460, 0xbcf7, 0x120b, 0xf12e, 0x5fd2, 0x4e8a, 0xe076, 0x0353, 0xadaf, 0xd538, 0x7bc4, 0x98e1, 0x361d, 0x69cf, 0xc733, 0x2416, 0x8aea, 0xf27d, 0x5c81, 0xbfa4, 0x1158, 0x9d14, 0x33e8, 0xd0cd, 0x7e31, 0x06a6, 0xa85a, 0x4b7f, 0xe583, 0xba51, 0x14ad, 0xf788, 0x5974, 0x21e3, 0x8f1f, 0x6c3a, 0xc2c6, 0xd39e, 0x7d62, 0x9e47, 0x30bb, 0x482c, 0xe6d0, 0x05f5, 0xab09, 0xf4db, 0x5a27, 0xb902, 0x17fe, 0x6f69, 0xc195, 0x22b0, 0x8c4c, 0x2a09, 0x84f5, 0x67d0, 0xc92c, 0xb1bb, 0x1f47, 0xfc62, 0x529e, 0x0d4c, 0xa3b0, 0x4095, 0xee69, 0x96fe, 0x3802, 0xdb27, 0x75db, 0x6483, 0xca7f, 0x295a, 0x87a6, 0xff31, 0x51cd, 0xb2e8, 0x1c14, 0x43c6, 0xed3a, 0x0e1f, 0xa0e3, 0xd874, 0x7688, 0x95ad, 0x3b51, 0xb71d, 0x19e1, 0xfac4, 0x5438, 0x2caf, 0x8253, 0x6176, 0xcf8a, 0x9058, 0x3ea4, 0xdd81, 0x737d, 0x0bea, 0xa516, 0x4633, 0xe8cf, 0xf997, 0x576b, 0xb44e, 0x1ab2, 0x6225, 0xccd9, 0x2ffc, 0x8100, 0xded2, 0x702e, 0x930b, 0x3df7, 0x4560, 0xeb9c, 0x08b9, 0xa645, 0x5412, 0xfaee, 0x19cb, 0xb737, 0xcfa0, 0x615c, 0x8279, 0x2c85, 0x7357, 0xddab, 0x3e8e, 0x9072, 0xe8e5, 0x4619, 0xa53c, 0x0bc0, 0x1a98, 0xb464, 0x5741, 0xf9bd, 0x812a, 0x2fd6, 0xccf3, 0x620f, 0x3ddd, 0x9321, 0x7004, 0xdef8, 0xa66f, 0x0893, 0xebb6, 0x454a, 0xc906, 0x67fa, 0x84df, 0x2a23, 0x52b4, 0xfc48, 0x1f6d, 0xb191, 0xee43, 0x40bf, 0xa39a, 0x0d66, 0x75f1, 0xdb0d, 0x3828, 0x96d4, 0x878c, 0x2970, 0xca55, 0x64a9, 0x1c3e, 0xb2c2, 0x51e7, 0xff1b, 0xa0c9, 0x0e35, 0xed10, 0x43ec, 0x3b7b, 0x9587, 0x76a2, 0xd85e, 0x7e1b, 0xd0e7, 0x33c2, 0x9d3e, 0xe5a9, 0x4b55, 0xa870, 0x068c, 0x595e, 0xf7a2, 0x1487, 0xba7b, 0xc2ec, 0x6c10, 0x8f35, 0x21c9, 0x3091, 0x9e6d, 0x7d48, 0xd3b4, 0xab23, 0x05df, 0xe6fa, 0x4806, 0x17d4, 0xb928, 0x5a0d, 0xf4f1, 0x8c66, 0x229a, 0xc1bf, 0x6f43, 0xe30f, 0x4df3, 0xaed6, 0x002a, 0x78bd, 0xd641, 0x3564, 0x9b98, 0xc44a, 0x6ab6, 0x8993, 0x276f, 0x5ff8, 0xf104, 0x1221, 0xbcdd, 0xad85, 0x0379, 0xe05c, 0x4ea0, 0x3637, 0x98cb, 0x7bee, 0xd512, 0x8ac0, 0x243c, 0xc719, 0x69e5, 0x1172, 0xbf8e, 0x5cab, 0xf257, ], [ 0x0000, 0xa824, 0x4069, 0xe84d, 0x80d2, 0x28f6, 0xc0bb, 0x689f, 0x1185, 0xb9a1, 0x51ec, 0xf9c8, 0x9157, 0x3973, 0xd13e, 0x791a, 0x230a, 0x8b2e, 0x6363, 0xcb47, 0xa3d8, 0x0bfc, 0xe3b1, 0x4b95, 0x328f, 0x9aab, 0x72e6, 0xdac2, 0xb25d, 0x1a79, 0xf234, 0x5a10, 0x4614, 0xee30, 0x067d, 0xae59, 0xc6c6, 0x6ee2, 0x86af, 0x2e8b, 0x5791, 0xffb5, 0x17f8, 0xbfdc, 0xd743, 0x7f67, 0x972a, 0x3f0e, 0x651e, 0xcd3a, 0x2577, 0x8d53, 0xe5cc, 0x4de8, 0xa5a5, 0x0d81, 0x749b, 0xdcbf, 0x34f2, 0x9cd6, 0xf449, 0x5c6d, 0xb420, 0x1c04, 0x8c28, 0x240c, 0xcc41, 0x6465, 0x0cfa, 0xa4de, 0x4c93, 0xe4b7, 0x9dad, 0x3589, 0xddc4, 0x75e0, 0x1d7f, 0xb55b, 0x5d16, 0xf532, 0xaf22, 0x0706, 0xef4b, 0x476f, 0x2ff0, 0x87d4, 0x6f99, 0xc7bd, 0xbea7, 0x1683, 0xfece, 0x56ea, 0x3e75, 0x9651, 0x7e1c, 0xd638, 0xca3c, 0x6218, 0x8a55, 0x2271, 0x4aee, 0xe2ca, 0x0a87, 0xa2a3, 0xdbb9, 0x739d, 0x9bd0, 0x33f4, 0x5b6b, 0xf34f, 0x1b02, 0xb326, 0xe936, 0x4112, 0xa95f, 0x017b, 0x69e4, 0xc1c0, 0x298d, 0x81a9, 0xf8b3, 0x5097, 0xb8da, 0x10fe, 0x7861, 0xd045, 0x3808, 0x902c, 0x0871, 0xa055, 0x4818, 0xe03c, 0x88a3, 0x2087, 0xc8ca, 0x60ee, 0x19f4, 0xb1d0, 0x599d, 0xf1b9, 0x9926, 0x3102, 0xd94f, 0x716b, 0x2b7b, 0x835f, 0x6b12, 0xc336, 0xaba9, 0x038d, 0xebc0, 0x43e4, 0x3afe, 0x92da, 0x7a97, 0xd2b3, 0xba2c, 0x1208, 0xfa45, 0x5261, 0x4e65, 0xe641, 0x0e0c, 0xa628, 0xceb7, 0x6693, 0x8ede, 0x26fa, 0x5fe0, 0xf7c4, 0x1f89, 0xb7ad, 0xdf32, 0x7716, 0x9f5b, 0x377f, 0x6d6f, 0xc54b, 0x2d06, 0x8522, 0xedbd, 0x4599, 0xadd4, 0x05f0, 0x7cea, 0xd4ce, 0x3c83, 0x94a7, 0xfc38, 0x541c, 0xbc51, 0x1475, 0x8459, 0x2c7d, 0xc430, 0x6c14, 0x048b, 0xacaf, 0x44e2, 0xecc6, 0x95dc, 0x3df8, 0xd5b5, 0x7d91, 0x150e, 0xbd2a, 0x5567, 0xfd43, 0xa753, 0x0f77, 0xe73a, 0x4f1e, 0x2781, 0x8fa5, 0x67e8, 0xcfcc, 0xb6d6, 0x1ef2, 0xf6bf, 0x5e9b, 0x3604, 0x9e20, 0x766d, 0xde49, 0xc24d, 0x6a69, 0x8224, 0x2a00, 0x429f, 0xeabb, 0x02f6, 0xaad2, 0xd3c8, 0x7bec, 0x93a1, 0x3b85, 0x531a, 0xfb3e, 0x1373, 0xbb57, 0xe147, 0x4963, 0xa12e, 0x090a, 0x6195, 0xc9b1, 0x21fc, 0x89d8, 0xf0c2, 0x58e6, 0xb0ab, 0x188f, 0x7010, 0xd834, 0x3079, 0x985d, ], ]; pub static CRC16_IBM_SDLC_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78, ], [ 0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70, 0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29, 0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333, 0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b, 0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272, 0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe, 0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6, 0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff, 0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5, 0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d, 0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04, 0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4, 0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc, 0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45, 0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f, 0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37, 0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e, 0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412, 0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b, 0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93, 0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49, 0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0, 0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8, 0xcc70, 0xe618, 0xffc0, ], [ 0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a, 0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28, 0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b, 0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d, 0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077, 0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa, 0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5, 0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6, 0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5, 0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32, 0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a, 0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388, 0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7, 0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567, 0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6, 0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510, 0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938, 0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327, 0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f, 0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9, 0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78, 0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8, 0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997, 0x734b, 0x9c2f, 0xc6f3, ], [ 0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae, 0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6, 0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53, 0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46, 0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768, 0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c, 0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183, 0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237, 0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092, 0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b, 0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d, 0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3, 0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c, 0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac, 0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1, 0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4, 0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32, 0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e, 0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878, 0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d, 0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10, 0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90, 0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f, 0xfca4, 0xd969, 0xc5d2, ], [ 0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8, 0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214, 0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091, 0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d, 0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49, 0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66, 0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612, 0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be, 0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b, 0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7, 0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3, 0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799, 0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed, 0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71, 0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4, 0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038, 0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c, 0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23, 0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37, 0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db, 0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e, 0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2, 0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896, 0xe3d2, 0xfe1e, 0xf55a, ], [ 0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e, 0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637, 0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560, 0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845, 0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a, 0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa, 0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325, 0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0, 0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7, 0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e, 0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459, 0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df, 0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00, 0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261, 0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e, 0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b, 0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c, 0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4, 0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3, 0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6, 0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9, 0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488, 0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157, 0xf57c, 0xf901, 0xfd2a, ], [ 0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957, 0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a, 0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383, 0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501, 0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87, 0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3, 0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c, 0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7, 0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e, 0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca, 0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0, 0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73, 0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c, 0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed, 0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8, 0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a, 0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900, 0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8, 0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2, 0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250, 0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55, 0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884, 0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb, 0xb91e, 0x1170, 0x8ea5, ], [ 0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3, 0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19, 0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0, 0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c, 0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039, 0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e, 0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93, 0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287, 0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e, 0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc, 0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5, 0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132, 0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef, 0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99, 0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc, 0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0, 0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9, 0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972, 0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b, 0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207, 0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552, 0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224, 0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9, 0xf946, 0x7396, 0xf229, ], [ 0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430, 0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c, 0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739, 0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4, 0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2, 0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e, 0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c, 0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015, 0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0, 0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88, 0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104, 0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0, 0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02, 0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974, 0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b, 0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6, 0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a, 0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac, 0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20, 0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed, 0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192, 0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4, 0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36, 0x27cb, 0xf1cc, 0xbc31, ], [ 0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167, 0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9, 0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5, 0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5, 0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635, 0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c, 0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce, 0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc, 0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580, 0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c, 0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5, 0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f, 0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d, 0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa, 0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf, 0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f, 0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76, 0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36, 0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df, 0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f, 0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea, 0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d, 0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df, 0x78f8, 0x0c91, 0x20b6, ], [ 0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788, 0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81, 0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a, 0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093, 0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8, 0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894, 0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa, 0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6, 0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad, 0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1, 0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260, 0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8, 0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6, 0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65, 0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4, 0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd, 0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c, 0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da, 0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b, 0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42, 0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3, 0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940, 0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e, 0x7bbf, 0x850c, 0xd09d, ], [ 0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857, 0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb, 0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0, 0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2, 0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5, 0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235, 0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa, 0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020, 0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b, 0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f, 0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4, 0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e, 0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1, 0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1, 0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006, 0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04, 0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff, 0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983, 0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78, 0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a, 0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd, 0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d, 0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852, 0x4d07, 0xcae9, 0x4fbc, ], [ 0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632, 0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9, 0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0, 0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f, 0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e, 0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc, 0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d, 0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2, 0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab, 0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880, 0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149, 0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855, 0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624, 0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7, 0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6, 0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629, 0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0, 0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea, 0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23, 0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc, 0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd, 0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e, 0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f, 0x74f2, 0x7a05, 0x7fa8, ], [ 0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7, 0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84, 0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf, 0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2, 0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05, 0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85, 0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5, 0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f, 0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04, 0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0, 0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64, 0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0, 0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0, 0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180, 0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8, 0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85, 0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701, 0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2, 0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366, 0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b, 0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63, 0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833, 0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03, 0xd4e9, 0x57d7, 0x293d, ], [ 0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126, 0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277, 0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9, 0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5, 0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0, 0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398, 0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279, 0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991, 0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f, 0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a, 0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd, 0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b, 0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea, 0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9, 0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15, 0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319, 0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e, 0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454, 0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623, 0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f, 0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3, 0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0, 0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231, 0x7a1b, 0xa265, 0xea4f, ], [ 0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5, 0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa, 0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01, 0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4, 0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da, 0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812, 0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4, 0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9, 0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932, 0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5, 0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f, 0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34, 0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882, 0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49, 0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776, 0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93, 0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69, 0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465, 0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f, 0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a, 0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545, 0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e, 0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038, 0xae28, 0x3409, 0xba19, ], ]; pub static CRC16_ISO_IEC_14443_3_A_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78, ], [ 0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70, 0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29, 0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333, 0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b, 0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272, 0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe, 0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6, 0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff, 0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5, 0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d, 0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04, 0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4, 0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc, 0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45, 0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f, 0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37, 0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e, 0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412, 0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b, 0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93, 0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49, 0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0, 0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8, 0xcc70, 0xe618, 0xffc0, ], [ 0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a, 0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28, 0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b, 0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d, 0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077, 0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa, 0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5, 0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6, 0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5, 0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32, 0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a, 0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388, 0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7, 0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567, 0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6, 0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510, 0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938, 0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327, 0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f, 0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9, 0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78, 0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8, 0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997, 0x734b, 0x9c2f, 0xc6f3, ], [ 0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae, 0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6, 0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53, 0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46, 0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768, 0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c, 0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183, 0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237, 0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092, 0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b, 0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d, 0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3, 0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c, 0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac, 0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1, 0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4, 0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32, 0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e, 0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878, 0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d, 0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10, 0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90, 0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f, 0xfca4, 0xd969, 0xc5d2, ], [ 0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8, 0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214, 0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091, 0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d, 0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49, 0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66, 0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612, 0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be, 0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b, 0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7, 0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3, 0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799, 0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed, 0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71, 0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4, 0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038, 0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c, 0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23, 0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37, 0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db, 0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e, 0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2, 0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896, 0xe3d2, 0xfe1e, 0xf55a, ], [ 0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e, 0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637, 0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560, 0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845, 0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a, 0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa, 0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325, 0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0, 0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7, 0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e, 0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459, 0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df, 0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00, 0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261, 0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e, 0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b, 0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c, 0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4, 0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3, 0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6, 0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9, 0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488, 0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157, 0xf57c, 0xf901, 0xfd2a, ], [ 0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957, 0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a, 0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383, 0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501, 0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87, 0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3, 0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c, 0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7, 0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e, 0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca, 0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0, 0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73, 0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c, 0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed, 0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8, 0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a, 0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900, 0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8, 0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2, 0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250, 0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55, 0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884, 0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb, 0xb91e, 0x1170, 0x8ea5, ], [ 0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3, 0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19, 0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0, 0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c, 0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039, 0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e, 0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93, 0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287, 0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e, 0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc, 0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5, 0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132, 0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef, 0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99, 0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc, 0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0, 0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9, 0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972, 0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b, 0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207, 0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552, 0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224, 0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9, 0xf946, 0x7396, 0xf229, ], [ 0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430, 0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c, 0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739, 0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4, 0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2, 0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e, 0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c, 0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015, 0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0, 0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88, 0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104, 0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0, 0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02, 0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974, 0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b, 0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6, 0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a, 0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac, 0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20, 0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed, 0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192, 0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4, 0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36, 0x27cb, 0xf1cc, 0xbc31, ], [ 0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167, 0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9, 0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5, 0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5, 0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635, 0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c, 0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce, 0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc, 0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580, 0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c, 0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5, 0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f, 0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d, 0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa, 0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf, 0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f, 0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76, 0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36, 0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df, 0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f, 0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea, 0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d, 0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df, 0x78f8, 0x0c91, 0x20b6, ], [ 0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788, 0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81, 0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a, 0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093, 0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8, 0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894, 0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa, 0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6, 0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad, 0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1, 0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260, 0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8, 0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6, 0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65, 0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4, 0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd, 0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c, 0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da, 0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b, 0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42, 0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3, 0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940, 0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e, 0x7bbf, 0x850c, 0xd09d, ], [ 0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857, 0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb, 0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0, 0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2, 0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5, 0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235, 0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa, 0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020, 0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b, 0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f, 0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4, 0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e, 0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1, 0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1, 0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006, 0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04, 0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff, 0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983, 0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78, 0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a, 0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd, 0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d, 0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852, 0x4d07, 0xcae9, 0x4fbc, ], [ 0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632, 0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9, 0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0, 0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f, 0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e, 0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc, 0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d, 0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2, 0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab, 0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880, 0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149, 0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855, 0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624, 0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7, 0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6, 0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629, 0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0, 0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea, 0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23, 0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc, 0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd, 0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e, 0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f, 0x74f2, 0x7a05, 0x7fa8, ], [ 0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7, 0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84, 0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf, 0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2, 0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05, 0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85, 0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5, 0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f, 0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04, 0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0, 0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64, 0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0, 0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0, 0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180, 0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8, 0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85, 0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701, 0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2, 0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366, 0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b, 0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63, 0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833, 0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03, 0xd4e9, 0x57d7, 0x293d, ], [ 0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126, 0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277, 0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9, 0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5, 0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0, 0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398, 0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279, 0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991, 0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f, 0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a, 0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd, 0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b, 0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea, 0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9, 0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15, 0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319, 0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e, 0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454, 0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623, 0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f, 0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3, 0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0, 0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231, 0x7a1b, 0xa265, 0xea4f, ], [ 0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5, 0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa, 0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01, 0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4, 0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da, 0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812, 0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4, 0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9, 0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932, 0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5, 0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f, 0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34, 0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882, 0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49, 0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776, 0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93, 0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69, 0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465, 0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f, 0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a, 0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545, 0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e, 0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038, 0xae28, 0x3409, 0xba19, ], ]; pub static CRC16_KERMIT_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78, ], [ 0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70, 0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29, 0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333, 0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b, 0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272, 0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe, 0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6, 0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff, 0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5, 0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d, 0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04, 0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4, 0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc, 0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45, 0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f, 0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37, 0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e, 0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412, 0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b, 0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93, 0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49, 0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0, 0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8, 0xcc70, 0xe618, 0xffc0, ], [ 0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a, 0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28, 0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b, 0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d, 0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077, 0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa, 0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5, 0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6, 0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5, 0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32, 0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a, 0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388, 0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7, 0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567, 0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6, 0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510, 0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938, 0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327, 0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f, 0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9, 0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78, 0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8, 0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997, 0x734b, 0x9c2f, 0xc6f3, ], [ 0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae, 0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6, 0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53, 0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46, 0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768, 0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c, 0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183, 0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237, 0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092, 0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b, 0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d, 0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3, 0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c, 0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac, 0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1, 0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4, 0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32, 0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e, 0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878, 0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d, 0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10, 0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90, 0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f, 0xfca4, 0xd969, 0xc5d2, ], [ 0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8, 0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214, 0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091, 0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d, 0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49, 0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66, 0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612, 0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be, 0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b, 0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7, 0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3, 0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799, 0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed, 0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71, 0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4, 0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038, 0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c, 0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23, 0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37, 0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db, 0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e, 0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2, 0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896, 0xe3d2, 0xfe1e, 0xf55a, ], [ 0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e, 0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637, 0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560, 0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845, 0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a, 0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa, 0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325, 0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0, 0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7, 0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e, 0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459, 0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df, 0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00, 0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261, 0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e, 0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b, 0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c, 0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4, 0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3, 0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6, 0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9, 0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488, 0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157, 0xf57c, 0xf901, 0xfd2a, ], [ 0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957, 0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a, 0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383, 0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501, 0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87, 0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3, 0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c, 0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7, 0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e, 0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca, 0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0, 0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73, 0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c, 0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed, 0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8, 0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a, 0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900, 0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8, 0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2, 0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250, 0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55, 0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884, 0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb, 0xb91e, 0x1170, 0x8ea5, ], [ 0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3, 0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19, 0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0, 0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c, 0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039, 0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e, 0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93, 0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287, 0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e, 0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc, 0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5, 0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132, 0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef, 0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99, 0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc, 0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0, 0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9, 0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972, 0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b, 0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207, 0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552, 0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224, 0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9, 0xf946, 0x7396, 0xf229, ], [ 0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430, 0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c, 0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739, 0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4, 0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2, 0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e, 0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c, 0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015, 0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0, 0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88, 0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104, 0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0, 0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02, 0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974, 0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b, 0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6, 0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a, 0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac, 0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20, 0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed, 0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192, 0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4, 0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36, 0x27cb, 0xf1cc, 0xbc31, ], [ 0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167, 0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9, 0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5, 0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5, 0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635, 0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c, 0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce, 0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc, 0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580, 0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c, 0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5, 0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f, 0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d, 0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa, 0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf, 0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f, 0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76, 0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36, 0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df, 0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f, 0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea, 0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d, 0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df, 0x78f8, 0x0c91, 0x20b6, ], [ 0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788, 0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81, 0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a, 0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093, 0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8, 0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894, 0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa, 0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6, 0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad, 0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1, 0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260, 0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8, 0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6, 0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65, 0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4, 0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd, 0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c, 0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da, 0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b, 0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42, 0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3, 0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940, 0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e, 0x7bbf, 0x850c, 0xd09d, ], [ 0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857, 0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb, 0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0, 0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2, 0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5, 0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235, 0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa, 0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020, 0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b, 0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f, 0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4, 0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e, 0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1, 0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1, 0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006, 0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04, 0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff, 0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983, 0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78, 0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a, 0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd, 0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d, 0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852, 0x4d07, 0xcae9, 0x4fbc, ], [ 0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632, 0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9, 0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0, 0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f, 0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e, 0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc, 0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d, 0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2, 0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab, 0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880, 0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149, 0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855, 0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624, 0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7, 0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6, 0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629, 0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0, 0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea, 0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23, 0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc, 0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd, 0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e, 0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f, 0x74f2, 0x7a05, 0x7fa8, ], [ 0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7, 0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84, 0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf, 0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2, 0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05, 0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85, 0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5, 0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f, 0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04, 0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0, 0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64, 0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0, 0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0, 0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180, 0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8, 0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85, 0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701, 0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2, 0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366, 0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b, 0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63, 0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833, 0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03, 0xd4e9, 0x57d7, 0x293d, ], [ 0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126, 0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277, 0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9, 0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5, 0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0, 0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398, 0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279, 0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991, 0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f, 0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a, 0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd, 0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b, 0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea, 0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9, 0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15, 0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319, 0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e, 0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454, 0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623, 0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f, 0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3, 0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0, 0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231, 0x7a1b, 0xa265, 0xea4f, ], [ 0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5, 0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa, 0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01, 0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4, 0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da, 0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812, 0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4, 0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9, 0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932, 0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5, 0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f, 0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34, 0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882, 0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49, 0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776, 0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93, 0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69, 0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465, 0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f, 0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a, 0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545, 0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e, 0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038, 0xae28, 0x3409, 0xba19, ], ]; pub static CRC16_LJ1200_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x6f63, 0xdec6, 0xb1a5, 0xd2ef, 0xbd8c, 0x0c29, 0x634a, 0xcabd, 0xa5de, 0x147b, 0x7b18, 0x1852, 0x7731, 0xc694, 0xa9f7, 0xfa19, 0x957a, 0x24df, 0x4bbc, 0x28f6, 0x4795, 0xf630, 0x9953, 0x30a4, 0x5fc7, 0xee62, 0x8101, 0xe24b, 0x8d28, 0x3c8d, 0x53ee, 0x9b51, 0xf432, 0x4597, 0x2af4, 0x49be, 0x26dd, 0x9778, 0xf81b, 0x51ec, 0x3e8f, 0x8f2a, 0xe049, 0x8303, 0xec60, 0x5dc5, 0x32a6, 0x6148, 0x0e2b, 0xbf8e, 0xd0ed, 0xb3a7, 0xdcc4, 0x6d61, 0x0202, 0xabf5, 0xc496, 0x7533, 0x1a50, 0x791a, 0x1679, 0xa7dc, 0xc8bf, 0x59c1, 0x36a2, 0x8707, 0xe864, 0x8b2e, 0xe44d, 0x55e8, 0x3a8b, 0x937c, 0xfc1f, 0x4dba, 0x22d9, 0x4193, 0x2ef0, 0x9f55, 0xf036, 0xa3d8, 0xccbb, 0x7d1e, 0x127d, 0x7137, 0x1e54, 0xaff1, 0xc092, 0x6965, 0x0606, 0xb7a3, 0xd8c0, 0xbb8a, 0xd4e9, 0x654c, 0x0a2f, 0xc290, 0xadf3, 0x1c56, 0x7335, 0x107f, 0x7f1c, 0xceb9, 0xa1da, 0x082d, 0x674e, 0xd6eb, 0xb988, 0xdac2, 0xb5a1, 0x0404, 0x6b67, 0x3889, 0x57ea, 0xe64f, 0x892c, 0xea66, 0x8505, 0x34a0, 0x5bc3, 0xf234, 0x9d57, 0x2cf2, 0x4391, 0x20db, 0x4fb8, 0xfe1d, 0x917e, 0xb382, 0xdce1, 0x6d44, 0x0227, 0x616d, 0x0e0e, 0xbfab, 0xd0c8, 0x793f, 0x165c, 0xa7f9, 0xc89a, 0xabd0, 0xc4b3, 0x7516, 0x1a75, 0x499b, 0x26f8, 0x975d, 0xf83e, 0x9b74, 0xf417, 0x45b2, 0x2ad1, 0x8326, 0xec45, 0x5de0, 0x3283, 0x51c9, 0x3eaa, 0x8f0f, 0xe06c, 0x28d3, 0x47b0, 0xf615, 0x9976, 0xfa3c, 0x955f, 0x24fa, 0x4b99, 0xe26e, 0x8d0d, 0x3ca8, 0x53cb, 0x3081, 0x5fe2, 0xee47, 0x8124, 0xd2ca, 0xbda9, 0x0c0c, 0x636f, 0x0025, 0x6f46, 0xdee3, 0xb180, 0x1877, 0x7714, 0xc6b1, 0xa9d2, 0xca98, 0xa5fb, 0x145e, 0x7b3d, 0xea43, 0x8520, 0x3485, 0x5be6, 0x38ac, 0x57cf, 0xe66a, 0x8909, 0x20fe, 0x4f9d, 0xfe38, 0x915b, 0xf211, 0x9d72, 0x2cd7, 0x43b4, 0x105a, 0x7f39, 0xce9c, 0xa1ff, 0xc2b5, 0xadd6, 0x1c73, 0x7310, 0xdae7, 0xb584, 0x0421, 0x6b42, 0x0808, 0x676b, 0xd6ce, 0xb9ad, 0x7112, 0x1e71, 0xafd4, 0xc0b7, 0xa3fd, 0xcc9e, 0x7d3b, 0x1258, 0xbbaf, 0xd4cc, 0x6569, 0x0a0a, 0x6940, 0x0623, 0xb786, 0xd8e5, 0x8b0b, 0xe468, 0x55cd, 0x3aae, 0x59e4, 0x3687, 0x8722, 0xe841, 0x41b6, 0x2ed5, 0x9f70, 0xf013, 0x9359, 0xfc3a, 0x4d9f, 0x22fc, ], [ 0x0000, 0x0867, 0x10ce, 0x18a9, 0x219c, 0x29fb, 0x3152, 0x3935, 0x4338, 0x4b5f, 0x53f6, 0x5b91, 0x62a4, 0x6ac3, 0x726a, 0x7a0d, 0x8670, 0x8e17, 0x96be, 0x9ed9, 0xa7ec, 0xaf8b, 0xb722, 0xbf45, 0xc548, 0xcd2f, 0xd586, 0xdde1, 0xe4d4, 0xecb3, 0xf41a, 0xfc7d, 0x6383, 0x6be4, 0x734d, 0x7b2a, 0x421f, 0x4a78, 0x52d1, 0x5ab6, 0x20bb, 0x28dc, 0x3075, 0x3812, 0x0127, 0x0940, 0x11e9, 0x198e, 0xe5f3, 0xed94, 0xf53d, 0xfd5a, 0xc46f, 0xcc08, 0xd4a1, 0xdcc6, 0xa6cb, 0xaeac, 0xb605, 0xbe62, 0x8757, 0x8f30, 0x9799, 0x9ffe, 0xc706, 0xcf61, 0xd7c8, 0xdfaf, 0xe69a, 0xeefd, 0xf654, 0xfe33, 0x843e, 0x8c59, 0x94f0, 0x9c97, 0xa5a2, 0xadc5, 0xb56c, 0xbd0b, 0x4176, 0x4911, 0x51b8, 0x59df, 0x60ea, 0x688d, 0x7024, 0x7843, 0x024e, 0x0a29, 0x1280, 0x1ae7, 0x23d2, 0x2bb5, 0x331c, 0x3b7b, 0xa485, 0xace2, 0xb44b, 0xbc2c, 0x8519, 0x8d7e, 0x95d7, 0x9db0, 0xe7bd, 0xefda, 0xf773, 0xff14, 0xc621, 0xce46, 0xd6ef, 0xde88, 0x22f5, 0x2a92, 0x323b, 0x3a5c, 0x0369, 0x0b0e, 0x13a7, 0x1bc0, 0x61cd, 0x69aa, 0x7103, 0x7964, 0x4051, 0x4836, 0x509f, 0x58f8, 0xe16f, 0xe908, 0xf1a1, 0xf9c6, 0xc0f3, 0xc894, 0xd03d, 0xd85a, 0xa257, 0xaa30, 0xb299, 0xbafe, 0x83cb, 0x8bac, 0x9305, 0x9b62, 0x671f, 0x6f78, 0x77d1, 0x7fb6, 0x4683, 0x4ee4, 0x564d, 0x5e2a, 0x2427, 0x2c40, 0x34e9, 0x3c8e, 0x05bb, 0x0ddc, 0x1575, 0x1d12, 0x82ec, 0x8a8b, 0x9222, 0x9a45, 0xa370, 0xab17, 0xb3be, 0xbbd9, 0xc1d4, 0xc9b3, 0xd11a, 0xd97d, 0xe048, 0xe82f, 0xf086, 0xf8e1, 0x049c, 0x0cfb, 0x1452, 0x1c35, 0x2500, 0x2d67, 0x35ce, 0x3da9, 0x47a4, 0x4fc3, 0x576a, 0x5f0d, 0x6638, 0x6e5f, 0x76f6, 0x7e91, 0x2669, 0x2e0e, 0x36a7, 0x3ec0, 0x07f5, 0x0f92, 0x173b, 0x1f5c, 0x6551, 0x6d36, 0x759f, 0x7df8, 0x44cd, 0x4caa, 0x5403, 0x5c64, 0xa019, 0xa87e, 0xb0d7, 0xb8b0, 0x8185, 0x89e2, 0x914b, 0x992c, 0xe321, 0xeb46, 0xf3ef, 0xfb88, 0xc2bd, 0xcada, 0xd273, 0xda14, 0x45ea, 0x4d8d, 0x5524, 0x5d43, 0x6476, 0x6c11, 0x74b8, 0x7cdf, 0x06d2, 0x0eb5, 0x161c, 0x1e7b, 0x274e, 0x2f29, 0x3780, 0x3fe7, 0xc39a, 0xcbfd, 0xd354, 0xdb33, 0xe206, 0xea61, 0xf2c8, 0xfaaf, 0x80a2, 0x88c5, 0x906c, 0x980b, 0xa13e, 0xa959, 0xb1f0, 0xb997, ], [ 0x0000, 0xadbd, 0x3419, 0x99a4, 0x6832, 0xc58f, 0x5c2b, 0xf196, 0xd064, 0x7dd9, 0xe47d, 0x49c0, 0xb856, 0x15eb, 0x8c4f, 0x21f2, 0xcfab, 0x6216, 0xfbb2, 0x560f, 0xa799, 0x0a24, 0x9380, 0x3e3d, 0x1fcf, 0xb272, 0x2bd6, 0x866b, 0x77fd, 0xda40, 0x43e4, 0xee59, 0xf035, 0x5d88, 0xc42c, 0x6991, 0x9807, 0x35ba, 0xac1e, 0x01a3, 0x2051, 0x8dec, 0x1448, 0xb9f5, 0x4863, 0xe5de, 0x7c7a, 0xd1c7, 0x3f9e, 0x9223, 0x0b87, 0xa63a, 0x57ac, 0xfa11, 0x63b5, 0xce08, 0xeffa, 0x4247, 0xdbe3, 0x765e, 0x87c8, 0x2a75, 0xb3d1, 0x1e6c, 0x8f09, 0x22b4, 0xbb10, 0x16ad, 0xe73b, 0x4a86, 0xd322, 0x7e9f, 0x5f6d, 0xf2d0, 0x6b74, 0xc6c9, 0x375f, 0x9ae2, 0x0346, 0xaefb, 0x40a2, 0xed1f, 0x74bb, 0xd906, 0x2890, 0x852d, 0x1c89, 0xb134, 0x90c6, 0x3d7b, 0xa4df, 0x0962, 0xf8f4, 0x5549, 0xcced, 0x6150, 0x7f3c, 0xd281, 0x4b25, 0xe698, 0x170e, 0xbab3, 0x2317, 0x8eaa, 0xaf58, 0x02e5, 0x9b41, 0x36fc, 0xc76a, 0x6ad7, 0xf373, 0x5ece, 0xb097, 0x1d2a, 0x848e, 0x2933, 0xd8a5, 0x7518, 0xecbc, 0x4101, 0x60f3, 0xcd4e, 0x54ea, 0xf957, 0x08c1, 0xa57c, 0x3cd8, 0x9165, 0x7171, 0xdccc, 0x4568, 0xe8d5, 0x1943, 0xb4fe, 0x2d5a, 0x80e7, 0xa115, 0x0ca8, 0x950c, 0x38b1, 0xc927, 0x649a, 0xfd3e, 0x5083, 0xbeda, 0x1367, 0x8ac3, 0x277e, 0xd6e8, 0x7b55, 0xe2f1, 0x4f4c, 0x6ebe, 0xc303, 0x5aa7, 0xf71a, 0x068c, 0xab31, 0x3295, 0x9f28, 0x8144, 0x2cf9, 0xb55d, 0x18e0, 0xe976, 0x44cb, 0xdd6f, 0x70d2, 0x5120, 0xfc9d, 0x6539, 0xc884, 0x3912, 0x94af, 0x0d0b, 0xa0b6, 0x4eef, 0xe352, 0x7af6, 0xd74b, 0x26dd, 0x8b60, 0x12c4, 0xbf79, 0x9e8b, 0x3336, 0xaa92, 0x072f, 0xf6b9, 0x5b04, 0xc2a0, 0x6f1d, 0xfe78, 0x53c5, 0xca61, 0x67dc, 0x964a, 0x3bf7, 0xa253, 0x0fee, 0x2e1c, 0x83a1, 0x1a05, 0xb7b8, 0x462e, 0xeb93, 0x7237, 0xdf8a, 0x31d3, 0x9c6e, 0x05ca, 0xa877, 0x59e1, 0xf45c, 0x6df8, 0xc045, 0xe1b7, 0x4c0a, 0xd5ae, 0x7813, 0x8985, 0x2438, 0xbd9c, 0x1021, 0x0e4d, 0xa3f0, 0x3a54, 0x97e9, 0x667f, 0xcbc2, 0x5266, 0xffdb, 0xde29, 0x7394, 0xea30, 0x478d, 0xb61b, 0x1ba6, 0x8202, 0x2fbf, 0xc1e6, 0x6c5b, 0xf5ff, 0x5842, 0xa9d4, 0x0469, 0x9dcd, 0x3070, 0x1182, 0xbc3f, 0x259b, 0x8826, 0x79b0, 0xd40d, 0x4da9, 0xe014, ], [ 0x0000, 0xe2e2, 0xaaa7, 0x4845, 0x3a2d, 0xd8cf, 0x908a, 0x7268, 0x745a, 0x96b8, 0xdefd, 0x3c1f, 0x4e77, 0xac95, 0xe4d0, 0x0632, 0xe8b4, 0x0a56, 0x4213, 0xa0f1, 0xd299, 0x307b, 0x783e, 0x9adc, 0x9cee, 0x7e0c, 0x3649, 0xd4ab, 0xa6c3, 0x4421, 0x0c64, 0xee86, 0xbe0b, 0x5ce9, 0x14ac, 0xf64e, 0x8426, 0x66c4, 0x2e81, 0xcc63, 0xca51, 0x28b3, 0x60f6, 0x8214, 0xf07c, 0x129e, 0x5adb, 0xb839, 0x56bf, 0xb45d, 0xfc18, 0x1efa, 0x6c92, 0x8e70, 0xc635, 0x24d7, 0x22e5, 0xc007, 0x8842, 0x6aa0, 0x18c8, 0xfa2a, 0xb26f, 0x508d, 0x1375, 0xf197, 0xb9d2, 0x5b30, 0x2958, 0xcbba, 0x83ff, 0x611d, 0x672f, 0x85cd, 0xcd88, 0x2f6a, 0x5d02, 0xbfe0, 0xf7a5, 0x1547, 0xfbc1, 0x1923, 0x5166, 0xb384, 0xc1ec, 0x230e, 0x6b4b, 0x89a9, 0x8f9b, 0x6d79, 0x253c, 0xc7de, 0xb5b6, 0x5754, 0x1f11, 0xfdf3, 0xad7e, 0x4f9c, 0x07d9, 0xe53b, 0x9753, 0x75b1, 0x3df4, 0xdf16, 0xd924, 0x3bc6, 0x7383, 0x9161, 0xe309, 0x01eb, 0x49ae, 0xab4c, 0x45ca, 0xa728, 0xef6d, 0x0d8f, 0x7fe7, 0x9d05, 0xd540, 0x37a2, 0x3190, 0xd372, 0x9b37, 0x79d5, 0x0bbd, 0xe95f, 0xa11a, 0x43f8, 0x26ea, 0xc408, 0x8c4d, 0x6eaf, 0x1cc7, 0xfe25, 0xb660, 0x5482, 0x52b0, 0xb052, 0xf817, 0x1af5, 0x689d, 0x8a7f, 0xc23a, 0x20d8, 0xce5e, 0x2cbc, 0x64f9, 0x861b, 0xf473, 0x1691, 0x5ed4, 0xbc36, 0xba04, 0x58e6, 0x10a3, 0xf241, 0x8029, 0x62cb, 0x2a8e, 0xc86c, 0x98e1, 0x7a03, 0x3246, 0xd0a4, 0xa2cc, 0x402e, 0x086b, 0xea89, 0xecbb, 0x0e59, 0x461c, 0xa4fe, 0xd696, 0x3474, 0x7c31, 0x9ed3, 0x7055, 0x92b7, 0xdaf2, 0x3810, 0x4a78, 0xa89a, 0xe0df, 0x023d, 0x040f, 0xe6ed, 0xaea8, 0x4c4a, 0x3e22, 0xdcc0, 0x9485, 0x7667, 0x359f, 0xd77d, 0x9f38, 0x7dda, 0x0fb2, 0xed50, 0xa515, 0x47f7, 0x41c5, 0xa327, 0xeb62, 0x0980, 0x7be8, 0x990a, 0xd14f, 0x33ad, 0xdd2b, 0x3fc9, 0x778c, 0x956e, 0xe706, 0x05e4, 0x4da1, 0xaf43, 0xa971, 0x4b93, 0x03d6, 0xe134, 0x935c, 0x71be, 0x39fb, 0xdb19, 0x8b94, 0x6976, 0x2133, 0xc3d1, 0xb1b9, 0x535b, 0x1b1e, 0xf9fc, 0xffce, 0x1d2c, 0x5569, 0xb78b, 0xc5e3, 0x2701, 0x6f44, 0x8da6, 0x6320, 0x81c2, 0xc987, 0x2b65, 0x590d, 0xbbef, 0xf3aa, 0x1148, 0x177a, 0xf598, 0xbddd, 0x5f3f, 0x2d57, 0xcfb5, 0x87f0, 0x6512, ], [ 0x0000, 0x4dd4, 0x9ba8, 0xd67c, 0x5833, 0x15e7, 0xc39b, 0x8e4f, 0xb066, 0xfdb2, 0x2bce, 0x661a, 0xe855, 0xa581, 0x73fd, 0x3e29, 0x0faf, 0x427b, 0x9407, 0xd9d3, 0x579c, 0x1a48, 0xcc34, 0x81e0, 0xbfc9, 0xf21d, 0x2461, 0x69b5, 0xe7fa, 0xaa2e, 0x7c52, 0x3186, 0x1f5e, 0x528a, 0x84f6, 0xc922, 0x476d, 0x0ab9, 0xdcc5, 0x9111, 0xaf38, 0xe2ec, 0x3490, 0x7944, 0xf70b, 0xbadf, 0x6ca3, 0x2177, 0x10f1, 0x5d25, 0x8b59, 0xc68d, 0x48c2, 0x0516, 0xd36a, 0x9ebe, 0xa097, 0xed43, 0x3b3f, 0x76eb, 0xf8a4, 0xb570, 0x630c, 0x2ed8, 0x3ebc, 0x7368, 0xa514, 0xe8c0, 0x668f, 0x2b5b, 0xfd27, 0xb0f3, 0x8eda, 0xc30e, 0x1572, 0x58a6, 0xd6e9, 0x9b3d, 0x4d41, 0x0095, 0x3113, 0x7cc7, 0xaabb, 0xe76f, 0x6920, 0x24f4, 0xf288, 0xbf5c, 0x8175, 0xcca1, 0x1add, 0x5709, 0xd946, 0x9492, 0x42ee, 0x0f3a, 0x21e2, 0x6c36, 0xba4a, 0xf79e, 0x79d1, 0x3405, 0xe279, 0xafad, 0x9184, 0xdc50, 0x0a2c, 0x47f8, 0xc9b7, 0x8463, 0x521f, 0x1fcb, 0x2e4d, 0x6399, 0xb5e5, 0xf831, 0x767e, 0x3baa, 0xedd6, 0xa002, 0x9e2b, 0xd3ff, 0x0583, 0x4857, 0xc618, 0x8bcc, 0x5db0, 0x1064, 0x7d78, 0x30ac, 0xe6d0, 0xab04, 0x254b, 0x689f, 0xbee3, 0xf337, 0xcd1e, 0x80ca, 0x56b6, 0x1b62, 0x952d, 0xd8f9, 0x0e85, 0x4351, 0x72d7, 0x3f03, 0xe97f, 0xa4ab, 0x2ae4, 0x6730, 0xb14c, 0xfc98, 0xc2b1, 0x8f65, 0x5919, 0x14cd, 0x9a82, 0xd756, 0x012a, 0x4cfe, 0x6226, 0x2ff2, 0xf98e, 0xb45a, 0x3a15, 0x77c1, 0xa1bd, 0xec69, 0xd240, 0x9f94, 0x49e8, 0x043c, 0x8a73, 0xc7a7, 0x11db, 0x5c0f, 0x6d89, 0x205d, 0xf621, 0xbbf5, 0x35ba, 0x786e, 0xae12, 0xe3c6, 0xddef, 0x903b, 0x4647, 0x0b93, 0x85dc, 0xc808, 0x1e74, 0x53a0, 0x43c4, 0x0e10, 0xd86c, 0x95b8, 0x1bf7, 0x5623, 0x805f, 0xcd8b, 0xf3a2, 0xbe76, 0x680a, 0x25de, 0xab91, 0xe645, 0x3039, 0x7ded, 0x4c6b, 0x01bf, 0xd7c3, 0x9a17, 0x1458, 0x598c, 0x8ff0, 0xc224, 0xfc0d, 0xb1d9, 0x67a5, 0x2a71, 0xa43e, 0xe9ea, 0x3f96, 0x7242, 0x5c9a, 0x114e, 0xc732, 0x8ae6, 0x04a9, 0x497d, 0x9f01, 0xd2d5, 0xecfc, 0xa128, 0x7754, 0x3a80, 0xb4cf, 0xf91b, 0x2f67, 0x62b3, 0x5335, 0x1ee1, 0xc89d, 0x8549, 0x0b06, 0x46d2, 0x90ae, 0xdd7a, 0xe353, 0xae87, 0x78fb, 0x352f, 0xbb60, 0xf6b4, 0x20c8, 0x6d1c, ], [ 0x0000, 0xfaf0, 0x9a83, 0x6073, 0x5a65, 0xa095, 0xc0e6, 0x3a16, 0xb4ca, 0x4e3a, 0x2e49, 0xd4b9, 0xeeaf, 0x145f, 0x742c, 0x8edc, 0x06f7, 0xfc07, 0x9c74, 0x6684, 0x5c92, 0xa662, 0xc611, 0x3ce1, 0xb23d, 0x48cd, 0x28be, 0xd24e, 0xe858, 0x12a8, 0x72db, 0x882b, 0x0dee, 0xf71e, 0x976d, 0x6d9d, 0x578b, 0xad7b, 0xcd08, 0x37f8, 0xb924, 0x43d4, 0x23a7, 0xd957, 0xe341, 0x19b1, 0x79c2, 0x8332, 0x0b19, 0xf1e9, 0x919a, 0x6b6a, 0x517c, 0xab8c, 0xcbff, 0x310f, 0xbfd3, 0x4523, 0x2550, 0xdfa0, 0xe5b6, 0x1f46, 0x7f35, 0x85c5, 0x1bdc, 0xe12c, 0x815f, 0x7baf, 0x41b9, 0xbb49, 0xdb3a, 0x21ca, 0xaf16, 0x55e6, 0x3595, 0xcf65, 0xf573, 0x0f83, 0x6ff0, 0x9500, 0x1d2b, 0xe7db, 0x87a8, 0x7d58, 0x474e, 0xbdbe, 0xddcd, 0x273d, 0xa9e1, 0x5311, 0x3362, 0xc992, 0xf384, 0x0974, 0x6907, 0x93f7, 0x1632, 0xecc2, 0x8cb1, 0x7641, 0x4c57, 0xb6a7, 0xd6d4, 0x2c24, 0xa2f8, 0x5808, 0x387b, 0xc28b, 0xf89d, 0x026d, 0x621e, 0x98ee, 0x10c5, 0xea35, 0x8a46, 0x70b6, 0x4aa0, 0xb050, 0xd023, 0x2ad3, 0xa40f, 0x5eff, 0x3e8c, 0xc47c, 0xfe6a, 0x049a, 0x64e9, 0x9e19, 0x37b8, 0xcd48, 0xad3b, 0x57cb, 0x6ddd, 0x972d, 0xf75e, 0x0dae, 0x8372, 0x7982, 0x19f1, 0xe301, 0xd917, 0x23e7, 0x4394, 0xb964, 0x314f, 0xcbbf, 0xabcc, 0x513c, 0x6b2a, 0x91da, 0xf1a9, 0x0b59, 0x8585, 0x7f75, 0x1f06, 0xe5f6, 0xdfe0, 0x2510, 0x4563, 0xbf93, 0x3a56, 0xc0a6, 0xa0d5, 0x5a25, 0x6033, 0x9ac3, 0xfab0, 0x0040, 0x8e9c, 0x746c, 0x141f, 0xeeef, 0xd4f9, 0x2e09, 0x4e7a, 0xb48a, 0x3ca1, 0xc651, 0xa622, 0x5cd2, 0x66c4, 0x9c34, 0xfc47, 0x06b7, 0x886b, 0x729b, 0x12e8, 0xe818, 0xd20e, 0x28fe, 0x488d, 0xb27d, 0x2c64, 0xd694, 0xb6e7, 0x4c17, 0x7601, 0x8cf1, 0xec82, 0x1672, 0x98ae, 0x625e, 0x022d, 0xf8dd, 0xc2cb, 0x383b, 0x5848, 0xa2b8, 0x2a93, 0xd063, 0xb010, 0x4ae0, 0x70f6, 0x8a06, 0xea75, 0x1085, 0x9e59, 0x64a9, 0x04da, 0xfe2a, 0xc43c, 0x3ecc, 0x5ebf, 0xa44f, 0x218a, 0xdb7a, 0xbb09, 0x41f9, 0x7bef, 0x811f, 0xe16c, 0x1b9c, 0x9540, 0x6fb0, 0x0fc3, 0xf533, 0xcf25, 0x35d5, 0x55a6, 0xaf56, 0x277d, 0xdd8d, 0xbdfe, 0x470e, 0x7d18, 0x87e8, 0xe79b, 0x1d6b, 0x93b7, 0x6947, 0x0934, 0xf3c4, 0xc9d2, 0x3322, 0x5351, 0xa9a1, ], [ 0x0000, 0x6f70, 0xdee0, 0xb190, 0xd2a3, 0xbdd3, 0x0c43, 0x6333, 0xca25, 0xa555, 0x14c5, 0x7bb5, 0x1886, 0x77f6, 0xc666, 0xa916, 0xfb29, 0x9459, 0x25c9, 0x4ab9, 0x298a, 0x46fa, 0xf76a, 0x981a, 0x310c, 0x5e7c, 0xefec, 0x809c, 0xe3af, 0x8cdf, 0x3d4f, 0x523f, 0x9931, 0xf641, 0x47d1, 0x28a1, 0x4b92, 0x24e2, 0x9572, 0xfa02, 0x5314, 0x3c64, 0x8df4, 0xe284, 0x81b7, 0xeec7, 0x5f57, 0x3027, 0x6218, 0x0d68, 0xbcf8, 0xd388, 0xb0bb, 0xdfcb, 0x6e5b, 0x012b, 0xa83d, 0xc74d, 0x76dd, 0x19ad, 0x7a9e, 0x15ee, 0xa47e, 0xcb0e, 0x5d01, 0x3271, 0x83e1, 0xec91, 0x8fa2, 0xe0d2, 0x5142, 0x3e32, 0x9724, 0xf854, 0x49c4, 0x26b4, 0x4587, 0x2af7, 0x9b67, 0xf417, 0xa628, 0xc958, 0x78c8, 0x17b8, 0x748b, 0x1bfb, 0xaa6b, 0xc51b, 0x6c0d, 0x037d, 0xb2ed, 0xdd9d, 0xbeae, 0xd1de, 0x604e, 0x0f3e, 0xc430, 0xab40, 0x1ad0, 0x75a0, 0x1693, 0x79e3, 0xc873, 0xa703, 0x0e15, 0x6165, 0xd0f5, 0xbf85, 0xdcb6, 0xb3c6, 0x0256, 0x6d26, 0x3f19, 0x5069, 0xe1f9, 0x8e89, 0xedba, 0x82ca, 0x335a, 0x5c2a, 0xf53c, 0x9a4c, 0x2bdc, 0x44ac, 0x279f, 0x48ef, 0xf97f, 0x960f, 0xba02, 0xd572, 0x64e2, 0x0b92, 0x68a1, 0x07d1, 0xb641, 0xd931, 0x7027, 0x1f57, 0xaec7, 0xc1b7, 0xa284, 0xcdf4, 0x7c64, 0x1314, 0x412b, 0x2e5b, 0x9fcb, 0xf0bb, 0x9388, 0xfcf8, 0x4d68, 0x2218, 0x8b0e, 0xe47e, 0x55ee, 0x3a9e, 0x59ad, 0x36dd, 0x874d, 0xe83d, 0x2333, 0x4c43, 0xfdd3, 0x92a3, 0xf190, 0x9ee0, 0x2f70, 0x4000, 0xe916, 0x8666, 0x37f6, 0x5886, 0x3bb5, 0x54c5, 0xe555, 0x8a25, 0xd81a, 0xb76a, 0x06fa, 0x698a, 0x0ab9, 0x65c9, 0xd459, 0xbb29, 0x123f, 0x7d4f, 0xccdf, 0xa3af, 0xc09c, 0xafec, 0x1e7c, 0x710c, 0xe703, 0x8873, 0x39e3, 0x5693, 0x35a0, 0x5ad0, 0xeb40, 0x8430, 0x2d26, 0x4256, 0xf3c6, 0x9cb6, 0xff85, 0x90f5, 0x2165, 0x4e15, 0x1c2a, 0x735a, 0xc2ca, 0xadba, 0xce89, 0xa1f9, 0x1069, 0x7f19, 0xd60f, 0xb97f, 0x08ef, 0x679f, 0x04ac, 0x6bdc, 0xda4c, 0xb53c, 0x7e32, 0x1142, 0xa0d2, 0xcfa2, 0xac91, 0xc3e1, 0x7271, 0x1d01, 0xb417, 0xdb67, 0x6af7, 0x0587, 0x66b4, 0x09c4, 0xb854, 0xd724, 0x851b, 0xea6b, 0x5bfb, 0x348b, 0x57b8, 0x38c8, 0x8958, 0xe628, 0x4f3e, 0x204e, 0x91de, 0xfeae, 0x9d9d, 0xf2ed, 0x437d, 0x2c0d, ], [ 0x0000, 0x1b67, 0x36ce, 0x2da9, 0x6d9c, 0x76fb, 0x5b52, 0x4035, 0xdb38, 0xc05f, 0xedf6, 0xf691, 0xb6a4, 0xadc3, 0x806a, 0x9b0d, 0xd913, 0xc274, 0xefdd, 0xf4ba, 0xb48f, 0xafe8, 0x8241, 0x9926, 0x022b, 0x194c, 0x34e5, 0x2f82, 0x6fb7, 0x74d0, 0x5979, 0x421e, 0xdd45, 0xc622, 0xeb8b, 0xf0ec, 0xb0d9, 0xabbe, 0x8617, 0x9d70, 0x067d, 0x1d1a, 0x30b3, 0x2bd4, 0x6be1, 0x7086, 0x5d2f, 0x4648, 0x0456, 0x1f31, 0x3298, 0x29ff, 0x69ca, 0x72ad, 0x5f04, 0x4463, 0xdf6e, 0xc409, 0xe9a0, 0xf2c7, 0xb2f2, 0xa995, 0x843c, 0x9f5b, 0xd5e9, 0xce8e, 0xe327, 0xf840, 0xb875, 0xa312, 0x8ebb, 0x95dc, 0x0ed1, 0x15b6, 0x381f, 0x2378, 0x634d, 0x782a, 0x5583, 0x4ee4, 0x0cfa, 0x179d, 0x3a34, 0x2153, 0x6166, 0x7a01, 0x57a8, 0x4ccf, 0xd7c2, 0xcca5, 0xe10c, 0xfa6b, 0xba5e, 0xa139, 0x8c90, 0x97f7, 0x08ac, 0x13cb, 0x3e62, 0x2505, 0x6530, 0x7e57, 0x53fe, 0x4899, 0xd394, 0xc8f3, 0xe55a, 0xfe3d, 0xbe08, 0xa56f, 0x88c6, 0x93a1, 0xd1bf, 0xcad8, 0xe771, 0xfc16, 0xbc23, 0xa744, 0x8aed, 0x918a, 0x0a87, 0x11e0, 0x3c49, 0x272e, 0x671b, 0x7c7c, 0x51d5, 0x4ab2, 0xc4b1, 0xdfd6, 0xf27f, 0xe918, 0xa92d, 0xb24a, 0x9fe3, 0x8484, 0x1f89, 0x04ee, 0x2947, 0x3220, 0x7215, 0x6972, 0x44db, 0x5fbc, 0x1da2, 0x06c5, 0x2b6c, 0x300b, 0x703e, 0x6b59, 0x46f0, 0x5d97, 0xc69a, 0xddfd, 0xf054, 0xeb33, 0xab06, 0xb061, 0x9dc8, 0x86af, 0x19f4, 0x0293, 0x2f3a, 0x345d, 0x7468, 0x6f0f, 0x42a6, 0x59c1, 0xc2cc, 0xd9ab, 0xf402, 0xef65, 0xaf50, 0xb437, 0x999e, 0x82f9, 0xc0e7, 0xdb80, 0xf629, 0xed4e, 0xad7b, 0xb61c, 0x9bb5, 0x80d2, 0x1bdf, 0x00b8, 0x2d11, 0x3676, 0x7643, 0x6d24, 0x408d, 0x5bea, 0x1158, 0x0a3f, 0x2796, 0x3cf1, 0x7cc4, 0x67a3, 0x4a0a, 0x516d, 0xca60, 0xd107, 0xfcae, 0xe7c9, 0xa7fc, 0xbc9b, 0x9132, 0x8a55, 0xc84b, 0xd32c, 0xfe85, 0xe5e2, 0xa5d7, 0xbeb0, 0x9319, 0x887e, 0x1373, 0x0814, 0x25bd, 0x3eda, 0x7eef, 0x6588, 0x4821, 0x5346, 0xcc1d, 0xd77a, 0xfad3, 0xe1b4, 0xa181, 0xbae6, 0x974f, 0x8c28, 0x1725, 0x0c42, 0x21eb, 0x3a8c, 0x7ab9, 0x61de, 0x4c77, 0x5710, 0x150e, 0x0e69, 0x23c0, 0x38a7, 0x7892, 0x63f5, 0x4e5c, 0x553b, 0xce36, 0xd551, 0xf8f8, 0xe39f, 0xa3aa, 0xb8cd, 0x9564, 0x8e03, ], [ 0x0000, 0xe601, 0xa361, 0x4560, 0x29a1, 0xcfa0, 0x8ac0, 0x6cc1, 0x5342, 0xb543, 0xf023, 0x1622, 0x7ae3, 0x9ce2, 0xd982, 0x3f83, 0xa684, 0x4085, 0x05e5, 0xe3e4, 0x8f25, 0x6924, 0x2c44, 0xca45, 0xf5c6, 0x13c7, 0x56a7, 0xb0a6, 0xdc67, 0x3a66, 0x7f06, 0x9907, 0x226b, 0xc46a, 0x810a, 0x670b, 0x0bca, 0xedcb, 0xa8ab, 0x4eaa, 0x7129, 0x9728, 0xd248, 0x3449, 0x5888, 0xbe89, 0xfbe9, 0x1de8, 0x84ef, 0x62ee, 0x278e, 0xc18f, 0xad4e, 0x4b4f, 0x0e2f, 0xe82e, 0xd7ad, 0x31ac, 0x74cc, 0x92cd, 0xfe0c, 0x180d, 0x5d6d, 0xbb6c, 0x44d6, 0xa2d7, 0xe7b7, 0x01b6, 0x6d77, 0x8b76, 0xce16, 0x2817, 0x1794, 0xf195, 0xb4f5, 0x52f4, 0x3e35, 0xd834, 0x9d54, 0x7b55, 0xe252, 0x0453, 0x4133, 0xa732, 0xcbf3, 0x2df2, 0x6892, 0x8e93, 0xb110, 0x5711, 0x1271, 0xf470, 0x98b1, 0x7eb0, 0x3bd0, 0xddd1, 0x66bd, 0x80bc, 0xc5dc, 0x23dd, 0x4f1c, 0xa91d, 0xec7d, 0x0a7c, 0x35ff, 0xd3fe, 0x969e, 0x709f, 0x1c5e, 0xfa5f, 0xbf3f, 0x593e, 0xc039, 0x2638, 0x6358, 0x8559, 0xe998, 0x0f99, 0x4af9, 0xacf8, 0x937b, 0x757a, 0x301a, 0xd61b, 0xbada, 0x5cdb, 0x19bb, 0xffba, 0x89ac, 0x6fad, 0x2acd, 0xcccc, 0xa00d, 0x460c, 0x036c, 0xe56d, 0xdaee, 0x3cef, 0x798f, 0x9f8e, 0xf34f, 0x154e, 0x502e, 0xb62f, 0x2f28, 0xc929, 0x8c49, 0x6a48, 0x0689, 0xe088, 0xa5e8, 0x43e9, 0x7c6a, 0x9a6b, 0xdf0b, 0x390a, 0x55cb, 0xb3ca, 0xf6aa, 0x10ab, 0xabc7, 0x4dc6, 0x08a6, 0xeea7, 0x8266, 0x6467, 0x2107, 0xc706, 0xf885, 0x1e84, 0x5be4, 0xbde5, 0xd124, 0x3725, 0x7245, 0x9444, 0x0d43, 0xeb42, 0xae22, 0x4823, 0x24e2, 0xc2e3, 0x8783, 0x6182, 0x5e01, 0xb800, 0xfd60, 0x1b61, 0x77a0, 0x91a1, 0xd4c1, 0x32c0, 0xcd7a, 0x2b7b, 0x6e1b, 0x881a, 0xe4db, 0x02da, 0x47ba, 0xa1bb, 0x9e38, 0x7839, 0x3d59, 0xdb58, 0xb799, 0x5198, 0x14f8, 0xf2f9, 0x6bfe, 0x8dff, 0xc89f, 0x2e9e, 0x425f, 0xa45e, 0xe13e, 0x073f, 0x38bc, 0xdebd, 0x9bdd, 0x7ddc, 0x111d, 0xf71c, 0xb27c, 0x547d, 0xef11, 0x0910, 0x4c70, 0xaa71, 0xc6b0, 0x20b1, 0x65d1, 0x83d0, 0xbc53, 0x5a52, 0x1f32, 0xf933, 0x95f2, 0x73f3, 0x3693, 0xd092, 0x4995, 0xaf94, 0xeaf4, 0x0cf5, 0x6034, 0x8635, 0xc355, 0x2554, 0x1ad7, 0xfcd6, 0xb9b6, 0x5fb7, 0x3376, 0xd577, 0x9017, 0x7616, ], [ 0x0000, 0x7c3b, 0xf876, 0x844d, 0x9f8f, 0xe3b4, 0x67f9, 0x1bc2, 0x507d, 0x2c46, 0xa80b, 0xd430, 0xcff2, 0xb3c9, 0x3784, 0x4bbf, 0xa0fa, 0xdcc1, 0x588c, 0x24b7, 0x3f75, 0x434e, 0xc703, 0xbb38, 0xf087, 0x8cbc, 0x08f1, 0x74ca, 0x6f08, 0x1333, 0x977e, 0xeb45, 0x2e97, 0x52ac, 0xd6e1, 0xaada, 0xb118, 0xcd23, 0x496e, 0x3555, 0x7eea, 0x02d1, 0x869c, 0xfaa7, 0xe165, 0x9d5e, 0x1913, 0x6528, 0x8e6d, 0xf256, 0x761b, 0x0a20, 0x11e2, 0x6dd9, 0xe994, 0x95af, 0xde10, 0xa22b, 0x2666, 0x5a5d, 0x419f, 0x3da4, 0xb9e9, 0xc5d2, 0x5d2e, 0x2115, 0xa558, 0xd963, 0xc2a1, 0xbe9a, 0x3ad7, 0x46ec, 0x0d53, 0x7168, 0xf525, 0x891e, 0x92dc, 0xeee7, 0x6aaa, 0x1691, 0xfdd4, 0x81ef, 0x05a2, 0x7999, 0x625b, 0x1e60, 0x9a2d, 0xe616, 0xada9, 0xd192, 0x55df, 0x29e4, 0x3226, 0x4e1d, 0xca50, 0xb66b, 0x73b9, 0x0f82, 0x8bcf, 0xf7f4, 0xec36, 0x900d, 0x1440, 0x687b, 0x23c4, 0x5fff, 0xdbb2, 0xa789, 0xbc4b, 0xc070, 0x443d, 0x3806, 0xd343, 0xaf78, 0x2b35, 0x570e, 0x4ccc, 0x30f7, 0xb4ba, 0xc881, 0x833e, 0xff05, 0x7b48, 0x0773, 0x1cb1, 0x608a, 0xe4c7, 0x98fc, 0xba5c, 0xc667, 0x422a, 0x3e11, 0x25d3, 0x59e8, 0xdda5, 0xa19e, 0xea21, 0x961a, 0x1257, 0x6e6c, 0x75ae, 0x0995, 0x8dd8, 0xf1e3, 0x1aa6, 0x669d, 0xe2d0, 0x9eeb, 0x8529, 0xf912, 0x7d5f, 0x0164, 0x4adb, 0x36e0, 0xb2ad, 0xce96, 0xd554, 0xa96f, 0x2d22, 0x5119, 0x94cb, 0xe8f0, 0x6cbd, 0x1086, 0x0b44, 0x777f, 0xf332, 0x8f09, 0xc4b6, 0xb88d, 0x3cc0, 0x40fb, 0x5b39, 0x2702, 0xa34f, 0xdf74, 0x3431, 0x480a, 0xcc47, 0xb07c, 0xabbe, 0xd785, 0x53c8, 0x2ff3, 0x644c, 0x1877, 0x9c3a, 0xe001, 0xfbc3, 0x87f8, 0x03b5, 0x7f8e, 0xe772, 0x9b49, 0x1f04, 0x633f, 0x78fd, 0x04c6, 0x808b, 0xfcb0, 0xb70f, 0xcb34, 0x4f79, 0x3342, 0x2880, 0x54bb, 0xd0f6, 0xaccd, 0x4788, 0x3bb3, 0xbffe, 0xc3c5, 0xd807, 0xa43c, 0x2071, 0x5c4a, 0x17f5, 0x6bce, 0xef83, 0x93b8, 0x887a, 0xf441, 0x700c, 0x0c37, 0xc9e5, 0xb5de, 0x3193, 0x4da8, 0x566a, 0x2a51, 0xae1c, 0xd227, 0x9998, 0xe5a3, 0x61ee, 0x1dd5, 0x0617, 0x7a2c, 0xfe61, 0x825a, 0x691f, 0x1524, 0x9169, 0xed52, 0xf690, 0x8aab, 0x0ee6, 0x72dd, 0x3962, 0x4559, 0xc114, 0xbd2f, 0xa6ed, 0xdad6, 0x5e9b, 0x22a0, ], [ 0x0000, 0x1bdb, 0x37b6, 0x2c6d, 0x6f6c, 0x74b7, 0x58da, 0x4301, 0xded8, 0xc503, 0xe96e, 0xf2b5, 0xb1b4, 0xaa6f, 0x8602, 0x9dd9, 0xd2d3, 0xc908, 0xe565, 0xfebe, 0xbdbf, 0xa664, 0x8a09, 0x91d2, 0x0c0b, 0x17d0, 0x3bbd, 0x2066, 0x6367, 0x78bc, 0x54d1, 0x4f0a, 0xcac5, 0xd11e, 0xfd73, 0xe6a8, 0xa5a9, 0xbe72, 0x921f, 0x89c4, 0x141d, 0x0fc6, 0x23ab, 0x3870, 0x7b71, 0x60aa, 0x4cc7, 0x571c, 0x1816, 0x03cd, 0x2fa0, 0x347b, 0x777a, 0x6ca1, 0x40cc, 0x5b17, 0xc6ce, 0xdd15, 0xf178, 0xeaa3, 0xa9a2, 0xb279, 0x9e14, 0x85cf, 0xfae9, 0xe132, 0xcd5f, 0xd684, 0x9585, 0x8e5e, 0xa233, 0xb9e8, 0x2431, 0x3fea, 0x1387, 0x085c, 0x4b5d, 0x5086, 0x7ceb, 0x6730, 0x283a, 0x33e1, 0x1f8c, 0x0457, 0x4756, 0x5c8d, 0x70e0, 0x6b3b, 0xf6e2, 0xed39, 0xc154, 0xda8f, 0x998e, 0x8255, 0xae38, 0xb5e3, 0x302c, 0x2bf7, 0x079a, 0x1c41, 0x5f40, 0x449b, 0x68f6, 0x732d, 0xeef4, 0xf52f, 0xd942, 0xc299, 0x8198, 0x9a43, 0xb62e, 0xadf5, 0xe2ff, 0xf924, 0xd549, 0xce92, 0x8d93, 0x9648, 0xba25, 0xa1fe, 0x3c27, 0x27fc, 0x0b91, 0x104a, 0x534b, 0x4890, 0x64fd, 0x7f26, 0x9ab1, 0x816a, 0xad07, 0xb6dc, 0xf5dd, 0xee06, 0xc26b, 0xd9b0, 0x4469, 0x5fb2, 0x73df, 0x6804, 0x2b05, 0x30de, 0x1cb3, 0x0768, 0x4862, 0x53b9, 0x7fd4, 0x640f, 0x270e, 0x3cd5, 0x10b8, 0x0b63, 0x96ba, 0x8d61, 0xa10c, 0xbad7, 0xf9d6, 0xe20d, 0xce60, 0xd5bb, 0x5074, 0x4baf, 0x67c2, 0x7c19, 0x3f18, 0x24c3, 0x08ae, 0x1375, 0x8eac, 0x9577, 0xb91a, 0xa2c1, 0xe1c0, 0xfa1b, 0xd676, 0xcdad, 0x82a7, 0x997c, 0xb511, 0xaeca, 0xedcb, 0xf610, 0xda7d, 0xc1a6, 0x5c7f, 0x47a4, 0x6bc9, 0x7012, 0x3313, 0x28c8, 0x04a5, 0x1f7e, 0x6058, 0x7b83, 0x57ee, 0x4c35, 0x0f34, 0x14ef, 0x3882, 0x2359, 0xbe80, 0xa55b, 0x8936, 0x92ed, 0xd1ec, 0xca37, 0xe65a, 0xfd81, 0xb28b, 0xa950, 0x853d, 0x9ee6, 0xdde7, 0xc63c, 0xea51, 0xf18a, 0x6c53, 0x7788, 0x5be5, 0x403e, 0x033f, 0x18e4, 0x3489, 0x2f52, 0xaa9d, 0xb146, 0x9d2b, 0x86f0, 0xc5f1, 0xde2a, 0xf247, 0xe99c, 0x7445, 0x6f9e, 0x43f3, 0x5828, 0x1b29, 0x00f2, 0x2c9f, 0x3744, 0x784e, 0x6395, 0x4ff8, 0x5423, 0x1722, 0x0cf9, 0x2094, 0x3b4f, 0xa696, 0xbd4d, 0x9120, 0x8afb, 0xc9fa, 0xd221, 0xfe4c, 0xe597, ], [ 0x0000, 0x5a01, 0xb402, 0xee03, 0x0767, 0x5d66, 0xb365, 0xe964, 0x0ece, 0x54cf, 0xbacc, 0xe0cd, 0x09a9, 0x53a8, 0xbdab, 0xe7aa, 0x1d9c, 0x479d, 0xa99e, 0xf39f, 0x1afb, 0x40fa, 0xaef9, 0xf4f8, 0x1352, 0x4953, 0xa750, 0xfd51, 0x1435, 0x4e34, 0xa037, 0xfa36, 0x3b38, 0x6139, 0x8f3a, 0xd53b, 0x3c5f, 0x665e, 0x885d, 0xd25c, 0x35f6, 0x6ff7, 0x81f4, 0xdbf5, 0x3291, 0x6890, 0x8693, 0xdc92, 0x26a4, 0x7ca5, 0x92a6, 0xc8a7, 0x21c3, 0x7bc2, 0x95c1, 0xcfc0, 0x286a, 0x726b, 0x9c68, 0xc669, 0x2f0d, 0x750c, 0x9b0f, 0xc10e, 0x7670, 0x2c71, 0xc272, 0x9873, 0x7117, 0x2b16, 0xc515, 0x9f14, 0x78be, 0x22bf, 0xccbc, 0x96bd, 0x7fd9, 0x25d8, 0xcbdb, 0x91da, 0x6bec, 0x31ed, 0xdfee, 0x85ef, 0x6c8b, 0x368a, 0xd889, 0x8288, 0x6522, 0x3f23, 0xd120, 0x8b21, 0x6245, 0x3844, 0xd647, 0x8c46, 0x4d48, 0x1749, 0xf94a, 0xa34b, 0x4a2f, 0x102e, 0xfe2d, 0xa42c, 0x4386, 0x1987, 0xf784, 0xad85, 0x44e1, 0x1ee0, 0xf0e3, 0xaae2, 0x50d4, 0x0ad5, 0xe4d6, 0xbed7, 0x57b3, 0x0db2, 0xe3b1, 0xb9b0, 0x5e1a, 0x041b, 0xea18, 0xb019, 0x597d, 0x037c, 0xed7f, 0xb77e, 0xece0, 0xb6e1, 0x58e2, 0x02e3, 0xeb87, 0xb186, 0x5f85, 0x0584, 0xe22e, 0xb82f, 0x562c, 0x0c2d, 0xe549, 0xbf48, 0x514b, 0x0b4a, 0xf17c, 0xab7d, 0x457e, 0x1f7f, 0xf61b, 0xac1a, 0x4219, 0x1818, 0xffb2, 0xa5b3, 0x4bb0, 0x11b1, 0xf8d5, 0xa2d4, 0x4cd7, 0x16d6, 0xd7d8, 0x8dd9, 0x63da, 0x39db, 0xd0bf, 0x8abe, 0x64bd, 0x3ebc, 0xd916, 0x8317, 0x6d14, 0x3715, 0xde71, 0x8470, 0x6a73, 0x3072, 0xca44, 0x9045, 0x7e46, 0x2447, 0xcd23, 0x9722, 0x7921, 0x2320, 0xc48a, 0x9e8b, 0x7088, 0x2a89, 0xc3ed, 0x99ec, 0x77ef, 0x2dee, 0x9a90, 0xc091, 0x2e92, 0x7493, 0x9df7, 0xc7f6, 0x29f5, 0x73f4, 0x945e, 0xce5f, 0x205c, 0x7a5d, 0x9339, 0xc938, 0x273b, 0x7d3a, 0x870c, 0xdd0d, 0x330e, 0x690f, 0x806b, 0xda6a, 0x3469, 0x6e68, 0x89c2, 0xd3c3, 0x3dc0, 0x67c1, 0x8ea5, 0xd4a4, 0x3aa7, 0x60a6, 0xa1a8, 0xfba9, 0x15aa, 0x4fab, 0xa6cf, 0xfcce, 0x12cd, 0x48cc, 0xaf66, 0xf567, 0x1b64, 0x4165, 0xa801, 0xf200, 0x1c03, 0x4602, 0xbc34, 0xe635, 0x0836, 0x5237, 0xbb53, 0xe152, 0x0f51, 0x5550, 0xb2fa, 0xe8fb, 0x06f8, 0x5cf9, 0xb59d, 0xef9c, 0x019f, 0x5b9e, ], [ 0x0000, 0xb6a3, 0x0225, 0xb486, 0x044a, 0xb2e9, 0x066f, 0xb0cc, 0x0894, 0xbe37, 0x0ab1, 0xbc12, 0x0cde, 0xba7d, 0x0efb, 0xb858, 0x1128, 0xa78b, 0x130d, 0xa5ae, 0x1562, 0xa3c1, 0x1747, 0xa1e4, 0x19bc, 0xaf1f, 0x1b99, 0xad3a, 0x1df6, 0xab55, 0x1fd3, 0xa970, 0x2250, 0x94f3, 0x2075, 0x96d6, 0x261a, 0x90b9, 0x243f, 0x929c, 0x2ac4, 0x9c67, 0x28e1, 0x9e42, 0x2e8e, 0x982d, 0x2cab, 0x9a08, 0x3378, 0x85db, 0x315d, 0x87fe, 0x3732, 0x8191, 0x3517, 0x83b4, 0x3bec, 0x8d4f, 0x39c9, 0x8f6a, 0x3fa6, 0x8905, 0x3d83, 0x8b20, 0x44a0, 0xf203, 0x4685, 0xf026, 0x40ea, 0xf649, 0x42cf, 0xf46c, 0x4c34, 0xfa97, 0x4e11, 0xf8b2, 0x487e, 0xfedd, 0x4a5b, 0xfcf8, 0x5588, 0xe32b, 0x57ad, 0xe10e, 0x51c2, 0xe761, 0x53e7, 0xe544, 0x5d1c, 0xebbf, 0x5f39, 0xe99a, 0x5956, 0xeff5, 0x5b73, 0xedd0, 0x66f0, 0xd053, 0x64d5, 0xd276, 0x62ba, 0xd419, 0x609f, 0xd63c, 0x6e64, 0xd8c7, 0x6c41, 0xdae2, 0x6a2e, 0xdc8d, 0x680b, 0xdea8, 0x77d8, 0xc17b, 0x75fd, 0xc35e, 0x7392, 0xc531, 0x71b7, 0xc714, 0x7f4c, 0xc9ef, 0x7d69, 0xcbca, 0x7b06, 0xcda5, 0x7923, 0xcf80, 0x8940, 0x3fe3, 0x8b65, 0x3dc6, 0x8d0a, 0x3ba9, 0x8f2f, 0x398c, 0x81d4, 0x3777, 0x83f1, 0x3552, 0x859e, 0x333d, 0x87bb, 0x3118, 0x9868, 0x2ecb, 0x9a4d, 0x2cee, 0x9c22, 0x2a81, 0x9e07, 0x28a4, 0x90fc, 0x265f, 0x92d9, 0x247a, 0x94b6, 0x2215, 0x9693, 0x2030, 0xab10, 0x1db3, 0xa935, 0x1f96, 0xaf5a, 0x19f9, 0xad7f, 0x1bdc, 0xa384, 0x1527, 0xa1a1, 0x1702, 0xa7ce, 0x116d, 0xa5eb, 0x1348, 0xba38, 0x0c9b, 0xb81d, 0x0ebe, 0xbe72, 0x08d1, 0xbc57, 0x0af4, 0xb2ac, 0x040f, 0xb089, 0x062a, 0xb6e6, 0x0045, 0xb4c3, 0x0260, 0xcde0, 0x7b43, 0xcfc5, 0x7966, 0xc9aa, 0x7f09, 0xcb8f, 0x7d2c, 0xc574, 0x73d7, 0xc751, 0x71f2, 0xc13e, 0x779d, 0xc31b, 0x75b8, 0xdcc8, 0x6a6b, 0xdeed, 0x684e, 0xd882, 0x6e21, 0xdaa7, 0x6c04, 0xd45c, 0x62ff, 0xd679, 0x60da, 0xd016, 0x66b5, 0xd233, 0x6490, 0xefb0, 0x5913, 0xed95, 0x5b36, 0xebfa, 0x5d59, 0xe9df, 0x5f7c, 0xe724, 0x5187, 0xe501, 0x53a2, 0xe36e, 0x55cd, 0xe14b, 0x57e8, 0xfe98, 0x483b, 0xfcbd, 0x4a1e, 0xfad2, 0x4c71, 0xf8f7, 0x4e54, 0xf60c, 0x40af, 0xf429, 0x428a, 0xf246, 0x44e5, 0xf063, 0x46c0, ], [ 0x0000, 0x7de3, 0xfbc6, 0x8625, 0x98ef, 0xe50c, 0x6329, 0x1eca, 0x5ebd, 0x235e, 0xa57b, 0xd898, 0xc652, 0xbbb1, 0x3d94, 0x4077, 0xbd7a, 0xc099, 0x46bc, 0x3b5f, 0x2595, 0x5876, 0xde53, 0xa3b0, 0xe3c7, 0x9e24, 0x1801, 0x65e2, 0x7b28, 0x06cb, 0x80ee, 0xfd0d, 0x1597, 0x6874, 0xee51, 0x93b2, 0x8d78, 0xf09b, 0x76be, 0x0b5d, 0x4b2a, 0x36c9, 0xb0ec, 0xcd0f, 0xd3c5, 0xae26, 0x2803, 0x55e0, 0xa8ed, 0xd50e, 0x532b, 0x2ec8, 0x3002, 0x4de1, 0xcbc4, 0xb627, 0xf650, 0x8bb3, 0x0d96, 0x7075, 0x6ebf, 0x135c, 0x9579, 0xe89a, 0x2b2e, 0x56cd, 0xd0e8, 0xad0b, 0xb3c1, 0xce22, 0x4807, 0x35e4, 0x7593, 0x0870, 0x8e55, 0xf3b6, 0xed7c, 0x909f, 0x16ba, 0x6b59, 0x9654, 0xebb7, 0x6d92, 0x1071, 0x0ebb, 0x7358, 0xf57d, 0x889e, 0xc8e9, 0xb50a, 0x332f, 0x4ecc, 0x5006, 0x2de5, 0xabc0, 0xd623, 0x3eb9, 0x435a, 0xc57f, 0xb89c, 0xa656, 0xdbb5, 0x5d90, 0x2073, 0x6004, 0x1de7, 0x9bc2, 0xe621, 0xf8eb, 0x8508, 0x032d, 0x7ece, 0x83c3, 0xfe20, 0x7805, 0x05e6, 0x1b2c, 0x66cf, 0xe0ea, 0x9d09, 0xdd7e, 0xa09d, 0x26b8, 0x5b5b, 0x4591, 0x3872, 0xbe57, 0xc3b4, 0x565c, 0x2bbf, 0xad9a, 0xd079, 0xceb3, 0xb350, 0x3575, 0x4896, 0x08e1, 0x7502, 0xf327, 0x8ec4, 0x900e, 0xeded, 0x6bc8, 0x162b, 0xeb26, 0x96c5, 0x10e0, 0x6d03, 0x73c9, 0x0e2a, 0x880f, 0xf5ec, 0xb59b, 0xc878, 0x4e5d, 0x33be, 0x2d74, 0x5097, 0xd6b2, 0xab51, 0x43cb, 0x3e28, 0xb80d, 0xc5ee, 0xdb24, 0xa6c7, 0x20e2, 0x5d01, 0x1d76, 0x6095, 0xe6b0, 0x9b53, 0x8599, 0xf87a, 0x7e5f, 0x03bc, 0xfeb1, 0x8352, 0x0577, 0x7894, 0x665e, 0x1bbd, 0x9d98, 0xe07b, 0xa00c, 0xddef, 0x5bca, 0x2629, 0x38e3, 0x4500, 0xc325, 0xbec6, 0x7d72, 0x0091, 0x86b4, 0xfb57, 0xe59d, 0x987e, 0x1e5b, 0x63b8, 0x23cf, 0x5e2c, 0xd809, 0xa5ea, 0xbb20, 0xc6c3, 0x40e6, 0x3d05, 0xc008, 0xbdeb, 0x3bce, 0x462d, 0x58e7, 0x2504, 0xa321, 0xdec2, 0x9eb5, 0xe356, 0x6573, 0x1890, 0x065a, 0x7bb9, 0xfd9c, 0x807f, 0x68e5, 0x1506, 0x9323, 0xeec0, 0xf00a, 0x8de9, 0x0bcc, 0x762f, 0x3658, 0x4bbb, 0xcd9e, 0xb07d, 0xaeb7, 0xd354, 0x5571, 0x2892, 0xd59f, 0xa87c, 0x2e59, 0x53ba, 0x4d70, 0x3093, 0xb6b6, 0xcb55, 0x8b22, 0xf6c1, 0x70e4, 0x0d07, 0x13cd, 0x6e2e, 0xe80b, 0x95e8, ], [ 0x0000, 0xacb8, 0x3613, 0x9aab, 0x6c26, 0xc09e, 0x5a35, 0xf68d, 0xd84c, 0x74f4, 0xee5f, 0x42e7, 0xb46a, 0x18d2, 0x8279, 0x2ec1, 0xdffb, 0x7343, 0xe9e8, 0x4550, 0xb3dd, 0x1f65, 0x85ce, 0x2976, 0x07b7, 0xab0f, 0x31a4, 0x9d1c, 0x6b91, 0xc729, 0x5d82, 0xf13a, 0xd095, 0x7c2d, 0xe686, 0x4a3e, 0xbcb3, 0x100b, 0x8aa0, 0x2618, 0x08d9, 0xa461, 0x3eca, 0x9272, 0x64ff, 0xc847, 0x52ec, 0xfe54, 0x0f6e, 0xa3d6, 0x397d, 0x95c5, 0x6348, 0xcff0, 0x555b, 0xf9e3, 0xd722, 0x7b9a, 0xe131, 0x4d89, 0xbb04, 0x17bc, 0x8d17, 0x21af, 0xce49, 0x62f1, 0xf85a, 0x54e2, 0xa26f, 0x0ed7, 0x947c, 0x38c4, 0x1605, 0xbabd, 0x2016, 0x8cae, 0x7a23, 0xd69b, 0x4c30, 0xe088, 0x11b2, 0xbd0a, 0x27a1, 0x8b19, 0x7d94, 0xd12c, 0x4b87, 0xe73f, 0xc9fe, 0x6546, 0xffed, 0x5355, 0xa5d8, 0x0960, 0x93cb, 0x3f73, 0x1edc, 0xb264, 0x28cf, 0x8477, 0x72fa, 0xde42, 0x44e9, 0xe851, 0xc690, 0x6a28, 0xf083, 0x5c3b, 0xaab6, 0x060e, 0x9ca5, 0x301d, 0xc127, 0x6d9f, 0xf734, 0x5b8c, 0xad01, 0x01b9, 0x9b12, 0x37aa, 0x196b, 0xb5d3, 0x2f78, 0x83c0, 0x754d, 0xd9f5, 0x435e, 0xefe6, 0xf3f1, 0x5f49, 0xc5e2, 0x695a, 0x9fd7, 0x336f, 0xa9c4, 0x057c, 0x2bbd, 0x8705, 0x1dae, 0xb116, 0x479b, 0xeb23, 0x7188, 0xdd30, 0x2c0a, 0x80b2, 0x1a19, 0xb6a1, 0x402c, 0xec94, 0x763f, 0xda87, 0xf446, 0x58fe, 0xc255, 0x6eed, 0x9860, 0x34d8, 0xae73, 0x02cb, 0x2364, 0x8fdc, 0x1577, 0xb9cf, 0x4f42, 0xe3fa, 0x7951, 0xd5e9, 0xfb28, 0x5790, 0xcd3b, 0x6183, 0x970e, 0x3bb6, 0xa11d, 0x0da5, 0xfc9f, 0x5027, 0xca8c, 0x6634, 0x90b9, 0x3c01, 0xa6aa, 0x0a12, 0x24d3, 0x886b, 0x12c0, 0xbe78, 0x48f5, 0xe44d, 0x7ee6, 0xd25e, 0x3db8, 0x9100, 0x0bab, 0xa713, 0x519e, 0xfd26, 0x678d, 0xcb35, 0xe5f4, 0x494c, 0xd3e7, 0x7f5f, 0x89d2, 0x256a, 0xbfc1, 0x1379, 0xe243, 0x4efb, 0xd450, 0x78e8, 0x8e65, 0x22dd, 0xb876, 0x14ce, 0x3a0f, 0x96b7, 0x0c1c, 0xa0a4, 0x5629, 0xfa91, 0x603a, 0xcc82, 0xed2d, 0x4195, 0xdb3e, 0x7786, 0x810b, 0x2db3, 0xb718, 0x1ba0, 0x3561, 0x99d9, 0x0372, 0xafca, 0x5947, 0xf5ff, 0x6f54, 0xc3ec, 0x32d6, 0x9e6e, 0x04c5, 0xa87d, 0x5ef0, 0xf248, 0x68e3, 0xc45b, 0xea9a, 0x4622, 0xdc89, 0x7031, 0x86bc, 0x2a04, 0xb0af, 0x1c17, ], [ 0x0000, 0x8881, 0x7e61, 0xf6e0, 0xfcc2, 0x7443, 0x82a3, 0x0a22, 0x96e7, 0x1e66, 0xe886, 0x6007, 0x6a25, 0xe2a4, 0x1444, 0x9cc5, 0x42ad, 0xca2c, 0x3ccc, 0xb44d, 0xbe6f, 0x36ee, 0xc00e, 0x488f, 0xd44a, 0x5ccb, 0xaa2b, 0x22aa, 0x2888, 0xa009, 0x56e9, 0xde68, 0x855a, 0x0ddb, 0xfb3b, 0x73ba, 0x7998, 0xf119, 0x07f9, 0x8f78, 0x13bd, 0x9b3c, 0x6ddc, 0xe55d, 0xef7f, 0x67fe, 0x911e, 0x199f, 0xc7f7, 0x4f76, 0xb996, 0x3117, 0x3b35, 0xb3b4, 0x4554, 0xcdd5, 0x5110, 0xd991, 0x2f71, 0xa7f0, 0xadd2, 0x2553, 0xd3b3, 0x5b32, 0x65d7, 0xed56, 0x1bb6, 0x9337, 0x9915, 0x1194, 0xe774, 0x6ff5, 0xf330, 0x7bb1, 0x8d51, 0x05d0, 0x0ff2, 0x8773, 0x7193, 0xf912, 0x277a, 0xaffb, 0x591b, 0xd19a, 0xdbb8, 0x5339, 0xa5d9, 0x2d58, 0xb19d, 0x391c, 0xcffc, 0x477d, 0x4d5f, 0xc5de, 0x333e, 0xbbbf, 0xe08d, 0x680c, 0x9eec, 0x166d, 0x1c4f, 0x94ce, 0x622e, 0xeaaf, 0x766a, 0xfeeb, 0x080b, 0x808a, 0x8aa8, 0x0229, 0xf4c9, 0x7c48, 0xa220, 0x2aa1, 0xdc41, 0x54c0, 0x5ee2, 0xd663, 0x2083, 0xa802, 0x34c7, 0xbc46, 0x4aa6, 0xc227, 0xc805, 0x4084, 0xb664, 0x3ee5, 0xcbae, 0x432f, 0xb5cf, 0x3d4e, 0x376c, 0xbfed, 0x490d, 0xc18c, 0x5d49, 0xd5c8, 0x2328, 0xaba9, 0xa18b, 0x290a, 0xdfea, 0x576b, 0x8903, 0x0182, 0xf762, 0x7fe3, 0x75c1, 0xfd40, 0x0ba0, 0x8321, 0x1fe4, 0x9765, 0x6185, 0xe904, 0xe326, 0x6ba7, 0x9d47, 0x15c6, 0x4ef4, 0xc675, 0x3095, 0xb814, 0xb236, 0x3ab7, 0xcc57, 0x44d6, 0xd813, 0x5092, 0xa672, 0x2ef3, 0x24d1, 0xac50, 0x5ab0, 0xd231, 0x0c59, 0x84d8, 0x7238, 0xfab9, 0xf09b, 0x781a, 0x8efa, 0x067b, 0x9abe, 0x123f, 0xe4df, 0x6c5e, 0x667c, 0xeefd, 0x181d, 0x909c, 0xae79, 0x26f8, 0xd018, 0x5899, 0x52bb, 0xda3a, 0x2cda, 0xa45b, 0x389e, 0xb01f, 0x46ff, 0xce7e, 0xc45c, 0x4cdd, 0xba3d, 0x32bc, 0xecd4, 0x6455, 0x92b5, 0x1a34, 0x1016, 0x9897, 0x6e77, 0xe6f6, 0x7a33, 0xf2b2, 0x0452, 0x8cd3, 0x86f1, 0x0e70, 0xf890, 0x7011, 0x2b23, 0xa3a2, 0x5542, 0xddc3, 0xd7e1, 0x5f60, 0xa980, 0x2101, 0xbdc4, 0x3545, 0xc3a5, 0x4b24, 0x4106, 0xc987, 0x3f67, 0xb7e6, 0x698e, 0xe10f, 0x17ef, 0x9f6e, 0x954c, 0x1dcd, 0xeb2d, 0x63ac, 0xff69, 0x77e8, 0x8108, 0x0989, 0x03ab, 0x8b2a, 0x7dca, 0xf54b, ], ]; pub static CRC16_M17_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x5935, 0xb26a, 0xeb5f, 0x3de1, 0x64d4, 0x8f8b, 0xd6be, 0x7bc2, 0x22f7, 0xc9a8, 0x909d, 0x4623, 0x1f16, 0xf449, 0xad7c, 0xf784, 0xaeb1, 0x45ee, 0x1cdb, 0xca65, 0x9350, 0x780f, 0x213a, 0x8c46, 0xd573, 0x3e2c, 0x6719, 0xb1a7, 0xe892, 0x03cd, 0x5af8, 0xb63d, 0xef08, 0x0457, 0x5d62, 0x8bdc, 0xd2e9, 0x39b6, 0x6083, 0xcdff, 0x94ca, 0x7f95, 0x26a0, 0xf01e, 0xa92b, 0x4274, 0x1b41, 0x41b9, 0x188c, 0xf3d3, 0xaae6, 0x7c58, 0x256d, 0xce32, 0x9707, 0x3a7b, 0x634e, 0x8811, 0xd124, 0x079a, 0x5eaf, 0xb5f0, 0xecc5, 0x354f, 0x6c7a, 0x8725, 0xde10, 0x08ae, 0x519b, 0xbac4, 0xe3f1, 0x4e8d, 0x17b8, 0xfce7, 0xa5d2, 0x736c, 0x2a59, 0xc106, 0x9833, 0xc2cb, 0x9bfe, 0x70a1, 0x2994, 0xff2a, 0xa61f, 0x4d40, 0x1475, 0xb909, 0xe03c, 0x0b63, 0x5256, 0x84e8, 0xdddd, 0x3682, 0x6fb7, 0x8372, 0xda47, 0x3118, 0x682d, 0xbe93, 0xe7a6, 0x0cf9, 0x55cc, 0xf8b0, 0xa185, 0x4ada, 0x13ef, 0xc551, 0x9c64, 0x773b, 0x2e0e, 0x74f6, 0x2dc3, 0xc69c, 0x9fa9, 0x4917, 0x1022, 0xfb7d, 0xa248, 0x0f34, 0x5601, 0xbd5e, 0xe46b, 0x32d5, 0x6be0, 0x80bf, 0xd98a, 0x6a9e, 0x33ab, 0xd8f4, 0x81c1, 0x577f, 0x0e4a, 0xe515, 0xbc20, 0x115c, 0x4869, 0xa336, 0xfa03, 0x2cbd, 0x7588, 0x9ed7, 0xc7e2, 0x9d1a, 0xc42f, 0x2f70, 0x7645, 0xa0fb, 0xf9ce, 0x1291, 0x4ba4, 0xe6d8, 0xbfed, 0x54b2, 0x0d87, 0xdb39, 0x820c, 0x6953, 0x3066, 0xdca3, 0x8596, 0x6ec9, 0x37fc, 0xe142, 0xb877, 0x5328, 0x0a1d, 0xa761, 0xfe54, 0x150b, 0x4c3e, 0x9a80, 0xc3b5, 0x28ea, 0x71df, 0x2b27, 0x7212, 0x994d, 0xc078, 0x16c6, 0x4ff3, 0xa4ac, 0xfd99, 0x50e5, 0x09d0, 0xe28f, 0xbbba, 0x6d04, 0x3431, 0xdf6e, 0x865b, 0x5fd1, 0x06e4, 0xedbb, 0xb48e, 0x6230, 0x3b05, 0xd05a, 0x896f, 0x2413, 0x7d26, 0x9679, 0xcf4c, 0x19f2, 0x40c7, 0xab98, 0xf2ad, 0xa855, 0xf160, 0x1a3f, 0x430a, 0x95b4, 0xcc81, 0x27de, 0x7eeb, 0xd397, 0x8aa2, 0x61fd, 0x38c8, 0xee76, 0xb743, 0x5c1c, 0x0529, 0xe9ec, 0xb0d9, 0x5b86, 0x02b3, 0xd40d, 0x8d38, 0x6667, 0x3f52, 0x922e, 0xcb1b, 0x2044, 0x7971, 0xafcf, 0xf6fa, 0x1da5, 0x4490, 0x1e68, 0x475d, 0xac02, 0xf537, 0x2389, 0x7abc, 0x91e3, 0xc8d6, 0x65aa, 0x3c9f, 0xd7c0, 0x8ef5, 0x584b, 0x017e, 0xea21, 0xb314, ], [ 0x0000, 0xd53c, 0xf34d, 0x2671, 0xbfaf, 0x6a93, 0x4ce2, 0x99de, 0x266b, 0xf357, 0xd526, 0x001a, 0x99c4, 0x4cf8, 0x6a89, 0xbfb5, 0x4cd6, 0x99ea, 0xbf9b, 0x6aa7, 0xf379, 0x2645, 0x0034, 0xd508, 0x6abd, 0xbf81, 0x99f0, 0x4ccc, 0xd512, 0x002e, 0x265f, 0xf363, 0x99ac, 0x4c90, 0x6ae1, 0xbfdd, 0x2603, 0xf33f, 0xd54e, 0x0072, 0xbfc7, 0x6afb, 0x4c8a, 0x99b6, 0x0068, 0xd554, 0xf325, 0x2619, 0xd57a, 0x0046, 0x2637, 0xf30b, 0x6ad5, 0xbfe9, 0x9998, 0x4ca4, 0xf311, 0x262d, 0x005c, 0xd560, 0x4cbe, 0x9982, 0xbff3, 0x6acf, 0x6a6d, 0xbf51, 0x9920, 0x4c1c, 0xd5c2, 0x00fe, 0x268f, 0xf3b3, 0x4c06, 0x993a, 0xbf4b, 0x6a77, 0xf3a9, 0x2695, 0x00e4, 0xd5d8, 0x26bb, 0xf387, 0xd5f6, 0x00ca, 0x9914, 0x4c28, 0x6a59, 0xbf65, 0x00d0, 0xd5ec, 0xf39d, 0x26a1, 0xbf7f, 0x6a43, 0x4c32, 0x990e, 0xf3c1, 0x26fd, 0x008c, 0xd5b0, 0x4c6e, 0x9952, 0xbf23, 0x6a1f, 0xd5aa, 0x0096, 0x26e7, 0xf3db, 0x6a05, 0xbf39, 0x9948, 0x4c74, 0xbf17, 0x6a2b, 0x4c5a, 0x9966, 0x00b8, 0xd584, 0xf3f5, 0x26c9, 0x997c, 0x4c40, 0x6a31, 0xbf0d, 0x26d3, 0xf3ef, 0xd59e, 0x00a2, 0xd4da, 0x01e6, 0x2797, 0xf2ab, 0x6b75, 0xbe49, 0x9838, 0x4d04, 0xf2b1, 0x278d, 0x01fc, 0xd4c0, 0x4d1e, 0x9822, 0xbe53, 0x6b6f, 0x980c, 0x4d30, 0x6b41, 0xbe7d, 0x27a3, 0xf29f, 0xd4ee, 0x01d2, 0xbe67, 0x6b5b, 0x4d2a, 0x9816, 0x01c8, 0xd4f4, 0xf285, 0x27b9, 0x4d76, 0x984a, 0xbe3b, 0x6b07, 0xf2d9, 0x27e5, 0x0194, 0xd4a8, 0x6b1d, 0xbe21, 0x9850, 0x4d6c, 0xd4b2, 0x018e, 0x27ff, 0xf2c3, 0x01a0, 0xd49c, 0xf2ed, 0x27d1, 0xbe0f, 0x6b33, 0x4d42, 0x987e, 0x27cb, 0xf2f7, 0xd486, 0x01ba, 0x9864, 0x4d58, 0x6b29, 0xbe15, 0xbeb7, 0x6b8b, 0x4dfa, 0x98c6, 0x0118, 0xd424, 0xf255, 0x2769, 0x98dc, 0x4de0, 0x6b91, 0xbead, 0x2773, 0xf24f, 0xd43e, 0x0102, 0xf261, 0x275d, 0x012c, 0xd410, 0x4dce, 0x98f2, 0xbe83, 0x6bbf, 0xd40a, 0x0136, 0x2747, 0xf27b, 0x6ba5, 0xbe99, 0x98e8, 0x4dd4, 0x271b, 0xf227, 0xd456, 0x016a, 0x98b4, 0x4d88, 0x6bf9, 0xbec5, 0x0170, 0xd44c, 0xf23d, 0x2701, 0xbedf, 0x6be3, 0x4d92, 0x98ae, 0x6bcd, 0xbef1, 0x9880, 0x4dbc, 0xd462, 0x015e, 0x272f, 0xf213, 0x4da6, 0x989a, 0xbeeb, 0x6bd7, 0xf209, 0x2735, 0x0144, 0xd478, ], [ 0x0000, 0xf081, 0xb837, 0x48b6, 0x295b, 0xd9da, 0x916c, 0x61ed, 0x52b6, 0xa237, 0xea81, 0x1a00, 0x7bed, 0x8b6c, 0xc3da, 0x335b, 0xa56c, 0x55ed, 0x1d5b, 0xedda, 0x8c37, 0x7cb6, 0x3400, 0xc481, 0xf7da, 0x075b, 0x4fed, 0xbf6c, 0xde81, 0x2e00, 0x66b6, 0x9637, 0x13ed, 0xe36c, 0xabda, 0x5b5b, 0x3ab6, 0xca37, 0x8281, 0x7200, 0x415b, 0xb1da, 0xf96c, 0x09ed, 0x6800, 0x9881, 0xd037, 0x20b6, 0xb681, 0x4600, 0x0eb6, 0xfe37, 0x9fda, 0x6f5b, 0x27ed, 0xd76c, 0xe437, 0x14b6, 0x5c00, 0xac81, 0xcd6c, 0x3ded, 0x755b, 0x85da, 0x27da, 0xd75b, 0x9fed, 0x6f6c, 0x0e81, 0xfe00, 0xb6b6, 0x4637, 0x756c, 0x85ed, 0xcd5b, 0x3dda, 0x5c37, 0xacb6, 0xe400, 0x1481, 0x82b6, 0x7237, 0x3a81, 0xca00, 0xabed, 0x5b6c, 0x13da, 0xe35b, 0xd000, 0x2081, 0x6837, 0x98b6, 0xf95b, 0x09da, 0x416c, 0xb1ed, 0x3437, 0xc4b6, 0x8c00, 0x7c81, 0x1d6c, 0xeded, 0xa55b, 0x55da, 0x6681, 0x9600, 0xdeb6, 0x2e37, 0x4fda, 0xbf5b, 0xf7ed, 0x076c, 0x915b, 0x61da, 0x296c, 0xd9ed, 0xb800, 0x4881, 0x0037, 0xf0b6, 0xc3ed, 0x336c, 0x7bda, 0x8b5b, 0xeab6, 0x1a37, 0x5281, 0xa200, 0x4fb4, 0xbf35, 0xf783, 0x0702, 0x66ef, 0x966e, 0xded8, 0x2e59, 0x1d02, 0xed83, 0xa535, 0x55b4, 0x3459, 0xc4d8, 0x8c6e, 0x7cef, 0xead8, 0x1a59, 0x52ef, 0xa26e, 0xc383, 0x3302, 0x7bb4, 0x8b35, 0xb86e, 0x48ef, 0x0059, 0xf0d8, 0x9135, 0x61b4, 0x2902, 0xd983, 0x5c59, 0xacd8, 0xe46e, 0x14ef, 0x7502, 0x8583, 0xcd35, 0x3db4, 0x0eef, 0xfe6e, 0xb6d8, 0x4659, 0x27b4, 0xd735, 0x9f83, 0x6f02, 0xf935, 0x09b4, 0x4102, 0xb183, 0xd06e, 0x20ef, 0x6859, 0x98d8, 0xab83, 0x5b02, 0x13b4, 0xe335, 0x82d8, 0x7259, 0x3aef, 0xca6e, 0x686e, 0x98ef, 0xd059, 0x20d8, 0x4135, 0xb1b4, 0xf902, 0x0983, 0x3ad8, 0xca59, 0x82ef, 0x726e, 0x1383, 0xe302, 0xabb4, 0x5b35, 0xcd02, 0x3d83, 0x7535, 0x85b4, 0xe459, 0x14d8, 0x5c6e, 0xacef, 0x9fb4, 0x6f35, 0x2783, 0xd702, 0xb6ef, 0x466e, 0x0ed8, 0xfe59, 0x7b83, 0x8b02, 0xc3b4, 0x3335, 0x52d8, 0xa259, 0xeaef, 0x1a6e, 0x2935, 0xd9b4, 0x9102, 0x6183, 0x006e, 0xf0ef, 0xb859, 0x48d8, 0xdeef, 0x2e6e, 0x66d8, 0x9659, 0xf7b4, 0x0735, 0x4f83, 0xbf02, 0x8c59, 0x7cd8, 0x346e, 0xc4ef, 0xa502, 0x5583, 0x1d35, 0xedb4, ], [ 0x0000, 0x9f68, 0x67e5, 0xf88d, 0xcfca, 0x50a2, 0xa82f, 0x3747, 0xc6a1, 0x59c9, 0xa144, 0x3e2c, 0x096b, 0x9603, 0x6e8e, 0xf1e6, 0xd477, 0x4b1f, 0xb392, 0x2cfa, 0x1bbd, 0x84d5, 0x7c58, 0xe330, 0x12d6, 0x8dbe, 0x7533, 0xea5b, 0xdd1c, 0x4274, 0xbaf9, 0x2591, 0xf1db, 0x6eb3, 0x963e, 0x0956, 0x3e11, 0xa179, 0x59f4, 0xc69c, 0x377a, 0xa812, 0x509f, 0xcff7, 0xf8b0, 0x67d8, 0x9f55, 0x003d, 0x25ac, 0xbac4, 0x4249, 0xdd21, 0xea66, 0x750e, 0x8d83, 0x12eb, 0xe30d, 0x7c65, 0x84e8, 0x1b80, 0x2cc7, 0xb3af, 0x4b22, 0xd44a, 0xba83, 0x25eb, 0xdd66, 0x420e, 0x7549, 0xea21, 0x12ac, 0x8dc4, 0x7c22, 0xe34a, 0x1bc7, 0x84af, 0xb3e8, 0x2c80, 0xd40d, 0x4b65, 0x6ef4, 0xf19c, 0x0911, 0x9679, 0xa13e, 0x3e56, 0xc6db, 0x59b3, 0xa855, 0x373d, 0xcfb0, 0x50d8, 0x679f, 0xf8f7, 0x007a, 0x9f12, 0x4b58, 0xd430, 0x2cbd, 0xb3d5, 0x8492, 0x1bfa, 0xe377, 0x7c1f, 0x8df9, 0x1291, 0xea1c, 0x7574, 0x4233, 0xdd5b, 0x25d6, 0xbabe, 0x9f2f, 0x0047, 0xf8ca, 0x67a2, 0x50e5, 0xcf8d, 0x3700, 0xa868, 0x598e, 0xc6e6, 0x3e6b, 0xa103, 0x9644, 0x092c, 0xf1a1, 0x6ec9, 0x2c33, 0xb35b, 0x4bd6, 0xd4be, 0xe3f9, 0x7c91, 0x841c, 0x1b74, 0xea92, 0x75fa, 0x8d77, 0x121f, 0x2558, 0xba30, 0x42bd, 0xddd5, 0xf844, 0x672c, 0x9fa1, 0x00c9, 0x378e, 0xa8e6, 0x506b, 0xcf03, 0x3ee5, 0xa18d, 0x5900, 0xc668, 0xf12f, 0x6e47, 0x96ca, 0x09a2, 0xdde8, 0x4280, 0xba0d, 0x2565, 0x1222, 0x8d4a, 0x75c7, 0xeaaf, 0x1b49, 0x8421, 0x7cac, 0xe3c4, 0xd483, 0x4beb, 0xb366, 0x2c0e, 0x099f, 0x96f7, 0x6e7a, 0xf112, 0xc655, 0x593d, 0xa1b0, 0x3ed8, 0xcf3e, 0x5056, 0xa8db, 0x37b3, 0x00f4, 0x9f9c, 0x6711, 0xf879, 0x96b0, 0x09d8, 0xf155, 0x6e3d, 0x597a, 0xc612, 0x3e9f, 0xa1f7, 0x5011, 0xcf79, 0x37f4, 0xa89c, 0x9fdb, 0x00b3, 0xf83e, 0x6756, 0x42c7, 0xddaf, 0x2522, 0xba4a, 0x8d0d, 0x1265, 0xeae8, 0x7580, 0x8466, 0x1b0e, 0xe383, 0x7ceb, 0x4bac, 0xd4c4, 0x2c49, 0xb321, 0x676b, 0xf803, 0x008e, 0x9fe6, 0xa8a1, 0x37c9, 0xcf44, 0x502c, 0xa1ca, 0x3ea2, 0xc62f, 0x5947, 0x6e00, 0xf168, 0x09e5, 0x968d, 0xb31c, 0x2c74, 0xd4f9, 0x4b91, 0x7cd6, 0xe3be, 0x1b33, 0x845b, 0x75bd, 0xead5, 0x1258, 0x8d30, 0xba77, 0x251f, 0xdd92, 0x42fa, ], [ 0x0000, 0x5866, 0xb0cc, 0xe8aa, 0x38ad, 0x60cb, 0x8861, 0xd007, 0x715a, 0x293c, 0xc196, 0x99f0, 0x49f7, 0x1191, 0xf93b, 0xa15d, 0xe2b4, 0xbad2, 0x5278, 0x0a1e, 0xda19, 0x827f, 0x6ad5, 0x32b3, 0x93ee, 0xcb88, 0x2322, 0x7b44, 0xab43, 0xf325, 0x1b8f, 0x43e9, 0x9c5d, 0xc43b, 0x2c91, 0x74f7, 0xa4f0, 0xfc96, 0x143c, 0x4c5a, 0xed07, 0xb561, 0x5dcb, 0x05ad, 0xd5aa, 0x8dcc, 0x6566, 0x3d00, 0x7ee9, 0x268f, 0xce25, 0x9643, 0x4644, 0x1e22, 0xf688, 0xaeee, 0x0fb3, 0x57d5, 0xbf7f, 0xe719, 0x371e, 0x6f78, 0x87d2, 0xdfb4, 0x618f, 0x39e9, 0xd143, 0x8925, 0x5922, 0x0144, 0xe9ee, 0xb188, 0x10d5, 0x48b3, 0xa019, 0xf87f, 0x2878, 0x701e, 0x98b4, 0xc0d2, 0x833b, 0xdb5d, 0x33f7, 0x6b91, 0xbb96, 0xe3f0, 0x0b5a, 0x533c, 0xf261, 0xaa07, 0x42ad, 0x1acb, 0xcacc, 0x92aa, 0x7a00, 0x2266, 0xfdd2, 0xa5b4, 0x4d1e, 0x1578, 0xc57f, 0x9d19, 0x75b3, 0x2dd5, 0x8c88, 0xd4ee, 0x3c44, 0x6422, 0xb425, 0xec43, 0x04e9, 0x5c8f, 0x1f66, 0x4700, 0xafaa, 0xf7cc, 0x27cb, 0x7fad, 0x9707, 0xcf61, 0x6e3c, 0x365a, 0xdef0, 0x8696, 0x5691, 0x0ef7, 0xe65d, 0xbe3b, 0xc31e, 0x9b78, 0x73d2, 0x2bb4, 0xfbb3, 0xa3d5, 0x4b7f, 0x1319, 0xb244, 0xea22, 0x0288, 0x5aee, 0x8ae9, 0xd28f, 0x3a25, 0x6243, 0x21aa, 0x79cc, 0x9166, 0xc900, 0x1907, 0x4161, 0xa9cb, 0xf1ad, 0x50f0, 0x0896, 0xe03c, 0xb85a, 0x685d, 0x303b, 0xd891, 0x80f7, 0x5f43, 0x0725, 0xef8f, 0xb7e9, 0x67ee, 0x3f88, 0xd722, 0x8f44, 0x2e19, 0x767f, 0x9ed5, 0xc6b3, 0x16b4, 0x4ed2, 0xa678, 0xfe1e, 0xbdf7, 0xe591, 0x0d3b, 0x555d, 0x855a, 0xdd3c, 0x3596, 0x6df0, 0xccad, 0x94cb, 0x7c61, 0x2407, 0xf400, 0xac66, 0x44cc, 0x1caa, 0xa291, 0xfaf7, 0x125d, 0x4a3b, 0x9a3c, 0xc25a, 0x2af0, 0x7296, 0xd3cb, 0x8bad, 0x6307, 0x3b61, 0xeb66, 0xb300, 0x5baa, 0x03cc, 0x4025, 0x1843, 0xf0e9, 0xa88f, 0x7888, 0x20ee, 0xc844, 0x9022, 0x317f, 0x6919, 0x81b3, 0xd9d5, 0x09d2, 0x51b4, 0xb91e, 0xe178, 0x3ecc, 0x66aa, 0x8e00, 0xd666, 0x0661, 0x5e07, 0xb6ad, 0xeecb, 0x4f96, 0x17f0, 0xff5a, 0xa73c, 0x773b, 0x2f5d, 0xc7f7, 0x9f91, 0xdc78, 0x841e, 0x6cb4, 0x34d2, 0xe4d5, 0xbcb3, 0x5419, 0x0c7f, 0xad22, 0xf544, 0x1dee, 0x4588, 0x958f, 0xcde9, 0x2543, 0x7d25, ], [ 0x0000, 0xdf09, 0xe727, 0x382e, 0x977b, 0x4872, 0x705c, 0xaf55, 0x77c3, 0xa8ca, 0x90e4, 0x4fed, 0xe0b8, 0x3fb1, 0x079f, 0xd896, 0xef86, 0x308f, 0x08a1, 0xd7a8, 0x78fd, 0xa7f4, 0x9fda, 0x40d3, 0x9845, 0x474c, 0x7f62, 0xa06b, 0x0f3e, 0xd037, 0xe819, 0x3710, 0x8639, 0x5930, 0x611e, 0xbe17, 0x1142, 0xce4b, 0xf665, 0x296c, 0xf1fa, 0x2ef3, 0x16dd, 0xc9d4, 0x6681, 0xb988, 0x81a6, 0x5eaf, 0x69bf, 0xb6b6, 0x8e98, 0x5191, 0xfec4, 0x21cd, 0x19e3, 0xc6ea, 0x1e7c, 0xc175, 0xf95b, 0x2652, 0x8907, 0x560e, 0x6e20, 0xb129, 0x5547, 0x8a4e, 0xb260, 0x6d69, 0xc23c, 0x1d35, 0x251b, 0xfa12, 0x2284, 0xfd8d, 0xc5a3, 0x1aaa, 0xb5ff, 0x6af6, 0x52d8, 0x8dd1, 0xbac1, 0x65c8, 0x5de6, 0x82ef, 0x2dba, 0xf2b3, 0xca9d, 0x1594, 0xcd02, 0x120b, 0x2a25, 0xf52c, 0x5a79, 0x8570, 0xbd5e, 0x6257, 0xd37e, 0x0c77, 0x3459, 0xeb50, 0x4405, 0x9b0c, 0xa322, 0x7c2b, 0xa4bd, 0x7bb4, 0x439a, 0x9c93, 0x33c6, 0xeccf, 0xd4e1, 0x0be8, 0x3cf8, 0xe3f1, 0xdbdf, 0x04d6, 0xab83, 0x748a, 0x4ca4, 0x93ad, 0x4b3b, 0x9432, 0xac1c, 0x7315, 0xdc40, 0x0349, 0x3b67, 0xe46e, 0xaa8e, 0x7587, 0x4da9, 0x92a0, 0x3df5, 0xe2fc, 0xdad2, 0x05db, 0xdd4d, 0x0244, 0x3a6a, 0xe563, 0x4a36, 0x953f, 0xad11, 0x7218, 0x4508, 0x9a01, 0xa22f, 0x7d26, 0xd273, 0x0d7a, 0x3554, 0xea5d, 0x32cb, 0xedc2, 0xd5ec, 0x0ae5, 0xa5b0, 0x7ab9, 0x4297, 0x9d9e, 0x2cb7, 0xf3be, 0xcb90, 0x1499, 0xbbcc, 0x64c5, 0x5ceb, 0x83e2, 0x5b74, 0x847d, 0xbc53, 0x635a, 0xcc0f, 0x1306, 0x2b28, 0xf421, 0xc331, 0x1c38, 0x2416, 0xfb1f, 0x544a, 0x8b43, 0xb36d, 0x6c64, 0xb4f2, 0x6bfb, 0x53d5, 0x8cdc, 0x2389, 0xfc80, 0xc4ae, 0x1ba7, 0xffc9, 0x20c0, 0x18ee, 0xc7e7, 0x68b2, 0xb7bb, 0x8f95, 0x509c, 0x880a, 0x5703, 0x6f2d, 0xb024, 0x1f71, 0xc078, 0xf856, 0x275f, 0x104f, 0xcf46, 0xf768, 0x2861, 0x8734, 0x583d, 0x6013, 0xbf1a, 0x678c, 0xb885, 0x80ab, 0x5fa2, 0xf0f7, 0x2ffe, 0x17d0, 0xc8d9, 0x79f0, 0xa6f9, 0x9ed7, 0x41de, 0xee8b, 0x3182, 0x09ac, 0xd6a5, 0x0e33, 0xd13a, 0xe914, 0x361d, 0x9948, 0x4641, 0x7e6f, 0xa166, 0x9676, 0x497f, 0x7151, 0xae58, 0x010d, 0xde04, 0xe62a, 0x3923, 0xe1b5, 0x3ebc, 0x0692, 0xd99b, 0x76ce, 0xa9c7, 0x91e9, 0x4ee0, ], [ 0x0000, 0x0c29, 0x1852, 0x147b, 0x30a4, 0x3c8d, 0x28f6, 0x24df, 0x6148, 0x6d61, 0x791a, 0x7533, 0x51ec, 0x5dc5, 0x49be, 0x4597, 0xc290, 0xceb9, 0xdac2, 0xd6eb, 0xf234, 0xfe1d, 0xea66, 0xe64f, 0xa3d8, 0xaff1, 0xbb8a, 0xb7a3, 0x937c, 0x9f55, 0x8b2e, 0x8707, 0xdc15, 0xd03c, 0xc447, 0xc86e, 0xecb1, 0xe098, 0xf4e3, 0xf8ca, 0xbd5d, 0xb174, 0xa50f, 0xa926, 0x8df9, 0x81d0, 0x95ab, 0x9982, 0x1e85, 0x12ac, 0x06d7, 0x0afe, 0x2e21, 0x2208, 0x3673, 0x3a5a, 0x7fcd, 0x73e4, 0x679f, 0x6bb6, 0x4f69, 0x4340, 0x573b, 0x5b12, 0xe11f, 0xed36, 0xf94d, 0xf564, 0xd1bb, 0xdd92, 0xc9e9, 0xc5c0, 0x8057, 0x8c7e, 0x9805, 0x942c, 0xb0f3, 0xbcda, 0xa8a1, 0xa488, 0x238f, 0x2fa6, 0x3bdd, 0x37f4, 0x132b, 0x1f02, 0x0b79, 0x0750, 0x42c7, 0x4eee, 0x5a95, 0x56bc, 0x7263, 0x7e4a, 0x6a31, 0x6618, 0x3d0a, 0x3123, 0x2558, 0x2971, 0x0dae, 0x0187, 0x15fc, 0x19d5, 0x5c42, 0x506b, 0x4410, 0x4839, 0x6ce6, 0x60cf, 0x74b4, 0x789d, 0xff9a, 0xf3b3, 0xe7c8, 0xebe1, 0xcf3e, 0xc317, 0xd76c, 0xdb45, 0x9ed2, 0x92fb, 0x8680, 0x8aa9, 0xae76, 0xa25f, 0xb624, 0xba0d, 0x9b0b, 0x9722, 0x8359, 0x8f70, 0xabaf, 0xa786, 0xb3fd, 0xbfd4, 0xfa43, 0xf66a, 0xe211, 0xee38, 0xcae7, 0xc6ce, 0xd2b5, 0xde9c, 0x599b, 0x55b2, 0x41c9, 0x4de0, 0x693f, 0x6516, 0x716d, 0x7d44, 0x38d3, 0x34fa, 0x2081, 0x2ca8, 0x0877, 0x045e, 0x1025, 0x1c0c, 0x471e, 0x4b37, 0x5f4c, 0x5365, 0x77ba, 0x7b93, 0x6fe8, 0x63c1, 0x2656, 0x2a7f, 0x3e04, 0x322d, 0x16f2, 0x1adb, 0x0ea0, 0x0289, 0x858e, 0x89a7, 0x9ddc, 0x91f5, 0xb52a, 0xb903, 0xad78, 0xa151, 0xe4c6, 0xe8ef, 0xfc94, 0xf0bd, 0xd462, 0xd84b, 0xcc30, 0xc019, 0x7a14, 0x763d, 0x6246, 0x6e6f, 0x4ab0, 0x4699, 0x52e2, 0x5ecb, 0x1b5c, 0x1775, 0x030e, 0x0f27, 0x2bf8, 0x27d1, 0x33aa, 0x3f83, 0xb884, 0xb4ad, 0xa0d6, 0xacff, 0x8820, 0x8409, 0x9072, 0x9c5b, 0xd9cc, 0xd5e5, 0xc19e, 0xcdb7, 0xe968, 0xe541, 0xf13a, 0xfd13, 0xa601, 0xaa28, 0xbe53, 0xb27a, 0x96a5, 0x9a8c, 0x8ef7, 0x82de, 0xc749, 0xcb60, 0xdf1b, 0xd332, 0xf7ed, 0xfbc4, 0xefbf, 0xe396, 0x6491, 0x68b8, 0x7cc3, 0x70ea, 0x5435, 0x581c, 0x4c67, 0x404e, 0x05d9, 0x09f0, 0x1d8b, 0x11a2, 0x357d, 0x3954, 0x2d2f, 0x2106, ], [ 0x0000, 0x6f23, 0xde46, 0xb165, 0xe5b9, 0x8a9a, 0x3bff, 0x54dc, 0x9247, 0xfd64, 0x4c01, 0x2322, 0x77fe, 0x18dd, 0xa9b8, 0xc69b, 0x7dbb, 0x1298, 0xa3fd, 0xccde, 0x9802, 0xf721, 0x4644, 0x2967, 0xeffc, 0x80df, 0x31ba, 0x5e99, 0x0a45, 0x6566, 0xd403, 0xbb20, 0xfb76, 0x9455, 0x2530, 0x4a13, 0x1ecf, 0x71ec, 0xc089, 0xafaa, 0x6931, 0x0612, 0xb777, 0xd854, 0x8c88, 0xe3ab, 0x52ce, 0x3ded, 0x86cd, 0xe9ee, 0x588b, 0x37a8, 0x6374, 0x0c57, 0xbd32, 0xd211, 0x148a, 0x7ba9, 0xcacc, 0xa5ef, 0xf133, 0x9e10, 0x2f75, 0x4056, 0xafd9, 0xc0fa, 0x719f, 0x1ebc, 0x4a60, 0x2543, 0x9426, 0xfb05, 0x3d9e, 0x52bd, 0xe3d8, 0x8cfb, 0xd827, 0xb704, 0x0661, 0x6942, 0xd262, 0xbd41, 0x0c24, 0x6307, 0x37db, 0x58f8, 0xe99d, 0x86be, 0x4025, 0x2f06, 0x9e63, 0xf140, 0xa59c, 0xcabf, 0x7bda, 0x14f9, 0x54af, 0x3b8c, 0x8ae9, 0xe5ca, 0xb116, 0xde35, 0x6f50, 0x0073, 0xc6e8, 0xa9cb, 0x18ae, 0x778d, 0x2351, 0x4c72, 0xfd17, 0x9234, 0x2914, 0x4637, 0xf752, 0x9871, 0xccad, 0xa38e, 0x12eb, 0x7dc8, 0xbb53, 0xd470, 0x6515, 0x0a36, 0x5eea, 0x31c9, 0x80ac, 0xef8f, 0x0687, 0x69a4, 0xd8c1, 0xb7e2, 0xe33e, 0x8c1d, 0x3d78, 0x525b, 0x94c0, 0xfbe3, 0x4a86, 0x25a5, 0x7179, 0x1e5a, 0xaf3f, 0xc01c, 0x7b3c, 0x141f, 0xa57a, 0xca59, 0x9e85, 0xf1a6, 0x40c3, 0x2fe0, 0xe97b, 0x8658, 0x373d, 0x581e, 0x0cc2, 0x63e1, 0xd284, 0xbda7, 0xfdf1, 0x92d2, 0x23b7, 0x4c94, 0x1848, 0x776b, 0xc60e, 0xa92d, 0x6fb6, 0x0095, 0xb1f0, 0xded3, 0x8a0f, 0xe52c, 0x5449, 0x3b6a, 0x804a, 0xef69, 0x5e0c, 0x312f, 0x65f3, 0x0ad0, 0xbbb5, 0xd496, 0x120d, 0x7d2e, 0xcc4b, 0xa368, 0xf7b4, 0x9897, 0x29f2, 0x46d1, 0xa95e, 0xc67d, 0x7718, 0x183b, 0x4ce7, 0x23c4, 0x92a1, 0xfd82, 0x3b19, 0x543a, 0xe55f, 0x8a7c, 0xdea0, 0xb183, 0x00e6, 0x6fc5, 0xd4e5, 0xbbc6, 0x0aa3, 0x6580, 0x315c, 0x5e7f, 0xef1a, 0x8039, 0x46a2, 0x2981, 0x98e4, 0xf7c7, 0xa31b, 0xcc38, 0x7d5d, 0x127e, 0x5228, 0x3d0b, 0x8c6e, 0xe34d, 0xb791, 0xd8b2, 0x69d7, 0x06f4, 0xc06f, 0xaf4c, 0x1e29, 0x710a, 0x25d6, 0x4af5, 0xfb90, 0x94b3, 0x2f93, 0x40b0, 0xf1d5, 0x9ef6, 0xca2a, 0xa509, 0x146c, 0x7b4f, 0xbdd4, 0xd2f7, 0x6392, 0x0cb1, 0x586d, 0x374e, 0x862b, 0xe908, ], [ 0x0000, 0x0d0e, 0x1a1c, 0x1712, 0x3438, 0x3936, 0x2e24, 0x232a, 0x6870, 0x657e, 0x726c, 0x7f62, 0x5c48, 0x5146, 0x4654, 0x4b5a, 0xd0e0, 0xddee, 0xcafc, 0xc7f2, 0xe4d8, 0xe9d6, 0xfec4, 0xf3ca, 0xb890, 0xb59e, 0xa28c, 0xaf82, 0x8ca8, 0x81a6, 0x96b4, 0x9bba, 0xf8f5, 0xf5fb, 0xe2e9, 0xefe7, 0xcccd, 0xc1c3, 0xd6d1, 0xdbdf, 0x9085, 0x9d8b, 0x8a99, 0x8797, 0xa4bd, 0xa9b3, 0xbea1, 0xb3af, 0x2815, 0x251b, 0x3209, 0x3f07, 0x1c2d, 0x1123, 0x0631, 0x0b3f, 0x4065, 0x4d6b, 0x5a79, 0x5777, 0x745d, 0x7953, 0x6e41, 0x634f, 0xa8df, 0xa5d1, 0xb2c3, 0xbfcd, 0x9ce7, 0x91e9, 0x86fb, 0x8bf5, 0xc0af, 0xcda1, 0xdab3, 0xd7bd, 0xf497, 0xf999, 0xee8b, 0xe385, 0x783f, 0x7531, 0x6223, 0x6f2d, 0x4c07, 0x4109, 0x561b, 0x5b15, 0x104f, 0x1d41, 0x0a53, 0x075d, 0x2477, 0x2979, 0x3e6b, 0x3365, 0x502a, 0x5d24, 0x4a36, 0x4738, 0x6412, 0x691c, 0x7e0e, 0x7300, 0x385a, 0x3554, 0x2246, 0x2f48, 0x0c62, 0x016c, 0x167e, 0x1b70, 0x80ca, 0x8dc4, 0x9ad6, 0x97d8, 0xb4f2, 0xb9fc, 0xaeee, 0xa3e0, 0xe8ba, 0xe5b4, 0xf2a6, 0xffa8, 0xdc82, 0xd18c, 0xc69e, 0xcb90, 0x088b, 0x0585, 0x1297, 0x1f99, 0x3cb3, 0x31bd, 0x26af, 0x2ba1, 0x60fb, 0x6df5, 0x7ae7, 0x77e9, 0x54c3, 0x59cd, 0x4edf, 0x43d1, 0xd86b, 0xd565, 0xc277, 0xcf79, 0xec53, 0xe15d, 0xf64f, 0xfb41, 0xb01b, 0xbd15, 0xaa07, 0xa709, 0x8423, 0x892d, 0x9e3f, 0x9331, 0xf07e, 0xfd70, 0xea62, 0xe76c, 0xc446, 0xc948, 0xde5a, 0xd354, 0x980e, 0x9500, 0x8212, 0x8f1c, 0xac36, 0xa138, 0xb62a, 0xbb24, 0x209e, 0x2d90, 0x3a82, 0x378c, 0x14a6, 0x19a8, 0x0eba, 0x03b4, 0x48ee, 0x45e0, 0x52f2, 0x5ffc, 0x7cd6, 0x71d8, 0x66ca, 0x6bc4, 0xa054, 0xad5a, 0xba48, 0xb746, 0x946c, 0x9962, 0x8e70, 0x837e, 0xc824, 0xc52a, 0xd238, 0xdf36, 0xfc1c, 0xf112, 0xe600, 0xeb0e, 0x70b4, 0x7dba, 0x6aa8, 0x67a6, 0x448c, 0x4982, 0x5e90, 0x539e, 0x18c4, 0x15ca, 0x02d8, 0x0fd6, 0x2cfc, 0x21f2, 0x36e0, 0x3bee, 0x58a1, 0x55af, 0x42bd, 0x4fb3, 0x6c99, 0x6197, 0x7685, 0x7b8b, 0x30d1, 0x3ddf, 0x2acd, 0x27c3, 0x04e9, 0x09e7, 0x1ef5, 0x13fb, 0x8841, 0x854f, 0x925d, 0x9f53, 0xbc79, 0xb177, 0xa665, 0xab6b, 0xe031, 0xed3f, 0xfa2d, 0xf723, 0xd409, 0xd907, 0xce15, 0xc31b, ], [ 0x0000, 0x1116, 0x222c, 0x333a, 0x4458, 0x554e, 0x6674, 0x7762, 0x88b0, 0x99a6, 0xaa9c, 0xbb8a, 0xcce8, 0xddfe, 0xeec4, 0xffd2, 0x4855, 0x5943, 0x6a79, 0x7b6f, 0x0c0d, 0x1d1b, 0x2e21, 0x3f37, 0xc0e5, 0xd1f3, 0xe2c9, 0xf3df, 0x84bd, 0x95ab, 0xa691, 0xb787, 0x90aa, 0x81bc, 0xb286, 0xa390, 0xd4f2, 0xc5e4, 0xf6de, 0xe7c8, 0x181a, 0x090c, 0x3a36, 0x2b20, 0x5c42, 0x4d54, 0x7e6e, 0x6f78, 0xd8ff, 0xc9e9, 0xfad3, 0xebc5, 0x9ca7, 0x8db1, 0xbe8b, 0xaf9d, 0x504f, 0x4159, 0x7263, 0x6375, 0x1417, 0x0501, 0x363b, 0x272d, 0x7861, 0x6977, 0x5a4d, 0x4b5b, 0x3c39, 0x2d2f, 0x1e15, 0x0f03, 0xf0d1, 0xe1c7, 0xd2fd, 0xc3eb, 0xb489, 0xa59f, 0x96a5, 0x87b3, 0x3034, 0x2122, 0x1218, 0x030e, 0x746c, 0x657a, 0x5640, 0x4756, 0xb884, 0xa992, 0x9aa8, 0x8bbe, 0xfcdc, 0xedca, 0xdef0, 0xcfe6, 0xe8cb, 0xf9dd, 0xcae7, 0xdbf1, 0xac93, 0xbd85, 0x8ebf, 0x9fa9, 0x607b, 0x716d, 0x4257, 0x5341, 0x2423, 0x3535, 0x060f, 0x1719, 0xa09e, 0xb188, 0x82b2, 0x93a4, 0xe4c6, 0xf5d0, 0xc6ea, 0xd7fc, 0x282e, 0x3938, 0x0a02, 0x1b14, 0x6c76, 0x7d60, 0x4e5a, 0x5f4c, 0xf0c2, 0xe1d4, 0xd2ee, 0xc3f8, 0xb49a, 0xa58c, 0x96b6, 0x87a0, 0x7872, 0x6964, 0x5a5e, 0x4b48, 0x3c2a, 0x2d3c, 0x1e06, 0x0f10, 0xb897, 0xa981, 0x9abb, 0x8bad, 0xfccf, 0xedd9, 0xdee3, 0xcff5, 0x3027, 0x2131, 0x120b, 0x031d, 0x747f, 0x6569, 0x5653, 0x4745, 0x6068, 0x717e, 0x4244, 0x5352, 0x2430, 0x3526, 0x061c, 0x170a, 0xe8d8, 0xf9ce, 0xcaf4, 0xdbe2, 0xac80, 0xbd96, 0x8eac, 0x9fba, 0x283d, 0x392b, 0x0a11, 0x1b07, 0x6c65, 0x7d73, 0x4e49, 0x5f5f, 0xa08d, 0xb19b, 0x82a1, 0x93b7, 0xe4d5, 0xf5c3, 0xc6f9, 0xd7ef, 0x88a3, 0x99b5, 0xaa8f, 0xbb99, 0xccfb, 0xdded, 0xeed7, 0xffc1, 0x0013, 0x1105, 0x223f, 0x3329, 0x444b, 0x555d, 0x6667, 0x7771, 0xc0f6, 0xd1e0, 0xe2da, 0xf3cc, 0x84ae, 0x95b8, 0xa682, 0xb794, 0x4846, 0x5950, 0x6a6a, 0x7b7c, 0x0c1e, 0x1d08, 0x2e32, 0x3f24, 0x1809, 0x091f, 0x3a25, 0x2b33, 0x5c51, 0x4d47, 0x7e7d, 0x6f6b, 0x90b9, 0x81af, 0xb295, 0xa383, 0xd4e1, 0xc5f7, 0xf6cd, 0xe7db, 0x505c, 0x414a, 0x7270, 0x6366, 0x1404, 0x0512, 0x3628, 0x273e, 0xd8ec, 0xc9fa, 0xfac0, 0xebd6, 0x9cb4, 0x8da2, 0xbe98, 0xaf8e, ], [ 0x0000, 0xb8b1, 0x2857, 0x90e6, 0x50ae, 0xe81f, 0x78f9, 0xc048, 0xa15c, 0x19ed, 0x890b, 0x31ba, 0xf1f2, 0x4943, 0xd9a5, 0x6114, 0x1b8d, 0xa33c, 0x33da, 0x8b6b, 0x4b23, 0xf392, 0x6374, 0xdbc5, 0xbad1, 0x0260, 0x9286, 0x2a37, 0xea7f, 0x52ce, 0xc228, 0x7a99, 0x371a, 0x8fab, 0x1f4d, 0xa7fc, 0x67b4, 0xdf05, 0x4fe3, 0xf752, 0x9646, 0x2ef7, 0xbe11, 0x06a0, 0xc6e8, 0x7e59, 0xeebf, 0x560e, 0x2c97, 0x9426, 0x04c0, 0xbc71, 0x7c39, 0xc488, 0x546e, 0xecdf, 0x8dcb, 0x357a, 0xa59c, 0x1d2d, 0xdd65, 0x65d4, 0xf532, 0x4d83, 0x6e34, 0xd685, 0x4663, 0xfed2, 0x3e9a, 0x862b, 0x16cd, 0xae7c, 0xcf68, 0x77d9, 0xe73f, 0x5f8e, 0x9fc6, 0x2777, 0xb791, 0x0f20, 0x75b9, 0xcd08, 0x5dee, 0xe55f, 0x2517, 0x9da6, 0x0d40, 0xb5f1, 0xd4e5, 0x6c54, 0xfcb2, 0x4403, 0x844b, 0x3cfa, 0xac1c, 0x14ad, 0x592e, 0xe19f, 0x7179, 0xc9c8, 0x0980, 0xb131, 0x21d7, 0x9966, 0xf872, 0x40c3, 0xd025, 0x6894, 0xa8dc, 0x106d, 0x808b, 0x383a, 0x42a3, 0xfa12, 0x6af4, 0xd245, 0x120d, 0xaabc, 0x3a5a, 0x82eb, 0xe3ff, 0x5b4e, 0xcba8, 0x7319, 0xb351, 0x0be0, 0x9b06, 0x23b7, 0xdc68, 0x64d9, 0xf43f, 0x4c8e, 0x8cc6, 0x3477, 0xa491, 0x1c20, 0x7d34, 0xc585, 0x5563, 0xedd2, 0x2d9a, 0x952b, 0x05cd, 0xbd7c, 0xc7e5, 0x7f54, 0xefb2, 0x5703, 0x974b, 0x2ffa, 0xbf1c, 0x07ad, 0x66b9, 0xde08, 0x4eee, 0xf65f, 0x3617, 0x8ea6, 0x1e40, 0xa6f1, 0xeb72, 0x53c3, 0xc325, 0x7b94, 0xbbdc, 0x036d, 0x938b, 0x2b3a, 0x4a2e, 0xf29f, 0x6279, 0xdac8, 0x1a80, 0xa231, 0x32d7, 0x8a66, 0xf0ff, 0x484e, 0xd8a8, 0x6019, 0xa051, 0x18e0, 0x8806, 0x30b7, 0x51a3, 0xe912, 0x79f4, 0xc145, 0x010d, 0xb9bc, 0x295a, 0x91eb, 0xb25c, 0x0aed, 0x9a0b, 0x22ba, 0xe2f2, 0x5a43, 0xcaa5, 0x7214, 0x1300, 0xabb1, 0x3b57, 0x83e6, 0x43ae, 0xfb1f, 0x6bf9, 0xd348, 0xa9d1, 0x1160, 0x8186, 0x3937, 0xf97f, 0x41ce, 0xd128, 0x6999, 0x088d, 0xb03c, 0x20da, 0x986b, 0x5823, 0xe092, 0x7074, 0xc8c5, 0x8546, 0x3df7, 0xad11, 0x15a0, 0xd5e8, 0x6d59, 0xfdbf, 0x450e, 0x241a, 0x9cab, 0x0c4d, 0xb4fc, 0x74b4, 0xcc05, 0x5ce3, 0xe452, 0x9ecb, 0x267a, 0xb69c, 0x0e2d, 0xce65, 0x76d4, 0xe632, 0x5e83, 0x3f97, 0x8726, 0x17c0, 0xaf71, 0x6f39, 0xd788, 0x476e, 0xffdf, ], [ 0x0000, 0xe1e5, 0x9aff, 0x7b1a, 0x6ccb, 0x8d2e, 0xf634, 0x17d1, 0xd996, 0x3873, 0x4369, 0xa28c, 0xb55d, 0x54b8, 0x2fa2, 0xce47, 0xea19, 0x0bfc, 0x70e6, 0x9103, 0x86d2, 0x6737, 0x1c2d, 0xfdc8, 0x338f, 0xd26a, 0xa970, 0x4895, 0x5f44, 0xbea1, 0xc5bb, 0x245e, 0x8d07, 0x6ce2, 0x17f8, 0xf61d, 0xe1cc, 0x0029, 0x7b33, 0x9ad6, 0x5491, 0xb574, 0xce6e, 0x2f8b, 0x385a, 0xd9bf, 0xa2a5, 0x4340, 0x671e, 0x86fb, 0xfde1, 0x1c04, 0x0bd5, 0xea30, 0x912a, 0x70cf, 0xbe88, 0x5f6d, 0x2477, 0xc592, 0xd243, 0x33a6, 0x48bc, 0xa959, 0x433b, 0xa2de, 0xd9c4, 0x3821, 0x2ff0, 0xce15, 0xb50f, 0x54ea, 0x9aad, 0x7b48, 0x0052, 0xe1b7, 0xf666, 0x1783, 0x6c99, 0x8d7c, 0xa922, 0x48c7, 0x33dd, 0xd238, 0xc5e9, 0x240c, 0x5f16, 0xbef3, 0x70b4, 0x9151, 0xea4b, 0x0bae, 0x1c7f, 0xfd9a, 0x8680, 0x6765, 0xce3c, 0x2fd9, 0x54c3, 0xb526, 0xa2f7, 0x4312, 0x3808, 0xd9ed, 0x17aa, 0xf64f, 0x8d55, 0x6cb0, 0x7b61, 0x9a84, 0xe19e, 0x007b, 0x2425, 0xc5c0, 0xbeda, 0x5f3f, 0x48ee, 0xa90b, 0xd211, 0x33f4, 0xfdb3, 0x1c56, 0x674c, 0x86a9, 0x9178, 0x709d, 0x0b87, 0xea62, 0x8676, 0x6793, 0x1c89, 0xfd6c, 0xeabd, 0x0b58, 0x7042, 0x91a7, 0x5fe0, 0xbe05, 0xc51f, 0x24fa, 0x332b, 0xd2ce, 0xa9d4, 0x4831, 0x6c6f, 0x8d8a, 0xf690, 0x1775, 0x00a4, 0xe141, 0x9a5b, 0x7bbe, 0xb5f9, 0x541c, 0x2f06, 0xcee3, 0xd932, 0x38d7, 0x43cd, 0xa228, 0x0b71, 0xea94, 0x918e, 0x706b, 0x67ba, 0x865f, 0xfd45, 0x1ca0, 0xd2e7, 0x3302, 0x4818, 0xa9fd, 0xbe2c, 0x5fc9, 0x24d3, 0xc536, 0xe168, 0x008d, 0x7b97, 0x9a72, 0x8da3, 0x6c46, 0x175c, 0xf6b9, 0x38fe, 0xd91b, 0xa201, 0x43e4, 0x5435, 0xb5d0, 0xceca, 0x2f2f, 0xc54d, 0x24a8, 0x5fb2, 0xbe57, 0xa986, 0x4863, 0x3379, 0xd29c, 0x1cdb, 0xfd3e, 0x8624, 0x67c1, 0x7010, 0x91f5, 0xeaef, 0x0b0a, 0x2f54, 0xceb1, 0xb5ab, 0x544e, 0x439f, 0xa27a, 0xd960, 0x3885, 0xf6c2, 0x1727, 0x6c3d, 0x8dd8, 0x9a09, 0x7bec, 0x00f6, 0xe113, 0x484a, 0xa9af, 0xd2b5, 0x3350, 0x2481, 0xc564, 0xbe7e, 0x5f9b, 0x91dc, 0x7039, 0x0b23, 0xeac6, 0xfd17, 0x1cf2, 0x67e8, 0x860d, 0xa253, 0x43b6, 0x38ac, 0xd949, 0xce98, 0x2f7d, 0x5467, 0xb582, 0x7bc5, 0x9a20, 0xe13a, 0x00df, 0x170e, 0xf6eb, 0x8df1, 0x6c14, ], [ 0x0000, 0x55d9, 0xabb2, 0xfe6b, 0x0e51, 0x5b88, 0xa5e3, 0xf03a, 0x1ca2, 0x497b, 0xb710, 0xe2c9, 0x12f3, 0x472a, 0xb941, 0xec98, 0x3944, 0x6c9d, 0x92f6, 0xc72f, 0x3715, 0x62cc, 0x9ca7, 0xc97e, 0x25e6, 0x703f, 0x8e54, 0xdb8d, 0x2bb7, 0x7e6e, 0x8005, 0xd5dc, 0x7288, 0x2751, 0xd93a, 0x8ce3, 0x7cd9, 0x2900, 0xd76b, 0x82b2, 0x6e2a, 0x3bf3, 0xc598, 0x9041, 0x607b, 0x35a2, 0xcbc9, 0x9e10, 0x4bcc, 0x1e15, 0xe07e, 0xb5a7, 0x459d, 0x1044, 0xee2f, 0xbbf6, 0x576e, 0x02b7, 0xfcdc, 0xa905, 0x593f, 0x0ce6, 0xf28d, 0xa754, 0xe510, 0xb0c9, 0x4ea2, 0x1b7b, 0xeb41, 0xbe98, 0x40f3, 0x152a, 0xf9b2, 0xac6b, 0x5200, 0x07d9, 0xf7e3, 0xa23a, 0x5c51, 0x0988, 0xdc54, 0x898d, 0x77e6, 0x223f, 0xd205, 0x87dc, 0x79b7, 0x2c6e, 0xc0f6, 0x952f, 0x6b44, 0x3e9d, 0xcea7, 0x9b7e, 0x6515, 0x30cc, 0x9798, 0xc241, 0x3c2a, 0x69f3, 0x99c9, 0xcc10, 0x327b, 0x67a2, 0x8b3a, 0xdee3, 0x2088, 0x7551, 0x856b, 0xd0b2, 0x2ed9, 0x7b00, 0xaedc, 0xfb05, 0x056e, 0x50b7, 0xa08d, 0xf554, 0x0b3f, 0x5ee6, 0xb27e, 0xe7a7, 0x19cc, 0x4c15, 0xbc2f, 0xe9f6, 0x179d, 0x4244, 0x9315, 0xc6cc, 0x38a7, 0x6d7e, 0x9d44, 0xc89d, 0x36f6, 0x632f, 0x8fb7, 0xda6e, 0x2405, 0x71dc, 0x81e6, 0xd43f, 0x2a54, 0x7f8d, 0xaa51, 0xff88, 0x01e3, 0x543a, 0xa400, 0xf1d9, 0x0fb2, 0x5a6b, 0xb6f3, 0xe32a, 0x1d41, 0x4898, 0xb8a2, 0xed7b, 0x1310, 0x46c9, 0xe19d, 0xb444, 0x4a2f, 0x1ff6, 0xefcc, 0xba15, 0x447e, 0x11a7, 0xfd3f, 0xa8e6, 0x568d, 0x0354, 0xf36e, 0xa6b7, 0x58dc, 0x0d05, 0xd8d9, 0x8d00, 0x736b, 0x26b2, 0xd688, 0x8351, 0x7d3a, 0x28e3, 0xc47b, 0x91a2, 0x6fc9, 0x3a10, 0xca2a, 0x9ff3, 0x6198, 0x3441, 0x7605, 0x23dc, 0xddb7, 0x886e, 0x7854, 0x2d8d, 0xd3e6, 0x863f, 0x6aa7, 0x3f7e, 0xc115, 0x94cc, 0x64f6, 0x312f, 0xcf44, 0x9a9d, 0x4f41, 0x1a98, 0xe4f3, 0xb12a, 0x4110, 0x14c9, 0xeaa2, 0xbf7b, 0x53e3, 0x063a, 0xf851, 0xad88, 0x5db2, 0x086b, 0xf600, 0xa3d9, 0x048d, 0x5154, 0xaf3f, 0xfae6, 0x0adc, 0x5f05, 0xa16e, 0xf4b7, 0x182f, 0x4df6, 0xb39d, 0xe644, 0x167e, 0x43a7, 0xbdcc, 0xe815, 0x3dc9, 0x6810, 0x967b, 0xc3a2, 0x3398, 0x6641, 0x982a, 0xcdf3, 0x216b, 0x74b2, 0x8ad9, 0xdf00, 0x2f3a, 0x7ae3, 0x8488, 0xd151, ], [ 0x0000, 0x7f1f, 0xfe3e, 0x8121, 0xa549, 0xda56, 0x5b77, 0x2468, 0x13a7, 0x6cb8, 0xed99, 0x9286, 0xb6ee, 0xc9f1, 0x48d0, 0x37cf, 0x274e, 0x5851, 0xd970, 0xa66f, 0x8207, 0xfd18, 0x7c39, 0x0326, 0x34e9, 0x4bf6, 0xcad7, 0xb5c8, 0x91a0, 0xeebf, 0x6f9e, 0x1081, 0x4e9c, 0x3183, 0xb0a2, 0xcfbd, 0xebd5, 0x94ca, 0x15eb, 0x6af4, 0x5d3b, 0x2224, 0xa305, 0xdc1a, 0xf872, 0x876d, 0x064c, 0x7953, 0x69d2, 0x16cd, 0x97ec, 0xe8f3, 0xcc9b, 0xb384, 0x32a5, 0x4dba, 0x7a75, 0x056a, 0x844b, 0xfb54, 0xdf3c, 0xa023, 0x2102, 0x5e1d, 0x9d38, 0xe227, 0x6306, 0x1c19, 0x3871, 0x476e, 0xc64f, 0xb950, 0x8e9f, 0xf180, 0x70a1, 0x0fbe, 0x2bd6, 0x54c9, 0xd5e8, 0xaaf7, 0xba76, 0xc569, 0x4448, 0x3b57, 0x1f3f, 0x6020, 0xe101, 0x9e1e, 0xa9d1, 0xd6ce, 0x57ef, 0x28f0, 0x0c98, 0x7387, 0xf2a6, 0x8db9, 0xd3a4, 0xacbb, 0x2d9a, 0x5285, 0x76ed, 0x09f2, 0x88d3, 0xf7cc, 0xc003, 0xbf1c, 0x3e3d, 0x4122, 0x654a, 0x1a55, 0x9b74, 0xe46b, 0xf4ea, 0x8bf5, 0x0ad4, 0x75cb, 0x51a3, 0x2ebc, 0xaf9d, 0xd082, 0xe74d, 0x9852, 0x1973, 0x666c, 0x4204, 0x3d1b, 0xbc3a, 0xc325, 0x6345, 0x1c5a, 0x9d7b, 0xe264, 0xc60c, 0xb913, 0x3832, 0x472d, 0x70e2, 0x0ffd, 0x8edc, 0xf1c3, 0xd5ab, 0xaab4, 0x2b95, 0x548a, 0x440b, 0x3b14, 0xba35, 0xc52a, 0xe142, 0x9e5d, 0x1f7c, 0x6063, 0x57ac, 0x28b3, 0xa992, 0xd68d, 0xf2e5, 0x8dfa, 0x0cdb, 0x73c4, 0x2dd9, 0x52c6, 0xd3e7, 0xacf8, 0x8890, 0xf78f, 0x76ae, 0x09b1, 0x3e7e, 0x4161, 0xc040, 0xbf5f, 0x9b37, 0xe428, 0x6509, 0x1a16, 0x0a97, 0x7588, 0xf4a9, 0x8bb6, 0xafde, 0xd0c1, 0x51e0, 0x2eff, 0x1930, 0x662f, 0xe70e, 0x9811, 0xbc79, 0xc366, 0x4247, 0x3d58, 0xfe7d, 0x8162, 0x0043, 0x7f5c, 0x5b34, 0x242b, 0xa50a, 0xda15, 0xedda, 0x92c5, 0x13e4, 0x6cfb, 0x4893, 0x378c, 0xb6ad, 0xc9b2, 0xd933, 0xa62c, 0x270d, 0x5812, 0x7c7a, 0x0365, 0x8244, 0xfd5b, 0xca94, 0xb58b, 0x34aa, 0x4bb5, 0x6fdd, 0x10c2, 0x91e3, 0xeefc, 0xb0e1, 0xcffe, 0x4edf, 0x31c0, 0x15a8, 0x6ab7, 0xeb96, 0x9489, 0xa346, 0xdc59, 0x5d78, 0x2267, 0x060f, 0x7910, 0xf831, 0x872e, 0x97af, 0xe8b0, 0x6991, 0x168e, 0x32e6, 0x4df9, 0xccd8, 0xb3c7, 0x8408, 0xfb17, 0x7a36, 0x0529, 0x2141, 0x5e5e, 0xdf7f, 0xa060, ], [ 0x0000, 0xc68a, 0xd421, 0x12ab, 0xf177, 0x37fd, 0x2556, 0xe3dc, 0xbbdb, 0x7d51, 0x6ffa, 0xa970, 0x4aac, 0x8c26, 0x9e8d, 0x5807, 0x2e83, 0xe809, 0xfaa2, 0x3c28, 0xdff4, 0x197e, 0x0bd5, 0xcd5f, 0x9558, 0x53d2, 0x4179, 0x87f3, 0x642f, 0xa2a5, 0xb00e, 0x7684, 0x5d06, 0x9b8c, 0x8927, 0x4fad, 0xac71, 0x6afb, 0x7850, 0xbeda, 0xe6dd, 0x2057, 0x32fc, 0xf476, 0x17aa, 0xd120, 0xc38b, 0x0501, 0x7385, 0xb50f, 0xa7a4, 0x612e, 0x82f2, 0x4478, 0x56d3, 0x9059, 0xc85e, 0x0ed4, 0x1c7f, 0xdaf5, 0x3929, 0xffa3, 0xed08, 0x2b82, 0xba0c, 0x7c86, 0x6e2d, 0xa8a7, 0x4b7b, 0x8df1, 0x9f5a, 0x59d0, 0x01d7, 0xc75d, 0xd5f6, 0x137c, 0xf0a0, 0x362a, 0x2481, 0xe20b, 0x948f, 0x5205, 0x40ae, 0x8624, 0x65f8, 0xa372, 0xb1d9, 0x7753, 0x2f54, 0xe9de, 0xfb75, 0x3dff, 0xde23, 0x18a9, 0x0a02, 0xcc88, 0xe70a, 0x2180, 0x332b, 0xf5a1, 0x167d, 0xd0f7, 0xc25c, 0x04d6, 0x5cd1, 0x9a5b, 0x88f0, 0x4e7a, 0xada6, 0x6b2c, 0x7987, 0xbf0d, 0xc989, 0x0f03, 0x1da8, 0xdb22, 0x38fe, 0xfe74, 0xecdf, 0x2a55, 0x7252, 0xb4d8, 0xa673, 0x60f9, 0x8325, 0x45af, 0x5704, 0x918e, 0x2d2d, 0xeba7, 0xf90c, 0x3f86, 0xdc5a, 0x1ad0, 0x087b, 0xcef1, 0x96f6, 0x507c, 0x42d7, 0x845d, 0x6781, 0xa10b, 0xb3a0, 0x752a, 0x03ae, 0xc524, 0xd78f, 0x1105, 0xf2d9, 0x3453, 0x26f8, 0xe072, 0xb875, 0x7eff, 0x6c54, 0xaade, 0x4902, 0x8f88, 0x9d23, 0x5ba9, 0x702b, 0xb6a1, 0xa40a, 0x6280, 0x815c, 0x47d6, 0x557d, 0x93f7, 0xcbf0, 0x0d7a, 0x1fd1, 0xd95b, 0x3a87, 0xfc0d, 0xeea6, 0x282c, 0x5ea8, 0x9822, 0x8a89, 0x4c03, 0xafdf, 0x6955, 0x7bfe, 0xbd74, 0xe573, 0x23f9, 0x3152, 0xf7d8, 0x1404, 0xd28e, 0xc025, 0x06af, 0x9721, 0x51ab, 0x4300, 0x858a, 0x6656, 0xa0dc, 0xb277, 0x74fd, 0x2cfa, 0xea70, 0xf8db, 0x3e51, 0xdd8d, 0x1b07, 0x09ac, 0xcf26, 0xb9a2, 0x7f28, 0x6d83, 0xab09, 0x48d5, 0x8e5f, 0x9cf4, 0x5a7e, 0x0279, 0xc4f3, 0xd658, 0x10d2, 0xf30e, 0x3584, 0x272f, 0xe1a5, 0xca27, 0x0cad, 0x1e06, 0xd88c, 0x3b50, 0xfdda, 0xef71, 0x29fb, 0x71fc, 0xb776, 0xa5dd, 0x6357, 0x808b, 0x4601, 0x54aa, 0x9220, 0xe4a4, 0x222e, 0x3085, 0xf60f, 0x15d3, 0xd359, 0xc1f2, 0x0778, 0x5f7f, 0x99f5, 0x8b5e, 0x4dd4, 0xae08, 0x6882, 0x7a29, 0xbca3, ], [ 0x0000, 0x5a5a, 0xb4b4, 0xeeee, 0x305d, 0x6a07, 0x84e9, 0xdeb3, 0x60ba, 0x3ae0, 0xd40e, 0x8e54, 0x50e7, 0x0abd, 0xe453, 0xbe09, 0xc174, 0x9b2e, 0x75c0, 0x2f9a, 0xf129, 0xab73, 0x459d, 0x1fc7, 0xa1ce, 0xfb94, 0x157a, 0x4f20, 0x9193, 0xcbc9, 0x2527, 0x7f7d, 0xdbdd, 0x8187, 0x6f69, 0x3533, 0xeb80, 0xb1da, 0x5f34, 0x056e, 0xbb67, 0xe13d, 0x0fd3, 0x5589, 0x8b3a, 0xd160, 0x3f8e, 0x65d4, 0x1aa9, 0x40f3, 0xae1d, 0xf447, 0x2af4, 0x70ae, 0x9e40, 0xc41a, 0x7a13, 0x2049, 0xcea7, 0x94fd, 0x4a4e, 0x1014, 0xfefa, 0xa4a0, 0xee8f, 0xb4d5, 0x5a3b, 0x0061, 0xded2, 0x8488, 0x6a66, 0x303c, 0x8e35, 0xd46f, 0x3a81, 0x60db, 0xbe68, 0xe432, 0x0adc, 0x5086, 0x2ffb, 0x75a1, 0x9b4f, 0xc115, 0x1fa6, 0x45fc, 0xab12, 0xf148, 0x4f41, 0x151b, 0xfbf5, 0xa1af, 0x7f1c, 0x2546, 0xcba8, 0x91f2, 0x3552, 0x6f08, 0x81e6, 0xdbbc, 0x050f, 0x5f55, 0xb1bb, 0xebe1, 0x55e8, 0x0fb2, 0xe15c, 0xbb06, 0x65b5, 0x3fef, 0xd101, 0x8b5b, 0xf426, 0xae7c, 0x4092, 0x1ac8, 0xc47b, 0x9e21, 0x70cf, 0x2a95, 0x949c, 0xcec6, 0x2028, 0x7a72, 0xa4c1, 0xfe9b, 0x1075, 0x4a2f, 0x842b, 0xde71, 0x309f, 0x6ac5, 0xb476, 0xee2c, 0x00c2, 0x5a98, 0xe491, 0xbecb, 0x5025, 0x0a7f, 0xd4cc, 0x8e96, 0x6078, 0x3a22, 0x455f, 0x1f05, 0xf1eb, 0xabb1, 0x7502, 0x2f58, 0xc1b6, 0x9bec, 0x25e5, 0x7fbf, 0x9151, 0xcb0b, 0x15b8, 0x4fe2, 0xa10c, 0xfb56, 0x5ff6, 0x05ac, 0xeb42, 0xb118, 0x6fab, 0x35f1, 0xdb1f, 0x8145, 0x3f4c, 0x6516, 0x8bf8, 0xd1a2, 0x0f11, 0x554b, 0xbba5, 0xe1ff, 0x9e82, 0xc4d8, 0x2a36, 0x706c, 0xaedf, 0xf485, 0x1a6b, 0x4031, 0xfe38, 0xa462, 0x4a8c, 0x10d6, 0xce65, 0x943f, 0x7ad1, 0x208b, 0x6aa4, 0x30fe, 0xde10, 0x844a, 0x5af9, 0x00a3, 0xee4d, 0xb417, 0x0a1e, 0x5044, 0xbeaa, 0xe4f0, 0x3a43, 0x6019, 0x8ef7, 0xd4ad, 0xabd0, 0xf18a, 0x1f64, 0x453e, 0x9b8d, 0xc1d7, 0x2f39, 0x7563, 0xcb6a, 0x9130, 0x7fde, 0x2584, 0xfb37, 0xa16d, 0x4f83, 0x15d9, 0xb179, 0xeb23, 0x05cd, 0x5f97, 0x8124, 0xdb7e, 0x3590, 0x6fca, 0xd1c3, 0x8b99, 0x6577, 0x3f2d, 0xe19e, 0xbbc4, 0x552a, 0x0f70, 0x700d, 0x2a57, 0xc4b9, 0x9ee3, 0x4050, 0x1a0a, 0xf4e4, 0xaebe, 0x10b7, 0x4aed, 0xa403, 0xfe59, 0x20ea, 0x7ab0, 0x945e, 0xce04, ], ]; pub static CRC16_MAXIM_DOW_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040, ], [ 0x0000, 0x9001, 0x6001, 0xf000, 0xc002, 0x5003, 0xa003, 0x3002, 0xc007, 0x5006, 0xa006, 0x3007, 0x0005, 0x9004, 0x6004, 0xf005, 0xc00d, 0x500c, 0xa00c, 0x300d, 0x000f, 0x900e, 0x600e, 0xf00f, 0x000a, 0x900b, 0x600b, 0xf00a, 0xc008, 0x5009, 0xa009, 0x3008, 0xc019, 0x5018, 0xa018, 0x3019, 0x001b, 0x901a, 0x601a, 0xf01b, 0x001e, 0x901f, 0x601f, 0xf01e, 0xc01c, 0x501d, 0xa01d, 0x301c, 0x0014, 0x9015, 0x6015, 0xf014, 0xc016, 0x5017, 0xa017, 0x3016, 0xc013, 0x5012, 0xa012, 0x3013, 0x0011, 0x9010, 0x6010, 0xf011, 0xc031, 0x5030, 0xa030, 0x3031, 0x0033, 0x9032, 0x6032, 0xf033, 0x0036, 0x9037, 0x6037, 0xf036, 0xc034, 0x5035, 0xa035, 0x3034, 0x003c, 0x903d, 0x603d, 0xf03c, 0xc03e, 0x503f, 0xa03f, 0x303e, 0xc03b, 0x503a, 0xa03a, 0x303b, 0x0039, 0x9038, 0x6038, 0xf039, 0x0028, 0x9029, 0x6029, 0xf028, 0xc02a, 0x502b, 0xa02b, 0x302a, 0xc02f, 0x502e, 0xa02e, 0x302f, 0x002d, 0x902c, 0x602c, 0xf02d, 0xc025, 0x5024, 0xa024, 0x3025, 0x0027, 0x9026, 0x6026, 0xf027, 0x0022, 0x9023, 0x6023, 0xf022, 0xc020, 0x5021, 0xa021, 0x3020, 0xc061, 0x5060, 0xa060, 0x3061, 0x0063, 0x9062, 0x6062, 0xf063, 0x0066, 0x9067, 0x6067, 0xf066, 0xc064, 0x5065, 0xa065, 0x3064, 0x006c, 0x906d, 0x606d, 0xf06c, 0xc06e, 0x506f, 0xa06f, 0x306e, 0xc06b, 0x506a, 0xa06a, 0x306b, 0x0069, 0x9068, 0x6068, 0xf069, 0x0078, 0x9079, 0x6079, 0xf078, 0xc07a, 0x507b, 0xa07b, 0x307a, 0xc07f, 0x507e, 0xa07e, 0x307f, 0x007d, 0x907c, 0x607c, 0xf07d, 0xc075, 0x5074, 0xa074, 0x3075, 0x0077, 0x9076, 0x6076, 0xf077, 0x0072, 0x9073, 0x6073, 0xf072, 0xc070, 0x5071, 0xa071, 0x3070, 0x0050, 0x9051, 0x6051, 0xf050, 0xc052, 0x5053, 0xa053, 0x3052, 0xc057, 0x5056, 0xa056, 0x3057, 0x0055, 0x9054, 0x6054, 0xf055, 0xc05d, 0x505c, 0xa05c, 0x305d, 0x005f, 0x905e, 0x605e, 0xf05f, 0x005a, 0x905b, 0x605b, 0xf05a, 0xc058, 0x5059, 0xa059, 0x3058, 0xc049, 0x5048, 0xa048, 0x3049, 0x004b, 0x904a, 0x604a, 0xf04b, 0x004e, 0x904f, 0x604f, 0xf04e, 0xc04c, 0x504d, 0xa04d, 0x304c, 0x0044, 0x9045, 0x6045, 0xf044, 0xc046, 0x5047, 0xa047, 0x3046, 0xc043, 0x5042, 0xa042, 0x3043, 0x0041, 0x9040, 0x6040, 0xf041, ], [ 0x0000, 0xc051, 0xc0a1, 0x00f0, 0xc141, 0x0110, 0x01e0, 0xc1b1, 0xc281, 0x02d0, 0x0220, 0xc271, 0x03c0, 0xc391, 0xc361, 0x0330, 0xc501, 0x0550, 0x05a0, 0xc5f1, 0x0440, 0xc411, 0xc4e1, 0x04b0, 0x0780, 0xc7d1, 0xc721, 0x0770, 0xc6c1, 0x0690, 0x0660, 0xc631, 0xca01, 0x0a50, 0x0aa0, 0xcaf1, 0x0b40, 0xcb11, 0xcbe1, 0x0bb0, 0x0880, 0xc8d1, 0xc821, 0x0870, 0xc9c1, 0x0990, 0x0960, 0xc931, 0x0f00, 0xcf51, 0xcfa1, 0x0ff0, 0xce41, 0x0e10, 0x0ee0, 0xceb1, 0xcd81, 0x0dd0, 0x0d20, 0xcd71, 0x0cc0, 0xcc91, 0xcc61, 0x0c30, 0xd401, 0x1450, 0x14a0, 0xd4f1, 0x1540, 0xd511, 0xd5e1, 0x15b0, 0x1680, 0xd6d1, 0xd621, 0x1670, 0xd7c1, 0x1790, 0x1760, 0xd731, 0x1100, 0xd151, 0xd1a1, 0x11f0, 0xd041, 0x1010, 0x10e0, 0xd0b1, 0xd381, 0x13d0, 0x1320, 0xd371, 0x12c0, 0xd291, 0xd261, 0x1230, 0x1e00, 0xde51, 0xdea1, 0x1ef0, 0xdf41, 0x1f10, 0x1fe0, 0xdfb1, 0xdc81, 0x1cd0, 0x1c20, 0xdc71, 0x1dc0, 0xdd91, 0xdd61, 0x1d30, 0xdb01, 0x1b50, 0x1ba0, 0xdbf1, 0x1a40, 0xda11, 0xdae1, 0x1ab0, 0x1980, 0xd9d1, 0xd921, 0x1970, 0xd8c1, 0x1890, 0x1860, 0xd831, 0xe801, 0x2850, 0x28a0, 0xe8f1, 0x2940, 0xe911, 0xe9e1, 0x29b0, 0x2a80, 0xead1, 0xea21, 0x2a70, 0xebc1, 0x2b90, 0x2b60, 0xeb31, 0x2d00, 0xed51, 0xeda1, 0x2df0, 0xec41, 0x2c10, 0x2ce0, 0xecb1, 0xef81, 0x2fd0, 0x2f20, 0xef71, 0x2ec0, 0xee91, 0xee61, 0x2e30, 0x2200, 0xe251, 0xe2a1, 0x22f0, 0xe341, 0x2310, 0x23e0, 0xe3b1, 0xe081, 0x20d0, 0x2020, 0xe071, 0x21c0, 0xe191, 0xe161, 0x2130, 0xe701, 0x2750, 0x27a0, 0xe7f1, 0x2640, 0xe611, 0xe6e1, 0x26b0, 0x2580, 0xe5d1, 0xe521, 0x2570, 0xe4c1, 0x2490, 0x2460, 0xe431, 0x3c00, 0xfc51, 0xfca1, 0x3cf0, 0xfd41, 0x3d10, 0x3de0, 0xfdb1, 0xfe81, 0x3ed0, 0x3e20, 0xfe71, 0x3fc0, 0xff91, 0xff61, 0x3f30, 0xf901, 0x3950, 0x39a0, 0xf9f1, 0x3840, 0xf811, 0xf8e1, 0x38b0, 0x3b80, 0xfbd1, 0xfb21, 0x3b70, 0xfac1, 0x3a90, 0x3a60, 0xfa31, 0xf601, 0x3650, 0x36a0, 0xf6f1, 0x3740, 0xf711, 0xf7e1, 0x37b0, 0x3480, 0xf4d1, 0xf421, 0x3470, 0xf5c1, 0x3590, 0x3560, 0xf531, 0x3300, 0xf351, 0xf3a1, 0x33f0, 0xf241, 0x3210, 0x32e0, 0xf2b1, 0xf181, 0x31d0, 0x3120, 0xf171, 0x30c0, 0xf091, 0xf061, 0x3030, ], [ 0x0000, 0xfc01, 0xb801, 0x4400, 0x3001, 0xcc00, 0x8800, 0x7401, 0x6002, 0x9c03, 0xd803, 0x2402, 0x5003, 0xac02, 0xe802, 0x1403, 0xc004, 0x3c05, 0x7805, 0x8404, 0xf005, 0x0c04, 0x4804, 0xb405, 0xa006, 0x5c07, 0x1807, 0xe406, 0x9007, 0x6c06, 0x2806, 0xd407, 0xc00b, 0x3c0a, 0x780a, 0x840b, 0xf00a, 0x0c0b, 0x480b, 0xb40a, 0xa009, 0x5c08, 0x1808, 0xe409, 0x9008, 0x6c09, 0x2809, 0xd408, 0x000f, 0xfc0e, 0xb80e, 0x440f, 0x300e, 0xcc0f, 0x880f, 0x740e, 0x600d, 0x9c0c, 0xd80c, 0x240d, 0x500c, 0xac0d, 0xe80d, 0x140c, 0xc015, 0x3c14, 0x7814, 0x8415, 0xf014, 0x0c15, 0x4815, 0xb414, 0xa017, 0x5c16, 0x1816, 0xe417, 0x9016, 0x6c17, 0x2817, 0xd416, 0x0011, 0xfc10, 0xb810, 0x4411, 0x3010, 0xcc11, 0x8811, 0x7410, 0x6013, 0x9c12, 0xd812, 0x2413, 0x5012, 0xac13, 0xe813, 0x1412, 0x001e, 0xfc1f, 0xb81f, 0x441e, 0x301f, 0xcc1e, 0x881e, 0x741f, 0x601c, 0x9c1d, 0xd81d, 0x241c, 0x501d, 0xac1c, 0xe81c, 0x141d, 0xc01a, 0x3c1b, 0x781b, 0x841a, 0xf01b, 0x0c1a, 0x481a, 0xb41b, 0xa018, 0x5c19, 0x1819, 0xe418, 0x9019, 0x6c18, 0x2818, 0xd419, 0xc029, 0x3c28, 0x7828, 0x8429, 0xf028, 0x0c29, 0x4829, 0xb428, 0xa02b, 0x5c2a, 0x182a, 0xe42b, 0x902a, 0x6c2b, 0x282b, 0xd42a, 0x002d, 0xfc2c, 0xb82c, 0x442d, 0x302c, 0xcc2d, 0x882d, 0x742c, 0x602f, 0x9c2e, 0xd82e, 0x242f, 0x502e, 0xac2f, 0xe82f, 0x142e, 0x0022, 0xfc23, 0xb823, 0x4422, 0x3023, 0xcc22, 0x8822, 0x7423, 0x6020, 0x9c21, 0xd821, 0x2420, 0x5021, 0xac20, 0xe820, 0x1421, 0xc026, 0x3c27, 0x7827, 0x8426, 0xf027, 0x0c26, 0x4826, 0xb427, 0xa024, 0x5c25, 0x1825, 0xe424, 0x9025, 0x6c24, 0x2824, 0xd425, 0x003c, 0xfc3d, 0xb83d, 0x443c, 0x303d, 0xcc3c, 0x883c, 0x743d, 0x603e, 0x9c3f, 0xd83f, 0x243e, 0x503f, 0xac3e, 0xe83e, 0x143f, 0xc038, 0x3c39, 0x7839, 0x8438, 0xf039, 0x0c38, 0x4838, 0xb439, 0xa03a, 0x5c3b, 0x183b, 0xe43a, 0x903b, 0x6c3a, 0x283a, 0xd43b, 0xc037, 0x3c36, 0x7836, 0x8437, 0xf036, 0x0c37, 0x4837, 0xb436, 0xa035, 0x5c34, 0x1834, 0xe435, 0x9034, 0x6c35, 0x2835, 0xd434, 0x0033, 0xfc32, 0xb832, 0x4433, 0x3032, 0xcc33, 0x8833, 0x7432, 0x6031, 0x9c30, 0xd830, 0x2431, 0x5030, 0xac31, 0xe831, 0x1430, ], [ 0x0000, 0xc03d, 0xc079, 0x0044, 0xc0f1, 0x00cc, 0x0088, 0xc0b5, 0xc1e1, 0x01dc, 0x0198, 0xc1a5, 0x0110, 0xc12d, 0xc169, 0x0154, 0xc3c1, 0x03fc, 0x03b8, 0xc385, 0x0330, 0xc30d, 0xc349, 0x0374, 0x0220, 0xc21d, 0xc259, 0x0264, 0xc2d1, 0x02ec, 0x02a8, 0xc295, 0xc781, 0x07bc, 0x07f8, 0xc7c5, 0x0770, 0xc74d, 0xc709, 0x0734, 0x0660, 0xc65d, 0xc619, 0x0624, 0xc691, 0x06ac, 0x06e8, 0xc6d5, 0x0440, 0xc47d, 0xc439, 0x0404, 0xc4b1, 0x048c, 0x04c8, 0xc4f5, 0xc5a1, 0x059c, 0x05d8, 0xc5e5, 0x0550, 0xc56d, 0xc529, 0x0514, 0xcf01, 0x0f3c, 0x0f78, 0xcf45, 0x0ff0, 0xcfcd, 0xcf89, 0x0fb4, 0x0ee0, 0xcedd, 0xce99, 0x0ea4, 0xce11, 0x0e2c, 0x0e68, 0xce55, 0x0cc0, 0xccfd, 0xccb9, 0x0c84, 0xcc31, 0x0c0c, 0x0c48, 0xcc75, 0xcd21, 0x0d1c, 0x0d58, 0xcd65, 0x0dd0, 0xcded, 0xcda9, 0x0d94, 0x0880, 0xc8bd, 0xc8f9, 0x08c4, 0xc871, 0x084c, 0x0808, 0xc835, 0xc961, 0x095c, 0x0918, 0xc925, 0x0990, 0xc9ad, 0xc9e9, 0x09d4, 0xcb41, 0x0b7c, 0x0b38, 0xcb05, 0x0bb0, 0xcb8d, 0xcbc9, 0x0bf4, 0x0aa0, 0xca9d, 0xcad9, 0x0ae4, 0xca51, 0x0a6c, 0x0a28, 0xca15, 0xde01, 0x1e3c, 0x1e78, 0xde45, 0x1ef0, 0xdecd, 0xde89, 0x1eb4, 0x1fe0, 0xdfdd, 0xdf99, 0x1fa4, 0xdf11, 0x1f2c, 0x1f68, 0xdf55, 0x1dc0, 0xddfd, 0xddb9, 0x1d84, 0xdd31, 0x1d0c, 0x1d48, 0xdd75, 0xdc21, 0x1c1c, 0x1c58, 0xdc65, 0x1cd0, 0xdced, 0xdca9, 0x1c94, 0x1980, 0xd9bd, 0xd9f9, 0x19c4, 0xd971, 0x194c, 0x1908, 0xd935, 0xd861, 0x185c, 0x1818, 0xd825, 0x1890, 0xd8ad, 0xd8e9, 0x18d4, 0xda41, 0x1a7c, 0x1a38, 0xda05, 0x1ab0, 0xda8d, 0xdac9, 0x1af4, 0x1ba0, 0xdb9d, 0xdbd9, 0x1be4, 0xdb51, 0x1b6c, 0x1b28, 0xdb15, 0x1100, 0xd13d, 0xd179, 0x1144, 0xd1f1, 0x11cc, 0x1188, 0xd1b5, 0xd0e1, 0x10dc, 0x1098, 0xd0a5, 0x1010, 0xd02d, 0xd069, 0x1054, 0xd2c1, 0x12fc, 0x12b8, 0xd285, 0x1230, 0xd20d, 0xd249, 0x1274, 0x1320, 0xd31d, 0xd359, 0x1364, 0xd3d1, 0x13ec, 0x13a8, 0xd395, 0xd681, 0x16bc, 0x16f8, 0xd6c5, 0x1670, 0xd64d, 0xd609, 0x1634, 0x1760, 0xd75d, 0xd719, 0x1724, 0xd791, 0x17ac, 0x17e8, 0xd7d5, 0x1540, 0xd57d, 0xd539, 0x1504, 0xd5b1, 0x158c, 0x15c8, 0xd5f5, 0xd4a1, 0x149c, 0x14d8, 0xd4e5, 0x1450, 0xd46d, 0xd429, 0x1414, ], [ 0x0000, 0xd101, 0xe201, 0x3300, 0x8401, 0x5500, 0x6600, 0xb701, 0x4801, 0x9900, 0xaa00, 0x7b01, 0xcc00, 0x1d01, 0x2e01, 0xff00, 0x9002, 0x4103, 0x7203, 0xa302, 0x1403, 0xc502, 0xf602, 0x2703, 0xd803, 0x0902, 0x3a02, 0xeb03, 0x5c02, 0x8d03, 0xbe03, 0x6f02, 0x6007, 0xb106, 0x8206, 0x5307, 0xe406, 0x3507, 0x0607, 0xd706, 0x2806, 0xf907, 0xca07, 0x1b06, 0xac07, 0x7d06, 0x4e06, 0x9f07, 0xf005, 0x2104, 0x1204, 0xc305, 0x7404, 0xa505, 0x9605, 0x4704, 0xb804, 0x6905, 0x5a05, 0x8b04, 0x3c05, 0xed04, 0xde04, 0x0f05, 0xc00e, 0x110f, 0x220f, 0xf30e, 0x440f, 0x950e, 0xa60e, 0x770f, 0x880f, 0x590e, 0x6a0e, 0xbb0f, 0x0c0e, 0xdd0f, 0xee0f, 0x3f0e, 0x500c, 0x810d, 0xb20d, 0x630c, 0xd40d, 0x050c, 0x360c, 0xe70d, 0x180d, 0xc90c, 0xfa0c, 0x2b0d, 0x9c0c, 0x4d0d, 0x7e0d, 0xaf0c, 0xa009, 0x7108, 0x4208, 0x9309, 0x2408, 0xf509, 0xc609, 0x1708, 0xe808, 0x3909, 0x0a09, 0xdb08, 0x6c09, 0xbd08, 0x8e08, 0x5f09, 0x300b, 0xe10a, 0xd20a, 0x030b, 0xb40a, 0x650b, 0x560b, 0x870a, 0x780a, 0xa90b, 0x9a0b, 0x4b0a, 0xfc0b, 0x2d0a, 0x1e0a, 0xcf0b, 0xc01f, 0x111e, 0x221e, 0xf31f, 0x441e, 0x951f, 0xa61f, 0x771e, 0x881e, 0x591f, 0x6a1f, 0xbb1e, 0x0c1f, 0xdd1e, 0xee1e, 0x3f1f, 0x501d, 0x811c, 0xb21c, 0x631d, 0xd41c, 0x051d, 0x361d, 0xe71c, 0x181c, 0xc91d, 0xfa1d, 0x2b1c, 0x9c1d, 0x4d1c, 0x7e1c, 0xaf1d, 0xa018, 0x7119, 0x4219, 0x9318, 0x2419, 0xf518, 0xc618, 0x1719, 0xe819, 0x3918, 0x0a18, 0xdb19, 0x6c18, 0xbd19, 0x8e19, 0x5f18, 0x301a, 0xe11b, 0xd21b, 0x031a, 0xb41b, 0x651a, 0x561a, 0x871b, 0x781b, 0xa91a, 0x9a1a, 0x4b1b, 0xfc1a, 0x2d1b, 0x1e1b, 0xcf1a, 0x0011, 0xd110, 0xe210, 0x3311, 0x8410, 0x5511, 0x6611, 0xb710, 0x4810, 0x9911, 0xaa11, 0x7b10, 0xcc11, 0x1d10, 0x2e10, 0xff11, 0x9013, 0x4112, 0x7212, 0xa313, 0x1412, 0xc513, 0xf613, 0x2712, 0xd812, 0x0913, 0x3a13, 0xeb12, 0x5c13, 0x8d12, 0xbe12, 0x6f13, 0x6016, 0xb117, 0x8217, 0x5316, 0xe417, 0x3516, 0x0616, 0xd717, 0x2817, 0xf916, 0xca16, 0x1b17, 0xac16, 0x7d17, 0x4e17, 0x9f16, 0xf014, 0x2115, 0x1215, 0xc314, 0x7415, 0xa514, 0x9614, 0x4715, 0xb815, 0x6914, 0x5a14, 0x8b15, 0x3c14, 0xed15, 0xde15, 0x0f14, ], [ 0x0000, 0xc010, 0xc023, 0x0033, 0xc045, 0x0055, 0x0066, 0xc076, 0xc089, 0x0099, 0x00aa, 0xc0ba, 0x00cc, 0xc0dc, 0xc0ef, 0x00ff, 0xc111, 0x0101, 0x0132, 0xc122, 0x0154, 0xc144, 0xc177, 0x0167, 0x0198, 0xc188, 0xc1bb, 0x01ab, 0xc1dd, 0x01cd, 0x01fe, 0xc1ee, 0xc221, 0x0231, 0x0202, 0xc212, 0x0264, 0xc274, 0xc247, 0x0257, 0x02a8, 0xc2b8, 0xc28b, 0x029b, 0xc2ed, 0x02fd, 0x02ce, 0xc2de, 0x0330, 0xc320, 0xc313, 0x0303, 0xc375, 0x0365, 0x0356, 0xc346, 0xc3b9, 0x03a9, 0x039a, 0xc38a, 0x03fc, 0xc3ec, 0xc3df, 0x03cf, 0xc441, 0x0451, 0x0462, 0xc472, 0x0404, 0xc414, 0xc427, 0x0437, 0x04c8, 0xc4d8, 0xc4eb, 0x04fb, 0xc48d, 0x049d, 0x04ae, 0xc4be, 0x0550, 0xc540, 0xc573, 0x0563, 0xc515, 0x0505, 0x0536, 0xc526, 0xc5d9, 0x05c9, 0x05fa, 0xc5ea, 0x059c, 0xc58c, 0xc5bf, 0x05af, 0x0660, 0xc670, 0xc643, 0x0653, 0xc625, 0x0635, 0x0606, 0xc616, 0xc6e9, 0x06f9, 0x06ca, 0xc6da, 0x06ac, 0xc6bc, 0xc68f, 0x069f, 0xc771, 0x0761, 0x0752, 0xc742, 0x0734, 0xc724, 0xc717, 0x0707, 0x07f8, 0xc7e8, 0xc7db, 0x07cb, 0xc7bd, 0x07ad, 0x079e, 0xc78e, 0xc881, 0x0891, 0x08a2, 0xc8b2, 0x08c4, 0xc8d4, 0xc8e7, 0x08f7, 0x0808, 0xc818, 0xc82b, 0x083b, 0xc84d, 0x085d, 0x086e, 0xc87e, 0x0990, 0xc980, 0xc9b3, 0x09a3, 0xc9d5, 0x09c5, 0x09f6, 0xc9e6, 0xc919, 0x0909, 0x093a, 0xc92a, 0x095c, 0xc94c, 0xc97f, 0x096f, 0x0aa0, 0xcab0, 0xca83, 0x0a93, 0xcae5, 0x0af5, 0x0ac6, 0xcad6, 0xca29, 0x0a39, 0x0a0a, 0xca1a, 0x0a6c, 0xca7c, 0xca4f, 0x0a5f, 0xcbb1, 0x0ba1, 0x0b92, 0xcb82, 0x0bf4, 0xcbe4, 0xcbd7, 0x0bc7, 0x0b38, 0xcb28, 0xcb1b, 0x0b0b, 0xcb7d, 0x0b6d, 0x0b5e, 0xcb4e, 0x0cc0, 0xccd0, 0xcce3, 0x0cf3, 0xcc85, 0x0c95, 0x0ca6, 0xccb6, 0xcc49, 0x0c59, 0x0c6a, 0xcc7a, 0x0c0c, 0xcc1c, 0xcc2f, 0x0c3f, 0xcdd1, 0x0dc1, 0x0df2, 0xcde2, 0x0d94, 0xcd84, 0xcdb7, 0x0da7, 0x0d58, 0xcd48, 0xcd7b, 0x0d6b, 0xcd1d, 0x0d0d, 0x0d3e, 0xcd2e, 0xcee1, 0x0ef1, 0x0ec2, 0xced2, 0x0ea4, 0xceb4, 0xce87, 0x0e97, 0x0e68, 0xce78, 0xce4b, 0x0e5b, 0xce2d, 0x0e3d, 0x0e0e, 0xce1e, 0x0ff0, 0xcfe0, 0xcfd3, 0x0fc3, 0xcfb5, 0x0fa5, 0x0f96, 0xcf86, 0xcf79, 0x0f69, 0x0f5a, 0xcf4a, 0x0f3c, 0xcf2c, 0xcf1f, 0x0f0f, ], [ 0x0000, 0xccc1, 0xd981, 0x1540, 0xf301, 0x3fc0, 0x2a80, 0xe641, 0xa601, 0x6ac0, 0x7f80, 0xb341, 0x5500, 0x99c1, 0x8c81, 0x4040, 0x0c01, 0xc0c0, 0xd580, 0x1941, 0xff00, 0x33c1, 0x2681, 0xea40, 0xaa00, 0x66c1, 0x7381, 0xbf40, 0x5901, 0x95c0, 0x8080, 0x4c41, 0x1802, 0xd4c3, 0xc183, 0x0d42, 0xeb03, 0x27c2, 0x3282, 0xfe43, 0xbe03, 0x72c2, 0x6782, 0xab43, 0x4d02, 0x81c3, 0x9483, 0x5842, 0x1403, 0xd8c2, 0xcd82, 0x0143, 0xe702, 0x2bc3, 0x3e83, 0xf242, 0xb202, 0x7ec3, 0x6b83, 0xa742, 0x4103, 0x8dc2, 0x9882, 0x5443, 0x3004, 0xfcc5, 0xe985, 0x2544, 0xc305, 0x0fc4, 0x1a84, 0xd645, 0x9605, 0x5ac4, 0x4f84, 0x8345, 0x6504, 0xa9c5, 0xbc85, 0x7044, 0x3c05, 0xf0c4, 0xe584, 0x2945, 0xcf04, 0x03c5, 0x1685, 0xda44, 0x9a04, 0x56c5, 0x4385, 0x8f44, 0x6905, 0xa5c4, 0xb084, 0x7c45, 0x2806, 0xe4c7, 0xf187, 0x3d46, 0xdb07, 0x17c6, 0x0286, 0xce47, 0x8e07, 0x42c6, 0x5786, 0x9b47, 0x7d06, 0xb1c7, 0xa487, 0x6846, 0x2407, 0xe8c6, 0xfd86, 0x3147, 0xd706, 0x1bc7, 0x0e87, 0xc246, 0x8206, 0x4ec7, 0x5b87, 0x9746, 0x7107, 0xbdc6, 0xa886, 0x6447, 0x6008, 0xacc9, 0xb989, 0x7548, 0x9309, 0x5fc8, 0x4a88, 0x8649, 0xc609, 0x0ac8, 0x1f88, 0xd349, 0x3508, 0xf9c9, 0xec89, 0x2048, 0x6c09, 0xa0c8, 0xb588, 0x7949, 0x9f08, 0x53c9, 0x4689, 0x8a48, 0xca08, 0x06c9, 0x1389, 0xdf48, 0x3909, 0xf5c8, 0xe088, 0x2c49, 0x780a, 0xb4cb, 0xa18b, 0x6d4a, 0x8b0b, 0x47ca, 0x528a, 0x9e4b, 0xde0b, 0x12ca, 0x078a, 0xcb4b, 0x2d0a, 0xe1cb, 0xf48b, 0x384a, 0x740b, 0xb8ca, 0xad8a, 0x614b, 0x870a, 0x4bcb, 0x5e8b, 0x924a, 0xd20a, 0x1ecb, 0x0b8b, 0xc74a, 0x210b, 0xedca, 0xf88a, 0x344b, 0x500c, 0x9ccd, 0x898d, 0x454c, 0xa30d, 0x6fcc, 0x7a8c, 0xb64d, 0xf60d, 0x3acc, 0x2f8c, 0xe34d, 0x050c, 0xc9cd, 0xdc8d, 0x104c, 0x5c0d, 0x90cc, 0x858c, 0x494d, 0xaf0c, 0x63cd, 0x768d, 0xba4c, 0xfa0c, 0x36cd, 0x238d, 0xef4c, 0x090d, 0xc5cc, 0xd08c, 0x1c4d, 0x480e, 0x84cf, 0x918f, 0x5d4e, 0xbb0f, 0x77ce, 0x628e, 0xae4f, 0xee0f, 0x22ce, 0x378e, 0xfb4f, 0x1d0e, 0xd1cf, 0xc48f, 0x084e, 0x440f, 0x88ce, 0x9d8e, 0x514f, 0xb70e, 0x7bcf, 0x6e8f, 0xa24e, 0xe20e, 0x2ecf, 0x3b8f, 0xf74e, 0x110f, 0xddce, 0xc88e, 0x044f, ], [ 0x0000, 0x900d, 0x6019, 0xf014, 0xc032, 0x503f, 0xa02b, 0x3026, 0xc067, 0x506a, 0xa07e, 0x3073, 0x0055, 0x9058, 0x604c, 0xf041, 0xc0cd, 0x50c0, 0xa0d4, 0x30d9, 0x00ff, 0x90f2, 0x60e6, 0xf0eb, 0x00aa, 0x90a7, 0x60b3, 0xf0be, 0xc098, 0x5095, 0xa081, 0x308c, 0xc199, 0x5194, 0xa180, 0x318d, 0x01ab, 0x91a6, 0x61b2, 0xf1bf, 0x01fe, 0x91f3, 0x61e7, 0xf1ea, 0xc1cc, 0x51c1, 0xa1d5, 0x31d8, 0x0154, 0x9159, 0x614d, 0xf140, 0xc166, 0x516b, 0xa17f, 0x3172, 0xc133, 0x513e, 0xa12a, 0x3127, 0x0101, 0x910c, 0x6118, 0xf115, 0xc331, 0x533c, 0xa328, 0x3325, 0x0303, 0x930e, 0x631a, 0xf317, 0x0356, 0x935b, 0x634f, 0xf342, 0xc364, 0x5369, 0xa37d, 0x3370, 0x03fc, 0x93f1, 0x63e5, 0xf3e8, 0xc3ce, 0x53c3, 0xa3d7, 0x33da, 0xc39b, 0x5396, 0xa382, 0x338f, 0x03a9, 0x93a4, 0x63b0, 0xf3bd, 0x02a8, 0x92a5, 0x62b1, 0xf2bc, 0xc29a, 0x5297, 0xa283, 0x328e, 0xc2cf, 0x52c2, 0xa2d6, 0x32db, 0x02fd, 0x92f0, 0x62e4, 0xf2e9, 0xc265, 0x5268, 0xa27c, 0x3271, 0x0257, 0x925a, 0x624e, 0xf243, 0x0202, 0x920f, 0x621b, 0xf216, 0xc230, 0x523d, 0xa229, 0x3224, 0xc661, 0x566c, 0xa678, 0x3675, 0x0653, 0x965e, 0x664a, 0xf647, 0x0606, 0x960b, 0x661f, 0xf612, 0xc634, 0x5639, 0xa62d, 0x3620, 0x06ac, 0x96a1, 0x66b5, 0xf6b8, 0xc69e, 0x5693, 0xa687, 0x368a, 0xc6cb, 0x56c6, 0xa6d2, 0x36df, 0x06f9, 0x96f4, 0x66e0, 0xf6ed, 0x07f8, 0x97f5, 0x67e1, 0xf7ec, 0xc7ca, 0x57c7, 0xa7d3, 0x37de, 0xc79f, 0x5792, 0xa786, 0x378b, 0x07ad, 0x97a0, 0x67b4, 0xf7b9, 0xc735, 0x5738, 0xa72c, 0x3721, 0x0707, 0x970a, 0x671e, 0xf713, 0x0752, 0x975f, 0x674b, 0xf746, 0xc760, 0x576d, 0xa779, 0x3774, 0x0550, 0x955d, 0x6549, 0xf544, 0xc562, 0x556f, 0xa57b, 0x3576, 0xc537, 0x553a, 0xa52e, 0x3523, 0x0505, 0x9508, 0x651c, 0xf511, 0xc59d, 0x5590, 0xa584, 0x3589, 0x05af, 0x95a2, 0x65b6, 0xf5bb, 0x05fa, 0x95f7, 0x65e3, 0xf5ee, 0xc5c8, 0x55c5, 0xa5d1, 0x35dc, 0xc4c9, 0x54c4, 0xa4d0, 0x34dd, 0x04fb, 0x94f6, 0x64e2, 0xf4ef, 0x04ae, 0x94a3, 0x64b7, 0xf4ba, 0xc49c, 0x5491, 0xa485, 0x3488, 0x0404, 0x9409, 0x641d, 0xf410, 0xc436, 0x543b, 0xa42f, 0x3422, 0xc463, 0x546e, 0xa47a, 0x3477, 0x0451, 0x945c, 0x6448, 0xf445, ], [ 0x0000, 0xc551, 0xcaa1, 0x0ff0, 0xd541, 0x1010, 0x1fe0, 0xdab1, 0xea81, 0x2fd0, 0x2020, 0xe571, 0x3fc0, 0xfa91, 0xf561, 0x3030, 0x9501, 0x5050, 0x5fa0, 0x9af1, 0x4040, 0x8511, 0x8ae1, 0x4fb0, 0x7f80, 0xbad1, 0xb521, 0x7070, 0xaac1, 0x6f90, 0x6060, 0xa531, 0x6a01, 0xaf50, 0xa0a0, 0x65f1, 0xbf40, 0x7a11, 0x75e1, 0xb0b0, 0x8080, 0x45d1, 0x4a21, 0x8f70, 0x55c1, 0x9090, 0x9f60, 0x5a31, 0xff00, 0x3a51, 0x35a1, 0xf0f0, 0x2a41, 0xef10, 0xe0e0, 0x25b1, 0x1581, 0xd0d0, 0xdf20, 0x1a71, 0xc0c0, 0x0591, 0x0a61, 0xcf30, 0xd402, 0x1153, 0x1ea3, 0xdbf2, 0x0143, 0xc412, 0xcbe2, 0x0eb3, 0x3e83, 0xfbd2, 0xf422, 0x3173, 0xebc2, 0x2e93, 0x2163, 0xe432, 0x4103, 0x8452, 0x8ba2, 0x4ef3, 0x9442, 0x5113, 0x5ee3, 0x9bb2, 0xab82, 0x6ed3, 0x6123, 0xa472, 0x7ec3, 0xbb92, 0xb462, 0x7133, 0xbe03, 0x7b52, 0x74a2, 0xb1f3, 0x6b42, 0xae13, 0xa1e3, 0x64b2, 0x5482, 0x91d3, 0x9e23, 0x5b72, 0x81c3, 0x4492, 0x4b62, 0x8e33, 0x2b02, 0xee53, 0xe1a3, 0x24f2, 0xfe43, 0x3b12, 0x34e2, 0xf1b3, 0xc183, 0x04d2, 0x0b22, 0xce73, 0x14c2, 0xd193, 0xde63, 0x1b32, 0xe807, 0x2d56, 0x22a6, 0xe7f7, 0x3d46, 0xf817, 0xf7e7, 0x32b6, 0x0286, 0xc7d7, 0xc827, 0x0d76, 0xd7c7, 0x1296, 0x1d66, 0xd837, 0x7d06, 0xb857, 0xb7a7, 0x72f6, 0xa847, 0x6d16, 0x62e6, 0xa7b7, 0x9787, 0x52d6, 0x5d26, 0x9877, 0x42c6, 0x8797, 0x8867, 0x4d36, 0x8206, 0x4757, 0x48a7, 0x8df6, 0x5747, 0x9216, 0x9de6, 0x58b7, 0x6887, 0xadd6, 0xa226, 0x6777, 0xbdc6, 0x7897, 0x7767, 0xb236, 0x1707, 0xd256, 0xdda6, 0x18f7, 0xc246, 0x0717, 0x08e7, 0xcdb6, 0xfd86, 0x38d7, 0x3727, 0xf276, 0x28c7, 0xed96, 0xe266, 0x2737, 0x3c05, 0xf954, 0xf6a4, 0x33f5, 0xe944, 0x2c15, 0x23e5, 0xe6b4, 0xd684, 0x13d5, 0x1c25, 0xd974, 0x03c5, 0xc694, 0xc964, 0x0c35, 0xa904, 0x6c55, 0x63a5, 0xa6f4, 0x7c45, 0xb914, 0xb6e4, 0x73b5, 0x4385, 0x86d4, 0x8924, 0x4c75, 0x96c4, 0x5395, 0x5c65, 0x9934, 0x5604, 0x9355, 0x9ca5, 0x59f4, 0x8345, 0x4614, 0x49e4, 0x8cb5, 0xbc85, 0x79d4, 0x7624, 0xb375, 0x69c4, 0xac95, 0xa365, 0x6634, 0xc305, 0x0654, 0x09a4, 0xccf5, 0x1644, 0xd315, 0xdce5, 0x19b4, 0x2984, 0xecd5, 0xe325, 0x2674, 0xfcc5, 0x3994, 0x3664, 0xf335, ], [ 0x0000, 0xfc04, 0xb80b, 0x440f, 0x3015, 0xcc11, 0x881e, 0x741a, 0x602a, 0x9c2e, 0xd821, 0x2425, 0x503f, 0xac3b, 0xe834, 0x1430, 0xc054, 0x3c50, 0x785f, 0x845b, 0xf041, 0x0c45, 0x484a, 0xb44e, 0xa07e, 0x5c7a, 0x1875, 0xe471, 0x906b, 0x6c6f, 0x2860, 0xd464, 0xc0ab, 0x3caf, 0x78a0, 0x84a4, 0xf0be, 0x0cba, 0x48b5, 0xb4b1, 0xa081, 0x5c85, 0x188a, 0xe48e, 0x9094, 0x6c90, 0x289f, 0xd49b, 0x00ff, 0xfcfb, 0xb8f4, 0x44f0, 0x30ea, 0xccee, 0x88e1, 0x74e5, 0x60d5, 0x9cd1, 0xd8de, 0x24da, 0x50c0, 0xacc4, 0xe8cb, 0x14cf, 0xc155, 0x3d51, 0x795e, 0x855a, 0xf140, 0x0d44, 0x494b, 0xb54f, 0xa17f, 0x5d7b, 0x1974, 0xe570, 0x916a, 0x6d6e, 0x2961, 0xd565, 0x0101, 0xfd05, 0xb90a, 0x450e, 0x3114, 0xcd10, 0x891f, 0x751b, 0x612b, 0x9d2f, 0xd920, 0x2524, 0x513e, 0xad3a, 0xe935, 0x1531, 0x01fe, 0xfdfa, 0xb9f5, 0x45f1, 0x31eb, 0xcdef, 0x89e0, 0x75e4, 0x61d4, 0x9dd0, 0xd9df, 0x25db, 0x51c1, 0xadc5, 0xe9ca, 0x15ce, 0xc1aa, 0x3dae, 0x79a1, 0x85a5, 0xf1bf, 0x0dbb, 0x49b4, 0xb5b0, 0xa180, 0x5d84, 0x198b, 0xe58f, 0x9195, 0x6d91, 0x299e, 0xd59a, 0xc2a9, 0x3ead, 0x7aa2, 0x86a6, 0xf2bc, 0x0eb8, 0x4ab7, 0xb6b3, 0xa283, 0x5e87, 0x1a88, 0xe68c, 0x9296, 0x6e92, 0x2a9d, 0xd699, 0x02fd, 0xfef9, 0xbaf6, 0x46f2, 0x32e8, 0xceec, 0x8ae3, 0x76e7, 0x62d7, 0x9ed3, 0xdadc, 0x26d8, 0x52c2, 0xaec6, 0xeac9, 0x16cd, 0x0202, 0xfe06, 0xba09, 0x460d, 0x3217, 0xce13, 0x8a1c, 0x7618, 0x6228, 0x9e2c, 0xda23, 0x2627, 0x523d, 0xae39, 0xea36, 0x1632, 0xc256, 0x3e52, 0x7a5d, 0x8659, 0xf243, 0x0e47, 0x4a48, 0xb64c, 0xa27c, 0x5e78, 0x1a77, 0xe673, 0x9269, 0x6e6d, 0x2a62, 0xd666, 0x03fc, 0xfff8, 0xbbf7, 0x47f3, 0x33e9, 0xcfed, 0x8be2, 0x77e6, 0x63d6, 0x9fd2, 0xdbdd, 0x27d9, 0x53c3, 0xafc7, 0xebc8, 0x17cc, 0xc3a8, 0x3fac, 0x7ba3, 0x87a7, 0xf3bd, 0x0fb9, 0x4bb6, 0xb7b2, 0xa382, 0x5f86, 0x1b89, 0xe78d, 0x9397, 0x6f93, 0x2b9c, 0xd798, 0xc357, 0x3f53, 0x7b5c, 0x8758, 0xf342, 0x0f46, 0x4b49, 0xb74d, 0xa37d, 0x5f79, 0x1b76, 0xe772, 0x9368, 0x6f6c, 0x2b63, 0xd767, 0x0303, 0xff07, 0xbb08, 0x470c, 0x3316, 0xcf12, 0x8b1d, 0x7719, 0x6329, 0x9f2d, 0xdb22, 0x2726, 0x533c, 0xaf38, 0xeb37, 0x1733, ], [ 0x0000, 0xc3fd, 0xc7f9, 0x0404, 0xcff1, 0x0c0c, 0x0808, 0xcbf5, 0xdfe1, 0x1c1c, 0x1818, 0xdbe5, 0x1010, 0xd3ed, 0xd7e9, 0x1414, 0xffc1, 0x3c3c, 0x3838, 0xfbc5, 0x3030, 0xf3cd, 0xf7c9, 0x3434, 0x2020, 0xe3dd, 0xe7d9, 0x2424, 0xefd1, 0x2c2c, 0x2828, 0xebd5, 0xbf81, 0x7c7c, 0x7878, 0xbb85, 0x7070, 0xb38d, 0xb789, 0x7474, 0x6060, 0xa39d, 0xa799, 0x6464, 0xaf91, 0x6c6c, 0x6868, 0xab95, 0x4040, 0x83bd, 0x87b9, 0x4444, 0x8fb1, 0x4c4c, 0x4848, 0x8bb5, 0x9fa1, 0x5c5c, 0x5858, 0x9ba5, 0x5050, 0x93ad, 0x97a9, 0x5454, 0x3f01, 0xfcfc, 0xf8f8, 0x3b05, 0xf0f0, 0x330d, 0x3709, 0xf4f4, 0xe0e0, 0x231d, 0x2719, 0xe4e4, 0x2f11, 0xecec, 0xe8e8, 0x2b15, 0xc0c0, 0x033d, 0x0739, 0xc4c4, 0x0f31, 0xcccc, 0xc8c8, 0x0b35, 0x1f21, 0xdcdc, 0xd8d8, 0x1b25, 0xd0d0, 0x132d, 0x1729, 0xd4d4, 0x8080, 0x437d, 0x4779, 0x8484, 0x4f71, 0x8c8c, 0x8888, 0x4b75, 0x5f61, 0x9c9c, 0x9898, 0x5b65, 0x9090, 0x536d, 0x5769, 0x9494, 0x7f41, 0xbcbc, 0xb8b8, 0x7b45, 0xb0b0, 0x734d, 0x7749, 0xb4b4, 0xa0a0, 0x635d, 0x6759, 0xa4a4, 0x6f51, 0xacac, 0xa8a8, 0x6b55, 0x7e02, 0xbdff, 0xb9fb, 0x7a06, 0xb1f3, 0x720e, 0x760a, 0xb5f7, 0xa1e3, 0x621e, 0x661a, 0xa5e7, 0x6e12, 0xadef, 0xa9eb, 0x6a16, 0x81c3, 0x423e, 0x463a, 0x85c7, 0x4e32, 0x8dcf, 0x89cb, 0x4a36, 0x5e22, 0x9ddf, 0x99db, 0x5a26, 0x91d3, 0x522e, 0x562a, 0x95d7, 0xc183, 0x027e, 0x067a, 0xc587, 0x0e72, 0xcd8f, 0xc98b, 0x0a76, 0x1e62, 0xdd9f, 0xd99b, 0x1a66, 0xd193, 0x126e, 0x166a, 0xd597, 0x3e42, 0xfdbf, 0xf9bb, 0x3a46, 0xf1b3, 0x324e, 0x364a, 0xf5b7, 0xe1a3, 0x225e, 0x265a, 0xe5a7, 0x2e52, 0xedaf, 0xe9ab, 0x2a56, 0x4103, 0x82fe, 0x86fa, 0x4507, 0x8ef2, 0x4d0f, 0x490b, 0x8af6, 0x9ee2, 0x5d1f, 0x591b, 0x9ae6, 0x5113, 0x92ee, 0x96ea, 0x5517, 0xbec2, 0x7d3f, 0x793b, 0xbac6, 0x7133, 0xb2ce, 0xb6ca, 0x7537, 0x6123, 0xa2de, 0xa6da, 0x6527, 0xaed2, 0x6d2f, 0x692b, 0xaad6, 0xfe82, 0x3d7f, 0x397b, 0xfa86, 0x3173, 0xf28e, 0xf68a, 0x3577, 0x2163, 0xe29e, 0xe69a, 0x2567, 0xee92, 0x2d6f, 0x296b, 0xea96, 0x0143, 0xc2be, 0xc6ba, 0x0547, 0xceb2, 0x0d4f, 0x094b, 0xcab6, 0xdea2, 0x1d5f, 0x195b, 0xdaa6, 0x1153, 0xd2ae, 0xd6aa, 0x1557, ], [ 0x0000, 0x8102, 0x4207, 0xc305, 0x840e, 0x050c, 0xc609, 0x470b, 0x481f, 0xc91d, 0x0a18, 0x8b1a, 0xcc11, 0x4d13, 0x8e16, 0x0f14, 0x903e, 0x113c, 0xd239, 0x533b, 0x1430, 0x9532, 0x5637, 0xd735, 0xd821, 0x5923, 0x9a26, 0x1b24, 0x5c2f, 0xdd2d, 0x1e28, 0x9f2a, 0x607f, 0xe17d, 0x2278, 0xa37a, 0xe471, 0x6573, 0xa676, 0x2774, 0x2860, 0xa962, 0x6a67, 0xeb65, 0xac6e, 0x2d6c, 0xee69, 0x6f6b, 0xf041, 0x7143, 0xb246, 0x3344, 0x744f, 0xf54d, 0x3648, 0xb74a, 0xb85e, 0x395c, 0xfa59, 0x7b5b, 0x3c50, 0xbd52, 0x7e57, 0xff55, 0xc0fe, 0x41fc, 0x82f9, 0x03fb, 0x44f0, 0xc5f2, 0x06f7, 0x87f5, 0x88e1, 0x09e3, 0xcae6, 0x4be4, 0x0cef, 0x8ded, 0x4ee8, 0xcfea, 0x50c0, 0xd1c2, 0x12c7, 0x93c5, 0xd4ce, 0x55cc, 0x96c9, 0x17cb, 0x18df, 0x99dd, 0x5ad8, 0xdbda, 0x9cd1, 0x1dd3, 0xded6, 0x5fd4, 0xa081, 0x2183, 0xe286, 0x6384, 0x248f, 0xa58d, 0x6688, 0xe78a, 0xe89e, 0x699c, 0xaa99, 0x2b9b, 0x6c90, 0xed92, 0x2e97, 0xaf95, 0x30bf, 0xb1bd, 0x72b8, 0xf3ba, 0xb4b1, 0x35b3, 0xf6b6, 0x77b4, 0x78a0, 0xf9a2, 0x3aa7, 0xbba5, 0xfcae, 0x7dac, 0xbea9, 0x3fab, 0xc1ff, 0x40fd, 0x83f8, 0x02fa, 0x45f1, 0xc4f3, 0x07f6, 0x86f4, 0x89e0, 0x08e2, 0xcbe7, 0x4ae5, 0x0dee, 0x8cec, 0x4fe9, 0xceeb, 0x51c1, 0xd0c3, 0x13c6, 0x92c4, 0xd5cf, 0x54cd, 0x97c8, 0x16ca, 0x19de, 0x98dc, 0x5bd9, 0xdadb, 0x9dd0, 0x1cd2, 0xdfd7, 0x5ed5, 0xa180, 0x2082, 0xe387, 0x6285, 0x258e, 0xa48c, 0x6789, 0xe68b, 0xe99f, 0x689d, 0xab98, 0x2a9a, 0x6d91, 0xec93, 0x2f96, 0xae94, 0x31be, 0xb0bc, 0x73b9, 0xf2bb, 0xb5b0, 0x34b2, 0xf7b7, 0x76b5, 0x79a1, 0xf8a3, 0x3ba6, 0xbaa4, 0xfdaf, 0x7cad, 0xbfa8, 0x3eaa, 0x0101, 0x8003, 0x4306, 0xc204, 0x850f, 0x040d, 0xc708, 0x460a, 0x491e, 0xc81c, 0x0b19, 0x8a1b, 0xcd10, 0x4c12, 0x8f17, 0x0e15, 0x913f, 0x103d, 0xd338, 0x523a, 0x1531, 0x9433, 0x5736, 0xd634, 0xd920, 0x5822, 0x9b27, 0x1a25, 0x5d2e, 0xdc2c, 0x1f29, 0x9e2b, 0x617e, 0xe07c, 0x2379, 0xa27b, 0xe570, 0x6472, 0xa777, 0x2675, 0x2961, 0xa863, 0x6b66, 0xea64, 0xad6f, 0x2c6d, 0xef68, 0x6e6a, 0xf140, 0x7042, 0xb347, 0x3245, 0x754e, 0xf44c, 0x3749, 0xb64b, 0xb95f, 0x385d, 0xfb58, 0x7a5a, 0x3d51, 0xbc53, 0x7f56, 0xfe54, ], [ 0x0000, 0xc100, 0xc203, 0x0303, 0xc405, 0x0505, 0x0606, 0xc706, 0xc809, 0x0909, 0x0a0a, 0xcb0a, 0x0c0c, 0xcd0c, 0xce0f, 0x0f0f, 0xd011, 0x1111, 0x1212, 0xd312, 0x1414, 0xd514, 0xd617, 0x1717, 0x1818, 0xd918, 0xda1b, 0x1b1b, 0xdc1d, 0x1d1d, 0x1e1e, 0xdf1e, 0xe021, 0x2121, 0x2222, 0xe322, 0x2424, 0xe524, 0xe627, 0x2727, 0x2828, 0xe928, 0xea2b, 0x2b2b, 0xec2d, 0x2d2d, 0x2e2e, 0xef2e, 0x3030, 0xf130, 0xf233, 0x3333, 0xf435, 0x3535, 0x3636, 0xf736, 0xf839, 0x3939, 0x3a3a, 0xfb3a, 0x3c3c, 0xfd3c, 0xfe3f, 0x3f3f, 0x8041, 0x4141, 0x4242, 0x8342, 0x4444, 0x8544, 0x8647, 0x4747, 0x4848, 0x8948, 0x8a4b, 0x4b4b, 0x8c4d, 0x4d4d, 0x4e4e, 0x8f4e, 0x5050, 0x9150, 0x9253, 0x5353, 0x9455, 0x5555, 0x5656, 0x9756, 0x9859, 0x5959, 0x5a5a, 0x9b5a, 0x5c5c, 0x9d5c, 0x9e5f, 0x5f5f, 0x6060, 0xa160, 0xa263, 0x6363, 0xa465, 0x6565, 0x6666, 0xa766, 0xa869, 0x6969, 0x6a6a, 0xab6a, 0x6c6c, 0xad6c, 0xae6f, 0x6f6f, 0xb071, 0x7171, 0x7272, 0xb372, 0x7474, 0xb574, 0xb677, 0x7777, 0x7878, 0xb978, 0xba7b, 0x7b7b, 0xbc7d, 0x7d7d, 0x7e7e, 0xbf7e, 0x4081, 0x8181, 0x8282, 0x4382, 0x8484, 0x4584, 0x4687, 0x8787, 0x8888, 0x4988, 0x4a8b, 0x8b8b, 0x4c8d, 0x8d8d, 0x8e8e, 0x4f8e, 0x9090, 0x5190, 0x5293, 0x9393, 0x5495, 0x9595, 0x9696, 0x5796, 0x5899, 0x9999, 0x9a9a, 0x5b9a, 0x9c9c, 0x5d9c, 0x5e9f, 0x9f9f, 0xa0a0, 0x61a0, 0x62a3, 0xa3a3, 0x64a5, 0xa5a5, 0xa6a6, 0x67a6, 0x68a9, 0xa9a9, 0xaaaa, 0x6baa, 0xacac, 0x6dac, 0x6eaf, 0xafaf, 0x70b1, 0xb1b1, 0xb2b2, 0x73b2, 0xb4b4, 0x75b4, 0x76b7, 0xb7b7, 0xb8b8, 0x79b8, 0x7abb, 0xbbbb, 0x7cbd, 0xbdbd, 0xbebe, 0x7fbe, 0xc0c0, 0x01c0, 0x02c3, 0xc3c3, 0x04c5, 0xc5c5, 0xc6c6, 0x07c6, 0x08c9, 0xc9c9, 0xcaca, 0x0bca, 0xcccc, 0x0dcc, 0x0ecf, 0xcfcf, 0x10d1, 0xd1d1, 0xd2d2, 0x13d2, 0xd4d4, 0x15d4, 0x16d7, 0xd7d7, 0xd8d8, 0x19d8, 0x1adb, 0xdbdb, 0x1cdd, 0xdddd, 0xdede, 0x1fde, 0x20e1, 0xe1e1, 0xe2e2, 0x23e2, 0xe4e4, 0x25e4, 0x26e7, 0xe7e7, 0xe8e8, 0x29e8, 0x2aeb, 0xebeb, 0x2ced, 0xeded, 0xeeee, 0x2fee, 0xf0f0, 0x31f0, 0x32f3, 0xf3f3, 0x34f5, 0xf5f5, 0xf6f6, 0x37f6, 0x38f9, 0xf9f9, 0xfafa, 0x3bfa, 0xfcfc, 0x3dfc, 0x3eff, 0xffff, ], [ 0x0000, 0x00c1, 0x0182, 0x0143, 0x0304, 0x03c5, 0x0286, 0x0247, 0x0608, 0x06c9, 0x078a, 0x074b, 0x050c, 0x05cd, 0x048e, 0x044f, 0x0c10, 0x0cd1, 0x0d92, 0x0d53, 0x0f14, 0x0fd5, 0x0e96, 0x0e57, 0x0a18, 0x0ad9, 0x0b9a, 0x0b5b, 0x091c, 0x09dd, 0x089e, 0x085f, 0x1820, 0x18e1, 0x19a2, 0x1963, 0x1b24, 0x1be5, 0x1aa6, 0x1a67, 0x1e28, 0x1ee9, 0x1faa, 0x1f6b, 0x1d2c, 0x1ded, 0x1cae, 0x1c6f, 0x1430, 0x14f1, 0x15b2, 0x1573, 0x1734, 0x17f5, 0x16b6, 0x1677, 0x1238, 0x12f9, 0x13ba, 0x137b, 0x113c, 0x11fd, 0x10be, 0x107f, 0x3040, 0x3081, 0x31c2, 0x3103, 0x3344, 0x3385, 0x32c6, 0x3207, 0x3648, 0x3689, 0x37ca, 0x370b, 0x354c, 0x358d, 0x34ce, 0x340f, 0x3c50, 0x3c91, 0x3dd2, 0x3d13, 0x3f54, 0x3f95, 0x3ed6, 0x3e17, 0x3a58, 0x3a99, 0x3bda, 0x3b1b, 0x395c, 0x399d, 0x38de, 0x381f, 0x2860, 0x28a1, 0x29e2, 0x2923, 0x2b64, 0x2ba5, 0x2ae6, 0x2a27, 0x2e68, 0x2ea9, 0x2fea, 0x2f2b, 0x2d6c, 0x2dad, 0x2cee, 0x2c2f, 0x2470, 0x24b1, 0x25f2, 0x2533, 0x2774, 0x27b5, 0x26f6, 0x2637, 0x2278, 0x22b9, 0x23fa, 0x233b, 0x217c, 0x21bd, 0x20fe, 0x203f, 0x6080, 0x6041, 0x6102, 0x61c3, 0x6384, 0x6345, 0x6206, 0x62c7, 0x6688, 0x6649, 0x670a, 0x67cb, 0x658c, 0x654d, 0x640e, 0x64cf, 0x6c90, 0x6c51, 0x6d12, 0x6dd3, 0x6f94, 0x6f55, 0x6e16, 0x6ed7, 0x6a98, 0x6a59, 0x6b1a, 0x6bdb, 0x699c, 0x695d, 0x681e, 0x68df, 0x78a0, 0x7861, 0x7922, 0x79e3, 0x7ba4, 0x7b65, 0x7a26, 0x7ae7, 0x7ea8, 0x7e69, 0x7f2a, 0x7feb, 0x7dac, 0x7d6d, 0x7c2e, 0x7cef, 0x74b0, 0x7471, 0x7532, 0x75f3, 0x77b4, 0x7775, 0x7636, 0x76f7, 0x72b8, 0x7279, 0x733a, 0x73fb, 0x71bc, 0x717d, 0x703e, 0x70ff, 0x50c0, 0x5001, 0x5142, 0x5183, 0x53c4, 0x5305, 0x5246, 0x5287, 0x56c8, 0x5609, 0x574a, 0x578b, 0x55cc, 0x550d, 0x544e, 0x548f, 0x5cd0, 0x5c11, 0x5d52, 0x5d93, 0x5fd4, 0x5f15, 0x5e56, 0x5e97, 0x5ad8, 0x5a19, 0x5b5a, 0x5b9b, 0x59dc, 0x591d, 0x585e, 0x589f, 0x48e0, 0x4821, 0x4962, 0x49a3, 0x4be4, 0x4b25, 0x4a66, 0x4aa7, 0x4ee8, 0x4e29, 0x4f6a, 0x4fab, 0x4dec, 0x4d2d, 0x4c6e, 0x4caf, 0x44f0, 0x4431, 0x4572, 0x45b3, 0x47f4, 0x4735, 0x4676, 0x46b7, 0x42f8, 0x4239, 0x437a, 0x43bb, 0x41fc, 0x413d, 0x407e, 0x40bf, ], [ 0x0000, 0x90c1, 0x6181, 0xf140, 0xc302, 0x53c3, 0xa283, 0x3242, 0xc607, 0x56c6, 0xa786, 0x3747, 0x0505, 0x95c4, 0x6484, 0xf445, 0xcc0d, 0x5ccc, 0xad8c, 0x3d4d, 0x0f0f, 0x9fce, 0x6e8e, 0xfe4f, 0x0a0a, 0x9acb, 0x6b8b, 0xfb4a, 0xc908, 0x59c9, 0xa889, 0x3848, 0xd819, 0x48d8, 0xb998, 0x2959, 0x1b1b, 0x8bda, 0x7a9a, 0xea5b, 0x1e1e, 0x8edf, 0x7f9f, 0xef5e, 0xdd1c, 0x4ddd, 0xbc9d, 0x2c5c, 0x1414, 0x84d5, 0x7595, 0xe554, 0xd716, 0x47d7, 0xb697, 0x2656, 0xd213, 0x42d2, 0xb392, 0x2353, 0x1111, 0x81d0, 0x7090, 0xe051, 0xf031, 0x60f0, 0x91b0, 0x0171, 0x3333, 0xa3f2, 0x52b2, 0xc273, 0x3636, 0xa6f7, 0x57b7, 0xc776, 0xf534, 0x65f5, 0x94b5, 0x0474, 0x3c3c, 0xacfd, 0x5dbd, 0xcd7c, 0xff3e, 0x6fff, 0x9ebf, 0x0e7e, 0xfa3b, 0x6afa, 0x9bba, 0x0b7b, 0x3939, 0xa9f8, 0x58b8, 0xc879, 0x2828, 0xb8e9, 0x49a9, 0xd968, 0xeb2a, 0x7beb, 0x8aab, 0x1a6a, 0xee2f, 0x7eee, 0x8fae, 0x1f6f, 0x2d2d, 0xbdec, 0x4cac, 0xdc6d, 0xe425, 0x74e4, 0x85a4, 0x1565, 0x2727, 0xb7e6, 0x46a6, 0xd667, 0x2222, 0xb2e3, 0x43a3, 0xd362, 0xe120, 0x71e1, 0x80a1, 0x1060, 0xa061, 0x30a0, 0xc1e0, 0x5121, 0x6363, 0xf3a2, 0x02e2, 0x9223, 0x6666, 0xf6a7, 0x07e7, 0x9726, 0xa564, 0x35a5, 0xc4e5, 0x5424, 0x6c6c, 0xfcad, 0x0ded, 0x9d2c, 0xaf6e, 0x3faf, 0xceef, 0x5e2e, 0xaa6b, 0x3aaa, 0xcbea, 0x5b2b, 0x6969, 0xf9a8, 0x08e8, 0x9829, 0x7878, 0xe8b9, 0x19f9, 0x8938, 0xbb7a, 0x2bbb, 0xdafb, 0x4a3a, 0xbe7f, 0x2ebe, 0xdffe, 0x4f3f, 0x7d7d, 0xedbc, 0x1cfc, 0x8c3d, 0xb475, 0x24b4, 0xd5f4, 0x4535, 0x7777, 0xe7b6, 0x16f6, 0x8637, 0x7272, 0xe2b3, 0x13f3, 0x8332, 0xb170, 0x21b1, 0xd0f1, 0x4030, 0x5050, 0xc091, 0x31d1, 0xa110, 0x9352, 0x0393, 0xf2d3, 0x6212, 0x9657, 0x0696, 0xf7d6, 0x6717, 0x5555, 0xc594, 0x34d4, 0xa415, 0x9c5d, 0x0c9c, 0xfddc, 0x6d1d, 0x5f5f, 0xcf9e, 0x3ede, 0xae1f, 0x5a5a, 0xca9b, 0x3bdb, 0xab1a, 0x9958, 0x0999, 0xf8d9, 0x6818, 0x8849, 0x1888, 0xe9c8, 0x7909, 0x4b4b, 0xdb8a, 0x2aca, 0xba0b, 0x4e4e, 0xde8f, 0x2fcf, 0xbf0e, 0x8d4c, 0x1d8d, 0xeccd, 0x7c0c, 0x4444, 0xd485, 0x25c5, 0xb504, 0x8746, 0x1787, 0xe6c7, 0x7606, 0x8243, 0x1282, 0xe3c2, 0x7303, 0x4141, 0xd180, 0x20c0, 0xb001, ], ]; pub static CRC16_MCRF4XX_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78, ], [ 0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70, 0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29, 0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333, 0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b, 0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272, 0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe, 0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6, 0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff, 0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5, 0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d, 0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04, 0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4, 0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc, 0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45, 0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f, 0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37, 0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e, 0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412, 0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b, 0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93, 0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49, 0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0, 0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8, 0xcc70, 0xe618, 0xffc0, ], [ 0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a, 0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28, 0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b, 0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d, 0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077, 0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa, 0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5, 0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6, 0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5, 0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32, 0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a, 0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388, 0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7, 0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567, 0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6, 0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510, 0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938, 0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327, 0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f, 0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9, 0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78, 0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8, 0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997, 0x734b, 0x9c2f, 0xc6f3, ], [ 0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae, 0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6, 0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53, 0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46, 0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768, 0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c, 0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183, 0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237, 0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092, 0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b, 0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d, 0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3, 0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c, 0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac, 0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1, 0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4, 0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32, 0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e, 0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878, 0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d, 0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10, 0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90, 0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f, 0xfca4, 0xd969, 0xc5d2, ], [ 0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8, 0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214, 0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091, 0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d, 0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49, 0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66, 0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612, 0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be, 0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b, 0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7, 0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3, 0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799, 0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed, 0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71, 0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4, 0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038, 0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c, 0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23, 0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37, 0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db, 0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e, 0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2, 0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896, 0xe3d2, 0xfe1e, 0xf55a, ], [ 0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e, 0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637, 0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560, 0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845, 0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a, 0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa, 0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325, 0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0, 0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7, 0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e, 0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459, 0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df, 0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00, 0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261, 0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e, 0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b, 0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c, 0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4, 0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3, 0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6, 0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9, 0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488, 0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157, 0xf57c, 0xf901, 0xfd2a, ], [ 0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957, 0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a, 0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383, 0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501, 0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87, 0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3, 0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c, 0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7, 0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e, 0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca, 0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0, 0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73, 0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c, 0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed, 0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8, 0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a, 0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900, 0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8, 0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2, 0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250, 0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55, 0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884, 0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb, 0xb91e, 0x1170, 0x8ea5, ], [ 0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3, 0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19, 0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0, 0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c, 0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039, 0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e, 0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93, 0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287, 0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e, 0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc, 0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5, 0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132, 0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef, 0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99, 0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc, 0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0, 0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9, 0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972, 0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b, 0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207, 0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552, 0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224, 0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9, 0xf946, 0x7396, 0xf229, ], [ 0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430, 0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c, 0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739, 0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4, 0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2, 0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e, 0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c, 0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015, 0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0, 0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88, 0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104, 0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0, 0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02, 0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974, 0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b, 0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6, 0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a, 0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac, 0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20, 0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed, 0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192, 0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4, 0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36, 0x27cb, 0xf1cc, 0xbc31, ], [ 0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167, 0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9, 0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5, 0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5, 0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635, 0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c, 0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce, 0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc, 0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580, 0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c, 0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5, 0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f, 0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d, 0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa, 0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf, 0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f, 0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76, 0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36, 0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df, 0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f, 0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea, 0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d, 0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df, 0x78f8, 0x0c91, 0x20b6, ], [ 0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788, 0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81, 0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a, 0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093, 0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8, 0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894, 0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa, 0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6, 0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad, 0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1, 0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260, 0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8, 0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6, 0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65, 0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4, 0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd, 0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c, 0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da, 0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b, 0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42, 0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3, 0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940, 0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e, 0x7bbf, 0x850c, 0xd09d, ], [ 0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857, 0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb, 0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0, 0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2, 0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5, 0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235, 0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa, 0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020, 0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b, 0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f, 0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4, 0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e, 0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1, 0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1, 0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006, 0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04, 0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff, 0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983, 0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78, 0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a, 0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd, 0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d, 0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852, 0x4d07, 0xcae9, 0x4fbc, ], [ 0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632, 0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9, 0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0, 0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f, 0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e, 0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc, 0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d, 0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2, 0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab, 0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880, 0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149, 0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855, 0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624, 0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7, 0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6, 0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629, 0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0, 0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea, 0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23, 0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc, 0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd, 0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e, 0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f, 0x74f2, 0x7a05, 0x7fa8, ], [ 0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7, 0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84, 0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf, 0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2, 0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05, 0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85, 0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5, 0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f, 0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04, 0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0, 0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64, 0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0, 0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0, 0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180, 0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8, 0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85, 0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701, 0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2, 0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366, 0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b, 0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63, 0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833, 0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03, 0xd4e9, 0x57d7, 0x293d, ], [ 0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126, 0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277, 0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9, 0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5, 0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0, 0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398, 0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279, 0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991, 0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f, 0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a, 0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd, 0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b, 0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea, 0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9, 0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15, 0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319, 0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e, 0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454, 0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623, 0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f, 0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3, 0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0, 0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231, 0x7a1b, 0xa265, 0xea4f, ], [ 0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5, 0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa, 0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01, 0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4, 0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da, 0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812, 0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4, 0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9, 0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932, 0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5, 0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f, 0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34, 0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882, 0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49, 0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776, 0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93, 0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69, 0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465, 0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f, 0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a, 0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545, 0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e, 0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038, 0xae28, 0x3409, 0xba19, ], ]; pub static CRC16_MODBUS_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040, ], [ 0x0000, 0x9001, 0x6001, 0xf000, 0xc002, 0x5003, 0xa003, 0x3002, 0xc007, 0x5006, 0xa006, 0x3007, 0x0005, 0x9004, 0x6004, 0xf005, 0xc00d, 0x500c, 0xa00c, 0x300d, 0x000f, 0x900e, 0x600e, 0xf00f, 0x000a, 0x900b, 0x600b, 0xf00a, 0xc008, 0x5009, 0xa009, 0x3008, 0xc019, 0x5018, 0xa018, 0x3019, 0x001b, 0x901a, 0x601a, 0xf01b, 0x001e, 0x901f, 0x601f, 0xf01e, 0xc01c, 0x501d, 0xa01d, 0x301c, 0x0014, 0x9015, 0x6015, 0xf014, 0xc016, 0x5017, 0xa017, 0x3016, 0xc013, 0x5012, 0xa012, 0x3013, 0x0011, 0x9010, 0x6010, 0xf011, 0xc031, 0x5030, 0xa030, 0x3031, 0x0033, 0x9032, 0x6032, 0xf033, 0x0036, 0x9037, 0x6037, 0xf036, 0xc034, 0x5035, 0xa035, 0x3034, 0x003c, 0x903d, 0x603d, 0xf03c, 0xc03e, 0x503f, 0xa03f, 0x303e, 0xc03b, 0x503a, 0xa03a, 0x303b, 0x0039, 0x9038, 0x6038, 0xf039, 0x0028, 0x9029, 0x6029, 0xf028, 0xc02a, 0x502b, 0xa02b, 0x302a, 0xc02f, 0x502e, 0xa02e, 0x302f, 0x002d, 0x902c, 0x602c, 0xf02d, 0xc025, 0x5024, 0xa024, 0x3025, 0x0027, 0x9026, 0x6026, 0xf027, 0x0022, 0x9023, 0x6023, 0xf022, 0xc020, 0x5021, 0xa021, 0x3020, 0xc061, 0x5060, 0xa060, 0x3061, 0x0063, 0x9062, 0x6062, 0xf063, 0x0066, 0x9067, 0x6067, 0xf066, 0xc064, 0x5065, 0xa065, 0x3064, 0x006c, 0x906d, 0x606d, 0xf06c, 0xc06e, 0x506f, 0xa06f, 0x306e, 0xc06b, 0x506a, 0xa06a, 0x306b, 0x0069, 0x9068, 0x6068, 0xf069, 0x0078, 0x9079, 0x6079, 0xf078, 0xc07a, 0x507b, 0xa07b, 0x307a, 0xc07f, 0x507e, 0xa07e, 0x307f, 0x007d, 0x907c, 0x607c, 0xf07d, 0xc075, 0x5074, 0xa074, 0x3075, 0x0077, 0x9076, 0x6076, 0xf077, 0x0072, 0x9073, 0x6073, 0xf072, 0xc070, 0x5071, 0xa071, 0x3070, 0x0050, 0x9051, 0x6051, 0xf050, 0xc052, 0x5053, 0xa053, 0x3052, 0xc057, 0x5056, 0xa056, 0x3057, 0x0055, 0x9054, 0x6054, 0xf055, 0xc05d, 0x505c, 0xa05c, 0x305d, 0x005f, 0x905e, 0x605e, 0xf05f, 0x005a, 0x905b, 0x605b, 0xf05a, 0xc058, 0x5059, 0xa059, 0x3058, 0xc049, 0x5048, 0xa048, 0x3049, 0x004b, 0x904a, 0x604a, 0xf04b, 0x004e, 0x904f, 0x604f, 0xf04e, 0xc04c, 0x504d, 0xa04d, 0x304c, 0x0044, 0x9045, 0x6045, 0xf044, 0xc046, 0x5047, 0xa047, 0x3046, 0xc043, 0x5042, 0xa042, 0x3043, 0x0041, 0x9040, 0x6040, 0xf041, ], [ 0x0000, 0xc051, 0xc0a1, 0x00f0, 0xc141, 0x0110, 0x01e0, 0xc1b1, 0xc281, 0x02d0, 0x0220, 0xc271, 0x03c0, 0xc391, 0xc361, 0x0330, 0xc501, 0x0550, 0x05a0, 0xc5f1, 0x0440, 0xc411, 0xc4e1, 0x04b0, 0x0780, 0xc7d1, 0xc721, 0x0770, 0xc6c1, 0x0690, 0x0660, 0xc631, 0xca01, 0x0a50, 0x0aa0, 0xcaf1, 0x0b40, 0xcb11, 0xcbe1, 0x0bb0, 0x0880, 0xc8d1, 0xc821, 0x0870, 0xc9c1, 0x0990, 0x0960, 0xc931, 0x0f00, 0xcf51, 0xcfa1, 0x0ff0, 0xce41, 0x0e10, 0x0ee0, 0xceb1, 0xcd81, 0x0dd0, 0x0d20, 0xcd71, 0x0cc0, 0xcc91, 0xcc61, 0x0c30, 0xd401, 0x1450, 0x14a0, 0xd4f1, 0x1540, 0xd511, 0xd5e1, 0x15b0, 0x1680, 0xd6d1, 0xd621, 0x1670, 0xd7c1, 0x1790, 0x1760, 0xd731, 0x1100, 0xd151, 0xd1a1, 0x11f0, 0xd041, 0x1010, 0x10e0, 0xd0b1, 0xd381, 0x13d0, 0x1320, 0xd371, 0x12c0, 0xd291, 0xd261, 0x1230, 0x1e00, 0xde51, 0xdea1, 0x1ef0, 0xdf41, 0x1f10, 0x1fe0, 0xdfb1, 0xdc81, 0x1cd0, 0x1c20, 0xdc71, 0x1dc0, 0xdd91, 0xdd61, 0x1d30, 0xdb01, 0x1b50, 0x1ba0, 0xdbf1, 0x1a40, 0xda11, 0xdae1, 0x1ab0, 0x1980, 0xd9d1, 0xd921, 0x1970, 0xd8c1, 0x1890, 0x1860, 0xd831, 0xe801, 0x2850, 0x28a0, 0xe8f1, 0x2940, 0xe911, 0xe9e1, 0x29b0, 0x2a80, 0xead1, 0xea21, 0x2a70, 0xebc1, 0x2b90, 0x2b60, 0xeb31, 0x2d00, 0xed51, 0xeda1, 0x2df0, 0xec41, 0x2c10, 0x2ce0, 0xecb1, 0xef81, 0x2fd0, 0x2f20, 0xef71, 0x2ec0, 0xee91, 0xee61, 0x2e30, 0x2200, 0xe251, 0xe2a1, 0x22f0, 0xe341, 0x2310, 0x23e0, 0xe3b1, 0xe081, 0x20d0, 0x2020, 0xe071, 0x21c0, 0xe191, 0xe161, 0x2130, 0xe701, 0x2750, 0x27a0, 0xe7f1, 0x2640, 0xe611, 0xe6e1, 0x26b0, 0x2580, 0xe5d1, 0xe521, 0x2570, 0xe4c1, 0x2490, 0x2460, 0xe431, 0x3c00, 0xfc51, 0xfca1, 0x3cf0, 0xfd41, 0x3d10, 0x3de0, 0xfdb1, 0xfe81, 0x3ed0, 0x3e20, 0xfe71, 0x3fc0, 0xff91, 0xff61, 0x3f30, 0xf901, 0x3950, 0x39a0, 0xf9f1, 0x3840, 0xf811, 0xf8e1, 0x38b0, 0x3b80, 0xfbd1, 0xfb21, 0x3b70, 0xfac1, 0x3a90, 0x3a60, 0xfa31, 0xf601, 0x3650, 0x36a0, 0xf6f1, 0x3740, 0xf711, 0xf7e1, 0x37b0, 0x3480, 0xf4d1, 0xf421, 0x3470, 0xf5c1, 0x3590, 0x3560, 0xf531, 0x3300, 0xf351, 0xf3a1, 0x33f0, 0xf241, 0x3210, 0x32e0, 0xf2b1, 0xf181, 0x31d0, 0x3120, 0xf171, 0x30c0, 0xf091, 0xf061, 0x3030, ], [ 0x0000, 0xfc01, 0xb801, 0x4400, 0x3001, 0xcc00, 0x8800, 0x7401, 0x6002, 0x9c03, 0xd803, 0x2402, 0x5003, 0xac02, 0xe802, 0x1403, 0xc004, 0x3c05, 0x7805, 0x8404, 0xf005, 0x0c04, 0x4804, 0xb405, 0xa006, 0x5c07, 0x1807, 0xe406, 0x9007, 0x6c06, 0x2806, 0xd407, 0xc00b, 0x3c0a, 0x780a, 0x840b, 0xf00a, 0x0c0b, 0x480b, 0xb40a, 0xa009, 0x5c08, 0x1808, 0xe409, 0x9008, 0x6c09, 0x2809, 0xd408, 0x000f, 0xfc0e, 0xb80e, 0x440f, 0x300e, 0xcc0f, 0x880f, 0x740e, 0x600d, 0x9c0c, 0xd80c, 0x240d, 0x500c, 0xac0d, 0xe80d, 0x140c, 0xc015, 0x3c14, 0x7814, 0x8415, 0xf014, 0x0c15, 0x4815, 0xb414, 0xa017, 0x5c16, 0x1816, 0xe417, 0x9016, 0x6c17, 0x2817, 0xd416, 0x0011, 0xfc10, 0xb810, 0x4411, 0x3010, 0xcc11, 0x8811, 0x7410, 0x6013, 0x9c12, 0xd812, 0x2413, 0x5012, 0xac13, 0xe813, 0x1412, 0x001e, 0xfc1f, 0xb81f, 0x441e, 0x301f, 0xcc1e, 0x881e, 0x741f, 0x601c, 0x9c1d, 0xd81d, 0x241c, 0x501d, 0xac1c, 0xe81c, 0x141d, 0xc01a, 0x3c1b, 0x781b, 0x841a, 0xf01b, 0x0c1a, 0x481a, 0xb41b, 0xa018, 0x5c19, 0x1819, 0xe418, 0x9019, 0x6c18, 0x2818, 0xd419, 0xc029, 0x3c28, 0x7828, 0x8429, 0xf028, 0x0c29, 0x4829, 0xb428, 0xa02b, 0x5c2a, 0x182a, 0xe42b, 0x902a, 0x6c2b, 0x282b, 0xd42a, 0x002d, 0xfc2c, 0xb82c, 0x442d, 0x302c, 0xcc2d, 0x882d, 0x742c, 0x602f, 0x9c2e, 0xd82e, 0x242f, 0x502e, 0xac2f, 0xe82f, 0x142e, 0x0022, 0xfc23, 0xb823, 0x4422, 0x3023, 0xcc22, 0x8822, 0x7423, 0x6020, 0x9c21, 0xd821, 0x2420, 0x5021, 0xac20, 0xe820, 0x1421, 0xc026, 0x3c27, 0x7827, 0x8426, 0xf027, 0x0c26, 0x4826, 0xb427, 0xa024, 0x5c25, 0x1825, 0xe424, 0x9025, 0x6c24, 0x2824, 0xd425, 0x003c, 0xfc3d, 0xb83d, 0x443c, 0x303d, 0xcc3c, 0x883c, 0x743d, 0x603e, 0x9c3f, 0xd83f, 0x243e, 0x503f, 0xac3e, 0xe83e, 0x143f, 0xc038, 0x3c39, 0x7839, 0x8438, 0xf039, 0x0c38, 0x4838, 0xb439, 0xa03a, 0x5c3b, 0x183b, 0xe43a, 0x903b, 0x6c3a, 0x283a, 0xd43b, 0xc037, 0x3c36, 0x7836, 0x8437, 0xf036, 0x0c37, 0x4837, 0xb436, 0xa035, 0x5c34, 0x1834, 0xe435, 0x9034, 0x6c35, 0x2835, 0xd434, 0x0033, 0xfc32, 0xb832, 0x4433, 0x3032, 0xcc33, 0x8833, 0x7432, 0x6031, 0x9c30, 0xd830, 0x2431, 0x5030, 0xac31, 0xe831, 0x1430, ], [ 0x0000, 0xc03d, 0xc079, 0x0044, 0xc0f1, 0x00cc, 0x0088, 0xc0b5, 0xc1e1, 0x01dc, 0x0198, 0xc1a5, 0x0110, 0xc12d, 0xc169, 0x0154, 0xc3c1, 0x03fc, 0x03b8, 0xc385, 0x0330, 0xc30d, 0xc349, 0x0374, 0x0220, 0xc21d, 0xc259, 0x0264, 0xc2d1, 0x02ec, 0x02a8, 0xc295, 0xc781, 0x07bc, 0x07f8, 0xc7c5, 0x0770, 0xc74d, 0xc709, 0x0734, 0x0660, 0xc65d, 0xc619, 0x0624, 0xc691, 0x06ac, 0x06e8, 0xc6d5, 0x0440, 0xc47d, 0xc439, 0x0404, 0xc4b1, 0x048c, 0x04c8, 0xc4f5, 0xc5a1, 0x059c, 0x05d8, 0xc5e5, 0x0550, 0xc56d, 0xc529, 0x0514, 0xcf01, 0x0f3c, 0x0f78, 0xcf45, 0x0ff0, 0xcfcd, 0xcf89, 0x0fb4, 0x0ee0, 0xcedd, 0xce99, 0x0ea4, 0xce11, 0x0e2c, 0x0e68, 0xce55, 0x0cc0, 0xccfd, 0xccb9, 0x0c84, 0xcc31, 0x0c0c, 0x0c48, 0xcc75, 0xcd21, 0x0d1c, 0x0d58, 0xcd65, 0x0dd0, 0xcded, 0xcda9, 0x0d94, 0x0880, 0xc8bd, 0xc8f9, 0x08c4, 0xc871, 0x084c, 0x0808, 0xc835, 0xc961, 0x095c, 0x0918, 0xc925, 0x0990, 0xc9ad, 0xc9e9, 0x09d4, 0xcb41, 0x0b7c, 0x0b38, 0xcb05, 0x0bb0, 0xcb8d, 0xcbc9, 0x0bf4, 0x0aa0, 0xca9d, 0xcad9, 0x0ae4, 0xca51, 0x0a6c, 0x0a28, 0xca15, 0xde01, 0x1e3c, 0x1e78, 0xde45, 0x1ef0, 0xdecd, 0xde89, 0x1eb4, 0x1fe0, 0xdfdd, 0xdf99, 0x1fa4, 0xdf11, 0x1f2c, 0x1f68, 0xdf55, 0x1dc0, 0xddfd, 0xddb9, 0x1d84, 0xdd31, 0x1d0c, 0x1d48, 0xdd75, 0xdc21, 0x1c1c, 0x1c58, 0xdc65, 0x1cd0, 0xdced, 0xdca9, 0x1c94, 0x1980, 0xd9bd, 0xd9f9, 0x19c4, 0xd971, 0x194c, 0x1908, 0xd935, 0xd861, 0x185c, 0x1818, 0xd825, 0x1890, 0xd8ad, 0xd8e9, 0x18d4, 0xda41, 0x1a7c, 0x1a38, 0xda05, 0x1ab0, 0xda8d, 0xdac9, 0x1af4, 0x1ba0, 0xdb9d, 0xdbd9, 0x1be4, 0xdb51, 0x1b6c, 0x1b28, 0xdb15, 0x1100, 0xd13d, 0xd179, 0x1144, 0xd1f1, 0x11cc, 0x1188, 0xd1b5, 0xd0e1, 0x10dc, 0x1098, 0xd0a5, 0x1010, 0xd02d, 0xd069, 0x1054, 0xd2c1, 0x12fc, 0x12b8, 0xd285, 0x1230, 0xd20d, 0xd249, 0x1274, 0x1320, 0xd31d, 0xd359, 0x1364, 0xd3d1, 0x13ec, 0x13a8, 0xd395, 0xd681, 0x16bc, 0x16f8, 0xd6c5, 0x1670, 0xd64d, 0xd609, 0x1634, 0x1760, 0xd75d, 0xd719, 0x1724, 0xd791, 0x17ac, 0x17e8, 0xd7d5, 0x1540, 0xd57d, 0xd539, 0x1504, 0xd5b1, 0x158c, 0x15c8, 0xd5f5, 0xd4a1, 0x149c, 0x14d8, 0xd4e5, 0x1450, 0xd46d, 0xd429, 0x1414, ], [ 0x0000, 0xd101, 0xe201, 0x3300, 0x8401, 0x5500, 0x6600, 0xb701, 0x4801, 0x9900, 0xaa00, 0x7b01, 0xcc00, 0x1d01, 0x2e01, 0xff00, 0x9002, 0x4103, 0x7203, 0xa302, 0x1403, 0xc502, 0xf602, 0x2703, 0xd803, 0x0902, 0x3a02, 0xeb03, 0x5c02, 0x8d03, 0xbe03, 0x6f02, 0x6007, 0xb106, 0x8206, 0x5307, 0xe406, 0x3507, 0x0607, 0xd706, 0x2806, 0xf907, 0xca07, 0x1b06, 0xac07, 0x7d06, 0x4e06, 0x9f07, 0xf005, 0x2104, 0x1204, 0xc305, 0x7404, 0xa505, 0x9605, 0x4704, 0xb804, 0x6905, 0x5a05, 0x8b04, 0x3c05, 0xed04, 0xde04, 0x0f05, 0xc00e, 0x110f, 0x220f, 0xf30e, 0x440f, 0x950e, 0xa60e, 0x770f, 0x880f, 0x590e, 0x6a0e, 0xbb0f, 0x0c0e, 0xdd0f, 0xee0f, 0x3f0e, 0x500c, 0x810d, 0xb20d, 0x630c, 0xd40d, 0x050c, 0x360c, 0xe70d, 0x180d, 0xc90c, 0xfa0c, 0x2b0d, 0x9c0c, 0x4d0d, 0x7e0d, 0xaf0c, 0xa009, 0x7108, 0x4208, 0x9309, 0x2408, 0xf509, 0xc609, 0x1708, 0xe808, 0x3909, 0x0a09, 0xdb08, 0x6c09, 0xbd08, 0x8e08, 0x5f09, 0x300b, 0xe10a, 0xd20a, 0x030b, 0xb40a, 0x650b, 0x560b, 0x870a, 0x780a, 0xa90b, 0x9a0b, 0x4b0a, 0xfc0b, 0x2d0a, 0x1e0a, 0xcf0b, 0xc01f, 0x111e, 0x221e, 0xf31f, 0x441e, 0x951f, 0xa61f, 0x771e, 0x881e, 0x591f, 0x6a1f, 0xbb1e, 0x0c1f, 0xdd1e, 0xee1e, 0x3f1f, 0x501d, 0x811c, 0xb21c, 0x631d, 0xd41c, 0x051d, 0x361d, 0xe71c, 0x181c, 0xc91d, 0xfa1d, 0x2b1c, 0x9c1d, 0x4d1c, 0x7e1c, 0xaf1d, 0xa018, 0x7119, 0x4219, 0x9318, 0x2419, 0xf518, 0xc618, 0x1719, 0xe819, 0x3918, 0x0a18, 0xdb19, 0x6c18, 0xbd19, 0x8e19, 0x5f18, 0x301a, 0xe11b, 0xd21b, 0x031a, 0xb41b, 0x651a, 0x561a, 0x871b, 0x781b, 0xa91a, 0x9a1a, 0x4b1b, 0xfc1a, 0x2d1b, 0x1e1b, 0xcf1a, 0x0011, 0xd110, 0xe210, 0x3311, 0x8410, 0x5511, 0x6611, 0xb710, 0x4810, 0x9911, 0xaa11, 0x7b10, 0xcc11, 0x1d10, 0x2e10, 0xff11, 0x9013, 0x4112, 0x7212, 0xa313, 0x1412, 0xc513, 0xf613, 0x2712, 0xd812, 0x0913, 0x3a13, 0xeb12, 0x5c13, 0x8d12, 0xbe12, 0x6f13, 0x6016, 0xb117, 0x8217, 0x5316, 0xe417, 0x3516, 0x0616, 0xd717, 0x2817, 0xf916, 0xca16, 0x1b17, 0xac16, 0x7d17, 0x4e17, 0x9f16, 0xf014, 0x2115, 0x1215, 0xc314, 0x7415, 0xa514, 0x9614, 0x4715, 0xb815, 0x6914, 0x5a14, 0x8b15, 0x3c14, 0xed15, 0xde15, 0x0f14, ], [ 0x0000, 0xc010, 0xc023, 0x0033, 0xc045, 0x0055, 0x0066, 0xc076, 0xc089, 0x0099, 0x00aa, 0xc0ba, 0x00cc, 0xc0dc, 0xc0ef, 0x00ff, 0xc111, 0x0101, 0x0132, 0xc122, 0x0154, 0xc144, 0xc177, 0x0167, 0x0198, 0xc188, 0xc1bb, 0x01ab, 0xc1dd, 0x01cd, 0x01fe, 0xc1ee, 0xc221, 0x0231, 0x0202, 0xc212, 0x0264, 0xc274, 0xc247, 0x0257, 0x02a8, 0xc2b8, 0xc28b, 0x029b, 0xc2ed, 0x02fd, 0x02ce, 0xc2de, 0x0330, 0xc320, 0xc313, 0x0303, 0xc375, 0x0365, 0x0356, 0xc346, 0xc3b9, 0x03a9, 0x039a, 0xc38a, 0x03fc, 0xc3ec, 0xc3df, 0x03cf, 0xc441, 0x0451, 0x0462, 0xc472, 0x0404, 0xc414, 0xc427, 0x0437, 0x04c8, 0xc4d8, 0xc4eb, 0x04fb, 0xc48d, 0x049d, 0x04ae, 0xc4be, 0x0550, 0xc540, 0xc573, 0x0563, 0xc515, 0x0505, 0x0536, 0xc526, 0xc5d9, 0x05c9, 0x05fa, 0xc5ea, 0x059c, 0xc58c, 0xc5bf, 0x05af, 0x0660, 0xc670, 0xc643, 0x0653, 0xc625, 0x0635, 0x0606, 0xc616, 0xc6e9, 0x06f9, 0x06ca, 0xc6da, 0x06ac, 0xc6bc, 0xc68f, 0x069f, 0xc771, 0x0761, 0x0752, 0xc742, 0x0734, 0xc724, 0xc717, 0x0707, 0x07f8, 0xc7e8, 0xc7db, 0x07cb, 0xc7bd, 0x07ad, 0x079e, 0xc78e, 0xc881, 0x0891, 0x08a2, 0xc8b2, 0x08c4, 0xc8d4, 0xc8e7, 0x08f7, 0x0808, 0xc818, 0xc82b, 0x083b, 0xc84d, 0x085d, 0x086e, 0xc87e, 0x0990, 0xc980, 0xc9b3, 0x09a3, 0xc9d5, 0x09c5, 0x09f6, 0xc9e6, 0xc919, 0x0909, 0x093a, 0xc92a, 0x095c, 0xc94c, 0xc97f, 0x096f, 0x0aa0, 0xcab0, 0xca83, 0x0a93, 0xcae5, 0x0af5, 0x0ac6, 0xcad6, 0xca29, 0x0a39, 0x0a0a, 0xca1a, 0x0a6c, 0xca7c, 0xca4f, 0x0a5f, 0xcbb1, 0x0ba1, 0x0b92, 0xcb82, 0x0bf4, 0xcbe4, 0xcbd7, 0x0bc7, 0x0b38, 0xcb28, 0xcb1b, 0x0b0b, 0xcb7d, 0x0b6d, 0x0b5e, 0xcb4e, 0x0cc0, 0xccd0, 0xcce3, 0x0cf3, 0xcc85, 0x0c95, 0x0ca6, 0xccb6, 0xcc49, 0x0c59, 0x0c6a, 0xcc7a, 0x0c0c, 0xcc1c, 0xcc2f, 0x0c3f, 0xcdd1, 0x0dc1, 0x0df2, 0xcde2, 0x0d94, 0xcd84, 0xcdb7, 0x0da7, 0x0d58, 0xcd48, 0xcd7b, 0x0d6b, 0xcd1d, 0x0d0d, 0x0d3e, 0xcd2e, 0xcee1, 0x0ef1, 0x0ec2, 0xced2, 0x0ea4, 0xceb4, 0xce87, 0x0e97, 0x0e68, 0xce78, 0xce4b, 0x0e5b, 0xce2d, 0x0e3d, 0x0e0e, 0xce1e, 0x0ff0, 0xcfe0, 0xcfd3, 0x0fc3, 0xcfb5, 0x0fa5, 0x0f96, 0xcf86, 0xcf79, 0x0f69, 0x0f5a, 0xcf4a, 0x0f3c, 0xcf2c, 0xcf1f, 0x0f0f, ], [ 0x0000, 0xccc1, 0xd981, 0x1540, 0xf301, 0x3fc0, 0x2a80, 0xe641, 0xa601, 0x6ac0, 0x7f80, 0xb341, 0x5500, 0x99c1, 0x8c81, 0x4040, 0x0c01, 0xc0c0, 0xd580, 0x1941, 0xff00, 0x33c1, 0x2681, 0xea40, 0xaa00, 0x66c1, 0x7381, 0xbf40, 0x5901, 0x95c0, 0x8080, 0x4c41, 0x1802, 0xd4c3, 0xc183, 0x0d42, 0xeb03, 0x27c2, 0x3282, 0xfe43, 0xbe03, 0x72c2, 0x6782, 0xab43, 0x4d02, 0x81c3, 0x9483, 0x5842, 0x1403, 0xd8c2, 0xcd82, 0x0143, 0xe702, 0x2bc3, 0x3e83, 0xf242, 0xb202, 0x7ec3, 0x6b83, 0xa742, 0x4103, 0x8dc2, 0x9882, 0x5443, 0x3004, 0xfcc5, 0xe985, 0x2544, 0xc305, 0x0fc4, 0x1a84, 0xd645, 0x9605, 0x5ac4, 0x4f84, 0x8345, 0x6504, 0xa9c5, 0xbc85, 0x7044, 0x3c05, 0xf0c4, 0xe584, 0x2945, 0xcf04, 0x03c5, 0x1685, 0xda44, 0x9a04, 0x56c5, 0x4385, 0x8f44, 0x6905, 0xa5c4, 0xb084, 0x7c45, 0x2806, 0xe4c7, 0xf187, 0x3d46, 0xdb07, 0x17c6, 0x0286, 0xce47, 0x8e07, 0x42c6, 0x5786, 0x9b47, 0x7d06, 0xb1c7, 0xa487, 0x6846, 0x2407, 0xe8c6, 0xfd86, 0x3147, 0xd706, 0x1bc7, 0x0e87, 0xc246, 0x8206, 0x4ec7, 0x5b87, 0x9746, 0x7107, 0xbdc6, 0xa886, 0x6447, 0x6008, 0xacc9, 0xb989, 0x7548, 0x9309, 0x5fc8, 0x4a88, 0x8649, 0xc609, 0x0ac8, 0x1f88, 0xd349, 0x3508, 0xf9c9, 0xec89, 0x2048, 0x6c09, 0xa0c8, 0xb588, 0x7949, 0x9f08, 0x53c9, 0x4689, 0x8a48, 0xca08, 0x06c9, 0x1389, 0xdf48, 0x3909, 0xf5c8, 0xe088, 0x2c49, 0x780a, 0xb4cb, 0xa18b, 0x6d4a, 0x8b0b, 0x47ca, 0x528a, 0x9e4b, 0xde0b, 0x12ca, 0x078a, 0xcb4b, 0x2d0a, 0xe1cb, 0xf48b, 0x384a, 0x740b, 0xb8ca, 0xad8a, 0x614b, 0x870a, 0x4bcb, 0x5e8b, 0x924a, 0xd20a, 0x1ecb, 0x0b8b, 0xc74a, 0x210b, 0xedca, 0xf88a, 0x344b, 0x500c, 0x9ccd, 0x898d, 0x454c, 0xa30d, 0x6fcc, 0x7a8c, 0xb64d, 0xf60d, 0x3acc, 0x2f8c, 0xe34d, 0x050c, 0xc9cd, 0xdc8d, 0x104c, 0x5c0d, 0x90cc, 0x858c, 0x494d, 0xaf0c, 0x63cd, 0x768d, 0xba4c, 0xfa0c, 0x36cd, 0x238d, 0xef4c, 0x090d, 0xc5cc, 0xd08c, 0x1c4d, 0x480e, 0x84cf, 0x918f, 0x5d4e, 0xbb0f, 0x77ce, 0x628e, 0xae4f, 0xee0f, 0x22ce, 0x378e, 0xfb4f, 0x1d0e, 0xd1cf, 0xc48f, 0x084e, 0x440f, 0x88ce, 0x9d8e, 0x514f, 0xb70e, 0x7bcf, 0x6e8f, 0xa24e, 0xe20e, 0x2ecf, 0x3b8f, 0xf74e, 0x110f, 0xddce, 0xc88e, 0x044f, ], [ 0x0000, 0x900d, 0x6019, 0xf014, 0xc032, 0x503f, 0xa02b, 0x3026, 0xc067, 0x506a, 0xa07e, 0x3073, 0x0055, 0x9058, 0x604c, 0xf041, 0xc0cd, 0x50c0, 0xa0d4, 0x30d9, 0x00ff, 0x90f2, 0x60e6, 0xf0eb, 0x00aa, 0x90a7, 0x60b3, 0xf0be, 0xc098, 0x5095, 0xa081, 0x308c, 0xc199, 0x5194, 0xa180, 0x318d, 0x01ab, 0x91a6, 0x61b2, 0xf1bf, 0x01fe, 0x91f3, 0x61e7, 0xf1ea, 0xc1cc, 0x51c1, 0xa1d5, 0x31d8, 0x0154, 0x9159, 0x614d, 0xf140, 0xc166, 0x516b, 0xa17f, 0x3172, 0xc133, 0x513e, 0xa12a, 0x3127, 0x0101, 0x910c, 0x6118, 0xf115, 0xc331, 0x533c, 0xa328, 0x3325, 0x0303, 0x930e, 0x631a, 0xf317, 0x0356, 0x935b, 0x634f, 0xf342, 0xc364, 0x5369, 0xa37d, 0x3370, 0x03fc, 0x93f1, 0x63e5, 0xf3e8, 0xc3ce, 0x53c3, 0xa3d7, 0x33da, 0xc39b, 0x5396, 0xa382, 0x338f, 0x03a9, 0x93a4, 0x63b0, 0xf3bd, 0x02a8, 0x92a5, 0x62b1, 0xf2bc, 0xc29a, 0x5297, 0xa283, 0x328e, 0xc2cf, 0x52c2, 0xa2d6, 0x32db, 0x02fd, 0x92f0, 0x62e4, 0xf2e9, 0xc265, 0x5268, 0xa27c, 0x3271, 0x0257, 0x925a, 0x624e, 0xf243, 0x0202, 0x920f, 0x621b, 0xf216, 0xc230, 0x523d, 0xa229, 0x3224, 0xc661, 0x566c, 0xa678, 0x3675, 0x0653, 0x965e, 0x664a, 0xf647, 0x0606, 0x960b, 0x661f, 0xf612, 0xc634, 0x5639, 0xa62d, 0x3620, 0x06ac, 0x96a1, 0x66b5, 0xf6b8, 0xc69e, 0x5693, 0xa687, 0x368a, 0xc6cb, 0x56c6, 0xa6d2, 0x36df, 0x06f9, 0x96f4, 0x66e0, 0xf6ed, 0x07f8, 0x97f5, 0x67e1, 0xf7ec, 0xc7ca, 0x57c7, 0xa7d3, 0x37de, 0xc79f, 0x5792, 0xa786, 0x378b, 0x07ad, 0x97a0, 0x67b4, 0xf7b9, 0xc735, 0x5738, 0xa72c, 0x3721, 0x0707, 0x970a, 0x671e, 0xf713, 0x0752, 0x975f, 0x674b, 0xf746, 0xc760, 0x576d, 0xa779, 0x3774, 0x0550, 0x955d, 0x6549, 0xf544, 0xc562, 0x556f, 0xa57b, 0x3576, 0xc537, 0x553a, 0xa52e, 0x3523, 0x0505, 0x9508, 0x651c, 0xf511, 0xc59d, 0x5590, 0xa584, 0x3589, 0x05af, 0x95a2, 0x65b6, 0xf5bb, 0x05fa, 0x95f7, 0x65e3, 0xf5ee, 0xc5c8, 0x55c5, 0xa5d1, 0x35dc, 0xc4c9, 0x54c4, 0xa4d0, 0x34dd, 0x04fb, 0x94f6, 0x64e2, 0xf4ef, 0x04ae, 0x94a3, 0x64b7, 0xf4ba, 0xc49c, 0x5491, 0xa485, 0x3488, 0x0404, 0x9409, 0x641d, 0xf410, 0xc436, 0x543b, 0xa42f, 0x3422, 0xc463, 0x546e, 0xa47a, 0x3477, 0x0451, 0x945c, 0x6448, 0xf445, ], [ 0x0000, 0xc551, 0xcaa1, 0x0ff0, 0xd541, 0x1010, 0x1fe0, 0xdab1, 0xea81, 0x2fd0, 0x2020, 0xe571, 0x3fc0, 0xfa91, 0xf561, 0x3030, 0x9501, 0x5050, 0x5fa0, 0x9af1, 0x4040, 0x8511, 0x8ae1, 0x4fb0, 0x7f80, 0xbad1, 0xb521, 0x7070, 0xaac1, 0x6f90, 0x6060, 0xa531, 0x6a01, 0xaf50, 0xa0a0, 0x65f1, 0xbf40, 0x7a11, 0x75e1, 0xb0b0, 0x8080, 0x45d1, 0x4a21, 0x8f70, 0x55c1, 0x9090, 0x9f60, 0x5a31, 0xff00, 0x3a51, 0x35a1, 0xf0f0, 0x2a41, 0xef10, 0xe0e0, 0x25b1, 0x1581, 0xd0d0, 0xdf20, 0x1a71, 0xc0c0, 0x0591, 0x0a61, 0xcf30, 0xd402, 0x1153, 0x1ea3, 0xdbf2, 0x0143, 0xc412, 0xcbe2, 0x0eb3, 0x3e83, 0xfbd2, 0xf422, 0x3173, 0xebc2, 0x2e93, 0x2163, 0xe432, 0x4103, 0x8452, 0x8ba2, 0x4ef3, 0x9442, 0x5113, 0x5ee3, 0x9bb2, 0xab82, 0x6ed3, 0x6123, 0xa472, 0x7ec3, 0xbb92, 0xb462, 0x7133, 0xbe03, 0x7b52, 0x74a2, 0xb1f3, 0x6b42, 0xae13, 0xa1e3, 0x64b2, 0x5482, 0x91d3, 0x9e23, 0x5b72, 0x81c3, 0x4492, 0x4b62, 0x8e33, 0x2b02, 0xee53, 0xe1a3, 0x24f2, 0xfe43, 0x3b12, 0x34e2, 0xf1b3, 0xc183, 0x04d2, 0x0b22, 0xce73, 0x14c2, 0xd193, 0xde63, 0x1b32, 0xe807, 0x2d56, 0x22a6, 0xe7f7, 0x3d46, 0xf817, 0xf7e7, 0x32b6, 0x0286, 0xc7d7, 0xc827, 0x0d76, 0xd7c7, 0x1296, 0x1d66, 0xd837, 0x7d06, 0xb857, 0xb7a7, 0x72f6, 0xa847, 0x6d16, 0x62e6, 0xa7b7, 0x9787, 0x52d6, 0x5d26, 0x9877, 0x42c6, 0x8797, 0x8867, 0x4d36, 0x8206, 0x4757, 0x48a7, 0x8df6, 0x5747, 0x9216, 0x9de6, 0x58b7, 0x6887, 0xadd6, 0xa226, 0x6777, 0xbdc6, 0x7897, 0x7767, 0xb236, 0x1707, 0xd256, 0xdda6, 0x18f7, 0xc246, 0x0717, 0x08e7, 0xcdb6, 0xfd86, 0x38d7, 0x3727, 0xf276, 0x28c7, 0xed96, 0xe266, 0x2737, 0x3c05, 0xf954, 0xf6a4, 0x33f5, 0xe944, 0x2c15, 0x23e5, 0xe6b4, 0xd684, 0x13d5, 0x1c25, 0xd974, 0x03c5, 0xc694, 0xc964, 0x0c35, 0xa904, 0x6c55, 0x63a5, 0xa6f4, 0x7c45, 0xb914, 0xb6e4, 0x73b5, 0x4385, 0x86d4, 0x8924, 0x4c75, 0x96c4, 0x5395, 0x5c65, 0x9934, 0x5604, 0x9355, 0x9ca5, 0x59f4, 0x8345, 0x4614, 0x49e4, 0x8cb5, 0xbc85, 0x79d4, 0x7624, 0xb375, 0x69c4, 0xac95, 0xa365, 0x6634, 0xc305, 0x0654, 0x09a4, 0xccf5, 0x1644, 0xd315, 0xdce5, 0x19b4, 0x2984, 0xecd5, 0xe325, 0x2674, 0xfcc5, 0x3994, 0x3664, 0xf335, ], [ 0x0000, 0xfc04, 0xb80b, 0x440f, 0x3015, 0xcc11, 0x881e, 0x741a, 0x602a, 0x9c2e, 0xd821, 0x2425, 0x503f, 0xac3b, 0xe834, 0x1430, 0xc054, 0x3c50, 0x785f, 0x845b, 0xf041, 0x0c45, 0x484a, 0xb44e, 0xa07e, 0x5c7a, 0x1875, 0xe471, 0x906b, 0x6c6f, 0x2860, 0xd464, 0xc0ab, 0x3caf, 0x78a0, 0x84a4, 0xf0be, 0x0cba, 0x48b5, 0xb4b1, 0xa081, 0x5c85, 0x188a, 0xe48e, 0x9094, 0x6c90, 0x289f, 0xd49b, 0x00ff, 0xfcfb, 0xb8f4, 0x44f0, 0x30ea, 0xccee, 0x88e1, 0x74e5, 0x60d5, 0x9cd1, 0xd8de, 0x24da, 0x50c0, 0xacc4, 0xe8cb, 0x14cf, 0xc155, 0x3d51, 0x795e, 0x855a, 0xf140, 0x0d44, 0x494b, 0xb54f, 0xa17f, 0x5d7b, 0x1974, 0xe570, 0x916a, 0x6d6e, 0x2961, 0xd565, 0x0101, 0xfd05, 0xb90a, 0x450e, 0x3114, 0xcd10, 0x891f, 0x751b, 0x612b, 0x9d2f, 0xd920, 0x2524, 0x513e, 0xad3a, 0xe935, 0x1531, 0x01fe, 0xfdfa, 0xb9f5, 0x45f1, 0x31eb, 0xcdef, 0x89e0, 0x75e4, 0x61d4, 0x9dd0, 0xd9df, 0x25db, 0x51c1, 0xadc5, 0xe9ca, 0x15ce, 0xc1aa, 0x3dae, 0x79a1, 0x85a5, 0xf1bf, 0x0dbb, 0x49b4, 0xb5b0, 0xa180, 0x5d84, 0x198b, 0xe58f, 0x9195, 0x6d91, 0x299e, 0xd59a, 0xc2a9, 0x3ead, 0x7aa2, 0x86a6, 0xf2bc, 0x0eb8, 0x4ab7, 0xb6b3, 0xa283, 0x5e87, 0x1a88, 0xe68c, 0x9296, 0x6e92, 0x2a9d, 0xd699, 0x02fd, 0xfef9, 0xbaf6, 0x46f2, 0x32e8, 0xceec, 0x8ae3, 0x76e7, 0x62d7, 0x9ed3, 0xdadc, 0x26d8, 0x52c2, 0xaec6, 0xeac9, 0x16cd, 0x0202, 0xfe06, 0xba09, 0x460d, 0x3217, 0xce13, 0x8a1c, 0x7618, 0x6228, 0x9e2c, 0xda23, 0x2627, 0x523d, 0xae39, 0xea36, 0x1632, 0xc256, 0x3e52, 0x7a5d, 0x8659, 0xf243, 0x0e47, 0x4a48, 0xb64c, 0xa27c, 0x5e78, 0x1a77, 0xe673, 0x9269, 0x6e6d, 0x2a62, 0xd666, 0x03fc, 0xfff8, 0xbbf7, 0x47f3, 0x33e9, 0xcfed, 0x8be2, 0x77e6, 0x63d6, 0x9fd2, 0xdbdd, 0x27d9, 0x53c3, 0xafc7, 0xebc8, 0x17cc, 0xc3a8, 0x3fac, 0x7ba3, 0x87a7, 0xf3bd, 0x0fb9, 0x4bb6, 0xb7b2, 0xa382, 0x5f86, 0x1b89, 0xe78d, 0x9397, 0x6f93, 0x2b9c, 0xd798, 0xc357, 0x3f53, 0x7b5c, 0x8758, 0xf342, 0x0f46, 0x4b49, 0xb74d, 0xa37d, 0x5f79, 0x1b76, 0xe772, 0x9368, 0x6f6c, 0x2b63, 0xd767, 0x0303, 0xff07, 0xbb08, 0x470c, 0x3316, 0xcf12, 0x8b1d, 0x7719, 0x6329, 0x9f2d, 0xdb22, 0x2726, 0x533c, 0xaf38, 0xeb37, 0x1733, ], [ 0x0000, 0xc3fd, 0xc7f9, 0x0404, 0xcff1, 0x0c0c, 0x0808, 0xcbf5, 0xdfe1, 0x1c1c, 0x1818, 0xdbe5, 0x1010, 0xd3ed, 0xd7e9, 0x1414, 0xffc1, 0x3c3c, 0x3838, 0xfbc5, 0x3030, 0xf3cd, 0xf7c9, 0x3434, 0x2020, 0xe3dd, 0xe7d9, 0x2424, 0xefd1, 0x2c2c, 0x2828, 0xebd5, 0xbf81, 0x7c7c, 0x7878, 0xbb85, 0x7070, 0xb38d, 0xb789, 0x7474, 0x6060, 0xa39d, 0xa799, 0x6464, 0xaf91, 0x6c6c, 0x6868, 0xab95, 0x4040, 0x83bd, 0x87b9, 0x4444, 0x8fb1, 0x4c4c, 0x4848, 0x8bb5, 0x9fa1, 0x5c5c, 0x5858, 0x9ba5, 0x5050, 0x93ad, 0x97a9, 0x5454, 0x3f01, 0xfcfc, 0xf8f8, 0x3b05, 0xf0f0, 0x330d, 0x3709, 0xf4f4, 0xe0e0, 0x231d, 0x2719, 0xe4e4, 0x2f11, 0xecec, 0xe8e8, 0x2b15, 0xc0c0, 0x033d, 0x0739, 0xc4c4, 0x0f31, 0xcccc, 0xc8c8, 0x0b35, 0x1f21, 0xdcdc, 0xd8d8, 0x1b25, 0xd0d0, 0x132d, 0x1729, 0xd4d4, 0x8080, 0x437d, 0x4779, 0x8484, 0x4f71, 0x8c8c, 0x8888, 0x4b75, 0x5f61, 0x9c9c, 0x9898, 0x5b65, 0x9090, 0x536d, 0x5769, 0x9494, 0x7f41, 0xbcbc, 0xb8b8, 0x7b45, 0xb0b0, 0x734d, 0x7749, 0xb4b4, 0xa0a0, 0x635d, 0x6759, 0xa4a4, 0x6f51, 0xacac, 0xa8a8, 0x6b55, 0x7e02, 0xbdff, 0xb9fb, 0x7a06, 0xb1f3, 0x720e, 0x760a, 0xb5f7, 0xa1e3, 0x621e, 0x661a, 0xa5e7, 0x6e12, 0xadef, 0xa9eb, 0x6a16, 0x81c3, 0x423e, 0x463a, 0x85c7, 0x4e32, 0x8dcf, 0x89cb, 0x4a36, 0x5e22, 0x9ddf, 0x99db, 0x5a26, 0x91d3, 0x522e, 0x562a, 0x95d7, 0xc183, 0x027e, 0x067a, 0xc587, 0x0e72, 0xcd8f, 0xc98b, 0x0a76, 0x1e62, 0xdd9f, 0xd99b, 0x1a66, 0xd193, 0x126e, 0x166a, 0xd597, 0x3e42, 0xfdbf, 0xf9bb, 0x3a46, 0xf1b3, 0x324e, 0x364a, 0xf5b7, 0xe1a3, 0x225e, 0x265a, 0xe5a7, 0x2e52, 0xedaf, 0xe9ab, 0x2a56, 0x4103, 0x82fe, 0x86fa, 0x4507, 0x8ef2, 0x4d0f, 0x490b, 0x8af6, 0x9ee2, 0x5d1f, 0x591b, 0x9ae6, 0x5113, 0x92ee, 0x96ea, 0x5517, 0xbec2, 0x7d3f, 0x793b, 0xbac6, 0x7133, 0xb2ce, 0xb6ca, 0x7537, 0x6123, 0xa2de, 0xa6da, 0x6527, 0xaed2, 0x6d2f, 0x692b, 0xaad6, 0xfe82, 0x3d7f, 0x397b, 0xfa86, 0x3173, 0xf28e, 0xf68a, 0x3577, 0x2163, 0xe29e, 0xe69a, 0x2567, 0xee92, 0x2d6f, 0x296b, 0xea96, 0x0143, 0xc2be, 0xc6ba, 0x0547, 0xceb2, 0x0d4f, 0x094b, 0xcab6, 0xdea2, 0x1d5f, 0x195b, 0xdaa6, 0x1153, 0xd2ae, 0xd6aa, 0x1557, ], [ 0x0000, 0x8102, 0x4207, 0xc305, 0x840e, 0x050c, 0xc609, 0x470b, 0x481f, 0xc91d, 0x0a18, 0x8b1a, 0xcc11, 0x4d13, 0x8e16, 0x0f14, 0x903e, 0x113c, 0xd239, 0x533b, 0x1430, 0x9532, 0x5637, 0xd735, 0xd821, 0x5923, 0x9a26, 0x1b24, 0x5c2f, 0xdd2d, 0x1e28, 0x9f2a, 0x607f, 0xe17d, 0x2278, 0xa37a, 0xe471, 0x6573, 0xa676, 0x2774, 0x2860, 0xa962, 0x6a67, 0xeb65, 0xac6e, 0x2d6c, 0xee69, 0x6f6b, 0xf041, 0x7143, 0xb246, 0x3344, 0x744f, 0xf54d, 0x3648, 0xb74a, 0xb85e, 0x395c, 0xfa59, 0x7b5b, 0x3c50, 0xbd52, 0x7e57, 0xff55, 0xc0fe, 0x41fc, 0x82f9, 0x03fb, 0x44f0, 0xc5f2, 0x06f7, 0x87f5, 0x88e1, 0x09e3, 0xcae6, 0x4be4, 0x0cef, 0x8ded, 0x4ee8, 0xcfea, 0x50c0, 0xd1c2, 0x12c7, 0x93c5, 0xd4ce, 0x55cc, 0x96c9, 0x17cb, 0x18df, 0x99dd, 0x5ad8, 0xdbda, 0x9cd1, 0x1dd3, 0xded6, 0x5fd4, 0xa081, 0x2183, 0xe286, 0x6384, 0x248f, 0xa58d, 0x6688, 0xe78a, 0xe89e, 0x699c, 0xaa99, 0x2b9b, 0x6c90, 0xed92, 0x2e97, 0xaf95, 0x30bf, 0xb1bd, 0x72b8, 0xf3ba, 0xb4b1, 0x35b3, 0xf6b6, 0x77b4, 0x78a0, 0xf9a2, 0x3aa7, 0xbba5, 0xfcae, 0x7dac, 0xbea9, 0x3fab, 0xc1ff, 0x40fd, 0x83f8, 0x02fa, 0x45f1, 0xc4f3, 0x07f6, 0x86f4, 0x89e0, 0x08e2, 0xcbe7, 0x4ae5, 0x0dee, 0x8cec, 0x4fe9, 0xceeb, 0x51c1, 0xd0c3, 0x13c6, 0x92c4, 0xd5cf, 0x54cd, 0x97c8, 0x16ca, 0x19de, 0x98dc, 0x5bd9, 0xdadb, 0x9dd0, 0x1cd2, 0xdfd7, 0x5ed5, 0xa180, 0x2082, 0xe387, 0x6285, 0x258e, 0xa48c, 0x6789, 0xe68b, 0xe99f, 0x689d, 0xab98, 0x2a9a, 0x6d91, 0xec93, 0x2f96, 0xae94, 0x31be, 0xb0bc, 0x73b9, 0xf2bb, 0xb5b0, 0x34b2, 0xf7b7, 0x76b5, 0x79a1, 0xf8a3, 0x3ba6, 0xbaa4, 0xfdaf, 0x7cad, 0xbfa8, 0x3eaa, 0x0101, 0x8003, 0x4306, 0xc204, 0x850f, 0x040d, 0xc708, 0x460a, 0x491e, 0xc81c, 0x0b19, 0x8a1b, 0xcd10, 0x4c12, 0x8f17, 0x0e15, 0x913f, 0x103d, 0xd338, 0x523a, 0x1531, 0x9433, 0x5736, 0xd634, 0xd920, 0x5822, 0x9b27, 0x1a25, 0x5d2e, 0xdc2c, 0x1f29, 0x9e2b, 0x617e, 0xe07c, 0x2379, 0xa27b, 0xe570, 0x6472, 0xa777, 0x2675, 0x2961, 0xa863, 0x6b66, 0xea64, 0xad6f, 0x2c6d, 0xef68, 0x6e6a, 0xf140, 0x7042, 0xb347, 0x3245, 0x754e, 0xf44c, 0x3749, 0xb64b, 0xb95f, 0x385d, 0xfb58, 0x7a5a, 0x3d51, 0xbc53, 0x7f56, 0xfe54, ], [ 0x0000, 0xc100, 0xc203, 0x0303, 0xc405, 0x0505, 0x0606, 0xc706, 0xc809, 0x0909, 0x0a0a, 0xcb0a, 0x0c0c, 0xcd0c, 0xce0f, 0x0f0f, 0xd011, 0x1111, 0x1212, 0xd312, 0x1414, 0xd514, 0xd617, 0x1717, 0x1818, 0xd918, 0xda1b, 0x1b1b, 0xdc1d, 0x1d1d, 0x1e1e, 0xdf1e, 0xe021, 0x2121, 0x2222, 0xe322, 0x2424, 0xe524, 0xe627, 0x2727, 0x2828, 0xe928, 0xea2b, 0x2b2b, 0xec2d, 0x2d2d, 0x2e2e, 0xef2e, 0x3030, 0xf130, 0xf233, 0x3333, 0xf435, 0x3535, 0x3636, 0xf736, 0xf839, 0x3939, 0x3a3a, 0xfb3a, 0x3c3c, 0xfd3c, 0xfe3f, 0x3f3f, 0x8041, 0x4141, 0x4242, 0x8342, 0x4444, 0x8544, 0x8647, 0x4747, 0x4848, 0x8948, 0x8a4b, 0x4b4b, 0x8c4d, 0x4d4d, 0x4e4e, 0x8f4e, 0x5050, 0x9150, 0x9253, 0x5353, 0x9455, 0x5555, 0x5656, 0x9756, 0x9859, 0x5959, 0x5a5a, 0x9b5a, 0x5c5c, 0x9d5c, 0x9e5f, 0x5f5f, 0x6060, 0xa160, 0xa263, 0x6363, 0xa465, 0x6565, 0x6666, 0xa766, 0xa869, 0x6969, 0x6a6a, 0xab6a, 0x6c6c, 0xad6c, 0xae6f, 0x6f6f, 0xb071, 0x7171, 0x7272, 0xb372, 0x7474, 0xb574, 0xb677, 0x7777, 0x7878, 0xb978, 0xba7b, 0x7b7b, 0xbc7d, 0x7d7d, 0x7e7e, 0xbf7e, 0x4081, 0x8181, 0x8282, 0x4382, 0x8484, 0x4584, 0x4687, 0x8787, 0x8888, 0x4988, 0x4a8b, 0x8b8b, 0x4c8d, 0x8d8d, 0x8e8e, 0x4f8e, 0x9090, 0x5190, 0x5293, 0x9393, 0x5495, 0x9595, 0x9696, 0x5796, 0x5899, 0x9999, 0x9a9a, 0x5b9a, 0x9c9c, 0x5d9c, 0x5e9f, 0x9f9f, 0xa0a0, 0x61a0, 0x62a3, 0xa3a3, 0x64a5, 0xa5a5, 0xa6a6, 0x67a6, 0x68a9, 0xa9a9, 0xaaaa, 0x6baa, 0xacac, 0x6dac, 0x6eaf, 0xafaf, 0x70b1, 0xb1b1, 0xb2b2, 0x73b2, 0xb4b4, 0x75b4, 0x76b7, 0xb7b7, 0xb8b8, 0x79b8, 0x7abb, 0xbbbb, 0x7cbd, 0xbdbd, 0xbebe, 0x7fbe, 0xc0c0, 0x01c0, 0x02c3, 0xc3c3, 0x04c5, 0xc5c5, 0xc6c6, 0x07c6, 0x08c9, 0xc9c9, 0xcaca, 0x0bca, 0xcccc, 0x0dcc, 0x0ecf, 0xcfcf, 0x10d1, 0xd1d1, 0xd2d2, 0x13d2, 0xd4d4, 0x15d4, 0x16d7, 0xd7d7, 0xd8d8, 0x19d8, 0x1adb, 0xdbdb, 0x1cdd, 0xdddd, 0xdede, 0x1fde, 0x20e1, 0xe1e1, 0xe2e2, 0x23e2, 0xe4e4, 0x25e4, 0x26e7, 0xe7e7, 0xe8e8, 0x29e8, 0x2aeb, 0xebeb, 0x2ced, 0xeded, 0xeeee, 0x2fee, 0xf0f0, 0x31f0, 0x32f3, 0xf3f3, 0x34f5, 0xf5f5, 0xf6f6, 0x37f6, 0x38f9, 0xf9f9, 0xfafa, 0x3bfa, 0xfcfc, 0x3dfc, 0x3eff, 0xffff, ], [ 0x0000, 0x00c1, 0x0182, 0x0143, 0x0304, 0x03c5, 0x0286, 0x0247, 0x0608, 0x06c9, 0x078a, 0x074b, 0x050c, 0x05cd, 0x048e, 0x044f, 0x0c10, 0x0cd1, 0x0d92, 0x0d53, 0x0f14, 0x0fd5, 0x0e96, 0x0e57, 0x0a18, 0x0ad9, 0x0b9a, 0x0b5b, 0x091c, 0x09dd, 0x089e, 0x085f, 0x1820, 0x18e1, 0x19a2, 0x1963, 0x1b24, 0x1be5, 0x1aa6, 0x1a67, 0x1e28, 0x1ee9, 0x1faa, 0x1f6b, 0x1d2c, 0x1ded, 0x1cae, 0x1c6f, 0x1430, 0x14f1, 0x15b2, 0x1573, 0x1734, 0x17f5, 0x16b6, 0x1677, 0x1238, 0x12f9, 0x13ba, 0x137b, 0x113c, 0x11fd, 0x10be, 0x107f, 0x3040, 0x3081, 0x31c2, 0x3103, 0x3344, 0x3385, 0x32c6, 0x3207, 0x3648, 0x3689, 0x37ca, 0x370b, 0x354c, 0x358d, 0x34ce, 0x340f, 0x3c50, 0x3c91, 0x3dd2, 0x3d13, 0x3f54, 0x3f95, 0x3ed6, 0x3e17, 0x3a58, 0x3a99, 0x3bda, 0x3b1b, 0x395c, 0x399d, 0x38de, 0x381f, 0x2860, 0x28a1, 0x29e2, 0x2923, 0x2b64, 0x2ba5, 0x2ae6, 0x2a27, 0x2e68, 0x2ea9, 0x2fea, 0x2f2b, 0x2d6c, 0x2dad, 0x2cee, 0x2c2f, 0x2470, 0x24b1, 0x25f2, 0x2533, 0x2774, 0x27b5, 0x26f6, 0x2637, 0x2278, 0x22b9, 0x23fa, 0x233b, 0x217c, 0x21bd, 0x20fe, 0x203f, 0x6080, 0x6041, 0x6102, 0x61c3, 0x6384, 0x6345, 0x6206, 0x62c7, 0x6688, 0x6649, 0x670a, 0x67cb, 0x658c, 0x654d, 0x640e, 0x64cf, 0x6c90, 0x6c51, 0x6d12, 0x6dd3, 0x6f94, 0x6f55, 0x6e16, 0x6ed7, 0x6a98, 0x6a59, 0x6b1a, 0x6bdb, 0x699c, 0x695d, 0x681e, 0x68df, 0x78a0, 0x7861, 0x7922, 0x79e3, 0x7ba4, 0x7b65, 0x7a26, 0x7ae7, 0x7ea8, 0x7e69, 0x7f2a, 0x7feb, 0x7dac, 0x7d6d, 0x7c2e, 0x7cef, 0x74b0, 0x7471, 0x7532, 0x75f3, 0x77b4, 0x7775, 0x7636, 0x76f7, 0x72b8, 0x7279, 0x733a, 0x73fb, 0x71bc, 0x717d, 0x703e, 0x70ff, 0x50c0, 0x5001, 0x5142, 0x5183, 0x53c4, 0x5305, 0x5246, 0x5287, 0x56c8, 0x5609, 0x574a, 0x578b, 0x55cc, 0x550d, 0x544e, 0x548f, 0x5cd0, 0x5c11, 0x5d52, 0x5d93, 0x5fd4, 0x5f15, 0x5e56, 0x5e97, 0x5ad8, 0x5a19, 0x5b5a, 0x5b9b, 0x59dc, 0x591d, 0x585e, 0x589f, 0x48e0, 0x4821, 0x4962, 0x49a3, 0x4be4, 0x4b25, 0x4a66, 0x4aa7, 0x4ee8, 0x4e29, 0x4f6a, 0x4fab, 0x4dec, 0x4d2d, 0x4c6e, 0x4caf, 0x44f0, 0x4431, 0x4572, 0x45b3, 0x47f4, 0x4735, 0x4676, 0x46b7, 0x42f8, 0x4239, 0x437a, 0x43bb, 0x41fc, 0x413d, 0x407e, 0x40bf, ], [ 0x0000, 0x90c1, 0x6181, 0xf140, 0xc302, 0x53c3, 0xa283, 0x3242, 0xc607, 0x56c6, 0xa786, 0x3747, 0x0505, 0x95c4, 0x6484, 0xf445, 0xcc0d, 0x5ccc, 0xad8c, 0x3d4d, 0x0f0f, 0x9fce, 0x6e8e, 0xfe4f, 0x0a0a, 0x9acb, 0x6b8b, 0xfb4a, 0xc908, 0x59c9, 0xa889, 0x3848, 0xd819, 0x48d8, 0xb998, 0x2959, 0x1b1b, 0x8bda, 0x7a9a, 0xea5b, 0x1e1e, 0x8edf, 0x7f9f, 0xef5e, 0xdd1c, 0x4ddd, 0xbc9d, 0x2c5c, 0x1414, 0x84d5, 0x7595, 0xe554, 0xd716, 0x47d7, 0xb697, 0x2656, 0xd213, 0x42d2, 0xb392, 0x2353, 0x1111, 0x81d0, 0x7090, 0xe051, 0xf031, 0x60f0, 0x91b0, 0x0171, 0x3333, 0xa3f2, 0x52b2, 0xc273, 0x3636, 0xa6f7, 0x57b7, 0xc776, 0xf534, 0x65f5, 0x94b5, 0x0474, 0x3c3c, 0xacfd, 0x5dbd, 0xcd7c, 0xff3e, 0x6fff, 0x9ebf, 0x0e7e, 0xfa3b, 0x6afa, 0x9bba, 0x0b7b, 0x3939, 0xa9f8, 0x58b8, 0xc879, 0x2828, 0xb8e9, 0x49a9, 0xd968, 0xeb2a, 0x7beb, 0x8aab, 0x1a6a, 0xee2f, 0x7eee, 0x8fae, 0x1f6f, 0x2d2d, 0xbdec, 0x4cac, 0xdc6d, 0xe425, 0x74e4, 0x85a4, 0x1565, 0x2727, 0xb7e6, 0x46a6, 0xd667, 0x2222, 0xb2e3, 0x43a3, 0xd362, 0xe120, 0x71e1, 0x80a1, 0x1060, 0xa061, 0x30a0, 0xc1e0, 0x5121, 0x6363, 0xf3a2, 0x02e2, 0x9223, 0x6666, 0xf6a7, 0x07e7, 0x9726, 0xa564, 0x35a5, 0xc4e5, 0x5424, 0x6c6c, 0xfcad, 0x0ded, 0x9d2c, 0xaf6e, 0x3faf, 0xceef, 0x5e2e, 0xaa6b, 0x3aaa, 0xcbea, 0x5b2b, 0x6969, 0xf9a8, 0x08e8, 0x9829, 0x7878, 0xe8b9, 0x19f9, 0x8938, 0xbb7a, 0x2bbb, 0xdafb, 0x4a3a, 0xbe7f, 0x2ebe, 0xdffe, 0x4f3f, 0x7d7d, 0xedbc, 0x1cfc, 0x8c3d, 0xb475, 0x24b4, 0xd5f4, 0x4535, 0x7777, 0xe7b6, 0x16f6, 0x8637, 0x7272, 0xe2b3, 0x13f3, 0x8332, 0xb170, 0x21b1, 0xd0f1, 0x4030, 0x5050, 0xc091, 0x31d1, 0xa110, 0x9352, 0x0393, 0xf2d3, 0x6212, 0x9657, 0x0696, 0xf7d6, 0x6717, 0x5555, 0xc594, 0x34d4, 0xa415, 0x9c5d, 0x0c9c, 0xfddc, 0x6d1d, 0x5f5f, 0xcf9e, 0x3ede, 0xae1f, 0x5a5a, 0xca9b, 0x3bdb, 0xab1a, 0x9958, 0x0999, 0xf8d9, 0x6818, 0x8849, 0x1888, 0xe9c8, 0x7909, 0x4b4b, 0xdb8a, 0x2aca, 0xba0b, 0x4e4e, 0xde8f, 0x2fcf, 0xbf0e, 0x8d4c, 0x1d8d, 0xeccd, 0x7c0c, 0x4444, 0xd485, 0x25c5, 0xb504, 0x8746, 0x1787, 0xe6c7, 0x7606, 0x8243, 0x1282, 0xe3c2, 0x7303, 0x4141, 0xd180, 0x20c0, 0xb001, ], ]; pub static CRC16_NRSC_5_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x35a4, 0x6b48, 0x5eec, 0xd690, 0xe334, 0xbdd8, 0x887c, 0x0d01, 0x38a5, 0x6649, 0x53ed, 0xdb91, 0xee35, 0xb0d9, 0x857d, 0x1a02, 0x2fa6, 0x714a, 0x44ee, 0xcc92, 0xf936, 0xa7da, 0x927e, 0x1703, 0x22a7, 0x7c4b, 0x49ef, 0xc193, 0xf437, 0xaadb, 0x9f7f, 0x3404, 0x01a0, 0x5f4c, 0x6ae8, 0xe294, 0xd730, 0x89dc, 0xbc78, 0x3905, 0x0ca1, 0x524d, 0x67e9, 0xef95, 0xda31, 0x84dd, 0xb179, 0x2e06, 0x1ba2, 0x454e, 0x70ea, 0xf896, 0xcd32, 0x93de, 0xa67a, 0x2307, 0x16a3, 0x484f, 0x7deb, 0xf597, 0xc033, 0x9edf, 0xab7b, 0x6808, 0x5dac, 0x0340, 0x36e4, 0xbe98, 0x8b3c, 0xd5d0, 0xe074, 0x6509, 0x50ad, 0x0e41, 0x3be5, 0xb399, 0x863d, 0xd8d1, 0xed75, 0x720a, 0x47ae, 0x1942, 0x2ce6, 0xa49a, 0x913e, 0xcfd2, 0xfa76, 0x7f0b, 0x4aaf, 0x1443, 0x21e7, 0xa99b, 0x9c3f, 0xc2d3, 0xf777, 0x5c0c, 0x69a8, 0x3744, 0x02e0, 0x8a9c, 0xbf38, 0xe1d4, 0xd470, 0x510d, 0x64a9, 0x3a45, 0x0fe1, 0x879d, 0xb239, 0xecd5, 0xd971, 0x460e, 0x73aa, 0x2d46, 0x18e2, 0x909e, 0xa53a, 0xfbd6, 0xce72, 0x4b0f, 0x7eab, 0x2047, 0x15e3, 0x9d9f, 0xa83b, 0xf6d7, 0xc373, 0xd010, 0xe5b4, 0xbb58, 0x8efc, 0x0680, 0x3324, 0x6dc8, 0x586c, 0xdd11, 0xe8b5, 0xb659, 0x83fd, 0x0b81, 0x3e25, 0x60c9, 0x556d, 0xca12, 0xffb6, 0xa15a, 0x94fe, 0x1c82, 0x2926, 0x77ca, 0x426e, 0xc713, 0xf2b7, 0xac5b, 0x99ff, 0x1183, 0x2427, 0x7acb, 0x4f6f, 0xe414, 0xd1b0, 0x8f5c, 0xbaf8, 0x3284, 0x0720, 0x59cc, 0x6c68, 0xe915, 0xdcb1, 0x825d, 0xb7f9, 0x3f85, 0x0a21, 0x54cd, 0x6169, 0xfe16, 0xcbb2, 0x955e, 0xa0fa, 0x2886, 0x1d22, 0x43ce, 0x766a, 0xf317, 0xc6b3, 0x985f, 0xadfb, 0x2587, 0x1023, 0x4ecf, 0x7b6b, 0xb818, 0x8dbc, 0xd350, 0xe6f4, 0x6e88, 0x5b2c, 0x05c0, 0x3064, 0xb519, 0x80bd, 0xde51, 0xebf5, 0x6389, 0x562d, 0x08c1, 0x3d65, 0xa21a, 0x97be, 0xc952, 0xfcf6, 0x748a, 0x412e, 0x1fc2, 0x2a66, 0xaf1b, 0x9abf, 0xc453, 0xf1f7, 0x798b, 0x4c2f, 0x12c3, 0x2767, 0x8c1c, 0xb9b8, 0xe754, 0xd2f0, 0x5a8c, 0x6f28, 0x31c4, 0x0460, 0x811d, 0xb4b9, 0xea55, 0xdff1, 0x578d, 0x6229, 0x3cc5, 0x0961, 0x961e, 0xa3ba, 0xfd56, 0xc8f2, 0x408e, 0x752a, 0x2bc6, 0x1e62, 0x9b1f, 0xaebb, 0xf057, 0xc5f3, 0x4d8f, 0x782b, 0x26c7, 0x1363, ], [ 0x0000, 0x32b1, 0x6562, 0x57d3, 0xcac4, 0xf875, 0xafa6, 0x9d17, 0x35a9, 0x0718, 0x50cb, 0x627a, 0xff6d, 0xcddc, 0x9a0f, 0xa8be, 0x6b52, 0x59e3, 0x0e30, 0x3c81, 0xa196, 0x9327, 0xc4f4, 0xf645, 0x5efb, 0x6c4a, 0x3b99, 0x0928, 0x943f, 0xa68e, 0xf15d, 0xc3ec, 0xd6a4, 0xe415, 0xb3c6, 0x8177, 0x1c60, 0x2ed1, 0x7902, 0x4bb3, 0xe30d, 0xd1bc, 0x866f, 0xb4de, 0x29c9, 0x1b78, 0x4cab, 0x7e1a, 0xbdf6, 0x8f47, 0xd894, 0xea25, 0x7732, 0x4583, 0x1250, 0x20e1, 0x885f, 0xbaee, 0xed3d, 0xdf8c, 0x429b, 0x702a, 0x27f9, 0x1548, 0x0d69, 0x3fd8, 0x680b, 0x5aba, 0xc7ad, 0xf51c, 0xa2cf, 0x907e, 0x38c0, 0x0a71, 0x5da2, 0x6f13, 0xf204, 0xc0b5, 0x9766, 0xa5d7, 0x663b, 0x548a, 0x0359, 0x31e8, 0xacff, 0x9e4e, 0xc99d, 0xfb2c, 0x5392, 0x6123, 0x36f0, 0x0441, 0x9956, 0xabe7, 0xfc34, 0xce85, 0xdbcd, 0xe97c, 0xbeaf, 0x8c1e, 0x1109, 0x23b8, 0x746b, 0x46da, 0xee64, 0xdcd5, 0x8b06, 0xb9b7, 0x24a0, 0x1611, 0x41c2, 0x7373, 0xb09f, 0x822e, 0xd5fd, 0xe74c, 0x7a5b, 0x48ea, 0x1f39, 0x2d88, 0x8536, 0xb787, 0xe054, 0xd2e5, 0x4ff2, 0x7d43, 0x2a90, 0x1821, 0x1ad2, 0x2863, 0x7fb0, 0x4d01, 0xd016, 0xe2a7, 0xb574, 0x87c5, 0x2f7b, 0x1dca, 0x4a19, 0x78a8, 0xe5bf, 0xd70e, 0x80dd, 0xb26c, 0x7180, 0x4331, 0x14e2, 0x2653, 0xbb44, 0x89f5, 0xde26, 0xec97, 0x4429, 0x7698, 0x214b, 0x13fa, 0x8eed, 0xbc5c, 0xeb8f, 0xd93e, 0xcc76, 0xfec7, 0xa914, 0x9ba5, 0x06b2, 0x3403, 0x63d0, 0x5161, 0xf9df, 0xcb6e, 0x9cbd, 0xae0c, 0x331b, 0x01aa, 0x5679, 0x64c8, 0xa724, 0x9595, 0xc246, 0xf0f7, 0x6de0, 0x5f51, 0x0882, 0x3a33, 0x928d, 0xa03c, 0xf7ef, 0xc55e, 0x5849, 0x6af8, 0x3d2b, 0x0f9a, 0x17bb, 0x250a, 0x72d9, 0x4068, 0xdd7f, 0xefce, 0xb81d, 0x8aac, 0x2212, 0x10a3, 0x4770, 0x75c1, 0xe8d6, 0xda67, 0x8db4, 0xbf05, 0x7ce9, 0x4e58, 0x198b, 0x2b3a, 0xb62d, 0x849c, 0xd34f, 0xe1fe, 0x4940, 0x7bf1, 0x2c22, 0x1e93, 0x8384, 0xb135, 0xe6e6, 0xd457, 0xc11f, 0xf3ae, 0xa47d, 0x96cc, 0x0bdb, 0x396a, 0x6eb9, 0x5c08, 0xf4b6, 0xc607, 0x91d4, 0xa365, 0x3e72, 0x0cc3, 0x5b10, 0x69a1, 0xaa4d, 0x98fc, 0xcf2f, 0xfd9e, 0x6089, 0x5238, 0x05eb, 0x375a, 0x9fe4, 0xad55, 0xfa86, 0xc837, 0x5520, 0x6791, 0x3042, 0x02f3, ], [ 0x0000, 0xcb80, 0x3721, 0xfca1, 0x6e42, 0xa5c2, 0x5963, 0x92e3, 0xdc84, 0x1704, 0xeba5, 0x2025, 0xb2c6, 0x7946, 0x85e7, 0x4e67, 0x1929, 0xd2a9, 0x2e08, 0xe588, 0x776b, 0xbceb, 0x404a, 0x8bca, 0xc5ad, 0x0e2d, 0xf28c, 0x390c, 0xabef, 0x606f, 0x9cce, 0x574e, 0x3252, 0xf9d2, 0x0573, 0xcef3, 0x5c10, 0x9790, 0x6b31, 0xa0b1, 0xeed6, 0x2556, 0xd9f7, 0x1277, 0x8094, 0x4b14, 0xb7b5, 0x7c35, 0x2b7b, 0xe0fb, 0x1c5a, 0xd7da, 0x4539, 0x8eb9, 0x7218, 0xb998, 0xf7ff, 0x3c7f, 0xc0de, 0x0b5e, 0x99bd, 0x523d, 0xae9c, 0x651c, 0x64a4, 0xaf24, 0x5385, 0x9805, 0x0ae6, 0xc166, 0x3dc7, 0xf647, 0xb820, 0x73a0, 0x8f01, 0x4481, 0xd662, 0x1de2, 0xe143, 0x2ac3, 0x7d8d, 0xb60d, 0x4aac, 0x812c, 0x13cf, 0xd84f, 0x24ee, 0xef6e, 0xa109, 0x6a89, 0x9628, 0x5da8, 0xcf4b, 0x04cb, 0xf86a, 0x33ea, 0x56f6, 0x9d76, 0x61d7, 0xaa57, 0x38b4, 0xf334, 0x0f95, 0xc415, 0x8a72, 0x41f2, 0xbd53, 0x76d3, 0xe430, 0x2fb0, 0xd311, 0x1891, 0x4fdf, 0x845f, 0x78fe, 0xb37e, 0x219d, 0xea1d, 0x16bc, 0xdd3c, 0x935b, 0x58db, 0xa47a, 0x6ffa, 0xfd19, 0x3699, 0xca38, 0x01b8, 0xc948, 0x02c8, 0xfe69, 0x35e9, 0xa70a, 0x6c8a, 0x902b, 0x5bab, 0x15cc, 0xde4c, 0x22ed, 0xe96d, 0x7b8e, 0xb00e, 0x4caf, 0x872f, 0xd061, 0x1be1, 0xe740, 0x2cc0, 0xbe23, 0x75a3, 0x8902, 0x4282, 0x0ce5, 0xc765, 0x3bc4, 0xf044, 0x62a7, 0xa927, 0x5586, 0x9e06, 0xfb1a, 0x309a, 0xcc3b, 0x07bb, 0x9558, 0x5ed8, 0xa279, 0x69f9, 0x279e, 0xec1e, 0x10bf, 0xdb3f, 0x49dc, 0x825c, 0x7efd, 0xb57d, 0xe233, 0x29b3, 0xd512, 0x1e92, 0x8c71, 0x47f1, 0xbb50, 0x70d0, 0x3eb7, 0xf537, 0x0996, 0xc216, 0x50f5, 0x9b75, 0x67d4, 0xac54, 0xadec, 0x666c, 0x9acd, 0x514d, 0xc3ae, 0x082e, 0xf48f, 0x3f0f, 0x7168, 0xbae8, 0x4649, 0x8dc9, 0x1f2a, 0xd4aa, 0x280b, 0xe38b, 0xb4c5, 0x7f45, 0x83e4, 0x4864, 0xda87, 0x1107, 0xeda6, 0x2626, 0x6841, 0xa3c1, 0x5f60, 0x94e0, 0x0603, 0xcd83, 0x3122, 0xfaa2, 0x9fbe, 0x543e, 0xa89f, 0x631f, 0xf1fc, 0x3a7c, 0xc6dd, 0x0d5d, 0x433a, 0x88ba, 0x741b, 0xbf9b, 0x2d78, 0xe6f8, 0x1a59, 0xd1d9, 0x8697, 0x4d17, 0xb1b6, 0x7a36, 0xe8d5, 0x2355, 0xdff4, 0x1474, 0x5a13, 0x9193, 0x6d32, 0xa6b2, 0x3451, 0xffd1, 0x0370, 0xc8f0, ], [ 0x0000, 0xd0db, 0x0197, 0xd14c, 0x032e, 0xd3f5, 0x02b9, 0xd262, 0x065c, 0xd687, 0x07cb, 0xd710, 0x0572, 0xd5a9, 0x04e5, 0xd43e, 0x0cb8, 0xdc63, 0x0d2f, 0xddf4, 0x0f96, 0xdf4d, 0x0e01, 0xdeda, 0x0ae4, 0xda3f, 0x0b73, 0xdba8, 0x09ca, 0xd911, 0x085d, 0xd886, 0x1970, 0xc9ab, 0x18e7, 0xc83c, 0x1a5e, 0xca85, 0x1bc9, 0xcb12, 0x1f2c, 0xcff7, 0x1ebb, 0xce60, 0x1c02, 0xccd9, 0x1d95, 0xcd4e, 0x15c8, 0xc513, 0x145f, 0xc484, 0x16e6, 0xc63d, 0x1771, 0xc7aa, 0x1394, 0xc34f, 0x1203, 0xc2d8, 0x10ba, 0xc061, 0x112d, 0xc1f6, 0x32e0, 0xe23b, 0x3377, 0xe3ac, 0x31ce, 0xe115, 0x3059, 0xe082, 0x34bc, 0xe467, 0x352b, 0xe5f0, 0x3792, 0xe749, 0x3605, 0xe6de, 0x3e58, 0xee83, 0x3fcf, 0xef14, 0x3d76, 0xedad, 0x3ce1, 0xec3a, 0x3804, 0xe8df, 0x3993, 0xe948, 0x3b2a, 0xebf1, 0x3abd, 0xea66, 0x2b90, 0xfb4b, 0x2a07, 0xfadc, 0x28be, 0xf865, 0x2929, 0xf9f2, 0x2dcc, 0xfd17, 0x2c5b, 0xfc80, 0x2ee2, 0xfe39, 0x2f75, 0xffae, 0x2728, 0xf7f3, 0x26bf, 0xf664, 0x2406, 0xf4dd, 0x2591, 0xf54a, 0x2174, 0xf1af, 0x20e3, 0xf038, 0x225a, 0xf281, 0x23cd, 0xf316, 0x65c0, 0xb51b, 0x6457, 0xb48c, 0x66ee, 0xb635, 0x6779, 0xb7a2, 0x639c, 0xb347, 0x620b, 0xb2d0, 0x60b2, 0xb069, 0x6125, 0xb1fe, 0x6978, 0xb9a3, 0x68ef, 0xb834, 0x6a56, 0xba8d, 0x6bc1, 0xbb1a, 0x6f24, 0xbfff, 0x6eb3, 0xbe68, 0x6c0a, 0xbcd1, 0x6d9d, 0xbd46, 0x7cb0, 0xac6b, 0x7d27, 0xadfc, 0x7f9e, 0xaf45, 0x7e09, 0xaed2, 0x7aec, 0xaa37, 0x7b7b, 0xaba0, 0x79c2, 0xa919, 0x7855, 0xa88e, 0x7008, 0xa0d3, 0x719f, 0xa144, 0x7326, 0xa3fd, 0x72b1, 0xa26a, 0x7654, 0xa68f, 0x77c3, 0xa718, 0x757a, 0xa5a1, 0x74ed, 0xa436, 0x5720, 0x87fb, 0x56b7, 0x866c, 0x540e, 0x84d5, 0x5599, 0x8542, 0x517c, 0x81a7, 0x50eb, 0x8030, 0x5252, 0x8289, 0x53c5, 0x831e, 0x5b98, 0x8b43, 0x5a0f, 0x8ad4, 0x58b6, 0x886d, 0x5921, 0x89fa, 0x5dc4, 0x8d1f, 0x5c53, 0x8c88, 0x5eea, 0x8e31, 0x5f7d, 0x8fa6, 0x4e50, 0x9e8b, 0x4fc7, 0x9f1c, 0x4d7e, 0x9da5, 0x4ce9, 0x9c32, 0x480c, 0x98d7, 0x499b, 0x9940, 0x4b22, 0x9bf9, 0x4ab5, 0x9a6e, 0x42e8, 0x9233, 0x437f, 0x93a4, 0x41c6, 0x911d, 0x4051, 0x908a, 0x44b4, 0x946f, 0x4523, 0x95f8, 0x479a, 0x9741, 0x460d, 0x96d6, ], [ 0x0000, 0xf127, 0x426f, 0xb348, 0x84de, 0x75f9, 0xc6b1, 0x3796, 0xa99d, 0x58ba, 0xebf2, 0x1ad5, 0x2d43, 0xdc64, 0x6f2c, 0x9e0b, 0xf31b, 0x023c, 0xb174, 0x4053, 0x77c5, 0x86e2, 0x35aa, 0xc48d, 0x5a86, 0xaba1, 0x18e9, 0xe9ce, 0xde58, 0x2f7f, 0x9c37, 0x6d10, 0x4617, 0xb730, 0x0478, 0xf55f, 0xc2c9, 0x33ee, 0x80a6, 0x7181, 0xef8a, 0x1ead, 0xade5, 0x5cc2, 0x6b54, 0x9a73, 0x293b, 0xd81c, 0xb50c, 0x442b, 0xf763, 0x0644, 0x31d2, 0xc0f5, 0x73bd, 0x829a, 0x1c91, 0xedb6, 0x5efe, 0xafd9, 0x984f, 0x6968, 0xda20, 0x2b07, 0x8c2e, 0x7d09, 0xce41, 0x3f66, 0x08f0, 0xf9d7, 0x4a9f, 0xbbb8, 0x25b3, 0xd494, 0x67dc, 0x96fb, 0xa16d, 0x504a, 0xe302, 0x1225, 0x7f35, 0x8e12, 0x3d5a, 0xcc7d, 0xfbeb, 0x0acc, 0xb984, 0x48a3, 0xd6a8, 0x278f, 0x94c7, 0x65e0, 0x5276, 0xa351, 0x1019, 0xe13e, 0xca39, 0x3b1e, 0x8856, 0x7971, 0x4ee7, 0xbfc0, 0x0c88, 0xfdaf, 0x63a4, 0x9283, 0x21cb, 0xd0ec, 0xe77a, 0x165d, 0xa515, 0x5432, 0x3922, 0xc805, 0x7b4d, 0x8a6a, 0xbdfc, 0x4cdb, 0xff93, 0x0eb4, 0x90bf, 0x6198, 0xd2d0, 0x23f7, 0x1461, 0xe546, 0x560e, 0xa729, 0xb87d, 0x495a, 0xfa12, 0x0b35, 0x3ca3, 0xcd84, 0x7ecc, 0x8feb, 0x11e0, 0xe0c7, 0x538f, 0xa2a8, 0x953e, 0x6419, 0xd751, 0x2676, 0x4b66, 0xba41, 0x0909, 0xf82e, 0xcfb8, 0x3e9f, 0x8dd7, 0x7cf0, 0xe2fb, 0x13dc, 0xa094, 0x51b3, 0x6625, 0x9702, 0x244a, 0xd56d, 0xfe6a, 0x0f4d, 0xbc05, 0x4d22, 0x7ab4, 0x8b93, 0x38db, 0xc9fc, 0x57f7, 0xa6d0, 0x1598, 0xe4bf, 0xd329, 0x220e, 0x9146, 0x6061, 0x0d71, 0xfc56, 0x4f1e, 0xbe39, 0x89af, 0x7888, 0xcbc0, 0x3ae7, 0xa4ec, 0x55cb, 0xe683, 0x17a4, 0x2032, 0xd115, 0x625d, 0x937a, 0x3453, 0xc574, 0x763c, 0x871b, 0xb08d, 0x41aa, 0xf2e2, 0x03c5, 0x9dce, 0x6ce9, 0xdfa1, 0x2e86, 0x1910, 0xe837, 0x5b7f, 0xaa58, 0xc748, 0x366f, 0x8527, 0x7400, 0x4396, 0xb2b1, 0x01f9, 0xf0de, 0x6ed5, 0x9ff2, 0x2cba, 0xdd9d, 0xea0b, 0x1b2c, 0xa864, 0x5943, 0x7244, 0x8363, 0x302b, 0xc10c, 0xf69a, 0x07bd, 0xb4f5, 0x45d2, 0xdbd9, 0x2afe, 0x99b6, 0x6891, 0x5f07, 0xae20, 0x1d68, 0xec4f, 0x815f, 0x7078, 0xc330, 0x3217, 0x0581, 0xf4a6, 0x47ee, 0xb6c9, 0x28c2, 0xd9e5, 0x6aad, 0x9b8a, 0xac1c, 0x5d3b, 0xee73, 0x1f54, ], [ 0x0000, 0xbc89, 0xd933, 0x65ba, 0x1247, 0xaece, 0xcb74, 0x77fd, 0x248e, 0x9807, 0xfdbd, 0x4134, 0x36c9, 0x8a40, 0xeffa, 0x5373, 0x491c, 0xf595, 0x902f, 0x2ca6, 0x5b5b, 0xe7d2, 0x8268, 0x3ee1, 0x6d92, 0xd11b, 0xb4a1, 0x0828, 0x7fd5, 0xc35c, 0xa6e6, 0x1a6f, 0x9238, 0x2eb1, 0x4b0b, 0xf782, 0x807f, 0x3cf6, 0x594c, 0xe5c5, 0xb6b6, 0x0a3f, 0x6f85, 0xd30c, 0xa4f1, 0x1878, 0x7dc2, 0xc14b, 0xdb24, 0x67ad, 0x0217, 0xbe9e, 0xc963, 0x75ea, 0x1050, 0xacd9, 0xffaa, 0x4323, 0x2699, 0x9a10, 0xeded, 0x5164, 0x34de, 0x8857, 0x8451, 0x38d8, 0x5d62, 0xe1eb, 0x9616, 0x2a9f, 0x4f25, 0xf3ac, 0xa0df, 0x1c56, 0x79ec, 0xc565, 0xb298, 0x0e11, 0x6bab, 0xd722, 0xcd4d, 0x71c4, 0x147e, 0xa8f7, 0xdf0a, 0x6383, 0x0639, 0xbab0, 0xe9c3, 0x554a, 0x30f0, 0x8c79, 0xfb84, 0x470d, 0x22b7, 0x9e3e, 0x1669, 0xaae0, 0xcf5a, 0x73d3, 0x042e, 0xb8a7, 0xdd1d, 0x6194, 0x32e7, 0x8e6e, 0xebd4, 0x575d, 0x20a0, 0x9c29, 0xf993, 0x451a, 0x5f75, 0xe3fc, 0x8646, 0x3acf, 0x4d32, 0xf1bb, 0x9401, 0x2888, 0x7bfb, 0xc772, 0xa2c8, 0x1e41, 0x69bc, 0xd535, 0xb08f, 0x0c06, 0xa883, 0x140a, 0x71b0, 0xcd39, 0xbac4, 0x064d, 0x63f7, 0xdf7e, 0x8c0d, 0x3084, 0x553e, 0xe9b7, 0x9e4a, 0x22c3, 0x4779, 0xfbf0, 0xe19f, 0x5d16, 0x38ac, 0x8425, 0xf3d8, 0x4f51, 0x2aeb, 0x9662, 0xc511, 0x7998, 0x1c22, 0xa0ab, 0xd756, 0x6bdf, 0x0e65, 0xb2ec, 0x3abb, 0x8632, 0xe388, 0x5f01, 0x28fc, 0x9475, 0xf1cf, 0x4d46, 0x1e35, 0xa2bc, 0xc706, 0x7b8f, 0x0c72, 0xb0fb, 0xd541, 0x69c8, 0x73a7, 0xcf2e, 0xaa94, 0x161d, 0x61e0, 0xdd69, 0xb8d3, 0x045a, 0x5729, 0xeba0, 0x8e1a, 0x3293, 0x456e, 0xf9e7, 0x9c5d, 0x20d4, 0x2cd2, 0x905b, 0xf5e1, 0x4968, 0x3e95, 0x821c, 0xe7a6, 0x5b2f, 0x085c, 0xb4d5, 0xd16f, 0x6de6, 0x1a1b, 0xa692, 0xc328, 0x7fa1, 0x65ce, 0xd947, 0xbcfd, 0x0074, 0x7789, 0xcb00, 0xaeba, 0x1233, 0x4140, 0xfdc9, 0x9873, 0x24fa, 0x5307, 0xef8e, 0x8a34, 0x36bd, 0xbeea, 0x0263, 0x67d9, 0xdb50, 0xacad, 0x1024, 0x759e, 0xc917, 0x9a64, 0x26ed, 0x4357, 0xffde, 0x8823, 0x34aa, 0x5110, 0xed99, 0xf7f6, 0x4b7f, 0x2ec5, 0x924c, 0xe5b1, 0x5938, 0x3c82, 0x800b, 0xd378, 0x6ff1, 0x0a4b, 0xb6c2, 0xc13f, 0x7db6, 0x180c, 0xa485, ], [ 0x0000, 0xe809, 0x7033, 0x983a, 0xe066, 0x086f, 0x9055, 0x785c, 0x60ed, 0x88e4, 0x10de, 0xf8d7, 0x808b, 0x6882, 0xf0b8, 0x18b1, 0xc1da, 0x29d3, 0xb1e9, 0x59e0, 0x21bc, 0xc9b5, 0x518f, 0xb986, 0xa137, 0x493e, 0xd104, 0x390d, 0x4151, 0xa958, 0x3162, 0xd96b, 0x2395, 0xcb9c, 0x53a6, 0xbbaf, 0xc3f3, 0x2bfa, 0xb3c0, 0x5bc9, 0x4378, 0xab71, 0x334b, 0xdb42, 0xa31e, 0x4b17, 0xd32d, 0x3b24, 0xe24f, 0x0a46, 0x927c, 0x7a75, 0x0229, 0xea20, 0x721a, 0x9a13, 0x82a2, 0x6aab, 0xf291, 0x1a98, 0x62c4, 0x8acd, 0x12f7, 0xfafe, 0x472a, 0xaf23, 0x3719, 0xdf10, 0xa74c, 0x4f45, 0xd77f, 0x3f76, 0x27c7, 0xcfce, 0x57f4, 0xbffd, 0xc7a1, 0x2fa8, 0xb792, 0x5f9b, 0x86f0, 0x6ef9, 0xf6c3, 0x1eca, 0x6696, 0x8e9f, 0x16a5, 0xfeac, 0xe61d, 0x0e14, 0x962e, 0x7e27, 0x067b, 0xee72, 0x7648, 0x9e41, 0x64bf, 0x8cb6, 0x148c, 0xfc85, 0x84d9, 0x6cd0, 0xf4ea, 0x1ce3, 0x0452, 0xec5b, 0x7461, 0x9c68, 0xe434, 0x0c3d, 0x9407, 0x7c0e, 0xa565, 0x4d6c, 0xd556, 0x3d5f, 0x4503, 0xad0a, 0x3530, 0xdd39, 0xc588, 0x2d81, 0xb5bb, 0x5db2, 0x25ee, 0xcde7, 0x55dd, 0xbdd4, 0x8e54, 0x665d, 0xfe67, 0x166e, 0x6e32, 0x863b, 0x1e01, 0xf608, 0xeeb9, 0x06b0, 0x9e8a, 0x7683, 0x0edf, 0xe6d6, 0x7eec, 0x96e5, 0x4f8e, 0xa787, 0x3fbd, 0xd7b4, 0xafe8, 0x47e1, 0xdfdb, 0x37d2, 0x2f63, 0xc76a, 0x5f50, 0xb759, 0xcf05, 0x270c, 0xbf36, 0x573f, 0xadc1, 0x45c8, 0xddf2, 0x35fb, 0x4da7, 0xa5ae, 0x3d94, 0xd59d, 0xcd2c, 0x2525, 0xbd1f, 0x5516, 0x2d4a, 0xc543, 0x5d79, 0xb570, 0x6c1b, 0x8412, 0x1c28, 0xf421, 0x8c7d, 0x6474, 0xfc4e, 0x1447, 0x0cf6, 0xe4ff, 0x7cc5, 0x94cc, 0xec90, 0x0499, 0x9ca3, 0x74aa, 0xc97e, 0x2177, 0xb94d, 0x5144, 0x2918, 0xc111, 0x592b, 0xb122, 0xa993, 0x419a, 0xd9a0, 0x31a9, 0x49f5, 0xa1fc, 0x39c6, 0xd1cf, 0x08a4, 0xe0ad, 0x7897, 0x909e, 0xe8c2, 0x00cb, 0x98f1, 0x70f8, 0x6849, 0x8040, 0x187a, 0xf073, 0x882f, 0x6026, 0xf81c, 0x1015, 0xeaeb, 0x02e2, 0x9ad8, 0x72d1, 0x0a8d, 0xe284, 0x7abe, 0x92b7, 0x8a06, 0x620f, 0xfa35, 0x123c, 0x6a60, 0x8269, 0x1a53, 0xf25a, 0x2b31, 0xc338, 0x5b02, 0xb30b, 0xcb57, 0x235e, 0xbb64, 0x536d, 0x4bdc, 0xa3d5, 0x3bef, 0xd3e6, 0xabba, 0x43b3, 0xdb89, 0x3380, ], [ 0x0000, 0x384d, 0x709a, 0x48d7, 0xe134, 0xd979, 0x91ae, 0xa9e3, 0x6249, 0x5a04, 0x12d3, 0x2a9e, 0x837d, 0xbb30, 0xf3e7, 0xcbaa, 0xc492, 0xfcdf, 0xb408, 0x8c45, 0x25a6, 0x1deb, 0x553c, 0x6d71, 0xa6db, 0x9e96, 0xd641, 0xee0c, 0x47ef, 0x7fa2, 0x3775, 0x0f38, 0x2905, 0x1148, 0x599f, 0x61d2, 0xc831, 0xf07c, 0xb8ab, 0x80e6, 0x4b4c, 0x7301, 0x3bd6, 0x039b, 0xaa78, 0x9235, 0xdae2, 0xe2af, 0xed97, 0xd5da, 0x9d0d, 0xa540, 0x0ca3, 0x34ee, 0x7c39, 0x4474, 0x8fde, 0xb793, 0xff44, 0xc709, 0x6eea, 0x56a7, 0x1e70, 0x263d, 0x520a, 0x6a47, 0x2290, 0x1add, 0xb33e, 0x8b73, 0xc3a4, 0xfbe9, 0x3043, 0x080e, 0x40d9, 0x7894, 0xd177, 0xe93a, 0xa1ed, 0x99a0, 0x9698, 0xaed5, 0xe602, 0xde4f, 0x77ac, 0x4fe1, 0x0736, 0x3f7b, 0xf4d1, 0xcc9c, 0x844b, 0xbc06, 0x15e5, 0x2da8, 0x657f, 0x5d32, 0x7b0f, 0x4342, 0x0b95, 0x33d8, 0x9a3b, 0xa276, 0xeaa1, 0xd2ec, 0x1946, 0x210b, 0x69dc, 0x5191, 0xf872, 0xc03f, 0x88e8, 0xb0a5, 0xbf9d, 0x87d0, 0xcf07, 0xf74a, 0x5ea9, 0x66e4, 0x2e33, 0x167e, 0xddd4, 0xe599, 0xad4e, 0x9503, 0x3ce0, 0x04ad, 0x4c7a, 0x7437, 0xa414, 0x9c59, 0xd48e, 0xecc3, 0x4520, 0x7d6d, 0x35ba, 0x0df7, 0xc65d, 0xfe10, 0xb6c7, 0x8e8a, 0x2769, 0x1f24, 0x57f3, 0x6fbe, 0x6086, 0x58cb, 0x101c, 0x2851, 0x81b2, 0xb9ff, 0xf128, 0xc965, 0x02cf, 0x3a82, 0x7255, 0x4a18, 0xe3fb, 0xdbb6, 0x9361, 0xab2c, 0x8d11, 0xb55c, 0xfd8b, 0xc5c6, 0x6c25, 0x5468, 0x1cbf, 0x24f2, 0xef58, 0xd715, 0x9fc2, 0xa78f, 0x0e6c, 0x3621, 0x7ef6, 0x46bb, 0x4983, 0x71ce, 0x3919, 0x0154, 0xa8b7, 0x90fa, 0xd82d, 0xe060, 0x2bca, 0x1387, 0x5b50, 0x631d, 0xcafe, 0xf2b3, 0xba64, 0x8229, 0xf61e, 0xce53, 0x8684, 0xbec9, 0x172a, 0x2f67, 0x67b0, 0x5ffd, 0x9457, 0xac1a, 0xe4cd, 0xdc80, 0x7563, 0x4d2e, 0x05f9, 0x3db4, 0x328c, 0x0ac1, 0x4216, 0x7a5b, 0xd3b8, 0xebf5, 0xa322, 0x9b6f, 0x50c5, 0x6888, 0x205f, 0x1812, 0xb1f1, 0x89bc, 0xc16b, 0xf926, 0xdf1b, 0xe756, 0xaf81, 0x97cc, 0x3e2f, 0x0662, 0x4eb5, 0x76f8, 0xbd52, 0x851f, 0xcdc8, 0xf585, 0x5c66, 0x642b, 0x2cfc, 0x14b1, 0x1b89, 0x23c4, 0x6b13, 0x535e, 0xfabd, 0xc2f0, 0x8a27, 0xb26a, 0x79c0, 0x418d, 0x095a, 0x3117, 0x98f4, 0xa0b9, 0xe86e, 0xd023, ], [ 0x0000, 0x8605, 0xac2b, 0x2a2e, 0xf877, 0x7e72, 0x545c, 0xd259, 0x50cf, 0xd6ca, 0xfce4, 0x7ae1, 0xa8b8, 0x2ebd, 0x0493, 0x8296, 0xa19e, 0x279b, 0x0db5, 0x8bb0, 0x59e9, 0xdfec, 0xf5c2, 0x73c7, 0xf151, 0x7754, 0x5d7a, 0xdb7f, 0x0926, 0x8f23, 0xa50d, 0x2308, 0xe31d, 0x6518, 0x4f36, 0xc933, 0x1b6a, 0x9d6f, 0xb741, 0x3144, 0xb3d2, 0x35d7, 0x1ff9, 0x99fc, 0x4ba5, 0xcda0, 0xe78e, 0x618b, 0x4283, 0xc486, 0xeea8, 0x68ad, 0xbaf4, 0x3cf1, 0x16df, 0x90da, 0x124c, 0x9449, 0xbe67, 0x3862, 0xea3b, 0x6c3e, 0x4610, 0xc015, 0x661b, 0xe01e, 0xca30, 0x4c35, 0x9e6c, 0x1869, 0x3247, 0xb442, 0x36d4, 0xb0d1, 0x9aff, 0x1cfa, 0xcea3, 0x48a6, 0x6288, 0xe48d, 0xc785, 0x4180, 0x6bae, 0xedab, 0x3ff2, 0xb9f7, 0x93d9, 0x15dc, 0x974a, 0x114f, 0x3b61, 0xbd64, 0x6f3d, 0xe938, 0xc316, 0x4513, 0x8506, 0x0303, 0x292d, 0xaf28, 0x7d71, 0xfb74, 0xd15a, 0x575f, 0xd5c9, 0x53cc, 0x79e2, 0xffe7, 0x2dbe, 0xabbb, 0x8195, 0x0790, 0x2498, 0xa29d, 0x88b3, 0x0eb6, 0xdcef, 0x5aea, 0x70c4, 0xf6c1, 0x7457, 0xf252, 0xd87c, 0x5e79, 0x8c20, 0x0a25, 0x200b, 0xa60e, 0xcc36, 0x4a33, 0x601d, 0xe618, 0x3441, 0xb244, 0x986a, 0x1e6f, 0x9cf9, 0x1afc, 0x30d2, 0xb6d7, 0x648e, 0xe28b, 0xc8a5, 0x4ea0, 0x6da8, 0xebad, 0xc183, 0x4786, 0x95df, 0x13da, 0x39f4, 0xbff1, 0x3d67, 0xbb62, 0x914c, 0x1749, 0xc510, 0x4315, 0x693b, 0xef3e, 0x2f2b, 0xa92e, 0x8300, 0x0505, 0xd75c, 0x5159, 0x7b77, 0xfd72, 0x7fe4, 0xf9e1, 0xd3cf, 0x55ca, 0x8793, 0x0196, 0x2bb8, 0xadbd, 0x8eb5, 0x08b0, 0x229e, 0xa49b, 0x76c2, 0xf0c7, 0xdae9, 0x5cec, 0xde7a, 0x587f, 0x7251, 0xf454, 0x260d, 0xa008, 0x8a26, 0x0c23, 0xaa2d, 0x2c28, 0x0606, 0x8003, 0x525a, 0xd45f, 0xfe71, 0x7874, 0xfae2, 0x7ce7, 0x56c9, 0xd0cc, 0x0295, 0x8490, 0xaebe, 0x28bb, 0x0bb3, 0x8db6, 0xa798, 0x219d, 0xf3c4, 0x75c1, 0x5fef, 0xd9ea, 0x5b7c, 0xdd79, 0xf757, 0x7152, 0xa30b, 0x250e, 0x0f20, 0x8925, 0x4930, 0xcf35, 0xe51b, 0x631e, 0xb147, 0x3742, 0x1d6c, 0x9b69, 0x19ff, 0x9ffa, 0xb5d4, 0x33d1, 0xe188, 0x678d, 0x4da3, 0xcba6, 0xe8ae, 0x6eab, 0x4485, 0xc280, 0x10d9, 0x96dc, 0xbcf2, 0x3af7, 0xb861, 0x3e64, 0x144a, 0x924f, 0x4016, 0xc613, 0xec3d, 0x6a38, ], [ 0x0000, 0xe3b2, 0x6745, 0x84f7, 0xce8a, 0x2d38, 0xa9cf, 0x4a7d, 0x3d35, 0xde87, 0x5a70, 0xb9c2, 0xf3bf, 0x100d, 0x94fa, 0x7748, 0x7a6a, 0x99d8, 0x1d2f, 0xfe9d, 0xb4e0, 0x5752, 0xd3a5, 0x3017, 0x475f, 0xa4ed, 0x201a, 0xc3a8, 0x89d5, 0x6a67, 0xee90, 0x0d22, 0xf4d4, 0x1766, 0x9391, 0x7023, 0x3a5e, 0xd9ec, 0x5d1b, 0xbea9, 0xc9e1, 0x2a53, 0xaea4, 0x4d16, 0x076b, 0xe4d9, 0x602e, 0x839c, 0x8ebe, 0x6d0c, 0xe9fb, 0x0a49, 0x4034, 0xa386, 0x2771, 0xc4c3, 0xb38b, 0x5039, 0xd4ce, 0x377c, 0x7d01, 0x9eb3, 0x1a44, 0xf9f6, 0x4989, 0xaa3b, 0x2ecc, 0xcd7e, 0x8703, 0x64b1, 0xe046, 0x03f4, 0x74bc, 0x970e, 0x13f9, 0xf04b, 0xba36, 0x5984, 0xdd73, 0x3ec1, 0x33e3, 0xd051, 0x54a6, 0xb714, 0xfd69, 0x1edb, 0x9a2c, 0x799e, 0x0ed6, 0xed64, 0x6993, 0x8a21, 0xc05c, 0x23ee, 0xa719, 0x44ab, 0xbd5d, 0x5eef, 0xda18, 0x39aa, 0x73d7, 0x9065, 0x1492, 0xf720, 0x8068, 0x63da, 0xe72d, 0x049f, 0x4ee2, 0xad50, 0x29a7, 0xca15, 0xc737, 0x2485, 0xa072, 0x43c0, 0x09bd, 0xea0f, 0x6ef8, 0x8d4a, 0xfa02, 0x19b0, 0x9d47, 0x7ef5, 0x3488, 0xd73a, 0x53cd, 0xb07f, 0x9312, 0x70a0, 0xf457, 0x17e5, 0x5d98, 0xbe2a, 0x3add, 0xd96f, 0xae27, 0x4d95, 0xc962, 0x2ad0, 0x60ad, 0x831f, 0x07e8, 0xe45a, 0xe978, 0x0aca, 0x8e3d, 0x6d8f, 0x27f2, 0xc440, 0x40b7, 0xa305, 0xd44d, 0x37ff, 0xb308, 0x50ba, 0x1ac7, 0xf975, 0x7d82, 0x9e30, 0x67c6, 0x8474, 0x0083, 0xe331, 0xa94c, 0x4afe, 0xce09, 0x2dbb, 0x5af3, 0xb941, 0x3db6, 0xde04, 0x9479, 0x77cb, 0xf33c, 0x108e, 0x1dac, 0xfe1e, 0x7ae9, 0x995b, 0xd326, 0x3094, 0xb463, 0x57d1, 0x2099, 0xc32b, 0x47dc, 0xa46e, 0xee13, 0x0da1, 0x8956, 0x6ae4, 0xda9b, 0x3929, 0xbdde, 0x5e6c, 0x1411, 0xf7a3, 0x7354, 0x90e6, 0xe7ae, 0x041c, 0x80eb, 0x6359, 0x2924, 0xca96, 0x4e61, 0xadd3, 0xa0f1, 0x4343, 0xc7b4, 0x2406, 0x6e7b, 0x8dc9, 0x093e, 0xea8c, 0x9dc4, 0x7e76, 0xfa81, 0x1933, 0x534e, 0xb0fc, 0x340b, 0xd7b9, 0x2e4f, 0xcdfd, 0x490a, 0xaab8, 0xe0c5, 0x0377, 0x8780, 0x6432, 0x137a, 0xf0c8, 0x743f, 0x978d, 0xddf0, 0x3e42, 0xbab5, 0x5907, 0x5425, 0xb797, 0x3360, 0xd0d2, 0x9aaf, 0x791d, 0xfdea, 0x1e58, 0x6910, 0x8aa2, 0x0e55, 0xede7, 0xa79a, 0x4428, 0xc0df, 0x236d, ], [ 0x0000, 0x95bd, 0x8b5b, 0x1ee6, 0xb697, 0x232a, 0x3dcc, 0xa871, 0xcd0f, 0x58b2, 0x4654, 0xd3e9, 0x7b98, 0xee25, 0xf0c3, 0x657e, 0x3a3f, 0xaf82, 0xb164, 0x24d9, 0x8ca8, 0x1915, 0x07f3, 0x924e, 0xf730, 0x628d, 0x7c6b, 0xe9d6, 0x41a7, 0xd41a, 0xcafc, 0x5f41, 0x747e, 0xe1c3, 0xff25, 0x6a98, 0xc2e9, 0x5754, 0x49b2, 0xdc0f, 0xb971, 0x2ccc, 0x322a, 0xa797, 0x0fe6, 0x9a5b, 0x84bd, 0x1100, 0x4e41, 0xdbfc, 0xc51a, 0x50a7, 0xf8d6, 0x6d6b, 0x738d, 0xe630, 0x834e, 0x16f3, 0x0815, 0x9da8, 0x35d9, 0xa064, 0xbe82, 0x2b3f, 0xe8fc, 0x7d41, 0x63a7, 0xf61a, 0x5e6b, 0xcbd6, 0xd530, 0x408d, 0x25f3, 0xb04e, 0xaea8, 0x3b15, 0x9364, 0x06d9, 0x183f, 0x8d82, 0xd2c3, 0x477e, 0x5998, 0xcc25, 0x6454, 0xf1e9, 0xef0f, 0x7ab2, 0x1fcc, 0x8a71, 0x9497, 0x012a, 0xa95b, 0x3ce6, 0x2200, 0xb7bd, 0x9c82, 0x093f, 0x17d9, 0x8264, 0x2a15, 0xbfa8, 0xa14e, 0x34f3, 0x518d, 0xc430, 0xdad6, 0x4f6b, 0xe71a, 0x72a7, 0x6c41, 0xf9fc, 0xa6bd, 0x3300, 0x2de6, 0xb85b, 0x102a, 0x8597, 0x9b71, 0x0ecc, 0x6bb2, 0xfe0f, 0xe0e9, 0x7554, 0xdd25, 0x4898, 0x567e, 0xc3c3, 0x71d9, 0xe464, 0xfa82, 0x6f3f, 0xc74e, 0x52f3, 0x4c15, 0xd9a8, 0xbcd6, 0x296b, 0x378d, 0xa230, 0x0a41, 0x9ffc, 0x811a, 0x14a7, 0x4be6, 0xde5b, 0xc0bd, 0x5500, 0xfd71, 0x68cc, 0x762a, 0xe397, 0x86e9, 0x1354, 0x0db2, 0x980f, 0x307e, 0xa5c3, 0xbb25, 0x2e98, 0x05a7, 0x901a, 0x8efc, 0x1b41, 0xb330, 0x268d, 0x386b, 0xadd6, 0xc8a8, 0x5d15, 0x43f3, 0xd64e, 0x7e3f, 0xeb82, 0xf564, 0x60d9, 0x3f98, 0xaa25, 0xb4c3, 0x217e, 0x890f, 0x1cb2, 0x0254, 0x97e9, 0xf297, 0x672a, 0x79cc, 0xec71, 0x4400, 0xd1bd, 0xcf5b, 0x5ae6, 0x9925, 0x0c98, 0x127e, 0x87c3, 0x2fb2, 0xba0f, 0xa4e9, 0x3154, 0x542a, 0xc197, 0xdf71, 0x4acc, 0xe2bd, 0x7700, 0x69e6, 0xfc5b, 0xa31a, 0x36a7, 0x2841, 0xbdfc, 0x158d, 0x8030, 0x9ed6, 0x0b6b, 0x6e15, 0xfba8, 0xe54e, 0x70f3, 0xd882, 0x4d3f, 0x53d9, 0xc664, 0xed5b, 0x78e6, 0x6600, 0xf3bd, 0x5bcc, 0xce71, 0xd097, 0x452a, 0x2054, 0xb5e9, 0xab0f, 0x3eb2, 0x96c3, 0x037e, 0x1d98, 0x8825, 0xd764, 0x42d9, 0x5c3f, 0xc982, 0x61f3, 0xf44e, 0xeaa8, 0x7f15, 0x1a6b, 0x8fd6, 0x9130, 0x048d, 0xacfc, 0x3941, 0x27a7, 0xb21a, ], [ 0x0000, 0x10b6, 0x216c, 0x31da, 0x42d8, 0x526e, 0x63b4, 0x7302, 0x85b0, 0x9506, 0xa4dc, 0xb46a, 0xc768, 0xd7de, 0xe604, 0xf6b2, 0xab41, 0xbbf7, 0x8a2d, 0x9a9b, 0xe999, 0xf92f, 0xc8f5, 0xd843, 0x2ef1, 0x3e47, 0x0f9d, 0x1f2b, 0x6c29, 0x7c9f, 0x4d45, 0x5df3, 0xf6a3, 0xe615, 0xd7cf, 0xc779, 0xb47b, 0xa4cd, 0x9517, 0x85a1, 0x7313, 0x63a5, 0x527f, 0x42c9, 0x31cb, 0x217d, 0x10a7, 0x0011, 0x5de2, 0x4d54, 0x7c8e, 0x6c38, 0x1f3a, 0x0f8c, 0x3e56, 0x2ee0, 0xd852, 0xc8e4, 0xf93e, 0xe988, 0x9a8a, 0x8a3c, 0xbbe6, 0xab50, 0x4d67, 0x5dd1, 0x6c0b, 0x7cbd, 0x0fbf, 0x1f09, 0x2ed3, 0x3e65, 0xc8d7, 0xd861, 0xe9bb, 0xf90d, 0x8a0f, 0x9ab9, 0xab63, 0xbbd5, 0xe626, 0xf690, 0xc74a, 0xd7fc, 0xa4fe, 0xb448, 0x8592, 0x9524, 0x6396, 0x7320, 0x42fa, 0x524c, 0x214e, 0x31f8, 0x0022, 0x1094, 0xbbc4, 0xab72, 0x9aa8, 0x8a1e, 0xf91c, 0xe9aa, 0xd870, 0xc8c6, 0x3e74, 0x2ec2, 0x1f18, 0x0fae, 0x7cac, 0x6c1a, 0x5dc0, 0x4d76, 0x1085, 0x0033, 0x31e9, 0x215f, 0x525d, 0x42eb, 0x7331, 0x6387, 0x9535, 0x8583, 0xb459, 0xa4ef, 0xd7ed, 0xc75b, 0xf681, 0xe637, 0x9ace, 0x8a78, 0xbba2, 0xab14, 0xd816, 0xc8a0, 0xf97a, 0xe9cc, 0x1f7e, 0x0fc8, 0x3e12, 0x2ea4, 0x5da6, 0x4d10, 0x7cca, 0x6c7c, 0x318f, 0x2139, 0x10e3, 0x0055, 0x7357, 0x63e1, 0x523b, 0x428d, 0xb43f, 0xa489, 0x9553, 0x85e5, 0xf6e7, 0xe651, 0xd78b, 0xc73d, 0x6c6d, 0x7cdb, 0x4d01, 0x5db7, 0x2eb5, 0x3e03, 0x0fd9, 0x1f6f, 0xe9dd, 0xf96b, 0xc8b1, 0xd807, 0xab05, 0xbbb3, 0x8a69, 0x9adf, 0xc72c, 0xd79a, 0xe640, 0xf6f6, 0x85f4, 0x9542, 0xa498, 0xb42e, 0x429c, 0x522a, 0x63f0, 0x7346, 0x0044, 0x10f2, 0x2128, 0x319e, 0xd7a9, 0xc71f, 0xf6c5, 0xe673, 0x9571, 0x85c7, 0xb41d, 0xa4ab, 0x5219, 0x42af, 0x7375, 0x63c3, 0x10c1, 0x0077, 0x31ad, 0x211b, 0x7ce8, 0x6c5e, 0x5d84, 0x4d32, 0x3e30, 0x2e86, 0x1f5c, 0x0fea, 0xf958, 0xe9ee, 0xd834, 0xc882, 0xbb80, 0xab36, 0x9aec, 0x8a5a, 0x210a, 0x31bc, 0x0066, 0x10d0, 0x63d2, 0x7364, 0x42be, 0x5208, 0xa4ba, 0xb40c, 0x85d6, 0x9560, 0xe662, 0xf6d4, 0xc70e, 0xd7b8, 0x8a4b, 0x9afd, 0xab27, 0xbb91, 0xc893, 0xd825, 0xe9ff, 0xf949, 0x0ffb, 0x1f4d, 0x2e97, 0x3e21, 0x4d23, 0x5d95, 0x6c4f, 0x7cf9, ], [ 0x0000, 0x43de, 0x87bc, 0xc462, 0xaf59, 0xec87, 0x28e5, 0x6b3b, 0xfe93, 0xbd4d, 0x792f, 0x3af1, 0x51ca, 0x1214, 0xd676, 0x95a8, 0x5d07, 0x1ed9, 0xdabb, 0x9965, 0xf25e, 0xb180, 0x75e2, 0x363c, 0xa394, 0xe04a, 0x2428, 0x67f6, 0x0ccd, 0x4f13, 0x8b71, 0xc8af, 0xba0e, 0xf9d0, 0x3db2, 0x7e6c, 0x1557, 0x5689, 0x92eb, 0xd135, 0x449d, 0x0743, 0xc321, 0x80ff, 0xebc4, 0xa81a, 0x6c78, 0x2fa6, 0xe709, 0xa4d7, 0x60b5, 0x236b, 0x4850, 0x0b8e, 0xcfec, 0x8c32, 0x199a, 0x5a44, 0x9e26, 0xddf8, 0xb6c3, 0xf51d, 0x317f, 0x72a1, 0xd43d, 0x97e3, 0x5381, 0x105f, 0x7b64, 0x38ba, 0xfcd8, 0xbf06, 0x2aae, 0x6970, 0xad12, 0xeecc, 0x85f7, 0xc629, 0x024b, 0x4195, 0x893a, 0xcae4, 0x0e86, 0x4d58, 0x2663, 0x65bd, 0xa1df, 0xe201, 0x77a9, 0x3477, 0xf015, 0xb3cb, 0xd8f0, 0x9b2e, 0x5f4c, 0x1c92, 0x6e33, 0x2ded, 0xe98f, 0xaa51, 0xc16a, 0x82b4, 0x46d6, 0x0508, 0x90a0, 0xd37e, 0x171c, 0x54c2, 0x3ff9, 0x7c27, 0xb845, 0xfb9b, 0x3334, 0x70ea, 0xb488, 0xf756, 0x9c6d, 0xdfb3, 0x1bd1, 0x580f, 0xcda7, 0x8e79, 0x4a1b, 0x09c5, 0x62fe, 0x2120, 0xe542, 0xa69c, 0x085b, 0x4b85, 0x8fe7, 0xcc39, 0xa702, 0xe4dc, 0x20be, 0x6360, 0xf6c8, 0xb516, 0x7174, 0x32aa, 0x5991, 0x1a4f, 0xde2d, 0x9df3, 0x555c, 0x1682, 0xd2e0, 0x913e, 0xfa05, 0xb9db, 0x7db9, 0x3e67, 0xabcf, 0xe811, 0x2c73, 0x6fad, 0x0496, 0x4748, 0x832a, 0xc0f4, 0xb255, 0xf18b, 0x35e9, 0x7637, 0x1d0c, 0x5ed2, 0x9ab0, 0xd96e, 0x4cc6, 0x0f18, 0xcb7a, 0x88a4, 0xe39f, 0xa041, 0x6423, 0x27fd, 0xef52, 0xac8c, 0x68ee, 0x2b30, 0x400b, 0x03d5, 0xc7b7, 0x8469, 0x11c1, 0x521f, 0x967d, 0xd5a3, 0xbe98, 0xfd46, 0x3924, 0x7afa, 0xdc66, 0x9fb8, 0x5bda, 0x1804, 0x733f, 0x30e1, 0xf483, 0xb75d, 0x22f5, 0x612b, 0xa549, 0xe697, 0x8dac, 0xce72, 0x0a10, 0x49ce, 0x8161, 0xc2bf, 0x06dd, 0x4503, 0x2e38, 0x6de6, 0xa984, 0xea5a, 0x7ff2, 0x3c2c, 0xf84e, 0xbb90, 0xd0ab, 0x9375, 0x5717, 0x14c9, 0x6668, 0x25b6, 0xe1d4, 0xa20a, 0xc931, 0x8aef, 0x4e8d, 0x0d53, 0x98fb, 0xdb25, 0x1f47, 0x5c99, 0x37a2, 0x747c, 0xb01e, 0xf3c0, 0x3b6f, 0x78b1, 0xbcd3, 0xff0d, 0x9436, 0xd7e8, 0x138a, 0x5054, 0xc5fc, 0x8622, 0x4240, 0x019e, 0x6aa5, 0x297b, 0xed19, 0xaec7, ], [ 0x0000, 0x1280, 0x2500, 0x3780, 0x4a00, 0x5880, 0x6f00, 0x7d80, 0x9400, 0x8680, 0xb100, 0xa380, 0xde00, 0xcc80, 0xfb00, 0xe980, 0x8821, 0x9aa1, 0xad21, 0xbfa1, 0xc221, 0xd0a1, 0xe721, 0xf5a1, 0x1c21, 0x0ea1, 0x3921, 0x2ba1, 0x5621, 0x44a1, 0x7321, 0x61a1, 0xb063, 0xa2e3, 0x9563, 0x87e3, 0xfa63, 0xe8e3, 0xdf63, 0xcde3, 0x2463, 0x36e3, 0x0163, 0x13e3, 0x6e63, 0x7ce3, 0x4b63, 0x59e3, 0x3842, 0x2ac2, 0x1d42, 0x0fc2, 0x7242, 0x60c2, 0x5742, 0x45c2, 0xac42, 0xbec2, 0x8942, 0x9bc2, 0xe642, 0xf4c2, 0xc342, 0xd1c2, 0xc0e7, 0xd267, 0xe5e7, 0xf767, 0x8ae7, 0x9867, 0xafe7, 0xbd67, 0x54e7, 0x4667, 0x71e7, 0x6367, 0x1ee7, 0x0c67, 0x3be7, 0x2967, 0x48c6, 0x5a46, 0x6dc6, 0x7f46, 0x02c6, 0x1046, 0x27c6, 0x3546, 0xdcc6, 0xce46, 0xf9c6, 0xeb46, 0x96c6, 0x8446, 0xb3c6, 0xa146, 0x7084, 0x6204, 0x5584, 0x4704, 0x3a84, 0x2804, 0x1f84, 0x0d04, 0xe484, 0xf604, 0xc184, 0xd304, 0xae84, 0xbc04, 0x8b84, 0x9904, 0xf8a5, 0xea25, 0xdda5, 0xcf25, 0xb2a5, 0xa025, 0x97a5, 0x8525, 0x6ca5, 0x7e25, 0x49a5, 0x5b25, 0x26a5, 0x3425, 0x03a5, 0x1125, 0x21ef, 0x336f, 0x04ef, 0x166f, 0x6bef, 0x796f, 0x4eef, 0x5c6f, 0xb5ef, 0xa76f, 0x90ef, 0x826f, 0xffef, 0xed6f, 0xdaef, 0xc86f, 0xa9ce, 0xbb4e, 0x8cce, 0x9e4e, 0xe3ce, 0xf14e, 0xc6ce, 0xd44e, 0x3dce, 0x2f4e, 0x18ce, 0x0a4e, 0x77ce, 0x654e, 0x52ce, 0x404e, 0x918c, 0x830c, 0xb48c, 0xa60c, 0xdb8c, 0xc90c, 0xfe8c, 0xec0c, 0x058c, 0x170c, 0x208c, 0x320c, 0x4f8c, 0x5d0c, 0x6a8c, 0x780c, 0x19ad, 0x0b2d, 0x3cad, 0x2e2d, 0x53ad, 0x412d, 0x76ad, 0x642d, 0x8dad, 0x9f2d, 0xa8ad, 0xba2d, 0xc7ad, 0xd52d, 0xe2ad, 0xf02d, 0xe108, 0xf388, 0xc408, 0xd688, 0xab08, 0xb988, 0x8e08, 0x9c88, 0x7508, 0x6788, 0x5008, 0x4288, 0x3f08, 0x2d88, 0x1a08, 0x0888, 0x6929, 0x7ba9, 0x4c29, 0x5ea9, 0x2329, 0x31a9, 0x0629, 0x14a9, 0xfd29, 0xefa9, 0xd829, 0xcaa9, 0xb729, 0xa5a9, 0x9229, 0x80a9, 0x516b, 0x43eb, 0x746b, 0x66eb, 0x1b6b, 0x09eb, 0x3e6b, 0x2ceb, 0xc56b, 0xd7eb, 0xe06b, 0xf2eb, 0x8f6b, 0x9deb, 0xaa6b, 0xb8eb, 0xd94a, 0xcbca, 0xfc4a, 0xeeca, 0x934a, 0x81ca, 0xb64a, 0xa4ca, 0x4d4a, 0x5fca, 0x684a, 0x7aca, 0x074a, 0x15ca, 0x224a, 0x30ca, ], [ 0x0000, 0xd002, 0x0025, 0xd027, 0x004a, 0xd048, 0x006f, 0xd06d, 0x0094, 0xd096, 0x00b1, 0xd0b3, 0x00de, 0xd0dc, 0x00fb, 0xd0f9, 0x0128, 0xd12a, 0x010d, 0xd10f, 0x0162, 0xd160, 0x0147, 0xd145, 0x01bc, 0xd1be, 0x0199, 0xd19b, 0x01f6, 0xd1f4, 0x01d3, 0xd1d1, 0x0250, 0xd252, 0x0275, 0xd277, 0x021a, 0xd218, 0x023f, 0xd23d, 0x02c4, 0xd2c6, 0x02e1, 0xd2e3, 0x028e, 0xd28c, 0x02ab, 0xd2a9, 0x0378, 0xd37a, 0x035d, 0xd35f, 0x0332, 0xd330, 0x0317, 0xd315, 0x03ec, 0xd3ee, 0x03c9, 0xd3cb, 0x03a6, 0xd3a4, 0x0383, 0xd381, 0x04a0, 0xd4a2, 0x0485, 0xd487, 0x04ea, 0xd4e8, 0x04cf, 0xd4cd, 0x0434, 0xd436, 0x0411, 0xd413, 0x047e, 0xd47c, 0x045b, 0xd459, 0x0588, 0xd58a, 0x05ad, 0xd5af, 0x05c2, 0xd5c0, 0x05e7, 0xd5e5, 0x051c, 0xd51e, 0x0539, 0xd53b, 0x0556, 0xd554, 0x0573, 0xd571, 0x06f0, 0xd6f2, 0x06d5, 0xd6d7, 0x06ba, 0xd6b8, 0x069f, 0xd69d, 0x0664, 0xd666, 0x0641, 0xd643, 0x062e, 0xd62c, 0x060b, 0xd609, 0x07d8, 0xd7da, 0x07fd, 0xd7ff, 0x0792, 0xd790, 0x07b7, 0xd7b5, 0x074c, 0xd74e, 0x0769, 0xd76b, 0x0706, 0xd704, 0x0723, 0xd721, 0x0940, 0xd942, 0x0965, 0xd967, 0x090a, 0xd908, 0x092f, 0xd92d, 0x09d4, 0xd9d6, 0x09f1, 0xd9f3, 0x099e, 0xd99c, 0x09bb, 0xd9b9, 0x0868, 0xd86a, 0x084d, 0xd84f, 0x0822, 0xd820, 0x0807, 0xd805, 0x08fc, 0xd8fe, 0x08d9, 0xd8db, 0x08b6, 0xd8b4, 0x0893, 0xd891, 0x0b10, 0xdb12, 0x0b35, 0xdb37, 0x0b5a, 0xdb58, 0x0b7f, 0xdb7d, 0x0b84, 0xdb86, 0x0ba1, 0xdba3, 0x0bce, 0xdbcc, 0x0beb, 0xdbe9, 0x0a38, 0xda3a, 0x0a1d, 0xda1f, 0x0a72, 0xda70, 0x0a57, 0xda55, 0x0aac, 0xdaae, 0x0a89, 0xda8b, 0x0ae6, 0xdae4, 0x0ac3, 0xdac1, 0x0de0, 0xdde2, 0x0dc5, 0xddc7, 0x0daa, 0xdda8, 0x0d8f, 0xdd8d, 0x0d74, 0xdd76, 0x0d51, 0xdd53, 0x0d3e, 0xdd3c, 0x0d1b, 0xdd19, 0x0cc8, 0xdcca, 0x0ced, 0xdcef, 0x0c82, 0xdc80, 0x0ca7, 0xdca5, 0x0c5c, 0xdc5e, 0x0c79, 0xdc7b, 0x0c16, 0xdc14, 0x0c33, 0xdc31, 0x0fb0, 0xdfb2, 0x0f95, 0xdf97, 0x0ffa, 0xdff8, 0x0fdf, 0xdfdd, 0x0f24, 0xdf26, 0x0f01, 0xdf03, 0x0f6e, 0xdf6c, 0x0f4b, 0xdf49, 0x0e98, 0xde9a, 0x0ebd, 0xdebf, 0x0ed2, 0xded0, 0x0ef7, 0xdef5, 0x0e0c, 0xde0e, 0x0e29, 0xde2b, 0x0e46, 0xde44, 0x0e63, 0xde61, ], [ 0x0000, 0x6b98, 0xd730, 0xbca8, 0x0e41, 0x65d9, 0xd971, 0xb2e9, 0x1c82, 0x771a, 0xcbb2, 0xa02a, 0x12c3, 0x795b, 0xc5f3, 0xae6b, 0x3904, 0x529c, 0xee34, 0x85ac, 0x3745, 0x5cdd, 0xe075, 0x8bed, 0x2586, 0x4e1e, 0xf2b6, 0x992e, 0x2bc7, 0x405f, 0xfcf7, 0x976f, 0x7208, 0x1990, 0xa538, 0xcea0, 0x7c49, 0x17d1, 0xab79, 0xc0e1, 0x6e8a, 0x0512, 0xb9ba, 0xd222, 0x60cb, 0x0b53, 0xb7fb, 0xdc63, 0x4b0c, 0x2094, 0x9c3c, 0xf7a4, 0x454d, 0x2ed5, 0x927d, 0xf9e5, 0x578e, 0x3c16, 0x80be, 0xeb26, 0x59cf, 0x3257, 0x8eff, 0xe567, 0xe410, 0x8f88, 0x3320, 0x58b8, 0xea51, 0x81c9, 0x3d61, 0x56f9, 0xf892, 0x930a, 0x2fa2, 0x443a, 0xf6d3, 0x9d4b, 0x21e3, 0x4a7b, 0xdd14, 0xb68c, 0x0a24, 0x61bc, 0xd355, 0xb8cd, 0x0465, 0x6ffd, 0xc196, 0xaa0e, 0x16a6, 0x7d3e, 0xcfd7, 0xa44f, 0x18e7, 0x737f, 0x9618, 0xfd80, 0x4128, 0x2ab0, 0x9859, 0xf3c1, 0x4f69, 0x24f1, 0x8a9a, 0xe102, 0x5daa, 0x3632, 0x84db, 0xef43, 0x53eb, 0x3873, 0xaf1c, 0xc484, 0x782c, 0x13b4, 0xa15d, 0xcac5, 0x766d, 0x1df5, 0xb39e, 0xd806, 0x64ae, 0x0f36, 0xbddf, 0xd647, 0x6aef, 0x0177, 0x6801, 0x0399, 0xbf31, 0xd4a9, 0x6640, 0x0dd8, 0xb170, 0xdae8, 0x7483, 0x1f1b, 0xa3b3, 0xc82b, 0x7ac2, 0x115a, 0xadf2, 0xc66a, 0x5105, 0x3a9d, 0x8635, 0xedad, 0x5f44, 0x34dc, 0x8874, 0xe3ec, 0x4d87, 0x261f, 0x9ab7, 0xf12f, 0x43c6, 0x285e, 0x94f6, 0xff6e, 0x1a09, 0x7191, 0xcd39, 0xa6a1, 0x1448, 0x7fd0, 0xc378, 0xa8e0, 0x068b, 0x6d13, 0xd1bb, 0xba23, 0x08ca, 0x6352, 0xdffa, 0xb462, 0x230d, 0x4895, 0xf43d, 0x9fa5, 0x2d4c, 0x46d4, 0xfa7c, 0x91e4, 0x3f8f, 0x5417, 0xe8bf, 0x8327, 0x31ce, 0x5a56, 0xe6fe, 0x8d66, 0x8c11, 0xe789, 0x5b21, 0x30b9, 0x8250, 0xe9c8, 0x5560, 0x3ef8, 0x9093, 0xfb0b, 0x47a3, 0x2c3b, 0x9ed2, 0xf54a, 0x49e2, 0x227a, 0xb515, 0xde8d, 0x6225, 0x09bd, 0xbb54, 0xd0cc, 0x6c64, 0x07fc, 0xa997, 0xc20f, 0x7ea7, 0x153f, 0xa7d6, 0xcc4e, 0x70e6, 0x1b7e, 0xfe19, 0x9581, 0x2929, 0x42b1, 0xf058, 0x9bc0, 0x2768, 0x4cf0, 0xe29b, 0x8903, 0x35ab, 0x5e33, 0xecda, 0x8742, 0x3bea, 0x5072, 0xc71d, 0xac85, 0x102d, 0x7bb5, 0xc95c, 0xa2c4, 0x1e6c, 0x75f4, 0xdb9f, 0xb007, 0x0caf, 0x6737, 0xd5de, 0xbe46, 0x02ee, 0x6976, ], ]; pub static CRC16_OPENSAFETY_A_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x5935, 0xb26a, 0xeb5f, 0x3de1, 0x64d4, 0x8f8b, 0xd6be, 0x7bc2, 0x22f7, 0xc9a8, 0x909d, 0x4623, 0x1f16, 0xf449, 0xad7c, 0xf784, 0xaeb1, 0x45ee, 0x1cdb, 0xca65, 0x9350, 0x780f, 0x213a, 0x8c46, 0xd573, 0x3e2c, 0x6719, 0xb1a7, 0xe892, 0x03cd, 0x5af8, 0xb63d, 0xef08, 0x0457, 0x5d62, 0x8bdc, 0xd2e9, 0x39b6, 0x6083, 0xcdff, 0x94ca, 0x7f95, 0x26a0, 0xf01e, 0xa92b, 0x4274, 0x1b41, 0x41b9, 0x188c, 0xf3d3, 0xaae6, 0x7c58, 0x256d, 0xce32, 0x9707, 0x3a7b, 0x634e, 0x8811, 0xd124, 0x079a, 0x5eaf, 0xb5f0, 0xecc5, 0x354f, 0x6c7a, 0x8725, 0xde10, 0x08ae, 0x519b, 0xbac4, 0xe3f1, 0x4e8d, 0x17b8, 0xfce7, 0xa5d2, 0x736c, 0x2a59, 0xc106, 0x9833, 0xc2cb, 0x9bfe, 0x70a1, 0x2994, 0xff2a, 0xa61f, 0x4d40, 0x1475, 0xb909, 0xe03c, 0x0b63, 0x5256, 0x84e8, 0xdddd, 0x3682, 0x6fb7, 0x8372, 0xda47, 0x3118, 0x682d, 0xbe93, 0xe7a6, 0x0cf9, 0x55cc, 0xf8b0, 0xa185, 0x4ada, 0x13ef, 0xc551, 0x9c64, 0x773b, 0x2e0e, 0x74f6, 0x2dc3, 0xc69c, 0x9fa9, 0x4917, 0x1022, 0xfb7d, 0xa248, 0x0f34, 0x5601, 0xbd5e, 0xe46b, 0x32d5, 0x6be0, 0x80bf, 0xd98a, 0x6a9e, 0x33ab, 0xd8f4, 0x81c1, 0x577f, 0x0e4a, 0xe515, 0xbc20, 0x115c, 0x4869, 0xa336, 0xfa03, 0x2cbd, 0x7588, 0x9ed7, 0xc7e2, 0x9d1a, 0xc42f, 0x2f70, 0x7645, 0xa0fb, 0xf9ce, 0x1291, 0x4ba4, 0xe6d8, 0xbfed, 0x54b2, 0x0d87, 0xdb39, 0x820c, 0x6953, 0x3066, 0xdca3, 0x8596, 0x6ec9, 0x37fc, 0xe142, 0xb877, 0x5328, 0x0a1d, 0xa761, 0xfe54, 0x150b, 0x4c3e, 0x9a80, 0xc3b5, 0x28ea, 0x71df, 0x2b27, 0x7212, 0x994d, 0xc078, 0x16c6, 0x4ff3, 0xa4ac, 0xfd99, 0x50e5, 0x09d0, 0xe28f, 0xbbba, 0x6d04, 0x3431, 0xdf6e, 0x865b, 0x5fd1, 0x06e4, 0xedbb, 0xb48e, 0x6230, 0x3b05, 0xd05a, 0x896f, 0x2413, 0x7d26, 0x9679, 0xcf4c, 0x19f2, 0x40c7, 0xab98, 0xf2ad, 0xa855, 0xf160, 0x1a3f, 0x430a, 0x95b4, 0xcc81, 0x27de, 0x7eeb, 0xd397, 0x8aa2, 0x61fd, 0x38c8, 0xee76, 0xb743, 0x5c1c, 0x0529, 0xe9ec, 0xb0d9, 0x5b86, 0x02b3, 0xd40d, 0x8d38, 0x6667, 0x3f52, 0x922e, 0xcb1b, 0x2044, 0x7971, 0xafcf, 0xf6fa, 0x1da5, 0x4490, 0x1e68, 0x475d, 0xac02, 0xf537, 0x2389, 0x7abc, 0x91e3, 0xc8d6, 0x65aa, 0x3c9f, 0xd7c0, 0x8ef5, 0x584b, 0x017e, 0xea21, 0xb314, ], [ 0x0000, 0xd53c, 0xf34d, 0x2671, 0xbfaf, 0x6a93, 0x4ce2, 0x99de, 0x266b, 0xf357, 0xd526, 0x001a, 0x99c4, 0x4cf8, 0x6a89, 0xbfb5, 0x4cd6, 0x99ea, 0xbf9b, 0x6aa7, 0xf379, 0x2645, 0x0034, 0xd508, 0x6abd, 0xbf81, 0x99f0, 0x4ccc, 0xd512, 0x002e, 0x265f, 0xf363, 0x99ac, 0x4c90, 0x6ae1, 0xbfdd, 0x2603, 0xf33f, 0xd54e, 0x0072, 0xbfc7, 0x6afb, 0x4c8a, 0x99b6, 0x0068, 0xd554, 0xf325, 0x2619, 0xd57a, 0x0046, 0x2637, 0xf30b, 0x6ad5, 0xbfe9, 0x9998, 0x4ca4, 0xf311, 0x262d, 0x005c, 0xd560, 0x4cbe, 0x9982, 0xbff3, 0x6acf, 0x6a6d, 0xbf51, 0x9920, 0x4c1c, 0xd5c2, 0x00fe, 0x268f, 0xf3b3, 0x4c06, 0x993a, 0xbf4b, 0x6a77, 0xf3a9, 0x2695, 0x00e4, 0xd5d8, 0x26bb, 0xf387, 0xd5f6, 0x00ca, 0x9914, 0x4c28, 0x6a59, 0xbf65, 0x00d0, 0xd5ec, 0xf39d, 0x26a1, 0xbf7f, 0x6a43, 0x4c32, 0x990e, 0xf3c1, 0x26fd, 0x008c, 0xd5b0, 0x4c6e, 0x9952, 0xbf23, 0x6a1f, 0xd5aa, 0x0096, 0x26e7, 0xf3db, 0x6a05, 0xbf39, 0x9948, 0x4c74, 0xbf17, 0x6a2b, 0x4c5a, 0x9966, 0x00b8, 0xd584, 0xf3f5, 0x26c9, 0x997c, 0x4c40, 0x6a31, 0xbf0d, 0x26d3, 0xf3ef, 0xd59e, 0x00a2, 0xd4da, 0x01e6, 0x2797, 0xf2ab, 0x6b75, 0xbe49, 0x9838, 0x4d04, 0xf2b1, 0x278d, 0x01fc, 0xd4c0, 0x4d1e, 0x9822, 0xbe53, 0x6b6f, 0x980c, 0x4d30, 0x6b41, 0xbe7d, 0x27a3, 0xf29f, 0xd4ee, 0x01d2, 0xbe67, 0x6b5b, 0x4d2a, 0x9816, 0x01c8, 0xd4f4, 0xf285, 0x27b9, 0x4d76, 0x984a, 0xbe3b, 0x6b07, 0xf2d9, 0x27e5, 0x0194, 0xd4a8, 0x6b1d, 0xbe21, 0x9850, 0x4d6c, 0xd4b2, 0x018e, 0x27ff, 0xf2c3, 0x01a0, 0xd49c, 0xf2ed, 0x27d1, 0xbe0f, 0x6b33, 0x4d42, 0x987e, 0x27cb, 0xf2f7, 0xd486, 0x01ba, 0x9864, 0x4d58, 0x6b29, 0xbe15, 0xbeb7, 0x6b8b, 0x4dfa, 0x98c6, 0x0118, 0xd424, 0xf255, 0x2769, 0x98dc, 0x4de0, 0x6b91, 0xbead, 0x2773, 0xf24f, 0xd43e, 0x0102, 0xf261, 0x275d, 0x012c, 0xd410, 0x4dce, 0x98f2, 0xbe83, 0x6bbf, 0xd40a, 0x0136, 0x2747, 0xf27b, 0x6ba5, 0xbe99, 0x98e8, 0x4dd4, 0x271b, 0xf227, 0xd456, 0x016a, 0x98b4, 0x4d88, 0x6bf9, 0xbec5, 0x0170, 0xd44c, 0xf23d, 0x2701, 0xbedf, 0x6be3, 0x4d92, 0x98ae, 0x6bcd, 0xbef1, 0x9880, 0x4dbc, 0xd462, 0x015e, 0x272f, 0xf213, 0x4da6, 0x989a, 0xbeeb, 0x6bd7, 0xf209, 0x2735, 0x0144, 0xd478, ], [ 0x0000, 0xf081, 0xb837, 0x48b6, 0x295b, 0xd9da, 0x916c, 0x61ed, 0x52b6, 0xa237, 0xea81, 0x1a00, 0x7bed, 0x8b6c, 0xc3da, 0x335b, 0xa56c, 0x55ed, 0x1d5b, 0xedda, 0x8c37, 0x7cb6, 0x3400, 0xc481, 0xf7da, 0x075b, 0x4fed, 0xbf6c, 0xde81, 0x2e00, 0x66b6, 0x9637, 0x13ed, 0xe36c, 0xabda, 0x5b5b, 0x3ab6, 0xca37, 0x8281, 0x7200, 0x415b, 0xb1da, 0xf96c, 0x09ed, 0x6800, 0x9881, 0xd037, 0x20b6, 0xb681, 0x4600, 0x0eb6, 0xfe37, 0x9fda, 0x6f5b, 0x27ed, 0xd76c, 0xe437, 0x14b6, 0x5c00, 0xac81, 0xcd6c, 0x3ded, 0x755b, 0x85da, 0x27da, 0xd75b, 0x9fed, 0x6f6c, 0x0e81, 0xfe00, 0xb6b6, 0x4637, 0x756c, 0x85ed, 0xcd5b, 0x3dda, 0x5c37, 0xacb6, 0xe400, 0x1481, 0x82b6, 0x7237, 0x3a81, 0xca00, 0xabed, 0x5b6c, 0x13da, 0xe35b, 0xd000, 0x2081, 0x6837, 0x98b6, 0xf95b, 0x09da, 0x416c, 0xb1ed, 0x3437, 0xc4b6, 0x8c00, 0x7c81, 0x1d6c, 0xeded, 0xa55b, 0x55da, 0x6681, 0x9600, 0xdeb6, 0x2e37, 0x4fda, 0xbf5b, 0xf7ed, 0x076c, 0x915b, 0x61da, 0x296c, 0xd9ed, 0xb800, 0x4881, 0x0037, 0xf0b6, 0xc3ed, 0x336c, 0x7bda, 0x8b5b, 0xeab6, 0x1a37, 0x5281, 0xa200, 0x4fb4, 0xbf35, 0xf783, 0x0702, 0x66ef, 0x966e, 0xded8, 0x2e59, 0x1d02, 0xed83, 0xa535, 0x55b4, 0x3459, 0xc4d8, 0x8c6e, 0x7cef, 0xead8, 0x1a59, 0x52ef, 0xa26e, 0xc383, 0x3302, 0x7bb4, 0x8b35, 0xb86e, 0x48ef, 0x0059, 0xf0d8, 0x9135, 0x61b4, 0x2902, 0xd983, 0x5c59, 0xacd8, 0xe46e, 0x14ef, 0x7502, 0x8583, 0xcd35, 0x3db4, 0x0eef, 0xfe6e, 0xb6d8, 0x4659, 0x27b4, 0xd735, 0x9f83, 0x6f02, 0xf935, 0x09b4, 0x4102, 0xb183, 0xd06e, 0x20ef, 0x6859, 0x98d8, 0xab83, 0x5b02, 0x13b4, 0xe335, 0x82d8, 0x7259, 0x3aef, 0xca6e, 0x686e, 0x98ef, 0xd059, 0x20d8, 0x4135, 0xb1b4, 0xf902, 0x0983, 0x3ad8, 0xca59, 0x82ef, 0x726e, 0x1383, 0xe302, 0xabb4, 0x5b35, 0xcd02, 0x3d83, 0x7535, 0x85b4, 0xe459, 0x14d8, 0x5c6e, 0xacef, 0x9fb4, 0x6f35, 0x2783, 0xd702, 0xb6ef, 0x466e, 0x0ed8, 0xfe59, 0x7b83, 0x8b02, 0xc3b4, 0x3335, 0x52d8, 0xa259, 0xeaef, 0x1a6e, 0x2935, 0xd9b4, 0x9102, 0x6183, 0x006e, 0xf0ef, 0xb859, 0x48d8, 0xdeef, 0x2e6e, 0x66d8, 0x9659, 0xf7b4, 0x0735, 0x4f83, 0xbf02, 0x8c59, 0x7cd8, 0x346e, 0xc4ef, 0xa502, 0x5583, 0x1d35, 0xedb4, ], [ 0x0000, 0x9f68, 0x67e5, 0xf88d, 0xcfca, 0x50a2, 0xa82f, 0x3747, 0xc6a1, 0x59c9, 0xa144, 0x3e2c, 0x096b, 0x9603, 0x6e8e, 0xf1e6, 0xd477, 0x4b1f, 0xb392, 0x2cfa, 0x1bbd, 0x84d5, 0x7c58, 0xe330, 0x12d6, 0x8dbe, 0x7533, 0xea5b, 0xdd1c, 0x4274, 0xbaf9, 0x2591, 0xf1db, 0x6eb3, 0x963e, 0x0956, 0x3e11, 0xa179, 0x59f4, 0xc69c, 0x377a, 0xa812, 0x509f, 0xcff7, 0xf8b0, 0x67d8, 0x9f55, 0x003d, 0x25ac, 0xbac4, 0x4249, 0xdd21, 0xea66, 0x750e, 0x8d83, 0x12eb, 0xe30d, 0x7c65, 0x84e8, 0x1b80, 0x2cc7, 0xb3af, 0x4b22, 0xd44a, 0xba83, 0x25eb, 0xdd66, 0x420e, 0x7549, 0xea21, 0x12ac, 0x8dc4, 0x7c22, 0xe34a, 0x1bc7, 0x84af, 0xb3e8, 0x2c80, 0xd40d, 0x4b65, 0x6ef4, 0xf19c, 0x0911, 0x9679, 0xa13e, 0x3e56, 0xc6db, 0x59b3, 0xa855, 0x373d, 0xcfb0, 0x50d8, 0x679f, 0xf8f7, 0x007a, 0x9f12, 0x4b58, 0xd430, 0x2cbd, 0xb3d5, 0x8492, 0x1bfa, 0xe377, 0x7c1f, 0x8df9, 0x1291, 0xea1c, 0x7574, 0x4233, 0xdd5b, 0x25d6, 0xbabe, 0x9f2f, 0x0047, 0xf8ca, 0x67a2, 0x50e5, 0xcf8d, 0x3700, 0xa868, 0x598e, 0xc6e6, 0x3e6b, 0xa103, 0x9644, 0x092c, 0xf1a1, 0x6ec9, 0x2c33, 0xb35b, 0x4bd6, 0xd4be, 0xe3f9, 0x7c91, 0x841c, 0x1b74, 0xea92, 0x75fa, 0x8d77, 0x121f, 0x2558, 0xba30, 0x42bd, 0xddd5, 0xf844, 0x672c, 0x9fa1, 0x00c9, 0x378e, 0xa8e6, 0x506b, 0xcf03, 0x3ee5, 0xa18d, 0x5900, 0xc668, 0xf12f, 0x6e47, 0x96ca, 0x09a2, 0xdde8, 0x4280, 0xba0d, 0x2565, 0x1222, 0x8d4a, 0x75c7, 0xeaaf, 0x1b49, 0x8421, 0x7cac, 0xe3c4, 0xd483, 0x4beb, 0xb366, 0x2c0e, 0x099f, 0x96f7, 0x6e7a, 0xf112, 0xc655, 0x593d, 0xa1b0, 0x3ed8, 0xcf3e, 0x5056, 0xa8db, 0x37b3, 0x00f4, 0x9f9c, 0x6711, 0xf879, 0x96b0, 0x09d8, 0xf155, 0x6e3d, 0x597a, 0xc612, 0x3e9f, 0xa1f7, 0x5011, 0xcf79, 0x37f4, 0xa89c, 0x9fdb, 0x00b3, 0xf83e, 0x6756, 0x42c7, 0xddaf, 0x2522, 0xba4a, 0x8d0d, 0x1265, 0xeae8, 0x7580, 0x8466, 0x1b0e, 0xe383, 0x7ceb, 0x4bac, 0xd4c4, 0x2c49, 0xb321, 0x676b, 0xf803, 0x008e, 0x9fe6, 0xa8a1, 0x37c9, 0xcf44, 0x502c, 0xa1ca, 0x3ea2, 0xc62f, 0x5947, 0x6e00, 0xf168, 0x09e5, 0x968d, 0xb31c, 0x2c74, 0xd4f9, 0x4b91, 0x7cd6, 0xe3be, 0x1b33, 0x845b, 0x75bd, 0xead5, 0x1258, 0x8d30, 0xba77, 0x251f, 0xdd92, 0x42fa, ], [ 0x0000, 0x5866, 0xb0cc, 0xe8aa, 0x38ad, 0x60cb, 0x8861, 0xd007, 0x715a, 0x293c, 0xc196, 0x99f0, 0x49f7, 0x1191, 0xf93b, 0xa15d, 0xe2b4, 0xbad2, 0x5278, 0x0a1e, 0xda19, 0x827f, 0x6ad5, 0x32b3, 0x93ee, 0xcb88, 0x2322, 0x7b44, 0xab43, 0xf325, 0x1b8f, 0x43e9, 0x9c5d, 0xc43b, 0x2c91, 0x74f7, 0xa4f0, 0xfc96, 0x143c, 0x4c5a, 0xed07, 0xb561, 0x5dcb, 0x05ad, 0xd5aa, 0x8dcc, 0x6566, 0x3d00, 0x7ee9, 0x268f, 0xce25, 0x9643, 0x4644, 0x1e22, 0xf688, 0xaeee, 0x0fb3, 0x57d5, 0xbf7f, 0xe719, 0x371e, 0x6f78, 0x87d2, 0xdfb4, 0x618f, 0x39e9, 0xd143, 0x8925, 0x5922, 0x0144, 0xe9ee, 0xb188, 0x10d5, 0x48b3, 0xa019, 0xf87f, 0x2878, 0x701e, 0x98b4, 0xc0d2, 0x833b, 0xdb5d, 0x33f7, 0x6b91, 0xbb96, 0xe3f0, 0x0b5a, 0x533c, 0xf261, 0xaa07, 0x42ad, 0x1acb, 0xcacc, 0x92aa, 0x7a00, 0x2266, 0xfdd2, 0xa5b4, 0x4d1e, 0x1578, 0xc57f, 0x9d19, 0x75b3, 0x2dd5, 0x8c88, 0xd4ee, 0x3c44, 0x6422, 0xb425, 0xec43, 0x04e9, 0x5c8f, 0x1f66, 0x4700, 0xafaa, 0xf7cc, 0x27cb, 0x7fad, 0x9707, 0xcf61, 0x6e3c, 0x365a, 0xdef0, 0x8696, 0x5691, 0x0ef7, 0xe65d, 0xbe3b, 0xc31e, 0x9b78, 0x73d2, 0x2bb4, 0xfbb3, 0xa3d5, 0x4b7f, 0x1319, 0xb244, 0xea22, 0x0288, 0x5aee, 0x8ae9, 0xd28f, 0x3a25, 0x6243, 0x21aa, 0x79cc, 0x9166, 0xc900, 0x1907, 0x4161, 0xa9cb, 0xf1ad, 0x50f0, 0x0896, 0xe03c, 0xb85a, 0x685d, 0x303b, 0xd891, 0x80f7, 0x5f43, 0x0725, 0xef8f, 0xb7e9, 0x67ee, 0x3f88, 0xd722, 0x8f44, 0x2e19, 0x767f, 0x9ed5, 0xc6b3, 0x16b4, 0x4ed2, 0xa678, 0xfe1e, 0xbdf7, 0xe591, 0x0d3b, 0x555d, 0x855a, 0xdd3c, 0x3596, 0x6df0, 0xccad, 0x94cb, 0x7c61, 0x2407, 0xf400, 0xac66, 0x44cc, 0x1caa, 0xa291, 0xfaf7, 0x125d, 0x4a3b, 0x9a3c, 0xc25a, 0x2af0, 0x7296, 0xd3cb, 0x8bad, 0x6307, 0x3b61, 0xeb66, 0xb300, 0x5baa, 0x03cc, 0x4025, 0x1843, 0xf0e9, 0xa88f, 0x7888, 0x20ee, 0xc844, 0x9022, 0x317f, 0x6919, 0x81b3, 0xd9d5, 0x09d2, 0x51b4, 0xb91e, 0xe178, 0x3ecc, 0x66aa, 0x8e00, 0xd666, 0x0661, 0x5e07, 0xb6ad, 0xeecb, 0x4f96, 0x17f0, 0xff5a, 0xa73c, 0x773b, 0x2f5d, 0xc7f7, 0x9f91, 0xdc78, 0x841e, 0x6cb4, 0x34d2, 0xe4d5, 0xbcb3, 0x5419, 0x0c7f, 0xad22, 0xf544, 0x1dee, 0x4588, 0x958f, 0xcde9, 0x2543, 0x7d25, ], [ 0x0000, 0xdf09, 0xe727, 0x382e, 0x977b, 0x4872, 0x705c, 0xaf55, 0x77c3, 0xa8ca, 0x90e4, 0x4fed, 0xe0b8, 0x3fb1, 0x079f, 0xd896, 0xef86, 0x308f, 0x08a1, 0xd7a8, 0x78fd, 0xa7f4, 0x9fda, 0x40d3, 0x9845, 0x474c, 0x7f62, 0xa06b, 0x0f3e, 0xd037, 0xe819, 0x3710, 0x8639, 0x5930, 0x611e, 0xbe17, 0x1142, 0xce4b, 0xf665, 0x296c, 0xf1fa, 0x2ef3, 0x16dd, 0xc9d4, 0x6681, 0xb988, 0x81a6, 0x5eaf, 0x69bf, 0xb6b6, 0x8e98, 0x5191, 0xfec4, 0x21cd, 0x19e3, 0xc6ea, 0x1e7c, 0xc175, 0xf95b, 0x2652, 0x8907, 0x560e, 0x6e20, 0xb129, 0x5547, 0x8a4e, 0xb260, 0x6d69, 0xc23c, 0x1d35, 0x251b, 0xfa12, 0x2284, 0xfd8d, 0xc5a3, 0x1aaa, 0xb5ff, 0x6af6, 0x52d8, 0x8dd1, 0xbac1, 0x65c8, 0x5de6, 0x82ef, 0x2dba, 0xf2b3, 0xca9d, 0x1594, 0xcd02, 0x120b, 0x2a25, 0xf52c, 0x5a79, 0x8570, 0xbd5e, 0x6257, 0xd37e, 0x0c77, 0x3459, 0xeb50, 0x4405, 0x9b0c, 0xa322, 0x7c2b, 0xa4bd, 0x7bb4, 0x439a, 0x9c93, 0x33c6, 0xeccf, 0xd4e1, 0x0be8, 0x3cf8, 0xe3f1, 0xdbdf, 0x04d6, 0xab83, 0x748a, 0x4ca4, 0x93ad, 0x4b3b, 0x9432, 0xac1c, 0x7315, 0xdc40, 0x0349, 0x3b67, 0xe46e, 0xaa8e, 0x7587, 0x4da9, 0x92a0, 0x3df5, 0xe2fc, 0xdad2, 0x05db, 0xdd4d, 0x0244, 0x3a6a, 0xe563, 0x4a36, 0x953f, 0xad11, 0x7218, 0x4508, 0x9a01, 0xa22f, 0x7d26, 0xd273, 0x0d7a, 0x3554, 0xea5d, 0x32cb, 0xedc2, 0xd5ec, 0x0ae5, 0xa5b0, 0x7ab9, 0x4297, 0x9d9e, 0x2cb7, 0xf3be, 0xcb90, 0x1499, 0xbbcc, 0x64c5, 0x5ceb, 0x83e2, 0x5b74, 0x847d, 0xbc53, 0x635a, 0xcc0f, 0x1306, 0x2b28, 0xf421, 0xc331, 0x1c38, 0x2416, 0xfb1f, 0x544a, 0x8b43, 0xb36d, 0x6c64, 0xb4f2, 0x6bfb, 0x53d5, 0x8cdc, 0x2389, 0xfc80, 0xc4ae, 0x1ba7, 0xffc9, 0x20c0, 0x18ee, 0xc7e7, 0x68b2, 0xb7bb, 0x8f95, 0x509c, 0x880a, 0x5703, 0x6f2d, 0xb024, 0x1f71, 0xc078, 0xf856, 0x275f, 0x104f, 0xcf46, 0xf768, 0x2861, 0x8734, 0x583d, 0x6013, 0xbf1a, 0x678c, 0xb885, 0x80ab, 0x5fa2, 0xf0f7, 0x2ffe, 0x17d0, 0xc8d9, 0x79f0, 0xa6f9, 0x9ed7, 0x41de, 0xee8b, 0x3182, 0x09ac, 0xd6a5, 0x0e33, 0xd13a, 0xe914, 0x361d, 0x9948, 0x4641, 0x7e6f, 0xa166, 0x9676, 0x497f, 0x7151, 0xae58, 0x010d, 0xde04, 0xe62a, 0x3923, 0xe1b5, 0x3ebc, 0x0692, 0xd99b, 0x76ce, 0xa9c7, 0x91e9, 0x4ee0, ], [ 0x0000, 0x0c29, 0x1852, 0x147b, 0x30a4, 0x3c8d, 0x28f6, 0x24df, 0x6148, 0x6d61, 0x791a, 0x7533, 0x51ec, 0x5dc5, 0x49be, 0x4597, 0xc290, 0xceb9, 0xdac2, 0xd6eb, 0xf234, 0xfe1d, 0xea66, 0xe64f, 0xa3d8, 0xaff1, 0xbb8a, 0xb7a3, 0x937c, 0x9f55, 0x8b2e, 0x8707, 0xdc15, 0xd03c, 0xc447, 0xc86e, 0xecb1, 0xe098, 0xf4e3, 0xf8ca, 0xbd5d, 0xb174, 0xa50f, 0xa926, 0x8df9, 0x81d0, 0x95ab, 0x9982, 0x1e85, 0x12ac, 0x06d7, 0x0afe, 0x2e21, 0x2208, 0x3673, 0x3a5a, 0x7fcd, 0x73e4, 0x679f, 0x6bb6, 0x4f69, 0x4340, 0x573b, 0x5b12, 0xe11f, 0xed36, 0xf94d, 0xf564, 0xd1bb, 0xdd92, 0xc9e9, 0xc5c0, 0x8057, 0x8c7e, 0x9805, 0x942c, 0xb0f3, 0xbcda, 0xa8a1, 0xa488, 0x238f, 0x2fa6, 0x3bdd, 0x37f4, 0x132b, 0x1f02, 0x0b79, 0x0750, 0x42c7, 0x4eee, 0x5a95, 0x56bc, 0x7263, 0x7e4a, 0x6a31, 0x6618, 0x3d0a, 0x3123, 0x2558, 0x2971, 0x0dae, 0x0187, 0x15fc, 0x19d5, 0x5c42, 0x506b, 0x4410, 0x4839, 0x6ce6, 0x60cf, 0x74b4, 0x789d, 0xff9a, 0xf3b3, 0xe7c8, 0xebe1, 0xcf3e, 0xc317, 0xd76c, 0xdb45, 0x9ed2, 0x92fb, 0x8680, 0x8aa9, 0xae76, 0xa25f, 0xb624, 0xba0d, 0x9b0b, 0x9722, 0x8359, 0x8f70, 0xabaf, 0xa786, 0xb3fd, 0xbfd4, 0xfa43, 0xf66a, 0xe211, 0xee38, 0xcae7, 0xc6ce, 0xd2b5, 0xde9c, 0x599b, 0x55b2, 0x41c9, 0x4de0, 0x693f, 0x6516, 0x716d, 0x7d44, 0x38d3, 0x34fa, 0x2081, 0x2ca8, 0x0877, 0x045e, 0x1025, 0x1c0c, 0x471e, 0x4b37, 0x5f4c, 0x5365, 0x77ba, 0x7b93, 0x6fe8, 0x63c1, 0x2656, 0x2a7f, 0x3e04, 0x322d, 0x16f2, 0x1adb, 0x0ea0, 0x0289, 0x858e, 0x89a7, 0x9ddc, 0x91f5, 0xb52a, 0xb903, 0xad78, 0xa151, 0xe4c6, 0xe8ef, 0xfc94, 0xf0bd, 0xd462, 0xd84b, 0xcc30, 0xc019, 0x7a14, 0x763d, 0x6246, 0x6e6f, 0x4ab0, 0x4699, 0x52e2, 0x5ecb, 0x1b5c, 0x1775, 0x030e, 0x0f27, 0x2bf8, 0x27d1, 0x33aa, 0x3f83, 0xb884, 0xb4ad, 0xa0d6, 0xacff, 0x8820, 0x8409, 0x9072, 0x9c5b, 0xd9cc, 0xd5e5, 0xc19e, 0xcdb7, 0xe968, 0xe541, 0xf13a, 0xfd13, 0xa601, 0xaa28, 0xbe53, 0xb27a, 0x96a5, 0x9a8c, 0x8ef7, 0x82de, 0xc749, 0xcb60, 0xdf1b, 0xd332, 0xf7ed, 0xfbc4, 0xefbf, 0xe396, 0x6491, 0x68b8, 0x7cc3, 0x70ea, 0x5435, 0x581c, 0x4c67, 0x404e, 0x05d9, 0x09f0, 0x1d8b, 0x11a2, 0x357d, 0x3954, 0x2d2f, 0x2106, ], [ 0x0000, 0x6f23, 0xde46, 0xb165, 0xe5b9, 0x8a9a, 0x3bff, 0x54dc, 0x9247, 0xfd64, 0x4c01, 0x2322, 0x77fe, 0x18dd, 0xa9b8, 0xc69b, 0x7dbb, 0x1298, 0xa3fd, 0xccde, 0x9802, 0xf721, 0x4644, 0x2967, 0xeffc, 0x80df, 0x31ba, 0x5e99, 0x0a45, 0x6566, 0xd403, 0xbb20, 0xfb76, 0x9455, 0x2530, 0x4a13, 0x1ecf, 0x71ec, 0xc089, 0xafaa, 0x6931, 0x0612, 0xb777, 0xd854, 0x8c88, 0xe3ab, 0x52ce, 0x3ded, 0x86cd, 0xe9ee, 0x588b, 0x37a8, 0x6374, 0x0c57, 0xbd32, 0xd211, 0x148a, 0x7ba9, 0xcacc, 0xa5ef, 0xf133, 0x9e10, 0x2f75, 0x4056, 0xafd9, 0xc0fa, 0x719f, 0x1ebc, 0x4a60, 0x2543, 0x9426, 0xfb05, 0x3d9e, 0x52bd, 0xe3d8, 0x8cfb, 0xd827, 0xb704, 0x0661, 0x6942, 0xd262, 0xbd41, 0x0c24, 0x6307, 0x37db, 0x58f8, 0xe99d, 0x86be, 0x4025, 0x2f06, 0x9e63, 0xf140, 0xa59c, 0xcabf, 0x7bda, 0x14f9, 0x54af, 0x3b8c, 0x8ae9, 0xe5ca, 0xb116, 0xde35, 0x6f50, 0x0073, 0xc6e8, 0xa9cb, 0x18ae, 0x778d, 0x2351, 0x4c72, 0xfd17, 0x9234, 0x2914, 0x4637, 0xf752, 0x9871, 0xccad, 0xa38e, 0x12eb, 0x7dc8, 0xbb53, 0xd470, 0x6515, 0x0a36, 0x5eea, 0x31c9, 0x80ac, 0xef8f, 0x0687, 0x69a4, 0xd8c1, 0xb7e2, 0xe33e, 0x8c1d, 0x3d78, 0x525b, 0x94c0, 0xfbe3, 0x4a86, 0x25a5, 0x7179, 0x1e5a, 0xaf3f, 0xc01c, 0x7b3c, 0x141f, 0xa57a, 0xca59, 0x9e85, 0xf1a6, 0x40c3, 0x2fe0, 0xe97b, 0x8658, 0x373d, 0x581e, 0x0cc2, 0x63e1, 0xd284, 0xbda7, 0xfdf1, 0x92d2, 0x23b7, 0x4c94, 0x1848, 0x776b, 0xc60e, 0xa92d, 0x6fb6, 0x0095, 0xb1f0, 0xded3, 0x8a0f, 0xe52c, 0x5449, 0x3b6a, 0x804a, 0xef69, 0x5e0c, 0x312f, 0x65f3, 0x0ad0, 0xbbb5, 0xd496, 0x120d, 0x7d2e, 0xcc4b, 0xa368, 0xf7b4, 0x9897, 0x29f2, 0x46d1, 0xa95e, 0xc67d, 0x7718, 0x183b, 0x4ce7, 0x23c4, 0x92a1, 0xfd82, 0x3b19, 0x543a, 0xe55f, 0x8a7c, 0xdea0, 0xb183, 0x00e6, 0x6fc5, 0xd4e5, 0xbbc6, 0x0aa3, 0x6580, 0x315c, 0x5e7f, 0xef1a, 0x8039, 0x46a2, 0x2981, 0x98e4, 0xf7c7, 0xa31b, 0xcc38, 0x7d5d, 0x127e, 0x5228, 0x3d0b, 0x8c6e, 0xe34d, 0xb791, 0xd8b2, 0x69d7, 0x06f4, 0xc06f, 0xaf4c, 0x1e29, 0x710a, 0x25d6, 0x4af5, 0xfb90, 0x94b3, 0x2f93, 0x40b0, 0xf1d5, 0x9ef6, 0xca2a, 0xa509, 0x146c, 0x7b4f, 0xbdd4, 0xd2f7, 0x6392, 0x0cb1, 0x586d, 0x374e, 0x862b, 0xe908, ], [ 0x0000, 0x0d0e, 0x1a1c, 0x1712, 0x3438, 0x3936, 0x2e24, 0x232a, 0x6870, 0x657e, 0x726c, 0x7f62, 0x5c48, 0x5146, 0x4654, 0x4b5a, 0xd0e0, 0xddee, 0xcafc, 0xc7f2, 0xe4d8, 0xe9d6, 0xfec4, 0xf3ca, 0xb890, 0xb59e, 0xa28c, 0xaf82, 0x8ca8, 0x81a6, 0x96b4, 0x9bba, 0xf8f5, 0xf5fb, 0xe2e9, 0xefe7, 0xcccd, 0xc1c3, 0xd6d1, 0xdbdf, 0x9085, 0x9d8b, 0x8a99, 0x8797, 0xa4bd, 0xa9b3, 0xbea1, 0xb3af, 0x2815, 0x251b, 0x3209, 0x3f07, 0x1c2d, 0x1123, 0x0631, 0x0b3f, 0x4065, 0x4d6b, 0x5a79, 0x5777, 0x745d, 0x7953, 0x6e41, 0x634f, 0xa8df, 0xa5d1, 0xb2c3, 0xbfcd, 0x9ce7, 0x91e9, 0x86fb, 0x8bf5, 0xc0af, 0xcda1, 0xdab3, 0xd7bd, 0xf497, 0xf999, 0xee8b, 0xe385, 0x783f, 0x7531, 0x6223, 0x6f2d, 0x4c07, 0x4109, 0x561b, 0x5b15, 0x104f, 0x1d41, 0x0a53, 0x075d, 0x2477, 0x2979, 0x3e6b, 0x3365, 0x502a, 0x5d24, 0x4a36, 0x4738, 0x6412, 0x691c, 0x7e0e, 0x7300, 0x385a, 0x3554, 0x2246, 0x2f48, 0x0c62, 0x016c, 0x167e, 0x1b70, 0x80ca, 0x8dc4, 0x9ad6, 0x97d8, 0xb4f2, 0xb9fc, 0xaeee, 0xa3e0, 0xe8ba, 0xe5b4, 0xf2a6, 0xffa8, 0xdc82, 0xd18c, 0xc69e, 0xcb90, 0x088b, 0x0585, 0x1297, 0x1f99, 0x3cb3, 0x31bd, 0x26af, 0x2ba1, 0x60fb, 0x6df5, 0x7ae7, 0x77e9, 0x54c3, 0x59cd, 0x4edf, 0x43d1, 0xd86b, 0xd565, 0xc277, 0xcf79, 0xec53, 0xe15d, 0xf64f, 0xfb41, 0xb01b, 0xbd15, 0xaa07, 0xa709, 0x8423, 0x892d, 0x9e3f, 0x9331, 0xf07e, 0xfd70, 0xea62, 0xe76c, 0xc446, 0xc948, 0xde5a, 0xd354, 0x980e, 0x9500, 0x8212, 0x8f1c, 0xac36, 0xa138, 0xb62a, 0xbb24, 0x209e, 0x2d90, 0x3a82, 0x378c, 0x14a6, 0x19a8, 0x0eba, 0x03b4, 0x48ee, 0x45e0, 0x52f2, 0x5ffc, 0x7cd6, 0x71d8, 0x66ca, 0x6bc4, 0xa054, 0xad5a, 0xba48, 0xb746, 0x946c, 0x9962, 0x8e70, 0x837e, 0xc824, 0xc52a, 0xd238, 0xdf36, 0xfc1c, 0xf112, 0xe600, 0xeb0e, 0x70b4, 0x7dba, 0x6aa8, 0x67a6, 0x448c, 0x4982, 0x5e90, 0x539e, 0x18c4, 0x15ca, 0x02d8, 0x0fd6, 0x2cfc, 0x21f2, 0x36e0, 0x3bee, 0x58a1, 0x55af, 0x42bd, 0x4fb3, 0x6c99, 0x6197, 0x7685, 0x7b8b, 0x30d1, 0x3ddf, 0x2acd, 0x27c3, 0x04e9, 0x09e7, 0x1ef5, 0x13fb, 0x8841, 0x854f, 0x925d, 0x9f53, 0xbc79, 0xb177, 0xa665, 0xab6b, 0xe031, 0xed3f, 0xfa2d, 0xf723, 0xd409, 0xd907, 0xce15, 0xc31b, ], [ 0x0000, 0x1116, 0x222c, 0x333a, 0x4458, 0x554e, 0x6674, 0x7762, 0x88b0, 0x99a6, 0xaa9c, 0xbb8a, 0xcce8, 0xddfe, 0xeec4, 0xffd2, 0x4855, 0x5943, 0x6a79, 0x7b6f, 0x0c0d, 0x1d1b, 0x2e21, 0x3f37, 0xc0e5, 0xd1f3, 0xe2c9, 0xf3df, 0x84bd, 0x95ab, 0xa691, 0xb787, 0x90aa, 0x81bc, 0xb286, 0xa390, 0xd4f2, 0xc5e4, 0xf6de, 0xe7c8, 0x181a, 0x090c, 0x3a36, 0x2b20, 0x5c42, 0x4d54, 0x7e6e, 0x6f78, 0xd8ff, 0xc9e9, 0xfad3, 0xebc5, 0x9ca7, 0x8db1, 0xbe8b, 0xaf9d, 0x504f, 0x4159, 0x7263, 0x6375, 0x1417, 0x0501, 0x363b, 0x272d, 0x7861, 0x6977, 0x5a4d, 0x4b5b, 0x3c39, 0x2d2f, 0x1e15, 0x0f03, 0xf0d1, 0xe1c7, 0xd2fd, 0xc3eb, 0xb489, 0xa59f, 0x96a5, 0x87b3, 0x3034, 0x2122, 0x1218, 0x030e, 0x746c, 0x657a, 0x5640, 0x4756, 0xb884, 0xa992, 0x9aa8, 0x8bbe, 0xfcdc, 0xedca, 0xdef0, 0xcfe6, 0xe8cb, 0xf9dd, 0xcae7, 0xdbf1, 0xac93, 0xbd85, 0x8ebf, 0x9fa9, 0x607b, 0x716d, 0x4257, 0x5341, 0x2423, 0x3535, 0x060f, 0x1719, 0xa09e, 0xb188, 0x82b2, 0x93a4, 0xe4c6, 0xf5d0, 0xc6ea, 0xd7fc, 0x282e, 0x3938, 0x0a02, 0x1b14, 0x6c76, 0x7d60, 0x4e5a, 0x5f4c, 0xf0c2, 0xe1d4, 0xd2ee, 0xc3f8, 0xb49a, 0xa58c, 0x96b6, 0x87a0, 0x7872, 0x6964, 0x5a5e, 0x4b48, 0x3c2a, 0x2d3c, 0x1e06, 0x0f10, 0xb897, 0xa981, 0x9abb, 0x8bad, 0xfccf, 0xedd9, 0xdee3, 0xcff5, 0x3027, 0x2131, 0x120b, 0x031d, 0x747f, 0x6569, 0x5653, 0x4745, 0x6068, 0x717e, 0x4244, 0x5352, 0x2430, 0x3526, 0x061c, 0x170a, 0xe8d8, 0xf9ce, 0xcaf4, 0xdbe2, 0xac80, 0xbd96, 0x8eac, 0x9fba, 0x283d, 0x392b, 0x0a11, 0x1b07, 0x6c65, 0x7d73, 0x4e49, 0x5f5f, 0xa08d, 0xb19b, 0x82a1, 0x93b7, 0xe4d5, 0xf5c3, 0xc6f9, 0xd7ef, 0x88a3, 0x99b5, 0xaa8f, 0xbb99, 0xccfb, 0xdded, 0xeed7, 0xffc1, 0x0013, 0x1105, 0x223f, 0x3329, 0x444b, 0x555d, 0x6667, 0x7771, 0xc0f6, 0xd1e0, 0xe2da, 0xf3cc, 0x84ae, 0x95b8, 0xa682, 0xb794, 0x4846, 0x5950, 0x6a6a, 0x7b7c, 0x0c1e, 0x1d08, 0x2e32, 0x3f24, 0x1809, 0x091f, 0x3a25, 0x2b33, 0x5c51, 0x4d47, 0x7e7d, 0x6f6b, 0x90b9, 0x81af, 0xb295, 0xa383, 0xd4e1, 0xc5f7, 0xf6cd, 0xe7db, 0x505c, 0x414a, 0x7270, 0x6366, 0x1404, 0x0512, 0x3628, 0x273e, 0xd8ec, 0xc9fa, 0xfac0, 0xebd6, 0x9cb4, 0x8da2, 0xbe98, 0xaf8e, ], [ 0x0000, 0xb8b1, 0x2857, 0x90e6, 0x50ae, 0xe81f, 0x78f9, 0xc048, 0xa15c, 0x19ed, 0x890b, 0x31ba, 0xf1f2, 0x4943, 0xd9a5, 0x6114, 0x1b8d, 0xa33c, 0x33da, 0x8b6b, 0x4b23, 0xf392, 0x6374, 0xdbc5, 0xbad1, 0x0260, 0x9286, 0x2a37, 0xea7f, 0x52ce, 0xc228, 0x7a99, 0x371a, 0x8fab, 0x1f4d, 0xa7fc, 0x67b4, 0xdf05, 0x4fe3, 0xf752, 0x9646, 0x2ef7, 0xbe11, 0x06a0, 0xc6e8, 0x7e59, 0xeebf, 0x560e, 0x2c97, 0x9426, 0x04c0, 0xbc71, 0x7c39, 0xc488, 0x546e, 0xecdf, 0x8dcb, 0x357a, 0xa59c, 0x1d2d, 0xdd65, 0x65d4, 0xf532, 0x4d83, 0x6e34, 0xd685, 0x4663, 0xfed2, 0x3e9a, 0x862b, 0x16cd, 0xae7c, 0xcf68, 0x77d9, 0xe73f, 0x5f8e, 0x9fc6, 0x2777, 0xb791, 0x0f20, 0x75b9, 0xcd08, 0x5dee, 0xe55f, 0x2517, 0x9da6, 0x0d40, 0xb5f1, 0xd4e5, 0x6c54, 0xfcb2, 0x4403, 0x844b, 0x3cfa, 0xac1c, 0x14ad, 0x592e, 0xe19f, 0x7179, 0xc9c8, 0x0980, 0xb131, 0x21d7, 0x9966, 0xf872, 0x40c3, 0xd025, 0x6894, 0xa8dc, 0x106d, 0x808b, 0x383a, 0x42a3, 0xfa12, 0x6af4, 0xd245, 0x120d, 0xaabc, 0x3a5a, 0x82eb, 0xe3ff, 0x5b4e, 0xcba8, 0x7319, 0xb351, 0x0be0, 0x9b06, 0x23b7, 0xdc68, 0x64d9, 0xf43f, 0x4c8e, 0x8cc6, 0x3477, 0xa491, 0x1c20, 0x7d34, 0xc585, 0x5563, 0xedd2, 0x2d9a, 0x952b, 0x05cd, 0xbd7c, 0xc7e5, 0x7f54, 0xefb2, 0x5703, 0x974b, 0x2ffa, 0xbf1c, 0x07ad, 0x66b9, 0xde08, 0x4eee, 0xf65f, 0x3617, 0x8ea6, 0x1e40, 0xa6f1, 0xeb72, 0x53c3, 0xc325, 0x7b94, 0xbbdc, 0x036d, 0x938b, 0x2b3a, 0x4a2e, 0xf29f, 0x6279, 0xdac8, 0x1a80, 0xa231, 0x32d7, 0x8a66, 0xf0ff, 0x484e, 0xd8a8, 0x6019, 0xa051, 0x18e0, 0x8806, 0x30b7, 0x51a3, 0xe912, 0x79f4, 0xc145, 0x010d, 0xb9bc, 0x295a, 0x91eb, 0xb25c, 0x0aed, 0x9a0b, 0x22ba, 0xe2f2, 0x5a43, 0xcaa5, 0x7214, 0x1300, 0xabb1, 0x3b57, 0x83e6, 0x43ae, 0xfb1f, 0x6bf9, 0xd348, 0xa9d1, 0x1160, 0x8186, 0x3937, 0xf97f, 0x41ce, 0xd128, 0x6999, 0x088d, 0xb03c, 0x20da, 0x986b, 0x5823, 0xe092, 0x7074, 0xc8c5, 0x8546, 0x3df7, 0xad11, 0x15a0, 0xd5e8, 0x6d59, 0xfdbf, 0x450e, 0x241a, 0x9cab, 0x0c4d, 0xb4fc, 0x74b4, 0xcc05, 0x5ce3, 0xe452, 0x9ecb, 0x267a, 0xb69c, 0x0e2d, 0xce65, 0x76d4, 0xe632, 0x5e83, 0x3f97, 0x8726, 0x17c0, 0xaf71, 0x6f39, 0xd788, 0x476e, 0xffdf, ], [ 0x0000, 0xe1e5, 0x9aff, 0x7b1a, 0x6ccb, 0x8d2e, 0xf634, 0x17d1, 0xd996, 0x3873, 0x4369, 0xa28c, 0xb55d, 0x54b8, 0x2fa2, 0xce47, 0xea19, 0x0bfc, 0x70e6, 0x9103, 0x86d2, 0x6737, 0x1c2d, 0xfdc8, 0x338f, 0xd26a, 0xa970, 0x4895, 0x5f44, 0xbea1, 0xc5bb, 0x245e, 0x8d07, 0x6ce2, 0x17f8, 0xf61d, 0xe1cc, 0x0029, 0x7b33, 0x9ad6, 0x5491, 0xb574, 0xce6e, 0x2f8b, 0x385a, 0xd9bf, 0xa2a5, 0x4340, 0x671e, 0x86fb, 0xfde1, 0x1c04, 0x0bd5, 0xea30, 0x912a, 0x70cf, 0xbe88, 0x5f6d, 0x2477, 0xc592, 0xd243, 0x33a6, 0x48bc, 0xa959, 0x433b, 0xa2de, 0xd9c4, 0x3821, 0x2ff0, 0xce15, 0xb50f, 0x54ea, 0x9aad, 0x7b48, 0x0052, 0xe1b7, 0xf666, 0x1783, 0x6c99, 0x8d7c, 0xa922, 0x48c7, 0x33dd, 0xd238, 0xc5e9, 0x240c, 0x5f16, 0xbef3, 0x70b4, 0x9151, 0xea4b, 0x0bae, 0x1c7f, 0xfd9a, 0x8680, 0x6765, 0xce3c, 0x2fd9, 0x54c3, 0xb526, 0xa2f7, 0x4312, 0x3808, 0xd9ed, 0x17aa, 0xf64f, 0x8d55, 0x6cb0, 0x7b61, 0x9a84, 0xe19e, 0x007b, 0x2425, 0xc5c0, 0xbeda, 0x5f3f, 0x48ee, 0xa90b, 0xd211, 0x33f4, 0xfdb3, 0x1c56, 0x674c, 0x86a9, 0x9178, 0x709d, 0x0b87, 0xea62, 0x8676, 0x6793, 0x1c89, 0xfd6c, 0xeabd, 0x0b58, 0x7042, 0x91a7, 0x5fe0, 0xbe05, 0xc51f, 0x24fa, 0x332b, 0xd2ce, 0xa9d4, 0x4831, 0x6c6f, 0x8d8a, 0xf690, 0x1775, 0x00a4, 0xe141, 0x9a5b, 0x7bbe, 0xb5f9, 0x541c, 0x2f06, 0xcee3, 0xd932, 0x38d7, 0x43cd, 0xa228, 0x0b71, 0xea94, 0x918e, 0x706b, 0x67ba, 0x865f, 0xfd45, 0x1ca0, 0xd2e7, 0x3302, 0x4818, 0xa9fd, 0xbe2c, 0x5fc9, 0x24d3, 0xc536, 0xe168, 0x008d, 0x7b97, 0x9a72, 0x8da3, 0x6c46, 0x175c, 0xf6b9, 0x38fe, 0xd91b, 0xa201, 0x43e4, 0x5435, 0xb5d0, 0xceca, 0x2f2f, 0xc54d, 0x24a8, 0x5fb2, 0xbe57, 0xa986, 0x4863, 0x3379, 0xd29c, 0x1cdb, 0xfd3e, 0x8624, 0x67c1, 0x7010, 0x91f5, 0xeaef, 0x0b0a, 0x2f54, 0xceb1, 0xb5ab, 0x544e, 0x439f, 0xa27a, 0xd960, 0x3885, 0xf6c2, 0x1727, 0x6c3d, 0x8dd8, 0x9a09, 0x7bec, 0x00f6, 0xe113, 0x484a, 0xa9af, 0xd2b5, 0x3350, 0x2481, 0xc564, 0xbe7e, 0x5f9b, 0x91dc, 0x7039, 0x0b23, 0xeac6, 0xfd17, 0x1cf2, 0x67e8, 0x860d, 0xa253, 0x43b6, 0x38ac, 0xd949, 0xce98, 0x2f7d, 0x5467, 0xb582, 0x7bc5, 0x9a20, 0xe13a, 0x00df, 0x170e, 0xf6eb, 0x8df1, 0x6c14, ], [ 0x0000, 0x55d9, 0xabb2, 0xfe6b, 0x0e51, 0x5b88, 0xa5e3, 0xf03a, 0x1ca2, 0x497b, 0xb710, 0xe2c9, 0x12f3, 0x472a, 0xb941, 0xec98, 0x3944, 0x6c9d, 0x92f6, 0xc72f, 0x3715, 0x62cc, 0x9ca7, 0xc97e, 0x25e6, 0x703f, 0x8e54, 0xdb8d, 0x2bb7, 0x7e6e, 0x8005, 0xd5dc, 0x7288, 0x2751, 0xd93a, 0x8ce3, 0x7cd9, 0x2900, 0xd76b, 0x82b2, 0x6e2a, 0x3bf3, 0xc598, 0x9041, 0x607b, 0x35a2, 0xcbc9, 0x9e10, 0x4bcc, 0x1e15, 0xe07e, 0xb5a7, 0x459d, 0x1044, 0xee2f, 0xbbf6, 0x576e, 0x02b7, 0xfcdc, 0xa905, 0x593f, 0x0ce6, 0xf28d, 0xa754, 0xe510, 0xb0c9, 0x4ea2, 0x1b7b, 0xeb41, 0xbe98, 0x40f3, 0x152a, 0xf9b2, 0xac6b, 0x5200, 0x07d9, 0xf7e3, 0xa23a, 0x5c51, 0x0988, 0xdc54, 0x898d, 0x77e6, 0x223f, 0xd205, 0x87dc, 0x79b7, 0x2c6e, 0xc0f6, 0x952f, 0x6b44, 0x3e9d, 0xcea7, 0x9b7e, 0x6515, 0x30cc, 0x9798, 0xc241, 0x3c2a, 0x69f3, 0x99c9, 0xcc10, 0x327b, 0x67a2, 0x8b3a, 0xdee3, 0x2088, 0x7551, 0x856b, 0xd0b2, 0x2ed9, 0x7b00, 0xaedc, 0xfb05, 0x056e, 0x50b7, 0xa08d, 0xf554, 0x0b3f, 0x5ee6, 0xb27e, 0xe7a7, 0x19cc, 0x4c15, 0xbc2f, 0xe9f6, 0x179d, 0x4244, 0x9315, 0xc6cc, 0x38a7, 0x6d7e, 0x9d44, 0xc89d, 0x36f6, 0x632f, 0x8fb7, 0xda6e, 0x2405, 0x71dc, 0x81e6, 0xd43f, 0x2a54, 0x7f8d, 0xaa51, 0xff88, 0x01e3, 0x543a, 0xa400, 0xf1d9, 0x0fb2, 0x5a6b, 0xb6f3, 0xe32a, 0x1d41, 0x4898, 0xb8a2, 0xed7b, 0x1310, 0x46c9, 0xe19d, 0xb444, 0x4a2f, 0x1ff6, 0xefcc, 0xba15, 0x447e, 0x11a7, 0xfd3f, 0xa8e6, 0x568d, 0x0354, 0xf36e, 0xa6b7, 0x58dc, 0x0d05, 0xd8d9, 0x8d00, 0x736b, 0x26b2, 0xd688, 0x8351, 0x7d3a, 0x28e3, 0xc47b, 0x91a2, 0x6fc9, 0x3a10, 0xca2a, 0x9ff3, 0x6198, 0x3441, 0x7605, 0x23dc, 0xddb7, 0x886e, 0x7854, 0x2d8d, 0xd3e6, 0x863f, 0x6aa7, 0x3f7e, 0xc115, 0x94cc, 0x64f6, 0x312f, 0xcf44, 0x9a9d, 0x4f41, 0x1a98, 0xe4f3, 0xb12a, 0x4110, 0x14c9, 0xeaa2, 0xbf7b, 0x53e3, 0x063a, 0xf851, 0xad88, 0x5db2, 0x086b, 0xf600, 0xa3d9, 0x048d, 0x5154, 0xaf3f, 0xfae6, 0x0adc, 0x5f05, 0xa16e, 0xf4b7, 0x182f, 0x4df6, 0xb39d, 0xe644, 0x167e, 0x43a7, 0xbdcc, 0xe815, 0x3dc9, 0x6810, 0x967b, 0xc3a2, 0x3398, 0x6641, 0x982a, 0xcdf3, 0x216b, 0x74b2, 0x8ad9, 0xdf00, 0x2f3a, 0x7ae3, 0x8488, 0xd151, ], [ 0x0000, 0x7f1f, 0xfe3e, 0x8121, 0xa549, 0xda56, 0x5b77, 0x2468, 0x13a7, 0x6cb8, 0xed99, 0x9286, 0xb6ee, 0xc9f1, 0x48d0, 0x37cf, 0x274e, 0x5851, 0xd970, 0xa66f, 0x8207, 0xfd18, 0x7c39, 0x0326, 0x34e9, 0x4bf6, 0xcad7, 0xb5c8, 0x91a0, 0xeebf, 0x6f9e, 0x1081, 0x4e9c, 0x3183, 0xb0a2, 0xcfbd, 0xebd5, 0x94ca, 0x15eb, 0x6af4, 0x5d3b, 0x2224, 0xa305, 0xdc1a, 0xf872, 0x876d, 0x064c, 0x7953, 0x69d2, 0x16cd, 0x97ec, 0xe8f3, 0xcc9b, 0xb384, 0x32a5, 0x4dba, 0x7a75, 0x056a, 0x844b, 0xfb54, 0xdf3c, 0xa023, 0x2102, 0x5e1d, 0x9d38, 0xe227, 0x6306, 0x1c19, 0x3871, 0x476e, 0xc64f, 0xb950, 0x8e9f, 0xf180, 0x70a1, 0x0fbe, 0x2bd6, 0x54c9, 0xd5e8, 0xaaf7, 0xba76, 0xc569, 0x4448, 0x3b57, 0x1f3f, 0x6020, 0xe101, 0x9e1e, 0xa9d1, 0xd6ce, 0x57ef, 0x28f0, 0x0c98, 0x7387, 0xf2a6, 0x8db9, 0xd3a4, 0xacbb, 0x2d9a, 0x5285, 0x76ed, 0x09f2, 0x88d3, 0xf7cc, 0xc003, 0xbf1c, 0x3e3d, 0x4122, 0x654a, 0x1a55, 0x9b74, 0xe46b, 0xf4ea, 0x8bf5, 0x0ad4, 0x75cb, 0x51a3, 0x2ebc, 0xaf9d, 0xd082, 0xe74d, 0x9852, 0x1973, 0x666c, 0x4204, 0x3d1b, 0xbc3a, 0xc325, 0x6345, 0x1c5a, 0x9d7b, 0xe264, 0xc60c, 0xb913, 0x3832, 0x472d, 0x70e2, 0x0ffd, 0x8edc, 0xf1c3, 0xd5ab, 0xaab4, 0x2b95, 0x548a, 0x440b, 0x3b14, 0xba35, 0xc52a, 0xe142, 0x9e5d, 0x1f7c, 0x6063, 0x57ac, 0x28b3, 0xa992, 0xd68d, 0xf2e5, 0x8dfa, 0x0cdb, 0x73c4, 0x2dd9, 0x52c6, 0xd3e7, 0xacf8, 0x8890, 0xf78f, 0x76ae, 0x09b1, 0x3e7e, 0x4161, 0xc040, 0xbf5f, 0x9b37, 0xe428, 0x6509, 0x1a16, 0x0a97, 0x7588, 0xf4a9, 0x8bb6, 0xafde, 0xd0c1, 0x51e0, 0x2eff, 0x1930, 0x662f, 0xe70e, 0x9811, 0xbc79, 0xc366, 0x4247, 0x3d58, 0xfe7d, 0x8162, 0x0043, 0x7f5c, 0x5b34, 0x242b, 0xa50a, 0xda15, 0xedda, 0x92c5, 0x13e4, 0x6cfb, 0x4893, 0x378c, 0xb6ad, 0xc9b2, 0xd933, 0xa62c, 0x270d, 0x5812, 0x7c7a, 0x0365, 0x8244, 0xfd5b, 0xca94, 0xb58b, 0x34aa, 0x4bb5, 0x6fdd, 0x10c2, 0x91e3, 0xeefc, 0xb0e1, 0xcffe, 0x4edf, 0x31c0, 0x15a8, 0x6ab7, 0xeb96, 0x9489, 0xa346, 0xdc59, 0x5d78, 0x2267, 0x060f, 0x7910, 0xf831, 0x872e, 0x97af, 0xe8b0, 0x6991, 0x168e, 0x32e6, 0x4df9, 0xccd8, 0xb3c7, 0x8408, 0xfb17, 0x7a36, 0x0529, 0x2141, 0x5e5e, 0xdf7f, 0xa060, ], [ 0x0000, 0xc68a, 0xd421, 0x12ab, 0xf177, 0x37fd, 0x2556, 0xe3dc, 0xbbdb, 0x7d51, 0x6ffa, 0xa970, 0x4aac, 0x8c26, 0x9e8d, 0x5807, 0x2e83, 0xe809, 0xfaa2, 0x3c28, 0xdff4, 0x197e, 0x0bd5, 0xcd5f, 0x9558, 0x53d2, 0x4179, 0x87f3, 0x642f, 0xa2a5, 0xb00e, 0x7684, 0x5d06, 0x9b8c, 0x8927, 0x4fad, 0xac71, 0x6afb, 0x7850, 0xbeda, 0xe6dd, 0x2057, 0x32fc, 0xf476, 0x17aa, 0xd120, 0xc38b, 0x0501, 0x7385, 0xb50f, 0xa7a4, 0x612e, 0x82f2, 0x4478, 0x56d3, 0x9059, 0xc85e, 0x0ed4, 0x1c7f, 0xdaf5, 0x3929, 0xffa3, 0xed08, 0x2b82, 0xba0c, 0x7c86, 0x6e2d, 0xa8a7, 0x4b7b, 0x8df1, 0x9f5a, 0x59d0, 0x01d7, 0xc75d, 0xd5f6, 0x137c, 0xf0a0, 0x362a, 0x2481, 0xe20b, 0x948f, 0x5205, 0x40ae, 0x8624, 0x65f8, 0xa372, 0xb1d9, 0x7753, 0x2f54, 0xe9de, 0xfb75, 0x3dff, 0xde23, 0x18a9, 0x0a02, 0xcc88, 0xe70a, 0x2180, 0x332b, 0xf5a1, 0x167d, 0xd0f7, 0xc25c, 0x04d6, 0x5cd1, 0x9a5b, 0x88f0, 0x4e7a, 0xada6, 0x6b2c, 0x7987, 0xbf0d, 0xc989, 0x0f03, 0x1da8, 0xdb22, 0x38fe, 0xfe74, 0xecdf, 0x2a55, 0x7252, 0xb4d8, 0xa673, 0x60f9, 0x8325, 0x45af, 0x5704, 0x918e, 0x2d2d, 0xeba7, 0xf90c, 0x3f86, 0xdc5a, 0x1ad0, 0x087b, 0xcef1, 0x96f6, 0x507c, 0x42d7, 0x845d, 0x6781, 0xa10b, 0xb3a0, 0x752a, 0x03ae, 0xc524, 0xd78f, 0x1105, 0xf2d9, 0x3453, 0x26f8, 0xe072, 0xb875, 0x7eff, 0x6c54, 0xaade, 0x4902, 0x8f88, 0x9d23, 0x5ba9, 0x702b, 0xb6a1, 0xa40a, 0x6280, 0x815c, 0x47d6, 0x557d, 0x93f7, 0xcbf0, 0x0d7a, 0x1fd1, 0xd95b, 0x3a87, 0xfc0d, 0xeea6, 0x282c, 0x5ea8, 0x9822, 0x8a89, 0x4c03, 0xafdf, 0x6955, 0x7bfe, 0xbd74, 0xe573, 0x23f9, 0x3152, 0xf7d8, 0x1404, 0xd28e, 0xc025, 0x06af, 0x9721, 0x51ab, 0x4300, 0x858a, 0x6656, 0xa0dc, 0xb277, 0x74fd, 0x2cfa, 0xea70, 0xf8db, 0x3e51, 0xdd8d, 0x1b07, 0x09ac, 0xcf26, 0xb9a2, 0x7f28, 0x6d83, 0xab09, 0x48d5, 0x8e5f, 0x9cf4, 0x5a7e, 0x0279, 0xc4f3, 0xd658, 0x10d2, 0xf30e, 0x3584, 0x272f, 0xe1a5, 0xca27, 0x0cad, 0x1e06, 0xd88c, 0x3b50, 0xfdda, 0xef71, 0x29fb, 0x71fc, 0xb776, 0xa5dd, 0x6357, 0x808b, 0x4601, 0x54aa, 0x9220, 0xe4a4, 0x222e, 0x3085, 0xf60f, 0x15d3, 0xd359, 0xc1f2, 0x0778, 0x5f7f, 0x99f5, 0x8b5e, 0x4dd4, 0xae08, 0x6882, 0x7a29, 0xbca3, ], [ 0x0000, 0x5a5a, 0xb4b4, 0xeeee, 0x305d, 0x6a07, 0x84e9, 0xdeb3, 0x60ba, 0x3ae0, 0xd40e, 0x8e54, 0x50e7, 0x0abd, 0xe453, 0xbe09, 0xc174, 0x9b2e, 0x75c0, 0x2f9a, 0xf129, 0xab73, 0x459d, 0x1fc7, 0xa1ce, 0xfb94, 0x157a, 0x4f20, 0x9193, 0xcbc9, 0x2527, 0x7f7d, 0xdbdd, 0x8187, 0x6f69, 0x3533, 0xeb80, 0xb1da, 0x5f34, 0x056e, 0xbb67, 0xe13d, 0x0fd3, 0x5589, 0x8b3a, 0xd160, 0x3f8e, 0x65d4, 0x1aa9, 0x40f3, 0xae1d, 0xf447, 0x2af4, 0x70ae, 0x9e40, 0xc41a, 0x7a13, 0x2049, 0xcea7, 0x94fd, 0x4a4e, 0x1014, 0xfefa, 0xa4a0, 0xee8f, 0xb4d5, 0x5a3b, 0x0061, 0xded2, 0x8488, 0x6a66, 0x303c, 0x8e35, 0xd46f, 0x3a81, 0x60db, 0xbe68, 0xe432, 0x0adc, 0x5086, 0x2ffb, 0x75a1, 0x9b4f, 0xc115, 0x1fa6, 0x45fc, 0xab12, 0xf148, 0x4f41, 0x151b, 0xfbf5, 0xa1af, 0x7f1c, 0x2546, 0xcba8, 0x91f2, 0x3552, 0x6f08, 0x81e6, 0xdbbc, 0x050f, 0x5f55, 0xb1bb, 0xebe1, 0x55e8, 0x0fb2, 0xe15c, 0xbb06, 0x65b5, 0x3fef, 0xd101, 0x8b5b, 0xf426, 0xae7c, 0x4092, 0x1ac8, 0xc47b, 0x9e21, 0x70cf, 0x2a95, 0x949c, 0xcec6, 0x2028, 0x7a72, 0xa4c1, 0xfe9b, 0x1075, 0x4a2f, 0x842b, 0xde71, 0x309f, 0x6ac5, 0xb476, 0xee2c, 0x00c2, 0x5a98, 0xe491, 0xbecb, 0x5025, 0x0a7f, 0xd4cc, 0x8e96, 0x6078, 0x3a22, 0x455f, 0x1f05, 0xf1eb, 0xabb1, 0x7502, 0x2f58, 0xc1b6, 0x9bec, 0x25e5, 0x7fbf, 0x9151, 0xcb0b, 0x15b8, 0x4fe2, 0xa10c, 0xfb56, 0x5ff6, 0x05ac, 0xeb42, 0xb118, 0x6fab, 0x35f1, 0xdb1f, 0x8145, 0x3f4c, 0x6516, 0x8bf8, 0xd1a2, 0x0f11, 0x554b, 0xbba5, 0xe1ff, 0x9e82, 0xc4d8, 0x2a36, 0x706c, 0xaedf, 0xf485, 0x1a6b, 0x4031, 0xfe38, 0xa462, 0x4a8c, 0x10d6, 0xce65, 0x943f, 0x7ad1, 0x208b, 0x6aa4, 0x30fe, 0xde10, 0x844a, 0x5af9, 0x00a3, 0xee4d, 0xb417, 0x0a1e, 0x5044, 0xbeaa, 0xe4f0, 0x3a43, 0x6019, 0x8ef7, 0xd4ad, 0xabd0, 0xf18a, 0x1f64, 0x453e, 0x9b8d, 0xc1d7, 0x2f39, 0x7563, 0xcb6a, 0x9130, 0x7fde, 0x2584, 0xfb37, 0xa16d, 0x4f83, 0x15d9, 0xb179, 0xeb23, 0x05cd, 0x5f97, 0x8124, 0xdb7e, 0x3590, 0x6fca, 0xd1c3, 0x8b99, 0x6577, 0x3f2d, 0xe19e, 0xbbc4, 0x552a, 0x0f70, 0x700d, 0x2a57, 0xc4b9, 0x9ee3, 0x4050, 0x1a0a, 0xf4e4, 0xaebe, 0x10b7, 0x4aed, 0xa403, 0xfe59, 0x20ea, 0x7ab0, 0x945e, 0xce04, ], ]; pub static CRC16_OPENSAFETY_B_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x755b, 0xeab6, 0x9fed, 0xa037, 0xd56c, 0x4a81, 0x3fda, 0x3535, 0x406e, 0xdf83, 0xaad8, 0x9502, 0xe059, 0x7fb4, 0x0aef, 0x6a6a, 0x1f31, 0x80dc, 0xf587, 0xca5d, 0xbf06, 0x20eb, 0x55b0, 0x5f5f, 0x2a04, 0xb5e9, 0xc0b2, 0xff68, 0x8a33, 0x15de, 0x6085, 0xd4d4, 0xa18f, 0x3e62, 0x4b39, 0x74e3, 0x01b8, 0x9e55, 0xeb0e, 0xe1e1, 0x94ba, 0x0b57, 0x7e0c, 0x41d6, 0x348d, 0xab60, 0xde3b, 0xbebe, 0xcbe5, 0x5408, 0x2153, 0x1e89, 0x6bd2, 0xf43f, 0x8164, 0x8b8b, 0xfed0, 0x613d, 0x1466, 0x2bbc, 0x5ee7, 0xc10a, 0xb451, 0xdcf3, 0xa9a8, 0x3645, 0x431e, 0x7cc4, 0x099f, 0x9672, 0xe329, 0xe9c6, 0x9c9d, 0x0370, 0x762b, 0x49f1, 0x3caa, 0xa347, 0xd61c, 0xb699, 0xc3c2, 0x5c2f, 0x2974, 0x16ae, 0x63f5, 0xfc18, 0x8943, 0x83ac, 0xf6f7, 0x691a, 0x1c41, 0x239b, 0x56c0, 0xc92d, 0xbc76, 0x0827, 0x7d7c, 0xe291, 0x97ca, 0xa810, 0xdd4b, 0x42a6, 0x37fd, 0x3d12, 0x4849, 0xd7a4, 0xa2ff, 0x9d25, 0xe87e, 0x7793, 0x02c8, 0x624d, 0x1716, 0x88fb, 0xfda0, 0xc27a, 0xb721, 0x28cc, 0x5d97, 0x5778, 0x2223, 0xbdce, 0xc895, 0xf74f, 0x8214, 0x1df9, 0x68a2, 0xccbd, 0xb9e6, 0x260b, 0x5350, 0x6c8a, 0x19d1, 0x863c, 0xf367, 0xf988, 0x8cd3, 0x133e, 0x6665, 0x59bf, 0x2ce4, 0xb309, 0xc652, 0xa6d7, 0xd38c, 0x4c61, 0x393a, 0x06e0, 0x73bb, 0xec56, 0x990d, 0x93e2, 0xe6b9, 0x7954, 0x0c0f, 0x33d5, 0x468e, 0xd963, 0xac38, 0x1869, 0x6d32, 0xf2df, 0x8784, 0xb85e, 0xcd05, 0x52e8, 0x27b3, 0x2d5c, 0x5807, 0xc7ea, 0xb2b1, 0x8d6b, 0xf830, 0x67dd, 0x1286, 0x7203, 0x0758, 0x98b5, 0xedee, 0xd234, 0xa76f, 0x3882, 0x4dd9, 0x4736, 0x326d, 0xad80, 0xd8db, 0xe701, 0x925a, 0x0db7, 0x78ec, 0x104e, 0x6515, 0xfaf8, 0x8fa3, 0xb079, 0xc522, 0x5acf, 0x2f94, 0x257b, 0x5020, 0xcfcd, 0xba96, 0x854c, 0xf017, 0x6ffa, 0x1aa1, 0x7a24, 0x0f7f, 0x9092, 0xe5c9, 0xda13, 0xaf48, 0x30a5, 0x45fe, 0x4f11, 0x3a4a, 0xa5a7, 0xd0fc, 0xef26, 0x9a7d, 0x0590, 0x70cb, 0xc49a, 0xb1c1, 0x2e2c, 0x5b77, 0x64ad, 0x11f6, 0x8e1b, 0xfb40, 0xf1af, 0x84f4, 0x1b19, 0x6e42, 0x5198, 0x24c3, 0xbb2e, 0xce75, 0xaef0, 0xdbab, 0x4446, 0x311d, 0x0ec7, 0x7b9c, 0xe471, 0x912a, 0x9bc5, 0xee9e, 0x7173, 0x0428, 0x3bf2, 0x4ea9, 0xd144, 0xa41f, ], [ 0x0000, 0xec21, 0xad19, 0x4138, 0x2f69, 0xc348, 0x8270, 0x6e51, 0x5ed2, 0xb2f3, 0xf3cb, 0x1fea, 0x71bb, 0x9d9a, 0xdca2, 0x3083, 0xbda4, 0x5185, 0x10bd, 0xfc9c, 0x92cd, 0x7eec, 0x3fd4, 0xd3f5, 0xe376, 0x0f57, 0x4e6f, 0xa24e, 0xcc1f, 0x203e, 0x6106, 0x8d27, 0x0e13, 0xe232, 0xa30a, 0x4f2b, 0x217a, 0xcd5b, 0x8c63, 0x6042, 0x50c1, 0xbce0, 0xfdd8, 0x11f9, 0x7fa8, 0x9389, 0xd2b1, 0x3e90, 0xb3b7, 0x5f96, 0x1eae, 0xf28f, 0x9cde, 0x70ff, 0x31c7, 0xdde6, 0xed65, 0x0144, 0x407c, 0xac5d, 0xc20c, 0x2e2d, 0x6f15, 0x8334, 0x1c26, 0xf007, 0xb13f, 0x5d1e, 0x334f, 0xdf6e, 0x9e56, 0x7277, 0x42f4, 0xaed5, 0xefed, 0x03cc, 0x6d9d, 0x81bc, 0xc084, 0x2ca5, 0xa182, 0x4da3, 0x0c9b, 0xe0ba, 0x8eeb, 0x62ca, 0x23f2, 0xcfd3, 0xff50, 0x1371, 0x5249, 0xbe68, 0xd039, 0x3c18, 0x7d20, 0x9101, 0x1235, 0xfe14, 0xbf2c, 0x530d, 0x3d5c, 0xd17d, 0x9045, 0x7c64, 0x4ce7, 0xa0c6, 0xe1fe, 0x0ddf, 0x638e, 0x8faf, 0xce97, 0x22b6, 0xaf91, 0x43b0, 0x0288, 0xeea9, 0x80f8, 0x6cd9, 0x2de1, 0xc1c0, 0xf143, 0x1d62, 0x5c5a, 0xb07b, 0xde2a, 0x320b, 0x7333, 0x9f12, 0x384c, 0xd46d, 0x9555, 0x7974, 0x1725, 0xfb04, 0xba3c, 0x561d, 0x669e, 0x8abf, 0xcb87, 0x27a6, 0x49f7, 0xa5d6, 0xe4ee, 0x08cf, 0x85e8, 0x69c9, 0x28f1, 0xc4d0, 0xaa81, 0x46a0, 0x0798, 0xebb9, 0xdb3a, 0x371b, 0x7623, 0x9a02, 0xf453, 0x1872, 0x594a, 0xb56b, 0x365f, 0xda7e, 0x9b46, 0x7767, 0x1936, 0xf517, 0xb42f, 0x580e, 0x688d, 0x84ac, 0xc594, 0x29b5, 0x47e4, 0xabc5, 0xeafd, 0x06dc, 0x8bfb, 0x67da, 0x26e2, 0xcac3, 0xa492, 0x48b3, 0x098b, 0xe5aa, 0xd529, 0x3908, 0x7830, 0x9411, 0xfa40, 0x1661, 0x5759, 0xbb78, 0x246a, 0xc84b, 0x8973, 0x6552, 0x0b03, 0xe722, 0xa61a, 0x4a3b, 0x7ab8, 0x9699, 0xd7a1, 0x3b80, 0x55d1, 0xb9f0, 0xf8c8, 0x14e9, 0x99ce, 0x75ef, 0x34d7, 0xd8f6, 0xb6a7, 0x5a86, 0x1bbe, 0xf79f, 0xc71c, 0x2b3d, 0x6a05, 0x8624, 0xe875, 0x0454, 0x456c, 0xa94d, 0x2a79, 0xc658, 0x8760, 0x6b41, 0x0510, 0xe931, 0xa809, 0x4428, 0x74ab, 0x988a, 0xd9b2, 0x3593, 0x5bc2, 0xb7e3, 0xf6db, 0x1afa, 0x97dd, 0x7bfc, 0x3ac4, 0xd6e5, 0xb8b4, 0x5495, 0x15ad, 0xf98c, 0xc90f, 0x252e, 0x6416, 0x8837, 0xe666, 0x0a47, 0x4b7f, 0xa75e, ], [ 0x0000, 0x7098, 0xe130, 0x91a8, 0xb73b, 0xc7a3, 0x560b, 0x2693, 0x1b2d, 0x6bb5, 0xfa1d, 0x8a85, 0xac16, 0xdc8e, 0x4d26, 0x3dbe, 0x365a, 0x46c2, 0xd76a, 0xa7f2, 0x8161, 0xf1f9, 0x6051, 0x10c9, 0x2d77, 0x5def, 0xcc47, 0xbcdf, 0x9a4c, 0xead4, 0x7b7c, 0x0be4, 0x6cb4, 0x1c2c, 0x8d84, 0xfd1c, 0xdb8f, 0xab17, 0x3abf, 0x4a27, 0x7799, 0x0701, 0x96a9, 0xe631, 0xc0a2, 0xb03a, 0x2192, 0x510a, 0x5aee, 0x2a76, 0xbbde, 0xcb46, 0xedd5, 0x9d4d, 0x0ce5, 0x7c7d, 0x41c3, 0x315b, 0xa0f3, 0xd06b, 0xf6f8, 0x8660, 0x17c8, 0x6750, 0xd968, 0xa9f0, 0x3858, 0x48c0, 0x6e53, 0x1ecb, 0x8f63, 0xfffb, 0xc245, 0xb2dd, 0x2375, 0x53ed, 0x757e, 0x05e6, 0x944e, 0xe4d6, 0xef32, 0x9faa, 0x0e02, 0x7e9a, 0x5809, 0x2891, 0xb939, 0xc9a1, 0xf41f, 0x8487, 0x152f, 0x65b7, 0x4324, 0x33bc, 0xa214, 0xd28c, 0xb5dc, 0xc544, 0x54ec, 0x2474, 0x02e7, 0x727f, 0xe3d7, 0x934f, 0xaef1, 0xde69, 0x4fc1, 0x3f59, 0x19ca, 0x6952, 0xf8fa, 0x8862, 0x8386, 0xf31e, 0x62b6, 0x122e, 0x34bd, 0x4425, 0xd58d, 0xa515, 0x98ab, 0xe833, 0x799b, 0x0903, 0x2f90, 0x5f08, 0xcea0, 0xbe38, 0xc78b, 0xb713, 0x26bb, 0x5623, 0x70b0, 0x0028, 0x9180, 0xe118, 0xdca6, 0xac3e, 0x3d96, 0x4d0e, 0x6b9d, 0x1b05, 0x8aad, 0xfa35, 0xf1d1, 0x8149, 0x10e1, 0x6079, 0x46ea, 0x3672, 0xa7da, 0xd742, 0xeafc, 0x9a64, 0x0bcc, 0x7b54, 0x5dc7, 0x2d5f, 0xbcf7, 0xcc6f, 0xab3f, 0xdba7, 0x4a0f, 0x3a97, 0x1c04, 0x6c9c, 0xfd34, 0x8dac, 0xb012, 0xc08a, 0x5122, 0x21ba, 0x0729, 0x77b1, 0xe619, 0x9681, 0x9d65, 0xedfd, 0x7c55, 0x0ccd, 0x2a5e, 0x5ac6, 0xcb6e, 0xbbf6, 0x8648, 0xf6d0, 0x6778, 0x17e0, 0x3173, 0x41eb, 0xd043, 0xa0db, 0x1ee3, 0x6e7b, 0xffd3, 0x8f4b, 0xa9d8, 0xd940, 0x48e8, 0x3870, 0x05ce, 0x7556, 0xe4fe, 0x9466, 0xb2f5, 0xc26d, 0x53c5, 0x235d, 0x28b9, 0x5821, 0xc989, 0xb911, 0x9f82, 0xef1a, 0x7eb2, 0x0e2a, 0x3394, 0x430c, 0xd2a4, 0xa23c, 0x84af, 0xf437, 0x659f, 0x1507, 0x7257, 0x02cf, 0x9367, 0xe3ff, 0xc56c, 0xb5f4, 0x245c, 0x54c4, 0x697a, 0x19e2, 0x884a, 0xf8d2, 0xde41, 0xaed9, 0x3f71, 0x4fe9, 0x440d, 0x3495, 0xa53d, 0xd5a5, 0xf336, 0x83ae, 0x1206, 0x629e, 0x5f20, 0x2fb8, 0xbe10, 0xce88, 0xe81b, 0x9883, 0x092b, 0x79b3, ], [ 0x0000, 0xfa4d, 0x81c1, 0x7b8c, 0x76d9, 0x8c94, 0xf718, 0x0d55, 0xedb2, 0x17ff, 0x6c73, 0x963e, 0x9b6b, 0x6126, 0x1aaa, 0xe0e7, 0xae3f, 0x5472, 0x2ffe, 0xd5b3, 0xd8e6, 0x22ab, 0x5927, 0xa36a, 0x438d, 0xb9c0, 0xc24c, 0x3801, 0x3554, 0xcf19, 0xb495, 0x4ed8, 0x2925, 0xd368, 0xa8e4, 0x52a9, 0x5ffc, 0xa5b1, 0xde3d, 0x2470, 0xc497, 0x3eda, 0x4556, 0xbf1b, 0xb24e, 0x4803, 0x338f, 0xc9c2, 0x871a, 0x7d57, 0x06db, 0xfc96, 0xf1c3, 0x0b8e, 0x7002, 0x8a4f, 0x6aa8, 0x90e5, 0xeb69, 0x1124, 0x1c71, 0xe63c, 0x9db0, 0x67fd, 0x524a, 0xa807, 0xd38b, 0x29c6, 0x2493, 0xdede, 0xa552, 0x5f1f, 0xbff8, 0x45b5, 0x3e39, 0xc474, 0xc921, 0x336c, 0x48e0, 0xb2ad, 0xfc75, 0x0638, 0x7db4, 0x87f9, 0x8aac, 0x70e1, 0x0b6d, 0xf120, 0x11c7, 0xeb8a, 0x9006, 0x6a4b, 0x671e, 0x9d53, 0xe6df, 0x1c92, 0x7b6f, 0x8122, 0xfaae, 0x00e3, 0x0db6, 0xf7fb, 0x8c77, 0x763a, 0x96dd, 0x6c90, 0x171c, 0xed51, 0xe004, 0x1a49, 0x61c5, 0x9b88, 0xd550, 0x2f1d, 0x5491, 0xaedc, 0xa389, 0x59c4, 0x2248, 0xd805, 0x38e2, 0xc2af, 0xb923, 0x436e, 0x4e3b, 0xb476, 0xcffa, 0x35b7, 0xa494, 0x5ed9, 0x2555, 0xdf18, 0xd24d, 0x2800, 0x538c, 0xa9c1, 0x4926, 0xb36b, 0xc8e7, 0x32aa, 0x3fff, 0xc5b2, 0xbe3e, 0x4473, 0x0aab, 0xf0e6, 0x8b6a, 0x7127, 0x7c72, 0x863f, 0xfdb3, 0x07fe, 0xe719, 0x1d54, 0x66d8, 0x9c95, 0x91c0, 0x6b8d, 0x1001, 0xea4c, 0x8db1, 0x77fc, 0x0c70, 0xf63d, 0xfb68, 0x0125, 0x7aa9, 0x80e4, 0x6003, 0x9a4e, 0xe1c2, 0x1b8f, 0x16da, 0xec97, 0x971b, 0x6d56, 0x238e, 0xd9c3, 0xa24f, 0x5802, 0x5557, 0xaf1a, 0xd496, 0x2edb, 0xce3c, 0x3471, 0x4ffd, 0xb5b0, 0xb8e5, 0x42a8, 0x3924, 0xc369, 0xf6de, 0x0c93, 0x771f, 0x8d52, 0x8007, 0x7a4a, 0x01c6, 0xfb8b, 0x1b6c, 0xe121, 0x9aad, 0x60e0, 0x6db5, 0x97f8, 0xec74, 0x1639, 0x58e1, 0xa2ac, 0xd920, 0x236d, 0x2e38, 0xd475, 0xaff9, 0x55b4, 0xb553, 0x4f1e, 0x3492, 0xcedf, 0xc38a, 0x39c7, 0x424b, 0xb806, 0xdffb, 0x25b6, 0x5e3a, 0xa477, 0xa922, 0x536f, 0x28e3, 0xd2ae, 0x3249, 0xc804, 0xb388, 0x49c5, 0x4490, 0xbedd, 0xc551, 0x3f1c, 0x71c4, 0x8b89, 0xf005, 0x0a48, 0x071d, 0xfd50, 0x86dc, 0x7c91, 0x9c76, 0x663b, 0x1db7, 0xe7fa, 0xeaaf, 0x10e2, 0x6b6e, 0x9123, ], [ 0x0000, 0x3c73, 0x78e6, 0x4495, 0xf1cc, 0xcdbf, 0x892a, 0xb559, 0x96c3, 0xaab0, 0xee25, 0xd256, 0x670f, 0x5b7c, 0x1fe9, 0x239a, 0x58dd, 0x64ae, 0x203b, 0x1c48, 0xa911, 0x9562, 0xd1f7, 0xed84, 0xce1e, 0xf26d, 0xb6f8, 0x8a8b, 0x3fd2, 0x03a1, 0x4734, 0x7b47, 0xb1ba, 0x8dc9, 0xc95c, 0xf52f, 0x4076, 0x7c05, 0x3890, 0x04e3, 0x2779, 0x1b0a, 0x5f9f, 0x63ec, 0xd6b5, 0xeac6, 0xae53, 0x9220, 0xe967, 0xd514, 0x9181, 0xadf2, 0x18ab, 0x24d8, 0x604d, 0x5c3e, 0x7fa4, 0x43d7, 0x0742, 0x3b31, 0x8e68, 0xb21b, 0xf68e, 0xcafd, 0x162f, 0x2a5c, 0x6ec9, 0x52ba, 0xe7e3, 0xdb90, 0x9f05, 0xa376, 0x80ec, 0xbc9f, 0xf80a, 0xc479, 0x7120, 0x4d53, 0x09c6, 0x35b5, 0x4ef2, 0x7281, 0x3614, 0x0a67, 0xbf3e, 0x834d, 0xc7d8, 0xfbab, 0xd831, 0xe442, 0xa0d7, 0x9ca4, 0x29fd, 0x158e, 0x511b, 0x6d68, 0xa795, 0x9be6, 0xdf73, 0xe300, 0x5659, 0x6a2a, 0x2ebf, 0x12cc, 0x3156, 0x0d25, 0x49b0, 0x75c3, 0xc09a, 0xfce9, 0xb87c, 0x840f, 0xff48, 0xc33b, 0x87ae, 0xbbdd, 0x0e84, 0x32f7, 0x7662, 0x4a11, 0x698b, 0x55f8, 0x116d, 0x2d1e, 0x9847, 0xa434, 0xe0a1, 0xdcd2, 0x2c5e, 0x102d, 0x54b8, 0x68cb, 0xdd92, 0xe1e1, 0xa574, 0x9907, 0xba9d, 0x86ee, 0xc27b, 0xfe08, 0x4b51, 0x7722, 0x33b7, 0x0fc4, 0x7483, 0x48f0, 0x0c65, 0x3016, 0x854f, 0xb93c, 0xfda9, 0xc1da, 0xe240, 0xde33, 0x9aa6, 0xa6d5, 0x138c, 0x2fff, 0x6b6a, 0x5719, 0x9de4, 0xa197, 0xe502, 0xd971, 0x6c28, 0x505b, 0x14ce, 0x28bd, 0x0b27, 0x3754, 0x73c1, 0x4fb2, 0xfaeb, 0xc698, 0x820d, 0xbe7e, 0xc539, 0xf94a, 0xbddf, 0x81ac, 0x34f5, 0x0886, 0x4c13, 0x7060, 0x53fa, 0x6f89, 0x2b1c, 0x176f, 0xa236, 0x9e45, 0xdad0, 0xe6a3, 0x3a71, 0x0602, 0x4297, 0x7ee4, 0xcbbd, 0xf7ce, 0xb35b, 0x8f28, 0xacb2, 0x90c1, 0xd454, 0xe827, 0x5d7e, 0x610d, 0x2598, 0x19eb, 0x62ac, 0x5edf, 0x1a4a, 0x2639, 0x9360, 0xaf13, 0xeb86, 0xd7f5, 0xf46f, 0xc81c, 0x8c89, 0xb0fa, 0x05a3, 0x39d0, 0x7d45, 0x4136, 0x8bcb, 0xb7b8, 0xf32d, 0xcf5e, 0x7a07, 0x4674, 0x02e1, 0x3e92, 0x1d08, 0x217b, 0x65ee, 0x599d, 0xecc4, 0xd0b7, 0x9422, 0xa851, 0xd316, 0xef65, 0xabf0, 0x9783, 0x22da, 0x1ea9, 0x5a3c, 0x664f, 0x45d5, 0x79a6, 0x3d33, 0x0140, 0xb419, 0x886a, 0xccff, 0xf08c, ], [ 0x0000, 0x58bc, 0xb178, 0xe9c4, 0x17ab, 0x4f17, 0xa6d3, 0xfe6f, 0x2f56, 0x77ea, 0x9e2e, 0xc692, 0x38fd, 0x6041, 0x8985, 0xd139, 0x5eac, 0x0610, 0xefd4, 0xb768, 0x4907, 0x11bb, 0xf87f, 0xa0c3, 0x71fa, 0x2946, 0xc082, 0x983e, 0x6651, 0x3eed, 0xd729, 0x8f95, 0xbd58, 0xe5e4, 0x0c20, 0x549c, 0xaaf3, 0xf24f, 0x1b8b, 0x4337, 0x920e, 0xcab2, 0x2376, 0x7bca, 0x85a5, 0xdd19, 0x34dd, 0x6c61, 0xe3f4, 0xbb48, 0x528c, 0x0a30, 0xf45f, 0xace3, 0x4527, 0x1d9b, 0xcca2, 0x941e, 0x7dda, 0x2566, 0xdb09, 0x83b5, 0x6a71, 0x32cd, 0x0feb, 0x5757, 0xbe93, 0xe62f, 0x1840, 0x40fc, 0xa938, 0xf184, 0x20bd, 0x7801, 0x91c5, 0xc979, 0x3716, 0x6faa, 0x866e, 0xded2, 0x5147, 0x09fb, 0xe03f, 0xb883, 0x46ec, 0x1e50, 0xf794, 0xaf28, 0x7e11, 0x26ad, 0xcf69, 0x97d5, 0x69ba, 0x3106, 0xd8c2, 0x807e, 0xb2b3, 0xea0f, 0x03cb, 0x5b77, 0xa518, 0xfda4, 0x1460, 0x4cdc, 0x9de5, 0xc559, 0x2c9d, 0x7421, 0x8a4e, 0xd2f2, 0x3b36, 0x638a, 0xec1f, 0xb4a3, 0x5d67, 0x05db, 0xfbb4, 0xa308, 0x4acc, 0x1270, 0xc349, 0x9bf5, 0x7231, 0x2a8d, 0xd4e2, 0x8c5e, 0x659a, 0x3d26, 0x1fd6, 0x476a, 0xaeae, 0xf612, 0x087d, 0x50c1, 0xb905, 0xe1b9, 0x3080, 0x683c, 0x81f8, 0xd944, 0x272b, 0x7f97, 0x9653, 0xceef, 0x417a, 0x19c6, 0xf002, 0xa8be, 0x56d1, 0x0e6d, 0xe7a9, 0xbf15, 0x6e2c, 0x3690, 0xdf54, 0x87e8, 0x7987, 0x213b, 0xc8ff, 0x9043, 0xa28e, 0xfa32, 0x13f6, 0x4b4a, 0xb525, 0xed99, 0x045d, 0x5ce1, 0x8dd8, 0xd564, 0x3ca0, 0x641c, 0x9a73, 0xc2cf, 0x2b0b, 0x73b7, 0xfc22, 0xa49e, 0x4d5a, 0x15e6, 0xeb89, 0xb335, 0x5af1, 0x024d, 0xd374, 0x8bc8, 0x620c, 0x3ab0, 0xc4df, 0x9c63, 0x75a7, 0x2d1b, 0x103d, 0x4881, 0xa145, 0xf9f9, 0x0796, 0x5f2a, 0xb6ee, 0xee52, 0x3f6b, 0x67d7, 0x8e13, 0xd6af, 0x28c0, 0x707c, 0x99b8, 0xc104, 0x4e91, 0x162d, 0xffe9, 0xa755, 0x593a, 0x0186, 0xe842, 0xb0fe, 0x61c7, 0x397b, 0xd0bf, 0x8803, 0x766c, 0x2ed0, 0xc714, 0x9fa8, 0xad65, 0xf5d9, 0x1c1d, 0x44a1, 0xbace, 0xe272, 0x0bb6, 0x530a, 0x8233, 0xda8f, 0x334b, 0x6bf7, 0x9598, 0xcd24, 0x24e0, 0x7c5c, 0xf3c9, 0xab75, 0x42b1, 0x1a0d, 0xe462, 0xbcde, 0x551a, 0x0da6, 0xdc9f, 0x8423, 0x6de7, 0x355b, 0xcb34, 0x9388, 0x7a4c, 0x22f0, ], [ 0x0000, 0x3fac, 0x7f58, 0x40f4, 0xfeb0, 0xc11c, 0x81e8, 0xbe44, 0x883b, 0xb797, 0xf763, 0xc8cf, 0x768b, 0x4927, 0x09d3, 0x367f, 0x652d, 0x5a81, 0x1a75, 0x25d9, 0x9b9d, 0xa431, 0xe4c5, 0xdb69, 0xed16, 0xd2ba, 0x924e, 0xade2, 0x13a6, 0x2c0a, 0x6cfe, 0x5352, 0xca5a, 0xf5f6, 0xb502, 0x8aae, 0x34ea, 0x0b46, 0x4bb2, 0x741e, 0x4261, 0x7dcd, 0x3d39, 0x0295, 0xbcd1, 0x837d, 0xc389, 0xfc25, 0xaf77, 0x90db, 0xd02f, 0xef83, 0x51c7, 0x6e6b, 0x2e9f, 0x1133, 0x274c, 0x18e0, 0x5814, 0x67b8, 0xd9fc, 0xe650, 0xa6a4, 0x9908, 0xe1ef, 0xde43, 0x9eb7, 0xa11b, 0x1f5f, 0x20f3, 0x6007, 0x5fab, 0x69d4, 0x5678, 0x168c, 0x2920, 0x9764, 0xa8c8, 0xe83c, 0xd790, 0x84c2, 0xbb6e, 0xfb9a, 0xc436, 0x7a72, 0x45de, 0x052a, 0x3a86, 0x0cf9, 0x3355, 0x73a1, 0x4c0d, 0xf249, 0xcde5, 0x8d11, 0xb2bd, 0x2bb5, 0x1419, 0x54ed, 0x6b41, 0xd505, 0xeaa9, 0xaa5d, 0x95f1, 0xa38e, 0x9c22, 0xdcd6, 0xe37a, 0x5d3e, 0x6292, 0x2266, 0x1dca, 0x4e98, 0x7134, 0x31c0, 0x0e6c, 0xb028, 0x8f84, 0xcf70, 0xf0dc, 0xc6a3, 0xf90f, 0xb9fb, 0x8657, 0x3813, 0x07bf, 0x474b, 0x78e7, 0xb685, 0x8929, 0xc9dd, 0xf671, 0x4835, 0x7799, 0x376d, 0x08c1, 0x3ebe, 0x0112, 0x41e6, 0x7e4a, 0xc00e, 0xffa2, 0xbf56, 0x80fa, 0xd3a8, 0xec04, 0xacf0, 0x935c, 0x2d18, 0x12b4, 0x5240, 0x6dec, 0x5b93, 0x643f, 0x24cb, 0x1b67, 0xa523, 0x9a8f, 0xda7b, 0xe5d7, 0x7cdf, 0x4373, 0x0387, 0x3c2b, 0x826f, 0xbdc3, 0xfd37, 0xc29b, 0xf4e4, 0xcb48, 0x8bbc, 0xb410, 0x0a54, 0x35f8, 0x750c, 0x4aa0, 0x19f2, 0x265e, 0x66aa, 0x5906, 0xe742, 0xd8ee, 0x981a, 0xa7b6, 0x91c9, 0xae65, 0xee91, 0xd13d, 0x6f79, 0x50d5, 0x1021, 0x2f8d, 0x576a, 0x68c6, 0x2832, 0x179e, 0xa9da, 0x9676, 0xd682, 0xe92e, 0xdf51, 0xe0fd, 0xa009, 0x9fa5, 0x21e1, 0x1e4d, 0x5eb9, 0x6115, 0x3247, 0x0deb, 0x4d1f, 0x72b3, 0xccf7, 0xf35b, 0xb3af, 0x8c03, 0xba7c, 0x85d0, 0xc524, 0xfa88, 0x44cc, 0x7b60, 0x3b94, 0x0438, 0x9d30, 0xa29c, 0xe268, 0xddc4, 0x6380, 0x5c2c, 0x1cd8, 0x2374, 0x150b, 0x2aa7, 0x6a53, 0x55ff, 0xebbb, 0xd417, 0x94e3, 0xab4f, 0xf81d, 0xc7b1, 0x8745, 0xb8e9, 0x06ad, 0x3901, 0x79f5, 0x4659, 0x7026, 0x4f8a, 0x0f7e, 0x30d2, 0x8e96, 0xb13a, 0xf1ce, 0xce62, ], [ 0x0000, 0x1851, 0x30a2, 0x28f3, 0x6144, 0x7915, 0x51e6, 0x49b7, 0xc288, 0xdad9, 0xf22a, 0xea7b, 0xa3cc, 0xbb9d, 0x936e, 0x8b3f, 0xf04b, 0xe81a, 0xc0e9, 0xd8b8, 0x910f, 0x895e, 0xa1ad, 0xb9fc, 0x32c3, 0x2a92, 0x0261, 0x1a30, 0x5387, 0x4bd6, 0x6325, 0x7b74, 0x95cd, 0x8d9c, 0xa56f, 0xbd3e, 0xf489, 0xecd8, 0xc42b, 0xdc7a, 0x5745, 0x4f14, 0x67e7, 0x7fb6, 0x3601, 0x2e50, 0x06a3, 0x1ef2, 0x6586, 0x7dd7, 0x5524, 0x4d75, 0x04c2, 0x1c93, 0x3460, 0x2c31, 0xa70e, 0xbf5f, 0x97ac, 0x8ffd, 0xc64a, 0xde1b, 0xf6e8, 0xeeb9, 0x5ec1, 0x4690, 0x6e63, 0x7632, 0x3f85, 0x27d4, 0x0f27, 0x1776, 0x9c49, 0x8418, 0xaceb, 0xb4ba, 0xfd0d, 0xe55c, 0xcdaf, 0xd5fe, 0xae8a, 0xb6db, 0x9e28, 0x8679, 0xcfce, 0xd79f, 0xff6c, 0xe73d, 0x6c02, 0x7453, 0x5ca0, 0x44f1, 0x0d46, 0x1517, 0x3de4, 0x25b5, 0xcb0c, 0xd35d, 0xfbae, 0xe3ff, 0xaa48, 0xb219, 0x9aea, 0x82bb, 0x0984, 0x11d5, 0x3926, 0x2177, 0x68c0, 0x7091, 0x5862, 0x4033, 0x3b47, 0x2316, 0x0be5, 0x13b4, 0x5a03, 0x4252, 0x6aa1, 0x72f0, 0xf9cf, 0xe19e, 0xc96d, 0xd13c, 0x988b, 0x80da, 0xa829, 0xb078, 0xbd82, 0xa5d3, 0x8d20, 0x9571, 0xdcc6, 0xc497, 0xec64, 0xf435, 0x7f0a, 0x675b, 0x4fa8, 0x57f9, 0x1e4e, 0x061f, 0x2eec, 0x36bd, 0x4dc9, 0x5598, 0x7d6b, 0x653a, 0x2c8d, 0x34dc, 0x1c2f, 0x047e, 0x8f41, 0x9710, 0xbfe3, 0xa7b2, 0xee05, 0xf654, 0xdea7, 0xc6f6, 0x284f, 0x301e, 0x18ed, 0x00bc, 0x490b, 0x515a, 0x79a9, 0x61f8, 0xeac7, 0xf296, 0xda65, 0xc234, 0x8b83, 0x93d2, 0xbb21, 0xa370, 0xd804, 0xc055, 0xe8a6, 0xf0f7, 0xb940, 0xa111, 0x89e2, 0x91b3, 0x1a8c, 0x02dd, 0x2a2e, 0x327f, 0x7bc8, 0x6399, 0x4b6a, 0x533b, 0xe343, 0xfb12, 0xd3e1, 0xcbb0, 0x8207, 0x9a56, 0xb2a5, 0xaaf4, 0x21cb, 0x399a, 0x1169, 0x0938, 0x408f, 0x58de, 0x702d, 0x687c, 0x1308, 0x0b59, 0x23aa, 0x3bfb, 0x724c, 0x6a1d, 0x42ee, 0x5abf, 0xd180, 0xc9d1, 0xe122, 0xf973, 0xb0c4, 0xa895, 0x8066, 0x9837, 0x768e, 0x6edf, 0x462c, 0x5e7d, 0x17ca, 0x0f9b, 0x2768, 0x3f39, 0xb406, 0xac57, 0x84a4, 0x9cf5, 0xd542, 0xcd13, 0xe5e0, 0xfdb1, 0x86c5, 0x9e94, 0xb667, 0xae36, 0xe781, 0xffd0, 0xd723, 0xcf72, 0x444d, 0x5c1c, 0x74ef, 0x6cbe, 0x2509, 0x3d58, 0x15ab, 0x0dfa, ], [ 0x0000, 0x0e5f, 0x1cbe, 0x12e1, 0x397c, 0x3723, 0x25c2, 0x2b9d, 0x72f8, 0x7ca7, 0x6e46, 0x6019, 0x4b84, 0x45db, 0x573a, 0x5965, 0xe5f0, 0xebaf, 0xf94e, 0xf711, 0xdc8c, 0xd2d3, 0xc032, 0xce6d, 0x9708, 0x9957, 0x8bb6, 0x85e9, 0xae74, 0xa02b, 0xb2ca, 0xbc95, 0xbebb, 0xb0e4, 0xa205, 0xac5a, 0x87c7, 0x8998, 0x9b79, 0x9526, 0xcc43, 0xc21c, 0xd0fd, 0xdea2, 0xf53f, 0xfb60, 0xe981, 0xe7de, 0x5b4b, 0x5514, 0x47f5, 0x49aa, 0x6237, 0x6c68, 0x7e89, 0x70d6, 0x29b3, 0x27ec, 0x350d, 0x3b52, 0x10cf, 0x1e90, 0x0c71, 0x022e, 0x082d, 0x0672, 0x1493, 0x1acc, 0x3151, 0x3f0e, 0x2def, 0x23b0, 0x7ad5, 0x748a, 0x666b, 0x6834, 0x43a9, 0x4df6, 0x5f17, 0x5148, 0xeddd, 0xe382, 0xf163, 0xff3c, 0xd4a1, 0xdafe, 0xc81f, 0xc640, 0x9f25, 0x917a, 0x839b, 0x8dc4, 0xa659, 0xa806, 0xbae7, 0xb4b8, 0xb696, 0xb8c9, 0xaa28, 0xa477, 0x8fea, 0x81b5, 0x9354, 0x9d0b, 0xc46e, 0xca31, 0xd8d0, 0xd68f, 0xfd12, 0xf34d, 0xe1ac, 0xeff3, 0x5366, 0x5d39, 0x4fd8, 0x4187, 0x6a1a, 0x6445, 0x76a4, 0x78fb, 0x219e, 0x2fc1, 0x3d20, 0x337f, 0x18e2, 0x16bd, 0x045c, 0x0a03, 0x105a, 0x1e05, 0x0ce4, 0x02bb, 0x2926, 0x2779, 0x3598, 0x3bc7, 0x62a2, 0x6cfd, 0x7e1c, 0x7043, 0x5bde, 0x5581, 0x4760, 0x493f, 0xf5aa, 0xfbf5, 0xe914, 0xe74b, 0xccd6, 0xc289, 0xd068, 0xde37, 0x8752, 0x890d, 0x9bec, 0x95b3, 0xbe2e, 0xb071, 0xa290, 0xaccf, 0xaee1, 0xa0be, 0xb25f, 0xbc00, 0x979d, 0x99c2, 0x8b23, 0x857c, 0xdc19, 0xd246, 0xc0a7, 0xcef8, 0xe565, 0xeb3a, 0xf9db, 0xf784, 0x4b11, 0x454e, 0x57af, 0x59f0, 0x726d, 0x7c32, 0x6ed3, 0x608c, 0x39e9, 0x37b6, 0x2557, 0x2b08, 0x0095, 0x0eca, 0x1c2b, 0x1274, 0x1877, 0x1628, 0x04c9, 0x0a96, 0x210b, 0x2f54, 0x3db5, 0x33ea, 0x6a8f, 0x64d0, 0x7631, 0x786e, 0x53f3, 0x5dac, 0x4f4d, 0x4112, 0xfd87, 0xf3d8, 0xe139, 0xef66, 0xc4fb, 0xcaa4, 0xd845, 0xd61a, 0x8f7f, 0x8120, 0x93c1, 0x9d9e, 0xb603, 0xb85c, 0xaabd, 0xa4e2, 0xa6cc, 0xa893, 0xba72, 0xb42d, 0x9fb0, 0x91ef, 0x830e, 0x8d51, 0xd434, 0xda6b, 0xc88a, 0xc6d5, 0xed48, 0xe317, 0xf1f6, 0xffa9, 0x433c, 0x4d63, 0x5f82, 0x51dd, 0x7a40, 0x741f, 0x66fe, 0x68a1, 0x31c4, 0x3f9b, 0x2d7a, 0x2325, 0x08b8, 0x06e7, 0x1406, 0x1a59, ], [ 0x0000, 0x20b4, 0x4168, 0x61dc, 0x82d0, 0xa264, 0xc3b8, 0xe30c, 0x70fb, 0x504f, 0x3193, 0x1127, 0xf22b, 0xd29f, 0xb343, 0x93f7, 0xe1f6, 0xc142, 0xa09e, 0x802a, 0x6326, 0x4392, 0x224e, 0x02fa, 0x910d, 0xb1b9, 0xd065, 0xf0d1, 0x13dd, 0x3369, 0x52b5, 0x7201, 0xb6b7, 0x9603, 0xf7df, 0xd76b, 0x3467, 0x14d3, 0x750f, 0x55bb, 0xc64c, 0xe6f8, 0x8724, 0xa790, 0x449c, 0x6428, 0x05f4, 0x2540, 0x5741, 0x77f5, 0x1629, 0x369d, 0xd591, 0xf525, 0x94f9, 0xb44d, 0x27ba, 0x070e, 0x66d2, 0x4666, 0xa56a, 0x85de, 0xe402, 0xc4b6, 0x1835, 0x3881, 0x595d, 0x79e9, 0x9ae5, 0xba51, 0xdb8d, 0xfb39, 0x68ce, 0x487a, 0x29a6, 0x0912, 0xea1e, 0xcaaa, 0xab76, 0x8bc2, 0xf9c3, 0xd977, 0xb8ab, 0x981f, 0x7b13, 0x5ba7, 0x3a7b, 0x1acf, 0x8938, 0xa98c, 0xc850, 0xe8e4, 0x0be8, 0x2b5c, 0x4a80, 0x6a34, 0xae82, 0x8e36, 0xefea, 0xcf5e, 0x2c52, 0x0ce6, 0x6d3a, 0x4d8e, 0xde79, 0xfecd, 0x9f11, 0xbfa5, 0x5ca9, 0x7c1d, 0x1dc1, 0x3d75, 0x4f74, 0x6fc0, 0x0e1c, 0x2ea8, 0xcda4, 0xed10, 0x8ccc, 0xac78, 0x3f8f, 0x1f3b, 0x7ee7, 0x5e53, 0xbd5f, 0x9deb, 0xfc37, 0xdc83, 0x306a, 0x10de, 0x7102, 0x51b6, 0xb2ba, 0x920e, 0xf3d2, 0xd366, 0x4091, 0x6025, 0x01f9, 0x214d, 0xc241, 0xe2f5, 0x8329, 0xa39d, 0xd19c, 0xf128, 0x90f4, 0xb040, 0x534c, 0x73f8, 0x1224, 0x3290, 0xa167, 0x81d3, 0xe00f, 0xc0bb, 0x23b7, 0x0303, 0x62df, 0x426b, 0x86dd, 0xa669, 0xc7b5, 0xe701, 0x040d, 0x24b9, 0x4565, 0x65d1, 0xf626, 0xd692, 0xb74e, 0x97fa, 0x74f6, 0x5442, 0x359e, 0x152a, 0x672b, 0x479f, 0x2643, 0x06f7, 0xe5fb, 0xc54f, 0xa493, 0x8427, 0x17d0, 0x3764, 0x56b8, 0x760c, 0x9500, 0xb5b4, 0xd468, 0xf4dc, 0x285f, 0x08eb, 0x6937, 0x4983, 0xaa8f, 0x8a3b, 0xebe7, 0xcb53, 0x58a4, 0x7810, 0x19cc, 0x3978, 0xda74, 0xfac0, 0x9b1c, 0xbba8, 0xc9a9, 0xe91d, 0x88c1, 0xa875, 0x4b79, 0x6bcd, 0x0a11, 0x2aa5, 0xb952, 0x99e6, 0xf83a, 0xd88e, 0x3b82, 0x1b36, 0x7aea, 0x5a5e, 0x9ee8, 0xbe5c, 0xdf80, 0xff34, 0x1c38, 0x3c8c, 0x5d50, 0x7de4, 0xee13, 0xcea7, 0xaf7b, 0x8fcf, 0x6cc3, 0x4c77, 0x2dab, 0x0d1f, 0x7f1e, 0x5faa, 0x3e76, 0x1ec2, 0xfdce, 0xdd7a, 0xbca6, 0x9c12, 0x0fe5, 0x2f51, 0x4e8d, 0x6e39, 0x8d35, 0xad81, 0xcc5d, 0xece9, ], [ 0x0000, 0x60d4, 0xc1a8, 0xa17c, 0xf60b, 0x96df, 0x37a3, 0x5777, 0x994d, 0xf999, 0x58e5, 0x3831, 0x6f46, 0x0f92, 0xaeee, 0xce3a, 0x47c1, 0x2715, 0x8669, 0xe6bd, 0xb1ca, 0xd11e, 0x7062, 0x10b6, 0xde8c, 0xbe58, 0x1f24, 0x7ff0, 0x2887, 0x4853, 0xe92f, 0x89fb, 0x8f82, 0xef56, 0x4e2a, 0x2efe, 0x7989, 0x195d, 0xb821, 0xd8f5, 0x16cf, 0x761b, 0xd767, 0xb7b3, 0xe0c4, 0x8010, 0x216c, 0x41b8, 0xc843, 0xa897, 0x09eb, 0x693f, 0x3e48, 0x5e9c, 0xffe0, 0x9f34, 0x510e, 0x31da, 0x90a6, 0xf072, 0xa705, 0xc7d1, 0x66ad, 0x0679, 0x6a5f, 0x0a8b, 0xabf7, 0xcb23, 0x9c54, 0xfc80, 0x5dfc, 0x3d28, 0xf312, 0x93c6, 0x32ba, 0x526e, 0x0519, 0x65cd, 0xc4b1, 0xa465, 0x2d9e, 0x4d4a, 0xec36, 0x8ce2, 0xdb95, 0xbb41, 0x1a3d, 0x7ae9, 0xb4d3, 0xd407, 0x757b, 0x15af, 0x42d8, 0x220c, 0x8370, 0xe3a4, 0xe5dd, 0x8509, 0x2475, 0x44a1, 0x13d6, 0x7302, 0xd27e, 0xb2aa, 0x7c90, 0x1c44, 0xbd38, 0xddec, 0x8a9b, 0xea4f, 0x4b33, 0x2be7, 0xa21c, 0xc2c8, 0x63b4, 0x0360, 0x5417, 0x34c3, 0x95bf, 0xf56b, 0x3b51, 0x5b85, 0xfaf9, 0x9a2d, 0xcd5a, 0xad8e, 0x0cf2, 0x6c26, 0xd4be, 0xb46a, 0x1516, 0x75c2, 0x22b5, 0x4261, 0xe31d, 0x83c9, 0x4df3, 0x2d27, 0x8c5b, 0xec8f, 0xbbf8, 0xdb2c, 0x7a50, 0x1a84, 0x937f, 0xf3ab, 0x52d7, 0x3203, 0x6574, 0x05a0, 0xa4dc, 0xc408, 0x0a32, 0x6ae6, 0xcb9a, 0xab4e, 0xfc39, 0x9ced, 0x3d91, 0x5d45, 0x5b3c, 0x3be8, 0x9a94, 0xfa40, 0xad37, 0xcde3, 0x6c9f, 0x0c4b, 0xc271, 0xa2a5, 0x03d9, 0x630d, 0x347a, 0x54ae, 0xf5d2, 0x9506, 0x1cfd, 0x7c29, 0xdd55, 0xbd81, 0xeaf6, 0x8a22, 0x2b5e, 0x4b8a, 0x85b0, 0xe564, 0x4418, 0x24cc, 0x73bb, 0x136f, 0xb213, 0xd2c7, 0xbee1, 0xde35, 0x7f49, 0x1f9d, 0x48ea, 0x283e, 0x8942, 0xe996, 0x27ac, 0x4778, 0xe604, 0x86d0, 0xd1a7, 0xb173, 0x100f, 0x70db, 0xf920, 0x99f4, 0x3888, 0x585c, 0x0f2b, 0x6fff, 0xce83, 0xae57, 0x606d, 0x00b9, 0xa1c5, 0xc111, 0x9666, 0xf6b2, 0x57ce, 0x371a, 0x3163, 0x51b7, 0xf0cb, 0x901f, 0xc768, 0xa7bc, 0x06c0, 0x6614, 0xa82e, 0xc8fa, 0x6986, 0x0952, 0x5e25, 0x3ef1, 0x9f8d, 0xff59, 0x76a2, 0x1676, 0xb70a, 0xd7de, 0x80a9, 0xe07d, 0x4101, 0x21d5, 0xefef, 0x8f3b, 0x2e47, 0x4e93, 0x19e4, 0x7930, 0xd84c, 0xb898, ], [ 0x0000, 0xdc27, 0xcd15, 0x1132, 0xef71, 0x3356, 0x2264, 0xfe43, 0xabb9, 0x779e, 0x66ac, 0xba8b, 0x44c8, 0x98ef, 0x89dd, 0x55fa, 0x2229, 0xfe0e, 0xef3c, 0x331b, 0xcd58, 0x117f, 0x004d, 0xdc6a, 0x8990, 0x55b7, 0x4485, 0x98a2, 0x66e1, 0xbac6, 0xabf4, 0x77d3, 0x4452, 0x9875, 0x8947, 0x5560, 0xab23, 0x7704, 0x6636, 0xba11, 0xefeb, 0x33cc, 0x22fe, 0xfed9, 0x009a, 0xdcbd, 0xcd8f, 0x11a8, 0x667b, 0xba5c, 0xab6e, 0x7749, 0x890a, 0x552d, 0x441f, 0x9838, 0xcdc2, 0x11e5, 0x00d7, 0xdcf0, 0x22b3, 0xfe94, 0xefa6, 0x3381, 0x88a4, 0x5483, 0x45b1, 0x9996, 0x67d5, 0xbbf2, 0xaac0, 0x76e7, 0x231d, 0xff3a, 0xee08, 0x322f, 0xcc6c, 0x104b, 0x0179, 0xdd5e, 0xaa8d, 0x76aa, 0x6798, 0xbbbf, 0x45fc, 0x99db, 0x88e9, 0x54ce, 0x0134, 0xdd13, 0xcc21, 0x1006, 0xee45, 0x3262, 0x2350, 0xff77, 0xccf6, 0x10d1, 0x01e3, 0xddc4, 0x2387, 0xffa0, 0xee92, 0x32b5, 0x674f, 0xbb68, 0xaa5a, 0x767d, 0x883e, 0x5419, 0x452b, 0x990c, 0xeedf, 0x32f8, 0x23ca, 0xffed, 0x01ae, 0xdd89, 0xccbb, 0x109c, 0x4566, 0x9941, 0x8873, 0x5454, 0xaa17, 0x7630, 0x6702, 0xbb25, 0x6413, 0xb834, 0xa906, 0x7521, 0x8b62, 0x5745, 0x4677, 0x9a50, 0xcfaa, 0x138d, 0x02bf, 0xde98, 0x20db, 0xfcfc, 0xedce, 0x31e9, 0x463a, 0x9a1d, 0x8b2f, 0x5708, 0xa94b, 0x756c, 0x645e, 0xb879, 0xed83, 0x31a4, 0x2096, 0xfcb1, 0x02f2, 0xded5, 0xcfe7, 0x13c0, 0x2041, 0xfc66, 0xed54, 0x3173, 0xcf30, 0x1317, 0x0225, 0xde02, 0x8bf8, 0x57df, 0x46ed, 0x9aca, 0x6489, 0xb8ae, 0xa99c, 0x75bb, 0x0268, 0xde4f, 0xcf7d, 0x135a, 0xed19, 0x313e, 0x200c, 0xfc2b, 0xa9d1, 0x75f6, 0x64c4, 0xb8e3, 0x46a0, 0x9a87, 0x8bb5, 0x5792, 0xecb7, 0x3090, 0x21a2, 0xfd85, 0x03c6, 0xdfe1, 0xced3, 0x12f4, 0x470e, 0x9b29, 0x8a1b, 0x563c, 0xa87f, 0x7458, 0x656a, 0xb94d, 0xce9e, 0x12b9, 0x038b, 0xdfac, 0x21ef, 0xfdc8, 0xecfa, 0x30dd, 0x6527, 0xb900, 0xa832, 0x7415, 0x8a56, 0x5671, 0x4743, 0x9b64, 0xa8e5, 0x74c2, 0x65f0, 0xb9d7, 0x4794, 0x9bb3, 0x8a81, 0x56a6, 0x035c, 0xdf7b, 0xce49, 0x126e, 0xec2d, 0x300a, 0x2138, 0xfd1f, 0x8acc, 0x56eb, 0x47d9, 0x9bfe, 0x65bd, 0xb99a, 0xa8a8, 0x748f, 0x2175, 0xfd52, 0xec60, 0x3047, 0xce04, 0x1223, 0x0311, 0xdf36, ], [ 0x0000, 0xc826, 0xe517, 0x2d31, 0xbf75, 0x7753, 0x5a62, 0x9244, 0x0bb1, 0xc397, 0xeea6, 0x2680, 0xb4c4, 0x7ce2, 0x51d3, 0x99f5, 0x1762, 0xdf44, 0xf275, 0x3a53, 0xa817, 0x6031, 0x4d00, 0x8526, 0x1cd3, 0xd4f5, 0xf9c4, 0x31e2, 0xa3a6, 0x6b80, 0x46b1, 0x8e97, 0x2ec4, 0xe6e2, 0xcbd3, 0x03f5, 0x91b1, 0x5997, 0x74a6, 0xbc80, 0x2575, 0xed53, 0xc062, 0x0844, 0x9a00, 0x5226, 0x7f17, 0xb731, 0x39a6, 0xf180, 0xdcb1, 0x1497, 0x86d3, 0x4ef5, 0x63c4, 0xabe2, 0x3217, 0xfa31, 0xd700, 0x1f26, 0x8d62, 0x4544, 0x6875, 0xa053, 0x5d88, 0x95ae, 0xb89f, 0x70b9, 0xe2fd, 0x2adb, 0x07ea, 0xcfcc, 0x5639, 0x9e1f, 0xb32e, 0x7b08, 0xe94c, 0x216a, 0x0c5b, 0xc47d, 0x4aea, 0x82cc, 0xaffd, 0x67db, 0xf59f, 0x3db9, 0x1088, 0xd8ae, 0x415b, 0x897d, 0xa44c, 0x6c6a, 0xfe2e, 0x3608, 0x1b39, 0xd31f, 0x734c, 0xbb6a, 0x965b, 0x5e7d, 0xcc39, 0x041f, 0x292e, 0xe108, 0x78fd, 0xb0db, 0x9dea, 0x55cc, 0xc788, 0x0fae, 0x229f, 0xeab9, 0x642e, 0xac08, 0x8139, 0x491f, 0xdb5b, 0x137d, 0x3e4c, 0xf66a, 0x6f9f, 0xa7b9, 0x8a88, 0x42ae, 0xd0ea, 0x18cc, 0x35fd, 0xfddb, 0xbb10, 0x7336, 0x5e07, 0x9621, 0x0465, 0xcc43, 0xe172, 0x2954, 0xb0a1, 0x7887, 0x55b6, 0x9d90, 0x0fd4, 0xc7f2, 0xeac3, 0x22e5, 0xac72, 0x6454, 0x4965, 0x8143, 0x1307, 0xdb21, 0xf610, 0x3e36, 0xa7c3, 0x6fe5, 0x42d4, 0x8af2, 0x18b6, 0xd090, 0xfda1, 0x3587, 0x95d4, 0x5df2, 0x70c3, 0xb8e5, 0x2aa1, 0xe287, 0xcfb6, 0x0790, 0x9e65, 0x5643, 0x7b72, 0xb354, 0x2110, 0xe936, 0xc407, 0x0c21, 0x82b6, 0x4a90, 0x67a1, 0xaf87, 0x3dc3, 0xf5e5, 0xd8d4, 0x10f2, 0x8907, 0x4121, 0x6c10, 0xa436, 0x3672, 0xfe54, 0xd365, 0x1b43, 0xe698, 0x2ebe, 0x038f, 0xcba9, 0x59ed, 0x91cb, 0xbcfa, 0x74dc, 0xed29, 0x250f, 0x083e, 0xc018, 0x525c, 0x9a7a, 0xb74b, 0x7f6d, 0xf1fa, 0x39dc, 0x14ed, 0xdccb, 0x4e8f, 0x86a9, 0xab98, 0x63be, 0xfa4b, 0x326d, 0x1f5c, 0xd77a, 0x453e, 0x8d18, 0xa029, 0x680f, 0xc85c, 0x007a, 0x2d4b, 0xe56d, 0x7729, 0xbf0f, 0x923e, 0x5a18, 0xc3ed, 0x0bcb, 0x26fa, 0xeedc, 0x7c98, 0xb4be, 0x998f, 0x51a9, 0xdf3e, 0x1718, 0x3a29, 0xf20f, 0x604b, 0xa86d, 0x855c, 0x4d7a, 0xd48f, 0x1ca9, 0x3198, 0xf9be, 0x6bfa, 0xa3dc, 0x8eed, 0x46cb, ], [ 0x0000, 0x037b, 0x06f6, 0x058d, 0x0dec, 0x0e97, 0x0b1a, 0x0861, 0x1bd8, 0x18a3, 0x1d2e, 0x1e55, 0x1634, 0x154f, 0x10c2, 0x13b9, 0x37b0, 0x34cb, 0x3146, 0x323d, 0x3a5c, 0x3927, 0x3caa, 0x3fd1, 0x2c68, 0x2f13, 0x2a9e, 0x29e5, 0x2184, 0x22ff, 0x2772, 0x2409, 0x6f60, 0x6c1b, 0x6996, 0x6aed, 0x628c, 0x61f7, 0x647a, 0x6701, 0x74b8, 0x77c3, 0x724e, 0x7135, 0x7954, 0x7a2f, 0x7fa2, 0x7cd9, 0x58d0, 0x5bab, 0x5e26, 0x5d5d, 0x553c, 0x5647, 0x53ca, 0x50b1, 0x4308, 0x4073, 0x45fe, 0x4685, 0x4ee4, 0x4d9f, 0x4812, 0x4b69, 0xdec0, 0xddbb, 0xd836, 0xdb4d, 0xd32c, 0xd057, 0xd5da, 0xd6a1, 0xc518, 0xc663, 0xc3ee, 0xc095, 0xc8f4, 0xcb8f, 0xce02, 0xcd79, 0xe970, 0xea0b, 0xef86, 0xecfd, 0xe49c, 0xe7e7, 0xe26a, 0xe111, 0xf2a8, 0xf1d3, 0xf45e, 0xf725, 0xff44, 0xfc3f, 0xf9b2, 0xfac9, 0xb1a0, 0xb2db, 0xb756, 0xb42d, 0xbc4c, 0xbf37, 0xbaba, 0xb9c1, 0xaa78, 0xa903, 0xac8e, 0xaff5, 0xa794, 0xa4ef, 0xa162, 0xa219, 0x8610, 0x856b, 0x80e6, 0x839d, 0x8bfc, 0x8887, 0x8d0a, 0x8e71, 0x9dc8, 0x9eb3, 0x9b3e, 0x9845, 0x9024, 0x935f, 0x96d2, 0x95a9, 0xc8db, 0xcba0, 0xce2d, 0xcd56, 0xc537, 0xc64c, 0xc3c1, 0xc0ba, 0xd303, 0xd078, 0xd5f5, 0xd68e, 0xdeef, 0xdd94, 0xd819, 0xdb62, 0xff6b, 0xfc10, 0xf99d, 0xfae6, 0xf287, 0xf1fc, 0xf471, 0xf70a, 0xe4b3, 0xe7c8, 0xe245, 0xe13e, 0xe95f, 0xea24, 0xefa9, 0xecd2, 0xa7bb, 0xa4c0, 0xa14d, 0xa236, 0xaa57, 0xa92c, 0xaca1, 0xafda, 0xbc63, 0xbf18, 0xba95, 0xb9ee, 0xb18f, 0xb2f4, 0xb779, 0xb402, 0x900b, 0x9370, 0x96fd, 0x9586, 0x9de7, 0x9e9c, 0x9b11, 0x986a, 0x8bd3, 0x88a8, 0x8d25, 0x8e5e, 0x863f, 0x8544, 0x80c9, 0x83b2, 0x161b, 0x1560, 0x10ed, 0x1396, 0x1bf7, 0x188c, 0x1d01, 0x1e7a, 0x0dc3, 0x0eb8, 0x0b35, 0x084e, 0x002f, 0x0354, 0x06d9, 0x05a2, 0x21ab, 0x22d0, 0x275d, 0x2426, 0x2c47, 0x2f3c, 0x2ab1, 0x29ca, 0x3a73, 0x3908, 0x3c85, 0x3ffe, 0x379f, 0x34e4, 0x3169, 0x3212, 0x797b, 0x7a00, 0x7f8d, 0x7cf6, 0x7497, 0x77ec, 0x7261, 0x711a, 0x62a3, 0x61d8, 0x6455, 0x672e, 0x6f4f, 0x6c34, 0x69b9, 0x6ac2, 0x4ecb, 0x4db0, 0x483d, 0x4b46, 0x4327, 0x405c, 0x45d1, 0x46aa, 0x5513, 0x5668, 0x53e5, 0x509e, 0x58ff, 0x5b84, 0x5e09, 0x5d72, ], [ 0x0000, 0xe4ed, 0xbc81, 0x586c, 0x0c59, 0xe8b4, 0xb0d8, 0x5435, 0x18b2, 0xfc5f, 0xa433, 0x40de, 0x14eb, 0xf006, 0xa86a, 0x4c87, 0x3164, 0xd589, 0x8de5, 0x6908, 0x3d3d, 0xd9d0, 0x81bc, 0x6551, 0x29d6, 0xcd3b, 0x9557, 0x71ba, 0x258f, 0xc162, 0x990e, 0x7de3, 0x62c8, 0x8625, 0xde49, 0x3aa4, 0x6e91, 0x8a7c, 0xd210, 0x36fd, 0x7a7a, 0x9e97, 0xc6fb, 0x2216, 0x7623, 0x92ce, 0xcaa2, 0x2e4f, 0x53ac, 0xb741, 0xef2d, 0x0bc0, 0x5ff5, 0xbb18, 0xe374, 0x0799, 0x4b1e, 0xaff3, 0xf79f, 0x1372, 0x4747, 0xa3aa, 0xfbc6, 0x1f2b, 0xc590, 0x217d, 0x7911, 0x9dfc, 0xc9c9, 0x2d24, 0x7548, 0x91a5, 0xdd22, 0x39cf, 0x61a3, 0x854e, 0xd17b, 0x3596, 0x6dfa, 0x8917, 0xf4f4, 0x1019, 0x4875, 0xac98, 0xf8ad, 0x1c40, 0x442c, 0xa0c1, 0xec46, 0x08ab, 0x50c7, 0xb42a, 0xe01f, 0x04f2, 0x5c9e, 0xb873, 0xa758, 0x43b5, 0x1bd9, 0xff34, 0xab01, 0x4fec, 0x1780, 0xf36d, 0xbfea, 0x5b07, 0x036b, 0xe786, 0xb3b3, 0x575e, 0x0f32, 0xebdf, 0x963c, 0x72d1, 0x2abd, 0xce50, 0x9a65, 0x7e88, 0x26e4, 0xc209, 0x8e8e, 0x6a63, 0x320f, 0xd6e2, 0x82d7, 0x663a, 0x3e56, 0xdabb, 0xfe7b, 0x1a96, 0x42fa, 0xa617, 0xf222, 0x16cf, 0x4ea3, 0xaa4e, 0xe6c9, 0x0224, 0x5a48, 0xbea5, 0xea90, 0x0e7d, 0x5611, 0xb2fc, 0xcf1f, 0x2bf2, 0x739e, 0x9773, 0xc346, 0x27ab, 0x7fc7, 0x9b2a, 0xd7ad, 0x3340, 0x6b2c, 0x8fc1, 0xdbf4, 0x3f19, 0x6775, 0x8398, 0x9cb3, 0x785e, 0x2032, 0xc4df, 0x90ea, 0x7407, 0x2c6b, 0xc886, 0x8401, 0x60ec, 0x3880, 0xdc6d, 0x8858, 0x6cb5, 0x34d9, 0xd034, 0xadd7, 0x493a, 0x1156, 0xf5bb, 0xa18e, 0x4563, 0x1d0f, 0xf9e2, 0xb565, 0x5188, 0x09e4, 0xed09, 0xb93c, 0x5dd1, 0x05bd, 0xe150, 0x3beb, 0xdf06, 0x876a, 0x6387, 0x37b2, 0xd35f, 0x8b33, 0x6fde, 0x2359, 0xc7b4, 0x9fd8, 0x7b35, 0x2f00, 0xcbed, 0x9381, 0x776c, 0x0a8f, 0xee62, 0xb60e, 0x52e3, 0x06d6, 0xe23b, 0xba57, 0x5eba, 0x123d, 0xf6d0, 0xaebc, 0x4a51, 0x1e64, 0xfa89, 0xa2e5, 0x4608, 0x5923, 0xbdce, 0xe5a2, 0x014f, 0x557a, 0xb197, 0xe9fb, 0x0d16, 0x4191, 0xa57c, 0xfd10, 0x19fd, 0x4dc8, 0xa925, 0xf149, 0x15a4, 0x6847, 0x8caa, 0xd4c6, 0x302b, 0x641e, 0x80f3, 0xd89f, 0x3c72, 0x70f5, 0x9418, 0xcc74, 0x2899, 0x7cac, 0x9841, 0xc02d, 0x24c0, ], [ 0x0000, 0x89ad, 0x6601, 0xefac, 0xcc02, 0x45af, 0xaa03, 0x23ae, 0xed5f, 0x64f2, 0x8b5e, 0x02f3, 0x215d, 0xa8f0, 0x475c, 0xcef1, 0xafe5, 0x2648, 0xc9e4, 0x4049, 0x63e7, 0xea4a, 0x05e6, 0x8c4b, 0x42ba, 0xcb17, 0x24bb, 0xad16, 0x8eb8, 0x0715, 0xe8b9, 0x6114, 0x2a91, 0xa33c, 0x4c90, 0xc53d, 0xe693, 0x6f3e, 0x8092, 0x093f, 0xc7ce, 0x4e63, 0xa1cf, 0x2862, 0x0bcc, 0x8261, 0x6dcd, 0xe460, 0x8574, 0x0cd9, 0xe375, 0x6ad8, 0x4976, 0xc0db, 0x2f77, 0xa6da, 0x682b, 0xe186, 0x0e2a, 0x8787, 0xa429, 0x2d84, 0xc228, 0x4b85, 0x5522, 0xdc8f, 0x3323, 0xba8e, 0x9920, 0x108d, 0xff21, 0x768c, 0xb87d, 0x31d0, 0xde7c, 0x57d1, 0x747f, 0xfdd2, 0x127e, 0x9bd3, 0xfac7, 0x736a, 0x9cc6, 0x156b, 0x36c5, 0xbf68, 0x50c4, 0xd969, 0x1798, 0x9e35, 0x7199, 0xf834, 0xdb9a, 0x5237, 0xbd9b, 0x3436, 0x7fb3, 0xf61e, 0x19b2, 0x901f, 0xb3b1, 0x3a1c, 0xd5b0, 0x5c1d, 0x92ec, 0x1b41, 0xf4ed, 0x7d40, 0x5eee, 0xd743, 0x38ef, 0xb142, 0xd056, 0x59fb, 0xb657, 0x3ffa, 0x1c54, 0x95f9, 0x7a55, 0xf3f8, 0x3d09, 0xb4a4, 0x5b08, 0xd2a5, 0xf10b, 0x78a6, 0x970a, 0x1ea7, 0xaa44, 0x23e9, 0xcc45, 0x45e8, 0x6646, 0xefeb, 0x0047, 0x89ea, 0x471b, 0xceb6, 0x211a, 0xa8b7, 0x8b19, 0x02b4, 0xed18, 0x64b5, 0x05a1, 0x8c0c, 0x63a0, 0xea0d, 0xc9a3, 0x400e, 0xafa2, 0x260f, 0xe8fe, 0x6153, 0x8eff, 0x0752, 0x24fc, 0xad51, 0x42fd, 0xcb50, 0x80d5, 0x0978, 0xe6d4, 0x6f79, 0x4cd7, 0xc57a, 0x2ad6, 0xa37b, 0x6d8a, 0xe427, 0x0b8b, 0x8226, 0xa188, 0x2825, 0xc789, 0x4e24, 0x2f30, 0xa69d, 0x4931, 0xc09c, 0xe332, 0x6a9f, 0x8533, 0x0c9e, 0xc26f, 0x4bc2, 0xa46e, 0x2dc3, 0x0e6d, 0x87c0, 0x686c, 0xe1c1, 0xff66, 0x76cb, 0x9967, 0x10ca, 0x3364, 0xbac9, 0x5565, 0xdcc8, 0x1239, 0x9b94, 0x7438, 0xfd95, 0xde3b, 0x5796, 0xb83a, 0x3197, 0x5083, 0xd92e, 0x3682, 0xbf2f, 0x9c81, 0x152c, 0xfa80, 0x732d, 0xbddc, 0x3471, 0xdbdd, 0x5270, 0x71de, 0xf873, 0x17df, 0x9e72, 0xd5f7, 0x5c5a, 0xb3f6, 0x3a5b, 0x19f5, 0x9058, 0x7ff4, 0xf659, 0x38a8, 0xb105, 0x5ea9, 0xd704, 0xf4aa, 0x7d07, 0x92ab, 0x1b06, 0x7a12, 0xf3bf, 0x1c13, 0x95be, 0xb610, 0x3fbd, 0xd011, 0x59bc, 0x974d, 0x1ee0, 0xf14c, 0x78e1, 0x5b4f, 0xd2e2, 0x3d4e, 0xb4e3, ], ]; pub static CRC16_PROFIBUS_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1dcf, 0x3b9e, 0x2651, 0x773c, 0x6af3, 0x4ca2, 0x516d, 0xee78, 0xf3b7, 0xd5e6, 0xc829, 0x9944, 0x848b, 0xa2da, 0xbf15, 0xc13f, 0xdcf0, 0xfaa1, 0xe76e, 0xb603, 0xabcc, 0x8d9d, 0x9052, 0x2f47, 0x3288, 0x14d9, 0x0916, 0x587b, 0x45b4, 0x63e5, 0x7e2a, 0x9fb1, 0x827e, 0xa42f, 0xb9e0, 0xe88d, 0xf542, 0xd313, 0xcedc, 0x71c9, 0x6c06, 0x4a57, 0x5798, 0x06f5, 0x1b3a, 0x3d6b, 0x20a4, 0x5e8e, 0x4341, 0x6510, 0x78df, 0x29b2, 0x347d, 0x122c, 0x0fe3, 0xb0f6, 0xad39, 0x8b68, 0x96a7, 0xc7ca, 0xda05, 0xfc54, 0xe19b, 0x22ad, 0x3f62, 0x1933, 0x04fc, 0x5591, 0x485e, 0x6e0f, 0x73c0, 0xccd5, 0xd11a, 0xf74b, 0xea84, 0xbbe9, 0xa626, 0x8077, 0x9db8, 0xe392, 0xfe5d, 0xd80c, 0xc5c3, 0x94ae, 0x8961, 0xaf30, 0xb2ff, 0x0dea, 0x1025, 0x3674, 0x2bbb, 0x7ad6, 0x6719, 0x4148, 0x5c87, 0xbd1c, 0xa0d3, 0x8682, 0x9b4d, 0xca20, 0xd7ef, 0xf1be, 0xec71, 0x5364, 0x4eab, 0x68fa, 0x7535, 0x2458, 0x3997, 0x1fc6, 0x0209, 0x7c23, 0x61ec, 0x47bd, 0x5a72, 0x0b1f, 0x16d0, 0x3081, 0x2d4e, 0x925b, 0x8f94, 0xa9c5, 0xb40a, 0xe567, 0xf8a8, 0xdef9, 0xc336, 0x455a, 0x5895, 0x7ec4, 0x630b, 0x3266, 0x2fa9, 0x09f8, 0x1437, 0xab22, 0xb6ed, 0x90bc, 0x8d73, 0xdc1e, 0xc1d1, 0xe780, 0xfa4f, 0x8465, 0x99aa, 0xbffb, 0xa234, 0xf359, 0xee96, 0xc8c7, 0xd508, 0x6a1d, 0x77d2, 0x5183, 0x4c4c, 0x1d21, 0x00ee, 0x26bf, 0x3b70, 0xdaeb, 0xc724, 0xe175, 0xfcba, 0xadd7, 0xb018, 0x9649, 0x8b86, 0x3493, 0x295c, 0x0f0d, 0x12c2, 0x43af, 0x5e60, 0x7831, 0x65fe, 0x1bd4, 0x061b, 0x204a, 0x3d85, 0x6ce8, 0x7127, 0x5776, 0x4ab9, 0xf5ac, 0xe863, 0xce32, 0xd3fd, 0x8290, 0x9f5f, 0xb90e, 0xa4c1, 0x67f7, 0x7a38, 0x5c69, 0x41a6, 0x10cb, 0x0d04, 0x2b55, 0x369a, 0x898f, 0x9440, 0xb211, 0xafde, 0xfeb3, 0xe37c, 0xc52d, 0xd8e2, 0xa6c8, 0xbb07, 0x9d56, 0x8099, 0xd1f4, 0xcc3b, 0xea6a, 0xf7a5, 0x48b0, 0x557f, 0x732e, 0x6ee1, 0x3f8c, 0x2243, 0x0412, 0x19dd, 0xf846, 0xe589, 0xc3d8, 0xde17, 0x8f7a, 0x92b5, 0xb4e4, 0xa92b, 0x163e, 0x0bf1, 0x2da0, 0x306f, 0x6102, 0x7ccd, 0x5a9c, 0x4753, 0x3979, 0x24b6, 0x02e7, 0x1f28, 0x4e45, 0x538a, 0x75db, 0x6814, 0xd701, 0xcace, 0xec9f, 0xf150, 0xa03d, 0xbdf2, 0x9ba3, 0x866c, ], [ 0x0000, 0x8ab4, 0x08a7, 0x8213, 0x114e, 0x9bfa, 0x19e9, 0x935d, 0x229c, 0xa828, 0x2a3b, 0xa08f, 0x33d2, 0xb966, 0x3b75, 0xb1c1, 0x4538, 0xcf8c, 0x4d9f, 0xc72b, 0x5476, 0xdec2, 0x5cd1, 0xd665, 0x67a4, 0xed10, 0x6f03, 0xe5b7, 0x76ea, 0xfc5e, 0x7e4d, 0xf4f9, 0x8a70, 0x00c4, 0x82d7, 0x0863, 0x9b3e, 0x118a, 0x9399, 0x192d, 0xa8ec, 0x2258, 0xa04b, 0x2aff, 0xb9a2, 0x3316, 0xb105, 0x3bb1, 0xcf48, 0x45fc, 0xc7ef, 0x4d5b, 0xde06, 0x54b2, 0xd6a1, 0x5c15, 0xedd4, 0x6760, 0xe573, 0x6fc7, 0xfc9a, 0x762e, 0xf43d, 0x7e89, 0x092f, 0x839b, 0x0188, 0x8b3c, 0x1861, 0x92d5, 0x10c6, 0x9a72, 0x2bb3, 0xa107, 0x2314, 0xa9a0, 0x3afd, 0xb049, 0x325a, 0xb8ee, 0x4c17, 0xc6a3, 0x44b0, 0xce04, 0x5d59, 0xd7ed, 0x55fe, 0xdf4a, 0x6e8b, 0xe43f, 0x662c, 0xec98, 0x7fc5, 0xf571, 0x7762, 0xfdd6, 0x835f, 0x09eb, 0x8bf8, 0x014c, 0x9211, 0x18a5, 0x9ab6, 0x1002, 0xa1c3, 0x2b77, 0xa964, 0x23d0, 0xb08d, 0x3a39, 0xb82a, 0x329e, 0xc667, 0x4cd3, 0xcec0, 0x4474, 0xd729, 0x5d9d, 0xdf8e, 0x553a, 0xe4fb, 0x6e4f, 0xec5c, 0x66e8, 0xf5b5, 0x7f01, 0xfd12, 0x77a6, 0x125e, 0x98ea, 0x1af9, 0x904d, 0x0310, 0x89a4, 0x0bb7, 0x8103, 0x30c2, 0xba76, 0x3865, 0xb2d1, 0x218c, 0xab38, 0x292b, 0xa39f, 0x5766, 0xddd2, 0x5fc1, 0xd575, 0x4628, 0xcc9c, 0x4e8f, 0xc43b, 0x75fa, 0xff4e, 0x7d5d, 0xf7e9, 0x64b4, 0xee00, 0x6c13, 0xe6a7, 0x982e, 0x129a, 0x9089, 0x1a3d, 0x8960, 0x03d4, 0x81c7, 0x0b73, 0xbab2, 0x3006, 0xb215, 0x38a1, 0xabfc, 0x2148, 0xa35b, 0x29ef, 0xdd16, 0x57a2, 0xd5b1, 0x5f05, 0xcc58, 0x46ec, 0xc4ff, 0x4e4b, 0xff8a, 0x753e, 0xf72d, 0x7d99, 0xeec4, 0x6470, 0xe663, 0x6cd7, 0x1b71, 0x91c5, 0x13d6, 0x9962, 0x0a3f, 0x808b, 0x0298, 0x882c, 0x39ed, 0xb359, 0x314a, 0xbbfe, 0x28a3, 0xa217, 0x2004, 0xaab0, 0x5e49, 0xd4fd, 0x56ee, 0xdc5a, 0x4f07, 0xc5b3, 0x47a0, 0xcd14, 0x7cd5, 0xf661, 0x7472, 0xfec6, 0x6d9b, 0xe72f, 0x653c, 0xef88, 0x9101, 0x1bb5, 0x99a6, 0x1312, 0x804f, 0x0afb, 0x88e8, 0x025c, 0xb39d, 0x3929, 0xbb3a, 0x318e, 0xa2d3, 0x2867, 0xaa74, 0x20c0, 0xd439, 0x5e8d, 0xdc9e, 0x562a, 0xc577, 0x4fc3, 0xcdd0, 0x4764, 0xf6a5, 0x7c11, 0xfe02, 0x74b6, 0xe7eb, 0x6d5f, 0xef4c, 0x65f8, ], [ 0x0000, 0x24bc, 0x4978, 0x6dc4, 0x92f0, 0xb64c, 0xdb88, 0xff34, 0x382f, 0x1c93, 0x7157, 0x55eb, 0xaadf, 0x8e63, 0xe3a7, 0xc71b, 0x705e, 0x54e2, 0x3926, 0x1d9a, 0xe2ae, 0xc612, 0xabd6, 0x8f6a, 0x4871, 0x6ccd, 0x0109, 0x25b5, 0xda81, 0xfe3d, 0x93f9, 0xb745, 0xe0bc, 0xc400, 0xa9c4, 0x8d78, 0x724c, 0x56f0, 0x3b34, 0x1f88, 0xd893, 0xfc2f, 0x91eb, 0xb557, 0x4a63, 0x6edf, 0x031b, 0x27a7, 0x90e2, 0xb45e, 0xd99a, 0xfd26, 0x0212, 0x26ae, 0x4b6a, 0x6fd6, 0xa8cd, 0x8c71, 0xe1b5, 0xc509, 0x3a3d, 0x1e81, 0x7345, 0x57f9, 0xdcb7, 0xf80b, 0x95cf, 0xb173, 0x4e47, 0x6afb, 0x073f, 0x2383, 0xe498, 0xc024, 0xade0, 0x895c, 0x7668, 0x52d4, 0x3f10, 0x1bac, 0xace9, 0x8855, 0xe591, 0xc12d, 0x3e19, 0x1aa5, 0x7761, 0x53dd, 0x94c6, 0xb07a, 0xddbe, 0xf902, 0x0636, 0x228a, 0x4f4e, 0x6bf2, 0x3c0b, 0x18b7, 0x7573, 0x51cf, 0xaefb, 0x8a47, 0xe783, 0xc33f, 0x0424, 0x2098, 0x4d5c, 0x69e0, 0x96d4, 0xb268, 0xdfac, 0xfb10, 0x4c55, 0x68e9, 0x052d, 0x2191, 0xdea5, 0xfa19, 0x97dd, 0xb361, 0x747a, 0x50c6, 0x3d02, 0x19be, 0xe68a, 0xc236, 0xaff2, 0x8b4e, 0xa4a1, 0x801d, 0xedd9, 0xc965, 0x3651, 0x12ed, 0x7f29, 0x5b95, 0x9c8e, 0xb832, 0xd5f6, 0xf14a, 0x0e7e, 0x2ac2, 0x4706, 0x63ba, 0xd4ff, 0xf043, 0x9d87, 0xb93b, 0x460f, 0x62b3, 0x0f77, 0x2bcb, 0xecd0, 0xc86c, 0xa5a8, 0x8114, 0x7e20, 0x5a9c, 0x3758, 0x13e4, 0x441d, 0x60a1, 0x0d65, 0x29d9, 0xd6ed, 0xf251, 0x9f95, 0xbb29, 0x7c32, 0x588e, 0x354a, 0x11f6, 0xeec2, 0xca7e, 0xa7ba, 0x8306, 0x3443, 0x10ff, 0x7d3b, 0x5987, 0xa6b3, 0x820f, 0xefcb, 0xcb77, 0x0c6c, 0x28d0, 0x4514, 0x61a8, 0x9e9c, 0xba20, 0xd7e4, 0xf358, 0x7816, 0x5caa, 0x316e, 0x15d2, 0xeae6, 0xce5a, 0xa39e, 0x8722, 0x4039, 0x6485, 0x0941, 0x2dfd, 0xd2c9, 0xf675, 0x9bb1, 0xbf0d, 0x0848, 0x2cf4, 0x4130, 0x658c, 0x9ab8, 0xbe04, 0xd3c0, 0xf77c, 0x3067, 0x14db, 0x791f, 0x5da3, 0xa297, 0x862b, 0xebef, 0xcf53, 0x98aa, 0xbc16, 0xd1d2, 0xf56e, 0x0a5a, 0x2ee6, 0x4322, 0x679e, 0xa085, 0x8439, 0xe9fd, 0xcd41, 0x3275, 0x16c9, 0x7b0d, 0x5fb1, 0xe8f4, 0xcc48, 0xa18c, 0x8530, 0x7a04, 0x5eb8, 0x337c, 0x17c0, 0xd0db, 0xf467, 0x99a3, 0xbd1f, 0x422b, 0x6697, 0x0b53, 0x2fef, ], [ 0x0000, 0x548d, 0xa91a, 0xfd97, 0x4ffb, 0x1b76, 0xe6e1, 0xb26c, 0x9ff6, 0xcb7b, 0x36ec, 0x6261, 0xd00d, 0x8480, 0x7917, 0x2d9a, 0x2223, 0x76ae, 0x8b39, 0xdfb4, 0x6dd8, 0x3955, 0xc4c2, 0x904f, 0xbdd5, 0xe958, 0x14cf, 0x4042, 0xf22e, 0xa6a3, 0x5b34, 0x0fb9, 0x4446, 0x10cb, 0xed5c, 0xb9d1, 0x0bbd, 0x5f30, 0xa2a7, 0xf62a, 0xdbb0, 0x8f3d, 0x72aa, 0x2627, 0x944b, 0xc0c6, 0x3d51, 0x69dc, 0x6665, 0x32e8, 0xcf7f, 0x9bf2, 0x299e, 0x7d13, 0x8084, 0xd409, 0xf993, 0xad1e, 0x5089, 0x0404, 0xb668, 0xe2e5, 0x1f72, 0x4bff, 0x888c, 0xdc01, 0x2196, 0x751b, 0xc777, 0x93fa, 0x6e6d, 0x3ae0, 0x177a, 0x43f7, 0xbe60, 0xeaed, 0x5881, 0x0c0c, 0xf19b, 0xa516, 0xaaaf, 0xfe22, 0x03b5, 0x5738, 0xe554, 0xb1d9, 0x4c4e, 0x18c3, 0x3559, 0x61d4, 0x9c43, 0xc8ce, 0x7aa2, 0x2e2f, 0xd3b8, 0x8735, 0xccca, 0x9847, 0x65d0, 0x315d, 0x8331, 0xd7bc, 0x2a2b, 0x7ea6, 0x533c, 0x07b1, 0xfa26, 0xaeab, 0x1cc7, 0x484a, 0xb5dd, 0xe150, 0xeee9, 0xba64, 0x47f3, 0x137e, 0xa112, 0xf59f, 0x0808, 0x5c85, 0x711f, 0x2592, 0xd805, 0x8c88, 0x3ee4, 0x6a69, 0x97fe, 0xc373, 0x0cd7, 0x585a, 0xa5cd, 0xf140, 0x432c, 0x17a1, 0xea36, 0xbebb, 0x9321, 0xc7ac, 0x3a3b, 0x6eb6, 0xdcda, 0x8857, 0x75c0, 0x214d, 0x2ef4, 0x7a79, 0x87ee, 0xd363, 0x610f, 0x3582, 0xc815, 0x9c98, 0xb102, 0xe58f, 0x1818, 0x4c95, 0xfef9, 0xaa74, 0x57e3, 0x036e, 0x4891, 0x1c1c, 0xe18b, 0xb506, 0x076a, 0x53e7, 0xae70, 0xfafd, 0xd767, 0x83ea, 0x7e7d, 0x2af0, 0x989c, 0xcc11, 0x3186, 0x650b, 0x6ab2, 0x3e3f, 0xc3a8, 0x9725, 0x2549, 0x71c4, 0x8c53, 0xd8de, 0xf544, 0xa1c9, 0x5c5e, 0x08d3, 0xbabf, 0xee32, 0x13a5, 0x4728, 0x845b, 0xd0d6, 0x2d41, 0x79cc, 0xcba0, 0x9f2d, 0x62ba, 0x3637, 0x1bad, 0x4f20, 0xb2b7, 0xe63a, 0x5456, 0x00db, 0xfd4c, 0xa9c1, 0xa678, 0xf2f5, 0x0f62, 0x5bef, 0xe983, 0xbd0e, 0x4099, 0x1414, 0x398e, 0x6d03, 0x9094, 0xc419, 0x7675, 0x22f8, 0xdf6f, 0x8be2, 0xc01d, 0x9490, 0x6907, 0x3d8a, 0x8fe6, 0xdb6b, 0x26fc, 0x7271, 0x5feb, 0x0b66, 0xf6f1, 0xa27c, 0x1010, 0x449d, 0xb90a, 0xed87, 0xe23e, 0xb6b3, 0x4b24, 0x1fa9, 0xadc5, 0xf948, 0x04df, 0x5052, 0x7dc8, 0x2945, 0xd4d2, 0x805f, 0x3233, 0x66be, 0x9b29, 0xcfa4, ], [ 0x0000, 0x19ae, 0x335c, 0x2af2, 0x66b8, 0x7f16, 0x55e4, 0x4c4a, 0xcd70, 0xd4de, 0xfe2c, 0xe782, 0xabc8, 0xb266, 0x9894, 0x813a, 0x872f, 0x9e81, 0xb473, 0xaddd, 0xe197, 0xf839, 0xd2cb, 0xcb65, 0x4a5f, 0x53f1, 0x7903, 0x60ad, 0x2ce7, 0x3549, 0x1fbb, 0x0615, 0x1391, 0x0a3f, 0x20cd, 0x3963, 0x7529, 0x6c87, 0x4675, 0x5fdb, 0xdee1, 0xc74f, 0xedbd, 0xf413, 0xb859, 0xa1f7, 0x8b05, 0x92ab, 0x94be, 0x8d10, 0xa7e2, 0xbe4c, 0xf206, 0xeba8, 0xc15a, 0xd8f4, 0x59ce, 0x4060, 0x6a92, 0x733c, 0x3f76, 0x26d8, 0x0c2a, 0x1584, 0x2722, 0x3e8c, 0x147e, 0x0dd0, 0x419a, 0x5834, 0x72c6, 0x6b68, 0xea52, 0xf3fc, 0xd90e, 0xc0a0, 0x8cea, 0x9544, 0xbfb6, 0xa618, 0xa00d, 0xb9a3, 0x9351, 0x8aff, 0xc6b5, 0xdf1b, 0xf5e9, 0xec47, 0x6d7d, 0x74d3, 0x5e21, 0x478f, 0x0bc5, 0x126b, 0x3899, 0x2137, 0x34b3, 0x2d1d, 0x07ef, 0x1e41, 0x520b, 0x4ba5, 0x6157, 0x78f9, 0xf9c3, 0xe06d, 0xca9f, 0xd331, 0x9f7b, 0x86d5, 0xac27, 0xb589, 0xb39c, 0xaa32, 0x80c0, 0x996e, 0xd524, 0xcc8a, 0xe678, 0xffd6, 0x7eec, 0x6742, 0x4db0, 0x541e, 0x1854, 0x01fa, 0x2b08, 0x32a6, 0x4e44, 0x57ea, 0x7d18, 0x64b6, 0x28fc, 0x3152, 0x1ba0, 0x020e, 0x8334, 0x9a9a, 0xb068, 0xa9c6, 0xe58c, 0xfc22, 0xd6d0, 0xcf7e, 0xc96b, 0xd0c5, 0xfa37, 0xe399, 0xafd3, 0xb67d, 0x9c8f, 0x8521, 0x041b, 0x1db5, 0x3747, 0x2ee9, 0x62a3, 0x7b0d, 0x51ff, 0x4851, 0x5dd5, 0x447b, 0x6e89, 0x7727, 0x3b6d, 0x22c3, 0x0831, 0x119f, 0x90a5, 0x890b, 0xa3f9, 0xba57, 0xf61d, 0xefb3, 0xc541, 0xdcef, 0xdafa, 0xc354, 0xe9a6, 0xf008, 0xbc42, 0xa5ec, 0x8f1e, 0x96b0, 0x178a, 0x0e24, 0x24d6, 0x3d78, 0x7132, 0x689c, 0x426e, 0x5bc0, 0x6966, 0x70c8, 0x5a3a, 0x4394, 0x0fde, 0x1670, 0x3c82, 0x252c, 0xa416, 0xbdb8, 0x974a, 0x8ee4, 0xc2ae, 0xdb00, 0xf1f2, 0xe85c, 0xee49, 0xf7e7, 0xdd15, 0xc4bb, 0x88f1, 0x915f, 0xbbad, 0xa203, 0x2339, 0x3a97, 0x1065, 0x09cb, 0x4581, 0x5c2f, 0x76dd, 0x6f73, 0x7af7, 0x6359, 0x49ab, 0x5005, 0x1c4f, 0x05e1, 0x2f13, 0x36bd, 0xb787, 0xae29, 0x84db, 0x9d75, 0xd13f, 0xc891, 0xe263, 0xfbcd, 0xfdd8, 0xe476, 0xce84, 0xd72a, 0x9b60, 0x82ce, 0xa83c, 0xb192, 0x30a8, 0x2906, 0x03f4, 0x1a5a, 0x5610, 0x4fbe, 0x654c, 0x7ce2, ], [ 0x0000, 0x9c88, 0x24df, 0xb857, 0x49be, 0xd536, 0x6d61, 0xf1e9, 0x937c, 0x0ff4, 0xb7a3, 0x2b2b, 0xdac2, 0x464a, 0xfe1d, 0x6295, 0x3b37, 0xa7bf, 0x1fe8, 0x8360, 0x7289, 0xee01, 0x5656, 0xcade, 0xa84b, 0x34c3, 0x8c94, 0x101c, 0xe1f5, 0x7d7d, 0xc52a, 0x59a2, 0x766e, 0xeae6, 0x52b1, 0xce39, 0x3fd0, 0xa358, 0x1b0f, 0x8787, 0xe512, 0x799a, 0xc1cd, 0x5d45, 0xacac, 0x3024, 0x8873, 0x14fb, 0x4d59, 0xd1d1, 0x6986, 0xf50e, 0x04e7, 0x986f, 0x2038, 0xbcb0, 0xde25, 0x42ad, 0xfafa, 0x6672, 0x979b, 0x0b13, 0xb344, 0x2fcc, 0xecdc, 0x7054, 0xc803, 0x548b, 0xa562, 0x39ea, 0x81bd, 0x1d35, 0x7fa0, 0xe328, 0x5b7f, 0xc7f7, 0x361e, 0xaa96, 0x12c1, 0x8e49, 0xd7eb, 0x4b63, 0xf334, 0x6fbc, 0x9e55, 0x02dd, 0xba8a, 0x2602, 0x4497, 0xd81f, 0x6048, 0xfcc0, 0x0d29, 0x91a1, 0x29f6, 0xb57e, 0x9ab2, 0x063a, 0xbe6d, 0x22e5, 0xd30c, 0x4f84, 0xf7d3, 0x6b5b, 0x09ce, 0x9546, 0x2d11, 0xb199, 0x4070, 0xdcf8, 0x64af, 0xf827, 0xa185, 0x3d0d, 0x855a, 0x19d2, 0xe83b, 0x74b3, 0xcce4, 0x506c, 0x32f9, 0xae71, 0x1626, 0x8aae, 0x7b47, 0xe7cf, 0x5f98, 0xc310, 0xc477, 0x58ff, 0xe0a8, 0x7c20, 0x8dc9, 0x1141, 0xa916, 0x359e, 0x570b, 0xcb83, 0x73d4, 0xef5c, 0x1eb5, 0x823d, 0x3a6a, 0xa6e2, 0xff40, 0x63c8, 0xdb9f, 0x4717, 0xb6fe, 0x2a76, 0x9221, 0x0ea9, 0x6c3c, 0xf0b4, 0x48e3, 0xd46b, 0x2582, 0xb90a, 0x015d, 0x9dd5, 0xb219, 0x2e91, 0x96c6, 0x0a4e, 0xfba7, 0x672f, 0xdf78, 0x43f0, 0x2165, 0xbded, 0x05ba, 0x9932, 0x68db, 0xf453, 0x4c04, 0xd08c, 0x892e, 0x15a6, 0xadf1, 0x3179, 0xc090, 0x5c18, 0xe44f, 0x78c7, 0x1a52, 0x86da, 0x3e8d, 0xa205, 0x53ec, 0xcf64, 0x7733, 0xebbb, 0x28ab, 0xb423, 0x0c74, 0x90fc, 0x6115, 0xfd9d, 0x45ca, 0xd942, 0xbbd7, 0x275f, 0x9f08, 0x0380, 0xf269, 0x6ee1, 0xd6b6, 0x4a3e, 0x139c, 0x8f14, 0x3743, 0xabcb, 0x5a22, 0xc6aa, 0x7efd, 0xe275, 0x80e0, 0x1c68, 0xa43f, 0x38b7, 0xc95e, 0x55d6, 0xed81, 0x7109, 0x5ec5, 0xc24d, 0x7a1a, 0xe692, 0x177b, 0x8bf3, 0x33a4, 0xaf2c, 0xcdb9, 0x5131, 0xe966, 0x75ee, 0x8407, 0x188f, 0xa0d8, 0x3c50, 0x65f2, 0xf97a, 0x412d, 0xdda5, 0x2c4c, 0xb0c4, 0x0893, 0x941b, 0xf68e, 0x6a06, 0xd251, 0x4ed9, 0xbf30, 0x23b8, 0x9bef, 0x0767, ], [ 0x0000, 0x9521, 0x378d, 0xa2ac, 0x6f1a, 0xfa3b, 0x5897, 0xcdb6, 0xde34, 0x4b15, 0xe9b9, 0x7c98, 0xb12e, 0x240f, 0x86a3, 0x1382, 0xa1a7, 0x3486, 0x962a, 0x030b, 0xcebd, 0x5b9c, 0xf930, 0x6c11, 0x7f93, 0xeab2, 0x481e, 0xdd3f, 0x1089, 0x85a8, 0x2704, 0xb225, 0x5e81, 0xcba0, 0x690c, 0xfc2d, 0x319b, 0xa4ba, 0x0616, 0x9337, 0x80b5, 0x1594, 0xb738, 0x2219, 0xefaf, 0x7a8e, 0xd822, 0x4d03, 0xff26, 0x6a07, 0xc8ab, 0x5d8a, 0x903c, 0x051d, 0xa7b1, 0x3290, 0x2112, 0xb433, 0x169f, 0x83be, 0x4e08, 0xdb29, 0x7985, 0xeca4, 0xbd02, 0x2823, 0x8a8f, 0x1fae, 0xd218, 0x4739, 0xe595, 0x70b4, 0x6336, 0xf617, 0x54bb, 0xc19a, 0x0c2c, 0x990d, 0x3ba1, 0xae80, 0x1ca5, 0x8984, 0x2b28, 0xbe09, 0x73bf, 0xe69e, 0x4432, 0xd113, 0xc291, 0x57b0, 0xf51c, 0x603d, 0xad8b, 0x38aa, 0x9a06, 0x0f27, 0xe383, 0x76a2, 0xd40e, 0x412f, 0x8c99, 0x19b8, 0xbb14, 0x2e35, 0x3db7, 0xa896, 0x0a3a, 0x9f1b, 0x52ad, 0xc78c, 0x6520, 0xf001, 0x4224, 0xd705, 0x75a9, 0xe088, 0x2d3e, 0xb81f, 0x1ab3, 0x8f92, 0x9c10, 0x0931, 0xab9d, 0x3ebc, 0xf30a, 0x662b, 0xc487, 0x51a6, 0x67cb, 0xf2ea, 0x5046, 0xc567, 0x08d1, 0x9df0, 0x3f5c, 0xaa7d, 0xb9ff, 0x2cde, 0x8e72, 0x1b53, 0xd6e5, 0x43c4, 0xe168, 0x7449, 0xc66c, 0x534d, 0xf1e1, 0x64c0, 0xa976, 0x3c57, 0x9efb, 0x0bda, 0x1858, 0x8d79, 0x2fd5, 0xbaf4, 0x7742, 0xe263, 0x40cf, 0xd5ee, 0x394a, 0xac6b, 0x0ec7, 0x9be6, 0x5650, 0xc371, 0x61dd, 0xf4fc, 0xe77e, 0x725f, 0xd0f3, 0x45d2, 0x8864, 0x1d45, 0xbfe9, 0x2ac8, 0x98ed, 0x0dcc, 0xaf60, 0x3a41, 0xf7f7, 0x62d6, 0xc07a, 0x555b, 0x46d9, 0xd3f8, 0x7154, 0xe475, 0x29c3, 0xbce2, 0x1e4e, 0x8b6f, 0xdac9, 0x4fe8, 0xed44, 0x7865, 0xb5d3, 0x20f2, 0x825e, 0x177f, 0x04fd, 0x91dc, 0x3370, 0xa651, 0x6be7, 0xfec6, 0x5c6a, 0xc94b, 0x7b6e, 0xee4f, 0x4ce3, 0xd9c2, 0x1474, 0x8155, 0x23f9, 0xb6d8, 0xa55a, 0x307b, 0x92d7, 0x07f6, 0xca40, 0x5f61, 0xfdcd, 0x68ec, 0x8448, 0x1169, 0xb3c5, 0x26e4, 0xeb52, 0x7e73, 0xdcdf, 0x49fe, 0x5a7c, 0xcf5d, 0x6df1, 0xf8d0, 0x3566, 0xa047, 0x02eb, 0x97ca, 0x25ef, 0xb0ce, 0x1262, 0x8743, 0x4af5, 0xdfd4, 0x7d78, 0xe859, 0xfbdb, 0x6efa, 0xcc56, 0x5977, 0x94c1, 0x01e0, 0xa34c, 0x366d, ], [ 0x0000, 0xcf96, 0x82e3, 0x4d75, 0x1809, 0xd79f, 0x9aea, 0x557c, 0x3012, 0xff84, 0xb2f1, 0x7d67, 0x281b, 0xe78d, 0xaaf8, 0x656e, 0x6024, 0xafb2, 0xe2c7, 0x2d51, 0x782d, 0xb7bb, 0xface, 0x3558, 0x5036, 0x9fa0, 0xd2d5, 0x1d43, 0x483f, 0x87a9, 0xcadc, 0x054a, 0xc048, 0x0fde, 0x42ab, 0x8d3d, 0xd841, 0x17d7, 0x5aa2, 0x9534, 0xf05a, 0x3fcc, 0x72b9, 0xbd2f, 0xe853, 0x27c5, 0x6ab0, 0xa526, 0xa06c, 0x6ffa, 0x228f, 0xed19, 0xb865, 0x77f3, 0x3a86, 0xf510, 0x907e, 0x5fe8, 0x129d, 0xdd0b, 0x8877, 0x47e1, 0x0a94, 0xc502, 0x9d5f, 0x52c9, 0x1fbc, 0xd02a, 0x8556, 0x4ac0, 0x07b5, 0xc823, 0xad4d, 0x62db, 0x2fae, 0xe038, 0xb544, 0x7ad2, 0x37a7, 0xf831, 0xfd7b, 0x32ed, 0x7f98, 0xb00e, 0xe572, 0x2ae4, 0x6791, 0xa807, 0xcd69, 0x02ff, 0x4f8a, 0x801c, 0xd560, 0x1af6, 0x5783, 0x9815, 0x5d17, 0x9281, 0xdff4, 0x1062, 0x451e, 0x8a88, 0xc7fd, 0x086b, 0x6d05, 0xa293, 0xefe6, 0x2070, 0x750c, 0xba9a, 0xf7ef, 0x3879, 0x3d33, 0xf2a5, 0xbfd0, 0x7046, 0x253a, 0xeaac, 0xa7d9, 0x684f, 0x0d21, 0xc2b7, 0x8fc2, 0x4054, 0x1528, 0xdabe, 0x97cb, 0x585d, 0x2771, 0xe8e7, 0xa592, 0x6a04, 0x3f78, 0xf0ee, 0xbd9b, 0x720d, 0x1763, 0xd8f5, 0x9580, 0x5a16, 0x0f6a, 0xc0fc, 0x8d89, 0x421f, 0x4755, 0x88c3, 0xc5b6, 0x0a20, 0x5f5c, 0x90ca, 0xddbf, 0x1229, 0x7747, 0xb8d1, 0xf5a4, 0x3a32, 0x6f4e, 0xa0d8, 0xedad, 0x223b, 0xe739, 0x28af, 0x65da, 0xaa4c, 0xff30, 0x30a6, 0x7dd3, 0xb245, 0xd72b, 0x18bd, 0x55c8, 0x9a5e, 0xcf22, 0x00b4, 0x4dc1, 0x8257, 0x871d, 0x488b, 0x05fe, 0xca68, 0x9f14, 0x5082, 0x1df7, 0xd261, 0xb70f, 0x7899, 0x35ec, 0xfa7a, 0xaf06, 0x6090, 0x2de5, 0xe273, 0xba2e, 0x75b8, 0x38cd, 0xf75b, 0xa227, 0x6db1, 0x20c4, 0xef52, 0x8a3c, 0x45aa, 0x08df, 0xc749, 0x9235, 0x5da3, 0x10d6, 0xdf40, 0xda0a, 0x159c, 0x58e9, 0x977f, 0xc203, 0x0d95, 0x40e0, 0x8f76, 0xea18, 0x258e, 0x68fb, 0xa76d, 0xf211, 0x3d87, 0x70f2, 0xbf64, 0x7a66, 0xb5f0, 0xf885, 0x3713, 0x626f, 0xadf9, 0xe08c, 0x2f1a, 0x4a74, 0x85e2, 0xc897, 0x0701, 0x527d, 0x9deb, 0xd09e, 0x1f08, 0x1a42, 0xd5d4, 0x98a1, 0x5737, 0x024b, 0xcddd, 0x80a8, 0x4f3e, 0x2a50, 0xe5c6, 0xa8b3, 0x6725, 0x3259, 0xfdcf, 0xb0ba, 0x7f2c, ], [ 0x0000, 0x4ee2, 0x9dc4, 0xd326, 0x2647, 0x68a5, 0xbb83, 0xf561, 0x4c8e, 0x026c, 0xd14a, 0x9fa8, 0x6ac9, 0x242b, 0xf70d, 0xb9ef, 0x991c, 0xd7fe, 0x04d8, 0x4a3a, 0xbf5b, 0xf1b9, 0x229f, 0x6c7d, 0xd592, 0x9b70, 0x4856, 0x06b4, 0xf3d5, 0xbd37, 0x6e11, 0x20f3, 0x2ff7, 0x6115, 0xb233, 0xfcd1, 0x09b0, 0x4752, 0x9474, 0xda96, 0x6379, 0x2d9b, 0xfebd, 0xb05f, 0x453e, 0x0bdc, 0xd8fa, 0x9618, 0xb6eb, 0xf809, 0x2b2f, 0x65cd, 0x90ac, 0xde4e, 0x0d68, 0x438a, 0xfa65, 0xb487, 0x67a1, 0x2943, 0xdc22, 0x92c0, 0x41e6, 0x0f04, 0x5fee, 0x110c, 0xc22a, 0x8cc8, 0x79a9, 0x374b, 0xe46d, 0xaa8f, 0x1360, 0x5d82, 0x8ea4, 0xc046, 0x3527, 0x7bc5, 0xa8e3, 0xe601, 0xc6f2, 0x8810, 0x5b36, 0x15d4, 0xe0b5, 0xae57, 0x7d71, 0x3393, 0x8a7c, 0xc49e, 0x17b8, 0x595a, 0xac3b, 0xe2d9, 0x31ff, 0x7f1d, 0x7019, 0x3efb, 0xeddd, 0xa33f, 0x565e, 0x18bc, 0xcb9a, 0x8578, 0x3c97, 0x7275, 0xa153, 0xefb1, 0x1ad0, 0x5432, 0x8714, 0xc9f6, 0xe905, 0xa7e7, 0x74c1, 0x3a23, 0xcf42, 0x81a0, 0x5286, 0x1c64, 0xa58b, 0xeb69, 0x384f, 0x76ad, 0x83cc, 0xcd2e, 0x1e08, 0x50ea, 0xbfdc, 0xf13e, 0x2218, 0x6cfa, 0x999b, 0xd779, 0x045f, 0x4abd, 0xf352, 0xbdb0, 0x6e96, 0x2074, 0xd515, 0x9bf7, 0x48d1, 0x0633, 0x26c0, 0x6822, 0xbb04, 0xf5e6, 0x0087, 0x4e65, 0x9d43, 0xd3a1, 0x6a4e, 0x24ac, 0xf78a, 0xb968, 0x4c09, 0x02eb, 0xd1cd, 0x9f2f, 0x902b, 0xdec9, 0x0def, 0x430d, 0xb66c, 0xf88e, 0x2ba8, 0x654a, 0xdca5, 0x9247, 0x4161, 0x0f83, 0xfae2, 0xb400, 0x6726, 0x29c4, 0x0937, 0x47d5, 0x94f3, 0xda11, 0x2f70, 0x6192, 0xb2b4, 0xfc56, 0x45b9, 0x0b5b, 0xd87d, 0x969f, 0x63fe, 0x2d1c, 0xfe3a, 0xb0d8, 0xe032, 0xaed0, 0x7df6, 0x3314, 0xc675, 0x8897, 0x5bb1, 0x1553, 0xacbc, 0xe25e, 0x3178, 0x7f9a, 0x8afb, 0xc419, 0x173f, 0x59dd, 0x792e, 0x37cc, 0xe4ea, 0xaa08, 0x5f69, 0x118b, 0xc2ad, 0x8c4f, 0x35a0, 0x7b42, 0xa864, 0xe686, 0x13e7, 0x5d05, 0x8e23, 0xc0c1, 0xcfc5, 0x8127, 0x5201, 0x1ce3, 0xe982, 0xa760, 0x7446, 0x3aa4, 0x834b, 0xcda9, 0x1e8f, 0x506d, 0xa50c, 0xebee, 0x38c8, 0x762a, 0x56d9, 0x183b, 0xcb1d, 0x85ff, 0x709e, 0x3e7c, 0xed5a, 0xa3b8, 0x1a57, 0x54b5, 0x8793, 0xc971, 0x3c10, 0x72f2, 0xa1d4, 0xef36, ], [ 0x0000, 0x6277, 0xc4ee, 0xa699, 0x9413, 0xf664, 0x50fd, 0x328a, 0x35e9, 0x579e, 0xf107, 0x9370, 0xa1fa, 0xc38d, 0x6514, 0x0763, 0x6bd2, 0x09a5, 0xaf3c, 0xcd4b, 0xffc1, 0x9db6, 0x3b2f, 0x5958, 0x5e3b, 0x3c4c, 0x9ad5, 0xf8a2, 0xca28, 0xa85f, 0x0ec6, 0x6cb1, 0xd7a4, 0xb5d3, 0x134a, 0x713d, 0x43b7, 0x21c0, 0x8759, 0xe52e, 0xe24d, 0x803a, 0x26a3, 0x44d4, 0x765e, 0x1429, 0xb2b0, 0xd0c7, 0xbc76, 0xde01, 0x7898, 0x1aef, 0x2865, 0x4a12, 0xec8b, 0x8efc, 0x899f, 0xebe8, 0x4d71, 0x2f06, 0x1d8c, 0x7ffb, 0xd962, 0xbb15, 0xb287, 0xd0f0, 0x7669, 0x141e, 0x2694, 0x44e3, 0xe27a, 0x800d, 0x876e, 0xe519, 0x4380, 0x21f7, 0x137d, 0x710a, 0xd793, 0xb5e4, 0xd955, 0xbb22, 0x1dbb, 0x7fcc, 0x4d46, 0x2f31, 0x89a8, 0xebdf, 0xecbc, 0x8ecb, 0x2852, 0x4a25, 0x78af, 0x1ad8, 0xbc41, 0xde36, 0x6523, 0x0754, 0xa1cd, 0xc3ba, 0xf130, 0x9347, 0x35de, 0x57a9, 0x50ca, 0x32bd, 0x9424, 0xf653, 0xc4d9, 0xa6ae, 0x0037, 0x6240, 0x0ef1, 0x6c86, 0xca1f, 0xa868, 0x9ae2, 0xf895, 0x5e0c, 0x3c7b, 0x3b18, 0x596f, 0xfff6, 0x9d81, 0xaf0b, 0xcd7c, 0x6be5, 0x0992, 0x78c1, 0x1ab6, 0xbc2f, 0xde58, 0xecd2, 0x8ea5, 0x283c, 0x4a4b, 0x4d28, 0x2f5f, 0x89c6, 0xebb1, 0xd93b, 0xbb4c, 0x1dd5, 0x7fa2, 0x1313, 0x7164, 0xd7fd, 0xb58a, 0x8700, 0xe577, 0x43ee, 0x2199, 0x26fa, 0x448d, 0xe214, 0x8063, 0xb2e9, 0xd09e, 0x7607, 0x1470, 0xaf65, 0xcd12, 0x6b8b, 0x09fc, 0x3b76, 0x5901, 0xff98, 0x9def, 0x9a8c, 0xf8fb, 0x5e62, 0x3c15, 0x0e9f, 0x6ce8, 0xca71, 0xa806, 0xc4b7, 0xa6c0, 0x0059, 0x622e, 0x50a4, 0x32d3, 0x944a, 0xf63d, 0xf15e, 0x9329, 0x35b0, 0x57c7, 0x654d, 0x073a, 0xa1a3, 0xc3d4, 0xca46, 0xa831, 0x0ea8, 0x6cdf, 0x5e55, 0x3c22, 0x9abb, 0xf8cc, 0xffaf, 0x9dd8, 0x3b41, 0x5936, 0x6bbc, 0x09cb, 0xaf52, 0xcd25, 0xa194, 0xc3e3, 0x657a, 0x070d, 0x3587, 0x57f0, 0xf169, 0x931e, 0x947d, 0xf60a, 0x5093, 0x32e4, 0x006e, 0x6219, 0xc480, 0xa6f7, 0x1de2, 0x7f95, 0xd90c, 0xbb7b, 0x89f1, 0xeb86, 0x4d1f, 0x2f68, 0x280b, 0x4a7c, 0xece5, 0x8e92, 0xbc18, 0xde6f, 0x78f6, 0x1a81, 0x7630, 0x1447, 0xb2de, 0xd0a9, 0xe223, 0x8054, 0x26cd, 0x44ba, 0x43d9, 0x21ae, 0x8737, 0xe540, 0xd7ca, 0xb5bd, 0x1324, 0x7153, ], [ 0x0000, 0xf182, 0xfecb, 0x0f49, 0xe059, 0x11db, 0x1e92, 0xef10, 0xdd7d, 0x2cff, 0x23b6, 0xd234, 0x3d24, 0xcca6, 0xc3ef, 0x326d, 0xa735, 0x56b7, 0x59fe, 0xa87c, 0x476c, 0xb6ee, 0xb9a7, 0x4825, 0x7a48, 0x8bca, 0x8483, 0x7501, 0x9a11, 0x6b93, 0x64da, 0x9558, 0x53a5, 0xa227, 0xad6e, 0x5cec, 0xb3fc, 0x427e, 0x4d37, 0xbcb5, 0x8ed8, 0x7f5a, 0x7013, 0x8191, 0x6e81, 0x9f03, 0x904a, 0x61c8, 0xf490, 0x0512, 0x0a5b, 0xfbd9, 0x14c9, 0xe54b, 0xea02, 0x1b80, 0x29ed, 0xd86f, 0xd726, 0x26a4, 0xc9b4, 0x3836, 0x377f, 0xc6fd, 0xa74a, 0x56c8, 0x5981, 0xa803, 0x4713, 0xb691, 0xb9d8, 0x485a, 0x7a37, 0x8bb5, 0x84fc, 0x757e, 0x9a6e, 0x6bec, 0x64a5, 0x9527, 0x007f, 0xf1fd, 0xfeb4, 0x0f36, 0xe026, 0x11a4, 0x1eed, 0xef6f, 0xdd02, 0x2c80, 0x23c9, 0xd24b, 0x3d5b, 0xccd9, 0xc390, 0x3212, 0xf4ef, 0x056d, 0x0a24, 0xfba6, 0x14b6, 0xe534, 0xea7d, 0x1bff, 0x2992, 0xd810, 0xd759, 0x26db, 0xc9cb, 0x3849, 0x3700, 0xc682, 0x53da, 0xa258, 0xad11, 0x5c93, 0xb383, 0x4201, 0x4d48, 0xbcca, 0x8ea7, 0x7f25, 0x706c, 0x81ee, 0x6efe, 0x9f7c, 0x9035, 0x61b7, 0x535b, 0xa2d9, 0xad90, 0x5c12, 0xb302, 0x4280, 0x4dc9, 0xbc4b, 0x8e26, 0x7fa4, 0x70ed, 0x816f, 0x6e7f, 0x9ffd, 0x90b4, 0x6136, 0xf46e, 0x05ec, 0x0aa5, 0xfb27, 0x1437, 0xe5b5, 0xeafc, 0x1b7e, 0x2913, 0xd891, 0xd7d8, 0x265a, 0xc94a, 0x38c8, 0x3781, 0xc603, 0x00fe, 0xf17c, 0xfe35, 0x0fb7, 0xe0a7, 0x1125, 0x1e6c, 0xefee, 0xdd83, 0x2c01, 0x2348, 0xd2ca, 0x3dda, 0xcc58, 0xc311, 0x3293, 0xa7cb, 0x5649, 0x5900, 0xa882, 0x4792, 0xb610, 0xb959, 0x48db, 0x7ab6, 0x8b34, 0x847d, 0x75ff, 0x9aef, 0x6b6d, 0x6424, 0x95a6, 0xf411, 0x0593, 0x0ada, 0xfb58, 0x1448, 0xe5ca, 0xea83, 0x1b01, 0x296c, 0xd8ee, 0xd7a7, 0x2625, 0xc935, 0x38b7, 0x37fe, 0xc67c, 0x5324, 0xa2a6, 0xadef, 0x5c6d, 0xb37d, 0x42ff, 0x4db6, 0xbc34, 0x8e59, 0x7fdb, 0x7092, 0x8110, 0x6e00, 0x9f82, 0x90cb, 0x6149, 0xa7b4, 0x5636, 0x597f, 0xa8fd, 0x47ed, 0xb66f, 0xb926, 0x48a4, 0x7ac9, 0x8b4b, 0x8402, 0x7580, 0x9a90, 0x6b12, 0x645b, 0x95d9, 0x0081, 0xf103, 0xfe4a, 0x0fc8, 0xe0d8, 0x115a, 0x1e13, 0xef91, 0xddfc, 0x2c7e, 0x2337, 0xd2b5, 0x3da5, 0xcc27, 0xc36e, 0x32ec, ], [ 0x0000, 0xa6b6, 0x50a3, 0xf615, 0xa146, 0x07f0, 0xf1e5, 0x5753, 0x5f43, 0xf9f5, 0x0fe0, 0xa956, 0xfe05, 0x58b3, 0xaea6, 0x0810, 0xbe86, 0x1830, 0xee25, 0x4893, 0x1fc0, 0xb976, 0x4f63, 0xe9d5, 0xe1c5, 0x4773, 0xb166, 0x17d0, 0x4083, 0xe635, 0x1020, 0xb696, 0x60c3, 0xc675, 0x3060, 0x96d6, 0xc185, 0x6733, 0x9126, 0x3790, 0x3f80, 0x9936, 0x6f23, 0xc995, 0x9ec6, 0x3870, 0xce65, 0x68d3, 0xde45, 0x78f3, 0x8ee6, 0x2850, 0x7f03, 0xd9b5, 0x2fa0, 0x8916, 0x8106, 0x27b0, 0xd1a5, 0x7713, 0x2040, 0x86f6, 0x70e3, 0xd655, 0xc186, 0x6730, 0x9125, 0x3793, 0x60c0, 0xc676, 0x3063, 0x96d5, 0x9ec5, 0x3873, 0xce66, 0x68d0, 0x3f83, 0x9935, 0x6f20, 0xc996, 0x7f00, 0xd9b6, 0x2fa3, 0x8915, 0xde46, 0x78f0, 0x8ee5, 0x2853, 0x2043, 0x86f5, 0x70e0, 0xd656, 0x8105, 0x27b3, 0xd1a6, 0x7710, 0xa145, 0x07f3, 0xf1e6, 0x5750, 0x0003, 0xa6b5, 0x50a0, 0xf616, 0xfe06, 0x58b0, 0xaea5, 0x0813, 0x5f40, 0xf9f6, 0x0fe3, 0xa955, 0x1fc3, 0xb975, 0x4f60, 0xe9d6, 0xbe85, 0x1833, 0xee26, 0x4890, 0x4080, 0xe636, 0x1023, 0xb695, 0xe1c6, 0x4770, 0xb165, 0x17d3, 0x9ec3, 0x3875, 0xce60, 0x68d6, 0x3f85, 0x9933, 0x6f26, 0xc990, 0xc180, 0x6736, 0x9123, 0x3795, 0x60c6, 0xc670, 0x3065, 0x96d3, 0x2045, 0x86f3, 0x70e6, 0xd650, 0x8103, 0x27b5, 0xd1a0, 0x7716, 0x7f06, 0xd9b0, 0x2fa5, 0x8913, 0xde40, 0x78f6, 0x8ee3, 0x2855, 0xfe00, 0x58b6, 0xaea3, 0x0815, 0x5f46, 0xf9f0, 0x0fe5, 0xa953, 0xa143, 0x07f5, 0xf1e0, 0x5756, 0x0005, 0xa6b3, 0x50a6, 0xf610, 0x4086, 0xe630, 0x1025, 0xb693, 0xe1c0, 0x4776, 0xb163, 0x17d5, 0x1fc5, 0xb973, 0x4f66, 0xe9d0, 0xbe83, 0x1835, 0xee20, 0x4896, 0x5f45, 0xf9f3, 0x0fe6, 0xa950, 0xfe03, 0x58b5, 0xaea0, 0x0816, 0x0006, 0xa6b0, 0x50a5, 0xf613, 0xa140, 0x07f6, 0xf1e3, 0x5755, 0xe1c3, 0x4775, 0xb160, 0x17d6, 0x4085, 0xe633, 0x1026, 0xb690, 0xbe80, 0x1836, 0xee23, 0x4895, 0x1fc6, 0xb970, 0x4f65, 0xe9d3, 0x3f86, 0x9930, 0x6f25, 0xc993, 0x9ec0, 0x3876, 0xce63, 0x68d5, 0x60c5, 0xc673, 0x3066, 0x96d0, 0xc183, 0x6735, 0x9120, 0x3796, 0x8100, 0x27b6, 0xd1a3, 0x7715, 0x2046, 0x86f0, 0x70e5, 0xd653, 0xde43, 0x78f5, 0x8ee0, 0x2856, 0x7f05, 0xd9b3, 0x2fa6, 0x8910, ], [ 0x0000, 0x2049, 0x4092, 0x60db, 0x8124, 0xa16d, 0xc1b6, 0xe1ff, 0x1f87, 0x3fce, 0x5f15, 0x7f5c, 0x9ea3, 0xbeea, 0xde31, 0xfe78, 0x3f0e, 0x1f47, 0x7f9c, 0x5fd5, 0xbe2a, 0x9e63, 0xfeb8, 0xdef1, 0x2089, 0x00c0, 0x601b, 0x4052, 0xa1ad, 0x81e4, 0xe13f, 0xc176, 0x7e1c, 0x5e55, 0x3e8e, 0x1ec7, 0xff38, 0xdf71, 0xbfaa, 0x9fe3, 0x619b, 0x41d2, 0x2109, 0x0140, 0xe0bf, 0xc0f6, 0xa02d, 0x8064, 0x4112, 0x615b, 0x0180, 0x21c9, 0xc036, 0xe07f, 0x80a4, 0xa0ed, 0x5e95, 0x7edc, 0x1e07, 0x3e4e, 0xdfb1, 0xfff8, 0x9f23, 0xbf6a, 0xfc38, 0xdc71, 0xbcaa, 0x9ce3, 0x7d1c, 0x5d55, 0x3d8e, 0x1dc7, 0xe3bf, 0xc3f6, 0xa32d, 0x8364, 0x629b, 0x42d2, 0x2209, 0x0240, 0xc336, 0xe37f, 0x83a4, 0xa3ed, 0x4212, 0x625b, 0x0280, 0x22c9, 0xdcb1, 0xfcf8, 0x9c23, 0xbc6a, 0x5d95, 0x7ddc, 0x1d07, 0x3d4e, 0x8224, 0xa26d, 0xc2b6, 0xe2ff, 0x0300, 0x2349, 0x4392, 0x63db, 0x9da3, 0xbdea, 0xdd31, 0xfd78, 0x1c87, 0x3cce, 0x5c15, 0x7c5c, 0xbd2a, 0x9d63, 0xfdb8, 0xddf1, 0x3c0e, 0x1c47, 0x7c9c, 0x5cd5, 0xa2ad, 0x82e4, 0xe23f, 0xc276, 0x2389, 0x03c0, 0x631b, 0x4352, 0xe5bf, 0xc5f6, 0xa52d, 0x8564, 0x649b, 0x44d2, 0x2409, 0x0440, 0xfa38, 0xda71, 0xbaaa, 0x9ae3, 0x7b1c, 0x5b55, 0x3b8e, 0x1bc7, 0xdab1, 0xfaf8, 0x9a23, 0xba6a, 0x5b95, 0x7bdc, 0x1b07, 0x3b4e, 0xc536, 0xe57f, 0x85a4, 0xa5ed, 0x4412, 0x645b, 0x0480, 0x24c9, 0x9ba3, 0xbbea, 0xdb31, 0xfb78, 0x1a87, 0x3ace, 0x5a15, 0x7a5c, 0x8424, 0xa46d, 0xc4b6, 0xe4ff, 0x0500, 0x2549, 0x4592, 0x65db, 0xa4ad, 0x84e4, 0xe43f, 0xc476, 0x2589, 0x05c0, 0x651b, 0x4552, 0xbb2a, 0x9b63, 0xfbb8, 0xdbf1, 0x3a0e, 0x1a47, 0x7a9c, 0x5ad5, 0x1987, 0x39ce, 0x5915, 0x795c, 0x98a3, 0xb8ea, 0xd831, 0xf878, 0x0600, 0x2649, 0x4692, 0x66db, 0x8724, 0xa76d, 0xc7b6, 0xe7ff, 0x2689, 0x06c0, 0x661b, 0x4652, 0xa7ad, 0x87e4, 0xe73f, 0xc776, 0x390e, 0x1947, 0x799c, 0x59d5, 0xb82a, 0x9863, 0xf8b8, 0xd8f1, 0x679b, 0x47d2, 0x2709, 0x0740, 0xe6bf, 0xc6f6, 0xa62d, 0x8664, 0x781c, 0x5855, 0x388e, 0x18c7, 0xf938, 0xd971, 0xb9aa, 0x99e3, 0x5895, 0x78dc, 0x1807, 0x384e, 0xd9b1, 0xf9f8, 0x9923, 0xb96a, 0x4712, 0x675b, 0x0780, 0x27c9, 0xc636, 0xe67f, 0x86a4, 0xa6ed, ], [ 0x0000, 0xd6b1, 0xb0ad, 0x661c, 0x7c95, 0xaa24, 0xcc38, 0x1a89, 0xf92a, 0x2f9b, 0x4987, 0x9f36, 0x85bf, 0x530e, 0x3512, 0xe3a3, 0xef9b, 0x392a, 0x5f36, 0x8987, 0x930e, 0x45bf, 0x23a3, 0xf512, 0x16b1, 0xc000, 0xa61c, 0x70ad, 0x6a24, 0xbc95, 0xda89, 0x0c38, 0xc2f9, 0x1448, 0x7254, 0xa4e5, 0xbe6c, 0x68dd, 0x0ec1, 0xd870, 0x3bd3, 0xed62, 0x8b7e, 0x5dcf, 0x4746, 0x91f7, 0xf7eb, 0x215a, 0x2d62, 0xfbd3, 0x9dcf, 0x4b7e, 0x51f7, 0x8746, 0xe15a, 0x37eb, 0xd448, 0x02f9, 0x64e5, 0xb254, 0xa8dd, 0x7e6c, 0x1870, 0xcec1, 0x983d, 0x4e8c, 0x2890, 0xfe21, 0xe4a8, 0x3219, 0x5405, 0x82b4, 0x6117, 0xb7a6, 0xd1ba, 0x070b, 0x1d82, 0xcb33, 0xad2f, 0x7b9e, 0x77a6, 0xa117, 0xc70b, 0x11ba, 0x0b33, 0xdd82, 0xbb9e, 0x6d2f, 0x8e8c, 0x583d, 0x3e21, 0xe890, 0xf219, 0x24a8, 0x42b4, 0x9405, 0x5ac4, 0x8c75, 0xea69, 0x3cd8, 0x2651, 0xf0e0, 0x96fc, 0x404d, 0xa3ee, 0x755f, 0x1343, 0xc5f2, 0xdf7b, 0x09ca, 0x6fd6, 0xb967, 0xb55f, 0x63ee, 0x05f2, 0xd343, 0xc9ca, 0x1f7b, 0x7967, 0xafd6, 0x4c75, 0x9ac4, 0xfcd8, 0x2a69, 0x30e0, 0xe651, 0x804d, 0x56fc, 0x2db5, 0xfb04, 0x9d18, 0x4ba9, 0x5120, 0x8791, 0xe18d, 0x373c, 0xd49f, 0x022e, 0x6432, 0xb283, 0xa80a, 0x7ebb, 0x18a7, 0xce16, 0xc22e, 0x149f, 0x7283, 0xa432, 0xbebb, 0x680a, 0x0e16, 0xd8a7, 0x3b04, 0xedb5, 0x8ba9, 0x5d18, 0x4791, 0x9120, 0xf73c, 0x218d, 0xef4c, 0x39fd, 0x5fe1, 0x8950, 0x93d9, 0x4568, 0x2374, 0xf5c5, 0x1666, 0xc0d7, 0xa6cb, 0x707a, 0x6af3, 0xbc42, 0xda5e, 0x0cef, 0x00d7, 0xd666, 0xb07a, 0x66cb, 0x7c42, 0xaaf3, 0xccef, 0x1a5e, 0xf9fd, 0x2f4c, 0x4950, 0x9fe1, 0x8568, 0x53d9, 0x35c5, 0xe374, 0xb588, 0x6339, 0x0525, 0xd394, 0xc91d, 0x1fac, 0x79b0, 0xaf01, 0x4ca2, 0x9a13, 0xfc0f, 0x2abe, 0x3037, 0xe686, 0x809a, 0x562b, 0x5a13, 0x8ca2, 0xeabe, 0x3c0f, 0x2686, 0xf037, 0x962b, 0x409a, 0xa339, 0x7588, 0x1394, 0xc525, 0xdfac, 0x091d, 0x6f01, 0xb9b0, 0x7771, 0xa1c0, 0xc7dc, 0x116d, 0x0be4, 0xdd55, 0xbb49, 0x6df8, 0x8e5b, 0x58ea, 0x3ef6, 0xe847, 0xf2ce, 0x247f, 0x4263, 0x94d2, 0x98ea, 0x4e5b, 0x2847, 0xfef6, 0xe47f, 0x32ce, 0x54d2, 0x8263, 0x61c0, 0xb771, 0xd16d, 0x07dc, 0x1d55, 0xcbe4, 0xadf8, 0x7b49, ], [ 0x0000, 0x5b6a, 0xb6d4, 0xedbe, 0x7067, 0x2b0d, 0xc6b3, 0x9dd9, 0xe0ce, 0xbba4, 0x561a, 0x0d70, 0x90a9, 0xcbc3, 0x267d, 0x7d17, 0xdc53, 0x8739, 0x6a87, 0x31ed, 0xac34, 0xf75e, 0x1ae0, 0x418a, 0x3c9d, 0x67f7, 0x8a49, 0xd123, 0x4cfa, 0x1790, 0xfa2e, 0xa144, 0xa569, 0xfe03, 0x13bd, 0x48d7, 0xd50e, 0x8e64, 0x63da, 0x38b0, 0x45a7, 0x1ecd, 0xf373, 0xa819, 0x35c0, 0x6eaa, 0x8314, 0xd87e, 0x793a, 0x2250, 0xcfee, 0x9484, 0x095d, 0x5237, 0xbf89, 0xe4e3, 0x99f4, 0xc29e, 0x2f20, 0x744a, 0xe993, 0xb2f9, 0x5f47, 0x042d, 0x571d, 0x0c77, 0xe1c9, 0xbaa3, 0x277a, 0x7c10, 0x91ae, 0xcac4, 0xb7d3, 0xecb9, 0x0107, 0x5a6d, 0xc7b4, 0x9cde, 0x7160, 0x2a0a, 0x8b4e, 0xd024, 0x3d9a, 0x66f0, 0xfb29, 0xa043, 0x4dfd, 0x1697, 0x6b80, 0x30ea, 0xdd54, 0x863e, 0x1be7, 0x408d, 0xad33, 0xf659, 0xf274, 0xa91e, 0x44a0, 0x1fca, 0x8213, 0xd979, 0x34c7, 0x6fad, 0x12ba, 0x49d0, 0xa46e, 0xff04, 0x62dd, 0x39b7, 0xd409, 0x8f63, 0x2e27, 0x754d, 0x98f3, 0xc399, 0x5e40, 0x052a, 0xe894, 0xb3fe, 0xcee9, 0x9583, 0x783d, 0x2357, 0xbe8e, 0xe5e4, 0x085a, 0x5330, 0xae3a, 0xf550, 0x18ee, 0x4384, 0xde5d, 0x8537, 0x6889, 0x33e3, 0x4ef4, 0x159e, 0xf820, 0xa34a, 0x3e93, 0x65f9, 0x8847, 0xd32d, 0x7269, 0x2903, 0xc4bd, 0x9fd7, 0x020e, 0x5964, 0xb4da, 0xefb0, 0x92a7, 0xc9cd, 0x2473, 0x7f19, 0xe2c0, 0xb9aa, 0x5414, 0x0f7e, 0x0b53, 0x5039, 0xbd87, 0xe6ed, 0x7b34, 0x205e, 0xcde0, 0x968a, 0xeb9d, 0xb0f7, 0x5d49, 0x0623, 0x9bfa, 0xc090, 0x2d2e, 0x7644, 0xd700, 0x8c6a, 0x61d4, 0x3abe, 0xa767, 0xfc0d, 0x11b3, 0x4ad9, 0x37ce, 0x6ca4, 0x811a, 0xda70, 0x47a9, 0x1cc3, 0xf17d, 0xaa17, 0xf927, 0xa24d, 0x4ff3, 0x1499, 0x8940, 0xd22a, 0x3f94, 0x64fe, 0x19e9, 0x4283, 0xaf3d, 0xf457, 0x698e, 0x32e4, 0xdf5a, 0x8430, 0x2574, 0x7e1e, 0x93a0, 0xc8ca, 0x5513, 0x0e79, 0xe3c7, 0xb8ad, 0xc5ba, 0x9ed0, 0x736e, 0x2804, 0xb5dd, 0xeeb7, 0x0309, 0x5863, 0x5c4e, 0x0724, 0xea9a, 0xb1f0, 0x2c29, 0x7743, 0x9afd, 0xc197, 0xbc80, 0xe7ea, 0x0a54, 0x513e, 0xcce7, 0x978d, 0x7a33, 0x2159, 0x801d, 0xdb77, 0x36c9, 0x6da3, 0xf07a, 0xab10, 0x46ae, 0x1dc4, 0x60d3, 0x3bb9, 0xd607, 0x8d6d, 0x10b4, 0x4bde, 0xa660, 0xfd0a, ], [ 0x0000, 0x41bb, 0x8376, 0xc2cd, 0x1b23, 0x5a98, 0x9855, 0xd9ee, 0x3646, 0x77fd, 0xb530, 0xf48b, 0x2d65, 0x6cde, 0xae13, 0xefa8, 0x6c8c, 0x2d37, 0xeffa, 0xae41, 0x77af, 0x3614, 0xf4d9, 0xb562, 0x5aca, 0x1b71, 0xd9bc, 0x9807, 0x41e9, 0x0052, 0xc29f, 0x8324, 0xd918, 0x98a3, 0x5a6e, 0x1bd5, 0xc23b, 0x8380, 0x414d, 0x00f6, 0xef5e, 0xaee5, 0x6c28, 0x2d93, 0xf47d, 0xb5c6, 0x770b, 0x36b0, 0xb594, 0xf42f, 0x36e2, 0x7759, 0xaeb7, 0xef0c, 0x2dc1, 0x6c7a, 0x83d2, 0xc269, 0x00a4, 0x411f, 0x98f1, 0xd94a, 0x1b87, 0x5a3c, 0xafff, 0xee44, 0x2c89, 0x6d32, 0xb4dc, 0xf567, 0x37aa, 0x7611, 0x99b9, 0xd802, 0x1acf, 0x5b74, 0x829a, 0xc321, 0x01ec, 0x4057, 0xc373, 0x82c8, 0x4005, 0x01be, 0xd850, 0x99eb, 0x5b26, 0x1a9d, 0xf535, 0xb48e, 0x7643, 0x37f8, 0xee16, 0xafad, 0x6d60, 0x2cdb, 0x76e7, 0x375c, 0xf591, 0xb42a, 0x6dc4, 0x2c7f, 0xeeb2, 0xaf09, 0x40a1, 0x011a, 0xc3d7, 0x826c, 0x5b82, 0x1a39, 0xd8f4, 0x994f, 0x1a6b, 0x5bd0, 0x991d, 0xd8a6, 0x0148, 0x40f3, 0x823e, 0xc385, 0x2c2d, 0x6d96, 0xaf5b, 0xeee0, 0x370e, 0x76b5, 0xb478, 0xf5c3, 0x4231, 0x038a, 0xc147, 0x80fc, 0x5912, 0x18a9, 0xda64, 0x9bdf, 0x7477, 0x35cc, 0xf701, 0xb6ba, 0x6f54, 0x2eef, 0xec22, 0xad99, 0x2ebd, 0x6f06, 0xadcb, 0xec70, 0x359e, 0x7425, 0xb6e8, 0xf753, 0x18fb, 0x5940, 0x9b8d, 0xda36, 0x03d8, 0x4263, 0x80ae, 0xc115, 0x9b29, 0xda92, 0x185f, 0x59e4, 0x800a, 0xc1b1, 0x037c, 0x42c7, 0xad6f, 0xecd4, 0x2e19, 0x6fa2, 0xb64c, 0xf7f7, 0x353a, 0x7481, 0xf7a5, 0xb61e, 0x74d3, 0x3568, 0xec86, 0xad3d, 0x6ff0, 0x2e4b, 0xc1e3, 0x8058, 0x4295, 0x032e, 0xdac0, 0x9b7b, 0x59b6, 0x180d, 0xedce, 0xac75, 0x6eb8, 0x2f03, 0xf6ed, 0xb756, 0x759b, 0x3420, 0xdb88, 0x9a33, 0x58fe, 0x1945, 0xc0ab, 0x8110, 0x43dd, 0x0266, 0x8142, 0xc0f9, 0x0234, 0x438f, 0x9a61, 0xdbda, 0x1917, 0x58ac, 0xb704, 0xf6bf, 0x3472, 0x75c9, 0xac27, 0xed9c, 0x2f51, 0x6eea, 0x34d6, 0x756d, 0xb7a0, 0xf61b, 0x2ff5, 0x6e4e, 0xac83, 0xed38, 0x0290, 0x432b, 0x81e6, 0xc05d, 0x19b3, 0x5808, 0x9ac5, 0xdb7e, 0x585a, 0x19e1, 0xdb2c, 0x9a97, 0x4379, 0x02c2, 0xc00f, 0x81b4, 0x6e1c, 0x2fa7, 0xed6a, 0xacd1, 0x753f, 0x3484, 0xf649, 0xb7f2, ], ]; pub static CRC16_RIELLO_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78, ], [ 0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70, 0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29, 0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333, 0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b, 0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272, 0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe, 0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6, 0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff, 0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5, 0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d, 0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04, 0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4, 0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc, 0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45, 0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f, 0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37, 0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e, 0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412, 0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b, 0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93, 0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49, 0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0, 0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8, 0xcc70, 0xe618, 0xffc0, ], [ 0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a, 0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28, 0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b, 0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d, 0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077, 0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa, 0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5, 0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6, 0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5, 0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32, 0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a, 0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388, 0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7, 0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567, 0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6, 0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510, 0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938, 0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327, 0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f, 0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9, 0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78, 0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8, 0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997, 0x734b, 0x9c2f, 0xc6f3, ], [ 0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae, 0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6, 0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53, 0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46, 0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768, 0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c, 0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183, 0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237, 0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092, 0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b, 0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d, 0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3, 0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c, 0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac, 0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1, 0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4, 0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32, 0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e, 0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878, 0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d, 0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10, 0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90, 0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f, 0xfca4, 0xd969, 0xc5d2, ], [ 0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8, 0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214, 0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091, 0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d, 0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49, 0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66, 0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612, 0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be, 0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b, 0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7, 0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3, 0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799, 0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed, 0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71, 0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4, 0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038, 0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c, 0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23, 0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37, 0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db, 0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e, 0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2, 0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896, 0xe3d2, 0xfe1e, 0xf55a, ], [ 0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e, 0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637, 0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560, 0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845, 0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a, 0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa, 0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325, 0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0, 0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7, 0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e, 0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459, 0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df, 0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00, 0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261, 0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e, 0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b, 0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c, 0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4, 0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3, 0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6, 0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9, 0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488, 0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157, 0xf57c, 0xf901, 0xfd2a, ], [ 0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957, 0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a, 0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383, 0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501, 0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87, 0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3, 0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c, 0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7, 0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e, 0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca, 0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0, 0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73, 0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c, 0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed, 0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8, 0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a, 0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900, 0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8, 0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2, 0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250, 0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55, 0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884, 0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb, 0xb91e, 0x1170, 0x8ea5, ], [ 0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3, 0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19, 0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0, 0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c, 0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039, 0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e, 0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93, 0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287, 0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e, 0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc, 0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5, 0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132, 0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef, 0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99, 0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc, 0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0, 0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9, 0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972, 0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b, 0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207, 0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552, 0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224, 0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9, 0xf946, 0x7396, 0xf229, ], [ 0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430, 0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c, 0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739, 0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4, 0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2, 0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e, 0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c, 0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015, 0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0, 0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88, 0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104, 0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0, 0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02, 0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974, 0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b, 0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6, 0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a, 0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac, 0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20, 0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed, 0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192, 0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4, 0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36, 0x27cb, 0xf1cc, 0xbc31, ], [ 0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167, 0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9, 0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5, 0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5, 0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635, 0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c, 0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce, 0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc, 0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580, 0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c, 0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5, 0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f, 0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d, 0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa, 0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf, 0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f, 0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76, 0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36, 0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df, 0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f, 0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea, 0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d, 0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df, 0x78f8, 0x0c91, 0x20b6, ], [ 0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788, 0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81, 0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a, 0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093, 0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8, 0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894, 0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa, 0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6, 0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad, 0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1, 0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260, 0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8, 0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6, 0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65, 0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4, 0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd, 0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c, 0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da, 0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b, 0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42, 0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3, 0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940, 0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e, 0x7bbf, 0x850c, 0xd09d, ], [ 0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857, 0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb, 0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0, 0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2, 0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5, 0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235, 0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa, 0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020, 0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b, 0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f, 0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4, 0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e, 0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1, 0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1, 0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006, 0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04, 0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff, 0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983, 0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78, 0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a, 0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd, 0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d, 0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852, 0x4d07, 0xcae9, 0x4fbc, ], [ 0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632, 0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9, 0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0, 0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f, 0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e, 0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc, 0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d, 0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2, 0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab, 0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880, 0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149, 0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855, 0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624, 0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7, 0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6, 0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629, 0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0, 0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea, 0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23, 0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc, 0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd, 0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e, 0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f, 0x74f2, 0x7a05, 0x7fa8, ], [ 0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7, 0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84, 0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf, 0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2, 0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05, 0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85, 0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5, 0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f, 0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04, 0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0, 0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64, 0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0, 0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0, 0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180, 0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8, 0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85, 0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701, 0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2, 0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366, 0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b, 0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63, 0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833, 0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03, 0xd4e9, 0x57d7, 0x293d, ], [ 0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126, 0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277, 0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9, 0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5, 0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0, 0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398, 0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279, 0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991, 0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f, 0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a, 0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd, 0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b, 0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea, 0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9, 0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15, 0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319, 0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e, 0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454, 0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623, 0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f, 0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3, 0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0, 0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231, 0x7a1b, 0xa265, 0xea4f, ], [ 0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5, 0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa, 0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01, 0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4, 0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da, 0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812, 0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4, 0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9, 0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932, 0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5, 0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f, 0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34, 0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882, 0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49, 0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776, 0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93, 0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69, 0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465, 0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f, 0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a, 0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545, 0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e, 0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038, 0xae28, 0x3409, 0xba19, ], ]; pub static CRC16_SPI_FUJITSU_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, ], [ 0x0000, 0x3331, 0x6662, 0x5553, 0xccc4, 0xfff5, 0xaaa6, 0x9997, 0x89a9, 0xba98, 0xefcb, 0xdcfa, 0x456d, 0x765c, 0x230f, 0x103e, 0x0373, 0x3042, 0x6511, 0x5620, 0xcfb7, 0xfc86, 0xa9d5, 0x9ae4, 0x8ada, 0xb9eb, 0xecb8, 0xdf89, 0x461e, 0x752f, 0x207c, 0x134d, 0x06e6, 0x35d7, 0x6084, 0x53b5, 0xca22, 0xf913, 0xac40, 0x9f71, 0x8f4f, 0xbc7e, 0xe92d, 0xda1c, 0x438b, 0x70ba, 0x25e9, 0x16d8, 0x0595, 0x36a4, 0x63f7, 0x50c6, 0xc951, 0xfa60, 0xaf33, 0x9c02, 0x8c3c, 0xbf0d, 0xea5e, 0xd96f, 0x40f8, 0x73c9, 0x269a, 0x15ab, 0x0dcc, 0x3efd, 0x6bae, 0x589f, 0xc108, 0xf239, 0xa76a, 0x945b, 0x8465, 0xb754, 0xe207, 0xd136, 0x48a1, 0x7b90, 0x2ec3, 0x1df2, 0x0ebf, 0x3d8e, 0x68dd, 0x5bec, 0xc27b, 0xf14a, 0xa419, 0x9728, 0x8716, 0xb427, 0xe174, 0xd245, 0x4bd2, 0x78e3, 0x2db0, 0x1e81, 0x0b2a, 0x381b, 0x6d48, 0x5e79, 0xc7ee, 0xf4df, 0xa18c, 0x92bd, 0x8283, 0xb1b2, 0xe4e1, 0xd7d0, 0x4e47, 0x7d76, 0x2825, 0x1b14, 0x0859, 0x3b68, 0x6e3b, 0x5d0a, 0xc49d, 0xf7ac, 0xa2ff, 0x91ce, 0x81f0, 0xb2c1, 0xe792, 0xd4a3, 0x4d34, 0x7e05, 0x2b56, 0x1867, 0x1b98, 0x28a9, 0x7dfa, 0x4ecb, 0xd75c, 0xe46d, 0xb13e, 0x820f, 0x9231, 0xa100, 0xf453, 0xc762, 0x5ef5, 0x6dc4, 0x3897, 0x0ba6, 0x18eb, 0x2bda, 0x7e89, 0x4db8, 0xd42f, 0xe71e, 0xb24d, 0x817c, 0x9142, 0xa273, 0xf720, 0xc411, 0x5d86, 0x6eb7, 0x3be4, 0x08d5, 0x1d7e, 0x2e4f, 0x7b1c, 0x482d, 0xd1ba, 0xe28b, 0xb7d8, 0x84e9, 0x94d7, 0xa7e6, 0xf2b5, 0xc184, 0x5813, 0x6b22, 0x3e71, 0x0d40, 0x1e0d, 0x2d3c, 0x786f, 0x4b5e, 0xd2c9, 0xe1f8, 0xb4ab, 0x879a, 0x97a4, 0xa495, 0xf1c6, 0xc2f7, 0x5b60, 0x6851, 0x3d02, 0x0e33, 0x1654, 0x2565, 0x7036, 0x4307, 0xda90, 0xe9a1, 0xbcf2, 0x8fc3, 0x9ffd, 0xaccc, 0xf99f, 0xcaae, 0x5339, 0x6008, 0x355b, 0x066a, 0x1527, 0x2616, 0x7345, 0x4074, 0xd9e3, 0xead2, 0xbf81, 0x8cb0, 0x9c8e, 0xafbf, 0xfaec, 0xc9dd, 0x504a, 0x637b, 0x3628, 0x0519, 0x10b2, 0x2383, 0x76d0, 0x45e1, 0xdc76, 0xef47, 0xba14, 0x8925, 0x991b, 0xaa2a, 0xff79, 0xcc48, 0x55df, 0x66ee, 0x33bd, 0x008c, 0x13c1, 0x20f0, 0x75a3, 0x4692, 0xdf05, 0xec34, 0xb967, 0x8a56, 0x9a68, 0xa959, 0xfc0a, 0xcf3b, 0x56ac, 0x659d, 0x30ce, 0x03ff, ], [ 0x0000, 0x3730, 0x6e60, 0x5950, 0xdcc0, 0xebf0, 0xb2a0, 0x8590, 0xa9a1, 0x9e91, 0xc7c1, 0xf0f1, 0x7561, 0x4251, 0x1b01, 0x2c31, 0x4363, 0x7453, 0x2d03, 0x1a33, 0x9fa3, 0xa893, 0xf1c3, 0xc6f3, 0xeac2, 0xddf2, 0x84a2, 0xb392, 0x3602, 0x0132, 0x5862, 0x6f52, 0x86c6, 0xb1f6, 0xe8a6, 0xdf96, 0x5a06, 0x6d36, 0x3466, 0x0356, 0x2f67, 0x1857, 0x4107, 0x7637, 0xf3a7, 0xc497, 0x9dc7, 0xaaf7, 0xc5a5, 0xf295, 0xabc5, 0x9cf5, 0x1965, 0x2e55, 0x7705, 0x4035, 0x6c04, 0x5b34, 0x0264, 0x3554, 0xb0c4, 0x87f4, 0xdea4, 0xe994, 0x1dad, 0x2a9d, 0x73cd, 0x44fd, 0xc16d, 0xf65d, 0xaf0d, 0x983d, 0xb40c, 0x833c, 0xda6c, 0xed5c, 0x68cc, 0x5ffc, 0x06ac, 0x319c, 0x5ece, 0x69fe, 0x30ae, 0x079e, 0x820e, 0xb53e, 0xec6e, 0xdb5e, 0xf76f, 0xc05f, 0x990f, 0xae3f, 0x2baf, 0x1c9f, 0x45cf, 0x72ff, 0x9b6b, 0xac5b, 0xf50b, 0xc23b, 0x47ab, 0x709b, 0x29cb, 0x1efb, 0x32ca, 0x05fa, 0x5caa, 0x6b9a, 0xee0a, 0xd93a, 0x806a, 0xb75a, 0xd808, 0xef38, 0xb668, 0x8158, 0x04c8, 0x33f8, 0x6aa8, 0x5d98, 0x71a9, 0x4699, 0x1fc9, 0x28f9, 0xad69, 0x9a59, 0xc309, 0xf439, 0x3b5a, 0x0c6a, 0x553a, 0x620a, 0xe79a, 0xd0aa, 0x89fa, 0xbeca, 0x92fb, 0xa5cb, 0xfc9b, 0xcbab, 0x4e3b, 0x790b, 0x205b, 0x176b, 0x7839, 0x4f09, 0x1659, 0x2169, 0xa4f9, 0x93c9, 0xca99, 0xfda9, 0xd198, 0xe6a8, 0xbff8, 0x88c8, 0x0d58, 0x3a68, 0x6338, 0x5408, 0xbd9c, 0x8aac, 0xd3fc, 0xe4cc, 0x615c, 0x566c, 0x0f3c, 0x380c, 0x143d, 0x230d, 0x7a5d, 0x4d6d, 0xc8fd, 0xffcd, 0xa69d, 0x91ad, 0xfeff, 0xc9cf, 0x909f, 0xa7af, 0x223f, 0x150f, 0x4c5f, 0x7b6f, 0x575e, 0x606e, 0x393e, 0x0e0e, 0x8b9e, 0xbcae, 0xe5fe, 0xd2ce, 0x26f7, 0x11c7, 0x4897, 0x7fa7, 0xfa37, 0xcd07, 0x9457, 0xa367, 0x8f56, 0xb866, 0xe136, 0xd606, 0x5396, 0x64a6, 0x3df6, 0x0ac6, 0x6594, 0x52a4, 0x0bf4, 0x3cc4, 0xb954, 0x8e64, 0xd734, 0xe004, 0xcc35, 0xfb05, 0xa255, 0x9565, 0x10f5, 0x27c5, 0x7e95, 0x49a5, 0xa031, 0x9701, 0xce51, 0xf961, 0x7cf1, 0x4bc1, 0x1291, 0x25a1, 0x0990, 0x3ea0, 0x67f0, 0x50c0, 0xd550, 0xe260, 0xbb30, 0x8c00, 0xe352, 0xd462, 0x8d32, 0xba02, 0x3f92, 0x08a2, 0x51f2, 0x66c2, 0x4af3, 0x7dc3, 0x2493, 0x13a3, 0x9633, 0xa103, 0xf853, 0xcf63, ], [ 0x0000, 0x76b4, 0xed68, 0x9bdc, 0xcaf1, 0xbc45, 0x2799, 0x512d, 0x85c3, 0xf377, 0x68ab, 0x1e1f, 0x4f32, 0x3986, 0xa25a, 0xd4ee, 0x1ba7, 0x6d13, 0xf6cf, 0x807b, 0xd156, 0xa7e2, 0x3c3e, 0x4a8a, 0x9e64, 0xe8d0, 0x730c, 0x05b8, 0x5495, 0x2221, 0xb9fd, 0xcf49, 0x374e, 0x41fa, 0xda26, 0xac92, 0xfdbf, 0x8b0b, 0x10d7, 0x6663, 0xb28d, 0xc439, 0x5fe5, 0x2951, 0x787c, 0x0ec8, 0x9514, 0xe3a0, 0x2ce9, 0x5a5d, 0xc181, 0xb735, 0xe618, 0x90ac, 0x0b70, 0x7dc4, 0xa92a, 0xdf9e, 0x4442, 0x32f6, 0x63db, 0x156f, 0x8eb3, 0xf807, 0x6e9c, 0x1828, 0x83f4, 0xf540, 0xa46d, 0xd2d9, 0x4905, 0x3fb1, 0xeb5f, 0x9deb, 0x0637, 0x7083, 0x21ae, 0x571a, 0xccc6, 0xba72, 0x753b, 0x038f, 0x9853, 0xeee7, 0xbfca, 0xc97e, 0x52a2, 0x2416, 0xf0f8, 0x864c, 0x1d90, 0x6b24, 0x3a09, 0x4cbd, 0xd761, 0xa1d5, 0x59d2, 0x2f66, 0xb4ba, 0xc20e, 0x9323, 0xe597, 0x7e4b, 0x08ff, 0xdc11, 0xaaa5, 0x3179, 0x47cd, 0x16e0, 0x6054, 0xfb88, 0x8d3c, 0x4275, 0x34c1, 0xaf1d, 0xd9a9, 0x8884, 0xfe30, 0x65ec, 0x1358, 0xc7b6, 0xb102, 0x2ade, 0x5c6a, 0x0d47, 0x7bf3, 0xe02f, 0x969b, 0xdd38, 0xab8c, 0x3050, 0x46e4, 0x17c9, 0x617d, 0xfaa1, 0x8c15, 0x58fb, 0x2e4f, 0xb593, 0xc327, 0x920a, 0xe4be, 0x7f62, 0x09d6, 0xc69f, 0xb02b, 0x2bf7, 0x5d43, 0x0c6e, 0x7ada, 0xe106, 0x97b2, 0x435c, 0x35e8, 0xae34, 0xd880, 0x89ad, 0xff19, 0x64c5, 0x1271, 0xea76, 0x9cc2, 0x071e, 0x71aa, 0x2087, 0x5633, 0xcdef, 0xbb5b, 0x6fb5, 0x1901, 0x82dd, 0xf469, 0xa544, 0xd3f0, 0x482c, 0x3e98, 0xf1d1, 0x8765, 0x1cb9, 0x6a0d, 0x3b20, 0x4d94, 0xd648, 0xa0fc, 0x7412, 0x02a6, 0x997a, 0xefce, 0xbee3, 0xc857, 0x538b, 0x253f, 0xb3a4, 0xc510, 0x5ecc, 0x2878, 0x7955, 0x0fe1, 0x943d, 0xe289, 0x3667, 0x40d3, 0xdb0f, 0xadbb, 0xfc96, 0x8a22, 0x11fe, 0x674a, 0xa803, 0xdeb7, 0x456b, 0x33df, 0x62f2, 0x1446, 0x8f9a, 0xf92e, 0x2dc0, 0x5b74, 0xc0a8, 0xb61c, 0xe731, 0x9185, 0x0a59, 0x7ced, 0x84ea, 0xf25e, 0x6982, 0x1f36, 0x4e1b, 0x38af, 0xa373, 0xd5c7, 0x0129, 0x779d, 0xec41, 0x9af5, 0xcbd8, 0xbd6c, 0x26b0, 0x5004, 0x9f4d, 0xe9f9, 0x7225, 0x0491, 0x55bc, 0x2308, 0xb8d4, 0xce60, 0x1a8e, 0x6c3a, 0xf7e6, 0x8152, 0xd07f, 0xa6cb, 0x3d17, 0x4ba3, ], [ 0x0000, 0xaa51, 0x4483, 0xeed2, 0x8906, 0x2357, 0xcd85, 0x67d4, 0x022d, 0xa87c, 0x46ae, 0xecff, 0x8b2b, 0x217a, 0xcfa8, 0x65f9, 0x045a, 0xae0b, 0x40d9, 0xea88, 0x8d5c, 0x270d, 0xc9df, 0x638e, 0x0677, 0xac26, 0x42f4, 0xe8a5, 0x8f71, 0x2520, 0xcbf2, 0x61a3, 0x08b4, 0xa2e5, 0x4c37, 0xe666, 0x81b2, 0x2be3, 0xc531, 0x6f60, 0x0a99, 0xa0c8, 0x4e1a, 0xe44b, 0x839f, 0x29ce, 0xc71c, 0x6d4d, 0x0cee, 0xa6bf, 0x486d, 0xe23c, 0x85e8, 0x2fb9, 0xc16b, 0x6b3a, 0x0ec3, 0xa492, 0x4a40, 0xe011, 0x87c5, 0x2d94, 0xc346, 0x6917, 0x1168, 0xbb39, 0x55eb, 0xffba, 0x986e, 0x323f, 0xdced, 0x76bc, 0x1345, 0xb914, 0x57c6, 0xfd97, 0x9a43, 0x3012, 0xdec0, 0x7491, 0x1532, 0xbf63, 0x51b1, 0xfbe0, 0x9c34, 0x3665, 0xd8b7, 0x72e6, 0x171f, 0xbd4e, 0x539c, 0xf9cd, 0x9e19, 0x3448, 0xda9a, 0x70cb, 0x19dc, 0xb38d, 0x5d5f, 0xf70e, 0x90da, 0x3a8b, 0xd459, 0x7e08, 0x1bf1, 0xb1a0, 0x5f72, 0xf523, 0x92f7, 0x38a6, 0xd674, 0x7c25, 0x1d86, 0xb7d7, 0x5905, 0xf354, 0x9480, 0x3ed1, 0xd003, 0x7a52, 0x1fab, 0xb5fa, 0x5b28, 0xf179, 0x96ad, 0x3cfc, 0xd22e, 0x787f, 0x22d0, 0x8881, 0x6653, 0xcc02, 0xabd6, 0x0187, 0xef55, 0x4504, 0x20fd, 0x8aac, 0x647e, 0xce2f, 0xa9fb, 0x03aa, 0xed78, 0x4729, 0x268a, 0x8cdb, 0x6209, 0xc858, 0xaf8c, 0x05dd, 0xeb0f, 0x415e, 0x24a7, 0x8ef6, 0x6024, 0xca75, 0xada1, 0x07f0, 0xe922, 0x4373, 0x2a64, 0x8035, 0x6ee7, 0xc4b6, 0xa362, 0x0933, 0xe7e1, 0x4db0, 0x2849, 0x8218, 0x6cca, 0xc69b, 0xa14f, 0x0b1e, 0xe5cc, 0x4f9d, 0x2e3e, 0x846f, 0x6abd, 0xc0ec, 0xa738, 0x0d69, 0xe3bb, 0x49ea, 0x2c13, 0x8642, 0x6890, 0xc2c1, 0xa515, 0x0f44, 0xe196, 0x4bc7, 0x33b8, 0x99e9, 0x773b, 0xdd6a, 0xbabe, 0x10ef, 0xfe3d, 0x546c, 0x3195, 0x9bc4, 0x7516, 0xdf47, 0xb893, 0x12c2, 0xfc10, 0x5641, 0x37e2, 0x9db3, 0x7361, 0xd930, 0xbee4, 0x14b5, 0xfa67, 0x5036, 0x35cf, 0x9f9e, 0x714c, 0xdb1d, 0xbcc9, 0x1698, 0xf84a, 0x521b, 0x3b0c, 0x915d, 0x7f8f, 0xd5de, 0xb20a, 0x185b, 0xf689, 0x5cd8, 0x3921, 0x9370, 0x7da2, 0xd7f3, 0xb027, 0x1a76, 0xf4a4, 0x5ef5, 0x3f56, 0x9507, 0x7bd5, 0xd184, 0xb650, 0x1c01, 0xf2d3, 0x5882, 0x3d7b, 0x972a, 0x79f8, 0xd3a9, 0xb47d, 0x1e2c, 0xf0fe, 0x5aaf, ], [ 0x0000, 0x45a0, 0x8b40, 0xcee0, 0x06a1, 0x4301, 0x8de1, 0xc841, 0x0d42, 0x48e2, 0x8602, 0xc3a2, 0x0be3, 0x4e43, 0x80a3, 0xc503, 0x1a84, 0x5f24, 0x91c4, 0xd464, 0x1c25, 0x5985, 0x9765, 0xd2c5, 0x17c6, 0x5266, 0x9c86, 0xd926, 0x1167, 0x54c7, 0x9a27, 0xdf87, 0x3508, 0x70a8, 0xbe48, 0xfbe8, 0x33a9, 0x7609, 0xb8e9, 0xfd49, 0x384a, 0x7dea, 0xb30a, 0xf6aa, 0x3eeb, 0x7b4b, 0xb5ab, 0xf00b, 0x2f8c, 0x6a2c, 0xa4cc, 0xe16c, 0x292d, 0x6c8d, 0xa26d, 0xe7cd, 0x22ce, 0x676e, 0xa98e, 0xec2e, 0x246f, 0x61cf, 0xaf2f, 0xea8f, 0x6a10, 0x2fb0, 0xe150, 0xa4f0, 0x6cb1, 0x2911, 0xe7f1, 0xa251, 0x6752, 0x22f2, 0xec12, 0xa9b2, 0x61f3, 0x2453, 0xeab3, 0xaf13, 0x7094, 0x3534, 0xfbd4, 0xbe74, 0x7635, 0x3395, 0xfd75, 0xb8d5, 0x7dd6, 0x3876, 0xf696, 0xb336, 0x7b77, 0x3ed7, 0xf037, 0xb597, 0x5f18, 0x1ab8, 0xd458, 0x91f8, 0x59b9, 0x1c19, 0xd2f9, 0x9759, 0x525a, 0x17fa, 0xd91a, 0x9cba, 0x54fb, 0x115b, 0xdfbb, 0x9a1b, 0x459c, 0x003c, 0xcedc, 0x8b7c, 0x433d, 0x069d, 0xc87d, 0x8ddd, 0x48de, 0x0d7e, 0xc39e, 0x863e, 0x4e7f, 0x0bdf, 0xc53f, 0x809f, 0xd420, 0x9180, 0x5f60, 0x1ac0, 0xd281, 0x9721, 0x59c1, 0x1c61, 0xd962, 0x9cc2, 0x5222, 0x1782, 0xdfc3, 0x9a63, 0x5483, 0x1123, 0xcea4, 0x8b04, 0x45e4, 0x0044, 0xc805, 0x8da5, 0x4345, 0x06e5, 0xc3e6, 0x8646, 0x48a6, 0x0d06, 0xc547, 0x80e7, 0x4e07, 0x0ba7, 0xe128, 0xa488, 0x6a68, 0x2fc8, 0xe789, 0xa229, 0x6cc9, 0x2969, 0xec6a, 0xa9ca, 0x672a, 0x228a, 0xeacb, 0xaf6b, 0x618b, 0x242b, 0xfbac, 0xbe0c, 0x70ec, 0x354c, 0xfd0d, 0xb8ad, 0x764d, 0x33ed, 0xf6ee, 0xb34e, 0x7dae, 0x380e, 0xf04f, 0xb5ef, 0x7b0f, 0x3eaf, 0xbe30, 0xfb90, 0x3570, 0x70d0, 0xb891, 0xfd31, 0x33d1, 0x7671, 0xb372, 0xf6d2, 0x3832, 0x7d92, 0xb5d3, 0xf073, 0x3e93, 0x7b33, 0xa4b4, 0xe114, 0x2ff4, 0x6a54, 0xa215, 0xe7b5, 0x2955, 0x6cf5, 0xa9f6, 0xec56, 0x22b6, 0x6716, 0xaf57, 0xeaf7, 0x2417, 0x61b7, 0x8b38, 0xce98, 0x0078, 0x45d8, 0x8d99, 0xc839, 0x06d9, 0x4379, 0x867a, 0xc3da, 0x0d3a, 0x489a, 0x80db, 0xc57b, 0x0b9b, 0x4e3b, 0x91bc, 0xd41c, 0x1afc, 0x5f5c, 0x971d, 0xd2bd, 0x1c5d, 0x59fd, 0x9cfe, 0xd95e, 0x17be, 0x521e, 0x9a5f, 0xdfff, 0x111f, 0x54bf, ], [ 0x0000, 0xb861, 0x60e3, 0xd882, 0xc1c6, 0x79a7, 0xa125, 0x1944, 0x93ad, 0x2bcc, 0xf34e, 0x4b2f, 0x526b, 0xea0a, 0x3288, 0x8ae9, 0x377b, 0x8f1a, 0x5798, 0xeff9, 0xf6bd, 0x4edc, 0x965e, 0x2e3f, 0xa4d6, 0x1cb7, 0xc435, 0x7c54, 0x6510, 0xdd71, 0x05f3, 0xbd92, 0x6ef6, 0xd697, 0x0e15, 0xb674, 0xaf30, 0x1751, 0xcfd3, 0x77b2, 0xfd5b, 0x453a, 0x9db8, 0x25d9, 0x3c9d, 0x84fc, 0x5c7e, 0xe41f, 0x598d, 0xe1ec, 0x396e, 0x810f, 0x984b, 0x202a, 0xf8a8, 0x40c9, 0xca20, 0x7241, 0xaac3, 0x12a2, 0x0be6, 0xb387, 0x6b05, 0xd364, 0xddec, 0x658d, 0xbd0f, 0x056e, 0x1c2a, 0xa44b, 0x7cc9, 0xc4a8, 0x4e41, 0xf620, 0x2ea2, 0x96c3, 0x8f87, 0x37e6, 0xef64, 0x5705, 0xea97, 0x52f6, 0x8a74, 0x3215, 0x2b51, 0x9330, 0x4bb2, 0xf3d3, 0x793a, 0xc15b, 0x19d9, 0xa1b8, 0xb8fc, 0x009d, 0xd81f, 0x607e, 0xb31a, 0x0b7b, 0xd3f9, 0x6b98, 0x72dc, 0xcabd, 0x123f, 0xaa5e, 0x20b7, 0x98d6, 0x4054, 0xf835, 0xe171, 0x5910, 0x8192, 0x39f3, 0x8461, 0x3c00, 0xe482, 0x5ce3, 0x45a7, 0xfdc6, 0x2544, 0x9d25, 0x17cc, 0xafad, 0x772f, 0xcf4e, 0xd60a, 0x6e6b, 0xb6e9, 0x0e88, 0xabf9, 0x1398, 0xcb1a, 0x737b, 0x6a3f, 0xd25e, 0x0adc, 0xb2bd, 0x3854, 0x8035, 0x58b7, 0xe0d6, 0xf992, 0x41f3, 0x9971, 0x2110, 0x9c82, 0x24e3, 0xfc61, 0x4400, 0x5d44, 0xe525, 0x3da7, 0x85c6, 0x0f2f, 0xb74e, 0x6fcc, 0xd7ad, 0xcee9, 0x7688, 0xae0a, 0x166b, 0xc50f, 0x7d6e, 0xa5ec, 0x1d8d, 0x04c9, 0xbca8, 0x642a, 0xdc4b, 0x56a2, 0xeec3, 0x3641, 0x8e20, 0x9764, 0x2f05, 0xf787, 0x4fe6, 0xf274, 0x4a15, 0x9297, 0x2af6, 0x33b2, 0x8bd3, 0x5351, 0xeb30, 0x61d9, 0xd9b8, 0x013a, 0xb95b, 0xa01f, 0x187e, 0xc0fc, 0x789d, 0x7615, 0xce74, 0x16f6, 0xae97, 0xb7d3, 0x0fb2, 0xd730, 0x6f51, 0xe5b8, 0x5dd9, 0x855b, 0x3d3a, 0x247e, 0x9c1f, 0x449d, 0xfcfc, 0x416e, 0xf90f, 0x218d, 0x99ec, 0x80a8, 0x38c9, 0xe04b, 0x582a, 0xd2c3, 0x6aa2, 0xb220, 0x0a41, 0x1305, 0xab64, 0x73e6, 0xcb87, 0x18e3, 0xa082, 0x7800, 0xc061, 0xd925, 0x6144, 0xb9c6, 0x01a7, 0x8b4e, 0x332f, 0xebad, 0x53cc, 0x4a88, 0xf2e9, 0x2a6b, 0x920a, 0x2f98, 0x97f9, 0x4f7b, 0xf71a, 0xee5e, 0x563f, 0x8ebd, 0x36dc, 0xbc35, 0x0454, 0xdcd6, 0x64b7, 0x7df3, 0xc592, 0x1d10, 0xa571, ], [ 0x0000, 0x47d3, 0x8fa6, 0xc875, 0x0f6d, 0x48be, 0x80cb, 0xc718, 0x1eda, 0x5909, 0x917c, 0xd6af, 0x11b7, 0x5664, 0x9e11, 0xd9c2, 0x3db4, 0x7a67, 0xb212, 0xf5c1, 0x32d9, 0x750a, 0xbd7f, 0xfaac, 0x236e, 0x64bd, 0xacc8, 0xeb1b, 0x2c03, 0x6bd0, 0xa3a5, 0xe476, 0x7b68, 0x3cbb, 0xf4ce, 0xb31d, 0x7405, 0x33d6, 0xfba3, 0xbc70, 0x65b2, 0x2261, 0xea14, 0xadc7, 0x6adf, 0x2d0c, 0xe579, 0xa2aa, 0x46dc, 0x010f, 0xc97a, 0x8ea9, 0x49b1, 0x0e62, 0xc617, 0x81c4, 0x5806, 0x1fd5, 0xd7a0, 0x9073, 0x576b, 0x10b8, 0xd8cd, 0x9f1e, 0xf6d0, 0xb103, 0x7976, 0x3ea5, 0xf9bd, 0xbe6e, 0x761b, 0x31c8, 0xe80a, 0xafd9, 0x67ac, 0x207f, 0xe767, 0xa0b4, 0x68c1, 0x2f12, 0xcb64, 0x8cb7, 0x44c2, 0x0311, 0xc409, 0x83da, 0x4baf, 0x0c7c, 0xd5be, 0x926d, 0x5a18, 0x1dcb, 0xdad3, 0x9d00, 0x5575, 0x12a6, 0x8db8, 0xca6b, 0x021e, 0x45cd, 0x82d5, 0xc506, 0x0d73, 0x4aa0, 0x9362, 0xd4b1, 0x1cc4, 0x5b17, 0x9c0f, 0xdbdc, 0x13a9, 0x547a, 0xb00c, 0xf7df, 0x3faa, 0x7879, 0xbf61, 0xf8b2, 0x30c7, 0x7714, 0xaed6, 0xe905, 0x2170, 0x66a3, 0xa1bb, 0xe668, 0x2e1d, 0x69ce, 0xfd81, 0xba52, 0x7227, 0x35f4, 0xf2ec, 0xb53f, 0x7d4a, 0x3a99, 0xe35b, 0xa488, 0x6cfd, 0x2b2e, 0xec36, 0xabe5, 0x6390, 0x2443, 0xc035, 0x87e6, 0x4f93, 0x0840, 0xcf58, 0x888b, 0x40fe, 0x072d, 0xdeef, 0x993c, 0x5149, 0x169a, 0xd182, 0x9651, 0x5e24, 0x19f7, 0x86e9, 0xc13a, 0x094f, 0x4e9c, 0x8984, 0xce57, 0x0622, 0x41f1, 0x9833, 0xdfe0, 0x1795, 0x5046, 0x975e, 0xd08d, 0x18f8, 0x5f2b, 0xbb5d, 0xfc8e, 0x34fb, 0x7328, 0xb430, 0xf3e3, 0x3b96, 0x7c45, 0xa587, 0xe254, 0x2a21, 0x6df2, 0xaaea, 0xed39, 0x254c, 0x629f, 0x0b51, 0x4c82, 0x84f7, 0xc324, 0x043c, 0x43ef, 0x8b9a, 0xcc49, 0x158b, 0x5258, 0x9a2d, 0xddfe, 0x1ae6, 0x5d35, 0x9540, 0xd293, 0x36e5, 0x7136, 0xb943, 0xfe90, 0x3988, 0x7e5b, 0xb62e, 0xf1fd, 0x283f, 0x6fec, 0xa799, 0xe04a, 0x2752, 0x6081, 0xa8f4, 0xef27, 0x7039, 0x37ea, 0xff9f, 0xb84c, 0x7f54, 0x3887, 0xf0f2, 0xb721, 0x6ee3, 0x2930, 0xe145, 0xa696, 0x618e, 0x265d, 0xee28, 0xa9fb, 0x4d8d, 0x0a5e, 0xc22b, 0x85f8, 0x42e0, 0x0533, 0xcd46, 0x8a95, 0x5357, 0x1484, 0xdcf1, 0x9b22, 0x5c3a, 0x1be9, 0xd39c, 0x944f, ], [ 0x0000, 0xeb23, 0xc667, 0x2d44, 0x9cef, 0x77cc, 0x5a88, 0xb1ab, 0x29ff, 0xc2dc, 0xef98, 0x04bb, 0xb510, 0x5e33, 0x7377, 0x9854, 0x53fe, 0xb8dd, 0x9599, 0x7eba, 0xcf11, 0x2432, 0x0976, 0xe255, 0x7a01, 0x9122, 0xbc66, 0x5745, 0xe6ee, 0x0dcd, 0x2089, 0xcbaa, 0xa7fc, 0x4cdf, 0x619b, 0x8ab8, 0x3b13, 0xd030, 0xfd74, 0x1657, 0x8e03, 0x6520, 0x4864, 0xa347, 0x12ec, 0xf9cf, 0xd48b, 0x3fa8, 0xf402, 0x1f21, 0x3265, 0xd946, 0x68ed, 0x83ce, 0xae8a, 0x45a9, 0xddfd, 0x36de, 0x1b9a, 0xf0b9, 0x4112, 0xaa31, 0x8775, 0x6c56, 0x5fd9, 0xb4fa, 0x99be, 0x729d, 0xc336, 0x2815, 0x0551, 0xee72, 0x7626, 0x9d05, 0xb041, 0x5b62, 0xeac9, 0x01ea, 0x2cae, 0xc78d, 0x0c27, 0xe704, 0xca40, 0x2163, 0x90c8, 0x7beb, 0x56af, 0xbd8c, 0x25d8, 0xcefb, 0xe3bf, 0x089c, 0xb937, 0x5214, 0x7f50, 0x9473, 0xf825, 0x1306, 0x3e42, 0xd561, 0x64ca, 0x8fe9, 0xa2ad, 0x498e, 0xd1da, 0x3af9, 0x17bd, 0xfc9e, 0x4d35, 0xa616, 0x8b52, 0x6071, 0xabdb, 0x40f8, 0x6dbc, 0x869f, 0x3734, 0xdc17, 0xf153, 0x1a70, 0x8224, 0x6907, 0x4443, 0xaf60, 0x1ecb, 0xf5e8, 0xd8ac, 0x338f, 0xbfb2, 0x5491, 0x79d5, 0x92f6, 0x235d, 0xc87e, 0xe53a, 0x0e19, 0x964d, 0x7d6e, 0x502a, 0xbb09, 0x0aa2, 0xe181, 0xccc5, 0x27e6, 0xec4c, 0x076f, 0x2a2b, 0xc108, 0x70a3, 0x9b80, 0xb6c4, 0x5de7, 0xc5b3, 0x2e90, 0x03d4, 0xe8f7, 0x595c, 0xb27f, 0x9f3b, 0x7418, 0x184e, 0xf36d, 0xde29, 0x350a, 0x84a1, 0x6f82, 0x42c6, 0xa9e5, 0x31b1, 0xda92, 0xf7d6, 0x1cf5, 0xad5e, 0x467d, 0x6b39, 0x801a, 0x4bb0, 0xa093, 0x8dd7, 0x66f4, 0xd75f, 0x3c7c, 0x1138, 0xfa1b, 0x624f, 0x896c, 0xa428, 0x4f0b, 0xfea0, 0x1583, 0x38c7, 0xd3e4, 0xe06b, 0x0b48, 0x260c, 0xcd2f, 0x7c84, 0x97a7, 0xbae3, 0x51c0, 0xc994, 0x22b7, 0x0ff3, 0xe4d0, 0x557b, 0xbe58, 0x931c, 0x783f, 0xb395, 0x58b6, 0x75f2, 0x9ed1, 0x2f7a, 0xc459, 0xe91d, 0x023e, 0x9a6a, 0x7149, 0x5c0d, 0xb72e, 0x0685, 0xeda6, 0xc0e2, 0x2bc1, 0x4797, 0xacb4, 0x81f0, 0x6ad3, 0xdb78, 0x305b, 0x1d1f, 0xf63c, 0x6e68, 0x854b, 0xa80f, 0x432c, 0xf287, 0x19a4, 0x34e0, 0xdfc3, 0x1469, 0xff4a, 0xd20e, 0x392d, 0x8886, 0x63a5, 0x4ee1, 0xa5c2, 0x3d96, 0xd6b5, 0xfbf1, 0x10d2, 0xa179, 0x4a5a, 0x671e, 0x8c3d, ], [ 0x0000, 0x6f45, 0xde8a, 0xb1cf, 0xad35, 0xc270, 0x73bf, 0x1cfa, 0x4a4b, 0x250e, 0x94c1, 0xfb84, 0xe77e, 0x883b, 0x39f4, 0x56b1, 0x9496, 0xfbd3, 0x4a1c, 0x2559, 0x39a3, 0x56e6, 0xe729, 0x886c, 0xdedd, 0xb198, 0x0057, 0x6f12, 0x73e8, 0x1cad, 0xad62, 0xc227, 0x390d, 0x5648, 0xe787, 0x88c2, 0x9438, 0xfb7d, 0x4ab2, 0x25f7, 0x7346, 0x1c03, 0xadcc, 0xc289, 0xde73, 0xb136, 0x00f9, 0x6fbc, 0xad9b, 0xc2de, 0x7311, 0x1c54, 0x00ae, 0x6feb, 0xde24, 0xb161, 0xe7d0, 0x8895, 0x395a, 0x561f, 0x4ae5, 0x25a0, 0x946f, 0xfb2a, 0x721a, 0x1d5f, 0xac90, 0xc3d5, 0xdf2f, 0xb06a, 0x01a5, 0x6ee0, 0x3851, 0x5714, 0xe6db, 0x899e, 0x9564, 0xfa21, 0x4bee, 0x24ab, 0xe68c, 0x89c9, 0x3806, 0x5743, 0x4bb9, 0x24fc, 0x9533, 0xfa76, 0xacc7, 0xc382, 0x724d, 0x1d08, 0x01f2, 0x6eb7, 0xdf78, 0xb03d, 0x4b17, 0x2452, 0x959d, 0xfad8, 0xe622, 0x8967, 0x38a8, 0x57ed, 0x015c, 0x6e19, 0xdfd6, 0xb093, 0xac69, 0xc32c, 0x72e3, 0x1da6, 0xdf81, 0xb0c4, 0x010b, 0x6e4e, 0x72b4, 0x1df1, 0xac3e, 0xc37b, 0x95ca, 0xfa8f, 0x4b40, 0x2405, 0x38ff, 0x57ba, 0xe675, 0x8930, 0xe434, 0x8b71, 0x3abe, 0x55fb, 0x4901, 0x2644, 0x978b, 0xf8ce, 0xae7f, 0xc13a, 0x70f5, 0x1fb0, 0x034a, 0x6c0f, 0xddc0, 0xb285, 0x70a2, 0x1fe7, 0xae28, 0xc16d, 0xdd97, 0xb2d2, 0x031d, 0x6c58, 0x3ae9, 0x55ac, 0xe463, 0x8b26, 0x97dc, 0xf899, 0x4956, 0x2613, 0xdd39, 0xb27c, 0x03b3, 0x6cf6, 0x700c, 0x1f49, 0xae86, 0xc1c3, 0x9772, 0xf837, 0x49f8, 0x26bd, 0x3a47, 0x5502, 0xe4cd, 0x8b88, 0x49af, 0x26ea, 0x9725, 0xf860, 0xe49a, 0x8bdf, 0x3a10, 0x5555, 0x03e4, 0x6ca1, 0xdd6e, 0xb22b, 0xaed1, 0xc194, 0x705b, 0x1f1e, 0x962e, 0xf96b, 0x48a4, 0x27e1, 0x3b1b, 0x545e, 0xe591, 0x8ad4, 0xdc65, 0xb320, 0x02ef, 0x6daa, 0x7150, 0x1e15, 0xafda, 0xc09f, 0x02b8, 0x6dfd, 0xdc32, 0xb377, 0xaf8d, 0xc0c8, 0x7107, 0x1e42, 0x48f3, 0x27b6, 0x9679, 0xf93c, 0xe5c6, 0x8a83, 0x3b4c, 0x5409, 0xaf23, 0xc066, 0x71a9, 0x1eec, 0x0216, 0x6d53, 0xdc9c, 0xb3d9, 0xe568, 0x8a2d, 0x3be2, 0x54a7, 0x485d, 0x2718, 0x96d7, 0xf992, 0x3bb5, 0x54f0, 0xe53f, 0x8a7a, 0x9680, 0xf9c5, 0x480a, 0x274f, 0x71fe, 0x1ebb, 0xaf74, 0xc031, 0xdccb, 0xb38e, 0x0241, 0x6d04, ], [ 0x0000, 0xd849, 0xa0b3, 0x78fa, 0x5147, 0x890e, 0xf1f4, 0x29bd, 0xa28e, 0x7ac7, 0x023d, 0xda74, 0xf3c9, 0x2b80, 0x537a, 0x8b33, 0x553d, 0x8d74, 0xf58e, 0x2dc7, 0x047a, 0xdc33, 0xa4c9, 0x7c80, 0xf7b3, 0x2ffa, 0x5700, 0x8f49, 0xa6f4, 0x7ebd, 0x0647, 0xde0e, 0xaa7a, 0x7233, 0x0ac9, 0xd280, 0xfb3d, 0x2374, 0x5b8e, 0x83c7, 0x08f4, 0xd0bd, 0xa847, 0x700e, 0x59b3, 0x81fa, 0xf900, 0x2149, 0xff47, 0x270e, 0x5ff4, 0x87bd, 0xae00, 0x7649, 0x0eb3, 0xd6fa, 0x5dc9, 0x8580, 0xfd7a, 0x2533, 0x0c8e, 0xd4c7, 0xac3d, 0x7474, 0x44d5, 0x9c9c, 0xe466, 0x3c2f, 0x1592, 0xcddb, 0xb521, 0x6d68, 0xe65b, 0x3e12, 0x46e8, 0x9ea1, 0xb71c, 0x6f55, 0x17af, 0xcfe6, 0x11e8, 0xc9a1, 0xb15b, 0x6912, 0x40af, 0x98e6, 0xe01c, 0x3855, 0xb366, 0x6b2f, 0x13d5, 0xcb9c, 0xe221, 0x3a68, 0x4292, 0x9adb, 0xeeaf, 0x36e6, 0x4e1c, 0x9655, 0xbfe8, 0x67a1, 0x1f5b, 0xc712, 0x4c21, 0x9468, 0xec92, 0x34db, 0x1d66, 0xc52f, 0xbdd5, 0x659c, 0xbb92, 0x63db, 0x1b21, 0xc368, 0xead5, 0x329c, 0x4a66, 0x922f, 0x191c, 0xc155, 0xb9af, 0x61e6, 0x485b, 0x9012, 0xe8e8, 0x30a1, 0x89aa, 0x51e3, 0x2919, 0xf150, 0xd8ed, 0x00a4, 0x785e, 0xa017, 0x2b24, 0xf36d, 0x8b97, 0x53de, 0x7a63, 0xa22a, 0xdad0, 0x0299, 0xdc97, 0x04de, 0x7c24, 0xa46d, 0x8dd0, 0x5599, 0x2d63, 0xf52a, 0x7e19, 0xa650, 0xdeaa, 0x06e3, 0x2f5e, 0xf717, 0x8fed, 0x57a4, 0x23d0, 0xfb99, 0x8363, 0x5b2a, 0x7297, 0xaade, 0xd224, 0x0a6d, 0x815e, 0x5917, 0x21ed, 0xf9a4, 0xd019, 0x0850, 0x70aa, 0xa8e3, 0x76ed, 0xaea4, 0xd65e, 0x0e17, 0x27aa, 0xffe3, 0x8719, 0x5f50, 0xd463, 0x0c2a, 0x74d0, 0xac99, 0x8524, 0x5d6d, 0x2597, 0xfdde, 0xcd7f, 0x1536, 0x6dcc, 0xb585, 0x9c38, 0x4471, 0x3c8b, 0xe4c2, 0x6ff1, 0xb7b8, 0xcf42, 0x170b, 0x3eb6, 0xe6ff, 0x9e05, 0x464c, 0x9842, 0x400b, 0x38f1, 0xe0b8, 0xc905, 0x114c, 0x69b6, 0xb1ff, 0x3acc, 0xe285, 0x9a7f, 0x4236, 0x6b8b, 0xb3c2, 0xcb38, 0x1371, 0x6705, 0xbf4c, 0xc7b6, 0x1fff, 0x3642, 0xee0b, 0x96f1, 0x4eb8, 0xc58b, 0x1dc2, 0x6538, 0xbd71, 0x94cc, 0x4c85, 0x347f, 0xec36, 0x3238, 0xea71, 0x928b, 0x4ac2, 0x637f, 0xbb36, 0xc3cc, 0x1b85, 0x90b6, 0x48ff, 0x3005, 0xe84c, 0xc1f1, 0x19b8, 0x6142, 0xb90b, ], [ 0x0000, 0x0375, 0x06ea, 0x059f, 0x0dd4, 0x0ea1, 0x0b3e, 0x084b, 0x1ba8, 0x18dd, 0x1d42, 0x1e37, 0x167c, 0x1509, 0x1096, 0x13e3, 0x3750, 0x3425, 0x31ba, 0x32cf, 0x3a84, 0x39f1, 0x3c6e, 0x3f1b, 0x2cf8, 0x2f8d, 0x2a12, 0x2967, 0x212c, 0x2259, 0x27c6, 0x24b3, 0x6ea0, 0x6dd5, 0x684a, 0x6b3f, 0x6374, 0x6001, 0x659e, 0x66eb, 0x7508, 0x767d, 0x73e2, 0x7097, 0x78dc, 0x7ba9, 0x7e36, 0x7d43, 0x59f0, 0x5a85, 0x5f1a, 0x5c6f, 0x5424, 0x5751, 0x52ce, 0x51bb, 0x4258, 0x412d, 0x44b2, 0x47c7, 0x4f8c, 0x4cf9, 0x4966, 0x4a13, 0xdd40, 0xde35, 0xdbaa, 0xd8df, 0xd094, 0xd3e1, 0xd67e, 0xd50b, 0xc6e8, 0xc59d, 0xc002, 0xc377, 0xcb3c, 0xc849, 0xcdd6, 0xcea3, 0xea10, 0xe965, 0xecfa, 0xef8f, 0xe7c4, 0xe4b1, 0xe12e, 0xe25b, 0xf1b8, 0xf2cd, 0xf752, 0xf427, 0xfc6c, 0xff19, 0xfa86, 0xf9f3, 0xb3e0, 0xb095, 0xb50a, 0xb67f, 0xbe34, 0xbd41, 0xb8de, 0xbbab, 0xa848, 0xab3d, 0xaea2, 0xadd7, 0xa59c, 0xa6e9, 0xa376, 0xa003, 0x84b0, 0x87c5, 0x825a, 0x812f, 0x8964, 0x8a11, 0x8f8e, 0x8cfb, 0x9f18, 0x9c6d, 0x99f2, 0x9a87, 0x92cc, 0x91b9, 0x9426, 0x9753, 0xaaa1, 0xa9d4, 0xac4b, 0xaf3e, 0xa775, 0xa400, 0xa19f, 0xa2ea, 0xb109, 0xb27c, 0xb7e3, 0xb496, 0xbcdd, 0xbfa8, 0xba37, 0xb942, 0x9df1, 0x9e84, 0x9b1b, 0x986e, 0x9025, 0x9350, 0x96cf, 0x95ba, 0x8659, 0x852c, 0x80b3, 0x83c6, 0x8b8d, 0x88f8, 0x8d67, 0x8e12, 0xc401, 0xc774, 0xc2eb, 0xc19e, 0xc9d5, 0xcaa0, 0xcf3f, 0xcc4a, 0xdfa9, 0xdcdc, 0xd943, 0xda36, 0xd27d, 0xd108, 0xd497, 0xd7e2, 0xf351, 0xf024, 0xf5bb, 0xf6ce, 0xfe85, 0xfdf0, 0xf86f, 0xfb1a, 0xe8f9, 0xeb8c, 0xee13, 0xed66, 0xe52d, 0xe658, 0xe3c7, 0xe0b2, 0x77e1, 0x7494, 0x710b, 0x727e, 0x7a35, 0x7940, 0x7cdf, 0x7faa, 0x6c49, 0x6f3c, 0x6aa3, 0x69d6, 0x619d, 0x62e8, 0x6777, 0x6402, 0x40b1, 0x43c4, 0x465b, 0x452e, 0x4d65, 0x4e10, 0x4b8f, 0x48fa, 0x5b19, 0x586c, 0x5df3, 0x5e86, 0x56cd, 0x55b8, 0x5027, 0x5352, 0x1941, 0x1a34, 0x1fab, 0x1cde, 0x1495, 0x17e0, 0x127f, 0x110a, 0x02e9, 0x019c, 0x0403, 0x0776, 0x0f3d, 0x0c48, 0x09d7, 0x0aa2, 0x2e11, 0x2d64, 0x28fb, 0x2b8e, 0x23c5, 0x20b0, 0x252f, 0x265a, 0x35b9, 0x36cc, 0x3353, 0x3026, 0x386d, 0x3b18, 0x3e87, 0x3df2, ], [ 0x0000, 0x4563, 0x8ac6, 0xcfa5, 0x05ad, 0x40ce, 0x8f6b, 0xca08, 0x0b5a, 0x4e39, 0x819c, 0xc4ff, 0x0ef7, 0x4b94, 0x8431, 0xc152, 0x16b4, 0x53d7, 0x9c72, 0xd911, 0x1319, 0x567a, 0x99df, 0xdcbc, 0x1dee, 0x588d, 0x9728, 0xd24b, 0x1843, 0x5d20, 0x9285, 0xd7e6, 0x2d68, 0x680b, 0xa7ae, 0xe2cd, 0x28c5, 0x6da6, 0xa203, 0xe760, 0x2632, 0x6351, 0xacf4, 0xe997, 0x239f, 0x66fc, 0xa959, 0xec3a, 0x3bdc, 0x7ebf, 0xb11a, 0xf479, 0x3e71, 0x7b12, 0xb4b7, 0xf1d4, 0x3086, 0x75e5, 0xba40, 0xff23, 0x352b, 0x7048, 0xbfed, 0xfa8e, 0x5ad0, 0x1fb3, 0xd016, 0x9575, 0x5f7d, 0x1a1e, 0xd5bb, 0x90d8, 0x518a, 0x14e9, 0xdb4c, 0x9e2f, 0x5427, 0x1144, 0xdee1, 0x9b82, 0x4c64, 0x0907, 0xc6a2, 0x83c1, 0x49c9, 0x0caa, 0xc30f, 0x866c, 0x473e, 0x025d, 0xcdf8, 0x889b, 0x4293, 0x07f0, 0xc855, 0x8d36, 0x77b8, 0x32db, 0xfd7e, 0xb81d, 0x7215, 0x3776, 0xf8d3, 0xbdb0, 0x7ce2, 0x3981, 0xf624, 0xb347, 0x794f, 0x3c2c, 0xf389, 0xb6ea, 0x610c, 0x246f, 0xebca, 0xaea9, 0x64a1, 0x21c2, 0xee67, 0xab04, 0x6a56, 0x2f35, 0xe090, 0xa5f3, 0x6ffb, 0x2a98, 0xe53d, 0xa05e, 0xb5a0, 0xf0c3, 0x3f66, 0x7a05, 0xb00d, 0xf56e, 0x3acb, 0x7fa8, 0xbefa, 0xfb99, 0x343c, 0x715f, 0xbb57, 0xfe34, 0x3191, 0x74f2, 0xa314, 0xe677, 0x29d2, 0x6cb1, 0xa6b9, 0xe3da, 0x2c7f, 0x691c, 0xa84e, 0xed2d, 0x2288, 0x67eb, 0xade3, 0xe880, 0x2725, 0x6246, 0x98c8, 0xddab, 0x120e, 0x576d, 0x9d65, 0xd806, 0x17a3, 0x52c0, 0x9392, 0xd6f1, 0x1954, 0x5c37, 0x963f, 0xd35c, 0x1cf9, 0x599a, 0x8e7c, 0xcb1f, 0x04ba, 0x41d9, 0x8bd1, 0xceb2, 0x0117, 0x4474, 0x8526, 0xc045, 0x0fe0, 0x4a83, 0x808b, 0xc5e8, 0x0a4d, 0x4f2e, 0xef70, 0xaa13, 0x65b6, 0x20d5, 0xeadd, 0xafbe, 0x601b, 0x2578, 0xe42a, 0xa149, 0x6eec, 0x2b8f, 0xe187, 0xa4e4, 0x6b41, 0x2e22, 0xf9c4, 0xbca7, 0x7302, 0x3661, 0xfc69, 0xb90a, 0x76af, 0x33cc, 0xf29e, 0xb7fd, 0x7858, 0x3d3b, 0xf733, 0xb250, 0x7df5, 0x3896, 0xc218, 0x877b, 0x48de, 0x0dbd, 0xc7b5, 0x82d6, 0x4d73, 0x0810, 0xc942, 0x8c21, 0x4384, 0x06e7, 0xccef, 0x898c, 0x4629, 0x034a, 0xd4ac, 0x91cf, 0x5e6a, 0x1b09, 0xd101, 0x9462, 0x5bc7, 0x1ea4, 0xdff6, 0x9a95, 0x5530, 0x1053, 0xda5b, 0x9f38, 0x509d, 0x15fe, ], [ 0x0000, 0x7b61, 0xf6c2, 0x8da3, 0xfda5, 0x86c4, 0x0b67, 0x7006, 0xeb6b, 0x900a, 0x1da9, 0x66c8, 0x16ce, 0x6daf, 0xe00c, 0x9b6d, 0xc6f7, 0xbd96, 0x3035, 0x4b54, 0x3b52, 0x4033, 0xcd90, 0xb6f1, 0x2d9c, 0x56fd, 0xdb5e, 0xa03f, 0xd039, 0xab58, 0x26fb, 0x5d9a, 0x9dcf, 0xe6ae, 0x6b0d, 0x106c, 0x606a, 0x1b0b, 0x96a8, 0xedc9, 0x76a4, 0x0dc5, 0x8066, 0xfb07, 0x8b01, 0xf060, 0x7dc3, 0x06a2, 0x5b38, 0x2059, 0xadfa, 0xd69b, 0xa69d, 0xddfc, 0x505f, 0x2b3e, 0xb053, 0xcb32, 0x4691, 0x3df0, 0x4df6, 0x3697, 0xbb34, 0xc055, 0x2bbf, 0x50de, 0xdd7d, 0xa61c, 0xd61a, 0xad7b, 0x20d8, 0x5bb9, 0xc0d4, 0xbbb5, 0x3616, 0x4d77, 0x3d71, 0x4610, 0xcbb3, 0xb0d2, 0xed48, 0x9629, 0x1b8a, 0x60eb, 0x10ed, 0x6b8c, 0xe62f, 0x9d4e, 0x0623, 0x7d42, 0xf0e1, 0x8b80, 0xfb86, 0x80e7, 0x0d44, 0x7625, 0xb670, 0xcd11, 0x40b2, 0x3bd3, 0x4bd5, 0x30b4, 0xbd17, 0xc676, 0x5d1b, 0x267a, 0xabd9, 0xd0b8, 0xa0be, 0xdbdf, 0x567c, 0x2d1d, 0x7087, 0x0be6, 0x8645, 0xfd24, 0x8d22, 0xf643, 0x7be0, 0x0081, 0x9bec, 0xe08d, 0x6d2e, 0x164f, 0x6649, 0x1d28, 0x908b, 0xebea, 0x577e, 0x2c1f, 0xa1bc, 0xdadd, 0xaadb, 0xd1ba, 0x5c19, 0x2778, 0xbc15, 0xc774, 0x4ad7, 0x31b6, 0x41b0, 0x3ad1, 0xb772, 0xcc13, 0x9189, 0xeae8, 0x674b, 0x1c2a, 0x6c2c, 0x174d, 0x9aee, 0xe18f, 0x7ae2, 0x0183, 0x8c20, 0xf741, 0x8747, 0xfc26, 0x7185, 0x0ae4, 0xcab1, 0xb1d0, 0x3c73, 0x4712, 0x3714, 0x4c75, 0xc1d6, 0xbab7, 0x21da, 0x5abb, 0xd718, 0xac79, 0xdc7f, 0xa71e, 0x2abd, 0x51dc, 0x0c46, 0x7727, 0xfa84, 0x81e5, 0xf1e3, 0x8a82, 0x0721, 0x7c40, 0xe72d, 0x9c4c, 0x11ef, 0x6a8e, 0x1a88, 0x61e9, 0xec4a, 0x972b, 0x7cc1, 0x07a0, 0x8a03, 0xf162, 0x8164, 0xfa05, 0x77a6, 0x0cc7, 0x97aa, 0xeccb, 0x6168, 0x1a09, 0x6a0f, 0x116e, 0x9ccd, 0xe7ac, 0xba36, 0xc157, 0x4cf4, 0x3795, 0x4793, 0x3cf2, 0xb151, 0xca30, 0x515d, 0x2a3c, 0xa79f, 0xdcfe, 0xacf8, 0xd799, 0x5a3a, 0x215b, 0xe10e, 0x9a6f, 0x17cc, 0x6cad, 0x1cab, 0x67ca, 0xea69, 0x9108, 0x0a65, 0x7104, 0xfca7, 0x87c6, 0xf7c0, 0x8ca1, 0x0102, 0x7a63, 0x27f9, 0x5c98, 0xd13b, 0xaa5a, 0xda5c, 0xa13d, 0x2c9e, 0x57ff, 0xcc92, 0xb7f3, 0x3a50, 0x4131, 0x3137, 0x4a56, 0xc7f5, 0xbc94, ], [ 0x0000, 0xaefc, 0x4dd9, 0xe325, 0x9bb2, 0x354e, 0xd66b, 0x7897, 0x2745, 0x89b9, 0x6a9c, 0xc460, 0xbcf7, 0x120b, 0xf12e, 0x5fd2, 0x4e8a, 0xe076, 0x0353, 0xadaf, 0xd538, 0x7bc4, 0x98e1, 0x361d, 0x69cf, 0xc733, 0x2416, 0x8aea, 0xf27d, 0x5c81, 0xbfa4, 0x1158, 0x9d14, 0x33e8, 0xd0cd, 0x7e31, 0x06a6, 0xa85a, 0x4b7f, 0xe583, 0xba51, 0x14ad, 0xf788, 0x5974, 0x21e3, 0x8f1f, 0x6c3a, 0xc2c6, 0xd39e, 0x7d62, 0x9e47, 0x30bb, 0x482c, 0xe6d0, 0x05f5, 0xab09, 0xf4db, 0x5a27, 0xb902, 0x17fe, 0x6f69, 0xc195, 0x22b0, 0x8c4c, 0x2a09, 0x84f5, 0x67d0, 0xc92c, 0xb1bb, 0x1f47, 0xfc62, 0x529e, 0x0d4c, 0xa3b0, 0x4095, 0xee69, 0x96fe, 0x3802, 0xdb27, 0x75db, 0x6483, 0xca7f, 0x295a, 0x87a6, 0xff31, 0x51cd, 0xb2e8, 0x1c14, 0x43c6, 0xed3a, 0x0e1f, 0xa0e3, 0xd874, 0x7688, 0x95ad, 0x3b51, 0xb71d, 0x19e1, 0xfac4, 0x5438, 0x2caf, 0x8253, 0x6176, 0xcf8a, 0x9058, 0x3ea4, 0xdd81, 0x737d, 0x0bea, 0xa516, 0x4633, 0xe8cf, 0xf997, 0x576b, 0xb44e, 0x1ab2, 0x6225, 0xccd9, 0x2ffc, 0x8100, 0xded2, 0x702e, 0x930b, 0x3df7, 0x4560, 0xeb9c, 0x08b9, 0xa645, 0x5412, 0xfaee, 0x19cb, 0xb737, 0xcfa0, 0x615c, 0x8279, 0x2c85, 0x7357, 0xddab, 0x3e8e, 0x9072, 0xe8e5, 0x4619, 0xa53c, 0x0bc0, 0x1a98, 0xb464, 0x5741, 0xf9bd, 0x812a, 0x2fd6, 0xccf3, 0x620f, 0x3ddd, 0x9321, 0x7004, 0xdef8, 0xa66f, 0x0893, 0xebb6, 0x454a, 0xc906, 0x67fa, 0x84df, 0x2a23, 0x52b4, 0xfc48, 0x1f6d, 0xb191, 0xee43, 0x40bf, 0xa39a, 0x0d66, 0x75f1, 0xdb0d, 0x3828, 0x96d4, 0x878c, 0x2970, 0xca55, 0x64a9, 0x1c3e, 0xb2c2, 0x51e7, 0xff1b, 0xa0c9, 0x0e35, 0xed10, 0x43ec, 0x3b7b, 0x9587, 0x76a2, 0xd85e, 0x7e1b, 0xd0e7, 0x33c2, 0x9d3e, 0xe5a9, 0x4b55, 0xa870, 0x068c, 0x595e, 0xf7a2, 0x1487, 0xba7b, 0xc2ec, 0x6c10, 0x8f35, 0x21c9, 0x3091, 0x9e6d, 0x7d48, 0xd3b4, 0xab23, 0x05df, 0xe6fa, 0x4806, 0x17d4, 0xb928, 0x5a0d, 0xf4f1, 0x8c66, 0x229a, 0xc1bf, 0x6f43, 0xe30f, 0x4df3, 0xaed6, 0x002a, 0x78bd, 0xd641, 0x3564, 0x9b98, 0xc44a, 0x6ab6, 0x8993, 0x276f, 0x5ff8, 0xf104, 0x1221, 0xbcdd, 0xad85, 0x0379, 0xe05c, 0x4ea0, 0x3637, 0x98cb, 0x7bee, 0xd512, 0x8ac0, 0x243c, 0xc719, 0x69e5, 0x1172, 0xbf8e, 0x5cab, 0xf257, ], [ 0x0000, 0xa824, 0x4069, 0xe84d, 0x80d2, 0x28f6, 0xc0bb, 0x689f, 0x1185, 0xb9a1, 0x51ec, 0xf9c8, 0x9157, 0x3973, 0xd13e, 0x791a, 0x230a, 0x8b2e, 0x6363, 0xcb47, 0xa3d8, 0x0bfc, 0xe3b1, 0x4b95, 0x328f, 0x9aab, 0x72e6, 0xdac2, 0xb25d, 0x1a79, 0xf234, 0x5a10, 0x4614, 0xee30, 0x067d, 0xae59, 0xc6c6, 0x6ee2, 0x86af, 0x2e8b, 0x5791, 0xffb5, 0x17f8, 0xbfdc, 0xd743, 0x7f67, 0x972a, 0x3f0e, 0x651e, 0xcd3a, 0x2577, 0x8d53, 0xe5cc, 0x4de8, 0xa5a5, 0x0d81, 0x749b, 0xdcbf, 0x34f2, 0x9cd6, 0xf449, 0x5c6d, 0xb420, 0x1c04, 0x8c28, 0x240c, 0xcc41, 0x6465, 0x0cfa, 0xa4de, 0x4c93, 0xe4b7, 0x9dad, 0x3589, 0xddc4, 0x75e0, 0x1d7f, 0xb55b, 0x5d16, 0xf532, 0xaf22, 0x0706, 0xef4b, 0x476f, 0x2ff0, 0x87d4, 0x6f99, 0xc7bd, 0xbea7, 0x1683, 0xfece, 0x56ea, 0x3e75, 0x9651, 0x7e1c, 0xd638, 0xca3c, 0x6218, 0x8a55, 0x2271, 0x4aee, 0xe2ca, 0x0a87, 0xa2a3, 0xdbb9, 0x739d, 0x9bd0, 0x33f4, 0x5b6b, 0xf34f, 0x1b02, 0xb326, 0xe936, 0x4112, 0xa95f, 0x017b, 0x69e4, 0xc1c0, 0x298d, 0x81a9, 0xf8b3, 0x5097, 0xb8da, 0x10fe, 0x7861, 0xd045, 0x3808, 0x902c, 0x0871, 0xa055, 0x4818, 0xe03c, 0x88a3, 0x2087, 0xc8ca, 0x60ee, 0x19f4, 0xb1d0, 0x599d, 0xf1b9, 0x9926, 0x3102, 0xd94f, 0x716b, 0x2b7b, 0x835f, 0x6b12, 0xc336, 0xaba9, 0x038d, 0xebc0, 0x43e4, 0x3afe, 0x92da, 0x7a97, 0xd2b3, 0xba2c, 0x1208, 0xfa45, 0x5261, 0x4e65, 0xe641, 0x0e0c, 0xa628, 0xceb7, 0x6693, 0x8ede, 0x26fa, 0x5fe0, 0xf7c4, 0x1f89, 0xb7ad, 0xdf32, 0x7716, 0x9f5b, 0x377f, 0x6d6f, 0xc54b, 0x2d06, 0x8522, 0xedbd, 0x4599, 0xadd4, 0x05f0, 0x7cea, 0xd4ce, 0x3c83, 0x94a7, 0xfc38, 0x541c, 0xbc51, 0x1475, 0x8459, 0x2c7d, 0xc430, 0x6c14, 0x048b, 0xacaf, 0x44e2, 0xecc6, 0x95dc, 0x3df8, 0xd5b5, 0x7d91, 0x150e, 0xbd2a, 0x5567, 0xfd43, 0xa753, 0x0f77, 0xe73a, 0x4f1e, 0x2781, 0x8fa5, 0x67e8, 0xcfcc, 0xb6d6, 0x1ef2, 0xf6bf, 0x5e9b, 0x3604, 0x9e20, 0x766d, 0xde49, 0xc24d, 0x6a69, 0x8224, 0x2a00, 0x429f, 0xeabb, 0x02f6, 0xaad2, 0xd3c8, 0x7bec, 0x93a1, 0x3b85, 0x531a, 0xfb3e, 0x1373, 0xbb57, 0xe147, 0x4963, 0xa12e, 0x090a, 0x6195, 0xc9b1, 0x21fc, 0x89d8, 0xf0c2, 0x58e6, 0xb0ab, 0x188f, 0x7010, 0xd834, 0x3079, 0x985d, ], ]; pub static CRC16_T10_DIF_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x8bb7, 0x9cd9, 0x176e, 0xb205, 0x39b2, 0x2edc, 0xa56b, 0xefbd, 0x640a, 0x7364, 0xf8d3, 0x5db8, 0xd60f, 0xc161, 0x4ad6, 0x54cd, 0xdf7a, 0xc814, 0x43a3, 0xe6c8, 0x6d7f, 0x7a11, 0xf1a6, 0xbb70, 0x30c7, 0x27a9, 0xac1e, 0x0975, 0x82c2, 0x95ac, 0x1e1b, 0xa99a, 0x222d, 0x3543, 0xbef4, 0x1b9f, 0x9028, 0x8746, 0x0cf1, 0x4627, 0xcd90, 0xdafe, 0x5149, 0xf422, 0x7f95, 0x68fb, 0xe34c, 0xfd57, 0x76e0, 0x618e, 0xea39, 0x4f52, 0xc4e5, 0xd38b, 0x583c, 0x12ea, 0x995d, 0x8e33, 0x0584, 0xa0ef, 0x2b58, 0x3c36, 0xb781, 0xd883, 0x5334, 0x445a, 0xcfed, 0x6a86, 0xe131, 0xf65f, 0x7de8, 0x373e, 0xbc89, 0xabe7, 0x2050, 0x853b, 0x0e8c, 0x19e2, 0x9255, 0x8c4e, 0x07f9, 0x1097, 0x9b20, 0x3e4b, 0xb5fc, 0xa292, 0x2925, 0x63f3, 0xe844, 0xff2a, 0x749d, 0xd1f6, 0x5a41, 0x4d2f, 0xc698, 0x7119, 0xfaae, 0xedc0, 0x6677, 0xc31c, 0x48ab, 0x5fc5, 0xd472, 0x9ea4, 0x1513, 0x027d, 0x89ca, 0x2ca1, 0xa716, 0xb078, 0x3bcf, 0x25d4, 0xae63, 0xb90d, 0x32ba, 0x97d1, 0x1c66, 0x0b08, 0x80bf, 0xca69, 0x41de, 0x56b0, 0xdd07, 0x786c, 0xf3db, 0xe4b5, 0x6f02, 0x3ab1, 0xb106, 0xa668, 0x2ddf, 0x88b4, 0x0303, 0x146d, 0x9fda, 0xd50c, 0x5ebb, 0x49d5, 0xc262, 0x6709, 0xecbe, 0xfbd0, 0x7067, 0x6e7c, 0xe5cb, 0xf2a5, 0x7912, 0xdc79, 0x57ce, 0x40a0, 0xcb17, 0x81c1, 0x0a76, 0x1d18, 0x96af, 0x33c4, 0xb873, 0xaf1d, 0x24aa, 0x932b, 0x189c, 0x0ff2, 0x8445, 0x212e, 0xaa99, 0xbdf7, 0x3640, 0x7c96, 0xf721, 0xe04f, 0x6bf8, 0xce93, 0x4524, 0x524a, 0xd9fd, 0xc7e6, 0x4c51, 0x5b3f, 0xd088, 0x75e3, 0xfe54, 0xe93a, 0x628d, 0x285b, 0xa3ec, 0xb482, 0x3f35, 0x9a5e, 0x11e9, 0x0687, 0x8d30, 0xe232, 0x6985, 0x7eeb, 0xf55c, 0x5037, 0xdb80, 0xccee, 0x4759, 0x0d8f, 0x8638, 0x9156, 0x1ae1, 0xbf8a, 0x343d, 0x2353, 0xa8e4, 0xb6ff, 0x3d48, 0x2a26, 0xa191, 0x04fa, 0x8f4d, 0x9823, 0x1394, 0x5942, 0xd2f5, 0xc59b, 0x4e2c, 0xeb47, 0x60f0, 0x779e, 0xfc29, 0x4ba8, 0xc01f, 0xd771, 0x5cc6, 0xf9ad, 0x721a, 0x6574, 0xeec3, 0xa415, 0x2fa2, 0x38cc, 0xb37b, 0x1610, 0x9da7, 0x8ac9, 0x017e, 0x1f65, 0x94d2, 0x83bc, 0x080b, 0xad60, 0x26d7, 0x31b9, 0xba0e, 0xf0d8, 0x7b6f, 0x6c01, 0xe7b6, 0x42dd, 0xc96a, 0xde04, 0x55b3, ], [ 0x0000, 0x7562, 0xeac4, 0x9fa6, 0x5e3f, 0x2b5d, 0xb4fb, 0xc199, 0xbc7e, 0xc91c, 0x56ba, 0x23d8, 0xe241, 0x9723, 0x0885, 0x7de7, 0xf34b, 0x8629, 0x198f, 0x6ced, 0xad74, 0xd816, 0x47b0, 0x32d2, 0x4f35, 0x3a57, 0xa5f1, 0xd093, 0x110a, 0x6468, 0xfbce, 0x8eac, 0x6d21, 0x1843, 0x87e5, 0xf287, 0x331e, 0x467c, 0xd9da, 0xacb8, 0xd15f, 0xa43d, 0x3b9b, 0x4ef9, 0x8f60, 0xfa02, 0x65a4, 0x10c6, 0x9e6a, 0xeb08, 0x74ae, 0x01cc, 0xc055, 0xb537, 0x2a91, 0x5ff3, 0x2214, 0x5776, 0xc8d0, 0xbdb2, 0x7c2b, 0x0949, 0x96ef, 0xe38d, 0xda42, 0xaf20, 0x3086, 0x45e4, 0x847d, 0xf11f, 0x6eb9, 0x1bdb, 0x663c, 0x135e, 0x8cf8, 0xf99a, 0x3803, 0x4d61, 0xd2c7, 0xa7a5, 0x2909, 0x5c6b, 0xc3cd, 0xb6af, 0x7736, 0x0254, 0x9df2, 0xe890, 0x9577, 0xe015, 0x7fb3, 0x0ad1, 0xcb48, 0xbe2a, 0x218c, 0x54ee, 0xb763, 0xc201, 0x5da7, 0x28c5, 0xe95c, 0x9c3e, 0x0398, 0x76fa, 0x0b1d, 0x7e7f, 0xe1d9, 0x94bb, 0x5522, 0x2040, 0xbfe6, 0xca84, 0x4428, 0x314a, 0xaeec, 0xdb8e, 0x1a17, 0x6f75, 0xf0d3, 0x85b1, 0xf856, 0x8d34, 0x1292, 0x67f0, 0xa669, 0xd30b, 0x4cad, 0x39cf, 0x3f33, 0x4a51, 0xd5f7, 0xa095, 0x610c, 0x146e, 0x8bc8, 0xfeaa, 0x834d, 0xf62f, 0x6989, 0x1ceb, 0xdd72, 0xa810, 0x37b6, 0x42d4, 0xcc78, 0xb91a, 0x26bc, 0x53de, 0x9247, 0xe725, 0x7883, 0x0de1, 0x7006, 0x0564, 0x9ac2, 0xefa0, 0x2e39, 0x5b5b, 0xc4fd, 0xb19f, 0x5212, 0x2770, 0xb8d6, 0xcdb4, 0x0c2d, 0x794f, 0xe6e9, 0x938b, 0xee6c, 0x9b0e, 0x04a8, 0x71ca, 0xb053, 0xc531, 0x5a97, 0x2ff5, 0xa159, 0xd43b, 0x4b9d, 0x3eff, 0xff66, 0x8a04, 0x15a2, 0x60c0, 0x1d27, 0x6845, 0xf7e3, 0x8281, 0x4318, 0x367a, 0xa9dc, 0xdcbe, 0xe571, 0x9013, 0x0fb5, 0x7ad7, 0xbb4e, 0xce2c, 0x518a, 0x24e8, 0x590f, 0x2c6d, 0xb3cb, 0xc6a9, 0x0730, 0x7252, 0xedf4, 0x9896, 0x163a, 0x6358, 0xfcfe, 0x899c, 0x4805, 0x3d67, 0xa2c1, 0xd7a3, 0xaa44, 0xdf26, 0x4080, 0x35e2, 0xf47b, 0x8119, 0x1ebf, 0x6bdd, 0x8850, 0xfd32, 0x6294, 0x17f6, 0xd66f, 0xa30d, 0x3cab, 0x49c9, 0x342e, 0x414c, 0xdeea, 0xab88, 0x6a11, 0x1f73, 0x80d5, 0xf5b7, 0x7b1b, 0x0e79, 0x91df, 0xe4bd, 0x2524, 0x5046, 0xcfe0, 0xba82, 0xc765, 0xb207, 0x2da1, 0x58c3, 0x995a, 0xec38, 0x739e, 0x06fc, ], [ 0x0000, 0x7e66, 0xfccc, 0x82aa, 0x722f, 0x0c49, 0x8ee3, 0xf085, 0xe45e, 0x9a38, 0x1892, 0x66f4, 0x9671, 0xe817, 0x6abd, 0x14db, 0x430b, 0x3d6d, 0xbfc7, 0xc1a1, 0x3124, 0x4f42, 0xcde8, 0xb38e, 0xa755, 0xd933, 0x5b99, 0x25ff, 0xd57a, 0xab1c, 0x29b6, 0x57d0, 0x8616, 0xf870, 0x7ada, 0x04bc, 0xf439, 0x8a5f, 0x08f5, 0x7693, 0x6248, 0x1c2e, 0x9e84, 0xe0e2, 0x1067, 0x6e01, 0xecab, 0x92cd, 0xc51d, 0xbb7b, 0x39d1, 0x47b7, 0xb732, 0xc954, 0x4bfe, 0x3598, 0x2143, 0x5f25, 0xdd8f, 0xa3e9, 0x536c, 0x2d0a, 0xafa0, 0xd1c6, 0x879b, 0xf9fd, 0x7b57, 0x0531, 0xf5b4, 0x8bd2, 0x0978, 0x771e, 0x63c5, 0x1da3, 0x9f09, 0xe16f, 0x11ea, 0x6f8c, 0xed26, 0x9340, 0xc490, 0xbaf6, 0x385c, 0x463a, 0xb6bf, 0xc8d9, 0x4a73, 0x3415, 0x20ce, 0x5ea8, 0xdc02, 0xa264, 0x52e1, 0x2c87, 0xae2d, 0xd04b, 0x018d, 0x7feb, 0xfd41, 0x8327, 0x73a2, 0x0dc4, 0x8f6e, 0xf108, 0xe5d3, 0x9bb5, 0x191f, 0x6779, 0x97fc, 0xe99a, 0x6b30, 0x1556, 0x4286, 0x3ce0, 0xbe4a, 0xc02c, 0x30a9, 0x4ecf, 0xcc65, 0xb203, 0xa6d8, 0xd8be, 0x5a14, 0x2472, 0xd4f7, 0xaa91, 0x283b, 0x565d, 0x8481, 0xfae7, 0x784d, 0x062b, 0xf6ae, 0x88c8, 0x0a62, 0x7404, 0x60df, 0x1eb9, 0x9c13, 0xe275, 0x12f0, 0x6c96, 0xee3c, 0x905a, 0xc78a, 0xb9ec, 0x3b46, 0x4520, 0xb5a5, 0xcbc3, 0x4969, 0x370f, 0x23d4, 0x5db2, 0xdf18, 0xa17e, 0x51fb, 0x2f9d, 0xad37, 0xd351, 0x0297, 0x7cf1, 0xfe5b, 0x803d, 0x70b8, 0x0ede, 0x8c74, 0xf212, 0xe6c9, 0x98af, 0x1a05, 0x6463, 0x94e6, 0xea80, 0x682a, 0x164c, 0x419c, 0x3ffa, 0xbd50, 0xc336, 0x33b3, 0x4dd5, 0xcf7f, 0xb119, 0xa5c2, 0xdba4, 0x590e, 0x2768, 0xd7ed, 0xa98b, 0x2b21, 0x5547, 0x031a, 0x7d7c, 0xffd6, 0x81b0, 0x7135, 0x0f53, 0x8df9, 0xf39f, 0xe744, 0x9922, 0x1b88, 0x65ee, 0x956b, 0xeb0d, 0x69a7, 0x17c1, 0x4011, 0x3e77, 0xbcdd, 0xc2bb, 0x323e, 0x4c58, 0xcef2, 0xb094, 0xa44f, 0xda29, 0x5883, 0x26e5, 0xd660, 0xa806, 0x2aac, 0x54ca, 0x850c, 0xfb6a, 0x79c0, 0x07a6, 0xf723, 0x8945, 0x0bef, 0x7589, 0x6152, 0x1f34, 0x9d9e, 0xe3f8, 0x137d, 0x6d1b, 0xefb1, 0x91d7, 0xc607, 0xb861, 0x3acb, 0x44ad, 0xb428, 0xca4e, 0x48e4, 0x3682, 0x2259, 0x5c3f, 0xde95, 0xa0f3, 0x5076, 0x2e10, 0xacba, 0xd2dc, ], [ 0x0000, 0x82b5, 0x8edd, 0x0c68, 0x960d, 0x14b8, 0x18d0, 0x9a65, 0xa7ad, 0x2518, 0x2970, 0xabc5, 0x31a0, 0xb315, 0xbf7d, 0x3dc8, 0xc4ed, 0x4658, 0x4a30, 0xc885, 0x52e0, 0xd055, 0xdc3d, 0x5e88, 0x6340, 0xe1f5, 0xed9d, 0x6f28, 0xf54d, 0x77f8, 0x7b90, 0xf925, 0x026d, 0x80d8, 0x8cb0, 0x0e05, 0x9460, 0x16d5, 0x1abd, 0x9808, 0xa5c0, 0x2775, 0x2b1d, 0xa9a8, 0x33cd, 0xb178, 0xbd10, 0x3fa5, 0xc680, 0x4435, 0x485d, 0xcae8, 0x508d, 0xd238, 0xde50, 0x5ce5, 0x612d, 0xe398, 0xeff0, 0x6d45, 0xf720, 0x7595, 0x79fd, 0xfb48, 0x04da, 0x866f, 0x8a07, 0x08b2, 0x92d7, 0x1062, 0x1c0a, 0x9ebf, 0xa377, 0x21c2, 0x2daa, 0xaf1f, 0x357a, 0xb7cf, 0xbba7, 0x3912, 0xc037, 0x4282, 0x4eea, 0xcc5f, 0x563a, 0xd48f, 0xd8e7, 0x5a52, 0x679a, 0xe52f, 0xe947, 0x6bf2, 0xf197, 0x7322, 0x7f4a, 0xfdff, 0x06b7, 0x8402, 0x886a, 0x0adf, 0x90ba, 0x120f, 0x1e67, 0x9cd2, 0xa11a, 0x23af, 0x2fc7, 0xad72, 0x3717, 0xb5a2, 0xb9ca, 0x3b7f, 0xc25a, 0x40ef, 0x4c87, 0xce32, 0x5457, 0xd6e2, 0xda8a, 0x583f, 0x65f7, 0xe742, 0xeb2a, 0x699f, 0xf3fa, 0x714f, 0x7d27, 0xff92, 0x09b4, 0x8b01, 0x8769, 0x05dc, 0x9fb9, 0x1d0c, 0x1164, 0x93d1, 0xae19, 0x2cac, 0x20c4, 0xa271, 0x3814, 0xbaa1, 0xb6c9, 0x347c, 0xcd59, 0x4fec, 0x4384, 0xc131, 0x5b54, 0xd9e1, 0xd589, 0x573c, 0x6af4, 0xe841, 0xe429, 0x669c, 0xfcf9, 0x7e4c, 0x7224, 0xf091, 0x0bd9, 0x896c, 0x8504, 0x07b1, 0x9dd4, 0x1f61, 0x1309, 0x91bc, 0xac74, 0x2ec1, 0x22a9, 0xa01c, 0x3a79, 0xb8cc, 0xb4a4, 0x3611, 0xcf34, 0x4d81, 0x41e9, 0xc35c, 0x5939, 0xdb8c, 0xd7e4, 0x5551, 0x6899, 0xea2c, 0xe644, 0x64f1, 0xfe94, 0x7c21, 0x7049, 0xf2fc, 0x0d6e, 0x8fdb, 0x83b3, 0x0106, 0x9b63, 0x19d6, 0x15be, 0x970b, 0xaac3, 0x2876, 0x241e, 0xa6ab, 0x3cce, 0xbe7b, 0xb213, 0x30a6, 0xc983, 0x4b36, 0x475e, 0xc5eb, 0x5f8e, 0xdd3b, 0xd153, 0x53e6, 0x6e2e, 0xec9b, 0xe0f3, 0x6246, 0xf823, 0x7a96, 0x76fe, 0xf44b, 0x0f03, 0x8db6, 0x81de, 0x036b, 0x990e, 0x1bbb, 0x17d3, 0x9566, 0xa8ae, 0x2a1b, 0x2673, 0xa4c6, 0x3ea3, 0xbc16, 0xb07e, 0x32cb, 0xcbee, 0x495b, 0x4533, 0xc786, 0x5de3, 0xdf56, 0xd33e, 0x518b, 0x6c43, 0xeef6, 0xe29e, 0x602b, 0xfa4e, 0x78fb, 0x7493, 0xf626, ], [ 0x0000, 0x1368, 0x26d0, 0x35b8, 0x4da0, 0x5ec8, 0x6b70, 0x7818, 0x9b40, 0x8828, 0xbd90, 0xaef8, 0xd6e0, 0xc588, 0xf030, 0xe358, 0xbd37, 0xae5f, 0x9be7, 0x888f, 0xf097, 0xe3ff, 0xd647, 0xc52f, 0x2677, 0x351f, 0x00a7, 0x13cf, 0x6bd7, 0x78bf, 0x4d07, 0x5e6f, 0xf1d9, 0xe2b1, 0xd709, 0xc461, 0xbc79, 0xaf11, 0x9aa9, 0x89c1, 0x6a99, 0x79f1, 0x4c49, 0x5f21, 0x2739, 0x3451, 0x01e9, 0x1281, 0x4cee, 0x5f86, 0x6a3e, 0x7956, 0x014e, 0x1226, 0x279e, 0x34f6, 0xd7ae, 0xc4c6, 0xf17e, 0xe216, 0x9a0e, 0x8966, 0xbcde, 0xafb6, 0x6805, 0x7b6d, 0x4ed5, 0x5dbd, 0x25a5, 0x36cd, 0x0375, 0x101d, 0xf345, 0xe02d, 0xd595, 0xc6fd, 0xbee5, 0xad8d, 0x9835, 0x8b5d, 0xd532, 0xc65a, 0xf3e2, 0xe08a, 0x9892, 0x8bfa, 0xbe42, 0xad2a, 0x4e72, 0x5d1a, 0x68a2, 0x7bca, 0x03d2, 0x10ba, 0x2502, 0x366a, 0x99dc, 0x8ab4, 0xbf0c, 0xac64, 0xd47c, 0xc714, 0xf2ac, 0xe1c4, 0x029c, 0x11f4, 0x244c, 0x3724, 0x4f3c, 0x5c54, 0x69ec, 0x7a84, 0x24eb, 0x3783, 0x023b, 0x1153, 0x694b, 0x7a23, 0x4f9b, 0x5cf3, 0xbfab, 0xacc3, 0x997b, 0x8a13, 0xf20b, 0xe163, 0xd4db, 0xc7b3, 0xd00a, 0xc362, 0xf6da, 0xe5b2, 0x9daa, 0x8ec2, 0xbb7a, 0xa812, 0x4b4a, 0x5822, 0x6d9a, 0x7ef2, 0x06ea, 0x1582, 0x203a, 0x3352, 0x6d3d, 0x7e55, 0x4bed, 0x5885, 0x209d, 0x33f5, 0x064d, 0x1525, 0xf67d, 0xe515, 0xd0ad, 0xc3c5, 0xbbdd, 0xa8b5, 0x9d0d, 0x8e65, 0x21d3, 0x32bb, 0x0703, 0x146b, 0x6c73, 0x7f1b, 0x4aa3, 0x59cb, 0xba93, 0xa9fb, 0x9c43, 0x8f2b, 0xf733, 0xe45b, 0xd1e3, 0xc28b, 0x9ce4, 0x8f8c, 0xba34, 0xa95c, 0xd144, 0xc22c, 0xf794, 0xe4fc, 0x07a4, 0x14cc, 0x2174, 0x321c, 0x4a04, 0x596c, 0x6cd4, 0x7fbc, 0xb80f, 0xab67, 0x9edf, 0x8db7, 0xf5af, 0xe6c7, 0xd37f, 0xc017, 0x234f, 0x3027, 0x059f, 0x16f7, 0x6eef, 0x7d87, 0x483f, 0x5b57, 0x0538, 0x1650, 0x23e8, 0x3080, 0x4898, 0x5bf0, 0x6e48, 0x7d20, 0x9e78, 0x8d10, 0xb8a8, 0xabc0, 0xd3d8, 0xc0b0, 0xf508, 0xe660, 0x49d6, 0x5abe, 0x6f06, 0x7c6e, 0x0476, 0x171e, 0x22a6, 0x31ce, 0xd296, 0xc1fe, 0xf446, 0xe72e, 0x9f36, 0x8c5e, 0xb9e6, 0xaa8e, 0xf4e1, 0xe789, 0xd231, 0xc159, 0xb941, 0xaa29, 0x9f91, 0x8cf9, 0x6fa1, 0x7cc9, 0x4971, 0x5a19, 0x2201, 0x3169, 0x04d1, 0x17b9, ], [ 0x0000, 0x2ba3, 0x5746, 0x7ce5, 0xae8c, 0x852f, 0xf9ca, 0xd269, 0xd6af, 0xfd0c, 0x81e9, 0xaa4a, 0x7823, 0x5380, 0x2f65, 0x04c6, 0x26e9, 0x0d4a, 0x71af, 0x5a0c, 0x8865, 0xa3c6, 0xdf23, 0xf480, 0xf046, 0xdbe5, 0xa700, 0x8ca3, 0x5eca, 0x7569, 0x098c, 0x222f, 0x4dd2, 0x6671, 0x1a94, 0x3137, 0xe35e, 0xc8fd, 0xb418, 0x9fbb, 0x9b7d, 0xb0de, 0xcc3b, 0xe798, 0x35f1, 0x1e52, 0x62b7, 0x4914, 0x6b3b, 0x4098, 0x3c7d, 0x17de, 0xc5b7, 0xee14, 0x92f1, 0xb952, 0xbd94, 0x9637, 0xead2, 0xc171, 0x1318, 0x38bb, 0x445e, 0x6ffd, 0x9ba4, 0xb007, 0xcce2, 0xe741, 0x3528, 0x1e8b, 0x626e, 0x49cd, 0x4d0b, 0x66a8, 0x1a4d, 0x31ee, 0xe387, 0xc824, 0xb4c1, 0x9f62, 0xbd4d, 0x96ee, 0xea0b, 0xc1a8, 0x13c1, 0x3862, 0x4487, 0x6f24, 0x6be2, 0x4041, 0x3ca4, 0x1707, 0xc56e, 0xeecd, 0x9228, 0xb98b, 0xd676, 0xfdd5, 0x8130, 0xaa93, 0x78fa, 0x5359, 0x2fbc, 0x041f, 0x00d9, 0x2b7a, 0x579f, 0x7c3c, 0xae55, 0x85f6, 0xf913, 0xd2b0, 0xf09f, 0xdb3c, 0xa7d9, 0x8c7a, 0x5e13, 0x75b0, 0x0955, 0x22f6, 0x2630, 0x0d93, 0x7176, 0x5ad5, 0x88bc, 0xa31f, 0xdffa, 0xf459, 0xbcff, 0x975c, 0xebb9, 0xc01a, 0x1273, 0x39d0, 0x4535, 0x6e96, 0x6a50, 0x41f3, 0x3d16, 0x16b5, 0xc4dc, 0xef7f, 0x939a, 0xb839, 0x9a16, 0xb1b5, 0xcd50, 0xe6f3, 0x349a, 0x1f39, 0x63dc, 0x487f, 0x4cb9, 0x671a, 0x1bff, 0x305c, 0xe235, 0xc996, 0xb573, 0x9ed0, 0xf12d, 0xda8e, 0xa66b, 0x8dc8, 0x5fa1, 0x7402, 0x08e7, 0x2344, 0x2782, 0x0c21, 0x70c4, 0x5b67, 0x890e, 0xa2ad, 0xde48, 0xf5eb, 0xd7c4, 0xfc67, 0x8082, 0xab21, 0x7948, 0x52eb, 0x2e0e, 0x05ad, 0x016b, 0x2ac8, 0x562d, 0x7d8e, 0xafe7, 0x8444, 0xf8a1, 0xd302, 0x275b, 0x0cf8, 0x701d, 0x5bbe, 0x89d7, 0xa274, 0xde91, 0xf532, 0xf1f4, 0xda57, 0xa6b2, 0x8d11, 0x5f78, 0x74db, 0x083e, 0x239d, 0x01b2, 0x2a11, 0x56f4, 0x7d57, 0xaf3e, 0x849d, 0xf878, 0xd3db, 0xd71d, 0xfcbe, 0x805b, 0xabf8, 0x7991, 0x5232, 0x2ed7, 0x0574, 0x6a89, 0x412a, 0x3dcf, 0x166c, 0xc405, 0xefa6, 0x9343, 0xb8e0, 0xbc26, 0x9785, 0xeb60, 0xc0c3, 0x12aa, 0x3909, 0x45ec, 0x6e4f, 0x4c60, 0x67c3, 0x1b26, 0x3085, 0xe2ec, 0xc94f, 0xb5aa, 0x9e09, 0x9acf, 0xb16c, 0xcd89, 0xe62a, 0x3443, 0x1fe0, 0x6305, 0x48a6, ], [ 0x0000, 0xf249, 0x6f25, 0x9d6c, 0xde4a, 0x2c03, 0xb16f, 0x4326, 0x3723, 0xc56a, 0x5806, 0xaa4f, 0xe969, 0x1b20, 0x864c, 0x7405, 0x6e46, 0x9c0f, 0x0163, 0xf32a, 0xb00c, 0x4245, 0xdf29, 0x2d60, 0x5965, 0xab2c, 0x3640, 0xc409, 0x872f, 0x7566, 0xe80a, 0x1a43, 0xdc8c, 0x2ec5, 0xb3a9, 0x41e0, 0x02c6, 0xf08f, 0x6de3, 0x9faa, 0xebaf, 0x19e6, 0x848a, 0x76c3, 0x35e5, 0xc7ac, 0x5ac0, 0xa889, 0xb2ca, 0x4083, 0xddef, 0x2fa6, 0x6c80, 0x9ec9, 0x03a5, 0xf1ec, 0x85e9, 0x77a0, 0xeacc, 0x1885, 0x5ba3, 0xa9ea, 0x3486, 0xc6cf, 0x32af, 0xc0e6, 0x5d8a, 0xafc3, 0xece5, 0x1eac, 0x83c0, 0x7189, 0x058c, 0xf7c5, 0x6aa9, 0x98e0, 0xdbc6, 0x298f, 0xb4e3, 0x46aa, 0x5ce9, 0xaea0, 0x33cc, 0xc185, 0x82a3, 0x70ea, 0xed86, 0x1fcf, 0x6bca, 0x9983, 0x04ef, 0xf6a6, 0xb580, 0x47c9, 0xdaa5, 0x28ec, 0xee23, 0x1c6a, 0x8106, 0x734f, 0x3069, 0xc220, 0x5f4c, 0xad05, 0xd900, 0x2b49, 0xb625, 0x446c, 0x074a, 0xf503, 0x686f, 0x9a26, 0x8065, 0x722c, 0xef40, 0x1d09, 0x5e2f, 0xac66, 0x310a, 0xc343, 0xb746, 0x450f, 0xd863, 0x2a2a, 0x690c, 0x9b45, 0x0629, 0xf460, 0x655e, 0x9717, 0x0a7b, 0xf832, 0xbb14, 0x495d, 0xd431, 0x2678, 0x527d, 0xa034, 0x3d58, 0xcf11, 0x8c37, 0x7e7e, 0xe312, 0x115b, 0x0b18, 0xf951, 0x643d, 0x9674, 0xd552, 0x271b, 0xba77, 0x483e, 0x3c3b, 0xce72, 0x531e, 0xa157, 0xe271, 0x1038, 0x8d54, 0x7f1d, 0xb9d2, 0x4b9b, 0xd6f7, 0x24be, 0x6798, 0x95d1, 0x08bd, 0xfaf4, 0x8ef1, 0x7cb8, 0xe1d4, 0x139d, 0x50bb, 0xa2f2, 0x3f9e, 0xcdd7, 0xd794, 0x25dd, 0xb8b1, 0x4af8, 0x09de, 0xfb97, 0x66fb, 0x94b2, 0xe0b7, 0x12fe, 0x8f92, 0x7ddb, 0x3efd, 0xccb4, 0x51d8, 0xa391, 0x57f1, 0xa5b8, 0x38d4, 0xca9d, 0x89bb, 0x7bf2, 0xe69e, 0x14d7, 0x60d2, 0x929b, 0x0ff7, 0xfdbe, 0xbe98, 0x4cd1, 0xd1bd, 0x23f4, 0x39b7, 0xcbfe, 0x5692, 0xa4db, 0xe7fd, 0x15b4, 0x88d8, 0x7a91, 0x0e94, 0xfcdd, 0x61b1, 0x93f8, 0xd0de, 0x2297, 0xbffb, 0x4db2, 0x8b7d, 0x7934, 0xe458, 0x1611, 0x5537, 0xa77e, 0x3a12, 0xc85b, 0xbc5e, 0x4e17, 0xd37b, 0x2132, 0x6214, 0x905d, 0x0d31, 0xff78, 0xe53b, 0x1772, 0x8a1e, 0x7857, 0x3b71, 0xc938, 0x5454, 0xa61d, 0xd218, 0x2051, 0xbd3d, 0x4f74, 0x0c52, 0xfe1b, 0x6377, 0x913e, ], [ 0x0000, 0xcabc, 0x1ecf, 0xd473, 0x3d9e, 0xf722, 0x2351, 0xe9ed, 0x7b3c, 0xb180, 0x65f3, 0xaf4f, 0x46a2, 0x8c1e, 0x586d, 0x92d1, 0xf678, 0x3cc4, 0xe8b7, 0x220b, 0xcbe6, 0x015a, 0xd529, 0x1f95, 0x8d44, 0x47f8, 0x938b, 0x5937, 0xb0da, 0x7a66, 0xae15, 0x64a9, 0x6747, 0xadfb, 0x7988, 0xb334, 0x5ad9, 0x9065, 0x4416, 0x8eaa, 0x1c7b, 0xd6c7, 0x02b4, 0xc808, 0x21e5, 0xeb59, 0x3f2a, 0xf596, 0x913f, 0x5b83, 0x8ff0, 0x454c, 0xaca1, 0x661d, 0xb26e, 0x78d2, 0xea03, 0x20bf, 0xf4cc, 0x3e70, 0xd79d, 0x1d21, 0xc952, 0x03ee, 0xce8e, 0x0432, 0xd041, 0x1afd, 0xf310, 0x39ac, 0xeddf, 0x2763, 0xb5b2, 0x7f0e, 0xab7d, 0x61c1, 0x882c, 0x4290, 0x96e3, 0x5c5f, 0x38f6, 0xf24a, 0x2639, 0xec85, 0x0568, 0xcfd4, 0x1ba7, 0xd11b, 0x43ca, 0x8976, 0x5d05, 0x97b9, 0x7e54, 0xb4e8, 0x609b, 0xaa27, 0xa9c9, 0x6375, 0xb706, 0x7dba, 0x9457, 0x5eeb, 0x8a98, 0x4024, 0xd2f5, 0x1849, 0xcc3a, 0x0686, 0xef6b, 0x25d7, 0xf1a4, 0x3b18, 0x5fb1, 0x950d, 0x417e, 0x8bc2, 0x622f, 0xa893, 0x7ce0, 0xb65c, 0x248d, 0xee31, 0x3a42, 0xf0fe, 0x1913, 0xd3af, 0x07dc, 0xcd60, 0x16ab, 0xdc17, 0x0864, 0xc2d8, 0x2b35, 0xe189, 0x35fa, 0xff46, 0x6d97, 0xa72b, 0x7358, 0xb9e4, 0x5009, 0x9ab5, 0x4ec6, 0x847a, 0xe0d3, 0x2a6f, 0xfe1c, 0x34a0, 0xdd4d, 0x17f1, 0xc382, 0x093e, 0x9bef, 0x5153, 0x8520, 0x4f9c, 0xa671, 0x6ccd, 0xb8be, 0x7202, 0x71ec, 0xbb50, 0x6f23, 0xa59f, 0x4c72, 0x86ce, 0x52bd, 0x9801, 0x0ad0, 0xc06c, 0x141f, 0xdea3, 0x374e, 0xfdf2, 0x2981, 0xe33d, 0x8794, 0x4d28, 0x995b, 0x53e7, 0xba0a, 0x70b6, 0xa4c5, 0x6e79, 0xfca8, 0x3614, 0xe267, 0x28db, 0xc136, 0x0b8a, 0xdff9, 0x1545, 0xd825, 0x1299, 0xc6ea, 0x0c56, 0xe5bb, 0x2f07, 0xfb74, 0x31c8, 0xa319, 0x69a5, 0xbdd6, 0x776a, 0x9e87, 0x543b, 0x8048, 0x4af4, 0x2e5d, 0xe4e1, 0x3092, 0xfa2e, 0x13c3, 0xd97f, 0x0d0c, 0xc7b0, 0x5561, 0x9fdd, 0x4bae, 0x8112, 0x68ff, 0xa243, 0x7630, 0xbc8c, 0xbf62, 0x75de, 0xa1ad, 0x6b11, 0x82fc, 0x4840, 0x9c33, 0x568f, 0xc45e, 0x0ee2, 0xda91, 0x102d, 0xf9c0, 0x337c, 0xe70f, 0x2db3, 0x491a, 0x83a6, 0x57d5, 0x9d69, 0x7484, 0xbe38, 0x6a4b, 0xa0f7, 0x3226, 0xf89a, 0x2ce9, 0xe655, 0x0fb8, 0xc504, 0x1177, 0xdbcb, ], [ 0x0000, 0x2d56, 0x5aac, 0x77fa, 0xb558, 0x980e, 0xeff4, 0xc2a2, 0xe107, 0xcc51, 0xbbab, 0x96fd, 0x545f, 0x7909, 0x0ef3, 0x23a5, 0x49b9, 0x64ef, 0x1315, 0x3e43, 0xfce1, 0xd1b7, 0xa64d, 0x8b1b, 0xa8be, 0x85e8, 0xf212, 0xdf44, 0x1de6, 0x30b0, 0x474a, 0x6a1c, 0x9372, 0xbe24, 0xc9de, 0xe488, 0x262a, 0x0b7c, 0x7c86, 0x51d0, 0x7275, 0x5f23, 0x28d9, 0x058f, 0xc72d, 0xea7b, 0x9d81, 0xb0d7, 0xdacb, 0xf79d, 0x8067, 0xad31, 0x6f93, 0x42c5, 0x353f, 0x1869, 0x3bcc, 0x169a, 0x6160, 0x4c36, 0x8e94, 0xa3c2, 0xd438, 0xf96e, 0xad53, 0x8005, 0xf7ff, 0xdaa9, 0x180b, 0x355d, 0x42a7, 0x6ff1, 0x4c54, 0x6102, 0x16f8, 0x3bae, 0xf90c, 0xd45a, 0xa3a0, 0x8ef6, 0xe4ea, 0xc9bc, 0xbe46, 0x9310, 0x51b2, 0x7ce4, 0x0b1e, 0x2648, 0x05ed, 0x28bb, 0x5f41, 0x7217, 0xb0b5, 0x9de3, 0xea19, 0xc74f, 0x3e21, 0x1377, 0x648d, 0x49db, 0x8b79, 0xa62f, 0xd1d5, 0xfc83, 0xdf26, 0xf270, 0x858a, 0xa8dc, 0x6a7e, 0x4728, 0x30d2, 0x1d84, 0x7798, 0x5ace, 0x2d34, 0x0062, 0xc2c0, 0xef96, 0x986c, 0xb53a, 0x969f, 0xbbc9, 0xcc33, 0xe165, 0x23c7, 0x0e91, 0x796b, 0x543d, 0xd111, 0xfc47, 0x8bbd, 0xa6eb, 0x6449, 0x491f, 0x3ee5, 0x13b3, 0x3016, 0x1d40, 0x6aba, 0x47ec, 0x854e, 0xa818, 0xdfe2, 0xf2b4, 0x98a8, 0xb5fe, 0xc204, 0xef52, 0x2df0, 0x00a6, 0x775c, 0x5a0a, 0x79af, 0x54f9, 0x2303, 0x0e55, 0xccf7, 0xe1a1, 0x965b, 0xbb0d, 0x4263, 0x6f35, 0x18cf, 0x3599, 0xf73b, 0xda6d, 0xad97, 0x80c1, 0xa364, 0x8e32, 0xf9c8, 0xd49e, 0x163c, 0x3b6a, 0x4c90, 0x61c6, 0x0bda, 0x268c, 0x5176, 0x7c20, 0xbe82, 0x93d4, 0xe42e, 0xc978, 0xeadd, 0xc78b, 0xb071, 0x9d27, 0x5f85, 0x72d3, 0x0529, 0x287f, 0x7c42, 0x5114, 0x26ee, 0x0bb8, 0xc91a, 0xe44c, 0x93b6, 0xbee0, 0x9d45, 0xb013, 0xc7e9, 0xeabf, 0x281d, 0x054b, 0x72b1, 0x5fe7, 0x35fb, 0x18ad, 0x6f57, 0x4201, 0x80a3, 0xadf5, 0xda0f, 0xf759, 0xd4fc, 0xf9aa, 0x8e50, 0xa306, 0x61a4, 0x4cf2, 0x3b08, 0x165e, 0xef30, 0xc266, 0xb59c, 0x98ca, 0x5a68, 0x773e, 0x00c4, 0x2d92, 0x0e37, 0x2361, 0x549b, 0x79cd, 0xbb6f, 0x9639, 0xe1c3, 0xcc95, 0xa689, 0x8bdf, 0xfc25, 0xd173, 0x13d1, 0x3e87, 0x497d, 0x642b, 0x478e, 0x6ad8, 0x1d22, 0x3074, 0xf2d6, 0xdf80, 0xa87a, 0x852c, ], [ 0x0000, 0x2995, 0x532a, 0x7abf, 0xa654, 0x8fc1, 0xf57e, 0xdceb, 0xc71f, 0xee8a, 0x9435, 0xbda0, 0x614b, 0x48de, 0x3261, 0x1bf4, 0x0589, 0x2c1c, 0x56a3, 0x7f36, 0xa3dd, 0x8a48, 0xf0f7, 0xd962, 0xc296, 0xeb03, 0x91bc, 0xb829, 0x64c2, 0x4d57, 0x37e8, 0x1e7d, 0x0b12, 0x2287, 0x5838, 0x71ad, 0xad46, 0x84d3, 0xfe6c, 0xd7f9, 0xcc0d, 0xe598, 0x9f27, 0xb6b2, 0x6a59, 0x43cc, 0x3973, 0x10e6, 0x0e9b, 0x270e, 0x5db1, 0x7424, 0xa8cf, 0x815a, 0xfbe5, 0xd270, 0xc984, 0xe011, 0x9aae, 0xb33b, 0x6fd0, 0x4645, 0x3cfa, 0x156f, 0x1624, 0x3fb1, 0x450e, 0x6c9b, 0xb070, 0x99e5, 0xe35a, 0xcacf, 0xd13b, 0xf8ae, 0x8211, 0xab84, 0x776f, 0x5efa, 0x2445, 0x0dd0, 0x13ad, 0x3a38, 0x4087, 0x6912, 0xb5f9, 0x9c6c, 0xe6d3, 0xcf46, 0xd4b2, 0xfd27, 0x8798, 0xae0d, 0x72e6, 0x5b73, 0x21cc, 0x0859, 0x1d36, 0x34a3, 0x4e1c, 0x6789, 0xbb62, 0x92f7, 0xe848, 0xc1dd, 0xda29, 0xf3bc, 0x8903, 0xa096, 0x7c7d, 0x55e8, 0x2f57, 0x06c2, 0x18bf, 0x312a, 0x4b95, 0x6200, 0xbeeb, 0x977e, 0xedc1, 0xc454, 0xdfa0, 0xf635, 0x8c8a, 0xa51f, 0x79f4, 0x5061, 0x2ade, 0x034b, 0x2c48, 0x05dd, 0x7f62, 0x56f7, 0x8a1c, 0xa389, 0xd936, 0xf0a3, 0xeb57, 0xc2c2, 0xb87d, 0x91e8, 0x4d03, 0x6496, 0x1e29, 0x37bc, 0x29c1, 0x0054, 0x7aeb, 0x537e, 0x8f95, 0xa600, 0xdcbf, 0xf52a, 0xeede, 0xc74b, 0xbdf4, 0x9461, 0x488a, 0x611f, 0x1ba0, 0x3235, 0x275a, 0x0ecf, 0x7470, 0x5de5, 0x810e, 0xa89b, 0xd224, 0xfbb1, 0xe045, 0xc9d0, 0xb36f, 0x9afa, 0x4611, 0x6f84, 0x153b, 0x3cae, 0x22d3, 0x0b46, 0x71f9, 0x586c, 0x8487, 0xad12, 0xd7ad, 0xfe38, 0xe5cc, 0xcc59, 0xb6e6, 0x9f73, 0x4398, 0x6a0d, 0x10b2, 0x3927, 0x3a6c, 0x13f9, 0x6946, 0x40d3, 0x9c38, 0xb5ad, 0xcf12, 0xe687, 0xfd73, 0xd4e6, 0xae59, 0x87cc, 0x5b27, 0x72b2, 0x080d, 0x2198, 0x3fe5, 0x1670, 0x6ccf, 0x455a, 0x99b1, 0xb024, 0xca9b, 0xe30e, 0xf8fa, 0xd16f, 0xabd0, 0x8245, 0x5eae, 0x773b, 0x0d84, 0x2411, 0x317e, 0x18eb, 0x6254, 0x4bc1, 0x972a, 0xbebf, 0xc400, 0xed95, 0xf661, 0xdff4, 0xa54b, 0x8cde, 0x5035, 0x79a0, 0x031f, 0x2a8a, 0x34f7, 0x1d62, 0x67dd, 0x4e48, 0x92a3, 0xbb36, 0xc189, 0xe81c, 0xf3e8, 0xda7d, 0xa0c2, 0x8957, 0x55bc, 0x7c29, 0x0696, 0x2f03, ], [ 0x0000, 0x5890, 0xb120, 0xe9b0, 0xe9f7, 0xb167, 0x58d7, 0x0047, 0x5859, 0x00c9, 0xe979, 0xb1e9, 0xb1ae, 0xe93e, 0x008e, 0x581e, 0xb0b2, 0xe822, 0x0192, 0x5902, 0x5945, 0x01d5, 0xe865, 0xb0f5, 0xe8eb, 0xb07b, 0x59cb, 0x015b, 0x011c, 0x598c, 0xb03c, 0xe8ac, 0xead3, 0xb243, 0x5bf3, 0x0363, 0x0324, 0x5bb4, 0xb204, 0xea94, 0xb28a, 0xea1a, 0x03aa, 0x5b3a, 0x5b7d, 0x03ed, 0xea5d, 0xb2cd, 0x5a61, 0x02f1, 0xeb41, 0xb3d1, 0xb396, 0xeb06, 0x02b6, 0x5a26, 0x0238, 0x5aa8, 0xb318, 0xeb88, 0xebcf, 0xb35f, 0x5aef, 0x027f, 0x5e11, 0x0681, 0xef31, 0xb7a1, 0xb7e6, 0xef76, 0x06c6, 0x5e56, 0x0648, 0x5ed8, 0xb768, 0xeff8, 0xefbf, 0xb72f, 0x5e9f, 0x060f, 0xeea3, 0xb633, 0x5f83, 0x0713, 0x0754, 0x5fc4, 0xb674, 0xeee4, 0xb6fa, 0xee6a, 0x07da, 0x5f4a, 0x5f0d, 0x079d, 0xee2d, 0xb6bd, 0xb4c2, 0xec52, 0x05e2, 0x5d72, 0x5d35, 0x05a5, 0xec15, 0xb485, 0xec9b, 0xb40b, 0x5dbb, 0x052b, 0x056c, 0x5dfc, 0xb44c, 0xecdc, 0x0470, 0x5ce0, 0xb550, 0xedc0, 0xed87, 0xb517, 0x5ca7, 0x0437, 0x5c29, 0x04b9, 0xed09, 0xb599, 0xb5de, 0xed4e, 0x04fe, 0x5c6e, 0xbc22, 0xe4b2, 0x0d02, 0x5592, 0x55d5, 0x0d45, 0xe4f5, 0xbc65, 0xe47b, 0xbceb, 0x555b, 0x0dcb, 0x0d8c, 0x551c, 0xbcac, 0xe43c, 0x0c90, 0x5400, 0xbdb0, 0xe520, 0xe567, 0xbdf7, 0x5447, 0x0cd7, 0x54c9, 0x0c59, 0xe5e9, 0xbd79, 0xbd3e, 0xe5ae, 0x0c1e, 0x548e, 0x56f1, 0x0e61, 0xe7d1, 0xbf41, 0xbf06, 0xe796, 0x0e26, 0x56b6, 0x0ea8, 0x5638, 0xbf88, 0xe718, 0xe75f, 0xbfcf, 0x567f, 0x0eef, 0xe643, 0xbed3, 0x5763, 0x0ff3, 0x0fb4, 0x5724, 0xbe94, 0xe604, 0xbe1a, 0xe68a, 0x0f3a, 0x57aa, 0x57ed, 0x0f7d, 0xe6cd, 0xbe5d, 0xe233, 0xbaa3, 0x5313, 0x0b83, 0x0bc4, 0x5354, 0xbae4, 0xe274, 0xba6a, 0xe2fa, 0x0b4a, 0x53da, 0x539d, 0x0b0d, 0xe2bd, 0xba2d, 0x5281, 0x0a11, 0xe3a1, 0xbb31, 0xbb76, 0xe3e6, 0x0a56, 0x52c6, 0x0ad8, 0x5248, 0xbbf8, 0xe368, 0xe32f, 0xbbbf, 0x520f, 0x0a9f, 0x08e0, 0x5070, 0xb9c0, 0xe150, 0xe117, 0xb987, 0x5037, 0x08a7, 0x50b9, 0x0829, 0xe199, 0xb909, 0xb94e, 0xe1de, 0x086e, 0x50fe, 0xb852, 0xe0c2, 0x0972, 0x51e2, 0x51a5, 0x0935, 0xe085, 0xb815, 0xe00b, 0xb89b, 0x512b, 0x09bb, 0x09fc, 0x516c, 0xb8dc, 0xe04c, ], [ 0x0000, 0xf3f3, 0x6c51, 0x9fa2, 0xd8a2, 0x2b51, 0xb4f3, 0x4700, 0x3af3, 0xc900, 0x56a2, 0xa551, 0xe251, 0x11a2, 0x8e00, 0x7df3, 0x75e6, 0x8615, 0x19b7, 0xea44, 0xad44, 0x5eb7, 0xc115, 0x32e6, 0x4f15, 0xbce6, 0x2344, 0xd0b7, 0x97b7, 0x6444, 0xfbe6, 0x0815, 0xebcc, 0x183f, 0x879d, 0x746e, 0x336e, 0xc09d, 0x5f3f, 0xaccc, 0xd13f, 0x22cc, 0xbd6e, 0x4e9d, 0x099d, 0xfa6e, 0x65cc, 0x963f, 0x9e2a, 0x6dd9, 0xf27b, 0x0188, 0x4688, 0xb57b, 0x2ad9, 0xd92a, 0xa4d9, 0x572a, 0xc888, 0x3b7b, 0x7c7b, 0x8f88, 0x102a, 0xe3d9, 0x5c2f, 0xafdc, 0x307e, 0xc38d, 0x848d, 0x777e, 0xe8dc, 0x1b2f, 0x66dc, 0x952f, 0x0a8d, 0xf97e, 0xbe7e, 0x4d8d, 0xd22f, 0x21dc, 0x29c9, 0xda3a, 0x4598, 0xb66b, 0xf16b, 0x0298, 0x9d3a, 0x6ec9, 0x133a, 0xe0c9, 0x7f6b, 0x8c98, 0xcb98, 0x386b, 0xa7c9, 0x543a, 0xb7e3, 0x4410, 0xdbb2, 0x2841, 0x6f41, 0x9cb2, 0x0310, 0xf0e3, 0x8d10, 0x7ee3, 0xe141, 0x12b2, 0x55b2, 0xa641, 0x39e3, 0xca10, 0xc205, 0x31f6, 0xae54, 0x5da7, 0x1aa7, 0xe954, 0x76f6, 0x8505, 0xf8f6, 0x0b05, 0x94a7, 0x6754, 0x2054, 0xd3a7, 0x4c05, 0xbff6, 0xb85e, 0x4bad, 0xd40f, 0x27fc, 0x60fc, 0x930f, 0x0cad, 0xff5e, 0x82ad, 0x715e, 0xeefc, 0x1d0f, 0x5a0f, 0xa9fc, 0x365e, 0xc5ad, 0xcdb8, 0x3e4b, 0xa1e9, 0x521a, 0x151a, 0xe6e9, 0x794b, 0x8ab8, 0xf74b, 0x04b8, 0x9b1a, 0x68e9, 0x2fe9, 0xdc1a, 0x43b8, 0xb04b, 0x5392, 0xa061, 0x3fc3, 0xcc30, 0x8b30, 0x78c3, 0xe761, 0x1492, 0x6961, 0x9a92, 0x0530, 0xf6c3, 0xb1c3, 0x4230, 0xdd92, 0x2e61, 0x2674, 0xd587, 0x4a25, 0xb9d6, 0xfed6, 0x0d25, 0x9287, 0x6174, 0x1c87, 0xef74, 0x70d6, 0x8325, 0xc425, 0x37d6, 0xa874, 0x5b87, 0xe471, 0x1782, 0x8820, 0x7bd3, 0x3cd3, 0xcf20, 0x5082, 0xa371, 0xde82, 0x2d71, 0xb2d3, 0x4120, 0x0620, 0xf5d3, 0x6a71, 0x9982, 0x9197, 0x6264, 0xfdc6, 0x0e35, 0x4935, 0xbac6, 0x2564, 0xd697, 0xab64, 0x5897, 0xc735, 0x34c6, 0x73c6, 0x8035, 0x1f97, 0xec64, 0x0fbd, 0xfc4e, 0x63ec, 0x901f, 0xd71f, 0x24ec, 0xbb4e, 0x48bd, 0x354e, 0xc6bd, 0x591f, 0xaaec, 0xedec, 0x1e1f, 0x81bd, 0x724e, 0x7a5b, 0x89a8, 0x160a, 0xe5f9, 0xa2f9, 0x510a, 0xcea8, 0x3d5b, 0x40a8, 0xb35b, 0x2cf9, 0xdf0a, 0x980a, 0x6bf9, 0xf45b, 0x07a8, ], [ 0x0000, 0xfb0b, 0x7da1, 0x86aa, 0xfb42, 0x0049, 0x86e3, 0x7de8, 0x7d33, 0x8638, 0x0092, 0xfb99, 0x8671, 0x7d7a, 0xfbd0, 0x00db, 0xfa66, 0x016d, 0x87c7, 0x7ccc, 0x0124, 0xfa2f, 0x7c85, 0x878e, 0x8755, 0x7c5e, 0xfaf4, 0x01ff, 0x7c17, 0x871c, 0x01b6, 0xfabd, 0x7f7b, 0x8470, 0x02da, 0xf9d1, 0x8439, 0x7f32, 0xf998, 0x0293, 0x0248, 0xf943, 0x7fe9, 0x84e2, 0xf90a, 0x0201, 0x84ab, 0x7fa0, 0x851d, 0x7e16, 0xf8bc, 0x03b7, 0x7e5f, 0x8554, 0x03fe, 0xf8f5, 0xf82e, 0x0325, 0x858f, 0x7e84, 0x036c, 0xf867, 0x7ecd, 0x85c6, 0xfef6, 0x05fd, 0x8357, 0x785c, 0x05b4, 0xfebf, 0x7815, 0x831e, 0x83c5, 0x78ce, 0xfe64, 0x056f, 0x7887, 0x838c, 0x0526, 0xfe2d, 0x0490, 0xff9b, 0x7931, 0x823a, 0xffd2, 0x04d9, 0x8273, 0x7978, 0x79a3, 0x82a8, 0x0402, 0xff09, 0x82e1, 0x79ea, 0xff40, 0x044b, 0x818d, 0x7a86, 0xfc2c, 0x0727, 0x7acf, 0x81c4, 0x076e, 0xfc65, 0xfcbe, 0x07b5, 0x811f, 0x7a14, 0x07fc, 0xfcf7, 0x7a5d, 0x8156, 0x7beb, 0x80e0, 0x064a, 0xfd41, 0x80a9, 0x7ba2, 0xfd08, 0x0603, 0x06d8, 0xfdd3, 0x7b79, 0x8072, 0xfd9a, 0x0691, 0x803b, 0x7b30, 0x765b, 0x8d50, 0x0bfa, 0xf0f1, 0x8d19, 0x7612, 0xf0b8, 0x0bb3, 0x0b68, 0xf063, 0x76c9, 0x8dc2, 0xf02a, 0x0b21, 0x8d8b, 0x7680, 0x8c3d, 0x7736, 0xf19c, 0x0a97, 0x777f, 0x8c74, 0x0ade, 0xf1d5, 0xf10e, 0x0a05, 0x8caf, 0x77a4, 0x0a4c, 0xf147, 0x77ed, 0x8ce6, 0x0920, 0xf22b, 0x7481, 0x8f8a, 0xf262, 0x0969, 0x8fc3, 0x74c8, 0x7413, 0x8f18, 0x09b2, 0xf2b9, 0x8f51, 0x745a, 0xf2f0, 0x09fb, 0xf346, 0x084d, 0x8ee7, 0x75ec, 0x0804, 0xf30f, 0x75a5, 0x8eae, 0x8e75, 0x757e, 0xf3d4, 0x08df, 0x7537, 0x8e3c, 0x0896, 0xf39d, 0x88ad, 0x73a6, 0xf50c, 0x0e07, 0x73ef, 0x88e4, 0x0e4e, 0xf545, 0xf59e, 0x0e95, 0x883f, 0x7334, 0x0edc, 0xf5d7, 0x737d, 0x8876, 0x72cb, 0x89c0, 0x0f6a, 0xf461, 0x8989, 0x7282, 0xf428, 0x0f23, 0x0ff8, 0xf4f3, 0x7259, 0x8952, 0xf4ba, 0x0fb1, 0x891b, 0x7210, 0xf7d6, 0x0cdd, 0x8a77, 0x717c, 0x0c94, 0xf79f, 0x7135, 0x8a3e, 0x8ae5, 0x71ee, 0xf744, 0x0c4f, 0x71a7, 0x8aac, 0x0c06, 0xf70d, 0x0db0, 0xf6bb, 0x7011, 0x8b1a, 0xf6f2, 0x0df9, 0x8b53, 0x7058, 0x7083, 0x8b88, 0x0d22, 0xf629, 0x8bc1, 0x70ca, 0xf660, 0x0d6b, ], [ 0x0000, 0xecb6, 0x52db, 0xbe6d, 0xa5b6, 0x4900, 0xf76d, 0x1bdb, 0xc0db, 0x2c6d, 0x9200, 0x7eb6, 0x656d, 0x89db, 0x37b6, 0xdb00, 0x0a01, 0xe6b7, 0x58da, 0xb46c, 0xafb7, 0x4301, 0xfd6c, 0x11da, 0xcada, 0x266c, 0x9801, 0x74b7, 0x6f6c, 0x83da, 0x3db7, 0xd101, 0x1402, 0xf8b4, 0x46d9, 0xaa6f, 0xb1b4, 0x5d02, 0xe36f, 0x0fd9, 0xd4d9, 0x386f, 0x8602, 0x6ab4, 0x716f, 0x9dd9, 0x23b4, 0xcf02, 0x1e03, 0xf2b5, 0x4cd8, 0xa06e, 0xbbb5, 0x5703, 0xe96e, 0x05d8, 0xded8, 0x326e, 0x8c03, 0x60b5, 0x7b6e, 0x97d8, 0x29b5, 0xc503, 0x2804, 0xc4b2, 0x7adf, 0x9669, 0x8db2, 0x6104, 0xdf69, 0x33df, 0xe8df, 0x0469, 0xba04, 0x56b2, 0x4d69, 0xa1df, 0x1fb2, 0xf304, 0x2205, 0xceb3, 0x70de, 0x9c68, 0x87b3, 0x6b05, 0xd568, 0x39de, 0xe2de, 0x0e68, 0xb005, 0x5cb3, 0x4768, 0xabde, 0x15b3, 0xf905, 0x3c06, 0xd0b0, 0x6edd, 0x826b, 0x99b0, 0x7506, 0xcb6b, 0x27dd, 0xfcdd, 0x106b, 0xae06, 0x42b0, 0x596b, 0xb5dd, 0x0bb0, 0xe706, 0x3607, 0xdab1, 0x64dc, 0x886a, 0x93b1, 0x7f07, 0xc16a, 0x2ddc, 0xf6dc, 0x1a6a, 0xa407, 0x48b1, 0x536a, 0xbfdc, 0x01b1, 0xed07, 0x5008, 0xbcbe, 0x02d3, 0xee65, 0xf5be, 0x1908, 0xa765, 0x4bd3, 0x90d3, 0x7c65, 0xc208, 0x2ebe, 0x3565, 0xd9d3, 0x67be, 0x8b08, 0x5a09, 0xb6bf, 0x08d2, 0xe464, 0xffbf, 0x1309, 0xad64, 0x41d2, 0x9ad2, 0x7664, 0xc809, 0x24bf, 0x3f64, 0xd3d2, 0x6dbf, 0x8109, 0x440a, 0xa8bc, 0x16d1, 0xfa67, 0xe1bc, 0x0d0a, 0xb367, 0x5fd1, 0x84d1, 0x6867, 0xd60a, 0x3abc, 0x2167, 0xcdd1, 0x73bc, 0x9f0a, 0x4e0b, 0xa2bd, 0x1cd0, 0xf066, 0xebbd, 0x070b, 0xb966, 0x55d0, 0x8ed0, 0x6266, 0xdc0b, 0x30bd, 0x2b66, 0xc7d0, 0x79bd, 0x950b, 0x780c, 0x94ba, 0x2ad7, 0xc661, 0xddba, 0x310c, 0x8f61, 0x63d7, 0xb8d7, 0x5461, 0xea0c, 0x06ba, 0x1d61, 0xf1d7, 0x4fba, 0xa30c, 0x720d, 0x9ebb, 0x20d6, 0xcc60, 0xd7bb, 0x3b0d, 0x8560, 0x69d6, 0xb2d6, 0x5e60, 0xe00d, 0x0cbb, 0x1760, 0xfbd6, 0x45bb, 0xa90d, 0x6c0e, 0x80b8, 0x3ed5, 0xd263, 0xc9b8, 0x250e, 0x9b63, 0x77d5, 0xacd5, 0x4063, 0xfe0e, 0x12b8, 0x0963, 0xe5d5, 0x5bb8, 0xb70e, 0x660f, 0x8ab9, 0x34d4, 0xd862, 0xc3b9, 0x2f0f, 0x9162, 0x7dd4, 0xa6d4, 0x4a62, 0xf40f, 0x18b9, 0x0362, 0xefd4, 0x51b9, 0xbd0f, ], [ 0x0000, 0xa010, 0xcb97, 0x6b87, 0x1c99, 0xbc89, 0xd70e, 0x771e, 0x3932, 0x9922, 0xf2a5, 0x52b5, 0x25ab, 0x85bb, 0xee3c, 0x4e2c, 0x7264, 0xd274, 0xb9f3, 0x19e3, 0x6efd, 0xceed, 0xa56a, 0x057a, 0x4b56, 0xeb46, 0x80c1, 0x20d1, 0x57cf, 0xf7df, 0x9c58, 0x3c48, 0xe4c8, 0x44d8, 0x2f5f, 0x8f4f, 0xf851, 0x5841, 0x33c6, 0x93d6, 0xddfa, 0x7dea, 0x166d, 0xb67d, 0xc163, 0x6173, 0x0af4, 0xaae4, 0x96ac, 0x36bc, 0x5d3b, 0xfd2b, 0x8a35, 0x2a25, 0x41a2, 0xe1b2, 0xaf9e, 0x0f8e, 0x6409, 0xc419, 0xb307, 0x1317, 0x7890, 0xd880, 0x4227, 0xe237, 0x89b0, 0x29a0, 0x5ebe, 0xfeae, 0x9529, 0x3539, 0x7b15, 0xdb05, 0xb082, 0x1092, 0x678c, 0xc79c, 0xac1b, 0x0c0b, 0x3043, 0x9053, 0xfbd4, 0x5bc4, 0x2cda, 0x8cca, 0xe74d, 0x475d, 0x0971, 0xa961, 0xc2e6, 0x62f6, 0x15e8, 0xb5f8, 0xde7f, 0x7e6f, 0xa6ef, 0x06ff, 0x6d78, 0xcd68, 0xba76, 0x1a66, 0x71e1, 0xd1f1, 0x9fdd, 0x3fcd, 0x544a, 0xf45a, 0x8344, 0x2354, 0x48d3, 0xe8c3, 0xd48b, 0x749b, 0x1f1c, 0xbf0c, 0xc812, 0x6802, 0x0385, 0xa395, 0xedb9, 0x4da9, 0x262e, 0x863e, 0xf120, 0x5130, 0x3ab7, 0x9aa7, 0x844e, 0x245e, 0x4fd9, 0xefc9, 0x98d7, 0x38c7, 0x5340, 0xf350, 0xbd7c, 0x1d6c, 0x76eb, 0xd6fb, 0xa1e5, 0x01f5, 0x6a72, 0xca62, 0xf62a, 0x563a, 0x3dbd, 0x9dad, 0xeab3, 0x4aa3, 0x2124, 0x8134, 0xcf18, 0x6f08, 0x048f, 0xa49f, 0xd381, 0x7391, 0x1816, 0xb806, 0x6086, 0xc096, 0xab11, 0x0b01, 0x7c1f, 0xdc0f, 0xb788, 0x1798, 0x59b4, 0xf9a4, 0x9223, 0x3233, 0x452d, 0xe53d, 0x8eba, 0x2eaa, 0x12e2, 0xb2f2, 0xd975, 0x7965, 0x0e7b, 0xae6b, 0xc5ec, 0x65fc, 0x2bd0, 0x8bc0, 0xe047, 0x4057, 0x3749, 0x9759, 0xfcde, 0x5cce, 0xc669, 0x6679, 0x0dfe, 0xadee, 0xdaf0, 0x7ae0, 0x1167, 0xb177, 0xff5b, 0x5f4b, 0x34cc, 0x94dc, 0xe3c2, 0x43d2, 0x2855, 0x8845, 0xb40d, 0x141d, 0x7f9a, 0xdf8a, 0xa894, 0x0884, 0x6303, 0xc313, 0x8d3f, 0x2d2f, 0x46a8, 0xe6b8, 0x91a6, 0x31b6, 0x5a31, 0xfa21, 0x22a1, 0x82b1, 0xe936, 0x4926, 0x3e38, 0x9e28, 0xf5af, 0x55bf, 0x1b93, 0xbb83, 0xd004, 0x7014, 0x070a, 0xa71a, 0xcc9d, 0x6c8d, 0x50c5, 0xf0d5, 0x9b52, 0x3b42, 0x4c5c, 0xec4c, 0x87cb, 0x27db, 0x69f7, 0xc9e7, 0xa260, 0x0270, 0x756e, 0xd57e, 0xbef9, 0x1ee9, ], [ 0x0000, 0x832b, 0x8de1, 0x0eca, 0x9075, 0x135e, 0x1d94, 0x9ebf, 0xab5d, 0x2876, 0x26bc, 0xa597, 0x3b28, 0xb803, 0xb6c9, 0x35e2, 0xdd0d, 0x5e26, 0x50ec, 0xd3c7, 0x4d78, 0xce53, 0xc099, 0x43b2, 0x7650, 0xf57b, 0xfbb1, 0x789a, 0xe625, 0x650e, 0x6bc4, 0xe8ef, 0x31ad, 0xb286, 0xbc4c, 0x3f67, 0xa1d8, 0x22f3, 0x2c39, 0xaf12, 0x9af0, 0x19db, 0x1711, 0x943a, 0x0a85, 0x89ae, 0x8764, 0x044f, 0xeca0, 0x6f8b, 0x6141, 0xe26a, 0x7cd5, 0xfffe, 0xf134, 0x721f, 0x47fd, 0xc4d6, 0xca1c, 0x4937, 0xd788, 0x54a3, 0x5a69, 0xd942, 0x635a, 0xe071, 0xeebb, 0x6d90, 0xf32f, 0x7004, 0x7ece, 0xfde5, 0xc807, 0x4b2c, 0x45e6, 0xc6cd, 0x5872, 0xdb59, 0xd593, 0x56b8, 0xbe57, 0x3d7c, 0x33b6, 0xb09d, 0x2e22, 0xad09, 0xa3c3, 0x20e8, 0x150a, 0x9621, 0x98eb, 0x1bc0, 0x857f, 0x0654, 0x089e, 0x8bb5, 0x52f7, 0xd1dc, 0xdf16, 0x5c3d, 0xc282, 0x41a9, 0x4f63, 0xcc48, 0xf9aa, 0x7a81, 0x744b, 0xf760, 0x69df, 0xeaf4, 0xe43e, 0x6715, 0x8ffa, 0x0cd1, 0x021b, 0x8130, 0x1f8f, 0x9ca4, 0x926e, 0x1145, 0x24a7, 0xa78c, 0xa946, 0x2a6d, 0xb4d2, 0x37f9, 0x3933, 0xba18, 0xc6b4, 0x459f, 0x4b55, 0xc87e, 0x56c1, 0xd5ea, 0xdb20, 0x580b, 0x6de9, 0xeec2, 0xe008, 0x6323, 0xfd9c, 0x7eb7, 0x707d, 0xf356, 0x1bb9, 0x9892, 0x9658, 0x1573, 0x8bcc, 0x08e7, 0x062d, 0x8506, 0xb0e4, 0x33cf, 0x3d05, 0xbe2e, 0x2091, 0xa3ba, 0xad70, 0x2e5b, 0xf719, 0x7432, 0x7af8, 0xf9d3, 0x676c, 0xe447, 0xea8d, 0x69a6, 0x5c44, 0xdf6f, 0xd1a5, 0x528e, 0xcc31, 0x4f1a, 0x41d0, 0xc2fb, 0x2a14, 0xa93f, 0xa7f5, 0x24de, 0xba61, 0x394a, 0x3780, 0xb4ab, 0x8149, 0x0262, 0x0ca8, 0x8f83, 0x113c, 0x9217, 0x9cdd, 0x1ff6, 0xa5ee, 0x26c5, 0x280f, 0xab24, 0x359b, 0xb6b0, 0xb87a, 0x3b51, 0x0eb3, 0x8d98, 0x8352, 0x0079, 0x9ec6, 0x1ded, 0x1327, 0x900c, 0x78e3, 0xfbc8, 0xf502, 0x7629, 0xe896, 0x6bbd, 0x6577, 0xe65c, 0xd3be, 0x5095, 0x5e5f, 0xdd74, 0x43cb, 0xc0e0, 0xce2a, 0x4d01, 0x9443, 0x1768, 0x19a2, 0x9a89, 0x0436, 0x871d, 0x89d7, 0x0afc, 0x3f1e, 0xbc35, 0xb2ff, 0x31d4, 0xaf6b, 0x2c40, 0x228a, 0xa1a1, 0x494e, 0xca65, 0xc4af, 0x4784, 0xd93b, 0x5a10, 0x54da, 0xd7f1, 0xe213, 0x6138, 0x6ff2, 0xecd9, 0x7266, 0xf14d, 0xff87, 0x7cac, ], ]; pub static CRC16_TELEDISK_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0xa097, 0xe1b9, 0x412e, 0x63e5, 0xc372, 0x825c, 0x22cb, 0xc7ca, 0x675d, 0x2673, 0x86e4, 0xa42f, 0x04b8, 0x4596, 0xe501, 0x2f03, 0x8f94, 0xceba, 0x6e2d, 0x4ce6, 0xec71, 0xad5f, 0x0dc8, 0xe8c9, 0x485e, 0x0970, 0xa9e7, 0x8b2c, 0x2bbb, 0x6a95, 0xca02, 0x5e06, 0xfe91, 0xbfbf, 0x1f28, 0x3de3, 0x9d74, 0xdc5a, 0x7ccd, 0x99cc, 0x395b, 0x7875, 0xd8e2, 0xfa29, 0x5abe, 0x1b90, 0xbb07, 0x7105, 0xd192, 0x90bc, 0x302b, 0x12e0, 0xb277, 0xf359, 0x53ce, 0xb6cf, 0x1658, 0x5776, 0xf7e1, 0xd52a, 0x75bd, 0x3493, 0x9404, 0xbc0c, 0x1c9b, 0x5db5, 0xfd22, 0xdfe9, 0x7f7e, 0x3e50, 0x9ec7, 0x7bc6, 0xdb51, 0x9a7f, 0x3ae8, 0x1823, 0xb8b4, 0xf99a, 0x590d, 0x930f, 0x3398, 0x72b6, 0xd221, 0xf0ea, 0x507d, 0x1153, 0xb1c4, 0x54c5, 0xf452, 0xb57c, 0x15eb, 0x3720, 0x97b7, 0xd699, 0x760e, 0xe20a, 0x429d, 0x03b3, 0xa324, 0x81ef, 0x2178, 0x6056, 0xc0c1, 0x25c0, 0x8557, 0xc479, 0x64ee, 0x4625, 0xe6b2, 0xa79c, 0x070b, 0xcd09, 0x6d9e, 0x2cb0, 0x8c27, 0xaeec, 0x0e7b, 0x4f55, 0xefc2, 0x0ac3, 0xaa54, 0xeb7a, 0x4bed, 0x6926, 0xc9b1, 0x889f, 0x2808, 0xd88f, 0x7818, 0x3936, 0x99a1, 0xbb6a, 0x1bfd, 0x5ad3, 0xfa44, 0x1f45, 0xbfd2, 0xfefc, 0x5e6b, 0x7ca0, 0xdc37, 0x9d19, 0x3d8e, 0xf78c, 0x571b, 0x1635, 0xb6a2, 0x9469, 0x34fe, 0x75d0, 0xd547, 0x3046, 0x90d1, 0xd1ff, 0x7168, 0x53a3, 0xf334, 0xb21a, 0x128d, 0x8689, 0x261e, 0x6730, 0xc7a7, 0xe56c, 0x45fb, 0x04d5, 0xa442, 0x4143, 0xe1d4, 0xa0fa, 0x006d, 0x22a6, 0x8231, 0xc31f, 0x6388, 0xa98a, 0x091d, 0x4833, 0xe8a4, 0xca6f, 0x6af8, 0x2bd6, 0x8b41, 0x6e40, 0xced7, 0x8ff9, 0x2f6e, 0x0da5, 0xad32, 0xec1c, 0x4c8b, 0x6483, 0xc414, 0x853a, 0x25ad, 0x0766, 0xa7f1, 0xe6df, 0x4648, 0xa349, 0x03de, 0x42f0, 0xe267, 0xc0ac, 0x603b, 0x2115, 0x8182, 0x4b80, 0xeb17, 0xaa39, 0x0aae, 0x2865, 0x88f2, 0xc9dc, 0x694b, 0x8c4a, 0x2cdd, 0x6df3, 0xcd64, 0xefaf, 0x4f38, 0x0e16, 0xae81, 0x3a85, 0x9a12, 0xdb3c, 0x7bab, 0x5960, 0xf9f7, 0xb8d9, 0x184e, 0xfd4f, 0x5dd8, 0x1cf6, 0xbc61, 0x9eaa, 0x3e3d, 0x7f13, 0xdf84, 0x1586, 0xb511, 0xf43f, 0x54a8, 0x7663, 0xd6f4, 0x97da, 0x374d, 0xd24c, 0x72db, 0x33f5, 0x9362, 0xb1a9, 0x113e, 0x5010, 0xf087, ], [ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0xb807, 0xa98e, 0x9b15, 0x8a9c, 0xfe23, 0xefaa, 0xdd31, 0xccb8, 0x344f, 0x25c6, 0x175d, 0x06d4, 0x726b, 0x63e2, 0x5179, 0x40f0, 0xd099, 0xc110, 0xf38b, 0xe202, 0x96bd, 0x8734, 0xb5af, 0xa426, 0x5cd1, 0x4d58, 0x7fc3, 0x6e4a, 0x1af5, 0x0b7c, 0x39e7, 0x286e, 0x689e, 0x7917, 0x4b8c, 0x5a05, 0x2eba, 0x3f33, 0x0da8, 0x1c21, 0xe4d6, 0xf55f, 0xc7c4, 0xd64d, 0xa2f2, 0xb37b, 0x81e0, 0x9069, 0x01a5, 0x102c, 0x22b7, 0x333e, 0x4781, 0x5608, 0x6493, 0x751a, 0x8ded, 0x9c64, 0xaeff, 0xbf76, 0xcbc9, 0xda40, 0xe8db, 0xf952, 0xb9a2, 0xa82b, 0x9ab0, 0x8b39, 0xff86, 0xee0f, 0xdc94, 0xcd1d, 0x35ea, 0x2463, 0x16f8, 0x0771, 0x73ce, 0x6247, 0x50dc, 0x4155, 0xd13c, 0xc0b5, 0xf22e, 0xe3a7, 0x9718, 0x8691, 0xb40a, 0xa583, 0x5d74, 0x4cfd, 0x7e66, 0x6fef, 0x1b50, 0x0ad9, 0x3842, 0x29cb, 0x693b, 0x78b2, 0x4a29, 0x5ba0, 0x2f1f, 0x3e96, 0x0c0d, 0x1d84, 0xe573, 0xf4fa, 0xc661, 0xd7e8, 0xa357, 0xb2de, 0x8045, 0x91cc, 0x034a, 0x12c3, 0x2058, 0x31d1, 0x456e, 0x54e7, 0x667c, 0x77f5, 0x8f02, 0x9e8b, 0xac10, 0xbd99, 0xc926, 0xd8af, 0xea34, 0xfbbd, 0xbb4d, 0xaac4, 0x985f, 0x89d6, 0xfd69, 0xece0, 0xde7b, 0xcff2, 0x3705, 0x268c, 0x1417, 0x059e, 0x7121, 0x60a8, 0x5233, 0x43ba, 0xd3d3, 0xc25a, 0xf0c1, 0xe148, 0x95f7, 0x847e, 0xb6e5, 0xa76c, 0x5f9b, 0x4e12, 0x7c89, 0x6d00, 0x19bf, 0x0836, 0x3aad, 0x2b24, 0x6bd4, 0x7a5d, 0x48c6, 0x594f, 0x2df0, 0x3c79, 0x0ee2, 0x1f6b, 0xe79c, 0xf615, 0xc48e, 0xd507, 0xa1b8, 0xb031, 0x82aa, 0x9323, 0x02ef, 0x1366, 0x21fd, 0x3074, 0x44cb, 0x5542, 0x67d9, 0x7650, 0x8ea7, 0x9f2e, 0xadb5, 0xbc3c, 0xc883, 0xd90a, 0xeb91, 0xfa18, 0xbae8, 0xab61, 0x99fa, 0x8873, 0xfccc, 0xed45, 0xdfde, 0xce57, 0x36a0, 0x2729, 0x15b2, 0x043b, 0x7084, 0x610d, 0x5396, 0x421f, 0xd276, 0xc3ff, 0xf164, 0xe0ed, 0x9452, 0x85db, 0xb740, 0xa6c9, 0x5e3e, 0x4fb7, 0x7d2c, 0x6ca5, 0x181a, 0x0993, 0x3b08, 0x2a81, 0x6a71, 0x7bf8, 0x4963, 0x58ea, 0x2c55, 0x3ddc, 0x0f47, 0x1ece, 0xe639, 0xf7b0, 0xc52b, 0xd4a2, 0xa01d, 0xb194, 0x830f, 0x9286, ], [ 0x0000, 0x0694, 0x0d28, 0x0bbc, 0x1a50, 0x1cc4, 0x1778, 0x11ec, 0x34a0, 0x3234, 0x3988, 0x3f1c, 0x2ef0, 0x2864, 0x23d8, 0x254c, 0x6940, 0x6fd4, 0x6468, 0x62fc, 0x7310, 0x7584, 0x7e38, 0x78ac, 0x5de0, 0x5b74, 0x50c8, 0x565c, 0x47b0, 0x4124, 0x4a98, 0x4c0c, 0xd280, 0xd414, 0xdfa8, 0xd93c, 0xc8d0, 0xce44, 0xc5f8, 0xc36c, 0xe620, 0xe0b4, 0xeb08, 0xed9c, 0xfc70, 0xfae4, 0xf158, 0xf7cc, 0xbbc0, 0xbd54, 0xb6e8, 0xb07c, 0xa190, 0xa704, 0xacb8, 0xaa2c, 0x8f60, 0x89f4, 0x8248, 0x84dc, 0x9530, 0x93a4, 0x9818, 0x9e8c, 0x0597, 0x0303, 0x08bf, 0x0e2b, 0x1fc7, 0x1953, 0x12ef, 0x147b, 0x3137, 0x37a3, 0x3c1f, 0x3a8b, 0x2b67, 0x2df3, 0x264f, 0x20db, 0x6cd7, 0x6a43, 0x61ff, 0x676b, 0x7687, 0x7013, 0x7baf, 0x7d3b, 0x5877, 0x5ee3, 0x555f, 0x53cb, 0x4227, 0x44b3, 0x4f0f, 0x499b, 0xd717, 0xd183, 0xda3f, 0xdcab, 0xcd47, 0xcbd3, 0xc06f, 0xc6fb, 0xe3b7, 0xe523, 0xee9f, 0xe80b, 0xf9e7, 0xff73, 0xf4cf, 0xf25b, 0xbe57, 0xb8c3, 0xb37f, 0xb5eb, 0xa407, 0xa293, 0xa92f, 0xafbb, 0x8af7, 0x8c63, 0x87df, 0x814b, 0x90a7, 0x9633, 0x9d8f, 0x9b1b, 0x0b2e, 0x0dba, 0x0606, 0x0092, 0x117e, 0x17ea, 0x1c56, 0x1ac2, 0x3f8e, 0x391a, 0x32a6, 0x3432, 0x25de, 0x234a, 0x28f6, 0x2e62, 0x626e, 0x64fa, 0x6f46, 0x69d2, 0x783e, 0x7eaa, 0x7516, 0x7382, 0x56ce, 0x505a, 0x5be6, 0x5d72, 0x4c9e, 0x4a0a, 0x41b6, 0x4722, 0xd9ae, 0xdf3a, 0xd486, 0xd212, 0xc3fe, 0xc56a, 0xced6, 0xc842, 0xed0e, 0xeb9a, 0xe026, 0xe6b2, 0xf75e, 0xf1ca, 0xfa76, 0xfce2, 0xb0ee, 0xb67a, 0xbdc6, 0xbb52, 0xaabe, 0xac2a, 0xa796, 0xa102, 0x844e, 0x82da, 0x8966, 0x8ff2, 0x9e1e, 0x988a, 0x9336, 0x95a2, 0x0eb9, 0x082d, 0x0391, 0x0505, 0x14e9, 0x127d, 0x19c1, 0x1f55, 0x3a19, 0x3c8d, 0x3731, 0x31a5, 0x2049, 0x26dd, 0x2d61, 0x2bf5, 0x67f9, 0x616d, 0x6ad1, 0x6c45, 0x7da9, 0x7b3d, 0x7081, 0x7615, 0x5359, 0x55cd, 0x5e71, 0x58e5, 0x4909, 0x4f9d, 0x4421, 0x42b5, 0xdc39, 0xdaad, 0xd111, 0xd785, 0xc669, 0xc0fd, 0xcb41, 0xcdd5, 0xe899, 0xee0d, 0xe5b1, 0xe325, 0xf2c9, 0xf45d, 0xffe1, 0xf975, 0xb579, 0xb3ed, 0xb851, 0xbec5, 0xaf29, 0xa9bd, 0xa201, 0xa495, 0x81d9, 0x874d, 0x8cf1, 0x8a65, 0x9b89, 0x9d1d, 0x96a1, 0x9035, ], [ 0x0000, 0x165c, 0x2cb8, 0x3ae4, 0x5970, 0x4f2c, 0x75c8, 0x6394, 0xb2e0, 0xa4bc, 0x9e58, 0x8804, 0xeb90, 0xfdcc, 0xc728, 0xd174, 0xc557, 0xd30b, 0xe9ef, 0xffb3, 0x9c27, 0x8a7b, 0xb09f, 0xa6c3, 0x77b7, 0x61eb, 0x5b0f, 0x4d53, 0x2ec7, 0x389b, 0x027f, 0x1423, 0x2a39, 0x3c65, 0x0681, 0x10dd, 0x7349, 0x6515, 0x5ff1, 0x49ad, 0x98d9, 0x8e85, 0xb461, 0xa23d, 0xc1a9, 0xd7f5, 0xed11, 0xfb4d, 0xef6e, 0xf932, 0xc3d6, 0xd58a, 0xb61e, 0xa042, 0x9aa6, 0x8cfa, 0x5d8e, 0x4bd2, 0x7136, 0x676a, 0x04fe, 0x12a2, 0x2846, 0x3e1a, 0x5472, 0x422e, 0x78ca, 0x6e96, 0x0d02, 0x1b5e, 0x21ba, 0x37e6, 0xe692, 0xf0ce, 0xca2a, 0xdc76, 0xbfe2, 0xa9be, 0x935a, 0x8506, 0x9125, 0x8779, 0xbd9d, 0xabc1, 0xc855, 0xde09, 0xe4ed, 0xf2b1, 0x23c5, 0x3599, 0x0f7d, 0x1921, 0x7ab5, 0x6ce9, 0x560d, 0x4051, 0x7e4b, 0x6817, 0x52f3, 0x44af, 0x273b, 0x3167, 0x0b83, 0x1ddf, 0xccab, 0xdaf7, 0xe013, 0xf64f, 0x95db, 0x8387, 0xb963, 0xaf3f, 0xbb1c, 0xad40, 0x97a4, 0x81f8, 0xe26c, 0xf430, 0xced4, 0xd888, 0x09fc, 0x1fa0, 0x2544, 0x3318, 0x508c, 0x46d0, 0x7c34, 0x6a68, 0xa8e4, 0xbeb8, 0x845c, 0x9200, 0xf194, 0xe7c8, 0xdd2c, 0xcb70, 0x1a04, 0x0c58, 0x36bc, 0x20e0, 0x4374, 0x5528, 0x6fcc, 0x7990, 0x6db3, 0x7bef, 0x410b, 0x5757, 0x34c3, 0x229f, 0x187b, 0x0e27, 0xdf53, 0xc90f, 0xf3eb, 0xe5b7, 0x8623, 0x907f, 0xaa9b, 0xbcc7, 0x82dd, 0x9481, 0xae65, 0xb839, 0xdbad, 0xcdf1, 0xf715, 0xe149, 0x303d, 0x2661, 0x1c85, 0x0ad9, 0x694d, 0x7f11, 0x45f5, 0x53a9, 0x478a, 0x51d6, 0x6b32, 0x7d6e, 0x1efa, 0x08a6, 0x3242, 0x241e, 0xf56a, 0xe336, 0xd9d2, 0xcf8e, 0xac1a, 0xba46, 0x80a2, 0x96fe, 0xfc96, 0xeaca, 0xd02e, 0xc672, 0xa5e6, 0xb3ba, 0x895e, 0x9f02, 0x4e76, 0x582a, 0x62ce, 0x7492, 0x1706, 0x015a, 0x3bbe, 0x2de2, 0x39c1, 0x2f9d, 0x1579, 0x0325, 0x60b1, 0x76ed, 0x4c09, 0x5a55, 0x8b21, 0x9d7d, 0xa799, 0xb1c5, 0xd251, 0xc40d, 0xfee9, 0xe8b5, 0xd6af, 0xc0f3, 0xfa17, 0xec4b, 0x8fdf, 0x9983, 0xa367, 0xb53b, 0x644f, 0x7213, 0x48f7, 0x5eab, 0x3d3f, 0x2b63, 0x1187, 0x07db, 0x13f8, 0x05a4, 0x3f40, 0x291c, 0x4a88, 0x5cd4, 0x6630, 0x706c, 0xa118, 0xb744, 0x8da0, 0x9bfc, 0xf868, 0xee34, 0xd4d0, 0xc28c, ], [ 0x0000, 0xf15f, 0x4229, 0xb376, 0x8452, 0x750d, 0xc67b, 0x3724, 0xa833, 0x596c, 0xea1a, 0x1b45, 0x2c61, 0xdd3e, 0x6e48, 0x9f17, 0xf0f1, 0x01ae, 0xb2d8, 0x4387, 0x74a3, 0x85fc, 0x368a, 0xc7d5, 0x58c2, 0xa99d, 0x1aeb, 0xebb4, 0xdc90, 0x2dcf, 0x9eb9, 0x6fe6, 0x4175, 0xb02a, 0x035c, 0xf203, 0xc527, 0x3478, 0x870e, 0x7651, 0xe946, 0x1819, 0xab6f, 0x5a30, 0x6d14, 0x9c4b, 0x2f3d, 0xde62, 0xb184, 0x40db, 0xf3ad, 0x02f2, 0x35d6, 0xc489, 0x77ff, 0x86a0, 0x19b7, 0xe8e8, 0x5b9e, 0xaac1, 0x9de5, 0x6cba, 0xdfcc, 0x2e93, 0x82ea, 0x73b5, 0xc0c3, 0x319c, 0x06b8, 0xf7e7, 0x4491, 0xb5ce, 0x2ad9, 0xdb86, 0x68f0, 0x99af, 0xae8b, 0x5fd4, 0xeca2, 0x1dfd, 0x721b, 0x8344, 0x3032, 0xc16d, 0xf649, 0x0716, 0xb460, 0x453f, 0xda28, 0x2b77, 0x9801, 0x695e, 0x5e7a, 0xaf25, 0x1c53, 0xed0c, 0xc39f, 0x32c0, 0x81b6, 0x70e9, 0x47cd, 0xb692, 0x05e4, 0xf4bb, 0x6bac, 0x9af3, 0x2985, 0xd8da, 0xeffe, 0x1ea1, 0xadd7, 0x5c88, 0x336e, 0xc231, 0x7147, 0x8018, 0xb73c, 0x4663, 0xf515, 0x044a, 0x9b5d, 0x6a02, 0xd974, 0x282b, 0x1f0f, 0xee50, 0x5d26, 0xac79, 0xa543, 0x541c, 0xe76a, 0x1635, 0x2111, 0xd04e, 0x6338, 0x9267, 0x0d70, 0xfc2f, 0x4f59, 0xbe06, 0x8922, 0x787d, 0xcb0b, 0x3a54, 0x55b2, 0xa4ed, 0x179b, 0xe6c4, 0xd1e0, 0x20bf, 0x93c9, 0x6296, 0xfd81, 0x0cde, 0xbfa8, 0x4ef7, 0x79d3, 0x888c, 0x3bfa, 0xcaa5, 0xe436, 0x1569, 0xa61f, 0x5740, 0x6064, 0x913b, 0x224d, 0xd312, 0x4c05, 0xbd5a, 0x0e2c, 0xff73, 0xc857, 0x3908, 0x8a7e, 0x7b21, 0x14c7, 0xe598, 0x56ee, 0xa7b1, 0x9095, 0x61ca, 0xd2bc, 0x23e3, 0xbcf4, 0x4dab, 0xfedd, 0x0f82, 0x38a6, 0xc9f9, 0x7a8f, 0x8bd0, 0x27a9, 0xd6f6, 0x6580, 0x94df, 0xa3fb, 0x52a4, 0xe1d2, 0x108d, 0x8f9a, 0x7ec5, 0xcdb3, 0x3cec, 0x0bc8, 0xfa97, 0x49e1, 0xb8be, 0xd758, 0x2607, 0x9571, 0x642e, 0x530a, 0xa255, 0x1123, 0xe07c, 0x7f6b, 0x8e34, 0x3d42, 0xcc1d, 0xfb39, 0x0a66, 0xb910, 0x484f, 0x66dc, 0x9783, 0x24f5, 0xd5aa, 0xe28e, 0x13d1, 0xa0a7, 0x51f8, 0xceef, 0x3fb0, 0x8cc6, 0x7d99, 0x4abd, 0xbbe2, 0x0894, 0xf9cb, 0x962d, 0x6772, 0xd404, 0x255b, 0x127f, 0xe320, 0x5056, 0xa109, 0x3e1e, 0xcf41, 0x7c37, 0x8d68, 0xba4c, 0x4b13, 0xf865, 0x093a, ], [ 0x0000, 0xea11, 0x74b5, 0x9ea4, 0xe96a, 0x037b, 0x9ddf, 0x77ce, 0x7243, 0x9852, 0x06f6, 0xece7, 0x9b29, 0x7138, 0xef9c, 0x058d, 0xe486, 0x0e97, 0x9033, 0x7a22, 0x0dec, 0xe7fd, 0x7959, 0x9348, 0x96c5, 0x7cd4, 0xe270, 0x0861, 0x7faf, 0x95be, 0x0b1a, 0xe10b, 0x699b, 0x838a, 0x1d2e, 0xf73f, 0x80f1, 0x6ae0, 0xf444, 0x1e55, 0x1bd8, 0xf1c9, 0x6f6d, 0x857c, 0xf2b2, 0x18a3, 0x8607, 0x6c16, 0x8d1d, 0x670c, 0xf9a8, 0x13b9, 0x6477, 0x8e66, 0x10c2, 0xfad3, 0xff5e, 0x154f, 0x8beb, 0x61fa, 0x1634, 0xfc25, 0x6281, 0x8890, 0xd336, 0x3927, 0xa783, 0x4d92, 0x3a5c, 0xd04d, 0x4ee9, 0xa4f8, 0xa175, 0x4b64, 0xd5c0, 0x3fd1, 0x481f, 0xa20e, 0x3caa, 0xd6bb, 0x37b0, 0xdda1, 0x4305, 0xa914, 0xdeda, 0x34cb, 0xaa6f, 0x407e, 0x45f3, 0xafe2, 0x3146, 0xdb57, 0xac99, 0x4688, 0xd82c, 0x323d, 0xbaad, 0x50bc, 0xce18, 0x2409, 0x53c7, 0xb9d6, 0x2772, 0xcd63, 0xc8ee, 0x22ff, 0xbc5b, 0x564a, 0x2184, 0xcb95, 0x5531, 0xbf20, 0x5e2b, 0xb43a, 0x2a9e, 0xc08f, 0xb741, 0x5d50, 0xc3f4, 0x29e5, 0x2c68, 0xc679, 0x58dd, 0xb2cc, 0xc502, 0x2f13, 0xb1b7, 0x5ba6, 0x06fb, 0xecea, 0x724e, 0x985f, 0xef91, 0x0580, 0x9b24, 0x7135, 0x74b8, 0x9ea9, 0x000d, 0xea1c, 0x9dd2, 0x77c3, 0xe967, 0x0376, 0xe27d, 0x086c, 0x96c8, 0x7cd9, 0x0b17, 0xe106, 0x7fa2, 0x95b3, 0x903e, 0x7a2f, 0xe48b, 0x0e9a, 0x7954, 0x9345, 0x0de1, 0xe7f0, 0x6f60, 0x8571, 0x1bd5, 0xf1c4, 0x860a, 0x6c1b, 0xf2bf, 0x18ae, 0x1d23, 0xf732, 0x6996, 0x8387, 0xf449, 0x1e58, 0x80fc, 0x6aed, 0x8be6, 0x61f7, 0xff53, 0x1542, 0x628c, 0x889d, 0x1639, 0xfc28, 0xf9a5, 0x13b4, 0x8d10, 0x6701, 0x10cf, 0xfade, 0x647a, 0x8e6b, 0xd5cd, 0x3fdc, 0xa178, 0x4b69, 0x3ca7, 0xd6b6, 0x4812, 0xa203, 0xa78e, 0x4d9f, 0xd33b, 0x392a, 0x4ee4, 0xa4f5, 0x3a51, 0xd040, 0x314b, 0xdb5a, 0x45fe, 0xafef, 0xd821, 0x3230, 0xac94, 0x4685, 0x4308, 0xa919, 0x37bd, 0xddac, 0xaa62, 0x4073, 0xded7, 0x34c6, 0xbc56, 0x5647, 0xc8e3, 0x22f2, 0x553c, 0xbf2d, 0x2189, 0xcb98, 0xce15, 0x2404, 0xbaa0, 0x50b1, 0x277f, 0xcd6e, 0x53ca, 0xb9db, 0x58d0, 0xb2c1, 0x2c65, 0xc674, 0xb1ba, 0x5bab, 0xc50f, 0x2f1e, 0x2a93, 0xc082, 0x5e26, 0xb437, 0xc3f9, 0x29e8, 0xb74c, 0x5d5d, ], [ 0x0000, 0x0df6, 0x1bec, 0x161a, 0x37d8, 0x3a2e, 0x2c34, 0x21c2, 0x6fb0, 0x6246, 0x745c, 0x79aa, 0x5868, 0x559e, 0x4384, 0x4e72, 0xdf60, 0xd296, 0xc48c, 0xc97a, 0xe8b8, 0xe54e, 0xf354, 0xfea2, 0xb0d0, 0xbd26, 0xab3c, 0xa6ca, 0x8708, 0x8afe, 0x9ce4, 0x9112, 0x1e57, 0x13a1, 0x05bb, 0x084d, 0x298f, 0x2479, 0x3263, 0x3f95, 0x71e7, 0x7c11, 0x6a0b, 0x67fd, 0x463f, 0x4bc9, 0x5dd3, 0x5025, 0xc137, 0xccc1, 0xdadb, 0xd72d, 0xf6ef, 0xfb19, 0xed03, 0xe0f5, 0xae87, 0xa371, 0xb56b, 0xb89d, 0x995f, 0x94a9, 0x82b3, 0x8f45, 0x3cae, 0x3158, 0x2742, 0x2ab4, 0x0b76, 0x0680, 0x109a, 0x1d6c, 0x531e, 0x5ee8, 0x48f2, 0x4504, 0x64c6, 0x6930, 0x7f2a, 0x72dc, 0xe3ce, 0xee38, 0xf822, 0xf5d4, 0xd416, 0xd9e0, 0xcffa, 0xc20c, 0x8c7e, 0x8188, 0x9792, 0x9a64, 0xbba6, 0xb650, 0xa04a, 0xadbc, 0x22f9, 0x2f0f, 0x3915, 0x34e3, 0x1521, 0x18d7, 0x0ecd, 0x033b, 0x4d49, 0x40bf, 0x56a5, 0x5b53, 0x7a91, 0x7767, 0x617d, 0x6c8b, 0xfd99, 0xf06f, 0xe675, 0xeb83, 0xca41, 0xc7b7, 0xd1ad, 0xdc5b, 0x9229, 0x9fdf, 0x89c5, 0x8433, 0xa5f1, 0xa807, 0xbe1d, 0xb3eb, 0x795c, 0x74aa, 0x62b0, 0x6f46, 0x4e84, 0x4372, 0x5568, 0x589e, 0x16ec, 0x1b1a, 0x0d00, 0x00f6, 0x2134, 0x2cc2, 0x3ad8, 0x372e, 0xa63c, 0xabca, 0xbdd0, 0xb026, 0x91e4, 0x9c12, 0x8a08, 0x87fe, 0xc98c, 0xc47a, 0xd260, 0xdf96, 0xfe54, 0xf3a2, 0xe5b8, 0xe84e, 0x670b, 0x6afd, 0x7ce7, 0x7111, 0x50d3, 0x5d25, 0x4b3f, 0x46c9, 0x08bb, 0x054d, 0x1357, 0x1ea1, 0x3f63, 0x3295, 0x248f, 0x2979, 0xb86b, 0xb59d, 0xa387, 0xae71, 0x8fb3, 0x8245, 0x945f, 0x99a9, 0xd7db, 0xda2d, 0xcc37, 0xc1c1, 0xe003, 0xedf5, 0xfbef, 0xf619, 0x45f2, 0x4804, 0x5e1e, 0x53e8, 0x722a, 0x7fdc, 0x69c6, 0x6430, 0x2a42, 0x27b4, 0x31ae, 0x3c58, 0x1d9a, 0x106c, 0x0676, 0x0b80, 0x9a92, 0x9764, 0x817e, 0x8c88, 0xad4a, 0xa0bc, 0xb6a6, 0xbb50, 0xf522, 0xf8d4, 0xeece, 0xe338, 0xc2fa, 0xcf0c, 0xd916, 0xd4e0, 0x5ba5, 0x5653, 0x4049, 0x4dbf, 0x6c7d, 0x618b, 0x7791, 0x7a67, 0x3415, 0x39e3, 0x2ff9, 0x220f, 0x03cd, 0x0e3b, 0x1821, 0x15d7, 0x84c5, 0x8933, 0x9f29, 0x92df, 0xb31d, 0xbeeb, 0xa8f1, 0xa507, 0xeb75, 0xe683, 0xf099, 0xfd6f, 0xdcad, 0xd15b, 0xc741, 0xcab7, ], [ 0x0000, 0xf2b8, 0x45e7, 0xb75f, 0x8bce, 0x7976, 0xce29, 0x3c91, 0xb70b, 0x45b3, 0xf2ec, 0x0054, 0x3cc5, 0xce7d, 0x7922, 0x8b9a, 0xce81, 0x3c39, 0x8b66, 0x79de, 0x454f, 0xb7f7, 0x00a8, 0xf210, 0x798a, 0x8b32, 0x3c6d, 0xced5, 0xf244, 0x00fc, 0xb7a3, 0x451b, 0x3d95, 0xcf2d, 0x7872, 0x8aca, 0xb65b, 0x44e3, 0xf3bc, 0x0104, 0x8a9e, 0x7826, 0xcf79, 0x3dc1, 0x0150, 0xf3e8, 0x44b7, 0xb60f, 0xf314, 0x01ac, 0xb6f3, 0x444b, 0x78da, 0x8a62, 0x3d3d, 0xcf85, 0x441f, 0xb6a7, 0x01f8, 0xf340, 0xcfd1, 0x3d69, 0x8a36, 0x788e, 0x7b2a, 0x8992, 0x3ecd, 0xcc75, 0xf0e4, 0x025c, 0xb503, 0x47bb, 0xcc21, 0x3e99, 0x89c6, 0x7b7e, 0x47ef, 0xb557, 0x0208, 0xf0b0, 0xb5ab, 0x4713, 0xf04c, 0x02f4, 0x3e65, 0xccdd, 0x7b82, 0x893a, 0x02a0, 0xf018, 0x4747, 0xb5ff, 0x896e, 0x7bd6, 0xcc89, 0x3e31, 0x46bf, 0xb407, 0x0358, 0xf1e0, 0xcd71, 0x3fc9, 0x8896, 0x7a2e, 0xf1b4, 0x030c, 0xb453, 0x46eb, 0x7a7a, 0x88c2, 0x3f9d, 0xcd25, 0x883e, 0x7a86, 0xcdd9, 0x3f61, 0x03f0, 0xf148, 0x4617, 0xb4af, 0x3f35, 0xcd8d, 0x7ad2, 0x886a, 0xb4fb, 0x4643, 0xf11c, 0x03a4, 0xf654, 0x04ec, 0xb3b3, 0x410b, 0x7d9a, 0x8f22, 0x387d, 0xcac5, 0x415f, 0xb3e7, 0x04b8, 0xf600, 0xca91, 0x3829, 0x8f76, 0x7dce, 0x38d5, 0xca6d, 0x7d32, 0x8f8a, 0xb31b, 0x41a3, 0xf6fc, 0x0444, 0x8fde, 0x7d66, 0xca39, 0x3881, 0x0410, 0xf6a8, 0x41f7, 0xb34f, 0xcbc1, 0x3979, 0x8e26, 0x7c9e, 0x400f, 0xb2b7, 0x05e8, 0xf750, 0x7cca, 0x8e72, 0x392d, 0xcb95, 0xf704, 0x05bc, 0xb2e3, 0x405b, 0x0540, 0xf7f8, 0x40a7, 0xb21f, 0x8e8e, 0x7c36, 0xcb69, 0x39d1, 0xb24b, 0x40f3, 0xf7ac, 0x0514, 0x3985, 0xcb3d, 0x7c62, 0x8eda, 0x8d7e, 0x7fc6, 0xc899, 0x3a21, 0x06b0, 0xf408, 0x4357, 0xb1ef, 0x3a75, 0xc8cd, 0x7f92, 0x8d2a, 0xb1bb, 0x4303, 0xf45c, 0x06e4, 0x43ff, 0xb147, 0x0618, 0xf4a0, 0xc831, 0x3a89, 0x8dd6, 0x7f6e, 0xf4f4, 0x064c, 0xb113, 0x43ab, 0x7f3a, 0x8d82, 0x3add, 0xc865, 0xb0eb, 0x4253, 0xf50c, 0x07b4, 0x3b25, 0xc99d, 0x7ec2, 0x8c7a, 0x07e0, 0xf558, 0x4207, 0xb0bf, 0x8c2e, 0x7e96, 0xc9c9, 0x3b71, 0x7e6a, 0x8cd2, 0x3b8d, 0xc935, 0xf5a4, 0x071c, 0xb043, 0x42fb, 0xc961, 0x3bd9, 0x8c86, 0x7e3e, 0x42af, 0xb017, 0x0748, 0xf5f0, ], [ 0x0000, 0x4c3f, 0x987e, 0xd441, 0x906b, 0xdc54, 0x0815, 0x442a, 0x8041, 0xcc7e, 0x183f, 0x5400, 0x102a, 0x5c15, 0x8854, 0xc46b, 0xa015, 0xec2a, 0x386b, 0x7454, 0x307e, 0x7c41, 0xa800, 0xe43f, 0x2054, 0x6c6b, 0xb82a, 0xf415, 0xb03f, 0xfc00, 0x2841, 0x647e, 0xe0bd, 0xac82, 0x78c3, 0x34fc, 0x70d6, 0x3ce9, 0xe8a8, 0xa497, 0x60fc, 0x2cc3, 0xf882, 0xb4bd, 0xf097, 0xbca8, 0x68e9, 0x24d6, 0x40a8, 0x0c97, 0xd8d6, 0x94e9, 0xd0c3, 0x9cfc, 0x48bd, 0x0482, 0xc0e9, 0x8cd6, 0x5897, 0x14a8, 0x5082, 0x1cbd, 0xc8fc, 0x84c3, 0x61ed, 0x2dd2, 0xf993, 0xb5ac, 0xf186, 0xbdb9, 0x69f8, 0x25c7, 0xe1ac, 0xad93, 0x79d2, 0x35ed, 0x71c7, 0x3df8, 0xe9b9, 0xa586, 0xc1f8, 0x8dc7, 0x5986, 0x15b9, 0x5193, 0x1dac, 0xc9ed, 0x85d2, 0x41b9, 0x0d86, 0xd9c7, 0x95f8, 0xd1d2, 0x9ded, 0x49ac, 0x0593, 0x8150, 0xcd6f, 0x192e, 0x5511, 0x113b, 0x5d04, 0x8945, 0xc57a, 0x0111, 0x4d2e, 0x996f, 0xd550, 0x917a, 0xdd45, 0x0904, 0x453b, 0x2145, 0x6d7a, 0xb93b, 0xf504, 0xb12e, 0xfd11, 0x2950, 0x656f, 0xa104, 0xed3b, 0x397a, 0x7545, 0x316f, 0x7d50, 0xa911, 0xe52e, 0xc3da, 0x8fe5, 0x5ba4, 0x179b, 0x53b1, 0x1f8e, 0xcbcf, 0x87f0, 0x439b, 0x0fa4, 0xdbe5, 0x97da, 0xd3f0, 0x9fcf, 0x4b8e, 0x07b1, 0x63cf, 0x2ff0, 0xfbb1, 0xb78e, 0xf3a4, 0xbf9b, 0x6bda, 0x27e5, 0xe38e, 0xafb1, 0x7bf0, 0x37cf, 0x73e5, 0x3fda, 0xeb9b, 0xa7a4, 0x2367, 0x6f58, 0xbb19, 0xf726, 0xb30c, 0xff33, 0x2b72, 0x674d, 0xa326, 0xef19, 0x3b58, 0x7767, 0x334d, 0x7f72, 0xab33, 0xe70c, 0x8372, 0xcf4d, 0x1b0c, 0x5733, 0x1319, 0x5f26, 0x8b67, 0xc758, 0x0333, 0x4f0c, 0x9b4d, 0xd772, 0x9358, 0xdf67, 0x0b26, 0x4719, 0xa237, 0xee08, 0x3a49, 0x7676, 0x325c, 0x7e63, 0xaa22, 0xe61d, 0x2276, 0x6e49, 0xba08, 0xf637, 0xb21d, 0xfe22, 0x2a63, 0x665c, 0x0222, 0x4e1d, 0x9a5c, 0xd663, 0x9249, 0xde76, 0x0a37, 0x4608, 0x8263, 0xce5c, 0x1a1d, 0x5622, 0x1208, 0x5e37, 0x8a76, 0xc649, 0x428a, 0x0eb5, 0xdaf4, 0x96cb, 0xd2e1, 0x9ede, 0x4a9f, 0x06a0, 0xc2cb, 0x8ef4, 0x5ab5, 0x168a, 0x52a0, 0x1e9f, 0xcade, 0x86e1, 0xe29f, 0xaea0, 0x7ae1, 0x36de, 0x72f4, 0x3ecb, 0xea8a, 0xa6b5, 0x62de, 0x2ee1, 0xfaa0, 0xb69f, 0xf2b5, 0xbe8a, 0x6acb, 0x26f4, ], [ 0x0000, 0x2723, 0x4e46, 0x6965, 0x9c8c, 0xbbaf, 0xd2ca, 0xf5e9, 0x998f, 0xbeac, 0xd7c9, 0xf0ea, 0x0503, 0x2220, 0x4b45, 0x6c66, 0x9389, 0xb4aa, 0xddcf, 0xfaec, 0x0f05, 0x2826, 0x4143, 0x6660, 0x0a06, 0x2d25, 0x4440, 0x6363, 0x968a, 0xb1a9, 0xd8cc, 0xffef, 0x8785, 0xa0a6, 0xc9c3, 0xeee0, 0x1b09, 0x3c2a, 0x554f, 0x726c, 0x1e0a, 0x3929, 0x504c, 0x776f, 0x8286, 0xa5a5, 0xccc0, 0xebe3, 0x140c, 0x332f, 0x5a4a, 0x7d69, 0x8880, 0xafa3, 0xc6c6, 0xe1e5, 0x8d83, 0xaaa0, 0xc3c5, 0xe4e6, 0x110f, 0x362c, 0x5f49, 0x786a, 0xaf9d, 0x88be, 0xe1db, 0xc6f8, 0x3311, 0x1432, 0x7d57, 0x5a74, 0x3612, 0x1131, 0x7854, 0x5f77, 0xaa9e, 0x8dbd, 0xe4d8, 0xc3fb, 0x3c14, 0x1b37, 0x7252, 0x5571, 0xa098, 0x87bb, 0xeede, 0xc9fd, 0xa59b, 0x82b8, 0xebdd, 0xccfe, 0x3917, 0x1e34, 0x7751, 0x5072, 0x2818, 0x0f3b, 0x665e, 0x417d, 0xb494, 0x93b7, 0xfad2, 0xddf1, 0xb197, 0x96b4, 0xffd1, 0xd8f2, 0x2d1b, 0x0a38, 0x635d, 0x447e, 0xbb91, 0x9cb2, 0xf5d7, 0xd2f4, 0x271d, 0x003e, 0x695b, 0x4e78, 0x221e, 0x053d, 0x6c58, 0x4b7b, 0xbe92, 0x99b1, 0xf0d4, 0xd7f7, 0xffad, 0xd88e, 0xb1eb, 0x96c8, 0x6321, 0x4402, 0x2d67, 0x0a44, 0x6622, 0x4101, 0x2864, 0x0f47, 0xfaae, 0xdd8d, 0xb4e8, 0x93cb, 0x6c24, 0x4b07, 0x2262, 0x0541, 0xf0a8, 0xd78b, 0xbeee, 0x99cd, 0xf5ab, 0xd288, 0xbbed, 0x9cce, 0x6927, 0x4e04, 0x2761, 0x0042, 0x7828, 0x5f0b, 0x366e, 0x114d, 0xe4a4, 0xc387, 0xaae2, 0x8dc1, 0xe1a7, 0xc684, 0xafe1, 0x88c2, 0x7d2b, 0x5a08, 0x336d, 0x144e, 0xeba1, 0xcc82, 0xa5e7, 0x82c4, 0x772d, 0x500e, 0x396b, 0x1e48, 0x722e, 0x550d, 0x3c68, 0x1b4b, 0xeea2, 0xc981, 0xa0e4, 0x87c7, 0x5030, 0x7713, 0x1e76, 0x3955, 0xccbc, 0xeb9f, 0x82fa, 0xa5d9, 0xc9bf, 0xee9c, 0x87f9, 0xa0da, 0x5533, 0x7210, 0x1b75, 0x3c56, 0xc3b9, 0xe49a, 0x8dff, 0xaadc, 0x5f35, 0x7816, 0x1173, 0x3650, 0x5a36, 0x7d15, 0x1470, 0x3353, 0xc6ba, 0xe199, 0x88fc, 0xafdf, 0xd7b5, 0xf096, 0x99f3, 0xbed0, 0x4b39, 0x6c1a, 0x057f, 0x225c, 0x4e3a, 0x6919, 0x007c, 0x275f, 0xd2b6, 0xf595, 0x9cf0, 0xbbd3, 0x443c, 0x631f, 0x0a7a, 0x2d59, 0xd8b0, 0xff93, 0x96f6, 0xb1d5, 0xddb3, 0xfa90, 0x93f5, 0xb4d6, 0x413f, 0x661c, 0x0f79, 0x285a, ], [ 0x0000, 0x5fcd, 0xbf9a, 0xe057, 0xdfa3, 0x806e, 0x6039, 0x3ff4, 0x1fd1, 0x401c, 0xa04b, 0xff86, 0xc072, 0x9fbf, 0x7fe8, 0x2025, 0x3fa2, 0x606f, 0x8038, 0xdff5, 0xe001, 0xbfcc, 0x5f9b, 0x0056, 0x2073, 0x7fbe, 0x9fe9, 0xc024, 0xffd0, 0xa01d, 0x404a, 0x1f87, 0x7f44, 0x2089, 0xc0de, 0x9f13, 0xa0e7, 0xff2a, 0x1f7d, 0x40b0, 0x6095, 0x3f58, 0xdf0f, 0x80c2, 0xbf36, 0xe0fb, 0x00ac, 0x5f61, 0x40e6, 0x1f2b, 0xff7c, 0xa0b1, 0x9f45, 0xc088, 0x20df, 0x7f12, 0x5f37, 0x00fa, 0xe0ad, 0xbf60, 0x8094, 0xdf59, 0x3f0e, 0x60c3, 0xfe88, 0xa145, 0x4112, 0x1edf, 0x212b, 0x7ee6, 0x9eb1, 0xc17c, 0xe159, 0xbe94, 0x5ec3, 0x010e, 0x3efa, 0x6137, 0x8160, 0xdead, 0xc12a, 0x9ee7, 0x7eb0, 0x217d, 0x1e89, 0x4144, 0xa113, 0xfede, 0xdefb, 0x8136, 0x6161, 0x3eac, 0x0158, 0x5e95, 0xbec2, 0xe10f, 0x81cc, 0xde01, 0x3e56, 0x619b, 0x5e6f, 0x01a2, 0xe1f5, 0xbe38, 0x9e1d, 0xc1d0, 0x2187, 0x7e4a, 0x41be, 0x1e73, 0xfe24, 0xa1e9, 0xbe6e, 0xe1a3, 0x01f4, 0x5e39, 0x61cd, 0x3e00, 0xde57, 0x819a, 0xa1bf, 0xfe72, 0x1e25, 0x41e8, 0x7e1c, 0x21d1, 0xc186, 0x9e4b, 0x5d87, 0x024a, 0xe21d, 0xbdd0, 0x8224, 0xdde9, 0x3dbe, 0x6273, 0x4256, 0x1d9b, 0xfdcc, 0xa201, 0x9df5, 0xc238, 0x226f, 0x7da2, 0x6225, 0x3de8, 0xddbf, 0x8272, 0xbd86, 0xe24b, 0x021c, 0x5dd1, 0x7df4, 0x2239, 0xc26e, 0x9da3, 0xa257, 0xfd9a, 0x1dcd, 0x4200, 0x22c3, 0x7d0e, 0x9d59, 0xc294, 0xfd60, 0xa2ad, 0x42fa, 0x1d37, 0x3d12, 0x62df, 0x8288, 0xdd45, 0xe2b1, 0xbd7c, 0x5d2b, 0x02e6, 0x1d61, 0x42ac, 0xa2fb, 0xfd36, 0xc2c2, 0x9d0f, 0x7d58, 0x2295, 0x02b0, 0x5d7d, 0xbd2a, 0xe2e7, 0xdd13, 0x82de, 0x6289, 0x3d44, 0xa30f, 0xfcc2, 0x1c95, 0x4358, 0x7cac, 0x2361, 0xc336, 0x9cfb, 0xbcde, 0xe313, 0x0344, 0x5c89, 0x637d, 0x3cb0, 0xdce7, 0x832a, 0x9cad, 0xc360, 0x2337, 0x7cfa, 0x430e, 0x1cc3, 0xfc94, 0xa359, 0x837c, 0xdcb1, 0x3ce6, 0x632b, 0x5cdf, 0x0312, 0xe345, 0xbc88, 0xdc4b, 0x8386, 0x63d1, 0x3c1c, 0x03e8, 0x5c25, 0xbc72, 0xe3bf, 0xc39a, 0x9c57, 0x7c00, 0x23cd, 0x1c39, 0x43f4, 0xa3a3, 0xfc6e, 0xe3e9, 0xbc24, 0x5c73, 0x03be, 0x3c4a, 0x6387, 0x83d0, 0xdc1d, 0xfc38, 0xa3f5, 0x43a2, 0x1c6f, 0x239b, 0x7c56, 0x9c01, 0xc3cc, ], [ 0x0000, 0xbb0e, 0xd68b, 0x6d85, 0x0d81, 0xb68f, 0xdb0a, 0x6004, 0x1b02, 0xa00c, 0xcd89, 0x7687, 0x1683, 0xad8d, 0xc008, 0x7b06, 0x3604, 0x8d0a, 0xe08f, 0x5b81, 0x3b85, 0x808b, 0xed0e, 0x5600, 0x2d06, 0x9608, 0xfb8d, 0x4083, 0x2087, 0x9b89, 0xf60c, 0x4d02, 0x6c08, 0xd706, 0xba83, 0x018d, 0x6189, 0xda87, 0xb702, 0x0c0c, 0x770a, 0xcc04, 0xa181, 0x1a8f, 0x7a8b, 0xc185, 0xac00, 0x170e, 0x5a0c, 0xe102, 0x8c87, 0x3789, 0x578d, 0xec83, 0x8106, 0x3a08, 0x410e, 0xfa00, 0x9785, 0x2c8b, 0x4c8f, 0xf781, 0x9a04, 0x210a, 0xd810, 0x631e, 0x0e9b, 0xb595, 0xd591, 0x6e9f, 0x031a, 0xb814, 0xc312, 0x781c, 0x1599, 0xae97, 0xce93, 0x759d, 0x1818, 0xa316, 0xee14, 0x551a, 0x389f, 0x8391, 0xe395, 0x589b, 0x351e, 0x8e10, 0xf516, 0x4e18, 0x239d, 0x9893, 0xf897, 0x4399, 0x2e1c, 0x9512, 0xb418, 0x0f16, 0x6293, 0xd99d, 0xb999, 0x0297, 0x6f12, 0xd41c, 0xaf1a, 0x1414, 0x7991, 0xc29f, 0xa29b, 0x1995, 0x7410, 0xcf1e, 0x821c, 0x3912, 0x5497, 0xef99, 0x8f9d, 0x3493, 0x5916, 0xe218, 0x991e, 0x2210, 0x4f95, 0xf49b, 0x949f, 0x2f91, 0x4214, 0xf91a, 0x10b7, 0xabb9, 0xc63c, 0x7d32, 0x1d36, 0xa638, 0xcbbd, 0x70b3, 0x0bb5, 0xb0bb, 0xdd3e, 0x6630, 0x0634, 0xbd3a, 0xd0bf, 0x6bb1, 0x26b3, 0x9dbd, 0xf038, 0x4b36, 0x2b32, 0x903c, 0xfdb9, 0x46b7, 0x3db1, 0x86bf, 0xeb3a, 0x5034, 0x3030, 0x8b3e, 0xe6bb, 0x5db5, 0x7cbf, 0xc7b1, 0xaa34, 0x113a, 0x713e, 0xca30, 0xa7b5, 0x1cbb, 0x67bd, 0xdcb3, 0xb136, 0x0a38, 0x6a3c, 0xd132, 0xbcb7, 0x07b9, 0x4abb, 0xf1b5, 0x9c30, 0x273e, 0x473a, 0xfc34, 0x91b1, 0x2abf, 0x51b9, 0xeab7, 0x8732, 0x3c3c, 0x5c38, 0xe736, 0x8ab3, 0x31bd, 0xc8a7, 0x73a9, 0x1e2c, 0xa522, 0xc526, 0x7e28, 0x13ad, 0xa8a3, 0xd3a5, 0x68ab, 0x052e, 0xbe20, 0xde24, 0x652a, 0x08af, 0xb3a1, 0xfea3, 0x45ad, 0x2828, 0x9326, 0xf322, 0x482c, 0x25a9, 0x9ea7, 0xe5a1, 0x5eaf, 0x332a, 0x8824, 0xe820, 0x532e, 0x3eab, 0x85a5, 0xa4af, 0x1fa1, 0x7224, 0xc92a, 0xa92e, 0x1220, 0x7fa5, 0xc4ab, 0xbfad, 0x04a3, 0x6926, 0xd228, 0xb22c, 0x0922, 0x64a7, 0xdfa9, 0x92ab, 0x29a5, 0x4420, 0xff2e, 0x9f2a, 0x2424, 0x49a1, 0xf2af, 0x89a9, 0x32a7, 0x5f22, 0xe42c, 0x8428, 0x3f26, 0x52a3, 0xe9ad, ], [ 0x0000, 0x216e, 0x42dc, 0x63b2, 0x85b8, 0xa4d6, 0xc764, 0xe60a, 0xabe7, 0x8a89, 0xe93b, 0xc855, 0x2e5f, 0x0f31, 0x6c83, 0x4ded, 0xf759, 0xd637, 0xb585, 0x94eb, 0x72e1, 0x538f, 0x303d, 0x1153, 0x5cbe, 0x7dd0, 0x1e62, 0x3f0c, 0xd906, 0xf868, 0x9bda, 0xbab4, 0x4e25, 0x6f4b, 0x0cf9, 0x2d97, 0xcb9d, 0xeaf3, 0x8941, 0xa82f, 0xe5c2, 0xc4ac, 0xa71e, 0x8670, 0x607a, 0x4114, 0x22a6, 0x03c8, 0xb97c, 0x9812, 0xfba0, 0xdace, 0x3cc4, 0x1daa, 0x7e18, 0x5f76, 0x129b, 0x33f5, 0x5047, 0x7129, 0x9723, 0xb64d, 0xd5ff, 0xf491, 0x9c4a, 0xbd24, 0xde96, 0xfff8, 0x19f2, 0x389c, 0x5b2e, 0x7a40, 0x37ad, 0x16c3, 0x7571, 0x541f, 0xb215, 0x937b, 0xf0c9, 0xd1a7, 0x6b13, 0x4a7d, 0x29cf, 0x08a1, 0xeeab, 0xcfc5, 0xac77, 0x8d19, 0xc0f4, 0xe19a, 0x8228, 0xa346, 0x454c, 0x6422, 0x0790, 0x26fe, 0xd26f, 0xf301, 0x90b3, 0xb1dd, 0x57d7, 0x76b9, 0x150b, 0x3465, 0x7988, 0x58e6, 0x3b54, 0x1a3a, 0xfc30, 0xdd5e, 0xbeec, 0x9f82, 0x2536, 0x0458, 0x67ea, 0x4684, 0xa08e, 0x81e0, 0xe252, 0xc33c, 0x8ed1, 0xafbf, 0xcc0d, 0xed63, 0x0b69, 0x2a07, 0x49b5, 0x68db, 0x9803, 0xb96d, 0xdadf, 0xfbb1, 0x1dbb, 0x3cd5, 0x5f67, 0x7e09, 0x33e4, 0x128a, 0x7138, 0x5056, 0xb65c, 0x9732, 0xf480, 0xd5ee, 0x6f5a, 0x4e34, 0x2d86, 0x0ce8, 0xeae2, 0xcb8c, 0xa83e, 0x8950, 0xc4bd, 0xe5d3, 0x8661, 0xa70f, 0x4105, 0x606b, 0x03d9, 0x22b7, 0xd626, 0xf748, 0x94fa, 0xb594, 0x539e, 0x72f0, 0x1142, 0x302c, 0x7dc1, 0x5caf, 0x3f1d, 0x1e73, 0xf879, 0xd917, 0xbaa5, 0x9bcb, 0x217f, 0x0011, 0x63a3, 0x42cd, 0xa4c7, 0x85a9, 0xe61b, 0xc775, 0x8a98, 0xabf6, 0xc844, 0xe92a, 0x0f20, 0x2e4e, 0x4dfc, 0x6c92, 0x0449, 0x2527, 0x4695, 0x67fb, 0x81f1, 0xa09f, 0xc32d, 0xe243, 0xafae, 0x8ec0, 0xed72, 0xcc1c, 0x2a16, 0x0b78, 0x68ca, 0x49a4, 0xf310, 0xd27e, 0xb1cc, 0x90a2, 0x76a8, 0x57c6, 0x3474, 0x151a, 0x58f7, 0x7999, 0x1a2b, 0x3b45, 0xdd4f, 0xfc21, 0x9f93, 0xbefd, 0x4a6c, 0x6b02, 0x08b0, 0x29de, 0xcfd4, 0xeeba, 0x8d08, 0xac66, 0xe18b, 0xc0e5, 0xa357, 0x8239, 0x6433, 0x455d, 0x26ef, 0x0781, 0xbd35, 0x9c5b, 0xffe9, 0xde87, 0x388d, 0x19e3, 0x7a51, 0x5b3f, 0x16d2, 0x37bc, 0x540e, 0x7560, 0x936a, 0xb204, 0xd1b6, 0xf0d8, ], [ 0x0000, 0x9091, 0x81b5, 0x1124, 0xa3fd, 0x336c, 0x2248, 0xb2d9, 0xe76d, 0x77fc, 0x66d8, 0xf649, 0x4490, 0xd401, 0xc525, 0x55b4, 0x6e4d, 0xfedc, 0xeff8, 0x7f69, 0xcdb0, 0x5d21, 0x4c05, 0xdc94, 0x8920, 0x19b1, 0x0895, 0x9804, 0x2add, 0xba4c, 0xab68, 0x3bf9, 0xdc9a, 0x4c0b, 0x5d2f, 0xcdbe, 0x7f67, 0xeff6, 0xfed2, 0x6e43, 0x3bf7, 0xab66, 0xba42, 0x2ad3, 0x980a, 0x089b, 0x19bf, 0x892e, 0xb2d7, 0x2246, 0x3362, 0xa3f3, 0x112a, 0x81bb, 0x909f, 0x000e, 0x55ba, 0xc52b, 0xd40f, 0x449e, 0xf647, 0x66d6, 0x77f2, 0xe763, 0x19a3, 0x8932, 0x9816, 0x0887, 0xba5e, 0x2acf, 0x3beb, 0xab7a, 0xfece, 0x6e5f, 0x7f7b, 0xefea, 0x5d33, 0xcda2, 0xdc86, 0x4c17, 0x77ee, 0xe77f, 0xf65b, 0x66ca, 0xd413, 0x4482, 0x55a6, 0xc537, 0x9083, 0x0012, 0x1136, 0x81a7, 0x337e, 0xa3ef, 0xb2cb, 0x225a, 0xc539, 0x55a8, 0x448c, 0xd41d, 0x66c4, 0xf655, 0xe771, 0x77e0, 0x2254, 0xb2c5, 0xa3e1, 0x3370, 0x81a9, 0x1138, 0x001c, 0x908d, 0xab74, 0x3be5, 0x2ac1, 0xba50, 0x0889, 0x9818, 0x893c, 0x19ad, 0x4c19, 0xdc88, 0xcdac, 0x5d3d, 0xefe4, 0x7f75, 0x6e51, 0xfec0, 0x3346, 0xa3d7, 0xb2f3, 0x2262, 0x90bb, 0x002a, 0x110e, 0x819f, 0xd42b, 0x44ba, 0x559e, 0xc50f, 0x77d6, 0xe747, 0xf663, 0x66f2, 0x5d0b, 0xcd9a, 0xdcbe, 0x4c2f, 0xfef6, 0x6e67, 0x7f43, 0xefd2, 0xba66, 0x2af7, 0x3bd3, 0xab42, 0x199b, 0x890a, 0x982e, 0x08bf, 0xefdc, 0x7f4d, 0x6e69, 0xfef8, 0x4c21, 0xdcb0, 0xcd94, 0x5d05, 0x08b1, 0x9820, 0x8904, 0x1995, 0xab4c, 0x3bdd, 0x2af9, 0xba68, 0x8191, 0x1100, 0x0024, 0x90b5, 0x226c, 0xb2fd, 0xa3d9, 0x3348, 0x66fc, 0xf66d, 0xe749, 0x77d8, 0xc501, 0x5590, 0x44b4, 0xd425, 0x2ae5, 0xba74, 0xab50, 0x3bc1, 0x8918, 0x1989, 0x08ad, 0x983c, 0xcd88, 0x5d19, 0x4c3d, 0xdcac, 0x6e75, 0xfee4, 0xefc0, 0x7f51, 0x44a8, 0xd439, 0xc51d, 0x558c, 0xe755, 0x77c4, 0x66e0, 0xf671, 0xa3c5, 0x3354, 0x2270, 0xb2e1, 0x0038, 0x90a9, 0x818d, 0x111c, 0xf67f, 0x66ee, 0x77ca, 0xe75b, 0x5582, 0xc513, 0xd437, 0x44a6, 0x1112, 0x8183, 0x90a7, 0x0036, 0xb2ef, 0x227e, 0x335a, 0xa3cb, 0x9832, 0x08a3, 0x1987, 0x8916, 0x3bcf, 0xab5e, 0xba7a, 0x2aeb, 0x7f5f, 0xefce, 0xfeea, 0x6e7b, 0xdca2, 0x4c33, 0x5d17, 0xcd86, ], [ 0x0000, 0x668c, 0xcd18, 0xab94, 0x3aa7, 0x5c2b, 0xf7bf, 0x9133, 0x754e, 0x13c2, 0xb856, 0xdeda, 0x4fe9, 0x2965, 0x82f1, 0xe47d, 0xea9c, 0x8c10, 0x2784, 0x4108, 0xd03b, 0xb6b7, 0x1d23, 0x7baf, 0x9fd2, 0xf95e, 0x52ca, 0x3446, 0xa575, 0xc3f9, 0x686d, 0x0ee1, 0x75af, 0x1323, 0xb8b7, 0xde3b, 0x4f08, 0x2984, 0x8210, 0xe49c, 0x00e1, 0x666d, 0xcdf9, 0xab75, 0x3a46, 0x5cca, 0xf75e, 0x91d2, 0x9f33, 0xf9bf, 0x522b, 0x34a7, 0xa594, 0xc318, 0x688c, 0x0e00, 0xea7d, 0x8cf1, 0x2765, 0x41e9, 0xd0da, 0xb656, 0x1dc2, 0x7b4e, 0xeb5e, 0x8dd2, 0x2646, 0x40ca, 0xd1f9, 0xb775, 0x1ce1, 0x7a6d, 0x9e10, 0xf89c, 0x5308, 0x3584, 0xa4b7, 0xc23b, 0x69af, 0x0f23, 0x01c2, 0x674e, 0xccda, 0xaa56, 0x3b65, 0x5de9, 0xf67d, 0x90f1, 0x748c, 0x1200, 0xb994, 0xdf18, 0x4e2b, 0x28a7, 0x8333, 0xe5bf, 0x9ef1, 0xf87d, 0x53e9, 0x3565, 0xa456, 0xc2da, 0x694e, 0x0fc2, 0xebbf, 0x8d33, 0x26a7, 0x402b, 0xd118, 0xb794, 0x1c00, 0x7a8c, 0x746d, 0x12e1, 0xb975, 0xdff9, 0x4eca, 0x2846, 0x83d2, 0xe55e, 0x0123, 0x67af, 0xcc3b, 0xaab7, 0x3b84, 0x5d08, 0xf69c, 0x9010, 0x762b, 0x10a7, 0xbb33, 0xddbf, 0x4c8c, 0x2a00, 0x8194, 0xe718, 0x0365, 0x65e9, 0xce7d, 0xa8f1, 0x39c2, 0x5f4e, 0xf4da, 0x9256, 0x9cb7, 0xfa3b, 0x51af, 0x3723, 0xa610, 0xc09c, 0x6b08, 0x0d84, 0xe9f9, 0x8f75, 0x24e1, 0x426d, 0xd35e, 0xb5d2, 0x1e46, 0x78ca, 0x0384, 0x6508, 0xce9c, 0xa810, 0x3923, 0x5faf, 0xf43b, 0x92b7, 0x76ca, 0x1046, 0xbbd2, 0xdd5e, 0x4c6d, 0x2ae1, 0x8175, 0xe7f9, 0xe918, 0x8f94, 0x2400, 0x428c, 0xd3bf, 0xb533, 0x1ea7, 0x782b, 0x9c56, 0xfada, 0x514e, 0x37c2, 0xa6f1, 0xc07d, 0x6be9, 0x0d65, 0x9d75, 0xfbf9, 0x506d, 0x36e1, 0xa7d2, 0xc15e, 0x6aca, 0x0c46, 0xe83b, 0x8eb7, 0x2523, 0x43af, 0xd29c, 0xb410, 0x1f84, 0x7908, 0x77e9, 0x1165, 0xbaf1, 0xdc7d, 0x4d4e, 0x2bc2, 0x8056, 0xe6da, 0x02a7, 0x642b, 0xcfbf, 0xa933, 0x3800, 0x5e8c, 0xf518, 0x9394, 0xe8da, 0x8e56, 0x25c2, 0x434e, 0xd27d, 0xb4f1, 0x1f65, 0x79e9, 0x9d94, 0xfb18, 0x508c, 0x3600, 0xa733, 0xc1bf, 0x6a2b, 0x0ca7, 0x0246, 0x64ca, 0xcf5e, 0xa9d2, 0x38e1, 0x5e6d, 0xf5f9, 0x9375, 0x7708, 0x1184, 0xba10, 0xdc9c, 0x4daf, 0x2b23, 0x80b7, 0xe63b, ], [ 0x0000, 0xec56, 0x783b, 0x946d, 0xf076, 0x1c20, 0x884d, 0x641b, 0x407b, 0xac2d, 0x3840, 0xd416, 0xb00d, 0x5c5b, 0xc836, 0x2460, 0x80f6, 0x6ca0, 0xf8cd, 0x149b, 0x7080, 0x9cd6, 0x08bb, 0xe4ed, 0xc08d, 0x2cdb, 0xb8b6, 0x54e0, 0x30fb, 0xdcad, 0x48c0, 0xa496, 0xa17b, 0x4d2d, 0xd940, 0x3516, 0x510d, 0xbd5b, 0x2936, 0xc560, 0xe100, 0x0d56, 0x993b, 0x756d, 0x1176, 0xfd20, 0x694d, 0x851b, 0x218d, 0xcddb, 0x59b6, 0xb5e0, 0xd1fb, 0x3dad, 0xa9c0, 0x4596, 0x61f6, 0x8da0, 0x19cd, 0xf59b, 0x9180, 0x7dd6, 0xe9bb, 0x05ed, 0xe261, 0x0e37, 0x9a5a, 0x760c, 0x1217, 0xfe41, 0x6a2c, 0x867a, 0xa21a, 0x4e4c, 0xda21, 0x3677, 0x526c, 0xbe3a, 0x2a57, 0xc601, 0x6297, 0x8ec1, 0x1aac, 0xf6fa, 0x92e1, 0x7eb7, 0xeada, 0x068c, 0x22ec, 0xceba, 0x5ad7, 0xb681, 0xd29a, 0x3ecc, 0xaaa1, 0x46f7, 0x431a, 0xaf4c, 0x3b21, 0xd777, 0xb36c, 0x5f3a, 0xcb57, 0x2701, 0x0361, 0xef37, 0x7b5a, 0x970c, 0xf317, 0x1f41, 0x8b2c, 0x677a, 0xc3ec, 0x2fba, 0xbbd7, 0x5781, 0x339a, 0xdfcc, 0x4ba1, 0xa7f7, 0x8397, 0x6fc1, 0xfbac, 0x17fa, 0x73e1, 0x9fb7, 0x0bda, 0xe78c, 0x6455, 0x8803, 0x1c6e, 0xf038, 0x9423, 0x7875, 0xec18, 0x004e, 0x242e, 0xc878, 0x5c15, 0xb043, 0xd458, 0x380e, 0xac63, 0x4035, 0xe4a3, 0x08f5, 0x9c98, 0x70ce, 0x14d5, 0xf883, 0x6cee, 0x80b8, 0xa4d8, 0x488e, 0xdce3, 0x30b5, 0x54ae, 0xb8f8, 0x2c95, 0xc0c3, 0xc52e, 0x2978, 0xbd15, 0x5143, 0x3558, 0xd90e, 0x4d63, 0xa135, 0x8555, 0x6903, 0xfd6e, 0x1138, 0x7523, 0x9975, 0x0d18, 0xe14e, 0x45d8, 0xa98e, 0x3de3, 0xd1b5, 0xb5ae, 0x59f8, 0xcd95, 0x21c3, 0x05a3, 0xe9f5, 0x7d98, 0x91ce, 0xf5d5, 0x1983, 0x8dee, 0x61b8, 0x8634, 0x6a62, 0xfe0f, 0x1259, 0x7642, 0x9a14, 0x0e79, 0xe22f, 0xc64f, 0x2a19, 0xbe74, 0x5222, 0x3639, 0xda6f, 0x4e02, 0xa254, 0x06c2, 0xea94, 0x7ef9, 0x92af, 0xf6b4, 0x1ae2, 0x8e8f, 0x62d9, 0x46b9, 0xaaef, 0x3e82, 0xd2d4, 0xb6cf, 0x5a99, 0xcef4, 0x22a2, 0x274f, 0xcb19, 0x5f74, 0xb322, 0xd739, 0x3b6f, 0xaf02, 0x4354, 0x6734, 0x8b62, 0x1f0f, 0xf359, 0x9742, 0x7b14, 0xef79, 0x032f, 0xa7b9, 0x4bef, 0xdf82, 0x33d4, 0x57cf, 0xbb99, 0x2ff4, 0xc3a2, 0xe7c2, 0x0b94, 0x9ff9, 0x73af, 0x17b4, 0xfbe2, 0x6f8f, 0x83d9, ], ]; pub static CRC16_TMS37157_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78, ], [ 0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70, 0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29, 0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333, 0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b, 0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272, 0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe, 0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6, 0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff, 0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5, 0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d, 0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04, 0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4, 0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc, 0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45, 0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f, 0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37, 0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e, 0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412, 0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b, 0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93, 0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49, 0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0, 0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8, 0xcc70, 0xe618, 0xffc0, ], [ 0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a, 0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28, 0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b, 0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d, 0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077, 0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa, 0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5, 0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6, 0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5, 0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32, 0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a, 0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388, 0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7, 0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567, 0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6, 0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510, 0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938, 0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327, 0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f, 0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9, 0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78, 0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8, 0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997, 0x734b, 0x9c2f, 0xc6f3, ], [ 0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae, 0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6, 0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53, 0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46, 0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768, 0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c, 0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183, 0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237, 0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092, 0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b, 0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d, 0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3, 0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c, 0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac, 0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1, 0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4, 0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32, 0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e, 0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878, 0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d, 0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10, 0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90, 0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f, 0xfca4, 0xd969, 0xc5d2, ], [ 0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8, 0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214, 0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091, 0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d, 0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49, 0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66, 0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612, 0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be, 0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b, 0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7, 0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3, 0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799, 0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed, 0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71, 0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4, 0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038, 0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c, 0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23, 0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37, 0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db, 0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e, 0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2, 0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896, 0xe3d2, 0xfe1e, 0xf55a, ], [ 0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e, 0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637, 0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560, 0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845, 0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a, 0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa, 0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325, 0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0, 0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7, 0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e, 0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459, 0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df, 0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00, 0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261, 0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e, 0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b, 0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c, 0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4, 0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3, 0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6, 0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9, 0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488, 0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157, 0xf57c, 0xf901, 0xfd2a, ], [ 0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957, 0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a, 0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383, 0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501, 0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87, 0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3, 0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c, 0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7, 0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e, 0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca, 0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0, 0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73, 0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c, 0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed, 0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8, 0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a, 0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900, 0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8, 0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2, 0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250, 0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55, 0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884, 0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb, 0xb91e, 0x1170, 0x8ea5, ], [ 0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3, 0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19, 0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0, 0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c, 0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039, 0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e, 0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93, 0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287, 0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e, 0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc, 0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5, 0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132, 0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef, 0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99, 0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc, 0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0, 0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9, 0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972, 0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b, 0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207, 0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552, 0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224, 0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9, 0xf946, 0x7396, 0xf229, ], [ 0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430, 0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c, 0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739, 0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4, 0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2, 0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e, 0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c, 0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015, 0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0, 0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88, 0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104, 0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0, 0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02, 0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974, 0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b, 0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6, 0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a, 0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac, 0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20, 0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed, 0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192, 0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4, 0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36, 0x27cb, 0xf1cc, 0xbc31, ], [ 0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167, 0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9, 0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5, 0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5, 0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635, 0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c, 0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce, 0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc, 0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580, 0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c, 0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5, 0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f, 0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d, 0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa, 0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf, 0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f, 0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76, 0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36, 0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df, 0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f, 0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea, 0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d, 0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df, 0x78f8, 0x0c91, 0x20b6, ], [ 0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788, 0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81, 0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a, 0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093, 0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8, 0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894, 0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa, 0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6, 0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad, 0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1, 0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260, 0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8, 0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6, 0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65, 0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4, 0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd, 0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c, 0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da, 0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b, 0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42, 0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3, 0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940, 0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e, 0x7bbf, 0x850c, 0xd09d, ], [ 0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857, 0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb, 0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0, 0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2, 0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5, 0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235, 0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa, 0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020, 0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b, 0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f, 0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4, 0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e, 0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1, 0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1, 0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006, 0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04, 0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff, 0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983, 0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78, 0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a, 0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd, 0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d, 0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852, 0x4d07, 0xcae9, 0x4fbc, ], [ 0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632, 0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9, 0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0, 0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f, 0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e, 0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc, 0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d, 0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2, 0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab, 0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880, 0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149, 0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855, 0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624, 0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7, 0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6, 0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629, 0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0, 0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea, 0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23, 0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc, 0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd, 0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e, 0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f, 0x74f2, 0x7a05, 0x7fa8, ], [ 0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7, 0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84, 0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf, 0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2, 0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05, 0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85, 0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5, 0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f, 0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04, 0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0, 0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64, 0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0, 0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0, 0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180, 0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8, 0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85, 0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701, 0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2, 0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366, 0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b, 0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63, 0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833, 0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03, 0xd4e9, 0x57d7, 0x293d, ], [ 0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126, 0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277, 0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9, 0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5, 0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0, 0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398, 0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279, 0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991, 0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f, 0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a, 0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd, 0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b, 0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea, 0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9, 0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15, 0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319, 0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e, 0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454, 0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623, 0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f, 0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3, 0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0, 0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231, 0x7a1b, 0xa265, 0xea4f, ], [ 0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5, 0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa, 0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01, 0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4, 0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da, 0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812, 0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4, 0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9, 0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932, 0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5, 0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f, 0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34, 0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882, 0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49, 0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776, 0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93, 0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69, 0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465, 0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f, 0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a, 0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545, 0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e, 0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038, 0xae28, 0x3409, 0xba19, ], ]; pub static CRC16_UMTS_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011, 0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022, 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072, 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041, 0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2, 0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1, 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1, 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082, 0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192, 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1, 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1, 0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2, 0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151, 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162, 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132, 0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101, 0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312, 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321, 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371, 0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342, 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1, 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2, 0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2, 0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381, 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291, 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2, 0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2, 0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1, 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252, 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261, 0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231, 0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202, ], [ 0x0000, 0x8603, 0x8c03, 0x0a00, 0x9803, 0x1e00, 0x1400, 0x9203, 0xb003, 0x3600, 0x3c00, 0xba03, 0x2800, 0xae03, 0xa403, 0x2200, 0xe003, 0x6600, 0x6c00, 0xea03, 0x7800, 0xfe03, 0xf403, 0x7200, 0x5000, 0xd603, 0xdc03, 0x5a00, 0xc803, 0x4e00, 0x4400, 0xc203, 0x4003, 0xc600, 0xcc00, 0x4a03, 0xd800, 0x5e03, 0x5403, 0xd200, 0xf000, 0x7603, 0x7c03, 0xfa00, 0x6803, 0xee00, 0xe400, 0x6203, 0xa000, 0x2603, 0x2c03, 0xaa00, 0x3803, 0xbe00, 0xb400, 0x3203, 0x1003, 0x9600, 0x9c00, 0x1a03, 0x8800, 0x0e03, 0x0403, 0x8200, 0x8006, 0x0605, 0x0c05, 0x8a06, 0x1805, 0x9e06, 0x9406, 0x1205, 0x3005, 0xb606, 0xbc06, 0x3a05, 0xa806, 0x2e05, 0x2405, 0xa206, 0x6005, 0xe606, 0xec06, 0x6a05, 0xf806, 0x7e05, 0x7405, 0xf206, 0xd006, 0x5605, 0x5c05, 0xda06, 0x4805, 0xce06, 0xc406, 0x4205, 0xc005, 0x4606, 0x4c06, 0xca05, 0x5806, 0xde05, 0xd405, 0x5206, 0x7006, 0xf605, 0xfc05, 0x7a06, 0xe805, 0x6e06, 0x6406, 0xe205, 0x2006, 0xa605, 0xac05, 0x2a06, 0xb805, 0x3e06, 0x3406, 0xb205, 0x9005, 0x1606, 0x1c06, 0x9a05, 0x0806, 0x8e05, 0x8405, 0x0206, 0x8009, 0x060a, 0x0c0a, 0x8a09, 0x180a, 0x9e09, 0x9409, 0x120a, 0x300a, 0xb609, 0xbc09, 0x3a0a, 0xa809, 0x2e0a, 0x240a, 0xa209, 0x600a, 0xe609, 0xec09, 0x6a0a, 0xf809, 0x7e0a, 0x740a, 0xf209, 0xd009, 0x560a, 0x5c0a, 0xda09, 0x480a, 0xce09, 0xc409, 0x420a, 0xc00a, 0x4609, 0x4c09, 0xca0a, 0x5809, 0xde0a, 0xd40a, 0x5209, 0x7009, 0xf60a, 0xfc0a, 0x7a09, 0xe80a, 0x6e09, 0x6409, 0xe20a, 0x2009, 0xa60a, 0xac0a, 0x2a09, 0xb80a, 0x3e09, 0x3409, 0xb20a, 0x900a, 0x1609, 0x1c09, 0x9a0a, 0x0809, 0x8e0a, 0x840a, 0x0209, 0x000f, 0x860c, 0x8c0c, 0x0a0f, 0x980c, 0x1e0f, 0x140f, 0x920c, 0xb00c, 0x360f, 0x3c0f, 0xba0c, 0x280f, 0xae0c, 0xa40c, 0x220f, 0xe00c, 0x660f, 0x6c0f, 0xea0c, 0x780f, 0xfe0c, 0xf40c, 0x720f, 0x500f, 0xd60c, 0xdc0c, 0x5a0f, 0xc80c, 0x4e0f, 0x440f, 0xc20c, 0x400c, 0xc60f, 0xcc0f, 0x4a0c, 0xd80f, 0x5e0c, 0x540c, 0xd20f, 0xf00f, 0x760c, 0x7c0c, 0xfa0f, 0x680c, 0xee0f, 0xe40f, 0x620c, 0xa00f, 0x260c, 0x2c0c, 0xaa0f, 0x380c, 0xbe0f, 0xb40f, 0x320c, 0x100c, 0x960f, 0x9c0f, 0x1a0c, 0x880f, 0x0e0c, 0x040c, 0x820f, ], [ 0x0000, 0x8017, 0x802b, 0x003c, 0x8053, 0x0044, 0x0078, 0x806f, 0x80a3, 0x00b4, 0x0088, 0x809f, 0x00f0, 0x80e7, 0x80db, 0x00cc, 0x8143, 0x0154, 0x0168, 0x817f, 0x0110, 0x8107, 0x813b, 0x012c, 0x01e0, 0x81f7, 0x81cb, 0x01dc, 0x81b3, 0x01a4, 0x0198, 0x818f, 0x8283, 0x0294, 0x02a8, 0x82bf, 0x02d0, 0x82c7, 0x82fb, 0x02ec, 0x0220, 0x8237, 0x820b, 0x021c, 0x8273, 0x0264, 0x0258, 0x824f, 0x03c0, 0x83d7, 0x83eb, 0x03fc, 0x8393, 0x0384, 0x03b8, 0x83af, 0x8363, 0x0374, 0x0348, 0x835f, 0x0330, 0x8327, 0x831b, 0x030c, 0x8503, 0x0514, 0x0528, 0x853f, 0x0550, 0x8547, 0x857b, 0x056c, 0x05a0, 0x85b7, 0x858b, 0x059c, 0x85f3, 0x05e4, 0x05d8, 0x85cf, 0x0440, 0x8457, 0x846b, 0x047c, 0x8413, 0x0404, 0x0438, 0x842f, 0x84e3, 0x04f4, 0x04c8, 0x84df, 0x04b0, 0x84a7, 0x849b, 0x048c, 0x0780, 0x8797, 0x87ab, 0x07bc, 0x87d3, 0x07c4, 0x07f8, 0x87ef, 0x8723, 0x0734, 0x0708, 0x871f, 0x0770, 0x8767, 0x875b, 0x074c, 0x86c3, 0x06d4, 0x06e8, 0x86ff, 0x0690, 0x8687, 0x86bb, 0x06ac, 0x0660, 0x8677, 0x864b, 0x065c, 0x8633, 0x0624, 0x0618, 0x860f, 0x8a03, 0x0a14, 0x0a28, 0x8a3f, 0x0a50, 0x8a47, 0x8a7b, 0x0a6c, 0x0aa0, 0x8ab7, 0x8a8b, 0x0a9c, 0x8af3, 0x0ae4, 0x0ad8, 0x8acf, 0x0b40, 0x8b57, 0x8b6b, 0x0b7c, 0x8b13, 0x0b04, 0x0b38, 0x8b2f, 0x8be3, 0x0bf4, 0x0bc8, 0x8bdf, 0x0bb0, 0x8ba7, 0x8b9b, 0x0b8c, 0x0880, 0x8897, 0x88ab, 0x08bc, 0x88d3, 0x08c4, 0x08f8, 0x88ef, 0x8823, 0x0834, 0x0808, 0x881f, 0x0870, 0x8867, 0x885b, 0x084c, 0x89c3, 0x09d4, 0x09e8, 0x89ff, 0x0990, 0x8987, 0x89bb, 0x09ac, 0x0960, 0x8977, 0x894b, 0x095c, 0x8933, 0x0924, 0x0918, 0x890f, 0x0f00, 0x8f17, 0x8f2b, 0x0f3c, 0x8f53, 0x0f44, 0x0f78, 0x8f6f, 0x8fa3, 0x0fb4, 0x0f88, 0x8f9f, 0x0ff0, 0x8fe7, 0x8fdb, 0x0fcc, 0x8e43, 0x0e54, 0x0e68, 0x8e7f, 0x0e10, 0x8e07, 0x8e3b, 0x0e2c, 0x0ee0, 0x8ef7, 0x8ecb, 0x0edc, 0x8eb3, 0x0ea4, 0x0e98, 0x8e8f, 0x8d83, 0x0d94, 0x0da8, 0x8dbf, 0x0dd0, 0x8dc7, 0x8dfb, 0x0dec, 0x0d20, 0x8d37, 0x8d0b, 0x0d1c, 0x8d73, 0x0d64, 0x0d58, 0x8d4f, 0x0cc0, 0x8cd7, 0x8ceb, 0x0cfc, 0x8c93, 0x0c84, 0x0cb8, 0x8caf, 0x8c63, 0x0c74, 0x0c48, 0x8c5f, 0x0c30, 0x8c27, 0x8c1b, 0x0c0c, ], [ 0x0000, 0x9403, 0xa803, 0x3c00, 0xd003, 0x4400, 0x7800, 0xec03, 0x2003, 0xb400, 0x8800, 0x1c03, 0xf000, 0x6403, 0x5803, 0xcc00, 0x4006, 0xd405, 0xe805, 0x7c06, 0x9005, 0x0406, 0x3806, 0xac05, 0x6005, 0xf406, 0xc806, 0x5c05, 0xb006, 0x2405, 0x1805, 0x8c06, 0x800c, 0x140f, 0x280f, 0xbc0c, 0x500f, 0xc40c, 0xf80c, 0x6c0f, 0xa00f, 0x340c, 0x080c, 0x9c0f, 0x700c, 0xe40f, 0xd80f, 0x4c0c, 0xc00a, 0x5409, 0x6809, 0xfc0a, 0x1009, 0x840a, 0xb80a, 0x2c09, 0xe009, 0x740a, 0x480a, 0xdc09, 0x300a, 0xa409, 0x9809, 0x0c0a, 0x801d, 0x141e, 0x281e, 0xbc1d, 0x501e, 0xc41d, 0xf81d, 0x6c1e, 0xa01e, 0x341d, 0x081d, 0x9c1e, 0x701d, 0xe41e, 0xd81e, 0x4c1d, 0xc01b, 0x5418, 0x6818, 0xfc1b, 0x1018, 0x841b, 0xb81b, 0x2c18, 0xe018, 0x741b, 0x481b, 0xdc18, 0x301b, 0xa418, 0x9818, 0x0c1b, 0x0011, 0x9412, 0xa812, 0x3c11, 0xd012, 0x4411, 0x7811, 0xec12, 0x2012, 0xb411, 0x8811, 0x1c12, 0xf011, 0x6412, 0x5812, 0xcc11, 0x4017, 0xd414, 0xe814, 0x7c17, 0x9014, 0x0417, 0x3817, 0xac14, 0x6014, 0xf417, 0xc817, 0x5c14, 0xb017, 0x2414, 0x1814, 0x8c17, 0x803f, 0x143c, 0x283c, 0xbc3f, 0x503c, 0xc43f, 0xf83f, 0x6c3c, 0xa03c, 0x343f, 0x083f, 0x9c3c, 0x703f, 0xe43c, 0xd83c, 0x4c3f, 0xc039, 0x543a, 0x683a, 0xfc39, 0x103a, 0x8439, 0xb839, 0x2c3a, 0xe03a, 0x7439, 0x4839, 0xdc3a, 0x3039, 0xa43a, 0x983a, 0x0c39, 0x0033, 0x9430, 0xa830, 0x3c33, 0xd030, 0x4433, 0x7833, 0xec30, 0x2030, 0xb433, 0x8833, 0x1c30, 0xf033, 0x6430, 0x5830, 0xcc33, 0x4035, 0xd436, 0xe836, 0x7c35, 0x9036, 0x0435, 0x3835, 0xac36, 0x6036, 0xf435, 0xc835, 0x5c36, 0xb035, 0x2436, 0x1836, 0x8c35, 0x0022, 0x9421, 0xa821, 0x3c22, 0xd021, 0x4422, 0x7822, 0xec21, 0x2021, 0xb422, 0x8822, 0x1c21, 0xf022, 0x6421, 0x5821, 0xcc22, 0x4024, 0xd427, 0xe827, 0x7c24, 0x9027, 0x0424, 0x3824, 0xac27, 0x6027, 0xf424, 0xc824, 0x5c27, 0xb024, 0x2427, 0x1827, 0x8c24, 0x802e, 0x142d, 0x282d, 0xbc2e, 0x502d, 0xc42e, 0xf82e, 0x6c2d, 0xa02d, 0x342e, 0x082e, 0x9c2d, 0x702e, 0xe42d, 0xd82d, 0x4c2e, 0xc028, 0x542b, 0x682b, 0xfc28, 0x102b, 0x8428, 0xb828, 0x2c2b, 0xe02b, 0x7428, 0x4828, 0xdc2b, 0x3028, 0xa42b, 0x982b, 0x0c28, ], [ 0x0000, 0x807b, 0x80f3, 0x0088, 0x81e3, 0x0198, 0x0110, 0x816b, 0x83c3, 0x03b8, 0x0330, 0x834b, 0x0220, 0x825b, 0x82d3, 0x02a8, 0x8783, 0x07f8, 0x0770, 0x870b, 0x0660, 0x861b, 0x8693, 0x06e8, 0x0440, 0x843b, 0x84b3, 0x04c8, 0x85a3, 0x05d8, 0x0550, 0x852b, 0x8f03, 0x0f78, 0x0ff0, 0x8f8b, 0x0ee0, 0x8e9b, 0x8e13, 0x0e68, 0x0cc0, 0x8cbb, 0x8c33, 0x0c48, 0x8d23, 0x0d58, 0x0dd0, 0x8dab, 0x0880, 0x88fb, 0x8873, 0x0808, 0x8963, 0x0918, 0x0990, 0x89eb, 0x8b43, 0x0b38, 0x0bb0, 0x8bcb, 0x0aa0, 0x8adb, 0x8a53, 0x0a28, 0x9e03, 0x1e78, 0x1ef0, 0x9e8b, 0x1fe0, 0x9f9b, 0x9f13, 0x1f68, 0x1dc0, 0x9dbb, 0x9d33, 0x1d48, 0x9c23, 0x1c58, 0x1cd0, 0x9cab, 0x1980, 0x99fb, 0x9973, 0x1908, 0x9863, 0x1818, 0x1890, 0x98eb, 0x9a43, 0x1a38, 0x1ab0, 0x9acb, 0x1ba0, 0x9bdb, 0x9b53, 0x1b28, 0x1100, 0x917b, 0x91f3, 0x1188, 0x90e3, 0x1098, 0x1010, 0x906b, 0x92c3, 0x12b8, 0x1230, 0x924b, 0x1320, 0x935b, 0x93d3, 0x13a8, 0x9683, 0x16f8, 0x1670, 0x960b, 0x1760, 0x971b, 0x9793, 0x17e8, 0x1540, 0x953b, 0x95b3, 0x15c8, 0x94a3, 0x14d8, 0x1450, 0x942b, 0xbc03, 0x3c78, 0x3cf0, 0xbc8b, 0x3de0, 0xbd9b, 0xbd13, 0x3d68, 0x3fc0, 0xbfbb, 0xbf33, 0x3f48, 0xbe23, 0x3e58, 0x3ed0, 0xbeab, 0x3b80, 0xbbfb, 0xbb73, 0x3b08, 0xba63, 0x3a18, 0x3a90, 0xbaeb, 0xb843, 0x3838, 0x38b0, 0xb8cb, 0x39a0, 0xb9db, 0xb953, 0x3928, 0x3300, 0xb37b, 0xb3f3, 0x3388, 0xb2e3, 0x3298, 0x3210, 0xb26b, 0xb0c3, 0x30b8, 0x3030, 0xb04b, 0x3120, 0xb15b, 0xb1d3, 0x31a8, 0xb483, 0x34f8, 0x3470, 0xb40b, 0x3560, 0xb51b, 0xb593, 0x35e8, 0x3740, 0xb73b, 0xb7b3, 0x37c8, 0xb6a3, 0x36d8, 0x3650, 0xb62b, 0x2200, 0xa27b, 0xa2f3, 0x2288, 0xa3e3, 0x2398, 0x2310, 0xa36b, 0xa1c3, 0x21b8, 0x2130, 0xa14b, 0x2020, 0xa05b, 0xa0d3, 0x20a8, 0xa583, 0x25f8, 0x2570, 0xa50b, 0x2460, 0xa41b, 0xa493, 0x24e8, 0x2640, 0xa63b, 0xa6b3, 0x26c8, 0xa7a3, 0x27d8, 0x2750, 0xa72b, 0xad03, 0x2d78, 0x2df0, 0xad8b, 0x2ce0, 0xac9b, 0xac13, 0x2c68, 0x2ec0, 0xaebb, 0xae33, 0x2e48, 0xaf23, 0x2f58, 0x2fd0, 0xafab, 0x2a80, 0xaafb, 0xaa73, 0x2a08, 0xab63, 0x2b18, 0x2b90, 0xabeb, 0xa943, 0x2938, 0x29b0, 0xa9cb, 0x28a0, 0xa8db, 0xa853, 0x2828, ], [ 0x0000, 0xf803, 0x7003, 0x8800, 0xe006, 0x1805, 0x9005, 0x6806, 0x4009, 0xb80a, 0x300a, 0xc809, 0xa00f, 0x580c, 0xd00c, 0x280f, 0x8012, 0x7811, 0xf011, 0x0812, 0x6014, 0x9817, 0x1017, 0xe814, 0xc01b, 0x3818, 0xb018, 0x481b, 0x201d, 0xd81e, 0x501e, 0xa81d, 0x8021, 0x7822, 0xf022, 0x0821, 0x6027, 0x9824, 0x1024, 0xe827, 0xc028, 0x382b, 0xb02b, 0x4828, 0x202e, 0xd82d, 0x502d, 0xa82e, 0x0033, 0xf830, 0x7030, 0x8833, 0xe035, 0x1836, 0x9036, 0x6835, 0x403a, 0xb839, 0x3039, 0xc83a, 0xa03c, 0x583f, 0xd03f, 0x283c, 0x8047, 0x7844, 0xf044, 0x0847, 0x6041, 0x9842, 0x1042, 0xe841, 0xc04e, 0x384d, 0xb04d, 0x484e, 0x2048, 0xd84b, 0x504b, 0xa848, 0x0055, 0xf856, 0x7056, 0x8855, 0xe053, 0x1850, 0x9050, 0x6853, 0x405c, 0xb85f, 0x305f, 0xc85c, 0xa05a, 0x5859, 0xd059, 0x285a, 0x0066, 0xf865, 0x7065, 0x8866, 0xe060, 0x1863, 0x9063, 0x6860, 0x406f, 0xb86c, 0x306c, 0xc86f, 0xa069, 0x586a, 0xd06a, 0x2869, 0x8074, 0x7877, 0xf077, 0x0874, 0x6072, 0x9871, 0x1071, 0xe872, 0xc07d, 0x387e, 0xb07e, 0x487d, 0x207b, 0xd878, 0x5078, 0xa87b, 0x808b, 0x7888, 0xf088, 0x088b, 0x608d, 0x988e, 0x108e, 0xe88d, 0xc082, 0x3881, 0xb081, 0x4882, 0x2084, 0xd887, 0x5087, 0xa884, 0x0099, 0xf89a, 0x709a, 0x8899, 0xe09f, 0x189c, 0x909c, 0x689f, 0x4090, 0xb893, 0x3093, 0xc890, 0xa096, 0x5895, 0xd095, 0x2896, 0x00aa, 0xf8a9, 0x70a9, 0x88aa, 0xe0ac, 0x18af, 0x90af, 0x68ac, 0x40a3, 0xb8a0, 0x30a0, 0xc8a3, 0xa0a5, 0x58a6, 0xd0a6, 0x28a5, 0x80b8, 0x78bb, 0xf0bb, 0x08b8, 0x60be, 0x98bd, 0x10bd, 0xe8be, 0xc0b1, 0x38b2, 0xb0b2, 0x48b1, 0x20b7, 0xd8b4, 0x50b4, 0xa8b7, 0x00cc, 0xf8cf, 0x70cf, 0x88cc, 0xe0ca, 0x18c9, 0x90c9, 0x68ca, 0x40c5, 0xb8c6, 0x30c6, 0xc8c5, 0xa0c3, 0x58c0, 0xd0c0, 0x28c3, 0x80de, 0x78dd, 0xf0dd, 0x08de, 0x60d8, 0x98db, 0x10db, 0xe8d8, 0xc0d7, 0x38d4, 0xb0d4, 0x48d7, 0x20d1, 0xd8d2, 0x50d2, 0xa8d1, 0x80ed, 0x78ee, 0xf0ee, 0x08ed, 0x60eb, 0x98e8, 0x10e8, 0xe8eb, 0xc0e4, 0x38e7, 0xb0e7, 0x48e4, 0x20e2, 0xd8e1, 0x50e1, 0xa8e2, 0x00ff, 0xf8fc, 0x70fc, 0x88ff, 0xe0f9, 0x18fa, 0x90fa, 0x68f9, 0x40f6, 0xb8f5, 0x30f5, 0xc8f6, 0xa0f0, 0x58f3, 0xd0f3, 0x28f0, ], [ 0x0000, 0x8113, 0x8223, 0x0330, 0x8443, 0x0550, 0x0660, 0x8773, 0x8883, 0x0990, 0x0aa0, 0x8bb3, 0x0cc0, 0x8dd3, 0x8ee3, 0x0ff0, 0x9103, 0x1010, 0x1320, 0x9233, 0x1540, 0x9453, 0x9763, 0x1670, 0x1980, 0x9893, 0x9ba3, 0x1ab0, 0x9dc3, 0x1cd0, 0x1fe0, 0x9ef3, 0xa203, 0x2310, 0x2020, 0xa133, 0x2640, 0xa753, 0xa463, 0x2570, 0x2a80, 0xab93, 0xa8a3, 0x29b0, 0xaec3, 0x2fd0, 0x2ce0, 0xadf3, 0x3300, 0xb213, 0xb123, 0x3030, 0xb743, 0x3650, 0x3560, 0xb473, 0xbb83, 0x3a90, 0x39a0, 0xb8b3, 0x3fc0, 0xbed3, 0xbde3, 0x3cf0, 0xc403, 0x4510, 0x4620, 0xc733, 0x4040, 0xc153, 0xc263, 0x4370, 0x4c80, 0xcd93, 0xcea3, 0x4fb0, 0xc8c3, 0x49d0, 0x4ae0, 0xcbf3, 0x5500, 0xd413, 0xd723, 0x5630, 0xd143, 0x5050, 0x5360, 0xd273, 0xdd83, 0x5c90, 0x5fa0, 0xdeb3, 0x59c0, 0xd8d3, 0xdbe3, 0x5af0, 0x6600, 0xe713, 0xe423, 0x6530, 0xe243, 0x6350, 0x6060, 0xe173, 0xee83, 0x6f90, 0x6ca0, 0xedb3, 0x6ac0, 0xebd3, 0xe8e3, 0x69f0, 0xf703, 0x7610, 0x7520, 0xf433, 0x7340, 0xf253, 0xf163, 0x7070, 0x7f80, 0xfe93, 0xfda3, 0x7cb0, 0xfbc3, 0x7ad0, 0x79e0, 0xf8f3, 0x0803, 0x8910, 0x8a20, 0x0b33, 0x8c40, 0x0d53, 0x0e63, 0x8f70, 0x8080, 0x0193, 0x02a3, 0x83b0, 0x04c3, 0x85d0, 0x86e0, 0x07f3, 0x9900, 0x1813, 0x1b23, 0x9a30, 0x1d43, 0x9c50, 0x9f60, 0x1e73, 0x1183, 0x9090, 0x93a0, 0x12b3, 0x95c0, 0x14d3, 0x17e3, 0x96f0, 0xaa00, 0x2b13, 0x2823, 0xa930, 0x2e43, 0xaf50, 0xac60, 0x2d73, 0x2283, 0xa390, 0xa0a0, 0x21b3, 0xa6c0, 0x27d3, 0x24e3, 0xa5f0, 0x3b03, 0xba10, 0xb920, 0x3833, 0xbf40, 0x3e53, 0x3d63, 0xbc70, 0xb380, 0x3293, 0x31a3, 0xb0b0, 0x37c3, 0xb6d0, 0xb5e0, 0x34f3, 0xcc00, 0x4d13, 0x4e23, 0xcf30, 0x4843, 0xc950, 0xca60, 0x4b73, 0x4483, 0xc590, 0xc6a0, 0x47b3, 0xc0c0, 0x41d3, 0x42e3, 0xc3f0, 0x5d03, 0xdc10, 0xdf20, 0x5e33, 0xd940, 0x5853, 0x5b63, 0xda70, 0xd580, 0x5493, 0x57a3, 0xd6b0, 0x51c3, 0xd0d0, 0xd3e0, 0x52f3, 0x6e03, 0xef10, 0xec20, 0x6d33, 0xea40, 0x6b53, 0x6863, 0xe970, 0xe680, 0x6793, 0x64a3, 0xe5b0, 0x62c3, 0xe3d0, 0xe0e0, 0x61f3, 0xff00, 0x7e13, 0x7d23, 0xfc30, 0x7b43, 0xfa50, 0xf960, 0x7873, 0x7783, 0xf690, 0xf5a0, 0x74b3, 0xf3c0, 0x72d3, 0x71e3, 0xf0f0, ], [ 0x0000, 0x1006, 0x200c, 0x300a, 0x4018, 0x501e, 0x6014, 0x7012, 0x8030, 0x9036, 0xa03c, 0xb03a, 0xc028, 0xd02e, 0xe024, 0xf022, 0x8065, 0x9063, 0xa069, 0xb06f, 0xc07d, 0xd07b, 0xe071, 0xf077, 0x0055, 0x1053, 0x2059, 0x305f, 0x404d, 0x504b, 0x6041, 0x7047, 0x80cf, 0x90c9, 0xa0c3, 0xb0c5, 0xc0d7, 0xd0d1, 0xe0db, 0xf0dd, 0x00ff, 0x10f9, 0x20f3, 0x30f5, 0x40e7, 0x50e1, 0x60eb, 0x70ed, 0x00aa, 0x10ac, 0x20a6, 0x30a0, 0x40b2, 0x50b4, 0x60be, 0x70b8, 0x809a, 0x909c, 0xa096, 0xb090, 0xc082, 0xd084, 0xe08e, 0xf088, 0x819b, 0x919d, 0xa197, 0xb191, 0xc183, 0xd185, 0xe18f, 0xf189, 0x01ab, 0x11ad, 0x21a7, 0x31a1, 0x41b3, 0x51b5, 0x61bf, 0x71b9, 0x01fe, 0x11f8, 0x21f2, 0x31f4, 0x41e6, 0x51e0, 0x61ea, 0x71ec, 0x81ce, 0x91c8, 0xa1c2, 0xb1c4, 0xc1d6, 0xd1d0, 0xe1da, 0xf1dc, 0x0154, 0x1152, 0x2158, 0x315e, 0x414c, 0x514a, 0x6140, 0x7146, 0x8164, 0x9162, 0xa168, 0xb16e, 0xc17c, 0xd17a, 0xe170, 0xf176, 0x8131, 0x9137, 0xa13d, 0xb13b, 0xc129, 0xd12f, 0xe125, 0xf123, 0x0101, 0x1107, 0x210d, 0x310b, 0x4119, 0x511f, 0x6115, 0x7113, 0x8333, 0x9335, 0xa33f, 0xb339, 0xc32b, 0xd32d, 0xe327, 0xf321, 0x0303, 0x1305, 0x230f, 0x3309, 0x431b, 0x531d, 0x6317, 0x7311, 0x0356, 0x1350, 0x235a, 0x335c, 0x434e, 0x5348, 0x6342, 0x7344, 0x8366, 0x9360, 0xa36a, 0xb36c, 0xc37e, 0xd378, 0xe372, 0xf374, 0x03fc, 0x13fa, 0x23f0, 0x33f6, 0x43e4, 0x53e2, 0x63e8, 0x73ee, 0x83cc, 0x93ca, 0xa3c0, 0xb3c6, 0xc3d4, 0xd3d2, 0xe3d8, 0xf3de, 0x8399, 0x939f, 0xa395, 0xb393, 0xc381, 0xd387, 0xe38d, 0xf38b, 0x03a9, 0x13af, 0x23a5, 0x33a3, 0x43b1, 0x53b7, 0x63bd, 0x73bb, 0x02a8, 0x12ae, 0x22a4, 0x32a2, 0x42b0, 0x52b6, 0x62bc, 0x72ba, 0x8298, 0x929e, 0xa294, 0xb292, 0xc280, 0xd286, 0xe28c, 0xf28a, 0x82cd, 0x92cb, 0xa2c1, 0xb2c7, 0xc2d5, 0xd2d3, 0xe2d9, 0xf2df, 0x02fd, 0x12fb, 0x22f1, 0x32f7, 0x42e5, 0x52e3, 0x62e9, 0x72ef, 0x8267, 0x9261, 0xa26b, 0xb26d, 0xc27f, 0xd279, 0xe273, 0xf275, 0x0257, 0x1251, 0x225b, 0x325d, 0x424f, 0x5249, 0x6243, 0x7245, 0x0202, 0x1204, 0x220e, 0x3208, 0x421a, 0x521c, 0x6216, 0x7210, 0x8232, 0x9234, 0xa23e, 0xb238, 0xc22a, 0xd22c, 0xe226, 0xf220, ], [ 0x0000, 0x8663, 0x8cc3, 0x0aa0, 0x9983, 0x1fe0, 0x1540, 0x9323, 0xb303, 0x3560, 0x3fc0, 0xb9a3, 0x2a80, 0xace3, 0xa643, 0x2020, 0xe603, 0x6060, 0x6ac0, 0xeca3, 0x7f80, 0xf9e3, 0xf343, 0x7520, 0x5500, 0xd363, 0xd9c3, 0x5fa0, 0xcc83, 0x4ae0, 0x4040, 0xc623, 0x4c03, 0xca60, 0xc0c0, 0x46a3, 0xd580, 0x53e3, 0x5943, 0xdf20, 0xff00, 0x7963, 0x73c3, 0xf5a0, 0x6683, 0xe0e0, 0xea40, 0x6c23, 0xaa00, 0x2c63, 0x26c3, 0xa0a0, 0x3383, 0xb5e0, 0xbf40, 0x3923, 0x1903, 0x9f60, 0x95c0, 0x13a3, 0x8080, 0x06e3, 0x0c43, 0x8a20, 0x9806, 0x1e65, 0x14c5, 0x92a6, 0x0185, 0x87e6, 0x8d46, 0x0b25, 0x2b05, 0xad66, 0xa7c6, 0x21a5, 0xb286, 0x34e5, 0x3e45, 0xb826, 0x7e05, 0xf866, 0xf2c6, 0x74a5, 0xe786, 0x61e5, 0x6b45, 0xed26, 0xcd06, 0x4b65, 0x41c5, 0xc7a6, 0x5485, 0xd2e6, 0xd846, 0x5e25, 0xd405, 0x5266, 0x58c6, 0xdea5, 0x4d86, 0xcbe5, 0xc145, 0x4726, 0x6706, 0xe165, 0xebc5, 0x6da6, 0xfe85, 0x78e6, 0x7246, 0xf425, 0x3206, 0xb465, 0xbec5, 0x38a6, 0xab85, 0x2de6, 0x2746, 0xa125, 0x8105, 0x0766, 0x0dc6, 0x8ba5, 0x1886, 0x9ee5, 0x9445, 0x1226, 0xb009, 0x366a, 0x3cca, 0xbaa9, 0x298a, 0xafe9, 0xa549, 0x232a, 0x030a, 0x8569, 0x8fc9, 0x09aa, 0x9a89, 0x1cea, 0x164a, 0x9029, 0x560a, 0xd069, 0xdac9, 0x5caa, 0xcf89, 0x49ea, 0x434a, 0xc529, 0xe509, 0x636a, 0x69ca, 0xefa9, 0x7c8a, 0xfae9, 0xf049, 0x762a, 0xfc0a, 0x7a69, 0x70c9, 0xf6aa, 0x6589, 0xe3ea, 0xe94a, 0x6f29, 0x4f09, 0xc96a, 0xc3ca, 0x45a9, 0xd68a, 0x50e9, 0x5a49, 0xdc2a, 0x1a09, 0x9c6a, 0x96ca, 0x10a9, 0x838a, 0x05e9, 0x0f49, 0x892a, 0xa90a, 0x2f69, 0x25c9, 0xa3aa, 0x3089, 0xb6ea, 0xbc4a, 0x3a29, 0x280f, 0xae6c, 0xa4cc, 0x22af, 0xb18c, 0x37ef, 0x3d4f, 0xbb2c, 0x9b0c, 0x1d6f, 0x17cf, 0x91ac, 0x028f, 0x84ec, 0x8e4c, 0x082f, 0xce0c, 0x486f, 0x42cf, 0xc4ac, 0x578f, 0xd1ec, 0xdb4c, 0x5d2f, 0x7d0f, 0xfb6c, 0xf1cc, 0x77af, 0xe48c, 0x62ef, 0x684f, 0xee2c, 0x640c, 0xe26f, 0xe8cf, 0x6eac, 0xfd8f, 0x7bec, 0x714c, 0xf72f, 0xd70f, 0x516c, 0x5bcc, 0xddaf, 0x4e8c, 0xc8ef, 0xc24f, 0x442c, 0x820f, 0x046c, 0x0ecc, 0x88af, 0x1b8c, 0x9def, 0x974f, 0x112c, 0x310c, 0xb76f, 0xbdcf, 0x3bac, 0xa88f, 0x2eec, 0x244c, 0xa22f, ], [ 0x0000, 0xe017, 0x402b, 0xa03c, 0x8056, 0x6041, 0xc07d, 0x206a, 0x80a9, 0x60be, 0xc082, 0x2095, 0x00ff, 0xe0e8, 0x40d4, 0xa0c3, 0x8157, 0x6140, 0xc17c, 0x216b, 0x0101, 0xe116, 0x412a, 0xa13d, 0x01fe, 0xe1e9, 0x41d5, 0xa1c2, 0x81a8, 0x61bf, 0xc183, 0x2194, 0x82ab, 0x62bc, 0xc280, 0x2297, 0x02fd, 0xe2ea, 0x42d6, 0xa2c1, 0x0202, 0xe215, 0x4229, 0xa23e, 0x8254, 0x6243, 0xc27f, 0x2268, 0x03fc, 0xe3eb, 0x43d7, 0xa3c0, 0x83aa, 0x63bd, 0xc381, 0x2396, 0x8355, 0x6342, 0xc37e, 0x2369, 0x0303, 0xe314, 0x4328, 0xa33f, 0x8553, 0x6544, 0xc578, 0x256f, 0x0505, 0xe512, 0x452e, 0xa539, 0x05fa, 0xe5ed, 0x45d1, 0xa5c6, 0x85ac, 0x65bb, 0xc587, 0x2590, 0x0404, 0xe413, 0x442f, 0xa438, 0x8452, 0x6445, 0xc479, 0x246e, 0x84ad, 0x64ba, 0xc486, 0x2491, 0x04fb, 0xe4ec, 0x44d0, 0xa4c7, 0x07f8, 0xe7ef, 0x47d3, 0xa7c4, 0x87ae, 0x67b9, 0xc785, 0x2792, 0x8751, 0x6746, 0xc77a, 0x276d, 0x0707, 0xe710, 0x472c, 0xa73b, 0x86af, 0x66b8, 0xc684, 0x2693, 0x06f9, 0xe6ee, 0x46d2, 0xa6c5, 0x0606, 0xe611, 0x462d, 0xa63a, 0x8650, 0x6647, 0xc67b, 0x266c, 0x8aa3, 0x6ab4, 0xca88, 0x2a9f, 0x0af5, 0xeae2, 0x4ade, 0xaac9, 0x0a0a, 0xea1d, 0x4a21, 0xaa36, 0x8a5c, 0x6a4b, 0xca77, 0x2a60, 0x0bf4, 0xebe3, 0x4bdf, 0xabc8, 0x8ba2, 0x6bb5, 0xcb89, 0x2b9e, 0x8b5d, 0x6b4a, 0xcb76, 0x2b61, 0x0b0b, 0xeb1c, 0x4b20, 0xab37, 0x0808, 0xe81f, 0x4823, 0xa834, 0x885e, 0x6849, 0xc875, 0x2862, 0x88a1, 0x68b6, 0xc88a, 0x289d, 0x08f7, 0xe8e0, 0x48dc, 0xa8cb, 0x895f, 0x6948, 0xc974, 0x2963, 0x0909, 0xe91e, 0x4922, 0xa935, 0x09f6, 0xe9e1, 0x49dd, 0xa9ca, 0x89a0, 0x69b7, 0xc98b, 0x299c, 0x0ff0, 0xefe7, 0x4fdb, 0xafcc, 0x8fa6, 0x6fb1, 0xcf8d, 0x2f9a, 0x8f59, 0x6f4e, 0xcf72, 0x2f65, 0x0f0f, 0xef18, 0x4f24, 0xaf33, 0x8ea7, 0x6eb0, 0xce8c, 0x2e9b, 0x0ef1, 0xeee6, 0x4eda, 0xaecd, 0x0e0e, 0xee19, 0x4e25, 0xae32, 0x8e58, 0x6e4f, 0xce73, 0x2e64, 0x8d5b, 0x6d4c, 0xcd70, 0x2d67, 0x0d0d, 0xed1a, 0x4d26, 0xad31, 0x0df2, 0xede5, 0x4dd9, 0xadce, 0x8da4, 0x6db3, 0xcd8f, 0x2d98, 0x0c0c, 0xec1b, 0x4c27, 0xac30, 0x8c5a, 0x6c4d, 0xcc71, 0x2c66, 0x8ca5, 0x6cb2, 0xcc8e, 0x2c99, 0x0cf3, 0xece4, 0x4cd8, 0xaccf, ], [ 0x0000, 0x9543, 0xaa83, 0x3fc0, 0xd503, 0x4040, 0x7f80, 0xeac3, 0x2a03, 0xbf40, 0x8080, 0x15c3, 0xff00, 0x6a43, 0x5583, 0xc0c0, 0x5406, 0xc145, 0xfe85, 0x6bc6, 0x8105, 0x1446, 0x2b86, 0xbec5, 0x7e05, 0xeb46, 0xd486, 0x41c5, 0xab06, 0x3e45, 0x0185, 0x94c6, 0xa80c, 0x3d4f, 0x028f, 0x97cc, 0x7d0f, 0xe84c, 0xd78c, 0x42cf, 0x820f, 0x174c, 0x288c, 0xbdcf, 0x570c, 0xc24f, 0xfd8f, 0x68cc, 0xfc0a, 0x6949, 0x5689, 0xc3ca, 0x2909, 0xbc4a, 0x838a, 0x16c9, 0xd609, 0x434a, 0x7c8a, 0xe9c9, 0x030a, 0x9649, 0xa989, 0x3cca, 0xd01d, 0x455e, 0x7a9e, 0xefdd, 0x051e, 0x905d, 0xaf9d, 0x3ade, 0xfa1e, 0x6f5d, 0x509d, 0xc5de, 0x2f1d, 0xba5e, 0x859e, 0x10dd, 0x841b, 0x1158, 0x2e98, 0xbbdb, 0x5118, 0xc45b, 0xfb9b, 0x6ed8, 0xae18, 0x3b5b, 0x049b, 0x91d8, 0x7b1b, 0xee58, 0xd198, 0x44db, 0x7811, 0xed52, 0xd292, 0x47d1, 0xad12, 0x3851, 0x0791, 0x92d2, 0x5212, 0xc751, 0xf891, 0x6dd2, 0x8711, 0x1252, 0x2d92, 0xb8d1, 0x2c17, 0xb954, 0x8694, 0x13d7, 0xf914, 0x6c57, 0x5397, 0xc6d4, 0x0614, 0x9357, 0xac97, 0x39d4, 0xd317, 0x4654, 0x7994, 0xecd7, 0x203f, 0xb57c, 0x8abc, 0x1fff, 0xf53c, 0x607f, 0x5fbf, 0xcafc, 0x0a3c, 0x9f7f, 0xa0bf, 0x35fc, 0xdf3f, 0x4a7c, 0x75bc, 0xe0ff, 0x7439, 0xe17a, 0xdeba, 0x4bf9, 0xa13a, 0x3479, 0x0bb9, 0x9efa, 0x5e3a, 0xcb79, 0xf4b9, 0x61fa, 0x8b39, 0x1e7a, 0x21ba, 0xb4f9, 0x8833, 0x1d70, 0x22b0, 0xb7f3, 0x5d30, 0xc873, 0xf7b3, 0x62f0, 0xa230, 0x3773, 0x08b3, 0x9df0, 0x7733, 0xe270, 0xddb0, 0x48f3, 0xdc35, 0x4976, 0x76b6, 0xe3f5, 0x0936, 0x9c75, 0xa3b5, 0x36f6, 0xf636, 0x6375, 0x5cb5, 0xc9f6, 0x2335, 0xb676, 0x89b6, 0x1cf5, 0xf022, 0x6561, 0x5aa1, 0xcfe2, 0x2521, 0xb062, 0x8fa2, 0x1ae1, 0xda21, 0x4f62, 0x70a2, 0xe5e1, 0x0f22, 0x9a61, 0xa5a1, 0x30e2, 0xa424, 0x3167, 0x0ea7, 0x9be4, 0x7127, 0xe464, 0xdba4, 0x4ee7, 0x8e27, 0x1b64, 0x24a4, 0xb1e7, 0x5b24, 0xce67, 0xf1a7, 0x64e4, 0x582e, 0xcd6d, 0xf2ad, 0x67ee, 0x8d2d, 0x186e, 0x27ae, 0xb2ed, 0x722d, 0xe76e, 0xd8ae, 0x4ded, 0xa72e, 0x326d, 0x0dad, 0x98ee, 0x0c28, 0x996b, 0xa6ab, 0x33e8, 0xd92b, 0x4c68, 0x73a8, 0xe6eb, 0x262b, 0xb368, 0x8ca8, 0x19eb, 0xf328, 0x666b, 0x59ab, 0xcce8, ], [ 0x0000, 0x407e, 0x80fc, 0xc082, 0x81fd, 0xc183, 0x0101, 0x417f, 0x83ff, 0xc381, 0x0303, 0x437d, 0x0202, 0x427c, 0x82fe, 0xc280, 0x87fb, 0xc785, 0x0707, 0x4779, 0x0606, 0x4678, 0x86fa, 0xc684, 0x0404, 0x447a, 0x84f8, 0xc486, 0x85f9, 0xc587, 0x0505, 0x457b, 0x8ff3, 0xcf8d, 0x0f0f, 0x4f71, 0x0e0e, 0x4e70, 0x8ef2, 0xce8c, 0x0c0c, 0x4c72, 0x8cf0, 0xcc8e, 0x8df1, 0xcd8f, 0x0d0d, 0x4d73, 0x0808, 0x4876, 0x88f4, 0xc88a, 0x89f5, 0xc98b, 0x0909, 0x4977, 0x8bf7, 0xcb89, 0x0b0b, 0x4b75, 0x0a0a, 0x4a74, 0x8af6, 0xca88, 0x9fe3, 0xdf9d, 0x1f1f, 0x5f61, 0x1e1e, 0x5e60, 0x9ee2, 0xde9c, 0x1c1c, 0x5c62, 0x9ce0, 0xdc9e, 0x9de1, 0xdd9f, 0x1d1d, 0x5d63, 0x1818, 0x5866, 0x98e4, 0xd89a, 0x99e5, 0xd99b, 0x1919, 0x5967, 0x9be7, 0xdb99, 0x1b1b, 0x5b65, 0x1a1a, 0x5a64, 0x9ae6, 0xda98, 0x1010, 0x506e, 0x90ec, 0xd092, 0x91ed, 0xd193, 0x1111, 0x516f, 0x93ef, 0xd391, 0x1313, 0x536d, 0x1212, 0x526c, 0x92ee, 0xd290, 0x97eb, 0xd795, 0x1717, 0x5769, 0x1616, 0x5668, 0x96ea, 0xd694, 0x1414, 0x546a, 0x94e8, 0xd496, 0x95e9, 0xd597, 0x1515, 0x556b, 0xbfc3, 0xffbd, 0x3f3f, 0x7f41, 0x3e3e, 0x7e40, 0xbec2, 0xfebc, 0x3c3c, 0x7c42, 0xbcc0, 0xfcbe, 0xbdc1, 0xfdbf, 0x3d3d, 0x7d43, 0x3838, 0x7846, 0xb8c4, 0xf8ba, 0xb9c5, 0xf9bb, 0x3939, 0x7947, 0xbbc7, 0xfbb9, 0x3b3b, 0x7b45, 0x3a3a, 0x7a44, 0xbac6, 0xfab8, 0x3030, 0x704e, 0xb0cc, 0xf0b2, 0xb1cd, 0xf1b3, 0x3131, 0x714f, 0xb3cf, 0xf3b1, 0x3333, 0x734d, 0x3232, 0x724c, 0xb2ce, 0xf2b0, 0xb7cb, 0xf7b5, 0x3737, 0x7749, 0x3636, 0x7648, 0xb6ca, 0xf6b4, 0x3434, 0x744a, 0xb4c8, 0xf4b6, 0xb5c9, 0xf5b7, 0x3535, 0x754b, 0x2020, 0x605e, 0xa0dc, 0xe0a2, 0xa1dd, 0xe1a3, 0x2121, 0x615f, 0xa3df, 0xe3a1, 0x2323, 0x635d, 0x2222, 0x625c, 0xa2de, 0xe2a0, 0xa7db, 0xe7a5, 0x2727, 0x6759, 0x2626, 0x6658, 0xa6da, 0xe6a4, 0x2424, 0x645a, 0xa4d8, 0xe4a6, 0xa5d9, 0xe5a7, 0x2525, 0x655b, 0xafd3, 0xefad, 0x2f2f, 0x6f51, 0x2e2e, 0x6e50, 0xaed2, 0xeeac, 0x2c2c, 0x6c52, 0xacd0, 0xecae, 0xadd1, 0xedaf, 0x2d2d, 0x6d53, 0x2828, 0x6856, 0xa8d4, 0xe8aa, 0xa9d5, 0xe9ab, 0x2929, 0x6957, 0xabd7, 0xeba9, 0x2b2b, 0x6b55, 0x2a2a, 0x6a54, 0xaad6, 0xeaa8, ], [ 0x0000, 0xff83, 0x7f03, 0x8080, 0xfe06, 0x0185, 0x8105, 0x7e86, 0x7c09, 0x838a, 0x030a, 0xfc89, 0x820f, 0x7d8c, 0xfd0c, 0x028f, 0xf812, 0x0791, 0x8711, 0x7892, 0x0614, 0xf997, 0x7917, 0x8694, 0x841b, 0x7b98, 0xfb18, 0x049b, 0x7a1d, 0x859e, 0x051e, 0xfa9d, 0x7021, 0x8fa2, 0x0f22, 0xf0a1, 0x8e27, 0x71a4, 0xf124, 0x0ea7, 0x0c28, 0xf3ab, 0x732b, 0x8ca8, 0xf22e, 0x0dad, 0x8d2d, 0x72ae, 0x8833, 0x77b0, 0xf730, 0x08b3, 0x7635, 0x89b6, 0x0936, 0xf6b5, 0xf43a, 0x0bb9, 0x8b39, 0x74ba, 0x0a3c, 0xf5bf, 0x753f, 0x8abc, 0xe042, 0x1fc1, 0x9f41, 0x60c2, 0x1e44, 0xe1c7, 0x6147, 0x9ec4, 0x9c4b, 0x63c8, 0xe348, 0x1ccb, 0x624d, 0x9dce, 0x1d4e, 0xe2cd, 0x1850, 0xe7d3, 0x6753, 0x98d0, 0xe656, 0x19d5, 0x9955, 0x66d6, 0x6459, 0x9bda, 0x1b5a, 0xe4d9, 0x9a5f, 0x65dc, 0xe55c, 0x1adf, 0x9063, 0x6fe0, 0xef60, 0x10e3, 0x6e65, 0x91e6, 0x1166, 0xeee5, 0xec6a, 0x13e9, 0x9369, 0x6cea, 0x126c, 0xedef, 0x6d6f, 0x92ec, 0x6871, 0x97f2, 0x1772, 0xe8f1, 0x9677, 0x69f4, 0xe974, 0x16f7, 0x1478, 0xebfb, 0x6b7b, 0x94f8, 0xea7e, 0x15fd, 0x957d, 0x6afe, 0x4081, 0xbf02, 0x3f82, 0xc001, 0xbe87, 0x4104, 0xc184, 0x3e07, 0x3c88, 0xc30b, 0x438b, 0xbc08, 0xc28e, 0x3d0d, 0xbd8d, 0x420e, 0xb893, 0x4710, 0xc790, 0x3813, 0x4695, 0xb916, 0x3996, 0xc615, 0xc49a, 0x3b19, 0xbb99, 0x441a, 0x3a9c, 0xc51f, 0x459f, 0xba1c, 0x30a0, 0xcf23, 0x4fa3, 0xb020, 0xcea6, 0x3125, 0xb1a5, 0x4e26, 0x4ca9, 0xb32a, 0x33aa, 0xcc29, 0xb2af, 0x4d2c, 0xcdac, 0x322f, 0xc8b2, 0x3731, 0xb7b1, 0x4832, 0x36b4, 0xc937, 0x49b7, 0xb634, 0xb4bb, 0x4b38, 0xcbb8, 0x343b, 0x4abd, 0xb53e, 0x35be, 0xca3d, 0xa0c3, 0x5f40, 0xdfc0, 0x2043, 0x5ec5, 0xa146, 0x21c6, 0xde45, 0xdcca, 0x2349, 0xa3c9, 0x5c4a, 0x22cc, 0xdd4f, 0x5dcf, 0xa24c, 0x58d1, 0xa752, 0x27d2, 0xd851, 0xa6d7, 0x5954, 0xd9d4, 0x2657, 0x24d8, 0xdb5b, 0x5bdb, 0xa458, 0xdade, 0x255d, 0xa5dd, 0x5a5e, 0xd0e2, 0x2f61, 0xafe1, 0x5062, 0x2ee4, 0xd167, 0x51e7, 0xae64, 0xaceb, 0x5368, 0xd3e8, 0x2c6b, 0x52ed, 0xad6e, 0x2dee, 0xd26d, 0x28f0, 0xd773, 0x57f3, 0xa870, 0xd6f6, 0x2975, 0xa9f5, 0x5676, 0x54f9, 0xab7a, 0x2bfa, 0xd479, 0xaaff, 0x557c, 0xd5fc, 0x2a7f, ], [ 0x0000, 0x8102, 0x8201, 0x0303, 0x8407, 0x0505, 0x0606, 0x8704, 0x880b, 0x0909, 0x0a0a, 0x8b08, 0x0c0c, 0x8d0e, 0x8e0d, 0x0f0f, 0x9013, 0x1111, 0x1212, 0x9310, 0x1414, 0x9516, 0x9615, 0x1717, 0x1818, 0x991a, 0x9a19, 0x1b1b, 0x9c1f, 0x1d1d, 0x1e1e, 0x9f1c, 0xa023, 0x2121, 0x2222, 0xa320, 0x2424, 0xa526, 0xa625, 0x2727, 0x2828, 0xa92a, 0xaa29, 0x2b2b, 0xac2f, 0x2d2d, 0x2e2e, 0xaf2c, 0x3030, 0xb132, 0xb231, 0x3333, 0xb437, 0x3535, 0x3636, 0xb734, 0xb83b, 0x3939, 0x3a3a, 0xbb38, 0x3c3c, 0xbd3e, 0xbe3d, 0x3f3f, 0xc043, 0x4141, 0x4242, 0xc340, 0x4444, 0xc546, 0xc645, 0x4747, 0x4848, 0xc94a, 0xca49, 0x4b4b, 0xcc4f, 0x4d4d, 0x4e4e, 0xcf4c, 0x5050, 0xd152, 0xd251, 0x5353, 0xd457, 0x5555, 0x5656, 0xd754, 0xd85b, 0x5959, 0x5a5a, 0xdb58, 0x5c5c, 0xdd5e, 0xde5d, 0x5f5f, 0x6060, 0xe162, 0xe261, 0x6363, 0xe467, 0x6565, 0x6666, 0xe764, 0xe86b, 0x6969, 0x6a6a, 0xeb68, 0x6c6c, 0xed6e, 0xee6d, 0x6f6f, 0xf073, 0x7171, 0x7272, 0xf370, 0x7474, 0xf576, 0xf675, 0x7777, 0x7878, 0xf97a, 0xfa79, 0x7b7b, 0xfc7f, 0x7d7d, 0x7e7e, 0xff7c, 0x0083, 0x8181, 0x8282, 0x0380, 0x8484, 0x0586, 0x0685, 0x8787, 0x8888, 0x098a, 0x0a89, 0x8b8b, 0x0c8f, 0x8d8d, 0x8e8e, 0x0f8c, 0x9090, 0x1192, 0x1291, 0x9393, 0x1497, 0x9595, 0x9696, 0x1794, 0x189b, 0x9999, 0x9a9a, 0x1b98, 0x9c9c, 0x1d9e, 0x1e9d, 0x9f9f, 0xa0a0, 0x21a2, 0x22a1, 0xa3a3, 0x24a7, 0xa5a5, 0xa6a6, 0x27a4, 0x28ab, 0xa9a9, 0xaaaa, 0x2ba8, 0xacac, 0x2dae, 0x2ead, 0xafaf, 0x30b3, 0xb1b1, 0xb2b2, 0x33b0, 0xb4b4, 0x35b6, 0x36b5, 0xb7b7, 0xb8b8, 0x39ba, 0x3ab9, 0xbbbb, 0x3cbf, 0xbdbd, 0xbebe, 0x3fbc, 0xc0c0, 0x41c2, 0x42c1, 0xc3c3, 0x44c7, 0xc5c5, 0xc6c6, 0x47c4, 0x48cb, 0xc9c9, 0xcaca, 0x4bc8, 0xcccc, 0x4dce, 0x4ecd, 0xcfcf, 0x50d3, 0xd1d1, 0xd2d2, 0x53d0, 0xd4d4, 0x55d6, 0x56d5, 0xd7d7, 0xd8d8, 0x59da, 0x5ad9, 0xdbdb, 0x5cdf, 0xdddd, 0xdede, 0x5fdc, 0x60e3, 0xe1e1, 0xe2e2, 0x63e0, 0xe4e4, 0x65e6, 0x66e5, 0xe7e7, 0xe8e8, 0x69ea, 0x6ae9, 0xebeb, 0x6cef, 0xeded, 0xeeee, 0x6fec, 0xf0f0, 0x71f2, 0x72f1, 0xf3f3, 0x74f7, 0xf5f5, 0xf6f6, 0x77f4, 0x78fb, 0xf9f9, 0xfafa, 0x7bf8, 0xfcfc, 0x7dfe, 0x7efd, 0xffff, ], [ 0x0000, 0x0106, 0x020c, 0x030a, 0x0418, 0x051e, 0x0614, 0x0712, 0x0830, 0x0936, 0x0a3c, 0x0b3a, 0x0c28, 0x0d2e, 0x0e24, 0x0f22, 0x1060, 0x1166, 0x126c, 0x136a, 0x1478, 0x157e, 0x1674, 0x1772, 0x1850, 0x1956, 0x1a5c, 0x1b5a, 0x1c48, 0x1d4e, 0x1e44, 0x1f42, 0x20c0, 0x21c6, 0x22cc, 0x23ca, 0x24d8, 0x25de, 0x26d4, 0x27d2, 0x28f0, 0x29f6, 0x2afc, 0x2bfa, 0x2ce8, 0x2dee, 0x2ee4, 0x2fe2, 0x30a0, 0x31a6, 0x32ac, 0x33aa, 0x34b8, 0x35be, 0x36b4, 0x37b2, 0x3890, 0x3996, 0x3a9c, 0x3b9a, 0x3c88, 0x3d8e, 0x3e84, 0x3f82, 0x4180, 0x4086, 0x438c, 0x428a, 0x4598, 0x449e, 0x4794, 0x4692, 0x49b0, 0x48b6, 0x4bbc, 0x4aba, 0x4da8, 0x4cae, 0x4fa4, 0x4ea2, 0x51e0, 0x50e6, 0x53ec, 0x52ea, 0x55f8, 0x54fe, 0x57f4, 0x56f2, 0x59d0, 0x58d6, 0x5bdc, 0x5ada, 0x5dc8, 0x5cce, 0x5fc4, 0x5ec2, 0x6140, 0x6046, 0x634c, 0x624a, 0x6558, 0x645e, 0x6754, 0x6652, 0x6970, 0x6876, 0x6b7c, 0x6a7a, 0x6d68, 0x6c6e, 0x6f64, 0x6e62, 0x7120, 0x7026, 0x732c, 0x722a, 0x7538, 0x743e, 0x7734, 0x7632, 0x7910, 0x7816, 0x7b1c, 0x7a1a, 0x7d08, 0x7c0e, 0x7f04, 0x7e02, 0x8300, 0x8206, 0x810c, 0x800a, 0x8718, 0x861e, 0x8514, 0x8412, 0x8b30, 0x8a36, 0x893c, 0x883a, 0x8f28, 0x8e2e, 0x8d24, 0x8c22, 0x9360, 0x9266, 0x916c, 0x906a, 0x9778, 0x967e, 0x9574, 0x9472, 0x9b50, 0x9a56, 0x995c, 0x985a, 0x9f48, 0x9e4e, 0x9d44, 0x9c42, 0xa3c0, 0xa2c6, 0xa1cc, 0xa0ca, 0xa7d8, 0xa6de, 0xa5d4, 0xa4d2, 0xabf0, 0xaaf6, 0xa9fc, 0xa8fa, 0xafe8, 0xaeee, 0xade4, 0xace2, 0xb3a0, 0xb2a6, 0xb1ac, 0xb0aa, 0xb7b8, 0xb6be, 0xb5b4, 0xb4b2, 0xbb90, 0xba96, 0xb99c, 0xb89a, 0xbf88, 0xbe8e, 0xbd84, 0xbc82, 0xc280, 0xc386, 0xc08c, 0xc18a, 0xc698, 0xc79e, 0xc494, 0xc592, 0xcab0, 0xcbb6, 0xc8bc, 0xc9ba, 0xcea8, 0xcfae, 0xcca4, 0xcda2, 0xd2e0, 0xd3e6, 0xd0ec, 0xd1ea, 0xd6f8, 0xd7fe, 0xd4f4, 0xd5f2, 0xdad0, 0xdbd6, 0xd8dc, 0xd9da, 0xdec8, 0xdfce, 0xdcc4, 0xddc2, 0xe240, 0xe346, 0xe04c, 0xe14a, 0xe658, 0xe75e, 0xe454, 0xe552, 0xea70, 0xeb76, 0xe87c, 0xe97a, 0xee68, 0xef6e, 0xec64, 0xed62, 0xf220, 0xf326, 0xf02c, 0xf12a, 0xf638, 0xf73e, 0xf434, 0xf532, 0xfa10, 0xfb16, 0xf81c, 0xf91a, 0xfe08, 0xff0e, 0xfc04, 0xfd02, ], [ 0x0000, 0x8605, 0x8c0f, 0x0a0a, 0x981b, 0x1e1e, 0x1414, 0x9211, 0xb033, 0x3636, 0x3c3c, 0xba39, 0x2828, 0xae2d, 0xa427, 0x2222, 0xe063, 0x6666, 0x6c6c, 0xea69, 0x7878, 0xfe7d, 0xf477, 0x7272, 0x5050, 0xd655, 0xdc5f, 0x5a5a, 0xc84b, 0x4e4e, 0x4444, 0xc241, 0x40c3, 0xc6c6, 0xcccc, 0x4ac9, 0xd8d8, 0x5edd, 0x54d7, 0xd2d2, 0xf0f0, 0x76f5, 0x7cff, 0xfafa, 0x68eb, 0xeeee, 0xe4e4, 0x62e1, 0xa0a0, 0x26a5, 0x2caf, 0xaaaa, 0x38bb, 0xbebe, 0xb4b4, 0x32b1, 0x1093, 0x9696, 0x9c9c, 0x1a99, 0x8888, 0x0e8d, 0x0487, 0x8282, 0x8186, 0x0783, 0x0d89, 0x8b8c, 0x199d, 0x9f98, 0x9592, 0x1397, 0x31b5, 0xb7b0, 0xbdba, 0x3bbf, 0xa9ae, 0x2fab, 0x25a1, 0xa3a4, 0x61e5, 0xe7e0, 0xedea, 0x6bef, 0xf9fe, 0x7ffb, 0x75f1, 0xf3f4, 0xd1d6, 0x57d3, 0x5dd9, 0xdbdc, 0x49cd, 0xcfc8, 0xc5c2, 0x43c7, 0xc145, 0x4740, 0x4d4a, 0xcb4f, 0x595e, 0xdf5b, 0xd551, 0x5354, 0x7176, 0xf773, 0xfd79, 0x7b7c, 0xe96d, 0x6f68, 0x6562, 0xe367, 0x2126, 0xa723, 0xad29, 0x2b2c, 0xb93d, 0x3f38, 0x3532, 0xb337, 0x9115, 0x1710, 0x1d1a, 0x9b1f, 0x090e, 0x8f0b, 0x8501, 0x0304, 0x8309, 0x050c, 0x0f06, 0x8903, 0x1b12, 0x9d17, 0x971d, 0x1118, 0x333a, 0xb53f, 0xbf35, 0x3930, 0xab21, 0x2d24, 0x272e, 0xa12b, 0x636a, 0xe56f, 0xef65, 0x6960, 0xfb71, 0x7d74, 0x777e, 0xf17b, 0xd359, 0x555c, 0x5f56, 0xd953, 0x4b42, 0xcd47, 0xc74d, 0x4148, 0xc3ca, 0x45cf, 0x4fc5, 0xc9c0, 0x5bd1, 0xddd4, 0xd7de, 0x51db, 0x73f9, 0xf5fc, 0xfff6, 0x79f3, 0xebe2, 0x6de7, 0x67ed, 0xe1e8, 0x23a9, 0xa5ac, 0xafa6, 0x29a3, 0xbbb2, 0x3db7, 0x37bd, 0xb1b8, 0x939a, 0x159f, 0x1f95, 0x9990, 0x0b81, 0x8d84, 0x878e, 0x018b, 0x028f, 0x848a, 0x8e80, 0x0885, 0x9a94, 0x1c91, 0x169b, 0x909e, 0xb2bc, 0x34b9, 0x3eb3, 0xb8b6, 0x2aa7, 0xaca2, 0xa6a8, 0x20ad, 0xe2ec, 0x64e9, 0x6ee3, 0xe8e6, 0x7af7, 0xfcf2, 0xf6f8, 0x70fd, 0x52df, 0xd4da, 0xded0, 0x58d5, 0xcac4, 0x4cc1, 0x46cb, 0xc0ce, 0x424c, 0xc449, 0xce43, 0x4846, 0xda57, 0x5c52, 0x5658, 0xd05d, 0xf27f, 0x747a, 0x7e70, 0xf875, 0x6a64, 0xec61, 0xe66b, 0x606e, 0xa22f, 0x242a, 0x2e20, 0xa825, 0x3a34, 0xbc31, 0xb63b, 0x303e, 0x121c, 0x9419, 0x9e13, 0x1816, 0x8a07, 0x0c02, 0x0608, 0x800d, ], ]; pub static CRC16_USB_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040, ], [ 0x0000, 0x9001, 0x6001, 0xf000, 0xc002, 0x5003, 0xa003, 0x3002, 0xc007, 0x5006, 0xa006, 0x3007, 0x0005, 0x9004, 0x6004, 0xf005, 0xc00d, 0x500c, 0xa00c, 0x300d, 0x000f, 0x900e, 0x600e, 0xf00f, 0x000a, 0x900b, 0x600b, 0xf00a, 0xc008, 0x5009, 0xa009, 0x3008, 0xc019, 0x5018, 0xa018, 0x3019, 0x001b, 0x901a, 0x601a, 0xf01b, 0x001e, 0x901f, 0x601f, 0xf01e, 0xc01c, 0x501d, 0xa01d, 0x301c, 0x0014, 0x9015, 0x6015, 0xf014, 0xc016, 0x5017, 0xa017, 0x3016, 0xc013, 0x5012, 0xa012, 0x3013, 0x0011, 0x9010, 0x6010, 0xf011, 0xc031, 0x5030, 0xa030, 0x3031, 0x0033, 0x9032, 0x6032, 0xf033, 0x0036, 0x9037, 0x6037, 0xf036, 0xc034, 0x5035, 0xa035, 0x3034, 0x003c, 0x903d, 0x603d, 0xf03c, 0xc03e, 0x503f, 0xa03f, 0x303e, 0xc03b, 0x503a, 0xa03a, 0x303b, 0x0039, 0x9038, 0x6038, 0xf039, 0x0028, 0x9029, 0x6029, 0xf028, 0xc02a, 0x502b, 0xa02b, 0x302a, 0xc02f, 0x502e, 0xa02e, 0x302f, 0x002d, 0x902c, 0x602c, 0xf02d, 0xc025, 0x5024, 0xa024, 0x3025, 0x0027, 0x9026, 0x6026, 0xf027, 0x0022, 0x9023, 0x6023, 0xf022, 0xc020, 0x5021, 0xa021, 0x3020, 0xc061, 0x5060, 0xa060, 0x3061, 0x0063, 0x9062, 0x6062, 0xf063, 0x0066, 0x9067, 0x6067, 0xf066, 0xc064, 0x5065, 0xa065, 0x3064, 0x006c, 0x906d, 0x606d, 0xf06c, 0xc06e, 0x506f, 0xa06f, 0x306e, 0xc06b, 0x506a, 0xa06a, 0x306b, 0x0069, 0x9068, 0x6068, 0xf069, 0x0078, 0x9079, 0x6079, 0xf078, 0xc07a, 0x507b, 0xa07b, 0x307a, 0xc07f, 0x507e, 0xa07e, 0x307f, 0x007d, 0x907c, 0x607c, 0xf07d, 0xc075, 0x5074, 0xa074, 0x3075, 0x0077, 0x9076, 0x6076, 0xf077, 0x0072, 0x9073, 0x6073, 0xf072, 0xc070, 0x5071, 0xa071, 0x3070, 0x0050, 0x9051, 0x6051, 0xf050, 0xc052, 0x5053, 0xa053, 0x3052, 0xc057, 0x5056, 0xa056, 0x3057, 0x0055, 0x9054, 0x6054, 0xf055, 0xc05d, 0x505c, 0xa05c, 0x305d, 0x005f, 0x905e, 0x605e, 0xf05f, 0x005a, 0x905b, 0x605b, 0xf05a, 0xc058, 0x5059, 0xa059, 0x3058, 0xc049, 0x5048, 0xa048, 0x3049, 0x004b, 0x904a, 0x604a, 0xf04b, 0x004e, 0x904f, 0x604f, 0xf04e, 0xc04c, 0x504d, 0xa04d, 0x304c, 0x0044, 0x9045, 0x6045, 0xf044, 0xc046, 0x5047, 0xa047, 0x3046, 0xc043, 0x5042, 0xa042, 0x3043, 0x0041, 0x9040, 0x6040, 0xf041, ], [ 0x0000, 0xc051, 0xc0a1, 0x00f0, 0xc141, 0x0110, 0x01e0, 0xc1b1, 0xc281, 0x02d0, 0x0220, 0xc271, 0x03c0, 0xc391, 0xc361, 0x0330, 0xc501, 0x0550, 0x05a0, 0xc5f1, 0x0440, 0xc411, 0xc4e1, 0x04b0, 0x0780, 0xc7d1, 0xc721, 0x0770, 0xc6c1, 0x0690, 0x0660, 0xc631, 0xca01, 0x0a50, 0x0aa0, 0xcaf1, 0x0b40, 0xcb11, 0xcbe1, 0x0bb0, 0x0880, 0xc8d1, 0xc821, 0x0870, 0xc9c1, 0x0990, 0x0960, 0xc931, 0x0f00, 0xcf51, 0xcfa1, 0x0ff0, 0xce41, 0x0e10, 0x0ee0, 0xceb1, 0xcd81, 0x0dd0, 0x0d20, 0xcd71, 0x0cc0, 0xcc91, 0xcc61, 0x0c30, 0xd401, 0x1450, 0x14a0, 0xd4f1, 0x1540, 0xd511, 0xd5e1, 0x15b0, 0x1680, 0xd6d1, 0xd621, 0x1670, 0xd7c1, 0x1790, 0x1760, 0xd731, 0x1100, 0xd151, 0xd1a1, 0x11f0, 0xd041, 0x1010, 0x10e0, 0xd0b1, 0xd381, 0x13d0, 0x1320, 0xd371, 0x12c0, 0xd291, 0xd261, 0x1230, 0x1e00, 0xde51, 0xdea1, 0x1ef0, 0xdf41, 0x1f10, 0x1fe0, 0xdfb1, 0xdc81, 0x1cd0, 0x1c20, 0xdc71, 0x1dc0, 0xdd91, 0xdd61, 0x1d30, 0xdb01, 0x1b50, 0x1ba0, 0xdbf1, 0x1a40, 0xda11, 0xdae1, 0x1ab0, 0x1980, 0xd9d1, 0xd921, 0x1970, 0xd8c1, 0x1890, 0x1860, 0xd831, 0xe801, 0x2850, 0x28a0, 0xe8f1, 0x2940, 0xe911, 0xe9e1, 0x29b0, 0x2a80, 0xead1, 0xea21, 0x2a70, 0xebc1, 0x2b90, 0x2b60, 0xeb31, 0x2d00, 0xed51, 0xeda1, 0x2df0, 0xec41, 0x2c10, 0x2ce0, 0xecb1, 0xef81, 0x2fd0, 0x2f20, 0xef71, 0x2ec0, 0xee91, 0xee61, 0x2e30, 0x2200, 0xe251, 0xe2a1, 0x22f0, 0xe341, 0x2310, 0x23e0, 0xe3b1, 0xe081, 0x20d0, 0x2020, 0xe071, 0x21c0, 0xe191, 0xe161, 0x2130, 0xe701, 0x2750, 0x27a0, 0xe7f1, 0x2640, 0xe611, 0xe6e1, 0x26b0, 0x2580, 0xe5d1, 0xe521, 0x2570, 0xe4c1, 0x2490, 0x2460, 0xe431, 0x3c00, 0xfc51, 0xfca1, 0x3cf0, 0xfd41, 0x3d10, 0x3de0, 0xfdb1, 0xfe81, 0x3ed0, 0x3e20, 0xfe71, 0x3fc0, 0xff91, 0xff61, 0x3f30, 0xf901, 0x3950, 0x39a0, 0xf9f1, 0x3840, 0xf811, 0xf8e1, 0x38b0, 0x3b80, 0xfbd1, 0xfb21, 0x3b70, 0xfac1, 0x3a90, 0x3a60, 0xfa31, 0xf601, 0x3650, 0x36a0, 0xf6f1, 0x3740, 0xf711, 0xf7e1, 0x37b0, 0x3480, 0xf4d1, 0xf421, 0x3470, 0xf5c1, 0x3590, 0x3560, 0xf531, 0x3300, 0xf351, 0xf3a1, 0x33f0, 0xf241, 0x3210, 0x32e0, 0xf2b1, 0xf181, 0x31d0, 0x3120, 0xf171, 0x30c0, 0xf091, 0xf061, 0x3030, ], [ 0x0000, 0xfc01, 0xb801, 0x4400, 0x3001, 0xcc00, 0x8800, 0x7401, 0x6002, 0x9c03, 0xd803, 0x2402, 0x5003, 0xac02, 0xe802, 0x1403, 0xc004, 0x3c05, 0x7805, 0x8404, 0xf005, 0x0c04, 0x4804, 0xb405, 0xa006, 0x5c07, 0x1807, 0xe406, 0x9007, 0x6c06, 0x2806, 0xd407, 0xc00b, 0x3c0a, 0x780a, 0x840b, 0xf00a, 0x0c0b, 0x480b, 0xb40a, 0xa009, 0x5c08, 0x1808, 0xe409, 0x9008, 0x6c09, 0x2809, 0xd408, 0x000f, 0xfc0e, 0xb80e, 0x440f, 0x300e, 0xcc0f, 0x880f, 0x740e, 0x600d, 0x9c0c, 0xd80c, 0x240d, 0x500c, 0xac0d, 0xe80d, 0x140c, 0xc015, 0x3c14, 0x7814, 0x8415, 0xf014, 0x0c15, 0x4815, 0xb414, 0xa017, 0x5c16, 0x1816, 0xe417, 0x9016, 0x6c17, 0x2817, 0xd416, 0x0011, 0xfc10, 0xb810, 0x4411, 0x3010, 0xcc11, 0x8811, 0x7410, 0x6013, 0x9c12, 0xd812, 0x2413, 0x5012, 0xac13, 0xe813, 0x1412, 0x001e, 0xfc1f, 0xb81f, 0x441e, 0x301f, 0xcc1e, 0x881e, 0x741f, 0x601c, 0x9c1d, 0xd81d, 0x241c, 0x501d, 0xac1c, 0xe81c, 0x141d, 0xc01a, 0x3c1b, 0x781b, 0x841a, 0xf01b, 0x0c1a, 0x481a, 0xb41b, 0xa018, 0x5c19, 0x1819, 0xe418, 0x9019, 0x6c18, 0x2818, 0xd419, 0xc029, 0x3c28, 0x7828, 0x8429, 0xf028, 0x0c29, 0x4829, 0xb428, 0xa02b, 0x5c2a, 0x182a, 0xe42b, 0x902a, 0x6c2b, 0x282b, 0xd42a, 0x002d, 0xfc2c, 0xb82c, 0x442d, 0x302c, 0xcc2d, 0x882d, 0x742c, 0x602f, 0x9c2e, 0xd82e, 0x242f, 0x502e, 0xac2f, 0xe82f, 0x142e, 0x0022, 0xfc23, 0xb823, 0x4422, 0x3023, 0xcc22, 0x8822, 0x7423, 0x6020, 0x9c21, 0xd821, 0x2420, 0x5021, 0xac20, 0xe820, 0x1421, 0xc026, 0x3c27, 0x7827, 0x8426, 0xf027, 0x0c26, 0x4826, 0xb427, 0xa024, 0x5c25, 0x1825, 0xe424, 0x9025, 0x6c24, 0x2824, 0xd425, 0x003c, 0xfc3d, 0xb83d, 0x443c, 0x303d, 0xcc3c, 0x883c, 0x743d, 0x603e, 0x9c3f, 0xd83f, 0x243e, 0x503f, 0xac3e, 0xe83e, 0x143f, 0xc038, 0x3c39, 0x7839, 0x8438, 0xf039, 0x0c38, 0x4838, 0xb439, 0xa03a, 0x5c3b, 0x183b, 0xe43a, 0x903b, 0x6c3a, 0x283a, 0xd43b, 0xc037, 0x3c36, 0x7836, 0x8437, 0xf036, 0x0c37, 0x4837, 0xb436, 0xa035, 0x5c34, 0x1834, 0xe435, 0x9034, 0x6c35, 0x2835, 0xd434, 0x0033, 0xfc32, 0xb832, 0x4433, 0x3032, 0xcc33, 0x8833, 0x7432, 0x6031, 0x9c30, 0xd830, 0x2431, 0x5030, 0xac31, 0xe831, 0x1430, ], [ 0x0000, 0xc03d, 0xc079, 0x0044, 0xc0f1, 0x00cc, 0x0088, 0xc0b5, 0xc1e1, 0x01dc, 0x0198, 0xc1a5, 0x0110, 0xc12d, 0xc169, 0x0154, 0xc3c1, 0x03fc, 0x03b8, 0xc385, 0x0330, 0xc30d, 0xc349, 0x0374, 0x0220, 0xc21d, 0xc259, 0x0264, 0xc2d1, 0x02ec, 0x02a8, 0xc295, 0xc781, 0x07bc, 0x07f8, 0xc7c5, 0x0770, 0xc74d, 0xc709, 0x0734, 0x0660, 0xc65d, 0xc619, 0x0624, 0xc691, 0x06ac, 0x06e8, 0xc6d5, 0x0440, 0xc47d, 0xc439, 0x0404, 0xc4b1, 0x048c, 0x04c8, 0xc4f5, 0xc5a1, 0x059c, 0x05d8, 0xc5e5, 0x0550, 0xc56d, 0xc529, 0x0514, 0xcf01, 0x0f3c, 0x0f78, 0xcf45, 0x0ff0, 0xcfcd, 0xcf89, 0x0fb4, 0x0ee0, 0xcedd, 0xce99, 0x0ea4, 0xce11, 0x0e2c, 0x0e68, 0xce55, 0x0cc0, 0xccfd, 0xccb9, 0x0c84, 0xcc31, 0x0c0c, 0x0c48, 0xcc75, 0xcd21, 0x0d1c, 0x0d58, 0xcd65, 0x0dd0, 0xcded, 0xcda9, 0x0d94, 0x0880, 0xc8bd, 0xc8f9, 0x08c4, 0xc871, 0x084c, 0x0808, 0xc835, 0xc961, 0x095c, 0x0918, 0xc925, 0x0990, 0xc9ad, 0xc9e9, 0x09d4, 0xcb41, 0x0b7c, 0x0b38, 0xcb05, 0x0bb0, 0xcb8d, 0xcbc9, 0x0bf4, 0x0aa0, 0xca9d, 0xcad9, 0x0ae4, 0xca51, 0x0a6c, 0x0a28, 0xca15, 0xde01, 0x1e3c, 0x1e78, 0xde45, 0x1ef0, 0xdecd, 0xde89, 0x1eb4, 0x1fe0, 0xdfdd, 0xdf99, 0x1fa4, 0xdf11, 0x1f2c, 0x1f68, 0xdf55, 0x1dc0, 0xddfd, 0xddb9, 0x1d84, 0xdd31, 0x1d0c, 0x1d48, 0xdd75, 0xdc21, 0x1c1c, 0x1c58, 0xdc65, 0x1cd0, 0xdced, 0xdca9, 0x1c94, 0x1980, 0xd9bd, 0xd9f9, 0x19c4, 0xd971, 0x194c, 0x1908, 0xd935, 0xd861, 0x185c, 0x1818, 0xd825, 0x1890, 0xd8ad, 0xd8e9, 0x18d4, 0xda41, 0x1a7c, 0x1a38, 0xda05, 0x1ab0, 0xda8d, 0xdac9, 0x1af4, 0x1ba0, 0xdb9d, 0xdbd9, 0x1be4, 0xdb51, 0x1b6c, 0x1b28, 0xdb15, 0x1100, 0xd13d, 0xd179, 0x1144, 0xd1f1, 0x11cc, 0x1188, 0xd1b5, 0xd0e1, 0x10dc, 0x1098, 0xd0a5, 0x1010, 0xd02d, 0xd069, 0x1054, 0xd2c1, 0x12fc, 0x12b8, 0xd285, 0x1230, 0xd20d, 0xd249, 0x1274, 0x1320, 0xd31d, 0xd359, 0x1364, 0xd3d1, 0x13ec, 0x13a8, 0xd395, 0xd681, 0x16bc, 0x16f8, 0xd6c5, 0x1670, 0xd64d, 0xd609, 0x1634, 0x1760, 0xd75d, 0xd719, 0x1724, 0xd791, 0x17ac, 0x17e8, 0xd7d5, 0x1540, 0xd57d, 0xd539, 0x1504, 0xd5b1, 0x158c, 0x15c8, 0xd5f5, 0xd4a1, 0x149c, 0x14d8, 0xd4e5, 0x1450, 0xd46d, 0xd429, 0x1414, ], [ 0x0000, 0xd101, 0xe201, 0x3300, 0x8401, 0x5500, 0x6600, 0xb701, 0x4801, 0x9900, 0xaa00, 0x7b01, 0xcc00, 0x1d01, 0x2e01, 0xff00, 0x9002, 0x4103, 0x7203, 0xa302, 0x1403, 0xc502, 0xf602, 0x2703, 0xd803, 0x0902, 0x3a02, 0xeb03, 0x5c02, 0x8d03, 0xbe03, 0x6f02, 0x6007, 0xb106, 0x8206, 0x5307, 0xe406, 0x3507, 0x0607, 0xd706, 0x2806, 0xf907, 0xca07, 0x1b06, 0xac07, 0x7d06, 0x4e06, 0x9f07, 0xf005, 0x2104, 0x1204, 0xc305, 0x7404, 0xa505, 0x9605, 0x4704, 0xb804, 0x6905, 0x5a05, 0x8b04, 0x3c05, 0xed04, 0xde04, 0x0f05, 0xc00e, 0x110f, 0x220f, 0xf30e, 0x440f, 0x950e, 0xa60e, 0x770f, 0x880f, 0x590e, 0x6a0e, 0xbb0f, 0x0c0e, 0xdd0f, 0xee0f, 0x3f0e, 0x500c, 0x810d, 0xb20d, 0x630c, 0xd40d, 0x050c, 0x360c, 0xe70d, 0x180d, 0xc90c, 0xfa0c, 0x2b0d, 0x9c0c, 0x4d0d, 0x7e0d, 0xaf0c, 0xa009, 0x7108, 0x4208, 0x9309, 0x2408, 0xf509, 0xc609, 0x1708, 0xe808, 0x3909, 0x0a09, 0xdb08, 0x6c09, 0xbd08, 0x8e08, 0x5f09, 0x300b, 0xe10a, 0xd20a, 0x030b, 0xb40a, 0x650b, 0x560b, 0x870a, 0x780a, 0xa90b, 0x9a0b, 0x4b0a, 0xfc0b, 0x2d0a, 0x1e0a, 0xcf0b, 0xc01f, 0x111e, 0x221e, 0xf31f, 0x441e, 0x951f, 0xa61f, 0x771e, 0x881e, 0x591f, 0x6a1f, 0xbb1e, 0x0c1f, 0xdd1e, 0xee1e, 0x3f1f, 0x501d, 0x811c, 0xb21c, 0x631d, 0xd41c, 0x051d, 0x361d, 0xe71c, 0x181c, 0xc91d, 0xfa1d, 0x2b1c, 0x9c1d, 0x4d1c, 0x7e1c, 0xaf1d, 0xa018, 0x7119, 0x4219, 0x9318, 0x2419, 0xf518, 0xc618, 0x1719, 0xe819, 0x3918, 0x0a18, 0xdb19, 0x6c18, 0xbd19, 0x8e19, 0x5f18, 0x301a, 0xe11b, 0xd21b, 0x031a, 0xb41b, 0x651a, 0x561a, 0x871b, 0x781b, 0xa91a, 0x9a1a, 0x4b1b, 0xfc1a, 0x2d1b, 0x1e1b, 0xcf1a, 0x0011, 0xd110, 0xe210, 0x3311, 0x8410, 0x5511, 0x6611, 0xb710, 0x4810, 0x9911, 0xaa11, 0x7b10, 0xcc11, 0x1d10, 0x2e10, 0xff11, 0x9013, 0x4112, 0x7212, 0xa313, 0x1412, 0xc513, 0xf613, 0x2712, 0xd812, 0x0913, 0x3a13, 0xeb12, 0x5c13, 0x8d12, 0xbe12, 0x6f13, 0x6016, 0xb117, 0x8217, 0x5316, 0xe417, 0x3516, 0x0616, 0xd717, 0x2817, 0xf916, 0xca16, 0x1b17, 0xac16, 0x7d17, 0x4e17, 0x9f16, 0xf014, 0x2115, 0x1215, 0xc314, 0x7415, 0xa514, 0x9614, 0x4715, 0xb815, 0x6914, 0x5a14, 0x8b15, 0x3c14, 0xed15, 0xde15, 0x0f14, ], [ 0x0000, 0xc010, 0xc023, 0x0033, 0xc045, 0x0055, 0x0066, 0xc076, 0xc089, 0x0099, 0x00aa, 0xc0ba, 0x00cc, 0xc0dc, 0xc0ef, 0x00ff, 0xc111, 0x0101, 0x0132, 0xc122, 0x0154, 0xc144, 0xc177, 0x0167, 0x0198, 0xc188, 0xc1bb, 0x01ab, 0xc1dd, 0x01cd, 0x01fe, 0xc1ee, 0xc221, 0x0231, 0x0202, 0xc212, 0x0264, 0xc274, 0xc247, 0x0257, 0x02a8, 0xc2b8, 0xc28b, 0x029b, 0xc2ed, 0x02fd, 0x02ce, 0xc2de, 0x0330, 0xc320, 0xc313, 0x0303, 0xc375, 0x0365, 0x0356, 0xc346, 0xc3b9, 0x03a9, 0x039a, 0xc38a, 0x03fc, 0xc3ec, 0xc3df, 0x03cf, 0xc441, 0x0451, 0x0462, 0xc472, 0x0404, 0xc414, 0xc427, 0x0437, 0x04c8, 0xc4d8, 0xc4eb, 0x04fb, 0xc48d, 0x049d, 0x04ae, 0xc4be, 0x0550, 0xc540, 0xc573, 0x0563, 0xc515, 0x0505, 0x0536, 0xc526, 0xc5d9, 0x05c9, 0x05fa, 0xc5ea, 0x059c, 0xc58c, 0xc5bf, 0x05af, 0x0660, 0xc670, 0xc643, 0x0653, 0xc625, 0x0635, 0x0606, 0xc616, 0xc6e9, 0x06f9, 0x06ca, 0xc6da, 0x06ac, 0xc6bc, 0xc68f, 0x069f, 0xc771, 0x0761, 0x0752, 0xc742, 0x0734, 0xc724, 0xc717, 0x0707, 0x07f8, 0xc7e8, 0xc7db, 0x07cb, 0xc7bd, 0x07ad, 0x079e, 0xc78e, 0xc881, 0x0891, 0x08a2, 0xc8b2, 0x08c4, 0xc8d4, 0xc8e7, 0x08f7, 0x0808, 0xc818, 0xc82b, 0x083b, 0xc84d, 0x085d, 0x086e, 0xc87e, 0x0990, 0xc980, 0xc9b3, 0x09a3, 0xc9d5, 0x09c5, 0x09f6, 0xc9e6, 0xc919, 0x0909, 0x093a, 0xc92a, 0x095c, 0xc94c, 0xc97f, 0x096f, 0x0aa0, 0xcab0, 0xca83, 0x0a93, 0xcae5, 0x0af5, 0x0ac6, 0xcad6, 0xca29, 0x0a39, 0x0a0a, 0xca1a, 0x0a6c, 0xca7c, 0xca4f, 0x0a5f, 0xcbb1, 0x0ba1, 0x0b92, 0xcb82, 0x0bf4, 0xcbe4, 0xcbd7, 0x0bc7, 0x0b38, 0xcb28, 0xcb1b, 0x0b0b, 0xcb7d, 0x0b6d, 0x0b5e, 0xcb4e, 0x0cc0, 0xccd0, 0xcce3, 0x0cf3, 0xcc85, 0x0c95, 0x0ca6, 0xccb6, 0xcc49, 0x0c59, 0x0c6a, 0xcc7a, 0x0c0c, 0xcc1c, 0xcc2f, 0x0c3f, 0xcdd1, 0x0dc1, 0x0df2, 0xcde2, 0x0d94, 0xcd84, 0xcdb7, 0x0da7, 0x0d58, 0xcd48, 0xcd7b, 0x0d6b, 0xcd1d, 0x0d0d, 0x0d3e, 0xcd2e, 0xcee1, 0x0ef1, 0x0ec2, 0xced2, 0x0ea4, 0xceb4, 0xce87, 0x0e97, 0x0e68, 0xce78, 0xce4b, 0x0e5b, 0xce2d, 0x0e3d, 0x0e0e, 0xce1e, 0x0ff0, 0xcfe0, 0xcfd3, 0x0fc3, 0xcfb5, 0x0fa5, 0x0f96, 0xcf86, 0xcf79, 0x0f69, 0x0f5a, 0xcf4a, 0x0f3c, 0xcf2c, 0xcf1f, 0x0f0f, ], [ 0x0000, 0xccc1, 0xd981, 0x1540, 0xf301, 0x3fc0, 0x2a80, 0xe641, 0xa601, 0x6ac0, 0x7f80, 0xb341, 0x5500, 0x99c1, 0x8c81, 0x4040, 0x0c01, 0xc0c0, 0xd580, 0x1941, 0xff00, 0x33c1, 0x2681, 0xea40, 0xaa00, 0x66c1, 0x7381, 0xbf40, 0x5901, 0x95c0, 0x8080, 0x4c41, 0x1802, 0xd4c3, 0xc183, 0x0d42, 0xeb03, 0x27c2, 0x3282, 0xfe43, 0xbe03, 0x72c2, 0x6782, 0xab43, 0x4d02, 0x81c3, 0x9483, 0x5842, 0x1403, 0xd8c2, 0xcd82, 0x0143, 0xe702, 0x2bc3, 0x3e83, 0xf242, 0xb202, 0x7ec3, 0x6b83, 0xa742, 0x4103, 0x8dc2, 0x9882, 0x5443, 0x3004, 0xfcc5, 0xe985, 0x2544, 0xc305, 0x0fc4, 0x1a84, 0xd645, 0x9605, 0x5ac4, 0x4f84, 0x8345, 0x6504, 0xa9c5, 0xbc85, 0x7044, 0x3c05, 0xf0c4, 0xe584, 0x2945, 0xcf04, 0x03c5, 0x1685, 0xda44, 0x9a04, 0x56c5, 0x4385, 0x8f44, 0x6905, 0xa5c4, 0xb084, 0x7c45, 0x2806, 0xe4c7, 0xf187, 0x3d46, 0xdb07, 0x17c6, 0x0286, 0xce47, 0x8e07, 0x42c6, 0x5786, 0x9b47, 0x7d06, 0xb1c7, 0xa487, 0x6846, 0x2407, 0xe8c6, 0xfd86, 0x3147, 0xd706, 0x1bc7, 0x0e87, 0xc246, 0x8206, 0x4ec7, 0x5b87, 0x9746, 0x7107, 0xbdc6, 0xa886, 0x6447, 0x6008, 0xacc9, 0xb989, 0x7548, 0x9309, 0x5fc8, 0x4a88, 0x8649, 0xc609, 0x0ac8, 0x1f88, 0xd349, 0x3508, 0xf9c9, 0xec89, 0x2048, 0x6c09, 0xa0c8, 0xb588, 0x7949, 0x9f08, 0x53c9, 0x4689, 0x8a48, 0xca08, 0x06c9, 0x1389, 0xdf48, 0x3909, 0xf5c8, 0xe088, 0x2c49, 0x780a, 0xb4cb, 0xa18b, 0x6d4a, 0x8b0b, 0x47ca, 0x528a, 0x9e4b, 0xde0b, 0x12ca, 0x078a, 0xcb4b, 0x2d0a, 0xe1cb, 0xf48b, 0x384a, 0x740b, 0xb8ca, 0xad8a, 0x614b, 0x870a, 0x4bcb, 0x5e8b, 0x924a, 0xd20a, 0x1ecb, 0x0b8b, 0xc74a, 0x210b, 0xedca, 0xf88a, 0x344b, 0x500c, 0x9ccd, 0x898d, 0x454c, 0xa30d, 0x6fcc, 0x7a8c, 0xb64d, 0xf60d, 0x3acc, 0x2f8c, 0xe34d, 0x050c, 0xc9cd, 0xdc8d, 0x104c, 0x5c0d, 0x90cc, 0x858c, 0x494d, 0xaf0c, 0x63cd, 0x768d, 0xba4c, 0xfa0c, 0x36cd, 0x238d, 0xef4c, 0x090d, 0xc5cc, 0xd08c, 0x1c4d, 0x480e, 0x84cf, 0x918f, 0x5d4e, 0xbb0f, 0x77ce, 0x628e, 0xae4f, 0xee0f, 0x22ce, 0x378e, 0xfb4f, 0x1d0e, 0xd1cf, 0xc48f, 0x084e, 0x440f, 0x88ce, 0x9d8e, 0x514f, 0xb70e, 0x7bcf, 0x6e8f, 0xa24e, 0xe20e, 0x2ecf, 0x3b8f, 0xf74e, 0x110f, 0xddce, 0xc88e, 0x044f, ], [ 0x0000, 0x900d, 0x6019, 0xf014, 0xc032, 0x503f, 0xa02b, 0x3026, 0xc067, 0x506a, 0xa07e, 0x3073, 0x0055, 0x9058, 0x604c, 0xf041, 0xc0cd, 0x50c0, 0xa0d4, 0x30d9, 0x00ff, 0x90f2, 0x60e6, 0xf0eb, 0x00aa, 0x90a7, 0x60b3, 0xf0be, 0xc098, 0x5095, 0xa081, 0x308c, 0xc199, 0x5194, 0xa180, 0x318d, 0x01ab, 0x91a6, 0x61b2, 0xf1bf, 0x01fe, 0x91f3, 0x61e7, 0xf1ea, 0xc1cc, 0x51c1, 0xa1d5, 0x31d8, 0x0154, 0x9159, 0x614d, 0xf140, 0xc166, 0x516b, 0xa17f, 0x3172, 0xc133, 0x513e, 0xa12a, 0x3127, 0x0101, 0x910c, 0x6118, 0xf115, 0xc331, 0x533c, 0xa328, 0x3325, 0x0303, 0x930e, 0x631a, 0xf317, 0x0356, 0x935b, 0x634f, 0xf342, 0xc364, 0x5369, 0xa37d, 0x3370, 0x03fc, 0x93f1, 0x63e5, 0xf3e8, 0xc3ce, 0x53c3, 0xa3d7, 0x33da, 0xc39b, 0x5396, 0xa382, 0x338f, 0x03a9, 0x93a4, 0x63b0, 0xf3bd, 0x02a8, 0x92a5, 0x62b1, 0xf2bc, 0xc29a, 0x5297, 0xa283, 0x328e, 0xc2cf, 0x52c2, 0xa2d6, 0x32db, 0x02fd, 0x92f0, 0x62e4, 0xf2e9, 0xc265, 0x5268, 0xa27c, 0x3271, 0x0257, 0x925a, 0x624e, 0xf243, 0x0202, 0x920f, 0x621b, 0xf216, 0xc230, 0x523d, 0xa229, 0x3224, 0xc661, 0x566c, 0xa678, 0x3675, 0x0653, 0x965e, 0x664a, 0xf647, 0x0606, 0x960b, 0x661f, 0xf612, 0xc634, 0x5639, 0xa62d, 0x3620, 0x06ac, 0x96a1, 0x66b5, 0xf6b8, 0xc69e, 0x5693, 0xa687, 0x368a, 0xc6cb, 0x56c6, 0xa6d2, 0x36df, 0x06f9, 0x96f4, 0x66e0, 0xf6ed, 0x07f8, 0x97f5, 0x67e1, 0xf7ec, 0xc7ca, 0x57c7, 0xa7d3, 0x37de, 0xc79f, 0x5792, 0xa786, 0x378b, 0x07ad, 0x97a0, 0x67b4, 0xf7b9, 0xc735, 0x5738, 0xa72c, 0x3721, 0x0707, 0x970a, 0x671e, 0xf713, 0x0752, 0x975f, 0x674b, 0xf746, 0xc760, 0x576d, 0xa779, 0x3774, 0x0550, 0x955d, 0x6549, 0xf544, 0xc562, 0x556f, 0xa57b, 0x3576, 0xc537, 0x553a, 0xa52e, 0x3523, 0x0505, 0x9508, 0x651c, 0xf511, 0xc59d, 0x5590, 0xa584, 0x3589, 0x05af, 0x95a2, 0x65b6, 0xf5bb, 0x05fa, 0x95f7, 0x65e3, 0xf5ee, 0xc5c8, 0x55c5, 0xa5d1, 0x35dc, 0xc4c9, 0x54c4, 0xa4d0, 0x34dd, 0x04fb, 0x94f6, 0x64e2, 0xf4ef, 0x04ae, 0x94a3, 0x64b7, 0xf4ba, 0xc49c, 0x5491, 0xa485, 0x3488, 0x0404, 0x9409, 0x641d, 0xf410, 0xc436, 0x543b, 0xa42f, 0x3422, 0xc463, 0x546e, 0xa47a, 0x3477, 0x0451, 0x945c, 0x6448, 0xf445, ], [ 0x0000, 0xc551, 0xcaa1, 0x0ff0, 0xd541, 0x1010, 0x1fe0, 0xdab1, 0xea81, 0x2fd0, 0x2020, 0xe571, 0x3fc0, 0xfa91, 0xf561, 0x3030, 0x9501, 0x5050, 0x5fa0, 0x9af1, 0x4040, 0x8511, 0x8ae1, 0x4fb0, 0x7f80, 0xbad1, 0xb521, 0x7070, 0xaac1, 0x6f90, 0x6060, 0xa531, 0x6a01, 0xaf50, 0xa0a0, 0x65f1, 0xbf40, 0x7a11, 0x75e1, 0xb0b0, 0x8080, 0x45d1, 0x4a21, 0x8f70, 0x55c1, 0x9090, 0x9f60, 0x5a31, 0xff00, 0x3a51, 0x35a1, 0xf0f0, 0x2a41, 0xef10, 0xe0e0, 0x25b1, 0x1581, 0xd0d0, 0xdf20, 0x1a71, 0xc0c0, 0x0591, 0x0a61, 0xcf30, 0xd402, 0x1153, 0x1ea3, 0xdbf2, 0x0143, 0xc412, 0xcbe2, 0x0eb3, 0x3e83, 0xfbd2, 0xf422, 0x3173, 0xebc2, 0x2e93, 0x2163, 0xe432, 0x4103, 0x8452, 0x8ba2, 0x4ef3, 0x9442, 0x5113, 0x5ee3, 0x9bb2, 0xab82, 0x6ed3, 0x6123, 0xa472, 0x7ec3, 0xbb92, 0xb462, 0x7133, 0xbe03, 0x7b52, 0x74a2, 0xb1f3, 0x6b42, 0xae13, 0xa1e3, 0x64b2, 0x5482, 0x91d3, 0x9e23, 0x5b72, 0x81c3, 0x4492, 0x4b62, 0x8e33, 0x2b02, 0xee53, 0xe1a3, 0x24f2, 0xfe43, 0x3b12, 0x34e2, 0xf1b3, 0xc183, 0x04d2, 0x0b22, 0xce73, 0x14c2, 0xd193, 0xde63, 0x1b32, 0xe807, 0x2d56, 0x22a6, 0xe7f7, 0x3d46, 0xf817, 0xf7e7, 0x32b6, 0x0286, 0xc7d7, 0xc827, 0x0d76, 0xd7c7, 0x1296, 0x1d66, 0xd837, 0x7d06, 0xb857, 0xb7a7, 0x72f6, 0xa847, 0x6d16, 0x62e6, 0xa7b7, 0x9787, 0x52d6, 0x5d26, 0x9877, 0x42c6, 0x8797, 0x8867, 0x4d36, 0x8206, 0x4757, 0x48a7, 0x8df6, 0x5747, 0x9216, 0x9de6, 0x58b7, 0x6887, 0xadd6, 0xa226, 0x6777, 0xbdc6, 0x7897, 0x7767, 0xb236, 0x1707, 0xd256, 0xdda6, 0x18f7, 0xc246, 0x0717, 0x08e7, 0xcdb6, 0xfd86, 0x38d7, 0x3727, 0xf276, 0x28c7, 0xed96, 0xe266, 0x2737, 0x3c05, 0xf954, 0xf6a4, 0x33f5, 0xe944, 0x2c15, 0x23e5, 0xe6b4, 0xd684, 0x13d5, 0x1c25, 0xd974, 0x03c5, 0xc694, 0xc964, 0x0c35, 0xa904, 0x6c55, 0x63a5, 0xa6f4, 0x7c45, 0xb914, 0xb6e4, 0x73b5, 0x4385, 0x86d4, 0x8924, 0x4c75, 0x96c4, 0x5395, 0x5c65, 0x9934, 0x5604, 0x9355, 0x9ca5, 0x59f4, 0x8345, 0x4614, 0x49e4, 0x8cb5, 0xbc85, 0x79d4, 0x7624, 0xb375, 0x69c4, 0xac95, 0xa365, 0x6634, 0xc305, 0x0654, 0x09a4, 0xccf5, 0x1644, 0xd315, 0xdce5, 0x19b4, 0x2984, 0xecd5, 0xe325, 0x2674, 0xfcc5, 0x3994, 0x3664, 0xf335, ], [ 0x0000, 0xfc04, 0xb80b, 0x440f, 0x3015, 0xcc11, 0x881e, 0x741a, 0x602a, 0x9c2e, 0xd821, 0x2425, 0x503f, 0xac3b, 0xe834, 0x1430, 0xc054, 0x3c50, 0x785f, 0x845b, 0xf041, 0x0c45, 0x484a, 0xb44e, 0xa07e, 0x5c7a, 0x1875, 0xe471, 0x906b, 0x6c6f, 0x2860, 0xd464, 0xc0ab, 0x3caf, 0x78a0, 0x84a4, 0xf0be, 0x0cba, 0x48b5, 0xb4b1, 0xa081, 0x5c85, 0x188a, 0xe48e, 0x9094, 0x6c90, 0x289f, 0xd49b, 0x00ff, 0xfcfb, 0xb8f4, 0x44f0, 0x30ea, 0xccee, 0x88e1, 0x74e5, 0x60d5, 0x9cd1, 0xd8de, 0x24da, 0x50c0, 0xacc4, 0xe8cb, 0x14cf, 0xc155, 0x3d51, 0x795e, 0x855a, 0xf140, 0x0d44, 0x494b, 0xb54f, 0xa17f, 0x5d7b, 0x1974, 0xe570, 0x916a, 0x6d6e, 0x2961, 0xd565, 0x0101, 0xfd05, 0xb90a, 0x450e, 0x3114, 0xcd10, 0x891f, 0x751b, 0x612b, 0x9d2f, 0xd920, 0x2524, 0x513e, 0xad3a, 0xe935, 0x1531, 0x01fe, 0xfdfa, 0xb9f5, 0x45f1, 0x31eb, 0xcdef, 0x89e0, 0x75e4, 0x61d4, 0x9dd0, 0xd9df, 0x25db, 0x51c1, 0xadc5, 0xe9ca, 0x15ce, 0xc1aa, 0x3dae, 0x79a1, 0x85a5, 0xf1bf, 0x0dbb, 0x49b4, 0xb5b0, 0xa180, 0x5d84, 0x198b, 0xe58f, 0x9195, 0x6d91, 0x299e, 0xd59a, 0xc2a9, 0x3ead, 0x7aa2, 0x86a6, 0xf2bc, 0x0eb8, 0x4ab7, 0xb6b3, 0xa283, 0x5e87, 0x1a88, 0xe68c, 0x9296, 0x6e92, 0x2a9d, 0xd699, 0x02fd, 0xfef9, 0xbaf6, 0x46f2, 0x32e8, 0xceec, 0x8ae3, 0x76e7, 0x62d7, 0x9ed3, 0xdadc, 0x26d8, 0x52c2, 0xaec6, 0xeac9, 0x16cd, 0x0202, 0xfe06, 0xba09, 0x460d, 0x3217, 0xce13, 0x8a1c, 0x7618, 0x6228, 0x9e2c, 0xda23, 0x2627, 0x523d, 0xae39, 0xea36, 0x1632, 0xc256, 0x3e52, 0x7a5d, 0x8659, 0xf243, 0x0e47, 0x4a48, 0xb64c, 0xa27c, 0x5e78, 0x1a77, 0xe673, 0x9269, 0x6e6d, 0x2a62, 0xd666, 0x03fc, 0xfff8, 0xbbf7, 0x47f3, 0x33e9, 0xcfed, 0x8be2, 0x77e6, 0x63d6, 0x9fd2, 0xdbdd, 0x27d9, 0x53c3, 0xafc7, 0xebc8, 0x17cc, 0xc3a8, 0x3fac, 0x7ba3, 0x87a7, 0xf3bd, 0x0fb9, 0x4bb6, 0xb7b2, 0xa382, 0x5f86, 0x1b89, 0xe78d, 0x9397, 0x6f93, 0x2b9c, 0xd798, 0xc357, 0x3f53, 0x7b5c, 0x8758, 0xf342, 0x0f46, 0x4b49, 0xb74d, 0xa37d, 0x5f79, 0x1b76, 0xe772, 0x9368, 0x6f6c, 0x2b63, 0xd767, 0x0303, 0xff07, 0xbb08, 0x470c, 0x3316, 0xcf12, 0x8b1d, 0x7719, 0x6329, 0x9f2d, 0xdb22, 0x2726, 0x533c, 0xaf38, 0xeb37, 0x1733, ], [ 0x0000, 0xc3fd, 0xc7f9, 0x0404, 0xcff1, 0x0c0c, 0x0808, 0xcbf5, 0xdfe1, 0x1c1c, 0x1818, 0xdbe5, 0x1010, 0xd3ed, 0xd7e9, 0x1414, 0xffc1, 0x3c3c, 0x3838, 0xfbc5, 0x3030, 0xf3cd, 0xf7c9, 0x3434, 0x2020, 0xe3dd, 0xe7d9, 0x2424, 0xefd1, 0x2c2c, 0x2828, 0xebd5, 0xbf81, 0x7c7c, 0x7878, 0xbb85, 0x7070, 0xb38d, 0xb789, 0x7474, 0x6060, 0xa39d, 0xa799, 0x6464, 0xaf91, 0x6c6c, 0x6868, 0xab95, 0x4040, 0x83bd, 0x87b9, 0x4444, 0x8fb1, 0x4c4c, 0x4848, 0x8bb5, 0x9fa1, 0x5c5c, 0x5858, 0x9ba5, 0x5050, 0x93ad, 0x97a9, 0x5454, 0x3f01, 0xfcfc, 0xf8f8, 0x3b05, 0xf0f0, 0x330d, 0x3709, 0xf4f4, 0xe0e0, 0x231d, 0x2719, 0xe4e4, 0x2f11, 0xecec, 0xe8e8, 0x2b15, 0xc0c0, 0x033d, 0x0739, 0xc4c4, 0x0f31, 0xcccc, 0xc8c8, 0x0b35, 0x1f21, 0xdcdc, 0xd8d8, 0x1b25, 0xd0d0, 0x132d, 0x1729, 0xd4d4, 0x8080, 0x437d, 0x4779, 0x8484, 0x4f71, 0x8c8c, 0x8888, 0x4b75, 0x5f61, 0x9c9c, 0x9898, 0x5b65, 0x9090, 0x536d, 0x5769, 0x9494, 0x7f41, 0xbcbc, 0xb8b8, 0x7b45, 0xb0b0, 0x734d, 0x7749, 0xb4b4, 0xa0a0, 0x635d, 0x6759, 0xa4a4, 0x6f51, 0xacac, 0xa8a8, 0x6b55, 0x7e02, 0xbdff, 0xb9fb, 0x7a06, 0xb1f3, 0x720e, 0x760a, 0xb5f7, 0xa1e3, 0x621e, 0x661a, 0xa5e7, 0x6e12, 0xadef, 0xa9eb, 0x6a16, 0x81c3, 0x423e, 0x463a, 0x85c7, 0x4e32, 0x8dcf, 0x89cb, 0x4a36, 0x5e22, 0x9ddf, 0x99db, 0x5a26, 0x91d3, 0x522e, 0x562a, 0x95d7, 0xc183, 0x027e, 0x067a, 0xc587, 0x0e72, 0xcd8f, 0xc98b, 0x0a76, 0x1e62, 0xdd9f, 0xd99b, 0x1a66, 0xd193, 0x126e, 0x166a, 0xd597, 0x3e42, 0xfdbf, 0xf9bb, 0x3a46, 0xf1b3, 0x324e, 0x364a, 0xf5b7, 0xe1a3, 0x225e, 0x265a, 0xe5a7, 0x2e52, 0xedaf, 0xe9ab, 0x2a56, 0x4103, 0x82fe, 0x86fa, 0x4507, 0x8ef2, 0x4d0f, 0x490b, 0x8af6, 0x9ee2, 0x5d1f, 0x591b, 0x9ae6, 0x5113, 0x92ee, 0x96ea, 0x5517, 0xbec2, 0x7d3f, 0x793b, 0xbac6, 0x7133, 0xb2ce, 0xb6ca, 0x7537, 0x6123, 0xa2de, 0xa6da, 0x6527, 0xaed2, 0x6d2f, 0x692b, 0xaad6, 0xfe82, 0x3d7f, 0x397b, 0xfa86, 0x3173, 0xf28e, 0xf68a, 0x3577, 0x2163, 0xe29e, 0xe69a, 0x2567, 0xee92, 0x2d6f, 0x296b, 0xea96, 0x0143, 0xc2be, 0xc6ba, 0x0547, 0xceb2, 0x0d4f, 0x094b, 0xcab6, 0xdea2, 0x1d5f, 0x195b, 0xdaa6, 0x1153, 0xd2ae, 0xd6aa, 0x1557, ], [ 0x0000, 0x8102, 0x4207, 0xc305, 0x840e, 0x050c, 0xc609, 0x470b, 0x481f, 0xc91d, 0x0a18, 0x8b1a, 0xcc11, 0x4d13, 0x8e16, 0x0f14, 0x903e, 0x113c, 0xd239, 0x533b, 0x1430, 0x9532, 0x5637, 0xd735, 0xd821, 0x5923, 0x9a26, 0x1b24, 0x5c2f, 0xdd2d, 0x1e28, 0x9f2a, 0x607f, 0xe17d, 0x2278, 0xa37a, 0xe471, 0x6573, 0xa676, 0x2774, 0x2860, 0xa962, 0x6a67, 0xeb65, 0xac6e, 0x2d6c, 0xee69, 0x6f6b, 0xf041, 0x7143, 0xb246, 0x3344, 0x744f, 0xf54d, 0x3648, 0xb74a, 0xb85e, 0x395c, 0xfa59, 0x7b5b, 0x3c50, 0xbd52, 0x7e57, 0xff55, 0xc0fe, 0x41fc, 0x82f9, 0x03fb, 0x44f0, 0xc5f2, 0x06f7, 0x87f5, 0x88e1, 0x09e3, 0xcae6, 0x4be4, 0x0cef, 0x8ded, 0x4ee8, 0xcfea, 0x50c0, 0xd1c2, 0x12c7, 0x93c5, 0xd4ce, 0x55cc, 0x96c9, 0x17cb, 0x18df, 0x99dd, 0x5ad8, 0xdbda, 0x9cd1, 0x1dd3, 0xded6, 0x5fd4, 0xa081, 0x2183, 0xe286, 0x6384, 0x248f, 0xa58d, 0x6688, 0xe78a, 0xe89e, 0x699c, 0xaa99, 0x2b9b, 0x6c90, 0xed92, 0x2e97, 0xaf95, 0x30bf, 0xb1bd, 0x72b8, 0xf3ba, 0xb4b1, 0x35b3, 0xf6b6, 0x77b4, 0x78a0, 0xf9a2, 0x3aa7, 0xbba5, 0xfcae, 0x7dac, 0xbea9, 0x3fab, 0xc1ff, 0x40fd, 0x83f8, 0x02fa, 0x45f1, 0xc4f3, 0x07f6, 0x86f4, 0x89e0, 0x08e2, 0xcbe7, 0x4ae5, 0x0dee, 0x8cec, 0x4fe9, 0xceeb, 0x51c1, 0xd0c3, 0x13c6, 0x92c4, 0xd5cf, 0x54cd, 0x97c8, 0x16ca, 0x19de, 0x98dc, 0x5bd9, 0xdadb, 0x9dd0, 0x1cd2, 0xdfd7, 0x5ed5, 0xa180, 0x2082, 0xe387, 0x6285, 0x258e, 0xa48c, 0x6789, 0xe68b, 0xe99f, 0x689d, 0xab98, 0x2a9a, 0x6d91, 0xec93, 0x2f96, 0xae94, 0x31be, 0xb0bc, 0x73b9, 0xf2bb, 0xb5b0, 0x34b2, 0xf7b7, 0x76b5, 0x79a1, 0xf8a3, 0x3ba6, 0xbaa4, 0xfdaf, 0x7cad, 0xbfa8, 0x3eaa, 0x0101, 0x8003, 0x4306, 0xc204, 0x850f, 0x040d, 0xc708, 0x460a, 0x491e, 0xc81c, 0x0b19, 0x8a1b, 0xcd10, 0x4c12, 0x8f17, 0x0e15, 0x913f, 0x103d, 0xd338, 0x523a, 0x1531, 0x9433, 0x5736, 0xd634, 0xd920, 0x5822, 0x9b27, 0x1a25, 0x5d2e, 0xdc2c, 0x1f29, 0x9e2b, 0x617e, 0xe07c, 0x2379, 0xa27b, 0xe570, 0x6472, 0xa777, 0x2675, 0x2961, 0xa863, 0x6b66, 0xea64, 0xad6f, 0x2c6d, 0xef68, 0x6e6a, 0xf140, 0x7042, 0xb347, 0x3245, 0x754e, 0xf44c, 0x3749, 0xb64b, 0xb95f, 0x385d, 0xfb58, 0x7a5a, 0x3d51, 0xbc53, 0x7f56, 0xfe54, ], [ 0x0000, 0xc100, 0xc203, 0x0303, 0xc405, 0x0505, 0x0606, 0xc706, 0xc809, 0x0909, 0x0a0a, 0xcb0a, 0x0c0c, 0xcd0c, 0xce0f, 0x0f0f, 0xd011, 0x1111, 0x1212, 0xd312, 0x1414, 0xd514, 0xd617, 0x1717, 0x1818, 0xd918, 0xda1b, 0x1b1b, 0xdc1d, 0x1d1d, 0x1e1e, 0xdf1e, 0xe021, 0x2121, 0x2222, 0xe322, 0x2424, 0xe524, 0xe627, 0x2727, 0x2828, 0xe928, 0xea2b, 0x2b2b, 0xec2d, 0x2d2d, 0x2e2e, 0xef2e, 0x3030, 0xf130, 0xf233, 0x3333, 0xf435, 0x3535, 0x3636, 0xf736, 0xf839, 0x3939, 0x3a3a, 0xfb3a, 0x3c3c, 0xfd3c, 0xfe3f, 0x3f3f, 0x8041, 0x4141, 0x4242, 0x8342, 0x4444, 0x8544, 0x8647, 0x4747, 0x4848, 0x8948, 0x8a4b, 0x4b4b, 0x8c4d, 0x4d4d, 0x4e4e, 0x8f4e, 0x5050, 0x9150, 0x9253, 0x5353, 0x9455, 0x5555, 0x5656, 0x9756, 0x9859, 0x5959, 0x5a5a, 0x9b5a, 0x5c5c, 0x9d5c, 0x9e5f, 0x5f5f, 0x6060, 0xa160, 0xa263, 0x6363, 0xa465, 0x6565, 0x6666, 0xa766, 0xa869, 0x6969, 0x6a6a, 0xab6a, 0x6c6c, 0xad6c, 0xae6f, 0x6f6f, 0xb071, 0x7171, 0x7272, 0xb372, 0x7474, 0xb574, 0xb677, 0x7777, 0x7878, 0xb978, 0xba7b, 0x7b7b, 0xbc7d, 0x7d7d, 0x7e7e, 0xbf7e, 0x4081, 0x8181, 0x8282, 0x4382, 0x8484, 0x4584, 0x4687, 0x8787, 0x8888, 0x4988, 0x4a8b, 0x8b8b, 0x4c8d, 0x8d8d, 0x8e8e, 0x4f8e, 0x9090, 0x5190, 0x5293, 0x9393, 0x5495, 0x9595, 0x9696, 0x5796, 0x5899, 0x9999, 0x9a9a, 0x5b9a, 0x9c9c, 0x5d9c, 0x5e9f, 0x9f9f, 0xa0a0, 0x61a0, 0x62a3, 0xa3a3, 0x64a5, 0xa5a5, 0xa6a6, 0x67a6, 0x68a9, 0xa9a9, 0xaaaa, 0x6baa, 0xacac, 0x6dac, 0x6eaf, 0xafaf, 0x70b1, 0xb1b1, 0xb2b2, 0x73b2, 0xb4b4, 0x75b4, 0x76b7, 0xb7b7, 0xb8b8, 0x79b8, 0x7abb, 0xbbbb, 0x7cbd, 0xbdbd, 0xbebe, 0x7fbe, 0xc0c0, 0x01c0, 0x02c3, 0xc3c3, 0x04c5, 0xc5c5, 0xc6c6, 0x07c6, 0x08c9, 0xc9c9, 0xcaca, 0x0bca, 0xcccc, 0x0dcc, 0x0ecf, 0xcfcf, 0x10d1, 0xd1d1, 0xd2d2, 0x13d2, 0xd4d4, 0x15d4, 0x16d7, 0xd7d7, 0xd8d8, 0x19d8, 0x1adb, 0xdbdb, 0x1cdd, 0xdddd, 0xdede, 0x1fde, 0x20e1, 0xe1e1, 0xe2e2, 0x23e2, 0xe4e4, 0x25e4, 0x26e7, 0xe7e7, 0xe8e8, 0x29e8, 0x2aeb, 0xebeb, 0x2ced, 0xeded, 0xeeee, 0x2fee, 0xf0f0, 0x31f0, 0x32f3, 0xf3f3, 0x34f5, 0xf5f5, 0xf6f6, 0x37f6, 0x38f9, 0xf9f9, 0xfafa, 0x3bfa, 0xfcfc, 0x3dfc, 0x3eff, 0xffff, ], [ 0x0000, 0x00c1, 0x0182, 0x0143, 0x0304, 0x03c5, 0x0286, 0x0247, 0x0608, 0x06c9, 0x078a, 0x074b, 0x050c, 0x05cd, 0x048e, 0x044f, 0x0c10, 0x0cd1, 0x0d92, 0x0d53, 0x0f14, 0x0fd5, 0x0e96, 0x0e57, 0x0a18, 0x0ad9, 0x0b9a, 0x0b5b, 0x091c, 0x09dd, 0x089e, 0x085f, 0x1820, 0x18e1, 0x19a2, 0x1963, 0x1b24, 0x1be5, 0x1aa6, 0x1a67, 0x1e28, 0x1ee9, 0x1faa, 0x1f6b, 0x1d2c, 0x1ded, 0x1cae, 0x1c6f, 0x1430, 0x14f1, 0x15b2, 0x1573, 0x1734, 0x17f5, 0x16b6, 0x1677, 0x1238, 0x12f9, 0x13ba, 0x137b, 0x113c, 0x11fd, 0x10be, 0x107f, 0x3040, 0x3081, 0x31c2, 0x3103, 0x3344, 0x3385, 0x32c6, 0x3207, 0x3648, 0x3689, 0x37ca, 0x370b, 0x354c, 0x358d, 0x34ce, 0x340f, 0x3c50, 0x3c91, 0x3dd2, 0x3d13, 0x3f54, 0x3f95, 0x3ed6, 0x3e17, 0x3a58, 0x3a99, 0x3bda, 0x3b1b, 0x395c, 0x399d, 0x38de, 0x381f, 0x2860, 0x28a1, 0x29e2, 0x2923, 0x2b64, 0x2ba5, 0x2ae6, 0x2a27, 0x2e68, 0x2ea9, 0x2fea, 0x2f2b, 0x2d6c, 0x2dad, 0x2cee, 0x2c2f, 0x2470, 0x24b1, 0x25f2, 0x2533, 0x2774, 0x27b5, 0x26f6, 0x2637, 0x2278, 0x22b9, 0x23fa, 0x233b, 0x217c, 0x21bd, 0x20fe, 0x203f, 0x6080, 0x6041, 0x6102, 0x61c3, 0x6384, 0x6345, 0x6206, 0x62c7, 0x6688, 0x6649, 0x670a, 0x67cb, 0x658c, 0x654d, 0x640e, 0x64cf, 0x6c90, 0x6c51, 0x6d12, 0x6dd3, 0x6f94, 0x6f55, 0x6e16, 0x6ed7, 0x6a98, 0x6a59, 0x6b1a, 0x6bdb, 0x699c, 0x695d, 0x681e, 0x68df, 0x78a0, 0x7861, 0x7922, 0x79e3, 0x7ba4, 0x7b65, 0x7a26, 0x7ae7, 0x7ea8, 0x7e69, 0x7f2a, 0x7feb, 0x7dac, 0x7d6d, 0x7c2e, 0x7cef, 0x74b0, 0x7471, 0x7532, 0x75f3, 0x77b4, 0x7775, 0x7636, 0x76f7, 0x72b8, 0x7279, 0x733a, 0x73fb, 0x71bc, 0x717d, 0x703e, 0x70ff, 0x50c0, 0x5001, 0x5142, 0x5183, 0x53c4, 0x5305, 0x5246, 0x5287, 0x56c8, 0x5609, 0x574a, 0x578b, 0x55cc, 0x550d, 0x544e, 0x548f, 0x5cd0, 0x5c11, 0x5d52, 0x5d93, 0x5fd4, 0x5f15, 0x5e56, 0x5e97, 0x5ad8, 0x5a19, 0x5b5a, 0x5b9b, 0x59dc, 0x591d, 0x585e, 0x589f, 0x48e0, 0x4821, 0x4962, 0x49a3, 0x4be4, 0x4b25, 0x4a66, 0x4aa7, 0x4ee8, 0x4e29, 0x4f6a, 0x4fab, 0x4dec, 0x4d2d, 0x4c6e, 0x4caf, 0x44f0, 0x4431, 0x4572, 0x45b3, 0x47f4, 0x4735, 0x4676, 0x46b7, 0x42f8, 0x4239, 0x437a, 0x43bb, 0x41fc, 0x413d, 0x407e, 0x40bf, ], [ 0x0000, 0x90c1, 0x6181, 0xf140, 0xc302, 0x53c3, 0xa283, 0x3242, 0xc607, 0x56c6, 0xa786, 0x3747, 0x0505, 0x95c4, 0x6484, 0xf445, 0xcc0d, 0x5ccc, 0xad8c, 0x3d4d, 0x0f0f, 0x9fce, 0x6e8e, 0xfe4f, 0x0a0a, 0x9acb, 0x6b8b, 0xfb4a, 0xc908, 0x59c9, 0xa889, 0x3848, 0xd819, 0x48d8, 0xb998, 0x2959, 0x1b1b, 0x8bda, 0x7a9a, 0xea5b, 0x1e1e, 0x8edf, 0x7f9f, 0xef5e, 0xdd1c, 0x4ddd, 0xbc9d, 0x2c5c, 0x1414, 0x84d5, 0x7595, 0xe554, 0xd716, 0x47d7, 0xb697, 0x2656, 0xd213, 0x42d2, 0xb392, 0x2353, 0x1111, 0x81d0, 0x7090, 0xe051, 0xf031, 0x60f0, 0x91b0, 0x0171, 0x3333, 0xa3f2, 0x52b2, 0xc273, 0x3636, 0xa6f7, 0x57b7, 0xc776, 0xf534, 0x65f5, 0x94b5, 0x0474, 0x3c3c, 0xacfd, 0x5dbd, 0xcd7c, 0xff3e, 0x6fff, 0x9ebf, 0x0e7e, 0xfa3b, 0x6afa, 0x9bba, 0x0b7b, 0x3939, 0xa9f8, 0x58b8, 0xc879, 0x2828, 0xb8e9, 0x49a9, 0xd968, 0xeb2a, 0x7beb, 0x8aab, 0x1a6a, 0xee2f, 0x7eee, 0x8fae, 0x1f6f, 0x2d2d, 0xbdec, 0x4cac, 0xdc6d, 0xe425, 0x74e4, 0x85a4, 0x1565, 0x2727, 0xb7e6, 0x46a6, 0xd667, 0x2222, 0xb2e3, 0x43a3, 0xd362, 0xe120, 0x71e1, 0x80a1, 0x1060, 0xa061, 0x30a0, 0xc1e0, 0x5121, 0x6363, 0xf3a2, 0x02e2, 0x9223, 0x6666, 0xf6a7, 0x07e7, 0x9726, 0xa564, 0x35a5, 0xc4e5, 0x5424, 0x6c6c, 0xfcad, 0x0ded, 0x9d2c, 0xaf6e, 0x3faf, 0xceef, 0x5e2e, 0xaa6b, 0x3aaa, 0xcbea, 0x5b2b, 0x6969, 0xf9a8, 0x08e8, 0x9829, 0x7878, 0xe8b9, 0x19f9, 0x8938, 0xbb7a, 0x2bbb, 0xdafb, 0x4a3a, 0xbe7f, 0x2ebe, 0xdffe, 0x4f3f, 0x7d7d, 0xedbc, 0x1cfc, 0x8c3d, 0xb475, 0x24b4, 0xd5f4, 0x4535, 0x7777, 0xe7b6, 0x16f6, 0x8637, 0x7272, 0xe2b3, 0x13f3, 0x8332, 0xb170, 0x21b1, 0xd0f1, 0x4030, 0x5050, 0xc091, 0x31d1, 0xa110, 0x9352, 0x0393, 0xf2d3, 0x6212, 0x9657, 0x0696, 0xf7d6, 0x6717, 0x5555, 0xc594, 0x34d4, 0xa415, 0x9c5d, 0x0c9c, 0xfddc, 0x6d1d, 0x5f5f, 0xcf9e, 0x3ede, 0xae1f, 0x5a5a, 0xca9b, 0x3bdb, 0xab1a, 0x9958, 0x0999, 0xf8d9, 0x6818, 0x8849, 0x1888, 0xe9c8, 0x7909, 0x4b4b, 0xdb8a, 0x2aca, 0xba0b, 0x4e4e, 0xde8f, 0x2fcf, 0xbf0e, 0x8d4c, 0x1d8d, 0xeccd, 0x7c0c, 0x4444, 0xd485, 0x25c5, 0xb504, 0x8746, 0x1787, 0xe6c7, 0x7606, 0x8243, 0x1282, 0xe3c2, 0x7303, 0x4141, 0xd180, 0x20c0, 0xb001, ], ]; pub static CRC16_XMODEM_TABLE: [[u16; 256]; 16] = [ [ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, ], [ 0x0000, 0x3331, 0x6662, 0x5553, 0xccc4, 0xfff5, 0xaaa6, 0x9997, 0x89a9, 0xba98, 0xefcb, 0xdcfa, 0x456d, 0x765c, 0x230f, 0x103e, 0x0373, 0x3042, 0x6511, 0x5620, 0xcfb7, 0xfc86, 0xa9d5, 0x9ae4, 0x8ada, 0xb9eb, 0xecb8, 0xdf89, 0x461e, 0x752f, 0x207c, 0x134d, 0x06e6, 0x35d7, 0x6084, 0x53b5, 0xca22, 0xf913, 0xac40, 0x9f71, 0x8f4f, 0xbc7e, 0xe92d, 0xda1c, 0x438b, 0x70ba, 0x25e9, 0x16d8, 0x0595, 0x36a4, 0x63f7, 0x50c6, 0xc951, 0xfa60, 0xaf33, 0x9c02, 0x8c3c, 0xbf0d, 0xea5e, 0xd96f, 0x40f8, 0x73c9, 0x269a, 0x15ab, 0x0dcc, 0x3efd, 0x6bae, 0x589f, 0xc108, 0xf239, 0xa76a, 0x945b, 0x8465, 0xb754, 0xe207, 0xd136, 0x48a1, 0x7b90, 0x2ec3, 0x1df2, 0x0ebf, 0x3d8e, 0x68dd, 0x5bec, 0xc27b, 0xf14a, 0xa419, 0x9728, 0x8716, 0xb427, 0xe174, 0xd245, 0x4bd2, 0x78e3, 0x2db0, 0x1e81, 0x0b2a, 0x381b, 0x6d48, 0x5e79, 0xc7ee, 0xf4df, 0xa18c, 0x92bd, 0x8283, 0xb1b2, 0xe4e1, 0xd7d0, 0x4e47, 0x7d76, 0x2825, 0x1b14, 0x0859, 0x3b68, 0x6e3b, 0x5d0a, 0xc49d, 0xf7ac, 0xa2ff, 0x91ce, 0x81f0, 0xb2c1, 0xe792, 0xd4a3, 0x4d34, 0x7e05, 0x2b56, 0x1867, 0x1b98, 0x28a9, 0x7dfa, 0x4ecb, 0xd75c, 0xe46d, 0xb13e, 0x820f, 0x9231, 0xa100, 0xf453, 0xc762, 0x5ef5, 0x6dc4, 0x3897, 0x0ba6, 0x18eb, 0x2bda, 0x7e89, 0x4db8, 0xd42f, 0xe71e, 0xb24d, 0x817c, 0x9142, 0xa273, 0xf720, 0xc411, 0x5d86, 0x6eb7, 0x3be4, 0x08d5, 0x1d7e, 0x2e4f, 0x7b1c, 0x482d, 0xd1ba, 0xe28b, 0xb7d8, 0x84e9, 0x94d7, 0xa7e6, 0xf2b5, 0xc184, 0x5813, 0x6b22, 0x3e71, 0x0d40, 0x1e0d, 0x2d3c, 0x786f, 0x4b5e, 0xd2c9, 0xe1f8, 0xb4ab, 0x879a, 0x97a4, 0xa495, 0xf1c6, 0xc2f7, 0x5b60, 0x6851, 0x3d02, 0x0e33, 0x1654, 0x2565, 0x7036, 0x4307, 0xda90, 0xe9a1, 0xbcf2, 0x8fc3, 0x9ffd, 0xaccc, 0xf99f, 0xcaae, 0x5339, 0x6008, 0x355b, 0x066a, 0x1527, 0x2616, 0x7345, 0x4074, 0xd9e3, 0xead2, 0xbf81, 0x8cb0, 0x9c8e, 0xafbf, 0xfaec, 0xc9dd, 0x504a, 0x637b, 0x3628, 0x0519, 0x10b2, 0x2383, 0x76d0, 0x45e1, 0xdc76, 0xef47, 0xba14, 0x8925, 0x991b, 0xaa2a, 0xff79, 0xcc48, 0x55df, 0x66ee, 0x33bd, 0x008c, 0x13c1, 0x20f0, 0x75a3, 0x4692, 0xdf05, 0xec34, 0xb967, 0x8a56, 0x9a68, 0xa959, 0xfc0a, 0xcf3b, 0x56ac, 0x659d, 0x30ce, 0x03ff, ], [ 0x0000, 0x3730, 0x6e60, 0x5950, 0xdcc0, 0xebf0, 0xb2a0, 0x8590, 0xa9a1, 0x9e91, 0xc7c1, 0xf0f1, 0x7561, 0x4251, 0x1b01, 0x2c31, 0x4363, 0x7453, 0x2d03, 0x1a33, 0x9fa3, 0xa893, 0xf1c3, 0xc6f3, 0xeac2, 0xddf2, 0x84a2, 0xb392, 0x3602, 0x0132, 0x5862, 0x6f52, 0x86c6, 0xb1f6, 0xe8a6, 0xdf96, 0x5a06, 0x6d36, 0x3466, 0x0356, 0x2f67, 0x1857, 0x4107, 0x7637, 0xf3a7, 0xc497, 0x9dc7, 0xaaf7, 0xc5a5, 0xf295, 0xabc5, 0x9cf5, 0x1965, 0x2e55, 0x7705, 0x4035, 0x6c04, 0x5b34, 0x0264, 0x3554, 0xb0c4, 0x87f4, 0xdea4, 0xe994, 0x1dad, 0x2a9d, 0x73cd, 0x44fd, 0xc16d, 0xf65d, 0xaf0d, 0x983d, 0xb40c, 0x833c, 0xda6c, 0xed5c, 0x68cc, 0x5ffc, 0x06ac, 0x319c, 0x5ece, 0x69fe, 0x30ae, 0x079e, 0x820e, 0xb53e, 0xec6e, 0xdb5e, 0xf76f, 0xc05f, 0x990f, 0xae3f, 0x2baf, 0x1c9f, 0x45cf, 0x72ff, 0x9b6b, 0xac5b, 0xf50b, 0xc23b, 0x47ab, 0x709b, 0x29cb, 0x1efb, 0x32ca, 0x05fa, 0x5caa, 0x6b9a, 0xee0a, 0xd93a, 0x806a, 0xb75a, 0xd808, 0xef38, 0xb668, 0x8158, 0x04c8, 0x33f8, 0x6aa8, 0x5d98, 0x71a9, 0x4699, 0x1fc9, 0x28f9, 0xad69, 0x9a59, 0xc309, 0xf439, 0x3b5a, 0x0c6a, 0x553a, 0x620a, 0xe79a, 0xd0aa, 0x89fa, 0xbeca, 0x92fb, 0xa5cb, 0xfc9b, 0xcbab, 0x4e3b, 0x790b, 0x205b, 0x176b, 0x7839, 0x4f09, 0x1659, 0x2169, 0xa4f9, 0x93c9, 0xca99, 0xfda9, 0xd198, 0xe6a8, 0xbff8, 0x88c8, 0x0d58, 0x3a68, 0x6338, 0x5408, 0xbd9c, 0x8aac, 0xd3fc, 0xe4cc, 0x615c, 0x566c, 0x0f3c, 0x380c, 0x143d, 0x230d, 0x7a5d, 0x4d6d, 0xc8fd, 0xffcd, 0xa69d, 0x91ad, 0xfeff, 0xc9cf, 0x909f, 0xa7af, 0x223f, 0x150f, 0x4c5f, 0x7b6f, 0x575e, 0x606e, 0x393e, 0x0e0e, 0x8b9e, 0xbcae, 0xe5fe, 0xd2ce, 0x26f7, 0x11c7, 0x4897, 0x7fa7, 0xfa37, 0xcd07, 0x9457, 0xa367, 0x8f56, 0xb866, 0xe136, 0xd606, 0x5396, 0x64a6, 0x3df6, 0x0ac6, 0x6594, 0x52a4, 0x0bf4, 0x3cc4, 0xb954, 0x8e64, 0xd734, 0xe004, 0xcc35, 0xfb05, 0xa255, 0x9565, 0x10f5, 0x27c5, 0x7e95, 0x49a5, 0xa031, 0x9701, 0xce51, 0xf961, 0x7cf1, 0x4bc1, 0x1291, 0x25a1, 0x0990, 0x3ea0, 0x67f0, 0x50c0, 0xd550, 0xe260, 0xbb30, 0x8c00, 0xe352, 0xd462, 0x8d32, 0xba02, 0x3f92, 0x08a2, 0x51f2, 0x66c2, 0x4af3, 0x7dc3, 0x2493, 0x13a3, 0x9633, 0xa103, 0xf853, 0xcf63, ], [ 0x0000, 0x76b4, 0xed68, 0x9bdc, 0xcaf1, 0xbc45, 0x2799, 0x512d, 0x85c3, 0xf377, 0x68ab, 0x1e1f, 0x4f32, 0x3986, 0xa25a, 0xd4ee, 0x1ba7, 0x6d13, 0xf6cf, 0x807b, 0xd156, 0xa7e2, 0x3c3e, 0x4a8a, 0x9e64, 0xe8d0, 0x730c, 0x05b8, 0x5495, 0x2221, 0xb9fd, 0xcf49, 0x374e, 0x41fa, 0xda26, 0xac92, 0xfdbf, 0x8b0b, 0x10d7, 0x6663, 0xb28d, 0xc439, 0x5fe5, 0x2951, 0x787c, 0x0ec8, 0x9514, 0xe3a0, 0x2ce9, 0x5a5d, 0xc181, 0xb735, 0xe618, 0x90ac, 0x0b70, 0x7dc4, 0xa92a, 0xdf9e, 0x4442, 0x32f6, 0x63db, 0x156f, 0x8eb3, 0xf807, 0x6e9c, 0x1828, 0x83f4, 0xf540, 0xa46d, 0xd2d9, 0x4905, 0x3fb1, 0xeb5f, 0x9deb, 0x0637, 0x7083, 0x21ae, 0x571a, 0xccc6, 0xba72, 0x753b, 0x038f, 0x9853, 0xeee7, 0xbfca, 0xc97e, 0x52a2, 0x2416, 0xf0f8, 0x864c, 0x1d90, 0x6b24, 0x3a09, 0x4cbd, 0xd761, 0xa1d5, 0x59d2, 0x2f66, 0xb4ba, 0xc20e, 0x9323, 0xe597, 0x7e4b, 0x08ff, 0xdc11, 0xaaa5, 0x3179, 0x47cd, 0x16e0, 0x6054, 0xfb88, 0x8d3c, 0x4275, 0x34c1, 0xaf1d, 0xd9a9, 0x8884, 0xfe30, 0x65ec, 0x1358, 0xc7b6, 0xb102, 0x2ade, 0x5c6a, 0x0d47, 0x7bf3, 0xe02f, 0x969b, 0xdd38, 0xab8c, 0x3050, 0x46e4, 0x17c9, 0x617d, 0xfaa1, 0x8c15, 0x58fb, 0x2e4f, 0xb593, 0xc327, 0x920a, 0xe4be, 0x7f62, 0x09d6, 0xc69f, 0xb02b, 0x2bf7, 0x5d43, 0x0c6e, 0x7ada, 0xe106, 0x97b2, 0x435c, 0x35e8, 0xae34, 0xd880, 0x89ad, 0xff19, 0x64c5, 0x1271, 0xea76, 0x9cc2, 0x071e, 0x71aa, 0x2087, 0x5633, 0xcdef, 0xbb5b, 0x6fb5, 0x1901, 0x82dd, 0xf469, 0xa544, 0xd3f0, 0x482c, 0x3e98, 0xf1d1, 0x8765, 0x1cb9, 0x6a0d, 0x3b20, 0x4d94, 0xd648, 0xa0fc, 0x7412, 0x02a6, 0x997a, 0xefce, 0xbee3, 0xc857, 0x538b, 0x253f, 0xb3a4, 0xc510, 0x5ecc, 0x2878, 0x7955, 0x0fe1, 0x943d, 0xe289, 0x3667, 0x40d3, 0xdb0f, 0xadbb, 0xfc96, 0x8a22, 0x11fe, 0x674a, 0xa803, 0xdeb7, 0x456b, 0x33df, 0x62f2, 0x1446, 0x8f9a, 0xf92e, 0x2dc0, 0x5b74, 0xc0a8, 0xb61c, 0xe731, 0x9185, 0x0a59, 0x7ced, 0x84ea, 0xf25e, 0x6982, 0x1f36, 0x4e1b, 0x38af, 0xa373, 0xd5c7, 0x0129, 0x779d, 0xec41, 0x9af5, 0xcbd8, 0xbd6c, 0x26b0, 0x5004, 0x9f4d, 0xe9f9, 0x7225, 0x0491, 0x55bc, 0x2308, 0xb8d4, 0xce60, 0x1a8e, 0x6c3a, 0xf7e6, 0x8152, 0xd07f, 0xa6cb, 0x3d17, 0x4ba3, ], [ 0x0000, 0xaa51, 0x4483, 0xeed2, 0x8906, 0x2357, 0xcd85, 0x67d4, 0x022d, 0xa87c, 0x46ae, 0xecff, 0x8b2b, 0x217a, 0xcfa8, 0x65f9, 0x045a, 0xae0b, 0x40d9, 0xea88, 0x8d5c, 0x270d, 0xc9df, 0x638e, 0x0677, 0xac26, 0x42f4, 0xe8a5, 0x8f71, 0x2520, 0xcbf2, 0x61a3, 0x08b4, 0xa2e5, 0x4c37, 0xe666, 0x81b2, 0x2be3, 0xc531, 0x6f60, 0x0a99, 0xa0c8, 0x4e1a, 0xe44b, 0x839f, 0x29ce, 0xc71c, 0x6d4d, 0x0cee, 0xa6bf, 0x486d, 0xe23c, 0x85e8, 0x2fb9, 0xc16b, 0x6b3a, 0x0ec3, 0xa492, 0x4a40, 0xe011, 0x87c5, 0x2d94, 0xc346, 0x6917, 0x1168, 0xbb39, 0x55eb, 0xffba, 0x986e, 0x323f, 0xdced, 0x76bc, 0x1345, 0xb914, 0x57c6, 0xfd97, 0x9a43, 0x3012, 0xdec0, 0x7491, 0x1532, 0xbf63, 0x51b1, 0xfbe0, 0x9c34, 0x3665, 0xd8b7, 0x72e6, 0x171f, 0xbd4e, 0x539c, 0xf9cd, 0x9e19, 0x3448, 0xda9a, 0x70cb, 0x19dc, 0xb38d, 0x5d5f, 0xf70e, 0x90da, 0x3a8b, 0xd459, 0x7e08, 0x1bf1, 0xb1a0, 0x5f72, 0xf523, 0x92f7, 0x38a6, 0xd674, 0x7c25, 0x1d86, 0xb7d7, 0x5905, 0xf354, 0x9480, 0x3ed1, 0xd003, 0x7a52, 0x1fab, 0xb5fa, 0x5b28, 0xf179, 0x96ad, 0x3cfc, 0xd22e, 0x787f, 0x22d0, 0x8881, 0x6653, 0xcc02, 0xabd6, 0x0187, 0xef55, 0x4504, 0x20fd, 0x8aac, 0x647e, 0xce2f, 0xa9fb, 0x03aa, 0xed78, 0x4729, 0x268a, 0x8cdb, 0x6209, 0xc858, 0xaf8c, 0x05dd, 0xeb0f, 0x415e, 0x24a7, 0x8ef6, 0x6024, 0xca75, 0xada1, 0x07f0, 0xe922, 0x4373, 0x2a64, 0x8035, 0x6ee7, 0xc4b6, 0xa362, 0x0933, 0xe7e1, 0x4db0, 0x2849, 0x8218, 0x6cca, 0xc69b, 0xa14f, 0x0b1e, 0xe5cc, 0x4f9d, 0x2e3e, 0x846f, 0x6abd, 0xc0ec, 0xa738, 0x0d69, 0xe3bb, 0x49ea, 0x2c13, 0x8642, 0x6890, 0xc2c1, 0xa515, 0x0f44, 0xe196, 0x4bc7, 0x33b8, 0x99e9, 0x773b, 0xdd6a, 0xbabe, 0x10ef, 0xfe3d, 0x546c, 0x3195, 0x9bc4, 0x7516, 0xdf47, 0xb893, 0x12c2, 0xfc10, 0x5641, 0x37e2, 0x9db3, 0x7361, 0xd930, 0xbee4, 0x14b5, 0xfa67, 0x5036, 0x35cf, 0x9f9e, 0x714c, 0xdb1d, 0xbcc9, 0x1698, 0xf84a, 0x521b, 0x3b0c, 0x915d, 0x7f8f, 0xd5de, 0xb20a, 0x185b, 0xf689, 0x5cd8, 0x3921, 0x9370, 0x7da2, 0xd7f3, 0xb027, 0x1a76, 0xf4a4, 0x5ef5, 0x3f56, 0x9507, 0x7bd5, 0xd184, 0xb650, 0x1c01, 0xf2d3, 0x5882, 0x3d7b, 0x972a, 0x79f8, 0xd3a9, 0xb47d, 0x1e2c, 0xf0fe, 0x5aaf, ], [ 0x0000, 0x45a0, 0x8b40, 0xcee0, 0x06a1, 0x4301, 0x8de1, 0xc841, 0x0d42, 0x48e2, 0x8602, 0xc3a2, 0x0be3, 0x4e43, 0x80a3, 0xc503, 0x1a84, 0x5f24, 0x91c4, 0xd464, 0x1c25, 0x5985, 0x9765, 0xd2c5, 0x17c6, 0x5266, 0x9c86, 0xd926, 0x1167, 0x54c7, 0x9a27, 0xdf87, 0x3508, 0x70a8, 0xbe48, 0xfbe8, 0x33a9, 0x7609, 0xb8e9, 0xfd49, 0x384a, 0x7dea, 0xb30a, 0xf6aa, 0x3eeb, 0x7b4b, 0xb5ab, 0xf00b, 0x2f8c, 0x6a2c, 0xa4cc, 0xe16c, 0x292d, 0x6c8d, 0xa26d, 0xe7cd, 0x22ce, 0x676e, 0xa98e, 0xec2e, 0x246f, 0x61cf, 0xaf2f, 0xea8f, 0x6a10, 0x2fb0, 0xe150, 0xa4f0, 0x6cb1, 0x2911, 0xe7f1, 0xa251, 0x6752, 0x22f2, 0xec12, 0xa9b2, 0x61f3, 0x2453, 0xeab3, 0xaf13, 0x7094, 0x3534, 0xfbd4, 0xbe74, 0x7635, 0x3395, 0xfd75, 0xb8d5, 0x7dd6, 0x3876, 0xf696, 0xb336, 0x7b77, 0x3ed7, 0xf037, 0xb597, 0x5f18, 0x1ab8, 0xd458, 0x91f8, 0x59b9, 0x1c19, 0xd2f9, 0x9759, 0x525a, 0x17fa, 0xd91a, 0x9cba, 0x54fb, 0x115b, 0xdfbb, 0x9a1b, 0x459c, 0x003c, 0xcedc, 0x8b7c, 0x433d, 0x069d, 0xc87d, 0x8ddd, 0x48de, 0x0d7e, 0xc39e, 0x863e, 0x4e7f, 0x0bdf, 0xc53f, 0x809f, 0xd420, 0x9180, 0x5f60, 0x1ac0, 0xd281, 0x9721, 0x59c1, 0x1c61, 0xd962, 0x9cc2, 0x5222, 0x1782, 0xdfc3, 0x9a63, 0x5483, 0x1123, 0xcea4, 0x8b04, 0x45e4, 0x0044, 0xc805, 0x8da5, 0x4345, 0x06e5, 0xc3e6, 0x8646, 0x48a6, 0x0d06, 0xc547, 0x80e7, 0x4e07, 0x0ba7, 0xe128, 0xa488, 0x6a68, 0x2fc8, 0xe789, 0xa229, 0x6cc9, 0x2969, 0xec6a, 0xa9ca, 0x672a, 0x228a, 0xeacb, 0xaf6b, 0x618b, 0x242b, 0xfbac, 0xbe0c, 0x70ec, 0x354c, 0xfd0d, 0xb8ad, 0x764d, 0x33ed, 0xf6ee, 0xb34e, 0x7dae, 0x380e, 0xf04f, 0xb5ef, 0x7b0f, 0x3eaf, 0xbe30, 0xfb90, 0x3570, 0x70d0, 0xb891, 0xfd31, 0x33d1, 0x7671, 0xb372, 0xf6d2, 0x3832, 0x7d92, 0xb5d3, 0xf073, 0x3e93, 0x7b33, 0xa4b4, 0xe114, 0x2ff4, 0x6a54, 0xa215, 0xe7b5, 0x2955, 0x6cf5, 0xa9f6, 0xec56, 0x22b6, 0x6716, 0xaf57, 0xeaf7, 0x2417, 0x61b7, 0x8b38, 0xce98, 0x0078, 0x45d8, 0x8d99, 0xc839, 0x06d9, 0x4379, 0x867a, 0xc3da, 0x0d3a, 0x489a, 0x80db, 0xc57b, 0x0b9b, 0x4e3b, 0x91bc, 0xd41c, 0x1afc, 0x5f5c, 0x971d, 0xd2bd, 0x1c5d, 0x59fd, 0x9cfe, 0xd95e, 0x17be, 0x521e, 0x9a5f, 0xdfff, 0x111f, 0x54bf, ], [ 0x0000, 0xb861, 0x60e3, 0xd882, 0xc1c6, 0x79a7, 0xa125, 0x1944, 0x93ad, 0x2bcc, 0xf34e, 0x4b2f, 0x526b, 0xea0a, 0x3288, 0x8ae9, 0x377b, 0x8f1a, 0x5798, 0xeff9, 0xf6bd, 0x4edc, 0x965e, 0x2e3f, 0xa4d6, 0x1cb7, 0xc435, 0x7c54, 0x6510, 0xdd71, 0x05f3, 0xbd92, 0x6ef6, 0xd697, 0x0e15, 0xb674, 0xaf30, 0x1751, 0xcfd3, 0x77b2, 0xfd5b, 0x453a, 0x9db8, 0x25d9, 0x3c9d, 0x84fc, 0x5c7e, 0xe41f, 0x598d, 0xe1ec, 0x396e, 0x810f, 0x984b, 0x202a, 0xf8a8, 0x40c9, 0xca20, 0x7241, 0xaac3, 0x12a2, 0x0be6, 0xb387, 0x6b05, 0xd364, 0xddec, 0x658d, 0xbd0f, 0x056e, 0x1c2a, 0xa44b, 0x7cc9, 0xc4a8, 0x4e41, 0xf620, 0x2ea2, 0x96c3, 0x8f87, 0x37e6, 0xef64, 0x5705, 0xea97, 0x52f6, 0x8a74, 0x3215, 0x2b51, 0x9330, 0x4bb2, 0xf3d3, 0x793a, 0xc15b, 0x19d9, 0xa1b8, 0xb8fc, 0x009d, 0xd81f, 0x607e, 0xb31a, 0x0b7b, 0xd3f9, 0x6b98, 0x72dc, 0xcabd, 0x123f, 0xaa5e, 0x20b7, 0x98d6, 0x4054, 0xf835, 0xe171, 0x5910, 0x8192, 0x39f3, 0x8461, 0x3c00, 0xe482, 0x5ce3, 0x45a7, 0xfdc6, 0x2544, 0x9d25, 0x17cc, 0xafad, 0x772f, 0xcf4e, 0xd60a, 0x6e6b, 0xb6e9, 0x0e88, 0xabf9, 0x1398, 0xcb1a, 0x737b, 0x6a3f, 0xd25e, 0x0adc, 0xb2bd, 0x3854, 0x8035, 0x58b7, 0xe0d6, 0xf992, 0x41f3, 0x9971, 0x2110, 0x9c82, 0x24e3, 0xfc61, 0x4400, 0x5d44, 0xe525, 0x3da7, 0x85c6, 0x0f2f, 0xb74e, 0x6fcc, 0xd7ad, 0xcee9, 0x7688, 0xae0a, 0x166b, 0xc50f, 0x7d6e, 0xa5ec, 0x1d8d, 0x04c9, 0xbca8, 0x642a, 0xdc4b, 0x56a2, 0xeec3, 0x3641, 0x8e20, 0x9764, 0x2f05, 0xf787, 0x4fe6, 0xf274, 0x4a15, 0x9297, 0x2af6, 0x33b2, 0x8bd3, 0x5351, 0xeb30, 0x61d9, 0xd9b8, 0x013a, 0xb95b, 0xa01f, 0x187e, 0xc0fc, 0x789d, 0x7615, 0xce74, 0x16f6, 0xae97, 0xb7d3, 0x0fb2, 0xd730, 0x6f51, 0xe5b8, 0x5dd9, 0x855b, 0x3d3a, 0x247e, 0x9c1f, 0x449d, 0xfcfc, 0x416e, 0xf90f, 0x218d, 0x99ec, 0x80a8, 0x38c9, 0xe04b, 0x582a, 0xd2c3, 0x6aa2, 0xb220, 0x0a41, 0x1305, 0xab64, 0x73e6, 0xcb87, 0x18e3, 0xa082, 0x7800, 0xc061, 0xd925, 0x6144, 0xb9c6, 0x01a7, 0x8b4e, 0x332f, 0xebad, 0x53cc, 0x4a88, 0xf2e9, 0x2a6b, 0x920a, 0x2f98, 0x97f9, 0x4f7b, 0xf71a, 0xee5e, 0x563f, 0x8ebd, 0x36dc, 0xbc35, 0x0454, 0xdcd6, 0x64b7, 0x7df3, 0xc592, 0x1d10, 0xa571, ], [ 0x0000, 0x47d3, 0x8fa6, 0xc875, 0x0f6d, 0x48be, 0x80cb, 0xc718, 0x1eda, 0x5909, 0x917c, 0xd6af, 0x11b7, 0x5664, 0x9e11, 0xd9c2, 0x3db4, 0x7a67, 0xb212, 0xf5c1, 0x32d9, 0x750a, 0xbd7f, 0xfaac, 0x236e, 0x64bd, 0xacc8, 0xeb1b, 0x2c03, 0x6bd0, 0xa3a5, 0xe476, 0x7b68, 0x3cbb, 0xf4ce, 0xb31d, 0x7405, 0x33d6, 0xfba3, 0xbc70, 0x65b2, 0x2261, 0xea14, 0xadc7, 0x6adf, 0x2d0c, 0xe579, 0xa2aa, 0x46dc, 0x010f, 0xc97a, 0x8ea9, 0x49b1, 0x0e62, 0xc617, 0x81c4, 0x5806, 0x1fd5, 0xd7a0, 0x9073, 0x576b, 0x10b8, 0xd8cd, 0x9f1e, 0xf6d0, 0xb103, 0x7976, 0x3ea5, 0xf9bd, 0xbe6e, 0x761b, 0x31c8, 0xe80a, 0xafd9, 0x67ac, 0x207f, 0xe767, 0xa0b4, 0x68c1, 0x2f12, 0xcb64, 0x8cb7, 0x44c2, 0x0311, 0xc409, 0x83da, 0x4baf, 0x0c7c, 0xd5be, 0x926d, 0x5a18, 0x1dcb, 0xdad3, 0x9d00, 0x5575, 0x12a6, 0x8db8, 0xca6b, 0x021e, 0x45cd, 0x82d5, 0xc506, 0x0d73, 0x4aa0, 0x9362, 0xd4b1, 0x1cc4, 0x5b17, 0x9c0f, 0xdbdc, 0x13a9, 0x547a, 0xb00c, 0xf7df, 0x3faa, 0x7879, 0xbf61, 0xf8b2, 0x30c7, 0x7714, 0xaed6, 0xe905, 0x2170, 0x66a3, 0xa1bb, 0xe668, 0x2e1d, 0x69ce, 0xfd81, 0xba52, 0x7227, 0x35f4, 0xf2ec, 0xb53f, 0x7d4a, 0x3a99, 0xe35b, 0xa488, 0x6cfd, 0x2b2e, 0xec36, 0xabe5, 0x6390, 0x2443, 0xc035, 0x87e6, 0x4f93, 0x0840, 0xcf58, 0x888b, 0x40fe, 0x072d, 0xdeef, 0x993c, 0x5149, 0x169a, 0xd182, 0x9651, 0x5e24, 0x19f7, 0x86e9, 0xc13a, 0x094f, 0x4e9c, 0x8984, 0xce57, 0x0622, 0x41f1, 0x9833, 0xdfe0, 0x1795, 0x5046, 0x975e, 0xd08d, 0x18f8, 0x5f2b, 0xbb5d, 0xfc8e, 0x34fb, 0x7328, 0xb430, 0xf3e3, 0x3b96, 0x7c45, 0xa587, 0xe254, 0x2a21, 0x6df2, 0xaaea, 0xed39, 0x254c, 0x629f, 0x0b51, 0x4c82, 0x84f7, 0xc324, 0x043c, 0x43ef, 0x8b9a, 0xcc49, 0x158b, 0x5258, 0x9a2d, 0xddfe, 0x1ae6, 0x5d35, 0x9540, 0xd293, 0x36e5, 0x7136, 0xb943, 0xfe90, 0x3988, 0x7e5b, 0xb62e, 0xf1fd, 0x283f, 0x6fec, 0xa799, 0xe04a, 0x2752, 0x6081, 0xa8f4, 0xef27, 0x7039, 0x37ea, 0xff9f, 0xb84c, 0x7f54, 0x3887, 0xf0f2, 0xb721, 0x6ee3, 0x2930, 0xe145, 0xa696, 0x618e, 0x265d, 0xee28, 0xa9fb, 0x4d8d, 0x0a5e, 0xc22b, 0x85f8, 0x42e0, 0x0533, 0xcd46, 0x8a95, 0x5357, 0x1484, 0xdcf1, 0x9b22, 0x5c3a, 0x1be9, 0xd39c, 0x944f, ], [ 0x0000, 0xeb23, 0xc667, 0x2d44, 0x9cef, 0x77cc, 0x5a88, 0xb1ab, 0x29ff, 0xc2dc, 0xef98, 0x04bb, 0xb510, 0x5e33, 0x7377, 0x9854, 0x53fe, 0xb8dd, 0x9599, 0x7eba, 0xcf11, 0x2432, 0x0976, 0xe255, 0x7a01, 0x9122, 0xbc66, 0x5745, 0xe6ee, 0x0dcd, 0x2089, 0xcbaa, 0xa7fc, 0x4cdf, 0x619b, 0x8ab8, 0x3b13, 0xd030, 0xfd74, 0x1657, 0x8e03, 0x6520, 0x4864, 0xa347, 0x12ec, 0xf9cf, 0xd48b, 0x3fa8, 0xf402, 0x1f21, 0x3265, 0xd946, 0x68ed, 0x83ce, 0xae8a, 0x45a9, 0xddfd, 0x36de, 0x1b9a, 0xf0b9, 0x4112, 0xaa31, 0x8775, 0x6c56, 0x5fd9, 0xb4fa, 0x99be, 0x729d, 0xc336, 0x2815, 0x0551, 0xee72, 0x7626, 0x9d05, 0xb041, 0x5b62, 0xeac9, 0x01ea, 0x2cae, 0xc78d, 0x0c27, 0xe704, 0xca40, 0x2163, 0x90c8, 0x7beb, 0x56af, 0xbd8c, 0x25d8, 0xcefb, 0xe3bf, 0x089c, 0xb937, 0x5214, 0x7f50, 0x9473, 0xf825, 0x1306, 0x3e42, 0xd561, 0x64ca, 0x8fe9, 0xa2ad, 0x498e, 0xd1da, 0x3af9, 0x17bd, 0xfc9e, 0x4d35, 0xa616, 0x8b52, 0x6071, 0xabdb, 0x40f8, 0x6dbc, 0x869f, 0x3734, 0xdc17, 0xf153, 0x1a70, 0x8224, 0x6907, 0x4443, 0xaf60, 0x1ecb, 0xf5e8, 0xd8ac, 0x338f, 0xbfb2, 0x5491, 0x79d5, 0x92f6, 0x235d, 0xc87e, 0xe53a, 0x0e19, 0x964d, 0x7d6e, 0x502a, 0xbb09, 0x0aa2, 0xe181, 0xccc5, 0x27e6, 0xec4c, 0x076f, 0x2a2b, 0xc108, 0x70a3, 0x9b80, 0xb6c4, 0x5de7, 0xc5b3, 0x2e90, 0x03d4, 0xe8f7, 0x595c, 0xb27f, 0x9f3b, 0x7418, 0x184e, 0xf36d, 0xde29, 0x350a, 0x84a1, 0x6f82, 0x42c6, 0xa9e5, 0x31b1, 0xda92, 0xf7d6, 0x1cf5, 0xad5e, 0x467d, 0x6b39, 0x801a, 0x4bb0, 0xa093, 0x8dd7, 0x66f4, 0xd75f, 0x3c7c, 0x1138, 0xfa1b, 0x624f, 0x896c, 0xa428, 0x4f0b, 0xfea0, 0x1583, 0x38c7, 0xd3e4, 0xe06b, 0x0b48, 0x260c, 0xcd2f, 0x7c84, 0x97a7, 0xbae3, 0x51c0, 0xc994, 0x22b7, 0x0ff3, 0xe4d0, 0x557b, 0xbe58, 0x931c, 0x783f, 0xb395, 0x58b6, 0x75f2, 0x9ed1, 0x2f7a, 0xc459, 0xe91d, 0x023e, 0x9a6a, 0x7149, 0x5c0d, 0xb72e, 0x0685, 0xeda6, 0xc0e2, 0x2bc1, 0x4797, 0xacb4, 0x81f0, 0x6ad3, 0xdb78, 0x305b, 0x1d1f, 0xf63c, 0x6e68, 0x854b, 0xa80f, 0x432c, 0xf287, 0x19a4, 0x34e0, 0xdfc3, 0x1469, 0xff4a, 0xd20e, 0x392d, 0x8886, 0x63a5, 0x4ee1, 0xa5c2, 0x3d96, 0xd6b5, 0xfbf1, 0x10d2, 0xa179, 0x4a5a, 0x671e, 0x8c3d, ], [ 0x0000, 0x6f45, 0xde8a, 0xb1cf, 0xad35, 0xc270, 0x73bf, 0x1cfa, 0x4a4b, 0x250e, 0x94c1, 0xfb84, 0xe77e, 0x883b, 0x39f4, 0x56b1, 0x9496, 0xfbd3, 0x4a1c, 0x2559, 0x39a3, 0x56e6, 0xe729, 0x886c, 0xdedd, 0xb198, 0x0057, 0x6f12, 0x73e8, 0x1cad, 0xad62, 0xc227, 0x390d, 0x5648, 0xe787, 0x88c2, 0x9438, 0xfb7d, 0x4ab2, 0x25f7, 0x7346, 0x1c03, 0xadcc, 0xc289, 0xde73, 0xb136, 0x00f9, 0x6fbc, 0xad9b, 0xc2de, 0x7311, 0x1c54, 0x00ae, 0x6feb, 0xde24, 0xb161, 0xe7d0, 0x8895, 0x395a, 0x561f, 0x4ae5, 0x25a0, 0x946f, 0xfb2a, 0x721a, 0x1d5f, 0xac90, 0xc3d5, 0xdf2f, 0xb06a, 0x01a5, 0x6ee0, 0x3851, 0x5714, 0xe6db, 0x899e, 0x9564, 0xfa21, 0x4bee, 0x24ab, 0xe68c, 0x89c9, 0x3806, 0x5743, 0x4bb9, 0x24fc, 0x9533, 0xfa76, 0xacc7, 0xc382, 0x724d, 0x1d08, 0x01f2, 0x6eb7, 0xdf78, 0xb03d, 0x4b17, 0x2452, 0x959d, 0xfad8, 0xe622, 0x8967, 0x38a8, 0x57ed, 0x015c, 0x6e19, 0xdfd6, 0xb093, 0xac69, 0xc32c, 0x72e3, 0x1da6, 0xdf81, 0xb0c4, 0x010b, 0x6e4e, 0x72b4, 0x1df1, 0xac3e, 0xc37b, 0x95ca, 0xfa8f, 0x4b40, 0x2405, 0x38ff, 0x57ba, 0xe675, 0x8930, 0xe434, 0x8b71, 0x3abe, 0x55fb, 0x4901, 0x2644, 0x978b, 0xf8ce, 0xae7f, 0xc13a, 0x70f5, 0x1fb0, 0x034a, 0x6c0f, 0xddc0, 0xb285, 0x70a2, 0x1fe7, 0xae28, 0xc16d, 0xdd97, 0xb2d2, 0x031d, 0x6c58, 0x3ae9, 0x55ac, 0xe463, 0x8b26, 0x97dc, 0xf899, 0x4956, 0x2613, 0xdd39, 0xb27c, 0x03b3, 0x6cf6, 0x700c, 0x1f49, 0xae86, 0xc1c3, 0x9772, 0xf837, 0x49f8, 0x26bd, 0x3a47, 0x5502, 0xe4cd, 0x8b88, 0x49af, 0x26ea, 0x9725, 0xf860, 0xe49a, 0x8bdf, 0x3a10, 0x5555, 0x03e4, 0x6ca1, 0xdd6e, 0xb22b, 0xaed1, 0xc194, 0x705b, 0x1f1e, 0x962e, 0xf96b, 0x48a4, 0x27e1, 0x3b1b, 0x545e, 0xe591, 0x8ad4, 0xdc65, 0xb320, 0x02ef, 0x6daa, 0x7150, 0x1e15, 0xafda, 0xc09f, 0x02b8, 0x6dfd, 0xdc32, 0xb377, 0xaf8d, 0xc0c8, 0x7107, 0x1e42, 0x48f3, 0x27b6, 0x9679, 0xf93c, 0xe5c6, 0x8a83, 0x3b4c, 0x5409, 0xaf23, 0xc066, 0x71a9, 0x1eec, 0x0216, 0x6d53, 0xdc9c, 0xb3d9, 0xe568, 0x8a2d, 0x3be2, 0x54a7, 0x485d, 0x2718, 0x96d7, 0xf992, 0x3bb5, 0x54f0, 0xe53f, 0x8a7a, 0x9680, 0xf9c5, 0x480a, 0x274f, 0x71fe, 0x1ebb, 0xaf74, 0xc031, 0xdccb, 0xb38e, 0x0241, 0x6d04, ], [ 0x0000, 0xd849, 0xa0b3, 0x78fa, 0x5147, 0x890e, 0xf1f4, 0x29bd, 0xa28e, 0x7ac7, 0x023d, 0xda74, 0xf3c9, 0x2b80, 0x537a, 0x8b33, 0x553d, 0x8d74, 0xf58e, 0x2dc7, 0x047a, 0xdc33, 0xa4c9, 0x7c80, 0xf7b3, 0x2ffa, 0x5700, 0x8f49, 0xa6f4, 0x7ebd, 0x0647, 0xde0e, 0xaa7a, 0x7233, 0x0ac9, 0xd280, 0xfb3d, 0x2374, 0x5b8e, 0x83c7, 0x08f4, 0xd0bd, 0xa847, 0x700e, 0x59b3, 0x81fa, 0xf900, 0x2149, 0xff47, 0x270e, 0x5ff4, 0x87bd, 0xae00, 0x7649, 0x0eb3, 0xd6fa, 0x5dc9, 0x8580, 0xfd7a, 0x2533, 0x0c8e, 0xd4c7, 0xac3d, 0x7474, 0x44d5, 0x9c9c, 0xe466, 0x3c2f, 0x1592, 0xcddb, 0xb521, 0x6d68, 0xe65b, 0x3e12, 0x46e8, 0x9ea1, 0xb71c, 0x6f55, 0x17af, 0xcfe6, 0x11e8, 0xc9a1, 0xb15b, 0x6912, 0x40af, 0x98e6, 0xe01c, 0x3855, 0xb366, 0x6b2f, 0x13d5, 0xcb9c, 0xe221, 0x3a68, 0x4292, 0x9adb, 0xeeaf, 0x36e6, 0x4e1c, 0x9655, 0xbfe8, 0x67a1, 0x1f5b, 0xc712, 0x4c21, 0x9468, 0xec92, 0x34db, 0x1d66, 0xc52f, 0xbdd5, 0x659c, 0xbb92, 0x63db, 0x1b21, 0xc368, 0xead5, 0x329c, 0x4a66, 0x922f, 0x191c, 0xc155, 0xb9af, 0x61e6, 0x485b, 0x9012, 0xe8e8, 0x30a1, 0x89aa, 0x51e3, 0x2919, 0xf150, 0xd8ed, 0x00a4, 0x785e, 0xa017, 0x2b24, 0xf36d, 0x8b97, 0x53de, 0x7a63, 0xa22a, 0xdad0, 0x0299, 0xdc97, 0x04de, 0x7c24, 0xa46d, 0x8dd0, 0x5599, 0x2d63, 0xf52a, 0x7e19, 0xa650, 0xdeaa, 0x06e3, 0x2f5e, 0xf717, 0x8fed, 0x57a4, 0x23d0, 0xfb99, 0x8363, 0x5b2a, 0x7297, 0xaade, 0xd224, 0x0a6d, 0x815e, 0x5917, 0x21ed, 0xf9a4, 0xd019, 0x0850, 0x70aa, 0xa8e3, 0x76ed, 0xaea4, 0xd65e, 0x0e17, 0x27aa, 0xffe3, 0x8719, 0x5f50, 0xd463, 0x0c2a, 0x74d0, 0xac99, 0x8524, 0x5d6d, 0x2597, 0xfdde, 0xcd7f, 0x1536, 0x6dcc, 0xb585, 0x9c38, 0x4471, 0x3c8b, 0xe4c2, 0x6ff1, 0xb7b8, 0xcf42, 0x170b, 0x3eb6, 0xe6ff, 0x9e05, 0x464c, 0x9842, 0x400b, 0x38f1, 0xe0b8, 0xc905, 0x114c, 0x69b6, 0xb1ff, 0x3acc, 0xe285, 0x9a7f, 0x4236, 0x6b8b, 0xb3c2, 0xcb38, 0x1371, 0x6705, 0xbf4c, 0xc7b6, 0x1fff, 0x3642, 0xee0b, 0x96f1, 0x4eb8, 0xc58b, 0x1dc2, 0x6538, 0xbd71, 0x94cc, 0x4c85, 0x347f, 0xec36, 0x3238, 0xea71, 0x928b, 0x4ac2, 0x637f, 0xbb36, 0xc3cc, 0x1b85, 0x90b6, 0x48ff, 0x3005, 0xe84c, 0xc1f1, 0x19b8, 0x6142, 0xb90b, ], [ 0x0000, 0x0375, 0x06ea, 0x059f, 0x0dd4, 0x0ea1, 0x0b3e, 0x084b, 0x1ba8, 0x18dd, 0x1d42, 0x1e37, 0x167c, 0x1509, 0x1096, 0x13e3, 0x3750, 0x3425, 0x31ba, 0x32cf, 0x3a84, 0x39f1, 0x3c6e, 0x3f1b, 0x2cf8, 0x2f8d, 0x2a12, 0x2967, 0x212c, 0x2259, 0x27c6, 0x24b3, 0x6ea0, 0x6dd5, 0x684a, 0x6b3f, 0x6374, 0x6001, 0x659e, 0x66eb, 0x7508, 0x767d, 0x73e2, 0x7097, 0x78dc, 0x7ba9, 0x7e36, 0x7d43, 0x59f0, 0x5a85, 0x5f1a, 0x5c6f, 0x5424, 0x5751, 0x52ce, 0x51bb, 0x4258, 0x412d, 0x44b2, 0x47c7, 0x4f8c, 0x4cf9, 0x4966, 0x4a13, 0xdd40, 0xde35, 0xdbaa, 0xd8df, 0xd094, 0xd3e1, 0xd67e, 0xd50b, 0xc6e8, 0xc59d, 0xc002, 0xc377, 0xcb3c, 0xc849, 0xcdd6, 0xcea3, 0xea10, 0xe965, 0xecfa, 0xef8f, 0xe7c4, 0xe4b1, 0xe12e, 0xe25b, 0xf1b8, 0xf2cd, 0xf752, 0xf427, 0xfc6c, 0xff19, 0xfa86, 0xf9f3, 0xb3e0, 0xb095, 0xb50a, 0xb67f, 0xbe34, 0xbd41, 0xb8de, 0xbbab, 0xa848, 0xab3d, 0xaea2, 0xadd7, 0xa59c, 0xa6e9, 0xa376, 0xa003, 0x84b0, 0x87c5, 0x825a, 0x812f, 0x8964, 0x8a11, 0x8f8e, 0x8cfb, 0x9f18, 0x9c6d, 0x99f2, 0x9a87, 0x92cc, 0x91b9, 0x9426, 0x9753, 0xaaa1, 0xa9d4, 0xac4b, 0xaf3e, 0xa775, 0xa400, 0xa19f, 0xa2ea, 0xb109, 0xb27c, 0xb7e3, 0xb496, 0xbcdd, 0xbfa8, 0xba37, 0xb942, 0x9df1, 0x9e84, 0x9b1b, 0x986e, 0x9025, 0x9350, 0x96cf, 0x95ba, 0x8659, 0x852c, 0x80b3, 0x83c6, 0x8b8d, 0x88f8, 0x8d67, 0x8e12, 0xc401, 0xc774, 0xc2eb, 0xc19e, 0xc9d5, 0xcaa0, 0xcf3f, 0xcc4a, 0xdfa9, 0xdcdc, 0xd943, 0xda36, 0xd27d, 0xd108, 0xd497, 0xd7e2, 0xf351, 0xf024, 0xf5bb, 0xf6ce, 0xfe85, 0xfdf0, 0xf86f, 0xfb1a, 0xe8f9, 0xeb8c, 0xee13, 0xed66, 0xe52d, 0xe658, 0xe3c7, 0xe0b2, 0x77e1, 0x7494, 0x710b, 0x727e, 0x7a35, 0x7940, 0x7cdf, 0x7faa, 0x6c49, 0x6f3c, 0x6aa3, 0x69d6, 0x619d, 0x62e8, 0x6777, 0x6402, 0x40b1, 0x43c4, 0x465b, 0x452e, 0x4d65, 0x4e10, 0x4b8f, 0x48fa, 0x5b19, 0x586c, 0x5df3, 0x5e86, 0x56cd, 0x55b8, 0x5027, 0x5352, 0x1941, 0x1a34, 0x1fab, 0x1cde, 0x1495, 0x17e0, 0x127f, 0x110a, 0x02e9, 0x019c, 0x0403, 0x0776, 0x0f3d, 0x0c48, 0x09d7, 0x0aa2, 0x2e11, 0x2d64, 0x28fb, 0x2b8e, 0x23c5, 0x20b0, 0x252f, 0x265a, 0x35b9, 0x36cc, 0x3353, 0x3026, 0x386d, 0x3b18, 0x3e87, 0x3df2, ], [ 0x0000, 0x4563, 0x8ac6, 0xcfa5, 0x05ad, 0x40ce, 0x8f6b, 0xca08, 0x0b5a, 0x4e39, 0x819c, 0xc4ff, 0x0ef7, 0x4b94, 0x8431, 0xc152, 0x16b4, 0x53d7, 0x9c72, 0xd911, 0x1319, 0x567a, 0x99df, 0xdcbc, 0x1dee, 0x588d, 0x9728, 0xd24b, 0x1843, 0x5d20, 0x9285, 0xd7e6, 0x2d68, 0x680b, 0xa7ae, 0xe2cd, 0x28c5, 0x6da6, 0xa203, 0xe760, 0x2632, 0x6351, 0xacf4, 0xe997, 0x239f, 0x66fc, 0xa959, 0xec3a, 0x3bdc, 0x7ebf, 0xb11a, 0xf479, 0x3e71, 0x7b12, 0xb4b7, 0xf1d4, 0x3086, 0x75e5, 0xba40, 0xff23, 0x352b, 0x7048, 0xbfed, 0xfa8e, 0x5ad0, 0x1fb3, 0xd016, 0x9575, 0x5f7d, 0x1a1e, 0xd5bb, 0x90d8, 0x518a, 0x14e9, 0xdb4c, 0x9e2f, 0x5427, 0x1144, 0xdee1, 0x9b82, 0x4c64, 0x0907, 0xc6a2, 0x83c1, 0x49c9, 0x0caa, 0xc30f, 0x866c, 0x473e, 0x025d, 0xcdf8, 0x889b, 0x4293, 0x07f0, 0xc855, 0x8d36, 0x77b8, 0x32db, 0xfd7e, 0xb81d, 0x7215, 0x3776, 0xf8d3, 0xbdb0, 0x7ce2, 0x3981, 0xf624, 0xb347, 0x794f, 0x3c2c, 0xf389, 0xb6ea, 0x610c, 0x246f, 0xebca, 0xaea9, 0x64a1, 0x21c2, 0xee67, 0xab04, 0x6a56, 0x2f35, 0xe090, 0xa5f3, 0x6ffb, 0x2a98, 0xe53d, 0xa05e, 0xb5a0, 0xf0c3, 0x3f66, 0x7a05, 0xb00d, 0xf56e, 0x3acb, 0x7fa8, 0xbefa, 0xfb99, 0x343c, 0x715f, 0xbb57, 0xfe34, 0x3191, 0x74f2, 0xa314, 0xe677, 0x29d2, 0x6cb1, 0xa6b9, 0xe3da, 0x2c7f, 0x691c, 0xa84e, 0xed2d, 0x2288, 0x67eb, 0xade3, 0xe880, 0x2725, 0x6246, 0x98c8, 0xddab, 0x120e, 0x576d, 0x9d65, 0xd806, 0x17a3, 0x52c0, 0x9392, 0xd6f1, 0x1954, 0x5c37, 0x963f, 0xd35c, 0x1cf9, 0x599a, 0x8e7c, 0xcb1f, 0x04ba, 0x41d9, 0x8bd1, 0xceb2, 0x0117, 0x4474, 0x8526, 0xc045, 0x0fe0, 0x4a83, 0x808b, 0xc5e8, 0x0a4d, 0x4f2e, 0xef70, 0xaa13, 0x65b6, 0x20d5, 0xeadd, 0xafbe, 0x601b, 0x2578, 0xe42a, 0xa149, 0x6eec, 0x2b8f, 0xe187, 0xa4e4, 0x6b41, 0x2e22, 0xf9c4, 0xbca7, 0x7302, 0x3661, 0xfc69, 0xb90a, 0x76af, 0x33cc, 0xf29e, 0xb7fd, 0x7858, 0x3d3b, 0xf733, 0xb250, 0x7df5, 0x3896, 0xc218, 0x877b, 0x48de, 0x0dbd, 0xc7b5, 0x82d6, 0x4d73, 0x0810, 0xc942, 0x8c21, 0x4384, 0x06e7, 0xccef, 0x898c, 0x4629, 0x034a, 0xd4ac, 0x91cf, 0x5e6a, 0x1b09, 0xd101, 0x9462, 0x5bc7, 0x1ea4, 0xdff6, 0x9a95, 0x5530, 0x1053, 0xda5b, 0x9f38, 0x509d, 0x15fe, ], [ 0x0000, 0x7b61, 0xf6c2, 0x8da3, 0xfda5, 0x86c4, 0x0b67, 0x7006, 0xeb6b, 0x900a, 0x1da9, 0x66c8, 0x16ce, 0x6daf, 0xe00c, 0x9b6d, 0xc6f7, 0xbd96, 0x3035, 0x4b54, 0x3b52, 0x4033, 0xcd90, 0xb6f1, 0x2d9c, 0x56fd, 0xdb5e, 0xa03f, 0xd039, 0xab58, 0x26fb, 0x5d9a, 0x9dcf, 0xe6ae, 0x6b0d, 0x106c, 0x606a, 0x1b0b, 0x96a8, 0xedc9, 0x76a4, 0x0dc5, 0x8066, 0xfb07, 0x8b01, 0xf060, 0x7dc3, 0x06a2, 0x5b38, 0x2059, 0xadfa, 0xd69b, 0xa69d, 0xddfc, 0x505f, 0x2b3e, 0xb053, 0xcb32, 0x4691, 0x3df0, 0x4df6, 0x3697, 0xbb34, 0xc055, 0x2bbf, 0x50de, 0xdd7d, 0xa61c, 0xd61a, 0xad7b, 0x20d8, 0x5bb9, 0xc0d4, 0xbbb5, 0x3616, 0x4d77, 0x3d71, 0x4610, 0xcbb3, 0xb0d2, 0xed48, 0x9629, 0x1b8a, 0x60eb, 0x10ed, 0x6b8c, 0xe62f, 0x9d4e, 0x0623, 0x7d42, 0xf0e1, 0x8b80, 0xfb86, 0x80e7, 0x0d44, 0x7625, 0xb670, 0xcd11, 0x40b2, 0x3bd3, 0x4bd5, 0x30b4, 0xbd17, 0xc676, 0x5d1b, 0x267a, 0xabd9, 0xd0b8, 0xa0be, 0xdbdf, 0x567c, 0x2d1d, 0x7087, 0x0be6, 0x8645, 0xfd24, 0x8d22, 0xf643, 0x7be0, 0x0081, 0x9bec, 0xe08d, 0x6d2e, 0x164f, 0x6649, 0x1d28, 0x908b, 0xebea, 0x577e, 0x2c1f, 0xa1bc, 0xdadd, 0xaadb, 0xd1ba, 0x5c19, 0x2778, 0xbc15, 0xc774, 0x4ad7, 0x31b6, 0x41b0, 0x3ad1, 0xb772, 0xcc13, 0x9189, 0xeae8, 0x674b, 0x1c2a, 0x6c2c, 0x174d, 0x9aee, 0xe18f, 0x7ae2, 0x0183, 0x8c20, 0xf741, 0x8747, 0xfc26, 0x7185, 0x0ae4, 0xcab1, 0xb1d0, 0x3c73, 0x4712, 0x3714, 0x4c75, 0xc1d6, 0xbab7, 0x21da, 0x5abb, 0xd718, 0xac79, 0xdc7f, 0xa71e, 0x2abd, 0x51dc, 0x0c46, 0x7727, 0xfa84, 0x81e5, 0xf1e3, 0x8a82, 0x0721, 0x7c40, 0xe72d, 0x9c4c, 0x11ef, 0x6a8e, 0x1a88, 0x61e9, 0xec4a, 0x972b, 0x7cc1, 0x07a0, 0x8a03, 0xf162, 0x8164, 0xfa05, 0x77a6, 0x0cc7, 0x97aa, 0xeccb, 0x6168, 0x1a09, 0x6a0f, 0x116e, 0x9ccd, 0xe7ac, 0xba36, 0xc157, 0x4cf4, 0x3795, 0x4793, 0x3cf2, 0xb151, 0xca30, 0x515d, 0x2a3c, 0xa79f, 0xdcfe, 0xacf8, 0xd799, 0x5a3a, 0x215b, 0xe10e, 0x9a6f, 0x17cc, 0x6cad, 0x1cab, 0x67ca, 0xea69, 0x9108, 0x0a65, 0x7104, 0xfca7, 0x87c6, 0xf7c0, 0x8ca1, 0x0102, 0x7a63, 0x27f9, 0x5c98, 0xd13b, 0xaa5a, 0xda5c, 0xa13d, 0x2c9e, 0x57ff, 0xcc92, 0xb7f3, 0x3a50, 0x4131, 0x3137, 0x4a56, 0xc7f5, 0xbc94, ], [ 0x0000, 0xaefc, 0x4dd9, 0xe325, 0x9bb2, 0x354e, 0xd66b, 0x7897, 0x2745, 0x89b9, 0x6a9c, 0xc460, 0xbcf7, 0x120b, 0xf12e, 0x5fd2, 0x4e8a, 0xe076, 0x0353, 0xadaf, 0xd538, 0x7bc4, 0x98e1, 0x361d, 0x69cf, 0xc733, 0x2416, 0x8aea, 0xf27d, 0x5c81, 0xbfa4, 0x1158, 0x9d14, 0x33e8, 0xd0cd, 0x7e31, 0x06a6, 0xa85a, 0x4b7f, 0xe583, 0xba51, 0x14ad, 0xf788, 0x5974, 0x21e3, 0x8f1f, 0x6c3a, 0xc2c6, 0xd39e, 0x7d62, 0x9e47, 0x30bb, 0x482c, 0xe6d0, 0x05f5, 0xab09, 0xf4db, 0x5a27, 0xb902, 0x17fe, 0x6f69, 0xc195, 0x22b0, 0x8c4c, 0x2a09, 0x84f5, 0x67d0, 0xc92c, 0xb1bb, 0x1f47, 0xfc62, 0x529e, 0x0d4c, 0xa3b0, 0x4095, 0xee69, 0x96fe, 0x3802, 0xdb27, 0x75db, 0x6483, 0xca7f, 0x295a, 0x87a6, 0xff31, 0x51cd, 0xb2e8, 0x1c14, 0x43c6, 0xed3a, 0x0e1f, 0xa0e3, 0xd874, 0x7688, 0x95ad, 0x3b51, 0xb71d, 0x19e1, 0xfac4, 0x5438, 0x2caf, 0x8253, 0x6176, 0xcf8a, 0x9058, 0x3ea4, 0xdd81, 0x737d, 0x0bea, 0xa516, 0x4633, 0xe8cf, 0xf997, 0x576b, 0xb44e, 0x1ab2, 0x6225, 0xccd9, 0x2ffc, 0x8100, 0xded2, 0x702e, 0x930b, 0x3df7, 0x4560, 0xeb9c, 0x08b9, 0xa645, 0x5412, 0xfaee, 0x19cb, 0xb737, 0xcfa0, 0x615c, 0x8279, 0x2c85, 0x7357, 0xddab, 0x3e8e, 0x9072, 0xe8e5, 0x4619, 0xa53c, 0x0bc0, 0x1a98, 0xb464, 0x5741, 0xf9bd, 0x812a, 0x2fd6, 0xccf3, 0x620f, 0x3ddd, 0x9321, 0x7004, 0xdef8, 0xa66f, 0x0893, 0xebb6, 0x454a, 0xc906, 0x67fa, 0x84df, 0x2a23, 0x52b4, 0xfc48, 0x1f6d, 0xb191, 0xee43, 0x40bf, 0xa39a, 0x0d66, 0x75f1, 0xdb0d, 0x3828, 0x96d4, 0x878c, 0x2970, 0xca55, 0x64a9, 0x1c3e, 0xb2c2, 0x51e7, 0xff1b, 0xa0c9, 0x0e35, 0xed10, 0x43ec, 0x3b7b, 0x9587, 0x76a2, 0xd85e, 0x7e1b, 0xd0e7, 0x33c2, 0x9d3e, 0xe5a9, 0x4b55, 0xa870, 0x068c, 0x595e, 0xf7a2, 0x1487, 0xba7b, 0xc2ec, 0x6c10, 0x8f35, 0x21c9, 0x3091, 0x9e6d, 0x7d48, 0xd3b4, 0xab23, 0x05df, 0xe6fa, 0x4806, 0x17d4, 0xb928, 0x5a0d, 0xf4f1, 0x8c66, 0x229a, 0xc1bf, 0x6f43, 0xe30f, 0x4df3, 0xaed6, 0x002a, 0x78bd, 0xd641, 0x3564, 0x9b98, 0xc44a, 0x6ab6, 0x8993, 0x276f, 0x5ff8, 0xf104, 0x1221, 0xbcdd, 0xad85, 0x0379, 0xe05c, 0x4ea0, 0x3637, 0x98cb, 0x7bee, 0xd512, 0x8ac0, 0x243c, 0xc719, 0x69e5, 0x1172, 0xbf8e, 0x5cab, 0xf257, ], [ 0x0000, 0xa824, 0x4069, 0xe84d, 0x80d2, 0x28f6, 0xc0bb, 0x689f, 0x1185, 0xb9a1, 0x51ec, 0xf9c8, 0x9157, 0x3973, 0xd13e, 0x791a, 0x230a, 0x8b2e, 0x6363, 0xcb47, 0xa3d8, 0x0bfc, 0xe3b1, 0x4b95, 0x328f, 0x9aab, 0x72e6, 0xdac2, 0xb25d, 0x1a79, 0xf234, 0x5a10, 0x4614, 0xee30, 0x067d, 0xae59, 0xc6c6, 0x6ee2, 0x86af, 0x2e8b, 0x5791, 0xffb5, 0x17f8, 0xbfdc, 0xd743, 0x7f67, 0x972a, 0x3f0e, 0x651e, 0xcd3a, 0x2577, 0x8d53, 0xe5cc, 0x4de8, 0xa5a5, 0x0d81, 0x749b, 0xdcbf, 0x34f2, 0x9cd6, 0xf449, 0x5c6d, 0xb420, 0x1c04, 0x8c28, 0x240c, 0xcc41, 0x6465, 0x0cfa, 0xa4de, 0x4c93, 0xe4b7, 0x9dad, 0x3589, 0xddc4, 0x75e0, 0x1d7f, 0xb55b, 0x5d16, 0xf532, 0xaf22, 0x0706, 0xef4b, 0x476f, 0x2ff0, 0x87d4, 0x6f99, 0xc7bd, 0xbea7, 0x1683, 0xfece, 0x56ea, 0x3e75, 0x9651, 0x7e1c, 0xd638, 0xca3c, 0x6218, 0x8a55, 0x2271, 0x4aee, 0xe2ca, 0x0a87, 0xa2a3, 0xdbb9, 0x739d, 0x9bd0, 0x33f4, 0x5b6b, 0xf34f, 0x1b02, 0xb326, 0xe936, 0x4112, 0xa95f, 0x017b, 0x69e4, 0xc1c0, 0x298d, 0x81a9, 0xf8b3, 0x5097, 0xb8da, 0x10fe, 0x7861, 0xd045, 0x3808, 0x902c, 0x0871, 0xa055, 0x4818, 0xe03c, 0x88a3, 0x2087, 0xc8ca, 0x60ee, 0x19f4, 0xb1d0, 0x599d, 0xf1b9, 0x9926, 0x3102, 0xd94f, 0x716b, 0x2b7b, 0x835f, 0x6b12, 0xc336, 0xaba9, 0x038d, 0xebc0, 0x43e4, 0x3afe, 0x92da, 0x7a97, 0xd2b3, 0xba2c, 0x1208, 0xfa45, 0x5261, 0x4e65, 0xe641, 0x0e0c, 0xa628, 0xceb7, 0x6693, 0x8ede, 0x26fa, 0x5fe0, 0xf7c4, 0x1f89, 0xb7ad, 0xdf32, 0x7716, 0x9f5b, 0x377f, 0x6d6f, 0xc54b, 0x2d06, 0x8522, 0xedbd, 0x4599, 0xadd4, 0x05f0, 0x7cea, 0xd4ce, 0x3c83, 0x94a7, 0xfc38, 0x541c, 0xbc51, 0x1475, 0x8459, 0x2c7d, 0xc430, 0x6c14, 0x048b, 0xacaf, 0x44e2, 0xecc6, 0x95dc, 0x3df8, 0xd5b5, 0x7d91, 0x150e, 0xbd2a, 0x5567, 0xfd43, 0xa753, 0x0f77, 0xe73a, 0x4f1e, 0x2781, 0x8fa5, 0x67e8, 0xcfcc, 0xb6d6, 0x1ef2, 0xf6bf, 0x5e9b, 0x3604, 0x9e20, 0x766d, 0xde49, 0xc24d, 0x6a69, 0x8224, 0x2a00, 0x429f, 0xeabb, 0x02f6, 0xaad2, 0xd3c8, 0x7bec, 0x93a1, 0x3b85, 0x531a, 0xfb3e, 0x1373, 0xbb57, 0xe147, 0x4963, 0xa12e, 0x090a, 0x6195, 0xc9b1, 0x21fc, 0x89d8, 0xf0c2, 0x58e6, 0xb0ab, 0x188f, 0x7010, 0xd834, 0x3079, 0x985d, ], ]; } pub mod crc32 { //! CRC-32 lookup tables pub static CRC32_AIXM_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0x814141ab, 0x83c3c2fd, 0x02828356, 0x86c6c451, 0x078785fa, 0x050506ac, 0x84444707, 0x8cccc909, 0x0d8d88a2, 0x0f0f0bf4, 0x8e4e4a5f, 0x0a0a0d58, 0x8b4b4cf3, 0x89c9cfa5, 0x08888e0e, 0x98d8d3b9, 0x19999212, 0x1b1b1144, 0x9a5a50ef, 0x1e1e17e8, 0x9f5f5643, 0x9dddd515, 0x1c9c94be, 0x14141ab0, 0x95555b1b, 0x97d7d84d, 0x169699e6, 0x92d2dee1, 0x13939f4a, 0x11111c1c, 0x90505db7, 0xb0f0e6d9, 0x31b1a772, 0x33332424, 0xb272658f, 0x36362288, 0xb7776323, 0xb5f5e075, 0x34b4a1de, 0x3c3c2fd0, 0xbd7d6e7b, 0xbfffed2d, 0x3ebeac86, 0xbafaeb81, 0x3bbbaa2a, 0x3939297c, 0xb87868d7, 0x28283560, 0xa96974cb, 0xabebf79d, 0x2aaab636, 0xaeeef131, 0x2fafb09a, 0x2d2d33cc, 0xac6c7267, 0xa4e4fc69, 0x25a5bdc2, 0x27273e94, 0xa6667f3f, 0x22223838, 0xa3637993, 0xa1e1fac5, 0x20a0bb6e, 0xe0a08c19, 0x61e1cdb2, 0x63634ee4, 0xe2220f4f, 0x66664848, 0xe72709e3, 0xe5a58ab5, 0x64e4cb1e, 0x6c6c4510, 0xed2d04bb, 0xefaf87ed, 0x6eeec646, 0xeaaa8141, 0x6bebc0ea, 0x696943bc, 0xe8280217, 0x78785fa0, 0xf9391e0b, 0xfbbb9d5d, 0x7afadcf6, 0xfebe9bf1, 0x7fffda5a, 0x7d7d590c, 0xfc3c18a7, 0xf4b496a9, 0x75f5d702, 0x77775454, 0xf63615ff, 0x727252f8, 0xf3331353, 0xf1b19005, 0x70f0d1ae, 0x50506ac0, 0xd1112b6b, 0xd393a83d, 0x52d2e996, 0xd696ae91, 0x57d7ef3a, 0x55556c6c, 0xd4142dc7, 0xdc9ca3c9, 0x5ddde262, 0x5f5f6134, 0xde1e209f, 0x5a5a6798, 0xdb1b2633, 0xd999a565, 0x58d8e4ce, 0xc888b979, 0x49c9f8d2, 0x4b4b7b84, 0xca0a3a2f, 0x4e4e7d28, 0xcf0f3c83, 0xcd8dbfd5, 0x4cccfe7e, 0x44447070, 0xc50531db, 0xc787b28d, 0x46c6f326, 0xc282b421, 0x43c3f58a, 0x414176dc, 0xc0003777, 0x40005999, 0xc1411832, 0xc3c39b64, 0x4282dacf, 0xc6c69dc8, 0x4787dc63, 0x45055f35, 0xc4441e9e, 0xcccc9090, 0x4d8dd13b, 0x4f0f526d, 0xce4e13c6, 0x4a0a54c1, 0xcb4b156a, 0xc9c9963c, 0x4888d797, 0xd8d88a20, 0x5999cb8b, 0x5b1b48dd, 0xda5a0976, 0x5e1e4e71, 0xdf5f0fda, 0xdddd8c8c, 0x5c9ccd27, 0x54144329, 0xd5550282, 0xd7d781d4, 0x5696c07f, 0xd2d28778, 0x5393c6d3, 0x51114585, 0xd050042e, 0xf0f0bf40, 0x71b1feeb, 0x73337dbd, 0xf2723c16, 0x76367b11, 0xf7773aba, 0xf5f5b9ec, 0x74b4f847, 0x7c3c7649, 0xfd7d37e2, 0xffffb4b4, 0x7ebef51f, 0xfafab218, 0x7bbbf3b3, 0x793970e5, 0xf878314e, 0x68286cf9, 0xe9692d52, 0xebebae04, 0x6aaaefaf, 0xeeeea8a8, 0x6fafe903, 0x6d2d6a55, 0xec6c2bfe, 0xe4e4a5f0, 0x65a5e45b, 0x6727670d, 0xe66626a6, 0x622261a1, 0xe363200a, 0xe1e1a35c, 0x60a0e2f7, 0xa0a0d580, 0x21e1942b, 0x2363177d, 0xa22256d6, 0x266611d1, 0xa727507a, 0xa5a5d32c, 0x24e49287, 0x2c6c1c89, 0xad2d5d22, 0xafafde74, 0x2eee9fdf, 0xaaaad8d8, 0x2beb9973, 0x29691a25, 0xa8285b8e, 0x38780639, 0xb9394792, 0xbbbbc4c4, 0x3afa856f, 0xbebec268, 0x3fff83c3, 0x3d7d0095, 0xbc3c413e, 0xb4b4cf30, 0x35f58e9b, 0x37770dcd, 0xb6364c66, 0x32720b61, 0xb3334aca, 0xb1b1c99c, 0x30f08837, 0x10503359, 0x911172f2, 0x9393f1a4, 0x12d2b00f, 0x9696f708, 0x17d7b6a3, 0x155535f5, 0x9414745e, 0x9c9cfa50, 0x1dddbbfb, 0x1f5f38ad, 0x9e1e7906, 0x1a5a3e01, 0x9b1b7faa, 0x9999fcfc, 0x18d8bd57, 0x8888e0e0, 0x09c9a14b, 0x0b4b221d, 0x8a0a63b6, 0x0e4e24b1, 0x8f0f651a, 0x8d8de64c, 0x0ccca7e7, 0x044429e9, 0x85056842, 0x8787eb14, 0x06c6aabf, 0x8282edb8, 0x03c3ac13, 0x01412f45, 0x80006eee, ], [ 0x00000000, 0x8000b332, 0x814027cf, 0x014094fd, 0x83c10e35, 0x03c1bd07, 0x028129fa, 0x82819ac8, 0x86c35dc1, 0x06c3eef3, 0x07837a0e, 0x8783c93c, 0x050253f4, 0x8502e0c6, 0x8442743b, 0x0442c709, 0x8cc7fa29, 0x0cc7491b, 0x0d87dde6, 0x8d876ed4, 0x0f06f41c, 0x8f06472e, 0x8e46d3d3, 0x0e4660e1, 0x0a04a7e8, 0x8a0414da, 0x8b448027, 0x0b443315, 0x89c5a9dd, 0x09c51aef, 0x08858e12, 0x88853d20, 0x98ceb5f9, 0x18ce06cb, 0x198e9236, 0x998e2104, 0x1b0fbbcc, 0x9b0f08fe, 0x9a4f9c03, 0x1a4f2f31, 0x1e0de838, 0x9e0d5b0a, 0x9f4dcff7, 0x1f4d7cc5, 0x9dcce60d, 0x1dcc553f, 0x1c8cc1c2, 0x9c8c72f0, 0x14094fd0, 0x9409fce2, 0x9549681f, 0x1549db2d, 0x97c841e5, 0x17c8f2d7, 0x1688662a, 0x9688d518, 0x92ca1211, 0x12caa123, 0x138a35de, 0x938a86ec, 0x110b1c24, 0x910baf16, 0x904b3beb, 0x104b88d9, 0xb0dc2a59, 0x30dc996b, 0x319c0d96, 0xb19cbea4, 0x331d246c, 0xb31d975e, 0xb25d03a3, 0x325db091, 0x361f7798, 0xb61fc4aa, 0xb75f5057, 0x375fe365, 0xb5de79ad, 0x35deca9f, 0x349e5e62, 0xb49eed50, 0x3c1bd070, 0xbc1b6342, 0xbd5bf7bf, 0x3d5b448d, 0xbfdade45, 0x3fda6d77, 0x3e9af98a, 0xbe9a4ab8, 0xbad88db1, 0x3ad83e83, 0x3b98aa7e, 0xbb98194c, 0x39198384, 0xb91930b6, 0xb859a44b, 0x38591779, 0x28129fa0, 0xa8122c92, 0xa952b86f, 0x29520b5d, 0xabd39195, 0x2bd322a7, 0x2a93b65a, 0xaa930568, 0xaed1c261, 0x2ed17153, 0x2f91e5ae, 0xaf91569c, 0x2d10cc54, 0xad107f66, 0xac50eb9b, 0x2c5058a9, 0xa4d56589, 0x24d5d6bb, 0x25954246, 0xa595f174, 0x27146bbc, 0xa714d88e, 0xa6544c73, 0x2654ff41, 0x22163848, 0xa2168b7a, 0xa3561f87, 0x2356acb5, 0xa1d7367d, 0x21d7854f, 0x209711b2, 0xa097a280, 0xe0f91519, 0x60f9a62b, 0x61b932d6, 0xe1b981e4, 0x63381b2c, 0xe338a81e, 0xe2783ce3, 0x62788fd1, 0x663a48d8, 0xe63afbea, 0xe77a6f17, 0x677adc25, 0xe5fb46ed, 0x65fbf5df, 0x64bb6122, 0xe4bbd210, 0x6c3eef30, 0xec3e5c02, 0xed7ec8ff, 0x6d7e7bcd, 0xefffe105, 0x6fff5237, 0x6ebfc6ca, 0xeebf75f8, 0xeafdb2f1, 0x6afd01c3, 0x6bbd953e, 0xebbd260c, 0x693cbcc4, 0xe93c0ff6, 0xe87c9b0b, 0x687c2839, 0x7837a0e0, 0xf83713d2, 0xf977872f, 0x7977341d, 0xfbf6aed5, 0x7bf61de7, 0x7ab6891a, 0xfab63a28, 0xfef4fd21, 0x7ef44e13, 0x7fb4daee, 0xffb469dc, 0x7d35f314, 0xfd354026, 0xfc75d4db, 0x7c7567e9, 0xf4f05ac9, 0x74f0e9fb, 0x75b07d06, 0xf5b0ce34, 0x773154fc, 0xf731e7ce, 0xf6717333, 0x7671c001, 0x72330708, 0xf233b43a, 0xf37320c7, 0x737393f5, 0xf1f2093d, 0x71f2ba0f, 0x70b22ef2, 0xf0b29dc0, 0x50253f40, 0xd0258c72, 0xd165188f, 0x5165abbd, 0xd3e43175, 0x53e48247, 0x52a416ba, 0xd2a4a588, 0xd6e66281, 0x56e6d1b3, 0x57a6454e, 0xd7a6f67c, 0x55276cb4, 0xd527df86, 0xd4674b7b, 0x5467f849, 0xdce2c569, 0x5ce2765b, 0x5da2e2a6, 0xdda25194, 0x5f23cb5c, 0xdf23786e, 0xde63ec93, 0x5e635fa1, 0x5a2198a8, 0xda212b9a, 0xdb61bf67, 0x5b610c55, 0xd9e0969d, 0x59e025af, 0x58a0b152, 0xd8a00260, 0xc8eb8ab9, 0x48eb398b, 0x49abad76, 0xc9ab1e44, 0x4b2a848c, 0xcb2a37be, 0xca6aa343, 0x4a6a1071, 0x4e28d778, 0xce28644a, 0xcf68f0b7, 0x4f684385, 0xcde9d94d, 0x4de96a7f, 0x4ca9fe82, 0xcca94db0, 0x442c7090, 0xc42cc3a2, 0xc56c575f, 0x456ce46d, 0xc7ed7ea5, 0x47edcd97, 0x46ad596a, 0xc6adea58, 0xc2ef2d51, 0x42ef9e63, 0x43af0a9e, 0xc3afb9ac, 0x412e2364, 0xc12e9056, 0xc06e04ab, 0x406eb799, ], [ 0x00000000, 0x40b36b99, 0x8166d732, 0xc1d5bcab, 0x838cefcf, 0xc33f8456, 0x02ea38fd, 0x42595364, 0x86589e35, 0xc6ebf5ac, 0x073e4907, 0x478d229e, 0x05d471fa, 0x45671a63, 0x84b2a6c8, 0xc401cd51, 0x8df07dc1, 0xcd431658, 0x0c96aaf3, 0x4c25c16a, 0x0e7c920e, 0x4ecff997, 0x8f1a453c, 0xcfa92ea5, 0x0ba8e3f4, 0x4b1b886d, 0x8ace34c6, 0xca7d5f5f, 0x88240c3b, 0xc89767a2, 0x0942db09, 0x49f1b090, 0x9aa1ba29, 0xda12d1b0, 0x1bc76d1b, 0x5b740682, 0x192d55e6, 0x599e3e7f, 0x984b82d4, 0xd8f8e94d, 0x1cf9241c, 0x5c4a4f85, 0x9d9ff32e, 0xdd2c98b7, 0x9f75cbd3, 0xdfc6a04a, 0x1e131ce1, 0x5ea07778, 0x1751c7e8, 0x57e2ac71, 0x963710da, 0xd6847b43, 0x94dd2827, 0xd46e43be, 0x15bbff15, 0x5508948c, 0x910959dd, 0xd1ba3244, 0x106f8eef, 0x50dce576, 0x1285b612, 0x5236dd8b, 0x93e36120, 0xd3500ab9, 0xb40235f9, 0xf4b15e60, 0x3564e2cb, 0x75d78952, 0x378eda36, 0x773db1af, 0xb6e80d04, 0xf65b669d, 0x325aabcc, 0x72e9c055, 0xb33c7cfe, 0xf38f1767, 0xb1d64403, 0xf1652f9a, 0x30b09331, 0x7003f8a8, 0x39f24838, 0x794123a1, 0xb8949f0a, 0xf827f493, 0xba7ea7f7, 0xfacdcc6e, 0x3b1870c5, 0x7bab1b5c, 0xbfaad60d, 0xff19bd94, 0x3ecc013f, 0x7e7f6aa6, 0x3c2639c2, 0x7c95525b, 0xbd40eef0, 0xfdf38569, 0x2ea38fd0, 0x6e10e449, 0xafc558e2, 0xef76337b, 0xad2f601f, 0xed9c0b86, 0x2c49b72d, 0x6cfadcb4, 0xa8fb11e5, 0xe8487a7c, 0x299dc6d7, 0x692ead4e, 0x2b77fe2a, 0x6bc495b3, 0xaa112918, 0xeaa24281, 0xa353f211, 0xe3e09988, 0x22352523, 0x62864eba, 0x20df1dde, 0x606c7647, 0xa1b9caec, 0xe10aa175, 0x250b6c24, 0x65b807bd, 0xa46dbb16, 0xe4ded08f, 0xa68783eb, 0xe634e872, 0x27e154d9, 0x67523f40, 0xe9452a59, 0xa9f641c0, 0x6823fd6b, 0x289096f2, 0x6ac9c596, 0x2a7aae0f, 0xebaf12a4, 0xab1c793d, 0x6f1db46c, 0x2faedff5, 0xee7b635e, 0xaec808c7, 0xec915ba3, 0xac22303a, 0x6df78c91, 0x2d44e708, 0x64b55798, 0x24063c01, 0xe5d380aa, 0xa560eb33, 0xe739b857, 0xa78ad3ce, 0x665f6f65, 0x26ec04fc, 0xe2edc9ad, 0xa25ea234, 0x638b1e9f, 0x23387506, 0x61612662, 0x21d24dfb, 0xe007f150, 0xa0b49ac9, 0x73e49070, 0x3357fbe9, 0xf2824742, 0xb2312cdb, 0xf0687fbf, 0xb0db1426, 0x710ea88d, 0x31bdc314, 0xf5bc0e45, 0xb50f65dc, 0x74dad977, 0x3469b2ee, 0x7630e18a, 0x36838a13, 0xf75636b8, 0xb7e55d21, 0xfe14edb1, 0xbea78628, 0x7f723a83, 0x3fc1511a, 0x7d98027e, 0x3d2b69e7, 0xfcfed54c, 0xbc4dbed5, 0x784c7384, 0x38ff181d, 0xf92aa4b6, 0xb999cf2f, 0xfbc09c4b, 0xbb73f7d2, 0x7aa64b79, 0x3a1520e0, 0x5d471fa0, 0x1df47439, 0xdc21c892, 0x9c92a30b, 0xdecbf06f, 0x9e789bf6, 0x5fad275d, 0x1f1e4cc4, 0xdb1f8195, 0x9bacea0c, 0x5a7956a7, 0x1aca3d3e, 0x58936e5a, 0x182005c3, 0xd9f5b968, 0x9946d2f1, 0xd0b76261, 0x900409f8, 0x51d1b553, 0x1162deca, 0x533b8dae, 0x1388e637, 0xd25d5a9c, 0x92ee3105, 0x56effc54, 0x165c97cd, 0xd7892b66, 0x973a40ff, 0xd563139b, 0x95d07802, 0x5405c4a9, 0x14b6af30, 0xc7e6a589, 0x8755ce10, 0x468072bb, 0x06331922, 0x446a4a46, 0x04d921df, 0xc50c9d74, 0x85bff6ed, 0x41be3bbc, 0x010d5025, 0xc0d8ec8e, 0x806b8717, 0xc232d473, 0x8281bfea, 0x43540341, 0x03e768d8, 0x4a16d848, 0x0aa5b3d1, 0xcb700f7a, 0x8bc364e3, 0xc99a3787, 0x89295c1e, 0x48fce0b5, 0x084f8b2c, 0xcc4e467d, 0x8cfd2de4, 0x4d28914f, 0x0d9bfad6, 0x4fc2a9b2, 0x0f71c22b, 0xcea47e80, 0x8e171519, ], [ 0x00000000, 0x53cb1519, 0xa7962a32, 0xf45d3f2b, 0xce6d15cf, 0x9da600d6, 0x69fb3ffd, 0x3a302ae4, 0x1d9b6a35, 0x4e507f2c, 0xba0d4007, 0xe9c6551e, 0xd3f67ffa, 0x803d6ae3, 0x746055c8, 0x27ab40d1, 0x3b36d46a, 0x68fdc173, 0x9ca0fe58, 0xcf6beb41, 0xf55bc1a5, 0xa690d4bc, 0x52cdeb97, 0x0106fe8e, 0x26adbe5f, 0x7566ab46, 0x813b946d, 0xd2f08174, 0xe8c0ab90, 0xbb0bbe89, 0x4f5681a2, 0x1c9d94bb, 0x766da8d4, 0x25a6bdcd, 0xd1fb82e6, 0x823097ff, 0xb800bd1b, 0xebcba802, 0x1f969729, 0x4c5d8230, 0x6bf6c2e1, 0x383dd7f8, 0xcc60e8d3, 0x9fabfdca, 0xa59bd72e, 0xf650c237, 0x020dfd1c, 0x51c6e805, 0x4d5b7cbe, 0x1e9069a7, 0xeacd568c, 0xb9064395, 0x83366971, 0xd0fd7c68, 0x24a04343, 0x776b565a, 0x50c0168b, 0x030b0392, 0xf7563cb9, 0xa49d29a0, 0x9ead0344, 0xcd66165d, 0x393b2976, 0x6af03c6f, 0xecdb51a8, 0xbf1044b1, 0x4b4d7b9a, 0x18866e83, 0x22b64467, 0x717d517e, 0x85206e55, 0xd6eb7b4c, 0xf1403b9d, 0xa28b2e84, 0x56d611af, 0x051d04b6, 0x3f2d2e52, 0x6ce63b4b, 0x98bb0460, 0xcb701179, 0xd7ed85c2, 0x842690db, 0x707baff0, 0x23b0bae9, 0x1980900d, 0x4a4b8514, 0xbe16ba3f, 0xedddaf26, 0xca76eff7, 0x99bdfaee, 0x6de0c5c5, 0x3e2bd0dc, 0x041bfa38, 0x57d0ef21, 0xa38dd00a, 0xf046c513, 0x9ab6f97c, 0xc97dec65, 0x3d20d34e, 0x6eebc657, 0x54dbecb3, 0x0710f9aa, 0xf34dc681, 0xa086d398, 0x872d9349, 0xd4e68650, 0x20bbb97b, 0x7370ac62, 0x49408686, 0x1a8b939f, 0xeed6acb4, 0xbd1db9ad, 0xa1802d16, 0xf24b380f, 0x06160724, 0x55dd123d, 0x6fed38d9, 0x3c262dc0, 0xc87b12eb, 0x9bb007f2, 0xbc1b4723, 0xefd0523a, 0x1b8d6d11, 0x48467808, 0x727652ec, 0x21bd47f5, 0xd5e078de, 0x862b6dc7, 0x58f7e2fb, 0x0b3cf7e2, 0xff61c8c9, 0xacaaddd0, 0x969af734, 0xc551e22d, 0x310cdd06, 0x62c7c81f, 0x456c88ce, 0x16a79dd7, 0xe2faa2fc, 0xb131b7e5, 0x8b019d01, 0xd8ca8818, 0x2c97b733, 0x7f5ca22a, 0x63c13691, 0x300a2388, 0xc4571ca3, 0x979c09ba, 0xadac235e, 0xfe673647, 0x0a3a096c, 0x59f11c75, 0x7e5a5ca4, 0x2d9149bd, 0xd9cc7696, 0x8a07638f, 0xb037496b, 0xe3fc5c72, 0x17a16359, 0x446a7640, 0x2e9a4a2f, 0x7d515f36, 0x890c601d, 0xdac77504, 0xe0f75fe0, 0xb33c4af9, 0x476175d2, 0x14aa60cb, 0x3301201a, 0x60ca3503, 0x94970a28, 0xc75c1f31, 0xfd6c35d5, 0xaea720cc, 0x5afa1fe7, 0x09310afe, 0x15ac9e45, 0x46678b5c, 0xb23ab477, 0xe1f1a16e, 0xdbc18b8a, 0x880a9e93, 0x7c57a1b8, 0x2f9cb4a1, 0x0837f470, 0x5bfce169, 0xafa1de42, 0xfc6acb5b, 0xc65ae1bf, 0x9591f4a6, 0x61cccb8d, 0x3207de94, 0xb42cb353, 0xe7e7a64a, 0x13ba9961, 0x40718c78, 0x7a41a69c, 0x298ab385, 0xddd78cae, 0x8e1c99b7, 0xa9b7d966, 0xfa7ccc7f, 0x0e21f354, 0x5deae64d, 0x67dacca9, 0x3411d9b0, 0xc04ce69b, 0x9387f382, 0x8f1a6739, 0xdcd17220, 0x288c4d0b, 0x7b475812, 0x417772f6, 0x12bc67ef, 0xe6e158c4, 0xb52a4ddd, 0x92810d0c, 0xc14a1815, 0x3517273e, 0x66dc3227, 0x5cec18c3, 0x0f270dda, 0xfb7a32f1, 0xa8b127e8, 0xc2411b87, 0x918a0e9e, 0x65d731b5, 0x361c24ac, 0x0c2c0e48, 0x5fe71b51, 0xabba247a, 0xf8713163, 0xdfda71b2, 0x8c1164ab, 0x784c5b80, 0x2b874e99, 0x11b7647d, 0x427c7164, 0xb6214e4f, 0xe5ea5b56, 0xf977cfed, 0xaabcdaf4, 0x5ee1e5df, 0x0d2af0c6, 0x371ada22, 0x64d1cf3b, 0x908cf010, 0xc347e509, 0xe4eca5d8, 0xb727b0c1, 0x437a8fea, 0x10b19af3, 0x2a81b017, 0x794aa50e, 0x8d179a25, 0xdedc8f3c, ], [ 0x00000000, 0xb1efc5f6, 0xe29eca47, 0x53710fb1, 0x447cd525, 0xf59310d3, 0xa6e21f62, 0x170dda94, 0x88f9aa4a, 0x39166fbc, 0x6a67600d, 0xdb88a5fb, 0xcc857f6f, 0x7d6aba99, 0x2e1bb528, 0x9ff470de, 0x90b2153f, 0x215dd0c9, 0x722cdf78, 0xc3c31a8e, 0xd4cec01a, 0x652105ec, 0x36500a5d, 0x87bfcfab, 0x184bbf75, 0xa9a47a83, 0xfad57532, 0x4b3ab0c4, 0x5c376a50, 0xedd8afa6, 0xbea9a017, 0x0f4665e1, 0xa0256bd5, 0x11caae23, 0x42bba192, 0xf3546464, 0xe459bef0, 0x55b67b06, 0x06c774b7, 0xb728b141, 0x28dcc19f, 0x99330469, 0xca420bd8, 0x7badce2e, 0x6ca014ba, 0xdd4fd14c, 0x8e3edefd, 0x3fd11b0b, 0x30977eea, 0x8178bb1c, 0xd209b4ad, 0x63e6715b, 0x74ebabcf, 0xc5046e39, 0x96756188, 0x279aa47e, 0xb86ed4a0, 0x09811156, 0x5af01ee7, 0xeb1fdb11, 0xfc120185, 0x4dfdc473, 0x1e8ccbc2, 0xaf630e34, 0xc10b9601, 0x70e453f7, 0x23955c46, 0x927a99b0, 0x85774324, 0x349886d2, 0x67e98963, 0xd6064c95, 0x49f23c4b, 0xf81df9bd, 0xab6cf60c, 0x1a8333fa, 0x0d8ee96e, 0xbc612c98, 0xef102329, 0x5effe6df, 0x51b9833e, 0xe05646c8, 0xb3274979, 0x02c88c8f, 0x15c5561b, 0xa42a93ed, 0xf75b9c5c, 0x46b459aa, 0xd9402974, 0x68afec82, 0x3bdee333, 0x8a3126c5, 0x9d3cfc51, 0x2cd339a7, 0x7fa23616, 0xce4df3e0, 0x612efdd4, 0xd0c13822, 0x83b03793, 0x325ff265, 0x255228f1, 0x94bded07, 0xc7cce2b6, 0x76232740, 0xe9d7579e, 0x58389268, 0x0b499dd9, 0xbaa6582f, 0xadab82bb, 0x1c44474d, 0x4f3548fc, 0xfeda8d0a, 0xf19ce8eb, 0x40732d1d, 0x130222ac, 0xa2ede75a, 0xb5e03dce, 0x040ff838, 0x577ef789, 0xe691327f, 0x796542a1, 0xc88a8757, 0x9bfb88e6, 0x2a144d10, 0x3d199784, 0x8cf65272, 0xdf875dc3, 0x6e689835, 0x03566da9, 0xb2b9a85f, 0xe1c8a7ee, 0x50276218, 0x472ab88c, 0xf6c57d7a, 0xa5b472cb, 0x145bb73d, 0x8bafc7e3, 0x3a400215, 0x69310da4, 0xd8dec852, 0xcfd312c6, 0x7e3cd730, 0x2d4dd881, 0x9ca21d77, 0x93e47896, 0x220bbd60, 0x717ab2d1, 0xc0957727, 0xd798adb3, 0x66776845, 0x350667f4, 0x84e9a202, 0x1b1dd2dc, 0xaaf2172a, 0xf983189b, 0x486cdd6d, 0x5f6107f9, 0xee8ec20f, 0xbdffcdbe, 0x0c100848, 0xa373067c, 0x129cc38a, 0x41edcc3b, 0xf00209cd, 0xe70fd359, 0x56e016af, 0x0591191e, 0xb47edce8, 0x2b8aac36, 0x9a6569c0, 0xc9146671, 0x78fba387, 0x6ff67913, 0xde19bce5, 0x8d68b354, 0x3c8776a2, 0x33c11343, 0x822ed6b5, 0xd15fd904, 0x60b01cf2, 0x77bdc666, 0xc6520390, 0x95230c21, 0x24ccc9d7, 0xbb38b909, 0x0ad77cff, 0x59a6734e, 0xe849b6b8, 0xff446c2c, 0x4eaba9da, 0x1ddaa66b, 0xac35639d, 0xc25dfba8, 0x73b23e5e, 0x20c331ef, 0x912cf419, 0x86212e8d, 0x37ceeb7b, 0x64bfe4ca, 0xd550213c, 0x4aa451e2, 0xfb4b9414, 0xa83a9ba5, 0x19d55e53, 0x0ed884c7, 0xbf374131, 0xec464e80, 0x5da98b76, 0x52efee97, 0xe3002b61, 0xb07124d0, 0x019ee126, 0x16933bb2, 0xa77cfe44, 0xf40df1f5, 0x45e23403, 0xda1644dd, 0x6bf9812b, 0x38888e9a, 0x89674b6c, 0x9e6a91f8, 0x2f85540e, 0x7cf45bbf, 0xcd1b9e49, 0x6278907d, 0xd397558b, 0x80e65a3a, 0x31099fcc, 0x26044558, 0x97eb80ae, 0xc49a8f1f, 0x75754ae9, 0xea813a37, 0x5b6effc1, 0x081ff070, 0xb9f03586, 0xaefdef12, 0x1f122ae4, 0x4c632555, 0xfd8ce0a3, 0xf2ca8542, 0x432540b4, 0x10544f05, 0xa1bb8af3, 0xb6b65067, 0x07599591, 0x54289a20, 0xe5c75fd6, 0x7a332f08, 0xcbdceafe, 0x98ade54f, 0x294220b9, 0x3e4ffa2d, 0x8fa03fdb, 0xdcd1306a, 0x6d3ef59c, ], [ 0x00000000, 0x06acdb52, 0x0d59b6a4, 0x0bf56df6, 0x1ab36d48, 0x1c1fb61a, 0x17eadbec, 0x114600be, 0x3566da90, 0x33ca01c2, 0x383f6c34, 0x3e93b766, 0x2fd5b7d8, 0x29796c8a, 0x228c017c, 0x2420da2e, 0x6acdb520, 0x6c616e72, 0x67940384, 0x6138d8d6, 0x707ed868, 0x76d2033a, 0x7d276ecc, 0x7b8bb59e, 0x5fab6fb0, 0x5907b4e2, 0x52f2d914, 0x545e0246, 0x451802f8, 0x43b4d9aa, 0x4841b45c, 0x4eed6f0e, 0xd59b6a40, 0xd337b112, 0xd8c2dce4, 0xde6e07b6, 0xcf280708, 0xc984dc5a, 0xc271b1ac, 0xc4dd6afe, 0xe0fdb0d0, 0xe6516b82, 0xeda40674, 0xeb08dd26, 0xfa4edd98, 0xfce206ca, 0xf7176b3c, 0xf1bbb06e, 0xbf56df60, 0xb9fa0432, 0xb20f69c4, 0xb4a3b296, 0xa5e5b228, 0xa349697a, 0xa8bc048c, 0xae10dfde, 0x8a3005f0, 0x8c9cdea2, 0x8769b354, 0x81c56806, 0x908368b8, 0x962fb3ea, 0x9ddade1c, 0x9b76054e, 0x2a77952b, 0x2cdb4e79, 0x272e238f, 0x2182f8dd, 0x30c4f863, 0x36682331, 0x3d9d4ec7, 0x3b319595, 0x1f114fbb, 0x19bd94e9, 0x1248f91f, 0x14e4224d, 0x05a222f3, 0x030ef9a1, 0x08fb9457, 0x0e574f05, 0x40ba200b, 0x4616fb59, 0x4de396af, 0x4b4f4dfd, 0x5a094d43, 0x5ca59611, 0x5750fbe7, 0x51fc20b5, 0x75dcfa9b, 0x737021c9, 0x78854c3f, 0x7e29976d, 0x6f6f97d3, 0x69c34c81, 0x62362177, 0x649afa25, 0xffecff6b, 0xf9402439, 0xf2b549cf, 0xf419929d, 0xe55f9223, 0xe3f34971, 0xe8062487, 0xeeaaffd5, 0xca8a25fb, 0xcc26fea9, 0xc7d3935f, 0xc17f480d, 0xd03948b3, 0xd69593e1, 0xdd60fe17, 0xdbcc2545, 0x95214a4b, 0x938d9119, 0x9878fcef, 0x9ed427bd, 0x8f922703, 0x893efc51, 0x82cb91a7, 0x84674af5, 0xa04790db, 0xa6eb4b89, 0xad1e267f, 0xabb2fd2d, 0xbaf4fd93, 0xbc5826c1, 0xb7ad4b37, 0xb1019065, 0x54ef2a56, 0x5243f104, 0x59b69cf2, 0x5f1a47a0, 0x4e5c471e, 0x48f09c4c, 0x4305f1ba, 0x45a92ae8, 0x6189f0c6, 0x67252b94, 0x6cd04662, 0x6a7c9d30, 0x7b3a9d8e, 0x7d9646dc, 0x76632b2a, 0x70cff078, 0x3e229f76, 0x388e4424, 0x337b29d2, 0x35d7f280, 0x2491f23e, 0x223d296c, 0x29c8449a, 0x2f649fc8, 0x0b4445e6, 0x0de89eb4, 0x061df342, 0x00b12810, 0x11f728ae, 0x175bf3fc, 0x1cae9e0a, 0x1a024558, 0x81744016, 0x87d89b44, 0x8c2df6b2, 0x8a812de0, 0x9bc72d5e, 0x9d6bf60c, 0x969e9bfa, 0x903240a8, 0xb4129a86, 0xb2be41d4, 0xb94b2c22, 0xbfe7f770, 0xaea1f7ce, 0xa80d2c9c, 0xa3f8416a, 0xa5549a38, 0xebb9f536, 0xed152e64, 0xe6e04392, 0xe04c98c0, 0xf10a987e, 0xf7a6432c, 0xfc532eda, 0xfafff588, 0xdedf2fa6, 0xd873f4f4, 0xd3869902, 0xd52a4250, 0xc46c42ee, 0xc2c099bc, 0xc935f44a, 0xcf992f18, 0x7e98bf7d, 0x7834642f, 0x73c109d9, 0x756dd28b, 0x642bd235, 0x62870967, 0x69726491, 0x6fdebfc3, 0x4bfe65ed, 0x4d52bebf, 0x46a7d349, 0x400b081b, 0x514d08a5, 0x57e1d3f7, 0x5c14be01, 0x5ab86553, 0x14550a5d, 0x12f9d10f, 0x190cbcf9, 0x1fa067ab, 0x0ee66715, 0x084abc47, 0x03bfd1b1, 0x05130ae3, 0x2133d0cd, 0x279f0b9f, 0x2c6a6669, 0x2ac6bd3b, 0x3b80bd85, 0x3d2c66d7, 0x36d90b21, 0x3075d073, 0xab03d53d, 0xadaf0e6f, 0xa65a6399, 0xa0f6b8cb, 0xb1b0b875, 0xb71c6327, 0xbce90ed1, 0xba45d583, 0x9e650fad, 0x98c9d4ff, 0x933cb909, 0x9590625b, 0x84d662e5, 0x827ab9b7, 0x898fd441, 0x8f230f13, 0xc1ce601d, 0xc762bb4f, 0xcc97d6b9, 0xca3b0deb, 0xdb7d0d55, 0xddd1d607, 0xd624bbf1, 0xd08860a3, 0xf4a8ba8d, 0xf20461df, 0xf9f10c29, 0xff5dd77b, 0xee1bd7c5, 0xe8b70c97, 0xe3426161, 0xe5eeba33, ], [ 0x00000000, 0xa9de54ac, 0xd2fde8f3, 0x7b23bc5f, 0x24ba904d, 0x8d64c4e1, 0xf64778be, 0x5f992c12, 0x4975209a, 0xe0ab7436, 0x9b88c869, 0x32569cc5, 0x6dcfb0d7, 0xc411e47b, 0xbf325824, 0x16ec0c88, 0x92ea4134, 0x3b341598, 0x4017a9c7, 0xe9c9fd6b, 0xb650d179, 0x1f8e85d5, 0x64ad398a, 0xcd736d26, 0xdb9f61ae, 0x72413502, 0x0962895d, 0xa0bcddf1, 0xff25f1e3, 0x56fba54f, 0x2dd81910, 0x84064dbc, 0xa495c3c3, 0x0d4b976f, 0x76682b30, 0xdfb67f9c, 0x802f538e, 0x29f10722, 0x52d2bb7d, 0xfb0cefd1, 0xede0e359, 0x443eb7f5, 0x3f1d0baa, 0x96c35f06, 0xc95a7314, 0x608427b8, 0x1ba79be7, 0xb279cf4b, 0x367f82f7, 0x9fa1d65b, 0xe4826a04, 0x4d5c3ea8, 0x12c512ba, 0xbb1b4616, 0xc038fa49, 0x69e6aee5, 0x7f0aa26d, 0xd6d4f6c1, 0xadf74a9e, 0x04291e32, 0x5bb03220, 0xf26e668c, 0x894ddad3, 0x20938e7f, 0xc86ac62d, 0x61b49281, 0x1a972ede, 0xb3497a72, 0xecd05660, 0x450e02cc, 0x3e2dbe93, 0x97f3ea3f, 0x811fe6b7, 0x28c1b21b, 0x53e20e44, 0xfa3c5ae8, 0xa5a576fa, 0x0c7b2256, 0x77589e09, 0xde86caa5, 0x5a808719, 0xf35ed3b5, 0x887d6fea, 0x21a33b46, 0x7e3a1754, 0xd7e443f8, 0xacc7ffa7, 0x0519ab0b, 0x13f5a783, 0xba2bf32f, 0xc1084f70, 0x68d61bdc, 0x374f37ce, 0x9e916362, 0xe5b2df3d, 0x4c6c8b91, 0x6cff05ee, 0xc5215142, 0xbe02ed1d, 0x17dcb9b1, 0x484595a3, 0xe19bc10f, 0x9ab87d50, 0x336629fc, 0x258a2574, 0x8c5471d8, 0xf777cd87, 0x5ea9992b, 0x0130b539, 0xa8eee195, 0xd3cd5dca, 0x7a130966, 0xfe1544da, 0x57cb1076, 0x2ce8ac29, 0x8536f885, 0xdaafd497, 0x7371803b, 0x08523c64, 0xa18c68c8, 0xb7606440, 0x1ebe30ec, 0x659d8cb3, 0xcc43d81f, 0x93daf40d, 0x3a04a0a1, 0x41271cfe, 0xe8f94852, 0x1194cdf1, 0xb84a995d, 0xc3692502, 0x6ab771ae, 0x352e5dbc, 0x9cf00910, 0xe7d3b54f, 0x4e0de1e3, 0x58e1ed6b, 0xf13fb9c7, 0x8a1c0598, 0x23c25134, 0x7c5b7d26, 0xd585298a, 0xaea695d5, 0x0778c179, 0x837e8cc5, 0x2aa0d869, 0x51836436, 0xf85d309a, 0xa7c41c88, 0x0e1a4824, 0x7539f47b, 0xdce7a0d7, 0xca0bac5f, 0x63d5f8f3, 0x18f644ac, 0xb1281000, 0xeeb13c12, 0x476f68be, 0x3c4cd4e1, 0x9592804d, 0xb5010e32, 0x1cdf5a9e, 0x67fce6c1, 0xce22b26d, 0x91bb9e7f, 0x3865cad3, 0x4346768c, 0xea982220, 0xfc742ea8, 0x55aa7a04, 0x2e89c65b, 0x875792f7, 0xd8cebee5, 0x7110ea49, 0x0a335616, 0xa3ed02ba, 0x27eb4f06, 0x8e351baa, 0xf516a7f5, 0x5cc8f359, 0x0351df4b, 0xaa8f8be7, 0xd1ac37b8, 0x78726314, 0x6e9e6f9c, 0xc7403b30, 0xbc63876f, 0x15bdd3c3, 0x4a24ffd1, 0xe3faab7d, 0x98d91722, 0x3107438e, 0xd9fe0bdc, 0x70205f70, 0x0b03e32f, 0xa2ddb783, 0xfd449b91, 0x549acf3d, 0x2fb97362, 0x866727ce, 0x908b2b46, 0x39557fea, 0x4276c3b5, 0xeba89719, 0xb431bb0b, 0x1defefa7, 0x66cc53f8, 0xcf120754, 0x4b144ae8, 0xe2ca1e44, 0x99e9a21b, 0x3037f6b7, 0x6faedaa5, 0xc6708e09, 0xbd533256, 0x148d66fa, 0x02616a72, 0xabbf3ede, 0xd09c8281, 0x7942d62d, 0x26dbfa3f, 0x8f05ae93, 0xf42612cc, 0x5df84660, 0x7d6bc81f, 0xd4b59cb3, 0xaf9620ec, 0x06487440, 0x59d15852, 0xf00f0cfe, 0x8b2cb0a1, 0x22f2e40d, 0x341ee885, 0x9dc0bc29, 0xe6e30076, 0x4f3d54da, 0x10a478c8, 0xb97a2c64, 0xc259903b, 0x6b87c497, 0xef81892b, 0x465fdd87, 0x3d7c61d8, 0x94a23574, 0xcb3b1966, 0x62e54dca, 0x19c6f195, 0xb018a539, 0xa6f4a9b1, 0x0f2afd1d, 0x74094142, 0xddd715ee, 0x824e39fc, 0x2b906d50, 0x50b3d10f, 0xf96d85a3, ], [ 0x00000000, 0x23299be2, 0x465337c4, 0x657aac26, 0x8ca66f88, 0xaf8ff46a, 0xcaf5584c, 0xe9dcc3ae, 0x980d9ebb, 0xbb240559, 0xde5ea97f, 0xfd77329d, 0x14abf133, 0x37826ad1, 0x52f8c6f7, 0x71d15d15, 0xb15a7cdd, 0x9273e73f, 0xf7094b19, 0xd420d0fb, 0x3dfc1355, 0x1ed588b7, 0x7baf2491, 0x5886bf73, 0x2957e266, 0x0a7e7984, 0x6f04d5a2, 0x4c2d4e40, 0xa5f18dee, 0x86d8160c, 0xe3a2ba2a, 0xc08b21c8, 0xe3f5b811, 0xc0dc23f3, 0xa5a68fd5, 0x868f1437, 0x6f53d799, 0x4c7a4c7b, 0x2900e05d, 0x0a297bbf, 0x7bf826aa, 0x58d1bd48, 0x3dab116e, 0x1e828a8c, 0xf75e4922, 0xd477d2c0, 0xb10d7ee6, 0x9224e504, 0x52afc4cc, 0x71865f2e, 0x14fcf308, 0x37d568ea, 0xde09ab44, 0xfd2030a6, 0x985a9c80, 0xbb730762, 0xcaa25a77, 0xe98bc195, 0x8cf16db3, 0xafd8f651, 0x460435ff, 0x652dae1d, 0x0057023b, 0x237e99d9, 0x46aa3189, 0x6583aa6b, 0x00f9064d, 0x23d09daf, 0xca0c5e01, 0xe925c5e3, 0x8c5f69c5, 0xaf76f227, 0xdea7af32, 0xfd8e34d0, 0x98f498f6, 0xbbdd0314, 0x5201c0ba, 0x71285b58, 0x1452f77e, 0x377b6c9c, 0xf7f04d54, 0xd4d9d6b6, 0xb1a37a90, 0x928ae172, 0x7b5622dc, 0x587fb93e, 0x3d051518, 0x1e2c8efa, 0x6ffdd3ef, 0x4cd4480d, 0x29aee42b, 0x0a877fc9, 0xe35bbc67, 0xc0722785, 0xa5088ba3, 0x86211041, 0xa55f8998, 0x8676127a, 0xe30cbe5c, 0xc02525be, 0x29f9e610, 0x0ad07df2, 0x6faad1d4, 0x4c834a36, 0x3d521723, 0x1e7b8cc1, 0x7b0120e7, 0x5828bb05, 0xb1f478ab, 0x92dde349, 0xf7a74f6f, 0xd48ed48d, 0x1405f545, 0x372c6ea7, 0x5256c281, 0x717f5963, 0x98a39acd, 0xbb8a012f, 0xdef0ad09, 0xfdd936eb, 0x8c086bfe, 0xaf21f01c, 0xca5b5c3a, 0xe972c7d8, 0x00ae0476, 0x23879f94, 0x46fd33b2, 0x65d4a850, 0x8d546312, 0xae7df8f0, 0xcb0754d6, 0xe82ecf34, 0x01f20c9a, 0x22db9778, 0x47a13b5e, 0x6488a0bc, 0x1559fda9, 0x3670664b, 0x530aca6d, 0x7023518f, 0x99ff9221, 0xbad609c3, 0xdfaca5e5, 0xfc853e07, 0x3c0e1fcf, 0x1f27842d, 0x7a5d280b, 0x5974b3e9, 0xb0a87047, 0x9381eba5, 0xf6fb4783, 0xd5d2dc61, 0xa4038174, 0x872a1a96, 0xe250b6b0, 0xc1792d52, 0x28a5eefc, 0x0b8c751e, 0x6ef6d938, 0x4ddf42da, 0x6ea1db03, 0x4d8840e1, 0x28f2ecc7, 0x0bdb7725, 0xe207b48b, 0xc12e2f69, 0xa454834f, 0x877d18ad, 0xf6ac45b8, 0xd585de5a, 0xb0ff727c, 0x93d6e99e, 0x7a0a2a30, 0x5923b1d2, 0x3c591df4, 0x1f708616, 0xdffba7de, 0xfcd23c3c, 0x99a8901a, 0xba810bf8, 0x535dc856, 0x707453b4, 0x150eff92, 0x36276470, 0x47f63965, 0x64dfa287, 0x01a50ea1, 0x228c9543, 0xcb5056ed, 0xe879cd0f, 0x8d036129, 0xae2afacb, 0xcbfe529b, 0xe8d7c979, 0x8dad655f, 0xae84febd, 0x47583d13, 0x6471a6f1, 0x010b0ad7, 0x22229135, 0x53f3cc20, 0x70da57c2, 0x15a0fbe4, 0x36896006, 0xdf55a3a8, 0xfc7c384a, 0x9906946c, 0xba2f0f8e, 0x7aa42e46, 0x598db5a4, 0x3cf71982, 0x1fde8260, 0xf60241ce, 0xd52bda2c, 0xb051760a, 0x9378ede8, 0xe2a9b0fd, 0xc1802b1f, 0xa4fa8739, 0x87d31cdb, 0x6e0fdf75, 0x4d264497, 0x285ce8b1, 0x0b757353, 0x280bea8a, 0x0b227168, 0x6e58dd4e, 0x4d7146ac, 0xa4ad8502, 0x87841ee0, 0xe2feb2c6, 0xc1d72924, 0xb0067431, 0x932fefd3, 0xf65543f5, 0xd57cd817, 0x3ca01bb9, 0x1f89805b, 0x7af32c7d, 0x59dab79f, 0x99519657, 0xba780db5, 0xdf02a193, 0xfc2b3a71, 0x15f7f9df, 0x36de623d, 0x53a4ce1b, 0x708d55f9, 0x015c08ec, 0x2275930e, 0x470f3f28, 0x6426a4ca, 0x8dfa6764, 0xaed3fc86, 0xcba950a0, 0xe880cb42, ], [ 0x00000000, 0x9be9878f, 0xb6924eb5, 0x2d7bc93a, 0xec65dcc1, 0x778c5b4e, 0x5af79274, 0xc11e15fb, 0x598af829, 0xc2637fa6, 0xef18b69c, 0x74f13113, 0xb5ef24e8, 0x2e06a367, 0x037d6a5d, 0x9894edd2, 0xb315f052, 0x28fc77dd, 0x0587bee7, 0x9e6e3968, 0x5f702c93, 0xc499ab1c, 0xe9e26226, 0x720be5a9, 0xea9f087b, 0x71768ff4, 0x5c0d46ce, 0xc7e4c141, 0x06fad4ba, 0x9d135335, 0xb0689a0f, 0x2b811d80, 0xe76aa10f, 0x7c832680, 0x51f8efba, 0xca116835, 0x0b0f7dce, 0x90e6fa41, 0xbd9d337b, 0x2674b4f4, 0xbee05926, 0x2509dea9, 0x08721793, 0x939b901c, 0x528585e7, 0xc96c0268, 0xe417cb52, 0x7ffe4cdd, 0x547f515d, 0xcf96d6d2, 0xe2ed1fe8, 0x79049867, 0xb81a8d9c, 0x23f30a13, 0x0e88c329, 0x956144a6, 0x0df5a974, 0x961c2efb, 0xbb67e7c1, 0x208e604e, 0xe19075b5, 0x7a79f23a, 0x57023b00, 0xccebbc8f, 0x4f9403b5, 0xd47d843a, 0xf9064d00, 0x62efca8f, 0xa3f1df74, 0x381858fb, 0x156391c1, 0x8e8a164e, 0x161efb9c, 0x8df77c13, 0xa08cb529, 0x3b6532a6, 0xfa7b275d, 0x6192a0d2, 0x4ce969e8, 0xd700ee67, 0xfc81f3e7, 0x67687468, 0x4a13bd52, 0xd1fa3add, 0x10e42f26, 0x8b0da8a9, 0xa6766193, 0x3d9fe61c, 0xa50b0bce, 0x3ee28c41, 0x1399457b, 0x8870c2f4, 0x496ed70f, 0xd2875080, 0xfffc99ba, 0x64151e35, 0xa8fea2ba, 0x33172535, 0x1e6cec0f, 0x85856b80, 0x449b7e7b, 0xdf72f9f4, 0xf20930ce, 0x69e0b741, 0xf1745a93, 0x6a9ddd1c, 0x47e61426, 0xdc0f93a9, 0x1d118652, 0x86f801dd, 0xab83c8e7, 0x306a4f68, 0x1beb52e8, 0x8002d567, 0xad791c5d, 0x36909bd2, 0xf78e8e29, 0x6c6709a6, 0x411cc09c, 0xdaf54713, 0x4261aac1, 0xd9882d4e, 0xf4f3e474, 0x6f1a63fb, 0xae047600, 0x35edf18f, 0x189638b5, 0x837fbf3a, 0x9f28076a, 0x04c180e5, 0x29ba49df, 0xb253ce50, 0x734ddbab, 0xe8a45c24, 0xc5df951e, 0x5e361291, 0xc6a2ff43, 0x5d4b78cc, 0x7030b1f6, 0xebd93679, 0x2ac72382, 0xb12ea40d, 0x9c556d37, 0x07bceab8, 0x2c3df738, 0xb7d470b7, 0x9aafb98d, 0x01463e02, 0xc0582bf9, 0x5bb1ac76, 0x76ca654c, 0xed23e2c3, 0x75b70f11, 0xee5e889e, 0xc32541a4, 0x58ccc62b, 0x99d2d3d0, 0x023b545f, 0x2f409d65, 0xb4a91aea, 0x7842a665, 0xe3ab21ea, 0xced0e8d0, 0x55396f5f, 0x94277aa4, 0x0fcefd2b, 0x22b53411, 0xb95cb39e, 0x21c85e4c, 0xba21d9c3, 0x975a10f9, 0x0cb39776, 0xcdad828d, 0x56440502, 0x7b3fcc38, 0xe0d64bb7, 0xcb575637, 0x50bed1b8, 0x7dc51882, 0xe62c9f0d, 0x27328af6, 0xbcdb0d79, 0x91a0c443, 0x0a4943cc, 0x92ddae1e, 0x09342991, 0x244fe0ab, 0xbfa66724, 0x7eb872df, 0xe551f550, 0xc82a3c6a, 0x53c3bbe5, 0xd0bc04df, 0x4b558350, 0x662e4a6a, 0xfdc7cde5, 0x3cd9d81e, 0xa7305f91, 0x8a4b96ab, 0x11a21124, 0x8936fcf6, 0x12df7b79, 0x3fa4b243, 0xa44d35cc, 0x65532037, 0xfebaa7b8, 0xd3c16e82, 0x4828e90d, 0x63a9f48d, 0xf8407302, 0xd53bba38, 0x4ed23db7, 0x8fcc284c, 0x1425afc3, 0x395e66f9, 0xa2b7e176, 0x3a230ca4, 0xa1ca8b2b, 0x8cb14211, 0x1758c59e, 0xd646d065, 0x4daf57ea, 0x60d49ed0, 0xfb3d195f, 0x37d6a5d0, 0xac3f225f, 0x8144eb65, 0x1aad6cea, 0xdbb37911, 0x405afe9e, 0x6d2137a4, 0xf6c8b02b, 0x6e5c5df9, 0xf5b5da76, 0xd8ce134c, 0x432794c3, 0x82398138, 0x19d006b7, 0x34abcf8d, 0xaf424802, 0x84c35582, 0x1f2ad20d, 0x32511b37, 0xa9b89cb8, 0x68a68943, 0xf34f0ecc, 0xde34c7f6, 0x45dd4079, 0xdd49adab, 0x46a02a24, 0x6bdbe31e, 0xf0326491, 0x312c716a, 0xaac5f6e5, 0x87be3fdf, 0x1c57b850, ], [ 0x00000000, 0xbf114f7f, 0xff63df55, 0x4072902a, 0x7f86ff01, 0xc097b07e, 0x80e52054, 0x3ff46f2b, 0xff0dfe02, 0x401cb17d, 0x006e2157, 0xbf7f6e28, 0x808b0103, 0x3f9a4e7c, 0x7fe8de56, 0xc0f99129, 0x7f5abdaf, 0xc04bf2d0, 0x803962fa, 0x3f282d85, 0x00dc42ae, 0xbfcd0dd1, 0xffbf9dfb, 0x40aed284, 0x805743ad, 0x3f460cd2, 0x7f349cf8, 0xc025d387, 0xffd1bcac, 0x40c0f3d3, 0x00b263f9, 0xbfa32c86, 0xfeb57b5e, 0x41a43421, 0x01d6a40b, 0xbec7eb74, 0x8133845f, 0x3e22cb20, 0x7e505b0a, 0xc1411475, 0x01b8855c, 0xbea9ca23, 0xfedb5a09, 0x41ca1576, 0x7e3e7a5d, 0xc12f3522, 0x815da508, 0x3e4cea77, 0x81efc6f1, 0x3efe898e, 0x7e8c19a4, 0xc19d56db, 0xfe6939f0, 0x4178768f, 0x010ae6a5, 0xbe1ba9da, 0x7ee238f3, 0xc1f3778c, 0x8181e7a6, 0x3e90a8d9, 0x0164c7f2, 0xbe75888d, 0xfe0718a7, 0x411657d8, 0x7c2bb717, 0xc33af868, 0x83486842, 0x3c59273d, 0x03ad4816, 0xbcbc0769, 0xfcce9743, 0x43dfd83c, 0x83264915, 0x3c37066a, 0x7c459640, 0xc354d93f, 0xfca0b614, 0x43b1f96b, 0x03c36941, 0xbcd2263e, 0x03710ab8, 0xbc6045c7, 0xfc12d5ed, 0x43039a92, 0x7cf7f5b9, 0xc3e6bac6, 0x83942aec, 0x3c856593, 0xfc7cf4ba, 0x436dbbc5, 0x031f2bef, 0xbc0e6490, 0x83fa0bbb, 0x3ceb44c4, 0x7c99d4ee, 0xc3889b91, 0x829ecc49, 0x3d8f8336, 0x7dfd131c, 0xc2ec5c63, 0xfd183348, 0x42097c37, 0x027bec1d, 0xbd6aa362, 0x7d93324b, 0xc2827d34, 0x82f0ed1e, 0x3de1a261, 0x0215cd4a, 0xbd048235, 0xfd76121f, 0x42675d60, 0xfdc471e6, 0x42d53e99, 0x02a7aeb3, 0xbdb6e1cc, 0x82428ee7, 0x3d53c198, 0x7d2151b2, 0xc2301ecd, 0x02c98fe4, 0xbdd8c09b, 0xfdaa50b1, 0x42bb1fce, 0x7d4f70e5, 0xc25e3f9a, 0x822cafb0, 0x3d3de0cf, 0xf8576e2e, 0x47462151, 0x0734b17b, 0xb825fe04, 0x87d1912f, 0x38c0de50, 0x78b24e7a, 0xc7a30105, 0x075a902c, 0xb84bdf53, 0xf8394f79, 0x47280006, 0x78dc6f2d, 0xc7cd2052, 0x87bfb078, 0x38aeff07, 0x870dd381, 0x381c9cfe, 0x786e0cd4, 0xc77f43ab, 0xf88b2c80, 0x479a63ff, 0x07e8f3d5, 0xb8f9bcaa, 0x78002d83, 0xc71162fc, 0x8763f2d6, 0x3872bda9, 0x0786d282, 0xb8979dfd, 0xf8e50dd7, 0x47f442a8, 0x06e21570, 0xb9f35a0f, 0xf981ca25, 0x4690855a, 0x7964ea71, 0xc675a50e, 0x86073524, 0x39167a5b, 0xf9efeb72, 0x46fea40d, 0x068c3427, 0xb99d7b58, 0x86691473, 0x39785b0c, 0x790acb26, 0xc61b8459, 0x79b8a8df, 0xc6a9e7a0, 0x86db778a, 0x39ca38f5, 0x063e57de, 0xb92f18a1, 0xf95d888b, 0x464cc7f4, 0x86b556dd, 0x39a419a2, 0x79d68988, 0xc6c7c6f7, 0xf933a9dc, 0x4622e6a3, 0x06507689, 0xb94139f6, 0x847cd939, 0x3b6d9646, 0x7b1f066c, 0xc40e4913, 0xfbfa2638, 0x44eb6947, 0x0499f96d, 0xbb88b612, 0x7b71273b, 0xc4606844, 0x8412f86e, 0x3b03b711, 0x04f7d83a, 0xbbe69745, 0xfb94076f, 0x44854810, 0xfb266496, 0x44372be9, 0x0445bbc3, 0xbb54f4bc, 0x84a09b97, 0x3bb1d4e8, 0x7bc344c2, 0xc4d20bbd, 0x042b9a94, 0xbb3ad5eb, 0xfb4845c1, 0x44590abe, 0x7bad6595, 0xc4bc2aea, 0x84cebac0, 0x3bdff5bf, 0x7ac9a267, 0xc5d8ed18, 0x85aa7d32, 0x3abb324d, 0x054f5d66, 0xba5e1219, 0xfa2c8233, 0x453dcd4c, 0x85c45c65, 0x3ad5131a, 0x7aa78330, 0xc5b6cc4f, 0xfa42a364, 0x4553ec1b, 0x05217c31, 0xba30334e, 0x05931fc8, 0xba8250b7, 0xfaf0c09d, 0x45e18fe2, 0x7a15e0c9, 0xc504afb6, 0x85763f9c, 0x3a6770e3, 0xfa9ee1ca, 0x458faeb5, 0x05fd3e9f, 0xbaec71e0, 0x85181ecb, 0x3a0951b4, 0x7a7bc19e, 0xc56a8ee1, ], [ 0x00000000, 0x71ef9df7, 0xe3df3bee, 0x9230a619, 0x46ff3677, 0x3710ab80, 0xa5200d99, 0xd4cf906e, 0x8dfe6cee, 0xfc11f119, 0x6e215700, 0x1fcecaf7, 0xcb015a99, 0xbaeec76e, 0x28de6177, 0x5931fc80, 0x9abd9877, 0xeb520580, 0x7962a399, 0x088d3e6e, 0xdc42ae00, 0xadad33f7, 0x3f9d95ee, 0x4e720819, 0x1743f499, 0x66ac696e, 0xf49ccf77, 0x85735280, 0x51bcc2ee, 0x20535f19, 0xb263f900, 0xc38c64f7, 0xb43a7145, 0xc5d5ecb2, 0x57e54aab, 0x260ad75c, 0xf2c54732, 0x832adac5, 0x111a7cdc, 0x60f5e12b, 0x39c41dab, 0x482b805c, 0xda1b2645, 0xabf4bbb2, 0x7f3b2bdc, 0x0ed4b62b, 0x9ce41032, 0xed0b8dc5, 0x2e87e932, 0x5f6874c5, 0xcd58d2dc, 0xbcb74f2b, 0x6878df45, 0x199742b2, 0x8ba7e4ab, 0xfa48795c, 0xa37985dc, 0xd296182b, 0x40a6be32, 0x314923c5, 0xe586b3ab, 0x94692e5c, 0x06598845, 0x77b615b2, 0xe935a321, 0x98da3ed6, 0x0aea98cf, 0x7b050538, 0xafca9556, 0xde2508a1, 0x4c15aeb8, 0x3dfa334f, 0x64cbcfcf, 0x15245238, 0x8714f421, 0xf6fb69d6, 0x2234f9b8, 0x53db644f, 0xc1ebc256, 0xb0045fa1, 0x73883b56, 0x0267a6a1, 0x905700b8, 0xe1b89d4f, 0x35770d21, 0x449890d6, 0xd6a836cf, 0xa747ab38, 0xfe7657b8, 0x8f99ca4f, 0x1da96c56, 0x6c46f1a1, 0xb88961cf, 0xc966fc38, 0x5b565a21, 0x2ab9c7d6, 0x5d0fd264, 0x2ce04f93, 0xbed0e98a, 0xcf3f747d, 0x1bf0e413, 0x6a1f79e4, 0xf82fdffd, 0x89c0420a, 0xd0f1be8a, 0xa11e237d, 0x332e8564, 0x42c11893, 0x960e88fd, 0xe7e1150a, 0x75d1b313, 0x043e2ee4, 0xc7b24a13, 0xb65dd7e4, 0x246d71fd, 0x5582ec0a, 0x814d7c64, 0xf0a2e193, 0x6292478a, 0x137dda7d, 0x4a4c26fd, 0x3ba3bb0a, 0xa9931d13, 0xd87c80e4, 0x0cb3108a, 0x7d5c8d7d, 0xef6c2b64, 0x9e83b693, 0x532a07e9, 0x22c59a1e, 0xb0f53c07, 0xc11aa1f0, 0x15d5319e, 0x643aac69, 0xf60a0a70, 0x87e59787, 0xded46b07, 0xaf3bf6f0, 0x3d0b50e9, 0x4ce4cd1e, 0x982b5d70, 0xe9c4c087, 0x7bf4669e, 0x0a1bfb69, 0xc9979f9e, 0xb8780269, 0x2a48a470, 0x5ba73987, 0x8f68a9e9, 0xfe87341e, 0x6cb79207, 0x1d580ff0, 0x4469f370, 0x35866e87, 0xa7b6c89e, 0xd6595569, 0x0296c507, 0x737958f0, 0xe149fee9, 0x90a6631e, 0xe71076ac, 0x96ffeb5b, 0x04cf4d42, 0x7520d0b5, 0xa1ef40db, 0xd000dd2c, 0x42307b35, 0x33dfe6c2, 0x6aee1a42, 0x1b0187b5, 0x893121ac, 0xf8debc5b, 0x2c112c35, 0x5dfeb1c2, 0xcfce17db, 0xbe218a2c, 0x7dadeedb, 0x0c42732c, 0x9e72d535, 0xef9d48c2, 0x3b52d8ac, 0x4abd455b, 0xd88de342, 0xa9627eb5, 0xf0538235, 0x81bc1fc2, 0x138cb9db, 0x6263242c, 0xb6acb442, 0xc74329b5, 0x55738fac, 0x249c125b, 0xba1fa4c8, 0xcbf0393f, 0x59c09f26, 0x282f02d1, 0xfce092bf, 0x8d0f0f48, 0x1f3fa951, 0x6ed034a6, 0x37e1c826, 0x460e55d1, 0xd43ef3c8, 0xa5d16e3f, 0x711efe51, 0x00f163a6, 0x92c1c5bf, 0xe32e5848, 0x20a23cbf, 0x514da148, 0xc37d0751, 0xb2929aa6, 0x665d0ac8, 0x17b2973f, 0x85823126, 0xf46dacd1, 0xad5c5051, 0xdcb3cda6, 0x4e836bbf, 0x3f6cf648, 0xeba36626, 0x9a4cfbd1, 0x087c5dc8, 0x7993c03f, 0x0e25d58d, 0x7fca487a, 0xedfaee63, 0x9c157394, 0x48dae3fa, 0x39357e0d, 0xab05d814, 0xdaea45e3, 0x83dbb963, 0xf2342494, 0x6004828d, 0x11eb1f7a, 0xc5248f14, 0xb4cb12e3, 0x26fbb4fa, 0x5714290d, 0x94984dfa, 0xe577d00d, 0x77477614, 0x06a8ebe3, 0xd2677b8d, 0xa388e67a, 0x31b84063, 0x4057dd94, 0x19662114, 0x6889bce3, 0xfab91afa, 0x8b56870d, 0x5f991763, 0x2e768a94, 0xbc462c8d, 0xcda9b17a, ], [ 0x00000000, 0xa6540fd2, 0xcde95e0f, 0x6bbd51dd, 0x1a93fdb5, 0xbcc7f267, 0xd77aa3ba, 0x712eac68, 0x3527fb6a, 0x9373f4b8, 0xf8cea565, 0x5e9aaab7, 0x2fb406df, 0x89e0090d, 0xe25d58d0, 0x44095702, 0x6a4ff6d4, 0xcc1bf906, 0xa7a6a8db, 0x01f2a709, 0x70dc0b61, 0xd68804b3, 0xbd35556e, 0x1b615abc, 0x5f680dbe, 0xf93c026c, 0x928153b1, 0x34d55c63, 0x45fbf00b, 0xe3afffd9, 0x8812ae04, 0x2e46a1d6, 0xd49feda8, 0x72cbe27a, 0x1976b3a7, 0xbf22bc75, 0xce0c101d, 0x68581fcf, 0x03e54e12, 0xa5b141c0, 0xe1b816c2, 0x47ec1910, 0x2c5148cd, 0x8a05471f, 0xfb2beb77, 0x5d7fe4a5, 0x36c2b578, 0x9096baaa, 0xbed01b7c, 0x188414ae, 0x73394573, 0xd56d4aa1, 0xa443e6c9, 0x0217e91b, 0x69aab8c6, 0xcffeb714, 0x8bf7e016, 0x2da3efc4, 0x461ebe19, 0xe04ab1cb, 0x91641da3, 0x37301271, 0x5c8d43ac, 0xfad94c7e, 0x287e9afb, 0x8e2a9529, 0xe597c4f4, 0x43c3cb26, 0x32ed674e, 0x94b9689c, 0xff043941, 0x59503693, 0x1d596191, 0xbb0d6e43, 0xd0b03f9e, 0x76e4304c, 0x07ca9c24, 0xa19e93f6, 0xca23c22b, 0x6c77cdf9, 0x42316c2f, 0xe46563fd, 0x8fd83220, 0x298c3df2, 0x58a2919a, 0xfef69e48, 0x954bcf95, 0x331fc047, 0x77169745, 0xd1429897, 0xbaffc94a, 0x1cabc698, 0x6d856af0, 0xcbd16522, 0xa06c34ff, 0x06383b2d, 0xfce17753, 0x5ab57881, 0x3108295c, 0x975c268e, 0xe6728ae6, 0x40268534, 0x2b9bd4e9, 0x8dcfdb3b, 0xc9c68c39, 0x6f9283eb, 0x042fd236, 0xa27bdde4, 0xd355718c, 0x75017e5e, 0x1ebc2f83, 0xb8e82051, 0x96ae8187, 0x30fa8e55, 0x5b47df88, 0xfd13d05a, 0x8c3d7c32, 0x2a6973e0, 0x41d4223d, 0xe7802def, 0xa3897aed, 0x05dd753f, 0x6e6024e2, 0xc8342b30, 0xb91a8758, 0x1f4e888a, 0x74f3d957, 0xd2a7d685, 0x50fd35f6, 0xf6a93a24, 0x9d146bf9, 0x3b40642b, 0x4a6ec843, 0xec3ac791, 0x8787964c, 0x21d3999e, 0x65dace9c, 0xc38ec14e, 0xa8339093, 0x0e679f41, 0x7f493329, 0xd91d3cfb, 0xb2a06d26, 0x14f462f4, 0x3ab2c322, 0x9ce6ccf0, 0xf75b9d2d, 0x510f92ff, 0x20213e97, 0x86753145, 0xedc86098, 0x4b9c6f4a, 0x0f953848, 0xa9c1379a, 0xc27c6647, 0x64286995, 0x1506c5fd, 0xb352ca2f, 0xd8ef9bf2, 0x7ebb9420, 0x8462d85e, 0x2236d78c, 0x498b8651, 0xefdf8983, 0x9ef125eb, 0x38a52a39, 0x53187be4, 0xf54c7436, 0xb1452334, 0x17112ce6, 0x7cac7d3b, 0xdaf872e9, 0xabd6de81, 0x0d82d153, 0x663f808e, 0xc06b8f5c, 0xee2d2e8a, 0x48792158, 0x23c47085, 0x85907f57, 0xf4bed33f, 0x52eadced, 0x39578d30, 0x9f0382e2, 0xdb0ad5e0, 0x7d5eda32, 0x16e38bef, 0xb0b7843d, 0xc1992855, 0x67cd2787, 0x0c70765a, 0xaa247988, 0x7883af0d, 0xded7a0df, 0xb56af102, 0x133efed0, 0x621052b8, 0xc4445d6a, 0xaff90cb7, 0x09ad0365, 0x4da45467, 0xebf05bb5, 0x804d0a68, 0x261905ba, 0x5737a9d2, 0xf163a600, 0x9adef7dd, 0x3c8af80f, 0x12cc59d9, 0xb498560b, 0xdf2507d6, 0x79710804, 0x085fa46c, 0xae0babbe, 0xc5b6fa63, 0x63e2f5b1, 0x27eba2b3, 0x81bfad61, 0xea02fcbc, 0x4c56f36e, 0x3d785f06, 0x9b2c50d4, 0xf0910109, 0x56c50edb, 0xac1c42a5, 0x0a484d77, 0x61f51caa, 0xc7a11378, 0xb68fbf10, 0x10dbb0c2, 0x7b66e11f, 0xdd32eecd, 0x993bb9cf, 0x3f6fb61d, 0x54d2e7c0, 0xf286e812, 0x83a8447a, 0x25fc4ba8, 0x4e411a75, 0xe81515a7, 0xc653b471, 0x6007bba3, 0x0bbaea7e, 0xadeee5ac, 0xdcc049c4, 0x7a944616, 0x112917cb, 0xb77d1819, 0xf3744f1b, 0x552040c9, 0x3e9d1114, 0x98c91ec6, 0xe9e7b2ae, 0x4fb3bd7c, 0x240eeca1, 0x825ae373, ], [ 0x00000000, 0xa1fa6bec, 0xc2b59673, 0x634ffd9f, 0x042a6d4d, 0xa5d006a1, 0xc69ffb3e, 0x676590d2, 0x0854da9a, 0xa9aeb176, 0xcae14ce9, 0x6b1b2705, 0x0c7eb7d7, 0xad84dc3b, 0xcecb21a4, 0x6f314a48, 0x10a9b534, 0xb153ded8, 0xd21c2347, 0x73e648ab, 0x1483d879, 0xb579b395, 0xd6364e0a, 0x77cc25e6, 0x18fd6fae, 0xb9070442, 0xda48f9dd, 0x7bb29231, 0x1cd702e3, 0xbd2d690f, 0xde629490, 0x7f98ff7c, 0x21536a68, 0x80a90184, 0xe3e6fc1b, 0x421c97f7, 0x25790725, 0x84836cc9, 0xe7cc9156, 0x4636faba, 0x2907b0f2, 0x88fddb1e, 0xebb22681, 0x4a484d6d, 0x2d2dddbf, 0x8cd7b653, 0xef984bcc, 0x4e622020, 0x31fadf5c, 0x9000b4b0, 0xf34f492f, 0x52b522c3, 0x35d0b211, 0x942ad9fd, 0xf7652462, 0x569f4f8e, 0x39ae05c6, 0x98546e2a, 0xfb1b93b5, 0x5ae1f859, 0x3d84688b, 0x9c7e0367, 0xff31fef8, 0x5ecb9514, 0x42a6d4d0, 0xe35cbf3c, 0x801342a3, 0x21e9294f, 0x468cb99d, 0xe776d271, 0x84392fee, 0x25c34402, 0x4af20e4a, 0xeb0865a6, 0x88479839, 0x29bdf3d5, 0x4ed86307, 0xef2208eb, 0x8c6df574, 0x2d979e98, 0x520f61e4, 0xf3f50a08, 0x90baf797, 0x31409c7b, 0x56250ca9, 0xf7df6745, 0x94909ada, 0x356af136, 0x5a5bbb7e, 0xfba1d092, 0x98ee2d0d, 0x391446e1, 0x5e71d633, 0xff8bbddf, 0x9cc44040, 0x3d3e2bac, 0x63f5beb8, 0xc20fd554, 0xa14028cb, 0x00ba4327, 0x67dfd3f5, 0xc625b819, 0xa56a4586, 0x04902e6a, 0x6ba16422, 0xca5b0fce, 0xa914f251, 0x08ee99bd, 0x6f8b096f, 0xce716283, 0xad3e9f1c, 0x0cc4f4f0, 0x735c0b8c, 0xd2a66060, 0xb1e99dff, 0x1013f613, 0x777666c1, 0xd68c0d2d, 0xb5c3f0b2, 0x14399b5e, 0x7b08d116, 0xdaf2bafa, 0xb9bd4765, 0x18472c89, 0x7f22bc5b, 0xded8d7b7, 0xbd972a28, 0x1c6d41c4, 0x854da9a0, 0x24b7c24c, 0x47f83fd3, 0xe602543f, 0x8167c4ed, 0x209daf01, 0x43d2529e, 0xe2283972, 0x8d19733a, 0x2ce318d6, 0x4face549, 0xee568ea5, 0x89331e77, 0x28c9759b, 0x4b868804, 0xea7ce3e8, 0x95e41c94, 0x341e7778, 0x57518ae7, 0xf6abe10b, 0x91ce71d9, 0x30341a35, 0x537be7aa, 0xf2818c46, 0x9db0c60e, 0x3c4aade2, 0x5f05507d, 0xfeff3b91, 0x999aab43, 0x3860c0af, 0x5b2f3d30, 0xfad556dc, 0xa41ec3c8, 0x05e4a824, 0x66ab55bb, 0xc7513e57, 0xa034ae85, 0x01cec569, 0x628138f6, 0xc37b531a, 0xac4a1952, 0x0db072be, 0x6eff8f21, 0xcf05e4cd, 0xa860741f, 0x099a1ff3, 0x6ad5e26c, 0xcb2f8980, 0xb4b776fc, 0x154d1d10, 0x7602e08f, 0xd7f88b63, 0xb09d1bb1, 0x1167705d, 0x72288dc2, 0xd3d2e62e, 0xbce3ac66, 0x1d19c78a, 0x7e563a15, 0xdfac51f9, 0xb8c9c12b, 0x1933aac7, 0x7a7c5758, 0xdb863cb4, 0xc7eb7d70, 0x6611169c, 0x055eeb03, 0xa4a480ef, 0xc3c1103d, 0x623b7bd1, 0x0174864e, 0xa08eeda2, 0xcfbfa7ea, 0x6e45cc06, 0x0d0a3199, 0xacf05a75, 0xcb95caa7, 0x6a6fa14b, 0x09205cd4, 0xa8da3738, 0xd742c844, 0x76b8a3a8, 0x15f75e37, 0xb40d35db, 0xd368a509, 0x7292cee5, 0x11dd337a, 0xb0275896, 0xdf1612de, 0x7eec7932, 0x1da384ad, 0xbc59ef41, 0xdb3c7f93, 0x7ac6147f, 0x1989e9e0, 0xb873820c, 0xe6b81718, 0x47427cf4, 0x240d816b, 0x85f7ea87, 0xe2927a55, 0x436811b9, 0x2027ec26, 0x81dd87ca, 0xeeeccd82, 0x4f16a66e, 0x2c595bf1, 0x8da3301d, 0xeac6a0cf, 0x4b3ccb23, 0x287336bc, 0x89895d50, 0xf611a22c, 0x57ebc9c0, 0x34a4345f, 0x955e5fb3, 0xf23bcf61, 0x53c1a48d, 0x308e5912, 0x917432fe, 0xfe4578b6, 0x5fbf135a, 0x3cf0eec5, 0x9d0a8529, 0xfa6f15fb, 0x5b957e17, 0x38da8388, 0x9920e864, ], [ 0x00000000, 0x8bda12eb, 0x96f5647d, 0x1d2f7696, 0xacab8951, 0x27719bba, 0x3a5eed2c, 0xb184ffc7, 0xd8165309, 0x53cc41e2, 0x4ee33774, 0xc539259f, 0x74bdda58, 0xff67c8b3, 0xe248be25, 0x6992acce, 0x316de7b9, 0xbab7f552, 0xa79883c4, 0x2c42912f, 0x9dc66ee8, 0x161c7c03, 0x0b330a95, 0x80e9187e, 0xe97bb4b0, 0x62a1a65b, 0x7f8ed0cd, 0xf454c226, 0x45d03de1, 0xce0a2f0a, 0xd325599c, 0x58ff4b77, 0x62dbcf72, 0xe901dd99, 0xf42eab0f, 0x7ff4b9e4, 0xce704623, 0x45aa54c8, 0x5885225e, 0xd35f30b5, 0xbacd9c7b, 0x31178e90, 0x2c38f806, 0xa7e2eaed, 0x1666152a, 0x9dbc07c1, 0x80937157, 0x0b4963bc, 0x53b628cb, 0xd86c3a20, 0xc5434cb6, 0x4e995e5d, 0xff1da19a, 0x74c7b371, 0x69e8c5e7, 0xe232d70c, 0x8ba07bc2, 0x007a6929, 0x1d551fbf, 0x968f0d54, 0x270bf293, 0xacd1e078, 0xb1fe96ee, 0x3a248405, 0xc5b79ee4, 0x4e6d8c0f, 0x5342fa99, 0xd898e872, 0x691c17b5, 0xe2c6055e, 0xffe973c8, 0x74336123, 0x1da1cded, 0x967bdf06, 0x8b54a990, 0x008ebb7b, 0xb10a44bc, 0x3ad05657, 0x27ff20c1, 0xac25322a, 0xf4da795d, 0x7f006bb6, 0x622f1d20, 0xe9f50fcb, 0x5871f00c, 0xd3abe2e7, 0xce849471, 0x455e869a, 0x2ccc2a54, 0xa71638bf, 0xba394e29, 0x31e35cc2, 0x8067a305, 0x0bbdb1ee, 0x1692c778, 0x9d48d593, 0xa76c5196, 0x2cb6437d, 0x319935eb, 0xba432700, 0x0bc7d8c7, 0x801dca2c, 0x9d32bcba, 0x16e8ae51, 0x7f7a029f, 0xf4a01074, 0xe98f66e2, 0x62557409, 0xd3d18bce, 0x580b9925, 0x4524efb3, 0xcefefd58, 0x9601b62f, 0x1ddba4c4, 0x00f4d252, 0x8b2ec0b9, 0x3aaa3f7e, 0xb1702d95, 0xac5f5b03, 0x278549e8, 0x4e17e526, 0xc5cdf7cd, 0xd8e2815b, 0x533893b0, 0xe2bc6c77, 0x69667e9c, 0x7449080a, 0xff931ae1, 0x0a2e7c63, 0x81f46e88, 0x9cdb181e, 0x17010af5, 0xa685f532, 0x2d5fe7d9, 0x3070914f, 0xbbaa83a4, 0xd2382f6a, 0x59e23d81, 0x44cd4b17, 0xcf1759fc, 0x7e93a63b, 0xf549b4d0, 0xe866c246, 0x63bcd0ad, 0x3b439bda, 0xb0998931, 0xadb6ffa7, 0x266ced4c, 0x97e8128b, 0x1c320060, 0x011d76f6, 0x8ac7641d, 0xe355c8d3, 0x688fda38, 0x75a0acae, 0xfe7abe45, 0x4ffe4182, 0xc4245369, 0xd90b25ff, 0x52d13714, 0x68f5b311, 0xe32fa1fa, 0xfe00d76c, 0x75dac587, 0xc45e3a40, 0x4f8428ab, 0x52ab5e3d, 0xd9714cd6, 0xb0e3e018, 0x3b39f2f3, 0x26168465, 0xadcc968e, 0x1c486949, 0x97927ba2, 0x8abd0d34, 0x01671fdf, 0x599854a8, 0xd2424643, 0xcf6d30d5, 0x44b7223e, 0xf533ddf9, 0x7ee9cf12, 0x63c6b984, 0xe81cab6f, 0x818e07a1, 0x0a54154a, 0x177b63dc, 0x9ca17137, 0x2d258ef0, 0xa6ff9c1b, 0xbbd0ea8d, 0x300af866, 0xcf99e287, 0x4443f06c, 0x596c86fa, 0xd2b69411, 0x63326bd6, 0xe8e8793d, 0xf5c70fab, 0x7e1d1d40, 0x178fb18e, 0x9c55a365, 0x817ad5f3, 0x0aa0c718, 0xbb2438df, 0x30fe2a34, 0x2dd15ca2, 0xa60b4e49, 0xfef4053e, 0x752e17d5, 0x68016143, 0xe3db73a8, 0x525f8c6f, 0xd9859e84, 0xc4aae812, 0x4f70faf9, 0x26e25637, 0xad3844dc, 0xb017324a, 0x3bcd20a1, 0x8a49df66, 0x0193cd8d, 0x1cbcbb1b, 0x9766a9f0, 0xad422df5, 0x26983f1e, 0x3bb74988, 0xb06d5b63, 0x01e9a4a4, 0x8a33b64f, 0x971cc0d9, 0x1cc6d232, 0x75547efc, 0xfe8e6c17, 0xe3a11a81, 0x687b086a, 0xd9fff7ad, 0x5225e546, 0x4f0a93d0, 0xc4d0813b, 0x9c2fca4c, 0x17f5d8a7, 0x0adaae31, 0x8100bcda, 0x3084431d, 0xbb5e51f6, 0xa6712760, 0x2dab358b, 0x44399945, 0xcfe38bae, 0xd2ccfd38, 0x5916efd3, 0xe8921014, 0x634802ff, 0x7e677469, 0xf5bd6682, ], [ 0x00000000, 0x145cf8c6, 0x28b9f18c, 0x3ce5094a, 0x5173e318, 0x452f1bde, 0x79ca1294, 0x6d96ea52, 0xa2e7c630, 0xb6bb3ef6, 0x8a5e37bc, 0x9e02cf7a, 0xf3942528, 0xe7c8ddee, 0xdb2dd4a4, 0xcf712c62, 0xc48ecdcb, 0xd0d2350d, 0xec373c47, 0xf86bc481, 0x95fd2ed3, 0x81a1d615, 0xbd44df5f, 0xa9182799, 0x66690bfb, 0x7235f33d, 0x4ed0fa77, 0x5a8c02b1, 0x371ae8e3, 0x23461025, 0x1fa3196f, 0x0bffe1a9, 0x085cda3d, 0x1c0022fb, 0x20e52bb1, 0x34b9d377, 0x592f3925, 0x4d73c1e3, 0x7196c8a9, 0x65ca306f, 0xaabb1c0d, 0xbee7e4cb, 0x8202ed81, 0x965e1547, 0xfbc8ff15, 0xef9407d3, 0xd3710e99, 0xc72df65f, 0xccd217f6, 0xd88eef30, 0xe46be67a, 0xf0371ebc, 0x9da1f4ee, 0x89fd0c28, 0xb5180562, 0xa144fda4, 0x6e35d1c6, 0x7a692900, 0x468c204a, 0x52d0d88c, 0x3f4632de, 0x2b1aca18, 0x17ffc352, 0x03a33b94, 0x10b9b47a, 0x04e54cbc, 0x380045f6, 0x2c5cbd30, 0x41ca5762, 0x5596afa4, 0x6973a6ee, 0x7d2f5e28, 0xb25e724a, 0xa6028a8c, 0x9ae783c6, 0x8ebb7b00, 0xe32d9152, 0xf7716994, 0xcb9460de, 0xdfc89818, 0xd43779b1, 0xc06b8177, 0xfc8e883d, 0xe8d270fb, 0x85449aa9, 0x9118626f, 0xadfd6b25, 0xb9a193e3, 0x76d0bf81, 0x628c4747, 0x5e694e0d, 0x4a35b6cb, 0x27a35c99, 0x33ffa45f, 0x0f1aad15, 0x1b4655d3, 0x18e56e47, 0x0cb99681, 0x305c9fcb, 0x2400670d, 0x49968d5f, 0x5dca7599, 0x612f7cd3, 0x75738415, 0xba02a877, 0xae5e50b1, 0x92bb59fb, 0x86e7a13d, 0xeb714b6f, 0xff2db3a9, 0xc3c8bae3, 0xd7944225, 0xdc6ba38c, 0xc8375b4a, 0xf4d25200, 0xe08eaac6, 0x8d184094, 0x9944b852, 0xa5a1b118, 0xb1fd49de, 0x7e8c65bc, 0x6ad09d7a, 0x56359430, 0x42696cf6, 0x2fff86a4, 0x3ba37e62, 0x07467728, 0x131a8fee, 0x217368f4, 0x352f9032, 0x09ca9978, 0x1d9661be, 0x70008bec, 0x645c732a, 0x58b97a60, 0x4ce582a6, 0x8394aec4, 0x97c85602, 0xab2d5f48, 0xbf71a78e, 0xd2e74ddc, 0xc6bbb51a, 0xfa5ebc50, 0xee024496, 0xe5fda53f, 0xf1a15df9, 0xcd4454b3, 0xd918ac75, 0xb48e4627, 0xa0d2bee1, 0x9c37b7ab, 0x886b4f6d, 0x471a630f, 0x53469bc9, 0x6fa39283, 0x7bff6a45, 0x16698017, 0x023578d1, 0x3ed0719b, 0x2a8c895d, 0x292fb2c9, 0x3d734a0f, 0x01964345, 0x15cabb83, 0x785c51d1, 0x6c00a917, 0x50e5a05d, 0x44b9589b, 0x8bc874f9, 0x9f948c3f, 0xa3718575, 0xb72d7db3, 0xdabb97e1, 0xcee76f27, 0xf202666d, 0xe65e9eab, 0xeda17f02, 0xf9fd87c4, 0xc5188e8e, 0xd1447648, 0xbcd29c1a, 0xa88e64dc, 0x946b6d96, 0x80379550, 0x4f46b932, 0x5b1a41f4, 0x67ff48be, 0x73a3b078, 0x1e355a2a, 0x0a69a2ec, 0x368caba6, 0x22d05360, 0x31cadc8e, 0x25962448, 0x19732d02, 0x0d2fd5c4, 0x60b93f96, 0x74e5c750, 0x4800ce1a, 0x5c5c36dc, 0x932d1abe, 0x8771e278, 0xbb94eb32, 0xafc813f4, 0xc25ef9a6, 0xd6020160, 0xeae7082a, 0xfebbf0ec, 0xf5441145, 0xe118e983, 0xddfde0c9, 0xc9a1180f, 0xa437f25d, 0xb06b0a9b, 0x8c8e03d1, 0x98d2fb17, 0x57a3d775, 0x43ff2fb3, 0x7f1a26f9, 0x6b46de3f, 0x06d0346d, 0x128cccab, 0x2e69c5e1, 0x3a353d27, 0x399606b3, 0x2dcafe75, 0x112ff73f, 0x05730ff9, 0x68e5e5ab, 0x7cb91d6d, 0x405c1427, 0x5400ece1, 0x9b71c083, 0x8f2d3845, 0xb3c8310f, 0xa794c9c9, 0xca02239b, 0xde5edb5d, 0xe2bbd217, 0xf6e72ad1, 0xfd18cb78, 0xe94433be, 0xd5a13af4, 0xc1fdc232, 0xac6b2860, 0xb837d0a6, 0x84d2d9ec, 0x908e212a, 0x5fff0d48, 0x4ba3f58e, 0x7746fcc4, 0x631a0402, 0x0e8cee50, 0x1ad01696, 0x26351fdc, 0x3269e71a, ], [ 0x00000000, 0x42e6d1e8, 0x85cda3d0, 0xc72b7238, 0x8ada060b, 0xc83cd7e3, 0x0f17a5db, 0x4df17433, 0x94f54dbd, 0xd6139c55, 0x1138ee6d, 0x53de3f85, 0x1e2f4bb6, 0x5cc99a5e, 0x9be2e866, 0xd904398e, 0xa8abdad1, 0xea4d0b39, 0x2d667901, 0x6f80a8e9, 0x2271dcda, 0x60970d32, 0xa7bc7f0a, 0xe55aaee2, 0x3c5e976c, 0x7eb84684, 0xb99334bc, 0xfb75e554, 0xb6849167, 0xf462408f, 0x334932b7, 0x71afe35f, 0xd016f409, 0x92f025e1, 0x55db57d9, 0x173d8631, 0x5accf202, 0x182a23ea, 0xdf0151d2, 0x9de7803a, 0x44e3b9b4, 0x0605685c, 0xc12e1a64, 0x83c8cb8c, 0xce39bfbf, 0x8cdf6e57, 0x4bf41c6f, 0x0912cd87, 0x78bd2ed8, 0x3a5bff30, 0xfd708d08, 0xbf965ce0, 0xf26728d3, 0xb081f93b, 0x77aa8b03, 0x354c5aeb, 0xec486365, 0xaeaeb28d, 0x6985c0b5, 0x2b63115d, 0x6692656e, 0x2474b486, 0xe35fc6be, 0xa1b91756, 0x216ca9b9, 0x638a7851, 0xa4a10a69, 0xe647db81, 0xabb6afb2, 0xe9507e5a, 0x2e7b0c62, 0x6c9ddd8a, 0xb599e404, 0xf77f35ec, 0x305447d4, 0x72b2963c, 0x3f43e20f, 0x7da533e7, 0xba8e41df, 0xf8689037, 0x89c77368, 0xcb21a280, 0x0c0ad0b8, 0x4eec0150, 0x031d7563, 0x41fba48b, 0x86d0d6b3, 0xc436075b, 0x1d323ed5, 0x5fd4ef3d, 0x98ff9d05, 0xda194ced, 0x97e838de, 0xd50ee936, 0x12259b0e, 0x50c34ae6, 0xf17a5db0, 0xb39c8c58, 0x74b7fe60, 0x36512f88, 0x7ba05bbb, 0x39468a53, 0xfe6df86b, 0xbc8b2983, 0x658f100d, 0x2769c1e5, 0xe042b3dd, 0xa2a46235, 0xef551606, 0xadb3c7ee, 0x6a98b5d6, 0x287e643e, 0x59d18761, 0x1b375689, 0xdc1c24b1, 0x9efaf559, 0xd30b816a, 0x91ed5082, 0x56c622ba, 0x1420f352, 0xcd24cadc, 0x8fc21b34, 0x48e9690c, 0x0a0fb8e4, 0x47feccd7, 0x05181d3f, 0xc2336f07, 0x80d5beef, 0x42d95372, 0x003f829a, 0xc714f0a2, 0x85f2214a, 0xc8035579, 0x8ae58491, 0x4dcef6a9, 0x0f282741, 0xd62c1ecf, 0x94cacf27, 0x53e1bd1f, 0x11076cf7, 0x5cf618c4, 0x1e10c92c, 0xd93bbb14, 0x9bdd6afc, 0xea7289a3, 0xa894584b, 0x6fbf2a73, 0x2d59fb9b, 0x60a88fa8, 0x224e5e40, 0xe5652c78, 0xa783fd90, 0x7e87c41e, 0x3c6115f6, 0xfb4a67ce, 0xb9acb626, 0xf45dc215, 0xb6bb13fd, 0x719061c5, 0x3376b02d, 0x92cfa77b, 0xd0297693, 0x170204ab, 0x55e4d543, 0x1815a170, 0x5af37098, 0x9dd802a0, 0xdf3ed348, 0x063aeac6, 0x44dc3b2e, 0x83f74916, 0xc11198fe, 0x8ce0eccd, 0xce063d25, 0x092d4f1d, 0x4bcb9ef5, 0x3a647daa, 0x7882ac42, 0xbfa9de7a, 0xfd4f0f92, 0xb0be7ba1, 0xf258aa49, 0x3573d871, 0x77950999, 0xae913017, 0xec77e1ff, 0x2b5c93c7, 0x69ba422f, 0x244b361c, 0x66ade7f4, 0xa18695cc, 0xe3604424, 0x63b5facb, 0x21532b23, 0xe678591b, 0xa49e88f3, 0xe96ffcc0, 0xab892d28, 0x6ca25f10, 0x2e448ef8, 0xf740b776, 0xb5a6669e, 0x728d14a6, 0x306bc54e, 0x7d9ab17d, 0x3f7c6095, 0xf85712ad, 0xbab1c345, 0xcb1e201a, 0x89f8f1f2, 0x4ed383ca, 0x0c355222, 0x41c42611, 0x0322f7f9, 0xc40985c1, 0x86ef5429, 0x5feb6da7, 0x1d0dbc4f, 0xda26ce77, 0x98c01f9f, 0xd5316bac, 0x97d7ba44, 0x50fcc87c, 0x121a1994, 0xb3a30ec2, 0xf145df2a, 0x366ead12, 0x74887cfa, 0x397908c9, 0x7b9fd921, 0xbcb4ab19, 0xfe527af1, 0x2756437f, 0x65b09297, 0xa29be0af, 0xe07d3147, 0xad8c4574, 0xef6a949c, 0x2841e6a4, 0x6aa7374c, 0x1b08d413, 0x59ee05fb, 0x9ec577c3, 0xdc23a62b, 0x91d2d218, 0xd33403f0, 0x141f71c8, 0x56f9a020, 0x8ffd99ae, 0xcd1b4846, 0x0a303a7e, 0x48d6eb96, 0x05279fa5, 0x47c14e4d, 0x80ea3c75, 0xc20ced9d, ], ]; pub static CRC32_AUTOSAR_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0x30850ff5, 0x610a1fea, 0x518f101f, 0xc2143fd4, 0xf2913021, 0xa31e203e, 0x939b2fcb, 0x159615f7, 0x25131a02, 0x749c0a1d, 0x441905e8, 0xd7822a23, 0xe70725d6, 0xb68835c9, 0x860d3a3c, 0x2b2c2bee, 0x1ba9241b, 0x4a263404, 0x7aa33bf1, 0xe938143a, 0xd9bd1bcf, 0x88320bd0, 0xb8b70425, 0x3eba3e19, 0x0e3f31ec, 0x5fb021f3, 0x6f352e06, 0xfcae01cd, 0xcc2b0e38, 0x9da41e27, 0xad2111d2, 0x565857dc, 0x66dd5829, 0x37524836, 0x07d747c3, 0x944c6808, 0xa4c967fd, 0xf54677e2, 0xc5c37817, 0x43ce422b, 0x734b4dde, 0x22c45dc1, 0x12415234, 0x81da7dff, 0xb15f720a, 0xe0d06215, 0xd0556de0, 0x7d747c32, 0x4df173c7, 0x1c7e63d8, 0x2cfb6c2d, 0xbf6043e6, 0x8fe54c13, 0xde6a5c0c, 0xeeef53f9, 0x68e269c5, 0x58676630, 0x09e8762f, 0x396d79da, 0xaaf65611, 0x9a7359e4, 0xcbfc49fb, 0xfb79460e, 0xacb0afb8, 0x9c35a04d, 0xcdbab052, 0xfd3fbfa7, 0x6ea4906c, 0x5e219f99, 0x0fae8f86, 0x3f2b8073, 0xb926ba4f, 0x89a3b5ba, 0xd82ca5a5, 0xe8a9aa50, 0x7b32859b, 0x4bb78a6e, 0x1a389a71, 0x2abd9584, 0x879c8456, 0xb7198ba3, 0xe6969bbc, 0xd6139449, 0x4588bb82, 0x750db477, 0x2482a468, 0x1407ab9d, 0x920a91a1, 0xa28f9e54, 0xf3008e4b, 0xc38581be, 0x501eae75, 0x609ba180, 0x3114b19f, 0x0191be6a, 0xfae8f864, 0xca6df791, 0x9be2e78e, 0xab67e87b, 0x38fcc7b0, 0x0879c845, 0x59f6d85a, 0x6973d7af, 0xef7eed93, 0xdffbe266, 0x8e74f279, 0xbef1fd8c, 0x2d6ad247, 0x1defddb2, 0x4c60cdad, 0x7ce5c258, 0xd1c4d38a, 0xe141dc7f, 0xb0cecc60, 0x804bc395, 0x13d0ec5e, 0x2355e3ab, 0x72daf3b4, 0x425ffc41, 0xc452c67d, 0xf4d7c988, 0xa558d997, 0x95ddd662, 0x0646f9a9, 0x36c3f65c, 0x674ce643, 0x57c9e9b6, 0xc8df352f, 0xf85a3ada, 0xa9d52ac5, 0x99502530, 0x0acb0afb, 0x3a4e050e, 0x6bc11511, 0x5b441ae4, 0xdd4920d8, 0xedcc2f2d, 0xbc433f32, 0x8cc630c7, 0x1f5d1f0c, 0x2fd810f9, 0x7e5700e6, 0x4ed20f13, 0xe3f31ec1, 0xd3761134, 0x82f9012b, 0xb27c0ede, 0x21e72115, 0x11622ee0, 0x40ed3eff, 0x7068310a, 0xf6650b36, 0xc6e004c3, 0x976f14dc, 0xa7ea1b29, 0x347134e2, 0x04f43b17, 0x557b2b08, 0x65fe24fd, 0x9e8762f3, 0xae026d06, 0xff8d7d19, 0xcf0872ec, 0x5c935d27, 0x6c1652d2, 0x3d9942cd, 0x0d1c4d38, 0x8b117704, 0xbb9478f1, 0xea1b68ee, 0xda9e671b, 0x490548d0, 0x79804725, 0x280f573a, 0x188a58cf, 0xb5ab491d, 0x852e46e8, 0xd4a156f7, 0xe4245902, 0x77bf76c9, 0x473a793c, 0x16b56923, 0x263066d6, 0xa03d5cea, 0x90b8531f, 0xc1374300, 0xf1b24cf5, 0x6229633e, 0x52ac6ccb, 0x03237cd4, 0x33a67321, 0x646f9a97, 0x54ea9562, 0x0565857d, 0x35e08a88, 0xa67ba543, 0x96feaab6, 0xc771baa9, 0xf7f4b55c, 0x71f98f60, 0x417c8095, 0x10f3908a, 0x20769f7f, 0xb3edb0b4, 0x8368bf41, 0xd2e7af5e, 0xe262a0ab, 0x4f43b179, 0x7fc6be8c, 0x2e49ae93, 0x1ecca166, 0x8d578ead, 0xbdd28158, 0xec5d9147, 0xdcd89eb2, 0x5ad5a48e, 0x6a50ab7b, 0x3bdfbb64, 0x0b5ab491, 0x98c19b5a, 0xa84494af, 0xf9cb84b0, 0xc94e8b45, 0x3237cd4b, 0x02b2c2be, 0x533dd2a1, 0x63b8dd54, 0xf023f29f, 0xc0a6fd6a, 0x9129ed75, 0xa1ace280, 0x27a1d8bc, 0x1724d749, 0x46abc756, 0x762ec8a3, 0xe5b5e768, 0xd530e89d, 0x84bff882, 0xb43af777, 0x191be6a5, 0x299ee950, 0x7811f94f, 0x4894f6ba, 0xdb0fd971, 0xeb8ad684, 0xba05c69b, 0x8a80c96e, 0x0c8df352, 0x3c08fca7, 0x6d87ecb8, 0x5d02e34d, 0xce99cc86, 0xfe1cc373, 0xaf93d36c, 0x9f16dc99, ], [ 0x00000000, 0xebba538b, 0x46cacd49, 0xad709ec2, 0x8d959a92, 0x662fc919, 0xcb5f57db, 0x20e50450, 0x8a955f7b, 0x612f0cf0, 0xcc5f9232, 0x27e5c1b9, 0x0700c5e9, 0xecba9662, 0x41ca08a0, 0xaa705b2b, 0x8494d4a9, 0x6f2e8722, 0xc25e19e0, 0x29e44a6b, 0x09014e3b, 0xe2bb1db0, 0x4fcb8372, 0xa471d0f9, 0x0e018bd2, 0xe5bbd859, 0x48cb469b, 0xa3711510, 0x83941140, 0x682e42cb, 0xc55edc09, 0x2ee48f82, 0x9897c30d, 0x732d9086, 0xde5d0e44, 0x35e75dcf, 0x1502599f, 0xfeb80a14, 0x53c894d6, 0xb872c75d, 0x12029c76, 0xf9b8cffd, 0x54c8513f, 0xbf7202b4, 0x9f9706e4, 0x742d556f, 0xd95dcbad, 0x32e79826, 0x1c0317a4, 0xf7b9442f, 0x5ac9daed, 0xb1738966, 0x91968d36, 0x7a2cdebd, 0xd75c407f, 0x3ce613f4, 0x969648df, 0x7d2c1b54, 0xd05c8596, 0x3be6d61d, 0x1b03d24d, 0xf0b981c6, 0x5dc91f04, 0xb6734c8f, 0xa091ec45, 0x4b2bbfce, 0xe65b210c, 0x0de17287, 0x2d0476d7, 0xc6be255c, 0x6bcebb9e, 0x8074e815, 0x2a04b33e, 0xc1bee0b5, 0x6cce7e77, 0x87742dfc, 0xa79129ac, 0x4c2b7a27, 0xe15be4e5, 0x0ae1b76e, 0x240538ec, 0xcfbf6b67, 0x62cff5a5, 0x8975a62e, 0xa990a27e, 0x422af1f5, 0xef5a6f37, 0x04e03cbc, 0xae906797, 0x452a341c, 0xe85aaade, 0x03e0f955, 0x2305fd05, 0xc8bfae8e, 0x65cf304c, 0x8e7563c7, 0x38062f48, 0xd3bc7cc3, 0x7ecce201, 0x9576b18a, 0xb593b5da, 0x5e29e651, 0xf3597893, 0x18e32b18, 0xb2937033, 0x592923b8, 0xf459bd7a, 0x1fe3eef1, 0x3f06eaa1, 0xd4bcb92a, 0x79cc27e8, 0x92767463, 0xbc92fbe1, 0x5728a86a, 0xfa5836a8, 0x11e26523, 0x31076173, 0xdabd32f8, 0x77cdac3a, 0x9c77ffb1, 0x3607a49a, 0xddbdf711, 0x70cd69d3, 0x9b773a58, 0xbb923e08, 0x50286d83, 0xfd58f341, 0x16e2a0ca, 0xd09db2d5, 0x3b27e15e, 0x96577f9c, 0x7ded2c17, 0x5d082847, 0xb6b27bcc, 0x1bc2e50e, 0xf078b685, 0x5a08edae, 0xb1b2be25, 0x1cc220e7, 0xf778736c, 0xd79d773c, 0x3c2724b7, 0x9157ba75, 0x7aede9fe, 0x5409667c, 0xbfb335f7, 0x12c3ab35, 0xf979f8be, 0xd99cfcee, 0x3226af65, 0x9f5631a7, 0x74ec622c, 0xde9c3907, 0x35266a8c, 0x9856f44e, 0x73eca7c5, 0x5309a395, 0xb8b3f01e, 0x15c36edc, 0xfe793d57, 0x480a71d8, 0xa3b02253, 0x0ec0bc91, 0xe57aef1a, 0xc59feb4a, 0x2e25b8c1, 0x83552603, 0x68ef7588, 0xc29f2ea3, 0x29257d28, 0x8455e3ea, 0x6fefb061, 0x4f0ab431, 0xa4b0e7ba, 0x09c07978, 0xe27a2af3, 0xcc9ea571, 0x2724f6fa, 0x8a546838, 0x61ee3bb3, 0x410b3fe3, 0xaab16c68, 0x07c1f2aa, 0xec7ba121, 0x460bfa0a, 0xadb1a981, 0x00c13743, 0xeb7b64c8, 0xcb9e6098, 0x20243313, 0x8d54add1, 0x66eefe5a, 0x700c5e90, 0x9bb60d1b, 0x36c693d9, 0xdd7cc052, 0xfd99c402, 0x16239789, 0xbb53094b, 0x50e95ac0, 0xfa9901eb, 0x11235260, 0xbc53cca2, 0x57e99f29, 0x770c9b79, 0x9cb6c8f2, 0x31c65630, 0xda7c05bb, 0xf4988a39, 0x1f22d9b2, 0xb2524770, 0x59e814fb, 0x790d10ab, 0x92b74320, 0x3fc7dde2, 0xd47d8e69, 0x7e0dd542, 0x95b786c9, 0x38c7180b, 0xd37d4b80, 0xf3984fd0, 0x18221c5b, 0xb5528299, 0x5ee8d112, 0xe89b9d9d, 0x0321ce16, 0xae5150d4, 0x45eb035f, 0x650e070f, 0x8eb45484, 0x23c4ca46, 0xc87e99cd, 0x620ec2e6, 0x89b4916d, 0x24c40faf, 0xcf7e5c24, 0xef9b5874, 0x04210bff, 0xa951953d, 0x42ebc6b6, 0x6c0f4934, 0x87b51abf, 0x2ac5847d, 0xc17fd7f6, 0xe19ad3a6, 0x0a20802d, 0xa7501eef, 0x4cea4d64, 0xe69a164f, 0x0d2045c4, 0xa050db06, 0x4bea888d, 0x6b0f8cdd, 0x80b5df56, 0x2dc54194, 0xc67f121f, ], [ 0x00000000, 0x8c2d8a94, 0x89e57f77, 0x05c8f5e3, 0x827494b1, 0x0e591e25, 0x0b91ebc6, 0x87bc6152, 0x9557433d, 0x197ac9a9, 0x1cb23c4a, 0x909fb6de, 0x1723d78c, 0x9b0e5d18, 0x9ec6a8fb, 0x12eb226f, 0xbb10ec25, 0x373d66b1, 0x32f59352, 0xbed819c6, 0x39647894, 0xb549f200, 0xb08107e3, 0x3cac8d77, 0x2e47af18, 0xa26a258c, 0xa7a2d06f, 0x2b8f5afb, 0xac333ba9, 0x201eb13d, 0x25d644de, 0xa9fbce4a, 0xe79fb215, 0x6bb23881, 0x6e7acd62, 0xe25747f6, 0x65eb26a4, 0xe9c6ac30, 0xec0e59d3, 0x6023d347, 0x72c8f128, 0xfee57bbc, 0xfb2d8e5f, 0x770004cb, 0xf0bc6599, 0x7c91ef0d, 0x79591aee, 0xf574907a, 0x5c8f5e30, 0xd0a2d4a4, 0xd56a2147, 0x5947abd3, 0xdefbca81, 0x52d64015, 0x571eb5f6, 0xdb333f62, 0xc9d81d0d, 0x45f59799, 0x403d627a, 0xcc10e8ee, 0x4bac89bc, 0xc7810328, 0xc249f6cb, 0x4e647c5f, 0x5e810e75, 0xd2ac84e1, 0xd7647102, 0x5b49fb96, 0xdcf59ac4, 0x50d81050, 0x5510e5b3, 0xd93d6f27, 0xcbd64d48, 0x47fbc7dc, 0x4233323f, 0xce1eb8ab, 0x49a2d9f9, 0xc58f536d, 0xc047a68e, 0x4c6a2c1a, 0xe591e250, 0x69bc68c4, 0x6c749d27, 0xe05917b3, 0x67e576e1, 0xebc8fc75, 0xee000996, 0x622d8302, 0x70c6a16d, 0xfceb2bf9, 0xf923de1a, 0x750e548e, 0xf2b235dc, 0x7e9fbf48, 0x7b574aab, 0xf77ac03f, 0xb91ebc60, 0x353336f4, 0x30fbc317, 0xbcd64983, 0x3b6a28d1, 0xb747a245, 0xb28f57a6, 0x3ea2dd32, 0x2c49ff5d, 0xa06475c9, 0xa5ac802a, 0x29810abe, 0xae3d6bec, 0x2210e178, 0x27d8149b, 0xabf59e0f, 0x020e5045, 0x8e23dad1, 0x8beb2f32, 0x07c6a5a6, 0x807ac4f4, 0x0c574e60, 0x099fbb83, 0x85b23117, 0x97591378, 0x1b7499ec, 0x1ebc6c0f, 0x9291e69b, 0x152d87c9, 0x99000d5d, 0x9cc8f8be, 0x10e5722a, 0xbd021cea, 0x312f967e, 0x34e7639d, 0xb8cae909, 0x3f76885b, 0xb35b02cf, 0xb693f72c, 0x3abe7db8, 0x28555fd7, 0xa478d543, 0xa1b020a0, 0x2d9daa34, 0xaa21cb66, 0x260c41f2, 0x23c4b411, 0xafe93e85, 0x0612f0cf, 0x8a3f7a5b, 0x8ff78fb8, 0x03da052c, 0x8466647e, 0x084beeea, 0x0d831b09, 0x81ae919d, 0x9345b3f2, 0x1f683966, 0x1aa0cc85, 0x968d4611, 0x11312743, 0x9d1cadd7, 0x98d45834, 0x14f9d2a0, 0x5a9daeff, 0xd6b0246b, 0xd378d188, 0x5f555b1c, 0xd8e93a4e, 0x54c4b0da, 0x510c4539, 0xdd21cfad, 0xcfcaedc2, 0x43e76756, 0x462f92b5, 0xca021821, 0x4dbe7973, 0xc193f3e7, 0xc45b0604, 0x48768c90, 0xe18d42da, 0x6da0c84e, 0x68683dad, 0xe445b739, 0x63f9d66b, 0xefd45cff, 0xea1ca91c, 0x66312388, 0x74da01e7, 0xf8f78b73, 0xfd3f7e90, 0x7112f404, 0xf6ae9556, 0x7a831fc2, 0x7f4bea21, 0xf36660b5, 0xe383129f, 0x6fae980b, 0x6a666de8, 0xe64be77c, 0x61f7862e, 0xedda0cba, 0xe812f959, 0x643f73cd, 0x76d451a2, 0xfaf9db36, 0xff312ed5, 0x731ca441, 0xf4a0c513, 0x788d4f87, 0x7d45ba64, 0xf16830f0, 0x5893feba, 0xd4be742e, 0xd17681cd, 0x5d5b0b59, 0xdae76a0b, 0x56cae09f, 0x5302157c, 0xdf2f9fe8, 0xcdc4bd87, 0x41e93713, 0x4421c2f0, 0xc80c4864, 0x4fb02936, 0xc39da3a2, 0xc6555641, 0x4a78dcd5, 0x041ca08a, 0x88312a1e, 0x8df9dffd, 0x01d45569, 0x8668343b, 0x0a45beaf, 0x0f8d4b4c, 0x83a0c1d8, 0x914be3b7, 0x1d666923, 0x18ae9cc0, 0x94831654, 0x133f7706, 0x9f12fd92, 0x9ada0871, 0x16f782e5, 0xbf0c4caf, 0x3321c63b, 0x36e933d8, 0xbac4b94c, 0x3d78d81e, 0xb155528a, 0xb49da769, 0x38b02dfd, 0x2a5b0f92, 0xa6768506, 0xa3be70e5, 0x2f93fa71, 0xa82f9b23, 0x240211b7, 0x21cae454, 0xade76ec0, ], [ 0x00000000, 0x216b0c9f, 0x42d6193e, 0x63bd15a1, 0x85ac327c, 0xa4c73ee3, 0xc77a2b42, 0xe61127dd, 0x9ae60ea7, 0xbb8d0238, 0xd8301799, 0xf95b1b06, 0x1f4a3cdb, 0x3e213044, 0x5d9c25e5, 0x7cf7297a, 0xa4727711, 0x85197b8e, 0xe6a46e2f, 0xc7cf62b0, 0x21de456d, 0x00b549f2, 0x63085c53, 0x426350cc, 0x3e9479b6, 0x1fff7529, 0x7c426088, 0x5d296c17, 0xbb384bca, 0x9a534755, 0xf9ee52f4, 0xd8855e6b, 0xd95a847d, 0xf83188e2, 0x9b8c9d43, 0xbae791dc, 0x5cf6b601, 0x7d9dba9e, 0x1e20af3f, 0x3f4ba3a0, 0x43bc8ada, 0x62d78645, 0x016a93e4, 0x20019f7b, 0xc610b8a6, 0xe77bb439, 0x84c6a198, 0xa5adad07, 0x7d28f36c, 0x5c43fff3, 0x3ffeea52, 0x1e95e6cd, 0xf884c110, 0xd9efcd8f, 0xba52d82e, 0x9b39d4b1, 0xe7cefdcb, 0xc6a5f154, 0xa518e4f5, 0x8473e86a, 0x6262cfb7, 0x4309c328, 0x20b4d689, 0x01dfda16, 0x230b62a5, 0x02606e3a, 0x61dd7b9b, 0x40b67704, 0xa6a750d9, 0x87cc5c46, 0xe47149e7, 0xc51a4578, 0xb9ed6c02, 0x9886609d, 0xfb3b753c, 0xda5079a3, 0x3c415e7e, 0x1d2a52e1, 0x7e974740, 0x5ffc4bdf, 0x877915b4, 0xa612192b, 0xc5af0c8a, 0xe4c40015, 0x02d527c8, 0x23be2b57, 0x40033ef6, 0x61683269, 0x1d9f1b13, 0x3cf4178c, 0x5f49022d, 0x7e220eb2, 0x9833296f, 0xb95825f0, 0xdae53051, 0xfb8e3cce, 0xfa51e6d8, 0xdb3aea47, 0xb887ffe6, 0x99ecf379, 0x7ffdd4a4, 0x5e96d83b, 0x3d2bcd9a, 0x1c40c105, 0x60b7e87f, 0x41dce4e0, 0x2261f141, 0x030afdde, 0xe51bda03, 0xc470d69c, 0xa7cdc33d, 0x86a6cfa2, 0x5e2391c9, 0x7f489d56, 0x1cf588f7, 0x3d9e8468, 0xdb8fa3b5, 0xfae4af2a, 0x9959ba8b, 0xb832b614, 0xc4c59f6e, 0xe5ae93f1, 0x86138650, 0xa7788acf, 0x4169ad12, 0x6002a18d, 0x03bfb42c, 0x22d4b8b3, 0x4616c54a, 0x677dc9d5, 0x04c0dc74, 0x25abd0eb, 0xc3baf736, 0xe2d1fba9, 0x816cee08, 0xa007e297, 0xdcf0cbed, 0xfd9bc772, 0x9e26d2d3, 0xbf4dde4c, 0x595cf991, 0x7837f50e, 0x1b8ae0af, 0x3ae1ec30, 0xe264b25b, 0xc30fbec4, 0xa0b2ab65, 0x81d9a7fa, 0x67c88027, 0x46a38cb8, 0x251e9919, 0x04759586, 0x7882bcfc, 0x59e9b063, 0x3a54a5c2, 0x1b3fa95d, 0xfd2e8e80, 0xdc45821f, 0xbff897be, 0x9e939b21, 0x9f4c4137, 0xbe274da8, 0xdd9a5809, 0xfcf15496, 0x1ae0734b, 0x3b8b7fd4, 0x58366a75, 0x795d66ea, 0x05aa4f90, 0x24c1430f, 0x477c56ae, 0x66175a31, 0x80067dec, 0xa16d7173, 0xc2d064d2, 0xe3bb684d, 0x3b3e3626, 0x1a553ab9, 0x79e82f18, 0x58832387, 0xbe92045a, 0x9ff908c5, 0xfc441d64, 0xdd2f11fb, 0xa1d83881, 0x80b3341e, 0xe30e21bf, 0xc2652d20, 0x24740afd, 0x051f0662, 0x66a213c3, 0x47c91f5c, 0x651da7ef, 0x4476ab70, 0x27cbbed1, 0x06a0b24e, 0xe0b19593, 0xc1da990c, 0xa2678cad, 0x830c8032, 0xfffba948, 0xde90a5d7, 0xbd2db076, 0x9c46bce9, 0x7a579b34, 0x5b3c97ab, 0x3881820a, 0x19ea8e95, 0xc16fd0fe, 0xe004dc61, 0x83b9c9c0, 0xa2d2c55f, 0x44c3e282, 0x65a8ee1d, 0x0615fbbc, 0x277ef723, 0x5b89de59, 0x7ae2d2c6, 0x195fc767, 0x3834cbf8, 0xde25ec25, 0xff4ee0ba, 0x9cf3f51b, 0xbd98f984, 0xbc472392, 0x9d2c2f0d, 0xfe913aac, 0xdffa3633, 0x39eb11ee, 0x18801d71, 0x7b3d08d0, 0x5a56044f, 0x26a12d35, 0x07ca21aa, 0x6477340b, 0x451c3894, 0xa30d1f49, 0x826613d6, 0xe1db0677, 0xc0b00ae8, 0x18355483, 0x395e581c, 0x5ae34dbd, 0x7b884122, 0x9d9966ff, 0xbcf26a60, 0xdf4f7fc1, 0xfe24735e, 0x82d35a24, 0xa3b856bb, 0xc005431a, 0xe16e4f85, 0x077f6858, 0x261464c7, 0x45a97166, 0x64c27df9, ], [ 0x00000000, 0x65df4ff1, 0xcbbe9fe2, 0xae61d013, 0x06c3559b, 0x631c1a6a, 0xcd7dca79, 0xa8a28588, 0x0d86ab36, 0x6859e4c7, 0xc63834d4, 0xa3e77b25, 0x0b45fead, 0x6e9ab15c, 0xc0fb614f, 0xa5242ebe, 0x1b0d566c, 0x7ed2199d, 0xd0b3c98e, 0xb56c867f, 0x1dce03f7, 0x78114c06, 0xd6709c15, 0xb3afd3e4, 0x168bfd5a, 0x7354b2ab, 0xdd3562b8, 0xb8ea2d49, 0x1048a8c1, 0x7597e730, 0xdbf63723, 0xbe2978d2, 0x361aacd8, 0x53c5e329, 0xfda4333a, 0x987b7ccb, 0x30d9f943, 0x5506b6b2, 0xfb6766a1, 0x9eb82950, 0x3b9c07ee, 0x5e43481f, 0xf022980c, 0x95fdd7fd, 0x3d5f5275, 0x58801d84, 0xf6e1cd97, 0x933e8266, 0x2d17fab4, 0x48c8b545, 0xe6a96556, 0x83762aa7, 0x2bd4af2f, 0x4e0be0de, 0xe06a30cd, 0x85b57f3c, 0x20915182, 0x454e1e73, 0xeb2fce60, 0x8ef08191, 0x26520419, 0x438d4be8, 0xedec9bfb, 0x8833d40a, 0x6c3559b0, 0x09ea1641, 0xa78bc652, 0xc25489a3, 0x6af60c2b, 0x0f2943da, 0xa14893c9, 0xc497dc38, 0x61b3f286, 0x046cbd77, 0xaa0d6d64, 0xcfd22295, 0x6770a71d, 0x02afe8ec, 0xacce38ff, 0xc911770e, 0x77380fdc, 0x12e7402d, 0xbc86903e, 0xd959dfcf, 0x71fb5a47, 0x142415b6, 0xba45c5a5, 0xdf9a8a54, 0x7abea4ea, 0x1f61eb1b, 0xb1003b08, 0xd4df74f9, 0x7c7df171, 0x19a2be80, 0xb7c36e93, 0xd21c2162, 0x5a2ff568, 0x3ff0ba99, 0x91916a8a, 0xf44e257b, 0x5ceca0f3, 0x3933ef02, 0x97523f11, 0xf28d70e0, 0x57a95e5e, 0x327611af, 0x9c17c1bc, 0xf9c88e4d, 0x516a0bc5, 0x34b54434, 0x9ad49427, 0xff0bdbd6, 0x4122a304, 0x24fdecf5, 0x8a9c3ce6, 0xef437317, 0x47e1f69f, 0x223eb96e, 0x8c5f697d, 0xe980268c, 0x4ca40832, 0x297b47c3, 0x871a97d0, 0xe2c5d821, 0x4a675da9, 0x2fb81258, 0x81d9c24b, 0xe4068dba, 0xd86ab360, 0xbdb5fc91, 0x13d42c82, 0x760b6373, 0xdea9e6fb, 0xbb76a90a, 0x15177919, 0x70c836e8, 0xd5ec1856, 0xb03357a7, 0x1e5287b4, 0x7b8dc845, 0xd32f4dcd, 0xb6f0023c, 0x1891d22f, 0x7d4e9dde, 0xc367e50c, 0xa6b8aafd, 0x08d97aee, 0x6d06351f, 0xc5a4b097, 0xa07bff66, 0x0e1a2f75, 0x6bc56084, 0xcee14e3a, 0xab3e01cb, 0x055fd1d8, 0x60809e29, 0xc8221ba1, 0xadfd5450, 0x039c8443, 0x6643cbb2, 0xee701fb8, 0x8baf5049, 0x25ce805a, 0x4011cfab, 0xe8b34a23, 0x8d6c05d2, 0x230dd5c1, 0x46d29a30, 0xe3f6b48e, 0x8629fb7f, 0x28482b6c, 0x4d97649d, 0xe535e115, 0x80eaaee4, 0x2e8b7ef7, 0x4b543106, 0xf57d49d4, 0x90a20625, 0x3ec3d636, 0x5b1c99c7, 0xf3be1c4f, 0x966153be, 0x380083ad, 0x5ddfcc5c, 0xf8fbe2e2, 0x9d24ad13, 0x33457d00, 0x569a32f1, 0xfe38b779, 0x9be7f888, 0x3586289b, 0x5059676a, 0xb45fead0, 0xd180a521, 0x7fe17532, 0x1a3e3ac3, 0xb29cbf4b, 0xd743f0ba, 0x792220a9, 0x1cfd6f58, 0xb9d941e6, 0xdc060e17, 0x7267de04, 0x17b891f5, 0xbf1a147d, 0xdac55b8c, 0x74a48b9f, 0x117bc46e, 0xaf52bcbc, 0xca8df34d, 0x64ec235e, 0x01336caf, 0xa991e927, 0xcc4ea6d6, 0x622f76c5, 0x07f03934, 0xa2d4178a, 0xc70b587b, 0x696a8868, 0x0cb5c799, 0xa4174211, 0xc1c80de0, 0x6fa9ddf3, 0x0a769202, 0x82454608, 0xe79a09f9, 0x49fbd9ea, 0x2c24961b, 0x84861393, 0xe1595c62, 0x4f388c71, 0x2ae7c380, 0x8fc3ed3e, 0xea1ca2cf, 0x447d72dc, 0x21a23d2d, 0x8900b8a5, 0xecdff754, 0x42be2747, 0x276168b6, 0x99481064, 0xfc975f95, 0x52f68f86, 0x3729c077, 0x9f8b45ff, 0xfa540a0e, 0x5435da1d, 0x31ea95ec, 0x94cebb52, 0xf111f4a3, 0x5f7024b0, 0x3aaf6b41, 0x920deec9, 0xf7d2a138, 0x59b3712b, 0x3c6c3eda, ], [ 0x00000000, 0x29fb361f, 0x53f66c3e, 0x7a0d5a21, 0xa7ecd87c, 0x8e17ee63, 0xf41ab442, 0xdde1825d, 0xde67daa7, 0xf79cecb8, 0x8d91b699, 0xa46a8086, 0x798b02db, 0x507034c4, 0x2a7d6ee5, 0x038658fa, 0x2d71df11, 0x048ae90e, 0x7e87b32f, 0x577c8530, 0x8a9d076d, 0xa3663172, 0xd96b6b53, 0xf0905d4c, 0xf31605b6, 0xdaed33a9, 0xa0e06988, 0x891b5f97, 0x54faddca, 0x7d01ebd5, 0x070cb1f4, 0x2ef787eb, 0x5ae3be22, 0x7318883d, 0x0915d21c, 0x20eee403, 0xfd0f665e, 0xd4f45041, 0xaef90a60, 0x87023c7f, 0x84846485, 0xad7f529a, 0xd77208bb, 0xfe893ea4, 0x2368bcf9, 0x0a938ae6, 0x709ed0c7, 0x5965e6d8, 0x77926133, 0x5e69572c, 0x24640d0d, 0x0d9f3b12, 0xd07eb94f, 0xf9858f50, 0x8388d571, 0xaa73e36e, 0xa9f5bb94, 0x800e8d8b, 0xfa03d7aa, 0xd3f8e1b5, 0x0e1963e8, 0x27e255f7, 0x5def0fd6, 0x741439c9, 0xb5c77c44, 0x9c3c4a5b, 0xe631107a, 0xcfca2665, 0x122ba438, 0x3bd09227, 0x41ddc806, 0x6826fe19, 0x6ba0a6e3, 0x425b90fc, 0x3856cadd, 0x11adfcc2, 0xcc4c7e9f, 0xe5b74880, 0x9fba12a1, 0xb64124be, 0x98b6a355, 0xb14d954a, 0xcb40cf6b, 0xe2bbf974, 0x3f5a7b29, 0x16a14d36, 0x6cac1717, 0x45572108, 0x46d179f2, 0x6f2a4fed, 0x152715cc, 0x3cdc23d3, 0xe13da18e, 0xc8c69791, 0xb2cbcdb0, 0x9b30fbaf, 0xef24c266, 0xc6dff479, 0xbcd2ae58, 0x95299847, 0x48c81a1a, 0x61332c05, 0x1b3e7624, 0x32c5403b, 0x314318c1, 0x18b82ede, 0x62b574ff, 0x4b4e42e0, 0x96afc0bd, 0xbf54f6a2, 0xc559ac83, 0xeca29a9c, 0xc2551d77, 0xebae2b68, 0x91a37149, 0xb8584756, 0x65b9c50b, 0x4c42f314, 0x364fa935, 0x1fb49f2a, 0x1c32c7d0, 0x35c9f1cf, 0x4fc4abee, 0x663f9df1, 0xbbde1fac, 0x922529b3, 0xe8287392, 0xc1d3458d, 0xfa3092d7, 0xd3cba4c8, 0xa9c6fee9, 0x803dc8f6, 0x5ddc4aab, 0x74277cb4, 0x0e2a2695, 0x27d1108a, 0x24574870, 0x0dac7e6f, 0x77a1244e, 0x5e5a1251, 0x83bb900c, 0xaa40a613, 0xd04dfc32, 0xf9b6ca2d, 0xd7414dc6, 0xfeba7bd9, 0x84b721f8, 0xad4c17e7, 0x70ad95ba, 0x5956a3a5, 0x235bf984, 0x0aa0cf9b, 0x09269761, 0x20dda17e, 0x5ad0fb5f, 0x732bcd40, 0xaeca4f1d, 0x87317902, 0xfd3c2323, 0xd4c7153c, 0xa0d32cf5, 0x89281aea, 0xf32540cb, 0xdade76d4, 0x073ff489, 0x2ec4c296, 0x54c998b7, 0x7d32aea8, 0x7eb4f652, 0x574fc04d, 0x2d429a6c, 0x04b9ac73, 0xd9582e2e, 0xf0a31831, 0x8aae4210, 0xa355740f, 0x8da2f3e4, 0xa459c5fb, 0xde549fda, 0xf7afa9c5, 0x2a4e2b98, 0x03b51d87, 0x79b847a6, 0x504371b9, 0x53c52943, 0x7a3e1f5c, 0x0033457d, 0x29c87362, 0xf429f13f, 0xddd2c720, 0xa7df9d01, 0x8e24ab1e, 0x4ff7ee93, 0x660cd88c, 0x1c0182ad, 0x35fab4b2, 0xe81b36ef, 0xc1e000f0, 0xbbed5ad1, 0x92166cce, 0x91903434, 0xb86b022b, 0xc266580a, 0xeb9d6e15, 0x367cec48, 0x1f87da57, 0x658a8076, 0x4c71b669, 0x62863182, 0x4b7d079d, 0x31705dbc, 0x188b6ba3, 0xc56ae9fe, 0xec91dfe1, 0x969c85c0, 0xbf67b3df, 0xbce1eb25, 0x951add3a, 0xef17871b, 0xc6ecb104, 0x1b0d3359, 0x32f60546, 0x48fb5f67, 0x61006978, 0x151450b1, 0x3cef66ae, 0x46e23c8f, 0x6f190a90, 0xb2f888cd, 0x9b03bed2, 0xe10ee4f3, 0xc8f5d2ec, 0xcb738a16, 0xe288bc09, 0x9885e628, 0xb17ed037, 0x6c9f526a, 0x45646475, 0x3f693e54, 0x1692084b, 0x38658fa0, 0x119eb9bf, 0x6b93e39e, 0x4268d581, 0x9f8957dc, 0xb67261c3, 0xcc7f3be2, 0xe5840dfd, 0xe6025507, 0xcff96318, 0xb5f43939, 0x9c0f0f26, 0x41ee8d7b, 0x6815bb64, 0x1218e145, 0x3be3d75a, ], [ 0x00000000, 0xad08eae4, 0xcbafbf97, 0x66a75573, 0x06e11571, 0xabe9ff95, 0xcd4eaae6, 0x60464002, 0x0dc22ae2, 0xa0cac006, 0xc66d9575, 0x6b657f91, 0x0b233f93, 0xa62bd577, 0xc08c8004, 0x6d846ae0, 0x1b8455c4, 0xb68cbf20, 0xd02bea53, 0x7d2300b7, 0x1d6540b5, 0xb06daa51, 0xd6caff22, 0x7bc215c6, 0x16467f26, 0xbb4e95c2, 0xdde9c0b1, 0x70e12a55, 0x10a76a57, 0xbdaf80b3, 0xdb08d5c0, 0x76003f24, 0x3708ab88, 0x9a00416c, 0xfca7141f, 0x51affefb, 0x31e9bef9, 0x9ce1541d, 0xfa46016e, 0x574eeb8a, 0x3aca816a, 0x97c26b8e, 0xf1653efd, 0x5c6dd419, 0x3c2b941b, 0x91237eff, 0xf7842b8c, 0x5a8cc168, 0x2c8cfe4c, 0x818414a8, 0xe72341db, 0x4a2bab3f, 0x2a6deb3d, 0x876501d9, 0xe1c254aa, 0x4ccabe4e, 0x214ed4ae, 0x8c463e4a, 0xeae16b39, 0x47e981dd, 0x27afc1df, 0x8aa72b3b, 0xec007e48, 0x410894ac, 0x6e115710, 0xc319bdf4, 0xa5bee887, 0x08b60263, 0x68f04261, 0xc5f8a885, 0xa35ffdf6, 0x0e571712, 0x63d37df2, 0xcedb9716, 0xa87cc265, 0x05742881, 0x65326883, 0xc83a8267, 0xae9dd714, 0x03953df0, 0x759502d4, 0xd89de830, 0xbe3abd43, 0x133257a7, 0x737417a5, 0xde7cfd41, 0xb8dba832, 0x15d342d6, 0x78572836, 0xd55fc2d2, 0xb3f897a1, 0x1ef07d45, 0x7eb63d47, 0xd3bed7a3, 0xb51982d0, 0x18116834, 0x5919fc98, 0xf411167c, 0x92b6430f, 0x3fbea9eb, 0x5ff8e9e9, 0xf2f0030d, 0x9457567e, 0x395fbc9a, 0x54dbd67a, 0xf9d33c9e, 0x9f7469ed, 0x327c8309, 0x523ac30b, 0xff3229ef, 0x99957c9c, 0x349d9678, 0x429da95c, 0xef9543b8, 0x893216cb, 0x243afc2f, 0x447cbc2d, 0xe97456c9, 0x8fd303ba, 0x22dbe95e, 0x4f5f83be, 0xe257695a, 0x84f03c29, 0x29f8d6cd, 0x49be96cf, 0xe4b67c2b, 0x82112958, 0x2f19c3bc, 0xdc22ae20, 0x712a44c4, 0x178d11b7, 0xba85fb53, 0xdac3bb51, 0x77cb51b5, 0x116c04c6, 0xbc64ee22, 0xd1e084c2, 0x7ce86e26, 0x1a4f3b55, 0xb747d1b1, 0xd70191b3, 0x7a097b57, 0x1cae2e24, 0xb1a6c4c0, 0xc7a6fbe4, 0x6aae1100, 0x0c094473, 0xa101ae97, 0xc147ee95, 0x6c4f0471, 0x0ae85102, 0xa7e0bbe6, 0xca64d106, 0x676c3be2, 0x01cb6e91, 0xacc38475, 0xcc85c477, 0x618d2e93, 0x072a7be0, 0xaa229104, 0xeb2a05a8, 0x4622ef4c, 0x2085ba3f, 0x8d8d50db, 0xedcb10d9, 0x40c3fa3d, 0x2664af4e, 0x8b6c45aa, 0xe6e82f4a, 0x4be0c5ae, 0x2d4790dd, 0x804f7a39, 0xe0093a3b, 0x4d01d0df, 0x2ba685ac, 0x86ae6f48, 0xf0ae506c, 0x5da6ba88, 0x3b01effb, 0x9609051f, 0xf64f451d, 0x5b47aff9, 0x3de0fa8a, 0x90e8106e, 0xfd6c7a8e, 0x5064906a, 0x36c3c519, 0x9bcb2ffd, 0xfb8d6fff, 0x5685851b, 0x3022d068, 0x9d2a3a8c, 0xb233f930, 0x1f3b13d4, 0x799c46a7, 0xd494ac43, 0xb4d2ec41, 0x19da06a5, 0x7f7d53d6, 0xd275b932, 0xbff1d3d2, 0x12f93936, 0x745e6c45, 0xd95686a1, 0xb910c6a3, 0x14182c47, 0x72bf7934, 0xdfb793d0, 0xa9b7acf4, 0x04bf4610, 0x62181363, 0xcf10f987, 0xaf56b985, 0x025e5361, 0x64f90612, 0xc9f1ecf6, 0xa4758616, 0x097d6cf2, 0x6fda3981, 0xc2d2d365, 0xa2949367, 0x0f9c7983, 0x693b2cf0, 0xc433c614, 0x853b52b8, 0x2833b85c, 0x4e94ed2f, 0xe39c07cb, 0x83da47c9, 0x2ed2ad2d, 0x4875f85e, 0xe57d12ba, 0x88f9785a, 0x25f192be, 0x4356c7cd, 0xee5e2d29, 0x8e186d2b, 0x231087cf, 0x45b7d2bc, 0xe8bf3858, 0x9ebf077c, 0x33b7ed98, 0x5510b8eb, 0xf818520f, 0x985e120d, 0x3556f8e9, 0x53f1ad9a, 0xfef9477e, 0x937d2d9e, 0x3e75c77a, 0x58d29209, 0xf5da78ed, 0x959c38ef, 0x3894d20b, 0x5e338778, 0xf33b6d9c, ], [ 0x00000000, 0xf08efa75, 0x70a39eb5, 0x802d64c0, 0xe1473d6a, 0x11c9c71f, 0x91e4a3df, 0x616a59aa, 0x5330108b, 0xa3beeafe, 0x23938e3e, 0xd31d744b, 0xb2772de1, 0x42f9d794, 0xc2d4b354, 0x325a4921, 0xa6602116, 0x56eedb63, 0xd6c3bfa3, 0x264d45d6, 0x47271c7c, 0xb7a9e609, 0x378482c9, 0xc70a78bc, 0xf550319d, 0x05decbe8, 0x85f3af28, 0x757d555d, 0x14170cf7, 0xe499f682, 0x64b49242, 0x943a6837, 0xdd7e2873, 0x2df0d206, 0xadddb6c6, 0x5d534cb3, 0x3c391519, 0xccb7ef6c, 0x4c9a8bac, 0xbc1471d9, 0x8e4e38f8, 0x7ec0c28d, 0xfeeda64d, 0x0e635c38, 0x6f090592, 0x9f87ffe7, 0x1faa9b27, 0xef246152, 0x7b1e0965, 0x8b90f310, 0x0bbd97d0, 0xfb336da5, 0x9a59340f, 0x6ad7ce7a, 0xeafaaaba, 0x1a7450cf, 0x282e19ee, 0xd8a0e39b, 0x588d875b, 0xa8037d2e, 0xc9692484, 0x39e7def1, 0xb9caba31, 0x49444044, 0x2b423ab9, 0xdbccc0cc, 0x5be1a40c, 0xab6f5e79, 0xca0507d3, 0x3a8bfda6, 0xbaa69966, 0x4a286313, 0x78722a32, 0x88fcd047, 0x08d1b487, 0xf85f4ef2, 0x99351758, 0x69bbed2d, 0xe99689ed, 0x19187398, 0x8d221baf, 0x7dace1da, 0xfd81851a, 0x0d0f7f6f, 0x6c6526c5, 0x9cebdcb0, 0x1cc6b870, 0xec484205, 0xde120b24, 0x2e9cf151, 0xaeb19591, 0x5e3f6fe4, 0x3f55364e, 0xcfdbcc3b, 0x4ff6a8fb, 0xbf78528e, 0xf63c12ca, 0x06b2e8bf, 0x869f8c7f, 0x7611760a, 0x177b2fa0, 0xe7f5d5d5, 0x67d8b115, 0x97564b60, 0xa50c0241, 0x5582f834, 0xd5af9cf4, 0x25216681, 0x444b3f2b, 0xb4c5c55e, 0x34e8a19e, 0xc4665beb, 0x505c33dc, 0xa0d2c9a9, 0x20ffad69, 0xd071571c, 0xb11b0eb6, 0x4195f4c3, 0xc1b89003, 0x31366a76, 0x036c2357, 0xf3e2d922, 0x73cfbde2, 0x83414797, 0xe22b1e3d, 0x12a5e448, 0x92888088, 0x62067afd, 0x56847572, 0xa60a8f07, 0x2627ebc7, 0xd6a911b2, 0xb7c34818, 0x474db26d, 0xc760d6ad, 0x37ee2cd8, 0x05b465f9, 0xf53a9f8c, 0x7517fb4c, 0x85990139, 0xe4f35893, 0x147da2e6, 0x9450c626, 0x64de3c53, 0xf0e45464, 0x006aae11, 0x8047cad1, 0x70c930a4, 0x11a3690e, 0xe12d937b, 0x6100f7bb, 0x918e0dce, 0xa3d444ef, 0x535abe9a, 0xd377da5a, 0x23f9202f, 0x42937985, 0xb21d83f0, 0x3230e730, 0xc2be1d45, 0x8bfa5d01, 0x7b74a774, 0xfb59c3b4, 0x0bd739c1, 0x6abd606b, 0x9a339a1e, 0x1a1efede, 0xea9004ab, 0xd8ca4d8a, 0x2844b7ff, 0xa869d33f, 0x58e7294a, 0x398d70e0, 0xc9038a95, 0x492eee55, 0xb9a01420, 0x2d9a7c17, 0xdd148662, 0x5d39e2a2, 0xadb718d7, 0xccdd417d, 0x3c53bb08, 0xbc7edfc8, 0x4cf025bd, 0x7eaa6c9c, 0x8e2496e9, 0x0e09f229, 0xfe87085c, 0x9fed51f6, 0x6f63ab83, 0xef4ecf43, 0x1fc03536, 0x7dc64fcb, 0x8d48b5be, 0x0d65d17e, 0xfdeb2b0b, 0x9c8172a1, 0x6c0f88d4, 0xec22ec14, 0x1cac1661, 0x2ef65f40, 0xde78a535, 0x5e55c1f5, 0xaedb3b80, 0xcfb1622a, 0x3f3f985f, 0xbf12fc9f, 0x4f9c06ea, 0xdba66edd, 0x2b2894a8, 0xab05f068, 0x5b8b0a1d, 0x3ae153b7, 0xca6fa9c2, 0x4a42cd02, 0xbacc3777, 0x88967e56, 0x78188423, 0xf835e0e3, 0x08bb1a96, 0x69d1433c, 0x995fb949, 0x1972dd89, 0xe9fc27fc, 0xa0b867b8, 0x50369dcd, 0xd01bf90d, 0x20950378, 0x41ff5ad2, 0xb171a0a7, 0x315cc467, 0xc1d23e12, 0xf3887733, 0x03068d46, 0x832be986, 0x73a513f3, 0x12cf4a59, 0xe241b02c, 0x626cd4ec, 0x92e22e99, 0x06d846ae, 0xf656bcdb, 0x767bd81b, 0x86f5226e, 0xe79f7bc4, 0x171181b1, 0x973ce571, 0x67b21f04, 0x55e85625, 0xa566ac50, 0x254bc890, 0xd5c532e5, 0xb4af6b4f, 0x4421913a, 0xc40cf5fa, 0x34820f8f, ], [ 0x00000000, 0x23a56d51, 0x474adaa2, 0x64efb7f3, 0x8e95b544, 0xad30d815, 0xc9df6fe6, 0xea7a02b7, 0x8c9500d7, 0xaf306d86, 0xcbdfda75, 0xe87ab724, 0x0200b593, 0x21a5d8c2, 0x454a6f31, 0x66ef0260, 0x88946bf1, 0xab3106a0, 0xcfdeb153, 0xec7bdc02, 0x0601deb5, 0x25a4b3e4, 0x414b0417, 0x62ee6946, 0x04016b26, 0x27a40677, 0x434bb184, 0x60eedcd5, 0x8a94de62, 0xa931b333, 0xcdde04c0, 0xee7b6991, 0x8096bdbd, 0xa333d0ec, 0xc7dc671f, 0xe4790a4e, 0x0e0308f9, 0x2da665a8, 0x4949d25b, 0x6aecbf0a, 0x0c03bd6a, 0x2fa6d03b, 0x4b4967c8, 0x68ec0a99, 0x8296082e, 0xa133657f, 0xc5dcd28c, 0xe679bfdd, 0x0802d64c, 0x2ba7bb1d, 0x4f480cee, 0x6ced61bf, 0x86976308, 0xa5320e59, 0xc1ddb9aa, 0xe278d4fb, 0x8497d69b, 0xa732bbca, 0xc3dd0c39, 0xe0786168, 0x0a0263df, 0x29a70e8e, 0x4d48b97d, 0x6eedd42c, 0x90931125, 0xb3367c74, 0xd7d9cb87, 0xf47ca6d6, 0x1e06a461, 0x3da3c930, 0x594c7ec3, 0x7ae91392, 0x1c0611f2, 0x3fa37ca3, 0x5b4ccb50, 0x78e9a601, 0x9293a4b6, 0xb136c9e7, 0xd5d97e14, 0xf67c1345, 0x18077ad4, 0x3ba21785, 0x5f4da076, 0x7ce8cd27, 0x9692cf90, 0xb537a2c1, 0xd1d81532, 0xf27d7863, 0x94927a03, 0xb7371752, 0xd3d8a0a1, 0xf07dcdf0, 0x1a07cf47, 0x39a2a216, 0x5d4d15e5, 0x7ee878b4, 0x1005ac98, 0x33a0c1c9, 0x574f763a, 0x74ea1b6b, 0x9e9019dc, 0xbd35748d, 0xd9dac37e, 0xfa7fae2f, 0x9c90ac4f, 0xbf35c11e, 0xdbda76ed, 0xf87f1bbc, 0x1205190b, 0x31a0745a, 0x554fc3a9, 0x76eaaef8, 0x9891c769, 0xbb34aa38, 0xdfdb1dcb, 0xfc7e709a, 0x1604722d, 0x35a11f7c, 0x514ea88f, 0x72ebc5de, 0x1404c7be, 0x37a1aaef, 0x534e1d1c, 0x70eb704d, 0x9a9172fa, 0xb9341fab, 0xdddba858, 0xfe7ec509, 0xb0984815, 0x933d2544, 0xf7d292b7, 0xd477ffe6, 0x3e0dfd51, 0x1da89000, 0x794727f3, 0x5ae24aa2, 0x3c0d48c2, 0x1fa82593, 0x7b479260, 0x58e2ff31, 0xb298fd86, 0x913d90d7, 0xf5d22724, 0xd6774a75, 0x380c23e4, 0x1ba94eb5, 0x7f46f946, 0x5ce39417, 0xb69996a0, 0x953cfbf1, 0xf1d34c02, 0xd2762153, 0xb4992333, 0x973c4e62, 0xf3d3f991, 0xd07694c0, 0x3a0c9677, 0x19a9fb26, 0x7d464cd5, 0x5ee32184, 0x300ef5a8, 0x13ab98f9, 0x77442f0a, 0x54e1425b, 0xbe9b40ec, 0x9d3e2dbd, 0xf9d19a4e, 0xda74f71f, 0xbc9bf57f, 0x9f3e982e, 0xfbd12fdd, 0xd874428c, 0x320e403b, 0x11ab2d6a, 0x75449a99, 0x56e1f7c8, 0xb89a9e59, 0x9b3ff308, 0xffd044fb, 0xdc7529aa, 0x360f2b1d, 0x15aa464c, 0x7145f1bf, 0x52e09cee, 0x340f9e8e, 0x17aaf3df, 0x7345442c, 0x50e0297d, 0xba9a2bca, 0x993f469b, 0xfdd0f168, 0xde759c39, 0x200b5930, 0x03ae3461, 0x67418392, 0x44e4eec3, 0xae9eec74, 0x8d3b8125, 0xe9d436d6, 0xca715b87, 0xac9e59e7, 0x8f3b34b6, 0xebd48345, 0xc871ee14, 0x220beca3, 0x01ae81f2, 0x65413601, 0x46e45b50, 0xa89f32c1, 0x8b3a5f90, 0xefd5e863, 0xcc708532, 0x260a8785, 0x05afead4, 0x61405d27, 0x42e53076, 0x240a3216, 0x07af5f47, 0x6340e8b4, 0x40e585e5, 0xaa9f8752, 0x893aea03, 0xedd55df0, 0xce7030a1, 0xa09de48d, 0x833889dc, 0xe7d73e2f, 0xc472537e, 0x2e0851c9, 0x0dad3c98, 0x69428b6b, 0x4ae7e63a, 0x2c08e45a, 0x0fad890b, 0x6b423ef8, 0x48e753a9, 0xa29d511e, 0x81383c4f, 0xe5d78bbc, 0xc672e6ed, 0x28098f7c, 0x0bace22d, 0x6f4355de, 0x4ce6388f, 0xa69c3a38, 0x85395769, 0xe1d6e09a, 0xc2738dcb, 0xa49c8fab, 0x8739e2fa, 0xe3d65509, 0xc0733858, 0x2a093aef, 0x09ac57be, 0x6d43e04d, 0x4ee68d1c, ], [ 0x00000000, 0xb73a2ece, 0xffca37c3, 0x48f0190d, 0x6e2a05d9, 0xd9102b17, 0x91e0321a, 0x26da1cd4, 0xdc540bb2, 0x6b6e257c, 0x239e3c71, 0x94a412bf, 0xb27e0e6b, 0x054420a5, 0x4db439a8, 0xfa8e1766, 0x29167d3b, 0x9e2c53f5, 0xd6dc4af8, 0x61e66436, 0x473c78e2, 0xf006562c, 0xb8f64f21, 0x0fcc61ef, 0xf5427689, 0x42785847, 0x0a88414a, 0xbdb26f84, 0x9b687350, 0x2c525d9e, 0x64a24493, 0xd3986a5d, 0x522cfa76, 0xe516d4b8, 0xade6cdb5, 0x1adce37b, 0x3c06ffaf, 0x8b3cd161, 0xc3ccc86c, 0x74f6e6a2, 0x8e78f1c4, 0x3942df0a, 0x71b2c607, 0xc688e8c9, 0xe052f41d, 0x5768dad3, 0x1f98c3de, 0xa8a2ed10, 0x7b3a874d, 0xcc00a983, 0x84f0b08e, 0x33ca9e40, 0x15108294, 0xa22aac5a, 0xeadab557, 0x5de09b99, 0xa76e8cff, 0x1054a231, 0x58a4bb3c, 0xef9e95f2, 0xc9448926, 0x7e7ea7e8, 0x368ebee5, 0x81b4902b, 0xa459f4ec, 0x1363da22, 0x5b93c32f, 0xeca9ede1, 0xca73f135, 0x7d49dffb, 0x35b9c6f6, 0x8283e838, 0x780dff5e, 0xcf37d190, 0x87c7c89d, 0x30fde653, 0x1627fa87, 0xa11dd449, 0xe9edcd44, 0x5ed7e38a, 0x8d4f89d7, 0x3a75a719, 0x7285be14, 0xc5bf90da, 0xe3658c0e, 0x545fa2c0, 0x1cafbbcd, 0xab959503, 0x511b8265, 0xe621acab, 0xaed1b5a6, 0x19eb9b68, 0x3f3187bc, 0x880ba972, 0xc0fbb07f, 0x77c19eb1, 0xf6750e9a, 0x414f2054, 0x09bf3959, 0xbe851797, 0x985f0b43, 0x2f65258d, 0x67953c80, 0xd0af124e, 0x2a210528, 0x9d1b2be6, 0xd5eb32eb, 0x62d11c25, 0x440b00f1, 0xf3312e3f, 0xbbc13732, 0x0cfb19fc, 0xdf6373a1, 0x68595d6f, 0x20a94462, 0x97936aac, 0xb1497678, 0x067358b6, 0x4e8341bb, 0xf9b96f75, 0x03377813, 0xb40d56dd, 0xfcfd4fd0, 0x4bc7611e, 0x6d1d7dca, 0xda275304, 0x92d74a09, 0x25ed64c7, 0xd90d8387, 0x6e37ad49, 0x26c7b444, 0x91fd9a8a, 0xb727865e, 0x001da890, 0x48edb19d, 0xffd79f53, 0x05598835, 0xb263a6fb, 0xfa93bff6, 0x4da99138, 0x6b738dec, 0xdc49a322, 0x94b9ba2f, 0x238394e1, 0xf01bfebc, 0x4721d072, 0x0fd1c97f, 0xb8ebe7b1, 0x9e31fb65, 0x290bd5ab, 0x61fbcca6, 0xd6c1e268, 0x2c4ff50e, 0x9b75dbc0, 0xd385c2cd, 0x64bfec03, 0x4265f0d7, 0xf55fde19, 0xbdafc714, 0x0a95e9da, 0x8b2179f1, 0x3c1b573f, 0x74eb4e32, 0xc3d160fc, 0xe50b7c28, 0x523152e6, 0x1ac14beb, 0xadfb6525, 0x57757243, 0xe04f5c8d, 0xa8bf4580, 0x1f856b4e, 0x395f779a, 0x8e655954, 0xc6954059, 0x71af6e97, 0xa23704ca, 0x150d2a04, 0x5dfd3309, 0xeac71dc7, 0xcc1d0113, 0x7b272fdd, 0x33d736d0, 0x84ed181e, 0x7e630f78, 0xc95921b6, 0x81a938bb, 0x36931675, 0x10490aa1, 0xa773246f, 0xef833d62, 0x58b913ac, 0x7d54776b, 0xca6e59a5, 0x829e40a8, 0x35a46e66, 0x137e72b2, 0xa4445c7c, 0xecb44571, 0x5b8e6bbf, 0xa1007cd9, 0x163a5217, 0x5eca4b1a, 0xe9f065d4, 0xcf2a7900, 0x781057ce, 0x30e04ec3, 0x87da600d, 0x54420a50, 0xe378249e, 0xab883d93, 0x1cb2135d, 0x3a680f89, 0x8d522147, 0xc5a2384a, 0x72981684, 0x881601e2, 0x3f2c2f2c, 0x77dc3621, 0xc0e618ef, 0xe63c043b, 0x51062af5, 0x19f633f8, 0xaecc1d36, 0x2f788d1d, 0x9842a3d3, 0xd0b2bade, 0x67889410, 0x415288c4, 0xf668a60a, 0xbe98bf07, 0x09a291c9, 0xf32c86af, 0x4416a861, 0x0ce6b16c, 0xbbdc9fa2, 0x9d068376, 0x2a3cadb8, 0x62ccb4b5, 0xd5f69a7b, 0x066ef026, 0xb154dee8, 0xf9a4c7e5, 0x4e9ee92b, 0x6844f5ff, 0xdf7edb31, 0x978ec23c, 0x20b4ecf2, 0xda3afb94, 0x6d00d55a, 0x25f0cc57, 0x92cae299, 0xb410fe4d, 0x032ad083, 0x4bdac98e, 0xfce0e740, ], [ 0x00000000, 0xd2509570, 0x351f40bf, 0xe74fd5cf, 0x6a3e817e, 0xb86e140e, 0x5f21c1c1, 0x8d7154b1, 0xd47d02fc, 0x062d978c, 0xe1624243, 0x3332d733, 0xbe438382, 0x6c1316f2, 0x8b5cc33d, 0x590c564d, 0x39446fa7, 0xeb14fad7, 0x0c5b2f18, 0xde0bba68, 0x537aeed9, 0x812a7ba9, 0x6665ae66, 0xb4353b16, 0xed396d5b, 0x3f69f82b, 0xd8262de4, 0x0a76b894, 0x8707ec25, 0x55577955, 0xb218ac9a, 0x604839ea, 0x7288df4e, 0xa0d84a3e, 0x47979ff1, 0x95c70a81, 0x18b65e30, 0xcae6cb40, 0x2da91e8f, 0xfff98bff, 0xa6f5ddb2, 0x74a548c2, 0x93ea9d0d, 0x41ba087d, 0xcccb5ccc, 0x1e9bc9bc, 0xf9d41c73, 0x2b848903, 0x4bccb0e9, 0x999c2599, 0x7ed3f056, 0xac836526, 0x21f23197, 0xf3a2a4e7, 0x14ed7128, 0xc6bde458, 0x9fb1b215, 0x4de12765, 0xaaaef2aa, 0x78fe67da, 0xf58f336b, 0x27dfa61b, 0xc09073d4, 0x12c0e6a4, 0xe511be9c, 0x37412bec, 0xd00efe23, 0x025e6b53, 0x8f2f3fe2, 0x5d7faa92, 0xba307f5d, 0x6860ea2d, 0x316cbc60, 0xe33c2910, 0x0473fcdf, 0xd62369af, 0x5b523d1e, 0x8902a86e, 0x6e4d7da1, 0xbc1de8d1, 0xdc55d13b, 0x0e05444b, 0xe94a9184, 0x3b1a04f4, 0xb66b5045, 0x643bc535, 0x837410fa, 0x5124858a, 0x0828d3c7, 0xda7846b7, 0x3d379378, 0xef670608, 0x621652b9, 0xb046c7c9, 0x57091206, 0x85598776, 0x979961d2, 0x45c9f4a2, 0xa286216d, 0x70d6b41d, 0xfda7e0ac, 0x2ff775dc, 0xc8b8a013, 0x1ae83563, 0x43e4632e, 0x91b4f65e, 0x76fb2391, 0xa4abb6e1, 0x29dae250, 0xfb8a7720, 0x1cc5a2ef, 0xce95379f, 0xaedd0e75, 0x7c8d9b05, 0x9bc24eca, 0x4992dbba, 0xc4e38f0b, 0x16b31a7b, 0xf1fccfb4, 0x23ac5ac4, 0x7aa00c89, 0xa8f099f9, 0x4fbf4c36, 0x9defd946, 0x109e8df7, 0xc2ce1887, 0x2581cd48, 0xf7d15838, 0x5b9d1767, 0x89cd8217, 0x6e8257d8, 0xbcd2c2a8, 0x31a39619, 0xe3f30369, 0x04bcd6a6, 0xd6ec43d6, 0x8fe0159b, 0x5db080eb, 0xbaff5524, 0x68afc054, 0xe5de94e5, 0x378e0195, 0xd0c1d45a, 0x0291412a, 0x62d978c0, 0xb089edb0, 0x57c6387f, 0x8596ad0f, 0x08e7f9be, 0xdab76cce, 0x3df8b901, 0xefa82c71, 0xb6a47a3c, 0x64f4ef4c, 0x83bb3a83, 0x51ebaff3, 0xdc9afb42, 0x0eca6e32, 0xe985bbfd, 0x3bd52e8d, 0x2915c829, 0xfb455d59, 0x1c0a8896, 0xce5a1de6, 0x432b4957, 0x917bdc27, 0x763409e8, 0xa4649c98, 0xfd68cad5, 0x2f385fa5, 0xc8778a6a, 0x1a271f1a, 0x97564bab, 0x4506dedb, 0xa2490b14, 0x70199e64, 0x1051a78e, 0xc20132fe, 0x254ee731, 0xf71e7241, 0x7a6f26f0, 0xa83fb380, 0x4f70664f, 0x9d20f33f, 0xc42ca572, 0x167c3002, 0xf133e5cd, 0x236370bd, 0xae12240c, 0x7c42b17c, 0x9b0d64b3, 0x495df1c3, 0xbe8ca9fb, 0x6cdc3c8b, 0x8b93e944, 0x59c37c34, 0xd4b22885, 0x06e2bdf5, 0xe1ad683a, 0x33fdfd4a, 0x6af1ab07, 0xb8a13e77, 0x5feeebb8, 0x8dbe7ec8, 0x00cf2a79, 0xd29fbf09, 0x35d06ac6, 0xe780ffb6, 0x87c8c65c, 0x5598532c, 0xb2d786e3, 0x60871393, 0xedf64722, 0x3fa6d252, 0xd8e9079d, 0x0ab992ed, 0x53b5c4a0, 0x81e551d0, 0x66aa841f, 0xb4fa116f, 0x398b45de, 0xebdbd0ae, 0x0c940561, 0xdec49011, 0xcc0476b5, 0x1e54e3c5, 0xf91b360a, 0x2b4ba37a, 0xa63af7cb, 0x746a62bb, 0x9325b774, 0x41752204, 0x18797449, 0xca29e139, 0x2d6634f6, 0xff36a186, 0x7247f537, 0xa0176047, 0x4758b588, 0x950820f8, 0xf5401912, 0x27108c62, 0xc05f59ad, 0x120fccdd, 0x9f7e986c, 0x4d2e0d1c, 0xaa61d8d3, 0x78314da3, 0x213d1bee, 0xf36d8e9e, 0x14225b51, 0xc672ce21, 0x4b039a90, 0x99530fe0, 0x7e1cda2f, 0xac4c4f5f, ], [ 0x00000000, 0xd116831f, 0x33936c61, 0xe285ef7e, 0x6726d8c2, 0xb6305bdd, 0x54b5b4a3, 0x85a337bc, 0xce4db184, 0x1f5b329b, 0xfddedde5, 0x2cc85efa, 0xa96b6946, 0x787dea59, 0x9af80527, 0x4bee8638, 0x0d250957, 0xdc338a48, 0x3eb66536, 0xefa0e629, 0x6a03d195, 0xbb15528a, 0x5990bdf4, 0x88863eeb, 0xc368b8d3, 0x127e3bcc, 0xf0fbd4b2, 0x21ed57ad, 0xa44e6011, 0x7558e30e, 0x97dd0c70, 0x46cb8f6f, 0x1a4a12ae, 0xcb5c91b1, 0x29d97ecf, 0xf8cffdd0, 0x7d6cca6c, 0xac7a4973, 0x4effa60d, 0x9fe92512, 0xd407a32a, 0x05112035, 0xe794cf4b, 0x36824c54, 0xb3217be8, 0x6237f8f7, 0x80b21789, 0x51a49496, 0x176f1bf9, 0xc67998e6, 0x24fc7798, 0xf5eaf487, 0x7049c33b, 0xa15f4024, 0x43daaf5a, 0x92cc2c45, 0xd922aa7d, 0x08342962, 0xeab1c61c, 0x3ba74503, 0xbe0472bf, 0x6f12f1a0, 0x8d971ede, 0x5c819dc1, 0x3494255c, 0xe582a643, 0x0707493d, 0xd611ca22, 0x53b2fd9e, 0x82a47e81, 0x602191ff, 0xb13712e0, 0xfad994d8, 0x2bcf17c7, 0xc94af8b9, 0x185c7ba6, 0x9dff4c1a, 0x4ce9cf05, 0xae6c207b, 0x7f7aa364, 0x39b12c0b, 0xe8a7af14, 0x0a22406a, 0xdb34c375, 0x5e97f4c9, 0x8f8177d6, 0x6d0498a8, 0xbc121bb7, 0xf7fc9d8f, 0x26ea1e90, 0xc46ff1ee, 0x157972f1, 0x90da454d, 0x41ccc652, 0xa349292c, 0x725faa33, 0x2ede37f2, 0xffc8b4ed, 0x1d4d5b93, 0xcc5bd88c, 0x49f8ef30, 0x98ee6c2f, 0x7a6b8351, 0xab7d004e, 0xe0938676, 0x31850569, 0xd300ea17, 0x02166908, 0x87b55eb4, 0x56a3ddab, 0xb42632d5, 0x6530b1ca, 0x23fb3ea5, 0xf2edbdba, 0x106852c4, 0xc17ed1db, 0x44dde667, 0x95cb6578, 0x774e8a06, 0xa6580919, 0xedb68f21, 0x3ca00c3e, 0xde25e340, 0x0f33605f, 0x8a9057e3, 0x5b86d4fc, 0xb9033b82, 0x6815b89d, 0x69284ab8, 0xb83ec9a7, 0x5abb26d9, 0x8bada5c6, 0x0e0e927a, 0xdf181165, 0x3d9dfe1b, 0xec8b7d04, 0xa765fb3c, 0x76737823, 0x94f6975d, 0x45e01442, 0xc04323fe, 0x1155a0e1, 0xf3d04f9f, 0x22c6cc80, 0x640d43ef, 0xb51bc0f0, 0x579e2f8e, 0x8688ac91, 0x032b9b2d, 0xd23d1832, 0x30b8f74c, 0xe1ae7453, 0xaa40f26b, 0x7b567174, 0x99d39e0a, 0x48c51d15, 0xcd662aa9, 0x1c70a9b6, 0xfef546c8, 0x2fe3c5d7, 0x73625816, 0xa274db09, 0x40f13477, 0x91e7b768, 0x144480d4, 0xc55203cb, 0x27d7ecb5, 0xf6c16faa, 0xbd2fe992, 0x6c396a8d, 0x8ebc85f3, 0x5faa06ec, 0xda093150, 0x0b1fb24f, 0xe99a5d31, 0x388cde2e, 0x7e475141, 0xaf51d25e, 0x4dd43d20, 0x9cc2be3f, 0x19618983, 0xc8770a9c, 0x2af2e5e2, 0xfbe466fd, 0xb00ae0c5, 0x611c63da, 0x83998ca4, 0x528f0fbb, 0xd72c3807, 0x063abb18, 0xe4bf5466, 0x35a9d779, 0x5dbc6fe4, 0x8caaecfb, 0x6e2f0385, 0xbf39809a, 0x3a9ab726, 0xeb8c3439, 0x0909db47, 0xd81f5858, 0x93f1de60, 0x42e75d7f, 0xa062b201, 0x7174311e, 0xf4d706a2, 0x25c185bd, 0xc7446ac3, 0x1652e9dc, 0x509966b3, 0x818fe5ac, 0x630a0ad2, 0xb21c89cd, 0x37bfbe71, 0xe6a93d6e, 0x042cd210, 0xd53a510f, 0x9ed4d737, 0x4fc25428, 0xad47bb56, 0x7c513849, 0xf9f20ff5, 0x28e48cea, 0xca616394, 0x1b77e08b, 0x47f67d4a, 0x96e0fe55, 0x7465112b, 0xa5739234, 0x20d0a588, 0xf1c62697, 0x1343c9e9, 0xc2554af6, 0x89bbccce, 0x58ad4fd1, 0xba28a0af, 0x6b3e23b0, 0xee9d140c, 0x3f8b9713, 0xdd0e786d, 0x0c18fb72, 0x4ad3741d, 0x9bc5f702, 0x7940187c, 0xa8569b63, 0x2df5acdf, 0xfce32fc0, 0x1e66c0be, 0xcf7043a1, 0x849ec599, 0x55884686, 0xb70da9f8, 0x661b2ae7, 0xe3b81d5b, 0x32ae9e44, 0xd02b713a, 0x013df225, ], [ 0x00000000, 0xadf00751, 0xca5e64fd, 0x67ae63ac, 0x0502a3a5, 0xa8f2a4f4, 0xcf5cc758, 0x62acc009, 0x0a05474a, 0xa7f5401b, 0xc05b23b7, 0x6dab24e6, 0x0f07e4ef, 0xa2f7e3be, 0xc5598012, 0x68a98743, 0x140a8e94, 0xb9fa89c5, 0xde54ea69, 0x73a4ed38, 0x11082d31, 0xbcf82a60, 0xdb5649cc, 0x76a64e9d, 0x1e0fc9de, 0xb3ffce8f, 0xd451ad23, 0x79a1aa72, 0x1b0d6a7b, 0xb6fd6d2a, 0xd1530e86, 0x7ca309d7, 0x28151d28, 0x85e51a79, 0xe24b79d5, 0x4fbb7e84, 0x2d17be8d, 0x80e7b9dc, 0xe749da70, 0x4ab9dd21, 0x22105a62, 0x8fe05d33, 0xe84e3e9f, 0x45be39ce, 0x2712f9c7, 0x8ae2fe96, 0xed4c9d3a, 0x40bc9a6b, 0x3c1f93bc, 0x91ef94ed, 0xf641f741, 0x5bb1f010, 0x391d3019, 0x94ed3748, 0xf34354e4, 0x5eb353b5, 0x361ad4f6, 0x9bead3a7, 0xfc44b00b, 0x51b4b75a, 0x33187753, 0x9ee87002, 0xf94613ae, 0x54b614ff, 0x502a3a50, 0xfdda3d01, 0x9a745ead, 0x378459fc, 0x552899f5, 0xf8d89ea4, 0x9f76fd08, 0x3286fa59, 0x5a2f7d1a, 0xf7df7a4b, 0x907119e7, 0x3d811eb6, 0x5f2ddebf, 0xf2ddd9ee, 0x9573ba42, 0x3883bd13, 0x4420b4c4, 0xe9d0b395, 0x8e7ed039, 0x238ed768, 0x41221761, 0xecd21030, 0x8b7c739c, 0x268c74cd, 0x4e25f38e, 0xe3d5f4df, 0x847b9773, 0x298b9022, 0x4b27502b, 0xe6d7577a, 0x817934d6, 0x2c893387, 0x783f2778, 0xd5cf2029, 0xb2614385, 0x1f9144d4, 0x7d3d84dd, 0xd0cd838c, 0xb763e020, 0x1a93e771, 0x723a6032, 0xdfca6763, 0xb86404cf, 0x1594039e, 0x7738c397, 0xdac8c4c6, 0xbd66a76a, 0x1096a03b, 0x6c35a9ec, 0xc1c5aebd, 0xa66bcd11, 0x0b9bca40, 0x69370a49, 0xc4c70d18, 0xa3696eb4, 0x0e9969e5, 0x6630eea6, 0xcbc0e9f7, 0xac6e8a5b, 0x019e8d0a, 0x63324d03, 0xcec24a52, 0xa96c29fe, 0x049c2eaf, 0xa05474a0, 0x0da473f1, 0x6a0a105d, 0xc7fa170c, 0xa556d705, 0x08a6d054, 0x6f08b3f8, 0xc2f8b4a9, 0xaa5133ea, 0x07a134bb, 0x600f5717, 0xcdff5046, 0xaf53904f, 0x02a3971e, 0x650df4b2, 0xc8fdf3e3, 0xb45efa34, 0x19aefd65, 0x7e009ec9, 0xd3f09998, 0xb15c5991, 0x1cac5ec0, 0x7b023d6c, 0xd6f23a3d, 0xbe5bbd7e, 0x13abba2f, 0x7405d983, 0xd9f5ded2, 0xbb591edb, 0x16a9198a, 0x71077a26, 0xdcf77d77, 0x88416988, 0x25b16ed9, 0x421f0d75, 0xefef0a24, 0x8d43ca2d, 0x20b3cd7c, 0x471daed0, 0xeaeda981, 0x82442ec2, 0x2fb42993, 0x481a4a3f, 0xe5ea4d6e, 0x87468d67, 0x2ab68a36, 0x4d18e99a, 0xe0e8eecb, 0x9c4be71c, 0x31bbe04d, 0x561583e1, 0xfbe584b0, 0x994944b9, 0x34b943e8, 0x53172044, 0xfee72715, 0x964ea056, 0x3bbea707, 0x5c10c4ab, 0xf1e0c3fa, 0x934c03f3, 0x3ebc04a2, 0x5912670e, 0xf4e2605f, 0xf07e4ef0, 0x5d8e49a1, 0x3a202a0d, 0x97d02d5c, 0xf57ced55, 0x588cea04, 0x3f2289a8, 0x92d28ef9, 0xfa7b09ba, 0x578b0eeb, 0x30256d47, 0x9dd56a16, 0xff79aa1f, 0x5289ad4e, 0x3527cee2, 0x98d7c9b3, 0xe474c064, 0x4984c735, 0x2e2aa499, 0x83daa3c8, 0xe17663c1, 0x4c866490, 0x2b28073c, 0x86d8006d, 0xee71872e, 0x4381807f, 0x242fe3d3, 0x89dfe482, 0xeb73248b, 0x468323da, 0x212d4076, 0x8cdd4727, 0xd86b53d8, 0x759b5489, 0x12353725, 0xbfc53074, 0xdd69f07d, 0x7099f72c, 0x17379480, 0xbac793d1, 0xd26e1492, 0x7f9e13c3, 0x1830706f, 0xb5c0773e, 0xd76cb737, 0x7a9cb066, 0x1d32d3ca, 0xb0c2d49b, 0xcc61dd4c, 0x6191da1d, 0x063fb9b1, 0xabcfbee0, 0xc9637ee9, 0x649379b8, 0x033d1a14, 0xaecd1d45, 0xc6649a06, 0x6b949d57, 0x0c3afefb, 0xa1caf9aa, 0xc36639a3, 0x6e963ef2, 0x09385d5e, 0xa4c85a0f, ], [ 0x00000000, 0xb7b47ba4, 0xfed69d17, 0x4962e6b3, 0x6c135071, 0xdba72bd5, 0x92c5cd66, 0x2571b6c2, 0xd826a0e2, 0x6f92db46, 0x26f03df5, 0x91444651, 0xb435f093, 0x03818b37, 0x4ae36d84, 0xfd571620, 0x21f32b9b, 0x9647503f, 0xdf25b68c, 0x6891cd28, 0x4de07bea, 0xfa54004e, 0xb336e6fd, 0x04829d59, 0xf9d58b79, 0x4e61f0dd, 0x0703166e, 0xb0b76dca, 0x95c6db08, 0x2272a0ac, 0x6b10461f, 0xdca43dbb, 0x43e65736, 0xf4522c92, 0xbd30ca21, 0x0a84b185, 0x2ff50747, 0x98417ce3, 0xd1239a50, 0x6697e1f4, 0x9bc0f7d4, 0x2c748c70, 0x65166ac3, 0xd2a21167, 0xf7d3a7a5, 0x4067dc01, 0x09053ab2, 0xbeb14116, 0x62157cad, 0xd5a10709, 0x9cc3e1ba, 0x2b779a1e, 0x0e062cdc, 0xb9b25778, 0xf0d0b1cb, 0x4764ca6f, 0xba33dc4f, 0x0d87a7eb, 0x44e54158, 0xf3513afc, 0xd6208c3e, 0x6194f79a, 0x28f61129, 0x9f426a8d, 0x87ccae6c, 0x3078d5c8, 0x791a337b, 0xceae48df, 0xebdffe1d, 0x5c6b85b9, 0x1509630a, 0xa2bd18ae, 0x5fea0e8e, 0xe85e752a, 0xa13c9399, 0x1688e83d, 0x33f95eff, 0x844d255b, 0xcd2fc3e8, 0x7a9bb84c, 0xa63f85f7, 0x118bfe53, 0x58e918e0, 0xef5d6344, 0xca2cd586, 0x7d98ae22, 0x34fa4891, 0x834e3335, 0x7e192515, 0xc9ad5eb1, 0x80cfb802, 0x377bc3a6, 0x120a7564, 0xa5be0ec0, 0xecdce873, 0x5b6893d7, 0xc42af95a, 0x739e82fe, 0x3afc644d, 0x8d481fe9, 0xa839a92b, 0x1f8dd28f, 0x56ef343c, 0xe15b4f98, 0x1c0c59b8, 0xabb8221c, 0xe2dac4af, 0x556ebf0b, 0x701f09c9, 0xc7ab726d, 0x8ec994de, 0x397def7a, 0xe5d9d2c1, 0x526da965, 0x1b0f4fd6, 0xacbb3472, 0x89ca82b0, 0x3e7ef914, 0x771c1fa7, 0xc0a86403, 0x3dff7223, 0x8a4b0987, 0xc329ef34, 0x749d9490, 0x51ec2252, 0xe65859f6, 0xaf3abf45, 0x188ec4e1, 0x9e273687, 0x29934d23, 0x60f1ab90, 0xd745d034, 0xf23466f6, 0x45801d52, 0x0ce2fbe1, 0xbb568045, 0x46019665, 0xf1b5edc1, 0xb8d70b72, 0x0f6370d6, 0x2a12c614, 0x9da6bdb0, 0xd4c45b03, 0x637020a7, 0xbfd41d1c, 0x086066b8, 0x4102800b, 0xf6b6fbaf, 0xd3c74d6d, 0x647336c9, 0x2d11d07a, 0x9aa5abde, 0x67f2bdfe, 0xd046c65a, 0x992420e9, 0x2e905b4d, 0x0be1ed8f, 0xbc55962b, 0xf5377098, 0x42830b3c, 0xddc161b1, 0x6a751a15, 0x2317fca6, 0x94a38702, 0xb1d231c0, 0x06664a64, 0x4f04acd7, 0xf8b0d773, 0x05e7c153, 0xb253baf7, 0xfb315c44, 0x4c8527e0, 0x69f49122, 0xde40ea86, 0x97220c35, 0x20967791, 0xfc324a2a, 0x4b86318e, 0x02e4d73d, 0xb550ac99, 0x90211a5b, 0x279561ff, 0x6ef7874c, 0xd943fce8, 0x2414eac8, 0x93a0916c, 0xdac277df, 0x6d760c7b, 0x4807bab9, 0xffb3c11d, 0xb6d127ae, 0x01655c0a, 0x19eb98eb, 0xae5fe34f, 0xe73d05fc, 0x50897e58, 0x75f8c89a, 0xc24cb33e, 0x8b2e558d, 0x3c9a2e29, 0xc1cd3809, 0x767943ad, 0x3f1ba51e, 0x88afdeba, 0xadde6878, 0x1a6a13dc, 0x5308f56f, 0xe4bc8ecb, 0x3818b370, 0x8facc8d4, 0xc6ce2e67, 0x717a55c3, 0x540be301, 0xe3bf98a5, 0xaadd7e16, 0x1d6905b2, 0xe03e1392, 0x578a6836, 0x1ee88e85, 0xa95cf521, 0x8c2d43e3, 0x3b993847, 0x72fbdef4, 0xc54fa550, 0x5a0dcfdd, 0xedb9b479, 0xa4db52ca, 0x136f296e, 0x361e9fac, 0x81aae408, 0xc8c802bb, 0x7f7c791f, 0x822b6f3f, 0x359f149b, 0x7cfdf228, 0xcb49898c, 0xee383f4e, 0x598c44ea, 0x10eea259, 0xa75ad9fd, 0x7bfee446, 0xcc4a9fe2, 0x85287951, 0x329c02f5, 0x17edb437, 0xa059cf93, 0xe93b2920, 0x5e8f5284, 0xa3d844a4, 0x146c3f00, 0x5d0ed9b3, 0xeabaa217, 0xcfcb14d5, 0x787f6f71, 0x311d89c2, 0x86a9f266, ], [ 0x00000000, 0x5c24e95c, 0xb849d2b8, 0xe46d3be4, 0xe12dcf2f, 0xbd092673, 0x59641d97, 0x0540f4cb, 0x53e5f401, 0x0fc11d5d, 0xebac26b9, 0xb788cfe5, 0xb2c83b2e, 0xeeecd272, 0x0a81e996, 0x56a500ca, 0xa7cbe802, 0xfbef015e, 0x1f823aba, 0x43a6d3e6, 0x46e6272d, 0x1ac2ce71, 0xfeaff595, 0xa28b1cc9, 0xf42e1c03, 0xa80af55f, 0x4c67cebb, 0x104327e7, 0x1503d32c, 0x49273a70, 0xad4a0194, 0xf16ee8c8, 0xde29ba5b, 0x820d5307, 0x666068e3, 0x3a4481bf, 0x3f047574, 0x63209c28, 0x874da7cc, 0xdb694e90, 0x8dcc4e5a, 0xd1e8a706, 0x35859ce2, 0x69a175be, 0x6ce18175, 0x30c56829, 0xd4a853cd, 0x888cba91, 0x79e25259, 0x25c6bb05, 0xc1ab80e1, 0x9d8f69bd, 0x98cf9d76, 0xc4eb742a, 0x20864fce, 0x7ca2a692, 0x2a07a658, 0x76234f04, 0x924e74e0, 0xce6a9dbc, 0xcb2a6977, 0x970e802b, 0x7363bbcf, 0x2f475293, 0x2ded1ee9, 0x71c9f7b5, 0x95a4cc51, 0xc980250d, 0xccc0d1c6, 0x90e4389a, 0x7489037e, 0x28adea22, 0x7e08eae8, 0x222c03b4, 0xc6413850, 0x9a65d10c, 0x9f2525c7, 0xc301cc9b, 0x276cf77f, 0x7b481e23, 0x8a26f6eb, 0xd6021fb7, 0x326f2453, 0x6e4bcd0f, 0x6b0b39c4, 0x372fd098, 0xd342eb7c, 0x8f660220, 0xd9c302ea, 0x85e7ebb6, 0x618ad052, 0x3dae390e, 0x38eecdc5, 0x64ca2499, 0x80a71f7d, 0xdc83f621, 0xf3c4a4b2, 0xafe04dee, 0x4b8d760a, 0x17a99f56, 0x12e96b9d, 0x4ecd82c1, 0xaaa0b925, 0xf6845079, 0xa02150b3, 0xfc05b9ef, 0x1868820b, 0x444c6b57, 0x410c9f9c, 0x1d2876c0, 0xf9454d24, 0xa561a478, 0x540f4cb0, 0x082ba5ec, 0xec469e08, 0xb0627754, 0xb522839f, 0xe9066ac3, 0x0d6b5127, 0x514fb87b, 0x07eab8b1, 0x5bce51ed, 0xbfa36a09, 0xe3878355, 0xe6c7779e, 0xbae39ec2, 0x5e8ea526, 0x02aa4c7a, 0x5bda3dd2, 0x07fed48e, 0xe393ef6a, 0xbfb70636, 0xbaf7f2fd, 0xe6d31ba1, 0x02be2045, 0x5e9ac919, 0x083fc9d3, 0x541b208f, 0xb0761b6b, 0xec52f237, 0xe91206fc, 0xb536efa0, 0x515bd444, 0x0d7f3d18, 0xfc11d5d0, 0xa0353c8c, 0x44580768, 0x187cee34, 0x1d3c1aff, 0x4118f3a3, 0xa575c847, 0xf951211b, 0xaff421d1, 0xf3d0c88d, 0x17bdf369, 0x4b991a35, 0x4ed9eefe, 0x12fd07a2, 0xf6903c46, 0xaab4d51a, 0x85f38789, 0xd9d76ed5, 0x3dba5531, 0x619ebc6d, 0x64de48a6, 0x38faa1fa, 0xdc979a1e, 0x80b37342, 0xd6167388, 0x8a329ad4, 0x6e5fa130, 0x327b486c, 0x373bbca7, 0x6b1f55fb, 0x8f726e1f, 0xd3568743, 0x22386f8b, 0x7e1c86d7, 0x9a71bd33, 0xc655546f, 0xc315a0a4, 0x9f3149f8, 0x7b5c721c, 0x27789b40, 0x71dd9b8a, 0x2df972d6, 0xc9944932, 0x95b0a06e, 0x90f054a5, 0xccd4bdf9, 0x28b9861d, 0x749d6f41, 0x7637233b, 0x2a13ca67, 0xce7ef183, 0x925a18df, 0x971aec14, 0xcb3e0548, 0x2f533eac, 0x7377d7f0, 0x25d2d73a, 0x79f63e66, 0x9d9b0582, 0xc1bfecde, 0xc4ff1815, 0x98dbf149, 0x7cb6caad, 0x209223f1, 0xd1fccb39, 0x8dd82265, 0x69b51981, 0x3591f0dd, 0x30d10416, 0x6cf5ed4a, 0x8898d6ae, 0xd4bc3ff2, 0x82193f38, 0xde3dd664, 0x3a50ed80, 0x667404dc, 0x6334f017, 0x3f10194b, 0xdb7d22af, 0x8759cbf3, 0xa81e9960, 0xf43a703c, 0x10574bd8, 0x4c73a284, 0x4933564f, 0x1517bf13, 0xf17a84f7, 0xad5e6dab, 0xfbfb6d61, 0xa7df843d, 0x43b2bfd9, 0x1f965685, 0x1ad6a24e, 0x46f24b12, 0xa29f70f6, 0xfebb99aa, 0x0fd57162, 0x53f1983e, 0xb79ca3da, 0xebb84a86, 0xeef8be4d, 0xb2dc5711, 0x56b16cf5, 0x0a9585a9, 0x5c308563, 0x00146c3f, 0xe47957db, 0xb85dbe87, 0xbd1d4a4c, 0xe139a310, 0x055498f4, 0x597071a8, ], [ 0x00000000, 0x50428a9c, 0xa0851538, 0xf0c79fa4, 0xd0b4402f, 0x80f6cab3, 0x70315517, 0x2073df8b, 0x30d6ea01, 0x6094609d, 0x9053ff39, 0xc01175a5, 0xe062aa2e, 0xb02020b2, 0x40e7bf16, 0x10a5358a, 0x61add402, 0x31ef5e9e, 0xc128c13a, 0x916a4ba6, 0xb119942d, 0xe15b1eb1, 0x119c8115, 0x41de0b89, 0x517b3e03, 0x0139b49f, 0xf1fe2b3b, 0xa1bca1a7, 0x81cf7e2c, 0xd18df4b0, 0x214a6b14, 0x7108e188, 0xc35ba804, 0x93192298, 0x63debd3c, 0x339c37a0, 0x13efe82b, 0x43ad62b7, 0xb36afd13, 0xe328778f, 0xf38d4205, 0xa3cfc899, 0x5308573d, 0x034adda1, 0x2339022a, 0x737b88b6, 0x83bc1712, 0xd3fe9d8e, 0xa2f67c06, 0xf2b4f69a, 0x0273693e, 0x5231e3a2, 0x72423c29, 0x2200b6b5, 0xd2c72911, 0x8285a38d, 0x92209607, 0xc2621c9b, 0x32a5833f, 0x62e709a3, 0x4294d628, 0x12d65cb4, 0xe211c310, 0xb253498c, 0x17093a57, 0x474bb0cb, 0xb78c2f6f, 0xe7cea5f3, 0xc7bd7a78, 0x97fff0e4, 0x67386f40, 0x377ae5dc, 0x27dfd056, 0x779d5aca, 0x875ac56e, 0xd7184ff2, 0xf76b9079, 0xa7291ae5, 0x57ee8541, 0x07ac0fdd, 0x76a4ee55, 0x26e664c9, 0xd621fb6d, 0x866371f1, 0xa610ae7a, 0xf65224e6, 0x0695bb42, 0x56d731de, 0x46720454, 0x16308ec8, 0xe6f7116c, 0xb6b59bf0, 0x96c6447b, 0xc684cee7, 0x36435143, 0x6601dbdf, 0xd4529253, 0x841018cf, 0x74d7876b, 0x24950df7, 0x04e6d27c, 0x54a458e0, 0xa463c744, 0xf4214dd8, 0xe4847852, 0xb4c6f2ce, 0x44016d6a, 0x1443e7f6, 0x3430387d, 0x6472b2e1, 0x94b52d45, 0xc4f7a7d9, 0xb5ff4651, 0xe5bdcccd, 0x157a5369, 0x4538d9f5, 0x654b067e, 0x35098ce2, 0xc5ce1346, 0x958c99da, 0x8529ac50, 0xd56b26cc, 0x25acb968, 0x75ee33f4, 0x559dec7f, 0x05df66e3, 0xf518f947, 0xa55a73db, 0x2e1274ae, 0x7e50fe32, 0x8e976196, 0xded5eb0a, 0xfea63481, 0xaee4be1d, 0x5e2321b9, 0x0e61ab25, 0x1ec49eaf, 0x4e861433, 0xbe418b97, 0xee03010b, 0xce70de80, 0x9e32541c, 0x6ef5cbb8, 0x3eb74124, 0x4fbfa0ac, 0x1ffd2a30, 0xef3ab594, 0xbf783f08, 0x9f0be083, 0xcf496a1f, 0x3f8ef5bb, 0x6fcc7f27, 0x7f694aad, 0x2f2bc031, 0xdfec5f95, 0x8faed509, 0xafdd0a82, 0xff9f801e, 0x0f581fba, 0x5f1a9526, 0xed49dcaa, 0xbd0b5636, 0x4dccc992, 0x1d8e430e, 0x3dfd9c85, 0x6dbf1619, 0x9d7889bd, 0xcd3a0321, 0xdd9f36ab, 0x8dddbc37, 0x7d1a2393, 0x2d58a90f, 0x0d2b7684, 0x5d69fc18, 0xadae63bc, 0xfdece920, 0x8ce408a8, 0xdca68234, 0x2c611d90, 0x7c23970c, 0x5c504887, 0x0c12c21b, 0xfcd55dbf, 0xac97d723, 0xbc32e2a9, 0xec706835, 0x1cb7f791, 0x4cf57d0d, 0x6c86a286, 0x3cc4281a, 0xcc03b7be, 0x9c413d22, 0x391b4ef9, 0x6959c465, 0x999e5bc1, 0xc9dcd15d, 0xe9af0ed6, 0xb9ed844a, 0x492a1bee, 0x19689172, 0x09cda4f8, 0x598f2e64, 0xa948b1c0, 0xf90a3b5c, 0xd979e4d7, 0x893b6e4b, 0x79fcf1ef, 0x29be7b73, 0x58b69afb, 0x08f41067, 0xf8338fc3, 0xa871055f, 0x8802dad4, 0xd8405048, 0x2887cfec, 0x78c54570, 0x686070fa, 0x3822fa66, 0xc8e565c2, 0x98a7ef5e, 0xb8d430d5, 0xe896ba49, 0x185125ed, 0x4813af71, 0xfa40e6fd, 0xaa026c61, 0x5ac5f3c5, 0x0a877959, 0x2af4a6d2, 0x7ab62c4e, 0x8a71b3ea, 0xda333976, 0xca960cfc, 0x9ad48660, 0x6a1319c4, 0x3a519358, 0x1a224cd3, 0x4a60c64f, 0xbaa759eb, 0xeae5d377, 0x9bed32ff, 0xcbafb863, 0x3b6827c7, 0x6b2aad5b, 0x4b5972d0, 0x1b1bf84c, 0xebdc67e8, 0xbb9eed74, 0xab3bd8fe, 0xfb795262, 0x0bbecdc6, 0x5bfc475a, 0x7b8f98d1, 0x2bcd124d, 0xdb0a8de9, 0x8b480775, ], ]; pub static CRC32_BASE91_D_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0x2bddd04f, 0x57bba09e, 0x7c6670d1, 0xaf77413c, 0x84aa9173, 0xf8cce1a2, 0xd31131ed, 0xf6dd1a53, 0xdd00ca1c, 0xa166bacd, 0x8abb6a82, 0x59aa5b6f, 0x72778b20, 0x0e11fbf1, 0x25cc2bbe, 0x4589ac8d, 0x6e547cc2, 0x12320c13, 0x39efdc5c, 0xeafeedb1, 0xc1233dfe, 0xbd454d2f, 0x96989d60, 0xb354b6de, 0x98896691, 0xe4ef1640, 0xcf32c60f, 0x1c23f7e2, 0x37fe27ad, 0x4b98577c, 0x60458733, 0x8b13591a, 0xa0ce8955, 0xdca8f984, 0xf77529cb, 0x24641826, 0x0fb9c869, 0x73dfb8b8, 0x580268f7, 0x7dce4349, 0x56139306, 0x2a75e3d7, 0x01a83398, 0xd2b90275, 0xf964d23a, 0x8502a2eb, 0xaedf72a4, 0xce9af597, 0xe54725d8, 0x99215509, 0xb2fc8546, 0x61edb4ab, 0x4a3064e4, 0x36561435, 0x1d8bc47a, 0x3847efc4, 0x139a3f8b, 0x6ffc4f5a, 0x44219f15, 0x9730aef8, 0xbced7eb7, 0xc08b0e66, 0xeb56de29, 0xbe152a1f, 0x95c8fa50, 0xe9ae8a81, 0xc2735ace, 0x11626b23, 0x3abfbb6c, 0x46d9cbbd, 0x6d041bf2, 0x48c8304c, 0x6315e003, 0x1f7390d2, 0x34ae409d, 0xe7bf7170, 0xcc62a13f, 0xb004d1ee, 0x9bd901a1, 0xfb9c8692, 0xd04156dd, 0xac27260c, 0x87faf643, 0x54ebc7ae, 0x7f3617e1, 0x03506730, 0x288db77f, 0x0d419cc1, 0x269c4c8e, 0x5afa3c5f, 0x7127ec10, 0xa236ddfd, 0x89eb0db2, 0xf58d7d63, 0xde50ad2c, 0x35067305, 0x1edba34a, 0x62bdd39b, 0x496003d4, 0x9a713239, 0xb1ace276, 0xcdca92a7, 0xe61742e8, 0xc3db6956, 0xe806b919, 0x9460c9c8, 0xbfbd1987, 0x6cac286a, 0x4771f825, 0x3b1788f4, 0x10ca58bb, 0x708fdf88, 0x5b520fc7, 0x27347f16, 0x0ce9af59, 0xdff89eb4, 0xf4254efb, 0x88433e2a, 0xa39eee65, 0x8652c5db, 0xad8f1594, 0xd1e96545, 0xfa34b50a, 0x292584e7, 0x02f854a8, 0x7e9e2479, 0x5543f436, 0xd419cc15, 0xffc41c5a, 0x83a26c8b, 0xa87fbcc4, 0x7b6e8d29, 0x50b35d66, 0x2cd52db7, 0x0708fdf8, 0x22c4d646, 0x09190609, 0x757f76d8, 0x5ea2a697, 0x8db3977a, 0xa66e4735, 0xda0837e4, 0xf1d5e7ab, 0x91906098, 0xba4db0d7, 0xc62bc006, 0xedf61049, 0x3ee721a4, 0x153af1eb, 0x695c813a, 0x42815175, 0x674d7acb, 0x4c90aa84, 0x30f6da55, 0x1b2b0a1a, 0xc83a3bf7, 0xe3e7ebb8, 0x9f819b69, 0xb45c4b26, 0x5f0a950f, 0x74d74540, 0x08b13591, 0x236ce5de, 0xf07dd433, 0xdba0047c, 0xa7c674ad, 0x8c1ba4e2, 0xa9d78f5c, 0x820a5f13, 0xfe6c2fc2, 0xd5b1ff8d, 0x06a0ce60, 0x2d7d1e2f, 0x511b6efe, 0x7ac6beb1, 0x1a833982, 0x315ee9cd, 0x4d38991c, 0x66e54953, 0xb5f478be, 0x9e29a8f1, 0xe24fd820, 0xc992086f, 0xec5e23d1, 0xc783f39e, 0xbbe5834f, 0x90385300, 0x432962ed, 0x68f4b2a2, 0x1492c273, 0x3f4f123c, 0x6a0ce60a, 0x41d13645, 0x3db74694, 0x166a96db, 0xc57ba736, 0xeea67779, 0x92c007a8, 0xb91dd7e7, 0x9cd1fc59, 0xb70c2c16, 0xcb6a5cc7, 0xe0b78c88, 0x33a6bd65, 0x187b6d2a, 0x641d1dfb, 0x4fc0cdb4, 0x2f854a87, 0x04589ac8, 0x783eea19, 0x53e33a56, 0x80f20bbb, 0xab2fdbf4, 0xd749ab25, 0xfc947b6a, 0xd95850d4, 0xf285809b, 0x8ee3f04a, 0xa53e2005, 0x762f11e8, 0x5df2c1a7, 0x2194b176, 0x0a496139, 0xe11fbf10, 0xcac26f5f, 0xb6a41f8e, 0x9d79cfc1, 0x4e68fe2c, 0x65b52e63, 0x19d35eb2, 0x320e8efd, 0x17c2a543, 0x3c1f750c, 0x407905dd, 0x6ba4d592, 0xb8b5e47f, 0x93683430, 0xef0e44e1, 0xc4d394ae, 0xa496139d, 0x8f4bc3d2, 0xf32db303, 0xd8f0634c, 0x0be152a1, 0x203c82ee, 0x5c5af23f, 0x77872270, 0x524b09ce, 0x7996d981, 0x05f0a950, 0x2e2d791f, 0xfd3c48f2, 0xd6e198bd, 0xaa87e86c, 0x815a3823, ], [ 0x00000000, 0x9bf2dc71, 0x9fd620c9, 0x0424fcb8, 0x979fd9b9, 0x0c6d05c8, 0x0849f970, 0x93bb2501, 0x870c2b59, 0x1cfef728, 0x18da0b90, 0x8328d7e1, 0x1093f2e0, 0x8b612e91, 0x8f45d229, 0x14b70e58, 0xa62bce99, 0x3dd912e8, 0x39fdee50, 0xa20f3221, 0x31b41720, 0xaa46cb51, 0xae6237e9, 0x3590eb98, 0x2127e5c0, 0xbad539b1, 0xbef1c509, 0x25031978, 0xb6b83c79, 0x2d4ae008, 0x296e1cb0, 0xb29cc0c1, 0xe4640519, 0x7f96d968, 0x7bb225d0, 0xe040f9a1, 0x73fbdca0, 0xe80900d1, 0xec2dfc69, 0x77df2018, 0x63682e40, 0xf89af231, 0xfcbe0e89, 0x674cd2f8, 0xf4f7f7f9, 0x6f052b88, 0x6b21d730, 0xf0d30b41, 0x424fcb80, 0xd9bd17f1, 0xdd99eb49, 0x466b3738, 0xd5d01239, 0x4e22ce48, 0x4a0632f0, 0xd1f4ee81, 0xc543e0d9, 0x5eb13ca8, 0x5a95c010, 0xc1671c61, 0x52dc3960, 0xc92ee511, 0xcd0a19a9, 0x56f8c5d8, 0x60fb9219, 0xfb094e68, 0xff2db2d0, 0x64df6ea1, 0xf7644ba0, 0x6c9697d1, 0x68b26b69, 0xf340b718, 0xe7f7b940, 0x7c056531, 0x78219989, 0xe3d345f8, 0x706860f9, 0xeb9abc88, 0xefbe4030, 0x744c9c41, 0xc6d05c80, 0x5d2280f1, 0x59067c49, 0xc2f4a038, 0x514f8539, 0xcabd5948, 0xce99a5f0, 0x556b7981, 0x41dc77d9, 0xda2eaba8, 0xde0a5710, 0x45f88b61, 0xd643ae60, 0x4db17211, 0x49958ea9, 0xd26752d8, 0x849f9700, 0x1f6d4b71, 0x1b49b7c9, 0x80bb6bb8, 0x13004eb9, 0x88f292c8, 0x8cd66e70, 0x1724b201, 0x0393bc59, 0x98616028, 0x9c459c90, 0x07b740e1, 0x940c65e0, 0x0ffeb991, 0x0bda4529, 0x90289958, 0x22b45999, 0xb94685e8, 0xbd627950, 0x2690a521, 0xb52b8020, 0x2ed95c51, 0x2afda0e9, 0xb10f7c98, 0xa5b872c0, 0x3e4aaeb1, 0x3a6e5209, 0xa19c8e78, 0x3227ab79, 0xa9d57708, 0xadf18bb0, 0x360357c1, 0xc1f72432, 0x5a05f843, 0x5e2104fb, 0xc5d3d88a, 0x5668fd8b, 0xcd9a21fa, 0xc9bedd42, 0x524c0133, 0x46fb0f6b, 0xdd09d31a, 0xd92d2fa2, 0x42dff3d3, 0xd164d6d2, 0x4a960aa3, 0x4eb2f61b, 0xd5402a6a, 0x67dceaab, 0xfc2e36da, 0xf80aca62, 0x63f81613, 0xf0433312, 0x6bb1ef63, 0x6f9513db, 0xf467cfaa, 0xe0d0c1f2, 0x7b221d83, 0x7f06e13b, 0xe4f43d4a, 0x774f184b, 0xecbdc43a, 0xe8993882, 0x736be4f3, 0x2593212b, 0xbe61fd5a, 0xba4501e2, 0x21b7dd93, 0xb20cf892, 0x29fe24e3, 0x2ddad85b, 0xb628042a, 0xa29f0a72, 0x396dd603, 0x3d492abb, 0xa6bbf6ca, 0x3500d3cb, 0xaef20fba, 0xaad6f302, 0x31242f73, 0x83b8efb2, 0x184a33c3, 0x1c6ecf7b, 0x879c130a, 0x1427360b, 0x8fd5ea7a, 0x8bf116c2, 0x1003cab3, 0x04b4c4eb, 0x9f46189a, 0x9b62e422, 0x00903853, 0x932b1d52, 0x08d9c123, 0x0cfd3d9b, 0x970fe1ea, 0xa10cb62b, 0x3afe6a5a, 0x3eda96e2, 0xa5284a93, 0x36936f92, 0xad61b3e3, 0xa9454f5b, 0x32b7932a, 0x26009d72, 0xbdf24103, 0xb9d6bdbb, 0x222461ca, 0xb19f44cb, 0x2a6d98ba, 0x2e496402, 0xb5bbb873, 0x072778b2, 0x9cd5a4c3, 0x98f1587b, 0x0303840a, 0x90b8a10b, 0x0b4a7d7a, 0x0f6e81c2, 0x949c5db3, 0x802b53eb, 0x1bd98f9a, 0x1ffd7322, 0x840faf53, 0x17b48a52, 0x8c465623, 0x8862aa9b, 0x139076ea, 0x4568b332, 0xde9a6f43, 0xdabe93fb, 0x414c4f8a, 0xd2f76a8b, 0x4905b6fa, 0x4d214a42, 0xd6d39633, 0xc264986b, 0x5996441a, 0x5db2b8a2, 0xc64064d3, 0x55fb41d2, 0xce099da3, 0xca2d611b, 0x51dfbd6a, 0xe3437dab, 0x78b1a1da, 0x7c955d62, 0xe7678113, 0x74dca412, 0xef2e7863, 0xeb0a84db, 0x70f858aa, 0x644f56f2, 0xffbd8a83, 0xfb99763b, 0x606baa4a, 0xf3d08f4b, 0x6822533a, 0x6c06af82, 0xf7f473f3, ], [ 0x00000000, 0x5bc9fd1b, 0xb793fa36, 0xec5a072d, 0xc7146c47, 0x9cdd915c, 0x70879671, 0x2b4e6b6a, 0x261b40a5, 0x7dd2bdbe, 0x9188ba93, 0xca414788, 0xe10f2ce2, 0xbac6d1f9, 0x569cd6d4, 0x0d552bcf, 0x4c36814a, 0x17ff7c51, 0xfba57b7c, 0xa06c8667, 0x8b22ed0d, 0xd0eb1016, 0x3cb1173b, 0x6778ea20, 0x6a2dc1ef, 0x31e43cf4, 0xddbe3bd9, 0x8677c6c2, 0xad39ada8, 0xf6f050b3, 0x1aaa579e, 0x4163aa85, 0x986d0294, 0xc3a4ff8f, 0x2ffef8a2, 0x743705b9, 0x5f796ed3, 0x04b093c8, 0xe8ea94e5, 0xb32369fe, 0xbe764231, 0xe5bfbf2a, 0x09e5b807, 0x522c451c, 0x79622e76, 0x22abd36d, 0xcef1d440, 0x9538295b, 0xd45b83de, 0x8f927ec5, 0x63c879e8, 0x380184f3, 0x134fef99, 0x48861282, 0xa4dc15af, 0xff15e8b4, 0xf240c37b, 0xa9893e60, 0x45d3394d, 0x1e1ac456, 0x3554af3c, 0x6e9d5227, 0x82c7550a, 0xd90ea811, 0x98e99d03, 0xc3206018, 0x2f7a6735, 0x74b39a2e, 0x5ffdf144, 0x04340c5f, 0xe86e0b72, 0xb3a7f669, 0xbef2dda6, 0xe53b20bd, 0x09612790, 0x52a8da8b, 0x79e6b1e1, 0x222f4cfa, 0xce754bd7, 0x95bcb6cc, 0xd4df1c49, 0x8f16e152, 0x634ce67f, 0x38851b64, 0x13cb700e, 0x48028d15, 0xa4588a38, 0xff917723, 0xf2c45cec, 0xa90da1f7, 0x4557a6da, 0x1e9e5bc1, 0x35d030ab, 0x6e19cdb0, 0x8243ca9d, 0xd98a3786, 0x00849f97, 0x5b4d628c, 0xb71765a1, 0xecde98ba, 0xc790f3d0, 0x9c590ecb, 0x700309e6, 0x2bcaf4fd, 0x269fdf32, 0x7d562229, 0x910c2504, 0xcac5d81f, 0xe18bb375, 0xba424e6e, 0x56184943, 0x0dd1b458, 0x4cb21edd, 0x177be3c6, 0xfb21e4eb, 0xa0e819f0, 0x8ba6729a, 0xd06f8f81, 0x3c3588ac, 0x67fc75b7, 0x6aa95e78, 0x3160a363, 0xdd3aa44e, 0x86f35955, 0xadbd323f, 0xf674cf24, 0x1a2ec809, 0x41e73512, 0x99e0a22d, 0xc2295f36, 0x2e73581b, 0x75baa500, 0x5ef4ce6a, 0x053d3371, 0xe967345c, 0xb2aec947, 0xbffbe288, 0xe4321f93, 0x086818be, 0x53a1e5a5, 0x78ef8ecf, 0x232673d4, 0xcf7c74f9, 0x94b589e2, 0xd5d62367, 0x8e1fde7c, 0x6245d951, 0x398c244a, 0x12c24f20, 0x490bb23b, 0xa551b516, 0xfe98480d, 0xf3cd63c2, 0xa8049ed9, 0x445e99f4, 0x1f9764ef, 0x34d90f85, 0x6f10f29e, 0x834af5b3, 0xd88308a8, 0x018da0b9, 0x5a445da2, 0xb61e5a8f, 0xedd7a794, 0xc699ccfe, 0x9d5031e5, 0x710a36c8, 0x2ac3cbd3, 0x2796e01c, 0x7c5f1d07, 0x90051a2a, 0xcbcce731, 0xe0828c5b, 0xbb4b7140, 0x5711766d, 0x0cd88b76, 0x4dbb21f3, 0x1672dce8, 0xfa28dbc5, 0xa1e126de, 0x8aaf4db4, 0xd166b0af, 0x3d3cb782, 0x66f54a99, 0x6ba06156, 0x30699c4d, 0xdc339b60, 0x87fa667b, 0xacb40d11, 0xf77df00a, 0x1b27f727, 0x40ee0a3c, 0x01093f2e, 0x5ac0c235, 0xb69ac518, 0xed533803, 0xc61d5369, 0x9dd4ae72, 0x718ea95f, 0x2a475444, 0x27127f8b, 0x7cdb8290, 0x908185bd, 0xcb4878a6, 0xe00613cc, 0xbbcfeed7, 0x5795e9fa, 0x0c5c14e1, 0x4d3fbe64, 0x16f6437f, 0xfaac4452, 0xa165b949, 0x8a2bd223, 0xd1e22f38, 0x3db82815, 0x6671d50e, 0x6b24fec1, 0x30ed03da, 0xdcb704f7, 0x877ef9ec, 0xac309286, 0xf7f96f9d, 0x1ba368b0, 0x406a95ab, 0x99643dba, 0xc2adc0a1, 0x2ef7c78c, 0x753e3a97, 0x5e7051fd, 0x05b9ace6, 0xe9e3abcb, 0xb22a56d0, 0xbf7f7d1f, 0xe4b68004, 0x08ec8729, 0x53257a32, 0x786b1158, 0x23a2ec43, 0xcff8eb6e, 0x94311675, 0xd552bcf0, 0x8e9b41eb, 0x62c146c6, 0x3908bbdd, 0x1246d0b7, 0x498f2dac, 0xa5d52a81, 0xfe1cd79a, 0xf349fc55, 0xa880014e, 0x44da0663, 0x1f13fb78, 0x345d9012, 0x6f946d09, 0x83ce6a24, 0xd807973f, ], [ 0x00000000, 0xcf690ff2, 0x36e187cf, 0xf988883d, 0x6dc30f9e, 0xa2aa006c, 0x5b228851, 0x944b87a3, 0xdb861f3c, 0x14ef10ce, 0xed6798f3, 0x220e9701, 0xb64510a2, 0x792c1f50, 0x80a4976d, 0x4fcd989f, 0x1f3fa653, 0xd056a9a1, 0x29de219c, 0xe6b72e6e, 0x72fca9cd, 0xbd95a63f, 0x441d2e02, 0x8b7421f0, 0xc4b9b96f, 0x0bd0b69d, 0xf2583ea0, 0x3d313152, 0xa97ab6f1, 0x6613b903, 0x9f9b313e, 0x50f23ecc, 0x3e7f4ca6, 0xf1164354, 0x089ecb69, 0xc7f7c49b, 0x53bc4338, 0x9cd54cca, 0x655dc4f7, 0xaa34cb05, 0xe5f9539a, 0x2a905c68, 0xd318d455, 0x1c71dba7, 0x883a5c04, 0x475353f6, 0xbedbdbcb, 0x71b2d439, 0x2140eaf5, 0xee29e507, 0x17a16d3a, 0xd8c862c8, 0x4c83e56b, 0x83eaea99, 0x7a6262a4, 0xb50b6d56, 0xfac6f5c9, 0x35affa3b, 0xcc277206, 0x034e7df4, 0x9705fa57, 0x586cf5a5, 0xa1e47d98, 0x6e8d726a, 0x7cfe994c, 0xb39796be, 0x4a1f1e83, 0x85761171, 0x113d96d2, 0xde549920, 0x27dc111d, 0xe8b51eef, 0xa7788670, 0x68118982, 0x919901bf, 0x5ef00e4d, 0xcabb89ee, 0x05d2861c, 0xfc5a0e21, 0x333301d3, 0x63c13f1f, 0xaca830ed, 0x5520b8d0, 0x9a49b722, 0x0e023081, 0xc16b3f73, 0x38e3b74e, 0xf78ab8bc, 0xb8472023, 0x772e2fd1, 0x8ea6a7ec, 0x41cfa81e, 0xd5842fbd, 0x1aed204f, 0xe365a872, 0x2c0ca780, 0x4281d5ea, 0x8de8da18, 0x74605225, 0xbb095dd7, 0x2f42da74, 0xe02bd586, 0x19a35dbb, 0xd6ca5249, 0x9907cad6, 0x566ec524, 0xafe64d19, 0x608f42eb, 0xf4c4c548, 0x3badcaba, 0xc2254287, 0x0d4c4d75, 0x5dbe73b9, 0x92d77c4b, 0x6b5ff476, 0xa436fb84, 0x307d7c27, 0xff1473d5, 0x069cfbe8, 0xc9f5f41a, 0x86386c85, 0x49516377, 0xb0d9eb4a, 0x7fb0e4b8, 0xebfb631b, 0x24926ce9, 0xdd1ae4d4, 0x1273eb26, 0xf9fd3298, 0x36943d6a, 0xcf1cb557, 0x0075baa5, 0x943e3d06, 0x5b5732f4, 0xa2dfbac9, 0x6db6b53b, 0x227b2da4, 0xed122256, 0x149aaa6b, 0xdbf3a599, 0x4fb8223a, 0x80d12dc8, 0x7959a5f5, 0xb630aa07, 0xe6c294cb, 0x29ab9b39, 0xd0231304, 0x1f4a1cf6, 0x8b019b55, 0x446894a7, 0xbde01c9a, 0x72891368, 0x3d448bf7, 0xf22d8405, 0x0ba50c38, 0xc4cc03ca, 0x50878469, 0x9fee8b9b, 0x666603a6, 0xa90f0c54, 0xc7827e3e, 0x08eb71cc, 0xf163f9f1, 0x3e0af603, 0xaa4171a0, 0x65287e52, 0x9ca0f66f, 0x53c9f99d, 0x1c046102, 0xd36d6ef0, 0x2ae5e6cd, 0xe58ce93f, 0x71c76e9c, 0xbeae616e, 0x4726e953, 0x884fe6a1, 0xd8bdd86d, 0x17d4d79f, 0xee5c5fa2, 0x21355050, 0xb57ed7f3, 0x7a17d801, 0x839f503c, 0x4cf65fce, 0x033bc751, 0xcc52c8a3, 0x35da409e, 0xfab34f6c, 0x6ef8c8cf, 0xa191c73d, 0x58194f00, 0x977040f2, 0x8503abd4, 0x4a6aa426, 0xb3e22c1b, 0x7c8b23e9, 0xe8c0a44a, 0x27a9abb8, 0xde212385, 0x11482c77, 0x5e85b4e8, 0x91ecbb1a, 0x68643327, 0xa70d3cd5, 0x3346bb76, 0xfc2fb484, 0x05a73cb9, 0xcace334b, 0x9a3c0d87, 0x55550275, 0xacdd8a48, 0x63b485ba, 0xf7ff0219, 0x38960deb, 0xc11e85d6, 0x0e778a24, 0x41ba12bb, 0x8ed31d49, 0x775b9574, 0xb8329a86, 0x2c791d25, 0xe31012d7, 0x1a989aea, 0xd5f19518, 0xbb7ce772, 0x7415e880, 0x8d9d60bd, 0x42f46f4f, 0xd6bfe8ec, 0x19d6e71e, 0xe05e6f23, 0x2f3760d1, 0x60faf84e, 0xaf93f7bc, 0x561b7f81, 0x99727073, 0x0d39f7d0, 0xc250f822, 0x3bd8701f, 0xf4b17fed, 0xa4434121, 0x6b2a4ed3, 0x92a2c6ee, 0x5dcbc91c, 0xc9804ebf, 0x06e9414d, 0xff61c970, 0x3008c682, 0x7fc55e1d, 0xb0ac51ef, 0x4924d9d2, 0x864dd620, 0x12065183, 0xdd6f5e71, 0x24e7d64c, 0xeb8ed9be, ], [ 0x00000000, 0xf3e2da0c, 0x4ff62c33, 0xbc14f63f, 0x9fec5866, 0x6c0e826a, 0xd01a7455, 0x23f8ae59, 0x97eb28e7, 0x6409f2eb, 0xd81d04d4, 0x2bffded8, 0x08077081, 0xfbe5aa8d, 0x47f15cb2, 0xb41386be, 0x87e5c9e5, 0x740713e9, 0xc813e5d6, 0x3bf13fda, 0x18099183, 0xebeb4b8f, 0x57ffbdb0, 0xa41d67bc, 0x100ee102, 0xe3ec3b0e, 0x5ff8cd31, 0xac1a173d, 0x8fe2b964, 0x7c006368, 0xc0149557, 0x33f64f5b, 0xa7f80be1, 0x541ad1ed, 0xe80e27d2, 0x1becfdde, 0x38145387, 0xcbf6898b, 0x77e27fb4, 0x8400a5b8, 0x30132306, 0xc3f1f90a, 0x7fe50f35, 0x8c07d539, 0xafff7b60, 0x5c1da16c, 0xe0095753, 0x13eb8d5f, 0x201dc204, 0xd3ff1808, 0x6febee37, 0x9c09343b, 0xbff19a62, 0x4c13406e, 0xf007b651, 0x03e56c5d, 0xb7f6eae3, 0x441430ef, 0xf800c6d0, 0x0be21cdc, 0x281ab285, 0xdbf86889, 0x67ec9eb6, 0x940e44ba, 0xe7c38fe9, 0x142155e5, 0xa835a3da, 0x5bd779d6, 0x782fd78f, 0x8bcd0d83, 0x37d9fbbc, 0xc43b21b0, 0x7028a70e, 0x83ca7d02, 0x3fde8b3d, 0xcc3c5131, 0xefc4ff68, 0x1c262564, 0xa032d35b, 0x53d00957, 0x6026460c, 0x93c49c00, 0x2fd06a3f, 0xdc32b033, 0xffca1e6a, 0x0c28c466, 0xb03c3259, 0x43dee855, 0xf7cd6eeb, 0x042fb4e7, 0xb83b42d8, 0x4bd998d4, 0x6821368d, 0x9bc3ec81, 0x27d71abe, 0xd435c0b2, 0x403b8408, 0xb3d95e04, 0x0fcda83b, 0xfc2f7237, 0xdfd7dc6e, 0x2c350662, 0x9021f05d, 0x63c32a51, 0xd7d0acef, 0x243276e3, 0x982680dc, 0x6bc45ad0, 0x483cf489, 0xbbde2e85, 0x07cad8ba, 0xf42802b6, 0xc7de4ded, 0x343c97e1, 0x882861de, 0x7bcabbd2, 0x5832158b, 0xabd0cf87, 0x17c439b8, 0xe426e3b4, 0x5035650a, 0xa3d7bf06, 0x1fc34939, 0xec219335, 0xcfd93d6c, 0x3c3be760, 0x802f115f, 0x73cdcb53, 0x67b487f9, 0x94565df5, 0x2842abca, 0xdba071c6, 0xf858df9f, 0x0bba0593, 0xb7aef3ac, 0x444c29a0, 0xf05faf1e, 0x03bd7512, 0xbfa9832d, 0x4c4b5921, 0x6fb3f778, 0x9c512d74, 0x2045db4b, 0xd3a70147, 0xe0514e1c, 0x13b39410, 0xafa7622f, 0x5c45b823, 0x7fbd167a, 0x8c5fcc76, 0x304b3a49, 0xc3a9e045, 0x77ba66fb, 0x8458bcf7, 0x384c4ac8, 0xcbae90c4, 0xe8563e9d, 0x1bb4e491, 0xa7a012ae, 0x5442c8a2, 0xc04c8c18, 0x33ae5614, 0x8fbaa02b, 0x7c587a27, 0x5fa0d47e, 0xac420e72, 0x1056f84d, 0xe3b42241, 0x57a7a4ff, 0xa4457ef3, 0x185188cc, 0xebb352c0, 0xc84bfc99, 0x3ba92695, 0x87bdd0aa, 0x745f0aa6, 0x47a945fd, 0xb44b9ff1, 0x085f69ce, 0xfbbdb3c2, 0xd8451d9b, 0x2ba7c797, 0x97b331a8, 0x6451eba4, 0xd0426d1a, 0x23a0b716, 0x9fb44129, 0x6c569b25, 0x4fae357c, 0xbc4cef70, 0x0058194f, 0xf3bac343, 0x80770810, 0x7395d21c, 0xcf812423, 0x3c63fe2f, 0x1f9b5076, 0xec798a7a, 0x506d7c45, 0xa38fa649, 0x179c20f7, 0xe47efafb, 0x586a0cc4, 0xab88d6c8, 0x88707891, 0x7b92a29d, 0xc78654a2, 0x34648eae, 0x0792c1f5, 0xf4701bf9, 0x4864edc6, 0xbb8637ca, 0x987e9993, 0x6b9c439f, 0xd788b5a0, 0x246a6fac, 0x9079e912, 0x639b331e, 0xdf8fc521, 0x2c6d1f2d, 0x0f95b174, 0xfc776b78, 0x40639d47, 0xb381474b, 0x278f03f1, 0xd46dd9fd, 0x68792fc2, 0x9b9bf5ce, 0xb8635b97, 0x4b81819b, 0xf79577a4, 0x0477ada8, 0xb0642b16, 0x4386f11a, 0xff920725, 0x0c70dd29, 0x2f887370, 0xdc6aa97c, 0x607e5f43, 0x939c854f, 0xa06aca14, 0x53881018, 0xef9ce627, 0x1c7e3c2b, 0x3f869272, 0xcc64487e, 0x7070be41, 0x8392644d, 0x3781e2f3, 0xc46338ff, 0x7877cec0, 0x8b9514cc, 0xa86dba95, 0x5b8f6099, 0xe79b96a6, 0x14794caa, ], [ 0x00000000, 0x5959b9b5, 0xb2b3736a, 0xebeacadf, 0xcd557eff, 0x940cc74a, 0x7fe60d95, 0x26bfb420, 0x329965d5, 0x6bc0dc60, 0x802a16bf, 0xd973af0a, 0xffcc1b2a, 0xa695a29f, 0x4d7f6840, 0x1426d1f5, 0x6532cbaa, 0x3c6b721f, 0xd781b8c0, 0x8ed80175, 0xa867b555, 0xf13e0ce0, 0x1ad4c63f, 0x438d7f8a, 0x57abae7f, 0x0ef217ca, 0xe518dd15, 0xbc4164a0, 0x9afed080, 0xc3a76935, 0x284da3ea, 0x71141a5f, 0xca659754, 0x933c2ee1, 0x78d6e43e, 0x218f5d8b, 0x0730e9ab, 0x5e69501e, 0xb5839ac1, 0xecda2374, 0xf8fcf281, 0xa1a54b34, 0x4a4f81eb, 0x1316385e, 0x35a98c7e, 0x6cf035cb, 0x871aff14, 0xde4346a1, 0xaf575cfe, 0xf60ee54b, 0x1de42f94, 0x44bd9621, 0x62022201, 0x3b5b9bb4, 0xd0b1516b, 0x89e8e8de, 0x9dce392b, 0xc497809e, 0x2f7d4a41, 0x7624f3f4, 0x509b47d4, 0x09c2fe61, 0xe22834be, 0xbb718d0b, 0x3cf8b683, 0x65a10f36, 0x8e4bc5e9, 0xd7127c5c, 0xf1adc87c, 0xa8f471c9, 0x431ebb16, 0x1a4702a3, 0x0e61d356, 0x57386ae3, 0xbcd2a03c, 0xe58b1989, 0xc334ada9, 0x9a6d141c, 0x7187dec3, 0x28de6776, 0x59ca7d29, 0x0093c49c, 0xeb790e43, 0xb220b7f6, 0x949f03d6, 0xcdc6ba63, 0x262c70bc, 0x7f75c909, 0x6b5318fc, 0x320aa149, 0xd9e06b96, 0x80b9d223, 0xa6066603, 0xff5fdfb6, 0x14b51569, 0x4decacdc, 0xf69d21d7, 0xafc49862, 0x442e52bd, 0x1d77eb08, 0x3bc85f28, 0x6291e69d, 0x897b2c42, 0xd02295f7, 0xc4044402, 0x9d5dfdb7, 0x76b73768, 0x2fee8edd, 0x09513afd, 0x50088348, 0xbbe24997, 0xe2bbf022, 0x93afea7d, 0xcaf653c8, 0x211c9917, 0x784520a2, 0x5efa9482, 0x07a32d37, 0xec49e7e8, 0xb5105e5d, 0xa1368fa8, 0xf86f361d, 0x1385fcc2, 0x4adc4577, 0x6c63f157, 0x353a48e2, 0xded0823d, 0x87893b88, 0x79f16d06, 0x20a8d4b3, 0xcb421e6c, 0x921ba7d9, 0xb4a413f9, 0xedfdaa4c, 0x06176093, 0x5f4ed926, 0x4b6808d3, 0x1231b166, 0xf9db7bb9, 0xa082c20c, 0x863d762c, 0xdf64cf99, 0x348e0546, 0x6dd7bcf3, 0x1cc3a6ac, 0x459a1f19, 0xae70d5c6, 0xf7296c73, 0xd196d853, 0x88cf61e6, 0x6325ab39, 0x3a7c128c, 0x2e5ac379, 0x77037acc, 0x9ce9b013, 0xc5b009a6, 0xe30fbd86, 0xba560433, 0x51bcceec, 0x08e57759, 0xb394fa52, 0xeacd43e7, 0x01278938, 0x587e308d, 0x7ec184ad, 0x27983d18, 0xcc72f7c7, 0x952b4e72, 0x810d9f87, 0xd8542632, 0x33beeced, 0x6ae75558, 0x4c58e178, 0x150158cd, 0xfeeb9212, 0xa7b22ba7, 0xd6a631f8, 0x8fff884d, 0x64154292, 0x3d4cfb27, 0x1bf34f07, 0x42aaf6b2, 0xa9403c6d, 0xf01985d8, 0xe43f542d, 0xbd66ed98, 0x568c2747, 0x0fd59ef2, 0x296a2ad2, 0x70339367, 0x9bd959b8, 0xc280e00d, 0x4509db85, 0x1c506230, 0xf7baa8ef, 0xaee3115a, 0x885ca57a, 0xd1051ccf, 0x3aefd610, 0x63b66fa5, 0x7790be50, 0x2ec907e5, 0xc523cd3a, 0x9c7a748f, 0xbac5c0af, 0xe39c791a, 0x0876b3c5, 0x512f0a70, 0x203b102f, 0x7962a99a, 0x92886345, 0xcbd1daf0, 0xed6e6ed0, 0xb437d765, 0x5fdd1dba, 0x0684a40f, 0x12a275fa, 0x4bfbcc4f, 0xa0110690, 0xf948bf25, 0xdff70b05, 0x86aeb2b0, 0x6d44786f, 0x341dc1da, 0x8f6c4cd1, 0xd635f564, 0x3ddf3fbb, 0x6486860e, 0x4239322e, 0x1b608b9b, 0xf08a4144, 0xa9d3f8f1, 0xbdf52904, 0xe4ac90b1, 0x0f465a6e, 0x561fe3db, 0x70a057fb, 0x29f9ee4e, 0xc2132491, 0x9b4a9d24, 0xea5e877b, 0xb3073ece, 0x58edf411, 0x01b44da4, 0x270bf984, 0x7e524031, 0x95b88aee, 0xcce1335b, 0xd8c7e2ae, 0x819e5b1b, 0x6a7491c4, 0x332d2871, 0x15929c51, 0x4ccb25e4, 0xa721ef3b, 0xfe78568e, ], [ 0x00000000, 0x9e70f148, 0x94d27abb, 0x0aa28bf3, 0x81976d5d, 0x1fe79c15, 0x154517e6, 0x8b35e6ae, 0xab1d4291, 0x356db3d9, 0x3fcf382a, 0xa1bfc962, 0x2a8a2fcc, 0xb4fade84, 0xbe585577, 0x2028a43f, 0xfe091d09, 0x6079ec41, 0x6adb67b2, 0xf4ab96fa, 0x7f9e7054, 0xe1ee811c, 0xeb4c0aef, 0x753cfba7, 0x55145f98, 0xcb64aed0, 0xc1c62523, 0x5fb6d46b, 0xd48332c5, 0x4af3c38d, 0x4051487e, 0xde21b936, 0x5421a239, 0xca515371, 0xc0f3d882, 0x5e8329ca, 0xd5b6cf64, 0x4bc63e2c, 0x4164b5df, 0xdf144497, 0xff3ce0a8, 0x614c11e0, 0x6bee9a13, 0xf59e6b5b, 0x7eab8df5, 0xe0db7cbd, 0xea79f74e, 0x74090606, 0xaa28bf30, 0x34584e78, 0x3efac58b, 0xa08a34c3, 0x2bbfd26d, 0xb5cf2325, 0xbf6da8d6, 0x211d599e, 0x0135fda1, 0x9f450ce9, 0x95e7871a, 0x0b977652, 0x80a290fc, 0x1ed261b4, 0x1470ea47, 0x8a001b0f, 0xa8434472, 0x3633b53a, 0x3c913ec9, 0xa2e1cf81, 0x29d4292f, 0xb7a4d867, 0xbd065394, 0x2376a2dc, 0x035e06e3, 0x9d2ef7ab, 0x978c7c58, 0x09fc8d10, 0x82c96bbe, 0x1cb99af6, 0x161b1105, 0x886be04d, 0x564a597b, 0xc83aa833, 0xc29823c0, 0x5ce8d288, 0xd7dd3426, 0x49adc56e, 0x430f4e9d, 0xdd7fbfd5, 0xfd571bea, 0x6327eaa2, 0x69856151, 0xf7f59019, 0x7cc076b7, 0xe2b087ff, 0xe8120c0c, 0x7662fd44, 0xfc62e64b, 0x62121703, 0x68b09cf0, 0xf6c06db8, 0x7df58b16, 0xe3857a5e, 0xe927f1ad, 0x775700e5, 0x577fa4da, 0xc90f5592, 0xc3adde61, 0x5ddd2f29, 0xd6e8c987, 0x489838cf, 0x423ab33c, 0xdc4a4274, 0x026bfb42, 0x9c1b0a0a, 0x96b981f9, 0x08c970b1, 0x83fc961f, 0x1d8c6757, 0x172eeca4, 0x895e1dec, 0xa976b9d3, 0x3706489b, 0x3da4c368, 0xa3d43220, 0x28e1d48e, 0xb69125c6, 0xbc33ae35, 0x22435f7d, 0xf8b510cf, 0x66c5e187, 0x6c676a74, 0xf2179b3c, 0x79227d92, 0xe7528cda, 0xedf00729, 0x7380f661, 0x53a8525e, 0xcdd8a316, 0xc77a28e5, 0x590ad9ad, 0xd23f3f03, 0x4c4fce4b, 0x46ed45b8, 0xd89db4f0, 0x06bc0dc6, 0x98ccfc8e, 0x926e777d, 0x0c1e8635, 0x872b609b, 0x195b91d3, 0x13f91a20, 0x8d89eb68, 0xada14f57, 0x33d1be1f, 0x397335ec, 0xa703c4a4, 0x2c36220a, 0xb246d342, 0xb8e458b1, 0x2694a9f9, 0xac94b2f6, 0x32e443be, 0x3846c84d, 0xa6363905, 0x2d03dfab, 0xb3732ee3, 0xb9d1a510, 0x27a15458, 0x0789f067, 0x99f9012f, 0x935b8adc, 0x0d2b7b94, 0x861e9d3a, 0x186e6c72, 0x12cce781, 0x8cbc16c9, 0x529dafff, 0xcced5eb7, 0xc64fd544, 0x583f240c, 0xd30ac2a2, 0x4d7a33ea, 0x47d8b819, 0xd9a84951, 0xf980ed6e, 0x67f01c26, 0x6d5297d5, 0xf322669d, 0x78178033, 0xe667717b, 0xecc5fa88, 0x72b50bc0, 0x50f654bd, 0xce86a5f5, 0xc4242e06, 0x5a54df4e, 0xd16139e0, 0x4f11c8a8, 0x45b3435b, 0xdbc3b213, 0xfbeb162c, 0x659be764, 0x6f396c97, 0xf1499ddf, 0x7a7c7b71, 0xe40c8a39, 0xeeae01ca, 0x70def082, 0xaeff49b4, 0x308fb8fc, 0x3a2d330f, 0xa45dc247, 0x2f6824e9, 0xb118d5a1, 0xbbba5e52, 0x25caaf1a, 0x05e20b25, 0x9b92fa6d, 0x9130719e, 0x0f4080d6, 0x84756678, 0x1a059730, 0x10a71cc3, 0x8ed7ed8b, 0x04d7f684, 0x9aa707cc, 0x90058c3f, 0x0e757d77, 0x85409bd9, 0x1b306a91, 0x1192e162, 0x8fe2102a, 0xafcab415, 0x31ba455d, 0x3b18ceae, 0xa5683fe6, 0x2e5dd948, 0xb02d2800, 0xba8fa3f3, 0x24ff52bb, 0xfadeeb8d, 0x64ae1ac5, 0x6e0c9136, 0xf07c607e, 0x7b4986d0, 0xe5397798, 0xef9bfc6b, 0x71eb0d23, 0x51c3a91c, 0xcfb35854, 0xc511d3a7, 0x5b6122ef, 0xd054c441, 0x4e243509, 0x4486befa, 0xdaf64fb2, ], [ 0x00000000, 0x485640bd, 0x90ac817a, 0xd8fac1c7, 0x896a9adf, 0xc13cda62, 0x19c61ba5, 0x51905b18, 0xbae6ad95, 0xf2b0ed28, 0x2a4a2cef, 0x621c6c52, 0x338c374a, 0x7bda77f7, 0xa320b630, 0xeb76f68d, 0xddfec301, 0x95a883bc, 0x4d52427b, 0x050402c6, 0x549459de, 0x1cc21963, 0xc438d8a4, 0x8c6e9819, 0x67186e94, 0x2f4e2e29, 0xf7b4efee, 0xbfe2af53, 0xee72f44b, 0xa624b4f6, 0x7ede7531, 0x3688358c, 0x13ce1e29, 0x5b985e94, 0x83629f53, 0xcb34dfee, 0x9aa484f6, 0xd2f2c44b, 0x0a08058c, 0x425e4531, 0xa928b3bc, 0xe17ef301, 0x398432c6, 0x71d2727b, 0x20422963, 0x681469de, 0xb0eea819, 0xf8b8e8a4, 0xce30dd28, 0x86669d95, 0x5e9c5c52, 0x16ca1cef, 0x475a47f7, 0x0f0c074a, 0xd7f6c68d, 0x9fa08630, 0x74d670bd, 0x3c803000, 0xe47af1c7, 0xac2cb17a, 0xfdbcea62, 0xb5eaaadf, 0x6d106b18, 0x25462ba5, 0x279c3c52, 0x6fca7cef, 0xb730bd28, 0xff66fd95, 0xaef6a68d, 0xe6a0e630, 0x3e5a27f7, 0x760c674a, 0x9d7a91c7, 0xd52cd17a, 0x0dd610bd, 0x45805000, 0x14100b18, 0x5c464ba5, 0x84bc8a62, 0xcceacadf, 0xfa62ff53, 0xb234bfee, 0x6ace7e29, 0x22983e94, 0x7308658c, 0x3b5e2531, 0xe3a4e4f6, 0xabf2a44b, 0x408452c6, 0x08d2127b, 0xd028d3bc, 0x987e9301, 0xc9eec819, 0x81b888a4, 0x59424963, 0x111409de, 0x3452227b, 0x7c0462c6, 0xa4fea301, 0xeca8e3bc, 0xbd38b8a4, 0xf56ef819, 0x2d9439de, 0x65c27963, 0x8eb48fee, 0xc6e2cf53, 0x1e180e94, 0x564e4e29, 0x07de1531, 0x4f88558c, 0x9772944b, 0xdf24d4f6, 0xe9ace17a, 0xa1faa1c7, 0x79006000, 0x315620bd, 0x60c67ba5, 0x28903b18, 0xf06afadf, 0xb83cba62, 0x534a4cef, 0x1b1c0c52, 0xc3e6cd95, 0x8bb08d28, 0xda20d630, 0x9276968d, 0x4a8c574a, 0x02da17f7, 0x4f3878a4, 0x076e3819, 0xdf94f9de, 0x97c2b963, 0xc652e27b, 0x8e04a2c6, 0x56fe6301, 0x1ea823bc, 0xf5ded531, 0xbd88958c, 0x6572544b, 0x2d2414f6, 0x7cb44fee, 0x34e20f53, 0xec18ce94, 0xa44e8e29, 0x92c6bba5, 0xda90fb18, 0x026a3adf, 0x4a3c7a62, 0x1bac217a, 0x53fa61c7, 0x8b00a000, 0xc356e0bd, 0x28201630, 0x6076568d, 0xb88c974a, 0xf0dad7f7, 0xa14a8cef, 0xe91ccc52, 0x31e60d95, 0x79b04d28, 0x5cf6668d, 0x14a02630, 0xcc5ae7f7, 0x840ca74a, 0xd59cfc52, 0x9dcabcef, 0x45307d28, 0x0d663d95, 0xe610cb18, 0xae468ba5, 0x76bc4a62, 0x3eea0adf, 0x6f7a51c7, 0x272c117a, 0xffd6d0bd, 0xb7809000, 0x8108a58c, 0xc95ee531, 0x11a424f6, 0x59f2644b, 0x08623f53, 0x40347fee, 0x98cebe29, 0xd098fe94, 0x3bee0819, 0x73b848a4, 0xab428963, 0xe314c9de, 0xb28492c6, 0xfad2d27b, 0x222813bc, 0x6a7e5301, 0x68a444f6, 0x20f2044b, 0xf808c58c, 0xb05e8531, 0xe1cede29, 0xa9989e94, 0x71625f53, 0x39341fee, 0xd242e963, 0x9a14a9de, 0x42ee6819, 0x0ab828a4, 0x5b2873bc, 0x137e3301, 0xcb84f2c6, 0x83d2b27b, 0xb55a87f7, 0xfd0cc74a, 0x25f6068d, 0x6da04630, 0x3c301d28, 0x74665d95, 0xac9c9c52, 0xe4cadcef, 0x0fbc2a62, 0x47ea6adf, 0x9f10ab18, 0xd746eba5, 0x86d6b0bd, 0xce80f000, 0x167a31c7, 0x5e2c717a, 0x7b6a5adf, 0x333c1a62, 0xebc6dba5, 0xa3909b18, 0xf200c000, 0xba5680bd, 0x62ac417a, 0x2afa01c7, 0xc18cf74a, 0x89dab7f7, 0x51207630, 0x1976368d, 0x48e66d95, 0x00b02d28, 0xd84aecef, 0x901cac52, 0xa69499de, 0xeec2d963, 0x363818a4, 0x7e6e5819, 0x2ffe0301, 0x67a843bc, 0xbf52827b, 0xf704c2c6, 0x1c72344b, 0x542474f6, 0x8cdeb531, 0xc488f58c, 0x9518ae94, 0xdd4eee29, 0x05b42fee, 0x4de26f53, ], [ 0x00000000, 0x68bce4e2, 0xd179c9c4, 0xb9c52d26, 0x0ac00ba3, 0x627cef41, 0xdbb9c267, 0xb3052685, 0x15801746, 0x7d3cf3a4, 0xc4f9de82, 0xac453a60, 0x1f401ce5, 0x77fcf807, 0xce39d521, 0xa68531c3, 0x2b002e8c, 0x43bcca6e, 0xfa79e748, 0x92c503aa, 0x21c0252f, 0x497cc1cd, 0xf0b9eceb, 0x98050809, 0x3e8039ca, 0x563cdd28, 0xeff9f00e, 0x874514ec, 0x34403269, 0x5cfcd68b, 0xe539fbad, 0x8d851f4f, 0x56005d18, 0x3ebcb9fa, 0x877994dc, 0xefc5703e, 0x5cc056bb, 0x347cb259, 0x8db99f7f, 0xe5057b9d, 0x43804a5e, 0x2b3caebc, 0x92f9839a, 0xfa456778, 0x494041fd, 0x21fca51f, 0x98398839, 0xf0856cdb, 0x7d007394, 0x15bc9776, 0xac79ba50, 0xc4c55eb2, 0x77c07837, 0x1f7c9cd5, 0xa6b9b1f3, 0xce055511, 0x688064d2, 0x003c8030, 0xb9f9ad16, 0xd14549f4, 0x62406f71, 0x0afc8b93, 0xb339a6b5, 0xdb854257, 0xac00ba30, 0xc4bc5ed2, 0x7d7973f4, 0x15c59716, 0xa6c0b193, 0xce7c5571, 0x77b97857, 0x1f059cb5, 0xb980ad76, 0xd13c4994, 0x68f964b2, 0x00458050, 0xb340a6d5, 0xdbfc4237, 0x62396f11, 0x0a858bf3, 0x870094bc, 0xefbc705e, 0x56795d78, 0x3ec5b99a, 0x8dc09f1f, 0xe57c7bfd, 0x5cb956db, 0x3405b239, 0x928083fa, 0xfa3c6718, 0x43f94a3e, 0x2b45aedc, 0x98408859, 0xf0fc6cbb, 0x4939419d, 0x2185a57f, 0xfa00e728, 0x92bc03ca, 0x2b792eec, 0x43c5ca0e, 0xf0c0ec8b, 0x987c0869, 0x21b9254f, 0x4905c1ad, 0xef80f06e, 0x873c148c, 0x3ef939aa, 0x5645dd48, 0xe540fbcd, 0x8dfc1f2f, 0x34393209, 0x5c85d6eb, 0xd100c9a4, 0xb9bc2d46, 0x00790060, 0x68c5e482, 0xdbc0c207, 0xb37c26e5, 0x0ab90bc3, 0x6205ef21, 0xc480dee2, 0xac3c3a00, 0x15f91726, 0x7d45f3c4, 0xce40d541, 0xa6fc31a3, 0x1f391c85, 0x7785f867, 0xf032ec4b, 0x988e08a9, 0x214b258f, 0x49f7c16d, 0xfaf2e7e8, 0x924e030a, 0x2b8b2e2c, 0x4337cace, 0xe5b2fb0d, 0x8d0e1fef, 0x34cb32c9, 0x5c77d62b, 0xef72f0ae, 0x87ce144c, 0x3e0b396a, 0x56b7dd88, 0xdb32c2c7, 0xb38e2625, 0x0a4b0b03, 0x62f7efe1, 0xd1f2c964, 0xb94e2d86, 0x008b00a0, 0x6837e442, 0xceb2d581, 0xa60e3163, 0x1fcb1c45, 0x7777f8a7, 0xc472de22, 0xacce3ac0, 0x150b17e6, 0x7db7f304, 0xa632b153, 0xce8e55b1, 0x774b7897, 0x1ff79c75, 0xacf2baf0, 0xc44e5e12, 0x7d8b7334, 0x153797d6, 0xb3b2a615, 0xdb0e42f7, 0x62cb6fd1, 0x0a778b33, 0xb972adb6, 0xd1ce4954, 0x680b6472, 0x00b78090, 0x8d329fdf, 0xe58e7b3d, 0x5c4b561b, 0x34f7b2f9, 0x87f2947c, 0xef4e709e, 0x568b5db8, 0x3e37b95a, 0x98b28899, 0xf00e6c7b, 0x49cb415d, 0x2177a5bf, 0x9272833a, 0xface67d8, 0x430b4afe, 0x2bb7ae1c, 0x5c32567b, 0x348eb299, 0x8d4b9fbf, 0xe5f77b5d, 0x56f25dd8, 0x3e4eb93a, 0x878b941c, 0xef3770fe, 0x49b2413d, 0x210ea5df, 0x98cb88f9, 0xf0776c1b, 0x43724a9e, 0x2bceae7c, 0x920b835a, 0xfab767b8, 0x773278f7, 0x1f8e9c15, 0xa64bb133, 0xcef755d1, 0x7df27354, 0x154e97b6, 0xac8bba90, 0xc4375e72, 0x62b26fb1, 0x0a0e8b53, 0xb3cba675, 0xdb774297, 0x68726412, 0x00ce80f0, 0xb90badd6, 0xd1b74934, 0x0a320b63, 0x628eef81, 0xdb4bc2a7, 0xb3f72645, 0x00f200c0, 0x684ee422, 0xd18bc904, 0xb9372de6, 0x1fb21c25, 0x770ef8c7, 0xcecbd5e1, 0xa6773103, 0x15721786, 0x7dcef364, 0xc40bde42, 0xacb73aa0, 0x213225ef, 0x498ec10d, 0xf04bec2b, 0x98f708c9, 0x2bf22e4c, 0x434ecaae, 0xfa8be788, 0x9237036a, 0x34b232a9, 0x5c0ed64b, 0xe5cbfb6d, 0x8d771f8f, 0x3e72390a, 0x56cedde8, 0xef0bf0ce, 0x87b7142c, ], [ 0x00000000, 0xb6cca36a, 0xc5aadeff, 0x73667d95, 0x236625d5, 0x95aa86bf, 0xe6ccfb2a, 0x50005840, 0x46cc4baa, 0xf000e8c0, 0x83669555, 0x35aa363f, 0x65aa6e7f, 0xd366cd15, 0xa000b080, 0x16cc13ea, 0x8d989754, 0x3b54343e, 0x483249ab, 0xfefeeac1, 0xaefeb281, 0x183211eb, 0x6b546c7e, 0xdd98cf14, 0xcb54dcfe, 0x7d987f94, 0x0efe0201, 0xb832a16b, 0xe832f92b, 0x5efe5a41, 0x2d9827d4, 0x9b5484be, 0xb302b683, 0x05ce15e9, 0x76a8687c, 0xc064cb16, 0x90649356, 0x26a8303c, 0x55ce4da9, 0xe302eec3, 0xf5cefd29, 0x43025e43, 0x306423d6, 0x86a880bc, 0xd6a8d8fc, 0x60647b96, 0x13020603, 0xa5cea569, 0x3e9a21d7, 0x885682bd, 0xfb30ff28, 0x4dfc5c42, 0x1dfc0402, 0xab30a768, 0xd856dafd, 0x6e9a7997, 0x78566a7d, 0xce9ac917, 0xbdfcb482, 0x0b3017e8, 0x5b304fa8, 0xedfcecc2, 0x9e9a9157, 0x2856323d, 0xce36f52d, 0x78fa5647, 0x0b9c2bd2, 0xbd5088b8, 0xed50d0f8, 0x5b9c7392, 0x28fa0e07, 0x9e36ad6d, 0x88fabe87, 0x3e361ded, 0x4d506078, 0xfb9cc312, 0xab9c9b52, 0x1d503838, 0x6e3645ad, 0xd8fae6c7, 0x43ae6279, 0xf562c113, 0x8604bc86, 0x30c81fec, 0x60c847ac, 0xd604e4c6, 0xa5629953, 0x13ae3a39, 0x056229d3, 0xb3ae8ab9, 0xc0c8f72c, 0x76045446, 0x26040c06, 0x90c8af6c, 0xe3aed2f9, 0x55627193, 0x7d3443ae, 0xcbf8e0c4, 0xb89e9d51, 0x0e523e3b, 0x5e52667b, 0xe89ec511, 0x9bf8b884, 0x2d341bee, 0x3bf80804, 0x8d34ab6e, 0xfe52d6fb, 0x489e7591, 0x189e2dd1, 0xae528ebb, 0xdd34f32e, 0x6bf85044, 0xf0acd4fa, 0x46607790, 0x35060a05, 0x83caa96f, 0xd3caf12f, 0x65065245, 0x16602fd0, 0xa0ac8cba, 0xb6609f50, 0x00ac3c3a, 0x73ca41af, 0xc506e2c5, 0x9506ba85, 0x23ca19ef, 0x50ac647a, 0xe660c710, 0x345e7271, 0x8292d11b, 0xf1f4ac8e, 0x47380fe4, 0x173857a4, 0xa1f4f4ce, 0xd292895b, 0x645e2a31, 0x729239db, 0xc45e9ab1, 0xb738e724, 0x01f4444e, 0x51f41c0e, 0xe738bf64, 0x945ec2f1, 0x2292619b, 0xb9c6e525, 0x0f0a464f, 0x7c6c3bda, 0xcaa098b0, 0x9aa0c0f0, 0x2c6c639a, 0x5f0a1e0f, 0xe9c6bd65, 0xff0aae8f, 0x49c60de5, 0x3aa07070, 0x8c6cd31a, 0xdc6c8b5a, 0x6aa02830, 0x19c655a5, 0xaf0af6cf, 0x875cc4f2, 0x31906798, 0x42f61a0d, 0xf43ab967, 0xa43ae127, 0x12f6424d, 0x61903fd8, 0xd75c9cb2, 0xc1908f58, 0x775c2c32, 0x043a51a7, 0xb2f6f2cd, 0xe2f6aa8d, 0x543a09e7, 0x275c7472, 0x9190d718, 0x0ac453a6, 0xbc08f0cc, 0xcf6e8d59, 0x79a22e33, 0x29a27673, 0x9f6ed519, 0xec08a88c, 0x5ac40be6, 0x4c08180c, 0xfac4bb66, 0x89a2c6f3, 0x3f6e6599, 0x6f6e3dd9, 0xd9a29eb3, 0xaac4e326, 0x1c08404c, 0xfa68875c, 0x4ca42436, 0x3fc259a3, 0x890efac9, 0xd90ea289, 0x6fc201e3, 0x1ca47c76, 0xaa68df1c, 0xbca4ccf6, 0x0a686f9c, 0x790e1209, 0xcfc2b163, 0x9fc2e923, 0x290e4a49, 0x5a6837dc, 0xeca494b6, 0x77f01008, 0xc13cb362, 0xb25acef7, 0x04966d9d, 0x549635dd, 0xe25a96b7, 0x913ceb22, 0x27f04848, 0x313c5ba2, 0x87f0f8c8, 0xf496855d, 0x425a2637, 0x125a7e77, 0xa496dd1d, 0xd7f0a088, 0x613c03e2, 0x496a31df, 0xffa692b5, 0x8cc0ef20, 0x3a0c4c4a, 0x6a0c140a, 0xdcc0b760, 0xafa6caf5, 0x196a699f, 0x0fa67a75, 0xb96ad91f, 0xca0ca48a, 0x7cc007e0, 0x2cc05fa0, 0x9a0cfcca, 0xe96a815f, 0x5fa62235, 0xc4f2a68b, 0x723e05e1, 0x01587874, 0xb794db1e, 0xe794835e, 0x51582034, 0x223e5da1, 0x94f2fecb, 0x823eed21, 0x34f24e4b, 0x479433de, 0xf15890b4, 0xa158c8f4, 0x17946b9e, 0x64f2160b, 0xd23eb561, ], [ 0x00000000, 0x94d6056b, 0x819f92fd, 0x15499796, 0xab0cbdd1, 0x3fdab8ba, 0x2a932f2c, 0xbe452a47, 0xfe2ae389, 0x6afce6e2, 0x7fb57174, 0xeb63741f, 0x55265e58, 0xc1f05b33, 0xd4b9cca5, 0x406fc9ce, 0x54665f39, 0xc0b05a52, 0xd5f9cdc4, 0x412fc8af, 0xff6ae2e8, 0x6bbce783, 0x7ef57015, 0xea23757e, 0xaa4cbcb0, 0x3e9ab9db, 0x2bd32e4d, 0xbf052b26, 0x01400161, 0x9596040a, 0x80df939c, 0x140996f7, 0xa8ccbe72, 0x3c1abb19, 0x29532c8f, 0xbd8529e4, 0x03c003a3, 0x971606c8, 0x825f915e, 0x16899435, 0x56e65dfb, 0xc2305890, 0xd779cf06, 0x43afca6d, 0xfdeae02a, 0x693ce541, 0x7c7572d7, 0xe8a377bc, 0xfcaae14b, 0x687ce420, 0x7d3573b6, 0xe9e376dd, 0x57a65c9a, 0xc37059f1, 0xd639ce67, 0x42efcb0c, 0x028002c2, 0x965607a9, 0x831f903f, 0x17c99554, 0xa98cbf13, 0x3d5aba78, 0x28132dee, 0xbcc52885, 0xf9aae4cf, 0x6d7ce1a4, 0x78357632, 0xece37359, 0x52a6591e, 0xc6705c75, 0xd339cbe3, 0x47efce88, 0x07800746, 0x9356022d, 0x861f95bb, 0x12c990d0, 0xac8cba97, 0x385abffc, 0x2d13286a, 0xb9c52d01, 0xadccbbf6, 0x391abe9d, 0x2c53290b, 0xb8852c60, 0x06c00627, 0x9216034c, 0x875f94da, 0x138991b1, 0x53e6587f, 0xc7305d14, 0xd279ca82, 0x46afcfe9, 0xf8eae5ae, 0x6c3ce0c5, 0x79757753, 0xeda37238, 0x51665abd, 0xc5b05fd6, 0xd0f9c840, 0x442fcd2b, 0xfa6ae76c, 0x6ebce207, 0x7bf57591, 0xef2370fa, 0xaf4cb934, 0x3b9abc5f, 0x2ed32bc9, 0xba052ea2, 0x044004e5, 0x9096018e, 0x85df9618, 0x11099373, 0x05000584, 0x91d600ef, 0x849f9779, 0x10499212, 0xae0cb855, 0x3adabd3e, 0x2f932aa8, 0xbb452fc3, 0xfb2ae60d, 0x6ffce366, 0x7ab574f0, 0xee63719b, 0x50265bdc, 0xc4f05eb7, 0xd1b9c921, 0x456fcc4a, 0x5b6651b5, 0xcfb054de, 0xdaf9c348, 0x4e2fc623, 0xf06aec64, 0x64bce90f, 0x71f57e99, 0xe5237bf2, 0xa54cb23c, 0x319ab757, 0x24d320c1, 0xb00525aa, 0x0e400fed, 0x9a960a86, 0x8fdf9d10, 0x1b09987b, 0x0f000e8c, 0x9bd60be7, 0x8e9f9c71, 0x1a49991a, 0xa40cb35d, 0x30dab636, 0x259321a0, 0xb14524cb, 0xf12aed05, 0x65fce86e, 0x70b57ff8, 0xe4637a93, 0x5a2650d4, 0xcef055bf, 0xdbb9c229, 0x4f6fc742, 0xf3aaefc7, 0x677ceaac, 0x72357d3a, 0xe6e37851, 0x58a65216, 0xcc70577d, 0xd939c0eb, 0x4defc580, 0x0d800c4e, 0x99560925, 0x8c1f9eb3, 0x18c99bd8, 0xa68cb19f, 0x325ab4f4, 0x27132362, 0xb3c52609, 0xa7ccb0fe, 0x331ab595, 0x26532203, 0xb2852768, 0x0cc00d2f, 0x98160844, 0x8d5f9fd2, 0x19899ab9, 0x59e65377, 0xcd30561c, 0xd879c18a, 0x4cafc4e1, 0xf2eaeea6, 0x663cebcd, 0x73757c5b, 0xe7a37930, 0xa2ccb57a, 0x361ab011, 0x23532787, 0xb78522ec, 0x09c008ab, 0x9d160dc0, 0x885f9a56, 0x1c899f3d, 0x5ce656f3, 0xc8305398, 0xdd79c40e, 0x49afc165, 0xf7eaeb22, 0x633cee49, 0x767579df, 0xe2a37cb4, 0xf6aaea43, 0x627cef28, 0x773578be, 0xe3e37dd5, 0x5da65792, 0xc97052f9, 0xdc39c56f, 0x48efc004, 0x088009ca, 0x9c560ca1, 0x891f9b37, 0x1dc99e5c, 0xa38cb41b, 0x375ab170, 0x221326e6, 0xb6c5238d, 0x0a000b08, 0x9ed60e63, 0x8b9f99f5, 0x1f499c9e, 0xa10cb6d9, 0x35dab3b2, 0x20932424, 0xb445214f, 0xf42ae881, 0x60fcedea, 0x75b57a7c, 0xe1637f17, 0x5f265550, 0xcbf0503b, 0xdeb9c7ad, 0x4a6fc2c6, 0x5e665431, 0xcab0515a, 0xdff9c6cc, 0x4b2fc3a7, 0xf56ae9e0, 0x61bcec8b, 0x74f57b1d, 0xe0237e76, 0xa04cb7b8, 0x349ab2d3, 0x21d32545, 0xb505202e, 0x0b400a69, 0x9f960f02, 0x8adf9894, 0x1e099dff, ], [ 0x00000000, 0xbf29cf82, 0xd660072f, 0x6949c8ad, 0x04f39675, 0xbbda59f7, 0xd293915a, 0x6dba5ed8, 0x09e72cea, 0xb6cee368, 0xdf872bc5, 0x60aee447, 0x0d14ba9f, 0xb23d751d, 0xdb74bdb0, 0x645d7232, 0x13ce59d4, 0xace79656, 0xc5ae5efb, 0x7a879179, 0x173dcfa1, 0xa8140023, 0xc15dc88e, 0x7e74070c, 0x1a29753e, 0xa500babc, 0xcc497211, 0x7360bd93, 0x1edae34b, 0xa1f32cc9, 0xc8bae464, 0x77932be6, 0x279cb3a8, 0x98b57c2a, 0xf1fcb487, 0x4ed57b05, 0x236f25dd, 0x9c46ea5f, 0xf50f22f2, 0x4a26ed70, 0x2e7b9f42, 0x915250c0, 0xf81b986d, 0x473257ef, 0x2a880937, 0x95a1c6b5, 0xfce80e18, 0x43c1c19a, 0x3452ea7c, 0x8b7b25fe, 0xe232ed53, 0x5d1b22d1, 0x30a17c09, 0x8f88b38b, 0xe6c17b26, 0x59e8b4a4, 0x3db5c696, 0x829c0914, 0xebd5c1b9, 0x54fc0e3b, 0x394650e3, 0x866f9f61, 0xef2657cc, 0x500f984e, 0x4f396750, 0xf010a8d2, 0x9959607f, 0x2670affd, 0x4bcaf125, 0xf4e33ea7, 0x9daaf60a, 0x22833988, 0x46de4bba, 0xf9f78438, 0x90be4c95, 0x2f978317, 0x422dddcf, 0xfd04124d, 0x944ddae0, 0x2b641562, 0x5cf73e84, 0xe3def106, 0x8a9739ab, 0x35bef629, 0x5804a8f1, 0xe72d6773, 0x8e64afde, 0x314d605c, 0x5510126e, 0xea39ddec, 0x83701541, 0x3c59dac3, 0x51e3841b, 0xeeca4b99, 0x87838334, 0x38aa4cb6, 0x68a5d4f8, 0xd78c1b7a, 0xbec5d3d7, 0x01ec1c55, 0x6c56428d, 0xd37f8d0f, 0xba3645a2, 0x051f8a20, 0x6142f812, 0xde6b3790, 0xb722ff3d, 0x080b30bf, 0x65b16e67, 0xda98a1e5, 0xb3d16948, 0x0cf8a6ca, 0x7b6b8d2c, 0xc44242ae, 0xad0b8a03, 0x12224581, 0x7f981b59, 0xc0b1d4db, 0xa9f81c76, 0x16d1d3f4, 0x728ca1c6, 0xcda56e44, 0xa4eca6e9, 0x1bc5696b, 0x767f37b3, 0xc956f831, 0xa01f309c, 0x1f36ff1e, 0x9e72cea0, 0x215b0122, 0x4812c98f, 0xf73b060d, 0x9a8158d5, 0x25a89757, 0x4ce15ffa, 0xf3c89078, 0x9795e24a, 0x28bc2dc8, 0x41f5e565, 0xfedc2ae7, 0x9366743f, 0x2c4fbbbd, 0x45067310, 0xfa2fbc92, 0x8dbc9774, 0x329558f6, 0x5bdc905b, 0xe4f55fd9, 0x894f0101, 0x3666ce83, 0x5f2f062e, 0xe006c9ac, 0x845bbb9e, 0x3b72741c, 0x523bbcb1, 0xed127333, 0x80a82deb, 0x3f81e269, 0x56c82ac4, 0xe9e1e546, 0xb9ee7d08, 0x06c7b28a, 0x6f8e7a27, 0xd0a7b5a5, 0xbd1deb7d, 0x023424ff, 0x6b7dec52, 0xd45423d0, 0xb00951e2, 0x0f209e60, 0x666956cd, 0xd940994f, 0xb4fac797, 0x0bd30815, 0x629ac0b8, 0xddb30f3a, 0xaa2024dc, 0x1509eb5e, 0x7c4023f3, 0xc369ec71, 0xaed3b2a9, 0x11fa7d2b, 0x78b3b586, 0xc79a7a04, 0xa3c70836, 0x1ceec7b4, 0x75a70f19, 0xca8ec09b, 0xa7349e43, 0x181d51c1, 0x7154996c, 0xce7d56ee, 0xd14ba9f0, 0x6e626672, 0x072baedf, 0xb802615d, 0xd5b83f85, 0x6a91f007, 0x03d838aa, 0xbcf1f728, 0xd8ac851a, 0x67854a98, 0x0ecc8235, 0xb1e54db7, 0xdc5f136f, 0x6376dced, 0x0a3f1440, 0xb516dbc2, 0xc285f024, 0x7dac3fa6, 0x14e5f70b, 0xabcc3889, 0xc6766651, 0x795fa9d3, 0x1016617e, 0xaf3faefc, 0xcb62dcce, 0x744b134c, 0x1d02dbe1, 0xa22b1463, 0xcf914abb, 0x70b88539, 0x19f14d94, 0xa6d88216, 0xf6d71a58, 0x49fed5da, 0x20b71d77, 0x9f9ed2f5, 0xf2248c2d, 0x4d0d43af, 0x24448b02, 0x9b6d4480, 0xff3036b2, 0x4019f930, 0x2950319d, 0x9679fe1f, 0xfbc3a0c7, 0x44ea6f45, 0x2da3a7e8, 0x928a686a, 0xe519438c, 0x5a308c0e, 0x337944a3, 0x8c508b21, 0xe1ead5f9, 0x5ec31a7b, 0x378ad2d6, 0x88a31d54, 0xecfe6f66, 0x53d7a0e4, 0x3a9e6849, 0x85b7a7cb, 0xe80df913, 0x57243691, 0x3e6dfe3c, 0x814431be, ], [ 0x00000000, 0x831d4544, 0xae0912a3, 0x2d1457e7, 0xf421bd6d, 0x773cf829, 0x5a28afce, 0xd935ea8a, 0x4070e2f1, 0xc36da7b5, 0xee79f052, 0x6d64b516, 0xb4515f9c, 0x374c1ad8, 0x1a584d3f, 0x9945087b, 0x80e1c5e2, 0x03fc80a6, 0x2ee8d741, 0xadf59205, 0x74c0788f, 0xf7dd3dcb, 0xdac96a2c, 0x59d42f68, 0xc0912713, 0x438c6257, 0x6e9835b0, 0xed8570f4, 0x34b09a7e, 0xb7addf3a, 0x9ab988dd, 0x19a4cd99, 0xa9f013ef, 0x2aed56ab, 0x07f9014c, 0x84e44408, 0x5dd1ae82, 0xdeccebc6, 0xf3d8bc21, 0x70c5f965, 0xe980f11e, 0x6a9db45a, 0x4789e3bd, 0xc494a6f9, 0x1da14c73, 0x9ebc0937, 0xb3a85ed0, 0x30b51b94, 0x2911d60d, 0xaa0c9349, 0x8718c4ae, 0x040581ea, 0xdd306b60, 0x5e2d2e24, 0x733979c3, 0xf0243c87, 0x696134fc, 0xea7c71b8, 0xc768265f, 0x4475631b, 0x9d408991, 0x1e5dccd5, 0x33499b32, 0xb054de76, 0xfbd3bff5, 0x78cefab1, 0x55daad56, 0xd6c7e812, 0x0ff20298, 0x8cef47dc, 0xa1fb103b, 0x22e6557f, 0xbba35d04, 0x38be1840, 0x15aa4fa7, 0x96b70ae3, 0x4f82e069, 0xcc9fa52d, 0xe18bf2ca, 0x6296b78e, 0x7b327a17, 0xf82f3f53, 0xd53b68b4, 0x56262df0, 0x8f13c77a, 0x0c0e823e, 0x211ad5d9, 0xa207909d, 0x3b4298e6, 0xb85fdda2, 0x954b8a45, 0x1656cf01, 0xcf63258b, 0x4c7e60cf, 0x616a3728, 0xe277726c, 0x5223ac1a, 0xd13ee95e, 0xfc2abeb9, 0x7f37fbfd, 0xa6021177, 0x251f5433, 0x080b03d4, 0x8b164690, 0x12534eeb, 0x914e0baf, 0xbc5a5c48, 0x3f47190c, 0xe672f386, 0x656fb6c2, 0x487be125, 0xcb66a461, 0xd2c269f8, 0x51df2cbc, 0x7ccb7b5b, 0xffd63e1f, 0x26e3d495, 0xa5fe91d1, 0x88eac636, 0x0bf78372, 0x92b28b09, 0x11afce4d, 0x3cbb99aa, 0xbfa6dcee, 0x66933664, 0xe58e7320, 0xc89a24c7, 0x4b876183, 0x5f94e7c1, 0xdc89a285, 0xf19df562, 0x7280b026, 0xabb55aac, 0x28a81fe8, 0x05bc480f, 0x86a10d4b, 0x1fe40530, 0x9cf94074, 0xb1ed1793, 0x32f052d7, 0xebc5b85d, 0x68d8fd19, 0x45ccaafe, 0xc6d1efba, 0xdf752223, 0x5c686767, 0x717c3080, 0xf26175c4, 0x2b549f4e, 0xa849da0a, 0x855d8ded, 0x0640c8a9, 0x9f05c0d2, 0x1c188596, 0x310cd271, 0xb2119735, 0x6b247dbf, 0xe83938fb, 0xc52d6f1c, 0x46302a58, 0xf664f42e, 0x7579b16a, 0x586de68d, 0xdb70a3c9, 0x02454943, 0x81580c07, 0xac4c5be0, 0x2f511ea4, 0xb61416df, 0x3509539b, 0x181d047c, 0x9b004138, 0x4235abb2, 0xc128eef6, 0xec3cb911, 0x6f21fc55, 0x768531cc, 0xf5987488, 0xd88c236f, 0x5b91662b, 0x82a48ca1, 0x01b9c9e5, 0x2cad9e02, 0xafb0db46, 0x36f5d33d, 0xb5e89679, 0x98fcc19e, 0x1be184da, 0xc2d46e50, 0x41c92b14, 0x6cdd7cf3, 0xefc039b7, 0xa4475834, 0x275a1d70, 0x0a4e4a97, 0x89530fd3, 0x5066e559, 0xd37ba01d, 0xfe6ff7fa, 0x7d72b2be, 0xe437bac5, 0x672aff81, 0x4a3ea866, 0xc923ed22, 0x101607a8, 0x930b42ec, 0xbe1f150b, 0x3d02504f, 0x24a69dd6, 0xa7bbd892, 0x8aaf8f75, 0x09b2ca31, 0xd08720bb, 0x539a65ff, 0x7e8e3218, 0xfd93775c, 0x64d67f27, 0xe7cb3a63, 0xcadf6d84, 0x49c228c0, 0x90f7c24a, 0x13ea870e, 0x3efed0e9, 0xbde395ad, 0x0db74bdb, 0x8eaa0e9f, 0xa3be5978, 0x20a31c3c, 0xf996f6b6, 0x7a8bb3f2, 0x579fe415, 0xd482a151, 0x4dc7a92a, 0xcedaec6e, 0xe3cebb89, 0x60d3fecd, 0xb9e61447, 0x3afb5103, 0x17ef06e4, 0x94f243a0, 0x8d568e39, 0x0e4bcb7d, 0x235f9c9a, 0xa042d9de, 0x79773354, 0xfa6a7610, 0xd77e21f7, 0x546364b3, 0xcd266cc8, 0x4e3b298c, 0x632f7e6b, 0xe0323b2f, 0x3907d1a5, 0xba1a94e1, 0x970ec306, 0x14138642, ], [ 0x00000000, 0x11e17666, 0x23c2eccc, 0x32239aaa, 0x4785d998, 0x5664affe, 0x64473554, 0x75a64332, 0x8f0bb330, 0x9eeac556, 0xacc95ffc, 0xbd28299a, 0xc88e6aa8, 0xd96f1cce, 0xeb4c8664, 0xfaadf002, 0xb624fe4b, 0xa7c5882d, 0x95e61287, 0x840764e1, 0xf1a127d3, 0xe04051b5, 0xd263cb1f, 0xc382bd79, 0x392f4d7b, 0x28ce3b1d, 0x1aeda1b7, 0x0b0cd7d1, 0x7eaa94e3, 0x6f4be285, 0x5d68782f, 0x4c890e49, 0xc47a64bd, 0xd59b12db, 0xe7b88871, 0xf659fe17, 0x83ffbd25, 0x921ecb43, 0xa03d51e9, 0xb1dc278f, 0x4b71d78d, 0x5a90a1eb, 0x68b33b41, 0x79524d27, 0x0cf40e15, 0x1d157873, 0x2f36e2d9, 0x3ed794bf, 0x725e9af6, 0x63bfec90, 0x519c763a, 0x407d005c, 0x35db436e, 0x243a3508, 0x1619afa2, 0x07f8d9c4, 0xfd5529c6, 0xecb45fa0, 0xde97c50a, 0xcf76b36c, 0xbad0f05e, 0xab318638, 0x99121c92, 0x88f36af4, 0x20c75151, 0x31262737, 0x0305bd9d, 0x12e4cbfb, 0x674288c9, 0x76a3feaf, 0x44806405, 0x55611263, 0xafcce261, 0xbe2d9407, 0x8c0e0ead, 0x9def78cb, 0xe8493bf9, 0xf9a84d9f, 0xcb8bd735, 0xda6aa153, 0x96e3af1a, 0x8702d97c, 0xb52143d6, 0xa4c035b0, 0xd1667682, 0xc08700e4, 0xf2a49a4e, 0xe345ec28, 0x19e81c2a, 0x08096a4c, 0x3a2af0e6, 0x2bcb8680, 0x5e6dc5b2, 0x4f8cb3d4, 0x7daf297e, 0x6c4e5f18, 0xe4bd35ec, 0xf55c438a, 0xc77fd920, 0xd69eaf46, 0xa338ec74, 0xb2d99a12, 0x80fa00b8, 0x911b76de, 0x6bb686dc, 0x7a57f0ba, 0x48746a10, 0x59951c76, 0x2c335f44, 0x3dd22922, 0x0ff1b388, 0x1e10c5ee, 0x5299cba7, 0x4378bdc1, 0x715b276b, 0x60ba510d, 0x151c123f, 0x04fd6459, 0x36defef3, 0x273f8895, 0xdd927897, 0xcc730ef1, 0xfe50945b, 0xefb1e23d, 0x9a17a10f, 0x8bf6d769, 0xb9d54dc3, 0xa8343ba5, 0x418ea2a2, 0x506fd4c4, 0x624c4e6e, 0x73ad3808, 0x060b7b3a, 0x17ea0d5c, 0x25c997f6, 0x3428e190, 0xce851192, 0xdf6467f4, 0xed47fd5e, 0xfca68b38, 0x8900c80a, 0x98e1be6c, 0xaac224c6, 0xbb2352a0, 0xf7aa5ce9, 0xe64b2a8f, 0xd468b025, 0xc589c643, 0xb02f8571, 0xa1cef317, 0x93ed69bd, 0x820c1fdb, 0x78a1efd9, 0x694099bf, 0x5b630315, 0x4a827573, 0x3f243641, 0x2ec54027, 0x1ce6da8d, 0x0d07aceb, 0x85f4c61f, 0x9415b079, 0xa6362ad3, 0xb7d75cb5, 0xc2711f87, 0xd39069e1, 0xe1b3f34b, 0xf052852d, 0x0aff752f, 0x1b1e0349, 0x293d99e3, 0x38dcef85, 0x4d7aacb7, 0x5c9bdad1, 0x6eb8407b, 0x7f59361d, 0x33d03854, 0x22314e32, 0x1012d498, 0x01f3a2fe, 0x7455e1cc, 0x65b497aa, 0x57970d00, 0x46767b66, 0xbcdb8b64, 0xad3afd02, 0x9f1967a8, 0x8ef811ce, 0xfb5e52fc, 0xeabf249a, 0xd89cbe30, 0xc97dc856, 0x6149f3f3, 0x70a88595, 0x428b1f3f, 0x536a6959, 0x26cc2a6b, 0x372d5c0d, 0x050ec6a7, 0x14efb0c1, 0xee4240c3, 0xffa336a5, 0xcd80ac0f, 0xdc61da69, 0xa9c7995b, 0xb826ef3d, 0x8a057597, 0x9be403f1, 0xd76d0db8, 0xc68c7bde, 0xf4afe174, 0xe54e9712, 0x90e8d420, 0x8109a246, 0xb32a38ec, 0xa2cb4e8a, 0x5866be88, 0x4987c8ee, 0x7ba45244, 0x6a452422, 0x1fe36710, 0x0e021176, 0x3c218bdc, 0x2dc0fdba, 0xa533974e, 0xb4d2e128, 0x86f17b82, 0x97100de4, 0xe2b64ed6, 0xf35738b0, 0xc174a21a, 0xd095d47c, 0x2a38247e, 0x3bd95218, 0x09fac8b2, 0x181bbed4, 0x6dbdfde6, 0x7c5c8b80, 0x4e7f112a, 0x5f9e674c, 0x13176905, 0x02f61f63, 0x30d585c9, 0x2134f3af, 0x5492b09d, 0x4573c6fb, 0x77505c51, 0x66b12a37, 0x9c1cda35, 0x8dfdac53, 0xbfde36f9, 0xae3f409f, 0xdb9903ad, 0xca7875cb, 0xf85bef61, 0xe9ba9907, ], [ 0x00000000, 0xcddb73d1, 0x33857f89, 0xfe5e0c58, 0x670aff12, 0xaad18cc3, 0x548f809b, 0x9954f34a, 0xce15fe24, 0x03ce8df5, 0xfd9081ad, 0x304bf27c, 0xa91f0136, 0x64c472e7, 0x9a9a7ebf, 0x57410d6e, 0x34186463, 0xf9c317b2, 0x079d1bea, 0xca46683b, 0x53129b71, 0x9ec9e8a0, 0x6097e4f8, 0xad4c9729, 0xfa0d9a47, 0x37d6e996, 0xc988e5ce, 0x0453961f, 0x9d076555, 0x50dc1684, 0xae821adc, 0x6359690d, 0x6830c8c6, 0xa5ebbb17, 0x5bb5b74f, 0x966ec49e, 0x0f3a37d4, 0xc2e14405, 0x3cbf485d, 0xf1643b8c, 0xa62536e2, 0x6bfe4533, 0x95a0496b, 0x587b3aba, 0xc12fc9f0, 0x0cf4ba21, 0xf2aab679, 0x3f71c5a8, 0x5c28aca5, 0x91f3df74, 0x6fadd32c, 0xa276a0fd, 0x3b2253b7, 0xf6f92066, 0x08a72c3e, 0xc57c5fef, 0x923d5281, 0x5fe62150, 0xa1b82d08, 0x6c635ed9, 0xf537ad93, 0x38ecde42, 0xc6b2d21a, 0x0b69a1cb, 0xd061918c, 0x1dbae25d, 0xe3e4ee05, 0x2e3f9dd4, 0xb76b6e9e, 0x7ab01d4f, 0x84ee1117, 0x493562c6, 0x1e746fa8, 0xd3af1c79, 0x2df11021, 0xe02a63f0, 0x797e90ba, 0xb4a5e36b, 0x4afbef33, 0x87209ce2, 0xe479f5ef, 0x29a2863e, 0xd7fc8a66, 0x1a27f9b7, 0x83730afd, 0x4ea8792c, 0xb0f67574, 0x7d2d06a5, 0x2a6c0bcb, 0xe7b7781a, 0x19e97442, 0xd4320793, 0x4d66f4d9, 0x80bd8708, 0x7ee38b50, 0xb338f881, 0xb851594a, 0x758a2a9b, 0x8bd426c3, 0x460f5512, 0xdf5ba658, 0x1280d589, 0xecded9d1, 0x2105aa00, 0x7644a76e, 0xbb9fd4bf, 0x45c1d8e7, 0x881aab36, 0x114e587c, 0xdc952bad, 0x22cb27f5, 0xef105424, 0x8c493d29, 0x41924ef8, 0xbfcc42a0, 0x72173171, 0xeb43c23b, 0x2698b1ea, 0xd8c6bdb2, 0x151dce63, 0x425cc30d, 0x8f87b0dc, 0x71d9bc84, 0xbc02cf55, 0x25563c1f, 0xe88d4fce, 0x16d34396, 0xdb083047, 0x08f0bb33, 0xc52bc8e2, 0x3b75c4ba, 0xf6aeb76b, 0x6ffa4421, 0xa22137f0, 0x5c7f3ba8, 0x91a44879, 0xc6e54517, 0x0b3e36c6, 0xf5603a9e, 0x38bb494f, 0xa1efba05, 0x6c34c9d4, 0x926ac58c, 0x5fb1b65d, 0x3ce8df50, 0xf133ac81, 0x0f6da0d9, 0xc2b6d308, 0x5be22042, 0x96395393, 0x68675fcb, 0xa5bc2c1a, 0xf2fd2174, 0x3f2652a5, 0xc1785efd, 0x0ca32d2c, 0x95f7de66, 0x582cadb7, 0xa672a1ef, 0x6ba9d23e, 0x60c073f5, 0xad1b0024, 0x53450c7c, 0x9e9e7fad, 0x07ca8ce7, 0xca11ff36, 0x344ff36e, 0xf99480bf, 0xaed58dd1, 0x630efe00, 0x9d50f258, 0x508b8189, 0xc9df72c3, 0x04040112, 0xfa5a0d4a, 0x37817e9b, 0x54d81796, 0x99036447, 0x675d681f, 0xaa861bce, 0x33d2e884, 0xfe099b55, 0x0057970d, 0xcd8ce4dc, 0x9acde9b2, 0x57169a63, 0xa948963b, 0x6493e5ea, 0xfdc716a0, 0x301c6571, 0xce426929, 0x03991af8, 0xd8912abf, 0x154a596e, 0xeb145536, 0x26cf26e7, 0xbf9bd5ad, 0x7240a67c, 0x8c1eaa24, 0x41c5d9f5, 0x1684d49b, 0xdb5fa74a, 0x2501ab12, 0xe8dad8c3, 0x718e2b89, 0xbc555858, 0x420b5400, 0x8fd027d1, 0xec894edc, 0x21523d0d, 0xdf0c3155, 0x12d74284, 0x8b83b1ce, 0x4658c21f, 0xb806ce47, 0x75ddbd96, 0x229cb0f8, 0xef47c329, 0x1119cf71, 0xdcc2bca0, 0x45964fea, 0x884d3c3b, 0x76133063, 0xbbc843b2, 0xb0a1e279, 0x7d7a91a8, 0x83249df0, 0x4effee21, 0xd7ab1d6b, 0x1a706eba, 0xe42e62e2, 0x29f51133, 0x7eb41c5d, 0xb36f6f8c, 0x4d3163d4, 0x80ea1005, 0x19bee34f, 0xd465909e, 0x2a3b9cc6, 0xe7e0ef17, 0x84b9861a, 0x4962f5cb, 0xb73cf993, 0x7ae78a42, 0xe3b37908, 0x2e680ad9, 0xd0360681, 0x1ded7550, 0x4aac783e, 0x87770bef, 0x792907b7, 0xb4f27466, 0x2da6872c, 0xe07df4fd, 0x1e23f8a5, 0xd3f88b74, ], [ 0x00000000, 0x049541bb, 0x092a8376, 0x0dbfc2cd, 0x125506ec, 0x16c04757, 0x1b7f859a, 0x1feac421, 0x24aa0dd8, 0x203f4c63, 0x2d808eae, 0x2915cf15, 0x36ff0b34, 0x326a4a8f, 0x3fd58842, 0x3b40c9f9, 0x49541bb0, 0x4dc15a0b, 0x407e98c6, 0x44ebd97d, 0x5b011d5c, 0x5f945ce7, 0x522b9e2a, 0x56bedf91, 0x6dfe1668, 0x696b57d3, 0x64d4951e, 0x6041d4a5, 0x7fab1084, 0x7b3e513f, 0x768193f2, 0x7214d249, 0x92a83760, 0x963d76db, 0x9b82b416, 0x9f17f5ad, 0x80fd318c, 0x84687037, 0x89d7b2fa, 0x8d42f341, 0xb6023ab8, 0xb2977b03, 0xbf28b9ce, 0xbbbdf875, 0xa4573c54, 0xa0c27def, 0xad7dbf22, 0xa9e8fe99, 0xdbfc2cd0, 0xdf696d6b, 0xd2d6afa6, 0xd643ee1d, 0xc9a92a3c, 0xcd3c6b87, 0xc083a94a, 0xc416e8f1, 0xff562108, 0xfbc360b3, 0xf67ca27e, 0xf2e9e3c5, 0xed0327e4, 0xe996665f, 0xe429a492, 0xe0bce529, 0x8d63f6eb, 0x89f6b750, 0x8449759d, 0x80dc3426, 0x9f36f007, 0x9ba3b1bc, 0x961c7371, 0x928932ca, 0xa9c9fb33, 0xad5cba88, 0xa0e37845, 0xa47639fe, 0xbb9cfddf, 0xbf09bc64, 0xb2b67ea9, 0xb6233f12, 0xc437ed5b, 0xc0a2ace0, 0xcd1d6e2d, 0xc9882f96, 0xd662ebb7, 0xd2f7aa0c, 0xdf4868c1, 0xdbdd297a, 0xe09de083, 0xe408a138, 0xe9b763f5, 0xed22224e, 0xf2c8e66f, 0xf65da7d4, 0xfbe26519, 0xff7724a2, 0x1fcbc18b, 0x1b5e8030, 0x16e142fd, 0x12740346, 0x0d9ec767, 0x090b86dc, 0x04b44411, 0x002105aa, 0x3b61cc53, 0x3ff48de8, 0x324b4f25, 0x36de0e9e, 0x2934cabf, 0x2da18b04, 0x201e49c9, 0x248b0872, 0x569fda3b, 0x520a9b80, 0x5fb5594d, 0x5b2018f6, 0x44cadcd7, 0x405f9d6c, 0x4de05fa1, 0x49751e1a, 0x7235d7e3, 0x76a09658, 0x7b1f5495, 0x7f8a152e, 0x6060d10f, 0x64f590b4, 0x694a5279, 0x6ddf13c2, 0xb2f475fd, 0xb6613446, 0xbbdef68b, 0xbf4bb730, 0xa0a17311, 0xa43432aa, 0xa98bf067, 0xad1eb1dc, 0x965e7825, 0x92cb399e, 0x9f74fb53, 0x9be1bae8, 0x840b7ec9, 0x809e3f72, 0x8d21fdbf, 0x89b4bc04, 0xfba06e4d, 0xff352ff6, 0xf28aed3b, 0xf61fac80, 0xe9f568a1, 0xed60291a, 0xe0dfebd7, 0xe44aaa6c, 0xdf0a6395, 0xdb9f222e, 0xd620e0e3, 0xd2b5a158, 0xcd5f6579, 0xc9ca24c2, 0xc475e60f, 0xc0e0a7b4, 0x205c429d, 0x24c90326, 0x2976c1eb, 0x2de38050, 0x32094471, 0x369c05ca, 0x3b23c707, 0x3fb686bc, 0x04f64f45, 0x00630efe, 0x0ddccc33, 0x09498d88, 0x16a349a9, 0x12360812, 0x1f89cadf, 0x1b1c8b64, 0x6908592d, 0x6d9d1896, 0x6022da5b, 0x64b79be0, 0x7b5d5fc1, 0x7fc81e7a, 0x7277dcb7, 0x76e29d0c, 0x4da254f5, 0x4937154e, 0x4488d783, 0x401d9638, 0x5ff75219, 0x5b6213a2, 0x56ddd16f, 0x524890d4, 0x3f978316, 0x3b02c2ad, 0x36bd0060, 0x322841db, 0x2dc285fa, 0x2957c441, 0x24e8068c, 0x207d4737, 0x1b3d8ece, 0x1fa8cf75, 0x12170db8, 0x16824c03, 0x09688822, 0x0dfdc999, 0x00420b54, 0x04d74aef, 0x76c398a6, 0x7256d91d, 0x7fe91bd0, 0x7b7c5a6b, 0x64969e4a, 0x6003dff1, 0x6dbc1d3c, 0x69295c87, 0x5269957e, 0x56fcd4c5, 0x5b431608, 0x5fd657b3, 0x403c9392, 0x44a9d229, 0x491610e4, 0x4d83515f, 0xad3fb476, 0xa9aaf5cd, 0xa4153700, 0xa08076bb, 0xbf6ab29a, 0xbbfff321, 0xb64031ec, 0xb2d57057, 0x8995b9ae, 0x8d00f815, 0x80bf3ad8, 0x842a7b63, 0x9bc0bf42, 0x9f55fef9, 0x92ea3c34, 0x967f7d8f, 0xe46bafc6, 0xe0feee7d, 0xed412cb0, 0xe9d46d0b, 0xf63ea92a, 0xf2abe891, 0xff142a5c, 0xfb816be7, 0xc0c1a21e, 0xc454e3a5, 0xc9eb2168, 0xcd7e60d3, 0xd294a4f2, 0xd601e549, 0xdbbe2784, 0xdf2b663f, ], ]; pub static CRC32_BZIP2_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4, ], [ 0x00000000, 0xd219c1dc, 0xa0f29e0f, 0x72eb5fd3, 0x452421a9, 0x973de075, 0xe5d6bfa6, 0x37cf7e7a, 0x8a484352, 0x5851828e, 0x2abadd5d, 0xf8a31c81, 0xcf6c62fb, 0x1d75a327, 0x6f9efcf4, 0xbd873d28, 0x10519b13, 0xc2485acf, 0xb0a3051c, 0x62bac4c0, 0x5575baba, 0x876c7b66, 0xf58724b5, 0x279ee569, 0x9a19d841, 0x4800199d, 0x3aeb464e, 0xe8f28792, 0xdf3df9e8, 0x0d243834, 0x7fcf67e7, 0xadd6a63b, 0x20a33626, 0xf2baf7fa, 0x8051a829, 0x524869f5, 0x6587178f, 0xb79ed653, 0xc5758980, 0x176c485c, 0xaaeb7574, 0x78f2b4a8, 0x0a19eb7b, 0xd8002aa7, 0xefcf54dd, 0x3dd69501, 0x4f3dcad2, 0x9d240b0e, 0x30f2ad35, 0xe2eb6ce9, 0x9000333a, 0x4219f2e6, 0x75d68c9c, 0xa7cf4d40, 0xd5241293, 0x073dd34f, 0xbabaee67, 0x68a32fbb, 0x1a487068, 0xc851b1b4, 0xff9ecfce, 0x2d870e12, 0x5f6c51c1, 0x8d75901d, 0x41466c4c, 0x935fad90, 0xe1b4f243, 0x33ad339f, 0x04624de5, 0xd67b8c39, 0xa490d3ea, 0x76891236, 0xcb0e2f1e, 0x1917eec2, 0x6bfcb111, 0xb9e570cd, 0x8e2a0eb7, 0x5c33cf6b, 0x2ed890b8, 0xfcc15164, 0x5117f75f, 0x830e3683, 0xf1e56950, 0x23fca88c, 0x1433d6f6, 0xc62a172a, 0xb4c148f9, 0x66d88925, 0xdb5fb40d, 0x094675d1, 0x7bad2a02, 0xa9b4ebde, 0x9e7b95a4, 0x4c625478, 0x3e890bab, 0xec90ca77, 0x61e55a6a, 0xb3fc9bb6, 0xc117c465, 0x130e05b9, 0x24c17bc3, 0xf6d8ba1f, 0x8433e5cc, 0x562a2410, 0xebad1938, 0x39b4d8e4, 0x4b5f8737, 0x994646eb, 0xae893891, 0x7c90f94d, 0x0e7ba69e, 0xdc626742, 0x71b4c179, 0xa3ad00a5, 0xd1465f76, 0x035f9eaa, 0x3490e0d0, 0xe689210c, 0x94627edf, 0x467bbf03, 0xfbfc822b, 0x29e543f7, 0x5b0e1c24, 0x8917ddf8, 0xbed8a382, 0x6cc1625e, 0x1e2a3d8d, 0xcc33fc51, 0x828cd898, 0x50951944, 0x227e4697, 0xf067874b, 0xc7a8f931, 0x15b138ed, 0x675a673e, 0xb543a6e2, 0x08c49bca, 0xdadd5a16, 0xa83605c5, 0x7a2fc419, 0x4de0ba63, 0x9ff97bbf, 0xed12246c, 0x3f0be5b0, 0x92dd438b, 0x40c48257, 0x322fdd84, 0xe0361c58, 0xd7f96222, 0x05e0a3fe, 0x770bfc2d, 0xa5123df1, 0x189500d9, 0xca8cc105, 0xb8679ed6, 0x6a7e5f0a, 0x5db12170, 0x8fa8e0ac, 0xfd43bf7f, 0x2f5a7ea3, 0xa22feebe, 0x70362f62, 0x02dd70b1, 0xd0c4b16d, 0xe70bcf17, 0x35120ecb, 0x47f95118, 0x95e090c4, 0x2867adec, 0xfa7e6c30, 0x889533e3, 0x5a8cf23f, 0x6d438c45, 0xbf5a4d99, 0xcdb1124a, 0x1fa8d396, 0xb27e75ad, 0x6067b471, 0x128ceba2, 0xc0952a7e, 0xf75a5404, 0x254395d8, 0x57a8ca0b, 0x85b10bd7, 0x383636ff, 0xea2ff723, 0x98c4a8f0, 0x4add692c, 0x7d121756, 0xaf0bd68a, 0xdde08959, 0x0ff94885, 0xc3cab4d4, 0x11d37508, 0x63382adb, 0xb121eb07, 0x86ee957d, 0x54f754a1, 0x261c0b72, 0xf405caae, 0x4982f786, 0x9b9b365a, 0xe9706989, 0x3b69a855, 0x0ca6d62f, 0xdebf17f3, 0xac544820, 0x7e4d89fc, 0xd39b2fc7, 0x0182ee1b, 0x7369b1c8, 0xa1707014, 0x96bf0e6e, 0x44a6cfb2, 0x364d9061, 0xe45451bd, 0x59d36c95, 0x8bcaad49, 0xf921f29a, 0x2b383346, 0x1cf74d3c, 0xceee8ce0, 0xbc05d333, 0x6e1c12ef, 0xe36982f2, 0x3170432e, 0x439b1cfd, 0x9182dd21, 0xa64da35b, 0x74546287, 0x06bf3d54, 0xd4a6fc88, 0x6921c1a0, 0xbb38007c, 0xc9d35faf, 0x1bca9e73, 0x2c05e009, 0xfe1c21d5, 0x8cf77e06, 0x5eeebfda, 0xf33819e1, 0x2121d83d, 0x53ca87ee, 0x81d34632, 0xb61c3848, 0x6405f994, 0x16eea647, 0xc4f7679b, 0x79705ab3, 0xab699b6f, 0xd982c4bc, 0x0b9b0560, 0x3c547b1a, 0xee4dbac6, 0x9ca6e515, 0x4ebf24c9, ], [ 0x00000000, 0x01d8ac87, 0x03b1590e, 0x0269f589, 0x0762b21c, 0x06ba1e9b, 0x04d3eb12, 0x050b4795, 0x0ec56438, 0x0f1dc8bf, 0x0d743d36, 0x0cac91b1, 0x09a7d624, 0x087f7aa3, 0x0a168f2a, 0x0bce23ad, 0x1d8ac870, 0x1c5264f7, 0x1e3b917e, 0x1fe33df9, 0x1ae87a6c, 0x1b30d6eb, 0x19592362, 0x18818fe5, 0x134fac48, 0x129700cf, 0x10fef546, 0x112659c1, 0x142d1e54, 0x15f5b2d3, 0x179c475a, 0x1644ebdd, 0x3b1590e0, 0x3acd3c67, 0x38a4c9ee, 0x397c6569, 0x3c7722fc, 0x3daf8e7b, 0x3fc67bf2, 0x3e1ed775, 0x35d0f4d8, 0x3408585f, 0x3661add6, 0x37b90151, 0x32b246c4, 0x336aea43, 0x31031fca, 0x30dbb34d, 0x269f5890, 0x2747f417, 0x252e019e, 0x24f6ad19, 0x21fdea8c, 0x2025460b, 0x224cb382, 0x23941f05, 0x285a3ca8, 0x2982902f, 0x2beb65a6, 0x2a33c921, 0x2f388eb4, 0x2ee02233, 0x2c89d7ba, 0x2d517b3d, 0x762b21c0, 0x77f38d47, 0x759a78ce, 0x7442d449, 0x714993dc, 0x70913f5b, 0x72f8cad2, 0x73206655, 0x78ee45f8, 0x7936e97f, 0x7b5f1cf6, 0x7a87b071, 0x7f8cf7e4, 0x7e545b63, 0x7c3daeea, 0x7de5026d, 0x6ba1e9b0, 0x6a794537, 0x6810b0be, 0x69c81c39, 0x6cc35bac, 0x6d1bf72b, 0x6f7202a2, 0x6eaaae25, 0x65648d88, 0x64bc210f, 0x66d5d486, 0x670d7801, 0x62063f94, 0x63de9313, 0x61b7669a, 0x606fca1d, 0x4d3eb120, 0x4ce61da7, 0x4e8fe82e, 0x4f5744a9, 0x4a5c033c, 0x4b84afbb, 0x49ed5a32, 0x4835f6b5, 0x43fbd518, 0x4223799f, 0x404a8c16, 0x41922091, 0x44996704, 0x4541cb83, 0x47283e0a, 0x46f0928d, 0x50b47950, 0x516cd5d7, 0x5305205e, 0x52dd8cd9, 0x57d6cb4c, 0x560e67cb, 0x54679242, 0x55bf3ec5, 0x5e711d68, 0x5fa9b1ef, 0x5dc04466, 0x5c18e8e1, 0x5913af74, 0x58cb03f3, 0x5aa2f67a, 0x5b7a5afd, 0xec564380, 0xed8eef07, 0xefe71a8e, 0xee3fb609, 0xeb34f19c, 0xeaec5d1b, 0xe885a892, 0xe95d0415, 0xe29327b8, 0xe34b8b3f, 0xe1227eb6, 0xe0fad231, 0xe5f195a4, 0xe4293923, 0xe640ccaa, 0xe798602d, 0xf1dc8bf0, 0xf0042777, 0xf26dd2fe, 0xf3b57e79, 0xf6be39ec, 0xf766956b, 0xf50f60e2, 0xf4d7cc65, 0xff19efc8, 0xfec1434f, 0xfca8b6c6, 0xfd701a41, 0xf87b5dd4, 0xf9a3f153, 0xfbca04da, 0xfa12a85d, 0xd743d360, 0xd69b7fe7, 0xd4f28a6e, 0xd52a26e9, 0xd021617c, 0xd1f9cdfb, 0xd3903872, 0xd24894f5, 0xd986b758, 0xd85e1bdf, 0xda37ee56, 0xdbef42d1, 0xdee40544, 0xdf3ca9c3, 0xdd555c4a, 0xdc8df0cd, 0xcac91b10, 0xcb11b797, 0xc978421e, 0xc8a0ee99, 0xcdaba90c, 0xcc73058b, 0xce1af002, 0xcfc25c85, 0xc40c7f28, 0xc5d4d3af, 0xc7bd2626, 0xc6658aa1, 0xc36ecd34, 0xc2b661b3, 0xc0df943a, 0xc10738bd, 0x9a7d6240, 0x9ba5cec7, 0x99cc3b4e, 0x981497c9, 0x9d1fd05c, 0x9cc77cdb, 0x9eae8952, 0x9f7625d5, 0x94b80678, 0x9560aaff, 0x97095f76, 0x96d1f3f1, 0x93dab464, 0x920218e3, 0x906bed6a, 0x91b341ed, 0x87f7aa30, 0x862f06b7, 0x8446f33e, 0x859e5fb9, 0x8095182c, 0x814db4ab, 0x83244122, 0x82fceda5, 0x8932ce08, 0x88ea628f, 0x8a839706, 0x8b5b3b81, 0x8e507c14, 0x8f88d093, 0x8de1251a, 0x8c39899d, 0xa168f2a0, 0xa0b05e27, 0xa2d9abae, 0xa3010729, 0xa60a40bc, 0xa7d2ec3b, 0xa5bb19b2, 0xa463b535, 0xafad9698, 0xae753a1f, 0xac1ccf96, 0xadc46311, 0xa8cf2484, 0xa9178803, 0xab7e7d8a, 0xaaa6d10d, 0xbce23ad0, 0xbd3a9657, 0xbf5363de, 0xbe8bcf59, 0xbb8088cc, 0xba58244b, 0xb831d1c2, 0xb9e97d45, 0xb2275ee8, 0xb3fff26f, 0xb19607e6, 0xb04eab61, 0xb545ecf4, 0xb49d4073, 0xb6f4b5fa, 0xb72c197d, ], [ 0x00000000, 0xdc6d9ab7, 0xbc1a28d9, 0x6077b26e, 0x7cf54c05, 0xa098d6b2, 0xc0ef64dc, 0x1c82fe6b, 0xf9ea980a, 0x258702bd, 0x45f0b0d3, 0x999d2a64, 0x851fd40f, 0x59724eb8, 0x3905fcd6, 0xe5686661, 0xf7142da3, 0x2b79b714, 0x4b0e057a, 0x97639fcd, 0x8be161a6, 0x578cfb11, 0x37fb497f, 0xeb96d3c8, 0x0efeb5a9, 0xd2932f1e, 0xb2e49d70, 0x6e8907c7, 0x720bf9ac, 0xae66631b, 0xce11d175, 0x127c4bc2, 0xeae946f1, 0x3684dc46, 0x56f36e28, 0x8a9ef49f, 0x961c0af4, 0x4a719043, 0x2a06222d, 0xf66bb89a, 0x1303defb, 0xcf6e444c, 0xaf19f622, 0x73746c95, 0x6ff692fe, 0xb39b0849, 0xd3ecba27, 0x0f812090, 0x1dfd6b52, 0xc190f1e5, 0xa1e7438b, 0x7d8ad93c, 0x61082757, 0xbd65bde0, 0xdd120f8e, 0x017f9539, 0xe417f358, 0x387a69ef, 0x580ddb81, 0x84604136, 0x98e2bf5d, 0x448f25ea, 0x24f89784, 0xf8950d33, 0xd1139055, 0x0d7e0ae2, 0x6d09b88c, 0xb164223b, 0xade6dc50, 0x718b46e7, 0x11fcf489, 0xcd916e3e, 0x28f9085f, 0xf49492e8, 0x94e32086, 0x488eba31, 0x540c445a, 0x8861deed, 0xe8166c83, 0x347bf634, 0x2607bdf6, 0xfa6a2741, 0x9a1d952f, 0x46700f98, 0x5af2f1f3, 0x869f6b44, 0xe6e8d92a, 0x3a85439d, 0xdfed25fc, 0x0380bf4b, 0x63f70d25, 0xbf9a9792, 0xa31869f9, 0x7f75f34e, 0x1f024120, 0xc36fdb97, 0x3bfad6a4, 0xe7974c13, 0x87e0fe7d, 0x5b8d64ca, 0x470f9aa1, 0x9b620016, 0xfb15b278, 0x277828cf, 0xc2104eae, 0x1e7dd419, 0x7e0a6677, 0xa267fcc0, 0xbee502ab, 0x6288981c, 0x02ff2a72, 0xde92b0c5, 0xcceefb07, 0x108361b0, 0x70f4d3de, 0xac994969, 0xb01bb702, 0x6c762db5, 0x0c019fdb, 0xd06c056c, 0x3504630d, 0xe969f9ba, 0x891e4bd4, 0x5573d163, 0x49f12f08, 0x959cb5bf, 0xf5eb07d1, 0x29869d66, 0xa6e63d1d, 0x7a8ba7aa, 0x1afc15c4, 0xc6918f73, 0xda137118, 0x067eebaf, 0x660959c1, 0xba64c376, 0x5f0ca517, 0x83613fa0, 0xe3168dce, 0x3f7b1779, 0x23f9e912, 0xff9473a5, 0x9fe3c1cb, 0x438e5b7c, 0x51f210be, 0x8d9f8a09, 0xede83867, 0x3185a2d0, 0x2d075cbb, 0xf16ac60c, 0x911d7462, 0x4d70eed5, 0xa81888b4, 0x74751203, 0x1402a06d, 0xc86f3ada, 0xd4edc4b1, 0x08805e06, 0x68f7ec68, 0xb49a76df, 0x4c0f7bec, 0x9062e15b, 0xf0155335, 0x2c78c982, 0x30fa37e9, 0xec97ad5e, 0x8ce01f30, 0x508d8587, 0xb5e5e3e6, 0x69887951, 0x09ffcb3f, 0xd5925188, 0xc910afe3, 0x157d3554, 0x750a873a, 0xa9671d8d, 0xbb1b564f, 0x6776ccf8, 0x07017e96, 0xdb6ce421, 0xc7ee1a4a, 0x1b8380fd, 0x7bf43293, 0xa799a824, 0x42f1ce45, 0x9e9c54f2, 0xfeebe69c, 0x22867c2b, 0x3e048240, 0xe26918f7, 0x821eaa99, 0x5e73302e, 0x77f5ad48, 0xab9837ff, 0xcbef8591, 0x17821f26, 0x0b00e14d, 0xd76d7bfa, 0xb71ac994, 0x6b775323, 0x8e1f3542, 0x5272aff5, 0x32051d9b, 0xee68872c, 0xf2ea7947, 0x2e87e3f0, 0x4ef0519e, 0x929dcb29, 0x80e180eb, 0x5c8c1a5c, 0x3cfba832, 0xe0963285, 0xfc14ccee, 0x20795659, 0x400ee437, 0x9c637e80, 0x790b18e1, 0xa5668256, 0xc5113038, 0x197caa8f, 0x05fe54e4, 0xd993ce53, 0xb9e47c3d, 0x6589e68a, 0x9d1cebb9, 0x4171710e, 0x2106c360, 0xfd6b59d7, 0xe1e9a7bc, 0x3d843d0b, 0x5df38f65, 0x819e15d2, 0x64f673b3, 0xb89be904, 0xd8ec5b6a, 0x0481c1dd, 0x18033fb6, 0xc46ea501, 0xa419176f, 0x78748dd8, 0x6a08c61a, 0xb6655cad, 0xd612eec3, 0x0a7f7474, 0x16fd8a1f, 0xca9010a8, 0xaae7a2c6, 0x768a3871, 0x93e25e10, 0x4f8fc4a7, 0x2ff876c9, 0xf395ec7e, 0xef171215, 0x337a88a2, 0x530d3acc, 0x8f60a07b, ], [ 0x00000000, 0x490d678d, 0x921acf1a, 0xdb17a897, 0x20f48383, 0x69f9e40e, 0xb2ee4c99, 0xfbe32b14, 0x41e90706, 0x08e4608b, 0xd3f3c81c, 0x9afeaf91, 0x611d8485, 0x2810e308, 0xf3074b9f, 0xba0a2c12, 0x83d20e0c, 0xcadf6981, 0x11c8c116, 0x58c5a69b, 0xa3268d8f, 0xea2bea02, 0x313c4295, 0x78312518, 0xc23b090a, 0x8b366e87, 0x5021c610, 0x192ca19d, 0xe2cf8a89, 0xabc2ed04, 0x70d54593, 0x39d8221e, 0x036501af, 0x4a686622, 0x917fceb5, 0xd872a938, 0x2391822c, 0x6a9ce5a1, 0xb18b4d36, 0xf8862abb, 0x428c06a9, 0x0b816124, 0xd096c9b3, 0x999bae3e, 0x6278852a, 0x2b75e2a7, 0xf0624a30, 0xb96f2dbd, 0x80b70fa3, 0xc9ba682e, 0x12adc0b9, 0x5ba0a734, 0xa0438c20, 0xe94eebad, 0x3259433a, 0x7b5424b7, 0xc15e08a5, 0x88536f28, 0x5344c7bf, 0x1a49a032, 0xe1aa8b26, 0xa8a7ecab, 0x73b0443c, 0x3abd23b1, 0x06ca035e, 0x4fc764d3, 0x94d0cc44, 0xddddabc9, 0x263e80dd, 0x6f33e750, 0xb4244fc7, 0xfd29284a, 0x47230458, 0x0e2e63d5, 0xd539cb42, 0x9c34accf, 0x67d787db, 0x2edae056, 0xf5cd48c1, 0xbcc02f4c, 0x85180d52, 0xcc156adf, 0x1702c248, 0x5e0fa5c5, 0xa5ec8ed1, 0xece1e95c, 0x37f641cb, 0x7efb2646, 0xc4f10a54, 0x8dfc6dd9, 0x56ebc54e, 0x1fe6a2c3, 0xe40589d7, 0xad08ee5a, 0x761f46cd, 0x3f122140, 0x05af02f1, 0x4ca2657c, 0x97b5cdeb, 0xdeb8aa66, 0x255b8172, 0x6c56e6ff, 0xb7414e68, 0xfe4c29e5, 0x444605f7, 0x0d4b627a, 0xd65ccaed, 0x9f51ad60, 0x64b28674, 0x2dbfe1f9, 0xf6a8496e, 0xbfa52ee3, 0x867d0cfd, 0xcf706b70, 0x1467c3e7, 0x5d6aa46a, 0xa6898f7e, 0xef84e8f3, 0x34934064, 0x7d9e27e9, 0xc7940bfb, 0x8e996c76, 0x558ec4e1, 0x1c83a36c, 0xe7608878, 0xae6deff5, 0x757a4762, 0x3c7720ef, 0x0d9406bc, 0x44996131, 0x9f8ec9a6, 0xd683ae2b, 0x2d60853f, 0x646de2b2, 0xbf7a4a25, 0xf6772da8, 0x4c7d01ba, 0x05706637, 0xde67cea0, 0x976aa92d, 0x6c898239, 0x2584e5b4, 0xfe934d23, 0xb79e2aae, 0x8e4608b0, 0xc74b6f3d, 0x1c5cc7aa, 0x5551a027, 0xaeb28b33, 0xe7bfecbe, 0x3ca84429, 0x75a523a4, 0xcfaf0fb6, 0x86a2683b, 0x5db5c0ac, 0x14b8a721, 0xef5b8c35, 0xa656ebb8, 0x7d41432f, 0x344c24a2, 0x0ef10713, 0x47fc609e, 0x9cebc809, 0xd5e6af84, 0x2e058490, 0x6708e31d, 0xbc1f4b8a, 0xf5122c07, 0x4f180015, 0x06156798, 0xdd02cf0f, 0x940fa882, 0x6fec8396, 0x26e1e41b, 0xfdf64c8c, 0xb4fb2b01, 0x8d23091f, 0xc42e6e92, 0x1f39c605, 0x5634a188, 0xadd78a9c, 0xe4daed11, 0x3fcd4586, 0x76c0220b, 0xccca0e19, 0x85c76994, 0x5ed0c103, 0x17dda68e, 0xec3e8d9a, 0xa533ea17, 0x7e244280, 0x3729250d, 0x0b5e05e2, 0x4253626f, 0x9944caf8, 0xd049ad75, 0x2baa8661, 0x62a7e1ec, 0xb9b0497b, 0xf0bd2ef6, 0x4ab702e4, 0x03ba6569, 0xd8adcdfe, 0x91a0aa73, 0x6a438167, 0x234ee6ea, 0xf8594e7d, 0xb15429f0, 0x888c0bee, 0xc1816c63, 0x1a96c4f4, 0x539ba379, 0xa878886d, 0xe175efe0, 0x3a624777, 0x736f20fa, 0xc9650ce8, 0x80686b65, 0x5b7fc3f2, 0x1272a47f, 0xe9918f6b, 0xa09ce8e6, 0x7b8b4071, 0x328627fc, 0x083b044d, 0x413663c0, 0x9a21cb57, 0xd32cacda, 0x28cf87ce, 0x61c2e043, 0xbad548d4, 0xf3d82f59, 0x49d2034b, 0x00df64c6, 0xdbc8cc51, 0x92c5abdc, 0x692680c8, 0x202be745, 0xfb3c4fd2, 0xb231285f, 0x8be90a41, 0xc2e46dcc, 0x19f3c55b, 0x50fea2d6, 0xab1d89c2, 0xe210ee4f, 0x390746d8, 0x700a2155, 0xca000d47, 0x830d6aca, 0x581ac25d, 0x1117a5d0, 0xeaf48ec4, 0xa3f9e949, 0x78ee41de, 0x31e32653, ], [ 0x00000000, 0x1b280d78, 0x36501af0, 0x2d781788, 0x6ca035e0, 0x77883898, 0x5af02f10, 0x41d82268, 0xd9406bc0, 0xc26866b8, 0xef107130, 0xf4387c48, 0xb5e05e20, 0xaec85358, 0x83b044d0, 0x989849a8, 0xb641ca37, 0xad69c74f, 0x8011d0c7, 0x9b39ddbf, 0xdae1ffd7, 0xc1c9f2af, 0xecb1e527, 0xf799e85f, 0x6f01a1f7, 0x7429ac8f, 0x5951bb07, 0x4279b67f, 0x03a19417, 0x1889996f, 0x35f18ee7, 0x2ed9839f, 0x684289d9, 0x736a84a1, 0x5e129329, 0x453a9e51, 0x04e2bc39, 0x1fcab141, 0x32b2a6c9, 0x299aabb1, 0xb102e219, 0xaa2aef61, 0x8752f8e9, 0x9c7af591, 0xdda2d7f9, 0xc68ada81, 0xebf2cd09, 0xf0dac071, 0xde0343ee, 0xc52b4e96, 0xe853591e, 0xf37b5466, 0xb2a3760e, 0xa98b7b76, 0x84f36cfe, 0x9fdb6186, 0x0743282e, 0x1c6b2556, 0x311332de, 0x2a3b3fa6, 0x6be31dce, 0x70cb10b6, 0x5db3073e, 0x469b0a46, 0xd08513b2, 0xcbad1eca, 0xe6d50942, 0xfdfd043a, 0xbc252652, 0xa70d2b2a, 0x8a753ca2, 0x915d31da, 0x09c57872, 0x12ed750a, 0x3f956282, 0x24bd6ffa, 0x65654d92, 0x7e4d40ea, 0x53355762, 0x481d5a1a, 0x66c4d985, 0x7decd4fd, 0x5094c375, 0x4bbcce0d, 0x0a64ec65, 0x114ce11d, 0x3c34f695, 0x271cfbed, 0xbf84b245, 0xa4acbf3d, 0x89d4a8b5, 0x92fca5cd, 0xd32487a5, 0xc80c8add, 0xe5749d55, 0xfe5c902d, 0xb8c79a6b, 0xa3ef9713, 0x8e97809b, 0x95bf8de3, 0xd467af8b, 0xcf4fa2f3, 0xe237b57b, 0xf91fb803, 0x6187f1ab, 0x7aaffcd3, 0x57d7eb5b, 0x4cffe623, 0x0d27c44b, 0x160fc933, 0x3b77debb, 0x205fd3c3, 0x0e86505c, 0x15ae5d24, 0x38d64aac, 0x23fe47d4, 0x622665bc, 0x790e68c4, 0x54767f4c, 0x4f5e7234, 0xd7c63b9c, 0xccee36e4, 0xe196216c, 0xfabe2c14, 0xbb660e7c, 0xa04e0304, 0x8d36148c, 0x961e19f4, 0xa5cb3ad3, 0xbee337ab, 0x939b2023, 0x88b32d5b, 0xc96b0f33, 0xd243024b, 0xff3b15c3, 0xe41318bb, 0x7c8b5113, 0x67a35c6b, 0x4adb4be3, 0x51f3469b, 0x102b64f3, 0x0b03698b, 0x267b7e03, 0x3d53737b, 0x138af0e4, 0x08a2fd9c, 0x25daea14, 0x3ef2e76c, 0x7f2ac504, 0x6402c87c, 0x497adff4, 0x5252d28c, 0xcaca9b24, 0xd1e2965c, 0xfc9a81d4, 0xe7b28cac, 0xa66aaec4, 0xbd42a3bc, 0x903ab434, 0x8b12b94c, 0xcd89b30a, 0xd6a1be72, 0xfbd9a9fa, 0xe0f1a482, 0xa12986ea, 0xba018b92, 0x97799c1a, 0x8c519162, 0x14c9d8ca, 0x0fe1d5b2, 0x2299c23a, 0x39b1cf42, 0x7869ed2a, 0x6341e052, 0x4e39f7da, 0x5511faa2, 0x7bc8793d, 0x60e07445, 0x4d9863cd, 0x56b06eb5, 0x17684cdd, 0x0c4041a5, 0x2138562d, 0x3a105b55, 0xa28812fd, 0xb9a01f85, 0x94d8080d, 0x8ff00575, 0xce28271d, 0xd5002a65, 0xf8783ded, 0xe3503095, 0x754e2961, 0x6e662419, 0x431e3391, 0x58363ee9, 0x19ee1c81, 0x02c611f9, 0x2fbe0671, 0x34960b09, 0xac0e42a1, 0xb7264fd9, 0x9a5e5851, 0x81765529, 0xc0ae7741, 0xdb867a39, 0xf6fe6db1, 0xedd660c9, 0xc30fe356, 0xd827ee2e, 0xf55ff9a6, 0xee77f4de, 0xafafd6b6, 0xb487dbce, 0x99ffcc46, 0x82d7c13e, 0x1a4f8896, 0x016785ee, 0x2c1f9266, 0x37379f1e, 0x76efbd76, 0x6dc7b00e, 0x40bfa786, 0x5b97aafe, 0x1d0ca0b8, 0x0624adc0, 0x2b5cba48, 0x3074b730, 0x71ac9558, 0x6a849820, 0x47fc8fa8, 0x5cd482d0, 0xc44ccb78, 0xdf64c600, 0xf21cd188, 0xe934dcf0, 0xa8ecfe98, 0xb3c4f3e0, 0x9ebce468, 0x8594e910, 0xab4d6a8f, 0xb06567f7, 0x9d1d707f, 0x86357d07, 0xc7ed5f6f, 0xdcc55217, 0xf1bd459f, 0xea9548e7, 0x720d014f, 0x69250c37, 0x445d1bbf, 0x5f7516c7, 0x1ead34af, 0x058539d7, 0x28fd2e5f, 0x33d52327, ], [ 0x00000000, 0x4f576811, 0x9eaed022, 0xd1f9b833, 0x399cbdf3, 0x76cbd5e2, 0xa7326dd1, 0xe86505c0, 0x73397be6, 0x3c6e13f7, 0xed97abc4, 0xa2c0c3d5, 0x4aa5c615, 0x05f2ae04, 0xd40b1637, 0x9b5c7e26, 0xe672f7cc, 0xa9259fdd, 0x78dc27ee, 0x378b4fff, 0xdfee4a3f, 0x90b9222e, 0x41409a1d, 0x0e17f20c, 0x954b8c2a, 0xda1ce43b, 0x0be55c08, 0x44b23419, 0xacd731d9, 0xe38059c8, 0x3279e1fb, 0x7d2e89ea, 0xc824f22f, 0x87739a3e, 0x568a220d, 0x19dd4a1c, 0xf1b84fdc, 0xbeef27cd, 0x6f169ffe, 0x2041f7ef, 0xbb1d89c9, 0xf44ae1d8, 0x25b359eb, 0x6ae431fa, 0x8281343a, 0xcdd65c2b, 0x1c2fe418, 0x53788c09, 0x2e5605e3, 0x61016df2, 0xb0f8d5c1, 0xffafbdd0, 0x17cab810, 0x589dd001, 0x89646832, 0xc6330023, 0x5d6f7e05, 0x12381614, 0xc3c1ae27, 0x8c96c636, 0x64f3c3f6, 0x2ba4abe7, 0xfa5d13d4, 0xb50a7bc5, 0x9488f9e9, 0xdbdf91f8, 0x0a2629cb, 0x457141da, 0xad14441a, 0xe2432c0b, 0x33ba9438, 0x7cedfc29, 0xe7b1820f, 0xa8e6ea1e, 0x791f522d, 0x36483a3c, 0xde2d3ffc, 0x917a57ed, 0x4083efde, 0x0fd487cf, 0x72fa0e25, 0x3dad6634, 0xec54de07, 0xa303b616, 0x4b66b3d6, 0x0431dbc7, 0xd5c863f4, 0x9a9f0be5, 0x01c375c3, 0x4e941dd2, 0x9f6da5e1, 0xd03acdf0, 0x385fc830, 0x7708a021, 0xa6f11812, 0xe9a67003, 0x5cac0bc6, 0x13fb63d7, 0xc202dbe4, 0x8d55b3f5, 0x6530b635, 0x2a67de24, 0xfb9e6617, 0xb4c90e06, 0x2f957020, 0x60c21831, 0xb13ba002, 0xfe6cc813, 0x1609cdd3, 0x595ea5c2, 0x88a71df1, 0xc7f075e0, 0xbadefc0a, 0xf589941b, 0x24702c28, 0x6b274439, 0x834241f9, 0xcc1529e8, 0x1dec91db, 0x52bbf9ca, 0xc9e787ec, 0x86b0effd, 0x574957ce, 0x181e3fdf, 0xf07b3a1f, 0xbf2c520e, 0x6ed5ea3d, 0x2182822c, 0x2dd0ee65, 0x62878674, 0xb37e3e47, 0xfc295656, 0x144c5396, 0x5b1b3b87, 0x8ae283b4, 0xc5b5eba5, 0x5ee99583, 0x11befd92, 0xc04745a1, 0x8f102db0, 0x67752870, 0x28224061, 0xf9dbf852, 0xb68c9043, 0xcba219a9, 0x84f571b8, 0x550cc98b, 0x1a5ba19a, 0xf23ea45a, 0xbd69cc4b, 0x6c907478, 0x23c71c69, 0xb89b624f, 0xf7cc0a5e, 0x2635b26d, 0x6962da7c, 0x8107dfbc, 0xce50b7ad, 0x1fa90f9e, 0x50fe678f, 0xe5f41c4a, 0xaaa3745b, 0x7b5acc68, 0x340da479, 0xdc68a1b9, 0x933fc9a8, 0x42c6719b, 0x0d91198a, 0x96cd67ac, 0xd99a0fbd, 0x0863b78e, 0x4734df9f, 0xaf51da5f, 0xe006b24e, 0x31ff0a7d, 0x7ea8626c, 0x0386eb86, 0x4cd18397, 0x9d283ba4, 0xd27f53b5, 0x3a1a5675, 0x754d3e64, 0xa4b48657, 0xebe3ee46, 0x70bf9060, 0x3fe8f871, 0xee114042, 0xa1462853, 0x49232d93, 0x06744582, 0xd78dfdb1, 0x98da95a0, 0xb958178c, 0xf60f7f9d, 0x27f6c7ae, 0x68a1afbf, 0x80c4aa7f, 0xcf93c26e, 0x1e6a7a5d, 0x513d124c, 0xca616c6a, 0x8536047b, 0x54cfbc48, 0x1b98d459, 0xf3fdd199, 0xbcaab988, 0x6d5301bb, 0x220469aa, 0x5f2ae040, 0x107d8851, 0xc1843062, 0x8ed35873, 0x66b65db3, 0x29e135a2, 0xf8188d91, 0xb74fe580, 0x2c139ba6, 0x6344f3b7, 0xb2bd4b84, 0xfdea2395, 0x158f2655, 0x5ad84e44, 0x8b21f677, 0xc4769e66, 0x717ce5a3, 0x3e2b8db2, 0xefd23581, 0xa0855d90, 0x48e05850, 0x07b73041, 0xd64e8872, 0x9919e063, 0x02459e45, 0x4d12f654, 0x9ceb4e67, 0xd3bc2676, 0x3bd923b6, 0x748e4ba7, 0xa577f394, 0xea209b85, 0x970e126f, 0xd8597a7e, 0x09a0c24d, 0x46f7aa5c, 0xae92af9c, 0xe1c5c78d, 0x303c7fbe, 0x7f6b17af, 0xe4376989, 0xab600198, 0x7a99b9ab, 0x35ced1ba, 0xddabd47a, 0x92fcbc6b, 0x43050458, 0x0c526c49, ], [ 0x00000000, 0x5ba1dcca, 0xb743b994, 0xece2655e, 0x6a466e9f, 0x31e7b255, 0xdd05d70b, 0x86a40bc1, 0xd48cdd3e, 0x8f2d01f4, 0x63cf64aa, 0x386eb860, 0xbecab3a1, 0xe56b6f6b, 0x09890a35, 0x5228d6ff, 0xadd8a7cb, 0xf6797b01, 0x1a9b1e5f, 0x413ac295, 0xc79ec954, 0x9c3f159e, 0x70dd70c0, 0x2b7cac0a, 0x79547af5, 0x22f5a63f, 0xce17c361, 0x95b61fab, 0x1312146a, 0x48b3c8a0, 0xa451adfe, 0xfff07134, 0x5f705221, 0x04d18eeb, 0xe833ebb5, 0xb392377f, 0x35363cbe, 0x6e97e074, 0x8275852a, 0xd9d459e0, 0x8bfc8f1f, 0xd05d53d5, 0x3cbf368b, 0x671eea41, 0xe1bae180, 0xba1b3d4a, 0x56f95814, 0x0d5884de, 0xf2a8f5ea, 0xa9092920, 0x45eb4c7e, 0x1e4a90b4, 0x98ee9b75, 0xc34f47bf, 0x2fad22e1, 0x740cfe2b, 0x262428d4, 0x7d85f41e, 0x91679140, 0xcac64d8a, 0x4c62464b, 0x17c39a81, 0xfb21ffdf, 0xa0802315, 0xbee0a442, 0xe5417888, 0x09a31dd6, 0x5202c11c, 0xd4a6cadd, 0x8f071617, 0x63e57349, 0x3844af83, 0x6a6c797c, 0x31cda5b6, 0xdd2fc0e8, 0x868e1c22, 0x002a17e3, 0x5b8bcb29, 0xb769ae77, 0xecc872bd, 0x13380389, 0x4899df43, 0xa47bba1d, 0xffda66d7, 0x797e6d16, 0x22dfb1dc, 0xce3dd482, 0x959c0848, 0xc7b4deb7, 0x9c15027d, 0x70f76723, 0x2b56bbe9, 0xadf2b028, 0xf6536ce2, 0x1ab109bc, 0x4110d576, 0xe190f663, 0xba312aa9, 0x56d34ff7, 0x0d72933d, 0x8bd698fc, 0xd0774436, 0x3c952168, 0x6734fda2, 0x351c2b5d, 0x6ebdf797, 0x825f92c9, 0xd9fe4e03, 0x5f5a45c2, 0x04fb9908, 0xe819fc56, 0xb3b8209c, 0x4c4851a8, 0x17e98d62, 0xfb0be83c, 0xa0aa34f6, 0x260e3f37, 0x7dafe3fd, 0x914d86a3, 0xcaec5a69, 0x98c48c96, 0xc365505c, 0x2f873502, 0x7426e9c8, 0xf282e209, 0xa9233ec3, 0x45c15b9d, 0x1e608757, 0x79005533, 0x22a189f9, 0xce43eca7, 0x95e2306d, 0x13463bac, 0x48e7e766, 0xa4058238, 0xffa45ef2, 0xad8c880d, 0xf62d54c7, 0x1acf3199, 0x416eed53, 0xc7cae692, 0x9c6b3a58, 0x70895f06, 0x2b2883cc, 0xd4d8f2f8, 0x8f792e32, 0x639b4b6c, 0x383a97a6, 0xbe9e9c67, 0xe53f40ad, 0x09dd25f3, 0x527cf939, 0x00542fc6, 0x5bf5f30c, 0xb7179652, 0xecb64a98, 0x6a124159, 0x31b39d93, 0xdd51f8cd, 0x86f02407, 0x26700712, 0x7dd1dbd8, 0x9133be86, 0xca92624c, 0x4c36698d, 0x1797b547, 0xfb75d019, 0xa0d40cd3, 0xf2fcda2c, 0xa95d06e6, 0x45bf63b8, 0x1e1ebf72, 0x98bab4b3, 0xc31b6879, 0x2ff90d27, 0x7458d1ed, 0x8ba8a0d9, 0xd0097c13, 0x3ceb194d, 0x674ac587, 0xe1eece46, 0xba4f128c, 0x56ad77d2, 0x0d0cab18, 0x5f247de7, 0x0485a12d, 0xe867c473, 0xb3c618b9, 0x35621378, 0x6ec3cfb2, 0x8221aaec, 0xd9807626, 0xc7e0f171, 0x9c412dbb, 0x70a348e5, 0x2b02942f, 0xada69fee, 0xf6074324, 0x1ae5267a, 0x4144fab0, 0x136c2c4f, 0x48cdf085, 0xa42f95db, 0xff8e4911, 0x792a42d0, 0x228b9e1a, 0xce69fb44, 0x95c8278e, 0x6a3856ba, 0x31998a70, 0xdd7bef2e, 0x86da33e4, 0x007e3825, 0x5bdfe4ef, 0xb73d81b1, 0xec9c5d7b, 0xbeb48b84, 0xe515574e, 0x09f73210, 0x5256eeda, 0xd4f2e51b, 0x8f5339d1, 0x63b15c8f, 0x38108045, 0x9890a350, 0xc3317f9a, 0x2fd31ac4, 0x7472c60e, 0xf2d6cdcf, 0xa9771105, 0x4595745b, 0x1e34a891, 0x4c1c7e6e, 0x17bda2a4, 0xfb5fc7fa, 0xa0fe1b30, 0x265a10f1, 0x7dfbcc3b, 0x9119a965, 0xcab875af, 0x3548049b, 0x6ee9d851, 0x820bbd0f, 0xd9aa61c5, 0x5f0e6a04, 0x04afb6ce, 0xe84dd390, 0xb3ec0f5a, 0xe1c4d9a5, 0xba65056f, 0x56876031, 0x0d26bcfb, 0x8b82b73a, 0xd0236bf0, 0x3cc10eae, 0x6760d264, ], [ 0x00000000, 0xf200aa66, 0xe0c0497b, 0x12c0e31d, 0xc5418f41, 0x37412527, 0x2581c63a, 0xd7816c5c, 0x8e420335, 0x7c42a953, 0x6e824a4e, 0x9c82e028, 0x4b038c74, 0xb9032612, 0xabc3c50f, 0x59c36f69, 0x18451bdd, 0xea45b1bb, 0xf88552a6, 0x0a85f8c0, 0xdd04949c, 0x2f043efa, 0x3dc4dde7, 0xcfc47781, 0x960718e8, 0x6407b28e, 0x76c75193, 0x84c7fbf5, 0x534697a9, 0xa1463dcf, 0xb386ded2, 0x418674b4, 0x308a37ba, 0xc28a9ddc, 0xd04a7ec1, 0x224ad4a7, 0xf5cbb8fb, 0x07cb129d, 0x150bf180, 0xe70b5be6, 0xbec8348f, 0x4cc89ee9, 0x5e087df4, 0xac08d792, 0x7b89bbce, 0x898911a8, 0x9b49f2b5, 0x694958d3, 0x28cf2c67, 0xdacf8601, 0xc80f651c, 0x3a0fcf7a, 0xed8ea326, 0x1f8e0940, 0x0d4eea5d, 0xff4e403b, 0xa68d2f52, 0x548d8534, 0x464d6629, 0xb44dcc4f, 0x63cca013, 0x91cc0a75, 0x830ce968, 0x710c430e, 0x61146f74, 0x9314c512, 0x81d4260f, 0x73d48c69, 0xa455e035, 0x56554a53, 0x4495a94e, 0xb6950328, 0xef566c41, 0x1d56c627, 0x0f96253a, 0xfd968f5c, 0x2a17e300, 0xd8174966, 0xcad7aa7b, 0x38d7001d, 0x795174a9, 0x8b51decf, 0x99913dd2, 0x6b9197b4, 0xbc10fbe8, 0x4e10518e, 0x5cd0b293, 0xaed018f5, 0xf713779c, 0x0513ddfa, 0x17d33ee7, 0xe5d39481, 0x3252f8dd, 0xc05252bb, 0xd292b1a6, 0x20921bc0, 0x519e58ce, 0xa39ef2a8, 0xb15e11b5, 0x435ebbd3, 0x94dfd78f, 0x66df7de9, 0x741f9ef4, 0x861f3492, 0xdfdc5bfb, 0x2ddcf19d, 0x3f1c1280, 0xcd1cb8e6, 0x1a9dd4ba, 0xe89d7edc, 0xfa5d9dc1, 0x085d37a7, 0x49db4313, 0xbbdbe975, 0xa91b0a68, 0x5b1ba00e, 0x8c9acc52, 0x7e9a6634, 0x6c5a8529, 0x9e5a2f4f, 0xc7994026, 0x3599ea40, 0x2759095d, 0xd559a33b, 0x02d8cf67, 0xf0d86501, 0xe218861c, 0x10182c7a, 0xc228dee8, 0x3028748e, 0x22e89793, 0xd0e83df5, 0x076951a9, 0xf569fbcf, 0xe7a918d2, 0x15a9b2b4, 0x4c6adddd, 0xbe6a77bb, 0xacaa94a6, 0x5eaa3ec0, 0x892b529c, 0x7b2bf8fa, 0x69eb1be7, 0x9bebb181, 0xda6dc535, 0x286d6f53, 0x3aad8c4e, 0xc8ad2628, 0x1f2c4a74, 0xed2ce012, 0xffec030f, 0x0deca969, 0x542fc600, 0xa62f6c66, 0xb4ef8f7b, 0x46ef251d, 0x916e4941, 0x636ee327, 0x71ae003a, 0x83aeaa5c, 0xf2a2e952, 0x00a24334, 0x1262a029, 0xe0620a4f, 0x37e36613, 0xc5e3cc75, 0xd7232f68, 0x2523850e, 0x7ce0ea67, 0x8ee04001, 0x9c20a31c, 0x6e20097a, 0xb9a16526, 0x4ba1cf40, 0x59612c5d, 0xab61863b, 0xeae7f28f, 0x18e758e9, 0x0a27bbf4, 0xf8271192, 0x2fa67dce, 0xdda6d7a8, 0xcf6634b5, 0x3d669ed3, 0x64a5f1ba, 0x96a55bdc, 0x8465b8c1, 0x766512a7, 0xa1e47efb, 0x53e4d49d, 0x41243780, 0xb3249de6, 0xa33cb19c, 0x513c1bfa, 0x43fcf8e7, 0xb1fc5281, 0x667d3edd, 0x947d94bb, 0x86bd77a6, 0x74bdddc0, 0x2d7eb2a9, 0xdf7e18cf, 0xcdbefbd2, 0x3fbe51b4, 0xe83f3de8, 0x1a3f978e, 0x08ff7493, 0xfaffdef5, 0xbb79aa41, 0x49790027, 0x5bb9e33a, 0xa9b9495c, 0x7e382500, 0x8c388f66, 0x9ef86c7b, 0x6cf8c61d, 0x353ba974, 0xc73b0312, 0xd5fbe00f, 0x27fb4a69, 0xf07a2635, 0x027a8c53, 0x10ba6f4e, 0xe2bac528, 0x93b68626, 0x61b62c40, 0x7376cf5d, 0x8176653b, 0x56f70967, 0xa4f7a301, 0xb637401c, 0x4437ea7a, 0x1df48513, 0xeff42f75, 0xfd34cc68, 0x0f34660e, 0xd8b50a52, 0x2ab5a034, 0x38754329, 0xca75e94f, 0x8bf39dfb, 0x79f3379d, 0x6b33d480, 0x99337ee6, 0x4eb212ba, 0xbcb2b8dc, 0xae725bc1, 0x5c72f1a7, 0x05b19ece, 0xf7b134a8, 0xe571d7b5, 0x17717dd3, 0xc0f0118f, 0x32f0bbe9, 0x203058f4, 0xd230f292, ], [ 0x00000000, 0x8090a067, 0x05e05d79, 0x8570fd1e, 0x0bc0baf2, 0x8b501a95, 0x0e20e78b, 0x8eb047ec, 0x178175e4, 0x9711d583, 0x1261289d, 0x92f188fa, 0x1c41cf16, 0x9cd16f71, 0x19a1926f, 0x99313208, 0x2f02ebc8, 0xaf924baf, 0x2ae2b6b1, 0xaa7216d6, 0x24c2513a, 0xa452f15d, 0x21220c43, 0xa1b2ac24, 0x38839e2c, 0xb8133e4b, 0x3d63c355, 0xbdf36332, 0x334324de, 0xb3d384b9, 0x36a379a7, 0xb633d9c0, 0x5e05d790, 0xde9577f7, 0x5be58ae9, 0xdb752a8e, 0x55c56d62, 0xd555cd05, 0x5025301b, 0xd0b5907c, 0x4984a274, 0xc9140213, 0x4c64ff0d, 0xccf45f6a, 0x42441886, 0xc2d4b8e1, 0x47a445ff, 0xc734e598, 0x71073c58, 0xf1979c3f, 0x74e76121, 0xf477c146, 0x7ac786aa, 0xfa5726cd, 0x7f27dbd3, 0xffb77bb4, 0x668649bc, 0xe616e9db, 0x636614c5, 0xe3f6b4a2, 0x6d46f34e, 0xedd65329, 0x68a6ae37, 0xe8360e50, 0xbc0baf20, 0x3c9b0f47, 0xb9ebf259, 0x397b523e, 0xb7cb15d2, 0x375bb5b5, 0xb22b48ab, 0x32bbe8cc, 0xab8adac4, 0x2b1a7aa3, 0xae6a87bd, 0x2efa27da, 0xa04a6036, 0x20dac051, 0xa5aa3d4f, 0x253a9d28, 0x930944e8, 0x1399e48f, 0x96e91991, 0x1679b9f6, 0x98c9fe1a, 0x18595e7d, 0x9d29a363, 0x1db90304, 0x8488310c, 0x0418916b, 0x81686c75, 0x01f8cc12, 0x8f488bfe, 0x0fd82b99, 0x8aa8d687, 0x0a3876e0, 0xe20e78b0, 0x629ed8d7, 0xe7ee25c9, 0x677e85ae, 0xe9cec242, 0x695e6225, 0xec2e9f3b, 0x6cbe3f5c, 0xf58f0d54, 0x751fad33, 0xf06f502d, 0x70fff04a, 0xfe4fb7a6, 0x7edf17c1, 0xfbafeadf, 0x7b3f4ab8, 0xcd0c9378, 0x4d9c331f, 0xc8ecce01, 0x487c6e66, 0xc6cc298a, 0x465c89ed, 0xc32c74f3, 0x43bcd494, 0xda8de69c, 0x5a1d46fb, 0xdf6dbbe5, 0x5ffd1b82, 0xd14d5c6e, 0x51ddfc09, 0xd4ad0117, 0x543da170, 0x7cd643f7, 0xfc46e390, 0x79361e8e, 0xf9a6bee9, 0x7716f905, 0xf7865962, 0x72f6a47c, 0xf266041b, 0x6b573613, 0xebc79674, 0x6eb76b6a, 0xee27cb0d, 0x60978ce1, 0xe0072c86, 0x6577d198, 0xe5e771ff, 0x53d4a83f, 0xd3440858, 0x5634f546, 0xd6a45521, 0x581412cd, 0xd884b2aa, 0x5df44fb4, 0xdd64efd3, 0x4455dddb, 0xc4c57dbc, 0x41b580a2, 0xc12520c5, 0x4f956729, 0xcf05c74e, 0x4a753a50, 0xcae59a37, 0x22d39467, 0xa2433400, 0x2733c91e, 0xa7a36979, 0x29132e95, 0xa9838ef2, 0x2cf373ec, 0xac63d38b, 0x3552e183, 0xb5c241e4, 0x30b2bcfa, 0xb0221c9d, 0x3e925b71, 0xbe02fb16, 0x3b720608, 0xbbe2a66f, 0x0dd17faf, 0x8d41dfc8, 0x083122d6, 0x88a182b1, 0x0611c55d, 0x8681653a, 0x03f19824, 0x83613843, 0x1a500a4b, 0x9ac0aa2c, 0x1fb05732, 0x9f20f755, 0x1190b0b9, 0x910010de, 0x1470edc0, 0x94e04da7, 0xc0ddecd7, 0x404d4cb0, 0xc53db1ae, 0x45ad11c9, 0xcb1d5625, 0x4b8df642, 0xcefd0b5c, 0x4e6dab3b, 0xd75c9933, 0x57cc3954, 0xd2bcc44a, 0x522c642d, 0xdc9c23c1, 0x5c0c83a6, 0xd97c7eb8, 0x59ecdedf, 0xefdf071f, 0x6f4fa778, 0xea3f5a66, 0x6aaffa01, 0xe41fbded, 0x648f1d8a, 0xe1ffe094, 0x616f40f3, 0xf85e72fb, 0x78ced29c, 0xfdbe2f82, 0x7d2e8fe5, 0xf39ec809, 0x730e686e, 0xf67e9570, 0x76ee3517, 0x9ed83b47, 0x1e489b20, 0x9b38663e, 0x1ba8c659, 0x951881b5, 0x158821d2, 0x90f8dccc, 0x10687cab, 0x89594ea3, 0x09c9eec4, 0x8cb913da, 0x0c29b3bd, 0x8299f451, 0x02095436, 0x8779a928, 0x07e9094f, 0xb1dad08f, 0x314a70e8, 0xb43a8df6, 0x34aa2d91, 0xba1a6a7d, 0x3a8aca1a, 0xbffa3704, 0x3f6a9763, 0xa65ba56b, 0x26cb050c, 0xa3bbf812, 0x232b5875, 0xad9b1f99, 0x2d0bbffe, 0xa87b42e0, 0x28ebe287, ], [ 0x00000000, 0xf9ac87ee, 0xf798126b, 0x0e349585, 0xebf13961, 0x125dbe8f, 0x1c692b0a, 0xe5c5ace4, 0xd3236f75, 0x2a8fe89b, 0x24bb7d1e, 0xdd17faf0, 0x38d25614, 0xc17ed1fa, 0xcf4a447f, 0x36e6c391, 0xa287c35d, 0x5b2b44b3, 0x551fd136, 0xacb356d8, 0x4976fa3c, 0xb0da7dd2, 0xbeeee857, 0x47426fb9, 0x71a4ac28, 0x88082bc6, 0x863cbe43, 0x7f9039ad, 0x9a559549, 0x63f912a7, 0x6dcd8722, 0x946100cc, 0x41ce9b0d, 0xb8621ce3, 0xb6568966, 0x4ffa0e88, 0xaa3fa26c, 0x53932582, 0x5da7b007, 0xa40b37e9, 0x92edf478, 0x6b417396, 0x6575e613, 0x9cd961fd, 0x791ccd19, 0x80b04af7, 0x8e84df72, 0x7728589c, 0xe3495850, 0x1ae5dfbe, 0x14d14a3b, 0xed7dcdd5, 0x08b86131, 0xf114e6df, 0xff20735a, 0x068cf4b4, 0x306a3725, 0xc9c6b0cb, 0xc7f2254e, 0x3e5ea2a0, 0xdb9b0e44, 0x223789aa, 0x2c031c2f, 0xd5af9bc1, 0x839d361a, 0x7a31b1f4, 0x74052471, 0x8da9a39f, 0x686c0f7b, 0x91c08895, 0x9ff41d10, 0x66589afe, 0x50be596f, 0xa912de81, 0xa7264b04, 0x5e8accea, 0xbb4f600e, 0x42e3e7e0, 0x4cd77265, 0xb57bf58b, 0x211af547, 0xd8b672a9, 0xd682e72c, 0x2f2e60c2, 0xcaebcc26, 0x33474bc8, 0x3d73de4d, 0xc4df59a3, 0xf2399a32, 0x0b951ddc, 0x05a18859, 0xfc0d0fb7, 0x19c8a353, 0xe06424bd, 0xee50b138, 0x17fc36d6, 0xc253ad17, 0x3bff2af9, 0x35cbbf7c, 0xcc673892, 0x29a29476, 0xd00e1398, 0xde3a861d, 0x279601f3, 0x1170c262, 0xe8dc458c, 0xe6e8d009, 0x1f4457e7, 0xfa81fb03, 0x032d7ced, 0x0d19e968, 0xf4b56e86, 0x60d46e4a, 0x9978e9a4, 0x974c7c21, 0x6ee0fbcf, 0x8b25572b, 0x7289d0c5, 0x7cbd4540, 0x8511c2ae, 0xb3f7013f, 0x4a5b86d1, 0x446f1354, 0xbdc394ba, 0x5806385e, 0xa1aabfb0, 0xaf9e2a35, 0x5632addb, 0x03fb7183, 0xfa57f66d, 0xf46363e8, 0x0dcfe406, 0xe80a48e2, 0x11a6cf0c, 0x1f925a89, 0xe63edd67, 0xd0d81ef6, 0x29749918, 0x27400c9d, 0xdeec8b73, 0x3b292797, 0xc285a079, 0xccb135fc, 0x351db212, 0xa17cb2de, 0x58d03530, 0x56e4a0b5, 0xaf48275b, 0x4a8d8bbf, 0xb3210c51, 0xbd1599d4, 0x44b91e3a, 0x725fddab, 0x8bf35a45, 0x85c7cfc0, 0x7c6b482e, 0x99aee4ca, 0x60026324, 0x6e36f6a1, 0x979a714f, 0x4235ea8e, 0xbb996d60, 0xb5adf8e5, 0x4c017f0b, 0xa9c4d3ef, 0x50685401, 0x5e5cc184, 0xa7f0466a, 0x911685fb, 0x68ba0215, 0x668e9790, 0x9f22107e, 0x7ae7bc9a, 0x834b3b74, 0x8d7faef1, 0x74d3291f, 0xe0b229d3, 0x191eae3d, 0x172a3bb8, 0xee86bc56, 0x0b4310b2, 0xf2ef975c, 0xfcdb02d9, 0x05778537, 0x339146a6, 0xca3dc148, 0xc40954cd, 0x3da5d323, 0xd8607fc7, 0x21ccf829, 0x2ff86dac, 0xd654ea42, 0x80664799, 0x79cac077, 0x77fe55f2, 0x8e52d21c, 0x6b977ef8, 0x923bf916, 0x9c0f6c93, 0x65a3eb7d, 0x534528ec, 0xaae9af02, 0xa4dd3a87, 0x5d71bd69, 0xb8b4118d, 0x41189663, 0x4f2c03e6, 0xb6808408, 0x22e184c4, 0xdb4d032a, 0xd57996af, 0x2cd51141, 0xc910bda5, 0x30bc3a4b, 0x3e88afce, 0xc7242820, 0xf1c2ebb1, 0x086e6c5f, 0x065af9da, 0xfff67e34, 0x1a33d2d0, 0xe39f553e, 0xedabc0bb, 0x14074755, 0xc1a8dc94, 0x38045b7a, 0x3630ceff, 0xcf9c4911, 0x2a59e5f5, 0xd3f5621b, 0xddc1f79e, 0x246d7070, 0x128bb3e1, 0xeb27340f, 0xe513a18a, 0x1cbf2664, 0xf97a8a80, 0x00d60d6e, 0x0ee298eb, 0xf74e1f05, 0x632f1fc9, 0x9a839827, 0x94b70da2, 0x6d1b8a4c, 0x88de26a8, 0x7172a146, 0x7f4634c3, 0x86eab32d, 0xb00c70bc, 0x49a0f752, 0x479462d7, 0xbe38e539, 0x5bfd49dd, 0xa251ce33, 0xac655bb6, 0x55c9dc58, ], [ 0x00000000, 0x07f6e306, 0x0fedc60c, 0x081b250a, 0x1fdb8c18, 0x182d6f1e, 0x10364a14, 0x17c0a912, 0x3fb71830, 0x3841fb36, 0x305ade3c, 0x37ac3d3a, 0x206c9428, 0x279a772e, 0x2f815224, 0x2877b122, 0x7f6e3060, 0x7898d366, 0x7083f66c, 0x7775156a, 0x60b5bc78, 0x67435f7e, 0x6f587a74, 0x68ae9972, 0x40d92850, 0x472fcb56, 0x4f34ee5c, 0x48c20d5a, 0x5f02a448, 0x58f4474e, 0x50ef6244, 0x57198142, 0xfedc60c0, 0xf92a83c6, 0xf131a6cc, 0xf6c745ca, 0xe107ecd8, 0xe6f10fde, 0xeeea2ad4, 0xe91cc9d2, 0xc16b78f0, 0xc69d9bf6, 0xce86befc, 0xc9705dfa, 0xdeb0f4e8, 0xd94617ee, 0xd15d32e4, 0xd6abd1e2, 0x81b250a0, 0x8644b3a6, 0x8e5f96ac, 0x89a975aa, 0x9e69dcb8, 0x999f3fbe, 0x91841ab4, 0x9672f9b2, 0xbe054890, 0xb9f3ab96, 0xb1e88e9c, 0xb61e6d9a, 0xa1dec488, 0xa628278e, 0xae330284, 0xa9c5e182, 0xf979dc37, 0xfe8f3f31, 0xf6941a3b, 0xf162f93d, 0xe6a2502f, 0xe154b329, 0xe94f9623, 0xeeb97525, 0xc6cec407, 0xc1382701, 0xc923020b, 0xced5e10d, 0xd915481f, 0xdee3ab19, 0xd6f88e13, 0xd10e6d15, 0x8617ec57, 0x81e10f51, 0x89fa2a5b, 0x8e0cc95d, 0x99cc604f, 0x9e3a8349, 0x9621a643, 0x91d74545, 0xb9a0f467, 0xbe561761, 0xb64d326b, 0xb1bbd16d, 0xa67b787f, 0xa18d9b79, 0xa996be73, 0xae605d75, 0x07a5bcf7, 0x00535ff1, 0x08487afb, 0x0fbe99fd, 0x187e30ef, 0x1f88d3e9, 0x1793f6e3, 0x106515e5, 0x3812a4c7, 0x3fe447c1, 0x37ff62cb, 0x300981cd, 0x27c928df, 0x203fcbd9, 0x2824eed3, 0x2fd20dd5, 0x78cb8c97, 0x7f3d6f91, 0x77264a9b, 0x70d0a99d, 0x6710008f, 0x60e6e389, 0x68fdc683, 0x6f0b2585, 0x477c94a7, 0x408a77a1, 0x489152ab, 0x4f67b1ad, 0x58a718bf, 0x5f51fbb9, 0x574adeb3, 0x50bc3db5, 0xf632a5d9, 0xf1c446df, 0xf9df63d5, 0xfe2980d3, 0xe9e929c1, 0xee1fcac7, 0xe604efcd, 0xe1f20ccb, 0xc985bde9, 0xce735eef, 0xc6687be5, 0xc19e98e3, 0xd65e31f1, 0xd1a8d2f7, 0xd9b3f7fd, 0xde4514fb, 0x895c95b9, 0x8eaa76bf, 0x86b153b5, 0x8147b0b3, 0x968719a1, 0x9171faa7, 0x996adfad, 0x9e9c3cab, 0xb6eb8d89, 0xb11d6e8f, 0xb9064b85, 0xbef0a883, 0xa9300191, 0xaec6e297, 0xa6ddc79d, 0xa12b249b, 0x08eec519, 0x0f18261f, 0x07030315, 0x00f5e013, 0x17354901, 0x10c3aa07, 0x18d88f0d, 0x1f2e6c0b, 0x3759dd29, 0x30af3e2f, 0x38b41b25, 0x3f42f823, 0x28825131, 0x2f74b237, 0x276f973d, 0x2099743b, 0x7780f579, 0x7076167f, 0x786d3375, 0x7f9bd073, 0x685b7961, 0x6fad9a67, 0x67b6bf6d, 0x60405c6b, 0x4837ed49, 0x4fc10e4f, 0x47da2b45, 0x402cc843, 0x57ec6151, 0x501a8257, 0x5801a75d, 0x5ff7445b, 0x0f4b79ee, 0x08bd9ae8, 0x00a6bfe2, 0x07505ce4, 0x1090f5f6, 0x176616f0, 0x1f7d33fa, 0x188bd0fc, 0x30fc61de, 0x370a82d8, 0x3f11a7d2, 0x38e744d4, 0x2f27edc6, 0x28d10ec0, 0x20ca2bca, 0x273cc8cc, 0x7025498e, 0x77d3aa88, 0x7fc88f82, 0x783e6c84, 0x6ffec596, 0x68082690, 0x6013039a, 0x67e5e09c, 0x4f9251be, 0x4864b2b8, 0x407f97b2, 0x478974b4, 0x5049dda6, 0x57bf3ea0, 0x5fa41baa, 0x5852f8ac, 0xf197192e, 0xf661fa28, 0xfe7adf22, 0xf98c3c24, 0xee4c9536, 0xe9ba7630, 0xe1a1533a, 0xe657b03c, 0xce20011e, 0xc9d6e218, 0xc1cdc712, 0xc63b2414, 0xd1fb8d06, 0xd60d6e00, 0xde164b0a, 0xd9e0a80c, 0x8ef9294e, 0x890fca48, 0x8114ef42, 0x86e20c44, 0x9122a556, 0x96d44650, 0x9ecf635a, 0x9939805c, 0xb14e317e, 0xb6b8d278, 0xbea3f772, 0xb9551474, 0xae95bd66, 0xa9635e60, 0xa1787b6a, 0xa68e986c, ], [ 0x00000000, 0xe8a45605, 0xd589b1bd, 0x3d2de7b8, 0xafd27ecd, 0x477628c8, 0x7a5bcf70, 0x92ff9975, 0x5b65e02d, 0xb3c1b628, 0x8eec5190, 0x66480795, 0xf4b79ee0, 0x1c13c8e5, 0x213e2f5d, 0xc99a7958, 0xb6cbc05a, 0x5e6f965f, 0x634271e7, 0x8be627e2, 0x1919be97, 0xf1bde892, 0xcc900f2a, 0x2434592f, 0xedae2077, 0x050a7672, 0x382791ca, 0xd083c7cf, 0x427c5eba, 0xaad808bf, 0x97f5ef07, 0x7f51b902, 0x69569d03, 0x81f2cb06, 0xbcdf2cbe, 0x547b7abb, 0xc684e3ce, 0x2e20b5cb, 0x130d5273, 0xfba90476, 0x32337d2e, 0xda972b2b, 0xe7bacc93, 0x0f1e9a96, 0x9de103e3, 0x754555e6, 0x4868b25e, 0xa0cce45b, 0xdf9d5d59, 0x37390b5c, 0x0a14ece4, 0xe2b0bae1, 0x704f2394, 0x98eb7591, 0xa5c69229, 0x4d62c42c, 0x84f8bd74, 0x6c5ceb71, 0x51710cc9, 0xb9d55acc, 0x2b2ac3b9, 0xc38e95bc, 0xfea37204, 0x16072401, 0xd2ad3a06, 0x3a096c03, 0x07248bbb, 0xef80ddbe, 0x7d7f44cb, 0x95db12ce, 0xa8f6f576, 0x4052a373, 0x89c8da2b, 0x616c8c2e, 0x5c416b96, 0xb4e53d93, 0x261aa4e6, 0xcebef2e3, 0xf393155b, 0x1b37435e, 0x6466fa5c, 0x8cc2ac59, 0xb1ef4be1, 0x594b1de4, 0xcbb48491, 0x2310d294, 0x1e3d352c, 0xf6996329, 0x3f031a71, 0xd7a74c74, 0xea8aabcc, 0x022efdc9, 0x90d164bc, 0x787532b9, 0x4558d501, 0xadfc8304, 0xbbfba705, 0x535ff100, 0x6e7216b8, 0x86d640bd, 0x1429d9c8, 0xfc8d8fcd, 0xc1a06875, 0x29043e70, 0xe09e4728, 0x083a112d, 0x3517f695, 0xddb3a090, 0x4f4c39e5, 0xa7e86fe0, 0x9ac58858, 0x7261de5d, 0x0d30675f, 0xe594315a, 0xd8b9d6e2, 0x301d80e7, 0xa2e21992, 0x4a464f97, 0x776ba82f, 0x9fcffe2a, 0x56558772, 0xbef1d177, 0x83dc36cf, 0x6b7860ca, 0xf987f9bf, 0x1123afba, 0x2c0e4802, 0xc4aa1e07, 0xa19b69bb, 0x493f3fbe, 0x7412d806, 0x9cb68e03, 0x0e491776, 0xe6ed4173, 0xdbc0a6cb, 0x3364f0ce, 0xfafe8996, 0x125adf93, 0x2f77382b, 0xc7d36e2e, 0x552cf75b, 0xbd88a15e, 0x80a546e6, 0x680110e3, 0x1750a9e1, 0xfff4ffe4, 0xc2d9185c, 0x2a7d4e59, 0xb882d72c, 0x50268129, 0x6d0b6691, 0x85af3094, 0x4c3549cc, 0xa4911fc9, 0x99bcf871, 0x7118ae74, 0xe3e73701, 0x0b436104, 0x366e86bc, 0xdecad0b9, 0xc8cdf4b8, 0x2069a2bd, 0x1d444505, 0xf5e01300, 0x671f8a75, 0x8fbbdc70, 0xb2963bc8, 0x5a326dcd, 0x93a81495, 0x7b0c4290, 0x4621a528, 0xae85f32d, 0x3c7a6a58, 0xd4de3c5d, 0xe9f3dbe5, 0x01578de0, 0x7e0634e2, 0x96a262e7, 0xab8f855f, 0x432bd35a, 0xd1d44a2f, 0x39701c2a, 0x045dfb92, 0xecf9ad97, 0x2563d4cf, 0xcdc782ca, 0xf0ea6572, 0x184e3377, 0x8ab1aa02, 0x6215fc07, 0x5f381bbf, 0xb79c4dba, 0x733653bd, 0x9b9205b8, 0xa6bfe200, 0x4e1bb405, 0xdce42d70, 0x34407b75, 0x096d9ccd, 0xe1c9cac8, 0x2853b390, 0xc0f7e595, 0xfdda022d, 0x157e5428, 0x8781cd5d, 0x6f259b58, 0x52087ce0, 0xbaac2ae5, 0xc5fd93e7, 0x2d59c5e2, 0x1074225a, 0xf8d0745f, 0x6a2fed2a, 0x828bbb2f, 0xbfa65c97, 0x57020a92, 0x9e9873ca, 0x763c25cf, 0x4b11c277, 0xa3b59472, 0x314a0d07, 0xd9ee5b02, 0xe4c3bcba, 0x0c67eabf, 0x1a60cebe, 0xf2c498bb, 0xcfe97f03, 0x274d2906, 0xb5b2b073, 0x5d16e676, 0x603b01ce, 0x889f57cb, 0x41052e93, 0xa9a17896, 0x948c9f2e, 0x7c28c92b, 0xeed7505e, 0x0673065b, 0x3b5ee1e3, 0xd3fab7e6, 0xacab0ee4, 0x440f58e1, 0x7922bf59, 0x9186e95c, 0x03797029, 0xebdd262c, 0xd6f0c194, 0x3e549791, 0xf7ceeec9, 0x1f6ab8cc, 0x22475f74, 0xcae30971, 0x581c9004, 0xb0b8c601, 0x8d9521b9, 0x653177bc, ], [ 0x00000000, 0x47f7cec1, 0x8fef9d82, 0xc8185343, 0x1b1e26b3, 0x5ce9e872, 0x94f1bb31, 0xd30675f0, 0x363c4d66, 0x71cb83a7, 0xb9d3d0e4, 0xfe241e25, 0x2d226bd5, 0x6ad5a514, 0xa2cdf657, 0xe53a3896, 0x6c789acc, 0x2b8f540d, 0xe397074e, 0xa460c98f, 0x7766bc7f, 0x309172be, 0xf88921fd, 0xbf7eef3c, 0x5a44d7aa, 0x1db3196b, 0xd5ab4a28, 0x925c84e9, 0x415af119, 0x06ad3fd8, 0xceb56c9b, 0x8942a25a, 0xd8f13598, 0x9f06fb59, 0x571ea81a, 0x10e966db, 0xc3ef132b, 0x8418ddea, 0x4c008ea9, 0x0bf74068, 0xeecd78fe, 0xa93ab63f, 0x6122e57c, 0x26d52bbd, 0xf5d35e4d, 0xb224908c, 0x7a3cc3cf, 0x3dcb0d0e, 0xb489af54, 0xf37e6195, 0x3b6632d6, 0x7c91fc17, 0xaf9789e7, 0xe8604726, 0x20781465, 0x678fdaa4, 0x82b5e232, 0xc5422cf3, 0x0d5a7fb0, 0x4aadb171, 0x99abc481, 0xde5c0a40, 0x16445903, 0x51b397c2, 0xb5237687, 0xf2d4b846, 0x3acceb05, 0x7d3b25c4, 0xae3d5034, 0xe9ca9ef5, 0x21d2cdb6, 0x66250377, 0x831f3be1, 0xc4e8f520, 0x0cf0a663, 0x4b0768a2, 0x98011d52, 0xdff6d393, 0x17ee80d0, 0x50194e11, 0xd95bec4b, 0x9eac228a, 0x56b471c9, 0x1143bf08, 0xc245caf8, 0x85b20439, 0x4daa577a, 0x0a5d99bb, 0xef67a12d, 0xa8906fec, 0x60883caf, 0x277ff26e, 0xf479879e, 0xb38e495f, 0x7b961a1c, 0x3c61d4dd, 0x6dd2431f, 0x2a258dde, 0xe23dde9d, 0xa5ca105c, 0x76cc65ac, 0x313bab6d, 0xf923f82e, 0xbed436ef, 0x5bee0e79, 0x1c19c0b8, 0xd40193fb, 0x93f65d3a, 0x40f028ca, 0x0707e60b, 0xcf1fb548, 0x88e87b89, 0x01aad9d3, 0x465d1712, 0x8e454451, 0xc9b28a90, 0x1ab4ff60, 0x5d4331a1, 0x955b62e2, 0xd2acac23, 0x379694b5, 0x70615a74, 0xb8790937, 0xff8ec7f6, 0x2c88b206, 0x6b7f7cc7, 0xa3672f84, 0xe490e145, 0x6e87f0b9, 0x29703e78, 0xe1686d3b, 0xa69fa3fa, 0x7599d60a, 0x326e18cb, 0xfa764b88, 0xbd818549, 0x58bbbddf, 0x1f4c731e, 0xd754205d, 0x90a3ee9c, 0x43a59b6c, 0x045255ad, 0xcc4a06ee, 0x8bbdc82f, 0x02ff6a75, 0x4508a4b4, 0x8d10f7f7, 0xcae73936, 0x19e14cc6, 0x5e168207, 0x960ed144, 0xd1f91f85, 0x34c32713, 0x7334e9d2, 0xbb2cba91, 0xfcdb7450, 0x2fdd01a0, 0x682acf61, 0xa0329c22, 0xe7c552e3, 0xb676c521, 0xf1810be0, 0x399958a3, 0x7e6e9662, 0xad68e392, 0xea9f2d53, 0x22877e10, 0x6570b0d1, 0x804a8847, 0xc7bd4686, 0x0fa515c5, 0x4852db04, 0x9b54aef4, 0xdca36035, 0x14bb3376, 0x534cfdb7, 0xda0e5fed, 0x9df9912c, 0x55e1c26f, 0x12160cae, 0xc110795e, 0x86e7b79f, 0x4effe4dc, 0x09082a1d, 0xec32128b, 0xabc5dc4a, 0x63dd8f09, 0x242a41c8, 0xf72c3438, 0xb0dbfaf9, 0x78c3a9ba, 0x3f34677b, 0xdba4863e, 0x9c5348ff, 0x544b1bbc, 0x13bcd57d, 0xc0baa08d, 0x874d6e4c, 0x4f553d0f, 0x08a2f3ce, 0xed98cb58, 0xaa6f0599, 0x627756da, 0x2580981b, 0xf686edeb, 0xb171232a, 0x79697069, 0x3e9ebea8, 0xb7dc1cf2, 0xf02bd233, 0x38338170, 0x7fc44fb1, 0xacc23a41, 0xeb35f480, 0x232da7c3, 0x64da6902, 0x81e05194, 0xc6179f55, 0x0e0fcc16, 0x49f802d7, 0x9afe7727, 0xdd09b9e6, 0x1511eaa5, 0x52e62464, 0x0355b3a6, 0x44a27d67, 0x8cba2e24, 0xcb4de0e5, 0x184b9515, 0x5fbc5bd4, 0x97a40897, 0xd053c656, 0x3569fec0, 0x729e3001, 0xba866342, 0xfd71ad83, 0x2e77d873, 0x698016b2, 0xa19845f1, 0xe66f8b30, 0x6f2d296a, 0x28dae7ab, 0xe0c2b4e8, 0xa7357a29, 0x74330fd9, 0x33c4c118, 0xfbdc925b, 0xbc2b5c9a, 0x5911640c, 0x1ee6aacd, 0xd6fef98e, 0x9109374f, 0x420f42bf, 0x05f88c7e, 0xcde0df3d, 0x8a1711fc, ], [ 0x00000000, 0xdd0fe172, 0xbededf53, 0x63d13e21, 0x797ca311, 0xa4734263, 0xc7a27c42, 0x1aad9d30, 0xf2f94622, 0x2ff6a750, 0x4c279971, 0x91287803, 0x8b85e533, 0x568a0441, 0x355b3a60, 0xe854db12, 0xe13391f3, 0x3c3c7081, 0x5fed4ea0, 0x82e2afd2, 0x984f32e2, 0x4540d390, 0x2691edb1, 0xfb9e0cc3, 0x13cad7d1, 0xcec536a3, 0xad140882, 0x701be9f0, 0x6ab674c0, 0xb7b995b2, 0xd468ab93, 0x09674ae1, 0xc6a63e51, 0x1ba9df23, 0x7878e102, 0xa5770070, 0xbfda9d40, 0x62d57c32, 0x01044213, 0xdc0ba361, 0x345f7873, 0xe9509901, 0x8a81a720, 0x578e4652, 0x4d23db62, 0x902c3a10, 0xf3fd0431, 0x2ef2e543, 0x2795afa2, 0xfa9a4ed0, 0x994b70f1, 0x44449183, 0x5ee90cb3, 0x83e6edc1, 0xe037d3e0, 0x3d383292, 0xd56ce980, 0x086308f2, 0x6bb236d3, 0xb6bdd7a1, 0xac104a91, 0x711fabe3, 0x12ce95c2, 0xcfc174b0, 0x898d6115, 0x54828067, 0x3753be46, 0xea5c5f34, 0xf0f1c204, 0x2dfe2376, 0x4e2f1d57, 0x9320fc25, 0x7b742737, 0xa67bc645, 0xc5aaf864, 0x18a51916, 0x02088426, 0xdf076554, 0xbcd65b75, 0x61d9ba07, 0x68bef0e6, 0xb5b11194, 0xd6602fb5, 0x0b6fcec7, 0x11c253f7, 0xcccdb285, 0xaf1c8ca4, 0x72136dd6, 0x9a47b6c4, 0x474857b6, 0x24996997, 0xf99688e5, 0xe33b15d5, 0x3e34f4a7, 0x5de5ca86, 0x80ea2bf4, 0x4f2b5f44, 0x9224be36, 0xf1f58017, 0x2cfa6165, 0x3657fc55, 0xeb581d27, 0x88892306, 0x5586c274, 0xbdd21966, 0x60ddf814, 0x030cc635, 0xde032747, 0xc4aeba77, 0x19a15b05, 0x7a706524, 0xa77f8456, 0xae18ceb7, 0x73172fc5, 0x10c611e4, 0xcdc9f096, 0xd7646da6, 0x0a6b8cd4, 0x69bab2f5, 0xb4b55387, 0x5ce18895, 0x81ee69e7, 0xe23f57c6, 0x3f30b6b4, 0x259d2b84, 0xf892caf6, 0x9b43f4d7, 0x464c15a5, 0x17dbdf9d, 0xcad43eef, 0xa90500ce, 0x740ae1bc, 0x6ea77c8c, 0xb3a89dfe, 0xd079a3df, 0x0d7642ad, 0xe52299bf, 0x382d78cd, 0x5bfc46ec, 0x86f3a79e, 0x9c5e3aae, 0x4151dbdc, 0x2280e5fd, 0xff8f048f, 0xf6e84e6e, 0x2be7af1c, 0x4836913d, 0x9539704f, 0x8f94ed7f, 0x529b0c0d, 0x314a322c, 0xec45d35e, 0x0411084c, 0xd91ee93e, 0xbacfd71f, 0x67c0366d, 0x7d6dab5d, 0xa0624a2f, 0xc3b3740e, 0x1ebc957c, 0xd17de1cc, 0x0c7200be, 0x6fa33e9f, 0xb2acdfed, 0xa80142dd, 0x750ea3af, 0x16df9d8e, 0xcbd07cfc, 0x2384a7ee, 0xfe8b469c, 0x9d5a78bd, 0x405599cf, 0x5af804ff, 0x87f7e58d, 0xe426dbac, 0x39293ade, 0x304e703f, 0xed41914d, 0x8e90af6c, 0x539f4e1e, 0x4932d32e, 0x943d325c, 0xf7ec0c7d, 0x2ae3ed0f, 0xc2b7361d, 0x1fb8d76f, 0x7c69e94e, 0xa166083c, 0xbbcb950c, 0x66c4747e, 0x05154a5f, 0xd81aab2d, 0x9e56be88, 0x43595ffa, 0x208861db, 0xfd8780a9, 0xe72a1d99, 0x3a25fceb, 0x59f4c2ca, 0x84fb23b8, 0x6caff8aa, 0xb1a019d8, 0xd27127f9, 0x0f7ec68b, 0x15d35bbb, 0xc8dcbac9, 0xab0d84e8, 0x7602659a, 0x7f652f7b, 0xa26ace09, 0xc1bbf028, 0x1cb4115a, 0x06198c6a, 0xdb166d18, 0xb8c75339, 0x65c8b24b, 0x8d9c6959, 0x5093882b, 0x3342b60a, 0xee4d5778, 0xf4e0ca48, 0x29ef2b3a, 0x4a3e151b, 0x9731f469, 0x58f080d9, 0x85ff61ab, 0xe62e5f8a, 0x3b21bef8, 0x218c23c8, 0xfc83c2ba, 0x9f52fc9b, 0x425d1de9, 0xaa09c6fb, 0x77062789, 0x14d719a8, 0xc9d8f8da, 0xd37565ea, 0x0e7a8498, 0x6dabbab9, 0xb0a45bcb, 0xb9c3112a, 0x64ccf058, 0x071dce79, 0xda122f0b, 0xc0bfb23b, 0x1db05349, 0x7e616d68, 0xa36e8c1a, 0x4b3a5708, 0x9635b67a, 0xf5e4885b, 0x28eb6929, 0x3246f419, 0xef49156b, 0x8c982b4a, 0x5197ca38, ], [ 0x00000000, 0x2fb7bf3a, 0x5f6f7e74, 0x70d8c14e, 0xbedefce8, 0x916943d2, 0xe1b1829c, 0xce063da6, 0x797ce467, 0x56cb5b5d, 0x26139a13, 0x09a42529, 0xc7a2188f, 0xe815a7b5, 0x98cd66fb, 0xb77ad9c1, 0xf2f9c8ce, 0xdd4e77f4, 0xad96b6ba, 0x82210980, 0x4c273426, 0x63908b1c, 0x13484a52, 0x3cfff568, 0x8b852ca9, 0xa4329393, 0xd4ea52dd, 0xfb5dede7, 0x355bd041, 0x1aec6f7b, 0x6a34ae35, 0x4583110f, 0xe1328c2b, 0xce853311, 0xbe5df25f, 0x91ea4d65, 0x5fec70c3, 0x705bcff9, 0x00830eb7, 0x2f34b18d, 0x984e684c, 0xb7f9d776, 0xc7211638, 0xe896a902, 0x269094a4, 0x09272b9e, 0x79ffead0, 0x564855ea, 0x13cb44e5, 0x3c7cfbdf, 0x4ca43a91, 0x631385ab, 0xad15b80d, 0x82a20737, 0xf27ac679, 0xddcd7943, 0x6ab7a082, 0x45001fb8, 0x35d8def6, 0x1a6f61cc, 0xd4695c6a, 0xfbdee350, 0x8b06221e, 0xa4b19d24, 0xc6a405e1, 0xe913badb, 0x99cb7b95, 0xb67cc4af, 0x787af909, 0x57cd4633, 0x2715877d, 0x08a23847, 0xbfd8e186, 0x906f5ebc, 0xe0b79ff2, 0xcf0020c8, 0x01061d6e, 0x2eb1a254, 0x5e69631a, 0x71dedc20, 0x345dcd2f, 0x1bea7215, 0x6b32b35b, 0x44850c61, 0x8a8331c7, 0xa5348efd, 0xd5ec4fb3, 0xfa5bf089, 0x4d212948, 0x62969672, 0x124e573c, 0x3df9e806, 0xf3ffd5a0, 0xdc486a9a, 0xac90abd4, 0x832714ee, 0x279689ca, 0x082136f0, 0x78f9f7be, 0x574e4884, 0x99487522, 0xb6ffca18, 0xc6270b56, 0xe990b46c, 0x5eea6dad, 0x715dd297, 0x018513d9, 0x2e32ace3, 0xe0349145, 0xcf832e7f, 0xbf5bef31, 0x90ec500b, 0xd56f4104, 0xfad8fe3e, 0x8a003f70, 0xa5b7804a, 0x6bb1bdec, 0x440602d6, 0x34dec398, 0x1b697ca2, 0xac13a563, 0x83a41a59, 0xf37cdb17, 0xdccb642d, 0x12cd598b, 0x3d7ae6b1, 0x4da227ff, 0x621598c5, 0x89891675, 0xa63ea94f, 0xd6e66801, 0xf951d73b, 0x3757ea9d, 0x18e055a7, 0x683894e9, 0x478f2bd3, 0xf0f5f212, 0xdf424d28, 0xaf9a8c66, 0x802d335c, 0x4e2b0efa, 0x619cb1c0, 0x1144708e, 0x3ef3cfb4, 0x7b70debb, 0x54c76181, 0x241fa0cf, 0x0ba81ff5, 0xc5ae2253, 0xea199d69, 0x9ac15c27, 0xb576e31d, 0x020c3adc, 0x2dbb85e6, 0x5d6344a8, 0x72d4fb92, 0xbcd2c634, 0x9365790e, 0xe3bdb840, 0xcc0a077a, 0x68bb9a5e, 0x470c2564, 0x37d4e42a, 0x18635b10, 0xd66566b6, 0xf9d2d98c, 0x890a18c2, 0xa6bda7f8, 0x11c77e39, 0x3e70c103, 0x4ea8004d, 0x611fbf77, 0xaf1982d1, 0x80ae3deb, 0xf076fca5, 0xdfc1439f, 0x9a425290, 0xb5f5edaa, 0xc52d2ce4, 0xea9a93de, 0x249cae78, 0x0b2b1142, 0x7bf3d00c, 0x54446f36, 0xe33eb6f7, 0xcc8909cd, 0xbc51c883, 0x93e677b9, 0x5de04a1f, 0x7257f525, 0x028f346b, 0x2d388b51, 0x4f2d1394, 0x609aacae, 0x10426de0, 0x3ff5d2da, 0xf1f3ef7c, 0xde445046, 0xae9c9108, 0x812b2e32, 0x3651f7f3, 0x19e648c9, 0x693e8987, 0x468936bd, 0x888f0b1b, 0xa738b421, 0xd7e0756f, 0xf857ca55, 0xbdd4db5a, 0x92636460, 0xe2bba52e, 0xcd0c1a14, 0x030a27b2, 0x2cbd9888, 0x5c6559c6, 0x73d2e6fc, 0xc4a83f3d, 0xeb1f8007, 0x9bc74149, 0xb470fe73, 0x7a76c3d5, 0x55c17cef, 0x2519bda1, 0x0aae029b, 0xae1f9fbf, 0x81a82085, 0xf170e1cb, 0xdec75ef1, 0x10c16357, 0x3f76dc6d, 0x4fae1d23, 0x6019a219, 0xd7637bd8, 0xf8d4c4e2, 0x880c05ac, 0xa7bbba96, 0x69bd8730, 0x460a380a, 0x36d2f944, 0x1965467e, 0x5ce65771, 0x7351e84b, 0x03892905, 0x2c3e963f, 0xe238ab99, 0xcd8f14a3, 0xbd57d5ed, 0x92e06ad7, 0x259ab316, 0x0a2d0c2c, 0x7af5cd62, 0x55427258, 0x9b444ffe, 0xb4f3f0c4, 0xc42b318a, 0xeb9c8eb0, ], ]; pub static CRC32_CD_ROM_EDC_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0x90910101, 0x91210201, 0x01b00300, 0x92410401, 0x02d00500, 0x03600600, 0x93f10701, 0x94810801, 0x04100900, 0x05a00a00, 0x95310b01, 0x06c00c00, 0x96510d01, 0x97e10e01, 0x07700f00, 0x99011001, 0x09901100, 0x08201200, 0x98b11301, 0x0b401400, 0x9bd11501, 0x9a611601, 0x0af01700, 0x0d801800, 0x9d111901, 0x9ca11a01, 0x0c301b00, 0x9fc11c01, 0x0f501d00, 0x0ee01e00, 0x9e711f01, 0x82012001, 0x12902100, 0x13202200, 0x83b12301, 0x10402400, 0x80d12501, 0x81612601, 0x11f02700, 0x16802800, 0x86112901, 0x87a12a01, 0x17302b00, 0x84c12c01, 0x14502d00, 0x15e02e00, 0x85712f01, 0x1b003000, 0x8b913101, 0x8a213201, 0x1ab03300, 0x89413401, 0x19d03500, 0x18603600, 0x88f13701, 0x8f813801, 0x1f103900, 0x1ea03a00, 0x8e313b01, 0x1dc03c00, 0x8d513d01, 0x8ce13e01, 0x1c703f00, 0xb4014001, 0x24904100, 0x25204200, 0xb5b14301, 0x26404400, 0xb6d14501, 0xb7614601, 0x27f04700, 0x20804800, 0xb0114901, 0xb1a14a01, 0x21304b00, 0xb2c14c01, 0x22504d00, 0x23e04e00, 0xb3714f01, 0x2d005000, 0xbd915101, 0xbc215201, 0x2cb05300, 0xbf415401, 0x2fd05500, 0x2e605600, 0xbef15701, 0xb9815801, 0x29105900, 0x28a05a00, 0xb8315b01, 0x2bc05c00, 0xbb515d01, 0xbae15e01, 0x2a705f00, 0x36006000, 0xa6916101, 0xa7216201, 0x37b06300, 0xa4416401, 0x34d06500, 0x35606600, 0xa5f16701, 0xa2816801, 0x32106900, 0x33a06a00, 0xa3316b01, 0x30c06c00, 0xa0516d01, 0xa1e16e01, 0x31706f00, 0xaf017001, 0x3f907100, 0x3e207200, 0xaeb17301, 0x3d407400, 0xadd17501, 0xac617601, 0x3cf07700, 0x3b807800, 0xab117901, 0xaaa17a01, 0x3a307b00, 0xa9c17c01, 0x39507d00, 0x38e07e00, 0xa8717f01, 0xd8018001, 0x48908100, 0x49208200, 0xd9b18301, 0x4a408400, 0xdad18501, 0xdb618601, 0x4bf08700, 0x4c808800, 0xdc118901, 0xdda18a01, 0x4d308b00, 0xdec18c01, 0x4e508d00, 0x4fe08e00, 0xdf718f01, 0x41009000, 0xd1919101, 0xd0219201, 0x40b09300, 0xd3419401, 0x43d09500, 0x42609600, 0xd2f19701, 0xd5819801, 0x45109900, 0x44a09a00, 0xd4319b01, 0x47c09c00, 0xd7519d01, 0xd6e19e01, 0x46709f00, 0x5a00a000, 0xca91a101, 0xcb21a201, 0x5bb0a300, 0xc841a401, 0x58d0a500, 0x5960a600, 0xc9f1a701, 0xce81a801, 0x5e10a900, 0x5fa0aa00, 0xcf31ab01, 0x5cc0ac00, 0xcc51ad01, 0xcde1ae01, 0x5d70af00, 0xc301b001, 0x5390b100, 0x5220b200, 0xc2b1b301, 0x5140b400, 0xc1d1b501, 0xc061b601, 0x50f0b700, 0x5780b800, 0xc711b901, 0xc6a1ba01, 0x5630bb00, 0xc5c1bc01, 0x5550bd00, 0x54e0be00, 0xc471bf01, 0x6c00c000, 0xfc91c101, 0xfd21c201, 0x6db0c300, 0xfe41c401, 0x6ed0c500, 0x6f60c600, 0xfff1c701, 0xf881c801, 0x6810c900, 0x69a0ca00, 0xf931cb01, 0x6ac0cc00, 0xfa51cd01, 0xfbe1ce01, 0x6b70cf00, 0xf501d001, 0x6590d100, 0x6420d200, 0xf4b1d301, 0x6740d400, 0xf7d1d501, 0xf661d601, 0x66f0d700, 0x6180d800, 0xf111d901, 0xf0a1da01, 0x6030db00, 0xf3c1dc01, 0x6350dd00, 0x62e0de00, 0xf271df01, 0xee01e001, 0x7e90e100, 0x7f20e200, 0xefb1e301, 0x7c40e400, 0xecd1e501, 0xed61e601, 0x7df0e700, 0x7a80e800, 0xea11e901, 0xeba1ea01, 0x7b30eb00, 0xe8c1ec01, 0x7850ed00, 0x79e0ee00, 0xe971ef01, 0x7700f000, 0xe791f101, 0xe621f201, 0x76b0f300, 0xe541f401, 0x75d0f500, 0x7460f600, 0xe4f1f701, 0xe381f801, 0x7310f900, 0x72a0fa00, 0xe231fb01, 0x71c0fc00, 0xe151fd01, 0xe0e1fe01, 0x7070ff00, ], [ 0x00000000, 0x90019000, 0x90002003, 0x0001b003, 0x90034005, 0x0002d005, 0x00036006, 0x9002f006, 0x90058009, 0x00041009, 0x0005a00a, 0x9004300a, 0x0006c00c, 0x9007500c, 0x9006e00f, 0x0007700f, 0x90080011, 0x00099011, 0x00082012, 0x9009b012, 0x000b4014, 0x900ad014, 0x900b6017, 0x000af017, 0x000d8018, 0x900c1018, 0x900da01b, 0x000c301b, 0x900ec01d, 0x000f501d, 0x000ee01e, 0x900f701e, 0x90130021, 0x00129021, 0x00132022, 0x9012b022, 0x00104024, 0x9011d024, 0x90106027, 0x0011f027, 0x00168028, 0x90171028, 0x9016a02b, 0x0017302b, 0x9015c02d, 0x0014502d, 0x0015e02e, 0x9014702e, 0x001b0030, 0x901a9030, 0x901b2033, 0x001ab033, 0x90184035, 0x0019d035, 0x00186036, 0x9019f036, 0x901e8039, 0x001f1039, 0x001ea03a, 0x901f303a, 0x001dc03c, 0x901c503c, 0x901de03f, 0x001c703f, 0x90250041, 0x00249041, 0x00252042, 0x9024b042, 0x00264044, 0x9027d044, 0x90266047, 0x0027f047, 0x00208048, 0x90211048, 0x9020a04b, 0x0021304b, 0x9023c04d, 0x0022504d, 0x0023e04e, 0x9022704e, 0x002d0050, 0x902c9050, 0x902d2053, 0x002cb053, 0x902e4055, 0x002fd055, 0x002e6056, 0x902ff056, 0x90288059, 0x00291059, 0x0028a05a, 0x9029305a, 0x002bc05c, 0x902a505c, 0x902be05f, 0x002a705f, 0x00360060, 0x90379060, 0x90362063, 0x0037b063, 0x90354065, 0x0034d065, 0x00356066, 0x9034f066, 0x90338069, 0x00321069, 0x0033a06a, 0x9032306a, 0x0030c06c, 0x9031506c, 0x9030e06f, 0x0031706f, 0x903e0071, 0x003f9071, 0x003e2072, 0x903fb072, 0x003d4074, 0x903cd074, 0x903d6077, 0x003cf077, 0x003b8078, 0x903a1078, 0x903ba07b, 0x003a307b, 0x9038c07d, 0x0039507d, 0x0038e07e, 0x9039707e, 0x90490081, 0x00489081, 0x00492082, 0x9048b082, 0x004a4084, 0x904bd084, 0x904a6087, 0x004bf087, 0x004c8088, 0x904d1088, 0x904ca08b, 0x004d308b, 0x904fc08d, 0x004e508d, 0x004fe08e, 0x904e708e, 0x00410090, 0x90409090, 0x90412093, 0x0040b093, 0x90424095, 0x0043d095, 0x00426096, 0x9043f096, 0x90448099, 0x00451099, 0x0044a09a, 0x9045309a, 0x0047c09c, 0x9046509c, 0x9047e09f, 0x0046709f, 0x005a00a0, 0x905b90a0, 0x905a20a3, 0x005bb0a3, 0x905940a5, 0x0058d0a5, 0x005960a6, 0x9058f0a6, 0x905f80a9, 0x005e10a9, 0x005fa0aa, 0x905e30aa, 0x005cc0ac, 0x905d50ac, 0x905ce0af, 0x005d70af, 0x905200b1, 0x005390b1, 0x005220b2, 0x9053b0b2, 0x005140b4, 0x9050d0b4, 0x905160b7, 0x0050f0b7, 0x005780b8, 0x905610b8, 0x9057a0bb, 0x005630bb, 0x9054c0bd, 0x005550bd, 0x0054e0be, 0x905570be, 0x006c00c0, 0x906d90c0, 0x906c20c3, 0x006db0c3, 0x906f40c5, 0x006ed0c5, 0x006f60c6, 0x906ef0c6, 0x906980c9, 0x006810c9, 0x0069a0ca, 0x906830ca, 0x006ac0cc, 0x906b50cc, 0x906ae0cf, 0x006b70cf, 0x906400d1, 0x006590d1, 0x006420d2, 0x9065b0d2, 0x006740d4, 0x9066d0d4, 0x906760d7, 0x0066f0d7, 0x006180d8, 0x906010d8, 0x9061a0db, 0x006030db, 0x9062c0dd, 0x006350dd, 0x0062e0de, 0x906370de, 0x907f00e1, 0x007e90e1, 0x007f20e2, 0x907eb0e2, 0x007c40e4, 0x907dd0e4, 0x907c60e7, 0x007df0e7, 0x007a80e8, 0x907b10e8, 0x907aa0eb, 0x007b30eb, 0x9079c0ed, 0x007850ed, 0x0079e0ee, 0x907870ee, 0x007700f0, 0x907690f0, 0x907720f3, 0x0076b0f3, 0x907440f5, 0x0075d0f5, 0x007460f6, 0x9075f0f6, 0x907280f9, 0x007310f9, 0x0072a0fa, 0x907330fa, 0x0071c0fc, 0x907050fc, 0x9071e0ff, 0x007070ff, ], [ 0x00000000, 0x00900190, 0x01200320, 0x01b002b0, 0x02400640, 0x02d007d0, 0x03600560, 0x03f004f0, 0x04800c80, 0x04100d10, 0x05a00fa0, 0x05300e30, 0x06c00ac0, 0x06500b50, 0x07e009e0, 0x07700870, 0x09001900, 0x09901890, 0x08201a20, 0x08b01bb0, 0x0b401f40, 0x0bd01ed0, 0x0a601c60, 0x0af01df0, 0x0d801580, 0x0d101410, 0x0ca016a0, 0x0c301730, 0x0fc013c0, 0x0f501250, 0x0ee010e0, 0x0e701170, 0x12003200, 0x12903390, 0x13203120, 0x13b030b0, 0x10403440, 0x10d035d0, 0x11603760, 0x11f036f0, 0x16803e80, 0x16103f10, 0x17a03da0, 0x17303c30, 0x14c038c0, 0x14503950, 0x15e03be0, 0x15703a70, 0x1b002b00, 0x1b902a90, 0x1a202820, 0x1ab029b0, 0x19402d40, 0x19d02cd0, 0x18602e60, 0x18f02ff0, 0x1f802780, 0x1f102610, 0x1ea024a0, 0x1e302530, 0x1dc021c0, 0x1d502050, 0x1ce022e0, 0x1c702370, 0x24006400, 0x24906590, 0x25206720, 0x25b066b0, 0x26406240, 0x26d063d0, 0x27606160, 0x27f060f0, 0x20806880, 0x20106910, 0x21a06ba0, 0x21306a30, 0x22c06ec0, 0x22506f50, 0x23e06de0, 0x23706c70, 0x2d007d00, 0x2d907c90, 0x2c207e20, 0x2cb07fb0, 0x2f407b40, 0x2fd07ad0, 0x2e607860, 0x2ef079f0, 0x29807180, 0x29107010, 0x28a072a0, 0x28307330, 0x2bc077c0, 0x2b507650, 0x2ae074e0, 0x2a707570, 0x36005600, 0x36905790, 0x37205520, 0x37b054b0, 0x34405040, 0x34d051d0, 0x35605360, 0x35f052f0, 0x32805a80, 0x32105b10, 0x33a059a0, 0x33305830, 0x30c05cc0, 0x30505d50, 0x31e05fe0, 0x31705e70, 0x3f004f00, 0x3f904e90, 0x3e204c20, 0x3eb04db0, 0x3d404940, 0x3dd048d0, 0x3c604a60, 0x3cf04bf0, 0x3b804380, 0x3b104210, 0x3aa040a0, 0x3a304130, 0x39c045c0, 0x39504450, 0x38e046e0, 0x38704770, 0x4800c800, 0x4890c990, 0x4920cb20, 0x49b0cab0, 0x4a40ce40, 0x4ad0cfd0, 0x4b60cd60, 0x4bf0ccf0, 0x4c80c480, 0x4c10c510, 0x4da0c7a0, 0x4d30c630, 0x4ec0c2c0, 0x4e50c350, 0x4fe0c1e0, 0x4f70c070, 0x4100d100, 0x4190d090, 0x4020d220, 0x40b0d3b0, 0x4340d740, 0x43d0d6d0, 0x4260d460, 0x42f0d5f0, 0x4580dd80, 0x4510dc10, 0x44a0dea0, 0x4430df30, 0x47c0dbc0, 0x4750da50, 0x46e0d8e0, 0x4670d970, 0x5a00fa00, 0x5a90fb90, 0x5b20f920, 0x5bb0f8b0, 0x5840fc40, 0x58d0fdd0, 0x5960ff60, 0x59f0fef0, 0x5e80f680, 0x5e10f710, 0x5fa0f5a0, 0x5f30f430, 0x5cc0f0c0, 0x5c50f150, 0x5de0f3e0, 0x5d70f270, 0x5300e300, 0x5390e290, 0x5220e020, 0x52b0e1b0, 0x5140e540, 0x51d0e4d0, 0x5060e660, 0x50f0e7f0, 0x5780ef80, 0x5710ee10, 0x56a0eca0, 0x5630ed30, 0x55c0e9c0, 0x5550e850, 0x54e0eae0, 0x5470eb70, 0x6c00ac00, 0x6c90ad90, 0x6d20af20, 0x6db0aeb0, 0x6e40aa40, 0x6ed0abd0, 0x6f60a960, 0x6ff0a8f0, 0x6880a080, 0x6810a110, 0x69a0a3a0, 0x6930a230, 0x6ac0a6c0, 0x6a50a750, 0x6be0a5e0, 0x6b70a470, 0x6500b500, 0x6590b490, 0x6420b620, 0x64b0b7b0, 0x6740b340, 0x67d0b2d0, 0x6660b060, 0x66f0b1f0, 0x6180b980, 0x6110b810, 0x60a0baa0, 0x6030bb30, 0x63c0bfc0, 0x6350be50, 0x62e0bce0, 0x6270bd70, 0x7e009e00, 0x7e909f90, 0x7f209d20, 0x7fb09cb0, 0x7c409840, 0x7cd099d0, 0x7d609b60, 0x7df09af0, 0x7a809280, 0x7a109310, 0x7ba091a0, 0x7b309030, 0x78c094c0, 0x78509550, 0x79e097e0, 0x79709670, 0x77008700, 0x77908690, 0x76208420, 0x76b085b0, 0x75408140, 0x75d080d0, 0x74608260, 0x74f083f0, 0x73808b80, 0x73108a10, 0x72a088a0, 0x72308930, 0x71c08dc0, 0x71508c50, 0x70e08ee0, 0x70708f70, ], [ 0x00000000, 0x41000001, 0x82000002, 0xc3000003, 0xb4030007, 0xf5030006, 0x36030005, 0x77030004, 0xd805000d, 0x9905000c, 0x5a05000f, 0x1b05000e, 0x6c06000a, 0x2d06000b, 0xee060008, 0xaf060009, 0x00090019, 0x41090018, 0x8209001b, 0xc309001a, 0xb40a001e, 0xf50a001f, 0x360a001c, 0x770a001d, 0xd80c0014, 0x990c0015, 0x5a0c0016, 0x1b0c0017, 0x6c0f0013, 0x2d0f0012, 0xee0f0011, 0xaf0f0010, 0x00120032, 0x41120033, 0x82120030, 0xc3120031, 0xb4110035, 0xf5110034, 0x36110037, 0x77110036, 0xd817003f, 0x9917003e, 0x5a17003d, 0x1b17003c, 0x6c140038, 0x2d140039, 0xee14003a, 0xaf14003b, 0x001b002b, 0x411b002a, 0x821b0029, 0xc31b0028, 0xb418002c, 0xf518002d, 0x3618002e, 0x7718002f, 0xd81e0026, 0x991e0027, 0x5a1e0024, 0x1b1e0025, 0x6c1d0021, 0x2d1d0020, 0xee1d0023, 0xaf1d0022, 0x00240064, 0x41240065, 0x82240066, 0xc3240067, 0xb4270063, 0xf5270062, 0x36270061, 0x77270060, 0xd8210069, 0x99210068, 0x5a21006b, 0x1b21006a, 0x6c22006e, 0x2d22006f, 0xee22006c, 0xaf22006d, 0x002d007d, 0x412d007c, 0x822d007f, 0xc32d007e, 0xb42e007a, 0xf52e007b, 0x362e0078, 0x772e0079, 0xd8280070, 0x99280071, 0x5a280072, 0x1b280073, 0x6c2b0077, 0x2d2b0076, 0xee2b0075, 0xaf2b0074, 0x00360056, 0x41360057, 0x82360054, 0xc3360055, 0xb4350051, 0xf5350050, 0x36350053, 0x77350052, 0xd833005b, 0x9933005a, 0x5a330059, 0x1b330058, 0x6c30005c, 0x2d30005d, 0xee30005e, 0xaf30005f, 0x003f004f, 0x413f004e, 0x823f004d, 0xc33f004c, 0xb43c0048, 0xf53c0049, 0x363c004a, 0x773c004b, 0xd83a0042, 0x993a0043, 0x5a3a0040, 0x1b3a0041, 0x6c390045, 0x2d390044, 0xee390047, 0xaf390046, 0x004800c8, 0x414800c9, 0x824800ca, 0xc34800cb, 0xb44b00cf, 0xf54b00ce, 0x364b00cd, 0x774b00cc, 0xd84d00c5, 0x994d00c4, 0x5a4d00c7, 0x1b4d00c6, 0x6c4e00c2, 0x2d4e00c3, 0xee4e00c0, 0xaf4e00c1, 0x004100d1, 0x414100d0, 0x824100d3, 0xc34100d2, 0xb44200d6, 0xf54200d7, 0x364200d4, 0x774200d5, 0xd84400dc, 0x994400dd, 0x5a4400de, 0x1b4400df, 0x6c4700db, 0x2d4700da, 0xee4700d9, 0xaf4700d8, 0x005a00fa, 0x415a00fb, 0x825a00f8, 0xc35a00f9, 0xb45900fd, 0xf55900fc, 0x365900ff, 0x775900fe, 0xd85f00f7, 0x995f00f6, 0x5a5f00f5, 0x1b5f00f4, 0x6c5c00f0, 0x2d5c00f1, 0xee5c00f2, 0xaf5c00f3, 0x005300e3, 0x415300e2, 0x825300e1, 0xc35300e0, 0xb45000e4, 0xf55000e5, 0x365000e6, 0x775000e7, 0xd85600ee, 0x995600ef, 0x5a5600ec, 0x1b5600ed, 0x6c5500e9, 0x2d5500e8, 0xee5500eb, 0xaf5500ea, 0x006c00ac, 0x416c00ad, 0x826c00ae, 0xc36c00af, 0xb46f00ab, 0xf56f00aa, 0x366f00a9, 0x776f00a8, 0xd86900a1, 0x996900a0, 0x5a6900a3, 0x1b6900a2, 0x6c6a00a6, 0x2d6a00a7, 0xee6a00a4, 0xaf6a00a5, 0x006500b5, 0x416500b4, 0x826500b7, 0xc36500b6, 0xb46600b2, 0xf56600b3, 0x366600b0, 0x776600b1, 0xd86000b8, 0x996000b9, 0x5a6000ba, 0x1b6000bb, 0x6c6300bf, 0x2d6300be, 0xee6300bd, 0xaf6300bc, 0x007e009e, 0x417e009f, 0x827e009c, 0xc37e009d, 0xb47d0099, 0xf57d0098, 0x367d009b, 0x777d009a, 0xd87b0093, 0x997b0092, 0x5a7b0091, 0x1b7b0090, 0x6c780094, 0x2d780095, 0xee780096, 0xaf780097, 0x00770087, 0x41770086, 0x82770085, 0xc3770084, 0xb4740080, 0xf5740081, 0x36740082, 0x77740083, 0xd872008a, 0x9972008b, 0x5a720088, 0x1b720089, 0x6c71008d, 0x2d71008c, 0xee71008f, 0xaf71008e, ], [ 0x00000000, 0x90d00101, 0x91a30201, 0x01730300, 0x93450401, 0x03950500, 0x02e60600, 0x92360701, 0x96890801, 0x06590900, 0x072a0a00, 0x97fa0b01, 0x05cc0c00, 0x951c0d01, 0x946f0e01, 0x04bf0f00, 0x9d111001, 0x0dc11100, 0x0cb21200, 0x9c621301, 0x0e541400, 0x9e841501, 0x9ff71601, 0x0f271700, 0x0b981800, 0x9b481901, 0x9a3b1a01, 0x0aeb1b00, 0x98dd1c01, 0x080d1d00, 0x097e1e00, 0x99ae1f01, 0x8a212001, 0x1af12100, 0x1b822200, 0x8b522301, 0x19642400, 0x89b42501, 0x88c72601, 0x18172700, 0x1ca82800, 0x8c782901, 0x8d0b2a01, 0x1ddb2b00, 0x8fed2c01, 0x1f3d2d00, 0x1e4e2e00, 0x8e9e2f01, 0x17303000, 0x87e03101, 0x86933201, 0x16433300, 0x84753401, 0x14a53500, 0x15d63600, 0x85063701, 0x81b93801, 0x11693900, 0x101a3a00, 0x80ca3b01, 0x12fc3c00, 0x822c3d01, 0x835f3e01, 0x138f3f00, 0xa4414001, 0x34914100, 0x35e24200, 0xa5324301, 0x37044400, 0xa7d44501, 0xa6a74601, 0x36774700, 0x32c84800, 0xa2184901, 0xa36b4a01, 0x33bb4b00, 0xa18d4c01, 0x315d4d00, 0x302e4e00, 0xa0fe4f01, 0x39505000, 0xa9805101, 0xa8f35201, 0x38235300, 0xaa155401, 0x3ac55500, 0x3bb65600, 0xab665701, 0xafd95801, 0x3f095900, 0x3e7a5a00, 0xaeaa5b01, 0x3c9c5c00, 0xac4c5d01, 0xad3f5e01, 0x3def5f00, 0x2e606000, 0xbeb06101, 0xbfc36201, 0x2f136300, 0xbd256401, 0x2df56500, 0x2c866600, 0xbc566701, 0xb8e96801, 0x28396900, 0x294a6a00, 0xb99a6b01, 0x2bac6c00, 0xbb7c6d01, 0xba0f6e01, 0x2adf6f00, 0xb3717001, 0x23a17100, 0x22d27200, 0xb2027301, 0x20347400, 0xb0e47501, 0xb1977601, 0x21477700, 0x25f87800, 0xb5287901, 0xb45b7a01, 0x248b7b00, 0xb6bd7c01, 0x266d7d00, 0x271e7e00, 0xb7ce7f01, 0xf8818001, 0x68518100, 0x69228200, 0xf9f28301, 0x6bc48400, 0xfb148501, 0xfa678601, 0x6ab78700, 0x6e088800, 0xfed88901, 0xffab8a01, 0x6f7b8b00, 0xfd4d8c01, 0x6d9d8d00, 0x6cee8e00, 0xfc3e8f01, 0x65909000, 0xf5409101, 0xf4339201, 0x64e39300, 0xf6d59401, 0x66059500, 0x67769600, 0xf7a69701, 0xf3199801, 0x63c99900, 0x62ba9a00, 0xf26a9b01, 0x605c9c00, 0xf08c9d01, 0xf1ff9e01, 0x612f9f00, 0x72a0a000, 0xe270a101, 0xe303a201, 0x73d3a300, 0xe1e5a401, 0x7135a500, 0x7046a600, 0xe096a701, 0xe429a801, 0x74f9a900, 0x758aaa00, 0xe55aab01, 0x776cac00, 0xe7bcad01, 0xe6cfae01, 0x761faf00, 0xefb1b001, 0x7f61b100, 0x7e12b200, 0xeec2b301, 0x7cf4b400, 0xec24b501, 0xed57b601, 0x7d87b700, 0x7938b800, 0xe9e8b901, 0xe89bba01, 0x784bbb00, 0xea7dbc01, 0x7aadbd00, 0x7bdebe00, 0xeb0ebf01, 0x5cc0c000, 0xcc10c101, 0xcd63c201, 0x5db3c300, 0xcf85c401, 0x5f55c500, 0x5e26c600, 0xcef6c701, 0xca49c801, 0x5a99c900, 0x5beaca00, 0xcb3acb01, 0x590ccc00, 0xc9dccd01, 0xc8afce01, 0x587fcf00, 0xc1d1d001, 0x5101d100, 0x5072d200, 0xc0a2d301, 0x5294d400, 0xc244d501, 0xc337d601, 0x53e7d700, 0x5758d800, 0xc788d901, 0xc6fbda01, 0x562bdb00, 0xc41ddc01, 0x54cddd00, 0x55bede00, 0xc56edf01, 0xd6e1e001, 0x4631e100, 0x4742e200, 0xd792e301, 0x45a4e400, 0xd574e501, 0xd407e601, 0x44d7e700, 0x4068e800, 0xd0b8e901, 0xd1cbea01, 0x411beb00, 0xd32dec01, 0x43fded00, 0x428eee00, 0xd25eef01, 0x4bf0f000, 0xdb20f101, 0xda53f201, 0x4a83f300, 0xd8b5f401, 0x4865f500, 0x4916f600, 0xd9c6f701, 0xdd79f801, 0x4da9f900, 0x4cdafa00, 0xdc0afb01, 0x4e3cfc00, 0xdeecfd01, 0xdf9ffe01, 0x4f4fff00, ], [ 0x00000000, 0x9001d100, 0x9000a203, 0x00017303, 0x90024405, 0x00039505, 0x0002e606, 0x90033706, 0x90078809, 0x00065909, 0x00072a0a, 0x9006fb0a, 0x0005cc0c, 0x90041d0c, 0x90056e0f, 0x0004bf0f, 0x900c1011, 0x000dc111, 0x000cb212, 0x900d6312, 0x000e5414, 0x900f8514, 0x900ef617, 0x000f2717, 0x000b9818, 0x900a4918, 0x900b3a1b, 0x000aeb1b, 0x9009dc1d, 0x00080d1d, 0x00097e1e, 0x9008af1e, 0x901b2021, 0x001af121, 0x001b8222, 0x901a5322, 0x00196424, 0x9018b524, 0x9019c627, 0x00181727, 0x001ca828, 0x901d7928, 0x901c0a2b, 0x001ddb2b, 0x901eec2d, 0x001f3d2d, 0x001e4e2e, 0x901f9f2e, 0x00173030, 0x9016e130, 0x90179233, 0x00164333, 0x90157435, 0x0014a535, 0x0015d636, 0x90140736, 0x9010b839, 0x00116939, 0x00101a3a, 0x9011cb3a, 0x0012fc3c, 0x90132d3c, 0x90125e3f, 0x00138f3f, 0x90354041, 0x00349141, 0x0035e242, 0x90343342, 0x00370444, 0x9036d544, 0x9037a647, 0x00367747, 0x0032c848, 0x90331948, 0x90326a4b, 0x0033bb4b, 0x90308c4d, 0x00315d4d, 0x00302e4e, 0x9031ff4e, 0x00395050, 0x90388150, 0x9039f253, 0x00382353, 0x903b1455, 0x003ac555, 0x003bb656, 0x903a6756, 0x903ed859, 0x003f0959, 0x003e7a5a, 0x903fab5a, 0x003c9c5c, 0x903d4d5c, 0x903c3e5f, 0x003def5f, 0x002e6060, 0x902fb160, 0x902ec263, 0x002f1363, 0x902c2465, 0x002df565, 0x002c8666, 0x902d5766, 0x9029e869, 0x00283969, 0x00294a6a, 0x90289b6a, 0x002bac6c, 0x902a7d6c, 0x902b0e6f, 0x002adf6f, 0x90227071, 0x0023a171, 0x0022d272, 0x90230372, 0x00203474, 0x9021e574, 0x90209677, 0x00214777, 0x0025f878, 0x90242978, 0x90255a7b, 0x00248b7b, 0x9027bc7d, 0x00266d7d, 0x00271e7e, 0x9026cf7e, 0x90698081, 0x00685181, 0x00692282, 0x9068f382, 0x006bc484, 0x906a1584, 0x906b6687, 0x006ab787, 0x006e0888, 0x906fd988, 0x906eaa8b, 0x006f7b8b, 0x906c4c8d, 0x006d9d8d, 0x006cee8e, 0x906d3f8e, 0x00659090, 0x90644190, 0x90653293, 0x0064e393, 0x9067d495, 0x00660595, 0x00677696, 0x9066a796, 0x90621899, 0x0063c999, 0x0062ba9a, 0x90636b9a, 0x00605c9c, 0x90618d9c, 0x9060fe9f, 0x00612f9f, 0x0072a0a0, 0x907371a0, 0x907202a3, 0x0073d3a3, 0x9070e4a5, 0x007135a5, 0x007046a6, 0x907197a6, 0x907528a9, 0x0074f9a9, 0x00758aaa, 0x90745baa, 0x00776cac, 0x9076bdac, 0x9077ceaf, 0x00761faf, 0x907eb0b1, 0x007f61b1, 0x007e12b2, 0x907fc3b2, 0x007cf4b4, 0x907d25b4, 0x907c56b7, 0x007d87b7, 0x007938b8, 0x9078e9b8, 0x90799abb, 0x00784bbb, 0x907b7cbd, 0x007aadbd, 0x007bdebe, 0x907a0fbe, 0x005cc0c0, 0x905d11c0, 0x905c62c3, 0x005db3c3, 0x905e84c5, 0x005f55c5, 0x005e26c6, 0x905ff7c6, 0x905b48c9, 0x005a99c9, 0x005beaca, 0x905a3bca, 0x00590ccc, 0x9058ddcc, 0x9059aecf, 0x00587fcf, 0x9050d0d1, 0x005101d1, 0x005072d2, 0x9051a3d2, 0x005294d4, 0x905345d4, 0x905236d7, 0x0053e7d7, 0x005758d8, 0x905689d8, 0x9057fadb, 0x00562bdb, 0x90551cdd, 0x0054cddd, 0x0055bede, 0x90546fde, 0x9047e0e1, 0x004631e1, 0x004742e2, 0x904693e2, 0x0045a4e4, 0x904475e4, 0x904506e7, 0x0044d7e7, 0x004068e8, 0x9041b9e8, 0x9040caeb, 0x00411beb, 0x90422ced, 0x0043fded, 0x00428eee, 0x90435fee, 0x004bf0f0, 0x904a21f0, 0x904b52f3, 0x004a83f3, 0x9049b4f5, 0x004865f5, 0x004916f6, 0x9048c7f6, 0x904c78f9, 0x004da9f9, 0x004cdafa, 0x904d0bfa, 0x004e3cfc, 0x904fedfc, 0x904e9eff, 0x004f4fff, ], [ 0x00000000, 0x009001d1, 0x012003a2, 0x01b00273, 0x02400744, 0x02d00695, 0x036004e6, 0x03f00537, 0x04800e88, 0x04100f59, 0x05a00d2a, 0x05300cfb, 0x06c009cc, 0x0650081d, 0x07e00a6e, 0x07700bbf, 0x09001d10, 0x09901cc1, 0x08201eb2, 0x08b01f63, 0x0b401a54, 0x0bd01b85, 0x0a6019f6, 0x0af01827, 0x0d801398, 0x0d101249, 0x0ca0103a, 0x0c3011eb, 0x0fc014dc, 0x0f50150d, 0x0ee0177e, 0x0e7016af, 0x12003a20, 0x12903bf1, 0x13203982, 0x13b03853, 0x10403d64, 0x10d03cb5, 0x11603ec6, 0x11f03f17, 0x168034a8, 0x16103579, 0x17a0370a, 0x173036db, 0x14c033ec, 0x1450323d, 0x15e0304e, 0x1570319f, 0x1b002730, 0x1b9026e1, 0x1a202492, 0x1ab02543, 0x19402074, 0x19d021a5, 0x186023d6, 0x18f02207, 0x1f8029b8, 0x1f102869, 0x1ea02a1a, 0x1e302bcb, 0x1dc02efc, 0x1d502f2d, 0x1ce02d5e, 0x1c702c8f, 0x24007440, 0x24907591, 0x252077e2, 0x25b07633, 0x26407304, 0x26d072d5, 0x276070a6, 0x27f07177, 0x20807ac8, 0x20107b19, 0x21a0796a, 0x213078bb, 0x22c07d8c, 0x22507c5d, 0x23e07e2e, 0x23707fff, 0x2d006950, 0x2d906881, 0x2c206af2, 0x2cb06b23, 0x2f406e14, 0x2fd06fc5, 0x2e606db6, 0x2ef06c67, 0x298067d8, 0x29106609, 0x28a0647a, 0x283065ab, 0x2bc0609c, 0x2b50614d, 0x2ae0633e, 0x2a7062ef, 0x36004e60, 0x36904fb1, 0x37204dc2, 0x37b04c13, 0x34404924, 0x34d048f5, 0x35604a86, 0x35f04b57, 0x328040e8, 0x32104139, 0x33a0434a, 0x3330429b, 0x30c047ac, 0x3050467d, 0x31e0440e, 0x317045df, 0x3f005370, 0x3f9052a1, 0x3e2050d2, 0x3eb05103, 0x3d405434, 0x3dd055e5, 0x3c605796, 0x3cf05647, 0x3b805df8, 0x3b105c29, 0x3aa05e5a, 0x3a305f8b, 0x39c05abc, 0x39505b6d, 0x38e0591e, 0x387058cf, 0x4800e880, 0x4890e951, 0x4920eb22, 0x49b0eaf3, 0x4a40efc4, 0x4ad0ee15, 0x4b60ec66, 0x4bf0edb7, 0x4c80e608, 0x4c10e7d9, 0x4da0e5aa, 0x4d30e47b, 0x4ec0e14c, 0x4e50e09d, 0x4fe0e2ee, 0x4f70e33f, 0x4100f590, 0x4190f441, 0x4020f632, 0x40b0f7e3, 0x4340f2d4, 0x43d0f305, 0x4260f176, 0x42f0f0a7, 0x4580fb18, 0x4510fac9, 0x44a0f8ba, 0x4430f96b, 0x47c0fc5c, 0x4750fd8d, 0x46e0fffe, 0x4670fe2f, 0x5a00d2a0, 0x5a90d371, 0x5b20d102, 0x5bb0d0d3, 0x5840d5e4, 0x58d0d435, 0x5960d646, 0x59f0d797, 0x5e80dc28, 0x5e10ddf9, 0x5fa0df8a, 0x5f30de5b, 0x5cc0db6c, 0x5c50dabd, 0x5de0d8ce, 0x5d70d91f, 0x5300cfb0, 0x5390ce61, 0x5220cc12, 0x52b0cdc3, 0x5140c8f4, 0x51d0c925, 0x5060cb56, 0x50f0ca87, 0x5780c138, 0x5710c0e9, 0x56a0c29a, 0x5630c34b, 0x55c0c67c, 0x5550c7ad, 0x54e0c5de, 0x5470c40f, 0x6c009cc0, 0x6c909d11, 0x6d209f62, 0x6db09eb3, 0x6e409b84, 0x6ed09a55, 0x6f609826, 0x6ff099f7, 0x68809248, 0x68109399, 0x69a091ea, 0x6930903b, 0x6ac0950c, 0x6a5094dd, 0x6be096ae, 0x6b70977f, 0x650081d0, 0x65908001, 0x64208272, 0x64b083a3, 0x67408694, 0x67d08745, 0x66608536, 0x66f084e7, 0x61808f58, 0x61108e89, 0x60a08cfa, 0x60308d2b, 0x63c0881c, 0x635089cd, 0x62e08bbe, 0x62708a6f, 0x7e00a6e0, 0x7e90a731, 0x7f20a542, 0x7fb0a493, 0x7c40a1a4, 0x7cd0a075, 0x7d60a206, 0x7df0a3d7, 0x7a80a868, 0x7a10a9b9, 0x7ba0abca, 0x7b30aa1b, 0x78c0af2c, 0x7850aefd, 0x79e0ac8e, 0x7970ad5f, 0x7700bbf0, 0x7790ba21, 0x7620b852, 0x76b0b983, 0x7540bcb4, 0x75d0bd65, 0x7460bf16, 0x74f0bec7, 0x7380b578, 0x7310b4a9, 0x72a0b6da, 0x7230b70b, 0x71c0b23c, 0x7150b3ed, 0x70e0b19e, 0x7070b04f, ], [ 0x00000000, 0x65904101, 0xcb208202, 0xaeb0c303, 0x26420407, 0x43d24506, 0xed628605, 0x88f2c704, 0x4c84080e, 0x2914490f, 0x87a48a0c, 0xe234cb0d, 0x6ac60c09, 0x0f564d08, 0xa1e68e0b, 0xc476cf0a, 0x9908101c, 0xfc98511d, 0x5228921e, 0x37b8d31f, 0xbf4a141b, 0xdada551a, 0x746a9619, 0x11fad718, 0xd58c1812, 0xb01c5913, 0x1eac9a10, 0x7b3cdb11, 0xf3ce1c15, 0x965e5d14, 0x38ee9e17, 0x5d7edf16, 0x8213203b, 0xe783613a, 0x4933a239, 0x2ca3e338, 0xa451243c, 0xc1c1653d, 0x6f71a63e, 0x0ae1e73f, 0xce972835, 0xab076934, 0x05b7aa37, 0x6027eb36, 0xe8d52c32, 0x8d456d33, 0x23f5ae30, 0x4665ef31, 0x1b1b3027, 0x7e8b7126, 0xd03bb225, 0xb5abf324, 0x3d593420, 0x58c97521, 0xf679b622, 0x93e9f723, 0x579f3829, 0x320f7928, 0x9cbfba2b, 0xf92ffb2a, 0x71dd3c2e, 0x144d7d2f, 0xbafdbe2c, 0xdf6dff2d, 0xb4254075, 0xd1b50174, 0x7f05c277, 0x1a958376, 0x92674472, 0xf7f70573, 0x5947c670, 0x3cd78771, 0xf8a1487b, 0x9d31097a, 0x3381ca79, 0x56118b78, 0xdee34c7c, 0xbb730d7d, 0x15c3ce7e, 0x70538f7f, 0x2d2d5069, 0x48bd1168, 0xe60dd26b, 0x839d936a, 0x0b6f546e, 0x6eff156f, 0xc04fd66c, 0xa5df976d, 0x61a95867, 0x04391966, 0xaa89da65, 0xcf199b64, 0x47eb5c60, 0x227b1d61, 0x8ccbde62, 0xe95b9f63, 0x3636604e, 0x53a6214f, 0xfd16e24c, 0x9886a34d, 0x10746449, 0x75e42548, 0xdb54e64b, 0xbec4a74a, 0x7ab26840, 0x1f222941, 0xb192ea42, 0xd402ab43, 0x5cf06c47, 0x39602d46, 0x97d0ee45, 0xf240af44, 0xaf3e7052, 0xcaae3153, 0x641ef250, 0x018eb351, 0x897c7455, 0xecec3554, 0x425cf657, 0x27ccb756, 0xe3ba785c, 0x862a395d, 0x289afa5e, 0x4d0abb5f, 0xc5f87c5b, 0xa0683d5a, 0x0ed8fe59, 0x6b48bf58, 0xd84980e9, 0xbdd9c1e8, 0x136902eb, 0x76f943ea, 0xfe0b84ee, 0x9b9bc5ef, 0x352b06ec, 0x50bb47ed, 0x94cd88e7, 0xf15dc9e6, 0x5fed0ae5, 0x3a7d4be4, 0xb28f8ce0, 0xd71fcde1, 0x79af0ee2, 0x1c3f4fe3, 0x414190f5, 0x24d1d1f4, 0x8a6112f7, 0xeff153f6, 0x670394f2, 0x0293d5f3, 0xac2316f0, 0xc9b357f1, 0x0dc598fb, 0x6855d9fa, 0xc6e51af9, 0xa3755bf8, 0x2b879cfc, 0x4e17ddfd, 0xe0a71efe, 0x85375fff, 0x5a5aa0d2, 0x3fcae1d3, 0x917a22d0, 0xf4ea63d1, 0x7c18a4d5, 0x1988e5d4, 0xb73826d7, 0xd2a867d6, 0x16dea8dc, 0x734ee9dd, 0xddfe2ade, 0xb86e6bdf, 0x309cacdb, 0x550cedda, 0xfbbc2ed9, 0x9e2c6fd8, 0xc352b0ce, 0xa6c2f1cf, 0x087232cc, 0x6de273cd, 0xe510b4c9, 0x8080f5c8, 0x2e3036cb, 0x4ba077ca, 0x8fd6b8c0, 0xea46f9c1, 0x44f63ac2, 0x21667bc3, 0xa994bcc7, 0xcc04fdc6, 0x62b43ec5, 0x07247fc4, 0x6c6cc09c, 0x09fc819d, 0xa74c429e, 0xc2dc039f, 0x4a2ec49b, 0x2fbe859a, 0x810e4699, 0xe49e0798, 0x20e8c892, 0x45788993, 0xebc84a90, 0x8e580b91, 0x06aacc95, 0x633a8d94, 0xcd8a4e97, 0xa81a0f96, 0xf564d080, 0x90f49181, 0x3e445282, 0x5bd41383, 0xd326d487, 0xb6b69586, 0x18065685, 0x7d961784, 0xb9e0d88e, 0xdc70998f, 0x72c05a8c, 0x17501b8d, 0x9fa2dc89, 0xfa329d88, 0x54825e8b, 0x31121f8a, 0xee7fe0a7, 0x8befa1a6, 0x255f62a5, 0x40cf23a4, 0xc83de4a0, 0xadada5a1, 0x031d66a2, 0x668d27a3, 0xa2fbe8a9, 0xc76ba9a8, 0x69db6aab, 0x0c4b2baa, 0x84b9ecae, 0xe129adaf, 0x4f996eac, 0x2a092fad, 0x7777f0bb, 0x12e7b1ba, 0xbc5772b9, 0xd9c733b8, 0x5135f4bc, 0x34a5b5bd, 0x9a1576be, 0xff8537bf, 0x3bf3f8b5, 0x5e63b9b4, 0xf0d37ab7, 0x95433bb6, 0x1db1fcb2, 0x7821bdb3, 0xd6917eb0, 0xb3013fb1, ], [ 0x00000000, 0x90f49140, 0x91ea2283, 0x011eb3c3, 0x93d74505, 0x0323d445, 0x023d6786, 0x92c9f6c6, 0x97ad8a09, 0x07591b49, 0x0647a88a, 0x96b339ca, 0x047acf0c, 0x948e5e4c, 0x9590ed8f, 0x05647ccf, 0x9f581411, 0x0fac8551, 0x0eb23692, 0x9e46a7d2, 0x0c8f5114, 0x9c7bc054, 0x9d657397, 0x0d91e2d7, 0x08f59e18, 0x98010f58, 0x991fbc9b, 0x09eb2ddb, 0x9b22db1d, 0x0bd64a5d, 0x0ac8f99e, 0x9a3c68de, 0x8eb32821, 0x1e47b961, 0x1f590aa2, 0x8fad9be2, 0x1d646d24, 0x8d90fc64, 0x8c8e4fa7, 0x1c7adee7, 0x191ea228, 0x89ea3368, 0x88f480ab, 0x180011eb, 0x8ac9e72d, 0x1a3d766d, 0x1b23c5ae, 0x8bd754ee, 0x11eb3c30, 0x811fad70, 0x80011eb3, 0x10f58ff3, 0x823c7935, 0x12c8e875, 0x13d65bb6, 0x8322caf6, 0x8646b639, 0x16b22779, 0x17ac94ba, 0x875805fa, 0x1591f33c, 0x8565627c, 0x847bd1bf, 0x148f40ff, 0xad655041, 0x3d91c101, 0x3c8f72c2, 0xac7be382, 0x3eb21544, 0xae468404, 0xaf5837c7, 0x3faca687, 0x3ac8da48, 0xaa3c4b08, 0xab22f8cb, 0x3bd6698b, 0xa91f9f4d, 0x39eb0e0d, 0x38f5bdce, 0xa8012c8e, 0x323d4450, 0xa2c9d510, 0xa3d766d3, 0x3323f793, 0xa1ea0155, 0x311e9015, 0x300023d6, 0xa0f4b296, 0xa590ce59, 0x35645f19, 0x347aecda, 0xa48e7d9a, 0x36478b5c, 0xa6b31a1c, 0xa7ada9df, 0x3759389f, 0x23d67860, 0xb322e920, 0xb23c5ae3, 0x22c8cba3, 0xb0013d65, 0x20f5ac25, 0x21eb1fe6, 0xb11f8ea6, 0xb47bf269, 0x248f6329, 0x2591d0ea, 0xb56541aa, 0x27acb76c, 0xb758262c, 0xb64695ef, 0x26b204af, 0xbc8e6c71, 0x2c7afd31, 0x2d644ef2, 0xbd90dfb2, 0x2f592974, 0xbfadb834, 0xbeb30bf7, 0x2e479ab7, 0x2b23e678, 0xbbd77738, 0xbac9c4fb, 0x2a3d55bb, 0xb8f4a37d, 0x2800323d, 0x291e81fe, 0xb9ea10be, 0xeac9a081, 0x7a3d31c1, 0x7b238202, 0xebd71342, 0x791ee584, 0xe9ea74c4, 0xe8f4c707, 0x78005647, 0x7d642a88, 0xed90bbc8, 0xec8e080b, 0x7c7a994b, 0xeeb36f8d, 0x7e47fecd, 0x7f594d0e, 0xefaddc4e, 0x7591b490, 0xe56525d0, 0xe47b9613, 0x748f0753, 0xe646f195, 0x76b260d5, 0x77acd316, 0xe7584256, 0xe23c3e99, 0x72c8afd9, 0x73d61c1a, 0xe3228d5a, 0x71eb7b9c, 0xe11feadc, 0xe001591f, 0x70f5c85f, 0x647a88a0, 0xf48e19e0, 0xf590aa23, 0x65643b63, 0xf7adcda5, 0x67595ce5, 0x6647ef26, 0xf6b37e66, 0xf3d702a9, 0x632393e9, 0x623d202a, 0xf2c9b16a, 0x600047ac, 0xf0f4d6ec, 0xf1ea652f, 0x611ef46f, 0xfb229cb1, 0x6bd60df1, 0x6ac8be32, 0xfa3c2f72, 0x68f5d9b4, 0xf80148f4, 0xf91ffb37, 0x69eb6a77, 0x6c8f16b8, 0xfc7b87f8, 0xfd65343b, 0x6d91a57b, 0xff5853bd, 0x6facc2fd, 0x6eb2713e, 0xfe46e07e, 0x47acf0c0, 0xd7586180, 0xd646d243, 0x46b24303, 0xd47bb5c5, 0x448f2485, 0x45919746, 0xd5650606, 0xd0017ac9, 0x40f5eb89, 0x41eb584a, 0xd11fc90a, 0x43d63fcc, 0xd322ae8c, 0xd23c1d4f, 0x42c88c0f, 0xd8f4e4d1, 0x48007591, 0x491ec652, 0xd9ea5712, 0x4b23a1d4, 0xdbd73094, 0xdac98357, 0x4a3d1217, 0x4f596ed8, 0xdfadff98, 0xdeb34c5b, 0x4e47dd1b, 0xdc8e2bdd, 0x4c7aba9d, 0x4d64095e, 0xdd90981e, 0xc91fd8e1, 0x59eb49a1, 0x58f5fa62, 0xc8016b22, 0x5ac89de4, 0xca3c0ca4, 0xcb22bf67, 0x5bd62e27, 0x5eb252e8, 0xce46c3a8, 0xcf58706b, 0x5face12b, 0xcd6517ed, 0x5d9186ad, 0x5c8f356e, 0xcc7ba42e, 0x5647ccf0, 0xc6b35db0, 0xc7adee73, 0x57597f33, 0xc59089f5, 0x556418b5, 0x547aab76, 0xc48e3a36, 0xc1ea46f9, 0x511ed7b9, 0x5000647a, 0xc0f4f53a, 0x523d03fc, 0xc2c992bc, 0xc3d7217f, 0x5323b03f, ], [ 0x00000000, 0xb491b490, 0xd9206923, 0x6db1ddb3, 0x0243d245, 0xb6d266d5, 0xdb63bb66, 0x6ff20ff6, 0x0487a48a, 0xb016101a, 0xdda7cda9, 0x69367939, 0x06c476cf, 0xb255c25f, 0xdfe41fec, 0x6b75ab7c, 0x090f4914, 0xbd9efd84, 0xd02f2037, 0x64be94a7, 0x0b4c9b51, 0xbfdd2fc1, 0xd26cf272, 0x66fd46e2, 0x0d88ed9e, 0xb919590e, 0xd4a884bd, 0x6039302d, 0x0fcb3fdb, 0xbb5a8b4b, 0xd6eb56f8, 0x627ae268, 0x121e9228, 0xa68f26b8, 0xcb3efb0b, 0x7faf4f9b, 0x105d406d, 0xa4ccf4fd, 0xc97d294e, 0x7dec9dde, 0x169936a2, 0xa2088232, 0xcfb95f81, 0x7b28eb11, 0x14dae4e7, 0xa04b5077, 0xcdfa8dc4, 0x796b3954, 0x1b11db3c, 0xaf806fac, 0xc231b21f, 0x76a0068f, 0x19520979, 0xadc3bde9, 0xc072605a, 0x74e3d4ca, 0x1f967fb6, 0xab07cb26, 0xc6b61695, 0x7227a205, 0x1dd5adf3, 0xa9441963, 0xc4f5c4d0, 0x70647040, 0x243d2450, 0x90ac90c0, 0xfd1d4d73, 0x498cf9e3, 0x267ef615, 0x92ef4285, 0xff5e9f36, 0x4bcf2ba6, 0x20ba80da, 0x942b344a, 0xf99ae9f9, 0x4d0b5d69, 0x22f9529f, 0x9668e60f, 0xfbd93bbc, 0x4f488f2c, 0x2d326d44, 0x99a3d9d4, 0xf4120467, 0x4083b0f7, 0x2f71bf01, 0x9be00b91, 0xf651d622, 0x42c062b2, 0x29b5c9ce, 0x9d247d5e, 0xf095a0ed, 0x4404147d, 0x2bf61b8b, 0x9f67af1b, 0xf2d672a8, 0x4647c638, 0x3623b678, 0x82b202e8, 0xef03df5b, 0x5b926bcb, 0x3460643d, 0x80f1d0ad, 0xed400d1e, 0x59d1b98e, 0x32a412f2, 0x8635a662, 0xeb847bd1, 0x5f15cf41, 0x30e7c0b7, 0x84767427, 0xe9c7a994, 0x5d561d04, 0x3f2cff6c, 0x8bbd4bfc, 0xe60c964f, 0x529d22df, 0x3d6f2d29, 0x89fe99b9, 0xe44f440a, 0x50def09a, 0x3bab5be6, 0x8f3aef76, 0xe28b32c5, 0x561a8655, 0x39e889a3, 0x8d793d33, 0xe0c8e080, 0x54595410, 0x487a48a0, 0xfcebfc30, 0x915a2183, 0x25cb9513, 0x4a399ae5, 0xfea82e75, 0x9319f3c6, 0x27884756, 0x4cfdec2a, 0xf86c58ba, 0x95dd8509, 0x214c3199, 0x4ebe3e6f, 0xfa2f8aff, 0x979e574c, 0x230fe3dc, 0x417501b4, 0xf5e4b524, 0x98556897, 0x2cc4dc07, 0x4336d3f1, 0xf7a76761, 0x9a16bad2, 0x2e870e42, 0x45f2a53e, 0xf16311ae, 0x9cd2cc1d, 0x2843788d, 0x47b1777b, 0xf320c3eb, 0x9e911e58, 0x2a00aac8, 0x5a64da88, 0xeef56e18, 0x8344b3ab, 0x37d5073b, 0x582708cd, 0xecb6bc5d, 0x810761ee, 0x3596d57e, 0x5ee37e02, 0xea72ca92, 0x87c31721, 0x3352a3b1, 0x5ca0ac47, 0xe83118d7, 0x8580c564, 0x311171f4, 0x536b939c, 0xe7fa270c, 0x8a4bfabf, 0x3eda4e2f, 0x512841d9, 0xe5b9f549, 0x880828fa, 0x3c999c6a, 0x57ec3716, 0xe37d8386, 0x8ecc5e35, 0x3a5deaa5, 0x55afe553, 0xe13e51c3, 0x8c8f8c70, 0x381e38e0, 0x6c476cf0, 0xd8d6d860, 0xb56705d3, 0x01f6b143, 0x6e04beb5, 0xda950a25, 0xb724d796, 0x03b56306, 0x68c0c87a, 0xdc517cea, 0xb1e0a159, 0x057115c9, 0x6a831a3f, 0xde12aeaf, 0xb3a3731c, 0x0732c78c, 0x654825e4, 0xd1d99174, 0xbc684cc7, 0x08f9f857, 0x670bf7a1, 0xd39a4331, 0xbe2b9e82, 0x0aba2a12, 0x61cf816e, 0xd55e35fe, 0xb8efe84d, 0x0c7e5cdd, 0x638c532b, 0xd71de7bb, 0xbaac3a08, 0x0e3d8e98, 0x7e59fed8, 0xcac84a48, 0xa77997fb, 0x13e8236b, 0x7c1a2c9d, 0xc88b980d, 0xa53a45be, 0x11abf12e, 0x7ade5a52, 0xce4feec2, 0xa3fe3371, 0x176f87e1, 0x789d8817, 0xcc0c3c87, 0xa1bde134, 0x152c55a4, 0x7756b7cc, 0xc3c7035c, 0xae76deef, 0x1ae76a7f, 0x75156589, 0xc184d119, 0xac350caa, 0x18a4b83a, 0x73d11346, 0xc740a7d6, 0xaaf17a65, 0x1e60cef5, 0x7192c103, 0xc5037593, 0xa8b2a820, 0x1c231cb0, ], [ 0x00000000, 0x41b401b4, 0x83680368, 0xc2dc02dc, 0xb6d306d3, 0xf7670767, 0x35bb05bb, 0x740f040f, 0xdda50da5, 0x9c110c11, 0x5ecd0ecd, 0x1f790f79, 0x6b760b76, 0x2ac20ac2, 0xe81e081e, 0xa9aa09aa, 0x0b491b49, 0x4afd1afd, 0x88211821, 0xc9951995, 0xbd9a1d9a, 0xfc2e1c2e, 0x3ef21ef2, 0x7f461f46, 0xd6ec16ec, 0x97581758, 0x55841584, 0x14301430, 0x603f103f, 0x218b118b, 0xe3571357, 0xa2e312e3, 0x16923692, 0x57263726, 0x95fa35fa, 0xd44e344e, 0xa0413041, 0xe1f531f5, 0x23293329, 0x629d329d, 0xcb373b37, 0x8a833a83, 0x485f385f, 0x09eb39eb, 0x7de43de4, 0x3c503c50, 0xfe8c3e8c, 0xbf383f38, 0x1ddb2ddb, 0x5c6f2c6f, 0x9eb32eb3, 0xdf072f07, 0xab082b08, 0xeabc2abc, 0x28602860, 0x69d429d4, 0xc07e207e, 0x81ca21ca, 0x43162316, 0x02a222a2, 0x76ad26ad, 0x37192719, 0xf5c525c5, 0xb4712471, 0x2d246d24, 0x6c906c90, 0xae4c6e4c, 0xeff86ff8, 0x9bf76bf7, 0xda436a43, 0x189f689f, 0x592b692b, 0xf0816081, 0xb1356135, 0x73e963e9, 0x325d625d, 0x46526652, 0x07e667e6, 0xc53a653a, 0x848e648e, 0x266d766d, 0x67d977d9, 0xa5057505, 0xe4b174b1, 0x90be70be, 0xd10a710a, 0x13d673d6, 0x52627262, 0xfbc87bc8, 0xba7c7a7c, 0x78a078a0, 0x39147914, 0x4d1b7d1b, 0x0caf7caf, 0xce737e73, 0x8fc77fc7, 0x3bb65bb6, 0x7a025a02, 0xb8de58de, 0xf96a596a, 0x8d655d65, 0xccd15cd1, 0x0e0d5e0d, 0x4fb95fb9, 0xe6135613, 0xa7a757a7, 0x657b557b, 0x24cf54cf, 0x50c050c0, 0x11745174, 0xd3a853a8, 0x921c521c, 0x30ff40ff, 0x714b414b, 0xb3974397, 0xf2234223, 0x862c462c, 0xc7984798, 0x05444544, 0x44f044f0, 0xed5a4d5a, 0xacee4cee, 0x6e324e32, 0x2f864f86, 0x5b894b89, 0x1a3d4a3d, 0xd8e148e1, 0x99554955, 0x5a48da48, 0x1bfcdbfc, 0xd920d920, 0x9894d894, 0xec9bdc9b, 0xad2fdd2f, 0x6ff3dff3, 0x2e47de47, 0x87edd7ed, 0xc659d659, 0x0485d485, 0x4531d531, 0x313ed13e, 0x708ad08a, 0xb256d256, 0xf3e2d3e2, 0x5101c101, 0x10b5c0b5, 0xd269c269, 0x93ddc3dd, 0xe7d2c7d2, 0xa666c666, 0x64bac4ba, 0x250ec50e, 0x8ca4cca4, 0xcd10cd10, 0x0fcccfcc, 0x4e78ce78, 0x3a77ca77, 0x7bc3cbc3, 0xb91fc91f, 0xf8abc8ab, 0x4cdaecda, 0x0d6eed6e, 0xcfb2efb2, 0x8e06ee06, 0xfa09ea09, 0xbbbdebbd, 0x7961e961, 0x38d5e8d5, 0x917fe17f, 0xd0cbe0cb, 0x1217e217, 0x53a3e3a3, 0x27ace7ac, 0x6618e618, 0xa4c4e4c4, 0xe570e570, 0x4793f793, 0x0627f627, 0xc4fbf4fb, 0x854ff54f, 0xf140f140, 0xb0f4f0f4, 0x7228f228, 0x339cf39c, 0x9a36fa36, 0xdb82fb82, 0x195ef95e, 0x58eaf8ea, 0x2ce5fce5, 0x6d51fd51, 0xaf8dff8d, 0xee39fe39, 0x776cb76c, 0x36d8b6d8, 0xf404b404, 0xb5b0b5b0, 0xc1bfb1bf, 0x800bb00b, 0x42d7b2d7, 0x0363b363, 0xaac9bac9, 0xeb7dbb7d, 0x29a1b9a1, 0x6815b815, 0x1c1abc1a, 0x5daebdae, 0x9f72bf72, 0xdec6bec6, 0x7c25ac25, 0x3d91ad91, 0xff4daf4d, 0xbef9aef9, 0xcaf6aaf6, 0x8b42ab42, 0x499ea99e, 0x082aa82a, 0xa180a180, 0xe034a034, 0x22e8a2e8, 0x635ca35c, 0x1753a753, 0x56e7a6e7, 0x943ba43b, 0xd58fa58f, 0x61fe81fe, 0x204a804a, 0xe2968296, 0xa3228322, 0xd72d872d, 0x96998699, 0x54458445, 0x15f185f1, 0xbc5b8c5b, 0xfdef8def, 0x3f338f33, 0x7e878e87, 0x0a888a88, 0x4b3c8b3c, 0x89e089e0, 0xc8548854, 0x6ab79ab7, 0x2b039b03, 0xe9df99df, 0xa86b986b, 0xdc649c64, 0x9dd09dd0, 0x5f0c9f0c, 0x1eb89eb8, 0xb7129712, 0xf6a696a6, 0x347a947a, 0x75ce95ce, 0x01c191c1, 0x40759075, 0x82a992a9, 0xc31d931d, ], [ 0x00000000, 0x51010001, 0xa2020002, 0xf3030003, 0xf4070007, 0xa5060006, 0x56050005, 0x07040004, 0x580d000d, 0x090c000c, 0xfa0f000f, 0xab0e000e, 0xac0a000a, 0xfd0b000b, 0x0e080008, 0x5f090009, 0xb01a001a, 0xe11b001b, 0x12180018, 0x43190019, 0x441d001d, 0x151c001c, 0xe61f001f, 0xb71e001e, 0xe8170017, 0xb9160016, 0x4a150015, 0x1b140014, 0x1c100010, 0x4d110011, 0xbe120012, 0xef130013, 0xd0370037, 0x81360036, 0x72350035, 0x23340034, 0x24300030, 0x75310031, 0x86320032, 0xd7330033, 0x883a003a, 0xd93b003b, 0x2a380038, 0x7b390039, 0x7c3d003d, 0x2d3c003c, 0xde3f003f, 0x8f3e003e, 0x602d002d, 0x312c002c, 0xc22f002f, 0x932e002e, 0x942a002a, 0xc52b002b, 0x36280028, 0x67290029, 0x38200020, 0x69210021, 0x9a220022, 0xcb230023, 0xcc270027, 0x9d260026, 0x6e250025, 0x3f240024, 0x106d006d, 0x416c006c, 0xb26f006f, 0xe36e006e, 0xe46a006a, 0xb56b006b, 0x46680068, 0x17690069, 0x48600060, 0x19610061, 0xea620062, 0xbb630063, 0xbc670067, 0xed660066, 0x1e650065, 0x4f640064, 0xa0770077, 0xf1760076, 0x02750075, 0x53740074, 0x54700070, 0x05710071, 0xf6720072, 0xa7730073, 0xf87a007a, 0xa97b007b, 0x5a780078, 0x0b790079, 0x0c7d007d, 0x5d7c007c, 0xae7f007f, 0xff7e007e, 0xc05a005a, 0x915b005b, 0x62580058, 0x33590059, 0x345d005d, 0x655c005c, 0x965f005f, 0xc75e005e, 0x98570057, 0xc9560056, 0x3a550055, 0x6b540054, 0x6c500050, 0x3d510051, 0xce520052, 0x9f530053, 0x70400040, 0x21410041, 0xd2420042, 0x83430043, 0x84470047, 0xd5460046, 0x26450045, 0x77440044, 0x284d004d, 0x794c004c, 0x8a4f004f, 0xdb4e004e, 0xdc4a004a, 0x8d4b004b, 0x7e480048, 0x2f490049, 0x20da00da, 0x71db00db, 0x82d800d8, 0xd3d900d9, 0xd4dd00dd, 0x85dc00dc, 0x76df00df, 0x27de00de, 0x78d700d7, 0x29d600d6, 0xdad500d5, 0x8bd400d4, 0x8cd000d0, 0xddd100d1, 0x2ed200d2, 0x7fd300d3, 0x90c000c0, 0xc1c100c1, 0x32c200c2, 0x63c300c3, 0x64c700c7, 0x35c600c6, 0xc6c500c5, 0x97c400c4, 0xc8cd00cd, 0x99cc00cc, 0x6acf00cf, 0x3bce00ce, 0x3cca00ca, 0x6dcb00cb, 0x9ec800c8, 0xcfc900c9, 0xf0ed00ed, 0xa1ec00ec, 0x52ef00ef, 0x03ee00ee, 0x04ea00ea, 0x55eb00eb, 0xa6e800e8, 0xf7e900e9, 0xa8e000e0, 0xf9e100e1, 0x0ae200e2, 0x5be300e3, 0x5ce700e7, 0x0de600e6, 0xfee500e5, 0xafe400e4, 0x40f700f7, 0x11f600f6, 0xe2f500f5, 0xb3f400f4, 0xb4f000f0, 0xe5f100f1, 0x16f200f2, 0x47f300f3, 0x18fa00fa, 0x49fb00fb, 0xbaf800f8, 0xebf900f9, 0xecfd00fd, 0xbdfc00fc, 0x4eff00ff, 0x1ffe00fe, 0x30b700b7, 0x61b600b6, 0x92b500b5, 0xc3b400b4, 0xc4b000b0, 0x95b100b1, 0x66b200b2, 0x37b300b3, 0x68ba00ba, 0x39bb00bb, 0xcab800b8, 0x9bb900b9, 0x9cbd00bd, 0xcdbc00bc, 0x3ebf00bf, 0x6fbe00be, 0x80ad00ad, 0xd1ac00ac, 0x22af00af, 0x73ae00ae, 0x74aa00aa, 0x25ab00ab, 0xd6a800a8, 0x87a900a9, 0xd8a000a0, 0x89a100a1, 0x7aa200a2, 0x2ba300a3, 0x2ca700a7, 0x7da600a6, 0x8ea500a5, 0xdfa400a4, 0xe0800080, 0xb1810081, 0x42820082, 0x13830083, 0x14870087, 0x45860086, 0xb6850085, 0xe7840084, 0xb88d008d, 0xe98c008c, 0x1a8f008f, 0x4b8e008e, 0x4c8a008a, 0x1d8b008b, 0xee880088, 0xbf890089, 0x509a009a, 0x019b009b, 0xf2980098, 0xa3990099, 0xa49d009d, 0xf59c009c, 0x069f009f, 0x579e009e, 0x08970097, 0x59960096, 0xaa950095, 0xfb940094, 0xfc900090, 0xad910091, 0x5e920092, 0x0f930093, ], [ 0x00000000, 0x90c00001, 0x91830001, 0x01430000, 0x93050001, 0x03c50000, 0x02860000, 0x92460001, 0x96090001, 0x06c90000, 0x078a0000, 0x974a0001, 0x050c0000, 0x95cc0001, 0x948f0001, 0x044f0000, 0x9c110001, 0x0cd10000, 0x0d920000, 0x9d520001, 0x0f140000, 0x9fd40001, 0x9e970001, 0x0e570000, 0x0a180000, 0x9ad80001, 0x9b9b0001, 0x0b5b0000, 0x991d0001, 0x09dd0000, 0x089e0000, 0x985e0001, 0x88210001, 0x18e10000, 0x19a20000, 0x89620001, 0x1b240000, 0x8be40001, 0x8aa70001, 0x1a670000, 0x1e280000, 0x8ee80001, 0x8fab0001, 0x1f6b0000, 0x8d2d0001, 0x1ded0000, 0x1cae0000, 0x8c6e0001, 0x14300000, 0x84f00001, 0x85b30001, 0x15730000, 0x87350001, 0x17f50000, 0x16b60000, 0x86760001, 0x82390001, 0x12f90000, 0x13ba0000, 0x837a0001, 0x113c0000, 0x81fc0001, 0x80bf0001, 0x107f0000, 0xa0410001, 0x30810000, 0x31c20000, 0xa1020001, 0x33440000, 0xa3840001, 0xa2c70001, 0x32070000, 0x36480000, 0xa6880001, 0xa7cb0001, 0x370b0000, 0xa54d0001, 0x358d0000, 0x34ce0000, 0xa40e0001, 0x3c500000, 0xac900001, 0xadd30001, 0x3d130000, 0xaf550001, 0x3f950000, 0x3ed60000, 0xae160001, 0xaa590001, 0x3a990000, 0x3bda0000, 0xab1a0001, 0x395c0000, 0xa99c0001, 0xa8df0001, 0x381f0000, 0x28600000, 0xb8a00001, 0xb9e30001, 0x29230000, 0xbb650001, 0x2ba50000, 0x2ae60000, 0xba260001, 0xbe690001, 0x2ea90000, 0x2fea0000, 0xbf2a0001, 0x2d6c0000, 0xbdac0001, 0xbcef0001, 0x2c2f0000, 0xb4710001, 0x24b10000, 0x25f20000, 0xb5320001, 0x27740000, 0xb7b40001, 0xb6f70001, 0x26370000, 0x22780000, 0xb2b80001, 0xb3fb0001, 0x233b0000, 0xb17d0001, 0x21bd0000, 0x20fe0000, 0xb03e0001, 0xf0810001, 0x60410000, 0x61020000, 0xf1c20001, 0x63840000, 0xf3440001, 0xf2070001, 0x62c70000, 0x66880000, 0xf6480001, 0xf70b0001, 0x67cb0000, 0xf58d0001, 0x654d0000, 0x640e0000, 0xf4ce0001, 0x6c900000, 0xfc500001, 0xfd130001, 0x6dd30000, 0xff950001, 0x6f550000, 0x6e160000, 0xfed60001, 0xfa990001, 0x6a590000, 0x6b1a0000, 0xfbda0001, 0x699c0000, 0xf95c0001, 0xf81f0001, 0x68df0000, 0x78a00000, 0xe8600001, 0xe9230001, 0x79e30000, 0xeba50001, 0x7b650000, 0x7a260000, 0xeae60001, 0xeea90001, 0x7e690000, 0x7f2a0000, 0xefea0001, 0x7dac0000, 0xed6c0001, 0xec2f0001, 0x7cef0000, 0xe4b10001, 0x74710000, 0x75320000, 0xe5f20001, 0x77b40000, 0xe7740001, 0xe6370001, 0x76f70000, 0x72b80000, 0xe2780001, 0xe33b0001, 0x73fb0000, 0xe1bd0001, 0x717d0000, 0x703e0000, 0xe0fe0001, 0x50c00000, 0xc0000001, 0xc1430001, 0x51830000, 0xc3c50001, 0x53050000, 0x52460000, 0xc2860001, 0xc6c90001, 0x56090000, 0x574a0000, 0xc78a0001, 0x55cc0000, 0xc50c0001, 0xc44f0001, 0x548f0000, 0xccd10001, 0x5c110000, 0x5d520000, 0xcd920001, 0x5fd40000, 0xcf140001, 0xce570001, 0x5e970000, 0x5ad80000, 0xca180001, 0xcb5b0001, 0x5b9b0000, 0xc9dd0001, 0x591d0000, 0x585e0000, 0xc89e0001, 0xd8e10001, 0x48210000, 0x49620000, 0xd9a20001, 0x4be40000, 0xdb240001, 0xda670001, 0x4aa70000, 0x4ee80000, 0xde280001, 0xdf6b0001, 0x4fab0000, 0xdded0001, 0x4d2d0000, 0x4c6e0000, 0xdcae0001, 0x44f00000, 0xd4300001, 0xd5730001, 0x45b30000, 0xd7f50001, 0x47350000, 0x46760000, 0xd6b60001, 0xd2f90001, 0x42390000, 0x437a0000, 0xd3ba0001, 0x41fc0000, 0xd13c0001, 0xd07f0001, 0x40bf0000, ], [ 0x00000000, 0x9001c101, 0x90008201, 0x00014300, 0x90020401, 0x0003c500, 0x00028600, 0x90034701, 0x90070801, 0x0006c900, 0x00078a00, 0x90064b01, 0x00050c00, 0x9004cd01, 0x90058e01, 0x00044f00, 0x900d1001, 0x000cd100, 0x000d9200, 0x900c5301, 0x000f1400, 0x900ed501, 0x900f9601, 0x000e5700, 0x000a1800, 0x900bd901, 0x900a9a01, 0x000b5b00, 0x90081c01, 0x0009dd00, 0x00089e00, 0x90095f01, 0x90192001, 0x0018e100, 0x0019a200, 0x90186301, 0x001b2400, 0x901ae501, 0x901ba601, 0x001a6700, 0x001e2800, 0x901fe901, 0x901eaa01, 0x001f6b00, 0x901c2c01, 0x001ded00, 0x001cae00, 0x901d6f01, 0x00143000, 0x9015f101, 0x9014b201, 0x00157300, 0x90163401, 0x0017f500, 0x0016b600, 0x90177701, 0x90133801, 0x0012f900, 0x0013ba00, 0x90127b01, 0x00113c00, 0x9010fd01, 0x9011be01, 0x00107f00, 0x90314001, 0x00308100, 0x0031c200, 0x90300301, 0x00334400, 0x90328501, 0x9033c601, 0x00320700, 0x00364800, 0x90378901, 0x9036ca01, 0x00370b00, 0x90344c01, 0x00358d00, 0x0034ce00, 0x90350f01, 0x003c5000, 0x903d9101, 0x903cd201, 0x003d1300, 0x903e5401, 0x003f9500, 0x003ed600, 0x903f1701, 0x903b5801, 0x003a9900, 0x003bda00, 0x903a1b01, 0x00395c00, 0x90389d01, 0x9039de01, 0x00381f00, 0x00286000, 0x9029a101, 0x9028e201, 0x00292300, 0x902a6401, 0x002ba500, 0x002ae600, 0x902b2701, 0x902f6801, 0x002ea900, 0x002fea00, 0x902e2b01, 0x002d6c00, 0x902cad01, 0x902dee01, 0x002c2f00, 0x90257001, 0x0024b100, 0x0025f200, 0x90243301, 0x00277400, 0x9026b501, 0x9027f601, 0x00263700, 0x00227800, 0x9023b901, 0x9022fa01, 0x00233b00, 0x90207c01, 0x0021bd00, 0x0020fe00, 0x90213f01, 0x90618001, 0x00604100, 0x00610200, 0x9060c301, 0x00638400, 0x90624501, 0x90630601, 0x0062c700, 0x00668800, 0x90674901, 0x90660a01, 0x0067cb00, 0x90648c01, 0x00654d00, 0x00640e00, 0x9065cf01, 0x006c9000, 0x906d5101, 0x906c1201, 0x006dd300, 0x906e9401, 0x006f5500, 0x006e1600, 0x906fd701, 0x906b9801, 0x006a5900, 0x006b1a00, 0x906adb01, 0x00699c00, 0x90685d01, 0x90691e01, 0x0068df00, 0x0078a000, 0x90796101, 0x90782201, 0x0079e300, 0x907aa401, 0x007b6500, 0x007a2600, 0x907be701, 0x907fa801, 0x007e6900, 0x007f2a00, 0x907eeb01, 0x007dac00, 0x907c6d01, 0x907d2e01, 0x007cef00, 0x9075b001, 0x00747100, 0x00753200, 0x9074f301, 0x0077b400, 0x90767501, 0x90773601, 0x0076f700, 0x0072b800, 0x90737901, 0x90723a01, 0x0073fb00, 0x9070bc01, 0x00717d00, 0x00703e00, 0x9071ff01, 0x0050c000, 0x90510101, 0x90504201, 0x00518300, 0x9052c401, 0x00530500, 0x00524600, 0x90538701, 0x9057c801, 0x00560900, 0x00574a00, 0x90568b01, 0x0055cc00, 0x90540d01, 0x90554e01, 0x00548f00, 0x905dd001, 0x005c1100, 0x005d5200, 0x905c9301, 0x005fd400, 0x905e1501, 0x905f5601, 0x005e9700, 0x005ad800, 0x905b1901, 0x905a5a01, 0x005b9b00, 0x9058dc01, 0x00591d00, 0x00585e00, 0x90599f01, 0x9049e001, 0x00482100, 0x00496200, 0x9048a301, 0x004be400, 0x904a2501, 0x904b6601, 0x004aa700, 0x004ee800, 0x904f2901, 0x904e6a01, 0x004fab00, 0x904cec01, 0x004d2d00, 0x004c6e00, 0x904daf01, 0x0044f000, 0x90453101, 0x90447201, 0x0045b300, 0x9046f401, 0x00473500, 0x00467600, 0x9047b701, 0x9043f801, 0x00423900, 0x00437a00, 0x9042bb01, 0x0041fc00, 0x90403d01, 0x90417e01, 0x0040bf00, ], [ 0x00000000, 0x900100c0, 0x90010183, 0x00000143, 0x90010305, 0x000003c5, 0x00000286, 0x90010246, 0x90010609, 0x000006c9, 0x0000078a, 0x9001074a, 0x0000050c, 0x900105cc, 0x9001048f, 0x0000044f, 0x90010c11, 0x00000cd1, 0x00000d92, 0x90010d52, 0x00000f14, 0x90010fd4, 0x90010e97, 0x00000e57, 0x00000a18, 0x90010ad8, 0x90010b9b, 0x00000b5b, 0x9001091d, 0x000009dd, 0x0000089e, 0x9001085e, 0x90011821, 0x000018e1, 0x000019a2, 0x90011962, 0x00001b24, 0x90011be4, 0x90011aa7, 0x00001a67, 0x00001e28, 0x90011ee8, 0x90011fab, 0x00001f6b, 0x90011d2d, 0x00001ded, 0x00001cae, 0x90011c6e, 0x00001430, 0x900114f0, 0x900115b3, 0x00001573, 0x90011735, 0x000017f5, 0x000016b6, 0x90011676, 0x90011239, 0x000012f9, 0x000013ba, 0x9001137a, 0x0000113c, 0x900111fc, 0x900110bf, 0x0000107f, 0x90013041, 0x00003081, 0x000031c2, 0x90013102, 0x00003344, 0x90013384, 0x900132c7, 0x00003207, 0x00003648, 0x90013688, 0x900137cb, 0x0000370b, 0x9001354d, 0x0000358d, 0x000034ce, 0x9001340e, 0x00003c50, 0x90013c90, 0x90013dd3, 0x00003d13, 0x90013f55, 0x00003f95, 0x00003ed6, 0x90013e16, 0x90013a59, 0x00003a99, 0x00003bda, 0x90013b1a, 0x0000395c, 0x9001399c, 0x900138df, 0x0000381f, 0x00002860, 0x900128a0, 0x900129e3, 0x00002923, 0x90012b65, 0x00002ba5, 0x00002ae6, 0x90012a26, 0x90012e69, 0x00002ea9, 0x00002fea, 0x90012f2a, 0x00002d6c, 0x90012dac, 0x90012cef, 0x00002c2f, 0x90012471, 0x000024b1, 0x000025f2, 0x90012532, 0x00002774, 0x900127b4, 0x900126f7, 0x00002637, 0x00002278, 0x900122b8, 0x900123fb, 0x0000233b, 0x9001217d, 0x000021bd, 0x000020fe, 0x9001203e, 0x90016081, 0x00006041, 0x00006102, 0x900161c2, 0x00006384, 0x90016344, 0x90016207, 0x000062c7, 0x00006688, 0x90016648, 0x9001670b, 0x000067cb, 0x9001658d, 0x0000654d, 0x0000640e, 0x900164ce, 0x00006c90, 0x90016c50, 0x90016d13, 0x00006dd3, 0x90016f95, 0x00006f55, 0x00006e16, 0x90016ed6, 0x90016a99, 0x00006a59, 0x00006b1a, 0x90016bda, 0x0000699c, 0x9001695c, 0x9001681f, 0x000068df, 0x000078a0, 0x90017860, 0x90017923, 0x000079e3, 0x90017ba5, 0x00007b65, 0x00007a26, 0x90017ae6, 0x90017ea9, 0x00007e69, 0x00007f2a, 0x90017fea, 0x00007dac, 0x90017d6c, 0x90017c2f, 0x00007cef, 0x900174b1, 0x00007471, 0x00007532, 0x900175f2, 0x000077b4, 0x90017774, 0x90017637, 0x000076f7, 0x000072b8, 0x90017278, 0x9001733b, 0x000073fb, 0x900171bd, 0x0000717d, 0x0000703e, 0x900170fe, 0x000050c0, 0x90015000, 0x90015143, 0x00005183, 0x900153c5, 0x00005305, 0x00005246, 0x90015286, 0x900156c9, 0x00005609, 0x0000574a, 0x9001578a, 0x000055cc, 0x9001550c, 0x9001544f, 0x0000548f, 0x90015cd1, 0x00005c11, 0x00005d52, 0x90015d92, 0x00005fd4, 0x90015f14, 0x90015e57, 0x00005e97, 0x00005ad8, 0x90015a18, 0x90015b5b, 0x00005b9b, 0x900159dd, 0x0000591d, 0x0000585e, 0x9001589e, 0x900148e1, 0x00004821, 0x00004962, 0x900149a2, 0x00004be4, 0x90014b24, 0x90014a67, 0x00004aa7, 0x00004ee8, 0x90014e28, 0x90014f6b, 0x00004fab, 0x90014ded, 0x00004d2d, 0x00004c6e, 0x90014cae, 0x000044f0, 0x90014430, 0x90014573, 0x000045b3, 0x900147f5, 0x00004735, 0x00004676, 0x900146b6, 0x900142f9, 0x00004239, 0x0000437a, 0x900143ba, 0x000041fc, 0x9001413c, 0x9001407f, 0x000040bf, ], [ 0x00000000, 0x6c90c100, 0xd9218200, 0xb5b14300, 0x02400403, 0x6ed0c503, 0xdb618603, 0xb7f14703, 0x04800806, 0x6810c906, 0xdda18a06, 0xb1314b06, 0x06c00c05, 0x6a50cd05, 0xdfe18e05, 0xb3714f05, 0x0900100c, 0x6590d10c, 0xd021920c, 0xbcb1530c, 0x0b40140f, 0x67d0d50f, 0xd261960f, 0xbef1570f, 0x0d80180a, 0x6110d90a, 0xd4a19a0a, 0xb8315b0a, 0x0fc01c09, 0x6350dd09, 0xd6e19e09, 0xba715f09, 0x12002018, 0x7e90e118, 0xcb21a218, 0xa7b16318, 0x1040241b, 0x7cd0e51b, 0xc961a61b, 0xa5f1671b, 0x1680281e, 0x7a10e91e, 0xcfa1aa1e, 0xa3316b1e, 0x14c02c1d, 0x7850ed1d, 0xcde1ae1d, 0xa1716f1d, 0x1b003014, 0x7790f114, 0xc221b214, 0xaeb17314, 0x19403417, 0x75d0f517, 0xc061b617, 0xacf17717, 0x1f803812, 0x7310f912, 0xc6a1ba12, 0xaa317b12, 0x1dc03c11, 0x7150fd11, 0xc4e1be11, 0xa8717f11, 0x24004030, 0x48908130, 0xfd21c230, 0x91b10330, 0x26404433, 0x4ad08533, 0xff61c633, 0x93f10733, 0x20804836, 0x4c108936, 0xf9a1ca36, 0x95310b36, 0x22c04c35, 0x4e508d35, 0xfbe1ce35, 0x97710f35, 0x2d00503c, 0x4190913c, 0xf421d23c, 0x98b1133c, 0x2f40543f, 0x43d0953f, 0xf661d63f, 0x9af1173f, 0x2980583a, 0x4510993a, 0xf0a1da3a, 0x9c311b3a, 0x2bc05c39, 0x47509d39, 0xf2e1de39, 0x9e711f39, 0x36006028, 0x5a90a128, 0xef21e228, 0x83b12328, 0x3440642b, 0x58d0a52b, 0xed61e62b, 0x81f1272b, 0x3280682e, 0x5e10a92e, 0xeba1ea2e, 0x87312b2e, 0x30c06c2d, 0x5c50ad2d, 0xe9e1ee2d, 0x85712f2d, 0x3f007024, 0x5390b124, 0xe621f224, 0x8ab13324, 0x3d407427, 0x51d0b527, 0xe461f627, 0x88f13727, 0x3b807822, 0x5710b922, 0xe2a1fa22, 0x8e313b22, 0x39c07c21, 0x5550bd21, 0xe0e1fe21, 0x8c713f21, 0x48008060, 0x24904160, 0x91210260, 0xfdb1c360, 0x4a408463, 0x26d04563, 0x93610663, 0xfff1c763, 0x4c808866, 0x20104966, 0x95a10a66, 0xf931cb66, 0x4ec08c65, 0x22504d65, 0x97e10e65, 0xfb71cf65, 0x4100906c, 0x2d90516c, 0x9821126c, 0xf4b1d36c, 0x4340946f, 0x2fd0556f, 0x9a61166f, 0xf6f1d76f, 0x4580986a, 0x2910596a, 0x9ca11a6a, 0xf031db6a, 0x47c09c69, 0x2b505d69, 0x9ee11e69, 0xf271df69, 0x5a00a078, 0x36906178, 0x83212278, 0xefb1e378, 0x5840a47b, 0x34d0657b, 0x8161267b, 0xedf1e77b, 0x5e80a87e, 0x3210697e, 0x87a12a7e, 0xeb31eb7e, 0x5cc0ac7d, 0x30506d7d, 0x85e12e7d, 0xe971ef7d, 0x5300b074, 0x3f907174, 0x8a213274, 0xe6b1f374, 0x5140b477, 0x3dd07577, 0x88613677, 0xe4f1f777, 0x5780b872, 0x3b107972, 0x8ea13a72, 0xe231fb72, 0x55c0bc71, 0x39507d71, 0x8ce13e71, 0xe071ff71, 0x6c00c050, 0x00900150, 0xb5214250, 0xd9b18350, 0x6e40c453, 0x02d00553, 0xb7614653, 0xdbf18753, 0x6880c856, 0x04100956, 0xb1a14a56, 0xdd318b56, 0x6ac0cc55, 0x06500d55, 0xb3e14e55, 0xdf718f55, 0x6500d05c, 0x0990115c, 0xbc21525c, 0xd0b1935c, 0x6740d45f, 0x0bd0155f, 0xbe61565f, 0xd2f1975f, 0x6180d85a, 0x0d10195a, 0xb8a15a5a, 0xd4319b5a, 0x63c0dc59, 0x0f501d59, 0xbae15e59, 0xd6719f59, 0x7e00e048, 0x12902148, 0xa7216248, 0xcbb1a348, 0x7c40e44b, 0x10d0254b, 0xa561664b, 0xc9f1a74b, 0x7a80e84e, 0x1610294e, 0xa3a16a4e, 0xcf31ab4e, 0x78c0ec4d, 0x14502d4d, 0xa1e16e4d, 0xcd71af4d, 0x7700f044, 0x1b903144, 0xae217244, 0xc2b1b344, 0x7540f447, 0x19d03547, 0xac617647, 0xc0f1b747, 0x7380f842, 0x1f103942, 0xaaa17a42, 0xc631bb42, 0x71c0fc41, 0x1d503d41, 0xa8e17e41, 0xc471bf41, ], ]; pub static CRC32_CKSUM_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4, ], [ 0x00000000, 0xd219c1dc, 0xa0f29e0f, 0x72eb5fd3, 0x452421a9, 0x973de075, 0xe5d6bfa6, 0x37cf7e7a, 0x8a484352, 0x5851828e, 0x2abadd5d, 0xf8a31c81, 0xcf6c62fb, 0x1d75a327, 0x6f9efcf4, 0xbd873d28, 0x10519b13, 0xc2485acf, 0xb0a3051c, 0x62bac4c0, 0x5575baba, 0x876c7b66, 0xf58724b5, 0x279ee569, 0x9a19d841, 0x4800199d, 0x3aeb464e, 0xe8f28792, 0xdf3df9e8, 0x0d243834, 0x7fcf67e7, 0xadd6a63b, 0x20a33626, 0xf2baf7fa, 0x8051a829, 0x524869f5, 0x6587178f, 0xb79ed653, 0xc5758980, 0x176c485c, 0xaaeb7574, 0x78f2b4a8, 0x0a19eb7b, 0xd8002aa7, 0xefcf54dd, 0x3dd69501, 0x4f3dcad2, 0x9d240b0e, 0x30f2ad35, 0xe2eb6ce9, 0x9000333a, 0x4219f2e6, 0x75d68c9c, 0xa7cf4d40, 0xd5241293, 0x073dd34f, 0xbabaee67, 0x68a32fbb, 0x1a487068, 0xc851b1b4, 0xff9ecfce, 0x2d870e12, 0x5f6c51c1, 0x8d75901d, 0x41466c4c, 0x935fad90, 0xe1b4f243, 0x33ad339f, 0x04624de5, 0xd67b8c39, 0xa490d3ea, 0x76891236, 0xcb0e2f1e, 0x1917eec2, 0x6bfcb111, 0xb9e570cd, 0x8e2a0eb7, 0x5c33cf6b, 0x2ed890b8, 0xfcc15164, 0x5117f75f, 0x830e3683, 0xf1e56950, 0x23fca88c, 0x1433d6f6, 0xc62a172a, 0xb4c148f9, 0x66d88925, 0xdb5fb40d, 0x094675d1, 0x7bad2a02, 0xa9b4ebde, 0x9e7b95a4, 0x4c625478, 0x3e890bab, 0xec90ca77, 0x61e55a6a, 0xb3fc9bb6, 0xc117c465, 0x130e05b9, 0x24c17bc3, 0xf6d8ba1f, 0x8433e5cc, 0x562a2410, 0xebad1938, 0x39b4d8e4, 0x4b5f8737, 0x994646eb, 0xae893891, 0x7c90f94d, 0x0e7ba69e, 0xdc626742, 0x71b4c179, 0xa3ad00a5, 0xd1465f76, 0x035f9eaa, 0x3490e0d0, 0xe689210c, 0x94627edf, 0x467bbf03, 0xfbfc822b, 0x29e543f7, 0x5b0e1c24, 0x8917ddf8, 0xbed8a382, 0x6cc1625e, 0x1e2a3d8d, 0xcc33fc51, 0x828cd898, 0x50951944, 0x227e4697, 0xf067874b, 0xc7a8f931, 0x15b138ed, 0x675a673e, 0xb543a6e2, 0x08c49bca, 0xdadd5a16, 0xa83605c5, 0x7a2fc419, 0x4de0ba63, 0x9ff97bbf, 0xed12246c, 0x3f0be5b0, 0x92dd438b, 0x40c48257, 0x322fdd84, 0xe0361c58, 0xd7f96222, 0x05e0a3fe, 0x770bfc2d, 0xa5123df1, 0x189500d9, 0xca8cc105, 0xb8679ed6, 0x6a7e5f0a, 0x5db12170, 0x8fa8e0ac, 0xfd43bf7f, 0x2f5a7ea3, 0xa22feebe, 0x70362f62, 0x02dd70b1, 0xd0c4b16d, 0xe70bcf17, 0x35120ecb, 0x47f95118, 0x95e090c4, 0x2867adec, 0xfa7e6c30, 0x889533e3, 0x5a8cf23f, 0x6d438c45, 0xbf5a4d99, 0xcdb1124a, 0x1fa8d396, 0xb27e75ad, 0x6067b471, 0x128ceba2, 0xc0952a7e, 0xf75a5404, 0x254395d8, 0x57a8ca0b, 0x85b10bd7, 0x383636ff, 0xea2ff723, 0x98c4a8f0, 0x4add692c, 0x7d121756, 0xaf0bd68a, 0xdde08959, 0x0ff94885, 0xc3cab4d4, 0x11d37508, 0x63382adb, 0xb121eb07, 0x86ee957d, 0x54f754a1, 0x261c0b72, 0xf405caae, 0x4982f786, 0x9b9b365a, 0xe9706989, 0x3b69a855, 0x0ca6d62f, 0xdebf17f3, 0xac544820, 0x7e4d89fc, 0xd39b2fc7, 0x0182ee1b, 0x7369b1c8, 0xa1707014, 0x96bf0e6e, 0x44a6cfb2, 0x364d9061, 0xe45451bd, 0x59d36c95, 0x8bcaad49, 0xf921f29a, 0x2b383346, 0x1cf74d3c, 0xceee8ce0, 0xbc05d333, 0x6e1c12ef, 0xe36982f2, 0x3170432e, 0x439b1cfd, 0x9182dd21, 0xa64da35b, 0x74546287, 0x06bf3d54, 0xd4a6fc88, 0x6921c1a0, 0xbb38007c, 0xc9d35faf, 0x1bca9e73, 0x2c05e009, 0xfe1c21d5, 0x8cf77e06, 0x5eeebfda, 0xf33819e1, 0x2121d83d, 0x53ca87ee, 0x81d34632, 0xb61c3848, 0x6405f994, 0x16eea647, 0xc4f7679b, 0x79705ab3, 0xab699b6f, 0xd982c4bc, 0x0b9b0560, 0x3c547b1a, 0xee4dbac6, 0x9ca6e515, 0x4ebf24c9, ], [ 0x00000000, 0x01d8ac87, 0x03b1590e, 0x0269f589, 0x0762b21c, 0x06ba1e9b, 0x04d3eb12, 0x050b4795, 0x0ec56438, 0x0f1dc8bf, 0x0d743d36, 0x0cac91b1, 0x09a7d624, 0x087f7aa3, 0x0a168f2a, 0x0bce23ad, 0x1d8ac870, 0x1c5264f7, 0x1e3b917e, 0x1fe33df9, 0x1ae87a6c, 0x1b30d6eb, 0x19592362, 0x18818fe5, 0x134fac48, 0x129700cf, 0x10fef546, 0x112659c1, 0x142d1e54, 0x15f5b2d3, 0x179c475a, 0x1644ebdd, 0x3b1590e0, 0x3acd3c67, 0x38a4c9ee, 0x397c6569, 0x3c7722fc, 0x3daf8e7b, 0x3fc67bf2, 0x3e1ed775, 0x35d0f4d8, 0x3408585f, 0x3661add6, 0x37b90151, 0x32b246c4, 0x336aea43, 0x31031fca, 0x30dbb34d, 0x269f5890, 0x2747f417, 0x252e019e, 0x24f6ad19, 0x21fdea8c, 0x2025460b, 0x224cb382, 0x23941f05, 0x285a3ca8, 0x2982902f, 0x2beb65a6, 0x2a33c921, 0x2f388eb4, 0x2ee02233, 0x2c89d7ba, 0x2d517b3d, 0x762b21c0, 0x77f38d47, 0x759a78ce, 0x7442d449, 0x714993dc, 0x70913f5b, 0x72f8cad2, 0x73206655, 0x78ee45f8, 0x7936e97f, 0x7b5f1cf6, 0x7a87b071, 0x7f8cf7e4, 0x7e545b63, 0x7c3daeea, 0x7de5026d, 0x6ba1e9b0, 0x6a794537, 0x6810b0be, 0x69c81c39, 0x6cc35bac, 0x6d1bf72b, 0x6f7202a2, 0x6eaaae25, 0x65648d88, 0x64bc210f, 0x66d5d486, 0x670d7801, 0x62063f94, 0x63de9313, 0x61b7669a, 0x606fca1d, 0x4d3eb120, 0x4ce61da7, 0x4e8fe82e, 0x4f5744a9, 0x4a5c033c, 0x4b84afbb, 0x49ed5a32, 0x4835f6b5, 0x43fbd518, 0x4223799f, 0x404a8c16, 0x41922091, 0x44996704, 0x4541cb83, 0x47283e0a, 0x46f0928d, 0x50b47950, 0x516cd5d7, 0x5305205e, 0x52dd8cd9, 0x57d6cb4c, 0x560e67cb, 0x54679242, 0x55bf3ec5, 0x5e711d68, 0x5fa9b1ef, 0x5dc04466, 0x5c18e8e1, 0x5913af74, 0x58cb03f3, 0x5aa2f67a, 0x5b7a5afd, 0xec564380, 0xed8eef07, 0xefe71a8e, 0xee3fb609, 0xeb34f19c, 0xeaec5d1b, 0xe885a892, 0xe95d0415, 0xe29327b8, 0xe34b8b3f, 0xe1227eb6, 0xe0fad231, 0xe5f195a4, 0xe4293923, 0xe640ccaa, 0xe798602d, 0xf1dc8bf0, 0xf0042777, 0xf26dd2fe, 0xf3b57e79, 0xf6be39ec, 0xf766956b, 0xf50f60e2, 0xf4d7cc65, 0xff19efc8, 0xfec1434f, 0xfca8b6c6, 0xfd701a41, 0xf87b5dd4, 0xf9a3f153, 0xfbca04da, 0xfa12a85d, 0xd743d360, 0xd69b7fe7, 0xd4f28a6e, 0xd52a26e9, 0xd021617c, 0xd1f9cdfb, 0xd3903872, 0xd24894f5, 0xd986b758, 0xd85e1bdf, 0xda37ee56, 0xdbef42d1, 0xdee40544, 0xdf3ca9c3, 0xdd555c4a, 0xdc8df0cd, 0xcac91b10, 0xcb11b797, 0xc978421e, 0xc8a0ee99, 0xcdaba90c, 0xcc73058b, 0xce1af002, 0xcfc25c85, 0xc40c7f28, 0xc5d4d3af, 0xc7bd2626, 0xc6658aa1, 0xc36ecd34, 0xc2b661b3, 0xc0df943a, 0xc10738bd, 0x9a7d6240, 0x9ba5cec7, 0x99cc3b4e, 0x981497c9, 0x9d1fd05c, 0x9cc77cdb, 0x9eae8952, 0x9f7625d5, 0x94b80678, 0x9560aaff, 0x97095f76, 0x96d1f3f1, 0x93dab464, 0x920218e3, 0x906bed6a, 0x91b341ed, 0x87f7aa30, 0x862f06b7, 0x8446f33e, 0x859e5fb9, 0x8095182c, 0x814db4ab, 0x83244122, 0x82fceda5, 0x8932ce08, 0x88ea628f, 0x8a839706, 0x8b5b3b81, 0x8e507c14, 0x8f88d093, 0x8de1251a, 0x8c39899d, 0xa168f2a0, 0xa0b05e27, 0xa2d9abae, 0xa3010729, 0xa60a40bc, 0xa7d2ec3b, 0xa5bb19b2, 0xa463b535, 0xafad9698, 0xae753a1f, 0xac1ccf96, 0xadc46311, 0xa8cf2484, 0xa9178803, 0xab7e7d8a, 0xaaa6d10d, 0xbce23ad0, 0xbd3a9657, 0xbf5363de, 0xbe8bcf59, 0xbb8088cc, 0xba58244b, 0xb831d1c2, 0xb9e97d45, 0xb2275ee8, 0xb3fff26f, 0xb19607e6, 0xb04eab61, 0xb545ecf4, 0xb49d4073, 0xb6f4b5fa, 0xb72c197d, ], [ 0x00000000, 0xdc6d9ab7, 0xbc1a28d9, 0x6077b26e, 0x7cf54c05, 0xa098d6b2, 0xc0ef64dc, 0x1c82fe6b, 0xf9ea980a, 0x258702bd, 0x45f0b0d3, 0x999d2a64, 0x851fd40f, 0x59724eb8, 0x3905fcd6, 0xe5686661, 0xf7142da3, 0x2b79b714, 0x4b0e057a, 0x97639fcd, 0x8be161a6, 0x578cfb11, 0x37fb497f, 0xeb96d3c8, 0x0efeb5a9, 0xd2932f1e, 0xb2e49d70, 0x6e8907c7, 0x720bf9ac, 0xae66631b, 0xce11d175, 0x127c4bc2, 0xeae946f1, 0x3684dc46, 0x56f36e28, 0x8a9ef49f, 0x961c0af4, 0x4a719043, 0x2a06222d, 0xf66bb89a, 0x1303defb, 0xcf6e444c, 0xaf19f622, 0x73746c95, 0x6ff692fe, 0xb39b0849, 0xd3ecba27, 0x0f812090, 0x1dfd6b52, 0xc190f1e5, 0xa1e7438b, 0x7d8ad93c, 0x61082757, 0xbd65bde0, 0xdd120f8e, 0x017f9539, 0xe417f358, 0x387a69ef, 0x580ddb81, 0x84604136, 0x98e2bf5d, 0x448f25ea, 0x24f89784, 0xf8950d33, 0xd1139055, 0x0d7e0ae2, 0x6d09b88c, 0xb164223b, 0xade6dc50, 0x718b46e7, 0x11fcf489, 0xcd916e3e, 0x28f9085f, 0xf49492e8, 0x94e32086, 0x488eba31, 0x540c445a, 0x8861deed, 0xe8166c83, 0x347bf634, 0x2607bdf6, 0xfa6a2741, 0x9a1d952f, 0x46700f98, 0x5af2f1f3, 0x869f6b44, 0xe6e8d92a, 0x3a85439d, 0xdfed25fc, 0x0380bf4b, 0x63f70d25, 0xbf9a9792, 0xa31869f9, 0x7f75f34e, 0x1f024120, 0xc36fdb97, 0x3bfad6a4, 0xe7974c13, 0x87e0fe7d, 0x5b8d64ca, 0x470f9aa1, 0x9b620016, 0xfb15b278, 0x277828cf, 0xc2104eae, 0x1e7dd419, 0x7e0a6677, 0xa267fcc0, 0xbee502ab, 0x6288981c, 0x02ff2a72, 0xde92b0c5, 0xcceefb07, 0x108361b0, 0x70f4d3de, 0xac994969, 0xb01bb702, 0x6c762db5, 0x0c019fdb, 0xd06c056c, 0x3504630d, 0xe969f9ba, 0x891e4bd4, 0x5573d163, 0x49f12f08, 0x959cb5bf, 0xf5eb07d1, 0x29869d66, 0xa6e63d1d, 0x7a8ba7aa, 0x1afc15c4, 0xc6918f73, 0xda137118, 0x067eebaf, 0x660959c1, 0xba64c376, 0x5f0ca517, 0x83613fa0, 0xe3168dce, 0x3f7b1779, 0x23f9e912, 0xff9473a5, 0x9fe3c1cb, 0x438e5b7c, 0x51f210be, 0x8d9f8a09, 0xede83867, 0x3185a2d0, 0x2d075cbb, 0xf16ac60c, 0x911d7462, 0x4d70eed5, 0xa81888b4, 0x74751203, 0x1402a06d, 0xc86f3ada, 0xd4edc4b1, 0x08805e06, 0x68f7ec68, 0xb49a76df, 0x4c0f7bec, 0x9062e15b, 0xf0155335, 0x2c78c982, 0x30fa37e9, 0xec97ad5e, 0x8ce01f30, 0x508d8587, 0xb5e5e3e6, 0x69887951, 0x09ffcb3f, 0xd5925188, 0xc910afe3, 0x157d3554, 0x750a873a, 0xa9671d8d, 0xbb1b564f, 0x6776ccf8, 0x07017e96, 0xdb6ce421, 0xc7ee1a4a, 0x1b8380fd, 0x7bf43293, 0xa799a824, 0x42f1ce45, 0x9e9c54f2, 0xfeebe69c, 0x22867c2b, 0x3e048240, 0xe26918f7, 0x821eaa99, 0x5e73302e, 0x77f5ad48, 0xab9837ff, 0xcbef8591, 0x17821f26, 0x0b00e14d, 0xd76d7bfa, 0xb71ac994, 0x6b775323, 0x8e1f3542, 0x5272aff5, 0x32051d9b, 0xee68872c, 0xf2ea7947, 0x2e87e3f0, 0x4ef0519e, 0x929dcb29, 0x80e180eb, 0x5c8c1a5c, 0x3cfba832, 0xe0963285, 0xfc14ccee, 0x20795659, 0x400ee437, 0x9c637e80, 0x790b18e1, 0xa5668256, 0xc5113038, 0x197caa8f, 0x05fe54e4, 0xd993ce53, 0xb9e47c3d, 0x6589e68a, 0x9d1cebb9, 0x4171710e, 0x2106c360, 0xfd6b59d7, 0xe1e9a7bc, 0x3d843d0b, 0x5df38f65, 0x819e15d2, 0x64f673b3, 0xb89be904, 0xd8ec5b6a, 0x0481c1dd, 0x18033fb6, 0xc46ea501, 0xa419176f, 0x78748dd8, 0x6a08c61a, 0xb6655cad, 0xd612eec3, 0x0a7f7474, 0x16fd8a1f, 0xca9010a8, 0xaae7a2c6, 0x768a3871, 0x93e25e10, 0x4f8fc4a7, 0x2ff876c9, 0xf395ec7e, 0xef171215, 0x337a88a2, 0x530d3acc, 0x8f60a07b, ], [ 0x00000000, 0x490d678d, 0x921acf1a, 0xdb17a897, 0x20f48383, 0x69f9e40e, 0xb2ee4c99, 0xfbe32b14, 0x41e90706, 0x08e4608b, 0xd3f3c81c, 0x9afeaf91, 0x611d8485, 0x2810e308, 0xf3074b9f, 0xba0a2c12, 0x83d20e0c, 0xcadf6981, 0x11c8c116, 0x58c5a69b, 0xa3268d8f, 0xea2bea02, 0x313c4295, 0x78312518, 0xc23b090a, 0x8b366e87, 0x5021c610, 0x192ca19d, 0xe2cf8a89, 0xabc2ed04, 0x70d54593, 0x39d8221e, 0x036501af, 0x4a686622, 0x917fceb5, 0xd872a938, 0x2391822c, 0x6a9ce5a1, 0xb18b4d36, 0xf8862abb, 0x428c06a9, 0x0b816124, 0xd096c9b3, 0x999bae3e, 0x6278852a, 0x2b75e2a7, 0xf0624a30, 0xb96f2dbd, 0x80b70fa3, 0xc9ba682e, 0x12adc0b9, 0x5ba0a734, 0xa0438c20, 0xe94eebad, 0x3259433a, 0x7b5424b7, 0xc15e08a5, 0x88536f28, 0x5344c7bf, 0x1a49a032, 0xe1aa8b26, 0xa8a7ecab, 0x73b0443c, 0x3abd23b1, 0x06ca035e, 0x4fc764d3, 0x94d0cc44, 0xddddabc9, 0x263e80dd, 0x6f33e750, 0xb4244fc7, 0xfd29284a, 0x47230458, 0x0e2e63d5, 0xd539cb42, 0x9c34accf, 0x67d787db, 0x2edae056, 0xf5cd48c1, 0xbcc02f4c, 0x85180d52, 0xcc156adf, 0x1702c248, 0x5e0fa5c5, 0xa5ec8ed1, 0xece1e95c, 0x37f641cb, 0x7efb2646, 0xc4f10a54, 0x8dfc6dd9, 0x56ebc54e, 0x1fe6a2c3, 0xe40589d7, 0xad08ee5a, 0x761f46cd, 0x3f122140, 0x05af02f1, 0x4ca2657c, 0x97b5cdeb, 0xdeb8aa66, 0x255b8172, 0x6c56e6ff, 0xb7414e68, 0xfe4c29e5, 0x444605f7, 0x0d4b627a, 0xd65ccaed, 0x9f51ad60, 0x64b28674, 0x2dbfe1f9, 0xf6a8496e, 0xbfa52ee3, 0x867d0cfd, 0xcf706b70, 0x1467c3e7, 0x5d6aa46a, 0xa6898f7e, 0xef84e8f3, 0x34934064, 0x7d9e27e9, 0xc7940bfb, 0x8e996c76, 0x558ec4e1, 0x1c83a36c, 0xe7608878, 0xae6deff5, 0x757a4762, 0x3c7720ef, 0x0d9406bc, 0x44996131, 0x9f8ec9a6, 0xd683ae2b, 0x2d60853f, 0x646de2b2, 0xbf7a4a25, 0xf6772da8, 0x4c7d01ba, 0x05706637, 0xde67cea0, 0x976aa92d, 0x6c898239, 0x2584e5b4, 0xfe934d23, 0xb79e2aae, 0x8e4608b0, 0xc74b6f3d, 0x1c5cc7aa, 0x5551a027, 0xaeb28b33, 0xe7bfecbe, 0x3ca84429, 0x75a523a4, 0xcfaf0fb6, 0x86a2683b, 0x5db5c0ac, 0x14b8a721, 0xef5b8c35, 0xa656ebb8, 0x7d41432f, 0x344c24a2, 0x0ef10713, 0x47fc609e, 0x9cebc809, 0xd5e6af84, 0x2e058490, 0x6708e31d, 0xbc1f4b8a, 0xf5122c07, 0x4f180015, 0x06156798, 0xdd02cf0f, 0x940fa882, 0x6fec8396, 0x26e1e41b, 0xfdf64c8c, 0xb4fb2b01, 0x8d23091f, 0xc42e6e92, 0x1f39c605, 0x5634a188, 0xadd78a9c, 0xe4daed11, 0x3fcd4586, 0x76c0220b, 0xccca0e19, 0x85c76994, 0x5ed0c103, 0x17dda68e, 0xec3e8d9a, 0xa533ea17, 0x7e244280, 0x3729250d, 0x0b5e05e2, 0x4253626f, 0x9944caf8, 0xd049ad75, 0x2baa8661, 0x62a7e1ec, 0xb9b0497b, 0xf0bd2ef6, 0x4ab702e4, 0x03ba6569, 0xd8adcdfe, 0x91a0aa73, 0x6a438167, 0x234ee6ea, 0xf8594e7d, 0xb15429f0, 0x888c0bee, 0xc1816c63, 0x1a96c4f4, 0x539ba379, 0xa878886d, 0xe175efe0, 0x3a624777, 0x736f20fa, 0xc9650ce8, 0x80686b65, 0x5b7fc3f2, 0x1272a47f, 0xe9918f6b, 0xa09ce8e6, 0x7b8b4071, 0x328627fc, 0x083b044d, 0x413663c0, 0x9a21cb57, 0xd32cacda, 0x28cf87ce, 0x61c2e043, 0xbad548d4, 0xf3d82f59, 0x49d2034b, 0x00df64c6, 0xdbc8cc51, 0x92c5abdc, 0x692680c8, 0x202be745, 0xfb3c4fd2, 0xb231285f, 0x8be90a41, 0xc2e46dcc, 0x19f3c55b, 0x50fea2d6, 0xab1d89c2, 0xe210ee4f, 0x390746d8, 0x700a2155, 0xca000d47, 0x830d6aca, 0x581ac25d, 0x1117a5d0, 0xeaf48ec4, 0xa3f9e949, 0x78ee41de, 0x31e32653, ], [ 0x00000000, 0x1b280d78, 0x36501af0, 0x2d781788, 0x6ca035e0, 0x77883898, 0x5af02f10, 0x41d82268, 0xd9406bc0, 0xc26866b8, 0xef107130, 0xf4387c48, 0xb5e05e20, 0xaec85358, 0x83b044d0, 0x989849a8, 0xb641ca37, 0xad69c74f, 0x8011d0c7, 0x9b39ddbf, 0xdae1ffd7, 0xc1c9f2af, 0xecb1e527, 0xf799e85f, 0x6f01a1f7, 0x7429ac8f, 0x5951bb07, 0x4279b67f, 0x03a19417, 0x1889996f, 0x35f18ee7, 0x2ed9839f, 0x684289d9, 0x736a84a1, 0x5e129329, 0x453a9e51, 0x04e2bc39, 0x1fcab141, 0x32b2a6c9, 0x299aabb1, 0xb102e219, 0xaa2aef61, 0x8752f8e9, 0x9c7af591, 0xdda2d7f9, 0xc68ada81, 0xebf2cd09, 0xf0dac071, 0xde0343ee, 0xc52b4e96, 0xe853591e, 0xf37b5466, 0xb2a3760e, 0xa98b7b76, 0x84f36cfe, 0x9fdb6186, 0x0743282e, 0x1c6b2556, 0x311332de, 0x2a3b3fa6, 0x6be31dce, 0x70cb10b6, 0x5db3073e, 0x469b0a46, 0xd08513b2, 0xcbad1eca, 0xe6d50942, 0xfdfd043a, 0xbc252652, 0xa70d2b2a, 0x8a753ca2, 0x915d31da, 0x09c57872, 0x12ed750a, 0x3f956282, 0x24bd6ffa, 0x65654d92, 0x7e4d40ea, 0x53355762, 0x481d5a1a, 0x66c4d985, 0x7decd4fd, 0x5094c375, 0x4bbcce0d, 0x0a64ec65, 0x114ce11d, 0x3c34f695, 0x271cfbed, 0xbf84b245, 0xa4acbf3d, 0x89d4a8b5, 0x92fca5cd, 0xd32487a5, 0xc80c8add, 0xe5749d55, 0xfe5c902d, 0xb8c79a6b, 0xa3ef9713, 0x8e97809b, 0x95bf8de3, 0xd467af8b, 0xcf4fa2f3, 0xe237b57b, 0xf91fb803, 0x6187f1ab, 0x7aaffcd3, 0x57d7eb5b, 0x4cffe623, 0x0d27c44b, 0x160fc933, 0x3b77debb, 0x205fd3c3, 0x0e86505c, 0x15ae5d24, 0x38d64aac, 0x23fe47d4, 0x622665bc, 0x790e68c4, 0x54767f4c, 0x4f5e7234, 0xd7c63b9c, 0xccee36e4, 0xe196216c, 0xfabe2c14, 0xbb660e7c, 0xa04e0304, 0x8d36148c, 0x961e19f4, 0xa5cb3ad3, 0xbee337ab, 0x939b2023, 0x88b32d5b, 0xc96b0f33, 0xd243024b, 0xff3b15c3, 0xe41318bb, 0x7c8b5113, 0x67a35c6b, 0x4adb4be3, 0x51f3469b, 0x102b64f3, 0x0b03698b, 0x267b7e03, 0x3d53737b, 0x138af0e4, 0x08a2fd9c, 0x25daea14, 0x3ef2e76c, 0x7f2ac504, 0x6402c87c, 0x497adff4, 0x5252d28c, 0xcaca9b24, 0xd1e2965c, 0xfc9a81d4, 0xe7b28cac, 0xa66aaec4, 0xbd42a3bc, 0x903ab434, 0x8b12b94c, 0xcd89b30a, 0xd6a1be72, 0xfbd9a9fa, 0xe0f1a482, 0xa12986ea, 0xba018b92, 0x97799c1a, 0x8c519162, 0x14c9d8ca, 0x0fe1d5b2, 0x2299c23a, 0x39b1cf42, 0x7869ed2a, 0x6341e052, 0x4e39f7da, 0x5511faa2, 0x7bc8793d, 0x60e07445, 0x4d9863cd, 0x56b06eb5, 0x17684cdd, 0x0c4041a5, 0x2138562d, 0x3a105b55, 0xa28812fd, 0xb9a01f85, 0x94d8080d, 0x8ff00575, 0xce28271d, 0xd5002a65, 0xf8783ded, 0xe3503095, 0x754e2961, 0x6e662419, 0x431e3391, 0x58363ee9, 0x19ee1c81, 0x02c611f9, 0x2fbe0671, 0x34960b09, 0xac0e42a1, 0xb7264fd9, 0x9a5e5851, 0x81765529, 0xc0ae7741, 0xdb867a39, 0xf6fe6db1, 0xedd660c9, 0xc30fe356, 0xd827ee2e, 0xf55ff9a6, 0xee77f4de, 0xafafd6b6, 0xb487dbce, 0x99ffcc46, 0x82d7c13e, 0x1a4f8896, 0x016785ee, 0x2c1f9266, 0x37379f1e, 0x76efbd76, 0x6dc7b00e, 0x40bfa786, 0x5b97aafe, 0x1d0ca0b8, 0x0624adc0, 0x2b5cba48, 0x3074b730, 0x71ac9558, 0x6a849820, 0x47fc8fa8, 0x5cd482d0, 0xc44ccb78, 0xdf64c600, 0xf21cd188, 0xe934dcf0, 0xa8ecfe98, 0xb3c4f3e0, 0x9ebce468, 0x8594e910, 0xab4d6a8f, 0xb06567f7, 0x9d1d707f, 0x86357d07, 0xc7ed5f6f, 0xdcc55217, 0xf1bd459f, 0xea9548e7, 0x720d014f, 0x69250c37, 0x445d1bbf, 0x5f7516c7, 0x1ead34af, 0x058539d7, 0x28fd2e5f, 0x33d52327, ], [ 0x00000000, 0x4f576811, 0x9eaed022, 0xd1f9b833, 0x399cbdf3, 0x76cbd5e2, 0xa7326dd1, 0xe86505c0, 0x73397be6, 0x3c6e13f7, 0xed97abc4, 0xa2c0c3d5, 0x4aa5c615, 0x05f2ae04, 0xd40b1637, 0x9b5c7e26, 0xe672f7cc, 0xa9259fdd, 0x78dc27ee, 0x378b4fff, 0xdfee4a3f, 0x90b9222e, 0x41409a1d, 0x0e17f20c, 0x954b8c2a, 0xda1ce43b, 0x0be55c08, 0x44b23419, 0xacd731d9, 0xe38059c8, 0x3279e1fb, 0x7d2e89ea, 0xc824f22f, 0x87739a3e, 0x568a220d, 0x19dd4a1c, 0xf1b84fdc, 0xbeef27cd, 0x6f169ffe, 0x2041f7ef, 0xbb1d89c9, 0xf44ae1d8, 0x25b359eb, 0x6ae431fa, 0x8281343a, 0xcdd65c2b, 0x1c2fe418, 0x53788c09, 0x2e5605e3, 0x61016df2, 0xb0f8d5c1, 0xffafbdd0, 0x17cab810, 0x589dd001, 0x89646832, 0xc6330023, 0x5d6f7e05, 0x12381614, 0xc3c1ae27, 0x8c96c636, 0x64f3c3f6, 0x2ba4abe7, 0xfa5d13d4, 0xb50a7bc5, 0x9488f9e9, 0xdbdf91f8, 0x0a2629cb, 0x457141da, 0xad14441a, 0xe2432c0b, 0x33ba9438, 0x7cedfc29, 0xe7b1820f, 0xa8e6ea1e, 0x791f522d, 0x36483a3c, 0xde2d3ffc, 0x917a57ed, 0x4083efde, 0x0fd487cf, 0x72fa0e25, 0x3dad6634, 0xec54de07, 0xa303b616, 0x4b66b3d6, 0x0431dbc7, 0xd5c863f4, 0x9a9f0be5, 0x01c375c3, 0x4e941dd2, 0x9f6da5e1, 0xd03acdf0, 0x385fc830, 0x7708a021, 0xa6f11812, 0xe9a67003, 0x5cac0bc6, 0x13fb63d7, 0xc202dbe4, 0x8d55b3f5, 0x6530b635, 0x2a67de24, 0xfb9e6617, 0xb4c90e06, 0x2f957020, 0x60c21831, 0xb13ba002, 0xfe6cc813, 0x1609cdd3, 0x595ea5c2, 0x88a71df1, 0xc7f075e0, 0xbadefc0a, 0xf589941b, 0x24702c28, 0x6b274439, 0x834241f9, 0xcc1529e8, 0x1dec91db, 0x52bbf9ca, 0xc9e787ec, 0x86b0effd, 0x574957ce, 0x181e3fdf, 0xf07b3a1f, 0xbf2c520e, 0x6ed5ea3d, 0x2182822c, 0x2dd0ee65, 0x62878674, 0xb37e3e47, 0xfc295656, 0x144c5396, 0x5b1b3b87, 0x8ae283b4, 0xc5b5eba5, 0x5ee99583, 0x11befd92, 0xc04745a1, 0x8f102db0, 0x67752870, 0x28224061, 0xf9dbf852, 0xb68c9043, 0xcba219a9, 0x84f571b8, 0x550cc98b, 0x1a5ba19a, 0xf23ea45a, 0xbd69cc4b, 0x6c907478, 0x23c71c69, 0xb89b624f, 0xf7cc0a5e, 0x2635b26d, 0x6962da7c, 0x8107dfbc, 0xce50b7ad, 0x1fa90f9e, 0x50fe678f, 0xe5f41c4a, 0xaaa3745b, 0x7b5acc68, 0x340da479, 0xdc68a1b9, 0x933fc9a8, 0x42c6719b, 0x0d91198a, 0x96cd67ac, 0xd99a0fbd, 0x0863b78e, 0x4734df9f, 0xaf51da5f, 0xe006b24e, 0x31ff0a7d, 0x7ea8626c, 0x0386eb86, 0x4cd18397, 0x9d283ba4, 0xd27f53b5, 0x3a1a5675, 0x754d3e64, 0xa4b48657, 0xebe3ee46, 0x70bf9060, 0x3fe8f871, 0xee114042, 0xa1462853, 0x49232d93, 0x06744582, 0xd78dfdb1, 0x98da95a0, 0xb958178c, 0xf60f7f9d, 0x27f6c7ae, 0x68a1afbf, 0x80c4aa7f, 0xcf93c26e, 0x1e6a7a5d, 0x513d124c, 0xca616c6a, 0x8536047b, 0x54cfbc48, 0x1b98d459, 0xf3fdd199, 0xbcaab988, 0x6d5301bb, 0x220469aa, 0x5f2ae040, 0x107d8851, 0xc1843062, 0x8ed35873, 0x66b65db3, 0x29e135a2, 0xf8188d91, 0xb74fe580, 0x2c139ba6, 0x6344f3b7, 0xb2bd4b84, 0xfdea2395, 0x158f2655, 0x5ad84e44, 0x8b21f677, 0xc4769e66, 0x717ce5a3, 0x3e2b8db2, 0xefd23581, 0xa0855d90, 0x48e05850, 0x07b73041, 0xd64e8872, 0x9919e063, 0x02459e45, 0x4d12f654, 0x9ceb4e67, 0xd3bc2676, 0x3bd923b6, 0x748e4ba7, 0xa577f394, 0xea209b85, 0x970e126f, 0xd8597a7e, 0x09a0c24d, 0x46f7aa5c, 0xae92af9c, 0xe1c5c78d, 0x303c7fbe, 0x7f6b17af, 0xe4376989, 0xab600198, 0x7a99b9ab, 0x35ced1ba, 0xddabd47a, 0x92fcbc6b, 0x43050458, 0x0c526c49, ], [ 0x00000000, 0x5ba1dcca, 0xb743b994, 0xece2655e, 0x6a466e9f, 0x31e7b255, 0xdd05d70b, 0x86a40bc1, 0xd48cdd3e, 0x8f2d01f4, 0x63cf64aa, 0x386eb860, 0xbecab3a1, 0xe56b6f6b, 0x09890a35, 0x5228d6ff, 0xadd8a7cb, 0xf6797b01, 0x1a9b1e5f, 0x413ac295, 0xc79ec954, 0x9c3f159e, 0x70dd70c0, 0x2b7cac0a, 0x79547af5, 0x22f5a63f, 0xce17c361, 0x95b61fab, 0x1312146a, 0x48b3c8a0, 0xa451adfe, 0xfff07134, 0x5f705221, 0x04d18eeb, 0xe833ebb5, 0xb392377f, 0x35363cbe, 0x6e97e074, 0x8275852a, 0xd9d459e0, 0x8bfc8f1f, 0xd05d53d5, 0x3cbf368b, 0x671eea41, 0xe1bae180, 0xba1b3d4a, 0x56f95814, 0x0d5884de, 0xf2a8f5ea, 0xa9092920, 0x45eb4c7e, 0x1e4a90b4, 0x98ee9b75, 0xc34f47bf, 0x2fad22e1, 0x740cfe2b, 0x262428d4, 0x7d85f41e, 0x91679140, 0xcac64d8a, 0x4c62464b, 0x17c39a81, 0xfb21ffdf, 0xa0802315, 0xbee0a442, 0xe5417888, 0x09a31dd6, 0x5202c11c, 0xd4a6cadd, 0x8f071617, 0x63e57349, 0x3844af83, 0x6a6c797c, 0x31cda5b6, 0xdd2fc0e8, 0x868e1c22, 0x002a17e3, 0x5b8bcb29, 0xb769ae77, 0xecc872bd, 0x13380389, 0x4899df43, 0xa47bba1d, 0xffda66d7, 0x797e6d16, 0x22dfb1dc, 0xce3dd482, 0x959c0848, 0xc7b4deb7, 0x9c15027d, 0x70f76723, 0x2b56bbe9, 0xadf2b028, 0xf6536ce2, 0x1ab109bc, 0x4110d576, 0xe190f663, 0xba312aa9, 0x56d34ff7, 0x0d72933d, 0x8bd698fc, 0xd0774436, 0x3c952168, 0x6734fda2, 0x351c2b5d, 0x6ebdf797, 0x825f92c9, 0xd9fe4e03, 0x5f5a45c2, 0x04fb9908, 0xe819fc56, 0xb3b8209c, 0x4c4851a8, 0x17e98d62, 0xfb0be83c, 0xa0aa34f6, 0x260e3f37, 0x7dafe3fd, 0x914d86a3, 0xcaec5a69, 0x98c48c96, 0xc365505c, 0x2f873502, 0x7426e9c8, 0xf282e209, 0xa9233ec3, 0x45c15b9d, 0x1e608757, 0x79005533, 0x22a189f9, 0xce43eca7, 0x95e2306d, 0x13463bac, 0x48e7e766, 0xa4058238, 0xffa45ef2, 0xad8c880d, 0xf62d54c7, 0x1acf3199, 0x416eed53, 0xc7cae692, 0x9c6b3a58, 0x70895f06, 0x2b2883cc, 0xd4d8f2f8, 0x8f792e32, 0x639b4b6c, 0x383a97a6, 0xbe9e9c67, 0xe53f40ad, 0x09dd25f3, 0x527cf939, 0x00542fc6, 0x5bf5f30c, 0xb7179652, 0xecb64a98, 0x6a124159, 0x31b39d93, 0xdd51f8cd, 0x86f02407, 0x26700712, 0x7dd1dbd8, 0x9133be86, 0xca92624c, 0x4c36698d, 0x1797b547, 0xfb75d019, 0xa0d40cd3, 0xf2fcda2c, 0xa95d06e6, 0x45bf63b8, 0x1e1ebf72, 0x98bab4b3, 0xc31b6879, 0x2ff90d27, 0x7458d1ed, 0x8ba8a0d9, 0xd0097c13, 0x3ceb194d, 0x674ac587, 0xe1eece46, 0xba4f128c, 0x56ad77d2, 0x0d0cab18, 0x5f247de7, 0x0485a12d, 0xe867c473, 0xb3c618b9, 0x35621378, 0x6ec3cfb2, 0x8221aaec, 0xd9807626, 0xc7e0f171, 0x9c412dbb, 0x70a348e5, 0x2b02942f, 0xada69fee, 0xf6074324, 0x1ae5267a, 0x4144fab0, 0x136c2c4f, 0x48cdf085, 0xa42f95db, 0xff8e4911, 0x792a42d0, 0x228b9e1a, 0xce69fb44, 0x95c8278e, 0x6a3856ba, 0x31998a70, 0xdd7bef2e, 0x86da33e4, 0x007e3825, 0x5bdfe4ef, 0xb73d81b1, 0xec9c5d7b, 0xbeb48b84, 0xe515574e, 0x09f73210, 0x5256eeda, 0xd4f2e51b, 0x8f5339d1, 0x63b15c8f, 0x38108045, 0x9890a350, 0xc3317f9a, 0x2fd31ac4, 0x7472c60e, 0xf2d6cdcf, 0xa9771105, 0x4595745b, 0x1e34a891, 0x4c1c7e6e, 0x17bda2a4, 0xfb5fc7fa, 0xa0fe1b30, 0x265a10f1, 0x7dfbcc3b, 0x9119a965, 0xcab875af, 0x3548049b, 0x6ee9d851, 0x820bbd0f, 0xd9aa61c5, 0x5f0e6a04, 0x04afb6ce, 0xe84dd390, 0xb3ec0f5a, 0xe1c4d9a5, 0xba65056f, 0x56876031, 0x0d26bcfb, 0x8b82b73a, 0xd0236bf0, 0x3cc10eae, 0x6760d264, ], [ 0x00000000, 0xf200aa66, 0xe0c0497b, 0x12c0e31d, 0xc5418f41, 0x37412527, 0x2581c63a, 0xd7816c5c, 0x8e420335, 0x7c42a953, 0x6e824a4e, 0x9c82e028, 0x4b038c74, 0xb9032612, 0xabc3c50f, 0x59c36f69, 0x18451bdd, 0xea45b1bb, 0xf88552a6, 0x0a85f8c0, 0xdd04949c, 0x2f043efa, 0x3dc4dde7, 0xcfc47781, 0x960718e8, 0x6407b28e, 0x76c75193, 0x84c7fbf5, 0x534697a9, 0xa1463dcf, 0xb386ded2, 0x418674b4, 0x308a37ba, 0xc28a9ddc, 0xd04a7ec1, 0x224ad4a7, 0xf5cbb8fb, 0x07cb129d, 0x150bf180, 0xe70b5be6, 0xbec8348f, 0x4cc89ee9, 0x5e087df4, 0xac08d792, 0x7b89bbce, 0x898911a8, 0x9b49f2b5, 0x694958d3, 0x28cf2c67, 0xdacf8601, 0xc80f651c, 0x3a0fcf7a, 0xed8ea326, 0x1f8e0940, 0x0d4eea5d, 0xff4e403b, 0xa68d2f52, 0x548d8534, 0x464d6629, 0xb44dcc4f, 0x63cca013, 0x91cc0a75, 0x830ce968, 0x710c430e, 0x61146f74, 0x9314c512, 0x81d4260f, 0x73d48c69, 0xa455e035, 0x56554a53, 0x4495a94e, 0xb6950328, 0xef566c41, 0x1d56c627, 0x0f96253a, 0xfd968f5c, 0x2a17e300, 0xd8174966, 0xcad7aa7b, 0x38d7001d, 0x795174a9, 0x8b51decf, 0x99913dd2, 0x6b9197b4, 0xbc10fbe8, 0x4e10518e, 0x5cd0b293, 0xaed018f5, 0xf713779c, 0x0513ddfa, 0x17d33ee7, 0xe5d39481, 0x3252f8dd, 0xc05252bb, 0xd292b1a6, 0x20921bc0, 0x519e58ce, 0xa39ef2a8, 0xb15e11b5, 0x435ebbd3, 0x94dfd78f, 0x66df7de9, 0x741f9ef4, 0x861f3492, 0xdfdc5bfb, 0x2ddcf19d, 0x3f1c1280, 0xcd1cb8e6, 0x1a9dd4ba, 0xe89d7edc, 0xfa5d9dc1, 0x085d37a7, 0x49db4313, 0xbbdbe975, 0xa91b0a68, 0x5b1ba00e, 0x8c9acc52, 0x7e9a6634, 0x6c5a8529, 0x9e5a2f4f, 0xc7994026, 0x3599ea40, 0x2759095d, 0xd559a33b, 0x02d8cf67, 0xf0d86501, 0xe218861c, 0x10182c7a, 0xc228dee8, 0x3028748e, 0x22e89793, 0xd0e83df5, 0x076951a9, 0xf569fbcf, 0xe7a918d2, 0x15a9b2b4, 0x4c6adddd, 0xbe6a77bb, 0xacaa94a6, 0x5eaa3ec0, 0x892b529c, 0x7b2bf8fa, 0x69eb1be7, 0x9bebb181, 0xda6dc535, 0x286d6f53, 0x3aad8c4e, 0xc8ad2628, 0x1f2c4a74, 0xed2ce012, 0xffec030f, 0x0deca969, 0x542fc600, 0xa62f6c66, 0xb4ef8f7b, 0x46ef251d, 0x916e4941, 0x636ee327, 0x71ae003a, 0x83aeaa5c, 0xf2a2e952, 0x00a24334, 0x1262a029, 0xe0620a4f, 0x37e36613, 0xc5e3cc75, 0xd7232f68, 0x2523850e, 0x7ce0ea67, 0x8ee04001, 0x9c20a31c, 0x6e20097a, 0xb9a16526, 0x4ba1cf40, 0x59612c5d, 0xab61863b, 0xeae7f28f, 0x18e758e9, 0x0a27bbf4, 0xf8271192, 0x2fa67dce, 0xdda6d7a8, 0xcf6634b5, 0x3d669ed3, 0x64a5f1ba, 0x96a55bdc, 0x8465b8c1, 0x766512a7, 0xa1e47efb, 0x53e4d49d, 0x41243780, 0xb3249de6, 0xa33cb19c, 0x513c1bfa, 0x43fcf8e7, 0xb1fc5281, 0x667d3edd, 0x947d94bb, 0x86bd77a6, 0x74bdddc0, 0x2d7eb2a9, 0xdf7e18cf, 0xcdbefbd2, 0x3fbe51b4, 0xe83f3de8, 0x1a3f978e, 0x08ff7493, 0xfaffdef5, 0xbb79aa41, 0x49790027, 0x5bb9e33a, 0xa9b9495c, 0x7e382500, 0x8c388f66, 0x9ef86c7b, 0x6cf8c61d, 0x353ba974, 0xc73b0312, 0xd5fbe00f, 0x27fb4a69, 0xf07a2635, 0x027a8c53, 0x10ba6f4e, 0xe2bac528, 0x93b68626, 0x61b62c40, 0x7376cf5d, 0x8176653b, 0x56f70967, 0xa4f7a301, 0xb637401c, 0x4437ea7a, 0x1df48513, 0xeff42f75, 0xfd34cc68, 0x0f34660e, 0xd8b50a52, 0x2ab5a034, 0x38754329, 0xca75e94f, 0x8bf39dfb, 0x79f3379d, 0x6b33d480, 0x99337ee6, 0x4eb212ba, 0xbcb2b8dc, 0xae725bc1, 0x5c72f1a7, 0x05b19ece, 0xf7b134a8, 0xe571d7b5, 0x17717dd3, 0xc0f0118f, 0x32f0bbe9, 0x203058f4, 0xd230f292, ], [ 0x00000000, 0x8090a067, 0x05e05d79, 0x8570fd1e, 0x0bc0baf2, 0x8b501a95, 0x0e20e78b, 0x8eb047ec, 0x178175e4, 0x9711d583, 0x1261289d, 0x92f188fa, 0x1c41cf16, 0x9cd16f71, 0x19a1926f, 0x99313208, 0x2f02ebc8, 0xaf924baf, 0x2ae2b6b1, 0xaa7216d6, 0x24c2513a, 0xa452f15d, 0x21220c43, 0xa1b2ac24, 0x38839e2c, 0xb8133e4b, 0x3d63c355, 0xbdf36332, 0x334324de, 0xb3d384b9, 0x36a379a7, 0xb633d9c0, 0x5e05d790, 0xde9577f7, 0x5be58ae9, 0xdb752a8e, 0x55c56d62, 0xd555cd05, 0x5025301b, 0xd0b5907c, 0x4984a274, 0xc9140213, 0x4c64ff0d, 0xccf45f6a, 0x42441886, 0xc2d4b8e1, 0x47a445ff, 0xc734e598, 0x71073c58, 0xf1979c3f, 0x74e76121, 0xf477c146, 0x7ac786aa, 0xfa5726cd, 0x7f27dbd3, 0xffb77bb4, 0x668649bc, 0xe616e9db, 0x636614c5, 0xe3f6b4a2, 0x6d46f34e, 0xedd65329, 0x68a6ae37, 0xe8360e50, 0xbc0baf20, 0x3c9b0f47, 0xb9ebf259, 0x397b523e, 0xb7cb15d2, 0x375bb5b5, 0xb22b48ab, 0x32bbe8cc, 0xab8adac4, 0x2b1a7aa3, 0xae6a87bd, 0x2efa27da, 0xa04a6036, 0x20dac051, 0xa5aa3d4f, 0x253a9d28, 0x930944e8, 0x1399e48f, 0x96e91991, 0x1679b9f6, 0x98c9fe1a, 0x18595e7d, 0x9d29a363, 0x1db90304, 0x8488310c, 0x0418916b, 0x81686c75, 0x01f8cc12, 0x8f488bfe, 0x0fd82b99, 0x8aa8d687, 0x0a3876e0, 0xe20e78b0, 0x629ed8d7, 0xe7ee25c9, 0x677e85ae, 0xe9cec242, 0x695e6225, 0xec2e9f3b, 0x6cbe3f5c, 0xf58f0d54, 0x751fad33, 0xf06f502d, 0x70fff04a, 0xfe4fb7a6, 0x7edf17c1, 0xfbafeadf, 0x7b3f4ab8, 0xcd0c9378, 0x4d9c331f, 0xc8ecce01, 0x487c6e66, 0xc6cc298a, 0x465c89ed, 0xc32c74f3, 0x43bcd494, 0xda8de69c, 0x5a1d46fb, 0xdf6dbbe5, 0x5ffd1b82, 0xd14d5c6e, 0x51ddfc09, 0xd4ad0117, 0x543da170, 0x7cd643f7, 0xfc46e390, 0x79361e8e, 0xf9a6bee9, 0x7716f905, 0xf7865962, 0x72f6a47c, 0xf266041b, 0x6b573613, 0xebc79674, 0x6eb76b6a, 0xee27cb0d, 0x60978ce1, 0xe0072c86, 0x6577d198, 0xe5e771ff, 0x53d4a83f, 0xd3440858, 0x5634f546, 0xd6a45521, 0x581412cd, 0xd884b2aa, 0x5df44fb4, 0xdd64efd3, 0x4455dddb, 0xc4c57dbc, 0x41b580a2, 0xc12520c5, 0x4f956729, 0xcf05c74e, 0x4a753a50, 0xcae59a37, 0x22d39467, 0xa2433400, 0x2733c91e, 0xa7a36979, 0x29132e95, 0xa9838ef2, 0x2cf373ec, 0xac63d38b, 0x3552e183, 0xb5c241e4, 0x30b2bcfa, 0xb0221c9d, 0x3e925b71, 0xbe02fb16, 0x3b720608, 0xbbe2a66f, 0x0dd17faf, 0x8d41dfc8, 0x083122d6, 0x88a182b1, 0x0611c55d, 0x8681653a, 0x03f19824, 0x83613843, 0x1a500a4b, 0x9ac0aa2c, 0x1fb05732, 0x9f20f755, 0x1190b0b9, 0x910010de, 0x1470edc0, 0x94e04da7, 0xc0ddecd7, 0x404d4cb0, 0xc53db1ae, 0x45ad11c9, 0xcb1d5625, 0x4b8df642, 0xcefd0b5c, 0x4e6dab3b, 0xd75c9933, 0x57cc3954, 0xd2bcc44a, 0x522c642d, 0xdc9c23c1, 0x5c0c83a6, 0xd97c7eb8, 0x59ecdedf, 0xefdf071f, 0x6f4fa778, 0xea3f5a66, 0x6aaffa01, 0xe41fbded, 0x648f1d8a, 0xe1ffe094, 0x616f40f3, 0xf85e72fb, 0x78ced29c, 0xfdbe2f82, 0x7d2e8fe5, 0xf39ec809, 0x730e686e, 0xf67e9570, 0x76ee3517, 0x9ed83b47, 0x1e489b20, 0x9b38663e, 0x1ba8c659, 0x951881b5, 0x158821d2, 0x90f8dccc, 0x10687cab, 0x89594ea3, 0x09c9eec4, 0x8cb913da, 0x0c29b3bd, 0x8299f451, 0x02095436, 0x8779a928, 0x07e9094f, 0xb1dad08f, 0x314a70e8, 0xb43a8df6, 0x34aa2d91, 0xba1a6a7d, 0x3a8aca1a, 0xbffa3704, 0x3f6a9763, 0xa65ba56b, 0x26cb050c, 0xa3bbf812, 0x232b5875, 0xad9b1f99, 0x2d0bbffe, 0xa87b42e0, 0x28ebe287, ], [ 0x00000000, 0xf9ac87ee, 0xf798126b, 0x0e349585, 0xebf13961, 0x125dbe8f, 0x1c692b0a, 0xe5c5ace4, 0xd3236f75, 0x2a8fe89b, 0x24bb7d1e, 0xdd17faf0, 0x38d25614, 0xc17ed1fa, 0xcf4a447f, 0x36e6c391, 0xa287c35d, 0x5b2b44b3, 0x551fd136, 0xacb356d8, 0x4976fa3c, 0xb0da7dd2, 0xbeeee857, 0x47426fb9, 0x71a4ac28, 0x88082bc6, 0x863cbe43, 0x7f9039ad, 0x9a559549, 0x63f912a7, 0x6dcd8722, 0x946100cc, 0x41ce9b0d, 0xb8621ce3, 0xb6568966, 0x4ffa0e88, 0xaa3fa26c, 0x53932582, 0x5da7b007, 0xa40b37e9, 0x92edf478, 0x6b417396, 0x6575e613, 0x9cd961fd, 0x791ccd19, 0x80b04af7, 0x8e84df72, 0x7728589c, 0xe3495850, 0x1ae5dfbe, 0x14d14a3b, 0xed7dcdd5, 0x08b86131, 0xf114e6df, 0xff20735a, 0x068cf4b4, 0x306a3725, 0xc9c6b0cb, 0xc7f2254e, 0x3e5ea2a0, 0xdb9b0e44, 0x223789aa, 0x2c031c2f, 0xd5af9bc1, 0x839d361a, 0x7a31b1f4, 0x74052471, 0x8da9a39f, 0x686c0f7b, 0x91c08895, 0x9ff41d10, 0x66589afe, 0x50be596f, 0xa912de81, 0xa7264b04, 0x5e8accea, 0xbb4f600e, 0x42e3e7e0, 0x4cd77265, 0xb57bf58b, 0x211af547, 0xd8b672a9, 0xd682e72c, 0x2f2e60c2, 0xcaebcc26, 0x33474bc8, 0x3d73de4d, 0xc4df59a3, 0xf2399a32, 0x0b951ddc, 0x05a18859, 0xfc0d0fb7, 0x19c8a353, 0xe06424bd, 0xee50b138, 0x17fc36d6, 0xc253ad17, 0x3bff2af9, 0x35cbbf7c, 0xcc673892, 0x29a29476, 0xd00e1398, 0xde3a861d, 0x279601f3, 0x1170c262, 0xe8dc458c, 0xe6e8d009, 0x1f4457e7, 0xfa81fb03, 0x032d7ced, 0x0d19e968, 0xf4b56e86, 0x60d46e4a, 0x9978e9a4, 0x974c7c21, 0x6ee0fbcf, 0x8b25572b, 0x7289d0c5, 0x7cbd4540, 0x8511c2ae, 0xb3f7013f, 0x4a5b86d1, 0x446f1354, 0xbdc394ba, 0x5806385e, 0xa1aabfb0, 0xaf9e2a35, 0x5632addb, 0x03fb7183, 0xfa57f66d, 0xf46363e8, 0x0dcfe406, 0xe80a48e2, 0x11a6cf0c, 0x1f925a89, 0xe63edd67, 0xd0d81ef6, 0x29749918, 0x27400c9d, 0xdeec8b73, 0x3b292797, 0xc285a079, 0xccb135fc, 0x351db212, 0xa17cb2de, 0x58d03530, 0x56e4a0b5, 0xaf48275b, 0x4a8d8bbf, 0xb3210c51, 0xbd1599d4, 0x44b91e3a, 0x725fddab, 0x8bf35a45, 0x85c7cfc0, 0x7c6b482e, 0x99aee4ca, 0x60026324, 0x6e36f6a1, 0x979a714f, 0x4235ea8e, 0xbb996d60, 0xb5adf8e5, 0x4c017f0b, 0xa9c4d3ef, 0x50685401, 0x5e5cc184, 0xa7f0466a, 0x911685fb, 0x68ba0215, 0x668e9790, 0x9f22107e, 0x7ae7bc9a, 0x834b3b74, 0x8d7faef1, 0x74d3291f, 0xe0b229d3, 0x191eae3d, 0x172a3bb8, 0xee86bc56, 0x0b4310b2, 0xf2ef975c, 0xfcdb02d9, 0x05778537, 0x339146a6, 0xca3dc148, 0xc40954cd, 0x3da5d323, 0xd8607fc7, 0x21ccf829, 0x2ff86dac, 0xd654ea42, 0x80664799, 0x79cac077, 0x77fe55f2, 0x8e52d21c, 0x6b977ef8, 0x923bf916, 0x9c0f6c93, 0x65a3eb7d, 0x534528ec, 0xaae9af02, 0xa4dd3a87, 0x5d71bd69, 0xb8b4118d, 0x41189663, 0x4f2c03e6, 0xb6808408, 0x22e184c4, 0xdb4d032a, 0xd57996af, 0x2cd51141, 0xc910bda5, 0x30bc3a4b, 0x3e88afce, 0xc7242820, 0xf1c2ebb1, 0x086e6c5f, 0x065af9da, 0xfff67e34, 0x1a33d2d0, 0xe39f553e, 0xedabc0bb, 0x14074755, 0xc1a8dc94, 0x38045b7a, 0x3630ceff, 0xcf9c4911, 0x2a59e5f5, 0xd3f5621b, 0xddc1f79e, 0x246d7070, 0x128bb3e1, 0xeb27340f, 0xe513a18a, 0x1cbf2664, 0xf97a8a80, 0x00d60d6e, 0x0ee298eb, 0xf74e1f05, 0x632f1fc9, 0x9a839827, 0x94b70da2, 0x6d1b8a4c, 0x88de26a8, 0x7172a146, 0x7f4634c3, 0x86eab32d, 0xb00c70bc, 0x49a0f752, 0x479462d7, 0xbe38e539, 0x5bfd49dd, 0xa251ce33, 0xac655bb6, 0x55c9dc58, ], [ 0x00000000, 0x07f6e306, 0x0fedc60c, 0x081b250a, 0x1fdb8c18, 0x182d6f1e, 0x10364a14, 0x17c0a912, 0x3fb71830, 0x3841fb36, 0x305ade3c, 0x37ac3d3a, 0x206c9428, 0x279a772e, 0x2f815224, 0x2877b122, 0x7f6e3060, 0x7898d366, 0x7083f66c, 0x7775156a, 0x60b5bc78, 0x67435f7e, 0x6f587a74, 0x68ae9972, 0x40d92850, 0x472fcb56, 0x4f34ee5c, 0x48c20d5a, 0x5f02a448, 0x58f4474e, 0x50ef6244, 0x57198142, 0xfedc60c0, 0xf92a83c6, 0xf131a6cc, 0xf6c745ca, 0xe107ecd8, 0xe6f10fde, 0xeeea2ad4, 0xe91cc9d2, 0xc16b78f0, 0xc69d9bf6, 0xce86befc, 0xc9705dfa, 0xdeb0f4e8, 0xd94617ee, 0xd15d32e4, 0xd6abd1e2, 0x81b250a0, 0x8644b3a6, 0x8e5f96ac, 0x89a975aa, 0x9e69dcb8, 0x999f3fbe, 0x91841ab4, 0x9672f9b2, 0xbe054890, 0xb9f3ab96, 0xb1e88e9c, 0xb61e6d9a, 0xa1dec488, 0xa628278e, 0xae330284, 0xa9c5e182, 0xf979dc37, 0xfe8f3f31, 0xf6941a3b, 0xf162f93d, 0xe6a2502f, 0xe154b329, 0xe94f9623, 0xeeb97525, 0xc6cec407, 0xc1382701, 0xc923020b, 0xced5e10d, 0xd915481f, 0xdee3ab19, 0xd6f88e13, 0xd10e6d15, 0x8617ec57, 0x81e10f51, 0x89fa2a5b, 0x8e0cc95d, 0x99cc604f, 0x9e3a8349, 0x9621a643, 0x91d74545, 0xb9a0f467, 0xbe561761, 0xb64d326b, 0xb1bbd16d, 0xa67b787f, 0xa18d9b79, 0xa996be73, 0xae605d75, 0x07a5bcf7, 0x00535ff1, 0x08487afb, 0x0fbe99fd, 0x187e30ef, 0x1f88d3e9, 0x1793f6e3, 0x106515e5, 0x3812a4c7, 0x3fe447c1, 0x37ff62cb, 0x300981cd, 0x27c928df, 0x203fcbd9, 0x2824eed3, 0x2fd20dd5, 0x78cb8c97, 0x7f3d6f91, 0x77264a9b, 0x70d0a99d, 0x6710008f, 0x60e6e389, 0x68fdc683, 0x6f0b2585, 0x477c94a7, 0x408a77a1, 0x489152ab, 0x4f67b1ad, 0x58a718bf, 0x5f51fbb9, 0x574adeb3, 0x50bc3db5, 0xf632a5d9, 0xf1c446df, 0xf9df63d5, 0xfe2980d3, 0xe9e929c1, 0xee1fcac7, 0xe604efcd, 0xe1f20ccb, 0xc985bde9, 0xce735eef, 0xc6687be5, 0xc19e98e3, 0xd65e31f1, 0xd1a8d2f7, 0xd9b3f7fd, 0xde4514fb, 0x895c95b9, 0x8eaa76bf, 0x86b153b5, 0x8147b0b3, 0x968719a1, 0x9171faa7, 0x996adfad, 0x9e9c3cab, 0xb6eb8d89, 0xb11d6e8f, 0xb9064b85, 0xbef0a883, 0xa9300191, 0xaec6e297, 0xa6ddc79d, 0xa12b249b, 0x08eec519, 0x0f18261f, 0x07030315, 0x00f5e013, 0x17354901, 0x10c3aa07, 0x18d88f0d, 0x1f2e6c0b, 0x3759dd29, 0x30af3e2f, 0x38b41b25, 0x3f42f823, 0x28825131, 0x2f74b237, 0x276f973d, 0x2099743b, 0x7780f579, 0x7076167f, 0x786d3375, 0x7f9bd073, 0x685b7961, 0x6fad9a67, 0x67b6bf6d, 0x60405c6b, 0x4837ed49, 0x4fc10e4f, 0x47da2b45, 0x402cc843, 0x57ec6151, 0x501a8257, 0x5801a75d, 0x5ff7445b, 0x0f4b79ee, 0x08bd9ae8, 0x00a6bfe2, 0x07505ce4, 0x1090f5f6, 0x176616f0, 0x1f7d33fa, 0x188bd0fc, 0x30fc61de, 0x370a82d8, 0x3f11a7d2, 0x38e744d4, 0x2f27edc6, 0x28d10ec0, 0x20ca2bca, 0x273cc8cc, 0x7025498e, 0x77d3aa88, 0x7fc88f82, 0x783e6c84, 0x6ffec596, 0x68082690, 0x6013039a, 0x67e5e09c, 0x4f9251be, 0x4864b2b8, 0x407f97b2, 0x478974b4, 0x5049dda6, 0x57bf3ea0, 0x5fa41baa, 0x5852f8ac, 0xf197192e, 0xf661fa28, 0xfe7adf22, 0xf98c3c24, 0xee4c9536, 0xe9ba7630, 0xe1a1533a, 0xe657b03c, 0xce20011e, 0xc9d6e218, 0xc1cdc712, 0xc63b2414, 0xd1fb8d06, 0xd60d6e00, 0xde164b0a, 0xd9e0a80c, 0x8ef9294e, 0x890fca48, 0x8114ef42, 0x86e20c44, 0x9122a556, 0x96d44650, 0x9ecf635a, 0x9939805c, 0xb14e317e, 0xb6b8d278, 0xbea3f772, 0xb9551474, 0xae95bd66, 0xa9635e60, 0xa1787b6a, 0xa68e986c, ], [ 0x00000000, 0xe8a45605, 0xd589b1bd, 0x3d2de7b8, 0xafd27ecd, 0x477628c8, 0x7a5bcf70, 0x92ff9975, 0x5b65e02d, 0xb3c1b628, 0x8eec5190, 0x66480795, 0xf4b79ee0, 0x1c13c8e5, 0x213e2f5d, 0xc99a7958, 0xb6cbc05a, 0x5e6f965f, 0x634271e7, 0x8be627e2, 0x1919be97, 0xf1bde892, 0xcc900f2a, 0x2434592f, 0xedae2077, 0x050a7672, 0x382791ca, 0xd083c7cf, 0x427c5eba, 0xaad808bf, 0x97f5ef07, 0x7f51b902, 0x69569d03, 0x81f2cb06, 0xbcdf2cbe, 0x547b7abb, 0xc684e3ce, 0x2e20b5cb, 0x130d5273, 0xfba90476, 0x32337d2e, 0xda972b2b, 0xe7bacc93, 0x0f1e9a96, 0x9de103e3, 0x754555e6, 0x4868b25e, 0xa0cce45b, 0xdf9d5d59, 0x37390b5c, 0x0a14ece4, 0xe2b0bae1, 0x704f2394, 0x98eb7591, 0xa5c69229, 0x4d62c42c, 0x84f8bd74, 0x6c5ceb71, 0x51710cc9, 0xb9d55acc, 0x2b2ac3b9, 0xc38e95bc, 0xfea37204, 0x16072401, 0xd2ad3a06, 0x3a096c03, 0x07248bbb, 0xef80ddbe, 0x7d7f44cb, 0x95db12ce, 0xa8f6f576, 0x4052a373, 0x89c8da2b, 0x616c8c2e, 0x5c416b96, 0xb4e53d93, 0x261aa4e6, 0xcebef2e3, 0xf393155b, 0x1b37435e, 0x6466fa5c, 0x8cc2ac59, 0xb1ef4be1, 0x594b1de4, 0xcbb48491, 0x2310d294, 0x1e3d352c, 0xf6996329, 0x3f031a71, 0xd7a74c74, 0xea8aabcc, 0x022efdc9, 0x90d164bc, 0x787532b9, 0x4558d501, 0xadfc8304, 0xbbfba705, 0x535ff100, 0x6e7216b8, 0x86d640bd, 0x1429d9c8, 0xfc8d8fcd, 0xc1a06875, 0x29043e70, 0xe09e4728, 0x083a112d, 0x3517f695, 0xddb3a090, 0x4f4c39e5, 0xa7e86fe0, 0x9ac58858, 0x7261de5d, 0x0d30675f, 0xe594315a, 0xd8b9d6e2, 0x301d80e7, 0xa2e21992, 0x4a464f97, 0x776ba82f, 0x9fcffe2a, 0x56558772, 0xbef1d177, 0x83dc36cf, 0x6b7860ca, 0xf987f9bf, 0x1123afba, 0x2c0e4802, 0xc4aa1e07, 0xa19b69bb, 0x493f3fbe, 0x7412d806, 0x9cb68e03, 0x0e491776, 0xe6ed4173, 0xdbc0a6cb, 0x3364f0ce, 0xfafe8996, 0x125adf93, 0x2f77382b, 0xc7d36e2e, 0x552cf75b, 0xbd88a15e, 0x80a546e6, 0x680110e3, 0x1750a9e1, 0xfff4ffe4, 0xc2d9185c, 0x2a7d4e59, 0xb882d72c, 0x50268129, 0x6d0b6691, 0x85af3094, 0x4c3549cc, 0xa4911fc9, 0x99bcf871, 0x7118ae74, 0xe3e73701, 0x0b436104, 0x366e86bc, 0xdecad0b9, 0xc8cdf4b8, 0x2069a2bd, 0x1d444505, 0xf5e01300, 0x671f8a75, 0x8fbbdc70, 0xb2963bc8, 0x5a326dcd, 0x93a81495, 0x7b0c4290, 0x4621a528, 0xae85f32d, 0x3c7a6a58, 0xd4de3c5d, 0xe9f3dbe5, 0x01578de0, 0x7e0634e2, 0x96a262e7, 0xab8f855f, 0x432bd35a, 0xd1d44a2f, 0x39701c2a, 0x045dfb92, 0xecf9ad97, 0x2563d4cf, 0xcdc782ca, 0xf0ea6572, 0x184e3377, 0x8ab1aa02, 0x6215fc07, 0x5f381bbf, 0xb79c4dba, 0x733653bd, 0x9b9205b8, 0xa6bfe200, 0x4e1bb405, 0xdce42d70, 0x34407b75, 0x096d9ccd, 0xe1c9cac8, 0x2853b390, 0xc0f7e595, 0xfdda022d, 0x157e5428, 0x8781cd5d, 0x6f259b58, 0x52087ce0, 0xbaac2ae5, 0xc5fd93e7, 0x2d59c5e2, 0x1074225a, 0xf8d0745f, 0x6a2fed2a, 0x828bbb2f, 0xbfa65c97, 0x57020a92, 0x9e9873ca, 0x763c25cf, 0x4b11c277, 0xa3b59472, 0x314a0d07, 0xd9ee5b02, 0xe4c3bcba, 0x0c67eabf, 0x1a60cebe, 0xf2c498bb, 0xcfe97f03, 0x274d2906, 0xb5b2b073, 0x5d16e676, 0x603b01ce, 0x889f57cb, 0x41052e93, 0xa9a17896, 0x948c9f2e, 0x7c28c92b, 0xeed7505e, 0x0673065b, 0x3b5ee1e3, 0xd3fab7e6, 0xacab0ee4, 0x440f58e1, 0x7922bf59, 0x9186e95c, 0x03797029, 0xebdd262c, 0xd6f0c194, 0x3e549791, 0xf7ceeec9, 0x1f6ab8cc, 0x22475f74, 0xcae30971, 0x581c9004, 0xb0b8c601, 0x8d9521b9, 0x653177bc, ], [ 0x00000000, 0x47f7cec1, 0x8fef9d82, 0xc8185343, 0x1b1e26b3, 0x5ce9e872, 0x94f1bb31, 0xd30675f0, 0x363c4d66, 0x71cb83a7, 0xb9d3d0e4, 0xfe241e25, 0x2d226bd5, 0x6ad5a514, 0xa2cdf657, 0xe53a3896, 0x6c789acc, 0x2b8f540d, 0xe397074e, 0xa460c98f, 0x7766bc7f, 0x309172be, 0xf88921fd, 0xbf7eef3c, 0x5a44d7aa, 0x1db3196b, 0xd5ab4a28, 0x925c84e9, 0x415af119, 0x06ad3fd8, 0xceb56c9b, 0x8942a25a, 0xd8f13598, 0x9f06fb59, 0x571ea81a, 0x10e966db, 0xc3ef132b, 0x8418ddea, 0x4c008ea9, 0x0bf74068, 0xeecd78fe, 0xa93ab63f, 0x6122e57c, 0x26d52bbd, 0xf5d35e4d, 0xb224908c, 0x7a3cc3cf, 0x3dcb0d0e, 0xb489af54, 0xf37e6195, 0x3b6632d6, 0x7c91fc17, 0xaf9789e7, 0xe8604726, 0x20781465, 0x678fdaa4, 0x82b5e232, 0xc5422cf3, 0x0d5a7fb0, 0x4aadb171, 0x99abc481, 0xde5c0a40, 0x16445903, 0x51b397c2, 0xb5237687, 0xf2d4b846, 0x3acceb05, 0x7d3b25c4, 0xae3d5034, 0xe9ca9ef5, 0x21d2cdb6, 0x66250377, 0x831f3be1, 0xc4e8f520, 0x0cf0a663, 0x4b0768a2, 0x98011d52, 0xdff6d393, 0x17ee80d0, 0x50194e11, 0xd95bec4b, 0x9eac228a, 0x56b471c9, 0x1143bf08, 0xc245caf8, 0x85b20439, 0x4daa577a, 0x0a5d99bb, 0xef67a12d, 0xa8906fec, 0x60883caf, 0x277ff26e, 0xf479879e, 0xb38e495f, 0x7b961a1c, 0x3c61d4dd, 0x6dd2431f, 0x2a258dde, 0xe23dde9d, 0xa5ca105c, 0x76cc65ac, 0x313bab6d, 0xf923f82e, 0xbed436ef, 0x5bee0e79, 0x1c19c0b8, 0xd40193fb, 0x93f65d3a, 0x40f028ca, 0x0707e60b, 0xcf1fb548, 0x88e87b89, 0x01aad9d3, 0x465d1712, 0x8e454451, 0xc9b28a90, 0x1ab4ff60, 0x5d4331a1, 0x955b62e2, 0xd2acac23, 0x379694b5, 0x70615a74, 0xb8790937, 0xff8ec7f6, 0x2c88b206, 0x6b7f7cc7, 0xa3672f84, 0xe490e145, 0x6e87f0b9, 0x29703e78, 0xe1686d3b, 0xa69fa3fa, 0x7599d60a, 0x326e18cb, 0xfa764b88, 0xbd818549, 0x58bbbddf, 0x1f4c731e, 0xd754205d, 0x90a3ee9c, 0x43a59b6c, 0x045255ad, 0xcc4a06ee, 0x8bbdc82f, 0x02ff6a75, 0x4508a4b4, 0x8d10f7f7, 0xcae73936, 0x19e14cc6, 0x5e168207, 0x960ed144, 0xd1f91f85, 0x34c32713, 0x7334e9d2, 0xbb2cba91, 0xfcdb7450, 0x2fdd01a0, 0x682acf61, 0xa0329c22, 0xe7c552e3, 0xb676c521, 0xf1810be0, 0x399958a3, 0x7e6e9662, 0xad68e392, 0xea9f2d53, 0x22877e10, 0x6570b0d1, 0x804a8847, 0xc7bd4686, 0x0fa515c5, 0x4852db04, 0x9b54aef4, 0xdca36035, 0x14bb3376, 0x534cfdb7, 0xda0e5fed, 0x9df9912c, 0x55e1c26f, 0x12160cae, 0xc110795e, 0x86e7b79f, 0x4effe4dc, 0x09082a1d, 0xec32128b, 0xabc5dc4a, 0x63dd8f09, 0x242a41c8, 0xf72c3438, 0xb0dbfaf9, 0x78c3a9ba, 0x3f34677b, 0xdba4863e, 0x9c5348ff, 0x544b1bbc, 0x13bcd57d, 0xc0baa08d, 0x874d6e4c, 0x4f553d0f, 0x08a2f3ce, 0xed98cb58, 0xaa6f0599, 0x627756da, 0x2580981b, 0xf686edeb, 0xb171232a, 0x79697069, 0x3e9ebea8, 0xb7dc1cf2, 0xf02bd233, 0x38338170, 0x7fc44fb1, 0xacc23a41, 0xeb35f480, 0x232da7c3, 0x64da6902, 0x81e05194, 0xc6179f55, 0x0e0fcc16, 0x49f802d7, 0x9afe7727, 0xdd09b9e6, 0x1511eaa5, 0x52e62464, 0x0355b3a6, 0x44a27d67, 0x8cba2e24, 0xcb4de0e5, 0x184b9515, 0x5fbc5bd4, 0x97a40897, 0xd053c656, 0x3569fec0, 0x729e3001, 0xba866342, 0xfd71ad83, 0x2e77d873, 0x698016b2, 0xa19845f1, 0xe66f8b30, 0x6f2d296a, 0x28dae7ab, 0xe0c2b4e8, 0xa7357a29, 0x74330fd9, 0x33c4c118, 0xfbdc925b, 0xbc2b5c9a, 0x5911640c, 0x1ee6aacd, 0xd6fef98e, 0x9109374f, 0x420f42bf, 0x05f88c7e, 0xcde0df3d, 0x8a1711fc, ], [ 0x00000000, 0xdd0fe172, 0xbededf53, 0x63d13e21, 0x797ca311, 0xa4734263, 0xc7a27c42, 0x1aad9d30, 0xf2f94622, 0x2ff6a750, 0x4c279971, 0x91287803, 0x8b85e533, 0x568a0441, 0x355b3a60, 0xe854db12, 0xe13391f3, 0x3c3c7081, 0x5fed4ea0, 0x82e2afd2, 0x984f32e2, 0x4540d390, 0x2691edb1, 0xfb9e0cc3, 0x13cad7d1, 0xcec536a3, 0xad140882, 0x701be9f0, 0x6ab674c0, 0xb7b995b2, 0xd468ab93, 0x09674ae1, 0xc6a63e51, 0x1ba9df23, 0x7878e102, 0xa5770070, 0xbfda9d40, 0x62d57c32, 0x01044213, 0xdc0ba361, 0x345f7873, 0xe9509901, 0x8a81a720, 0x578e4652, 0x4d23db62, 0x902c3a10, 0xf3fd0431, 0x2ef2e543, 0x2795afa2, 0xfa9a4ed0, 0x994b70f1, 0x44449183, 0x5ee90cb3, 0x83e6edc1, 0xe037d3e0, 0x3d383292, 0xd56ce980, 0x086308f2, 0x6bb236d3, 0xb6bdd7a1, 0xac104a91, 0x711fabe3, 0x12ce95c2, 0xcfc174b0, 0x898d6115, 0x54828067, 0x3753be46, 0xea5c5f34, 0xf0f1c204, 0x2dfe2376, 0x4e2f1d57, 0x9320fc25, 0x7b742737, 0xa67bc645, 0xc5aaf864, 0x18a51916, 0x02088426, 0xdf076554, 0xbcd65b75, 0x61d9ba07, 0x68bef0e6, 0xb5b11194, 0xd6602fb5, 0x0b6fcec7, 0x11c253f7, 0xcccdb285, 0xaf1c8ca4, 0x72136dd6, 0x9a47b6c4, 0x474857b6, 0x24996997, 0xf99688e5, 0xe33b15d5, 0x3e34f4a7, 0x5de5ca86, 0x80ea2bf4, 0x4f2b5f44, 0x9224be36, 0xf1f58017, 0x2cfa6165, 0x3657fc55, 0xeb581d27, 0x88892306, 0x5586c274, 0xbdd21966, 0x60ddf814, 0x030cc635, 0xde032747, 0xc4aeba77, 0x19a15b05, 0x7a706524, 0xa77f8456, 0xae18ceb7, 0x73172fc5, 0x10c611e4, 0xcdc9f096, 0xd7646da6, 0x0a6b8cd4, 0x69bab2f5, 0xb4b55387, 0x5ce18895, 0x81ee69e7, 0xe23f57c6, 0x3f30b6b4, 0x259d2b84, 0xf892caf6, 0x9b43f4d7, 0x464c15a5, 0x17dbdf9d, 0xcad43eef, 0xa90500ce, 0x740ae1bc, 0x6ea77c8c, 0xb3a89dfe, 0xd079a3df, 0x0d7642ad, 0xe52299bf, 0x382d78cd, 0x5bfc46ec, 0x86f3a79e, 0x9c5e3aae, 0x4151dbdc, 0x2280e5fd, 0xff8f048f, 0xf6e84e6e, 0x2be7af1c, 0x4836913d, 0x9539704f, 0x8f94ed7f, 0x529b0c0d, 0x314a322c, 0xec45d35e, 0x0411084c, 0xd91ee93e, 0xbacfd71f, 0x67c0366d, 0x7d6dab5d, 0xa0624a2f, 0xc3b3740e, 0x1ebc957c, 0xd17de1cc, 0x0c7200be, 0x6fa33e9f, 0xb2acdfed, 0xa80142dd, 0x750ea3af, 0x16df9d8e, 0xcbd07cfc, 0x2384a7ee, 0xfe8b469c, 0x9d5a78bd, 0x405599cf, 0x5af804ff, 0x87f7e58d, 0xe426dbac, 0x39293ade, 0x304e703f, 0xed41914d, 0x8e90af6c, 0x539f4e1e, 0x4932d32e, 0x943d325c, 0xf7ec0c7d, 0x2ae3ed0f, 0xc2b7361d, 0x1fb8d76f, 0x7c69e94e, 0xa166083c, 0xbbcb950c, 0x66c4747e, 0x05154a5f, 0xd81aab2d, 0x9e56be88, 0x43595ffa, 0x208861db, 0xfd8780a9, 0xe72a1d99, 0x3a25fceb, 0x59f4c2ca, 0x84fb23b8, 0x6caff8aa, 0xb1a019d8, 0xd27127f9, 0x0f7ec68b, 0x15d35bbb, 0xc8dcbac9, 0xab0d84e8, 0x7602659a, 0x7f652f7b, 0xa26ace09, 0xc1bbf028, 0x1cb4115a, 0x06198c6a, 0xdb166d18, 0xb8c75339, 0x65c8b24b, 0x8d9c6959, 0x5093882b, 0x3342b60a, 0xee4d5778, 0xf4e0ca48, 0x29ef2b3a, 0x4a3e151b, 0x9731f469, 0x58f080d9, 0x85ff61ab, 0xe62e5f8a, 0x3b21bef8, 0x218c23c8, 0xfc83c2ba, 0x9f52fc9b, 0x425d1de9, 0xaa09c6fb, 0x77062789, 0x14d719a8, 0xc9d8f8da, 0xd37565ea, 0x0e7a8498, 0x6dabbab9, 0xb0a45bcb, 0xb9c3112a, 0x64ccf058, 0x071dce79, 0xda122f0b, 0xc0bfb23b, 0x1db05349, 0x7e616d68, 0xa36e8c1a, 0x4b3a5708, 0x9635b67a, 0xf5e4885b, 0x28eb6929, 0x3246f419, 0xef49156b, 0x8c982b4a, 0x5197ca38, ], [ 0x00000000, 0x2fb7bf3a, 0x5f6f7e74, 0x70d8c14e, 0xbedefce8, 0x916943d2, 0xe1b1829c, 0xce063da6, 0x797ce467, 0x56cb5b5d, 0x26139a13, 0x09a42529, 0xc7a2188f, 0xe815a7b5, 0x98cd66fb, 0xb77ad9c1, 0xf2f9c8ce, 0xdd4e77f4, 0xad96b6ba, 0x82210980, 0x4c273426, 0x63908b1c, 0x13484a52, 0x3cfff568, 0x8b852ca9, 0xa4329393, 0xd4ea52dd, 0xfb5dede7, 0x355bd041, 0x1aec6f7b, 0x6a34ae35, 0x4583110f, 0xe1328c2b, 0xce853311, 0xbe5df25f, 0x91ea4d65, 0x5fec70c3, 0x705bcff9, 0x00830eb7, 0x2f34b18d, 0x984e684c, 0xb7f9d776, 0xc7211638, 0xe896a902, 0x269094a4, 0x09272b9e, 0x79ffead0, 0x564855ea, 0x13cb44e5, 0x3c7cfbdf, 0x4ca43a91, 0x631385ab, 0xad15b80d, 0x82a20737, 0xf27ac679, 0xddcd7943, 0x6ab7a082, 0x45001fb8, 0x35d8def6, 0x1a6f61cc, 0xd4695c6a, 0xfbdee350, 0x8b06221e, 0xa4b19d24, 0xc6a405e1, 0xe913badb, 0x99cb7b95, 0xb67cc4af, 0x787af909, 0x57cd4633, 0x2715877d, 0x08a23847, 0xbfd8e186, 0x906f5ebc, 0xe0b79ff2, 0xcf0020c8, 0x01061d6e, 0x2eb1a254, 0x5e69631a, 0x71dedc20, 0x345dcd2f, 0x1bea7215, 0x6b32b35b, 0x44850c61, 0x8a8331c7, 0xa5348efd, 0xd5ec4fb3, 0xfa5bf089, 0x4d212948, 0x62969672, 0x124e573c, 0x3df9e806, 0xf3ffd5a0, 0xdc486a9a, 0xac90abd4, 0x832714ee, 0x279689ca, 0x082136f0, 0x78f9f7be, 0x574e4884, 0x99487522, 0xb6ffca18, 0xc6270b56, 0xe990b46c, 0x5eea6dad, 0x715dd297, 0x018513d9, 0x2e32ace3, 0xe0349145, 0xcf832e7f, 0xbf5bef31, 0x90ec500b, 0xd56f4104, 0xfad8fe3e, 0x8a003f70, 0xa5b7804a, 0x6bb1bdec, 0x440602d6, 0x34dec398, 0x1b697ca2, 0xac13a563, 0x83a41a59, 0xf37cdb17, 0xdccb642d, 0x12cd598b, 0x3d7ae6b1, 0x4da227ff, 0x621598c5, 0x89891675, 0xa63ea94f, 0xd6e66801, 0xf951d73b, 0x3757ea9d, 0x18e055a7, 0x683894e9, 0x478f2bd3, 0xf0f5f212, 0xdf424d28, 0xaf9a8c66, 0x802d335c, 0x4e2b0efa, 0x619cb1c0, 0x1144708e, 0x3ef3cfb4, 0x7b70debb, 0x54c76181, 0x241fa0cf, 0x0ba81ff5, 0xc5ae2253, 0xea199d69, 0x9ac15c27, 0xb576e31d, 0x020c3adc, 0x2dbb85e6, 0x5d6344a8, 0x72d4fb92, 0xbcd2c634, 0x9365790e, 0xe3bdb840, 0xcc0a077a, 0x68bb9a5e, 0x470c2564, 0x37d4e42a, 0x18635b10, 0xd66566b6, 0xf9d2d98c, 0x890a18c2, 0xa6bda7f8, 0x11c77e39, 0x3e70c103, 0x4ea8004d, 0x611fbf77, 0xaf1982d1, 0x80ae3deb, 0xf076fca5, 0xdfc1439f, 0x9a425290, 0xb5f5edaa, 0xc52d2ce4, 0xea9a93de, 0x249cae78, 0x0b2b1142, 0x7bf3d00c, 0x54446f36, 0xe33eb6f7, 0xcc8909cd, 0xbc51c883, 0x93e677b9, 0x5de04a1f, 0x7257f525, 0x028f346b, 0x2d388b51, 0x4f2d1394, 0x609aacae, 0x10426de0, 0x3ff5d2da, 0xf1f3ef7c, 0xde445046, 0xae9c9108, 0x812b2e32, 0x3651f7f3, 0x19e648c9, 0x693e8987, 0x468936bd, 0x888f0b1b, 0xa738b421, 0xd7e0756f, 0xf857ca55, 0xbdd4db5a, 0x92636460, 0xe2bba52e, 0xcd0c1a14, 0x030a27b2, 0x2cbd9888, 0x5c6559c6, 0x73d2e6fc, 0xc4a83f3d, 0xeb1f8007, 0x9bc74149, 0xb470fe73, 0x7a76c3d5, 0x55c17cef, 0x2519bda1, 0x0aae029b, 0xae1f9fbf, 0x81a82085, 0xf170e1cb, 0xdec75ef1, 0x10c16357, 0x3f76dc6d, 0x4fae1d23, 0x6019a219, 0xd7637bd8, 0xf8d4c4e2, 0x880c05ac, 0xa7bbba96, 0x69bd8730, 0x460a380a, 0x36d2f944, 0x1965467e, 0x5ce65771, 0x7351e84b, 0x03892905, 0x2c3e963f, 0xe238ab99, 0xcd8f14a3, 0xbd57d5ed, 0x92e06ad7, 0x259ab316, 0x0a2d0c2c, 0x7af5cd62, 0x55427258, 0x9b444ffe, 0xb4f3f0c4, 0xc42b318a, 0xeb9c8eb0, ], ]; pub static CRC32_ISCSI_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, 0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384, 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, 0x580f5512, 0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a, 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, 0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957, 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, 0xfe53516f, 0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, 0x2997011f, 0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789, 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, 0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6, 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de, 0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6, 0x502036a5, 0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d, 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975, 0x0e330a81, 0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, 0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, 0x21b862a8, 0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f, 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, 0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e, 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69, 0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351, ], [ 0x00000000, 0x13a29877, 0x274530ee, 0x34e7a899, 0x4e8a61dc, 0x5d28f9ab, 0x69cf5132, 0x7a6dc945, 0x9d14c3b8, 0x8eb65bcf, 0xba51f356, 0xa9f36b21, 0xd39ea264, 0xc03c3a13, 0xf4db928a, 0xe7790afd, 0x3fc5f181, 0x2c6769f6, 0x1880c16f, 0x0b225918, 0x714f905d, 0x62ed082a, 0x560aa0b3, 0x45a838c4, 0xa2d13239, 0xb173aa4e, 0x859402d7, 0x96369aa0, 0xec5b53e5, 0xfff9cb92, 0xcb1e630b, 0xd8bcfb7c, 0x7f8be302, 0x6c297b75, 0x58ced3ec, 0x4b6c4b9b, 0x310182de, 0x22a31aa9, 0x1644b230, 0x05e62a47, 0xe29f20ba, 0xf13db8cd, 0xc5da1054, 0xd6788823, 0xac154166, 0xbfb7d911, 0x8b507188, 0x98f2e9ff, 0x404e1283, 0x53ec8af4, 0x670b226d, 0x74a9ba1a, 0x0ec4735f, 0x1d66eb28, 0x298143b1, 0x3a23dbc6, 0xdd5ad13b, 0xcef8494c, 0xfa1fe1d5, 0xe9bd79a2, 0x93d0b0e7, 0x80722890, 0xb4958009, 0xa737187e, 0xff17c604, 0xecb55e73, 0xd852f6ea, 0xcbf06e9d, 0xb19da7d8, 0xa23f3faf, 0x96d89736, 0x857a0f41, 0x620305bc, 0x71a19dcb, 0x45463552, 0x56e4ad25, 0x2c896460, 0x3f2bfc17, 0x0bcc548e, 0x186eccf9, 0xc0d23785, 0xd370aff2, 0xe797076b, 0xf4359f1c, 0x8e585659, 0x9dface2e, 0xa91d66b7, 0xbabffec0, 0x5dc6f43d, 0x4e646c4a, 0x7a83c4d3, 0x69215ca4, 0x134c95e1, 0x00ee0d96, 0x3409a50f, 0x27ab3d78, 0x809c2506, 0x933ebd71, 0xa7d915e8, 0xb47b8d9f, 0xce1644da, 0xddb4dcad, 0xe9537434, 0xfaf1ec43, 0x1d88e6be, 0x0e2a7ec9, 0x3acdd650, 0x296f4e27, 0x53028762, 0x40a01f15, 0x7447b78c, 0x67e52ffb, 0xbf59d487, 0xacfb4cf0, 0x981ce469, 0x8bbe7c1e, 0xf1d3b55b, 0xe2712d2c, 0xd69685b5, 0xc5341dc2, 0x224d173f, 0x31ef8f48, 0x050827d1, 0x16aabfa6, 0x6cc776e3, 0x7f65ee94, 0x4b82460d, 0x5820de7a, 0xfbc3faf9, 0xe861628e, 0xdc86ca17, 0xcf245260, 0xb5499b25, 0xa6eb0352, 0x920cabcb, 0x81ae33bc, 0x66d73941, 0x7575a136, 0x419209af, 0x523091d8, 0x285d589d, 0x3bffc0ea, 0x0f186873, 0x1cbaf004, 0xc4060b78, 0xd7a4930f, 0xe3433b96, 0xf0e1a3e1, 0x8a8c6aa4, 0x992ef2d3, 0xadc95a4a, 0xbe6bc23d, 0x5912c8c0, 0x4ab050b7, 0x7e57f82e, 0x6df56059, 0x1798a91c, 0x043a316b, 0x30dd99f2, 0x237f0185, 0x844819fb, 0x97ea818c, 0xa30d2915, 0xb0afb162, 0xcac27827, 0xd960e050, 0xed8748c9, 0xfe25d0be, 0x195cda43, 0x0afe4234, 0x3e19eaad, 0x2dbb72da, 0x57d6bb9f, 0x447423e8, 0x70938b71, 0x63311306, 0xbb8de87a, 0xa82f700d, 0x9cc8d894, 0x8f6a40e3, 0xf50789a6, 0xe6a511d1, 0xd242b948, 0xc1e0213f, 0x26992bc2, 0x353bb3b5, 0x01dc1b2c, 0x127e835b, 0x68134a1e, 0x7bb1d269, 0x4f567af0, 0x5cf4e287, 0x04d43cfd, 0x1776a48a, 0x23910c13, 0x30339464, 0x4a5e5d21, 0x59fcc556, 0x6d1b6dcf, 0x7eb9f5b8, 0x99c0ff45, 0x8a626732, 0xbe85cfab, 0xad2757dc, 0xd74a9e99, 0xc4e806ee, 0xf00fae77, 0xe3ad3600, 0x3b11cd7c, 0x28b3550b, 0x1c54fd92, 0x0ff665e5, 0x759baca0, 0x663934d7, 0x52de9c4e, 0x417c0439, 0xa6050ec4, 0xb5a796b3, 0x81403e2a, 0x92e2a65d, 0xe88f6f18, 0xfb2df76f, 0xcfca5ff6, 0xdc68c781, 0x7b5fdfff, 0x68fd4788, 0x5c1aef11, 0x4fb87766, 0x35d5be23, 0x26772654, 0x12908ecd, 0x013216ba, 0xe64b1c47, 0xf5e98430, 0xc10e2ca9, 0xd2acb4de, 0xa8c17d9b, 0xbb63e5ec, 0x8f844d75, 0x9c26d502, 0x449a2e7e, 0x5738b609, 0x63df1e90, 0x707d86e7, 0x0a104fa2, 0x19b2d7d5, 0x2d557f4c, 0x3ef7e73b, 0xd98eedc6, 0xca2c75b1, 0xfecbdd28, 0xed69455f, 0x97048c1a, 0x84a6146d, 0xb041bcf4, 0xa3e32483, ], [ 0x00000000, 0xa541927e, 0x4f6f520d, 0xea2ec073, 0x9edea41a, 0x3b9f3664, 0xd1b1f617, 0x74f06469, 0x38513ec5, 0x9d10acbb, 0x773e6cc8, 0xd27ffeb6, 0xa68f9adf, 0x03ce08a1, 0xe9e0c8d2, 0x4ca15aac, 0x70a27d8a, 0xd5e3eff4, 0x3fcd2f87, 0x9a8cbdf9, 0xee7cd990, 0x4b3d4bee, 0xa1138b9d, 0x045219e3, 0x48f3434f, 0xedb2d131, 0x079c1142, 0xa2dd833c, 0xd62de755, 0x736c752b, 0x9942b558, 0x3c032726, 0xe144fb14, 0x4405696a, 0xae2ba919, 0x0b6a3b67, 0x7f9a5f0e, 0xdadbcd70, 0x30f50d03, 0x95b49f7d, 0xd915c5d1, 0x7c5457af, 0x967a97dc, 0x333b05a2, 0x47cb61cb, 0xe28af3b5, 0x08a433c6, 0xade5a1b8, 0x91e6869e, 0x34a714e0, 0xde89d493, 0x7bc846ed, 0x0f382284, 0xaa79b0fa, 0x40577089, 0xe516e2f7, 0xa9b7b85b, 0x0cf62a25, 0xe6d8ea56, 0x43997828, 0x37691c41, 0x92288e3f, 0x78064e4c, 0xdd47dc32, 0xc76580d9, 0x622412a7, 0x880ad2d4, 0x2d4b40aa, 0x59bb24c3, 0xfcfab6bd, 0x16d476ce, 0xb395e4b0, 0xff34be1c, 0x5a752c62, 0xb05bec11, 0x151a7e6f, 0x61ea1a06, 0xc4ab8878, 0x2e85480b, 0x8bc4da75, 0xb7c7fd53, 0x12866f2d, 0xf8a8af5e, 0x5de93d20, 0x29195949, 0x8c58cb37, 0x66760b44, 0xc337993a, 0x8f96c396, 0x2ad751e8, 0xc0f9919b, 0x65b803e5, 0x1148678c, 0xb409f5f2, 0x5e273581, 0xfb66a7ff, 0x26217bcd, 0x8360e9b3, 0x694e29c0, 0xcc0fbbbe, 0xb8ffdfd7, 0x1dbe4da9, 0xf7908dda, 0x52d11fa4, 0x1e704508, 0xbb31d776, 0x511f1705, 0xf45e857b, 0x80aee112, 0x25ef736c, 0xcfc1b31f, 0x6a802161, 0x56830647, 0xf3c29439, 0x19ec544a, 0xbcadc634, 0xc85da25d, 0x6d1c3023, 0x8732f050, 0x2273622e, 0x6ed23882, 0xcb93aafc, 0x21bd6a8f, 0x84fcf8f1, 0xf00c9c98, 0x554d0ee6, 0xbf63ce95, 0x1a225ceb, 0x8b277743, 0x2e66e53d, 0xc448254e, 0x6109b730, 0x15f9d359, 0xb0b84127, 0x5a968154, 0xffd7132a, 0xb3764986, 0x1637dbf8, 0xfc191b8b, 0x595889f5, 0x2da8ed9c, 0x88e97fe2, 0x62c7bf91, 0xc7862def, 0xfb850ac9, 0x5ec498b7, 0xb4ea58c4, 0x11abcaba, 0x655baed3, 0xc01a3cad, 0x2a34fcde, 0x8f756ea0, 0xc3d4340c, 0x6695a672, 0x8cbb6601, 0x29faf47f, 0x5d0a9016, 0xf84b0268, 0x1265c21b, 0xb7245065, 0x6a638c57, 0xcf221e29, 0x250cde5a, 0x804d4c24, 0xf4bd284d, 0x51fcba33, 0xbbd27a40, 0x1e93e83e, 0x5232b292, 0xf77320ec, 0x1d5de09f, 0xb81c72e1, 0xccec1688, 0x69ad84f6, 0x83834485, 0x26c2d6fb, 0x1ac1f1dd, 0xbf8063a3, 0x55aea3d0, 0xf0ef31ae, 0x841f55c7, 0x215ec7b9, 0xcb7007ca, 0x6e3195b4, 0x2290cf18, 0x87d15d66, 0x6dff9d15, 0xc8be0f6b, 0xbc4e6b02, 0x190ff97c, 0xf321390f, 0x5660ab71, 0x4c42f79a, 0xe90365e4, 0x032da597, 0xa66c37e9, 0xd29c5380, 0x77ddc1fe, 0x9df3018d, 0x38b293f3, 0x7413c95f, 0xd1525b21, 0x3b7c9b52, 0x9e3d092c, 0xeacd6d45, 0x4f8cff3b, 0xa5a23f48, 0x00e3ad36, 0x3ce08a10, 0x99a1186e, 0x738fd81d, 0xd6ce4a63, 0xa23e2e0a, 0x077fbc74, 0xed517c07, 0x4810ee79, 0x04b1b4d5, 0xa1f026ab, 0x4bdee6d8, 0xee9f74a6, 0x9a6f10cf, 0x3f2e82b1, 0xd50042c2, 0x7041d0bc, 0xad060c8e, 0x08479ef0, 0xe2695e83, 0x4728ccfd, 0x33d8a894, 0x96993aea, 0x7cb7fa99, 0xd9f668e7, 0x9557324b, 0x3016a035, 0xda386046, 0x7f79f238, 0x0b899651, 0xaec8042f, 0x44e6c45c, 0xe1a75622, 0xdda47104, 0x78e5e37a, 0x92cb2309, 0x378ab177, 0x437ad51e, 0xe63b4760, 0x0c158713, 0xa954156d, 0xe5f54fc1, 0x40b4ddbf, 0xaa9a1dcc, 0x0fdb8fb2, 0x7b2bebdb, 0xde6a79a5, 0x3444b9d6, 0x91052ba8, ], [ 0x00000000, 0xdd45aab8, 0xbf672381, 0x62228939, 0x7b2231f3, 0xa6679b4b, 0xc4451272, 0x1900b8ca, 0xf64463e6, 0x2b01c95e, 0x49234067, 0x9466eadf, 0x8d665215, 0x5023f8ad, 0x32017194, 0xef44db2c, 0xe964b13d, 0x34211b85, 0x560392bc, 0x8b463804, 0x924680ce, 0x4f032a76, 0x2d21a34f, 0xf06409f7, 0x1f20d2db, 0xc2657863, 0xa047f15a, 0x7d025be2, 0x6402e328, 0xb9474990, 0xdb65c0a9, 0x06206a11, 0xd725148b, 0x0a60be33, 0x6842370a, 0xb5079db2, 0xac072578, 0x71428fc0, 0x136006f9, 0xce25ac41, 0x2161776d, 0xfc24ddd5, 0x9e0654ec, 0x4343fe54, 0x5a43469e, 0x8706ec26, 0xe524651f, 0x3861cfa7, 0x3e41a5b6, 0xe3040f0e, 0x81268637, 0x5c632c8f, 0x45639445, 0x98263efd, 0xfa04b7c4, 0x27411d7c, 0xc805c650, 0x15406ce8, 0x7762e5d1, 0xaa274f69, 0xb327f7a3, 0x6e625d1b, 0x0c40d422, 0xd1057e9a, 0xaba65fe7, 0x76e3f55f, 0x14c17c66, 0xc984d6de, 0xd0846e14, 0x0dc1c4ac, 0x6fe34d95, 0xb2a6e72d, 0x5de23c01, 0x80a796b9, 0xe2851f80, 0x3fc0b538, 0x26c00df2, 0xfb85a74a, 0x99a72e73, 0x44e284cb, 0x42c2eeda, 0x9f874462, 0xfda5cd5b, 0x20e067e3, 0x39e0df29, 0xe4a57591, 0x8687fca8, 0x5bc25610, 0xb4868d3c, 0x69c32784, 0x0be1aebd, 0xd6a40405, 0xcfa4bccf, 0x12e11677, 0x70c39f4e, 0xad8635f6, 0x7c834b6c, 0xa1c6e1d4, 0xc3e468ed, 0x1ea1c255, 0x07a17a9f, 0xdae4d027, 0xb8c6591e, 0x6583f3a6, 0x8ac7288a, 0x57828232, 0x35a00b0b, 0xe8e5a1b3, 0xf1e51979, 0x2ca0b3c1, 0x4e823af8, 0x93c79040, 0x95e7fa51, 0x48a250e9, 0x2a80d9d0, 0xf7c57368, 0xeec5cba2, 0x3380611a, 0x51a2e823, 0x8ce7429b, 0x63a399b7, 0xbee6330f, 0xdcc4ba36, 0x0181108e, 0x1881a844, 0xc5c402fc, 0xa7e68bc5, 0x7aa3217d, 0x52a0c93f, 0x8fe56387, 0xedc7eabe, 0x30824006, 0x2982f8cc, 0xf4c75274, 0x96e5db4d, 0x4ba071f5, 0xa4e4aad9, 0x79a10061, 0x1b838958, 0xc6c623e0, 0xdfc69b2a, 0x02833192, 0x60a1b8ab, 0xbde41213, 0xbbc47802, 0x6681d2ba, 0x04a35b83, 0xd9e6f13b, 0xc0e649f1, 0x1da3e349, 0x7f816a70, 0xa2c4c0c8, 0x4d801be4, 0x90c5b15c, 0xf2e73865, 0x2fa292dd, 0x36a22a17, 0xebe780af, 0x89c50996, 0x5480a32e, 0x8585ddb4, 0x58c0770c, 0x3ae2fe35, 0xe7a7548d, 0xfea7ec47, 0x23e246ff, 0x41c0cfc6, 0x9c85657e, 0x73c1be52, 0xae8414ea, 0xcca69dd3, 0x11e3376b, 0x08e38fa1, 0xd5a62519, 0xb784ac20, 0x6ac10698, 0x6ce16c89, 0xb1a4c631, 0xd3864f08, 0x0ec3e5b0, 0x17c35d7a, 0xca86f7c2, 0xa8a47efb, 0x75e1d443, 0x9aa50f6f, 0x47e0a5d7, 0x25c22cee, 0xf8878656, 0xe1873e9c, 0x3cc29424, 0x5ee01d1d, 0x83a5b7a5, 0xf90696d8, 0x24433c60, 0x4661b559, 0x9b241fe1, 0x8224a72b, 0x5f610d93, 0x3d4384aa, 0xe0062e12, 0x0f42f53e, 0xd2075f86, 0xb025d6bf, 0x6d607c07, 0x7460c4cd, 0xa9256e75, 0xcb07e74c, 0x16424df4, 0x106227e5, 0xcd278d5d, 0xaf050464, 0x7240aedc, 0x6b401616, 0xb605bcae, 0xd4273597, 0x09629f2f, 0xe6264403, 0x3b63eebb, 0x59416782, 0x8404cd3a, 0x9d0475f0, 0x4041df48, 0x22635671, 0xff26fcc9, 0x2e238253, 0xf36628eb, 0x9144a1d2, 0x4c010b6a, 0x5501b3a0, 0x88441918, 0xea669021, 0x37233a99, 0xd867e1b5, 0x05224b0d, 0x6700c234, 0xba45688c, 0xa345d046, 0x7e007afe, 0x1c22f3c7, 0xc167597f, 0xc747336e, 0x1a0299d6, 0x782010ef, 0xa565ba57, 0xbc65029d, 0x6120a825, 0x0302211c, 0xde478ba4, 0x31035088, 0xec46fa30, 0x8e647309, 0x5321d9b1, 0x4a21617b, 0x9764cbc3, 0xf54642fa, 0x2803e842, ], [ 0x00000000, 0x38116fac, 0x7022df58, 0x4833b0f4, 0xe045beb0, 0xd854d11c, 0x906761e8, 0xa8760e44, 0xc5670b91, 0xfd76643d, 0xb545d4c9, 0x8d54bb65, 0x2522b521, 0x1d33da8d, 0x55006a79, 0x6d1105d5, 0x8f2261d3, 0xb7330e7f, 0xff00be8b, 0xc711d127, 0x6f67df63, 0x5776b0cf, 0x1f45003b, 0x27546f97, 0x4a456a42, 0x725405ee, 0x3a67b51a, 0x0276dab6, 0xaa00d4f2, 0x9211bb5e, 0xda220baa, 0xe2336406, 0x1ba8b557, 0x23b9dafb, 0x6b8a6a0f, 0x539b05a3, 0xfbed0be7, 0xc3fc644b, 0x8bcfd4bf, 0xb3debb13, 0xdecfbec6, 0xe6ded16a, 0xaeed619e, 0x96fc0e32, 0x3e8a0076, 0x069b6fda, 0x4ea8df2e, 0x76b9b082, 0x948ad484, 0xac9bbb28, 0xe4a80bdc, 0xdcb96470, 0x74cf6a34, 0x4cde0598, 0x04edb56c, 0x3cfcdac0, 0x51eddf15, 0x69fcb0b9, 0x21cf004d, 0x19de6fe1, 0xb1a861a5, 0x89b90e09, 0xc18abefd, 0xf99bd151, 0x37516aae, 0x0f400502, 0x4773b5f6, 0x7f62da5a, 0xd714d41e, 0xef05bbb2, 0xa7360b46, 0x9f2764ea, 0xf236613f, 0xca270e93, 0x8214be67, 0xba05d1cb, 0x1273df8f, 0x2a62b023, 0x625100d7, 0x5a406f7b, 0xb8730b7d, 0x806264d1, 0xc851d425, 0xf040bb89, 0x5836b5cd, 0x6027da61, 0x28146a95, 0x10050539, 0x7d1400ec, 0x45056f40, 0x0d36dfb4, 0x3527b018, 0x9d51be5c, 0xa540d1f0, 0xed736104, 0xd5620ea8, 0x2cf9dff9, 0x14e8b055, 0x5cdb00a1, 0x64ca6f0d, 0xccbc6149, 0xf4ad0ee5, 0xbc9ebe11, 0x848fd1bd, 0xe99ed468, 0xd18fbbc4, 0x99bc0b30, 0xa1ad649c, 0x09db6ad8, 0x31ca0574, 0x79f9b580, 0x41e8da2c, 0xa3dbbe2a, 0x9bcad186, 0xd3f96172, 0xebe80ede, 0x439e009a, 0x7b8f6f36, 0x33bcdfc2, 0x0badb06e, 0x66bcb5bb, 0x5eadda17, 0x169e6ae3, 0x2e8f054f, 0x86f90b0b, 0xbee864a7, 0xf6dbd453, 0xcecabbff, 0x6ea2d55c, 0x56b3baf0, 0x1e800a04, 0x269165a8, 0x8ee76bec, 0xb6f60440, 0xfec5b4b4, 0xc6d4db18, 0xabc5decd, 0x93d4b161, 0xdbe70195, 0xe3f66e39, 0x4b80607d, 0x73910fd1, 0x3ba2bf25, 0x03b3d089, 0xe180b48f, 0xd991db23, 0x91a26bd7, 0xa9b3047b, 0x01c50a3f, 0x39d46593, 0x71e7d567, 0x49f6bacb, 0x24e7bf1e, 0x1cf6d0b2, 0x54c56046, 0x6cd40fea, 0xc4a201ae, 0xfcb36e02, 0xb480def6, 0x8c91b15a, 0x750a600b, 0x4d1b0fa7, 0x0528bf53, 0x3d39d0ff, 0x954fdebb, 0xad5eb117, 0xe56d01e3, 0xdd7c6e4f, 0xb06d6b9a, 0x887c0436, 0xc04fb4c2, 0xf85edb6e, 0x5028d52a, 0x6839ba86, 0x200a0a72, 0x181b65de, 0xfa2801d8, 0xc2396e74, 0x8a0ade80, 0xb21bb12c, 0x1a6dbf68, 0x227cd0c4, 0x6a4f6030, 0x525e0f9c, 0x3f4f0a49, 0x075e65e5, 0x4f6dd511, 0x777cbabd, 0xdf0ab4f9, 0xe71bdb55, 0xaf286ba1, 0x9739040d, 0x59f3bff2, 0x61e2d05e, 0x29d160aa, 0x11c00f06, 0xb9b60142, 0x81a76eee, 0xc994de1a, 0xf185b1b6, 0x9c94b463, 0xa485dbcf, 0xecb66b3b, 0xd4a70497, 0x7cd10ad3, 0x44c0657f, 0x0cf3d58b, 0x34e2ba27, 0xd6d1de21, 0xeec0b18d, 0xa6f30179, 0x9ee26ed5, 0x36946091, 0x0e850f3d, 0x46b6bfc9, 0x7ea7d065, 0x13b6d5b0, 0x2ba7ba1c, 0x63940ae8, 0x5b856544, 0xf3f36b00, 0xcbe204ac, 0x83d1b458, 0xbbc0dbf4, 0x425b0aa5, 0x7a4a6509, 0x3279d5fd, 0x0a68ba51, 0xa21eb415, 0x9a0fdbb9, 0xd23c6b4d, 0xea2d04e1, 0x873c0134, 0xbf2d6e98, 0xf71ede6c, 0xcf0fb1c0, 0x6779bf84, 0x5f68d028, 0x175b60dc, 0x2f4a0f70, 0xcd796b76, 0xf56804da, 0xbd5bb42e, 0x854adb82, 0x2d3cd5c6, 0x152dba6a, 0x5d1e0a9e, 0x650f6532, 0x081e60e7, 0x300f0f4b, 0x783cbfbf, 0x402dd013, 0xe85bde57, 0xd04ab1fb, 0x9879010f, 0xa0686ea3, ], [ 0x00000000, 0xef306b19, 0xdb8ca0c3, 0x34bccbda, 0xb2f53777, 0x5dc55c6e, 0x697997b4, 0x8649fcad, 0x6006181f, 0x8f367306, 0xbb8ab8dc, 0x54bad3c5, 0xd2f32f68, 0x3dc34471, 0x097f8fab, 0xe64fe4b2, 0xc00c303e, 0x2f3c5b27, 0x1b8090fd, 0xf4b0fbe4, 0x72f90749, 0x9dc96c50, 0xa975a78a, 0x4645cc93, 0xa00a2821, 0x4f3a4338, 0x7b8688e2, 0x94b6e3fb, 0x12ff1f56, 0xfdcf744f, 0xc973bf95, 0x2643d48c, 0x85f4168d, 0x6ac47d94, 0x5e78b64e, 0xb148dd57, 0x370121fa, 0xd8314ae3, 0xec8d8139, 0x03bdea20, 0xe5f20e92, 0x0ac2658b, 0x3e7eae51, 0xd14ec548, 0x570739e5, 0xb83752fc, 0x8c8b9926, 0x63bbf23f, 0x45f826b3, 0xaac84daa, 0x9e748670, 0x7144ed69, 0xf70d11c4, 0x183d7add, 0x2c81b107, 0xc3b1da1e, 0x25fe3eac, 0xcace55b5, 0xfe729e6f, 0x1142f576, 0x970b09db, 0x783b62c2, 0x4c87a918, 0xa3b7c201, 0x0e045beb, 0xe13430f2, 0xd588fb28, 0x3ab89031, 0xbcf16c9c, 0x53c10785, 0x677dcc5f, 0x884da746, 0x6e0243f4, 0x813228ed, 0xb58ee337, 0x5abe882e, 0xdcf77483, 0x33c71f9a, 0x077bd440, 0xe84bbf59, 0xce086bd5, 0x213800cc, 0x1584cb16, 0xfab4a00f, 0x7cfd5ca2, 0x93cd37bb, 0xa771fc61, 0x48419778, 0xae0e73ca, 0x413e18d3, 0x7582d309, 0x9ab2b810, 0x1cfb44bd, 0xf3cb2fa4, 0xc777e47e, 0x28478f67, 0x8bf04d66, 0x64c0267f, 0x507ceda5, 0xbf4c86bc, 0x39057a11, 0xd6351108, 0xe289dad2, 0x0db9b1cb, 0xebf65579, 0x04c63e60, 0x307af5ba, 0xdf4a9ea3, 0x5903620e, 0xb6330917, 0x828fc2cd, 0x6dbfa9d4, 0x4bfc7d58, 0xa4cc1641, 0x9070dd9b, 0x7f40b682, 0xf9094a2f, 0x16392136, 0x2285eaec, 0xcdb581f5, 0x2bfa6547, 0xc4ca0e5e, 0xf076c584, 0x1f46ae9d, 0x990f5230, 0x763f3929, 0x4283f2f3, 0xadb399ea, 0x1c08b7d6, 0xf338dccf, 0xc7841715, 0x28b47c0c, 0xaefd80a1, 0x41cdebb8, 0x75712062, 0x9a414b7b, 0x7c0eafc9, 0x933ec4d0, 0xa7820f0a, 0x48b26413, 0xcefb98be, 0x21cbf3a7, 0x1577387d, 0xfa475364, 0xdc0487e8, 0x3334ecf1, 0x0788272b, 0xe8b84c32, 0x6ef1b09f, 0x81c1db86, 0xb57d105c, 0x5a4d7b45, 0xbc029ff7, 0x5332f4ee, 0x678e3f34, 0x88be542d, 0x0ef7a880, 0xe1c7c399, 0xd57b0843, 0x3a4b635a, 0x99fca15b, 0x76ccca42, 0x42700198, 0xad406a81, 0x2b09962c, 0xc439fd35, 0xf08536ef, 0x1fb55df6, 0xf9fab944, 0x16cad25d, 0x22761987, 0xcd46729e, 0x4b0f8e33, 0xa43fe52a, 0x90832ef0, 0x7fb345e9, 0x59f09165, 0xb6c0fa7c, 0x827c31a6, 0x6d4c5abf, 0xeb05a612, 0x0435cd0b, 0x308906d1, 0xdfb96dc8, 0x39f6897a, 0xd6c6e263, 0xe27a29b9, 0x0d4a42a0, 0x8b03be0d, 0x6433d514, 0x508f1ece, 0xbfbf75d7, 0x120cec3d, 0xfd3c8724, 0xc9804cfe, 0x26b027e7, 0xa0f9db4a, 0x4fc9b053, 0x7b757b89, 0x94451090, 0x720af422, 0x9d3a9f3b, 0xa98654e1, 0x46b63ff8, 0xc0ffc355, 0x2fcfa84c, 0x1b736396, 0xf443088f, 0xd200dc03, 0x3d30b71a, 0x098c7cc0, 0xe6bc17d9, 0x60f5eb74, 0x8fc5806d, 0xbb794bb7, 0x544920ae, 0xb206c41c, 0x5d36af05, 0x698a64df, 0x86ba0fc6, 0x00f3f36b, 0xefc39872, 0xdb7f53a8, 0x344f38b1, 0x97f8fab0, 0x78c891a9, 0x4c745a73, 0xa344316a, 0x250dcdc7, 0xca3da6de, 0xfe816d04, 0x11b1061d, 0xf7fee2af, 0x18ce89b6, 0x2c72426c, 0xc3422975, 0x450bd5d8, 0xaa3bbec1, 0x9e87751b, 0x71b71e02, 0x57f4ca8e, 0xb8c4a197, 0x8c786a4d, 0x63480154, 0xe501fdf9, 0x0a3196e0, 0x3e8d5d3a, 0xd1bd3623, 0x37f2d291, 0xd8c2b988, 0xec7e7252, 0x034e194b, 0x8507e5e6, 0x6a378eff, 0x5e8b4525, 0xb1bb2e3c, ], [ 0x00000000, 0x68032cc8, 0xd0065990, 0xb8057558, 0xa5e0c5d1, 0xcde3e919, 0x75e69c41, 0x1de5b089, 0x4e2dfd53, 0x262ed19b, 0x9e2ba4c3, 0xf628880b, 0xebcd3882, 0x83ce144a, 0x3bcb6112, 0x53c84dda, 0x9c5bfaa6, 0xf458d66e, 0x4c5da336, 0x245e8ffe, 0x39bb3f77, 0x51b813bf, 0xe9bd66e7, 0x81be4a2f, 0xd27607f5, 0xba752b3d, 0x02705e65, 0x6a7372ad, 0x7796c224, 0x1f95eeec, 0xa7909bb4, 0xcf93b77c, 0x3d5b83bd, 0x5558af75, 0xed5dda2d, 0x855ef6e5, 0x98bb466c, 0xf0b86aa4, 0x48bd1ffc, 0x20be3334, 0x73767eee, 0x1b755226, 0xa370277e, 0xcb730bb6, 0xd696bb3f, 0xbe9597f7, 0x0690e2af, 0x6e93ce67, 0xa100791b, 0xc90355d3, 0x7106208b, 0x19050c43, 0x04e0bcca, 0x6ce39002, 0xd4e6e55a, 0xbce5c992, 0xef2d8448, 0x872ea880, 0x3f2bddd8, 0x5728f110, 0x4acd4199, 0x22ce6d51, 0x9acb1809, 0xf2c834c1, 0x7ab7077a, 0x12b42bb2, 0xaab15eea, 0xc2b27222, 0xdf57c2ab, 0xb754ee63, 0x0f519b3b, 0x6752b7f3, 0x349afa29, 0x5c99d6e1, 0xe49ca3b9, 0x8c9f8f71, 0x917a3ff8, 0xf9791330, 0x417c6668, 0x297f4aa0, 0xe6ecfddc, 0x8eefd114, 0x36eaa44c, 0x5ee98884, 0x430c380d, 0x2b0f14c5, 0x930a619d, 0xfb094d55, 0xa8c1008f, 0xc0c22c47, 0x78c7591f, 0x10c475d7, 0x0d21c55e, 0x6522e996, 0xdd279cce, 0xb524b006, 0x47ec84c7, 0x2fefa80f, 0x97eadd57, 0xffe9f19f, 0xe20c4116, 0x8a0f6dde, 0x320a1886, 0x5a09344e, 0x09c17994, 0x61c2555c, 0xd9c72004, 0xb1c40ccc, 0xac21bc45, 0xc422908d, 0x7c27e5d5, 0x1424c91d, 0xdbb77e61, 0xb3b452a9, 0x0bb127f1, 0x63b20b39, 0x7e57bbb0, 0x16549778, 0xae51e220, 0xc652cee8, 0x959a8332, 0xfd99affa, 0x459cdaa2, 0x2d9ff66a, 0x307a46e3, 0x58796a2b, 0xe07c1f73, 0x887f33bb, 0xf56e0ef4, 0x9d6d223c, 0x25685764, 0x4d6b7bac, 0x508ecb25, 0x388de7ed, 0x808892b5, 0xe88bbe7d, 0xbb43f3a7, 0xd340df6f, 0x6b45aa37, 0x034686ff, 0x1ea33676, 0x76a01abe, 0xcea56fe6, 0xa6a6432e, 0x6935f452, 0x0136d89a, 0xb933adc2, 0xd130810a, 0xccd53183, 0xa4d61d4b, 0x1cd36813, 0x74d044db, 0x27180901, 0x4f1b25c9, 0xf71e5091, 0x9f1d7c59, 0x82f8ccd0, 0xeafbe018, 0x52fe9540, 0x3afdb988, 0xc8358d49, 0xa036a181, 0x1833d4d9, 0x7030f811, 0x6dd54898, 0x05d66450, 0xbdd31108, 0xd5d03dc0, 0x8618701a, 0xee1b5cd2, 0x561e298a, 0x3e1d0542, 0x23f8b5cb, 0x4bfb9903, 0xf3feec5b, 0x9bfdc093, 0x546e77ef, 0x3c6d5b27, 0x84682e7f, 0xec6b02b7, 0xf18eb23e, 0x998d9ef6, 0x2188ebae, 0x498bc766, 0x1a438abc, 0x7240a674, 0xca45d32c, 0xa246ffe4, 0xbfa34f6d, 0xd7a063a5, 0x6fa516fd, 0x07a63a35, 0x8fd9098e, 0xe7da2546, 0x5fdf501e, 0x37dc7cd6, 0x2a39cc5f, 0x423ae097, 0xfa3f95cf, 0x923cb907, 0xc1f4f4dd, 0xa9f7d815, 0x11f2ad4d, 0x79f18185, 0x6414310c, 0x0c171dc4, 0xb412689c, 0xdc114454, 0x1382f328, 0x7b81dfe0, 0xc384aab8, 0xab878670, 0xb66236f9, 0xde611a31, 0x66646f69, 0x0e6743a1, 0x5daf0e7b, 0x35ac22b3, 0x8da957eb, 0xe5aa7b23, 0xf84fcbaa, 0x904ce762, 0x2849923a, 0x404abef2, 0xb2828a33, 0xda81a6fb, 0x6284d3a3, 0x0a87ff6b, 0x17624fe2, 0x7f61632a, 0xc7641672, 0xaf673aba, 0xfcaf7760, 0x94ac5ba8, 0x2ca92ef0, 0x44aa0238, 0x594fb2b1, 0x314c9e79, 0x8949eb21, 0xe14ac7e9, 0x2ed97095, 0x46da5c5d, 0xfedf2905, 0x96dc05cd, 0x8b39b544, 0xe33a998c, 0x5b3fecd4, 0x333cc01c, 0x60f48dc6, 0x08f7a10e, 0xb0f2d456, 0xd8f1f89e, 0xc5144817, 0xad1764df, 0x15121187, 0x7d113d4f, ], [ 0x00000000, 0x493c7d27, 0x9278fa4e, 0xdb448769, 0x211d826d, 0x6821ff4a, 0xb3657823, 0xfa590504, 0x423b04da, 0x0b0779fd, 0xd043fe94, 0x997f83b3, 0x632686b7, 0x2a1afb90, 0xf15e7cf9, 0xb86201de, 0x847609b4, 0xcd4a7493, 0x160ef3fa, 0x5f328edd, 0xa56b8bd9, 0xec57f6fe, 0x37137197, 0x7e2f0cb0, 0xc64d0d6e, 0x8f717049, 0x5435f720, 0x1d098a07, 0xe7508f03, 0xae6cf224, 0x7528754d, 0x3c14086a, 0x0d006599, 0x443c18be, 0x9f789fd7, 0xd644e2f0, 0x2c1de7f4, 0x65219ad3, 0xbe651dba, 0xf759609d, 0x4f3b6143, 0x06071c64, 0xdd439b0d, 0x947fe62a, 0x6e26e32e, 0x271a9e09, 0xfc5e1960, 0xb5626447, 0x89766c2d, 0xc04a110a, 0x1b0e9663, 0x5232eb44, 0xa86bee40, 0xe1579367, 0x3a13140e, 0x732f6929, 0xcb4d68f7, 0x827115d0, 0x593592b9, 0x1009ef9e, 0xea50ea9a, 0xa36c97bd, 0x782810d4, 0x31146df3, 0x1a00cb32, 0x533cb615, 0x8878317c, 0xc1444c5b, 0x3b1d495f, 0x72213478, 0xa965b311, 0xe059ce36, 0x583bcfe8, 0x1107b2cf, 0xca4335a6, 0x837f4881, 0x79264d85, 0x301a30a2, 0xeb5eb7cb, 0xa262caec, 0x9e76c286, 0xd74abfa1, 0x0c0e38c8, 0x453245ef, 0xbf6b40eb, 0xf6573dcc, 0x2d13baa5, 0x642fc782, 0xdc4dc65c, 0x9571bb7b, 0x4e353c12, 0x07094135, 0xfd504431, 0xb46c3916, 0x6f28be7f, 0x2614c358, 0x1700aeab, 0x5e3cd38c, 0x857854e5, 0xcc4429c2, 0x361d2cc6, 0x7f2151e1, 0xa465d688, 0xed59abaf, 0x553baa71, 0x1c07d756, 0xc743503f, 0x8e7f2d18, 0x7426281c, 0x3d1a553b, 0xe65ed252, 0xaf62af75, 0x9376a71f, 0xda4ada38, 0x010e5d51, 0x48322076, 0xb26b2572, 0xfb575855, 0x2013df3c, 0x692fa21b, 0xd14da3c5, 0x9871dee2, 0x4335598b, 0x0a0924ac, 0xf05021a8, 0xb96c5c8f, 0x6228dbe6, 0x2b14a6c1, 0x34019664, 0x7d3deb43, 0xa6796c2a, 0xef45110d, 0x151c1409, 0x5c20692e, 0x8764ee47, 0xce589360, 0x763a92be, 0x3f06ef99, 0xe44268f0, 0xad7e15d7, 0x572710d3, 0x1e1b6df4, 0xc55fea9d, 0x8c6397ba, 0xb0779fd0, 0xf94be2f7, 0x220f659e, 0x6b3318b9, 0x916a1dbd, 0xd856609a, 0x0312e7f3, 0x4a2e9ad4, 0xf24c9b0a, 0xbb70e62d, 0x60346144, 0x29081c63, 0xd3511967, 0x9a6d6440, 0x4129e329, 0x08159e0e, 0x3901f3fd, 0x703d8eda, 0xab7909b3, 0xe2457494, 0x181c7190, 0x51200cb7, 0x8a648bde, 0xc358f6f9, 0x7b3af727, 0x32068a00, 0xe9420d69, 0xa07e704e, 0x5a27754a, 0x131b086d, 0xc85f8f04, 0x8163f223, 0xbd77fa49, 0xf44b876e, 0x2f0f0007, 0x66337d20, 0x9c6a7824, 0xd5560503, 0x0e12826a, 0x472eff4d, 0xff4cfe93, 0xb67083b4, 0x6d3404dd, 0x240879fa, 0xde517cfe, 0x976d01d9, 0x4c2986b0, 0x0515fb97, 0x2e015d56, 0x673d2071, 0xbc79a718, 0xf545da3f, 0x0f1cdf3b, 0x4620a21c, 0x9d642575, 0xd4585852, 0x6c3a598c, 0x250624ab, 0xfe42a3c2, 0xb77edee5, 0x4d27dbe1, 0x041ba6c6, 0xdf5f21af, 0x96635c88, 0xaa7754e2, 0xe34b29c5, 0x380faeac, 0x7133d38b, 0x8b6ad68f, 0xc256aba8, 0x19122cc1, 0x502e51e6, 0xe84c5038, 0xa1702d1f, 0x7a34aa76, 0x3308d751, 0xc951d255, 0x806daf72, 0x5b29281b, 0x1215553c, 0x230138cf, 0x6a3d45e8, 0xb179c281, 0xf845bfa6, 0x021cbaa2, 0x4b20c785, 0x906440ec, 0xd9583dcb, 0x613a3c15, 0x28064132, 0xf342c65b, 0xba7ebb7c, 0x4027be78, 0x091bc35f, 0xd25f4436, 0x9b633911, 0xa777317b, 0xee4b4c5c, 0x350fcb35, 0x7c33b612, 0x866ab316, 0xcf56ce31, 0x14124958, 0x5d2e347f, 0xe54c35a1, 0xac704886, 0x7734cfef, 0x3e08b2c8, 0xc451b7cc, 0x8d6dcaeb, 0x56294d82, 0x1f1530a5, ], [ 0x00000000, 0xf43ed648, 0xed91da61, 0x19af0c29, 0xdecfc233, 0x2af1147b, 0x335e1852, 0xc760ce1a, 0xb873f297, 0x4c4d24df, 0x55e228f6, 0xa1dcfebe, 0x66bc30a4, 0x9282e6ec, 0x8b2deac5, 0x7f133c8d, 0x750b93df, 0x81354597, 0x989a49be, 0x6ca49ff6, 0xabc451ec, 0x5ffa87a4, 0x46558b8d, 0xb26b5dc5, 0xcd786148, 0x3946b700, 0x20e9bb29, 0xd4d76d61, 0x13b7a37b, 0xe7897533, 0xfe26791a, 0x0a18af52, 0xea1727be, 0x1e29f1f6, 0x0786fddf, 0xf3b82b97, 0x34d8e58d, 0xc0e633c5, 0xd9493fec, 0x2d77e9a4, 0x5264d529, 0xa65a0361, 0xbff50f48, 0x4bcbd900, 0x8cab171a, 0x7895c152, 0x613acd7b, 0x95041b33, 0x9f1cb461, 0x6b226229, 0x728d6e00, 0x86b3b848, 0x41d37652, 0xb5eda01a, 0xac42ac33, 0x587c7a7b, 0x276f46f6, 0xd35190be, 0xcafe9c97, 0x3ec04adf, 0xf9a084c5, 0x0d9e528d, 0x14315ea4, 0xe00f88ec, 0xd1c2398d, 0x25fcefc5, 0x3c53e3ec, 0xc86d35a4, 0x0f0dfbbe, 0xfb332df6, 0xe29c21df, 0x16a2f797, 0x69b1cb1a, 0x9d8f1d52, 0x8420117b, 0x701ec733, 0xb77e0929, 0x4340df61, 0x5aefd348, 0xaed10500, 0xa4c9aa52, 0x50f77c1a, 0x49587033, 0xbd66a67b, 0x7a066861, 0x8e38be29, 0x9797b200, 0x63a96448, 0x1cba58c5, 0xe8848e8d, 0xf12b82a4, 0x051554ec, 0xc2759af6, 0x364b4cbe, 0x2fe44097, 0xdbda96df, 0x3bd51e33, 0xcfebc87b, 0xd644c452, 0x227a121a, 0xe51adc00, 0x11240a48, 0x088b0661, 0xfcb5d029, 0x83a6eca4, 0x77983aec, 0x6e3736c5, 0x9a09e08d, 0x5d692e97, 0xa957f8df, 0xb0f8f4f6, 0x44c622be, 0x4ede8dec, 0xbae05ba4, 0xa34f578d, 0x577181c5, 0x90114fdf, 0x642f9997, 0x7d8095be, 0x89be43f6, 0xf6ad7f7b, 0x0293a933, 0x1b3ca51a, 0xef027352, 0x2862bd48, 0xdc5c6b00, 0xc5f36729, 0x31cdb161, 0xa66805eb, 0x5256d3a3, 0x4bf9df8a, 0xbfc709c2, 0x78a7c7d8, 0x8c991190, 0x95361db9, 0x6108cbf1, 0x1e1bf77c, 0xea252134, 0xf38a2d1d, 0x07b4fb55, 0xc0d4354f, 0x34eae307, 0x2d45ef2e, 0xd97b3966, 0xd3639634, 0x275d407c, 0x3ef24c55, 0xcacc9a1d, 0x0dac5407, 0xf992824f, 0xe03d8e66, 0x1403582e, 0x6b1064a3, 0x9f2eb2eb, 0x8681bec2, 0x72bf688a, 0xb5dfa690, 0x41e170d8, 0x584e7cf1, 0xac70aab9, 0x4c7f2255, 0xb841f41d, 0xa1eef834, 0x55d02e7c, 0x92b0e066, 0x668e362e, 0x7f213a07, 0x8b1fec4f, 0xf40cd0c2, 0x0032068a, 0x199d0aa3, 0xeda3dceb, 0x2ac312f1, 0xdefdc4b9, 0xc752c890, 0x336c1ed8, 0x3974b18a, 0xcd4a67c2, 0xd4e56beb, 0x20dbbda3, 0xe7bb73b9, 0x1385a5f1, 0x0a2aa9d8, 0xfe147f90, 0x8107431d, 0x75399555, 0x6c96997c, 0x98a84f34, 0x5fc8812e, 0xabf65766, 0xb2595b4f, 0x46678d07, 0x77aa3c66, 0x8394ea2e, 0x9a3be607, 0x6e05304f, 0xa965fe55, 0x5d5b281d, 0x44f42434, 0xb0caf27c, 0xcfd9cef1, 0x3be718b9, 0x22481490, 0xd676c2d8, 0x11160cc2, 0xe528da8a, 0xfc87d6a3, 0x08b900eb, 0x02a1afb9, 0xf69f79f1, 0xef3075d8, 0x1b0ea390, 0xdc6e6d8a, 0x2850bbc2, 0x31ffb7eb, 0xc5c161a3, 0xbad25d2e, 0x4eec8b66, 0x5743874f, 0xa37d5107, 0x641d9f1d, 0x90234955, 0x898c457c, 0x7db29334, 0x9dbd1bd8, 0x6983cd90, 0x702cc1b9, 0x841217f1, 0x4372d9eb, 0xb74c0fa3, 0xaee3038a, 0x5addd5c2, 0x25cee94f, 0xd1f03f07, 0xc85f332e, 0x3c61e566, 0xfb012b7c, 0x0f3ffd34, 0x1690f11d, 0xe2ae2755, 0xe8b68807, 0x1c885e4f, 0x05275266, 0xf119842e, 0x36794a34, 0xc2479c7c, 0xdbe89055, 0x2fd6461d, 0x50c57a90, 0xa4fbacd8, 0xbd54a0f1, 0x496a76b9, 0x8e0ab8a3, 0x7a346eeb, 0x639b62c2, 0x97a5b48a, ], [ 0x00000000, 0xcb567ba5, 0x934081bb, 0x5816fa1e, 0x236d7587, 0xe83b0e22, 0xb02df43c, 0x7b7b8f99, 0x46daeb0e, 0x8d8c90ab, 0xd59a6ab5, 0x1ecc1110, 0x65b79e89, 0xaee1e52c, 0xf6f71f32, 0x3da16497, 0x8db5d61c, 0x46e3adb9, 0x1ef557a7, 0xd5a32c02, 0xaed8a39b, 0x658ed83e, 0x3d982220, 0xf6ce5985, 0xcb6f3d12, 0x003946b7, 0x582fbca9, 0x9379c70c, 0xe8024895, 0x23543330, 0x7b42c92e, 0xb014b28b, 0x1e87dac9, 0xd5d1a16c, 0x8dc75b72, 0x469120d7, 0x3deaaf4e, 0xf6bcd4eb, 0xaeaa2ef5, 0x65fc5550, 0x585d31c7, 0x930b4a62, 0xcb1db07c, 0x004bcbd9, 0x7b304440, 0xb0663fe5, 0xe870c5fb, 0x2326be5e, 0x93320cd5, 0x58647770, 0x00728d6e, 0xcb24f6cb, 0xb05f7952, 0x7b0902f7, 0x231ff8e9, 0xe849834c, 0xd5e8e7db, 0x1ebe9c7e, 0x46a86660, 0x8dfe1dc5, 0xf685925c, 0x3dd3e9f9, 0x65c513e7, 0xae936842, 0x3d0fb592, 0xf659ce37, 0xae4f3429, 0x65194f8c, 0x1e62c015, 0xd534bbb0, 0x8d2241ae, 0x46743a0b, 0x7bd55e9c, 0xb0832539, 0xe895df27, 0x23c3a482, 0x58b82b1b, 0x93ee50be, 0xcbf8aaa0, 0x00aed105, 0xb0ba638e, 0x7bec182b, 0x23fae235, 0xe8ac9990, 0x93d71609, 0x58816dac, 0x009797b2, 0xcbc1ec17, 0xf6608880, 0x3d36f325, 0x6520093b, 0xae76729e, 0xd50dfd07, 0x1e5b86a2, 0x464d7cbc, 0x8d1b0719, 0x23886f5b, 0xe8de14fe, 0xb0c8eee0, 0x7b9e9545, 0x00e51adc, 0xcbb36179, 0x93a59b67, 0x58f3e0c2, 0x65528455, 0xae04fff0, 0xf61205ee, 0x3d447e4b, 0x463ff1d2, 0x8d698a77, 0xd57f7069, 0x1e290bcc, 0xae3db947, 0x656bc2e2, 0x3d7d38fc, 0xf62b4359, 0x8d50ccc0, 0x4606b765, 0x1e104d7b, 0xd54636de, 0xe8e75249, 0x23b129ec, 0x7ba7d3f2, 0xb0f1a857, 0xcb8a27ce, 0x00dc5c6b, 0x58caa675, 0x939cddd0, 0x7a1f6b24, 0xb1491081, 0xe95fea9f, 0x2209913a, 0x59721ea3, 0x92246506, 0xca329f18, 0x0164e4bd, 0x3cc5802a, 0xf793fb8f, 0xaf850191, 0x64d37a34, 0x1fa8f5ad, 0xd4fe8e08, 0x8ce87416, 0x47be0fb3, 0xf7aabd38, 0x3cfcc69d, 0x64ea3c83, 0xafbc4726, 0xd4c7c8bf, 0x1f91b31a, 0x47874904, 0x8cd132a1, 0xb1705636, 0x7a262d93, 0x2230d78d, 0xe966ac28, 0x921d23b1, 0x594b5814, 0x015da20a, 0xca0bd9af, 0x6498b1ed, 0xafceca48, 0xf7d83056, 0x3c8e4bf3, 0x47f5c46a, 0x8ca3bfcf, 0xd4b545d1, 0x1fe33e74, 0x22425ae3, 0xe9142146, 0xb102db58, 0x7a54a0fd, 0x012f2f64, 0xca7954c1, 0x926faedf, 0x5939d57a, 0xe92d67f1, 0x227b1c54, 0x7a6de64a, 0xb13b9def, 0xca401276, 0x011669d3, 0x590093cd, 0x9256e868, 0xaff78cff, 0x64a1f75a, 0x3cb70d44, 0xf7e176e1, 0x8c9af978, 0x47cc82dd, 0x1fda78c3, 0xd48c0366, 0x4710deb6, 0x8c46a513, 0xd4505f0d, 0x1f0624a8, 0x647dab31, 0xaf2bd094, 0xf73d2a8a, 0x3c6b512f, 0x01ca35b8, 0xca9c4e1d, 0x928ab403, 0x59dccfa6, 0x22a7403f, 0xe9f13b9a, 0xb1e7c184, 0x7ab1ba21, 0xcaa508aa, 0x01f3730f, 0x59e58911, 0x92b3f2b4, 0xe9c87d2d, 0x229e0688, 0x7a88fc96, 0xb1de8733, 0x8c7fe3a4, 0x47299801, 0x1f3f621f, 0xd46919ba, 0xaf129623, 0x6444ed86, 0x3c521798, 0xf7046c3d, 0x5997047f, 0x92c17fda, 0xcad785c4, 0x0181fe61, 0x7afa71f8, 0xb1ac0a5d, 0xe9baf043, 0x22ec8be6, 0x1f4def71, 0xd41b94d4, 0x8c0d6eca, 0x475b156f, 0x3c209af6, 0xf776e153, 0xaf601b4d, 0x643660e8, 0xd422d263, 0x1f74a9c6, 0x476253d8, 0x8c34287d, 0xf74fa7e4, 0x3c19dc41, 0x640f265f, 0xaf595dfa, 0x92f8396d, 0x59ae42c8, 0x01b8b8d6, 0xcaeec373, 0xb1954cea, 0x7ac3374f, 0x22d5cd51, 0xe983b6f4, ], [ 0x00000000, 0x9771f7c1, 0x2b0f9973, 0xbc7e6eb2, 0x561f32e6, 0xc16ec527, 0x7d10ab95, 0xea615c54, 0xac3e65cc, 0x3b4f920d, 0x8731fcbf, 0x10400b7e, 0xfa21572a, 0x6d50a0eb, 0xd12ece59, 0x465f3998, 0x5d90bd69, 0xcae14aa8, 0x769f241a, 0xe1eed3db, 0x0b8f8f8f, 0x9cfe784e, 0x208016fc, 0xb7f1e13d, 0xf1aed8a5, 0x66df2f64, 0xdaa141d6, 0x4dd0b617, 0xa7b1ea43, 0x30c01d82, 0x8cbe7330, 0x1bcf84f1, 0xbb217ad2, 0x2c508d13, 0x902ee3a1, 0x075f1460, 0xed3e4834, 0x7a4fbff5, 0xc631d147, 0x51402686, 0x171f1f1e, 0x806ee8df, 0x3c10866d, 0xab6171ac, 0x41002df8, 0xd671da39, 0x6a0fb48b, 0xfd7e434a, 0xe6b1c7bb, 0x71c0307a, 0xcdbe5ec8, 0x5acfa909, 0xb0aef55d, 0x27df029c, 0x9ba16c2e, 0x0cd09bef, 0x4a8fa277, 0xddfe55b6, 0x61803b04, 0xf6f1ccc5, 0x1c909091, 0x8be16750, 0x379f09e2, 0xa0eefe23, 0x73ae8355, 0xe4df7494, 0x58a11a26, 0xcfd0ede7, 0x25b1b1b3, 0xb2c04672, 0x0ebe28c0, 0x99cfdf01, 0xdf90e699, 0x48e11158, 0xf49f7fea, 0x63ee882b, 0x898fd47f, 0x1efe23be, 0xa2804d0c, 0x35f1bacd, 0x2e3e3e3c, 0xb94fc9fd, 0x0531a74f, 0x9240508e, 0x78210cda, 0xef50fb1b, 0x532e95a9, 0xc45f6268, 0x82005bf0, 0x1571ac31, 0xa90fc283, 0x3e7e3542, 0xd41f6916, 0x436e9ed7, 0xff10f065, 0x686107a4, 0xc88ff987, 0x5ffe0e46, 0xe38060f4, 0x74f19735, 0x9e90cb61, 0x09e13ca0, 0xb59f5212, 0x22eea5d3, 0x64b19c4b, 0xf3c06b8a, 0x4fbe0538, 0xd8cff2f9, 0x32aeaead, 0xa5df596c, 0x19a137de, 0x8ed0c01f, 0x951f44ee, 0x026eb32f, 0xbe10dd9d, 0x29612a5c, 0xc3007608, 0x547181c9, 0xe80fef7b, 0x7f7e18ba, 0x39212122, 0xae50d6e3, 0x122eb851, 0x855f4f90, 0x6f3e13c4, 0xf84fe405, 0x44318ab7, 0xd3407d76, 0xe75d06aa, 0x702cf16b, 0xcc529fd9, 0x5b236818, 0xb142344c, 0x2633c38d, 0x9a4dad3f, 0x0d3c5afe, 0x4b636366, 0xdc1294a7, 0x606cfa15, 0xf71d0dd4, 0x1d7c5180, 0x8a0da641, 0x3673c8f3, 0xa1023f32, 0xbacdbbc3, 0x2dbc4c02, 0x91c222b0, 0x06b3d571, 0xecd28925, 0x7ba37ee4, 0xc7dd1056, 0x50ace797, 0x16f3de0f, 0x818229ce, 0x3dfc477c, 0xaa8db0bd, 0x40ecece9, 0xd79d1b28, 0x6be3759a, 0xfc92825b, 0x5c7c7c78, 0xcb0d8bb9, 0x7773e50b, 0xe00212ca, 0x0a634e9e, 0x9d12b95f, 0x216cd7ed, 0xb61d202c, 0xf04219b4, 0x6733ee75, 0xdb4d80c7, 0x4c3c7706, 0xa65d2b52, 0x312cdc93, 0x8d52b221, 0x1a2345e0, 0x01ecc111, 0x969d36d0, 0x2ae35862, 0xbd92afa3, 0x57f3f3f7, 0xc0820436, 0x7cfc6a84, 0xeb8d9d45, 0xadd2a4dd, 0x3aa3531c, 0x86dd3dae, 0x11acca6f, 0xfbcd963b, 0x6cbc61fa, 0xd0c20f48, 0x47b3f889, 0x94f385ff, 0x0382723e, 0xbffc1c8c, 0x288deb4d, 0xc2ecb719, 0x559d40d8, 0xe9e32e6a, 0x7e92d9ab, 0x38cde033, 0xafbc17f2, 0x13c27940, 0x84b38e81, 0x6ed2d2d5, 0xf9a32514, 0x45dd4ba6, 0xd2acbc67, 0xc9633896, 0x5e12cf57, 0xe26ca1e5, 0x751d5624, 0x9f7c0a70, 0x080dfdb1, 0xb4739303, 0x230264c2, 0x655d5d5a, 0xf22caa9b, 0x4e52c429, 0xd92333e8, 0x33426fbc, 0xa433987d, 0x184df6cf, 0x8f3c010e, 0x2fd2ff2d, 0xb8a308ec, 0x04dd665e, 0x93ac919f, 0x79cdcdcb, 0xeebc3a0a, 0x52c254b8, 0xc5b3a379, 0x83ec9ae1, 0x149d6d20, 0xa8e30392, 0x3f92f453, 0xd5f3a807, 0x42825fc6, 0xfefc3174, 0x698dc6b5, 0x72424244, 0xe533b585, 0x594ddb37, 0xce3c2cf6, 0x245d70a2, 0xb32c8763, 0x0f52e9d1, 0x98231e10, 0xde7c2788, 0x490dd049, 0xf573befb, 0x6202493a, 0x8863156e, 0x1f12e2af, 0xa36c8c1d, 0x341d7bdc, ], [ 0x00000000, 0x3171d430, 0x62e3a860, 0x53927c50, 0xc5c750c0, 0xf4b684f0, 0xa724f8a0, 0x96552c90, 0x8e62d771, 0xbf130341, 0xec817f11, 0xddf0ab21, 0x4ba587b1, 0x7ad45381, 0x29462fd1, 0x1837fbe1, 0x1929d813, 0x28580c23, 0x7bca7073, 0x4abba443, 0xdcee88d3, 0xed9f5ce3, 0xbe0d20b3, 0x8f7cf483, 0x974b0f62, 0xa63adb52, 0xf5a8a702, 0xc4d97332, 0x528c5fa2, 0x63fd8b92, 0x306ff7c2, 0x011e23f2, 0x3253b026, 0x03226416, 0x50b01846, 0x61c1cc76, 0xf794e0e6, 0xc6e534d6, 0x95774886, 0xa4069cb6, 0xbc316757, 0x8d40b367, 0xded2cf37, 0xefa31b07, 0x79f63797, 0x4887e3a7, 0x1b159ff7, 0x2a644bc7, 0x2b7a6835, 0x1a0bbc05, 0x4999c055, 0x78e81465, 0xeebd38f5, 0xdfccecc5, 0x8c5e9095, 0xbd2f44a5, 0xa518bf44, 0x94696b74, 0xc7fb1724, 0xf68ac314, 0x60dfef84, 0x51ae3bb4, 0x023c47e4, 0x334d93d4, 0x64a7604c, 0x55d6b47c, 0x0644c82c, 0x37351c1c, 0xa160308c, 0x9011e4bc, 0xc38398ec, 0xf2f24cdc, 0xeac5b73d, 0xdbb4630d, 0x88261f5d, 0xb957cb6d, 0x2f02e7fd, 0x1e7333cd, 0x4de14f9d, 0x7c909bad, 0x7d8eb85f, 0x4cff6c6f, 0x1f6d103f, 0x2e1cc40f, 0xb849e89f, 0x89383caf, 0xdaaa40ff, 0xebdb94cf, 0xf3ec6f2e, 0xc29dbb1e, 0x910fc74e, 0xa07e137e, 0x362b3fee, 0x075aebde, 0x54c8978e, 0x65b943be, 0x56f4d06a, 0x6785045a, 0x3417780a, 0x0566ac3a, 0x933380aa, 0xa242549a, 0xf1d028ca, 0xc0a1fcfa, 0xd896071b, 0xe9e7d32b, 0xba75af7b, 0x8b047b4b, 0x1d5157db, 0x2c2083eb, 0x7fb2ffbb, 0x4ec32b8b, 0x4fdd0879, 0x7eacdc49, 0x2d3ea019, 0x1c4f7429, 0x8a1a58b9, 0xbb6b8c89, 0xe8f9f0d9, 0xd98824e9, 0xc1bfdf08, 0xf0ce0b38, 0xa35c7768, 0x922da358, 0x04788fc8, 0x35095bf8, 0x669b27a8, 0x57eaf398, 0xc94ec098, 0xf83f14a8, 0xabad68f8, 0x9adcbcc8, 0x0c899058, 0x3df84468, 0x6e6a3838, 0x5f1bec08, 0x472c17e9, 0x765dc3d9, 0x25cfbf89, 0x14be6bb9, 0x82eb4729, 0xb39a9319, 0xe008ef49, 0xd1793b79, 0xd067188b, 0xe116ccbb, 0xb284b0eb, 0x83f564db, 0x15a0484b, 0x24d19c7b, 0x7743e02b, 0x4632341b, 0x5e05cffa, 0x6f741bca, 0x3ce6679a, 0x0d97b3aa, 0x9bc29f3a, 0xaab34b0a, 0xf921375a, 0xc850e36a, 0xfb1d70be, 0xca6ca48e, 0x99fed8de, 0xa88f0cee, 0x3eda207e, 0x0fabf44e, 0x5c39881e, 0x6d485c2e, 0x757fa7cf, 0x440e73ff, 0x179c0faf, 0x26eddb9f, 0xb0b8f70f, 0x81c9233f, 0xd25b5f6f, 0xe32a8b5f, 0xe234a8ad, 0xd3457c9d, 0x80d700cd, 0xb1a6d4fd, 0x27f3f86d, 0x16822c5d, 0x4510500d, 0x7461843d, 0x6c567fdc, 0x5d27abec, 0x0eb5d7bc, 0x3fc4038c, 0xa9912f1c, 0x98e0fb2c, 0xcb72877c, 0xfa03534c, 0xade9a0d4, 0x9c9874e4, 0xcf0a08b4, 0xfe7bdc84, 0x682ef014, 0x595f2424, 0x0acd5874, 0x3bbc8c44, 0x238b77a5, 0x12faa395, 0x4168dfc5, 0x70190bf5, 0xe64c2765, 0xd73df355, 0x84af8f05, 0xb5de5b35, 0xb4c078c7, 0x85b1acf7, 0xd623d0a7, 0xe7520497, 0x71072807, 0x4076fc37, 0x13e48067, 0x22955457, 0x3aa2afb6, 0x0bd37b86, 0x584107d6, 0x6930d3e6, 0xff65ff76, 0xce142b46, 0x9d865716, 0xacf78326, 0x9fba10f2, 0xaecbc4c2, 0xfd59b892, 0xcc286ca2, 0x5a7d4032, 0x6b0c9402, 0x389ee852, 0x09ef3c62, 0x11d8c783, 0x20a913b3, 0x733b6fe3, 0x424abbd3, 0xd41f9743, 0xe56e4373, 0xb6fc3f23, 0x878deb13, 0x8693c8e1, 0xb7e21cd1, 0xe4706081, 0xd501b4b1, 0x43549821, 0x72254c11, 0x21b73041, 0x10c6e471, 0x08f11f90, 0x3980cba0, 0x6a12b7f0, 0x5b6363c0, 0xcd364f50, 0xfc479b60, 0xafd5e730, 0x9ea43300, ], [ 0x00000000, 0x30d23865, 0x61a470ca, 0x517648af, 0xc348e194, 0xf39ad9f1, 0xa2ec915e, 0x923ea93b, 0x837db5d9, 0xb3af8dbc, 0xe2d9c513, 0xd20bfd76, 0x4035544d, 0x70e76c28, 0x21912487, 0x11431ce2, 0x03171d43, 0x33c52526, 0x62b36d89, 0x526155ec, 0xc05ffcd7, 0xf08dc4b2, 0xa1fb8c1d, 0x9129b478, 0x806aa89a, 0xb0b890ff, 0xe1ced850, 0xd11ce035, 0x4322490e, 0x73f0716b, 0x228639c4, 0x125401a1, 0x062e3a86, 0x36fc02e3, 0x678a4a4c, 0x57587229, 0xc566db12, 0xf5b4e377, 0xa4c2abd8, 0x941093bd, 0x85538f5f, 0xb581b73a, 0xe4f7ff95, 0xd425c7f0, 0x461b6ecb, 0x76c956ae, 0x27bf1e01, 0x176d2664, 0x053927c5, 0x35eb1fa0, 0x649d570f, 0x544f6f6a, 0xc671c651, 0xf6a3fe34, 0xa7d5b69b, 0x97078efe, 0x8644921c, 0xb696aa79, 0xe7e0e2d6, 0xd732dab3, 0x450c7388, 0x75de4bed, 0x24a80342, 0x147a3b27, 0x0c5c750c, 0x3c8e4d69, 0x6df805c6, 0x5d2a3da3, 0xcf149498, 0xffc6acfd, 0xaeb0e452, 0x9e62dc37, 0x8f21c0d5, 0xbff3f8b0, 0xee85b01f, 0xde57887a, 0x4c692141, 0x7cbb1924, 0x2dcd518b, 0x1d1f69ee, 0x0f4b684f, 0x3f99502a, 0x6eef1885, 0x5e3d20e0, 0xcc0389db, 0xfcd1b1be, 0xada7f911, 0x9d75c174, 0x8c36dd96, 0xbce4e5f3, 0xed92ad5c, 0xdd409539, 0x4f7e3c02, 0x7fac0467, 0x2eda4cc8, 0x1e0874ad, 0x0a724f8a, 0x3aa077ef, 0x6bd63f40, 0x5b040725, 0xc93aae1e, 0xf9e8967b, 0xa89eded4, 0x984ce6b1, 0x890ffa53, 0xb9ddc236, 0xe8ab8a99, 0xd879b2fc, 0x4a471bc7, 0x7a9523a2, 0x2be36b0d, 0x1b315368, 0x096552c9, 0x39b76aac, 0x68c12203, 0x58131a66, 0xca2db35d, 0xfaff8b38, 0xab89c397, 0x9b5bfbf2, 0x8a18e710, 0xbacadf75, 0xebbc97da, 0xdb6eafbf, 0x49500684, 0x79823ee1, 0x28f4764e, 0x18264e2b, 0x18b8ea18, 0x286ad27d, 0x791c9ad2, 0x49cea2b7, 0xdbf00b8c, 0xeb2233e9, 0xba547b46, 0x8a864323, 0x9bc55fc1, 0xab1767a4, 0xfa612f0b, 0xcab3176e, 0x588dbe55, 0x685f8630, 0x3929ce9f, 0x09fbf6fa, 0x1baff75b, 0x2b7dcf3e, 0x7a0b8791, 0x4ad9bff4, 0xd8e716cf, 0xe8352eaa, 0xb9436605, 0x89915e60, 0x98d24282, 0xa8007ae7, 0xf9763248, 0xc9a40a2d, 0x5b9aa316, 0x6b489b73, 0x3a3ed3dc, 0x0aecebb9, 0x1e96d09e, 0x2e44e8fb, 0x7f32a054, 0x4fe09831, 0xddde310a, 0xed0c096f, 0xbc7a41c0, 0x8ca879a5, 0x9deb6547, 0xad395d22, 0xfc4f158d, 0xcc9d2de8, 0x5ea384d3, 0x6e71bcb6, 0x3f07f419, 0x0fd5cc7c, 0x1d81cddd, 0x2d53f5b8, 0x7c25bd17, 0x4cf78572, 0xdec92c49, 0xee1b142c, 0xbf6d5c83, 0x8fbf64e6, 0x9efc7804, 0xae2e4061, 0xff5808ce, 0xcf8a30ab, 0x5db49990, 0x6d66a1f5, 0x3c10e95a, 0x0cc2d13f, 0x14e49f14, 0x2436a771, 0x7540efde, 0x4592d7bb, 0xd7ac7e80, 0xe77e46e5, 0xb6080e4a, 0x86da362f, 0x97992acd, 0xa74b12a8, 0xf63d5a07, 0xc6ef6262, 0x54d1cb59, 0x6403f33c, 0x3575bb93, 0x05a783f6, 0x17f38257, 0x2721ba32, 0x7657f29d, 0x4685caf8, 0xd4bb63c3, 0xe4695ba6, 0xb51f1309, 0x85cd2b6c, 0x948e378e, 0xa45c0feb, 0xf52a4744, 0xc5f87f21, 0x57c6d61a, 0x6714ee7f, 0x3662a6d0, 0x06b09eb5, 0x12caa592, 0x22189df7, 0x736ed558, 0x43bced3d, 0xd1824406, 0xe1507c63, 0xb02634cc, 0x80f40ca9, 0x91b7104b, 0xa165282e, 0xf0136081, 0xc0c158e4, 0x52fff1df, 0x622dc9ba, 0x335b8115, 0x0389b970, 0x11ddb8d1, 0x210f80b4, 0x7079c81b, 0x40abf07e, 0xd2955945, 0xe2476120, 0xb331298f, 0x83e311ea, 0x92a00d08, 0xa272356d, 0xf3047dc2, 0xc3d645a7, 0x51e8ec9c, 0x613ad4f9, 0x304c9c56, 0x009ea433, ], [ 0x00000000, 0x54075546, 0xa80eaa8c, 0xfc09ffca, 0x55f123e9, 0x01f676af, 0xfdff8965, 0xa9f8dc23, 0xabe247d2, 0xffe51294, 0x03eced5e, 0x57ebb818, 0xfe13643b, 0xaa14317d, 0x561dceb7, 0x021a9bf1, 0x5228f955, 0x062fac13, 0xfa2653d9, 0xae21069f, 0x07d9dabc, 0x53de8ffa, 0xafd77030, 0xfbd02576, 0xf9cabe87, 0xadcdebc1, 0x51c4140b, 0x05c3414d, 0xac3b9d6e, 0xf83cc828, 0x043537e2, 0x503262a4, 0xa451f2aa, 0xf056a7ec, 0x0c5f5826, 0x58580d60, 0xf1a0d143, 0xa5a78405, 0x59ae7bcf, 0x0da92e89, 0x0fb3b578, 0x5bb4e03e, 0xa7bd1ff4, 0xf3ba4ab2, 0x5a429691, 0x0e45c3d7, 0xf24c3c1d, 0xa64b695b, 0xf6790bff, 0xa27e5eb9, 0x5e77a173, 0x0a70f435, 0xa3882816, 0xf78f7d50, 0x0b86829a, 0x5f81d7dc, 0x5d9b4c2d, 0x099c196b, 0xf595e6a1, 0xa192b3e7, 0x086a6fc4, 0x5c6d3a82, 0xa064c548, 0xf463900e, 0x4d4f93a5, 0x1948c6e3, 0xe5413929, 0xb1466c6f, 0x18beb04c, 0x4cb9e50a, 0xb0b01ac0, 0xe4b74f86, 0xe6add477, 0xb2aa8131, 0x4ea37efb, 0x1aa42bbd, 0xb35cf79e, 0xe75ba2d8, 0x1b525d12, 0x4f550854, 0x1f676af0, 0x4b603fb6, 0xb769c07c, 0xe36e953a, 0x4a964919, 0x1e911c5f, 0xe298e395, 0xb69fb6d3, 0xb4852d22, 0xe0827864, 0x1c8b87ae, 0x488cd2e8, 0xe1740ecb, 0xb5735b8d, 0x497aa447, 0x1d7df101, 0xe91e610f, 0xbd193449, 0x4110cb83, 0x15179ec5, 0xbcef42e6, 0xe8e817a0, 0x14e1e86a, 0x40e6bd2c, 0x42fc26dd, 0x16fb739b, 0xeaf28c51, 0xbef5d917, 0x170d0534, 0x430a5072, 0xbf03afb8, 0xeb04fafe, 0xbb36985a, 0xef31cd1c, 0x133832d6, 0x473f6790, 0xeec7bbb3, 0xbac0eef5, 0x46c9113f, 0x12ce4479, 0x10d4df88, 0x44d38ace, 0xb8da7504, 0xecdd2042, 0x4525fc61, 0x1122a927, 0xed2b56ed, 0xb92c03ab, 0x9a9f274a, 0xce98720c, 0x32918dc6, 0x6696d880, 0xcf6e04a3, 0x9b6951e5, 0x6760ae2f, 0x3367fb69, 0x317d6098, 0x657a35de, 0x9973ca14, 0xcd749f52, 0x648c4371, 0x308b1637, 0xcc82e9fd, 0x9885bcbb, 0xc8b7de1f, 0x9cb08b59, 0x60b97493, 0x34be21d5, 0x9d46fdf6, 0xc941a8b0, 0x3548577a, 0x614f023c, 0x635599cd, 0x3752cc8b, 0xcb5b3341, 0x9f5c6607, 0x36a4ba24, 0x62a3ef62, 0x9eaa10a8, 0xcaad45ee, 0x3eced5e0, 0x6ac980a6, 0x96c07f6c, 0xc2c72a2a, 0x6b3ff609, 0x3f38a34f, 0xc3315c85, 0x973609c3, 0x952c9232, 0xc12bc774, 0x3d2238be, 0x69256df8, 0xc0ddb1db, 0x94dae49d, 0x68d31b57, 0x3cd44e11, 0x6ce62cb5, 0x38e179f3, 0xc4e88639, 0x90efd37f, 0x39170f5c, 0x6d105a1a, 0x9119a5d0, 0xc51ef096, 0xc7046b67, 0x93033e21, 0x6f0ac1eb, 0x3b0d94ad, 0x92f5488e, 0xc6f21dc8, 0x3afbe202, 0x6efcb744, 0xd7d0b4ef, 0x83d7e1a9, 0x7fde1e63, 0x2bd94b25, 0x82219706, 0xd626c240, 0x2a2f3d8a, 0x7e2868cc, 0x7c32f33d, 0x2835a67b, 0xd43c59b1, 0x803b0cf7, 0x29c3d0d4, 0x7dc48592, 0x81cd7a58, 0xd5ca2f1e, 0x85f84dba, 0xd1ff18fc, 0x2df6e736, 0x79f1b270, 0xd0096e53, 0x840e3b15, 0x7807c4df, 0x2c009199, 0x2e1a0a68, 0x7a1d5f2e, 0x8614a0e4, 0xd213f5a2, 0x7beb2981, 0x2fec7cc7, 0xd3e5830d, 0x87e2d64b, 0x73814645, 0x27861303, 0xdb8fecc9, 0x8f88b98f, 0x267065ac, 0x727730ea, 0x8e7ecf20, 0xda799a66, 0xd8630197, 0x8c6454d1, 0x706dab1b, 0x246afe5d, 0x8d92227e, 0xd9957738, 0x259c88f2, 0x719bddb4, 0x21a9bf10, 0x75aeea56, 0x89a7159c, 0xdda040da, 0x74589cf9, 0x205fc9bf, 0xdc563675, 0x88516333, 0x8a4bf8c2, 0xde4cad84, 0x2245524e, 0x76420708, 0xdfbadb2b, 0x8bbd8e6d, 0x77b471a7, 0x23b324e1, ], [ 0x00000000, 0x678efd01, 0xcf1dfa02, 0xa8930703, 0x9bd782f5, 0xfc597ff4, 0x54ca78f7, 0x334485f6, 0x3243731b, 0x55cd8e1a, 0xfd5e8919, 0x9ad07418, 0xa994f1ee, 0xce1a0cef, 0x66890bec, 0x0107f6ed, 0x6486e636, 0x03081b37, 0xab9b1c34, 0xcc15e135, 0xff5164c3, 0x98df99c2, 0x304c9ec1, 0x57c263c0, 0x56c5952d, 0x314b682c, 0x99d86f2f, 0xfe56922e, 0xcd1217d8, 0xaa9cead9, 0x020fedda, 0x658110db, 0xc90dcc6c, 0xae83316d, 0x0610366e, 0x619ecb6f, 0x52da4e99, 0x3554b398, 0x9dc7b49b, 0xfa49499a, 0xfb4ebf77, 0x9cc04276, 0x34534575, 0x53ddb874, 0x60993d82, 0x0717c083, 0xaf84c780, 0xc80a3a81, 0xad8b2a5a, 0xca05d75b, 0x6296d058, 0x05182d59, 0x365ca8af, 0x51d255ae, 0xf94152ad, 0x9ecfafac, 0x9fc85941, 0xf846a440, 0x50d5a343, 0x375b5e42, 0x041fdbb4, 0x639126b5, 0xcb0221b6, 0xac8cdcb7, 0x97f7ee29, 0xf0791328, 0x58ea142b, 0x3f64e92a, 0x0c206cdc, 0x6bae91dd, 0xc33d96de, 0xa4b36bdf, 0xa5b49d32, 0xc23a6033, 0x6aa96730, 0x0d279a31, 0x3e631fc7, 0x59ede2c6, 0xf17ee5c5, 0x96f018c4, 0xf371081f, 0x94fff51e, 0x3c6cf21d, 0x5be20f1c, 0x68a68aea, 0x0f2877eb, 0xa7bb70e8, 0xc0358de9, 0xc1327b04, 0xa6bc8605, 0x0e2f8106, 0x69a17c07, 0x5ae5f9f1, 0x3d6b04f0, 0x95f803f3, 0xf276fef2, 0x5efa2245, 0x3974df44, 0x91e7d847, 0xf6692546, 0xc52da0b0, 0xa2a35db1, 0x0a305ab2, 0x6dbea7b3, 0x6cb9515e, 0x0b37ac5f, 0xa3a4ab5c, 0xc42a565d, 0xf76ed3ab, 0x90e02eaa, 0x387329a9, 0x5ffdd4a8, 0x3a7cc473, 0x5df23972, 0xf5613e71, 0x92efc370, 0xa1ab4686, 0xc625bb87, 0x6eb6bc84, 0x09384185, 0x083fb768, 0x6fb14a69, 0xc7224d6a, 0xa0acb06b, 0x93e8359d, 0xf466c89c, 0x5cf5cf9f, 0x3b7b329e, 0x2a03aaa3, 0x4d8d57a2, 0xe51e50a1, 0x8290ada0, 0xb1d42856, 0xd65ad557, 0x7ec9d254, 0x19472f55, 0x1840d9b8, 0x7fce24b9, 0xd75d23ba, 0xb0d3debb, 0x83975b4d, 0xe419a64c, 0x4c8aa14f, 0x2b045c4e, 0x4e854c95, 0x290bb194, 0x8198b697, 0xe6164b96, 0xd552ce60, 0xb2dc3361, 0x1a4f3462, 0x7dc1c963, 0x7cc63f8e, 0x1b48c28f, 0xb3dbc58c, 0xd455388d, 0xe711bd7b, 0x809f407a, 0x280c4779, 0x4f82ba78, 0xe30e66cf, 0x84809bce, 0x2c139ccd, 0x4b9d61cc, 0x78d9e43a, 0x1f57193b, 0xb7c41e38, 0xd04ae339, 0xd14d15d4, 0xb6c3e8d5, 0x1e50efd6, 0x79de12d7, 0x4a9a9721, 0x2d146a20, 0x85876d23, 0xe2099022, 0x878880f9, 0xe0067df8, 0x48957afb, 0x2f1b87fa, 0x1c5f020c, 0x7bd1ff0d, 0xd342f80e, 0xb4cc050f, 0xb5cbf3e2, 0xd2450ee3, 0x7ad609e0, 0x1d58f4e1, 0x2e1c7117, 0x49928c16, 0xe1018b15, 0x868f7614, 0xbdf4448a, 0xda7ab98b, 0x72e9be88, 0x15674389, 0x2623c67f, 0x41ad3b7e, 0xe93e3c7d, 0x8eb0c17c, 0x8fb73791, 0xe839ca90, 0x40aacd93, 0x27243092, 0x1460b564, 0x73ee4865, 0xdb7d4f66, 0xbcf3b267, 0xd972a2bc, 0xbefc5fbd, 0x166f58be, 0x71e1a5bf, 0x42a52049, 0x252bdd48, 0x8db8da4b, 0xea36274a, 0xeb31d1a7, 0x8cbf2ca6, 0x242c2ba5, 0x43a2d6a4, 0x70e65352, 0x1768ae53, 0xbffba950, 0xd8755451, 0x74f988e6, 0x137775e7, 0xbbe472e4, 0xdc6a8fe5, 0xef2e0a13, 0x88a0f712, 0x2033f011, 0x47bd0d10, 0x46bafbfd, 0x213406fc, 0x89a701ff, 0xee29fcfe, 0xdd6d7908, 0xbae38409, 0x1270830a, 0x75fe7e0b, 0x107f6ed0, 0x77f193d1, 0xdf6294d2, 0xb8ec69d3, 0x8ba8ec25, 0xec261124, 0x44b51627, 0x233beb26, 0x223c1dcb, 0x45b2e0ca, 0xed21e7c9, 0x8aaf1ac8, 0xb9eb9f3e, 0xde65623f, 0x76f6653c, 0x1178983d, ], [ 0x00000000, 0xf20c0dfe, 0xe1f46d0d, 0x13f860f3, 0xc604aceb, 0x3408a115, 0x27f0c1e6, 0xd5fccc18, 0x89e52f27, 0x7be922d9, 0x6811422a, 0x9a1d4fd4, 0x4fe183cc, 0xbded8e32, 0xae15eec1, 0x5c19e33f, 0x162628bf, 0xe42a2541, 0xf7d245b2, 0x05de484c, 0xd0228454, 0x222e89aa, 0x31d6e959, 0xc3dae4a7, 0x9fc30798, 0x6dcf0a66, 0x7e376a95, 0x8c3b676b, 0x59c7ab73, 0xabcba68d, 0xb833c67e, 0x4a3fcb80, 0x2c4c517e, 0xde405c80, 0xcdb83c73, 0x3fb4318d, 0xea48fd95, 0x1844f06b, 0x0bbc9098, 0xf9b09d66, 0xa5a97e59, 0x57a573a7, 0x445d1354, 0xb6511eaa, 0x63add2b2, 0x91a1df4c, 0x8259bfbf, 0x7055b241, 0x3a6a79c1, 0xc866743f, 0xdb9e14cc, 0x29921932, 0xfc6ed52a, 0x0e62d8d4, 0x1d9ab827, 0xef96b5d9, 0xb38f56e6, 0x41835b18, 0x527b3beb, 0xa0773615, 0x758bfa0d, 0x8787f7f3, 0x947f9700, 0x66739afe, 0x5898a2fc, 0xaa94af02, 0xb96ccff1, 0x4b60c20f, 0x9e9c0e17, 0x6c9003e9, 0x7f68631a, 0x8d646ee4, 0xd17d8ddb, 0x23718025, 0x3089e0d6, 0xc285ed28, 0x17792130, 0xe5752cce, 0xf68d4c3d, 0x048141c3, 0x4ebe8a43, 0xbcb287bd, 0xaf4ae74e, 0x5d46eab0, 0x88ba26a8, 0x7ab62b56, 0x694e4ba5, 0x9b42465b, 0xc75ba564, 0x3557a89a, 0x26afc869, 0xd4a3c597, 0x015f098f, 0xf3530471, 0xe0ab6482, 0x12a7697c, 0x74d4f382, 0x86d8fe7c, 0x95209e8f, 0x672c9371, 0xb2d05f69, 0x40dc5297, 0x53243264, 0xa1283f9a, 0xfd31dca5, 0x0f3dd15b, 0x1cc5b1a8, 0xeec9bc56, 0x3b35704e, 0xc9397db0, 0xdac11d43, 0x28cd10bd, 0x62f2db3d, 0x90fed6c3, 0x8306b630, 0x710abbce, 0xa4f677d6, 0x56fa7a28, 0x45021adb, 0xb70e1725, 0xeb17f41a, 0x191bf9e4, 0x0ae39917, 0xf8ef94e9, 0x2d1358f1, 0xdf1f550f, 0xcce735fc, 0x3eeb3802, 0xb13145f8, 0x433d4806, 0x50c528f5, 0xa2c9250b, 0x7735e913, 0x8539e4ed, 0x96c1841e, 0x64cd89e0, 0x38d46adf, 0xcad86721, 0xd92007d2, 0x2b2c0a2c, 0xfed0c634, 0x0cdccbca, 0x1f24ab39, 0xed28a6c7, 0xa7176d47, 0x551b60b9, 0x46e3004a, 0xb4ef0db4, 0x6113c1ac, 0x931fcc52, 0x80e7aca1, 0x72eba15f, 0x2ef24260, 0xdcfe4f9e, 0xcf062f6d, 0x3d0a2293, 0xe8f6ee8b, 0x1afae375, 0x09028386, 0xfb0e8e78, 0x9d7d1486, 0x6f711978, 0x7c89798b, 0x8e857475, 0x5b79b86d, 0xa975b593, 0xba8dd560, 0x4881d89e, 0x14983ba1, 0xe694365f, 0xf56c56ac, 0x07605b52, 0xd29c974a, 0x20909ab4, 0x3368fa47, 0xc164f7b9, 0x8b5b3c39, 0x795731c7, 0x6aaf5134, 0x98a35cca, 0x4d5f90d2, 0xbf539d2c, 0xacabfddf, 0x5ea7f021, 0x02be131e, 0xf0b21ee0, 0xe34a7e13, 0x114673ed, 0xc4babff5, 0x36b6b20b, 0x254ed2f8, 0xd742df06, 0xe9a9e704, 0x1ba5eafa, 0x085d8a09, 0xfa5187f7, 0x2fad4bef, 0xdda14611, 0xce5926e2, 0x3c552b1c, 0x604cc823, 0x9240c5dd, 0x81b8a52e, 0x73b4a8d0, 0xa64864c8, 0x54446936, 0x47bc09c5, 0xb5b0043b, 0xff8fcfbb, 0x0d83c245, 0x1e7ba2b6, 0xec77af48, 0x398b6350, 0xcb876eae, 0xd87f0e5d, 0x2a7303a3, 0x766ae09c, 0x8466ed62, 0x979e8d91, 0x6592806f, 0xb06e4c77, 0x42624189, 0x519a217a, 0xa3962c84, 0xc5e5b67a, 0x37e9bb84, 0x2411db77, 0xd61dd689, 0x03e11a91, 0xf1ed176f, 0xe215779c, 0x10197a62, 0x4c00995d, 0xbe0c94a3, 0xadf4f450, 0x5ff8f9ae, 0x8a0435b6, 0x78083848, 0x6bf058bb, 0x99fc5545, 0xd3c39ec5, 0x21cf933b, 0x3237f3c8, 0xc03bfe36, 0x15c7322e, 0xe7cb3fd0, 0xf4335f23, 0x063f52dd, 0x5a26b1e2, 0xa82abc1c, 0xbbd2dcef, 0x49ded111, 0x9c221d09, 0x6e2e10f7, 0x7dd67004, 0x8fda7dfa, ], ]; pub static CRC32_ISO_HDLC_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, ], [ 0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, 0x9324fd72, ], [ 0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, 0xbe9834ed, ], [ 0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, 0xde0506f1, ], [ 0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, 0xca64c78c, ], [ 0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, 0xe4c4abcc, ], [ 0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, 0x92364a30, ], [ 0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, 0x264b06e6, ], [ 0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, 0x494f0c4b, ], [ 0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, 0xe147d714, ], [ 0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, 0x1a3b93aa, ], [ 0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, 0x36197165, ], [ 0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, 0x3dee8ca6, ], [ 0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, 0x3f88e851, ], [ 0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, 0x1c53e98a, ], [ 0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, 0x0d7139d7, ], ]; pub static CRC32_JAMCRC_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, ], [ 0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, 0x9324fd72, ], [ 0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, 0xbe9834ed, ], [ 0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, 0xde0506f1, ], [ 0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, 0xca64c78c, ], [ 0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, 0xe4c4abcc, ], [ 0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, 0x92364a30, ], [ 0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, 0x264b06e6, ], [ 0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, 0x494f0c4b, ], [ 0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, 0xe147d714, ], [ 0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, 0x1a3b93aa, ], [ 0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, 0x36197165, ], [ 0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, 0x3dee8ca6, ], [ 0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, 0x3f88e851, ], [ 0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, 0x1c53e98a, ], [ 0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, 0x0d7139d7, ], ]; pub static CRC32_MEF_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0x9695c4ca, 0xfb4839c9, 0x6dddfd03, 0x20f3c3cf, 0xb6660705, 0xdbbbfa06, 0x4d2e3ecc, 0x41e7879e, 0xd7724354, 0xbaafbe57, 0x2c3a7a9d, 0x61144451, 0xf781809b, 0x9a5c7d98, 0x0cc9b952, 0x83cf0f3c, 0x155acbf6, 0x788736f5, 0xee12f23f, 0xa33cccf3, 0x35a90839, 0x5874f53a, 0xcee131f0, 0xc22888a2, 0x54bd4c68, 0x3960b16b, 0xaff575a1, 0xe2db4b6d, 0x744e8fa7, 0x199372a4, 0x8f06b66e, 0xd1fdae25, 0x47686aef, 0x2ab597ec, 0xbc205326, 0xf10e6dea, 0x679ba920, 0x0a465423, 0x9cd390e9, 0x901a29bb, 0x068fed71, 0x6b521072, 0xfdc7d4b8, 0xb0e9ea74, 0x267c2ebe, 0x4ba1d3bd, 0xdd341777, 0x5232a119, 0xc4a765d3, 0xa97a98d0, 0x3fef5c1a, 0x72c162d6, 0xe454a61c, 0x89895b1f, 0x1f1c9fd5, 0x13d52687, 0x8540e24d, 0xe89d1f4e, 0x7e08db84, 0x3326e548, 0xa5b32182, 0xc86edc81, 0x5efb184b, 0x7598ec17, 0xe30d28dd, 0x8ed0d5de, 0x18451114, 0x556b2fd8, 0xc3feeb12, 0xae231611, 0x38b6d2db, 0x347f6b89, 0xa2eaaf43, 0xcf375240, 0x59a2968a, 0x148ca846, 0x82196c8c, 0xefc4918f, 0x79515545, 0xf657e32b, 0x60c227e1, 0x0d1fdae2, 0x9b8a1e28, 0xd6a420e4, 0x4031e42e, 0x2dec192d, 0xbb79dde7, 0xb7b064b5, 0x2125a07f, 0x4cf85d7c, 0xda6d99b6, 0x9743a77a, 0x01d663b0, 0x6c0b9eb3, 0xfa9e5a79, 0xa4654232, 0x32f086f8, 0x5f2d7bfb, 0xc9b8bf31, 0x849681fd, 0x12034537, 0x7fdeb834, 0xe94b7cfe, 0xe582c5ac, 0x73170166, 0x1ecafc65, 0x885f38af, 0xc5710663, 0x53e4c2a9, 0x3e393faa, 0xa8acfb60, 0x27aa4d0e, 0xb13f89c4, 0xdce274c7, 0x4a77b00d, 0x07598ec1, 0x91cc4a0b, 0xfc11b708, 0x6a8473c2, 0x664dca90, 0xf0d80e5a, 0x9d05f359, 0x0b903793, 0x46be095f, 0xd02bcd95, 0xbdf63096, 0x2b63f45c, 0xeb31d82e, 0x7da41ce4, 0x1079e1e7, 0x86ec252d, 0xcbc21be1, 0x5d57df2b, 0x308a2228, 0xa61fe6e2, 0xaad65fb0, 0x3c439b7a, 0x519e6679, 0xc70ba2b3, 0x8a259c7f, 0x1cb058b5, 0x716da5b6, 0xe7f8617c, 0x68fed712, 0xfe6b13d8, 0x93b6eedb, 0x05232a11, 0x480d14dd, 0xde98d017, 0xb3452d14, 0x25d0e9de, 0x2919508c, 0xbf8c9446, 0xd2516945, 0x44c4ad8f, 0x09ea9343, 0x9f7f5789, 0xf2a2aa8a, 0x64376e40, 0x3acc760b, 0xac59b2c1, 0xc1844fc2, 0x57118b08, 0x1a3fb5c4, 0x8caa710e, 0xe1778c0d, 0x77e248c7, 0x7b2bf195, 0xedbe355f, 0x8063c85c, 0x16f60c96, 0x5bd8325a, 0xcd4df690, 0xa0900b93, 0x3605cf59, 0xb9037937, 0x2f96bdfd, 0x424b40fe, 0xd4de8434, 0x99f0baf8, 0x0f657e32, 0x62b88331, 0xf42d47fb, 0xf8e4fea9, 0x6e713a63, 0x03acc760, 0x953903aa, 0xd8173d66, 0x4e82f9ac, 0x235f04af, 0xb5cac065, 0x9ea93439, 0x083cf0f3, 0x65e10df0, 0xf374c93a, 0xbe5af7f6, 0x28cf333c, 0x4512ce3f, 0xd3870af5, 0xdf4eb3a7, 0x49db776d, 0x24068a6e, 0xb2934ea4, 0xffbd7068, 0x6928b4a2, 0x04f549a1, 0x92608d6b, 0x1d663b05, 0x8bf3ffcf, 0xe62e02cc, 0x70bbc606, 0x3d95f8ca, 0xab003c00, 0xc6ddc103, 0x504805c9, 0x5c81bc9b, 0xca147851, 0xa7c98552, 0x315c4198, 0x7c727f54, 0xeae7bb9e, 0x873a469d, 0x11af8257, 0x4f549a1c, 0xd9c15ed6, 0xb41ca3d5, 0x2289671f, 0x6fa759d3, 0xf9329d19, 0x94ef601a, 0x027aa4d0, 0x0eb31d82, 0x9826d948, 0xf5fb244b, 0x636ee081, 0x2e40de4d, 0xb8d51a87, 0xd508e784, 0x439d234e, 0xcc9b9520, 0x5a0e51ea, 0x37d3ace9, 0xa1466823, 0xec6856ef, 0x7afd9225, 0x17206f26, 0x81b5abec, 0x8d7c12be, 0x1be9d674, 0x76342b77, 0xe0a1efbd, 0xad8fd171, 0x3b1a15bb, 0x56c7e8b8, 0xc0522c72, ], [ 0x00000000, 0x24901faa, 0x49203f54, 0x6db020fe, 0x92407ea8, 0xb6d06102, 0xdb6041fc, 0xfff05e56, 0xf2e34d0d, 0xd67352a7, 0xbbc37259, 0x9f536df3, 0x60a333a5, 0x44332c0f, 0x29830cf1, 0x0d13135b, 0x33a52a47, 0x173535ed, 0x7a851513, 0x5e150ab9, 0xa1e554ef, 0x85754b45, 0xe8c56bbb, 0xcc557411, 0xc146674a, 0xe5d678e0, 0x8866581e, 0xacf647b4, 0x530619e2, 0x77960648, 0x1a2626b6, 0x3eb6391c, 0x674a548e, 0x43da4b24, 0x2e6a6bda, 0x0afa7470, 0xf50a2a26, 0xd19a358c, 0xbc2a1572, 0x98ba0ad8, 0x95a91983, 0xb1390629, 0xdc8926d7, 0xf819397d, 0x07e9672b, 0x23797881, 0x4ec9587f, 0x6a5947d5, 0x54ef7ec9, 0x707f6163, 0x1dcf419d, 0x395f5e37, 0xc6af0061, 0xe23f1fcb, 0x8f8f3f35, 0xab1f209f, 0xa60c33c4, 0x829c2c6e, 0xef2c0c90, 0xcbbc133a, 0x344c4d6c, 0x10dc52c6, 0x7d6c7238, 0x59fc6d92, 0xce94a91c, 0xea04b6b6, 0x87b49648, 0xa32489e2, 0x5cd4d7b4, 0x7844c81e, 0x15f4e8e0, 0x3164f74a, 0x3c77e411, 0x18e7fbbb, 0x7557db45, 0x51c7c4ef, 0xae379ab9, 0x8aa78513, 0xe717a5ed, 0xc387ba47, 0xfd31835b, 0xd9a19cf1, 0xb411bc0f, 0x9081a3a5, 0x6f71fdf3, 0x4be1e259, 0x2651c2a7, 0x02c1dd0d, 0x0fd2ce56, 0x2b42d1fc, 0x46f2f102, 0x6262eea8, 0x9d92b0fe, 0xb902af54, 0xd4b28faa, 0xf0229000, 0xa9defd92, 0x8d4ee238, 0xe0fec2c6, 0xc46edd6c, 0x3b9e833a, 0x1f0e9c90, 0x72bebc6e, 0x562ea3c4, 0x5b3db09f, 0x7fadaf35, 0x121d8fcb, 0x368d9061, 0xc97dce37, 0xededd19d, 0x805df163, 0xa4cdeec9, 0x9a7bd7d5, 0xbeebc87f, 0xd35be881, 0xf7cbf72b, 0x083ba97d, 0x2cabb6d7, 0x411b9629, 0x658b8983, 0x68989ad8, 0x4c088572, 0x21b8a58c, 0x0528ba26, 0xfad8e470, 0xde48fbda, 0xb3f8db24, 0x9768c48e, 0x4b4ae265, 0x6fdafdcf, 0x026add31, 0x26fac29b, 0xd90a9ccd, 0xfd9a8367, 0x902aa399, 0xb4babc33, 0xb9a9af68, 0x9d39b0c2, 0xf089903c, 0xd4198f96, 0x2be9d1c0, 0x0f79ce6a, 0x62c9ee94, 0x4659f13e, 0x78efc822, 0x5c7fd788, 0x31cff776, 0x155fe8dc, 0xeaafb68a, 0xce3fa920, 0xa38f89de, 0x871f9674, 0x8a0c852f, 0xae9c9a85, 0xc32cba7b, 0xe7bca5d1, 0x184cfb87, 0x3cdce42d, 0x516cc4d3, 0x75fcdb79, 0x2c00b6eb, 0x0890a941, 0x652089bf, 0x41b09615, 0xbe40c843, 0x9ad0d7e9, 0xf760f717, 0xd3f0e8bd, 0xdee3fbe6, 0xfa73e44c, 0x97c3c4b2, 0xb353db18, 0x4ca3854e, 0x68339ae4, 0x0583ba1a, 0x2113a5b0, 0x1fa59cac, 0x3b358306, 0x5685a3f8, 0x7215bc52, 0x8de5e204, 0xa975fdae, 0xc4c5dd50, 0xe055c2fa, 0xed46d1a1, 0xc9d6ce0b, 0xa466eef5, 0x80f6f15f, 0x7f06af09, 0x5b96b0a3, 0x3626905d, 0x12b68ff7, 0x85de4b79, 0xa14e54d3, 0xccfe742d, 0xe86e6b87, 0x179e35d1, 0x330e2a7b, 0x5ebe0a85, 0x7a2e152f, 0x773d0674, 0x53ad19de, 0x3e1d3920, 0x1a8d268a, 0xe57d78dc, 0xc1ed6776, 0xac5d4788, 0x88cd5822, 0xb67b613e, 0x92eb7e94, 0xff5b5e6a, 0xdbcb41c0, 0x243b1f96, 0x00ab003c, 0x6d1b20c2, 0x498b3f68, 0x44982c33, 0x60083399, 0x0db81367, 0x29280ccd, 0xd6d8529b, 0xf2484d31, 0x9ff86dcf, 0xbb687265, 0xe2941ff7, 0xc604005d, 0xabb420a3, 0x8f243f09, 0x70d4615f, 0x54447ef5, 0x39f45e0b, 0x1d6441a1, 0x107752fa, 0x34e74d50, 0x59576dae, 0x7dc77204, 0x82372c52, 0xa6a733f8, 0xcb171306, 0xef870cac, 0xd13135b0, 0xf5a12a1a, 0x98110ae4, 0xbc81154e, 0x43714b18, 0x67e154b2, 0x0a51744c, 0x2ec16be6, 0x23d278bd, 0x07426717, 0x6af247e9, 0x4e625843, 0xb1920615, 0x950219bf, 0xf8b23941, 0xdc2226eb, ], [ 0x00000000, 0x80475843, 0xd6ed00db, 0x56aa5898, 0x7bb9b1eb, 0xfbfee9a8, 0xad54b130, 0x2d13e973, 0xf77363d6, 0x77343b95, 0x219e630d, 0xa1d93b4e, 0x8ccad23d, 0x0c8d8a7e, 0x5a27d2e6, 0xda608aa5, 0x388577f1, 0xb8c22fb2, 0xee68772a, 0x6e2f2f69, 0x433cc61a, 0xc37b9e59, 0x95d1c6c1, 0x15969e82, 0xcff61427, 0x4fb14c64, 0x191b14fc, 0x995c4cbf, 0xb44fa5cc, 0x3408fd8f, 0x62a2a517, 0xe2e5fd54, 0x710aefe2, 0xf14db7a1, 0xa7e7ef39, 0x27a0b77a, 0x0ab35e09, 0x8af4064a, 0xdc5e5ed2, 0x5c190691, 0x86798c34, 0x063ed477, 0x50948cef, 0xd0d3d4ac, 0xfdc03ddf, 0x7d87659c, 0x2b2d3d04, 0xab6a6547, 0x498f9813, 0xc9c8c050, 0x9f6298c8, 0x1f25c08b, 0x323629f8, 0xb27171bb, 0xe4db2923, 0x649c7160, 0xbefcfbc5, 0x3ebba386, 0x6811fb1e, 0xe856a35d, 0xc5454a2e, 0x4502126d, 0x13a84af5, 0x93ef12b6, 0xe215dfc4, 0x62528787, 0x34f8df1f, 0xb4bf875c, 0x99ac6e2f, 0x19eb366c, 0x4f416ef4, 0xcf0636b7, 0x1566bc12, 0x9521e451, 0xc38bbcc9, 0x43cce48a, 0x6edf0df9, 0xee9855ba, 0xb8320d22, 0x38755561, 0xda90a835, 0x5ad7f076, 0x0c7da8ee, 0x8c3af0ad, 0xa12919de, 0x216e419d, 0x77c41905, 0xf7834146, 0x2de3cbe3, 0xada493a0, 0xfb0ecb38, 0x7b49937b, 0x565a7a08, 0xd61d224b, 0x80b77ad3, 0x00f02290, 0x931f3026, 0x13586865, 0x45f230fd, 0xc5b568be, 0xe8a681cd, 0x68e1d98e, 0x3e4b8116, 0xbe0cd955, 0x646c53f0, 0xe42b0bb3, 0xb281532b, 0x32c60b68, 0x1fd5e21b, 0x9f92ba58, 0xc938e2c0, 0x497fba83, 0xab9a47d7, 0x2bdd1f94, 0x7d77470c, 0xfd301f4f, 0xd023f63c, 0x5064ae7f, 0x06cef6e7, 0x8689aea4, 0x5ce92401, 0xdcae7c42, 0x8a0424da, 0x0a437c99, 0x275095ea, 0xa717cda9, 0xf1bd9531, 0x71facd72, 0x12480fd5, 0x920f5796, 0xc4a50f0e, 0x44e2574d, 0x69f1be3e, 0xe9b6e67d, 0xbf1cbee5, 0x3f5be6a6, 0xe53b6c03, 0x657c3440, 0x33d66cd8, 0xb391349b, 0x9e82dde8, 0x1ec585ab, 0x486fdd33, 0xc8288570, 0x2acd7824, 0xaa8a2067, 0xfc2078ff, 0x7c6720bc, 0x5174c9cf, 0xd133918c, 0x8799c914, 0x07de9157, 0xddbe1bf2, 0x5df943b1, 0x0b531b29, 0x8b14436a, 0xa607aa19, 0x2640f25a, 0x70eaaac2, 0xf0adf281, 0x6342e037, 0xe305b874, 0xb5afe0ec, 0x35e8b8af, 0x18fb51dc, 0x98bc099f, 0xce165107, 0x4e510944, 0x943183e1, 0x1476dba2, 0x42dc833a, 0xc29bdb79, 0xef88320a, 0x6fcf6a49, 0x396532d1, 0xb9226a92, 0x5bc797c6, 0xdb80cf85, 0x8d2a971d, 0x0d6dcf5e, 0x207e262d, 0xa0397e6e, 0xf69326f6, 0x76d47eb5, 0xacb4f410, 0x2cf3ac53, 0x7a59f4cb, 0xfa1eac88, 0xd70d45fb, 0x574a1db8, 0x01e04520, 0x81a71d63, 0xf05dd011, 0x701a8852, 0x26b0d0ca, 0xa6f78889, 0x8be461fa, 0x0ba339b9, 0x5d096121, 0xdd4e3962, 0x072eb3c7, 0x8769eb84, 0xd1c3b31c, 0x5184eb5f, 0x7c97022c, 0xfcd05a6f, 0xaa7a02f7, 0x2a3d5ab4, 0xc8d8a7e0, 0x489fffa3, 0x1e35a73b, 0x9e72ff78, 0xb361160b, 0x33264e48, 0x658c16d0, 0xe5cb4e93, 0x3fabc436, 0xbfec9c75, 0xe946c4ed, 0x69019cae, 0x441275dd, 0xc4552d9e, 0x92ff7506, 0x12b82d45, 0x81573ff3, 0x011067b0, 0x57ba3f28, 0xd7fd676b, 0xfaee8e18, 0x7aa9d65b, 0x2c038ec3, 0xac44d680, 0x76245c25, 0xf6630466, 0xa0c95cfe, 0x208e04bd, 0x0d9dedce, 0x8ddab58d, 0xdb70ed15, 0x5b37b556, 0xb9d24802, 0x39951041, 0x6f3f48d9, 0xef78109a, 0xc26bf9e9, 0x422ca1aa, 0x1486f932, 0x94c1a171, 0x4ea12bd4, 0xcee67397, 0x984c2b0f, 0x180b734c, 0x35189a3f, 0xb55fc27c, 0xe3f59ae4, 0x63b2c2a7, ], [ 0x00000000, 0x18c5564c, 0x318aac98, 0x294ffad4, 0x63155930, 0x7bd00f7c, 0x529ff5a8, 0x4a5aa3e4, 0xc62ab260, 0xdeefe42c, 0xf7a01ef8, 0xef6548b4, 0xa53feb50, 0xbdfabd1c, 0x94b547c8, 0x8c701184, 0x5a36d49d, 0x42f382d1, 0x6bbc7805, 0x73792e49, 0x39238dad, 0x21e6dbe1, 0x08a92135, 0x106c7779, 0x9c1c66fd, 0x84d930b1, 0xad96ca65, 0xb5539c29, 0xff093fcd, 0xe7cc6981, 0xce839355, 0xd646c519, 0xb46da93a, 0xaca8ff76, 0x85e705a2, 0x9d2253ee, 0xd778f00a, 0xcfbda646, 0xe6f25c92, 0xfe370ade, 0x72471b5a, 0x6a824d16, 0x43cdb7c2, 0x5b08e18e, 0x1152426a, 0x09971426, 0x20d8eef2, 0x381db8be, 0xee5b7da7, 0xf69e2beb, 0xdfd1d13f, 0xc7148773, 0x8d4e2497, 0x958b72db, 0xbcc4880f, 0xa401de43, 0x2871cfc7, 0x30b4998b, 0x19fb635f, 0x013e3513, 0x4b6496f7, 0x53a1c0bb, 0x7aee3a6f, 0x622b6c23, 0xbeb8e229, 0xa67db465, 0x8f324eb1, 0x97f718fd, 0xddadbb19, 0xc568ed55, 0xec271781, 0xf4e241cd, 0x78925049, 0x60570605, 0x4918fcd1, 0x51ddaa9d, 0x1b870979, 0x03425f35, 0x2a0da5e1, 0x32c8f3ad, 0xe48e36b4, 0xfc4b60f8, 0xd5049a2c, 0xcdc1cc60, 0x879b6f84, 0x9f5e39c8, 0xb611c31c, 0xaed49550, 0x22a484d4, 0x3a61d298, 0x132e284c, 0x0beb7e00, 0x41b1dde4, 0x59748ba8, 0x703b717c, 0x68fe2730, 0x0ad54b13, 0x12101d5f, 0x3b5fe78b, 0x239ab1c7, 0x69c01223, 0x7105446f, 0x584abebb, 0x408fe8f7, 0xccfff973, 0xd43aaf3f, 0xfd7555eb, 0xe5b003a7, 0xafeaa043, 0xb72ff60f, 0x9e600cdb, 0x86a55a97, 0x50e39f8e, 0x4826c9c2, 0x61693316, 0x79ac655a, 0x33f6c6be, 0x2b3390f2, 0x027c6a26, 0x1ab93c6a, 0x96c92dee, 0x8e0c7ba2, 0xa7438176, 0xbf86d73a, 0xf5dc74de, 0xed192292, 0xc456d846, 0xdc938e0a, 0xab12740f, 0xb3d72243, 0x9a98d897, 0x825d8edb, 0xc8072d3f, 0xd0c27b73, 0xf98d81a7, 0xe148d7eb, 0x6d38c66f, 0x75fd9023, 0x5cb26af7, 0x44773cbb, 0x0e2d9f5f, 0x16e8c913, 0x3fa733c7, 0x2762658b, 0xf124a092, 0xe9e1f6de, 0xc0ae0c0a, 0xd86b5a46, 0x9231f9a2, 0x8af4afee, 0xa3bb553a, 0xbb7e0376, 0x370e12f2, 0x2fcb44be, 0x0684be6a, 0x1e41e826, 0x541b4bc2, 0x4cde1d8e, 0x6591e75a, 0x7d54b116, 0x1f7fdd35, 0x07ba8b79, 0x2ef571ad, 0x363027e1, 0x7c6a8405, 0x64afd249, 0x4de0289d, 0x55257ed1, 0xd9556f55, 0xc1903919, 0xe8dfc3cd, 0xf01a9581, 0xba403665, 0xa2856029, 0x8bca9afd, 0x930fccb1, 0x454909a8, 0x5d8c5fe4, 0x74c3a530, 0x6c06f37c, 0x265c5098, 0x3e9906d4, 0x17d6fc00, 0x0f13aa4c, 0x8363bbc8, 0x9ba6ed84, 0xb2e91750, 0xaa2c411c, 0xe076e2f8, 0xf8b3b4b4, 0xd1fc4e60, 0xc939182c, 0x15aa9626, 0x0d6fc06a, 0x24203abe, 0x3ce56cf2, 0x76bfcf16, 0x6e7a995a, 0x4735638e, 0x5ff035c2, 0xd3802446, 0xcb45720a, 0xe20a88de, 0xfacfde92, 0xb0957d76, 0xa8502b3a, 0x811fd1ee, 0x99da87a2, 0x4f9c42bb, 0x575914f7, 0x7e16ee23, 0x66d3b86f, 0x2c891b8b, 0x344c4dc7, 0x1d03b713, 0x05c6e15f, 0x89b6f0db, 0x9173a697, 0xb83c5c43, 0xa0f90a0f, 0xeaa3a9eb, 0xf266ffa7, 0xdb290573, 0xc3ec533f, 0xa1c73f1c, 0xb9026950, 0x904d9384, 0x8888c5c8, 0xc2d2662c, 0xda173060, 0xf358cab4, 0xeb9d9cf8, 0x67ed8d7c, 0x7f28db30, 0x566721e4, 0x4ea277a8, 0x04f8d44c, 0x1c3d8200, 0x357278d4, 0x2db72e98, 0xfbf1eb81, 0xe334bdcd, 0xca7b4719, 0xd2be1155, 0x98e4b2b1, 0x8021e4fd, 0xa96e1e29, 0xb1ab4865, 0x3ddb59e1, 0x251e0fad, 0x0c51f579, 0x1494a335, 0x5ece00d1, 0x460b569d, 0x6f44ac49, 0x7781fa05, ], [ 0x00000000, 0x14946d10, 0x2928da20, 0x3dbcb730, 0x5251b440, 0x46c5d950, 0x7b796e60, 0x6fed0370, 0xa4a36880, 0xb0370590, 0x8d8bb2a0, 0x991fdfb0, 0xf6f2dcc0, 0xe266b1d0, 0xdfda06e0, 0xcb4e6bf0, 0x9f25615d, 0x8bb10c4d, 0xb60dbb7d, 0xa299d66d, 0xcd74d51d, 0xd9e0b80d, 0xe45c0f3d, 0xf0c8622d, 0x3b8609dd, 0x2f1264cd, 0x12aed3fd, 0x063abeed, 0x69d7bd9d, 0x7d43d08d, 0x40ff67bd, 0x546b0aad, 0xe82972e7, 0xfcbd1ff7, 0xc101a8c7, 0xd595c5d7, 0xba78c6a7, 0xaeecabb7, 0x93501c87, 0x87c47197, 0x4c8a1a67, 0x581e7777, 0x65a2c047, 0x7136ad57, 0x1edbae27, 0x0a4fc337, 0x37f37407, 0x23671917, 0x770c13ba, 0x63987eaa, 0x5e24c99a, 0x4ab0a48a, 0x255da7fa, 0x31c9caea, 0x0c757dda, 0x18e110ca, 0xd3af7b3a, 0xc73b162a, 0xfa87a11a, 0xee13cc0a, 0x81fecf7a, 0x956aa26a, 0xa8d6155a, 0xbc42784a, 0x06315593, 0x12a53883, 0x2f198fb3, 0x3b8de2a3, 0x5460e1d3, 0x40f48cc3, 0x7d483bf3, 0x69dc56e3, 0xa2923d13, 0xb6065003, 0x8bbae733, 0x9f2e8a23, 0xf0c38953, 0xe457e443, 0xd9eb5373, 0xcd7f3e63, 0x991434ce, 0x8d8059de, 0xb03ceeee, 0xa4a883fe, 0xcb45808e, 0xdfd1ed9e, 0xe26d5aae, 0xf6f937be, 0x3db75c4e, 0x2923315e, 0x149f866e, 0x000beb7e, 0x6fe6e80e, 0x7b72851e, 0x46ce322e, 0x525a5f3e, 0xee182774, 0xfa8c4a64, 0xc730fd54, 0xd3a49044, 0xbc499334, 0xa8ddfe24, 0x95614914, 0x81f52404, 0x4abb4ff4, 0x5e2f22e4, 0x639395d4, 0x7707f8c4, 0x18eafbb4, 0x0c7e96a4, 0x31c22194, 0x25564c84, 0x713d4629, 0x65a92b39, 0x58159c09, 0x4c81f119, 0x236cf269, 0x37f89f79, 0x0a442849, 0x1ed04559, 0xd59e2ea9, 0xc10a43b9, 0xfcb6f489, 0xe8229999, 0x87cf9ae9, 0x935bf7f9, 0xaee740c9, 0xba732dd9, 0x0c62ab26, 0x18f6c636, 0x254a7106, 0x31de1c16, 0x5e331f66, 0x4aa77276, 0x771bc546, 0x638fa856, 0xa8c1c3a6, 0xbc55aeb6, 0x81e91986, 0x957d7496, 0xfa9077e6, 0xee041af6, 0xd3b8adc6, 0xc72cc0d6, 0x9347ca7b, 0x87d3a76b, 0xba6f105b, 0xaefb7d4b, 0xc1167e3b, 0xd582132b, 0xe83ea41b, 0xfcaac90b, 0x37e4a2fb, 0x2370cfeb, 0x1ecc78db, 0x0a5815cb, 0x65b516bb, 0x71217bab, 0x4c9dcc9b, 0x5809a18b, 0xe44bd9c1, 0xf0dfb4d1, 0xcd6303e1, 0xd9f76ef1, 0xb61a6d81, 0xa28e0091, 0x9f32b7a1, 0x8ba6dab1, 0x40e8b141, 0x547cdc51, 0x69c06b61, 0x7d540671, 0x12b90501, 0x062d6811, 0x3b91df21, 0x2f05b231, 0x7b6eb89c, 0x6ffad58c, 0x524662bc, 0x46d20fac, 0x293f0cdc, 0x3dab61cc, 0x0017d6fc, 0x1483bbec, 0xdfcdd01c, 0xcb59bd0c, 0xf6e50a3c, 0xe271672c, 0x8d9c645c, 0x9908094c, 0xa4b4be7c, 0xb020d36c, 0x0a53feb5, 0x1ec793a5, 0x237b2495, 0x37ef4985, 0x58024af5, 0x4c9627e5, 0x712a90d5, 0x65befdc5, 0xaef09635, 0xba64fb25, 0x87d84c15, 0x934c2105, 0xfca12275, 0xe8354f65, 0xd589f855, 0xc11d9545, 0x95769fe8, 0x81e2f2f8, 0xbc5e45c8, 0xa8ca28d8, 0xc7272ba8, 0xd3b346b8, 0xee0ff188, 0xfa9b9c98, 0x31d5f768, 0x25419a78, 0x18fd2d48, 0x0c694058, 0x63844328, 0x77102e38, 0x4aac9908, 0x5e38f418, 0xe27a8c52, 0xf6eee142, 0xcb525672, 0xdfc63b62, 0xb02b3812, 0xa4bf5502, 0x9903e232, 0x8d978f22, 0x46d9e4d2, 0x524d89c2, 0x6ff13ef2, 0x7b6553e2, 0x14885092, 0x001c3d82, 0x3da08ab2, 0x2934e7a2, 0x7d5fed0f, 0x69cb801f, 0x5477372f, 0x40e35a3f, 0x2f0e594f, 0x3b9a345f, 0x0626836f, 0x12b2ee7f, 0xd9fc858f, 0xcd68e89f, 0xf0d45faf, 0xe44032bf, 0x8bad31cf, 0x9f395cdf, 0xa285ebef, 0xb61186ff, ], [ 0x00000000, 0x83db9b51, 0xd1d486ff, 0x520f1dae, 0x75cabda3, 0xf61126f2, 0xa41e3b5c, 0x27c5a00d, 0xeb957b46, 0x684ee017, 0x3a41fdb9, 0xb99a66e8, 0x9e5fc6e5, 0x1d845db4, 0x4f8b401a, 0xcc50db4b, 0x014946d1, 0x8292dd80, 0xd09dc02e, 0x53465b7f, 0x7483fb72, 0xf7586023, 0xa5577d8d, 0x268ce6dc, 0xeadc3d97, 0x6907a6c6, 0x3b08bb68, 0xb8d32039, 0x9f168034, 0x1ccd1b65, 0x4ec206cb, 0xcd199d9a, 0x02928da2, 0x814916f3, 0xd3460b5d, 0x509d900c, 0x77583001, 0xf483ab50, 0xa68cb6fe, 0x25572daf, 0xe907f6e4, 0x6adc6db5, 0x38d3701b, 0xbb08eb4a, 0x9ccd4b47, 0x1f16d016, 0x4d19cdb8, 0xcec256e9, 0x03dbcb73, 0x80005022, 0xd20f4d8c, 0x51d4d6dd, 0x761176d0, 0xf5caed81, 0xa7c5f02f, 0x241e6b7e, 0xe84eb035, 0x6b952b64, 0x399a36ca, 0xba41ad9b, 0x9d840d96, 0x1e5f96c7, 0x4c508b69, 0xcf8b1038, 0x05251b44, 0x86fe8015, 0xd4f19dbb, 0x572a06ea, 0x70efa6e7, 0xf3343db6, 0xa13b2018, 0x22e0bb49, 0xeeb06002, 0x6d6bfb53, 0x3f64e6fd, 0xbcbf7dac, 0x9b7adda1, 0x18a146f0, 0x4aae5b5e, 0xc975c00f, 0x046c5d95, 0x87b7c6c4, 0xd5b8db6a, 0x5663403b, 0x71a6e036, 0xf27d7b67, 0xa07266c9, 0x23a9fd98, 0xeff926d3, 0x6c22bd82, 0x3e2da02c, 0xbdf63b7d, 0x9a339b70, 0x19e80021, 0x4be71d8f, 0xc83c86de, 0x07b796e6, 0x846c0db7, 0xd6631019, 0x55b88b48, 0x727d2b45, 0xf1a6b014, 0xa3a9adba, 0x207236eb, 0xec22eda0, 0x6ff976f1, 0x3df66b5f, 0xbe2df00e, 0x99e85003, 0x1a33cb52, 0x483cd6fc, 0xcbe74dad, 0x06fed037, 0x85254b66, 0xd72a56c8, 0x54f1cd99, 0x73346d94, 0xf0eff6c5, 0xa2e0eb6b, 0x213b703a, 0xed6bab71, 0x6eb03020, 0x3cbf2d8e, 0xbf64b6df, 0x98a116d2, 0x1b7a8d83, 0x4975902d, 0xcaae0b7c, 0x0a4a3688, 0x8991add9, 0xdb9eb077, 0x58452b26, 0x7f808b2b, 0xfc5b107a, 0xae540dd4, 0x2d8f9685, 0xe1df4dce, 0x6204d69f, 0x300bcb31, 0xb3d05060, 0x9415f06d, 0x17ce6b3c, 0x45c17692, 0xc61aedc3, 0x0b037059, 0x88d8eb08, 0xdad7f6a6, 0x590c6df7, 0x7ec9cdfa, 0xfd1256ab, 0xaf1d4b05, 0x2cc6d054, 0xe0960b1f, 0x634d904e, 0x31428de0, 0xb29916b1, 0x955cb6bc, 0x16872ded, 0x44883043, 0xc753ab12, 0x08d8bb2a, 0x8b03207b, 0xd90c3dd5, 0x5ad7a684, 0x7d120689, 0xfec99dd8, 0xacc68076, 0x2f1d1b27, 0xe34dc06c, 0x60965b3d, 0x32994693, 0xb142ddc2, 0x96877dcf, 0x155ce69e, 0x4753fb30, 0xc4886061, 0x0991fdfb, 0x8a4a66aa, 0xd8457b04, 0x5b9ee055, 0x7c5b4058, 0xff80db09, 0xad8fc6a7, 0x2e545df6, 0xe20486bd, 0x61df1dec, 0x33d00042, 0xb00b9b13, 0x97ce3b1e, 0x1415a04f, 0x461abde1, 0xc5c126b0, 0x0f6f2dcc, 0x8cb4b69d, 0xdebbab33, 0x5d603062, 0x7aa5906f, 0xf97e0b3e, 0xab711690, 0x28aa8dc1, 0xe4fa568a, 0x6721cddb, 0x352ed075, 0xb6f54b24, 0x9130eb29, 0x12eb7078, 0x40e46dd6, 0xc33ff687, 0x0e266b1d, 0x8dfdf04c, 0xdff2ede2, 0x5c2976b3, 0x7becd6be, 0xf8374def, 0xaa385041, 0x29e3cb10, 0xe5b3105b, 0x66688b0a, 0x346796a4, 0xb7bc0df5, 0x9079adf8, 0x13a236a9, 0x41ad2b07, 0xc276b056, 0x0dfda06e, 0x8e263b3f, 0xdc292691, 0x5ff2bdc0, 0x78371dcd, 0xfbec869c, 0xa9e39b32, 0x2a380063, 0xe668db28, 0x65b34079, 0x37bc5dd7, 0xb467c686, 0x93a2668b, 0x1079fdda, 0x4276e074, 0xc1ad7b25, 0x0cb4e6bf, 0x8f6f7dee, 0xdd606040, 0x5ebbfb11, 0x797e5b1c, 0xfaa5c04d, 0xa8aadde3, 0x2b7146b2, 0xe7219df9, 0x64fa06a8, 0x36f51b06, 0xb52e8057, 0x92eb205a, 0x1130bb0b, 0x433fa6a5, 0xc0e43df4, ], [ 0x00000000, 0x6041fc7a, 0xc083f8f4, 0xa0c2048e, 0x576441b5, 0x3725bdcf, 0x97e7b941, 0xf7a6453b, 0xaec8836a, 0xce897f10, 0x6e4b7b9e, 0x0e0a87e4, 0xf9acc2df, 0x99ed3ea5, 0x392f3a2b, 0x596ec651, 0x8bf2b689, 0xebb34af3, 0x4b714e7d, 0x2b30b207, 0xdc96f73c, 0xbcd70b46, 0x1c150fc8, 0x7c54f3b2, 0x253a35e3, 0x457bc999, 0xe5b9cd17, 0x85f8316d, 0x725e7456, 0x121f882c, 0xb2dd8ca2, 0xd29c70d8, 0xc186dd4f, 0xa1c72135, 0x010525bb, 0x6144d9c1, 0x96e29cfa, 0xf6a36080, 0x5661640e, 0x36209874, 0x6f4e5e25, 0x0f0fa25f, 0xafcda6d1, 0xcf8c5aab, 0x382a1f90, 0x586be3ea, 0xf8a9e764, 0x98e81b1e, 0x4a746bc6, 0x2a3597bc, 0x8af79332, 0xeab66f48, 0x1d102a73, 0x7d51d609, 0xdd93d287, 0xbdd22efd, 0xe4bce8ac, 0x84fd14d6, 0x243f1058, 0x447eec22, 0xb3d8a919, 0xd3995563, 0x735b51ed, 0x131aad97, 0x556e0ac3, 0x352ff6b9, 0x95edf237, 0xf5ac0e4d, 0x020a4b76, 0x624bb70c, 0xc289b382, 0xa2c84ff8, 0xfba689a9, 0x9be775d3, 0x3b25715d, 0x5b648d27, 0xacc2c81c, 0xcc833466, 0x6c4130e8, 0x0c00cc92, 0xde9cbc4a, 0xbedd4030, 0x1e1f44be, 0x7e5eb8c4, 0x89f8fdff, 0xe9b90185, 0x497b050b, 0x293af971, 0x70543f20, 0x1015c35a, 0xb0d7c7d4, 0xd0963bae, 0x27307e95, 0x477182ef, 0xe7b38661, 0x87f27a1b, 0x94e8d78c, 0xf4a92bf6, 0x546b2f78, 0x342ad302, 0xc38c9639, 0xa3cd6a43, 0x030f6ecd, 0x634e92b7, 0x3a2054e6, 0x5a61a89c, 0xfaa3ac12, 0x9ae25068, 0x6d441553, 0x0d05e929, 0xadc7eda7, 0xcd8611dd, 0x1f1a6105, 0x7f5b9d7f, 0xdf9999f1, 0xbfd8658b, 0x487e20b0, 0x283fdcca, 0x88fdd844, 0xe8bc243e, 0xb1d2e26f, 0xd1931e15, 0x71511a9b, 0x1110e6e1, 0xe6b6a3da, 0x86f75fa0, 0x26355b2e, 0x4674a754, 0xaadc1586, 0xca9de9fc, 0x6a5fed72, 0x0a1e1108, 0xfdb85433, 0x9df9a849, 0x3d3bacc7, 0x5d7a50bd, 0x041496ec, 0x64556a96, 0xc4976e18, 0xa4d69262, 0x5370d759, 0x33312b23, 0x93f32fad, 0xf3b2d3d7, 0x212ea30f, 0x416f5f75, 0xe1ad5bfb, 0x81eca781, 0x764ae2ba, 0x160b1ec0, 0xb6c91a4e, 0xd688e634, 0x8fe62065, 0xefa7dc1f, 0x4f65d891, 0x2f2424eb, 0xd88261d0, 0xb8c39daa, 0x18019924, 0x7840655e, 0x6b5ac8c9, 0x0b1b34b3, 0xabd9303d, 0xcb98cc47, 0x3c3e897c, 0x5c7f7506, 0xfcbd7188, 0x9cfc8df2, 0xc5924ba3, 0xa5d3b7d9, 0x0511b357, 0x65504f2d, 0x92f60a16, 0xf2b7f66c, 0x5275f2e2, 0x32340e98, 0xe0a87e40, 0x80e9823a, 0x202b86b4, 0x406a7ace, 0xb7cc3ff5, 0xd78dc38f, 0x774fc701, 0x170e3b7b, 0x4e60fd2a, 0x2e210150, 0x8ee305de, 0xeea2f9a4, 0x1904bc9f, 0x794540e5, 0xd987446b, 0xb9c6b811, 0xffb21f45, 0x9ff3e33f, 0x3f31e7b1, 0x5f701bcb, 0xa8d65ef0, 0xc897a28a, 0x6855a604, 0x08145a7e, 0x517a9c2f, 0x313b6055, 0x91f964db, 0xf1b898a1, 0x061edd9a, 0x665f21e0, 0xc69d256e, 0xa6dcd914, 0x7440a9cc, 0x140155b6, 0xb4c35138, 0xd482ad42, 0x2324e879, 0x43651403, 0xe3a7108d, 0x83e6ecf7, 0xda882aa6, 0xbac9d6dc, 0x1a0bd252, 0x7a4a2e28, 0x8dec6b13, 0xedad9769, 0x4d6f93e7, 0x2d2e6f9d, 0x3e34c20a, 0x5e753e70, 0xfeb73afe, 0x9ef6c684, 0x695083bf, 0x09117fc5, 0xa9d37b4b, 0xc9928731, 0x90fc4160, 0xf0bdbd1a, 0x507fb994, 0x303e45ee, 0xc79800d5, 0xa7d9fcaf, 0x071bf821, 0x675a045b, 0xb5c67483, 0xd58788f9, 0x75458c77, 0x1504700d, 0xe2a23536, 0x82e3c94c, 0x2221cdc2, 0x426031b8, 0x1b0ef7e9, 0x7b4f0b93, 0xdb8d0f1d, 0xbbccf367, 0x4c6ab65c, 0x2c2b4a26, 0x8ce94ea8, 0xeca8b2d2, ], [ 0x00000000, 0x9d65b2a5, 0xeca8d517, 0x71cd67b2, 0x0f321a73, 0x9257a8d6, 0xe39acf64, 0x7eff7dc1, 0x1e6434e6, 0x83018643, 0xf2cce1f1, 0x6fa95354, 0x11562e95, 0x8c339c30, 0xfdfefb82, 0x609b4927, 0x3cc869cc, 0xa1addb69, 0xd060bcdb, 0x4d050e7e, 0x33fa73bf, 0xae9fc11a, 0xdf52a6a8, 0x4237140d, 0x22ac5d2a, 0xbfc9ef8f, 0xce04883d, 0x53613a98, 0x2d9e4759, 0xb0fbf5fc, 0xc136924e, 0x5c5320eb, 0x7990d398, 0xe4f5613d, 0x9538068f, 0x085db42a, 0x76a2c9eb, 0xebc77b4e, 0x9a0a1cfc, 0x076fae59, 0x67f4e77e, 0xfa9155db, 0x8b5c3269, 0x163980cc, 0x68c6fd0d, 0xf5a34fa8, 0x846e281a, 0x190b9abf, 0x4558ba54, 0xd83d08f1, 0xa9f06f43, 0x3495dde6, 0x4a6aa027, 0xd70f1282, 0xa6c27530, 0x3ba7c795, 0x5b3c8eb2, 0xc6593c17, 0xb7945ba5, 0x2af1e900, 0x540e94c1, 0xc96b2664, 0xb8a641d6, 0x25c3f373, 0xf321a730, 0x6e441595, 0x1f897227, 0x82ecc082, 0xfc13bd43, 0x61760fe6, 0x10bb6854, 0x8ddedaf1, 0xed4593d6, 0x70202173, 0x01ed46c1, 0x9c88f464, 0xe27789a5, 0x7f123b00, 0x0edf5cb2, 0x93baee17, 0xcfe9cefc, 0x528c7c59, 0x23411beb, 0xbe24a94e, 0xc0dbd48f, 0x5dbe662a, 0x2c730198, 0xb116b33d, 0xd18dfa1a, 0x4ce848bf, 0x3d252f0d, 0xa0409da8, 0xdebfe069, 0x43da52cc, 0x3217357e, 0xaf7287db, 0x8ab174a8, 0x17d4c60d, 0x6619a1bf, 0xfb7c131a, 0x85836edb, 0x18e6dc7e, 0x692bbbcc, 0xf44e0969, 0x94d5404e, 0x09b0f2eb, 0x787d9559, 0xe51827fc, 0x9be75a3d, 0x0682e898, 0x774f8f2a, 0xea2a3d8f, 0xb6791d64, 0x2b1cafc1, 0x5ad1c873, 0xc7b47ad6, 0xb94b0717, 0x242eb5b2, 0x55e3d200, 0xc88660a5, 0xa81d2982, 0x35789b27, 0x44b5fc95, 0xd9d04e30, 0xa72f33f1, 0x3a4a8154, 0x4b87e6e6, 0xd6e25443, 0x3020fe3d, 0xad454c98, 0xdc882b2a, 0x41ed998f, 0x3f12e44e, 0xa27756eb, 0xd3ba3159, 0x4edf83fc, 0x2e44cadb, 0xb321787e, 0xc2ec1fcc, 0x5f89ad69, 0x2176d0a8, 0xbc13620d, 0xcdde05bf, 0x50bbb71a, 0x0ce897f1, 0x918d2554, 0xe04042e6, 0x7d25f043, 0x03da8d82, 0x9ebf3f27, 0xef725895, 0x7217ea30, 0x128ca317, 0x8fe911b2, 0xfe247600, 0x6341c4a5, 0x1dbeb964, 0x80db0bc1, 0xf1166c73, 0x6c73ded6, 0x49b02da5, 0xd4d59f00, 0xa518f8b2, 0x387d4a17, 0x468237d6, 0xdbe78573, 0xaa2ae2c1, 0x374f5064, 0x57d41943, 0xcab1abe6, 0xbb7ccc54, 0x26197ef1, 0x58e60330, 0xc583b195, 0xb44ed627, 0x292b6482, 0x75784469, 0xe81df6cc, 0x99d0917e, 0x04b523db, 0x7a4a5e1a, 0xe72fecbf, 0x96e28b0d, 0x0b8739a8, 0x6b1c708f, 0xf679c22a, 0x87b4a598, 0x1ad1173d, 0x642e6afc, 0xf94bd859, 0x8886bfeb, 0x15e30d4e, 0xc301590d, 0x5e64eba8, 0x2fa98c1a, 0xb2cc3ebf, 0xcc33437e, 0x5156f1db, 0x209b9669, 0xbdfe24cc, 0xdd656deb, 0x4000df4e, 0x31cdb8fc, 0xaca80a59, 0xd2577798, 0x4f32c53d, 0x3effa28f, 0xa39a102a, 0xffc930c1, 0x62ac8264, 0x1361e5d6, 0x8e045773, 0xf0fb2ab2, 0x6d9e9817, 0x1c53ffa5, 0x81364d00, 0xe1ad0427, 0x7cc8b682, 0x0d05d130, 0x90606395, 0xee9f1e54, 0x73faacf1, 0x0237cb43, 0x9f5279e6, 0xba918a95, 0x27f43830, 0x56395f82, 0xcb5ced27, 0xb5a390e6, 0x28c62243, 0x590b45f1, 0xc46ef754, 0xa4f5be73, 0x39900cd6, 0x485d6b64, 0xd538d9c1, 0xabc7a400, 0x36a216a5, 0x476f7117, 0xda0ac3b2, 0x8659e359, 0x1b3c51fc, 0x6af1364e, 0xf79484eb, 0x896bf92a, 0x140e4b8f, 0x65c32c3d, 0xf8a69e98, 0x983dd7bf, 0x0558651a, 0x749502a8, 0xe9f0b00d, 0x970fcdcc, 0x0a6a7f69, 0x7ba718db, 0xe6c2aa7e, ], [ 0x00000000, 0x8c3714bc, 0xce0d9925, 0x423a8d99, 0x4a788217, 0xc64f96ab, 0x84751b32, 0x08420f8e, 0x94f1042e, 0x18c61092, 0x5afc9d0b, 0xd6cb89b7, 0xde898639, 0x52be9285, 0x10841f1c, 0x9cb30ba0, 0xff81b801, 0x73b6acbd, 0x318c2124, 0xbdbb3598, 0xb5f93a16, 0x39ce2eaa, 0x7bf4a333, 0xf7c3b78f, 0x6b70bc2f, 0xe747a893, 0xa57d250a, 0x294a31b6, 0x21083e38, 0xad3f2a84, 0xef05a71d, 0x6332b3a1, 0x2960c05f, 0xa557d4e3, 0xe76d597a, 0x6b5a4dc6, 0x63184248, 0xef2f56f4, 0xad15db6d, 0x2122cfd1, 0xbd91c471, 0x31a6d0cd, 0x739c5d54, 0xffab49e8, 0xf7e94666, 0x7bde52da, 0x39e4df43, 0xb5d3cbff, 0xd6e1785e, 0x5ad66ce2, 0x18ece17b, 0x94dbf5c7, 0x9c99fa49, 0x10aeeef5, 0x5294636c, 0xdea377d0, 0x42107c70, 0xce2768cc, 0x8c1de555, 0x002af1e9, 0x0868fe67, 0x845feadb, 0xc6656742, 0x4a5273fe, 0x52c180be, 0xdef69402, 0x9ccc199b, 0x10fb0d27, 0x18b902a9, 0x948e1615, 0xd6b49b8c, 0x5a838f30, 0xc6308490, 0x4a07902c, 0x083d1db5, 0x840a0909, 0x8c480687, 0x007f123b, 0x42459fa2, 0xce728b1e, 0xad4038bf, 0x21772c03, 0x634da19a, 0xef7ab526, 0xe738baa8, 0x6b0fae14, 0x2935238d, 0xa5023731, 0x39b13c91, 0xb586282d, 0xf7bca5b4, 0x7b8bb108, 0x73c9be86, 0xfffeaa3a, 0xbdc427a3, 0x31f3331f, 0x7ba140e1, 0xf796545d, 0xb5acd9c4, 0x399bcd78, 0x31d9c2f6, 0xbdeed64a, 0xffd45bd3, 0x73e34f6f, 0xef5044cf, 0x63675073, 0x215dddea, 0xad6ac956, 0xa528c6d8, 0x291fd264, 0x6b255ffd, 0xe7124b41, 0x8420f8e0, 0x0817ec5c, 0x4a2d61c5, 0xc61a7579, 0xce587af7, 0x426f6e4b, 0x0055e3d2, 0x8c62f76e, 0x10d1fcce, 0x9ce6e872, 0xdedc65eb, 0x52eb7157, 0x5aa97ed9, 0xd69e6a65, 0x94a4e7fc, 0x1893f340, 0xa583017c, 0x29b415c0, 0x6b8e9859, 0xe7b98ce5, 0xeffb836b, 0x63cc97d7, 0x21f61a4e, 0xadc10ef2, 0x31720552, 0xbd4511ee, 0xff7f9c77, 0x734888cb, 0x7b0a8745, 0xf73d93f9, 0xb5071e60, 0x39300adc, 0x5a02b97d, 0xd635adc1, 0x940f2058, 0x183834e4, 0x107a3b6a, 0x9c4d2fd6, 0xde77a24f, 0x5240b6f3, 0xcef3bd53, 0x42c4a9ef, 0x00fe2476, 0x8cc930ca, 0x848b3f44, 0x08bc2bf8, 0x4a86a661, 0xc6b1b2dd, 0x8ce3c123, 0x00d4d59f, 0x42ee5806, 0xced94cba, 0xc69b4334, 0x4aac5788, 0x0896da11, 0x84a1cead, 0x1812c50d, 0x9425d1b1, 0xd61f5c28, 0x5a284894, 0x526a471a, 0xde5d53a6, 0x9c67de3f, 0x1050ca83, 0x73627922, 0xff556d9e, 0xbd6fe007, 0x3158f4bb, 0x391afb35, 0xb52def89, 0xf7176210, 0x7b2076ac, 0xe7937d0c, 0x6ba469b0, 0x299ee429, 0xa5a9f095, 0xadebff1b, 0x21dceba7, 0x63e6663e, 0xefd17282, 0xf74281c2, 0x7b75957e, 0x394f18e7, 0xb5780c5b, 0xbd3a03d5, 0x310d1769, 0x73379af0, 0xff008e4c, 0x63b385ec, 0xef849150, 0xadbe1cc9, 0x21890875, 0x29cb07fb, 0xa5fc1347, 0xe7c69ede, 0x6bf18a62, 0x08c339c3, 0x84f42d7f, 0xc6cea0e6, 0x4af9b45a, 0x42bbbbd4, 0xce8caf68, 0x8cb622f1, 0x0081364d, 0x9c323ded, 0x10052951, 0x523fa4c8, 0xde08b074, 0xd64abffa, 0x5a7dab46, 0x184726df, 0x94703263, 0xde22419d, 0x52155521, 0x102fd8b8, 0x9c18cc04, 0x945ac38a, 0x186dd736, 0x5a575aaf, 0xd6604e13, 0x4ad345b3, 0xc6e4510f, 0x84dedc96, 0x08e9c82a, 0x00abc7a4, 0x8c9cd318, 0xcea65e81, 0x42914a3d, 0x21a3f99c, 0xad94ed20, 0xefae60b9, 0x63997405, 0x6bdb7b8b, 0xe7ec6f37, 0xa5d6e2ae, 0x29e1f612, 0xb552fdb2, 0x3965e90e, 0x7b5f6497, 0xf768702b, 0xff2a7fa5, 0x731d6b19, 0x3127e680, 0xbd10f23c, ], [ 0x00000000, 0xd89b0a72, 0x6755a4b9, 0xbfceaecb, 0xceab4972, 0x16304300, 0xa9feedcb, 0x7165e7b9, 0x4b3522b9, 0x93ae28cb, 0x2c608600, 0xf4fb8c72, 0x859e6bcb, 0x5d0561b9, 0xe2cbcf72, 0x3a50c500, 0x966a4572, 0x4ef14f00, 0xf13fe1cb, 0x29a4ebb9, 0x58c10c00, 0x805a0672, 0x3f94a8b9, 0xe70fa2cb, 0xdd5f67cb, 0x05c46db9, 0xba0ac372, 0x6291c900, 0x13f42eb9, 0xcb6f24cb, 0x74a18a00, 0xac3a8072, 0xfab73ab9, 0x222c30cb, 0x9de29e00, 0x45799472, 0x341c73cb, 0xec8779b9, 0x5349d772, 0x8bd2dd00, 0xb1821800, 0x69191272, 0xd6d7bcb9, 0x0e4cb6cb, 0x7f295172, 0xa7b25b00, 0x187cf5cb, 0xc0e7ffb9, 0x6cdd7fcb, 0xb44675b9, 0x0b88db72, 0xd313d100, 0xa27636b9, 0x7aed3ccb, 0xc5239200, 0x1db89872, 0x27e85d72, 0xff735700, 0x40bdf9cb, 0x9826f3b9, 0xe9431400, 0x31d81e72, 0x8e16b0b9, 0x568dbacb, 0x230dc52f, 0xfb96cf5d, 0x44586196, 0x9cc36be4, 0xeda68c5d, 0x353d862f, 0x8af328e4, 0x52682296, 0x6838e796, 0xb0a3ede4, 0x0f6d432f, 0xd7f6495d, 0xa693aee4, 0x7e08a496, 0xc1c60a5d, 0x195d002f, 0xb567805d, 0x6dfc8a2f, 0xd23224e4, 0x0aa92e96, 0x7bccc92f, 0xa357c35d, 0x1c996d96, 0xc40267e4, 0xfe52a2e4, 0x26c9a896, 0x9907065d, 0x419c0c2f, 0x30f9eb96, 0xe862e1e4, 0x57ac4f2f, 0x8f37455d, 0xd9baff96, 0x0121f5e4, 0xbeef5b2f, 0x6674515d, 0x1711b6e4, 0xcf8abc96, 0x7044125d, 0xa8df182f, 0x928fdd2f, 0x4a14d75d, 0xf5da7996, 0x2d4173e4, 0x5c24945d, 0x84bf9e2f, 0x3b7130e4, 0xe3ea3a96, 0x4fd0bae4, 0x974bb096, 0x28851e5d, 0xf01e142f, 0x817bf396, 0x59e0f9e4, 0xe62e572f, 0x3eb55d5d, 0x04e5985d, 0xdc7e922f, 0x63b03ce4, 0xbb2b3696, 0xca4ed12f, 0x12d5db5d, 0xad1b7596, 0x75807fe4, 0x461b8a5e, 0x9e80802c, 0x214e2ee7, 0xf9d52495, 0x88b0c32c, 0x502bc95e, 0xefe56795, 0x377e6de7, 0x0d2ea8e7, 0xd5b5a295, 0x6a7b0c5e, 0xb2e0062c, 0xc385e195, 0x1b1eebe7, 0xa4d0452c, 0x7c4b4f5e, 0xd071cf2c, 0x08eac55e, 0xb7246b95, 0x6fbf61e7, 0x1eda865e, 0xc6418c2c, 0x798f22e7, 0xa1142895, 0x9b44ed95, 0x43dfe7e7, 0xfc11492c, 0x248a435e, 0x55efa4e7, 0x8d74ae95, 0x32ba005e, 0xea210a2c, 0xbcacb0e7, 0x6437ba95, 0xdbf9145e, 0x03621e2c, 0x7207f995, 0xaa9cf3e7, 0x15525d2c, 0xcdc9575e, 0xf799925e, 0x2f02982c, 0x90cc36e7, 0x48573c95, 0x3932db2c, 0xe1a9d15e, 0x5e677f95, 0x86fc75e7, 0x2ac6f595, 0xf25dffe7, 0x4d93512c, 0x95085b5e, 0xe46dbce7, 0x3cf6b695, 0x8338185e, 0x5ba3122c, 0x61f3d72c, 0xb968dd5e, 0x06a67395, 0xde3d79e7, 0xaf589e5e, 0x77c3942c, 0xc80d3ae7, 0x10963095, 0x65164f71, 0xbd8d4503, 0x0243ebc8, 0xdad8e1ba, 0xabbd0603, 0x73260c71, 0xcce8a2ba, 0x1473a8c8, 0x2e236dc8, 0xf6b867ba, 0x4976c971, 0x91edc303, 0xe08824ba, 0x38132ec8, 0x87dd8003, 0x5f468a71, 0xf37c0a03, 0x2be70071, 0x9429aeba, 0x4cb2a4c8, 0x3dd74371, 0xe54c4903, 0x5a82e7c8, 0x8219edba, 0xb84928ba, 0x60d222c8, 0xdf1c8c03, 0x07878671, 0x76e261c8, 0xae796bba, 0x11b7c571, 0xc92ccf03, 0x9fa175c8, 0x473a7fba, 0xf8f4d171, 0x206fdb03, 0x510a3cba, 0x899136c8, 0x365f9803, 0xeec49271, 0xd4945771, 0x0c0f5d03, 0xb3c1f3c8, 0x6b5af9ba, 0x1a3f1e03, 0xc2a41471, 0x7d6ababa, 0xa5f1b0c8, 0x09cb30ba, 0xd1503ac8, 0x6e9e9403, 0xb6059e71, 0xc76079c8, 0x1ffb73ba, 0xa035dd71, 0x78aed703, 0x42fe1203, 0x9a651871, 0x25abb6ba, 0xfd30bcc8, 0x8c555b71, 0x54ce5103, 0xeb00ffc8, 0x339bf5ba, ], [ 0x00000000, 0xdc3aefcd, 0x6e166fc7, 0xb22c800a, 0xdc2cdf8e, 0x00163043, 0xb23ab049, 0x6e005f84, 0x6e3a0f41, 0xb200e08c, 0x002c6086, 0xdc168f4b, 0xb216d0cf, 0x6e2c3f02, 0xdc00bf08, 0x003a50c5, 0xdc741e82, 0x004ef14f, 0xb2627145, 0x6e589e88, 0x0058c10c, 0xdc622ec1, 0x6e4eaecb, 0xb2744106, 0xb24e11c3, 0x6e74fe0e, 0xdc587e04, 0x006291c9, 0x6e62ce4d, 0xb2582180, 0x0074a18a, 0xdc4e4e47, 0x6e8b8d59, 0xb2b16294, 0x009de29e, 0xdca70d53, 0xb2a752d7, 0x6e9dbd1a, 0xdcb13d10, 0x008bd2dd, 0x00b18218, 0xdc8b6dd5, 0x6ea7eddf, 0xb29d0212, 0xdc9d5d96, 0x00a7b25b, 0xb28b3251, 0x6eb1dd9c, 0xb2ff93db, 0x6ec57c16, 0xdce9fc1c, 0x00d313d1, 0x6ed34c55, 0xb2e9a398, 0x00c52392, 0xdcffcc5f, 0xdcc59c9a, 0x00ff7357, 0xb2d3f35d, 0x6ee91c90, 0x00e94314, 0xdcd3acd9, 0x6eff2cd3, 0xb2c5c31e, 0xdd171ab2, 0x012df57f, 0xb3017575, 0x6f3b9ab8, 0x013bc53c, 0xdd012af1, 0x6f2daafb, 0xb3174536, 0xb32d15f3, 0x6f17fa3e, 0xdd3b7a34, 0x010195f9, 0x6f01ca7d, 0xb33b25b0, 0x0117a5ba, 0xdd2d4a77, 0x01630430, 0xdd59ebfd, 0x6f756bf7, 0xb34f843a, 0xdd4fdbbe, 0x01753473, 0xb359b479, 0x6f635bb4, 0x6f590b71, 0xb363e4bc, 0x014f64b6, 0xdd758b7b, 0xb375d4ff, 0x6f4f3b32, 0xdd63bb38, 0x015954f5, 0xb39c97eb, 0x6fa67826, 0xdd8af82c, 0x01b017e1, 0x6fb04865, 0xb38aa7a8, 0x01a627a2, 0xdd9cc86f, 0xdda698aa, 0x019c7767, 0xb3b0f76d, 0x6f8a18a0, 0x018a4724, 0xddb0a8e9, 0x6f9c28e3, 0xb3a6c72e, 0x6fe88969, 0xb3d266a4, 0x01fee6ae, 0xddc40963, 0xb3c456e7, 0x6ffeb92a, 0xddd23920, 0x01e8d6ed, 0x01d28628, 0xdde869e5, 0x6fc4e9ef, 0xb3fe0622, 0xddfe59a6, 0x01c4b66b, 0xb3e83661, 0x6fd2d9ac, 0x6c4d8539, 0xb0776af4, 0x025beafe, 0xde610533, 0xb0615ab7, 0x6c5bb57a, 0xde773570, 0x024ddabd, 0x02778a78, 0xde4d65b5, 0x6c61e5bf, 0xb05b0a72, 0xde5b55f6, 0x0261ba3b, 0xb04d3a31, 0x6c77d5fc, 0xb0399bbb, 0x6c037476, 0xde2ff47c, 0x02151bb1, 0x6c154435, 0xb02fabf8, 0x02032bf2, 0xde39c43f, 0xde0394fa, 0x02397b37, 0xb015fb3d, 0x6c2f14f0, 0x022f4b74, 0xde15a4b9, 0x6c3924b3, 0xb003cb7e, 0x02c60860, 0xdefce7ad, 0x6cd067a7, 0xb0ea886a, 0xdeead7ee, 0x02d03823, 0xb0fcb829, 0x6cc657e4, 0x6cfc0721, 0xb0c6e8ec, 0x02ea68e6, 0xded0872b, 0xb0d0d8af, 0x6cea3762, 0xdec6b768, 0x02fc58a5, 0xdeb216e2, 0x0288f92f, 0xb0a47925, 0x6c9e96e8, 0x029ec96c, 0xdea426a1, 0x6c88a6ab, 0xb0b24966, 0xb08819a3, 0x6cb2f66e, 0xde9e7664, 0x02a499a9, 0x6ca4c62d, 0xb09e29e0, 0x02b2a9ea, 0xde884627, 0xb15a9f8b, 0x6d607046, 0xdf4cf04c, 0x03761f81, 0x6d764005, 0xb14cafc8, 0x03602fc2, 0xdf5ac00f, 0xdf6090ca, 0x035a7f07, 0xb176ff0d, 0x6d4c10c0, 0x034c4f44, 0xdf76a089, 0x6d5a2083, 0xb160cf4e, 0x6d2e8109, 0xb1146ec4, 0x0338eece, 0xdf020103, 0xb1025e87, 0x6d38b14a, 0xdf143140, 0x032ede8d, 0x03148e48, 0xdf2e6185, 0x6d02e18f, 0xb1380e42, 0xdf3851c6, 0x0302be0b, 0xb12e3e01, 0x6d14d1cc, 0xdfd112d2, 0x03ebfd1f, 0xb1c77d15, 0x6dfd92d8, 0x03fdcd5c, 0xdfc72291, 0x6deba29b, 0xb1d14d56, 0xb1eb1d93, 0x6dd1f25e, 0xdffd7254, 0x03c79d99, 0x6dc7c21d, 0xb1fd2dd0, 0x03d1adda, 0xdfeb4217, 0x03a50c50, 0xdf9fe39d, 0x6db36397, 0xb1898c5a, 0xdf89d3de, 0x03b33c13, 0xb19fbc19, 0x6da553d4, 0x6d9f0311, 0xb1a5ecdc, 0x03896cd6, 0xdfb3831b, 0xb1b3dc9f, 0x6d893352, 0xdfa5b358, 0x039f5c95, ], [ 0x00000000, 0x69f48e4d, 0xd3e91c9a, 0xba1d92d7, 0x71b18969, 0x18450724, 0xa25895f3, 0xcbac1bbe, 0xe36312d2, 0x8a979c9f, 0x308a0e48, 0x597e8005, 0x92d29bbb, 0xfb2615f6, 0x413b8721, 0x28cf096c, 0x10a595f9, 0x79511bb4, 0xc34c8963, 0xaab8072e, 0x61141c90, 0x08e092dd, 0xb2fd000a, 0xdb098e47, 0xf3c6872b, 0x9a320966, 0x202f9bb1, 0x49db15fc, 0x82770e42, 0xeb83800f, 0x519e12d8, 0x386a9c95, 0x214b2bf2, 0x48bfa5bf, 0xf2a23768, 0x9b56b925, 0x50faa29b, 0x390e2cd6, 0x8313be01, 0xeae7304c, 0xc2283920, 0xabdcb76d, 0x11c125ba, 0x7835abf7, 0xb399b049, 0xda6d3e04, 0x6070acd3, 0x0984229e, 0x31eebe0b, 0x581a3046, 0xe207a291, 0x8bf32cdc, 0x405f3762, 0x29abb92f, 0x93b62bf8, 0xfa42a5b5, 0xd28dacd9, 0xbb792294, 0x0164b043, 0x68903e0e, 0xa33c25b0, 0xcac8abfd, 0x70d5392a, 0x1921b767, 0x429657e4, 0x2b62d9a9, 0x917f4b7e, 0xf88bc533, 0x3327de8d, 0x5ad350c0, 0xe0cec217, 0x893a4c5a, 0xa1f54536, 0xc801cb7b, 0x721c59ac, 0x1be8d7e1, 0xd044cc5f, 0xb9b04212, 0x03add0c5, 0x6a595e88, 0x5233c21d, 0x3bc74c50, 0x81dade87, 0xe82e50ca, 0x23824b74, 0x4a76c539, 0xf06b57ee, 0x999fd9a3, 0xb150d0cf, 0xd8a45e82, 0x62b9cc55, 0x0b4d4218, 0xc0e159a6, 0xa915d7eb, 0x1308453c, 0x7afccb71, 0x63dd7c16, 0x0a29f25b, 0xb034608c, 0xd9c0eec1, 0x126cf57f, 0x7b987b32, 0xc185e9e5, 0xa87167a8, 0x80be6ec4, 0xe94ae089, 0x5357725e, 0x3aa3fc13, 0xf10fe7ad, 0x98fb69e0, 0x22e6fb37, 0x4b12757a, 0x7378e9ef, 0x1a8c67a2, 0xa091f575, 0xc9657b38, 0x02c96086, 0x6b3deecb, 0xd1207c1c, 0xb8d4f251, 0x901bfb3d, 0xf9ef7570, 0x43f2e7a7, 0x2a0669ea, 0xe1aa7254, 0x885efc19, 0x32436ece, 0x5bb7e083, 0x852cafc8, 0xecd82185, 0x56c5b352, 0x3f313d1f, 0xf49d26a1, 0x9d69a8ec, 0x27743a3b, 0x4e80b476, 0x664fbd1a, 0x0fbb3357, 0xb5a6a180, 0xdc522fcd, 0x17fe3473, 0x7e0aba3e, 0xc41728e9, 0xade3a6a4, 0x95893a31, 0xfc7db47c, 0x466026ab, 0x2f94a8e6, 0xe438b358, 0x8dcc3d15, 0x37d1afc2, 0x5e25218f, 0x76ea28e3, 0x1f1ea6ae, 0xa5033479, 0xccf7ba34, 0x075ba18a, 0x6eaf2fc7, 0xd4b2bd10, 0xbd46335d, 0xa467843a, 0xcd930a77, 0x778e98a0, 0x1e7a16ed, 0xd5d60d53, 0xbc22831e, 0x063f11c9, 0x6fcb9f84, 0x470496e8, 0x2ef018a5, 0x94ed8a72, 0xfd19043f, 0x36b51f81, 0x5f4191cc, 0xe55c031b, 0x8ca88d56, 0xb4c211c3, 0xdd369f8e, 0x672b0d59, 0x0edf8314, 0xc57398aa, 0xac8716e7, 0x169a8430, 0x7f6e0a7d, 0x57a10311, 0x3e558d5c, 0x84481f8b, 0xedbc91c6, 0x26108a78, 0x4fe40435, 0xf5f996e2, 0x9c0d18af, 0xc7baf82c, 0xae4e7661, 0x1453e4b6, 0x7da76afb, 0xb60b7145, 0xdfffff08, 0x65e26ddf, 0x0c16e392, 0x24d9eafe, 0x4d2d64b3, 0xf730f664, 0x9ec47829, 0x55686397, 0x3c9cedda, 0x86817f0d, 0xef75f140, 0xd71f6dd5, 0xbeebe398, 0x04f6714f, 0x6d02ff02, 0xa6aee4bc, 0xcf5a6af1, 0x7547f826, 0x1cb3766b, 0x347c7f07, 0x5d88f14a, 0xe795639d, 0x8e61edd0, 0x45cdf66e, 0x2c397823, 0x9624eaf4, 0xffd064b9, 0xe6f1d3de, 0x8f055d93, 0x3518cf44, 0x5cec4109, 0x97405ab7, 0xfeb4d4fa, 0x44a9462d, 0x2d5dc860, 0x0592c10c, 0x6c664f41, 0xd67bdd96, 0xbf8f53db, 0x74234865, 0x1dd7c628, 0xa7ca54ff, 0xce3edab2, 0xf6544627, 0x9fa0c86a, 0x25bd5abd, 0x4c49d4f0, 0x87e5cf4e, 0xee114103, 0x540cd3d4, 0x3df85d99, 0x153754f5, 0x7cc3dab8, 0xc6de486f, 0xaf2ac622, 0x6486dd9c, 0x0d7253d1, 0xb76fc106, 0xde9b4f4b, ], [ 0x00000000, 0x82709802, 0xd2828059, 0x50f2185b, 0x7366b0ef, 0xf11628ed, 0xa1e430b6, 0x2394a8b4, 0xe6cd61de, 0x64bdf9dc, 0x344fe187, 0xb63f7985, 0x95abd131, 0x17db4933, 0x47295168, 0xc559c96a, 0x1bf973e1, 0x9989ebe3, 0xc97bf3b8, 0x4b0b6bba, 0x689fc30e, 0xeaef5b0c, 0xba1d4357, 0x386ddb55, 0xfd34123f, 0x7f448a3d, 0x2fb69266, 0xadc60a64, 0x8e52a2d0, 0x0c223ad2, 0x5cd02289, 0xdea0ba8b, 0x37f2e7c2, 0xb5827fc0, 0xe570679b, 0x6700ff99, 0x4494572d, 0xc6e4cf2f, 0x9616d774, 0x14664f76, 0xd13f861c, 0x534f1e1e, 0x03bd0645, 0x81cd9e47, 0xa25936f3, 0x2029aef1, 0x70dbb6aa, 0xf2ab2ea8, 0x2c0b9423, 0xae7b0c21, 0xfe89147a, 0x7cf98c78, 0x5f6d24cc, 0xdd1dbcce, 0x8defa495, 0x0f9f3c97, 0xcac6f5fd, 0x48b66dff, 0x184475a4, 0x9a34eda6, 0xb9a04512, 0x3bd0dd10, 0x6b22c54b, 0xe9525d49, 0x6fe5cf84, 0xed955786, 0xbd674fdd, 0x3f17d7df, 0x1c837f6b, 0x9ef3e769, 0xce01ff32, 0x4c716730, 0x8928ae5a, 0x0b583658, 0x5baa2e03, 0xd9dab601, 0xfa4e1eb5, 0x783e86b7, 0x28cc9eec, 0xaabc06ee, 0x741cbc65, 0xf66c2467, 0xa69e3c3c, 0x24eea43e, 0x077a0c8a, 0x850a9488, 0xd5f88cd3, 0x578814d1, 0x92d1ddbb, 0x10a145b9, 0x40535de2, 0xc223c5e0, 0xe1b76d54, 0x63c7f556, 0x3335ed0d, 0xb145750f, 0x58172846, 0xda67b044, 0x8a95a81f, 0x08e5301d, 0x2b7198a9, 0xa90100ab, 0xf9f318f0, 0x7b8380f2, 0xbeda4998, 0x3caad19a, 0x6c58c9c1, 0xee2851c3, 0xcdbcf977, 0x4fcc6175, 0x1f3e792e, 0x9d4ee12c, 0x43ee5ba7, 0xc19ec3a5, 0x916cdbfe, 0x131c43fc, 0x3088eb48, 0xb2f8734a, 0xe20a6b11, 0x607af313, 0xa5233a79, 0x2753a27b, 0x77a1ba20, 0xf5d12222, 0xd6458a96, 0x54351294, 0x04c70acf, 0x86b792cd, 0xdfcb9f08, 0x5dbb070a, 0x0d491f51, 0x8f398753, 0xacad2fe7, 0x2eddb7e5, 0x7e2fafbe, 0xfc5f37bc, 0x3906fed6, 0xbb7666d4, 0xeb847e8f, 0x69f4e68d, 0x4a604e39, 0xc810d63b, 0x98e2ce60, 0x1a925662, 0xc432ece9, 0x464274eb, 0x16b06cb0, 0x94c0f4b2, 0xb7545c06, 0x3524c404, 0x65d6dc5f, 0xe7a6445d, 0x22ff8d37, 0xa08f1535, 0xf07d0d6e, 0x720d956c, 0x51993dd8, 0xd3e9a5da, 0x831bbd81, 0x016b2583, 0xe83978ca, 0x6a49e0c8, 0x3abbf893, 0xb8cb6091, 0x9b5fc825, 0x192f5027, 0x49dd487c, 0xcbadd07e, 0x0ef41914, 0x8c848116, 0xdc76994d, 0x5e06014f, 0x7d92a9fb, 0xffe231f9, 0xaf1029a2, 0x2d60b1a0, 0xf3c00b2b, 0x71b09329, 0x21428b72, 0xa3321370, 0x80a6bbc4, 0x02d623c6, 0x52243b9d, 0xd054a39f, 0x150d6af5, 0x977df2f7, 0xc78feaac, 0x45ff72ae, 0x666bda1a, 0xe41b4218, 0xb4e95a43, 0x3699c241, 0xb02e508c, 0x325ec88e, 0x62acd0d5, 0xe0dc48d7, 0xc348e063, 0x41387861, 0x11ca603a, 0x93baf838, 0x56e33152, 0xd493a950, 0x8461b10b, 0x06112909, 0x258581bd, 0xa7f519bf, 0xf70701e4, 0x757799e6, 0xabd7236d, 0x29a7bb6f, 0x7955a334, 0xfb253b36, 0xd8b19382, 0x5ac10b80, 0x0a3313db, 0x88438bd9, 0x4d1a42b3, 0xcf6adab1, 0x9f98c2ea, 0x1de85ae8, 0x3e7cf25c, 0xbc0c6a5e, 0xecfe7205, 0x6e8eea07, 0x87dcb74e, 0x05ac2f4c, 0x555e3717, 0xd72eaf15, 0xf4ba07a1, 0x76ca9fa3, 0x263887f8, 0xa4481ffa, 0x6111d690, 0xe3614e92, 0xb39356c9, 0x31e3cecb, 0x1277667f, 0x9007fe7d, 0xc0f5e626, 0x42857e24, 0x9c25c4af, 0x1e555cad, 0x4ea744f6, 0xccd7dcf4, 0xef437440, 0x6d33ec42, 0x3dc1f419, 0xbfb16c1b, 0x7ae8a571, 0xf8983d73, 0xa86a2528, 0x2a1abd2a, 0x098e159e, 0x8bfe8d9c, 0xdb0c95c7, 0x597c0dc5, ], [ 0x00000000, 0xfbca4951, 0x21f722ff, 0xda3d6bae, 0x43ee45fe, 0xb8240caf, 0x62196701, 0x99d32e50, 0x87dc8bfc, 0x7c16c2ad, 0xa62ba903, 0x5de1e052, 0xc432ce02, 0x3ff88753, 0xe5c5ecfd, 0x1e0fa5ac, 0xd9daa7a5, 0x2210eef4, 0xf82d855a, 0x03e7cc0b, 0x9a34e25b, 0x61feab0a, 0xbbc3c0a4, 0x400989f5, 0x5e062c59, 0xa5cc6508, 0x7ff10ea6, 0x843b47f7, 0x1de869a7, 0xe62220f6, 0x3c1f4b58, 0xc7d50209, 0x65d6ff17, 0x9e1cb646, 0x4421dde8, 0xbfeb94b9, 0x2638bae9, 0xddf2f3b8, 0x07cf9816, 0xfc05d147, 0xe20a74eb, 0x19c03dba, 0xc3fd5614, 0x38371f45, 0xa1e43115, 0x5a2e7844, 0x801313ea, 0x7bd95abb, 0xbc0c58b2, 0x47c611e3, 0x9dfb7a4d, 0x6631331c, 0xffe21d4c, 0x0428541d, 0xde153fb3, 0x25df76e2, 0x3bd0d34e, 0xc01a9a1f, 0x1a27f1b1, 0xe1edb8e0, 0x783e96b0, 0x83f4dfe1, 0x59c9b44f, 0xa203fd1e, 0xcbadfe2e, 0x3067b77f, 0xea5adcd1, 0x11909580, 0x8843bbd0, 0x7389f281, 0xa9b4992f, 0x527ed07e, 0x4c7175d2, 0xb7bb3c83, 0x6d86572d, 0x964c1e7c, 0x0f9f302c, 0xf455797d, 0x2e6812d3, 0xd5a25b82, 0x1277598b, 0xe9bd10da, 0x33807b74, 0xc84a3225, 0x51991c75, 0xaa535524, 0x706e3e8a, 0x8ba477db, 0x95abd277, 0x6e619b26, 0xb45cf088, 0x4f96b9d9, 0xd6459789, 0x2d8fded8, 0xf7b2b576, 0x0c78fc27, 0xae7b0139, 0x55b14868, 0x8f8c23c6, 0x74466a97, 0xed9544c7, 0x165f0d96, 0xcc626638, 0x37a82f69, 0x29a78ac5, 0xd26dc394, 0x0850a83a, 0xf39ae16b, 0x6a49cf3b, 0x9183866a, 0x4bbeedc4, 0xb074a495, 0x77a1a69c, 0x8c6befcd, 0x56568463, 0xad9ccd32, 0x344fe362, 0xcf85aa33, 0x15b8c19d, 0xee7288cc, 0xf07d2d60, 0x0bb76431, 0xd18a0f9f, 0x2a4046ce, 0xb393689e, 0x485921cf, 0x92644a61, 0x69ae0330, 0x41384c01, 0xbaf20550, 0x60cf6efe, 0x9b0527af, 0x02d609ff, 0xf91c40ae, 0x23212b00, 0xd8eb6251, 0xc6e4c7fd, 0x3d2e8eac, 0xe713e502, 0x1cd9ac53, 0x850a8203, 0x7ec0cb52, 0xa4fda0fc, 0x5f37e9ad, 0x98e2eba4, 0x6328a2f5, 0xb915c95b, 0x42df800a, 0xdb0cae5a, 0x20c6e70b, 0xfafb8ca5, 0x0131c5f4, 0x1f3e6058, 0xe4f42909, 0x3ec942a7, 0xc5030bf6, 0x5cd025a6, 0xa71a6cf7, 0x7d270759, 0x86ed4e08, 0x24eeb316, 0xdf24fa47, 0x051991e9, 0xfed3d8b8, 0x6700f6e8, 0x9ccabfb9, 0x46f7d417, 0xbd3d9d46, 0xa33238ea, 0x58f871bb, 0x82c51a15, 0x790f5344, 0xe0dc7d14, 0x1b163445, 0xc12b5feb, 0x3ae116ba, 0xfd3414b3, 0x06fe5de2, 0xdcc3364c, 0x27097f1d, 0xbeda514d, 0x4510181c, 0x9f2d73b2, 0x64e73ae3, 0x7ae89f4f, 0x8122d61e, 0x5b1fbdb0, 0xa0d5f4e1, 0x3906dab1, 0xc2cc93e0, 0x18f1f84e, 0xe33bb11f, 0x8a95b22f, 0x715ffb7e, 0xab6290d0, 0x50a8d981, 0xc97bf7d1, 0x32b1be80, 0xe88cd52e, 0x13469c7f, 0x0d4939d3, 0xf6837082, 0x2cbe1b2c, 0xd774527d, 0x4ea77c2d, 0xb56d357c, 0x6f505ed2, 0x949a1783, 0x534f158a, 0xa8855cdb, 0x72b83775, 0x89727e24, 0x10a15074, 0xeb6b1925, 0x3156728b, 0xca9c3bda, 0xd4939e76, 0x2f59d727, 0xf564bc89, 0x0eaef5d8, 0x977ddb88, 0x6cb792d9, 0xb68af977, 0x4d40b026, 0xef434d38, 0x14890469, 0xceb46fc7, 0x357e2696, 0xacad08c6, 0x57674197, 0x8d5a2a39, 0x76906368, 0x689fc6c4, 0x93558f95, 0x4968e43b, 0xb2a2ad6a, 0x2b71833a, 0xd0bbca6b, 0x0a86a1c5, 0xf14ce894, 0x3699ea9d, 0xcd53a3cc, 0x176ec862, 0xeca48133, 0x7577af63, 0x8ebde632, 0x54808d9c, 0xaf4ac4cd, 0xb1456161, 0x4a8f2830, 0x90b2439e, 0x6b780acf, 0xf2ab249f, 0x09616dce, 0xd35c0660, 0x28964f31, ], [ 0x00000000, 0x6039eda8, 0xc073db50, 0xa04a36f8, 0x568406fd, 0x36bdeb55, 0x96f7ddad, 0xf6ce3005, 0xad080dfa, 0xcd31e052, 0x6d7bd6aa, 0x0d423b02, 0xfb8c0b07, 0x9bb5e6af, 0x3bffd057, 0x5bc63dff, 0x8c73aba9, 0xec4a4601, 0x4c0070f9, 0x2c399d51, 0xdaf7ad54, 0xbace40fc, 0x1a847604, 0x7abd9bac, 0x217ba653, 0x41424bfb, 0xe1087d03, 0x813190ab, 0x77ffa0ae, 0x17c64d06, 0xb78c7bfe, 0xd7b59656, 0xce84e70f, 0xaebd0aa7, 0x0ef73c5f, 0x6eced1f7, 0x9800e1f2, 0xf8390c5a, 0x58733aa2, 0x384ad70a, 0x638ceaf5, 0x03b5075d, 0xa3ff31a5, 0xc3c6dc0d, 0x3508ec08, 0x553101a0, 0xf57b3758, 0x9542daf0, 0x42f74ca6, 0x22cea10e, 0x828497f6, 0xe2bd7a5e, 0x14734a5b, 0x744aa7f3, 0xd400910b, 0xb4397ca3, 0xefff415c, 0x8fc6acf4, 0x2f8c9a0c, 0x4fb577a4, 0xb97b47a1, 0xd942aa09, 0x79089cf1, 0x19317159, 0x4b6a7e43, 0x2b5393eb, 0x8b19a513, 0xeb2048bb, 0x1dee78be, 0x7dd79516, 0xdd9da3ee, 0xbda44e46, 0xe66273b9, 0x865b9e11, 0x2611a8e9, 0x46284541, 0xb0e67544, 0xd0df98ec, 0x7095ae14, 0x10ac43bc, 0xc719d5ea, 0xa7203842, 0x076a0eba, 0x6753e312, 0x919dd317, 0xf1a43ebf, 0x51ee0847, 0x31d7e5ef, 0x6a11d810, 0x0a2835b8, 0xaa620340, 0xca5beee8, 0x3c95deed, 0x5cac3345, 0xfce605bd, 0x9cdfe815, 0x85ee994c, 0xe5d774e4, 0x459d421c, 0x25a4afb4, 0xd36a9fb1, 0xb3537219, 0x131944e1, 0x7320a949, 0x28e694b6, 0x48df791e, 0xe8954fe6, 0x88aca24e, 0x7e62924b, 0x1e5b7fe3, 0xbe11491b, 0xde28a4b3, 0x099d32e5, 0x69a4df4d, 0xc9eee9b5, 0xa9d7041d, 0x5f193418, 0x3f20d9b0, 0x9f6aef48, 0xff5302e0, 0xa4953f1f, 0xc4acd2b7, 0x64e6e44f, 0x04df09e7, 0xf21139e2, 0x9228d44a, 0x3262e2b2, 0x525b0f1a, 0x96d4fc86, 0xf6ed112e, 0x56a727d6, 0x369eca7e, 0xc050fa7b, 0xa06917d3, 0x0023212b, 0x601acc83, 0x3bdcf17c, 0x5be51cd4, 0xfbaf2a2c, 0x9b96c784, 0x6d58f781, 0x0d611a29, 0xad2b2cd1, 0xcd12c179, 0x1aa7572f, 0x7a9eba87, 0xdad48c7f, 0xbaed61d7, 0x4c2351d2, 0x2c1abc7a, 0x8c508a82, 0xec69672a, 0xb7af5ad5, 0xd796b77d, 0x77dc8185, 0x17e56c2d, 0xe12b5c28, 0x8112b180, 0x21588778, 0x41616ad0, 0x58501b89, 0x3869f621, 0x9823c0d9, 0xf81a2d71, 0x0ed41d74, 0x6eedf0dc, 0xcea7c624, 0xae9e2b8c, 0xf5581673, 0x9561fbdb, 0x352bcd23, 0x5512208b, 0xa3dc108e, 0xc3e5fd26, 0x63afcbde, 0x03962676, 0xd423b020, 0xb41a5d88, 0x14506b70, 0x746986d8, 0x82a7b6dd, 0xe29e5b75, 0x42d46d8d, 0x22ed8025, 0x792bbdda, 0x19125072, 0xb958668a, 0xd9618b22, 0x2fafbb27, 0x4f96568f, 0xefdc6077, 0x8fe58ddf, 0xddbe82c5, 0xbd876f6d, 0x1dcd5995, 0x7df4b43d, 0x8b3a8438, 0xeb036990, 0x4b495f68, 0x2b70b2c0, 0x70b68f3f, 0x108f6297, 0xb0c5546f, 0xd0fcb9c7, 0x263289c2, 0x460b646a, 0xe6415292, 0x8678bf3a, 0x51cd296c, 0x31f4c4c4, 0x91bef23c, 0xf1871f94, 0x07492f91, 0x6770c239, 0xc73af4c1, 0xa7031969, 0xfcc52496, 0x9cfcc93e, 0x3cb6ffc6, 0x5c8f126e, 0xaa41226b, 0xca78cfc3, 0x6a32f93b, 0x0a0b1493, 0x133a65ca, 0x73038862, 0xd349be9a, 0xb3705332, 0x45be6337, 0x25878e9f, 0x85cdb867, 0xe5f455cf, 0xbe326830, 0xde0b8598, 0x7e41b360, 0x1e785ec8, 0xe8b66ecd, 0x888f8365, 0x28c5b59d, 0x48fc5835, 0x9f49ce63, 0xff7023cb, 0x5f3a1533, 0x3f03f89b, 0xc9cdc89e, 0xa9f42536, 0x09be13ce, 0x6987fe66, 0x3241c399, 0x52782e31, 0xf23218c9, 0x920bf561, 0x64c5c564, 0x04fc28cc, 0xa4b61e34, 0xc48ff39c, ], [ 0x00000000, 0x7b4bc878, 0xf69790f0, 0x8ddc5888, 0x3b4c91bd, 0x400759c5, 0xcddb014d, 0xb690c935, 0x7699237a, 0x0dd2eb02, 0x800eb38a, 0xfb457bf2, 0x4dd5b2c7, 0x369e7abf, 0xbb422237, 0xc009ea4f, 0xed3246f4, 0x96798e8c, 0x1ba5d604, 0x60ee1e7c, 0xd67ed749, 0xad351f31, 0x20e947b9, 0x5ba28fc1, 0x9bab658e, 0xe0e0adf6, 0x6d3cf57e, 0x16773d06, 0xa0e7f433, 0xdbac3c4b, 0x567064c3, 0x2d3bacbb, 0x0c073db5, 0x774cf5cd, 0xfa90ad45, 0x81db653d, 0x374bac08, 0x4c006470, 0xc1dc3cf8, 0xba97f480, 0x7a9e1ecf, 0x01d5d6b7, 0x8c098e3f, 0xf7424647, 0x41d28f72, 0x3a99470a, 0xb7451f82, 0xcc0ed7fa, 0xe1357b41, 0x9a7eb339, 0x17a2ebb1, 0x6ce923c9, 0xda79eafc, 0xa1322284, 0x2cee7a0c, 0x57a5b274, 0x97ac583b, 0xece79043, 0x613bc8cb, 0x1a7000b3, 0xace0c986, 0xd7ab01fe, 0x5a775976, 0x213c910e, 0x180e7b6a, 0x6345b312, 0xee99eb9a, 0x95d223e2, 0x2342ead7, 0x580922af, 0xd5d57a27, 0xae9eb25f, 0x6e975810, 0x15dc9068, 0x9800c8e0, 0xe34b0098, 0x55dbc9ad, 0x2e9001d5, 0xa34c595d, 0xd8079125, 0xf53c3d9e, 0x8e77f5e6, 0x03abad6e, 0x78e06516, 0xce70ac23, 0xb53b645b, 0x38e73cd3, 0x43acf4ab, 0x83a51ee4, 0xf8eed69c, 0x75328e14, 0x0e79466c, 0xb8e98f59, 0xc3a24721, 0x4e7e1fa9, 0x3535d7d1, 0x140946df, 0x6f428ea7, 0xe29ed62f, 0x99d51e57, 0x2f45d762, 0x540e1f1a, 0xd9d24792, 0xa2998fea, 0x629065a5, 0x19dbaddd, 0x9407f555, 0xef4c3d2d, 0x59dcf418, 0x22973c60, 0xaf4b64e8, 0xd400ac90, 0xf93b002b, 0x8270c853, 0x0fac90db, 0x74e758a3, 0xc2779196, 0xb93c59ee, 0x34e00166, 0x4fabc91e, 0x8fa22351, 0xf4e9eb29, 0x7935b3a1, 0x027e7bd9, 0xb4eeb2ec, 0xcfa57a94, 0x4279221c, 0x3932ea64, 0x301cf6d4, 0x4b573eac, 0xc68b6624, 0xbdc0ae5c, 0x0b506769, 0x701baf11, 0xfdc7f799, 0x868c3fe1, 0x4685d5ae, 0x3dce1dd6, 0xb012455e, 0xcb598d26, 0x7dc94413, 0x06828c6b, 0x8b5ed4e3, 0xf0151c9b, 0xdd2eb020, 0xa6657858, 0x2bb920d0, 0x50f2e8a8, 0xe662219d, 0x9d29e9e5, 0x10f5b16d, 0x6bbe7915, 0xabb7935a, 0xd0fc5b22, 0x5d2003aa, 0x266bcbd2, 0x90fb02e7, 0xebb0ca9f, 0x666c9217, 0x1d275a6f, 0x3c1bcb61, 0x47500319, 0xca8c5b91, 0xb1c793e9, 0x07575adc, 0x7c1c92a4, 0xf1c0ca2c, 0x8a8b0254, 0x4a82e81b, 0x31c92063, 0xbc1578eb, 0xc75eb093, 0x71ce79a6, 0x0a85b1de, 0x8759e956, 0xfc12212e, 0xd1298d95, 0xaa6245ed, 0x27be1d65, 0x5cf5d51d, 0xea651c28, 0x912ed450, 0x1cf28cd8, 0x67b944a0, 0xa7b0aeef, 0xdcfb6697, 0x51273e1f, 0x2a6cf667, 0x9cfc3f52, 0xe7b7f72a, 0x6a6bafa2, 0x112067da, 0x28128dbe, 0x535945c6, 0xde851d4e, 0xa5ced536, 0x135e1c03, 0x6815d47b, 0xe5c98cf3, 0x9e82448b, 0x5e8baec4, 0x25c066bc, 0xa81c3e34, 0xd357f64c, 0x65c73f79, 0x1e8cf701, 0x9350af89, 0xe81b67f1, 0xc520cb4a, 0xbe6b0332, 0x33b75bba, 0x48fc93c2, 0xfe6c5af7, 0x8527928f, 0x08fbca07, 0x73b0027f, 0xb3b9e830, 0xc8f22048, 0x452e78c0, 0x3e65b0b8, 0x88f5798d, 0xf3beb1f5, 0x7e62e97d, 0x05292105, 0x2415b00b, 0x5f5e7873, 0xd28220fb, 0xa9c9e883, 0x1f5921b6, 0x6412e9ce, 0xe9ceb146, 0x9285793e, 0x528c9371, 0x29c75b09, 0xa41b0381, 0xdf50cbf9, 0x69c002cc, 0x128bcab4, 0x9f57923c, 0xe41c5a44, 0xc927f6ff, 0xb26c3e87, 0x3fb0660f, 0x44fbae77, 0xf26b6742, 0x8920af3a, 0x04fcf7b2, 0x7fb73fca, 0xbfbed585, 0xc4f51dfd, 0x49294575, 0x32628d0d, 0x84f24438, 0xffb98c40, 0x7265d4c8, 0x092e1cb0, ], ]; pub static CRC32_MPEG_2_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4, ], [ 0x00000000, 0xd219c1dc, 0xa0f29e0f, 0x72eb5fd3, 0x452421a9, 0x973de075, 0xe5d6bfa6, 0x37cf7e7a, 0x8a484352, 0x5851828e, 0x2abadd5d, 0xf8a31c81, 0xcf6c62fb, 0x1d75a327, 0x6f9efcf4, 0xbd873d28, 0x10519b13, 0xc2485acf, 0xb0a3051c, 0x62bac4c0, 0x5575baba, 0x876c7b66, 0xf58724b5, 0x279ee569, 0x9a19d841, 0x4800199d, 0x3aeb464e, 0xe8f28792, 0xdf3df9e8, 0x0d243834, 0x7fcf67e7, 0xadd6a63b, 0x20a33626, 0xf2baf7fa, 0x8051a829, 0x524869f5, 0x6587178f, 0xb79ed653, 0xc5758980, 0x176c485c, 0xaaeb7574, 0x78f2b4a8, 0x0a19eb7b, 0xd8002aa7, 0xefcf54dd, 0x3dd69501, 0x4f3dcad2, 0x9d240b0e, 0x30f2ad35, 0xe2eb6ce9, 0x9000333a, 0x4219f2e6, 0x75d68c9c, 0xa7cf4d40, 0xd5241293, 0x073dd34f, 0xbabaee67, 0x68a32fbb, 0x1a487068, 0xc851b1b4, 0xff9ecfce, 0x2d870e12, 0x5f6c51c1, 0x8d75901d, 0x41466c4c, 0x935fad90, 0xe1b4f243, 0x33ad339f, 0x04624de5, 0xd67b8c39, 0xa490d3ea, 0x76891236, 0xcb0e2f1e, 0x1917eec2, 0x6bfcb111, 0xb9e570cd, 0x8e2a0eb7, 0x5c33cf6b, 0x2ed890b8, 0xfcc15164, 0x5117f75f, 0x830e3683, 0xf1e56950, 0x23fca88c, 0x1433d6f6, 0xc62a172a, 0xb4c148f9, 0x66d88925, 0xdb5fb40d, 0x094675d1, 0x7bad2a02, 0xa9b4ebde, 0x9e7b95a4, 0x4c625478, 0x3e890bab, 0xec90ca77, 0x61e55a6a, 0xb3fc9bb6, 0xc117c465, 0x130e05b9, 0x24c17bc3, 0xf6d8ba1f, 0x8433e5cc, 0x562a2410, 0xebad1938, 0x39b4d8e4, 0x4b5f8737, 0x994646eb, 0xae893891, 0x7c90f94d, 0x0e7ba69e, 0xdc626742, 0x71b4c179, 0xa3ad00a5, 0xd1465f76, 0x035f9eaa, 0x3490e0d0, 0xe689210c, 0x94627edf, 0x467bbf03, 0xfbfc822b, 0x29e543f7, 0x5b0e1c24, 0x8917ddf8, 0xbed8a382, 0x6cc1625e, 0x1e2a3d8d, 0xcc33fc51, 0x828cd898, 0x50951944, 0x227e4697, 0xf067874b, 0xc7a8f931, 0x15b138ed, 0x675a673e, 0xb543a6e2, 0x08c49bca, 0xdadd5a16, 0xa83605c5, 0x7a2fc419, 0x4de0ba63, 0x9ff97bbf, 0xed12246c, 0x3f0be5b0, 0x92dd438b, 0x40c48257, 0x322fdd84, 0xe0361c58, 0xd7f96222, 0x05e0a3fe, 0x770bfc2d, 0xa5123df1, 0x189500d9, 0xca8cc105, 0xb8679ed6, 0x6a7e5f0a, 0x5db12170, 0x8fa8e0ac, 0xfd43bf7f, 0x2f5a7ea3, 0xa22feebe, 0x70362f62, 0x02dd70b1, 0xd0c4b16d, 0xe70bcf17, 0x35120ecb, 0x47f95118, 0x95e090c4, 0x2867adec, 0xfa7e6c30, 0x889533e3, 0x5a8cf23f, 0x6d438c45, 0xbf5a4d99, 0xcdb1124a, 0x1fa8d396, 0xb27e75ad, 0x6067b471, 0x128ceba2, 0xc0952a7e, 0xf75a5404, 0x254395d8, 0x57a8ca0b, 0x85b10bd7, 0x383636ff, 0xea2ff723, 0x98c4a8f0, 0x4add692c, 0x7d121756, 0xaf0bd68a, 0xdde08959, 0x0ff94885, 0xc3cab4d4, 0x11d37508, 0x63382adb, 0xb121eb07, 0x86ee957d, 0x54f754a1, 0x261c0b72, 0xf405caae, 0x4982f786, 0x9b9b365a, 0xe9706989, 0x3b69a855, 0x0ca6d62f, 0xdebf17f3, 0xac544820, 0x7e4d89fc, 0xd39b2fc7, 0x0182ee1b, 0x7369b1c8, 0xa1707014, 0x96bf0e6e, 0x44a6cfb2, 0x364d9061, 0xe45451bd, 0x59d36c95, 0x8bcaad49, 0xf921f29a, 0x2b383346, 0x1cf74d3c, 0xceee8ce0, 0xbc05d333, 0x6e1c12ef, 0xe36982f2, 0x3170432e, 0x439b1cfd, 0x9182dd21, 0xa64da35b, 0x74546287, 0x06bf3d54, 0xd4a6fc88, 0x6921c1a0, 0xbb38007c, 0xc9d35faf, 0x1bca9e73, 0x2c05e009, 0xfe1c21d5, 0x8cf77e06, 0x5eeebfda, 0xf33819e1, 0x2121d83d, 0x53ca87ee, 0x81d34632, 0xb61c3848, 0x6405f994, 0x16eea647, 0xc4f7679b, 0x79705ab3, 0xab699b6f, 0xd982c4bc, 0x0b9b0560, 0x3c547b1a, 0xee4dbac6, 0x9ca6e515, 0x4ebf24c9, ], [ 0x00000000, 0x01d8ac87, 0x03b1590e, 0x0269f589, 0x0762b21c, 0x06ba1e9b, 0x04d3eb12, 0x050b4795, 0x0ec56438, 0x0f1dc8bf, 0x0d743d36, 0x0cac91b1, 0x09a7d624, 0x087f7aa3, 0x0a168f2a, 0x0bce23ad, 0x1d8ac870, 0x1c5264f7, 0x1e3b917e, 0x1fe33df9, 0x1ae87a6c, 0x1b30d6eb, 0x19592362, 0x18818fe5, 0x134fac48, 0x129700cf, 0x10fef546, 0x112659c1, 0x142d1e54, 0x15f5b2d3, 0x179c475a, 0x1644ebdd, 0x3b1590e0, 0x3acd3c67, 0x38a4c9ee, 0x397c6569, 0x3c7722fc, 0x3daf8e7b, 0x3fc67bf2, 0x3e1ed775, 0x35d0f4d8, 0x3408585f, 0x3661add6, 0x37b90151, 0x32b246c4, 0x336aea43, 0x31031fca, 0x30dbb34d, 0x269f5890, 0x2747f417, 0x252e019e, 0x24f6ad19, 0x21fdea8c, 0x2025460b, 0x224cb382, 0x23941f05, 0x285a3ca8, 0x2982902f, 0x2beb65a6, 0x2a33c921, 0x2f388eb4, 0x2ee02233, 0x2c89d7ba, 0x2d517b3d, 0x762b21c0, 0x77f38d47, 0x759a78ce, 0x7442d449, 0x714993dc, 0x70913f5b, 0x72f8cad2, 0x73206655, 0x78ee45f8, 0x7936e97f, 0x7b5f1cf6, 0x7a87b071, 0x7f8cf7e4, 0x7e545b63, 0x7c3daeea, 0x7de5026d, 0x6ba1e9b0, 0x6a794537, 0x6810b0be, 0x69c81c39, 0x6cc35bac, 0x6d1bf72b, 0x6f7202a2, 0x6eaaae25, 0x65648d88, 0x64bc210f, 0x66d5d486, 0x670d7801, 0x62063f94, 0x63de9313, 0x61b7669a, 0x606fca1d, 0x4d3eb120, 0x4ce61da7, 0x4e8fe82e, 0x4f5744a9, 0x4a5c033c, 0x4b84afbb, 0x49ed5a32, 0x4835f6b5, 0x43fbd518, 0x4223799f, 0x404a8c16, 0x41922091, 0x44996704, 0x4541cb83, 0x47283e0a, 0x46f0928d, 0x50b47950, 0x516cd5d7, 0x5305205e, 0x52dd8cd9, 0x57d6cb4c, 0x560e67cb, 0x54679242, 0x55bf3ec5, 0x5e711d68, 0x5fa9b1ef, 0x5dc04466, 0x5c18e8e1, 0x5913af74, 0x58cb03f3, 0x5aa2f67a, 0x5b7a5afd, 0xec564380, 0xed8eef07, 0xefe71a8e, 0xee3fb609, 0xeb34f19c, 0xeaec5d1b, 0xe885a892, 0xe95d0415, 0xe29327b8, 0xe34b8b3f, 0xe1227eb6, 0xe0fad231, 0xe5f195a4, 0xe4293923, 0xe640ccaa, 0xe798602d, 0xf1dc8bf0, 0xf0042777, 0xf26dd2fe, 0xf3b57e79, 0xf6be39ec, 0xf766956b, 0xf50f60e2, 0xf4d7cc65, 0xff19efc8, 0xfec1434f, 0xfca8b6c6, 0xfd701a41, 0xf87b5dd4, 0xf9a3f153, 0xfbca04da, 0xfa12a85d, 0xd743d360, 0xd69b7fe7, 0xd4f28a6e, 0xd52a26e9, 0xd021617c, 0xd1f9cdfb, 0xd3903872, 0xd24894f5, 0xd986b758, 0xd85e1bdf, 0xda37ee56, 0xdbef42d1, 0xdee40544, 0xdf3ca9c3, 0xdd555c4a, 0xdc8df0cd, 0xcac91b10, 0xcb11b797, 0xc978421e, 0xc8a0ee99, 0xcdaba90c, 0xcc73058b, 0xce1af002, 0xcfc25c85, 0xc40c7f28, 0xc5d4d3af, 0xc7bd2626, 0xc6658aa1, 0xc36ecd34, 0xc2b661b3, 0xc0df943a, 0xc10738bd, 0x9a7d6240, 0x9ba5cec7, 0x99cc3b4e, 0x981497c9, 0x9d1fd05c, 0x9cc77cdb, 0x9eae8952, 0x9f7625d5, 0x94b80678, 0x9560aaff, 0x97095f76, 0x96d1f3f1, 0x93dab464, 0x920218e3, 0x906bed6a, 0x91b341ed, 0x87f7aa30, 0x862f06b7, 0x8446f33e, 0x859e5fb9, 0x8095182c, 0x814db4ab, 0x83244122, 0x82fceda5, 0x8932ce08, 0x88ea628f, 0x8a839706, 0x8b5b3b81, 0x8e507c14, 0x8f88d093, 0x8de1251a, 0x8c39899d, 0xa168f2a0, 0xa0b05e27, 0xa2d9abae, 0xa3010729, 0xa60a40bc, 0xa7d2ec3b, 0xa5bb19b2, 0xa463b535, 0xafad9698, 0xae753a1f, 0xac1ccf96, 0xadc46311, 0xa8cf2484, 0xa9178803, 0xab7e7d8a, 0xaaa6d10d, 0xbce23ad0, 0xbd3a9657, 0xbf5363de, 0xbe8bcf59, 0xbb8088cc, 0xba58244b, 0xb831d1c2, 0xb9e97d45, 0xb2275ee8, 0xb3fff26f, 0xb19607e6, 0xb04eab61, 0xb545ecf4, 0xb49d4073, 0xb6f4b5fa, 0xb72c197d, ], [ 0x00000000, 0xdc6d9ab7, 0xbc1a28d9, 0x6077b26e, 0x7cf54c05, 0xa098d6b2, 0xc0ef64dc, 0x1c82fe6b, 0xf9ea980a, 0x258702bd, 0x45f0b0d3, 0x999d2a64, 0x851fd40f, 0x59724eb8, 0x3905fcd6, 0xe5686661, 0xf7142da3, 0x2b79b714, 0x4b0e057a, 0x97639fcd, 0x8be161a6, 0x578cfb11, 0x37fb497f, 0xeb96d3c8, 0x0efeb5a9, 0xd2932f1e, 0xb2e49d70, 0x6e8907c7, 0x720bf9ac, 0xae66631b, 0xce11d175, 0x127c4bc2, 0xeae946f1, 0x3684dc46, 0x56f36e28, 0x8a9ef49f, 0x961c0af4, 0x4a719043, 0x2a06222d, 0xf66bb89a, 0x1303defb, 0xcf6e444c, 0xaf19f622, 0x73746c95, 0x6ff692fe, 0xb39b0849, 0xd3ecba27, 0x0f812090, 0x1dfd6b52, 0xc190f1e5, 0xa1e7438b, 0x7d8ad93c, 0x61082757, 0xbd65bde0, 0xdd120f8e, 0x017f9539, 0xe417f358, 0x387a69ef, 0x580ddb81, 0x84604136, 0x98e2bf5d, 0x448f25ea, 0x24f89784, 0xf8950d33, 0xd1139055, 0x0d7e0ae2, 0x6d09b88c, 0xb164223b, 0xade6dc50, 0x718b46e7, 0x11fcf489, 0xcd916e3e, 0x28f9085f, 0xf49492e8, 0x94e32086, 0x488eba31, 0x540c445a, 0x8861deed, 0xe8166c83, 0x347bf634, 0x2607bdf6, 0xfa6a2741, 0x9a1d952f, 0x46700f98, 0x5af2f1f3, 0x869f6b44, 0xe6e8d92a, 0x3a85439d, 0xdfed25fc, 0x0380bf4b, 0x63f70d25, 0xbf9a9792, 0xa31869f9, 0x7f75f34e, 0x1f024120, 0xc36fdb97, 0x3bfad6a4, 0xe7974c13, 0x87e0fe7d, 0x5b8d64ca, 0x470f9aa1, 0x9b620016, 0xfb15b278, 0x277828cf, 0xc2104eae, 0x1e7dd419, 0x7e0a6677, 0xa267fcc0, 0xbee502ab, 0x6288981c, 0x02ff2a72, 0xde92b0c5, 0xcceefb07, 0x108361b0, 0x70f4d3de, 0xac994969, 0xb01bb702, 0x6c762db5, 0x0c019fdb, 0xd06c056c, 0x3504630d, 0xe969f9ba, 0x891e4bd4, 0x5573d163, 0x49f12f08, 0x959cb5bf, 0xf5eb07d1, 0x29869d66, 0xa6e63d1d, 0x7a8ba7aa, 0x1afc15c4, 0xc6918f73, 0xda137118, 0x067eebaf, 0x660959c1, 0xba64c376, 0x5f0ca517, 0x83613fa0, 0xe3168dce, 0x3f7b1779, 0x23f9e912, 0xff9473a5, 0x9fe3c1cb, 0x438e5b7c, 0x51f210be, 0x8d9f8a09, 0xede83867, 0x3185a2d0, 0x2d075cbb, 0xf16ac60c, 0x911d7462, 0x4d70eed5, 0xa81888b4, 0x74751203, 0x1402a06d, 0xc86f3ada, 0xd4edc4b1, 0x08805e06, 0x68f7ec68, 0xb49a76df, 0x4c0f7bec, 0x9062e15b, 0xf0155335, 0x2c78c982, 0x30fa37e9, 0xec97ad5e, 0x8ce01f30, 0x508d8587, 0xb5e5e3e6, 0x69887951, 0x09ffcb3f, 0xd5925188, 0xc910afe3, 0x157d3554, 0x750a873a, 0xa9671d8d, 0xbb1b564f, 0x6776ccf8, 0x07017e96, 0xdb6ce421, 0xc7ee1a4a, 0x1b8380fd, 0x7bf43293, 0xa799a824, 0x42f1ce45, 0x9e9c54f2, 0xfeebe69c, 0x22867c2b, 0x3e048240, 0xe26918f7, 0x821eaa99, 0x5e73302e, 0x77f5ad48, 0xab9837ff, 0xcbef8591, 0x17821f26, 0x0b00e14d, 0xd76d7bfa, 0xb71ac994, 0x6b775323, 0x8e1f3542, 0x5272aff5, 0x32051d9b, 0xee68872c, 0xf2ea7947, 0x2e87e3f0, 0x4ef0519e, 0x929dcb29, 0x80e180eb, 0x5c8c1a5c, 0x3cfba832, 0xe0963285, 0xfc14ccee, 0x20795659, 0x400ee437, 0x9c637e80, 0x790b18e1, 0xa5668256, 0xc5113038, 0x197caa8f, 0x05fe54e4, 0xd993ce53, 0xb9e47c3d, 0x6589e68a, 0x9d1cebb9, 0x4171710e, 0x2106c360, 0xfd6b59d7, 0xe1e9a7bc, 0x3d843d0b, 0x5df38f65, 0x819e15d2, 0x64f673b3, 0xb89be904, 0xd8ec5b6a, 0x0481c1dd, 0x18033fb6, 0xc46ea501, 0xa419176f, 0x78748dd8, 0x6a08c61a, 0xb6655cad, 0xd612eec3, 0x0a7f7474, 0x16fd8a1f, 0xca9010a8, 0xaae7a2c6, 0x768a3871, 0x93e25e10, 0x4f8fc4a7, 0x2ff876c9, 0xf395ec7e, 0xef171215, 0x337a88a2, 0x530d3acc, 0x8f60a07b, ], [ 0x00000000, 0x490d678d, 0x921acf1a, 0xdb17a897, 0x20f48383, 0x69f9e40e, 0xb2ee4c99, 0xfbe32b14, 0x41e90706, 0x08e4608b, 0xd3f3c81c, 0x9afeaf91, 0x611d8485, 0x2810e308, 0xf3074b9f, 0xba0a2c12, 0x83d20e0c, 0xcadf6981, 0x11c8c116, 0x58c5a69b, 0xa3268d8f, 0xea2bea02, 0x313c4295, 0x78312518, 0xc23b090a, 0x8b366e87, 0x5021c610, 0x192ca19d, 0xe2cf8a89, 0xabc2ed04, 0x70d54593, 0x39d8221e, 0x036501af, 0x4a686622, 0x917fceb5, 0xd872a938, 0x2391822c, 0x6a9ce5a1, 0xb18b4d36, 0xf8862abb, 0x428c06a9, 0x0b816124, 0xd096c9b3, 0x999bae3e, 0x6278852a, 0x2b75e2a7, 0xf0624a30, 0xb96f2dbd, 0x80b70fa3, 0xc9ba682e, 0x12adc0b9, 0x5ba0a734, 0xa0438c20, 0xe94eebad, 0x3259433a, 0x7b5424b7, 0xc15e08a5, 0x88536f28, 0x5344c7bf, 0x1a49a032, 0xe1aa8b26, 0xa8a7ecab, 0x73b0443c, 0x3abd23b1, 0x06ca035e, 0x4fc764d3, 0x94d0cc44, 0xddddabc9, 0x263e80dd, 0x6f33e750, 0xb4244fc7, 0xfd29284a, 0x47230458, 0x0e2e63d5, 0xd539cb42, 0x9c34accf, 0x67d787db, 0x2edae056, 0xf5cd48c1, 0xbcc02f4c, 0x85180d52, 0xcc156adf, 0x1702c248, 0x5e0fa5c5, 0xa5ec8ed1, 0xece1e95c, 0x37f641cb, 0x7efb2646, 0xc4f10a54, 0x8dfc6dd9, 0x56ebc54e, 0x1fe6a2c3, 0xe40589d7, 0xad08ee5a, 0x761f46cd, 0x3f122140, 0x05af02f1, 0x4ca2657c, 0x97b5cdeb, 0xdeb8aa66, 0x255b8172, 0x6c56e6ff, 0xb7414e68, 0xfe4c29e5, 0x444605f7, 0x0d4b627a, 0xd65ccaed, 0x9f51ad60, 0x64b28674, 0x2dbfe1f9, 0xf6a8496e, 0xbfa52ee3, 0x867d0cfd, 0xcf706b70, 0x1467c3e7, 0x5d6aa46a, 0xa6898f7e, 0xef84e8f3, 0x34934064, 0x7d9e27e9, 0xc7940bfb, 0x8e996c76, 0x558ec4e1, 0x1c83a36c, 0xe7608878, 0xae6deff5, 0x757a4762, 0x3c7720ef, 0x0d9406bc, 0x44996131, 0x9f8ec9a6, 0xd683ae2b, 0x2d60853f, 0x646de2b2, 0xbf7a4a25, 0xf6772da8, 0x4c7d01ba, 0x05706637, 0xde67cea0, 0x976aa92d, 0x6c898239, 0x2584e5b4, 0xfe934d23, 0xb79e2aae, 0x8e4608b0, 0xc74b6f3d, 0x1c5cc7aa, 0x5551a027, 0xaeb28b33, 0xe7bfecbe, 0x3ca84429, 0x75a523a4, 0xcfaf0fb6, 0x86a2683b, 0x5db5c0ac, 0x14b8a721, 0xef5b8c35, 0xa656ebb8, 0x7d41432f, 0x344c24a2, 0x0ef10713, 0x47fc609e, 0x9cebc809, 0xd5e6af84, 0x2e058490, 0x6708e31d, 0xbc1f4b8a, 0xf5122c07, 0x4f180015, 0x06156798, 0xdd02cf0f, 0x940fa882, 0x6fec8396, 0x26e1e41b, 0xfdf64c8c, 0xb4fb2b01, 0x8d23091f, 0xc42e6e92, 0x1f39c605, 0x5634a188, 0xadd78a9c, 0xe4daed11, 0x3fcd4586, 0x76c0220b, 0xccca0e19, 0x85c76994, 0x5ed0c103, 0x17dda68e, 0xec3e8d9a, 0xa533ea17, 0x7e244280, 0x3729250d, 0x0b5e05e2, 0x4253626f, 0x9944caf8, 0xd049ad75, 0x2baa8661, 0x62a7e1ec, 0xb9b0497b, 0xf0bd2ef6, 0x4ab702e4, 0x03ba6569, 0xd8adcdfe, 0x91a0aa73, 0x6a438167, 0x234ee6ea, 0xf8594e7d, 0xb15429f0, 0x888c0bee, 0xc1816c63, 0x1a96c4f4, 0x539ba379, 0xa878886d, 0xe175efe0, 0x3a624777, 0x736f20fa, 0xc9650ce8, 0x80686b65, 0x5b7fc3f2, 0x1272a47f, 0xe9918f6b, 0xa09ce8e6, 0x7b8b4071, 0x328627fc, 0x083b044d, 0x413663c0, 0x9a21cb57, 0xd32cacda, 0x28cf87ce, 0x61c2e043, 0xbad548d4, 0xf3d82f59, 0x49d2034b, 0x00df64c6, 0xdbc8cc51, 0x92c5abdc, 0x692680c8, 0x202be745, 0xfb3c4fd2, 0xb231285f, 0x8be90a41, 0xc2e46dcc, 0x19f3c55b, 0x50fea2d6, 0xab1d89c2, 0xe210ee4f, 0x390746d8, 0x700a2155, 0xca000d47, 0x830d6aca, 0x581ac25d, 0x1117a5d0, 0xeaf48ec4, 0xa3f9e949, 0x78ee41de, 0x31e32653, ], [ 0x00000000, 0x1b280d78, 0x36501af0, 0x2d781788, 0x6ca035e0, 0x77883898, 0x5af02f10, 0x41d82268, 0xd9406bc0, 0xc26866b8, 0xef107130, 0xf4387c48, 0xb5e05e20, 0xaec85358, 0x83b044d0, 0x989849a8, 0xb641ca37, 0xad69c74f, 0x8011d0c7, 0x9b39ddbf, 0xdae1ffd7, 0xc1c9f2af, 0xecb1e527, 0xf799e85f, 0x6f01a1f7, 0x7429ac8f, 0x5951bb07, 0x4279b67f, 0x03a19417, 0x1889996f, 0x35f18ee7, 0x2ed9839f, 0x684289d9, 0x736a84a1, 0x5e129329, 0x453a9e51, 0x04e2bc39, 0x1fcab141, 0x32b2a6c9, 0x299aabb1, 0xb102e219, 0xaa2aef61, 0x8752f8e9, 0x9c7af591, 0xdda2d7f9, 0xc68ada81, 0xebf2cd09, 0xf0dac071, 0xde0343ee, 0xc52b4e96, 0xe853591e, 0xf37b5466, 0xb2a3760e, 0xa98b7b76, 0x84f36cfe, 0x9fdb6186, 0x0743282e, 0x1c6b2556, 0x311332de, 0x2a3b3fa6, 0x6be31dce, 0x70cb10b6, 0x5db3073e, 0x469b0a46, 0xd08513b2, 0xcbad1eca, 0xe6d50942, 0xfdfd043a, 0xbc252652, 0xa70d2b2a, 0x8a753ca2, 0x915d31da, 0x09c57872, 0x12ed750a, 0x3f956282, 0x24bd6ffa, 0x65654d92, 0x7e4d40ea, 0x53355762, 0x481d5a1a, 0x66c4d985, 0x7decd4fd, 0x5094c375, 0x4bbcce0d, 0x0a64ec65, 0x114ce11d, 0x3c34f695, 0x271cfbed, 0xbf84b245, 0xa4acbf3d, 0x89d4a8b5, 0x92fca5cd, 0xd32487a5, 0xc80c8add, 0xe5749d55, 0xfe5c902d, 0xb8c79a6b, 0xa3ef9713, 0x8e97809b, 0x95bf8de3, 0xd467af8b, 0xcf4fa2f3, 0xe237b57b, 0xf91fb803, 0x6187f1ab, 0x7aaffcd3, 0x57d7eb5b, 0x4cffe623, 0x0d27c44b, 0x160fc933, 0x3b77debb, 0x205fd3c3, 0x0e86505c, 0x15ae5d24, 0x38d64aac, 0x23fe47d4, 0x622665bc, 0x790e68c4, 0x54767f4c, 0x4f5e7234, 0xd7c63b9c, 0xccee36e4, 0xe196216c, 0xfabe2c14, 0xbb660e7c, 0xa04e0304, 0x8d36148c, 0x961e19f4, 0xa5cb3ad3, 0xbee337ab, 0x939b2023, 0x88b32d5b, 0xc96b0f33, 0xd243024b, 0xff3b15c3, 0xe41318bb, 0x7c8b5113, 0x67a35c6b, 0x4adb4be3, 0x51f3469b, 0x102b64f3, 0x0b03698b, 0x267b7e03, 0x3d53737b, 0x138af0e4, 0x08a2fd9c, 0x25daea14, 0x3ef2e76c, 0x7f2ac504, 0x6402c87c, 0x497adff4, 0x5252d28c, 0xcaca9b24, 0xd1e2965c, 0xfc9a81d4, 0xe7b28cac, 0xa66aaec4, 0xbd42a3bc, 0x903ab434, 0x8b12b94c, 0xcd89b30a, 0xd6a1be72, 0xfbd9a9fa, 0xe0f1a482, 0xa12986ea, 0xba018b92, 0x97799c1a, 0x8c519162, 0x14c9d8ca, 0x0fe1d5b2, 0x2299c23a, 0x39b1cf42, 0x7869ed2a, 0x6341e052, 0x4e39f7da, 0x5511faa2, 0x7bc8793d, 0x60e07445, 0x4d9863cd, 0x56b06eb5, 0x17684cdd, 0x0c4041a5, 0x2138562d, 0x3a105b55, 0xa28812fd, 0xb9a01f85, 0x94d8080d, 0x8ff00575, 0xce28271d, 0xd5002a65, 0xf8783ded, 0xe3503095, 0x754e2961, 0x6e662419, 0x431e3391, 0x58363ee9, 0x19ee1c81, 0x02c611f9, 0x2fbe0671, 0x34960b09, 0xac0e42a1, 0xb7264fd9, 0x9a5e5851, 0x81765529, 0xc0ae7741, 0xdb867a39, 0xf6fe6db1, 0xedd660c9, 0xc30fe356, 0xd827ee2e, 0xf55ff9a6, 0xee77f4de, 0xafafd6b6, 0xb487dbce, 0x99ffcc46, 0x82d7c13e, 0x1a4f8896, 0x016785ee, 0x2c1f9266, 0x37379f1e, 0x76efbd76, 0x6dc7b00e, 0x40bfa786, 0x5b97aafe, 0x1d0ca0b8, 0x0624adc0, 0x2b5cba48, 0x3074b730, 0x71ac9558, 0x6a849820, 0x47fc8fa8, 0x5cd482d0, 0xc44ccb78, 0xdf64c600, 0xf21cd188, 0xe934dcf0, 0xa8ecfe98, 0xb3c4f3e0, 0x9ebce468, 0x8594e910, 0xab4d6a8f, 0xb06567f7, 0x9d1d707f, 0x86357d07, 0xc7ed5f6f, 0xdcc55217, 0xf1bd459f, 0xea9548e7, 0x720d014f, 0x69250c37, 0x445d1bbf, 0x5f7516c7, 0x1ead34af, 0x058539d7, 0x28fd2e5f, 0x33d52327, ], [ 0x00000000, 0x4f576811, 0x9eaed022, 0xd1f9b833, 0x399cbdf3, 0x76cbd5e2, 0xa7326dd1, 0xe86505c0, 0x73397be6, 0x3c6e13f7, 0xed97abc4, 0xa2c0c3d5, 0x4aa5c615, 0x05f2ae04, 0xd40b1637, 0x9b5c7e26, 0xe672f7cc, 0xa9259fdd, 0x78dc27ee, 0x378b4fff, 0xdfee4a3f, 0x90b9222e, 0x41409a1d, 0x0e17f20c, 0x954b8c2a, 0xda1ce43b, 0x0be55c08, 0x44b23419, 0xacd731d9, 0xe38059c8, 0x3279e1fb, 0x7d2e89ea, 0xc824f22f, 0x87739a3e, 0x568a220d, 0x19dd4a1c, 0xf1b84fdc, 0xbeef27cd, 0x6f169ffe, 0x2041f7ef, 0xbb1d89c9, 0xf44ae1d8, 0x25b359eb, 0x6ae431fa, 0x8281343a, 0xcdd65c2b, 0x1c2fe418, 0x53788c09, 0x2e5605e3, 0x61016df2, 0xb0f8d5c1, 0xffafbdd0, 0x17cab810, 0x589dd001, 0x89646832, 0xc6330023, 0x5d6f7e05, 0x12381614, 0xc3c1ae27, 0x8c96c636, 0x64f3c3f6, 0x2ba4abe7, 0xfa5d13d4, 0xb50a7bc5, 0x9488f9e9, 0xdbdf91f8, 0x0a2629cb, 0x457141da, 0xad14441a, 0xe2432c0b, 0x33ba9438, 0x7cedfc29, 0xe7b1820f, 0xa8e6ea1e, 0x791f522d, 0x36483a3c, 0xde2d3ffc, 0x917a57ed, 0x4083efde, 0x0fd487cf, 0x72fa0e25, 0x3dad6634, 0xec54de07, 0xa303b616, 0x4b66b3d6, 0x0431dbc7, 0xd5c863f4, 0x9a9f0be5, 0x01c375c3, 0x4e941dd2, 0x9f6da5e1, 0xd03acdf0, 0x385fc830, 0x7708a021, 0xa6f11812, 0xe9a67003, 0x5cac0bc6, 0x13fb63d7, 0xc202dbe4, 0x8d55b3f5, 0x6530b635, 0x2a67de24, 0xfb9e6617, 0xb4c90e06, 0x2f957020, 0x60c21831, 0xb13ba002, 0xfe6cc813, 0x1609cdd3, 0x595ea5c2, 0x88a71df1, 0xc7f075e0, 0xbadefc0a, 0xf589941b, 0x24702c28, 0x6b274439, 0x834241f9, 0xcc1529e8, 0x1dec91db, 0x52bbf9ca, 0xc9e787ec, 0x86b0effd, 0x574957ce, 0x181e3fdf, 0xf07b3a1f, 0xbf2c520e, 0x6ed5ea3d, 0x2182822c, 0x2dd0ee65, 0x62878674, 0xb37e3e47, 0xfc295656, 0x144c5396, 0x5b1b3b87, 0x8ae283b4, 0xc5b5eba5, 0x5ee99583, 0x11befd92, 0xc04745a1, 0x8f102db0, 0x67752870, 0x28224061, 0xf9dbf852, 0xb68c9043, 0xcba219a9, 0x84f571b8, 0x550cc98b, 0x1a5ba19a, 0xf23ea45a, 0xbd69cc4b, 0x6c907478, 0x23c71c69, 0xb89b624f, 0xf7cc0a5e, 0x2635b26d, 0x6962da7c, 0x8107dfbc, 0xce50b7ad, 0x1fa90f9e, 0x50fe678f, 0xe5f41c4a, 0xaaa3745b, 0x7b5acc68, 0x340da479, 0xdc68a1b9, 0x933fc9a8, 0x42c6719b, 0x0d91198a, 0x96cd67ac, 0xd99a0fbd, 0x0863b78e, 0x4734df9f, 0xaf51da5f, 0xe006b24e, 0x31ff0a7d, 0x7ea8626c, 0x0386eb86, 0x4cd18397, 0x9d283ba4, 0xd27f53b5, 0x3a1a5675, 0x754d3e64, 0xa4b48657, 0xebe3ee46, 0x70bf9060, 0x3fe8f871, 0xee114042, 0xa1462853, 0x49232d93, 0x06744582, 0xd78dfdb1, 0x98da95a0, 0xb958178c, 0xf60f7f9d, 0x27f6c7ae, 0x68a1afbf, 0x80c4aa7f, 0xcf93c26e, 0x1e6a7a5d, 0x513d124c, 0xca616c6a, 0x8536047b, 0x54cfbc48, 0x1b98d459, 0xf3fdd199, 0xbcaab988, 0x6d5301bb, 0x220469aa, 0x5f2ae040, 0x107d8851, 0xc1843062, 0x8ed35873, 0x66b65db3, 0x29e135a2, 0xf8188d91, 0xb74fe580, 0x2c139ba6, 0x6344f3b7, 0xb2bd4b84, 0xfdea2395, 0x158f2655, 0x5ad84e44, 0x8b21f677, 0xc4769e66, 0x717ce5a3, 0x3e2b8db2, 0xefd23581, 0xa0855d90, 0x48e05850, 0x07b73041, 0xd64e8872, 0x9919e063, 0x02459e45, 0x4d12f654, 0x9ceb4e67, 0xd3bc2676, 0x3bd923b6, 0x748e4ba7, 0xa577f394, 0xea209b85, 0x970e126f, 0xd8597a7e, 0x09a0c24d, 0x46f7aa5c, 0xae92af9c, 0xe1c5c78d, 0x303c7fbe, 0x7f6b17af, 0xe4376989, 0xab600198, 0x7a99b9ab, 0x35ced1ba, 0xddabd47a, 0x92fcbc6b, 0x43050458, 0x0c526c49, ], [ 0x00000000, 0x5ba1dcca, 0xb743b994, 0xece2655e, 0x6a466e9f, 0x31e7b255, 0xdd05d70b, 0x86a40bc1, 0xd48cdd3e, 0x8f2d01f4, 0x63cf64aa, 0x386eb860, 0xbecab3a1, 0xe56b6f6b, 0x09890a35, 0x5228d6ff, 0xadd8a7cb, 0xf6797b01, 0x1a9b1e5f, 0x413ac295, 0xc79ec954, 0x9c3f159e, 0x70dd70c0, 0x2b7cac0a, 0x79547af5, 0x22f5a63f, 0xce17c361, 0x95b61fab, 0x1312146a, 0x48b3c8a0, 0xa451adfe, 0xfff07134, 0x5f705221, 0x04d18eeb, 0xe833ebb5, 0xb392377f, 0x35363cbe, 0x6e97e074, 0x8275852a, 0xd9d459e0, 0x8bfc8f1f, 0xd05d53d5, 0x3cbf368b, 0x671eea41, 0xe1bae180, 0xba1b3d4a, 0x56f95814, 0x0d5884de, 0xf2a8f5ea, 0xa9092920, 0x45eb4c7e, 0x1e4a90b4, 0x98ee9b75, 0xc34f47bf, 0x2fad22e1, 0x740cfe2b, 0x262428d4, 0x7d85f41e, 0x91679140, 0xcac64d8a, 0x4c62464b, 0x17c39a81, 0xfb21ffdf, 0xa0802315, 0xbee0a442, 0xe5417888, 0x09a31dd6, 0x5202c11c, 0xd4a6cadd, 0x8f071617, 0x63e57349, 0x3844af83, 0x6a6c797c, 0x31cda5b6, 0xdd2fc0e8, 0x868e1c22, 0x002a17e3, 0x5b8bcb29, 0xb769ae77, 0xecc872bd, 0x13380389, 0x4899df43, 0xa47bba1d, 0xffda66d7, 0x797e6d16, 0x22dfb1dc, 0xce3dd482, 0x959c0848, 0xc7b4deb7, 0x9c15027d, 0x70f76723, 0x2b56bbe9, 0xadf2b028, 0xf6536ce2, 0x1ab109bc, 0x4110d576, 0xe190f663, 0xba312aa9, 0x56d34ff7, 0x0d72933d, 0x8bd698fc, 0xd0774436, 0x3c952168, 0x6734fda2, 0x351c2b5d, 0x6ebdf797, 0x825f92c9, 0xd9fe4e03, 0x5f5a45c2, 0x04fb9908, 0xe819fc56, 0xb3b8209c, 0x4c4851a8, 0x17e98d62, 0xfb0be83c, 0xa0aa34f6, 0x260e3f37, 0x7dafe3fd, 0x914d86a3, 0xcaec5a69, 0x98c48c96, 0xc365505c, 0x2f873502, 0x7426e9c8, 0xf282e209, 0xa9233ec3, 0x45c15b9d, 0x1e608757, 0x79005533, 0x22a189f9, 0xce43eca7, 0x95e2306d, 0x13463bac, 0x48e7e766, 0xa4058238, 0xffa45ef2, 0xad8c880d, 0xf62d54c7, 0x1acf3199, 0x416eed53, 0xc7cae692, 0x9c6b3a58, 0x70895f06, 0x2b2883cc, 0xd4d8f2f8, 0x8f792e32, 0x639b4b6c, 0x383a97a6, 0xbe9e9c67, 0xe53f40ad, 0x09dd25f3, 0x527cf939, 0x00542fc6, 0x5bf5f30c, 0xb7179652, 0xecb64a98, 0x6a124159, 0x31b39d93, 0xdd51f8cd, 0x86f02407, 0x26700712, 0x7dd1dbd8, 0x9133be86, 0xca92624c, 0x4c36698d, 0x1797b547, 0xfb75d019, 0xa0d40cd3, 0xf2fcda2c, 0xa95d06e6, 0x45bf63b8, 0x1e1ebf72, 0x98bab4b3, 0xc31b6879, 0x2ff90d27, 0x7458d1ed, 0x8ba8a0d9, 0xd0097c13, 0x3ceb194d, 0x674ac587, 0xe1eece46, 0xba4f128c, 0x56ad77d2, 0x0d0cab18, 0x5f247de7, 0x0485a12d, 0xe867c473, 0xb3c618b9, 0x35621378, 0x6ec3cfb2, 0x8221aaec, 0xd9807626, 0xc7e0f171, 0x9c412dbb, 0x70a348e5, 0x2b02942f, 0xada69fee, 0xf6074324, 0x1ae5267a, 0x4144fab0, 0x136c2c4f, 0x48cdf085, 0xa42f95db, 0xff8e4911, 0x792a42d0, 0x228b9e1a, 0xce69fb44, 0x95c8278e, 0x6a3856ba, 0x31998a70, 0xdd7bef2e, 0x86da33e4, 0x007e3825, 0x5bdfe4ef, 0xb73d81b1, 0xec9c5d7b, 0xbeb48b84, 0xe515574e, 0x09f73210, 0x5256eeda, 0xd4f2e51b, 0x8f5339d1, 0x63b15c8f, 0x38108045, 0x9890a350, 0xc3317f9a, 0x2fd31ac4, 0x7472c60e, 0xf2d6cdcf, 0xa9771105, 0x4595745b, 0x1e34a891, 0x4c1c7e6e, 0x17bda2a4, 0xfb5fc7fa, 0xa0fe1b30, 0x265a10f1, 0x7dfbcc3b, 0x9119a965, 0xcab875af, 0x3548049b, 0x6ee9d851, 0x820bbd0f, 0xd9aa61c5, 0x5f0e6a04, 0x04afb6ce, 0xe84dd390, 0xb3ec0f5a, 0xe1c4d9a5, 0xba65056f, 0x56876031, 0x0d26bcfb, 0x8b82b73a, 0xd0236bf0, 0x3cc10eae, 0x6760d264, ], [ 0x00000000, 0xf200aa66, 0xe0c0497b, 0x12c0e31d, 0xc5418f41, 0x37412527, 0x2581c63a, 0xd7816c5c, 0x8e420335, 0x7c42a953, 0x6e824a4e, 0x9c82e028, 0x4b038c74, 0xb9032612, 0xabc3c50f, 0x59c36f69, 0x18451bdd, 0xea45b1bb, 0xf88552a6, 0x0a85f8c0, 0xdd04949c, 0x2f043efa, 0x3dc4dde7, 0xcfc47781, 0x960718e8, 0x6407b28e, 0x76c75193, 0x84c7fbf5, 0x534697a9, 0xa1463dcf, 0xb386ded2, 0x418674b4, 0x308a37ba, 0xc28a9ddc, 0xd04a7ec1, 0x224ad4a7, 0xf5cbb8fb, 0x07cb129d, 0x150bf180, 0xe70b5be6, 0xbec8348f, 0x4cc89ee9, 0x5e087df4, 0xac08d792, 0x7b89bbce, 0x898911a8, 0x9b49f2b5, 0x694958d3, 0x28cf2c67, 0xdacf8601, 0xc80f651c, 0x3a0fcf7a, 0xed8ea326, 0x1f8e0940, 0x0d4eea5d, 0xff4e403b, 0xa68d2f52, 0x548d8534, 0x464d6629, 0xb44dcc4f, 0x63cca013, 0x91cc0a75, 0x830ce968, 0x710c430e, 0x61146f74, 0x9314c512, 0x81d4260f, 0x73d48c69, 0xa455e035, 0x56554a53, 0x4495a94e, 0xb6950328, 0xef566c41, 0x1d56c627, 0x0f96253a, 0xfd968f5c, 0x2a17e300, 0xd8174966, 0xcad7aa7b, 0x38d7001d, 0x795174a9, 0x8b51decf, 0x99913dd2, 0x6b9197b4, 0xbc10fbe8, 0x4e10518e, 0x5cd0b293, 0xaed018f5, 0xf713779c, 0x0513ddfa, 0x17d33ee7, 0xe5d39481, 0x3252f8dd, 0xc05252bb, 0xd292b1a6, 0x20921bc0, 0x519e58ce, 0xa39ef2a8, 0xb15e11b5, 0x435ebbd3, 0x94dfd78f, 0x66df7de9, 0x741f9ef4, 0x861f3492, 0xdfdc5bfb, 0x2ddcf19d, 0x3f1c1280, 0xcd1cb8e6, 0x1a9dd4ba, 0xe89d7edc, 0xfa5d9dc1, 0x085d37a7, 0x49db4313, 0xbbdbe975, 0xa91b0a68, 0x5b1ba00e, 0x8c9acc52, 0x7e9a6634, 0x6c5a8529, 0x9e5a2f4f, 0xc7994026, 0x3599ea40, 0x2759095d, 0xd559a33b, 0x02d8cf67, 0xf0d86501, 0xe218861c, 0x10182c7a, 0xc228dee8, 0x3028748e, 0x22e89793, 0xd0e83df5, 0x076951a9, 0xf569fbcf, 0xe7a918d2, 0x15a9b2b4, 0x4c6adddd, 0xbe6a77bb, 0xacaa94a6, 0x5eaa3ec0, 0x892b529c, 0x7b2bf8fa, 0x69eb1be7, 0x9bebb181, 0xda6dc535, 0x286d6f53, 0x3aad8c4e, 0xc8ad2628, 0x1f2c4a74, 0xed2ce012, 0xffec030f, 0x0deca969, 0x542fc600, 0xa62f6c66, 0xb4ef8f7b, 0x46ef251d, 0x916e4941, 0x636ee327, 0x71ae003a, 0x83aeaa5c, 0xf2a2e952, 0x00a24334, 0x1262a029, 0xe0620a4f, 0x37e36613, 0xc5e3cc75, 0xd7232f68, 0x2523850e, 0x7ce0ea67, 0x8ee04001, 0x9c20a31c, 0x6e20097a, 0xb9a16526, 0x4ba1cf40, 0x59612c5d, 0xab61863b, 0xeae7f28f, 0x18e758e9, 0x0a27bbf4, 0xf8271192, 0x2fa67dce, 0xdda6d7a8, 0xcf6634b5, 0x3d669ed3, 0x64a5f1ba, 0x96a55bdc, 0x8465b8c1, 0x766512a7, 0xa1e47efb, 0x53e4d49d, 0x41243780, 0xb3249de6, 0xa33cb19c, 0x513c1bfa, 0x43fcf8e7, 0xb1fc5281, 0x667d3edd, 0x947d94bb, 0x86bd77a6, 0x74bdddc0, 0x2d7eb2a9, 0xdf7e18cf, 0xcdbefbd2, 0x3fbe51b4, 0xe83f3de8, 0x1a3f978e, 0x08ff7493, 0xfaffdef5, 0xbb79aa41, 0x49790027, 0x5bb9e33a, 0xa9b9495c, 0x7e382500, 0x8c388f66, 0x9ef86c7b, 0x6cf8c61d, 0x353ba974, 0xc73b0312, 0xd5fbe00f, 0x27fb4a69, 0xf07a2635, 0x027a8c53, 0x10ba6f4e, 0xe2bac528, 0x93b68626, 0x61b62c40, 0x7376cf5d, 0x8176653b, 0x56f70967, 0xa4f7a301, 0xb637401c, 0x4437ea7a, 0x1df48513, 0xeff42f75, 0xfd34cc68, 0x0f34660e, 0xd8b50a52, 0x2ab5a034, 0x38754329, 0xca75e94f, 0x8bf39dfb, 0x79f3379d, 0x6b33d480, 0x99337ee6, 0x4eb212ba, 0xbcb2b8dc, 0xae725bc1, 0x5c72f1a7, 0x05b19ece, 0xf7b134a8, 0xe571d7b5, 0x17717dd3, 0xc0f0118f, 0x32f0bbe9, 0x203058f4, 0xd230f292, ], [ 0x00000000, 0x8090a067, 0x05e05d79, 0x8570fd1e, 0x0bc0baf2, 0x8b501a95, 0x0e20e78b, 0x8eb047ec, 0x178175e4, 0x9711d583, 0x1261289d, 0x92f188fa, 0x1c41cf16, 0x9cd16f71, 0x19a1926f, 0x99313208, 0x2f02ebc8, 0xaf924baf, 0x2ae2b6b1, 0xaa7216d6, 0x24c2513a, 0xa452f15d, 0x21220c43, 0xa1b2ac24, 0x38839e2c, 0xb8133e4b, 0x3d63c355, 0xbdf36332, 0x334324de, 0xb3d384b9, 0x36a379a7, 0xb633d9c0, 0x5e05d790, 0xde9577f7, 0x5be58ae9, 0xdb752a8e, 0x55c56d62, 0xd555cd05, 0x5025301b, 0xd0b5907c, 0x4984a274, 0xc9140213, 0x4c64ff0d, 0xccf45f6a, 0x42441886, 0xc2d4b8e1, 0x47a445ff, 0xc734e598, 0x71073c58, 0xf1979c3f, 0x74e76121, 0xf477c146, 0x7ac786aa, 0xfa5726cd, 0x7f27dbd3, 0xffb77bb4, 0x668649bc, 0xe616e9db, 0x636614c5, 0xe3f6b4a2, 0x6d46f34e, 0xedd65329, 0x68a6ae37, 0xe8360e50, 0xbc0baf20, 0x3c9b0f47, 0xb9ebf259, 0x397b523e, 0xb7cb15d2, 0x375bb5b5, 0xb22b48ab, 0x32bbe8cc, 0xab8adac4, 0x2b1a7aa3, 0xae6a87bd, 0x2efa27da, 0xa04a6036, 0x20dac051, 0xa5aa3d4f, 0x253a9d28, 0x930944e8, 0x1399e48f, 0x96e91991, 0x1679b9f6, 0x98c9fe1a, 0x18595e7d, 0x9d29a363, 0x1db90304, 0x8488310c, 0x0418916b, 0x81686c75, 0x01f8cc12, 0x8f488bfe, 0x0fd82b99, 0x8aa8d687, 0x0a3876e0, 0xe20e78b0, 0x629ed8d7, 0xe7ee25c9, 0x677e85ae, 0xe9cec242, 0x695e6225, 0xec2e9f3b, 0x6cbe3f5c, 0xf58f0d54, 0x751fad33, 0xf06f502d, 0x70fff04a, 0xfe4fb7a6, 0x7edf17c1, 0xfbafeadf, 0x7b3f4ab8, 0xcd0c9378, 0x4d9c331f, 0xc8ecce01, 0x487c6e66, 0xc6cc298a, 0x465c89ed, 0xc32c74f3, 0x43bcd494, 0xda8de69c, 0x5a1d46fb, 0xdf6dbbe5, 0x5ffd1b82, 0xd14d5c6e, 0x51ddfc09, 0xd4ad0117, 0x543da170, 0x7cd643f7, 0xfc46e390, 0x79361e8e, 0xf9a6bee9, 0x7716f905, 0xf7865962, 0x72f6a47c, 0xf266041b, 0x6b573613, 0xebc79674, 0x6eb76b6a, 0xee27cb0d, 0x60978ce1, 0xe0072c86, 0x6577d198, 0xe5e771ff, 0x53d4a83f, 0xd3440858, 0x5634f546, 0xd6a45521, 0x581412cd, 0xd884b2aa, 0x5df44fb4, 0xdd64efd3, 0x4455dddb, 0xc4c57dbc, 0x41b580a2, 0xc12520c5, 0x4f956729, 0xcf05c74e, 0x4a753a50, 0xcae59a37, 0x22d39467, 0xa2433400, 0x2733c91e, 0xa7a36979, 0x29132e95, 0xa9838ef2, 0x2cf373ec, 0xac63d38b, 0x3552e183, 0xb5c241e4, 0x30b2bcfa, 0xb0221c9d, 0x3e925b71, 0xbe02fb16, 0x3b720608, 0xbbe2a66f, 0x0dd17faf, 0x8d41dfc8, 0x083122d6, 0x88a182b1, 0x0611c55d, 0x8681653a, 0x03f19824, 0x83613843, 0x1a500a4b, 0x9ac0aa2c, 0x1fb05732, 0x9f20f755, 0x1190b0b9, 0x910010de, 0x1470edc0, 0x94e04da7, 0xc0ddecd7, 0x404d4cb0, 0xc53db1ae, 0x45ad11c9, 0xcb1d5625, 0x4b8df642, 0xcefd0b5c, 0x4e6dab3b, 0xd75c9933, 0x57cc3954, 0xd2bcc44a, 0x522c642d, 0xdc9c23c1, 0x5c0c83a6, 0xd97c7eb8, 0x59ecdedf, 0xefdf071f, 0x6f4fa778, 0xea3f5a66, 0x6aaffa01, 0xe41fbded, 0x648f1d8a, 0xe1ffe094, 0x616f40f3, 0xf85e72fb, 0x78ced29c, 0xfdbe2f82, 0x7d2e8fe5, 0xf39ec809, 0x730e686e, 0xf67e9570, 0x76ee3517, 0x9ed83b47, 0x1e489b20, 0x9b38663e, 0x1ba8c659, 0x951881b5, 0x158821d2, 0x90f8dccc, 0x10687cab, 0x89594ea3, 0x09c9eec4, 0x8cb913da, 0x0c29b3bd, 0x8299f451, 0x02095436, 0x8779a928, 0x07e9094f, 0xb1dad08f, 0x314a70e8, 0xb43a8df6, 0x34aa2d91, 0xba1a6a7d, 0x3a8aca1a, 0xbffa3704, 0x3f6a9763, 0xa65ba56b, 0x26cb050c, 0xa3bbf812, 0x232b5875, 0xad9b1f99, 0x2d0bbffe, 0xa87b42e0, 0x28ebe287, ], [ 0x00000000, 0xf9ac87ee, 0xf798126b, 0x0e349585, 0xebf13961, 0x125dbe8f, 0x1c692b0a, 0xe5c5ace4, 0xd3236f75, 0x2a8fe89b, 0x24bb7d1e, 0xdd17faf0, 0x38d25614, 0xc17ed1fa, 0xcf4a447f, 0x36e6c391, 0xa287c35d, 0x5b2b44b3, 0x551fd136, 0xacb356d8, 0x4976fa3c, 0xb0da7dd2, 0xbeeee857, 0x47426fb9, 0x71a4ac28, 0x88082bc6, 0x863cbe43, 0x7f9039ad, 0x9a559549, 0x63f912a7, 0x6dcd8722, 0x946100cc, 0x41ce9b0d, 0xb8621ce3, 0xb6568966, 0x4ffa0e88, 0xaa3fa26c, 0x53932582, 0x5da7b007, 0xa40b37e9, 0x92edf478, 0x6b417396, 0x6575e613, 0x9cd961fd, 0x791ccd19, 0x80b04af7, 0x8e84df72, 0x7728589c, 0xe3495850, 0x1ae5dfbe, 0x14d14a3b, 0xed7dcdd5, 0x08b86131, 0xf114e6df, 0xff20735a, 0x068cf4b4, 0x306a3725, 0xc9c6b0cb, 0xc7f2254e, 0x3e5ea2a0, 0xdb9b0e44, 0x223789aa, 0x2c031c2f, 0xd5af9bc1, 0x839d361a, 0x7a31b1f4, 0x74052471, 0x8da9a39f, 0x686c0f7b, 0x91c08895, 0x9ff41d10, 0x66589afe, 0x50be596f, 0xa912de81, 0xa7264b04, 0x5e8accea, 0xbb4f600e, 0x42e3e7e0, 0x4cd77265, 0xb57bf58b, 0x211af547, 0xd8b672a9, 0xd682e72c, 0x2f2e60c2, 0xcaebcc26, 0x33474bc8, 0x3d73de4d, 0xc4df59a3, 0xf2399a32, 0x0b951ddc, 0x05a18859, 0xfc0d0fb7, 0x19c8a353, 0xe06424bd, 0xee50b138, 0x17fc36d6, 0xc253ad17, 0x3bff2af9, 0x35cbbf7c, 0xcc673892, 0x29a29476, 0xd00e1398, 0xde3a861d, 0x279601f3, 0x1170c262, 0xe8dc458c, 0xe6e8d009, 0x1f4457e7, 0xfa81fb03, 0x032d7ced, 0x0d19e968, 0xf4b56e86, 0x60d46e4a, 0x9978e9a4, 0x974c7c21, 0x6ee0fbcf, 0x8b25572b, 0x7289d0c5, 0x7cbd4540, 0x8511c2ae, 0xb3f7013f, 0x4a5b86d1, 0x446f1354, 0xbdc394ba, 0x5806385e, 0xa1aabfb0, 0xaf9e2a35, 0x5632addb, 0x03fb7183, 0xfa57f66d, 0xf46363e8, 0x0dcfe406, 0xe80a48e2, 0x11a6cf0c, 0x1f925a89, 0xe63edd67, 0xd0d81ef6, 0x29749918, 0x27400c9d, 0xdeec8b73, 0x3b292797, 0xc285a079, 0xccb135fc, 0x351db212, 0xa17cb2de, 0x58d03530, 0x56e4a0b5, 0xaf48275b, 0x4a8d8bbf, 0xb3210c51, 0xbd1599d4, 0x44b91e3a, 0x725fddab, 0x8bf35a45, 0x85c7cfc0, 0x7c6b482e, 0x99aee4ca, 0x60026324, 0x6e36f6a1, 0x979a714f, 0x4235ea8e, 0xbb996d60, 0xb5adf8e5, 0x4c017f0b, 0xa9c4d3ef, 0x50685401, 0x5e5cc184, 0xa7f0466a, 0x911685fb, 0x68ba0215, 0x668e9790, 0x9f22107e, 0x7ae7bc9a, 0x834b3b74, 0x8d7faef1, 0x74d3291f, 0xe0b229d3, 0x191eae3d, 0x172a3bb8, 0xee86bc56, 0x0b4310b2, 0xf2ef975c, 0xfcdb02d9, 0x05778537, 0x339146a6, 0xca3dc148, 0xc40954cd, 0x3da5d323, 0xd8607fc7, 0x21ccf829, 0x2ff86dac, 0xd654ea42, 0x80664799, 0x79cac077, 0x77fe55f2, 0x8e52d21c, 0x6b977ef8, 0x923bf916, 0x9c0f6c93, 0x65a3eb7d, 0x534528ec, 0xaae9af02, 0xa4dd3a87, 0x5d71bd69, 0xb8b4118d, 0x41189663, 0x4f2c03e6, 0xb6808408, 0x22e184c4, 0xdb4d032a, 0xd57996af, 0x2cd51141, 0xc910bda5, 0x30bc3a4b, 0x3e88afce, 0xc7242820, 0xf1c2ebb1, 0x086e6c5f, 0x065af9da, 0xfff67e34, 0x1a33d2d0, 0xe39f553e, 0xedabc0bb, 0x14074755, 0xc1a8dc94, 0x38045b7a, 0x3630ceff, 0xcf9c4911, 0x2a59e5f5, 0xd3f5621b, 0xddc1f79e, 0x246d7070, 0x128bb3e1, 0xeb27340f, 0xe513a18a, 0x1cbf2664, 0xf97a8a80, 0x00d60d6e, 0x0ee298eb, 0xf74e1f05, 0x632f1fc9, 0x9a839827, 0x94b70da2, 0x6d1b8a4c, 0x88de26a8, 0x7172a146, 0x7f4634c3, 0x86eab32d, 0xb00c70bc, 0x49a0f752, 0x479462d7, 0xbe38e539, 0x5bfd49dd, 0xa251ce33, 0xac655bb6, 0x55c9dc58, ], [ 0x00000000, 0x07f6e306, 0x0fedc60c, 0x081b250a, 0x1fdb8c18, 0x182d6f1e, 0x10364a14, 0x17c0a912, 0x3fb71830, 0x3841fb36, 0x305ade3c, 0x37ac3d3a, 0x206c9428, 0x279a772e, 0x2f815224, 0x2877b122, 0x7f6e3060, 0x7898d366, 0x7083f66c, 0x7775156a, 0x60b5bc78, 0x67435f7e, 0x6f587a74, 0x68ae9972, 0x40d92850, 0x472fcb56, 0x4f34ee5c, 0x48c20d5a, 0x5f02a448, 0x58f4474e, 0x50ef6244, 0x57198142, 0xfedc60c0, 0xf92a83c6, 0xf131a6cc, 0xf6c745ca, 0xe107ecd8, 0xe6f10fde, 0xeeea2ad4, 0xe91cc9d2, 0xc16b78f0, 0xc69d9bf6, 0xce86befc, 0xc9705dfa, 0xdeb0f4e8, 0xd94617ee, 0xd15d32e4, 0xd6abd1e2, 0x81b250a0, 0x8644b3a6, 0x8e5f96ac, 0x89a975aa, 0x9e69dcb8, 0x999f3fbe, 0x91841ab4, 0x9672f9b2, 0xbe054890, 0xb9f3ab96, 0xb1e88e9c, 0xb61e6d9a, 0xa1dec488, 0xa628278e, 0xae330284, 0xa9c5e182, 0xf979dc37, 0xfe8f3f31, 0xf6941a3b, 0xf162f93d, 0xe6a2502f, 0xe154b329, 0xe94f9623, 0xeeb97525, 0xc6cec407, 0xc1382701, 0xc923020b, 0xced5e10d, 0xd915481f, 0xdee3ab19, 0xd6f88e13, 0xd10e6d15, 0x8617ec57, 0x81e10f51, 0x89fa2a5b, 0x8e0cc95d, 0x99cc604f, 0x9e3a8349, 0x9621a643, 0x91d74545, 0xb9a0f467, 0xbe561761, 0xb64d326b, 0xb1bbd16d, 0xa67b787f, 0xa18d9b79, 0xa996be73, 0xae605d75, 0x07a5bcf7, 0x00535ff1, 0x08487afb, 0x0fbe99fd, 0x187e30ef, 0x1f88d3e9, 0x1793f6e3, 0x106515e5, 0x3812a4c7, 0x3fe447c1, 0x37ff62cb, 0x300981cd, 0x27c928df, 0x203fcbd9, 0x2824eed3, 0x2fd20dd5, 0x78cb8c97, 0x7f3d6f91, 0x77264a9b, 0x70d0a99d, 0x6710008f, 0x60e6e389, 0x68fdc683, 0x6f0b2585, 0x477c94a7, 0x408a77a1, 0x489152ab, 0x4f67b1ad, 0x58a718bf, 0x5f51fbb9, 0x574adeb3, 0x50bc3db5, 0xf632a5d9, 0xf1c446df, 0xf9df63d5, 0xfe2980d3, 0xe9e929c1, 0xee1fcac7, 0xe604efcd, 0xe1f20ccb, 0xc985bde9, 0xce735eef, 0xc6687be5, 0xc19e98e3, 0xd65e31f1, 0xd1a8d2f7, 0xd9b3f7fd, 0xde4514fb, 0x895c95b9, 0x8eaa76bf, 0x86b153b5, 0x8147b0b3, 0x968719a1, 0x9171faa7, 0x996adfad, 0x9e9c3cab, 0xb6eb8d89, 0xb11d6e8f, 0xb9064b85, 0xbef0a883, 0xa9300191, 0xaec6e297, 0xa6ddc79d, 0xa12b249b, 0x08eec519, 0x0f18261f, 0x07030315, 0x00f5e013, 0x17354901, 0x10c3aa07, 0x18d88f0d, 0x1f2e6c0b, 0x3759dd29, 0x30af3e2f, 0x38b41b25, 0x3f42f823, 0x28825131, 0x2f74b237, 0x276f973d, 0x2099743b, 0x7780f579, 0x7076167f, 0x786d3375, 0x7f9bd073, 0x685b7961, 0x6fad9a67, 0x67b6bf6d, 0x60405c6b, 0x4837ed49, 0x4fc10e4f, 0x47da2b45, 0x402cc843, 0x57ec6151, 0x501a8257, 0x5801a75d, 0x5ff7445b, 0x0f4b79ee, 0x08bd9ae8, 0x00a6bfe2, 0x07505ce4, 0x1090f5f6, 0x176616f0, 0x1f7d33fa, 0x188bd0fc, 0x30fc61de, 0x370a82d8, 0x3f11a7d2, 0x38e744d4, 0x2f27edc6, 0x28d10ec0, 0x20ca2bca, 0x273cc8cc, 0x7025498e, 0x77d3aa88, 0x7fc88f82, 0x783e6c84, 0x6ffec596, 0x68082690, 0x6013039a, 0x67e5e09c, 0x4f9251be, 0x4864b2b8, 0x407f97b2, 0x478974b4, 0x5049dda6, 0x57bf3ea0, 0x5fa41baa, 0x5852f8ac, 0xf197192e, 0xf661fa28, 0xfe7adf22, 0xf98c3c24, 0xee4c9536, 0xe9ba7630, 0xe1a1533a, 0xe657b03c, 0xce20011e, 0xc9d6e218, 0xc1cdc712, 0xc63b2414, 0xd1fb8d06, 0xd60d6e00, 0xde164b0a, 0xd9e0a80c, 0x8ef9294e, 0x890fca48, 0x8114ef42, 0x86e20c44, 0x9122a556, 0x96d44650, 0x9ecf635a, 0x9939805c, 0xb14e317e, 0xb6b8d278, 0xbea3f772, 0xb9551474, 0xae95bd66, 0xa9635e60, 0xa1787b6a, 0xa68e986c, ], [ 0x00000000, 0xe8a45605, 0xd589b1bd, 0x3d2de7b8, 0xafd27ecd, 0x477628c8, 0x7a5bcf70, 0x92ff9975, 0x5b65e02d, 0xb3c1b628, 0x8eec5190, 0x66480795, 0xf4b79ee0, 0x1c13c8e5, 0x213e2f5d, 0xc99a7958, 0xb6cbc05a, 0x5e6f965f, 0x634271e7, 0x8be627e2, 0x1919be97, 0xf1bde892, 0xcc900f2a, 0x2434592f, 0xedae2077, 0x050a7672, 0x382791ca, 0xd083c7cf, 0x427c5eba, 0xaad808bf, 0x97f5ef07, 0x7f51b902, 0x69569d03, 0x81f2cb06, 0xbcdf2cbe, 0x547b7abb, 0xc684e3ce, 0x2e20b5cb, 0x130d5273, 0xfba90476, 0x32337d2e, 0xda972b2b, 0xe7bacc93, 0x0f1e9a96, 0x9de103e3, 0x754555e6, 0x4868b25e, 0xa0cce45b, 0xdf9d5d59, 0x37390b5c, 0x0a14ece4, 0xe2b0bae1, 0x704f2394, 0x98eb7591, 0xa5c69229, 0x4d62c42c, 0x84f8bd74, 0x6c5ceb71, 0x51710cc9, 0xb9d55acc, 0x2b2ac3b9, 0xc38e95bc, 0xfea37204, 0x16072401, 0xd2ad3a06, 0x3a096c03, 0x07248bbb, 0xef80ddbe, 0x7d7f44cb, 0x95db12ce, 0xa8f6f576, 0x4052a373, 0x89c8da2b, 0x616c8c2e, 0x5c416b96, 0xb4e53d93, 0x261aa4e6, 0xcebef2e3, 0xf393155b, 0x1b37435e, 0x6466fa5c, 0x8cc2ac59, 0xb1ef4be1, 0x594b1de4, 0xcbb48491, 0x2310d294, 0x1e3d352c, 0xf6996329, 0x3f031a71, 0xd7a74c74, 0xea8aabcc, 0x022efdc9, 0x90d164bc, 0x787532b9, 0x4558d501, 0xadfc8304, 0xbbfba705, 0x535ff100, 0x6e7216b8, 0x86d640bd, 0x1429d9c8, 0xfc8d8fcd, 0xc1a06875, 0x29043e70, 0xe09e4728, 0x083a112d, 0x3517f695, 0xddb3a090, 0x4f4c39e5, 0xa7e86fe0, 0x9ac58858, 0x7261de5d, 0x0d30675f, 0xe594315a, 0xd8b9d6e2, 0x301d80e7, 0xa2e21992, 0x4a464f97, 0x776ba82f, 0x9fcffe2a, 0x56558772, 0xbef1d177, 0x83dc36cf, 0x6b7860ca, 0xf987f9bf, 0x1123afba, 0x2c0e4802, 0xc4aa1e07, 0xa19b69bb, 0x493f3fbe, 0x7412d806, 0x9cb68e03, 0x0e491776, 0xe6ed4173, 0xdbc0a6cb, 0x3364f0ce, 0xfafe8996, 0x125adf93, 0x2f77382b, 0xc7d36e2e, 0x552cf75b, 0xbd88a15e, 0x80a546e6, 0x680110e3, 0x1750a9e1, 0xfff4ffe4, 0xc2d9185c, 0x2a7d4e59, 0xb882d72c, 0x50268129, 0x6d0b6691, 0x85af3094, 0x4c3549cc, 0xa4911fc9, 0x99bcf871, 0x7118ae74, 0xe3e73701, 0x0b436104, 0x366e86bc, 0xdecad0b9, 0xc8cdf4b8, 0x2069a2bd, 0x1d444505, 0xf5e01300, 0x671f8a75, 0x8fbbdc70, 0xb2963bc8, 0x5a326dcd, 0x93a81495, 0x7b0c4290, 0x4621a528, 0xae85f32d, 0x3c7a6a58, 0xd4de3c5d, 0xe9f3dbe5, 0x01578de0, 0x7e0634e2, 0x96a262e7, 0xab8f855f, 0x432bd35a, 0xd1d44a2f, 0x39701c2a, 0x045dfb92, 0xecf9ad97, 0x2563d4cf, 0xcdc782ca, 0xf0ea6572, 0x184e3377, 0x8ab1aa02, 0x6215fc07, 0x5f381bbf, 0xb79c4dba, 0x733653bd, 0x9b9205b8, 0xa6bfe200, 0x4e1bb405, 0xdce42d70, 0x34407b75, 0x096d9ccd, 0xe1c9cac8, 0x2853b390, 0xc0f7e595, 0xfdda022d, 0x157e5428, 0x8781cd5d, 0x6f259b58, 0x52087ce0, 0xbaac2ae5, 0xc5fd93e7, 0x2d59c5e2, 0x1074225a, 0xf8d0745f, 0x6a2fed2a, 0x828bbb2f, 0xbfa65c97, 0x57020a92, 0x9e9873ca, 0x763c25cf, 0x4b11c277, 0xa3b59472, 0x314a0d07, 0xd9ee5b02, 0xe4c3bcba, 0x0c67eabf, 0x1a60cebe, 0xf2c498bb, 0xcfe97f03, 0x274d2906, 0xb5b2b073, 0x5d16e676, 0x603b01ce, 0x889f57cb, 0x41052e93, 0xa9a17896, 0x948c9f2e, 0x7c28c92b, 0xeed7505e, 0x0673065b, 0x3b5ee1e3, 0xd3fab7e6, 0xacab0ee4, 0x440f58e1, 0x7922bf59, 0x9186e95c, 0x03797029, 0xebdd262c, 0xd6f0c194, 0x3e549791, 0xf7ceeec9, 0x1f6ab8cc, 0x22475f74, 0xcae30971, 0x581c9004, 0xb0b8c601, 0x8d9521b9, 0x653177bc, ], [ 0x00000000, 0x47f7cec1, 0x8fef9d82, 0xc8185343, 0x1b1e26b3, 0x5ce9e872, 0x94f1bb31, 0xd30675f0, 0x363c4d66, 0x71cb83a7, 0xb9d3d0e4, 0xfe241e25, 0x2d226bd5, 0x6ad5a514, 0xa2cdf657, 0xe53a3896, 0x6c789acc, 0x2b8f540d, 0xe397074e, 0xa460c98f, 0x7766bc7f, 0x309172be, 0xf88921fd, 0xbf7eef3c, 0x5a44d7aa, 0x1db3196b, 0xd5ab4a28, 0x925c84e9, 0x415af119, 0x06ad3fd8, 0xceb56c9b, 0x8942a25a, 0xd8f13598, 0x9f06fb59, 0x571ea81a, 0x10e966db, 0xc3ef132b, 0x8418ddea, 0x4c008ea9, 0x0bf74068, 0xeecd78fe, 0xa93ab63f, 0x6122e57c, 0x26d52bbd, 0xf5d35e4d, 0xb224908c, 0x7a3cc3cf, 0x3dcb0d0e, 0xb489af54, 0xf37e6195, 0x3b6632d6, 0x7c91fc17, 0xaf9789e7, 0xe8604726, 0x20781465, 0x678fdaa4, 0x82b5e232, 0xc5422cf3, 0x0d5a7fb0, 0x4aadb171, 0x99abc481, 0xde5c0a40, 0x16445903, 0x51b397c2, 0xb5237687, 0xf2d4b846, 0x3acceb05, 0x7d3b25c4, 0xae3d5034, 0xe9ca9ef5, 0x21d2cdb6, 0x66250377, 0x831f3be1, 0xc4e8f520, 0x0cf0a663, 0x4b0768a2, 0x98011d52, 0xdff6d393, 0x17ee80d0, 0x50194e11, 0xd95bec4b, 0x9eac228a, 0x56b471c9, 0x1143bf08, 0xc245caf8, 0x85b20439, 0x4daa577a, 0x0a5d99bb, 0xef67a12d, 0xa8906fec, 0x60883caf, 0x277ff26e, 0xf479879e, 0xb38e495f, 0x7b961a1c, 0x3c61d4dd, 0x6dd2431f, 0x2a258dde, 0xe23dde9d, 0xa5ca105c, 0x76cc65ac, 0x313bab6d, 0xf923f82e, 0xbed436ef, 0x5bee0e79, 0x1c19c0b8, 0xd40193fb, 0x93f65d3a, 0x40f028ca, 0x0707e60b, 0xcf1fb548, 0x88e87b89, 0x01aad9d3, 0x465d1712, 0x8e454451, 0xc9b28a90, 0x1ab4ff60, 0x5d4331a1, 0x955b62e2, 0xd2acac23, 0x379694b5, 0x70615a74, 0xb8790937, 0xff8ec7f6, 0x2c88b206, 0x6b7f7cc7, 0xa3672f84, 0xe490e145, 0x6e87f0b9, 0x29703e78, 0xe1686d3b, 0xa69fa3fa, 0x7599d60a, 0x326e18cb, 0xfa764b88, 0xbd818549, 0x58bbbddf, 0x1f4c731e, 0xd754205d, 0x90a3ee9c, 0x43a59b6c, 0x045255ad, 0xcc4a06ee, 0x8bbdc82f, 0x02ff6a75, 0x4508a4b4, 0x8d10f7f7, 0xcae73936, 0x19e14cc6, 0x5e168207, 0x960ed144, 0xd1f91f85, 0x34c32713, 0x7334e9d2, 0xbb2cba91, 0xfcdb7450, 0x2fdd01a0, 0x682acf61, 0xa0329c22, 0xe7c552e3, 0xb676c521, 0xf1810be0, 0x399958a3, 0x7e6e9662, 0xad68e392, 0xea9f2d53, 0x22877e10, 0x6570b0d1, 0x804a8847, 0xc7bd4686, 0x0fa515c5, 0x4852db04, 0x9b54aef4, 0xdca36035, 0x14bb3376, 0x534cfdb7, 0xda0e5fed, 0x9df9912c, 0x55e1c26f, 0x12160cae, 0xc110795e, 0x86e7b79f, 0x4effe4dc, 0x09082a1d, 0xec32128b, 0xabc5dc4a, 0x63dd8f09, 0x242a41c8, 0xf72c3438, 0xb0dbfaf9, 0x78c3a9ba, 0x3f34677b, 0xdba4863e, 0x9c5348ff, 0x544b1bbc, 0x13bcd57d, 0xc0baa08d, 0x874d6e4c, 0x4f553d0f, 0x08a2f3ce, 0xed98cb58, 0xaa6f0599, 0x627756da, 0x2580981b, 0xf686edeb, 0xb171232a, 0x79697069, 0x3e9ebea8, 0xb7dc1cf2, 0xf02bd233, 0x38338170, 0x7fc44fb1, 0xacc23a41, 0xeb35f480, 0x232da7c3, 0x64da6902, 0x81e05194, 0xc6179f55, 0x0e0fcc16, 0x49f802d7, 0x9afe7727, 0xdd09b9e6, 0x1511eaa5, 0x52e62464, 0x0355b3a6, 0x44a27d67, 0x8cba2e24, 0xcb4de0e5, 0x184b9515, 0x5fbc5bd4, 0x97a40897, 0xd053c656, 0x3569fec0, 0x729e3001, 0xba866342, 0xfd71ad83, 0x2e77d873, 0x698016b2, 0xa19845f1, 0xe66f8b30, 0x6f2d296a, 0x28dae7ab, 0xe0c2b4e8, 0xa7357a29, 0x74330fd9, 0x33c4c118, 0xfbdc925b, 0xbc2b5c9a, 0x5911640c, 0x1ee6aacd, 0xd6fef98e, 0x9109374f, 0x420f42bf, 0x05f88c7e, 0xcde0df3d, 0x8a1711fc, ], [ 0x00000000, 0xdd0fe172, 0xbededf53, 0x63d13e21, 0x797ca311, 0xa4734263, 0xc7a27c42, 0x1aad9d30, 0xf2f94622, 0x2ff6a750, 0x4c279971, 0x91287803, 0x8b85e533, 0x568a0441, 0x355b3a60, 0xe854db12, 0xe13391f3, 0x3c3c7081, 0x5fed4ea0, 0x82e2afd2, 0x984f32e2, 0x4540d390, 0x2691edb1, 0xfb9e0cc3, 0x13cad7d1, 0xcec536a3, 0xad140882, 0x701be9f0, 0x6ab674c0, 0xb7b995b2, 0xd468ab93, 0x09674ae1, 0xc6a63e51, 0x1ba9df23, 0x7878e102, 0xa5770070, 0xbfda9d40, 0x62d57c32, 0x01044213, 0xdc0ba361, 0x345f7873, 0xe9509901, 0x8a81a720, 0x578e4652, 0x4d23db62, 0x902c3a10, 0xf3fd0431, 0x2ef2e543, 0x2795afa2, 0xfa9a4ed0, 0x994b70f1, 0x44449183, 0x5ee90cb3, 0x83e6edc1, 0xe037d3e0, 0x3d383292, 0xd56ce980, 0x086308f2, 0x6bb236d3, 0xb6bdd7a1, 0xac104a91, 0x711fabe3, 0x12ce95c2, 0xcfc174b0, 0x898d6115, 0x54828067, 0x3753be46, 0xea5c5f34, 0xf0f1c204, 0x2dfe2376, 0x4e2f1d57, 0x9320fc25, 0x7b742737, 0xa67bc645, 0xc5aaf864, 0x18a51916, 0x02088426, 0xdf076554, 0xbcd65b75, 0x61d9ba07, 0x68bef0e6, 0xb5b11194, 0xd6602fb5, 0x0b6fcec7, 0x11c253f7, 0xcccdb285, 0xaf1c8ca4, 0x72136dd6, 0x9a47b6c4, 0x474857b6, 0x24996997, 0xf99688e5, 0xe33b15d5, 0x3e34f4a7, 0x5de5ca86, 0x80ea2bf4, 0x4f2b5f44, 0x9224be36, 0xf1f58017, 0x2cfa6165, 0x3657fc55, 0xeb581d27, 0x88892306, 0x5586c274, 0xbdd21966, 0x60ddf814, 0x030cc635, 0xde032747, 0xc4aeba77, 0x19a15b05, 0x7a706524, 0xa77f8456, 0xae18ceb7, 0x73172fc5, 0x10c611e4, 0xcdc9f096, 0xd7646da6, 0x0a6b8cd4, 0x69bab2f5, 0xb4b55387, 0x5ce18895, 0x81ee69e7, 0xe23f57c6, 0x3f30b6b4, 0x259d2b84, 0xf892caf6, 0x9b43f4d7, 0x464c15a5, 0x17dbdf9d, 0xcad43eef, 0xa90500ce, 0x740ae1bc, 0x6ea77c8c, 0xb3a89dfe, 0xd079a3df, 0x0d7642ad, 0xe52299bf, 0x382d78cd, 0x5bfc46ec, 0x86f3a79e, 0x9c5e3aae, 0x4151dbdc, 0x2280e5fd, 0xff8f048f, 0xf6e84e6e, 0x2be7af1c, 0x4836913d, 0x9539704f, 0x8f94ed7f, 0x529b0c0d, 0x314a322c, 0xec45d35e, 0x0411084c, 0xd91ee93e, 0xbacfd71f, 0x67c0366d, 0x7d6dab5d, 0xa0624a2f, 0xc3b3740e, 0x1ebc957c, 0xd17de1cc, 0x0c7200be, 0x6fa33e9f, 0xb2acdfed, 0xa80142dd, 0x750ea3af, 0x16df9d8e, 0xcbd07cfc, 0x2384a7ee, 0xfe8b469c, 0x9d5a78bd, 0x405599cf, 0x5af804ff, 0x87f7e58d, 0xe426dbac, 0x39293ade, 0x304e703f, 0xed41914d, 0x8e90af6c, 0x539f4e1e, 0x4932d32e, 0x943d325c, 0xf7ec0c7d, 0x2ae3ed0f, 0xc2b7361d, 0x1fb8d76f, 0x7c69e94e, 0xa166083c, 0xbbcb950c, 0x66c4747e, 0x05154a5f, 0xd81aab2d, 0x9e56be88, 0x43595ffa, 0x208861db, 0xfd8780a9, 0xe72a1d99, 0x3a25fceb, 0x59f4c2ca, 0x84fb23b8, 0x6caff8aa, 0xb1a019d8, 0xd27127f9, 0x0f7ec68b, 0x15d35bbb, 0xc8dcbac9, 0xab0d84e8, 0x7602659a, 0x7f652f7b, 0xa26ace09, 0xc1bbf028, 0x1cb4115a, 0x06198c6a, 0xdb166d18, 0xb8c75339, 0x65c8b24b, 0x8d9c6959, 0x5093882b, 0x3342b60a, 0xee4d5778, 0xf4e0ca48, 0x29ef2b3a, 0x4a3e151b, 0x9731f469, 0x58f080d9, 0x85ff61ab, 0xe62e5f8a, 0x3b21bef8, 0x218c23c8, 0xfc83c2ba, 0x9f52fc9b, 0x425d1de9, 0xaa09c6fb, 0x77062789, 0x14d719a8, 0xc9d8f8da, 0xd37565ea, 0x0e7a8498, 0x6dabbab9, 0xb0a45bcb, 0xb9c3112a, 0x64ccf058, 0x071dce79, 0xda122f0b, 0xc0bfb23b, 0x1db05349, 0x7e616d68, 0xa36e8c1a, 0x4b3a5708, 0x9635b67a, 0xf5e4885b, 0x28eb6929, 0x3246f419, 0xef49156b, 0x8c982b4a, 0x5197ca38, ], [ 0x00000000, 0x2fb7bf3a, 0x5f6f7e74, 0x70d8c14e, 0xbedefce8, 0x916943d2, 0xe1b1829c, 0xce063da6, 0x797ce467, 0x56cb5b5d, 0x26139a13, 0x09a42529, 0xc7a2188f, 0xe815a7b5, 0x98cd66fb, 0xb77ad9c1, 0xf2f9c8ce, 0xdd4e77f4, 0xad96b6ba, 0x82210980, 0x4c273426, 0x63908b1c, 0x13484a52, 0x3cfff568, 0x8b852ca9, 0xa4329393, 0xd4ea52dd, 0xfb5dede7, 0x355bd041, 0x1aec6f7b, 0x6a34ae35, 0x4583110f, 0xe1328c2b, 0xce853311, 0xbe5df25f, 0x91ea4d65, 0x5fec70c3, 0x705bcff9, 0x00830eb7, 0x2f34b18d, 0x984e684c, 0xb7f9d776, 0xc7211638, 0xe896a902, 0x269094a4, 0x09272b9e, 0x79ffead0, 0x564855ea, 0x13cb44e5, 0x3c7cfbdf, 0x4ca43a91, 0x631385ab, 0xad15b80d, 0x82a20737, 0xf27ac679, 0xddcd7943, 0x6ab7a082, 0x45001fb8, 0x35d8def6, 0x1a6f61cc, 0xd4695c6a, 0xfbdee350, 0x8b06221e, 0xa4b19d24, 0xc6a405e1, 0xe913badb, 0x99cb7b95, 0xb67cc4af, 0x787af909, 0x57cd4633, 0x2715877d, 0x08a23847, 0xbfd8e186, 0x906f5ebc, 0xe0b79ff2, 0xcf0020c8, 0x01061d6e, 0x2eb1a254, 0x5e69631a, 0x71dedc20, 0x345dcd2f, 0x1bea7215, 0x6b32b35b, 0x44850c61, 0x8a8331c7, 0xa5348efd, 0xd5ec4fb3, 0xfa5bf089, 0x4d212948, 0x62969672, 0x124e573c, 0x3df9e806, 0xf3ffd5a0, 0xdc486a9a, 0xac90abd4, 0x832714ee, 0x279689ca, 0x082136f0, 0x78f9f7be, 0x574e4884, 0x99487522, 0xb6ffca18, 0xc6270b56, 0xe990b46c, 0x5eea6dad, 0x715dd297, 0x018513d9, 0x2e32ace3, 0xe0349145, 0xcf832e7f, 0xbf5bef31, 0x90ec500b, 0xd56f4104, 0xfad8fe3e, 0x8a003f70, 0xa5b7804a, 0x6bb1bdec, 0x440602d6, 0x34dec398, 0x1b697ca2, 0xac13a563, 0x83a41a59, 0xf37cdb17, 0xdccb642d, 0x12cd598b, 0x3d7ae6b1, 0x4da227ff, 0x621598c5, 0x89891675, 0xa63ea94f, 0xd6e66801, 0xf951d73b, 0x3757ea9d, 0x18e055a7, 0x683894e9, 0x478f2bd3, 0xf0f5f212, 0xdf424d28, 0xaf9a8c66, 0x802d335c, 0x4e2b0efa, 0x619cb1c0, 0x1144708e, 0x3ef3cfb4, 0x7b70debb, 0x54c76181, 0x241fa0cf, 0x0ba81ff5, 0xc5ae2253, 0xea199d69, 0x9ac15c27, 0xb576e31d, 0x020c3adc, 0x2dbb85e6, 0x5d6344a8, 0x72d4fb92, 0xbcd2c634, 0x9365790e, 0xe3bdb840, 0xcc0a077a, 0x68bb9a5e, 0x470c2564, 0x37d4e42a, 0x18635b10, 0xd66566b6, 0xf9d2d98c, 0x890a18c2, 0xa6bda7f8, 0x11c77e39, 0x3e70c103, 0x4ea8004d, 0x611fbf77, 0xaf1982d1, 0x80ae3deb, 0xf076fca5, 0xdfc1439f, 0x9a425290, 0xb5f5edaa, 0xc52d2ce4, 0xea9a93de, 0x249cae78, 0x0b2b1142, 0x7bf3d00c, 0x54446f36, 0xe33eb6f7, 0xcc8909cd, 0xbc51c883, 0x93e677b9, 0x5de04a1f, 0x7257f525, 0x028f346b, 0x2d388b51, 0x4f2d1394, 0x609aacae, 0x10426de0, 0x3ff5d2da, 0xf1f3ef7c, 0xde445046, 0xae9c9108, 0x812b2e32, 0x3651f7f3, 0x19e648c9, 0x693e8987, 0x468936bd, 0x888f0b1b, 0xa738b421, 0xd7e0756f, 0xf857ca55, 0xbdd4db5a, 0x92636460, 0xe2bba52e, 0xcd0c1a14, 0x030a27b2, 0x2cbd9888, 0x5c6559c6, 0x73d2e6fc, 0xc4a83f3d, 0xeb1f8007, 0x9bc74149, 0xb470fe73, 0x7a76c3d5, 0x55c17cef, 0x2519bda1, 0x0aae029b, 0xae1f9fbf, 0x81a82085, 0xf170e1cb, 0xdec75ef1, 0x10c16357, 0x3f76dc6d, 0x4fae1d23, 0x6019a219, 0xd7637bd8, 0xf8d4c4e2, 0x880c05ac, 0xa7bbba96, 0x69bd8730, 0x460a380a, 0x36d2f944, 0x1965467e, 0x5ce65771, 0x7351e84b, 0x03892905, 0x2c3e963f, 0xe238ab99, 0xcd8f14a3, 0xbd57d5ed, 0x92e06ad7, 0x259ab316, 0x0a2d0c2c, 0x7af5cd62, 0x55427258, 0x9b444ffe, 0xb4f3f0c4, 0xc42b318a, 0xeb9c8eb0, ], ]; pub static CRC32_XFER_TABLE: [[u32; 256]; 16] = [ [ 0x00000000, 0x000000af, 0x0000015e, 0x000001f1, 0x000002bc, 0x00000213, 0x000003e2, 0x0000034d, 0x00000578, 0x000005d7, 0x00000426, 0x00000489, 0x000007c4, 0x0000076b, 0x0000069a, 0x00000635, 0x00000af0, 0x00000a5f, 0x00000bae, 0x00000b01, 0x0000084c, 0x000008e3, 0x00000912, 0x000009bd, 0x00000f88, 0x00000f27, 0x00000ed6, 0x00000e79, 0x00000d34, 0x00000d9b, 0x00000c6a, 0x00000cc5, 0x000015e0, 0x0000154f, 0x000014be, 0x00001411, 0x0000175c, 0x000017f3, 0x00001602, 0x000016ad, 0x00001098, 0x00001037, 0x000011c6, 0x00001169, 0x00001224, 0x0000128b, 0x0000137a, 0x000013d5, 0x00001f10, 0x00001fbf, 0x00001e4e, 0x00001ee1, 0x00001dac, 0x00001d03, 0x00001cf2, 0x00001c5d, 0x00001a68, 0x00001ac7, 0x00001b36, 0x00001b99, 0x000018d4, 0x0000187b, 0x0000198a, 0x00001925, 0x00002bc0, 0x00002b6f, 0x00002a9e, 0x00002a31, 0x0000297c, 0x000029d3, 0x00002822, 0x0000288d, 0x00002eb8, 0x00002e17, 0x00002fe6, 0x00002f49, 0x00002c04, 0x00002cab, 0x00002d5a, 0x00002df5, 0x00002130, 0x0000219f, 0x0000206e, 0x000020c1, 0x0000238c, 0x00002323, 0x000022d2, 0x0000227d, 0x00002448, 0x000024e7, 0x00002516, 0x000025b9, 0x000026f4, 0x0000265b, 0x000027aa, 0x00002705, 0x00003e20, 0x00003e8f, 0x00003f7e, 0x00003fd1, 0x00003c9c, 0x00003c33, 0x00003dc2, 0x00003d6d, 0x00003b58, 0x00003bf7, 0x00003a06, 0x00003aa9, 0x000039e4, 0x0000394b, 0x000038ba, 0x00003815, 0x000034d0, 0x0000347f, 0x0000358e, 0x00003521, 0x0000366c, 0x000036c3, 0x00003732, 0x0000379d, 0x000031a8, 0x00003107, 0x000030f6, 0x00003059, 0x00003314, 0x000033bb, 0x0000324a, 0x000032e5, 0x00005780, 0x0000572f, 0x000056de, 0x00005671, 0x0000553c, 0x00005593, 0x00005462, 0x000054cd, 0x000052f8, 0x00005257, 0x000053a6, 0x00005309, 0x00005044, 0x000050eb, 0x0000511a, 0x000051b5, 0x00005d70, 0x00005ddf, 0x00005c2e, 0x00005c81, 0x00005fcc, 0x00005f63, 0x00005e92, 0x00005e3d, 0x00005808, 0x000058a7, 0x00005956, 0x000059f9, 0x00005ab4, 0x00005a1b, 0x00005bea, 0x00005b45, 0x00004260, 0x000042cf, 0x0000433e, 0x00004391, 0x000040dc, 0x00004073, 0x00004182, 0x0000412d, 0x00004718, 0x000047b7, 0x00004646, 0x000046e9, 0x000045a4, 0x0000450b, 0x000044fa, 0x00004455, 0x00004890, 0x0000483f, 0x000049ce, 0x00004961, 0x00004a2c, 0x00004a83, 0x00004b72, 0x00004bdd, 0x00004de8, 0x00004d47, 0x00004cb6, 0x00004c19, 0x00004f54, 0x00004ffb, 0x00004e0a, 0x00004ea5, 0x00007c40, 0x00007cef, 0x00007d1e, 0x00007db1, 0x00007efc, 0x00007e53, 0x00007fa2, 0x00007f0d, 0x00007938, 0x00007997, 0x00007866, 0x000078c9, 0x00007b84, 0x00007b2b, 0x00007ada, 0x00007a75, 0x000076b0, 0x0000761f, 0x000077ee, 0x00007741, 0x0000740c, 0x000074a3, 0x00007552, 0x000075fd, 0x000073c8, 0x00007367, 0x00007296, 0x00007239, 0x00007174, 0x000071db, 0x0000702a, 0x00007085, 0x000069a0, 0x0000690f, 0x000068fe, 0x00006851, 0x00006b1c, 0x00006bb3, 0x00006a42, 0x00006aed, 0x00006cd8, 0x00006c77, 0x00006d86, 0x00006d29, 0x00006e64, 0x00006ecb, 0x00006f3a, 0x00006f95, 0x00006350, 0x000063ff, 0x0000620e, 0x000062a1, 0x000061ec, 0x00006143, 0x000060b2, 0x0000601d, 0x00006628, 0x00006687, 0x00006776, 0x000067d9, 0x00006494, 0x0000643b, 0x000065ca, 0x00006565, ], [ 0x00000000, 0x0000af00, 0x00015e00, 0x0001f100, 0x0002bc00, 0x00021300, 0x0003e200, 0x00034d00, 0x00057800, 0x0005d700, 0x00042600, 0x00048900, 0x0007c400, 0x00076b00, 0x00069a00, 0x00063500, 0x000af000, 0x000a5f00, 0x000bae00, 0x000b0100, 0x00084c00, 0x0008e300, 0x00091200, 0x0009bd00, 0x000f8800, 0x000f2700, 0x000ed600, 0x000e7900, 0x000d3400, 0x000d9b00, 0x000c6a00, 0x000cc500, 0x0015e000, 0x00154f00, 0x0014be00, 0x00141100, 0x00175c00, 0x0017f300, 0x00160200, 0x0016ad00, 0x00109800, 0x00103700, 0x0011c600, 0x00116900, 0x00122400, 0x00128b00, 0x00137a00, 0x0013d500, 0x001f1000, 0x001fbf00, 0x001e4e00, 0x001ee100, 0x001dac00, 0x001d0300, 0x001cf200, 0x001c5d00, 0x001a6800, 0x001ac700, 0x001b3600, 0x001b9900, 0x0018d400, 0x00187b00, 0x00198a00, 0x00192500, 0x002bc000, 0x002b6f00, 0x002a9e00, 0x002a3100, 0x00297c00, 0x0029d300, 0x00282200, 0x00288d00, 0x002eb800, 0x002e1700, 0x002fe600, 0x002f4900, 0x002c0400, 0x002cab00, 0x002d5a00, 0x002df500, 0x00213000, 0x00219f00, 0x00206e00, 0x0020c100, 0x00238c00, 0x00232300, 0x0022d200, 0x00227d00, 0x00244800, 0x0024e700, 0x00251600, 0x0025b900, 0x0026f400, 0x00265b00, 0x0027aa00, 0x00270500, 0x003e2000, 0x003e8f00, 0x003f7e00, 0x003fd100, 0x003c9c00, 0x003c3300, 0x003dc200, 0x003d6d00, 0x003b5800, 0x003bf700, 0x003a0600, 0x003aa900, 0x0039e400, 0x00394b00, 0x0038ba00, 0x00381500, 0x0034d000, 0x00347f00, 0x00358e00, 0x00352100, 0x00366c00, 0x0036c300, 0x00373200, 0x00379d00, 0x0031a800, 0x00310700, 0x0030f600, 0x00305900, 0x00331400, 0x0033bb00, 0x00324a00, 0x0032e500, 0x00578000, 0x00572f00, 0x0056de00, 0x00567100, 0x00553c00, 0x00559300, 0x00546200, 0x0054cd00, 0x0052f800, 0x00525700, 0x0053a600, 0x00530900, 0x00504400, 0x0050eb00, 0x00511a00, 0x0051b500, 0x005d7000, 0x005ddf00, 0x005c2e00, 0x005c8100, 0x005fcc00, 0x005f6300, 0x005e9200, 0x005e3d00, 0x00580800, 0x0058a700, 0x00595600, 0x0059f900, 0x005ab400, 0x005a1b00, 0x005bea00, 0x005b4500, 0x00426000, 0x0042cf00, 0x00433e00, 0x00439100, 0x0040dc00, 0x00407300, 0x00418200, 0x00412d00, 0x00471800, 0x0047b700, 0x00464600, 0x0046e900, 0x0045a400, 0x00450b00, 0x0044fa00, 0x00445500, 0x00489000, 0x00483f00, 0x0049ce00, 0x00496100, 0x004a2c00, 0x004a8300, 0x004b7200, 0x004bdd00, 0x004de800, 0x004d4700, 0x004cb600, 0x004c1900, 0x004f5400, 0x004ffb00, 0x004e0a00, 0x004ea500, 0x007c4000, 0x007cef00, 0x007d1e00, 0x007db100, 0x007efc00, 0x007e5300, 0x007fa200, 0x007f0d00, 0x00793800, 0x00799700, 0x00786600, 0x0078c900, 0x007b8400, 0x007b2b00, 0x007ada00, 0x007a7500, 0x0076b000, 0x00761f00, 0x0077ee00, 0x00774100, 0x00740c00, 0x0074a300, 0x00755200, 0x0075fd00, 0x0073c800, 0x00736700, 0x00729600, 0x00723900, 0x00717400, 0x0071db00, 0x00702a00, 0x00708500, 0x0069a000, 0x00690f00, 0x0068fe00, 0x00685100, 0x006b1c00, 0x006bb300, 0x006a4200, 0x006aed00, 0x006cd800, 0x006c7700, 0x006d8600, 0x006d2900, 0x006e6400, 0x006ecb00, 0x006f3a00, 0x006f9500, 0x00635000, 0x0063ff00, 0x00620e00, 0x0062a100, 0x0061ec00, 0x00614300, 0x0060b200, 0x00601d00, 0x00662800, 0x00668700, 0x00677600, 0x0067d900, 0x00649400, 0x00643b00, 0x0065ca00, 0x00656500, ], [ 0x00000000, 0x00af0000, 0x015e0000, 0x01f10000, 0x02bc0000, 0x02130000, 0x03e20000, 0x034d0000, 0x05780000, 0x05d70000, 0x04260000, 0x04890000, 0x07c40000, 0x076b0000, 0x069a0000, 0x06350000, 0x0af00000, 0x0a5f0000, 0x0bae0000, 0x0b010000, 0x084c0000, 0x08e30000, 0x09120000, 0x09bd0000, 0x0f880000, 0x0f270000, 0x0ed60000, 0x0e790000, 0x0d340000, 0x0d9b0000, 0x0c6a0000, 0x0cc50000, 0x15e00000, 0x154f0000, 0x14be0000, 0x14110000, 0x175c0000, 0x17f30000, 0x16020000, 0x16ad0000, 0x10980000, 0x10370000, 0x11c60000, 0x11690000, 0x12240000, 0x128b0000, 0x137a0000, 0x13d50000, 0x1f100000, 0x1fbf0000, 0x1e4e0000, 0x1ee10000, 0x1dac0000, 0x1d030000, 0x1cf20000, 0x1c5d0000, 0x1a680000, 0x1ac70000, 0x1b360000, 0x1b990000, 0x18d40000, 0x187b0000, 0x198a0000, 0x19250000, 0x2bc00000, 0x2b6f0000, 0x2a9e0000, 0x2a310000, 0x297c0000, 0x29d30000, 0x28220000, 0x288d0000, 0x2eb80000, 0x2e170000, 0x2fe60000, 0x2f490000, 0x2c040000, 0x2cab0000, 0x2d5a0000, 0x2df50000, 0x21300000, 0x219f0000, 0x206e0000, 0x20c10000, 0x238c0000, 0x23230000, 0x22d20000, 0x227d0000, 0x24480000, 0x24e70000, 0x25160000, 0x25b90000, 0x26f40000, 0x265b0000, 0x27aa0000, 0x27050000, 0x3e200000, 0x3e8f0000, 0x3f7e0000, 0x3fd10000, 0x3c9c0000, 0x3c330000, 0x3dc20000, 0x3d6d0000, 0x3b580000, 0x3bf70000, 0x3a060000, 0x3aa90000, 0x39e40000, 0x394b0000, 0x38ba0000, 0x38150000, 0x34d00000, 0x347f0000, 0x358e0000, 0x35210000, 0x366c0000, 0x36c30000, 0x37320000, 0x379d0000, 0x31a80000, 0x31070000, 0x30f60000, 0x30590000, 0x33140000, 0x33bb0000, 0x324a0000, 0x32e50000, 0x57800000, 0x572f0000, 0x56de0000, 0x56710000, 0x553c0000, 0x55930000, 0x54620000, 0x54cd0000, 0x52f80000, 0x52570000, 0x53a60000, 0x53090000, 0x50440000, 0x50eb0000, 0x511a0000, 0x51b50000, 0x5d700000, 0x5ddf0000, 0x5c2e0000, 0x5c810000, 0x5fcc0000, 0x5f630000, 0x5e920000, 0x5e3d0000, 0x58080000, 0x58a70000, 0x59560000, 0x59f90000, 0x5ab40000, 0x5a1b0000, 0x5bea0000, 0x5b450000, 0x42600000, 0x42cf0000, 0x433e0000, 0x43910000, 0x40dc0000, 0x40730000, 0x41820000, 0x412d0000, 0x47180000, 0x47b70000, 0x46460000, 0x46e90000, 0x45a40000, 0x450b0000, 0x44fa0000, 0x44550000, 0x48900000, 0x483f0000, 0x49ce0000, 0x49610000, 0x4a2c0000, 0x4a830000, 0x4b720000, 0x4bdd0000, 0x4de80000, 0x4d470000, 0x4cb60000, 0x4c190000, 0x4f540000, 0x4ffb0000, 0x4e0a0000, 0x4ea50000, 0x7c400000, 0x7cef0000, 0x7d1e0000, 0x7db10000, 0x7efc0000, 0x7e530000, 0x7fa20000, 0x7f0d0000, 0x79380000, 0x79970000, 0x78660000, 0x78c90000, 0x7b840000, 0x7b2b0000, 0x7ada0000, 0x7a750000, 0x76b00000, 0x761f0000, 0x77ee0000, 0x77410000, 0x740c0000, 0x74a30000, 0x75520000, 0x75fd0000, 0x73c80000, 0x73670000, 0x72960000, 0x72390000, 0x71740000, 0x71db0000, 0x702a0000, 0x70850000, 0x69a00000, 0x690f0000, 0x68fe0000, 0x68510000, 0x6b1c0000, 0x6bb30000, 0x6a420000, 0x6aed0000, 0x6cd80000, 0x6c770000, 0x6d860000, 0x6d290000, 0x6e640000, 0x6ecb0000, 0x6f3a0000, 0x6f950000, 0x63500000, 0x63ff0000, 0x620e0000, 0x62a10000, 0x61ec0000, 0x61430000, 0x60b20000, 0x601d0000, 0x66280000, 0x66870000, 0x67760000, 0x67d90000, 0x64940000, 0x643b0000, 0x65ca0000, 0x65650000, ], [ 0x00000000, 0xaf000000, 0x5e0000af, 0xf10000af, 0xbc00015e, 0x1300015e, 0xe20001f1, 0x4d0001f1, 0x78000213, 0xd7000213, 0x260002bc, 0x890002bc, 0xc400034d, 0x6b00034d, 0x9a0003e2, 0x350003e2, 0xf0000426, 0x5f000426, 0xae000489, 0x01000489, 0x4c000578, 0xe3000578, 0x120005d7, 0xbd0005d7, 0x88000635, 0x27000635, 0xd600069a, 0x7900069a, 0x3400076b, 0x9b00076b, 0x6a0007c4, 0xc50007c4, 0xe00008e3, 0x4f0008e3, 0xbe00084c, 0x1100084c, 0x5c0009bd, 0xf30009bd, 0x02000912, 0xad000912, 0x98000af0, 0x37000af0, 0xc6000a5f, 0x69000a5f, 0x24000bae, 0x8b000bae, 0x7a000b01, 0xd5000b01, 0x10000cc5, 0xbf000cc5, 0x4e000c6a, 0xe1000c6a, 0xac000d9b, 0x03000d9b, 0xf2000d34, 0x5d000d34, 0x68000ed6, 0xc7000ed6, 0x36000e79, 0x99000e79, 0xd4000f88, 0x7b000f88, 0x8a000f27, 0x25000f27, 0xc0001169, 0x6f001169, 0x9e0011c6, 0x310011c6, 0x7c001037, 0xd3001037, 0x22001098, 0x8d001098, 0xb800137a, 0x1700137a, 0xe60013d5, 0x490013d5, 0x04001224, 0xab001224, 0x5a00128b, 0xf500128b, 0x3000154f, 0x9f00154f, 0x6e0015e0, 0xc10015e0, 0x8c001411, 0x23001411, 0xd20014be, 0x7d0014be, 0x4800175c, 0xe700175c, 0x160017f3, 0xb90017f3, 0xf4001602, 0x5b001602, 0xaa0016ad, 0x050016ad, 0x2000198a, 0x8f00198a, 0x7e001925, 0xd1001925, 0x9c0018d4, 0x330018d4, 0xc200187b, 0x6d00187b, 0x58001b99, 0xf7001b99, 0x06001b36, 0xa9001b36, 0xe4001ac7, 0x4b001ac7, 0xba001a68, 0x15001a68, 0xd0001dac, 0x7f001dac, 0x8e001d03, 0x21001d03, 0x6c001cf2, 0xc3001cf2, 0x32001c5d, 0x9d001c5d, 0xa8001fbf, 0x07001fbf, 0xf6001f10, 0x59001f10, 0x14001ee1, 0xbb001ee1, 0x4a001e4e, 0xe5001e4e, 0x8000227d, 0x2f00227d, 0xde0022d2, 0x710022d2, 0x3c002323, 0x93002323, 0x6200238c, 0xcd00238c, 0xf800206e, 0x5700206e, 0xa60020c1, 0x090020c1, 0x44002130, 0xeb002130, 0x1a00219f, 0xb500219f, 0x7000265b, 0xdf00265b, 0x2e0026f4, 0x810026f4, 0xcc002705, 0x63002705, 0x920027aa, 0x3d0027aa, 0x08002448, 0xa7002448, 0x560024e7, 0xf90024e7, 0xb4002516, 0x1b002516, 0xea0025b9, 0x450025b9, 0x60002a9e, 0xcf002a9e, 0x3e002a31, 0x91002a31, 0xdc002bc0, 0x73002bc0, 0x82002b6f, 0x2d002b6f, 0x1800288d, 0xb700288d, 0x46002822, 0xe9002822, 0xa40029d3, 0x0b0029d3, 0xfa00297c, 0x5500297c, 0x90002eb8, 0x3f002eb8, 0xce002e17, 0x61002e17, 0x2c002fe6, 0x83002fe6, 0x72002f49, 0xdd002f49, 0xe8002cab, 0x47002cab, 0xb6002c04, 0x19002c04, 0x54002df5, 0xfb002df5, 0x0a002d5a, 0xa5002d5a, 0x40003314, 0xef003314, 0x1e0033bb, 0xb10033bb, 0xfc00324a, 0x5300324a, 0xa20032e5, 0x0d0032e5, 0x38003107, 0x97003107, 0x660031a8, 0xc90031a8, 0x84003059, 0x2b003059, 0xda0030f6, 0x750030f6, 0xb0003732, 0x1f003732, 0xee00379d, 0x4100379d, 0x0c00366c, 0xa300366c, 0x520036c3, 0xfd0036c3, 0xc8003521, 0x67003521, 0x9600358e, 0x3900358e, 0x7400347f, 0xdb00347f, 0x2a0034d0, 0x850034d0, 0xa0003bf7, 0x0f003bf7, 0xfe003b58, 0x51003b58, 0x1c003aa9, 0xb3003aa9, 0x42003a06, 0xed003a06, 0xd80039e4, 0x770039e4, 0x8600394b, 0x2900394b, 0x640038ba, 0xcb0038ba, 0x3a003815, 0x95003815, 0x50003fd1, 0xff003fd1, 0x0e003f7e, 0xa1003f7e, 0xec003e8f, 0x43003e8f, 0xb2003e20, 0x1d003e20, 0x28003dc2, 0x87003dc2, 0x76003d6d, 0xd9003d6d, 0x94003c9c, 0x3b003c9c, 0xca003c33, 0x65003c33, ], [ 0x00000000, 0x00004455, 0x000088aa, 0x0000ccff, 0x00011154, 0x00015501, 0x000199fe, 0x0001ddab, 0x000222a8, 0x000266fd, 0x0002aa02, 0x0002ee57, 0x000333fc, 0x000377a9, 0x0003bb56, 0x0003ff03, 0x00044550, 0x00040105, 0x0004cdfa, 0x000489af, 0x00055404, 0x00051051, 0x0005dcae, 0x000598fb, 0x000667f8, 0x000623ad, 0x0006ef52, 0x0006ab07, 0x000776ac, 0x000732f9, 0x0007fe06, 0x0007ba53, 0x00088aa0, 0x0008cef5, 0x0008020a, 0x0008465f, 0x00099bf4, 0x0009dfa1, 0x0009135e, 0x0009570b, 0x000aa808, 0x000aec5d, 0x000a20a2, 0x000a64f7, 0x000bb95c, 0x000bfd09, 0x000b31f6, 0x000b75a3, 0x000ccff0, 0x000c8ba5, 0x000c475a, 0x000c030f, 0x000ddea4, 0x000d9af1, 0x000d560e, 0x000d125b, 0x000eed58, 0x000ea90d, 0x000e65f2, 0x000e21a7, 0x000ffc0c, 0x000fb859, 0x000f74a6, 0x000f30f3, 0x00111540, 0x00115115, 0x00119dea, 0x0011d9bf, 0x00100414, 0x00104041, 0x00108cbe, 0x0010c8eb, 0x001337e8, 0x001373bd, 0x0013bf42, 0x0013fb17, 0x001226bc, 0x001262e9, 0x0012ae16, 0x0012ea43, 0x00155010, 0x00151445, 0x0015d8ba, 0x00159cef, 0x00144144, 0x00140511, 0x0014c9ee, 0x00148dbb, 0x001772b8, 0x001736ed, 0x0017fa12, 0x0017be47, 0x001663ec, 0x001627b9, 0x0016eb46, 0x0016af13, 0x00199fe0, 0x0019dbb5, 0x0019174a, 0x0019531f, 0x00188eb4, 0x0018cae1, 0x0018061e, 0x0018424b, 0x001bbd48, 0x001bf91d, 0x001b35e2, 0x001b71b7, 0x001aac1c, 0x001ae849, 0x001a24b6, 0x001a60e3, 0x001ddab0, 0x001d9ee5, 0x001d521a, 0x001d164f, 0x001ccbe4, 0x001c8fb1, 0x001c434e, 0x001c071b, 0x001ff818, 0x001fbc4d, 0x001f70b2, 0x001f34e7, 0x001ee94c, 0x001ead19, 0x001e61e6, 0x001e25b3, 0x00222a80, 0x00226ed5, 0x0022a22a, 0x0022e67f, 0x00233bd4, 0x00237f81, 0x0023b37e, 0x0023f72b, 0x00200828, 0x00204c7d, 0x00208082, 0x0020c4d7, 0x0021197c, 0x00215d29, 0x002191d6, 0x0021d583, 0x00266fd0, 0x00262b85, 0x0026e77a, 0x0026a32f, 0x00277e84, 0x00273ad1, 0x0027f62e, 0x0027b27b, 0x00244d78, 0x0024092d, 0x0024c5d2, 0x00248187, 0x00255c2c, 0x00251879, 0x0025d486, 0x002590d3, 0x002aa020, 0x002ae475, 0x002a288a, 0x002a6cdf, 0x002bb174, 0x002bf521, 0x002b39de, 0x002b7d8b, 0x00288288, 0x0028c6dd, 0x00280a22, 0x00284e77, 0x002993dc, 0x0029d789, 0x00291b76, 0x00295f23, 0x002ee570, 0x002ea125, 0x002e6dda, 0x002e298f, 0x002ff424, 0x002fb071, 0x002f7c8e, 0x002f38db, 0x002cc7d8, 0x002c838d, 0x002c4f72, 0x002c0b27, 0x002dd68c, 0x002d92d9, 0x002d5e26, 0x002d1a73, 0x00333fc0, 0x00337b95, 0x0033b76a, 0x0033f33f, 0x00322e94, 0x00326ac1, 0x0032a63e, 0x0032e26b, 0x00311d68, 0x0031593d, 0x003195c2, 0x0031d197, 0x00300c3c, 0x00304869, 0x00308496, 0x0030c0c3, 0x00377a90, 0x00373ec5, 0x0037f23a, 0x0037b66f, 0x00366bc4, 0x00362f91, 0x0036e36e, 0x0036a73b, 0x00355838, 0x00351c6d, 0x0035d092, 0x003594c7, 0x0034496c, 0x00340d39, 0x0034c1c6, 0x00348593, 0x003bb560, 0x003bf135, 0x003b3dca, 0x003b799f, 0x003aa434, 0x003ae061, 0x003a2c9e, 0x003a68cb, 0x003997c8, 0x0039d39d, 0x00391f62, 0x00395b37, 0x0038869c, 0x0038c2c9, 0x00380e36, 0x00384a63, 0x003ff030, 0x003fb465, 0x003f789a, 0x003f3ccf, 0x003ee164, 0x003ea531, 0x003e69ce, 0x003e2d9b, 0x003dd298, 0x003d96cd, 0x003d5a32, 0x003d1e67, 0x003cc3cc, 0x003c8799, 0x003c4b66, 0x003c0f33, ], [ 0x00000000, 0x00445500, 0x0088aa00, 0x00ccff00, 0x01115400, 0x01550100, 0x0199fe00, 0x01ddab00, 0x0222a800, 0x0266fd00, 0x02aa0200, 0x02ee5700, 0x0333fc00, 0x0377a900, 0x03bb5600, 0x03ff0300, 0x04455000, 0x04010500, 0x04cdfa00, 0x0489af00, 0x05540400, 0x05105100, 0x05dcae00, 0x0598fb00, 0x0667f800, 0x0623ad00, 0x06ef5200, 0x06ab0700, 0x0776ac00, 0x0732f900, 0x07fe0600, 0x07ba5300, 0x088aa000, 0x08cef500, 0x08020a00, 0x08465f00, 0x099bf400, 0x09dfa100, 0x09135e00, 0x09570b00, 0x0aa80800, 0x0aec5d00, 0x0a20a200, 0x0a64f700, 0x0bb95c00, 0x0bfd0900, 0x0b31f600, 0x0b75a300, 0x0ccff000, 0x0c8ba500, 0x0c475a00, 0x0c030f00, 0x0ddea400, 0x0d9af100, 0x0d560e00, 0x0d125b00, 0x0eed5800, 0x0ea90d00, 0x0e65f200, 0x0e21a700, 0x0ffc0c00, 0x0fb85900, 0x0f74a600, 0x0f30f300, 0x11154000, 0x11511500, 0x119dea00, 0x11d9bf00, 0x10041400, 0x10404100, 0x108cbe00, 0x10c8eb00, 0x1337e800, 0x1373bd00, 0x13bf4200, 0x13fb1700, 0x1226bc00, 0x1262e900, 0x12ae1600, 0x12ea4300, 0x15501000, 0x15144500, 0x15d8ba00, 0x159cef00, 0x14414400, 0x14051100, 0x14c9ee00, 0x148dbb00, 0x1772b800, 0x1736ed00, 0x17fa1200, 0x17be4700, 0x1663ec00, 0x1627b900, 0x16eb4600, 0x16af1300, 0x199fe000, 0x19dbb500, 0x19174a00, 0x19531f00, 0x188eb400, 0x18cae100, 0x18061e00, 0x18424b00, 0x1bbd4800, 0x1bf91d00, 0x1b35e200, 0x1b71b700, 0x1aac1c00, 0x1ae84900, 0x1a24b600, 0x1a60e300, 0x1ddab000, 0x1d9ee500, 0x1d521a00, 0x1d164f00, 0x1ccbe400, 0x1c8fb100, 0x1c434e00, 0x1c071b00, 0x1ff81800, 0x1fbc4d00, 0x1f70b200, 0x1f34e700, 0x1ee94c00, 0x1ead1900, 0x1e61e600, 0x1e25b300, 0x222a8000, 0x226ed500, 0x22a22a00, 0x22e67f00, 0x233bd400, 0x237f8100, 0x23b37e00, 0x23f72b00, 0x20082800, 0x204c7d00, 0x20808200, 0x20c4d700, 0x21197c00, 0x215d2900, 0x2191d600, 0x21d58300, 0x266fd000, 0x262b8500, 0x26e77a00, 0x26a32f00, 0x277e8400, 0x273ad100, 0x27f62e00, 0x27b27b00, 0x244d7800, 0x24092d00, 0x24c5d200, 0x24818700, 0x255c2c00, 0x25187900, 0x25d48600, 0x2590d300, 0x2aa02000, 0x2ae47500, 0x2a288a00, 0x2a6cdf00, 0x2bb17400, 0x2bf52100, 0x2b39de00, 0x2b7d8b00, 0x28828800, 0x28c6dd00, 0x280a2200, 0x284e7700, 0x2993dc00, 0x29d78900, 0x291b7600, 0x295f2300, 0x2ee57000, 0x2ea12500, 0x2e6dda00, 0x2e298f00, 0x2ff42400, 0x2fb07100, 0x2f7c8e00, 0x2f38db00, 0x2cc7d800, 0x2c838d00, 0x2c4f7200, 0x2c0b2700, 0x2dd68c00, 0x2d92d900, 0x2d5e2600, 0x2d1a7300, 0x333fc000, 0x337b9500, 0x33b76a00, 0x33f33f00, 0x322e9400, 0x326ac100, 0x32a63e00, 0x32e26b00, 0x311d6800, 0x31593d00, 0x3195c200, 0x31d19700, 0x300c3c00, 0x30486900, 0x30849600, 0x30c0c300, 0x377a9000, 0x373ec500, 0x37f23a00, 0x37b66f00, 0x366bc400, 0x362f9100, 0x36e36e00, 0x36a73b00, 0x35583800, 0x351c6d00, 0x35d09200, 0x3594c700, 0x34496c00, 0x340d3900, 0x34c1c600, 0x34859300, 0x3bb56000, 0x3bf13500, 0x3b3dca00, 0x3b799f00, 0x3aa43400, 0x3ae06100, 0x3a2c9e00, 0x3a68cb00, 0x3997c800, 0x39d39d00, 0x391f6200, 0x395b3700, 0x38869c00, 0x38c2c900, 0x380e3600, 0x384a6300, 0x3ff03000, 0x3fb46500, 0x3f789a00, 0x3f3ccf00, 0x3ee16400, 0x3ea53100, 0x3e69ce00, 0x3e2d9b00, 0x3dd29800, 0x3d96cd00, 0x3d5a3200, 0x3d1e6700, 0x3cc3cc00, 0x3c879900, 0x3c4b6600, 0x3c0f3300, ], [ 0x00000000, 0x44550000, 0x88aa0000, 0xccff0000, 0x115400af, 0x550100af, 0x99fe00af, 0xddab00af, 0x22a8015e, 0x66fd015e, 0xaa02015e, 0xee57015e, 0x33fc01f1, 0x77a901f1, 0xbb5601f1, 0xff0301f1, 0x455002bc, 0x010502bc, 0xcdfa02bc, 0x89af02bc, 0x54040213, 0x10510213, 0xdcae0213, 0x98fb0213, 0x67f803e2, 0x23ad03e2, 0xef5203e2, 0xab0703e2, 0x76ac034d, 0x32f9034d, 0xfe06034d, 0xba53034d, 0x8aa00578, 0xcef50578, 0x020a0578, 0x465f0578, 0x9bf405d7, 0xdfa105d7, 0x135e05d7, 0x570b05d7, 0xa8080426, 0xec5d0426, 0x20a20426, 0x64f70426, 0xb95c0489, 0xfd090489, 0x31f60489, 0x75a30489, 0xcff007c4, 0x8ba507c4, 0x475a07c4, 0x030f07c4, 0xdea4076b, 0x9af1076b, 0x560e076b, 0x125b076b, 0xed58069a, 0xa90d069a, 0x65f2069a, 0x21a7069a, 0xfc0c0635, 0xb8590635, 0x74a60635, 0x30f30635, 0x15400a5f, 0x51150a5f, 0x9dea0a5f, 0xd9bf0a5f, 0x04140af0, 0x40410af0, 0x8cbe0af0, 0xc8eb0af0, 0x37e80b01, 0x73bd0b01, 0xbf420b01, 0xfb170b01, 0x26bc0bae, 0x62e90bae, 0xae160bae, 0xea430bae, 0x501008e3, 0x144508e3, 0xd8ba08e3, 0x9cef08e3, 0x4144084c, 0x0511084c, 0xc9ee084c, 0x8dbb084c, 0x72b809bd, 0x36ed09bd, 0xfa1209bd, 0xbe4709bd, 0x63ec0912, 0x27b90912, 0xeb460912, 0xaf130912, 0x9fe00f27, 0xdbb50f27, 0x174a0f27, 0x531f0f27, 0x8eb40f88, 0xcae10f88, 0x061e0f88, 0x424b0f88, 0xbd480e79, 0xf91d0e79, 0x35e20e79, 0x71b70e79, 0xac1c0ed6, 0xe8490ed6, 0x24b60ed6, 0x60e30ed6, 0xdab00d9b, 0x9ee50d9b, 0x521a0d9b, 0x164f0d9b, 0xcbe40d34, 0x8fb10d34, 0x434e0d34, 0x071b0d34, 0xf8180cc5, 0xbc4d0cc5, 0x70b20cc5, 0x34e70cc5, 0xe94c0c6a, 0xad190c6a, 0x61e60c6a, 0x25b30c6a, 0x2a8014be, 0x6ed514be, 0xa22a14be, 0xe67f14be, 0x3bd41411, 0x7f811411, 0xb37e1411, 0xf72b1411, 0x082815e0, 0x4c7d15e0, 0x808215e0, 0xc4d715e0, 0x197c154f, 0x5d29154f, 0x91d6154f, 0xd583154f, 0x6fd01602, 0x2b851602, 0xe77a1602, 0xa32f1602, 0x7e8416ad, 0x3ad116ad, 0xf62e16ad, 0xb27b16ad, 0x4d78175c, 0x092d175c, 0xc5d2175c, 0x8187175c, 0x5c2c17f3, 0x187917f3, 0xd48617f3, 0x90d317f3, 0xa02011c6, 0xe47511c6, 0x288a11c6, 0x6cdf11c6, 0xb1741169, 0xf5211169, 0x39de1169, 0x7d8b1169, 0x82881098, 0xc6dd1098, 0x0a221098, 0x4e771098, 0x93dc1037, 0xd7891037, 0x1b761037, 0x5f231037, 0xe570137a, 0xa125137a, 0x6dda137a, 0x298f137a, 0xf42413d5, 0xb07113d5, 0x7c8e13d5, 0x38db13d5, 0xc7d81224, 0x838d1224, 0x4f721224, 0x0b271224, 0xd68c128b, 0x92d9128b, 0x5e26128b, 0x1a73128b, 0x3fc01ee1, 0x7b951ee1, 0xb76a1ee1, 0xf33f1ee1, 0x2e941e4e, 0x6ac11e4e, 0xa63e1e4e, 0xe26b1e4e, 0x1d681fbf, 0x593d1fbf, 0x95c21fbf, 0xd1971fbf, 0x0c3c1f10, 0x48691f10, 0x84961f10, 0xc0c31f10, 0x7a901c5d, 0x3ec51c5d, 0xf23a1c5d, 0xb66f1c5d, 0x6bc41cf2, 0x2f911cf2, 0xe36e1cf2, 0xa73b1cf2, 0x58381d03, 0x1c6d1d03, 0xd0921d03, 0x94c71d03, 0x496c1dac, 0x0d391dac, 0xc1c61dac, 0x85931dac, 0xb5601b99, 0xf1351b99, 0x3dca1b99, 0x799f1b99, 0xa4341b36, 0xe0611b36, 0x2c9e1b36, 0x68cb1b36, 0x97c81ac7, 0xd39d1ac7, 0x1f621ac7, 0x5b371ac7, 0x869c1a68, 0xc2c91a68, 0x0e361a68, 0x4a631a68, 0xf0301925, 0xb4651925, 0x789a1925, 0x3ccf1925, 0xe164198a, 0xa531198a, 0x69ce198a, 0x2d9b198a, 0xd298187b, 0x96cd187b, 0x5a32187b, 0x1e67187b, 0xc3cc18d4, 0x879918d4, 0x4b6618d4, 0x0f3318d4, ], [ 0x00000000, 0x5500297c, 0xaa0052f8, 0xff007b84, 0x5400a55f, 0x01008c23, 0xfe00f7a7, 0xab00dedb, 0xa8014abe, 0xfd0163c2, 0x02011846, 0x5701313a, 0xfc01efe1, 0xa901c69d, 0x5601bd19, 0x03019465, 0x500295d3, 0x0502bcaf, 0xfa02c72b, 0xaf02ee57, 0x0402308c, 0x510219f0, 0xae026274, 0xfb024b08, 0xf803df6d, 0xad03f611, 0x52038d95, 0x0703a4e9, 0xac037a32, 0xf903534e, 0x060328ca, 0x530301b6, 0xa0052ba6, 0xf50502da, 0x0a05795e, 0x5f055022, 0xf4058ef9, 0xa105a785, 0x5e05dc01, 0x0b05f57d, 0x08046118, 0x5d044864, 0xa20433e0, 0xf7041a9c, 0x5c04c447, 0x0904ed3b, 0xf60496bf, 0xa304bfc3, 0xf007be75, 0xa5079709, 0x5a07ec8d, 0x0f07c5f1, 0xa4071b2a, 0xf1073256, 0x0e0749d2, 0x5b0760ae, 0x5806f4cb, 0x0d06ddb7, 0xf206a633, 0xa7068f4f, 0x0c065194, 0x590678e8, 0xa606036c, 0xf3062a10, 0x400a57e3, 0x150a7e9f, 0xea0a051b, 0xbf0a2c67, 0x140af2bc, 0x410adbc0, 0xbe0aa044, 0xeb0a8938, 0xe80b1d5d, 0xbd0b3421, 0x420b4fa5, 0x170b66d9, 0xbc0bb802, 0xe90b917e, 0x160beafa, 0x430bc386, 0x1008c230, 0x4508eb4c, 0xba0890c8, 0xef08b9b4, 0x4408676f, 0x11084e13, 0xee083597, 0xbb081ceb, 0xb809888e, 0xed09a1f2, 0x1209da76, 0x4709f30a, 0xec092dd1, 0xb90904ad, 0x46097f29, 0x13095655, 0xe00f7c45, 0xb50f5539, 0x4a0f2ebd, 0x1f0f07c1, 0xb40fd91a, 0xe10ff066, 0x1e0f8be2, 0x4b0fa29e, 0x480e36fb, 0x1d0e1f87, 0xe20e6403, 0xb70e4d7f, 0x1c0e93a4, 0x490ebad8, 0xb60ec15c, 0xe30ee820, 0xb00de996, 0xe50dc0ea, 0x1a0dbb6e, 0x4f0d9212, 0xe40d4cc9, 0xb10d65b5, 0x4e0d1e31, 0x1b0d374d, 0x180ca328, 0x4d0c8a54, 0xb20cf1d0, 0xe70cd8ac, 0x4c0c0677, 0x190c2f0b, 0xe60c548f, 0xb30c7df3, 0x8014afc6, 0xd51486ba, 0x2a14fd3e, 0x7f14d442, 0xd4140a99, 0x811423e5, 0x7e145861, 0x2b14711d, 0x2815e578, 0x7d15cc04, 0x8215b780, 0xd7159efc, 0x7c154027, 0x2915695b, 0xd61512df, 0x83153ba3, 0xd0163a15, 0x85161369, 0x7a1668ed, 0x2f164191, 0x84169f4a, 0xd116b636, 0x2e16cdb2, 0x7b16e4ce, 0x781770ab, 0x2d1759d7, 0xd2172253, 0x87170b2f, 0x2c17d5f4, 0x7917fc88, 0x8617870c, 0xd317ae70, 0x20118460, 0x7511ad1c, 0x8a11d698, 0xdf11ffe4, 0x7411213f, 0x21110843, 0xde1173c7, 0x8b115abb, 0x8810cede, 0xdd10e7a2, 0x22109c26, 0x7710b55a, 0xdc106b81, 0x891042fd, 0x76103979, 0x23101005, 0x701311b3, 0x251338cf, 0xda13434b, 0x8f136a37, 0x2413b4ec, 0x71139d90, 0x8e13e614, 0xdb13cf68, 0xd8125b0d, 0x8d127271, 0x721209f5, 0x27122089, 0x8c12fe52, 0xd912d72e, 0x2612acaa, 0x731285d6, 0xc01ef825, 0x951ed159, 0x6a1eaadd, 0x3f1e83a1, 0x941e5d7a, 0xc11e7406, 0x3e1e0f82, 0x6b1e26fe, 0x681fb29b, 0x3d1f9be7, 0xc21fe063, 0x971fc91f, 0x3c1f17c4, 0x691f3eb8, 0x961f453c, 0xc31f6c40, 0x901c6df6, 0xc51c448a, 0x3a1c3f0e, 0x6f1c1672, 0xc41cc8a9, 0x911ce1d5, 0x6e1c9a51, 0x3b1cb32d, 0x381d2748, 0x6d1d0e34, 0x921d75b0, 0xc71d5ccc, 0x6c1d8217, 0x391dab6b, 0xc61dd0ef, 0x931df993, 0x601bd383, 0x351bfaff, 0xca1b817b, 0x9f1ba807, 0x341b76dc, 0x611b5fa0, 0x9e1b2424, 0xcb1b0d58, 0xc81a993d, 0x9d1ab041, 0x621acbc5, 0x371ae2b9, 0x9c1a3c62, 0xc91a151e, 0x361a6e9a, 0x631a47e6, 0x30194650, 0x65196f2c, 0x9a1914a8, 0xcf193dd4, 0x6419e30f, 0x3119ca73, 0xce19b1f7, 0x9b19988b, 0x98180cee, 0xcd182592, 0x32185e16, 0x6718776a, 0xcc18a9b1, 0x991880cd, 0x6618fb49, 0x3318d235, ], [ 0x00000000, 0x00295f23, 0x0052be46, 0x007be165, 0x00a57c8c, 0x008c23af, 0x00f7c2ca, 0x00de9de9, 0x014af918, 0x0163a63b, 0x0118475e, 0x0131187d, 0x01ef8594, 0x01c6dab7, 0x01bd3bd2, 0x019464f1, 0x0295f230, 0x02bcad13, 0x02c74c76, 0x02ee1355, 0x02308ebc, 0x0219d19f, 0x026230fa, 0x024b6fd9, 0x03df0b28, 0x03f6540b, 0x038db56e, 0x03a4ea4d, 0x037a77a4, 0x03532887, 0x0328c9e2, 0x030196c1, 0x052be460, 0x0502bb43, 0x05795a26, 0x05500505, 0x058e98ec, 0x05a7c7cf, 0x05dc26aa, 0x05f57989, 0x04611d78, 0x0448425b, 0x0433a33e, 0x041afc1d, 0x04c461f4, 0x04ed3ed7, 0x0496dfb2, 0x04bf8091, 0x07be1650, 0x07974973, 0x07eca816, 0x07c5f735, 0x071b6adc, 0x073235ff, 0x0749d49a, 0x07608bb9, 0x06f4ef48, 0x06ddb06b, 0x06a6510e, 0x068f0e2d, 0x065193c4, 0x0678cce7, 0x06032d82, 0x062a72a1, 0x0a57c8c0, 0x0a7e97e3, 0x0a057686, 0x0a2c29a5, 0x0af2b44c, 0x0adbeb6f, 0x0aa00a0a, 0x0a895529, 0x0b1d31d8, 0x0b346efb, 0x0b4f8f9e, 0x0b66d0bd, 0x0bb84d54, 0x0b911277, 0x0beaf312, 0x0bc3ac31, 0x08c23af0, 0x08eb65d3, 0x089084b6, 0x08b9db95, 0x0867467c, 0x084e195f, 0x0835f83a, 0x081ca719, 0x0988c3e8, 0x09a19ccb, 0x09da7dae, 0x09f3228d, 0x092dbf64, 0x0904e047, 0x097f0122, 0x09565e01, 0x0f7c2ca0, 0x0f557383, 0x0f2e92e6, 0x0f07cdc5, 0x0fd9502c, 0x0ff00f0f, 0x0f8bee6a, 0x0fa2b149, 0x0e36d5b8, 0x0e1f8a9b, 0x0e646bfe, 0x0e4d34dd, 0x0e93a934, 0x0ebaf617, 0x0ec11772, 0x0ee84851, 0x0de9de90, 0x0dc081b3, 0x0dbb60d6, 0x0d923ff5, 0x0d4ca21c, 0x0d65fd3f, 0x0d1e1c5a, 0x0d374379, 0x0ca32788, 0x0c8a78ab, 0x0cf199ce, 0x0cd8c6ed, 0x0c065b04, 0x0c2f0427, 0x0c54e542, 0x0c7dba61, 0x14af9180, 0x1486cea3, 0x14fd2fc6, 0x14d470e5, 0x140aed0c, 0x1423b22f, 0x1458534a, 0x14710c69, 0x15e56898, 0x15cc37bb, 0x15b7d6de, 0x159e89fd, 0x15401414, 0x15694b37, 0x1512aa52, 0x153bf571, 0x163a63b0, 0x16133c93, 0x1668ddf6, 0x164182d5, 0x169f1f3c, 0x16b6401f, 0x16cda17a, 0x16e4fe59, 0x17709aa8, 0x1759c58b, 0x172224ee, 0x170b7bcd, 0x17d5e624, 0x17fcb907, 0x17875862, 0x17ae0741, 0x118475e0, 0x11ad2ac3, 0x11d6cba6, 0x11ff9485, 0x1121096c, 0x1108564f, 0x1173b72a, 0x115ae809, 0x10ce8cf8, 0x10e7d3db, 0x109c32be, 0x10b56d9d, 0x106bf074, 0x1042af57, 0x10394e32, 0x10101111, 0x131187d0, 0x1338d8f3, 0x13433996, 0x136a66b5, 0x13b4fb5c, 0x139da47f, 0x13e6451a, 0x13cf1a39, 0x125b7ec8, 0x127221eb, 0x1209c08e, 0x12209fad, 0x12fe0244, 0x12d75d67, 0x12acbc02, 0x1285e321, 0x1ef85940, 0x1ed10663, 0x1eaae706, 0x1e83b825, 0x1e5d25cc, 0x1e747aef, 0x1e0f9b8a, 0x1e26c4a9, 0x1fb2a058, 0x1f9bff7b, 0x1fe01e1e, 0x1fc9413d, 0x1f17dcd4, 0x1f3e83f7, 0x1f456292, 0x1f6c3db1, 0x1c6dab70, 0x1c44f453, 0x1c3f1536, 0x1c164a15, 0x1cc8d7fc, 0x1ce188df, 0x1c9a69ba, 0x1cb33699, 0x1d275268, 0x1d0e0d4b, 0x1d75ec2e, 0x1d5cb30d, 0x1d822ee4, 0x1dab71c7, 0x1dd090a2, 0x1df9cf81, 0x1bd3bd20, 0x1bfae203, 0x1b810366, 0x1ba85c45, 0x1b76c1ac, 0x1b5f9e8f, 0x1b247fea, 0x1b0d20c9, 0x1a994438, 0x1ab01b1b, 0x1acbfa7e, 0x1ae2a55d, 0x1a3c38b4, 0x1a156797, 0x1a6e86f2, 0x1a47d9d1, 0x19464f10, 0x196f1033, 0x1914f156, 0x193dae75, 0x19e3339c, 0x19ca6cbf, 0x19b18dda, 0x1998d2f9, 0x180cb608, 0x1825e92b, 0x185e084e, 0x1877576d, 0x18a9ca84, 0x188095a7, 0x18fb74c2, 0x18d22be1, ], [ 0x00000000, 0x295f2300, 0x52be4600, 0x7be16500, 0xa57c8c00, 0x8c23af00, 0xf7c2ca00, 0xde9de900, 0x4af918af, 0x63a63baf, 0x18475eaf, 0x31187daf, 0xef8594af, 0xc6dab7af, 0xbd3bd2af, 0x9464f1af, 0x95f2315e, 0xbcad125e, 0xc74c775e, 0xee13545e, 0x308ebd5e, 0x19d19e5e, 0x6230fb5e, 0x4b6fd85e, 0xdf0b29f1, 0xf6540af1, 0x8db56ff1, 0xa4ea4cf1, 0x7a77a5f1, 0x532886f1, 0x28c9e3f1, 0x0196c0f1, 0x2be46213, 0x02bb4113, 0x795a2413, 0x50050713, 0x8e98ee13, 0xa7c7cd13, 0xdc26a813, 0xf5798b13, 0x611d7abc, 0x484259bc, 0x33a33cbc, 0x1afc1fbc, 0xc461f6bc, 0xed3ed5bc, 0x96dfb0bc, 0xbf8093bc, 0xbe16534d, 0x9749704d, 0xeca8154d, 0xc5f7364d, 0x1b6adf4d, 0x3235fc4d, 0x49d4994d, 0x608bba4d, 0xf4ef4be2, 0xddb068e2, 0xa6510de2, 0x8f0e2ee2, 0x5193c7e2, 0x78cce4e2, 0x032d81e2, 0x2a72a2e2, 0x57c8c426, 0x7e97e726, 0x05768226, 0x2c29a126, 0xf2b44826, 0xdbeb6b26, 0xa00a0e26, 0x89552d26, 0x1d31dc89, 0x346eff89, 0x4f8f9a89, 0x66d0b989, 0xb84d5089, 0x91127389, 0xeaf31689, 0xc3ac3589, 0xc23af578, 0xeb65d678, 0x9084b378, 0xb9db9078, 0x67467978, 0x4e195a78, 0x35f83f78, 0x1ca71c78, 0x88c3edd7, 0xa19cced7, 0xda7dabd7, 0xf32288d7, 0x2dbf61d7, 0x04e042d7, 0x7f0127d7, 0x565e04d7, 0x7c2ca635, 0x55738535, 0x2e92e035, 0x07cdc335, 0xd9502a35, 0xf00f0935, 0x8bee6c35, 0xa2b14f35, 0x36d5be9a, 0x1f8a9d9a, 0x646bf89a, 0x4d34db9a, 0x93a9329a, 0xbaf6119a, 0xc117749a, 0xe848579a, 0xe9de976b, 0xc081b46b, 0xbb60d16b, 0x923ff26b, 0x4ca21b6b, 0x65fd386b, 0x1e1c5d6b, 0x37437e6b, 0xa3278fc4, 0x8a78acc4, 0xf199c9c4, 0xd8c6eac4, 0x065b03c4, 0x2f0420c4, 0x54e545c4, 0x7dba66c4, 0xaf91884c, 0x86ceab4c, 0xfd2fce4c, 0xd470ed4c, 0x0aed044c, 0x23b2274c, 0x5853424c, 0x710c614c, 0xe56890e3, 0xcc37b3e3, 0xb7d6d6e3, 0x9e89f5e3, 0x40141ce3, 0x694b3fe3, 0x12aa5ae3, 0x3bf579e3, 0x3a63b912, 0x133c9a12, 0x68ddff12, 0x4182dc12, 0x9f1f3512, 0xb6401612, 0xcda17312, 0xe4fe5012, 0x709aa1bd, 0x59c582bd, 0x2224e7bd, 0x0b7bc4bd, 0xd5e62dbd, 0xfcb90ebd, 0x87586bbd, 0xae0748bd, 0x8475ea5f, 0xad2ac95f, 0xd6cbac5f, 0xff948f5f, 0x2109665f, 0x0856455f, 0x73b7205f, 0x5ae8035f, 0xce8cf2f0, 0xe7d3d1f0, 0x9c32b4f0, 0xb56d97f0, 0x6bf07ef0, 0x42af5df0, 0x394e38f0, 0x10111bf0, 0x1187db01, 0x38d8f801, 0x43399d01, 0x6a66be01, 0xb4fb5701, 0x9da47401, 0xe6451101, 0xcf1a3201, 0x5b7ec3ae, 0x7221e0ae, 0x09c085ae, 0x209fa6ae, 0xfe024fae, 0xd75d6cae, 0xacbc09ae, 0x85e32aae, 0xf8594c6a, 0xd1066f6a, 0xaae70a6a, 0x83b8296a, 0x5d25c06a, 0x747ae36a, 0x0f9b866a, 0x26c4a56a, 0xb2a054c5, 0x9bff77c5, 0xe01e12c5, 0xc94131c5, 0x17dcd8c5, 0x3e83fbc5, 0x45629ec5, 0x6c3dbdc5, 0x6dab7d34, 0x44f45e34, 0x3f153b34, 0x164a1834, 0xc8d7f134, 0xe188d234, 0x9a69b734, 0xb3369434, 0x2752659b, 0x0e0d469b, 0x75ec239b, 0x5cb3009b, 0x822ee99b, 0xab71ca9b, 0xd090af9b, 0xf9cf8c9b, 0xd3bd2e79, 0xfae20d79, 0x81036879, 0xa85c4b79, 0x76c1a279, 0x5f9e8179, 0x247fe479, 0x0d20c779, 0x994436d6, 0xb01b15d6, 0xcbfa70d6, 0xe2a553d6, 0x3c38bad6, 0x156799d6, 0x6e86fcd6, 0x47d9dfd6, 0x464f1f27, 0x6f103c27, 0x14f15927, 0x3dae7a27, 0xe3339327, 0xca6cb027, 0xb18dd527, 0x98d2f627, 0x0cb60788, 0x25e92488, 0x5e084188, 0x77576288, 0xa9ca8b88, 0x8095a888, 0xfb74cd88, 0xd22bee88, ], [ 0x00000000, 0x5f231037, 0xbe46206e, 0xe1653059, 0x7c8c4073, 0x23af5044, 0xc2ca601d, 0x9de9702a, 0xf91880e6, 0xa63b90d1, 0x475ea088, 0x187db0bf, 0x8594c095, 0xdab7d0a2, 0x3bd2e0fb, 0x64f1f0cc, 0xf2310163, 0xad121154, 0x4c77210d, 0x1354313a, 0x8ebd4110, 0xd19e5127, 0x30fb617e, 0x6fd87149, 0x0b298185, 0x540a91b2, 0xb56fa1eb, 0xea4cb1dc, 0x77a5c1f6, 0x2886d1c1, 0xc9e3e198, 0x96c0f1af, 0xe4620269, 0xbb41125e, 0x5a242207, 0x05073230, 0x98ee421a, 0xc7cd522d, 0x26a86274, 0x798b7243, 0x1d7a828f, 0x425992b8, 0xa33ca2e1, 0xfc1fb2d6, 0x61f6c2fc, 0x3ed5d2cb, 0xdfb0e292, 0x8093f2a5, 0x1653030a, 0x4970133d, 0xa8152364, 0xf7363353, 0x6adf4379, 0x35fc534e, 0xd4996317, 0x8bba7320, 0xef4b83ec, 0xb06893db, 0x510da382, 0x0e2eb3b5, 0x93c7c39f, 0xcce4d3a8, 0x2d81e3f1, 0x72a2f3c6, 0xc8c4047d, 0x97e7144a, 0x76822413, 0x29a13424, 0xb448440e, 0xeb6b5439, 0x0a0e6460, 0x552d7457, 0x31dc849b, 0x6eff94ac, 0x8f9aa4f5, 0xd0b9b4c2, 0x4d50c4e8, 0x1273d4df, 0xf316e486, 0xac35f4b1, 0x3af5051e, 0x65d61529, 0x84b32570, 0xdb903547, 0x4679456d, 0x195a555a, 0xf83f6503, 0xa71c7534, 0xc3ed85f8, 0x9cce95cf, 0x7daba596, 0x2288b5a1, 0xbf61c58b, 0xe042d5bc, 0x0127e5e5, 0x5e04f5d2, 0x2ca60614, 0x73851623, 0x92e0267a, 0xcdc3364d, 0x502a4667, 0x0f095650, 0xee6c6609, 0xb14f763e, 0xd5be86f2, 0x8a9d96c5, 0x6bf8a69c, 0x34dbb6ab, 0xa932c681, 0xf611d6b6, 0x1774e6ef, 0x4857f6d8, 0xde970777, 0x81b41740, 0x60d12719, 0x3ff2372e, 0xa21b4704, 0xfd385733, 0x1c5d676a, 0x437e775d, 0x278f8791, 0x78ac97a6, 0x99c9a7ff, 0xc6eab7c8, 0x5b03c7e2, 0x0420d7d5, 0xe545e78c, 0xba66f7bb, 0x91880855, 0xceab1862, 0x2fce283b, 0x70ed380c, 0xed044826, 0xb2275811, 0x53426848, 0x0c61787f, 0x689088b3, 0x37b39884, 0xd6d6a8dd, 0x89f5b8ea, 0x141cc8c0, 0x4b3fd8f7, 0xaa5ae8ae, 0xf579f899, 0x63b90936, 0x3c9a1901, 0xddff2958, 0x82dc396f, 0x1f354945, 0x40165972, 0xa173692b, 0xfe50791c, 0x9aa189d0, 0xc58299e7, 0x24e7a9be, 0x7bc4b989, 0xe62dc9a3, 0xb90ed994, 0x586be9cd, 0x0748f9fa, 0x75ea0a3c, 0x2ac91a0b, 0xcbac2a52, 0x948f3a65, 0x09664a4f, 0x56455a78, 0xb7206a21, 0xe8037a16, 0x8cf28ada, 0xd3d19aed, 0x32b4aab4, 0x6d97ba83, 0xf07ecaa9, 0xaf5dda9e, 0x4e38eac7, 0x111bfaf0, 0x87db0b5f, 0xd8f81b68, 0x399d2b31, 0x66be3b06, 0xfb574b2c, 0xa4745b1b, 0x45116b42, 0x1a327b75, 0x7ec38bb9, 0x21e09b8e, 0xc085abd7, 0x9fa6bbe0, 0x024fcbca, 0x5d6cdbfd, 0xbc09eba4, 0xe32afb93, 0x594c0c28, 0x066f1c1f, 0xe70a2c46, 0xb8293c71, 0x25c04c5b, 0x7ae35c6c, 0x9b866c35, 0xc4a57c02, 0xa0548cce, 0xff779cf9, 0x1e12aca0, 0x4131bc97, 0xdcd8ccbd, 0x83fbdc8a, 0x629eecd3, 0x3dbdfce4, 0xab7d0d4b, 0xf45e1d7c, 0x153b2d25, 0x4a183d12, 0xd7f14d38, 0x88d25d0f, 0x69b76d56, 0x36947d61, 0x52658dad, 0x0d469d9a, 0xec23adc3, 0xb300bdf4, 0x2ee9cdde, 0x71cadde9, 0x90afedb0, 0xcf8cfd87, 0xbd2e0e41, 0xe20d1e76, 0x03682e2f, 0x5c4b3e18, 0xc1a24e32, 0x9e815e05, 0x7fe46e5c, 0x20c77e6b, 0x44368ea7, 0x1b159e90, 0xfa70aec9, 0xa553befe, 0x38baced4, 0x6799dee3, 0x86fceeba, 0xd9dffe8d, 0x4f1f0f22, 0x103c1f15, 0xf1592f4c, 0xae7a3f7b, 0x33934f51, 0x6cb05f66, 0x8dd56f3f, 0xd2f67f08, 0xb6078fc4, 0xe9249ff3, 0x0841afaa, 0x5762bf9d, 0xca8bcfb7, 0x95a8df80, 0x74cdefd9, 0x2beeffee, ], [ 0x00000000, 0x23101005, 0x4620200a, 0x6530300f, 0x8c404014, 0xaf505011, 0xca60601e, 0xe970701b, 0x18808087, 0x3b909082, 0x5ea0a08d, 0x7db0b088, 0x94c0c093, 0xb7d0d096, 0xd2e0e099, 0xf1f0f09c, 0x3101010e, 0x1211110b, 0x77212104, 0x54313101, 0xbd41411a, 0x9e51511f, 0xfb616110, 0xd8717115, 0x29818189, 0x0a91918c, 0x6fa1a183, 0x4cb1b186, 0xa5c1c19d, 0x86d1d198, 0xe3e1e197, 0xc0f1f192, 0x6202021c, 0x41121219, 0x24222216, 0x07323213, 0xee424208, 0xcd52520d, 0xa8626202, 0x8b727207, 0x7a82829b, 0x5992929e, 0x3ca2a291, 0x1fb2b294, 0xf6c2c28f, 0xd5d2d28a, 0xb0e2e285, 0x93f2f280, 0x53030312, 0x70131317, 0x15232318, 0x3633331d, 0xdf434306, 0xfc535303, 0x9963630c, 0xba737309, 0x4b838395, 0x68939390, 0x0da3a39f, 0x2eb3b39a, 0xc7c3c381, 0xe4d3d384, 0x81e3e38b, 0xa2f3f38e, 0xc4040438, 0xe714143d, 0x82242432, 0xa1343437, 0x4844442c, 0x6b545429, 0x0e646426, 0x2d747423, 0xdc8484bf, 0xff9494ba, 0x9aa4a4b5, 0xb9b4b4b0, 0x50c4c4ab, 0x73d4d4ae, 0x16e4e4a1, 0x35f4f4a4, 0xf5050536, 0xd6151533, 0xb325253c, 0x90353539, 0x79454522, 0x5a555527, 0x3f656528, 0x1c75752d, 0xed8585b1, 0xce9595b4, 0xaba5a5bb, 0x88b5b5be, 0x61c5c5a5, 0x42d5d5a0, 0x27e5e5af, 0x04f5f5aa, 0xa6060624, 0x85161621, 0xe026262e, 0xc336362b, 0x2a464630, 0x09565635, 0x6c66663a, 0x4f76763f, 0xbe8686a3, 0x9d9696a6, 0xf8a6a6a9, 0xdbb6b6ac, 0x32c6c6b7, 0x11d6d6b2, 0x74e6e6bd, 0x57f6f6b8, 0x9707072a, 0xb417172f, 0xd1272720, 0xf2373725, 0x1b47473e, 0x3857573b, 0x5d676734, 0x7e777731, 0x8f8787ad, 0xac9797a8, 0xc9a7a7a7, 0xeab7b7a2, 0x03c7c7b9, 0x20d7d7bc, 0x45e7e7b3, 0x66f7f7b6, 0x880808df, 0xab1818da, 0xce2828d5, 0xed3838d0, 0x044848cb, 0x275858ce, 0x426868c1, 0x617878c4, 0x90888858, 0xb398985d, 0xd6a8a852, 0xf5b8b857, 0x1cc8c84c, 0x3fd8d849, 0x5ae8e846, 0x79f8f843, 0xb90909d1, 0x9a1919d4, 0xff2929db, 0xdc3939de, 0x354949c5, 0x165959c0, 0x736969cf, 0x507979ca, 0xa1898956, 0x82999953, 0xe7a9a95c, 0xc4b9b959, 0x2dc9c942, 0x0ed9d947, 0x6be9e948, 0x48f9f94d, 0xea0a0ac3, 0xc91a1ac6, 0xac2a2ac9, 0x8f3a3acc, 0x664a4ad7, 0x455a5ad2, 0x206a6add, 0x037a7ad8, 0xf28a8a44, 0xd19a9a41, 0xb4aaaa4e, 0x97baba4b, 0x7ecaca50, 0x5ddada55, 0x38eaea5a, 0x1bfafa5f, 0xdb0b0bcd, 0xf81b1bc8, 0x9d2b2bc7, 0xbe3b3bc2, 0x574b4bd9, 0x745b5bdc, 0x116b6bd3, 0x327b7bd6, 0xc38b8b4a, 0xe09b9b4f, 0x85abab40, 0xa6bbbb45, 0x4fcbcb5e, 0x6cdbdb5b, 0x09ebeb54, 0x2afbfb51, 0x4c0c0ce7, 0x6f1c1ce2, 0x0a2c2ced, 0x293c3ce8, 0xc04c4cf3, 0xe35c5cf6, 0x866c6cf9, 0xa57c7cfc, 0x548c8c60, 0x779c9c65, 0x12acac6a, 0x31bcbc6f, 0xd8cccc74, 0xfbdcdc71, 0x9eecec7e, 0xbdfcfc7b, 0x7d0d0de9, 0x5e1d1dec, 0x3b2d2de3, 0x183d3de6, 0xf14d4dfd, 0xd25d5df8, 0xb76d6df7, 0x947d7df2, 0x658d8d6e, 0x469d9d6b, 0x23adad64, 0x00bdbd61, 0xe9cdcd7a, 0xcadddd7f, 0xafeded70, 0x8cfdfd75, 0x2e0e0efb, 0x0d1e1efe, 0x682e2ef1, 0x4b3e3ef4, 0xa24e4eef, 0x815e5eea, 0xe46e6ee5, 0xc77e7ee0, 0x368e8e7c, 0x159e9e79, 0x70aeae76, 0x53bebe73, 0xbacece68, 0x99dede6d, 0xfceeee62, 0xdffefe67, 0x1f0f0ff5, 0x3c1f1ff0, 0x592f2fff, 0x7a3f3ffa, 0x934f4fe1, 0xb05f5fe4, 0xd56f6feb, 0xf67f7fee, 0x078f8f72, 0x249f9f77, 0x41afaf78, 0x62bfbf7d, 0x8bcfcf66, 0xa8dfdf63, 0xcdefef6c, 0xeeffff69, ], [ 0x00000000, 0x10101111, 0x20202222, 0x30303333, 0x40404444, 0x50505555, 0x60606666, 0x70707777, 0x80808888, 0x90909999, 0xa0a0aaaa, 0xb0b0bbbb, 0xc0c0cccc, 0xd0d0dddd, 0xe0e0eeee, 0xf0f0ffff, 0x010111bf, 0x111100ae, 0x2121339d, 0x3131228c, 0x414155fb, 0x515144ea, 0x616177d9, 0x717166c8, 0x81819937, 0x91918826, 0xa1a1bb15, 0xb1b1aa04, 0xc1c1dd73, 0xd1d1cc62, 0xe1e1ff51, 0xf1f1ee40, 0x0202237e, 0x1212326f, 0x2222015c, 0x3232104d, 0x4242673a, 0x5252762b, 0x62624518, 0x72725409, 0x8282abf6, 0x9292bae7, 0xa2a289d4, 0xb2b298c5, 0xc2c2efb2, 0xd2d2fea3, 0xe2e2cd90, 0xf2f2dc81, 0x030332c1, 0x131323d0, 0x232310e3, 0x333301f2, 0x43437685, 0x53536794, 0x636354a7, 0x737345b6, 0x8383ba49, 0x9393ab58, 0xa3a3986b, 0xb3b3897a, 0xc3c3fe0d, 0xd3d3ef1c, 0xe3e3dc2f, 0xf3f3cd3e, 0x040446fc, 0x141457ed, 0x242464de, 0x343475cf, 0x444402b8, 0x545413a9, 0x6464209a, 0x7474318b, 0x8484ce74, 0x9494df65, 0xa4a4ec56, 0xb4b4fd47, 0xc4c48a30, 0xd4d49b21, 0xe4e4a812, 0xf4f4b903, 0x05055743, 0x15154652, 0x25257561, 0x35356470, 0x45451307, 0x55550216, 0x65653125, 0x75752034, 0x8585dfcb, 0x9595ceda, 0xa5a5fde9, 0xb5b5ecf8, 0xc5c59b8f, 0xd5d58a9e, 0xe5e5b9ad, 0xf5f5a8bc, 0x06066582, 0x16167493, 0x262647a0, 0x363656b1, 0x464621c6, 0x565630d7, 0x666603e4, 0x767612f5, 0x8686ed0a, 0x9696fc1b, 0xa6a6cf28, 0xb6b6de39, 0xc6c6a94e, 0xd6d6b85f, 0xe6e68b6c, 0xf6f69a7d, 0x0707743d, 0x1717652c, 0x2727561f, 0x3737470e, 0x47473079, 0x57572168, 0x6767125b, 0x7777034a, 0x8787fcb5, 0x9797eda4, 0xa7a7de97, 0xb7b7cf86, 0xc7c7b8f1, 0xd7d7a9e0, 0xe7e79ad3, 0xf7f78bc2, 0x08088df8, 0x18189ce9, 0x2828afda, 0x3838becb, 0x4848c9bc, 0x5858d8ad, 0x6868eb9e, 0x7878fa8f, 0x88880570, 0x98981461, 0xa8a82752, 0xb8b83643, 0xc8c84134, 0xd8d85025, 0xe8e86316, 0xf8f87207, 0x09099c47, 0x19198d56, 0x2929be65, 0x3939af74, 0x4949d803, 0x5959c912, 0x6969fa21, 0x7979eb30, 0x898914cf, 0x999905de, 0xa9a936ed, 0xb9b927fc, 0xc9c9508b, 0xd9d9419a, 0xe9e972a9, 0xf9f963b8, 0x0a0aae86, 0x1a1abf97, 0x2a2a8ca4, 0x3a3a9db5, 0x4a4aeac2, 0x5a5afbd3, 0x6a6ac8e0, 0x7a7ad9f1, 0x8a8a260e, 0x9a9a371f, 0xaaaa042c, 0xbaba153d, 0xcaca624a, 0xdada735b, 0xeaea4068, 0xfafa5179, 0x0b0bbf39, 0x1b1bae28, 0x2b2b9d1b, 0x3b3b8c0a, 0x4b4bfb7d, 0x5b5bea6c, 0x6b6bd95f, 0x7b7bc84e, 0x8b8b37b1, 0x9b9b26a0, 0xabab1593, 0xbbbb0482, 0xcbcb73f5, 0xdbdb62e4, 0xebeb51d7, 0xfbfb40c6, 0x0c0ccb04, 0x1c1cda15, 0x2c2ce926, 0x3c3cf837, 0x4c4c8f40, 0x5c5c9e51, 0x6c6cad62, 0x7c7cbc73, 0x8c8c438c, 0x9c9c529d, 0xacac61ae, 0xbcbc70bf, 0xcccc07c8, 0xdcdc16d9, 0xecec25ea, 0xfcfc34fb, 0x0d0ddabb, 0x1d1dcbaa, 0x2d2df899, 0x3d3de988, 0x4d4d9eff, 0x5d5d8fee, 0x6d6dbcdd, 0x7d7dadcc, 0x8d8d5233, 0x9d9d4322, 0xadad7011, 0xbdbd6100, 0xcdcd1677, 0xdddd0766, 0xeded3455, 0xfdfd2544, 0x0e0ee87a, 0x1e1ef96b, 0x2e2eca58, 0x3e3edb49, 0x4e4eac3e, 0x5e5ebd2f, 0x6e6e8e1c, 0x7e7e9f0d, 0x8e8e60f2, 0x9e9e71e3, 0xaeae42d0, 0xbebe53c1, 0xcece24b6, 0xdede35a7, 0xeeee0694, 0xfefe1785, 0x0f0ff9c5, 0x1f1fe8d4, 0x2f2fdbe7, 0x3f3fcaf6, 0x4f4fbd81, 0x5f5fac90, 0x6f6f9fa3, 0x7f7f8eb2, 0x8f8f714d, 0x9f9f605c, 0xafaf536f, 0xbfbf427e, 0xcfcf3509, 0xdfdf2418, 0xefef172b, 0xffff063a, ], [ 0x00000000, 0x10111bf0, 0x202237e0, 0x30332c10, 0x40446fc0, 0x50557430, 0x60665820, 0x707743d0, 0x8088df80, 0x9099c470, 0xa0aae860, 0xb0bbf390, 0xc0ccb040, 0xd0ddabb0, 0xe0ee87a0, 0xf0ff9c50, 0x0111bfaf, 0x1100a45f, 0x2133884f, 0x312293bf, 0x4155d06f, 0x5144cb9f, 0x6177e78f, 0x7166fc7f, 0x8199602f, 0x91887bdf, 0xa1bb57cf, 0xb1aa4c3f, 0xc1dd0fef, 0xd1cc141f, 0xe1ff380f, 0xf1ee23ff, 0x02237f5e, 0x123264ae, 0x220148be, 0x3210534e, 0x4267109e, 0x52760b6e, 0x6245277e, 0x72543c8e, 0x82aba0de, 0x92babb2e, 0xa289973e, 0xb2988cce, 0xc2efcf1e, 0xd2fed4ee, 0xe2cdf8fe, 0xf2dce30e, 0x0332c0f1, 0x1323db01, 0x2310f711, 0x3301ece1, 0x4376af31, 0x5367b4c1, 0x635498d1, 0x73458321, 0x83ba1f71, 0x93ab0481, 0xa3982891, 0xb3893361, 0xc3fe70b1, 0xd3ef6b41, 0xe3dc4751, 0xf3cd5ca1, 0x0446febc, 0x1457e54c, 0x2464c95c, 0x3475d2ac, 0x4402917c, 0x54138a8c, 0x6420a69c, 0x7431bd6c, 0x84ce213c, 0x94df3acc, 0xa4ec16dc, 0xb4fd0d2c, 0xc48a4efc, 0xd49b550c, 0xe4a8791c, 0xf4b962ec, 0x05574113, 0x15465ae3, 0x257576f3, 0x35646d03, 0x45132ed3, 0x55023523, 0x65311933, 0x752002c3, 0x85df9e93, 0x95ce8563, 0xa5fda973, 0xb5ecb283, 0xc59bf153, 0xd58aeaa3, 0xe5b9c6b3, 0xf5a8dd43, 0x066581e2, 0x16749a12, 0x2647b602, 0x3656adf2, 0x4621ee22, 0x5630f5d2, 0x6603d9c2, 0x7612c232, 0x86ed5e62, 0x96fc4592, 0xa6cf6982, 0xb6de7272, 0xc6a931a2, 0xd6b82a52, 0xe68b0642, 0xf69a1db2, 0x07743e4d, 0x176525bd, 0x275609ad, 0x3747125d, 0x4730518d, 0x57214a7d, 0x6712666d, 0x77037d9d, 0x87fce1cd, 0x97edfa3d, 0xa7ded62d, 0xb7cfcddd, 0xc7b88e0d, 0xd7a995fd, 0xe79ab9ed, 0xf78ba21d, 0x088dfd78, 0x189ce688, 0x28afca98, 0x38bed168, 0x48c992b8, 0x58d88948, 0x68eba558, 0x78fabea8, 0x880522f8, 0x98143908, 0xa8271518, 0xb8360ee8, 0xc8414d38, 0xd85056c8, 0xe8637ad8, 0xf8726128, 0x099c42d7, 0x198d5927, 0x29be7537, 0x39af6ec7, 0x49d82d17, 0x59c936e7, 0x69fa1af7, 0x79eb0107, 0x89149d57, 0x990586a7, 0xa936aab7, 0xb927b147, 0xc950f297, 0xd941e967, 0xe972c577, 0xf963de87, 0x0aae8226, 0x1abf99d6, 0x2a8cb5c6, 0x3a9dae36, 0x4aeaede6, 0x5afbf616, 0x6ac8da06, 0x7ad9c1f6, 0x8a265da6, 0x9a374656, 0xaa046a46, 0xba1571b6, 0xca623266, 0xda732996, 0xea400586, 0xfa511e76, 0x0bbf3d89, 0x1bae2679, 0x2b9d0a69, 0x3b8c1199, 0x4bfb5249, 0x5bea49b9, 0x6bd965a9, 0x7bc87e59, 0x8b37e209, 0x9b26f9f9, 0xab15d5e9, 0xbb04ce19, 0xcb738dc9, 0xdb629639, 0xeb51ba29, 0xfb40a1d9, 0x0ccb03c4, 0x1cda1834, 0x2ce93424, 0x3cf82fd4, 0x4c8f6c04, 0x5c9e77f4, 0x6cad5be4, 0x7cbc4014, 0x8c43dc44, 0x9c52c7b4, 0xac61eba4, 0xbc70f054, 0xcc07b384, 0xdc16a874, 0xec258464, 0xfc349f94, 0x0ddabc6b, 0x1dcba79b, 0x2df88b8b, 0x3de9907b, 0x4d9ed3ab, 0x5d8fc85b, 0x6dbce44b, 0x7dadffbb, 0x8d5263eb, 0x9d43781b, 0xad70540b, 0xbd614ffb, 0xcd160c2b, 0xdd0717db, 0xed343bcb, 0xfd25203b, 0x0ee87c9a, 0x1ef9676a, 0x2eca4b7a, 0x3edb508a, 0x4eac135a, 0x5ebd08aa, 0x6e8e24ba, 0x7e9f3f4a, 0x8e60a31a, 0x9e71b8ea, 0xae4294fa, 0xbe538f0a, 0xce24ccda, 0xde35d72a, 0xee06fb3a, 0xfe17e0ca, 0x0ff9c335, 0x1fe8d8c5, 0x2fdbf4d5, 0x3fcaef25, 0x4fbdacf5, 0x5facb705, 0x6f9f9b15, 0x7f8e80e5, 0x8f711cb5, 0x9f600745, 0xaf532b55, 0xbf4230a5, 0xcf357375, 0xdf246885, 0xef174495, 0xff065f65, ], [ 0x00000000, 0x111bfaf0, 0x2237f5e0, 0x332c0f10, 0x446febc0, 0x55741130, 0x66581e20, 0x7743e4d0, 0x88dfd780, 0x99c42d70, 0xaae82260, 0xbbf3d890, 0xccb03c40, 0xddabc6b0, 0xee87c9a0, 0xff9c3350, 0x11bfafaf, 0x00a4555f, 0x33885a4f, 0x2293a0bf, 0x55d0446f, 0x44cbbe9f, 0x77e7b18f, 0x66fc4b7f, 0x9960782f, 0x887b82df, 0xbb578dcf, 0xaa4c773f, 0xdd0f93ef, 0xcc14691f, 0xff38660f, 0xee239cff, 0x237f5f5e, 0x3264a5ae, 0x0148aabe, 0x1053504e, 0x6710b49e, 0x760b4e6e, 0x4527417e, 0x543cbb8e, 0xaba088de, 0xbabb722e, 0x89977d3e, 0x988c87ce, 0xefcf631e, 0xfed499ee, 0xcdf896fe, 0xdce36c0e, 0x32c0f0f1, 0x23db0a01, 0x10f70511, 0x01ecffe1, 0x76af1b31, 0x67b4e1c1, 0x5498eed1, 0x45831421, 0xba1f2771, 0xab04dd81, 0x9828d291, 0x89332861, 0xfe70ccb1, 0xef6b3641, 0xdc473951, 0xcd5cc3a1, 0x46febebc, 0x57e5444c, 0x64c94b5c, 0x75d2b1ac, 0x0291557c, 0x138aaf8c, 0x20a6a09c, 0x31bd5a6c, 0xce21693c, 0xdf3a93cc, 0xec169cdc, 0xfd0d662c, 0x8a4e82fc, 0x9b55780c, 0xa879771c, 0xb9628dec, 0x57411113, 0x465aebe3, 0x7576e4f3, 0x646d1e03, 0x132efad3, 0x02350023, 0x31190f33, 0x2002f5c3, 0xdf9ec693, 0xce853c63, 0xfda93373, 0xecb2c983, 0x9bf12d53, 0x8aead7a3, 0xb9c6d8b3, 0xa8dd2243, 0x6581e1e2, 0x749a1b12, 0x47b61402, 0x56adeef2, 0x21ee0a22, 0x30f5f0d2, 0x03d9ffc2, 0x12c20532, 0xed5e3662, 0xfc45cc92, 0xcf69c382, 0xde723972, 0xa931dda2, 0xb82a2752, 0x8b062842, 0x9a1dd2b2, 0x743e4e4d, 0x6525b4bd, 0x5609bbad, 0x4712415d, 0x3051a58d, 0x214a5f7d, 0x1266506d, 0x037daa9d, 0xfce199cd, 0xedfa633d, 0xded66c2d, 0xcfcd96dd, 0xb88e720d, 0xa99588fd, 0x9ab987ed, 0x8ba27d1d, 0x8dfd7d78, 0x9ce68788, 0xafca8898, 0xbed17268, 0xc99296b8, 0xd8896c48, 0xeba56358, 0xfabe99a8, 0x0522aaf8, 0x14395008, 0x27155f18, 0x360ea5e8, 0x414d4138, 0x5056bbc8, 0x637ab4d8, 0x72614e28, 0x9c42d2d7, 0x8d592827, 0xbe752737, 0xaf6eddc7, 0xd82d3917, 0xc936c3e7, 0xfa1accf7, 0xeb013607, 0x149d0557, 0x0586ffa7, 0x36aaf0b7, 0x27b10a47, 0x50f2ee97, 0x41e91467, 0x72c51b77, 0x63dee187, 0xae822226, 0xbf99d8d6, 0x8cb5d7c6, 0x9dae2d36, 0xeaedc9e6, 0xfbf63316, 0xc8da3c06, 0xd9c1c6f6, 0x265df5a6, 0x37460f56, 0x046a0046, 0x1571fab6, 0x62321e66, 0x7329e496, 0x4005eb86, 0x511e1176, 0xbf3d8d89, 0xae267779, 0x9d0a7869, 0x8c118299, 0xfb526649, 0xea499cb9, 0xd96593a9, 0xc87e6959, 0x37e25a09, 0x26f9a0f9, 0x15d5afe9, 0x04ce5519, 0x738db1c9, 0x62964b39, 0x51ba4429, 0x40a1bed9, 0xcb03c3c4, 0xda183934, 0xe9343624, 0xf82fccd4, 0x8f6c2804, 0x9e77d2f4, 0xad5bdde4, 0xbc402714, 0x43dc1444, 0x52c7eeb4, 0x61ebe1a4, 0x70f01b54, 0x07b3ff84, 0x16a80574, 0x25840a64, 0x349ff094, 0xdabc6c6b, 0xcba7969b, 0xf88b998b, 0xe990637b, 0x9ed387ab, 0x8fc87d5b, 0xbce4724b, 0xadff88bb, 0x5263bbeb, 0x4378411b, 0x70544e0b, 0x614fb4fb, 0x160c502b, 0x0717aadb, 0x343ba5cb, 0x25205f3b, 0xe87c9c9a, 0xf967666a, 0xca4b697a, 0xdb50938a, 0xac13775a, 0xbd088daa, 0x8e2482ba, 0x9f3f784a, 0x60a34b1a, 0x71b8b1ea, 0x4294befa, 0x538f440a, 0x24cca0da, 0x35d75a2a, 0x06fb553a, 0x17e0afca, 0xf9c33335, 0xe8d8c9c5, 0xdbf4c6d5, 0xcaef3c25, 0xbdacd8f5, 0xacb72205, 0x9f9b2d15, 0x8e80d7e5, 0x711ce4b5, 0x60071e45, 0x532b1155, 0x4230eba5, 0x35730f75, 0x2468f585, 0x1744fa95, 0x065f0065, ], [ 0x00000000, 0x1bfafa5f, 0x37f5f4be, 0x2c0f0ee1, 0x6febe97c, 0x74111323, 0x581e1dc2, 0x43e4e79d, 0xdfd7d2f8, 0xc42d28a7, 0xe8222646, 0xf3d8dc19, 0xb03c3b84, 0xabc6c1db, 0x87c9cf3a, 0x9c333565, 0xbfafa55f, 0xa4555f00, 0x885a51e1, 0x93a0abbe, 0xd0444c23, 0xcbbeb67c, 0xe7b1b89d, 0xfc4b42c2, 0x607877a7, 0x7b828df8, 0x578d8319, 0x4c777946, 0x0f939edb, 0x14696484, 0x38666a65, 0x239c903a, 0x7f5f4a11, 0x64a5b04e, 0x48aabeaf, 0x535044f0, 0x10b4a36d, 0x0b4e5932, 0x274157d3, 0x3cbbad8c, 0xa08898e9, 0xbb7262b6, 0x977d6c57, 0x8c879608, 0xcf637195, 0xd4998bca, 0xf896852b, 0xe36c7f74, 0xc0f0ef4e, 0xdb0a1511, 0xf7051bf0, 0xecffe1af, 0xaf1b0632, 0xb4e1fc6d, 0x98eef28c, 0x831408d3, 0x1f273db6, 0x04ddc7e9, 0x28d2c908, 0x33283357, 0x70ccd4ca, 0x6b362e95, 0x47392074, 0x5cc3da2b, 0xfebe9422, 0xe5446e7d, 0xc94b609c, 0xd2b19ac3, 0x91557d5e, 0x8aaf8701, 0xa6a089e0, 0xbd5a73bf, 0x216946da, 0x3a93bc85, 0x169cb264, 0x0d66483b, 0x4e82afa6, 0x557855f9, 0x79775b18, 0x628da147, 0x4111317d, 0x5aebcb22, 0x76e4c5c3, 0x6d1e3f9c, 0x2efad801, 0x3500225e, 0x190f2cbf, 0x02f5d6e0, 0x9ec6e385, 0x853c19da, 0xa933173b, 0xb2c9ed64, 0xf12d0af9, 0xead7f0a6, 0xc6d8fe47, 0xdd220418, 0x81e1de33, 0x9a1b246c, 0xb6142a8d, 0xadeed0d2, 0xee0a374f, 0xf5f0cd10, 0xd9ffc3f1, 0xc20539ae, 0x5e360ccb, 0x45ccf694, 0x69c3f875, 0x7239022a, 0x31dde5b7, 0x2a271fe8, 0x06281109, 0x1dd2eb56, 0x3e4e7b6c, 0x25b48133, 0x09bb8fd2, 0x1241758d, 0x51a59210, 0x4a5f684f, 0x665066ae, 0x7daa9cf1, 0xe199a994, 0xfa6353cb, 0xd66c5d2a, 0xcd96a775, 0x8e7240e8, 0x9588bab7, 0xb987b456, 0xa27d4e09, 0xfd7d28eb, 0xe687d2b4, 0xca88dc55, 0xd172260a, 0x9296c197, 0x896c3bc8, 0xa5633529, 0xbe99cf76, 0x22aafa13, 0x3950004c, 0x155f0ead, 0x0ea5f4f2, 0x4d41136f, 0x56bbe930, 0x7ab4e7d1, 0x614e1d8e, 0x42d28db4, 0x592877eb, 0x7527790a, 0x6edd8355, 0x2d3964c8, 0x36c39e97, 0x1acc9076, 0x01366a29, 0x9d055f4c, 0x86ffa513, 0xaaf0abf2, 0xb10a51ad, 0xf2eeb630, 0xe9144c6f, 0xc51b428e, 0xdee1b8d1, 0x822262fa, 0x99d898a5, 0xb5d79644, 0xae2d6c1b, 0xedc98b86, 0xf63371d9, 0xda3c7f38, 0xc1c68567, 0x5df5b002, 0x460f4a5d, 0x6a0044bc, 0x71fabee3, 0x321e597e, 0x29e4a321, 0x05ebadc0, 0x1e11579f, 0x3d8dc7a5, 0x26773dfa, 0x0a78331b, 0x1182c944, 0x52662ed9, 0x499cd486, 0x6593da67, 0x7e692038, 0xe25a155d, 0xf9a0ef02, 0xd5afe1e3, 0xce551bbc, 0x8db1fc21, 0x964b067e, 0xba44089f, 0xa1bef2c0, 0x03c3bcc9, 0x18394696, 0x34364877, 0x2fccb228, 0x6c2855b5, 0x77d2afea, 0x5bdda10b, 0x40275b54, 0xdc146e31, 0xc7ee946e, 0xebe19a8f, 0xf01b60d0, 0xb3ff874d, 0xa8057d12, 0x840a73f3, 0x9ff089ac, 0xbc6c1996, 0xa796e3c9, 0x8b99ed28, 0x90631777, 0xd387f0ea, 0xc87d0ab5, 0xe4720454, 0xff88fe0b, 0x63bbcb6e, 0x78413131, 0x544e3fd0, 0x4fb4c58f, 0x0c502212, 0x17aad84d, 0x3ba5d6ac, 0x205f2cf3, 0x7c9cf6d8, 0x67660c87, 0x4b690266, 0x5093f839, 0x13771fa4, 0x088de5fb, 0x2482eb1a, 0x3f781145, 0xa34b2420, 0xb8b1de7f, 0x94bed09e, 0x8f442ac1, 0xcca0cd5c, 0xd75a3703, 0xfb5539e2, 0xe0afc3bd, 0xc3335387, 0xd8c9a9d8, 0xf4c6a739, 0xef3c5d66, 0xacd8bafb, 0xb72240a4, 0x9b2d4e45, 0x80d7b41a, 0x1ce4817f, 0x071e7b20, 0x2b1175c1, 0x30eb8f9e, 0x730f6803, 0x68f5925c, 0x44fa9cbd, 0x5f0066e2, ], ]; } pub mod crc64 { //! CRC-64 lookup tables pub static CRC64_ECMA_182_TABLE: [[u64; 256]; 16] = [ [ 0x0000000000000000, 0x42f0e1eba9ea3693, 0x85e1c3d753d46d26, 0xc711223cfa3e5bb5, 0x493366450e42ecdf, 0x0bc387aea7a8da4c, 0xccd2a5925d9681f9, 0x8e224479f47cb76a, 0x9266cc8a1c85d9be, 0xd0962d61b56fef2d, 0x17870f5d4f51b498, 0x5577eeb6e6bb820b, 0xdb55aacf12c73561, 0x99a54b24bb2d03f2, 0x5eb4691841135847, 0x1c4488f3e8f96ed4, 0x663d78ff90e185ef, 0x24cd9914390bb37c, 0xe3dcbb28c335e8c9, 0xa12c5ac36adfde5a, 0x2f0e1eba9ea36930, 0x6dfeff5137495fa3, 0xaaefdd6dcd770416, 0xe81f3c86649d3285, 0xf45bb4758c645c51, 0xb6ab559e258e6ac2, 0x71ba77a2dfb03177, 0x334a9649765a07e4, 0xbd68d2308226b08e, 0xff9833db2bcc861d, 0x388911e7d1f2dda8, 0x7a79f00c7818eb3b, 0xcc7af1ff21c30bde, 0x8e8a101488293d4d, 0x499b3228721766f8, 0x0b6bd3c3dbfd506b, 0x854997ba2f81e701, 0xc7b97651866bd192, 0x00a8546d7c558a27, 0x4258b586d5bfbcb4, 0x5e1c3d753d46d260, 0x1cecdc9e94ace4f3, 0xdbfdfea26e92bf46, 0x990d1f49c77889d5, 0x172f5b3033043ebf, 0x55dfbadb9aee082c, 0x92ce98e760d05399, 0xd03e790cc93a650a, 0xaa478900b1228e31, 0xe8b768eb18c8b8a2, 0x2fa64ad7e2f6e317, 0x6d56ab3c4b1cd584, 0xe374ef45bf6062ee, 0xa1840eae168a547d, 0x66952c92ecb40fc8, 0x2465cd79455e395b, 0x3821458aada7578f, 0x7ad1a461044d611c, 0xbdc0865dfe733aa9, 0xff3067b657990c3a, 0x711223cfa3e5bb50, 0x33e2c2240a0f8dc3, 0xf4f3e018f031d676, 0xb60301f359dbe0e5, 0xda050215ea6c212f, 0x98f5e3fe438617bc, 0x5fe4c1c2b9b84c09, 0x1d14202910527a9a, 0x93366450e42ecdf0, 0xd1c685bb4dc4fb63, 0x16d7a787b7faa0d6, 0x5427466c1e109645, 0x4863ce9ff6e9f891, 0x0a932f745f03ce02, 0xcd820d48a53d95b7, 0x8f72eca30cd7a324, 0x0150a8daf8ab144e, 0x43a04931514122dd, 0x84b16b0dab7f7968, 0xc6418ae602954ffb, 0xbc387aea7a8da4c0, 0xfec89b01d3679253, 0x39d9b93d2959c9e6, 0x7b2958d680b3ff75, 0xf50b1caf74cf481f, 0xb7fbfd44dd257e8c, 0x70eadf78271b2539, 0x321a3e938ef113aa, 0x2e5eb66066087d7e, 0x6cae578bcfe24bed, 0xabbf75b735dc1058, 0xe94f945c9c3626cb, 0x676dd025684a91a1, 0x259d31cec1a0a732, 0xe28c13f23b9efc87, 0xa07cf2199274ca14, 0x167ff3eacbaf2af1, 0x548f120162451c62, 0x939e303d987b47d7, 0xd16ed1d631917144, 0x5f4c95afc5edc62e, 0x1dbc74446c07f0bd, 0xdaad56789639ab08, 0x985db7933fd39d9b, 0x84193f60d72af34f, 0xc6e9de8b7ec0c5dc, 0x01f8fcb784fe9e69, 0x43081d5c2d14a8fa, 0xcd2a5925d9681f90, 0x8fdab8ce70822903, 0x48cb9af28abc72b6, 0x0a3b7b1923564425, 0x70428b155b4eaf1e, 0x32b26afef2a4998d, 0xf5a348c2089ac238, 0xb753a929a170f4ab, 0x3971ed50550c43c1, 0x7b810cbbfce67552, 0xbc902e8706d82ee7, 0xfe60cf6caf321874, 0xe224479f47cb76a0, 0xa0d4a674ee214033, 0x67c58448141f1b86, 0x253565a3bdf52d15, 0xab1721da49899a7f, 0xe9e7c031e063acec, 0x2ef6e20d1a5df759, 0x6c0603e6b3b7c1ca, 0xf6fae5c07d3274cd, 0xb40a042bd4d8425e, 0x731b26172ee619eb, 0x31ebc7fc870c2f78, 0xbfc9838573709812, 0xfd39626eda9aae81, 0x3a28405220a4f534, 0x78d8a1b9894ec3a7, 0x649c294a61b7ad73, 0x266cc8a1c85d9be0, 0xe17dea9d3263c055, 0xa38d0b769b89f6c6, 0x2daf4f0f6ff541ac, 0x6f5faee4c61f773f, 0xa84e8cd83c212c8a, 0xeabe6d3395cb1a19, 0x90c79d3fedd3f122, 0xd2377cd44439c7b1, 0x15265ee8be079c04, 0x57d6bf0317edaa97, 0xd9f4fb7ae3911dfd, 0x9b041a914a7b2b6e, 0x5c1538adb04570db, 0x1ee5d94619af4648, 0x02a151b5f156289c, 0x4051b05e58bc1e0f, 0x87409262a28245ba, 0xc5b073890b687329, 0x4b9237f0ff14c443, 0x0962d61b56fef2d0, 0xce73f427acc0a965, 0x8c8315cc052a9ff6, 0x3a80143f5cf17f13, 0x7870f5d4f51b4980, 0xbf61d7e80f251235, 0xfd913603a6cf24a6, 0x73b3727a52b393cc, 0x31439391fb59a55f, 0xf652b1ad0167feea, 0xb4a25046a88dc879, 0xa8e6d8b54074a6ad, 0xea16395ee99e903e, 0x2d071b6213a0cb8b, 0x6ff7fa89ba4afd18, 0xe1d5bef04e364a72, 0xa3255f1be7dc7ce1, 0x64347d271de22754, 0x26c49cccb40811c7, 0x5cbd6cc0cc10fafc, 0x1e4d8d2b65facc6f, 0xd95caf179fc497da, 0x9bac4efc362ea149, 0x158e0a85c2521623, 0x577eeb6e6bb820b0, 0x906fc95291867b05, 0xd29f28b9386c4d96, 0xcedba04ad0952342, 0x8c2b41a1797f15d1, 0x4b3a639d83414e64, 0x09ca82762aab78f7, 0x87e8c60fded7cf9d, 0xc51827e4773df90e, 0x020905d88d03a2bb, 0x40f9e43324e99428, 0x2cffe7d5975e55e2, 0x6e0f063e3eb46371, 0xa91e2402c48a38c4, 0xebeec5e96d600e57, 0x65cc8190991cb93d, 0x273c607b30f68fae, 0xe02d4247cac8d41b, 0xa2dda3ac6322e288, 0xbe992b5f8bdb8c5c, 0xfc69cab42231bacf, 0x3b78e888d80fe17a, 0x7988096371e5d7e9, 0xf7aa4d1a85996083, 0xb55aacf12c735610, 0x724b8ecdd64d0da5, 0x30bb6f267fa73b36, 0x4ac29f2a07bfd00d, 0x08327ec1ae55e69e, 0xcf235cfd546bbd2b, 0x8dd3bd16fd818bb8, 0x03f1f96f09fd3cd2, 0x41011884a0170a41, 0x86103ab85a2951f4, 0xc4e0db53f3c36767, 0xd8a453a01b3a09b3, 0x9a54b24bb2d03f20, 0x5d45907748ee6495, 0x1fb5719ce1045206, 0x919735e51578e56c, 0xd367d40ebc92d3ff, 0x1476f63246ac884a, 0x568617d9ef46bed9, 0xe085162ab69d5e3c, 0xa275f7c11f7768af, 0x6564d5fde549331a, 0x279434164ca30589, 0xa9b6706fb8dfb2e3, 0xeb46918411358470, 0x2c57b3b8eb0bdfc5, 0x6ea7525342e1e956, 0x72e3daa0aa188782, 0x30133b4b03f2b111, 0xf7021977f9cceaa4, 0xb5f2f89c5026dc37, 0x3bd0bce5a45a6b5d, 0x79205d0e0db05dce, 0xbe317f32f78e067b, 0xfcc19ed95e6430e8, 0x86b86ed5267cdbd3, 0xc4488f3e8f96ed40, 0x0359ad0275a8b6f5, 0x41a94ce9dc428066, 0xcf8b0890283e370c, 0x8d7be97b81d4019f, 0x4a6acb477bea5a2a, 0x089a2aacd2006cb9, 0x14dea25f3af9026d, 0x562e43b4931334fe, 0x913f6188692d6f4b, 0xd3cf8063c0c759d8, 0x5dedc41a34bbeeb2, 0x1f1d25f19d51d821, 0xd80c07cd676f8394, 0x9afce626ce85b507, ], [ 0x0000000000000000, 0xaf052a6b538edf09, 0x1cfab53d0ef78881, 0xb3ff9f565d795788, 0x39f56a7a1def1102, 0x96f040114e61ce0b, 0x250fdf4713189983, 0x8a0af52c4096468a, 0x73ead4f43bde2204, 0xdceffe9f6850fd0d, 0x6f1061c93529aa85, 0xc0154ba266a7758c, 0x4a1fbe8e26313306, 0xe51a94e575bfec0f, 0x56e50bb328c6bb87, 0xf9e021d87b48648e, 0xe7d5a9e877bc4408, 0x48d0838324329b01, 0xfb2f1cd5794bcc89, 0x542a36be2ac51380, 0xde20c3926a53550a, 0x7125e9f939dd8a03, 0xc2da76af64a4dd8b, 0x6ddf5cc4372a0282, 0x943f7d1c4c62660c, 0x3b3a57771fecb905, 0x88c5c8214295ee8d, 0x27c0e24a111b3184, 0xadca1766518d770e, 0x02cf3d0d0203a807, 0xb130a25b5f7aff8f, 0x1e3588300cf42086, 0x8d5bb23b4692be83, 0x225e9850151c618a, 0x91a1070648653602, 0x3ea42d6d1bebe90b, 0xb4aed8415b7daf81, 0x1babf22a08f37088, 0xa8546d7c558a2700, 0x075147170604f809, 0xfeb166cf7d4c9c87, 0x51b44ca42ec2438e, 0xe24bd3f273bb1406, 0x4d4ef9992035cb0f, 0xc7440cb560a38d85, 0x684126de332d528c, 0xdbbeb9886e540504, 0x74bb93e33ddada0d, 0x6a8e1bd3312efa8b, 0xc58b31b862a02582, 0x7674aeee3fd9720a, 0xd97184856c57ad03, 0x537b71a92cc1eb89, 0xfc7e5bc27f4f3480, 0x4f81c49422366308, 0xe084eeff71b8bc01, 0x1964cf270af0d88f, 0xb661e54c597e0786, 0x059e7a1a0407500e, 0xaa9b507157898f07, 0x2091a55d171fc98d, 0x8f948f3644911684, 0x3c6b106019e8410c, 0x936e3a0b4a669e05, 0x5847859d24cf4b95, 0xf742aff67741949c, 0x44bd30a02a38c314, 0xebb81acb79b61c1d, 0x61b2efe739205a97, 0xceb7c58c6aae859e, 0x7d485ada37d7d216, 0xd24d70b164590d1f, 0x2bad51691f116991, 0x84a87b024c9fb698, 0x3757e45411e6e110, 0x9852ce3f42683e19, 0x12583b1302fe7893, 0xbd5d11785170a79a, 0x0ea28e2e0c09f012, 0xa1a7a4455f872f1b, 0xbf922c7553730f9d, 0x1097061e00fdd094, 0xa36899485d84871c, 0x0c6db3230e0a5815, 0x8667460f4e9c1e9f, 0x29626c641d12c196, 0x9a9df332406b961e, 0x3598d95913e54917, 0xcc78f88168ad2d99, 0x637dd2ea3b23f290, 0xd0824dbc665aa518, 0x7f8767d735d47a11, 0xf58d92fb75423c9b, 0x5a88b89026cce392, 0xe97727c67bb5b41a, 0x46720dad283b6b13, 0xd51c37a6625df516, 0x7a191dcd31d32a1f, 0xc9e6829b6caa7d97, 0x66e3a8f03f24a29e, 0xece95ddc7fb2e414, 0x43ec77b72c3c3b1d, 0xf013e8e171456c95, 0x5f16c28a22cbb39c, 0xa6f6e3525983d712, 0x09f3c9390a0d081b, 0xba0c566f57745f93, 0x15097c0404fa809a, 0x9f038928446cc610, 0x3006a34317e21919, 0x83f93c154a9b4e91, 0x2cfc167e19159198, 0x32c99e4e15e1b11e, 0x9dccb425466f6e17, 0x2e332b731b16399f, 0x813601184898e696, 0x0b3cf434080ea01c, 0xa439de5f5b807f15, 0x17c6410906f9289d, 0xb8c36b625577f794, 0x41234aba2e3f931a, 0xee2660d17db14c13, 0x5dd9ff8720c81b9b, 0xf2dcd5ec7346c492, 0x78d620c033d08218, 0xd7d30aab605e5d11, 0x642c95fd3d270a99, 0xcb29bf966ea9d590, 0xb08f0b3a499e972a, 0x1f8a21511a104823, 0xac75be0747691fab, 0x0370946c14e7c0a2, 0x897a614054718628, 0x267f4b2b07ff5921, 0x9580d47d5a860ea9, 0x3a85fe160908d1a0, 0xc365dfce7240b52e, 0x6c60f5a521ce6a27, 0xdf9f6af37cb73daf, 0x709a40982f39e2a6, 0xfa90b5b46fafa42c, 0x55959fdf3c217b25, 0xe66a008961582cad, 0x496f2ae232d6f3a4, 0x575aa2d23e22d322, 0xf85f88b96dac0c2b, 0x4ba017ef30d55ba3, 0xe4a53d84635b84aa, 0x6eafc8a823cdc220, 0xc1aae2c370431d29, 0x72557d952d3a4aa1, 0xdd5057fe7eb495a8, 0x24b0762605fcf126, 0x8bb55c4d56722e2f, 0x384ac31b0b0b79a7, 0x974fe9705885a6ae, 0x1d451c5c1813e024, 0xb24036374b9d3f2d, 0x01bfa96116e468a5, 0xaeba830a456ab7ac, 0x3dd4b9010f0c29a9, 0x92d1936a5c82f6a0, 0x212e0c3c01fba128, 0x8e2b265752757e21, 0x0421d37b12e338ab, 0xab24f910416de7a2, 0x18db66461c14b02a, 0xb7de4c2d4f9a6f23, 0x4e3e6df534d20bad, 0xe13b479e675cd4a4, 0x52c4d8c83a25832c, 0xfdc1f2a369ab5c25, 0x77cb078f293d1aaf, 0xd8ce2de47ab3c5a6, 0x6b31b2b227ca922e, 0xc43498d974444d27, 0xda0110e978b06da1, 0x75043a822b3eb2a8, 0xc6fba5d47647e520, 0x69fe8fbf25c93a29, 0xe3f47a93655f7ca3, 0x4cf150f836d1a3aa, 0xff0ecfae6ba8f422, 0x500be5c538262b2b, 0xa9ebc41d436e4fa5, 0x06eeee7610e090ac, 0xb51171204d99c724, 0x1a145b4b1e17182d, 0x901eae675e815ea7, 0x3f1b840c0d0f81ae, 0x8ce41b5a5076d626, 0x23e1313103f8092f, 0xe8c88ea76d51dcbf, 0x47cda4cc3edf03b6, 0xf4323b9a63a6543e, 0x5b3711f130288b37, 0xd13de4dd70becdbd, 0x7e38ceb6233012b4, 0xcdc751e07e49453c, 0x62c27b8b2dc79a35, 0x9b225a53568ffebb, 0x34277038050121b2, 0x87d8ef6e5878763a, 0x28ddc5050bf6a933, 0xa2d730294b60efb9, 0x0dd21a4218ee30b0, 0xbe2d851445976738, 0x1128af7f1619b831, 0x0f1d274f1aed98b7, 0xa0180d24496347be, 0x13e79272141a1036, 0xbce2b8194794cf3f, 0x36e84d35070289b5, 0x99ed675e548c56bc, 0x2a12f80809f50134, 0x8517d2635a7bde3d, 0x7cf7f3bb2133bab3, 0xd3f2d9d072bd65ba, 0x600d46862fc43232, 0xcf086ced7c4aed3b, 0x450299c13cdcabb1, 0xea07b3aa6f5274b8, 0x59f82cfc322b2330, 0xf6fd069761a5fc39, 0x65933c9c2bc3623c, 0xca9616f7784dbd35, 0x796989a12534eabd, 0xd66ca3ca76ba35b4, 0x5c6656e6362c733e, 0xf3637c8d65a2ac37, 0x409ce3db38dbfbbf, 0xef99c9b06b5524b6, 0x1679e868101d4038, 0xb97cc20343939f31, 0x0a835d551eeac8b9, 0xa586773e4d6417b0, 0x2f8c82120df2513a, 0x8089a8795e7c8e33, 0x3376372f0305d9bb, 0x9c731d44508b06b2, 0x824695745c7f2634, 0x2d43bf1f0ff1f93d, 0x9ebc20495288aeb5, 0x31b90a22010671bc, 0xbbb3ff0e41903736, 0x14b6d565121ee83f, 0xa7494a334f67bfb7, 0x084c60581ce960be, 0xf1ac418067a10430, 0x5ea96beb342fdb39, 0xed56f4bd69568cb1, 0x4253ded63ad853b8, 0xc8592bfa7a4e1532, 0x675c019129c0ca3b, 0xd4a39ec774b99db3, 0x7ba6b4ac273742ba, ], [ 0x0000000000000000, 0x23eef79f3ad718c7, 0x47ddef3e75ae318e, 0x643318a14f792949, 0x8fbbde7ceb5c631c, 0xac5529e3d18b7bdb, 0xc86631429ef25292, 0xeb88c6dda4254a55, 0x5d875d127f52f0ab, 0x7e69aa8d4585e86c, 0x1a5ab22c0afcc125, 0x39b445b3302bd9e2, 0xd23c836e940e93b7, 0xf1d274f1aed98b70, 0x95e16c50e1a0a239, 0xb60f9bcfdb77bafe, 0xbb0eba24fea5e156, 0x98e04dbbc472f991, 0xfcd3551a8b0bd0d8, 0xdf3da285b1dcc81f, 0x34b5645815f9824a, 0x175b93c72f2e9a8d, 0x73688b666057b3c4, 0x50867cf95a80ab03, 0xe689e73681f711fd, 0xc56710a9bb20093a, 0xa1540808f4592073, 0x82baff97ce8e38b4, 0x6932394a6aab72e1, 0x4adcced5507c6a26, 0x2eefd6741f05436f, 0x0d0121eb25d25ba8, 0x34ed95a254a1f43f, 0x1703623d6e76ecf8, 0x73307a9c210fc5b1, 0x50de8d031bd8dd76, 0xbb564bdebffd9723, 0x98b8bc41852a8fe4, 0xfc8ba4e0ca53a6ad, 0xdf65537ff084be6a, 0x696ac8b02bf30494, 0x4a843f2f11241c53, 0x2eb7278e5e5d351a, 0x0d59d011648a2ddd, 0xe6d116ccc0af6788, 0xc53fe153fa787f4f, 0xa10cf9f2b5015606, 0x82e20e6d8fd64ec1, 0x8fe32f86aa041569, 0xac0dd81990d30dae, 0xc83ec0b8dfaa24e7, 0xebd03727e57d3c20, 0x0058f1fa41587675, 0x23b606657b8f6eb2, 0x47851ec434f647fb, 0x646be95b0e215f3c, 0xd2647294d556e5c2, 0xf18a850bef81fd05, 0x95b99daaa0f8d44c, 0xb6576a359a2fcc8b, 0x5ddface83e0a86de, 0x7e315b7704dd9e19, 0x1a0243d64ba4b750, 0x39ecb4497173af97, 0x69db2b44a943e87e, 0x4a35dcdb9394f0b9, 0x2e06c47adcedd9f0, 0x0de833e5e63ac137, 0xe660f538421f8b62, 0xc58e02a778c893a5, 0xa1bd1a0637b1baec, 0x8253ed990d66a22b, 0x345c7656d61118d5, 0x17b281c9ecc60012, 0x73819968a3bf295b, 0x506f6ef79968319c, 0xbbe7a82a3d4d7bc9, 0x98095fb5079a630e, 0xfc3a471448e34a47, 0xdfd4b08b72345280, 0xd2d5916057e60928, 0xf13b66ff6d3111ef, 0x95087e5e224838a6, 0xb6e689c1189f2061, 0x5d6e4f1cbcba6a34, 0x7e80b883866d72f3, 0x1ab3a022c9145bba, 0x395d57bdf3c3437d, 0x8f52cc7228b4f983, 0xacbc3bed1263e144, 0xc88f234c5d1ac80d, 0xeb61d4d367cdd0ca, 0x00e9120ec3e89a9f, 0x2307e591f93f8258, 0x4734fd30b646ab11, 0x64da0aaf8c91b3d6, 0x5d36bee6fde21c41, 0x7ed84979c7350486, 0x1aeb51d8884c2dcf, 0x3905a647b29b3508, 0xd28d609a16be7f5d, 0xf16397052c69679a, 0x95508fa463104ed3, 0xb6be783b59c75614, 0x00b1e3f482b0ecea, 0x235f146bb867f42d, 0x476c0ccaf71edd64, 0x6482fb55cdc9c5a3, 0x8f0a3d8869ec8ff6, 0xace4ca17533b9731, 0xc8d7d2b61c42be78, 0xeb3925292695a6bf, 0xe63804c20347fd17, 0xc5d6f35d3990e5d0, 0xa1e5ebfc76e9cc99, 0x820b1c634c3ed45e, 0x6983dabee81b9e0b, 0x4a6d2d21d2cc86cc, 0x2e5e35809db5af85, 0x0db0c21fa762b742, 0xbbbf59d07c150dbc, 0x9851ae4f46c2157b, 0xfc62b6ee09bb3c32, 0xdf8c4171336c24f5, 0x340487ac97496ea0, 0x17ea7033ad9e7667, 0x73d96892e2e75f2e, 0x50379f0dd83047e9, 0xd3b656895287d0fc, 0xf058a1166850c83b, 0x946bb9b72729e172, 0xb7854e281dfef9b5, 0x5c0d88f5b9dbb3e0, 0x7fe37f6a830cab27, 0x1bd067cbcc75826e, 0x383e9054f6a29aa9, 0x8e310b9b2dd52057, 0xaddffc0417023890, 0xc9ece4a5587b11d9, 0xea02133a62ac091e, 0x018ad5e7c689434b, 0x22642278fc5e5b8c, 0x46573ad9b32772c5, 0x65b9cd4689f06a02, 0x68b8ecadac2231aa, 0x4b561b3296f5296d, 0x2f650393d98c0024, 0x0c8bf40ce35b18e3, 0xe70332d1477e52b6, 0xc4edc54e7da94a71, 0xa0deddef32d06338, 0x83302a7008077bff, 0x353fb1bfd370c101, 0x16d14620e9a7d9c6, 0x72e25e81a6def08f, 0x510ca91e9c09e848, 0xba846fc3382ca21d, 0x996a985c02fbbada, 0xfd5980fd4d829393, 0xdeb7776277558b54, 0xe75bc32b062624c3, 0xc4b534b43cf13c04, 0xa0862c157388154d, 0x8368db8a495f0d8a, 0x68e01d57ed7a47df, 0x4b0eeac8d7ad5f18, 0x2f3df26998d47651, 0x0cd305f6a2036e96, 0xbadc9e397974d468, 0x993269a643a3ccaf, 0xfd0171070cdae5e6, 0xdeef8698360dfd21, 0x356740459228b774, 0x1689b7daa8ffafb3, 0x72baaf7be78686fa, 0x515458e4dd519e3d, 0x5c55790ff883c595, 0x7fbb8e90c254dd52, 0x1b8896318d2df41b, 0x386661aeb7faecdc, 0xd3eea77313dfa689, 0xf00050ec2908be4e, 0x9433484d66719707, 0xb7ddbfd25ca68fc0, 0x01d2241d87d1353e, 0x223cd382bd062df9, 0x460fcb23f27f04b0, 0x65e13cbcc8a81c77, 0x8e69fa616c8d5622, 0xad870dfe565a4ee5, 0xc9b4155f192367ac, 0xea5ae2c023f47f6b, 0xba6d7dcdfbc43882, 0x99838a52c1132045, 0xfdb092f38e6a090c, 0xde5e656cb4bd11cb, 0x35d6a3b110985b9e, 0x1638542e2a4f4359, 0x720b4c8f65366a10, 0x51e5bb105fe172d7, 0xe7ea20df8496c829, 0xc404d740be41d0ee, 0xa037cfe1f138f9a7, 0x83d9387ecbefe160, 0x6851fea36fcaab35, 0x4bbf093c551db3f2, 0x2f8c119d1a649abb, 0x0c62e60220b3827c, 0x0163c7e90561d9d4, 0x228d30763fb6c113, 0x46be28d770cfe85a, 0x6550df484a18f09d, 0x8ed81995ee3dbac8, 0xad36ee0ad4eaa20f, 0xc905f6ab9b938b46, 0xeaeb0134a1449381, 0x5ce49afb7a33297f, 0x7f0a6d6440e431b8, 0x1b3975c50f9d18f1, 0x38d7825a354a0036, 0xd35f4487916f4a63, 0xf0b1b318abb852a4, 0x9482abb9e4c17bed, 0xb76c5c26de16632a, 0x8e80e86faf65ccbd, 0xad6e1ff095b2d47a, 0xc95d0751dacbfd33, 0xeab3f0cee01ce5f4, 0x013b36134439afa1, 0x22d5c18c7eeeb766, 0x46e6d92d31979e2f, 0x65082eb20b4086e8, 0xd307b57dd0373c16, 0xf0e942e2eae024d1, 0x94da5a43a5990d98, 0xb734addc9f4e155f, 0x5cbc6b013b6b5f0a, 0x7f529c9e01bc47cd, 0x1b61843f4ec56e84, 0x388f73a074127643, 0x358e524b51c02deb, 0x1660a5d46b17352c, 0x7253bd75246e1c65, 0x51bd4aea1eb904a2, 0xba358c37ba9c4ef7, 0x99db7ba8804b5630, 0xfde86309cf327f79, 0xde069496f5e567be, 0x68090f592e92dd40, 0x4be7f8c61445c587, 0x2fd4e0675b3cecce, 0x0c3a17f861ebf409, 0xe7b2d125c5cebe5c, 0xc45c26baff19a69b, 0xa06f3e1bb0608fd2, 0x8381c9848ab79715, ], [ 0x0000000000000000, 0xe59c4cf90ce5976b, 0x89c87819b0211845, 0x6c5434e0bcc48f2e, 0x516011d8c9a80619, 0xb4fc5d21c54d9172, 0xd8a869c179891e5c, 0x3d342538756c8937, 0xa2c023b193500c32, 0x475c6f489fb59b59, 0x2b085ba823711477, 0xce9417512f94831c, 0xf3a032695af80a2b, 0x163c7e90561d9d40, 0x7a684a70ead9126e, 0x9ff40689e63c8505, 0x0770a6888f4a2ef7, 0xe2ecea7183afb99c, 0x8eb8de913f6b36b2, 0x6b249268338ea1d9, 0x5610b75046e228ee, 0xb38cfba94a07bf85, 0xdfd8cf49f6c330ab, 0x3a4483b0fa26a7c0, 0xa5b085391c1a22c5, 0x402cc9c010ffb5ae, 0x2c78fd20ac3b3a80, 0xc9e4b1d9a0deadeb, 0xf4d094e1d5b224dc, 0x114cd818d957b3b7, 0x7d18ecf865933c99, 0x9884a0016976abf2, 0x0ee14d111e945dee, 0xeb7d01e81271ca85, 0x87293508aeb545ab, 0x62b579f1a250d2c0, 0x5f815cc9d73c5bf7, 0xba1d1030dbd9cc9c, 0xd64924d0671d43b2, 0x33d568296bf8d4d9, 0xac216ea08dc451dc, 0x49bd22598121c6b7, 0x25e916b93de54999, 0xc0755a403100def2, 0xfd417f78446c57c5, 0x18dd33814889c0ae, 0x74890761f44d4f80, 0x91154b98f8a8d8eb, 0x0991eb9991de7319, 0xec0da7609d3be472, 0x8059938021ff6b5c, 0x65c5df792d1afc37, 0x58f1fa4158767500, 0xbd6db6b85493e26b, 0xd1398258e8576d45, 0x34a5cea1e4b2fa2e, 0xab51c828028e7f2b, 0x4ecd84d10e6be840, 0x2299b031b2af676e, 0xc705fcc8be4af005, 0xfa31d9f0cb267932, 0x1fad9509c7c3ee59, 0x73f9a1e97b076177, 0x9665ed1077e2f61c, 0x1dc29a223d28bbdc, 0xf85ed6db31cd2cb7, 0x940ae23b8d09a399, 0x7196aec281ec34f2, 0x4ca28bfaf480bdc5, 0xa93ec703f8652aae, 0xc56af3e344a1a580, 0x20f6bf1a484432eb, 0xbf02b993ae78b7ee, 0x5a9ef56aa29d2085, 0x36cac18a1e59afab, 0xd3568d7312bc38c0, 0xee62a84b67d0b1f7, 0x0bfee4b26b35269c, 0x67aad052d7f1a9b2, 0x82369cabdb143ed9, 0x1ab23caab262952b, 0xff2e7053be870240, 0x937a44b302438d6e, 0x76e6084a0ea61a05, 0x4bd22d727bca9332, 0xae4e618b772f0459, 0xc21a556bcbeb8b77, 0x27861992c70e1c1c, 0xb8721f1b21329919, 0x5dee53e22dd70e72, 0x31ba67029113815c, 0xd4262bfb9df61637, 0xe9120ec3e89a9f00, 0x0c8e423ae47f086b, 0x60da76da58bb8745, 0x85463a23545e102e, 0x1323d73323bce632, 0xf6bf9bca2f597159, 0x9aebaf2a939dfe77, 0x7f77e3d39f78691c, 0x4243c6ebea14e02b, 0xa7df8a12e6f17740, 0xcb8bbef25a35f86e, 0x2e17f20b56d06f05, 0xb1e3f482b0ecea00, 0x547fb87bbc097d6b, 0x382b8c9b00cdf245, 0xddb7c0620c28652e, 0xe083e55a7944ec19, 0x051fa9a375a17b72, 0x694b9d43c965f45c, 0x8cd7d1bac5806337, 0x145371bbacf6c8c5, 0xf1cf3d42a0135fae, 0x9d9b09a21cd7d080, 0x7807455b103247eb, 0x45336063655ecedc, 0xa0af2c9a69bb59b7, 0xccfb187ad57fd699, 0x29675483d99a41f2, 0xb693520a3fa6c4f7, 0x530f1ef33343539c, 0x3f5b2a138f87dcb2, 0xdac766ea83624bd9, 0xe7f343d2f60ec2ee, 0x026f0f2bfaeb5585, 0x6e3b3bcb462fdaab, 0x8ba777324aca4dc0, 0x3b8534447a5177b8, 0xde1978bd76b4e0d3, 0xb24d4c5dca706ffd, 0x57d100a4c695f896, 0x6ae5259cb3f971a1, 0x8f796965bf1ce6ca, 0xe32d5d8503d869e4, 0x06b1117c0f3dfe8f, 0x994517f5e9017b8a, 0x7cd95b0ce5e4ece1, 0x108d6fec592063cf, 0xf511231555c5f4a4, 0xc825062d20a97d93, 0x2db94ad42c4ceaf8, 0x41ed7e34908865d6, 0xa47132cd9c6df2bd, 0x3cf592ccf51b594f, 0xd969de35f9fece24, 0xb53dead5453a410a, 0x50a1a62c49dfd661, 0x6d9583143cb35f56, 0x8809cfed3056c83d, 0xe45dfb0d8c924713, 0x01c1b7f48077d078, 0x9e35b17d664b557d, 0x7ba9fd846aaec216, 0x17fdc964d66a4d38, 0xf261859dda8fda53, 0xcf55a0a5afe35364, 0x2ac9ec5ca306c40f, 0x469dd8bc1fc24b21, 0xa30194451327dc4a, 0x3564795564c52a56, 0xd0f835ac6820bd3d, 0xbcac014cd4e43213, 0x59304db5d801a578, 0x6404688dad6d2c4f, 0x81982474a188bb24, 0xedcc10941d4c340a, 0x08505c6d11a9a361, 0x97a45ae4f7952664, 0x7238161dfb70b10f, 0x1e6c22fd47b43e21, 0xfbf06e044b51a94a, 0xc6c44b3c3e3d207d, 0x235807c532d8b716, 0x4f0c33258e1c3838, 0xaa907fdc82f9af53, 0x3214dfddeb8f04a1, 0xd7889324e76a93ca, 0xbbdca7c45bae1ce4, 0x5e40eb3d574b8b8f, 0x6374ce05222702b8, 0x86e882fc2ec295d3, 0xeabcb61c92061afd, 0x0f20fae59ee38d96, 0x90d4fc6c78df0893, 0x7548b095743a9ff8, 0x191c8475c8fe10d6, 0xfc80c88cc41b87bd, 0xc1b4edb4b1770e8a, 0x2428a14dbd9299e1, 0x487c95ad015616cf, 0xade0d9540db381a4, 0x2647ae664779cc64, 0xc3dbe29f4b9c5b0f, 0xaf8fd67ff758d421, 0x4a139a86fbbd434a, 0x7727bfbe8ed1ca7d, 0x92bbf34782345d16, 0xfeefc7a73ef0d238, 0x1b738b5e32154553, 0x84878dd7d429c056, 0x611bc12ed8cc573d, 0x0d4ff5ce6408d813, 0xe8d3b93768ed4f78, 0xd5e79c0f1d81c64f, 0x307bd0f611645124, 0x5c2fe416ada0de0a, 0xb9b3a8efa1454961, 0x213708eec833e293, 0xc4ab4417c4d675f8, 0xa8ff70f77812fad6, 0x4d633c0e74f76dbd, 0x70571936019be48a, 0x95cb55cf0d7e73e1, 0xf99f612fb1bafccf, 0x1c032dd6bd5f6ba4, 0x83f72b5f5b63eea1, 0x666b67a6578679ca, 0x0a3f5346eb42f6e4, 0xefa31fbfe7a7618f, 0xd2973a8792cbe8b8, 0x370b767e9e2e7fd3, 0x5b5f429e22eaf0fd, 0xbec30e672e0f6796, 0x28a6e37759ed918a, 0xcd3aaf8e550806e1, 0xa16e9b6ee9cc89cf, 0x44f2d797e5291ea4, 0x79c6f2af90459793, 0x9c5abe569ca000f8, 0xf00e8ab620648fd6, 0x1592c64f2c8118bd, 0x8a66c0c6cabd9db8, 0x6ffa8c3fc6580ad3, 0x03aeb8df7a9c85fd, 0xe632f42676791296, 0xdb06d11e03159ba1, 0x3e9a9de70ff00cca, 0x52cea907b33483e4, 0xb752e5febfd1148f, 0x2fd645ffd6a7bf7d, 0xca4a0906da422816, 0xa61e3de66686a738, 0x4382711f6a633053, 0x7eb654271f0fb964, 0x9b2a18de13ea2e0f, 0xf77e2c3eaf2ea121, 0x12e260c7a3cb364a, 0x8d16664e45f7b34f, 0x688a2ab749122424, 0x04de1e57f5d6ab0a, 0xe14252aef9333c61, 0xdc7677968c5fb556, 0x39ea3b6f80ba223d, 0x55be0f8f3c7ead13, 0xb0224376309b3a78, ], [ 0x0000000000000000, 0x770a6888f4a2ef70, 0xee14d111e945dee0, 0x991eb9991de73190, 0x9ed943c87b618b53, 0xe9d32b408fc36423, 0x70cd92d9922455b3, 0x07c7fa516686bac3, 0x7f42667b5f292035, 0x08480ef3ab8bcf45, 0x9156b76ab66cfed5, 0xe65cdfe242ce11a5, 0xe19b25b32448ab66, 0x96914d3bd0ea4416, 0x0f8ff4a2cd0d7586, 0x78859c2a39af9af6, 0xfe84ccf6be52406a, 0x898ea47e4af0af1a, 0x10901de757179e8a, 0x679a756fa3b571fa, 0x605d8f3ec533cb39, 0x1757e7b631912449, 0x8e495e2f2c7615d9, 0xf94336a7d8d4faa9, 0x81c6aa8de17b605f, 0xf6ccc20515d98f2f, 0x6fd27b9c083ebebf, 0x18d81314fc9c51cf, 0x1f1fe9459a1aeb0c, 0x681581cd6eb8047c, 0xf10b3854735f35ec, 0x860150dc87fdda9c, 0xbff97806d54eb647, 0xc8f3108e21ec5937, 0x51eda9173c0b68a7, 0x26e7c19fc8a987d7, 0x21203bceae2f3d14, 0x562a53465a8dd264, 0xcf34eadf476ae3f4, 0xb83e8257b3c80c84, 0xc0bb1e7d8a679672, 0xb7b176f57ec57902, 0x2eafcf6c63224892, 0x59a5a7e49780a7e2, 0x5e625db5f1061d21, 0x2968353d05a4f251, 0xb0768ca41843c3c1, 0xc77ce42cece12cb1, 0x417db4f06b1cf62d, 0x3677dc789fbe195d, 0xaf6965e1825928cd, 0xd8630d6976fbc7bd, 0xdfa4f738107d7d7e, 0xa8ae9fb0e4df920e, 0x31b02629f938a39e, 0x46ba4ea10d9a4cee, 0x3e3fd28b3435d618, 0x4935ba03c0973968, 0xd02b039add7008f8, 0xa7216b1229d2e788, 0xa0e691434f545d4b, 0xd7ecf9cbbbf6b23b, 0x4ef24052a61183ab, 0x39f828da52b36cdb, 0x3d0211e603775a1d, 0x4a08796ef7d5b56d, 0xd316c0f7ea3284fd, 0xa41ca87f1e906b8d, 0xa3db522e7816d14e, 0xd4d13aa68cb43e3e, 0x4dcf833f91530fae, 0x3ac5ebb765f1e0de, 0x4240779d5c5e7a28, 0x354a1f15a8fc9558, 0xac54a68cb51ba4c8, 0xdb5ece0441b94bb8, 0xdc993455273ff17b, 0xab935cddd39d1e0b, 0x328de544ce7a2f9b, 0x45878dcc3ad8c0eb, 0xc386dd10bd251a77, 0xb48cb5984987f507, 0x2d920c015460c497, 0x5a986489a0c22be7, 0x5d5f9ed8c6449124, 0x2a55f65032e67e54, 0xb34b4fc92f014fc4, 0xc4412741dba3a0b4, 0xbcc4bb6be20c3a42, 0xcbced3e316aed532, 0x52d06a7a0b49e4a2, 0x25da02f2ffeb0bd2, 0x221df8a3996db111, 0x5517902b6dcf5e61, 0xcc0929b270286ff1, 0xbb03413a848a8081, 0x82fb69e0d639ec5a, 0xf5f10168229b032a, 0x6cefb8f13f7c32ba, 0x1be5d079cbdeddca, 0x1c222a28ad586709, 0x6b2842a059fa8879, 0xf236fb39441db9e9, 0x853c93b1b0bf5699, 0xfdb90f9b8910cc6f, 0x8ab367137db2231f, 0x13adde8a6055128f, 0x64a7b60294f7fdff, 0x63604c53f271473c, 0x146a24db06d3a84c, 0x8d749d421b3499dc, 0xfa7ef5caef9676ac, 0x7c7fa516686bac30, 0x0b75cd9e9cc94340, 0x926b7407812e72d0, 0xe5611c8f758c9da0, 0xe2a6e6de130a2763, 0x95ac8e56e7a8c813, 0x0cb237cffa4ff983, 0x7bb85f470eed16f3, 0x033dc36d37428c05, 0x7437abe5c3e06375, 0xed29127cde0752e5, 0x9a237af42aa5bd95, 0x9de480a54c230756, 0xeaeee82db881e826, 0x73f051b4a566d9b6, 0x04fa393c51c436c6, 0x7a0423cc06eeb43a, 0x0d0e4b44f24c5b4a, 0x9410f2ddefab6ada, 0xe31a9a551b0985aa, 0xe4dd60047d8f3f69, 0x93d7088c892dd019, 0x0ac9b11594cae189, 0x7dc3d99d60680ef9, 0x054645b759c7940f, 0x724c2d3fad657b7f, 0xeb5294a6b0824aef, 0x9c58fc2e4420a59f, 0x9b9f067f22a61f5c, 0xec956ef7d604f02c, 0x758bd76ecbe3c1bc, 0x0281bfe63f412ecc, 0x8480ef3ab8bcf450, 0xf38a87b24c1e1b20, 0x6a943e2b51f92ab0, 0x1d9e56a3a55bc5c0, 0x1a59acf2c3dd7f03, 0x6d53c47a377f9073, 0xf44d7de32a98a1e3, 0x8347156bde3a4e93, 0xfbc28941e795d465, 0x8cc8e1c913373b15, 0x15d658500ed00a85, 0x62dc30d8fa72e5f5, 0x651bca899cf45f36, 0x1211a2016856b046, 0x8b0f1b9875b181d6, 0xfc05731081136ea6, 0xc5fd5bcad3a0027d, 0xb2f733422702ed0d, 0x2be98adb3ae5dc9d, 0x5ce3e253ce4733ed, 0x5b241802a8c1892e, 0x2c2e708a5c63665e, 0xb530c913418457ce, 0xc23aa19bb526b8be, 0xbabf3db18c892248, 0xcdb55539782bcd38, 0x54abeca065ccfca8, 0x23a18428916e13d8, 0x24667e79f7e8a91b, 0x536c16f1034a466b, 0xca72af681ead77fb, 0xbd78c7e0ea0f988b, 0x3b79973c6df24217, 0x4c73ffb49950ad67, 0xd56d462d84b79cf7, 0xa2672ea570157387, 0xa5a0d4f41693c944, 0xd2aabc7ce2312634, 0x4bb405e5ffd617a4, 0x3cbe6d6d0b74f8d4, 0x443bf14732db6222, 0x333199cfc6798d52, 0xaa2f2056db9ebcc2, 0xdd2548de2f3c53b2, 0xdae2b28f49bae971, 0xade8da07bd180601, 0x34f6639ea0ff3791, 0x43fc0b16545dd8e1, 0x4706322a0599ee27, 0x300c5aa2f13b0157, 0xa912e33becdc30c7, 0xde188bb3187edfb7, 0xd9df71e27ef86574, 0xaed5196a8a5a8a04, 0x37cba0f397bdbb94, 0x40c1c87b631f54e4, 0x384454515ab0ce12, 0x4f4e3cd9ae122162, 0xd6508540b3f510f2, 0xa15aedc84757ff82, 0xa69d179921d14541, 0xd1977f11d573aa31, 0x4889c688c8949ba1, 0x3f83ae003c3674d1, 0xb982fedcbbcbae4d, 0xce8896544f69413d, 0x57962fcd528e70ad, 0x209c4745a62c9fdd, 0x275bbd14c0aa251e, 0x5051d59c3408ca6e, 0xc94f6c0529effbfe, 0xbe45048ddd4d148e, 0xc6c098a7e4e28e78, 0xb1caf02f10406108, 0x28d449b60da75098, 0x5fde213ef905bfe8, 0x5819db6f9f83052b, 0x2f13b3e76b21ea5b, 0xb60d0a7e76c6dbcb, 0xc10762f6826434bb, 0xf8ff4a2cd0d75860, 0x8ff522a42475b710, 0x16eb9b3d39928680, 0x61e1f3b5cd3069f0, 0x662609e4abb6d333, 0x112c616c5f143c43, 0x8832d8f542f30dd3, 0xff38b07db651e2a3, 0x87bd2c578ffe7855, 0xf0b744df7b5c9725, 0x69a9fd4666bba6b5, 0x1ea395ce921949c5, 0x19646f9ff49ff306, 0x6e6e0717003d1c76, 0xf770be8e1dda2de6, 0x807ad606e978c296, 0x067b86da6e85180a, 0x7171ee529a27f77a, 0xe86f57cb87c0c6ea, 0x9f653f437362299a, 0x98a2c51215e49359, 0xefa8ad9ae1467c29, 0x76b61403fca14db9, 0x01bc7c8b0803a2c9, 0x7939e0a131ac383f, 0x0e338829c50ed74f, 0x972d31b0d8e9e6df, 0xe02759382c4b09af, 0xe7e0a3694acdb36c, 0x90eacbe1be6f5c1c, 0x09f47278a3886d8c, 0x7efe1af0572a82fc, ], [ 0x0000000000000000, 0xf40847980ddd6874, 0xaae06edbb250e67b, 0x5ee82943bf8d8e0f, 0x17303c5ccd4bfa65, 0xe3387bc4c0969211, 0xbdd052877f1b1c1e, 0x49d8151f72c6746a, 0x2e6078b99a97f4ca, 0xda683f21974a9cbe, 0x8480166228c712b1, 0x708851fa251a7ac5, 0x395044e557dc0eaf, 0xcd58037d5a0166db, 0x93b02a3ee58ce8d4, 0x67b86da6e85180a0, 0x5cc0f173352fe994, 0xa8c8b6eb38f281e0, 0xf6209fa8877f0fef, 0x0228d8308aa2679b, 0x4bf0cd2ff86413f1, 0xbff88ab7f5b97b85, 0xe110a3f44a34f58a, 0x1518e46c47e99dfe, 0x72a089caafb81d5e, 0x86a8ce52a265752a, 0xd840e7111de8fb25, 0x2c48a08910359351, 0x6590b59662f3e73b, 0x9198f20e6f2e8f4f, 0xcf70db4dd0a30140, 0x3b789cd5dd7e6934, 0xb981e2e66a5fd328, 0x4d89a57e6782bb5c, 0x13618c3dd80f3553, 0xe769cba5d5d25d27, 0xaeb1debaa714294d, 0x5ab99922aac94139, 0x0451b0611544cf36, 0xf059f7f91899a742, 0x97e19a5ff0c827e2, 0x63e9ddc7fd154f96, 0x3d01f4844298c199, 0xc909b31c4f45a9ed, 0x80d1a6033d83dd87, 0x74d9e19b305eb5f3, 0x2a31c8d88fd33bfc, 0xde398f40820e5388, 0xe54113955f703abc, 0x1149540d52ad52c8, 0x4fa17d4eed20dcc7, 0xbba93ad6e0fdb4b3, 0xf2712fc9923bc0d9, 0x067968519fe6a8ad, 0x58914112206b26a2, 0xac99068a2db64ed6, 0xcb216b2cc5e7ce76, 0x3f292cb4c83aa602, 0x61c105f777b7280d, 0x95c9426f7a6a4079, 0xdc11577008ac3413, 0x281910e805715c67, 0x76f139abbafcd268, 0x82f97e33b721ba1c, 0x31f324277d5590c3, 0xc5fb63bf7088f8b7, 0x9b134afccf0576b8, 0x6f1b0d64c2d81ecc, 0x26c3187bb01e6aa6, 0xd2cb5fe3bdc302d2, 0x8c2376a0024e8cdd, 0x782b31380f93e4a9, 0x1f935c9ee7c26409, 0xeb9b1b06ea1f0c7d, 0xb573324555928272, 0x417b75dd584fea06, 0x08a360c22a899e6c, 0xfcab275a2754f618, 0xa2430e1998d97817, 0x564b498195041063, 0x6d33d554487a7957, 0x993b92cc45a71123, 0xc7d3bb8ffa2a9f2c, 0x33dbfc17f7f7f758, 0x7a03e90885318332, 0x8e0bae9088eceb46, 0xd0e387d337616549, 0x24ebc04b3abc0d3d, 0x4353adedd2ed8d9d, 0xb75bea75df30e5e9, 0xe9b3c33660bd6be6, 0x1dbb84ae6d600392, 0x546391b11fa677f8, 0xa06bd629127b1f8c, 0xfe83ff6aadf69183, 0x0a8bb8f2a02bf9f7, 0x8872c6c1170a43eb, 0x7c7a81591ad72b9f, 0x2292a81aa55aa590, 0xd69aef82a887cde4, 0x9f42fa9dda41b98e, 0x6b4abd05d79cd1fa, 0x35a2944668115ff5, 0xc1aad3de65cc3781, 0xa612be788d9db721, 0x521af9e08040df55, 0x0cf2d0a33fcd515a, 0xf8fa973b3210392e, 0xb122822440d64d44, 0x452ac5bc4d0b2530, 0x1bc2ecfff286ab3f, 0xefcaab67ff5bc34b, 0xd4b237b22225aa7f, 0x20ba702a2ff8c20b, 0x7e52596990754c04, 0x8a5a1ef19da82470, 0xc3820beeef6e501a, 0x378a4c76e2b3386e, 0x696265355d3eb661, 0x9d6a22ad50e3de15, 0xfad24f0bb8b25eb5, 0x0eda0893b56f36c1, 0x503221d00ae2b8ce, 0xa43a6648073fd0ba, 0xede2735775f9a4d0, 0x19ea34cf7824cca4, 0x47021d8cc7a942ab, 0xb30a5a14ca742adf, 0x63e6484efaab2186, 0x97ee0fd6f77649f2, 0xc906269548fbc7fd, 0x3d0e610d4526af89, 0x74d6741237e0dbe3, 0x80de338a3a3db397, 0xde361ac985b03d98, 0x2a3e5d51886d55ec, 0x4d8630f7603cd54c, 0xb98e776f6de1bd38, 0xe7665e2cd26c3337, 0x136e19b4dfb15b43, 0x5ab60cabad772f29, 0xaebe4b33a0aa475d, 0xf05662701f27c952, 0x045e25e812faa126, 0x3f26b93dcf84c812, 0xcb2efea5c259a066, 0x95c6d7e67dd42e69, 0x61ce907e7009461d, 0x2816856102cf3277, 0xdc1ec2f90f125a03, 0x82f6ebbab09fd40c, 0x76feac22bd42bc78, 0x1146c18455133cd8, 0xe54e861c58ce54ac, 0xbba6af5fe743daa3, 0x4faee8c7ea9eb2d7, 0x0676fdd89858c6bd, 0xf27eba409585aec9, 0xac9693032a0820c6, 0x589ed49b27d548b2, 0xda67aaa890f4f2ae, 0x2e6fed309d299ada, 0x7087c47322a414d5, 0x848f83eb2f797ca1, 0xcd5796f45dbf08cb, 0x395fd16c506260bf, 0x67b7f82fefefeeb0, 0x93bfbfb7e23286c4, 0xf407d2110a630664, 0x000f958907be6e10, 0x5ee7bccab833e01f, 0xaaeffb52b5ee886b, 0xe337ee4dc728fc01, 0x173fa9d5caf59475, 0x49d7809675781a7a, 0xbddfc70e78a5720e, 0x86a75bdba5db1b3a, 0x72af1c43a806734e, 0x2c473500178bfd41, 0xd84f72981a569535, 0x919767876890e15f, 0x659f201f654d892b, 0x3b77095cdac00724, 0xcf7f4ec4d71d6f50, 0xa8c723623f4ceff0, 0x5ccf64fa32918784, 0x02274db98d1c098b, 0xf62f0a2180c161ff, 0xbff71f3ef2071595, 0x4bff58a6ffda7de1, 0x151771e54057f3ee, 0xe11f367d4d8a9b9a, 0x52156c6987feb145, 0xa61d2bf18a23d931, 0xf8f502b235ae573e, 0x0cfd452a38733f4a, 0x452550354ab54b20, 0xb12d17ad47682354, 0xefc53eeef8e5ad5b, 0x1bcd7976f538c52f, 0x7c7514d01d69458f, 0x887d534810b42dfb, 0xd6957a0baf39a3f4, 0x229d3d93a2e4cb80, 0x6b45288cd022bfea, 0x9f4d6f14ddffd79e, 0xc1a5465762725991, 0x35ad01cf6faf31e5, 0x0ed59d1ab2d158d1, 0xfaddda82bf0c30a5, 0xa435f3c10081beaa, 0x503db4590d5cd6de, 0x19e5a1467f9aa2b4, 0xedede6de7247cac0, 0xb305cf9dcdca44cf, 0x470d8805c0172cbb, 0x20b5e5a32846ac1b, 0xd4bda23b259bc46f, 0x8a558b789a164a60, 0x7e5dcce097cb2214, 0x3785d9ffe50d567e, 0xc38d9e67e8d03e0a, 0x9d65b724575db005, 0x696df0bc5a80d871, 0xeb948e8feda1626d, 0x1f9cc917e07c0a19, 0x4174e0545ff18416, 0xb57ca7cc522cec62, 0xfca4b2d320ea9808, 0x08acf54b2d37f07c, 0x5644dc0892ba7e73, 0xa24c9b909f671607, 0xc5f4f636773696a7, 0x31fcb1ae7aebfed3, 0x6f1498edc56670dc, 0x9b1cdf75c8bb18a8, 0xd2c4ca6aba7d6cc2, 0x26cc8df2b7a004b6, 0x7824a4b1082d8ab9, 0x8c2ce32905f0e2cd, 0xb7547ffcd88e8bf9, 0x435c3864d553e38d, 0x1db411276ade6d82, 0xe9bc56bf670305f6, 0xa06443a015c5719c, 0x546c0438181819e8, 0x0a842d7ba79597e7, 0xfe8c6ae3aa48ff93, 0x9934074542197f33, 0x6d3c40dd4fc41747, 0x33d4699ef0499948, 0xc7dc2e06fd94f13c, 0x8e043b198f528556, 0x7a0c7c81828fed22, 0x24e455c23d02632d, 0xd0ec125a30df0b59, ], [ 0x0000000000000000, 0xc7cc909df556430c, 0xcd69c0d04346b08b, 0x0aa5504db610f387, 0xd823604b2f675785, 0x1feff0d6da311489, 0x154aa09b6c21e70e, 0xd28630069977a402, 0xf2b6217df7249999, 0x357ab1e00272da95, 0x3fdfe1adb4622912, 0xf813713041346a1e, 0x2a954136d843ce1c, 0xed59d1ab2d158d10, 0xe7fc81e69b057e97, 0x2030117b6e533d9b, 0xa79ca31047a305a1, 0x6050338db2f546ad, 0x6af563c004e5b52a, 0xad39f35df1b3f626, 0x7fbfc35b68c45224, 0xb87353c69d921128, 0xb2d6038b2b82e2af, 0x751a9316ded4a1a3, 0x552a826db0879c38, 0x92e612f045d1df34, 0x984342bdf3c12cb3, 0x5f8fd22006976fbf, 0x8d09e2269fe0cbbd, 0x4ac572bb6ab688b1, 0x406022f6dca67b36, 0x87acb26b29f0383a, 0x0dc9a7cb26ac3dd1, 0xca053756d3fa7edd, 0xc0a0671b65ea8d5a, 0x076cf78690bcce56, 0xd5eac78009cb6a54, 0x1226571dfc9d2958, 0x188307504a8ddadf, 0xdf4f97cdbfdb99d3, 0xff7f86b6d188a448, 0x38b3162b24dee744, 0x3216466692ce14c3, 0xf5dad6fb679857cf, 0x275ce6fdfeeff3cd, 0xe09076600bb9b0c1, 0xea35262dbda94346, 0x2df9b6b048ff004a, 0xaa5504db610f3870, 0x6d99944694597b7c, 0x673cc40b224988fb, 0xa0f05496d71fcbf7, 0x727664904e686ff5, 0xb5baf40dbb3e2cf9, 0xbf1fa4400d2edf7e, 0x78d334ddf8789c72, 0x58e325a6962ba1e9, 0x9f2fb53b637de2e5, 0x958ae576d56d1162, 0x524675eb203b526e, 0x80c045edb94cf66c, 0x470cd5704c1ab560, 0x4da9853dfa0a46e7, 0x8a6515a00f5c05eb, 0x1b934f964d587ba2, 0xdc5fdf0bb80e38ae, 0xd6fa8f460e1ecb29, 0x11361fdbfb488825, 0xc3b02fdd623f2c27, 0x047cbf4097696f2b, 0x0ed9ef0d21799cac, 0xc9157f90d42fdfa0, 0xe9256eebba7ce23b, 0x2ee9fe764f2aa137, 0x244cae3bf93a52b0, 0xe3803ea60c6c11bc, 0x31060ea0951bb5be, 0xf6ca9e3d604df6b2, 0xfc6fce70d65d0535, 0x3ba35eed230b4639, 0xbc0fec860afb7e03, 0x7bc37c1bffad3d0f, 0x71662c5649bdce88, 0xb6aabccbbceb8d84, 0x642c8ccd259c2986, 0xa3e01c50d0ca6a8a, 0xa9454c1d66da990d, 0x6e89dc80938cda01, 0x4eb9cdfbfddfe79a, 0x89755d660889a496, 0x83d00d2bbe995711, 0x441c9db64bcf141d, 0x969aadb0d2b8b01f, 0x51563d2d27eef313, 0x5bf36d6091fe0094, 0x9c3ffdfd64a84398, 0x165ae85d6bf44673, 0xd19678c09ea2057f, 0xdb33288d28b2f6f8, 0x1cffb810dde4b5f4, 0xce798816449311f6, 0x09b5188bb1c552fa, 0x031048c607d5a17d, 0xc4dcd85bf283e271, 0xe4ecc9209cd0dfea, 0x232059bd69869ce6, 0x298509f0df966f61, 0xee49996d2ac02c6d, 0x3ccfa96bb3b7886f, 0xfb0339f646e1cb63, 0xf1a669bbf0f138e4, 0x366af92605a77be8, 0xb1c64b4d2c5743d2, 0x760adbd0d90100de, 0x7caf8b9d6f11f359, 0xbb631b009a47b055, 0x69e52b0603301457, 0xae29bb9bf666575b, 0xa48cebd64076a4dc, 0x63407b4bb520e7d0, 0x43706a30db73da4b, 0x84bcfaad2e259947, 0x8e19aae098356ac0, 0x49d53a7d6d6329cc, 0x9b530a7bf4148dce, 0x5c9f9ae60142cec2, 0x563acaabb7523d45, 0x91f65a3642047e49, 0x37269f2c9ab0f744, 0xf0ea0fb16fe6b448, 0xfa4f5ffcd9f647cf, 0x3d83cf612ca004c3, 0xef05ff67b5d7a0c1, 0x28c96ffa4081e3cd, 0x226c3fb7f691104a, 0xe5a0af2a03c75346, 0xc590be516d946edd, 0x025c2ecc98c22dd1, 0x08f97e812ed2de56, 0xcf35ee1cdb849d5a, 0x1db3de1a42f33958, 0xda7f4e87b7a57a54, 0xd0da1eca01b589d3, 0x17168e57f4e3cadf, 0x90ba3c3cdd13f2e5, 0x5776aca12845b1e9, 0x5dd3fcec9e55426e, 0x9a1f6c716b030162, 0x48995c77f274a560, 0x8f55ccea0722e66c, 0x85f09ca7b13215eb, 0x423c0c3a446456e7, 0x620c1d412a376b7c, 0xa5c08ddcdf612870, 0xaf65dd916971dbf7, 0x68a94d0c9c2798fb, 0xba2f7d0a05503cf9, 0x7de3ed97f0067ff5, 0x7746bdda46168c72, 0xb08a2d47b340cf7e, 0x3aef38e7bc1cca95, 0xfd23a87a494a8999, 0xf786f837ff5a7a1e, 0x304a68aa0a0c3912, 0xe2cc58ac937b9d10, 0x2500c831662dde1c, 0x2fa5987cd03d2d9b, 0xe86908e1256b6e97, 0xc859199a4b38530c, 0x0f958907be6e1000, 0x0530d94a087ee387, 0xc2fc49d7fd28a08b, 0x107a79d1645f0489, 0xd7b6e94c91094785, 0xdd13b9012719b402, 0x1adf299cd24ff70e, 0x9d739bf7fbbfcf34, 0x5abf0b6a0ee98c38, 0x501a5b27b8f97fbf, 0x97d6cbba4daf3cb3, 0x4550fbbcd4d898b1, 0x829c6b21218edbbd, 0x88393b6c979e283a, 0x4ff5abf162c86b36, 0x6fc5ba8a0c9b56ad, 0xa8092a17f9cd15a1, 0xa2ac7a5a4fdde626, 0x6560eac7ba8ba52a, 0xb7e6dac123fc0128, 0x702a4a5cd6aa4224, 0x7a8f1a1160bab1a3, 0xbd438a8c95ecf2af, 0x2cb5d0bad7e88ce6, 0xeb79402722becfea, 0xe1dc106a94ae3c6d, 0x261080f761f87f61, 0xf496b0f1f88fdb63, 0x335a206c0dd9986f, 0x39ff7021bbc96be8, 0xfe33e0bc4e9f28e4, 0xde03f1c720cc157f, 0x19cf615ad59a5673, 0x136a3117638aa5f4, 0xd4a6a18a96dce6f8, 0x0620918c0fab42fa, 0xc1ec0111fafd01f6, 0xcb49515c4cedf271, 0x0c85c1c1b9bbb17d, 0x8b2973aa904b8947, 0x4ce5e337651dca4b, 0x4640b37ad30d39cc, 0x818c23e7265b7ac0, 0x530a13e1bf2cdec2, 0x94c6837c4a7a9dce, 0x9e63d331fc6a6e49, 0x59af43ac093c2d45, 0x799f52d7676f10de, 0xbe53c24a923953d2, 0xb4f692072429a055, 0x733a029ad17fe359, 0xa1bc329c4808475b, 0x6670a201bd5e0457, 0x6cd5f24c0b4ef7d0, 0xab1962d1fe18b4dc, 0x217c7771f144b137, 0xe6b0e7ec0412f23b, 0xec15b7a1b20201bc, 0x2bd9273c475442b0, 0xf95f173ade23e6b2, 0x3e9387a72b75a5be, 0x3436d7ea9d655639, 0xf3fa477768331535, 0xd3ca560c066028ae, 0x1406c691f3366ba2, 0x1ea396dc45269825, 0xd96f0641b070db29, 0x0be9364729077f2b, 0xcc25a6dadc513c27, 0xc680f6976a41cfa0, 0x014c660a9f178cac, 0x86e0d461b6e7b496, 0x412c44fc43b1f79a, 0x4b8914b1f5a1041d, 0x8c45842c00f74711, 0x5ec3b42a9980e313, 0x990f24b76cd6a01f, 0x93aa74fadac65398, 0x5466e4672f901094, 0x7456f51c41c32d0f, 0xb39a6581b4956e03, 0xb93f35cc02859d84, 0x7ef3a551f7d3de88, 0xac7595576ea47a8a, 0x6bb905ca9bf23986, 0x611c55872de2ca01, 0xa6d0c51ad8b4890d, ], [ 0x0000000000000000, 0x6e4d3e593561ee88, 0xdc9a7cb26ac3dd10, 0xb2d742eb5fa23398, 0xfbc4188f7c6d8cb3, 0x958926d6490c623b, 0x275e643d16ae51a3, 0x49135a6423cfbf2b, 0xb578d0f551312ff5, 0xdb35eeac6450c17d, 0x69e2ac473bf2f2e5, 0x07af921e0e931c6d, 0x4ebcc87a2d5ca346, 0x20f1f623183d4dce, 0x9226b4c8479f7e56, 0xfc6b8a9172fe90de, 0x280140010b886979, 0x464c7e583ee987f1, 0xf49b3cb3614bb469, 0x9ad602ea542a5ae1, 0xd3c5588e77e5e5ca, 0xbd8866d742840b42, 0x0f5f243c1d2638da, 0x61121a652847d652, 0x9d7990f45ab9468c, 0xf334aead6fd8a804, 0x41e3ec46307a9b9c, 0x2faed21f051b7514, 0x66bd887b26d4ca3f, 0x08f0b62213b524b7, 0xba27f4c94c17172f, 0xd46aca907976f9a7, 0x500280021710d2f2, 0x3e4fbe5b22713c7a, 0x8c98fcb07dd30fe2, 0xe2d5c2e948b2e16a, 0xabc6988d6b7d5e41, 0xc58ba6d45e1cb0c9, 0x775ce43f01be8351, 0x1911da6634df6dd9, 0xe57a50f74621fd07, 0x8b376eae7340138f, 0x39e02c452ce22017, 0x57ad121c1983ce9f, 0x1ebe48783a4c71b4, 0x70f376210f2d9f3c, 0xc22434ca508faca4, 0xac690a9365ee422c, 0x7803c0031c98bb8b, 0x164efe5a29f95503, 0xa499bcb1765b669b, 0xcad482e8433a8813, 0x83c7d88c60f53738, 0xed8ae6d55594d9b0, 0x5f5da43e0a36ea28, 0x31109a673f5704a0, 0xcd7b10f64da9947e, 0xa3362eaf78c87af6, 0x11e16c44276a496e, 0x7fac521d120ba7e6, 0x36bf087931c418cd, 0x58f2362004a5f645, 0xea2574cb5b07c5dd, 0x84684a926e662b55, 0xa00500042e21a5e4, 0xce483e5d1b404b6c, 0x7c9f7cb644e278f4, 0x12d242ef7183967c, 0x5bc1188b524c2957, 0x358c26d2672dc7df, 0x875b6439388ff447, 0xe9165a600dee1acf, 0x157dd0f17f108a11, 0x7b30eea84a716499, 0xc9e7ac4315d35701, 0xa7aa921a20b2b989, 0xeeb9c87e037d06a2, 0x80f4f627361ce82a, 0x3223b4cc69bedbb2, 0x5c6e8a955cdf353a, 0x8804400525a9cc9d, 0xe6497e5c10c82215, 0x549e3cb74f6a118d, 0x3ad302ee7a0bff05, 0x73c0588a59c4402e, 0x1d8d66d36ca5aea6, 0xaf5a243833079d3e, 0xc1171a61066673b6, 0x3d7c90f07498e368, 0x5331aea941f90de0, 0xe1e6ec421e5b3e78, 0x8fabd21b2b3ad0f0, 0xc6b8887f08f56fdb, 0xa8f5b6263d948153, 0x1a22f4cd6236b2cb, 0x746fca9457575c43, 0xf007800639317716, 0x9e4abe5f0c50999e, 0x2c9dfcb453f2aa06, 0x42d0c2ed6693448e, 0x0bc39889455cfba5, 0x658ea6d0703d152d, 0xd759e43b2f9f26b5, 0xb914da621afec83d, 0x457f50f3680058e3, 0x2b326eaa5d61b66b, 0x99e52c4102c385f3, 0xf7a8121837a26b7b, 0xbebb487c146dd450, 0xd0f67625210c3ad8, 0x622134ce7eae0940, 0x0c6c0a974bcfe7c8, 0xd806c00732b91e6f, 0xb64bfe5e07d8f0e7, 0x049cbcb5587ac37f, 0x6ad182ec6d1b2df7, 0x23c2d8884ed492dc, 0x4d8fe6d17bb57c54, 0xff58a43a24174fcc, 0x91159a631176a144, 0x6d7e10f26388319a, 0x03332eab56e9df12, 0xb1e46c40094bec8a, 0xdfa952193c2a0202, 0x96ba087d1fe5bd29, 0xf8f736242a8453a1, 0x4a2074cf75266039, 0x246d4a9640478eb1, 0x02fae1e3f5a97d5b, 0x6cb7dfbac0c893d3, 0xde609d519f6aa04b, 0xb02da308aa0b4ec3, 0xf93ef96c89c4f1e8, 0x9773c735bca51f60, 0x25a485dee3072cf8, 0x4be9bb87d666c270, 0xb7823116a49852ae, 0xd9cf0f4f91f9bc26, 0x6b184da4ce5b8fbe, 0x055573fdfb3a6136, 0x4c462999d8f5de1d, 0x220b17c0ed943095, 0x90dc552bb236030d, 0xfe916b728757ed85, 0x2afba1e2fe211422, 0x44b69fbbcb40faaa, 0xf661dd5094e2c932, 0x982ce309a18327ba, 0xd13fb96d824c9891, 0xbf728734b72d7619, 0x0da5c5dfe88f4581, 0x63e8fb86ddeeab09, 0x9f837117af103bd7, 0xf1ce4f4e9a71d55f, 0x43190da5c5d3e6c7, 0x2d5433fcf0b2084f, 0x64476998d37db764, 0x0a0a57c1e61c59ec, 0xb8dd152ab9be6a74, 0xd6902b738cdf84fc, 0x52f861e1e2b9afa9, 0x3cb55fb8d7d84121, 0x8e621d53887a72b9, 0xe02f230abd1b9c31, 0xa93c796e9ed4231a, 0xc7714737abb5cd92, 0x75a605dcf417fe0a, 0x1beb3b85c1761082, 0xe780b114b388805c, 0x89cd8f4d86e96ed4, 0x3b1acda6d94b5d4c, 0x5557f3ffec2ab3c4, 0x1c44a99bcfe50cef, 0x720997c2fa84e267, 0xc0ded529a526d1ff, 0xae93eb7090473f77, 0x7af921e0e931c6d0, 0x14b41fb9dc502858, 0xa6635d5283f21bc0, 0xc82e630bb693f548, 0x813d396f955c4a63, 0xef700736a03da4eb, 0x5da745ddff9f9773, 0x33ea7b84cafe79fb, 0xcf81f115b800e925, 0xa1cccf4c8d6107ad, 0x131b8da7d2c33435, 0x7d56b3fee7a2dabd, 0x3445e99ac46d6596, 0x5a08d7c3f10c8b1e, 0xe8df9528aeaeb886, 0x8692ab719bcf560e, 0xa2ffe1e7db88d8bf, 0xccb2dfbeeee93637, 0x7e659d55b14b05af, 0x1028a30c842aeb27, 0x593bf968a7e5540c, 0x3776c7319284ba84, 0x85a185dacd26891c, 0xebecbb83f8476794, 0x178731128ab9f74a, 0x79ca0f4bbfd819c2, 0xcb1d4da0e07a2a5a, 0xa55073f9d51bc4d2, 0xec43299df6d47bf9, 0x820e17c4c3b59571, 0x30d9552f9c17a6e9, 0x5e946b76a9764861, 0x8afea1e6d000b1c6, 0xe4b39fbfe5615f4e, 0x5664dd54bac36cd6, 0x3829e30d8fa2825e, 0x713ab969ac6d3d75, 0x1f778730990cd3fd, 0xada0c5dbc6aee065, 0xc3edfb82f3cf0eed, 0x3f86711381319e33, 0x51cb4f4ab45070bb, 0xe31c0da1ebf24323, 0x8d5133f8de93adab, 0xc442699cfd5c1280, 0xaa0f57c5c83dfc08, 0x18d8152e979fcf90, 0x76952b77a2fe2118, 0xf2fd61e5cc980a4d, 0x9cb05fbcf9f9e4c5, 0x2e671d57a65bd75d, 0x402a230e933a39d5, 0x0939796ab0f586fe, 0x6774473385946876, 0xd5a305d8da365bee, 0xbbee3b81ef57b566, 0x4785b1109da925b8, 0x29c88f49a8c8cb30, 0x9b1fcda2f76af8a8, 0xf552f3fbc20b1620, 0xbc41a99fe1c4a90b, 0xd20c97c6d4a54783, 0x60dbd52d8b07741b, 0x0e96eb74be669a93, 0xdafc21e4c7106334, 0xb4b11fbdf2718dbc, 0x06665d56add3be24, 0x682b630f98b250ac, 0x2138396bbb7def87, 0x4f7507328e1c010f, 0xfda245d9d1be3297, 0x93ef7b80e4dfdc1f, 0x6f84f11196214cc1, 0x01c9cf48a340a249, 0xb31e8da3fce291d1, 0xdd53b3fac9837f59, 0x9440e99eea4cc072, 0xfa0dd7c7df2d2efa, 0x48da952c808f1d62, 0x2697ab75b5eef3ea, ], [ 0x0000000000000000, 0x05f5c3c7eb52fab6, 0x0beb878fd6a5f56c, 0x0e1e44483df70fda, 0x17d70f1fad4bead8, 0x1222ccd84619106e, 0x1c3c88907bee1fb4, 0x19c94b5790bce502, 0x2fae1e3f5a97d5b0, 0x2a5bddf8b1c52f06, 0x244599b08c3220dc, 0x21b05a776760da6a, 0x38791120f7dc3f68, 0x3d8cd2e71c8ec5de, 0x339296af2179ca04, 0x36675568ca2b30b2, 0x5f5c3c7eb52fab60, 0x5aa9ffb95e7d51d6, 0x54b7bbf1638a5e0c, 0x5142783688d8a4ba, 0x488b3361186441b8, 0x4d7ef0a6f336bb0e, 0x4360b4eecec1b4d4, 0x4695772925934e62, 0x70f22241efb87ed0, 0x7507e18604ea8466, 0x7b19a5ce391d8bbc, 0x7eec6609d24f710a, 0x67252d5e42f39408, 0x62d0ee99a9a16ebe, 0x6cceaad194566164, 0x693b69167f049bd2, 0xbeb878fd6a5f56c0, 0xbb4dbb3a810dac76, 0xb553ff72bcfaa3ac, 0xb0a63cb557a8591a, 0xa96f77e2c714bc18, 0xac9ab4252c4646ae, 0xa284f06d11b14974, 0xa77133aafae3b3c2, 0x911666c230c88370, 0x94e3a505db9a79c6, 0x9afde14de66d761c, 0x9f08228a0d3f8caa, 0x86c169dd9d8369a8, 0x8334aa1a76d1931e, 0x8d2aee524b269cc4, 0x88df2d95a0746672, 0xe1e44483df70fda0, 0xe411874434220716, 0xea0fc30c09d508cc, 0xeffa00cbe287f27a, 0xf6334b9c723b1778, 0xf3c6885b9969edce, 0xfdd8cc13a49ee214, 0xf82d0fd44fcc18a2, 0xce4a5abc85e72810, 0xcbbf997b6eb5d2a6, 0xc5a1dd335342dd7c, 0xc0541ef4b81027ca, 0xd99d55a328acc2c8, 0xdc689664c3fe387e, 0xd276d22cfe0937a4, 0xd78311eb155bcd12, 0x3f8010117d549b13, 0x3a75d3d6960661a5, 0x346b979eabf16e7f, 0x319e545940a394c9, 0x28571f0ed01f71cb, 0x2da2dcc93b4d8b7d, 0x23bc988106ba84a7, 0x26495b46ede87e11, 0x102e0e2e27c34ea3, 0x15dbcde9cc91b415, 0x1bc589a1f166bbcf, 0x1e304a661a344179, 0x07f901318a88a47b, 0x020cc2f661da5ecd, 0x0c1286be5c2d5117, 0x09e74579b77faba1, 0x60dc2c6fc87b3073, 0x6529efa82329cac5, 0x6b37abe01edec51f, 0x6ec26827f58c3fa9, 0x770b23706530daab, 0x72fee0b78e62201d, 0x7ce0a4ffb3952fc7, 0x7915673858c7d571, 0x4f72325092ece5c3, 0x4a87f19779be1f75, 0x4499b5df444910af, 0x416c7618af1bea19, 0x58a53d4f3fa70f1b, 0x5d50fe88d4f5f5ad, 0x534ebac0e902fa77, 0x56bb7907025000c1, 0x813868ec170bcdd3, 0x84cdab2bfc593765, 0x8ad3ef63c1ae38bf, 0x8f262ca42afcc209, 0x96ef67f3ba40270b, 0x931aa4345112ddbd, 0x9d04e07c6ce5d267, 0x98f123bb87b728d1, 0xae9676d34d9c1863, 0xab63b514a6cee2d5, 0xa57df15c9b39ed0f, 0xa088329b706b17b9, 0xb94179cce0d7f2bb, 0xbcb4ba0b0b85080d, 0xb2aafe43367207d7, 0xb75f3d84dd20fd61, 0xde645492a22466b3, 0xdb91975549769c05, 0xd58fd31d748193df, 0xd07a10da9fd36969, 0xc9b35b8d0f6f8c6b, 0xcc46984ae43d76dd, 0xc258dc02d9ca7907, 0xc7ad1fc5329883b1, 0xf1ca4aadf8b3b303, 0xf43f896a13e149b5, 0xfa21cd222e16466f, 0xffd40ee5c544bcd9, 0xe61d45b255f859db, 0xe3e88675beaaa36d, 0xedf6c23d835dacb7, 0xe80301fa680f5601, 0x7f002022faa93626, 0x7af5e3e511fbcc90, 0x74eba7ad2c0cc34a, 0x711e646ac75e39fc, 0x68d72f3d57e2dcfe, 0x6d22ecfabcb02648, 0x633ca8b281472992, 0x66c96b756a15d324, 0x50ae3e1da03ee396, 0x555bfdda4b6c1920, 0x5b45b992769b16fa, 0x5eb07a559dc9ec4c, 0x477931020d75094e, 0x428cf2c5e627f3f8, 0x4c92b68ddbd0fc22, 0x4967754a30820694, 0x205c1c5c4f869d46, 0x25a9df9ba4d467f0, 0x2bb79bd39923682a, 0x2e4258147271929c, 0x378b1343e2cd779e, 0x327ed084099f8d28, 0x3c6094cc346882f2, 0x3995570bdf3a7844, 0x0ff20263151148f6, 0x0a07c1a4fe43b240, 0x041985ecc3b4bd9a, 0x01ec462b28e6472c, 0x18250d7cb85aa22e, 0x1dd0cebb53085898, 0x13ce8af36eff5742, 0x163b493485adadf4, 0xc1b858df90f660e6, 0xc44d9b187ba49a50, 0xca53df504653958a, 0xcfa61c97ad016f3c, 0xd66f57c03dbd8a3e, 0xd39a9407d6ef7088, 0xdd84d04feb187f52, 0xd8711388004a85e4, 0xee1646e0ca61b556, 0xebe3852721334fe0, 0xe5fdc16f1cc4403a, 0xe00802a8f796ba8c, 0xf9c149ff672a5f8e, 0xfc348a388c78a538, 0xf22ace70b18faae2, 0xf7df0db75add5054, 0x9ee464a125d9cb86, 0x9b11a766ce8b3130, 0x950fe32ef37c3eea, 0x90fa20e9182ec45c, 0x89336bbe8892215e, 0x8cc6a87963c0dbe8, 0x82d8ec315e37d432, 0x872d2ff6b5652e84, 0xb14a7a9e7f4e1e36, 0xb4bfb959941ce480, 0xbaa1fd11a9ebeb5a, 0xbf543ed642b911ec, 0xa69d7581d205f4ee, 0xa368b64639570e58, 0xad76f20e04a00182, 0xa88331c9eff2fb34, 0x4080303387fdad35, 0x4575f3f46caf5783, 0x4b6bb7bc51585859, 0x4e9e747bba0aa2ef, 0x57573f2c2ab647ed, 0x52a2fcebc1e4bd5b, 0x5cbcb8a3fc13b281, 0x59497b6417414837, 0x6f2e2e0cdd6a7885, 0x6adbedcb36388233, 0x64c5a9830bcf8de9, 0x61306a44e09d775f, 0x78f921137021925d, 0x7d0ce2d49b7368eb, 0x7312a69ca6846731, 0x76e7655b4dd69d87, 0x1fdc0c4d32d20655, 0x1a29cf8ad980fce3, 0x14378bc2e477f339, 0x11c248050f25098f, 0x080b03529f99ec8d, 0x0dfec09574cb163b, 0x03e084dd493c19e1, 0x0615471aa26ee357, 0x307212726845d3e5, 0x3587d1b583172953, 0x3b9995fdbee02689, 0x3e6c563a55b2dc3f, 0x27a51d6dc50e393d, 0x2250deaa2e5cc38b, 0x2c4e9ae213abcc51, 0x29bb5925f8f936e7, 0xfe3848ceeda2fbf5, 0xfbcd8b0906f00143, 0xf5d3cf413b070e99, 0xf0260c86d055f42f, 0xe9ef47d140e9112d, 0xec1a8416abbbeb9b, 0xe204c05e964ce441, 0xe7f103997d1e1ef7, 0xd19656f1b7352e45, 0xd46395365c67d4f3, 0xda7dd17e6190db29, 0xdf8812b98ac2219f, 0xc64159ee1a7ec49d, 0xc3b49a29f12c3e2b, 0xcdaade61ccdb31f1, 0xc85f1da62789cb47, 0xa16474b0588d5095, 0xa491b777b3dfaa23, 0xaa8ff33f8e28a5f9, 0xaf7a30f8657a5f4f, 0xb6b37baff5c6ba4d, 0xb346b8681e9440fb, 0xbd58fc2023634f21, 0xb8ad3fe7c831b597, 0x8eca6a8f021a8525, 0x8b3fa948e9487f93, 0x8521ed00d4bf7049, 0x80d42ec73fed8aff, 0x991d6590af516ffd, 0x9ce8a6574403954b, 0x92f6e21f79f49a91, 0x970321d892a66027, ], [ 0x0000000000000000, 0xfe004045f5526c4c, 0xbef06160434eee0b, 0x40f02125b61c8247, 0x3f10232b2f77ea85, 0xc110636eda2586c9, 0x81e0424b6c39048e, 0x7fe0020e996b68c2, 0x7e2046565eefd50a, 0x80200613abbdb946, 0xc0d027361da13b01, 0x3ed06773e8f3574d, 0x4130657d71983f8f, 0xbf30253884ca53c3, 0xffc0041d32d6d184, 0x01c04458c784bdc8, 0xfc408cacbddfaa14, 0x0240cce9488dc658, 0x42b0edccfe91441f, 0xbcb0ad890bc32853, 0xc350af8792a84091, 0x3d50efc267fa2cdd, 0x7da0cee7d1e6ae9a, 0x83a08ea224b4c2d6, 0x8260cafae3307f1e, 0x7c608abf16621352, 0x3c90ab9aa07e9115, 0xc290ebdf552cfd59, 0xbd70e9d1cc47959b, 0x4370a9943915f9d7, 0x038088b18f097b90, 0xfd80c8f47a5b17dc, 0xba71f8b2d25562bb, 0x4471b8f727070ef7, 0x048199d2911b8cb0, 0xfa81d9976449e0fc, 0x8561db99fd22883e, 0x7b619bdc0870e472, 0x3b91baf9be6c6635, 0xc591fabc4b3e0a79, 0xc451bee48cbab7b1, 0x3a51fea179e8dbfd, 0x7aa1df84cff459ba, 0x84a19fc13aa635f6, 0xfb419dcfa3cd5d34, 0x0541dd8a569f3178, 0x45b1fcafe083b33f, 0xbbb1bcea15d1df73, 0x4631741e6f8ac8af, 0xb831345b9ad8a4e3, 0xf8c1157e2cc426a4, 0x06c1553bd9964ae8, 0x7921573540fd222a, 0x87211770b5af4e66, 0xc7d1365503b3cc21, 0x39d17610f6e1a06d, 0x3811324831651da5, 0xc611720dc43771e9, 0x86e15328722bf3ae, 0x78e1136d87799fe2, 0x070111631e12f720, 0xf9015126eb409b6c, 0xb9f170035d5c192b, 0x47f13046a80e7567, 0x3613108e0d40f3e5, 0xc81350cbf8129fa9, 0x88e371ee4e0e1dee, 0x76e331abbb5c71a2, 0x090333a522371960, 0xf70373e0d765752c, 0xb7f352c56179f76b, 0x49f31280942b9b27, 0x483356d853af26ef, 0xb633169da6fd4aa3, 0xf6c337b810e1c8e4, 0x08c377fde5b3a4a8, 0x772375f37cd8cc6a, 0x892335b6898aa026, 0xc9d314933f962261, 0x37d354d6cac44e2d, 0xca539c22b09f59f1, 0x3453dc6745cd35bd, 0x74a3fd42f3d1b7fa, 0x8aa3bd070683dbb6, 0xf543bf099fe8b374, 0x0b43ff4c6abadf38, 0x4bb3de69dca65d7f, 0xb5b39e2c29f43133, 0xb473da74ee708cfb, 0x4a739a311b22e0b7, 0x0a83bb14ad3e62f0, 0xf483fb51586c0ebc, 0x8b63f95fc107667e, 0x7563b91a34550a32, 0x3593983f82498875, 0xcb93d87a771be439, 0x8c62e83cdf15915e, 0x7262a8792a47fd12, 0x3292895c9c5b7f55, 0xcc92c91969091319, 0xb372cb17f0627bdb, 0x4d728b5205301797, 0x0d82aa77b32c95d0, 0xf382ea32467ef99c, 0xf242ae6a81fa4454, 0x0c42ee2f74a82818, 0x4cb2cf0ac2b4aa5f, 0xb2b28f4f37e6c613, 0xcd528d41ae8daed1, 0x3352cd045bdfc29d, 0x73a2ec21edc340da, 0x8da2ac6418912c96, 0x7022649062ca3b4a, 0x8e2224d597985706, 0xced205f02184d541, 0x30d245b5d4d6b90d, 0x4f3247bb4dbdd1cf, 0xb13207feb8efbd83, 0xf1c226db0ef33fc4, 0x0fc2669efba15388, 0x0e0222c63c25ee40, 0xf0026283c977820c, 0xb0f243a67f6b004b, 0x4ef203e38a396c07, 0x311201ed135204c5, 0xcf1241a8e6006889, 0x8fe2608d501ceace, 0x71e220c8a54e8682, 0x6c26211c1a81e7ca, 0x92266159efd38b86, 0xd2d6407c59cf09c1, 0x2cd60039ac9d658d, 0x5336023735f60d4f, 0xad364272c0a46103, 0xedc6635776b8e344, 0x13c6231283ea8f08, 0x1206674a446e32c0, 0xec06270fb13c5e8c, 0xacf6062a0720dccb, 0x52f6466ff272b087, 0x2d1644616b19d845, 0xd31604249e4bb409, 0x93e625012857364e, 0x6de66544dd055a02, 0x9066adb0a75e4dde, 0x6e66edf5520c2192, 0x2e96ccd0e410a3d5, 0xd0968c951142cf99, 0xaf768e9b8829a75b, 0x5176cede7d7bcb17, 0x1186effbcb674950, 0xef86afbe3e35251c, 0xee46ebe6f9b198d4, 0x1046aba30ce3f498, 0x50b68a86baff76df, 0xaeb6cac34fad1a93, 0xd156c8cdd6c67251, 0x2f56888823941e1d, 0x6fa6a9ad95889c5a, 0x91a6e9e860daf016, 0xd657d9aec8d48571, 0x285799eb3d86e93d, 0x68a7b8ce8b9a6b7a, 0x96a7f88b7ec80736, 0xe947fa85e7a36ff4, 0x1747bac012f103b8, 0x57b79be5a4ed81ff, 0xa9b7dba051bfedb3, 0xa8779ff8963b507b, 0x5677dfbd63693c37, 0x1687fe98d575be70, 0xe887bedd2027d23c, 0x9767bcd3b94cbafe, 0x6967fc964c1ed6b2, 0x2997ddb3fa0254f5, 0xd7979df60f5038b9, 0x2a175502750b2f65, 0xd417154780594329, 0x94e734623645c16e, 0x6ae77427c317ad22, 0x150776295a7cc5e0, 0xeb07366caf2ea9ac, 0xabf7174919322beb, 0x55f7570cec6047a7, 0x543713542be4fa6f, 0xaa375311deb69623, 0xeac7723468aa1464, 0x14c732719df87828, 0x6b27307f049310ea, 0x9527703af1c17ca6, 0xd5d7511f47ddfee1, 0x2bd7115ab28f92ad, 0x5a35319217c1142f, 0xa43571d7e2937863, 0xe4c550f2548ffa24, 0x1ac510b7a1dd9668, 0x652512b938b6feaa, 0x9b2552fccde492e6, 0xdbd573d97bf810a1, 0x25d5339c8eaa7ced, 0x241577c4492ec125, 0xda153781bc7cad69, 0x9ae516a40a602f2e, 0x64e556e1ff324362, 0x1b0554ef66592ba0, 0xe50514aa930b47ec, 0xa5f5358f2517c5ab, 0x5bf575cad045a9e7, 0xa675bd3eaa1ebe3b, 0x5875fd7b5f4cd277, 0x1885dc5ee9505030, 0xe6859c1b1c023c7c, 0x99659e15856954be, 0x6765de50703b38f2, 0x2795ff75c627bab5, 0xd995bf303375d6f9, 0xd855fb68f4f16b31, 0x2655bb2d01a3077d, 0x66a59a08b7bf853a, 0x98a5da4d42ede976, 0xe745d843db8681b4, 0x194598062ed4edf8, 0x59b5b92398c86fbf, 0xa7b5f9666d9a03f3, 0xe044c920c5947694, 0x1e44896530c61ad8, 0x5eb4a84086da989f, 0xa0b4e8057388f4d3, 0xdf54ea0beae39c11, 0x2154aa4e1fb1f05d, 0x61a48b6ba9ad721a, 0x9fa4cb2e5cff1e56, 0x9e648f769b7ba39e, 0x6064cf336e29cfd2, 0x2094ee16d8354d95, 0xde94ae532d6721d9, 0xa174ac5db40c491b, 0x5f74ec18415e2557, 0x1f84cd3df742a710, 0xe1848d780210cb5c, 0x1c04458c784bdc80, 0xe20405c98d19b0cc, 0xa2f424ec3b05328b, 0x5cf464a9ce575ec7, 0x231466a7573c3605, 0xdd1426e2a26e5a49, 0x9de407c71472d80e, 0x63e44782e120b442, 0x622403da26a4098a, 0x9c24439fd3f665c6, 0xdcd462ba65eae781, 0x22d422ff90b88bcd, 0x5d3420f109d3e30f, 0xa33460b4fc818f43, 0xe3c441914a9d0d04, 0x1dc401d4bfcf6148, ], [ 0x0000000000000000, 0xd84c42383503cf94, 0xf268659bc3eda9bb, 0x2a2427a3f6ee662f, 0xa6202adc2e3165e5, 0x7e6c68e41b32aa71, 0x54484f47eddccc5e, 0x8c040d7fd8df03ca, 0x0eb0b453f588fd59, 0xd6fcf66bc08b32cd, 0xfcd8d1c8366554e2, 0x249493f003669b76, 0xa8909e8fdbb998bc, 0x70dcdcb7eeba5728, 0x5af8fb1418543107, 0x82b4b92c2d57fe93, 0x1d6168a7eb11fab2, 0xc52d2a9fde123526, 0xef090d3c28fc5309, 0x37454f041dff9c9d, 0xbb41427bc5209f57, 0x630d0043f02350c3, 0x492927e006cd36ec, 0x916565d833cef978, 0x13d1dcf41e9907eb, 0xcb9d9ecc2b9ac87f, 0xe1b9b96fdd74ae50, 0x39f5fb57e87761c4, 0xb5f1f62830a8620e, 0x6dbdb41005abad9a, 0x479993b3f345cbb5, 0x9fd5d18bc6460421, 0x3ac2d14fd623f564, 0xe28e9377e3203af0, 0xc8aab4d415ce5cdf, 0x10e6f6ec20cd934b, 0x9ce2fb93f8129081, 0x44aeb9abcd115f15, 0x6e8a9e083bff393a, 0xb6c6dc300efcf6ae, 0x3472651c23ab083d, 0xec3e272416a8c7a9, 0xc61a0087e046a186, 0x1e5642bfd5456e12, 0x92524fc00d9a6dd8, 0x4a1e0df83899a24c, 0x603a2a5bce77c463, 0xb8766863fb740bf7, 0x27a3b9e83d320fd6, 0xffeffbd00831c042, 0xd5cbdc73fedfa66d, 0x0d879e4bcbdc69f9, 0x8183933413036a33, 0x59cfd10c2600a5a7, 0x73ebf6afd0eec388, 0xaba7b497e5ed0c1c, 0x29130dbbc8baf28f, 0xf15f4f83fdb93d1b, 0xdb7b68200b575b34, 0x03372a183e5494a0, 0x8f332767e68b976a, 0x577f655fd38858fe, 0x7d5b42fc25663ed1, 0xa51700c41065f145, 0x7585a29fac47eac8, 0xadc9e0a79944255c, 0x87edc7046faa4373, 0x5fa1853c5aa98ce7, 0xd3a5884382768f2d, 0x0be9ca7bb77540b9, 0x21cdedd8419b2696, 0xf981afe07498e902, 0x7b3516cc59cf1791, 0xa37954f46cccd805, 0x895d73579a22be2a, 0x5111316faf2171be, 0xdd153c1077fe7274, 0x05597e2842fdbde0, 0x2f7d598bb413dbcf, 0xf7311bb38110145b, 0x68e4ca384756107a, 0xb0a888007255dfee, 0x9a8cafa384bbb9c1, 0x42c0ed9bb1b87655, 0xcec4e0e46967759f, 0x1688a2dc5c64ba0b, 0x3cac857faa8adc24, 0xe4e0c7479f8913b0, 0x66547e6bb2deed23, 0xbe183c5387dd22b7, 0x943c1bf071334498, 0x4c7059c844308b0c, 0xc07454b79cef88c6, 0x1838168fa9ec4752, 0x321c312c5f02217d, 0xea5073146a01eee9, 0x4f4773d07a641fac, 0x970b31e84f67d038, 0xbd2f164bb989b617, 0x656354738c8a7983, 0xe967590c54557a49, 0x312b1b346156b5dd, 0x1b0f3c9797b8d3f2, 0xc3437eafa2bb1c66, 0x41f7c7838fece2f5, 0x99bb85bbbaef2d61, 0xb39fa2184c014b4e, 0x6bd3e020790284da, 0xe7d7ed5fa1dd8710, 0x3f9baf6794de4884, 0x15bf88c462302eab, 0xcdf3cafc5733e13f, 0x52261b779175e51e, 0x8a6a594fa4762a8a, 0xa04e7eec52984ca5, 0x78023cd4679b8331, 0xf40631abbf4480fb, 0x2c4a73938a474f6f, 0x066e54307ca92940, 0xde22160849aae6d4, 0x5c96af2464fd1847, 0x84daed1c51fed7d3, 0xaefecabfa710b1fc, 0x76b2888792137e68, 0xfab685f84acc7da2, 0x22fac7c07fcfb236, 0x08dee0638921d419, 0xd092a25bbc221b8d, 0xeb0b453f588fd590, 0x334707076d8c1a04, 0x196320a49b627c2b, 0xc12f629cae61b3bf, 0x4d2b6fe376beb075, 0x95672ddb43bd7fe1, 0xbf430a78b55319ce, 0x670f48408050d65a, 0xe5bbf16cad0728c9, 0x3df7b3549804e75d, 0x17d394f76eea8172, 0xcf9fd6cf5be94ee6, 0x439bdbb083364d2c, 0x9bd79988b63582b8, 0xb1f3be2b40dbe497, 0x69bffc1375d82b03, 0xf66a2d98b39e2f22, 0x2e266fa0869de0b6, 0x0402480370738699, 0xdc4e0a3b4570490d, 0x504a07449daf4ac7, 0x8806457ca8ac8553, 0xa22262df5e42e37c, 0x7a6e20e76b412ce8, 0xf8da99cb4616d27b, 0x2096dbf373151def, 0x0ab2fc5085fb7bc0, 0xd2febe68b0f8b454, 0x5efab3176827b79e, 0x86b6f12f5d24780a, 0xac92d68cabca1e25, 0x74de94b49ec9d1b1, 0xd1c994708eac20f4, 0x0985d648bbafef60, 0x23a1f1eb4d41894f, 0xfbedb3d3784246db, 0x77e9beaca09d4511, 0xafa5fc94959e8a85, 0x8581db376370ecaa, 0x5dcd990f5673233e, 0xdf7920237b24ddad, 0x0735621b4e271239, 0x2d1145b8b8c97416, 0xf55d07808dcabb82, 0x79590aff5515b848, 0xa11548c7601677dc, 0x8b316f6496f811f3, 0x537d2d5ca3fbde67, 0xcca8fcd765bdda46, 0x14e4beef50be15d2, 0x3ec0994ca65073fd, 0xe68cdb749353bc69, 0x6a88d60b4b8cbfa3, 0xb2c494337e8f7037, 0x98e0b39088611618, 0x40acf1a8bd62d98c, 0xc21848849035271f, 0x1a540abca536e88b, 0x30702d1f53d88ea4, 0xe83c6f2766db4130, 0x64386258be0442fa, 0xbc7420608b078d6e, 0x965007c37de9eb41, 0x4e1c45fb48ea24d5, 0x9e8ee7a0f4c83f58, 0x46c2a598c1cbf0cc, 0x6ce6823b372596e3, 0xb4aac00302265977, 0x38aecd7cdaf95abd, 0xe0e28f44effa9529, 0xcac6a8e71914f306, 0x128aeadf2c173c92, 0x903e53f30140c201, 0x487211cb34430d95, 0x62563668c2ad6bba, 0xba1a7450f7aea42e, 0x361e792f2f71a7e4, 0xee523b171a726870, 0xc4761cb4ec9c0e5f, 0x1c3a5e8cd99fc1cb, 0x83ef8f071fd9c5ea, 0x5ba3cd3f2ada0a7e, 0x7187ea9cdc346c51, 0xa9cba8a4e937a3c5, 0x25cfa5db31e8a00f, 0xfd83e7e304eb6f9b, 0xd7a7c040f20509b4, 0x0feb8278c706c620, 0x8d5f3b54ea5138b3, 0x5513796cdf52f727, 0x7f375ecf29bc9108, 0xa77b1cf71cbf5e9c, 0x2b7f1188c4605d56, 0xf33353b0f16392c2, 0xd9177413078df4ed, 0x015b362b328e3b79, 0xa44c36ef22ebca3c, 0x7c0074d717e805a8, 0x56245374e1066387, 0x8e68114cd405ac13, 0x026c1c330cdaafd9, 0xda205e0b39d9604d, 0xf00479a8cf370662, 0x28483b90fa34c9f6, 0xaafc82bcd7633765, 0x72b0c084e260f8f1, 0x5894e727148e9ede, 0x80d8a51f218d514a, 0x0cdca860f9525280, 0xd490ea58cc519d14, 0xfeb4cdfb3abffb3b, 0x26f88fc30fbc34af, 0xb92d5e48c9fa308e, 0x61611c70fcf9ff1a, 0x4b453bd30a179935, 0x930979eb3f1456a1, 0x1f0d7494e7cb556b, 0xc74136acd2c89aff, 0xed65110f2426fcd0, 0x3529533711253344, 0xb79dea1b3c72cdd7, 0x6fd1a82309710243, 0x45f58f80ff9f646c, 0x9db9cdb8ca9cabf8, 0x11bdc0c71243a832, 0xc9f182ff274067a6, 0xe3d5a55cd1ae0189, 0x3b99e764e4adce1d, ], [ 0x0000000000000000, 0x94e66b9518f59db3, 0x6b3c36c198010df5, 0xffda5d5480f49046, 0xd6786d8330021bea, 0x429e061628f78659, 0xbd445b42a803161f, 0x29a230d7b0f68bac, 0xee003aedc9ee0147, 0x7ae65178d11b9cf4, 0x853c0c2c51ef0cb2, 0x11da67b9491a9101, 0x3878576ef9ec1aad, 0xac9e3cfbe119871e, 0x534461af61ed1758, 0xc7a20a3a79188aeb, 0x9ef094303a36341d, 0x0a16ffa522c3a9ae, 0xf5cca2f1a23739e8, 0x612ac964bac2a45b, 0x4888f9b30a342ff7, 0xdc6e922612c1b244, 0x23b4cf7292352202, 0xb752a4e78ac0bfb1, 0x70f0aeddf3d8355a, 0xe416c548eb2da8e9, 0x1bcc981c6bd938af, 0x8f2af389732ca51c, 0xa688c35ec3da2eb0, 0x326ea8cbdb2fb303, 0xcdb4f59f5bdb2345, 0x59529e0a432ebef6, 0x7f11c98bdd865ea9, 0xebf7a21ec573c31a, 0x142dff4a4587535c, 0x80cb94df5d72ceef, 0xa969a408ed844543, 0x3d8fcf9df571d8f0, 0xc25592c9758548b6, 0x56b3f95c6d70d505, 0x9111f36614685fee, 0x05f798f30c9dc25d, 0xfa2dc5a78c69521b, 0x6ecbae32949ccfa8, 0x47699ee5246a4404, 0xd38ff5703c9fd9b7, 0x2c55a824bc6b49f1, 0xb8b3c3b1a49ed442, 0xe1e15dbbe7b06ab4, 0x7507362eff45f707, 0x8add6b7a7fb16741, 0x1e3b00ef6744faf2, 0x37993038d7b2715e, 0xa37f5badcf47eced, 0x5ca506f94fb37cab, 0xc8436d6c5746e118, 0x0fe167562e5e6bf3, 0x9b070cc336abf640, 0x64dd5197b65f6606, 0xf03b3a02aeaafbb5, 0xd9990ad51e5c7019, 0x4d7f614006a9edaa, 0xb2a53c14865d7dec, 0x264357819ea8e05f, 0xfe239317bb0cbd52, 0x6ac5f882a3f920e1, 0x951fa5d6230db0a7, 0x01f9ce433bf82d14, 0x285bfe948b0ea6b8, 0xbcbd950193fb3b0b, 0x4367c855130fab4d, 0xd781a3c00bfa36fe, 0x1023a9fa72e2bc15, 0x84c5c26f6a1721a6, 0x7b1f9f3beae3b1e0, 0xeff9f4aef2162c53, 0xc65bc47942e0a7ff, 0x52bdafec5a153a4c, 0xad67f2b8dae1aa0a, 0x3981992dc21437b9, 0x60d30727813a894f, 0xf4356cb299cf14fc, 0x0bef31e6193b84ba, 0x9f095a7301ce1909, 0xb6ab6aa4b13892a5, 0x224d0131a9cd0f16, 0xdd975c6529399f50, 0x497137f031cc02e3, 0x8ed33dca48d48808, 0x1a35565f502115bb, 0xe5ef0b0bd0d585fd, 0x7109609ec820184e, 0x58ab504978d693e2, 0xcc4d3bdc60230e51, 0x33976688e0d79e17, 0xa7710d1df82203a4, 0x81325a9c668ae3fb, 0x15d431097e7f7e48, 0xea0e6c5dfe8bee0e, 0x7ee807c8e67e73bd, 0x574a371f5688f811, 0xc3ac5c8a4e7d65a2, 0x3c7601dece89f5e4, 0xa8906a4bd67c6857, 0x6f326071af64e2bc, 0xfbd40be4b7917f0f, 0x040e56b03765ef49, 0x90e83d252f9072fa, 0xb94a0df29f66f956, 0x2dac6667879364e5, 0xd2763b330767f4a3, 0x469050a61f926910, 0x1fc2ceac5cbcd7e6, 0x8b24a53944494a55, 0x74fef86dc4bdda13, 0xe01893f8dc4847a0, 0xc9baa32f6cbecc0c, 0x5d5cc8ba744b51bf, 0xa28695eef4bfc1f9, 0x3660fe7bec4a5c4a, 0xf1c2f4419552d6a1, 0x65249fd48da74b12, 0x9afec2800d53db54, 0x0e18a91515a646e7, 0x27ba99c2a550cd4b, 0xb35cf257bda550f8, 0x4c86af033d51c0be, 0xd860c49625a45d0d, 0xbeb7c7c4dff34c37, 0x2a51ac51c706d184, 0xd58bf10547f241c2, 0x416d9a905f07dc71, 0x68cfaa47eff157dd, 0xfc29c1d2f704ca6e, 0x03f39c8677f05a28, 0x9715f7136f05c79b, 0x50b7fd29161d4d70, 0xc45196bc0ee8d0c3, 0x3b8bcbe88e1c4085, 0xaf6da07d96e9dd36, 0x86cf90aa261f569a, 0x1229fb3f3eeacb29, 0xedf3a66bbe1e5b6f, 0x7915cdfea6ebc6dc, 0x204753f4e5c5782a, 0xb4a13861fd30e599, 0x4b7b65357dc475df, 0xdf9d0ea06531e86c, 0xf63f3e77d5c763c0, 0x62d955e2cd32fe73, 0x9d0308b64dc66e35, 0x09e563235533f386, 0xce4769192c2b796d, 0x5aa1028c34dee4de, 0xa57b5fd8b42a7498, 0x319d344dacdfe92b, 0x183f049a1c296287, 0x8cd96f0f04dcff34, 0x7303325b84286f72, 0xe7e559ce9cddf2c1, 0xc1a60e4f0275129e, 0x554065da1a808f2d, 0xaa9a388e9a741f6b, 0x3e7c531b828182d8, 0x17de63cc32770974, 0x833808592a8294c7, 0x7ce2550daa760481, 0xe8043e98b2839932, 0x2fa634a2cb9b13d9, 0xbb405f37d36e8e6a, 0x449a0263539a1e2c, 0xd07c69f64b6f839f, 0xf9de5921fb990833, 0x6d3832b4e36c9580, 0x92e26fe0639805c6, 0x060404757b6d9875, 0x5f569a7f38432683, 0xcbb0f1ea20b6bb30, 0x346aacbea0422b76, 0xa08cc72bb8b7b6c5, 0x892ef7fc08413d69, 0x1dc89c6910b4a0da, 0xe212c13d9040309c, 0x76f4aaa888b5ad2f, 0xb156a092f1ad27c4, 0x25b0cb07e958ba77, 0xda6a965369ac2a31, 0x4e8cfdc67159b782, 0x672ecd11c1af3c2e, 0xf3c8a684d95aa19d, 0x0c12fbd059ae31db, 0x98f49045415bac68, 0x409454d364fff165, 0xd4723f467c0a6cd6, 0x2ba86212fcfefc90, 0xbf4e0987e40b6123, 0x96ec395054fdea8f, 0x020a52c54c08773c, 0xfdd00f91ccfce77a, 0x69366404d4097ac9, 0xae946e3ead11f022, 0x3a7205abb5e46d91, 0xc5a858ff3510fdd7, 0x514e336a2de56064, 0x78ec03bd9d13ebc8, 0xec0a682885e6767b, 0x13d0357c0512e63d, 0x87365ee91de77b8e, 0xde64c0e35ec9c578, 0x4a82ab76463c58cb, 0xb558f622c6c8c88d, 0x21be9db7de3d553e, 0x081cad606ecbde92, 0x9cfac6f5763e4321, 0x63209ba1f6cad367, 0xf7c6f034ee3f4ed4, 0x3064fa0e9727c43f, 0xa482919b8fd2598c, 0x5b58cccf0f26c9ca, 0xcfbea75a17d35479, 0xe61c978da725dfd5, 0x72fafc18bfd04266, 0x8d20a14c3f24d220, 0x19c6cad927d14f93, 0x3f859d58b979afcc, 0xab63f6cda18c327f, 0x54b9ab992178a239, 0xc05fc00c398d3f8a, 0xe9fdf0db897bb426, 0x7d1b9b4e918e2995, 0x82c1c61a117ab9d3, 0x1627ad8f098f2460, 0xd185a7b57097ae8b, 0x4563cc2068623338, 0xbab99174e896a37e, 0x2e5ffae1f0633ecd, 0x07fdca364095b561, 0x931ba1a3586028d2, 0x6cc1fcf7d894b894, 0xf8279762c0612527, 0xa1750968834f9bd1, 0x359362fd9bba0662, 0xca493fa91b4e9624, 0x5eaf543c03bb0b97, 0x770d64ebb34d803b, 0xe3eb0f7eabb81d88, 0x1c31522a2b4c8dce, 0x88d739bf33b9107d, 0x4f7533854aa19a96, 0xdb93581052540725, 0x24490544d2a09763, 0xb0af6ed1ca550ad0, 0x990d5e067aa3817c, 0x0deb359362561ccf, 0xf23168c7e2a28c89, 0x66d70352fa57113a, ], [ 0x0000000000000000, 0x3f9f6e62160caefd, 0x7f3edcc42c195dfa, 0x40a1b2a63a15f307, 0xfe7db9885832bbf4, 0xc1e2d7ea4e3e1509, 0x8143654c742be60e, 0xbedc0b2e622748f3, 0xbe0b92fb198f417b, 0x8194fc990f83ef86, 0xc1354e3f35961c81, 0xfeaa205d239ab27c, 0x40762b7341bdfa8f, 0x7fe9451157b15472, 0x3f48f7b76da4a775, 0x00d799d57ba80988, 0x3ee7c41d9af4b465, 0x0178aa7f8cf81a98, 0x41d918d9b6ede99f, 0x7e4676bba0e14762, 0xc09a7d95c2c60f91, 0xff0513f7d4caa16c, 0xbfa4a151eedf526b, 0x803bcf33f8d3fc96, 0x80ec56e6837bf51e, 0xbf73388495775be3, 0xffd28a22af62a8e4, 0xc04de440b96e0619, 0x7e91ef6edb494eea, 0x410e810ccd45e017, 0x01af33aaf7501310, 0x3e305dc8e15cbded, 0x7dcf883b35e968ca, 0x4250e65923e5c637, 0x02f154ff19f03530, 0x3d6e3a9d0ffc9bcd, 0x83b231b36ddbd33e, 0xbc2d5fd17bd77dc3, 0xfc8ced7741c28ec4, 0xc313831557ce2039, 0xc3c41ac02c6629b1, 0xfc5b74a23a6a874c, 0xbcfac604007f744b, 0x8365a8661673dab6, 0x3db9a34874549245, 0x0226cd2a62583cb8, 0x42877f8c584dcfbf, 0x7d1811ee4e416142, 0x43284c26af1ddcaf, 0x7cb72244b9117252, 0x3c1690e283048155, 0x0389fe8095082fa8, 0xbd55f5aef72f675b, 0x82ca9bcce123c9a6, 0xc26b296adb363aa1, 0xfdf44708cd3a945c, 0xfd23deddb6929dd4, 0xc2bcb0bfa09e3329, 0x821d02199a8bc02e, 0xbd826c7b8c876ed3, 0x035e6755eea02620, 0x3cc10937f8ac88dd, 0x7c60bb91c2b97bda, 0x43ffd5f3d4b5d527, 0xfb9f10766bd2d194, 0xc4007e147dde7f69, 0x84a1ccb247cb8c6e, 0xbb3ea2d051c72293, 0x05e2a9fe33e06a60, 0x3a7dc79c25ecc49d, 0x7adc753a1ff9379a, 0x45431b5809f59967, 0x4594828d725d90ef, 0x7a0becef64513e12, 0x3aaa5e495e44cd15, 0x0535302b484863e8, 0xbbe93b052a6f2b1b, 0x847655673c6385e6, 0xc4d7e7c1067676e1, 0xfb4889a3107ad81c, 0xc578d46bf12665f1, 0xfae7ba09e72acb0c, 0xba4608afdd3f380b, 0x85d966cdcb3396f6, 0x3b056de3a914de05, 0x049a0381bf1870f8, 0x443bb127850d83ff, 0x7ba4df4593012d02, 0x7b734690e8a9248a, 0x44ec28f2fea58a77, 0x044d9a54c4b07970, 0x3bd2f436d2bcd78d, 0x850eff18b09b9f7e, 0xba91917aa6973183, 0xfa3023dc9c82c284, 0xc5af4dbe8a8e6c79, 0x8650984d5e3bb95e, 0xb9cff62f483717a3, 0xf96e44897222e4a4, 0xc6f12aeb642e4a59, 0x782d21c5060902aa, 0x47b24fa71005ac57, 0x0713fd012a105f50, 0x388c93633c1cf1ad, 0x385b0ab647b4f825, 0x07c464d451b856d8, 0x4765d6726bada5df, 0x78fab8107da10b22, 0xc626b33e1f8643d1, 0xf9b9dd5c098aed2c, 0xb9186ffa339f1e2b, 0x868701982593b0d6, 0xb8b75c50c4cf0d3b, 0x87283232d2c3a3c6, 0xc7898094e8d650c1, 0xf816eef6fedafe3c, 0x46cae5d89cfdb6cf, 0x79558bba8af11832, 0x39f4391cb0e4eb35, 0x066b577ea6e845c8, 0x06bcceabdd404c40, 0x3923a0c9cb4ce2bd, 0x7982126ff15911ba, 0x461d7c0de755bf47, 0xf8c177238572f7b4, 0xc75e1941937e5949, 0x87ffabe7a96baa4e, 0xb860c585bf6704b3, 0xb5cec1077e4f95bb, 0x8a51af6568433b46, 0xcaf01dc35256c841, 0xf56f73a1445a66bc, 0x4bb3788f267d2e4f, 0x742c16ed307180b2, 0x348da44b0a6473b5, 0x0b12ca291c68dd48, 0x0bc553fc67c0d4c0, 0x345a3d9e71cc7a3d, 0x74fb8f384bd9893a, 0x4b64e15a5dd527c7, 0xf5b8ea743ff26f34, 0xca27841629fec1c9, 0x8a8636b013eb32ce, 0xb51958d205e79c33, 0x8b29051ae4bb21de, 0xb4b66b78f2b78f23, 0xf417d9dec8a27c24, 0xcb88b7bcdeaed2d9, 0x7554bc92bc899a2a, 0x4acbd2f0aa8534d7, 0x0a6a60569090c7d0, 0x35f50e34869c692d, 0x352297e1fd3460a5, 0x0abdf983eb38ce58, 0x4a1c4b25d12d3d5f, 0x75832547c72193a2, 0xcb5f2e69a506db51, 0xf4c0400bb30a75ac, 0xb461f2ad891f86ab, 0x8bfe9ccf9f132856, 0xc801493c4ba6fd71, 0xf79e275e5daa538c, 0xb73f95f867bfa08b, 0x88a0fb9a71b30e76, 0x367cf0b413944685, 0x09e39ed60598e878, 0x49422c703f8d1b7f, 0x76dd42122981b582, 0x760adbc75229bc0a, 0x4995b5a5442512f7, 0x093407037e30e1f0, 0x36ab6961683c4f0d, 0x8877624f0a1b07fe, 0xb7e80c2d1c17a903, 0xf749be8b26025a04, 0xc8d6d0e9300ef4f9, 0xf6e68d21d1524914, 0xc979e343c75ee7e9, 0x89d851e5fd4b14ee, 0xb6473f87eb47ba13, 0x089b34a98960f2e0, 0x37045acb9f6c5c1d, 0x77a5e86da579af1a, 0x483a860fb37501e7, 0x48ed1fdac8dd086f, 0x777271b8ded1a692, 0x37d3c31ee4c45595, 0x084cad7cf2c8fb68, 0xb690a65290efb39b, 0x890fc83086e31d66, 0xc9ae7a96bcf6ee61, 0xf63114f4aafa409c, 0x4e51d171159d442f, 0x71cebf130391ead2, 0x316f0db5398419d5, 0x0ef063d72f88b728, 0xb02c68f94dafffdb, 0x8fb3069b5ba35126, 0xcf12b43d61b6a221, 0xf08dda5f77ba0cdc, 0xf05a438a0c120554, 0xcfc52de81a1eaba9, 0x8f649f4e200b58ae, 0xb0fbf12c3607f653, 0x0e27fa025420bea0, 0x31b89460422c105d, 0x711926c67839e35a, 0x4e8648a46e354da7, 0x70b6156c8f69f04a, 0x4f297b0e99655eb7, 0x0f88c9a8a370adb0, 0x3017a7cab57c034d, 0x8ecbace4d75b4bbe, 0xb154c286c157e543, 0xf1f57020fb421644, 0xce6a1e42ed4eb8b9, 0xcebd879796e6b131, 0xf122e9f580ea1fcc, 0xb1835b53baffeccb, 0x8e1c3531acf34236, 0x30c03e1fced40ac5, 0x0f5f507dd8d8a438, 0x4ffee2dbe2cd573f, 0x70618cb9f4c1f9c2, 0x339e594a20742ce5, 0x0c01372836788218, 0x4ca0858e0c6d711f, 0x733febec1a61dfe2, 0xcde3e0c278469711, 0xf27c8ea06e4a39ec, 0xb2dd3c06545fcaeb, 0x8d42526442536416, 0x8d95cbb139fb6d9e, 0xb20aa5d32ff7c363, 0xf2ab177515e23064, 0xcd34791703ee9e99, 0x73e8723961c9d66a, 0x4c771c5b77c57897, 0x0cd6aefd4dd08b90, 0x3349c09f5bdc256d, 0x0d799d57ba809880, 0x32e6f335ac8c367d, 0x724741939699c57a, 0x4dd82ff180956b87, 0xf30424dfe2b22374, 0xcc9b4abdf4be8d89, 0x8c3af81bceab7e8e, 0xb3a59679d8a7d073, 0xb3720faca30fd9fb, 0x8ced61ceb5037706, 0xcc4cd3688f168401, 0xf3d3bd0a991a2afc, 0x4d0fb624fb3d620f, 0x7290d846ed31ccf2, 0x32316ae0d7243ff5, 0x0dae0482c1289108, ], [ 0x0000000000000000, 0x296d63e555751de5, 0x52dac7caaaea3bca, 0x7bb7a42fff9f262f, 0xa5b58f9555d47794, 0x8cd8ec7000a16a71, 0xf76f485fff3e4c5e, 0xde022bbaaa4b51bb, 0x099bfec10242d9bb, 0x20f69d245737c45e, 0x5b41390ba8a8e271, 0x722c5aeefdddff94, 0xac2e71545796ae2f, 0x854312b102e3b3ca, 0xfef4b69efd7c95e5, 0xd799d57ba8098800, 0x1337fd820485b376, 0x3a5a9e6751f0ae93, 0x41ed3a48ae6f88bc, 0x688059adfb1a9559, 0xb68272175151c4e2, 0x9fef11f20424d907, 0xe458b5ddfbbbff28, 0xcd35d638aecee2cd, 0x1aac034306c76acd, 0x33c160a653b27728, 0x4876c489ac2d5107, 0x611ba76cf9584ce2, 0xbf198cd653131d59, 0x9674ef33066600bc, 0xedc34b1cf9f92693, 0xc4ae28f9ac8c3b76, 0x266ffb04090b66ec, 0x0f0298e15c7e7b09, 0x74b53ccea3e15d26, 0x5dd85f2bf69440c3, 0x83da74915cdf1178, 0xaab7177409aa0c9d, 0xd100b35bf6352ab2, 0xf86dd0bea3403757, 0x2ff405c50b49bf57, 0x069966205e3ca2b2, 0x7d2ec20fa1a3849d, 0x5443a1eaf4d69978, 0x8a418a505e9dc8c3, 0xa32ce9b50be8d526, 0xd89b4d9af477f309, 0xf1f62e7fa102eeec, 0x355806860d8ed59a, 0x1c35656358fbc87f, 0x6782c14ca764ee50, 0x4eefa2a9f211f3b5, 0x90ed8913585aa20e, 0xb980eaf60d2fbfeb, 0xc2374ed9f2b099c4, 0xeb5a2d3ca7c58421, 0x3cc3f8470fcc0c21, 0x15ae9ba25ab911c4, 0x6e193f8da52637eb, 0x47745c68f0532a0e, 0x997677d25a187bb5, 0xb01b14370f6d6650, 0xcbacb018f0f2407f, 0xe2c1d3fda5875d9a, 0x4cdff6081216cdd8, 0x65b295ed4763d03d, 0x1e0531c2b8fcf612, 0x37685227ed89ebf7, 0xe96a799d47c2ba4c, 0xc0071a7812b7a7a9, 0xbbb0be57ed288186, 0x92ddddb2b85d9c63, 0x454408c910541463, 0x6c296b2c45210986, 0x179ecf03babe2fa9, 0x3ef3ace6efcb324c, 0xe0f1875c458063f7, 0xc99ce4b910f57e12, 0xb22b4096ef6a583d, 0x9b462373ba1f45d8, 0x5fe80b8a16937eae, 0x7685686f43e6634b, 0x0d32cc40bc794564, 0x245fafa5e90c5881, 0xfa5d841f4347093a, 0xd330e7fa163214df, 0xa88743d5e9ad32f0, 0x81ea2030bcd82f15, 0x5673f54b14d1a715, 0x7f1e96ae41a4baf0, 0x04a93281be3b9cdf, 0x2dc45164eb4e813a, 0xf3c67ade4105d081, 0xdaab193b1470cd64, 0xa11cbd14ebefeb4b, 0x8871def1be9af6ae, 0x6ab00d0c1b1dab34, 0x43dd6ee94e68b6d1, 0x386acac6b1f790fe, 0x1107a923e4828d1b, 0xcf0582994ec9dca0, 0xe668e17c1bbcc145, 0x9ddf4553e423e76a, 0xb4b226b6b156fa8f, 0x632bf3cd195f728f, 0x4a4690284c2a6f6a, 0x31f13407b3b54945, 0x189c57e2e6c054a0, 0xc69e7c584c8b051b, 0xeff31fbd19fe18fe, 0x9444bb92e6613ed1, 0xbd29d877b3142334, 0x7987f08e1f981842, 0x50ea936b4aed05a7, 0x2b5d3744b5722388, 0x023054a1e0073e6d, 0xdc327f1b4a4c6fd6, 0xf55f1cfe1f397233, 0x8ee8b8d1e0a6541c, 0xa785db34b5d349f9, 0x701c0e4f1ddac1f9, 0x59716daa48afdc1c, 0x22c6c985b730fa33, 0x0babaa60e245e7d6, 0xd5a981da480eb66d, 0xfcc4e23f1d7bab88, 0x87734610e2e48da7, 0xae1e25f5b7919042, 0x99bfec10242d9bb0, 0xb0d28ff571588655, 0xcb652bda8ec7a07a, 0xe208483fdbb2bd9f, 0x3c0a638571f9ec24, 0x15670060248cf1c1, 0x6ed0a44fdb13d7ee, 0x47bdc7aa8e66ca0b, 0x902412d1266f420b, 0xb9497134731a5fee, 0xc2fed51b8c8579c1, 0xeb93b6fed9f06424, 0x35919d4473bb359f, 0x1cfcfea126ce287a, 0x674b5a8ed9510e55, 0x4e26396b8c2413b0, 0x8a88119220a828c6, 0xa3e5727775dd3523, 0xd852d6588a42130c, 0xf13fb5bddf370ee9, 0x2f3d9e07757c5f52, 0x0650fde2200942b7, 0x7de759cddf966498, 0x548a3a288ae3797d, 0x8313ef5322eaf17d, 0xaa7e8cb6779fec98, 0xd1c928998800cab7, 0xf8a44b7cdd75d752, 0x26a660c6773e86e9, 0x0fcb0323224b9b0c, 0x747ca70cddd4bd23, 0x5d11c4e988a1a0c6, 0xbfd017142d26fd5c, 0x96bd74f17853e0b9, 0xed0ad0de87ccc696, 0xc467b33bd2b9db73, 0x1a65988178f28ac8, 0x3308fb642d87972d, 0x48bf5f4bd218b102, 0x61d23cae876dace7, 0xb64be9d52f6424e7, 0x9f268a307a113902, 0xe4912e1f858e1f2d, 0xcdfc4dfad0fb02c8, 0x13fe66407ab05373, 0x3a9305a52fc54e96, 0x4124a18ad05a68b9, 0x6849c26f852f755c, 0xace7ea9629a34e2a, 0x858a89737cd653cf, 0xfe3d2d5c834975e0, 0xd7504eb9d63c6805, 0x095265037c7739be, 0x203f06e62902245b, 0x5b88a2c9d69d0274, 0x72e5c12c83e81f91, 0xa57c14572be19791, 0x8c1177b27e948a74, 0xf7a6d39d810bac5b, 0xdecbb078d47eb1be, 0x00c99bc27e35e005, 0x29a4f8272b40fde0, 0x52135c08d4dfdbcf, 0x7b7e3fed81aac62a, 0xd5601a18363b5668, 0xfc0d79fd634e4b8d, 0x87baddd29cd16da2, 0xaed7be37c9a47047, 0x70d5958d63ef21fc, 0x59b8f668369a3c19, 0x220f5247c9051a36, 0x0b6231a29c7007d3, 0xdcfbe4d934798fd3, 0xf596873c610c9236, 0x8e2123139e93b419, 0xa74c40f6cbe6a9fc, 0x794e6b4c61adf847, 0x502308a934d8e5a2, 0x2b94ac86cb47c38d, 0x02f9cf639e32de68, 0xc657e79a32bee51e, 0xef3a847f67cbf8fb, 0x948d20509854ded4, 0xbde043b5cd21c331, 0x63e2680f676a928a, 0x4a8f0bea321f8f6f, 0x3138afc5cd80a940, 0x1855cc2098f5b4a5, 0xcfcc195b30fc3ca5, 0xe6a17abe65892140, 0x9d16de919a16076f, 0xb47bbd74cf631a8a, 0x6a7996ce65284b31, 0x4314f52b305d56d4, 0x38a35104cfc270fb, 0x11ce32e19ab76d1e, 0xf30fe11c3f303084, 0xda6282f96a452d61, 0xa1d526d695da0b4e, 0x88b84533c0af16ab, 0x56ba6e896ae44710, 0x7fd70d6c3f915af5, 0x0460a943c00e7cda, 0x2d0dcaa6957b613f, 0xfa941fdd3d72e93f, 0xd3f97c386807f4da, 0xa84ed8179798d2f5, 0x8123bbf2c2edcf10, 0x5f21904868a69eab, 0x764cf3ad3dd3834e, 0x0dfb5782c24ca561, 0x249634679739b884, 0xe0381c9e3bb583f2, 0xc9557f7b6ec09e17, 0xb2e2db54915fb838, 0x9b8fb8b1c42aa5dd, 0x458d930b6e61f466, 0x6ce0f0ee3b14e983, 0x175754c1c48bcfac, 0x3e3a372491fed249, 0xe9a3e25f39f75a49, 0xc0ce81ba6c8247ac, 0xbb792595931d6183, 0x92144670c6687c66, 0x4c166dca6c232ddd, 0x657b0e2f39563038, 0x1eccaa00c6c91617, 0x37a1c9e593bc0bf2, ], [ 0x0000000000000000, 0x718f39cbe1b101f3, 0xe31e7397c36203e6, 0x92914a5c22d30215, 0x84cc06c42f2e315f, 0xf5433f0fce9f30ac, 0x67d27553ec4c32b9, 0x165d4c980dfd334a, 0x4b68ec63f7b6542d, 0x3ae7d5a8160755de, 0xa8769ff434d457cb, 0xd9f9a63fd5655638, 0xcfa4eaa7d8986572, 0xbe2bd36c39296481, 0x2cba99301bfa6694, 0x5d35a0fbfa4b6767, 0x96d1d8c7ef6ca85a, 0xe75ee10c0edda9a9, 0x75cfab502c0eabbc, 0x0440929bcdbfaa4f, 0x121dde03c0429905, 0x6392e7c821f398f6, 0xf103ad9403209ae3, 0x808c945fe2919b10, 0xddb934a418dafc77, 0xac360d6ff96bfd84, 0x3ea74733dbb8ff91, 0x4f287ef83a09fe62, 0x5975326037f4cd28, 0x28fa0babd645ccdb, 0xba6b41f7f496cece, 0xcbe4783c1527cf3d, 0x6f53506477336627, 0x1edc69af968267d4, 0x8c4d23f3b45165c1, 0xfdc21a3855e06432, 0xeb9f56a0581d5778, 0x9a106f6bb9ac568b, 0x088125379b7f549e, 0x790e1cfc7ace556d, 0x243bbc078085320a, 0x55b485cc613433f9, 0xc725cf9043e731ec, 0xb6aaf65ba256301f, 0xa0f7bac3afab0355, 0xd17883084e1a02a6, 0x43e9c9546cc900b3, 0x3266f09f8d780140, 0xf98288a3985fce7d, 0x880db16879eecf8e, 0x1a9cfb345b3dcd9b, 0x6b13c2ffba8ccc68, 0x7d4e8e67b771ff22, 0x0cc1b7ac56c0fed1, 0x9e50fdf07413fcc4, 0xefdfc43b95a2fd37, 0xb2ea64c06fe99a50, 0xc3655d0b8e589ba3, 0x51f41757ac8b99b6, 0x207b2e9c4d3a9845, 0x3626620440c7ab0f, 0x47a95bcfa176aafc, 0xd538119383a5a8e9, 0xa4b728586214a91a, 0xdea6a0c8ee66cc4e, 0xaf2999030fd7cdbd, 0x3db8d35f2d04cfa8, 0x4c37ea94ccb5ce5b, 0x5a6aa60cc148fd11, 0x2be59fc720f9fce2, 0xb974d59b022afef7, 0xc8fbec50e39bff04, 0x95ce4cab19d09863, 0xe4417560f8619990, 0x76d03f3cdab29b85, 0x075f06f73b039a76, 0x11024a6f36fea93c, 0x608d73a4d74fa8cf, 0xf21c39f8f59caada, 0x83930033142dab29, 0x4877780f010a6414, 0x39f841c4e0bb65e7, 0xab690b98c26867f2, 0xdae6325323d96601, 0xccbb7ecb2e24554b, 0xbd344700cf9554b8, 0x2fa50d5ced4656ad, 0x5e2a34970cf7575e, 0x031f946cf6bc3039, 0x7290ada7170d31ca, 0xe001e7fb35de33df, 0x918ede30d46f322c, 0x87d392a8d9920166, 0xf65cab6338230095, 0x64cde13f1af00280, 0x1542d8f4fb410373, 0xb1f5f0ac9955aa69, 0xc07ac96778e4ab9a, 0x52eb833b5a37a98f, 0x2364baf0bb86a87c, 0x3539f668b67b9b36, 0x44b6cfa357ca9ac5, 0xd62785ff751998d0, 0xa7a8bc3494a89923, 0xfa9d1ccf6ee3fe44, 0x8b1225048f52ffb7, 0x19836f58ad81fda2, 0x680c56934c30fc51, 0x7e511a0b41cdcf1b, 0x0fde23c0a07ccee8, 0x9d4f699c82afccfd, 0xecc05057631ecd0e, 0x2724286b76390233, 0x56ab11a0978803c0, 0xc43a5bfcb55b01d5, 0xb5b5623754ea0026, 0xa3e82eaf5917336c, 0xd2671764b8a6329f, 0x40f65d389a75308a, 0x317964f37bc43179, 0x6c4cc408818f561e, 0x1dc3fdc3603e57ed, 0x8f52b79f42ed55f8, 0xfedd8e54a35c540b, 0xe880c2ccaea16741, 0x990ffb074f1066b2, 0x0b9eb15b6dc364a7, 0x7a1188908c726554, 0xffbda07a7527ae0f, 0x8e3299b19496affc, 0x1ca3d3edb645ade9, 0x6d2cea2657f4ac1a, 0x7b71a6be5a099f50, 0x0afe9f75bbb89ea3, 0x986fd529996b9cb6, 0xe9e0ece278da9d45, 0xb4d54c198291fa22, 0xc55a75d26320fbd1, 0x57cb3f8e41f3f9c4, 0x26440645a042f837, 0x30194addadbfcb7d, 0x419673164c0eca8e, 0xd307394a6eddc89b, 0xa28800818f6cc968, 0x696c78bd9a4b0655, 0x18e341767bfa07a6, 0x8a720b2a592905b3, 0xfbfd32e1b8980440, 0xeda07e79b565370a, 0x9c2f47b254d436f9, 0x0ebe0dee760734ec, 0x7f31342597b6351f, 0x220494de6dfd5278, 0x538bad158c4c538b, 0xc11ae749ae9f519e, 0xb095de824f2e506d, 0xa6c8921a42d36327, 0xd747abd1a36262d4, 0x45d6e18d81b160c1, 0x3459d84660006132, 0x90eef01e0214c828, 0xe161c9d5e3a5c9db, 0x73f08389c176cbce, 0x027fba4220c7ca3d, 0x1422f6da2d3af977, 0x65adcf11cc8bf884, 0xf73c854dee58fa91, 0x86b3bc860fe9fb62, 0xdb861c7df5a29c05, 0xaa0925b614139df6, 0x38986fea36c09fe3, 0x49175621d7719e10, 0x5f4a1ab9da8cad5a, 0x2ec523723b3daca9, 0xbc54692e19eeaebc, 0xcddb50e5f85faf4f, 0x063f28d9ed786072, 0x77b011120cc96181, 0xe5215b4e2e1a6394, 0x94ae6285cfab6267, 0x82f32e1dc256512d, 0xf37c17d623e750de, 0x61ed5d8a013452cb, 0x10626441e0855338, 0x4d57c4ba1ace345f, 0x3cd8fd71fb7f35ac, 0xae49b72dd9ac37b9, 0xdfc68ee6381d364a, 0xc99bc27e35e00500, 0xb814fbb5d45104f3, 0x2a85b1e9f68206e6, 0x5b0a882217330715, 0x211b00b29b416241, 0x509439797af063b2, 0xc2057325582361a7, 0xb38a4aeeb9926054, 0xa5d70676b46f531e, 0xd4583fbd55de52ed, 0x46c975e1770d50f8, 0x37464c2a96bc510b, 0x6a73ecd16cf7366c, 0x1bfcd51a8d46379f, 0x896d9f46af95358a, 0xf8e2a68d4e243479, 0xeebfea1543d90733, 0x9f30d3dea26806c0, 0x0da1998280bb04d5, 0x7c2ea049610a0526, 0xb7cad875742dca1b, 0xc645e1be959ccbe8, 0x54d4abe2b74fc9fd, 0x255b922956fec80e, 0x3306deb15b03fb44, 0x4289e77abab2fab7, 0xd018ad269861f8a2, 0xa19794ed79d0f951, 0xfca23416839b9e36, 0x8d2d0ddd622a9fc5, 0x1fbc478140f99dd0, 0x6e337e4aa1489c23, 0x786e32d2acb5af69, 0x09e10b194d04ae9a, 0x9b7041456fd7ac8f, 0xeaff788e8e66ad7c, 0x4e4850d6ec720466, 0x3fc7691d0dc30595, 0xad5623412f100780, 0xdcd91a8acea10673, 0xca845612c35c3539, 0xbb0b6fd922ed34ca, 0x299a2585003e36df, 0x58151c4ee18f372c, 0x0520bcb51bc4504b, 0x74af857efa7551b8, 0xe63ecf22d8a653ad, 0x97b1f6e93917525e, 0x81ecba7134ea6114, 0xf06383bad55b60e7, 0x62f2c9e6f78862f2, 0x137df02d16396301, 0xd8998811031eac3c, 0xa916b1dae2afadcf, 0x3b87fb86c07cafda, 0x4a08c24d21cdae29, 0x5c558ed52c309d63, 0x2ddab71ecd819c90, 0xbf4bfd42ef529e85, 0xcec4c4890ee39f76, 0x93f16472f4a8f811, 0xe27e5db91519f9e2, 0x70ef17e537cafbf7, 0x01602e2ed67bfa04, 0x173d62b6db86c94e, 0x66b25b7d3a37c8bd, 0xf423112118e4caa8, 0x85ac28eaf955cb5b, ], [ 0x0000000000000000, 0xbd8ba11f43a56a8d, 0x39e7a3d52ea0e389, 0x846c02ca6d058904, 0x73cf47aa5d41c712, 0xce44e6b51ee4ad9f, 0x4a28e47f73e1249b, 0xf7a3456030444e16, 0xe79e8f54ba838e24, 0x5a152e4bf926e4a9, 0xde792c8194236dad, 0x63f28d9ed7860720, 0x9451c8fee7c24936, 0x29da69e1a46723bb, 0xadb66b2bc962aabf, 0x103dca348ac7c032, 0x8dcdff42dced2adb, 0x30465e5d9f484056, 0xb42a5c97f24dc952, 0x09a1fd88b1e8a3df, 0xfe02b8e881acedc9, 0x438919f7c2098744, 0xc7e51b3daf0c0e40, 0x7a6eba22eca964cd, 0x6a537016666ea4ff, 0xd7d8d10925cbce72, 0x53b4d3c348ce4776, 0xee3f72dc0b6b2dfb, 0x199c37bc3b2f63ed, 0xa41796a3788a0960, 0x207b9469158f8064, 0x9df03576562aeae9, 0x596b1f6e10306325, 0xe4e0be71539509a8, 0x608cbcbb3e9080ac, 0xdd071da47d35ea21, 0x2aa458c44d71a437, 0x972ff9db0ed4ceba, 0x1343fb1163d147be, 0xaec85a0e20742d33, 0xbef5903aaab3ed01, 0x037e3125e916878c, 0x871233ef84130e88, 0x3a9992f0c7b66405, 0xcd3ad790f7f22a13, 0x70b1768fb457409e, 0xf4dd7445d952c99a, 0x4956d55a9af7a317, 0xd4a6e02cccdd49fe, 0x692d41338f782373, 0xed4143f9e27daa77, 0x50cae2e6a1d8c0fa, 0xa769a786919c8eec, 0x1ae20699d239e461, 0x9e8e0453bf3c6d65, 0x2305a54cfc9907e8, 0x33386f78765ec7da, 0x8eb3ce6735fbad57, 0x0adfccad58fe2453, 0xb7546db21b5b4ede, 0x40f728d22b1f00c8, 0xfd7c89cd68ba6a45, 0x79108b0705bfe341, 0xc49b2a18461a89cc, 0xb2d63edc2060c64a, 0x0f5d9fc363c5acc7, 0x8b319d090ec025c3, 0x36ba3c164d654f4e, 0xc11979767d210158, 0x7c92d8693e846bd5, 0xf8fedaa35381e2d1, 0x45757bbc1024885c, 0x5548b1889ae3486e, 0xe8c31097d94622e3, 0x6caf125db443abe7, 0xd124b342f7e6c16a, 0x2687f622c7a28f7c, 0x9b0c573d8407e5f1, 0x1f6055f7e9026cf5, 0xa2ebf4e8aaa70678, 0x3f1bc19efc8dec91, 0x82906081bf28861c, 0x06fc624bd22d0f18, 0xbb77c35491886595, 0x4cd48634a1cc2b83, 0xf15f272be269410e, 0x753325e18f6cc80a, 0xc8b884feccc9a287, 0xd8854eca460e62b5, 0x650eefd505ab0838, 0xe162ed1f68ae813c, 0x5ce94c002b0bebb1, 0xab4a09601b4fa5a7, 0x16c1a87f58eacf2a, 0x92adaab535ef462e, 0x2f260baa764a2ca3, 0xebbd21b23050a56f, 0x563680ad73f5cfe2, 0xd25a82671ef046e6, 0x6fd123785d552c6b, 0x987266186d11627d, 0x25f9c7072eb408f0, 0xa195c5cd43b181f4, 0x1c1e64d20014eb79, 0x0c23aee68ad32b4b, 0xb1a80ff9c97641c6, 0x35c40d33a473c8c2, 0x884fac2ce7d6a24f, 0x7fece94cd792ec59, 0xc2674853943786d4, 0x460b4a99f9320fd0, 0xfb80eb86ba97655d, 0x6670def0ecbd8fb4, 0xdbfb7fefaf18e539, 0x5f977d25c21d6c3d, 0xe21cdc3a81b806b0, 0x15bf995ab1fc48a6, 0xa8343845f259222b, 0x2c583a8f9f5cab2f, 0x91d39b90dcf9c1a2, 0x81ee51a4563e0190, 0x3c65f0bb159b6b1d, 0xb809f271789ee219, 0x0582536e3b3b8894, 0xf221160e0b7fc682, 0x4faab71148daac0f, 0xcbc6b5db25df250b, 0x764d14c4667a4f86, 0x275c9c53e92bba07, 0x9ad73d4caa8ed08a, 0x1ebb3f86c78b598e, 0xa3309e99842e3303, 0x5493dbf9b46a7d15, 0xe9187ae6f7cf1798, 0x6d74782c9aca9e9c, 0xd0ffd933d96ff411, 0xc0c2130753a83423, 0x7d49b218100d5eae, 0xf925b0d27d08d7aa, 0x44ae11cd3eadbd27, 0xb30d54ad0ee9f331, 0x0e86f5b24d4c99bc, 0x8aeaf778204910b8, 0x3761566763ec7a35, 0xaa91631135c690dc, 0x171ac20e7663fa51, 0x9376c0c41b667355, 0x2efd61db58c319d8, 0xd95e24bb688757ce, 0x64d585a42b223d43, 0xe0b9876e4627b447, 0x5d3226710582deca, 0x4d0fec458f451ef8, 0xf0844d5acce07475, 0x74e84f90a1e5fd71, 0xc963ee8fe24097fc, 0x3ec0abefd204d9ea, 0x834b0af091a1b367, 0x0727083afca43a63, 0xbaaca925bf0150ee, 0x7e37833df91bd922, 0xc3bc2222babeb3af, 0x47d020e8d7bb3aab, 0xfa5b81f7941e5026, 0x0df8c497a45a1e30, 0xb0736588e7ff74bd, 0x341f67428afafdb9, 0x8994c65dc95f9734, 0x99a90c6943985706, 0x2422ad76003d3d8b, 0xa04eafbc6d38b48f, 0x1dc50ea32e9dde02, 0xea664bc31ed99014, 0x57edeadc5d7cfa99, 0xd381e8163079739d, 0x6e0a490973dc1910, 0xf3fa7c7f25f6f3f9, 0x4e71dd6066539974, 0xca1ddfaa0b561070, 0x77967eb548f37afd, 0x80353bd578b734eb, 0x3dbe9aca3b125e66, 0xb9d298005617d762, 0x0459391f15b2bdef, 0x1464f32b9f757ddd, 0xa9ef5234dcd01750, 0x2d8350feb1d59e54, 0x9008f1e1f270f4d9, 0x67abb481c234bacf, 0xda20159e8191d042, 0x5e4c1754ec945946, 0xe3c7b64baf3133cb, 0x958aa28fc94b7c4d, 0x280103908aee16c0, 0xac6d015ae7eb9fc4, 0x11e6a045a44ef549, 0xe645e525940abb5f, 0x5bce443ad7afd1d2, 0xdfa246f0baaa58d6, 0x6229e7eff90f325b, 0x72142ddb73c8f269, 0xcf9f8cc4306d98e4, 0x4bf38e0e5d6811e0, 0xf6782f111ecd7b6d, 0x01db6a712e89357b, 0xbc50cb6e6d2c5ff6, 0x383cc9a40029d6f2, 0x85b768bb438cbc7f, 0x18475dcd15a65696, 0xa5ccfcd256033c1b, 0x21a0fe183b06b51f, 0x9c2b5f0778a3df92, 0x6b881a6748e79184, 0xd603bb780b42fb09, 0x526fb9b26647720d, 0xefe418ad25e21880, 0xffd9d299af25d8b2, 0x42527386ec80b23f, 0xc63e714c81853b3b, 0x7bb5d053c22051b6, 0x8c169533f2641fa0, 0x319d342cb1c1752d, 0xb5f136e6dcc4fc29, 0x087a97f99f6196a4, 0xcce1bde1d97b1f68, 0x716a1cfe9ade75e5, 0xf5061e34f7dbfce1, 0x488dbf2bb47e966c, 0xbf2efa4b843ad87a, 0x02a55b54c79fb2f7, 0x86c9599eaa9a3bf3, 0x3b42f881e93f517e, 0x2b7f32b563f8914c, 0x96f493aa205dfbc1, 0x129891604d5872c5, 0xaf13307f0efd1848, 0x58b0751f3eb9565e, 0xe53bd4007d1c3cd3, 0x6157d6ca1019b5d7, 0xdcdc77d553bcdf5a, 0x412c42a3059635b3, 0xfca7e3bc46335f3e, 0x78cbe1762b36d63a, 0xc54040696893bcb7, 0x32e3050958d7f2a1, 0x8f68a4161b72982c, 0x0b04a6dc76771128, 0xb68f07c335d27ba5, 0xa6b2cdf7bf15bb97, 0x1b396ce8fcb0d11a, 0x9f556e2291b5581e, 0x22decf3dd2103293, 0xd57d8a5de2547c85, 0x68f62b42a1f11608, 0xec9a2988ccf49f0c, 0x511188978f51f581, ], ]; pub static CRC64_GO_ISO_TABLE: [[u64; 256]; 16] = [ [ 0x0000000000000000, 0x01b0000000000000, 0x0360000000000000, 0x02d0000000000000, 0x06c0000000000000, 0x0770000000000000, 0x05a0000000000000, 0x0410000000000000, 0x0d80000000000000, 0x0c30000000000000, 0x0ee0000000000000, 0x0f50000000000000, 0x0b40000000000000, 0x0af0000000000000, 0x0820000000000000, 0x0990000000000000, 0x1b00000000000000, 0x1ab0000000000000, 0x1860000000000000, 0x19d0000000000000, 0x1dc0000000000000, 0x1c70000000000000, 0x1ea0000000000000, 0x1f10000000000000, 0x1680000000000000, 0x1730000000000000, 0x15e0000000000000, 0x1450000000000000, 0x1040000000000000, 0x11f0000000000000, 0x1320000000000000, 0x1290000000000000, 0x3600000000000000, 0x37b0000000000000, 0x3560000000000000, 0x34d0000000000000, 0x30c0000000000000, 0x3170000000000000, 0x33a0000000000000, 0x3210000000000000, 0x3b80000000000000, 0x3a30000000000000, 0x38e0000000000000, 0x3950000000000000, 0x3d40000000000000, 0x3cf0000000000000, 0x3e20000000000000, 0x3f90000000000000, 0x2d00000000000000, 0x2cb0000000000000, 0x2e60000000000000, 0x2fd0000000000000, 0x2bc0000000000000, 0x2a70000000000000, 0x28a0000000000000, 0x2910000000000000, 0x2080000000000000, 0x2130000000000000, 0x23e0000000000000, 0x2250000000000000, 0x2640000000000000, 0x27f0000000000000, 0x2520000000000000, 0x2490000000000000, 0x6c00000000000000, 0x6db0000000000000, 0x6f60000000000000, 0x6ed0000000000000, 0x6ac0000000000000, 0x6b70000000000000, 0x69a0000000000000, 0x6810000000000000, 0x6180000000000000, 0x6030000000000000, 0x62e0000000000000, 0x6350000000000000, 0x6740000000000000, 0x66f0000000000000, 0x6420000000000000, 0x6590000000000000, 0x7700000000000000, 0x76b0000000000000, 0x7460000000000000, 0x75d0000000000000, 0x71c0000000000000, 0x7070000000000000, 0x72a0000000000000, 0x7310000000000000, 0x7a80000000000000, 0x7b30000000000000, 0x79e0000000000000, 0x7850000000000000, 0x7c40000000000000, 0x7df0000000000000, 0x7f20000000000000, 0x7e90000000000000, 0x5a00000000000000, 0x5bb0000000000000, 0x5960000000000000, 0x58d0000000000000, 0x5cc0000000000000, 0x5d70000000000000, 0x5fa0000000000000, 0x5e10000000000000, 0x5780000000000000, 0x5630000000000000, 0x54e0000000000000, 0x5550000000000000, 0x5140000000000000, 0x50f0000000000000, 0x5220000000000000, 0x5390000000000000, 0x4100000000000000, 0x40b0000000000000, 0x4260000000000000, 0x43d0000000000000, 0x47c0000000000000, 0x4670000000000000, 0x44a0000000000000, 0x4510000000000000, 0x4c80000000000000, 0x4d30000000000000, 0x4fe0000000000000, 0x4e50000000000000, 0x4a40000000000000, 0x4bf0000000000000, 0x4920000000000000, 0x4890000000000000, 0xd800000000000000, 0xd9b0000000000000, 0xdb60000000000000, 0xdad0000000000000, 0xdec0000000000000, 0xdf70000000000000, 0xdda0000000000000, 0xdc10000000000000, 0xd580000000000000, 0xd430000000000000, 0xd6e0000000000000, 0xd750000000000000, 0xd340000000000000, 0xd2f0000000000000, 0xd020000000000000, 0xd190000000000000, 0xc300000000000000, 0xc2b0000000000000, 0xc060000000000000, 0xc1d0000000000000, 0xc5c0000000000000, 0xc470000000000000, 0xc6a0000000000000, 0xc710000000000000, 0xce80000000000000, 0xcf30000000000000, 0xcde0000000000000, 0xcc50000000000000, 0xc840000000000000, 0xc9f0000000000000, 0xcb20000000000000, 0xca90000000000000, 0xee00000000000000, 0xefb0000000000000, 0xed60000000000000, 0xecd0000000000000, 0xe8c0000000000000, 0xe970000000000000, 0xeba0000000000000, 0xea10000000000000, 0xe380000000000000, 0xe230000000000000, 0xe0e0000000000000, 0xe150000000000000, 0xe540000000000000, 0xe4f0000000000000, 0xe620000000000000, 0xe790000000000000, 0xf500000000000000, 0xf4b0000000000000, 0xf660000000000000, 0xf7d0000000000000, 0xf3c0000000000000, 0xf270000000000000, 0xf0a0000000000000, 0xf110000000000000, 0xf880000000000000, 0xf930000000000000, 0xfbe0000000000000, 0xfa50000000000000, 0xfe40000000000000, 0xfff0000000000000, 0xfd20000000000000, 0xfc90000000000000, 0xb400000000000000, 0xb5b0000000000000, 0xb760000000000000, 0xb6d0000000000000, 0xb2c0000000000000, 0xb370000000000000, 0xb1a0000000000000, 0xb010000000000000, 0xb980000000000000, 0xb830000000000000, 0xbae0000000000000, 0xbb50000000000000, 0xbf40000000000000, 0xbef0000000000000, 0xbc20000000000000, 0xbd90000000000000, 0xaf00000000000000, 0xaeb0000000000000, 0xac60000000000000, 0xadd0000000000000, 0xa9c0000000000000, 0xa870000000000000, 0xaaa0000000000000, 0xab10000000000000, 0xa280000000000000, 0xa330000000000000, 0xa1e0000000000000, 0xa050000000000000, 0xa440000000000000, 0xa5f0000000000000, 0xa720000000000000, 0xa690000000000000, 0x8200000000000000, 0x83b0000000000000, 0x8160000000000000, 0x80d0000000000000, 0x84c0000000000000, 0x8570000000000000, 0x87a0000000000000, 0x8610000000000000, 0x8f80000000000000, 0x8e30000000000000, 0x8ce0000000000000, 0x8d50000000000000, 0x8940000000000000, 0x88f0000000000000, 0x8a20000000000000, 0x8b90000000000000, 0x9900000000000000, 0x98b0000000000000, 0x9a60000000000000, 0x9bd0000000000000, 0x9fc0000000000000, 0x9e70000000000000, 0x9ca0000000000000, 0x9d10000000000000, 0x9480000000000000, 0x9530000000000000, 0x97e0000000000000, 0x9650000000000000, 0x9240000000000000, 0x93f0000000000000, 0x9120000000000000, 0x9090000000000000, ], [ 0x0000000000000000, 0x0001b00000000000, 0x0003600000000000, 0x0002d00000000000, 0x0006c00000000000, 0x0007700000000000, 0x0005a00000000000, 0x0004100000000000, 0x000d800000000000, 0x000c300000000000, 0x000ee00000000000, 0x000f500000000000, 0x000b400000000000, 0x000af00000000000, 0x0008200000000000, 0x0009900000000000, 0x001b000000000000, 0x001ab00000000000, 0x0018600000000000, 0x0019d00000000000, 0x001dc00000000000, 0x001c700000000000, 0x001ea00000000000, 0x001f100000000000, 0x0016800000000000, 0x0017300000000000, 0x0015e00000000000, 0x0014500000000000, 0x0010400000000000, 0x0011f00000000000, 0x0013200000000000, 0x0012900000000000, 0x0036000000000000, 0x0037b00000000000, 0x0035600000000000, 0x0034d00000000000, 0x0030c00000000000, 0x0031700000000000, 0x0033a00000000000, 0x0032100000000000, 0x003b800000000000, 0x003a300000000000, 0x0038e00000000000, 0x0039500000000000, 0x003d400000000000, 0x003cf00000000000, 0x003e200000000000, 0x003f900000000000, 0x002d000000000000, 0x002cb00000000000, 0x002e600000000000, 0x002fd00000000000, 0x002bc00000000000, 0x002a700000000000, 0x0028a00000000000, 0x0029100000000000, 0x0020800000000000, 0x0021300000000000, 0x0023e00000000000, 0x0022500000000000, 0x0026400000000000, 0x0027f00000000000, 0x0025200000000000, 0x0024900000000000, 0x006c000000000000, 0x006db00000000000, 0x006f600000000000, 0x006ed00000000000, 0x006ac00000000000, 0x006b700000000000, 0x0069a00000000000, 0x0068100000000000, 0x0061800000000000, 0x0060300000000000, 0x0062e00000000000, 0x0063500000000000, 0x0067400000000000, 0x0066f00000000000, 0x0064200000000000, 0x0065900000000000, 0x0077000000000000, 0x0076b00000000000, 0x0074600000000000, 0x0075d00000000000, 0x0071c00000000000, 0x0070700000000000, 0x0072a00000000000, 0x0073100000000000, 0x007a800000000000, 0x007b300000000000, 0x0079e00000000000, 0x0078500000000000, 0x007c400000000000, 0x007df00000000000, 0x007f200000000000, 0x007e900000000000, 0x005a000000000000, 0x005bb00000000000, 0x0059600000000000, 0x0058d00000000000, 0x005cc00000000000, 0x005d700000000000, 0x005fa00000000000, 0x005e100000000000, 0x0057800000000000, 0x0056300000000000, 0x0054e00000000000, 0x0055500000000000, 0x0051400000000000, 0x0050f00000000000, 0x0052200000000000, 0x0053900000000000, 0x0041000000000000, 0x0040b00000000000, 0x0042600000000000, 0x0043d00000000000, 0x0047c00000000000, 0x0046700000000000, 0x0044a00000000000, 0x0045100000000000, 0x004c800000000000, 0x004d300000000000, 0x004fe00000000000, 0x004e500000000000, 0x004a400000000000, 0x004bf00000000000, 0x0049200000000000, 0x0048900000000000, 0x00d8000000000000, 0x00d9b00000000000, 0x00db600000000000, 0x00dad00000000000, 0x00dec00000000000, 0x00df700000000000, 0x00dda00000000000, 0x00dc100000000000, 0x00d5800000000000, 0x00d4300000000000, 0x00d6e00000000000, 0x00d7500000000000, 0x00d3400000000000, 0x00d2f00000000000, 0x00d0200000000000, 0x00d1900000000000, 0x00c3000000000000, 0x00c2b00000000000, 0x00c0600000000000, 0x00c1d00000000000, 0x00c5c00000000000, 0x00c4700000000000, 0x00c6a00000000000, 0x00c7100000000000, 0x00ce800000000000, 0x00cf300000000000, 0x00cde00000000000, 0x00cc500000000000, 0x00c8400000000000, 0x00c9f00000000000, 0x00cb200000000000, 0x00ca900000000000, 0x00ee000000000000, 0x00efb00000000000, 0x00ed600000000000, 0x00ecd00000000000, 0x00e8c00000000000, 0x00e9700000000000, 0x00eba00000000000, 0x00ea100000000000, 0x00e3800000000000, 0x00e2300000000000, 0x00e0e00000000000, 0x00e1500000000000, 0x00e5400000000000, 0x00e4f00000000000, 0x00e6200000000000, 0x00e7900000000000, 0x00f5000000000000, 0x00f4b00000000000, 0x00f6600000000000, 0x00f7d00000000000, 0x00f3c00000000000, 0x00f2700000000000, 0x00f0a00000000000, 0x00f1100000000000, 0x00f8800000000000, 0x00f9300000000000, 0x00fbe00000000000, 0x00fa500000000000, 0x00fe400000000000, 0x00fff00000000000, 0x00fd200000000000, 0x00fc900000000000, 0x00b4000000000000, 0x00b5b00000000000, 0x00b7600000000000, 0x00b6d00000000000, 0x00b2c00000000000, 0x00b3700000000000, 0x00b1a00000000000, 0x00b0100000000000, 0x00b9800000000000, 0x00b8300000000000, 0x00bae00000000000, 0x00bb500000000000, 0x00bf400000000000, 0x00bef00000000000, 0x00bc200000000000, 0x00bd900000000000, 0x00af000000000000, 0x00aeb00000000000, 0x00ac600000000000, 0x00add00000000000, 0x00a9c00000000000, 0x00a8700000000000, 0x00aaa00000000000, 0x00ab100000000000, 0x00a2800000000000, 0x00a3300000000000, 0x00a1e00000000000, 0x00a0500000000000, 0x00a4400000000000, 0x00a5f00000000000, 0x00a7200000000000, 0x00a6900000000000, 0x0082000000000000, 0x0083b00000000000, 0x0081600000000000, 0x0080d00000000000, 0x0084c00000000000, 0x0085700000000000, 0x0087a00000000000, 0x0086100000000000, 0x008f800000000000, 0x008e300000000000, 0x008ce00000000000, 0x008d500000000000, 0x0089400000000000, 0x0088f00000000000, 0x008a200000000000, 0x008b900000000000, 0x0099000000000000, 0x0098b00000000000, 0x009a600000000000, 0x009bd00000000000, 0x009fc00000000000, 0x009e700000000000, 0x009ca00000000000, 0x009d100000000000, 0x0094800000000000, 0x0095300000000000, 0x0097e00000000000, 0x0096500000000000, 0x0092400000000000, 0x0093f00000000000, 0x0091200000000000, 0x0090900000000000, ], [ 0x0000000000000000, 0x000001b000000000, 0x0000036000000000, 0x000002d000000000, 0x000006c000000000, 0x0000077000000000, 0x000005a000000000, 0x0000041000000000, 0x00000d8000000000, 0x00000c3000000000, 0x00000ee000000000, 0x00000f5000000000, 0x00000b4000000000, 0x00000af000000000, 0x0000082000000000, 0x0000099000000000, 0x00001b0000000000, 0x00001ab000000000, 0x0000186000000000, 0x000019d000000000, 0x00001dc000000000, 0x00001c7000000000, 0x00001ea000000000, 0x00001f1000000000, 0x0000168000000000, 0x0000173000000000, 0x000015e000000000, 0x0000145000000000, 0x0000104000000000, 0x000011f000000000, 0x0000132000000000, 0x0000129000000000, 0x0000360000000000, 0x000037b000000000, 0x0000356000000000, 0x000034d000000000, 0x000030c000000000, 0x0000317000000000, 0x000033a000000000, 0x0000321000000000, 0x00003b8000000000, 0x00003a3000000000, 0x000038e000000000, 0x0000395000000000, 0x00003d4000000000, 0x00003cf000000000, 0x00003e2000000000, 0x00003f9000000000, 0x00002d0000000000, 0x00002cb000000000, 0x00002e6000000000, 0x00002fd000000000, 0x00002bc000000000, 0x00002a7000000000, 0x000028a000000000, 0x0000291000000000, 0x0000208000000000, 0x0000213000000000, 0x000023e000000000, 0x0000225000000000, 0x0000264000000000, 0x000027f000000000, 0x0000252000000000, 0x0000249000000000, 0x00006c0000000000, 0x00006db000000000, 0x00006f6000000000, 0x00006ed000000000, 0x00006ac000000000, 0x00006b7000000000, 0x000069a000000000, 0x0000681000000000, 0x0000618000000000, 0x0000603000000000, 0x000062e000000000, 0x0000635000000000, 0x0000674000000000, 0x000066f000000000, 0x0000642000000000, 0x0000659000000000, 0x0000770000000000, 0x000076b000000000, 0x0000746000000000, 0x000075d000000000, 0x000071c000000000, 0x0000707000000000, 0x000072a000000000, 0x0000731000000000, 0x00007a8000000000, 0x00007b3000000000, 0x000079e000000000, 0x0000785000000000, 0x00007c4000000000, 0x00007df000000000, 0x00007f2000000000, 0x00007e9000000000, 0x00005a0000000000, 0x00005bb000000000, 0x0000596000000000, 0x000058d000000000, 0x00005cc000000000, 0x00005d7000000000, 0x00005fa000000000, 0x00005e1000000000, 0x0000578000000000, 0x0000563000000000, 0x000054e000000000, 0x0000555000000000, 0x0000514000000000, 0x000050f000000000, 0x0000522000000000, 0x0000539000000000, 0x0000410000000000, 0x000040b000000000, 0x0000426000000000, 0x000043d000000000, 0x000047c000000000, 0x0000467000000000, 0x000044a000000000, 0x0000451000000000, 0x00004c8000000000, 0x00004d3000000000, 0x00004fe000000000, 0x00004e5000000000, 0x00004a4000000000, 0x00004bf000000000, 0x0000492000000000, 0x0000489000000000, 0x0000d80000000000, 0x0000d9b000000000, 0x0000db6000000000, 0x0000dad000000000, 0x0000dec000000000, 0x0000df7000000000, 0x0000dda000000000, 0x0000dc1000000000, 0x0000d58000000000, 0x0000d43000000000, 0x0000d6e000000000, 0x0000d75000000000, 0x0000d34000000000, 0x0000d2f000000000, 0x0000d02000000000, 0x0000d19000000000, 0x0000c30000000000, 0x0000c2b000000000, 0x0000c06000000000, 0x0000c1d000000000, 0x0000c5c000000000, 0x0000c47000000000, 0x0000c6a000000000, 0x0000c71000000000, 0x0000ce8000000000, 0x0000cf3000000000, 0x0000cde000000000, 0x0000cc5000000000, 0x0000c84000000000, 0x0000c9f000000000, 0x0000cb2000000000, 0x0000ca9000000000, 0x0000ee0000000000, 0x0000efb000000000, 0x0000ed6000000000, 0x0000ecd000000000, 0x0000e8c000000000, 0x0000e97000000000, 0x0000eba000000000, 0x0000ea1000000000, 0x0000e38000000000, 0x0000e23000000000, 0x0000e0e000000000, 0x0000e15000000000, 0x0000e54000000000, 0x0000e4f000000000, 0x0000e62000000000, 0x0000e79000000000, 0x0000f50000000000, 0x0000f4b000000000, 0x0000f66000000000, 0x0000f7d000000000, 0x0000f3c000000000, 0x0000f27000000000, 0x0000f0a000000000, 0x0000f11000000000, 0x0000f88000000000, 0x0000f93000000000, 0x0000fbe000000000, 0x0000fa5000000000, 0x0000fe4000000000, 0x0000fff000000000, 0x0000fd2000000000, 0x0000fc9000000000, 0x0000b40000000000, 0x0000b5b000000000, 0x0000b76000000000, 0x0000b6d000000000, 0x0000b2c000000000, 0x0000b37000000000, 0x0000b1a000000000, 0x0000b01000000000, 0x0000b98000000000, 0x0000b83000000000, 0x0000bae000000000, 0x0000bb5000000000, 0x0000bf4000000000, 0x0000bef000000000, 0x0000bc2000000000, 0x0000bd9000000000, 0x0000af0000000000, 0x0000aeb000000000, 0x0000ac6000000000, 0x0000add000000000, 0x0000a9c000000000, 0x0000a87000000000, 0x0000aaa000000000, 0x0000ab1000000000, 0x0000a28000000000, 0x0000a33000000000, 0x0000a1e000000000, 0x0000a05000000000, 0x0000a44000000000, 0x0000a5f000000000, 0x0000a72000000000, 0x0000a69000000000, 0x0000820000000000, 0x000083b000000000, 0x0000816000000000, 0x000080d000000000, 0x000084c000000000, 0x0000857000000000, 0x000087a000000000, 0x0000861000000000, 0x00008f8000000000, 0x00008e3000000000, 0x00008ce000000000, 0x00008d5000000000, 0x0000894000000000, 0x000088f000000000, 0x00008a2000000000, 0x00008b9000000000, 0x0000990000000000, 0x000098b000000000, 0x00009a6000000000, 0x00009bd000000000, 0x00009fc000000000, 0x00009e7000000000, 0x00009ca000000000, 0x00009d1000000000, 0x0000948000000000, 0x0000953000000000, 0x000097e000000000, 0x0000965000000000, 0x0000924000000000, 0x000093f000000000, 0x0000912000000000, 0x0000909000000000, ], [ 0x0000000000000000, 0x00000001b0000000, 0x0000000360000000, 0x00000002d0000000, 0x00000006c0000000, 0x0000000770000000, 0x00000005a0000000, 0x0000000410000000, 0x0000000d80000000, 0x0000000c30000000, 0x0000000ee0000000, 0x0000000f50000000, 0x0000000b40000000, 0x0000000af0000000, 0x0000000820000000, 0x0000000990000000, 0x0000001b00000000, 0x0000001ab0000000, 0x0000001860000000, 0x00000019d0000000, 0x0000001dc0000000, 0x0000001c70000000, 0x0000001ea0000000, 0x0000001f10000000, 0x0000001680000000, 0x0000001730000000, 0x00000015e0000000, 0x0000001450000000, 0x0000001040000000, 0x00000011f0000000, 0x0000001320000000, 0x0000001290000000, 0x0000003600000000, 0x00000037b0000000, 0x0000003560000000, 0x00000034d0000000, 0x00000030c0000000, 0x0000003170000000, 0x00000033a0000000, 0x0000003210000000, 0x0000003b80000000, 0x0000003a30000000, 0x00000038e0000000, 0x0000003950000000, 0x0000003d40000000, 0x0000003cf0000000, 0x0000003e20000000, 0x0000003f90000000, 0x0000002d00000000, 0x0000002cb0000000, 0x0000002e60000000, 0x0000002fd0000000, 0x0000002bc0000000, 0x0000002a70000000, 0x00000028a0000000, 0x0000002910000000, 0x0000002080000000, 0x0000002130000000, 0x00000023e0000000, 0x0000002250000000, 0x0000002640000000, 0x00000027f0000000, 0x0000002520000000, 0x0000002490000000, 0x0000006c00000000, 0x0000006db0000000, 0x0000006f60000000, 0x0000006ed0000000, 0x0000006ac0000000, 0x0000006b70000000, 0x00000069a0000000, 0x0000006810000000, 0x0000006180000000, 0x0000006030000000, 0x00000062e0000000, 0x0000006350000000, 0x0000006740000000, 0x00000066f0000000, 0x0000006420000000, 0x0000006590000000, 0x0000007700000000, 0x00000076b0000000, 0x0000007460000000, 0x00000075d0000000, 0x00000071c0000000, 0x0000007070000000, 0x00000072a0000000, 0x0000007310000000, 0x0000007a80000000, 0x0000007b30000000, 0x00000079e0000000, 0x0000007850000000, 0x0000007c40000000, 0x0000007df0000000, 0x0000007f20000000, 0x0000007e90000000, 0x0000005a00000000, 0x0000005bb0000000, 0x0000005960000000, 0x00000058d0000000, 0x0000005cc0000000, 0x0000005d70000000, 0x0000005fa0000000, 0x0000005e10000000, 0x0000005780000000, 0x0000005630000000, 0x00000054e0000000, 0x0000005550000000, 0x0000005140000000, 0x00000050f0000000, 0x0000005220000000, 0x0000005390000000, 0x0000004100000000, 0x00000040b0000000, 0x0000004260000000, 0x00000043d0000000, 0x00000047c0000000, 0x0000004670000000, 0x00000044a0000000, 0x0000004510000000, 0x0000004c80000000, 0x0000004d30000000, 0x0000004fe0000000, 0x0000004e50000000, 0x0000004a40000000, 0x0000004bf0000000, 0x0000004920000000, 0x0000004890000000, 0x000000d800000000, 0x000000d9b0000000, 0x000000db60000000, 0x000000dad0000000, 0x000000dec0000000, 0x000000df70000000, 0x000000dda0000000, 0x000000dc10000000, 0x000000d580000000, 0x000000d430000000, 0x000000d6e0000000, 0x000000d750000000, 0x000000d340000000, 0x000000d2f0000000, 0x000000d020000000, 0x000000d190000000, 0x000000c300000000, 0x000000c2b0000000, 0x000000c060000000, 0x000000c1d0000000, 0x000000c5c0000000, 0x000000c470000000, 0x000000c6a0000000, 0x000000c710000000, 0x000000ce80000000, 0x000000cf30000000, 0x000000cde0000000, 0x000000cc50000000, 0x000000c840000000, 0x000000c9f0000000, 0x000000cb20000000, 0x000000ca90000000, 0x000000ee00000000, 0x000000efb0000000, 0x000000ed60000000, 0x000000ecd0000000, 0x000000e8c0000000, 0x000000e970000000, 0x000000eba0000000, 0x000000ea10000000, 0x000000e380000000, 0x000000e230000000, 0x000000e0e0000000, 0x000000e150000000, 0x000000e540000000, 0x000000e4f0000000, 0x000000e620000000, 0x000000e790000000, 0x000000f500000000, 0x000000f4b0000000, 0x000000f660000000, 0x000000f7d0000000, 0x000000f3c0000000, 0x000000f270000000, 0x000000f0a0000000, 0x000000f110000000, 0x000000f880000000, 0x000000f930000000, 0x000000fbe0000000, 0x000000fa50000000, 0x000000fe40000000, 0x000000fff0000000, 0x000000fd20000000, 0x000000fc90000000, 0x000000b400000000, 0x000000b5b0000000, 0x000000b760000000, 0x000000b6d0000000, 0x000000b2c0000000, 0x000000b370000000, 0x000000b1a0000000, 0x000000b010000000, 0x000000b980000000, 0x000000b830000000, 0x000000bae0000000, 0x000000bb50000000, 0x000000bf40000000, 0x000000bef0000000, 0x000000bc20000000, 0x000000bd90000000, 0x000000af00000000, 0x000000aeb0000000, 0x000000ac60000000, 0x000000add0000000, 0x000000a9c0000000, 0x000000a870000000, 0x000000aaa0000000, 0x000000ab10000000, 0x000000a280000000, 0x000000a330000000, 0x000000a1e0000000, 0x000000a050000000, 0x000000a440000000, 0x000000a5f0000000, 0x000000a720000000, 0x000000a690000000, 0x0000008200000000, 0x00000083b0000000, 0x0000008160000000, 0x00000080d0000000, 0x00000084c0000000, 0x0000008570000000, 0x00000087a0000000, 0x0000008610000000, 0x0000008f80000000, 0x0000008e30000000, 0x0000008ce0000000, 0x0000008d50000000, 0x0000008940000000, 0x00000088f0000000, 0x0000008a20000000, 0x0000008b90000000, 0x0000009900000000, 0x00000098b0000000, 0x0000009a60000000, 0x0000009bd0000000, 0x0000009fc0000000, 0x0000009e70000000, 0x0000009ca0000000, 0x0000009d10000000, 0x0000009480000000, 0x0000009530000000, 0x00000097e0000000, 0x0000009650000000, 0x0000009240000000, 0x00000093f0000000, 0x0000009120000000, 0x0000009090000000, ], [ 0x0000000000000000, 0x0000000001b00000, 0x0000000003600000, 0x0000000002d00000, 0x0000000006c00000, 0x0000000007700000, 0x0000000005a00000, 0x0000000004100000, 0x000000000d800000, 0x000000000c300000, 0x000000000ee00000, 0x000000000f500000, 0x000000000b400000, 0x000000000af00000, 0x0000000008200000, 0x0000000009900000, 0x000000001b000000, 0x000000001ab00000, 0x0000000018600000, 0x0000000019d00000, 0x000000001dc00000, 0x000000001c700000, 0x000000001ea00000, 0x000000001f100000, 0x0000000016800000, 0x0000000017300000, 0x0000000015e00000, 0x0000000014500000, 0x0000000010400000, 0x0000000011f00000, 0x0000000013200000, 0x0000000012900000, 0x0000000036000000, 0x0000000037b00000, 0x0000000035600000, 0x0000000034d00000, 0x0000000030c00000, 0x0000000031700000, 0x0000000033a00000, 0x0000000032100000, 0x000000003b800000, 0x000000003a300000, 0x0000000038e00000, 0x0000000039500000, 0x000000003d400000, 0x000000003cf00000, 0x000000003e200000, 0x000000003f900000, 0x000000002d000000, 0x000000002cb00000, 0x000000002e600000, 0x000000002fd00000, 0x000000002bc00000, 0x000000002a700000, 0x0000000028a00000, 0x0000000029100000, 0x0000000020800000, 0x0000000021300000, 0x0000000023e00000, 0x0000000022500000, 0x0000000026400000, 0x0000000027f00000, 0x0000000025200000, 0x0000000024900000, 0x000000006c000000, 0x000000006db00000, 0x000000006f600000, 0x000000006ed00000, 0x000000006ac00000, 0x000000006b700000, 0x0000000069a00000, 0x0000000068100000, 0x0000000061800000, 0x0000000060300000, 0x0000000062e00000, 0x0000000063500000, 0x0000000067400000, 0x0000000066f00000, 0x0000000064200000, 0x0000000065900000, 0x0000000077000000, 0x0000000076b00000, 0x0000000074600000, 0x0000000075d00000, 0x0000000071c00000, 0x0000000070700000, 0x0000000072a00000, 0x0000000073100000, 0x000000007a800000, 0x000000007b300000, 0x0000000079e00000, 0x0000000078500000, 0x000000007c400000, 0x000000007df00000, 0x000000007f200000, 0x000000007e900000, 0x000000005a000000, 0x000000005bb00000, 0x0000000059600000, 0x0000000058d00000, 0x000000005cc00000, 0x000000005d700000, 0x000000005fa00000, 0x000000005e100000, 0x0000000057800000, 0x0000000056300000, 0x0000000054e00000, 0x0000000055500000, 0x0000000051400000, 0x0000000050f00000, 0x0000000052200000, 0x0000000053900000, 0x0000000041000000, 0x0000000040b00000, 0x0000000042600000, 0x0000000043d00000, 0x0000000047c00000, 0x0000000046700000, 0x0000000044a00000, 0x0000000045100000, 0x000000004c800000, 0x000000004d300000, 0x000000004fe00000, 0x000000004e500000, 0x000000004a400000, 0x000000004bf00000, 0x0000000049200000, 0x0000000048900000, 0x00000000d8000000, 0x00000000d9b00000, 0x00000000db600000, 0x00000000dad00000, 0x00000000dec00000, 0x00000000df700000, 0x00000000dda00000, 0x00000000dc100000, 0x00000000d5800000, 0x00000000d4300000, 0x00000000d6e00000, 0x00000000d7500000, 0x00000000d3400000, 0x00000000d2f00000, 0x00000000d0200000, 0x00000000d1900000, 0x00000000c3000000, 0x00000000c2b00000, 0x00000000c0600000, 0x00000000c1d00000, 0x00000000c5c00000, 0x00000000c4700000, 0x00000000c6a00000, 0x00000000c7100000, 0x00000000ce800000, 0x00000000cf300000, 0x00000000cde00000, 0x00000000cc500000, 0x00000000c8400000, 0x00000000c9f00000, 0x00000000cb200000, 0x00000000ca900000, 0x00000000ee000000, 0x00000000efb00000, 0x00000000ed600000, 0x00000000ecd00000, 0x00000000e8c00000, 0x00000000e9700000, 0x00000000eba00000, 0x00000000ea100000, 0x00000000e3800000, 0x00000000e2300000, 0x00000000e0e00000, 0x00000000e1500000, 0x00000000e5400000, 0x00000000e4f00000, 0x00000000e6200000, 0x00000000e7900000, 0x00000000f5000000, 0x00000000f4b00000, 0x00000000f6600000, 0x00000000f7d00000, 0x00000000f3c00000, 0x00000000f2700000, 0x00000000f0a00000, 0x00000000f1100000, 0x00000000f8800000, 0x00000000f9300000, 0x00000000fbe00000, 0x00000000fa500000, 0x00000000fe400000, 0x00000000fff00000, 0x00000000fd200000, 0x00000000fc900000, 0x00000000b4000000, 0x00000000b5b00000, 0x00000000b7600000, 0x00000000b6d00000, 0x00000000b2c00000, 0x00000000b3700000, 0x00000000b1a00000, 0x00000000b0100000, 0x00000000b9800000, 0x00000000b8300000, 0x00000000bae00000, 0x00000000bb500000, 0x00000000bf400000, 0x00000000bef00000, 0x00000000bc200000, 0x00000000bd900000, 0x00000000af000000, 0x00000000aeb00000, 0x00000000ac600000, 0x00000000add00000, 0x00000000a9c00000, 0x00000000a8700000, 0x00000000aaa00000, 0x00000000ab100000, 0x00000000a2800000, 0x00000000a3300000, 0x00000000a1e00000, 0x00000000a0500000, 0x00000000a4400000, 0x00000000a5f00000, 0x00000000a7200000, 0x00000000a6900000, 0x0000000082000000, 0x0000000083b00000, 0x0000000081600000, 0x0000000080d00000, 0x0000000084c00000, 0x0000000085700000, 0x0000000087a00000, 0x0000000086100000, 0x000000008f800000, 0x000000008e300000, 0x000000008ce00000, 0x000000008d500000, 0x0000000089400000, 0x0000000088f00000, 0x000000008a200000, 0x000000008b900000, 0x0000000099000000, 0x0000000098b00000, 0x000000009a600000, 0x000000009bd00000, 0x000000009fc00000, 0x000000009e700000, 0x000000009ca00000, 0x000000009d100000, 0x0000000094800000, 0x0000000095300000, 0x0000000097e00000, 0x0000000096500000, 0x0000000092400000, 0x0000000093f00000, 0x0000000091200000, 0x0000000090900000, ], [ 0x0000000000000000, 0x000000000001b000, 0x0000000000036000, 0x000000000002d000, 0x000000000006c000, 0x0000000000077000, 0x000000000005a000, 0x0000000000041000, 0x00000000000d8000, 0x00000000000c3000, 0x00000000000ee000, 0x00000000000f5000, 0x00000000000b4000, 0x00000000000af000, 0x0000000000082000, 0x0000000000099000, 0x00000000001b0000, 0x00000000001ab000, 0x0000000000186000, 0x000000000019d000, 0x00000000001dc000, 0x00000000001c7000, 0x00000000001ea000, 0x00000000001f1000, 0x0000000000168000, 0x0000000000173000, 0x000000000015e000, 0x0000000000145000, 0x0000000000104000, 0x000000000011f000, 0x0000000000132000, 0x0000000000129000, 0x0000000000360000, 0x000000000037b000, 0x0000000000356000, 0x000000000034d000, 0x000000000030c000, 0x0000000000317000, 0x000000000033a000, 0x0000000000321000, 0x00000000003b8000, 0x00000000003a3000, 0x000000000038e000, 0x0000000000395000, 0x00000000003d4000, 0x00000000003cf000, 0x00000000003e2000, 0x00000000003f9000, 0x00000000002d0000, 0x00000000002cb000, 0x00000000002e6000, 0x00000000002fd000, 0x00000000002bc000, 0x00000000002a7000, 0x000000000028a000, 0x0000000000291000, 0x0000000000208000, 0x0000000000213000, 0x000000000023e000, 0x0000000000225000, 0x0000000000264000, 0x000000000027f000, 0x0000000000252000, 0x0000000000249000, 0x00000000006c0000, 0x00000000006db000, 0x00000000006f6000, 0x00000000006ed000, 0x00000000006ac000, 0x00000000006b7000, 0x000000000069a000, 0x0000000000681000, 0x0000000000618000, 0x0000000000603000, 0x000000000062e000, 0x0000000000635000, 0x0000000000674000, 0x000000000066f000, 0x0000000000642000, 0x0000000000659000, 0x0000000000770000, 0x000000000076b000, 0x0000000000746000, 0x000000000075d000, 0x000000000071c000, 0x0000000000707000, 0x000000000072a000, 0x0000000000731000, 0x00000000007a8000, 0x00000000007b3000, 0x000000000079e000, 0x0000000000785000, 0x00000000007c4000, 0x00000000007df000, 0x00000000007f2000, 0x00000000007e9000, 0x00000000005a0000, 0x00000000005bb000, 0x0000000000596000, 0x000000000058d000, 0x00000000005cc000, 0x00000000005d7000, 0x00000000005fa000, 0x00000000005e1000, 0x0000000000578000, 0x0000000000563000, 0x000000000054e000, 0x0000000000555000, 0x0000000000514000, 0x000000000050f000, 0x0000000000522000, 0x0000000000539000, 0x0000000000410000, 0x000000000040b000, 0x0000000000426000, 0x000000000043d000, 0x000000000047c000, 0x0000000000467000, 0x000000000044a000, 0x0000000000451000, 0x00000000004c8000, 0x00000000004d3000, 0x00000000004fe000, 0x00000000004e5000, 0x00000000004a4000, 0x00000000004bf000, 0x0000000000492000, 0x0000000000489000, 0x0000000000d80000, 0x0000000000d9b000, 0x0000000000db6000, 0x0000000000dad000, 0x0000000000dec000, 0x0000000000df7000, 0x0000000000dda000, 0x0000000000dc1000, 0x0000000000d58000, 0x0000000000d43000, 0x0000000000d6e000, 0x0000000000d75000, 0x0000000000d34000, 0x0000000000d2f000, 0x0000000000d02000, 0x0000000000d19000, 0x0000000000c30000, 0x0000000000c2b000, 0x0000000000c06000, 0x0000000000c1d000, 0x0000000000c5c000, 0x0000000000c47000, 0x0000000000c6a000, 0x0000000000c71000, 0x0000000000ce8000, 0x0000000000cf3000, 0x0000000000cde000, 0x0000000000cc5000, 0x0000000000c84000, 0x0000000000c9f000, 0x0000000000cb2000, 0x0000000000ca9000, 0x0000000000ee0000, 0x0000000000efb000, 0x0000000000ed6000, 0x0000000000ecd000, 0x0000000000e8c000, 0x0000000000e97000, 0x0000000000eba000, 0x0000000000ea1000, 0x0000000000e38000, 0x0000000000e23000, 0x0000000000e0e000, 0x0000000000e15000, 0x0000000000e54000, 0x0000000000e4f000, 0x0000000000e62000, 0x0000000000e79000, 0x0000000000f50000, 0x0000000000f4b000, 0x0000000000f66000, 0x0000000000f7d000, 0x0000000000f3c000, 0x0000000000f27000, 0x0000000000f0a000, 0x0000000000f11000, 0x0000000000f88000, 0x0000000000f93000, 0x0000000000fbe000, 0x0000000000fa5000, 0x0000000000fe4000, 0x0000000000fff000, 0x0000000000fd2000, 0x0000000000fc9000, 0x0000000000b40000, 0x0000000000b5b000, 0x0000000000b76000, 0x0000000000b6d000, 0x0000000000b2c000, 0x0000000000b37000, 0x0000000000b1a000, 0x0000000000b01000, 0x0000000000b98000, 0x0000000000b83000, 0x0000000000bae000, 0x0000000000bb5000, 0x0000000000bf4000, 0x0000000000bef000, 0x0000000000bc2000, 0x0000000000bd9000, 0x0000000000af0000, 0x0000000000aeb000, 0x0000000000ac6000, 0x0000000000add000, 0x0000000000a9c000, 0x0000000000a87000, 0x0000000000aaa000, 0x0000000000ab1000, 0x0000000000a28000, 0x0000000000a33000, 0x0000000000a1e000, 0x0000000000a05000, 0x0000000000a44000, 0x0000000000a5f000, 0x0000000000a72000, 0x0000000000a69000, 0x0000000000820000, 0x000000000083b000, 0x0000000000816000, 0x000000000080d000, 0x000000000084c000, 0x0000000000857000, 0x000000000087a000, 0x0000000000861000, 0x00000000008f8000, 0x00000000008e3000, 0x00000000008ce000, 0x00000000008d5000, 0x0000000000894000, 0x000000000088f000, 0x00000000008a2000, 0x00000000008b9000, 0x0000000000990000, 0x000000000098b000, 0x00000000009a6000, 0x00000000009bd000, 0x00000000009fc000, 0x00000000009e7000, 0x00000000009ca000, 0x00000000009d1000, 0x0000000000948000, 0x0000000000953000, 0x000000000097e000, 0x0000000000965000, 0x0000000000924000, 0x000000000093f000, 0x0000000000912000, 0x0000000000909000, ], [ 0x0000000000000000, 0x00000000000001b0, 0x0000000000000360, 0x00000000000002d0, 0x00000000000006c0, 0x0000000000000770, 0x00000000000005a0, 0x0000000000000410, 0x0000000000000d80, 0x0000000000000c30, 0x0000000000000ee0, 0x0000000000000f50, 0x0000000000000b40, 0x0000000000000af0, 0x0000000000000820, 0x0000000000000990, 0x0000000000001b00, 0x0000000000001ab0, 0x0000000000001860, 0x00000000000019d0, 0x0000000000001dc0, 0x0000000000001c70, 0x0000000000001ea0, 0x0000000000001f10, 0x0000000000001680, 0x0000000000001730, 0x00000000000015e0, 0x0000000000001450, 0x0000000000001040, 0x00000000000011f0, 0x0000000000001320, 0x0000000000001290, 0x0000000000003600, 0x00000000000037b0, 0x0000000000003560, 0x00000000000034d0, 0x00000000000030c0, 0x0000000000003170, 0x00000000000033a0, 0x0000000000003210, 0x0000000000003b80, 0x0000000000003a30, 0x00000000000038e0, 0x0000000000003950, 0x0000000000003d40, 0x0000000000003cf0, 0x0000000000003e20, 0x0000000000003f90, 0x0000000000002d00, 0x0000000000002cb0, 0x0000000000002e60, 0x0000000000002fd0, 0x0000000000002bc0, 0x0000000000002a70, 0x00000000000028a0, 0x0000000000002910, 0x0000000000002080, 0x0000000000002130, 0x00000000000023e0, 0x0000000000002250, 0x0000000000002640, 0x00000000000027f0, 0x0000000000002520, 0x0000000000002490, 0x0000000000006c00, 0x0000000000006db0, 0x0000000000006f60, 0x0000000000006ed0, 0x0000000000006ac0, 0x0000000000006b70, 0x00000000000069a0, 0x0000000000006810, 0x0000000000006180, 0x0000000000006030, 0x00000000000062e0, 0x0000000000006350, 0x0000000000006740, 0x00000000000066f0, 0x0000000000006420, 0x0000000000006590, 0x0000000000007700, 0x00000000000076b0, 0x0000000000007460, 0x00000000000075d0, 0x00000000000071c0, 0x0000000000007070, 0x00000000000072a0, 0x0000000000007310, 0x0000000000007a80, 0x0000000000007b30, 0x00000000000079e0, 0x0000000000007850, 0x0000000000007c40, 0x0000000000007df0, 0x0000000000007f20, 0x0000000000007e90, 0x0000000000005a00, 0x0000000000005bb0, 0x0000000000005960, 0x00000000000058d0, 0x0000000000005cc0, 0x0000000000005d70, 0x0000000000005fa0, 0x0000000000005e10, 0x0000000000005780, 0x0000000000005630, 0x00000000000054e0, 0x0000000000005550, 0x0000000000005140, 0x00000000000050f0, 0x0000000000005220, 0x0000000000005390, 0x0000000000004100, 0x00000000000040b0, 0x0000000000004260, 0x00000000000043d0, 0x00000000000047c0, 0x0000000000004670, 0x00000000000044a0, 0x0000000000004510, 0x0000000000004c80, 0x0000000000004d30, 0x0000000000004fe0, 0x0000000000004e50, 0x0000000000004a40, 0x0000000000004bf0, 0x0000000000004920, 0x0000000000004890, 0x000000000000d800, 0x000000000000d9b0, 0x000000000000db60, 0x000000000000dad0, 0x000000000000dec0, 0x000000000000df70, 0x000000000000dda0, 0x000000000000dc10, 0x000000000000d580, 0x000000000000d430, 0x000000000000d6e0, 0x000000000000d750, 0x000000000000d340, 0x000000000000d2f0, 0x000000000000d020, 0x000000000000d190, 0x000000000000c300, 0x000000000000c2b0, 0x000000000000c060, 0x000000000000c1d0, 0x000000000000c5c0, 0x000000000000c470, 0x000000000000c6a0, 0x000000000000c710, 0x000000000000ce80, 0x000000000000cf30, 0x000000000000cde0, 0x000000000000cc50, 0x000000000000c840, 0x000000000000c9f0, 0x000000000000cb20, 0x000000000000ca90, 0x000000000000ee00, 0x000000000000efb0, 0x000000000000ed60, 0x000000000000ecd0, 0x000000000000e8c0, 0x000000000000e970, 0x000000000000eba0, 0x000000000000ea10, 0x000000000000e380, 0x000000000000e230, 0x000000000000e0e0, 0x000000000000e150, 0x000000000000e540, 0x000000000000e4f0, 0x000000000000e620, 0x000000000000e790, 0x000000000000f500, 0x000000000000f4b0, 0x000000000000f660, 0x000000000000f7d0, 0x000000000000f3c0, 0x000000000000f270, 0x000000000000f0a0, 0x000000000000f110, 0x000000000000f880, 0x000000000000f930, 0x000000000000fbe0, 0x000000000000fa50, 0x000000000000fe40, 0x000000000000fff0, 0x000000000000fd20, 0x000000000000fc90, 0x000000000000b400, 0x000000000000b5b0, 0x000000000000b760, 0x000000000000b6d0, 0x000000000000b2c0, 0x000000000000b370, 0x000000000000b1a0, 0x000000000000b010, 0x000000000000b980, 0x000000000000b830, 0x000000000000bae0, 0x000000000000bb50, 0x000000000000bf40, 0x000000000000bef0, 0x000000000000bc20, 0x000000000000bd90, 0x000000000000af00, 0x000000000000aeb0, 0x000000000000ac60, 0x000000000000add0, 0x000000000000a9c0, 0x000000000000a870, 0x000000000000aaa0, 0x000000000000ab10, 0x000000000000a280, 0x000000000000a330, 0x000000000000a1e0, 0x000000000000a050, 0x000000000000a440, 0x000000000000a5f0, 0x000000000000a720, 0x000000000000a690, 0x0000000000008200, 0x00000000000083b0, 0x0000000000008160, 0x00000000000080d0, 0x00000000000084c0, 0x0000000000008570, 0x00000000000087a0, 0x0000000000008610, 0x0000000000008f80, 0x0000000000008e30, 0x0000000000008ce0, 0x0000000000008d50, 0x0000000000008940, 0x00000000000088f0, 0x0000000000008a20, 0x0000000000008b90, 0x0000000000009900, 0x00000000000098b0, 0x0000000000009a60, 0x0000000000009bd0, 0x0000000000009fc0, 0x0000000000009e70, 0x0000000000009ca0, 0x0000000000009d10, 0x0000000000009480, 0x0000000000009530, 0x00000000000097e0, 0x0000000000009650, 0x0000000000009240, 0x00000000000093f0, 0x0000000000009120, 0x0000000000009090, ], [ 0x0000000000000000, 0xf500000000000001, 0x5a00000000000003, 0xaf00000000000002, 0xb400000000000006, 0x4100000000000007, 0xee00000000000005, 0x1b00000000000004, 0xd80000000000000d, 0x2d0000000000000c, 0x820000000000000e, 0x770000000000000f, 0x6c0000000000000b, 0x990000000000000a, 0x3600000000000008, 0xc300000000000009, 0x000000000000001b, 0xf50000000000001a, 0x5a00000000000018, 0xaf00000000000019, 0xb40000000000001d, 0x410000000000001c, 0xee0000000000001e, 0x1b0000000000001f, 0xd800000000000016, 0x2d00000000000017, 0x8200000000000015, 0x7700000000000014, 0x6c00000000000010, 0x9900000000000011, 0x3600000000000013, 0xc300000000000012, 0x0000000000000036, 0xf500000000000037, 0x5a00000000000035, 0xaf00000000000034, 0xb400000000000030, 0x4100000000000031, 0xee00000000000033, 0x1b00000000000032, 0xd80000000000003b, 0x2d0000000000003a, 0x8200000000000038, 0x7700000000000039, 0x6c0000000000003d, 0x990000000000003c, 0x360000000000003e, 0xc30000000000003f, 0x000000000000002d, 0xf50000000000002c, 0x5a0000000000002e, 0xaf0000000000002f, 0xb40000000000002b, 0x410000000000002a, 0xee00000000000028, 0x1b00000000000029, 0xd800000000000020, 0x2d00000000000021, 0x8200000000000023, 0x7700000000000022, 0x6c00000000000026, 0x9900000000000027, 0x3600000000000025, 0xc300000000000024, 0x000000000000006c, 0xf50000000000006d, 0x5a0000000000006f, 0xaf0000000000006e, 0xb40000000000006a, 0x410000000000006b, 0xee00000000000069, 0x1b00000000000068, 0xd800000000000061, 0x2d00000000000060, 0x8200000000000062, 0x7700000000000063, 0x6c00000000000067, 0x9900000000000066, 0x3600000000000064, 0xc300000000000065, 0x0000000000000077, 0xf500000000000076, 0x5a00000000000074, 0xaf00000000000075, 0xb400000000000071, 0x4100000000000070, 0xee00000000000072, 0x1b00000000000073, 0xd80000000000007a, 0x2d0000000000007b, 0x8200000000000079, 0x7700000000000078, 0x6c0000000000007c, 0x990000000000007d, 0x360000000000007f, 0xc30000000000007e, 0x000000000000005a, 0xf50000000000005b, 0x5a00000000000059, 0xaf00000000000058, 0xb40000000000005c, 0x410000000000005d, 0xee0000000000005f, 0x1b0000000000005e, 0xd800000000000057, 0x2d00000000000056, 0x8200000000000054, 0x7700000000000055, 0x6c00000000000051, 0x9900000000000050, 0x3600000000000052, 0xc300000000000053, 0x0000000000000041, 0xf500000000000040, 0x5a00000000000042, 0xaf00000000000043, 0xb400000000000047, 0x4100000000000046, 0xee00000000000044, 0x1b00000000000045, 0xd80000000000004c, 0x2d0000000000004d, 0x820000000000004f, 0x770000000000004e, 0x6c0000000000004a, 0x990000000000004b, 0x3600000000000049, 0xc300000000000048, 0x00000000000000d8, 0xf5000000000000d9, 0x5a000000000000db, 0xaf000000000000da, 0xb4000000000000de, 0x41000000000000df, 0xee000000000000dd, 0x1b000000000000dc, 0xd8000000000000d5, 0x2d000000000000d4, 0x82000000000000d6, 0x77000000000000d7, 0x6c000000000000d3, 0x99000000000000d2, 0x36000000000000d0, 0xc3000000000000d1, 0x00000000000000c3, 0xf5000000000000c2, 0x5a000000000000c0, 0xaf000000000000c1, 0xb4000000000000c5, 0x41000000000000c4, 0xee000000000000c6, 0x1b000000000000c7, 0xd8000000000000ce, 0x2d000000000000cf, 0x82000000000000cd, 0x77000000000000cc, 0x6c000000000000c8, 0x99000000000000c9, 0x36000000000000cb, 0xc3000000000000ca, 0x00000000000000ee, 0xf5000000000000ef, 0x5a000000000000ed, 0xaf000000000000ec, 0xb4000000000000e8, 0x41000000000000e9, 0xee000000000000eb, 0x1b000000000000ea, 0xd8000000000000e3, 0x2d000000000000e2, 0x82000000000000e0, 0x77000000000000e1, 0x6c000000000000e5, 0x99000000000000e4, 0x36000000000000e6, 0xc3000000000000e7, 0x00000000000000f5, 0xf5000000000000f4, 0x5a000000000000f6, 0xaf000000000000f7, 0xb4000000000000f3, 0x41000000000000f2, 0xee000000000000f0, 0x1b000000000000f1, 0xd8000000000000f8, 0x2d000000000000f9, 0x82000000000000fb, 0x77000000000000fa, 0x6c000000000000fe, 0x99000000000000ff, 0x36000000000000fd, 0xc3000000000000fc, 0x00000000000000b4, 0xf5000000000000b5, 0x5a000000000000b7, 0xaf000000000000b6, 0xb4000000000000b2, 0x41000000000000b3, 0xee000000000000b1, 0x1b000000000000b0, 0xd8000000000000b9, 0x2d000000000000b8, 0x82000000000000ba, 0x77000000000000bb, 0x6c000000000000bf, 0x99000000000000be, 0x36000000000000bc, 0xc3000000000000bd, 0x00000000000000af, 0xf5000000000000ae, 0x5a000000000000ac, 0xaf000000000000ad, 0xb4000000000000a9, 0x41000000000000a8, 0xee000000000000aa, 0x1b000000000000ab, 0xd8000000000000a2, 0x2d000000000000a3, 0x82000000000000a1, 0x77000000000000a0, 0x6c000000000000a4, 0x99000000000000a5, 0x36000000000000a7, 0xc3000000000000a6, 0x0000000000000082, 0xf500000000000083, 0x5a00000000000081, 0xaf00000000000080, 0xb400000000000084, 0x4100000000000085, 0xee00000000000087, 0x1b00000000000086, 0xd80000000000008f, 0x2d0000000000008e, 0x820000000000008c, 0x770000000000008d, 0x6c00000000000089, 0x9900000000000088, 0x360000000000008a, 0xc30000000000008b, 0x0000000000000099, 0xf500000000000098, 0x5a0000000000009a, 0xaf0000000000009b, 0xb40000000000009f, 0x410000000000009e, 0xee0000000000009c, 0x1b0000000000009d, 0xd800000000000094, 0x2d00000000000095, 0x8200000000000097, 0x7700000000000096, 0x6c00000000000092, 0x9900000000000093, 0x3600000000000091, 0xc300000000000090, ], [ 0x0000000000000000, 0x0145000000000000, 0x028a000000000000, 0x03cf000000000000, 0x0514000000000000, 0x0451000000000000, 0x079e000000000000, 0x06db000000000000, 0x0a28000000000000, 0x0b6d000000000000, 0x08a2000000000000, 0x09e7000000000000, 0x0f3c000000000000, 0x0e79000000000000, 0x0db6000000000000, 0x0cf3000000000000, 0x1450000000000000, 0x1515000000000000, 0x16da000000000000, 0x179f000000000000, 0x1144000000000000, 0x1001000000000000, 0x13ce000000000000, 0x128b000000000000, 0x1e78000000000000, 0x1f3d000000000000, 0x1cf2000000000000, 0x1db7000000000000, 0x1b6c000000000000, 0x1a29000000000000, 0x19e6000000000000, 0x18a3000000000000, 0x28a0000000000000, 0x29e5000000000000, 0x2a2a000000000000, 0x2b6f000000000000, 0x2db4000000000000, 0x2cf1000000000000, 0x2f3e000000000000, 0x2e7b000000000000, 0x2288000000000000, 0x23cd000000000000, 0x2002000000000000, 0x2147000000000000, 0x279c000000000000, 0x26d9000000000000, 0x2516000000000000, 0x2453000000000000, 0x3cf0000000000000, 0x3db5000000000000, 0x3e7a000000000000, 0x3f3f000000000000, 0x39e4000000000000, 0x38a1000000000000, 0x3b6e000000000000, 0x3a2b000000000000, 0x36d8000000000000, 0x379d000000000000, 0x3452000000000000, 0x3517000000000000, 0x33cc000000000000, 0x3289000000000000, 0x3146000000000000, 0x3003000000000000, 0x5140000000000000, 0x5005000000000000, 0x53ca000000000000, 0x528f000000000000, 0x5454000000000000, 0x5511000000000000, 0x56de000000000000, 0x579b000000000000, 0x5b68000000000000, 0x5a2d000000000000, 0x59e2000000000000, 0x58a7000000000000, 0x5e7c000000000000, 0x5f39000000000000, 0x5cf6000000000000, 0x5db3000000000000, 0x4510000000000000, 0x4455000000000000, 0x479a000000000000, 0x46df000000000000, 0x4004000000000000, 0x4141000000000000, 0x428e000000000000, 0x43cb000000000000, 0x4f38000000000000, 0x4e7d000000000000, 0x4db2000000000000, 0x4cf7000000000000, 0x4a2c000000000000, 0x4b69000000000000, 0x48a6000000000000, 0x49e3000000000000, 0x79e0000000000000, 0x78a5000000000000, 0x7b6a000000000000, 0x7a2f000000000000, 0x7cf4000000000000, 0x7db1000000000000, 0x7e7e000000000000, 0x7f3b000000000000, 0x73c8000000000000, 0x728d000000000000, 0x7142000000000000, 0x7007000000000000, 0x76dc000000000000, 0x7799000000000000, 0x7456000000000000, 0x7513000000000000, 0x6db0000000000000, 0x6cf5000000000000, 0x6f3a000000000000, 0x6e7f000000000000, 0x68a4000000000000, 0x69e1000000000000, 0x6a2e000000000000, 0x6b6b000000000000, 0x6798000000000000, 0x66dd000000000000, 0x6512000000000000, 0x6457000000000000, 0x628c000000000000, 0x63c9000000000000, 0x6006000000000000, 0x6143000000000000, 0xa280000000000000, 0xa3c5000000000000, 0xa00a000000000000, 0xa14f000000000000, 0xa794000000000000, 0xa6d1000000000000, 0xa51e000000000000, 0xa45b000000000000, 0xa8a8000000000000, 0xa9ed000000000000, 0xaa22000000000000, 0xab67000000000000, 0xadbc000000000000, 0xacf9000000000000, 0xaf36000000000000, 0xae73000000000000, 0xb6d0000000000000, 0xb795000000000000, 0xb45a000000000000, 0xb51f000000000000, 0xb3c4000000000000, 0xb281000000000000, 0xb14e000000000000, 0xb00b000000000000, 0xbcf8000000000000, 0xbdbd000000000000, 0xbe72000000000000, 0xbf37000000000000, 0xb9ec000000000000, 0xb8a9000000000000, 0xbb66000000000000, 0xba23000000000000, 0x8a20000000000000, 0x8b65000000000000, 0x88aa000000000000, 0x89ef000000000000, 0x8f34000000000000, 0x8e71000000000000, 0x8dbe000000000000, 0x8cfb000000000000, 0x8008000000000000, 0x814d000000000000, 0x8282000000000000, 0x83c7000000000000, 0x851c000000000000, 0x8459000000000000, 0x8796000000000000, 0x86d3000000000000, 0x9e70000000000000, 0x9f35000000000000, 0x9cfa000000000000, 0x9dbf000000000000, 0x9b64000000000000, 0x9a21000000000000, 0x99ee000000000000, 0x98ab000000000000, 0x9458000000000000, 0x951d000000000000, 0x96d2000000000000, 0x9797000000000000, 0x914c000000000000, 0x9009000000000000, 0x93c6000000000000, 0x9283000000000000, 0xf3c0000000000000, 0xf285000000000000, 0xf14a000000000000, 0xf00f000000000000, 0xf6d4000000000000, 0xf791000000000000, 0xf45e000000000000, 0xf51b000000000000, 0xf9e8000000000000, 0xf8ad000000000000, 0xfb62000000000000, 0xfa27000000000000, 0xfcfc000000000000, 0xfdb9000000000000, 0xfe76000000000000, 0xff33000000000000, 0xe790000000000000, 0xe6d5000000000000, 0xe51a000000000000, 0xe45f000000000000, 0xe284000000000000, 0xe3c1000000000000, 0xe00e000000000000, 0xe14b000000000000, 0xedb8000000000000, 0xecfd000000000000, 0xef32000000000000, 0xee77000000000000, 0xe8ac000000000000, 0xe9e9000000000000, 0xea26000000000000, 0xeb63000000000000, 0xdb60000000000000, 0xda25000000000000, 0xd9ea000000000000, 0xd8af000000000000, 0xde74000000000000, 0xdf31000000000000, 0xdcfe000000000000, 0xddbb000000000000, 0xd148000000000000, 0xd00d000000000000, 0xd3c2000000000000, 0xd287000000000000, 0xd45c000000000000, 0xd519000000000000, 0xd6d6000000000000, 0xd793000000000000, 0xcf30000000000000, 0xce75000000000000, 0xcdba000000000000, 0xccff000000000000, 0xca24000000000000, 0xcb61000000000000, 0xc8ae000000000000, 0xc9eb000000000000, 0xc518000000000000, 0xc45d000000000000, 0xc792000000000000, 0xc6d7000000000000, 0xc00c000000000000, 0xc149000000000000, 0xc286000000000000, 0xc3c3000000000000, ], [ 0x0000000000000000, 0x0001450000000000, 0x00028a0000000000, 0x0003cf0000000000, 0x0005140000000000, 0x0004510000000000, 0x00079e0000000000, 0x0006db0000000000, 0x000a280000000000, 0x000b6d0000000000, 0x0008a20000000000, 0x0009e70000000000, 0x000f3c0000000000, 0x000e790000000000, 0x000db60000000000, 0x000cf30000000000, 0x0014500000000000, 0x0015150000000000, 0x0016da0000000000, 0x00179f0000000000, 0x0011440000000000, 0x0010010000000000, 0x0013ce0000000000, 0x00128b0000000000, 0x001e780000000000, 0x001f3d0000000000, 0x001cf20000000000, 0x001db70000000000, 0x001b6c0000000000, 0x001a290000000000, 0x0019e60000000000, 0x0018a30000000000, 0x0028a00000000000, 0x0029e50000000000, 0x002a2a0000000000, 0x002b6f0000000000, 0x002db40000000000, 0x002cf10000000000, 0x002f3e0000000000, 0x002e7b0000000000, 0x0022880000000000, 0x0023cd0000000000, 0x0020020000000000, 0x0021470000000000, 0x00279c0000000000, 0x0026d90000000000, 0x0025160000000000, 0x0024530000000000, 0x003cf00000000000, 0x003db50000000000, 0x003e7a0000000000, 0x003f3f0000000000, 0x0039e40000000000, 0x0038a10000000000, 0x003b6e0000000000, 0x003a2b0000000000, 0x0036d80000000000, 0x00379d0000000000, 0x0034520000000000, 0x0035170000000000, 0x0033cc0000000000, 0x0032890000000000, 0x0031460000000000, 0x0030030000000000, 0x0051400000000000, 0x0050050000000000, 0x0053ca0000000000, 0x00528f0000000000, 0x0054540000000000, 0x0055110000000000, 0x0056de0000000000, 0x00579b0000000000, 0x005b680000000000, 0x005a2d0000000000, 0x0059e20000000000, 0x0058a70000000000, 0x005e7c0000000000, 0x005f390000000000, 0x005cf60000000000, 0x005db30000000000, 0x0045100000000000, 0x0044550000000000, 0x00479a0000000000, 0x0046df0000000000, 0x0040040000000000, 0x0041410000000000, 0x00428e0000000000, 0x0043cb0000000000, 0x004f380000000000, 0x004e7d0000000000, 0x004db20000000000, 0x004cf70000000000, 0x004a2c0000000000, 0x004b690000000000, 0x0048a60000000000, 0x0049e30000000000, 0x0079e00000000000, 0x0078a50000000000, 0x007b6a0000000000, 0x007a2f0000000000, 0x007cf40000000000, 0x007db10000000000, 0x007e7e0000000000, 0x007f3b0000000000, 0x0073c80000000000, 0x00728d0000000000, 0x0071420000000000, 0x0070070000000000, 0x0076dc0000000000, 0x0077990000000000, 0x0074560000000000, 0x0075130000000000, 0x006db00000000000, 0x006cf50000000000, 0x006f3a0000000000, 0x006e7f0000000000, 0x0068a40000000000, 0x0069e10000000000, 0x006a2e0000000000, 0x006b6b0000000000, 0x0067980000000000, 0x0066dd0000000000, 0x0065120000000000, 0x0064570000000000, 0x00628c0000000000, 0x0063c90000000000, 0x0060060000000000, 0x0061430000000000, 0x00a2800000000000, 0x00a3c50000000000, 0x00a00a0000000000, 0x00a14f0000000000, 0x00a7940000000000, 0x00a6d10000000000, 0x00a51e0000000000, 0x00a45b0000000000, 0x00a8a80000000000, 0x00a9ed0000000000, 0x00aa220000000000, 0x00ab670000000000, 0x00adbc0000000000, 0x00acf90000000000, 0x00af360000000000, 0x00ae730000000000, 0x00b6d00000000000, 0x00b7950000000000, 0x00b45a0000000000, 0x00b51f0000000000, 0x00b3c40000000000, 0x00b2810000000000, 0x00b14e0000000000, 0x00b00b0000000000, 0x00bcf80000000000, 0x00bdbd0000000000, 0x00be720000000000, 0x00bf370000000000, 0x00b9ec0000000000, 0x00b8a90000000000, 0x00bb660000000000, 0x00ba230000000000, 0x008a200000000000, 0x008b650000000000, 0x0088aa0000000000, 0x0089ef0000000000, 0x008f340000000000, 0x008e710000000000, 0x008dbe0000000000, 0x008cfb0000000000, 0x0080080000000000, 0x00814d0000000000, 0x0082820000000000, 0x0083c70000000000, 0x00851c0000000000, 0x0084590000000000, 0x0087960000000000, 0x0086d30000000000, 0x009e700000000000, 0x009f350000000000, 0x009cfa0000000000, 0x009dbf0000000000, 0x009b640000000000, 0x009a210000000000, 0x0099ee0000000000, 0x0098ab0000000000, 0x0094580000000000, 0x00951d0000000000, 0x0096d20000000000, 0x0097970000000000, 0x00914c0000000000, 0x0090090000000000, 0x0093c60000000000, 0x0092830000000000, 0x00f3c00000000000, 0x00f2850000000000, 0x00f14a0000000000, 0x00f00f0000000000, 0x00f6d40000000000, 0x00f7910000000000, 0x00f45e0000000000, 0x00f51b0000000000, 0x00f9e80000000000, 0x00f8ad0000000000, 0x00fb620000000000, 0x00fa270000000000, 0x00fcfc0000000000, 0x00fdb90000000000, 0x00fe760000000000, 0x00ff330000000000, 0x00e7900000000000, 0x00e6d50000000000, 0x00e51a0000000000, 0x00e45f0000000000, 0x00e2840000000000, 0x00e3c10000000000, 0x00e00e0000000000, 0x00e14b0000000000, 0x00edb80000000000, 0x00ecfd0000000000, 0x00ef320000000000, 0x00ee770000000000, 0x00e8ac0000000000, 0x00e9e90000000000, 0x00ea260000000000, 0x00eb630000000000, 0x00db600000000000, 0x00da250000000000, 0x00d9ea0000000000, 0x00d8af0000000000, 0x00de740000000000, 0x00df310000000000, 0x00dcfe0000000000, 0x00ddbb0000000000, 0x00d1480000000000, 0x00d00d0000000000, 0x00d3c20000000000, 0x00d2870000000000, 0x00d45c0000000000, 0x00d5190000000000, 0x00d6d60000000000, 0x00d7930000000000, 0x00cf300000000000, 0x00ce750000000000, 0x00cdba0000000000, 0x00ccff0000000000, 0x00ca240000000000, 0x00cb610000000000, 0x00c8ae0000000000, 0x00c9eb0000000000, 0x00c5180000000000, 0x00c45d0000000000, 0x00c7920000000000, 0x00c6d70000000000, 0x00c00c0000000000, 0x00c1490000000000, 0x00c2860000000000, 0x00c3c30000000000, ], [ 0x0000000000000000, 0x0000014500000000, 0x0000028a00000000, 0x000003cf00000000, 0x0000051400000000, 0x0000045100000000, 0x0000079e00000000, 0x000006db00000000, 0x00000a2800000000, 0x00000b6d00000000, 0x000008a200000000, 0x000009e700000000, 0x00000f3c00000000, 0x00000e7900000000, 0x00000db600000000, 0x00000cf300000000, 0x0000145000000000, 0x0000151500000000, 0x000016da00000000, 0x0000179f00000000, 0x0000114400000000, 0x0000100100000000, 0x000013ce00000000, 0x0000128b00000000, 0x00001e7800000000, 0x00001f3d00000000, 0x00001cf200000000, 0x00001db700000000, 0x00001b6c00000000, 0x00001a2900000000, 0x000019e600000000, 0x000018a300000000, 0x000028a000000000, 0x000029e500000000, 0x00002a2a00000000, 0x00002b6f00000000, 0x00002db400000000, 0x00002cf100000000, 0x00002f3e00000000, 0x00002e7b00000000, 0x0000228800000000, 0x000023cd00000000, 0x0000200200000000, 0x0000214700000000, 0x0000279c00000000, 0x000026d900000000, 0x0000251600000000, 0x0000245300000000, 0x00003cf000000000, 0x00003db500000000, 0x00003e7a00000000, 0x00003f3f00000000, 0x000039e400000000, 0x000038a100000000, 0x00003b6e00000000, 0x00003a2b00000000, 0x000036d800000000, 0x0000379d00000000, 0x0000345200000000, 0x0000351700000000, 0x000033cc00000000, 0x0000328900000000, 0x0000314600000000, 0x0000300300000000, 0x0000514000000000, 0x0000500500000000, 0x000053ca00000000, 0x0000528f00000000, 0x0000545400000000, 0x0000551100000000, 0x000056de00000000, 0x0000579b00000000, 0x00005b6800000000, 0x00005a2d00000000, 0x000059e200000000, 0x000058a700000000, 0x00005e7c00000000, 0x00005f3900000000, 0x00005cf600000000, 0x00005db300000000, 0x0000451000000000, 0x0000445500000000, 0x0000479a00000000, 0x000046df00000000, 0x0000400400000000, 0x0000414100000000, 0x0000428e00000000, 0x000043cb00000000, 0x00004f3800000000, 0x00004e7d00000000, 0x00004db200000000, 0x00004cf700000000, 0x00004a2c00000000, 0x00004b6900000000, 0x000048a600000000, 0x000049e300000000, 0x000079e000000000, 0x000078a500000000, 0x00007b6a00000000, 0x00007a2f00000000, 0x00007cf400000000, 0x00007db100000000, 0x00007e7e00000000, 0x00007f3b00000000, 0x000073c800000000, 0x0000728d00000000, 0x0000714200000000, 0x0000700700000000, 0x000076dc00000000, 0x0000779900000000, 0x0000745600000000, 0x0000751300000000, 0x00006db000000000, 0x00006cf500000000, 0x00006f3a00000000, 0x00006e7f00000000, 0x000068a400000000, 0x000069e100000000, 0x00006a2e00000000, 0x00006b6b00000000, 0x0000679800000000, 0x000066dd00000000, 0x0000651200000000, 0x0000645700000000, 0x0000628c00000000, 0x000063c900000000, 0x0000600600000000, 0x0000614300000000, 0x0000a28000000000, 0x0000a3c500000000, 0x0000a00a00000000, 0x0000a14f00000000, 0x0000a79400000000, 0x0000a6d100000000, 0x0000a51e00000000, 0x0000a45b00000000, 0x0000a8a800000000, 0x0000a9ed00000000, 0x0000aa2200000000, 0x0000ab6700000000, 0x0000adbc00000000, 0x0000acf900000000, 0x0000af3600000000, 0x0000ae7300000000, 0x0000b6d000000000, 0x0000b79500000000, 0x0000b45a00000000, 0x0000b51f00000000, 0x0000b3c400000000, 0x0000b28100000000, 0x0000b14e00000000, 0x0000b00b00000000, 0x0000bcf800000000, 0x0000bdbd00000000, 0x0000be7200000000, 0x0000bf3700000000, 0x0000b9ec00000000, 0x0000b8a900000000, 0x0000bb6600000000, 0x0000ba2300000000, 0x00008a2000000000, 0x00008b6500000000, 0x000088aa00000000, 0x000089ef00000000, 0x00008f3400000000, 0x00008e7100000000, 0x00008dbe00000000, 0x00008cfb00000000, 0x0000800800000000, 0x0000814d00000000, 0x0000828200000000, 0x000083c700000000, 0x0000851c00000000, 0x0000845900000000, 0x0000879600000000, 0x000086d300000000, 0x00009e7000000000, 0x00009f3500000000, 0x00009cfa00000000, 0x00009dbf00000000, 0x00009b6400000000, 0x00009a2100000000, 0x000099ee00000000, 0x000098ab00000000, 0x0000945800000000, 0x0000951d00000000, 0x000096d200000000, 0x0000979700000000, 0x0000914c00000000, 0x0000900900000000, 0x000093c600000000, 0x0000928300000000, 0x0000f3c000000000, 0x0000f28500000000, 0x0000f14a00000000, 0x0000f00f00000000, 0x0000f6d400000000, 0x0000f79100000000, 0x0000f45e00000000, 0x0000f51b00000000, 0x0000f9e800000000, 0x0000f8ad00000000, 0x0000fb6200000000, 0x0000fa2700000000, 0x0000fcfc00000000, 0x0000fdb900000000, 0x0000fe7600000000, 0x0000ff3300000000, 0x0000e79000000000, 0x0000e6d500000000, 0x0000e51a00000000, 0x0000e45f00000000, 0x0000e28400000000, 0x0000e3c100000000, 0x0000e00e00000000, 0x0000e14b00000000, 0x0000edb800000000, 0x0000ecfd00000000, 0x0000ef3200000000, 0x0000ee7700000000, 0x0000e8ac00000000, 0x0000e9e900000000, 0x0000ea2600000000, 0x0000eb6300000000, 0x0000db6000000000, 0x0000da2500000000, 0x0000d9ea00000000, 0x0000d8af00000000, 0x0000de7400000000, 0x0000df3100000000, 0x0000dcfe00000000, 0x0000ddbb00000000, 0x0000d14800000000, 0x0000d00d00000000, 0x0000d3c200000000, 0x0000d28700000000, 0x0000d45c00000000, 0x0000d51900000000, 0x0000d6d600000000, 0x0000d79300000000, 0x0000cf3000000000, 0x0000ce7500000000, 0x0000cdba00000000, 0x0000ccff00000000, 0x0000ca2400000000, 0x0000cb6100000000, 0x0000c8ae00000000, 0x0000c9eb00000000, 0x0000c51800000000, 0x0000c45d00000000, 0x0000c79200000000, 0x0000c6d700000000, 0x0000c00c00000000, 0x0000c14900000000, 0x0000c28600000000, 0x0000c3c300000000, ], [ 0x0000000000000000, 0x0000000145000000, 0x000000028a000000, 0x00000003cf000000, 0x0000000514000000, 0x0000000451000000, 0x000000079e000000, 0x00000006db000000, 0x0000000a28000000, 0x0000000b6d000000, 0x00000008a2000000, 0x00000009e7000000, 0x0000000f3c000000, 0x0000000e79000000, 0x0000000db6000000, 0x0000000cf3000000, 0x0000001450000000, 0x0000001515000000, 0x00000016da000000, 0x000000179f000000, 0x0000001144000000, 0x0000001001000000, 0x00000013ce000000, 0x000000128b000000, 0x0000001e78000000, 0x0000001f3d000000, 0x0000001cf2000000, 0x0000001db7000000, 0x0000001b6c000000, 0x0000001a29000000, 0x00000019e6000000, 0x00000018a3000000, 0x00000028a0000000, 0x00000029e5000000, 0x0000002a2a000000, 0x0000002b6f000000, 0x0000002db4000000, 0x0000002cf1000000, 0x0000002f3e000000, 0x0000002e7b000000, 0x0000002288000000, 0x00000023cd000000, 0x0000002002000000, 0x0000002147000000, 0x000000279c000000, 0x00000026d9000000, 0x0000002516000000, 0x0000002453000000, 0x0000003cf0000000, 0x0000003db5000000, 0x0000003e7a000000, 0x0000003f3f000000, 0x00000039e4000000, 0x00000038a1000000, 0x0000003b6e000000, 0x0000003a2b000000, 0x00000036d8000000, 0x000000379d000000, 0x0000003452000000, 0x0000003517000000, 0x00000033cc000000, 0x0000003289000000, 0x0000003146000000, 0x0000003003000000, 0x0000005140000000, 0x0000005005000000, 0x00000053ca000000, 0x000000528f000000, 0x0000005454000000, 0x0000005511000000, 0x00000056de000000, 0x000000579b000000, 0x0000005b68000000, 0x0000005a2d000000, 0x00000059e2000000, 0x00000058a7000000, 0x0000005e7c000000, 0x0000005f39000000, 0x0000005cf6000000, 0x0000005db3000000, 0x0000004510000000, 0x0000004455000000, 0x000000479a000000, 0x00000046df000000, 0x0000004004000000, 0x0000004141000000, 0x000000428e000000, 0x00000043cb000000, 0x0000004f38000000, 0x0000004e7d000000, 0x0000004db2000000, 0x0000004cf7000000, 0x0000004a2c000000, 0x0000004b69000000, 0x00000048a6000000, 0x00000049e3000000, 0x00000079e0000000, 0x00000078a5000000, 0x0000007b6a000000, 0x0000007a2f000000, 0x0000007cf4000000, 0x0000007db1000000, 0x0000007e7e000000, 0x0000007f3b000000, 0x00000073c8000000, 0x000000728d000000, 0x0000007142000000, 0x0000007007000000, 0x00000076dc000000, 0x0000007799000000, 0x0000007456000000, 0x0000007513000000, 0x0000006db0000000, 0x0000006cf5000000, 0x0000006f3a000000, 0x0000006e7f000000, 0x00000068a4000000, 0x00000069e1000000, 0x0000006a2e000000, 0x0000006b6b000000, 0x0000006798000000, 0x00000066dd000000, 0x0000006512000000, 0x0000006457000000, 0x000000628c000000, 0x00000063c9000000, 0x0000006006000000, 0x0000006143000000, 0x000000a280000000, 0x000000a3c5000000, 0x000000a00a000000, 0x000000a14f000000, 0x000000a794000000, 0x000000a6d1000000, 0x000000a51e000000, 0x000000a45b000000, 0x000000a8a8000000, 0x000000a9ed000000, 0x000000aa22000000, 0x000000ab67000000, 0x000000adbc000000, 0x000000acf9000000, 0x000000af36000000, 0x000000ae73000000, 0x000000b6d0000000, 0x000000b795000000, 0x000000b45a000000, 0x000000b51f000000, 0x000000b3c4000000, 0x000000b281000000, 0x000000b14e000000, 0x000000b00b000000, 0x000000bcf8000000, 0x000000bdbd000000, 0x000000be72000000, 0x000000bf37000000, 0x000000b9ec000000, 0x000000b8a9000000, 0x000000bb66000000, 0x000000ba23000000, 0x0000008a20000000, 0x0000008b65000000, 0x00000088aa000000, 0x00000089ef000000, 0x0000008f34000000, 0x0000008e71000000, 0x0000008dbe000000, 0x0000008cfb000000, 0x0000008008000000, 0x000000814d000000, 0x0000008282000000, 0x00000083c7000000, 0x000000851c000000, 0x0000008459000000, 0x0000008796000000, 0x00000086d3000000, 0x0000009e70000000, 0x0000009f35000000, 0x0000009cfa000000, 0x0000009dbf000000, 0x0000009b64000000, 0x0000009a21000000, 0x00000099ee000000, 0x00000098ab000000, 0x0000009458000000, 0x000000951d000000, 0x00000096d2000000, 0x0000009797000000, 0x000000914c000000, 0x0000009009000000, 0x00000093c6000000, 0x0000009283000000, 0x000000f3c0000000, 0x000000f285000000, 0x000000f14a000000, 0x000000f00f000000, 0x000000f6d4000000, 0x000000f791000000, 0x000000f45e000000, 0x000000f51b000000, 0x000000f9e8000000, 0x000000f8ad000000, 0x000000fb62000000, 0x000000fa27000000, 0x000000fcfc000000, 0x000000fdb9000000, 0x000000fe76000000, 0x000000ff33000000, 0x000000e790000000, 0x000000e6d5000000, 0x000000e51a000000, 0x000000e45f000000, 0x000000e284000000, 0x000000e3c1000000, 0x000000e00e000000, 0x000000e14b000000, 0x000000edb8000000, 0x000000ecfd000000, 0x000000ef32000000, 0x000000ee77000000, 0x000000e8ac000000, 0x000000e9e9000000, 0x000000ea26000000, 0x000000eb63000000, 0x000000db60000000, 0x000000da25000000, 0x000000d9ea000000, 0x000000d8af000000, 0x000000de74000000, 0x000000df31000000, 0x000000dcfe000000, 0x000000ddbb000000, 0x000000d148000000, 0x000000d00d000000, 0x000000d3c2000000, 0x000000d287000000, 0x000000d45c000000, 0x000000d519000000, 0x000000d6d6000000, 0x000000d793000000, 0x000000cf30000000, 0x000000ce75000000, 0x000000cdba000000, 0x000000ccff000000, 0x000000ca24000000, 0x000000cb61000000, 0x000000c8ae000000, 0x000000c9eb000000, 0x000000c518000000, 0x000000c45d000000, 0x000000c792000000, 0x000000c6d7000000, 0x000000c00c000000, 0x000000c149000000, 0x000000c286000000, 0x000000c3c3000000, ], [ 0x0000000000000000, 0x0000000001450000, 0x00000000028a0000, 0x0000000003cf0000, 0x0000000005140000, 0x0000000004510000, 0x00000000079e0000, 0x0000000006db0000, 0x000000000a280000, 0x000000000b6d0000, 0x0000000008a20000, 0x0000000009e70000, 0x000000000f3c0000, 0x000000000e790000, 0x000000000db60000, 0x000000000cf30000, 0x0000000014500000, 0x0000000015150000, 0x0000000016da0000, 0x00000000179f0000, 0x0000000011440000, 0x0000000010010000, 0x0000000013ce0000, 0x00000000128b0000, 0x000000001e780000, 0x000000001f3d0000, 0x000000001cf20000, 0x000000001db70000, 0x000000001b6c0000, 0x000000001a290000, 0x0000000019e60000, 0x0000000018a30000, 0x0000000028a00000, 0x0000000029e50000, 0x000000002a2a0000, 0x000000002b6f0000, 0x000000002db40000, 0x000000002cf10000, 0x000000002f3e0000, 0x000000002e7b0000, 0x0000000022880000, 0x0000000023cd0000, 0x0000000020020000, 0x0000000021470000, 0x00000000279c0000, 0x0000000026d90000, 0x0000000025160000, 0x0000000024530000, 0x000000003cf00000, 0x000000003db50000, 0x000000003e7a0000, 0x000000003f3f0000, 0x0000000039e40000, 0x0000000038a10000, 0x000000003b6e0000, 0x000000003a2b0000, 0x0000000036d80000, 0x00000000379d0000, 0x0000000034520000, 0x0000000035170000, 0x0000000033cc0000, 0x0000000032890000, 0x0000000031460000, 0x0000000030030000, 0x0000000051400000, 0x0000000050050000, 0x0000000053ca0000, 0x00000000528f0000, 0x0000000054540000, 0x0000000055110000, 0x0000000056de0000, 0x00000000579b0000, 0x000000005b680000, 0x000000005a2d0000, 0x0000000059e20000, 0x0000000058a70000, 0x000000005e7c0000, 0x000000005f390000, 0x000000005cf60000, 0x000000005db30000, 0x0000000045100000, 0x0000000044550000, 0x00000000479a0000, 0x0000000046df0000, 0x0000000040040000, 0x0000000041410000, 0x00000000428e0000, 0x0000000043cb0000, 0x000000004f380000, 0x000000004e7d0000, 0x000000004db20000, 0x000000004cf70000, 0x000000004a2c0000, 0x000000004b690000, 0x0000000048a60000, 0x0000000049e30000, 0x0000000079e00000, 0x0000000078a50000, 0x000000007b6a0000, 0x000000007a2f0000, 0x000000007cf40000, 0x000000007db10000, 0x000000007e7e0000, 0x000000007f3b0000, 0x0000000073c80000, 0x00000000728d0000, 0x0000000071420000, 0x0000000070070000, 0x0000000076dc0000, 0x0000000077990000, 0x0000000074560000, 0x0000000075130000, 0x000000006db00000, 0x000000006cf50000, 0x000000006f3a0000, 0x000000006e7f0000, 0x0000000068a40000, 0x0000000069e10000, 0x000000006a2e0000, 0x000000006b6b0000, 0x0000000067980000, 0x0000000066dd0000, 0x0000000065120000, 0x0000000064570000, 0x00000000628c0000, 0x0000000063c90000, 0x0000000060060000, 0x0000000061430000, 0x00000000a2800000, 0x00000000a3c50000, 0x00000000a00a0000, 0x00000000a14f0000, 0x00000000a7940000, 0x00000000a6d10000, 0x00000000a51e0000, 0x00000000a45b0000, 0x00000000a8a80000, 0x00000000a9ed0000, 0x00000000aa220000, 0x00000000ab670000, 0x00000000adbc0000, 0x00000000acf90000, 0x00000000af360000, 0x00000000ae730000, 0x00000000b6d00000, 0x00000000b7950000, 0x00000000b45a0000, 0x00000000b51f0000, 0x00000000b3c40000, 0x00000000b2810000, 0x00000000b14e0000, 0x00000000b00b0000, 0x00000000bcf80000, 0x00000000bdbd0000, 0x00000000be720000, 0x00000000bf370000, 0x00000000b9ec0000, 0x00000000b8a90000, 0x00000000bb660000, 0x00000000ba230000, 0x000000008a200000, 0x000000008b650000, 0x0000000088aa0000, 0x0000000089ef0000, 0x000000008f340000, 0x000000008e710000, 0x000000008dbe0000, 0x000000008cfb0000, 0x0000000080080000, 0x00000000814d0000, 0x0000000082820000, 0x0000000083c70000, 0x00000000851c0000, 0x0000000084590000, 0x0000000087960000, 0x0000000086d30000, 0x000000009e700000, 0x000000009f350000, 0x000000009cfa0000, 0x000000009dbf0000, 0x000000009b640000, 0x000000009a210000, 0x0000000099ee0000, 0x0000000098ab0000, 0x0000000094580000, 0x00000000951d0000, 0x0000000096d20000, 0x0000000097970000, 0x00000000914c0000, 0x0000000090090000, 0x0000000093c60000, 0x0000000092830000, 0x00000000f3c00000, 0x00000000f2850000, 0x00000000f14a0000, 0x00000000f00f0000, 0x00000000f6d40000, 0x00000000f7910000, 0x00000000f45e0000, 0x00000000f51b0000, 0x00000000f9e80000, 0x00000000f8ad0000, 0x00000000fb620000, 0x00000000fa270000, 0x00000000fcfc0000, 0x00000000fdb90000, 0x00000000fe760000, 0x00000000ff330000, 0x00000000e7900000, 0x00000000e6d50000, 0x00000000e51a0000, 0x00000000e45f0000, 0x00000000e2840000, 0x00000000e3c10000, 0x00000000e00e0000, 0x00000000e14b0000, 0x00000000edb80000, 0x00000000ecfd0000, 0x00000000ef320000, 0x00000000ee770000, 0x00000000e8ac0000, 0x00000000e9e90000, 0x00000000ea260000, 0x00000000eb630000, 0x00000000db600000, 0x00000000da250000, 0x00000000d9ea0000, 0x00000000d8af0000, 0x00000000de740000, 0x00000000df310000, 0x00000000dcfe0000, 0x00000000ddbb0000, 0x00000000d1480000, 0x00000000d00d0000, 0x00000000d3c20000, 0x00000000d2870000, 0x00000000d45c0000, 0x00000000d5190000, 0x00000000d6d60000, 0x00000000d7930000, 0x00000000cf300000, 0x00000000ce750000, 0x00000000cdba0000, 0x00000000ccff0000, 0x00000000ca240000, 0x00000000cb610000, 0x00000000c8ae0000, 0x00000000c9eb0000, 0x00000000c5180000, 0x00000000c45d0000, 0x00000000c7920000, 0x00000000c6d70000, 0x00000000c00c0000, 0x00000000c1490000, 0x00000000c2860000, 0x00000000c3c30000, ], [ 0x0000000000000000, 0x0000000000014500, 0x0000000000028a00, 0x000000000003cf00, 0x0000000000051400, 0x0000000000045100, 0x0000000000079e00, 0x000000000006db00, 0x00000000000a2800, 0x00000000000b6d00, 0x000000000008a200, 0x000000000009e700, 0x00000000000f3c00, 0x00000000000e7900, 0x00000000000db600, 0x00000000000cf300, 0x0000000000145000, 0x0000000000151500, 0x000000000016da00, 0x0000000000179f00, 0x0000000000114400, 0x0000000000100100, 0x000000000013ce00, 0x0000000000128b00, 0x00000000001e7800, 0x00000000001f3d00, 0x00000000001cf200, 0x00000000001db700, 0x00000000001b6c00, 0x00000000001a2900, 0x000000000019e600, 0x000000000018a300, 0x000000000028a000, 0x000000000029e500, 0x00000000002a2a00, 0x00000000002b6f00, 0x00000000002db400, 0x00000000002cf100, 0x00000000002f3e00, 0x00000000002e7b00, 0x0000000000228800, 0x000000000023cd00, 0x0000000000200200, 0x0000000000214700, 0x0000000000279c00, 0x000000000026d900, 0x0000000000251600, 0x0000000000245300, 0x00000000003cf000, 0x00000000003db500, 0x00000000003e7a00, 0x00000000003f3f00, 0x000000000039e400, 0x000000000038a100, 0x00000000003b6e00, 0x00000000003a2b00, 0x000000000036d800, 0x0000000000379d00, 0x0000000000345200, 0x0000000000351700, 0x000000000033cc00, 0x0000000000328900, 0x0000000000314600, 0x0000000000300300, 0x0000000000514000, 0x0000000000500500, 0x000000000053ca00, 0x0000000000528f00, 0x0000000000545400, 0x0000000000551100, 0x000000000056de00, 0x0000000000579b00, 0x00000000005b6800, 0x00000000005a2d00, 0x000000000059e200, 0x000000000058a700, 0x00000000005e7c00, 0x00000000005f3900, 0x00000000005cf600, 0x00000000005db300, 0x0000000000451000, 0x0000000000445500, 0x0000000000479a00, 0x000000000046df00, 0x0000000000400400, 0x0000000000414100, 0x0000000000428e00, 0x000000000043cb00, 0x00000000004f3800, 0x00000000004e7d00, 0x00000000004db200, 0x00000000004cf700, 0x00000000004a2c00, 0x00000000004b6900, 0x000000000048a600, 0x000000000049e300, 0x000000000079e000, 0x000000000078a500, 0x00000000007b6a00, 0x00000000007a2f00, 0x00000000007cf400, 0x00000000007db100, 0x00000000007e7e00, 0x00000000007f3b00, 0x000000000073c800, 0x0000000000728d00, 0x0000000000714200, 0x0000000000700700, 0x000000000076dc00, 0x0000000000779900, 0x0000000000745600, 0x0000000000751300, 0x00000000006db000, 0x00000000006cf500, 0x00000000006f3a00, 0x00000000006e7f00, 0x000000000068a400, 0x000000000069e100, 0x00000000006a2e00, 0x00000000006b6b00, 0x0000000000679800, 0x000000000066dd00, 0x0000000000651200, 0x0000000000645700, 0x0000000000628c00, 0x000000000063c900, 0x0000000000600600, 0x0000000000614300, 0x0000000000a28000, 0x0000000000a3c500, 0x0000000000a00a00, 0x0000000000a14f00, 0x0000000000a79400, 0x0000000000a6d100, 0x0000000000a51e00, 0x0000000000a45b00, 0x0000000000a8a800, 0x0000000000a9ed00, 0x0000000000aa2200, 0x0000000000ab6700, 0x0000000000adbc00, 0x0000000000acf900, 0x0000000000af3600, 0x0000000000ae7300, 0x0000000000b6d000, 0x0000000000b79500, 0x0000000000b45a00, 0x0000000000b51f00, 0x0000000000b3c400, 0x0000000000b28100, 0x0000000000b14e00, 0x0000000000b00b00, 0x0000000000bcf800, 0x0000000000bdbd00, 0x0000000000be7200, 0x0000000000bf3700, 0x0000000000b9ec00, 0x0000000000b8a900, 0x0000000000bb6600, 0x0000000000ba2300, 0x00000000008a2000, 0x00000000008b6500, 0x000000000088aa00, 0x000000000089ef00, 0x00000000008f3400, 0x00000000008e7100, 0x00000000008dbe00, 0x00000000008cfb00, 0x0000000000800800, 0x0000000000814d00, 0x0000000000828200, 0x000000000083c700, 0x0000000000851c00, 0x0000000000845900, 0x0000000000879600, 0x000000000086d300, 0x00000000009e7000, 0x00000000009f3500, 0x00000000009cfa00, 0x00000000009dbf00, 0x00000000009b6400, 0x00000000009a2100, 0x000000000099ee00, 0x000000000098ab00, 0x0000000000945800, 0x0000000000951d00, 0x000000000096d200, 0x0000000000979700, 0x0000000000914c00, 0x0000000000900900, 0x000000000093c600, 0x0000000000928300, 0x0000000000f3c000, 0x0000000000f28500, 0x0000000000f14a00, 0x0000000000f00f00, 0x0000000000f6d400, 0x0000000000f79100, 0x0000000000f45e00, 0x0000000000f51b00, 0x0000000000f9e800, 0x0000000000f8ad00, 0x0000000000fb6200, 0x0000000000fa2700, 0x0000000000fcfc00, 0x0000000000fdb900, 0x0000000000fe7600, 0x0000000000ff3300, 0x0000000000e79000, 0x0000000000e6d500, 0x0000000000e51a00, 0x0000000000e45f00, 0x0000000000e28400, 0x0000000000e3c100, 0x0000000000e00e00, 0x0000000000e14b00, 0x0000000000edb800, 0x0000000000ecfd00, 0x0000000000ef3200, 0x0000000000ee7700, 0x0000000000e8ac00, 0x0000000000e9e900, 0x0000000000ea2600, 0x0000000000eb6300, 0x0000000000db6000, 0x0000000000da2500, 0x0000000000d9ea00, 0x0000000000d8af00, 0x0000000000de7400, 0x0000000000df3100, 0x0000000000dcfe00, 0x0000000000ddbb00, 0x0000000000d14800, 0x0000000000d00d00, 0x0000000000d3c200, 0x0000000000d28700, 0x0000000000d45c00, 0x0000000000d51900, 0x0000000000d6d600, 0x0000000000d79300, 0x0000000000cf3000, 0x0000000000ce7500, 0x0000000000cdba00, 0x0000000000ccff00, 0x0000000000ca2400, 0x0000000000cb6100, 0x0000000000c8ae00, 0x0000000000c9eb00, 0x0000000000c51800, 0x0000000000c45d00, 0x0000000000c79200, 0x0000000000c6d700, 0x0000000000c00c00, 0x0000000000c14900, 0x0000000000c28600, 0x0000000000c3c300, ], [ 0x0000000000000000, 0x0000000000000145, 0x000000000000028a, 0x00000000000003cf, 0x0000000000000514, 0x0000000000000451, 0x000000000000079e, 0x00000000000006db, 0x0000000000000a28, 0x0000000000000b6d, 0x00000000000008a2, 0x00000000000009e7, 0x0000000000000f3c, 0x0000000000000e79, 0x0000000000000db6, 0x0000000000000cf3, 0x0000000000001450, 0x0000000000001515, 0x00000000000016da, 0x000000000000179f, 0x0000000000001144, 0x0000000000001001, 0x00000000000013ce, 0x000000000000128b, 0x0000000000001e78, 0x0000000000001f3d, 0x0000000000001cf2, 0x0000000000001db7, 0x0000000000001b6c, 0x0000000000001a29, 0x00000000000019e6, 0x00000000000018a3, 0x00000000000028a0, 0x00000000000029e5, 0x0000000000002a2a, 0x0000000000002b6f, 0x0000000000002db4, 0x0000000000002cf1, 0x0000000000002f3e, 0x0000000000002e7b, 0x0000000000002288, 0x00000000000023cd, 0x0000000000002002, 0x0000000000002147, 0x000000000000279c, 0x00000000000026d9, 0x0000000000002516, 0x0000000000002453, 0x0000000000003cf0, 0x0000000000003db5, 0x0000000000003e7a, 0x0000000000003f3f, 0x00000000000039e4, 0x00000000000038a1, 0x0000000000003b6e, 0x0000000000003a2b, 0x00000000000036d8, 0x000000000000379d, 0x0000000000003452, 0x0000000000003517, 0x00000000000033cc, 0x0000000000003289, 0x0000000000003146, 0x0000000000003003, 0x0000000000005140, 0x0000000000005005, 0x00000000000053ca, 0x000000000000528f, 0x0000000000005454, 0x0000000000005511, 0x00000000000056de, 0x000000000000579b, 0x0000000000005b68, 0x0000000000005a2d, 0x00000000000059e2, 0x00000000000058a7, 0x0000000000005e7c, 0x0000000000005f39, 0x0000000000005cf6, 0x0000000000005db3, 0x0000000000004510, 0x0000000000004455, 0x000000000000479a, 0x00000000000046df, 0x0000000000004004, 0x0000000000004141, 0x000000000000428e, 0x00000000000043cb, 0x0000000000004f38, 0x0000000000004e7d, 0x0000000000004db2, 0x0000000000004cf7, 0x0000000000004a2c, 0x0000000000004b69, 0x00000000000048a6, 0x00000000000049e3, 0x00000000000079e0, 0x00000000000078a5, 0x0000000000007b6a, 0x0000000000007a2f, 0x0000000000007cf4, 0x0000000000007db1, 0x0000000000007e7e, 0x0000000000007f3b, 0x00000000000073c8, 0x000000000000728d, 0x0000000000007142, 0x0000000000007007, 0x00000000000076dc, 0x0000000000007799, 0x0000000000007456, 0x0000000000007513, 0x0000000000006db0, 0x0000000000006cf5, 0x0000000000006f3a, 0x0000000000006e7f, 0x00000000000068a4, 0x00000000000069e1, 0x0000000000006a2e, 0x0000000000006b6b, 0x0000000000006798, 0x00000000000066dd, 0x0000000000006512, 0x0000000000006457, 0x000000000000628c, 0x00000000000063c9, 0x0000000000006006, 0x0000000000006143, 0x000000000000a280, 0x000000000000a3c5, 0x000000000000a00a, 0x000000000000a14f, 0x000000000000a794, 0x000000000000a6d1, 0x000000000000a51e, 0x000000000000a45b, 0x000000000000a8a8, 0x000000000000a9ed, 0x000000000000aa22, 0x000000000000ab67, 0x000000000000adbc, 0x000000000000acf9, 0x000000000000af36, 0x000000000000ae73, 0x000000000000b6d0, 0x000000000000b795, 0x000000000000b45a, 0x000000000000b51f, 0x000000000000b3c4, 0x000000000000b281, 0x000000000000b14e, 0x000000000000b00b, 0x000000000000bcf8, 0x000000000000bdbd, 0x000000000000be72, 0x000000000000bf37, 0x000000000000b9ec, 0x000000000000b8a9, 0x000000000000bb66, 0x000000000000ba23, 0x0000000000008a20, 0x0000000000008b65, 0x00000000000088aa, 0x00000000000089ef, 0x0000000000008f34, 0x0000000000008e71, 0x0000000000008dbe, 0x0000000000008cfb, 0x0000000000008008, 0x000000000000814d, 0x0000000000008282, 0x00000000000083c7, 0x000000000000851c, 0x0000000000008459, 0x0000000000008796, 0x00000000000086d3, 0x0000000000009e70, 0x0000000000009f35, 0x0000000000009cfa, 0x0000000000009dbf, 0x0000000000009b64, 0x0000000000009a21, 0x00000000000099ee, 0x00000000000098ab, 0x0000000000009458, 0x000000000000951d, 0x00000000000096d2, 0x0000000000009797, 0x000000000000914c, 0x0000000000009009, 0x00000000000093c6, 0x0000000000009283, 0x000000000000f3c0, 0x000000000000f285, 0x000000000000f14a, 0x000000000000f00f, 0x000000000000f6d4, 0x000000000000f791, 0x000000000000f45e, 0x000000000000f51b, 0x000000000000f9e8, 0x000000000000f8ad, 0x000000000000fb62, 0x000000000000fa27, 0x000000000000fcfc, 0x000000000000fdb9, 0x000000000000fe76, 0x000000000000ff33, 0x000000000000e790, 0x000000000000e6d5, 0x000000000000e51a, 0x000000000000e45f, 0x000000000000e284, 0x000000000000e3c1, 0x000000000000e00e, 0x000000000000e14b, 0x000000000000edb8, 0x000000000000ecfd, 0x000000000000ef32, 0x000000000000ee77, 0x000000000000e8ac, 0x000000000000e9e9, 0x000000000000ea26, 0x000000000000eb63, 0x000000000000db60, 0x000000000000da25, 0x000000000000d9ea, 0x000000000000d8af, 0x000000000000de74, 0x000000000000df31, 0x000000000000dcfe, 0x000000000000ddbb, 0x000000000000d148, 0x000000000000d00d, 0x000000000000d3c2, 0x000000000000d287, 0x000000000000d45c, 0x000000000000d519, 0x000000000000d6d6, 0x000000000000d793, 0x000000000000cf30, 0x000000000000ce75, 0x000000000000cdba, 0x000000000000ccff, 0x000000000000ca24, 0x000000000000cb61, 0x000000000000c8ae, 0x000000000000c9eb, 0x000000000000c518, 0x000000000000c45d, 0x000000000000c792, 0x000000000000c6d7, 0x000000000000c00c, 0x000000000000c149, 0x000000000000c286, 0x000000000000c3c3, ], [ 0x0000000000000000, 0x6b70000000000001, 0xd6e0000000000002, 0xbd90000000000003, 0x1dc0000000000005, 0x76b0000000000004, 0xcb20000000000007, 0xa050000000000006, 0x3b8000000000000a, 0x50f000000000000b, 0xed60000000000008, 0x8610000000000009, 0x264000000000000f, 0x4d3000000000000e, 0xf0a000000000000d, 0x9bd000000000000c, 0x7700000000000014, 0x1c70000000000015, 0xa1e0000000000016, 0xca90000000000017, 0x6ac0000000000011, 0x01b0000000000010, 0xbc20000000000013, 0xd750000000000012, 0x4c8000000000001e, 0x27f000000000001f, 0x9a6000000000001c, 0xf11000000000001d, 0x514000000000001b, 0x3a3000000000001a, 0x87a0000000000019, 0xecd0000000000018, 0xee00000000000028, 0x8570000000000029, 0x38e000000000002a, 0x539000000000002b, 0xf3c000000000002d, 0x98b000000000002c, 0x252000000000002f, 0x4e5000000000002e, 0xd580000000000022, 0xbef0000000000023, 0x0360000000000020, 0x6810000000000021, 0xc840000000000027, 0xa330000000000026, 0x1ea0000000000025, 0x75d0000000000024, 0x990000000000003c, 0xf27000000000003d, 0x4fe000000000003e, 0x249000000000003f, 0x84c0000000000039, 0xefb0000000000038, 0x522000000000003b, 0x395000000000003a, 0xa280000000000036, 0xc9f0000000000037, 0x7460000000000034, 0x1f10000000000035, 0xbf40000000000033, 0xd430000000000032, 0x69a0000000000031, 0x02d0000000000030, 0x6c00000000000051, 0x0770000000000050, 0xbae0000000000053, 0xd190000000000052, 0x71c0000000000054, 0x1ab0000000000055, 0xa720000000000056, 0xcc50000000000057, 0x578000000000005b, 0x3cf000000000005a, 0x8160000000000059, 0xea10000000000058, 0x4a4000000000005e, 0x213000000000005f, 0x9ca000000000005c, 0xf7d000000000005d, 0x1b00000000000045, 0x7070000000000044, 0xcde0000000000047, 0xa690000000000046, 0x06c0000000000040, 0x6db0000000000041, 0xd020000000000042, 0xbb50000000000043, 0x208000000000004f, 0x4bf000000000004e, 0xf66000000000004d, 0x9d1000000000004c, 0x3d4000000000004a, 0x563000000000004b, 0xeba0000000000048, 0x80d0000000000049, 0x8200000000000079, 0xe970000000000078, 0x54e000000000007b, 0x3f9000000000007a, 0x9fc000000000007c, 0xf4b000000000007d, 0x492000000000007e, 0x225000000000007f, 0xb980000000000073, 0xd2f0000000000072, 0x6f60000000000071, 0x0410000000000070, 0xa440000000000076, 0xcf30000000000077, 0x72a0000000000074, 0x19d0000000000075, 0xf50000000000006d, 0x9e7000000000006c, 0x23e000000000006f, 0x489000000000006e, 0xe8c0000000000068, 0x83b0000000000069, 0x3e2000000000006a, 0x555000000000006b, 0xce80000000000067, 0xa5f0000000000066, 0x1860000000000065, 0x7310000000000064, 0xd340000000000062, 0xb830000000000063, 0x05a0000000000060, 0x6ed0000000000061, 0xd8000000000000a2, 0xb3700000000000a3, 0x0ee00000000000a0, 0x65900000000000a1, 0xc5c00000000000a7, 0xaeb00000000000a6, 0x13200000000000a5, 0x78500000000000a4, 0xe3800000000000a8, 0x88f00000000000a9, 0x35600000000000aa, 0x5e100000000000ab, 0xfe400000000000ad, 0x95300000000000ac, 0x28a00000000000af, 0x43d00000000000ae, 0xaf000000000000b6, 0xc4700000000000b7, 0x79e00000000000b4, 0x12900000000000b5, 0xb2c00000000000b3, 0xd9b00000000000b2, 0x64200000000000b1, 0x0f500000000000b0, 0x94800000000000bc, 0xfff00000000000bd, 0x42600000000000be, 0x29100000000000bf, 0x89400000000000b9, 0xe2300000000000b8, 0x5fa00000000000bb, 0x34d00000000000ba, 0x360000000000008a, 0x5d7000000000008b, 0xe0e0000000000088, 0x8b90000000000089, 0x2bc000000000008f, 0x40b000000000008e, 0xfd2000000000008d, 0x965000000000008c, 0x0d80000000000080, 0x66f0000000000081, 0xdb60000000000082, 0xb010000000000083, 0x1040000000000085, 0x7b30000000000084, 0xc6a0000000000087, 0xadd0000000000086, 0x410000000000009e, 0x2a7000000000009f, 0x97e000000000009c, 0xfc9000000000009d, 0x5cc000000000009b, 0x37b000000000009a, 0x8a20000000000099, 0xe150000000000098, 0x7a80000000000094, 0x11f0000000000095, 0xac60000000000096, 0xc710000000000097, 0x6740000000000091, 0x0c30000000000090, 0xb1a0000000000093, 0xdad0000000000092, 0xb4000000000000f3, 0xdf700000000000f2, 0x62e00000000000f1, 0x09900000000000f0, 0xa9c00000000000f6, 0xc2b00000000000f7, 0x7f200000000000f4, 0x14500000000000f5, 0x8f800000000000f9, 0xe4f00000000000f8, 0x59600000000000fb, 0x32100000000000fa, 0x92400000000000fc, 0xf9300000000000fd, 0x44a00000000000fe, 0x2fd00000000000ff, 0xc3000000000000e7, 0xa8700000000000e6, 0x15e00000000000e5, 0x7e900000000000e4, 0xdec00000000000e2, 0xb5b00000000000e3, 0x08200000000000e0, 0x63500000000000e1, 0xf8800000000000ed, 0x93f00000000000ec, 0x2e600000000000ef, 0x45100000000000ee, 0xe5400000000000e8, 0x8e300000000000e9, 0x33a00000000000ea, 0x58d00000000000eb, 0x5a000000000000db, 0x31700000000000da, 0x8ce00000000000d9, 0xe7900000000000d8, 0x47c00000000000de, 0x2cb00000000000df, 0x91200000000000dc, 0xfa500000000000dd, 0x61800000000000d1, 0x0af00000000000d0, 0xb7600000000000d3, 0xdc100000000000d2, 0x7c400000000000d4, 0x17300000000000d5, 0xaaa00000000000d6, 0xc1d00000000000d7, 0x2d000000000000cf, 0x46700000000000ce, 0xfbe00000000000cd, 0x90900000000000cc, 0x30c00000000000ca, 0x5bb00000000000cb, 0xe6200000000000c8, 0x8d500000000000c9, 0x16800000000000c5, 0x7df00000000000c4, 0xc0600000000000c7, 0xab100000000000c6, 0x0b400000000000c0, 0x60300000000000c1, 0xdda00000000000c2, 0xb6d00000000000c3, ], ]; pub static CRC64_MS_TABLE: [[u64; 256]; 16] = [ [ 0x0000000000000000, 0x0809e8a2969451e9, 0x1013d1452d28a3d2, 0x181a39e7bbbcf23b, 0x2027a28a5a5147a4, 0x282e4a28ccc5164d, 0x303473cf7779e476, 0x383d9b6de1edb59f, 0x404f4514b4a28f48, 0x4846adb62236dea1, 0x505c9451998a2c9a, 0x58557cf30f1e7d73, 0x6068e79eeef3c8ec, 0x68610f3c78679905, 0x707b36dbc3db6b3e, 0x7872de79554f3ad7, 0x809e8a2969451e90, 0x8897628bffd14f79, 0x908d5b6c446dbd42, 0x9884b3ced2f9ecab, 0xa0b928a333145934, 0xa8b0c001a58008dd, 0xb0aaf9e61e3cfae6, 0xb8a3114488a8ab0f, 0xc0d1cf3ddde791d8, 0xc8d8279f4b73c031, 0xd0c21e78f0cf320a, 0xd8cbf6da665b63e3, 0xe0f66db787b6d67c, 0xe8ff851511228795, 0xf0e5bcf2aa9e75ae, 0xf8ec54503c0a2447, 0x24b1909974c84e69, 0x2cb8783be25c1f80, 0x34a241dc59e0edbb, 0x3caba97ecf74bc52, 0x049632132e9909cd, 0x0c9fdab1b80d5824, 0x1485e35603b1aa1f, 0x1c8c0bf49525fbf6, 0x64fed58dc06ac121, 0x6cf73d2f56fe90c8, 0x74ed04c8ed4262f3, 0x7ce4ec6a7bd6331a, 0x44d977079a3b8685, 0x4cd09fa50cafd76c, 0x54caa642b7132557, 0x5cc34ee0218774be, 0xa42f1ab01d8d50f9, 0xac26f2128b190110, 0xb43ccbf530a5f32b, 0xbc352357a631a2c2, 0x8408b83a47dc175d, 0x8c015098d14846b4, 0x941b697f6af4b48f, 0x9c1281ddfc60e566, 0xe4605fa4a92fdfb1, 0xec69b7063fbb8e58, 0xf4738ee184077c63, 0xfc7a664312932d8a, 0xc447fd2ef37e9815, 0xcc4e158c65eac9fc, 0xd4542c6bde563bc7, 0xdc5dc4c948c26a2e, 0x49632132e9909cd2, 0x416ac9907f04cd3b, 0x5970f077c4b83f00, 0x517918d5522c6ee9, 0x694483b8b3c1db76, 0x614d6b1a25558a9f, 0x795752fd9ee978a4, 0x715eba5f087d294d, 0x092c64265d32139a, 0x01258c84cba64273, 0x193fb563701ab048, 0x11365dc1e68ee1a1, 0x290bc6ac0763543e, 0x21022e0e91f705d7, 0x391817e92a4bf7ec, 0x3111ff4bbcdfa605, 0xc9fdab1b80d58242, 0xc1f443b91641d3ab, 0xd9ee7a5eadfd2190, 0xd1e792fc3b697079, 0xe9da0991da84c5e6, 0xe1d3e1334c10940f, 0xf9c9d8d4f7ac6634, 0xf1c03076613837dd, 0x89b2ee0f34770d0a, 0x81bb06ada2e35ce3, 0x99a13f4a195faed8, 0x91a8d7e88fcbff31, 0xa9954c856e264aae, 0xa19ca427f8b21b47, 0xb9869dc0430ee97c, 0xb18f7562d59ab895, 0x6dd2b1ab9d58d2bb, 0x65db59090bcc8352, 0x7dc160eeb0707169, 0x75c8884c26e42080, 0x4df51321c709951f, 0x45fcfb83519dc4f6, 0x5de6c264ea2136cd, 0x55ef2ac67cb56724, 0x2d9df4bf29fa5df3, 0x25941c1dbf6e0c1a, 0x3d8e25fa04d2fe21, 0x3587cd589246afc8, 0x0dba563573ab1a57, 0x05b3be97e53f4bbe, 0x1da987705e83b985, 0x15a06fd2c817e86c, 0xed4c3b82f41dcc2b, 0xe545d32062899dc2, 0xfd5feac7d9356ff9, 0xf55602654fa13e10, 0xcd6b9908ae4c8b8f, 0xc56271aa38d8da66, 0xdd78484d8364285d, 0xd571a0ef15f079b4, 0xad037e9640bf4363, 0xa50a9634d62b128a, 0xbd10afd36d97e0b1, 0xb5194771fb03b158, 0x8d24dc1c1aee04c7, 0x852d34be8c7a552e, 0x9d370d5937c6a715, 0x953ee5fba152f6fc, 0x92c64265d32139a4, 0x9acfaac745b5684d, 0x82d59320fe099a76, 0x8adc7b82689dcb9f, 0xb2e1e0ef89707e00, 0xbae8084d1fe42fe9, 0xa2f231aaa458ddd2, 0xaafbd90832cc8c3b, 0xd28907716783b6ec, 0xda80efd3f117e705, 0xc29ad6344aab153e, 0xca933e96dc3f44d7, 0xf2aea5fb3dd2f148, 0xfaa74d59ab46a0a1, 0xe2bd74be10fa529a, 0xeab49c1c866e0373, 0x1258c84cba642734, 0x1a5120ee2cf076dd, 0x024b1909974c84e6, 0x0a42f1ab01d8d50f, 0x327f6ac6e0356090, 0x3a76826476a13179, 0x226cbb83cd1dc342, 0x2a6553215b8992ab, 0x52178d580ec6a87c, 0x5a1e65fa9852f995, 0x42045c1d23ee0bae, 0x4a0db4bfb57a5a47, 0x72302fd25497efd8, 0x7a39c770c203be31, 0x6223fe9779bf4c0a, 0x6a2a1635ef2b1de3, 0xb677d2fca7e977cd, 0xbe7e3a5e317d2624, 0xa66403b98ac1d41f, 0xae6deb1b1c5585f6, 0x96507076fdb83069, 0x9e5998d46b2c6180, 0x8643a133d09093bb, 0x8e4a49914604c252, 0xf63897e8134bf885, 0xfe317f4a85dfa96c, 0xe62b46ad3e635b57, 0xee22ae0fa8f70abe, 0xd61f3562491abf21, 0xde16ddc0df8eeec8, 0xc60ce42764321cf3, 0xce050c85f2a64d1a, 0x36e958d5ceac695d, 0x3ee0b077583838b4, 0x26fa8990e384ca8f, 0x2ef3613275109b66, 0x16cefa5f94fd2ef9, 0x1ec712fd02697f10, 0x06dd2b1ab9d58d2b, 0x0ed4c3b82f41dcc2, 0x76a61dc17a0ee615, 0x7eaff563ec9ab7fc, 0x66b5cc84572645c7, 0x6ebc2426c1b2142e, 0x5681bf4b205fa1b1, 0x5e8857e9b6cbf058, 0x46926e0e0d770263, 0x4e9b86ac9be3538a, 0xdba563573ab1a576, 0xd3ac8bf5ac25f49f, 0xcbb6b212179906a4, 0xc3bf5ab0810d574d, 0xfb82c1dd60e0e2d2, 0xf38b297ff674b33b, 0xeb9110984dc84100, 0xe398f83adb5c10e9, 0x9bea26438e132a3e, 0x93e3cee118877bd7, 0x8bf9f706a33b89ec, 0x83f01fa435afd805, 0xbbcd84c9d4426d9a, 0xb3c46c6b42d63c73, 0xabde558cf96ace48, 0xa3d7bd2e6ffe9fa1, 0x5b3be97e53f4bbe6, 0x533201dcc560ea0f, 0x4b28383b7edc1834, 0x4321d099e84849dd, 0x7b1c4bf409a5fc42, 0x7315a3569f31adab, 0x6b0f9ab1248d5f90, 0x63067213b2190e79, 0x1b74ac6ae75634ae, 0x137d44c871c26547, 0x0b677d2fca7e977c, 0x036e958d5ceac695, 0x3b530ee0bd07730a, 0x335ae6422b9322e3, 0x2b40dfa5902fd0d8, 0x2349370706bb8131, 0xff14f3ce4e79eb1f, 0xf71d1b6cd8edbaf6, 0xef07228b635148cd, 0xe70eca29f5c51924, 0xdf3351441428acbb, 0xd73ab9e682bcfd52, 0xcf20800139000f69, 0xc72968a3af945e80, 0xbf5bb6dafadb6457, 0xb7525e786c4f35be, 0xaf48679fd7f3c785, 0xa7418f3d4167966c, 0x9f7c1450a08a23f3, 0x9775fcf2361e721a, 0x8f6fc5158da28021, 0x87662db71b36d1c8, 0x7f8a79e7273cf58f, 0x77839145b1a8a466, 0x6f99a8a20a14565d, 0x679040009c8007b4, 0x5faddb6d7d6db22b, 0x57a433cfebf9e3c2, 0x4fbe0a28504511f9, 0x47b7e28ac6d14010, 0x3fc53cf3939e7ac7, 0x37ccd451050a2b2e, 0x2fd6edb6beb6d915, 0x27df0514282288fc, 0x1fe29e79c9cf3d63, 0x17eb76db5f5b6c8a, 0x0ff14f3ce4e79eb1, 0x07f8a79e7273cf58, ], [ 0x0000000000000000, 0xb75a5790ced9a1ef, 0x4b382bea3bf13097, 0xfc627c7af5289178, 0x967057d477e2612e, 0x212a0044b93bc0c1, 0xdd487c3e4c1351b9, 0x6a122bae82caf056, 0x096c2b634986b115, 0xbe367cf3875f10fa, 0x4254008972778182, 0xf50e5719bcae206d, 0x9f1c7cb73e64d03b, 0x28462b27f0bd71d4, 0xd424575d0595e0ac, 0x637e00cdcb4c4143, 0x12d856c6930d622a, 0xa58201565dd4c3c5, 0x59e07d2ca8fc52bd, 0xeeba2abc6625f352, 0x84a80112e4ef0304, 0x33f256822a36a2eb, 0xcf902af8df1e3393, 0x78ca7d6811c7927c, 0x1bb47da5da8bd33f, 0xacee2a35145272d0, 0x508c564fe17ae3a8, 0xe7d601df2fa34247, 0x8dc42a71ad69b211, 0x3a9e7de163b013fe, 0xc6fc019b96988286, 0x71a6560b58412369, 0x25b0ad8d261ac454, 0x92eafa1de8c365bb, 0x6e8886671debf4c3, 0xd9d2d1f7d332552c, 0xb3c0fa5951f8a57a, 0x049aadc99f210495, 0xf8f8d1b36a0995ed, 0x4fa28623a4d03402, 0x2cdc86ee6f9c7541, 0x9b86d17ea145d4ae, 0x67e4ad04546d45d6, 0xd0befa949ab4e439, 0xbaacd13a187e146f, 0x0df686aad6a7b580, 0xf194fad0238f24f8, 0x46cead40ed568517, 0x3768fb4bb517a67e, 0x8032acdb7bce0791, 0x7c50d0a18ee696e9, 0xcb0a8731403f3706, 0xa118ac9fc2f5c750, 0x1642fb0f0c2c66bf, 0xea208775f904f7c7, 0x5d7ad0e537dd5628, 0x3e04d028fc91176b, 0x895e87b83248b684, 0x753cfbc2c76027fc, 0xc266ac5209b98613, 0xa87487fc8b737645, 0x1f2ed06c45aad7aa, 0xe34cac16b08246d2, 0x5416fb867e5be73d, 0x4b615b1a4c3588a8, 0xfc3b0c8a82ec2947, 0x005970f077c4b83f, 0xb7032760b91d19d0, 0xdd110cce3bd7e986, 0x6a4b5b5ef50e4869, 0x962927240026d911, 0x217370b4ceff78fe, 0x420d707905b339bd, 0xf55727e9cb6a9852, 0x09355b933e42092a, 0xbe6f0c03f09ba8c5, 0xd47d27ad72515893, 0x6327703dbc88f97c, 0x9f450c4749a06804, 0x281f5bd78779c9eb, 0x59b90ddcdf38ea82, 0xeee35a4c11e14b6d, 0x12812636e4c9da15, 0xa5db71a62a107bfa, 0xcfc95a08a8da8bac, 0x78930d9866032a43, 0x84f171e2932bbb3b, 0x33ab26725df21ad4, 0x50d526bf96be5b97, 0xe78f712f5867fa78, 0x1bed0d55ad4f6b00, 0xacb75ac56396caef, 0xc6a5716be15c3ab9, 0x71ff26fb2f859b56, 0x8d9d5a81daad0a2e, 0x3ac70d111474abc1, 0x6ed1f6976a2f4cfc, 0xd98ba107a4f6ed13, 0x25e9dd7d51de7c6b, 0x92b38aed9f07dd84, 0xf8a1a1431dcd2dd2, 0x4ffbf6d3d3148c3d, 0xb3998aa9263c1d45, 0x04c3dd39e8e5bcaa, 0x67bdddf423a9fde9, 0xd0e78a64ed705c06, 0x2c85f61e1858cd7e, 0x9bdfa18ed6816c91, 0xf1cd8a20544b9cc7, 0x4697ddb09a923d28, 0xbaf5a1ca6fbaac50, 0x0daff65aa1630dbf, 0x7c09a051f9222ed6, 0xcb53f7c137fb8f39, 0x37318bbbc2d31e41, 0x806bdc2b0c0abfae, 0xea79f7858ec04ff8, 0x5d23a0154019ee17, 0xa141dc6fb5317f6f, 0x161b8bff7be8de80, 0x75658b32b0a49fc3, 0xc23fdca27e7d3e2c, 0x3e5da0d88b55af54, 0x8907f748458c0ebb, 0xe315dce6c746feed, 0x544f8b76099f5f02, 0xa82df70cfcb7ce7a, 0x1f77a09c326e6f95, 0x96c2b634986b1150, 0x2198e1a456b2b0bf, 0xddfa9ddea39a21c7, 0x6aa0ca4e6d438028, 0x00b2e1e0ef89707e, 0xb7e8b6702150d191, 0x4b8aca0ad47840e9, 0xfcd09d9a1aa1e106, 0x9fae9d57d1eda045, 0x28f4cac71f3401aa, 0xd496b6bdea1c90d2, 0x63cce12d24c5313d, 0x09deca83a60fc16b, 0xbe849d1368d66084, 0x42e6e1699dfef1fc, 0xf5bcb6f953275013, 0x841ae0f20b66737a, 0x3340b762c5bfd295, 0xcf22cb18309743ed, 0x78789c88fe4ee202, 0x126ab7267c841254, 0xa530e0b6b25db3bb, 0x59529ccc477522c3, 0xee08cb5c89ac832c, 0x8d76cb9142e0c26f, 0x3a2c9c018c396380, 0xc64ee07b7911f2f8, 0x7114b7ebb7c85317, 0x1b069c453502a341, 0xac5ccbd5fbdb02ae, 0x503eb7af0ef393d6, 0xe764e03fc02a3239, 0xb3721bb9be71d504, 0x04284c2970a874eb, 0xf84a30538580e593, 0x4f1067c34b59447c, 0x25024c6dc993b42a, 0x92581bfd074a15c5, 0x6e3a6787f26284bd, 0xd96030173cbb2552, 0xba1e30daf7f76411, 0x0d44674a392ec5fe, 0xf1261b30cc065486, 0x467c4ca002dff569, 0x2c6e670e8015053f, 0x9b34309e4ecca4d0, 0x67564ce4bbe435a8, 0xd00c1b74753d9447, 0xa1aa4d7f2d7cb72e, 0x16f01aefe3a516c1, 0xea926695168d87b9, 0x5dc83105d8542656, 0x37da1aab5a9ed600, 0x80804d3b944777ef, 0x7ce23141616fe697, 0xcbb866d1afb64778, 0xa8c6661c64fa063b, 0x1f9c318caa23a7d4, 0xe3fe4df65f0b36ac, 0x54a41a6691d29743, 0x3eb631c813186715, 0x89ec6658ddc1c6fa, 0x758e1a2228e95782, 0xc2d44db2e630f66d, 0xdda3ed2ed45e99f8, 0x6af9babe1a873817, 0x969bc6c4efafa96f, 0x21c1915421760880, 0x4bd3bafaa3bcf8d6, 0xfc89ed6a6d655939, 0x00eb9110984dc841, 0xb7b1c680569469ae, 0xd4cfc64d9dd828ed, 0x639591dd53018902, 0x9ff7eda7a629187a, 0x28adba3768f0b995, 0x42bf9199ea3a49c3, 0xf5e5c60924e3e82c, 0x0987ba73d1cb7954, 0xbeddede31f12d8bb, 0xcf7bbbe84753fbd2, 0x7821ec78898a5a3d, 0x844390027ca2cb45, 0x3319c792b27b6aaa, 0x590bec3c30b19afc, 0xee51bbacfe683b13, 0x1233c7d60b40aa6b, 0xa5699046c5990b84, 0xc617908b0ed54ac7, 0x714dc71bc00ceb28, 0x8d2fbb6135247a50, 0x3a75ecf1fbfddbbf, 0x5067c75f79372be9, 0xe73d90cfb7ee8a06, 0x1b5fecb542c61b7e, 0xac05bb258c1fba91, 0xf81340a3f2445dac, 0x4f4917333c9dfc43, 0xb32b6b49c9b56d3b, 0x04713cd9076cccd4, 0x6e63177785a63c82, 0xd93940e74b7f9d6d, 0x255b3c9dbe570c15, 0x92016b0d708eadfa, 0xf17f6bc0bbc2ecb9, 0x46253c50751b4d56, 0xba47402a8033dc2e, 0x0d1d17ba4eea7dc1, 0x670f3c14cc208d97, 0xd0556b8402f92c78, 0x2c3717fef7d1bd00, 0x9b6d406e39081cef, 0xeacb166561493f86, 0x5d9141f5af909e69, 0xa1f33d8f5ab80f11, 0x16a96a1f9461aefe, 0x7cbb41b116ab5ea8, 0xcbe11621d872ff47, 0x37836a5b2d5a6e3f, 0x80d93dcbe383cfd0, 0xe3a73d0628cf8e93, 0x54fd6a96e6162f7c, 0xa89f16ec133ebe04, 0x1fc5417cdde71feb, 0x75d76ad25f2defbd, 0xc28d3d4291f44e52, 0x3eef413864dcdf2a, 0x89b516a8aa057ec5, ], [ 0x0000000000000000, 0x87d177e08bf80869, 0x2a2e6b0ab1b2639b, 0xadff1cea3a4a6bf2, 0x545cd6156364c736, 0xd38da1f5e89ccf5f, 0x7e72bd1fd2d6a4ad, 0xf9a3caff592eacc4, 0xa8b9ac2ac6c98e6c, 0x2f68dbca4d318605, 0x8297c720777bedf7, 0x0546b0c0fc83e59e, 0xfce57a3fa5ad495a, 0x7b340ddf2e554133, 0xd6cb1135141f2ac1, 0x511a66d59fe722a8, 0x74ffdc9e2bd16f91, 0xf32eab7ea02967f8, 0x5ed1b7949a630c0a, 0xd900c074119b0463, 0x20a30a8b48b5a8a7, 0xa7727d6bc34da0ce, 0x0a8d6181f907cb3c, 0x8d5c166172ffc355, 0xdc4670b4ed18e1fd, 0x5b97075466e0e994, 0xf6681bbe5caa8266, 0x71b96c5ed7528a0f, 0x881aa6a18e7c26cb, 0x0fcbd14105842ea2, 0xa234cdab3fce4550, 0x25e5ba4bb4364d39, 0xe9ffb93c57a2df22, 0x6e2ecedcdc5ad74b, 0xc3d1d236e610bcb9, 0x4400a5d66de8b4d0, 0xbda36f2934c61814, 0x3a7218c9bf3e107d, 0x978d042385747b8f, 0x105c73c30e8c73e6, 0x41461516916b514e, 0xc69762f61a935927, 0x6b687e1c20d932d5, 0xecb909fcab213abc, 0x151ac303f20f9678, 0x92cbb4e379f79e11, 0x3f34a80943bdf5e3, 0xb8e5dfe9c845fd8a, 0x9d0065a27c73b0b3, 0x1ad11242f78bb8da, 0xb72e0ea8cdc1d328, 0x30ff79484639db41, 0xc95cb3b71f177785, 0x4e8dc45794ef7fec, 0xe372d8bdaea5141e, 0x64a3af5d255d1c77, 0x35b9c988baba3edf, 0xb268be68314236b6, 0x1f97a2820b085d44, 0x9846d56280f0552d, 0x61e51f9dd9def9e9, 0xe634687d5226f180, 0x4bcb7497686c9a72, 0xcc1a0377e394921b, 0xf673f6b30907cd0d, 0x71a2815382ffc564, 0xdc5d9db9b8b5ae96, 0x5b8cea59334da6ff, 0xa22f20a66a630a3b, 0x25fe5746e19b0252, 0x88014bacdbd169a0, 0x0fd03c4c502961c9, 0x5eca5a99cfce4361, 0xd91b2d7944364b08, 0x74e431937e7c20fa, 0xf3354673f5842893, 0x0a968c8cacaa8457, 0x8d47fb6c27528c3e, 0x20b8e7861d18e7cc, 0xa769906696e0efa5, 0x828c2a2d22d6a29c, 0x055d5dcda92eaaf5, 0xa8a241279364c107, 0x2f7336c7189cc96e, 0xd6d0fc3841b265aa, 0x51018bd8ca4a6dc3, 0xfcfe9732f0000631, 0x7b2fe0d27bf80e58, 0x2a358607e41f2cf0, 0xade4f1e76fe72499, 0x001bed0d55ad4f6b, 0x87ca9aedde554702, 0x7e695012877bebc6, 0xf9b827f20c83e3af, 0x54473b1836c9885d, 0xd3964cf8bd318034, 0x1f8c4f8f5ea5122f, 0x985d386fd55d1a46, 0x35a22485ef1771b4, 0xb273536564ef79dd, 0x4bd0999a3dc1d519, 0xcc01ee7ab639dd70, 0x61fef2908c73b682, 0xe62f8570078bbeeb, 0xb735e3a5986c9c43, 0x30e494451394942a, 0x9d1b88af29deffd8, 0x1acaff4fa226f7b1, 0xe36935b0fb085b75, 0x64b8425070f0531c, 0xc9475eba4aba38ee, 0x4e96295ac1423087, 0x6b73931175747dbe, 0xeca2e4f1fe8c75d7, 0x415df81bc4c61e25, 0xc68c8ffb4f3e164c, 0x3f2f45041610ba88, 0xb8fe32e49de8b2e1, 0x15012e0ea7a2d913, 0x92d059ee2c5ad17a, 0xc3ca3f3bb3bdf3d2, 0x441b48db3845fbbb, 0xe9e45431020f9049, 0x6e3523d189f79820, 0x9796e92ed0d934e4, 0x10479ece5b213c8d, 0xbdb88224616b577f, 0x3a69f5c4ea935f16, 0xc96b69adb44de953, 0x4eba1e4d3fb5e13a, 0xe34502a705ff8ac8, 0x649475478e0782a1, 0x9d37bfb8d7292e65, 0x1ae6c8585cd1260c, 0xb719d4b2669b4dfe, 0x30c8a352ed634597, 0x61d2c5877284673f, 0xe603b267f97c6f56, 0x4bfcae8dc33604a4, 0xcc2dd96d48ce0ccd, 0x358e139211e0a009, 0xb25f64729a18a860, 0x1fa07898a052c392, 0x98710f782baacbfb, 0xbd94b5339f9c86c2, 0x3a45c2d314648eab, 0x97bade392e2ee559, 0x106ba9d9a5d6ed30, 0xe9c86326fcf841f4, 0x6e1914c67700499d, 0xc3e6082c4d4a226f, 0x44377fccc6b22a06, 0x152d1919595508ae, 0x92fc6ef9d2ad00c7, 0x3f037213e8e76b35, 0xb8d205f3631f635c, 0x4171cf0c3a31cf98, 0xc6a0b8ecb1c9c7f1, 0x6b5fa4068b83ac03, 0xec8ed3e6007ba46a, 0x2094d091e3ef3671, 0xa745a77168173e18, 0x0ababb9b525d55ea, 0x8d6bcc7bd9a55d83, 0x74c80684808bf147, 0xf31971640b73f92e, 0x5ee66d8e313992dc, 0xd9371a6ebac19ab5, 0x882d7cbb2526b81d, 0x0ffc0b5baedeb074, 0xa20317b19494db86, 0x25d260511f6cd3ef, 0xdc71aaae46427f2b, 0x5ba0dd4ecdba7742, 0xf65fc1a4f7f01cb0, 0x718eb6447c0814d9, 0x546b0c0fc83e59e0, 0xd3ba7bef43c65189, 0x7e456705798c3a7b, 0xf99410e5f2743212, 0x0037da1aab5a9ed6, 0x87e6adfa20a296bf, 0x2a19b1101ae8fd4d, 0xadc8c6f09110f524, 0xfcd2a0250ef7d78c, 0x7b03d7c5850fdfe5, 0xd6fccb2fbf45b417, 0x512dbccf34bdbc7e, 0xa88e76306d9310ba, 0x2f5f01d0e66b18d3, 0x82a01d3adc217321, 0x05716ada57d97b48, 0x3f189f1ebd4a245e, 0xb8c9e8fe36b22c37, 0x1536f4140cf847c5, 0x92e783f487004fac, 0x6b44490bde2ee368, 0xec953eeb55d6eb01, 0x416a22016f9c80f3, 0xc6bb55e1e464889a, 0x97a133347b83aa32, 0x107044d4f07ba25b, 0xbd8f583eca31c9a9, 0x3a5e2fde41c9c1c0, 0xc3fde52118e76d04, 0x442c92c1931f656d, 0xe9d38e2ba9550e9f, 0x6e02f9cb22ad06f6, 0x4be74380969b4bcf, 0xcc3634601d6343a6, 0x61c9288a27292854, 0xe6185f6aacd1203d, 0x1fbb9595f5ff8cf9, 0x986ae2757e078490, 0x3595fe9f444def62, 0xb244897fcfb5e70b, 0xe35eefaa5052c5a3, 0x648f984adbaacdca, 0xc97084a0e1e0a638, 0x4ea1f3406a18ae51, 0xb70239bf33360295, 0x30d34e5fb8ce0afc, 0x9d2c52b58284610e, 0x1afd2555097c6967, 0xd6e72622eae8fb7c, 0x513651c26110f315, 0xfcc94d285b5a98e7, 0x7b183ac8d0a2908e, 0x82bbf037898c3c4a, 0x056a87d702743423, 0xa8959b3d383e5fd1, 0x2f44ecddb3c657b8, 0x7e5e8a082c217510, 0xf98ffde8a7d97d79, 0x5470e1029d93168b, 0xd3a196e2166b1ee2, 0x2a025c1d4f45b226, 0xadd32bfdc4bdba4f, 0x002c3717fef7d1bd, 0x87fd40f7750fd9d4, 0xa218fabcc13994ed, 0x25c98d5c4ac19c84, 0x883691b6708bf776, 0x0fe7e656fb73ff1f, 0xf6442ca9a25d53db, 0x71955b4929a55bb2, 0xdc6a47a313ef3040, 0x5bbb304398173829, 0x0aa1569607f01a81, 0x8d7021768c0812e8, 0x208f3d9cb642791a, 0xa75e4a7c3dba7173, 0x5efd80836494ddb7, 0xd92cf763ef6cd5de, 0x74d3eb89d526be2c, 0xf3029c695edeb645, ], [ 0x0000000000000000, 0x2513cd6a5fe5f412, 0x4a279ad4bfcbe824, 0x6f3457bee02e1c36, 0x944f35a97f97d048, 0xb15cf8c32072245a, 0xde68af7dc05c386c, 0xfb7b62179fb9cc7e, 0x0d12ef99596dd3d9, 0x280122f3068827cb, 0x4735754de6a63bfd, 0x6226b827b943cfef, 0x995dda3026fa0391, 0xbc4e175a791ff783, 0xd37a40e49931ebb5, 0xf6698d8ec6d41fa7, 0x1a25df32b2dba7b2, 0x3f361258ed3e53a0, 0x500245e60d104f96, 0x7511888c52f5bb84, 0x8e6aea9bcd4c77fa, 0xab7927f192a983e8, 0xc44d704f72879fde, 0xe15ebd252d626bcc, 0x173730abebb6746b, 0x3224fdc1b4538079, 0x5d10aa7f547d9c4f, 0x780367150b98685d, 0x837805029421a423, 0xa66bc868cbc45031, 0xc95f9fd62bea4c07, 0xec4c52bc740fb815, 0x344bbe6565b74f64, 0x1158730f3a52bb76, 0x7e6c24b1da7ca740, 0x5b7fe9db85995352, 0xa0048bcc1a209f2c, 0x851746a645c56b3e, 0xea231118a5eb7708, 0xcf30dc72fa0e831a, 0x395951fc3cda9cbd, 0x1c4a9c96633f68af, 0x737ecb2883117499, 0x566d0642dcf4808b, 0xad166455434d4cf5, 0x8805a93f1ca8b8e7, 0xe731fe81fc86a4d1, 0xc22233eba36350c3, 0x2e6e6157d76ce8d6, 0x0b7dac3d88891cc4, 0x6449fb8368a700f2, 0x415a36e93742f4e0, 0xba2154fea8fb389e, 0x9f329994f71ecc8c, 0xf006ce2a1730d0ba, 0xd515034048d524a8, 0x237c8ece8e013b0f, 0x066f43a4d1e4cf1d, 0x695b141a31cad32b, 0x4c48d9706e2f2739, 0xb733bb67f196eb47, 0x9220760dae731f55, 0xfd1421b34e5d0363, 0xd807ecd911b8f771, 0x68977ccacb6e9ec8, 0x4d84b1a0948b6ada, 0x22b0e61e74a576ec, 0x07a32b742b4082fe, 0xfcd84963b4f94e80, 0xd9cb8409eb1cba92, 0xb6ffd3b70b32a6a4, 0x93ec1edd54d752b6, 0x6585935392034d11, 0x40965e39cde6b903, 0x2fa209872dc8a535, 0x0ab1c4ed722d5127, 0xf1caa6faed949d59, 0xd4d96b90b271694b, 0xbbed3c2e525f757d, 0x9efef1440dba816f, 0x72b2a3f879b5397a, 0x57a16e922650cd68, 0x3895392cc67ed15e, 0x1d86f446999b254c, 0xe6fd96510622e932, 0xc3ee5b3b59c71d20, 0xacda0c85b9e90116, 0x89c9c1efe60cf504, 0x7fa04c6120d8eaa3, 0x5ab3810b7f3d1eb1, 0x3587d6b59f130287, 0x10941bdfc0f6f695, 0xebef79c85f4f3aeb, 0xcefcb4a200aacef9, 0xa1c8e31ce084d2cf, 0x84db2e76bf6126dd, 0x5cdcc2afaed9d1ac, 0x79cf0fc5f13c25be, 0x16fb587b11123988, 0x33e895114ef7cd9a, 0xc893f706d14e01e4, 0xed803a6c8eabf5f6, 0x82b46dd26e85e9c0, 0xa7a7a0b831601dd2, 0x51ce2d36f7b40275, 0x74dde05ca851f667, 0x1be9b7e2487fea51, 0x3efa7a88179a1e43, 0xc581189f8823d23d, 0xe092d5f5d7c6262f, 0x8fa6824b37e83a19, 0xaab54f21680dce0b, 0x46f91d9d1c02761e, 0x63ead0f743e7820c, 0x0cde8749a3c99e3a, 0x29cd4a23fc2c6a28, 0xd2b628346395a656, 0xf7a5e55e3c705244, 0x9891b2e0dc5e4e72, 0xbd827f8a83bbba60, 0x4bebf204456fa5c7, 0x6ef83f6e1a8a51d5, 0x01cc68d0faa44de3, 0x24dfa5baa541b9f1, 0xdfa4c7ad3af8758f, 0xfab70ac7651d819d, 0x95835d7985339dab, 0xb0909013dad669b9, 0xd12ef99596dd3d90, 0xf43d34ffc938c982, 0x9b0963412916d5b4, 0xbe1aae2b76f321a6, 0x4561cc3ce94aedd8, 0x60720156b6af19ca, 0x0f4656e8568105fc, 0x2a559b820964f1ee, 0xdc3c160ccfb0ee49, 0xf92fdb6690551a5b, 0x961b8cd8707b066d, 0xb30841b22f9ef27f, 0x487323a5b0273e01, 0x6d60eecfefc2ca13, 0x0254b9710fecd625, 0x2747741b50092237, 0xcb0b26a724069a22, 0xee18ebcd7be36e30, 0x812cbc739bcd7206, 0xa43f7119c4288614, 0x5f44130e5b914a6a, 0x7a57de640474be78, 0x156389dae45aa24e, 0x307044b0bbbf565c, 0xc619c93e7d6b49fb, 0xe30a0454228ebde9, 0x8c3e53eac2a0a1df, 0xa92d9e809d4555cd, 0x5256fc9702fc99b3, 0x774531fd5d196da1, 0x18716643bd377197, 0x3d62ab29e2d28585, 0xe56547f0f36a72f4, 0xc0768a9aac8f86e6, 0xaf42dd244ca19ad0, 0x8a51104e13446ec2, 0x712a72598cfda2bc, 0x5439bf33d31856ae, 0x3b0de88d33364a98, 0x1e1e25e76cd3be8a, 0xe877a869aa07a12d, 0xcd646503f5e2553f, 0xa25032bd15cc4909, 0x8743ffd74a29bd1b, 0x7c389dc0d5907165, 0x592b50aa8a758577, 0x361f07146a5b9941, 0x130cca7e35be6d53, 0xff4098c241b1d546, 0xda5355a81e542154, 0xb5670216fe7a3d62, 0x9074cf7ca19fc970, 0x6b0fad6b3e26050e, 0x4e1c600161c3f11c, 0x212837bf81eded2a, 0x043bfad5de081938, 0xf252775b18dc069f, 0xd741ba314739f28d, 0xb875ed8fa717eebb, 0x9d6620e5f8f21aa9, 0x661d42f2674bd6d7, 0x430e8f9838ae22c5, 0x2c3ad826d8803ef3, 0x0929154c8765cae1, 0xb9b9855f5db3a358, 0x9caa48350256574a, 0xf39e1f8be2784b7c, 0xd68dd2e1bd9dbf6e, 0x2df6b0f622247310, 0x08e57d9c7dc18702, 0x67d12a229def9b34, 0x42c2e748c20a6f26, 0xb4ab6ac604de7081, 0x91b8a7ac5b3b8493, 0xfe8cf012bb1598a5, 0xdb9f3d78e4f06cb7, 0x20e45f6f7b49a0c9, 0x05f7920524ac54db, 0x6ac3c5bbc48248ed, 0x4fd008d19b67bcff, 0xa39c5a6def6804ea, 0x868f9707b08df0f8, 0xe9bbc0b950a3ecce, 0xcca80dd30f4618dc, 0x37d36fc490ffd4a2, 0x12c0a2aecf1a20b0, 0x7df4f5102f343c86, 0x58e7387a70d1c894, 0xae8eb5f4b605d733, 0x8b9d789ee9e02321, 0xe4a92f2009ce3f17, 0xc1bae24a562bcb05, 0x3ac1805dc992077b, 0x1fd24d379677f369, 0x70e61a897659ef5f, 0x55f5d7e329bc1b4d, 0x8df23b3a3804ec3c, 0xa8e1f65067e1182e, 0xc7d5a1ee87cf0418, 0xe2c66c84d82af00a, 0x19bd0e9347933c74, 0x3caec3f91876c866, 0x539a9447f858d450, 0x7689592da7bd2042, 0x80e0d4a361693fe5, 0xa5f319c93e8ccbf7, 0xcac74e77dea2d7c1, 0xefd4831d814723d3, 0x14afe10a1efeefad, 0x31bc2c60411b1bbf, 0x5e887bdea1350789, 0x7b9bb6b4fed0f39b, 0x97d7e4088adf4b8e, 0xb2c42962d53abf9c, 0xddf07edc3514a3aa, 0xf8e3b3b66af157b8, 0x0398d1a1f5489bc6, 0x268b1ccbaaad6fd4, 0x49bf4b754a8373e2, 0x6cac861f156687f0, 0x9ac50b91d3b29857, 0xbfd6c6fb8c576c45, 0xd0e291456c797073, 0xf5f15c2f339c8461, 0x0e8a3e38ac25481f, 0x2b99f352f3c0bc0d, 0x44ada4ec13eea03b, 0x61be69864c0b5429, ], [ 0x0000000000000000, 0x90a848a12e3258b6, 0x04dc1589fa26c225, 0x94745d28d4149a93, 0x09b82b13f44d844a, 0x991063b2da7fdcfc, 0x0d643e9a0e6b466f, 0x9dcc763b20591ed9, 0x13705627e89b0894, 0x83d81e86c6a95022, 0x17ac43ae12bdcab1, 0x87040b0f3c8f9207, 0x1ac87d341cd68cde, 0x8a60359532e4d468, 0x1e1468bde6f04efb, 0x8ebc201cc8c2164d, 0x26e0ac4fd1361128, 0xb648e4eeff04499e, 0x223cb9c62b10d30d, 0xb294f16705228bbb, 0x2f58875c257b9562, 0xbff0cffd0b49cdd4, 0x2b8492d5df5d5747, 0xbb2cda74f16f0ff1, 0x3590fa6839ad19bc, 0xa538b2c9179f410a, 0x314cefe1c38bdb99, 0xa1e4a740edb9832f, 0x3c28d17bcde09df6, 0xac8099dae3d2c540, 0x38f4c4f237c65fd3, 0xa85c8c5319f40765, 0x4dc1589fa26c2250, 0xdd69103e8c5e7ae6, 0x491d4d16584ae075, 0xd9b505b77678b8c3, 0x4479738c5621a61a, 0xd4d13b2d7813feac, 0x40a56605ac07643f, 0xd00d2ea482353c89, 0x5eb10eb84af72ac4, 0xce19461964c57272, 0x5a6d1b31b0d1e8e1, 0xcac553909ee3b057, 0x570925abbebaae8e, 0xc7a16d0a9088f638, 0x53d53022449c6cab, 0xc37d78836aae341d, 0x6b21f4d0735a3378, 0xfb89bc715d686bce, 0x6ffde159897cf15d, 0xff55a9f8a74ea9eb, 0x6299dfc38717b732, 0xf2319762a925ef84, 0x6645ca4a7d317517, 0xf6ed82eb53032da1, 0x7851a2f79bc13bec, 0xe8f9ea56b5f3635a, 0x7c8db77e61e7f9c9, 0xec25ffdf4fd5a17f, 0x71e989e46f8cbfa6, 0xe141c14541bee710, 0x75359c6d95aa7d83, 0xe59dd4ccbb982535, 0x9b82b13f44d844a0, 0x0b2af99e6aea1c16, 0x9f5ea4b6befe8685, 0x0ff6ec1790ccde33, 0x923a9a2cb095c0ea, 0x0292d28d9ea7985c, 0x96e68fa54ab302cf, 0x064ec70464815a79, 0x88f2e718ac434c34, 0x185aafb982711482, 0x8c2ef29156658e11, 0x1c86ba307857d6a7, 0x814acc0b580ec87e, 0x11e284aa763c90c8, 0x8596d982a2280a5b, 0x153e91238c1a52ed, 0xbd621d7095ee5588, 0x2dca55d1bbdc0d3e, 0xb9be08f96fc897ad, 0x2916405841facf1b, 0xb4da366361a3d1c2, 0x24727ec24f918974, 0xb00623ea9b8513e7, 0x20ae6b4bb5b74b51, 0xae124b577d755d1c, 0x3eba03f6534705aa, 0xaace5ede87539f39, 0x3a66167fa961c78f, 0xa7aa60448938d956, 0x370228e5a70a81e0, 0xa37675cd731e1b73, 0x33de3d6c5d2c43c5, 0xd643e9a0e6b466f0, 0x46eba101c8863e46, 0xd29ffc291c92a4d5, 0x4237b48832a0fc63, 0xdffbc2b312f9e2ba, 0x4f538a123ccbba0c, 0xdb27d73ae8df209f, 0x4b8f9f9bc6ed7829, 0xc533bf870e2f6e64, 0x559bf726201d36d2, 0xc1efaa0ef409ac41, 0x5147e2afda3bf4f7, 0xcc8b9494fa62ea2e, 0x5c23dc35d450b298, 0xc857811d0044280b, 0x58ffc9bc2e7670bd, 0xf0a345ef378277d8, 0x600b0d4e19b02f6e, 0xf47f5066cda4b5fd, 0x64d718c7e396ed4b, 0xf91b6efcc3cff392, 0x69b3265dedfdab24, 0xfdc77b7539e931b7, 0x6d6f33d417db6901, 0xe3d313c8df197f4c, 0x737b5b69f12b27fa, 0xe70f0641253fbd69, 0x77a74ee00b0de5df, 0xea6b38db2b54fb06, 0x7ac3707a0566a3b0, 0xeeb72d52d1723923, 0x7e1f65f3ff406195, 0x1289e6b52ff2fa09, 0x8221ae1401c0a2bf, 0x1655f33cd5d4382c, 0x86fdbb9dfbe6609a, 0x1b31cda6dbbf7e43, 0x8b998507f58d26f5, 0x1fedd82f2199bc66, 0x8f45908e0fabe4d0, 0x01f9b092c769f29d, 0x9151f833e95baa2b, 0x0525a51b3d4f30b8, 0x958dedba137d680e, 0x08419b81332476d7, 0x98e9d3201d162e61, 0x0c9d8e08c902b4f2, 0x9c35c6a9e730ec44, 0x34694afafec4eb21, 0xa4c1025bd0f6b397, 0x30b55f7304e22904, 0xa01d17d22ad071b2, 0x3dd161e90a896f6b, 0xad79294824bb37dd, 0x390d7460f0afad4e, 0xa9a53cc1de9df5f8, 0x27191cdd165fe3b5, 0xb7b1547c386dbb03, 0x23c50954ec792190, 0xb36d41f5c24b7926, 0x2ea137cee21267ff, 0xbe097f6fcc203f49, 0x2a7d22471834a5da, 0xbad56ae63606fd6c, 0x5f48be2a8d9ed859, 0xcfe0f68ba3ac80ef, 0x5b94aba377b81a7c, 0xcb3ce302598a42ca, 0x56f0953979d35c13, 0xc658dd9857e104a5, 0x522c80b083f59e36, 0xc284c811adc7c680, 0x4c38e80d6505d0cd, 0xdc90a0ac4b37887b, 0x48e4fd849f2312e8, 0xd84cb525b1114a5e, 0x4580c31e91485487, 0xd5288bbfbf7a0c31, 0x415cd6976b6e96a2, 0xd1f49e36455cce14, 0x79a812655ca8c971, 0xe9005ac4729a91c7, 0x7d7407eca68e0b54, 0xeddc4f4d88bc53e2, 0x70103976a8e54d3b, 0xe0b871d786d7158d, 0x74cc2cff52c38f1e, 0xe464645e7cf1d7a8, 0x6ad84442b433c1e5, 0xfa700ce39a019953, 0x6e0451cb4e1503c0, 0xfeac196a60275b76, 0x63606f51407e45af, 0xf3c827f06e4c1d19, 0x67bc7ad8ba58878a, 0xf7143279946adf3c, 0x890b578a6b2abea9, 0x19a31f2b4518e61f, 0x8dd74203910c7c8c, 0x1d7f0aa2bf3e243a, 0x80b37c999f673ae3, 0x101b3438b1556255, 0x846f69106541f8c6, 0x14c721b14b73a070, 0x9a7b01ad83b1b63d, 0x0ad3490cad83ee8b, 0x9ea7142479977418, 0x0e0f5c8557a52cae, 0x93c32abe77fc3277, 0x036b621f59ce6ac1, 0x971f3f378ddaf052, 0x07b77796a3e8a8e4, 0xafebfbc5ba1caf81, 0x3f43b364942ef737, 0xab37ee4c403a6da4, 0x3b9fa6ed6e083512, 0xa653d0d64e512bcb, 0x36fb98776063737d, 0xa28fc55fb477e9ee, 0x32278dfe9a45b158, 0xbc9bade25287a715, 0x2c33e5437cb5ffa3, 0xb847b86ba8a16530, 0x28eff0ca86933d86, 0xb52386f1a6ca235f, 0x258bce5088f87be9, 0xb1ff93785cece17a, 0x2157dbd972deb9cc, 0xc4ca0f15c9469cf9, 0x546247b4e774c44f, 0xc0161a9c33605edc, 0x50be523d1d52066a, 0xcd7224063d0b18b3, 0x5dda6ca713394005, 0xc9ae318fc72dda96, 0x5906792ee91f8220, 0xd7ba593221dd946d, 0x471211930fefccdb, 0xd3664cbbdbfb5648, 0x43ce041af5c90efe, 0xde027221d5901027, 0x4eaa3a80fba24891, 0xdade67a82fb6d202, 0x4a762f0901848ab4, 0xe22aa35a18708dd1, 0x7282ebfb3642d567, 0xe6f6b6d3e2564ff4, 0x765efe72cc641742, 0xeb928849ec3d099b, 0x7b3ac0e8c20f512d, 0xef4e9dc0161bcbbe, 0x7fe6d56138299308, 0xf15af57df0eb8545, 0x61f2bddcded9ddf3, 0xf586e0f40acd4760, 0x652ea85524ff1fd6, 0xf8e2de6e04a6010f, 0x684a96cf2a9459b9, 0xfc3ecbe7fe80c32a, 0x6c968346d0b29b9c, ], [ 0x0000000000000000, 0x064d835218fbbf73, 0x0c9b06a431f77ee6, 0x0ad685f6290cc195, 0x19360d4863eefdcc, 0x1f7b8e1a7b1542bf, 0x15ad0bec5219832a, 0x13e088be4ae23c59, 0x326c1a90c7ddfb98, 0x342199c2df2644eb, 0x3ef71c34f62a857e, 0x38ba9f66eed13a0d, 0x2b5a17d8a4330654, 0x2d17948abcc8b927, 0x27c1117c95c478b2, 0x218c922e8d3fc7c1, 0x64d835218fbbf730, 0x6295b67397404843, 0x68433385be4c89d6, 0x6e0eb0d7a6b736a5, 0x7dee3869ec550afc, 0x7ba3bb3bf4aeb58f, 0x71753ecddda2741a, 0x7738bd9fc559cb69, 0x56b42fb148660ca8, 0x50f9ace3509db3db, 0x5a2f29157991724e, 0x5c62aa47616acd3d, 0x4f8222f92b88f164, 0x49cfa1ab33734e17, 0x4319245d1a7f8f82, 0x4554a70f028430f1, 0xc9b06a431f77ee60, 0xcffde911078c5113, 0xc52b6ce72e809086, 0xc366efb5367b2ff5, 0xd086670b7c9913ac, 0xd6cbe4596462acdf, 0xdc1d61af4d6e6d4a, 0xda50e2fd5595d239, 0xfbdc70d3d8aa15f8, 0xfd91f381c051aa8b, 0xf7477677e95d6b1e, 0xf10af525f1a6d46d, 0xe2ea7d9bbb44e834, 0xe4a7fec9a3bf5747, 0xee717b3f8ab396d2, 0xe83cf86d924829a1, 0xad685f6290cc1950, 0xab25dc308837a623, 0xa1f359c6a13b67b6, 0xa7beda94b9c0d8c5, 0xb45e522af322e49c, 0xb213d178ebd95bef, 0xb8c5548ec2d59a7a, 0xbe88d7dcda2e2509, 0x9f0445f25711e2c8, 0x9949c6a04fea5dbb, 0x939f435666e69c2e, 0x95d2c0047e1d235d, 0x863248ba34ff1f04, 0x807fcbe82c04a077, 0x8aa94e1e050861e2, 0x8ce4cd4c1df3de91, 0xb6ec504d98adaf89, 0xb0a1d31f805610fa, 0xba7756e9a95ad16f, 0xbc3ad5bbb1a16e1c, 0xafda5d05fb435245, 0xa997de57e3b8ed36, 0xa3415ba1cab42ca3, 0xa50cd8f3d24f93d0, 0x84804add5f705411, 0x82cdc98f478beb62, 0x881b4c796e872af7, 0x8e56cf2b767c9584, 0x9db647953c9ea9dd, 0x9bfbc4c7246516ae, 0x912d41310d69d73b, 0x9760c26315926848, 0xd234656c171658b9, 0xd479e63e0fede7ca, 0xdeaf63c826e1265f, 0xd8e2e09a3e1a992c, 0xcb02682474f8a575, 0xcd4feb766c031a06, 0xc7996e80450fdb93, 0xc1d4edd25df464e0, 0xe0587ffcd0cba321, 0xe615fcaec8301c52, 0xecc37958e13cddc7, 0xea8efa0af9c762b4, 0xf96e72b4b3255eed, 0xff23f1e6abdee19e, 0xf5f5741082d2200b, 0xf3b8f7429a299f78, 0x7f5c3a0e87da41e9, 0x7911b95c9f21fe9a, 0x73c73caab62d3f0f, 0x758abff8aed6807c, 0x666a3746e434bc25, 0x6027b414fccf0356, 0x6af131e2d5c3c2c3, 0x6cbcb2b0cd387db0, 0x4d30209e4007ba71, 0x4b7da3cc58fc0502, 0x41ab263a71f0c497, 0x47e6a568690b7be4, 0x54062dd623e947bd, 0x524bae843b12f8ce, 0x589d2b72121e395b, 0x5ed0a8200ae58628, 0x1b840f2f0861b6d9, 0x1dc98c7d109a09aa, 0x171f098b3996c83f, 0x11528ad9216d774c, 0x02b202676b8f4b15, 0x04ff81357374f466, 0x0e2904c35a7835f3, 0x0864879142838a80, 0x29e815bfcfbc4d41, 0x2fa596edd747f232, 0x2573131bfe4b33a7, 0x233e9049e6b08cd4, 0x30de18f7ac52b08d, 0x36939ba5b4a90ffe, 0x3c451e539da5ce6b, 0x3a089d01855e7118, 0x4854245097192c5b, 0x4e19a7028fe29328, 0x44cf22f4a6ee52bd, 0x4282a1a6be15edce, 0x51622918f4f7d197, 0x572faa4aec0c6ee4, 0x5df92fbcc500af71, 0x5bb4aceeddfb1002, 0x7a383ec050c4d7c3, 0x7c75bd92483f68b0, 0x76a338646133a925, 0x70eebb3679c81656, 0x630e3388332a2a0f, 0x6543b0da2bd1957c, 0x6f95352c02dd54e9, 0x69d8b67e1a26eb9a, 0x2c8c117118a2db6b, 0x2ac1922300596418, 0x201717d52955a58d, 0x265a948731ae1afe, 0x35ba1c397b4c26a7, 0x33f79f6b63b799d4, 0x39211a9d4abb5841, 0x3f6c99cf5240e732, 0x1ee00be1df7f20f3, 0x18ad88b3c7849f80, 0x127b0d45ee885e15, 0x14368e17f673e166, 0x07d606a9bc91dd3f, 0x019b85fba46a624c, 0x0b4d000d8d66a3d9, 0x0d00835f959d1caa, 0x81e44e13886ec23b, 0x87a9cd4190957d48, 0x8d7f48b7b999bcdd, 0x8b32cbe5a16203ae, 0x98d2435beb803ff7, 0x9e9fc009f37b8084, 0x944945ffda774111, 0x9204c6adc28cfe62, 0xb38854834fb339a3, 0xb5c5d7d1574886d0, 0xbf1352277e444745, 0xb95ed17566bff836, 0xaabe59cb2c5dc46f, 0xacf3da9934a67b1c, 0xa6255f6f1daaba89, 0xa068dc3d055105fa, 0xe53c7b3207d5350b, 0xe371f8601f2e8a78, 0xe9a77d9636224bed, 0xefeafec42ed9f49e, 0xfc0a767a643bc8c7, 0xfa47f5287cc077b4, 0xf09170de55ccb621, 0xf6dcf38c4d370952, 0xd75061a2c008ce93, 0xd11de2f0d8f371e0, 0xdbcb6706f1ffb075, 0xdd86e454e9040f06, 0xce666ceaa3e6335f, 0xc82befb8bb1d8c2c, 0xc2fd6a4e92114db9, 0xc4b0e91c8aeaf2ca, 0xfeb8741d0fb483d2, 0xf8f5f74f174f3ca1, 0xf22372b93e43fd34, 0xf46ef1eb26b84247, 0xe78e79556c5a7e1e, 0xe1c3fa0774a1c16d, 0xeb157ff15dad00f8, 0xed58fca34556bf8b, 0xccd46e8dc869784a, 0xca99eddfd092c739, 0xc04f6829f99e06ac, 0xc602eb7be165b9df, 0xd5e263c5ab878586, 0xd3afe097b37c3af5, 0xd97965619a70fb60, 0xdf34e633828b4413, 0x9a60413c800f74e2, 0x9c2dc26e98f4cb91, 0x96fb4798b1f80a04, 0x90b6c4caa903b577, 0x83564c74e3e1892e, 0x851bcf26fb1a365d, 0x8fcd4ad0d216f7c8, 0x8980c982caed48bb, 0xa80c5bac47d28f7a, 0xae41d8fe5f293009, 0xa4975d087625f19c, 0xa2dade5a6ede4eef, 0xb13a56e4243c72b6, 0xb777d5b63cc7cdc5, 0xbda1504015cb0c50, 0xbbecd3120d30b323, 0x37081e5e10c36db2, 0x31459d0c0838d2c1, 0x3b9318fa21341354, 0x3dde9ba839cfac27, 0x2e3e1316732d907e, 0x287390446bd62f0d, 0x22a515b242daee98, 0x24e896e05a2151eb, 0x056404ced71e962a, 0x0329879ccfe52959, 0x09ff026ae6e9e8cc, 0x0fb28138fe1257bf, 0x1c520986b4f06be6, 0x1a1f8ad4ac0bd495, 0x10c90f2285071500, 0x16848c709dfcaa73, 0x53d02b7f9f789a82, 0x559da82d878325f1, 0x5f4b2ddbae8fe464, 0x5906ae89b6745b17, 0x4ae62637fc96674e, 0x4caba565e46dd83d, 0x467d2093cd6119a8, 0x4030a3c1d59aa6db, 0x61bc31ef58a5611a, 0x67f1b2bd405ede69, 0x6d27374b69521ffc, 0x6b6ab41971a9a08f, 0x788a3ca73b4b9cd6, 0x7ec7bff523b023a5, 0x74113a030abce230, 0x725cb95112475d43, ], [ 0x0000000000000000, 0xf5504fe61db9c5af, 0xcf2c1b079d31f817, 0x3a7c54e180883db8, 0xbbd4b2c49c218367, 0x4e84fd22819846c8, 0x74f8a9c301107b70, 0x81a8e6251ca9bedf, 0x5225e1429e017587, 0xa775aea483b8b028, 0x9d09fa4503308d90, 0x6859b5a31e89483f, 0xe9f153860220f6e0, 0x1ca11c601f99334f, 0x26dd48819f110ef7, 0xd38d076782a8cb58, 0xa44bc2853c02eb0e, 0x511b8d6321bb2ea1, 0x6b67d982a1331319, 0x9e379664bc8ad6b6, 0x1f9f7041a0236869, 0xeacf3fa7bd9aadc6, 0xd0b36b463d12907e, 0x25e324a020ab55d1, 0xf66e23c7a2039e89, 0x033e6c21bfba5b26, 0x394238c03f32669e, 0xcc127726228ba331, 0x4dba91033e221dee, 0xb8eadee5239bd841, 0x82968a04a313e5f9, 0x77c6c5e2beaa2056, 0x6d1b01c1de47a555, 0x984b4e27c3fe60fa, 0xa2371ac643765d42, 0x576755205ecf98ed, 0xd6cfb30542662632, 0x239ffce35fdfe39d, 0x19e3a802df57de25, 0xecb3e7e4c2ee1b8a, 0x3f3ee0834046d0d2, 0xca6eaf655dff157d, 0xf012fb84dd7728c5, 0x0542b462c0ceed6a, 0x84ea5247dc6753b5, 0x71ba1da1c1de961a, 0x4bc649404156aba2, 0xbe9606a65cef6e0d, 0xc950c344e2454e5b, 0x3c008ca2fffc8bf4, 0x067cd8437f74b64c, 0xf32c97a562cd73e3, 0x728471807e64cd3c, 0x87d43e6663dd0893, 0xbda86a87e355352b, 0x48f82561feecf084, 0x9b7522067c443bdc, 0x6e256de061fdfe73, 0x54593901e175c3cb, 0xa10976e7fccc0664, 0x20a190c2e065b8bb, 0xd5f1df24fddc7d14, 0xef8d8bc57d5440ac, 0x1addc42360ed8503, 0xda360383bc8f4aaa, 0x2f664c65a1368f05, 0x151a188421beb2bd, 0xe04a57623c077712, 0x61e2b14720aec9cd, 0x94b2fea13d170c62, 0xaeceaa40bd9f31da, 0x5b9ee5a6a026f475, 0x8813e2c1228e3f2d, 0x7d43ad273f37fa82, 0x473ff9c6bfbfc73a, 0xb26fb620a2060295, 0x33c75005beafbc4a, 0xc6971fe3a31679e5, 0xfceb4b02239e445d, 0x09bb04e43e2781f2, 0x7e7dc106808da1a4, 0x8b2d8ee09d34640b, 0xb151da011dbc59b3, 0x440195e700059c1c, 0xc5a973c21cac22c3, 0x30f93c240115e76c, 0x0a8568c5819ddad4, 0xffd527239c241f7b, 0x2c5820441e8cd423, 0xd9086fa20335118c, 0xe3743b4383bd2c34, 0x162474a59e04e99b, 0x978c928082ad5744, 0x62dcdd669f1492eb, 0x58a089871f9caf53, 0xadf0c66102256afc, 0xb72d024262c8efff, 0x427d4da47f712a50, 0x78011945fff917e8, 0x8d5156a3e240d247, 0x0cf9b086fee96c98, 0xf9a9ff60e350a937, 0xc3d5ab8163d8948f, 0x3685e4677e615120, 0xe508e300fcc99a78, 0x1058ace6e1705fd7, 0x2a24f80761f8626f, 0xdf74b7e17c41a7c0, 0x5edc51c460e8191f, 0xab8c1e227d51dcb0, 0x91f04ac3fdd9e108, 0x64a00525e06024a7, 0x1366c0c75eca04f1, 0xe6368f214373c15e, 0xdc4adbc0c3fbfce6, 0x291a9426de423949, 0xa8b27203c2eb8796, 0x5de23de5df524239, 0x679e69045fda7f81, 0x92ce26e24263ba2e, 0x41432185c0cb7176, 0xb4136e63dd72b4d9, 0x8e6f3a825dfa8961, 0x7b3f756440434cce, 0xfa9793415ceaf211, 0x0fc7dca7415337be, 0x35bb8846c1db0a06, 0xc0ebc7a0dc62cfa9, 0x91e083ccdf5ce61d, 0x64b0cc2ac2e523b2, 0x5ecc98cb426d1e0a, 0xab9cd72d5fd4dba5, 0x2a343108437d657a, 0xdf647eee5ec4a0d5, 0xe5182a0fde4c9d6d, 0x104865e9c3f558c2, 0xc3c5628e415d939a, 0x36952d685ce45635, 0x0ce97989dc6c6b8d, 0xf9b9366fc1d5ae22, 0x7811d04add7c10fd, 0x8d419facc0c5d552, 0xb73dcb4d404de8ea, 0x426d84ab5df42d45, 0x35ab4149e35e0d13, 0xc0fb0eaffee7c8bc, 0xfa875a4e7e6ff504, 0x0fd715a863d630ab, 0x8e7ff38d7f7f8e74, 0x7b2fbc6b62c64bdb, 0x4153e88ae24e7663, 0xb403a76cfff7b3cc, 0x678ea00b7d5f7894, 0x92deefed60e6bd3b, 0xa8a2bb0ce06e8083, 0x5df2f4eafdd7452c, 0xdc5a12cfe17efbf3, 0x290a5d29fcc73e5c, 0x137609c87c4f03e4, 0xe626462e61f6c64b, 0xfcfb820d011b4348, 0x09abcdeb1ca286e7, 0x33d7990a9c2abb5f, 0xc687d6ec81937ef0, 0x472f30c99d3ac02f, 0xb27f7f2f80830580, 0x88032bce000b3838, 0x7d5364281db2fd97, 0xaede634f9f1a36cf, 0x5b8e2ca982a3f360, 0x61f27848022bced8, 0x94a237ae1f920b77, 0x150ad18b033bb5a8, 0xe05a9e6d1e827007, 0xda26ca8c9e0a4dbf, 0x2f76856a83b38810, 0x58b040883d19a846, 0xade00f6e20a06de9, 0x979c5b8fa0285051, 0x62cc1469bd9195fe, 0xe364f24ca1382b21, 0x1634bdaabc81ee8e, 0x2c48e94b3c09d336, 0xd918a6ad21b01699, 0x0a95a1caa318ddc1, 0xffc5ee2cbea1186e, 0xc5b9bacd3e2925d6, 0x30e9f52b2390e079, 0xb141130e3f395ea6, 0x44115ce822809b09, 0x7e6d0809a208a6b1, 0x8b3d47efbfb1631e, 0x4bd6804f63d3acb7, 0xbe86cfa97e6a6918, 0x84fa9b48fee254a0, 0x71aad4aee35b910f, 0xf002328bfff22fd0, 0x05527d6de24bea7f, 0x3f2e298c62c3d7c7, 0xca7e666a7f7a1268, 0x19f3610dfdd2d930, 0xeca32eebe06b1c9f, 0xd6df7a0a60e32127, 0x238f35ec7d5ae488, 0xa227d3c961f35a57, 0x57779c2f7c4a9ff8, 0x6d0bc8cefcc2a240, 0x985b8728e17b67ef, 0xef9d42ca5fd147b9, 0x1acd0d2c42688216, 0x20b159cdc2e0bfae, 0xd5e1162bdf597a01, 0x5449f00ec3f0c4de, 0xa119bfe8de490171, 0x9b65eb095ec13cc9, 0x6e35a4ef4378f966, 0xbdb8a388c1d0323e, 0x48e8ec6edc69f791, 0x7294b88f5ce1ca29, 0x87c4f76941580f86, 0x066c114c5df1b159, 0xf33c5eaa404874f6, 0xc9400a4bc0c0494e, 0x3c1045addd798ce1, 0x26cd818ebd9409e2, 0xd39dce68a02dcc4d, 0xe9e19a8920a5f1f5, 0x1cb1d56f3d1c345a, 0x9d19334a21b58a85, 0x68497cac3c0c4f2a, 0x5235284dbc847292, 0xa76567aba13db73d, 0x74e860cc23957c65, 0x81b82f2a3e2cb9ca, 0xbbc47bcbbea48472, 0x4e94342da31d41dd, 0xcf3cd208bfb4ff02, 0x3a6c9deea20d3aad, 0x0010c90f22850715, 0xf54086e93f3cc2ba, 0x8286430b8196e2ec, 0x77d60ced9c2f2743, 0x4daa580c1ca71afb, 0xb8fa17ea011edf54, 0x3952f1cf1db7618b, 0xcc02be29000ea424, 0xf67eeac88086999c, 0x032ea52e9d3f5c33, 0xd0a3a2491f97976b, 0x25f3edaf022e52c4, 0x1f8fb94e82a66f7c, 0xeadff6a89f1faad3, 0x6b77108d83b6140c, 0x9e275f6b9e0fd1a3, 0xa45b0b8a1e87ec1b, 0x510b446c033e29b4, ], [ 0x0000000000000000, 0xcef05cca14bbf4df, 0xb86c3d5f8f359af7, 0x769c61959b8e6e28, 0x5554fe74b82946a7, 0x9ba4a2beac92b278, 0xed38c32b371cdc50, 0x23c89fe123a7288f, 0xaaa9fce970528d4e, 0x6459a02364e97991, 0x12c5c1b6ff6717b9, 0xdc359d7cebdce366, 0xfffd029dc87bcbe9, 0x310d5e57dcc03f36, 0x47913fc2474e511e, 0x8961630853f5a5c1, 0x70df7d1946e769d5, 0xbe2f21d3525c9d0a, 0xc8b34046c9d2f322, 0x06431c8cdd6907fd, 0x258b836dfece2f72, 0xeb7bdfa7ea75dbad, 0x9de7be3271fbb585, 0x5317e2f86540415a, 0xda7681f036b5e49b, 0x1486dd3a220e1044, 0x621abcafb9807e6c, 0xaceae065ad3b8ab3, 0x8f227f848e9ca23c, 0x41d2234e9a2756e3, 0x374e42db01a938cb, 0xf9be1e111512cc14, 0xe1befa328dced3aa, 0x2f4ea6f899752775, 0x59d2c76d02fb495d, 0x97229ba71640bd82, 0xb4ea044635e7950d, 0x7a1a588c215c61d2, 0x0c863919bad20ffa, 0xc27665d3ae69fb25, 0x4b1706dbfd9c5ee4, 0x85e75a11e927aa3b, 0xf37b3b8472a9c413, 0x3d8b674e661230cc, 0x1e43f8af45b51843, 0xd0b3a465510eec9c, 0xa62fc5f0ca8082b4, 0x68df993ade3b766b, 0x9161872bcb29ba7f, 0x5f91dbe1df924ea0, 0x290dba74441c2088, 0xe7fde6be50a7d457, 0xc435795f7300fcd8, 0x0ac5259567bb0807, 0x7c594400fc35662f, 0xb2a918cae88e92f0, 0x3bc87bc2bb7b3731, 0xf5382708afc0c3ee, 0x83a4469d344eadc6, 0x4d541a5720f55919, 0x6e9c85b603527196, 0xa06cd97c17e98549, 0xd6f0b8e98c67eb61, 0x1800e42398dc1fbe, 0xe6f170aebddfd41d, 0x28012c64a96420c2, 0x5e9d4df132ea4eea, 0x906d113b2651ba35, 0xb3a58eda05f692ba, 0x7d55d210114d6665, 0x0bc9b3858ac3084d, 0xc539ef4f9e78fc92, 0x4c588c47cd8d5953, 0x82a8d08dd936ad8c, 0xf434b11842b8c3a4, 0x3ac4edd25603377b, 0x190c723375a41ff4, 0xd7fc2ef9611feb2b, 0xa1604f6cfa918503, 0x6f9013a6ee2a71dc, 0x962e0db7fb38bdc8, 0x58de517def834917, 0x2e4230e8740d273f, 0xe0b26c2260b6d3e0, 0xc37af3c34311fb6f, 0x0d8aaf0957aa0fb0, 0x7b16ce9ccc246198, 0xb5e69256d89f9547, 0x3c87f15e8b6a3086, 0xf277ad949fd1c459, 0x84ebcc01045faa71, 0x4a1b90cb10e45eae, 0x69d30f2a33437621, 0xa72353e027f882fe, 0xd1bf3275bc76ecd6, 0x1f4f6ebfa8cd1809, 0x074f8a9c301107b7, 0xc9bfd65624aaf368, 0xbf23b7c3bf249d40, 0x71d3eb09ab9f699f, 0x521b74e888384110, 0x9ceb28229c83b5cf, 0xea7749b7070ddbe7, 0x2487157d13b62f38, 0xade6767540438af9, 0x63162abf54f87e26, 0x158a4b2acf76100e, 0xdb7a17e0dbcde4d1, 0xf8b28801f86acc5e, 0x3642d4cbecd13881, 0x40deb55e775f56a9, 0x8e2ee99463e4a276, 0x7790f78576f66e62, 0xb960ab4f624d9abd, 0xcffccadaf9c3f495, 0x010c9610ed78004a, 0x22c409f1cedf28c5, 0xec34553bda64dc1a, 0x9aa834ae41eab232, 0x54586864555146ed, 0xdd390b6c06a4e32c, 0x13c957a6121f17f3, 0x65553633899179db, 0xaba56af99d2a8d04, 0x886df518be8da58b, 0x469da9d2aa365154, 0x3001c84731b83f7c, 0xfef1948d2503cba3, 0xe86e6596ddfddb73, 0x269e395cc9462fac, 0x500258c952c84184, 0x9ef204034673b55b, 0xbd3a9be265d49dd4, 0x73cac728716f690b, 0x0556a6bdeae10723, 0xcba6fa77fe5af3fc, 0x42c7997fadaf563d, 0x8c37c5b5b914a2e2, 0xfaaba420229accca, 0x345bf8ea36213815, 0x1793670b1586109a, 0xd9633bc1013de445, 0xafff5a549ab38a6d, 0x610f069e8e087eb2, 0x98b1188f9b1ab2a6, 0x564144458fa14679, 0x20dd25d0142f2851, 0xee2d791a0094dc8e, 0xcde5e6fb2333f401, 0x0315ba31378800de, 0x7589dba4ac066ef6, 0xbb79876eb8bd9a29, 0x3218e466eb483fe8, 0xfce8b8acfff3cb37, 0x8a74d939647da51f, 0x448485f370c651c0, 0x674c1a125361794f, 0xa9bc46d847da8d90, 0xdf20274ddc54e3b8, 0x11d07b87c8ef1767, 0x09d09fa4503308d9, 0xc720c36e4488fc06, 0xb1bca2fbdf06922e, 0x7f4cfe31cbbd66f1, 0x5c8461d0e81a4e7e, 0x92743d1afca1baa1, 0xe4e85c8f672fd489, 0x2a18004573942056, 0xa379634d20618597, 0x6d893f8734da7148, 0x1b155e12af541f60, 0xd5e502d8bbefebbf, 0xf62d9d399848c330, 0x38ddc1f38cf337ef, 0x4e41a066177d59c7, 0x80b1fcac03c6ad18, 0x790fe2bd16d4610c, 0xb7ffbe77026f95d3, 0xc163dfe299e1fbfb, 0x0f9383288d5a0f24, 0x2c5b1cc9aefd27ab, 0xe2ab4003ba46d374, 0x9437219621c8bd5c, 0x5ac77d5c35734983, 0xd3a61e546686ec42, 0x1d56429e723d189d, 0x6bca230be9b376b5, 0xa53a7fc1fd08826a, 0x86f2e020deafaae5, 0x4802bceaca145e3a, 0x3e9edd7f519a3012, 0xf06e81b54521c4cd, 0x0e9f153860220f6e, 0xc06f49f27499fbb1, 0xb6f32867ef179599, 0x780374adfbac6146, 0x5bcbeb4cd80b49c9, 0x953bb786ccb0bd16, 0xe3a7d613573ed33e, 0x2d578ad9438527e1, 0xa436e9d110708220, 0x6ac6b51b04cb76ff, 0x1c5ad48e9f4518d7, 0xd2aa88448bfeec08, 0xf16217a5a859c487, 0x3f924b6fbce23058, 0x490e2afa276c5e70, 0x87fe763033d7aaaf, 0x7e40682126c566bb, 0xb0b034eb327e9264, 0xc62c557ea9f0fc4c, 0x08dc09b4bd4b0893, 0x2b1496559eec201c, 0xe5e4ca9f8a57d4c3, 0x9378ab0a11d9baeb, 0x5d88f7c005624e34, 0xd4e994c85697ebf5, 0x1a19c802422c1f2a, 0x6c85a997d9a27102, 0xa275f55dcd1985dd, 0x81bd6abceebead52, 0x4f4d3676fa05598d, 0x39d157e3618b37a5, 0xf7210b297530c37a, 0xef21ef0aedecdcc4, 0x21d1b3c0f957281b, 0x574dd25562d94633, 0x99bd8e9f7662b2ec, 0xba75117e55c59a63, 0x74854db4417e6ebc, 0x02192c21daf00094, 0xcce970ebce4bf44b, 0x458813e39dbe518a, 0x8b784f298905a555, 0xfde42ebc128bcb7d, 0x3314727606303fa2, 0x10dced972597172d, 0xde2cb15d312ce3f2, 0xa8b0d0c8aaa28dda, 0x66408c02be197905, 0x9ffe9213ab0bb511, 0x510eced9bfb041ce, 0x2792af4c243e2fe6, 0xe962f3863085db39, 0xcaaa6c671322f3b6, 0x045a30ad07990769, 0x72c651389c176941, 0xbc360df288ac9d9e, 0x35576efadb59385f, 0xfba73230cfe2cc80, 0x8d3b53a5546ca2a8, 0x43cb0f6f40d75677, 0x6003908e63707ef8, 0xaef3cc4477cb8a27, 0xd86fadd1ec45e40f, 0x169ff11bf8fe10d0, ], [ 0x0000000000000000, 0x2387c75bccaf3ac5, 0x470f8eb7995e758a, 0x648849ec55f14f4f, 0x8e1f1d6f32bceb14, 0xad98da34fe13d1d1, 0xc91093d8abe29e9e, 0xea975483674da45b, 0x39b2be15c33ba561, 0x1a35794e0f949fa4, 0x7ebd30a25a65d0eb, 0x5d3af7f996caea2e, 0xb7ada37af1874e75, 0x942a64213d2874b0, 0xf0a22dcd68d93bff, 0xd325ea96a476013a, 0x73657c2b86774ac2, 0x50e2bb704ad87007, 0x346af29c1f293f48, 0x17ed35c7d386058d, 0xfd7a6144b4cba1d6, 0xdefda61f78649b13, 0xba75eff32d95d45c, 0x99f228a8e13aee99, 0x4ad7c23e454cefa3, 0x6950056589e3d566, 0x0dd84c89dc129a29, 0x2e5f8bd210bda0ec, 0xc4c8df5177f004b7, 0xe74f180abb5f3e72, 0x83c751e6eeae713d, 0xa04096bd22014bf8, 0xe6caf8570cee9584, 0xc54d3f0cc041af41, 0xa1c576e095b0e00e, 0x8242b1bb591fdacb, 0x68d5e5383e527e90, 0x4b522263f2fd4455, 0x2fda6b8fa70c0b1a, 0x0c5dacd46ba331df, 0xdf784642cfd530e5, 0xfcff8119037a0a20, 0x9877c8f5568b456f, 0xbbf00fae9a247faa, 0x51675b2dfd69dbf1, 0x72e09c7631c6e134, 0x1668d59a6437ae7b, 0x35ef12c1a89894be, 0x95af847c8a99df46, 0xb62843274636e583, 0xd2a00acb13c7aacc, 0xf127cd90df689009, 0x1bb09913b8253452, 0x38375e48748a0e97, 0x5cbf17a4217b41d8, 0x7f38d0ffedd47b1d, 0xac1d3a6949a27a27, 0x8f9afd32850d40e2, 0xeb12b4ded0fc0fad, 0xc89573851c533568, 0x220227067b1e9133, 0x0185e05db7b1abf6, 0x650da9b1e240e4b9, 0x468a6eea2eefde7c, 0xe8197465bf9f5841, 0xcb9eb33e73306284, 0xaf16fad226c12dcb, 0x8c913d89ea6e170e, 0x6606690a8d23b355, 0x4581ae51418c8990, 0x2109e7bd147dc6df, 0x028e20e6d8d2fc1a, 0xd1abca707ca4fd20, 0xf22c0d2bb00bc7e5, 0x96a444c7e5fa88aa, 0xb523839c2955b26f, 0x5fb4d71f4e181634, 0x7c33104482b72cf1, 0x18bb59a8d74663be, 0x3b3c9ef31be9597b, 0x9b7c084e39e81283, 0xb8fbcf15f5472846, 0xdc7386f9a0b66709, 0xfff441a26c195dcc, 0x156315210b54f997, 0x36e4d27ac7fbc352, 0x526c9b96920a8c1d, 0x71eb5ccd5ea5b6d8, 0xa2ceb65bfad3b7e2, 0x81497100367c8d27, 0xe5c138ec638dc268, 0xc646ffb7af22f8ad, 0x2cd1ab34c86f5cf6, 0x0f566c6f04c06633, 0x6bde25835131297c, 0x4859e2d89d9e13b9, 0x0ed38c32b371cdc5, 0x2d544b697fdef700, 0x49dc02852a2fb84f, 0x6a5bc5dee680828a, 0x80cc915d81cd26d1, 0xa34b56064d621c14, 0xc7c31fea1893535b, 0xe444d8b1d43c699e, 0x37613227704a68a4, 0x14e6f57cbce55261, 0x706ebc90e9141d2e, 0x53e97bcb25bb27eb, 0xb97e2f4842f683b0, 0x9af9e8138e59b975, 0xfe71a1ffdba8f63a, 0xddf666a41707ccff, 0x7db6f01935068707, 0x5e313742f9a9bdc2, 0x3ab97eaeac58f28d, 0x193eb9f560f7c848, 0xf3a9ed7607ba6c13, 0xd02e2a2dcb1556d6, 0xb4a663c19ee41999, 0x9721a49a524b235c, 0x44044e0cf63d2266, 0x678389573a9218a3, 0x030bc0bb6f6357ec, 0x208c07e0a3cc6d29, 0xca1b5363c481c972, 0xe99c9438082ef3b7, 0x8d14ddd45ddfbcf8, 0xae931a8f9170863d, 0xf5be6c00d97cc3cb, 0xd639ab5b15d3f90e, 0xb2b1e2b74022b641, 0x913625ec8c8d8c84, 0x7ba1716febc028df, 0x5826b634276f121a, 0x3caeffd8729e5d55, 0x1f293883be316790, 0xcc0cd2151a4766aa, 0xef8b154ed6e85c6f, 0x8b035ca283191320, 0xa8849bf94fb629e5, 0x4213cf7a28fb8dbe, 0x61940821e454b77b, 0x051c41cdb1a5f834, 0x269b86967d0ac2f1, 0x86db102b5f0b8909, 0xa55cd77093a4b3cc, 0xc1d49e9cc655fc83, 0xe25359c70afac646, 0x08c40d446db7621d, 0x2b43ca1fa11858d8, 0x4fcb83f3f4e91797, 0x6c4c44a838462d52, 0xbf69ae3e9c302c68, 0x9cee6965509f16ad, 0xf8662089056e59e2, 0xdbe1e7d2c9c16327, 0x3176b351ae8cc77c, 0x12f1740a6223fdb9, 0x76793de637d2b2f6, 0x55fefabdfb7d8833, 0x13749457d592564f, 0x30f3530c193d6c8a, 0x547b1ae04ccc23c5, 0x77fcddbb80631900, 0x9d6b8938e72ebd5b, 0xbeec4e632b81879e, 0xda64078f7e70c8d1, 0xf9e3c0d4b2dff214, 0x2ac62a4216a9f32e, 0x0941ed19da06c9eb, 0x6dc9a4f58ff786a4, 0x4e4e63ae4358bc61, 0xa4d9372d2415183a, 0x875ef076e8ba22ff, 0xe3d6b99abd4b6db0, 0xc0517ec171e45775, 0x6011e87c53e51c8d, 0x43962f279f4a2648, 0x271e66cbcabb6907, 0x0499a190061453c2, 0xee0ef5136159f799, 0xcd893248adf6cd5c, 0xa9017ba4f8078213, 0x8a86bcff34a8b8d6, 0x59a3566990deb9ec, 0x7a2491325c718329, 0x1eacd8de0980cc66, 0x3d2b1f85c52ff6a3, 0xd7bc4b06a26252f8, 0xf43b8c5d6ecd683d, 0x90b3c5b13b3c2772, 0xb33402eaf7931db7, 0x1da7186566e39b8a, 0x3e20df3eaa4ca14f, 0x5aa896d2ffbdee00, 0x792f51893312d4c5, 0x93b8050a545f709e, 0xb03fc25198f04a5b, 0xd4b78bbdcd010514, 0xf7304ce601ae3fd1, 0x2415a670a5d83eeb, 0x0792612b6977042e, 0x631a28c73c864b61, 0x409def9cf02971a4, 0xaa0abb1f9764d5ff, 0x898d7c445bcbef3a, 0xed0535a80e3aa075, 0xce82f2f3c2959ab0, 0x6ec2644ee094d148, 0x4d45a3152c3beb8d, 0x29cdeaf979caa4c2, 0x0a4a2da2b5659e07, 0xe0dd7921d2283a5c, 0xc35abe7a1e870099, 0xa7d2f7964b764fd6, 0x845530cd87d97513, 0x5770da5b23af7429, 0x74f71d00ef004eec, 0x107f54ecbaf101a3, 0x33f893b7765e3b66, 0xd96fc73411139f3d, 0xfae8006fddbca5f8, 0x9e604983884deab7, 0xbde78ed844e2d072, 0xfb6de0326a0d0e0e, 0xd8ea2769a6a234cb, 0xbc626e85f3537b84, 0x9fe5a9de3ffc4141, 0x7572fd5d58b1e51a, 0x56f53a06941edfdf, 0x327d73eac1ef9090, 0x11fab4b10d40aa55, 0xc2df5e27a936ab6f, 0xe158997c659991aa, 0x85d0d0903068dee5, 0xa65717cbfcc7e420, 0x4cc043489b8a407b, 0x6f47841357257abe, 0x0bcfcdff02d435f1, 0x28480aa4ce7b0f34, 0x88089c19ec7a44cc, 0xab8f5b4220d57e09, 0xcf0712ae75243146, 0xec80d5f5b98b0b83, 0x06178176dec6afd8, 0x2590462d1269951d, 0x41180fc14798da52, 0x629fc89a8b37e097, 0xb1ba220c2f41e1ad, 0x923de557e3eedb68, 0xf6b5acbbb61f9427, 0xd5326be07ab0aee2, 0x3fa53f631dfd0ab9, 0x1c22f838d152307c, 0x78aab1d484a37f33, 0x5b2d768f480c45f6, ], [ 0x0000000000000000, 0xf3a8aeb8adb81c01, 0xc2ddd9bafd324b4b, 0x31757702508a574a, 0xa03737be5c26e5df, 0x539f9906f19ef9de, 0x62eaee04a114ae94, 0x914240bc0cacb295, 0x65e2ebb71e0fb8f7, 0x964a450fb3b7a4f6, 0xa73f320de33df3bc, 0x54979cb54e85efbd, 0xc5d5dc0942295d28, 0x367d72b1ef914129, 0x070805b3bf1b1663, 0xf4a0ab0b12a30a62, 0xcbc5d76e3c1f71ee, 0x386d79d691a76def, 0x09180ed4c12d3aa5, 0xfab0a06c6c9526a4, 0x6bf2e0d060399431, 0x985a4e68cd818830, 0xa92f396a9d0bdf7a, 0x5a8797d230b3c37b, 0xae273cd92210c919, 0x5d8f92618fa8d518, 0x6cfae563df228252, 0x9f524bdb729a9e53, 0x0e100b677e362cc6, 0xfdb8a5dfd38e30c7, 0xcccdd2dd8304678d, 0x3f657c652ebc7b8c, 0xb2072a17de7c9095, 0x41af84af73c48c94, 0x70daf3ad234edbde, 0x83725d158ef6c7df, 0x12301da9825a754a, 0xe198b3112fe2694b, 0xd0edc4137f683e01, 0x23456aabd2d02200, 0xd7e5c1a0c0732862, 0x244d6f186dcb3463, 0x1538181a3d416329, 0xe690b6a290f97f28, 0x77d2f61e9c55cdbd, 0x847a58a631edd1bc, 0xb50f2fa4616786f6, 0x46a7811cccdf9af7, 0x79c2fd79e263e17b, 0x8a6a53c14fdbfd7a, 0xbb1f24c31f51aa30, 0x48b78a7bb2e9b631, 0xd9f5cac7be4504a4, 0x2a5d647f13fd18a5, 0x1b28137d43774fef, 0xe880bdc5eecf53ee, 0x1c2016cefc6c598c, 0xef88b87651d4458d, 0xdefdcf74015e12c7, 0x2d5561ccace60ec6, 0xbc172170a04abc53, 0x4fbf8fc80df2a052, 0x7ecaf8ca5d78f718, 0x8d625672f0c0eb19, 0x4182d0e41abb5263, 0xb22a7e5cb7034e62, 0x835f095ee7891928, 0x70f7a7e64a310529, 0xe1b5e75a469db7bc, 0x121d49e2eb25abbd, 0x23683ee0bbaffcf7, 0xd0c090581617e0f6, 0x24603b5304b4ea94, 0xd7c895eba90cf695, 0xe6bde2e9f986a1df, 0x15154c51543ebdde, 0x84570ced58920f4b, 0x77ffa255f52a134a, 0x468ad557a5a04400, 0xb5227bef08185801, 0x8a47078a26a4238d, 0x79efa9328b1c3f8c, 0x489ade30db9668c6, 0xbb327088762e74c7, 0x2a7030347a82c652, 0xd9d89e8cd73ada53, 0xe8ade98e87b08d19, 0x1b0547362a089118, 0xefa5ec3d38ab9b7a, 0x1c0d42859513877b, 0x2d783587c599d031, 0xded09b3f6821cc30, 0x4f92db83648d7ea5, 0xbc3a753bc93562a4, 0x8d4f023999bf35ee, 0x7ee7ac81340729ef, 0xf385faf3c4c7c2f6, 0x002d544b697fdef7, 0x3158234939f589bd, 0xc2f08df1944d95bc, 0x53b2cd4d98e12729, 0xa01a63f535593b28, 0x916f14f765d36c62, 0x62c7ba4fc86b7063, 0x96671144dac87a01, 0x65cfbffc77706600, 0x54bac8fe27fa314a, 0xa71266468a422d4b, 0x365026fa86ee9fde, 0xc5f888422b5683df, 0xf48dff407bdcd495, 0x072551f8d664c894, 0x38402d9df8d8b318, 0xcbe883255560af19, 0xfa9df42705eaf853, 0x09355a9fa852e452, 0x98771a23a4fe56c7, 0x6bdfb49b09464ac6, 0x5aaac39959cc1d8c, 0xa9026d21f474018d, 0x5da2c62ae6d70bef, 0xae0a68924b6f17ee, 0x9f7f1f901be540a4, 0x6cd7b128b65d5ca5, 0xfd95f194baf1ee30, 0x0e3d5f2c1749f231, 0x3f48282e47c3a57b, 0xcce08696ea7bb97a, 0x8305a1c83576a4c6, 0x70ad0f7098ceb8c7, 0x41d87872c844ef8d, 0xb270d6ca65fcf38c, 0x2332967669504119, 0xd09a38cec4e85d18, 0xe1ef4fcc94620a52, 0x1247e17439da1653, 0xe6e74a7f2b791c31, 0x154fe4c786c10030, 0x243a93c5d64b577a, 0xd7923d7d7bf34b7b, 0x46d07dc1775ff9ee, 0xb578d379dae7e5ef, 0x840da47b8a6db2a5, 0x77a50ac327d5aea4, 0x48c076a60969d528, 0xbb68d81ea4d1c929, 0x8a1daf1cf45b9e63, 0x79b501a459e38262, 0xe8f74118554f30f7, 0x1b5fefa0f8f72cf6, 0x2a2a98a2a87d7bbc, 0xd982361a05c567bd, 0x2d229d1117666ddf, 0xde8a33a9bade71de, 0xefff44abea542694, 0x1c57ea1347ec3a95, 0x8d15aaaf4b408800, 0x7ebd0417e6f89401, 0x4fc87315b672c34b, 0xbc60ddad1bcadf4a, 0x31028bdfeb0a3453, 0xc2aa256746b22852, 0xf3df526516387f18, 0x0077fcddbb806319, 0x9135bc61b72cd18c, 0x629d12d91a94cd8d, 0x53e865db4a1e9ac7, 0xa040cb63e7a686c6, 0x54e06068f5058ca4, 0xa748ced058bd90a5, 0x963db9d20837c7ef, 0x6595176aa58fdbee, 0xf4d757d6a923697b, 0x077ff96e049b757a, 0x360a8e6c54112230, 0xc5a220d4f9a93e31, 0xfac75cb1d71545bd, 0x096ff2097aad59bc, 0x381a850b2a270ef6, 0xcbb22bb3879f12f7, 0x5af06b0f8b33a062, 0xa958c5b7268bbc63, 0x982db2b57601eb29, 0x6b851c0ddbb9f728, 0x9f25b706c91afd4a, 0x6c8d19be64a2e14b, 0x5df86ebc3428b601, 0xae50c0049990aa00, 0x3f1280b8953c1895, 0xccba2e0038840494, 0xfdcf5902680e53de, 0x0e67f7bac5b64fdf, 0xc287712c2fcdf6a5, 0x312fdf948275eaa4, 0x005aa896d2ffbdee, 0xf3f2062e7f47a1ef, 0x62b0469273eb137a, 0x9118e82ade530f7b, 0xa06d9f288ed95831, 0x53c5319023614430, 0xa7659a9b31c24e52, 0x54cd34239c7a5253, 0x65b84321ccf00519, 0x9610ed9961481918, 0x0752ad256de4ab8d, 0xf4fa039dc05cb78c, 0xc58f749f90d6e0c6, 0x3627da273d6efcc7, 0x0942a64213d2874b, 0xfaea08fabe6a9b4a, 0xcb9f7ff8eee0cc00, 0x3837d1404358d001, 0xa97591fc4ff46294, 0x5add3f44e24c7e95, 0x6ba84846b2c629df, 0x9800e6fe1f7e35de, 0x6ca04df50ddd3fbc, 0x9f08e34da06523bd, 0xae7d944ff0ef74f7, 0x5dd53af75d5768f6, 0xcc977a4b51fbda63, 0x3f3fd4f3fc43c662, 0x0e4aa3f1acc99128, 0xfde20d4901718d29, 0x70805b3bf1b16630, 0x8328f5835c097a31, 0xb25d82810c832d7b, 0x41f52c39a13b317a, 0xd0b76c85ad9783ef, 0x231fc23d002f9fee, 0x126ab53f50a5c8a4, 0xe1c21b87fd1dd4a5, 0x1562b08cefbedec7, 0xe6ca1e344206c2c6, 0xd7bf6936128c958c, 0x2417c78ebf34898d, 0xb5558732b3983b18, 0x46fd298a1e202719, 0x77885e884eaa7053, 0x8420f030e3126c52, 0xbb458c55cdae17de, 0x48ed22ed60160bdf, 0x799855ef309c5c95, 0x8a30fb579d244094, 0x1b72bbeb9188f201, 0xe8da15533c30ee00, 0xd9af62516cbab94a, 0x2a07cce9c102a54b, 0xdea767e2d3a1af29, 0x2d0fc95a7e19b328, 0x1c7abe582e93e462, 0xefd210e0832bf863, 0x7e90505c8f874af6, 0x8d38fee4223f56f7, 0xbc4d89e672b501bd, 0x4fe5275edf0d1dbc, ], [ 0x0000000000000000, 0x08fa400c2e39e9f5, 0x11f480185c73d3ea, 0x190ec014724a3a1f, 0x23e90030b8e7a7d4, 0x2b13403c96de4e21, 0x321d8028e494743e, 0x3ae7c024caad9dcb, 0x47d2006171cf4fa8, 0x4f28406d5ff6a65d, 0x562680792dbc9c42, 0x5edcc075038575b7, 0x643b0051c928e87c, 0x6cc1405de7110189, 0x75cf8049955b3b96, 0x7d35c045bb62d263, 0x8fa400c2e39e9f50, 0x875e40cecda776a5, 0x9e5080dabfed4cba, 0x96aac0d691d4a54f, 0xac4d00f25b793884, 0xa4b740fe7540d171, 0xbdb980ea070aeb6e, 0xb543c0e62933029b, 0xc87600a39251d0f8, 0xc08c40afbc68390d, 0xd98280bbce220312, 0xd178c0b7e01beae7, 0xeb9f00932ab6772c, 0xe365409f048f9ed9, 0xfa6b808b76c5a4c6, 0xf291c08758fc4d33, 0x3ac4854e617f4de9, 0x323ec5424f46a41c, 0x2b3005563d0c9e03, 0x23ca455a133577f6, 0x192d857ed998ea3d, 0x11d7c572f7a103c8, 0x08d9056685eb39d7, 0x0023456aabd2d022, 0x7d16852f10b00241, 0x75ecc5233e89ebb4, 0x6ce205374cc3d1ab, 0x6418453b62fa385e, 0x5eff851fa857a595, 0x5605c513866e4c60, 0x4f0b0507f424767f, 0x47f1450bda1d9f8a, 0xb560858c82e1d2b9, 0xbd9ac580acd83b4c, 0xa4940594de920153, 0xac6e4598f0abe8a6, 0x968985bc3a06756d, 0x9e73c5b0143f9c98, 0x877d05a46675a687, 0x8f8745a8484c4f72, 0xf2b285edf32e9d11, 0xfa48c5e1dd1774e4, 0xe34605f5af5d4efb, 0xebbc45f98164a70e, 0xd15b85dd4bc93ac5, 0xd9a1c5d165f0d330, 0xc0af05c517bae92f, 0xc85545c9398300da, 0x75890a9cc2fe9bd2, 0x7d734a90ecc77227, 0x647d8a849e8d4838, 0x6c87ca88b0b4a1cd, 0x56600aac7a193c06, 0x5e9a4aa05420d5f3, 0x47948ab4266aefec, 0x4f6ecab808530619, 0x325b0afdb331d47a, 0x3aa14af19d083d8f, 0x23af8ae5ef420790, 0x2b55cae9c17bee65, 0x11b20acd0bd673ae, 0x19484ac125ef9a5b, 0x00468ad557a5a044, 0x08bccad9799c49b1, 0xfa2d0a5e21600482, 0xf2d74a520f59ed77, 0xebd98a467d13d768, 0xe323ca4a532a3e9d, 0xd9c40a6e9987a356, 0xd13e4a62b7be4aa3, 0xc8308a76c5f470bc, 0xc0caca7aebcd9949, 0xbdff0a3f50af4b2a, 0xb5054a337e96a2df, 0xac0b8a270cdc98c0, 0xa4f1ca2b22e57135, 0x9e160a0fe848ecfe, 0x96ec4a03c671050b, 0x8fe28a17b43b3f14, 0x8718ca1b9a02d6e1, 0x4f4d8fd2a381d63b, 0x47b7cfde8db83fce, 0x5eb90fcafff205d1, 0x56434fc6d1cbec24, 0x6ca48fe21b6671ef, 0x645ecfee355f981a, 0x7d500ffa4715a205, 0x75aa4ff6692c4bf0, 0x089f8fb3d24e9993, 0x0065cfbffc777066, 0x196b0fab8e3d4a79, 0x11914fa7a004a38c, 0x2b768f836aa93e47, 0x238ccf8f4490d7b2, 0x3a820f9b36daedad, 0x32784f9718e30458, 0xc0e98f10401f496b, 0xc813cf1c6e26a09e, 0xd11d0f081c6c9a81, 0xd9e74f0432557374, 0xe3008f20f8f8eebf, 0xebfacf2cd6c1074a, 0xf2f40f38a48b3d55, 0xfa0e4f348ab2d4a0, 0x873b8f7131d006c3, 0x8fc1cf7d1fe9ef36, 0x96cf0f696da3d529, 0x9e354f65439a3cdc, 0xa4d28f418937a117, 0xac28cf4da70e48e2, 0xb5260f59d54472fd, 0xbddc4f55fb7d9b08, 0xeb12153985fd37a4, 0xe3e85535abc4de51, 0xfae69521d98ee44e, 0xf21cd52df7b70dbb, 0xc8fb15093d1a9070, 0xc001550513237985, 0xd90f95116169439a, 0xd1f5d51d4f50aa6f, 0xacc01558f432780c, 0xa43a5554da0b91f9, 0xbd349540a841abe6, 0xb5ced54c86784213, 0x8f2915684cd5dfd8, 0x87d3556462ec362d, 0x9edd957010a60c32, 0x9627d57c3e9fe5c7, 0x64b615fb6663a8f4, 0x6c4c55f7485a4101, 0x754295e33a107b1e, 0x7db8d5ef142992eb, 0x475f15cbde840f20, 0x4fa555c7f0bde6d5, 0x56ab95d382f7dcca, 0x5e51d5dfacce353f, 0x2364159a17ace75c, 0x2b9e559639950ea9, 0x329095824bdf34b6, 0x3a6ad58e65e6dd43, 0x008d15aaaf4b4088, 0x087755a68172a97d, 0x117995b2f3389362, 0x1983d5bedd017a97, 0xd1d69077e4827a4d, 0xd92cd07bcabb93b8, 0xc022106fb8f1a9a7, 0xc8d8506396c84052, 0xf23f90475c65dd99, 0xfac5d04b725c346c, 0xe3cb105f00160e73, 0xeb3150532e2fe786, 0x96049016954d35e5, 0x9efed01abb74dc10, 0x87f0100ec93ee60f, 0x8f0a5002e7070ffa, 0xb5ed90262daa9231, 0xbd17d02a03937bc4, 0xa419103e71d941db, 0xace350325fe0a82e, 0x5e7290b5071ce51d, 0x5688d0b929250ce8, 0x4f8610ad5b6f36f7, 0x477c50a17556df02, 0x7d9b9085bffb42c9, 0x7561d08991c2ab3c, 0x6c6f109de3889123, 0x64955091cdb178d6, 0x19a090d476d3aab5, 0x115ad0d858ea4340, 0x085410cc2aa0795f, 0x00ae50c0049990aa, 0x3a4990e4ce340d61, 0x32b3d0e8e00de494, 0x2bbd10fc9247de8b, 0x234750f0bc7e377e, 0x9e9b1fa54703ac76, 0x96615fa9693a4583, 0x8f6f9fbd1b707f9c, 0x8795dfb135499669, 0xbd721f95ffe40ba2, 0xb5885f99d1dde257, 0xac869f8da397d848, 0xa47cdf818dae31bd, 0xd9491fc436cce3de, 0xd1b35fc818f50a2b, 0xc8bd9fdc6abf3034, 0xc047dfd04486d9c1, 0xfaa01ff48e2b440a, 0xf25a5ff8a012adff, 0xeb549fecd25897e0, 0xe3aedfe0fc617e15, 0x113f1f67a49d3326, 0x19c55f6b8aa4dad3, 0x00cb9f7ff8eee0cc, 0x0831df73d6d70939, 0x32d61f571c7a94f2, 0x3a2c5f5b32437d07, 0x23229f4f40094718, 0x2bd8df436e30aeed, 0x56ed1f06d5527c8e, 0x5e175f0afb6b957b, 0x47199f1e8921af64, 0x4fe3df12a7184691, 0x75041f366db5db5a, 0x7dfe5f3a438c32af, 0x64f09f2e31c608b0, 0x6c0adf221fffe145, 0xa45f9aeb267ce19f, 0xaca5dae70845086a, 0xb5ab1af37a0f3275, 0xbd515aff5436db80, 0x87b69adb9e9b464b, 0x8f4cdad7b0a2afbe, 0x96421ac3c2e895a1, 0x9eb85acfecd17c54, 0xe38d9a8a57b3ae37, 0xeb77da86798a47c2, 0xf2791a920bc07ddd, 0xfa835a9e25f99428, 0xc0649abaef5409e3, 0xc89edab6c16de016, 0xd1901aa2b327da09, 0xd96a5aae9d1e33fc, 0x2bfb9a29c5e27ecf, 0x2301da25ebdb973a, 0x3a0f1a319991ad25, 0x32f55a3db7a844d0, 0x08129a197d05d91b, 0x00e8da15533c30ee, 0x19e61a0121760af1, 0x111c5a0d0f4fe304, 0x6c299a48b42d3167, 0x64d3da449a14d892, 0x7ddd1a50e85ee28d, 0x75275a5cc6670b78, 0x4fc09a780cca96b3, 0x473ada7422f37f46, 0x5e341a6050b94559, 0x56ce5a6c7e80acac, ], [ 0x0000000000000000, 0x57acc98fe7d7da2b, 0xaf59931fcfafb456, 0xf8f55a9028786e7d, 0x7b3fa2f4391d1be5, 0x2c936b7bdecac1ce, 0xd46631ebf6b2afb3, 0x83caf86411657598, 0xf67f45e8723a37ca, 0xa1d38c6795edede1, 0x5926d6f7bd95839c, 0x0e8a1f785a4259b7, 0x8d40e71c4b272c2f, 0xdaec2e93acf0f604, 0x2219740384889879, 0x75b5bd8c635f4252, 0xc9720f1b42361cdd, 0x9edec694a5e1c6f6, 0x662b9c048d99a88b, 0x3187558b6a4e72a0, 0xb24dadef7b2b0738, 0xe5e164609cfcdd13, 0x1d143ef0b484b36e, 0x4ab8f77f53536945, 0x3f0d4af3300c2b17, 0x68a1837cd7dbf13c, 0x9054d9ecffa39f41, 0xc7f810631874456a, 0x4432e807091130f2, 0x139e2188eec6ead9, 0xeb6b7b18c6be84a4, 0xbcc7b29721695e8f, 0xb7689afd222e4af3, 0xe0c45372c5f990d8, 0x183109e2ed81fea5, 0x4f9dc06d0a56248e, 0xcc5738091b335116, 0x9bfbf186fce48b3d, 0x630eab16d49ce540, 0x34a26299334b3f6b, 0x4117df1550147d39, 0x16bb169ab7c3a712, 0xee4e4c0a9fbbc96f, 0xb9e28585786c1344, 0x3a287de1690966dc, 0x6d84b46e8edebcf7, 0x9571eefea6a6d28a, 0xc2dd2771417108a1, 0x7e1a95e66018562e, 0x29b65c6987cf8c05, 0xd14306f9afb7e278, 0x86efcf7648603853, 0x0525371259054dcb, 0x5289fe9dbed297e0, 0xaa7ca40d96aaf99d, 0xfdd06d82717d23b6, 0x8865d00e122261e4, 0xdfc91981f5f5bbcf, 0x273c4311dd8dd5b2, 0x70908a9e3a5a0f99, 0xf35a72fa2b3f7a01, 0xa4f6bb75cce8a02a, 0x5c03e1e5e490ce57, 0x0baf286a0347147c, 0x4b5db131e21ee6af, 0x1cf178be05c93c84, 0xe404222e2db152f9, 0xb3a8eba1ca6688d2, 0x306213c5db03fd4a, 0x67ceda4a3cd42761, 0x9f3b80da14ac491c, 0xc8974955f37b9337, 0xbd22f4d99024d165, 0xea8e3d5677f30b4e, 0x127b67c65f8b6533, 0x45d7ae49b85cbf18, 0xc61d562da939ca80, 0x91b19fa24eee10ab, 0x6944c53266967ed6, 0x3ee80cbd8141a4fd, 0x822fbe2aa028fa72, 0xd58377a547ff2059, 0x2d762d356f874e24, 0x7adae4ba8850940f, 0xf9101cde9935e197, 0xaebcd5517ee23bbc, 0x56498fc1569a55c1, 0x01e5464eb14d8fea, 0x7450fbc2d212cdb8, 0x23fc324d35c51793, 0xdb0968dd1dbd79ee, 0x8ca5a152fa6aa3c5, 0x0f6f5936eb0fd65d, 0x58c390b90cd80c76, 0xa036ca2924a0620b, 0xf79a03a6c377b820, 0xfc352bccc030ac5c, 0xab99e24327e77677, 0x536cb8d30f9f180a, 0x04c0715ce848c221, 0x870a8938f92db7b9, 0xd0a640b71efa6d92, 0x28531a27368203ef, 0x7fffd3a8d155d9c4, 0x0a4a6e24b20a9b96, 0x5de6a7ab55dd41bd, 0xa513fd3b7da52fc0, 0xf2bf34b49a72f5eb, 0x7175ccd08b178073, 0x26d9055f6cc05a58, 0xde2c5fcf44b83425, 0x89809640a36fee0e, 0x354724d78206b081, 0x62ebed5865d16aaa, 0x9a1eb7c84da904d7, 0xcdb27e47aa7edefc, 0x4e788623bb1bab64, 0x19d44fac5ccc714f, 0xe121153c74b41f32, 0xb68ddcb39363c519, 0xc338613ff03c874b, 0x9494a8b017eb5d60, 0x6c61f2203f93331d, 0x3bcd3bafd844e936, 0xb807c3cbc9219cae, 0xefab0a442ef64685, 0x175e50d4068e28f8, 0x40f2995be159f2d3, 0x96bb6263c43dcd5e, 0xc117abec23ea1775, 0x39e2f17c0b927908, 0x6e4e38f3ec45a323, 0xed84c097fd20d6bb, 0xba2809181af70c90, 0x42dd5388328f62ed, 0x15719a07d558b8c6, 0x60c4278bb607fa94, 0x3768ee0451d020bf, 0xcf9db49479a84ec2, 0x98317d1b9e7f94e9, 0x1bfb857f8f1ae171, 0x4c574cf068cd3b5a, 0xb4a2166040b55527, 0xe30edfefa7628f0c, 0x5fc96d78860bd183, 0x0865a4f761dc0ba8, 0xf090fe6749a465d5, 0xa73c37e8ae73bffe, 0x24f6cf8cbf16ca66, 0x735a060358c1104d, 0x8baf5c9370b97e30, 0xdc03951c976ea41b, 0xa9b62890f431e649, 0xfe1ae11f13e63c62, 0x06efbb8f3b9e521f, 0x51437200dc498834, 0xd2898a64cd2cfdac, 0x852543eb2afb2787, 0x7dd0197b028349fa, 0x2a7cd0f4e55493d1, 0x21d3f89ee61387ad, 0x767f311101c45d86, 0x8e8a6b8129bc33fb, 0xd926a20ece6be9d0, 0x5aec5a6adf0e9c48, 0x0d4093e538d94663, 0xf5b5c97510a1281e, 0xa21900faf776f235, 0xd7acbd769429b067, 0x800074f973fe6a4c, 0x78f52e695b860431, 0x2f59e7e6bc51de1a, 0xac931f82ad34ab82, 0xfb3fd60d4ae371a9, 0x03ca8c9d629b1fd4, 0x54664512854cc5ff, 0xe8a1f785a4259b70, 0xbf0d3e0a43f2415b, 0x47f8649a6b8a2f26, 0x1054ad158c5df50d, 0x939e55719d388095, 0xc4329cfe7aef5abe, 0x3cc7c66e529734c3, 0x6b6b0fe1b540eee8, 0x1edeb26dd61facba, 0x49727be231c87691, 0xb187217219b018ec, 0xe62be8fdfe67c2c7, 0x65e11099ef02b75f, 0x324dd91608d56d74, 0xcab8838620ad0309, 0x9d144a09c77ad922, 0xdde6d35226232bf1, 0x8a4a1addc1f4f1da, 0x72bf404de98c9fa7, 0x251389c20e5b458c, 0xa6d971a61f3e3014, 0xf175b829f8e9ea3f, 0x0980e2b9d0918442, 0x5e2c2b3637465e69, 0x2b9996ba54191c3b, 0x7c355f35b3cec610, 0x84c005a59bb6a86d, 0xd36ccc2a7c617246, 0x50a6344e6d0407de, 0x070afdc18ad3ddf5, 0xffffa751a2abb388, 0xa8536ede457c69a3, 0x1494dc496415372c, 0x433815c683c2ed07, 0xbbcd4f56abba837a, 0xec6186d94c6d5951, 0x6fab7ebd5d082cc9, 0x3807b732badff6e2, 0xc0f2eda292a7989f, 0x975e242d757042b4, 0xe2eb99a1162f00e6, 0xb547502ef1f8dacd, 0x4db20abed980b4b0, 0x1a1ec3313e576e9b, 0x99d43b552f321b03, 0xce78f2dac8e5c128, 0x368da84ae09daf55, 0x612161c5074a757e, 0x6a8e49af040d6102, 0x3d228020e3dabb29, 0xc5d7dab0cba2d554, 0x927b133f2c750f7f, 0x11b1eb5b3d107ae7, 0x461d22d4dac7a0cc, 0xbee87844f2bfceb1, 0xe944b1cb1568149a, 0x9cf10c47763756c8, 0xcb5dc5c891e08ce3, 0x33a89f58b998e29e, 0x640456d75e4f38b5, 0xe7ceaeb34f2a4d2d, 0xb062673ca8fd9706, 0x48973dac8085f97b, 0x1f3bf42367522350, 0xa3fc46b4463b7ddf, 0xf4508f3ba1eca7f4, 0x0ca5d5ab8994c989, 0x5b091c246e4313a2, 0xd8c3e4407f26663a, 0x8f6f2dcf98f1bc11, 0x779a775fb089d26c, 0x2036bed0575e0847, 0x5583035c34014a15, 0x022fcad3d3d6903e, 0xfada9043fbaefe43, 0xad7659cc1c792468, 0x2ebca1a80d1c51f0, 0x79106827eacb8bdb, 0x81e532b7c2b3e5a6, 0xd649fb3825643f8d, ], [ 0x0000000000000000, 0x7cb340a3f431e4c0, 0xf9668147e863c980, 0x85d5c1e41c522d40, 0xd74186447685e049, 0xabf2c6e782b40489, 0x2e2707039ee629c9, 0x529447a06ad7cd09, 0x8b0f88434b49b3db, 0xf7bcc8e0bf78571b, 0x72690904a32a7a5b, 0x0eda49a7571b9e9b, 0x5c4e0e073dcc5392, 0x20fd4ea4c9fdb752, 0xa5288f40d5af9a12, 0xd99bcfe3219e7ed2, 0x3393944d30d114ff, 0x4f20d4eec4e0f03f, 0xcaf5150ad8b2dd7f, 0xb64655a92c8339bf, 0xe4d212094654f4b6, 0x986152aab2651076, 0x1db4934eae373d36, 0x6107d3ed5a06d9f6, 0xb89c1c0e7b98a724, 0xc42f5cad8fa943e4, 0x41fa9d4993fb6ea4, 0x3d49ddea67ca8a64, 0x6fdd9a4a0d1d476d, 0x136edae9f92ca3ad, 0x96bb1b0de57e8eed, 0xea085bae114f6a2d, 0x6727289a61a229fe, 0x1b9468399593cd3e, 0x9e41a9dd89c1e07e, 0xe2f2e97e7df004be, 0xb066aede1727c9b7, 0xccd5ee7de3162d77, 0x49002f99ff440037, 0x35b36f3a0b75e4f7, 0xec28a0d92aeb9a25, 0x909be07adeda7ee5, 0x154e219ec28853a5, 0x69fd613d36b9b765, 0x3b69269d5c6e7a6c, 0x47da663ea85f9eac, 0xc20fa7dab40db3ec, 0xbebce779403c572c, 0x54b4bcd751733d01, 0x2807fc74a542d9c1, 0xadd23d90b910f481, 0xd1617d334d211041, 0x83f53a9327f6dd48, 0xff467a30d3c73988, 0x7a93bbd4cf9514c8, 0x0620fb773ba4f008, 0xdfbb34941a3a8eda, 0xa3087437ee0b6a1a, 0x26ddb5d3f259475a, 0x5a6ef5700668a39a, 0x08fab2d06cbf6e93, 0x7449f273988e8a53, 0xf19c339784dca713, 0x8d2f733470ed43d3, 0xce4e5134c34453fc, 0xb2fd11973775b73c, 0x3728d0732b279a7c, 0x4b9b90d0df167ebc, 0x190fd770b5c1b3b5, 0x65bc97d341f05775, 0xe06956375da27a35, 0x9cda1694a9939ef5, 0x4541d977880de027, 0x39f299d47c3c04e7, 0xbc275830606e29a7, 0xc0941893945fcd67, 0x92005f33fe88006e, 0xeeb31f900ab9e4ae, 0x6b66de7416ebc9ee, 0x17d59ed7e2da2d2e, 0xfdddc579f3954703, 0x816e85da07a4a3c3, 0x04bb443e1bf68e83, 0x7808049defc76a43, 0x2a9c433d8510a74a, 0x562f039e7121438a, 0xd3fac27a6d736eca, 0xaf4982d999428a0a, 0x76d24d3ab8dcf4d8, 0x0a610d994ced1018, 0x8fb4cc7d50bf3d58, 0xf3078cdea48ed998, 0xa193cb7ece591491, 0xdd208bdd3a68f051, 0x58f54a39263add11, 0x24460a9ad20b39d1, 0xa96979aea2e67a02, 0xd5da390d56d79ec2, 0x500ff8e94a85b382, 0x2cbcb84abeb45742, 0x7e28ffead4639a4b, 0x029bbf4920527e8b, 0x874e7ead3c0053cb, 0xfbfd3e0ec831b70b, 0x2266f1ede9afc9d9, 0x5ed5b14e1d9e2d19, 0xdb0070aa01cc0059, 0xa7b33009f5fde499, 0xf52777a99f2a2990, 0x8994370a6b1bcd50, 0x0c41f6ee7749e010, 0x70f2b64d837804d0, 0x9afaede392376efd, 0xe649ad4066068a3d, 0x639c6ca47a54a77d, 0x1f2f2c078e6543bd, 0x4dbb6ba7e4b28eb4, 0x31082b0410836a74, 0xb4ddeae00cd14734, 0xc86eaa43f8e0a3f4, 0x11f565a0d97edd26, 0x6d4625032d4f39e6, 0xe893e4e7311d14a6, 0x9420a444c52cf066, 0xc6b4e3e4affb3d6f, 0xba07a3475bcad9af, 0x3fd262a34798f4ef, 0x43612200b3a9102f, 0xb91026a220cad4b1, 0xc5a36601d4fb3071, 0x4076a7e5c8a91d31, 0x3cc5e7463c98f9f1, 0x6e51a0e6564f34f8, 0x12e2e045a27ed038, 0x973721a1be2cfd78, 0xeb8461024a1d19b8, 0x321faee16b83676a, 0x4eacee429fb283aa, 0xcb792fa683e0aeea, 0xb7ca6f0577d14a2a, 0xe55e28a51d068723, 0x99ed6806e93763e3, 0x1c38a9e2f5654ea3, 0x608be9410154aa63, 0x8a83b2ef101bc04e, 0xf630f24ce42a248e, 0x73e533a8f87809ce, 0x0f56730b0c49ed0e, 0x5dc234ab669e2007, 0x2171740892afc4c7, 0xa4a4b5ec8efde987, 0xd817f54f7acc0d47, 0x018c3aac5b527395, 0x7d3f7a0faf639755, 0xf8eabbebb331ba15, 0x8459fb4847005ed5, 0xd6cdbce82dd793dc, 0xaa7efc4bd9e6771c, 0x2fab3dafc5b45a5c, 0x53187d0c3185be9c, 0xde370e384168fd4f, 0xa2844e9bb559198f, 0x27518f7fa90b34cf, 0x5be2cfdc5d3ad00f, 0x0976887c37ed1d06, 0x75c5c8dfc3dcf9c6, 0xf010093bdf8ed486, 0x8ca349982bbf3046, 0x5538867b0a214e94, 0x298bc6d8fe10aa54, 0xac5e073ce2428714, 0xd0ed479f167363d4, 0x8279003f7ca4aedd, 0xfeca409c88954a1d, 0x7b1f817894c7675d, 0x07acc1db60f6839d, 0xeda49a7571b9e9b0, 0x9117dad685880d70, 0x14c21b3299da2030, 0x68715b916debc4f0, 0x3ae51c31073c09f9, 0x46565c92f30ded39, 0xc3839d76ef5fc079, 0xbf30ddd51b6e24b9, 0x66ab12363af05a6b, 0x1a185295cec1beab, 0x9fcd9371d29393eb, 0xe37ed3d226a2772b, 0xb1ea94724c75ba22, 0xcd59d4d1b8445ee2, 0x488c1535a41673a2, 0x343f559650279762, 0x775e7796e38e874d, 0x0bed373517bf638d, 0x8e38f6d10bed4ecd, 0xf28bb672ffdcaa0d, 0xa01ff1d2950b6704, 0xdcacb171613a83c4, 0x597970957d68ae84, 0x25ca303689594a44, 0xfc51ffd5a8c73496, 0x80e2bf765cf6d056, 0x05377e9240a4fd16, 0x79843e31b49519d6, 0x2b107991de42d4df, 0x57a339322a73301f, 0xd276f8d636211d5f, 0xaec5b875c210f99f, 0x44cde3dbd35f93b2, 0x387ea378276e7772, 0xbdab629c3b3c5a32, 0xc118223fcf0dbef2, 0x938c659fa5da73fb, 0xef3f253c51eb973b, 0x6aeae4d84db9ba7b, 0x1659a47bb9885ebb, 0xcfc26b9898162069, 0xb3712b3b6c27c4a9, 0x36a4eadf7075e9e9, 0x4a17aa7c84440d29, 0x1883eddcee93c020, 0x6430ad7f1aa224e0, 0xe1e56c9b06f009a0, 0x9d562c38f2c1ed60, 0x10795f0c822caeb3, 0x6cca1faf761d4a73, 0xe91fde4b6a4f6733, 0x95ac9ee89e7e83f3, 0xc738d948f4a94efa, 0xbb8b99eb0098aa3a, 0x3e5e580f1cca877a, 0x42ed18ace8fb63ba, 0x9b76d74fc9651d68, 0xe7c597ec3d54f9a8, 0x621056082106d4e8, 0x1ea316abd5373028, 0x4c37510bbfe0fd21, 0x308411a84bd119e1, 0xb551d04c578334a1, 0xc9e290efa3b2d061, 0x23eacb41b2fdba4c, 0x5f598be246cc5e8c, 0xda8c4a065a9e73cc, 0xa63f0aa5aeaf970c, 0xf4ab4d05c4785a05, 0x88180da63049bec5, 0x0dcdcc422c1b9385, 0x717e8ce1d82a7745, 0xa8e54302f9b40997, 0xd45603a10d85ed57, 0x5183c24511d7c017, 0x2d3082e6e5e624d7, 0x7fa4c5468f31e9de, 0x031785e57b000d1e, 0x86c244016752205e, 0xfa7104a29363c49e, ], [ 0x0000000000000000, 0xdbd9d01799459492, 0x923f24e494c95a6d, 0x49e6f4f30d8cceff, 0x01f2cd028fd0c793, 0xda2b1d1516955301, 0x93cde9e61b199dfe, 0x481439f1825c096c, 0x03e59a051fa18f26, 0xd83c4a1286e41bb4, 0x91dabee18b68d54b, 0x4a036ef6122d41d9, 0x02175707907148b5, 0xd9ce87100934dc27, 0x902873e304b812d8, 0x4bf1a3f49dfd864a, 0x07cb340a3f431e4c, 0xdc12e41da6068ade, 0x95f410eeab8a4421, 0x4e2dc0f932cfd0b3, 0x0639f908b093d9df, 0xdde0291f29d64d4d, 0x9406ddec245a83b2, 0x4fdf0dfbbd1f1720, 0x042eae0f20e2916a, 0xdff77e18b9a705f8, 0x96118aebb42bcb07, 0x4dc85afc2d6e5f95, 0x05dc630daf3256f9, 0xde05b31a3677c26b, 0x97e347e93bfb0c94, 0x4c3a97fea2be9806, 0x0f9668147e863c98, 0xd44fb803e7c3a80a, 0x9da94cf0ea4f66f5, 0x46709ce7730af267, 0x0e64a516f156fb0b, 0xd5bd750168136f99, 0x9c5b81f2659fa166, 0x478251e5fcda35f4, 0x0c73f2116127b3be, 0xd7aa2206f862272c, 0x9e4cd6f5f5eee9d3, 0x459506e26cab7d41, 0x0d813f13eef7742d, 0xd658ef0477b2e0bf, 0x9fbe1bf77a3e2e40, 0x4467cbe0e37bbad2, 0x085d5c1e41c522d4, 0xd3848c09d880b646, 0x9a6278fad50c78b9, 0x41bba8ed4c49ec2b, 0x09af911cce15e547, 0xd276410b575071d5, 0x9b90b5f85adcbf2a, 0x404965efc3992bb8, 0x0bb8c61b5e64adf2, 0xd061160cc7213960, 0x9987e2ffcaadf79f, 0x425e32e853e8630d, 0x0a4a0b19d1b46a61, 0xd193db0e48f1fef3, 0x98752ffd457d300c, 0x43acffeadc38a49e, 0x1f2cd028fd0c7930, 0xc4f5003f6449eda2, 0x8d13f4cc69c5235d, 0x56ca24dbf080b7cf, 0x1ede1d2a72dcbea3, 0xc507cd3deb992a31, 0x8ce139cee615e4ce, 0x5738e9d97f50705c, 0x1cc94a2de2adf616, 0xc7109a3a7be86284, 0x8ef66ec97664ac7b, 0x552fbedeef2138e9, 0x1d3b872f6d7d3185, 0xc6e25738f438a517, 0x8f04a3cbf9b46be8, 0x54dd73dc60f1ff7a, 0x18e7e422c24f677c, 0xc33e34355b0af3ee, 0x8ad8c0c656863d11, 0x510110d1cfc3a983, 0x191529204d9fa0ef, 0xc2ccf937d4da347d, 0x8b2a0dc4d956fa82, 0x50f3ddd340136e10, 0x1b027e27ddeee85a, 0xc0dbae3044ab7cc8, 0x893d5ac34927b237, 0x52e48ad4d06226a5, 0x1af0b325523e2fc9, 0xc1296332cb7bbb5b, 0x88cf97c1c6f775a4, 0x531647d65fb2e136, 0x10bab83c838a45a8, 0xcb63682b1acfd13a, 0x82859cd817431fc5, 0x595c4ccf8e068b57, 0x1148753e0c5a823b, 0xca91a529951f16a9, 0x837751da9893d856, 0x58ae81cd01d64cc4, 0x135f22399c2bca8e, 0xc886f22e056e5e1c, 0x816006dd08e290e3, 0x5ab9d6ca91a70471, 0x12adef3b13fb0d1d, 0xc9743f2c8abe998f, 0x8092cbdf87325770, 0x5b4b1bc81e77c3e2, 0x17718c36bcc95be4, 0xcca85c21258ccf76, 0x854ea8d228000189, 0x5e9778c5b145951b, 0x1683413433199c77, 0xcd5a9123aa5c08e5, 0x84bc65d0a7d0c61a, 0x5f65b5c73e955288, 0x14941633a368d4c2, 0xcf4dc6243a2d4050, 0x86ab32d737a18eaf, 0x5d72e2c0aee41a3d, 0x1566db312cb81351, 0xcebf0b26b5fd87c3, 0x8759ffd5b871493c, 0x5c802fc22134ddae, 0x3e59a051fa18f260, 0xe5807046635d66f2, 0xac6684b56ed1a80d, 0x77bf54a2f7943c9f, 0x3fab6d5375c835f3, 0xe472bd44ec8da161, 0xad9449b7e1016f9e, 0x764d99a07844fb0c, 0x3dbc3a54e5b97d46, 0xe665ea437cfce9d4, 0xaf831eb07170272b, 0x745acea7e835b3b9, 0x3c4ef7566a69bad5, 0xe7972741f32c2e47, 0xae71d3b2fea0e0b8, 0x75a803a567e5742a, 0x3992945bc55bec2c, 0xe24b444c5c1e78be, 0xabadb0bf5192b641, 0x707460a8c8d722d3, 0x386059594a8b2bbf, 0xe3b9894ed3cebf2d, 0xaa5f7dbdde4271d2, 0x7186adaa4707e540, 0x3a770e5edafa630a, 0xe1aede4943bff798, 0xa8482aba4e333967, 0x7391faadd776adf5, 0x3b85c35c552aa499, 0xe05c134bcc6f300b, 0xa9bae7b8c1e3fef4, 0x726337af58a66a66, 0x31cfc845849ecef8, 0xea1618521ddb5a6a, 0xa3f0eca110579495, 0x78293cb689120007, 0x303d05470b4e096b, 0xebe4d550920b9df9, 0xa20221a39f875306, 0x79dbf1b406c2c794, 0x322a52409b3f41de, 0xe9f38257027ad54c, 0xa01576a40ff61bb3, 0x7bcca6b396b38f21, 0x33d89f4214ef864d, 0xe8014f558daa12df, 0xa1e7bba68026dc20, 0x7a3e6bb1196348b2, 0x3604fc4fbbddd0b4, 0xeddd2c5822984426, 0xa43bd8ab2f148ad9, 0x7fe208bcb6511e4b, 0x37f6314d340d1727, 0xec2fe15aad4883b5, 0xa5c915a9a0c44d4a, 0x7e10c5be3981d9d8, 0x35e1664aa47c5f92, 0xee38b65d3d39cb00, 0xa7de42ae30b505ff, 0x7c0792b9a9f0916d, 0x3413ab482bac9801, 0xefca7b5fb2e90c93, 0xa62c8facbf65c26c, 0x7df55fbb262056fe, 0x2175707907148b50, 0xfaaca06e9e511fc2, 0xb34a549d93ddd13d, 0x6893848a0a9845af, 0x2087bd7b88c44cc3, 0xfb5e6d6c1181d851, 0xb2b8999f1c0d16ae, 0x696149888548823c, 0x2290ea7c18b50476, 0xf9493a6b81f090e4, 0xb0afce988c7c5e1b, 0x6b761e8f1539ca89, 0x2362277e9765c3e5, 0xf8bbf7690e205777, 0xb15d039a03ac9988, 0x6a84d38d9ae90d1a, 0x26be44733857951c, 0xfd679464a112018e, 0xb4816097ac9ecf71, 0x6f58b08035db5be3, 0x274c8971b787528f, 0xfc9559662ec2c61d, 0xb573ad95234e08e2, 0x6eaa7d82ba0b9c70, 0x255bde7627f61a3a, 0xfe820e61beb38ea8, 0xb764fa92b33f4057, 0x6cbd2a852a7ad4c5, 0x24a91374a826dda9, 0xff70c3633163493b, 0xb69637903cef87c4, 0x6d4fe787a5aa1356, 0x2ee3186d7992b7c8, 0xf53ac87ae0d7235a, 0xbcdc3c89ed5beda5, 0x6705ec9e741e7937, 0x2f11d56ff642705b, 0xf4c805786f07e4c9, 0xbd2ef18b628b2a36, 0x66f7219cfbcebea4, 0x2d068268663338ee, 0xf6df527fff76ac7c, 0xbf39a68cf2fa6283, 0x64e0769b6bbff611, 0x2cf44f6ae9e3ff7d, 0xf72d9f7d70a66bef, 0xbecb6b8e7d2aa510, 0x6512bb99e46f3182, 0x29282c6746d1a984, 0xf2f1fc70df943d16, 0xbb170883d218f3e9, 0x60ced8944b5d677b, 0x28dae165c9016e17, 0xf30331725044fa85, 0xbae5c5815dc8347a, 0x613c1596c48da0e8, 0x2acdb662597026a2, 0xf1146675c035b230, 0xb8f29286cdb97ccf, 0x632b429154fce85d, 0x2b3f7b60d6a0e131, 0xf0e6ab774fe575a3, 0xb9005f844269bb5c, 0x62d98f93db2c2fce, ], [ 0x0000000000000000, 0x0290c0d980d5c172, 0x052181b301ab82e4, 0x07b1416a817e4396, 0x0a430366035705c8, 0x08d3c3bf8382c4ba, 0x0f6282d502fc872c, 0x0df2420c8229465e, 0x148606cc06ae0b90, 0x1616c615867bcae2, 0x11a7877f07058974, 0x133747a687d04806, 0x1ec505aa05f90e58, 0x1c55c573852ccf2a, 0x1be4841904528cbc, 0x197444c084874dce, 0x290c0d980d5c1720, 0x2b9ccd418d89d652, 0x2c2d8c2b0cf795c4, 0x2ebd4cf28c2254b6, 0x234f0efe0e0b12e8, 0x21dfce278eded39a, 0x266e8f4d0fa0900c, 0x24fe4f948f75517e, 0x3d8a0b540bf21cb0, 0x3f1acb8d8b27ddc2, 0x38ab8ae70a599e54, 0x3a3b4a3e8a8c5f26, 0x37c9083208a51978, 0x3559c8eb8870d80a, 0x32e88981090e9b9c, 0x3078495889db5aee, 0x52181b301ab82e40, 0x5088dbe99a6def32, 0x57399a831b13aca4, 0x55a95a5a9bc66dd6, 0x585b185619ef2b88, 0x5acbd88f993aeafa, 0x5d7a99e51844a96c, 0x5fea593c9891681e, 0x469e1dfc1c1625d0, 0x440edd259cc3e4a2, 0x43bf9c4f1dbda734, 0x412f5c969d686646, 0x4cdd1e9a1f412018, 0x4e4dde439f94e16a, 0x49fc9f291eeaa2fc, 0x4b6c5ff09e3f638e, 0x7b1416a817e43960, 0x7984d6719731f812, 0x7e35971b164fbb84, 0x7ca557c2969a7af6, 0x715715ce14b33ca8, 0x73c7d5179466fdda, 0x7476947d1518be4c, 0x76e654a495cd7f3e, 0x6f921064114a32f0, 0x6d02d0bd919ff382, 0x6ab391d710e1b014, 0x6823510e90347166, 0x65d11302121d3738, 0x6741d3db92c8f64a, 0x60f092b113b6b5dc, 0x62605268936374ae, 0xa430366035705c80, 0xa6a0f6b9b5a59df2, 0xa111b7d334dbde64, 0xa381770ab40e1f16, 0xae73350636275948, 0xace3f5dfb6f2983a, 0xab52b4b5378cdbac, 0xa9c2746cb7591ade, 0xb0b630ac33de5710, 0xb226f075b30b9662, 0xb597b11f3275d5f4, 0xb70771c6b2a01486, 0xbaf533ca308952d8, 0xb865f313b05c93aa, 0xbfd4b2793122d03c, 0xbd4472a0b1f7114e, 0x8d3c3bf8382c4ba0, 0x8facfb21b8f98ad2, 0x881dba4b3987c944, 0x8a8d7a92b9520836, 0x877f389e3b7b4e68, 0x85eff847bbae8f1a, 0x825eb92d3ad0cc8c, 0x80ce79f4ba050dfe, 0x99ba3d343e824030, 0x9b2afdedbe578142, 0x9c9bbc873f29c2d4, 0x9e0b7c5ebffc03a6, 0x93f93e523dd545f8, 0x9169fe8bbd00848a, 0x96d8bfe13c7ec71c, 0x94487f38bcab066e, 0xf6282d502fc872c0, 0xf4b8ed89af1db3b2, 0xf309ace32e63f024, 0xf1996c3aaeb63156, 0xfc6b2e362c9f7708, 0xfefbeeefac4ab67a, 0xf94aaf852d34f5ec, 0xfbda6f5cade1349e, 0xe2ae2b9c29667950, 0xe03eeb45a9b3b822, 0xe78faa2f28cdfbb4, 0xe51f6af6a8183ac6, 0xe8ed28fa2a317c98, 0xea7de823aae4bdea, 0xedcca9492b9afe7c, 0xef5c6990ab4f3f0e, 0xdf2420c8229465e0, 0xddb4e011a241a492, 0xda05a17b233fe704, 0xd89561a2a3ea2676, 0xd56723ae21c36028, 0xd7f7e377a116a15a, 0xd046a21d2068e2cc, 0xd2d662c4a0bd23be, 0xcba22604243a6e70, 0xc932e6dda4efaf02, 0xce83a7b72591ec94, 0xcc13676ea5442de6, 0xc1e12562276d6bb8, 0xc371e5bba7b8aaca, 0xc4c0a4d126c6e95c, 0xc6506408a613282e, 0x6dece80bcca2ca49, 0x6f7c28d24c770b3b, 0x68cd69b8cd0948ad, 0x6a5da9614ddc89df, 0x67afeb6dcff5cf81, 0x653f2bb44f200ef3, 0x628e6adece5e4d65, 0x601eaa074e8b8c17, 0x796aeec7ca0cc1d9, 0x7bfa2e1e4ad900ab, 0x7c4b6f74cba7433d, 0x7edbafad4b72824f, 0x7329eda1c95bc411, 0x71b92d78498e0563, 0x76086c12c8f046f5, 0x7498accb48258787, 0x44e0e593c1fedd69, 0x4670254a412b1c1b, 0x41c16420c0555f8d, 0x4351a4f940809eff, 0x4ea3e6f5c2a9d8a1, 0x4c33262c427c19d3, 0x4b826746c3025a45, 0x4912a79f43d79b37, 0x5066e35fc750d6f9, 0x52f623864785178b, 0x554762ecc6fb541d, 0x57d7a235462e956f, 0x5a25e039c407d331, 0x58b520e044d21243, 0x5f04618ac5ac51d5, 0x5d94a153457990a7, 0x3ff4f33bd61ae409, 0x3d6433e256cf257b, 0x3ad57288d7b166ed, 0x3845b2515764a79f, 0x35b7f05dd54de1c1, 0x37273084559820b3, 0x309671eed4e66325, 0x3206b1375433a257, 0x2b72f5f7d0b4ef99, 0x29e2352e50612eeb, 0x2e537444d11f6d7d, 0x2cc3b49d51caac0f, 0x2131f691d3e3ea51, 0x23a1364853362b23, 0x24107722d24868b5, 0x2680b7fb529da9c7, 0x16f8fea3db46f329, 0x14683e7a5b93325b, 0x13d97f10daed71cd, 0x1149bfc95a38b0bf, 0x1cbbfdc5d811f6e1, 0x1e2b3d1c58c43793, 0x199a7c76d9ba7405, 0x1b0abcaf596fb577, 0x027ef86fdde8f8b9, 0x00ee38b65d3d39cb, 0x075f79dcdc437a5d, 0x05cfb9055c96bb2f, 0x083dfb09debffd71, 0x0aad3bd05e6a3c03, 0x0d1c7abadf147f95, 0x0f8cba635fc1bee7, 0xc9dcde6bf9d296c9, 0xcb4c1eb2790757bb, 0xccfd5fd8f879142d, 0xce6d9f0178acd55f, 0xc39fdd0dfa859301, 0xc10f1dd47a505273, 0xc6be5cbefb2e11e5, 0xc42e9c677bfbd097, 0xdd5ad8a7ff7c9d59, 0xdfca187e7fa95c2b, 0xd87b5914fed71fbd, 0xdaeb99cd7e02decf, 0xd719dbc1fc2b9891, 0xd5891b187cfe59e3, 0xd2385a72fd801a75, 0xd0a89aab7d55db07, 0xe0d0d3f3f48e81e9, 0xe240132a745b409b, 0xe5f15240f525030d, 0xe761929975f0c27f, 0xea93d095f7d98421, 0xe803104c770c4553, 0xefb25126f67206c5, 0xed2291ff76a7c7b7, 0xf456d53ff2208a79, 0xf6c615e672f54b0b, 0xf177548cf38b089d, 0xf3e79455735ec9ef, 0xfe15d659f1778fb1, 0xfc85168071a24ec3, 0xfb3457eaf0dc0d55, 0xf9a497337009cc27, 0x9bc4c55be36ab889, 0x9954058263bf79fb, 0x9ee544e8e2c13a6d, 0x9c7584316214fb1f, 0x9187c63de03dbd41, 0x931706e460e87c33, 0x94a6478ee1963fa5, 0x963687576143fed7, 0x8f42c397e5c4b319, 0x8dd2034e6511726b, 0x8a634224e46f31fd, 0x88f382fd64baf08f, 0x8501c0f1e693b6d1, 0x87910028664677a3, 0x80204142e7383435, 0x82b0819b67edf547, 0xb2c8c8c3ee36afa9, 0xb058081a6ee36edb, 0xb7e94970ef9d2d4d, 0xb57989a96f48ec3f, 0xb88bcba5ed61aa61, 0xba1b0b7c6db46b13, 0xbdaa4a16ecca2885, 0xbf3a8acf6c1fe9f7, 0xa64ece0fe898a439, 0xa4de0ed6684d654b, 0xa36f4fbce93326dd, 0xa1ff8f6569e6e7af, 0xac0dcd69ebcfa1f1, 0xae9d0db06b1a6083, 0xa92c4cdaea642315, 0xabbc8c036ab1e267, ], [ 0x0000000000000000, 0xfd5d7a0700b5ba38, 0xdf3670c5a7290739, 0x226b0ac2a79cbd01, 0x9be06540e8107d3b, 0x66bd1f47e8a5c703, 0x44d615854f397a02, 0xb98b6f824f8cc03a, 0x124c4e4a7662893f, 0xef11344d76d73307, 0xcd7a3e8fd14b8e06, 0x30274488d1fe343e, 0x89ac2b0a9e72f404, 0x74f1510d9ec74e3c, 0x569a5bcf395bf33d, 0xabc721c839ee4905, 0x24989c94ecc5127e, 0xd9c5e693ec70a846, 0xfbaeec514bec1547, 0x06f396564b59af7f, 0xbf78f9d404d56f45, 0x422583d30460d57d, 0x604e8911a3fc687c, 0x9d13f316a349d244, 0x36d4d2de9aa79b41, 0xcb89a8d99a122179, 0xe9e2a21b3d8e9c78, 0x14bfd81c3d3b2640, 0xad34b79e72b7e67a, 0x5069cd9972025c42, 0x7202c75bd59ee143, 0x8f5fbd5cd52b5b7b, 0x49313929d98a24fc, 0xb46c432ed93f9ec4, 0x960749ec7ea323c5, 0x6b5a33eb7e1699fd, 0xd2d15c69319a59c7, 0x2f8c266e312fe3ff, 0x0de72cac96b35efe, 0xf0ba56ab9606e4c6, 0x5b7d7763afe8adc3, 0xa6200d64af5d17fb, 0x844b07a608c1aafa, 0x79167da1087410c2, 0xc09d122347f8d0f8, 0x3dc06824474d6ac0, 0x1fab62e6e0d1d7c1, 0xe2f618e1e0646df9, 0x6da9a5bd354f3682, 0x90f4dfba35fa8cba, 0xb29fd578926631bb, 0x4fc2af7f92d38b83, 0xf649c0fddd5f4bb9, 0x0b14bafaddeaf181, 0x297fb0387a764c80, 0xd422ca3f7ac3f6b8, 0x7fe5ebf7432dbfbd, 0x82b891f043980585, 0xa0d39b32e404b884, 0x5d8ee135e4b102bc, 0xe4058eb7ab3dc286, 0x1958f4b0ab8878be, 0x3b33fe720c14c5bf, 0xc66e84750ca17f87, 0x92627253b31449f8, 0x6f3f0854b3a1f3c0, 0x4d540296143d4ec1, 0xb00978911488f4f9, 0x098217135b0434c3, 0xf4df6d145bb18efb, 0xd6b467d6fc2d33fa, 0x2be91dd1fc9889c2, 0x802e3c19c576c0c7, 0x7d73461ec5c37aff, 0x5f184cdc625fc7fe, 0xa24536db62ea7dc6, 0x1bce59592d66bdfc, 0xe693235e2dd307c4, 0xc4f8299c8a4fbac5, 0x39a5539b8afa00fd, 0xb6faeec75fd15b86, 0x4ba794c05f64e1be, 0x69cc9e02f8f85cbf, 0x9491e405f84de687, 0x2d1a8b87b7c126bd, 0xd047f180b7749c85, 0xf22cfb4210e82184, 0x0f718145105d9bbc, 0xa4b6a08d29b3d2b9, 0x59ebda8a29066881, 0x7b80d0488e9ad580, 0x86ddaa4f8e2f6fb8, 0x3f56c5cdc1a3af82, 0xc20bbfcac11615ba, 0xe060b508668aa8bb, 0x1d3dcf0f663f1283, 0xdb534b7a6a9e6d04, 0x260e317d6a2bd73c, 0x04653bbfcdb76a3d, 0xf93841b8cd02d005, 0x40b32e3a828e103f, 0xbdee543d823baa07, 0x9f855eff25a71706, 0x62d824f82512ad3e, 0xc91f05301cfce43b, 0x34427f371c495e03, 0x162975f5bbd5e302, 0xeb740ff2bb60593a, 0x52ff6070f4ec9900, 0xafa21a77f4592338, 0x8dc910b553c59e39, 0x70946ab253702401, 0xffcbd7ee865b7f7a, 0x0296ade986eec542, 0x20fda72b21727843, 0xdda0dd2c21c7c27b, 0x642bb2ae6e4b0241, 0x9976c8a96efeb879, 0xbb1dc26bc9620578, 0x4640b86cc9d7bf40, 0xed8799a4f039f645, 0x10dae3a3f08c4c7d, 0x32b1e9615710f17c, 0xcfec936657a54b44, 0x7667fce418298b7e, 0x8b3a86e3189c3146, 0xa9518c21bf008c47, 0x540cf626bfb5367f, 0x0148606cc06ae0b9, 0xfc151a6bc0df5a81, 0xde7e10a96743e780, 0x23236aae67f65db8, 0x9aa8052c287a9d82, 0x67f57f2b28cf27ba, 0x459e75e98f539abb, 0xb8c30fee8fe62083, 0x13042e26b6086986, 0xee595421b6bdd3be, 0xcc325ee311216ebf, 0x316f24e41194d487, 0x88e44b665e1814bd, 0x75b931615eadae85, 0x57d23ba3f9311384, 0xaa8f41a4f984a9bc, 0x25d0fcf82caff2c7, 0xd88d86ff2c1a48ff, 0xfae68c3d8b86f5fe, 0x07bbf63a8b334fc6, 0xbe3099b8c4bf8ffc, 0x436de3bfc40a35c4, 0x6106e97d639688c5, 0x9c5b937a632332fd, 0x379cb2b25acd7bf8, 0xcac1c8b55a78c1c0, 0xe8aac277fde47cc1, 0x15f7b870fd51c6f9, 0xac7cd7f2b2dd06c3, 0x5121adf5b268bcfb, 0x734aa73715f401fa, 0x8e17dd301541bbc2, 0x4879594519e0c445, 0xb524234219557e7d, 0x974f2980bec9c37c, 0x6a125387be7c7944, 0xd3993c05f1f0b97e, 0x2ec44602f1450346, 0x0caf4cc056d9be47, 0xf1f236c7566c047f, 0x5a35170f6f824d7a, 0xa7686d086f37f742, 0x850367cac8ab4a43, 0x785e1dcdc81ef07b, 0xc1d5724f87923041, 0x3c88084887278a79, 0x1ee3028a20bb3778, 0xe3be788d200e8d40, 0x6ce1c5d1f525d63b, 0x91bcbfd6f5906c03, 0xb3d7b514520cd102, 0x4e8acf1352b96b3a, 0xf701a0911d35ab00, 0x0a5cda961d801138, 0x2837d054ba1cac39, 0xd56aaa53baa91601, 0x7ead8b9b83475f04, 0x83f0f19c83f2e53c, 0xa19bfb5e246e583d, 0x5cc6815924dbe205, 0xe54deedb6b57223f, 0x181094dc6be29807, 0x3a7b9e1ecc7e2506, 0xc726e419cccb9f3e, 0x932a123f737ea941, 0x6e77683873cb1379, 0x4c1c62fad457ae78, 0xb14118fdd4e21440, 0x08ca777f9b6ed47a, 0xf5970d789bdb6e42, 0xd7fc07ba3c47d343, 0x2aa17dbd3cf2697b, 0x81665c75051c207e, 0x7c3b267205a99a46, 0x5e502cb0a2352747, 0xa30d56b7a2809d7f, 0x1a863935ed0c5d45, 0xe7db4332edb9e77d, 0xc5b049f04a255a7c, 0x38ed33f74a90e044, 0xb7b28eab9fbbbb3f, 0x4aeff4ac9f0e0107, 0x6884fe6e3892bc06, 0x95d984693827063e, 0x2c52ebeb77abc604, 0xd10f91ec771e7c3c, 0xf3649b2ed082c13d, 0x0e39e129d0377b05, 0xa5fec0e1e9d93200, 0x58a3bae6e96c8838, 0x7ac8b0244ef03539, 0x8795ca234e458f01, 0x3e1ea5a101c94f3b, 0xc343dfa6017cf503, 0xe128d564a6e04802, 0x1c75af63a655f23a, 0xda1b2b16aaf48dbd, 0x27465111aa413785, 0x052d5bd30ddd8a84, 0xf87021d40d6830bc, 0x41fb4e5642e4f086, 0xbca6345142514abe, 0x9ecd3e93e5cdf7bf, 0x63904494e5784d87, 0xc857655cdc960482, 0x350a1f5bdc23beba, 0x176115997bbf03bb, 0xea3c6f9e7b0ab983, 0x53b7001c348679b9, 0xaeea7a1b3433c381, 0x8c8170d993af7e80, 0x71dc0ade931ac4b8, 0xfe83b78246319fc3, 0x03decd85468425fb, 0x21b5c747e11898fa, 0xdce8bd40e1ad22c2, 0x6563d2c2ae21e2f8, 0x983ea8c5ae9458c0, 0xba55a2070908e5c1, 0x4708d80009bd5ff9, 0xeccff9c8305316fc, 0x119283cf30e6acc4, 0x33f9890d977a11c5, 0xcea4f30a97cfabfd, 0x772f9c88d8436bc7, 0x8a72e68fd8f6d1ff, 0xa819ec4d7f6a6cfe, 0x5544964a7fdfd6c6, ], ]; pub static CRC64_NVME_TABLE: [[u64; 256]; 16] = [ [ 0x0000000000000000, 0x7f6ef0c830358979, 0xfedde190606b12f2, 0x81b31158505e9b8b, 0xc962e5739841b68f, 0xb60c15bba8743ff6, 0x37bf04e3f82aa47d, 0x48d1f42bc81f2d04, 0xa61cecb46814fe75, 0xd9721c7c5821770c, 0x58c10d24087fec87, 0x27affdec384a65fe, 0x6f7e09c7f05548fa, 0x1010f90fc060c183, 0x91a3e857903e5a08, 0xeecd189fa00bd371, 0x78e0ff3b88be6f81, 0x078e0ff3b88be6f8, 0x863d1eabe8d57d73, 0xf953ee63d8e0f40a, 0xb1821a4810ffd90e, 0xceecea8020ca5077, 0x4f5ffbd87094cbfc, 0x30310b1040a14285, 0xdefc138fe0aa91f4, 0xa192e347d09f188d, 0x2021f21f80c18306, 0x5f4f02d7b0f40a7f, 0x179ef6fc78eb277b, 0x68f0063448deae02, 0xe943176c18803589, 0x962de7a428b5bcf0, 0xf1c1fe77117cdf02, 0x8eaf0ebf2149567b, 0x0f1c1fe77117cdf0, 0x7072ef2f41224489, 0x38a31b04893d698d, 0x47cdebccb908e0f4, 0xc67efa94e9567b7f, 0xb9100a5cd963f206, 0x57dd12c379682177, 0x28b3e20b495da80e, 0xa900f35319033385, 0xd66e039b2936bafc, 0x9ebff7b0e12997f8, 0xe1d10778d11c1e81, 0x606216208142850a, 0x1f0ce6e8b1770c73, 0x8921014c99c2b083, 0xf64ff184a9f739fa, 0x77fce0dcf9a9a271, 0x08921014c99c2b08, 0x4043e43f0183060c, 0x3f2d14f731b68f75, 0xbe9e05af61e814fe, 0xc1f0f56751dd9d87, 0x2f3dedf8f1d64ef6, 0x50531d30c1e3c78f, 0xd1e00c6891bd5c04, 0xae8efca0a188d57d, 0xe65f088b6997f879, 0x9931f84359a27100, 0x1882e91b09fcea8b, 0x67ec19d339c963f2, 0xd75adabd7a6e2d6f, 0xa8342a754a5ba416, 0x29873b2d1a053f9d, 0x56e9cbe52a30b6e4, 0x1e383fcee22f9be0, 0x6156cf06d21a1299, 0xe0e5de5e82448912, 0x9f8b2e96b271006b, 0x71463609127ad31a, 0x0e28c6c1224f5a63, 0x8f9bd7997211c1e8, 0xf0f5275142244891, 0xb824d37a8a3b6595, 0xc74a23b2ba0eecec, 0x46f932eaea507767, 0x3997c222da65fe1e, 0xafba2586f2d042ee, 0xd0d4d54ec2e5cb97, 0x5167c41692bb501c, 0x2e0934dea28ed965, 0x66d8c0f56a91f461, 0x19b6303d5aa47d18, 0x980521650afae693, 0xe76bd1ad3acf6fea, 0x09a6c9329ac4bc9b, 0x76c839faaaf135e2, 0xf77b28a2faafae69, 0x8815d86aca9a2710, 0xc0c42c4102850a14, 0xbfaadc8932b0836d, 0x3e19cdd162ee18e6, 0x41773d1952db919f, 0x269b24ca6b12f26d, 0x59f5d4025b277b14, 0xd846c55a0b79e09f, 0xa72835923b4c69e6, 0xeff9c1b9f35344e2, 0x90973171c366cd9b, 0x1124202993385610, 0x6e4ad0e1a30ddf69, 0x8087c87e03060c18, 0xffe938b633338561, 0x7e5a29ee636d1eea, 0x0134d92653589793, 0x49e52d0d9b47ba97, 0x368bddc5ab7233ee, 0xb738cc9dfb2ca865, 0xc8563c55cb19211c, 0x5e7bdbf1e3ac9dec, 0x21152b39d3991495, 0xa0a63a6183c78f1e, 0xdfc8caa9b3f20667, 0x97193e827bed2b63, 0xe877ce4a4bd8a21a, 0x69c4df121b863991, 0x16aa2fda2bb3b0e8, 0xf86737458bb86399, 0x8709c78dbb8deae0, 0x06bad6d5ebd3716b, 0x79d4261ddbe6f812, 0x3105d23613f9d516, 0x4e6b22fe23cc5c6f, 0xcfd833a67392c7e4, 0xb0b6c36e43a74e9d, 0x9a6c9329ac4bc9b5, 0xe50263e19c7e40cc, 0x64b172b9cc20db47, 0x1bdf8271fc15523e, 0x530e765a340a7f3a, 0x2c608692043ff643, 0xadd397ca54616dc8, 0xd2bd67026454e4b1, 0x3c707f9dc45f37c0, 0x431e8f55f46abeb9, 0xc2ad9e0da4342532, 0xbdc36ec59401ac4b, 0xf5129aee5c1e814f, 0x8a7c6a266c2b0836, 0x0bcf7b7e3c7593bd, 0x74a18bb60c401ac4, 0xe28c6c1224f5a634, 0x9de29cda14c02f4d, 0x1c518d82449eb4c6, 0x633f7d4a74ab3dbf, 0x2bee8961bcb410bb, 0x548079a98c8199c2, 0xd53368f1dcdf0249, 0xaa5d9839ecea8b30, 0x449080a64ce15841, 0x3bfe706e7cd4d138, 0xba4d61362c8a4ab3, 0xc52391fe1cbfc3ca, 0x8df265d5d4a0eece, 0xf29c951de49567b7, 0x732f8445b4cbfc3c, 0x0c41748d84fe7545, 0x6bad6d5ebd3716b7, 0x14c39d968d029fce, 0x95708ccedd5c0445, 0xea1e7c06ed698d3c, 0xa2cf882d2576a038, 0xdda178e515432941, 0x5c1269bd451db2ca, 0x237c997575283bb3, 0xcdb181ead523e8c2, 0xb2df7122e51661bb, 0x336c607ab548fa30, 0x4c0290b2857d7349, 0x04d364994d625e4d, 0x7bbd94517d57d734, 0xfa0e85092d094cbf, 0x856075c11d3cc5c6, 0x134d926535897936, 0x6c2362ad05bcf04f, 0xed9073f555e26bc4, 0x92fe833d65d7e2bd, 0xda2f7716adc8cfb9, 0xa54187de9dfd46c0, 0x24f29686cda3dd4b, 0x5b9c664efd965432, 0xb5517ed15d9d8743, 0xca3f8e196da80e3a, 0x4b8c9f413df695b1, 0x34e26f890dc31cc8, 0x7c339ba2c5dc31cc, 0x035d6b6af5e9b8b5, 0x82ee7a32a5b7233e, 0xfd808afa9582aa47, 0x4d364994d625e4da, 0x3258b95ce6106da3, 0xb3eba804b64ef628, 0xcc8558cc867b7f51, 0x8454ace74e645255, 0xfb3a5c2f7e51db2c, 0x7a894d772e0f40a7, 0x05e7bdbf1e3ac9de, 0xeb2aa520be311aaf, 0x944455e88e0493d6, 0x15f744b0de5a085d, 0x6a99b478ee6f8124, 0x224840532670ac20, 0x5d26b09b16452559, 0xdc95a1c3461bbed2, 0xa3fb510b762e37ab, 0x35d6b6af5e9b8b5b, 0x4ab846676eae0222, 0xcb0b573f3ef099a9, 0xb465a7f70ec510d0, 0xfcb453dcc6da3dd4, 0x83daa314f6efb4ad, 0x0269b24ca6b12f26, 0x7d0742849684a65f, 0x93ca5a1b368f752e, 0xeca4aad306bafc57, 0x6d17bb8b56e467dc, 0x12794b4366d1eea5, 0x5aa8bf68aecec3a1, 0x25c64fa09efb4ad8, 0xa4755ef8cea5d153, 0xdb1bae30fe90582a, 0xbcf7b7e3c7593bd8, 0xc399472bf76cb2a1, 0x422a5673a732292a, 0x3d44a6bb9707a053, 0x759552905f188d57, 0x0afba2586f2d042e, 0x8b48b3003f739fa5, 0xf42643c80f4616dc, 0x1aeb5b57af4dc5ad, 0x6585ab9f9f784cd4, 0xe436bac7cf26d75f, 0x9b584a0fff135e26, 0xd389be24370c7322, 0xace74eec0739fa5b, 0x2d545fb4576761d0, 0x523aaf7c6752e8a9, 0xc41748d84fe75459, 0xbb79b8107fd2dd20, 0x3acaa9482f8c46ab, 0x45a459801fb9cfd2, 0x0d75adabd7a6e2d6, 0x721b5d63e7936baf, 0xf3a84c3bb7cdf024, 0x8cc6bcf387f8795d, 0x620ba46c27f3aa2c, 0x1d6554a417c62355, 0x9cd645fc4798b8de, 0xe3b8b53477ad31a7, 0xab69411fbfb21ca3, 0xd407b1d78f8795da, 0x55b4a08fdfd90e51, 0x2ada5047efec8728, ], [ 0x0000000000000000, 0x8776a97d73bddf69, 0x3a3474a9bfec2db9, 0xbd42ddd4cc51f2d0, 0x7468e9537fd85b72, 0xf31e402e0c65841b, 0x4e5c9dfac03476cb, 0xc92a3487b389a9a2, 0xe8d1d2a6ffb0b6e4, 0x6fa77bdb8c0d698d, 0xd2e5a60f405c9b5d, 0x55930f7233e14434, 0x9cb93bf58068ed96, 0x1bcf9288f3d532ff, 0xa68d4f5c3f84c02f, 0x21fbe6214c391f46, 0xe57a831ea7f6fea3, 0x620c2a63d44b21ca, 0xdf4ef7b7181ad31a, 0x58385eca6ba70c73, 0x91126a4dd82ea5d1, 0x1664c330ab937ab8, 0xab261ee467c28868, 0x2c50b799147f5701, 0x0dab51b858464847, 0x8addf8c52bfb972e, 0x379f2511e7aa65fe, 0xb0e98c6c9417ba97, 0x79c3b8eb279e1335, 0xfeb511965423cc5c, 0x43f7cc4298723e8c, 0xc481653febcfe1e5, 0xfe2c206e177a6e2d, 0x795a891364c7b144, 0xc41854c7a8964394, 0x436efdbadb2b9cfd, 0x8a44c93d68a2355f, 0x0d3260401b1fea36, 0xb070bd94d74e18e6, 0x370614e9a4f3c78f, 0x16fdf2c8e8cad8c9, 0x918b5bb59b7707a0, 0x2cc986615726f570, 0xabbf2f1c249b2a19, 0x62951b9b971283bb, 0xe5e3b2e6e4af5cd2, 0x58a16f3228feae02, 0xdfd7c64f5b43716b, 0x1b56a370b08c908e, 0x9c200a0dc3314fe7, 0x2162d7d90f60bd37, 0xa6147ea47cdd625e, 0x6f3e4a23cf54cbfc, 0xe848e35ebce91495, 0x550a3e8a70b8e645, 0xd27c97f70305392c, 0xf38771d64f3c266a, 0x74f1d8ab3c81f903, 0xc9b3057ff0d00bd3, 0x4ec5ac02836dd4ba, 0x87ef988530e47d18, 0x009931f84359a271, 0xbddbec2c8f0850a1, 0x3aad4551fcb58fc8, 0xc881668f76634f31, 0x4ff7cff205de9058, 0xf2b51226c98f6288, 0x75c3bb5bba32bde1, 0xbce98fdc09bb1443, 0x3b9f26a17a06cb2a, 0x86ddfb75b65739fa, 0x01ab5208c5eae693, 0x2050b42989d3f9d5, 0xa7261d54fa6e26bc, 0x1a64c080363fd46c, 0x9d1269fd45820b05, 0x54385d7af60ba2a7, 0xd34ef40785b67dce, 0x6e0c29d349e78f1e, 0xe97a80ae3a5a5077, 0x2dfbe591d195b192, 0xaa8d4ceca2286efb, 0x17cf91386e799c2b, 0x90b938451dc44342, 0x59930cc2ae4deae0, 0xdee5a5bfddf03589, 0x63a7786b11a1c759, 0xe4d1d116621c1830, 0xc52a37372e250776, 0x425c9e4a5d98d81f, 0xff1e439e91c92acf, 0x7868eae3e274f5a6, 0xb142de6451fd5c04, 0x363477192240836d, 0x8b76aacdee1171bd, 0x0c0003b09dacaed4, 0x36ad46e16119211c, 0xb1dbef9c12a4fe75, 0x0c993248def50ca5, 0x8bef9b35ad48d3cc, 0x42c5afb21ec17a6e, 0xc5b306cf6d7ca507, 0x78f1db1ba12d57d7, 0xff877266d29088be, 0xde7c94479ea997f8, 0x590a3d3aed144891, 0xe448e0ee2145ba41, 0x633e499352f86528, 0xaa147d14e171cc8a, 0x2d62d46992cc13e3, 0x902009bd5e9de133, 0x1756a0c02d203e5a, 0xd3d7c5ffc6efdfbf, 0x54a16c82b55200d6, 0xe9e3b1567903f206, 0x6e95182b0abe2d6f, 0xa7bf2cacb93784cd, 0x20c985d1ca8a5ba4, 0x9d8b580506dba974, 0x1afdf1787566761d, 0x3b061759395f695b, 0xbc70be244ae2b632, 0x013263f086b344e2, 0x8644ca8df50e9b8b, 0x4f6efe0a46873229, 0xc8185777353aed40, 0x755a8aa3f96b1f90, 0xf22c23de8ad6c0f9, 0xa5dbeb4db4510d09, 0x22ad4230c7ecd260, 0x9fef9fe40bbd20b0, 0x189936997800ffd9, 0xd1b3021ecb89567b, 0x56c5ab63b8348912, 0xeb8776b774657bc2, 0x6cf1dfca07d8a4ab, 0x4d0a39eb4be1bbed, 0xca7c9096385c6484, 0x773e4d42f40d9654, 0xf048e43f87b0493d, 0x3962d0b83439e09f, 0xbe1479c547843ff6, 0x0356a4118bd5cd26, 0x84200d6cf868124f, 0x40a1685313a7f3aa, 0xc7d7c12e601a2cc3, 0x7a951cfaac4bde13, 0xfde3b587dff6017a, 0x34c981006c7fa8d8, 0xb3bf287d1fc277b1, 0x0efdf5a9d3938561, 0x898b5cd4a02e5a08, 0xa870baf5ec17454e, 0x2f0613889faa9a27, 0x9244ce5c53fb68f7, 0x153267212046b79e, 0xdc1853a693cf1e3c, 0x5b6efadbe072c155, 0xe62c270f2c233385, 0x615a8e725f9eecec, 0x5bf7cb23a32b6324, 0xdc81625ed096bc4d, 0x61c3bf8a1cc74e9d, 0xe6b516f76f7a91f4, 0x2f9f2270dcf33856, 0xa8e98b0daf4ee73f, 0x15ab56d9631f15ef, 0x92ddffa410a2ca86, 0xb32619855c9bd5c0, 0x3450b0f82f260aa9, 0x89126d2ce377f879, 0x0e64c45190ca2710, 0xc74ef0d623438eb2, 0x403859ab50fe51db, 0xfd7a847f9cafa30b, 0x7a0c2d02ef127c62, 0xbe8d483d04dd9d87, 0x39fbe140776042ee, 0x84b93c94bb31b03e, 0x03cf95e9c88c6f57, 0xcae5a16e7b05c6f5, 0x4d93081308b8199c, 0xf0d1d5c7c4e9eb4c, 0x77a77cbab7543425, 0x565c9a9bfb6d2b63, 0xd12a33e688d0f40a, 0x6c68ee32448106da, 0xeb1e474f373cd9b3, 0x223473c884b57011, 0xa542dab5f708af78, 0x180007613b595da8, 0x9f76ae1c48e482c1, 0x6d5a8dc2c2324238, 0xea2c24bfb18f9d51, 0x576ef96b7dde6f81, 0xd01850160e63b0e8, 0x19326491bdea194a, 0x9e44cdecce57c623, 0x23061038020634f3, 0xa470b94571bbeb9a, 0x858b5f643d82f4dc, 0x02fdf6194e3f2bb5, 0xbfbf2bcd826ed965, 0x38c982b0f1d3060c, 0xf1e3b637425aafae, 0x76951f4a31e770c7, 0xcbd7c29efdb68217, 0x4ca16be38e0b5d7e, 0x88200edc65c4bc9b, 0x0f56a7a1167963f2, 0xb2147a75da289122, 0x3562d308a9954e4b, 0xfc48e78f1a1ce7e9, 0x7b3e4ef269a13880, 0xc67c9326a5f0ca50, 0x410a3a5bd64d1539, 0x60f1dc7a9a740a7f, 0xe7877507e9c9d516, 0x5ac5a8d3259827c6, 0xddb301ae5625f8af, 0x14993529e5ac510d, 0x93ef9c5496118e64, 0x2ead41805a407cb4, 0xa9dbe8fd29fda3dd, 0x9376adacd5482c15, 0x140004d1a6f5f37c, 0xa942d9056aa401ac, 0x2e3470781919dec5, 0xe71e44ffaa907767, 0x6068ed82d92da80e, 0xdd2a3056157c5ade, 0x5a5c992b66c185b7, 0x7ba77f0a2af89af1, 0xfcd1d67759454598, 0x41930ba39514b748, 0xc6e5a2dee6a96821, 0x0fcf96595520c183, 0x88b93f24269d1eea, 0x35fbe2f0eaccec3a, 0xb28d4b8d99713353, 0x760c2eb272bed2b6, 0xf17a87cf01030ddf, 0x4c385a1bcd52ff0f, 0xcb4ef366beef2066, 0x0264c7e10d6689c4, 0x85126e9c7edb56ad, 0x3850b348b28aa47d, 0xbf261a35c1377b14, 0x9eddfc148d0e6452, 0x19ab5569feb3bb3b, 0xa4e988bd32e249eb, 0x239f21c0415f9682, 0xeab51547f2d63f20, 0x6dc3bc3a816be049, 0xd08161ee4d3a1299, 0x57f7c8933e87cdf0, ], [ 0x0000000000000000, 0xff6e4e1f4e4038be, 0xca05ba6dc417e217, 0x356bf4728a57daa9, 0xa0d25288d0b85745, 0x5fbc1c979ef86ffb, 0x6ad7e8e514afb552, 0x95b9a6fa5aef8dec, 0x757d8342f9e73de1, 0x8a13cd5db7a7055f, 0xbf78392f3df0dff6, 0x4016773073b0e748, 0xd5afd1ca295f6aa4, 0x2ac19fd5671f521a, 0x1faa6ba7ed4888b3, 0xe0c425b8a308b00d, 0xeafb0685f3ce7bc2, 0x1595489abd8e437c, 0x20febce837d999d5, 0xdf90f2f77999a16b, 0x4a29540d23762c87, 0xb5471a126d361439, 0x802cee60e761ce90, 0x7f42a07fa921f62e, 0x9f8685c70a294623, 0x60e8cbd844697e9d, 0x55833faace3ea434, 0xaaed71b5807e9c8a, 0x3f54d74fda911166, 0xc03a995094d129d8, 0xf5516d221e86f371, 0x0a3f233d50c6cbcf, 0xe12f2b58bf0b64ef, 0x1e416547f14b5c51, 0x2b2a91357b1c86f8, 0xd444df2a355cbe46, 0x41fd79d06fb333aa, 0xbe9337cf21f30b14, 0x8bf8c3bdaba4d1bd, 0x74968da2e5e4e903, 0x9452a81a46ec590e, 0x6b3ce60508ac61b0, 0x5e57127782fbbb19, 0xa1395c68ccbb83a7, 0x3480fa9296540e4b, 0xcbeeb48dd81436f5, 0xfe8540ff5243ec5c, 0x01eb0ee01c03d4e2, 0x0bd42ddd4cc51f2d, 0xf4ba63c202852793, 0xc1d197b088d2fd3a, 0x3ebfd9afc692c584, 0xab067f559c7d4868, 0x5468314ad23d70d6, 0x6103c538586aaa7f, 0x9e6d8b27162a92c1, 0x7ea9ae9fb52222cc, 0x81c7e080fb621a72, 0xb4ac14f27135c0db, 0x4bc25aed3f75f865, 0xde7bfc17659a7589, 0x2115b2082bda4d37, 0x147e467aa18d979e, 0xeb100865efcdaf20, 0xf68770e226815ab5, 0x09e93efd68c1620b, 0x3c82ca8fe296b8a2, 0xc3ec8490acd6801c, 0x5655226af6390df0, 0xa93b6c75b879354e, 0x9c509807322eefe7, 0x633ed6187c6ed759, 0x83faf3a0df666754, 0x7c94bdbf91265fea, 0x49ff49cd1b718543, 0xb69107d25531bdfd, 0x2328a1280fde3011, 0xdc46ef37419e08af, 0xe92d1b45cbc9d206, 0x1643555a8589eab8, 0x1c7c7667d54f2177, 0xe31238789b0f19c9, 0xd679cc0a1158c360, 0x291782155f18fbde, 0xbcae24ef05f77632, 0x43c06af04bb74e8c, 0x76ab9e82c1e09425, 0x89c5d09d8fa0ac9b, 0x6901f5252ca81c96, 0x966fbb3a62e82428, 0xa3044f48e8bffe81, 0x5c6a0157a6ffc63f, 0xc9d3a7adfc104bd3, 0x36bde9b2b250736d, 0x03d61dc03807a9c4, 0xfcb853df7647917a, 0x17a85bba998a3e5a, 0xe8c615a5d7ca06e4, 0xddade1d75d9ddc4d, 0x22c3afc813dde4f3, 0xb77a09324932691f, 0x4814472d077251a1, 0x7d7fb35f8d258b08, 0x8211fd40c365b3b6, 0x62d5d8f8606d03bb, 0x9dbb96e72e2d3b05, 0xa8d06295a47ae1ac, 0x57be2c8aea3ad912, 0xc2078a70b0d554fe, 0x3d69c46ffe956c40, 0x0802301d74c2b6e9, 0xf76c7e023a828e57, 0xfd535d3f6a444598, 0x023d132024047d26, 0x3756e752ae53a78f, 0xc838a94de0139f31, 0x5d810fb7bafc12dd, 0xa2ef41a8f4bc2a63, 0x9784b5da7eebf0ca, 0x68eafbc530abc874, 0x882ede7d93a37879, 0x77409062dde340c7, 0x422b641057b49a6e, 0xbd452a0f19f4a2d0, 0x28fc8cf5431b2f3c, 0xd792c2ea0d5b1782, 0xe2f93698870ccd2b, 0x1d977887c94cf595, 0xd9d7c79715952601, 0x26b989885bd51ebf, 0x13d27dfad182c416, 0xecbc33e59fc2fca8, 0x7905951fc52d7144, 0x866bdb008b6d49fa, 0xb3002f72013a9353, 0x4c6e616d4f7aabed, 0xacaa44d5ec721be0, 0x53c40acaa232235e, 0x66affeb82865f9f7, 0x99c1b0a76625c149, 0x0c78165d3cca4ca5, 0xf3165842728a741b, 0xc67dac30f8ddaeb2, 0x3913e22fb69d960c, 0x332cc112e65b5dc3, 0xcc428f0da81b657d, 0xf9297b7f224cbfd4, 0x064735606c0c876a, 0x93fe939a36e30a86, 0x6c90dd8578a33238, 0x59fb29f7f2f4e891, 0xa69567e8bcb4d02f, 0x465142501fbc6022, 0xb93f0c4f51fc589c, 0x8c54f83ddbab8235, 0x733ab62295ebba8b, 0xe68310d8cf043767, 0x19ed5ec781440fd9, 0x2c86aab50b13d570, 0xd3e8e4aa4553edce, 0x38f8eccfaa9e42ee, 0xc796a2d0e4de7a50, 0xf2fd56a26e89a0f9, 0x0d9318bd20c99847, 0x982abe477a2615ab, 0x6744f05834662d15, 0x522f042abe31f7bc, 0xad414a35f071cf02, 0x4d856f8d53797f0f, 0xb2eb21921d3947b1, 0x8780d5e0976e9d18, 0x78ee9bffd92ea5a6, 0xed573d0583c1284a, 0x1239731acd8110f4, 0x2752876847d6ca5d, 0xd83cc9770996f2e3, 0xd203ea4a5950392c, 0x2d6da45517100192, 0x180650279d47db3b, 0xe7681e38d307e385, 0x72d1b8c289e86e69, 0x8dbff6ddc7a856d7, 0xb8d402af4dff8c7e, 0x47ba4cb003bfb4c0, 0xa77e6908a0b704cd, 0x58102717eef73c73, 0x6d7bd36564a0e6da, 0x92159d7a2ae0de64, 0x07ac3b80700f5388, 0xf8c2759f3e4f6b36, 0xcda981edb418b19f, 0x32c7cff2fa588921, 0x2f50b77533147cb4, 0xd03ef96a7d54440a, 0xe5550d18f7039ea3, 0x1a3b4307b943a61d, 0x8f82e5fde3ac2bf1, 0x70ecabe2adec134f, 0x45875f9027bbc9e6, 0xbae9118f69fbf158, 0x5a2d3437caf34155, 0xa5437a2884b379eb, 0x90288e5a0ee4a342, 0x6f46c04540a49bfc, 0xfaff66bf1a4b1610, 0x059128a0540b2eae, 0x30fadcd2de5cf407, 0xcf9492cd901cccb9, 0xc5abb1f0c0da0776, 0x3ac5ffef8e9a3fc8, 0x0fae0b9d04cde561, 0xf0c045824a8ddddf, 0x6579e37810625033, 0x9a17ad675e22688d, 0xaf7c5915d475b224, 0x5012170a9a358a9a, 0xb0d632b2393d3a97, 0x4fb87cad777d0229, 0x7ad388dffd2ad880, 0x85bdc6c0b36ae03e, 0x1004603ae9856dd2, 0xef6a2e25a7c5556c, 0xda01da572d928fc5, 0x256f944863d2b77b, 0xce7f9c2d8c1f185b, 0x3111d232c25f20e5, 0x047a26404808fa4c, 0xfb14685f0648c2f2, 0x6eadcea55ca74f1e, 0x91c380ba12e777a0, 0xa4a874c898b0ad09, 0x5bc63ad7d6f095b7, 0xbb021f6f75f825ba, 0x446c51703bb81d04, 0x7107a502b1efc7ad, 0x8e69eb1dffafff13, 0x1bd04de7a54072ff, 0xe4be03f8eb004a41, 0xd1d5f78a615790e8, 0x2ebbb9952f17a856, 0x24849aa87fd16399, 0xdbead4b731915b27, 0xee8120c5bbc6818e, 0x11ef6edaf586b930, 0x8456c820af6934dc, 0x7b38863fe1290c62, 0x4e53724d6b7ed6cb, 0xb13d3c52253eee75, 0x51f919ea86365e78, 0xae9757f5c87666c6, 0x9bfca3874221bc6f, 0x6492ed980c6184d1, 0xf12b4b62568e093d, 0x0e45057d18ce3183, 0x3b2ef10f9299eb2a, 0xc440bf10dcd9d394, ], [ 0x0000000000000000, 0x8211147cbaf96306, 0x30fb0eaa2d655567, 0xb2ea1ad6979c3661, 0x61f61d545acaaace, 0xe3e70928e033c9c8, 0x510d13fe77afffa9, 0xd31c0782cd569caf, 0xc3ec3aa8b595559c, 0x41fd2ed40f6c369a, 0xf317340298f000fb, 0x7106207e220963fd, 0xa21a27fcef5fff52, 0x200b338055a69c54, 0x92e12956c23aaa35, 0x10f03d2a78c3c933, 0xb301530233bd3853, 0x3110477e89445b55, 0x83fa5da81ed86d34, 0x01eb49d4a4210e32, 0xd2f74e566977929d, 0x50e65a2ad38ef19b, 0xe20c40fc4412c7fa, 0x601d5480feeba4fc, 0x70ed69aa86286dcf, 0xf2fc7dd63cd10ec9, 0x40166700ab4d38a8, 0xc207737c11b45bae, 0x111b74fedce2c701, 0x930a6082661ba407, 0x21e07a54f1879266, 0xa3f16e284b7ef160, 0x52db80573fede3cd, 0xd0ca942b851480cb, 0x62208efd1288b6aa, 0xe0319a81a871d5ac, 0x332d9d0365274903, 0xb13c897fdfde2a05, 0x03d693a948421c64, 0x81c787d5f2bb7f62, 0x9137baff8a78b651, 0x1326ae833081d557, 0xa1ccb455a71de336, 0x23dda0291de48030, 0xf0c1a7abd0b21c9f, 0x72d0b3d76a4b7f99, 0xc03aa901fdd749f8, 0x422bbd7d472e2afe, 0xe1dad3550c50db9e, 0x63cbc729b6a9b898, 0xd121ddff21358ef9, 0x5330c9839bccedff, 0x802cce01569a7150, 0x023dda7dec631256, 0xb0d7c0ab7bff2437, 0x32c6d4d7c1064731, 0x2236e9fdb9c58e02, 0xa027fd81033ced04, 0x12cde75794a0db65, 0x90dcf32b2e59b863, 0x43c0f4a9e30f24cc, 0xc1d1e0d559f647ca, 0x733bfa03ce6a71ab, 0xf12aee7f749312ad, 0xa5b700ae7fdbc79a, 0x27a614d2c522a49c, 0x954c0e0452be92fd, 0x175d1a78e847f1fb, 0xc4411dfa25116d54, 0x465009869fe80e52, 0xf4ba135008743833, 0x76ab072cb28d5b35, 0x665b3a06ca4e9206, 0xe44a2e7a70b7f100, 0x56a034ace72bc761, 0xd4b120d05dd2a467, 0x07ad2752908438c8, 0x85bc332e2a7d5bce, 0x375629f8bde16daf, 0xb5473d8407180ea9, 0x16b653ac4c66ffc9, 0x94a747d0f69f9ccf, 0x264d5d066103aaae, 0xa45c497adbfac9a8, 0x77404ef816ac5507, 0xf5515a84ac553601, 0x47bb40523bc90060, 0xc5aa542e81306366, 0xd55a6904f9f3aa55, 0x574b7d78430ac953, 0xe5a167aed496ff32, 0x67b073d26e6f9c34, 0xb4ac7450a339009b, 0x36bd602c19c0639d, 0x84577afa8e5c55fc, 0x06466e8634a536fa, 0xf76c80f940362457, 0x757d9485facf4751, 0xc7978e536d537130, 0x45869a2fd7aa1236, 0x969a9dad1afc8e99, 0x148b89d1a005ed9f, 0xa66193073799dbfe, 0x2470877b8d60b8f8, 0x3480ba51f5a371cb, 0xb691ae2d4f5a12cd, 0x047bb4fbd8c624ac, 0x866aa087623f47aa, 0x5576a705af69db05, 0xd767b3791590b803, 0x658da9af820c8e62, 0xe79cbdd338f5ed64, 0x446dd3fb738b1c04, 0xc67cc787c9727f02, 0x7496dd515eee4963, 0xf687c92de4172a65, 0x259bceaf2941b6ca, 0xa78adad393b8d5cc, 0x1560c0050424e3ad, 0x9771d479bedd80ab, 0x8781e953c61e4998, 0x0590fd2f7ce72a9e, 0xb77ae7f9eb7b1cff, 0x356bf38551827ff9, 0xe677f4079cd4e356, 0x6466e07b262d8050, 0xd68cfaadb1b1b631, 0x549deed10b48d537, 0x7fb7270fa7201c5f, 0xfda633731dd97f59, 0x4f4c29a58a454938, 0xcd5d3dd930bc2a3e, 0x1e413a5bfdeab691, 0x9c502e274713d597, 0x2eba34f1d08fe3f6, 0xacab208d6a7680f0, 0xbc5b1da712b549c3, 0x3e4a09dba84c2ac5, 0x8ca0130d3fd01ca4, 0x0eb1077185297fa2, 0xddad00f3487fe30d, 0x5fbc148ff286800b, 0xed560e59651ab66a, 0x6f471a25dfe3d56c, 0xccb6740d949d240c, 0x4ea760712e64470a, 0xfc4d7aa7b9f8716b, 0x7e5c6edb0301126d, 0xad406959ce578ec2, 0x2f517d2574aeedc4, 0x9dbb67f3e332dba5, 0x1faa738f59cbb8a3, 0x0f5a4ea521087190, 0x8d4b5ad99bf11296, 0x3fa1400f0c6d24f7, 0xbdb05473b69447f1, 0x6eac53f17bc2db5e, 0xecbd478dc13bb858, 0x5e575d5b56a78e39, 0xdc464927ec5eed3f, 0x2d6ca75898cdff92, 0xaf7db32422349c94, 0x1d97a9f2b5a8aaf5, 0x9f86bd8e0f51c9f3, 0x4c9aba0cc207555c, 0xce8bae7078fe365a, 0x7c61b4a6ef62003b, 0xfe70a0da559b633d, 0xee809df02d58aa0e, 0x6c91898c97a1c908, 0xde7b935a003dff69, 0x5c6a8726bac49c6f, 0x8f7680a4779200c0, 0x0d6794d8cd6b63c6, 0xbf8d8e0e5af755a7, 0x3d9c9a72e00e36a1, 0x9e6df45aab70c7c1, 0x1c7ce0261189a4c7, 0xae96faf0861592a6, 0x2c87ee8c3cecf1a0, 0xff9be90ef1ba6d0f, 0x7d8afd724b430e09, 0xcf60e7a4dcdf3868, 0x4d71f3d866265b6e, 0x5d81cef21ee5925d, 0xdf90da8ea41cf15b, 0x6d7ac0583380c73a, 0xef6bd4248979a43c, 0x3c77d3a6442f3893, 0xbe66c7dafed65b95, 0x0c8cdd0c694a6df4, 0x8e9dc970d3b30ef2, 0xda0027a1d8fbdbc5, 0x581133dd6202b8c3, 0xeafb290bf59e8ea2, 0x68ea3d774f67eda4, 0xbbf63af58231710b, 0x39e72e8938c8120d, 0x8b0d345faf54246c, 0x091c202315ad476a, 0x19ec1d096d6e8e59, 0x9bfd0975d797ed5f, 0x291713a3400bdb3e, 0xab0607dffaf2b838, 0x781a005d37a42497, 0xfa0b14218d5d4791, 0x48e10ef71ac171f0, 0xcaf01a8ba03812f6, 0x690174a3eb46e396, 0xeb1060df51bf8090, 0x59fa7a09c623b6f1, 0xdbeb6e757cdad5f7, 0x08f769f7b18c4958, 0x8ae67d8b0b752a5e, 0x380c675d9ce91c3f, 0xba1d732126107f39, 0xaaed4e0b5ed3b60a, 0x28fc5a77e42ad50c, 0x9a1640a173b6e36d, 0x180754ddc94f806b, 0xcb1b535f04191cc4, 0x490a4723bee07fc2, 0xfbe05df5297c49a3, 0x79f1498993852aa5, 0x88dba7f6e7163808, 0x0acab38a5def5b0e, 0xb820a95cca736d6f, 0x3a31bd20708a0e69, 0xe92dbaa2bddc92c6, 0x6b3caede0725f1c0, 0xd9d6b40890b9c7a1, 0x5bc7a0742a40a4a7, 0x4b379d5e52836d94, 0xc9268922e87a0e92, 0x7bcc93f47fe638f3, 0xf9dd8788c51f5bf5, 0x2ac1800a0849c75a, 0xa8d09476b2b0a45c, 0x1a3a8ea0252c923d, 0x982b9adc9fd5f13b, 0x3bdaf4f4d4ab005b, 0xb9cbe0886e52635d, 0x0b21fa5ef9ce553c, 0x8930ee224337363a, 0x5a2ce9a08e61aa95, 0xd83dfddc3498c993, 0x6ad7e70aa304fff2, 0xe8c6f37619fd9cf4, 0xf836ce5c613e55c7, 0x7a27da20dbc736c1, 0xc8cdc0f64c5b00a0, 0x4adcd48af6a263a6, 0x99c0d3083bf4ff09, 0x1bd1c774810d9c0f, 0xa93bdda21691aa6e, 0x2b2ac9deac68c968, ], [ 0x0000000000000000, 0x373d15f784905d1e, 0x6e7a2bef0920ba3c, 0x59473e188db0e722, 0xdcf457de12417478, 0xebc9422996d12966, 0xb28e7c311b61ce44, 0x85b369c69ff1935a, 0x8d3189ef7c157b9b, 0xba0c9c18f8852685, 0xe34ba2007535c1a7, 0xd476b7f7f1a59cb9, 0x51c5de316e540fe3, 0x66f8cbc6eac452fd, 0x3fbff5de6774b5df, 0x0882e029e3e4e8c1, 0x2eba358da0bd645d, 0x1987207a242d3943, 0x40c01e62a99dde61, 0x77fd0b952d0d837f, 0xf24e6253b2fc1025, 0xc57377a4366c4d3b, 0x9c3449bcbbdcaa19, 0xab095c4b3f4cf707, 0xa38bbc62dca81fc6, 0x94b6a995583842d8, 0xcdf1978dd588a5fa, 0xfacc827a5118f8e4, 0x7f7febbccee96bbe, 0x4842fe4b4a7936a0, 0x1105c053c7c9d182, 0x2638d5a443598c9c, 0x5d746b1b417ac8ba, 0x6a497eecc5ea95a4, 0x330e40f4485a7286, 0x04335503ccca2f98, 0x81803cc5533bbcc2, 0xb6bd2932d7abe1dc, 0xeffa172a5a1b06fe, 0xd8c702ddde8b5be0, 0xd045e2f43d6fb321, 0xe778f703b9ffee3f, 0xbe3fc91b344f091d, 0x8902dcecb0df5403, 0x0cb1b52a2f2ec759, 0x3b8ca0ddabbe9a47, 0x62cb9ec5260e7d65, 0x55f68b32a29e207b, 0x73ce5e96e1c7ace7, 0x44f34b616557f1f9, 0x1db47579e8e716db, 0x2a89608e6c774bc5, 0xaf3a0948f386d89f, 0x98071cbf77168581, 0xc14022a7faa662a3, 0xf67d37507e363fbd, 0xfeffd7799dd2d77c, 0xc9c2c28e19428a62, 0x9085fc9694f26d40, 0xa7b8e9611062305e, 0x220b80a78f93a304, 0x153695500b03fe1a, 0x4c71ab4886b31938, 0x7b4cbebf02234426, 0xbae8d63682f59174, 0x8dd5c3c10665cc6a, 0xd492fdd98bd52b48, 0xe3afe82e0f457656, 0x661c81e890b4e50c, 0x5121941f1424b812, 0x0866aa0799945f30, 0x3f5bbff01d04022e, 0x37d95fd9fee0eaef, 0x00e44a2e7a70b7f1, 0x59a37436f7c050d3, 0x6e9e61c173500dcd, 0xeb2d0807eca19e97, 0xdc101df06831c389, 0x855723e8e58124ab, 0xb26a361f611179b5, 0x9452e3bb2248f529, 0xa36ff64ca6d8a837, 0xfa28c8542b684f15, 0xcd15dda3aff8120b, 0x48a6b46530098151, 0x7f9ba192b499dc4f, 0x26dc9f8a39293b6d, 0x11e18a7dbdb96673, 0x19636a545e5d8eb2, 0x2e5e7fa3dacdd3ac, 0x771941bb577d348e, 0x4024544cd3ed6990, 0xc5973d8a4c1cfaca, 0xf2aa287dc88ca7d4, 0xabed1665453c40f6, 0x9cd00392c1ac1de8, 0xe79cbd2dc38f59ce, 0xd0a1a8da471f04d0, 0x89e696c2caafe3f2, 0xbedb83354e3fbeec, 0x3b68eaf3d1ce2db6, 0x0c55ff04555e70a8, 0x5512c11cd8ee978a, 0x622fd4eb5c7eca94, 0x6aad34c2bf9a2255, 0x5d9021353b0a7f4b, 0x04d71f2db6ba9869, 0x33ea0ada322ac577, 0xb659631caddb562d, 0x816476eb294b0b33, 0xd82348f3a4fbec11, 0xef1e5d04206bb10f, 0xc92688a063323d93, 0xfe1b9d57e7a2608d, 0xa75ca34f6a1287af, 0x9061b6b8ee82dab1, 0x15d2df7e717349eb, 0x22efca89f5e314f5, 0x7ba8f4917853f3d7, 0x4c95e166fcc3aec9, 0x4417014f1f274608, 0x732a14b89bb71b16, 0x2a6d2aa01607fc34, 0x1d503f579297a12a, 0x98e356910d663270, 0xafde436689f66f6e, 0xf6997d7e0446884c, 0xc1a4688980d6d552, 0x41088a3e5d7cb183, 0x76359fc9d9ecec9d, 0x2f72a1d1545c0bbf, 0x184fb426d0cc56a1, 0x9dfcdde04f3dc5fb, 0xaac1c817cbad98e5, 0xf386f60f461d7fc7, 0xc4bbe3f8c28d22d9, 0xcc3903d12169ca18, 0xfb041626a5f99706, 0xa243283e28497024, 0x957e3dc9acd92d3a, 0x10cd540f3328be60, 0x27f041f8b7b8e37e, 0x7eb77fe03a08045c, 0x498a6a17be985942, 0x6fb2bfb3fdc1d5de, 0x588faa44795188c0, 0x01c8945cf4e16fe2, 0x36f581ab707132fc, 0xb346e86def80a1a6, 0x847bfd9a6b10fcb8, 0xdd3cc382e6a01b9a, 0xea01d67562304684, 0xe283365c81d4ae45, 0xd5be23ab0544f35b, 0x8cf91db388f41479, 0xbbc408440c644967, 0x3e7761829395da3d, 0x094a747517058723, 0x500d4a6d9ab56001, 0x67305f9a1e253d1f, 0x1c7ce1251c067939, 0x2b41f4d298962427, 0x7206caca1526c305, 0x453bdf3d91b69e1b, 0xc088b6fb0e470d41, 0xf7b5a30c8ad7505f, 0xaef29d140767b77d, 0x99cf88e383f7ea63, 0x914d68ca601302a2, 0xa6707d3de4835fbc, 0xff3743256933b89e, 0xc80a56d2eda3e580, 0x4db93f14725276da, 0x7a842ae3f6c22bc4, 0x23c314fb7b72cce6, 0x14fe010cffe291f8, 0x32c6d4a8bcbb1d64, 0x05fbc15f382b407a, 0x5cbcff47b59ba758, 0x6b81eab0310bfa46, 0xee328376aefa691c, 0xd90f96812a6a3402, 0x8048a899a7dad320, 0xb775bd6e234a8e3e, 0xbff75d47c0ae66ff, 0x88ca48b0443e3be1, 0xd18d76a8c98edcc3, 0xe6b0635f4d1e81dd, 0x63030a99d2ef1287, 0x543e1f6e567f4f99, 0x0d792176dbcfa8bb, 0x3a4434815f5ff5a5, 0xfbe05c08df8920f7, 0xccdd49ff5b197de9, 0x959a77e7d6a99acb, 0xa2a762105239c7d5, 0x27140bd6cdc8548f, 0x10291e2149580991, 0x496e2039c4e8eeb3, 0x7e5335ce4078b3ad, 0x76d1d5e7a39c5b6c, 0x41ecc010270c0672, 0x18abfe08aabce150, 0x2f96ebff2e2cbc4e, 0xaa258239b1dd2f14, 0x9d1897ce354d720a, 0xc45fa9d6b8fd9528, 0xf362bc213c6dc836, 0xd55a69857f3444aa, 0xe2677c72fba419b4, 0xbb20426a7614fe96, 0x8c1d579df284a388, 0x09ae3e5b6d7530d2, 0x3e932bace9e56dcc, 0x67d415b464558aee, 0x50e90043e0c5d7f0, 0x586be06a03213f31, 0x6f56f59d87b1622f, 0x3611cb850a01850d, 0x012cde728e91d813, 0x849fb7b411604b49, 0xb3a2a24395f01657, 0xeae59c5b1840f175, 0xddd889ac9cd0ac6b, 0xa69437139ef3e84d, 0x91a922e41a63b553, 0xc8ee1cfc97d35271, 0xffd3090b13430f6f, 0x7a6060cd8cb29c35, 0x4d5d753a0822c12b, 0x141a4b2285922609, 0x23275ed501027b17, 0x2ba5befce2e693d6, 0x1c98ab0b6676cec8, 0x45df9513ebc629ea, 0x72e280e46f5674f4, 0xf751e922f0a7e7ae, 0xc06cfcd57437bab0, 0x992bc2cdf9875d92, 0xae16d73a7d17008c, 0x882e029e3e4e8c10, 0xbf131769baded10e, 0xe6542971376e362c, 0xd1693c86b3fe6b32, 0x54da55402c0ff868, 0x63e740b7a89fa576, 0x3aa07eaf252f4254, 0x0d9d6b58a1bf1f4a, 0x051f8b71425bf78b, 0x32229e86c6cbaa95, 0x6b65a09e4b7b4db7, 0x5c58b569cfeb10a9, 0xd9ebdcaf501a83f3, 0xeed6c958d48adeed, 0xb791f740593a39cf, 0x80ace2b7ddaa64d1, ], [ 0x0000000000000000, 0xe9742a79ef04a5d4, 0xe63172a0869ed8c3, 0x0f4558d9699a7d17, 0xf8bbc31255aa22ed, 0x11cfe96bbaae8739, 0x1e8ab1b2d334fa2e, 0xf7fe9bcb3c305ffa, 0xc5aea077f3c3d6b1, 0x2cda8a0e1cc77365, 0x239fd2d7755d0e72, 0xcaebf8ae9a59aba6, 0x3d156365a669f45c, 0xd461491c496d5188, 0xdb2411c520f72c9f, 0x32503bbccff3894b, 0xbf8466bcbf103e09, 0x56f04cc550149bdd, 0x59b5141c398ee6ca, 0xb0c13e65d68a431e, 0x473fa5aeeaba1ce4, 0xae4b8fd705beb930, 0xa10ed70e6c24c427, 0x487afd77832061f3, 0x7a2ac6cb4cd3e8b8, 0x935eecb2a3d74d6c, 0x9c1bb46bca4d307b, 0x756f9e12254995af, 0x829105d91979ca55, 0x6be52fa0f67d6f81, 0x64a077799fe71296, 0x8dd45d0070e3b742, 0x4bd1eb2a26b7ef79, 0xa2a5c153c9b34aad, 0xade0998aa02937ba, 0x4494b3f34f2d926e, 0xb36a2838731dcd94, 0x5a1e02419c196840, 0x555b5a98f5831557, 0xbc2f70e11a87b083, 0x8e7f4b5dd57439c8, 0x670b61243a709c1c, 0x684e39fd53eae10b, 0x813a1384bcee44df, 0x76c4884f80de1b25, 0x9fb0a2366fdabef1, 0x90f5faef0640c3e6, 0x7981d096e9446632, 0xf4558d9699a7d170, 0x1d21a7ef76a374a4, 0x1264ff361f3909b3, 0xfb10d54ff03dac67, 0x0cee4e84cc0df39d, 0xe59a64fd23095649, 0xeadf3c244a932b5e, 0x03ab165da5978e8a, 0x31fb2de16a6407c1, 0xd88f07988560a215, 0xd7ca5f41ecfadf02, 0x3ebe753803fe7ad6, 0xc940eef33fce252c, 0x2034c48ad0ca80f8, 0x2f719c53b950fdef, 0xc605b62a5654583b, 0x97a3d6544d6fdef2, 0x7ed7fc2da26b7b26, 0x7192a4f4cbf10631, 0x98e68e8d24f5a3e5, 0x6f18154618c5fc1f, 0x866c3f3ff7c159cb, 0x892967e69e5b24dc, 0x605d4d9f715f8108, 0x520d7623beac0843, 0xbb795c5a51a8ad97, 0xb43c04833832d080, 0x5d482efad7367554, 0xaab6b531eb062aae, 0x43c29f4804028f7a, 0x4c87c7916d98f26d, 0xa5f3ede8829c57b9, 0x2827b0e8f27fe0fb, 0xc1539a911d7b452f, 0xce16c24874e13838, 0x2762e8319be59dec, 0xd09c73faa7d5c216, 0x39e8598348d167c2, 0x36ad015a214b1ad5, 0xdfd92b23ce4fbf01, 0xed89109f01bc364a, 0x04fd3ae6eeb8939e, 0x0bb8623f8722ee89, 0xe2cc484668264b5d, 0x1532d38d541614a7, 0xfc46f9f4bb12b173, 0xf303a12dd288cc64, 0x1a778b543d8c69b0, 0xdc723d7e6bd8318b, 0x3506170784dc945f, 0x3a434fdeed46e948, 0xd33765a702424c9c, 0x24c9fe6c3e721366, 0xcdbdd415d176b6b2, 0xc2f88cccb8eccba5, 0x2b8ca6b557e86e71, 0x19dc9d09981be73a, 0xf0a8b770771f42ee, 0xffedefa91e853ff9, 0x1699c5d0f1819a2d, 0xe1675e1bcdb1c5d7, 0x0813746222b56003, 0x07562cbb4b2f1d14, 0xee2206c2a42bb8c0, 0x63f65bc2d4c80f82, 0x8a8271bb3bccaa56, 0x85c729625256d741, 0x6cb3031bbd527295, 0x9b4d98d081622d6f, 0x7239b2a96e6688bb, 0x7d7cea7007fcf5ac, 0x9408c009e8f85078, 0xa658fbb5270bd933, 0x4f2cd1ccc80f7ce7, 0x40698915a19501f0, 0xa91da36c4e91a424, 0x5ee338a772a1fbde, 0xb79712de9da55e0a, 0xb8d24a07f43f231d, 0x51a6607e1b3b86c9, 0x1b9e8afbc2482e8f, 0xf2eaa0822d4c8b5b, 0xfdaff85b44d6f64c, 0x14dbd222abd25398, 0xe32549e997e20c62, 0x0a51639078e6a9b6, 0x05143b49117cd4a1, 0xec601130fe787175, 0xde302a8c318bf83e, 0x374400f5de8f5dea, 0x3801582cb71520fd, 0xd175725558118529, 0x268be99e6421dad3, 0xcfffc3e78b257f07, 0xc0ba9b3ee2bf0210, 0x29ceb1470dbba7c4, 0xa41aec477d581086, 0x4d6ec63e925cb552, 0x422b9ee7fbc6c845, 0xab5fb49e14c26d91, 0x5ca12f5528f2326b, 0xb5d5052cc7f697bf, 0xba905df5ae6ceaa8, 0x53e4778c41684f7c, 0x61b44c308e9bc637, 0x88c06649619f63e3, 0x87853e9008051ef4, 0x6ef114e9e701bb20, 0x990f8f22db31e4da, 0x707ba55b3435410e, 0x7f3efd825daf3c19, 0x964ad7fbb2ab99cd, 0x504f61d1e4ffc1f6, 0xb93b4ba80bfb6422, 0xb67e137162611935, 0x5f0a39088d65bce1, 0xa8f4a2c3b155e31b, 0x418088ba5e5146cf, 0x4ec5d06337cb3bd8, 0xa7b1fa1ad8cf9e0c, 0x95e1c1a6173c1747, 0x7c95ebdff838b293, 0x73d0b30691a2cf84, 0x9aa4997f7ea66a50, 0x6d5a02b4429635aa, 0x842e28cdad92907e, 0x8b6b7014c408ed69, 0x621f5a6d2b0c48bd, 0xefcb076d5befffff, 0x06bf2d14b4eb5a2b, 0x09fa75cddd71273c, 0xe08e5fb4327582e8, 0x1770c47f0e45dd12, 0xfe04ee06e14178c6, 0xf141b6df88db05d1, 0x18359ca667dfa005, 0x2a65a71aa82c294e, 0xc3118d6347288c9a, 0xcc54d5ba2eb2f18d, 0x2520ffc3c1b65459, 0xd2de6408fd860ba3, 0x3baa4e711282ae77, 0x34ef16a87b18d360, 0xdd9b3cd1941c76b4, 0x8c3d5caf8f27f07d, 0x654976d6602355a9, 0x6a0c2e0f09b928be, 0x83780476e6bd8d6a, 0x74869fbdda8dd290, 0x9df2b5c435897744, 0x92b7ed1d5c130a53, 0x7bc3c764b317af87, 0x4993fcd87ce426cc, 0xa0e7d6a193e08318, 0xafa28e78fa7afe0f, 0x46d6a401157e5bdb, 0xb1283fca294e0421, 0x585c15b3c64aa1f5, 0x57194d6aafd0dce2, 0xbe6d671340d47936, 0x33b93a133037ce74, 0xdacd106adf336ba0, 0xd58848b3b6a916b7, 0x3cfc62ca59adb363, 0xcb02f901659dec99, 0x2276d3788a99494d, 0x2d338ba1e303345a, 0xc447a1d80c07918e, 0xf6179a64c3f418c5, 0x1f63b01d2cf0bd11, 0x1026e8c4456ac006, 0xf952c2bdaa6e65d2, 0x0eac5976965e3a28, 0xe7d8730f795a9ffc, 0xe89d2bd610c0e2eb, 0x01e901afffc4473f, 0xc7ecb785a9901f04, 0x2e989dfc4694bad0, 0x21ddc5252f0ec7c7, 0xc8a9ef5cc00a6213, 0x3f577497fc3a3de9, 0xd6235eee133e983d, 0xd96606377aa4e52a, 0x30122c4e95a040fe, 0x024217f25a53c9b5, 0xeb363d8bb5576c61, 0xe4736552dccd1176, 0x0d074f2b33c9b4a2, 0xfaf9d4e00ff9eb58, 0x138dfe99e0fd4e8c, 0x1cc8a6408967339b, 0xf5bc8c396663964f, 0x7868d1391680210d, 0x911cfb40f98484d9, 0x9e59a399901ef9ce, 0x772d89e07f1a5c1a, 0x80d3122b432a03e0, 0x69a73852ac2ea634, 0x66e2608bc5b4db23, 0x8f964af22ab07ef7, 0xbdc6714ee543f7bc, 0x54b25b370a475268, 0x5bf703ee63dd2f7f, 0xb28329978cd98aab, 0x457db25cb0e9d551, 0xac0998255fed7085, 0xa34cc0fc36770d92, 0x4a38ea85d973a846, ], [ 0x0000000000000000, 0xfc5d27f6bf353971, 0xcc6369be26fde189, 0x303e4e4899c8d8f8, 0xac1ff52f156c5079, 0x5042d2d9aa596908, 0x607c9c913391b1f0, 0x9c21bb678ca48881, 0x6ce6cc0d724f3399, 0x90bbebfbcd7a0ae8, 0xa085a5b354b2d210, 0x5cd88245eb87eb61, 0xc0f93922672363e0, 0x3ca41ed4d8165a91, 0x0c9a509c41de8269, 0xf0c7776afeebbb18, 0xd9cd981ae49e6732, 0x2590bfec5bab5e43, 0x15aef1a4c26386bb, 0xe9f3d6527d56bfca, 0x75d26d35f1f2374b, 0x898f4ac34ec70e3a, 0xb9b1048bd70fd6c2, 0x45ec237d683aefb3, 0xb52b541796d154ab, 0x497673e129e46dda, 0x79483da9b02cb522, 0x85151a5f0f198c53, 0x1934a13883bd04d2, 0xe56986ce3c883da3, 0xd557c886a540e55b, 0x290aef701a75dc2a, 0x8742166691ab5d0f, 0x7b1f31902e9e647e, 0x4b217fd8b756bc86, 0xb77c582e086385f7, 0x2b5de34984c70d76, 0xd700c4bf3bf23407, 0xe73e8af7a23aecff, 0x1b63ad011d0fd58e, 0xeba4da6be3e46e96, 0x17f9fd9d5cd157e7, 0x27c7b3d5c5198f1f, 0xdb9a94237a2cb66e, 0x47bb2f44f6883eef, 0xbbe608b249bd079e, 0x8bd846fad075df66, 0x7785610c6f40e617, 0x5e8f8e7c75353a3d, 0xa2d2a98aca00034c, 0x92ece7c253c8dbb4, 0x6eb1c034ecfde2c5, 0xf2907b5360596a44, 0x0ecd5ca5df6c5335, 0x3ef312ed46a48bcd, 0xc2ae351bf991b2bc, 0x32694271077a09a4, 0xce346587b84f30d5, 0xfe0a2bcf2187e82d, 0x02570c399eb2d15c, 0x9e76b75e121659dd, 0x622b90a8ad2360ac, 0x5215dee034ebb854, 0xae48f9168bde8125, 0x3a5d0a9e7bc12975, 0xc6002d68c4f41004, 0xf63e63205d3cc8fc, 0x0a6344d6e209f18d, 0x9642ffb16ead790c, 0x6a1fd847d198407d, 0x5a21960f48509885, 0xa67cb1f9f765a1f4, 0x56bbc693098e1aec, 0xaae6e165b6bb239d, 0x9ad8af2d2f73fb65, 0x668588db9046c214, 0xfaa433bc1ce24a95, 0x06f9144aa3d773e4, 0x36c75a023a1fab1c, 0xca9a7df4852a926d, 0xe39092849f5f4e47, 0x1fcdb572206a7736, 0x2ff3fb3ab9a2afce, 0xd3aedccc069796bf, 0x4f8f67ab8a331e3e, 0xb3d2405d3506274f, 0x83ec0e15acceffb7, 0x7fb129e313fbc6c6, 0x8f765e89ed107dde, 0x732b797f522544af, 0x43153737cbed9c57, 0xbf4810c174d8a526, 0x2369aba6f87c2da7, 0xdf348c50474914d6, 0xef0ac218de81cc2e, 0x1357e5ee61b4f55f, 0xbd1f1cf8ea6a747a, 0x41423b0e555f4d0b, 0x717c7546cc9795f3, 0x8d2152b073a2ac82, 0x1100e9d7ff062403, 0xed5dce2140331d72, 0xdd638069d9fbc58a, 0x213ea79f66cefcfb, 0xd1f9d0f5982547e3, 0x2da4f70327107e92, 0x1d9ab94bbed8a66a, 0xe1c79ebd01ed9f1b, 0x7de625da8d49179a, 0x81bb022c327c2eeb, 0xb1854c64abb4f613, 0x4dd86b921481cf62, 0x64d284e20ef41348, 0x988fa314b1c12a39, 0xa8b1ed5c2809f2c1, 0x54eccaaa973ccbb0, 0xc8cd71cd1b984331, 0x3490563ba4ad7a40, 0x04ae18733d65a2b8, 0xf8f33f8582509bc9, 0x083448ef7cbb20d1, 0xf4696f19c38e19a0, 0xc45721515a46c158, 0x380a06a7e573f829, 0xa42bbdc069d770a8, 0x58769a36d6e249d9, 0x6848d47e4f2a9121, 0x9415f388f01fa850, 0x74ba153cf78252ea, 0x88e732ca48b76b9b, 0xb8d97c82d17fb363, 0x44845b746e4a8a12, 0xd8a5e013e2ee0293, 0x24f8c7e55ddb3be2, 0x14c689adc413e31a, 0xe89bae5b7b26da6b, 0x185cd93185cd6173, 0xe401fec73af85802, 0xd43fb08fa33080fa, 0x286297791c05b98b, 0xb4432c1e90a1310a, 0x481e0be82f94087b, 0x782045a0b65cd083, 0x847d62560969e9f2, 0xad778d26131c35d8, 0x512aaad0ac290ca9, 0x6114e49835e1d451, 0x9d49c36e8ad4ed20, 0x01687809067065a1, 0xfd355fffb9455cd0, 0xcd0b11b7208d8428, 0x315636419fb8bd59, 0xc191412b61530641, 0x3dcc66ddde663f30, 0x0df2289547aee7c8, 0xf1af0f63f89bdeb9, 0x6d8eb404743f5638, 0x91d393f2cb0a6f49, 0xa1edddba52c2b7b1, 0x5db0fa4cedf78ec0, 0xf3f8035a66290fe5, 0x0fa524acd91c3694, 0x3f9b6ae440d4ee6c, 0xc3c64d12ffe1d71d, 0x5fe7f67573455f9c, 0xa3bad183cc7066ed, 0x93849fcb55b8be15, 0x6fd9b83dea8d8764, 0x9f1ecf5714663c7c, 0x6343e8a1ab53050d, 0x537da6e9329bddf5, 0xaf20811f8daee484, 0x33013a78010a6c05, 0xcf5c1d8ebe3f5574, 0xff6253c627f78d8c, 0x033f743098c2b4fd, 0x2a359b4082b768d7, 0xd668bcb63d8251a6, 0xe656f2fea44a895e, 0x1a0bd5081b7fb02f, 0x862a6e6f97db38ae, 0x7a77499928ee01df, 0x4a4907d1b126d927, 0xb61420270e13e056, 0x46d3574df0f85b4e, 0xba8e70bb4fcd623f, 0x8ab03ef3d605bac7, 0x76ed1905693083b6, 0xeacca262e5940b37, 0x169185945aa13246, 0x26afcbdcc369eabe, 0xdaf2ec2a7c5cd3cf, 0x4ee71fa28c437b9f, 0xb2ba3854337642ee, 0x8284761caabe9a16, 0x7ed951ea158ba367, 0xe2f8ea8d992f2be6, 0x1ea5cd7b261a1297, 0x2e9b8333bfd2ca6f, 0xd2c6a4c500e7f31e, 0x2201d3affe0c4806, 0xde5cf45941397177, 0xee62ba11d8f1a98f, 0x123f9de767c490fe, 0x8e1e2680eb60187f, 0x724301765455210e, 0x427d4f3ecd9df9f6, 0xbe2068c872a8c087, 0x972a87b868dd1cad, 0x6b77a04ed7e825dc, 0x5b49ee064e20fd24, 0xa714c9f0f115c455, 0x3b3572977db14cd4, 0xc7685561c28475a5, 0xf7561b295b4cad5d, 0x0b0b3cdfe479942c, 0xfbcc4bb51a922f34, 0x07916c43a5a71645, 0x37af220b3c6fcebd, 0xcbf205fd835af7cc, 0x57d3be9a0ffe7f4d, 0xab8e996cb0cb463c, 0x9bb0d72429039ec4, 0x67edf0d29636a7b5, 0xc9a509c41de82690, 0x35f82e32a2dd1fe1, 0x05c6607a3b15c719, 0xf99b478c8420fe68, 0x65bafceb088476e9, 0x99e7db1db7b14f98, 0xa9d995552e799760, 0x5584b2a3914cae11, 0xa543c5c96fa71509, 0x591ee23fd0922c78, 0x6920ac77495af480, 0x957d8b81f66fcdf1, 0x095c30e67acb4570, 0xf5011710c5fe7c01, 0xc53f59585c36a4f9, 0x39627eaee3039d88, 0x106891def97641a2, 0xec35b628464378d3, 0xdc0bf860df8ba02b, 0x2056df9660be995a, 0xbc7764f1ec1a11db, 0x402a4307532f28aa, 0x70140d4fcae7f052, 0x8c492ab975d2c923, 0x7c8e5dd38b39723b, 0x80d37a25340c4b4a, 0xb0ed346dadc493b2, 0x4cb0139b12f1aac3, 0xd091a8fc9e552242, 0x2ccc8f0a21601b33, 0x1cf2c142b8a8c3cb, 0xe0afe6b4079dfaba, ], [ 0x0000000000000000, 0x21e9761e252621ac, 0x43d2ec3c4a4c4358, 0x623b9a226f6a62f4, 0x87a5d878949886b0, 0xa64cae66b1bea71c, 0xc4773444ded4c5e8, 0xe59e425afbf2e444, 0x3b9296a271a69e0b, 0x1a7be0bc5480bfa7, 0x78407a9e3beadd53, 0x59a90c801eccfcff, 0xbc374edae53e18bb, 0x9dde38c4c0183917, 0xffe5a2e6af725be3, 0xde0cd4f88a547a4f, 0x77252d44e34d3c16, 0x56cc5b5ac66b1dba, 0x34f7c178a9017f4e, 0x151eb7668c275ee2, 0xf080f53c77d5baa6, 0xd169832252f39b0a, 0xb35219003d99f9fe, 0x92bb6f1e18bfd852, 0x4cb7bbe692eba21d, 0x6d5ecdf8b7cd83b1, 0x0f6557dad8a7e145, 0x2e8c21c4fd81c0e9, 0xcb12639e067324ad, 0xeafb158023550501, 0x88c08fa24c3f67f5, 0xa929f9bc69194659, 0xee4a5a89c69a782c, 0xcfa32c97e3bc5980, 0xad98b6b58cd63b74, 0x8c71c0aba9f01ad8, 0x69ef82f15202fe9c, 0x4806f4ef7724df30, 0x2a3d6ecd184ebdc4, 0x0bd418d33d689c68, 0xd5d8cc2bb73ce627, 0xf431ba35921ac78b, 0x960a2017fd70a57f, 0xb7e35609d85684d3, 0x527d145323a46097, 0x7394624d0682413b, 0x11aff86f69e823cf, 0x30468e714cce0263, 0x996f77cd25d7443a, 0xb88601d300f16596, 0xdabd9bf16f9b0762, 0xfb54edef4abd26ce, 0x1ecaafb5b14fc28a, 0x3f23d9ab9469e326, 0x5d184389fb0381d2, 0x7cf13597de25a07e, 0xa2fde16f5471da31, 0x831497717157fb9d, 0xe12f0d531e3d9969, 0xc0c67b4d3b1bb8c5, 0x25583917c0e95c81, 0x04b14f09e5cf7d2d, 0x668ad52b8aa51fd9, 0x4763a335af833e75, 0xe84d9340d5a36333, 0xc9a4e55ef085429f, 0xab9f7f7c9fef206b, 0x8a760962bac901c7, 0x6fe84b38413be583, 0x4e013d26641dc42f, 0x2c3aa7040b77a6db, 0x0dd3d11a2e518777, 0xd3df05e2a405fd38, 0xf23673fc8123dc94, 0x900de9deee49be60, 0xb1e49fc0cb6f9fcc, 0x547add9a309d7b88, 0x7593ab8415bb5a24, 0x17a831a67ad138d0, 0x364147b85ff7197c, 0x9f68be0436ee5f25, 0xbe81c81a13c87e89, 0xdcba52387ca21c7d, 0xfd53242659843dd1, 0x18cd667ca276d995, 0x392410628750f839, 0x5b1f8a40e83a9acd, 0x7af6fc5ecd1cbb61, 0xa4fa28a64748c12e, 0x85135eb8626ee082, 0xe728c49a0d048276, 0xc6c1b2842822a3da, 0x235ff0ded3d0479e, 0x02b686c0f6f66632, 0x608d1ce2999c04c6, 0x41646afcbcba256a, 0x0607c9c913391b1f, 0x27eebfd7361f3ab3, 0x45d525f559755847, 0x643c53eb7c5379eb, 0x81a211b187a19daf, 0xa04b67afa287bc03, 0xc270fd8dcdeddef7, 0xe3998b93e8cbff5b, 0x3d955f6b629f8514, 0x1c7c297547b9a4b8, 0x7e47b35728d3c64c, 0x5faec5490df5e7e0, 0xba308713f60703a4, 0x9bd9f10dd3212208, 0xf9e26b2fbc4b40fc, 0xd80b1d31996d6150, 0x7122e48df0742709, 0x50cb9293d55206a5, 0x32f008b1ba386451, 0x13197eaf9f1e45fd, 0xf6873cf564eca1b9, 0xd76e4aeb41ca8015, 0xb555d0c92ea0e2e1, 0x94bca6d70b86c34d, 0x4ab0722f81d2b902, 0x6b590431a4f498ae, 0x09629e13cb9efa5a, 0x288be80deeb8dbf6, 0xcd15aa57154a3fb2, 0xecfcdc49306c1e1e, 0x8ec7466b5f067cea, 0xaf2e30757a205d46, 0xe44200d2f3d1550d, 0xc5ab76ccd6f774a1, 0xa790eceeb99d1655, 0x86799af09cbb37f9, 0x63e7d8aa6749d3bd, 0x420eaeb4426ff211, 0x203534962d0590e5, 0x01dc42880823b149, 0xdfd096708277cb06, 0xfe39e06ea751eaaa, 0x9c027a4cc83b885e, 0xbdeb0c52ed1da9f2, 0x58754e0816ef4db6, 0x799c381633c96c1a, 0x1ba7a2345ca30eee, 0x3a4ed42a79852f42, 0x93672d96109c691b, 0xb28e5b8835ba48b7, 0xd0b5c1aa5ad02a43, 0xf15cb7b47ff60bef, 0x14c2f5ee8404efab, 0x352b83f0a122ce07, 0x571019d2ce48acf3, 0x76f96fcceb6e8d5f, 0xa8f5bb34613af710, 0x891ccd2a441cd6bc, 0xeb2757082b76b448, 0xcace21160e5095e4, 0x2f50634cf5a271a0, 0x0eb91552d084500c, 0x6c828f70bfee32f8, 0x4d6bf96e9ac81354, 0x0a085a5b354b2d21, 0x2be12c45106d0c8d, 0x49dab6677f076e79, 0x6833c0795a214fd5, 0x8dad8223a1d3ab91, 0xac44f43d84f58a3d, 0xce7f6e1feb9fe8c9, 0xef961801ceb9c965, 0x319accf944edb32a, 0x1073bae761cb9286, 0x724820c50ea1f072, 0x53a156db2b87d1de, 0xb63f1481d075359a, 0x97d6629ff5531436, 0xf5edf8bd9a3976c2, 0xd4048ea3bf1f576e, 0x7d2d771fd6061137, 0x5cc40101f320309b, 0x3eff9b239c4a526f, 0x1f16ed3db96c73c3, 0xfa88af67429e9787, 0xdb61d97967b8b62b, 0xb95a435b08d2d4df, 0x98b335452df4f573, 0x46bfe1bda7a08f3c, 0x675697a38286ae90, 0x056d0d81edeccc64, 0x24847b9fc8caedc8, 0xc11a39c53338098c, 0xe0f34fdb161e2820, 0x82c8d5f979744ad4, 0xa321a3e75c526b78, 0x0c0f93922672363e, 0x2de6e58c03541792, 0x4fdd7fae6c3e7566, 0x6e3409b0491854ca, 0x8baa4beab2eab08e, 0xaa433df497cc9122, 0xc878a7d6f8a6f3d6, 0xe991d1c8dd80d27a, 0x379d053057d4a835, 0x1674732e72f28999, 0x744fe90c1d98eb6d, 0x55a69f1238becac1, 0xb038dd48c34c2e85, 0x91d1ab56e66a0f29, 0xf3ea317489006ddd, 0xd203476aac264c71, 0x7b2abed6c53f0a28, 0x5ac3c8c8e0192b84, 0x38f852ea8f734970, 0x191124f4aa5568dc, 0xfc8f66ae51a78c98, 0xdd6610b07481ad34, 0xbf5d8a921bebcfc0, 0x9eb4fc8c3ecdee6c, 0x40b82874b4999423, 0x61515e6a91bfb58f, 0x036ac448fed5d77b, 0x2283b256dbf3f6d7, 0xc71df00c20011293, 0xe6f486120527333f, 0x84cf1c306a4d51cb, 0xa5266a2e4f6b7067, 0xe245c91be0e84e12, 0xc3acbf05c5ce6fbe, 0xa1972527aaa40d4a, 0x807e53398f822ce6, 0x65e011637470c8a2, 0x4409677d5156e90e, 0x2632fd5f3e3c8bfa, 0x07db8b411b1aaa56, 0xd9d75fb9914ed019, 0xf83e29a7b468f1b5, 0x9a05b385db029341, 0xbbecc59bfe24b2ed, 0x5e7287c105d656a9, 0x7f9bf1df20f07705, 0x1da06bfd4f9a15f1, 0x3c491de36abc345d, 0x9560e45f03a57204, 0xb4899241268353a8, 0xd6b2086349e9315c, 0xf75b7e7d6ccf10f0, 0x12c53c27973df4b4, 0x332c4a39b21bd518, 0x5117d01bdd71b7ec, 0x70fea605f8579640, 0xaef272fd7203ec0f, 0x8f1b04e35725cda3, 0xed209ec1384faf57, 0xccc9e8df1d698efb, 0x2957aa85e69b6abf, 0x08bedc9bc3bd4b13, 0x6a8546b9acd729e7, 0x4b6c30a789f1084b, ], [ 0x0000000000000000, 0x04f28def5347786c, 0x09e51bdea68ef0d8, 0x0d179631f5c988b4, 0x13ca37bd4d1de1b0, 0x1738ba521e5a99dc, 0x1a2f2c63eb931168, 0x1edda18cb8d46904, 0x27946f7a9a3bc360, 0x2366e295c97cbb0c, 0x2e7174a43cb533b8, 0x2a83f94b6ff24bd4, 0x345e58c7d72622d0, 0x30acd52884615abc, 0x3dbb431971a8d208, 0x3949cef622efaa64, 0x4f28def5347786c0, 0x4bda531a6730feac, 0x46cdc52b92f97618, 0x423f48c4c1be0e74, 0x5ce2e948796a6770, 0x581064a72a2d1f1c, 0x5507f296dfe497a8, 0x51f57f798ca3efc4, 0x68bcb18fae4c45a0, 0x6c4e3c60fd0b3dcc, 0x6159aa5108c2b578, 0x65ab27be5b85cd14, 0x7b768632e351a410, 0x7f840bddb016dc7c, 0x72939dec45df54c8, 0x7661100316982ca4, 0x9e51bdea68ef0d80, 0x9aa330053ba875ec, 0x97b4a634ce61fd58, 0x93462bdb9d268534, 0x8d9b8a5725f2ec30, 0x896907b876b5945c, 0x847e9189837c1ce8, 0x808c1c66d03b6484, 0xb9c5d290f2d4cee0, 0xbd375f7fa193b68c, 0xb020c94e545a3e38, 0xb4d244a1071d4654, 0xaa0fe52dbfc92f50, 0xaefd68c2ec8e573c, 0xa3eafef31947df88, 0xa718731c4a00a7e4, 0xd179631f5c988b40, 0xd58beef00fdff32c, 0xd89c78c1fa167b98, 0xdc6ef52ea95103f4, 0xc2b354a211856af0, 0xc641d94d42c2129c, 0xcb564f7cb70b9a28, 0xcfa4c293e44ce244, 0xf6ed0c65c6a34820, 0xf21f818a95e4304c, 0xff0817bb602db8f8, 0xfbfa9a54336ac094, 0xe5273bd88bbea990, 0xe1d5b637d8f9d1fc, 0xecc220062d305948, 0xe830ade97e772124, 0x087a5d878949886b, 0x0c88d068da0ef007, 0x019f46592fc778b3, 0x056dcbb67c8000df, 0x1bb06a3ac45469db, 0x1f42e7d5971311b7, 0x125571e462da9903, 0x16a7fc0b319de16f, 0x2fee32fd13724b0b, 0x2b1cbf1240353367, 0x260b2923b5fcbbd3, 0x22f9a4cce6bbc3bf, 0x3c2405405e6faabb, 0x38d688af0d28d2d7, 0x35c11e9ef8e15a63, 0x31339371aba6220f, 0x47528372bd3e0eab, 0x43a00e9dee7976c7, 0x4eb798ac1bb0fe73, 0x4a45154348f7861f, 0x5498b4cff023ef1b, 0x506a3920a3649777, 0x5d7daf1156ad1fc3, 0x598f22fe05ea67af, 0x60c6ec082705cdcb, 0x643461e77442b5a7, 0x6923f7d6818b3d13, 0x6dd17a39d2cc457f, 0x730cdbb56a182c7b, 0x77fe565a395f5417, 0x7ae9c06bcc96dca3, 0x7e1b4d849fd1a4cf, 0x962be06de1a685eb, 0x92d96d82b2e1fd87, 0x9fcefbb347287533, 0x9b3c765c146f0d5f, 0x85e1d7d0acbb645b, 0x81135a3ffffc1c37, 0x8c04cc0e0a359483, 0x88f641e15972ecef, 0xb1bf8f177b9d468b, 0xb54d02f828da3ee7, 0xb85a94c9dd13b653, 0xbca819268e54ce3f, 0xa275b8aa3680a73b, 0xa687354565c7df57, 0xab90a374900e57e3, 0xaf622e9bc3492f8f, 0xd9033e98d5d1032b, 0xddf1b37786967b47, 0xd0e62546735ff3f3, 0xd414a8a920188b9f, 0xcac9092598cce29b, 0xce3b84cacb8b9af7, 0xc32c12fb3e421243, 0xc7de9f146d056a2f, 0xfe9751e24feac04b, 0xfa65dc0d1cadb827, 0xf7724a3ce9643093, 0xf380c7d3ba2348ff, 0xed5d665f02f721fb, 0xe9afebb051b05997, 0xe4b87d81a479d123, 0xe04af06ef73ea94f, 0x10f4bb0f129310d6, 0x140636e041d468ba, 0x1911a0d1b41de00e, 0x1de32d3ee75a9862, 0x033e8cb25f8ef166, 0x07cc015d0cc9890a, 0x0adb976cf90001be, 0x0e291a83aa4779d2, 0x3760d47588a8d3b6, 0x3392599adbefabda, 0x3e85cfab2e26236e, 0x3a7742447d615b02, 0x24aae3c8c5b53206, 0x20586e2796f24a6a, 0x2d4ff816633bc2de, 0x29bd75f9307cbab2, 0x5fdc65fa26e49616, 0x5b2ee81575a3ee7a, 0x56397e24806a66ce, 0x52cbf3cbd32d1ea2, 0x4c1652476bf977a6, 0x48e4dfa838be0fca, 0x45f34999cd77877e, 0x4101c4769e30ff12, 0x78480a80bcdf5576, 0x7cba876fef982d1a, 0x71ad115e1a51a5ae, 0x755f9cb14916ddc2, 0x6b823d3df1c2b4c6, 0x6f70b0d2a285ccaa, 0x626726e3574c441e, 0x6695ab0c040b3c72, 0x8ea506e57a7c1d56, 0x8a578b0a293b653a, 0x87401d3bdcf2ed8e, 0x83b290d48fb595e2, 0x9d6f31583761fce6, 0x999dbcb76426848a, 0x948a2a8691ef0c3e, 0x9078a769c2a87452, 0xa931699fe047de36, 0xadc3e470b300a65a, 0xa0d4724146c92eee, 0xa426ffae158e5682, 0xbafb5e22ad5a3f86, 0xbe09d3cdfe1d47ea, 0xb31e45fc0bd4cf5e, 0xb7ecc8135893b732, 0xc18dd8104e0b9b96, 0xc57f55ff1d4ce3fa, 0xc868c3cee8856b4e, 0xcc9a4e21bbc21322, 0xd247efad03167a26, 0xd6b562425051024a, 0xdba2f473a5988afe, 0xdf50799cf6dff292, 0xe619b76ad43058f6, 0xe2eb3a858777209a, 0xeffcacb472bea82e, 0xeb0e215b21f9d042, 0xf5d380d7992db946, 0xf1210d38ca6ac12a, 0xfc369b093fa3499e, 0xf8c416e66ce431f2, 0x188ee6889bda98bd, 0x1c7c6b67c89de0d1, 0x116bfd563d546865, 0x159970b96e131009, 0x0b44d135d6c7790d, 0x0fb65cda85800161, 0x02a1caeb704989d5, 0x06534704230ef1b9, 0x3f1a89f201e15bdd, 0x3be8041d52a623b1, 0x36ff922ca76fab05, 0x320d1fc3f428d369, 0x2cd0be4f4cfcba6d, 0x282233a01fbbc201, 0x2535a591ea724ab5, 0x21c7287eb93532d9, 0x57a6387dafad1e7d, 0x5354b592fcea6611, 0x5e4323a30923eea5, 0x5ab1ae4c5a6496c9, 0x446c0fc0e2b0ffcd, 0x409e822fb1f787a1, 0x4d89141e443e0f15, 0x497b99f117797779, 0x703257073596dd1d, 0x74c0dae866d1a571, 0x79d74cd993182dc5, 0x7d25c136c05f55a9, 0x63f860ba788b3cad, 0x670aed552bcc44c1, 0x6a1d7b64de05cc75, 0x6eeff68b8d42b419, 0x86df5b62f335953d, 0x822dd68da072ed51, 0x8f3a40bc55bb65e5, 0x8bc8cd5306fc1d89, 0x95156cdfbe28748d, 0x91e7e130ed6f0ce1, 0x9cf0770118a68455, 0x9802faee4be1fc39, 0xa14b3418690e565d, 0xa5b9b9f73a492e31, 0xa8ae2fc6cf80a685, 0xac5ca2299cc7dee9, 0xb28103a52413b7ed, 0xb6738e4a7754cf81, 0xbb64187b829d4735, 0xbf969594d1da3f59, 0xc9f78597c74213fd, 0xcd05087894056b91, 0xc0129e4961cce325, 0xc4e013a6328b9b49, 0xda3db22a8a5ff24d, 0xdecf3fc5d9188a21, 0xd3d8a9f42cd10295, 0xd72a241b7f967af9, 0xee63eaed5d79d09d, 0xea9167020e3ea8f1, 0xe786f133fbf72045, 0xe3747cdca8b05829, 0xfda9dd501064312d, 0xf95b50bf43234941, 0xf44cc68eb6eac1f5, 0xf0be4b61e5adb999, ], [ 0x0000000000000000, 0x49e1df807414fdef, 0x93c3bf00e829fbde, 0xda2260809c3d0631, 0x135e585288c464d7, 0x5abf87d2fcd09938, 0x809de75260ed9f09, 0xc97c38d214f962e6, 0x26bcb0a51188c9ae, 0x6f5d6f25659c3441, 0xb57f0fa5f9a13270, 0xfc9ed0258db5cf9f, 0x35e2e8f7994cad79, 0x7c033777ed585096, 0xa62157f7716556a7, 0xefc088770571ab48, 0x4d79614a2311935c, 0x0498beca57056eb3, 0xdebade4acb386882, 0x975b01cabf2c956d, 0x5e273918abd5f78b, 0x17c6e698dfc10a64, 0xcde4861843fc0c55, 0x8405599837e8f1ba, 0x6bc5d1ef32995af2, 0x22240e6f468da71d, 0xf8066eefdab0a12c, 0xb1e7b16faea45cc3, 0x789b89bdba5d3e25, 0x317a563dce49c3ca, 0xeb5836bd5274c5fb, 0xa2b9e93d26603814, 0x9af2c294462326b8, 0xd3131d143237db57, 0x09317d94ae0add66, 0x40d0a214da1e2089, 0x89ac9ac6cee7426f, 0xc04d4546baf3bf80, 0x1a6f25c626ceb9b1, 0x538efa4652da445e, 0xbc4e723157abef16, 0xf5afadb123bf12f9, 0x2f8dcd31bf8214c8, 0x666c12b1cb96e927, 0xaf102a63df6f8bc1, 0xe6f1f5e3ab7b762e, 0x3cd395633746701f, 0x75324ae343528df0, 0xd78ba3de6532b5e4, 0x9e6a7c5e1126480b, 0x44481cde8d1b4e3a, 0x0da9c35ef90fb3d5, 0xc4d5fb8cedf6d133, 0x8d34240c99e22cdc, 0x5716448c05df2aed, 0x1ef79b0c71cbd702, 0xf137137b74ba7c4a, 0xb8d6ccfb00ae81a5, 0x62f4ac7b9c938794, 0x2b1573fbe8877a7b, 0xe2694b29fc7e189d, 0xab8894a9886ae572, 0x71aaf4291457e343, 0x384b2ba960431eac, 0x013ca37bd4d1de1b, 0x48dd7cfba0c523f4, 0x92ff1c7b3cf825c5, 0xdb1ec3fb48ecd82a, 0x1262fb295c15bacc, 0x5b8324a928014723, 0x81a14429b43c4112, 0xc8409ba9c028bcfd, 0x278013dec55917b5, 0x6e61cc5eb14dea5a, 0xb443acde2d70ec6b, 0xfda2735e59641184, 0x34de4b8c4d9d7362, 0x7d3f940c39898e8d, 0xa71df48ca5b488bc, 0xeefc2b0cd1a07553, 0x4c45c231f7c04d47, 0x05a41db183d4b0a8, 0xdf867d311fe9b699, 0x9667a2b16bfd4b76, 0x5f1b9a637f042990, 0x16fa45e30b10d47f, 0xccd82563972dd24e, 0x8539fae3e3392fa1, 0x6af97294e64884e9, 0x2318ad14925c7906, 0xf93acd940e617f37, 0xb0db12147a7582d8, 0x79a72ac66e8ce03e, 0x3046f5461a981dd1, 0xea6495c686a51be0, 0xa3854a46f2b1e60f, 0x9bce61ef92f2f8a3, 0xd22fbe6fe6e6054c, 0x080ddeef7adb037d, 0x41ec016f0ecffe92, 0x889039bd1a369c74, 0xc171e63d6e22619b, 0x1b5386bdf21f67aa, 0x52b2593d860b9a45, 0xbd72d14a837a310d, 0xf4930ecaf76ecce2, 0x2eb16e4a6b53cad3, 0x6750b1ca1f47373c, 0xae2c89180bbe55da, 0xe7cd56987faaa835, 0x3def3618e397ae04, 0x740ee998978353eb, 0xd6b700a5b1e36bff, 0x9f56df25c5f79610, 0x4574bfa559ca9021, 0x0c9560252dde6dce, 0xc5e958f739270f28, 0x8c0887774d33f2c7, 0x562ae7f7d10ef4f6, 0x1fcb3877a51a0919, 0xf00bb000a06ba251, 0xb9ea6f80d47f5fbe, 0x63c80f004842598f, 0x2a29d0803c56a460, 0xe355e85228afc686, 0xaab437d25cbb3b69, 0x70965752c0863d58, 0x397788d2b492c0b7, 0x027946f7a9a3bc36, 0x4b989977ddb741d9, 0x91baf9f7418a47e8, 0xd85b2677359eba07, 0x11271ea52167d8e1, 0x58c6c1255573250e, 0x82e4a1a5c94e233f, 0xcb057e25bd5aded0, 0x24c5f652b82b7598, 0x6d2429d2cc3f8877, 0xb706495250028e46, 0xfee796d2241673a9, 0x379bae0030ef114f, 0x7e7a718044fbeca0, 0xa4581100d8c6ea91, 0xedb9ce80acd2177e, 0x4f0027bd8ab22f6a, 0x06e1f83dfea6d285, 0xdcc398bd629bd4b4, 0x9522473d168f295b, 0x5c5e7fef02764bbd, 0x15bfa06f7662b652, 0xcf9dc0efea5fb063, 0x867c1f6f9e4b4d8c, 0x69bc97189b3ae6c4, 0x205d4898ef2e1b2b, 0xfa7f281873131d1a, 0xb39ef7980707e0f5, 0x7ae2cf4a13fe8213, 0x330310ca67ea7ffc, 0xe921704afbd779cd, 0xa0c0afca8fc38422, 0x988b8463ef809a8e, 0xd16a5be39b946761, 0x0b483b6307a96150, 0x42a9e4e373bd9cbf, 0x8bd5dc316744fe59, 0xc23403b1135003b6, 0x181663318f6d0587, 0x51f7bcb1fb79f868, 0xbe3734c6fe085320, 0xf7d6eb468a1caecf, 0x2df48bc61621a8fe, 0x6415544662355511, 0xad696c9476cc37f7, 0xe488b31402d8ca18, 0x3eaad3949ee5cc29, 0x774b0c14eaf131c6, 0xd5f2e529cc9109d2, 0x9c133aa9b885f43d, 0x46315a2924b8f20c, 0x0fd085a950ac0fe3, 0xc6acbd7b44556d05, 0x8f4d62fb304190ea, 0x556f027bac7c96db, 0x1c8eddfbd8686b34, 0xf34e558cdd19c07c, 0xbaaf8a0ca90d3d93, 0x608dea8c35303ba2, 0x296c350c4124c64d, 0xe0100dde55dda4ab, 0xa9f1d25e21c95944, 0x73d3b2debdf45f75, 0x3a326d5ec9e0a29a, 0x0345e58c7d72622d, 0x4aa43a0c09669fc2, 0x90865a8c955b99f3, 0xd967850ce14f641c, 0x101bbddef5b606fa, 0x59fa625e81a2fb15, 0x83d802de1d9ffd24, 0xca39dd5e698b00cb, 0x25f955296cfaab83, 0x6c188aa918ee566c, 0xb63aea2984d3505d, 0xffdb35a9f0c7adb2, 0x36a70d7be43ecf54, 0x7f46d2fb902a32bb, 0xa564b27b0c17348a, 0xec856dfb7803c965, 0x4e3c84c65e63f171, 0x07dd5b462a770c9e, 0xddff3bc6b64a0aaf, 0x941ee446c25ef740, 0x5d62dc94d6a795a6, 0x14830314a2b36849, 0xcea163943e8e6e78, 0x8740bc144a9a9397, 0x688034634feb38df, 0x2161ebe33bffc530, 0xfb438b63a7c2c301, 0xb2a254e3d3d63eee, 0x7bde6c31c72f5c08, 0x323fb3b1b33ba1e7, 0xe81dd3312f06a7d6, 0xa1fc0cb15b125a39, 0x99b727183b514495, 0xd056f8984f45b97a, 0x0a749818d378bf4b, 0x43954798a76c42a4, 0x8ae97f4ab3952042, 0xc308a0cac781ddad, 0x192ac04a5bbcdb9c, 0x50cb1fca2fa82673, 0xbf0b97bd2ad98d3b, 0xf6ea483d5ecd70d4, 0x2cc828bdc2f076e5, 0x6529f73db6e48b0a, 0xac55cfefa21de9ec, 0xe5b4106fd6091403, 0x3f9670ef4a341232, 0x7677af6f3e20efdd, 0xd4ce46521840d7c9, 0x9d2f99d26c542a26, 0x470df952f0692c17, 0x0eec26d2847dd1f8, 0xc7901e009084b31e, 0x8e71c180e4904ef1, 0x5453a10078ad48c0, 0x1db27e800cb9b52f, 0xf272f6f709c81e67, 0xbb9329777ddce388, 0x61b149f7e1e1e5b9, 0x2850967795f51856, 0xe12caea5810c7ab0, 0xa8cd7125f518875f, 0x72ef11a56925816e, 0x3b0ece251d317c81, ], [ 0x0000000000000000, 0x52734ea3e726fc54, 0xa4e69d47ce4df8a8, 0xf695d3e4296b04fc, 0x7d141cdcc40c623b, 0x2f67527f232a9e6f, 0xd9f2819b0a419a93, 0x8b81cf38ed6766c7, 0xfa2839b98818c476, 0xa85b771a6f3e3822, 0x5ecea4fe46553cde, 0x0cbdea5da173c08a, 0x873c25654c14a64d, 0xd54f6bc6ab325a19, 0x23dab82282595ee5, 0x71a9f681657fa2b1, 0xc089552048a61b87, 0x92fa1b83af80e7d3, 0x646fc86786ebe32f, 0x361c86c461cd1f7b, 0xbd9d49fc8caa79bc, 0xefee075f6b8c85e8, 0x197bd4bb42e78114, 0x4b089a18a5c17d40, 0x3aa16c99c0bedff1, 0x68d2223a279823a5, 0x9e47f1de0ef32759, 0xcc34bf7de9d5db0d, 0x47b5704504b2bdca, 0x15c63ee6e394419e, 0xe353ed02caff4562, 0xb120a3a12dd9b936, 0xb5cb8c13c9dba465, 0xe7b8c2b02efd5831, 0x112d115407965ccd, 0x435e5ff7e0b0a099, 0xc8df90cf0dd7c65e, 0x9aacde6ceaf13a0a, 0x6c390d88c39a3ef6, 0x3e4a432b24bcc2a2, 0x4fe3b5aa41c36013, 0x1d90fb09a6e59c47, 0xeb0528ed8f8e98bb, 0xb976664e68a864ef, 0x32f7a97685cf0228, 0x6084e7d562e9fe7c, 0x961134314b82fa80, 0xc4627a92aca406d4, 0x7542d933817dbfe2, 0x27319790665b43b6, 0xd1a444744f30474a, 0x83d70ad7a816bb1e, 0x0856c5ef4571ddd9, 0x5a258b4ca257218d, 0xacb058a88b3c2571, 0xfec3160b6c1ad925, 0x8f6ae08a09657b94, 0xdd19ae29ee4387c0, 0x2b8c7dcdc728833c, 0x79ff336e200e7f68, 0xf27efc56cd6919af, 0xa00db2f52a4fe5fb, 0x569861110324e107, 0x04eb2fb2e4021d53, 0x5f4e3e74cb20dba1, 0x0d3d70d72c0627f5, 0xfba8a333056d2309, 0xa9dbed90e24bdf5d, 0x225a22a80f2cb99a, 0x70296c0be80a45ce, 0x86bcbfefc1614132, 0xd4cff14c2647bd66, 0xa56607cd43381fd7, 0xf715496ea41ee383, 0x01809a8a8d75e77f, 0x53f3d4296a531b2b, 0xd8721b1187347dec, 0x8a0155b2601281b8, 0x7c94865649798544, 0x2ee7c8f5ae5f7910, 0x9fc76b548386c026, 0xcdb425f764a03c72, 0x3b21f6134dcb388e, 0x6952b8b0aaedc4da, 0xe2d37788478aa21d, 0xb0a0392ba0ac5e49, 0x4635eacf89c75ab5, 0x1446a46c6ee1a6e1, 0x65ef52ed0b9e0450, 0x379c1c4eecb8f804, 0xc109cfaac5d3fcf8, 0x937a810922f500ac, 0x18fb4e31cf92666b, 0x4a88009228b49a3f, 0xbc1dd37601df9ec3, 0xee6e9dd5e6f96297, 0xea85b26702fb7fc4, 0xb8f6fcc4e5dd8390, 0x4e632f20ccb6876c, 0x1c1061832b907b38, 0x9791aebbc6f71dff, 0xc5e2e01821d1e1ab, 0x337733fc08bae557, 0x61047d5fef9c1903, 0x10ad8bde8ae3bbb2, 0x42dec57d6dc547e6, 0xb44b169944ae431a, 0xe638583aa388bf4e, 0x6db997024eefd989, 0x3fcad9a1a9c925dd, 0xc95f0a4580a22121, 0x9b2c44e66784dd75, 0x2a0ce7474a5d6443, 0x787fa9e4ad7b9817, 0x8eea7a0084109ceb, 0xdc9934a3633660bf, 0x5718fb9b8e510678, 0x056bb5386977fa2c, 0xf3fe66dc401cfed0, 0xa18d287fa73a0284, 0xd024defec245a035, 0x8257905d25635c61, 0x74c243b90c08589d, 0x26b10d1aeb2ea4c9, 0xad30c2220649c20e, 0xff438c81e16f3e5a, 0x09d65f65c8043aa6, 0x5ba511c62f22c6f2, 0xbe9c7ce99641b742, 0xecef324a71674b16, 0x1a7ae1ae580c4fea, 0x4809af0dbf2ab3be, 0xc3886035524dd579, 0x91fb2e96b56b292d, 0x676efd729c002dd1, 0x351db3d17b26d185, 0x44b445501e597334, 0x16c70bf3f97f8f60, 0xe052d817d0148b9c, 0xb22196b4373277c8, 0x39a0598cda55110f, 0x6bd3172f3d73ed5b, 0x9d46c4cb1418e9a7, 0xcf358a68f33e15f3, 0x7e1529c9dee7acc5, 0x2c66676a39c15091, 0xdaf3b48e10aa546d, 0x8880fa2df78ca839, 0x030135151aebcefe, 0x51727bb6fdcd32aa, 0xa7e7a852d4a63656, 0xf594e6f13380ca02, 0x843d107056ff68b3, 0xd64e5ed3b1d994e7, 0x20db8d3798b2901b, 0x72a8c3947f946c4f, 0xf9290cac92f30a88, 0xab5a420f75d5f6dc, 0x5dcf91eb5cbef220, 0x0fbcdf48bb980e74, 0x0b57f0fa5f9a1327, 0x5924be59b8bcef73, 0xafb16dbd91d7eb8f, 0xfdc2231e76f117db, 0x7643ec269b96711c, 0x2430a2857cb08d48, 0xd2a5716155db89b4, 0x80d63fc2b2fd75e0, 0xf17fc943d782d751, 0xa30c87e030a42b05, 0x5599540419cf2ff9, 0x07ea1aa7fee9d3ad, 0x8c6bd59f138eb56a, 0xde189b3cf4a8493e, 0x288d48d8ddc34dc2, 0x7afe067b3ae5b196, 0xcbdea5da173c08a0, 0x99adeb79f01af4f4, 0x6f38389dd971f008, 0x3d4b763e3e570c5c, 0xb6cab906d3306a9b, 0xe4b9f7a5341696cf, 0x122c24411d7d9233, 0x405f6ae2fa5b6e67, 0x31f69c639f24ccd6, 0x6385d2c078023082, 0x951001245169347e, 0xc7634f87b64fc82a, 0x4ce280bf5b28aeed, 0x1e91ce1cbc0e52b9, 0xe8041df895655645, 0xba77535b7243aa11, 0xe1d2429d5d616ce3, 0xb3a10c3eba4790b7, 0x4534dfda932c944b, 0x17479179740a681f, 0x9cc65e41996d0ed8, 0xceb510e27e4bf28c, 0x3820c3065720f670, 0x6a538da5b0060a24, 0x1bfa7b24d579a895, 0x49893587325f54c1, 0xbf1ce6631b34503d, 0xed6fa8c0fc12ac69, 0x66ee67f81175caae, 0x349d295bf65336fa, 0xc208fabfdf383206, 0x907bb41c381ece52, 0x215b17bd15c77764, 0x7328591ef2e18b30, 0x85bd8afadb8a8fcc, 0xd7cec4593cac7398, 0x5c4f0b61d1cb155f, 0x0e3c45c236ede90b, 0xf8a996261f86edf7, 0xaadad885f8a011a3, 0xdb732e049ddfb312, 0x890060a77af94f46, 0x7f95b34353924bba, 0x2de6fde0b4b4b7ee, 0xa66732d859d3d129, 0xf4147c7bbef52d7d, 0x0281af9f979e2981, 0x50f2e13c70b8d5d5, 0x5419ce8e94bac886, 0x066a802d739c34d2, 0xf0ff53c95af7302e, 0xa28c1d6abdd1cc7a, 0x290dd25250b6aabd, 0x7b7e9cf1b79056e9, 0x8deb4f159efb5215, 0xdf9801b679ddae41, 0xae31f7371ca20cf0, 0xfc42b994fb84f0a4, 0x0ad76a70d2eff458, 0x58a424d335c9080c, 0xd325ebebd8ae6ecb, 0x8156a5483f88929f, 0x77c376ac16e39663, 0x25b0380ff1c56a37, 0x94909baedc1cd301, 0xc6e3d50d3b3a2f55, 0x307606e912512ba9, 0x6205484af577d7fd, 0xe98487721810b13a, 0xbbf7c9d1ff364d6e, 0x4d621a35d65d4992, 0x1f115496317bb5c6, 0x6eb8a21754041777, 0x3ccbecb4b322eb23, 0xca5e3f509a49efdf, 0x982d71f37d6f138b, 0x13acbecb9008754c, 0x41dff068772e8918, 0xb74a238c5e458de4, 0xe5396d2fb96371b0, ], [ 0x0000000000000000, 0x668ab3bbc976d29d, 0xcd15677792eda53a, 0xab9fd4cc5b9b77a7, 0xaef3e8bc7d4cd91f, 0xc8795b07b43a0b82, 0x63e68fcbefa17c25, 0x056c3c7026d7aeb8, 0x693ef72ba20e2155, 0x0fb444906b78f3c8, 0xa42b905c30e3846f, 0xc2a123e7f99556f2, 0xc7cd1f97df42f84a, 0xa147ac2c16342ad7, 0x0ad878e04daf5d70, 0x6c52cb5b84d98fed, 0xd27dee57441c42aa, 0xb4f75dec8d6a9037, 0x1f688920d6f1e790, 0x79e23a9b1f87350d, 0x7c8e06eb39509bb5, 0x1a04b550f0264928, 0xb19b619cabbd3e8f, 0xd711d22762cbec12, 0xbb43197ce61263ff, 0xddc9aac72f64b162, 0x76567e0b74ffc6c5, 0x10dccdb0bd891458, 0x15b0f1c09b5ebae0, 0x733a427b5228687d, 0xd8a596b709b31fda, 0xbe2f250cc0c5cd47, 0x9022fafdd0af163f, 0xf6a8494619d9c4a2, 0x5d379d8a4242b305, 0x3bbd2e318b346198, 0x3ed11241ade3cf20, 0x585ba1fa64951dbd, 0xf3c475363f0e6a1a, 0x954ec68df678b887, 0xf91c0dd672a1376a, 0x9f96be6dbbd7e5f7, 0x34096aa1e04c9250, 0x5283d91a293a40cd, 0x57efe56a0fedee75, 0x316556d1c69b3ce8, 0x9afa821d9d004b4f, 0xfc7031a6547699d2, 0x425f14aa94b35495, 0x24d5a7115dc58608, 0x8f4a73dd065ef1af, 0xe9c0c066cf282332, 0xecacfc16e9ff8d8a, 0x8a264fad20895f17, 0x21b99b617b1228b0, 0x473328dab264fa2d, 0x2b61e38136bd75c0, 0x4deb503affcba75d, 0xe67484f6a450d0fa, 0x80fe374d6d260267, 0x85920b3d4bf1acdf, 0xe318b88682877e42, 0x48876c4ad91c09e5, 0x2e0ddff1106adb78, 0x149cd3a8f9c9bf15, 0x7216601330bf6d88, 0xd989b4df6b241a2f, 0xbf030764a252c8b2, 0xba6f3b148485660a, 0xdce588af4df3b497, 0x777a5c631668c330, 0x11f0efd8df1e11ad, 0x7da224835bc79e40, 0x1b28973892b14cdd, 0xb0b743f4c92a3b7a, 0xd63df04f005ce9e7, 0xd351cc3f268b475f, 0xb5db7f84effd95c2, 0x1e44ab48b466e265, 0x78ce18f37d1030f8, 0xc6e13dffbdd5fdbf, 0xa06b8e4474a32f22, 0x0bf45a882f385885, 0x6d7ee933e64e8a18, 0x6812d543c09924a0, 0x0e9866f809eff63d, 0xa507b2345274819a, 0xc38d018f9b025307, 0xafdfcad41fdbdcea, 0xc955796fd6ad0e77, 0x62caada38d3679d0, 0x04401e184440ab4d, 0x012c2268629705f5, 0x67a691d3abe1d768, 0xcc39451ff07aa0cf, 0xaab3f6a4390c7252, 0x84be29552966a92a, 0xe2349aeee0107bb7, 0x49ab4e22bb8b0c10, 0x2f21fd9972fdde8d, 0x2a4dc1e9542a7035, 0x4cc772529d5ca2a8, 0xe758a69ec6c7d50f, 0x81d215250fb10792, 0xed80de7e8b68887f, 0x8b0a6dc5421e5ae2, 0x2095b90919852d45, 0x461f0ab2d0f3ffd8, 0x437336c2f6245160, 0x25f985793f5283fd, 0x8e6651b564c9f45a, 0xe8ece20eadbf26c7, 0x56c3c7026d7aeb80, 0x304974b9a40c391d, 0x9bd6a075ff974eba, 0xfd5c13ce36e19c27, 0xf8302fbe1036329f, 0x9eba9c05d940e002, 0x352548c982db97a5, 0x53affb724bad4538, 0x3ffd3029cf74cad5, 0x5977839206021848, 0xf2e8575e5d996fef, 0x9462e4e594efbd72, 0x910ed895b23813ca, 0xf7846b2e7b4ec157, 0x5c1bbfe220d5b6f0, 0x3a910c59e9a3646d, 0x2939a751f3937e2a, 0x4fb314ea3ae5acb7, 0xe42cc026617edb10, 0x82a6739da808098d, 0x87ca4fed8edfa735, 0xe140fc5647a975a8, 0x4adf289a1c32020f, 0x2c559b21d544d092, 0x4007507a519d5f7f, 0x268de3c198eb8de2, 0x8d12370dc370fa45, 0xeb9884b60a0628d8, 0xeef4b8c62cd18660, 0x887e0b7de5a754fd, 0x23e1dfb1be3c235a, 0x456b6c0a774af1c7, 0xfb444906b78f3c80, 0x9dcefabd7ef9ee1d, 0x36512e71256299ba, 0x50db9dcaec144b27, 0x55b7a1bacac3e59f, 0x333d120103b53702, 0x98a2c6cd582e40a5, 0xfe28757691589238, 0x927abe2d15811dd5, 0xf4f00d96dcf7cf48, 0x5f6fd95a876cb8ef, 0x39e56ae14e1a6a72, 0x3c89569168cdc4ca, 0x5a03e52aa1bb1657, 0xf19c31e6fa2061f0, 0x9716825d3356b36d, 0xb91b5dac233c6815, 0xdf91ee17ea4aba88, 0x740e3adbb1d1cd2f, 0x1284896078a71fb2, 0x17e8b5105e70b10a, 0x716206ab97066397, 0xdafdd267cc9d1430, 0xbc7761dc05ebc6ad, 0xd025aa8781324940, 0xb6af193c48449bdd, 0x1d30cdf013dfec7a, 0x7bba7e4bdaa93ee7, 0x7ed6423bfc7e905f, 0x185cf180350842c2, 0xb3c3254c6e933565, 0xd54996f7a7e5e7f8, 0x6b66b3fb67202abf, 0x0dec0040ae56f822, 0xa673d48cf5cd8f85, 0xc0f967373cbb5d18, 0xc5955b471a6cf3a0, 0xa31fe8fcd31a213d, 0x08803c308881569a, 0x6e0a8f8b41f78407, 0x025844d0c52e0bea, 0x64d2f76b0c58d977, 0xcf4d23a757c3aed0, 0xa9c7901c9eb57c4d, 0xacabac6cb862d2f5, 0xca211fd771140068, 0x61becb1b2a8f77cf, 0x073478a0e3f9a552, 0x3da574f90a5ac13f, 0x5b2fc742c32c13a2, 0xf0b0138e98b76405, 0x963aa03551c1b698, 0x93569c4577161820, 0xf5dc2ffebe60cabd, 0x5e43fb32e5fbbd1a, 0x38c948892c8d6f87, 0x549b83d2a854e06a, 0x32113069612232f7, 0x998ee4a53ab94550, 0xff04571ef3cf97cd, 0xfa686b6ed5183975, 0x9ce2d8d51c6eebe8, 0x377d0c1947f59c4f, 0x51f7bfa28e834ed2, 0xefd89aae4e468395, 0x8952291587305108, 0x22cdfdd9dcab26af, 0x44474e6215ddf432, 0x412b7212330a5a8a, 0x27a1c1a9fa7c8817, 0x8c3e1565a1e7ffb0, 0xeab4a6de68912d2d, 0x86e66d85ec48a2c0, 0xe06cde3e253e705d, 0x4bf30af27ea507fa, 0x2d79b949b7d3d567, 0x2815853991047bdf, 0x4e9f36825872a942, 0xe500e24e03e9dee5, 0x838a51f5ca9f0c78, 0xad878e04daf5d700, 0xcb0d3dbf1383059d, 0x6092e9734818723a, 0x06185ac8816ea0a7, 0x037466b8a7b90e1f, 0x65fed5036ecfdc82, 0xce6101cf3554ab25, 0xa8ebb274fc2279b8, 0xc4b9792f78fbf655, 0xa233ca94b18d24c8, 0x09ac1e58ea16536f, 0x6f26ade3236081f2, 0x6a4a919305b72f4a, 0x0cc02228ccc1fdd7, 0xa75ff6e4975a8a70, 0xc1d5455f5e2c58ed, 0x7ffa60539ee995aa, 0x1970d3e8579f4737, 0xb2ef07240c043090, 0xd465b49fc572e20d, 0xd10988efe3a54cb5, 0xb7833b542ad39e28, 0x1c1cef987148e98f, 0x7a965c23b83e3b12, 0x16c497783ce7b4ff, 0x704e24c3f5916662, 0xdbd1f00fae0a11c5, 0xbd5b43b4677cc358, 0xb8377fc441ab6de0, 0xdebdcc7f88ddbf7d, 0x752218b3d346c8da, 0x13a8ab081a301a47, ], [ 0x0000000000000000, 0xf2fa1fae5f5c1165, 0xd12d190fe62fb1a1, 0x23d706a1b973a0c4, 0x9683144c94c8f029, 0x64790be2cb94e14c, 0x47ae0d4372e74188, 0xb55412ed2dbb50ed, 0x19df0eca71067339, 0xeb2511642e5a625c, 0xc8f217c59729c298, 0x3a08086bc875d3fd, 0x8f5c1a86e5ce8310, 0x7da60528ba929275, 0x5e71038903e132b1, 0xac8b1c275cbd23d4, 0x33be1d94e20ce672, 0xc144023abd50f717, 0xe293049b042357d3, 0x10691b355b7f46b6, 0xa53d09d876c4165b, 0x57c716762998073e, 0x741010d790eba7fa, 0x86ea0f79cfb7b69f, 0x2a61135e930a954b, 0xd89b0cf0cc56842e, 0xfb4c0a51752524ea, 0x09b615ff2a79358f, 0xbce2071207c26562, 0x4e1818bc589e7407, 0x6dcf1e1de1edd4c3, 0x9f3501b3beb1c5a6, 0x677c3b29c419cce4, 0x958624879b45dd81, 0xb651222622367d45, 0x44ab3d887d6a6c20, 0xf1ff2f6550d13ccd, 0x030530cb0f8d2da8, 0x20d2366ab6fe8d6c, 0xd22829c4e9a29c09, 0x7ea335e3b51fbfdd, 0x8c592a4dea43aeb8, 0xaf8e2cec53300e7c, 0x5d7433420c6c1f19, 0xe82021af21d74ff4, 0x1ada3e017e8b5e91, 0x390d38a0c7f8fe55, 0xcbf7270e98a4ef30, 0x54c226bd26152a96, 0xa638391379493bf3, 0x85ef3fb2c03a9b37, 0x7715201c9f668a52, 0xc24132f1b2dddabf, 0x30bb2d5fed81cbda, 0x136c2bfe54f26b1e, 0xe19634500bae7a7b, 0x4d1d2877571359af, 0xbfe737d9084f48ca, 0x9c303178b13ce80e, 0x6eca2ed6ee60f96b, 0xdb9e3c3bc3dba986, 0x296423959c87b8e3, 0x0ab3253425f41827, 0xf8493a9a7aa80942, 0xcef87653883399c8, 0x3c0269fdd76f88ad, 0x1fd56f5c6e1c2869, 0xed2f70f23140390c, 0x587b621f1cfb69e1, 0xaa817db143a77884, 0x89567b10fad4d840, 0x7bac64bea588c925, 0xd7277899f935eaf1, 0x25dd6737a669fb94, 0x060a61961f1a5b50, 0xf4f07e3840464a35, 0x41a46cd56dfd1ad8, 0xb35e737b32a10bbd, 0x908975da8bd2ab79, 0x62736a74d48eba1c, 0xfd466bc76a3f7fba, 0x0fbc746935636edf, 0x2c6b72c88c10ce1b, 0xde916d66d34cdf7e, 0x6bc57f8bfef78f93, 0x993f6025a1ab9ef6, 0xbae8668418d83e32, 0x4812792a47842f57, 0xe499650d1b390c83, 0x16637aa344651de6, 0x35b47c02fd16bd22, 0xc74e63aca24aac47, 0x721a71418ff1fcaa, 0x80e06eefd0adedcf, 0xa337684e69de4d0b, 0x51cd77e036825c6e, 0xa9844d7a4c2a552c, 0x5b7e52d413764449, 0x78a95475aa05e48d, 0x8a534bdbf559f5e8, 0x3f075936d8e2a505, 0xcdfd469887beb460, 0xee2a40393ecd14a4, 0x1cd05f97619105c1, 0xb05b43b03d2c2615, 0x42a15c1e62703770, 0x61765abfdb0397b4, 0x938c4511845f86d1, 0x26d857fca9e4d63c, 0xd4224852f6b8c759, 0xf7f54ef34fcb679d, 0x050f515d109776f8, 0x9a3a50eeae26b35e, 0x68c04f40f17aa23b, 0x4b1749e1480902ff, 0xb9ed564f1755139a, 0x0cb944a23aee4377, 0xfe435b0c65b25212, 0xdd945daddcc1f2d6, 0x2f6e4203839de3b3, 0x83e55e24df20c067, 0x711f418a807cd102, 0x52c8472b390f71c6, 0xa0325885665360a3, 0x15664a684be8304e, 0xe79c55c614b4212b, 0xc44b5367adc781ef, 0x36b14cc9f29b908a, 0xa929caf448f0a0fb, 0x5bd3d55a17acb19e, 0x7804d3fbaedf115a, 0x8afecc55f183003f, 0x3faadeb8dc3850d2, 0xcd50c116836441b7, 0xee87c7b73a17e173, 0x1c7dd819654bf016, 0xb0f6c43e39f6d3c2, 0x420cdb9066aac2a7, 0x61dbdd31dfd96263, 0x9321c29f80857306, 0x2675d072ad3e23eb, 0xd48fcfdcf262328e, 0xf758c97d4b11924a, 0x05a2d6d3144d832f, 0x9a97d760aafc4689, 0x686dc8cef5a057ec, 0x4bbace6f4cd3f728, 0xb940d1c1138fe64d, 0x0c14c32c3e34b6a0, 0xfeeedc826168a7c5, 0xdd39da23d81b0701, 0x2fc3c58d87471664, 0x8348d9aadbfa35b0, 0x71b2c60484a624d5, 0x5265c0a53dd58411, 0xa09fdf0b62899574, 0x15cbcde64f32c599, 0xe731d248106ed4fc, 0xc4e6d4e9a91d7438, 0x361ccb47f641655d, 0xce55f1dd8ce96c1f, 0x3cafee73d3b57d7a, 0x1f78e8d26ac6ddbe, 0xed82f77c359accdb, 0x58d6e59118219c36, 0xaa2cfa3f477d8d53, 0x89fbfc9efe0e2d97, 0x7b01e330a1523cf2, 0xd78aff17fdef1f26, 0x2570e0b9a2b30e43, 0x06a7e6181bc0ae87, 0xf45df9b6449cbfe2, 0x4109eb5b6927ef0f, 0xb3f3f4f5367bfe6a, 0x9024f2548f085eae, 0x62deedfad0544fcb, 0xfdebec496ee58a6d, 0x0f11f3e731b99b08, 0x2cc6f54688ca3bcc, 0xde3ceae8d7962aa9, 0x6b68f805fa2d7a44, 0x9992e7aba5716b21, 0xba45e10a1c02cbe5, 0x48bffea4435eda80, 0xe434e2831fe3f954, 0x16cefd2d40bfe831, 0x3519fb8cf9cc48f5, 0xc7e3e422a6905990, 0x72b7f6cf8b2b097d, 0x804de961d4771818, 0xa39aefc06d04b8dc, 0x5160f06e3258a9b9, 0x67d1bca7c0c33933, 0x952ba3099f9f2856, 0xb6fca5a826ec8892, 0x4406ba0679b099f7, 0xf152a8eb540bc91a, 0x03a8b7450b57d87f, 0x207fb1e4b22478bb, 0xd285ae4aed7869de, 0x7e0eb26db1c54a0a, 0x8cf4adc3ee995b6f, 0xaf23ab6257eafbab, 0x5dd9b4cc08b6eace, 0xe88da621250dba23, 0x1a77b98f7a51ab46, 0x39a0bf2ec3220b82, 0xcb5aa0809c7e1ae7, 0x546fa13322cfdf41, 0xa695be9d7d93ce24, 0x8542b83cc4e06ee0, 0x77b8a7929bbc7f85, 0xc2ecb57fb6072f68, 0x3016aad1e95b3e0d, 0x13c1ac7050289ec9, 0xe13bb3de0f748fac, 0x4db0aff953c9ac78, 0xbf4ab0570c95bd1d, 0x9c9db6f6b5e61dd9, 0x6e67a958eaba0cbc, 0xdb33bbb5c7015c51, 0x29c9a41b985d4d34, 0x0a1ea2ba212eedf0, 0xf8e4bd147e72fc95, 0x00ad878e04daf5d7, 0xf25798205b86e4b2, 0xd1809e81e2f54476, 0x237a812fbda95513, 0x962e93c2901205fe, 0x64d48c6ccf4e149b, 0x47038acd763db45f, 0xb5f995632961a53a, 0x1972894475dc86ee, 0xeb8896ea2a80978b, 0xc85f904b93f3374f, 0x3aa58fe5ccaf262a, 0x8ff19d08e11476c7, 0x7d0b82a6be4867a2, 0x5edc8407073bc766, 0xac269ba95867d603, 0x33139a1ae6d613a5, 0xc1e985b4b98a02c0, 0xe23e831500f9a204, 0x10c49cbb5fa5b361, 0xa5908e56721ee38c, 0x576a91f82d42f2e9, 0x74bd97599431522d, 0x864788f7cb6d4348, 0x2acc94d097d0609c, 0xd8368b7ec88c71f9, 0xfbe18ddf71ffd13d, 0x091b92712ea3c058, 0xbc4f809c031890b5, 0x4eb59f325c4481d0, 0x6d629993e5372114, 0x9f98863dba6b3071, ], [ 0x0000000000000000, 0x9065cb6e6d39918a, 0x1412b08f82e4b07f, 0x84777be1efdd21f5, 0x2825611f05c960fe, 0xb840aa7168f0f174, 0x3c37d190872dd081, 0xac521afeea14410b, 0x504ac23e0b92c1fc, 0xc02f095066ab5076, 0x445872b189767183, 0xd43db9dfe44fe009, 0x786fa3210e5ba102, 0xe80a684f63623088, 0x6c7d13ae8cbf117d, 0xfc18d8c0e18680f7, 0xa095847c172583f8, 0x30f04f127a1c1272, 0xb48734f395c13387, 0x24e2ff9df8f8a20d, 0x88b0e56312ece306, 0x18d52e0d7fd5728c, 0x9ca255ec90085379, 0x0cc79e82fd31c2f3, 0xf0df46421cb74204, 0x60ba8d2c718ed38e, 0xe4cdf6cd9e53f27b, 0x74a83da3f36a63f1, 0xd8fa275d197e22fa, 0x489fec337447b370, 0xcce897d29b9a9285, 0x5c8d5cbcf6a3030f, 0x75f22eab76dc949b, 0xe597e5c51be50511, 0x61e09e24f43824e4, 0xf185554a9901b56e, 0x5dd74fb47315f465, 0xcdb284da1e2c65ef, 0x49c5ff3bf1f1441a, 0xd9a034559cc8d590, 0x25b8ec957d4e5567, 0xb5dd27fb1077c4ed, 0x31aa5c1affaae518, 0xa1cf977492937492, 0x0d9d8d8a78873599, 0x9df846e415bea413, 0x198f3d05fa6385e6, 0x89eaf66b975a146c, 0xd567aad761f91763, 0x450261b90cc086e9, 0xc1751a58e31da71c, 0x5110d1368e243696, 0xfd42cbc86430779d, 0x6d2700a60909e617, 0xe9507b47e6d4c7e2, 0x7935b0298bed5668, 0x852d68e96a6bd69f, 0x1548a38707524715, 0x913fd866e88f66e0, 0x015a130885b6f76a, 0xad0809f66fa2b661, 0x3d6dc298029b27eb, 0xb91ab979ed46061e, 0x297f7217807f9794, 0xebe45d56edb92936, 0x7b8196388080b8bc, 0xfff6edd96f5d9949, 0x6f9326b7026408c3, 0xc3c13c49e87049c8, 0x53a4f7278549d842, 0xd7d38cc66a94f9b7, 0x47b647a807ad683d, 0xbbae9f68e62be8ca, 0x2bcb54068b127940, 0xafbc2fe764cf58b5, 0x3fd9e48909f6c93f, 0x938bfe77e3e28834, 0x03ee35198edb19be, 0x87994ef86106384b, 0x17fc85960c3fa9c1, 0x4b71d92afa9caace, 0xdb14124497a53b44, 0x5f6369a578781ab1, 0xcf06a2cb15418b3b, 0x6354b835ff55ca30, 0xf331735b926c5bba, 0x774608ba7db17a4f, 0xe723c3d41088ebc5, 0x1b3b1b14f10e6b32, 0x8b5ed07a9c37fab8, 0x0f29ab9b73eadb4d, 0x9f4c60f51ed34ac7, 0x331e7a0bf4c70bcc, 0xa37bb16599fe9a46, 0x270cca847623bbb3, 0xb76901ea1b1a2a39, 0x9e1673fd9b65bdad, 0x0e73b893f65c2c27, 0x8a04c37219810dd2, 0x1a61081c74b89c58, 0xb63312e29eacdd53, 0x2656d98cf3954cd9, 0xa221a26d1c486d2c, 0x324469037171fca6, 0xce5cb1c390f77c51, 0x5e397aadfdceeddb, 0xda4e014c1213cc2e, 0x4a2bca227f2a5da4, 0xe679d0dc953e1caf, 0x761c1bb2f8078d25, 0xf26b605317daacd0, 0x620eab3d7ae33d5a, 0x3e83f7818c403e55, 0xaee63cefe179afdf, 0x2a91470e0ea48e2a, 0xbaf48c60639d1fa0, 0x16a6969e89895eab, 0x86c35df0e4b0cf21, 0x02b426110b6deed4, 0x92d1ed7f66547f5e, 0x6ec935bf87d2ffa9, 0xfeacfed1eaeb6e23, 0x7adb853005364fd6, 0xeabe4e5e680fde5c, 0x46ec54a0821b9f57, 0xd6899fceef220edd, 0x52fee42f00ff2f28, 0xc29b2f416dc6bea2, 0xe3119cfe83e5c107, 0x73745790eedc508d, 0xf7032c7101017178, 0x6766e71f6c38e0f2, 0xcb34fde1862ca1f9, 0x5b51368feb153073, 0xdf264d6e04c81186, 0x4f43860069f1800c, 0xb35b5ec0887700fb, 0x233e95aee54e9171, 0xa749ee4f0a93b084, 0x372c252167aa210e, 0x9b7e3fdf8dbe6005, 0x0b1bf4b1e087f18f, 0x8f6c8f500f5ad07a, 0x1f09443e626341f0, 0x4384188294c042ff, 0xd3e1d3ecf9f9d375, 0x5796a80d1624f280, 0xc7f363637b1d630a, 0x6ba1799d91092201, 0xfbc4b2f3fc30b38b, 0x7fb3c91213ed927e, 0xefd6027c7ed403f4, 0x13cedabc9f528303, 0x83ab11d2f26b1289, 0x07dc6a331db6337c, 0x97b9a15d708fa2f6, 0x3bebbba39a9be3fd, 0xab8e70cdf7a27277, 0x2ff90b2c187f5382, 0xbf9cc0427546c208, 0x96e3b255f539559c, 0x0686793b9800c416, 0x82f102da77dde5e3, 0x1294c9b41ae47469, 0xbec6d34af0f03562, 0x2ea318249dc9a4e8, 0xaad463c57214851d, 0x3ab1a8ab1f2d1497, 0xc6a9706bfeab9460, 0x56ccbb05939205ea, 0xd2bbc0e47c4f241f, 0x42de0b8a1176b595, 0xee8c1174fb62f49e, 0x7ee9da1a965b6514, 0xfa9ea1fb798644e1, 0x6afb6a9514bfd56b, 0x36763629e21cd664, 0xa613fd478f2547ee, 0x226486a660f8661b, 0xb2014dc80dc1f791, 0x1e535736e7d5b69a, 0x8e369c588aec2710, 0x0a41e7b9653106e5, 0x9a242cd70808976f, 0x663cf417e98e1798, 0xf6593f7984b78612, 0x722e44986b6aa7e7, 0xe24b8ff60653366d, 0x4e199508ec477766, 0xde7c5e66817ee6ec, 0x5a0b25876ea3c719, 0xca6eeee9039a5693, 0x08f5c1a86e5ce831, 0x98900ac6036579bb, 0x1ce77127ecb8584e, 0x8c82ba498181c9c4, 0x20d0a0b76b9588cf, 0xb0b56bd906ac1945, 0x34c21038e97138b0, 0xa4a7db568448a93a, 0x58bf039665ce29cd, 0xc8dac8f808f7b847, 0x4cadb319e72a99b2, 0xdcc878778a130838, 0x709a628960074933, 0xe0ffa9e70d3ed8b9, 0x6488d206e2e3f94c, 0xf4ed19688fda68c6, 0xa86045d479796bc9, 0x38058eba1440fa43, 0xbc72f55bfb9ddbb6, 0x2c173e3596a44a3c, 0x804524cb7cb00b37, 0x1020efa511899abd, 0x94579444fe54bb48, 0x04325f2a936d2ac2, 0xf82a87ea72ebaa35, 0x684f4c841fd23bbf, 0xec383765f00f1a4a, 0x7c5dfc0b9d368bc0, 0xd00fe6f57722cacb, 0x406a2d9b1a1b5b41, 0xc41d567af5c67ab4, 0x54789d1498ffeb3e, 0x7d07ef0318807caa, 0xed62246d75b9ed20, 0x69155f8c9a64ccd5, 0xf97094e2f75d5d5f, 0x55228e1c1d491c54, 0xc547457270708dde, 0x41303e939fadac2b, 0xd155f5fdf2943da1, 0x2d4d2d3d1312bd56, 0xbd28e6537e2b2cdc, 0x395f9db291f60d29, 0xa93a56dcfccf9ca3, 0x05684c2216dbdda8, 0x950d874c7be24c22, 0x117afcad943f6dd7, 0x811f37c3f906fc5d, 0xdd926b7f0fa5ff52, 0x4df7a011629c6ed8, 0xc980dbf08d414f2d, 0x59e5109ee078dea7, 0xf5b70a600a6c9fac, 0x65d2c10e67550e26, 0xe1a5baef88882fd3, 0x71c07181e5b1be59, 0x8dd8a94104373eae, 0x1dbd622f690eaf24, 0x99ca19ce86d38ed1, 0x09afd2a0ebea1f5b, 0xa5fdc85e01fe5e50, 0x359803306cc7cfda, 0xb1ef78d1831aee2f, 0x218ab3bfee237fa5, ], [ 0x0000000000000000, 0xc23dfbc6ca591ca3, 0xb0a2d1decc25aa2d, 0x729f2a18067cb68e, 0x559c85eec0dcc731, 0x97a17e280a85db92, 0xe53e54300cf96d1c, 0x2703aff6c6a071bf, 0xab390bdd81b98e62, 0x6904f01b4be092c1, 0x1b9bda034d9c244f, 0xd9a621c587c538ec, 0xfea58e3341654953, 0x3c9875f58b3c55f0, 0x4e075fed8d40e37e, 0x8c3aa42b4719ffdd, 0x62ab31e85be48faf, 0xa096ca2e91bd930c, 0xd209e03697c12582, 0x10341bf05d983921, 0x3737b4069b38489e, 0xf50a4fc05161543d, 0x879565d8571de2b3, 0x45a89e1e9d44fe10, 0xc9923a35da5d01cd, 0x0bafc1f310041d6e, 0x7930ebeb1678abe0, 0xbb0d102ddc21b743, 0x9c0ebfdb1a81c6fc, 0x5e33441dd0d8da5f, 0x2cac6e05d6a46cd1, 0xee9195c31cfd7072, 0xc55663d0b7c91f5e, 0x076b98167d9003fd, 0x75f4b20e7becb573, 0xb7c949c8b1b5a9d0, 0x90cae63e7715d86f, 0x52f71df8bd4cc4cc, 0x206837e0bb307242, 0xe255cc2671696ee1, 0x6e6f680d3670913c, 0xac5293cbfc298d9f, 0xdecdb9d3fa553b11, 0x1cf04215300c27b2, 0x3bf3ede3f6ac560d, 0xf9ce16253cf54aae, 0x8b513c3d3a89fc20, 0x496cc7fbf0d0e083, 0xa7fd5238ec2d90f1, 0x65c0a9fe26748c52, 0x175f83e620083adc, 0xd5627820ea51267f, 0xf261d7d62cf157c0, 0x305c2c10e6a84b63, 0x42c30608e0d4fded, 0x80fefdce2a8de14e, 0x0cc459e56d941e93, 0xcef9a223a7cd0230, 0xbc66883ba1b1b4be, 0x7e5b73fd6be8a81d, 0x5958dc0bad48d9a2, 0x9b6527cd6711c501, 0xe9fa0dd5616d738f, 0x2bc7f613ab346f2c, 0xbe75e1f23705add7, 0x7c481a34fd5cb174, 0x0ed7302cfb2007fa, 0xcceacbea31791b59, 0xebe9641cf7d96ae6, 0x29d49fda3d807645, 0x5b4bb5c23bfcc0cb, 0x99764e04f1a5dc68, 0x154cea2fb6bc23b5, 0xd77111e97ce53f16, 0xa5ee3bf17a998998, 0x67d3c037b0c0953b, 0x40d06fc17660e484, 0x82ed9407bc39f827, 0xf072be1fba454ea9, 0x324f45d9701c520a, 0xdcded01a6ce12278, 0x1ee32bdca6b83edb, 0x6c7c01c4a0c48855, 0xae41fa026a9d94f6, 0x894255f4ac3de549, 0x4b7fae326664f9ea, 0x39e0842a60184f64, 0xfbdd7fecaa4153c7, 0x77e7dbc7ed58ac1a, 0xb5da20012701b0b9, 0xc7450a19217d0637, 0x0578f1dfeb241a94, 0x227b5e292d846b2b, 0xe046a5efe7dd7788, 0x92d98ff7e1a1c106, 0x50e474312bf8dda5, 0x7b23822280ccb289, 0xb91e79e44a95ae2a, 0xcb8153fc4ce918a4, 0x09bca83a86b00407, 0x2ebf07cc401075b8, 0xec82fc0a8a49691b, 0x9e1dd6128c35df95, 0x5c202dd4466cc336, 0xd01a89ff01753ceb, 0x12277239cb2c2048, 0x60b85821cd5096c6, 0xa285a3e707098a65, 0x85860c11c1a9fbda, 0x47bbf7d70bf0e779, 0x3524ddcf0d8c51f7, 0xf7192609c7d54d54, 0x1988b3cadb283d26, 0xdbb5480c11712185, 0xa92a6214170d970b, 0x6b1799d2dd548ba8, 0x4c1436241bf4fa17, 0x8e29cde2d1ade6b4, 0xfcb6e7fad7d1503a, 0x3e8b1c3c1d884c99, 0xb2b1b8175a91b344, 0x708c43d190c8afe7, 0x021369c996b41969, 0xc02e920f5ced05ca, 0xe72d3df99a4d7475, 0x2510c63f501468d6, 0x578fec275668de58, 0x95b217e19c31c2fb, 0x4832e5b7369cc8c5, 0x8a0f1e71fcc5d466, 0xf8903469fab962e8, 0x3aadcfaf30e07e4b, 0x1dae6059f6400ff4, 0xdf939b9f3c191357, 0xad0cb1873a65a5d9, 0x6f314a41f03cb97a, 0xe30bee6ab72546a7, 0x213615ac7d7c5a04, 0x53a93fb47b00ec8a, 0x9194c472b159f029, 0xb6976b8477f98196, 0x74aa9042bda09d35, 0x0635ba5abbdc2bbb, 0xc408419c71853718, 0x2a99d45f6d78476a, 0xe8a42f99a7215bc9, 0x9a3b0581a15ded47, 0x5806fe476b04f1e4, 0x7f0551b1ada4805b, 0xbd38aa7767fd9cf8, 0xcfa7806f61812a76, 0x0d9a7ba9abd836d5, 0x81a0df82ecc1c908, 0x439d24442698d5ab, 0x31020e5c20e46325, 0xf33ff59aeabd7f86, 0xd43c5a6c2c1d0e39, 0x1601a1aae644129a, 0x649e8bb2e038a414, 0xa6a370742a61b8b7, 0x8d6486678155d79b, 0x4f597da14b0ccb38, 0x3dc657b94d707db6, 0xfffbac7f87296115, 0xd8f80389418910aa, 0x1ac5f84f8bd00c09, 0x685ad2578dacba87, 0xaa67299147f5a624, 0x265d8dba00ec59f9, 0xe460767ccab5455a, 0x96ff5c64ccc9f3d4, 0x54c2a7a20690ef77, 0x73c10854c0309ec8, 0xb1fcf3920a69826b, 0xc363d98a0c1534e5, 0x015e224cc64c2846, 0xefcfb78fdab15834, 0x2df24c4910e84497, 0x5f6d66511694f219, 0x9d509d97dccdeeba, 0xba5332611a6d9f05, 0x786ec9a7d03483a6, 0x0af1e3bfd6483528, 0xc8cc18791c11298b, 0x44f6bc525b08d656, 0x86cb47949151caf5, 0xf4546d8c972d7c7b, 0x3669964a5d7460d8, 0x116a39bc9bd41167, 0xd357c27a518d0dc4, 0xa1c8e86257f1bb4a, 0x63f513a49da8a7e9, 0xf647044501996512, 0x347aff83cbc079b1, 0x46e5d59bcdbccf3f, 0x84d82e5d07e5d39c, 0xa3db81abc145a223, 0x61e67a6d0b1cbe80, 0x137950750d60080e, 0xd144abb3c73914ad, 0x5d7e0f988020eb70, 0x9f43f45e4a79f7d3, 0xeddcde464c05415d, 0x2fe12580865c5dfe, 0x08e28a7640fc2c41, 0xcadf71b08aa530e2, 0xb8405ba88cd9866c, 0x7a7da06e46809acf, 0x94ec35ad5a7deabd, 0x56d1ce6b9024f61e, 0x244ee47396584090, 0xe6731fb55c015c33, 0xc170b0439aa12d8c, 0x034d4b8550f8312f, 0x71d2619d568487a1, 0xb3ef9a5b9cdd9b02, 0x3fd53e70dbc464df, 0xfde8c5b6119d787c, 0x8f77efae17e1cef2, 0x4d4a1468ddb8d251, 0x6a49bb9e1b18a3ee, 0xa8744058d141bf4d, 0xdaeb6a40d73d09c3, 0x18d691861d641560, 0x33116795b6507a4c, 0xf12c9c537c0966ef, 0x83b3b64b7a75d061, 0x418e4d8db02cccc2, 0x668de27b768cbd7d, 0xa4b019bdbcd5a1de, 0xd62f33a5baa91750, 0x1412c86370f00bf3, 0x98286c4837e9f42e, 0x5a15978efdb0e88d, 0x288abd96fbcc5e03, 0xeab74650319542a0, 0xcdb4e9a6f735331f, 0x0f8912603d6c2fbc, 0x7d1638783b109932, 0xbf2bc3bef1498591, 0x51ba567dedb4f5e3, 0x9387adbb27ede940, 0xe11887a321915fce, 0x23257c65ebc8436d, 0x0426d3932d6832d2, 0xc61b2855e7312e71, 0xb484024de14d98ff, 0x76b9f98b2b14845c, 0xfa835da06c0d7b81, 0x38bea666a6546722, 0x4a218c7ea028d1ac, 0x881c77b86a71cd0f, 0xaf1fd84eacd1bcb0, 0x6d2223886688a013, 0x1fbd099060f4169d, 0xdd80f256aaad0a3e, ], [ 0x0000000000000000, 0xeadc41fd2ba3d420, 0xe161a5a90fd03b2b, 0x0bbde4542473ef0b, 0xf61a6d014737e53d, 0x1cc62cfc6c94311d, 0x177bc8a848e7de16, 0xfda7895563440a36, 0xd8edfc51d6f85911, 0x3231bdacfd5b8d31, 0x398c59f8d928623a, 0xd3501805f28bb61a, 0x2ef7915091cfbc2c, 0xc42bd0adba6c680c, 0xcf9634f99e1f8707, 0x254a7504b5bc5327, 0x8502def0f5672149, 0x6fde9f0ddec4f569, 0x64637b59fab71a62, 0x8ebf3aa4d114ce42, 0x7318b3f1b250c474, 0x99c4f20c99f31054, 0x92791658bd80ff5f, 0x78a557a596232b7f, 0x5def22a1239f7858, 0xb733635c083cac78, 0xbc8e87082c4f4373, 0x5652c6f507ec9753, 0xabf54fa064a89d65, 0x41290e5d4f0b4945, 0x4a94ea096b78a64e, 0xa048abf440db726e, 0x3edc9bb2b259d1f9, 0xd400da4f99fa05d9, 0xdfbd3e1bbd89ead2, 0x35617fe6962a3ef2, 0xc8c6f6b3f56e34c4, 0x221ab74edecde0e4, 0x29a7531afabe0fef, 0xc37b12e7d11ddbcf, 0xe63167e364a188e8, 0x0ced261e4f025cc8, 0x0750c24a6b71b3c3, 0xed8c83b740d267e3, 0x102b0ae223966dd5, 0xfaf74b1f0835b9f5, 0xf14aaf4b2c4656fe, 0x1b96eeb607e582de, 0xbbde4542473ef0b0, 0x510204bf6c9d2490, 0x5abfe0eb48eecb9b, 0xb063a116634d1fbb, 0x4dc428430009158d, 0xa71869be2baac1ad, 0xaca58dea0fd92ea6, 0x4679cc17247afa86, 0x6333b91391c6a9a1, 0x89eff8eeba657d81, 0x82521cba9e16928a, 0x688e5d47b5b546aa, 0x9529d412d6f14c9c, 0x7ff595effd5298bc, 0x744871bbd92177b7, 0x9e943046f282a397, 0x7db9376564b3a3f2, 0x976576984f1077d2, 0x9cd892cc6b6398d9, 0x7604d33140c04cf9, 0x8ba35a64238446cf, 0x617f1b99082792ef, 0x6ac2ffcd2c547de4, 0x801ebe3007f7a9c4, 0xa554cb34b24bfae3, 0x4f888ac999e82ec3, 0x44356e9dbd9bc1c8, 0xaee92f60963815e8, 0x534ea635f57c1fde, 0xb992e7c8dedfcbfe, 0xb22f039cfaac24f5, 0x58f34261d10ff0d5, 0xf8bbe99591d482bb, 0x1267a868ba77569b, 0x19da4c3c9e04b990, 0xf3060dc1b5a76db0, 0x0ea18494d6e36786, 0xe47dc569fd40b3a6, 0xefc0213dd9335cad, 0x051c60c0f290888d, 0x205615c4472cdbaa, 0xca8a54396c8f0f8a, 0xc137b06d48fce081, 0x2bebf190635f34a1, 0xd64c78c5001b3e97, 0x3c9039382bb8eab7, 0x372ddd6c0fcb05bc, 0xddf19c912468d19c, 0x4365acd7d6ea720b, 0xa9b9ed2afd49a62b, 0xa204097ed93a4920, 0x48d84883f2999d00, 0xb57fc1d691dd9736, 0x5fa3802bba7e4316, 0x541e647f9e0dac1d, 0xbec22582b5ae783d, 0x9b88508600122b1a, 0x7154117b2bb1ff3a, 0x7ae9f52f0fc21031, 0x9035b4d22461c411, 0x6d923d874725ce27, 0x874e7c7a6c861a07, 0x8cf3982e48f5f50c, 0x662fd9d36356212c, 0xc6677227238d5342, 0x2cbb33da082e8762, 0x2706d78e2c5d6869, 0xcdda967307febc49, 0x307d1f2664bab67f, 0xdaa15edb4f19625f, 0xd11cba8f6b6a8d54, 0x3bc0fb7240c95974, 0x1e8a8e76f5750a53, 0xf456cf8bded6de73, 0xffeb2bdffaa53178, 0x15376a22d106e558, 0xe890e377b242ef6e, 0x024ca28a99e13b4e, 0x09f146debd92d445, 0xe32d072396310065, 0xfb726ecac96747e4, 0x11ae2f37e2c493c4, 0x1a13cb63c6b77ccf, 0xf0cf8a9eed14a8ef, 0x0d6803cb8e50a2d9, 0xe7b44236a5f376f9, 0xec09a662818099f2, 0x06d5e79faa234dd2, 0x239f929b1f9f1ef5, 0xc943d366343ccad5, 0xc2fe3732104f25de, 0x282276cf3becf1fe, 0xd585ff9a58a8fbc8, 0x3f59be67730b2fe8, 0x34e45a335778c0e3, 0xde381bce7cdb14c3, 0x7e70b03a3c0066ad, 0x94acf1c717a3b28d, 0x9f11159333d05d86, 0x75cd546e187389a6, 0x886add3b7b378390, 0x62b69cc6509457b0, 0x690b789274e7b8bb, 0x83d7396f5f446c9b, 0xa69d4c6beaf83fbc, 0x4c410d96c15beb9c, 0x47fce9c2e5280497, 0xad20a83fce8bd0b7, 0x5087216aadcfda81, 0xba5b6097866c0ea1, 0xb1e684c3a21fe1aa, 0x5b3ac53e89bc358a, 0xc5aef5787b3e961d, 0x2f72b485509d423d, 0x24cf50d174eead36, 0xce13112c5f4d7916, 0x33b498793c097320, 0xd968d98417aaa700, 0xd2d53dd033d9480b, 0x38097c2d187a9c2b, 0x1d430929adc6cf0c, 0xf79f48d486651b2c, 0xfc22ac80a216f427, 0x16feed7d89b52007, 0xeb596428eaf12a31, 0x018525d5c152fe11, 0x0a38c181e521111a, 0xe0e4807cce82c53a, 0x40ac2b888e59b754, 0xaa706a75a5fa6374, 0xa1cd8e2181898c7f, 0x4b11cfdcaa2a585f, 0xb6b64689c96e5269, 0x5c6a0774e2cd8649, 0x57d7e320c6be6942, 0xbd0ba2dded1dbd62, 0x9841d7d958a1ee45, 0x729d962473023a65, 0x792072705771d56e, 0x93fc338d7cd2014e, 0x6e5bbad81f960b78, 0x8487fb253435df58, 0x8f3a1f7110463053, 0x65e65e8c3be5e473, 0x86cb59afadd4e416, 0x6c17185286773036, 0x67aafc06a204df3d, 0x8d76bdfb89a70b1d, 0x70d134aeeae3012b, 0x9a0d7553c140d50b, 0x91b09107e5333a00, 0x7b6cd0face90ee20, 0x5e26a5fe7b2cbd07, 0xb4fae403508f6927, 0xbf47005774fc862c, 0x559b41aa5f5f520c, 0xa83cc8ff3c1b583a, 0x42e0890217b88c1a, 0x495d6d5633cb6311, 0xa3812cab1868b731, 0x03c9875f58b3c55f, 0xe915c6a27310117f, 0xe2a822f65763fe74, 0x0874630b7cc02a54, 0xf5d3ea5e1f842062, 0x1f0faba33427f442, 0x14b24ff710541b49, 0xfe6e0e0a3bf7cf69, 0xdb247b0e8e4b9c4e, 0x31f83af3a5e8486e, 0x3a45dea7819ba765, 0xd0999f5aaa387345, 0x2d3e160fc97c7973, 0xc7e257f2e2dfad53, 0xcc5fb3a6c6ac4258, 0x2683f25bed0f9678, 0xb817c21d1f8d35ef, 0x52cb83e0342ee1cf, 0x597667b4105d0ec4, 0xb3aa26493bfedae4, 0x4e0daf1c58bad0d2, 0xa4d1eee1731904f2, 0xaf6c0ab5576aebf9, 0x45b04b487cc93fd9, 0x60fa3e4cc9756cfe, 0x8a267fb1e2d6b8de, 0x819b9be5c6a557d5, 0x6b47da18ed0683f5, 0x96e0534d8e4289c3, 0x7c3c12b0a5e15de3, 0x7781f6e48192b2e8, 0x9d5db719aa3166c8, 0x3d151cedeaea14a6, 0xd7c95d10c149c086, 0xdc74b944e53a2f8d, 0x36a8f8b9ce99fbad, 0xcb0f71ecadddf19b, 0x21d33011867e25bb, 0x2a6ed445a20dcab0, 0xc0b295b889ae1e90, 0xe5f8e0bc3c124db7, 0x0f24a14117b19997, 0x0499451533c2769c, 0xee4504e81861a2bc, 0x13e28dbd7b25a88a, 0xf93ecc4050867caa, 0xf283281474f593a1, 0x185f69e95f564781, ], ]; pub static CRC64_REDIS_TABLE: [[u64; 256]; 16] = [ [ 0x0000000000000000, 0x7ad870c830358979, 0xf5b0e190606b12f2, 0x8f689158505e9b8b, 0xc038e5739841b68f, 0xbae095bba8743ff6, 0x358804e3f82aa47d, 0x4f50742bc81f2d04, 0xab28ecb46814fe75, 0xd1f09c7c5821770c, 0x5e980d24087fec87, 0x24407dec384a65fe, 0x6b1009c7f05548fa, 0x11c8790fc060c183, 0x9ea0e857903e5a08, 0xe478989fa00bd371, 0x7d08ff3b88be6f81, 0x07d08ff3b88be6f8, 0x88b81eabe8d57d73, 0xf2606e63d8e0f40a, 0xbd301a4810ffd90e, 0xc7e86a8020ca5077, 0x4880fbd87094cbfc, 0x32588b1040a14285, 0xd620138fe0aa91f4, 0xacf86347d09f188d, 0x2390f21f80c18306, 0x594882d7b0f40a7f, 0x1618f6fc78eb277b, 0x6cc0863448deae02, 0xe3a8176c18803589, 0x997067a428b5bcf0, 0xfa11fe77117cdf02, 0x80c98ebf2149567b, 0x0fa11fe77117cdf0, 0x75796f2f41224489, 0x3a291b04893d698d, 0x40f16bccb908e0f4, 0xcf99fa94e9567b7f, 0xb5418a5cd963f206, 0x513912c379682177, 0x2be1620b495da80e, 0xa489f35319033385, 0xde51839b2936bafc, 0x9101f7b0e12997f8, 0xebd98778d11c1e81, 0x64b116208142850a, 0x1e6966e8b1770c73, 0x8719014c99c2b083, 0xfdc17184a9f739fa, 0x72a9e0dcf9a9a271, 0x08719014c99c2b08, 0x4721e43f0183060c, 0x3df994f731b68f75, 0xb29105af61e814fe, 0xc849756751dd9d87, 0x2c31edf8f1d64ef6, 0x56e99d30c1e3c78f, 0xd9810c6891bd5c04, 0xa3597ca0a188d57d, 0xec09088b6997f879, 0x96d1784359a27100, 0x19b9e91b09fcea8b, 0x636199d339c963f2, 0xdf7adabd7a6e2d6f, 0xa5a2aa754a5ba416, 0x2aca3b2d1a053f9d, 0x50124be52a30b6e4, 0x1f423fcee22f9be0, 0x659a4f06d21a1299, 0xeaf2de5e82448912, 0x902aae96b271006b, 0x74523609127ad31a, 0x0e8a46c1224f5a63, 0x81e2d7997211c1e8, 0xfb3aa75142244891, 0xb46ad37a8a3b6595, 0xceb2a3b2ba0eecec, 0x41da32eaea507767, 0x3b024222da65fe1e, 0xa2722586f2d042ee, 0xd8aa554ec2e5cb97, 0x57c2c41692bb501c, 0x2d1ab4dea28ed965, 0x624ac0f56a91f461, 0x1892b03d5aa47d18, 0x97fa21650afae693, 0xed2251ad3acf6fea, 0x095ac9329ac4bc9b, 0x7382b9faaaf135e2, 0xfcea28a2faafae69, 0x8632586aca9a2710, 0xc9622c4102850a14, 0xb3ba5c8932b0836d, 0x3cd2cdd162ee18e6, 0x460abd1952db919f, 0x256b24ca6b12f26d, 0x5fb354025b277b14, 0xd0dbc55a0b79e09f, 0xaa03b5923b4c69e6, 0xe553c1b9f35344e2, 0x9f8bb171c366cd9b, 0x10e3202993385610, 0x6a3b50e1a30ddf69, 0x8e43c87e03060c18, 0xf49bb8b633338561, 0x7bf329ee636d1eea, 0x012b592653589793, 0x4e7b2d0d9b47ba97, 0x34a35dc5ab7233ee, 0xbbcbcc9dfb2ca865, 0xc113bc55cb19211c, 0x5863dbf1e3ac9dec, 0x22bbab39d3991495, 0xadd33a6183c78f1e, 0xd70b4aa9b3f20667, 0x985b3e827bed2b63, 0xe2834e4a4bd8a21a, 0x6debdf121b863991, 0x1733afda2bb3b0e8, 0xf34b37458bb86399, 0x8993478dbb8deae0, 0x06fbd6d5ebd3716b, 0x7c23a61ddbe6f812, 0x3373d23613f9d516, 0x49aba2fe23cc5c6f, 0xc6c333a67392c7e4, 0xbc1b436e43a74e9d, 0x95ac9329ac4bc9b5, 0xef74e3e19c7e40cc, 0x601c72b9cc20db47, 0x1ac40271fc15523e, 0x5594765a340a7f3a, 0x2f4c0692043ff643, 0xa02497ca54616dc8, 0xdafce7026454e4b1, 0x3e847f9dc45f37c0, 0x445c0f55f46abeb9, 0xcb349e0da4342532, 0xb1eceec59401ac4b, 0xfebc9aee5c1e814f, 0x8464ea266c2b0836, 0x0b0c7b7e3c7593bd, 0x71d40bb60c401ac4, 0xe8a46c1224f5a634, 0x927c1cda14c02f4d, 0x1d148d82449eb4c6, 0x67ccfd4a74ab3dbf, 0x289c8961bcb410bb, 0x5244f9a98c8199c2, 0xdd2c68f1dcdf0249, 0xa7f41839ecea8b30, 0x438c80a64ce15841, 0x3954f06e7cd4d138, 0xb63c61362c8a4ab3, 0xcce411fe1cbfc3ca, 0x83b465d5d4a0eece, 0xf96c151de49567b7, 0x76048445b4cbfc3c, 0x0cdcf48d84fe7545, 0x6fbd6d5ebd3716b7, 0x15651d968d029fce, 0x9a0d8ccedd5c0445, 0xe0d5fc06ed698d3c, 0xaf85882d2576a038, 0xd55df8e515432941, 0x5a3569bd451db2ca, 0x20ed197575283bb3, 0xc49581ead523e8c2, 0xbe4df122e51661bb, 0x3125607ab548fa30, 0x4bfd10b2857d7349, 0x04ad64994d625e4d, 0x7e7514517d57d734, 0xf11d85092d094cbf, 0x8bc5f5c11d3cc5c6, 0x12b5926535897936, 0x686de2ad05bcf04f, 0xe70573f555e26bc4, 0x9ddd033d65d7e2bd, 0xd28d7716adc8cfb9, 0xa85507de9dfd46c0, 0x273d9686cda3dd4b, 0x5de5e64efd965432, 0xb99d7ed15d9d8743, 0xc3450e196da80e3a, 0x4c2d9f413df695b1, 0x36f5ef890dc31cc8, 0x79a59ba2c5dc31cc, 0x037deb6af5e9b8b5, 0x8c157a32a5b7233e, 0xf6cd0afa9582aa47, 0x4ad64994d625e4da, 0x300e395ce6106da3, 0xbf66a804b64ef628, 0xc5bed8cc867b7f51, 0x8aeeace74e645255, 0xf036dc2f7e51db2c, 0x7f5e4d772e0f40a7, 0x05863dbf1e3ac9de, 0xe1fea520be311aaf, 0x9b26d5e88e0493d6, 0x144e44b0de5a085d, 0x6e963478ee6f8124, 0x21c640532670ac20, 0x5b1e309b16452559, 0xd476a1c3461bbed2, 0xaeaed10b762e37ab, 0x37deb6af5e9b8b5b, 0x4d06c6676eae0222, 0xc26e573f3ef099a9, 0xb8b627f70ec510d0, 0xf7e653dcc6da3dd4, 0x8d3e2314f6efb4ad, 0x0256b24ca6b12f26, 0x788ec2849684a65f, 0x9cf65a1b368f752e, 0xe62e2ad306bafc57, 0x6946bb8b56e467dc, 0x139ecb4366d1eea5, 0x5ccebf68aecec3a1, 0x2616cfa09efb4ad8, 0xa97e5ef8cea5d153, 0xd3a62e30fe90582a, 0xb0c7b7e3c7593bd8, 0xca1fc72bf76cb2a1, 0x45775673a732292a, 0x3faf26bb9707a053, 0x70ff52905f188d57, 0x0a2722586f2d042e, 0x854fb3003f739fa5, 0xff97c3c80f4616dc, 0x1bef5b57af4dc5ad, 0x61372b9f9f784cd4, 0xee5fbac7cf26d75f, 0x9487ca0fff135e26, 0xdbd7be24370c7322, 0xa10fceec0739fa5b, 0x2e675fb4576761d0, 0x54bf2f7c6752e8a9, 0xcdcf48d84fe75459, 0xb71738107fd2dd20, 0x387fa9482f8c46ab, 0x42a7d9801fb9cfd2, 0x0df7adabd7a6e2d6, 0x772fdd63e7936baf, 0xf8474c3bb7cdf024, 0x829f3cf387f8795d, 0x66e7a46c27f3aa2c, 0x1c3fd4a417c62355, 0x935745fc4798b8de, 0xe98f353477ad31a7, 0xa6df411fbfb21ca3, 0xdc0731d78f8795da, 0x536fa08fdfd90e51, 0x29b7d047efec8728, ], [ 0x0000000000000000, 0x89e99ffd73bddf69, 0x388a19a9bfec2db9, 0xb1638654cc51f2d0, 0x711433537fd85b72, 0xf8fdacae0c65841b, 0x499e2afac03476cb, 0xc077b507b389a9a2, 0xe22866a6ffb0b6e4, 0x6bc1f95b8c0d698d, 0xdaa27f0f405c9b5d, 0x534be0f233e14434, 0x933c55f58068ed96, 0x1ad5ca08f3d532ff, 0xabb64c5c3f84c02f, 0x225fd3a14c391f46, 0xef09eb1ea7f6fea3, 0x66e074e3d44b21ca, 0xd783f2b7181ad31a, 0x5e6a6d4a6ba70c73, 0x9e1dd84dd82ea5d1, 0x17f447b0ab937ab8, 0xa697c1e467c28868, 0x2f7e5e19147f5701, 0x0d218db858464847, 0x84c812452bfb972e, 0x35ab9411e7aa65fe, 0xbc420bec9417ba97, 0x7c35beeb279e1335, 0xf5dc21165423cc5c, 0x44bfa74298723e8c, 0xcd5638bfebcfe1e5, 0xf54af06e177a6e2d, 0x7ca36f9364c7b144, 0xcdc0e9c7a8964394, 0x4429763adb2b9cfd, 0x845ec33d68a2355f, 0x0db75cc01b1fea36, 0xbcd4da94d74e18e6, 0x353d4569a4f3c78f, 0x176296c8e8cad8c9, 0x9e8b09359b7707a0, 0x2fe88f615726f570, 0xa601109c249b2a19, 0x6676a59b971283bb, 0xef9f3a66e4af5cd2, 0x5efcbc3228feae02, 0xd71523cf5b43716b, 0x1a431b70b08c908e, 0x93aa848dc3314fe7, 0x22c902d90f60bd37, 0xab209d247cdd625e, 0x6b572823cf54cbfc, 0xe2beb7debce91495, 0x53dd318a70b8e645, 0xda34ae770305392c, 0xf86b7dd64f3c266a, 0x7182e22b3c81f903, 0xc0e1647ff0d00bd3, 0x4908fb82836dd4ba, 0x897f4e8530e47d18, 0x0096d1784359a271, 0xb1f5572c8f0850a1, 0x381cc8d1fcb58fc8, 0xc1ccc68f76634f31, 0x4825597205de9058, 0xf946df26c98f6288, 0x70af40dbba32bde1, 0xb0d8f5dc09bb1443, 0x39316a217a06cb2a, 0x8852ec75b65739fa, 0x01bb7388c5eae693, 0x23e4a02989d3f9d5, 0xaa0d3fd4fa6e26bc, 0x1b6eb980363fd46c, 0x9287267d45820b05, 0x52f0937af60ba2a7, 0xdb190c8785b67dce, 0x6a7a8ad349e78f1e, 0xe393152e3a5a5077, 0x2ec52d91d195b192, 0xa72cb26ca2286efb, 0x164f34386e799c2b, 0x9fa6abc51dc44342, 0x5fd11ec2ae4deae0, 0xd638813fddf03589, 0x675b076b11a1c759, 0xeeb29896621c1830, 0xcced4b372e250776, 0x4504d4ca5d98d81f, 0xf467529e91c92acf, 0x7d8ecd63e274f5a6, 0xbdf9786451fd5c04, 0x3410e7992240836d, 0x857361cdee1171bd, 0x0c9afe309dacaed4, 0x348636e16119211c, 0xbd6fa91c12a4fe75, 0x0c0c2f48def50ca5, 0x85e5b0b5ad48d3cc, 0x459205b21ec17a6e, 0xcc7b9a4f6d7ca507, 0x7d181c1ba12d57d7, 0xf4f183e6d29088be, 0xd6ae50479ea997f8, 0x5f47cfbaed144891, 0xee2449ee2145ba41, 0x67cdd61352f86528, 0xa7ba6314e171cc8a, 0x2e53fce992cc13e3, 0x9f307abd5e9de133, 0x16d9e5402d203e5a, 0xdb8fddffc6efdfbf, 0x52664202b55200d6, 0xe305c4567903f206, 0x6aec5bab0abe2d6f, 0xaa9beeacb93784cd, 0x23727151ca8a5ba4, 0x9211f70506dba974, 0x1bf868f87566761d, 0x39a7bb59395f695b, 0xb04e24a44ae2b632, 0x012da2f086b344e2, 0x88c43d0df50e9b8b, 0x48b3880a46873229, 0xc15a17f7353aed40, 0x703991a3f96b1f90, 0xf9d00e5e8ad6c0f9, 0xa8c0ab4db4510d09, 0x212934b0c7ecd260, 0x904ab2e40bbd20b0, 0x19a32d197800ffd9, 0xd9d4981ecb89567b, 0x503d07e3b8348912, 0xe15e81b774657bc2, 0x68b71e4a07d8a4ab, 0x4ae8cdeb4be1bbed, 0xc3015216385c6484, 0x7262d442f40d9654, 0xfb8b4bbf87b0493d, 0x3bfcfeb83439e09f, 0xb215614547843ff6, 0x0376e7118bd5cd26, 0x8a9f78ecf868124f, 0x47c9405313a7f3aa, 0xce20dfae601a2cc3, 0x7f4359faac4bde13, 0xf6aac607dff6017a, 0x36dd73006c7fa8d8, 0xbf34ecfd1fc277b1, 0x0e576aa9d3938561, 0x87bef554a02e5a08, 0xa5e126f5ec17454e, 0x2c08b9089faa9a27, 0x9d6b3f5c53fb68f7, 0x1482a0a12046b79e, 0xd4f515a693cf1e3c, 0x5d1c8a5be072c155, 0xec7f0c0f2c233385, 0x659693f25f9eecec, 0x5d8a5b23a32b6324, 0xd463c4ded096bc4d, 0x6500428a1cc74e9d, 0xece9dd776f7a91f4, 0x2c9e6870dcf33856, 0xa577f78daf4ee73f, 0x141471d9631f15ef, 0x9dfdee2410a2ca86, 0xbfa23d855c9bd5c0, 0x364ba2782f260aa9, 0x8728242ce377f879, 0x0ec1bbd190ca2710, 0xceb60ed623438eb2, 0x475f912b50fe51db, 0xf63c177f9cafa30b, 0x7fd58882ef127c62, 0xb283b03d04dd9d87, 0x3b6a2fc0776042ee, 0x8a09a994bb31b03e, 0x03e03669c88c6f57, 0xc397836e7b05c6f5, 0x4a7e1c9308b8199c, 0xfb1d9ac7c4e9eb4c, 0x72f4053ab7543425, 0x50abd69bfb6d2b63, 0xd942496688d0f40a, 0x6821cf32448106da, 0xe1c850cf373cd9b3, 0x21bfe5c884b57011, 0xa8567a35f708af78, 0x1935fc613b595da8, 0x90dc639c48e482c1, 0x690c6dc2c2324238, 0xe0e5f23fb18f9d51, 0x5186746b7dde6f81, 0xd86feb960e63b0e8, 0x18185e91bdea194a, 0x91f1c16cce57c623, 0x20924738020634f3, 0xa97bd8c571bbeb9a, 0x8b240b643d82f4dc, 0x02cd94994e3f2bb5, 0xb3ae12cd826ed965, 0x3a478d30f1d3060c, 0xfa303837425aafae, 0x73d9a7ca31e770c7, 0xc2ba219efdb68217, 0x4b53be638e0b5d7e, 0x860586dc65c4bc9b, 0x0fec1921167963f2, 0xbe8f9f75da289122, 0x37660088a9954e4b, 0xf711b58f1a1ce7e9, 0x7ef82a7269a13880, 0xcf9bac26a5f0ca50, 0x467233dbd64d1539, 0x642de07a9a740a7f, 0xedc47f87e9c9d516, 0x5ca7f9d3259827c6, 0xd54e662e5625f8af, 0x1539d329e5ac510d, 0x9cd04cd496118e64, 0x2db3ca805a407cb4, 0xa45a557d29fda3dd, 0x9c469dacd5482c15, 0x15af0251a6f5f37c, 0xa4cc84056aa401ac, 0x2d251bf81919dec5, 0xed52aeffaa907767, 0x64bb3102d92da80e, 0xd5d8b756157c5ade, 0x5c3128ab66c185b7, 0x7e6efb0a2af89af1, 0xf78764f759454598, 0x46e4e2a39514b748, 0xcf0d7d5ee6a96821, 0x0f7ac8595520c183, 0x869357a4269d1eea, 0x37f0d1f0eaccec3a, 0xbe194e0d99713353, 0x734f76b272bed2b6, 0xfaa6e94f01030ddf, 0x4bc56f1bcd52ff0f, 0xc22cf0e6beef2066, 0x025b45e10d6689c4, 0x8bb2da1c7edb56ad, 0x3ad15c48b28aa47d, 0xb338c3b5c1377b14, 0x916710148d0e6452, 0x188e8fe9feb3bb3b, 0xa9ed09bd32e249eb, 0x20049640415f9682, 0xe0732347f2d63f20, 0x699abcba816be049, 0xd8f93aee4d3a1299, 0x5110a5133e87cdf0, ], [ 0x0000000000000000, 0xf4125129ce4038be, 0xc37d8400c417e217, 0x376fd5290a57daa9, 0xada22e52d0b85745, 0x59b07f7b1ef86ffb, 0x6edfaa5214afb552, 0x9acdfb7bdaef8dec, 0x701d7af6f9e73de1, 0x840f2bdf37a7055f, 0xb360fef63df0dff6, 0x4772afdff3b0e748, 0xddbf54a4295f6aa4, 0x29ad058de71f521a, 0x1ec2d0a4ed4888b3, 0xead0818d2308b00d, 0xe03af5edf3ce7bc2, 0x1428a4c43d8e437c, 0x234771ed37d999d5, 0xd75520c4f999a16b, 0x4d98dbbf23762c87, 0xb98a8a96ed361439, 0x8ee55fbfe761ce90, 0x7af70e962921f62e, 0x90278f1b0a294623, 0x6435de32c4697e9d, 0x535a0b1bce3ea434, 0xa7485a32007e9c8a, 0x3d85a149da911166, 0xc997f06014d129d8, 0xfef825491e86f371, 0x0aea7460d0c6cbcf, 0xeb2ccd88bf0b64ef, 0x1f3e9ca1714b5c51, 0x285149887b1c86f8, 0xdc4318a1b55cbe46, 0x468ee3da6fb333aa, 0xb29cb2f3a1f30b14, 0x85f367daaba4d1bd, 0x71e136f365e4e903, 0x9b31b77e46ec590e, 0x6f23e65788ac61b0, 0x584c337e82fbbb19, 0xac5e62574cbb83a7, 0x3693992c96540e4b, 0xc281c805581436f5, 0xf5ee1d2c5243ec5c, 0x01fc4c059c03d4e2, 0x0b1638654cc51f2d, 0xff04694c82852793, 0xc86bbc6588d2fd3a, 0x3c79ed4c4692c584, 0xa6b416379c7d4868, 0x52a6471e523d70d6, 0x65c99237586aaa7f, 0x91dbc31e962a92c1, 0x7b0b4293b52222cc, 0x8f1913ba7b621a72, 0xb876c6937135c0db, 0x4c6497babf75f865, 0xd6a96cc1659a7589, 0x22bb3de8abda4d37, 0x15d4e8c1a18d979e, 0xe1c6b9e86fcdaf20, 0xfd00bd4226815ab5, 0x0912ec6be8c1620b, 0x3e7d3942e296b8a2, 0xca6f686b2cd6801c, 0x50a29310f6390df0, 0xa4b0c2393879354e, 0x93df1710322eefe7, 0x67cd4639fc6ed759, 0x8d1dc7b4df666754, 0x790f969d11265fea, 0x4e6043b41b718543, 0xba72129dd531bdfd, 0x20bfe9e60fde3011, 0xd4adb8cfc19e08af, 0xe3c26de6cbc9d206, 0x17d03ccf0589eab8, 0x1d3a48afd54f2177, 0xe92819861b0f19c9, 0xde47ccaf1158c360, 0x2a559d86df18fbde, 0xb09866fd05f77632, 0x448a37d4cbb74e8c, 0x73e5e2fdc1e09425, 0x87f7b3d40fa0ac9b, 0x6d2732592ca81c96, 0x99356370e2e82428, 0xae5ab659e8bffe81, 0x5a48e77026ffc63f, 0xc0851c0bfc104bd3, 0x34974d223250736d, 0x03f8980b3807a9c4, 0xf7eac922f647917a, 0x162c70ca998a3e5a, 0xe23e21e357ca06e4, 0xd551f4ca5d9ddc4d, 0x2143a5e393dde4f3, 0xbb8e5e984932691f, 0x4f9c0fb1877251a1, 0x78f3da988d258b08, 0x8ce18bb14365b3b6, 0x66310a3c606d03bb, 0x92235b15ae2d3b05, 0xa54c8e3ca47ae1ac, 0x515edf156a3ad912, 0xcb93246eb0d554fe, 0x3f8175477e956c40, 0x08eea06e74c2b6e9, 0xfcfcf147ba828e57, 0xf61685276a444598, 0x0204d40ea4047d26, 0x356b0127ae53a78f, 0xc179500e60139f31, 0x5bb4ab75bafc12dd, 0xafa6fa5c74bc2a63, 0x98c92f757eebf0ca, 0x6cdb7e5cb0abc874, 0x860bffd193a37879, 0x7219aef85de340c7, 0x45767bd157b49a6e, 0xb1642af899f4a2d0, 0x2ba9d183431b2f3c, 0xdfbb80aa8d5b1782, 0xe8d45583870ccd2b, 0x1cc604aa494cf595, 0xd1585cd715952601, 0x254a0dfedbd51ebf, 0x1225d8d7d182c416, 0xe63789fe1fc2fca8, 0x7cfa7285c52d7144, 0x88e823ac0b6d49fa, 0xbf87f685013a9353, 0x4b95a7accf7aabed, 0xa1452621ec721be0, 0x555777082232235e, 0x6238a2212865f9f7, 0x962af308e625c149, 0x0ce708733cca4ca5, 0xf8f5595af28a741b, 0xcf9a8c73f8ddaeb2, 0x3b88dd5a369d960c, 0x3162a93ae65b5dc3, 0xc570f813281b657d, 0xf21f2d3a224cbfd4, 0x060d7c13ec0c876a, 0x9cc0876836e30a86, 0x68d2d641f8a33238, 0x5fbd0368f2f4e891, 0xabaf52413cb4d02f, 0x417fd3cc1fbc6022, 0xb56d82e5d1fc589c, 0x820257ccdbab8235, 0x761006e515ebba8b, 0xecddfd9ecf043767, 0x18cfacb701440fd9, 0x2fa0799e0b13d570, 0xdbb228b7c553edce, 0x3a74915faa9e42ee, 0xce66c07664de7a50, 0xf909155f6e89a0f9, 0x0d1b4476a0c99847, 0x97d6bf0d7a2615ab, 0x63c4ee24b4662d15, 0x54ab3b0dbe31f7bc, 0xa0b96a247071cf02, 0x4a69eba953797f0f, 0xbe7bba809d3947b1, 0x89146fa9976e9d18, 0x7d063e80592ea5a6, 0xe7cbc5fb83c1284a, 0x13d994d24d8110f4, 0x24b641fb47d6ca5d, 0xd0a410d28996f2e3, 0xda4e64b25950392c, 0x2e5c359b97100192, 0x1933e0b29d47db3b, 0xed21b19b5307e385, 0x77ec4ae089e86e69, 0x83fe1bc947a856d7, 0xb491cee04dff8c7e, 0x40839fc983bfb4c0, 0xaa531e44a0b704cd, 0x5e414f6d6ef73c73, 0x692e9a4464a0e6da, 0x9d3ccb6daae0de64, 0x07f13016700f5388, 0xf3e3613fbe4f6b36, 0xc48cb416b418b19f, 0x309ee53f7a588921, 0x2c58e19533147cb4, 0xd84ab0bcfd54440a, 0xef256595f7039ea3, 0x1b3734bc3943a61d, 0x81facfc7e3ac2bf1, 0x75e89eee2dec134f, 0x42874bc727bbc9e6, 0xb6951aeee9fbf158, 0x5c459b63caf34155, 0xa857ca4a04b379eb, 0x9f381f630ee4a342, 0x6b2a4e4ac0a49bfc, 0xf1e7b5311a4b1610, 0x05f5e418d40b2eae, 0x329a3131de5cf407, 0xc6886018101cccb9, 0xcc621478c0da0776, 0x387045510e9a3fc8, 0x0f1f907804cde561, 0xfb0dc151ca8ddddf, 0x61c03a2a10625033, 0x95d26b03de22688d, 0xa2bdbe2ad475b224, 0x56afef031a358a9a, 0xbc7f6e8e393d3a97, 0x486d3fa7f77d0229, 0x7f02ea8efd2ad880, 0x8b10bba7336ae03e, 0x11dd40dce9856dd2, 0xe5cf11f527c5556c, 0xd2a0c4dc2d928fc5, 0x26b295f5e3d2b77b, 0xc7742c1d8c1f185b, 0x33667d34425f20e5, 0x0409a81d4808fa4c, 0xf01bf9348648c2f2, 0x6ad6024f5ca74f1e, 0x9ec4536692e777a0, 0xa9ab864f98b0ad09, 0x5db9d76656f095b7, 0xb76956eb75f825ba, 0x437b07c2bbb81d04, 0x7414d2ebb1efc7ad, 0x800683c27fafff13, 0x1acb78b9a54072ff, 0xeed929906b004a41, 0xd9b6fcb9615790e8, 0x2da4ad90af17a856, 0x274ed9f07fd16399, 0xd35c88d9b1915b27, 0xe4335df0bbc6818e, 0x10210cd97586b930, 0x8aecf7a2af6934dc, 0x7efea68b61290c62, 0x499173a26b7ed6cb, 0xbd83228ba53eee75, 0x5753a30686365e78, 0xa341f22f487666c6, 0x942e27064221bc6f, 0x603c762f8c6184d1, 0xfaf18d54568e093d, 0x0ee3dc7d98ce3183, 0x398c09549299eb2a, 0xcd9e587d5cd9d394, ], [ 0x0000000000000000, 0x8ce168638c796306, 0x329bf69440655567, 0xbe7a9ef7cc1c3661, 0x6537ed2880caaace, 0xe9d6854b0cb3c9c8, 0x57ac1bbcc0afffa9, 0xdb4d73df4cd69caf, 0xca6fda510195559c, 0x468eb2328dec369a, 0xf8f42cc541f000fb, 0x741544a6cd8963fd, 0xaf583779815fff52, 0x23b95f1a0d269c54, 0x9dc3c1edc13aaa35, 0x1122a98e4d43c933, 0xbf8692f15bbd3853, 0x3367fa92d7c45b55, 0x8d1d64651bd86d34, 0x01fc0c0697a10e32, 0xdab17fd9db77929d, 0x565017ba570ef19b, 0xe82a894d9b12c7fa, 0x64cbe12e176ba4fc, 0x75e948a05a286dcf, 0xf90820c3d6510ec9, 0x4772be341a4d38a8, 0xcb93d65796345bae, 0x10dea588dae2c701, 0x9c3fcdeb569ba407, 0x2245531c9a879266, 0xaea43b7f16fef160, 0x545403b1efede3cd, 0xd8b56bd2639480cb, 0x66cff525af88b6aa, 0xea2e9d4623f1d5ac, 0x3163ee996f274903, 0xbd8286fae35e2a05, 0x03f8180d2f421c64, 0x8f19706ea33b7f62, 0x9e3bd9e0ee78b651, 0x12dab1836201d557, 0xaca02f74ae1de336, 0x2041471722648030, 0xfb0c34c86eb21c9f, 0x77ed5cabe2cb7f99, 0xc997c25c2ed749f8, 0x4576aa3fa2ae2afe, 0xebd29140b450db9e, 0x6733f9233829b898, 0xd94967d4f4358ef9, 0x55a80fb7784cedff, 0x8ee57c68349a7150, 0x0204140bb8e31256, 0xbc7e8afc74ff2437, 0x309fe29ff8864731, 0x21bd4b11b5c58e02, 0xad5c237239bced04, 0x1326bd85f5a0db65, 0x9fc7d5e679d9b863, 0x448aa639350f24cc, 0xc86bce5ab97647ca, 0x761150ad756a71ab, 0xfaf038cef91312ad, 0xa8a80763dfdbc79a, 0x24496f0053a2a49c, 0x9a33f1f79fbe92fd, 0x16d2999413c7f1fb, 0xcd9fea4b5f116d54, 0x417e8228d3680e52, 0xff041cdf1f743833, 0x73e574bc930d5b35, 0x62c7dd32de4e9206, 0xee26b5515237f100, 0x505c2ba69e2bc761, 0xdcbd43c51252a467, 0x07f0301a5e8438c8, 0x8b115879d2fd5bce, 0x356bc68e1ee16daf, 0xb98aaeed92980ea9, 0x172e95928466ffc9, 0x9bcffdf1081f9ccf, 0x25b56306c403aaae, 0xa9540b65487ac9a8, 0x721978ba04ac5507, 0xfef810d988d53601, 0x40828e2e44c90060, 0xcc63e64dc8b06366, 0xdd414fc385f3aa55, 0x51a027a0098ac953, 0xefdab957c596ff32, 0x633bd13449ef9c34, 0xb876a2eb0539009b, 0x3497ca888940639d, 0x8aed547f455c55fc, 0x060c3c1cc92536fa, 0xfcfc04d230362457, 0x701d6cb1bc4f4751, 0xce67f24670537130, 0x42869a25fc2a1236, 0x99cbe9fab0fc8e99, 0x152a81993c85ed9f, 0xab501f6ef099dbfe, 0x27b1770d7ce0b8f8, 0x3693de8331a371cb, 0xba72b6e0bdda12cd, 0x0408281771c624ac, 0x88e94074fdbf47aa, 0x53a433abb169db05, 0xdf455bc83d10b803, 0x613fc53ff10c8e62, 0xeddead5c7d75ed64, 0x437a96236b8b1c04, 0xcf9bfe40e7f27f02, 0x71e160b72bee4963, 0xfd0008d4a7972a65, 0x264d7b0beb41b6ca, 0xaaac13686738d5cc, 0x14d68d9fab24e3ad, 0x9837e5fc275d80ab, 0x89154c726a1e4998, 0x05f42411e6672a9e, 0xbb8ebae62a7b1cff, 0x376fd285a6027ff9, 0xec22a15aead4e356, 0x60c3c93966ad8050, 0xdeb957ceaab1b631, 0x52583fad26c8d537, 0x7a092894e7201c5f, 0xf6e840f76b597f59, 0x4892de00a7454938, 0xc473b6632b3c2a3e, 0x1f3ec5bc67eab691, 0x93dfaddfeb93d597, 0x2da53328278fe3f6, 0xa1445b4babf680f0, 0xb066f2c5e6b549c3, 0x3c879aa66acc2ac5, 0x82fd0451a6d01ca4, 0x0e1c6c322aa97fa2, 0xd5511fed667fe30d, 0x59b0778eea06800b, 0xe7cae979261ab66a, 0x6b2b811aaa63d56c, 0xc58fba65bc9d240c, 0x496ed20630e4470a, 0xf7144cf1fcf8716b, 0x7bf524927081126d, 0xa0b8574d3c578ec2, 0x2c593f2eb02eedc4, 0x9223a1d97c32dba5, 0x1ec2c9baf04bb8a3, 0x0fe06034bd087190, 0x8301085731711296, 0x3d7b96a0fd6d24f7, 0xb19afec3711447f1, 0x6ad78d1c3dc2db5e, 0xe636e57fb1bbb858, 0x584c7b887da78e39, 0xd4ad13ebf1deed3f, 0x2e5d2b2508cdff92, 0xa2bc434684b49c94, 0x1cc6ddb148a8aaf5, 0x9027b5d2c4d1c9f3, 0x4b6ac60d8807555c, 0xc78bae6e047e365a, 0x79f13099c862003b, 0xf51058fa441b633d, 0xe432f1740958aa0e, 0x68d399178521c908, 0xd6a907e0493dff69, 0x5a486f83c5449c6f, 0x81051c5c899200c0, 0x0de4743f05eb63c6, 0xb39eeac8c9f755a7, 0x3f7f82ab458e36a1, 0x91dbb9d45370c7c1, 0x1d3ad1b7df09a4c7, 0xa3404f40131592a6, 0x2fa127239f6cf1a0, 0xf4ec54fcd3ba6d0f, 0x780d3c9f5fc30e09, 0xc677a26893df3868, 0x4a96ca0b1fa65b6e, 0x5bb4638552e5925d, 0xd7550be6de9cf15b, 0x692f95111280c73a, 0xe5cefd729ef9a43c, 0x3e838eadd22f3893, 0xb262e6ce5e565b95, 0x0c187839924a6df4, 0x80f9105a1e330ef2, 0xd2a12ff738fbdbc5, 0x5e404794b482b8c3, 0xe03ad963789e8ea2, 0x6cdbb100f4e7eda4, 0xb796c2dfb831710b, 0x3b77aabc3448120d, 0x850d344bf854246c, 0x09ec5c28742d476a, 0x18cef5a6396e8e59, 0x942f9dc5b517ed5f, 0x2a550332790bdb3e, 0xa6b46b51f572b838, 0x7df9188eb9a42497, 0xf11870ed35dd4791, 0x4f62ee1af9c171f0, 0xc383867975b812f6, 0x6d27bd066346e396, 0xe1c6d565ef3f8090, 0x5fbc4b922323b6f1, 0xd35d23f1af5ad5f7, 0x0810502ee38c4958, 0x84f1384d6ff52a5e, 0x3a8ba6baa3e91c3f, 0xb66aced92f907f39, 0xa748675762d3b60a, 0x2ba90f34eeaad50c, 0x95d391c322b6e36d, 0x1932f9a0aecf806b, 0xc27f8a7fe2191cc4, 0x4e9ee21c6e607fc2, 0xf0e47ceba27c49a3, 0x7c0514882e052aa5, 0x86f52c46d7163808, 0x0a1444255b6f5b0e, 0xb46edad297736d6f, 0x388fb2b11b0a0e69, 0xe3c2c16e57dc92c6, 0x6f23a90ddba5f1c0, 0xd15937fa17b9c7a1, 0x5db85f999bc0a4a7, 0x4c9af617d6836d94, 0xc07b9e745afa0e92, 0x7e01008396e638f3, 0xf2e068e01a9f5bf5, 0x29ad1b3f5649c75a, 0xa54c735cda30a45c, 0x1b36edab162c923d, 0x97d785c89a55f13b, 0x3973beb78cab005b, 0xb592d6d400d2635d, 0x0be84823ccce553c, 0x8709204040b7363a, 0x5c44539f0c61aa95, 0xd0a53bfc8018c993, 0x6edfa50b4c04fff2, 0xe23ecd68c07d9cf4, 0xf31c64e68d3e55c7, 0x7ffd0c85014736c1, 0xc1879272cd5b00a0, 0x4d66fa11412263a6, 0x962b89ce0df4ff09, 0x1acae1ad818d9c0f, 0xa4b07f5a4d91aa6e, 0x28511739c1e8c968, ], [ 0x0000000000000000, 0x3504e58b9ba6dd1e, 0x6a09cb17374dba3c, 0x5f0d2e9caceb6722, 0xd413962e6e9b7478, 0xe11773a5f53da966, 0xbe1a5d3959d6ce44, 0x8b1eb8b2c270135a, 0x837e0a0f85a17b9b, 0xb67aef841e07a685, 0xe977c118b2ecc1a7, 0xdc732493294a1cb9, 0x576d9c21eb3a0fe3, 0x626979aa709cd2fd, 0x3d645736dc77b5df, 0x0860b2bd47d168c1, 0x2da5324c53d5645d, 0x18a1d7c7c873b943, 0x47acf95b6498de61, 0x72a81cd0ff3e037f, 0xf9b6a4623d4e1025, 0xccb241e9a6e8cd3b, 0x93bf6f750a03aa19, 0xa6bb8afe91a57707, 0xaedb3843d6741fc6, 0x9bdfddc84dd2c2d8, 0xc4d2f354e139a5fa, 0xf1d616df7a9f78e4, 0x7ac8ae6db8ef6bbe, 0x4fcc4be62349b6a0, 0x10c1657a8fa2d182, 0x25c580f114040c9c, 0x5b4a6498a7aac8ba, 0x6e4e81133c0c15a4, 0x3143af8f90e77286, 0x04474a040b41af98, 0x8f59f2b6c931bcc2, 0xba5d173d529761dc, 0xe55039a1fe7c06fe, 0xd054dc2a65dadbe0, 0xd8346e97220bb321, 0xed308b1cb9ad6e3f, 0xb23da5801546091d, 0x8739400b8ee0d403, 0x0c27f8b94c90c759, 0x39231d32d7361a47, 0x662e33ae7bdd7d65, 0x532ad625e07ba07b, 0x76ef56d4f47face7, 0x43ebb35f6fd971f9, 0x1ce69dc3c33216db, 0x29e278485894cbc5, 0xa2fcc0fa9ae4d89f, 0x97f8257101420581, 0xc8f50bedada962a3, 0xfdf1ee66360fbfbd, 0xf5915cdb71ded77c, 0xc095b950ea780a62, 0x9f9897cc46936d40, 0xaa9c7247dd35b05e, 0x2182caf51f45a304, 0x14862f7e84e37e1a, 0x4b8b01e228081938, 0x7e8fe469b3aec426, 0xb694c9314f559174, 0x83902cbad4f34c6a, 0xdc9d022678182b48, 0xe999e7ade3bef656, 0x62875f1f21cee50c, 0x5783ba94ba683812, 0x088e940816835f30, 0x3d8a71838d25822e, 0x35eac33ecaf4eaef, 0x00ee26b5515237f1, 0x5fe30829fdb950d3, 0x6ae7eda2661f8dcd, 0xe1f95510a46f9e97, 0xd4fdb09b3fc94389, 0x8bf09e07932224ab, 0xbef47b8c0884f9b5, 0x9b31fb7d1c80f529, 0xae351ef687262837, 0xf138306a2bcd4f15, 0xc43cd5e1b06b920b, 0x4f226d53721b8151, 0x7a2688d8e9bd5c4f, 0x252ba64445563b6d, 0x102f43cfdef0e673, 0x184ff17299218eb2, 0x2d4b14f9028753ac, 0x72463a65ae6c348e, 0x4742dfee35cae990, 0xcc5c675cf7bafaca, 0xf95882d76c1c27d4, 0xa655ac4bc0f740f6, 0x935149c05b519de8, 0xeddeada9e8ff59ce, 0xd8da4822735984d0, 0x87d766bedfb2e3f2, 0xb2d3833544143eec, 0x39cd3b8786642db6, 0x0cc9de0c1dc2f0a8, 0x53c4f090b129978a, 0x66c0151b2a8f4a94, 0x6ea0a7a66d5e2255, 0x5ba4422df6f8ff4b, 0x04a96cb15a139869, 0x31ad893ac1b54577, 0xbab3318803c5562d, 0x8fb7d40398638b33, 0xd0bafa9f3488ec11, 0xe5be1f14af2e310f, 0xc07b9fe5bb2a3d93, 0xf57f7a6e208ce08d, 0xaa7254f28c6787af, 0x9f76b17917c15ab1, 0x146809cbd5b149eb, 0x216cec404e1794f5, 0x7e61c2dce2fcf3d7, 0x4b652757795a2ec9, 0x430595ea3e8b4608, 0x76017061a52d9b16, 0x290c5efd09c6fc34, 0x1c08bb769260212a, 0x971603c450103270, 0xa212e64fcbb6ef6e, 0xfd1fc8d3675d884c, 0xc81b2d58fcfb5552, 0x4670b431c63cb183, 0x737451ba5d9a6c9d, 0x2c797f26f1710bbf, 0x197d9aad6ad7d6a1, 0x9263221fa8a7c5fb, 0xa767c794330118e5, 0xf86ae9089fea7fc7, 0xcd6e0c83044ca2d9, 0xc50ebe3e439dca18, 0xf00a5bb5d83b1706, 0xaf07752974d07024, 0x9a0390a2ef76ad3a, 0x111d28102d06be60, 0x2419cd9bb6a0637e, 0x7b14e3071a4b045c, 0x4e10068c81edd942, 0x6bd5867d95e9d5de, 0x5ed163f60e4f08c0, 0x01dc4d6aa2a46fe2, 0x34d8a8e13902b2fc, 0xbfc61053fb72a1a6, 0x8ac2f5d860d47cb8, 0xd5cfdb44cc3f1b9a, 0xe0cb3ecf5799c684, 0xe8ab8c721048ae45, 0xddaf69f98bee735b, 0x82a2476527051479, 0xb7a6a2eebca3c967, 0x3cb81a5c7ed3da3d, 0x09bcffd7e5750723, 0x56b1d14b499e6001, 0x63b534c0d238bd1f, 0x1d3ad0a961967939, 0x283e3522fa30a427, 0x77331bbe56dbc305, 0x4237fe35cd7d1e1b, 0xc92946870f0d0d41, 0xfc2da30c94abd05f, 0xa3208d903840b77d, 0x9624681ba3e66a63, 0x9e44daa6e43702a2, 0xab403f2d7f91dfbc, 0xf44d11b1d37ab89e, 0xc149f43a48dc6580, 0x4a574c888aac76da, 0x7f53a903110aabc4, 0x205e879fbde1cce6, 0x155a6214264711f8, 0x309fe2e532431d64, 0x059b076ea9e5c07a, 0x5a9629f2050ea758, 0x6f92cc799ea87a46, 0xe48c74cb5cd8691c, 0xd1889140c77eb402, 0x8e85bfdc6b95d320, 0xbb815a57f0330e3e, 0xb3e1e8eab7e266ff, 0x86e50d612c44bbe1, 0xd9e823fd80afdcc3, 0xececc6761b0901dd, 0x67f27ec4d9791287, 0x52f69b4f42dfcf99, 0x0dfbb5d3ee34a8bb, 0x38ff5058759275a5, 0xf0e47d00896920f7, 0xc5e0988b12cffde9, 0x9aedb617be249acb, 0xafe9539c258247d5, 0x24f7eb2ee7f2548f, 0x11f30ea57c548991, 0x4efe2039d0bfeeb3, 0x7bfac5b24b1933ad, 0x739a770f0cc85b6c, 0x469e9284976e8672, 0x1993bc183b85e150, 0x2c975993a0233c4e, 0xa789e12162532f14, 0x928d04aaf9f5f20a, 0xcd802a36551e9528, 0xf884cfbdceb84836, 0xdd414f4cdabc44aa, 0xe845aac7411a99b4, 0xb748845bedf1fe96, 0x824c61d076572388, 0x0952d962b42730d2, 0x3c563ce92f81edcc, 0x635b1275836a8aee, 0x565ff7fe18cc57f0, 0x5e3f45435f1d3f31, 0x6b3ba0c8c4bbe22f, 0x34368e546850850d, 0x01326bdff3f65813, 0x8a2cd36d31864b49, 0xbf2836e6aa209657, 0xe025187a06cbf175, 0xd521fdf19d6d2c6b, 0xabae19982ec3e84d, 0x9eaafc13b5653553, 0xc1a7d28f198e5271, 0xf4a3370482288f6f, 0x7fbd8fb640589c35, 0x4ab96a3ddbfe412b, 0x15b444a177152609, 0x20b0a12aecb3fb17, 0x28d01397ab6293d6, 0x1dd4f61c30c44ec8, 0x42d9d8809c2f29ea, 0x77dd3d0b0789f4f4, 0xfcc385b9c5f9e7ae, 0xc9c760325e5f3ab0, 0x96ca4eaef2b45d92, 0xa3ceab256912808c, 0x860b2bd47d168c10, 0xb30fce5fe6b0510e, 0xec02e0c34a5b362c, 0xd9060548d1fdeb32, 0x5218bdfa138df868, 0x671c5871882b2576, 0x381176ed24c04254, 0x0d159366bf669f4a, 0x057521dbf8b7f78b, 0x3071c45063112a95, 0x6f7ceacccffa4db7, 0x5a780f47545c90a9, 0xd166b7f5962c83f3, 0xe462527e0d8a5eed, 0xbb6f7ce2a16139cf, 0x8e6b99693ac7e4d1, ], [ 0x0000000000000000, 0xe39d1389931b9354, 0xec6301407ea0b5c3, 0x0ffe12c9edbb2697, 0xf39f24d3a5d6f8ed, 0x1002375a36cd6bb9, 0x1ffc2593db764d2e, 0xfc61361a486dde7a, 0xcc676ff4133a62b1, 0x2ffa7c7d8021f1e5, 0x20046eb46d9ad772, 0xc3997d3dfe814426, 0x3ff84b27b6ec9a5c, 0xdc6558ae25f70908, 0xd39b4a67c84c2f9f, 0x300659ee5b57bccb, 0xb397f9bb7ee35609, 0x500aea32edf8c55d, 0x5ff4f8fb0043e3ca, 0xbc69eb729358709e, 0x4008dd68db35aee4, 0xa395cee1482e3db0, 0xac6bdc28a5951b27, 0x4ff6cfa1368e8873, 0x7ff0964f6dd934b8, 0x9c6d85c6fec2a7ec, 0x9393970f1379817b, 0x700e84868062122f, 0x8c6fb29cc80fcc55, 0x6ff2a1155b145f01, 0x600cb3dcb6af7996, 0x8391a05525b4eac2, 0x4c76d525a5513f79, 0xafebc6ac364aac2d, 0xa015d465dbf18aba, 0x4388c7ec48ea19ee, 0xbfe9f1f60087c794, 0x5c74e27f939c54c0, 0x538af0b67e277257, 0xb017e33fed3ce103, 0x8011bad1b66b5dc8, 0x638ca9582570ce9c, 0x6c72bb91c8cbe80b, 0x8fefa8185bd07b5f, 0x738e9e0213bda525, 0x90138d8b80a63671, 0x9fed9f426d1d10e6, 0x7c708ccbfe0683b2, 0xffe12c9edbb26970, 0x1c7c3f1748a9fa24, 0x13822ddea512dcb3, 0xf01f3e5736094fe7, 0x0c7e084d7e64919d, 0xefe31bc4ed7f02c9, 0xe01d090d00c4245e, 0x03801a8493dfb70a, 0x3386436ac8880bc1, 0xd01b50e35b939895, 0xdfe5422ab628be02, 0x3c7851a325332d56, 0xc01967b96d5ef32c, 0x23847430fe456078, 0x2c7a66f913fe46ef, 0xcfe7757080e5d5bb, 0x98edaa4b4aa27ef2, 0x7b70b9c2d9b9eda6, 0x748eab0b3402cb31, 0x9713b882a7195865, 0x6b728e98ef74861f, 0x88ef9d117c6f154b, 0x87118fd891d433dc, 0x648c9c5102cfa088, 0x548ac5bf59981c43, 0xb717d636ca838f17, 0xb8e9c4ff2738a980, 0x5b74d776b4233ad4, 0xa715e16cfc4ee4ae, 0x4488f2e56f5577fa, 0x4b76e02c82ee516d, 0xa8ebf3a511f5c239, 0x2b7a53f0344128fb, 0xc8e74079a75abbaf, 0xc71952b04ae19d38, 0x24844139d9fa0e6c, 0xd8e577239197d016, 0x3b7864aa028c4342, 0x34867663ef3765d5, 0xd71b65ea7c2cf681, 0xe71d3c04277b4a4a, 0x04802f8db460d91e, 0x0b7e3d4459dbff89, 0xe8e32ecdcac06cdd, 0x148218d782adb2a7, 0xf71f0b5e11b621f3, 0xf8e11997fc0d0764, 0x1b7c0a1e6f169430, 0xd49b7f6eeff3418b, 0x37066ce77ce8d2df, 0x38f87e2e9153f448, 0xdb656da70248671c, 0x27045bbd4a25b966, 0xc4994834d93e2a32, 0xcb675afd34850ca5, 0x28fa4974a79e9ff1, 0x18fc109afcc9233a, 0xfb6103136fd2b06e, 0xf49f11da826996f9, 0x17020253117205ad, 0xeb633449591fdbd7, 0x08fe27c0ca044883, 0x0700350927bf6e14, 0xe49d2680b4a4fd40, 0x670c86d591101782, 0x8491955c020b84d6, 0x8b6f8795efb0a241, 0x68f2941c7cab3115, 0x9493a20634c6ef6f, 0x770eb18fa7dd7c3b, 0x78f0a3464a665aac, 0x9b6db0cfd97dc9f8, 0xab6be921822a7533, 0x48f6faa81131e667, 0x4708e861fc8ac0f0, 0xa495fbe86f9153a4, 0x58f4cdf227fc8dde, 0xbb69de7bb4e71e8a, 0xb497ccb2595c381d, 0x570adf3bca47ab49, 0x1a8272c5cdd36e8f, 0xf91f614c5ec8fddb, 0xf6e17385b373db4c, 0x157c600c20684818, 0xe91d561668059662, 0x0a80459ffb1e0536, 0x057e575616a523a1, 0xe6e344df85beb0f5, 0xd6e51d31dee90c3e, 0x35780eb84df29f6a, 0x3a861c71a049b9fd, 0xd91b0ff833522aa9, 0x257a39e27b3ff4d3, 0xc6e72a6be8246787, 0xc91938a2059f4110, 0x2a842b2b9684d244, 0xa9158b7eb3303886, 0x4a8898f7202babd2, 0x45768a3ecd908d45, 0xa6eb99b75e8b1e11, 0x5a8aafad16e6c06b, 0xb917bc2485fd533f, 0xb6e9aeed684675a8, 0x5574bd64fb5de6fc, 0x6572e48aa00a5a37, 0x86eff7033311c963, 0x8911e5cadeaaeff4, 0x6a8cf6434db17ca0, 0x96edc05905dca2da, 0x7570d3d096c7318e, 0x7a8ec1197b7c1719, 0x9913d290e867844d, 0x56f4a7e0688251f6, 0xb569b469fb99c2a2, 0xba97a6a01622e435, 0x590ab52985397761, 0xa56b8333cd54a91b, 0x46f690ba5e4f3a4f, 0x49088273b3f41cd8, 0xaa9591fa20ef8f8c, 0x9a93c8147bb83347, 0x790edb9de8a3a013, 0x76f0c95405188684, 0x956ddadd960315d0, 0x690cecc7de6ecbaa, 0x8a91ff4e4d7558fe, 0x856fed87a0ce7e69, 0x66f2fe0e33d5ed3d, 0xe5635e5b166107ff, 0x06fe4dd2857a94ab, 0x09005f1b68c1b23c, 0xea9d4c92fbda2168, 0x16fc7a88b3b7ff12, 0xf561690120ac6c46, 0xfa9f7bc8cd174ad1, 0x190268415e0cd985, 0x290431af055b654e, 0xca9922269640f61a, 0xc56730ef7bfbd08d, 0x26fa2366e8e043d9, 0xda9b157ca08d9da3, 0x390606f533960ef7, 0x36f8143cde2d2860, 0xd56507b54d36bb34, 0x826fd88e8771107d, 0x61f2cb07146a8329, 0x6e0cd9cef9d1a5be, 0x8d91ca476aca36ea, 0x71f0fc5d22a7e890, 0x926defd4b1bc7bc4, 0x9d93fd1d5c075d53, 0x7e0eee94cf1cce07, 0x4e08b77a944b72cc, 0xad95a4f30750e198, 0xa26bb63aeaebc70f, 0x41f6a5b379f0545b, 0xbd9793a9319d8a21, 0x5e0a8020a2861975, 0x51f492e94f3d3fe2, 0xb2698160dc26acb6, 0x31f82135f9924674, 0xd26532bc6a89d520, 0xdd9b20758732f3b7, 0x3e0633fc142960e3, 0xc26705e65c44be99, 0x21fa166fcf5f2dcd, 0x2e0404a622e40b5a, 0xcd99172fb1ff980e, 0xfd9f4ec1eaa824c5, 0x1e025d4879b3b791, 0x11fc4f8194089106, 0xf2615c0807130252, 0x0e006a124f7edc28, 0xed9d799bdc654f7c, 0xe2636b5231de69eb, 0x01fe78dba2c5fabf, 0xce190dab22202f04, 0x2d841e22b13bbc50, 0x227a0ceb5c809ac7, 0xc1e71f62cf9b0993, 0x3d86297887f6d7e9, 0xde1b3af114ed44bd, 0xd1e52838f956622a, 0x32783bb16a4df17e, 0x027e625f311a4db5, 0xe1e371d6a201dee1, 0xee1d631f4fbaf876, 0x0d807096dca16b22, 0xf1e1468c94ccb558, 0x127c550507d7260c, 0x1d8247ccea6c009b, 0xfe1f5445797793cf, 0x7d8ef4105cc3790d, 0x9e13e799cfd8ea59, 0x91edf5502263ccce, 0x7270e6d9b1785f9a, 0x8e11d0c3f91581e0, 0x6d8cc34a6a0e12b4, 0x6272d18387b53423, 0x81efc20a14aea777, 0xb1e99be44ff91bbc, 0x5274886ddce288e8, 0x5d8a9aa43159ae7f, 0xbe17892da2423d2b, 0x4276bf37ea2fe351, 0xa1ebacbe79347005, 0xae15be77948f5692, 0x4d88adfe0794c5c6, ], [ 0x0000000000000000, 0x62a95de6e302eff2, 0xc552bbcdc605dfe4, 0xa7fbe62b25073016, 0xa1fc51c8d49c2ca3, 0xc3550c2e379ec351, 0x64aeea051299f347, 0x0607b7e3f19b1cb5, 0x68a185c2f1afca2d, 0x0a08d82412ad25df, 0xadf33e0f37aa15c9, 0xcf5a63e9d4a8fa3b, 0xc95dd40a2533e68e, 0xabf489ecc631097c, 0x0c0f6fc7e336396a, 0x6ea632210034d698, 0xd1430b85e35f945a, 0xb3ea5663005d7ba8, 0x1411b048255a4bbe, 0x76b8edaec658a44c, 0x70bf5a4d37c3b8f9, 0x121607abd4c1570b, 0xb5ede180f1c6671d, 0xd744bc6612c488ef, 0xb9e28e4712f05e77, 0xdb4bd3a1f1f2b185, 0x7cb0358ad4f58193, 0x1e19686c37f76e61, 0x181edf8fc66c72d4, 0x7ab78269256e9d26, 0xdd4c64420069ad30, 0xbfe539a4e36b42c2, 0x89df31589e28bbdf, 0xeb766cbe7d2a542d, 0x4c8d8a95582d643b, 0x2e24d773bb2f8bc9, 0x282360904ab4977c, 0x4a8a3d76a9b6788e, 0xed71db5d8cb14898, 0x8fd886bb6fb3a76a, 0xe17eb49a6f8771f2, 0x83d7e97c8c859e00, 0x242c0f57a982ae16, 0x468552b14a8041e4, 0x4082e552bb1b5d51, 0x222bb8b45819b2a3, 0x85d05e9f7d1e82b5, 0xe77903799e1c6d47, 0x589c3add7d772f85, 0x3a35673b9e75c077, 0x9dce8110bb72f061, 0xff67dcf658701f93, 0xf9606b15a9eb0326, 0x9bc936f34ae9ecd4, 0x3c32d0d86feedcc2, 0x5e9b8d3e8cec3330, 0x303dbf1f8cd8e5a8, 0x5294e2f96fda0a5a, 0xf56f04d24add3a4c, 0x97c65934a9dfd5be, 0x91c1eed75844c90b, 0xf368b331bb4626f9, 0x5493551a9e4116ef, 0x363a08fc7d43f91d, 0x38e744e264c6e4d5, 0x5a4e190487c40b27, 0xfdb5ff2fa2c33b31, 0x9f1ca2c941c1d4c3, 0x991b152ab05ac876, 0xfbb248cc53582784, 0x5c49aee7765f1792, 0x3ee0f301955df860, 0x5046c12095692ef8, 0x32ef9cc6766bc10a, 0x95147aed536cf11c, 0xf7bd270bb06e1eee, 0xf1ba90e841f5025b, 0x9313cd0ea2f7eda9, 0x34e82b2587f0ddbf, 0x564176c364f2324d, 0xe9a44f678799708f, 0x8b0d1281649b9f7d, 0x2cf6f4aa419caf6b, 0x4e5fa94ca29e4099, 0x48581eaf53055c2c, 0x2af14349b007b3de, 0x8d0aa562950083c8, 0xefa3f88476026c3a, 0x8105caa57636baa2, 0xe3ac974395345550, 0x44577168b0336546, 0x26fe2c8e53318ab4, 0x20f99b6da2aa9601, 0x4250c68b41a879f3, 0xe5ab20a064af49e5, 0x87027d4687ada617, 0xb13875bafaee5f0a, 0xd391285c19ecb0f8, 0x746ace773ceb80ee, 0x16c39391dfe96f1c, 0x10c424722e7273a9, 0x726d7994cd709c5b, 0xd5969fbfe877ac4d, 0xb73fc2590b7543bf, 0xd999f0780b419527, 0xbb30ad9ee8437ad5, 0x1ccb4bb5cd444ac3, 0x7e6216532e46a531, 0x7865a1b0dfddb984, 0x1accfc563cdf5676, 0xbd371a7d19d86660, 0xdf9e479bfada8992, 0x607b7e3f19b1cb50, 0x02d223d9fab324a2, 0xa529c5f2dfb414b4, 0xc78098143cb6fb46, 0xc1872ff7cd2de7f3, 0xa32e72112e2f0801, 0x04d5943a0b283817, 0x667cc9dce82ad7e5, 0x08dafbfde81e017d, 0x6a73a61b0b1cee8f, 0xcd8840302e1bde99, 0xaf211dd6cd19316b, 0xa926aa353c822dde, 0xcb8ff7d3df80c22c, 0x6c7411f8fa87f23a, 0x0edd4c1e19851dc8, 0x71ce89c4c98dc9aa, 0x1367d4222a8f2658, 0xb49c32090f88164e, 0xd6356fefec8af9bc, 0xd032d80c1d11e509, 0xb29b85eafe130afb, 0x156063c1db143aed, 0x77c93e273816d51f, 0x196f0c0638220387, 0x7bc651e0db20ec75, 0xdc3db7cbfe27dc63, 0xbe94ea2d1d253391, 0xb8935dceecbe2f24, 0xda3a00280fbcc0d6, 0x7dc1e6032abbf0c0, 0x1f68bbe5c9b91f32, 0xa08d82412ad25df0, 0xc224dfa7c9d0b202, 0x65df398cecd78214, 0x0776646a0fd56de6, 0x0171d389fe4e7153, 0x63d88e6f1d4c9ea1, 0xc4236844384baeb7, 0xa68a35a2db494145, 0xc82c0783db7d97dd, 0xaa855a65387f782f, 0x0d7ebc4e1d784839, 0x6fd7e1a8fe7aa7cb, 0x69d0564b0fe1bb7e, 0x0b790badece3548c, 0xac82ed86c9e4649a, 0xce2bb0602ae68b68, 0xf811b89c57a57275, 0x9ab8e57ab4a79d87, 0x3d43035191a0ad91, 0x5fea5eb772a24263, 0x59ede95483395ed6, 0x3b44b4b2603bb124, 0x9cbf5299453c8132, 0xfe160f7fa63e6ec0, 0x90b03d5ea60ab858, 0xf21960b8450857aa, 0x55e28693600f67bc, 0x374bdb75830d884e, 0x314c6c96729694fb, 0x53e5317091947b09, 0xf41ed75bb4934b1f, 0x96b78abd5791a4ed, 0x2952b319b4fae62f, 0x4bfbeeff57f809dd, 0xec0008d472ff39cb, 0x8ea9553291fdd639, 0x88aee2d16066ca8c, 0xea07bf378364257e, 0x4dfc591ca6631568, 0x2f5504fa4561fa9a, 0x41f336db45552c02, 0x235a6b3da657c3f0, 0x84a18d168350f3e6, 0xe608d0f060521c14, 0xe00f671391c900a1, 0x82a63af572cbef53, 0x255ddcde57ccdf45, 0x47f48138b4ce30b7, 0x4929cd26ad4b2d7f, 0x2b8090c04e49c28d, 0x8c7b76eb6b4ef29b, 0xeed22b0d884c1d69, 0xe8d59cee79d701dc, 0x8a7cc1089ad5ee2e, 0x2d872723bfd2de38, 0x4f2e7ac55cd031ca, 0x218848e45ce4e752, 0x43211502bfe608a0, 0xe4daf3299ae138b6, 0x8673aecf79e3d744, 0x8074192c8878cbf1, 0xe2dd44ca6b7a2403, 0x4526a2e14e7d1415, 0x278fff07ad7ffbe7, 0x986ac6a34e14b925, 0xfac39b45ad1656d7, 0x5d387d6e881166c1, 0x3f9120886b138933, 0x3996976b9a889586, 0x5b3fca8d798a7a74, 0xfcc42ca65c8d4a62, 0x9e6d7140bf8fa590, 0xf0cb4361bfbb7308, 0x92621e875cb99cfa, 0x3599f8ac79beacec, 0x5730a54a9abc431e, 0x513712a96b275fab, 0x339e4f4f8825b059, 0x9465a964ad22804f, 0xf6ccf4824e206fbd, 0xc0f6fc7e336396a0, 0xa25fa198d0617952, 0x05a447b3f5664944, 0x670d1a551664a6b6, 0x610aadb6e7ffba03, 0x03a3f05004fd55f1, 0xa458167b21fa65e7, 0xc6f14b9dc2f88a15, 0xa85779bcc2cc5c8d, 0xcafe245a21ceb37f, 0x6d05c27104c98369, 0x0fac9f97e7cb6c9b, 0x09ab28741650702e, 0x6b027592f5529fdc, 0xccf993b9d055afca, 0xae50ce5f33574038, 0x11b5f7fbd03c02fa, 0x731caa1d333eed08, 0xd4e74c361639dd1e, 0xb64e11d0f53b32ec, 0xb049a63304a02e59, 0xd2e0fbd5e7a2c1ab, 0x751b1dfec2a5f1bd, 0x17b2401821a71e4f, 0x791472392193c8d7, 0x1bbd2fdfc2912725, 0xbc46c9f4e7961733, 0xdeef94120494f8c1, 0xd8e823f1f50fe474, 0xba417e17160d0b86, 0x1dba983c330a3b90, 0x7f13c5dad008d462, ], [ 0x0000000000000000, 0x381d0015c96f4444, 0x703a002b92de8888, 0x4827003e5bb1cccc, 0xe074005725bd1110, 0xd8690042ecd25554, 0x904e007cb7639998, 0xa85300697e0cdddc, 0xebb126fd13edb14b, 0xd3ac26e8da82f50f, 0x9b8b26d6813339c3, 0xa39626c3485c7d87, 0x0bc526aa3650a05b, 0x33d826bfff3fe41f, 0x7bff2681a48e28d3, 0x43e226946de16c97, 0xfc3b6ba97f4cf1fd, 0xc4266bbcb623b5b9, 0x8c016b82ed927975, 0xb41c6b9724fd3d31, 0x1c4f6bfe5af1e0ed, 0x24526beb939ea4a9, 0x6c756bd5c82f6865, 0x54686bc001402c21, 0x178a4d546ca140b6, 0x2f974d41a5ce04f2, 0x67b04d7ffe7fc83e, 0x5fad4d6a37108c7a, 0xf7fe4d03491c51a6, 0xcfe34d16807315e2, 0x87c44d28dbc2d92e, 0xbfd94d3d12ad9d6a, 0xd32ff101a60e7091, 0xeb32f1146f6134d5, 0xa315f12a34d0f819, 0x9b08f13ffdbfbc5d, 0x335bf15683b36181, 0x0b46f1434adc25c5, 0x4361f17d116de909, 0x7b7cf168d802ad4d, 0x389ed7fcb5e3c1da, 0x0083d7e97c8c859e, 0x48a4d7d7273d4952, 0x70b9d7c2ee520d16, 0xd8ead7ab905ed0ca, 0xe0f7d7be5931948e, 0xa8d0d78002805842, 0x90cdd795cbef1c06, 0x2f149aa8d942816c, 0x17099abd102dc528, 0x5f2e9a834b9c09e4, 0x67339a9682f34da0, 0xcf609afffcff907c, 0xf77d9aea3590d438, 0xbf5a9ad46e2118f4, 0x87479ac1a74e5cb0, 0xc4a5bc55caaf3027, 0xfcb8bc4003c07463, 0xb49fbc7e5871b8af, 0x8c82bc6b911efceb, 0x24d1bc02ef122137, 0x1cccbc17267d6573, 0x54ebbc297dcca9bf, 0x6cf6bc3cb4a3edfb, 0x8d06c450148b7249, 0xb51bc445dde4360d, 0xfd3cc47b8655fac1, 0xc521c46e4f3abe85, 0x6d72c40731366359, 0x556fc412f859271d, 0x1d48c42ca3e8ebd1, 0x2555c4396a87af95, 0x66b7e2ad0766c302, 0x5eaae2b8ce098746, 0x168de28695b84b8a, 0x2e90e2935cd70fce, 0x86c3e2fa22dbd212, 0xbedee2efebb49656, 0xf6f9e2d1b0055a9a, 0xcee4e2c4796a1ede, 0x713daff96bc783b4, 0x4920afeca2a8c7f0, 0x0107afd2f9190b3c, 0x391aafc730764f78, 0x9149afae4e7a92a4, 0xa954afbb8715d6e0, 0xe173af85dca41a2c, 0xd96eaf9015cb5e68, 0x9a8c8904782a32ff, 0xa2918911b14576bb, 0xeab6892feaf4ba77, 0xd2ab893a239bfe33, 0x7af889535d9723ef, 0x42e5894694f867ab, 0x0ac28978cf49ab67, 0x32df896d0626ef23, 0x5e293551b28502d8, 0x663435447bea469c, 0x2e13357a205b8a50, 0x160e356fe934ce14, 0xbe5d3506973813c8, 0x864035135e57578c, 0xce67352d05e69b40, 0xf67a3538cc89df04, 0xb59813aca168b393, 0x8d8513b96807f7d7, 0xc5a2138733b63b1b, 0xfdbf1392fad97f5f, 0x55ec13fb84d5a283, 0x6df113ee4dbae6c7, 0x25d613d0160b2a0b, 0x1dcb13c5df646e4f, 0xa2125ef8cdc9f325, 0x9a0f5eed04a6b761, 0xd2285ed35f177bad, 0xea355ec696783fe9, 0x42665eafe874e235, 0x7a7b5eba211ba671, 0x325c5e847aaa6abd, 0x0a415e91b3c52ef9, 0x49a37805de24426e, 0x71be7810174b062a, 0x3999782e4cfacae6, 0x0184783b85958ea2, 0xa9d77852fb99537e, 0x91ca784732f6173a, 0xd9ed78796947dbf6, 0xe1f0786ca0289fb2, 0x3154aef3718177f9, 0x0949aee6b8ee33bd, 0x416eaed8e35fff71, 0x7973aecd2a30bb35, 0xd120aea4543c66e9, 0xe93daeb19d5322ad, 0xa11aae8fc6e2ee61, 0x9907ae9a0f8daa25, 0xdae5880e626cc6b2, 0xe2f8881bab0382f6, 0xaadf8825f0b24e3a, 0x92c2883039dd0a7e, 0x3a91885947d1d7a2, 0x028c884c8ebe93e6, 0x4aab8872d50f5f2a, 0x72b688671c601b6e, 0xcd6fc55a0ecd8604, 0xf572c54fc7a2c240, 0xbd55c5719c130e8c, 0x8548c564557c4ac8, 0x2d1bc50d2b709714, 0x1506c518e21fd350, 0x5d21c526b9ae1f9c, 0x653cc53370c15bd8, 0x26dee3a71d20374f, 0x1ec3e3b2d44f730b, 0x56e4e38c8ffebfc7, 0x6ef9e3994691fb83, 0xc6aae3f0389d265f, 0xfeb7e3e5f1f2621b, 0xb690e3dbaa43aed7, 0x8e8de3ce632cea93, 0xe27b5ff2d78f0768, 0xda665fe71ee0432c, 0x92415fd945518fe0, 0xaa5c5fcc8c3ecba4, 0x020f5fa5f2321678, 0x3a125fb03b5d523c, 0x72355f8e60ec9ef0, 0x4a285f9ba983dab4, 0x09ca790fc462b623, 0x31d7791a0d0df267, 0x79f0792456bc3eab, 0x41ed79319fd37aef, 0xe9be7958e1dfa733, 0xd1a3794d28b0e377, 0x9984797373012fbb, 0xa1997966ba6e6bff, 0x1e40345ba8c3f695, 0x265d344e61acb2d1, 0x6e7a34703a1d7e1d, 0x56673465f3723a59, 0xfe34340c8d7ee785, 0xc62934194411a3c1, 0x8e0e34271fa06f0d, 0xb6133432d6cf2b49, 0xf5f112a6bb2e47de, 0xcdec12b37241039a, 0x85cb128d29f0cf56, 0xbdd61298e09f8b12, 0x158512f19e9356ce, 0x2d9812e457fc128a, 0x65bf12da0c4dde46, 0x5da212cfc5229a02, 0xbc526aa3650a05b0, 0x844f6ab6ac6541f4, 0xcc686a88f7d48d38, 0xf4756a9d3ebbc97c, 0x5c266af440b714a0, 0x643b6ae189d850e4, 0x2c1c6adfd2699c28, 0x14016aca1b06d86c, 0x57e34c5e76e7b4fb, 0x6ffe4c4bbf88f0bf, 0x27d94c75e4393c73, 0x1fc44c602d567837, 0xb7974c09535aa5eb, 0x8f8a4c1c9a35e1af, 0xc7ad4c22c1842d63, 0xffb04c3708eb6927, 0x4069010a1a46f44d, 0x7874011fd329b009, 0x3053012188987cc5, 0x084e013441f73881, 0xa01d015d3ffbe55d, 0x98000148f694a119, 0xd0270176ad256dd5, 0xe83a0163644a2991, 0xabd827f709ab4506, 0x93c527e2c0c40142, 0xdbe227dc9b75cd8e, 0xe3ff27c9521a89ca, 0x4bac27a02c165416, 0x73b127b5e5791052, 0x3b96278bbec8dc9e, 0x038b279e77a798da, 0x6f7d9ba2c3047521, 0x57609bb70a6b3165, 0x1f479b8951dafda9, 0x275a9b9c98b5b9ed, 0x8f099bf5e6b96431, 0xb7149be02fd62075, 0xff339bde7467ecb9, 0xc72e9bcbbd08a8fd, 0x84ccbd5fd0e9c46a, 0xbcd1bd4a1986802e, 0xf4f6bd7442374ce2, 0xccebbd618b5808a6, 0x64b8bd08f554d57a, 0x5ca5bd1d3c3b913e, 0x1482bd23678a5df2, 0x2c9fbd36aee519b6, 0x9346f00bbc4884dc, 0xab5bf01e7527c098, 0xe37cf0202e960c54, 0xdb61f035e7f94810, 0x7332f05c99f595cc, 0x4b2ff049509ad188, 0x0308f0770b2b1d44, 0x3b15f062c2445900, 0x78f7d6f6afa53597, 0x40ead6e366ca71d3, 0x08cdd6dd3d7bbd1f, 0x30d0d6c8f414f95b, 0x9883d6a18a182487, 0xa09ed6b4437760c3, 0xe8b9d68a18c6ac0f, 0xd0a4d69fd1a9e84b, ], [ 0x0000000000000000, 0x1f7a22cef7e6f4a4, 0x3ef4459defcde948, 0x218e6753182b1dec, 0x7de88b3bdf9bd290, 0x6292a9f5287d2634, 0x431ccea630563bd8, 0x5c66ec68c7b0cf7c, 0xfbd11677bf37a520, 0xe4ab34b948d15184, 0xc52553ea50fa4c68, 0xda5f7124a71cb8cc, 0x86399d4c60ac77b0, 0x9943bf82974a8314, 0xb8cdd8d18f619ef8, 0xa7b7fa1f78876a5c, 0xdcfb0abc26f8d92b, 0xc3812872d11e2d8f, 0xe20f4f21c9353063, 0xfd756def3ed3c4c7, 0xa1138187f9630bbb, 0xbe69a3490e85ff1f, 0x9fe7c41a16aee2f3, 0x809de6d4e1481657, 0x272a1ccb99cf7c0b, 0x38503e056e2988af, 0x19de595676029543, 0x06a47b9881e461e7, 0x5ac297f04654ae9b, 0x45b8b53eb1b25a3f, 0x6436d26da99947d3, 0x7b4cf0a35e7fb377, 0x92af332b1566213d, 0x8dd511e5e280d599, 0xac5b76b6faabc875, 0xb32154780d4d3cd1, 0xef47b810cafdf3ad, 0xf03d9ade3d1b0709, 0xd1b3fd8d25301ae5, 0xcec9df43d2d6ee41, 0x697e255caa51841d, 0x760407925db770b9, 0x578a60c1459c6d55, 0x48f0420fb27a99f1, 0x1496ae6775ca568d, 0x0bec8ca9822ca229, 0x2a62ebfa9a07bfc5, 0x3518c9346de14b61, 0x4e543997339ef816, 0x512e1b59c4780cb2, 0x70a07c0adc53115e, 0x6fda5ec42bb5e5fa, 0x33bcb2acec052a86, 0x2cc690621be3de22, 0x0d48f73103c8c3ce, 0x1232d5fff42e376a, 0xb5852fe08ca95d36, 0xaaff0d2e7b4fa992, 0x8b716a7d6364b47e, 0x940b48b3948240da, 0xc86da4db53328fa6, 0xd7178615a4d47b02, 0xf699e146bcff66ee, 0xe9e3c3884b19924a, 0x0e074005725bd111, 0x117d62cb85bd25b5, 0x30f305989d963859, 0x2f8927566a70ccfd, 0x73efcb3eadc00381, 0x6c95e9f05a26f725, 0x4d1b8ea3420deac9, 0x5261ac6db5eb1e6d, 0xf5d65672cd6c7431, 0xeaac74bc3a8a8095, 0xcb2213ef22a19d79, 0xd4583121d54769dd, 0x883edd4912f7a6a1, 0x9744ff87e5115205, 0xb6ca98d4fd3a4fe9, 0xa9b0ba1a0adcbb4d, 0xd2fc4ab954a3083a, 0xcd866877a345fc9e, 0xec080f24bb6ee172, 0xf3722dea4c8815d6, 0xaf14c1828b38daaa, 0xb06ee34c7cde2e0e, 0x91e0841f64f533e2, 0x8e9aa6d19313c746, 0x292d5cceeb94ad1a, 0x36577e001c7259be, 0x17d9195304594452, 0x08a33b9df3bfb0f6, 0x54c5d7f5340f7f8a, 0x4bbff53bc3e98b2e, 0x6a319268dbc296c2, 0x754bb0a62c246266, 0x9ca8732e673df02c, 0x83d251e090db0488, 0xa25c36b388f01964, 0xbd26147d7f16edc0, 0xe140f815b8a622bc, 0xfe3adadb4f40d618, 0xdfb4bd88576bcbf4, 0xc0ce9f46a08d3f50, 0x67796559d80a550c, 0x780347972feca1a8, 0x598d20c437c7bc44, 0x46f7020ac02148e0, 0x1a91ee620791879c, 0x05ebccacf0777338, 0x2465abffe85c6ed4, 0x3b1f89311fba9a70, 0x4053799241c52907, 0x5f295b5cb623dda3, 0x7ea73c0fae08c04f, 0x61dd1ec159ee34eb, 0x3dbbf2a99e5efb97, 0x22c1d06769b80f33, 0x034fb734719312df, 0x1c3595fa8675e67b, 0xbb826fe5fef28c27, 0xa4f84d2b09147883, 0x85762a78113f656f, 0x9a0c08b6e6d991cb, 0xc66ae4de21695eb7, 0xd910c610d68faa13, 0xf89ea143cea4b7ff, 0xe7e4838d3942435b, 0x1c0e800ae4b7a222, 0x0374a2c413515686, 0x22fac5970b7a4b6a, 0x3d80e759fc9cbfce, 0x61e60b313b2c70b2, 0x7e9c29ffccca8416, 0x5f124eacd4e199fa, 0x40686c6223076d5e, 0xe7df967d5b800702, 0xf8a5b4b3ac66f3a6, 0xd92bd3e0b44dee4a, 0xc651f12e43ab1aee, 0x9a371d46841bd592, 0x854d3f8873fd2136, 0xa4c358db6bd63cda, 0xbbb97a159c30c87e, 0xc0f58ab6c24f7b09, 0xdf8fa87835a98fad, 0xfe01cf2b2d829241, 0xe17bede5da6466e5, 0xbd1d018d1dd4a999, 0xa2672343ea325d3d, 0x83e94410f21940d1, 0x9c9366de05ffb475, 0x3b249cc17d78de29, 0x245ebe0f8a9e2a8d, 0x05d0d95c92b53761, 0x1aaafb926553c3c5, 0x46cc17faa2e30cb9, 0x59b635345505f81d, 0x783852674d2ee5f1, 0x674270a9bac81155, 0x8ea1b321f1d1831f, 0x91db91ef063777bb, 0xb055f6bc1e1c6a57, 0xaf2fd472e9fa9ef3, 0xf349381a2e4a518f, 0xec331ad4d9aca52b, 0xcdbd7d87c187b8c7, 0xd2c75f4936614c63, 0x7570a5564ee6263f, 0x6a0a8798b900d29b, 0x4b84e0cba12bcf77, 0x54fec20556cd3bd3, 0x08982e6d917df4af, 0x17e20ca3669b000b, 0x366c6bf07eb01de7, 0x2916493e8956e943, 0x525ab99dd7295a34, 0x4d209b5320cfae90, 0x6caefc0038e4b37c, 0x73d4dececf0247d8, 0x2fb232a608b288a4, 0x30c81068ff547c00, 0x1146773be77f61ec, 0x0e3c55f510999548, 0xa98bafea681eff14, 0xb6f18d249ff80bb0, 0x977fea7787d3165c, 0x8805c8b97035e2f8, 0xd46324d1b7852d84, 0xcb19061f4063d920, 0xea97614c5848c4cc, 0xf5ed4382afae3068, 0x1209c00f96ec7333, 0x0d73e2c1610a8797, 0x2cfd859279219a7b, 0x3387a75c8ec76edf, 0x6fe14b344977a1a3, 0x709b69fabe915507, 0x51150ea9a6ba48eb, 0x4e6f2c67515cbc4f, 0xe9d8d67829dbd613, 0xf6a2f4b6de3d22b7, 0xd72c93e5c6163f5b, 0xc856b12b31f0cbff, 0x94305d43f6400483, 0x8b4a7f8d01a6f027, 0xaac418de198dedcb, 0xb5be3a10ee6b196f, 0xcef2cab3b014aa18, 0xd188e87d47f25ebc, 0xf0068f2e5fd94350, 0xef7cade0a83fb7f4, 0xb31a41886f8f7888, 0xac60634698698c2c, 0x8dee0415804291c0, 0x929426db77a46564, 0x3523dcc40f230f38, 0x2a59fe0af8c5fb9c, 0x0bd79959e0eee670, 0x14adbb97170812d4, 0x48cb57ffd0b8dda8, 0x57b17531275e290c, 0x763f12623f7534e0, 0x694530acc893c044, 0x80a6f324838a520e, 0x9fdcd1ea746ca6aa, 0xbe52b6b96c47bb46, 0xa12894779ba14fe2, 0xfd4e781f5c11809e, 0xe2345ad1abf7743a, 0xc3ba3d82b3dc69d6, 0xdcc01f4c443a9d72, 0x7b77e5533cbdf72e, 0x640dc79dcb5b038a, 0x4583a0ced3701e66, 0x5af982002496eac2, 0x069f6e68e32625be, 0x19e54ca614c0d11a, 0x386b2bf50cebccf6, 0x2711093bfb0d3852, 0x5c5df998a5728b25, 0x4327db5652947f81, 0x62a9bc054abf626d, 0x7dd39ecbbd5996c9, 0x21b572a37ae959b5, 0x3ecf506d8d0fad11, 0x1f41373e9524b0fd, 0x003b15f062c24459, 0xa78cefef1a452e05, 0xb8f6cd21eda3daa1, 0x9978aa72f588c74d, 0x860288bc026e33e9, 0xda6464d4c5defc95, 0xc51e461a32380831, 0xe49021492a1315dd, 0xfbea0387ddf5e179, ], [ 0x0000000000000000, 0xaf9af20feb8146cc, 0x746cc24c8f951ef3, 0xdbf630436414583f, 0xe8d984991f2a3de6, 0x47437696f4ab7b2a, 0x9cb546d590bf2315, 0x332fb4da7b3e65d9, 0xfaea2f6166c3e8a7, 0x5570dd6e8d42ae6b, 0x8e86ed2de956f654, 0x211c1f2202d7b098, 0x1233abf879e9d541, 0xbda959f79268938d, 0x665f69b4f67ccbb2, 0xc9c59bbb1dfd8d7e, 0xde8d789195104225, 0x71178a9e7e9104e9, 0xaae1badd1a855cd6, 0x057b48d2f1041a1a, 0x3654fc088a3a7fc3, 0x99ce0e0761bb390f, 0x42383e4405af6130, 0xeda2cc4bee2e27fc, 0x246757f0f3d3aa82, 0x8bfda5ff1852ec4e, 0x500b95bc7c46b471, 0xff9167b397c7f2bd, 0xccbed369ecf99764, 0x632421660778d1a8, 0xb8d21125636c8997, 0x1748e32a88edcf5b, 0x9643d77072b71721, 0x39d9257f993651ed, 0xe22f153cfd2209d2, 0x4db5e73316a34f1e, 0x7e9a53e96d9d2ac7, 0xd100a1e6861c6c0b, 0x0af691a5e2083434, 0xa56c63aa098972f8, 0x6ca9f8111474ff86, 0xc3330a1efff5b94a, 0x18c53a5d9be1e175, 0xb75fc8527060a7b9, 0x84707c880b5ec260, 0x2bea8e87e0df84ac, 0xf01cbec484cbdc93, 0x5f864ccb6f4a9a5f, 0x48ceafe1e7a75504, 0xe7545dee0c2613c8, 0x3ca26dad68324bf7, 0x93389fa283b30d3b, 0xa0172b78f88d68e2, 0x0f8dd977130c2e2e, 0xd47be93477187611, 0x7be11b3b9c9930dd, 0xb22480808164bda3, 0x1dbe728f6ae5fb6f, 0xc64842cc0ef1a350, 0x69d2b0c3e570e59c, 0x5afd04199e4e8045, 0xf567f61675cfc689, 0x2e91c65511db9eb6, 0x810b345afa5ad87a, 0x07de88b3bdf9bd29, 0xa8447abc5678fbe5, 0x73b24aff326ca3da, 0xdc28b8f0d9ede516, 0xef070c2aa2d380cf, 0x409dfe254952c603, 0x9b6bce662d469e3c, 0x34f13c69c6c7d8f0, 0xfd34a7d2db3a558e, 0x52ae55dd30bb1342, 0x8958659e54af4b7d, 0x26c29791bf2e0db1, 0x15ed234bc4106868, 0xba77d1442f912ea4, 0x6181e1074b85769b, 0xce1b1308a0043057, 0xd953f02228e9ff0c, 0x76c9022dc368b9c0, 0xad3f326ea77ce1ff, 0x02a5c0614cfda733, 0x318a74bb37c3c2ea, 0x9e1086b4dc428426, 0x45e6b6f7b856dc19, 0xea7c44f853d79ad5, 0x23b9df434e2a17ab, 0x8c232d4ca5ab5167, 0x57d51d0fc1bf0958, 0xf84fef002a3e4f94, 0xcb605bda51002a4d, 0x64faa9d5ba816c81, 0xbf0c9996de9534be, 0x10966b9935147272, 0x919d5fc3cf4eaa08, 0x3e07adcc24cfecc4, 0xe5f19d8f40dbb4fb, 0x4a6b6f80ab5af237, 0x7944db5ad06497ee, 0xd6de29553be5d122, 0x0d2819165ff1891d, 0xa2b2eb19b470cfd1, 0x6b7770a2a98d42af, 0xc4ed82ad420c0463, 0x1f1bb2ee26185c5c, 0xb08140e1cd991a90, 0x83aef43bb6a77f49, 0x2c3406345d263985, 0xf7c23677393261ba, 0x5858c478d2b32776, 0x4f1027525a5ee82d, 0xe08ad55db1dfaee1, 0x3b7ce51ed5cbf6de, 0x94e617113e4ab012, 0xa7c9a3cb4574d5cb, 0x085351c4aef59307, 0xd3a56187cae1cb38, 0x7c3f938821608df4, 0xb5fa08333c9d008a, 0x1a60fa3cd71c4646, 0xc196ca7fb3081e79, 0x6e0c3870588958b5, 0x5d238caa23b73d6c, 0xf2b97ea5c8367ba0, 0x294f4ee6ac22239f, 0x86d5bce947a36553, 0x0fbd11677bf37a52, 0xa027e36890723c9e, 0x7bd1d32bf46664a1, 0xd44b21241fe7226d, 0xe76495fe64d947b4, 0x48fe67f18f580178, 0x930857b2eb4c5947, 0x3c92a5bd00cd1f8b, 0xf5573e061d3092f5, 0x5acdcc09f6b1d439, 0x813bfc4a92a58c06, 0x2ea10e457924caca, 0x1d8eba9f021aaf13, 0xb2144890e99be9df, 0x69e278d38d8fb1e0, 0xc6788adc660ef72c, 0xd13069f6eee33877, 0x7eaa9bf905627ebb, 0xa55cabba61762684, 0x0ac659b58af76048, 0x39e9ed6ff1c90591, 0x96731f601a48435d, 0x4d852f237e5c1b62, 0xe21fdd2c95dd5dae, 0x2bda46978820d0d0, 0x8440b49863a1961c, 0x5fb684db07b5ce23, 0xf02c76d4ec3488ef, 0xc303c20e970aed36, 0x6c9930017c8babfa, 0xb76f0042189ff3c5, 0x18f5f24df31eb509, 0x99fec61709446d73, 0x36643418e2c52bbf, 0xed92045b86d17380, 0x4208f6546d50354c, 0x7127428e166e5095, 0xdebdb081fdef1659, 0x054b80c299fb4e66, 0xaad172cd727a08aa, 0x6314e9766f8785d4, 0xcc8e1b798406c318, 0x17782b3ae0129b27, 0xb8e2d9350b93ddeb, 0x8bcd6def70adb832, 0x24579fe09b2cfefe, 0xffa1afa3ff38a6c1, 0x503b5dac14b9e00d, 0x4773be869c542f56, 0xe8e94c8977d5699a, 0x331f7cca13c131a5, 0x9c858ec5f8407769, 0xafaa3a1f837e12b0, 0x0030c81068ff547c, 0xdbc6f8530ceb0c43, 0x745c0a5ce76a4a8f, 0xbd9991e7fa97c7f1, 0x120363e81116813d, 0xc9f553ab7502d902, 0x666fa1a49e839fce, 0x5540157ee5bdfa17, 0xfadae7710e3cbcdb, 0x212cd7326a28e4e4, 0x8eb6253d81a9a228, 0x086399d4c60ac77b, 0xa7f96bdb2d8b81b7, 0x7c0f5b98499fd988, 0xd395a997a21e9f44, 0xe0ba1d4dd920fa9d, 0x4f20ef4232a1bc51, 0x94d6df0156b5e46e, 0x3b4c2d0ebd34a2a2, 0xf289b6b5a0c92fdc, 0x5d1344ba4b486910, 0x86e574f92f5c312f, 0x297f86f6c4dd77e3, 0x1a50322cbfe3123a, 0xb5cac023546254f6, 0x6e3cf06030760cc9, 0xc1a6026fdbf74a05, 0xd6eee145531a855e, 0x7974134ab89bc392, 0xa2822309dc8f9bad, 0x0d18d106370edd61, 0x3e3765dc4c30b8b8, 0x91ad97d3a7b1fe74, 0x4a5ba790c3a5a64b, 0xe5c1559f2824e087, 0x2c04ce2435d96df9, 0x839e3c2bde582b35, 0x58680c68ba4c730a, 0xf7f2fe6751cd35c6, 0xc4dd4abd2af3501f, 0x6b47b8b2c17216d3, 0xb0b188f1a5664eec, 0x1f2b7afe4ee70820, 0x9e204ea4b4bdd05a, 0x31babcab5f3c9696, 0xea4c8ce83b28cea9, 0x45d67ee7d0a98865, 0x76f9ca3dab97edbc, 0xd96338324016ab70, 0x029508712402f34f, 0xad0ffa7ecf83b583, 0x64ca61c5d27e38fd, 0xcb5093ca39ff7e31, 0x10a6a3895deb260e, 0xbf3c5186b66a60c2, 0x8c13e55ccd54051b, 0x2389175326d543d7, 0xf87f271042c11be8, 0x57e5d51fa9405d24, 0x40ad363521ad927f, 0xef37c43aca2cd4b3, 0x34c1f479ae388c8c, 0x9b5b067645b9ca40, 0xa874b2ac3e87af99, 0x07ee40a3d506e955, 0xdc1870e0b112b16a, 0x738282ef5a93f7a6, 0xba471954476e7ad8, 0x15ddeb5bacef3c14, 0xce2bdb18c8fb642b, 0x61b12917237a22e7, 0x529e9dcd5844473e, 0xfd046fc2b3c501f2, 0x26f25f81d7d159cd, 0x8968ad8e3c501f01, ], [ 0x0000000000000000, 0x2169daa1299b2d66, 0x42d3b54253365acc, 0x63ba6fe37aad77aa, 0x85a76a84a66cb598, 0xa4ceb0258ff798fe, 0xc774dfc6f55aef54, 0xe61d0567dcc1c232, 0x2017f35a144ef85b, 0x017e29fb3dd5d53d, 0x62c446184778a297, 0x43ad9cb96ee38ff1, 0xa5b099deb2224dc3, 0x84d9437f9bb960a5, 0xe7632c9ce114170f, 0xc60af63dc88f3a69, 0x402fe6b4289df0b6, 0x61463c150106ddd0, 0x02fc53f67babaa7a, 0x239589575230871c, 0xc5888c308ef1452e, 0xe4e15691a76a6848, 0x875b3972ddc71fe2, 0xa632e3d3f45c3284, 0x603815ee3cd308ed, 0x4151cf4f1548258b, 0x22eba0ac6fe55221, 0x03827a0d467e7f47, 0xe59f7f6a9abfbd75, 0xc4f6a5cbb3249013, 0xa74cca28c989e7b9, 0x86251089e012cadf, 0x805fcd68513be16c, 0xa13617c978a0cc0a, 0xc28c782a020dbba0, 0xe3e5a28b2b9696c6, 0x05f8a7ecf75754f4, 0x24917d4ddecc7992, 0x472b12aea4610e38, 0x6642c80f8dfa235e, 0xa0483e3245751937, 0x8121e4936cee3451, 0xe29b8b70164343fb, 0xc3f251d13fd86e9d, 0x25ef54b6e319acaf, 0x04868e17ca8281c9, 0x673ce1f4b02ff663, 0x46553b5599b4db05, 0xc0702bdc79a611da, 0xe119f17d503d3cbc, 0x82a39e9e2a904b16, 0xa3ca443f030b6670, 0x45d74158dfcaa442, 0x64be9bf9f6518924, 0x0704f41a8cfcfe8e, 0x266d2ebba567d3e8, 0xe067d8866de8e981, 0xc10e02274473c4e7, 0xa2b46dc43edeb34d, 0x83ddb76517459e2b, 0x65c0b202cb845c19, 0x44a968a3e21f717f, 0x2713074098b206d5, 0x067adde1b1292bb3, 0x2be6bc83fae051b3, 0x0a8f6622d37b7cd5, 0x693509c1a9d60b7f, 0x485cd360804d2619, 0xae41d6075c8ce42b, 0x8f280ca67517c94d, 0xec9263450fbabee7, 0xcdfbb9e426219381, 0x0bf14fd9eeaea9e8, 0x2a989578c735848e, 0x4922fa9bbd98f324, 0x684b203a9403de42, 0x8e56255d48c21c70, 0xaf3ffffc61593116, 0xcc85901f1bf446bc, 0xedec4abe326f6bda, 0x6bc95a37d27da105, 0x4aa08096fbe68c63, 0x291aef75814bfbc9, 0x087335d4a8d0d6af, 0xee6e30b37411149d, 0xcf07ea125d8a39fb, 0xacbd85f127274e51, 0x8dd45f500ebc6337, 0x4bdea96dc633595e, 0x6ab773ccefa87438, 0x090d1c2f95050392, 0x2864c68ebc9e2ef4, 0xce79c3e9605fecc6, 0xef10194849c4c1a0, 0x8caa76ab3369b60a, 0xadc3ac0a1af29b6c, 0xabb971ebabdbb0df, 0x8ad0ab4a82409db9, 0xe96ac4a9f8edea13, 0xc8031e08d176c775, 0x2e1e1b6f0db70547, 0x0f77c1ce242c2821, 0x6ccdae2d5e815f8b, 0x4da4748c771a72ed, 0x8bae82b1bf954884, 0xaac75810960e65e2, 0xc97d37f3eca31248, 0xe814ed52c5383f2e, 0x0e09e83519f9fd1c, 0x2f6032943062d07a, 0x4cda5d774acfa7d0, 0x6db387d663548ab6, 0xeb96975f83464069, 0xcaff4dfeaadd6d0f, 0xa945221dd0701aa5, 0x882cf8bcf9eb37c3, 0x6e31fddb252af5f1, 0x4f58277a0cb1d897, 0x2ce24899761caf3d, 0x0d8b92385f87825b, 0xcb8164059708b832, 0xeae8bea4be939554, 0x8952d147c43ee2fe, 0xa83b0be6eda5cf98, 0x4e260e8131640daa, 0x6f4fd42018ff20cc, 0x0cf5bbc362525766, 0x2d9c61624bc97a00, 0x57cd7907f5c0a366, 0x76a4a3a6dc5b8e00, 0x151ecc45a6f6f9aa, 0x347716e48f6dd4cc, 0xd26a138353ac16fe, 0xf303c9227a373b98, 0x90b9a6c1009a4c32, 0xb1d07c6029016154, 0x77da8a5de18e5b3d, 0x56b350fcc815765b, 0x35093f1fb2b801f1, 0x1460e5be9b232c97, 0xf27de0d947e2eea5, 0xd3143a786e79c3c3, 0xb0ae559b14d4b469, 0x91c78f3a3d4f990f, 0x17e29fb3dd5d53d0, 0x368b4512f4c67eb6, 0x55312af18e6b091c, 0x7458f050a7f0247a, 0x9245f5377b31e648, 0xb32c2f9652aacb2e, 0xd09640752807bc84, 0xf1ff9ad4019c91e2, 0x37f56ce9c913ab8b, 0x169cb648e08886ed, 0x7526d9ab9a25f147, 0x544f030ab3bedc21, 0xb252066d6f7f1e13, 0x933bdccc46e43375, 0xf081b32f3c4944df, 0xd1e8698e15d269b9, 0xd792b46fa4fb420a, 0xf6fb6ece8d606f6c, 0x9541012df7cd18c6, 0xb428db8cde5635a0, 0x5235deeb0297f792, 0x735c044a2b0cdaf4, 0x10e66ba951a1ad5e, 0x318fb108783a8038, 0xf7854735b0b5ba51, 0xd6ec9d94992e9737, 0xb556f277e383e09d, 0x943f28d6ca18cdfb, 0x72222db116d90fc9, 0x534bf7103f4222af, 0x30f198f345ef5505, 0x119842526c747863, 0x97bd52db8c66b2bc, 0xb6d4887aa5fd9fda, 0xd56ee799df50e870, 0xf4073d38f6cbc516, 0x121a385f2a0a0724, 0x3373e2fe03912a42, 0x50c98d1d793c5de8, 0x71a057bc50a7708e, 0xb7aaa18198284ae7, 0x96c37b20b1b36781, 0xf57914c3cb1e102b, 0xd410ce62e2853d4d, 0x320dcb053e44ff7f, 0x136411a417dfd219, 0x70de7e476d72a5b3, 0x51b7a4e644e988d5, 0x7c2bc5840f20f2d5, 0x5d421f2526bbdfb3, 0x3ef870c65c16a819, 0x1f91aa67758d857f, 0xf98caf00a94c474d, 0xd8e575a180d76a2b, 0xbb5f1a42fa7a1d81, 0x9a36c0e3d3e130e7, 0x5c3c36de1b6e0a8e, 0x7d55ec7f32f527e8, 0x1eef839c48585042, 0x3f86593d61c37d24, 0xd99b5c5abd02bf16, 0xf8f286fb94999270, 0x9b48e918ee34e5da, 0xba2133b9c7afc8bc, 0x3c04233027bd0263, 0x1d6df9910e262f05, 0x7ed79672748b58af, 0x5fbe4cd35d1075c9, 0xb9a349b481d1b7fb, 0x98ca9315a84a9a9d, 0xfb70fcf6d2e7ed37, 0xda192657fb7cc051, 0x1c13d06a33f3fa38, 0x3d7a0acb1a68d75e, 0x5ec0652860c5a0f4, 0x7fa9bf89495e8d92, 0x99b4baee959f4fa0, 0xb8dd604fbc0462c6, 0xdb670facc6a9156c, 0xfa0ed50def32380a, 0xfc7408ec5e1b13b9, 0xdd1dd24d77803edf, 0xbea7bdae0d2d4975, 0x9fce670f24b66413, 0x79d36268f877a621, 0x58bab8c9d1ec8b47, 0x3b00d72aab41fced, 0x1a690d8b82dad18b, 0xdc63fbb64a55ebe2, 0xfd0a211763cec684, 0x9eb04ef41963b12e, 0xbfd9945530f89c48, 0x59c49132ec395e7a, 0x78ad4b93c5a2731c, 0x1b172470bf0f04b6, 0x3a7efed1969429d0, 0xbc5bee587686e30f, 0x9d3234f95f1dce69, 0xfe885b1a25b0b9c3, 0xdfe181bb0c2b94a5, 0x39fc84dcd0ea5697, 0x18955e7df9717bf1, 0x7b2f319e83dc0c5b, 0x5a46eb3faa47213d, 0x9c4c1d0262c81b54, 0xbd25c7a34b533632, 0xde9fa84031fe4198, 0xfff672e118656cfe, 0x19eb7786c4a4aecc, 0x3882ad27ed3f83aa, 0x5b38c2c49792f400, 0x7a511865be09d966, ], [ 0x0000000000000000, 0x10c249f33211cd3d, 0x218493e664239a7a, 0x3146da1556325747, 0x430927ccc84734f4, 0x53cb6e3ffa56f9c9, 0x628db42aac64ae8e, 0x724ffdd99e7563b3, 0x86124f99908e69e8, 0x96d0066aa29fa4d5, 0xa796dc7ff4adf392, 0xb754958cc6bc3eaf, 0xc51b685558c95d1c, 0xd5d921a66ad89021, 0xe49ffbb33ceac766, 0xf45db2400efb0a5b, 0x277db960798b40bb, 0x37bff0934b9a8d86, 0x06f92a861da8dac1, 0x163b63752fb917fc, 0x64749eacb1cc744f, 0x74b6d75f83ddb972, 0x45f00d4ad5efee35, 0x553244b9e7fe2308, 0xa16ff6f9e9052953, 0xb1adbf0adb14e46e, 0x80eb651f8d26b329, 0x90292cecbf377e14, 0xe266d13521421da7, 0xf2a498c61353d09a, 0xc3e242d3456187dd, 0xd3200b2077704ae0, 0x4efb72c0f3168176, 0x5e393b33c1074c4b, 0x6f7fe12697351b0c, 0x7fbda8d5a524d631, 0x0df2550c3b51b582, 0x1d301cff094078bf, 0x2c76c6ea5f722ff8, 0x3cb48f196d63e2c5, 0xc8e93d596398e89e, 0xd82b74aa518925a3, 0xe96daebf07bb72e4, 0xf9afe74c35aabfd9, 0x8be01a95abdfdc6a, 0x9b22536699ce1157, 0xaa648973cffc4610, 0xbaa6c080fded8b2d, 0x6986cba08a9dc1cd, 0x79448253b88c0cf0, 0x48025846eebe5bb7, 0x58c011b5dcaf968a, 0x2a8fec6c42daf539, 0x3a4da59f70cb3804, 0x0b0b7f8a26f96f43, 0x1bc9367914e8a27e, 0xef9484391a13a825, 0xff56cdca28026518, 0xce1017df7e30325f, 0xded25e2c4c21ff62, 0xac9da3f5d2549cd1, 0xbc5fea06e04551ec, 0x8d193013b67706ab, 0x9ddb79e08466cb96, 0x9df6e581e62d02ec, 0x8d34ac72d43ccfd1, 0xbc727667820e9896, 0xacb03f94b01f55ab, 0xdeffc24d2e6a3618, 0xce3d8bbe1c7bfb25, 0xff7b51ab4a49ac62, 0xefb918587858615f, 0x1be4aa1876a36b04, 0x0b26e3eb44b2a639, 0x3a6039fe1280f17e, 0x2aa2700d20913c43, 0x58ed8dd4bee45ff0, 0x482fc4278cf592cd, 0x79691e32dac7c58a, 0x69ab57c1e8d608b7, 0xba8b5ce19fa64257, 0xaa491512adb78f6a, 0x9b0fcf07fb85d82d, 0x8bcd86f4c9941510, 0xf9827b2d57e176a3, 0xe94032de65f0bb9e, 0xd806e8cb33c2ecd9, 0xc8c4a13801d321e4, 0x3c9913780f282bbf, 0x2c5b5a8b3d39e682, 0x1d1d809e6b0bb1c5, 0x0ddfc96d591a7cf8, 0x7f9034b4c76f1f4b, 0x6f527d47f57ed276, 0x5e14a752a34c8531, 0x4ed6eea1915d480c, 0xd30d9741153b839a, 0xc3cfdeb2272a4ea7, 0xf28904a7711819e0, 0xe24b4d544309d4dd, 0x9004b08ddd7cb76e, 0x80c6f97eef6d7a53, 0xb180236bb95f2d14, 0xa1426a988b4ee029, 0x551fd8d885b5ea72, 0x45dd912bb7a4274f, 0x749b4b3ee1967008, 0x645902cdd387bd35, 0x1616ff144df2de86, 0x06d4b6e77fe313bb, 0x37926cf229d144fc, 0x275025011bc089c1, 0xf4702e216cb0c321, 0xe4b267d25ea10e1c, 0xd5f4bdc70893595b, 0xc536f4343a829466, 0xb77909eda4f7f7d5, 0xa7bb401e96e63ae8, 0x96fd9a0bc0d46daf, 0x863fd3f8f2c5a092, 0x726261b8fc3eaac9, 0x62a0284bce2f67f4, 0x53e6f25e981d30b3, 0x4324bbadaa0cfd8e, 0x316b467434799e3d, 0x21a90f8706685300, 0x10efd592505a0447, 0x002d9c61624bc97a, 0x10b4ed5094cd96b3, 0x0076a4a3a6dc5b8e, 0x31307eb6f0ee0cc9, 0x21f23745c2ffc1f4, 0x53bdca9c5c8aa247, 0x437f836f6e9b6f7a, 0x7239597a38a9383d, 0x62fb10890ab8f500, 0x96a6a2c90443ff5b, 0x8664eb3a36523266, 0xb722312f60606521, 0xa7e078dc5271a81c, 0xd5af8505cc04cbaf, 0xc56dccf6fe150692, 0xf42b16e3a82751d5, 0xe4e95f109a369ce8, 0x37c95430ed46d608, 0x270b1dc3df571b35, 0x164dc7d689654c72, 0x068f8e25bb74814f, 0x74c073fc2501e2fc, 0x64023a0f17102fc1, 0x5544e01a41227886, 0x4586a9e97333b5bb, 0xb1db1ba97dc8bfe0, 0xa119525a4fd972dd, 0x905f884f19eb259a, 0x809dc1bc2bfae8a7, 0xf2d23c65b58f8b14, 0xe2107596879e4629, 0xd356af83d1ac116e, 0xc394e670e3bddc53, 0x5e4f9f9067db17c5, 0x4e8dd66355cadaf8, 0x7fcb0c7603f88dbf, 0x6f09458531e94082, 0x1d46b85caf9c2331, 0x0d84f1af9d8dee0c, 0x3cc22bbacbbfb94b, 0x2c006249f9ae7476, 0xd85dd009f7557e2d, 0xc89f99fac544b310, 0xf9d943ef9376e457, 0xe91b0a1ca167296a, 0x9b54f7c53f124ad9, 0x8b96be360d0387e4, 0xbad064235b31d0a3, 0xaa122dd069201d9e, 0x793226f01e50577e, 0x69f06f032c419a43, 0x58b6b5167a73cd04, 0x4874fce548620039, 0x3a3b013cd617638a, 0x2af948cfe406aeb7, 0x1bbf92dab234f9f0, 0x0b7ddb29802534cd, 0xff2069698ede3e96, 0xefe2209abccff3ab, 0xdea4fa8feafda4ec, 0xce66b37cd8ec69d1, 0xbc294ea546990a62, 0xaceb07567488c75f, 0x9daddd4322ba9018, 0x8d6f94b010ab5d25, 0x8d4208d172e0945f, 0x9d80412240f15962, 0xacc69b3716c30e25, 0xbc04d2c424d2c318, 0xce4b2f1dbaa7a0ab, 0xde8966ee88b66d96, 0xefcfbcfbde843ad1, 0xff0df508ec95f7ec, 0x0b504748e26efdb7, 0x1b920ebbd07f308a, 0x2ad4d4ae864d67cd, 0x3a169d5db45caaf0, 0x485960842a29c943, 0x589b29771838047e, 0x69ddf3624e0a5339, 0x791fba917c1b9e04, 0xaa3fb1b10b6bd4e4, 0xbafdf842397a19d9, 0x8bbb22576f484e9e, 0x9b796ba45d5983a3, 0xe936967dc32ce010, 0xf9f4df8ef13d2d2d, 0xc8b2059ba70f7a6a, 0xd8704c68951eb757, 0x2c2dfe289be5bd0c, 0x3cefb7dba9f47031, 0x0da96dceffc62776, 0x1d6b243dcdd7ea4b, 0x6f24d9e453a289f8, 0x7fe6901761b344c5, 0x4ea04a0237811382, 0x5e6203f10590debf, 0xc3b97a1181f61529, 0xd37b33e2b3e7d814, 0xe23de9f7e5d58f53, 0xf2ffa004d7c4426e, 0x80b05ddd49b121dd, 0x9072142e7ba0ece0, 0xa134ce3b2d92bba7, 0xb1f687c81f83769a, 0x45ab358811787cc1, 0x55697c7b2369b1fc, 0x642fa66e755be6bb, 0x74edef9d474a2b86, 0x06a21244d93f4835, 0x16605bb7eb2e8508, 0x272681a2bd1cd24f, 0x37e4c8518f0d1f72, 0xe4c4c371f87d5592, 0xf4068a82ca6c98af, 0xc54050979c5ecfe8, 0xd5821964ae4f02d5, 0xa7cde4bd303a6166, 0xb70fad4e022bac5b, 0x8649775b5419fb1c, 0x968b3ea866083621, 0x62d68ce868f33c7a, 0x7214c51b5ae2f147, 0x43521f0e0cd0a600, 0x539056fd3ec16b3d, 0x21dfab24a0b4088e, 0x311de2d792a5c5b3, 0x005b38c2c49792f4, 0x10997131f6865fc9, ], [ 0x0000000000000000, 0x96c1ba0aaa9060cd, 0x06da52460db752f1, 0x901be84ca727323c, 0x0db4a48c1b6ea5e2, 0x9b751e86b1fec52f, 0x0b6ef6ca16d9f713, 0x9daf4cc0bc4997de, 0x1b69491836dd4bc4, 0x8da8f3129c4d2b09, 0x1db31b5e3b6a1935, 0x8b72a15491fa79f8, 0x16dded942db3ee26, 0x801c579e87238eeb, 0x1007bfd22004bcd7, 0x86c605d88a94dc1a, 0x36d292306dba9788, 0xa013283ac72af745, 0x3008c076600dc579, 0xa6c97a7cca9da5b4, 0x3b6636bc76d4326a, 0xada78cb6dc4452a7, 0x3dbc64fa7b63609b, 0xab7ddef0d1f30056, 0x2dbbdb285b67dc4c, 0xbb7a6122f1f7bc81, 0x2b61896e56d08ebd, 0xbda03364fc40ee70, 0x200f7fa4400979ae, 0xb6cec5aeea991963, 0x26d52de24dbe2b5f, 0xb01497e8e72e4b92, 0x6da52460db752f10, 0xfb649e6a71e54fdd, 0x6b7f7626d6c27de1, 0xfdbecc2c7c521d2c, 0x601180ecc01b8af2, 0xf6d03ae66a8bea3f, 0x66cbd2aacdacd803, 0xf00a68a0673cb8ce, 0x76cc6d78eda864d4, 0xe00dd77247380419, 0x70163f3ee01f3625, 0xe6d785344a8f56e8, 0x7b78c9f4f6c6c136, 0xedb973fe5c56a1fb, 0x7da29bb2fb7193c7, 0xeb6321b851e1f30a, 0x5b77b650b6cfb898, 0xcdb60c5a1c5fd855, 0x5dade416bb78ea69, 0xcb6c5e1c11e88aa4, 0x56c312dcada11d7a, 0xc002a8d607317db7, 0x5019409aa0164f8b, 0xc6d8fa900a862f46, 0x401eff488012f35c, 0xd6df45422a829391, 0x46c4ad0e8da5a1ad, 0xd00517042735c160, 0x4daa5bc49b7c56be, 0xdb6be1ce31ec3673, 0x4b70098296cb044f, 0xddb1b3883c5b6482, 0xdb4a48c1b6ea5e20, 0x4d8bf2cb1c7a3eed, 0xdd901a87bb5d0cd1, 0x4b51a08d11cd6c1c, 0xd6feec4dad84fbc2, 0x403f564707149b0f, 0xd024be0ba033a933, 0x46e504010aa3c9fe, 0xc02301d9803715e4, 0x56e2bbd32aa77529, 0xc6f9539f8d804715, 0x5038e995271027d8, 0xcd97a5559b59b006, 0x5b561f5f31c9d0cb, 0xcb4df71396eee2f7, 0x5d8c4d193c7e823a, 0xed98daf1db50c9a8, 0x7b5960fb71c0a965, 0xeb4288b7d6e79b59, 0x7d8332bd7c77fb94, 0xe02c7e7dc03e6c4a, 0x76edc4776aae0c87, 0xe6f62c3bcd893ebb, 0x7037963167195e76, 0xf6f193e9ed8d826c, 0x603029e3471de2a1, 0xf02bc1afe03ad09d, 0x66ea7ba54aaab050, 0xfb453765f6e3278e, 0x6d848d6f5c734743, 0xfd9f6523fb54757f, 0x6b5edf2951c415b2, 0xb6ef6ca16d9f7130, 0x202ed6abc70f11fd, 0xb0353ee7602823c1, 0x26f484edcab8430c, 0xbb5bc82d76f1d4d2, 0x2d9a7227dc61b41f, 0xbd819a6b7b468623, 0x2b402061d1d6e6ee, 0xad8625b95b423af4, 0x3b479fb3f1d25a39, 0xab5c77ff56f56805, 0x3d9dcdf5fc6508c8, 0xa0328135402c9f16, 0x36f33b3feabcffdb, 0xa6e8d3734d9bcde7, 0x30296979e70bad2a, 0x803dfe910025e6b8, 0x16fc449baab58675, 0x86e7acd70d92b449, 0x102616dda702d484, 0x8d895a1d1b4b435a, 0x1b48e017b1db2397, 0x8b53085b16fc11ab, 0x1d92b251bc6c7166, 0x9b54b78936f8ad7c, 0x0d950d839c68cdb1, 0x9d8ee5cf3b4fff8d, 0x0b4f5fc591df9f40, 0x96e013052d96089e, 0x0021a90f87066853, 0x903a414320215a6f, 0x06fbfb498ab13aa2, 0x9dcdb7d035432f2b, 0x0b0c0dda9fd34fe6, 0x9b17e59638f47dda, 0x0dd65f9c92641d17, 0x9079135c2e2d8ac9, 0x06b8a95684bdea04, 0x96a3411a239ad838, 0x0062fb10890ab8f5, 0x86a4fec8039e64ef, 0x106544c2a90e0422, 0x807eac8e0e29361e, 0x16bf1684a4b956d3, 0x8b105a4418f0c10d, 0x1dd1e04eb260a1c0, 0x8dca0802154793fc, 0x1b0bb208bfd7f331, 0xab1f25e058f9b8a3, 0x3dde9feaf269d86e, 0xadc577a6554eea52, 0x3b04cdacffde8a9f, 0xa6ab816c43971d41, 0x306a3b66e9077d8c, 0xa071d32a4e204fb0, 0x36b06920e4b02f7d, 0xb0766cf86e24f367, 0x26b7d6f2c4b493aa, 0xb6ac3ebe6393a196, 0x206d84b4c903c15b, 0xbdc2c874754a5685, 0x2b03727edfda3648, 0xbb189a3278fd0474, 0x2dd92038d26d64b9, 0xf06893b0ee36003b, 0x66a929ba44a660f6, 0xf6b2c1f6e38152ca, 0x60737bfc49113207, 0xfddc373cf558a5d9, 0x6b1d8d365fc8c514, 0xfb06657af8eff728, 0x6dc7df70527f97e5, 0xeb01daa8d8eb4bff, 0x7dc060a2727b2b32, 0xeddb88eed55c190e, 0x7b1a32e47fcc79c3, 0xe6b57e24c385ee1d, 0x7074c42e69158ed0, 0xe06f2c62ce32bcec, 0x76ae966864a2dc21, 0xc6ba0180838c97b3, 0x507bbb8a291cf77e, 0xc06053c68e3bc542, 0x56a1e9cc24aba58f, 0xcb0ea50c98e23251, 0x5dcf1f063272529c, 0xcdd4f74a955560a0, 0x5b154d403fc5006d, 0xddd34898b551dc77, 0x4b12f2921fc1bcba, 0xdb091adeb8e68e86, 0x4dc8a0d41276ee4b, 0xd067ec14ae3f7995, 0x46a6561e04af1958, 0xd6bdbe52a3882b64, 0x407c045809184ba9, 0x4687ff1183a9710b, 0xd046451b293911c6, 0x405dad578e1e23fa, 0xd69c175d248e4337, 0x4b335b9d98c7d4e9, 0xddf2e1973257b424, 0x4de909db95708618, 0xdb28b3d13fe0e6d5, 0x5deeb609b5743acf, 0xcb2f0c031fe45a02, 0x5b34e44fb8c3683e, 0xcdf55e45125308f3, 0x505a1285ae1a9f2d, 0xc69ba88f048affe0, 0x568040c3a3adcddc, 0xc041fac9093dad11, 0x70556d21ee13e683, 0xe694d72b4483864e, 0x768f3f67e3a4b472, 0xe04e856d4934d4bf, 0x7de1c9adf57d4361, 0xeb2073a75fed23ac, 0x7b3b9bebf8ca1190, 0xedfa21e1525a715d, 0x6b3c2439d8cead47, 0xfdfd9e33725ecd8a, 0x6de6767fd579ffb6, 0xfb27cc757fe99f7b, 0x668880b5c3a008a5, 0xf0493abf69306868, 0x6052d2f3ce175a54, 0xf69368f964873a99, 0x2b22db7158dc5e1b, 0xbde3617bf24c3ed6, 0x2df88937556b0cea, 0xbb39333dfffb6c27, 0x26967ffd43b2fbf9, 0xb057c5f7e9229b34, 0x204c2dbb4e05a908, 0xb68d97b1e495c9c5, 0x304b92696e0115df, 0xa68a2863c4917512, 0x3691c02f63b6472e, 0xa0507a25c92627e3, 0x3dff36e5756fb03d, 0xab3e8cefdfffd0f0, 0x3b2564a378d8e2cc, 0xade4dea9d2488201, 0x1df049413566c993, 0x8b31f34b9ff6a95e, 0x1b2a1b0738d19b62, 0x8deba10d9241fbaf, 0x1044edcd2e086c71, 0x868557c784980cbc, 0x169ebf8b23bf3e80, 0x805f0581892f5e4d, 0x0699005903bb8257, 0x9058ba53a92be29a, 0x0043521f0e0cd0a6, 0x9682e815a49cb06b, 0x0b2da4d518d527b5, 0x9dec1edfb2454778, 0x0df7f69315627544, 0x9b364c99bff21589, ], [ 0x0000000000000000, 0x5b88f1211cefb539, 0xb711e24239df6a72, 0xec9913632530df4b, 0x457ae2d72b29478f, 0x1ef213f637c6f2b6, 0xf26b009512f62dfd, 0xa9e3f1b40e1998c4, 0x8af5c5ae56528f1e, 0xd17d348f4abd3a27, 0x3de427ec6f8de56c, 0x666cd6cd73625055, 0xcf8f27797d7bc891, 0x9407d65861947da8, 0x789ec53b44a4a2e3, 0x2316341a584b17da, 0x3eb2ad0ff4328d57, 0x653a5c2ee8dd386e, 0x89a34f4dcdede725, 0xd22bbe6cd102521c, 0x7bc84fd8df1bcad8, 0x2040bef9c3f47fe1, 0xccd9ad9ae6c4a0aa, 0x97515cbbfa2b1593, 0xb44768a1a2600249, 0xefcf9980be8fb770, 0x03568ae39bbf683b, 0x58de7bc28750dd02, 0xf13d8a76894945c6, 0xaab57b5795a6f0ff, 0x462c6834b0962fb4, 0x1da49915ac799a8d, 0x7d655a1fe8651aae, 0x26edab3ef48aaf97, 0xca74b85dd1ba70dc, 0x91fc497ccd55c5e5, 0x381fb8c8c34c5d21, 0x639749e9dfa3e818, 0x8f0e5a8afa933753, 0xd486ababe67c826a, 0xf7909fb1be3795b0, 0xac186e90a2d82089, 0x40817df387e8ffc2, 0x1b098cd29b074afb, 0xb2ea7d66951ed23f, 0xe9628c4789f16706, 0x05fb9f24acc1b84d, 0x5e736e05b02e0d74, 0x43d7f7101c5797f9, 0x185f063100b822c0, 0xf4c615522588fd8b, 0xaf4ee473396748b2, 0x06ad15c7377ed076, 0x5d25e4e62b91654f, 0xb1bcf7850ea1ba04, 0xea3406a4124e0f3d, 0xc92232be4a0518e7, 0x92aac39f56eaadde, 0x7e33d0fc73da7295, 0x25bb21dd6f35c7ac, 0x8c58d069612c5f68, 0xd7d021487dc3ea51, 0x3b49322b58f3351a, 0x60c1c30a441c8023, 0xfacab43fd0ca355c, 0xa142451ecc258065, 0x4ddb567de9155f2e, 0x1653a75cf5faea17, 0xbfb056e8fbe372d3, 0xe438a7c9e70cc7ea, 0x08a1b4aac23c18a1, 0x5329458bded3ad98, 0x703f71918698ba42, 0x2bb780b09a770f7b, 0xc72e93d3bf47d030, 0x9ca662f2a3a86509, 0x35459346adb1fdcd, 0x6ecd6267b15e48f4, 0x82547104946e97bf, 0xd9dc802588812286, 0xc478193024f8b80b, 0x9ff0e81138170d32, 0x7369fb721d27d279, 0x28e10a5301c86740, 0x8102fbe70fd1ff84, 0xda8a0ac6133e4abd, 0x361319a5360e95f6, 0x6d9be8842ae120cf, 0x4e8ddc9e72aa3715, 0x15052dbf6e45822c, 0xf99c3edc4b755d67, 0xa214cffd579ae85e, 0x0bf73e495983709a, 0x507fcf68456cc5a3, 0xbce6dc0b605c1ae8, 0xe76e2d2a7cb3afd1, 0x87afee2038af2ff2, 0xdc271f0124409acb, 0x30be0c6201704580, 0x6b36fd431d9ff0b9, 0xc2d50cf71386687d, 0x995dfdd60f69dd44, 0x75c4eeb52a59020f, 0x2e4c1f9436b6b736, 0x0d5a2b8e6efda0ec, 0x56d2daaf721215d5, 0xba4bc9cc5722ca9e, 0xe1c338ed4bcd7fa7, 0x4820c95945d4e763, 0x13a83878593b525a, 0xff312b1b7c0b8d11, 0xa4b9da3a60e43828, 0xb91d432fcc9da2a5, 0xe295b20ed072179c, 0x0e0ca16df542c8d7, 0x5584504ce9ad7dee, 0xfc67a1f8e7b4e52a, 0xa7ef50d9fb5b5013, 0x4b7643bade6b8f58, 0x10feb29bc2843a61, 0x33e886819acf2dbb, 0x686077a086209882, 0x84f964c3a31047c9, 0xdf7195e2bffff2f0, 0x76926456b1e66a34, 0x2d1a9577ad09df0d, 0xc183861488390046, 0x9a0b773594d6b57f, 0xdecc4e2cf903f9d3, 0x8544bf0de5ec4cea, 0x69ddac6ec0dc93a1, 0x32555d4fdc332698, 0x9bb6acfbd22abe5c, 0xc03e5ddacec50b65, 0x2ca74eb9ebf5d42e, 0x772fbf98f71a6117, 0x54398b82af5176cd, 0x0fb17aa3b3bec3f4, 0xe32869c0968e1cbf, 0xb8a098e18a61a986, 0x1143695584783142, 0x4acb98749897847b, 0xa6528b17bda75b30, 0xfdda7a36a148ee09, 0xe07ee3230d317484, 0xbbf6120211dec1bd, 0x576f016134ee1ef6, 0x0ce7f0402801abcf, 0xa50401f42618330b, 0xfe8cf0d53af78632, 0x1215e3b61fc75979, 0x499d12970328ec40, 0x6a8b268d5b63fb9a, 0x3103d7ac478c4ea3, 0xdd9ac4cf62bc91e8, 0x861235ee7e5324d1, 0x2ff1c45a704abc15, 0x7479357b6ca5092c, 0x98e026184995d667, 0xc368d739557a635e, 0xa3a914331166e37d, 0xf821e5120d895644, 0x14b8f67128b9890f, 0x4f30075034563c36, 0xe6d3f6e43a4fa4f2, 0xbd5b07c526a011cb, 0x51c214a60390ce80, 0x0a4ae5871f7f7bb9, 0x295cd19d47346c63, 0x72d420bc5bdbd95a, 0x9e4d33df7eeb0611, 0xc5c5c2fe6204b328, 0x6c26334a6c1d2bec, 0x37aec26b70f29ed5, 0xdb37d10855c2419e, 0x80bf2029492df4a7, 0x9d1bb93ce5546e2a, 0xc693481df9bbdb13, 0x2a0a5b7edc8b0458, 0x7182aa5fc064b161, 0xd8615bebce7d29a5, 0x83e9aacad2929c9c, 0x6f70b9a9f7a243d7, 0x34f84888eb4df6ee, 0x17ee7c92b306e134, 0x4c668db3afe9540d, 0xa0ff9ed08ad98b46, 0xfb776ff196363e7f, 0x52949e45982fa6bb, 0x091c6f6484c01382, 0xe5857c07a1f0ccc9, 0xbe0d8d26bd1f79f0, 0x2406fa1329c9cc8f, 0x7f8e0b32352679b6, 0x931718511016a6fd, 0xc89fe9700cf913c4, 0x617c18c402e08b00, 0x3af4e9e51e0f3e39, 0xd66dfa863b3fe172, 0x8de50ba727d0544b, 0xaef33fbd7f9b4391, 0xf57bce9c6374f6a8, 0x19e2ddff464429e3, 0x426a2cde5aab9cda, 0xeb89dd6a54b2041e, 0xb0012c4b485db127, 0x5c983f286d6d6e6c, 0x0710ce097182db55, 0x1ab4571cddfb41d8, 0x413ca63dc114f4e1, 0xada5b55ee4242baa, 0xf62d447ff8cb9e93, 0x5fceb5cbf6d20657, 0x044644eaea3db36e, 0xe8df5789cf0d6c25, 0xb357a6a8d3e2d91c, 0x904192b28ba9cec6, 0xcbc9639397467bff, 0x275070f0b276a4b4, 0x7cd881d1ae99118d, 0xd53b7065a0808949, 0x8eb38144bc6f3c70, 0x622a9227995fe33b, 0x39a2630685b05602, 0x5963a00cc1acd621, 0x02eb512ddd436318, 0xee72424ef873bc53, 0xb5fab36fe49c096a, 0x1c1942dbea8591ae, 0x4791b3faf66a2497, 0xab08a099d35afbdc, 0xf08051b8cfb54ee5, 0xd39665a297fe593f, 0x881e94838b11ec06, 0x648787e0ae21334d, 0x3f0f76c1b2ce8674, 0x96ec8775bcd71eb0, 0xcd647654a038ab89, 0x21fd6537850874c2, 0x7a75941699e7c1fb, 0x67d10d03359e5b76, 0x3c59fc222971ee4f, 0xd0c0ef410c413104, 0x8b481e6010ae843d, 0x22abefd41eb71cf9, 0x79231ef50258a9c0, 0x95ba0d962768768b, 0xce32fcb73b87c3b2, 0xed24c8ad63ccd468, 0xb6ac398c7f236151, 0x5a352aef5a13be1a, 0x01bddbce46fc0b23, 0xa85e2a7a48e593e7, 0xf3d6db5b540a26de, 0x1f4fc838713af995, 0x44c739196dd54cac, ], [ 0x0000000000000000, 0x56b215c1e0ff283a, 0xad642b83c1fe5074, 0xfbd63e422101784e, 0x71917154db6b3383, 0x272364953b941bb9, 0xdcf55ad71a9563f7, 0x8a474f16fa6a4bcd, 0xe322e2a9b6d66706, 0xb590f76856294f3c, 0x4e46c92a77283772, 0x18f4dceb97d71f48, 0x92b393fd6dbd5485, 0xc401863c8d427cbf, 0x3fd7b87eac4304f1, 0x6965adbf4cbc2ccb, 0xed1ce300353b5d67, 0xbbaef6c1d5c4755d, 0x4078c883f4c50d13, 0x16cadd42143a2529, 0x9c8d9254ee506ee4, 0xca3f87950eaf46de, 0x31e9b9d72fae3e90, 0x675bac16cf5116aa, 0x0e3e01a983ed3a61, 0x588c14686312125b, 0xa35a2a2a42136a15, 0xf5e83feba2ec422f, 0x7faf70fd588609e2, 0x291d653cb87921d8, 0xd2cb5b7e99785996, 0x84794ebf798771ac, 0xf160e05332e129a5, 0xa7d2f592d21e019f, 0x5c04cbd0f31f79d1, 0x0ab6de1113e051eb, 0x80f19107e98a1a26, 0xd64384c60975321c, 0x2d95ba8428744a52, 0x7b27af45c88b6268, 0x124202fa84374ea3, 0x44f0173b64c86699, 0xbf26297945c91ed7, 0xe9943cb8a53636ed, 0x63d373ae5f5c7d20, 0x3561666fbfa3551a, 0xceb7582d9ea22d54, 0x98054dec7e5d056e, 0x1c7c035307da74c2, 0x4ace1692e7255cf8, 0xb11828d0c62424b6, 0xe7aa3d1126db0c8c, 0x6ded7207dcb14741, 0x3b5f67c63c4e6f7b, 0xc08959841d4f1735, 0x963b4c45fdb03f0f, 0xff5ee1fab10c13c4, 0xa9ecf43b51f33bfe, 0x523aca7970f243b0, 0x0488dfb8900d6b8a, 0x8ecf90ae6a672047, 0xd87d856f8a98087d, 0x23abbb2dab997033, 0x7519aeec4b665809, 0xc998e6f53d55c021, 0x9f2af334ddaae81b, 0x64fccd76fcab9055, 0x324ed8b71c54b86f, 0xb80997a1e63ef3a2, 0xeebb826006c1db98, 0x156dbc2227c0a3d6, 0x43dfa9e3c73f8bec, 0x2aba045c8b83a727, 0x7c08119d6b7c8f1d, 0x87de2fdf4a7df753, 0xd16c3a1eaa82df69, 0x5b2b750850e894a4, 0x0d9960c9b017bc9e, 0xf64f5e8b9116c4d0, 0xa0fd4b4a71e9ecea, 0x248405f5086e9d46, 0x72361034e891b57c, 0x89e02e76c990cd32, 0xdf523bb7296fe508, 0x551574a1d305aec5, 0x03a7616033fa86ff, 0xf8715f2212fbfeb1, 0xaec34ae3f204d68b, 0xc7a6e75cbeb8fa40, 0x9114f29d5e47d27a, 0x6ac2ccdf7f46aa34, 0x3c70d91e9fb9820e, 0xb637960865d3c9c3, 0xe08583c9852ce1f9, 0x1b53bd8ba42d99b7, 0x4de1a84a44d2b18d, 0x38f806a60fb4e984, 0x6e4a1367ef4bc1be, 0x959c2d25ce4ab9f0, 0xc32e38e42eb591ca, 0x496977f2d4dfda07, 0x1fdb62333420f23d, 0xe40d5c7115218a73, 0xb2bf49b0f5dea249, 0xdbdae40fb9628e82, 0x8d68f1ce599da6b8, 0x76becf8c789cdef6, 0x200cda4d9863f6cc, 0xaa4b955b6209bd01, 0xfcf9809a82f6953b, 0x072fbed8a3f7ed75, 0x519dab194308c54f, 0xd5e4e5a63a8fb4e3, 0x8356f067da709cd9, 0x7880ce25fb71e497, 0x2e32dbe41b8eccad, 0xa47594f2e1e48760, 0xf2c78133011baf5a, 0x0911bf71201ad714, 0x5fa3aab0c0e5ff2e, 0x36c6070f8c59d3e5, 0x607412ce6ca6fbdf, 0x9ba22c8c4da78391, 0xcd10394dad58abab, 0x4757765b5732e066, 0x11e5639ab7cdc85c, 0xea335dd896ccb012, 0xbc81481976339828, 0xb868ebb9223c1329, 0xeedafe78c2c33b13, 0x150cc03ae3c2435d, 0x43bed5fb033d6b67, 0xc9f99aedf95720aa, 0x9f4b8f2c19a80890, 0x649db16e38a970de, 0x322fa4afd85658e4, 0x5b4a091094ea742f, 0x0df81cd174155c15, 0xf62e22935514245b, 0xa09c3752b5eb0c61, 0x2adb78444f8147ac, 0x7c696d85af7e6f96, 0x87bf53c78e7f17d8, 0xd10d46066e803fe2, 0x557408b917074e4e, 0x03c61d78f7f86674, 0xf810233ad6f91e3a, 0xaea236fb36063600, 0x24e579edcc6c7dcd, 0x72576c2c2c9355f7, 0x8981526e0d922db9, 0xdf3347afed6d0583, 0xb656ea10a1d12948, 0xe0e4ffd1412e0172, 0x1b32c193602f793c, 0x4d80d45280d05106, 0xc7c79b447aba1acb, 0x91758e859a4532f1, 0x6aa3b0c7bb444abf, 0x3c11a5065bbb6285, 0x49080bea10dd3a8c, 0x1fba1e2bf02212b6, 0xe46c2069d1236af8, 0xb2de35a831dc42c2, 0x38997abecbb6090f, 0x6e2b6f7f2b492135, 0x95fd513d0a48597b, 0xc34f44fceab77141, 0xaa2ae943a60b5d8a, 0xfc98fc8246f475b0, 0x074ec2c067f50dfe, 0x51fcd701870a25c4, 0xdbbb98177d606e09, 0x8d098dd69d9f4633, 0x76dfb394bc9e3e7d, 0x206da6555c611647, 0xa414e8ea25e667eb, 0xf2a6fd2bc5194fd1, 0x0970c369e418379f, 0x5fc2d6a804e71fa5, 0xd58599befe8d5468, 0x83378c7f1e727c52, 0x78e1b23d3f73041c, 0x2e53a7fcdf8c2c26, 0x47360a43933000ed, 0x11841f8273cf28d7, 0xea5221c052ce5099, 0xbce03401b23178a3, 0x36a77b17485b336e, 0x60156ed6a8a41b54, 0x9bc3509489a5631a, 0xcd714555695a4b20, 0x71f00d4c1f69d308, 0x2742188dff96fb32, 0xdc9426cfde97837c, 0x8a26330e3e68ab46, 0x00617c18c402e08b, 0x56d369d924fdc8b1, 0xad05579b05fcb0ff, 0xfbb7425ae50398c5, 0x92d2efe5a9bfb40e, 0xc460fa2449409c34, 0x3fb6c4666841e47a, 0x6904d1a788becc40, 0xe3439eb172d4878d, 0xb5f18b70922bafb7, 0x4e27b532b32ad7f9, 0x1895a0f353d5ffc3, 0x9cecee4c2a528e6f, 0xca5efb8dcaada655, 0x3188c5cfebacde1b, 0x673ad00e0b53f621, 0xed7d9f18f139bdec, 0xbbcf8ad911c695d6, 0x4019b49b30c7ed98, 0x16aba15ad038c5a2, 0x7fce0ce59c84e969, 0x297c19247c7bc153, 0xd2aa27665d7ab91d, 0x841832a7bd859127, 0x0e5f7db147efdaea, 0x58ed6870a710f2d0, 0xa33b563286118a9e, 0xf58943f366eea2a4, 0x8090ed1f2d88faad, 0xd622f8decd77d297, 0x2df4c69cec76aad9, 0x7b46d35d0c8982e3, 0xf1019c4bf6e3c92e, 0xa7b3898a161ce114, 0x5c65b7c8371d995a, 0x0ad7a209d7e2b160, 0x63b20fb69b5e9dab, 0x35001a777ba1b591, 0xced624355aa0cddf, 0x986431f4ba5fe5e5, 0x12237ee24035ae28, 0x44916b23a0ca8612, 0xbf47556181cbfe5c, 0xe9f540a06134d666, 0x6d8c0e1f18b3a7ca, 0x3b3e1bdef84c8ff0, 0xc0e8259cd94df7be, 0x965a305d39b2df84, 0x1c1d7f4bc3d89449, 0x4aaf6a8a2327bc73, 0xb17954c80226c43d, 0xe7cb4109e2d9ec07, 0x8eaeecb6ae65c0cc, 0xd81cf9774e9ae8f6, 0x23cac7356f9b90b8, 0x7578d2f48f64b882, 0xff3f9de2750ef34f, 0xa98d882395f1db75, 0x525bb661b4f0a33b, 0x04e9a3a0540f8b01, ], [ 0x0000000000000000, 0xd9d7be7d505da32c, 0x98f65aa9f82cd533, 0x4121e4d4a871761f, 0x1ab59300a8ce390d, 0xc3622d7df8939a21, 0x8243c9a950e2ec3e, 0x5b9477d400bf4f12, 0x356b2601519c721a, 0xecbc987c01c1d136, 0xad9d7ca8a9b0a729, 0x744ac2d5f9ed0405, 0x2fdeb501f9524b17, 0xf6090b7ca90fe83b, 0xb728efa8017e9e24, 0x6eff51d551233d08, 0x6ad64c02a338e434, 0xb301f27ff3654718, 0xf22016ab5b143107, 0x2bf7a8d60b49922b, 0x7063df020bf6dd39, 0xa9b4617f5bab7e15, 0xe89585abf3da080a, 0x31423bd6a387ab26, 0x5fbd6a03f2a4962e, 0x866ad47ea2f93502, 0xc74b30aa0a88431d, 0x1e9c8ed75ad5e031, 0x4508f9035a6aaf23, 0x9cdf477e0a370c0f, 0xddfea3aaa2467a10, 0x04291dd7f21bd93c, 0xd5ac98054671c868, 0x0c7b2678162c6b44, 0x4d5ac2acbe5d1d5b, 0x948d7cd1ee00be77, 0xcf190b05eebff165, 0x16ceb578bee25249, 0x57ef51ac16932456, 0x8e38efd146ce877a, 0xe0c7be0417edba72, 0x3910007947b0195e, 0x7831e4adefc16f41, 0xa1e65ad0bf9ccc6d, 0xfa722d04bf23837f, 0x23a59379ef7e2053, 0x628477ad470f564c, 0xbb53c9d01752f560, 0xbf7ad407e5492c5c, 0x66ad6a7ab5148f70, 0x278c8eae1d65f96f, 0xfe5b30d34d385a43, 0xa5cf47074d871551, 0x7c18f97a1ddab67d, 0x3d391daeb5abc062, 0xe4eea3d3e5f6634e, 0x8a11f206b4d55e46, 0x53c64c7be488fd6a, 0x12e7a8af4cf98b75, 0xcb3016d21ca42859, 0x90a461061c1b674b, 0x4973df7b4c46c467, 0x08523bafe437b278, 0xd18585d2b46a1154, 0x80001659d47403bb, 0x59d7a8248429a097, 0x18f64cf02c58d688, 0xc121f28d7c0575a4, 0x9ab585597cba3ab6, 0x43623b242ce7999a, 0x0243dff08496ef85, 0xdb94618dd4cb4ca9, 0xb56b305885e871a1, 0x6cbc8e25d5b5d28d, 0x2d9d6af17dc4a492, 0xf44ad48c2d9907be, 0xafdea3582d2648ac, 0x76091d257d7beb80, 0x3728f9f1d50a9d9f, 0xeeff478c85573eb3, 0xead65a5b774ce78f, 0x3301e426271144a3, 0x722000f28f6032bc, 0xabf7be8fdf3d9190, 0xf063c95bdf82de82, 0x29b477268fdf7dae, 0x689593f227ae0bb1, 0xb1422d8f77f3a89d, 0xdfbd7c5a26d09595, 0x066ac227768d36b9, 0x474b26f3defc40a6, 0x9e9c988e8ea1e38a, 0xc508ef5a8e1eac98, 0x1cdf5127de430fb4, 0x5dfeb5f3763279ab, 0x84290b8e266fda87, 0x55ac8e5c9205cbd3, 0x8c7b3021c25868ff, 0xcd5ad4f56a291ee0, 0x148d6a883a74bdcc, 0x4f191d5c3acbf2de, 0x96cea3216a9651f2, 0xd7ef47f5c2e727ed, 0x0e38f98892ba84c1, 0x60c7a85dc399b9c9, 0xb910162093c41ae5, 0xf831f2f43bb56cfa, 0x21e64c896be8cfd6, 0x7a723b5d6b5780c4, 0xa3a585203b0a23e8, 0xe28461f4937b55f7, 0x3b53df89c326f6db, 0x3f7ac25e313d2fe7, 0xe6ad7c2361608ccb, 0xa78c98f7c911fad4, 0x7e5b268a994c59f8, 0x25cf515e99f316ea, 0xfc18ef23c9aeb5c6, 0xbd390bf761dfc3d9, 0x64eeb58a318260f5, 0x0a11e45f60a15dfd, 0xd3c65a2230fcfed1, 0x92e7bef6988d88ce, 0x4b30008bc8d02be2, 0x10a4775fc86f64f0, 0xc973c9229832c7dc, 0x88522df63043b1c3, 0x5185938b601e12ef, 0x2b590ae0f07f941d, 0xf28eb49da0223731, 0xb3af50490853412e, 0x6a78ee34580ee202, 0x31ec99e058b1ad10, 0xe83b279d08ec0e3c, 0xa91ac349a09d7823, 0x70cd7d34f0c0db0f, 0x1e322ce1a1e3e607, 0xc7e5929cf1be452b, 0x86c4764859cf3334, 0x5f13c83509929018, 0x0487bfe1092ddf0a, 0xdd50019c59707c26, 0x9c71e548f1010a39, 0x45a65b35a15ca915, 0x418f46e253477029, 0x9858f89f031ad305, 0xd9791c4bab6ba51a, 0x00aea236fb360636, 0x5b3ad5e2fb894924, 0x82ed6b9fabd4ea08, 0xc3cc8f4b03a59c17, 0x1a1b313653f83f3b, 0x74e460e302db0233, 0xad33de9e5286a11f, 0xec123a4afaf7d700, 0x35c58437aaaa742c, 0x6e51f3e3aa153b3e, 0xb7864d9efa489812, 0xf6a7a94a5239ee0d, 0x2f70173702644d21, 0xfef592e5b60e5c75, 0x27222c98e653ff59, 0x6603c84c4e228946, 0xbfd476311e7f2a6a, 0xe44001e51ec06578, 0x3d97bf984e9dc654, 0x7cb65b4ce6ecb04b, 0xa561e531b6b11367, 0xcb9eb4e4e7922e6f, 0x12490a99b7cf8d43, 0x5368ee4d1fbefb5c, 0x8abf50304fe35870, 0xd12b27e44f5c1762, 0x08fc99991f01b44e, 0x49dd7d4db770c251, 0x900ac330e72d617d, 0x9423dee71536b841, 0x4df4609a456b1b6d, 0x0cd5844eed1a6d72, 0xd5023a33bd47ce5e, 0x8e964de7bdf8814c, 0x5741f39aeda52260, 0x1660174e45d4547f, 0xcfb7a9331589f753, 0xa148f8e644aaca5b, 0x789f469b14f76977, 0x39bea24fbc861f68, 0xe0691c32ecdbbc44, 0xbbfd6be6ec64f356, 0x622ad59bbc39507a, 0x230b314f14482665, 0xfadc8f3244158549, 0xab591cb9240b97a6, 0x728ea2c47456348a, 0x33af4610dc274295, 0xea78f86d8c7ae1b9, 0xb1ec8fb98cc5aeab, 0x683b31c4dc980d87, 0x291ad51074e97b98, 0xf0cd6b6d24b4d8b4, 0x9e323ab87597e5bc, 0x47e584c525ca4690, 0x06c460118dbb308f, 0xdf13de6cdde693a3, 0x8487a9b8dd59dcb1, 0x5d5017c58d047f9d, 0x1c71f31125750982, 0xc5a64d6c7528aaae, 0xc18f50bb87337392, 0x1858eec6d76ed0be, 0x59790a127f1fa6a1, 0x80aeb46f2f42058d, 0xdb3ac3bb2ffd4a9f, 0x02ed7dc67fa0e9b3, 0x43cc9912d7d19fac, 0x9a1b276f878c3c80, 0xf4e476bad6af0188, 0x2d33c8c786f2a2a4, 0x6c122c132e83d4bb, 0xb5c5926e7ede7797, 0xee51e5ba7e613885, 0x37865bc72e3c9ba9, 0x76a7bf13864dedb6, 0xaf70016ed6104e9a, 0x7ef584bc627a5fce, 0xa7223ac13227fce2, 0xe603de159a568afd, 0x3fd46068ca0b29d1, 0x644017bccab466c3, 0xbd97a9c19ae9c5ef, 0xfcb64d153298b3f0, 0x2561f36862c510dc, 0x4b9ea2bd33e62dd4, 0x92491cc063bb8ef8, 0xd368f814cbcaf8e7, 0x0abf46699b975bcb, 0x512b31bd9b2814d9, 0x88fc8fc0cb75b7f5, 0xc9dd6b146304c1ea, 0x100ad569335962c6, 0x1423c8bec142bbfa, 0xcdf476c3911f18d6, 0x8cd59217396e6ec9, 0x55022c6a6933cde5, 0x0e965bbe698c82f7, 0xd741e5c339d121db, 0x9660011791a057c4, 0x4fb7bf6ac1fdf4e8, 0x2148eebf90dec9e0, 0xf89f50c2c0836acc, 0xb9beb41668f21cd3, 0x60690a6b38afbfff, 0x3bfd7dbf3810f0ed, 0xe22ac3c2684d53c1, 0xa30b2716c03c25de, 0x7adc996b906186f2, ], ]; pub static CRC64_WE_TABLE: [[u64; 256]; 16] = [ [ 0x0000000000000000, 0x42f0e1eba9ea3693, 0x85e1c3d753d46d26, 0xc711223cfa3e5bb5, 0x493366450e42ecdf, 0x0bc387aea7a8da4c, 0xccd2a5925d9681f9, 0x8e224479f47cb76a, 0x9266cc8a1c85d9be, 0xd0962d61b56fef2d, 0x17870f5d4f51b498, 0x5577eeb6e6bb820b, 0xdb55aacf12c73561, 0x99a54b24bb2d03f2, 0x5eb4691841135847, 0x1c4488f3e8f96ed4, 0x663d78ff90e185ef, 0x24cd9914390bb37c, 0xe3dcbb28c335e8c9, 0xa12c5ac36adfde5a, 0x2f0e1eba9ea36930, 0x6dfeff5137495fa3, 0xaaefdd6dcd770416, 0xe81f3c86649d3285, 0xf45bb4758c645c51, 0xb6ab559e258e6ac2, 0x71ba77a2dfb03177, 0x334a9649765a07e4, 0xbd68d2308226b08e, 0xff9833db2bcc861d, 0x388911e7d1f2dda8, 0x7a79f00c7818eb3b, 0xcc7af1ff21c30bde, 0x8e8a101488293d4d, 0x499b3228721766f8, 0x0b6bd3c3dbfd506b, 0x854997ba2f81e701, 0xc7b97651866bd192, 0x00a8546d7c558a27, 0x4258b586d5bfbcb4, 0x5e1c3d753d46d260, 0x1cecdc9e94ace4f3, 0xdbfdfea26e92bf46, 0x990d1f49c77889d5, 0x172f5b3033043ebf, 0x55dfbadb9aee082c, 0x92ce98e760d05399, 0xd03e790cc93a650a, 0xaa478900b1228e31, 0xe8b768eb18c8b8a2, 0x2fa64ad7e2f6e317, 0x6d56ab3c4b1cd584, 0xe374ef45bf6062ee, 0xa1840eae168a547d, 0x66952c92ecb40fc8, 0x2465cd79455e395b, 0x3821458aada7578f, 0x7ad1a461044d611c, 0xbdc0865dfe733aa9, 0xff3067b657990c3a, 0x711223cfa3e5bb50, 0x33e2c2240a0f8dc3, 0xf4f3e018f031d676, 0xb60301f359dbe0e5, 0xda050215ea6c212f, 0x98f5e3fe438617bc, 0x5fe4c1c2b9b84c09, 0x1d14202910527a9a, 0x93366450e42ecdf0, 0xd1c685bb4dc4fb63, 0x16d7a787b7faa0d6, 0x5427466c1e109645, 0x4863ce9ff6e9f891, 0x0a932f745f03ce02, 0xcd820d48a53d95b7, 0x8f72eca30cd7a324, 0x0150a8daf8ab144e, 0x43a04931514122dd, 0x84b16b0dab7f7968, 0xc6418ae602954ffb, 0xbc387aea7a8da4c0, 0xfec89b01d3679253, 0x39d9b93d2959c9e6, 0x7b2958d680b3ff75, 0xf50b1caf74cf481f, 0xb7fbfd44dd257e8c, 0x70eadf78271b2539, 0x321a3e938ef113aa, 0x2e5eb66066087d7e, 0x6cae578bcfe24bed, 0xabbf75b735dc1058, 0xe94f945c9c3626cb, 0x676dd025684a91a1, 0x259d31cec1a0a732, 0xe28c13f23b9efc87, 0xa07cf2199274ca14, 0x167ff3eacbaf2af1, 0x548f120162451c62, 0x939e303d987b47d7, 0xd16ed1d631917144, 0x5f4c95afc5edc62e, 0x1dbc74446c07f0bd, 0xdaad56789639ab08, 0x985db7933fd39d9b, 0x84193f60d72af34f, 0xc6e9de8b7ec0c5dc, 0x01f8fcb784fe9e69, 0x43081d5c2d14a8fa, 0xcd2a5925d9681f90, 0x8fdab8ce70822903, 0x48cb9af28abc72b6, 0x0a3b7b1923564425, 0x70428b155b4eaf1e, 0x32b26afef2a4998d, 0xf5a348c2089ac238, 0xb753a929a170f4ab, 0x3971ed50550c43c1, 0x7b810cbbfce67552, 0xbc902e8706d82ee7, 0xfe60cf6caf321874, 0xe224479f47cb76a0, 0xa0d4a674ee214033, 0x67c58448141f1b86, 0x253565a3bdf52d15, 0xab1721da49899a7f, 0xe9e7c031e063acec, 0x2ef6e20d1a5df759, 0x6c0603e6b3b7c1ca, 0xf6fae5c07d3274cd, 0xb40a042bd4d8425e, 0x731b26172ee619eb, 0x31ebc7fc870c2f78, 0xbfc9838573709812, 0xfd39626eda9aae81, 0x3a28405220a4f534, 0x78d8a1b9894ec3a7, 0x649c294a61b7ad73, 0x266cc8a1c85d9be0, 0xe17dea9d3263c055, 0xa38d0b769b89f6c6, 0x2daf4f0f6ff541ac, 0x6f5faee4c61f773f, 0xa84e8cd83c212c8a, 0xeabe6d3395cb1a19, 0x90c79d3fedd3f122, 0xd2377cd44439c7b1, 0x15265ee8be079c04, 0x57d6bf0317edaa97, 0xd9f4fb7ae3911dfd, 0x9b041a914a7b2b6e, 0x5c1538adb04570db, 0x1ee5d94619af4648, 0x02a151b5f156289c, 0x4051b05e58bc1e0f, 0x87409262a28245ba, 0xc5b073890b687329, 0x4b9237f0ff14c443, 0x0962d61b56fef2d0, 0xce73f427acc0a965, 0x8c8315cc052a9ff6, 0x3a80143f5cf17f13, 0x7870f5d4f51b4980, 0xbf61d7e80f251235, 0xfd913603a6cf24a6, 0x73b3727a52b393cc, 0x31439391fb59a55f, 0xf652b1ad0167feea, 0xb4a25046a88dc879, 0xa8e6d8b54074a6ad, 0xea16395ee99e903e, 0x2d071b6213a0cb8b, 0x6ff7fa89ba4afd18, 0xe1d5bef04e364a72, 0xa3255f1be7dc7ce1, 0x64347d271de22754, 0x26c49cccb40811c7, 0x5cbd6cc0cc10fafc, 0x1e4d8d2b65facc6f, 0xd95caf179fc497da, 0x9bac4efc362ea149, 0x158e0a85c2521623, 0x577eeb6e6bb820b0, 0x906fc95291867b05, 0xd29f28b9386c4d96, 0xcedba04ad0952342, 0x8c2b41a1797f15d1, 0x4b3a639d83414e64, 0x09ca82762aab78f7, 0x87e8c60fded7cf9d, 0xc51827e4773df90e, 0x020905d88d03a2bb, 0x40f9e43324e99428, 0x2cffe7d5975e55e2, 0x6e0f063e3eb46371, 0xa91e2402c48a38c4, 0xebeec5e96d600e57, 0x65cc8190991cb93d, 0x273c607b30f68fae, 0xe02d4247cac8d41b, 0xa2dda3ac6322e288, 0xbe992b5f8bdb8c5c, 0xfc69cab42231bacf, 0x3b78e888d80fe17a, 0x7988096371e5d7e9, 0xf7aa4d1a85996083, 0xb55aacf12c735610, 0x724b8ecdd64d0da5, 0x30bb6f267fa73b36, 0x4ac29f2a07bfd00d, 0x08327ec1ae55e69e, 0xcf235cfd546bbd2b, 0x8dd3bd16fd818bb8, 0x03f1f96f09fd3cd2, 0x41011884a0170a41, 0x86103ab85a2951f4, 0xc4e0db53f3c36767, 0xd8a453a01b3a09b3, 0x9a54b24bb2d03f20, 0x5d45907748ee6495, 0x1fb5719ce1045206, 0x919735e51578e56c, 0xd367d40ebc92d3ff, 0x1476f63246ac884a, 0x568617d9ef46bed9, 0xe085162ab69d5e3c, 0xa275f7c11f7768af, 0x6564d5fde549331a, 0x279434164ca30589, 0xa9b6706fb8dfb2e3, 0xeb46918411358470, 0x2c57b3b8eb0bdfc5, 0x6ea7525342e1e956, 0x72e3daa0aa188782, 0x30133b4b03f2b111, 0xf7021977f9cceaa4, 0xb5f2f89c5026dc37, 0x3bd0bce5a45a6b5d, 0x79205d0e0db05dce, 0xbe317f32f78e067b, 0xfcc19ed95e6430e8, 0x86b86ed5267cdbd3, 0xc4488f3e8f96ed40, 0x0359ad0275a8b6f5, 0x41a94ce9dc428066, 0xcf8b0890283e370c, 0x8d7be97b81d4019f, 0x4a6acb477bea5a2a, 0x089a2aacd2006cb9, 0x14dea25f3af9026d, 0x562e43b4931334fe, 0x913f6188692d6f4b, 0xd3cf8063c0c759d8, 0x5dedc41a34bbeeb2, 0x1f1d25f19d51d821, 0xd80c07cd676f8394, 0x9afce626ce85b507, ], [ 0x0000000000000000, 0xaf052a6b538edf09, 0x1cfab53d0ef78881, 0xb3ff9f565d795788, 0x39f56a7a1def1102, 0x96f040114e61ce0b, 0x250fdf4713189983, 0x8a0af52c4096468a, 0x73ead4f43bde2204, 0xdceffe9f6850fd0d, 0x6f1061c93529aa85, 0xc0154ba266a7758c, 0x4a1fbe8e26313306, 0xe51a94e575bfec0f, 0x56e50bb328c6bb87, 0xf9e021d87b48648e, 0xe7d5a9e877bc4408, 0x48d0838324329b01, 0xfb2f1cd5794bcc89, 0x542a36be2ac51380, 0xde20c3926a53550a, 0x7125e9f939dd8a03, 0xc2da76af64a4dd8b, 0x6ddf5cc4372a0282, 0x943f7d1c4c62660c, 0x3b3a57771fecb905, 0x88c5c8214295ee8d, 0x27c0e24a111b3184, 0xadca1766518d770e, 0x02cf3d0d0203a807, 0xb130a25b5f7aff8f, 0x1e3588300cf42086, 0x8d5bb23b4692be83, 0x225e9850151c618a, 0x91a1070648653602, 0x3ea42d6d1bebe90b, 0xb4aed8415b7daf81, 0x1babf22a08f37088, 0xa8546d7c558a2700, 0x075147170604f809, 0xfeb166cf7d4c9c87, 0x51b44ca42ec2438e, 0xe24bd3f273bb1406, 0x4d4ef9992035cb0f, 0xc7440cb560a38d85, 0x684126de332d528c, 0xdbbeb9886e540504, 0x74bb93e33ddada0d, 0x6a8e1bd3312efa8b, 0xc58b31b862a02582, 0x7674aeee3fd9720a, 0xd97184856c57ad03, 0x537b71a92cc1eb89, 0xfc7e5bc27f4f3480, 0x4f81c49422366308, 0xe084eeff71b8bc01, 0x1964cf270af0d88f, 0xb661e54c597e0786, 0x059e7a1a0407500e, 0xaa9b507157898f07, 0x2091a55d171fc98d, 0x8f948f3644911684, 0x3c6b106019e8410c, 0x936e3a0b4a669e05, 0x5847859d24cf4b95, 0xf742aff67741949c, 0x44bd30a02a38c314, 0xebb81acb79b61c1d, 0x61b2efe739205a97, 0xceb7c58c6aae859e, 0x7d485ada37d7d216, 0xd24d70b164590d1f, 0x2bad51691f116991, 0x84a87b024c9fb698, 0x3757e45411e6e110, 0x9852ce3f42683e19, 0x12583b1302fe7893, 0xbd5d11785170a79a, 0x0ea28e2e0c09f012, 0xa1a7a4455f872f1b, 0xbf922c7553730f9d, 0x1097061e00fdd094, 0xa36899485d84871c, 0x0c6db3230e0a5815, 0x8667460f4e9c1e9f, 0x29626c641d12c196, 0x9a9df332406b961e, 0x3598d95913e54917, 0xcc78f88168ad2d99, 0x637dd2ea3b23f290, 0xd0824dbc665aa518, 0x7f8767d735d47a11, 0xf58d92fb75423c9b, 0x5a88b89026cce392, 0xe97727c67bb5b41a, 0x46720dad283b6b13, 0xd51c37a6625df516, 0x7a191dcd31d32a1f, 0xc9e6829b6caa7d97, 0x66e3a8f03f24a29e, 0xece95ddc7fb2e414, 0x43ec77b72c3c3b1d, 0xf013e8e171456c95, 0x5f16c28a22cbb39c, 0xa6f6e3525983d712, 0x09f3c9390a0d081b, 0xba0c566f57745f93, 0x15097c0404fa809a, 0x9f038928446cc610, 0x3006a34317e21919, 0x83f93c154a9b4e91, 0x2cfc167e19159198, 0x32c99e4e15e1b11e, 0x9dccb425466f6e17, 0x2e332b731b16399f, 0x813601184898e696, 0x0b3cf434080ea01c, 0xa439de5f5b807f15, 0x17c6410906f9289d, 0xb8c36b625577f794, 0x41234aba2e3f931a, 0xee2660d17db14c13, 0x5dd9ff8720c81b9b, 0xf2dcd5ec7346c492, 0x78d620c033d08218, 0xd7d30aab605e5d11, 0x642c95fd3d270a99, 0xcb29bf966ea9d590, 0xb08f0b3a499e972a, 0x1f8a21511a104823, 0xac75be0747691fab, 0x0370946c14e7c0a2, 0x897a614054718628, 0x267f4b2b07ff5921, 0x9580d47d5a860ea9, 0x3a85fe160908d1a0, 0xc365dfce7240b52e, 0x6c60f5a521ce6a27, 0xdf9f6af37cb73daf, 0x709a40982f39e2a6, 0xfa90b5b46fafa42c, 0x55959fdf3c217b25, 0xe66a008961582cad, 0x496f2ae232d6f3a4, 0x575aa2d23e22d322, 0xf85f88b96dac0c2b, 0x4ba017ef30d55ba3, 0xe4a53d84635b84aa, 0x6eafc8a823cdc220, 0xc1aae2c370431d29, 0x72557d952d3a4aa1, 0xdd5057fe7eb495a8, 0x24b0762605fcf126, 0x8bb55c4d56722e2f, 0x384ac31b0b0b79a7, 0x974fe9705885a6ae, 0x1d451c5c1813e024, 0xb24036374b9d3f2d, 0x01bfa96116e468a5, 0xaeba830a456ab7ac, 0x3dd4b9010f0c29a9, 0x92d1936a5c82f6a0, 0x212e0c3c01fba128, 0x8e2b265752757e21, 0x0421d37b12e338ab, 0xab24f910416de7a2, 0x18db66461c14b02a, 0xb7de4c2d4f9a6f23, 0x4e3e6df534d20bad, 0xe13b479e675cd4a4, 0x52c4d8c83a25832c, 0xfdc1f2a369ab5c25, 0x77cb078f293d1aaf, 0xd8ce2de47ab3c5a6, 0x6b31b2b227ca922e, 0xc43498d974444d27, 0xda0110e978b06da1, 0x75043a822b3eb2a8, 0xc6fba5d47647e520, 0x69fe8fbf25c93a29, 0xe3f47a93655f7ca3, 0x4cf150f836d1a3aa, 0xff0ecfae6ba8f422, 0x500be5c538262b2b, 0xa9ebc41d436e4fa5, 0x06eeee7610e090ac, 0xb51171204d99c724, 0x1a145b4b1e17182d, 0x901eae675e815ea7, 0x3f1b840c0d0f81ae, 0x8ce41b5a5076d626, 0x23e1313103f8092f, 0xe8c88ea76d51dcbf, 0x47cda4cc3edf03b6, 0xf4323b9a63a6543e, 0x5b3711f130288b37, 0xd13de4dd70becdbd, 0x7e38ceb6233012b4, 0xcdc751e07e49453c, 0x62c27b8b2dc79a35, 0x9b225a53568ffebb, 0x34277038050121b2, 0x87d8ef6e5878763a, 0x28ddc5050bf6a933, 0xa2d730294b60efb9, 0x0dd21a4218ee30b0, 0xbe2d851445976738, 0x1128af7f1619b831, 0x0f1d274f1aed98b7, 0xa0180d24496347be, 0x13e79272141a1036, 0xbce2b8194794cf3f, 0x36e84d35070289b5, 0x99ed675e548c56bc, 0x2a12f80809f50134, 0x8517d2635a7bde3d, 0x7cf7f3bb2133bab3, 0xd3f2d9d072bd65ba, 0x600d46862fc43232, 0xcf086ced7c4aed3b, 0x450299c13cdcabb1, 0xea07b3aa6f5274b8, 0x59f82cfc322b2330, 0xf6fd069761a5fc39, 0x65933c9c2bc3623c, 0xca9616f7784dbd35, 0x796989a12534eabd, 0xd66ca3ca76ba35b4, 0x5c6656e6362c733e, 0xf3637c8d65a2ac37, 0x409ce3db38dbfbbf, 0xef99c9b06b5524b6, 0x1679e868101d4038, 0xb97cc20343939f31, 0x0a835d551eeac8b9, 0xa586773e4d6417b0, 0x2f8c82120df2513a, 0x8089a8795e7c8e33, 0x3376372f0305d9bb, 0x9c731d44508b06b2, 0x824695745c7f2634, 0x2d43bf1f0ff1f93d, 0x9ebc20495288aeb5, 0x31b90a22010671bc, 0xbbb3ff0e41903736, 0x14b6d565121ee83f, 0xa7494a334f67bfb7, 0x084c60581ce960be, 0xf1ac418067a10430, 0x5ea96beb342fdb39, 0xed56f4bd69568cb1, 0x4253ded63ad853b8, 0xc8592bfa7a4e1532, 0x675c019129c0ca3b, 0xd4a39ec774b99db3, 0x7ba6b4ac273742ba, ], [ 0x0000000000000000, 0x23eef79f3ad718c7, 0x47ddef3e75ae318e, 0x643318a14f792949, 0x8fbbde7ceb5c631c, 0xac5529e3d18b7bdb, 0xc86631429ef25292, 0xeb88c6dda4254a55, 0x5d875d127f52f0ab, 0x7e69aa8d4585e86c, 0x1a5ab22c0afcc125, 0x39b445b3302bd9e2, 0xd23c836e940e93b7, 0xf1d274f1aed98b70, 0x95e16c50e1a0a239, 0xb60f9bcfdb77bafe, 0xbb0eba24fea5e156, 0x98e04dbbc472f991, 0xfcd3551a8b0bd0d8, 0xdf3da285b1dcc81f, 0x34b5645815f9824a, 0x175b93c72f2e9a8d, 0x73688b666057b3c4, 0x50867cf95a80ab03, 0xe689e73681f711fd, 0xc56710a9bb20093a, 0xa1540808f4592073, 0x82baff97ce8e38b4, 0x6932394a6aab72e1, 0x4adcced5507c6a26, 0x2eefd6741f05436f, 0x0d0121eb25d25ba8, 0x34ed95a254a1f43f, 0x1703623d6e76ecf8, 0x73307a9c210fc5b1, 0x50de8d031bd8dd76, 0xbb564bdebffd9723, 0x98b8bc41852a8fe4, 0xfc8ba4e0ca53a6ad, 0xdf65537ff084be6a, 0x696ac8b02bf30494, 0x4a843f2f11241c53, 0x2eb7278e5e5d351a, 0x0d59d011648a2ddd, 0xe6d116ccc0af6788, 0xc53fe153fa787f4f, 0xa10cf9f2b5015606, 0x82e20e6d8fd64ec1, 0x8fe32f86aa041569, 0xac0dd81990d30dae, 0xc83ec0b8dfaa24e7, 0xebd03727e57d3c20, 0x0058f1fa41587675, 0x23b606657b8f6eb2, 0x47851ec434f647fb, 0x646be95b0e215f3c, 0xd2647294d556e5c2, 0xf18a850bef81fd05, 0x95b99daaa0f8d44c, 0xb6576a359a2fcc8b, 0x5ddface83e0a86de, 0x7e315b7704dd9e19, 0x1a0243d64ba4b750, 0x39ecb4497173af97, 0x69db2b44a943e87e, 0x4a35dcdb9394f0b9, 0x2e06c47adcedd9f0, 0x0de833e5e63ac137, 0xe660f538421f8b62, 0xc58e02a778c893a5, 0xa1bd1a0637b1baec, 0x8253ed990d66a22b, 0x345c7656d61118d5, 0x17b281c9ecc60012, 0x73819968a3bf295b, 0x506f6ef79968319c, 0xbbe7a82a3d4d7bc9, 0x98095fb5079a630e, 0xfc3a471448e34a47, 0xdfd4b08b72345280, 0xd2d5916057e60928, 0xf13b66ff6d3111ef, 0x95087e5e224838a6, 0xb6e689c1189f2061, 0x5d6e4f1cbcba6a34, 0x7e80b883866d72f3, 0x1ab3a022c9145bba, 0x395d57bdf3c3437d, 0x8f52cc7228b4f983, 0xacbc3bed1263e144, 0xc88f234c5d1ac80d, 0xeb61d4d367cdd0ca, 0x00e9120ec3e89a9f, 0x2307e591f93f8258, 0x4734fd30b646ab11, 0x64da0aaf8c91b3d6, 0x5d36bee6fde21c41, 0x7ed84979c7350486, 0x1aeb51d8884c2dcf, 0x3905a647b29b3508, 0xd28d609a16be7f5d, 0xf16397052c69679a, 0x95508fa463104ed3, 0xb6be783b59c75614, 0x00b1e3f482b0ecea, 0x235f146bb867f42d, 0x476c0ccaf71edd64, 0x6482fb55cdc9c5a3, 0x8f0a3d8869ec8ff6, 0xace4ca17533b9731, 0xc8d7d2b61c42be78, 0xeb3925292695a6bf, 0xe63804c20347fd17, 0xc5d6f35d3990e5d0, 0xa1e5ebfc76e9cc99, 0x820b1c634c3ed45e, 0x6983dabee81b9e0b, 0x4a6d2d21d2cc86cc, 0x2e5e35809db5af85, 0x0db0c21fa762b742, 0xbbbf59d07c150dbc, 0x9851ae4f46c2157b, 0xfc62b6ee09bb3c32, 0xdf8c4171336c24f5, 0x340487ac97496ea0, 0x17ea7033ad9e7667, 0x73d96892e2e75f2e, 0x50379f0dd83047e9, 0xd3b656895287d0fc, 0xf058a1166850c83b, 0x946bb9b72729e172, 0xb7854e281dfef9b5, 0x5c0d88f5b9dbb3e0, 0x7fe37f6a830cab27, 0x1bd067cbcc75826e, 0x383e9054f6a29aa9, 0x8e310b9b2dd52057, 0xaddffc0417023890, 0xc9ece4a5587b11d9, 0xea02133a62ac091e, 0x018ad5e7c689434b, 0x22642278fc5e5b8c, 0x46573ad9b32772c5, 0x65b9cd4689f06a02, 0x68b8ecadac2231aa, 0x4b561b3296f5296d, 0x2f650393d98c0024, 0x0c8bf40ce35b18e3, 0xe70332d1477e52b6, 0xc4edc54e7da94a71, 0xa0deddef32d06338, 0x83302a7008077bff, 0x353fb1bfd370c101, 0x16d14620e9a7d9c6, 0x72e25e81a6def08f, 0x510ca91e9c09e848, 0xba846fc3382ca21d, 0x996a985c02fbbada, 0xfd5980fd4d829393, 0xdeb7776277558b54, 0xe75bc32b062624c3, 0xc4b534b43cf13c04, 0xa0862c157388154d, 0x8368db8a495f0d8a, 0x68e01d57ed7a47df, 0x4b0eeac8d7ad5f18, 0x2f3df26998d47651, 0x0cd305f6a2036e96, 0xbadc9e397974d468, 0x993269a643a3ccaf, 0xfd0171070cdae5e6, 0xdeef8698360dfd21, 0x356740459228b774, 0x1689b7daa8ffafb3, 0x72baaf7be78686fa, 0x515458e4dd519e3d, 0x5c55790ff883c595, 0x7fbb8e90c254dd52, 0x1b8896318d2df41b, 0x386661aeb7faecdc, 0xd3eea77313dfa689, 0xf00050ec2908be4e, 0x9433484d66719707, 0xb7ddbfd25ca68fc0, 0x01d2241d87d1353e, 0x223cd382bd062df9, 0x460fcb23f27f04b0, 0x65e13cbcc8a81c77, 0x8e69fa616c8d5622, 0xad870dfe565a4ee5, 0xc9b4155f192367ac, 0xea5ae2c023f47f6b, 0xba6d7dcdfbc43882, 0x99838a52c1132045, 0xfdb092f38e6a090c, 0xde5e656cb4bd11cb, 0x35d6a3b110985b9e, 0x1638542e2a4f4359, 0x720b4c8f65366a10, 0x51e5bb105fe172d7, 0xe7ea20df8496c829, 0xc404d740be41d0ee, 0xa037cfe1f138f9a7, 0x83d9387ecbefe160, 0x6851fea36fcaab35, 0x4bbf093c551db3f2, 0x2f8c119d1a649abb, 0x0c62e60220b3827c, 0x0163c7e90561d9d4, 0x228d30763fb6c113, 0x46be28d770cfe85a, 0x6550df484a18f09d, 0x8ed81995ee3dbac8, 0xad36ee0ad4eaa20f, 0xc905f6ab9b938b46, 0xeaeb0134a1449381, 0x5ce49afb7a33297f, 0x7f0a6d6440e431b8, 0x1b3975c50f9d18f1, 0x38d7825a354a0036, 0xd35f4487916f4a63, 0xf0b1b318abb852a4, 0x9482abb9e4c17bed, 0xb76c5c26de16632a, 0x8e80e86faf65ccbd, 0xad6e1ff095b2d47a, 0xc95d0751dacbfd33, 0xeab3f0cee01ce5f4, 0x013b36134439afa1, 0x22d5c18c7eeeb766, 0x46e6d92d31979e2f, 0x65082eb20b4086e8, 0xd307b57dd0373c16, 0xf0e942e2eae024d1, 0x94da5a43a5990d98, 0xb734addc9f4e155f, 0x5cbc6b013b6b5f0a, 0x7f529c9e01bc47cd, 0x1b61843f4ec56e84, 0x388f73a074127643, 0x358e524b51c02deb, 0x1660a5d46b17352c, 0x7253bd75246e1c65, 0x51bd4aea1eb904a2, 0xba358c37ba9c4ef7, 0x99db7ba8804b5630, 0xfde86309cf327f79, 0xde069496f5e567be, 0x68090f592e92dd40, 0x4be7f8c61445c587, 0x2fd4e0675b3cecce, 0x0c3a17f861ebf409, 0xe7b2d125c5cebe5c, 0xc45c26baff19a69b, 0xa06f3e1bb0608fd2, 0x8381c9848ab79715, ], [ 0x0000000000000000, 0xe59c4cf90ce5976b, 0x89c87819b0211845, 0x6c5434e0bcc48f2e, 0x516011d8c9a80619, 0xb4fc5d21c54d9172, 0xd8a869c179891e5c, 0x3d342538756c8937, 0xa2c023b193500c32, 0x475c6f489fb59b59, 0x2b085ba823711477, 0xce9417512f94831c, 0xf3a032695af80a2b, 0x163c7e90561d9d40, 0x7a684a70ead9126e, 0x9ff40689e63c8505, 0x0770a6888f4a2ef7, 0xe2ecea7183afb99c, 0x8eb8de913f6b36b2, 0x6b249268338ea1d9, 0x5610b75046e228ee, 0xb38cfba94a07bf85, 0xdfd8cf49f6c330ab, 0x3a4483b0fa26a7c0, 0xa5b085391c1a22c5, 0x402cc9c010ffb5ae, 0x2c78fd20ac3b3a80, 0xc9e4b1d9a0deadeb, 0xf4d094e1d5b224dc, 0x114cd818d957b3b7, 0x7d18ecf865933c99, 0x9884a0016976abf2, 0x0ee14d111e945dee, 0xeb7d01e81271ca85, 0x87293508aeb545ab, 0x62b579f1a250d2c0, 0x5f815cc9d73c5bf7, 0xba1d1030dbd9cc9c, 0xd64924d0671d43b2, 0x33d568296bf8d4d9, 0xac216ea08dc451dc, 0x49bd22598121c6b7, 0x25e916b93de54999, 0xc0755a403100def2, 0xfd417f78446c57c5, 0x18dd33814889c0ae, 0x74890761f44d4f80, 0x91154b98f8a8d8eb, 0x0991eb9991de7319, 0xec0da7609d3be472, 0x8059938021ff6b5c, 0x65c5df792d1afc37, 0x58f1fa4158767500, 0xbd6db6b85493e26b, 0xd1398258e8576d45, 0x34a5cea1e4b2fa2e, 0xab51c828028e7f2b, 0x4ecd84d10e6be840, 0x2299b031b2af676e, 0xc705fcc8be4af005, 0xfa31d9f0cb267932, 0x1fad9509c7c3ee59, 0x73f9a1e97b076177, 0x9665ed1077e2f61c, 0x1dc29a223d28bbdc, 0xf85ed6db31cd2cb7, 0x940ae23b8d09a399, 0x7196aec281ec34f2, 0x4ca28bfaf480bdc5, 0xa93ec703f8652aae, 0xc56af3e344a1a580, 0x20f6bf1a484432eb, 0xbf02b993ae78b7ee, 0x5a9ef56aa29d2085, 0x36cac18a1e59afab, 0xd3568d7312bc38c0, 0xee62a84b67d0b1f7, 0x0bfee4b26b35269c, 0x67aad052d7f1a9b2, 0x82369cabdb143ed9, 0x1ab23caab262952b, 0xff2e7053be870240, 0x937a44b302438d6e, 0x76e6084a0ea61a05, 0x4bd22d727bca9332, 0xae4e618b772f0459, 0xc21a556bcbeb8b77, 0x27861992c70e1c1c, 0xb8721f1b21329919, 0x5dee53e22dd70e72, 0x31ba67029113815c, 0xd4262bfb9df61637, 0xe9120ec3e89a9f00, 0x0c8e423ae47f086b, 0x60da76da58bb8745, 0x85463a23545e102e, 0x1323d73323bce632, 0xf6bf9bca2f597159, 0x9aebaf2a939dfe77, 0x7f77e3d39f78691c, 0x4243c6ebea14e02b, 0xa7df8a12e6f17740, 0xcb8bbef25a35f86e, 0x2e17f20b56d06f05, 0xb1e3f482b0ecea00, 0x547fb87bbc097d6b, 0x382b8c9b00cdf245, 0xddb7c0620c28652e, 0xe083e55a7944ec19, 0x051fa9a375a17b72, 0x694b9d43c965f45c, 0x8cd7d1bac5806337, 0x145371bbacf6c8c5, 0xf1cf3d42a0135fae, 0x9d9b09a21cd7d080, 0x7807455b103247eb, 0x45336063655ecedc, 0xa0af2c9a69bb59b7, 0xccfb187ad57fd699, 0x29675483d99a41f2, 0xb693520a3fa6c4f7, 0x530f1ef33343539c, 0x3f5b2a138f87dcb2, 0xdac766ea83624bd9, 0xe7f343d2f60ec2ee, 0x026f0f2bfaeb5585, 0x6e3b3bcb462fdaab, 0x8ba777324aca4dc0, 0x3b8534447a5177b8, 0xde1978bd76b4e0d3, 0xb24d4c5dca706ffd, 0x57d100a4c695f896, 0x6ae5259cb3f971a1, 0x8f796965bf1ce6ca, 0xe32d5d8503d869e4, 0x06b1117c0f3dfe8f, 0x994517f5e9017b8a, 0x7cd95b0ce5e4ece1, 0x108d6fec592063cf, 0xf511231555c5f4a4, 0xc825062d20a97d93, 0x2db94ad42c4ceaf8, 0x41ed7e34908865d6, 0xa47132cd9c6df2bd, 0x3cf592ccf51b594f, 0xd969de35f9fece24, 0xb53dead5453a410a, 0x50a1a62c49dfd661, 0x6d9583143cb35f56, 0x8809cfed3056c83d, 0xe45dfb0d8c924713, 0x01c1b7f48077d078, 0x9e35b17d664b557d, 0x7ba9fd846aaec216, 0x17fdc964d66a4d38, 0xf261859dda8fda53, 0xcf55a0a5afe35364, 0x2ac9ec5ca306c40f, 0x469dd8bc1fc24b21, 0xa30194451327dc4a, 0x3564795564c52a56, 0xd0f835ac6820bd3d, 0xbcac014cd4e43213, 0x59304db5d801a578, 0x6404688dad6d2c4f, 0x81982474a188bb24, 0xedcc10941d4c340a, 0x08505c6d11a9a361, 0x97a45ae4f7952664, 0x7238161dfb70b10f, 0x1e6c22fd47b43e21, 0xfbf06e044b51a94a, 0xc6c44b3c3e3d207d, 0x235807c532d8b716, 0x4f0c33258e1c3838, 0xaa907fdc82f9af53, 0x3214dfddeb8f04a1, 0xd7889324e76a93ca, 0xbbdca7c45bae1ce4, 0x5e40eb3d574b8b8f, 0x6374ce05222702b8, 0x86e882fc2ec295d3, 0xeabcb61c92061afd, 0x0f20fae59ee38d96, 0x90d4fc6c78df0893, 0x7548b095743a9ff8, 0x191c8475c8fe10d6, 0xfc80c88cc41b87bd, 0xc1b4edb4b1770e8a, 0x2428a14dbd9299e1, 0x487c95ad015616cf, 0xade0d9540db381a4, 0x2647ae664779cc64, 0xc3dbe29f4b9c5b0f, 0xaf8fd67ff758d421, 0x4a139a86fbbd434a, 0x7727bfbe8ed1ca7d, 0x92bbf34782345d16, 0xfeefc7a73ef0d238, 0x1b738b5e32154553, 0x84878dd7d429c056, 0x611bc12ed8cc573d, 0x0d4ff5ce6408d813, 0xe8d3b93768ed4f78, 0xd5e79c0f1d81c64f, 0x307bd0f611645124, 0x5c2fe416ada0de0a, 0xb9b3a8efa1454961, 0x213708eec833e293, 0xc4ab4417c4d675f8, 0xa8ff70f77812fad6, 0x4d633c0e74f76dbd, 0x70571936019be48a, 0x95cb55cf0d7e73e1, 0xf99f612fb1bafccf, 0x1c032dd6bd5f6ba4, 0x83f72b5f5b63eea1, 0x666b67a6578679ca, 0x0a3f5346eb42f6e4, 0xefa31fbfe7a7618f, 0xd2973a8792cbe8b8, 0x370b767e9e2e7fd3, 0x5b5f429e22eaf0fd, 0xbec30e672e0f6796, 0x28a6e37759ed918a, 0xcd3aaf8e550806e1, 0xa16e9b6ee9cc89cf, 0x44f2d797e5291ea4, 0x79c6f2af90459793, 0x9c5abe569ca000f8, 0xf00e8ab620648fd6, 0x1592c64f2c8118bd, 0x8a66c0c6cabd9db8, 0x6ffa8c3fc6580ad3, 0x03aeb8df7a9c85fd, 0xe632f42676791296, 0xdb06d11e03159ba1, 0x3e9a9de70ff00cca, 0x52cea907b33483e4, 0xb752e5febfd1148f, 0x2fd645ffd6a7bf7d, 0xca4a0906da422816, 0xa61e3de66686a738, 0x4382711f6a633053, 0x7eb654271f0fb964, 0x9b2a18de13ea2e0f, 0xf77e2c3eaf2ea121, 0x12e260c7a3cb364a, 0x8d16664e45f7b34f, 0x688a2ab749122424, 0x04de1e57f5d6ab0a, 0xe14252aef9333c61, 0xdc7677968c5fb556, 0x39ea3b6f80ba223d, 0x55be0f8f3c7ead13, 0xb0224376309b3a78, ], [ 0x0000000000000000, 0x770a6888f4a2ef70, 0xee14d111e945dee0, 0x991eb9991de73190, 0x9ed943c87b618b53, 0xe9d32b408fc36423, 0x70cd92d9922455b3, 0x07c7fa516686bac3, 0x7f42667b5f292035, 0x08480ef3ab8bcf45, 0x9156b76ab66cfed5, 0xe65cdfe242ce11a5, 0xe19b25b32448ab66, 0x96914d3bd0ea4416, 0x0f8ff4a2cd0d7586, 0x78859c2a39af9af6, 0xfe84ccf6be52406a, 0x898ea47e4af0af1a, 0x10901de757179e8a, 0x679a756fa3b571fa, 0x605d8f3ec533cb39, 0x1757e7b631912449, 0x8e495e2f2c7615d9, 0xf94336a7d8d4faa9, 0x81c6aa8de17b605f, 0xf6ccc20515d98f2f, 0x6fd27b9c083ebebf, 0x18d81314fc9c51cf, 0x1f1fe9459a1aeb0c, 0x681581cd6eb8047c, 0xf10b3854735f35ec, 0x860150dc87fdda9c, 0xbff97806d54eb647, 0xc8f3108e21ec5937, 0x51eda9173c0b68a7, 0x26e7c19fc8a987d7, 0x21203bceae2f3d14, 0x562a53465a8dd264, 0xcf34eadf476ae3f4, 0xb83e8257b3c80c84, 0xc0bb1e7d8a679672, 0xb7b176f57ec57902, 0x2eafcf6c63224892, 0x59a5a7e49780a7e2, 0x5e625db5f1061d21, 0x2968353d05a4f251, 0xb0768ca41843c3c1, 0xc77ce42cece12cb1, 0x417db4f06b1cf62d, 0x3677dc789fbe195d, 0xaf6965e1825928cd, 0xd8630d6976fbc7bd, 0xdfa4f738107d7d7e, 0xa8ae9fb0e4df920e, 0x31b02629f938a39e, 0x46ba4ea10d9a4cee, 0x3e3fd28b3435d618, 0x4935ba03c0973968, 0xd02b039add7008f8, 0xa7216b1229d2e788, 0xa0e691434f545d4b, 0xd7ecf9cbbbf6b23b, 0x4ef24052a61183ab, 0x39f828da52b36cdb, 0x3d0211e603775a1d, 0x4a08796ef7d5b56d, 0xd316c0f7ea3284fd, 0xa41ca87f1e906b8d, 0xa3db522e7816d14e, 0xd4d13aa68cb43e3e, 0x4dcf833f91530fae, 0x3ac5ebb765f1e0de, 0x4240779d5c5e7a28, 0x354a1f15a8fc9558, 0xac54a68cb51ba4c8, 0xdb5ece0441b94bb8, 0xdc993455273ff17b, 0xab935cddd39d1e0b, 0x328de544ce7a2f9b, 0x45878dcc3ad8c0eb, 0xc386dd10bd251a77, 0xb48cb5984987f507, 0x2d920c015460c497, 0x5a986489a0c22be7, 0x5d5f9ed8c6449124, 0x2a55f65032e67e54, 0xb34b4fc92f014fc4, 0xc4412741dba3a0b4, 0xbcc4bb6be20c3a42, 0xcbced3e316aed532, 0x52d06a7a0b49e4a2, 0x25da02f2ffeb0bd2, 0x221df8a3996db111, 0x5517902b6dcf5e61, 0xcc0929b270286ff1, 0xbb03413a848a8081, 0x82fb69e0d639ec5a, 0xf5f10168229b032a, 0x6cefb8f13f7c32ba, 0x1be5d079cbdeddca, 0x1c222a28ad586709, 0x6b2842a059fa8879, 0xf236fb39441db9e9, 0x853c93b1b0bf5699, 0xfdb90f9b8910cc6f, 0x8ab367137db2231f, 0x13adde8a6055128f, 0x64a7b60294f7fdff, 0x63604c53f271473c, 0x146a24db06d3a84c, 0x8d749d421b3499dc, 0xfa7ef5caef9676ac, 0x7c7fa516686bac30, 0x0b75cd9e9cc94340, 0x926b7407812e72d0, 0xe5611c8f758c9da0, 0xe2a6e6de130a2763, 0x95ac8e56e7a8c813, 0x0cb237cffa4ff983, 0x7bb85f470eed16f3, 0x033dc36d37428c05, 0x7437abe5c3e06375, 0xed29127cde0752e5, 0x9a237af42aa5bd95, 0x9de480a54c230756, 0xeaeee82db881e826, 0x73f051b4a566d9b6, 0x04fa393c51c436c6, 0x7a0423cc06eeb43a, 0x0d0e4b44f24c5b4a, 0x9410f2ddefab6ada, 0xe31a9a551b0985aa, 0xe4dd60047d8f3f69, 0x93d7088c892dd019, 0x0ac9b11594cae189, 0x7dc3d99d60680ef9, 0x054645b759c7940f, 0x724c2d3fad657b7f, 0xeb5294a6b0824aef, 0x9c58fc2e4420a59f, 0x9b9f067f22a61f5c, 0xec956ef7d604f02c, 0x758bd76ecbe3c1bc, 0x0281bfe63f412ecc, 0x8480ef3ab8bcf450, 0xf38a87b24c1e1b20, 0x6a943e2b51f92ab0, 0x1d9e56a3a55bc5c0, 0x1a59acf2c3dd7f03, 0x6d53c47a377f9073, 0xf44d7de32a98a1e3, 0x8347156bde3a4e93, 0xfbc28941e795d465, 0x8cc8e1c913373b15, 0x15d658500ed00a85, 0x62dc30d8fa72e5f5, 0x651bca899cf45f36, 0x1211a2016856b046, 0x8b0f1b9875b181d6, 0xfc05731081136ea6, 0xc5fd5bcad3a0027d, 0xb2f733422702ed0d, 0x2be98adb3ae5dc9d, 0x5ce3e253ce4733ed, 0x5b241802a8c1892e, 0x2c2e708a5c63665e, 0xb530c913418457ce, 0xc23aa19bb526b8be, 0xbabf3db18c892248, 0xcdb55539782bcd38, 0x54abeca065ccfca8, 0x23a18428916e13d8, 0x24667e79f7e8a91b, 0x536c16f1034a466b, 0xca72af681ead77fb, 0xbd78c7e0ea0f988b, 0x3b79973c6df24217, 0x4c73ffb49950ad67, 0xd56d462d84b79cf7, 0xa2672ea570157387, 0xa5a0d4f41693c944, 0xd2aabc7ce2312634, 0x4bb405e5ffd617a4, 0x3cbe6d6d0b74f8d4, 0x443bf14732db6222, 0x333199cfc6798d52, 0xaa2f2056db9ebcc2, 0xdd2548de2f3c53b2, 0xdae2b28f49bae971, 0xade8da07bd180601, 0x34f6639ea0ff3791, 0x43fc0b16545dd8e1, 0x4706322a0599ee27, 0x300c5aa2f13b0157, 0xa912e33becdc30c7, 0xde188bb3187edfb7, 0xd9df71e27ef86574, 0xaed5196a8a5a8a04, 0x37cba0f397bdbb94, 0x40c1c87b631f54e4, 0x384454515ab0ce12, 0x4f4e3cd9ae122162, 0xd6508540b3f510f2, 0xa15aedc84757ff82, 0xa69d179921d14541, 0xd1977f11d573aa31, 0x4889c688c8949ba1, 0x3f83ae003c3674d1, 0xb982fedcbbcbae4d, 0xce8896544f69413d, 0x57962fcd528e70ad, 0x209c4745a62c9fdd, 0x275bbd14c0aa251e, 0x5051d59c3408ca6e, 0xc94f6c0529effbfe, 0xbe45048ddd4d148e, 0xc6c098a7e4e28e78, 0xb1caf02f10406108, 0x28d449b60da75098, 0x5fde213ef905bfe8, 0x5819db6f9f83052b, 0x2f13b3e76b21ea5b, 0xb60d0a7e76c6dbcb, 0xc10762f6826434bb, 0xf8ff4a2cd0d75860, 0x8ff522a42475b710, 0x16eb9b3d39928680, 0x61e1f3b5cd3069f0, 0x662609e4abb6d333, 0x112c616c5f143c43, 0x8832d8f542f30dd3, 0xff38b07db651e2a3, 0x87bd2c578ffe7855, 0xf0b744df7b5c9725, 0x69a9fd4666bba6b5, 0x1ea395ce921949c5, 0x19646f9ff49ff306, 0x6e6e0717003d1c76, 0xf770be8e1dda2de6, 0x807ad606e978c296, 0x067b86da6e85180a, 0x7171ee529a27f77a, 0xe86f57cb87c0c6ea, 0x9f653f437362299a, 0x98a2c51215e49359, 0xefa8ad9ae1467c29, 0x76b61403fca14db9, 0x01bc7c8b0803a2c9, 0x7939e0a131ac383f, 0x0e338829c50ed74f, 0x972d31b0d8e9e6df, 0xe02759382c4b09af, 0xe7e0a3694acdb36c, 0x90eacbe1be6f5c1c, 0x09f47278a3886d8c, 0x7efe1af0572a82fc, ], [ 0x0000000000000000, 0xf40847980ddd6874, 0xaae06edbb250e67b, 0x5ee82943bf8d8e0f, 0x17303c5ccd4bfa65, 0xe3387bc4c0969211, 0xbdd052877f1b1c1e, 0x49d8151f72c6746a, 0x2e6078b99a97f4ca, 0xda683f21974a9cbe, 0x8480166228c712b1, 0x708851fa251a7ac5, 0x395044e557dc0eaf, 0xcd58037d5a0166db, 0x93b02a3ee58ce8d4, 0x67b86da6e85180a0, 0x5cc0f173352fe994, 0xa8c8b6eb38f281e0, 0xf6209fa8877f0fef, 0x0228d8308aa2679b, 0x4bf0cd2ff86413f1, 0xbff88ab7f5b97b85, 0xe110a3f44a34f58a, 0x1518e46c47e99dfe, 0x72a089caafb81d5e, 0x86a8ce52a265752a, 0xd840e7111de8fb25, 0x2c48a08910359351, 0x6590b59662f3e73b, 0x9198f20e6f2e8f4f, 0xcf70db4dd0a30140, 0x3b789cd5dd7e6934, 0xb981e2e66a5fd328, 0x4d89a57e6782bb5c, 0x13618c3dd80f3553, 0xe769cba5d5d25d27, 0xaeb1debaa714294d, 0x5ab99922aac94139, 0x0451b0611544cf36, 0xf059f7f91899a742, 0x97e19a5ff0c827e2, 0x63e9ddc7fd154f96, 0x3d01f4844298c199, 0xc909b31c4f45a9ed, 0x80d1a6033d83dd87, 0x74d9e19b305eb5f3, 0x2a31c8d88fd33bfc, 0xde398f40820e5388, 0xe54113955f703abc, 0x1149540d52ad52c8, 0x4fa17d4eed20dcc7, 0xbba93ad6e0fdb4b3, 0xf2712fc9923bc0d9, 0x067968519fe6a8ad, 0x58914112206b26a2, 0xac99068a2db64ed6, 0xcb216b2cc5e7ce76, 0x3f292cb4c83aa602, 0x61c105f777b7280d, 0x95c9426f7a6a4079, 0xdc11577008ac3413, 0x281910e805715c67, 0x76f139abbafcd268, 0x82f97e33b721ba1c, 0x31f324277d5590c3, 0xc5fb63bf7088f8b7, 0x9b134afccf0576b8, 0x6f1b0d64c2d81ecc, 0x26c3187bb01e6aa6, 0xd2cb5fe3bdc302d2, 0x8c2376a0024e8cdd, 0x782b31380f93e4a9, 0x1f935c9ee7c26409, 0xeb9b1b06ea1f0c7d, 0xb573324555928272, 0x417b75dd584fea06, 0x08a360c22a899e6c, 0xfcab275a2754f618, 0xa2430e1998d97817, 0x564b498195041063, 0x6d33d554487a7957, 0x993b92cc45a71123, 0xc7d3bb8ffa2a9f2c, 0x33dbfc17f7f7f758, 0x7a03e90885318332, 0x8e0bae9088eceb46, 0xd0e387d337616549, 0x24ebc04b3abc0d3d, 0x4353adedd2ed8d9d, 0xb75bea75df30e5e9, 0xe9b3c33660bd6be6, 0x1dbb84ae6d600392, 0x546391b11fa677f8, 0xa06bd629127b1f8c, 0xfe83ff6aadf69183, 0x0a8bb8f2a02bf9f7, 0x8872c6c1170a43eb, 0x7c7a81591ad72b9f, 0x2292a81aa55aa590, 0xd69aef82a887cde4, 0x9f42fa9dda41b98e, 0x6b4abd05d79cd1fa, 0x35a2944668115ff5, 0xc1aad3de65cc3781, 0xa612be788d9db721, 0x521af9e08040df55, 0x0cf2d0a33fcd515a, 0xf8fa973b3210392e, 0xb122822440d64d44, 0x452ac5bc4d0b2530, 0x1bc2ecfff286ab3f, 0xefcaab67ff5bc34b, 0xd4b237b22225aa7f, 0x20ba702a2ff8c20b, 0x7e52596990754c04, 0x8a5a1ef19da82470, 0xc3820beeef6e501a, 0x378a4c76e2b3386e, 0x696265355d3eb661, 0x9d6a22ad50e3de15, 0xfad24f0bb8b25eb5, 0x0eda0893b56f36c1, 0x503221d00ae2b8ce, 0xa43a6648073fd0ba, 0xede2735775f9a4d0, 0x19ea34cf7824cca4, 0x47021d8cc7a942ab, 0xb30a5a14ca742adf, 0x63e6484efaab2186, 0x97ee0fd6f77649f2, 0xc906269548fbc7fd, 0x3d0e610d4526af89, 0x74d6741237e0dbe3, 0x80de338a3a3db397, 0xde361ac985b03d98, 0x2a3e5d51886d55ec, 0x4d8630f7603cd54c, 0xb98e776f6de1bd38, 0xe7665e2cd26c3337, 0x136e19b4dfb15b43, 0x5ab60cabad772f29, 0xaebe4b33a0aa475d, 0xf05662701f27c952, 0x045e25e812faa126, 0x3f26b93dcf84c812, 0xcb2efea5c259a066, 0x95c6d7e67dd42e69, 0x61ce907e7009461d, 0x2816856102cf3277, 0xdc1ec2f90f125a03, 0x82f6ebbab09fd40c, 0x76feac22bd42bc78, 0x1146c18455133cd8, 0xe54e861c58ce54ac, 0xbba6af5fe743daa3, 0x4faee8c7ea9eb2d7, 0x0676fdd89858c6bd, 0xf27eba409585aec9, 0xac9693032a0820c6, 0x589ed49b27d548b2, 0xda67aaa890f4f2ae, 0x2e6fed309d299ada, 0x7087c47322a414d5, 0x848f83eb2f797ca1, 0xcd5796f45dbf08cb, 0x395fd16c506260bf, 0x67b7f82fefefeeb0, 0x93bfbfb7e23286c4, 0xf407d2110a630664, 0x000f958907be6e10, 0x5ee7bccab833e01f, 0xaaeffb52b5ee886b, 0xe337ee4dc728fc01, 0x173fa9d5caf59475, 0x49d7809675781a7a, 0xbddfc70e78a5720e, 0x86a75bdba5db1b3a, 0x72af1c43a806734e, 0x2c473500178bfd41, 0xd84f72981a569535, 0x919767876890e15f, 0x659f201f654d892b, 0x3b77095cdac00724, 0xcf7f4ec4d71d6f50, 0xa8c723623f4ceff0, 0x5ccf64fa32918784, 0x02274db98d1c098b, 0xf62f0a2180c161ff, 0xbff71f3ef2071595, 0x4bff58a6ffda7de1, 0x151771e54057f3ee, 0xe11f367d4d8a9b9a, 0x52156c6987feb145, 0xa61d2bf18a23d931, 0xf8f502b235ae573e, 0x0cfd452a38733f4a, 0x452550354ab54b20, 0xb12d17ad47682354, 0xefc53eeef8e5ad5b, 0x1bcd7976f538c52f, 0x7c7514d01d69458f, 0x887d534810b42dfb, 0xd6957a0baf39a3f4, 0x229d3d93a2e4cb80, 0x6b45288cd022bfea, 0x9f4d6f14ddffd79e, 0xc1a5465762725991, 0x35ad01cf6faf31e5, 0x0ed59d1ab2d158d1, 0xfaddda82bf0c30a5, 0xa435f3c10081beaa, 0x503db4590d5cd6de, 0x19e5a1467f9aa2b4, 0xedede6de7247cac0, 0xb305cf9dcdca44cf, 0x470d8805c0172cbb, 0x20b5e5a32846ac1b, 0xd4bda23b259bc46f, 0x8a558b789a164a60, 0x7e5dcce097cb2214, 0x3785d9ffe50d567e, 0xc38d9e67e8d03e0a, 0x9d65b724575db005, 0x696df0bc5a80d871, 0xeb948e8feda1626d, 0x1f9cc917e07c0a19, 0x4174e0545ff18416, 0xb57ca7cc522cec62, 0xfca4b2d320ea9808, 0x08acf54b2d37f07c, 0x5644dc0892ba7e73, 0xa24c9b909f671607, 0xc5f4f636773696a7, 0x31fcb1ae7aebfed3, 0x6f1498edc56670dc, 0x9b1cdf75c8bb18a8, 0xd2c4ca6aba7d6cc2, 0x26cc8df2b7a004b6, 0x7824a4b1082d8ab9, 0x8c2ce32905f0e2cd, 0xb7547ffcd88e8bf9, 0x435c3864d553e38d, 0x1db411276ade6d82, 0xe9bc56bf670305f6, 0xa06443a015c5719c, 0x546c0438181819e8, 0x0a842d7ba79597e7, 0xfe8c6ae3aa48ff93, 0x9934074542197f33, 0x6d3c40dd4fc41747, 0x33d4699ef0499948, 0xc7dc2e06fd94f13c, 0x8e043b198f528556, 0x7a0c7c81828fed22, 0x24e455c23d02632d, 0xd0ec125a30df0b59, ], [ 0x0000000000000000, 0xc7cc909df556430c, 0xcd69c0d04346b08b, 0x0aa5504db610f387, 0xd823604b2f675785, 0x1feff0d6da311489, 0x154aa09b6c21e70e, 0xd28630069977a402, 0xf2b6217df7249999, 0x357ab1e00272da95, 0x3fdfe1adb4622912, 0xf813713041346a1e, 0x2a954136d843ce1c, 0xed59d1ab2d158d10, 0xe7fc81e69b057e97, 0x2030117b6e533d9b, 0xa79ca31047a305a1, 0x6050338db2f546ad, 0x6af563c004e5b52a, 0xad39f35df1b3f626, 0x7fbfc35b68c45224, 0xb87353c69d921128, 0xb2d6038b2b82e2af, 0x751a9316ded4a1a3, 0x552a826db0879c38, 0x92e612f045d1df34, 0x984342bdf3c12cb3, 0x5f8fd22006976fbf, 0x8d09e2269fe0cbbd, 0x4ac572bb6ab688b1, 0x406022f6dca67b36, 0x87acb26b29f0383a, 0x0dc9a7cb26ac3dd1, 0xca053756d3fa7edd, 0xc0a0671b65ea8d5a, 0x076cf78690bcce56, 0xd5eac78009cb6a54, 0x1226571dfc9d2958, 0x188307504a8ddadf, 0xdf4f97cdbfdb99d3, 0xff7f86b6d188a448, 0x38b3162b24dee744, 0x3216466692ce14c3, 0xf5dad6fb679857cf, 0x275ce6fdfeeff3cd, 0xe09076600bb9b0c1, 0xea35262dbda94346, 0x2df9b6b048ff004a, 0xaa5504db610f3870, 0x6d99944694597b7c, 0x673cc40b224988fb, 0xa0f05496d71fcbf7, 0x727664904e686ff5, 0xb5baf40dbb3e2cf9, 0xbf1fa4400d2edf7e, 0x78d334ddf8789c72, 0x58e325a6962ba1e9, 0x9f2fb53b637de2e5, 0x958ae576d56d1162, 0x524675eb203b526e, 0x80c045edb94cf66c, 0x470cd5704c1ab560, 0x4da9853dfa0a46e7, 0x8a6515a00f5c05eb, 0x1b934f964d587ba2, 0xdc5fdf0bb80e38ae, 0xd6fa8f460e1ecb29, 0x11361fdbfb488825, 0xc3b02fdd623f2c27, 0x047cbf4097696f2b, 0x0ed9ef0d21799cac, 0xc9157f90d42fdfa0, 0xe9256eebba7ce23b, 0x2ee9fe764f2aa137, 0x244cae3bf93a52b0, 0xe3803ea60c6c11bc, 0x31060ea0951bb5be, 0xf6ca9e3d604df6b2, 0xfc6fce70d65d0535, 0x3ba35eed230b4639, 0xbc0fec860afb7e03, 0x7bc37c1bffad3d0f, 0x71662c5649bdce88, 0xb6aabccbbceb8d84, 0x642c8ccd259c2986, 0xa3e01c50d0ca6a8a, 0xa9454c1d66da990d, 0x6e89dc80938cda01, 0x4eb9cdfbfddfe79a, 0x89755d660889a496, 0x83d00d2bbe995711, 0x441c9db64bcf141d, 0x969aadb0d2b8b01f, 0x51563d2d27eef313, 0x5bf36d6091fe0094, 0x9c3ffdfd64a84398, 0x165ae85d6bf44673, 0xd19678c09ea2057f, 0xdb33288d28b2f6f8, 0x1cffb810dde4b5f4, 0xce798816449311f6, 0x09b5188bb1c552fa, 0x031048c607d5a17d, 0xc4dcd85bf283e271, 0xe4ecc9209cd0dfea, 0x232059bd69869ce6, 0x298509f0df966f61, 0xee49996d2ac02c6d, 0x3ccfa96bb3b7886f, 0xfb0339f646e1cb63, 0xf1a669bbf0f138e4, 0x366af92605a77be8, 0xb1c64b4d2c5743d2, 0x760adbd0d90100de, 0x7caf8b9d6f11f359, 0xbb631b009a47b055, 0x69e52b0603301457, 0xae29bb9bf666575b, 0xa48cebd64076a4dc, 0x63407b4bb520e7d0, 0x43706a30db73da4b, 0x84bcfaad2e259947, 0x8e19aae098356ac0, 0x49d53a7d6d6329cc, 0x9b530a7bf4148dce, 0x5c9f9ae60142cec2, 0x563acaabb7523d45, 0x91f65a3642047e49, 0x37269f2c9ab0f744, 0xf0ea0fb16fe6b448, 0xfa4f5ffcd9f647cf, 0x3d83cf612ca004c3, 0xef05ff67b5d7a0c1, 0x28c96ffa4081e3cd, 0x226c3fb7f691104a, 0xe5a0af2a03c75346, 0xc590be516d946edd, 0x025c2ecc98c22dd1, 0x08f97e812ed2de56, 0xcf35ee1cdb849d5a, 0x1db3de1a42f33958, 0xda7f4e87b7a57a54, 0xd0da1eca01b589d3, 0x17168e57f4e3cadf, 0x90ba3c3cdd13f2e5, 0x5776aca12845b1e9, 0x5dd3fcec9e55426e, 0x9a1f6c716b030162, 0x48995c77f274a560, 0x8f55ccea0722e66c, 0x85f09ca7b13215eb, 0x423c0c3a446456e7, 0x620c1d412a376b7c, 0xa5c08ddcdf612870, 0xaf65dd916971dbf7, 0x68a94d0c9c2798fb, 0xba2f7d0a05503cf9, 0x7de3ed97f0067ff5, 0x7746bdda46168c72, 0xb08a2d47b340cf7e, 0x3aef38e7bc1cca95, 0xfd23a87a494a8999, 0xf786f837ff5a7a1e, 0x304a68aa0a0c3912, 0xe2cc58ac937b9d10, 0x2500c831662dde1c, 0x2fa5987cd03d2d9b, 0xe86908e1256b6e97, 0xc859199a4b38530c, 0x0f958907be6e1000, 0x0530d94a087ee387, 0xc2fc49d7fd28a08b, 0x107a79d1645f0489, 0xd7b6e94c91094785, 0xdd13b9012719b402, 0x1adf299cd24ff70e, 0x9d739bf7fbbfcf34, 0x5abf0b6a0ee98c38, 0x501a5b27b8f97fbf, 0x97d6cbba4daf3cb3, 0x4550fbbcd4d898b1, 0x829c6b21218edbbd, 0x88393b6c979e283a, 0x4ff5abf162c86b36, 0x6fc5ba8a0c9b56ad, 0xa8092a17f9cd15a1, 0xa2ac7a5a4fdde626, 0x6560eac7ba8ba52a, 0xb7e6dac123fc0128, 0x702a4a5cd6aa4224, 0x7a8f1a1160bab1a3, 0xbd438a8c95ecf2af, 0x2cb5d0bad7e88ce6, 0xeb79402722becfea, 0xe1dc106a94ae3c6d, 0x261080f761f87f61, 0xf496b0f1f88fdb63, 0x335a206c0dd9986f, 0x39ff7021bbc96be8, 0xfe33e0bc4e9f28e4, 0xde03f1c720cc157f, 0x19cf615ad59a5673, 0x136a3117638aa5f4, 0xd4a6a18a96dce6f8, 0x0620918c0fab42fa, 0xc1ec0111fafd01f6, 0xcb49515c4cedf271, 0x0c85c1c1b9bbb17d, 0x8b2973aa904b8947, 0x4ce5e337651dca4b, 0x4640b37ad30d39cc, 0x818c23e7265b7ac0, 0x530a13e1bf2cdec2, 0x94c6837c4a7a9dce, 0x9e63d331fc6a6e49, 0x59af43ac093c2d45, 0x799f52d7676f10de, 0xbe53c24a923953d2, 0xb4f692072429a055, 0x733a029ad17fe359, 0xa1bc329c4808475b, 0x6670a201bd5e0457, 0x6cd5f24c0b4ef7d0, 0xab1962d1fe18b4dc, 0x217c7771f144b137, 0xe6b0e7ec0412f23b, 0xec15b7a1b20201bc, 0x2bd9273c475442b0, 0xf95f173ade23e6b2, 0x3e9387a72b75a5be, 0x3436d7ea9d655639, 0xf3fa477768331535, 0xd3ca560c066028ae, 0x1406c691f3366ba2, 0x1ea396dc45269825, 0xd96f0641b070db29, 0x0be9364729077f2b, 0xcc25a6dadc513c27, 0xc680f6976a41cfa0, 0x014c660a9f178cac, 0x86e0d461b6e7b496, 0x412c44fc43b1f79a, 0x4b8914b1f5a1041d, 0x8c45842c00f74711, 0x5ec3b42a9980e313, 0x990f24b76cd6a01f, 0x93aa74fadac65398, 0x5466e4672f901094, 0x7456f51c41c32d0f, 0xb39a6581b4956e03, 0xb93f35cc02859d84, 0x7ef3a551f7d3de88, 0xac7595576ea47a8a, 0x6bb905ca9bf23986, 0x611c55872de2ca01, 0xa6d0c51ad8b4890d, ], [ 0x0000000000000000, 0x6e4d3e593561ee88, 0xdc9a7cb26ac3dd10, 0xb2d742eb5fa23398, 0xfbc4188f7c6d8cb3, 0x958926d6490c623b, 0x275e643d16ae51a3, 0x49135a6423cfbf2b, 0xb578d0f551312ff5, 0xdb35eeac6450c17d, 0x69e2ac473bf2f2e5, 0x07af921e0e931c6d, 0x4ebcc87a2d5ca346, 0x20f1f623183d4dce, 0x9226b4c8479f7e56, 0xfc6b8a9172fe90de, 0x280140010b886979, 0x464c7e583ee987f1, 0xf49b3cb3614bb469, 0x9ad602ea542a5ae1, 0xd3c5588e77e5e5ca, 0xbd8866d742840b42, 0x0f5f243c1d2638da, 0x61121a652847d652, 0x9d7990f45ab9468c, 0xf334aead6fd8a804, 0x41e3ec46307a9b9c, 0x2faed21f051b7514, 0x66bd887b26d4ca3f, 0x08f0b62213b524b7, 0xba27f4c94c17172f, 0xd46aca907976f9a7, 0x500280021710d2f2, 0x3e4fbe5b22713c7a, 0x8c98fcb07dd30fe2, 0xe2d5c2e948b2e16a, 0xabc6988d6b7d5e41, 0xc58ba6d45e1cb0c9, 0x775ce43f01be8351, 0x1911da6634df6dd9, 0xe57a50f74621fd07, 0x8b376eae7340138f, 0x39e02c452ce22017, 0x57ad121c1983ce9f, 0x1ebe48783a4c71b4, 0x70f376210f2d9f3c, 0xc22434ca508faca4, 0xac690a9365ee422c, 0x7803c0031c98bb8b, 0x164efe5a29f95503, 0xa499bcb1765b669b, 0xcad482e8433a8813, 0x83c7d88c60f53738, 0xed8ae6d55594d9b0, 0x5f5da43e0a36ea28, 0x31109a673f5704a0, 0xcd7b10f64da9947e, 0xa3362eaf78c87af6, 0x11e16c44276a496e, 0x7fac521d120ba7e6, 0x36bf087931c418cd, 0x58f2362004a5f645, 0xea2574cb5b07c5dd, 0x84684a926e662b55, 0xa00500042e21a5e4, 0xce483e5d1b404b6c, 0x7c9f7cb644e278f4, 0x12d242ef7183967c, 0x5bc1188b524c2957, 0x358c26d2672dc7df, 0x875b6439388ff447, 0xe9165a600dee1acf, 0x157dd0f17f108a11, 0x7b30eea84a716499, 0xc9e7ac4315d35701, 0xa7aa921a20b2b989, 0xeeb9c87e037d06a2, 0x80f4f627361ce82a, 0x3223b4cc69bedbb2, 0x5c6e8a955cdf353a, 0x8804400525a9cc9d, 0xe6497e5c10c82215, 0x549e3cb74f6a118d, 0x3ad302ee7a0bff05, 0x73c0588a59c4402e, 0x1d8d66d36ca5aea6, 0xaf5a243833079d3e, 0xc1171a61066673b6, 0x3d7c90f07498e368, 0x5331aea941f90de0, 0xe1e6ec421e5b3e78, 0x8fabd21b2b3ad0f0, 0xc6b8887f08f56fdb, 0xa8f5b6263d948153, 0x1a22f4cd6236b2cb, 0x746fca9457575c43, 0xf007800639317716, 0x9e4abe5f0c50999e, 0x2c9dfcb453f2aa06, 0x42d0c2ed6693448e, 0x0bc39889455cfba5, 0x658ea6d0703d152d, 0xd759e43b2f9f26b5, 0xb914da621afec83d, 0x457f50f3680058e3, 0x2b326eaa5d61b66b, 0x99e52c4102c385f3, 0xf7a8121837a26b7b, 0xbebb487c146dd450, 0xd0f67625210c3ad8, 0x622134ce7eae0940, 0x0c6c0a974bcfe7c8, 0xd806c00732b91e6f, 0xb64bfe5e07d8f0e7, 0x049cbcb5587ac37f, 0x6ad182ec6d1b2df7, 0x23c2d8884ed492dc, 0x4d8fe6d17bb57c54, 0xff58a43a24174fcc, 0x91159a631176a144, 0x6d7e10f26388319a, 0x03332eab56e9df12, 0xb1e46c40094bec8a, 0xdfa952193c2a0202, 0x96ba087d1fe5bd29, 0xf8f736242a8453a1, 0x4a2074cf75266039, 0x246d4a9640478eb1, 0x02fae1e3f5a97d5b, 0x6cb7dfbac0c893d3, 0xde609d519f6aa04b, 0xb02da308aa0b4ec3, 0xf93ef96c89c4f1e8, 0x9773c735bca51f60, 0x25a485dee3072cf8, 0x4be9bb87d666c270, 0xb7823116a49852ae, 0xd9cf0f4f91f9bc26, 0x6b184da4ce5b8fbe, 0x055573fdfb3a6136, 0x4c462999d8f5de1d, 0x220b17c0ed943095, 0x90dc552bb236030d, 0xfe916b728757ed85, 0x2afba1e2fe211422, 0x44b69fbbcb40faaa, 0xf661dd5094e2c932, 0x982ce309a18327ba, 0xd13fb96d824c9891, 0xbf728734b72d7619, 0x0da5c5dfe88f4581, 0x63e8fb86ddeeab09, 0x9f837117af103bd7, 0xf1ce4f4e9a71d55f, 0x43190da5c5d3e6c7, 0x2d5433fcf0b2084f, 0x64476998d37db764, 0x0a0a57c1e61c59ec, 0xb8dd152ab9be6a74, 0xd6902b738cdf84fc, 0x52f861e1e2b9afa9, 0x3cb55fb8d7d84121, 0x8e621d53887a72b9, 0xe02f230abd1b9c31, 0xa93c796e9ed4231a, 0xc7714737abb5cd92, 0x75a605dcf417fe0a, 0x1beb3b85c1761082, 0xe780b114b388805c, 0x89cd8f4d86e96ed4, 0x3b1acda6d94b5d4c, 0x5557f3ffec2ab3c4, 0x1c44a99bcfe50cef, 0x720997c2fa84e267, 0xc0ded529a526d1ff, 0xae93eb7090473f77, 0x7af921e0e931c6d0, 0x14b41fb9dc502858, 0xa6635d5283f21bc0, 0xc82e630bb693f548, 0x813d396f955c4a63, 0xef700736a03da4eb, 0x5da745ddff9f9773, 0x33ea7b84cafe79fb, 0xcf81f115b800e925, 0xa1cccf4c8d6107ad, 0x131b8da7d2c33435, 0x7d56b3fee7a2dabd, 0x3445e99ac46d6596, 0x5a08d7c3f10c8b1e, 0xe8df9528aeaeb886, 0x8692ab719bcf560e, 0xa2ffe1e7db88d8bf, 0xccb2dfbeeee93637, 0x7e659d55b14b05af, 0x1028a30c842aeb27, 0x593bf968a7e5540c, 0x3776c7319284ba84, 0x85a185dacd26891c, 0xebecbb83f8476794, 0x178731128ab9f74a, 0x79ca0f4bbfd819c2, 0xcb1d4da0e07a2a5a, 0xa55073f9d51bc4d2, 0xec43299df6d47bf9, 0x820e17c4c3b59571, 0x30d9552f9c17a6e9, 0x5e946b76a9764861, 0x8afea1e6d000b1c6, 0xe4b39fbfe5615f4e, 0x5664dd54bac36cd6, 0x3829e30d8fa2825e, 0x713ab969ac6d3d75, 0x1f778730990cd3fd, 0xada0c5dbc6aee065, 0xc3edfb82f3cf0eed, 0x3f86711381319e33, 0x51cb4f4ab45070bb, 0xe31c0da1ebf24323, 0x8d5133f8de93adab, 0xc442699cfd5c1280, 0xaa0f57c5c83dfc08, 0x18d8152e979fcf90, 0x76952b77a2fe2118, 0xf2fd61e5cc980a4d, 0x9cb05fbcf9f9e4c5, 0x2e671d57a65bd75d, 0x402a230e933a39d5, 0x0939796ab0f586fe, 0x6774473385946876, 0xd5a305d8da365bee, 0xbbee3b81ef57b566, 0x4785b1109da925b8, 0x29c88f49a8c8cb30, 0x9b1fcda2f76af8a8, 0xf552f3fbc20b1620, 0xbc41a99fe1c4a90b, 0xd20c97c6d4a54783, 0x60dbd52d8b07741b, 0x0e96eb74be669a93, 0xdafc21e4c7106334, 0xb4b11fbdf2718dbc, 0x06665d56add3be24, 0x682b630f98b250ac, 0x2138396bbb7def87, 0x4f7507328e1c010f, 0xfda245d9d1be3297, 0x93ef7b80e4dfdc1f, 0x6f84f11196214cc1, 0x01c9cf48a340a249, 0xb31e8da3fce291d1, 0xdd53b3fac9837f59, 0x9440e99eea4cc072, 0xfa0dd7c7df2d2efa, 0x48da952c808f1d62, 0x2697ab75b5eef3ea, ], [ 0x0000000000000000, 0x05f5c3c7eb52fab6, 0x0beb878fd6a5f56c, 0x0e1e44483df70fda, 0x17d70f1fad4bead8, 0x1222ccd84619106e, 0x1c3c88907bee1fb4, 0x19c94b5790bce502, 0x2fae1e3f5a97d5b0, 0x2a5bddf8b1c52f06, 0x244599b08c3220dc, 0x21b05a776760da6a, 0x38791120f7dc3f68, 0x3d8cd2e71c8ec5de, 0x339296af2179ca04, 0x36675568ca2b30b2, 0x5f5c3c7eb52fab60, 0x5aa9ffb95e7d51d6, 0x54b7bbf1638a5e0c, 0x5142783688d8a4ba, 0x488b3361186441b8, 0x4d7ef0a6f336bb0e, 0x4360b4eecec1b4d4, 0x4695772925934e62, 0x70f22241efb87ed0, 0x7507e18604ea8466, 0x7b19a5ce391d8bbc, 0x7eec6609d24f710a, 0x67252d5e42f39408, 0x62d0ee99a9a16ebe, 0x6cceaad194566164, 0x693b69167f049bd2, 0xbeb878fd6a5f56c0, 0xbb4dbb3a810dac76, 0xb553ff72bcfaa3ac, 0xb0a63cb557a8591a, 0xa96f77e2c714bc18, 0xac9ab4252c4646ae, 0xa284f06d11b14974, 0xa77133aafae3b3c2, 0x911666c230c88370, 0x94e3a505db9a79c6, 0x9afde14de66d761c, 0x9f08228a0d3f8caa, 0x86c169dd9d8369a8, 0x8334aa1a76d1931e, 0x8d2aee524b269cc4, 0x88df2d95a0746672, 0xe1e44483df70fda0, 0xe411874434220716, 0xea0fc30c09d508cc, 0xeffa00cbe287f27a, 0xf6334b9c723b1778, 0xf3c6885b9969edce, 0xfdd8cc13a49ee214, 0xf82d0fd44fcc18a2, 0xce4a5abc85e72810, 0xcbbf997b6eb5d2a6, 0xc5a1dd335342dd7c, 0xc0541ef4b81027ca, 0xd99d55a328acc2c8, 0xdc689664c3fe387e, 0xd276d22cfe0937a4, 0xd78311eb155bcd12, 0x3f8010117d549b13, 0x3a75d3d6960661a5, 0x346b979eabf16e7f, 0x319e545940a394c9, 0x28571f0ed01f71cb, 0x2da2dcc93b4d8b7d, 0x23bc988106ba84a7, 0x26495b46ede87e11, 0x102e0e2e27c34ea3, 0x15dbcde9cc91b415, 0x1bc589a1f166bbcf, 0x1e304a661a344179, 0x07f901318a88a47b, 0x020cc2f661da5ecd, 0x0c1286be5c2d5117, 0x09e74579b77faba1, 0x60dc2c6fc87b3073, 0x6529efa82329cac5, 0x6b37abe01edec51f, 0x6ec26827f58c3fa9, 0x770b23706530daab, 0x72fee0b78e62201d, 0x7ce0a4ffb3952fc7, 0x7915673858c7d571, 0x4f72325092ece5c3, 0x4a87f19779be1f75, 0x4499b5df444910af, 0x416c7618af1bea19, 0x58a53d4f3fa70f1b, 0x5d50fe88d4f5f5ad, 0x534ebac0e902fa77, 0x56bb7907025000c1, 0x813868ec170bcdd3, 0x84cdab2bfc593765, 0x8ad3ef63c1ae38bf, 0x8f262ca42afcc209, 0x96ef67f3ba40270b, 0x931aa4345112ddbd, 0x9d04e07c6ce5d267, 0x98f123bb87b728d1, 0xae9676d34d9c1863, 0xab63b514a6cee2d5, 0xa57df15c9b39ed0f, 0xa088329b706b17b9, 0xb94179cce0d7f2bb, 0xbcb4ba0b0b85080d, 0xb2aafe43367207d7, 0xb75f3d84dd20fd61, 0xde645492a22466b3, 0xdb91975549769c05, 0xd58fd31d748193df, 0xd07a10da9fd36969, 0xc9b35b8d0f6f8c6b, 0xcc46984ae43d76dd, 0xc258dc02d9ca7907, 0xc7ad1fc5329883b1, 0xf1ca4aadf8b3b303, 0xf43f896a13e149b5, 0xfa21cd222e16466f, 0xffd40ee5c544bcd9, 0xe61d45b255f859db, 0xe3e88675beaaa36d, 0xedf6c23d835dacb7, 0xe80301fa680f5601, 0x7f002022faa93626, 0x7af5e3e511fbcc90, 0x74eba7ad2c0cc34a, 0x711e646ac75e39fc, 0x68d72f3d57e2dcfe, 0x6d22ecfabcb02648, 0x633ca8b281472992, 0x66c96b756a15d324, 0x50ae3e1da03ee396, 0x555bfdda4b6c1920, 0x5b45b992769b16fa, 0x5eb07a559dc9ec4c, 0x477931020d75094e, 0x428cf2c5e627f3f8, 0x4c92b68ddbd0fc22, 0x4967754a30820694, 0x205c1c5c4f869d46, 0x25a9df9ba4d467f0, 0x2bb79bd39923682a, 0x2e4258147271929c, 0x378b1343e2cd779e, 0x327ed084099f8d28, 0x3c6094cc346882f2, 0x3995570bdf3a7844, 0x0ff20263151148f6, 0x0a07c1a4fe43b240, 0x041985ecc3b4bd9a, 0x01ec462b28e6472c, 0x18250d7cb85aa22e, 0x1dd0cebb53085898, 0x13ce8af36eff5742, 0x163b493485adadf4, 0xc1b858df90f660e6, 0xc44d9b187ba49a50, 0xca53df504653958a, 0xcfa61c97ad016f3c, 0xd66f57c03dbd8a3e, 0xd39a9407d6ef7088, 0xdd84d04feb187f52, 0xd8711388004a85e4, 0xee1646e0ca61b556, 0xebe3852721334fe0, 0xe5fdc16f1cc4403a, 0xe00802a8f796ba8c, 0xf9c149ff672a5f8e, 0xfc348a388c78a538, 0xf22ace70b18faae2, 0xf7df0db75add5054, 0x9ee464a125d9cb86, 0x9b11a766ce8b3130, 0x950fe32ef37c3eea, 0x90fa20e9182ec45c, 0x89336bbe8892215e, 0x8cc6a87963c0dbe8, 0x82d8ec315e37d432, 0x872d2ff6b5652e84, 0xb14a7a9e7f4e1e36, 0xb4bfb959941ce480, 0xbaa1fd11a9ebeb5a, 0xbf543ed642b911ec, 0xa69d7581d205f4ee, 0xa368b64639570e58, 0xad76f20e04a00182, 0xa88331c9eff2fb34, 0x4080303387fdad35, 0x4575f3f46caf5783, 0x4b6bb7bc51585859, 0x4e9e747bba0aa2ef, 0x57573f2c2ab647ed, 0x52a2fcebc1e4bd5b, 0x5cbcb8a3fc13b281, 0x59497b6417414837, 0x6f2e2e0cdd6a7885, 0x6adbedcb36388233, 0x64c5a9830bcf8de9, 0x61306a44e09d775f, 0x78f921137021925d, 0x7d0ce2d49b7368eb, 0x7312a69ca6846731, 0x76e7655b4dd69d87, 0x1fdc0c4d32d20655, 0x1a29cf8ad980fce3, 0x14378bc2e477f339, 0x11c248050f25098f, 0x080b03529f99ec8d, 0x0dfec09574cb163b, 0x03e084dd493c19e1, 0x0615471aa26ee357, 0x307212726845d3e5, 0x3587d1b583172953, 0x3b9995fdbee02689, 0x3e6c563a55b2dc3f, 0x27a51d6dc50e393d, 0x2250deaa2e5cc38b, 0x2c4e9ae213abcc51, 0x29bb5925f8f936e7, 0xfe3848ceeda2fbf5, 0xfbcd8b0906f00143, 0xf5d3cf413b070e99, 0xf0260c86d055f42f, 0xe9ef47d140e9112d, 0xec1a8416abbbeb9b, 0xe204c05e964ce441, 0xe7f103997d1e1ef7, 0xd19656f1b7352e45, 0xd46395365c67d4f3, 0xda7dd17e6190db29, 0xdf8812b98ac2219f, 0xc64159ee1a7ec49d, 0xc3b49a29f12c3e2b, 0xcdaade61ccdb31f1, 0xc85f1da62789cb47, 0xa16474b0588d5095, 0xa491b777b3dfaa23, 0xaa8ff33f8e28a5f9, 0xaf7a30f8657a5f4f, 0xb6b37baff5c6ba4d, 0xb346b8681e9440fb, 0xbd58fc2023634f21, 0xb8ad3fe7c831b597, 0x8eca6a8f021a8525, 0x8b3fa948e9487f93, 0x8521ed00d4bf7049, 0x80d42ec73fed8aff, 0x991d6590af516ffd, 0x9ce8a6574403954b, 0x92f6e21f79f49a91, 0x970321d892a66027, ], [ 0x0000000000000000, 0xfe004045f5526c4c, 0xbef06160434eee0b, 0x40f02125b61c8247, 0x3f10232b2f77ea85, 0xc110636eda2586c9, 0x81e0424b6c39048e, 0x7fe0020e996b68c2, 0x7e2046565eefd50a, 0x80200613abbdb946, 0xc0d027361da13b01, 0x3ed06773e8f3574d, 0x4130657d71983f8f, 0xbf30253884ca53c3, 0xffc0041d32d6d184, 0x01c04458c784bdc8, 0xfc408cacbddfaa14, 0x0240cce9488dc658, 0x42b0edccfe91441f, 0xbcb0ad890bc32853, 0xc350af8792a84091, 0x3d50efc267fa2cdd, 0x7da0cee7d1e6ae9a, 0x83a08ea224b4c2d6, 0x8260cafae3307f1e, 0x7c608abf16621352, 0x3c90ab9aa07e9115, 0xc290ebdf552cfd59, 0xbd70e9d1cc47959b, 0x4370a9943915f9d7, 0x038088b18f097b90, 0xfd80c8f47a5b17dc, 0xba71f8b2d25562bb, 0x4471b8f727070ef7, 0x048199d2911b8cb0, 0xfa81d9976449e0fc, 0x8561db99fd22883e, 0x7b619bdc0870e472, 0x3b91baf9be6c6635, 0xc591fabc4b3e0a79, 0xc451bee48cbab7b1, 0x3a51fea179e8dbfd, 0x7aa1df84cff459ba, 0x84a19fc13aa635f6, 0xfb419dcfa3cd5d34, 0x0541dd8a569f3178, 0x45b1fcafe083b33f, 0xbbb1bcea15d1df73, 0x4631741e6f8ac8af, 0xb831345b9ad8a4e3, 0xf8c1157e2cc426a4, 0x06c1553bd9964ae8, 0x7921573540fd222a, 0x87211770b5af4e66, 0xc7d1365503b3cc21, 0x39d17610f6e1a06d, 0x3811324831651da5, 0xc611720dc43771e9, 0x86e15328722bf3ae, 0x78e1136d87799fe2, 0x070111631e12f720, 0xf9015126eb409b6c, 0xb9f170035d5c192b, 0x47f13046a80e7567, 0x3613108e0d40f3e5, 0xc81350cbf8129fa9, 0x88e371ee4e0e1dee, 0x76e331abbb5c71a2, 0x090333a522371960, 0xf70373e0d765752c, 0xb7f352c56179f76b, 0x49f31280942b9b27, 0x483356d853af26ef, 0xb633169da6fd4aa3, 0xf6c337b810e1c8e4, 0x08c377fde5b3a4a8, 0x772375f37cd8cc6a, 0x892335b6898aa026, 0xc9d314933f962261, 0x37d354d6cac44e2d, 0xca539c22b09f59f1, 0x3453dc6745cd35bd, 0x74a3fd42f3d1b7fa, 0x8aa3bd070683dbb6, 0xf543bf099fe8b374, 0x0b43ff4c6abadf38, 0x4bb3de69dca65d7f, 0xb5b39e2c29f43133, 0xb473da74ee708cfb, 0x4a739a311b22e0b7, 0x0a83bb14ad3e62f0, 0xf483fb51586c0ebc, 0x8b63f95fc107667e, 0x7563b91a34550a32, 0x3593983f82498875, 0xcb93d87a771be439, 0x8c62e83cdf15915e, 0x7262a8792a47fd12, 0x3292895c9c5b7f55, 0xcc92c91969091319, 0xb372cb17f0627bdb, 0x4d728b5205301797, 0x0d82aa77b32c95d0, 0xf382ea32467ef99c, 0xf242ae6a81fa4454, 0x0c42ee2f74a82818, 0x4cb2cf0ac2b4aa5f, 0xb2b28f4f37e6c613, 0xcd528d41ae8daed1, 0x3352cd045bdfc29d, 0x73a2ec21edc340da, 0x8da2ac6418912c96, 0x7022649062ca3b4a, 0x8e2224d597985706, 0xced205f02184d541, 0x30d245b5d4d6b90d, 0x4f3247bb4dbdd1cf, 0xb13207feb8efbd83, 0xf1c226db0ef33fc4, 0x0fc2669efba15388, 0x0e0222c63c25ee40, 0xf0026283c977820c, 0xb0f243a67f6b004b, 0x4ef203e38a396c07, 0x311201ed135204c5, 0xcf1241a8e6006889, 0x8fe2608d501ceace, 0x71e220c8a54e8682, 0x6c26211c1a81e7ca, 0x92266159efd38b86, 0xd2d6407c59cf09c1, 0x2cd60039ac9d658d, 0x5336023735f60d4f, 0xad364272c0a46103, 0xedc6635776b8e344, 0x13c6231283ea8f08, 0x1206674a446e32c0, 0xec06270fb13c5e8c, 0xacf6062a0720dccb, 0x52f6466ff272b087, 0x2d1644616b19d845, 0xd31604249e4bb409, 0x93e625012857364e, 0x6de66544dd055a02, 0x9066adb0a75e4dde, 0x6e66edf5520c2192, 0x2e96ccd0e410a3d5, 0xd0968c951142cf99, 0xaf768e9b8829a75b, 0x5176cede7d7bcb17, 0x1186effbcb674950, 0xef86afbe3e35251c, 0xee46ebe6f9b198d4, 0x1046aba30ce3f498, 0x50b68a86baff76df, 0xaeb6cac34fad1a93, 0xd156c8cdd6c67251, 0x2f56888823941e1d, 0x6fa6a9ad95889c5a, 0x91a6e9e860daf016, 0xd657d9aec8d48571, 0x285799eb3d86e93d, 0x68a7b8ce8b9a6b7a, 0x96a7f88b7ec80736, 0xe947fa85e7a36ff4, 0x1747bac012f103b8, 0x57b79be5a4ed81ff, 0xa9b7dba051bfedb3, 0xa8779ff8963b507b, 0x5677dfbd63693c37, 0x1687fe98d575be70, 0xe887bedd2027d23c, 0x9767bcd3b94cbafe, 0x6967fc964c1ed6b2, 0x2997ddb3fa0254f5, 0xd7979df60f5038b9, 0x2a175502750b2f65, 0xd417154780594329, 0x94e734623645c16e, 0x6ae77427c317ad22, 0x150776295a7cc5e0, 0xeb07366caf2ea9ac, 0xabf7174919322beb, 0x55f7570cec6047a7, 0x543713542be4fa6f, 0xaa375311deb69623, 0xeac7723468aa1464, 0x14c732719df87828, 0x6b27307f049310ea, 0x9527703af1c17ca6, 0xd5d7511f47ddfee1, 0x2bd7115ab28f92ad, 0x5a35319217c1142f, 0xa43571d7e2937863, 0xe4c550f2548ffa24, 0x1ac510b7a1dd9668, 0x652512b938b6feaa, 0x9b2552fccde492e6, 0xdbd573d97bf810a1, 0x25d5339c8eaa7ced, 0x241577c4492ec125, 0xda153781bc7cad69, 0x9ae516a40a602f2e, 0x64e556e1ff324362, 0x1b0554ef66592ba0, 0xe50514aa930b47ec, 0xa5f5358f2517c5ab, 0x5bf575cad045a9e7, 0xa675bd3eaa1ebe3b, 0x5875fd7b5f4cd277, 0x1885dc5ee9505030, 0xe6859c1b1c023c7c, 0x99659e15856954be, 0x6765de50703b38f2, 0x2795ff75c627bab5, 0xd995bf303375d6f9, 0xd855fb68f4f16b31, 0x2655bb2d01a3077d, 0x66a59a08b7bf853a, 0x98a5da4d42ede976, 0xe745d843db8681b4, 0x194598062ed4edf8, 0x59b5b92398c86fbf, 0xa7b5f9666d9a03f3, 0xe044c920c5947694, 0x1e44896530c61ad8, 0x5eb4a84086da989f, 0xa0b4e8057388f4d3, 0xdf54ea0beae39c11, 0x2154aa4e1fb1f05d, 0x61a48b6ba9ad721a, 0x9fa4cb2e5cff1e56, 0x9e648f769b7ba39e, 0x6064cf336e29cfd2, 0x2094ee16d8354d95, 0xde94ae532d6721d9, 0xa174ac5db40c491b, 0x5f74ec18415e2557, 0x1f84cd3df742a710, 0xe1848d780210cb5c, 0x1c04458c784bdc80, 0xe20405c98d19b0cc, 0xa2f424ec3b05328b, 0x5cf464a9ce575ec7, 0x231466a7573c3605, 0xdd1426e2a26e5a49, 0x9de407c71472d80e, 0x63e44782e120b442, 0x622403da26a4098a, 0x9c24439fd3f665c6, 0xdcd462ba65eae781, 0x22d422ff90b88bcd, 0x5d3420f109d3e30f, 0xa33460b4fc818f43, 0xe3c441914a9d0d04, 0x1dc401d4bfcf6148, ], [ 0x0000000000000000, 0xd84c42383503cf94, 0xf268659bc3eda9bb, 0x2a2427a3f6ee662f, 0xa6202adc2e3165e5, 0x7e6c68e41b32aa71, 0x54484f47eddccc5e, 0x8c040d7fd8df03ca, 0x0eb0b453f588fd59, 0xd6fcf66bc08b32cd, 0xfcd8d1c8366554e2, 0x249493f003669b76, 0xa8909e8fdbb998bc, 0x70dcdcb7eeba5728, 0x5af8fb1418543107, 0x82b4b92c2d57fe93, 0x1d6168a7eb11fab2, 0xc52d2a9fde123526, 0xef090d3c28fc5309, 0x37454f041dff9c9d, 0xbb41427bc5209f57, 0x630d0043f02350c3, 0x492927e006cd36ec, 0x916565d833cef978, 0x13d1dcf41e9907eb, 0xcb9d9ecc2b9ac87f, 0xe1b9b96fdd74ae50, 0x39f5fb57e87761c4, 0xb5f1f62830a8620e, 0x6dbdb41005abad9a, 0x479993b3f345cbb5, 0x9fd5d18bc6460421, 0x3ac2d14fd623f564, 0xe28e9377e3203af0, 0xc8aab4d415ce5cdf, 0x10e6f6ec20cd934b, 0x9ce2fb93f8129081, 0x44aeb9abcd115f15, 0x6e8a9e083bff393a, 0xb6c6dc300efcf6ae, 0x3472651c23ab083d, 0xec3e272416a8c7a9, 0xc61a0087e046a186, 0x1e5642bfd5456e12, 0x92524fc00d9a6dd8, 0x4a1e0df83899a24c, 0x603a2a5bce77c463, 0xb8766863fb740bf7, 0x27a3b9e83d320fd6, 0xffeffbd00831c042, 0xd5cbdc73fedfa66d, 0x0d879e4bcbdc69f9, 0x8183933413036a33, 0x59cfd10c2600a5a7, 0x73ebf6afd0eec388, 0xaba7b497e5ed0c1c, 0x29130dbbc8baf28f, 0xf15f4f83fdb93d1b, 0xdb7b68200b575b34, 0x03372a183e5494a0, 0x8f332767e68b976a, 0x577f655fd38858fe, 0x7d5b42fc25663ed1, 0xa51700c41065f145, 0x7585a29fac47eac8, 0xadc9e0a79944255c, 0x87edc7046faa4373, 0x5fa1853c5aa98ce7, 0xd3a5884382768f2d, 0x0be9ca7bb77540b9, 0x21cdedd8419b2696, 0xf981afe07498e902, 0x7b3516cc59cf1791, 0xa37954f46cccd805, 0x895d73579a22be2a, 0x5111316faf2171be, 0xdd153c1077fe7274, 0x05597e2842fdbde0, 0x2f7d598bb413dbcf, 0xf7311bb38110145b, 0x68e4ca384756107a, 0xb0a888007255dfee, 0x9a8cafa384bbb9c1, 0x42c0ed9bb1b87655, 0xcec4e0e46967759f, 0x1688a2dc5c64ba0b, 0x3cac857faa8adc24, 0xe4e0c7479f8913b0, 0x66547e6bb2deed23, 0xbe183c5387dd22b7, 0x943c1bf071334498, 0x4c7059c844308b0c, 0xc07454b79cef88c6, 0x1838168fa9ec4752, 0x321c312c5f02217d, 0xea5073146a01eee9, 0x4f4773d07a641fac, 0x970b31e84f67d038, 0xbd2f164bb989b617, 0x656354738c8a7983, 0xe967590c54557a49, 0x312b1b346156b5dd, 0x1b0f3c9797b8d3f2, 0xc3437eafa2bb1c66, 0x41f7c7838fece2f5, 0x99bb85bbbaef2d61, 0xb39fa2184c014b4e, 0x6bd3e020790284da, 0xe7d7ed5fa1dd8710, 0x3f9baf6794de4884, 0x15bf88c462302eab, 0xcdf3cafc5733e13f, 0x52261b779175e51e, 0x8a6a594fa4762a8a, 0xa04e7eec52984ca5, 0x78023cd4679b8331, 0xf40631abbf4480fb, 0x2c4a73938a474f6f, 0x066e54307ca92940, 0xde22160849aae6d4, 0x5c96af2464fd1847, 0x84daed1c51fed7d3, 0xaefecabfa710b1fc, 0x76b2888792137e68, 0xfab685f84acc7da2, 0x22fac7c07fcfb236, 0x08dee0638921d419, 0xd092a25bbc221b8d, 0xeb0b453f588fd590, 0x334707076d8c1a04, 0x196320a49b627c2b, 0xc12f629cae61b3bf, 0x4d2b6fe376beb075, 0x95672ddb43bd7fe1, 0xbf430a78b55319ce, 0x670f48408050d65a, 0xe5bbf16cad0728c9, 0x3df7b3549804e75d, 0x17d394f76eea8172, 0xcf9fd6cf5be94ee6, 0x439bdbb083364d2c, 0x9bd79988b63582b8, 0xb1f3be2b40dbe497, 0x69bffc1375d82b03, 0xf66a2d98b39e2f22, 0x2e266fa0869de0b6, 0x0402480370738699, 0xdc4e0a3b4570490d, 0x504a07449daf4ac7, 0x8806457ca8ac8553, 0xa22262df5e42e37c, 0x7a6e20e76b412ce8, 0xf8da99cb4616d27b, 0x2096dbf373151def, 0x0ab2fc5085fb7bc0, 0xd2febe68b0f8b454, 0x5efab3176827b79e, 0x86b6f12f5d24780a, 0xac92d68cabca1e25, 0x74de94b49ec9d1b1, 0xd1c994708eac20f4, 0x0985d648bbafef60, 0x23a1f1eb4d41894f, 0xfbedb3d3784246db, 0x77e9beaca09d4511, 0xafa5fc94959e8a85, 0x8581db376370ecaa, 0x5dcd990f5673233e, 0xdf7920237b24ddad, 0x0735621b4e271239, 0x2d1145b8b8c97416, 0xf55d07808dcabb82, 0x79590aff5515b848, 0xa11548c7601677dc, 0x8b316f6496f811f3, 0x537d2d5ca3fbde67, 0xcca8fcd765bdda46, 0x14e4beef50be15d2, 0x3ec0994ca65073fd, 0xe68cdb749353bc69, 0x6a88d60b4b8cbfa3, 0xb2c494337e8f7037, 0x98e0b39088611618, 0x40acf1a8bd62d98c, 0xc21848849035271f, 0x1a540abca536e88b, 0x30702d1f53d88ea4, 0xe83c6f2766db4130, 0x64386258be0442fa, 0xbc7420608b078d6e, 0x965007c37de9eb41, 0x4e1c45fb48ea24d5, 0x9e8ee7a0f4c83f58, 0x46c2a598c1cbf0cc, 0x6ce6823b372596e3, 0xb4aac00302265977, 0x38aecd7cdaf95abd, 0xe0e28f44effa9529, 0xcac6a8e71914f306, 0x128aeadf2c173c92, 0x903e53f30140c201, 0x487211cb34430d95, 0x62563668c2ad6bba, 0xba1a7450f7aea42e, 0x361e792f2f71a7e4, 0xee523b171a726870, 0xc4761cb4ec9c0e5f, 0x1c3a5e8cd99fc1cb, 0x83ef8f071fd9c5ea, 0x5ba3cd3f2ada0a7e, 0x7187ea9cdc346c51, 0xa9cba8a4e937a3c5, 0x25cfa5db31e8a00f, 0xfd83e7e304eb6f9b, 0xd7a7c040f20509b4, 0x0feb8278c706c620, 0x8d5f3b54ea5138b3, 0x5513796cdf52f727, 0x7f375ecf29bc9108, 0xa77b1cf71cbf5e9c, 0x2b7f1188c4605d56, 0xf33353b0f16392c2, 0xd9177413078df4ed, 0x015b362b328e3b79, 0xa44c36ef22ebca3c, 0x7c0074d717e805a8, 0x56245374e1066387, 0x8e68114cd405ac13, 0x026c1c330cdaafd9, 0xda205e0b39d9604d, 0xf00479a8cf370662, 0x28483b90fa34c9f6, 0xaafc82bcd7633765, 0x72b0c084e260f8f1, 0x5894e727148e9ede, 0x80d8a51f218d514a, 0x0cdca860f9525280, 0xd490ea58cc519d14, 0xfeb4cdfb3abffb3b, 0x26f88fc30fbc34af, 0xb92d5e48c9fa308e, 0x61611c70fcf9ff1a, 0x4b453bd30a179935, 0x930979eb3f1456a1, 0x1f0d7494e7cb556b, 0xc74136acd2c89aff, 0xed65110f2426fcd0, 0x3529533711253344, 0xb79dea1b3c72cdd7, 0x6fd1a82309710243, 0x45f58f80ff9f646c, 0x9db9cdb8ca9cabf8, 0x11bdc0c71243a832, 0xc9f182ff274067a6, 0xe3d5a55cd1ae0189, 0x3b99e764e4adce1d, ], [ 0x0000000000000000, 0x94e66b9518f59db3, 0x6b3c36c198010df5, 0xffda5d5480f49046, 0xd6786d8330021bea, 0x429e061628f78659, 0xbd445b42a803161f, 0x29a230d7b0f68bac, 0xee003aedc9ee0147, 0x7ae65178d11b9cf4, 0x853c0c2c51ef0cb2, 0x11da67b9491a9101, 0x3878576ef9ec1aad, 0xac9e3cfbe119871e, 0x534461af61ed1758, 0xc7a20a3a79188aeb, 0x9ef094303a36341d, 0x0a16ffa522c3a9ae, 0xf5cca2f1a23739e8, 0x612ac964bac2a45b, 0x4888f9b30a342ff7, 0xdc6e922612c1b244, 0x23b4cf7292352202, 0xb752a4e78ac0bfb1, 0x70f0aeddf3d8355a, 0xe416c548eb2da8e9, 0x1bcc981c6bd938af, 0x8f2af389732ca51c, 0xa688c35ec3da2eb0, 0x326ea8cbdb2fb303, 0xcdb4f59f5bdb2345, 0x59529e0a432ebef6, 0x7f11c98bdd865ea9, 0xebf7a21ec573c31a, 0x142dff4a4587535c, 0x80cb94df5d72ceef, 0xa969a408ed844543, 0x3d8fcf9df571d8f0, 0xc25592c9758548b6, 0x56b3f95c6d70d505, 0x9111f36614685fee, 0x05f798f30c9dc25d, 0xfa2dc5a78c69521b, 0x6ecbae32949ccfa8, 0x47699ee5246a4404, 0xd38ff5703c9fd9b7, 0x2c55a824bc6b49f1, 0xb8b3c3b1a49ed442, 0xe1e15dbbe7b06ab4, 0x7507362eff45f707, 0x8add6b7a7fb16741, 0x1e3b00ef6744faf2, 0x37993038d7b2715e, 0xa37f5badcf47eced, 0x5ca506f94fb37cab, 0xc8436d6c5746e118, 0x0fe167562e5e6bf3, 0x9b070cc336abf640, 0x64dd5197b65f6606, 0xf03b3a02aeaafbb5, 0xd9990ad51e5c7019, 0x4d7f614006a9edaa, 0xb2a53c14865d7dec, 0x264357819ea8e05f, 0xfe239317bb0cbd52, 0x6ac5f882a3f920e1, 0x951fa5d6230db0a7, 0x01f9ce433bf82d14, 0x285bfe948b0ea6b8, 0xbcbd950193fb3b0b, 0x4367c855130fab4d, 0xd781a3c00bfa36fe, 0x1023a9fa72e2bc15, 0x84c5c26f6a1721a6, 0x7b1f9f3beae3b1e0, 0xeff9f4aef2162c53, 0xc65bc47942e0a7ff, 0x52bdafec5a153a4c, 0xad67f2b8dae1aa0a, 0x3981992dc21437b9, 0x60d30727813a894f, 0xf4356cb299cf14fc, 0x0bef31e6193b84ba, 0x9f095a7301ce1909, 0xb6ab6aa4b13892a5, 0x224d0131a9cd0f16, 0xdd975c6529399f50, 0x497137f031cc02e3, 0x8ed33dca48d48808, 0x1a35565f502115bb, 0xe5ef0b0bd0d585fd, 0x7109609ec820184e, 0x58ab504978d693e2, 0xcc4d3bdc60230e51, 0x33976688e0d79e17, 0xa7710d1df82203a4, 0x81325a9c668ae3fb, 0x15d431097e7f7e48, 0xea0e6c5dfe8bee0e, 0x7ee807c8e67e73bd, 0x574a371f5688f811, 0xc3ac5c8a4e7d65a2, 0x3c7601dece89f5e4, 0xa8906a4bd67c6857, 0x6f326071af64e2bc, 0xfbd40be4b7917f0f, 0x040e56b03765ef49, 0x90e83d252f9072fa, 0xb94a0df29f66f956, 0x2dac6667879364e5, 0xd2763b330767f4a3, 0x469050a61f926910, 0x1fc2ceac5cbcd7e6, 0x8b24a53944494a55, 0x74fef86dc4bdda13, 0xe01893f8dc4847a0, 0xc9baa32f6cbecc0c, 0x5d5cc8ba744b51bf, 0xa28695eef4bfc1f9, 0x3660fe7bec4a5c4a, 0xf1c2f4419552d6a1, 0x65249fd48da74b12, 0x9afec2800d53db54, 0x0e18a91515a646e7, 0x27ba99c2a550cd4b, 0xb35cf257bda550f8, 0x4c86af033d51c0be, 0xd860c49625a45d0d, 0xbeb7c7c4dff34c37, 0x2a51ac51c706d184, 0xd58bf10547f241c2, 0x416d9a905f07dc71, 0x68cfaa47eff157dd, 0xfc29c1d2f704ca6e, 0x03f39c8677f05a28, 0x9715f7136f05c79b, 0x50b7fd29161d4d70, 0xc45196bc0ee8d0c3, 0x3b8bcbe88e1c4085, 0xaf6da07d96e9dd36, 0x86cf90aa261f569a, 0x1229fb3f3eeacb29, 0xedf3a66bbe1e5b6f, 0x7915cdfea6ebc6dc, 0x204753f4e5c5782a, 0xb4a13861fd30e599, 0x4b7b65357dc475df, 0xdf9d0ea06531e86c, 0xf63f3e77d5c763c0, 0x62d955e2cd32fe73, 0x9d0308b64dc66e35, 0x09e563235533f386, 0xce4769192c2b796d, 0x5aa1028c34dee4de, 0xa57b5fd8b42a7498, 0x319d344dacdfe92b, 0x183f049a1c296287, 0x8cd96f0f04dcff34, 0x7303325b84286f72, 0xe7e559ce9cddf2c1, 0xc1a60e4f0275129e, 0x554065da1a808f2d, 0xaa9a388e9a741f6b, 0x3e7c531b828182d8, 0x17de63cc32770974, 0x833808592a8294c7, 0x7ce2550daa760481, 0xe8043e98b2839932, 0x2fa634a2cb9b13d9, 0xbb405f37d36e8e6a, 0x449a0263539a1e2c, 0xd07c69f64b6f839f, 0xf9de5921fb990833, 0x6d3832b4e36c9580, 0x92e26fe0639805c6, 0x060404757b6d9875, 0x5f569a7f38432683, 0xcbb0f1ea20b6bb30, 0x346aacbea0422b76, 0xa08cc72bb8b7b6c5, 0x892ef7fc08413d69, 0x1dc89c6910b4a0da, 0xe212c13d9040309c, 0x76f4aaa888b5ad2f, 0xb156a092f1ad27c4, 0x25b0cb07e958ba77, 0xda6a965369ac2a31, 0x4e8cfdc67159b782, 0x672ecd11c1af3c2e, 0xf3c8a684d95aa19d, 0x0c12fbd059ae31db, 0x98f49045415bac68, 0x409454d364fff165, 0xd4723f467c0a6cd6, 0x2ba86212fcfefc90, 0xbf4e0987e40b6123, 0x96ec395054fdea8f, 0x020a52c54c08773c, 0xfdd00f91ccfce77a, 0x69366404d4097ac9, 0xae946e3ead11f022, 0x3a7205abb5e46d91, 0xc5a858ff3510fdd7, 0x514e336a2de56064, 0x78ec03bd9d13ebc8, 0xec0a682885e6767b, 0x13d0357c0512e63d, 0x87365ee91de77b8e, 0xde64c0e35ec9c578, 0x4a82ab76463c58cb, 0xb558f622c6c8c88d, 0x21be9db7de3d553e, 0x081cad606ecbde92, 0x9cfac6f5763e4321, 0x63209ba1f6cad367, 0xf7c6f034ee3f4ed4, 0x3064fa0e9727c43f, 0xa482919b8fd2598c, 0x5b58cccf0f26c9ca, 0xcfbea75a17d35479, 0xe61c978da725dfd5, 0x72fafc18bfd04266, 0x8d20a14c3f24d220, 0x19c6cad927d14f93, 0x3f859d58b979afcc, 0xab63f6cda18c327f, 0x54b9ab992178a239, 0xc05fc00c398d3f8a, 0xe9fdf0db897bb426, 0x7d1b9b4e918e2995, 0x82c1c61a117ab9d3, 0x1627ad8f098f2460, 0xd185a7b57097ae8b, 0x4563cc2068623338, 0xbab99174e896a37e, 0x2e5ffae1f0633ecd, 0x07fdca364095b561, 0x931ba1a3586028d2, 0x6cc1fcf7d894b894, 0xf8279762c0612527, 0xa1750968834f9bd1, 0x359362fd9bba0662, 0xca493fa91b4e9624, 0x5eaf543c03bb0b97, 0x770d64ebb34d803b, 0xe3eb0f7eabb81d88, 0x1c31522a2b4c8dce, 0x88d739bf33b9107d, 0x4f7533854aa19a96, 0xdb93581052540725, 0x24490544d2a09763, 0xb0af6ed1ca550ad0, 0x990d5e067aa3817c, 0x0deb359362561ccf, 0xf23168c7e2a28c89, 0x66d70352fa57113a, ], [ 0x0000000000000000, 0x3f9f6e62160caefd, 0x7f3edcc42c195dfa, 0x40a1b2a63a15f307, 0xfe7db9885832bbf4, 0xc1e2d7ea4e3e1509, 0x8143654c742be60e, 0xbedc0b2e622748f3, 0xbe0b92fb198f417b, 0x8194fc990f83ef86, 0xc1354e3f35961c81, 0xfeaa205d239ab27c, 0x40762b7341bdfa8f, 0x7fe9451157b15472, 0x3f48f7b76da4a775, 0x00d799d57ba80988, 0x3ee7c41d9af4b465, 0x0178aa7f8cf81a98, 0x41d918d9b6ede99f, 0x7e4676bba0e14762, 0xc09a7d95c2c60f91, 0xff0513f7d4caa16c, 0xbfa4a151eedf526b, 0x803bcf33f8d3fc96, 0x80ec56e6837bf51e, 0xbf73388495775be3, 0xffd28a22af62a8e4, 0xc04de440b96e0619, 0x7e91ef6edb494eea, 0x410e810ccd45e017, 0x01af33aaf7501310, 0x3e305dc8e15cbded, 0x7dcf883b35e968ca, 0x4250e65923e5c637, 0x02f154ff19f03530, 0x3d6e3a9d0ffc9bcd, 0x83b231b36ddbd33e, 0xbc2d5fd17bd77dc3, 0xfc8ced7741c28ec4, 0xc313831557ce2039, 0xc3c41ac02c6629b1, 0xfc5b74a23a6a874c, 0xbcfac604007f744b, 0x8365a8661673dab6, 0x3db9a34874549245, 0x0226cd2a62583cb8, 0x42877f8c584dcfbf, 0x7d1811ee4e416142, 0x43284c26af1ddcaf, 0x7cb72244b9117252, 0x3c1690e283048155, 0x0389fe8095082fa8, 0xbd55f5aef72f675b, 0x82ca9bcce123c9a6, 0xc26b296adb363aa1, 0xfdf44708cd3a945c, 0xfd23deddb6929dd4, 0xc2bcb0bfa09e3329, 0x821d02199a8bc02e, 0xbd826c7b8c876ed3, 0x035e6755eea02620, 0x3cc10937f8ac88dd, 0x7c60bb91c2b97bda, 0x43ffd5f3d4b5d527, 0xfb9f10766bd2d194, 0xc4007e147dde7f69, 0x84a1ccb247cb8c6e, 0xbb3ea2d051c72293, 0x05e2a9fe33e06a60, 0x3a7dc79c25ecc49d, 0x7adc753a1ff9379a, 0x45431b5809f59967, 0x4594828d725d90ef, 0x7a0becef64513e12, 0x3aaa5e495e44cd15, 0x0535302b484863e8, 0xbbe93b052a6f2b1b, 0x847655673c6385e6, 0xc4d7e7c1067676e1, 0xfb4889a3107ad81c, 0xc578d46bf12665f1, 0xfae7ba09e72acb0c, 0xba4608afdd3f380b, 0x85d966cdcb3396f6, 0x3b056de3a914de05, 0x049a0381bf1870f8, 0x443bb127850d83ff, 0x7ba4df4593012d02, 0x7b734690e8a9248a, 0x44ec28f2fea58a77, 0x044d9a54c4b07970, 0x3bd2f436d2bcd78d, 0x850eff18b09b9f7e, 0xba91917aa6973183, 0xfa3023dc9c82c284, 0xc5af4dbe8a8e6c79, 0x8650984d5e3bb95e, 0xb9cff62f483717a3, 0xf96e44897222e4a4, 0xc6f12aeb642e4a59, 0x782d21c5060902aa, 0x47b24fa71005ac57, 0x0713fd012a105f50, 0x388c93633c1cf1ad, 0x385b0ab647b4f825, 0x07c464d451b856d8, 0x4765d6726bada5df, 0x78fab8107da10b22, 0xc626b33e1f8643d1, 0xf9b9dd5c098aed2c, 0xb9186ffa339f1e2b, 0x868701982593b0d6, 0xb8b75c50c4cf0d3b, 0x87283232d2c3a3c6, 0xc7898094e8d650c1, 0xf816eef6fedafe3c, 0x46cae5d89cfdb6cf, 0x79558bba8af11832, 0x39f4391cb0e4eb35, 0x066b577ea6e845c8, 0x06bcceabdd404c40, 0x3923a0c9cb4ce2bd, 0x7982126ff15911ba, 0x461d7c0de755bf47, 0xf8c177238572f7b4, 0xc75e1941937e5949, 0x87ffabe7a96baa4e, 0xb860c585bf6704b3, 0xb5cec1077e4f95bb, 0x8a51af6568433b46, 0xcaf01dc35256c841, 0xf56f73a1445a66bc, 0x4bb3788f267d2e4f, 0x742c16ed307180b2, 0x348da44b0a6473b5, 0x0b12ca291c68dd48, 0x0bc553fc67c0d4c0, 0x345a3d9e71cc7a3d, 0x74fb8f384bd9893a, 0x4b64e15a5dd527c7, 0xf5b8ea743ff26f34, 0xca27841629fec1c9, 0x8a8636b013eb32ce, 0xb51958d205e79c33, 0x8b29051ae4bb21de, 0xb4b66b78f2b78f23, 0xf417d9dec8a27c24, 0xcb88b7bcdeaed2d9, 0x7554bc92bc899a2a, 0x4acbd2f0aa8534d7, 0x0a6a60569090c7d0, 0x35f50e34869c692d, 0x352297e1fd3460a5, 0x0abdf983eb38ce58, 0x4a1c4b25d12d3d5f, 0x75832547c72193a2, 0xcb5f2e69a506db51, 0xf4c0400bb30a75ac, 0xb461f2ad891f86ab, 0x8bfe9ccf9f132856, 0xc801493c4ba6fd71, 0xf79e275e5daa538c, 0xb73f95f867bfa08b, 0x88a0fb9a71b30e76, 0x367cf0b413944685, 0x09e39ed60598e878, 0x49422c703f8d1b7f, 0x76dd42122981b582, 0x760adbc75229bc0a, 0x4995b5a5442512f7, 0x093407037e30e1f0, 0x36ab6961683c4f0d, 0x8877624f0a1b07fe, 0xb7e80c2d1c17a903, 0xf749be8b26025a04, 0xc8d6d0e9300ef4f9, 0xf6e68d21d1524914, 0xc979e343c75ee7e9, 0x89d851e5fd4b14ee, 0xb6473f87eb47ba13, 0x089b34a98960f2e0, 0x37045acb9f6c5c1d, 0x77a5e86da579af1a, 0x483a860fb37501e7, 0x48ed1fdac8dd086f, 0x777271b8ded1a692, 0x37d3c31ee4c45595, 0x084cad7cf2c8fb68, 0xb690a65290efb39b, 0x890fc83086e31d66, 0xc9ae7a96bcf6ee61, 0xf63114f4aafa409c, 0x4e51d171159d442f, 0x71cebf130391ead2, 0x316f0db5398419d5, 0x0ef063d72f88b728, 0xb02c68f94dafffdb, 0x8fb3069b5ba35126, 0xcf12b43d61b6a221, 0xf08dda5f77ba0cdc, 0xf05a438a0c120554, 0xcfc52de81a1eaba9, 0x8f649f4e200b58ae, 0xb0fbf12c3607f653, 0x0e27fa025420bea0, 0x31b89460422c105d, 0x711926c67839e35a, 0x4e8648a46e354da7, 0x70b6156c8f69f04a, 0x4f297b0e99655eb7, 0x0f88c9a8a370adb0, 0x3017a7cab57c034d, 0x8ecbace4d75b4bbe, 0xb154c286c157e543, 0xf1f57020fb421644, 0xce6a1e42ed4eb8b9, 0xcebd879796e6b131, 0xf122e9f580ea1fcc, 0xb1835b53baffeccb, 0x8e1c3531acf34236, 0x30c03e1fced40ac5, 0x0f5f507dd8d8a438, 0x4ffee2dbe2cd573f, 0x70618cb9f4c1f9c2, 0x339e594a20742ce5, 0x0c01372836788218, 0x4ca0858e0c6d711f, 0x733febec1a61dfe2, 0xcde3e0c278469711, 0xf27c8ea06e4a39ec, 0xb2dd3c06545fcaeb, 0x8d42526442536416, 0x8d95cbb139fb6d9e, 0xb20aa5d32ff7c363, 0xf2ab177515e23064, 0xcd34791703ee9e99, 0x73e8723961c9d66a, 0x4c771c5b77c57897, 0x0cd6aefd4dd08b90, 0x3349c09f5bdc256d, 0x0d799d57ba809880, 0x32e6f335ac8c367d, 0x724741939699c57a, 0x4dd82ff180956b87, 0xf30424dfe2b22374, 0xcc9b4abdf4be8d89, 0x8c3af81bceab7e8e, 0xb3a59679d8a7d073, 0xb3720faca30fd9fb, 0x8ced61ceb5037706, 0xcc4cd3688f168401, 0xf3d3bd0a991a2afc, 0x4d0fb624fb3d620f, 0x7290d846ed31ccf2, 0x32316ae0d7243ff5, 0x0dae0482c1289108, ], [ 0x0000000000000000, 0x296d63e555751de5, 0x52dac7caaaea3bca, 0x7bb7a42fff9f262f, 0xa5b58f9555d47794, 0x8cd8ec7000a16a71, 0xf76f485fff3e4c5e, 0xde022bbaaa4b51bb, 0x099bfec10242d9bb, 0x20f69d245737c45e, 0x5b41390ba8a8e271, 0x722c5aeefdddff94, 0xac2e71545796ae2f, 0x854312b102e3b3ca, 0xfef4b69efd7c95e5, 0xd799d57ba8098800, 0x1337fd820485b376, 0x3a5a9e6751f0ae93, 0x41ed3a48ae6f88bc, 0x688059adfb1a9559, 0xb68272175151c4e2, 0x9fef11f20424d907, 0xe458b5ddfbbbff28, 0xcd35d638aecee2cd, 0x1aac034306c76acd, 0x33c160a653b27728, 0x4876c489ac2d5107, 0x611ba76cf9584ce2, 0xbf198cd653131d59, 0x9674ef33066600bc, 0xedc34b1cf9f92693, 0xc4ae28f9ac8c3b76, 0x266ffb04090b66ec, 0x0f0298e15c7e7b09, 0x74b53ccea3e15d26, 0x5dd85f2bf69440c3, 0x83da74915cdf1178, 0xaab7177409aa0c9d, 0xd100b35bf6352ab2, 0xf86dd0bea3403757, 0x2ff405c50b49bf57, 0x069966205e3ca2b2, 0x7d2ec20fa1a3849d, 0x5443a1eaf4d69978, 0x8a418a505e9dc8c3, 0xa32ce9b50be8d526, 0xd89b4d9af477f309, 0xf1f62e7fa102eeec, 0x355806860d8ed59a, 0x1c35656358fbc87f, 0x6782c14ca764ee50, 0x4eefa2a9f211f3b5, 0x90ed8913585aa20e, 0xb980eaf60d2fbfeb, 0xc2374ed9f2b099c4, 0xeb5a2d3ca7c58421, 0x3cc3f8470fcc0c21, 0x15ae9ba25ab911c4, 0x6e193f8da52637eb, 0x47745c68f0532a0e, 0x997677d25a187bb5, 0xb01b14370f6d6650, 0xcbacb018f0f2407f, 0xe2c1d3fda5875d9a, 0x4cdff6081216cdd8, 0x65b295ed4763d03d, 0x1e0531c2b8fcf612, 0x37685227ed89ebf7, 0xe96a799d47c2ba4c, 0xc0071a7812b7a7a9, 0xbbb0be57ed288186, 0x92ddddb2b85d9c63, 0x454408c910541463, 0x6c296b2c45210986, 0x179ecf03babe2fa9, 0x3ef3ace6efcb324c, 0xe0f1875c458063f7, 0xc99ce4b910f57e12, 0xb22b4096ef6a583d, 0x9b462373ba1f45d8, 0x5fe80b8a16937eae, 0x7685686f43e6634b, 0x0d32cc40bc794564, 0x245fafa5e90c5881, 0xfa5d841f4347093a, 0xd330e7fa163214df, 0xa88743d5e9ad32f0, 0x81ea2030bcd82f15, 0x5673f54b14d1a715, 0x7f1e96ae41a4baf0, 0x04a93281be3b9cdf, 0x2dc45164eb4e813a, 0xf3c67ade4105d081, 0xdaab193b1470cd64, 0xa11cbd14ebefeb4b, 0x8871def1be9af6ae, 0x6ab00d0c1b1dab34, 0x43dd6ee94e68b6d1, 0x386acac6b1f790fe, 0x1107a923e4828d1b, 0xcf0582994ec9dca0, 0xe668e17c1bbcc145, 0x9ddf4553e423e76a, 0xb4b226b6b156fa8f, 0x632bf3cd195f728f, 0x4a4690284c2a6f6a, 0x31f13407b3b54945, 0x189c57e2e6c054a0, 0xc69e7c584c8b051b, 0xeff31fbd19fe18fe, 0x9444bb92e6613ed1, 0xbd29d877b3142334, 0x7987f08e1f981842, 0x50ea936b4aed05a7, 0x2b5d3744b5722388, 0x023054a1e0073e6d, 0xdc327f1b4a4c6fd6, 0xf55f1cfe1f397233, 0x8ee8b8d1e0a6541c, 0xa785db34b5d349f9, 0x701c0e4f1ddac1f9, 0x59716daa48afdc1c, 0x22c6c985b730fa33, 0x0babaa60e245e7d6, 0xd5a981da480eb66d, 0xfcc4e23f1d7bab88, 0x87734610e2e48da7, 0xae1e25f5b7919042, 0x99bfec10242d9bb0, 0xb0d28ff571588655, 0xcb652bda8ec7a07a, 0xe208483fdbb2bd9f, 0x3c0a638571f9ec24, 0x15670060248cf1c1, 0x6ed0a44fdb13d7ee, 0x47bdc7aa8e66ca0b, 0x902412d1266f420b, 0xb9497134731a5fee, 0xc2fed51b8c8579c1, 0xeb93b6fed9f06424, 0x35919d4473bb359f, 0x1cfcfea126ce287a, 0x674b5a8ed9510e55, 0x4e26396b8c2413b0, 0x8a88119220a828c6, 0xa3e5727775dd3523, 0xd852d6588a42130c, 0xf13fb5bddf370ee9, 0x2f3d9e07757c5f52, 0x0650fde2200942b7, 0x7de759cddf966498, 0x548a3a288ae3797d, 0x8313ef5322eaf17d, 0xaa7e8cb6779fec98, 0xd1c928998800cab7, 0xf8a44b7cdd75d752, 0x26a660c6773e86e9, 0x0fcb0323224b9b0c, 0x747ca70cddd4bd23, 0x5d11c4e988a1a0c6, 0xbfd017142d26fd5c, 0x96bd74f17853e0b9, 0xed0ad0de87ccc696, 0xc467b33bd2b9db73, 0x1a65988178f28ac8, 0x3308fb642d87972d, 0x48bf5f4bd218b102, 0x61d23cae876dace7, 0xb64be9d52f6424e7, 0x9f268a307a113902, 0xe4912e1f858e1f2d, 0xcdfc4dfad0fb02c8, 0x13fe66407ab05373, 0x3a9305a52fc54e96, 0x4124a18ad05a68b9, 0x6849c26f852f755c, 0xace7ea9629a34e2a, 0x858a89737cd653cf, 0xfe3d2d5c834975e0, 0xd7504eb9d63c6805, 0x095265037c7739be, 0x203f06e62902245b, 0x5b88a2c9d69d0274, 0x72e5c12c83e81f91, 0xa57c14572be19791, 0x8c1177b27e948a74, 0xf7a6d39d810bac5b, 0xdecbb078d47eb1be, 0x00c99bc27e35e005, 0x29a4f8272b40fde0, 0x52135c08d4dfdbcf, 0x7b7e3fed81aac62a, 0xd5601a18363b5668, 0xfc0d79fd634e4b8d, 0x87baddd29cd16da2, 0xaed7be37c9a47047, 0x70d5958d63ef21fc, 0x59b8f668369a3c19, 0x220f5247c9051a36, 0x0b6231a29c7007d3, 0xdcfbe4d934798fd3, 0xf596873c610c9236, 0x8e2123139e93b419, 0xa74c40f6cbe6a9fc, 0x794e6b4c61adf847, 0x502308a934d8e5a2, 0x2b94ac86cb47c38d, 0x02f9cf639e32de68, 0xc657e79a32bee51e, 0xef3a847f67cbf8fb, 0x948d20509854ded4, 0xbde043b5cd21c331, 0x63e2680f676a928a, 0x4a8f0bea321f8f6f, 0x3138afc5cd80a940, 0x1855cc2098f5b4a5, 0xcfcc195b30fc3ca5, 0xe6a17abe65892140, 0x9d16de919a16076f, 0xb47bbd74cf631a8a, 0x6a7996ce65284b31, 0x4314f52b305d56d4, 0x38a35104cfc270fb, 0x11ce32e19ab76d1e, 0xf30fe11c3f303084, 0xda6282f96a452d61, 0xa1d526d695da0b4e, 0x88b84533c0af16ab, 0x56ba6e896ae44710, 0x7fd70d6c3f915af5, 0x0460a943c00e7cda, 0x2d0dcaa6957b613f, 0xfa941fdd3d72e93f, 0xd3f97c386807f4da, 0xa84ed8179798d2f5, 0x8123bbf2c2edcf10, 0x5f21904868a69eab, 0x764cf3ad3dd3834e, 0x0dfb5782c24ca561, 0x249634679739b884, 0xe0381c9e3bb583f2, 0xc9557f7b6ec09e17, 0xb2e2db54915fb838, 0x9b8fb8b1c42aa5dd, 0x458d930b6e61f466, 0x6ce0f0ee3b14e983, 0x175754c1c48bcfac, 0x3e3a372491fed249, 0xe9a3e25f39f75a49, 0xc0ce81ba6c8247ac, 0xbb792595931d6183, 0x92144670c6687c66, 0x4c166dca6c232ddd, 0x657b0e2f39563038, 0x1eccaa00c6c91617, 0x37a1c9e593bc0bf2, ], [ 0x0000000000000000, 0x718f39cbe1b101f3, 0xe31e7397c36203e6, 0x92914a5c22d30215, 0x84cc06c42f2e315f, 0xf5433f0fce9f30ac, 0x67d27553ec4c32b9, 0x165d4c980dfd334a, 0x4b68ec63f7b6542d, 0x3ae7d5a8160755de, 0xa8769ff434d457cb, 0xd9f9a63fd5655638, 0xcfa4eaa7d8986572, 0xbe2bd36c39296481, 0x2cba99301bfa6694, 0x5d35a0fbfa4b6767, 0x96d1d8c7ef6ca85a, 0xe75ee10c0edda9a9, 0x75cfab502c0eabbc, 0x0440929bcdbfaa4f, 0x121dde03c0429905, 0x6392e7c821f398f6, 0xf103ad9403209ae3, 0x808c945fe2919b10, 0xddb934a418dafc77, 0xac360d6ff96bfd84, 0x3ea74733dbb8ff91, 0x4f287ef83a09fe62, 0x5975326037f4cd28, 0x28fa0babd645ccdb, 0xba6b41f7f496cece, 0xcbe4783c1527cf3d, 0x6f53506477336627, 0x1edc69af968267d4, 0x8c4d23f3b45165c1, 0xfdc21a3855e06432, 0xeb9f56a0581d5778, 0x9a106f6bb9ac568b, 0x088125379b7f549e, 0x790e1cfc7ace556d, 0x243bbc078085320a, 0x55b485cc613433f9, 0xc725cf9043e731ec, 0xb6aaf65ba256301f, 0xa0f7bac3afab0355, 0xd17883084e1a02a6, 0x43e9c9546cc900b3, 0x3266f09f8d780140, 0xf98288a3985fce7d, 0x880db16879eecf8e, 0x1a9cfb345b3dcd9b, 0x6b13c2ffba8ccc68, 0x7d4e8e67b771ff22, 0x0cc1b7ac56c0fed1, 0x9e50fdf07413fcc4, 0xefdfc43b95a2fd37, 0xb2ea64c06fe99a50, 0xc3655d0b8e589ba3, 0x51f41757ac8b99b6, 0x207b2e9c4d3a9845, 0x3626620440c7ab0f, 0x47a95bcfa176aafc, 0xd538119383a5a8e9, 0xa4b728586214a91a, 0xdea6a0c8ee66cc4e, 0xaf2999030fd7cdbd, 0x3db8d35f2d04cfa8, 0x4c37ea94ccb5ce5b, 0x5a6aa60cc148fd11, 0x2be59fc720f9fce2, 0xb974d59b022afef7, 0xc8fbec50e39bff04, 0x95ce4cab19d09863, 0xe4417560f8619990, 0x76d03f3cdab29b85, 0x075f06f73b039a76, 0x11024a6f36fea93c, 0x608d73a4d74fa8cf, 0xf21c39f8f59caada, 0x83930033142dab29, 0x4877780f010a6414, 0x39f841c4e0bb65e7, 0xab690b98c26867f2, 0xdae6325323d96601, 0xccbb7ecb2e24554b, 0xbd344700cf9554b8, 0x2fa50d5ced4656ad, 0x5e2a34970cf7575e, 0x031f946cf6bc3039, 0x7290ada7170d31ca, 0xe001e7fb35de33df, 0x918ede30d46f322c, 0x87d392a8d9920166, 0xf65cab6338230095, 0x64cde13f1af00280, 0x1542d8f4fb410373, 0xb1f5f0ac9955aa69, 0xc07ac96778e4ab9a, 0x52eb833b5a37a98f, 0x2364baf0bb86a87c, 0x3539f668b67b9b36, 0x44b6cfa357ca9ac5, 0xd62785ff751998d0, 0xa7a8bc3494a89923, 0xfa9d1ccf6ee3fe44, 0x8b1225048f52ffb7, 0x19836f58ad81fda2, 0x680c56934c30fc51, 0x7e511a0b41cdcf1b, 0x0fde23c0a07ccee8, 0x9d4f699c82afccfd, 0xecc05057631ecd0e, 0x2724286b76390233, 0x56ab11a0978803c0, 0xc43a5bfcb55b01d5, 0xb5b5623754ea0026, 0xa3e82eaf5917336c, 0xd2671764b8a6329f, 0x40f65d389a75308a, 0x317964f37bc43179, 0x6c4cc408818f561e, 0x1dc3fdc3603e57ed, 0x8f52b79f42ed55f8, 0xfedd8e54a35c540b, 0xe880c2ccaea16741, 0x990ffb074f1066b2, 0x0b9eb15b6dc364a7, 0x7a1188908c726554, 0xffbda07a7527ae0f, 0x8e3299b19496affc, 0x1ca3d3edb645ade9, 0x6d2cea2657f4ac1a, 0x7b71a6be5a099f50, 0x0afe9f75bbb89ea3, 0x986fd529996b9cb6, 0xe9e0ece278da9d45, 0xb4d54c198291fa22, 0xc55a75d26320fbd1, 0x57cb3f8e41f3f9c4, 0x26440645a042f837, 0x30194addadbfcb7d, 0x419673164c0eca8e, 0xd307394a6eddc89b, 0xa28800818f6cc968, 0x696c78bd9a4b0655, 0x18e341767bfa07a6, 0x8a720b2a592905b3, 0xfbfd32e1b8980440, 0xeda07e79b565370a, 0x9c2f47b254d436f9, 0x0ebe0dee760734ec, 0x7f31342597b6351f, 0x220494de6dfd5278, 0x538bad158c4c538b, 0xc11ae749ae9f519e, 0xb095de824f2e506d, 0xa6c8921a42d36327, 0xd747abd1a36262d4, 0x45d6e18d81b160c1, 0x3459d84660006132, 0x90eef01e0214c828, 0xe161c9d5e3a5c9db, 0x73f08389c176cbce, 0x027fba4220c7ca3d, 0x1422f6da2d3af977, 0x65adcf11cc8bf884, 0xf73c854dee58fa91, 0x86b3bc860fe9fb62, 0xdb861c7df5a29c05, 0xaa0925b614139df6, 0x38986fea36c09fe3, 0x49175621d7719e10, 0x5f4a1ab9da8cad5a, 0x2ec523723b3daca9, 0xbc54692e19eeaebc, 0xcddb50e5f85faf4f, 0x063f28d9ed786072, 0x77b011120cc96181, 0xe5215b4e2e1a6394, 0x94ae6285cfab6267, 0x82f32e1dc256512d, 0xf37c17d623e750de, 0x61ed5d8a013452cb, 0x10626441e0855338, 0x4d57c4ba1ace345f, 0x3cd8fd71fb7f35ac, 0xae49b72dd9ac37b9, 0xdfc68ee6381d364a, 0xc99bc27e35e00500, 0xb814fbb5d45104f3, 0x2a85b1e9f68206e6, 0x5b0a882217330715, 0x211b00b29b416241, 0x509439797af063b2, 0xc2057325582361a7, 0xb38a4aeeb9926054, 0xa5d70676b46f531e, 0xd4583fbd55de52ed, 0x46c975e1770d50f8, 0x37464c2a96bc510b, 0x6a73ecd16cf7366c, 0x1bfcd51a8d46379f, 0x896d9f46af95358a, 0xf8e2a68d4e243479, 0xeebfea1543d90733, 0x9f30d3dea26806c0, 0x0da1998280bb04d5, 0x7c2ea049610a0526, 0xb7cad875742dca1b, 0xc645e1be959ccbe8, 0x54d4abe2b74fc9fd, 0x255b922956fec80e, 0x3306deb15b03fb44, 0x4289e77abab2fab7, 0xd018ad269861f8a2, 0xa19794ed79d0f951, 0xfca23416839b9e36, 0x8d2d0ddd622a9fc5, 0x1fbc478140f99dd0, 0x6e337e4aa1489c23, 0x786e32d2acb5af69, 0x09e10b194d04ae9a, 0x9b7041456fd7ac8f, 0xeaff788e8e66ad7c, 0x4e4850d6ec720466, 0x3fc7691d0dc30595, 0xad5623412f100780, 0xdcd91a8acea10673, 0xca845612c35c3539, 0xbb0b6fd922ed34ca, 0x299a2585003e36df, 0x58151c4ee18f372c, 0x0520bcb51bc4504b, 0x74af857efa7551b8, 0xe63ecf22d8a653ad, 0x97b1f6e93917525e, 0x81ecba7134ea6114, 0xf06383bad55b60e7, 0x62f2c9e6f78862f2, 0x137df02d16396301, 0xd8998811031eac3c, 0xa916b1dae2afadcf, 0x3b87fb86c07cafda, 0x4a08c24d21cdae29, 0x5c558ed52c309d63, 0x2ddab71ecd819c90, 0xbf4bfd42ef529e85, 0xcec4c4890ee39f76, 0x93f16472f4a8f811, 0xe27e5db91519f9e2, 0x70ef17e537cafbf7, 0x01602e2ed67bfa04, 0x173d62b6db86c94e, 0x66b25b7d3a37c8bd, 0xf423112118e4caa8, 0x85ac28eaf955cb5b, ], [ 0x0000000000000000, 0xbd8ba11f43a56a8d, 0x39e7a3d52ea0e389, 0x846c02ca6d058904, 0x73cf47aa5d41c712, 0xce44e6b51ee4ad9f, 0x4a28e47f73e1249b, 0xf7a3456030444e16, 0xe79e8f54ba838e24, 0x5a152e4bf926e4a9, 0xde792c8194236dad, 0x63f28d9ed7860720, 0x9451c8fee7c24936, 0x29da69e1a46723bb, 0xadb66b2bc962aabf, 0x103dca348ac7c032, 0x8dcdff42dced2adb, 0x30465e5d9f484056, 0xb42a5c97f24dc952, 0x09a1fd88b1e8a3df, 0xfe02b8e881acedc9, 0x438919f7c2098744, 0xc7e51b3daf0c0e40, 0x7a6eba22eca964cd, 0x6a537016666ea4ff, 0xd7d8d10925cbce72, 0x53b4d3c348ce4776, 0xee3f72dc0b6b2dfb, 0x199c37bc3b2f63ed, 0xa41796a3788a0960, 0x207b9469158f8064, 0x9df03576562aeae9, 0x596b1f6e10306325, 0xe4e0be71539509a8, 0x608cbcbb3e9080ac, 0xdd071da47d35ea21, 0x2aa458c44d71a437, 0x972ff9db0ed4ceba, 0x1343fb1163d147be, 0xaec85a0e20742d33, 0xbef5903aaab3ed01, 0x037e3125e916878c, 0x871233ef84130e88, 0x3a9992f0c7b66405, 0xcd3ad790f7f22a13, 0x70b1768fb457409e, 0xf4dd7445d952c99a, 0x4956d55a9af7a317, 0xd4a6e02cccdd49fe, 0x692d41338f782373, 0xed4143f9e27daa77, 0x50cae2e6a1d8c0fa, 0xa769a786919c8eec, 0x1ae20699d239e461, 0x9e8e0453bf3c6d65, 0x2305a54cfc9907e8, 0x33386f78765ec7da, 0x8eb3ce6735fbad57, 0x0adfccad58fe2453, 0xb7546db21b5b4ede, 0x40f728d22b1f00c8, 0xfd7c89cd68ba6a45, 0x79108b0705bfe341, 0xc49b2a18461a89cc, 0xb2d63edc2060c64a, 0x0f5d9fc363c5acc7, 0x8b319d090ec025c3, 0x36ba3c164d654f4e, 0xc11979767d210158, 0x7c92d8693e846bd5, 0xf8fedaa35381e2d1, 0x45757bbc1024885c, 0x5548b1889ae3486e, 0xe8c31097d94622e3, 0x6caf125db443abe7, 0xd124b342f7e6c16a, 0x2687f622c7a28f7c, 0x9b0c573d8407e5f1, 0x1f6055f7e9026cf5, 0xa2ebf4e8aaa70678, 0x3f1bc19efc8dec91, 0x82906081bf28861c, 0x06fc624bd22d0f18, 0xbb77c35491886595, 0x4cd48634a1cc2b83, 0xf15f272be269410e, 0x753325e18f6cc80a, 0xc8b884feccc9a287, 0xd8854eca460e62b5, 0x650eefd505ab0838, 0xe162ed1f68ae813c, 0x5ce94c002b0bebb1, 0xab4a09601b4fa5a7, 0x16c1a87f58eacf2a, 0x92adaab535ef462e, 0x2f260baa764a2ca3, 0xebbd21b23050a56f, 0x563680ad73f5cfe2, 0xd25a82671ef046e6, 0x6fd123785d552c6b, 0x987266186d11627d, 0x25f9c7072eb408f0, 0xa195c5cd43b181f4, 0x1c1e64d20014eb79, 0x0c23aee68ad32b4b, 0xb1a80ff9c97641c6, 0x35c40d33a473c8c2, 0x884fac2ce7d6a24f, 0x7fece94cd792ec59, 0xc2674853943786d4, 0x460b4a99f9320fd0, 0xfb80eb86ba97655d, 0x6670def0ecbd8fb4, 0xdbfb7fefaf18e539, 0x5f977d25c21d6c3d, 0xe21cdc3a81b806b0, 0x15bf995ab1fc48a6, 0xa8343845f259222b, 0x2c583a8f9f5cab2f, 0x91d39b90dcf9c1a2, 0x81ee51a4563e0190, 0x3c65f0bb159b6b1d, 0xb809f271789ee219, 0x0582536e3b3b8894, 0xf221160e0b7fc682, 0x4faab71148daac0f, 0xcbc6b5db25df250b, 0x764d14c4667a4f86, 0x275c9c53e92bba07, 0x9ad73d4caa8ed08a, 0x1ebb3f86c78b598e, 0xa3309e99842e3303, 0x5493dbf9b46a7d15, 0xe9187ae6f7cf1798, 0x6d74782c9aca9e9c, 0xd0ffd933d96ff411, 0xc0c2130753a83423, 0x7d49b218100d5eae, 0xf925b0d27d08d7aa, 0x44ae11cd3eadbd27, 0xb30d54ad0ee9f331, 0x0e86f5b24d4c99bc, 0x8aeaf778204910b8, 0x3761566763ec7a35, 0xaa91631135c690dc, 0x171ac20e7663fa51, 0x9376c0c41b667355, 0x2efd61db58c319d8, 0xd95e24bb688757ce, 0x64d585a42b223d43, 0xe0b9876e4627b447, 0x5d3226710582deca, 0x4d0fec458f451ef8, 0xf0844d5acce07475, 0x74e84f90a1e5fd71, 0xc963ee8fe24097fc, 0x3ec0abefd204d9ea, 0x834b0af091a1b367, 0x0727083afca43a63, 0xbaaca925bf0150ee, 0x7e37833df91bd922, 0xc3bc2222babeb3af, 0x47d020e8d7bb3aab, 0xfa5b81f7941e5026, 0x0df8c497a45a1e30, 0xb0736588e7ff74bd, 0x341f67428afafdb9, 0x8994c65dc95f9734, 0x99a90c6943985706, 0x2422ad76003d3d8b, 0xa04eafbc6d38b48f, 0x1dc50ea32e9dde02, 0xea664bc31ed99014, 0x57edeadc5d7cfa99, 0xd381e8163079739d, 0x6e0a490973dc1910, 0xf3fa7c7f25f6f3f9, 0x4e71dd6066539974, 0xca1ddfaa0b561070, 0x77967eb548f37afd, 0x80353bd578b734eb, 0x3dbe9aca3b125e66, 0xb9d298005617d762, 0x0459391f15b2bdef, 0x1464f32b9f757ddd, 0xa9ef5234dcd01750, 0x2d8350feb1d59e54, 0x9008f1e1f270f4d9, 0x67abb481c234bacf, 0xda20159e8191d042, 0x5e4c1754ec945946, 0xe3c7b64baf3133cb, 0x958aa28fc94b7c4d, 0x280103908aee16c0, 0xac6d015ae7eb9fc4, 0x11e6a045a44ef549, 0xe645e525940abb5f, 0x5bce443ad7afd1d2, 0xdfa246f0baaa58d6, 0x6229e7eff90f325b, 0x72142ddb73c8f269, 0xcf9f8cc4306d98e4, 0x4bf38e0e5d6811e0, 0xf6782f111ecd7b6d, 0x01db6a712e89357b, 0xbc50cb6e6d2c5ff6, 0x383cc9a40029d6f2, 0x85b768bb438cbc7f, 0x18475dcd15a65696, 0xa5ccfcd256033c1b, 0x21a0fe183b06b51f, 0x9c2b5f0778a3df92, 0x6b881a6748e79184, 0xd603bb780b42fb09, 0x526fb9b26647720d, 0xefe418ad25e21880, 0xffd9d299af25d8b2, 0x42527386ec80b23f, 0xc63e714c81853b3b, 0x7bb5d053c22051b6, 0x8c169533f2641fa0, 0x319d342cb1c1752d, 0xb5f136e6dcc4fc29, 0x087a97f99f6196a4, 0xcce1bde1d97b1f68, 0x716a1cfe9ade75e5, 0xf5061e34f7dbfce1, 0x488dbf2bb47e966c, 0xbf2efa4b843ad87a, 0x02a55b54c79fb2f7, 0x86c9599eaa9a3bf3, 0x3b42f881e93f517e, 0x2b7f32b563f8914c, 0x96f493aa205dfbc1, 0x129891604d5872c5, 0xaf13307f0efd1848, 0x58b0751f3eb9565e, 0xe53bd4007d1c3cd3, 0x6157d6ca1019b5d7, 0xdcdc77d553bcdf5a, 0x412c42a3059635b3, 0xfca7e3bc46335f3e, 0x78cbe1762b36d63a, 0xc54040696893bcb7, 0x32e3050958d7f2a1, 0x8f68a4161b72982c, 0x0b04a6dc76771128, 0xb68f07c335d27ba5, 0xa6b2cdf7bf15bb97, 0x1b396ce8fcb0d11a, 0x9f556e2291b5581e, 0x22decf3dd2103293, 0xd57d8a5de2547c85, 0x68f62b42a1f11608, 0xec9a2988ccf49f0c, 0x511188978f51f581, ], ]; pub static CRC64_XZ_TABLE: [[u64; 256]; 16] = [ [ 0x0000000000000000, 0xb32e4cbe03a75f6f, 0xf4843657a840a05b, 0x47aa7ae9abe7ff34, 0x7bd0c384ff8f5e33, 0xc8fe8f3afc28015c, 0x8f54f5d357cffe68, 0x3c7ab96d5468a107, 0xf7a18709ff1ebc66, 0x448fcbb7fcb9e309, 0x0325b15e575e1c3d, 0xb00bfde054f94352, 0x8c71448d0091e255, 0x3f5f08330336bd3a, 0x78f572daa8d1420e, 0xcbdb3e64ab761d61, 0x7d9ba13851336649, 0xceb5ed8652943926, 0x891f976ff973c612, 0x3a31dbd1fad4997d, 0x064b62bcaebc387a, 0xb5652e02ad1b6715, 0xf2cf54eb06fc9821, 0x41e11855055bc74e, 0x8a3a2631ae2dda2f, 0x39146a8fad8a8540, 0x7ebe1066066d7a74, 0xcd905cd805ca251b, 0xf1eae5b551a2841c, 0x42c4a90b5205db73, 0x056ed3e2f9e22447, 0xb6409f5cfa457b28, 0xfb374270a266cc92, 0x48190ecea1c193fd, 0x0fb374270a266cc9, 0xbc9d3899098133a6, 0x80e781f45de992a1, 0x33c9cd4a5e4ecdce, 0x7463b7a3f5a932fa, 0xc74dfb1df60e6d95, 0x0c96c5795d7870f4, 0xbfb889c75edf2f9b, 0xf812f32ef538d0af, 0x4b3cbf90f69f8fc0, 0x774606fda2f72ec7, 0xc4684a43a15071a8, 0x83c230aa0ab78e9c, 0x30ec7c140910d1f3, 0x86ace348f355aadb, 0x3582aff6f0f2f5b4, 0x7228d51f5b150a80, 0xc10699a158b255ef, 0xfd7c20cc0cdaf4e8, 0x4e526c720f7dab87, 0x09f8169ba49a54b3, 0xbad65a25a73d0bdc, 0x710d64410c4b16bd, 0xc22328ff0fec49d2, 0x85895216a40bb6e6, 0x36a71ea8a7ace989, 0x0adda7c5f3c4488e, 0xb9f3eb7bf06317e1, 0xfe5991925b84e8d5, 0x4d77dd2c5823b7ba, 0x64b62bcaebc387a1, 0xd7986774e864d8ce, 0x90321d9d438327fa, 0x231c512340247895, 0x1f66e84e144cd992, 0xac48a4f017eb86fd, 0xebe2de19bc0c79c9, 0x58cc92a7bfab26a6, 0x9317acc314dd3bc7, 0x2039e07d177a64a8, 0x67939a94bc9d9b9c, 0xd4bdd62abf3ac4f3, 0xe8c76f47eb5265f4, 0x5be923f9e8f53a9b, 0x1c4359104312c5af, 0xaf6d15ae40b59ac0, 0x192d8af2baf0e1e8, 0xaa03c64cb957be87, 0xeda9bca512b041b3, 0x5e87f01b11171edc, 0x62fd4976457fbfdb, 0xd1d305c846d8e0b4, 0x96797f21ed3f1f80, 0x2557339fee9840ef, 0xee8c0dfb45ee5d8e, 0x5da24145464902e1, 0x1a083bacedaefdd5, 0xa9267712ee09a2ba, 0x955cce7fba6103bd, 0x267282c1b9c65cd2, 0x61d8f8281221a3e6, 0xd2f6b4961186fc89, 0x9f8169ba49a54b33, 0x2caf25044a02145c, 0x6b055fede1e5eb68, 0xd82b1353e242b407, 0xe451aa3eb62a1500, 0x577fe680b58d4a6f, 0x10d59c691e6ab55b, 0xa3fbd0d71dcdea34, 0x6820eeb3b6bbf755, 0xdb0ea20db51ca83a, 0x9ca4d8e41efb570e, 0x2f8a945a1d5c0861, 0x13f02d374934a966, 0xa0de61894a93f609, 0xe7741b60e174093d, 0x545a57dee2d35652, 0xe21ac88218962d7a, 0x5134843c1b317215, 0x169efed5b0d68d21, 0xa5b0b26bb371d24e, 0x99ca0b06e7197349, 0x2ae447b8e4be2c26, 0x6d4e3d514f59d312, 0xde6071ef4cfe8c7d, 0x15bb4f8be788911c, 0xa6950335e42fce73, 0xe13f79dc4fc83147, 0x521135624c6f6e28, 0x6e6b8c0f1807cf2f, 0xdd45c0b11ba09040, 0x9aefba58b0476f74, 0x29c1f6e6b3e0301b, 0xc96c5795d7870f42, 0x7a421b2bd420502d, 0x3de861c27fc7af19, 0x8ec62d7c7c60f076, 0xb2bc941128085171, 0x0192d8af2baf0e1e, 0x4638a2468048f12a, 0xf516eef883efae45, 0x3ecdd09c2899b324, 0x8de39c222b3eec4b, 0xca49e6cb80d9137f, 0x7967aa75837e4c10, 0x451d1318d716ed17, 0xf6335fa6d4b1b278, 0xb199254f7f564d4c, 0x02b769f17cf11223, 0xb4f7f6ad86b4690b, 0x07d9ba1385133664, 0x4073c0fa2ef4c950, 0xf35d8c442d53963f, 0xcf273529793b3738, 0x7c0979977a9c6857, 0x3ba3037ed17b9763, 0x888d4fc0d2dcc80c, 0x435671a479aad56d, 0xf0783d1a7a0d8a02, 0xb7d247f3d1ea7536, 0x04fc0b4dd24d2a59, 0x3886b22086258b5e, 0x8ba8fe9e8582d431, 0xcc0284772e652b05, 0x7f2cc8c92dc2746a, 0x325b15e575e1c3d0, 0x8175595b76469cbf, 0xc6df23b2dda1638b, 0x75f16f0cde063ce4, 0x498bd6618a6e9de3, 0xfaa59adf89c9c28c, 0xbd0fe036222e3db8, 0x0e21ac88218962d7, 0xc5fa92ec8aff7fb6, 0x76d4de52895820d9, 0x317ea4bb22bfdfed, 0x8250e80521188082, 0xbe2a516875702185, 0x0d041dd676d77eea, 0x4aae673fdd3081de, 0xf9802b81de97deb1, 0x4fc0b4dd24d2a599, 0xfceef8632775faf6, 0xbb44828a8c9205c2, 0x086ace348f355aad, 0x34107759db5dfbaa, 0x873e3be7d8faa4c5, 0xc094410e731d5bf1, 0x73ba0db070ba049e, 0xb86133d4dbcc19ff, 0x0b4f7f6ad86b4690, 0x4ce50583738cb9a4, 0xffcb493d702be6cb, 0xc3b1f050244347cc, 0x709fbcee27e418a3, 0x3735c6078c03e797, 0x841b8ab98fa4b8f8, 0xadda7c5f3c4488e3, 0x1ef430e13fe3d78c, 0x595e4a08940428b8, 0xea7006b697a377d7, 0xd60abfdbc3cbd6d0, 0x6524f365c06c89bf, 0x228e898c6b8b768b, 0x91a0c532682c29e4, 0x5a7bfb56c35a3485, 0xe955b7e8c0fd6bea, 0xaeffcd016b1a94de, 0x1dd181bf68bdcbb1, 0x21ab38d23cd56ab6, 0x9285746c3f7235d9, 0xd52f0e859495caed, 0x6601423b97329582, 0xd041dd676d77eeaa, 0x636f91d96ed0b1c5, 0x24c5eb30c5374ef1, 0x97eba78ec690119e, 0xab911ee392f8b099, 0x18bf525d915feff6, 0x5f1528b43ab810c2, 0xec3b640a391f4fad, 0x27e05a6e926952cc, 0x94ce16d091ce0da3, 0xd3646c393a29f297, 0x604a2087398eadf8, 0x5c3099ea6de60cff, 0xef1ed5546e415390, 0xa8b4afbdc5a6aca4, 0x1b9ae303c601f3cb, 0x56ed3e2f9e224471, 0xe5c372919d851b1e, 0xa26908783662e42a, 0x114744c635c5bb45, 0x2d3dfdab61ad1a42, 0x9e13b115620a452d, 0xd9b9cbfcc9edba19, 0x6a978742ca4ae576, 0xa14cb926613cf817, 0x1262f598629ba778, 0x55c88f71c97c584c, 0xe6e6c3cfcadb0723, 0xda9c7aa29eb3a624, 0x69b2361c9d14f94b, 0x2e184cf536f3067f, 0x9d36004b35545910, 0x2b769f17cf112238, 0x9858d3a9ccb67d57, 0xdff2a94067518263, 0x6cdce5fe64f6dd0c, 0x50a65c93309e7c0b, 0xe388102d33392364, 0xa4226ac498dedc50, 0x170c267a9b79833f, 0xdcd7181e300f9e5e, 0x6ff954a033a8c131, 0x28532e49984f3e05, 0x9b7d62f79be8616a, 0xa707db9acf80c06d, 0x14299724cc279f02, 0x5383edcd67c06036, 0xe0ada17364673f59, ], [ 0x0000000000000000, 0x54e979925cd0f10d, 0xa9d2f324b9a1e21a, 0xfd3b8ab6e5711317, 0xc17d4962dc4ddab1, 0x959430f0809d2bbc, 0x68afba4665ec38ab, 0x3c46c3d4393cc9a6, 0x10223dee1795abe7, 0x44cb447c4b455aea, 0xb9f0cecaae3449fd, 0xed19b758f2e4b8f0, 0xd15f748ccbd87156, 0x85b60d1e9708805b, 0x788d87a87279934c, 0x2c64fe3a2ea96241, 0x20447bdc2f2b57ce, 0x74ad024e73fba6c3, 0x899688f8968ab5d4, 0xdd7ff16aca5a44d9, 0xe13932bef3668d7f, 0xb5d04b2cafb67c72, 0x48ebc19a4ac76f65, 0x1c02b80816179e68, 0x3066463238befc29, 0x648f3fa0646e0d24, 0x99b4b516811f1e33, 0xcd5dcc84ddcfef3e, 0xf11b0f50e4f32698, 0xa5f276c2b823d795, 0x58c9fc745d52c482, 0x0c2085e60182358f, 0x4088f7b85e56af9c, 0x14618e2a02865e91, 0xe95a049ce7f74d86, 0xbdb37d0ebb27bc8b, 0x81f5beda821b752d, 0xd51cc748decb8420, 0x28274dfe3bba9737, 0x7cce346c676a663a, 0x50aaca5649c3047b, 0x0443b3c41513f576, 0xf9783972f062e661, 0xad9140e0acb2176c, 0x91d78334958edeca, 0xc53efaa6c95e2fc7, 0x380570102c2f3cd0, 0x6cec098270ffcddd, 0x60cc8c64717df852, 0x3425f5f62dad095f, 0xc91e7f40c8dc1a48, 0x9df706d2940ceb45, 0xa1b1c506ad3022e3, 0xf558bc94f1e0d3ee, 0x086336221491c0f9, 0x5c8a4fb0484131f4, 0x70eeb18a66e853b5, 0x2407c8183a38a2b8, 0xd93c42aedf49b1af, 0x8dd53b3c839940a2, 0xb193f8e8baa58904, 0xe57a817ae6757809, 0x18410bcc03046b1e, 0x4ca8725e5fd49a13, 0x8111ef70bcad5f38, 0xd5f896e2e07dae35, 0x28c31c54050cbd22, 0x7c2a65c659dc4c2f, 0x406ca61260e08589, 0x1485df803c307484, 0xe9be5536d9416793, 0xbd572ca48591969e, 0x9133d29eab38f4df, 0xc5daab0cf7e805d2, 0x38e121ba129916c5, 0x6c0858284e49e7c8, 0x504e9bfc77752e6e, 0x04a7e26e2ba5df63, 0xf99c68d8ced4cc74, 0xad75114a92043d79, 0xa15594ac938608f6, 0xf5bced3ecf56f9fb, 0x088767882a27eaec, 0x5c6e1e1a76f71be1, 0x6028ddce4fcbd247, 0x34c1a45c131b234a, 0xc9fa2eeaf66a305d, 0x9d135778aabac150, 0xb177a9428413a311, 0xe59ed0d0d8c3521c, 0x18a55a663db2410b, 0x4c4c23f46162b006, 0x700ae020585e79a0, 0x24e399b2048e88ad, 0xd9d81304e1ff9bba, 0x8d316a96bd2f6ab7, 0xc19918c8e2fbf0a4, 0x9570615abe2b01a9, 0x684bebec5b5a12be, 0x3ca2927e078ae3b3, 0x00e451aa3eb62a15, 0x540d28386266db18, 0xa936a28e8717c80f, 0xfddfdb1cdbc73902, 0xd1bb2526f56e5b43, 0x85525cb4a9beaa4e, 0x7869d6024ccfb959, 0x2c80af90101f4854, 0x10c66c44292381f2, 0x442f15d675f370ff, 0xb9149f60908263e8, 0xedfde6f2cc5292e5, 0xe1dd6314cdd0a76a, 0xb5341a8691005667, 0x480f903074714570, 0x1ce6e9a228a1b47d, 0x20a02a76119d7ddb, 0x744953e44d4d8cd6, 0x8972d952a83c9fc1, 0xdd9ba0c0f4ec6ecc, 0xf1ff5efada450c8d, 0xa51627688695fd80, 0x582dadde63e4ee97, 0x0cc4d44c3f341f9a, 0x308217980608d63c, 0x646b6e0a5ad82731, 0x9950e4bcbfa93426, 0xcdb99d2ee379c52b, 0x90fb71cad654a0f5, 0xc41208588a8451f8, 0x392982ee6ff542ef, 0x6dc0fb7c3325b3e2, 0x518638a80a197a44, 0x056f413a56c98b49, 0xf854cb8cb3b8985e, 0xacbdb21eef686953, 0x80d94c24c1c10b12, 0xd43035b69d11fa1f, 0x290bbf007860e908, 0x7de2c69224b01805, 0x41a405461d8cd1a3, 0x154d7cd4415c20ae, 0xe876f662a42d33b9, 0xbc9f8ff0f8fdc2b4, 0xb0bf0a16f97ff73b, 0xe4567384a5af0636, 0x196df93240de1521, 0x4d8480a01c0ee42c, 0x71c2437425322d8a, 0x252b3ae679e2dc87, 0xd810b0509c93cf90, 0x8cf9c9c2c0433e9d, 0xa09d37f8eeea5cdc, 0xf4744e6ab23aadd1, 0x094fc4dc574bbec6, 0x5da6bd4e0b9b4fcb, 0x61e07e9a32a7866d, 0x350907086e777760, 0xc8328dbe8b066477, 0x9cdbf42cd7d6957a, 0xd073867288020f69, 0x849affe0d4d2fe64, 0x79a1755631a3ed73, 0x2d480cc46d731c7e, 0x110ecf10544fd5d8, 0x45e7b682089f24d5, 0xb8dc3c34edee37c2, 0xec3545a6b13ec6cf, 0xc051bb9c9f97a48e, 0x94b8c20ec3475583, 0x698348b826364694, 0x3d6a312a7ae6b799, 0x012cf2fe43da7e3f, 0x55c58b6c1f0a8f32, 0xa8fe01dafa7b9c25, 0xfc177848a6ab6d28, 0xf037fdaea72958a7, 0xa4de843cfbf9a9aa, 0x59e50e8a1e88babd, 0x0d0c771842584bb0, 0x314ab4cc7b648216, 0x65a3cd5e27b4731b, 0x989847e8c2c5600c, 0xcc713e7a9e159101, 0xe015c040b0bcf340, 0xb4fcb9d2ec6c024d, 0x49c73364091d115a, 0x1d2e4af655cde057, 0x216889226cf129f1, 0x7581f0b03021d8fc, 0x88ba7a06d550cbeb, 0xdc53039489803ae6, 0x11ea9eba6af9ffcd, 0x4503e72836290ec0, 0xb8386d9ed3581dd7, 0xecd1140c8f88ecda, 0xd097d7d8b6b4257c, 0x847eae4aea64d471, 0x794524fc0f15c766, 0x2dac5d6e53c5366b, 0x01c8a3547d6c542a, 0x5521dac621bca527, 0xa81a5070c4cdb630, 0xfcf329e2981d473d, 0xc0b5ea36a1218e9b, 0x945c93a4fdf17f96, 0x6967191218806c81, 0x3d8e608044509d8c, 0x31aee56645d2a803, 0x65479cf41902590e, 0x987c1642fc734a19, 0xcc956fd0a0a3bb14, 0xf0d3ac04999f72b2, 0xa43ad596c54f83bf, 0x59015f20203e90a8, 0x0de826b27cee61a5, 0x218cd888524703e4, 0x7565a11a0e97f2e9, 0x885e2bacebe6e1fe, 0xdcb7523eb73610f3, 0xe0f191ea8e0ad955, 0xb418e878d2da2858, 0x492362ce37ab3b4f, 0x1dca1b5c6b7bca42, 0x5162690234af5051, 0x058b1090687fa15c, 0xf8b09a268d0eb24b, 0xac59e3b4d1de4346, 0x901f2060e8e28ae0, 0xc4f659f2b4327bed, 0x39cdd344514368fa, 0x6d24aad60d9399f7, 0x414054ec233afbb6, 0x15a92d7e7fea0abb, 0xe892a7c89a9b19ac, 0xbc7bde5ac64be8a1, 0x803d1d8eff772107, 0xd4d4641ca3a7d00a, 0x29efeeaa46d6c31d, 0x7d0697381a063210, 0x712612de1b84079f, 0x25cf6b4c4754f692, 0xd8f4e1faa225e585, 0x8c1d9868fef51488, 0xb05b5bbcc7c9dd2e, 0xe4b2222e9b192c23, 0x1989a8987e683f34, 0x4d60d10a22b8ce39, 0x61042f300c11ac78, 0x35ed56a250c15d75, 0xc8d6dc14b5b04e62, 0x9c3fa586e960bf6f, 0xa0796652d05c76c9, 0xf4901fc08c8c87c4, 0x09ab957669fd94d3, 0x5d42ece4352d65de, ], [ 0x0000000000000000, 0x3f0be14a916a6dcb, 0x7e17c29522d4db96, 0x411c23dfb3beb65d, 0xfc2f852a45a9b72c, 0xc3246460d4c3dae7, 0x823847bf677d6cba, 0xbd33a6f5f6170171, 0x6a87a57f245d70dd, 0x558c4435b5371d16, 0x149067ea0689ab4b, 0x2b9b86a097e3c680, 0x96a8205561f4c7f1, 0xa9a3c11ff09eaa3a, 0xe8bfe2c043201c67, 0xd7b4038ad24a71ac, 0xd50f4afe48bae1ba, 0xea04abb4d9d08c71, 0xab18886b6a6e3a2c, 0x94136921fb0457e7, 0x2920cfd40d135696, 0x162b2e9e9c793b5d, 0x57370d412fc78d00, 0x683cec0bbeade0cb, 0xbf88ef816ce79167, 0x80830ecbfd8dfcac, 0xc19f2d144e334af1, 0xfe94cc5edf59273a, 0x43a76aab294e264b, 0x7cac8be1b8244b80, 0x3db0a83e0b9afddd, 0x02bb49749af09016, 0x38c63ad73e7bddf1, 0x07cddb9daf11b03a, 0x46d1f8421caf0667, 0x79da19088dc56bac, 0xc4e9bffd7bd26add, 0xfbe25eb7eab80716, 0xbafe7d685906b14b, 0x85f59c22c86cdc80, 0x52419fa81a26ad2c, 0x6d4a7ee28b4cc0e7, 0x2c565d3d38f276ba, 0x135dbc77a9981b71, 0xae6e1a825f8f1a00, 0x9165fbc8cee577cb, 0xd079d8177d5bc196, 0xef72395dec31ac5d, 0xedc9702976c13c4b, 0xd2c29163e7ab5180, 0x93deb2bc5415e7dd, 0xacd553f6c57f8a16, 0x11e6f50333688b67, 0x2eed1449a202e6ac, 0x6ff1379611bc50f1, 0x50fad6dc80d63d3a, 0x874ed556529c4c96, 0xb845341cc3f6215d, 0xf95917c370489700, 0xc652f689e122facb, 0x7b61507c1735fbba, 0x446ab136865f9671, 0x057692e935e1202c, 0x3a7d73a3a48b4de7, 0x718c75ae7cf7bbe2, 0x4e8794e4ed9dd629, 0x0f9bb73b5e236074, 0x30905671cf490dbf, 0x8da3f084395e0cce, 0xb2a811cea8346105, 0xf3b432111b8ad758, 0xccbfd35b8ae0ba93, 0x1b0bd0d158aacb3f, 0x2400319bc9c0a6f4, 0x651c12447a7e10a9, 0x5a17f30eeb147d62, 0xe72455fb1d037c13, 0xd82fb4b18c6911d8, 0x9933976e3fd7a785, 0xa6387624aebdca4e, 0xa4833f50344d5a58, 0x9b88de1aa5273793, 0xda94fdc5169981ce, 0xe59f1c8f87f3ec05, 0x58acba7a71e4ed74, 0x67a75b30e08e80bf, 0x26bb78ef533036e2, 0x19b099a5c25a5b29, 0xce049a2f10102a85, 0xf10f7b65817a474e, 0xb01358ba32c4f113, 0x8f18b9f0a3ae9cd8, 0x322b1f0555b99da9, 0x0d20fe4fc4d3f062, 0x4c3cdd90776d463f, 0x73373cdae6072bf4, 0x494a4f79428c6613, 0x7641ae33d3e60bd8, 0x375d8dec6058bd85, 0x08566ca6f132d04e, 0xb565ca530725d13f, 0x8a6e2b19964fbcf4, 0xcb7208c625f10aa9, 0xf479e98cb49b6762, 0x23cdea0666d116ce, 0x1cc60b4cf7bb7b05, 0x5dda28934405cd58, 0x62d1c9d9d56fa093, 0xdfe26f2c2378a1e2, 0xe0e98e66b212cc29, 0xa1f5adb901ac7a74, 0x9efe4cf390c617bf, 0x9c4505870a3687a9, 0xa34ee4cd9b5cea62, 0xe252c71228e25c3f, 0xdd592658b98831f4, 0x606a80ad4f9f3085, 0x5f6161e7def55d4e, 0x1e7d42386d4beb13, 0x2176a372fc2186d8, 0xf6c2a0f82e6bf774, 0xc9c941b2bf019abf, 0x88d5626d0cbf2ce2, 0xb7de83279dd54129, 0x0aed25d26bc24058, 0x35e6c498faa82d93, 0x74fae74749169bce, 0x4bf1060dd87cf605, 0xe318eb5cf9ef77c4, 0xdc130a1668851a0f, 0x9d0f29c9db3bac52, 0xa204c8834a51c199, 0x1f376e76bc46c0e8, 0x203c8f3c2d2cad23, 0x6120ace39e921b7e, 0x5e2b4da90ff876b5, 0x899f4e23ddb20719, 0xb694af694cd86ad2, 0xf7888cb6ff66dc8f, 0xc8836dfc6e0cb144, 0x75b0cb09981bb035, 0x4abb2a430971ddfe, 0x0ba7099cbacf6ba3, 0x34ace8d62ba50668, 0x3617a1a2b155967e, 0x091c40e8203ffbb5, 0x4800633793814de8, 0x770b827d02eb2023, 0xca382488f4fc2152, 0xf533c5c265964c99, 0xb42fe61dd628fac4, 0x8b2407574742970f, 0x5c9004dd9508e6a3, 0x639be59704628b68, 0x2287c648b7dc3d35, 0x1d8c270226b650fe, 0xa0bf81f7d0a1518f, 0x9fb460bd41cb3c44, 0xdea84362f2758a19, 0xe1a3a228631fe7d2, 0xdbded18bc794aa35, 0xe4d530c156fec7fe, 0xa5c9131ee54071a3, 0x9ac2f254742a1c68, 0x27f154a1823d1d19, 0x18fab5eb135770d2, 0x59e69634a0e9c68f, 0x66ed777e3183ab44, 0xb15974f4e3c9dae8, 0x8e5295be72a3b723, 0xcf4eb661c11d017e, 0xf045572b50776cb5, 0x4d76f1dea6606dc4, 0x727d1094370a000f, 0x3361334b84b4b652, 0x0c6ad20115dedb99, 0x0ed19b758f2e4b8f, 0x31da7a3f1e442644, 0x70c659e0adfa9019, 0x4fcdb8aa3c90fdd2, 0xf2fe1e5fca87fca3, 0xcdf5ff155bed9168, 0x8ce9dccae8532735, 0xb3e23d8079394afe, 0x64563e0aab733b52, 0x5b5ddf403a195699, 0x1a41fc9f89a7e0c4, 0x254a1dd518cd8d0f, 0x9879bb20eeda8c7e, 0xa7725a6a7fb0e1b5, 0xe66e79b5cc0e57e8, 0xd96598ff5d643a23, 0x92949ef28518cc26, 0xad9f7fb81472a1ed, 0xec835c67a7cc17b0, 0xd388bd2d36a67a7b, 0x6ebb1bd8c0b17b0a, 0x51b0fa9251db16c1, 0x10acd94de265a09c, 0x2fa73807730fcd57, 0xf8133b8da145bcfb, 0xc718dac7302fd130, 0x8604f9188391676d, 0xb90f185212fb0aa6, 0x043cbea7e4ec0bd7, 0x3b375fed7586661c, 0x7a2b7c32c638d041, 0x45209d785752bd8a, 0x479bd40ccda22d9c, 0x789035465cc84057, 0x398c1699ef76f60a, 0x0687f7d37e1c9bc1, 0xbbb45126880b9ab0, 0x84bfb06c1961f77b, 0xc5a393b3aadf4126, 0xfaa872f93bb52ced, 0x2d1c7173e9ff5d41, 0x121790397895308a, 0x530bb3e6cb2b86d7, 0x6c0052ac5a41eb1c, 0xd133f459ac56ea6d, 0xee3815133d3c87a6, 0xaf2436cc8e8231fb, 0x902fd7861fe85c30, 0xaa52a425bb6311d7, 0x9559456f2a097c1c, 0xd44566b099b7ca41, 0xeb4e87fa08dda78a, 0x567d210ffecaa6fb, 0x6976c0456fa0cb30, 0x286ae39adc1e7d6d, 0x176102d04d7410a6, 0xc0d5015a9f3e610a, 0xffdee0100e540cc1, 0xbec2c3cfbdeaba9c, 0x81c922852c80d757, 0x3cfa8470da97d626, 0x03f1653a4bfdbbed, 0x42ed46e5f8430db0, 0x7de6a7af6929607b, 0x7f5deedbf3d9f06d, 0x40560f9162b39da6, 0x014a2c4ed10d2bfb, 0x3e41cd0440674630, 0x83726bf1b6704741, 0xbc798abb271a2a8a, 0xfd65a96494a49cd7, 0xc26e482e05cef11c, 0x15da4ba4d78480b0, 0x2ad1aaee46eeed7b, 0x6bcd8931f5505b26, 0x54c6687b643a36ed, 0xe9f5ce8e922d379c, 0xd6fe2fc403475a57, 0x97e20c1bb0f9ec0a, 0xa8e9ed51219381c1, ], [ 0x0000000000000000, 0x1dee8a5e222ca1dc, 0x3bdd14bc445943b8, 0x26339ee26675e264, 0x77ba297888b28770, 0x6a54a326aa9e26ac, 0x4c673dc4ccebc4c8, 0x5189b79aeec76514, 0xef7452f111650ee0, 0xf29ad8af3349af3c, 0xd4a9464d553c4d58, 0xc947cc137710ec84, 0x98ce7b8999d78990, 0x8520f1d7bbfb284c, 0xa3136f35dd8eca28, 0xbefde56bffa26bf4, 0x4c300ac98dc40345, 0x51de8097afe8a299, 0x77ed1e75c99d40fd, 0x6a03942bebb1e121, 0x3b8a23b105768435, 0x2664a9ef275a25e9, 0x0057370d412fc78d, 0x1db9bd5363036651, 0xa34458389ca10da5, 0xbeaad266be8dac79, 0x98994c84d8f84e1d, 0x8577c6dafad4efc1, 0xd4fe714014138ad5, 0xc910fb1e363f2b09, 0xef2365fc504ac96d, 0xf2cdefa2726668b1, 0x986015931b88068a, 0x858e9fcd39a4a756, 0xa3bd012f5fd14532, 0xbe538b717dfde4ee, 0xefda3ceb933a81fa, 0xf234b6b5b1162026, 0xd4072857d763c242, 0xc9e9a209f54f639e, 0x771447620aed086a, 0x6afacd3c28c1a9b6, 0x4cc953de4eb44bd2, 0x5127d9806c98ea0e, 0x00ae6e1a825f8f1a, 0x1d40e444a0732ec6, 0x3b737aa6c606cca2, 0x269df0f8e42a6d7e, 0xd4501f5a964c05cf, 0xc9be9504b460a413, 0xef8d0be6d2154677, 0xf26381b8f039e7ab, 0xa3ea36221efe82bf, 0xbe04bc7c3cd22363, 0x9837229e5aa7c107, 0x85d9a8c0788b60db, 0x3b244dab87290b2f, 0x26cac7f5a505aaf3, 0x00f95917c3704897, 0x1d17d349e15ce94b, 0x4c9e64d30f9b8c5f, 0x5170ee8d2db72d83, 0x7743706f4bc2cfe7, 0x6aadfa3169ee6e3b, 0xa218840d981e1391, 0xbff60e53ba32b24d, 0x99c590b1dc475029, 0x842b1aeffe6bf1f5, 0xd5a2ad7510ac94e1, 0xc84c272b3280353d, 0xee7fb9c954f5d759, 0xf391339776d97685, 0x4d6cd6fc897b1d71, 0x50825ca2ab57bcad, 0x76b1c240cd225ec9, 0x6b5f481eef0eff15, 0x3ad6ff8401c99a01, 0x273875da23e53bdd, 0x010beb384590d9b9, 0x1ce5616667bc7865, 0xee288ec415da10d4, 0xf3c6049a37f6b108, 0xd5f59a785183536c, 0xc81b102673aff2b0, 0x9992a7bc9d6897a4, 0x847c2de2bf443678, 0xa24fb300d931d41c, 0xbfa1395efb1d75c0, 0x015cdc3504bf1e34, 0x1cb2566b2693bfe8, 0x3a81c88940e65d8c, 0x276f42d762cafc50, 0x76e6f54d8c0d9944, 0x6b087f13ae213898, 0x4d3be1f1c854dafc, 0x50d56bafea787b20, 0x3a78919e8396151b, 0x27961bc0a1bab4c7, 0x01a58522c7cf56a3, 0x1c4b0f7ce5e3f77f, 0x4dc2b8e60b24926b, 0x502c32b8290833b7, 0x761fac5a4f7dd1d3, 0x6bf126046d51700f, 0xd50cc36f92f31bfb, 0xc8e24931b0dfba27, 0xeed1d7d3d6aa5843, 0xf33f5d8df486f99f, 0xa2b6ea171a419c8b, 0xbf586049386d3d57, 0x996bfeab5e18df33, 0x848574f57c347eef, 0x76489b570e52165e, 0x6ba611092c7eb782, 0x4d958feb4a0b55e6, 0x507b05b56827f43a, 0x01f2b22f86e0912e, 0x1c1c3871a4cc30f2, 0x3a2fa693c2b9d296, 0x27c12ccde095734a, 0x993cc9a61f3718be, 0x84d243f83d1bb962, 0xa2e1dd1a5b6e5b06, 0xbf0f57447942fada, 0xee86e0de97859fce, 0xf3686a80b5a93e12, 0xd55bf462d3dcdc76, 0xc8b57e3cf1f07daa, 0xd6e9a7309f3239a7, 0xcb072d6ebd1e987b, 0xed34b38cdb6b7a1f, 0xf0da39d2f947dbc3, 0xa1538e481780bed7, 0xbcbd041635ac1f0b, 0x9a8e9af453d9fd6f, 0x876010aa71f55cb3, 0x399df5c18e573747, 0x24737f9fac7b969b, 0x0240e17dca0e74ff, 0x1fae6b23e822d523, 0x4e27dcb906e5b037, 0x53c956e724c911eb, 0x75fac80542bcf38f, 0x6814425b60905253, 0x9ad9adf912f63ae2, 0x873727a730da9b3e, 0xa104b94556af795a, 0xbcea331b7483d886, 0xed6384819a44bd92, 0xf08d0edfb8681c4e, 0xd6be903dde1dfe2a, 0xcb501a63fc315ff6, 0x75adff0803933402, 0x6843755621bf95de, 0x4e70ebb447ca77ba, 0x539e61ea65e6d666, 0x0217d6708b21b372, 0x1ff95c2ea90d12ae, 0x39cac2cccf78f0ca, 0x24244892ed545116, 0x4e89b2a384ba3f2d, 0x536738fda6969ef1, 0x7554a61fc0e37c95, 0x68ba2c41e2cfdd49, 0x39339bdb0c08b85d, 0x24dd11852e241981, 0x02ee8f674851fbe5, 0x1f0005396a7d5a39, 0xa1fde05295df31cd, 0xbc136a0cb7f39011, 0x9a20f4eed1867275, 0x87ce7eb0f3aad3a9, 0xd647c92a1d6db6bd, 0xcba943743f411761, 0xed9add965934f505, 0xf07457c87b1854d9, 0x02b9b86a097e3c68, 0x1f5732342b529db4, 0x3964acd64d277fd0, 0x248a26886f0bde0c, 0x7503911281ccbb18, 0x68ed1b4ca3e01ac4, 0x4ede85aec595f8a0, 0x53300ff0e7b9597c, 0xedcdea9b181b3288, 0xf02360c53a379354, 0xd610fe275c427130, 0xcbfe74797e6ed0ec, 0x9a77c3e390a9b5f8, 0x879949bdb2851424, 0xa1aad75fd4f0f640, 0xbc445d01f6dc579c, 0x74f1233d072c2a36, 0x691fa96325008bea, 0x4f2c37814375698e, 0x52c2bddf6159c852, 0x034b0a458f9ead46, 0x1ea5801badb20c9a, 0x38961ef9cbc7eefe, 0x257894a7e9eb4f22, 0x9b8571cc164924d6, 0x866bfb923465850a, 0xa05865705210676e, 0xbdb6ef2e703cc6b2, 0xec3f58b49efba3a6, 0xf1d1d2eabcd7027a, 0xd7e24c08daa2e01e, 0xca0cc656f88e41c2, 0x38c129f48ae82973, 0x252fa3aaa8c488af, 0x031c3d48ceb16acb, 0x1ef2b716ec9dcb17, 0x4f7b008c025aae03, 0x52958ad220760fdf, 0x74a614304603edbb, 0x69489e6e642f4c67, 0xd7b57b059b8d2793, 0xca5bf15bb9a1864f, 0xec686fb9dfd4642b, 0xf186e5e7fdf8c5f7, 0xa00f527d133fa0e3, 0xbde1d8233113013f, 0x9bd246c15766e35b, 0x863ccc9f754a4287, 0xec9136ae1ca42cbc, 0xf17fbcf03e888d60, 0xd74c221258fd6f04, 0xcaa2a84c7ad1ced8, 0x9b2b1fd69416abcc, 0x86c59588b63a0a10, 0xa0f60b6ad04fe874, 0xbd188134f26349a8, 0x03e5645f0dc1225c, 0x1e0bee012fed8380, 0x383870e3499861e4, 0x25d6fabd6bb4c038, 0x745f4d278573a52c, 0x69b1c779a75f04f0, 0x4f82599bc12ae694, 0x526cd3c5e3064748, 0xa0a13c6791602ff9, 0xbd4fb639b34c8e25, 0x9b7c28dbd5396c41, 0x8692a285f715cd9d, 0xd71b151f19d2a889, 0xcaf59f413bfe0955, 0xecc601a35d8beb31, 0xf1288bfd7fa74aed, 0x4fd56e9680052119, 0x523be4c8a22980c5, 0x74087a2ac45c62a1, 0x69e6f074e670c37d, 0x386f47ee08b7a669, 0x2581cdb02a9b07b5, 0x03b253524ceee5d1, 0x1e5cd90c6ec2440d, ], [ 0x0000000000000000, 0x5c2d776033c4205e, 0xb85aeec0678840bc, 0xe47799a0544c60e2, 0xe26d72ab601e9ffd, 0xbe4005cb53dabfa3, 0x5a379c6b0796df41, 0x061aeb0b3452ff1f, 0x56024a7d6f33217f, 0x0a2f3d1d5cf70121, 0xee58a4bd08bb61c3, 0xb275d3dd3b7f419d, 0xb46f38d60f2dbe82, 0xe8424fb63ce99edc, 0x0c35d61668a5fe3e, 0x5018a1765b61de60, 0xac0494fade6642fe, 0xf029e39aeda262a0, 0x145e7a3ab9ee0242, 0x48730d5a8a2a221c, 0x4e69e651be78dd03, 0x124491318dbcfd5d, 0xf6330891d9f09dbf, 0xaa1e7ff1ea34bde1, 0xfa06de87b1556381, 0xa62ba9e7829143df, 0x425c3047d6dd233d, 0x1e714727e5190363, 0x186bac2cd14bfc7c, 0x4446db4ce28fdc22, 0xa03142ecb6c3bcc0, 0xfc1c358c85079c9e, 0xcad186de13c29b79, 0x96fcf1be2006bb27, 0x728b681e744adbc5, 0x2ea61f7e478efb9b, 0x28bcf47573dc0484, 0x74918315401824da, 0x90e61ab514544438, 0xcccb6dd527906466, 0x9cd3cca37cf1ba06, 0xc0febbc34f359a58, 0x248922631b79faba, 0x78a4550328bddae4, 0x7ebebe081cef25fb, 0x2293c9682f2b05a5, 0xc6e450c87b676547, 0x9ac927a848a34519, 0x66d51224cda4d987, 0x3af86544fe60f9d9, 0xde8ffce4aa2c993b, 0x82a28b8499e8b965, 0x84b8608fadba467a, 0xd89517ef9e7e6624, 0x3ce28e4fca3206c6, 0x60cff92ff9f62698, 0x30d75859a297f8f8, 0x6cfa2f399153d8a6, 0x888db699c51fb844, 0xd4a0c1f9f6db981a, 0xd2ba2af2c2896705, 0x8e975d92f14d475b, 0x6ae0c432a50127b9, 0x36cdb35296c507e7, 0x077ba297888b2877, 0x5b56d5f7bb4f0829, 0xbf214c57ef0368cb, 0xe30c3b37dcc74895, 0xe516d03ce895b78a, 0xb93ba75cdb5197d4, 0x5d4c3efc8f1df736, 0x0161499cbcd9d768, 0x5179e8eae7b80908, 0x0d549f8ad47c2956, 0xe923062a803049b4, 0xb50e714ab3f469ea, 0xb3149a4187a696f5, 0xef39ed21b462b6ab, 0x0b4e7481e02ed649, 0x576303e1d3eaf617, 0xab7f366d56ed6a89, 0xf752410d65294ad7, 0x1325d8ad31652a35, 0x4f08afcd02a10a6b, 0x491244c636f3f574, 0x153f33a60537d52a, 0xf148aa06517bb5c8, 0xad65dd6662bf9596, 0xfd7d7c1039de4bf6, 0xa1500b700a1a6ba8, 0x452792d05e560b4a, 0x190ae5b06d922b14, 0x1f100ebb59c0d40b, 0x433d79db6a04f455, 0xa74ae07b3e4894b7, 0xfb67971b0d8cb4e9, 0xcdaa24499b49b30e, 0x91875329a88d9350, 0x75f0ca89fcc1f3b2, 0x29ddbde9cf05d3ec, 0x2fc756e2fb572cf3, 0x73ea2182c8930cad, 0x979db8229cdf6c4f, 0xcbb0cf42af1b4c11, 0x9ba86e34f47a9271, 0xc7851954c7beb22f, 0x23f280f493f2d2cd, 0x7fdff794a036f293, 0x79c51c9f94640d8c, 0x25e86bffa7a02dd2, 0xc19ff25ff3ec4d30, 0x9db2853fc0286d6e, 0x61aeb0b3452ff1f0, 0x3d83c7d376ebd1ae, 0xd9f45e7322a7b14c, 0x85d9291311639112, 0x83c3c21825316e0d, 0xdfeeb57816f54e53, 0x3b992cd842b92eb1, 0x67b45bb8717d0eef, 0x37acface2a1cd08f, 0x6b818dae19d8f0d1, 0x8ff6140e4d949033, 0xd3db636e7e50b06d, 0xd5c188654a024f72, 0x89ecff0579c66f2c, 0x6d9b66a52d8a0fce, 0x31b611c51e4e2f90, 0x0ef7452f111650ee, 0x52da324f22d270b0, 0xb6adabef769e1052, 0xea80dc8f455a300c, 0xec9a37847108cf13, 0xb0b740e442ccef4d, 0x54c0d94416808faf, 0x08edae242544aff1, 0x58f50f527e257191, 0x04d878324de151cf, 0xe0afe19219ad312d, 0xbc8296f22a691173, 0xba987df91e3bee6c, 0xe6b50a992dffce32, 0x02c2933979b3aed0, 0x5eefe4594a778e8e, 0xa2f3d1d5cf701210, 0xfedea6b5fcb4324e, 0x1aa93f15a8f852ac, 0x468448759b3c72f2, 0x409ea37eaf6e8ded, 0x1cb3d41e9caaadb3, 0xf8c44dbec8e6cd51, 0xa4e93adefb22ed0f, 0xf4f19ba8a043336f, 0xa8dcecc893871331, 0x4cab7568c7cb73d3, 0x10860208f40f538d, 0x169ce903c05dac92, 0x4ab19e63f3998ccc, 0xaec607c3a7d5ec2e, 0xf2eb70a39411cc70, 0xc426c3f102d4cb97, 0x980bb4913110ebc9, 0x7c7c2d31655c8b2b, 0x20515a515698ab75, 0x264bb15a62ca546a, 0x7a66c63a510e7434, 0x9e115f9a054214d6, 0xc23c28fa36863488, 0x9224898c6de7eae8, 0xce09feec5e23cab6, 0x2a7e674c0a6faa54, 0x7653102c39ab8a0a, 0x7049fb270df97515, 0x2c648c473e3d554b, 0xc81315e76a7135a9, 0x943e628759b515f7, 0x6822570bdcb28969, 0x340f206bef76a937, 0xd078b9cbbb3ac9d5, 0x8c55ceab88fee98b, 0x8a4f25a0bcac1694, 0xd66252c08f6836ca, 0x3215cb60db245628, 0x6e38bc00e8e07676, 0x3e201d76b381a816, 0x620d6a1680458848, 0x867af3b6d409e8aa, 0xda5784d6e7cdc8f4, 0xdc4d6fddd39f37eb, 0x806018bde05b17b5, 0x6417811db4177757, 0x383af67d87d35709, 0x098ce7b8999d7899, 0x55a190d8aa5958c7, 0xb1d60978fe153825, 0xedfb7e18cdd1187b, 0xebe19513f983e764, 0xb7cce273ca47c73a, 0x53bb7bd39e0ba7d8, 0x0f960cb3adcf8786, 0x5f8eadc5f6ae59e6, 0x03a3daa5c56a79b8, 0xe7d443059126195a, 0xbbf93465a2e23904, 0xbde3df6e96b0c61b, 0xe1cea80ea574e645, 0x05b931aef13886a7, 0x599446cec2fca6f9, 0xa588734247fb3a67, 0xf9a50422743f1a39, 0x1dd29d8220737adb, 0x41ffeae213b75a85, 0x47e501e927e5a59a, 0x1bc87689142185c4, 0xffbfef29406de526, 0xa392984973a9c578, 0xf38a393f28c81b18, 0xafa74e5f1b0c3b46, 0x4bd0d7ff4f405ba4, 0x17fda09f7c847bfa, 0x11e74b9448d684e5, 0x4dca3cf47b12a4bb, 0xa9bda5542f5ec459, 0xf590d2341c9ae407, 0xc35d61668a5fe3e0, 0x9f701606b99bc3be, 0x7b078fa6edd7a35c, 0x272af8c6de138302, 0x213013cdea417c1d, 0x7d1d64add9855c43, 0x996afd0d8dc93ca1, 0xc5478a6dbe0d1cff, 0x955f2b1be56cc29f, 0xc9725c7bd6a8e2c1, 0x2d05c5db82e48223, 0x7128b2bbb120a27d, 0x773259b085725d62, 0x2b1f2ed0b6b67d3c, 0xcf68b770e2fa1dde, 0x9345c010d13e3d80, 0x6f59f59c5439a11e, 0x337482fc67fd8140, 0xd7031b5c33b1e1a2, 0x8b2e6c3c0075c1fc, 0x8d34873734273ee3, 0xd119f05707e31ebd, 0x356e69f753af7e5f, 0x69431e97606b5e01, 0x395bbfe13b0a8061, 0x6576c88108cea03f, 0x810151215c82c0dd, 0xdd2c26416f46e083, 0xdb36cd4a5b141f9c, 0x871bba2a68d03fc2, 0x636c238a3c9c5f20, 0x3f4154ea0f587f7e, ], [ 0x0000000000000000, 0x6184d55f721267c6, 0xc309aabee424cf8c, 0xa28d7fe19636a84a, 0x14cbfa566747819d, 0x754f2f091555e65b, 0xd7c250e883634e11, 0xb64685b7f17129d7, 0x2997f4acce8f033a, 0x481321f3bc9d64fc, 0xea9e5e122aabccb6, 0x8b1a8b4d58b9ab70, 0x3d5c0efaa9c882a7, 0x5cd8dba5dbdae561, 0xfe55a4444dec4d2b, 0x9fd1711b3ffe2aed, 0x532fe9599d1e0674, 0x32ab3c06ef0c61b2, 0x902643e7793ac9f8, 0xf1a296b80b28ae3e, 0x47e4130ffa5987e9, 0x2660c650884be02f, 0x84edb9b11e7d4865, 0xe5696cee6c6f2fa3, 0x7ab81df55391054e, 0x1b3cc8aa21836288, 0xb9b1b74bb7b5cac2, 0xd8356214c5a7ad04, 0x6e73e7a334d684d3, 0x0ff732fc46c4e315, 0xad7a4d1dd0f24b5f, 0xccfe9842a2e02c99, 0xa65fd2b33a3c0ce8, 0xc7db07ec482e6b2e, 0x6556780dde18c364, 0x04d2ad52ac0aa4a2, 0xb29428e55d7b8d75, 0xd310fdba2f69eab3, 0x719d825bb95f42f9, 0x10195704cb4d253f, 0x8fc8261ff4b30fd2, 0xee4cf34086a16814, 0x4cc18ca11097c05e, 0x2d4559fe6285a798, 0x9b03dc4993f48e4f, 0xfa870916e1e6e989, 0x580a76f777d041c3, 0x398ea3a805c22605, 0xf5703beaa7220a9c, 0x94f4eeb5d5306d5a, 0x367991544306c510, 0x57fd440b3114a2d6, 0xe1bbc1bcc0658b01, 0x803f14e3b277ecc7, 0x22b26b022441448d, 0x4336be5d5653234b, 0xdce7cf4669ad09a6, 0xbd631a191bbf6e60, 0x1fee65f88d89c62a, 0x7e6ab0a7ff9ba1ec, 0xc82c35100eea883b, 0xa9a8e04f7cf8effd, 0x0b259faeeace47b7, 0x6aa14af198dc2071, 0xde670a4ddb760755, 0xbfe3df12a9646093, 0x1d6ea0f33f52c8d9, 0x7cea75ac4d40af1f, 0xcaacf01bbc3186c8, 0xab282544ce23e10e, 0x09a55aa558154944, 0x68218ffa2a072e82, 0xf7f0fee115f9046f, 0x96742bbe67eb63a9, 0x34f9545ff1ddcbe3, 0x557d810083cfac25, 0xe33b04b772be85f2, 0x82bfd1e800ace234, 0x2032ae09969a4a7e, 0x41b67b56e4882db8, 0x8d48e31446680121, 0xeccc364b347a66e7, 0x4e4149aaa24ccead, 0x2fc59cf5d05ea96b, 0x99831942212f80bc, 0xf807cc1d533de77a, 0x5a8ab3fcc50b4f30, 0x3b0e66a3b71928f6, 0xa4df17b888e7021b, 0xc55bc2e7faf565dd, 0x67d6bd066cc3cd97, 0x065268591ed1aa51, 0xb014edeeefa08386, 0xd19038b19db2e440, 0x731d47500b844c0a, 0x1299920f79962bcc, 0x7838d8fee14a0bbd, 0x19bc0da193586c7b, 0xbb317240056ec431, 0xdab5a71f777ca3f7, 0x6cf322a8860d8a20, 0x0d77f7f7f41fede6, 0xaffa8816622945ac, 0xce7e5d49103b226a, 0x51af2c522fc50887, 0x302bf90d5dd76f41, 0x92a686eccbe1c70b, 0xf32253b3b9f3a0cd, 0x4564d6044882891a, 0x24e0035b3a90eedc, 0x866d7cbaaca64696, 0xe7e9a9e5deb42150, 0x2b1731a77c540dc9, 0x4a93e4f80e466a0f, 0xe81e9b199870c245, 0x899a4e46ea62a583, 0x3fdccbf11b138c54, 0x5e581eae6901eb92, 0xfcd5614fff3743d8, 0x9d51b4108d25241e, 0x0280c50bb2db0ef3, 0x63041054c0c96935, 0xc1896fb556ffc17f, 0xa00dbaea24eda6b9, 0x164b3f5dd59c8f6e, 0x77cfea02a78ee8a8, 0xd54295e331b840e2, 0xb4c640bc43aa2724, 0x2e16bbb019e2102f, 0x4f926eef6bf077e9, 0xed1f110efdc6dfa3, 0x8c9bc4518fd4b865, 0x3add41e67ea591b2, 0x5b5994b90cb7f674, 0xf9d4eb589a815e3e, 0x98503e07e89339f8, 0x07814f1cd76d1315, 0x66059a43a57f74d3, 0xc488e5a23349dc99, 0xa50c30fd415bbb5f, 0x134ab54ab02a9288, 0x72ce6015c238f54e, 0xd0431ff4540e5d04, 0xb1c7caab261c3ac2, 0x7d3952e984fc165b, 0x1cbd87b6f6ee719d, 0xbe30f85760d8d9d7, 0xdfb42d0812cabe11, 0x69f2a8bfe3bb97c6, 0x08767de091a9f000, 0xaafb0201079f584a, 0xcb7fd75e758d3f8c, 0x54aea6454a731561, 0x352a731a386172a7, 0x97a70cfbae57daed, 0xf623d9a4dc45bd2b, 0x40655c132d3494fc, 0x21e1894c5f26f33a, 0x836cf6adc9105b70, 0xe2e823f2bb023cb6, 0x8849690323de1cc7, 0xe9cdbc5c51cc7b01, 0x4b40c3bdc7fad34b, 0x2ac416e2b5e8b48d, 0x9c82935544999d5a, 0xfd06460a368bfa9c, 0x5f8b39eba0bd52d6, 0x3e0fecb4d2af3510, 0xa1de9dafed511ffd, 0xc05a48f09f43783b, 0x62d737110975d071, 0x0353e24e7b67b7b7, 0xb51567f98a169e60, 0xd491b2a6f804f9a6, 0x761ccd476e3251ec, 0x179818181c20362a, 0xdb66805abec01ab3, 0xbae25505ccd27d75, 0x186f2ae45ae4d53f, 0x79ebffbb28f6b2f9, 0xcfad7a0cd9879b2e, 0xae29af53ab95fce8, 0x0ca4d0b23da354a2, 0x6d2005ed4fb13364, 0xf2f174f6704f1989, 0x9375a1a9025d7e4f, 0x31f8de48946bd605, 0x507c0b17e679b1c3, 0xe63a8ea017089814, 0x87be5bff651affd2, 0x2533241ef32c5798, 0x44b7f141813e305e, 0xf071b1fdc294177a, 0x91f564a2b08670bc, 0x33781b4326b0d8f6, 0x52fcce1c54a2bf30, 0xe4ba4baba5d396e7, 0x853e9ef4d7c1f121, 0x27b3e11541f7596b, 0x4637344a33e53ead, 0xd9e645510c1b1440, 0xb862900e7e097386, 0x1aefefefe83fdbcc, 0x7b6b3ab09a2dbc0a, 0xcd2dbf076b5c95dd, 0xaca96a58194ef21b, 0x0e2415b98f785a51, 0x6fa0c0e6fd6a3d97, 0xa35e58a45f8a110e, 0xc2da8dfb2d9876c8, 0x6057f21abbaede82, 0x01d32745c9bcb944, 0xb795a2f238cd9093, 0xd61177ad4adff755, 0x749c084cdce95f1f, 0x1518dd13aefb38d9, 0x8ac9ac0891051234, 0xeb4d7957e31775f2, 0x49c006b67521ddb8, 0x2844d3e90733ba7e, 0x9e02565ef64293a9, 0xff8683018450f46f, 0x5d0bfce012665c25, 0x3c8f29bf60743be3, 0x562e634ef8a81b92, 0x37aab6118aba7c54, 0x9527c9f01c8cd41e, 0xf4a31caf6e9eb3d8, 0x42e599189fef9a0f, 0x23614c47edfdfdc9, 0x81ec33a67bcb5583, 0xe068e6f909d93245, 0x7fb997e2362718a8, 0x1e3d42bd44357f6e, 0xbcb03d5cd203d724, 0xdd34e803a011b0e2, 0x6b726db451609935, 0x0af6b8eb2372fef3, 0xa87bc70ab54456b9, 0xc9ff1255c756317f, 0x05018a1765b61de6, 0x64855f4817a47a20, 0xc60820a98192d26a, 0xa78cf5f6f380b5ac, 0x11ca704102f19c7b, 0x704ea51e70e3fbbd, 0xd2c3daffe6d553f7, 0xb3470fa094c73431, 0x2c967ebbab391edc, 0x4d12abe4d92b791a, 0xef9fd4054f1dd150, 0x8e1b015a3d0fb696, 0x385d84edcc7e9f41, 0x59d951b2be6cf887, 0xfb542e53285a50cd, 0x9ad0fb0c5a48370b, ], [ 0x0000000000000000, 0x22ef0d5934f964ec, 0x45de1ab269f2c9d8, 0x673117eb5d0bad34, 0x8bbc3564d3e593b0, 0xa953383de71cf75c, 0xce622fd6ba175a68, 0xec8d228f8eee3e84, 0x85a0c5e208c539e5, 0xa74fc8bb3c3c5d09, 0xc07edf506137f03d, 0xe291d20955ce94d1, 0x0e1cf086db20aa55, 0x2cf3fddfefd9ceb9, 0x4bc2ea34b2d2638d, 0x692de76d862b0761, 0x999924efbe846d4f, 0xbb7629b68a7d09a3, 0xdc473e5dd776a497, 0xfea83304e38fc07b, 0x1225118b6d61feff, 0x30ca1cd259989a13, 0x57fb0b3904933727, 0x75140660306a53cb, 0x1c39e10db64154aa, 0x3ed6ec5482b83046, 0x59e7fbbfdfb39d72, 0x7b08f6e6eb4af99e, 0x9785d46965a4c71a, 0xb56ad930515da3f6, 0xd25bcedb0c560ec2, 0xf0b4c38238af6a2e, 0xa1eae6f4d206c41b, 0x8305ebade6ffa0f7, 0xe434fc46bbf40dc3, 0xc6dbf11f8f0d692f, 0x2a56d39001e357ab, 0x08b9dec9351a3347, 0x6f88c92268119e73, 0x4d67c47b5ce8fa9f, 0x244a2316dac3fdfe, 0x06a52e4fee3a9912, 0x619439a4b3313426, 0x437b34fd87c850ca, 0xaff6167209266e4e, 0x8d191b2b3ddf0aa2, 0xea280cc060d4a796, 0xc8c70199542dc37a, 0x3873c21b6c82a954, 0x1a9ccf42587bcdb8, 0x7dadd8a90570608c, 0x5f42d5f031890460, 0xb3cff77fbf673ae4, 0x9120fa268b9e5e08, 0xf611edcdd695f33c, 0xd4fee094e26c97d0, 0xbdd307f9644790b1, 0x9f3c0aa050bef45d, 0xf80d1d4b0db55969, 0xdae21012394c3d85, 0x366f329db7a20301, 0x14803fc4835b67ed, 0x73b1282fde50cad9, 0x515e2576eaa9ae35, 0xd10d62c20b0396b3, 0xf3e26f9b3ffaf25f, 0x94d3787062f15f6b, 0xb63c752956083b87, 0x5ab157a6d8e60503, 0x785e5affec1f61ef, 0x1f6f4d14b114ccdb, 0x3d80404d85eda837, 0x54ada72003c6af56, 0x7642aa79373fcbba, 0x1173bd926a34668e, 0x339cb0cb5ecd0262, 0xdf119244d0233ce6, 0xfdfe9f1de4da580a, 0x9acf88f6b9d1f53e, 0xb82085af8d2891d2, 0x4894462db587fbfc, 0x6a7b4b74817e9f10, 0x0d4a5c9fdc753224, 0x2fa551c6e88c56c8, 0xc32873496662684c, 0xe1c77e10529b0ca0, 0x86f669fb0f90a194, 0xa41964a23b69c578, 0xcd3483cfbd42c219, 0xefdb8e9689bba6f5, 0x88ea997dd4b00bc1, 0xaa059424e0496f2d, 0x4688b6ab6ea751a9, 0x6467bbf25a5e3545, 0x0356ac1907559871, 0x21b9a14033acfc9d, 0x70e78436d90552a8, 0x5208896fedfc3644, 0x35399e84b0f79b70, 0x17d693dd840eff9c, 0xfb5bb1520ae0c118, 0xd9b4bc0b3e19a5f4, 0xbe85abe0631208c0, 0x9c6aa6b957eb6c2c, 0xf54741d4d1c06b4d, 0xd7a84c8de5390fa1, 0xb0995b66b832a295, 0x9276563f8ccbc679, 0x7efb74b00225f8fd, 0x5c1479e936dc9c11, 0x3b256e026bd73125, 0x19ca635b5f2e55c9, 0xe97ea0d967813fe7, 0xcb91ad8053785b0b, 0xaca0ba6b0e73f63f, 0x8e4fb7323a8a92d3, 0x62c295bdb464ac57, 0x402d98e4809dc8bb, 0x271c8f0fdd96658f, 0x05f38256e96f0163, 0x6cde653b6f440602, 0x4e3168625bbd62ee, 0x29007f8906b6cfda, 0x0bef72d0324fab36, 0xe762505fbca195b2, 0xc58d5d068858f15e, 0xa2bc4aedd5535c6a, 0x805347b4e1aa3886, 0x30c26aafb90933e3, 0x122d67f68df0570f, 0x751c701dd0fbfa3b, 0x57f37d44e4029ed7, 0xbb7e5fcb6aeca053, 0x999152925e15c4bf, 0xfea04579031e698b, 0xdc4f482037e70d67, 0xb562af4db1cc0a06, 0x978da21485356eea, 0xf0bcb5ffd83ec3de, 0xd253b8a6ecc7a732, 0x3ede9a29622999b6, 0x1c31977056d0fd5a, 0x7b00809b0bdb506e, 0x59ef8dc23f223482, 0xa95b4e40078d5eac, 0x8bb4431933743a40, 0xec8554f26e7f9774, 0xce6a59ab5a86f398, 0x22e77b24d468cd1c, 0x0008767de091a9f0, 0x67396196bd9a04c4, 0x45d66ccf89636028, 0x2cfb8ba20f486749, 0x0e1486fb3bb103a5, 0x6925911066baae91, 0x4bca9c495243ca7d, 0xa747bec6dcadf4f9, 0x85a8b39fe8549015, 0xe299a474b55f3d21, 0xc076a92d81a659cd, 0x91288c5b6b0ff7f8, 0xb3c781025ff69314, 0xd4f696e902fd3e20, 0xf6199bb036045acc, 0x1a94b93fb8ea6448, 0x387bb4668c1300a4, 0x5f4aa38dd118ad90, 0x7da5aed4e5e1c97c, 0x148849b963cace1d, 0x366744e05733aaf1, 0x5156530b0a3807c5, 0x73b95e523ec16329, 0x9f347cddb02f5dad, 0xbddb718484d63941, 0xdaea666fd9dd9475, 0xf8056b36ed24f099, 0x08b1a8b4d58b9ab7, 0x2a5ea5ede172fe5b, 0x4d6fb206bc79536f, 0x6f80bf5f88803783, 0x830d9dd0066e0907, 0xa1e2908932976deb, 0xc6d387626f9cc0df, 0xe43c8a3b5b65a433, 0x8d116d56dd4ea352, 0xaffe600fe9b7c7be, 0xc8cf77e4b4bc6a8a, 0xea207abd80450e66, 0x06ad58320eab30e2, 0x2442556b3a52540e, 0x437342806759f93a, 0x619c4fd953a09dd6, 0xe1cf086db20aa550, 0xc320053486f3c1bc, 0xa41112dfdbf86c88, 0x86fe1f86ef010864, 0x6a733d0961ef36e0, 0x489c30505516520c, 0x2fad27bb081dff38, 0x0d422ae23ce49bd4, 0x646fcd8fbacf9cb5, 0x4680c0d68e36f859, 0x21b1d73dd33d556d, 0x035eda64e7c43181, 0xefd3f8eb692a0f05, 0xcd3cf5b25dd36be9, 0xaa0de25900d8c6dd, 0x88e2ef003421a231, 0x78562c820c8ec81f, 0x5ab921db3877acf3, 0x3d883630657c01c7, 0x1f673b695185652b, 0xf3ea19e6df6b5baf, 0xd10514bfeb923f43, 0xb6340354b6999277, 0x94db0e0d8260f69b, 0xfdf6e960044bf1fa, 0xdf19e43930b29516, 0xb828f3d26db93822, 0x9ac7fe8b59405cce, 0x764adc04d7ae624a, 0x54a5d15de35706a6, 0x3394c6b6be5cab92, 0x117bcbef8aa5cf7e, 0x4025ee99600c614b, 0x62cae3c054f505a7, 0x05fbf42b09fea893, 0x2714f9723d07cc7f, 0xcb99dbfdb3e9f2fb, 0xe976d6a487109617, 0x8e47c14fda1b3b23, 0xaca8cc16eee25fcf, 0xc5852b7b68c958ae, 0xe76a26225c303c42, 0x805b31c9013b9176, 0xa2b43c9035c2f59a, 0x4e391e1fbb2ccb1e, 0x6cd613468fd5aff2, 0x0be704add2de02c6, 0x290809f4e627662a, 0xd9bcca76de880c04, 0xfb53c72fea7168e8, 0x9c62d0c4b77ac5dc, 0xbe8ddd9d8383a130, 0x5200ff120d6d9fb4, 0x70eff24b3994fb58, 0x17dee5a0649f566c, 0x3531e8f950663280, 0x5c1c0f94d64d35e1, 0x7ef302cde2b4510d, 0x19c21526bfbffc39, 0x3b2d187f8b4698d5, 0xd7a03af005a8a651, 0xf54f37a93151c2bd, 0x927e20426c5a6f89, 0xb0912d1b58a30b65, ], [ 0x0000000000000000, 0xdabe95afc7875f40, 0x27a584742000a005, 0xfd1b11dbe787ff45, 0x4f4b08e84001400a, 0x95f59d4787861f4a, 0x68ee8c9c6001e00f, 0xb2501933a786bf4f, 0x9e9611d080028014, 0x4428847f4785df54, 0xb93395a4a0022011, 0x638d000b67857f51, 0xd1dd1938c003c01e, 0x0b638c9707849f5e, 0xf6789d4ce003601b, 0x2cc608e327843f5b, 0xaff48c8aaf0b1ead, 0x754a1925688c41ed, 0x885108fe8f0bbea8, 0x52ef9d51488ce1e8, 0xe0bf8462ef0a5ea7, 0x3a0111cd288d01e7, 0xc71a0016cf0afea2, 0x1da495b9088da1e2, 0x31629d5a2f099eb9, 0xebdc08f5e88ec1f9, 0x16c7192e0f093ebc, 0xcc798c81c88e61fc, 0x7e2995b26f08deb3, 0xa497001da88f81f3, 0x598c11c64f087eb6, 0x83328469888f21f6, 0xcd31b63ef11823df, 0x178f2391369f7c9f, 0xea94324ad11883da, 0x302aa7e5169fdc9a, 0x827abed6b11963d5, 0x58c42b79769e3c95, 0xa5df3aa29119c3d0, 0x7f61af0d569e9c90, 0x53a7a7ee711aa3cb, 0x89193241b69dfc8b, 0x7402239a511a03ce, 0xaebcb635969d5c8e, 0x1cecaf06311be3c1, 0xc6523aa9f69cbc81, 0x3b492b72111b43c4, 0xe1f7beddd69c1c84, 0x62c53ab45e133d72, 0xb87baf1b99946232, 0x4560bec07e139d77, 0x9fde2b6fb994c237, 0x2d8e325c1e127d78, 0xf730a7f3d9952238, 0x0a2bb6283e12dd7d, 0xd0952387f995823d, 0xfc532b64de11bd66, 0x26edbecb1996e226, 0xdbf6af10fe111d63, 0x01483abf39964223, 0xb318238c9e10fd6c, 0x69a6b6235997a22c, 0x94bda7f8be105d69, 0x4e03325779970229, 0x08bbc3564d3e593b, 0xd20556f98ab9067b, 0x2f1e47226d3ef93e, 0xf5a0d28daab9a67e, 0x47f0cbbe0d3f1931, 0x9d4e5e11cab84671, 0x60554fca2d3fb934, 0xbaebda65eab8e674, 0x962dd286cd3cd92f, 0x4c9347290abb866f, 0xb18856f2ed3c792a, 0x6b36c35d2abb266a, 0xd966da6e8d3d9925, 0x03d84fc14abac665, 0xfec35e1aad3d3920, 0x247dcbb56aba6660, 0xa74f4fdce2354796, 0x7df1da7325b218d6, 0x80eacba8c235e793, 0x5a545e0705b2b8d3, 0xe8044734a234079c, 0x32bad29b65b358dc, 0xcfa1c3408234a799, 0x151f56ef45b3f8d9, 0x39d95e0c6237c782, 0xe367cba3a5b098c2, 0x1e7cda7842376787, 0xc4c24fd785b038c7, 0x769256e422368788, 0xac2cc34be5b1d8c8, 0x5137d2900236278d, 0x8b89473fc5b178cd, 0xc58a7568bc267ae4, 0x1f34e0c77ba125a4, 0xe22ff11c9c26dae1, 0x389164b35ba185a1, 0x8ac17d80fc273aee, 0x507fe82f3ba065ae, 0xad64f9f4dc279aeb, 0x77da6c5b1ba0c5ab, 0x5b1c64b83c24faf0, 0x81a2f117fba3a5b0, 0x7cb9e0cc1c245af5, 0xa6077563dba305b5, 0x14576c507c25bafa, 0xcee9f9ffbba2e5ba, 0x33f2e8245c251aff, 0xe94c7d8b9ba245bf, 0x6a7ef9e2132d6449, 0xb0c06c4dd4aa3b09, 0x4ddb7d96332dc44c, 0x9765e839f4aa9b0c, 0x2535f10a532c2443, 0xff8b64a594ab7b03, 0x0290757e732c8446, 0xd82ee0d1b4abdb06, 0xf4e8e832932fe45d, 0x2e567d9d54a8bb1d, 0xd34d6c46b32f4458, 0x09f3f9e974a81b18, 0xbba3e0dad32ea457, 0x611d757514a9fb17, 0x9c0664aef32e0452, 0x46b8f10134a95b12, 0x117786ac9a7cb276, 0xcbc913035dfbed36, 0x36d202d8ba7c1273, 0xec6c97777dfb4d33, 0x5e3c8e44da7df27c, 0x84821beb1dfaad3c, 0x79990a30fa7d5279, 0xa3279f9f3dfa0d39, 0x8fe1977c1a7e3262, 0x555f02d3ddf96d22, 0xa84413083a7e9267, 0x72fa86a7fdf9cd27, 0xc0aa9f945a7f7268, 0x1a140a3b9df82d28, 0xe70f1be07a7fd26d, 0x3db18e4fbdf88d2d, 0xbe830a263577acdb, 0x643d9f89f2f0f39b, 0x99268e5215770cde, 0x43981bfdd2f0539e, 0xf1c802ce7576ecd1, 0x2b769761b2f1b391, 0xd66d86ba55764cd4, 0x0cd3131592f11394, 0x20151bf6b5752ccf, 0xfaab8e5972f2738f, 0x07b09f8295758cca, 0xdd0e0a2d52f2d38a, 0x6f5e131ef5746cc5, 0xb5e086b132f33385, 0x48fb976ad574ccc0, 0x924502c512f39380, 0xdc4630926b6491a9, 0x06f8a53dace3cee9, 0xfbe3b4e64b6431ac, 0x215d21498ce36eec, 0x930d387a2b65d1a3, 0x49b3add5ece28ee3, 0xb4a8bc0e0b6571a6, 0x6e1629a1cce22ee6, 0x42d02142eb6611bd, 0x986eb4ed2ce14efd, 0x6575a536cb66b1b8, 0xbfcb30990ce1eef8, 0x0d9b29aaab6751b7, 0xd725bc056ce00ef7, 0x2a3eadde8b67f1b2, 0xf08038714ce0aef2, 0x73b2bc18c46f8f04, 0xa90c29b703e8d044, 0x5417386ce46f2f01, 0x8ea9adc323e87041, 0x3cf9b4f0846ecf0e, 0xe647215f43e9904e, 0x1b5c3084a46e6f0b, 0xc1e2a52b63e9304b, 0xed24adc8446d0f10, 0x379a386783ea5050, 0xca8129bc646daf15, 0x103fbc13a3eaf055, 0xa26fa520046c4f1a, 0x78d1308fc3eb105a, 0x85ca2154246cef1f, 0x5f74b4fbe3ebb05f, 0x19cc45fad742eb4d, 0xc372d05510c5b40d, 0x3e69c18ef7424b48, 0xe4d7542130c51408, 0x56874d129743ab47, 0x8c39d8bd50c4f407, 0x7122c966b7430b42, 0xab9c5cc970c45402, 0x875a542a57406b59, 0x5de4c18590c73419, 0xa0ffd05e7740cb5c, 0x7a4145f1b0c7941c, 0xc8115cc217412b53, 0x12afc96dd0c67413, 0xefb4d8b637418b56, 0x350a4d19f0c6d416, 0xb638c9707849f5e0, 0x6c865cdfbfceaaa0, 0x919d4d04584955e5, 0x4b23d8ab9fce0aa5, 0xf973c1983848b5ea, 0x23cd5437ffcfeaaa, 0xded645ec184815ef, 0x0468d043dfcf4aaf, 0x28aed8a0f84b75f4, 0xf2104d0f3fcc2ab4, 0x0f0b5cd4d84bd5f1, 0xd5b5c97b1fcc8ab1, 0x67e5d048b84a35fe, 0xbd5b45e77fcd6abe, 0x4040543c984a95fb, 0x9afec1935fcdcabb, 0xd4fdf3c4265ac892, 0x0e43666be1dd97d2, 0xf35877b0065a6897, 0x29e6e21fc1dd37d7, 0x9bb6fb2c665b8898, 0x41086e83a1dcd7d8, 0xbc137f58465b289d, 0x66adeaf781dc77dd, 0x4a6be214a6584886, 0x90d577bb61df17c6, 0x6dce66608658e883, 0xb770f3cf41dfb7c3, 0x0520eafce659088c, 0xdf9e7f5321de57cc, 0x22856e88c659a889, 0xf83bfb2701def7c9, 0x7b097f4e8951d63f, 0xa1b7eae14ed6897f, 0x5cacfb3aa951763a, 0x86126e956ed6297a, 0x344277a6c9509635, 0xeefce2090ed7c975, 0x13e7f3d2e9503630, 0xc959667d2ed76970, 0xe59f6e9e0953562b, 0x3f21fb31ced4096b, 0xc23aeaea2953f62e, 0x18847f45eed4a96e, 0xaad4667649521621, 0x706af3d98ed54961, 0x8d71e2026952b624, 0x57cf77adaed5e964, ], [ 0x0000000000000000, 0x646c955f440400fe, 0xc8d92abe880801fc, 0xacb5bfe1cc0c0102, 0x036afa56bf1e1d7d, 0x67066f09fb1a1d83, 0xcbb3d0e837161c81, 0xafdf45b773121c7f, 0x06d5f4ad7e3c3afa, 0x62b961f23a383a04, 0xce0cde13f6343b06, 0xaa604b4cb2303bf8, 0x05bf0efbc1222787, 0x61d39ba485262779, 0xcd662445492a267b, 0xa90ab11a0d2e2685, 0x0dabe95afc7875f4, 0x69c77c05b87c750a, 0xc572c3e474707408, 0xa11e56bb307474f6, 0x0ec1130c43666889, 0x6aad865307626877, 0xc61839b2cb6e6975, 0xa274aced8f6a698b, 0x0b7e1df782444f0e, 0x6f1288a8c6404ff0, 0xc3a737490a4c4ef2, 0xa7cba2164e484e0c, 0x0814e7a13d5a5273, 0x6c7872fe795e528d, 0xc0cdcd1fb552538f, 0xa4a15840f1565371, 0x1b57d2b5f8f0ebe8, 0x7f3b47eabcf4eb16, 0xd38ef80b70f8ea14, 0xb7e26d5434fceaea, 0x183d28e347eef695, 0x7c51bdbc03eaf66b, 0xd0e4025dcfe6f769, 0xb48897028be2f797, 0x1d82261886ccd112, 0x79eeb347c2c8d1ec, 0xd55b0ca60ec4d0ee, 0xb13799f94ac0d010, 0x1ee8dc4e39d2cc6f, 0x7a8449117dd6cc91, 0xd631f6f0b1dacd93, 0xb25d63aff5decd6d, 0x16fc3bef04889e1c, 0x7290aeb0408c9ee2, 0xde2511518c809fe0, 0xba49840ec8849f1e, 0x1596c1b9bb968361, 0x71fa54e6ff92839f, 0xdd4feb07339e829d, 0xb9237e58779a8263, 0x1029cf427ab4a4e6, 0x74455a1d3eb0a418, 0xd8f0e5fcf2bca51a, 0xbc9c70a3b6b8a5e4, 0x13433514c5aab99b, 0x772fa04b81aeb965, 0xdb9a1faa4da2b867, 0xbff68af509a6b899, 0x36afa56bf1e1d7d0, 0x52c33034b5e5d72e, 0xfe768fd579e9d62c, 0x9a1a1a8a3dedd6d2, 0x35c55f3d4effcaad, 0x51a9ca620afbca53, 0xfd1c7583c6f7cb51, 0x9970e0dc82f3cbaf, 0x307a51c68fdded2a, 0x5416c499cbd9edd4, 0xf8a37b7807d5ecd6, 0x9ccfee2743d1ec28, 0x3310ab9030c3f057, 0x577c3ecf74c7f0a9, 0xfbc9812eb8cbf1ab, 0x9fa51471fccff155, 0x3b044c310d99a224, 0x5f68d96e499da2da, 0xf3dd668f8591a3d8, 0x97b1f3d0c195a326, 0x386eb667b287bf59, 0x5c022338f683bfa7, 0xf0b79cd93a8fbea5, 0x94db09867e8bbe5b, 0x3dd1b89c73a598de, 0x59bd2dc337a19820, 0xf5089222fbad9922, 0x9164077dbfa999dc, 0x3ebb42caccbb85a3, 0x5ad7d79588bf855d, 0xf662687444b3845f, 0x920efd2b00b784a1, 0x2df877de09113c38, 0x4994e2814d153cc6, 0xe5215d6081193dc4, 0x814dc83fc51d3d3a, 0x2e928d88b60f2145, 0x4afe18d7f20b21bb, 0xe64ba7363e0720b9, 0x822732697a032047, 0x2b2d8373772d06c2, 0x4f41162c3329063c, 0xe3f4a9cdff25073e, 0x87983c92bb2107c0, 0x28477925c8331bbf, 0x4c2bec7a8c371b41, 0xe09e539b403b1a43, 0x84f2c6c4043f1abd, 0x20539e84f56949cc, 0x443f0bdbb16d4932, 0xe88ab43a7d614830, 0x8ce62165396548ce, 0x233964d24a7754b1, 0x4755f18d0e73544f, 0xebe04e6cc27f554d, 0x8f8cdb33867b55b3, 0x26866a298b557336, 0x42eaff76cf5173c8, 0xee5f4097035d72ca, 0x8a33d5c847597234, 0x25ec907f344b6e4b, 0x41800520704f6eb5, 0xed35bac1bc436fb7, 0x89592f9ef8476f49, 0x6d5f4ad7e3c3afa0, 0x0933df88a7c7af5e, 0xa58660696bcbae5c, 0xc1eaf5362fcfaea2, 0x6e35b0815cddb2dd, 0x0a5925de18d9b223, 0xa6ec9a3fd4d5b321, 0xc2800f6090d1b3df, 0x6b8abe7a9dff955a, 0x0fe62b25d9fb95a4, 0xa35394c415f794a6, 0xc73f019b51f39458, 0x68e0442c22e18827, 0x0c8cd17366e588d9, 0xa0396e92aae989db, 0xc455fbcdeeed8925, 0x60f4a38d1fbbda54, 0x049836d25bbfdaaa, 0xa82d893397b3dba8, 0xcc411c6cd3b7db56, 0x639e59dba0a5c729, 0x07f2cc84e4a1c7d7, 0xab47736528adc6d5, 0xcf2be63a6ca9c62b, 0x662157206187e0ae, 0x024dc27f2583e050, 0xaef87d9ee98fe152, 0xca94e8c1ad8be1ac, 0x654bad76de99fdd3, 0x012738299a9dfd2d, 0xad9287c85691fc2f, 0xc9fe12971295fcd1, 0x760898621b334448, 0x12640d3d5f3744b6, 0xbed1b2dc933b45b4, 0xdabd2783d73f454a, 0x75626234a42d5935, 0x110ef76be02959cb, 0xbdbb488a2c2558c9, 0xd9d7ddd568215837, 0x70dd6ccf650f7eb2, 0x14b1f990210b7e4c, 0xb8044671ed077f4e, 0xdc68d32ea9037fb0, 0x73b79699da1163cf, 0x17db03c69e156331, 0xbb6ebc2752196233, 0xdf022978161d62cd, 0x7ba37138e74b31bc, 0x1fcfe467a34f3142, 0xb37a5b866f433040, 0xd716ced92b4730be, 0x78c98b6e58552cc1, 0x1ca51e311c512c3f, 0xb010a1d0d05d2d3d, 0xd47c348f94592dc3, 0x7d76859599770b46, 0x191a10cadd730bb8, 0xb5afaf2b117f0aba, 0xd1c33a74557b0a44, 0x7e1c7fc32669163b, 0x1a70ea9c626d16c5, 0xb6c5557dae6117c7, 0xd2a9c022ea651739, 0x5bf0efbc12227870, 0x3f9c7ae35626788e, 0x9329c5029a2a798c, 0xf745505dde2e7972, 0x589a15eaad3c650d, 0x3cf680b5e93865f3, 0x90433f54253464f1, 0xf42faa0b6130640f, 0x5d251b116c1e428a, 0x39498e4e281a4274, 0x95fc31afe4164376, 0xf190a4f0a0124388, 0x5e4fe147d3005ff7, 0x3a23741897045f09, 0x9696cbf95b085e0b, 0xf2fa5ea61f0c5ef5, 0x565b06e6ee5a0d84, 0x323793b9aa5e0d7a, 0x9e822c5866520c78, 0xfaeeb90722560c86, 0x5531fcb0514410f9, 0x315d69ef15401007, 0x9de8d60ed94c1105, 0xf98443519d4811fb, 0x508ef24b9066377e, 0x34e26714d4623780, 0x9857d8f5186e3682, 0xfc3b4daa5c6a367c, 0x53e4081d2f782a03, 0x37889d426b7c2afd, 0x9b3d22a3a7702bff, 0xff51b7fce3742b01, 0x40a73d09ead29398, 0x24cba856aed69366, 0x887e17b762da9264, 0xec1282e826de929a, 0x43cdc75f55cc8ee5, 0x27a1520011c88e1b, 0x8b14ede1ddc48f19, 0xef7878be99c08fe7, 0x4672c9a494eea962, 0x221e5cfbd0eaa99c, 0x8eabe31a1ce6a89e, 0xeac7764558e2a860, 0x451833f22bf0b41f, 0x2174a6ad6ff4b4e1, 0x8dc1194ca3f8b5e3, 0xe9ad8c13e7fcb51d, 0x4d0cd45316aae66c, 0x2960410c52aee692, 0x85d5feed9ea2e790, 0xe1b96bb2daa6e76e, 0x4e662e05a9b4fb11, 0x2a0abb5aedb0fbef, 0x86bf04bb21bcfaed, 0xe2d391e465b8fa13, 0x4bd920fe6896dc96, 0x2fb5b5a12c92dc68, 0x83000a40e09edd6a, 0xe76c9f1fa49add94, 0x48b3daa8d788c1eb, 0x2cdf4ff7938cc115, 0x806af0165f80c017, 0xe40665491b84c0e9, ], [ 0x0000000000000000, 0x53e7815838846436, 0xa7cf02b07108c86c, 0xf42883e8498cac5a, 0xdd46aa4b4d1f8e5d, 0x8ea12b13759bea6b, 0x7a89a8fb3c174631, 0x296e29a304932207, 0x2855fbbd3531023f, 0x7bb27ae50db56609, 0x8f9af90d4439ca53, 0xdc7d78557cbdae65, 0xf51351f6782e8c62, 0xa6f4d0ae40aae854, 0x52dc53460926440e, 0x013bd21e31a22038, 0x50abf77a6a62047e, 0x034c762252e66048, 0xf764f5ca1b6acc12, 0xa483749223eea824, 0x8ded5d31277d8a23, 0xde0adc691ff9ee15, 0x2a225f815675424f, 0x79c5ded96ef12679, 0x78fe0cc75f530641, 0x2b198d9f67d76277, 0xdf310e772e5bce2d, 0x8cd68f2f16dfaa1b, 0xa5b8a68c124c881c, 0xf65f27d42ac8ec2a, 0x0277a43c63444070, 0x519025645bc02446, 0xa157eef4d4c408fc, 0xf2b06facec406cca, 0x0698ec44a5ccc090, 0x557f6d1c9d48a4a6, 0x7c1144bf99db86a1, 0x2ff6c5e7a15fe297, 0xdbde460fe8d34ecd, 0x8839c757d0572afb, 0x89021549e1f50ac3, 0xdae59411d9716ef5, 0x2ecd17f990fdc2af, 0x7d2a96a1a879a699, 0x5444bf02acea849e, 0x07a33e5a946ee0a8, 0xf38bbdb2dde24cf2, 0xa06c3ceae56628c4, 0xf1fc198ebea60c82, 0xa21b98d6862268b4, 0x56331b3ecfaec4ee, 0x05d49a66f72aa0d8, 0x2cbab3c5f3b982df, 0x7f5d329dcb3de6e9, 0x8b75b17582b14ab3, 0xd892302dba352e85, 0xd9a9e2338b970ebd, 0x8a4e636bb3136a8b, 0x7e66e083fa9fc6d1, 0x2d8161dbc21ba2e7, 0x04ef4878c68880e0, 0x5708c920fe0ce4d6, 0xa3204ac8b780488c, 0xf0c7cb908f042cba, 0xd07772c206860f7d, 0x8390f39a3e026b4b, 0x77b87072778ec711, 0x245ff12a4f0aa327, 0x0d31d8894b998120, 0x5ed659d1731de516, 0xaafeda393a91494c, 0xf9195b6102152d7a, 0xf822897f33b70d42, 0xabc508270b336974, 0x5fed8bcf42bfc52e, 0x0c0a0a977a3ba118, 0x256423347ea8831f, 0x7683a26c462ce729, 0x82ab21840fa04b73, 0xd14ca0dc37242f45, 0x80dc85b86ce40b03, 0xd33b04e054606f35, 0x271387081decc36f, 0x74f406502568a759, 0x5d9a2ff321fb855e, 0x0e7daeab197fe168, 0xfa552d4350f34d32, 0xa9b2ac1b68772904, 0xa8897e0559d5093c, 0xfb6eff5d61516d0a, 0x0f467cb528ddc150, 0x5ca1fded1059a566, 0x75cfd44e14ca8761, 0x262855162c4ee357, 0xd200d6fe65c24f0d, 0x81e757a65d462b3b, 0x71209c36d2420781, 0x22c71d6eeac663b7, 0xd6ef9e86a34acfed, 0x85081fde9bceabdb, 0xac66367d9f5d89dc, 0xff81b725a7d9edea, 0x0ba934cdee5541b0, 0x584eb595d6d12586, 0x5975678be77305be, 0x0a92e6d3dff76188, 0xfeba653b967bcdd2, 0xad5de463aeffa9e4, 0x8433cdc0aa6c8be3, 0xd7d44c9892e8efd5, 0x23fccf70db64438f, 0x701b4e28e3e027b9, 0x218b6b4cb82003ff, 0x726cea1480a467c9, 0x864469fcc928cb93, 0xd5a3e8a4f1acafa5, 0xfccdc107f53f8da2, 0xaf2a405fcdbbe994, 0x5b02c3b7843745ce, 0x08e542efbcb321f8, 0x09de90f18d1101c0, 0x5a3911a9b59565f6, 0xae119241fc19c9ac, 0xfdf61319c49dad9a, 0xd4983abac00e8f9d, 0x877fbbe2f88aebab, 0x7357380ab10647f1, 0x20b0b952898223c7, 0x32364aafa202007f, 0x61d1cbf79a866449, 0x95f9481fd30ac813, 0xc61ec947eb8eac25, 0xef70e0e4ef1d8e22, 0xbc9761bcd799ea14, 0x48bfe2549e15464e, 0x1b58630ca6912278, 0x1a63b11297330240, 0x4984304aafb76676, 0xbdacb3a2e63bca2c, 0xee4b32fadebfae1a, 0xc7251b59da2c8c1d, 0x94c29a01e2a8e82b, 0x60ea19e9ab244471, 0x330d98b193a02047, 0x629dbdd5c8600401, 0x317a3c8df0e46037, 0xc552bf65b968cc6d, 0x96b53e3d81eca85b, 0xbfdb179e857f8a5c, 0xec3c96c6bdfbee6a, 0x1814152ef4774230, 0x4bf39476ccf32606, 0x4ac84668fd51063e, 0x192fc730c5d56208, 0xed0744d88c59ce52, 0xbee0c580b4ddaa64, 0x978eec23b04e8863, 0xc4696d7b88caec55, 0x3041ee93c146400f, 0x63a66fcbf9c22439, 0x9361a45b76c60883, 0xc08625034e426cb5, 0x34aea6eb07cec0ef, 0x674927b33f4aa4d9, 0x4e270e103bd986de, 0x1dc08f48035de2e8, 0xe9e80ca04ad14eb2, 0xba0f8df872552a84, 0xbb345fe643f70abc, 0xe8d3debe7b736e8a, 0x1cfb5d5632ffc2d0, 0x4f1cdc0e0a7ba6e6, 0x6672f5ad0ee884e1, 0x359574f5366ce0d7, 0xc1bdf71d7fe04c8d, 0x925a7645476428bb, 0xc3ca53211ca40cfd, 0x902dd279242068cb, 0x640551916dacc491, 0x37e2d0c95528a0a7, 0x1e8cf96a51bb82a0, 0x4d6b7832693fe696, 0xb943fbda20b34acc, 0xeaa47a8218372efa, 0xeb9fa89c29950ec2, 0xb87829c411116af4, 0x4c50aa2c589dc6ae, 0x1fb72b746019a298, 0x36d902d7648a809f, 0x653e838f5c0ee4a9, 0x91160067158248f3, 0xc2f1813f2d062cc5, 0xe241386da4840f02, 0xb1a6b9359c006b34, 0x458e3addd58cc76e, 0x1669bb85ed08a358, 0x3f079226e99b815f, 0x6ce0137ed11fe569, 0x98c8909698934933, 0xcb2f11cea0172d05, 0xca14c3d091b50d3d, 0x99f34288a931690b, 0x6ddbc160e0bdc551, 0x3e3c4038d839a167, 0x1752699bdcaa8360, 0x44b5e8c3e42ee756, 0xb09d6b2bada24b0c, 0xe37aea7395262f3a, 0xb2eacf17cee60b7c, 0xe10d4e4ff6626f4a, 0x1525cda7bfeec310, 0x46c24cff876aa726, 0x6fac655c83f98521, 0x3c4be404bb7de117, 0xc86367ecf2f14d4d, 0x9b84e6b4ca75297b, 0x9abf34aafbd70943, 0xc958b5f2c3536d75, 0x3d70361a8adfc12f, 0x6e97b742b25ba519, 0x47f99ee1b6c8871e, 0x141e1fb98e4ce328, 0xe0369c51c7c04f72, 0xb3d11d09ff442b44, 0x4316d699704007fe, 0x10f157c148c463c8, 0xe4d9d4290148cf92, 0xb73e557139ccaba4, 0x9e507cd23d5f89a3, 0xcdb7fd8a05dbed95, 0x399f7e624c5741cf, 0x6a78ff3a74d325f9, 0x6b432d24457105c1, 0x38a4ac7c7df561f7, 0xcc8c2f943479cdad, 0x9f6baecc0cfda99b, 0xb605876f086e8b9c, 0xe5e2063730eaefaa, 0x11ca85df796643f0, 0x422d048741e227c6, 0x13bd21e31a220380, 0x405aa0bb22a667b6, 0xb47223536b2acbec, 0xe795a20b53aeafda, 0xcefb8ba8573d8ddd, 0x9d1c0af06fb9e9eb, 0x69348918263545b1, 0x3ad308401eb12187, 0x3be8da5e2f1301bf, 0x680f5b0617976589, 0x9c27d8ee5e1bc9d3, 0xcfc059b6669fade5, 0xe6ae7015620c8fe2, 0xb549f14d5a88ebd4, 0x416172a51304478e, 0x1286f3fd2b8023b8, ], [ 0x0000000000000000, 0x09abf11afca2d0d7, 0x1357e235f945a1ae, 0x1afc132f05e77179, 0x26afc46bf28b435c, 0x2f0435710e29938b, 0x35f8265e0bcee2f2, 0x3c53d744f76c3225, 0x4d5f88d7e51686b8, 0x44f479cd19b4566f, 0x5e086ae21c532716, 0x57a39bf8e0f1f7c1, 0x6bf04cbc179dc5e4, 0x625bbda6eb3f1533, 0x78a7ae89eed8644a, 0x710c5f93127ab49d, 0x9abf11afca2d0d70, 0x9314e0b5368fdda7, 0x89e8f39a3368acde, 0x80430280cfca7c09, 0xbc10d5c438a64e2c, 0xb5bb24dec4049efb, 0xaf4737f1c1e3ef82, 0xa6ecc6eb3d413f55, 0xd7e099782f3b8bc8, 0xde4b6862d3995b1f, 0xc4b77b4dd67e2a66, 0xcd1c8a572adcfab1, 0xf14f5d13ddb0c894, 0xf8e4ac0921121843, 0xe218bf2624f5693a, 0xebb34e3cd857b9ed, 0xa7a68c743b540465, 0xae0d7d6ec7f6d4b2, 0xb4f16e41c211a5cb, 0xbd5a9f5b3eb3751c, 0x8109481fc9df4739, 0x88a2b905357d97ee, 0x925eaa2a309ae697, 0x9bf55b30cc383640, 0xeaf904a3de4282dd, 0xe352f5b922e0520a, 0xf9aee69627072373, 0xf005178cdba5f3a4, 0xcc56c0c82cc9c181, 0xc5fd31d2d06b1156, 0xdf0122fdd58c602f, 0xd6aad3e7292eb0f8, 0x3d199ddbf1790915, 0x34b26cc10ddbd9c2, 0x2e4e7fee083ca8bb, 0x27e58ef4f49e786c, 0x1bb659b003f24a49, 0x121da8aaff509a9e, 0x08e1bb85fab7ebe7, 0x014a4a9f06153b30, 0x7046150c146f8fad, 0x79ede416e8cd5f7a, 0x6311f739ed2a2e03, 0x6aba06231188fed4, 0x56e9d167e6e4ccf1, 0x5f42207d1a461c26, 0x45be33521fa16d5f, 0x4c15c248e303bd88, 0xdd95b7c3d9a6164f, 0xd43e46d92504c698, 0xcec255f620e3b7e1, 0xc769a4ecdc416736, 0xfb3a73a82b2d5513, 0xf29182b2d78f85c4, 0xe86d919dd268f4bd, 0xe1c660872eca246a, 0x90ca3f143cb090f7, 0x9961ce0ec0124020, 0x839ddd21c5f53159, 0x8a362c3b3957e18e, 0xb665fb7fce3bd3ab, 0xbfce0a653299037c, 0xa532194a377e7205, 0xac99e850cbdca2d2, 0x472aa66c138b1b3f, 0x4e815776ef29cbe8, 0x547d4459eaceba91, 0x5dd6b543166c6a46, 0x61856207e1005863, 0x682e931d1da288b4, 0x72d280321845f9cd, 0x7b797128e4e7291a, 0x0a752ebbf69d9d87, 0x03dedfa10a3f4d50, 0x1922cc8e0fd83c29, 0x10893d94f37aecfe, 0x2cdaead00416dedb, 0x25711bcaf8b40e0c, 0x3f8d08e5fd537f75, 0x3626f9ff01f1afa2, 0x7a333bb7e2f2122a, 0x7398caad1e50c2fd, 0x6964d9821bb7b384, 0x60cf2898e7156353, 0x5c9cffdc10795176, 0x55370ec6ecdb81a1, 0x4fcb1de9e93cf0d8, 0x4660ecf3159e200f, 0x376cb36007e49492, 0x3ec7427afb464445, 0x243b5155fea1353c, 0x2d90a04f0203e5eb, 0x11c3770bf56fd7ce, 0x1868861109cd0719, 0x0294953e0c2a7660, 0x0b3f6424f088a6b7, 0xe08c2a1828df1f5a, 0xe927db02d47dcf8d, 0xf3dbc82dd19abef4, 0xfa7039372d386e23, 0xc623ee73da545c06, 0xcf881f6926f68cd1, 0xd5740c462311fda8, 0xdcdffd5cdfb32d7f, 0xadd3a2cfcdc999e2, 0xa47853d5316b4935, 0xbe8440fa348c384c, 0xb72fb1e0c82ee89b, 0x8b7c66a43f42dabe, 0x82d797bec3e00a69, 0x982b8491c6077b10, 0x9180758b3aa5abc7, 0x29f3c0ac1c42321b, 0x205831b6e0e0e2cc, 0x3aa42299e50793b5, 0x330fd38319a54362, 0x0f5c04c7eec97147, 0x06f7f5dd126ba190, 0x1c0be6f2178cd0e9, 0x15a017e8eb2e003e, 0x64ac487bf954b4a3, 0x6d07b96105f66474, 0x77fbaa4e0011150d, 0x7e505b54fcb3c5da, 0x42038c100bdff7ff, 0x4ba87d0af77d2728, 0x51546e25f29a5651, 0x58ff9f3f0e388686, 0xb34cd103d66f3f6b, 0xbae720192acdefbc, 0xa01b33362f2a9ec5, 0xa9b0c22cd3884e12, 0x95e3156824e47c37, 0x9c48e472d846ace0, 0x86b4f75ddda1dd99, 0x8f1f064721030d4e, 0xfe1359d43379b9d3, 0xf7b8a8cecfdb6904, 0xed44bbe1ca3c187d, 0xe4ef4afb369ec8aa, 0xd8bc9dbfc1f2fa8f, 0xd1176ca53d502a58, 0xcbeb7f8a38b75b21, 0xc2408e90c4158bf6, 0x8e554cd82716367e, 0x87febdc2dbb4e6a9, 0x9d02aeedde5397d0, 0x94a95ff722f14707, 0xa8fa88b3d59d7522, 0xa15179a9293fa5f5, 0xbbad6a862cd8d48c, 0xb2069b9cd07a045b, 0xc30ac40fc200b0c6, 0xcaa135153ea26011, 0xd05d263a3b451168, 0xd9f6d720c7e7c1bf, 0xe5a50064308bf39a, 0xec0ef17ecc29234d, 0xf6f2e251c9ce5234, 0xff59134b356c82e3, 0x14ea5d77ed3b3b0e, 0x1d41ac6d1199ebd9, 0x07bdbf42147e9aa0, 0x0e164e58e8dc4a77, 0x3245991c1fb07852, 0x3bee6806e312a885, 0x21127b29e6f5d9fc, 0x28b98a331a57092b, 0x59b5d5a0082dbdb6, 0x501e24baf48f6d61, 0x4ae23795f1681c18, 0x4349c68f0dcacccf, 0x7f1a11cbfaa6feea, 0x76b1e0d106042e3d, 0x6c4df3fe03e35f44, 0x65e602e4ff418f93, 0xf466776fc5e42454, 0xfdcd86753946f483, 0xe731955a3ca185fa, 0xee9a6440c003552d, 0xd2c9b304376f6708, 0xdb62421ecbcdb7df, 0xc19e5131ce2ac6a6, 0xc835a02b32881671, 0xb939ffb820f2a2ec, 0xb0920ea2dc50723b, 0xaa6e1d8dd9b70342, 0xa3c5ec972515d395, 0x9f963bd3d279e1b0, 0x963dcac92edb3167, 0x8cc1d9e62b3c401e, 0x856a28fcd79e90c9, 0x6ed966c00fc92924, 0x677297daf36bf9f3, 0x7d8e84f5f68c888a, 0x742575ef0a2e585d, 0x4876a2abfd426a78, 0x41dd53b101e0baaf, 0x5b21409e0407cbd6, 0x528ab184f8a51b01, 0x2386ee17eadfaf9c, 0x2a2d1f0d167d7f4b, 0x30d10c22139a0e32, 0x397afd38ef38dee5, 0x05292a7c1854ecc0, 0x0c82db66e4f63c17, 0x167ec849e1114d6e, 0x1fd539531db39db9, 0x53c0fb1bfeb02031, 0x5a6b0a010212f0e6, 0x4097192e07f5819f, 0x493ce834fb575148, 0x756f3f700c3b636d, 0x7cc4ce6af099b3ba, 0x6638dd45f57ec2c3, 0x6f932c5f09dc1214, 0x1e9f73cc1ba6a689, 0x173482d6e704765e, 0x0dc891f9e2e30727, 0x046360e31e41d7f0, 0x3830b7a7e92de5d5, 0x319b46bd158f3502, 0x2b6755921068447b, 0x22cca488ecca94ac, 0xc97feab4349d2d41, 0xc0d41baec83ffd96, 0xda280881cdd88cef, 0xd383f99b317a5c38, 0xefd02edfc6166e1d, 0xe67bdfc53ab4beca, 0xfc87ccea3f53cfb3, 0xf52c3df0c3f11f64, 0x84206263d18babf9, 0x8d8b93792d297b2e, 0x9777805628ce0a57, 0x9edc714cd46cda80, 0xa28fa6082300e8a5, 0xab245712dfa23872, 0xb1d8443dda45490b, 0xb873b52726e799dc, ], [ 0x0000000000000000, 0xec32cffb23e3ed7d, 0x4abd30dde8c9c47f, 0xa68fff26cb2a2902, 0x957a61bbd19388fe, 0x7948ae40f2706583, 0xdfc75166395a4c81, 0x33f59e9d1ab9a1fc, 0xb82c6c5c0c290f79, 0x541ea3a72fcae204, 0xf2915c81e4e0cb06, 0x1ea3937ac703267b, 0x2d560de7ddba8787, 0xc164c21cfe596afa, 0x67eb3d3a357343f8, 0x8bd9f2c11690ae85, 0xe2807793b75c0077, 0x0eb2b86894bfed0a, 0xa83d474e5f95c408, 0x440f88b57c762975, 0x77fa162866cf8889, 0x9bc8d9d3452c65f4, 0x3d4726f58e064cf6, 0xd175e90eade5a18b, 0x5aac1bcfbb750f0e, 0xb69ed4349896e273, 0x10112b1253bccb71, 0xfc23e4e9705f260c, 0xcfd67a746ae687f0, 0x23e4b58f49056a8d, 0x856b4aa9822f438f, 0x69598552a1ccaef2, 0x57d8400cc1b61e6b, 0xbbea8ff7e255f316, 0x1d6570d1297fda14, 0xf157bf2a0a9c3769, 0xc2a221b710259695, 0x2e90ee4c33c67be8, 0x881f116af8ec52ea, 0x642dde91db0fbf97, 0xeff42c50cd9f1112, 0x03c6e3abee7cfc6f, 0xa5491c8d2556d56d, 0x497bd37606b53810, 0x7a8e4deb1c0c99ec, 0x96bc82103fef7491, 0x30337d36f4c55d93, 0xdc01b2cdd726b0ee, 0xb558379f76ea1e1c, 0x596af8645509f361, 0xffe507429e23da63, 0x13d7c8b9bdc0371e, 0x20225624a77996e2, 0xcc1099df849a7b9f, 0x6a9f66f94fb0529d, 0x86ada9026c53bfe0, 0x0d745bc37ac31165, 0xe14694385920fc18, 0x47c96b1e920ad51a, 0xabfba4e5b1e93867, 0x980e3a78ab50999b, 0x743cf58388b374e6, 0xd2b30aa543995de4, 0x3e81c55e607ab099, 0xafb08019836c3cd6, 0x43824fe2a08fd1ab, 0xe50db0c46ba5f8a9, 0x093f7f3f484615d4, 0x3acae1a252ffb428, 0xd6f82e59711c5955, 0x7077d17fba367057, 0x9c451e8499d59d2a, 0x179cec458f4533af, 0xfbae23beaca6ded2, 0x5d21dc98678cf7d0, 0xb1131363446f1aad, 0x82e68dfe5ed6bb51, 0x6ed442057d35562c, 0xc85bbd23b61f7f2e, 0x246972d895fc9253, 0x4d30f78a34303ca1, 0xa102387117d3d1dc, 0x078dc757dcf9f8de, 0xebbf08acff1a15a3, 0xd84a9631e5a3b45f, 0x347859cac6405922, 0x92f7a6ec0d6a7020, 0x7ec569172e899d5d, 0xf51c9bd6381933d8, 0x192e542d1bfadea5, 0xbfa1ab0bd0d0f7a7, 0x539364f0f3331ada, 0x6066fa6de98abb26, 0x8c543596ca69565b, 0x2adbcab001437f59, 0xc6e9054b22a09224, 0xf868c01542da22bd, 0x145a0fee6139cfc0, 0xb2d5f0c8aa13e6c2, 0x5ee73f3389f00bbf, 0x6d12a1ae9349aa43, 0x81206e55b0aa473e, 0x27af91737b806e3c, 0xcb9d5e8858638341, 0x4044ac494ef32dc4, 0xac7663b26d10c0b9, 0x0af99c94a63ae9bb, 0xe6cb536f85d904c6, 0xd53ecdf29f60a53a, 0x390c0209bc834847, 0x9f83fd2f77a96145, 0x73b132d4544a8c38, 0x1ae8b786f58622ca, 0xf6da787dd665cfb7, 0x5055875b1d4fe6b5, 0xbc6748a03eac0bc8, 0x8f92d63d2415aa34, 0x63a019c607f64749, 0xc52fe6e0ccdc6e4b, 0x291d291bef3f8336, 0xa2c4dbdaf9af2db3, 0x4ef61421da4cc0ce, 0xe879eb071166e9cc, 0x044b24fc328504b1, 0x37beba61283ca54d, 0xdb8c759a0bdf4830, 0x7d038abcc0f56132, 0x91314547e3168c4f, 0xcdb9af18a9d66729, 0x218b60e38a358a54, 0x87049fc5411fa356, 0x6b36503e62fc4e2b, 0x58c3cea37845efd7, 0xb4f101585ba602aa, 0x127efe7e908c2ba8, 0xfe4c3185b36fc6d5, 0x7595c344a5ff6850, 0x99a70cbf861c852d, 0x3f28f3994d36ac2f, 0xd31a3c626ed54152, 0xe0efa2ff746ce0ae, 0x0cdd6d04578f0dd3, 0xaa5292229ca524d1, 0x46605dd9bf46c9ac, 0x2f39d88b1e8a675e, 0xc30b17703d698a23, 0x6584e856f643a321, 0x89b627add5a04e5c, 0xba43b930cf19efa0, 0x567176cbecfa02dd, 0xf0fe89ed27d02bdf, 0x1ccc46160433c6a2, 0x9715b4d712a36827, 0x7b277b2c3140855a, 0xdda8840afa6aac58, 0x319a4bf1d9894125, 0x026fd56cc330e0d9, 0xee5d1a97e0d30da4, 0x48d2e5b12bf924a6, 0xa4e02a4a081ac9db, 0x9a61ef1468607942, 0x765320ef4b83943f, 0xd0dcdfc980a9bd3d, 0x3cee1032a34a5040, 0x0f1b8eafb9f3f1bc, 0xe32941549a101cc1, 0x45a6be72513a35c3, 0xa994718972d9d8be, 0x224d83486449763b, 0xce7f4cb347aa9b46, 0x68f0b3958c80b244, 0x84c27c6eaf635f39, 0xb737e2f3b5dafec5, 0x5b052d08963913b8, 0xfd8ad22e5d133aba, 0x11b81dd57ef0d7c7, 0x78e19887df3c7935, 0x94d3577cfcdf9448, 0x325ca85a37f5bd4a, 0xde6e67a114165037, 0xed9bf93c0eaff1cb, 0x01a936c72d4c1cb6, 0xa726c9e1e66635b4, 0x4b14061ac585d8c9, 0xc0cdf4dbd315764c, 0x2cff3b20f0f69b31, 0x8a70c4063bdcb233, 0x66420bfd183f5f4e, 0x55b795600286feb2, 0xb9855a9b216513cf, 0x1f0aa5bdea4f3acd, 0xf3386a46c9acd7b0, 0x62092f012aba5bff, 0x8e3be0fa0959b682, 0x28b41fdcc2739f80, 0xc486d027e19072fd, 0xf7734ebafb29d301, 0x1b418141d8ca3e7c, 0xbdce7e6713e0177e, 0x51fcb19c3003fa03, 0xda25435d26935486, 0x36178ca60570b9fb, 0x90987380ce5a90f9, 0x7caabc7bedb97d84, 0x4f5f22e6f700dc78, 0xa36ded1dd4e33105, 0x05e2123b1fc91807, 0xe9d0ddc03c2af57a, 0x808958929de65b88, 0x6cbb9769be05b6f5, 0xca34684f752f9ff7, 0x2606a7b456cc728a, 0x15f339294c75d376, 0xf9c1f6d26f963e0b, 0x5f4e09f4a4bc1709, 0xb37cc60f875ffa74, 0x38a534ce91cf54f1, 0xd497fb35b22cb98c, 0x721804137906908e, 0x9e2acbe85ae57df3, 0xaddf5575405cdc0f, 0x41ed9a8e63bf3172, 0xe76265a8a8951870, 0x0b50aa538b76f50d, 0x35d16f0deb0c4594, 0xd9e3a0f6c8efa8e9, 0x7f6c5fd003c581eb, 0x935e902b20266c96, 0xa0ab0eb63a9fcd6a, 0x4c99c14d197c2017, 0xea163e6bd2560915, 0x0624f190f1b5e468, 0x8dfd0351e7254aed, 0x61cfccaac4c6a790, 0xc740338c0fec8e92, 0x2b72fc772c0f63ef, 0x188762ea36b6c213, 0xf4b5ad1115552f6e, 0x523a5237de7f066c, 0xbe089dccfd9ceb11, 0xd751189e5c5045e3, 0x3b63d7657fb3a89e, 0x9dec2843b499819c, 0x71dee7b8977a6ce1, 0x422b79258dc3cd1d, 0xae19b6deae202060, 0x089649f8650a0962, 0xe4a4860346e9e41f, 0x6f7d74c250794a9a, 0x834fbb39739aa7e7, 0x25c0441fb8b08ee5, 0xc9f28be49b536398, 0xfa07157981eac264, 0x1635da82a2092f19, 0xb0ba25a46923061b, 0x5c88ea5f4ac0eb66, ], [ 0x0000000000000000, 0xdda9f27ee08373ad, 0x298b4bd66e08f9df, 0xf422b9a88e8b8a72, 0x531697acdc11f3be, 0x8ebf65d23c928013, 0x7a9ddc7ab2190a61, 0xa7342e04529a79cc, 0xa62d2f59b823e77c, 0x7b84dd2758a094d1, 0x8fa6648fd62b1ea3, 0x520f96f136a86d0e, 0xf53bb8f5643214c2, 0x28924a8b84b1676f, 0xdcb0f3230a3aed1d, 0x0119015deab99eb0, 0xde82f198df49d07d, 0x032b03e63fcaa3d0, 0xf709ba4eb14129a2, 0x2aa0483051c25a0f, 0x8d946634035823c3, 0x503d944ae3db506e, 0xa41f2de26d50da1c, 0x79b6df9c8dd3a9b1, 0x78afdec1676a3701, 0xa5062cbf87e944ac, 0x512495170962cede, 0x8c8d6769e9e1bd73, 0x2bb9496dbb7bc4bf, 0xf610bb135bf8b712, 0x023202bbd5733d60, 0xdf9bf0c535f04ecd, 0x2fdd4c1a119dbe7f, 0xf274be64f11ecdd2, 0x065607cc7f9547a0, 0xdbfff5b29f16340d, 0x7ccbdbb6cd8c4dc1, 0xa16229c82d0f3e6c, 0x55409060a384b41e, 0x88e9621e4307c7b3, 0x89f06343a9be5903, 0x5459913d493d2aae, 0xa07b2895c7b6a0dc, 0x7dd2daeb2735d371, 0xdae6f4ef75afaabd, 0x074f0691952cd910, 0xf36dbf391ba75362, 0x2ec44d47fb2420cf, 0xf15fbd82ced46e02, 0x2cf64ffc2e571daf, 0xd8d4f654a0dc97dd, 0x057d042a405fe470, 0xa2492a2e12c59dbc, 0x7fe0d850f246ee11, 0x8bc261f87ccd6463, 0x566b93869c4e17ce, 0x577292db76f7897e, 0x8adb60a59674fad3, 0x7ef9d90d18ff70a1, 0xa3502b73f87c030c, 0x04640577aae67ac0, 0xd9cdf7094a65096d, 0x2def4ea1c4ee831f, 0xf046bcdf246df0b2, 0x5fba9834233b7cfe, 0x82136a4ac3b80f53, 0x7631d3e24d338521, 0xab98219cadb0f68c, 0x0cac0f98ff2a8f40, 0xd105fde61fa9fced, 0x2527444e9122769f, 0xf88eb63071a10532, 0xf997b76d9b189b82, 0x243e45137b9be82f, 0xd01cfcbbf510625d, 0x0db50ec5159311f0, 0xaa8120c14709683c, 0x7728d2bfa78a1b91, 0x830a6b17290191e3, 0x5ea39969c982e24e, 0x813869acfc72ac83, 0x5c919bd21cf1df2e, 0xa8b3227a927a555c, 0x751ad00472f926f1, 0xd22efe0020635f3d, 0x0f870c7ec0e02c90, 0xfba5b5d64e6ba6e2, 0x260c47a8aee8d54f, 0x271546f544514bff, 0xfabcb48ba4d23852, 0x0e9e0d232a59b220, 0xd337ff5dcadac18d, 0x7403d1599840b841, 0xa9aa232778c3cbec, 0x5d889a8ff648419e, 0x802168f116cb3233, 0x7067d42e32a6c281, 0xadce2650d225b12c, 0x59ec9ff85cae3b5e, 0x84456d86bc2d48f3, 0x23714382eeb7313f, 0xfed8b1fc0e344292, 0x0afa085480bfc8e0, 0xd753fa2a603cbb4d, 0xd64afb778a8525fd, 0x0be309096a065650, 0xffc1b0a1e48ddc22, 0x226842df040eaf8f, 0x855c6cdb5694d643, 0x58f59ea5b617a5ee, 0xacd7270d389c2f9c, 0x717ed573d81f5c31, 0xaee525b6edef12fc, 0x734cd7c80d6c6151, 0x876e6e6083e7eb23, 0x5ac79c1e6364988e, 0xfdf3b21a31fee142, 0x205a4064d17d92ef, 0xd478f9cc5ff6189d, 0x09d10bb2bf756b30, 0x08c80aef55ccf580, 0xd561f891b54f862d, 0x214341393bc40c5f, 0xfceab347db477ff2, 0x5bde9d4389dd063e, 0x86776f3d695e7593, 0x7255d695e7d5ffe1, 0xaffc24eb07568c4c, 0xbf7530684676f9fc, 0x62dcc216a6f58a51, 0x96fe7bbe287e0023, 0x4b5789c0c8fd738e, 0xec63a7c49a670a42, 0x31ca55ba7ae479ef, 0xc5e8ec12f46ff39d, 0x18411e6c14ec8030, 0x19581f31fe551e80, 0xc4f1ed4f1ed66d2d, 0x30d354e7905de75f, 0xed7aa69970de94f2, 0x4a4e889d2244ed3e, 0x97e77ae3c2c79e93, 0x63c5c34b4c4c14e1, 0xbe6c3135accf674c, 0x61f7c1f0993f2981, 0xbc5e338e79bc5a2c, 0x487c8a26f737d05e, 0x95d5785817b4a3f3, 0x32e1565c452eda3f, 0xef48a422a5ada992, 0x1b6a1d8a2b2623e0, 0xc6c3eff4cba5504d, 0xc7daeea9211ccefd, 0x1a731cd7c19fbd50, 0xee51a57f4f143722, 0x33f85701af97448f, 0x94cc7905fd0d3d43, 0x49658b7b1d8e4eee, 0xbd4732d39305c49c, 0x60eec0ad7386b731, 0x90a87c7257eb4783, 0x4d018e0cb768342e, 0xb92337a439e3be5c, 0x648ac5dad960cdf1, 0xc3beebde8bfab43d, 0x1e1719a06b79c790, 0xea35a008e5f24de2, 0x379c527605713e4f, 0x3685532befc8a0ff, 0xeb2ca1550f4bd352, 0x1f0e18fd81c05920, 0xc2a7ea8361432a8d, 0x6593c48733d95341, 0xb83a36f9d35a20ec, 0x4c188f515dd1aa9e, 0x91b17d2fbd52d933, 0x4e2a8dea88a297fe, 0x93837f946821e453, 0x67a1c63ce6aa6e21, 0xba08344206291d8c, 0x1d3c1a4654b36440, 0xc095e838b43017ed, 0x34b751903abb9d9f, 0xe91ea3eeda38ee32, 0xe807a2b330817082, 0x35ae50cdd002032f, 0xc18ce9655e89895d, 0x1c251b1bbe0afaf0, 0xbb11351fec90833c, 0x66b8c7610c13f091, 0x929a7ec982987ae3, 0x4f338cb7621b094e, 0xe0cfa85c654d8502, 0x3d665a2285cef6af, 0xc944e38a0b457cdd, 0x14ed11f4ebc60f70, 0xb3d93ff0b95c76bc, 0x6e70cd8e59df0511, 0x9a527426d7548f63, 0x47fb865837d7fcce, 0x46e28705dd6e627e, 0x9b4b757b3ded11d3, 0x6f69ccd3b3669ba1, 0xb2c03ead53e5e80c, 0x15f410a9017f91c0, 0xc85de2d7e1fce26d, 0x3c7f5b7f6f77681f, 0xe1d6a9018ff41bb2, 0x3e4d59c4ba04557f, 0xe3e4abba5a8726d2, 0x17c61212d40caca0, 0xca6fe06c348fdf0d, 0x6d5bce686615a6c1, 0xb0f23c168696d56c, 0x44d085be081d5f1e, 0x997977c0e89e2cb3, 0x9860769d0227b203, 0x45c984e3e2a4c1ae, 0xb1eb3d4b6c2f4bdc, 0x6c42cf358cac3871, 0xcb76e131de3641bd, 0x16df134f3eb53210, 0xe2fdaae7b03eb862, 0x3f54589950bdcbcf, 0xcf12e44674d03b7d, 0x12bb1638945348d0, 0xe699af901ad8c2a2, 0x3b305deefa5bb10f, 0x9c0473eaa8c1c8c3, 0x41ad81944842bb6e, 0xb58f383cc6c9311c, 0x6826ca42264a42b1, 0x693fcb1fccf3dc01, 0xb49639612c70afac, 0x40b480c9a2fb25de, 0x9d1d72b742785673, 0x3a295cb310e22fbf, 0xe780aecdf0615c12, 0x13a217657eead660, 0xce0be51b9e69a5cd, 0x119015deab99eb00, 0xcc39e7a04b1a98ad, 0x381b5e08c59112df, 0xe5b2ac7625126172, 0x42868272778818be, 0x9f2f700c970b6b13, 0x6b0dc9a41980e161, 0xb6a43bdaf90392cc, 0xb7bd3a8713ba0c7c, 0x6a14c8f9f3397fd1, 0x9e3671517db2f5a3, 0x439f832f9d31860e, 0xe4abad2bcfabffc2, 0x39025f552f288c6f, 0xcd20e6fda1a3061d, 0x10891483412075b0, ], [ 0x0000000000000000, 0x0dd9b4240837fd99, 0x1bb36848106ffb32, 0x166adc6c185806ab, 0x3766d09020dff664, 0x3abf64b428e80bfd, 0x2cd5b8d830b00d56, 0x210c0cfc3887f0cf, 0x6ecda12041bfecc8, 0x6314150449881151, 0x757ec96851d017fa, 0x78a77d4c59e7ea63, 0x59ab71b061601aac, 0x5472c5946957e735, 0x421819f8710fe19e, 0x4fc1addc79381c07, 0xdd9b4240837fd990, 0xd042f6648b482409, 0xc6282a08931022a2, 0xcbf19e2c9b27df3b, 0xeafd92d0a3a02ff4, 0xe72426f4ab97d26d, 0xf14efa98b3cfd4c6, 0xfc974ebcbbf8295f, 0xb356e360c2c03558, 0xbe8f5744caf7c8c1, 0xa8e58b28d2afce6a, 0xa53c3f0cda9833f3, 0x843033f0e21fc33c, 0x89e987d4ea283ea5, 0x9f835bb8f270380e, 0x925aef9cfa47c597, 0x29ee2baaa9f1ada5, 0x24379f8ea1c6503c, 0x325d43e2b99e5697, 0x3f84f7c6b1a9ab0e, 0x1e88fb3a892e5bc1, 0x13514f1e8119a658, 0x053b93729941a0f3, 0x08e2275691765d6a, 0x47238a8ae84e416d, 0x4afa3eaee079bcf4, 0x5c90e2c2f821ba5f, 0x514956e6f01647c6, 0x70455a1ac891b709, 0x7d9cee3ec0a64a90, 0x6bf63252d8fe4c3b, 0x662f8676d0c9b1a2, 0xf47569ea2a8e7435, 0xf9acddce22b989ac, 0xefc601a23ae18f07, 0xe21fb58632d6729e, 0xc313b97a0a518251, 0xceca0d5e02667fc8, 0xd8a0d1321a3e7963, 0xd5796516120984fa, 0x9ab8c8ca6b3198fd, 0x97617cee63066564, 0x810ba0827b5e63cf, 0x8cd214a673699e56, 0xadde185a4bee6e99, 0xa007ac7e43d99300, 0xb66d70125b8195ab, 0xbbb4c43653b66832, 0x53dc575553e35b4a, 0x5e05e3715bd4a6d3, 0x486f3f1d438ca078, 0x45b68b394bbb5de1, 0x64ba87c5733cad2e, 0x696333e17b0b50b7, 0x7f09ef8d6353561c, 0x72d05ba96b64ab85, 0x3d11f675125cb782, 0x30c842511a6b4a1b, 0x26a29e3d02334cb0, 0x2b7b2a190a04b129, 0x0a7726e5328341e6, 0x07ae92c13ab4bc7f, 0x11c44ead22ecbad4, 0x1c1dfa892adb474d, 0x8e471515d09c82da, 0x839ea131d8ab7f43, 0x95f47d5dc0f379e8, 0x982dc979c8c48471, 0xb921c585f04374be, 0xb4f871a1f8748927, 0xa292adcde02c8f8c, 0xaf4b19e9e81b7215, 0xe08ab43591236e12, 0xed5300119914938b, 0xfb39dc7d814c9520, 0xf6e06859897b68b9, 0xd7ec64a5b1fc9876, 0xda35d081b9cb65ef, 0xcc5f0ceda1936344, 0xc186b8c9a9a49edd, 0x7a327cfffa12f6ef, 0x77ebc8dbf2250b76, 0x618114b7ea7d0ddd, 0x6c58a093e24af044, 0x4d54ac6fdacd008b, 0x408d184bd2fafd12, 0x56e7c427caa2fbb9, 0x5b3e7003c2950620, 0x14ffdddfbbad1a27, 0x192669fbb39ae7be, 0x0f4cb597abc2e115, 0x029501b3a3f51c8c, 0x23990d4f9b72ec43, 0x2e40b96b934511da, 0x382a65078b1d1771, 0x35f3d123832aeae8, 0xa7a93ebf796d2f7f, 0xaa708a9b715ad2e6, 0xbc1a56f76902d44d, 0xb1c3e2d3613529d4, 0x90cfee2f59b2d91b, 0x9d165a0b51852482, 0x8b7c866749dd2229, 0x86a5324341eadfb0, 0xc9649f9f38d2c3b7, 0xc4bd2bbb30e53e2e, 0xd2d7f7d728bd3885, 0xdf0e43f3208ac51c, 0xfe024f0f180d35d3, 0xf3dbfb2b103ac84a, 0xe5b127470862cee1, 0xe868936300553378, 0xa7b8aeaaa7c6b694, 0xaa611a8eaff14b0d, 0xbc0bc6e2b7a94da6, 0xb1d272c6bf9eb03f, 0x90de7e3a871940f0, 0x9d07ca1e8f2ebd69, 0x8b6d16729776bbc2, 0x86b4a2569f41465b, 0xc9750f8ae6795a5c, 0xc4acbbaeee4ea7c5, 0xd2c667c2f616a16e, 0xdf1fd3e6fe215cf7, 0xfe13df1ac6a6ac38, 0xf3ca6b3ece9151a1, 0xe5a0b752d6c9570a, 0xe8790376defeaa93, 0x7a23ecea24b96f04, 0x77fa58ce2c8e929d, 0x619084a234d69436, 0x6c4930863ce169af, 0x4d453c7a04669960, 0x409c885e0c5164f9, 0x56f6543214096252, 0x5b2fe0161c3e9fcb, 0x14ee4dca650683cc, 0x1937f9ee6d317e55, 0x0f5d2582756978fe, 0x028491a67d5e8567, 0x23889d5a45d975a8, 0x2e51297e4dee8831, 0x383bf51255b68e9a, 0x35e241365d817303, 0x8e5685000e371b31, 0x838f31240600e6a8, 0x95e5ed481e58e003, 0x983c596c166f1d9a, 0xb93055902ee8ed55, 0xb4e9e1b426df10cc, 0xa2833dd83e871667, 0xaf5a89fc36b0ebfe, 0xe09b24204f88f7f9, 0xed42900447bf0a60, 0xfb284c685fe70ccb, 0xf6f1f84c57d0f152, 0xd7fdf4b06f57019d, 0xda2440946760fc04, 0xcc4e9cf87f38faaf, 0xc19728dc770f0736, 0x53cdc7408d48c2a1, 0x5e147364857f3f38, 0x487eaf089d273993, 0x45a71b2c9510c40a, 0x64ab17d0ad9734c5, 0x6972a3f4a5a0c95c, 0x7f187f98bdf8cff7, 0x72c1cbbcb5cf326e, 0x3d006660ccf72e69, 0x30d9d244c4c0d3f0, 0x26b30e28dc98d55b, 0x2b6aba0cd4af28c2, 0x0a66b6f0ec28d80d, 0x07bf02d4e41f2594, 0x11d5deb8fc47233f, 0x1c0c6a9cf470dea6, 0xf464f9fff425edde, 0xf9bd4ddbfc121047, 0xefd791b7e44a16ec, 0xe20e2593ec7deb75, 0xc302296fd4fa1bba, 0xcedb9d4bdccde623, 0xd8b14127c495e088, 0xd568f503cca21d11, 0x9aa958dfb59a0116, 0x9770ecfbbdadfc8f, 0x811a3097a5f5fa24, 0x8cc384b3adc207bd, 0xadcf884f9545f772, 0xa0163c6b9d720aeb, 0xb67ce007852a0c40, 0xbba554238d1df1d9, 0x29ffbbbf775a344e, 0x24260f9b7f6dc9d7, 0x324cd3f76735cf7c, 0x3f9567d36f0232e5, 0x1e996b2f5785c22a, 0x1340df0b5fb23fb3, 0x052a036747ea3918, 0x08f3b7434fddc481, 0x47321a9f36e5d886, 0x4aebaebb3ed2251f, 0x5c8172d7268a23b4, 0x5158c6f32ebdde2d, 0x7054ca0f163a2ee2, 0x7d8d7e2b1e0dd37b, 0x6be7a2470655d5d0, 0x663e16630e622849, 0xdd8ad2555dd4407b, 0xd053667155e3bde2, 0xc639ba1d4dbbbb49, 0xcbe00e39458c46d0, 0xeaec02c57d0bb61f, 0xe735b6e1753c4b86, 0xf15f6a8d6d644d2d, 0xfc86dea96553b0b4, 0xb34773751c6bacb3, 0xbe9ec751145c512a, 0xa8f41b3d0c045781, 0xa52daf190433aa18, 0x8421a3e53cb45ad7, 0x89f817c13483a74e, 0x9f92cbad2cdba1e5, 0x924b7f8924ec5c7c, 0x00119015deab99eb, 0x0dc82431d69c6472, 0x1ba2f85dcec462d9, 0x167b4c79c6f39f40, 0x37774085fe746f8f, 0x3aaef4a1f6439216, 0x2cc428cdee1b94bd, 0x211d9ce9e62c6924, 0x6edc31359f147523, 0x63058511972388ba, 0x756f597d8f7b8e11, 0x78b6ed59874c7388, 0x59bae1a5bfcb8347, 0x54635581b7fc7ede, 0x420989edafa47875, 0x4fd03dc9a79385ec, ], [ 0x0000000000000000, 0xf075e4ae5e05bdff, 0x723366771305657b, 0x824682d94d00d884, 0xe466ccee260acaf6, 0x14132840780f7709, 0x9655aa99350faf8d, 0x66204e376b0a1272, 0x5a1536f7e31b8b69, 0xaa60d259bd1e3696, 0x28265080f01eee12, 0xd853b42eae1b53ed, 0xbe73fa19c511419f, 0x4e061eb79b14fc60, 0xcc409c6ed61424e4, 0x3c3578c08811991b, 0xb42a6defc63716d2, 0x445f89419832ab2d, 0xc6190b98d53273a9, 0x366cef368b37ce56, 0x504ca101e03ddc24, 0xa03945afbe3861db, 0x227fc776f338b95f, 0xd20a23d8ad3d04a0, 0xee3f5b18252c9dbb, 0x1e4abfb67b292044, 0x9c0c3d6f3629f8c0, 0x6c79d9c1682c453f, 0x0a5997f60326574d, 0xfa2c73585d23eab2, 0x786af18110233236, 0x881f152f4e268fc9, 0xfa8c74f423603321, 0x0af9905a7d658ede, 0x88bf12833065565a, 0x78caf62d6e60eba5, 0x1eeab81a056af9d7, 0xee9f5cb45b6f4428, 0x6cd9de6d166f9cac, 0x9cac3ac3486a2153, 0xa0994203c07bb848, 0x50eca6ad9e7e05b7, 0xd2aa2474d37edd33, 0x22dfc0da8d7b60cc, 0x44ff8eede67172be, 0xb48a6a43b874cf41, 0x36cce89af57417c5, 0xc6b90c34ab71aa3a, 0x4ea6191be55725f3, 0xbed3fdb5bb52980c, 0x3c957f6cf6524088, 0xcce09bc2a857fd77, 0xaac0d5f5c35def05, 0x5ab5315b9d5852fa, 0xd8f3b382d0588a7e, 0x2886572c8e5d3781, 0x14b32fec064cae9a, 0xe4c6cb4258491365, 0x6680499b1549cbe1, 0x96f5ad354b4c761e, 0xf0d5e3022046646c, 0x00a007ac7e43d993, 0x82e6857533430117, 0x729361db6d46bce8, 0x67c046c3e9ce78c7, 0x97b5a26db7cbc538, 0x15f320b4facb1dbc, 0xe586c41aa4cea043, 0x83a68a2dcfc4b231, 0x73d36e8391c10fce, 0xf195ec5adcc1d74a, 0x01e008f482c46ab5, 0x3dd570340ad5f3ae, 0xcda0949a54d04e51, 0x4fe6164319d096d5, 0xbf93f2ed47d52b2a, 0xd9b3bcda2cdf3958, 0x29c6587472da84a7, 0xab80daad3fda5c23, 0x5bf53e0361dfe1dc, 0xd3ea2b2c2ff96e15, 0x239fcf8271fcd3ea, 0xa1d94d5b3cfc0b6e, 0x51aca9f562f9b691, 0x378ce7c209f3a4e3, 0xc7f9036c57f6191c, 0x45bf81b51af6c198, 0xb5ca651b44f37c67, 0x89ff1ddbcce2e57c, 0x798af97592e75883, 0xfbcc7bacdfe78007, 0x0bb99f0281e23df8, 0x6d99d135eae82f8a, 0x9dec359bb4ed9275, 0x1faab742f9ed4af1, 0xefdf53eca7e8f70e, 0x9d4c3237caae4be6, 0x6d39d69994abf619, 0xef7f5440d9ab2e9d, 0x1f0ab0ee87ae9362, 0x792afed9eca48110, 0x895f1a77b2a13cef, 0x0b1998aeffa1e46b, 0xfb6c7c00a1a45994, 0xc75904c029b5c08f, 0x372ce06e77b07d70, 0xb56a62b73ab0a5f4, 0x451f861964b5180b, 0x233fc82e0fbf0a79, 0xd34a2c8051bab786, 0x510cae591cba6f02, 0xa1794af742bfd2fd, 0x29665fd80c995d34, 0xd913bb76529ce0cb, 0x5b5539af1f9c384f, 0xab20dd01419985b0, 0xcd0093362a9397c2, 0x3d75779874962a3d, 0xbf33f5413996f2b9, 0x4f4611ef67934f46, 0x7373692fef82d65d, 0x83068d81b1876ba2, 0x01400f58fc87b326, 0xf135ebf6a2820ed9, 0x9715a5c1c9881cab, 0x6760416f978da154, 0xe526c3b6da8d79d0, 0x155327188488c42f, 0xcf808d87d39cf18e, 0x3ff569298d994c71, 0xbdb3ebf0c09994f5, 0x4dc60f5e9e9c290a, 0x2be64169f5963b78, 0xdb93a5c7ab938687, 0x59d5271ee6935e03, 0xa9a0c3b0b896e3fc, 0x9595bb7030877ae7, 0x65e05fde6e82c718, 0xe7a6dd0723821f9c, 0x17d339a97d87a263, 0x71f3779e168db011, 0x8186933048880dee, 0x03c011e90588d56a, 0xf3b5f5475b8d6895, 0x7baae06815abe75c, 0x8bdf04c64bae5aa3, 0x0999861f06ae8227, 0xf9ec62b158ab3fd8, 0x9fcc2c8633a12daa, 0x6fb9c8286da49055, 0xedff4af120a448d1, 0x1d8aae5f7ea1f52e, 0x21bfd69ff6b06c35, 0xd1ca3231a8b5d1ca, 0x538cb0e8e5b5094e, 0xa3f95446bbb0b4b1, 0xc5d91a71d0baa6c3, 0x35acfedf8ebf1b3c, 0xb7ea7c06c3bfc3b8, 0x479f98a89dba7e47, 0x350cf973f0fcc2af, 0xc5791dddaef97f50, 0x473f9f04e3f9a7d4, 0xb74a7baabdfc1a2b, 0xd16a359dd6f60859, 0x211fd13388f3b5a6, 0xa35953eac5f36d22, 0x532cb7449bf6d0dd, 0x6f19cf8413e749c6, 0x9f6c2b2a4de2f439, 0x1d2aa9f300e22cbd, 0xed5f4d5d5ee79142, 0x8b7f036a35ed8330, 0x7b0ae7c46be83ecf, 0xf94c651d26e8e64b, 0x093981b378ed5bb4, 0x8126949c36cbd47d, 0x7153703268ce6982, 0xf315f2eb25ceb106, 0x036016457bcb0cf9, 0x6540587210c11e8b, 0x9535bcdc4ec4a374, 0x17733e0503c47bf0, 0xe706daab5dc1c60f, 0xdb33a26bd5d05f14, 0x2b4646c58bd5e2eb, 0xa900c41cc6d53a6f, 0x597520b298d08790, 0x3f556e85f3da95e2, 0xcf208a2baddf281d, 0x4d6608f2e0dff099, 0xbd13ec5cbeda4d66, 0xa840cb443a528949, 0x58352fea645734b6, 0xda73ad332957ec32, 0x2a06499d775251cd, 0x4c2607aa1c5843bf, 0xbc53e304425dfe40, 0x3e1561dd0f5d26c4, 0xce60857351589b3b, 0xf255fdb3d9490220, 0x0220191d874cbfdf, 0x80669bc4ca4c675b, 0x70137f6a9449daa4, 0x1633315dff43c8d6, 0xe646d5f3a1467529, 0x6400572aec46adad, 0x9475b384b2431052, 0x1c6aa6abfc659f9b, 0xec1f4205a2602264, 0x6e59c0dcef60fae0, 0x9e2c2472b165471f, 0xf80c6a45da6f556d, 0x08798eeb846ae892, 0x8a3f0c32c96a3016, 0x7a4ae89c976f8de9, 0x467f905c1f7e14f2, 0xb60a74f2417ba90d, 0x344cf62b0c7b7189, 0xc4391285527ecc76, 0xa2195cb23974de04, 0x526cb81c677163fb, 0xd02a3ac52a71bb7f, 0x205fde6b74740680, 0x52ccbfb01932ba68, 0xa2b95b1e47370797, 0x20ffd9c70a37df13, 0xd08a3d69543262ec, 0xb6aa735e3f38709e, 0x46df97f0613dcd61, 0xc49915292c3d15e5, 0x34ecf1877238a81a, 0x08d98947fa293101, 0xf8ac6de9a42c8cfe, 0x7aeaef30e92c547a, 0x8a9f0b9eb729e985, 0xecbf45a9dc23fbf7, 0x1ccaa10782264608, 0x9e8c23decf269e8c, 0x6ef9c77091232373, 0xe6e6d25fdf05acba, 0x169336f181001145, 0x94d5b428cc00c9c1, 0x64a050869205743e, 0x02801eb1f90f664c, 0xf2f5fa1fa70adbb3, 0x70b378c6ea0a0337, 0x80c69c68b40fbec8, 0xbcf3e4a83c1e27d3, 0x4c860006621b9a2c, 0xcec082df2f1b42a8, 0x3eb56671711eff57, 0x589528461a14ed25, 0xa8e0cce8441150da, 0x2aa64e310911885e, 0xdad3aa9f571435a1, ], [ 0x0000000000000000, 0xe05dd497ca393ae4, 0x526306043b7c6b4d, 0xb23ed293f14551a9, 0xa4c60c0876f8d69a, 0x449bd89fbcc1ec7e, 0xf6a50a0c4d84bdd7, 0x16f8de9b87bd8733, 0xdb54b73b42ffb3b1, 0x3b0963ac88c68955, 0x8937b13f7983d8fc, 0x696a65a8b3bae218, 0x7f92bb333407652b, 0x9fcf6fa4fe3e5fcf, 0x2df1bd370f7b0e66, 0xcdac69a0c5423482, 0x2471c15d2af179e7, 0xc42c15cae0c84303, 0x7612c759118d12aa, 0x964f13cedbb4284e, 0x80b7cd555c09af7d, 0x60ea19c296309599, 0xd2d4cb516775c430, 0x32891fc6ad4cfed4, 0xff257666680eca56, 0x1f78a2f1a237f0b2, 0xad4670625372a11b, 0x4d1ba4f5994b9bff, 0x5be37a6e1ef61ccc, 0xbbbeaef9d4cf2628, 0x09807c6a258a7781, 0xe9dda8fdefb34d65, 0x48e382ba55e2f3ce, 0xa8be562d9fdbc92a, 0x1a8084be6e9e9883, 0xfadd5029a4a7a267, 0xec258eb2231a2554, 0x0c785a25e9231fb0, 0xbe4688b618664e19, 0x5e1b5c21d25f74fd, 0x93b73581171d407f, 0x73eae116dd247a9b, 0xc1d433852c612b32, 0x2189e712e65811d6, 0x3771398961e596e5, 0xd72ced1eabdcac01, 0x65123f8d5a99fda8, 0x854feb1a90a0c74c, 0x6c9243e77f138a29, 0x8ccf9770b52ab0cd, 0x3ef145e3446fe164, 0xdeac91748e56db80, 0xc8544fef09eb5cb3, 0x28099b78c3d26657, 0x9a3749eb329737fe, 0x7a6a9d7cf8ae0d1a, 0xb7c6f4dc3dec3998, 0x579b204bf7d5037c, 0xe5a5f2d8069052d5, 0x05f8264fcca96831, 0x1300f8d44b14ef02, 0xf35d2c43812dd5e6, 0x4163fed07068844f, 0xa13e2a47ba51beab, 0x91c70574abc5e79c, 0x719ad1e361fcdd78, 0xc3a4037090b98cd1, 0x23f9d7e75a80b635, 0x3501097cdd3d3106, 0xd55cddeb17040be2, 0x67620f78e6415a4b, 0x873fdbef2c7860af, 0x4a93b24fe93a542d, 0xaace66d823036ec9, 0x18f0b44bd2463f60, 0xf8ad60dc187f0584, 0xee55be479fc282b7, 0x0e086ad055fbb853, 0xbc36b843a4bee9fa, 0x5c6b6cd46e87d31e, 0xb5b6c42981349e7b, 0x55eb10be4b0da49f, 0xe7d5c22dba48f536, 0x078816ba7071cfd2, 0x1170c821f7cc48e1, 0xf12d1cb63df57205, 0x4313ce25ccb023ac, 0xa34e1ab206891948, 0x6ee27312c3cb2dca, 0x8ebfa78509f2172e, 0x3c817516f8b74687, 0xdcdca181328e7c63, 0xca247f1ab533fb50, 0x2a79ab8d7f0ac1b4, 0x9847791e8e4f901d, 0x781aad894476aaf9, 0xd92487cefe271452, 0x39795359341e2eb6, 0x8b4781cac55b7f1f, 0x6b1a555d0f6245fb, 0x7de28bc688dfc2c8, 0x9dbf5f5142e6f82c, 0x2f818dc2b3a3a985, 0xcfdc5955799a9361, 0x027030f5bcd8a7e3, 0xe22de46276e19d07, 0x501336f187a4ccae, 0xb04ee2664d9df64a, 0xa6b63cfdca207179, 0x46ebe86a00194b9d, 0xf4d53af9f15c1a34, 0x1488ee6e3b6520d0, 0xfd554693d4d66db5, 0x1d0892041eef5751, 0xaf364097efaa06f8, 0x4f6b940025933c1c, 0x59934a9ba22ebb2f, 0xb9ce9e0c681781cb, 0x0bf04c9f9952d062, 0xebad9808536bea86, 0x2601f1a89629de04, 0xc65c253f5c10e4e0, 0x7462f7acad55b549, 0x943f233b676c8fad, 0x82c7fda0e0d1089e, 0x629a29372ae8327a, 0xd0a4fba4dbad63d3, 0x30f92f3311945937, 0xb156a5c2f885d1bd, 0x510b715532bceb59, 0xe335a3c6c3f9baf0, 0x0368775109c08014, 0x1590a9ca8e7d0727, 0xf5cd7d5d44443dc3, 0x47f3afceb5016c6a, 0xa7ae7b597f38568e, 0x6a0212f9ba7a620c, 0x8a5fc66e704358e8, 0x386114fd81060941, 0xd83cc06a4b3f33a5, 0xcec41ef1cc82b496, 0x2e99ca6606bb8e72, 0x9ca718f5f7fedfdb, 0x7cfacc623dc7e53f, 0x9527649fd274a85a, 0x757ab008184d92be, 0xc744629be908c317, 0x2719b60c2331f9f3, 0x31e16897a48c7ec0, 0xd1bcbc006eb54424, 0x63826e939ff0158d, 0x83dfba0455c92f69, 0x4e73d3a4908b1beb, 0xae2e07335ab2210f, 0x1c10d5a0abf770a6, 0xfc4d013761ce4a42, 0xeab5dface673cd71, 0x0ae80b3b2c4af795, 0xb8d6d9a8dd0fa63c, 0x588b0d3f17369cd8, 0xf9b52778ad672273, 0x19e8f3ef675e1897, 0xabd6217c961b493e, 0x4b8bf5eb5c2273da, 0x5d732b70db9ff4e9, 0xbd2effe711a6ce0d, 0x0f102d74e0e39fa4, 0xef4df9e32adaa540, 0x22e19043ef9891c2, 0xc2bc44d425a1ab26, 0x70829647d4e4fa8f, 0x90df42d01eddc06b, 0x86279c4b99604758, 0x667a48dc53597dbc, 0xd4449a4fa21c2c15, 0x34194ed8682516f1, 0xddc4e62587965b94, 0x3d9932b24daf6170, 0x8fa7e021bcea30d9, 0x6ffa34b676d30a3d, 0x7902ea2df16e8d0e, 0x995f3eba3b57b7ea, 0x2b61ec29ca12e643, 0xcb3c38be002bdca7, 0x0690511ec569e825, 0xe6cd85890f50d2c1, 0x54f3571afe158368, 0xb4ae838d342cb98c, 0xa2565d16b3913ebf, 0x420b898179a8045b, 0xf0355b1288ed55f2, 0x10688f8542d46f16, 0x2091a0b653403621, 0xc0cc742199790cc5, 0x72f2a6b2683c5d6c, 0x92af7225a2056788, 0x8457acbe25b8e0bb, 0x640a7829ef81da5f, 0xd634aaba1ec48bf6, 0x36697e2dd4fdb112, 0xfbc5178d11bf8590, 0x1b98c31adb86bf74, 0xa9a611892ac3eedd, 0x49fbc51ee0fad439, 0x5f031b856747530a, 0xbf5ecf12ad7e69ee, 0x0d601d815c3b3847, 0xed3dc916960202a3, 0x04e061eb79b14fc6, 0xe4bdb57cb3887522, 0x568367ef42cd248b, 0xb6deb37888f41e6f, 0xa0266de30f49995c, 0x407bb974c570a3b8, 0xf2456be73435f211, 0x1218bf70fe0cc8f5, 0xdfb4d6d03b4efc77, 0x3fe90247f177c693, 0x8dd7d0d40032973a, 0x6d8a0443ca0badde, 0x7b72dad84db62aed, 0x9b2f0e4f878f1009, 0x2911dcdc76ca41a0, 0xc94c084bbcf37b44, 0x6872220c06a2c5ef, 0x882ff69bcc9bff0b, 0x3a1124083ddeaea2, 0xda4cf09ff7e79446, 0xccb42e04705a1375, 0x2ce9fa93ba632991, 0x9ed728004b267838, 0x7e8afc97811f42dc, 0xb3269537445d765e, 0x537b41a08e644cba, 0xe14593337f211d13, 0x011847a4b51827f7, 0x17e0993f32a5a0c4, 0xf7bd4da8f89c9a20, 0x45839f3b09d9cb89, 0xa5de4bacc3e0f16d, 0x4c03e3512c53bc08, 0xac5e37c6e66a86ec, 0x1e60e555172fd745, 0xfe3d31c2dd16eda1, 0xe8c5ef595aab6a92, 0x08983bce90925076, 0xbaa6e95d61d701df, 0x5afb3dcaabee3b3b, 0x9757546a6eac0fb9, 0x770a80fda495355d, 0xc534526e55d064f4, 0x256986f99fe95e10, 0x339158621854d923, 0xd3cc8cf5d26de3c7, 0x61f25e662328b26e, 0x81af8af1e911888a, ], ]; } crc-fast-1.10.0/src/test/consts.rs000064400000000000000000000425341046102023000150420ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. #![cfg(test)] #![allow(dead_code)] use crate::crc16::consts::{ CRC16_ARC, CRC16_CDMA2000, CRC16_CMS, CRC16_DDS_110, CRC16_DECT_R, CRC16_DECT_X, CRC16_DNP, CRC16_EN_13757, CRC16_GENIBUS, CRC16_GSM, CRC16_IBM_3740, CRC16_IBM_SDLC, CRC16_ISO_IEC_14443_3_A, CRC16_KERMIT, CRC16_LJ1200, CRC16_M17, CRC16_MAXIM_DOW, CRC16_MCRF4XX, CRC16_MODBUS, CRC16_NRSC_5, CRC16_OPENSAFETY_A, CRC16_OPENSAFETY_B, CRC16_PROFIBUS, CRC16_RIELLO, CRC16_SPI_FUJITSU, CRC16_T10_DIF, CRC16_TELEDISK, CRC16_TMS37157, CRC16_UMTS, CRC16_USB, CRC16_XMODEM, }; use crate::crc32::consts::{ CRC32_AIXM, CRC32_AUTOSAR, CRC32_BASE91_D, CRC32_BZIP2, CRC32_CD_ROM_EDC, CRC32_CKSUM, CRC32_ISCSI, CRC32_ISO_HDLC, CRC32_JAMCRC, CRC32_MEF, CRC32_MPEG_2, CRC32_XFER, }; use crate::crc64::consts::{ CRC64_ECMA_182, CRC64_GO_ISO, CRC64_MS, CRC64_NVME, CRC64_REDIS, CRC64_WE, CRC64_XZ, }; use crate::test::enums::*; use crate::test::structs::*; use crc::Table; pub const TEST_CHECK_STRING: &[u8] = b"123456789"; pub const TEST_256_BYTES_STRING: &[u8] = b"1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"; pub const TEST_255_BYTES_STRING: &[u8] = b"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345"; pub const CRC_64_NVME_CRC: crc::Algorithm = crc::Algorithm { width: 64, poly: 0xad93d23594c93659, init: 0xffffffffffffffff, refin: true, refout: true, xorout: 0xffffffffffffffff, check: 0xae8b14860a799888, residue: 0xf310303b2b6f6e42, }; pub(crate) const RUST_CRC32_AIXM: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_AIXM); pub(crate) const RUST_CRC32_AUTOSAR: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_AUTOSAR); pub(crate) const RUST_CRC32_BASE91_D: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_BASE91_D); pub(crate) const RUST_CRC32_BZIP2: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_BZIP2); pub(crate) const RUST_CRC32_CD_ROM_EDC: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_CD_ROM_EDC); pub(crate) const RUST_CRC32_CKSUM: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_CKSUM); pub(crate) const RUST_CRC32_ISCSI: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_ISCSI); pub(crate) const RUST_CRC32_ISO_HDLC: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_ISO_HDLC); pub(crate) const RUST_CRC32_JAMCRC: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_JAMCRC); pub(crate) const RUST_CRC32_MEF: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_MEF); pub(crate) const RUST_CRC32_MPEG_2: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_MPEG_2); pub(crate) const RUST_CRC32_XFER: crc::Crc> = crc::Crc::>::new(&crc::CRC_32_XFER); pub(crate) const RUST_CRC16_ARC: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_ARC); pub(crate) const RUST_CRC16_CDMA2000: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_CDMA2000); pub(crate) const RUST_CRC16_CMS: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_CMS); pub(crate) const RUST_CRC16_DDS_110: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_DDS_110); pub(crate) const RUST_CRC16_DECT_R: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_DECT_R); pub(crate) const RUST_CRC16_DECT_X: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_DECT_X); pub(crate) const RUST_CRC16_DNP: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_DNP); pub(crate) const RUST_CRC16_EN_13757: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_EN_13757); pub(crate) const RUST_CRC16_GENIBUS: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_GENIBUS); pub(crate) const RUST_CRC16_GSM: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_GSM); pub(crate) const RUST_CRC16_IBM_3740: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_IBM_3740); pub(crate) const RUST_CRC16_IBM_SDLC: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_IBM_SDLC); pub(crate) const RUST_CRC16_ISO_IEC_14443_3_A: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_ISO_IEC_14443_3_A); pub(crate) const RUST_CRC16_KERMIT: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_KERMIT); pub(crate) const RUST_CRC16_LJ1200: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_LJ1200); pub(crate) const RUST_CRC16_M17: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_M17); pub(crate) const RUST_CRC16_MAXIM_DOW: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_MAXIM_DOW); pub(crate) const RUST_CRC16_MCRF4XX: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_MCRF4XX); pub(crate) const RUST_CRC16_MODBUS: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_MODBUS); pub(crate) const RUST_CRC16_NRSC_5: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_NRSC_5); pub(crate) const RUST_CRC16_OPENSAFETY_A: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_OPENSAFETY_A); pub(crate) const RUST_CRC16_OPENSAFETY_B: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_OPENSAFETY_B); pub(crate) const RUST_CRC16_PROFIBUS: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_PROFIBUS); pub(crate) const RUST_CRC16_RIELLO: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_RIELLO); pub(crate) const RUST_CRC16_SPI_FUJITSU: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_SPI_FUJITSU); pub(crate) const RUST_CRC16_T10_DIF: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_T10_DIF); pub(crate) const RUST_CRC16_TELEDISK: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_TELEDISK); pub(crate) const RUST_CRC16_TMS37157: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_TMS37157); pub(crate) const RUST_CRC16_UMTS: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_UMTS); pub(crate) const RUST_CRC16_USB: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_USB); pub(crate) const RUST_CRC16_XMODEM: crc::Crc> = crc::Crc::>::new(&crc::CRC_16_XMODEM); pub(crate) const RUST_CRC64_ECMA_182: crc::Crc> = crc::Crc::>::new(&crc::CRC_64_ECMA_182); pub(crate) const RUST_CRC64_GO_ISO: crc::Crc> = crc::Crc::>::new(&crc::CRC_64_GO_ISO); pub(crate) const RUST_CRC64_MS: crc::Crc> = crc::Crc::>::new(&crc::CRC_64_MS); pub(crate) const RUST_CRC64_NVME: crc::Crc> = crc::Crc::>::new(&CRC_64_NVME_CRC); pub(crate) const RUST_CRC64_REDIS: crc::Crc> = crc::Crc::>::new(&crc::CRC_64_REDIS); pub(crate) const RUST_CRC64_WE: crc::Crc> = crc::Crc::>::new(&crc::CRC_64_WE); pub(crate) const RUST_CRC64_XZ: crc::Crc> = crc::Crc::>::new(&crc::CRC_64_XZ); pub(crate) const TEST_CRC64_ECMA_182: Crc64TestConfig = Crc64TestConfig { params: CRC64_ECMA_182, reference_impl: &RUST_CRC64_ECMA_182, }; pub(crate) const TEST_CRC64_GO_ISO: Crc64TestConfig = Crc64TestConfig { params: CRC64_GO_ISO, reference_impl: &RUST_CRC64_GO_ISO, }; pub(crate) const TEST_CRC64_MS: Crc64TestConfig = Crc64TestConfig { params: CRC64_MS, reference_impl: &RUST_CRC64_MS, }; pub(crate) const TEST_CRC64_NVME: Crc64TestConfig = Crc64TestConfig { params: CRC64_NVME, reference_impl: &RUST_CRC64_NVME, }; pub(crate) const TEST_CRC64_REDIS: Crc64TestConfig = Crc64TestConfig { params: CRC64_REDIS, reference_impl: &RUST_CRC64_REDIS, }; pub(crate) const TEST_CRC64_WE: Crc64TestConfig = Crc64TestConfig { params: CRC64_WE, reference_impl: &RUST_CRC64_WE, }; pub(crate) const TEST_CRC64_XZ: Crc64TestConfig = Crc64TestConfig { params: CRC64_XZ, reference_impl: &RUST_CRC64_XZ, }; pub(crate) const TEST_CRC16_ARC: Crc16TestConfig = Crc16TestConfig { params: CRC16_ARC, reference_impl: &RUST_CRC16_ARC, }; pub(crate) const TEST_CRC16_CDMA2000: Crc16TestConfig = Crc16TestConfig { params: CRC16_CDMA2000, reference_impl: &RUST_CRC16_CDMA2000, }; pub(crate) const TEST_CRC16_CMS: Crc16TestConfig = Crc16TestConfig { params: CRC16_CMS, reference_impl: &RUST_CRC16_CMS, }; pub(crate) const TEST_CRC16_DDS_110: Crc16TestConfig = Crc16TestConfig { params: CRC16_DDS_110, reference_impl: &RUST_CRC16_DDS_110, }; pub(crate) const TEST_CRC16_DECT_R: Crc16TestConfig = Crc16TestConfig { params: CRC16_DECT_R, reference_impl: &RUST_CRC16_DECT_R, }; pub(crate) const TEST_CRC16_DECT_X: Crc16TestConfig = Crc16TestConfig { params: CRC16_DECT_X, reference_impl: &RUST_CRC16_DECT_X, }; pub(crate) const TEST_CRC16_DNP: Crc16TestConfig = Crc16TestConfig { params: CRC16_DNP, reference_impl: &RUST_CRC16_DNP, }; pub(crate) const TEST_CRC16_EN_13757: Crc16TestConfig = Crc16TestConfig { params: CRC16_EN_13757, reference_impl: &RUST_CRC16_EN_13757, }; pub(crate) const TEST_CRC16_GENIBUS: Crc16TestConfig = Crc16TestConfig { params: CRC16_GENIBUS, reference_impl: &RUST_CRC16_GENIBUS, }; pub(crate) const TEST_CRC16_GSM: Crc16TestConfig = Crc16TestConfig { params: CRC16_GSM, reference_impl: &RUST_CRC16_GSM, }; pub(crate) const TEST_CRC16_IBM_3740: Crc16TestConfig = Crc16TestConfig { params: CRC16_IBM_3740, reference_impl: &RUST_CRC16_IBM_3740, }; pub(crate) const TEST_CRC16_IBM_SDLC: Crc16TestConfig = Crc16TestConfig { params: CRC16_IBM_SDLC, reference_impl: &RUST_CRC16_IBM_SDLC, }; pub(crate) const TEST_CRC16_ISO_IEC_14443_3_A: Crc16TestConfig = Crc16TestConfig { params: CRC16_ISO_IEC_14443_3_A, reference_impl: &RUST_CRC16_ISO_IEC_14443_3_A, }; pub(crate) const TEST_CRC16_KERMIT: Crc16TestConfig = Crc16TestConfig { params: CRC16_KERMIT, reference_impl: &RUST_CRC16_KERMIT, }; pub(crate) const TEST_CRC16_LJ1200: Crc16TestConfig = Crc16TestConfig { params: CRC16_LJ1200, reference_impl: &RUST_CRC16_LJ1200, }; pub(crate) const TEST_CRC16_M17: Crc16TestConfig = Crc16TestConfig { params: CRC16_M17, reference_impl: &RUST_CRC16_M17, }; pub(crate) const TEST_CRC16_MAXIM_DOW: Crc16TestConfig = Crc16TestConfig { params: CRC16_MAXIM_DOW, reference_impl: &RUST_CRC16_MAXIM_DOW, }; pub(crate) const TEST_CRC16_MCRF4XX: Crc16TestConfig = Crc16TestConfig { params: CRC16_MCRF4XX, reference_impl: &RUST_CRC16_MCRF4XX, }; pub(crate) const TEST_CRC16_MODBUS: Crc16TestConfig = Crc16TestConfig { params: CRC16_MODBUS, reference_impl: &RUST_CRC16_MODBUS, }; pub(crate) const TEST_CRC16_NRSC_5: Crc16TestConfig = Crc16TestConfig { params: CRC16_NRSC_5, reference_impl: &RUST_CRC16_NRSC_5, }; pub(crate) const TEST_CRC16_OPENSAFETY_A: Crc16TestConfig = Crc16TestConfig { params: CRC16_OPENSAFETY_A, reference_impl: &RUST_CRC16_OPENSAFETY_A, }; pub(crate) const TEST_CRC16_OPENSAFETY_B: Crc16TestConfig = Crc16TestConfig { params: CRC16_OPENSAFETY_B, reference_impl: &RUST_CRC16_OPENSAFETY_B, }; pub(crate) const TEST_CRC16_PROFIBUS: Crc16TestConfig = Crc16TestConfig { params: CRC16_PROFIBUS, reference_impl: &RUST_CRC16_PROFIBUS, }; pub(crate) const TEST_CRC16_RIELLO: Crc16TestConfig = Crc16TestConfig { params: CRC16_RIELLO, reference_impl: &RUST_CRC16_RIELLO, }; pub(crate) const TEST_CRC16_SPI_FUJITSU: Crc16TestConfig = Crc16TestConfig { params: CRC16_SPI_FUJITSU, reference_impl: &RUST_CRC16_SPI_FUJITSU, }; pub(crate) const TEST_CRC16_T10_DIF: Crc16TestConfig = Crc16TestConfig { params: CRC16_T10_DIF, reference_impl: &RUST_CRC16_T10_DIF, }; pub(crate) const TEST_CRC16_TELEDISK: Crc16TestConfig = Crc16TestConfig { params: CRC16_TELEDISK, reference_impl: &RUST_CRC16_TELEDISK, }; pub(crate) const TEST_CRC16_TMS37157: Crc16TestConfig = Crc16TestConfig { params: CRC16_TMS37157, reference_impl: &RUST_CRC16_TMS37157, }; pub(crate) const TEST_CRC16_UMTS: Crc16TestConfig = Crc16TestConfig { params: CRC16_UMTS, reference_impl: &RUST_CRC16_UMTS, }; pub(crate) const TEST_CRC16_USB: Crc16TestConfig = Crc16TestConfig { params: CRC16_USB, reference_impl: &RUST_CRC16_USB, }; pub(crate) const TEST_CRC16_XMODEM: Crc16TestConfig = Crc16TestConfig { params: CRC16_XMODEM, reference_impl: &RUST_CRC16_XMODEM, }; pub(crate) const TEST_CRC32_AIXM: Crc32TestConfig = Crc32TestConfig { params: CRC32_AIXM, reference_impl: &RUST_CRC32_AIXM, }; pub(crate) const TEST_CRC32_AUTOSAR: Crc32TestConfig = Crc32TestConfig { params: CRC32_AUTOSAR, reference_impl: &RUST_CRC32_AUTOSAR, }; pub(crate) const TEST_CRC32_BASE91_D: Crc32TestConfig = Crc32TestConfig { params: CRC32_BASE91_D, reference_impl: &RUST_CRC32_BASE91_D, }; pub(crate) const TEST_CRC32_BZIP2: Crc32TestConfig = Crc32TestConfig { params: CRC32_BZIP2, reference_impl: &RUST_CRC32_BZIP2, }; pub(crate) const TEST_CRC32_CD_ROM_EDC: Crc32TestConfig = Crc32TestConfig { params: CRC32_CD_ROM_EDC, reference_impl: &RUST_CRC32_CD_ROM_EDC, }; pub(crate) const TEST_CRC32_CKSUM: Crc32TestConfig = Crc32TestConfig { params: CRC32_CKSUM, reference_impl: &RUST_CRC32_CKSUM, }; pub(crate) const TEST_CRC32_ISCSI: Crc32TestConfig = Crc32TestConfig { params: CRC32_ISCSI, reference_impl: &RUST_CRC32_ISCSI, }; pub(crate) const TEST_CRC32_ISO_HDLC: Crc32TestConfig = Crc32TestConfig { params: CRC32_ISO_HDLC, reference_impl: &RUST_CRC32_ISO_HDLC, }; pub(crate) const TEST_CRC32_JAMCRC: Crc32TestConfig = Crc32TestConfig { params: CRC32_JAMCRC, reference_impl: &RUST_CRC32_JAMCRC, }; pub(crate) const TEST_CRC32_MEF: Crc32TestConfig = Crc32TestConfig { params: CRC32_MEF, reference_impl: &RUST_CRC32_MEF, }; pub(crate) const TEST_CRC32_MPEG_2: Crc32TestConfig = Crc32TestConfig { params: CRC32_MPEG_2, reference_impl: &RUST_CRC32_MPEG_2, }; pub(crate) const TEST_CRC32_XFER: Crc32TestConfig = Crc32TestConfig { params: CRC32_XFER, reference_impl: &RUST_CRC32_XFER, }; pub(crate) const TEST_ALL_CONFIGS: &[AnyCrcTestConfig] = &[ AnyCrcTestConfig::CRC16(&TEST_CRC16_ARC), AnyCrcTestConfig::CRC16(&TEST_CRC16_CDMA2000), AnyCrcTestConfig::CRC16(&TEST_CRC16_CMS), AnyCrcTestConfig::CRC16(&TEST_CRC16_DDS_110), AnyCrcTestConfig::CRC16(&TEST_CRC16_DECT_R), AnyCrcTestConfig::CRC16(&TEST_CRC16_DECT_X), AnyCrcTestConfig::CRC16(&TEST_CRC16_DNP), AnyCrcTestConfig::CRC16(&TEST_CRC16_EN_13757), AnyCrcTestConfig::CRC16(&TEST_CRC16_GENIBUS), AnyCrcTestConfig::CRC16(&TEST_CRC16_GSM), AnyCrcTestConfig::CRC16(&TEST_CRC16_IBM_3740), AnyCrcTestConfig::CRC16(&TEST_CRC16_IBM_SDLC), AnyCrcTestConfig::CRC16(&TEST_CRC16_ISO_IEC_14443_3_A), AnyCrcTestConfig::CRC16(&TEST_CRC16_KERMIT), AnyCrcTestConfig::CRC16(&TEST_CRC16_LJ1200), AnyCrcTestConfig::CRC16(&TEST_CRC16_M17), AnyCrcTestConfig::CRC16(&TEST_CRC16_MAXIM_DOW), AnyCrcTestConfig::CRC16(&TEST_CRC16_MCRF4XX), AnyCrcTestConfig::CRC16(&TEST_CRC16_MODBUS), AnyCrcTestConfig::CRC16(&TEST_CRC16_NRSC_5), AnyCrcTestConfig::CRC16(&TEST_CRC16_OPENSAFETY_A), AnyCrcTestConfig::CRC16(&TEST_CRC16_OPENSAFETY_B), AnyCrcTestConfig::CRC16(&TEST_CRC16_PROFIBUS), AnyCrcTestConfig::CRC16(&TEST_CRC16_RIELLO), AnyCrcTestConfig::CRC16(&TEST_CRC16_SPI_FUJITSU), AnyCrcTestConfig::CRC16(&TEST_CRC16_T10_DIF), AnyCrcTestConfig::CRC16(&TEST_CRC16_TELEDISK), AnyCrcTestConfig::CRC16(&TEST_CRC16_TMS37157), AnyCrcTestConfig::CRC16(&TEST_CRC16_UMTS), AnyCrcTestConfig::CRC16(&TEST_CRC16_USB), AnyCrcTestConfig::CRC16(&TEST_CRC16_XMODEM), AnyCrcTestConfig::CRC32(&TEST_CRC32_AIXM), AnyCrcTestConfig::CRC32(&TEST_CRC32_AUTOSAR), AnyCrcTestConfig::CRC32(&TEST_CRC32_BASE91_D), AnyCrcTestConfig::CRC32(&TEST_CRC32_BZIP2), AnyCrcTestConfig::CRC32(&TEST_CRC32_CD_ROM_EDC), AnyCrcTestConfig::CRC32(&TEST_CRC32_CKSUM), AnyCrcTestConfig::CRC32(&TEST_CRC32_ISCSI), AnyCrcTestConfig::CRC32(&TEST_CRC32_ISO_HDLC), AnyCrcTestConfig::CRC32(&TEST_CRC32_JAMCRC), AnyCrcTestConfig::CRC32(&TEST_CRC32_MEF), AnyCrcTestConfig::CRC32(&TEST_CRC32_MPEG_2), AnyCrcTestConfig::CRC32(&TEST_CRC32_XFER), AnyCrcTestConfig::CRC64(&TEST_CRC64_ECMA_182), AnyCrcTestConfig::CRC64(&TEST_CRC64_GO_ISO), AnyCrcTestConfig::CRC64(&TEST_CRC64_MS), AnyCrcTestConfig::CRC64(&TEST_CRC64_NVME), AnyCrcTestConfig::CRC64(&TEST_CRC64_REDIS), AnyCrcTestConfig::CRC64(&TEST_CRC64_WE), AnyCrcTestConfig::CRC64(&TEST_CRC64_XZ), ]; crc-fast-1.10.0/src/test/enums.rs000064400000000000000000000044241046102023000146540ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. #![cfg(test)] #![allow(dead_code)] use crate::test::structs::*; use crate::CrcAlgorithm; use crate::CrcParams; use crc::Crc; pub enum AnyCrcTestConfig { CRC16(&'static Crc16TestConfig), CRC32(&'static Crc32TestConfig), CRC64(&'static Crc64TestConfig), } impl AnyCrcTestConfig { pub fn get_params(&self) -> &CrcParams { match self { AnyCrcTestConfig::CRC16(cfg) => &cfg.params, AnyCrcTestConfig::CRC32(cfg) => &cfg.params, AnyCrcTestConfig::CRC64(cfg) => &cfg.params, } } pub fn get_width(&self) -> u8 { self.get_params().width } pub fn get_poly(&self) -> u64 { self.get_params().poly } pub fn get_refin(&self) -> bool { self.get_params().refin } pub fn get_algorithm(&self) -> CrcAlgorithm { self.get_params().algorithm } pub fn get_init(&self) -> u64 { self.get_params().init } pub fn get_init_algorithm(&self) -> u64 { self.get_params().init_algorithm } pub fn get_xorout(&self) -> u64 { self.get_params().xorout } pub fn get_check(&self) -> u64 { self.get_params().check } pub fn get_name(&self) -> &str { self.get_params().name } pub fn get_keys(&self) -> [u64; 23] { self.get_params().keys.to_keys_array_23() } pub fn checksum_with_reference(&self, data: &[u8]) -> u64 { match self { AnyCrcTestConfig::CRC16(cfg) => cfg.reference_impl.checksum(data) as u64, AnyCrcTestConfig::CRC32(cfg) => cfg.reference_impl.checksum(data) as u64, AnyCrcTestConfig::CRC64(cfg) => cfg.reference_impl.checksum(data), } } pub fn with_reference_impl(&self, f: F) -> R where F: FnOnce( Option<&Crc>>, Option<&Crc>>, Option<&Crc>>, ) -> R, { match self { AnyCrcTestConfig::CRC16(cfg) => f(Some(cfg.reference_impl), None, None), AnyCrcTestConfig::CRC32(cfg) => f(None, Some(cfg.reference_impl), None), AnyCrcTestConfig::CRC64(cfg) => f(None, None, Some(cfg.reference_impl)), } } } crc-fast-1.10.0/src/test/future_proof_tests.rs000064400000000000000000001502101046102023000174610ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! Tests for future-proof CrcKeysStorage and CrcParams functionality #![cfg(test)] use crate::{CrcAlgorithm, CrcKeysStorage, CrcParams}; #[test] fn test_crc_keys_storage_bounds_checking() { // Test KeysFold256 variant (23 keys) let keys_23 = [1u64; 23]; let storage_23 = CrcKeysStorage::from_keys_fold_256(keys_23); // Test valid indices for i in 0..23 { assert_eq!( storage_23.get_key(i), 1, "Valid index {} should return key value", i ); } // Test out-of-bounds indices return 0 assert_eq!( storage_23.get_key(23), 0, "Index 23 should return 0 for 23-key storage" ); assert_eq!( storage_23.get_key(24), 0, "Index 24 should return 0 for 23-key storage" ); assert_eq!( storage_23.get_key(100), 0, "Large index should return 0 for 23-key storage" ); // Test KeysFutureTest variant (25 keys) let keys_25 = [2u64; 25]; let storage_25 = CrcKeysStorage::from_keys_fold_future_test(keys_25); // Test valid indices for i in 0..25 { assert_eq!( storage_25.get_key(i), 2, "Valid index {} should return key value", i ); } // Test out-of-bounds indices return 0 assert_eq!( storage_25.get_key(25), 0, "Index 25 should return 0 for 25-key storage" ); assert_eq!( storage_25.get_key(26), 0, "Index 26 should return 0 for 25-key storage" ); assert_eq!( storage_25.get_key(100), 0, "Large index should return 0 for 25-key storage" ); } #[test] #[allow(deprecated)] fn test_crc_params_get_key_checked() { // Create test CrcParams with 23-key storage let keys_23 = [42u64; 23]; let params_23 = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Test CRC", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: CrcKeysStorage::from_keys_fold_256(keys_23), }; // Test valid indices return Some(value) for i in 0..23 { assert_eq!( params_23.get_key_checked(i), Some(42), "Valid index {} should return Some(42)", i ); } // Test out-of-bounds indices return None assert_eq!( params_23.get_key_checked(23), None, "Index 23 should return None for 23-key params" ); assert_eq!( params_23.get_key_checked(24), None, "Index 24 should return None for 23-key params" ); assert_eq!( params_23.get_key_checked(100), None, "Large index should return None for 23-key params" ); // Create test CrcParams with 25-key storage let keys_25 = [84u64; 25]; let params_25 = CrcParams { algorithm: CrcAlgorithm::Crc64Custom, name: "Test CRC 64", width: 64, poly: 0x42F0E1EBA9EA3693, init: 0xFFFFFFFFFFFFFFFF, init_algorithm: 0xFFFFFFFFFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFFFFFFFFFF, check: 0x123456789ABCDEF0, keys: CrcKeysStorage::from_keys_fold_future_test(keys_25), }; // Test valid indices return Some(value) for i in 0..25 { assert_eq!( params_25.get_key_checked(i), Some(84), "Valid index {} should return Some(84)", i ); } // Test out-of-bounds indices return None assert_eq!( params_25.get_key_checked(25), None, "Index 25 should return None for 25-key params" ); assert_eq!( params_25.get_key_checked(26), None, "Index 26 should return None for 25-key params" ); assert_eq!( params_25.get_key_checked(100), None, "Large index should return None for 25-key params" ); } #[test] #[allow(deprecated)] fn test_key_count_returns_correct_values() { // Test KeysFold256 variant let keys_23 = [1u64; 23]; let storage_23 = CrcKeysStorage::from_keys_fold_256(keys_23); assert_eq!( storage_23.key_count(), 23, "KeysFold256 should report 23 keys" ); let params_23 = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Test CRC", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: storage_23, }; assert_eq!( params_23.key_count(), 23, "CrcParams with KeysFold256 should report 23 keys" ); // Test KeysFutureTest variant let keys_25 = [2u64; 25]; let storage_25 = CrcKeysStorage::from_keys_fold_future_test(keys_25); assert_eq!( storage_25.key_count(), 25, "KeysFutureTest should report 25 keys" ); let params_25 = CrcParams { algorithm: CrcAlgorithm::Crc64Custom, name: "Test CRC 64", width: 64, poly: 0x42F0E1EBA9EA3693, init: 0xFFFFFFFFFFFFFFFF, init_algorithm: 0xFFFFFFFFFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFFFFFFFFFF, check: 0x123456789ABCDEF0, keys: storage_25, }; assert_eq!( params_25.key_count(), 25, "CrcParams with KeysFutureTest should report 25 keys" ); } #[test] #[allow(deprecated)] fn test_crc_params_get_key_bounds_checking() { // Create test CrcParams with 23-key storage let keys_23 = [99u64; 23]; let params_23 = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Test CRC", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: CrcKeysStorage::from_keys_fold_256(keys_23), }; // Test valid indices for i in 0..23 { assert_eq!( params_23.get_key(i), 99, "Valid index {} should return 99", i ); } // Test out-of-bounds indices return 0 assert_eq!( params_23.get_key(23), 0, "Index 23 should return 0 for 23-key params" ); assert_eq!( params_23.get_key(24), 0, "Index 24 should return 0 for 23-key params" ); assert_eq!( params_23.get_key(100), 0, "Large index should return 0 for 23-key params" ); } #[test] #[allow(deprecated)] fn test_third_party_const_definitions_compatibility() { // Mock third-party const definitions using the new format // These simulate how third-party applications would define custom CrcParams // Mock third-party CRC-32 definition (similar to existing library constants) const MOCK_THIRD_PARTY_CRC32: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Mock Third Party CRC-32", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0xE3069283, keys: CrcKeysStorage::from_keys_fold_256([ 0x1234567890ABCDEF, 0x2345678901BCDEF0, 0x3456789012CDEF01, 0x456789023DEF012, 0x56789034EF0123, 0x6789045F01234, 0x789056012345, 0x89067123456, 0x9078234567, 0xA089345678, 0xB09A456789, 0xC0AB56789A, 0xD0BC6789AB, 0xE0CD789ABC, 0xF0DE89ABCD, 0x10EF9ABCDE, 0x210ABCDEF0, 0x321BCDEF01, 0x432CDEF012, 0x543DEF0123, 0x654EF01234, 0x765F012345, 0x876012345, ]), }; // Mock third-party CRC-64 definition const MOCK_THIRD_PARTY_CRC64: CrcParams = CrcParams { algorithm: CrcAlgorithm::Crc64Custom, name: "Mock Third Party CRC-64", width: 64, poly: 0x42F0E1EBA9EA3693, init: 0xFFFFFFFFFFFFFFFF, init_algorithm: 0xFFFFFFFFFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFFFFFFFFFF, check: 0x6C40DF5F0B497347, keys: CrcKeysStorage::from_keys_fold_256([ 0xFEDCBA0987654321, 0xEDCBA09876543210, 0xDCBA098765432101, 0xCBA0987654321012, 0xBA09876543210123, 0xA098765432101234, 0x9087654321012345, 0x8076543210123456, 0x7065432101234567, 0x6054321012345678, 0x5043210123456789, 0x403210123456789A, 0x3210123456789AB, 0x210123456789ABC, 0x10123456789ABCD, 0x123456789ABCDE, 0x23456789ABCDEF, 0x3456789ABCDEF0, 0x456789ABCDEF01, 0x56789ABCDEF012, 0x6789ABCDEF0123, 0x789ABCDEF01234, 0x89ABCDEF012345, ]), }; // Test that third-party const definitions work correctly assert_eq!(MOCK_THIRD_PARTY_CRC32.key_count(), 23); assert_eq!(MOCK_THIRD_PARTY_CRC64.key_count(), 23); // Test key access patterns that third-party code might use assert_eq!(MOCK_THIRD_PARTY_CRC32.get_key(0), 0x1234567890ABCDEF); assert_eq!(MOCK_THIRD_PARTY_CRC32.get_key(22), 0x876012345); assert_eq!(MOCK_THIRD_PARTY_CRC32.get_key(23), 0); // Out of bounds assert_eq!(MOCK_THIRD_PARTY_CRC64.get_key(0), 0xFEDCBA0987654321); assert_eq!(MOCK_THIRD_PARTY_CRC64.get_key(22), 0x89ABCDEF012345); assert_eq!(MOCK_THIRD_PARTY_CRC64.get_key(23), 0); // Out of bounds // Test that checked access works as expected assert_eq!( MOCK_THIRD_PARTY_CRC32.get_key_checked(0), Some(0x1234567890ABCDEF) ); assert_eq!( MOCK_THIRD_PARTY_CRC32.get_key_checked(22), Some(0x876012345) ); assert_eq!(MOCK_THIRD_PARTY_CRC32.get_key_checked(23), None); assert_eq!( MOCK_THIRD_PARTY_CRC64.get_key_checked(0), Some(0xFEDCBA0987654321) ); assert_eq!( MOCK_THIRD_PARTY_CRC64.get_key_checked(22), Some(0x89ABCDEF012345) ); assert_eq!(MOCK_THIRD_PARTY_CRC64.get_key_checked(23), None); } #[test] #[allow(clippy::needless_range_loop)] // Intentionally testing indexed key access patterns #[allow(deprecated)] fn test_existing_key_access_patterns_continue_to_work() { // Test that common key access patterns used by existing code continue to work let test_keys = [ 0x1111111111111111, 0x2222222222222222, 0x3333333333333333, 0x4444444444444444, 0x5555555555555555, 0x6666666666666666, 0x7777777777777777, 0x8888888888888888, 0x9999999999999999, 0xAAAAAAAAAAAAAAAA, 0xBBBBBBBBBBBBBBBB, 0xCCCCCCCCCCCCCCCC, 0xDDDDDDDDDDDDDDDD, 0xEEEEEEEEEEEEEEEE, 0xFFFFFFFFFFFFFFFF, 0x1010101010101010, 0x2020202020202020, 0x3030303030303030, 0x4040404040404040, 0x5050505050505050, 0x6060606060606060, 0x7070707070707070, 0x8080808080808080, ]; let params = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Test Pattern Access", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: CrcKeysStorage::from_keys_fold_256(test_keys), }; // Pattern 1: Sequential access (common in folding algorithms) for i in 0..23 { let expected = test_keys[i]; assert_eq!( params.get_key(i), expected, "Sequential access failed at index {}", i ); } // Pattern 2: Reverse access (sometimes used in algorithms) for i in (0..23).rev() { let expected = test_keys[i]; assert_eq!( params.get_key(i), expected, "Reverse access failed at index {}", i ); } // Pattern 3: Specific indices commonly used in folding (powers of 2, etc.) let common_indices = [0, 1, 2, 4, 8, 16, 22]; for &i in &common_indices { if i < 23 { let expected = test_keys[i]; assert_eq!( params.get_key(i), expected, "Common index access failed at index {}", i ); } } // Pattern 4: Bounds checking that third-party code might rely on assert_eq!( params.get_key(23), 0, "Out-of-bounds access should return 0" ); assert_eq!( params.get_key(100), 0, "Large out-of-bounds access should return 0" ); } #[test] #[allow(clippy::needless_range_loop)] // Intentionally testing indexed key access for backwards compatibility #[allow(deprecated)] fn test_backwards_compatibility_throughout_migration_phases() { // This test simulates the migration phases to ensure backwards compatibility // Phase 1 & 2: Original array-based access patterns (simulated) let test_keys = [0x123456789ABCDEF0u64; 23]; let storage = CrcKeysStorage::from_keys_fold_256(test_keys); // Verify that the storage behaves identically to direct array access for i in 0..23 { assert_eq!( storage.get_key(i), test_keys[i], "Storage access should match array access at index {}", i ); } // Phase 3: New CrcKeysStorage-based access let params = CrcParams { algorithm: CrcAlgorithm::Crc64Custom, name: "Migration Test", width: 64, poly: 0x42F0E1EBA9EA3693, init: 0x0000000000000000, init_algorithm: 0x0000000000000000, refin: false, refout: false, xorout: 0x0000000000000000, check: 0x6C40DF5F0B497347, keys: storage, }; // Verify that CrcParams provides the same access patterns for i in 0..23 { assert_eq!( params.get_key(i), test_keys[i], "CrcParams access should match array access at index {}", i ); assert_eq!( params.get_key_checked(i), Some(test_keys[i]), "CrcParams checked access should match array access at index {}", i ); } // Verify bounds checking works consistently assert_eq!(params.get_key(23), 0, "Out-of-bounds should return 0"); assert_eq!( params.get_key_checked(23), None, "Out-of-bounds checked should return None" ); // Verify key count is correct assert_eq!(params.key_count(), 23, "Key count should be 23"); // Test compatibility with existing comparison operations assert_eq!( storage.to_keys_array_23(), test_keys, "Storage should convert back to original array" ); assert_eq!( storage, test_keys, "Storage should compare equal to original array" ); assert_eq!( test_keys, storage, "Original array should compare equal to storage" ); } #[test] #[allow(clippy::needless_range_loop)] // Intentionally testing indexed access performance #[allow(deprecated)] fn test_key_access_performance_matches_direct_array_access() { // This test verifies that CrcKeysStorage key access has zero runtime overhead // compared to direct array access. While we can't easily measure exact timing // in a unit test, we can verify that the compiler optimizations work correctly // by testing that the behavior is identical and that large-scale access works efficiently. // Create test keys with different values to avoid XOR cancellation let test_keys = [ 0x1111111111111111, 0x2222222222222222, 0x3333333333333333, 0x4444444444444444, 0x5555555555555555, 0x6666666666666666, 0x7777777777777777, 0x8888888888888888, 0x9999999999999999, 0xAAAAAAAAAAAAAAAA, 0xBBBBBBBBBBBBBBBB, 0xCCCCCCCCCCCCCCCC, 0xDDDDDDDDDDDDDDDD, 0xEEEEEEEEEEEEEEEE, 0xFFFFFFFFFFFFFFFF, 0x1010101010101010, 0x2020202020202020, 0x3030303030303030, 0x4040404040404040, 0x5050505050505050, 0x6060606060606060, 0x7070707070707070, 0x8080808080808080, ]; let storage = CrcKeysStorage::from_keys_fold_256(test_keys); let params = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Performance Test", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: storage, }; // Simulate intensive key access patterns that would reveal performance issues let iterations = 1000; let mut checksum = 0u64; // Pattern 1: Sequential access (most common in real algorithms) for iteration in 0..iterations { for i in 0..23 { checksum = checksum.wrapping_add(params.get_key(i).wrapping_mul(iteration as u64 + 1)); } } // Pattern 2: Random access pattern let access_pattern = [ 0, 5, 12, 3, 18, 7, 22, 1, 15, 9, 20, 4, 11, 16, 2, 19, 8, 14, 6, 21, 10, 17, 13, ]; for iteration in 0..iterations { for &i in &access_pattern { checksum = checksum.wrapping_add(params.get_key(i).wrapping_mul(iteration as u64 + 2)); } } // Verify that we actually accessed the keys (checksum should be non-zero) assert_ne!(checksum, 0, "Performance test should have accessed keys"); // Test that bounds checking doesn't significantly impact performance let mut bounds_checksum = 0u64; for iteration in 0..iterations { for i in 0..30 { // Include some out-of-bounds accesses bounds_checksum = bounds_checksum.wrapping_add(params.get_key(i).wrapping_mul(iteration as u64 + 3)); } } // The bounds-checked version should still work correctly assert_ne!( bounds_checksum, 0, "Bounds checking performance test should work" ); } #[test] fn test_crc_calculation_performance_before_and_after_changes() { // Test that CRC calculation performance remains identical with the new key storage use crate::{checksum, CrcAlgorithm}; // Test data of various sizes to ensure performance across different scenarios let test_data_small = b"123456789"; let test_data_medium = vec![0xAAu8; 1024]; // 1KB let test_data_large = vec![0x55u8; 65536]; // 64KB // Test multiple CRC algorithms to ensure consistent performance let algorithms = [ CrcAlgorithm::Crc32IsoHdlc, CrcAlgorithm::Crc32Iscsi, CrcAlgorithm::Crc64Nvme, CrcAlgorithm::Crc64Ecma182, ]; for algorithm in algorithms { // Small data performance let result_small = checksum(algorithm, test_data_small); assert_ne!( result_small, 0, "Small data CRC should produce non-zero result" ); // Medium data performance let result_medium = checksum(algorithm, &test_data_medium); assert_ne!( result_medium, 0, "Medium data CRC should produce non-zero result" ); // Large data performance (this would reveal significant performance regressions) let result_large = checksum(algorithm, &test_data_large); assert_ne!( result_large, 0, "Large data CRC should produce non-zero result" ); // Verify consistency across multiple runs (performance should be deterministic) let result_small_2 = checksum(algorithm, test_data_small); assert_eq!( result_small, result_small_2, "CRC results should be consistent" ); } } #[test] #[allow(deprecated)] fn test_memory_usage_impact_of_enum_based_storage() { // Test that enum-based storage doesn't significantly increase memory usage use std::mem; // Test memory size of different storage variants let keys_23 = [0u64; 23]; let keys_25 = [0u64; 25]; let storage_23 = CrcKeysStorage::from_keys_fold_256(keys_23); let storage_25 = CrcKeysStorage::from_keys_fold_future_test(keys_25); // Verify that enum storage size is reasonable let storage_23_size = mem::size_of_val(&storage_23); let storage_25_size = mem::size_of_val(&storage_25); let _array_23_size = mem::size_of_val(&keys_23); let array_25_size = mem::size_of_val(&keys_25); // Rust enums use the size of the largest variant plus discriminant/alignment // Both variants will be the same size (size of largest variant) assert_eq!( storage_23_size, storage_25_size, "Both enum variants should have the same size" ); // The enum size should be reasonable (largest variant + small overhead) assert!( storage_23_size >= array_25_size, "Enum should be at least as large as the largest variant" ); assert!( storage_23_size <= array_25_size + 16, "Enum should not add excessive overhead beyond largest variant" ); // Test CrcParams memory usage let params_23 = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Memory Test 23", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: storage_23, }; let params_25 = CrcParams { algorithm: CrcAlgorithm::Crc64Custom, name: "Memory Test 25", width: 64, poly: 0x42F0E1EBA9EA3693, init: 0xFFFFFFFFFFFFFFFF, init_algorithm: 0xFFFFFFFFFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFFFFFFFFFF, check: 0x123456789ABCDEF0, keys: storage_25, }; let params_23_size = mem::size_of_val(¶ms_23); let params_25_size = mem::size_of_val(¶ms_25); // CrcParams should have reasonable size differences based on key storage assert!( params_25_size >= params_23_size, "25-key params should be at least as large as 23-key params" ); assert!( params_25_size - params_23_size <= 16, "Size difference should be reasonable (just the extra keys)" ); // Verify that the structs are still reasonably sized assert!( params_23_size < 512, "CrcParams should not be excessively large" ); assert!( params_25_size < 512, "CrcParams should not be excessively large" ); } #[test] fn test_compiler_optimizations_eliminate_enum_dispatch() { // This test verifies that compiler optimizations work correctly by testing // that enum dispatch doesn't introduce runtime branching in hot paths // Create different keys to avoid XOR cancellation let keys_23 = [ 0x1111111111111111, 0x2222222222222222, 0x3333333333333333, 0x4444444444444444, 0x5555555555555555, 0x6666666666666666, 0x7777777777777777, 0x8888888888888888, 0x9999999999999999, 0xAAAAAAAAAAAAAAAA, 0xBBBBBBBBBBBBBBBB, 0xCCCCCCCCCCCCCCCC, 0xDDDDDDDDDDDDDDDD, 0xEEEEEEEEEEEEEEEE, 0xFFFFFFFFFFFFFFFF, 0x1010101010101010, 0x2020202020202020, 0x3030303030303030, 0x4040404040404040, 0x5050505050505050, 0x6060606060606060, 0x7070707070707070, 0x8080808080808080, ]; let keys_25 = [ 0x1111111111111111, 0x2222222222222222, 0x3333333333333333, 0x4444444444444444, 0x5555555555555555, 0x6666666666666666, 0x7777777777777777, 0x8888888888888888, 0x9999999999999999, 0xAAAAAAAAAAAAAAAA, 0xBBBBBBBBBBBBBBBB, 0xCCCCCCCCCCCCCCCC, 0xDDDDDDDDDDDDDDDD, 0xEEEEEEEEEEEEEEEE, 0xFFFFFFFFFFFFFFFF, 0x1010101010101010, 0x2020202020202020, 0x3030303030303030, 0x4040404040404040, 0x5050505050505050, 0x6060606060606060, 0x7070707070707070, 0x8080808080808080, 0x9090909090909090, 0xA0A0A0A0A0A0A0A0, ]; let storage_23 = CrcKeysStorage::from_keys_fold_256(keys_23); let storage_25 = CrcKeysStorage::from_keys_fold_future_test(keys_25); // Test that repeated access to the same storage type is efficient // (compiler should optimize away the enum matching) let mut sum_23 = 0u64; for iteration in 0..100 { for i in 0..23 { sum_23 = sum_23.wrapping_add(storage_23.get_key(i).wrapping_mul(iteration + 1)); } } let mut sum_25 = 0u64; for iteration in 0..100 { for i in 0..25 { sum_25 = sum_25.wrapping_add(storage_25.get_key(i).wrapping_mul(iteration + 1)); } } // Verify that the operations actually happened assert_ne!( sum_23, 0, "23-key operations should produce non-zero result" ); assert_ne!( sum_25, 0, "25-key operations should produce non-zero result" ); // Test mixed access patterns (this would reveal optimization issues) let storages = [storage_23, storage_25]; let mut mixed_sum = 0u64; for iteration in 0..100 { for (storage_idx, storage) in storages.iter().enumerate() { let key_count = storage.key_count(); for i in 0..key_count { mixed_sum = mixed_sum.wrapping_add( storage .get_key(i) .wrapping_mul((iteration + storage_idx + 1) as u64), ); } } } assert_ne!(mixed_sum, 0, "Mixed access should produce non-zero result"); } #[test] #[allow(clippy::needless_range_loop)] // Intentionally testing indexed key access for future variant #[allow(deprecated)] fn test_create_crc_params_using_keys_future_test_variant() { // Create test CrcParams using KeysFutureTest variant with 25 keys let test_keys_25 = [ 0x1111111111111111, 0x2222222222222222, 0x3333333333333333, 0x4444444444444444, 0x5555555555555555, 0x6666666666666666, 0x7777777777777777, 0x8888888888888888, 0x9999999999999999, 0xAAAAAAAAAAAAAAAA, 0xBBBBBBBBBBBBBBBB, 0xCCCCCCCCCCCCCCCC, 0xDDDDDDDDDDDDDDDD, 0xEEEEEEEEEEEEEEEE, 0xFFFFFFFFFFFFFFFF, 0x1010101010101010, 0x2020202020202020, 0x3030303030303030, 0x4040404040404040, 0x5050505050505050, 0x6060606060606060, 0x7070707070707070, 0x8080808080808080, 0x9090909090909090, 0xA0A0A0A0A0A0A0A0, ]; let future_params = CrcParams { algorithm: CrcAlgorithm::Crc64Custom, name: "Future Test CRC-64", width: 64, poly: 0x42F0E1EBA9EA3693, init: 0xFFFFFFFFFFFFFFFF, init_algorithm: 0xFFFFFFFFFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFFFFFFFFFF, check: 0x123456789ABCDEF0, keys: CrcKeysStorage::from_keys_fold_future_test(test_keys_25), }; // Verify that the future params work correctly assert_eq!( future_params.key_count(), 25, "Future params should have 25 keys" ); // Test access to all 25 keys for i in 0..25 { assert_eq!( future_params.get_key(i), test_keys_25[i], "Key {} should match expected value", i ); assert_eq!( future_params.get_key_checked(i), Some(test_keys_25[i]), "Checked key {} should return Some(value)", i ); } // Test out-of-bounds access assert_eq!( future_params.get_key(25), 0, "Key 25 should return 0 (out of bounds)" ); assert_eq!( future_params.get_key_checked(25), None, "Checked key 25 should return None" ); assert_eq!( future_params.get_key(30), 0, "Key 30 should return 0 (out of bounds)" ); assert_eq!( future_params.get_key_checked(30), None, "Checked key 30 should return None" ); } #[test] #[allow(deprecated)] fn test_code_gracefully_handles_different_key_array_sizes() { // Test that the same code can handle both 23-key and 25-key variants gracefully let keys_23 = [0x1234567890ABCDEFu64; 23]; let keys_25 = [0xFEDCBA0987654321u64; 25]; let params_23 = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "23-Key Test", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: CrcKeysStorage::from_keys_fold_256(keys_23), }; let params_25 = CrcParams { algorithm: CrcAlgorithm::Crc64Custom, name: "25-Key Test", width: 64, poly: 0x42F0E1EBA9EA3693, init: 0xFFFFFFFFFFFFFFFF, init_algorithm: 0xFFFFFFFFFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFFFFFFFFFF, check: 0x123456789ABCDEF0, keys: CrcKeysStorage::from_keys_fold_future_test(keys_25), }; // Generic function that works with any CrcParams regardless of key count fn process_crc_params(params: CrcParams) -> (usize, u64, u64) { let key_count = params.key_count(); let first_key = params.get_key(0); let last_valid_key = if key_count > 0 { params.get_key(key_count - 1) } else { 0 }; (key_count, first_key, last_valid_key) } // Test that the same function works with both variants let (count_23, first_23, last_23) = process_crc_params(params_23); let (count_25, first_25, last_25) = process_crc_params(params_25); assert_eq!(count_23, 23, "23-key params should report 23 keys"); assert_eq!(count_25, 25, "25-key params should report 25 keys"); assert_eq!( first_23, 0x1234567890ABCDEF, "23-key first key should match" ); assert_eq!( first_25, 0xFEDCBA0987654321, "25-key first key should match" ); assert_eq!(last_23, 0x1234567890ABCDEF, "23-key last key should match"); assert_eq!(last_25, 0xFEDCBA0987654321, "25-key last key should match"); // Test that bounds checking works consistently across variants assert_eq!( params_23.get_key(23), 0, "23-key params should return 0 for index 23" ); assert_eq!( params_23.get_key(25), 0, "23-key params should return 0 for index 25" ); assert_eq!( params_25.get_key(25), 0, "25-key params should return 0 for index 25" ); assert_eq!( params_25.get_key(30), 0, "25-key params should return 0 for index 30" ); } #[test] #[allow(deprecated)] fn test_expansion_to_larger_key_arrays_works_as_designed() { // Test that the design supports expansion to larger key arrays // Simulate a migration scenario where we add more keys let original_keys = [0x1111111111111111u64; 23]; let expanded_keys = [ // Original 23 keys 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, 0x1111111111111111, // Additional 2 keys for future expansion 0x2222222222222222, 0x3333333333333333, ]; let original_params = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Original CRC", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: CrcKeysStorage::from_keys_fold_256(original_keys), }; let expanded_params = CrcParams { algorithm: CrcAlgorithm::Crc64Custom, name: "Expanded CRC", width: 64, poly: 0x42F0E1EBA9EA3693, init: 0xFFFFFFFFFFFFFFFF, init_algorithm: 0xFFFFFFFFFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFFFFFFFFFF, check: 0x123456789ABCDEF0, keys: CrcKeysStorage::from_keys_fold_future_test(expanded_keys), }; // Test that existing key access patterns continue to work for i in 0..23 { assert_eq!( original_params.get_key(i), 0x1111111111111111, "Original key {} should match", i ); assert_eq!( expanded_params.get_key(i), 0x1111111111111111, "Expanded key {} should match original", i ); } // Test that new keys are accessible in expanded version assert_eq!( expanded_params.get_key(23), 0x2222222222222222, "New key 23 should be accessible" ); assert_eq!( expanded_params.get_key(24), 0x3333333333333333, "New key 24 should be accessible" ); // Test that original version handles new indices gracefully assert_eq!( original_params.get_key(23), 0, "Original should return 0 for new key indices" ); assert_eq!( original_params.get_key(24), 0, "Original should return 0 for new key indices" ); // Test that both versions handle out-of-bounds access consistently assert_eq!( original_params.get_key(30), 0, "Original should return 0 for out-of-bounds" ); assert_eq!( expanded_params.get_key(30), 0, "Expanded should return 0 for out-of-bounds" ); // Test key count differences assert_eq!( original_params.key_count(), 23, "Original should have 23 keys" ); assert_eq!( expanded_params.key_count(), 25, "Expanded should have 25 keys" ); // Test that checked access works correctly for both assert_eq!( original_params.get_key_checked(22), Some(0x1111111111111111), "Original last key should be accessible" ); assert_eq!( original_params.get_key_checked(23), None, "Original should return None for index 23" ); assert_eq!( expanded_params.get_key_checked(22), Some(0x1111111111111111), "Expanded key 22 should be accessible" ); assert_eq!( expanded_params.get_key_checked(24), Some(0x3333333333333333), "Expanded last key should be accessible" ); assert_eq!( expanded_params.get_key_checked(25), None, "Expanded should return None for index 25" ); } #[test] #[allow(deprecated)] fn test_future_expansion_backwards_compatibility() { // Test that future expansion maintains backwards compatibility // This test simulates a scenario where: // 1. Third-party code is written against 23-key CrcParams // 2. Library is expanded to support 25-key CrcParams // 3. Third-party code continues to work without modification // Mock third-party function that expects to work with any CrcParams fn third_party_key_processor(params: CrcParams) -> Vec { let mut result = Vec::new(); // Third-party code might access keys in various patterns // Pattern 1: Access first few keys for i in 0..5 { result.push(params.get_key(i)); } // Pattern 2: Access some middle keys for i in 10..15 { result.push(params.get_key(i)); } // Pattern 3: Access keys near the end (but within original 23-key range) for i in 20..23 { result.push(params.get_key(i)); } // Pattern 4: Attempt to access beyond both ranges (should return 0 for both) result.push(params.get_key(30)); result.push(params.get_key(31)); result } // Test with original 23-key params let keys_23 = [0xABCDEF0123456789u64; 23]; let params_23 = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Backwards Compat Test 23", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: CrcKeysStorage::from_keys_fold_256(keys_23), }; // Test with expanded 25-key params let keys_25 = [0xABCDEF0123456789u64; 25]; let params_25 = CrcParams { algorithm: CrcAlgorithm::Crc64Custom, name: "Backwards Compat Test 25", width: 64, poly: 0x42F0E1EBA9EA3693, init: 0xFFFFFFFFFFFFFFFF, init_algorithm: 0xFFFFFFFFFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFFFFFFFFFF, check: 0x123456789ABCDEF0, keys: CrcKeysStorage::from_keys_fold_future_test(keys_25), }; // Run third-party function with both variants let result_23 = third_party_key_processor(params_23); let result_25 = third_party_key_processor(params_25); // Results should be identical for the overlapping key ranges assert_eq!( result_23.len(), result_25.len(), "Results should have same length" ); // First 13 values should be identical (keys 0-4, 10-14, 20-22) for i in 0..13 { assert_eq!( result_23[i], result_25[i], "Result {} should be identical", i ); assert_eq!( result_23[i], 0xABCDEF0123456789, "Result {} should match key value", i ); } // Last 2 values should be 0 for both (out-of-bounds access to indices 30, 31) assert_eq!( result_23[13], 0, "Out-of-bounds access should return 0 for 23-key" ); assert_eq!( result_23[14], 0, "Out-of-bounds access should return 0 for 23-key" ); assert_eq!( result_25[13], 0, "Out-of-bounds access should return 0 for 25-key" ); assert_eq!( result_25[14], 0, "Out-of-bounds access should return 0 for 25-key" ); // This demonstrates that third-party code works identically with both variants assert_eq!( result_23, result_25, "Third-party function should produce identical results" ); } // FFI Tests for future-proof CrcFastParams functionality #[cfg(all( feature = "ffi", any(target_arch = "aarch64", target_arch = "x86_64", target_arch = "x86") ))] mod ffi_tests { use crate::ffi::CrcFastParams; use crate::{CrcAlgorithm, CrcKeysStorage, CrcParams}; #[test] #[allow(deprecated)] fn test_ffi_conversion_23_keys() { // Test conversion between CrcParams and CrcFastParams for 23-key variant let keys_23 = [0x1234567890ABCDEFu64; 23]; let original_params = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "FFI Test 23", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: CrcKeysStorage::from_keys_fold_256(keys_23), }; // Convert to FFI struct let ffi_params: CrcFastParams = original_params.into(); // Verify FFI struct fields assert_eq!(ffi_params.key_count, 23, "FFI params should have 23 keys"); assert!( !ffi_params.keys.is_null(), "Keys pointer should not be null" ); assert_eq!(ffi_params.width, 32, "Width should match"); assert_eq!(ffi_params.poly, 0x1EDC6F41, "Poly should match"); assert_eq!(ffi_params.init, 0xFFFFFFFF, "Init should match"); assert!(ffi_params.refin, "Refin should match"); assert!(ffi_params.refout, "Refout should match"); assert_eq!(ffi_params.xorout, 0xFFFFFFFF, "Xorout should match"); assert_eq!(ffi_params.check, 0x12345678, "Check should match"); // Test direct pointer access to keys unsafe { for i in 0..23 { let key_value = *ffi_params.keys.add(i); assert_eq!( key_value, 0x1234567890ABCDEF, "Key {} should match expected value", i ); } } // Convert back to CrcParams let converted_params: CrcParams = ffi_params.into(); // Verify round-trip conversion assert_eq!(converted_params.algorithm, original_params.algorithm); assert_eq!(converted_params.width, original_params.width); assert_eq!(converted_params.poly, original_params.poly); assert_eq!(converted_params.init, original_params.init); assert_eq!(converted_params.refin, original_params.refin); assert_eq!(converted_params.refout, original_params.refout); assert_eq!(converted_params.xorout, original_params.xorout); assert_eq!(converted_params.check, original_params.check); assert_eq!(converted_params.key_count(), 23); // Verify all keys match for i in 0..23 { assert_eq!( converted_params.get_key(i), original_params.get_key(i), "Converted key {} should match original", i ); } } #[test] #[allow(deprecated)] fn test_ffi_conversion_25_keys() { // Test conversion between CrcParams and CrcFastParams for 25-key variant let keys_25 = [0xFEDCBA0987654321u64; 25]; let original_params = CrcParams { algorithm: CrcAlgorithm::Crc64Custom, name: "FFI Test 25", width: 64, poly: 0x42F0E1EBA9EA3693, init: 0xFFFFFFFFFFFFFFFF, init_algorithm: 0xFFFFFFFFFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFFFFFFFFFF, check: 0x123456789ABCDEF0, keys: CrcKeysStorage::from_keys_fold_future_test(keys_25), }; // Convert to FFI struct let ffi_params: CrcFastParams = original_params.into(); // Verify FFI struct fields assert_eq!(ffi_params.key_count, 25, "FFI params should have 25 keys"); assert!( !ffi_params.keys.is_null(), "Keys pointer should not be null" ); assert_eq!(ffi_params.width, 64, "Width should match"); assert_eq!(ffi_params.poly, 0x42F0E1EBA9EA3693, "Poly should match"); // Test direct pointer access to keys unsafe { for i in 0..25 { let key_value = *ffi_params.keys.add(i); assert_eq!( key_value, 0xFEDCBA0987654321, "Key {} should match expected value", i ); } } // Convert back to CrcParams let converted_params: CrcParams = ffi_params.into(); // Verify round-trip conversion assert_eq!(converted_params.key_count(), 25); for i in 0..25 { assert_eq!( converted_params.get_key(i), original_params.get_key(i), "Converted key {} should match original", i ); } } #[test] #[allow(deprecated)] fn test_ffi_pointer_stability() { // Test that key pointers remain stable across multiple conversions let keys_23 = [0x1111111111111111u64; 23]; let params = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Stability Test", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: CrcKeysStorage::from_keys_fold_256(keys_23), }; // Convert to FFI multiple times let ffi_params1: CrcFastParams = params.into(); let ffi_params2: CrcFastParams = params.into(); // Pointers should be stable (same keys should get same pointer) assert_eq!( ffi_params1.keys, ffi_params2.keys, "Identical key sets should get same stable pointer" ); assert_eq!( ffi_params1.key_count, ffi_params2.key_count, "Key counts should match" ); // Test that different key sets get different pointers let different_keys = [0x2222222222222222u64; 23]; let different_params = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Different Test", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: CrcKeysStorage::from_keys_fold_256(different_keys), }; let ffi_params3: CrcFastParams = different_params.into(); assert_ne!( ffi_params1.keys, ffi_params3.keys, "Different key sets should get different pointers" ); } #[test] #[allow(deprecated)] fn test_ffi_memory_safety() { // Test that FFI conversions are memory safe let keys_23 = [0xAAAAAAAAAAAAAAAAu64; 23]; let params = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "Memory Safety Test", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: CrcKeysStorage::from_keys_fold_256(keys_23), }; let ffi_params: CrcFastParams = params.into(); // Test that we can safely access all keys through the pointer unsafe { let keys_slice = std::slice::from_raw_parts(ffi_params.keys, ffi_params.key_count as usize); // Verify all keys are accessible and correct for (i, &key) in keys_slice.iter().enumerate() { assert_eq!( key, 0xAAAAAAAAAAAAAAAA, "Key {} should be accessible and correct", i ); } // Test that we can create multiple slices from the same pointer let keys_slice2 = std::slice::from_raw_parts(ffi_params.keys, ffi_params.key_count as usize); assert_eq!( keys_slice, keys_slice2, "Multiple slices should be identical" ); } // Test conversion back to CrcParams let converted: CrcParams = ffi_params.into(); assert_eq!(converted.key_count(), 23); for i in 0..23 { assert_eq!( converted.get_key(i), 0xAAAAAAAAAAAAAAAA, "Converted key {} should match", i ); } } #[test] #[allow(deprecated)] fn test_ffi_different_key_counts() { // Test FFI with different key count scenarios // Test 23-key variant let keys_23 = [0x1111111111111111u64; 23]; let params_23 = CrcParams { algorithm: CrcAlgorithm::Crc32Custom, name: "23-Key FFI Test", width: 32, poly: 0x1EDC6F41, init: 0xFFFFFFFF, init_algorithm: 0xFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFF, check: 0x12345678, keys: CrcKeysStorage::from_keys_fold_256(keys_23), }; // Test 25-key variant let keys_25 = [0x2222222222222222u64; 25]; let params_25 = CrcParams { algorithm: CrcAlgorithm::Crc64Custom, name: "25-Key FFI Test", width: 64, poly: 0x42F0E1EBA9EA3693, init: 0xFFFFFFFFFFFFFFFF, init_algorithm: 0xFFFFFFFFFFFFFFFF, refin: true, refout: true, xorout: 0xFFFFFFFFFFFFFFFF, check: 0x123456789ABCDEF0, keys: CrcKeysStorage::from_keys_fold_future_test(keys_25), }; // Convert both to FFI let ffi_23: CrcFastParams = params_23.into(); let ffi_25: CrcFastParams = params_25.into(); // Verify key counts assert_eq!(ffi_23.key_count, 23); assert_eq!(ffi_25.key_count, 25); // Test C-style access patterns unsafe { // Access all keys in 23-key variant for i in 0..23 { let key = *ffi_23.keys.add(i); assert_eq!( key, 0x1111111111111111, "23-key variant key {} should match", i ); } // Access all keys in 25-key variant for i in 0..25 { let key = *ffi_25.keys.add(i); assert_eq!( key, 0x2222222222222222, "25-key variant key {} should match", i ); } // Test bounds-aware C code pattern for ffi_params in [&ffi_23, &ffi_25] { for i in 0..ffi_params.key_count { let key = *ffi_params.keys.add(i as usize); assert_ne!(key, 0, "Key {} should not be zero", i); } } } // Test round-trip conversions let converted_23: CrcParams = ffi_23.into(); let converted_25: CrcParams = ffi_25.into(); assert_eq!(converted_23.key_count(), 23); assert_eq!(converted_25.key_count(), 25); // Verify all keys survived round-trip for i in 0..23 { assert_eq!(converted_23.get_key(i), 0x1111111111111111); } for i in 0..25 { assert_eq!(converted_25.get_key(i), 0x2222222222222222); } } #[test] fn test_ffi_get_custom_params_function() { // Test the crc_fast_get_custom_params FFI function use std::ffi::CString; let name = CString::new("Test CRC").unwrap(); let ffi_params = crate::ffi::crc_fast_get_custom_params( name.as_ptr(), 32, 0x1EDC6F41, 0xFFFFFFFF, true, 0xFFFFFFFF, 0x12345678, ); // Verify the returned FFI params assert_eq!(ffi_params.width, 32); assert_eq!(ffi_params.poly, 0x1EDC6F41); assert_eq!(ffi_params.init, 0xFFFFFFFF); assert!(ffi_params.refin); assert!(ffi_params.refout); assert_eq!(ffi_params.xorout, 0xFFFFFFFF); assert_eq!(ffi_params.check, 0x12345678); assert!( !ffi_params.keys.is_null(), "Keys pointer should not be null" ); assert!(ffi_params.key_count > 0, "Should have keys"); // Test that we can access the keys unsafe { for i in 0..ffi_params.key_count { let _key = *ffi_params.keys.add(i as usize); // Keys should be accessible without crashing } } // Test conversion to CrcParams let params: CrcParams = ffi_params.into(); assert_eq!(params.width, 32); assert_eq!(params.poly, 0x1EDC6F41); assert_eq!(params.init, 0xFFFFFFFF); assert!(params.refin); assert!(params.refout); assert_eq!(params.xorout, 0xFFFFFFFF); assert_eq!(params.check, 0x12345678); assert!(params.key_count() > 0); } } crc-fast-1.10.0/src/test/mod.rs000064400000000000000000000033411046102023000143010ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. //! This module provides tests and utilities for the CRC library. #![cfg(test)] #![allow(dead_code)] pub(crate) mod consts; pub(crate) mod enums; mod future_proof_tests; mod structs; use proptest::test_runner::Config as ProptestConfig; /// Returns a proptest config that works under Miri by disabling file-based failure persistence. /// Miri runs with isolation enabled by default, which blocks getcwd() calls that proptest /// uses for its failure persistence feature. pub(crate) fn miri_compatible_proptest_config() -> ProptestConfig { let mut config = ProptestConfig::with_cases(100); if cfg!(miri) { // don't let Miri spend too much time on these config.cases = 1; // disable file-based failure persistence to avoid getcwd() calls config.failure_persistence = None; return config; } config } /// Creates a new aligned data vector from the input slice for testing. pub(crate) fn create_aligned_data(input: &[u8]) -> Vec { // Size of our target alignment structure let align_size = std::mem::size_of::<[[u64; 4]; 2]>(); // 64 bytes // Create a zero-filled vector with padding to ensure we can find a properly aligned position let mut padded = vec![0; input.len() + align_size]; // Find the first address that satisfies our alignment let start_addr = padded.as_ptr() as usize; let align_offset = (align_size - (start_addr % align_size)) % align_size; // Copy the input into the aligned position let aligned_start = &mut padded[align_offset..]; aligned_start[..input.len()].copy_from_slice(input); // Return the exact slice we need aligned_start[..input.len()].to_vec() } crc-fast-1.10.0/src/test/structs.rs000064400000000000000000000007341046102023000152340ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. #![cfg(test)] #![allow(dead_code)] use crate::CrcParams; use crc::{Crc, Table}; pub struct CrcTestConfig { pub params: CrcParams, pub reference_impl: &'static Crc, } pub type Crc16TestConfig = CrcTestConfig>; pub type Crc32TestConfig = CrcTestConfig>; pub type Crc64TestConfig = CrcTestConfig>; crc-fast-1.10.0/src/traits.rs000064400000000000000000000232051046102023000140520ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. #![allow(dead_code)] #[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] use crate::enums::Reflector; use crate::CrcParams; #[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] use crate::structs::CrcState; use core::ops::BitXor; /// Marker trait for CRC width pub trait CrcWidth { /// The width in bits const WIDTH: u32; /// The natural value type for this width type Value: Copy + BitXor; } pub(crate) trait CrcCalculator { fn update(data: &[u8], state: u64, params: &CrcParams) -> u64 { Self::calculate(state, data, params) } fn checksum(data: &[u8], params: &CrcParams) -> u64 { Self::calculate(params.init, data, params) ^ params.xorout } fn calculate(state: u64, data: &[u8], params: &CrcParams) -> u64; } #[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] /// Trait defining architecture-specific SIMD operations for CRC calculation pub trait ArchOps: Sized + Copy + Clone { /// The SIMD vector type used by this architecture type Vector; /// Process aligned blocks using potentially accelerated SIMD operations /// /// Returns true if the operation was handled by the accelerated path (for example, /// using VPCLMULQDQ) unsafe fn process_enhanced_simd_blocks( &self, _state: &mut CrcState, _first: &[Self::Vector; 8], _rest: &[[Self::Vector; 8]], _reflector: &Reflector, _keys: &[u64; 23], ) -> bool where Self::Vector: Copy, { // Default implementation just returns false // indicating the non-enhanced algorithm should be used false } /// Create a SIMD vector from a u64 pair /// /// # Safety /// May use native CPU features unsafe fn create_vector_from_u64_pair( &self, high: u64, low: u64, reflected: bool, ) -> Self::Vector; /// Create a SIMD vector from a u64 pair without reflection /// /// TODO: I have no idea (yet) why CRC-32 doesn't use reflection, but CRC-64 does. /// /// # Safety /// May use native CPU features unsafe fn create_vector_from_u64_pair_non_reflected(&self, high: u64, low: u64) -> Self::Vector; /// Create a SIMD vector with a single u64 value /// /// # Safety /// May use native CPU features unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector; /// Extract two u64 values from a SIMD vector /// /// # Safety /// May use native CPU features unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2]; /// Extract two polynomial values (for carryless multiplication) /// /// # Safety /// May use native CPU features unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2]; /// XOR two SIMD vectors /// /// # Safety /// May use native CPU features unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector; /// Load bytes from memory into a SIMD vector /// /// # Safety /// May use native CPU features unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector; /// Load aligned bytes from memory /// /// # Safety /// May use native CPU features unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector; //unsafe fn load_aligned(&self, ptr: &[u64]) -> Self::Vector; //unsafe fn load_aligned_const(&self, ptr: *const [u64; 2]) -> Self::Vector; /// Shuffle/permute bytes according to a mask /// /// # Safety /// May use native CPU features unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector; /// Blend two vectors using a mask (select from a or b based on mask bits) /// /// # Safety /// May use native CPU features unsafe fn blend_vectors( &self, a: Self::Vector, b: Self::Vector, mask: Self::Vector, ) -> Self::Vector; /// Shift a vector left by 8 bytes /// /// # Safety /// May use native CPU features unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector; /// Create a vector with all bytes set to the same value /// /// # Safety /// May use native CPU features unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector; /// Create a comparison mask (for blending operations) /// /// # Safety /// May use native CPU features unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector; /// AND two vectors /// /// # Safety /// May use native CPU features unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector; /// Shift a vector right by 32 bits (4 bytes) /// /// # Safety /// May use native CPU features unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector; /// Shift a vector left by 32 bits (4 bytes) /// /// # Safety /// May use native CPU features unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector; /// Create a SIMD vector with a single u32 value /// /// # Safety /// May use native CPU features unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector; /// Shift a vector left by 4 bytes (32 bits) /// /// # Safety /// May use native CPU features unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector; /// Shift a vector right by 4 bytes (32 bits) /// /// # Safety /// May use native CPU features unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector; /// Shift a vector right by 8 bytes (64 bits) /// /// # Safety /// May use native CPU features unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector; /// Shift a vector right by 5 bytes unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector; /// Shift a vector right by 6 bytes unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector; /// Shift a vector right by 7 bytes unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector; /// Shift a vector right by 12 bytes unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector; /// Shift a vector left by 12 bytes unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector; /// Perform carryless multiplication with immediate value 0x00 (low 64 bits of both vectors) unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector; /// Perform carryless multiplication with immediate value 0x01 (low 64 bits of a, high 64 bits of b) unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector; /// Perform carryless multiplication with immediate value 0x10 (high 64 bits of a, low 64 bits of b) unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector; /// Perform carryless multiplication with immediate value 0x11 (high 64 bits of both vectors) unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector; /// XOR three vectors together: a XOR b XOR c /// Uses native XOR3 instructions when available, falls back to two XOR operations otherwise unsafe fn xor3_vectors( &self, a: Self::Vector, b: Self::Vector, c: Self::Vector, ) -> Self::Vector; } #[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] /// Enhanced CrcWidth trait with additional operations for generic CRC implementation pub trait EnhancedCrcWidth: CrcWidth { /// Load constants specific to CRC width fn load_constants(reflected: bool) -> [[u64; 2]; 4]; /// Create a CRC state with the initial value positioned correctly for the width unsafe fn create_state( value: Self::Value, reflected: bool, ops: &T, ) -> CrcState where T::Vector: Copy; /// Extract the final CRC result from a SIMD vector unsafe fn extract_result( vector: T::Vector, reflected: bool, ops: &T, ) -> Self::Value where T::Vector: Copy; /// Perform width-specific folding operations using CLMUL and two XOR operations (or one XOR3) unsafe fn fold_16( state: &mut CrcState, coefficient: T::Vector, data_to_xor: T::Vector, ops: &T, ) where T::Vector: Copy; /// Fold width-specific number of bytes unsafe fn fold_width(state: &mut CrcState, high: u64, low: u64, ops: &T) where T::Vector: Copy; /// Width-specific Barrett reduction unsafe fn barrett_reduction( state: &CrcState, poly: u64, mu: u64, ops: &T, ) -> Self::Value where T::Vector: Copy; /// Create a coefficient vector for folding operations unsafe fn create_coefficient( high: u64, low: u64, reflected: bool, ops: &T, ) -> T::Vector where T::Vector: Copy; /// Perform final reduction for the specific width unsafe fn perform_final_reduction( state: T::Vector, reflected: bool, keys: &[u64; 23], ops: &T, ) -> Self::Value where T::Vector: Copy; /// Get the appropriate shuffle table pointer and offset for handling last bytes fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize); } crc-fast-1.10.0/tests/checksum_integration_tests.rs000064400000000000000000000162711046102023000205530ustar 00000000000000// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0. #![cfg(feature = "cli")] use std::fs; use std::process::Command; #[test] #[cfg_attr(miri, ignore)] // Miri doesn't allow this due to isolation restrictions fn test_benchmark_flag_parsing() { let output = Command::new("cargo") .args([ "run", "--features", "cli", "--bin", "checksum", "--", "-a", "CRC-32/ISCSI", "-b", ]) .output() .expect("Failed to execute command"); assert!( output.status.success(), "Command should succeed with -b flag" ); let stdout = String::from_utf8_lossy(&output.stdout); assert!(stdout.contains("Algorithm: CRC-32/ISCSI")); assert!(stdout.contains("Throughput:")); assert!(stdout.contains("GiB/s")); } #[test] #[cfg_attr(miri, ignore)] // Miri doesn't allow this due to isolation restrictions fn test_benchmark_with_size_parameter() { let output = Command::new("cargo") .args([ "run", "--features", "cli", "--bin", "checksum", "--", "-a", "CRC-32/ISCSI", "-b", "--size", "1024", ]) .output() .expect("Failed to execute command"); assert!(output.status.success()); let stdout = String::from_utf8_lossy(&output.stdout); assert!(stdout.contains("Data Size: 1,024 bytes")); } #[test] #[cfg_attr(miri, ignore)] // Miri doesn't allow this due to isolation restrictions fn test_benchmark_with_duration_parameter() { let output = Command::new("cargo") .args([ "run", "--features", "cli", "--bin", "checksum", "--", "-a", "CRC-32/ISCSI", "-b", "--duration", "1.0", ]) .output() .expect("Failed to execute command"); assert!(output.status.success()); let stdout = String::from_utf8_lossy(&output.stdout); assert!(stdout.contains("Duration: 1.")); } #[test] #[cfg_attr(miri, ignore)] // Miri doesn't allow this due to isolation restrictions fn test_benchmark_invalid_size() { let output = Command::new("cargo") .args([ "run", "--features", "cli", "--bin", "checksum", "--", "-a", "CRC-32/ISCSI", "-b", "--size", "0", ]) .output() .expect("Failed to execute command"); assert!(!output.status.success()); let stderr = String::from_utf8_lossy(&output.stderr); assert!(stderr.contains("Size must be greater than 0")); } #[test] #[cfg_attr(miri, ignore)] // Miri doesn't allow this due to isolation restrictions fn test_benchmark_invalid_duration() { let output = Command::new("cargo") .args([ "run", "--features", "cli", "--bin", "checksum", "--", "-a", "CRC-32/ISCSI", "-b", "--duration", "0", ]) .output() .expect("Failed to execute command"); assert!(!output.status.success()); let stderr = String::from_utf8_lossy(&output.stderr); assert!(stderr.contains("Duration must be greater than 0")); } #[test] #[cfg_attr(miri, ignore)] // Miri doesn't allow this due to isolation restrictions fn test_benchmark_with_file_input() { // Create a temporary test file let test_file = "test_benchmark_file.txt"; fs::write(test_file, "Hello, benchmark world!").expect("Failed to create test file"); let output = Command::new("cargo") .args([ "run", "--features", "cli", "--bin", "checksum", "--", "-a", "CRC-32/ISCSI", "-b", "-f", test_file, "--duration", "0.5", ]) .output() .expect("Failed to execute command"); // Clean up let _ = fs::remove_file(test_file); assert!(output.status.success()); let stdout = String::from_utf8_lossy(&output.stdout); assert!(stdout.contains("Data Size: 23 bytes")); } #[test] #[cfg_attr(miri, ignore)] // Miri doesn't allow this due to isolation restrictions fn test_benchmark_with_string_input() { let output = Command::new("cargo") .args([ "run", "--features", "cli", "--bin", "checksum", "--", "-a", "CRC-32/ISCSI", "-b", "-s", "test string", "--duration", "0.5", ]) .output() .expect("Failed to execute command"); assert!(output.status.success()); let stdout = String::from_utf8_lossy(&output.stdout); assert!(stdout.contains("Data Size: 11 bytes")); } #[test] #[cfg_attr(miri, ignore)] // Miri doesn't allow this due to isolation restrictions fn test_benchmark_different_algorithms() { let algorithms = ["CRC-32/ISCSI", "CRC-64/NVME"]; for algorithm in &algorithms { let output = Command::new("cargo") .args([ "run", "--features", "cli", "--bin", "checksum", "--", "-a", algorithm, "-b", "--duration", "0.5", ]) .output() .expect("Failed to execute command"); assert!( output.status.success(), "Algorithm {} should work", algorithm ); let stdout = String::from_utf8_lossy(&output.stdout); assert!(stdout.contains(&format!("Algorithm: {}", algorithm))); } } #[test] #[cfg_attr(miri, ignore)] // Miri doesn't allow this due to isolation restrictions fn test_benchmark_size_without_benchmark_flag() { let output = Command::new("cargo") .args([ "run", "--features", "cli", "--bin", "checksum", "--", "-a", "CRC-32/ISCSI", "--size", "1024", ]) .output() .expect("Failed to execute command"); assert!(!output.status.success()); let stderr = String::from_utf8_lossy(&output.stderr); assert!(stderr.contains("--size and --duration can only be used with -b flag")); } #[test] #[cfg_attr(miri, ignore)] // Miri doesn't allow this due to isolation restrictions fn test_benchmark_nonexistent_file() { let output = Command::new("cargo") .args([ "run", "--features", "cli", "--bin", "checksum", "--", "-a", "CRC-32/ISCSI", "-b", "-f", "nonexistent_file.txt", ]) .output() .expect("Failed to execute command"); assert!(!output.status.success()); let stderr = String::from_utf8_lossy(&output.stderr); assert!(stderr.contains("File not found")); } crc-fast-1.10.0/tests/no_std_tests.rs000064400000000000000000000141511046102023000156270ustar 00000000000000//! no_std compatibility tests //! //! Tests the library works without std. The test framework requires std, //! but this exercises all no_std code paths. //! //! Run tests: cargo test --test no_std_tests use crc_fast::{checksum, CrcAlgorithm, Digest}; /// Test basic checksum calculation (works without std) #[test] fn test_no_std_basic_checksum() { let data = b"123456789"; // Test all major CRC variants assert_eq!( checksum(CrcAlgorithm::Crc32IsoHdlc, data), 0xcbf43926, "CRC-32/ISO-HDLC failed" ); assert_eq!( checksum(CrcAlgorithm::Crc32Iscsi, data), 0xe3069283, "CRC-32/ISCSI failed" ); assert_eq!( checksum(CrcAlgorithm::Crc64Nvme, data), 0xae8b14860a799888, "CRC-64/NVME failed" ); assert_eq!( checksum(CrcAlgorithm::Crc64Xz, data), 0x995dc9bbdf1939fa, "CRC-64/XZ failed" ); } /// Test all 21 standard CRC algorithms #[test] fn test_no_std_all_algorithms() { let data = b"123456789"; // CRC-32 variants (reflected) assert_eq!(checksum(CrcAlgorithm::Crc32IsoHdlc, data), 0xcbf43926); assert_eq!(checksum(CrcAlgorithm::Crc32Iscsi, data), 0xe3069283); // CRC-32 variants (non-reflected/forward) assert_eq!(checksum(CrcAlgorithm::Crc32Bzip2, data), 0xfc891918); assert_eq!(checksum(CrcAlgorithm::Crc32Mpeg2, data), 0x0376e6e7); // CRC-64 variants assert_eq!( checksum(CrcAlgorithm::Crc64Ecma182, data), 0x6c40df5f0b497347 ); assert_eq!(checksum(CrcAlgorithm::Crc64GoIso, data), 0xb90956c775a41001); assert_eq!(checksum(CrcAlgorithm::Crc64Ms, data), 0x75d4b74f024eceea); assert_eq!(checksum(CrcAlgorithm::Crc64Nvme, data), 0xae8b14860a799888); assert_eq!(checksum(CrcAlgorithm::Crc64Redis, data), 0xe9c6d914c4b8d9ca); assert_eq!(checksum(CrcAlgorithm::Crc64We, data), 0x62ec59e3f1a4f00a); assert_eq!(checksum(CrcAlgorithm::Crc64Xz, data), 0x995dc9bbdf1939fa); } /// Test Digest API (core functionality without std) #[test] fn test_no_std_digest_api() { let mut digest = Digest::new(CrcAlgorithm::Crc32IsoHdlc); digest.update(b"1234"); digest.update(b"56789"); let result = digest.finalize(); assert_eq!(result, 0xcbf43926, "Digest API failed"); } /// Test empty input #[test] fn test_no_std_empty_input() { let empty: &[u8] = &[]; let result = checksum(CrcAlgorithm::Crc32IsoHdlc, empty); // Empty input gives 0 after final XOR with xorout assert_eq!(result, 0); } /// Test various input sizes to ensure all code paths work #[test] fn test_no_std_various_sizes() { // Small (< 64 bytes) let small = b"hello"; let _ = checksum(CrcAlgorithm::Crc32IsoHdlc, small); // Medium (64-256 bytes) let medium = b"The quick brown fox jumps over the lazy dog. \ The quick brown fox jumps over the lazy dog. \ The quick brown fox jumps over the lazy dog."; let _ = checksum(CrcAlgorithm::Crc32IsoHdlc, medium); // Large (> 256 bytes) - tests SIMD path let large = [0xAAu8; 1024]; let _ = checksum(CrcAlgorithm::Crc32IsoHdlc, &large); } /// Test that reflected and non-reflected algorithms both work #[test] fn test_no_std_reflection_modes() { let data = b"123456789"; // Reflected (most common) assert_eq!(checksum(CrcAlgorithm::Crc32IsoHdlc, data), 0xcbf43926); // Non-reflected (forward) assert_eq!(checksum(CrcAlgorithm::Crc32Bzip2, data), 0xfc891918); } /// Test custom CRC parameters #[cfg(feature = "alloc")] #[test] fn test_no_std_custom_params() { use crc_fast::{checksum_with_params, CrcParams}; let params = CrcParams::new( "CRC-32/CUSTOM", 32, 0x04c11db7, 0xffffffff, true, 0xffffffff, 0xcbf43926, ); let result = checksum_with_params(params, b"123456789"); assert_eq!(result, 0xcbf43926, "Custom params failed"); } /// Test that Digest can be reused #[test] fn test_no_std_digest_reuse() { let mut digest = Digest::new(CrcAlgorithm::Crc32IsoHdlc); digest.update(b"123456789"); let result1 = digest.finalize(); assert_eq!(result1, 0xcbf43926); digest.reset(); digest.update(b"123456789"); let result2 = digest.finalize(); assert_eq!(result2, 0xcbf43926); } /// Test incremental digest updates #[test] fn test_no_std_incremental_digest() { let mut digest1 = Digest::new(CrcAlgorithm::Crc64Nvme); digest1.update(b"123456789"); let result1 = digest1.finalize(); let mut digest2 = Digest::new(CrcAlgorithm::Crc64Nvme); digest2.update(b"123"); digest2.update(b"456"); digest2.update(b"789"); let result2 = digest2.finalize(); assert_eq!(result1, result2, "Incremental digest failed"); } /// Test checksum_combine (requires alloc) #[cfg(feature = "alloc")] #[test] fn test_no_std_checksum_combine() { use crc_fast::checksum_combine; let crc1 = checksum(CrcAlgorithm::Crc32IsoHdlc, b"1234"); let crc2 = checksum(CrcAlgorithm::Crc32IsoHdlc, b"56789"); let combined = checksum_combine(CrcAlgorithm::Crc32IsoHdlc, crc1, crc2, 5); let expected = checksum(CrcAlgorithm::Crc32IsoHdlc, b"123456789"); assert_eq!(combined, expected, "checksum_combine failed"); } /// Test that the library works with stack-only data #[test] fn test_no_std_stack_only() { // This should work without any heap allocation let data = b"123456789"; let result = checksum(CrcAlgorithm::Crc32IsoHdlc, data); assert_eq!(result, 0xcbf43926); } /// Test both CRC-32 and CRC-64 widths #[test] fn test_no_std_both_widths() { let data = b"test data"; // CRC-32 let _crc32 = checksum(CrcAlgorithm::Crc32IsoHdlc, data); // CRC-64 let _crc64 = checksum(CrcAlgorithm::Crc64Nvme, data); } /// Test with byte patterns that might expose issues #[test] fn test_no_std_edge_case_patterns() { // All zeros let zeros = [0u8; 128]; let _ = checksum(CrcAlgorithm::Crc32IsoHdlc, &zeros); // All ones let ones = [0xFFu8; 128]; let _ = checksum(CrcAlgorithm::Crc32IsoHdlc, &ones); // Alternating pattern let alt = [0xAAu8; 128]; let _ = checksum(CrcAlgorithm::Crc32IsoHdlc, &alt); } crc-fast-1.10.0/tests/wasm_tests.rs000064400000000000000000000110341046102023000153050ustar 00000000000000//! WASM compatibility tests //! //! Tests that the library works in WebAssembly. These tests run natively //! (test framework requires std) but exercise code paths used in WASM. //! //! Run tests: cargo test --test wasm_tests use crc_fast::{checksum, CrcAlgorithm, Digest}; #[cfg(feature = "alloc")] use crc_fast::{checksum_combine, checksum_with_params, CrcParams}; /// Test basic CRC calculation #[test] fn test_wasm_basic_crc32() { let data = b"123456789"; assert_eq!(checksum(CrcAlgorithm::Crc32IsoHdlc, data), 0xcbf43926); assert_eq!(checksum(CrcAlgorithm::Crc32Iscsi, data), 0xe3069283); } /// Test CRC-64 variants #[test] fn test_wasm_crc64() { let data = b"123456789"; assert_eq!(checksum(CrcAlgorithm::Crc64Nvme, data), 0xae8b14860a799888); assert_eq!(checksum(CrcAlgorithm::Crc64Xz, data), 0x995dc9bbdf1939fa); } /// Test Digest API (incremental hashing) #[test] fn test_wasm_digest() { let mut digest = Digest::new(CrcAlgorithm::Crc32IsoHdlc); digest.update(b"1234"); digest.update(b"56789"); assert_eq!(digest.finalize(), 0xcbf43926); } /// Test all CRC-32 algorithms #[test] fn test_wasm_all_crc32() { let data = b"123456789"; assert_eq!(checksum(CrcAlgorithm::Crc32IsoHdlc, data), 0xcbf43926); assert_eq!(checksum(CrcAlgorithm::Crc32Bzip2, data), 0xfc891918); assert_eq!(checksum(CrcAlgorithm::Crc32Iscsi, data), 0xe3069283); assert_eq!(checksum(CrcAlgorithm::Crc32Mpeg2, data), 0x0376e6e7); } /// Test all CRC-64 algorithms #[test] fn test_wasm_all_crc64() { let data = b"123456789"; assert_eq!( checksum(CrcAlgorithm::Crc64Ecma182, data), 0x6c40df5f0b497347 ); assert_eq!(checksum(CrcAlgorithm::Crc64Nvme, data), 0xae8b14860a799888); assert_eq!(checksum(CrcAlgorithm::Crc64Xz, data), 0x995dc9bbdf1939fa); } /// Test various buffer sizes #[test] #[cfg(feature = "alloc")] fn test_wasm_various_sizes() { extern crate alloc; use alloc::vec::Vec; let small = b"hello"; let _ = checksum(CrcAlgorithm::Crc32IsoHdlc, small); let medium = b"The quick brown fox jumps over the lazy dog"; let _ = checksum(CrcAlgorithm::Crc32IsoHdlc, medium); let large: Vec = (0..1024).map(|i| (i % 256) as u8).collect(); let _ = checksum(CrcAlgorithm::Crc32IsoHdlc, &large); let very_large: Vec = (0..8192).map(|i| (i % 256) as u8).collect(); let _ = checksum(CrcAlgorithm::Crc64Nvme, &very_large); } /// Test empty input #[test] fn test_wasm_empty() { let empty: &[u8] = &[]; assert_eq!(checksum(CrcAlgorithm::Crc32IsoHdlc, empty), 0); } /// Test incremental hashing #[test] fn test_wasm_incremental() { let mut digest = Digest::new(CrcAlgorithm::Crc64Nvme); for chunk in [b"123", b"456", b"789"].iter() { digest.update(*chunk); } assert_eq!(digest.finalize(), 0xae8b14860a799888); } /// Test digest reset #[test] fn test_wasm_reset() { let mut digest = Digest::new(CrcAlgorithm::Crc32IsoHdlc); digest.update(b"123456789"); let result1 = digest.finalize(); digest.reset(); digest.update(b"123456789"); let result2 = digest.finalize(); assert_eq!(result1, result2); } /// Test custom CRC parameters #[test] #[cfg(feature = "alloc")] fn test_wasm_custom_params() { let params = CrcParams::new( "CRC-32/CUSTOM", 32, 0x04c11db7, 0xffffffff, true, 0xffffffff, 0xcbf43926, ); assert_eq!(checksum_with_params(params, b"123456789"), 0xcbf43926); } /// Test checksum combining #[test] #[cfg(feature = "alloc")] fn test_wasm_combine() { let crc1 = checksum(CrcAlgorithm::Crc32IsoHdlc, b"1234"); let crc2 = checksum(CrcAlgorithm::Crc32IsoHdlc, b"56789"); let combined = checksum_combine(CrcAlgorithm::Crc32IsoHdlc, crc1, crc2, 5); let expected = checksum(CrcAlgorithm::Crc32IsoHdlc, b"123456789"); assert_eq!(combined, expected); } /// Test reflected vs non-reflected #[test] fn test_wasm_reflection() { let data = b"123456789"; assert_eq!(checksum(CrcAlgorithm::Crc32IsoHdlc, data), 0xcbf43926); // reflected assert_eq!(checksum(CrcAlgorithm::Crc32Bzip2, data), 0xfc891918); // non-reflected } /// Test standard test vectors #[test] fn test_wasm_vectors() { let vectors = [ (b"" as &[u8], CrcAlgorithm::Crc32IsoHdlc, 0_u64), (b"a", CrcAlgorithm::Crc32IsoHdlc, 0xe8b7be43), (b"abc", CrcAlgorithm::Crc32IsoHdlc, 0x352441c2), (b"123456789", CrcAlgorithm::Crc32IsoHdlc, 0xcbf43926), ]; for (data, algo, expected) in &vectors { assert_eq!(checksum(*algo, data), *expected); } }