Python linprog interface for GLPK
Project description
sckit-glpk
Proof of concept Python wrappers for GLPK.
Installation
Should be an easy pip installation:
pip install scikit-glpk
A Python-compatible C compiler is required to build GLPK from source. By default a precompiled wheel is used during pip installation, so you don’t have to compile if you don’t want to. Wheels are available for Linux, Mac, and Windows for supported versions of Python.
Usage
There are a few things in this package:
glpk() : the wrappers over the solvers (basically acts like Python-friendly glpsol)
mpsread() : convert an MPS file to some matrices
mpswrite() : convert matrices to MPS file
lpwrite() : convert matrices to CPLEX LP file
from glpk import glpk, GLPK
res = glpk(
c, A_ub, b_ub, A_eq, b_eq, bounds, solver, sense, maxit, timeout,
basis_fac, message_level, disp, simplex_options, ip_options,
mip_options)
from glpk import mpsread, mpswrite, lpwrite
c, A_ub, b_ub, A_eq, b_eq, bounds = mpsread(
filename, fmt=GLPK.GLP_MPS_FILE, ret_glp_prob=False)
success = mpswrite(c, A_ub, b_ub, A_eq, b_eq, bounds, sense, filename, fmt)
success = lpwrite(c, A_ub, b_ub, A_eq, b_eq, bounds, sense, filename)
There’s lots of information in the docstrings for these functions, please check there for a complete listing and explanation.
Notice that glpk is the wrapper and GLPK acts as a namespace that holds constants.
bounds behaves the same as the scipy.optimize.linprog bounds argument. They are converted to GLPK-style bounds first thing.
GLPK stuffs
GLPK is installed with the module and a linprog-like wrapper is provided with a ctypes backend. A pared-down version of glpk-4.65 is vendored from here and compile instructions are scraped from the makefiles. I’ll try my best to support cross-platform pip installations. Wheels are current being built for Linux/Mac/Windows.
Background
The GNU Linear Programming Kit (GLPK) has simplex, interior-point, and MIP solvers all callable from a C library. We would like to be able to use these from within Python and be potentially included as a backend for scipy’s linprog function.
Note that there are several projects that aim for something like this, but which don’t match up for what I’m looking for:
python-glpk : no longer maintained (dead as of ~2013)
PyGLPK : GPL licensed
PyMathProg : GPL licensed, uses different conventions than that of linprog
Pyomo : Big, uses different conventions than that of linprog
CVXOPT : Big, GPL licensed
Sage : Big, GPL licensed
pulp : Calls glpsol from command line (writes problems, solutions to file instead of shared memory model – this is actually easy to do)
yaposib : seems dead? OSI-centric
ecyglpki : GPL licensed, dead?
swiglpk : GPL licensed, low level
optlang : sympy-like, cool project otherwise
Why do we want this?
GLPK has a lot of options that the current scipy solvers lack as well as robust MIP support (only basic in HiGHS). It is also a standard, well known solver in the optimization community. The only thing that I want that it lacks on an API level is robust support for column generation. Easy access to GLPK as a backend to linprog would be very welcome (to me at least). I also find access to a linprog LP description (c, A_ub, etc.) to MPS/LP file format convienent for interacting with other solvers such as HiGHS.
Approach
Since the underlying API is quite simple and written in C and only C, ctypes is a good fit for this.
GLPK is packaged but I may want to make it so the user can optionally specify where the installation is on a user’s computer (i.e., path to the shared library) so GLPK is not packaged with scikit-glpk and/or scipy. linprog could then presumably route the problem to the GLPK backend instead of HiGHS or the existing native python solvers.
The ctypes wrapper is required for integrating GLPK into the Python runtime. Instead of using MPS files to communicate problems and reading solutions from files, scipy.sparse.coo_matrix and numpy arrays can be passed directly to the library. More information can be extracted from GLPK this way as well (For example, there is no way to get iteration count except by reading directly from the underlying structs. It is only ever printed to stdout, no other way to get it).
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
Hashes for scikit_glpk-0.3.0-pp37-pypy37_pp73-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 459f274156de3634f61d203a1e5c5cda3063a6ddbcd881440151353dfa5de7b4 |
|
MD5 | 1bdeda3391de9d34ba42ca41425f2cc4 |
|
BLAKE2b-256 | 02b6dfbb653f3a49ebe686b4d8647bc8af2ab3f2dd5467bb10e9cb285aa5baf5 |
Hashes for scikit_glpk-0.3.0-pp37-pypy37_pp73-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 728d9d9e2794ac4d51ccc95c60d7c51eb006a6709ab9fde2078c02926ea7dc38 |
|
MD5 | ed3fe5556096827ea62b3831ee8eab08 |
|
BLAKE2b-256 | 645de094beda34c0655f808613fe21ac3cf655aa6205c00327e3394d11744c34 |
Hashes for scikit_glpk-0.3.0-pp37-pypy37_pp73-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa03ddacf413019ca065e1736feb3c71b67fb5cfae434d721927478e94c2d4b5 |
|
MD5 | dde4c996d2987052dd4766929cc10c92 |
|
BLAKE2b-256 | ab16b224fbe11690ddc5ea941a9d45942f2f7104e2d2f84928449072ee9fd49c |
Hashes for scikit_glpk-0.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1560685db677a83d140b9940198c906fd87816b793f10c92c348fec2603edea3 |
|
MD5 | dcb4f8e06a2eafcda26f845eb58003df |
|
BLAKE2b-256 | efaecd3037248ede04d71748b0ed0fe232e58ff58998e431c7bcf35f5dbcb32c |
Hashes for scikit_glpk-0.3.0-pp36-pypy36_pp73-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6499440204a80a1aebec1ae082f66282eab8196d86939b1d4d4964051278826a |
|
MD5 | c4fe28911b94813512376e522f0bdc6f |
|
BLAKE2b-256 | 2e623c6d0e9c63ca5fa8177fb075ff46d6ed702ec9c1925e88a0bc3a74f76a0e |
Hashes for scikit_glpk-0.3.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8f2fa666c286194dc45447d7c8ed0ec9c7b8199cca351ab46f8b9a6a2872d225 |
|
MD5 | eb573683644142d4d65571d85ae40a0d |
|
BLAKE2b-256 | 0f8ddbcf0804c1c5c1e6a8821393d356fe86c1f372b20618b2080e5942911748 |
Hashes for scikit_glpk-0.3.0-pp36-pypy36_pp73-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9414bf87972d3b6ec1a2a28dc98d14a6780adb464744036638b03e3c4fe7b0b8 |
|
MD5 | df12c60aafc9bbf1d00ba091de35998c |
|
BLAKE2b-256 | a45243329a3feed500812a569462cd6d276db7d8e4b0ecfdb9fe063d80b1384c |
Hashes for scikit_glpk-0.3.0-pp36-pypy36_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 465c407f1f1906eccc90c046df9b8d7b80b15dea00ac9c1473cc54e012f4e443 |
|
MD5 | ccbe8dcfad58387c26d2800f45ea4368 |
|
BLAKE2b-256 | e3e921df261619ea3ab1e290e97c81c3880d8d4c53bf44ad2d16a5331b5ead52 |
Hashes for scikit_glpk-0.3.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b4c3274fef771a097e5ec2df36040b51872d5f0296ad3553b521b25255eedbe |
|
MD5 | 9e749b29378ededacc5b12e4b5f9fbce |
|
BLAKE2b-256 | 846283245bf080dcd99549e83dfa89119cdb28937b8eafd771f82f1881793386 |
Hashes for scikit_glpk-0.3.0-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5941b0b3e56181a7eca653eabe88d8781fa4c7dbc0ba5ad56248f8244fb227db |
|
MD5 | ecaa13644c1b3d69baf2ca22db1bab47 |
|
BLAKE2b-256 | 2ea7659f176eab3f77b43ee85ad49ee8ae02893765fb643d54d846d6780c6e4e |
Hashes for scikit_glpk-0.3.0-cp39-cp39-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9201098a6d12a55de4ee044e88455d9b8712aba9ec3cf4035a754706b38592e1 |
|
MD5 | 982557b3f971303727745ca035ebf05b |
|
BLAKE2b-256 | 1f56e567ef7ca71c73193b73b2d22e8f186e8cf402127901e004e0575769d2f9 |
Hashes for scikit_glpk-0.3.0-cp39-cp39-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 15dace44c8377c4d793451871c3415be8ea3de0f025c5369892230cb94f845a5 |
|
MD5 | 6929e0858c73c93a0a027bb1ddbbc9ef |
|
BLAKE2b-256 | 2d9613e1d9aa7790e172d16f0521d1223956b5e5e5a6534c318fc8552c6068ad |
Hashes for scikit_glpk-0.3.0-cp39-cp39-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9446deacd3c5719c7ab061ad1a05e0791e169094da1c58c4d3a83c340cccafdd |
|
MD5 | d8215a07308d8a0b45ee72867f9c4556 |
|
BLAKE2b-256 | 47591a5a1fea3771496b2e1f2905d38690b40ad86cf5110aff9ce8420a91e369 |
Hashes for scikit_glpk-0.3.0-cp39-cp39-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c303200d29397a9611baf91bb855d48cd3dabcd723cd0cce38f824c704596be |
|
MD5 | 543413a5b1a50a52ae09580c6c98598c |
|
BLAKE2b-256 | dd9152f40a6eb3096b80fbaee433e276f2922181601353e63c494baa3762dd59 |
Hashes for scikit_glpk-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7c45b14d29b2ff5bb9e3071c09eb7221c9b8f501aaf16c59ab4caf8f2f88a4b |
|
MD5 | 97eb2c0e9e0615c9458cf171727f673e |
|
BLAKE2b-256 | 510aeb39c1fdb5cb738f347a462867dbadb5ab990bad7039636d2d69a6398b6d |
Hashes for scikit_glpk-0.3.0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 891514dde31354090cafc914477c1cf48f2e96e1b31bc4aba00e98ccf043b348 |
|
MD5 | 037071506be38047eef9308584d7ff8f |
|
BLAKE2b-256 | 45c2855e85fe4e401dbf69de905494fad46d5845d99a9d7d5c67254788b2bafc |
Hashes for scikit_glpk-0.3.0-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 72b32439792e732f19176aecd411e03cba02c4ae489df8d6094ce2cb53662966 |
|
MD5 | e46601cc99ace7d9b6e965f526759c0d |
|
BLAKE2b-256 | b6ae9f71142a4aa7f92397c2bd9870e3b5db4a46b8b13445b37ddf154428080e |
Hashes for scikit_glpk-0.3.0-cp38-cp38-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26e0455d38b77403970610c6af44e67ae850099ecd3d403055a68dcac47220ce |
|
MD5 | 4ff8a7d4d7377f5ba02b5a422c894e09 |
|
BLAKE2b-256 | 01dfd1935166d5bbe5ac9cf337fedf9c0306f1a8c80ee875bca7621d197105e7 |
Hashes for scikit_glpk-0.3.0-cp38-cp38-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5dea41d275d08a9846c9324e03d9537449ca1835b2e7226101fe9f3acb60ae9d |
|
MD5 | 96bb8963b4342b648941945f9b36cdeb |
|
BLAKE2b-256 | 6521027a74e5286ec371eaf49ef2d4e2ea6778612a476f9120e65f218fa1f79c |
Hashes for scikit_glpk-0.3.0-cp38-cp38-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 170e2cb97a7c2550f3705a5e2ee1c3ff3d0e676e1fc5acf32787cd2d4ef8be7e |
|
MD5 | 303d89c09c1fc7fa92ffb9a6f23bdb52 |
|
BLAKE2b-256 | cd2dd106b395ff31e64f5334891ec4b9371793f05ff7d5f8f95669a6cf7e4b41 |
Hashes for scikit_glpk-0.3.0-cp38-cp38-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a11ebc20bf8d902bf7fa9c24d3360cc8b63a36478cfd81e9825d507a58c3b311 |
|
MD5 | cdd35e41a33b62de6e787027c47acecf |
|
BLAKE2b-256 | 8b664d9b0617e3f16bc078ebce86ef754846b8d0a76a9ceb803aa3cb94145a14 |
Hashes for scikit_glpk-0.3.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 14f547eebf4b74396ce87351e80292328e7eef3b13311876d5cef6c2d8d5242b |
|
MD5 | 4e1858a0003285011eb1d3303db21c81 |
|
BLAKE2b-256 | adbdb72b0e9e89e81f7a76636b6b76e744caf08874246f2af8453faae622ce4d |
Hashes for scikit_glpk-0.3.0-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 988f1863f6862b856a03ce16fb02984d885528319ea92ddc7c7772e6c3361f7a |
|
MD5 | 5ef0651893344026a6b71a4a71b1792a |
|
BLAKE2b-256 | 319433afa61329d94bbb5d4bfed372208fc8884db27f389aeff3b0f698aa1ee7 |
Hashes for scikit_glpk-0.3.0-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3d3410769fd45009ff8a406993a33962894cf6521ff36627b0ab7c6611e743d9 |
|
MD5 | cacc2d8fa41d5a31ac5bebf56290a0f3 |
|
BLAKE2b-256 | 069504a55a124755d84bb220486b81ae4c4bbf81ede978a05d42a775ec0d0a45 |
Hashes for scikit_glpk-0.3.0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa3d15dc170d15409616b500cc3483c7f7a8890fb587b914602386c5224a927c |
|
MD5 | 0114eae970e400310d42eb9d02119554 |
|
BLAKE2b-256 | a7fc41552d3bb4d9d0c811d4d2f5a198bc360469e39091ffbc77d62b13595fd1 |
Hashes for scikit_glpk-0.3.0-cp37-cp37m-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5cc6cf40bf07dbcc45021814a4ffd8969b260705e33feaf64d824083097de1ce |
|
MD5 | ee1e10a661531e070c8bc19cbda48693 |
|
BLAKE2b-256 | 8612c6c749c0ecaa4875a5fb5d6c5a7399c1bb65c8724e5a5d1291e0e7abd3ea |
Hashes for scikit_glpk-0.3.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 99275446ef46ded770ca60de201585813321353e7092cc0a008ad5b4609506d1 |
|
MD5 | 2e7dc8160bd78d65fa99c6f9b8b91936 |
|
BLAKE2b-256 | e7cf76824ebe6e4aaebb655dcf12cd6dc146cd6380582b54661e1e14c72cf125 |
Hashes for scikit_glpk-0.3.0-cp37-cp37m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a9846d05efd1749db02bd014578b1f1553cbf9f8ec3c82995cb818787bc64349 |
|
MD5 | 56fe1bb0f33217a59bd62deb127d1a7d |
|
BLAKE2b-256 | 54d4bdfcd92fe2284d534c399852edc3a8c9f4608de97cca6c1478c0f02a1bf5 |
Hashes for scikit_glpk-0.3.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b77b919fac87479393001b269deeed6159c775f853f849668d258aad8edd0e31 |
|
MD5 | 76d30a7500877397444f955ffe9532a0 |
|
BLAKE2b-256 | 6b59d01ecde69db50d714a9119afa6fd2a84056e1217907c67e97f541a4b6fc2 |
Hashes for scikit_glpk-0.3.0-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c147227954873897c7aa8f096e2d60800785408efdccf69c9640cc03326b75b2 |
|
MD5 | 64a1a1184d50b8afbfa9e0d60076cbdf |
|
BLAKE2b-256 | fdfd5740571a7c153889d01b3020723f47f311346cb3a1aa0a77fa3d423d80ab |
Hashes for scikit_glpk-0.3.0-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c91055fa4a11b03fcf88229aedd12ec5759e6d643b19edad604b58f1ef84476 |
|
MD5 | 67ff56a93f97f450cfe47318992f9320 |
|
BLAKE2b-256 | 1881229ee62cebb1364ddc5d025c536df6fd57f632e9ad3e4e56d617a9ccac85 |
Hashes for scikit_glpk-0.3.0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ad06198c4ff2656df13c82265d7429be6344ee21e366a0e68300b1607d44437 |
|
MD5 | 478681b80d0e48f299734c30e137629f |
|
BLAKE2b-256 | 48155eda22637d61874050341c14698f7bd1ef50f313df330fd526fcab9ac91b |
Hashes for scikit_glpk-0.3.0-cp36-cp36m-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 86cc3e1fea76e8388e066868c624c9df56b7effcd0204ac8033dd4687484e941 |
|
MD5 | ac3b181c778db6dc0f380dcb4da837bf |
|
BLAKE2b-256 | dcc00d32018585f6a56fe5714f07062e709d20a5f1306107b3898eb53d9b5016 |
Hashes for scikit_glpk-0.3.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e60b0a9878fe5799b21aebc5b622583a5f50432bf86cc73cd84add75a91f147 |
|
MD5 | 6c428bba8d86f4ed2543feb546e4b8c6 |
|
BLAKE2b-256 | d6c1eb0853f6bc9cab06a03df8ebf96927d04fb2f3508d24650c10d9088646c9 |
Hashes for scikit_glpk-0.3.0-cp36-cp36m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 141933aac50ad7744690699186d24832e7a6d84f685c8b1f3b06b50c8e247773 |
|
MD5 | 8284751d0abaace62f94a4319ffe7fb3 |
|
BLAKE2b-256 | 024bb92d2c8bbe70df0f721e6084110cf83f5297826b94d339516cb7853c46ab |
Hashes for scikit_glpk-0.3.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b61f8616b71260ba4357367c26b63edb60c10dfaddb2e2a1378eea897b4fa06c |
|
MD5 | a18340bbc52c3290ede003f0e733c6f3 |
|
BLAKE2b-256 | 68b859e08602ec9f7dbb821aea99030ac4f9550a40b4b6ef82826eebe9ba4f0e |
Hashes for scikit_glpk-0.3.0-cp35-cp35m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f7e50ccf80a894b446e89149d812a52a1b32476ac5b3b76383b4ffb487c933e |
|
MD5 | 72d412bec474f8d256e2959128a0e6ef |
|
BLAKE2b-256 | 8e5f1c088539c2f3dc7e11cadaaea253ebb48f0036d1675ada64d3ecfe3ffed4 |
Hashes for scikit_glpk-0.3.0-cp35-cp35m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9dbc1ac5c8d90b4fe5a519cf215898944c5974f95c77a7714a63a5aac10db2ce |
|
MD5 | 3307feb7e60f1a525a05d458c894366e |
|
BLAKE2b-256 | fdd5277fd1a08a83bab3427213ef8dfd6d9ea290d474a2d156d39a0f68da4b97 |
Hashes for scikit_glpk-0.3.0-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 61df88eeafc1e7e295a2fe02e1aced8e1a7d26c59f5f33e92d03748a945107ce |
|
MD5 | 77b79f4be08c1b925bcd7180f546547f |
|
BLAKE2b-256 | 33f9e379f0031c0c3f337641138b20a9f7ebd248cc708a89b62b4aad87d47557 |
Hashes for scikit_glpk-0.3.0-cp35-cp35m-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76cdf40daae2cc2ed0572365b80dc6dd0e1609a0d9d46f5d4df3aed9eb2ebee6 |
|
MD5 | 5deb258eea5218d4c2c44a6b1c68ef7c |
|
BLAKE2b-256 | 0ae1a61d245b2b6ce8d1b65590b3b7cbe67ee6aa98f8230bc9ebf918841e2586 |
Hashes for scikit_glpk-0.3.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 574fdb1936616543d8b68873e9ee2c38ee5555a776f37b8b01386e07ed62e7cb |
|
MD5 | 9d920b4e4a566c439bdd80a02e5f9ef8 |
|
BLAKE2b-256 | cd054bc77647c80721243771bda2096644c7d10b2a78fe393c4531bd427c469f |
Hashes for scikit_glpk-0.3.0-cp35-cp35m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 513cf59575306816570b46900e236ca64e6f59fd4f41c7434d6f68c40b4f6e59 |
|
MD5 | 92223e161eb5e7938d6c7e98dc153e80 |
|
BLAKE2b-256 | a055e5a060c315f8cbe9a77fd3e5b639fa615c731c349d22d3826cdd00ecc143 |
Hashes for scikit_glpk-0.3.0-cp35-cp35m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e58181abcc49f577dfe05cbe026339a74ce90da1d28b0c2a4118e4f64cb481c |
|
MD5 | 541a56c52f5f3cfcf5b5368ac2846c92 |
|
BLAKE2b-256 | c129151ca9ab5f3c7a49bb22e9687d88ebc2e5a59e682a39751546ee1ca1bc19 |