Skip to content

Commit

Permalink
Merge pull request #157 from mozbhearsum/allow-unsafe
Browse files Browse the repository at this point in the history
Make it possible to forward --allow-unsafe to pip-compile
  • Loading branch information
peterdemin committed Sep 12, 2019
2 parents a9ac846 + c9cf569 commit fbb3f2e
Show file tree
Hide file tree
Showing 13 changed files with 105 additions and 58 deletions.
16 changes: 16 additions & 0 deletions docs/features.rst
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,22 @@ Example output:
``pip-compile-multi`` will recursively propagate this option to all environments
that are referencing or referenced by selected environment name.

Allow Unsafe Packages
=====================
If your project depends on packages that include ``setuptools`` or other packages
considered "unsafe" by ``pip-tools`` and you still wish to have them included in
the resulting requirements files, you can pass this option to do so:

.. code-block:: text
--allow-unsafe / --no-allow-unsafe
Whether or not to include 'unsafe' packages
in generated requirements files. Consult
pip-compile --help for more information
This is commonly used with --generate-hashes to avoid generating requirements files
which cannot be installed.

Custom Header
=============

Expand Down
7 changes: 6 additions & 1 deletion pipcompilemulti/cli_v1.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@
help='Environment name (base, test, etc) that needs '
'packages hashes. '
'Can be supplied multiple times.')
@click.option('--allow-unsafe/--no-allow-unsafe', default=False,
help="Whether or not to include 'unsafe' packages "
'in generated requirements files. '
'Consult pip-compile --help for more information')
@click.option('--directory', '-d', default=OPTIONS['base_dir'],
help='Directory path with requirements files.')
@click.option('--in-ext', '-i', default=OPTIONS['in_ext'],
Expand All @@ -39,7 +43,7 @@
help='Only upgrade named package. Can be supplied multiple times.')
@click.option('--use-cache', '-u', default=OPTIONS['use_cache'], is_flag=True,
help='Use pip-tools cache to speed up compilation.')
def cli(ctx, compatible, forbid_post, generate_hashes, directory,
def cli(ctx, compatible, forbid_post, generate_hashes, allow_unsafe, directory,
in_ext, out_ext, header, only_name, upgrade, upgrade_package, use_cache):
"""Recompile"""

Expand All @@ -52,6 +56,7 @@ def cli(ctx, compatible, forbid_post, generate_hashes, directory,
'compatible_patterns': compatible,
'forbid_post': set(forbid_post),
'add_hashes': set(generate_hashes),
'allow_unsafe': allow_unsafe,
'base_dir': directory,
'in_ext': in_ext,
'out_ext': out_ext,
Expand Down
2 changes: 2 additions & 0 deletions pipcompilemulti/environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ def pin_command(self):
parts.append('--rebuild')
if self.add_hashes:
parts.append('--generate-hashes')
if OPTIONS['allow_unsafe']:
parts.append('--allow-unsafe')
parts.extend(['--output-file', self.outfile, self.infile])
return parts

Expand Down
1 change: 1 addition & 0 deletions pipcompilemulti/options.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

OPTIONS = {
'add_hashes': [],
'allow_unsafe': False,
'base_dir': 'requirements',
'compatible_patterns': [],
'forbid_post': [],
Expand Down
40 changes: 25 additions & 15 deletions requirements/local.hash
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SHA1:b35f2fa5ae43afc446aafff1deed3615ec4bab17
# SHA1:b5c067a49051e2a7998840727390905f5fa5372f
#
# This file is autogenerated by pip-compile-multi
# To update, run:
Expand All @@ -18,9 +18,9 @@ bleach==3.1.0 \
bump2version==0.5.11 \
--hash=sha256:524bde030318fe2543038defe0f77739605636fef96924883813cb290cf79c1e \
--hash=sha256:bfcc051498dda9fd9ac8634689f4516e1c20fdeeace3278932cc6e1248418b36
certifi==2019.6.16 \
--hash=sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939 \
--hash=sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695
certifi==2019.9.11 \
--hash=sha256:e4f3620cfea4f83eedc95b24abd9cd56f3c4b146dd0177e83a21b4eb49e21e50 \
--hash=sha256:fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef
cfgv==2.0.1 \
--hash=sha256:edb387943b665bf9c434f717bf630fa78aecd53d5900d2e05da6ad6048553144 \
--hash=sha256:fbd93c9ab0a523bf7daec408f3be2ed99a980e20b2d19b50fc184ca6b820d289
Expand Down Expand Up @@ -143,26 +143,26 @@ requirements-detector==0.6 \
--hash=sha256:9fbc4b24e8b7c3663aff32e3eba34596848c6b91bd425079b386973bd8d08931
setoptconf==0.2.0 \
--hash=sha256:5b0b5d8e0077713f5d5152d4f63be6f048d9a1bb66be15d089a11c898c3cf49c
snowballstemmer==1.9.0 \
--hash=sha256:9f3b9ffe0809d174f7047e121431acf99c89a7040f0ca84f94ba53a498e6d0c9
snowballstemmer==1.9.1 \
--hash=sha256:713e53b79cbcf97bc5245a06080a33d54a77e7cce2f789c835a143bcdb5c033e
toml==0.10.0 \
--hash=sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c \
--hash=sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e
tox==3.13.2 \
--hash=sha256:dab0b0160dd187b654fc33d690ee1d7bf328bd5b8dc6ef3bb3cc468969c659ba \
--hash=sha256:ee35ffce74933a6c6ac10c9a0182e41763140a5a5070e21b114feca56eaccdcd
tox==3.14.0 \
--hash=sha256:0bc216b6a2e6afe764476b4a07edf2c1dab99ed82bb146a1130b2e828f5bff5e \
--hash=sha256:c4f6b319c20ba4913dbfe71ebfd14ff95d1853c4231493608182f66e566ecfe1
tqdm==4.35.0 \
--hash=sha256:1be3e4e3198f2d0e47b928e9d9a8ec1b63525db29095cec1467f4c5a4ea8ebf9 \
--hash=sha256:7e39a30e3d34a7a6539378e39d7490326253b7ee354878a92255656dc4284457
twine==1.13.0 \
--hash=sha256:0fb0bfa3df4f62076cab5def36b1a71a2e4acb4d1fa5c97475b048117b1a6446 \
--hash=sha256:d6c29c933ecfc74e9b1d9fa13aa1f87c5d5770e119f5a4ce032092f0ff5b14dc
twine==1.14.0 \
--hash=sha256:b2cec0dc1ac55bd74280d257f43763cf0cf928bdcd0de0fd70be70aa1195e3b0 \
--hash=sha256:e37d5a73d77b095b85314dde807bfb85b580b5b9d137f5b21332f4636990d97a
urllib3==1.25.3 \
--hash=sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1 \
--hash=sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232
virtualenv==16.7.4 \
--hash=sha256:94a6898293d07f84a98add34c4df900f8ec64a570292279f6d91c781d37fd305 \
--hash=sha256:f6fc312c031f2d2344f885de114f1cb029dfcffd26aa6e57d2ee2296935c4e7d
virtualenv==16.7.5 \
--hash=sha256:680af46846662bb38c5504b78bad9ed9e4f3ba2d54f54ba42494fdf94337fe30 \
--hash=sha256:f78d81b62d3147396ac33fc9d77579ddc42cc2a98dd9ea38886f616b33bc7fb2
webencodings==0.5.1 \
--hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \
--hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923
Expand All @@ -171,3 +171,13 @@ wheel==0.33.6 \
--hash=sha256:f4da1763d3becf2e2cd92a14a7c920f0f00eca30fdde9ea992c836685b9faf28
wrapt==1.11.2 \
--hash=sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1

# The following packages are considered to be unsafe in a requirements file:
pip==19.2.3 \
--hash=sha256:340a0ba40fdeb16413914c0fcd8e0b4ebb0bf39a900ec80e11c05d836c05103f \
--hash=sha256:e7a31f147974362e6c82d84b91c7f2bdf57e4d3163d3d454e6c3e71944d67135 \
# via pipdeptree
setuptools==41.2.0 \
--hash=sha256:4380abcf2a4ffd1a5ba22d687c6d690dce83b2b51c70e9c6d09f7e8c7e8040dc \
--hash=sha256:66b86bbae7cc7ac2e867f52dc08a6bd064d938bac59dfec71b9b565dd36d6012 \
# via twine
14 changes: 9 additions & 5 deletions requirements/local.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ aspy.yaml==1.3.0 # via pre-commit
astroid==1.6.6 # via pylint, requirements-detector
bleach==3.1.0 # via readme-renderer
bump2version==0.5.11
certifi==2019.6.16 # via requests
certifi==2019.9.11 # via requests
cfgv==2.0.1 # via pre-commit
chardet==3.0.4 # via requests
collective.checkdocs==0.2
Expand Down Expand Up @@ -44,13 +44,17 @@ requests-toolbelt==0.9.1 # via twine
requests==2.22.0 # via requests-toolbelt, twine
requirements-detector==0.6 # via prospector
setoptconf==0.2.0 # via prospector
snowballstemmer==1.9.0 # via pydocstyle
snowballstemmer==1.9.1 # via pydocstyle
toml==0.10.0 # via pre-commit, tox
tox==3.13.2
tox==3.14.0
tqdm==4.35.0 # via twine
twine==1.13.0
twine==1.14.0
urllib3==1.25.3 # via requests
virtualenv==16.7.4 # via pre-commit, tox
virtualenv==16.7.5 # via pre-commit, tox
webencodings==0.5.1 # via bleach
wheel==0.33.6
wrapt==1.11.2 # via astroid

# The following packages are considered to be unsafe in a requirements file:
# pip==19.2.3 # via pipdeptree
# setuptools==41.2.0 # via twine
36 changes: 21 additions & 15 deletions requirements/local27.hash
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SHA1:8a359fe6f4198a98f4bc7faba64118b3bf6262b1
# SHA1:6a89e9082c9a165b7f3ebd30838e19d185f64d38
#
# This file is autogenerated by pip-compile-multi
# To update, run:
Expand All @@ -16,9 +16,9 @@ bleach==3.1.0 \
bump2version==0.5.11 \
--hash=sha256:524bde030318fe2543038defe0f77739605636fef96924883813cb290cf79c1e \
--hash=sha256:bfcc051498dda9fd9ac8634689f4516e1c20fdeeace3278932cc6e1248418b36
certifi==2019.6.16 \
--hash=sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939 \
--hash=sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695
certifi==2019.9.11 \
--hash=sha256:e4f3620cfea4f83eedc95b24abd9cd56f3c4b146dd0177e83a21b4eb49e21e50 \
--hash=sha256:fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef
chardet==3.0.4 \
--hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \
--hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691
Expand Down Expand Up @@ -123,26 +123,26 @@ requirements-detector==0.6 \
--hash=sha256:9fbc4b24e8b7c3663aff32e3eba34596848c6b91bd425079b386973bd8d08931
setoptconf==0.2.0 \
--hash=sha256:5b0b5d8e0077713f5d5152d4f63be6f048d9a1bb66be15d089a11c898c3cf49c
snowballstemmer==1.9.0 \
--hash=sha256:9f3b9ffe0809d174f7047e121431acf99c89a7040f0ca84f94ba53a498e6d0c9
snowballstemmer==1.9.1 \
--hash=sha256:713e53b79cbcf97bc5245a06080a33d54a77e7cce2f789c835a143bcdb5c033e
toml==0.10.0 \
--hash=sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c \
--hash=sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e
tox==3.13.2 \
--hash=sha256:dab0b0160dd187b654fc33d690ee1d7bf328bd5b8dc6ef3bb3cc468969c659ba \
--hash=sha256:ee35ffce74933a6c6ac10c9a0182e41763140a5a5070e21b114feca56eaccdcd
tox==3.14.0 \
--hash=sha256:0bc216b6a2e6afe764476b4a07edf2c1dab99ed82bb146a1130b2e828f5bff5e \
--hash=sha256:c4f6b319c20ba4913dbfe71ebfd14ff95d1853c4231493608182f66e566ecfe1
tqdm==4.35.0 \
--hash=sha256:1be3e4e3198f2d0e47b928e9d9a8ec1b63525db29095cec1467f4c5a4ea8ebf9 \
--hash=sha256:7e39a30e3d34a7a6539378e39d7490326253b7ee354878a92255656dc4284457
twine==1.13.0 \
--hash=sha256:0fb0bfa3df4f62076cab5def36b1a71a2e4acb4d1fa5c97475b048117b1a6446 \
--hash=sha256:d6c29c933ecfc74e9b1d9fa13aa1f87c5d5770e119f5a4ce032092f0ff5b14dc
twine==1.14.0 \
--hash=sha256:b2cec0dc1ac55bd74280d257f43763cf0cf928bdcd0de0fd70be70aa1195e3b0 \
--hash=sha256:e37d5a73d77b095b85314dde807bfb85b580b5b9d137f5b21332f4636990d97a
urllib3==1.25.3 \
--hash=sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1 \
--hash=sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232
virtualenv==16.7.4 \
--hash=sha256:94a6898293d07f84a98add34c4df900f8ec64a570292279f6d91c781d37fd305 \
--hash=sha256:f6fc312c031f2d2344f885de114f1cb029dfcffd26aa6e57d2ee2296935c4e7d
virtualenv==16.7.5 \
--hash=sha256:680af46846662bb38c5504b78bad9ed9e4f3ba2d54f54ba42494fdf94337fe30 \
--hash=sha256:f78d81b62d3147396ac33fc9d77579ddc42cc2a98dd9ea38886f616b33bc7fb2
webencodings==0.5.1 \
--hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \
--hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923
Expand All @@ -151,3 +151,9 @@ wheel==0.33.6 \
--hash=sha256:f4da1763d3becf2e2cd92a14a7c920f0f00eca30fdde9ea992c836685b9faf28
wrapt==1.11.2 \
--hash=sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1

# The following packages are considered to be unsafe in a requirements file:
setuptools==41.2.0 \
--hash=sha256:4380abcf2a4ffd1a5ba22d687c6d690dce83b2b51c70e9c6d09f7e8c7e8040dc \
--hash=sha256:66b86bbae7cc7ac2e867f52dc08a6bd064d938bac59dfec71b9b565dd36d6012 \
# via twine
13 changes: 8 additions & 5 deletions requirements/local27.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
astroid==1.6.6
bleach==3.1.0 # via readme-renderer
bump2version==0.5.11
certifi==2019.6.16 # via requests
certifi==2019.9.11 # via requests
chardet==3.0.4 # via requests
collective.checkdocs==0.2
docutils==0.15.2 # via collective.checkdocs, readme-renderer
Expand Down Expand Up @@ -38,13 +38,16 @@ requests-toolbelt==0.9.1 # via twine
requests==2.22.0 # via requests-toolbelt, twine
requirements-detector==0.6 # via prospector
setoptconf==0.2.0 # via prospector
snowballstemmer==1.9.0 # via pydocstyle
snowballstemmer==1.9.1 # via pydocstyle
toml==0.10.0 # via tox
tox==3.13.2
tox==3.14.0
tqdm==4.35.0 # via twine
twine==1.13.0
twine==1.14.0
urllib3==1.25.3 # via requests
virtualenv==16.7.4 # via tox
virtualenv==16.7.5 # via tox
webencodings==0.5.1 # via bleach
wheel==0.33.6
wrapt==1.11.2 # via astroid

# The following packages are considered to be unsafe in a requirements file:
# setuptools==41.2.0 # via twine
8 changes: 4 additions & 4 deletions requirements/py27.hash
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SHA1:650a568c6107189c8d5727e5f6808cb5d2ab35ad
# SHA1:f503ef5dcd0360f47366a72719538b167e746eaa
#
# This file is autogenerated by pip-compile-multi
# To update, run:
Expand All @@ -8,9 +8,9 @@
backports.functools-lru-cache==1.5 \
--hash=sha256:9d98697f088eb1b0fa451391f91afb5e3ebde16bbdb272819fd091151fda4f1a \
--hash=sha256:f0b0e4eba956de51238e17573b7087e852dfe9854afd2e9c873f73fc0ca0a6dd
configparser==3.8.1 \
--hash=sha256:45d1272aad6cfd7a8a06cf5c73f2ceb6a190f6acc1fa707e7f82a4c053b28b18 \
--hash=sha256:bc37850f0cc42a1725a796ef7d92690651bf1af37d744cc63161dac62cabee17
configparser==4.0.2 \
--hash=sha256:254c1d9c79f60c45dfde850850883d5aaa7f19a23f13561243a050d5a7c3fe4c \
--hash=sha256:c7d282687a5308319bf3d2e7706e575c635b0a470342641c93bea0ea3b5331df
enum34==1.1.6 \
--hash=sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850 \
--hash=sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a \
Expand Down
2 changes: 1 addition & 1 deletion requirements/py27.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# pip-compile-multi
#
backports.functools-lru-cache==1.5
configparser==3.8.1
configparser==4.0.2
enum34==1.1.6
funcsigs==1.0.2
future==0.17.1
Expand Down
14 changes: 7 additions & 7 deletions requirements/test.hash
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SHA1:bcb3288f4ef1140f2663a972f527a93f4a9c13a2
# SHA1:264971e8f9e4a1930809812537ea353b0bd298c2
#
# This file is autogenerated by pip-compile-multi
# To update, run:
Expand Down Expand Up @@ -45,9 +45,9 @@ coverage==4.5.4 \
--hash=sha256:efc89291bd5a08855829a3c522df16d856455297cf35ae827a37edac45f466a7 \
--hash=sha256:fa964bae817babece5aa2e8c1af841bebb6d0b9add8e637548809d040443fee0 \
--hash=sha256:ff37757e068ae606659c28c3bd0d923f9d29a85de79bf25b2b34b148473b5025
importlib-metadata==0.19 \
--hash=sha256:23d3d873e008a513952355379d93cbcab874c58f4f034ff657c7a87422fa64e8 \
--hash=sha256:80d2de76188eabfbfcf27e6a37342c2827801e59c4cc14b0371c56fed43820e3
importlib-metadata==0.22 \
--hash=sha256:652234b6ab8f2506ae58e528b6fbcc668831d3cc758e1bc01ef438d328b68cdb \
--hash=sha256:6f264986fb88042bc1f0535fa9a557e6a376cfe5679dc77caac7fe8b5d43d05f
mock==3.0.5 \
--hash=sha256:83657d894c90d5681d62155c82bda9c1187827525880eda8ff5df4ec813437c3 \
--hash=sha256:d157e52d4e5b938c550f39eb2fd15610db062441a9c2747d3dbfa9298211d0f8
Expand All @@ -58,9 +58,9 @@ more-itertools==5.0.0 \
packaging==19.1 \
--hash=sha256:a7ac867b97fdc07ee80a8058fe4435ccd274ecc3b0ed61d852d7d53055528cf9 \
--hash=sha256:c491ca87294da7cc01902edbe30a5bc6c4c28172b5138ab4e4aa1b9d7bfaeafe
pluggy==0.12.0 \
--hash=sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc \
--hash=sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c
pluggy==0.13.0 \
--hash=sha256:0db4b7601aae1d35b4a033282da476845aa19185c1e6964b25cf324b5e4ec3e6 \
--hash=sha256:fa5fa1622fa6dd5c030e9cad086fa19ef6a0cf6d7a2d12318e10cb49d6d68f34
py==1.8.0 \
--hash=sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa \
--hash=sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53
Expand Down
4 changes: 2 additions & 2 deletions requirements/test.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via packaging, pytest
coverage==4.5.4 # via pytest-cov
importlib-metadata==0.19 # via pluggy, pytest
importlib-metadata==0.22 # via pluggy, pytest
mock==3.0.5
more-itertools==5.0.0
packaging==19.1 # via pytest
pluggy==0.12.0 # via pytest
pluggy==0.13.0 # via pytest
py==1.8.0 # via pytest
pyparsing==2.4.2 # via packaging
pytest-cov==2.7.1
Expand Down
6 changes: 3 additions & 3 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[tox]
envlist = py{27,35,36,37,py}-{linux,windows}, lint2, lint3, conflicts, checkdocs, verify
envlist = py{27,35,36,37,py}-{linux,windows}, lint2, lint3, checkdocs, verify
skip_missing_interpreters = true

[testenv]
Expand Down Expand Up @@ -50,14 +50,14 @@ basepython = python2.7
deps = pip-compile-multi
commands =
pip-compile-multi -n local27
pip-compile-multi -n local27 -g local27 -i txt -o hash
pip-compile-multi -n local27 -g local27 -i txt -o hash --allow-unsafe

[testenv:upgrade3]
basepython = python3.6
deps = pip-compile-multi
commands =
pip-compile-multi -n local -n testwin
pip-compile-multi -n local -n testwin -g local -g testwin -i txt -o hash
pip-compile-multi -n local -n testwin -g local -g testwin -i txt -o hash --allow-unsafe

[pytest]
addopts = -vvvs --doctest-modules
Expand Down

0 comments on commit fbb3f2e

Please sign in to comment.