Embedded vector database using the TurboQuant algorithm (arXiv:2504.19874) — zero training, 2-4 bit compression, fast inner-product search
Project description
TurboQuantDB
An embedded vector database with a Python API, built around the TurboQuant algorithm (arXiv:2504.19874) — two-stage quantization that achieves near-optimal vector compression with zero training time.
Goal: make massive embedding datasets practical on lightweight hardware. A 100k-vector, 1536-dim collection that would occupy 586 MB as raw float32 fits in 108 MB on disk with TQDB b=4, or just 59 MB with b=2 — enabling laptop-scale RAG over millions of documents without a dedicated server.
Two deployment modes:
- Embedded —
tqdbPython package (pip install tqdb), runs in-process (no daemon) - Server — Axum HTTP service in
server/, with multi-tenancy, RBAC, quotas, and async jobs
Key Properties
- Zero training — No
train()step. Vectors are quantized and stored immediately on insert. - 5–10× compression — b=4 reduces 1536-dim float32 embeddings from 586 MB to 108 MB (5.4×); b=2 reaches 59 MB (9.9×) at 100k vectors.
- Two quantizer modes — default (
dense, best recall) and a faster ingest variant (srht) for streaming/high-d workloads. See docs/QUANTIZER_MODES.md for a full breakdown. - Optional ANN index — Build an HNSW graph after loading data for fast approximate search.
- Metadata filtering — MongoDB-style filter operators on any metadata field.
- Crash recovery — Write-ahead log (WAL) ensures durability without explicit flushing.
- Python native —
pip install tqdb; no server or sidecar required.
Installation
pip install tqdb
Building from source (Rust toolchain required): see DEVELOPMENT.md.
Recommended Setup
Default config: fast_mode=False, rerank=True — QJL residual stored and used during reranking for best recall at d ≥ 1536.
Note: At d < 512, QJL projections are too noisy and
fast_mode=Falsereduces recall below the MSE-only baseline. Usefast_mode=True, rerank=Falsefor d < 512.
from tqdb import Database
# High-d (d ≥ 1536) — default config, QJL reranking enabled
db = Database.open(path, dimension=DIM, bits=4)
results = db.search(query, top_k=10)
# 92.2% Recall@1, 99.9% Recall@4 at 100k×1536 | 108 MB disk
# Low-d (d < 512) — MSE-only for best recall at low dimensions
db = Database.open(path, dimension=DIM, bits=4, fast_mode=True, rerank=False)
results = db.search(query, top_k=10)
# Optional: build an HNSW index after bulk load for sub-10ms queries
db.create_index()
results = db.search(query, top_k=10, _use_ann=True)
Full parameter reference: docs/PYTHON_API.md
Quick Start
import numpy as np
from tqdb import Database
db = Database.open("./my_db", dimension=1536, bits=4, metric="ip", rerank=True)
db.insert("doc-1", np.random.randn(1536).astype("f4"), metadata={"topic": "ml"}, document="Machine learning intro")
db.insert("doc-2", np.random.randn(1536).astype("f4"), metadata={"topic": "systems"}, document="Rust memory model")
results = db.search(np.random.randn(1536).astype("f4"), top_k=5)
for r in results:
print(r["id"], r["score"], r["document"])
Python API
Full reference:
docs/PYTHON_API.md
# Open / create
db = Database.open(path, dimension, bits=4, seed=42, metric="ip",
rerank=True, fast_mode=False, rerank_precision=None,
collection=None, wal_flush_threshold=None,
quantizer_type=None) # None/"dense" = default (Haar QR + Gaussian); "srht" = fast O(d log d) ingest
# NOTE: rerank=True only improves recall when fast_mode=False (the default).
# With fast_mode=True, rerank=True adds latency but no recall gain.
# Write
db.insert(id, vector, metadata=None, document=None)
db.insert_batch(ids, vectors, metadatas=None, documents=None, mode="insert") # "insert"|"upsert"|"update"
db.upsert(id, vector, metadata=None, document=None)
db.update(id, vector, metadata=None, document=None) # RuntimeError if not found
db.update_metadata(id, metadata=None, document=None) # RuntimeError if not found
# Delete & retrieve
db.delete(id) # → bool
db.delete_batch(ids) # → int (count deleted)
db.get(id) # → {id, metadata, document} | None
db.get_many(ids) # → list[dict | None]
db.list_all() # → list[str]
db.list_ids(where_filter=None, limit=None, offset=0) # paginated
db.count(filter=None) # → int
db.stats() # → dict
len(db) / "id" in db # container protocol
# Search — brute-force by default; pass _use_ann=True to use HNSW index
results = db.search(query, top_k=10, filter=None, _use_ann=False,
ann_search_list_size=None, include=None)
# include: list of "id"|"score"|"metadata"|"document" (default all)
# ann_search_list_size: HNSW ef_search override (only used when _use_ann=True)
all_results = db.query(query_embeddings, n_results=10, where_filter=None)
# query_embeddings: np.ndarray (N, D) — returns list[list[dict]]
# Index
db.create_index(max_degree=32, ef_construction=200, n_refinements=5,
search_list_size=128, alpha=1.2)
# Metadata filter operators
# $eq $ne $gt $gte $lt $lte $in $nin $exists $and $or
db.search(query, top_k=5, filter={"year": {"$gte": 2023}})
db.search(query, top_k=5, filter={"$and": [{"topic": "ml"}, {"year": {"$gte": 2023}}]})
Benchmarks
Three datasets, 100k vectors each, matching arXiv:2504.19874 Figure 5. Default config: quantizer_type=None (dense), fast_mode=False, rerank=True (QJL reranking enabled — best recall).
Key results at 100k × d=1536 (DBpedia), brute-force, b=4, rerank=True:
| Metric | Value |
|---|---|
| Recall@1 | 92.2% |
| Recall@4 | 99.9% |
| Disk | 108 MB (5.4× compression) |
| p50 latency | ~51ms |
Full tables (all 8 configs × 3 datasets), ANN guidance, and reproduction steps: docs/BENCHMARKS.md
RAG Integration
from tqdb.rag import TurboQuantRetriever
retriever = TurboQuantRetriever(db_path="./rag_db", dimension=1536, bits=4)
retriever.add_texts(texts=texts, embeddings=embeddings, metadatas=metadatas)
results = retriever.similarity_search(query_embedding=query_vec, k=5)
for r in results:
print(r["score"], r["text"])
Server Mode
An optional Axum HTTP server in server/ adds multi-tenancy, RBAC, and async jobs. See server/README.md for setup and endpoint reference.
Research Basis
This is an independent implementation of ideas from the TurboQuant paper. The algorithm itself was authored by the original researchers.
Zandieh, A., Daliri, M., Hadian, M., & Mirrokni, V. (2025). TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate. arXiv:2504.19874
@article{zandieh2025turboquant,
title={TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate},
author={Zandieh, Amir and Daliri, Majid and Hadian, Majid and Mirrokni, Vahab},
journal={arXiv preprint arXiv:2504.19874},
year={2025}
}
License
Apache License 2.0 — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tqdb-0.5.0.tar.gz.
File metadata
- Download URL: tqdb-0.5.0.tar.gz
- Upload date:
- Size: 926.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02b61c83ff188d52801d24c153b070ef9c8611ed2be05146158926c16de97e1a
|
|
| MD5 |
c90b6b8be63fb5324058d0ad702dda05
|
|
| BLAKE2b-256 |
623acee9ec652c58d6c55a9f31aa6df53a07fa40ddd82dc9549497d313b0021f
|
File details
Details for the file tqdb-0.5.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 837.0 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc28dd90dbdfd42173838a39fb3a1b309c202efa92084bfc2cf9578a375278ed
|
|
| MD5 |
4794c50734664972a76fbb561b83fb41
|
|
| BLAKE2b-256 |
7a142eea91af4b6b92ea4055a4211dfd246ac0026fea161e6f6ef2637b5472ce
|
File details
Details for the file tqdb-0.5.0-cp313-cp313-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp313-cp313-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.13, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2f5d0c6fa2f7e0a8af4943ffb8e77f5a77e92f7cce44da6cbc7a46b8d647bd7
|
|
| MD5 |
5877083c7f5cc12bd2fa8aa683e9bad6
|
|
| BLAKE2b-256 |
839abe0a95db96dfa872e6970a7c31e25c42e3b7a9384f8b3428b827f3958145
|
File details
Details for the file tqdb-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19ff43f59068725becc260ef49784be351bb65db757abfa04627aae1690728d5
|
|
| MD5 |
330de0e15f5c61643194dfe87024b2c3
|
|
| BLAKE2b-256 |
13e3fd52c1757330244c8f898a3c7a802a84eac2069fa945e3c155e7fd4b9c00
|
File details
Details for the file tqdb-0.5.0-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 933.1 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e2657a7c8a39bf821724ff73c3ea27401675cddc796d8e98ac000c1c765fd3c
|
|
| MD5 |
269b875439641b7b790040572d440f68
|
|
| BLAKE2b-256 |
b0876f210896058d4a9ca6a3d60ac2d0ce7c336d053fb5fc2a6faefb064dba93
|
File details
Details for the file tqdb-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl
- Upload date:
- Size: 959.1 kB
- Tags: CPython 3.13, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83145eed83a3b590c023cf8dcc3665dec996dd065f9b5e5c04287014b06b3c22
|
|
| MD5 |
d514868d59a10229fa1912f44c3a52c9
|
|
| BLAKE2b-256 |
f7f5888c0c367215b86d2e9751e7e726a26ea079b0bc9cd1662c4b51021bf398
|
File details
Details for the file tqdb-0.5.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 837.0 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee92b8aa09e58fc01a709572514bf3c794226e0337136bbcaabc8146972c6a95
|
|
| MD5 |
85b0b5826a2dc170597979ea715e903f
|
|
| BLAKE2b-256 |
00ad41105929667765b6532aed1921332b77d41c7d68c9784b2e55909ce46622
|
File details
Details for the file tqdb-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.12, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68ad28bdae38d4b68e002a3a09714516d3106936c283f11d9fe44382941189b7
|
|
| MD5 |
b9732bc09736d2bd7577d2e21c8d967f
|
|
| BLAKE2b-256 |
462a7f03253ffd0d424662f3b450e3608e5e323518530c0c1e7b548908863663
|
File details
Details for the file tqdb-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
177d7aff006a4c9b64bae8f2fc457e6280a144cdafe8d2461dcc8b954d0a76a8
|
|
| MD5 |
47bae68fdaa62b5102cd3ba47f09865f
|
|
| BLAKE2b-256 |
4d32166c9bb3aa4aaa80d764155b54b164061b93ab040339d71d52d0cfe6ffbe
|
File details
Details for the file tqdb-0.5.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 933.1 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2ffd5e8264340fee7620657911f29271f91849ab1b75fd440e60e755a100808
|
|
| MD5 |
d4c1da0db1e66d500c98ee03c458d6d5
|
|
| BLAKE2b-256 |
d58e7a111978990304353e77444f4704e6dee7989368b88969f7c06ef2121ce4
|
File details
Details for the file tqdb-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 959.1 kB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1070f5de61f9e4ea5c86baec17fc6cc390174ce60ad32b744a41154913a101a6
|
|
| MD5 |
a127380e8009ec2cf5acea1aa227a671
|
|
| BLAKE2b-256 |
6fe2786f8df38a63e35510f144bbdecca52a4d8c4c1fbe914985d60acd75cce3
|
File details
Details for the file tqdb-0.5.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 837.7 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d742f950e851550ee5ad64eb63fb2d4788b0cd2e8837d91b5fdb54e65bb4450
|
|
| MD5 |
d24d7b9412d42924e12d43e1b1812222
|
|
| BLAKE2b-256 |
b41c58501e31af7b8e9e7b46409c6e28c206bf1a35ef551fb0a98b5cf5c0ad66
|
File details
Details for the file tqdb-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.11, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd1767edc5dbfef8e1576583b66daecb410ba8f50649005bc83bc41683e60dac
|
|
| MD5 |
29bd7d718d4a7e8936eb26927d063b8e
|
|
| BLAKE2b-256 |
11b9bf9ff56aceefd30c828df7e8eabe65ce7edc34c6357ea38c07a7b01550e9
|
File details
Details for the file tqdb-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7c1c1ce8f6914e0074d646e620caec3bdcccfd5d6bbd6c91f173fc60b769221
|
|
| MD5 |
fa4340feb56c849695c28d32882de682
|
|
| BLAKE2b-256 |
d6b2acb16407e4233393bf5ca5cff73a05c72808a30db6f9cb75f7512cae7609
|
File details
Details for the file tqdb-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 936.4 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc994e74b6d2601efccf5bfb31c0337f0a0e91643c26b44ddd4dc6d24d54aa85
|
|
| MD5 |
5710ce08bd6d8cd78e8442582fd775ec
|
|
| BLAKE2b-256 |
c0f95388ca2054359ffcd884b759ddc7df16a21c3af9bee4372a9472b5f4881b
|
File details
Details for the file tqdb-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl
- Upload date:
- Size: 960.8 kB
- Tags: CPython 3.11, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03a1197b74222cee9a9ef98c8803596ac88b99f868ed781284ce68c1d3d1f71f
|
|
| MD5 |
3ba30ab3cfb5e74f68d44ae673a74261
|
|
| BLAKE2b-256 |
a0e517e85e042d5aea01775ca3aecbebd837950e292bcfeac095c2063c2b5d57
|
File details
Details for the file tqdb-0.5.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 839.9 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f713fbd560b43fbda3301026b500146c68ab40a1895d963b8c3e0dfeddfdbcfd
|
|
| MD5 |
f0b38ea87b7ee9fa7d2265eee4aab1a3
|
|
| BLAKE2b-256 |
77432993e052521fa0a2e56b576560ca802bd9e97e6d05ff15c93784a4808513
|
File details
Details for the file tqdb-0.5.0-cp310-cp310-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp310-cp310-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.10, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b10c3ca35d1923285234affb15f8b313b6f4def5de9894073865d63b2bea1374
|
|
| MD5 |
368a094bbb54b63315d361ace5f1a5b5
|
|
| BLAKE2b-256 |
57913e09df6f94a4c4e28eef4dec09b976190a7bfd8ef2bf364b30c3b578f099
|
File details
Details for the file tqdb-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0e14df918296cf8843622336db17860607da622dd97f9b1da4957c911546db2
|
|
| MD5 |
956dce7943c57c05f406f248062c217b
|
|
| BLAKE2b-256 |
43eff09527ad52de628ab99fa2bd4f9a9dcbc234ab5f663313f202bfc483830e
|
File details
Details for the file tqdb-0.5.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 938.0 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eed990e0abc7afe8fc1fedc2d4c5a80ecdfc431558dbabe4dc12f7e48ebac298
|
|
| MD5 |
7d3d05b2db27da7529986f4ce08720ff
|
|
| BLAKE2b-256 |
e14b637b127ee2a9c266b5ef532b8af473bc8eca8551e8b7864fb3d3c99c9e06
|
File details
Details for the file tqdb-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl.
File metadata
- Download URL: tqdb-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl
- Upload date:
- Size: 963.7 kB
- Tags: CPython 3.10, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ed9b9dd1e8349f6ca57f53a4a7ce5777746f29595ca35be463841fad2fa445f
|
|
| MD5 |
b4a9284a0a652b081a17e4da6896836d
|
|
| BLAKE2b-256 |
80771654266734e1929d993b7999b8b00ebf89e2f983864b84a5876feb1a3a1e
|