Skip to main content

Barcode and QR code scanning SDK for Python

Project description

Python Extension: Barcode and QR Code SDK

The project uses CPython to bind Dynamsoft C/C++ Barcode Reader SDK. It aims to help developers build Python barcode and QR code scanning apps on Windows, Linux, macOS, Raspberry Pi and Jetson Nano. You are free to customize the Python API for Dynamsoft Barcode Reader.

About Dynamsoft Barcode Reader

Supported Python Edition

  • Python 3.x

Install Dependencies

pip install opencv-python

Command-line Usage

$ scanbarcode <file-name> -l <license-key>

# Show the image with OpenCV
$ scanbarcode <file-name> -u 1 -l <license-key>

python barcode QR code scanner

How to Build the Python Barcode and QR Code Extension

  • Create a source distribution:

    python setup.py sdist
    
  • setuptools:

    python setup_setuptools.py build
    python setup_setuptools.py develop # Copy libraries to barcodeQrSDK folder
    
  • scikit-build:

    python setup.py build
    python setup.py develop # Copy libraries to barcodeQrSDK folder
    
  • Build wheel:

    pip wheel . --verbose
    # Or
    python setup_setuptools.py bdist_wheel
    # Or
    python setup.py bdist_wheel
    

Quick Start

  • Console App

    import barcodeQrSDK
    
    # set license
    barcodeQrSDK.initLicense("DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ==")
    
    reader = barcodeQrSDK.createInstance()
    
    results = reader.decodeFile("test.png")
    for result in results:
        print(result.format)
        print(result.text)
        print(result.x1)
        print(result.y1)
        print(result.x2)
        print(result.y2)
        print(result.x3)
        print(result.y3)
        print(result.x4)
        print(result.y4)
    
  • Video App

    import cv2
    import barcodeQrSDK
    import time
    import numpy as np
    # set license
    barcodeQrSDK.initLicense("DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ==")
    
    # initialize barcode reader
    reader = barcodeQrSDK.createInstance()
    
    def get_time():
        localtime = time.localtime()
        capturetime = time.strftime("%Y%m%d%H%M%S", localtime)
        return capturetime
    
    
    def read_barcode():
    
        vc = cv2.VideoCapture(0)
    
        if vc.isOpened():  # try to get the first frame
            rval, frame = vc.read()
        else:
            return
    
        windowName = "Barcode Reader"
    
        while True:
            cv2.imshow(windowName, frame)
            rval, frame = vc.read()
            results = reader.decodeMat(frame)
            if (len(results) > 0):
                print(get_time())
                print("Total count: " + str(len(results)))
                for result in results:
                    print("Type: " + result.format)
                    print("Value: " + result.text + "\n")
                    x1 = result.x1
                    y1 = result.y1
                    x2 = result.x2
                    y2 = result.y2
                    x3 = result.x3
                    y3 = result.y3
                    x4 = result.x4
                    y4 = result.y4
    
                    cv2.drawContours(frame, [np.array([(x1, y1), (x2, y2), (x3, y3), (x4, y4)])], 0, (0, 255, 0), 2)
    
            # 'ESC' for quit
            key = cv2.waitKey(20)
            if key == 27:
                break
    
        cv2.destroyWindow(windowName)
    
    
    if __name__ == "__main__":
        print("OpenCV version: " + cv2.__version__)
        read_barcode()
    

    Python barcode and QR code scanner

Methods

  • barcodeQrSDK.initLicense('YOUR-LICENSE-KEY') # set barcode SDK license globally

    barcodeQrSDK.initLicense("DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ==")
    
  • barcodeQrSDK.createInstance() # create a barcode reader instance

    reader = barcodeQrSDK.createInstance()
    
  • decodeFile(filename) # decode barcode and QR code from an image file

    results = reader.decodeFile("test.png")
    
  • decodeMat(Mat image) # decode barcode and QR code from Mat

    image = cv2.imread("test.png")
    results = reader.decodeMat(image)
    for result in results:
        print(result.format)
        print(result.text)
        print(result.x1)
        print(result.y1)
        print(result.x2)
        print(result.y2)
        print(result.x3)
        print(result.y3)
        print(result.x4)
        print(result.y4)
    
  • getParameters() # return JSON string

    params = reader.getParameters()
    
  • setParameters(JSON string) # set barcode SDK parameters

    import json
    json_obj = json.loads(params)
    json_obj['ImageParameter']['DPMCodeReadingModes'][0]['Mode'] = 'DPMCRM_GENERAL'
    json_obj['ImageParameter']['LocalizationModes'][0]['Mode'] = 'LM_STATISTICS_MARKS'
    params = json.dumps(json_obj)
    ret = reader.setParameters(params)
    
  • startVideoMode(maxListLength, maxResultListLength, width, height, imageformat, callback) # start a native thread for decoding barcode and QR code in video mode

    video_width = 640
    video_height = 480
    
    vc = cv2.VideoCapture(0)
    vc.set(3, video_width) #set width
    vc.set(4, video_height) #set height
    
    if vc.isOpened():  
        rval, frame = vc.read()
    else:
        return
    
    max_buffer = 2
    max_results = 10
    image_format = 1 # 0: gray; 1: rgb888
    
    reader.startVideoMode(max_buffer, max_results, video_width, video_height, image_format, onBarcodeResult)
    
    def onBarcodeResult(data):
        results = data
    
  • appendVideoFrame() # append a video frame to the internal buffer queue for decoding

    _, frame = vc.read()
    
    try:
        ret = reader.appendVideoFrame(frame)
    except:
        pass
    
  • stopVideoMode() # stop the native thread

    reader.stopVideoMode()
    
  • addAsyncListener(callback function) # start a native thread and register a Python function for receiving barcode QR code results

  • decodeMatAsync(<opencv mat data>) # decode barcode QR code from OpenCV Mat asynchronously

    def callback(results):
        for result in results:
            print(result.format)
            print(result.text)
            print(result.x1)
            print(result.y1)
            print(result.x2)
            print(result.y2)
            print(result.x3)
            print(result.y3)
            print(result.x4)
            print(result.y4)
                                                        
    import cv2
    image = cv2.imread("test.png")
    reader.addAsyncListener(callback)
    reader.decodeMatAsync(image)
    sleep(1)
    

Online Documentation for Dynamsoft C/C++ Barcode SDK

To customize Python API based on C/C++, please refer to the online documentation.

Supported Barcode Symbologies

  • Linear Barcodes (1D)

    • Code 39 (including Code 39 Extended)
    • Code 93
    • Code 128
    • Codabar
    • Interleaved 2 of 5
    • EAN-8
    • EAN-13
    • UPC-A
    • UPC-E
    • Industrial 2 of 5
  • 2D Barcodes:

    • QR Code (including Micro QR Code)
    • Data Matrix
    • PDF417 (including Micro PDF417)
    • Aztec Code
    • MaxiCode (mode 2-5)
  • Patch Code

  • GS1 Composite Code

Project details


Download files

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

Source Distribution

barcode-qr-code-sdk-9.2.0.tar.gz (68.6 MB view details)

Uploaded Source

Built Distributions

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

barcode_qr_code_sdk-9.2.0-cp310-cp310-win_amd64.whl (9.6 MB view details)

Uploaded CPython 3.10Windows x86-64

barcode_qr_code_sdk-9.2.0-cp310-cp310-manylinux_2_24_x86_64.whl (11.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64

barcode_qr_code_sdk-9.2.0-cp310-cp310-manylinux_2_24_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ ARM64

barcode_qr_code_sdk-9.2.0-cp310-cp310-macosx_12_0_x86_64.whl (18.2 MB view details)

Uploaded CPython 3.10macOS 12.0+ x86-64

barcode_qr_code_sdk-9.2.0-cp39-cp39-win_amd64.whl (9.6 MB view details)

Uploaded CPython 3.9Windows x86-64

barcode_qr_code_sdk-9.2.0-cp39-cp39-manylinux_2_24_x86_64.whl (11.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ x86-64

barcode_qr_code_sdk-9.2.0-cp39-cp39-manylinux_2_24_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ ARM64

barcode_qr_code_sdk-9.2.0-cp39-cp39-macosx_12_0_x86_64.whl (18.2 MB view details)

Uploaded CPython 3.9macOS 12.0+ x86-64

barcode_qr_code_sdk-9.2.0-cp38-cp38-win_amd64.whl (9.6 MB view details)

Uploaded CPython 3.8Windows x86-64

barcode_qr_code_sdk-9.2.0-cp38-cp38-manylinux_2_24_x86_64.whl (11.7 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.24+ x86-64

barcode_qr_code_sdk-9.2.0-cp38-cp38-manylinux_2_24_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.24+ ARM64

barcode_qr_code_sdk-9.2.0-cp38-cp38-macosx_12_0_x86_64.whl (18.2 MB view details)

Uploaded CPython 3.8macOS 12.0+ x86-64

barcode_qr_code_sdk-9.2.0-cp37-cp37m-win_amd64.whl (9.6 MB view details)

Uploaded CPython 3.7mWindows x86-64

barcode_qr_code_sdk-9.2.0-cp37-cp37m-manylinux_2_24_x86_64.whl (11.7 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.24+ x86-64

barcode_qr_code_sdk-9.2.0-cp37-cp37m-manylinux_2_24_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.24+ ARM64

barcode_qr_code_sdk-9.2.0-cp37-cp37m-macosx_12_0_x86_64.whl (18.2 MB view details)

Uploaded CPython 3.7mmacOS 12.0+ x86-64

barcode_qr_code_sdk-9.2.0-cp36-cp36m-win_amd64.whl (9.6 MB view details)

Uploaded CPython 3.6mWindows x86-64

barcode_qr_code_sdk-9.2.0-cp36-cp36m-manylinux_2_24_x86_64.whl (11.7 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.24+ x86-64

barcode_qr_code_sdk-9.2.0-cp36-cp36m-manylinux_2_24_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.24+ ARM64

barcode_qr_code_sdk-9.2.0-cp36-cp36m-macosx_12_0_x86_64.whl (18.2 MB view details)

Uploaded CPython 3.6mmacOS 12.0+ x86-64

File details

Details for the file barcode-qr-code-sdk-9.2.0.tar.gz.

File metadata

  • Download URL: barcode-qr-code-sdk-9.2.0.tar.gz
  • Upload date:
  • Size: 68.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for barcode-qr-code-sdk-9.2.0.tar.gz
Algorithm Hash digest
SHA256 845aa785ee1e0e2d191380223712f59076b969058d43332700b9323f977d68f1
MD5 9c8aacdb6bff659ebd33afa39119b78c
BLAKE2b-256 f1e5ca58c310350ed4c8faaf81e128a5957dfd0278e86dcdd04d70cc602f08f4

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 165e78c353ac96088981e3192e72f7fdc5fe56b0c4f579af594944feb8ee1c14
MD5 9e5203f06733685c89b48477c5254b54
BLAKE2b-256 e6471c15f98561171ac619ac246c09211343f820dab2a578e8c23beea8608956

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp310-cp310-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp310-cp310-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 019e343853d61d106b3be783906ec9051812d5f1774eb300ca867ec399633f2d
MD5 d0801c1c5bf21be311a8ef86897b7f4d
BLAKE2b-256 c64059f5d13aa1ce6c807163d5521ed418daa3a7652082194abc1c642a7713e6

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp310-cp310-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp310-cp310-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 16fc77ec2fb35f84ecc8babef99e12edf47dbd75cdfefed01f28bb6258fa7eb7
MD5 1cb76bbd6748840d34f4652eee50bd85
BLAKE2b-256 9fe0ae5ef2452f010d6ef21c6f2d380e9052f2cbe0f4622a6db9727c63a0c1d2

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp310-cp310-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp310-cp310-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 aa8235742cff8942868339b163523692e67915748b7381b05272fa862c03caf0
MD5 c28d27e574c0b397f7da1c339ff392a0
BLAKE2b-256 4913641bdac76bf14b72ad9f402b9925b27bcbbdf65c893637a1712aa60b3dbb

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 4e5d085dff84d4e098a67f438a66c05de40ccddf02de0089b5e63cc80e8b734e
MD5 46c7352c2f357984f65f34665ea66a7a
BLAKE2b-256 410dd1c20e46c36e4780049dd4105d3d369cef23825b61018b5f6c9e8eae6900

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp39-cp39-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp39-cp39-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 9f44bd2152fad335f3629682700457d13f8b6f1b6aa1b226c533ff2f9974fbef
MD5 1238e0ec734cf2c3a9cddcfb0573ccc8
BLAKE2b-256 2f8695f5f184c8829ead886c7e93ba903994cfbc724727deb389671d24f002f7

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp39-cp39-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp39-cp39-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 4f64c5e4bdb6d7e7574e5ed8ae8552f4e30b9536f6c6cb770dcac1f06eaf8881
MD5 3da5c7767f46477ca54fd4874d5e96ea
BLAKE2b-256 e72dd09fbed1b4e070351fe133f47f4cc9c7f15d191208d701aeaeeef87058df

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp39-cp39-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp39-cp39-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 f9f3eb9c1a14c5ded23b1c16daeaa50d0bdf28c1a18863508706f1876181913a
MD5 ca443205afe61299c7d42771242b419d
BLAKE2b-256 2653fa20e042002071468cda8d382603d51acf8d45f7093efa30becb9528904e

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 9386d692e090e43992bad44c78c195777537d0b5610eed034cc009865a3aba21
MD5 da5570854ef7f4115b93c56628ad9fc4
BLAKE2b-256 820b07d2cdf417e9a969746432b740ce1ed603158a4c34d4cb79eaf75c94dc6f

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp38-cp38-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp38-cp38-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 e5bda683d6488d511ce530da6d24201386fbb62cbf0167d5ca84ae5a23b9ac45
MD5 e151ebf930b89fd62e84ea2cb93d8484
BLAKE2b-256 b3893769899f5730821c08bfefb391f1e87b0171763dabb1ff1ba5acaedeb472

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp38-cp38-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp38-cp38-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 a544d15941206e15b1d90ef53c7cb4e3ac77741109f4badad56960321d6c912e
MD5 d89c34e12444393b7ead06251efdbfca
BLAKE2b-256 c20cbae08961cf232b6a240a888ae97114351e336011ee8e086c5a79e8650f53

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp38-cp38-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp38-cp38-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 5a935355088d9532f6765e6ac2258ed2ec7fdf26b2cd862320e0c18aa0951529
MD5 69b6a04e838ee17b428f02bf649a4d75
BLAKE2b-256 0ae927bdd465f6a76754fcdac775341775c9da53bd7eae0ffe8cae38f2631ae9

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 48149904eaace3370377037c603bc516b8aad5e58f8b619d4fcde675c4e7e431
MD5 a20281e7ec1ba25645c77fe484822ee6
BLAKE2b-256 399ca77c4e6f3795e51c465e7304366257987aec4a887d468fa4540da479ac4c

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp37-cp37m-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp37-cp37m-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 d400e8c2fca5514df0604db72ff76637a93bb1ca5d9c0444f5ae06604a25b5e3
MD5 b185f2fc0c6b23b7d0cc820f04158b6a
BLAKE2b-256 307268afc155bc39a5c08360e042554582401ab74ebeba675d821057a2140016

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp37-cp37m-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp37-cp37m-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 ca38d1fb41c53921b36ca0b674473f482e5d5e077858d9940340f40926320df8
MD5 d68ab481451844cc748c8db2fa0d3a14
BLAKE2b-256 cff78d057a674a40a178611d9152f29b29efd4a4d8c3c0029263dffe1274f6bc

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp37-cp37m-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp37-cp37m-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 0b16efa780432acad6f7840ba17f0c5996570625e682618ed1c0b075fe67dbf5
MD5 b1aec2aaa38e8816455bd66e0545ceaf
BLAKE2b-256 cdc622ea56687a77d22f4fe66fc0bc566c750fe4f07c40032e271440562944a3

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp36-cp36m-win_amd64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 45382225517e3339fb220a1bfb360a96debb00aeded5e8d6501dbcef074ce6c3
MD5 4cf88bbe30938ad2da74d5647c9524b3
BLAKE2b-256 d10cdf3c1b841d4a8ac4fce0d41c8e2e1544d77cb1cd752b9eae2971b947c59c

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp36-cp36m-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp36-cp36m-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 ae1c865e8dc3f96e4fa6fa019e130230cb33053e2b4144bbd75f8a5feb68bc4b
MD5 cfff3f820941df8cad8bd12fc73617af
BLAKE2b-256 47c368ade5c893ae8cccaf7a9502a612e898f65b21ae1866effc9aacf6650d0e

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp36-cp36m-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp36-cp36m-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 c22899c7db24fea20635b075eb7b6ecf1c7f18e5c99f62757a32a3bda48973b5
MD5 dd5c90caa31b20c4f498d47a980604f7
BLAKE2b-256 1083b2dadef320f5833598d5241131ff20595248c224da1d7e398010fa8efb8f

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.2.0-cp36-cp36m-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.2.0-cp36-cp36m-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 6515bce44378debd281b574978f530f2a696c5a65af6dfea40b81551e23e9dab
MD5 621e209629fa8a779e270ef316b75b28
BLAKE2b-256 b6c97db80618404f7afd0fa162f404bd1c5cc88b13f0a4b4b5783ecce129b774

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