fabricatio-webui
Web UI service for the Fabricatio LLM application framework. Serves a Vue-based single-page application built with Vite over an axum HTTP server (Rust, bound via PyO3).
Installation
pip install fabricatio[webui]
# or
pip install fabricatio-webui
The CLI entry point requires the cli extra:
pip install fabricatio-webui[cli]
Quick Start
Start the service with the bundled frontend:
fc-webui
This serves the SPA at http://127.0.0.1:9846. Use --frontend-dir / -d to point at a custom build, and --addr / -a to change the bind address:
fc-webui --addr 0.0.0.0:3000 --frontend-dir ./dist
Run something in under a minute (no LLM required)
The Hello Fabricatio blueprint is a pure-Python two-step pipeline that needs no LLM, no API keys, and no configuration:
- On the board canvas, drag webui → Hello Fabricatio from the blueprint rail onto a role (create one first via right-click → Add role).
- Double-click the role card to open the workflow: a
TextStatsnode wired into aSummarizeStatsnode. - Press
Ctrl+Enter, keep the namespace (hello-fabricatio), and put your text in Extra init context:{"text": "hello fabricatio"}. - Run — the console streams
node_start/doneevents and the task result is the summary line, e.g.[demo] chars: 16, words: 2, lines: 1.
Every other shipped blueprint (novel/typst pipelines) drives real LLM calls and requires configured credentials before it can run.
API
All functionality is exposed through the Rust-backed Python module fabricatio_webui.rust.
start_service(...)
Starts an async HTTP server (axum + tokio) that serves static files from frontend_dir with SPA fallback (all unmatched routes serve index.html). CORS is permissive when allowed_origins is empty, otherwise restricted to the given origins.
| Parameter | Type | Description |
|---|---|---|
frontend_dir |
str | PathLike |
Directory containing the built frontend |
data_dir |
str | PathLike |
Workflow persistence directory |
addr |
str |
Bind address, e.g. "127.0.0.1:9846" |
node_registry_json |
str |
JSON array of node type definitions |
blueprints_json |
str |
JSON array of package-defined blueprints |
allowed_origins |
Sequence[str] |
CORS allowed origins (empty = permissive) |
submit_fn |
Callable |
Worker: submit(execution_id, task_json) |
cancel_fn |
Callable |
Worker: cancel_current() -> bool |
queue_snapshot_fn |
Callable |
Worker: queue_snapshot() -> str (JSON) |
history_snapshot_fn |
Callable |
Worker: history_snapshot() -> str (JSON) |
rebuild_roles_fn |
Callable |
Worker: re-dispatch roles after save/delete |
persist_workflows |
bool |
When false, save/delete keep in-memory state only and skip writing workflows.json |
The exact Python-visible signature lives in the generated stub
(python/fabricatio_webui/rust/__init__.pyi, regenerated by
cargo run -p fabricatio-stubgen --features webui).
Execution pipeline
Submissions (POST /api/execute or a WS submit message) are forwarded to an in-process asyncio worker (fabricatio_webui.worker.WorkflowWorker). The worker instantiates Action nodes from the workflow graph, executes them in topological order, and streams lifecycle events back over WebSocket. POST /api/interrupt cancels the running execution (execution_done with cancelled: true). Queue and history are owned by the worker and exposed via GET /api/queue and GET /api/history.
The CLI wires everything together:
# fc-webui — worker + server run on one event loop
import asyncio, json
from fabricatio_webui.blueprints import build_blueprints
from fabricatio_webui.config import webui_config
from fabricatio_webui.registry import build_node_registry
from fabricatio_webui.rust import rust_broadcast, start_service
from fabricatio_webui.worker import WorkflowWorker
async def main() -> None:
worker = WorkflowWorker(
rust_broadcast, "./workflows",
queue_max=webui_config.queue_max, history_max=webui_config.history_max,
)
await asyncio.gather(
start_service("./www", "./workflows", "127.0.0.1:9846",
json.dumps(build_node_registry()["node_types"]),
json.dumps(build_blueprints()["blueprints"]),
list(webui_config.allowed_origins),
worker.submit, worker.cancel_current,
worker.queue_snapshot, worker.history_snapshot,
worker.rebuild_roles,
bool(webui_config.persist_workflows)),
worker.run(),
)
asyncio.run(main())
Board editor
The frontend is a node-based board editor for authoring role-driven workflows.
A board is the top-level saved document (format_version: 2) holding:
- roles — each with a name, description, and a list of workflows; every
workflow is a node graph plus the namespace pattern it subscribes to
(e.g.
"write::book"→"write::book::*::Pending"). - actions — optional board-level custom Action definitions (emitted as Python subclasses by the code generator).
Blueprints are collected at startup from the workflows subpackage of every
installed fabricatio-* package (the node catalog's actions likewise, from
each package's actions tree), so installing another ecosystem package is
enough for its content to appear — no configuration. They are served via
GET /api/blueprints and offered in the sidebar for one-click board
seeding. The introspected node catalog — every registered Action subclass with
its typed ports, config fields, widget hints, MRO groups, source code, and an
8-hex schema fingerprint — comes from GET /api/nodes. Boards are CRUD-managed
through GET|POST /api/workflows and GET|DELETE /api/workflows/{id}; every
save/delete re-dispatches roles onto the worker's event bus.
Using the editor
- Add nodes: right-click or double-click the canvas → fuzzy-searchable node
menu grouped by category.
Ctrl+Fopens the command palette for node/command search from anywhere. - Wire dataflow: drag between port dots; connections are type-checked
(
isValidConnection), optional inputs render hollow handles. - Configure inline: every config field renders an in-node widget derived
from the Action's pydantic annotations — toggles, number steppers with
min/max/step, combos fed by
Literaloptions, text/textarea, JSON fields; fields are grouped by their owning class in the Action's MRO. - Run:
Ctrl+Enteropens the run dialog; publish a task by namespace and watch per-node status badges + the live console (node_start/done/errorevents).POST /api/interruptcancels mid-run. - Save:
Ctrl+Spersists the board server-side; autosave drafts go to browser localStorage.
Themes
The UI ships dark (default) and light themes. Switch via Settings sidebar → Appearance → Theme. The choice persists per-browser (localStorage) and is applied before first paint (no flash on reload).
Import / export boards
In the Boards sidebar:
- Export all (header ⤓): downloads
fabricatio-boards.json, a JSON array of every saved board. - Per-board export (row ⤓): downloads
<name>.jsonfor that one board. - Import (header ⤓↑): pick one or more JSON files — each may hold a single
board object or an array. Every entry must be
format_version: 2; entries are upserted by name (the server derives the storage id from it), so re-importing an edited file updates the existing board. Invalid payloads raise an error toast and leave the stored boards untouched.
Boards exported this way are plain JSON — diff them, commit them, share them, or hand-edit roles/workflows offline and import back.
WebSocket protocol
One endpoint: /ws. Messages are JSON objects tagged by a type field.
Client → server:
| type | payload |
|---|---|
submit |
{ workflow: WorkflowJSON, task_input?: any } |
Server → client:
| type | payload | notes |
|---|---|---|
execution_start |
{ execution_id, timestamp? } |
run begins |
node_start |
{ execution_id, node_id, node_type, timestamp? } |
node begins |
node_done |
{ execution_id, node_id, output?, timestamp? } |
node succeeds |
node_error |
{ execution_id, node_id, error, traceback?, timestamp? } |
node fails |
node_output |
{ execution_id, node_id, output_key, data, timestamp? } |
per-output-key stream |
execution_done |
{ execution_id, result?, error?, cancelled?, timestamp? } |
terminal event |
status |
{ queue_length, running_count } |
emitted on enqueue/dequeue |
llm_token |
{ execution_id, node_id, token, timestamp? } |
receive path implemented end-to-end but nothing emits it yet (future work) |
Configuration
All options below are read through the fabricatio configuration chain (see the
Configuration Guide). Set them under the
[ext.webui] table in fabricatio.toml, equivalently under
[tool.fabricatio.ext.webui] in pyproject.toml, or via
FABRICATIO_EXT__WEBUI__<FIELD_UPPER> environment variables.
[ext.webui]
addr = "127.0.0.1:9846"
queue_max = 64
| Option | Type | Default | Description |
|---|---|---|---|
addr |
str |
"127.0.0.1:9846" |
— |
frontend_dir |
str |
"" |
empty = use bundled www |
allowed_origins |
tuple[str, ...] |
("http://localhost:*", "http://127.0.0.1:*") |
— |
queue_max |
int |
64 |
— |
history_max |
int |
256 |
— |
persist_workflows |
bool |
True |
— |
Access at runtime: from fabricatio_webui.config import webui_config.
Dependencies
fabricatio-core— core interfaces and configurationaxum+tokio+tower-http(Rust) — HTTP server and middlewaretyper(optional, for CLI) —fc-webuicommand
Todos / Known Gaps
Re-verified 2026-08-21 against source. Grouped by category; checkboxes track completion.
Functional gaps
-
ComfyNode.vueopen-sourceemit is not wired — the title-bar dblclick emitsopen-source, but VueFlow does not propagate custom events from custom node types, soNodeCanvas.vueuses theonNodeClickdblclick path instead. Remove the dead emit or document why it is kept. -
llm_tokenis never emitted — the full receive path exists (Rust variant, TS interface, execution-store token buffer) but no Python code emits token events from LLM calls. Future work: wire streaming tokens into the instrumented actions.
Test gaps
-
migrate_boardhas no test coverage —test_registry.pycoversmigrate_workflowonly; the format 0/1 → 2 board migration is untested. - Frontend unit coverage is thin — only
argGroups,autoLayout,boardstore, andNodeWidgethave specs. Missing:workflow/ui/execution/loading/notificationsstores, all canvas/chrome/board components, and all composables (useWebSocket,useHotkeys,useAppActions,useOutputPreview). - No Rust tests beyond
types.rs—api.rs,state.rs,ws.rs,webui.rshave no unit/integration tests for the HTTP and WS endpoints.
Code hygiene
- Pre-existing ruff violations in
registry/_schema.py—C901(_type_to_port_type13 > 10) andPLR0912(_widget_hint15 > 12); carried over verbatim from the oldregistry.py. Refactor or extend the# noqacomments. - Vite
INEFFECTIVE_DYNAMIC_IMPORTwarning —src/api/client.tsis dynamically imported bystores/board.tsbut statically by other stores; the dynamic import never splits a chunk.
Infra / DX
- No E2E browser tests — the workspace lacks a browser-test harness for the webui package (Puppeteer unavailable in the Bun JS VM); only live API checks are possible.
- Python tests lack a package-local runner config —
python/has nopyproject.toml; tests must be invoked with an explicit path (python -m pytest packages/fabricatio-webui/python/tests/) anduv runattempts rebuilds and times out.
License
This project is licensed under the MIT License.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
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 fabricatio_webui-0.6.1-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63960f3bfc03d9db57dda85df880eb22c62f0f28d205584ba3f578ff73cd3871
|
|
| MD5 |
7babef197af515d328a205c99c4ebedd
|
|
| BLAKE2b-256 |
87507ff9a7803148fb18d23644e40480431bc6a4cd397a092e9c483cb1275808
|
File details
Details for the file fabricatio_webui-0.6.1-cp314-cp314-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp314-cp314-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.14, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
681c2450a0ec581e96dd91fc5d7ad3412d19e3a3e2f36c225abb130a7d8e1e08
|
|
| MD5 |
8d273280f3dc5ea40d0a568ad0e08190
|
|
| BLAKE2b-256 |
71f5f4f76e8ba906ff50f66570d46071bd8250aa37309f13843840bf703f7933
|
File details
Details for the file fabricatio_webui-0.6.1-cp314-cp314-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp314-cp314-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.14, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79af2a5d1552a210ad334ab9c2cd726c3b049552f2f22eeb3c15ee596bc4274d
|
|
| MD5 |
92e10a1d08352cc16455fb5148842ac1
|
|
| BLAKE2b-256 |
b7f5d476d6e4a69b194a000864d391d633ad2d7e1384e30402cd106e101e88e7
|
File details
Details for the file fabricatio_webui-0.6.1-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78395490c4adb87df13ed031dc91f9e3074ad0a4b71588821d5392556ed053f9
|
|
| MD5 |
89fde1c49cc6c9b1b1a211865ac97af4
|
|
| BLAKE2b-256 |
989d6fec2d69a923a4190827f743a933bced13febabf279292472a2c4f7044e3
|
File details
Details for the file fabricatio_webui-0.6.1-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7cd8fd9cb6829e5af0b08123705a76d1446d0754c4bf518023466bb581fcfcb
|
|
| MD5 |
998c355a0f6673835edb80223d904fdd
|
|
| BLAKE2b-256 |
f190055eabf4c4dee9114f29445f8751fc1ac0e93be7de4b3497e631fd324d7c
|
File details
Details for the file fabricatio_webui-0.6.1-cp313-cp313-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp313-cp313-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.13, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2e6b3dc3b21b4042062a17b5267cf33b212ad5e7879214c5ccf53dacc4d8c49
|
|
| MD5 |
cb18ec338c6d8072c7e3257b153ac529
|
|
| BLAKE2b-256 |
fdf877d436315f098710ca93bcd63af5a9e34c055cae5bd113831cae8a32e451
|
File details
Details for the file fabricatio_webui-0.6.1-cp313-cp313-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp313-cp313-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.13, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07cc5b6e76c1798d846876118c9a160de3f9253a09b313afeb404c9a40ac710a
|
|
| MD5 |
91dcd1920a6e03d998566ed7de3ee369
|
|
| BLAKE2b-256 |
ebee8b4102554eb0382157c7290fe0a57d85cda1c244f2ef5c8044cd8c0df877
|
File details
Details for the file fabricatio_webui-0.6.1-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e78ec89ab74a04b8e4794d5d5d98166237a99e0f7fc1470f30afea823cf9024
|
|
| MD5 |
1e15ffe7008a5fe8c458f2c88c294591
|
|
| BLAKE2b-256 |
30158cf179673607b6aad821ec612e19cb10fe51fafe94cac3a4f4c8a9d9452f
|
File details
Details for the file fabricatio_webui-0.6.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e40d238b63c5b96890718cdd6e90aab35068c9ea6f9aefb35ff105b43ad92f43
|
|
| MD5 |
c649abc745f46b05140e10f4c377239f
|
|
| BLAKE2b-256 |
d23801ddf48fe2f691488fcbcec97204056a1b46b0fc3dcb2930eb432dcb9b36
|
File details
Details for the file fabricatio_webui-0.6.1-cp312-cp312-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp312-cp312-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9d012e6c91437f8fe89e5586e41b01e059c04a4d87bb4b2a0187ac3b9f6013e
|
|
| MD5 |
73e0550ee3d5a8e85b97b6caa0e3b523
|
|
| BLAKE2b-256 |
59a7767eac003d3a73d48057e4465693a87e7487a63e3c53a28fad4b0065a1a1
|
File details
Details for the file fabricatio_webui-0.6.1-cp312-cp312-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp312-cp312-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.12, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62d308d6fee846b8d370d84a9601d16d50a53472f104c70cdeec1cae836cce7b
|
|
| MD5 |
b354a125504a1e268b0279255aafc96c
|
|
| BLAKE2b-256 |
8c6db4a27e313921a99342e9fa9e1be29eb989ddec2f2e4eb10f8048f2509354
|
File details
Details for the file fabricatio_webui-0.6.1-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: fabricatio_webui-0.6.1-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d346dd289c8ffbe74673efd3f6da7eb22c35266118f5e89e57532faeb4b173cb
|
|
| MD5 |
ae8cd399cad13cd0a95f5027b28bf395
|
|
| BLAKE2b-256 |
f2d902336278d0fe0189b1af399a61f642c83b6057ba7307e8fa1bcd8d5a35d1
|