Skip to main content

Simple package to extract text with coordinates from programmatic PDFs

Project description

Docling Parse

PyPI version PyPI - Python Version uv Pybind11 Platforms License MIT

Simple package to extract text, paths and bitmap images with coordinates from programmatic PDFs. This package is used in the Docling PDF conversion. Below, we show a few output of the latest parser with char, word and line level output for text, in addition to the extracted paths and bitmap resources.

To do the visualizations yourself, simply run (change word into char or line),

uv run python ./docling_parse/visualize.py -i <path-to-pdf-file> -c word --interactive
original char word line
screenshot screenshot screenshot screenshot
screenshot screenshot screenshot screenshot
screenshot screenshot screenshot screenshot
screenshot screenshot screenshot screenshot
screenshot screenshot screenshot screenshot

Quick start

Install the package from PyPI:

pip install docling-parse

Sequential parsing

docling-parse v7 split page parsing into two public configs:

  • DecodeConfig: how to compute pages. This is fixed when a document is opened.
  • ContentConfig: what to keep or materialize per page. This can be overridden per page.
from docling_core.types.doc.page import TextCellUnit
from docling_parse.pdf_parser import (
    ContentConfig,
    ContentLevel,
    DecodeConfig,
    DoclingPdfParser,
)

parser = DoclingPdfParser(loglevel="fatal")

pdf_doc = parser.load(
    path_or_stream="<path-to-pdf>",
    decode_config=DecodeConfig(
        do_sanitization=True,
        keep_glyphs=False,
    ),
    content_config=ContentConfig(
        char_cells_content_level=ContentLevel.SKIP,
        word_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
        line_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
        shapes_content_level=ContentLevel.SKIP,
        bitmaps_content_level=ContentLevel.SKIP,
    ),
)

for page_no, page in pdf_doc.iterate_pages():
    print(page_no, len(page.word_cells), len(page.textline_cells))

    for word in page.iterate_cells(unit_type=TextCellUnit.WORD):
        print(word.rect, word.text)

    image = page.render_as_image(cell_unit=TextCellUnit.WORD)
    image.show()

If you open cheaply and later need richer output, request it per page. When the new content_config needs entities that were previously skipped, that page is re-decoded automatically:

from docling_parse.pdf_parser import ContentConfig, ContentLevel

page = pdf_doc.get_page(
    1,
    content_config=ContentConfig(
        word_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
        line_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
    ),
)

v6 -> v7 migration

The main API break in v7 is that the old public DecodePageConfig selection flags were split into two concerns:

  • DecodeConfig: compute-time tuning only
  • ContentConfig: what to skip, compute, or materialize per page

In practice:

  • open-time decode_config replaces the old per-page decode tuning
  • per-page content selection now lives in content_config
  • materialize_bitmap_bytes became include_bitmap_bytes
  • threaded page_materialization_config became page_content_config

Typical migration examples:

  • old DecodePageConfig.keep_char_cells=True -> ContentConfig(char_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE)
  • old DecodePageConfig.create_word_cells=True without surfacing them everywhere -> ContentConfig(word_cells_content_level=ContentLevel.COMPUTE)
  • old materialize_bitmap_bytes=False -> ContentConfig(include_bitmap_bytes=False)

One semantic change matters: decode_config is now fixed when the document or threaded batch is opened. If you want richer page output later, override content_config on get_page(...) instead. On the sequential path this may re-decode that page; on the threaded path you can only materialize entities the batch already computed.

Parallel parsing (multi-threaded)

Parse one or more PDFs in parallel with backpressure:

from docling_parse.pdf_parser import (
    ContentConfig,
    ContentLevel,
    DecodeConfig,
    DoclingThreadedPdfParser,
    ThreadedPdfParserConfig,
)

parser = DoclingThreadedPdfParser(
    parser_config=ThreadedPdfParserConfig(
        loglevel="fatal",
        threads=4,
        max_concurrent_results=32,
        page_content_config=ContentConfig(
            word_cells_content_level=ContentLevel.COMPUTE,
            line_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
        ),
    ),
    decode_config=DecodeConfig(),
)

doc_key = parser.load("doc_a.pdf", page_numbers=[1, 3, 5])
print(doc_key, parser.page_count(doc_key), parser.scheduled_page_count(doc_key))

for result in parser.iterate_results():
    if not result.success:
        print(result.doc_key, result.page_number, result.error_message)
        continue

    # Batch decode kept word cells in C++, but did not materialize them by default.
    page = result.get_page(
        ContentConfig(
            word_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
            line_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
        )
    )
    print(
        result.doc_key,
        result.page_number,
        len(page.word_cells),
        result.timings.total_s,
    )

For threaded parse-and-render workloads, set ThreadedPdfParserConfig.render_config and use result.get_image(), result.get_image(scale=...), or result.get_image(canvas_size=...).

Use the CLI

$ docling-parse -h
usage: docling-parse [-h] -p PDF

Process a PDF file.

options:
  -h, --help         show this help message and exit
  -p PDF, --pdf PDF  Path to the PDF file

Performance Benchmarks

Current perf tooling lives under perf/:

For historical V1 vs V2 benchmarks, see legacy_performance_benchmarks.md.

Development

CXX

To build the parser, simply run the following command in the root folder,

rm -rf build; cmake -B ./build; cd build; make

You can run the parser from your build folder:

% ./parse.exe -h
program to process PDF files or configuration files
Usage:
  PDFProcessor [OPTION...]

  -i, --input arg          Input PDF file
  -c, --config arg         Config file
      --create-config arg  Create config file
  -p, --page arg           Pages to process (default: -1 for all) (default:
                           -1)
      --password arg       Password for accessing encrypted, password-protected files
  -o, --output arg         Output file
  -l, --loglevel arg       loglevel [error;warning;success;info]
  -h, --help               Print usage

If you don't have an input file, a template input file will be printed on the terminal.

Python

To build the package, simply run (make sure uv is installed),

uv sync

The latter will only work after a clean git clone. If you are developing and updating C++ code, please use,

# uv pip install --force-reinstall --no-deps -e .
rm -rf .venv; uv venv; uv pip install --force-reinstall --no-deps -e ".[perf-tools]"

or

BUILD_THREADS=12 uv pip install --force-reinstall --no-deps -e ".[perf]"

To test the package, run:

uv run pytest ./tests -v -s

Contributing

Please read Contributing to Docling Parse for details.

References

If you use Docling in your projects, please consider citing the following:

@techreport{Docling,
  author = {Docling Team},
  month = {8},
  title = {Docling Technical Report},
  url = {https://arxiv.org/abs/2408.09869},
  eprint = {2408.09869},
  doi = {10.48550/arXiv.2408.09869},
  version = {1.0.0},
  year = {2024}
}

License

The Docling Parse codebase is under MIT license. For individual model usage, please refer to the model licenses found in the original packages.

LF AI & Data

Docling (and also docling-parse) is hosted as a project in the LF AI & Data Foundation.

IBM ❤️ Open Source AI

The project was started by the AI for knowledge team at IBM Research Zurich.

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

docling_parse-7.3.0.tar.gz (6.7 MB view details)

Uploaded Source

Built Distributions

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

docling_parse-7.3.0-cp314-cp314-win_amd64.whl (11.4 MB view details)

Uploaded CPython 3.14Windows x86-64

docling_parse-7.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (10.2 MB view details)

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

docling_parse-7.3.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

docling_parse-7.3.0-cp314-cp314-macosx_14_0_arm64.whl (9.2 MB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

docling_parse-7.3.0-cp313-cp313-win_amd64.whl (11.0 MB view details)

Uploaded CPython 3.13Windows x86-64

docling_parse-7.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (10.2 MB view details)

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

docling_parse-7.3.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

docling_parse-7.3.0-cp313-cp313-macosx_14_0_arm64.whl (9.2 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

docling_parse-7.3.0-cp312-cp312-win_amd64.whl (11.0 MB view details)

Uploaded CPython 3.12Windows x86-64

docling_parse-7.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (10.2 MB view details)

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

docling_parse-7.3.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

docling_parse-7.3.0-cp312-cp312-macosx_14_0_arm64.whl (9.2 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

docling_parse-7.3.0-cp311-cp311-win_amd64.whl (11.0 MB view details)

Uploaded CPython 3.11Windows x86-64

docling_parse-7.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (10.2 MB view details)

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

docling_parse-7.3.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

docling_parse-7.3.0-cp311-cp311-macosx_14_0_arm64.whl (9.2 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

docling_parse-7.3.0-cp310-cp310-win_amd64.whl (11.0 MB view details)

Uploaded CPython 3.10Windows x86-64

docling_parse-7.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

docling_parse-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (9.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

docling_parse-7.3.0-cp310-cp310-macosx_14_0_arm64.whl (9.2 MB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

File details

Details for the file docling_parse-7.3.0.tar.gz.

File metadata

  • Download URL: docling_parse-7.3.0.tar.gz
  • Upload date:
  • Size: 6.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for docling_parse-7.3.0.tar.gz
Algorithm Hash digest
SHA256 a417eb733ea6b0687e665f2b5d78c2fcf3ac67b3c3a7cf04f6d39f408b0d0a4b
MD5 b56566d05cc767daa3884c2fe693e32c
BLAKE2b-256 5fd7a55e98d94f09a2be27a10d1c305931160bd4dd2949425c7d92a536583f1e

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e303bfe12445c3c97d4af00b37c985bdb154093ac777da6c85aa9e76a84fa1de
MD5 85f006e16c2dd099b180a632b1ef3cda
BLAKE2b-256 ae27339db1acffa2fa712af29b7572de1d6a26ac3c6730e7530b661e9e19fe02

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 55fc7591c95e1fffca275b588cc5fa6c106ba622d19377d3f9a0a86f2b0ce3a9
MD5 fe8ee2565fd16ea033360c895700423e
BLAKE2b-256 e14107dbca5548a4660a79548ce9690939a16fc662ef5051e955f433114ed965

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 001531d0519512e4d203caeabf188d8ae189f1a6b0eebdd048cced55412fdc0a
MD5 3b1f114bdd2b6c8d5392298346be6d35
BLAKE2b-256 e3743e2342f2bc9baa3c6afcbc23d1fdc33783bffcdfdc4dc5313794fbd38701

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 060d2e6a2657354b122fd127ecb4f3d946733835ca2a85caa1e0f6ac0b2a995b
MD5 6e834670efa0693599044439d217c036
BLAKE2b-256 07ed13c53f4b7b41fd8dd06d908fa60edcda876d59015560ca045468c850b521

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b1e9ab7373b788d50c72dafbe2733733b61207beb84d1118e8ea4d198d38a575
MD5 fd4d6e71a0ef526b2a765f4ed8b32bfd
BLAKE2b-256 b8beff6fa29561975d1ff99b39fdc3c37585474270c3c7448c81c6c77a140f5f

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 55caa1da7f137fe24785753cf7d125f9545e792e3fb74ada49b45a8ec771c4d4
MD5 ca7d03cae1282bc3b84e4d80768f40e2
BLAKE2b-256 ad5c210d25fadd825694f6105b2da5aecba925150d99248fc3ce25114ff84eeb

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 336b63471e15dc1dcb4a8b3f21e0550de5c5d1d75b7fe1e84f9a2e2ac382802b
MD5 a76bc1be8acee5be64418f8f13992179
BLAKE2b-256 f8d1e5e33df18813efee77e64957fe060cddebad40d4fec960e9bd1a6a233518

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 ee1d6e04c10d70e160c348fd3c93e591f54dc79d9d4688f04945efe92ef645c7
MD5 853cf0015b883c8c6e67254af3c6426d
BLAKE2b-256 9ccb82e6c2f76ff120e6050fb44f15bc6622fef3e946950adf58da441c6aa712

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8ca99dd631ee61d7bb6deaa3393f8202430710a18ccec300e8b8059aa3241eae
MD5 e74c4cfa0799bffca7ec8d9c4477aaa9
BLAKE2b-256 9f408a0278f2c785421f27ac29d0ccb29fc6cef0628c29da90c5247be081d745

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c5075857171cbfc5ee07b0d876ce18796e47fc0dd0ffa675787b8ae917625735
MD5 33b8138b38720ecce541f473df4805b0
BLAKE2b-256 7a8c2c60feb42c9fc567acfaf18686c5fda449f8f2d1ab64f3ab2b17fe6f8ecc

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c91ca42ea800b834b9f9229305b32440598233b0264cd60189273ecfd3121c61
MD5 af1995322d7d8d2a908500d082f3eded
BLAKE2b-256 3ebaa8d314e6df0f49b1e486f8b7e0288d7b12a61a6129fe074145116346ccc2

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a312f76d24eb9f5568bce960c2d9574bd0a835a9df53d4095710a23a060077ec
MD5 89698753d9244559ead66cc5a13e396e
BLAKE2b-256 8f91bd29ced657a032fd7b2b57366616d830e15c7b56bcb610025be0e72a6be4

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8a4ef4e608aa2c8c2e5186c27cf3a757b5419a0bcb894b69cbcdade3420c3540
MD5 ba161fa728ff6c733cb3deb3044e26d8
BLAKE2b-256 e6151a9e7e709242a335cce37af92020e8e558c414dcae6202ee720aeeacf6cb

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 520a9c70dd35d67eca683e7a60b6c406096f5c69951844d4873753cff4000727
MD5 dde614f8db670473a1eb76b559ba7890
BLAKE2b-256 9fd68f61adc82fae0f78cb046f9377281b29c8c745ec7704ac8ecd96e03a4707

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2052cc744db90bb24ebfc1246dccb261606619b8ecf84a760646e7ad857d4ef2
MD5 226f35af51dd49f1c68e15fea3277e19
BLAKE2b-256 8e7c8a83788d404f58861c8e61c1d8aca05cd679beb5bc3ad0df23137102293f

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 1fe265575cb55b763ccb98fb08bacd7dbc4bacccd9ecee3ef354513e33f0211b
MD5 a2ee2abf2e157d2a15a7ff343c353f89
BLAKE2b-256 556a15e23321288dec05851fa4a8b541b4d07d4aeeceac513367d0dde32771e8

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d18f0d6652973f69f27b978d6a03621528d63010fb6de731e09b9338897bbcd0
MD5 cde416fe1f8e30cdc95f2829df36066a
BLAKE2b-256 14332296d9fe9888c0eed387319d88b881f2c2178b9bbee87335f5e43516dabe

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9aa6fdb8cc4800075e5f4d609705806481a0fe5cf761808b4d5864465a001903
MD5 4b70efd1ef3f57dc9b0f18965dcbd8dd
BLAKE2b-256 af3479a5badb82cf1cb85af594282b703d4087641f7fe224bb4a125c706edbf1

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c686c87693ff5897ddf70f3fb567f4f96cb0a18fb3453834086514a205a09519
MD5 42baceb4bbb53d220d6a082c0f7b41a4
BLAKE2b-256 cf497e3e157be44db3231135049c5a15ab8e7fa13795eb0734be3f495f95c8bf

See more details on using hashes here.

File details

Details for the file docling_parse-7.3.0-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for docling_parse-7.3.0-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d06e0c4f9c8ad1093b9875e95e1158a9dfc2dfc2fac91dfeb75a41380940ff24
MD5 f9a27cc0b83e3a7e254ad41ca2286dae
BLAKE2b-256 9fd014c98901bef1c1872a74c8ee9de48a16b7f55dd4252a681c2fa983b839dd

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