Skip to main content

Python bindings for extracting Stockfish NNUE neural network activations and evaluations

Project description

nnue-interface

Python bindings for extracting Stockfish NNUE neural network activations and evaluations. Perfect for machine learning applications, chess analysis, and fine-tuning neural networks.

Features

Key Capabilities:

  • Extract NNUE accumulator activations (hidden layer 0): 3072 dimensions (Big network) or 128 dimensions (Small network)
  • Extract intermediate layer activations (layers 1-2): For deep network analysis
  • Extract PSQT values: Piece-square table contributions
  • Get final evaluations in centipawns
  • Cross-platform: Works on Linux, macOS, and Windows
  • Fast: Compiled C++ extension via pybind11
  • ML-Ready: All outputs as float32 numpy arrays

Installation

From PyPI (recommended)

pip install nnue-interface

From Source

git clone https://github.com/yourusername/nnue-interface.git
cd nnue-interface
pip install -e .

Requirements:

  • Python 3.8+
  • C++17 compatible compiler (GCC, Clang, MSVC)
  • CMake 3.15+
  • NumPy 1.19+

Quick Start

import nnue_interface
import numpy as np

# Extract all NNUE activations and evaluation for a position
fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"

acc_white, acc_black, psqt, layer1, layer2, eval_final, eval_psqt = \
    nnue_interface.get_activations_and_eval(fen)

print(f"Evaluation: {eval_final:.2f} cp")
print(f"Accumulator shape: {acc_white.shape}")  # (3072,) for Big network
print(f"Layer 1 shape: {layer1.shape}")         # (30,) 
print(f"Layer 2 shape: {layer2.shape}")         # (32,)

API Reference

get_activations_and_eval(fen: str) -> tuple

Extract all NNUE activations and evaluation for a given position.

Parameters:

  • fen (str): FEN notation of the chess position

Returns:

  • acc_white (ndarray): White perspective accumulator, shape (3072,) or (128,)
  • acc_black (ndarray): Black perspective accumulator, shape (3072,) or (128,)
  • psqt (ndarray): PSQT values, shape (2, 8)
  • layer1 (ndarray): First hidden layer activations, shape (30,) or (15×2)
  • layer2 (ndarray): Second hidden layer activations, shape (32,)
  • eval_final (float): Final evaluation in centipawns
  • eval_psqt (float): PSQT-only evaluation in centipawns

get_evaluation(fen: str) -> float

Get only the final evaluation for a position (faster if you don't need activations).

Parameters:

  • fen (str): FEN notation

Returns:

  • Evaluation in centipawns (float)

get_network_info() -> dict

Get information about the NNUE network architecture.

Returns:

{
    'TransformedFeatureDimensionsBig': 3072,
    'TransformedFeatureDimensionsSmall': 128,
    'L2Big': 15,
    'L3Big': 32,
    'L2Small': 15,
    'L3Small': 32,
    'PSQTBuckets': 8,
}

Examples

Using Activations for Machine Learning

import nnue_interface
import numpy as np

# Collect training data
positions = [
    "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",
    "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1",
    # ... more positions
]

X_acc = []  # Accumulator features
X_layers = []  # Intermediate layer features
y = []  # Target evaluations

for fen in positions:
    acc_w, acc_b, psqt, layer1, layer2, eval_final, _ = \
        nnue_interface.get_activations_and_eval(fen)
    
    # Combine features
    features = np.concatenate([acc_w, acc_b, psqt.flatten(), layer1, layer2])
    
    X_layers.append(features)
    y.append(eval_final)

X = np.array(X_layers)
y = np.array(y)

# Now use X and y for ML training (scikit-learn, PyTorch, TensorFlow, etc.)

Analyzing Network Activations

import nnue_interface

fen = "r1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4"

acc_w, acc_b, psqt, layer1, layer2, eval_final, _ = \
    nnue_interface.get_activations_and_eval(fen)

print(f"Position evaluation: {eval_final:.2f} cp")
print(f"\nAccumulator statistics (White):")
print(f"  Mean: {acc_w.mean():.2f}")
print(f"  Std:  {acc_w.std():.2f}")
print(f"  Min:  {acc_w.min():.2f}")
print(f"  Max:  {acc_w.max():.2f}")

print(f"\nLayer 1 sparsity: {(layer1 == 0).sum() / layer1.size * 100:.1f}%")
print(f"Layer 2 sparsity: {(layer2 == 0).sum() / layer2.size * 100:.1f}%")

Architecture

The NNUE network consists of:

  1. Input Layer (Accumulator): 3072 or 128 dimensions

    • Efficiently updatable representation of board state
    • Updated incrementally as moves are made
  2. Layer 1:

    • FC layer (sparse input) + SqrClippedReLU + ClippedReLU
    • Output: 15 dims × 2 (concatenated)
  3. Layer 2:

    • FC layer + ClippedReLU
    • Output: 32 dims
  4. Output Layer:

    • FC layer → single scalar evaluation
    • Also uses PSQT values for final output

All intermediate activations use int8/uint8 quantization for efficiency, converted to float32 for Python.

Performance

  • Speed: ~50-200 µs per position (depending on CPU)
  • Memory: ~2 MB for network weights
  • No dependencies: Only NumPy required at runtime

Building from Source

Linux / macOS

git clone https://github.com/yourusername/nnue-interface.git
cd nnue-interface
pip install -e .

Windows (MSYS2 UCRT64)

git clone https://github.com/yourusername/nnue-interface.git
cd nnue-interface
pip install -e .

Build Documentation

CMake is used for cross-platform builds. To manually build:

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

Testing

pip install pytest numpy
pytest tests/

License

GPL-3.0-or-later (same as Stockfish)

Citation

If you use this in research, please cite Stockfish:

@software{stockfish,
  title = {Stockfish},
  url = {https://stockfishchess.org/},
  author = {Tord Romstad and Marco Costalba and Joona Kiiski and Gary Linscott},
}

Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run tests: pytest tests/
  5. Submit a pull request

Troubleshooting

Build fails on Linux with missing dependencies

# Ubuntu/Debian
sudo apt-get install build-essential cmake python3-dev

# Fedora
sudo dnf install gcc gcc-c++ cmake python3-devel

Import error on Windows

Make sure you're using the correct Python version (64-bit). The wheel must match your Python installation:

python -c "import struct; print('64-bit' if struct.calcsize('P') == 8 else '32-bit')"

Resources

Authors

  • Created with Stockfish source code
  • Python bindings by Rushil Saraf

Have questions? Open an issue on GitHub!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

nnue_interface-0.2.6-cp313-cp313-win_amd64.whl (351.1 kB view details)

Uploaded CPython 3.13Windows x86-64

nnue_interface-0.2.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.6-cp313-cp313-macosx_11_0_universal2.whl (589.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

nnue_interface-0.2.6-cp313-cp313-macosx_10_15_universal2.whl (599.0 kB view details)

Uploaded CPython 3.13macOS 10.15+ universal2 (ARM64, x86-64)

nnue_interface-0.2.6-cp312-cp312-win_amd64.whl (351.1 kB view details)

Uploaded CPython 3.12Windows x86-64

nnue_interface-0.2.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.6-cp312-cp312-macosx_11_0_universal2.whl (589.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

nnue_interface-0.2.6-cp312-cp312-macosx_10_15_universal2.whl (599.1 kB view details)

Uploaded CPython 3.12macOS 10.15+ universal2 (ARM64, x86-64)

nnue_interface-0.2.6-cp311-cp311-win_amd64.whl (349.6 kB view details)

Uploaded CPython 3.11Windows x86-64

nnue_interface-0.2.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.6-cp311-cp311-macosx_11_0_universal2.whl (587.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

nnue_interface-0.2.6-cp311-cp311-macosx_10_15_universal2.whl (597.8 kB view details)

Uploaded CPython 3.11macOS 10.15+ universal2 (ARM64, x86-64)

nnue_interface-0.2.6-cp310-cp310-win_amd64.whl (348.7 kB view details)

Uploaded CPython 3.10Windows x86-64

nnue_interface-0.2.6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.6-cp310-cp310-macosx_13_0_x86_64.whl (596.5 kB view details)

Uploaded CPython 3.10macOS 13.0+ x86-64

nnue_interface-0.2.6-cp310-cp310-macosx_11_0_universal2.whl (586.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ universal2 (ARM64, x86-64)

nnue_interface-0.2.6-cp39-cp39-win_amd64.whl (123.5 kB view details)

Uploaded CPython 3.9Windows x86-64

nnue_interface-0.2.6-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.6-cp39-cp39-macosx_13_0_x86_64.whl (372.3 kB view details)

Uploaded CPython 3.9macOS 13.0+ x86-64

nnue_interface-0.2.6-cp38-cp38-win_amd64.whl (122.4 kB view details)

Uploaded CPython 3.8Windows x86-64

nnue_interface-0.2.6-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.6-cp38-cp38-macosx_13_0_x86_64.whl (372.4 kB view details)

Uploaded CPython 3.8macOS 13.0+ x86-64

File details

Details for the file nnue_interface-0.2.6-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 50412f7b4ca47468b70442675f0db0ba43c26e9e98a6cc8b787057b0c560bd04
MD5 e2e389d4e437ab364a44acd43cdf7ed1
BLAKE2b-256 1659edd80c56e2a1d8c8da9aafa3dd0be13846cecda835ea84210a046e4c53c0

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f780d4b1da4372f9654738888f35ed252c070931f303b837bbb1301a9f280e64
MD5 929781e02ebd8875fac01f8cec9b5720
BLAKE2b-256 d630d0bae30db3b7397e88fa7e75d689608b10de1be0dbfd052a91fa7fdd88ff

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 394380e7682eb9f11710dda4640605b0f9693a22bc503d1a00209a7f0238843b
MD5 8cfa56c55c1db237a6e67acb0aaf32f4
BLAKE2b-256 ad52cb7b8b97ef07766a3ca0701b9f042858ed052f0d62d8bef1fa72470f1b92

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp313-cp313-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp313-cp313-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 d6dcbdac8d26199becdef941606ca4adda86277a8e60c978c025c4415d9a9bdd
MD5 82a8447457ce11be75da9dcb2f13bcb0
BLAKE2b-256 268db0a71d5ed840c0ecba8b3ad9b3fb7af042d31425f60d4ba49fd76d46699b

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 cb0430506de5009c0ed498cfaeef980cc0522e3bd81cbeb7915525a8e2945a0b
MD5 33733fbc4ddb4c244b22acb5aec96026
BLAKE2b-256 24d63a2336f5ae5bbcd34e6f8f0992835ee7a3981c47832841b6e843177429ec

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 df40a57a8f72773ce85c3e3766f515a661bc8a842de858dd9fc348343b37fc8d
MD5 435af118c10356b25fe44c3e52c8f671
BLAKE2b-256 1bad5603666f1e105c7eb7754a1aa723087df85d8d4227669165318ec4295752

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 7cf6e2d6d89dd98bd9f3f5a4bee12b4a3fa83865eea48df52572cf2f6ace3c4b
MD5 9e6b25f69bb3a4466f90e18cbe1d9fce
BLAKE2b-256 48fdc0dc94458611e2887aba0f2be68b99f2dcc95d3fd18fe54799c158509847

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp312-cp312-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp312-cp312-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 64231ee18a956dbeb5d44c9081cc46090afd7feb8cb83aaf5e9817c3a6830475
MD5 a399aebfb55d56d6cb0e4f2b1b9917c6
BLAKE2b-256 bc586ad127a23be0a067e8b8bb62039b4e114c16bee03541fb960b36be543111

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7cf03d1f54a1ec40d72f913bb139798f386eb5ff962a6aeaab007d2241c3a49e
MD5 121e9f34ac34fe9d705544bd3639e68c
BLAKE2b-256 bd2e1b91e209910e4452bf979a59c58c26ee430159c44da1599b86c4844925e9

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bb73f5f7da67cd3d37f88e2faf5ea9c52a7b10e256ddcd4f5fe70a9f20c379a3
MD5 fd5becfbfec4708faa2ec63e04a6f55b
BLAKE2b-256 0b6340f9099679fe0ea73e8e83fbf2dbd499cd832bc9e1f9e0aa020d55fd6c07

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 743b3744f0943af0eff8855764cd4c62adc4e407a1bbe90663442aa9f4bee7e2
MD5 227c72fda36929cc117efadb438464f9
BLAKE2b-256 7634870feee88ebd725675e74e7b3ce69657c08ca991dba0b8ed1db9da908850

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp311-cp311-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp311-cp311-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 1a5cbef3cea0880e04bff9e9ae180201c6ceaa97bb06957a64c9d031be2b6f0c
MD5 69394835512a717d8b5cfe6677537b10
BLAKE2b-256 ced73225576cc907e869f09e2266a482fc7db21f4f740535ecf83febe06abecb

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 715aedda078839da80faee1f81ffbf6bc94ebccb961b5cf9fe6eae66c7eda871
MD5 9bb18a1b74b59c0194e59993730e3fbb
BLAKE2b-256 55c34c732b9cc917ae19481da0593e8b4d165ef9e7efa64ac1417f1516f8e62b

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c1469745485195df2cdd2d722b1e4116cd6d648c75e7c6451f01fe0c839ce76b
MD5 8e0c9acc9967376d665c439ee416da5f
BLAKE2b-256 426bc843a43b424d5452ddc67be2ca4e67b4e88b03ceef34dcf525cd56c18bb5

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 69604fdc168ed2caab23922457a8913b4b516ed924de7dd119b8541b2e9e4f43
MD5 a430ceec936b908d00f402848d8d3bbb
BLAKE2b-256 2cf8f8a67f2bb069499bdbf7b4941c10945bc0c79d25d8227d27b45b3db8a248

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 31db05e1fac28ec0dd93518dcf6d8e3d8853682c3949efb8991d885f10724913
MD5 413756c7de7bb8a36d64d7a45da822a5
BLAKE2b-256 9bd014639ba9d1ac9a01ddb58937794ea492413c0ab3ad603e2dcf03972bffd6

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f2a0fcb9dac4bbca66662e83e95f9ae0e66400be05e4adda97e3c644e31c8279
MD5 f44188517baa555b7422b39a3d7467c6
BLAKE2b-256 c9f57495f7c0cd37ebcbde2ea136363c4cb64e1a8afcdf130fa596ecf041cf40

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5c723f8f9059a934efd56baeabedff2556528cc50facf01e4737f135d0b8558c
MD5 624be41d42279ec9e983d961c489515e
BLAKE2b-256 80eb2e01b76169d17daa5b6852c9d9ede77935380a1dd779c6f8a62950f3dd76

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp39-cp39-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 48a42baee89b8545cca41d2613f7ccecd78fd0127f9b5205b35c7cb9724d5f41
MD5 bea205dfe8a4792b9915f45994ef9fee
BLAKE2b-256 6056b07058f201c59fbb176f8b2c1ee1d6d4c2eb06ebf5c416d205851184ce5c

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 11c3c765117dbb7226103ea9324ed81f372e511f0ba572dddbe143d64ba7419b
MD5 2b24249553928f4ad70e9d3425b9081b
BLAKE2b-256 4fc881620b2c2ef7e11e43ac3a2ab8e39c22d80c0aefbdd3b5fb108e302444a1

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 21d84aabf1b61b0827e37f2b418e42f1fa86cf0b4c495afb8d5359d3961f95dc
MD5 51b83c68d5638ea345eb28b4d045f447
BLAKE2b-256 4b0f889f3c5a77ba437c7bd5f7a5083eb3bfa24fcd981647ecdd69e66cc4aa95

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.6-cp38-cp38-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.6-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 2ffc0b6a045577d8e946f3ef93acb46f1a34c656a7bb57eb3ade39173b274a38
MD5 2dcbcb135329a9587982814853b3672e
BLAKE2b-256 67b6a1bcd9e9e6736051d474b0cafc36542f9fa010fd253ea696dd8fefab7998

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page