openSUSE Commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
August 2020
- 1 participants
- 2816 discussions
Hello community,
here is the log from the commit of package python-cryptography-vectors for openSUSE:Factory checked in at 2020-08-01 12:30:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-cryptography-vectors (Old)
and /work/SRC/openSUSE:Factory/.python-cryptography-vectors.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-cryptography-vectors"
Sat Aug 1 12:30:57 2020 rev:5 rq:823206 version:3.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-cryptography-vectors/python-cryptography-vectors.changes 2020-05-28 09:06:28.979548566 +0200
+++ /work/SRC/openSUSE:Factory/.python-cryptography-vectors.new.3592/python-cryptography-vectors.changes 2020-08-01 12:31:13.990459909 +0200
@@ -1,0 +2,6 @@
+Tue Jul 28 17:11:42 UTC 2020 - Ondřej Súkup <mimi.vx(a)gmail.com>
+
+- update to 3.0:
+ * updated vectors for the cryptography 3.0 testing
+
+-------------------------------------------------------------------
Old:
----
cryptography_vectors-2.9.2.tar.gz
cryptography_vectors-2.9.2.tar.gz.asc
New:
----
cryptography_vectors-3.0.tar.gz
cryptography_vectors-3.0.tar.gz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-cryptography-vectors.spec ++++++
--- /var/tmp/diff_new_pack.lweNHH/_old 2020-08-01 12:31:15.778461583 +0200
+++ /var/tmp/diff_new_pack.lweNHH/_new 2020-08-01 12:31:15.782461587 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-cryptography-vectors
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-cryptography-vectors
-Version: 2.9.2
+Version: 3.0
Release: 0
Summary: Test vectors for the cryptography package
License: Apache-2.0 OR BSD-3-Clause
++++++ cryptography_vectors-2.9.2.tar.gz -> cryptography_vectors-3.0.tar.gz ++++++
/work/SRC/openSUSE:Factory/python-cryptography-vectors/cryptography_vectors-2.9.2.tar.gz /work/SRC/openSUSE:Factory/.python-cryptography-vectors.new.3592/cryptography_vectors-3.0.tar.gz differ: char 5, line 1
1
0
Hello community,
here is the log from the commit of package python-sphinxcontrib-websupport for openSUSE:Factory checked in at 2020-08-01 12:30:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-sphinxcontrib-websupport (Old)
and /work/SRC/openSUSE:Factory/.python-sphinxcontrib-websupport.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-sphinxcontrib-websupport"
Sat Aug 1 12:30:52 2020 rev:10 rq:823185 version:1.2.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-sphinxcontrib-websupport/python-sphinxcontrib-websupport.changes 2020-04-19 21:46:33.983731248 +0200
+++ /work/SRC/openSUSE:Factory/.python-sphinxcontrib-websupport.new.3592/python-sphinxcontrib-websupport.changes 2020-08-01 12:31:03.302449902 +0200
@@ -1,0 +2,7 @@
+Tue Jul 28 09:01:24 UTC 2020 - Marketa Calabkova <mcalabkova(a)suse.com>
+
+- version update to 1.2.3
+ * #43: doctreedir argument has been ignored on initialize app
+ * Stop to use sphinx.util.pycompat:htmlescape
+
+-------------------------------------------------------------------
Old:
----
sphinxcontrib-websupport-1.2.1.tar.gz
New:
----
sphinxcontrib-websupport-1.2.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-sphinxcontrib-websupport.spec ++++++
--- /var/tmp/diff_new_pack.Lar7gr/_old 2020-08-01 12:31:05.422451887 +0200
+++ /var/tmp/diff_new_pack.Lar7gr/_new 2020-08-01 12:31:05.430451895 +0200
@@ -27,7 +27,7 @@
%endif
%global skip_python2 1
Name: python-sphinxcontrib-websupport%{psuffix}
-Version: 1.2.1
+Version: 1.2.3
Release: 0
Summary: Sphinx API for Web Apps
License: BSD-2-Clause
++++++ sphinxcontrib-websupport-1.2.1.tar.gz -> sphinxcontrib-websupport-1.2.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinxcontrib-websupport-1.2.1/CHANGES new/sphinxcontrib-websupport-1.2.3/CHANGES
--- old/sphinxcontrib-websupport-1.2.1/CHANGES 2020-03-21 09:19:35.000000000 +0100
+++ new/sphinxcontrib-websupport-1.2.3/CHANGES 2020-06-27 15:23:29.000000000 +0200
@@ -1,4 +1,14 @@
-Release 1.2.1 (unreleased)
+Release 1.2.3 (2020-06-27)
+==========================
+
+* #43: doctreedir argument has been ignored on initialize app
+
+Release 1.2.2 (2020-04-29)
+==========================
+
+* Stop to use sphinx.util.pycompat:htmlescape
+
+Release 1.2.1 (2020-03-21)
==========================
* #41: templates/searchresults.html is missing in the source tarball
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinxcontrib-websupport-1.2.1/PKG-INFO new/sphinxcontrib-websupport-1.2.3/PKG-INFO
--- old/sphinxcontrib-websupport-1.2.1/PKG-INFO 2020-03-21 09:20:54.133654400 +0100
+++ new/sphinxcontrib-websupport-1.2.3/PKG-INFO 2020-06-27 15:23:56.976203700 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: sphinxcontrib-websupport
-Version: 1.2.1
+Version: 1.2.3
Summary: Sphinx API for Web Apps
Home-page: http://sphinx-doc.org/
Author: Georg Brandl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinxcontrib-websupport-1.2.1/sphinxcontrib/websupport/core.py new/sphinxcontrib-websupport-1.2.3/sphinxcontrib/websupport/core.py
--- old/sphinxcontrib-websupport-1.2.1/sphinxcontrib/websupport/core.py 2020-02-07 13:32:26.000000000 +0100
+++ new/sphinxcontrib-websupport-1.2.3/sphinxcontrib/websupport/core.py 2020-06-27 15:21:48.000000000 +0200
@@ -9,6 +9,7 @@
:license: BSD, see LICENSE for details.
"""
+import html
import sys
import pickle
import posixpath
@@ -20,7 +21,6 @@
from sphinx.locale import _
from sphinx.util.docutils import docutils_namespace
from sphinx.util.osutil import ensuredir
-from sphinx.util.pycompat import htmlescape
from sphinxcontrib.websupport import errors
from sphinxcontrib.websupport import package_dir
from sphinxcontrib.websupport.search import BaseSearch, SEARCH_ADAPTERS
@@ -63,7 +63,7 @@
self.outdir = path.join(builddir, 'data')
self.datadir = datadir or self.outdir
self.staticdir = staticdir or path.join(self.builddir, 'static')
- self.doctreedir = staticdir or path.join(self.builddir, 'doctrees')
+ self.doctreedir = doctreedir or path.join(self.builddir, 'doctrees')
# web server virtual paths
self.staticroot = staticroot.strip('/')
self.docroot = docroot.strip('/')
@@ -465,5 +465,5 @@
ret = publish_parts(text, writer_name='html',
settings_overrides=settings)['fragment']
except Exception:
- ret = htmlescape(text)
+ ret = html.escape(text)
return ret
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinxcontrib-websupport-1.2.1/sphinxcontrib/websupport/storage/differ.py new/sphinxcontrib-websupport-1.2.3/sphinxcontrib/websupport/storage/differ.py
--- old/sphinxcontrib-websupport-1.2.1/sphinxcontrib/websupport/storage/differ.py 2020-01-12 16:12:28.000000000 +0100
+++ new/sphinxcontrib-websupport-1.2.3/sphinxcontrib/websupport/storage/differ.py 2020-04-29 09:55:19.000000000 +0200
@@ -9,14 +9,10 @@
:license: BSD, see LICENSE for details.
"""
+import html
import re
from difflib import Differ
-try:
- from html import escape as htmlescape
-except ImportError: # py27
- from cgi import escape as htmlescape # NOQA
-
class CombinedHtmlDiff(object):
"""Create an HTML representation of the differences between two pieces
@@ -25,7 +21,7 @@
highlight_regex = re.compile(r'([\+\-\^]+)')
def __init__(self, source, proposal):
- proposal = htmlescape(proposal)
+ proposal = html.escape(proposal)
differ = Differ()
self.diff = list(differ.compare(source.splitlines(1),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinxcontrib-websupport-1.2.1/sphinxcontrib/websupport/version.py new/sphinxcontrib-websupport-1.2.3/sphinxcontrib/websupport/version.py
--- old/sphinxcontrib-websupport-1.2.1/sphinxcontrib/websupport/version.py 2020-03-21 09:20:32.000000000 +0100
+++ new/sphinxcontrib-websupport-1.2.3/sphinxcontrib/websupport/version.py 2020-04-29 10:08:00.000000000 +0200
@@ -7,5 +7,5 @@
:license: BSD, see LICENSE for details.
"""
-__version__ = '1.2.1'
+__version__ = '1.2.3'
__version_info__ = tuple(map(int, __version__.split('.')))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinxcontrib-websupport-1.2.1/sphinxcontrib_websupport.egg-info/PKG-INFO new/sphinxcontrib-websupport-1.2.3/sphinxcontrib_websupport.egg-info/PKG-INFO
--- old/sphinxcontrib-websupport-1.2.1/sphinxcontrib_websupport.egg-info/PKG-INFO 2020-03-21 09:20:53.000000000 +0100
+++ new/sphinxcontrib-websupport-1.2.3/sphinxcontrib_websupport.egg-info/PKG-INFO 2020-06-27 15:23:56.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: sphinxcontrib-websupport
-Version: 1.2.1
+Version: 1.2.3
Summary: Sphinx API for Web Apps
Home-page: http://sphinx-doc.org/
Author: Georg Brandl
1
0
Hello community,
here is the log from the commit of package python-argon2-cffi for openSUSE:Factory checked in at 2020-08-01 12:30:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-argon2-cffi (Old)
and /work/SRC/openSUSE:Factory/.python-argon2-cffi.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-argon2-cffi"
Sat Aug 1 12:30:49 2020 rev:8 rq:823068 version:20.1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-argon2-cffi/python-argon2-cffi.changes 2020-03-27 00:24:51.960243692 +0100
+++ /work/SRC/openSUSE:Factory/.python-argon2-cffi.new.3592/python-argon2-cffi.changes 2020-08-01 12:30:57.538444506 +0200
@@ -1,0 +2,7 @@
+Tue Jul 28 06:32:23 UTC 2020 - Steve Kowalik <steven.kowalik(a)suse.com>
+
+- Update to 20.1.0:
+ * It is now possible to manually override the detection of SSE2 using
+ the ``ARGON2_CFFI_USE_SSE2`` environment variable.
+
+-------------------------------------------------------------------
Old:
----
argon2-cffi-19.2.0.tar.gz
New:
----
argon2-cffi-20.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-argon2-cffi.spec ++++++
--- /var/tmp/diff_new_pack.55nr9E/_old 2020-08-01 12:30:58.354445270 +0200
+++ /var/tmp/diff_new_pack.55nr9E/_new 2020-08-01 12:30:58.354445270 +0200
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%bcond_without python2
Name: python-argon2-cffi
-Version: 19.2.0
+Version: 20.1.0
Release: 0
Summary: The Argon2 password hashing algorithm for Python
License: MIT
++++++ argon2-cffi-19.2.0.tar.gz -> argon2-cffi-20.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/.azure-pipelines/wheel-builder.yml new/argon2-cffi-20.1.0/.azure-pipelines/wheel-builder.yml
--- old/argon2-cffi-19.2.0/.azure-pipelines/wheel-builder.yml 2019-10-19 12:24:58.000000000 +0200
+++ new/argon2-cffi-20.1.0/.azure-pipelines/wheel-builder.yml 2020-03-31 16:07:52.000000000 +0200
@@ -29,17 +29,13 @@
displayName: Create virtualenv
- script: .venv/bin/pip install -U wheel
displayName: Update wheel to the latest version
- - script: .venv/bin/pip install six cffi "enum34; python_version < '3'"
+ - script: .venv/bin/pip install -U six cffi "enum34; python_version < '3'" pip
displayName: Install our Python dependencies
- script: |
set -e
set -x
- REGEX="3\.([0-9])*"
- if [[ "${PYTHON_VERSION}" =~ $REGEX ]]; then
- PY_LIMITED_API="--build-option --py-limited-api=cp3${BASH_REMATCH[1]}"
- fi
- .venv/bin/pip wheel argon2_cffi --no-use-pep517 --wheel-dir=wheelhouse $PY_LIMITED_API --no-binary argon2_cffi --no-deps
+ .venv/bin/pip wheel argon2_cffi --wheel-dir=wheelhouse --no-binary argon2_cffi --no-deps
displayName: Build the wheel
- script: .venv/bin/pip install --no-index -f wheelhouse argon2_cffi
displayName: Test installing the wheel
@@ -66,17 +62,13 @@
steps:
- script: /opt/python/$PYTHON_VERSION/bin/python -m virtualenv .venv
displayName: Create virtualenv
- - script: .venv/bin/pip install six cffi "enum34; python_version < '3'"
+ - script: .venv/bin/pip install -U six cffi "enum34; python_version < '3'" pip
displayName: Install our Python dependencies
- script: |
set -e
set -x
- REGEX="cp3([0-9])*"
- if [[ "$PYTHON_VERSION" =~ $REGEX ]]; then
- PY_LIMITED_API="--build-option --py-limited-api=cp3${BASH_REMATCH[1]}"
- fi
- .venv/bin/pip wheel --no-use-pep517 --no-binary argon2_cffi --no-deps argon2_cffi -w tmpwheelhouse/ $PY_LIMITED_API
+ .venv/bin/pip wheel --no-binary argon2_cffi --no-deps argon2_cffi -w tmpwheelhouse/
displayName: Build the wheel
- script: auditwheel repair tmpwheelhouse/argon2_cffi*.whl -w wheelhouse/
displayName: Run auditwheel
@@ -146,10 +138,10 @@
WINDOWS_ARCH: 'x86_64'
steps:
- script: |
- "C:/Python%PYTHON_VERSION%/Scripts/pip" install six cffi "enum34; python_version < '3'"
+ "C:/Python%PYTHON_VERSION%/Scripts/pip" install -U six cffi "enum34; python_version < '3'"
displayName: Install our Python dependencies
- script: |
- C:/Python%PYTHON_VERSION%/Scripts/pip wheel --no-use-pep517 argon2_cffi --wheel-dir=wheelhouse --no-binary argon2_cffi
+ C:/Python%PYTHON_VERSION%/Scripts/pip wheel argon2_cffi --wheel-dir=wheelhouse --no-binary argon2_cffi
displayName: Build the wheel
- script: '"C:/Python%PYTHON_VERSION%/Scripts/pip" install -f wheelhouse argon2_cffi --no-index'
displayName: Test installing the wheel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/.coveragerc new/argon2-cffi-20.1.0/.coveragerc
--- old/argon2-cffi-19.2.0/.coveragerc 2018-03-17 11:32:49.000000000 +0100
+++ new/argon2-cffi-20.1.0/.coveragerc 1970-01-01 01:00:00.000000000 +0100
@@ -1,14 +0,0 @@
-[run]
-branch = True
-source = argon2
-
-[paths]
-source =
- src/argon2
- .tox/*/lib/python*/site-packages/argon2
- .tox/pypy*/site-packages/argon2
-
-[report]
-show_missing = True
-omit =
- src/argon2/_ffi_build.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/.github/CONTRIBUTING.rst new/argon2-cffi-20.1.0/.github/CONTRIBUTING.rst
--- old/argon2-cffi-19.2.0/.github/CONTRIBUTING.rst 2019-10-27 18:41:58.000000000 +0100
+++ new/argon2-cffi-20.1.0/.github/CONTRIBUTING.rst 2020-03-31 16:07:52.000000000 +0200
@@ -1,7 +1,7 @@
How To Contribute
=================
-First off, thank you for considering contributing to ``argon2_cffi``!
+First off, thank you for considering contributing to ``argon2-cffi``!
It's people like *you* who make it such a great tool for everyone.
This document intends to make contribution more accessible by codifying tribal knowledge and expectations.
@@ -59,7 +59,7 @@
assert "foo" == x._a_private_attribute
- To run the test suite, all you need is a recent tox_.
- It will ensure the test suite runs with all dependencies against all Python versions just as it will on Travis CI.
+ It will ensure the test suite runs with all dependencies against all Python versions just as it will in our CI.
If you lack some Python versions, you can can always limit the environments like ``tox -e py27,py35`` (in that case you may want to look into pyenv_, which makes it very easy to install many different Python versions in parallel).
- Write `good test docstrings`_.
@@ -199,7 +199,7 @@
.. _pyenv: https://github.com/pyenv/pyenv
.. _reStructuredText: https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html
.. _semantic newlines: https://rhodesmill.org/brandon/2012/one-sentence-per-line/
-.. _CI: https://travis-ci.org/hynek/argon2_cffi/
+.. _CI: https://github.com/hynek/argon2-cffi/actions?query=workflow%3ACI
.. _black: https://github.com/psf/black
.. _pre-commit: https://pre-commit.com/
.. _isort: https://github.com/timothycrosley/isort
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/.github/workflows/main.yml new/argon2-cffi-20.1.0/.github/workflows/main.yml
--- old/argon2-cffi-19.2.0/.github/workflows/main.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/argon2-cffi-20.1.0/.github/workflows/main.yml 2020-03-31 16:07:52.000000000 +0200
@@ -0,0 +1,117 @@
+---
+name: CI
+
+on:
+ push:
+ branches: ["master"]
+ pull_request:
+ branches: ["master"]
+ # Allow rebuilds via API.
+ repository_dispatch:
+ types: rebuild
+
+jobs:
+ tests:
+ name: "Python ${{ matrix.python-version }}"
+ runs-on: "ubuntu-latest"
+ env:
+ USING_COVERAGE: '2.7,3.5,3.6,3.7,3.8'
+
+ strategy:
+ matrix:
+ python-version: ["2.7", "3.5", "3.6", "3.7", "3.8", "pypy2", "pypy3"]
+
+ steps:
+ - uses: "actions/checkout@v2"
+ with:
+ submodules: "recursive"
+ - uses: "actions/setup-python@v1"
+ with:
+ python-version: "${{ matrix.python-version }}"
+ - name: "Install dependencies"
+ run: |
+ set -xe
+ python -VV
+ python -m site
+ python -m pip install --upgrade pip setuptools wheel
+ python -m pip install --upgrade coverage[toml] virtualenv tox tox-gh-actions
+
+ - name: "Run tox targets for ${{ matrix.python-version }}"
+ run: "python -m tox"
+
+ - name: "Combine coverage"
+ run: |
+ set -xe
+ python -m coverage combine
+ python -m coverage xml
+ if: "contains(env.USING_COVERAGE, matrix.python-version)"
+ - name: "Upload coverage to Codecov"
+ uses: "codecov/codecov-action@v1"
+ if: "contains(env.USING_COVERAGE, matrix.python-version)"
+ with:
+ fail_ci_if_error: true
+
+ system-package:
+ runs-on: "ubuntu-latest"
+ name: "Install and test with system package of Argon2."
+ steps:
+ - uses: "actions/checkout@v2"
+ - uses: "actions/setup-python@v1"
+ with:
+ python-version: "3.8"
+ - name: "Install dependencies"
+ run: |
+ set -xe
+ sudo apt-get install libargon2-0 libargon2-0-dev
+ # Ensure we cannot use our own Argon2 by accident.
+ rm -rf extras
+ python -VV
+ python -m site
+ python -m pip install --upgrade pip setuptools wheel
+ python -m pip install --upgrade virtualenv tox
+
+ - name: "Run tox -e system-argon2"
+ run: "python -m tox -e system-argon2"
+
+ package:
+ name: "Build & verify package"
+ runs-on: "ubuntu-latest"
+
+ steps:
+ - uses: "actions/checkout@v2"
+ with:
+ submodules: "recursive"
+ - uses: "actions/setup-python@v1"
+ with:
+ python-version: "3.8"
+
+ - name: "Install pep517 and twine"
+ run: "python -m pip install pep517 twine"
+ - name: "Build package"
+ run: "python -m pep517.build --source --binary ."
+ - name: "List result"
+ run: "ls -l dist"
+ - name: "Check long_description"
+ run: "python -m twine check dist/*"
+
+ install-dev:
+ strategy:
+ matrix:
+ os: ["ubuntu-latest", "windows-latest", "macos-latest"]
+
+ name: "Verify dev env"
+ runs-on: "${{ matrix.os }}"
+
+ steps:
+ - uses: "actions/checkout@v2"
+ with:
+ submodules: "recursive"
+ - uses: "actions/setup-python@v1"
+ with:
+ python-version: "3.8"
+ - name: "Install in dev mode"
+ run: |
+ python setup.py build
+ python -m pip install -e .[dev]
+ - name: "Import package"
+ run: "python -c 'import argon2; print(argon2.__version__)'"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/.pre-commit-config.yaml new/argon2-cffi-20.1.0/.pre-commit-config.yaml
--- old/argon2-cffi-19.2.0/.pre-commit-config.yaml 2019-10-27 18:45:28.000000000 +0100
+++ new/argon2-cffi-20.1.0/.pre-commit-config.yaml 2020-05-10 17:11:50.000000000 +0200
@@ -1,20 +1,16 @@
+---
repos:
- - repo: https://gitlab.com/pycqa/flake8
- rev: 3.7.8
- hooks:
- - id: flake8
-
- repo: https://github.com/psf/black
- rev: 19.3b0
+ rev: 19.10b0
hooks:
- id: black
- language_version: python3.7
+ language_version: python3.8
# override until resolved: https://github.com/ambv/black/issues/402
files: \.pyi?$
types: []
- repo: https://github.com/asottile/seed-isort-config
- rev: v1.9.3
+ rev: v2.1.1
hooks:
- id: seed-isort-config
@@ -23,10 +19,14 @@
hooks:
- id: isort
additional_dependencies: [toml]
- language_version: python3.7
+
+ - repo: https://gitlab.com/pycqa/flake8
+ rev: 3.8.0a2
+ hooks:
+ - id: flake8
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v2.3.0
+ rev: v2.5.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/CHANGELOG.rst new/argon2-cffi-20.1.0/CHANGELOG.rst
--- old/argon2-cffi-19.2.0/CHANGELOG.rst 2019-10-27 18:48:21.000000000 +0100
+++ new/argon2-cffi-20.1.0/CHANGELOG.rst 2020-05-11 07:22:23.000000000 +0200
@@ -5,6 +5,33 @@
The third digit is only for regressions.
+20.1.0 (2020-05-11)
+-------------------
+
+Vendoring Argon2 @ `62358ba <https://github.com/P-H-C/phc-winner-argon2/tree/62358ba2123abd17fccf2a108a3…>`_ (20190702)
+
+
+Backward-incompatible changes:
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+*none*
+
+
+Deprecations:
+^^^^^^^^^^^^^
+
+*none*
+
+
+Changes:
+^^^^^^^^
+
+- It is now possible to manually override the detection of SSE2 using the ``ARGON2_CFFI_USE_SSE2`` environment variable.
+
+
+----
+
+
19.2.0 (2019-10-27)
-------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/PKG-INFO new/argon2-cffi-20.1.0/PKG-INFO
--- old/argon2-cffi-19.2.0/PKG-INFO 2019-10-27 18:58:06.284667700 +0100
+++ new/argon2-cffi-20.1.0/PKG-INFO 2020-05-11 07:30:40.410058500 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: argon2-cffi
-Version: 19.2.0
+Version: 20.1.0
Summary: The secure Argon2 password hashing algorithm.
Home-page: https://argon2-cffi.readthedocs.io/
Author: Hynek Schlawack
@@ -15,21 +15,13 @@
CFFI-based Argon2 Bindings for Python
=====================================
- .. image:: https://img.shields.io/pypi/v/argon2-cffi.svg
- :target: https://pypi.org/project/argon2-cffi/
- :alt: PyPI
-
.. image:: https://readthedocs.org/projects/argon2-cffi/badge/?version=stable
:target: http://argon2-cffi.readthedocs.io/en/stable/?badge=stable
:alt: Documentation Status
- .. image:: https://travis-ci.org/hynek/argon2-cffi.svg?branch=master
- :target: https://travis-ci.org/hynek/argon2-cffi
- :alt: Travis CI status
-
- .. image:: https://ci.appveyor.com/api/projects/status/3faufu7qgwc8nv2v/branch/master?…
- :target: https://ci.appveyor.com/project/hynek/argon2-cffi
- :alt: AppVeyor CI Status
+ .. image:: https://github.com/hynek/argon2-cffi/workflows/CI/badge.svg?branch=master
+ :target: https://github.com/hynek/argon2-cffi/actions?workflow=CI
+ :alt: CI Status
.. image:: https://codecov.io/github/hynek/argon2-cffi/branch/master/graph/badge.svg
:target: https://codecov.io/github/hynek/argon2-cffi
@@ -71,7 +63,7 @@
Release Information
===================
- 19.2.0 (2019-10-27)
+ 20.1.0 (2020-05-11)
-------------------
Vendoring Argon2 @ `62358ba <https://github.com/P-H-C/phc-winner-argon2/tree/62358ba2123abd17fccf2a108a3…>`_ (20190702)
@@ -80,10 +72,7 @@
Backward-incompatible changes:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- - Python 3.4 is not supported anymore.
- It has been unsupported by the Python core team for a while now and its PyPI downloads are negligible.
-
- It's very unlikely that ``argon2-cffi`` will break under 3.4 anytime soon, but we don't test it and don't ship binary wheels for it anymore.
+ *none*
Deprecations:
@@ -95,9 +84,7 @@
Changes:
^^^^^^^^
- - The dependency on ``enum34`` is now protected using a PEP 508 marker.
- This fixes problems when the sdist is handled by a different interpreter version than the one running it.
- `#48 <https://github.com/hynek/argon2-cffi/pull/48>`_
+ - It is now possible to manually override the detection of SSE2 using the ``ARGON2_CFFI_USE_SSE2`` environment variable.
`Full changelog <https://argon2-cffi.readthedocs.io/en/stable/changelog.html>`_.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/README.rst new/argon2-cffi-20.1.0/README.rst
--- old/argon2-cffi-19.2.0/README.rst 2019-10-17 12:38:03.000000000 +0200
+++ new/argon2-cffi-20.1.0/README.rst 2020-03-31 16:07:52.000000000 +0200
@@ -2,21 +2,13 @@
CFFI-based Argon2 Bindings for Python
=====================================
-.. image:: https://img.shields.io/pypi/v/argon2-cffi.svg
- :target: https://pypi.org/project/argon2-cffi/
- :alt: PyPI
-
.. image:: https://readthedocs.org/projects/argon2-cffi/badge/?version=stable
:target: http://argon2-cffi.readthedocs.io/en/stable/?badge=stable
:alt: Documentation Status
-.. image:: https://travis-ci.org/hynek/argon2-cffi.svg?branch=master
- :target: https://travis-ci.org/hynek/argon2-cffi
- :alt: Travis CI status
-
-.. image:: https://ci.appveyor.com/api/projects/status/3faufu7qgwc8nv2v/branch/master?…
- :target: https://ci.appveyor.com/project/hynek/argon2-cffi
- :alt: AppVeyor CI Status
+.. image:: https://github.com/hynek/argon2-cffi/workflows/CI/badge.svg?branch=master
+ :target: https://github.com/hynek/argon2-cffi/actions?workflow=CI
+ :alt: CI Status
.. image:: https://codecov.io/github/hynek/argon2-cffi/branch/master/graph/badge.svg
:target: https://codecov.io/github/hynek/argon2-cffi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/docs/installation.rst new/argon2-cffi-20.1.0/docs/installation.rst
--- old/argon2-cffi-19.2.0/docs/installation.rst 2019-06-05 12:37:58.000000000 +0200
+++ new/argon2-cffi-20.1.0/docs/installation.rst 2020-05-10 17:10:43.000000000 +0200
@@ -52,10 +52,27 @@
env ARGON2_CFFI_USE_SYSTEM=1 \
python -m pip install --no-binary=argon2-cffi argon2-cffi
-This approach can lead to problems around your build chain and you can run into incompatabilities between Argon2 and ``argon2-cffi`` if the latter has been tested against a different version.
+This approach can lead to problems around your build chain and you can run into incompatibilities between Argon2 and ``argon2-cffi`` if the latter has been tested against a different version.
**It is your own responsibility to deal with these risks if you choose this path.**
+Available since version 18.1.0.
+
+
+Override Automatic SSE2 Detection
+---------------------------------
+
+Usually the build process tries to guess whether or not it should use SSE2_-optimized code.
+This can go wrong and is problematic for cross-compiling.
+
+Therefore you can use the ``ARGON2_CFFI_USE_SSE2`` environment variable to control the process:
+
+- If you set it to ``1``, ``argon2-cffi`` will build **with** SSE2 support.
+- If you set it to ``0``, ``argon2-cffi`` will build **without** SSE2 support.
+- If you set it to anything else, it will be ignored and ``argon2-cffi`` will try to guess.
+
+Available since version 20.1.0.
+
.. _SSE2: https://en.wikipedia.org/wiki/SSE2
.. _PyPI: https://pypi.org/project/argon2-cffi/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/extras/appveyor/install.ps1 new/argon2-cffi-20.1.0/extras/appveyor/install.ps1
--- old/argon2-cffi-19.2.0/extras/appveyor/install.ps1 2019-06-05 14:20:46.000000000 +0200
+++ new/argon2-cffi-20.1.0/extras/appveyor/install.ps1 1970-01-01 01:00:00.000000000 +0100
@@ -1,229 +0,0 @@
-# Sample script to install Python and pip under Windows
-# Authors: Olivier Grisel, Jonathan Helmus, Kyle Kastner, and Alex Willmer
-# License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/
-
-$MINICONDA_URL = "http://repo.continuum.io/miniconda/"
-$BASE_URL = "https://www.python.org/ftp/python/"
-$GET_PIP_URL = "https://bootstrap.pypa.io/get-pip.py"
-$GET_PIP_PATH = "C:\get-pip.py"
-
-$PYTHON_PRERELEASE_REGEX = @"
-(?x)
-(?<major>\d+)
-\.
-(?<minor>\d+)
-\.
-(?<micro>\d+)
-(?<prerelease>[a-z]{1,2}\d+)
-"@
-
-
-function Download ($filename, $url) {
- $webclient = New-Object System.Net.WebClient
-
- $basedir = $pwd.Path + "\"
- $filepath = $basedir + $filename
- if (Test-Path $filename) {
- Write-Host "Reusing" $filepath
- return $filepath
- }
-
- # Download and retry up to 3 times in case of network transient errors.
- Write-Host "Downloading" $filename "from" $url
- $retry_attempts = 2
- for ($i = 0; $i -lt $retry_attempts; $i++) {
- try {
- $webclient.DownloadFile($url, $filepath)
- break
- }
- Catch [Exception]{
- Start-Sleep 1
- }
- }
- if (Test-Path $filepath) {
- Write-Host "File saved at" $filepath
- } else {
- # Retry once to get the error message if any at the last try
- $webclient.DownloadFile($url, $filepath)
- }
- return $filepath
-}
-
-
-function ParsePythonVersion ($python_version) {
- if ($python_version -match $PYTHON_PRERELEASE_REGEX) {
- return ([int]$matches.major, [int]$matches.minor, [int]$matches.micro,
- $matches.prerelease)
- }
- $version_obj = [version]$python_version
- return ($version_obj.major, $version_obj.minor, $version_obj.build, "")
-}
-
-
-function DownloadPython ($python_version, $platform_suffix) {
- $major, $minor, $micro, $prerelease = ParsePythonVersion $python_version
-
- if (($major -le 2 -and $micro -eq 0) `
- -or ($major -eq 3 -and $minor -le 2 -and $micro -eq 0) `
- ) {
- $dir = "$major.$minor"
- $python_version = "$major.$minor$prerelease"
- } else {
- $dir = "$major.$minor.$micro"
- }
-
- if ($prerelease) {
- if (($major -le 2) `
- -or ($major -eq 3 -and $minor -eq 1) `
- -or ($major -eq 3 -and $minor -eq 2) `
- -or ($major -eq 3 -and $minor -eq 3) `
- ) {
- $dir = "$dir/prev"
- }
- }
-
- if (($major -le 2) -or ($major -le 3 -and $minor -le 4)) {
- $ext = "msi"
- if ($platform_suffix) {
- $platform_suffix = ".$platform_suffix"
- }
- } else {
- $ext = "exe"
- if ($platform_suffix) {
- $platform_suffix = "-$platform_suffix"
- }
- }
-
- $filename = "python-$python_version$platform_suffix.$ext"
- $url = "$BASE_URL$dir/$filename"
- $filepath = Download $filename $url
- return $filepath
-}
-
-
-function InstallPython ($python_version, $architecture, $python_home) {
- Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home
- if (Test-Path $python_home) {
- Write-Host $python_home "already exists, skipping."
- return $false
- }
- if ($architecture -eq "32") {
- $platform_suffix = ""
- } else {
- $platform_suffix = "amd64"
- }
- $installer_path = DownloadPython $python_version $platform_suffix
- $installer_ext = [System.IO.Path]::GetExtension($installer_path)
- Write-Host "Installing $installer_path to $python_home"
- $install_log = $python_home + ".log"
- if ($installer_ext -eq '.msi') {
- InstallPythonMSI $installer_path $python_home $install_log
- } else {
- InstallPythonEXE $installer_path $python_home $install_log
- }
- if (Test-Path $python_home) {
- Write-Host "Python $python_version ($architecture) installation complete"
- } else {
- Write-Host "Failed to install Python in $python_home"
- Get-Content -Path $install_log
- Exit 1
- }
-}
-
-
-function InstallPythonEXE ($exepath, $python_home, $install_log) {
- $install_args = "/quiet InstallAllUsers=1 TargetDir=$python_home"
- RunCommand $exepath $install_args
-}
-
-
-function InstallPythonMSI ($msipath, $python_home, $install_log) {
- $install_args = "/qn /log $install_log /i $msipath TARGETDIR=$python_home"
- $uninstall_args = "/qn /x $msipath"
- RunCommand "msiexec.exe" $install_args
- if (-not(Test-Path $python_home)) {
- Write-Host "Python seems to be installed else-where, reinstalling."
- RunCommand "msiexec.exe" $uninstall_args
- RunCommand "msiexec.exe" $install_args
- }
-}
-
-function RunCommand ($command, $command_args) {
- Write-Host $command $command_args
- Start-Process -FilePath $command -ArgumentList $command_args -Wait -Passthru
-}
-
-
-function InstallPip ($python_home) {
- $pip_path = $python_home + "\Scripts\pip.exe"
- $python_path = $python_home + "\python.exe"
- if (-not(Test-Path $pip_path)) {
- Write-Host "Installing pip..."
- $webclient = New-Object System.Net.WebClient
- $webclient.DownloadFile($GET_PIP_URL, $GET_PIP_PATH)
- Write-Host "Executing:" $python_path $GET_PIP_PATH
- & $python_path $GET_PIP_PATH
- } else {
- Write-Host "pip already installed."
- }
-}
-
-
-function DownloadMiniconda ($python_version, $platform_suffix) {
- if ($python_version -eq "3.4") {
- $filename = "Miniconda3-3.5.5-Windows-" + $platform_suffix + ".exe"
- } else {
- $filename = "Miniconda-3.5.5-Windows-" + $platform_suffix + ".exe"
- }
- $url = $MINICONDA_URL + $filename
- $filepath = Download $filename $url
- return $filepath
-}
-
-
-function InstallMiniconda ($python_version, $architecture, $python_home) {
- Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home
- if (Test-Path $python_home) {
- Write-Host $python_home "already exists, skipping."
- return $false
- }
- if ($architecture -eq "32") {
- $platform_suffix = "x86"
- } else {
- $platform_suffix = "x86_64"
- }
- $filepath = DownloadMiniconda $python_version $platform_suffix
- Write-Host "Installing" $filepath "to" $python_home
- $install_log = $python_home + ".log"
- $args = "/S /D=$python_home"
- Write-Host $filepath $args
- Start-Process -FilePath $filepath -ArgumentList $args -Wait -Passthru
- if (Test-Path $python_home) {
- Write-Host "Python $python_version ($architecture) installation complete"
- } else {
- Write-Host "Failed to install Python in $python_home"
- Get-Content -Path $install_log
- Exit 1
- }
-}
-
-
-function InstallMinicondaPip ($python_home) {
- $pip_path = $python_home + "\Scripts\pip.exe"
- $conda_path = $python_home + "\Scripts\conda.exe"
- if (-not(Test-Path $pip_path)) {
- Write-Host "Installing pip..."
- $args = "install --yes pip"
- Write-Host $conda_path $args
- Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
- } else {
- Write-Host "pip already installed."
- }
-}
-
-function main () {
- InstallPython $env:PYTHON_VERSION $env:PYTHON_ARCH $env:PYTHON
- InstallPip $env:PYTHON
-}
-
-main
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/extras/appveyor/run_with_env.cmd new/argon2-cffi-20.1.0/extras/appveyor/run_with_env.cmd
--- old/argon2-cffi-19.2.0/extras/appveyor/run_with_env.cmd 2019-06-05 14:20:46.000000000 +0200
+++ new/argon2-cffi-20.1.0/extras/appveyor/run_with_env.cmd 1970-01-01 01:00:00.000000000 +0100
@@ -1,88 +0,0 @@
-:: To build extensions for 64 bit Python 3, we need to configure environment
-:: variables to use the MSVC 2010 C++ compilers from GRMSDKX_EN_DVD.iso of:
-:: MS Windows SDK for Windows 7 and .NET Framework 4 (SDK v7.1)
-::
-:: To build extensions for 64 bit Python 2, we need to configure environment
-:: variables to use the MSVC 2008 C++ compilers from GRMSDKX_EN_DVD.iso of:
-:: MS Windows SDK for Windows 7 and .NET Framework 3.5 (SDK v7.0)
-::
-:: 32 bit builds, and 64-bit builds for 3.5 and beyond, do not require specific
-:: environment configurations.
-::
-:: Note: this script needs to be run with the /E:ON and /V:ON flags for the
-:: cmd interpreter, at least for (SDK v7.0)
-::
-:: More details at:
-:: https://github.com/cython/cython/wiki/64BitCythonExtensionsOnWindows
-:: http://stackoverflow.com/a/13751649/163740
-::
-:: Author: Olivier Grisel
-:: License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/
-::
-:: Notes about batch files for Python people:
-::
-:: Quotes in values are literally part of the values:
-:: SET FOO="bar"
-:: FOO is now five characters long: " b a r "
-:: If you don't want quotes, don't include them on the right-hand side.
-::
-:: The CALL lines at the end of this file look redundant, but if you move them
-:: outside of the IF clauses, they do not run properly in the SET_SDK_64==Y
-:: case, I don't know why.
-@ECHO OFF
-
-SET COMMAND_TO_RUN=%*
-SET WIN_SDK_ROOT=C:\Program Files\Microsoft SDKs\Windows
-SET WIN_WDK=c:\Program Files (x86)\Windows Kits\10\Include\wdf
-
-:: Extract the major and minor versions, and allow for the minor version to be
-:: more than 9. This requires the version number to have two dots in it.
-SET MAJOR_PYTHON_VERSION=%PYTHON_VERSION:~0,1%
-IF "%PYTHON_VERSION:~3,1%" == "." (
- SET MINOR_PYTHON_VERSION=%PYTHON_VERSION:~2,1%
-) ELSE (
- SET MINOR_PYTHON_VERSION=%PYTHON_VERSION:~2,2%
-)
-
-:: Based on the Python version, determine what SDK version to use, and whether
-:: to set the SDK for 64-bit.
-IF %MAJOR_PYTHON_VERSION% == 2 (
- SET WINDOWS_SDK_VERSION="v7.0"
- SET SET_SDK_64=Y
-) ELSE (
- IF %MAJOR_PYTHON_VERSION% == 3 (
- SET WINDOWS_SDK_VERSION="v7.1"
- IF %MINOR_PYTHON_VERSION% LEQ 4 (
- SET SET_SDK_64=Y
- ) ELSE (
- SET SET_SDK_64=N
- IF EXIST "%WIN_WDK%" (
- :: See: https://connect.microsoft.com/VisualStudio/feedback/details/1610302/
- REN "%WIN_WDK%" 0wdf
- )
- )
- ) ELSE (
- ECHO Unsupported Python version: "%MAJOR_PYTHON_VERSION%"
- EXIT 1
- )
-)
-
-IF %PYTHON_ARCH% == 64 (
- IF %SET_SDK_64% == Y (
- ECHO Configuring Windows SDK %WINDOWS_SDK_VERSION% for Python %MAJOR_PYTHON_VERSION% on a 64 bit architecture
- SET DISTUTILS_USE_SDK=1
- SET MSSdk=1
- "%WIN_SDK_ROOT%\%WINDOWS_SDK_VERSION%\Setup\WindowsSdkVer.exe" -q -version:%WINDOWS_SDK_VERSION%
- "%WIN_SDK_ROOT%\%WINDOWS_SDK_VERSION%\Bin\SetEnv.cmd" /x64 /release
- ECHO Executing: %COMMAND_TO_RUN%
- call %COMMAND_TO_RUN% || EXIT 1
- ) ELSE (
- ECHO Using default MSVC build environment for 64 bit architecture
- ECHO Executing: %COMMAND_TO_RUN%
- call %COMMAND_TO_RUN% || EXIT 1
- )
-) ELSE (
- ECHO Using default MSVC build environment for 32 bit architecture
- ECHO Executing: %COMMAND_TO_RUN%
- call %COMMAND_TO_RUN% || EXIT 1
-)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/pyproject.toml new/argon2-cffi-20.1.0/pyproject.toml
--- old/argon2-cffi-19.2.0/pyproject.toml 2019-10-17 11:14:53.000000000 +0200
+++ new/argon2-cffi-20.1.0/pyproject.toml 2020-01-13 09:32:00.000000000 +0100
@@ -3,6 +3,19 @@
build-backend = "setuptools.build_meta"
+[tool.coverage.run]
+parallel = true
+branch = true
+source = ["argon2"]
+
+[tool.coverage.paths]
+source = ["src", ".tox/*/site-packages"]
+
+[tool.coverage.report]
+show_missing = true
+omit = ["src/argon2/_ffi_build.py"]
+
+
[tool.black]
line-length = 79
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/setup.py new/argon2-cffi-20.1.0/setup.py
--- old/argon2-cffi-19.2.0/setup.py 2019-10-17 11:16:28.000000000 +0200
+++ new/argon2-cffi-20.1.0/setup.py 2020-05-10 16:00:25.000000000 +0200
@@ -19,9 +19,15 @@
NAME = "argon2-cffi"
PACKAGES = find_packages(where="src")
-# Optimized version requires SSE2 extensions. They have been around since
-# 2001 so we try to compile it on every recent-ish x86.
-optimized = platform.machine() in ("i686", "x86", "x86_64", "AMD64")
+use_sse2 = os.environ.get("ARGON2_CFFI_USE_SSE2", None)
+if use_sse2 == "1":
+ optimized = True
+elif use_sse2 == "0":
+ optimized = False
+else:
+ # Optimized version requires SSE2 extensions. They have been around since
+ # 2001 so we try to compile it on every recent-ish x86.
+ optimized = platform.machine() in ("i686", "x86", "x86_64", "AMD64")
CFFI_MODULES = ["src/argon2/_ffi_build.py:ffi"]
lib_base = os.path.join("extras", "libargon2", "src")
@@ -96,7 +102,7 @@
INSTALL_REQUIRES = ["cffi>=1.0.0", "six", "enum34; python_version<'3.4'"]
EXTRAS_REQUIRE = {
"docs": ["sphinx"],
- "tests": ["coverage", "hypothesis", "pytest"],
+ "tests": ["coverage[toml]>=5.0.2", "hypothesis", "pytest"],
}
EXTRAS_REQUIRE["dev"] = (
EXTRAS_REQUIRE["tests"] + EXTRAS_REQUIRE["docs"] + ["wheel", "pre-commit"]
@@ -200,11 +206,14 @@
)
if use_system_argon2:
disable_subcommand(build, "build_clib")
+ cmdclass = {"build_clib": BuildCLibWithCompilerFlags}
+ if BDistWheel is not None:
+ cmdclass["bdist_wheel"] = BDistWheel
return {
"setup_requires": SETUP_REQUIRES,
"cffi_modules": CFFI_MODULES,
"libraries": LIBRARIES,
- "cmdclass": {"build_clib": BuildCLibWithCompilerFlags},
+ "cmdclass": cmdclass,
}
@@ -278,7 +287,7 @@
+ "Release Information\n"
+ "===================\n\n"
+ re.search(
- r"(\d+.\d.\d \(.*?\)\n.*?)\n\n\n----\n\n\n",
+ r"(\d+.\d.\d \(.*?\)\r?\n.*?)\r?\n\r?\n\r?\n----\r?\n\r?\n\r?\n",
read("CHANGELOG.rst"),
re.S,
).group(1)
@@ -331,6 +340,27 @@
)
+if (
+ sys.platform != "win32"
+ and sys.version_info > (3,)
+ and platform.python_implementation() == "CPython"
+):
+ try:
+ import wheel.bdist_wheel
+ except ImportError:
+ BDistWheel = None
+ else:
+
+ class BDistWheel(wheel.bdist_wheel.bdist_wheel):
+ def finalize_options(self):
+ self.py_limited_api = "cp3{}".format(sys.version_info[1])
+ wheel.bdist_wheel.bdist_wheel.finalize_options(self)
+
+
+else:
+ BDistWheel = None
+
+
if __name__ == "__main__":
setup(
name=NAME,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/src/argon2/__init__.py new/argon2-cffi-20.1.0/src/argon2/__init__.py
--- old/argon2-cffi-19.2.0/src/argon2/__init__.py 2019-10-27 18:48:21.000000000 +0100
+++ new/argon2-cffi-20.1.0/src/argon2/__init__.py 2020-05-11 07:22:22.000000000 +0200
@@ -16,7 +16,7 @@
from .low_level import Type
-__version__ = "19.2.0"
+__version__ = "20.1.0"
__title__ = "argon2-cffi"
__description__ = "The secure Argon2 password hashing algorithm."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/src/argon2_cffi.egg-info/PKG-INFO new/argon2-cffi-20.1.0/src/argon2_cffi.egg-info/PKG-INFO
--- old/argon2-cffi-19.2.0/src/argon2_cffi.egg-info/PKG-INFO 2019-10-27 18:58:06.000000000 +0100
+++ new/argon2-cffi-20.1.0/src/argon2_cffi.egg-info/PKG-INFO 2020-05-11 07:30:40.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: argon2-cffi
-Version: 19.2.0
+Version: 20.1.0
Summary: The secure Argon2 password hashing algorithm.
Home-page: https://argon2-cffi.readthedocs.io/
Author: Hynek Schlawack
@@ -15,21 +15,13 @@
CFFI-based Argon2 Bindings for Python
=====================================
- .. image:: https://img.shields.io/pypi/v/argon2-cffi.svg
- :target: https://pypi.org/project/argon2-cffi/
- :alt: PyPI
-
.. image:: https://readthedocs.org/projects/argon2-cffi/badge/?version=stable
:target: http://argon2-cffi.readthedocs.io/en/stable/?badge=stable
:alt: Documentation Status
- .. image:: https://travis-ci.org/hynek/argon2-cffi.svg?branch=master
- :target: https://travis-ci.org/hynek/argon2-cffi
- :alt: Travis CI status
-
- .. image:: https://ci.appveyor.com/api/projects/status/3faufu7qgwc8nv2v/branch/master?…
- :target: https://ci.appveyor.com/project/hynek/argon2-cffi
- :alt: AppVeyor CI Status
+ .. image:: https://github.com/hynek/argon2-cffi/workflows/CI/badge.svg?branch=master
+ :target: https://github.com/hynek/argon2-cffi/actions?workflow=CI
+ :alt: CI Status
.. image:: https://codecov.io/github/hynek/argon2-cffi/branch/master/graph/badge.svg
:target: https://codecov.io/github/hynek/argon2-cffi
@@ -71,7 +63,7 @@
Release Information
===================
- 19.2.0 (2019-10-27)
+ 20.1.0 (2020-05-11)
-------------------
Vendoring Argon2 @ `62358ba <https://github.com/P-H-C/phc-winner-argon2/tree/62358ba2123abd17fccf2a108a3…>`_ (20190702)
@@ -80,10 +72,7 @@
Backward-incompatible changes:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- - Python 3.4 is not supported anymore.
- It has been unsupported by the Python core team for a while now and its PyPI downloads are negligible.
-
- It's very unlikely that ``argon2-cffi`` will break under 3.4 anytime soon, but we don't test it and don't ship binary wheels for it anymore.
+ *none*
Deprecations:
@@ -95,9 +84,7 @@
Changes:
^^^^^^^^
- - The dependency on ``enum34`` is now protected using a PEP 508 marker.
- This fixes problems when the sdist is handled by a different interpreter version than the one running it.
- `#48 <https://github.com/hynek/argon2-cffi/pull/48>`_
+ - It is now possible to manually override the detection of SSE2 using the ``ARGON2_CFFI_USE_SSE2`` environment variable.
`Full changelog <https://argon2-cffi.readthedocs.io/en/stable/changelog.html>`_.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/src/argon2_cffi.egg-info/SOURCES.txt new/argon2-cffi-20.1.0/src/argon2_cffi.egg-info/SOURCES.txt
--- old/argon2-cffi-19.2.0/src/argon2_cffi.egg-info/SOURCES.txt 2019-10-27 18:58:06.000000000 +0100
+++ new/argon2-cffi-20.1.0/src/argon2_cffi.egg-info/SOURCES.txt 2020-05-11 07:30:40.000000000 +0200
@@ -1,4 +1,3 @@
-.coveragerc
.pre-commit-config.yaml
AUTHORS.rst
CHANGELOG.rst
@@ -13,6 +12,7 @@
.azure-pipelines/wheel-builder.yml
.github/CODE_OF_CONDUCT.rst
.github/CONTRIBUTING.rst
+.github/workflows/main.yml
docs/Makefile
docs/api.rst
docs/argon2.rst
@@ -27,8 +27,6 @@
docs/license.rst
docs/login_example.py
docs/parameters.rst
-extras/appveyor/install.ps1
-extras/appveyor/run_with_env.cmd
extras/libargon2/.git
extras/libargon2/.gitattributes
extras/libargon2/.gitignore
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/src/argon2_cffi.egg-info/requires.txt new/argon2-cffi-20.1.0/src/argon2_cffi.egg-info/requires.txt
--- old/argon2-cffi-19.2.0/src/argon2_cffi.egg-info/requires.txt 2019-10-27 18:58:06.000000000 +0100
+++ new/argon2-cffi-20.1.0/src/argon2_cffi.egg-info/requires.txt 2020-05-11 07:30:40.000000000 +0200
@@ -5,7 +5,7 @@
enum34
[dev]
-coverage
+coverage[toml]>=5.0.2
hypothesis
pytest
sphinx
@@ -16,6 +16,6 @@
sphinx
[tests]
-coverage
+coverage[toml]>=5.0.2
hypothesis
pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/argon2-cffi-19.2.0/tox.ini new/argon2-cffi-20.1.0/tox.ini
--- old/argon2-cffi-19.2.0/tox.ini 2019-10-17 11:58:32.000000000 +0200
+++ new/argon2-cffi-20.1.0/tox.ini 2020-03-31 16:07:52.000000000 +0200
@@ -19,6 +19,17 @@
once::Warning
+[gh-actions]
+python =
+ 2.7: py27
+ 3.5: py35
+ 3.6: py36
+ 3.7: py37, docs
+ 3.8: py38, lint, manifest, typing, changelog
+ pypy2: pypy2
+ pypy3: pypy3
+
+
[tox]
envlist = lint,py27,py35,py36,py37,py38,pypy,pypy3,system-argon2,docs,manifest,pypi-description,coverage-report
isolated_build = true
@@ -26,7 +37,7 @@
[testenv:lint]
description = Run all pre-commit hooks.
-basepython = python3.7
+basepython = python3.8
skip_install = true
deps = pre-commit
passenv = HOMEPATH # needed on Windows
@@ -43,7 +54,7 @@
[testenv:system-argon2]
description = Run tests against bindings that use a system installation of Argon2.
-basepython = python3.7
+basepython = python3.8
setenv = ARGON2_CFFI_USE_SYSTEM=1
extras = tests
install_command = pip install {opts} --no-binary=argon2-cffi {packages}
@@ -54,6 +65,7 @@
[testenv:docs]
description = Build docs and run doctests.
+# Keep basepython in sync with gh-actions and .readthedocs.yml.
basepython = python3.7
extras = docs
commands =
@@ -64,7 +76,7 @@
[testenv:manifest]
description = Ensure MANIFEST.in is up to date.
-basepython = python3.7
+basepython = python3.8
deps = check-manifest
skip_install = true
commands = check-manifest
@@ -72,7 +84,7 @@
[testenv:pypi-description]
description = Ensure README.rst renders on PyPI.
-basepython = python3.7
+basepython = python3.8
skip_install = true
deps =
twine
@@ -84,8 +96,8 @@
[testenv:coverage-report]
description = Report coverage over all test runs.
-basepython = python3.6
-deps = coverage
+basepython = python3.8
+deps = coverage[toml]>=5.0.2
skip_install = true
commands =
coverage combine
1
0
Hello community,
here is the log from the commit of package python-arrow for openSUSE:Factory checked in at 2020-08-01 12:30:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-arrow (Old)
and /work/SRC/openSUSE:Factory/.python-arrow.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-arrow"
Sat Aug 1 12:30:48 2020 rev:16 rq:822788 version:0.15.8
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-arrow/python-arrow.changes 2020-07-15 12:13:16.892674018 +0200
+++ /work/SRC/openSUSE:Factory/.python-arrow.new.3592/python-arrow.changes 2020-08-01 12:30:52.306439607 +0200
@@ -1,0 +2,19 @@
+Sat Jul 25 15:25:36 UTC 2020 - Arun Persaud <arun(a)gmx.de>
+
+- specfile:
+ * updated url
+
+- update to version 0.15.8:
+ * [WARN] arrow will drop support for Python 2.7 and 3.5 in the 1.0.0
+ release in late September. The 0.15.x and 0.16.x releases are the
+ last to support Python 2.7 and 3.5.
+ * [NEW] Added humanize week granularity translation for Czech.
+ * [FIX] arrow.get will now pick sane defaults when weekdays are
+ passed with particular token combinations, see #446.
+ * [INTERNAL] Moved arrow to an organization. The repo can now be
+ found here.
+ * [INTERNAL] Started issuing deprecation warnings for Python 2.7 and
+ 3.5.
+ * [INTERNAL] Added Python 3.9 to CI pipeline.
+
+-------------------------------------------------------------------
Old:
----
arrow-0.15.7.tar.gz
New:
----
arrow-0.15.8.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-arrow.spec ++++++
--- /var/tmp/diff_new_pack.gYDCQA/_old 2020-08-01 12:30:53.098440349 +0200
+++ /var/tmp/diff_new_pack.gYDCQA/_new 2020-08-01 12:30:53.102440353 +0200
@@ -26,11 +26,11 @@
%endif
%bcond_without python2
Name: python-arrow%{?psuffix}
-Version: 0.15.7
+Version: 0.15.8
Release: 0
Summary: Better dates and times for Python
License: Apache-2.0
-URL: https://github.com/crsmithdev/arrow
+URL: https://github.com/arrow-py/arrow
Source: https://files.pythonhosted.org/packages/source/a/arrow/arrow-%{version}.tar…
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
++++++ arrow-0.15.7.tar.gz -> arrow-0.15.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/CHANGELOG.rst new/arrow-0.15.8/CHANGELOG.rst
--- old/arrow-0.15.7/CHANGELOG.rst 2020-06-19 19:35:25.000000000 +0200
+++ new/arrow-0.15.8/CHANGELOG.rst 2020-07-24 04:50:10.000000000 +0200
@@ -1,6 +1,16 @@
Changelog
=========
+0.15.8 (2020-07-23)
+-------------------
+
+- [WARN] arrow will **drop support** for Python 2.7 and 3.5 in the 1.0.0 release in late September. The 0.15.x and 0.16.x releases are the last to support Python 2.7 and 3.5.
+- [NEW] Added ``humanize`` week granularity translation for Czech.
+- [FIX] ``arrow.get`` will now pick sane defaults when weekdays are passed with particular token combinations, see `#446 <https://github.com/arrow-py/arrow/issues/446>`_.
+- [INTERNAL] Moved arrow to an organization. The repo can now be found `here <https://github.com/arrow-py/arrow>`_.
+- [INTERNAL] Started issuing deprecation warnings for Python 2.7 and 3.5.
+- [INTERNAL] Added Python 3.9 to CI pipeline.
+
0.15.7 (2020-06-19)
-------------------
@@ -63,7 +73,7 @@
0.15.5 (2020-01-03)
-------------------
-- [WARN] Python 2 reached EOL on 2020-01-01. arrow will **drop support** for Python 2 in a future release to be decided (see `#739 <https://github.com/crsmithdev/arrow/issues/739>`_).
+- [WARN] Python 2 reached EOL on 2020-01-01. arrow will **drop support** for Python 2 in a future release to be decided (see `#739 <https://github.com/arrow-py/arrow/issues/739>`_).
- [NEW] Added bounds parameter to ``span_range``, ``interval`` and ``span`` methods. This allows you to include or exclude the start and end values.
- [NEW] ``arrow.get()`` can now create arrow objects from a timestamp with a timezone, for example:
@@ -116,7 +126,7 @@
- [NEW] Added ``humanize`` week granularity translations for Chinese, Spanish and Vietnamese.
- [CHANGE] Added ``ParserError`` to module exports.
-- [FIX] Added support for midnight at end of day. See `#703 <https://github.com/crsmithdev/arrow/issues/703>`_ for details.
+- [FIX] Added support for midnight at end of day. See `#703 <https://github.com/arrow-py/arrow/issues/703>`_ for details.
- [INTERNAL] Created Travis build for macOS.
- [INTERNAL] Test parsing and formatting against full timezone database.
@@ -125,7 +135,7 @@
- [NEW] Added ``humanize`` week granularity translations for Portuguese and Brazilian Portuguese.
- [NEW] Embedded changelog within docs and added release dates to versions.
-- [FIX] Fixed a bug that caused test failures on Windows only, see `#668 <https://github.com/crsmithdev/arrow/issues/668>`_ for details.
+- [FIX] Fixed a bug that caused test failures on Windows only, see `#668 <https://github.com/arrow-py/arrow/issues/668>`_ for details.
0.15.1 (2019-09-10)
-------------------
@@ -140,7 +150,7 @@
- [NEW] Added support for DDD and DDDD ordinal date tokens. The following functionality is now possible: ``arrow.get("1998-045")``, ``arrow.get("1998-45", "YYYY-DDD")``, ``arrow.get("1998-045", "YYYY-DDDD")``.
- [NEW] ISO 8601 basic format for dates and times is now supported (e.g. ``YYYYMMDDTHHmmssZ``).
- [NEW] Added ``humanize`` week granularity translations for French, Russian and Swiss German locales.
-- [CHANGE] Timestamps of type ``str`` are no longer supported **without a format string** in the ``arrow.get()`` method. This change was made to support the ISO 8601 basic format and to address bugs such as `#447 <https://github.com/crsmithdev/arrow/issues/447>`_.
+- [CHANGE] Timestamps of type ``str`` are no longer supported **without a format string** in the ``arrow.get()`` method. This change was made to support the ISO 8601 basic format and to address bugs such as `#447 <https://github.com/arrow-py/arrow/issues/447>`_.
The following will NOT work in v0.15.0:
@@ -160,9 +170,9 @@
- [CHANGE] When a meridian token (a|A) is passed and no meridians are available for the specified locale (e.g. unsupported or untranslated) a ``ParserError`` is raised.
- [CHANGE] The timestamp token (``X``) will now match float timestamps of type ``str``: ``arrow.get(“1565358758.123415”, “X”)``.
-- [CHANGE] Strings with leading and/or trailing whitespace will no longer be parsed without a format string. Please see `the docs <https://arrow.readthedocs.io/en/latest/#regular-expressions>`_ for ways to handle this.
+- [CHANGE] Strings with leading and/or trailing whitespace will no longer be parsed without a format string. Please see `the docs <https://arrow.readthedocs.io/#regular-expressions>`_ for ways to handle this.
- [FIX] The timestamp token (``X``) will now only match on strings that **strictly contain integers and floats**, preventing incorrect matches.
-- [FIX] Most instances of ``arrow.get()`` returning an incorrect ``Arrow`` object from a partial parsing match have been eliminated. The following issue have been addressed: `#91 <https://github.com/crsmithdev/arrow/issues/91>`_, `#196 <https://github.com/crsmithdev/arrow/issues/196>`_, `#396 <https://github.com/crsmithdev/arrow/issues/396>`_, `#434 <https://github.com/crsmithdev/arrow/issues/434>`_, `#447 <https://github.com/crsmithdev/arrow/issues/447>`_, `#456 <https://github.com/crsmithdev/arrow/issues/456>`_, `#519 <https://github.com/crsmithdev/arrow/issues/519>`_, `#538 <https://github.com/crsmithdev/arrow/issues/538>`_, `#560 <https://github.com/crsmithdev/arrow/issues/560>`_.
+- [FIX] Most instances of ``arrow.get()`` returning an incorrect ``Arrow`` object from a partial parsing match have been eliminated. The following issue have been addressed: `#91 <https://github.com/arrow-py/arrow/issues/91>`_, `#196 <https://github.com/arrow-py/arrow/issues/196>`_, `#396 <https://github.com/arrow-py/arrow/issues/396>`_, `#434 <https://github.com/arrow-py/arrow/issues/434>`_, `#447 <https://github.com/arrow-py/arrow/issues/447>`_, `#456 <https://github.com/arrow-py/arrow/issues/456>`_, `#519 <https://github.com/arrow-py/arrow/issues/519>`_, `#538 <https://github.com/arrow-py/arrow/issues/538>`_, `#560 <https://github.com/arrow-py/arrow/issues/560>`_.
0.14.7 (2019-09-04)
-------------------
@@ -190,13 +200,13 @@
-------------------
- [FIX] Fixed a regression in 0.14.3 that prevented a tzinfo argument of type string to be passed to the ``get()`` function. Functionality such as ``arrow.get("2019072807", "YYYYMMDDHH", tzinfo="UTC")`` should work as normal again.
-- [CHANGE] Moved ``backports.functools_lru_cache`` dependency from ``extra_requires`` to ``install_requires`` for ``Python 2.7`` installs to fix `#495 <https://github.com/crsmithdev/arrow/issues/495>`_.
+- [CHANGE] Moved ``backports.functools_lru_cache`` dependency from ``extra_requires`` to ``install_requires`` for ``Python 2.7`` installs to fix `#495 <https://github.com/arrow-py/arrow/issues/495>`_.
0.14.3 (2019-07-28)
-------------------
- [NEW] Added full support for Python 3.8.
-- [CHANGE] Added warnings for upcoming factory.get() parsing changes in 0.15.0. Please see `#612 <https://github.com/crsmithdev/arrow/issues/612>`_ for full details.
+- [CHANGE] Added warnings for upcoming factory.get() parsing changes in 0.15.0. Please see `#612 <https://github.com/arrow-py/arrow/issues/612>`_ for full details.
- [FIX] Extensive refactor and update of documentation.
- [FIX] factory.get() can now construct from kwargs.
- [FIX] Added meridians to Spanish Locale.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/Makefile new/arrow-0.15.8/Makefile
--- old/arrow-0.15.7/Makefile 2020-06-09 22:27:16.000000000 +0200
+++ new/arrow-0.15.8/Makefile 2020-07-20 06:56:36.000000000 +0200
@@ -16,7 +16,7 @@
pre-commit install
test:
- rm -f .coverage
+ rm -f .coverage coverage.xml
. venv/bin/activate; pytest
lint:
@@ -28,7 +28,7 @@
clean: clean-dist
rm -rf venv .pytest_cache ./**/__pycache__
- rm -f .coverage ./**/*.pyc
+ rm -f .coverage coverage.xml ./**/*.pyc
clean-dist:
rm -rf dist build .egg .eggs arrow.egg-info
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/PKG-INFO new/arrow-0.15.8/PKG-INFO
--- old/arrow-0.15.7/PKG-INFO 2020-06-19 19:42:24.000000000 +0200
+++ new/arrow-0.15.8/PKG-INFO 2020-07-24 04:55:26.461238000 +0200
@@ -1,26 +1,26 @@
Metadata-Version: 2.1
Name: arrow
-Version: 0.15.7
+Version: 0.15.8
Summary: Better dates & times for Python
Home-page: https://arrow.readthedocs.io
Author: Chris Smith
Author-email: crsmithdev(a)gmail.com
License: Apache 2.0
-Project-URL: Repository, https://github.com/crsmithdev/arrow
-Project-URL: Bug Reports, https://github.com/crsmithdev/arrow/issues
+Project-URL: Repository, https://github.com/arrow-py/arrow
+Project-URL: Bug Reports, https://github.com/arrow-py/arrow/issues
Project-URL: Documentation, https://arrow.readthedocs.io
Description: Arrow: Better dates & times for Python
======================================
.. start-inclusion-marker-do-not-remove
- .. image:: https://github.com/crsmithdev/arrow/workflows/tests/badge.svg?branch=master
+ .. image:: https://github.com/arrow-py/arrow/workflows/tests/badge.svg?branch=master
:alt: Build Status
- :target: https://github.com/crsmithdev/arrow/actions?query=workflow%3Atests+branch%3…
+ :target: https://github.com/arrow-py/arrow/actions?query=workflow%3Atests+branch%3Am…
- .. image:: https://codecov.io/github/crsmithdev/arrow/coverage.svg?branch=master
- :alt: Codecov
- :target: https://codecov.io/github/crsmithdev/arrow
+ .. image:: https://codecov.io/gh/arrow-py/arrow/branch/master/graph/badge.svg
+ :alt: Coverage
+ :target: https://codecov.io/gh/arrow-py/arrow
.. image:: https://img.shields.io/pypi/v/arrow.svg
:alt: PyPI Version
@@ -76,7 +76,7 @@
Installation
~~~~~~~~~~~~
- To install Arrow, use `pip <https://pip.pypa.io/en/stable/quickstart/>`_ or `pipenv <https://docs.pipenv.org/en/latest/>`_:
+ To install Arrow, use `pip <https://pip.pypa.io/en/stable/quickstart/>`_ or `pipenv <https://docs.pipenv.org>`_:
.. code-block:: console
@@ -123,20 +123,20 @@
Documentation
-------------
- For full documentation, please visit `arrow.readthedocs.io <https://arrow.readthedocs.io/en/latest/>`_.
+ For full documentation, please visit `arrow.readthedocs.io <https://arrow.readthedocs.io>`_.
Contributing
------------
Contributions are welcome for both code and localizations (adding and updating locales). Begin by gaining familiarity with the Arrow library and its features. Then, jump into contributing:
- #. Find an issue or feature to tackle on the `issue tracker <https://github.com/crsmithdev/arrow/issues>`_. Issues marked with the `"good first issue" label <https://github.com/crsmithdev/arrow/issues?q=is%3Aopen+is%3Aissue+label%3A%…>`_ may be a great place to start!
- #. Fork `this repository <https://github.com/crsmithdev/arrow>`_ on GitHub and begin making changes in a branch.
+ #. Find an issue or feature to tackle on the `issue tracker <https://github.com/arrow-py/arrow/issues>`_. Issues marked with the `"good first issue" label <https://github.com/arrow-py/arrow/issues?q=is%3Aopen+is%3Aissue+label%3A%22…>`_ may be a great place to start!
+ #. Fork `this repository <https://github.com/arrow-py/arrow>`_ on GitHub and begin making changes in a branch.
#. Add a few tests to ensure that the bug was fixed or the feature works as expected.
- #. Run the entire test suite and linting checks by running one of the following commands: :code:`tox` (if you have `tox <https://tox.readthedocs.io/en/latest/>`_ installed) **OR** :code:`make build38 && make test && make lint` (if you do not have Python 3.8 installed, replace :code:`build38` with the latest Python version on your system).
+ #. Run the entire test suite and linting checks by running one of the following commands: :code:`tox` (if you have `tox <https://tox.readthedocs.io>`_ installed) **OR** :code:`make build38 && make test && make lint` (if you do not have Python 3.8 installed, replace :code:`build38` with the latest Python version on your system).
#. Submit a pull request and await feedback 😃.
- If you have any questions along the way, feel free to ask them `here <https://github.com/crsmithdev/arrow/issues/new?labels=question>`_.
+ If you have any questions along the way, feel free to ask them `here <https://github.com/arrow-py/arrow/issues/new?labels=question>`_.
Support Arrow
-------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/README.rst new/arrow-0.15.8/README.rst
--- old/arrow-0.15.7/README.rst 2020-06-09 22:27:16.000000000 +0200
+++ new/arrow-0.15.8/README.rst 2020-07-24 04:50:10.000000000 +0200
@@ -3,13 +3,13 @@
.. start-inclusion-marker-do-not-remove
-.. image:: https://github.com/crsmithdev/arrow/workflows/tests/badge.svg?branch=master
+.. image:: https://github.com/arrow-py/arrow/workflows/tests/badge.svg?branch=master
:alt: Build Status
- :target: https://github.com/crsmithdev/arrow/actions?query=workflow%3Atests+branch%3…
+ :target: https://github.com/arrow-py/arrow/actions?query=workflow%3Atests+branch%3Am…
-.. image:: https://codecov.io/github/crsmithdev/arrow/coverage.svg?branch=master
- :alt: Codecov
- :target: https://codecov.io/github/crsmithdev/arrow
+.. image:: https://codecov.io/gh/arrow-py/arrow/branch/master/graph/badge.svg
+ :alt: Coverage
+ :target: https://codecov.io/gh/arrow-py/arrow
.. image:: https://img.shields.io/pypi/v/arrow.svg
:alt: PyPI Version
@@ -65,7 +65,7 @@
Installation
~~~~~~~~~~~~
-To install Arrow, use `pip <https://pip.pypa.io/en/stable/quickstart/>`_ or `pipenv <https://docs.pipenv.org/en/latest/>`_:
+To install Arrow, use `pip <https://pip.pypa.io/en/stable/quickstart/>`_ or `pipenv <https://docs.pipenv.org>`_:
.. code-block:: console
@@ -112,20 +112,20 @@
Documentation
-------------
-For full documentation, please visit `arrow.readthedocs.io <https://arrow.readthedocs.io/en/latest/>`_.
+For full documentation, please visit `arrow.readthedocs.io <https://arrow.readthedocs.io>`_.
Contributing
------------
Contributions are welcome for both code and localizations (adding and updating locales). Begin by gaining familiarity with the Arrow library and its features. Then, jump into contributing:
-#. Find an issue or feature to tackle on the `issue tracker <https://github.com/crsmithdev/arrow/issues>`_. Issues marked with the `"good first issue" label <https://github.com/crsmithdev/arrow/issues?q=is%3Aopen+is%3Aissue+label%3A%…>`_ may be a great place to start!
-#. Fork `this repository <https://github.com/crsmithdev/arrow>`_ on GitHub and begin making changes in a branch.
+#. Find an issue or feature to tackle on the `issue tracker <https://github.com/arrow-py/arrow/issues>`_. Issues marked with the `"good first issue" label <https://github.com/arrow-py/arrow/issues?q=is%3Aopen+is%3Aissue+label%3A%22…>`_ may be a great place to start!
+#. Fork `this repository <https://github.com/arrow-py/arrow>`_ on GitHub and begin making changes in a branch.
#. Add a few tests to ensure that the bug was fixed or the feature works as expected.
-#. Run the entire test suite and linting checks by running one of the following commands: :code:`tox` (if you have `tox <https://tox.readthedocs.io/en/latest/>`_ installed) **OR** :code:`make build38 && make test && make lint` (if you do not have Python 3.8 installed, replace :code:`build38` with the latest Python version on your system).
+#. Run the entire test suite and linting checks by running one of the following commands: :code:`tox` (if you have `tox <https://tox.readthedocs.io>`_ installed) **OR** :code:`make build38 && make test && make lint` (if you do not have Python 3.8 installed, replace :code:`build38` with the latest Python version on your system).
#. Submit a pull request and await feedback 😃.
-If you have any questions along the way, feel free to ask them `here <https://github.com/crsmithdev/arrow/issues/new?labels=question>`_.
+If you have any questions along the way, feel free to ask them `here <https://github.com/arrow-py/arrow/issues/new?labels=question>`_.
Support Arrow
-------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/arrow/_version.py new/arrow-0.15.8/arrow/_version.py
--- old/arrow-0.15.7/arrow/_version.py 2020-06-19 19:35:25.000000000 +0200
+++ new/arrow-0.15.8/arrow/_version.py 2020-07-24 04:50:10.000000000 +0200
@@ -1 +1 @@
-__version__ = "0.15.7"
+__version__ = "0.15.8"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/arrow/arrow.py new/arrow-0.15.8/arrow/arrow.py
--- old/arrow-0.15.7/arrow/arrow.py 2020-06-16 00:06:45.000000000 +0200
+++ new/arrow-0.15.8/arrow/arrow.py 2020-07-24 04:50:10.000000000 +0200
@@ -9,6 +9,7 @@
import calendar
import sys
+import warnings
from datetime import datetime, timedelta
from datetime import tzinfo as dt_tzinfo
from math import trunc
@@ -18,6 +19,15 @@
from arrow import formatter, locales, parser, util
+if sys.version_info[:2] < (3, 6): # pragma: no cover
+ with warnings.catch_warnings():
+ warnings.simplefilter("default", DeprecationWarning)
+ warnings.warn(
+ "Arrow will drop support for Python 2.7 and 3.5 in the upcoming v1.0.0 release. Please upgrade to "
+ "Python 3.6+ to continue receiving updates for Arrow.",
+ DeprecationWarning,
+ )
+
class Arrow(object):
"""An :class:`Arrow <arrow.arrow.Arrow>` object.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/arrow/locales.py new/arrow-0.15.8/arrow/locales.py
--- old/arrow-0.15.7/arrow/locales.py 2020-06-16 21:42:45.000000000 +0200
+++ new/arrow-0.15.8/arrow/locales.py 2020-07-20 06:56:36.000000000 +0200
@@ -2867,6 +2867,8 @@
"hours": {"past": "{0} hodinami", "future": ["{0} hodiny", "{0} hodin"]},
"day": {"past": "dnem", "future": "den", "zero": "{0} dnů"},
"days": {"past": "{0} dny", "future": ["{0} dny", "{0} dnů"]},
+ "week": {"past": "týdnem", "future": "týden", "zero": "{0} týdnů"},
+ "weeks": {"past": "{0} týdny", "future": ["{0} týdny", "{0} týdnů"]},
"month": {"past": "měsícem", "future": "měsíc", "zero": "{0} měsíců"},
"months": {"past": "{0} měsíci", "future": ["{0} měsíce", "{0} měsíců"]},
"year": {"past": "rokem", "future": "rok", "zero": "{0} let"},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/arrow/parser.py new/arrow-0.15.8/arrow/parser.py
--- old/arrow-0.15.7/arrow/parser.py 2020-06-16 00:06:45.000000000 +0200
+++ new/arrow-0.15.8/arrow/parser.py 2020-07-20 06:56:36.000000000 +0200
@@ -7,7 +7,7 @@
from dateutil import tz
from arrow import locales
-from arrow.util import iso_to_gregorian, normalize_timestamp
+from arrow.util import iso_to_gregorian, next_weekday, normalize_timestamp
try:
from functools import lru_cache
@@ -338,9 +338,15 @@
elif token in ["DD", "D"]:
parts["day"] = int(value)
- elif token in ["Do"]:
+ elif token == "Do":
parts["day"] = int(value)
+ elif token == "dddd":
+ parts["day_of_week"] = self.locale.day_names.index(value) - 1
+
+ elif token == "ddd":
+ parts["day_of_week"] = self.locale.day_abbreviations.index(value) - 1
+
elif token.upper() in ["HH", "H"]:
parts["hour"] = int(value)
@@ -444,6 +450,24 @@
parts["month"] = dt.month
parts["day"] = dt.day
+ day_of_week = parts.get("day_of_week")
+ day = parts.get("day")
+
+ # If day is passed, ignore day of week
+ if day_of_week is not None and day is None:
+ year = parts.get("year", 1970)
+ month = parts.get("month", 1)
+ day = 1
+
+ # dddd => first day of week after epoch
+ # dddd YYYY => first day of week in specified year
+ # dddd MM YYYY => first day of week in specified year and month
+ # dddd MM => first day after epoch in specified month
+ next_weekday_dt = next_weekday(datetime(year, month, day), day_of_week)
+ parts["year"] = next_weekday_dt.year
+ parts["month"] = next_weekday_dt.month
+ parts["day"] = next_weekday_dt.day
+
am_pm = parts.get("am_pm")
hour = parts.get("hour", 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/arrow/util.py new/arrow-0.15.8/arrow/util.py
--- old/arrow-0.15.7/arrow/util.py 2020-06-16 00:06:45.000000000 +0200
+++ new/arrow-0.15.8/arrow/util.py 2020-07-20 06:56:36.000000000 +0200
@@ -4,9 +4,37 @@
import datetime
import numbers
+from dateutil.rrule import WEEKLY, rrule
+
from arrow.constants import MAX_TIMESTAMP, MAX_TIMESTAMP_MS, MAX_TIMESTAMP_US
+def next_weekday(start_date, weekday):
+ """Get next weekday from the specified start date.
+
+ :param start_date: Datetime object representing the start date.
+ :param weekday: Next weekday to obtain. Can be a value between 0 (Monday) and 6 (Sunday).
+ :return: Datetime object corresponding to the next weekday after start_date.
+
+ Usage::
+
+ # Get first Monday after epoch
+ >>> next_weekday(datetime(1970, 1, 1), 0)
+ 1970-01-05 00:00:00
+
+ # Get first Thursday after epoch
+ >>> next_weekday(datetime(1970, 1, 1), 3)
+ 1970-01-01 00:00:00
+
+ # Get first Sunday after epoch
+ >>> next_weekday(datetime(1970, 1, 1), 6)
+ 1970-01-04 00:00:00
+ """
+ if weekday < 0 or weekday > 6:
+ raise ValueError("Weekday must be between 0 (Monday) and 6 (Sunday).")
+ return rrule(freq=WEEKLY, dtstart=start_date, byweekday=weekday, count=1)[0]
+
+
def total_seconds(td):
"""Get total seconds for timedelta."""
return td.total_seconds()
@@ -77,4 +105,4 @@
return isinstance(s, str)
-__all__ = ["total_seconds", "is_timestamp", "isstr", "iso_to_gregorian"]
+__all__ = ["next_weekday", "total_seconds", "is_timestamp", "isstr", "iso_to_gregorian"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/arrow.egg-info/PKG-INFO new/arrow-0.15.8/arrow.egg-info/PKG-INFO
--- old/arrow-0.15.7/arrow.egg-info/PKG-INFO 2020-06-19 19:42:23.000000000 +0200
+++ new/arrow-0.15.8/arrow.egg-info/PKG-INFO 2020-07-24 04:55:26.000000000 +0200
@@ -1,26 +1,26 @@
Metadata-Version: 2.1
Name: arrow
-Version: 0.15.7
+Version: 0.15.8
Summary: Better dates & times for Python
Home-page: https://arrow.readthedocs.io
Author: Chris Smith
Author-email: crsmithdev(a)gmail.com
License: Apache 2.0
-Project-URL: Repository, https://github.com/crsmithdev/arrow
-Project-URL: Bug Reports, https://github.com/crsmithdev/arrow/issues
+Project-URL: Repository, https://github.com/arrow-py/arrow
+Project-URL: Bug Reports, https://github.com/arrow-py/arrow/issues
Project-URL: Documentation, https://arrow.readthedocs.io
Description: Arrow: Better dates & times for Python
======================================
.. start-inclusion-marker-do-not-remove
- .. image:: https://github.com/crsmithdev/arrow/workflows/tests/badge.svg?branch=master
+ .. image:: https://github.com/arrow-py/arrow/workflows/tests/badge.svg?branch=master
:alt: Build Status
- :target: https://github.com/crsmithdev/arrow/actions?query=workflow%3Atests+branch%3…
+ :target: https://github.com/arrow-py/arrow/actions?query=workflow%3Atests+branch%3Am…
- .. image:: https://codecov.io/github/crsmithdev/arrow/coverage.svg?branch=master
- :alt: Codecov
- :target: https://codecov.io/github/crsmithdev/arrow
+ .. image:: https://codecov.io/gh/arrow-py/arrow/branch/master/graph/badge.svg
+ :alt: Coverage
+ :target: https://codecov.io/gh/arrow-py/arrow
.. image:: https://img.shields.io/pypi/v/arrow.svg
:alt: PyPI Version
@@ -76,7 +76,7 @@
Installation
~~~~~~~~~~~~
- To install Arrow, use `pip <https://pip.pypa.io/en/stable/quickstart/>`_ or `pipenv <https://docs.pipenv.org/en/latest/>`_:
+ To install Arrow, use `pip <https://pip.pypa.io/en/stable/quickstart/>`_ or `pipenv <https://docs.pipenv.org>`_:
.. code-block:: console
@@ -123,20 +123,20 @@
Documentation
-------------
- For full documentation, please visit `arrow.readthedocs.io <https://arrow.readthedocs.io/en/latest/>`_.
+ For full documentation, please visit `arrow.readthedocs.io <https://arrow.readthedocs.io>`_.
Contributing
------------
Contributions are welcome for both code and localizations (adding and updating locales). Begin by gaining familiarity with the Arrow library and its features. Then, jump into contributing:
- #. Find an issue or feature to tackle on the `issue tracker <https://github.com/crsmithdev/arrow/issues>`_. Issues marked with the `"good first issue" label <https://github.com/crsmithdev/arrow/issues?q=is%3Aopen+is%3Aissue+label%3A%…>`_ may be a great place to start!
- #. Fork `this repository <https://github.com/crsmithdev/arrow>`_ on GitHub and begin making changes in a branch.
+ #. Find an issue or feature to tackle on the `issue tracker <https://github.com/arrow-py/arrow/issues>`_. Issues marked with the `"good first issue" label <https://github.com/arrow-py/arrow/issues?q=is%3Aopen+is%3Aissue+label%3A%22…>`_ may be a great place to start!
+ #. Fork `this repository <https://github.com/arrow-py/arrow>`_ on GitHub and begin making changes in a branch.
#. Add a few tests to ensure that the bug was fixed or the feature works as expected.
- #. Run the entire test suite and linting checks by running one of the following commands: :code:`tox` (if you have `tox <https://tox.readthedocs.io/en/latest/>`_ installed) **OR** :code:`make build38 && make test && make lint` (if you do not have Python 3.8 installed, replace :code:`build38` with the latest Python version on your system).
+ #. Run the entire test suite and linting checks by running one of the following commands: :code:`tox` (if you have `tox <https://tox.readthedocs.io>`_ installed) **OR** :code:`make build38 && make test && make lint` (if you do not have Python 3.8 installed, replace :code:`build38` with the latest Python version on your system).
#. Submit a pull request and await feedback 😃.
- If you have any questions along the way, feel free to ask them `here <https://github.com/crsmithdev/arrow/issues/new?labels=question>`_.
+ If you have any questions along the way, feel free to ask them `here <https://github.com/arrow-py/arrow/issues/new?labels=question>`_.
Support Arrow
-------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/docs/conf.py new/arrow-0.15.8/docs/conf.py
--- old/arrow-0.15.7/docs/conf.py 2020-03-26 18:27:13.000000000 +0100
+++ new/arrow-0.15.8/docs/conf.py 2020-07-24 04:50:10.000000000 +0200
@@ -47,7 +47,7 @@
# https://alabaster.readthedocs.io/en/latest/customization.html
html_theme_options = {
"description": "Arrow is a sensible and human-friendly approach to dates, times and timestamps.",
- "github_user": "crsmithdev",
+ "github_user": "arrow-py",
"github_repo": "arrow",
"github_banner": True,
"show_related": False,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/requirements.txt new/arrow-0.15.8/requirements.txt
--- old/arrow-0.15.7/requirements.txt 2020-06-06 15:35:17.000000000 +0200
+++ new/arrow-0.15.8/requirements.txt 2020-07-20 06:56:36.000000000 +0200
@@ -1,14 +1,14 @@
backports.functools_lru_cache==1.6.1; python_version == "2.7"
dateparser==0.7.*
-pre-commit==1.20.*; python_version <= "3.5"
-pre-commit==2.3.*; python_version >= "3.6"
+pre-commit==1.21.*; python_version <= "3.5"
+pre-commit==2.6.*; python_version >= "3.6"
pytest==4.6.*; python_version == "2.7"
pytest==5.4.*; python_version >= "3.5"
-pytest-cov==2.8.*
+pytest-cov==2.10.*
pytest-mock==2.0.*; python_version == "2.7"
-pytest-mock==3.1.*; python_version >= "3.5"
+pytest-mock==3.2.*; python_version >= "3.5"
python-dateutil==2.8.*
pytz==2019.*
simplejson==3.17.*
sphinx==1.8.*; python_version == "2.7"
-sphinx==3.0.*; python_version >= "3.5"
+sphinx==3.1.*; python_version >= "3.5"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/setup.py new/arrow-0.15.8/setup.py
--- old/arrow-0.15.7/setup.py 2020-06-16 00:06:33.000000000 +0200
+++ new/arrow-0.15.8/setup.py 2020-07-24 04:50:10.000000000 +0200
@@ -43,8 +43,8 @@
],
keywords="arrow date time datetime timestamp timezone humanize",
project_urls={
- "Repository": "https://github.com/crsmithdev/arrow",
- "Bug Reports": "https://github.com/crsmithdev/arrow/issues",
+ "Repository": "https://github.com/arrow-py/arrow",
+ "Bug Reports": "https://github.com/arrow-py/arrow/issues",
"Documentation": "https://arrow.readthedocs.io",
},
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/tests/test_formatter.py new/arrow-0.15.8/tests/test_formatter.py
--- old/arrow-0.15.7/tests/test_formatter.py 2020-06-16 00:06:33.000000000 +0200
+++ new/arrow-0.15.8/tests/test_formatter.py 2020-07-20 06:56:36.000000000 +0200
@@ -22,7 +22,7 @@
@pytest.mark.usefixtures("arrow_formatter")
-class TestDateTimeFormatterFormatToken:
+class TestFormatterFormatToken:
def test_format(self):
dt = datetime(2013, 2, 5, 12, 32, 51)
@@ -220,7 +220,7 @@
@pytest.mark.usefixtures("arrow_formatter", "time_1975_12_25")
-class TestDateTimeFormatterBuiltinFormats:
+class TestFormatterBuiltinFormats:
def test_atom(self):
assert (
self.formatter.format(self.datetime, FORMAT_ATOM)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/tests/test_locales.py new/arrow-0.15.8/tests/test_locales.py
--- old/arrow-0.15.7/tests/test_locales.py 2020-06-16 21:42:45.000000000 +0200
+++ new/arrow-0.15.8/tests/test_locales.py 2020-07-20 06:56:36.000000000 +0200
@@ -361,6 +361,12 @@
assert self.locale._format_timeframe("hours", -5) == "5 hodinami"
assert self.locale._format_timeframe("now", 0) == "Teď"
+ assert self.locale._format_timeframe("weeks", 2) == "2 týdny"
+ assert self.locale._format_timeframe("weeks", 5) == "5 týdnů"
+ assert self.locale._format_timeframe("week", 0) == "0 týdnů"
+ assert self.locale._format_timeframe("weeks", -2) == "2 týdny"
+ assert self.locale._format_timeframe("weeks", -5) == "5 týdny"
+
def test_format_relative_now(self):
result = self.locale._format_relative("Teď", "now", 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/tests/test_parser.py new/arrow-0.15.8/tests/test_parser.py
--- old/arrow-0.15.7/tests/test_parser.py 2020-06-09 20:21:32.000000000 +0200
+++ new/arrow-0.15.8/tests/test_parser.py 2020-07-20 06:56:36.000000000 +0200
@@ -10,7 +10,7 @@
from dateutil import tz
import arrow
-from arrow import parser
+from arrow import formatter, parser
from arrow.constants import MAX_TIMESTAMP_US
from arrow.parser import DateTimeParser, ParserError, ParserMatchError
@@ -580,6 +580,96 @@
with pytest.raises(ParserError):
self.parser.parse("145", "DDDD")
+ def test_parse_ddd_and_dddd(self):
+ fr_parser = parser.DateTimeParser("fr")
+
+ # Day of week should be ignored when a day is passed
+ # 2019-10-17 is a Thursday, so we know day of week
+ # is ignored if the same date is outputted
+ expected = datetime(2019, 10, 17)
+ assert self.parser.parse("Tue 2019-10-17", "ddd YYYY-MM-DD") == expected
+ assert fr_parser.parse("mar 2019-10-17", "ddd YYYY-MM-DD") == expected
+ assert self.parser.parse("Tuesday 2019-10-17", "dddd YYYY-MM-DD") == expected
+ assert fr_parser.parse("mardi 2019-10-17", "dddd YYYY-MM-DD") == expected
+
+ # Get first Tuesday after epoch
+ expected = datetime(1970, 1, 6)
+ assert self.parser.parse("Tue", "ddd") == expected
+ assert fr_parser.parse("mar", "ddd") == expected
+ assert self.parser.parse("Tuesday", "dddd") == expected
+ assert fr_parser.parse("mardi", "dddd") == expected
+
+ # Get first Tuesday in 2020
+ expected = datetime(2020, 1, 7)
+ assert self.parser.parse("Tue 2020", "ddd YYYY") == expected
+ assert fr_parser.parse("mar 2020", "ddd YYYY") == expected
+ assert self.parser.parse("Tuesday 2020", "dddd YYYY") == expected
+ assert fr_parser.parse("mardi 2020", "dddd YYYY") == expected
+
+ # Get first Tuesday in February 2020
+ expected = datetime(2020, 2, 4)
+ assert self.parser.parse("Tue 02 2020", "ddd MM YYYY") == expected
+ assert fr_parser.parse("mar 02 2020", "ddd MM YYYY") == expected
+ assert self.parser.parse("Tuesday 02 2020", "dddd MM YYYY") == expected
+ assert fr_parser.parse("mardi 02 2020", "dddd MM YYYY") == expected
+
+ # Get first Tuesday in February after epoch
+ expected = datetime(1970, 2, 3)
+ assert self.parser.parse("Tue 02", "ddd MM") == expected
+ assert fr_parser.parse("mar 02", "ddd MM") == expected
+ assert self.parser.parse("Tuesday 02", "dddd MM") == expected
+ assert fr_parser.parse("mardi 02", "dddd MM") == expected
+
+ # Times remain intact
+ expected = datetime(2020, 2, 4, 10, 25, 54, 123456, tz.tzoffset(None, -3600))
+ assert (
+ self.parser.parse(
+ "Tue 02 2020 10:25:54.123456-01:00", "ddd MM YYYY HH:mm:ss.SZZ"
+ )
+ == expected
+ )
+ assert (
+ fr_parser.parse(
+ "mar 02 2020 10:25:54.123456-01:00", "ddd MM YYYY HH:mm:ss.SZZ"
+ )
+ == expected
+ )
+ assert (
+ self.parser.parse(
+ "Tuesday 02 2020 10:25:54.123456-01:00", "dddd MM YYYY HH:mm:ss.SZZ"
+ )
+ == expected
+ )
+ assert (
+ fr_parser.parse(
+ "mardi 02 2020 10:25:54.123456-01:00", "dddd MM YYYY HH:mm:ss.SZZ"
+ )
+ == expected
+ )
+
+ # Regression test for issue #446
+ arw_formatter = formatter.DateTimeFormatter()
+ arw_formatter.format(self.parser.parse("Mon", "ddd"), "ddd") == "Mon"
+ arw_formatter.format(self.parser.parse("Monday", "dddd"), "dddd") == "Monday"
+ arw_formatter.format(self.parser.parse("Tue", "ddd"), "ddd") == "Tue"
+ arw_formatter.format(self.parser.parse("Tuesday", "dddd"), "dddd") == "Tuesday"
+ arw_formatter.format(self.parser.parse("Wed", "ddd"), "ddd") == "Wed"
+ arw_formatter.format(
+ self.parser.parse("Wednesday", "dddd"), "dddd"
+ ) == "Wednesday"
+ arw_formatter.format(self.parser.parse("Thu", "ddd"), "ddd") == "Thu"
+ arw_formatter.format(
+ self.parser.parse("Thursday", "dddd"), "dddd"
+ ) == "Thursday"
+ arw_formatter.format(self.parser.parse("Fri", "ddd"), "ddd") == "Fri"
+ arw_formatter.format(self.parser.parse("Friday", "dddd"), "dddd") == "Friday"
+ arw_formatter.format(self.parser.parse("Sat", "ddd"), "ddd") == "Sat"
+ arw_formatter.format(
+ self.parser.parse("Saturday", "dddd"), "dddd"
+ ) == "Saturday"
+ arw_formatter.format(self.parser.parse("Sun", "ddd"), "ddd") == "Sun"
+ arw_formatter.format(self.parser.parse("Sunday", "dddd"), "dddd") == "Sunday"
+
def test_parse_HH_24(self):
assert self.parser.parse(
"2019-10-30T24:00:00", "YYYY-MM-DDTHH:mm:ss"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/tests/test_util.py new/arrow-0.15.8/tests/test_util.py
--- old/arrow-0.15.7/tests/test_util.py 2020-06-16 00:06:45.000000000 +0200
+++ new/arrow-0.15.8/tests/test_util.py 2020-07-20 06:56:36.000000000 +0200
@@ -8,6 +8,35 @@
class TestUtil:
+ def test_next_weekday(self):
+ # Get first Monday after epoch
+ assert util.next_weekday(datetime(1970, 1, 1), 0) == datetime(1970, 1, 5)
+
+ # Get first Tuesday after epoch
+ assert util.next_weekday(datetime(1970, 1, 1), 1) == datetime(1970, 1, 6)
+
+ # Get first Wednesday after epoch
+ assert util.next_weekday(datetime(1970, 1, 1), 2) == datetime(1970, 1, 7)
+
+ # Get first Thursday after epoch
+ assert util.next_weekday(datetime(1970, 1, 1), 3) == datetime(1970, 1, 1)
+
+ # Get first Friday after epoch
+ assert util.next_weekday(datetime(1970, 1, 1), 4) == datetime(1970, 1, 2)
+
+ # Get first Saturday after epoch
+ assert util.next_weekday(datetime(1970, 1, 1), 5) == datetime(1970, 1, 3)
+
+ # Get first Sunday after epoch
+ assert util.next_weekday(datetime(1970, 1, 1), 6) == datetime(1970, 1, 4)
+
+ # Weekdays are 0-indexed
+ with pytest.raises(ValueError):
+ util.next_weekday(datetime(1970, 1, 1), 7)
+
+ with pytest.raises(ValueError):
+ util.next_weekday(datetime(1970, 1, 1), -1)
+
def test_total_seconds(self):
td = datetime(2019, 1, 1) - datetime(2018, 1, 1)
assert util.total_seconds(td) == td.total_seconds()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/arrow-0.15.7/tox.ini new/arrow-0.15.8/tox.ini
--- old/arrow-0.15.7/tox.ini 2020-06-09 22:27:16.000000000 +0200
+++ new/arrow-0.15.8/tox.ini 2020-07-20 06:56:36.000000000 +0200
@@ -43,7 +43,7 @@
# Configure settings for pytest, isort, and flake8
[pytest]
-addopts = -v --cov-branch --cov=arrow tests --cov-fail-under=100 --cov-report=term-missing
+addopts = -v --cov-branch --cov=arrow tests --cov-fail-under=100 --cov-report=term-missing --cov-report=xml
[isort]
line_length = 88
1
0
Hello community,
here is the log from the commit of package python-readthedocs-sphinx-ext for openSUSE:Factory checked in at 2020-08-01 12:30:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-readthedocs-sphinx-ext (Old)
and /work/SRC/openSUSE:Factory/.python-readthedocs-sphinx-ext.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-readthedocs-sphinx-ext"
Sat Aug 1 12:30:46 2020 rev:7 rq:822787 version:2.1.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-readthedocs-sphinx-ext/python-readthedocs-sphinx-ext.changes 2020-07-15 12:11:20.816552484 +0200
+++ /work/SRC/openSUSE:Factory/.python-readthedocs-sphinx-ext.new.3592/python-readthedocs-sphinx-ext.changes 2020-08-01 12:30:48.998436510 +0200
@@ -1,0 +2,7 @@
+Sat Jul 25 15:14:03 UTC 2020 - Arun Persaud <arun(a)gmx.de>
+
+- update to version 2.1.1:
+ * New line at the end of the file
+ * Put the JS embed back into script_files (#92)
+
+-------------------------------------------------------------------
Old:
----
readthedocs-sphinx-ext-2.1.0.tar.gz
New:
----
readthedocs-sphinx-ext-2.1.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-readthedocs-sphinx-ext.spec ++++++
--- /var/tmp/diff_new_pack.S0KNmr/_old 2020-08-01 12:30:49.686437155 +0200
+++ /var/tmp/diff_new_pack.S0KNmr/_new 2020-08-01 12:30:49.690437158 +0200
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-readthedocs-sphinx-ext
-Version: 2.1.0
+Version: 2.1.1
Release: 0
Summary: Sphinx extension for Read the Docs overrides
License: MIT
++++++ readthedocs-sphinx-ext-2.1.0.tar.gz -> readthedocs-sphinx-ext-2.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readthedocs-sphinx-ext-2.1.0/PKG-INFO new/readthedocs-sphinx-ext-2.1.1/PKG-INFO
--- old/readthedocs-sphinx-ext-2.1.0/PKG-INFO 2020-07-08 19:50:32.000000000 +0200
+++ new/readthedocs-sphinx-ext-2.1.1/PKG-INFO 2020-07-23 22:20:55.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: readthedocs-sphinx-ext
-Version: 2.1.0
+Version: 2.1.1
Summary: Sphinx extension for Read the Docs overrides
Home-page: http://github.com/readthedocs/readthedocs-sphinx-ext
Author: Read the Docs, Inc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readthedocs-sphinx-ext-2.1.0/readthedocs_ext/_templates/readthedocs-insert.html.tmpl new/readthedocs-sphinx-ext-2.1.1/readthedocs_ext/_templates/readthedocs-insert.html.tmpl
--- old/readthedocs-sphinx-ext-2.1.0/readthedocs_ext/_templates/readthedocs-insert.html.tmpl 2020-07-08 19:22:18.000000000 +0200
+++ new/readthedocs-sphinx-ext-2.1.1/readthedocs_ext/_templates/readthedocs-insert.html.tmpl 2020-07-23 22:18:06.000000000 +0200
@@ -29,6 +29,5 @@
</script>
<script type="text/javascript" src="{{ rtd_analytics_url }}" async="async"></script>
-<script type="text/javascript" src="{{ rtd_js_url }}" async="async"></script>
<!-- end RTD <extrahead> -->
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readthedocs-sphinx-ext-2.1.0/readthedocs_ext/readthedocs.py new/readthedocs-sphinx-ext-2.1.1/readthedocs_ext/readthedocs.py
--- old/readthedocs-sphinx-ext-2.1.0/readthedocs_ext/readthedocs.py 2020-07-08 19:29:57.000000000 +0200
+++ new/readthedocs-sphinx-ext-2.1.1/readthedocs_ext/readthedocs.py 2020-07-23 22:18:06.000000000 +0200
@@ -111,6 +111,23 @@
else:
app.add_css_file(theme_css)
+ # Add the Read the Docs embed
+ # This *must* come after Sphinx has loaded jQuery as it relies on it.
+ # Unless this script is modified to not rely on jQuery (a good goal),
+ # it can't just be put into the extrahead
+ # in case a theme outputs scripts at the end of the body
+ js_file = '{}javascript/readthedocs-doc-embed.js'.format(STATIC_URL)
+ if all((
+ app.builder.name in ONLINE_BUILDERS,
+ hasattr(app.builder, 'script_files'),
+ js_file not in app.builder.script_files,
+ )):
+ if sphinx.version_info < (1, 8):
+ app.builder.script_files.append(js_file)
+ else:
+ kwargs = {'async': 'async'} # Workaround reserved word in Py3.7
+ app.add_js_file(js_file, **kwargs)
+
# This is monkey patched on the signal because we can't know what the user
# has done with their `app.builder.templates` before now.
@@ -157,7 +174,6 @@
if ctx.get('proxied_api_host'):
ctx['rtd_data']['proxied_api_host'] = ctx['proxied_api_host']
ctx['rtd_css_url'] = '{}css/readthedocs-doc-embed.css'.format(STATIC_URL)
- ctx['rtd_js_url'] = '{}javascript/readthedocs-doc-embed.js'.format(STATIC_URL)
ctx['rtd_analytics_url'] = '{}javascript/readthedocs-analytics.js'.format(STATIC_URL)
source = os.path.join(
os.path.abspath(os.path.dirname(__file__)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readthedocs-sphinx-ext-2.1.0/readthedocs_sphinx_ext.egg-info/PKG-INFO new/readthedocs-sphinx-ext-2.1.1/readthedocs_sphinx_ext.egg-info/PKG-INFO
--- old/readthedocs-sphinx-ext-2.1.0/readthedocs_sphinx_ext.egg-info/PKG-INFO 2020-07-08 19:50:32.000000000 +0200
+++ new/readthedocs-sphinx-ext-2.1.1/readthedocs_sphinx_ext.egg-info/PKG-INFO 2020-07-23 22:20:55.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: readthedocs-sphinx-ext
-Version: 2.1.0
+Version: 2.1.1
Summary: Sphinx extension for Read the Docs overrides
Home-page: http://github.com/readthedocs/readthedocs-sphinx-ext
Author: Read the Docs, Inc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readthedocs-sphinx-ext-2.1.0/setup.py new/readthedocs-sphinx-ext-2.1.1/setup.py
--- old/readthedocs-sphinx-ext-2.1.0/setup.py 2020-07-08 19:29:57.000000000 +0200
+++ new/readthedocs-sphinx-ext-2.1.1/setup.py 2020-07-23 22:18:30.000000000 +0200
@@ -4,7 +4,7 @@
setup(
name='readthedocs-sphinx-ext',
- version='2.1.0',
+ version='2.1.1',
author='Read the Docs, Inc',
author_email='dev(a)readthedocs.com',
url='http://github.com/readthedocs/readthedocs-sphinx-ext',
1
0
Hello community,
here is the log from the commit of package python-ipykernel for openSUSE:Factory checked in at 2020-08-01 12:30:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ipykernel (Old)
and /work/SRC/openSUSE:Factory/.python-ipykernel.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ipykernel"
Sat Aug 1 12:30:42 2020 rev:10 rq:822785 version:5.3.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ipykernel/python-ipykernel.changes 2020-07-15 12:11:32.732564959 +0200
+++ /work/SRC/openSUSE:Factory/.python-ipykernel.new.3592/python-ipykernel.changes 2020-08-01 12:30:48.054435627 +0200
@@ -1,0 +2,13 @@
+Sat Jul 25 15:31:23 UTC 2020 - Arun Persaud <arun(a)gmx.de>
+
+- update to version 5.3.4:
+ * Only run Qt eventloop in the shell stream. (:ghpull:`531`)
+
+-------------------------------------------------------------------
+Sat Jul 18 18:10:45 UTC 2020 - Arun Persaud <arun(a)gmx.de>
+
+- update to version 5.3.3:
+ * Fix QSocketNotifier in the Qt event loop not being disabled for
+ the control channel. (:ghpull:`525`)
+
+-------------------------------------------------------------------
Old:
----
ipykernel-5.3.2.tar.gz
New:
----
ipykernel-5.3.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-ipykernel.spec ++++++
--- /var/tmp/diff_new_pack.TyRDeC/_old 2020-08-01 12:30:48.682436215 +0200
+++ /var/tmp/diff_new_pack.TyRDeC/_new 2020-08-01 12:30:48.690436222 +0200
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-ipykernel
-Version: 5.3.2
+Version: 5.3.4
Release: 0
Summary: IPython Kernel for Jupyter
License: BSD-3-Clause
++++++ ipykernel-5.3.2.tar.gz -> ipykernel-5.3.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.3.2/PKG-INFO new/ipykernel-5.3.4/PKG-INFO
--- old/ipykernel-5.3.2/PKG-INFO 2020-07-08 13:16:29.000000000 +0200
+++ new/ipykernel-5.3.4/PKG-INFO 2020-07-22 21:14:02.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: ipykernel
-Version: 5.3.2
+Version: 5.3.4
Summary: IPython Kernel for Jupyter
Home-page: https://ipython.org
Author: IPython Development Team
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.3.2/docs/changelog.rst new/ipykernel-5.3.4/docs/changelog.rst
--- old/ipykernel-5.3.2/docs/changelog.rst 2020-07-08 13:13:51.000000000 +0200
+++ new/ipykernel-5.3.4/docs/changelog.rst 2020-07-22 21:12:58.000000000 +0200
@@ -4,6 +4,14 @@
5.3
---
+5.3.4
+*****
+- Only run Qt eventloop in the shell stream. (:ghpull:`531`)
+
+5.3.3
+*****
+- Fix QSocketNotifier in the Qt event loop not being disabled for the control channel. (:ghpull:`525`)
+
5.3.2
*****
- Restore timer based event loop as a Windows-compatible fallback. (:ghpull:`523`)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.3.2/ipykernel/_version.py new/ipykernel-5.3.4/ipykernel/_version.py
--- old/ipykernel-5.3.2/ipykernel/_version.py 2020-07-08 13:14:20.000000000 +0200
+++ new/ipykernel-5.3.4/ipykernel/_version.py 2020-07-22 21:13:11.000000000 +0200
@@ -1,4 +1,4 @@
-version_info = (5, 3, 2)
+version_info = (5, 3, 4)
__version__ = '.'.join(map(str, version_info[:3]))
# pep440 is annoying, beta/alpha/rc should _not_ have dots or pip/setuptools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.3.2/ipykernel/eventloops.py new/ipykernel-5.3.4/ipykernel/eventloops.py
--- old/ipykernel-5.3.2/ipykernel/eventloops.py 2020-07-08 13:12:59.000000000 +0200
+++ new/ipykernel-5.3.4/ipykernel/eventloops.py 2020-07-22 21:11:55.000000000 +0200
@@ -116,8 +116,10 @@
kernel.app = get_app_qt4([" "])
kernel.app.setQuitOnLastWindowClosed(False)
- for s in kernel.shell_streams:
- _notify_stream_qt(kernel, s)
+ # Only register the eventloop for the shell stream because doing
+ # it for the control stream is generating a bunch of unnecessary
+ # warnings on Windows.
+ _notify_stream_qt(kernel, kernel.shell_streams[0])
_loop_qt(kernel.app)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.3.2/ipykernel.egg-info/PKG-INFO new/ipykernel-5.3.4/ipykernel.egg-info/PKG-INFO
--- old/ipykernel-5.3.2/ipykernel.egg-info/PKG-INFO 2020-07-08 13:16:29.000000000 +0200
+++ new/ipykernel-5.3.4/ipykernel.egg-info/PKG-INFO 2020-07-22 21:14:02.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: ipykernel
-Version: 5.3.2
+Version: 5.3.4
Summary: IPython Kernel for Jupyter
Home-page: https://ipython.org
Author: IPython Development Team
1
0
Hello community,
here is the log from the commit of package python-tempora for openSUSE:Factory checked in at 2020-08-01 12:30:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-tempora (Old)
and /work/SRC/openSUSE:Factory/.python-tempora.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-tempora"
Sat Aug 1 12:30:40 2020 rev:8 rq:822660 version:4.0.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-tempora/python-tempora.changes 2020-04-19 21:49:12.948050193 +0200
+++ /work/SRC/openSUSE:Factory/.python-tempora.new.3592/python-tempora.changes 2020-08-01 12:30:46.282433968 +0200
@@ -1,0 +2,13 @@
+Fri Jul 24 12:28:31 UTC 2020 - Marketa Calabkova <mcalabkova(a)suse.com>
+
+- update to 4.0.0
+ * Removed ``strptime`` function in favor of
+ `datetime.datetime.strptime`. If passing
+ a ``tzinfo`` parameter, instead invoke `.replace(tzinfo=...)`
+ on the result.
+ * Deprecated ``divide_timedelta`` and ``divide_timedelta_float``
+ now that Python supports this functionality natively.
+ * Deprecated ``Parser`` class. The
+ 'dateutil.parser' provides more sophistication.
+
+-------------------------------------------------------------------
Old:
----
tempora-3.0.0.tar.gz
New:
----
tempora-4.0.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-tempora.spec ++++++
--- /var/tmp/diff_new_pack.KTgUtp/_old 2020-08-01 12:30:46.918434563 +0200
+++ /var/tmp/diff_new_pack.KTgUtp/_new 2020-08-01 12:30:46.922434567 +0200
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-tempora
-Version: 3.0.0
+Version: 4.0.0
Release: 0
Summary: Objects and routines pertaining to date and time (tempora)
License: MIT
@@ -30,15 +30,13 @@
BuildRequires: %{python_module pytest-freezegun}
BuildRequires: %{python_module pytest}
BuildRequires: %{python_module pytz}
-BuildRequires: %{python_module setuptools_scm}
+BuildRequires: %{python_module setuptools_scm >= 3.4.1}
BuildRequires: %{python_module setuptools}
-BuildRequires: %{python_module six}
+BuildRequires: %{python_module toml}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-jaraco.functools >= 1.20
Requires: python-pytz
-Requires: python-setuptools
-Requires: python-six
BuildArch: noarch
Requires(post): update-alternatives
Requires(postun): update-alternatives
@@ -54,6 +52,7 @@
%prep
%setup -q -n tempora-%{version}
+sed -i '/--mypy/d' pytest.ini
%build
%python_build
++++++ tempora-3.0.0.tar.gz -> tempora-4.0.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/.travis.yml new/tempora-4.0.0/.travis.yml
--- old/tempora-3.0.0/.travis.yml 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/.travis.yml 2020-07-18 18:05:11.000000000 +0200
@@ -1,4 +1,4 @@
-dist: xenial
+dist: bionic
language: python
python:
@@ -8,10 +8,11 @@
cache: pip
install:
-- pip install tox tox-venv
+# ensure virtualenv is upgraded to avoid issues like jaraco/path#188
+- pip install -U --upgrade-strategy=eager tox
before_script:
- # Disable IPv6. Ref travis-ci/travis-ci#8361
+ # Enable IPv6. Ref travis-ci/travis-ci#8361
- if [ "${TRAVIS_OS_NAME}" == "linux" ]; then
sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6';
fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/CHANGES.rst new/tempora-4.0.0/CHANGES.rst
--- old/tempora-3.0.0/CHANGES.rst 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/CHANGES.rst 2020-07-18 18:05:11.000000000 +0200
@@ -1,3 +1,16 @@
+v4.0.0
+======
+
+- Removed ``strptime`` function in favor of
+ `datetime.datetime.strptime <https://docs.python.org/3/library/datetime.html#datetime.datetime.strptime>`_. If passing
+ a ``tzinfo`` parameter, instead invoke `.replace(tzinfo=...)`
+ on the result.
+- Deprecated ``divide_timedelta`` and ``divide_timedelta_float``
+ now that Python supports this functionality natively.
+- Deprecated ``Parser`` class. The
+ `dateutil.parser <https://dateutil.readthedocs.io/en/stable/parser.html>`_
+ provides more sophistication.
+
v3.0.0
======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/LICENSE new/tempora-4.0.0/LICENSE
--- old/tempora-3.0.0/LICENSE 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/LICENSE 2020-07-18 18:05:11.000000000 +0200
@@ -1,7 +1,19 @@
Copyright Jason R. Coombs
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/PKG-INFO new/tempora-4.0.0/PKG-INFO
--- old/tempora-3.0.0/PKG-INFO 2020-03-20 23:03:33.184217700 +0100
+++ new/tempora-4.0.0/PKG-INFO 2020-07-18 18:05:31.575982800 +0200
@@ -1,15 +1,18 @@
Metadata-Version: 2.1
Name: tempora
-Version: 3.0.0
+Version: 4.0.0
Summary: Objects and routines pertaining to date and time (tempora)
Home-page: https://github.com/jaraco/tempora
Author: Jason R. Coombs
Author-email: jaraco(a)jaraco.com
License: UNKNOWN
Description: .. image:: https://img.shields.io/pypi/v/tempora.svg
- :target: https://pypi.org/project/tempora
+ :target: `PyPI link`_
.. image:: https://img.shields.io/pypi/pyversions/tempora.svg
+ :target: `PyPI link`_
+
+ .. _PyPI link: https://pypi.org/project/tempora
.. image:: https://dev.azure.com/jaraco/tempora/_apis/build/status/jaraco.tempora?bran…
:target: https://dev.azure.com/jaraco/tempora/_build/latest?definitionId=1&branchNam…
@@ -43,6 +46,7 @@
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.6
Provides-Extra: testing
Provides-Extra: docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/README.rst new/tempora-4.0.0/README.rst
--- old/tempora-3.0.0/README.rst 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/README.rst 2020-07-18 18:05:11.000000000 +0200
@@ -1,7 +1,10 @@
.. image:: https://img.shields.io/pypi/v/tempora.svg
- :target: https://pypi.org/project/tempora
+ :target: `PyPI link`_
.. image:: https://img.shields.io/pypi/pyversions/tempora.svg
+ :target: `PyPI link`_
+
+.. _PyPI link: https://pypi.org/project/tempora
.. image:: https://dev.azure.com/jaraco/tempora/_apis/build/status/jaraco.tempora?bran…
:target: https://dev.azure.com/jaraco/tempora/_build/latest?definitionId=1&branchNam…
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/appveyor.yml new/tempora-4.0.0/appveyor.yml
--- old/tempora-3.0.0/appveyor.yml 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/appveyor.yml 2020-07-18 18:05:11.000000000 +0200
@@ -18,7 +18,7 @@
- '%LOCALAPPDATA%\pip\Cache'
test_script:
- - "python -m pip install -U tox tox-venv virtualenv"
+ - "python -m pip install -U tox virtualenv"
- "tox"
version: '{build}'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/azure-pipelines.yml new/tempora-4.0.0/azure-pipelines.yml
--- old/tempora-3.0.0/azure-pipelines.yml 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/azure-pipelines.yml 2020-07-18 18:05:11.000000000 +0200
@@ -1,5 +1,5 @@
# Create the project in Azure with:
-# az project create --name $name --organization https://dev.azure.com/$org/ --visibility public
+# az devops project create --name $name --organization https://dev.azure.com/$org/ --visibility public
# then configure the pipelines (through web UI)
trigger:
@@ -11,10 +11,12 @@
- '*'
pool:
- vmimage: 'Ubuntu-18.04'
+ vmImage: $(pool_vm_image)
variables:
- group: Azure secrets
+- name: pool_vm_image
+ value: Ubuntu-18.04
stages:
- stage: Test
@@ -23,17 +25,38 @@
- job: 'Test'
strategy:
matrix:
- Python36:
+ Bionic Python 3.6:
python.version: '3.6'
- Python38:
+ Bionic Python 3.8:
python.version: '3.8'
+ Windows Python 3.8:
+ python.version: '3.8'
+ pool_vm_image: vs2017-win2016
+ Windows Python Prerelease:
+ python.version: '3.9'
+ pool_vm_image: vs2017-win2016
+ MacOS:
+ python.version: '3.8'
+ pool_vm_image: macos-10.15
+
maxParallel: 4
steps:
+ - task: NuGetToolInstaller@1
+ displayName: 'Install NuGet'
+ condition: eq(variables['pool_vm_image'], 'vs2017-win2016')
+
+ - powershell: |
+ nuget install python -Prerelease -OutputDirectory "$(Build.BinariesDirectory)" -ExcludeVersion -NonInteractive
+ Write-Host "##vso[task.prependpath]$(Build.BinariesDirectory)\python\tools"
+ Write-Host "##vso[task.prependpath]$(Build.BinariesDirectory)\python\tools\Scripts"
+ condition: and(succeeded(), and(eq(variables['python.version'], '3.9'), eq(variables['pool_vm_image'], 'vs2017-win2016')))
+
- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
architecture: 'x64'
+ condition: and(succeeded(), ne(variables['python.version'], '3.9'))
- script: python -m pip install tox
displayName: 'Install tox'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/docs/refresh.svg new/tempora-4.0.0/docs/refresh.svg
--- old/tempora-3.0.0/docs/refresh.svg 1970-01-01 01:00:00.000000000 +0100
+++ new/tempora-4.0.0/docs/refresh.svg 2020-07-18 18:05:11.000000000 +0200
@@ -0,0 +1,193 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="terminal" baseProfile="full" viewBox="0 0 1176 852" width="1176" version="1.1">
+ <defs>
+ <termtosvg:template_settings xmlns:termtosvg="https://github.com/nbedos/termtosvg">
+ <termtosvg:screen_geometry columns="147" rows="50"/>
+ <termtosvg:animation type="css"/>
+ </termtosvg:template_settings>
+ <style type="text/css" id="generated-style"><![CDATA[#screen {
+ font-family: 'DejaVu Sans Mono', monospace;
+ font-style: normal;
+ font-size: 14px;
+ }
+
+ text {
+ dominant-baseline: text-before-edge;
+ white-space: pre;
+ }
+
+ :root {
+ --animation-duration: 31147ms;
+ }
+
+ @keyframes roll {
+ 0.000%{transform:translateY(0px)}
+0.006%{transform:translateY(-884px)}
+0.022%{transform:translateY(-1768px)}
+0.125%{transform:translateY(-2652px)}
+1.788%{transform:translateY(-3536px)}
+1.930%{transform:translateY(-4420px)}
+2.257%{transform:translateY(-5304px)}
+2.472%{transform:translateY(-6188px)}
+3.024%{transform:translateY(-7072px)}
+3.451%{transform:translateY(-7956px)}
+3.740%{transform:translateY(-8840px)}
+4.293%{transform:translateY(-9724px)}
+4.389%{transform:translateY(-10608px)}
+4.649%{transform:translateY(-11492px)}
+5.108%{transform:translateY(-12376px)}
+5.593%{transform:translateY(-13260px)}
+6.482%{transform:translateY(-14144px)}
+6.967%{transform:translateY(-15028px)}
+7.506%{transform:translateY(-15912px)}
+7.677%{transform:translateY(-16796px)}
+8.110%{transform:translateY(-17680px)}
+8.402%{transform:translateY(-18564px)}
+8.646%{transform:translateY(-19448px)}
+8.829%{transform:translateY(-20332px)}
+9.086%{transform:translateY(-21216px)}
+9.664%{transform:translateY(-22100px)}
+10.425%{transform:translateY(-22984px)}
+10.855%{transform:translateY(-23868px)}
+11.256%{transform:translateY(-24752px)}
+11.443%{transform:translateY(-25636px)}
+11.870%{transform:translateY(-26520px)}
+12.004%{transform:translateY(-27404px)}
+12.447%{transform:translateY(-28288px)}
+12.740%{transform:translateY(-29172px)}
+13.520%{transform:translateY(-30056px)}
+13.549%{transform:translateY(-30940px)}
+16.323%{transform:translateY(-31824px)}
+16.464%{transform:translateY(-32708px)}
+16.486%{transform:translateY(-33592px)}
+16.493%{transform:translateY(-34476px)}
+16.506%{transform:translateY(-35360px)}
+16.551%{transform:translateY(-36244px)}
+19.125%{transform:translateY(-37128px)}
+19.341%{transform:translateY(-38012px)}
+19.594%{transform:translateY(-38896px)}
+19.809%{transform:translateY(-39780px)}
+20.098%{transform:translateY(-40664px)}
+20.349%{transform:translateY(-41548px)}
+20.711%{transform:translateY(-42432px)}
+21.045%{transform:translateY(-43316px)}
+21.479%{transform:translateY(-44200px)}
+21.983%{transform:translateY(-45084px)}
+22.484%{transform:translateY(-45968px)}
+22.914%{transform:translateY(-46852px)}
+24.725%{transform:translateY(-47736px)}
+25.370%{transform:translateY(-48620px)}
+25.588%{transform:translateY(-49504px)}
+26.019%{transform:translateY(-50388px)}
+26.314%{transform:translateY(-51272px)}
+26.799%{transform:translateY(-52156px)}
+27.845%{transform:translateY(-53040px)}
+28.166%{transform:translateY(-53924px)}
+28.417%{transform:translateY(-54808px)}
+28.892%{transform:translateY(-55692px)}
+29.695%{transform:translateY(-56576px)}
+29.730%{transform:translateY(-57460px)}
+29.810%{transform:translateY(-58344px)}
+29.820%{transform:translateY(-59228px)}
+29.833%{transform:translateY(-60112px)}
+29.865%{transform:translateY(-60996px)}
+40.431%{transform:translateY(-61880px)}
+46.704%{transform:translateY(-62764px)}
+46.894%{transform:translateY(-63648px)}
+46.955%{transform:translateY(-64532px)}
+46.984%{transform:translateY(-65416px)}
+47.009%{transform:translateY(-66300px)}
+47.070%{transform:translateY(-67184px)}
+51.164%{transform:translateY(-68068px)}
+51.411%{transform:translateY(-68952px)}
+51.703%{transform:translateY(-69836px)}
+51.886%{transform:translateY(-70720px)}
+52.246%{transform:translateY(-71604px)}
+52.721%{transform:translateY(-72488px)}
+53.000%{transform:translateY(-73372px)}
+53.443%{transform:translateY(-74256px)}
+53.658%{transform:translateY(-75140px)}
+53.867%{transform:translateY(-76024px)}
+54.416%{transform:translateY(-76908px)}
+55.241%{transform:translateY(-77792px)}
+55.822%{transform:translateY(-78676px)}
+56.343%{transform:translateY(-79560px)}
+56.574%{transform:translateY(-80444px)}
+57.164%{transform:translateY(-81328px)}
+57.405%{transform:translateY(-82212px)}
+57.733%{transform:translateY(-83096px)}
+57.874%{transform:translateY(-83980px)}
+58.173%{transform:translateY(-84864px)}
+58.314%{transform:translateY(-85748px)}
+59.871%{transform:translateY(-86632px)}
+60.189%{transform:translateY(-87516px)}
+60.702%{transform:translateY(-88400px)}
+60.911%{transform:translateY(-89284px)}
+61.203%{transform:translateY(-90168px)}
+61.495%{transform:translateY(-91052px)}
+61.707%{transform:translateY(-91936px)}
+62.070%{transform:translateY(-92820px)}
+62.590%{transform:translateY(-93704px)}
+62.632%{transform:translateY(-94588px)}
+63.759%{transform:translateY(-95472px)}
+63.852%{transform:translateY(-96356px)}
+63.884%{transform:translateY(-97240px)}
+63.974%{transform:translateY(-98124px)}
+64.006%{transform:translateY(-99008px)}
+64.080%{transform:translateY(-99892px)}
+72.331%{transform:translateY(-100776px)}
+72.761%{transform:translateY(-101660px)}
+73.012%{transform:translateY(-102544px)}
+73.346%{transform:translateY(-103428px)}
+73.696%{transform:translateY(-104312px)}
+75.218%{transform:translateY(-105196px)}
+75.651%{transform:translateY(-106080px)}
+75.901%{transform:translateY(-106964px)}
+79.125%{transform:translateY(-107848px)}
+79.163%{transform:translateY(-108732px)}
+81.424%{transform:translateY(-109616px)}
+81.456%{transform:translateY(-110500px)}
+81.957%{transform:translateY(-111384px)}
+89.325%{transform:translateY(-112268px)}
+89.553%{transform:translateY(-113152px)}
+89.591%{transform:translateY(-114036px)}
+89.662%{transform:translateY(-114920px)}
+96.741%{transform:translateY(-115804px)}
+96.789%{transform:translateY(-116688px)}
+100.000%{transform:translateY(-116688px)}
+ }
+
+ #screen_view {
+ animation-duration: 31147ms;
+ animation-iteration-count:infinite;
+ animation-name:roll;
+ animation-timing-function: steps(1,end);
+ animation-fill-mode: forwards;
+ }
+ ]]></style>
+ <style type="text/css" id="user-style">
+ /* The colors defined below are the default 16 colors used for rendering text of the terminal. Adjust
+ them as needed.
+ PowerShell colors based on https://en.wikipedia.org/wiki/ANSI_escape_code#Colors */
+ .foreground {fill: #cccccc;}
+ .background {fill: #0c0c0c;}
+ .color0 {fill: #0c0c0c;}
+ .color1 {fill: #c50f1f;}
+ .color2 {fill: #13a10e;}
+ .color3 {fill: #c19c00;}
+ .color4 {fill: #0037da;}
+ .color5 {fill: #881798;}
+ .color6 {fill: #3a96dd;}
+ .color7 {fill: #cccccc;}
+ .color8 {fill: #767676;}
+ .color9 {fill: #e74856;}
+ .color10 {fill: #16c60c;}
+ .color11 {fill: #f9f1a5;}
+ .color12 {fill: #3b78ff;}
+ .color13 {fill: #b4009e;}
+ .color14 {fill: #61d6d6;}
+ .color15 {fill: #f2f2f2;}
+ </style>
+ </defs>
+ <svg id="screen" width="1176" height="850" viewBox="0 0 1176 850" preserveAspectRatio="xMidYMin slice">
+ <rect class="background" height="100%" width="100%" x="0" y="0"/><defs><g id="g1"><text x="0" textLength="8" class="background"> </text></g><g id="g2"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="8" class="foreground"> </text><text x="112" textLength="8" class="background"> </text><text x="120" textLength="1056" class="foreground"> </text></g><g id="g3"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="16" class="foreground"> g</text><text x="120" textLength="8" class="background">i</text><text x="128" textLength="120" font-weight="bold" class="color8">t diff ...FETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g4"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="24" class="foreground"> gi</text><text x="128" textLength="8" class="background">t</text><text x="136" textLength="112" font-weight="bold" class="color8"> diff ...FETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g5"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="32" class="foreground"> git</text><text x="136" textLength="8" class="background"> </text><text x="144" textLength="104" font-weight="bold" class="color8">diff ...FETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g6"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="40" class="foreground"> git </text><text x="144" textLength="8" class="background">d</text><text x="152" textLength="96" font-weight="bold" class="color8">iff ...FETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g7"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="48" class="foreground"> git f</text><text x="152" textLength="8" class="background">e</text><text x="160" textLength="192" font-weight="bold" class="color8">tch gh://jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g8"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="56" class="foreground"> git fe</text><text x="160" textLength="8" class="background">t</text><text x="168" textLength="184" font-weight="bold" class="color8">ch gh://jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g9"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="64" class="foreground"> git fet</text><text x="168" textLength="8" class="background">c</text><text x="176" textLength="176" font-weight="bold" class="color8">h gh://jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g10"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="72" class="foreground"> git fetc</text><text x="176" textLength="8" class="background">h</text><text x="184" textLength="168" font-weight="bold" class="color8"> gh://jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g11"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="80" class="foreground"> git fetch</text><text x="184" textLength="8" class="background"> </text><text x="192" textLength="160" font-weight="bold" class="color8">gh://jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g12"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="88" class="foreground"> git fetch </text><text x="192" textLength="8" class="background">g</text><text x="200" textLength="152" font-weight="bold" class="color8">h://jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g13"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="96" class="foreground"> git fetch g</text><text x="200" textLength="8" class="background">h</text><text x="208" textLength="144" font-weight="bold" class="color8">://jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g14"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="104" class="foreground"> git fetch gh</text><text x="208" textLength="8" class="background">:</text><text x="216" textLength="136" font-weight="bold" class="color8">//jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g15"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="112" class="foreground"> git fetch gh:</text><text x="216" textLength="8" class="background">/</text><text x="224" textLength="128" font-weight="bold" class="color8">/jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g16"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="120" class="foreground"> git fetch gh:/</text><text x="224" textLength="8" class="background">/</text><text x="232" textLength="120" font-weight="bold" class="color8">jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g17"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="128" class="foreground"> git fetch gh://</text><text x="232" textLength="8" class="background">j</text><text x="240" textLength="112" font-weight="bold" class="color8">araco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g18"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="136" class="foreground"> git fetch gh://j</text><text x="240" textLength="8" class="background">a</text><text x="248" textLength="104" font-weight="bold" class="color8">raco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g19"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="144" class="foreground"> git fetch gh://ja</text><text x="248" textLength="8" class="background">r</text><text x="256" textLength="96" font-weight="bold" class="color8">aco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g20"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="152" class="foreground"> git fetch gh://jar</text><text x="256" textLength="8" class="background">a</text><text x="264" textLength="88" font-weight="bold" class="color8">co/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g21"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="160" class="foreground"> git fetch gh://jara</text><text x="264" textLength="8" class="background">c</text><text x="272" textLength="80" font-weight="bold" class="color8">o/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g22"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="168" class="foreground"> git fetch gh://jarac</text><text x="272" textLength="8" class="background">o</text><text x="280" textLength="72" font-weight="bold" class="color8">/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g23"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="176" class="foreground"> git fetch gh://jaraco</text><text x="280" textLength="8" class="background">/</text><text x="288" textLength="64" font-weight="bold" class="color8">skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g24"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="184" class="foreground"> git fetch gh://jaraco/</text><text x="288" textLength="8" class="background">s</text><text x="296" textLength="56" font-weight="bold" class="color8">keleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g25"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="192" class="foreground"> git fetch gh://jaraco/s</text><text x="296" textLength="8" class="background">k</text><text x="304" textLength="48" font-weight="bold" class="color8">eleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g26"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="200" class="foreground"> git fetch gh://jaraco/sk</text><text x="304" textLength="8" class="background">e</text><text x="312" textLength="40" font-weight="bold" class="color8">leton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g27"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="208" class="foreground"> git fetch gh://jaraco/ske</text><text x="312" textLength="8" class="background">l</text><text x="320" textLength="32" font-weight="bold" class="color8">eton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g28"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="216" class="foreground"> git fetch gh://jaraco/skel</text><text x="320" textLength="8" class="background">e</text><text x="328" textLength="24" font-weight="bold" class="color8">ton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g29"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="224" class="foreground"> git fetch gh://jaraco/skele</text><text x="328" textLength="8" class="background">t</text><text x="336" textLength="16" font-weight="bold" class="color8">on</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g30"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="232" class="foreground"> git fetch gh://jaraco/skelet</text><text x="336" textLength="8" class="background">o</text><text x="344" textLength="8" font-weight="bold" class="color8">n</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g31"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="240" class="foreground"> git fetch gh://jaraco/skeleto</text><text x="344" textLength="8" class="background">n</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g32"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="248" class="foreground"> git fetch gh://jaraco/skeleton</text><text x="352" textLength="8" class="background"> </text><text x="360" textLength="816" class="foreground"> </text></g><g id="g33"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color11"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="1072" class="foreground"> git fetch gh://jaraco/skeleton </text></g><g id="g34"><text x="0" textLength="8" class="background"> </text><text x="8" textLength="1168" class="foreground"> </text></g><g id="g35"><text x="0" textLength="1176" class="foreground">From https://github.com/jaraco/skeleton </text></g><g id="g36"><text x="0" textLength="360" class="foreground"> * branch HEAD -> FETCH_HEAD</text></g><g id="g37"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="8" class="foreground"> </text><text x="112" textLength="8" class="background"> </text><text x="120" textLength="1056" class="foreground"> </text></g><g id="g38"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="16" class="foreground"> g</text><text x="120" textLength="8" class="background">i</text><text x="128" textLength="224" font-weight="bold" class="color8">t fetch gh://jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g39"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="24" class="foreground"> gi</text><text x="128" textLength="8" class="background">t</text><text x="136" textLength="216" font-weight="bold" class="color8"> fetch gh://jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g40"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="32" class="foreground"> git</text><text x="136" textLength="8" class="background"> </text><text x="144" textLength="208" font-weight="bold" class="color8">fetch gh://jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g41"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="40" class="foreground"> git </text><text x="144" textLength="8" class="background">f</text><text x="152" textLength="200" font-weight="bold" class="color8">etch gh://jaraco/skeleton</text><text x="352" textLength="824" class="foreground"> </text></g><g id="g42"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="48" class="foreground"> git d</text><text x="152" textLength="8" class="background">i</text><text x="160" textLength="88" font-weight="bold" class="color8">ff ...FETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g43"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="56" class="foreground"> git di</text><text x="160" textLength="8" class="background">f</text><text x="168" textLength="80" font-weight="bold" class="color8">f ...FETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g44"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="64" class="foreground"> git dif</text><text x="168" textLength="8" class="background">f</text><text x="176" textLength="72" font-weight="bold" class="color8"> ...FETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g45"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="72" class="foreground"> git diff</text><text x="176" textLength="8" class="background"> </text><text x="184" textLength="64" font-weight="bold" class="color8">...FETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g46"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="80" class="foreground"> git diff </text><text x="184" textLength="8" class="background">.</text><text x="192" textLength="56" font-weight="bold" class="color8">..FETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g47"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="88" class="foreground"> git diff .</text><text x="192" textLength="8" class="background">.</text><text x="200" textLength="48" font-weight="bold" class="color8">.FETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g48"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="96" class="foreground"> git diff ..</text><text x="200" textLength="8" class="background">.</text><text x="208" textLength="40" font-weight="bold" class="color8">FETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g49"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="104" class="foreground"> git diff ...</text><text x="208" textLength="8" class="background">F</text><text x="216" textLength="32" font-weight="bold" class="color8">ETCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g50"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="112" class="foreground"> git diff ...F</text><text x="216" textLength="8" class="background">E</text><text x="224" textLength="24" font-weight="bold" class="color8">TCH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g51"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="120" class="foreground"> git diff ...FE</text><text x="224" textLength="8" class="background">T</text><text x="232" textLength="16" font-weight="bold" class="color8">CH</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g52"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="128" class="foreground"> git diff ...FET</text><text x="232" textLength="8" class="background">C</text><text x="240" textLength="8" font-weight="bold" class="color8">H</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g53"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="136" class="foreground"> git diff ...FETC</text><text x="240" textLength="8" class="background">H</text><text x="248" textLength="928" class="foreground"> </text></g><g id="g54"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="144" class="foreground"> git diff ...FETCH</text><text x="248" textLength="8" class="background"> </text><text x="256" textLength="920" class="foreground"> </text></g><g id="g55"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="152" class="foreground"> git diff ...FETCH_</text><text x="256" textLength="8" class="background"> </text><text x="264" textLength="912" class="foreground"> </text></g><g id="g56"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="160" class="foreground"> git diff ...FETCH_H</text><text x="264" textLength="8" class="background"> </text><text x="272" textLength="904" class="foreground"> </text></g><g id="g57"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="168" class="foreground"> git diff ...FETCH_HE</text><text x="272" textLength="8" class="background"> </text><text x="280" textLength="896" class="foreground"> </text></g><g id="g58"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="176" class="foreground"> git diff ...FETCH_HEA</text><text x="280" textLength="8" class="background"> </text><text x="288" textLength="888" class="foreground"> </text></g><g id="g59"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="184" class="foreground"> git diff ...FETCH_HEAD</text><text x="288" textLength="8" class="background"> </text><text x="296" textLength="880" class="foreground"> </text></g><g id="g60"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="1072" class="foreground"> git diff ...FETCH_HEAD </text></g><g id="g61"><text x="0" textLength="432" font-weight="bold" class="foreground">diff --git a/azure-pipelines.yml b/azure-pipelines.yml</text><text x="432" textLength="744" class="foreground"> </text></g><g id="g62"><text x="0" textLength="232" font-weight="bold" class="foreground">index fd43296..2be55e7 100644</text></g><g id="g63"><text x="0" textLength="200" font-weight="bold" class="foreground">--- a/azure-pipelines.yml</text></g><g id="g64"><text x="0" textLength="200" font-weight="bold" class="foreground">+++ b/azure-pipelines.yml</text></g><g id="g65"><text x="0" textLength="144" class="color6">@@ -29,9 +29,12 @@</text><text x="144" textLength="64" class="foreground"> stages:</text></g><g id="g66"><text x="0" textLength="256" class="foreground"> python.version: '3.6'</text></g><g id="g67"><text x="0" textLength="216" class="foreground"> Bionic Python 3.8:</text></g><g id="g68"><text x="0" textLength="256" class="foreground"> python.version: '3.8'</text></g><g id="g69"><text x="0" textLength="136" class="color1">- Windows:</text></g><g id="g70"><text x="0" textLength="224" class="color2">+ Windows Python 3.8:</text></g><g id="g71"><text x="0" textLength="320" class="foreground"> pool_vm_image: vs2017-win2016</text></g><g id="g72"><text x="0" textLength="280" class="color2">+ Windows Python Prerelease:</text></g><g id="g73"><text x="0" textLength="256" class="color2">+ python.version: '3.9'</text></g><g id="g74"><text x="0" textLength="320" class="color2">+ pool_vm_image: vs2017-win2016</text></g><g id="g75"><text x="0" textLength="120" class="foreground"> MacOS:</text></g><g id="g76"><text x="0" textLength="296" class="foreground"> pool_vm_image: macos-10.15</text></g><g id="g77"><text x="0" textLength="152" class="color6">@@ -39,10 +42,21 @@</text><text x="152" textLength="64" class="foreground"> stages:</text></g><g id="g78"><text x="0" textLength="168" class="foreground"> maxParallel: 4</text></g><g id="g79"><text x="0" textLength="8" class="foreground"> </text></g><g id="g80"><text x="0" textLength="88" class="foreground"> steps:</text></g><g id="g81"><text x="0" textLength="264" class="color2">+ - task: NuGetToolInstaller@1</text></g><g id="g82"><text x="0" textLength="280" class="color2">+ displayName: 'Install NuGet'</text></g><g id="g83"><text x="0" textLength="528" class="color2">+ condition: eq(variables['pool_vm_image'], 'vs2017-win2016')</text></g><g id="g84"><text x="0" textLength="8" class="color2">+</text></g><g id="g85"><text x="0" textLength="160" class="color2">+ - powershell: |</text></g><g id="g86"><text x="0" textLength="408" class="color2">+ nuget install python -Prerelease -OutputDi</text><text x="408" textLength="8" class="background"> </text></g><g id="g87"><text x="0" textLength="952" class="color2">+ nuget install python -Prerelease -OutputDirectory "$(Build.BinariesDirectory)" -ExcludeVersion -NonInteractive</text></g><g id="g88"><text x="0" textLength="672" class="color2">+ Write-Host "##vso[task.prependpath]$(Build.BinariesDirectory)\python\tools"</text></g><g id="g89"><text x="0" textLength="736" class="color2">+ Write-Host "##vso[task.prependpath]$(Build.BinariesDirectory)\python\tools\Scripts"</text></g><g id="g90"><text x="0" textLength="1032" class="color2">+ condition: and(succeeded(), and(eq(variables['python.version'], '3.9'), eq(variables['pool_vm_image'], 'vs2017-win2016')))</text></g><g id="g91"><text x="0" textLength="248" class="foreground"> - task: UsePythonVersion@0</text></g><g id="g92"><text x="0" textLength="112" class="foreground"> inputs:</text></g><g id="g93"><text x="0" textLength="328" class="foreground"> versionSpec: '$(python.version)'</text></g><g id="g94"><text x="0" textLength="224" class="foreground"> architecture: 'x64'</text></g><g id="g95"><text x="0" textLength="592" class="color2">+ condition: and(succeeded(), ne(variables['python.version'], '3.9'))</text></g><g id="g96"><text x="0" textLength="320" class="foreground"> - script: python -m pip install tox</text></g><g id="g97"><text x="0" textLength="264" class="foreground"> displayName: 'Install tox'</text></g><g id="g98"><text x="0" textLength="272" font-weight="bold" class="foreground">diff --git a/setup.cfg b/setup.cfg</text></g><g id="g99"><text x="0" textLength="232" font-weight="bold" class="foreground">index e2dcebb..0cf9549 100644</text></g><g id="g100"><text x="0" textLength="120" font-weight="bold" class="foreground">--- a/setup.cfg</text></g><g id="g101"><text x="0" textLength="120" font-weight="bold" class="foreground">+++ b/setup.cfg</text></g><g id="g102"><text x="0" textLength="136" class="color6">@@ -29,6 +29,8 @@</text><text x="136" textLength="80" class="foreground"> testing =</text></g><g id="g103"><text x="0" textLength="232" class="foreground"> pytest-black >= 0.3.7</text></g><g id="g104"><text x="0" textLength="24" class="foreground"> </text><text x="24" textLength="8" class="background"> </text></g><g id="g105"><text x="0" textLength="144" class="foreground"> pytest-cov</text></g><g id="g106"><text x="0" textLength="152" class="foreground"> pytest-mypy</text></g><g id="g107"><text x="0" textLength="8" class="color2">+</text><text x="8" textLength="56" class="foreground"> </text><text x="64" textLength="264" class="color2"># workaround for python/mypy#8627</text></g><g id="g108"><text x="0" textLength="8" class="foreground">:</text><text x="8" textLength="8" class="background"> </text><text x="16" textLength="1160" class="foreground"> </text></g><g id="g109"><text x="0" textLength="8" class="color2">+</text><text x="8" textLength="56" class="foreground"> </text><text x="64" textLength="312" class="color2">mypy@git+https://github.com/python/mypy</text><text x="376" textLength="800" class="foreground"> </text></g><g id="g110"><text x="0" textLength="120" class="foreground"> # local</text></g><g id="g111"><text x="0" textLength="48" class="background">(END) </text><text x="48" textLength="1128" class="foreground"> </text></g><g id="g112"><text x="0" textLength="1176" class="foreground"> </text></g><g id="g113"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="16" class="foreground"> g</text><text x="120" textLength="8" class="background">i</text><text x="128" textLength="160" font-weight="bold" class="color8">t diff ...FETCH_HEAD</text><text x="288" textLength="888" class="foreground"> </text></g><g id="g114"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="24" class="foreground"> gi</text><text x="128" textLength="8" class="background">t</text><text x="136" textLength="152" font-weight="bold" class="color8"> diff ...FETCH_HEAD</text><text x="288" textLength="888" class="foreground"> </text></g><g id="g115"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="32" class="foreground"> git</text><text x="136" textLength="8" class="background"> </text><text x="144" textLength="144" font-weight="bold" class="color8">diff ...FETCH_HEAD</text><text x="288" textLength="888" class="foreground"> </text></g><g id="g116"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="40" class="foreground"> git </text><text x="144" textLength="8" class="background">d</text><text x="152" textLength="136" font-weight="bold" class="color8">iff ...FETCH_HEAD</text><text x="288" textLength="888" class="foreground"> </text></g><g id="g117"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="48" class="foreground"> git p</text><text x="152" textLength="8" class="background">u</text><text x="160" textLength="16" font-weight="bold" class="color8">sh</text><text x="176" textLength="1000" class="foreground"> </text></g><g id="g118"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="56" class="foreground"> git pu</text><text x="160" textLength="8" class="background">s</text><text x="168" textLength="8" font-weight="bold" class="color8">h</text><text x="176" textLength="1000" class="foreground"> </text></g><g id="g119"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="64" class="foreground"> git pul</text><text x="168" textLength="8" class="background">l</text><text x="176" textLength="1000" class="foreground"> </text></g><g id="g120"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="72" class="foreground"> git pull</text><text x="176" textLength="8" class="background"> </text><text x="184" textLength="992" class="foreground"> </text></g><g id="g121"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="80" class="foreground"> git pull </text><text x="184" textLength="8" class="background">g</text><text x="192" textLength="152" font-weight="bold" class="color8">h://jaraco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g122"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="88" class="foreground"> git pull g</text><text x="192" textLength="8" class="background">h</text><text x="200" textLength="144" font-weight="bold" class="color8">://jaraco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g123"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="96" class="foreground"> git pull gh</text><text x="200" textLength="8" class="background">:</text><text x="208" textLength="136" font-weight="bold" class="color8">//jaraco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g124"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="104" class="foreground"> git pull gh:</text><text x="208" textLength="8" class="background">/</text><text x="216" textLength="128" font-weight="bold" class="color8">/jaraco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g125"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="112" class="foreground"> git pull gh:/</text><text x="216" textLength="8" class="background">/</text><text x="224" textLength="120" font-weight="bold" class="color8">jaraco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g126"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="120" class="foreground"> git pull gh://</text><text x="224" textLength="8" class="background">j</text><text x="232" textLength="112" font-weight="bold" class="color8">araco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g127"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="128" class="foreground"> git pull gh://j</text><text x="232" textLength="8" class="background">a</text><text x="240" textLength="104" font-weight="bold" class="color8">raco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g128"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="136" class="foreground"> git pull gh://ja</text><text x="240" textLength="8" class="background">r</text><text x="248" textLength="96" font-weight="bold" class="color8">aco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g129"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="144" class="foreground"> git pull gh://jar</text><text x="248" textLength="8" class="background">a</text><text x="256" textLength="88" font-weight="bold" class="color8">co/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g130"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="152" class="foreground"> git pull gh://jara</text><text x="256" textLength="8" class="background">c</text><text x="264" textLength="80" font-weight="bold" class="color8">o/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g131"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="160" class="foreground"> git pull gh://jarac</text><text x="264" textLength="8" class="background">o</text><text x="272" textLength="72" font-weight="bold" class="color8">/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g132"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="168" class="foreground"> git pull gh://jaraco</text><text x="272" textLength="8" class="background">/</text><text x="280" textLength="64" font-weight="bold" class="color8">skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g133"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="176" class="foreground"> git pull gh://jaraco/</text><text x="280" textLength="8" class="background">s</text><text x="288" textLength="56" font-weight="bold" class="color8">keleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g134"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="184" class="foreground"> git pull gh://jaraco/s</text><text x="288" textLength="8" class="background">k</text><text x="296" textLength="48" font-weight="bold" class="color8">eleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g135"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="192" class="foreground"> git pull gh://jaraco/sk</text><text x="296" textLength="8" class="background">e</text><text x="304" textLength="40" font-weight="bold" class="color8">leton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g136"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="200" class="foreground"> git pull gh://jaraco/ske</text><text x="304" textLength="8" class="background">l</text><text x="312" textLength="32" font-weight="bold" class="color8">eton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g137"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="208" class="foreground"> git pull gh://jaraco/skel</text><text x="312" textLength="8" class="background">e</text><text x="320" textLength="24" font-weight="bold" class="color8">ton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g138"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="216" class="foreground"> git pull gh://jaraco/skele</text><text x="320" textLength="8" class="background">t</text><text x="328" textLength="16" font-weight="bold" class="color8">on</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g139"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="224" class="foreground"> git pull gh://jaraco/skelet</text><text x="328" textLength="8" class="background">o</text><text x="336" textLength="8" font-weight="bold" class="color8">n</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g140"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="232" class="foreground"> git pull gh://jaraco/skeleto</text><text x="336" textLength="8" class="background">n</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g141"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="240" class="foreground"> git pull gh://jaraco/skeleton</text><text x="344" textLength="8" class="background"> </text><text x="352" textLength="824" class="foreground"> </text></g><g id="g142"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="1072" class="foreground"> git pull gh://jaraco/skeleton </text></g><g id="g143"><text x="0" textLength="176" class="foreground">Auto-merging setup.cfg</text></g><g id="g144"><text x="0" textLength="256" class="foreground">Auto-merging azure-pipelines.yml</text></g><g id="g145"><text x="0" textLength="312" class="foreground">Merge made by the 'recursive' strategy.</text></g><g id="g146"><text x="0" textLength="208" class="foreground"> azure-pipelines.yml | 16 </text><text x="208" textLength="120" class="color2">+++++++++++++++</text><text x="328" textLength="8" class="color1">-</text></g><g id="g147"><text x="0" textLength="208" class="foreground"> setup.cfg | 2 </text><text x="208" textLength="16" class="color2">++</text></g><g id="g148"><text x="0" textLength="392" class="foreground"> 2 files changed, 17 insertions(+), 1 deletion(-)</text></g><g id="g149"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="16" class="foreground"> g</text><text x="120" textLength="8" class="background">i</text><text x="128" textLength="216" font-weight="bold" class="color8">t pull gh://jaraco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g150"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="24" class="foreground"> gi</text><text x="128" textLength="8" class="background">t</text><text x="136" textLength="208" font-weight="bold" class="color8"> pull gh://jaraco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g151"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="32" class="foreground"> git</text><text x="136" textLength="8" class="background"> </text><text x="144" textLength="200" font-weight="bold" class="color8">pull gh://jaraco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g152"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="40" class="foreground"> git </text><text x="144" textLength="8" class="background">p</text><text x="152" textLength="192" font-weight="bold" class="color8">ull gh://jaraco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g153"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="48" class="foreground"> git p</text><text x="152" textLength="8" class="background">u</text><text x="160" textLength="184" font-weight="bold" class="color8">ll gh://jaraco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g154"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="56" class="foreground"> git pu</text><text x="160" textLength="8" class="background">l</text><text x="168" textLength="176" font-weight="bold" class="color8">l gh://jaraco/skeleton</text><text x="344" textLength="832" class="foreground"> </text></g><g id="g155"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="64" class="foreground"> git pus</text><text x="168" textLength="8" class="background">h</text><text x="176" textLength="1000" class="foreground"> </text></g><g id="g156"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="72" class="foreground"> git push</text><text x="176" textLength="8" class="background"> </text><text x="184" textLength="992" class="foreground"> </text></g><g id="g157"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="1072" class="foreground"> git push </text></g><g id="g158"><text x="0" textLength="1176" class="foreground">Enumerating objects: 10, done. </text></g><g id="g159"><text x="0" textLength="8" class="background">C</text><text x="8" textLength="224" class="foreground">ounting objects: 50% (5/10)</text></g><g id="g160"><text x="0" textLength="296" class="foreground">Counting objects: 100% (10/10), done.</text></g><g id="g161"><text x="0" textLength="312" class="foreground">Delta compression using up to 8 threads</text></g><g id="g162"><text x="0" textLength="304" class="foreground">Compressing objects: 100% (4/4), done.</text></g><g id="g163"><text x="0" textLength="480" class="foreground">Writing objects: 100% (4/4), 512 bytes | 512.00 KiB/s, done.</text></g><g id="g164"><text x="0" textLength="416" class="foreground">Total 4 (delta 3), reused 0 (delta 0), pack-reused 0</text></g><g id="g165"><text x="0" textLength="1176" class="foreground">remote: Resolving deltas: 100% (3/3), completed with 3 local objects. </text></g><g id="g166"><text x="0" textLength="264" class="foreground">To https://github.com/jaraco/path</text></g><g id="g167"><text x="0" textLength="296" class="foreground"> ff4d395..bd18026 master -> master</text></g><g id="g168"><text x="0" textLength="32" class="foreground">path</text><text x="32" textLength="56" font-weight="bold" class="color10"> master</text><text x="88" textLength="8" class="foreground"> </text><text x="96" textLength="8" font-weight="bold" class="color12">$</text><text x="104" textLength="1072" class="foreground"> </text></g></defs><g id="screen_view"><g><rect x="0" y="0" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="0"/></g><g><rect x="0" y="884" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="884"/></g><g><rect x="112" y="1768" width="8" height="17" class="foreground"/><use xlink:href="#g2" y="1768"/></g><g><rect x="112" y="2652" width="8" height="17" class="foreground"/><use xlink:href="#g2" y="2652"/></g><g><rect x="120" y="3536" width="8" height="17" class="foreground"/><use xlink:href="#g3" y="3536"/></g><g><rect x="128" y="4420" width="8" height="17" class="foreground"/><use xlink:href="#g4" y="4420"/></g><g><rect x="136" y="5304" width="8" height="17" class="foreground"/><use xlink:href="#g5" y="5304"/></g><g><rect x="144" y="6188" width="8" height="17" class="foreground"/><use xlink:href="#g6" y="6188"/></g><g><rect x="152" y="7072" width="8" height="17" class="foreground"/><use xlink:href="#g7" y="7072"/></g><g><rect x="160" y="7956" width="8" height="17" class="foreground"/><use xlink:href="#g8" y="7956"/></g><g><rect x="168" y="8840" width="8" height="17" class="foreground"/><use xlink:href="#g9" y="8840"/></g><g><rect x="176" y="9724" width="8" height="17" class="foreground"/><use xlink:href="#g10" y="9724"/></g><g><rect x="184" y="10608" width="8" height="17" class="foreground"/><use xlink:href="#g11" y="10608"/></g><g><rect x="192" y="11492" width="8" height="17" class="foreground"/><use xlink:href="#g12" y="11492"/></g><g><rect x="200" y="12376" width="8" height="17" class="foreground"/><use xlink:href="#g13" y="12376"/></g><g><rect x="208" y="13260" width="8" height="17" class="foreground"/><use xlink:href="#g14" y="13260"/></g><g><rect x="216" y="14144" width="8" height="17" class="foreground"/><use xlink:href="#g15" y="14144"/></g><g><rect x="224" y="15028" width="8" height="17" class="foreground"/><use xlink:href="#g16" y="15028"/></g><g><rect x="232" y="15912" width="8" height="17" class="foreground"/><use xlink:href="#g17" y="15912"/></g><g><rect x="240" y="16796" width="8" height="17" class="foreground"/><use xlink:href="#g18" y="16796"/></g><g><rect x="248" y="17680" width="8" height="17" class="foreground"/><use xlink:href="#g19" y="17680"/></g><g><rect x="256" y="18564" width="8" height="17" class="foreground"/><use xlink:href="#g20" y="18564"/></g><g><rect x="264" y="19448" width="8" height="17" class="foreground"/><use xlink:href="#g21" y="19448"/></g><g><rect x="272" y="20332" width="8" height="17" class="foreground"/><use xlink:href="#g22" y="20332"/></g><g><rect x="280" y="21216" width="8" height="17" class="foreground"/><use xlink:href="#g23" y="21216"/></g><g><rect x="288" y="22100" width="8" height="17" class="foreground"/><use xlink:href="#g24" y="22100"/></g><g><rect x="296" y="22984" width="8" height="17" class="foreground"/><use xlink:href="#g25" y="22984"/></g><g><rect x="304" y="23868" width="8" height="17" class="foreground"/><use xlink:href="#g26" y="23868"/></g><g><rect x="312" y="24752" width="8" height="17" class="foreground"/><use xlink:href="#g27" y="24752"/></g><g><rect x="320" y="25636" width="8" height="17" class="foreground"/><use xlink:href="#g28" y="25636"/></g><g><rect x="328" y="26520" width="8" height="17" class="foreground"/><use xlink:href="#g29" y="26520"/></g><g><rect x="336" y="27404" width="8" height="17" class="foreground"/><use xlink:href="#g30" y="27404"/></g><g><rect x="344" y="28288" width="8" height="17" class="foreground"/><use xlink:href="#g31" y="28288"/></g><g><rect x="352" y="29172" width="8" height="17" class="foreground"/><use xlink:href="#g32" y="29172"/></g><g><use xlink:href="#g33" y="30056"/><rect x="0" y="30073" width="8" height="17" class="foreground"/><use xlink:href="#g34" y="30073"/></g><g><use xlink:href="#g33" y="30940"/><rect x="0" y="30957" width="8" height="17" class="foreground"/><use xlink:href="#g34" y="30957"/></g><g><use xlink:href="#g33" y="31824"/><use xlink:href="#g35" y="31841"/><use xlink:href="#g36" y="31858"/><rect x="0" y="31875" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="31875"/></g><g><use xlink:href="#g33" y="32708"/><use xlink:href="#g35" y="32725"/><use xlink:href="#g36" y="32742"/><rect x="0" y="32759" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="32759"/></g><g><use xlink:href="#g33" y="33592"/><use xlink:href="#g35" y="33609"/><use xlink:href="#g36" y="33626"/><rect x="0" y="33643" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="33643"/></g><g><use xlink:href="#g33" y="34476"/><use xlink:href="#g35" y="34493"/><use xlink:href="#g36" y="34510"/><rect x="0" y="34527" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="34527"/></g><g><use xlink:href="#g33" y="35360"/><use xlink:href="#g35" y="35377"/><use xlink:href="#g36" y="35394"/><rect x="112" y="35411" width="8" height="17" class="foreground"/><use xlink:href="#g37" y="35411"/></g><g><use xlink:href="#g33" y="36244"/><use xlink:href="#g35" y="36261"/><use xlink:href="#g36" y="36278"/><rect x="112" y="36295" width="8" height="17" class="foreground"/><use xlink:href="#g37" y="36295"/></g><g><use xlink:href="#g33" y="37128"/><use xlink:href="#g35" y="37145"/><use xlink:href="#g36" y="37162"/><rect x="120" y="37179" width="8" height="17" class="foreground"/><use xlink:href="#g38" y="37179"/></g><g><use xlink:href="#g33" y="38012"/><use xlink:href="#g35" y="38029"/><use xlink:href="#g36" y="38046"/><rect x="128" y="38063" width="8" height="17" class="foreground"/><use xlink:href="#g39" y="38063"/></g><g><use xlink:href="#g33" y="38896"/><use xlink:href="#g35" y="38913"/><use xlink:href="#g36" y="38930"/><rect x="136" y="38947" width="8" height="17" class="foreground"/><use xlink:href="#g40" y="38947"/></g><g><use xlink:href="#g33" y="39780"/><use xlink:href="#g35" y="39797"/><use xlink:href="#g36" y="39814"/><rect x="144" y="39831" width="8" height="17" class="foreground"/><use xlink:href="#g41" y="39831"/></g><g><use xlink:href="#g33" y="40664"/><use xlink:href="#g35" y="40681"/><use xlink:href="#g36" y="40698"/><rect x="152" y="40715" width="8" height="17" class="foreground"/><use xlink:href="#g42" y="40715"/></g><g><use xlink:href="#g33" y="41548"/><use xlink:href="#g35" y="41565"/><use xlink:href="#g36" y="41582"/><rect x="160" y="41599" width="8" height="17" class="foreground"/><use xlink:href="#g43" y="41599"/></g><g><use xlink:href="#g33" y="42432"/><use xlink:href="#g35" y="42449"/><use xlink:href="#g36" y="42466"/><rect x="168" y="42483" width="8" height="17" class="foreground"/><use xlink:href="#g44" y="42483"/></g><g><use xlink:href="#g33" y="43316"/><use xlink:href="#g35" y="43333"/><use xlink:href="#g36" y="43350"/><rect x="176" y="43367" width="8" height="17" class="foreground"/><use xlink:href="#g45" y="43367"/></g><g><use xlink:href="#g33" y="44200"/><use xlink:href="#g35" y="44217"/><use xlink:href="#g36" y="44234"/><rect x="184" y="44251" width="8" height="17" class="foreground"/><use xlink:href="#g46" y="44251"/></g><g><use xlink:href="#g33" y="45084"/><use xlink:href="#g35" y="45101"/><use xlink:href="#g36" y="45118"/><rect x="192" y="45135" width="8" height="17" class="foreground"/><use xlink:href="#g47" y="45135"/></g><g><use xlink:href="#g33" y="45968"/><use xlink:href="#g35" y="45985"/><use xlink:href="#g36" y="46002"/><rect x="200" y="46019" width="8" height="17" class="foreground"/><use xlink:href="#g48" y="46019"/></g><g><use xlink:href="#g33" y="46852"/><use xlink:href="#g35" y="46869"/><use xlink:href="#g36" y="46886"/><rect x="208" y="46903" width="8" height="17" class="foreground"/><use xlink:href="#g49" y="46903"/></g><g><use xlink:href="#g33" y="47736"/><use xlink:href="#g35" y="47753"/><use xlink:href="#g36" y="47770"/><rect x="216" y="47787" width="8" height="17" class="foreground"/><use xlink:href="#g50" y="47787"/></g><g><use xlink:href="#g33" y="48620"/><use xlink:href="#g35" y="48637"/><use xlink:href="#g36" y="48654"/><rect x="224" y="48671" width="8" height="17" class="foreground"/><use xlink:href="#g51" y="48671"/></g><g><use xlink:href="#g33" y="49504"/><use xlink:href="#g35" y="49521"/><use xlink:href="#g36" y="49538"/><rect x="232" y="49555" width="8" height="17" class="foreground"/><use xlink:href="#g52" y="49555"/></g><g><use xlink:href="#g33" y="50388"/><use xlink:href="#g35" y="50405"/><use xlink:href="#g36" y="50422"/><rect x="240" y="50439" width="8" height="17" class="foreground"/><use xlink:href="#g53" y="50439"/></g><g><use xlink:href="#g33" y="51272"/><use xlink:href="#g35" y="51289"/><use xlink:href="#g36" y="51306"/><rect x="248" y="51323" width="8" height="17" class="foreground"/><use xlink:href="#g54" y="51323"/></g><g><use xlink:href="#g33" y="52156"/><use xlink:href="#g35" y="52173"/><use xlink:href="#g36" y="52190"/><rect x="256" y="52207" width="8" height="17" class="foreground"/><use xlink:href="#g55" y="52207"/></g><g><use xlink:href="#g33" y="53040"/><use xlink:href="#g35" y="53057"/><use xlink:href="#g36" y="53074"/><rect x="264" y="53091" width="8" height="17" class="foreground"/><use xlink:href="#g56" y="53091"/></g><g><use xlink:href="#g33" y="53924"/><use xlink:href="#g35" y="53941"/><use xlink:href="#g36" y="53958"/><rect x="272" y="53975" width="8" height="17" class="foreground"/><use xlink:href="#g57" y="53975"/></g><g><use xlink:href="#g33" y="54808"/><use xlink:href="#g35" y="54825"/><use xlink:href="#g36" y="54842"/><rect x="280" y="54859" width="8" height="17" class="foreground"/><use xlink:href="#g58" y="54859"/></g><g><use xlink:href="#g33" y="55692"/><use xlink:href="#g35" y="55709"/><use xlink:href="#g36" y="55726"/><rect x="288" y="55743" width="8" height="17" class="foreground"/><use xlink:href="#g59" y="55743"/></g><g><use xlink:href="#g33" y="56576"/><use xlink:href="#g35" y="56593"/><use xlink:href="#g36" y="56610"/><use xlink:href="#g60" y="56627"/><rect x="0" y="56644" width="8" height="17" class="foreground"/><use xlink:href="#g34" y="56644"/></g><g><use xlink:href="#g33" y="57460"/><use xlink:href="#g35" y="57477"/><use xlink:href="#g36" y="57494"/><use xlink:href="#g60" y="57511"/><rect x="0" y="57528" width="8" height="17" class="foreground"/><use xlink:href="#g34" y="57528"/></g><g><use xlink:href="#g33" y="58344"/><use xlink:href="#g35" y="58361"/><use xlink:href="#g36" y="58378"/><use xlink:href="#g60" y="58395"/><use xlink:href="#g61" y="58412"/><use xlink:href="#g62" y="58429"/><use xlink:href="#g63" y="58446"/><use xlink:href="#g64" y="58463"/><rect x="0" y="58480" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="58480"/></g><g><use xlink:href="#g33" y="59228"/><use xlink:href="#g35" y="59245"/><use xlink:href="#g36" y="59262"/><use xlink:href="#g60" y="59279"/><use xlink:href="#g61" y="59296"/><use xlink:href="#g62" y="59313"/><use xlink:href="#g63" y="59330"/><use xlink:href="#g64" y="59347"/><use xlink:href="#g65" y="59364"/><use xlink:href="#g66" y="59381"/><use xlink:href="#g67" y="59398"/><use xlink:href="#g68" y="59415"/><use xlink:href="#g69" y="59432"/><use xlink:href="#g70" y="59449"/><use xlink:href="#g68" y="59466"/><use xlink:href="#g71" y="59483"/><use xlink:href="#g72" y="59500"/><use xlink:href="#g73" y="59517"/><use xlink:href="#g74" y="59534"/><use xlink:href="#g75" y="59551"/><use xlink:href="#g68" y="59568"/><use xlink:href="#g76" y="59585"/><use xlink:href="#g77" y="59602"/><use xlink:href="#g78" y="59619"/><use xlink:href="#g79" y="59636"/><use xlink:href="#g80" y="59653"/><use xlink:href="#g81" y="59670"/><use xlink:href="#g82" y="59687"/><use xlink:href="#g83" y="59704"/><use xlink:href="#g84" y="59721"/><use xlink:href="#g85" y="59738"/><rect x="408" y="59755" width="8" height="17" class="color2"/><use xlink:href="#g86" y="59755"/></g><g><use xlink:href="#g35" y="60112"/><use xlink:href="#g36" y="60129"/><use xlink:href="#g60" y="60146"/><use xlink:href="#g61" y="60163"/><use xlink:href="#g62" y="60180"/><use xlink:href="#g63" y="60197"/><use xlink:href="#g64" y="60214"/><use xlink:href="#g65" y="60231"/><use xlink:href="#g66" y="60248"/><use xlink:href="#g67" y="60265"/><use xlink:href="#g68" y="60282"/><use xlink:href="#g69" y="60299"/><use xlink:href="#g70" y="60316"/><use xlink:href="#g68" y="60333"/><use xlink:href="#g71" y="60350"/><use xlink:href="#g72" y="60367"/><use xlink:href="#g73" y="60384"/><use xlink:href="#g74" y="60401"/><use xlink:href="#g75" y="60418"/><use xlink:href="#g68" y="60435"/><use xlink:href="#g76" y="60452"/><use xlink:href="#g77" y="60469"/><use xlink:href="#g78" y="60486"/><use xlink:href="#g79" y="60503"/><use xlink:href="#g80" y="60520"/><use xlink:href="#g81" y="60537"/><use xlink:href="#g82" y="60554"/><use xlink:href="#g83" y="60571"/><use xlink:href="#g84" y="60588"/><use xlink:href="#g85" y="60605"/><use xlink:href="#g87" y="60622"/><use xlink:href="#g88" y="60639"/><use xlink:href="#g89" y="60656"/><use xlink:href="#g90" y="60673"/><use xlink:href="#g84" y="60690"/><use xlink:href="#g91" y="60707"/><use xlink:href="#g92" y="60724"/><use xlink:href="#g93" y="60741"/><use xlink:href="#g94" y="60758"/><use xlink:href="#g95" y="60775"/><use xlink:href="#g79" y="60792"/><use xlink:href="#g96" y="60809"/><use xlink:href="#g97" y="60826"/><use xlink:href="#g98" y="60843"/><use xlink:href="#g99" y="60860"/><use xlink:href="#g100" y="60877"/><use xlink:href="#g101" y="60894"/><use xlink:href="#g102" y="60911"/><use xlink:href="#g103" y="60928"/><rect x="24" y="60945" width="8" height="17" class="foreground"/><use xlink:href="#g104" y="60945"/></g><g><use xlink:href="#g61" y="60996"/><use xlink:href="#g62" y="61013"/><use xlink:href="#g63" y="61030"/><use xlink:href="#g64" y="61047"/><use xlink:href="#g65" y="61064"/><use xlink:href="#g66" y="61081"/><use xlink:href="#g67" y="61098"/><use xlink:href="#g68" y="61115"/><use xlink:href="#g69" y="61132"/><use xlink:href="#g70" y="61149"/><use xlink:href="#g68" y="61166"/><use xlink:href="#g71" y="61183"/><use xlink:href="#g72" y="61200"/><use xlink:href="#g73" y="61217"/><use xlink:href="#g74" y="61234"/><use xlink:href="#g75" y="61251"/><use xlink:href="#g68" y="61268"/><use xlink:href="#g76" y="61285"/><use xlink:href="#g77" y="61302"/><use xlink:href="#g78" y="61319"/><use xlink:href="#g79" y="61336"/><use xlink:href="#g80" y="61353"/><use xlink:href="#g81" y="61370"/><use xlink:href="#g82" y="61387"/><use xlink:href="#g83" y="61404"/><use xlink:href="#g84" y="61421"/><use xlink:href="#g85" y="61438"/><use xlink:href="#g87" y="61455"/><use xlink:href="#g88" y="61472"/><use xlink:href="#g89" y="61489"/><use xlink:href="#g90" y="61506"/><use xlink:href="#g84" y="61523"/><use xlink:href="#g91" y="61540"/><use xlink:href="#g92" y="61557"/><use xlink:href="#g93" y="61574"/><use xlink:href="#g94" y="61591"/><use xlink:href="#g95" y="61608"/><use xlink:href="#g79" y="61625"/><use xlink:href="#g96" y="61642"/><use xlink:href="#g97" y="61659"/><use xlink:href="#g98" y="61676"/><use xlink:href="#g99" y="61693"/><use xlink:href="#g100" y="61710"/><use xlink:href="#g101" y="61727"/><use xlink:href="#g102" y="61744"/><use xlink:href="#g103" y="61761"/><use xlink:href="#g105" y="61778"/><use xlink:href="#g106" y="61795"/><use xlink:href="#g107" y="61812"/><rect x="8" y="61829" width="8" height="17" class="foreground"/><use xlink:href="#g108" y="61829"/></g><g><use xlink:href="#g65" y="61880"/><use xlink:href="#g66" y="61897"/><use xlink:href="#g67" y="61914"/><use xlink:href="#g68" y="61931"/><use xlink:href="#g69" y="61948"/><use xlink:href="#g70" y="61965"/><use xlink:href="#g68" y="61982"/><use xlink:href="#g71" y="61999"/><use xlink:href="#g72" y="62016"/><use xlink:href="#g73" y="62033"/><use xlink:href="#g74" y="62050"/><use xlink:href="#g75" y="62067"/><use xlink:href="#g68" y="62084"/><use xlink:href="#g76" y="62101"/><use xlink:href="#g77" y="62118"/><use xlink:href="#g78" y="62135"/><use xlink:href="#g79" y="62152"/><use xlink:href="#g80" y="62169"/><use xlink:href="#g81" y="62186"/><use xlink:href="#g82" y="62203"/><use xlink:href="#g83" y="62220"/><use xlink:href="#g84" y="62237"/><use xlink:href="#g85" y="62254"/><use xlink:href="#g87" y="62271"/><use xlink:href="#g88" y="62288"/><use xlink:href="#g89" y="62305"/><use xlink:href="#g90" y="62322"/><use xlink:href="#g84" y="62339"/><use xlink:href="#g91" y="62356"/><use xlink:href="#g92" y="62373"/><use xlink:href="#g93" y="62390"/><use xlink:href="#g94" y="62407"/><use xlink:href="#g95" y="62424"/><use xlink:href="#g79" y="62441"/><use xlink:href="#g96" y="62458"/><use xlink:href="#g97" y="62475"/><use xlink:href="#g98" y="62492"/><use xlink:href="#g99" y="62509"/><use xlink:href="#g100" y="62526"/><use xlink:href="#g101" y="62543"/><use xlink:href="#g102" y="62560"/><use xlink:href="#g103" y="62577"/><use xlink:href="#g105" y="62594"/><use xlink:href="#g106" y="62611"/><use xlink:href="#g107" y="62628"/><use xlink:href="#g109" y="62645"/><use xlink:href="#g79" y="62662"/><use xlink:href="#g110" y="62679"/><use xlink:href="#g79" y="62696"/><rect x="0" y="62713" width="48" height="17" class="foreground"/><use xlink:href="#g111" y="62713"/></g><g><use xlink:href="#g65" y="62764"/><use xlink:href="#g66" y="62781"/><use xlink:href="#g67" y="62798"/><use xlink:href="#g68" y="62815"/><use xlink:href="#g69" y="62832"/><use xlink:href="#g70" y="62849"/><use xlink:href="#g68" y="62866"/><use xlink:href="#g71" y="62883"/><use xlink:href="#g72" y="62900"/><use xlink:href="#g73" y="62917"/><use xlink:href="#g74" y="62934"/><use xlink:href="#g75" y="62951"/><use xlink:href="#g68" y="62968"/><use xlink:href="#g76" y="62985"/><use xlink:href="#g77" y="63002"/><use xlink:href="#g78" y="63019"/><use xlink:href="#g79" y="63036"/><use xlink:href="#g80" y="63053"/><use xlink:href="#g81" y="63070"/><use xlink:href="#g82" y="63087"/><use xlink:href="#g83" y="63104"/><use xlink:href="#g84" y="63121"/><use xlink:href="#g85" y="63138"/><use xlink:href="#g87" y="63155"/><use xlink:href="#g88" y="63172"/><use xlink:href="#g89" y="63189"/><use xlink:href="#g90" y="63206"/><use xlink:href="#g84" y="63223"/><use xlink:href="#g91" y="63240"/><use xlink:href="#g92" y="63257"/><use xlink:href="#g93" y="63274"/><use xlink:href="#g94" y="63291"/><use xlink:href="#g95" y="63308"/><use xlink:href="#g79" y="63325"/><use xlink:href="#g96" y="63342"/><use xlink:href="#g97" y="63359"/><use xlink:href="#g98" y="63376"/><use xlink:href="#g99" y="63393"/><use xlink:href="#g100" y="63410"/><use xlink:href="#g101" y="63427"/><use xlink:href="#g102" y="63444"/><use xlink:href="#g103" y="63461"/><use xlink:href="#g105" y="63478"/><use xlink:href="#g106" y="63495"/><use xlink:href="#g107" y="63512"/><use xlink:href="#g109" y="63529"/><use xlink:href="#g79" y="63546"/><use xlink:href="#g110" y="63563"/><use xlink:href="#g79" y="63580"/><rect x="0" y="63597" width="8" height="17" class="foreground"/><use xlink:href="#g34" y="63597"/></g><g><use xlink:href="#g66" y="63648"/><use xlink:href="#g67" y="63665"/><use xlink:href="#g68" y="63682"/><use xlink:href="#g69" y="63699"/><use xlink:href="#g70" y="63716"/><use xlink:href="#g68" y="63733"/><use xlink:href="#g71" y="63750"/><use xlink:href="#g72" y="63767"/><use xlink:href="#g73" y="63784"/><use xlink:href="#g74" y="63801"/><use xlink:href="#g75" y="63818"/><use xlink:href="#g68" y="63835"/><use xlink:href="#g76" y="63852"/><use xlink:href="#g77" y="63869"/><use xlink:href="#g78" y="63886"/><use xlink:href="#g79" y="63903"/><use xlink:href="#g80" y="63920"/><use xlink:href="#g81" y="63937"/><use xlink:href="#g82" y="63954"/><use xlink:href="#g83" y="63971"/><use xlink:href="#g84" y="63988"/><use xlink:href="#g85" y="64005"/><use xlink:href="#g87" y="64022"/><use xlink:href="#g88" y="64039"/><use xlink:href="#g89" y="64056"/><use xlink:href="#g90" y="64073"/><use xlink:href="#g84" y="64090"/><use xlink:href="#g91" y="64107"/><use xlink:href="#g92" y="64124"/><use xlink:href="#g93" y="64141"/><use xlink:href="#g94" y="64158"/><use xlink:href="#g95" y="64175"/><use xlink:href="#g79" y="64192"/><use xlink:href="#g96" y="64209"/><use xlink:href="#g97" y="64226"/><use xlink:href="#g98" y="64243"/><use xlink:href="#g99" y="64260"/><use xlink:href="#g100" y="64277"/><use xlink:href="#g101" y="64294"/><use xlink:href="#g102" y="64311"/><use xlink:href="#g103" y="64328"/><use xlink:href="#g105" y="64345"/><use xlink:href="#g106" y="64362"/><use xlink:href="#g107" y="64379"/><use xlink:href="#g109" y="64396"/><use xlink:href="#g79" y="64413"/><use xlink:href="#g110" y="64430"/><use xlink:href="#g79" y="64447"/><use xlink:href="#g112" y="64464"/><rect x="0" y="64481" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="64481"/></g><g><use xlink:href="#g66" y="64532"/><use xlink:href="#g67" y="64549"/><use xlink:href="#g68" y="64566"/><use xlink:href="#g69" y="64583"/><use xlink:href="#g70" y="64600"/><use xlink:href="#g68" y="64617"/><use xlink:href="#g71" y="64634"/><use xlink:href="#g72" y="64651"/><use xlink:href="#g73" y="64668"/><use xlink:href="#g74" y="64685"/><use xlink:href="#g75" y="64702"/><use xlink:href="#g68" y="64719"/><use xlink:href="#g76" y="64736"/><use xlink:href="#g77" y="64753"/><use xlink:href="#g78" y="64770"/><use xlink:href="#g79" y="64787"/><use xlink:href="#g80" y="64804"/><use xlink:href="#g81" y="64821"/><use xlink:href="#g82" y="64838"/><use xlink:href="#g83" y="64855"/><use xlink:href="#g84" y="64872"/><use xlink:href="#g85" y="64889"/><use xlink:href="#g87" y="64906"/><use xlink:href="#g88" y="64923"/><use xlink:href="#g89" y="64940"/><use xlink:href="#g90" y="64957"/><use xlink:href="#g84" y="64974"/><use xlink:href="#g91" y="64991"/><use xlink:href="#g92" y="65008"/><use xlink:href="#g93" y="65025"/><use xlink:href="#g94" y="65042"/><use xlink:href="#g95" y="65059"/><use xlink:href="#g79" y="65076"/><use xlink:href="#g96" y="65093"/><use xlink:href="#g97" y="65110"/><use xlink:href="#g98" y="65127"/><use xlink:href="#g99" y="65144"/><use xlink:href="#g100" y="65161"/><use xlink:href="#g101" y="65178"/><use xlink:href="#g102" y="65195"/><use xlink:href="#g103" y="65212"/><use xlink:href="#g105" y="65229"/><use xlink:href="#g106" y="65246"/><use xlink:href="#g107" y="65263"/><use xlink:href="#g109" y="65280"/><use xlink:href="#g79" y="65297"/><use xlink:href="#g110" y="65314"/><use xlink:href="#g79" y="65331"/><use xlink:href="#g112" y="65348"/><rect x="0" y="65365" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="65365"/></g><g><use xlink:href="#g66" y="65416"/><use xlink:href="#g67" y="65433"/><use xlink:href="#g68" y="65450"/><use xlink:href="#g69" y="65467"/><use xlink:href="#g70" y="65484"/><use xlink:href="#g68" y="65501"/><use xlink:href="#g71" y="65518"/><use xlink:href="#g72" y="65535"/><use xlink:href="#g73" y="65552"/><use xlink:href="#g74" y="65569"/><use xlink:href="#g75" y="65586"/><use xlink:href="#g68" y="65603"/><use xlink:href="#g76" y="65620"/><use xlink:href="#g77" y="65637"/><use xlink:href="#g78" y="65654"/><use xlink:href="#g79" y="65671"/><use xlink:href="#g80" y="65688"/><use xlink:href="#g81" y="65705"/><use xlink:href="#g82" y="65722"/><use xlink:href="#g83" y="65739"/><use xlink:href="#g84" y="65756"/><use xlink:href="#g85" y="65773"/><use xlink:href="#g87" y="65790"/><use xlink:href="#g88" y="65807"/><use xlink:href="#g89" y="65824"/><use xlink:href="#g90" y="65841"/><use xlink:href="#g84" y="65858"/><use xlink:href="#g91" y="65875"/><use xlink:href="#g92" y="65892"/><use xlink:href="#g93" y="65909"/><use xlink:href="#g94" y="65926"/><use xlink:href="#g95" y="65943"/><use xlink:href="#g79" y="65960"/><use xlink:href="#g96" y="65977"/><use xlink:href="#g97" y="65994"/><use xlink:href="#g98" y="66011"/><use xlink:href="#g99" y="66028"/><use xlink:href="#g100" y="66045"/><use xlink:href="#g101" y="66062"/><use xlink:href="#g102" y="66079"/><use xlink:href="#g103" y="66096"/><use xlink:href="#g105" y="66113"/><use xlink:href="#g106" y="66130"/><use xlink:href="#g107" y="66147"/><use xlink:href="#g109" y="66164"/><use xlink:href="#g79" y="66181"/><use xlink:href="#g110" y="66198"/><use xlink:href="#g79" y="66215"/><use xlink:href="#g112" y="66232"/><rect x="0" y="66249" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="66249"/></g><g><use xlink:href="#g66" y="66300"/><use xlink:href="#g67" y="66317"/><use xlink:href="#g68" y="66334"/><use xlink:href="#g69" y="66351"/><use xlink:href="#g70" y="66368"/><use xlink:href="#g68" y="66385"/><use xlink:href="#g71" y="66402"/><use xlink:href="#g72" y="66419"/><use xlink:href="#g73" y="66436"/><use xlink:href="#g74" y="66453"/><use xlink:href="#g75" y="66470"/><use xlink:href="#g68" y="66487"/><use xlink:href="#g76" y="66504"/><use xlink:href="#g77" y="66521"/><use xlink:href="#g78" y="66538"/><use xlink:href="#g79" y="66555"/><use xlink:href="#g80" y="66572"/><use xlink:href="#g81" y="66589"/><use xlink:href="#g82" y="66606"/><use xlink:href="#g83" y="66623"/><use xlink:href="#g84" y="66640"/><use xlink:href="#g85" y="66657"/><use xlink:href="#g87" y="66674"/><use xlink:href="#g88" y="66691"/><use xlink:href="#g89" y="66708"/><use xlink:href="#g90" y="66725"/><use xlink:href="#g84" y="66742"/><use xlink:href="#g91" y="66759"/><use xlink:href="#g92" y="66776"/><use xlink:href="#g93" y="66793"/><use xlink:href="#g94" y="66810"/><use xlink:href="#g95" y="66827"/><use xlink:href="#g79" y="66844"/><use xlink:href="#g96" y="66861"/><use xlink:href="#g97" y="66878"/><use xlink:href="#g98" y="66895"/><use xlink:href="#g99" y="66912"/><use xlink:href="#g100" y="66929"/><use xlink:href="#g101" y="66946"/><use xlink:href="#g102" y="66963"/><use xlink:href="#g103" y="66980"/><use xlink:href="#g105" y="66997"/><use xlink:href="#g106" y="67014"/><use xlink:href="#g107" y="67031"/><use xlink:href="#g109" y="67048"/><use xlink:href="#g79" y="67065"/><use xlink:href="#g110" y="67082"/><use xlink:href="#g79" y="67099"/><use xlink:href="#g112" y="67116"/><rect x="112" y="67133" width="8" height="17" class="foreground"/><use xlink:href="#g37" y="67133"/></g><g><use xlink:href="#g66" y="67184"/><use xlink:href="#g67" y="67201"/><use xlink:href="#g68" y="67218"/><use xlink:href="#g69" y="67235"/><use xlink:href="#g70" y="67252"/><use xlink:href="#g68" y="67269"/><use xlink:href="#g71" y="67286"/><use xlink:href="#g72" y="67303"/><use xlink:href="#g73" y="67320"/><use xlink:href="#g74" y="67337"/><use xlink:href="#g75" y="67354"/><use xlink:href="#g68" y="67371"/><use xlink:href="#g76" y="67388"/><use xlink:href="#g77" y="67405"/><use xlink:href="#g78" y="67422"/><use xlink:href="#g79" y="67439"/><use xlink:href="#g80" y="67456"/><use xlink:href="#g81" y="67473"/><use xlink:href="#g82" y="67490"/><use xlink:href="#g83" y="67507"/><use xlink:href="#g84" y="67524"/><use xlink:href="#g85" y="67541"/><use xlink:href="#g87" y="67558"/><use xlink:href="#g88" y="67575"/><use xlink:href="#g89" y="67592"/><use xlink:href="#g90" y="67609"/><use xlink:href="#g84" y="67626"/><use xlink:href="#g91" y="67643"/><use xlink:href="#g92" y="67660"/><use xlink:href="#g93" y="67677"/><use xlink:href="#g94" y="67694"/><use xlink:href="#g95" y="67711"/><use xlink:href="#g79" y="67728"/><use xlink:href="#g96" y="67745"/><use xlink:href="#g97" y="67762"/><use xlink:href="#g98" y="67779"/><use xlink:href="#g99" y="67796"/><use xlink:href="#g100" y="67813"/><use xlink:href="#g101" y="67830"/><use xlink:href="#g102" y="67847"/><use xlink:href="#g103" y="67864"/><use xlink:href="#g105" y="67881"/><use xlink:href="#g106" y="67898"/><use xlink:href="#g107" y="67915"/><use xlink:href="#g109" y="67932"/><use xlink:href="#g79" y="67949"/><use xlink:href="#g110" y="67966"/><use xlink:href="#g79" y="67983"/><use xlink:href="#g112" y="68000"/><rect x="112" y="68017" width="8" height="17" class="foreground"/><use xlink:href="#g37" y="68017"/></g><g><use xlink:href="#g66" y="68068"/><use xlink:href="#g67" y="68085"/><use xlink:href="#g68" y="68102"/><use xlink:href="#g69" y="68119"/><use xlink:href="#g70" y="68136"/><use xlink:href="#g68" y="68153"/><use xlink:href="#g71" y="68170"/><use xlink:href="#g72" y="68187"/><use xlink:href="#g73" y="68204"/><use xlink:href="#g74" y="68221"/><use xlink:href="#g75" y="68238"/><use xlink:href="#g68" y="68255"/><use xlink:href="#g76" y="68272"/><use xlink:href="#g77" y="68289"/><use xlink:href="#g78" y="68306"/><use xlink:href="#g79" y="68323"/><use xlink:href="#g80" y="68340"/><use xlink:href="#g81" y="68357"/><use xlink:href="#g82" y="68374"/><use xlink:href="#g83" y="68391"/><use xlink:href="#g84" y="68408"/><use xlink:href="#g85" y="68425"/><use xlink:href="#g87" y="68442"/><use xlink:href="#g88" y="68459"/><use xlink:href="#g89" y="68476"/><use xlink:href="#g90" y="68493"/><use xlink:href="#g84" y="68510"/><use xlink:href="#g91" y="68527"/><use xlink:href="#g92" y="68544"/><use xlink:href="#g93" y="68561"/><use xlink:href="#g94" y="68578"/><use xlink:href="#g95" y="68595"/><use xlink:href="#g79" y="68612"/><use xlink:href="#g96" y="68629"/><use xlink:href="#g97" y="68646"/><use xlink:href="#g98" y="68663"/><use xlink:href="#g99" y="68680"/><use xlink:href="#g100" y="68697"/><use xlink:href="#g101" y="68714"/><use xlink:href="#g102" y="68731"/><use xlink:href="#g103" y="68748"/><use xlink:href="#g105" y="68765"/><use xlink:href="#g106" y="68782"/><use xlink:href="#g107" y="68799"/><use xlink:href="#g109" y="68816"/><use xlink:href="#g79" y="68833"/><use xlink:href="#g110" y="68850"/><use xlink:href="#g79" y="68867"/><use xlink:href="#g112" y="68884"/><rect x="120" y="68901" width="8" height="17" class="foreground"/><use xlink:href="#g113" y="68901"/></g><g><use xlink:href="#g66" y="68952"/><use xlink:href="#g67" y="68969"/><use xlink:href="#g68" y="68986"/><use xlink:href="#g69" y="69003"/><use xlink:href="#g70" y="69020"/><use xlink:href="#g68" y="69037"/><use xlink:href="#g71" y="69054"/><use xlink:href="#g72" y="69071"/><use xlink:href="#g73" y="69088"/><use xlink:href="#g74" y="69105"/><use xlink:href="#g75" y="69122"/><use xlink:href="#g68" y="69139"/><use xlink:href="#g76" y="69156"/><use xlink:href="#g77" y="69173"/><use xlink:href="#g78" y="69190"/><use xlink:href="#g79" y="69207"/><use xlink:href="#g80" y="69224"/><use xlink:href="#g81" y="69241"/><use xlink:href="#g82" y="69258"/><use xlink:href="#g83" y="69275"/><use xlink:href="#g84" y="69292"/><use xlink:href="#g85" y="69309"/><use xlink:href="#g87" y="69326"/><use xlink:href="#g88" y="69343"/><use xlink:href="#g89" y="69360"/><use xlink:href="#g90" y="69377"/><use xlink:href="#g84" y="69394"/><use xlink:href="#g91" y="69411"/><use xlink:href="#g92" y="69428"/><use xlink:href="#g93" y="69445"/><use xlink:href="#g94" y="69462"/><use xlink:href="#g95" y="69479"/><use xlink:href="#g79" y="69496"/><use xlink:href="#g96" y="69513"/><use xlink:href="#g97" y="69530"/><use xlink:href="#g98" y="69547"/><use xlink:href="#g99" y="69564"/><use xlink:href="#g100" y="69581"/><use xlink:href="#g101" y="69598"/><use xlink:href="#g102" y="69615"/><use xlink:href="#g103" y="69632"/><use xlink:href="#g105" y="69649"/><use xlink:href="#g106" y="69666"/><use xlink:href="#g107" y="69683"/><use xlink:href="#g109" y="69700"/><use xlink:href="#g79" y="69717"/><use xlink:href="#g110" y="69734"/><use xlink:href="#g79" y="69751"/><use xlink:href="#g112" y="69768"/><rect x="128" y="69785" width="8" height="17" class="foreground"/><use xlink:href="#g114" y="69785"/></g><g><use xlink:href="#g66" y="69836"/><use xlink:href="#g67" y="69853"/><use xlink:href="#g68" y="69870"/><use xlink:href="#g69" y="69887"/><use xlink:href="#g70" y="69904"/><use xlink:href="#g68" y="69921"/><use xlink:href="#g71" y="69938"/><use xlink:href="#g72" y="69955"/><use xlink:href="#g73" y="69972"/><use xlink:href="#g74" y="69989"/><use xlink:href="#g75" y="70006"/><use xlink:href="#g68" y="70023"/><use xlink:href="#g76" y="70040"/><use xlink:href="#g77" y="70057"/><use xlink:href="#g78" y="70074"/><use xlink:href="#g79" y="70091"/><use xlink:href="#g80" y="70108"/><use xlink:href="#g81" y="70125"/><use xlink:href="#g82" y="70142"/><use xlink:href="#g83" y="70159"/><use xlink:href="#g84" y="70176"/><use xlink:href="#g85" y="70193"/><use xlink:href="#g87" y="70210"/><use xlink:href="#g88" y="70227"/><use xlink:href="#g89" y="70244"/><use xlink:href="#g90" y="70261"/><use xlink:href="#g84" y="70278"/><use xlink:href="#g91" y="70295"/><use xlink:href="#g92" y="70312"/><use xlink:href="#g93" y="70329"/><use xlink:href="#g94" y="70346"/><use xlink:href="#g95" y="70363"/><use xlink:href="#g79" y="70380"/><use xlink:href="#g96" y="70397"/><use xlink:href="#g97" y="70414"/><use xlink:href="#g98" y="70431"/><use xlink:href="#g99" y="70448"/><use xlink:href="#g100" y="70465"/><use xlink:href="#g101" y="70482"/><use xlink:href="#g102" y="70499"/><use xlink:href="#g103" y="70516"/><use xlink:href="#g105" y="70533"/><use xlink:href="#g106" y="70550"/><use xlink:href="#g107" y="70567"/><use xlink:href="#g109" y="70584"/><use xlink:href="#g79" y="70601"/><use xlink:href="#g110" y="70618"/><use xlink:href="#g79" y="70635"/><use xlink:href="#g112" y="70652"/><rect x="136" y="70669" width="8" height="17" class="foreground"/><use xlink:href="#g115" y="70669"/></g><g><use xlink:href="#g66" y="70720"/><use xlink:href="#g67" y="70737"/><use xlink:href="#g68" y="70754"/><use xlink:href="#g69" y="70771"/><use xlink:href="#g70" y="70788"/><use xlink:href="#g68" y="70805"/><use xlink:href="#g71" y="70822"/><use xlink:href="#g72" y="70839"/><use xlink:href="#g73" y="70856"/><use xlink:href="#g74" y="70873"/><use xlink:href="#g75" y="70890"/><use xlink:href="#g68" y="70907"/><use xlink:href="#g76" y="70924"/><use xlink:href="#g77" y="70941"/><use xlink:href="#g78" y="70958"/><use xlink:href="#g79" y="70975"/><use xlink:href="#g80" y="70992"/><use xlink:href="#g81" y="71009"/><use xlink:href="#g82" y="71026"/><use xlink:href="#g83" y="71043"/><use xlink:href="#g84" y="71060"/><use xlink:href="#g85" y="71077"/><use xlink:href="#g87" y="71094"/><use xlink:href="#g88" y="71111"/><use xlink:href="#g89" y="71128"/><use xlink:href="#g90" y="71145"/><use xlink:href="#g84" y="71162"/><use xlink:href="#g91" y="71179"/><use xlink:href="#g92" y="71196"/><use xlink:href="#g93" y="71213"/><use xlink:href="#g94" y="71230"/><use xlink:href="#g95" y="71247"/><use xlink:href="#g79" y="71264"/><use xlink:href="#g96" y="71281"/><use xlink:href="#g97" y="71298"/><use xlink:href="#g98" y="71315"/><use xlink:href="#g99" y="71332"/><use xlink:href="#g100" y="71349"/><use xlink:href="#g101" y="71366"/><use xlink:href="#g102" y="71383"/><use xlink:href="#g103" y="71400"/><use xlink:href="#g105" y="71417"/><use xlink:href="#g106" y="71434"/><use xlink:href="#g107" y="71451"/><use xlink:href="#g109" y="71468"/><use xlink:href="#g79" y="71485"/><use xlink:href="#g110" y="71502"/><use xlink:href="#g79" y="71519"/><use xlink:href="#g112" y="71536"/><rect x="144" y="71553" width="8" height="17" class="foreground"/><use xlink:href="#g116" y="71553"/></g><g><use xlink:href="#g66" y="71604"/><use xlink:href="#g67" y="71621"/><use xlink:href="#g68" y="71638"/><use xlink:href="#g69" y="71655"/><use xlink:href="#g70" y="71672"/><use xlink:href="#g68" y="71689"/><use xlink:href="#g71" y="71706"/><use xlink:href="#g72" y="71723"/><use xlink:href="#g73" y="71740"/><use xlink:href="#g74" y="71757"/><use xlink:href="#g75" y="71774"/><use xlink:href="#g68" y="71791"/><use xlink:href="#g76" y="71808"/><use xlink:href="#g77" y="71825"/><use xlink:href="#g78" y="71842"/><use xlink:href="#g79" y="71859"/><use xlink:href="#g80" y="71876"/><use xlink:href="#g81" y="71893"/><use xlink:href="#g82" y="71910"/><use xlink:href="#g83" y="71927"/><use xlink:href="#g84" y="71944"/><use xlink:href="#g85" y="71961"/><use xlink:href="#g87" y="71978"/><use xlink:href="#g88" y="71995"/><use xlink:href="#g89" y="72012"/><use xlink:href="#g90" y="72029"/><use xlink:href="#g84" y="72046"/><use xlink:href="#g91" y="72063"/><use xlink:href="#g92" y="72080"/><use xlink:href="#g93" y="72097"/><use xlink:href="#g94" y="72114"/><use xlink:href="#g95" y="72131"/><use xlink:href="#g79" y="72148"/><use xlink:href="#g96" y="72165"/><use xlink:href="#g97" y="72182"/><use xlink:href="#g98" y="72199"/><use xlink:href="#g99" y="72216"/><use xlink:href="#g100" y="72233"/><use xlink:href="#g101" y="72250"/><use xlink:href="#g102" y="72267"/><use xlink:href="#g103" y="72284"/><use xlink:href="#g105" y="72301"/><use xlink:href="#g106" y="72318"/><use xlink:href="#g107" y="72335"/><use xlink:href="#g109" y="72352"/><use xlink:href="#g79" y="72369"/><use xlink:href="#g110" y="72386"/><use xlink:href="#g79" y="72403"/><use xlink:href="#g112" y="72420"/><rect x="152" y="72437" width="8" height="17" class="foreground"/><use xlink:href="#g117" y="72437"/></g><g><use xlink:href="#g66" y="72488"/><use xlink:href="#g67" y="72505"/><use xlink:href="#g68" y="72522"/><use xlink:href="#g69" y="72539"/><use xlink:href="#g70" y="72556"/><use xlink:href="#g68" y="72573"/><use xlink:href="#g71" y="72590"/><use xlink:href="#g72" y="72607"/><use xlink:href="#g73" y="72624"/><use xlink:href="#g74" y="72641"/><use xlink:href="#g75" y="72658"/><use xlink:href="#g68" y="72675"/><use xlink:href="#g76" y="72692"/><use xlink:href="#g77" y="72709"/><use xlink:href="#g78" y="72726"/><use xlink:href="#g79" y="72743"/><use xlink:href="#g80" y="72760"/><use xlink:href="#g81" y="72777"/><use xlink:href="#g82" y="72794"/><use xlink:href="#g83" y="72811"/><use xlink:href="#g84" y="72828"/><use xlink:href="#g85" y="72845"/><use xlink:href="#g87" y="72862"/><use xlink:href="#g88" y="72879"/><use xlink:href="#g89" y="72896"/><use xlink:href="#g90" y="72913"/><use xlink:href="#g84" y="72930"/><use xlink:href="#g91" y="72947"/><use xlink:href="#g92" y="72964"/><use xlink:href="#g93" y="72981"/><use xlink:href="#g94" y="72998"/><use xlink:href="#g95" y="73015"/><use xlink:href="#g79" y="73032"/><use xlink:href="#g96" y="73049"/><use xlink:href="#g97" y="73066"/><use xlink:href="#g98" y="73083"/><use xlink:href="#g99" y="73100"/><use xlink:href="#g100" y="73117"/><use xlink:href="#g101" y="73134"/><use xlink:href="#g102" y="73151"/><use xlink:href="#g103" y="73168"/><use xlink:href="#g105" y="73185"/><use xlink:href="#g106" y="73202"/><use xlink:href="#g107" y="73219"/><use xlink:href="#g109" y="73236"/><use xlink:href="#g79" y="73253"/><use xlink:href="#g110" y="73270"/><use xlink:href="#g79" y="73287"/><use xlink:href="#g112" y="73304"/><rect x="160" y="73321" width="8" height="17" class="foreground"/><use xlink:href="#g118" y="73321"/></g><g><use xlink:href="#g66" y="73372"/><use xlink:href="#g67" y="73389"/><use xlink:href="#g68" y="73406"/><use xlink:href="#g69" y="73423"/><use xlink:href="#g70" y="73440"/><use xlink:href="#g68" y="73457"/><use xlink:href="#g71" y="73474"/><use xlink:href="#g72" y="73491"/><use xlink:href="#g73" y="73508"/><use xlink:href="#g74" y="73525"/><use xlink:href="#g75" y="73542"/><use xlink:href="#g68" y="73559"/><use xlink:href="#g76" y="73576"/><use xlink:href="#g77" y="73593"/><use xlink:href="#g78" y="73610"/><use xlink:href="#g79" y="73627"/><use xlink:href="#g80" y="73644"/><use xlink:href="#g81" y="73661"/><use xlink:href="#g82" y="73678"/><use xlink:href="#g83" y="73695"/><use xlink:href="#g84" y="73712"/><use xlink:href="#g85" y="73729"/><use xlink:href="#g87" y="73746"/><use xlink:href="#g88" y="73763"/><use xlink:href="#g89" y="73780"/><use xlink:href="#g90" y="73797"/><use xlink:href="#g84" y="73814"/><use xlink:href="#g91" y="73831"/><use xlink:href="#g92" y="73848"/><use xlink:href="#g93" y="73865"/><use xlink:href="#g94" y="73882"/><use xlink:href="#g95" y="73899"/><use xlink:href="#g79" y="73916"/><use xlink:href="#g96" y="73933"/><use xlink:href="#g97" y="73950"/><use xlink:href="#g98" y="73967"/><use xlink:href="#g99" y="73984"/><use xlink:href="#g100" y="74001"/><use xlink:href="#g101" y="74018"/><use xlink:href="#g102" y="74035"/><use xlink:href="#g103" y="74052"/><use xlink:href="#g105" y="74069"/><use xlink:href="#g106" y="74086"/><use xlink:href="#g107" y="74103"/><use xlink:href="#g109" y="74120"/><use xlink:href="#g79" y="74137"/><use xlink:href="#g110" y="74154"/><use xlink:href="#g79" y="74171"/><use xlink:href="#g112" y="74188"/><rect x="168" y="74205" width="8" height="17" class="foreground"/><use xlink:href="#g119" y="74205"/></g><g><use xlink:href="#g66" y="74256"/><use xlink:href="#g67" y="74273"/><use xlink:href="#g68" y="74290"/><use xlink:href="#g69" y="74307"/><use xlink:href="#g70" y="74324"/><use xlink:href="#g68" y="74341"/><use xlink:href="#g71" y="74358"/><use xlink:href="#g72" y="74375"/><use xlink:href="#g73" y="74392"/><use xlink:href="#g74" y="74409"/><use xlink:href="#g75" y="74426"/><use xlink:href="#g68" y="74443"/><use xlink:href="#g76" y="74460"/><use xlink:href="#g77" y="74477"/><use xlink:href="#g78" y="74494"/><use xlink:href="#g79" y="74511"/><use xlink:href="#g80" y="74528"/><use xlink:href="#g81" y="74545"/><use xlink:href="#g82" y="74562"/><use xlink:href="#g83" y="74579"/><use xlink:href="#g84" y="74596"/><use xlink:href="#g85" y="74613"/><use xlink:href="#g87" y="74630"/><use xlink:href="#g88" y="74647"/><use xlink:href="#g89" y="74664"/><use xlink:href="#g90" y="74681"/><use xlink:href="#g84" y="74698"/><use xlink:href="#g91" y="74715"/><use xlink:href="#g92" y="74732"/><use xlink:href="#g93" y="74749"/><use xlink:href="#g94" y="74766"/><use xlink:href="#g95" y="74783"/><use xlink:href="#g79" y="74800"/><use xlink:href="#g96" y="74817"/><use xlink:href="#g97" y="74834"/><use xlink:href="#g98" y="74851"/><use xlink:href="#g99" y="74868"/><use xlink:href="#g100" y="74885"/><use xlink:href="#g101" y="74902"/><use xlink:href="#g102" y="74919"/><use xlink:href="#g103" y="74936"/><use xlink:href="#g105" y="74953"/><use xlink:href="#g106" y="74970"/><use xlink:href="#g107" y="74987"/><use xlink:href="#g109" y="75004"/><use xlink:href="#g79" y="75021"/><use xlink:href="#g110" y="75038"/><use xlink:href="#g79" y="75055"/><use xlink:href="#g112" y="75072"/><rect x="176" y="75089" width="8" height="17" class="foreground"/><use xlink:href="#g120" y="75089"/></g><g><use xlink:href="#g66" y="75140"/><use xlink:href="#g67" y="75157"/><use xlink:href="#g68" y="75174"/><use xlink:href="#g69" y="75191"/><use xlink:href="#g70" y="75208"/><use xlink:href="#g68" y="75225"/><use xlink:href="#g71" y="75242"/><use xlink:href="#g72" y="75259"/><use xlink:href="#g73" y="75276"/><use xlink:href="#g74" y="75293"/><use xlink:href="#g75" y="75310"/><use xlink:href="#g68" y="75327"/><use xlink:href="#g76" y="75344"/><use xlink:href="#g77" y="75361"/><use xlink:href="#g78" y="75378"/><use xlink:href="#g79" y="75395"/><use xlink:href="#g80" y="75412"/><use xlink:href="#g81" y="75429"/><use xlink:href="#g82" y="75446"/><use xlink:href="#g83" y="75463"/><use xlink:href="#g84" y="75480"/><use xlink:href="#g85" y="75497"/><use xlink:href="#g87" y="75514"/><use xlink:href="#g88" y="75531"/><use xlink:href="#g89" y="75548"/><use xlink:href="#g90" y="75565"/><use xlink:href="#g84" y="75582"/><use xlink:href="#g91" y="75599"/><use xlink:href="#g92" y="75616"/><use xlink:href="#g93" y="75633"/><use xlink:href="#g94" y="75650"/><use xlink:href="#g95" y="75667"/><use xlink:href="#g79" y="75684"/><use xlink:href="#g96" y="75701"/><use xlink:href="#g97" y="75718"/><use xlink:href="#g98" y="75735"/><use xlink:href="#g99" y="75752"/><use xlink:href="#g100" y="75769"/><use xlink:href="#g101" y="75786"/><use xlink:href="#g102" y="75803"/><use xlink:href="#g103" y="75820"/><use xlink:href="#g105" y="75837"/><use xlink:href="#g106" y="75854"/><use xlink:href="#g107" y="75871"/><use xlink:href="#g109" y="75888"/><use xlink:href="#g79" y="75905"/><use xlink:href="#g110" y="75922"/><use xlink:href="#g79" y="75939"/><use xlink:href="#g112" y="75956"/><rect x="184" y="75973" width="8" height="17" class="foreground"/><use xlink:href="#g121" y="75973"/></g><g><use xlink:href="#g66" y="76024"/><use xlink:href="#g67" y="76041"/><use xlink:href="#g68" y="76058"/><use xlink:href="#g69" y="76075"/><use xlink:href="#g70" y="76092"/><use xlink:href="#g68" y="76109"/><use xlink:href="#g71" y="76126"/><use xlink:href="#g72" y="76143"/><use xlink:href="#g73" y="76160"/><use xlink:href="#g74" y="76177"/><use xlink:href="#g75" y="76194"/><use xlink:href="#g68" y="76211"/><use xlink:href="#g76" y="76228"/><use xlink:href="#g77" y="76245"/><use xlink:href="#g78" y="76262"/><use xlink:href="#g79" y="76279"/><use xlink:href="#g80" y="76296"/><use xlink:href="#g81" y="76313"/><use xlink:href="#g82" y="76330"/><use xlink:href="#g83" y="76347"/><use xlink:href="#g84" y="76364"/><use xlink:href="#g85" y="76381"/><use xlink:href="#g87" y="76398"/><use xlink:href="#g88" y="76415"/><use xlink:href="#g89" y="76432"/><use xlink:href="#g90" y="76449"/><use xlink:href="#g84" y="76466"/><use xlink:href="#g91" y="76483"/><use xlink:href="#g92" y="76500"/><use xlink:href="#g93" y="76517"/><use xlink:href="#g94" y="76534"/><use xlink:href="#g95" y="76551"/><use xlink:href="#g79" y="76568"/><use xlink:href="#g96" y="76585"/><use xlink:href="#g97" y="76602"/><use xlink:href="#g98" y="76619"/><use xlink:href="#g99" y="76636"/><use xlink:href="#g100" y="76653"/><use xlink:href="#g101" y="76670"/><use xlink:href="#g102" y="76687"/><use xlink:href="#g103" y="76704"/><use xlink:href="#g105" y="76721"/><use xlink:href="#g106" y="76738"/><use xlink:href="#g107" y="76755"/><use xlink:href="#g109" y="76772"/><use xlink:href="#g79" y="76789"/><use xlink:href="#g110" y="76806"/><use xlink:href="#g79" y="76823"/><use xlink:href="#g112" y="76840"/><rect x="192" y="76857" width="8" height="17" class="foreground"/><use xlink:href="#g122" y="76857"/></g><g><use xlink:href="#g66" y="76908"/><use xlink:href="#g67" y="76925"/><use xlink:href="#g68" y="76942"/><use xlink:href="#g69" y="76959"/><use xlink:href="#g70" y="76976"/><use xlink:href="#g68" y="76993"/><use xlink:href="#g71" y="77010"/><use xlink:href="#g72" y="77027"/><use xlink:href="#g73" y="77044"/><use xlink:href="#g74" y="77061"/><use xlink:href="#g75" y="77078"/><use xlink:href="#g68" y="77095"/><use xlink:href="#g76" y="77112"/><use xlink:href="#g77" y="77129"/><use xlink:href="#g78" y="77146"/><use xlink:href="#g79" y="77163"/><use xlink:href="#g80" y="77180"/><use xlink:href="#g81" y="77197"/><use xlink:href="#g82" y="77214"/><use xlink:href="#g83" y="77231"/><use xlink:href="#g84" y="77248"/><use xlink:href="#g85" y="77265"/><use xlink:href="#g87" y="77282"/><use xlink:href="#g88" y="77299"/><use xlink:href="#g89" y="77316"/><use xlink:href="#g90" y="77333"/><use xlink:href="#g84" y="77350"/><use xlink:href="#g91" y="77367"/><use xlink:href="#g92" y="77384"/><use xlink:href="#g93" y="77401"/><use xlink:href="#g94" y="77418"/><use xlink:href="#g95" y="77435"/><use xlink:href="#g79" y="77452"/><use xlink:href="#g96" y="77469"/><use xlink:href="#g97" y="77486"/><use xlink:href="#g98" y="77503"/><use xlink:href="#g99" y="77520"/><use xlink:href="#g100" y="77537"/><use xlink:href="#g101" y="77554"/><use xlink:href="#g102" y="77571"/><use xlink:href="#g103" y="77588"/><use xlink:href="#g105" y="77605"/><use xlink:href="#g106" y="77622"/><use xlink:href="#g107" y="77639"/><use xlink:href="#g109" y="77656"/><use xlink:href="#g79" y="77673"/><use xlink:href="#g110" y="77690"/><use xlink:href="#g79" y="77707"/><use xlink:href="#g112" y="77724"/><rect x="200" y="77741" width="8" height="17" class="foreground"/><use xlink:href="#g123" y="77741"/></g><g><use xlink:href="#g66" y="77792"/><use xlink:href="#g67" y="77809"/><use xlink:href="#g68" y="77826"/><use xlink:href="#g69" y="77843"/><use xlink:href="#g70" y="77860"/><use xlink:href="#g68" y="77877"/><use xlink:href="#g71" y="77894"/><use xlink:href="#g72" y="77911"/><use xlink:href="#g73" y="77928"/><use xlink:href="#g74" y="77945"/><use xlink:href="#g75" y="77962"/><use xlink:href="#g68" y="77979"/><use xlink:href="#g76" y="77996"/><use xlink:href="#g77" y="78013"/><use xlink:href="#g78" y="78030"/><use xlink:href="#g79" y="78047"/><use xlink:href="#g80" y="78064"/><use xlink:href="#g81" y="78081"/><use xlink:href="#g82" y="78098"/><use xlink:href="#g83" y="78115"/><use xlink:href="#g84" y="78132"/><use xlink:href="#g85" y="78149"/><use xlink:href="#g87" y="78166"/><use xlink:href="#g88" y="78183"/><use xlink:href="#g89" y="78200"/><use xlink:href="#g90" y="78217"/><use xlink:href="#g84" y="78234"/><use xlink:href="#g91" y="78251"/><use xlink:href="#g92" y="78268"/><use xlink:href="#g93" y="78285"/><use xlink:href="#g94" y="78302"/><use xlink:href="#g95" y="78319"/><use xlink:href="#g79" y="78336"/><use xlink:href="#g96" y="78353"/><use xlink:href="#g97" y="78370"/><use xlink:href="#g98" y="78387"/><use xlink:href="#g99" y="78404"/><use xlink:href="#g100" y="78421"/><use xlink:href="#g101" y="78438"/><use xlink:href="#g102" y="78455"/><use xlink:href="#g103" y="78472"/><use xlink:href="#g105" y="78489"/><use xlink:href="#g106" y="78506"/><use xlink:href="#g107" y="78523"/><use xlink:href="#g109" y="78540"/><use xlink:href="#g79" y="78557"/><use xlink:href="#g110" y="78574"/><use xlink:href="#g79" y="78591"/><use xlink:href="#g112" y="78608"/><rect x="208" y="78625" width="8" height="17" class="foreground"/><use xlink:href="#g124" y="78625"/></g><g><use xlink:href="#g66" y="78676"/><use xlink:href="#g67" y="78693"/><use xlink:href="#g68" y="78710"/><use xlink:href="#g69" y="78727"/><use xlink:href="#g70" y="78744"/><use xlink:href="#g68" y="78761"/><use xlink:href="#g71" y="78778"/><use xlink:href="#g72" y="78795"/><use xlink:href="#g73" y="78812"/><use xlink:href="#g74" y="78829"/><use xlink:href="#g75" y="78846"/><use xlink:href="#g68" y="78863"/><use xlink:href="#g76" y="78880"/><use xlink:href="#g77" y="78897"/><use xlink:href="#g78" y="78914"/><use xlink:href="#g79" y="78931"/><use xlink:href="#g80" y="78948"/><use xlink:href="#g81" y="78965"/><use xlink:href="#g82" y="78982"/><use xlink:href="#g83" y="78999"/><use xlink:href="#g84" y="79016"/><use xlink:href="#g85" y="79033"/><use xlink:href="#g87" y="79050"/><use xlink:href="#g88" y="79067"/><use xlink:href="#g89" y="79084"/><use xlink:href="#g90" y="79101"/><use xlink:href="#g84" y="79118"/><use xlink:href="#g91" y="79135"/><use xlink:href="#g92" y="79152"/><use xlink:href="#g93" y="79169"/><use xlink:href="#g94" y="79186"/><use xlink:href="#g95" y="79203"/><use xlink:href="#g79" y="79220"/><use xlink:href="#g96" y="79237"/><use xlink:href="#g97" y="79254"/><use xlink:href="#g98" y="79271"/><use xlink:href="#g99" y="79288"/><use xlink:href="#g100" y="79305"/><use xlink:href="#g101" y="79322"/><use xlink:href="#g102" y="79339"/><use xlink:href="#g103" y="79356"/><use xlink:href="#g105" y="79373"/><use xlink:href="#g106" y="79390"/><use xlink:href="#g107" y="79407"/><use xlink:href="#g109" y="79424"/><use xlink:href="#g79" y="79441"/><use xlink:href="#g110" y="79458"/><use xlink:href="#g79" y="79475"/><use xlink:href="#g112" y="79492"/><rect x="216" y="79509" width="8" height="17" class="foreground"/><use xlink:href="#g125" y="79509"/></g><g><use xlink:href="#g66" y="79560"/><use xlink:href="#g67" y="79577"/><use xlink:href="#g68" y="79594"/><use xlink:href="#g69" y="79611"/><use xlink:href="#g70" y="79628"/><use xlink:href="#g68" y="79645"/><use xlink:href="#g71" y="79662"/><use xlink:href="#g72" y="79679"/><use xlink:href="#g73" y="79696"/><use xlink:href="#g74" y="79713"/><use xlink:href="#g75" y="79730"/><use xlink:href="#g68" y="79747"/><use xlink:href="#g76" y="79764"/><use xlink:href="#g77" y="79781"/><use xlink:href="#g78" y="79798"/><use xlink:href="#g79" y="79815"/><use xlink:href="#g80" y="79832"/><use xlink:href="#g81" y="79849"/><use xlink:href="#g82" y="79866"/><use xlink:href="#g83" y="79883"/><use xlink:href="#g84" y="79900"/><use xlink:href="#g85" y="79917"/><use xlink:href="#g87" y="79934"/><use xlink:href="#g88" y="79951"/><use xlink:href="#g89" y="79968"/><use xlink:href="#g90" y="79985"/><use xlink:href="#g84" y="80002"/><use xlink:href="#g91" y="80019"/><use xlink:href="#g92" y="80036"/><use xlink:href="#g93" y="80053"/><use xlink:href="#g94" y="80070"/><use xlink:href="#g95" y="80087"/><use xlink:href="#g79" y="80104"/><use xlink:href="#g96" y="80121"/><use xlink:href="#g97" y="80138"/><use xlink:href="#g98" y="80155"/><use xlink:href="#g99" y="80172"/><use xlink:href="#g100" y="80189"/><use xlink:href="#g101" y="80206"/><use xlink:href="#g102" y="80223"/><use xlink:href="#g103" y="80240"/><use xlink:href="#g105" y="80257"/><use xlink:href="#g106" y="80274"/><use xlink:href="#g107" y="80291"/><use xlink:href="#g109" y="80308"/><use xlink:href="#g79" y="80325"/><use xlink:href="#g110" y="80342"/><use xlink:href="#g79" y="80359"/><use xlink:href="#g112" y="80376"/><rect x="224" y="80393" width="8" height="17" class="foreground"/><use xlink:href="#g126" y="80393"/></g><g><use xlink:href="#g66" y="80444"/><use xlink:href="#g67" y="80461"/><use xlink:href="#g68" y="80478"/><use xlink:href="#g69" y="80495"/><use xlink:href="#g70" y="80512"/><use xlink:href="#g68" y="80529"/><use xlink:href="#g71" y="80546"/><use xlink:href="#g72" y="80563"/><use xlink:href="#g73" y="80580"/><use xlink:href="#g74" y="80597"/><use xlink:href="#g75" y="80614"/><use xlink:href="#g68" y="80631"/><use xlink:href="#g76" y="80648"/><use xlink:href="#g77" y="80665"/><use xlink:href="#g78" y="80682"/><use xlink:href="#g79" y="80699"/><use xlink:href="#g80" y="80716"/><use xlink:href="#g81" y="80733"/><use xlink:href="#g82" y="80750"/><use xlink:href="#g83" y="80767"/><use xlink:href="#g84" y="80784"/><use xlink:href="#g85" y="80801"/><use xlink:href="#g87" y="80818"/><use xlink:href="#g88" y="80835"/><use xlink:href="#g89" y="80852"/><use xlink:href="#g90" y="80869"/><use xlink:href="#g84" y="80886"/><use xlink:href="#g91" y="80903"/><use xlink:href="#g92" y="80920"/><use xlink:href="#g93" y="80937"/><use xlink:href="#g94" y="80954"/><use xlink:href="#g95" y="80971"/><use xlink:href="#g79" y="80988"/><use xlink:href="#g96" y="81005"/><use xlink:href="#g97" y="81022"/><use xlink:href="#g98" y="81039"/><use xlink:href="#g99" y="81056"/><use xlink:href="#g100" y="81073"/><use xlink:href="#g101" y="81090"/><use xlink:href="#g102" y="81107"/><use xlink:href="#g103" y="81124"/><use xlink:href="#g105" y="81141"/><use xlink:href="#g106" y="81158"/><use xlink:href="#g107" y="81175"/><use xlink:href="#g109" y="81192"/><use xlink:href="#g79" y="81209"/><use xlink:href="#g110" y="81226"/><use xlink:href="#g79" y="81243"/><use xlink:href="#g112" y="81260"/><rect x="232" y="81277" width="8" height="17" class="foreground"/><use xlink:href="#g127" y="81277"/></g><g><use xlink:href="#g66" y="81328"/><use xlink:href="#g67" y="81345"/><use xlink:href="#g68" y="81362"/><use xlink:href="#g69" y="81379"/><use xlink:href="#g70" y="81396"/><use xlink:href="#g68" y="81413"/><use xlink:href="#g71" y="81430"/><use xlink:href="#g72" y="81447"/><use xlink:href="#g73" y="81464"/><use xlink:href="#g74" y="81481"/><use xlink:href="#g75" y="81498"/><use xlink:href="#g68" y="81515"/><use xlink:href="#g76" y="81532"/><use xlink:href="#g77" y="81549"/><use xlink:href="#g78" y="81566"/><use xlink:href="#g79" y="81583"/><use xlink:href="#g80" y="81600"/><use xlink:href="#g81" y="81617"/><use xlink:href="#g82" y="81634"/><use xlink:href="#g83" y="81651"/><use xlink:href="#g84" y="81668"/><use xlink:href="#g85" y="81685"/><use xlink:href="#g87" y="81702"/><use xlink:href="#g88" y="81719"/><use xlink:href="#g89" y="81736"/><use xlink:href="#g90" y="81753"/><use xlink:href="#g84" y="81770"/><use xlink:href="#g91" y="81787"/><use xlink:href="#g92" y="81804"/><use xlink:href="#g93" y="81821"/><use xlink:href="#g94" y="81838"/><use xlink:href="#g95" y="81855"/><use xlink:href="#g79" y="81872"/><use xlink:href="#g96" y="81889"/><use xlink:href="#g97" y="81906"/><use xlink:href="#g98" y="81923"/><use xlink:href="#g99" y="81940"/><use xlink:href="#g100" y="81957"/><use xlink:href="#g101" y="81974"/><use xlink:href="#g102" y="81991"/><use xlink:href="#g103" y="82008"/><use xlink:href="#g105" y="82025"/><use xlink:href="#g106" y="82042"/><use xlink:href="#g107" y="82059"/><use xlink:href="#g109" y="82076"/><use xlink:href="#g79" y="82093"/><use xlink:href="#g110" y="82110"/><use xlink:href="#g79" y="82127"/><use xlink:href="#g112" y="82144"/><rect x="240" y="82161" width="8" height="17" class="foreground"/><use xlink:href="#g128" y="82161"/></g><g><use xlink:href="#g66" y="82212"/><use xlink:href="#g67" y="82229"/><use xlink:href="#g68" y="82246"/><use xlink:href="#g69" y="82263"/><use xlink:href="#g70" y="82280"/><use xlink:href="#g68" y="82297"/><use xlink:href="#g71" y="82314"/><use xlink:href="#g72" y="82331"/><use xlink:href="#g73" y="82348"/><use xlink:href="#g74" y="82365"/><use xlink:href="#g75" y="82382"/><use xlink:href="#g68" y="82399"/><use xlink:href="#g76" y="82416"/><use xlink:href="#g77" y="82433"/><use xlink:href="#g78" y="82450"/><use xlink:href="#g79" y="82467"/><use xlink:href="#g80" y="82484"/><use xlink:href="#g81" y="82501"/><use xlink:href="#g82" y="82518"/><use xlink:href="#g83" y="82535"/><use xlink:href="#g84" y="82552"/><use xlink:href="#g85" y="82569"/><use xlink:href="#g87" y="82586"/><use xlink:href="#g88" y="82603"/><use xlink:href="#g89" y="82620"/><use xlink:href="#g90" y="82637"/><use xlink:href="#g84" y="82654"/><use xlink:href="#g91" y="82671"/><use xlink:href="#g92" y="82688"/><use xlink:href="#g93" y="82705"/><use xlink:href="#g94" y="82722"/><use xlink:href="#g95" y="82739"/><use xlink:href="#g79" y="82756"/><use xlink:href="#g96" y="82773"/><use xlink:href="#g97" y="82790"/><use xlink:href="#g98" y="82807"/><use xlink:href="#g99" y="82824"/><use xlink:href="#g100" y="82841"/><use xlink:href="#g101" y="82858"/><use xlink:href="#g102" y="82875"/><use xlink:href="#g103" y="82892"/><use xlink:href="#g105" y="82909"/><use xlink:href="#g106" y="82926"/><use xlink:href="#g107" y="82943"/><use xlink:href="#g109" y="82960"/><use xlink:href="#g79" y="82977"/><use xlink:href="#g110" y="82994"/><use xlink:href="#g79" y="83011"/><use xlink:href="#g112" y="83028"/><rect x="248" y="83045" width="8" height="17" class="foreground"/><use xlink:href="#g129" y="83045"/></g><g><use xlink:href="#g66" y="83096"/><use xlink:href="#g67" y="83113"/><use xlink:href="#g68" y="83130"/><use xlink:href="#g69" y="83147"/><use xlink:href="#g70" y="83164"/><use xlink:href="#g68" y="83181"/><use xlink:href="#g71" y="83198"/><use xlink:href="#g72" y="83215"/><use xlink:href="#g73" y="83232"/><use xlink:href="#g74" y="83249"/><use xlink:href="#g75" y="83266"/><use xlink:href="#g68" y="83283"/><use xlink:href="#g76" y="83300"/><use xlink:href="#g77" y="83317"/><use xlink:href="#g78" y="83334"/><use xlink:href="#g79" y="83351"/><use xlink:href="#g80" y="83368"/><use xlink:href="#g81" y="83385"/><use xlink:href="#g82" y="83402"/><use xlink:href="#g83" y="83419"/><use xlink:href="#g84" y="83436"/><use xlink:href="#g85" y="83453"/><use xlink:href="#g87" y="83470"/><use xlink:href="#g88" y="83487"/><use xlink:href="#g89" y="83504"/><use xlink:href="#g90" y="83521"/><use xlink:href="#g84" y="83538"/><use xlink:href="#g91" y="83555"/><use xlink:href="#g92" y="83572"/><use xlink:href="#g93" y="83589"/><use xlink:href="#g94" y="83606"/><use xlink:href="#g95" y="83623"/><use xlink:href="#g79" y="83640"/><use xlink:href="#g96" y="83657"/><use xlink:href="#g97" y="83674"/><use xlink:href="#g98" y="83691"/><use xlink:href="#g99" y="83708"/><use xlink:href="#g100" y="83725"/><use xlink:href="#g101" y="83742"/><use xlink:href="#g102" y="83759"/><use xlink:href="#g103" y="83776"/><use xlink:href="#g105" y="83793"/><use xlink:href="#g106" y="83810"/><use xlink:href="#g107" y="83827"/><use xlink:href="#g109" y="83844"/><use xlink:href="#g79" y="83861"/><use xlink:href="#g110" y="83878"/><use xlink:href="#g79" y="83895"/><use xlink:href="#g112" y="83912"/><rect x="256" y="83929" width="8" height="17" class="foreground"/><use xlink:href="#g130" y="83929"/></g><g><use xlink:href="#g66" y="83980"/><use xlink:href="#g67" y="83997"/><use xlink:href="#g68" y="84014"/><use xlink:href="#g69" y="84031"/><use xlink:href="#g70" y="84048"/><use xlink:href="#g68" y="84065"/><use xlink:href="#g71" y="84082"/><use xlink:href="#g72" y="84099"/><use xlink:href="#g73" y="84116"/><use xlink:href="#g74" y="84133"/><use xlink:href="#g75" y="84150"/><use xlink:href="#g68" y="84167"/><use xlink:href="#g76" y="84184"/><use xlink:href="#g77" y="84201"/><use xlink:href="#g78" y="84218"/><use xlink:href="#g79" y="84235"/><use xlink:href="#g80" y="84252"/><use xlink:href="#g81" y="84269"/><use xlink:href="#g82" y="84286"/><use xlink:href="#g83" y="84303"/><use xlink:href="#g84" y="84320"/><use xlink:href="#g85" y="84337"/><use xlink:href="#g87" y="84354"/><use xlink:href="#g88" y="84371"/><use xlink:href="#g89" y="84388"/><use xlink:href="#g90" y="84405"/><use xlink:href="#g84" y="84422"/><use xlink:href="#g91" y="84439"/><use xlink:href="#g92" y="84456"/><use xlink:href="#g93" y="84473"/><use xlink:href="#g94" y="84490"/><use xlink:href="#g95" y="84507"/><use xlink:href="#g79" y="84524"/><use xlink:href="#g96" y="84541"/><use xlink:href="#g97" y="84558"/><use xlink:href="#g98" y="84575"/><use xlink:href="#g99" y="84592"/><use xlink:href="#g100" y="84609"/><use xlink:href="#g101" y="84626"/><use xlink:href="#g102" y="84643"/><use xlink:href="#g103" y="84660"/><use xlink:href="#g105" y="84677"/><use xlink:href="#g106" y="84694"/><use xlink:href="#g107" y="84711"/><use xlink:href="#g109" y="84728"/><use xlink:href="#g79" y="84745"/><use xlink:href="#g110" y="84762"/><use xlink:href="#g79" y="84779"/><use xlink:href="#g112" y="84796"/><rect x="264" y="84813" width="8" height="17" class="foreground"/><use xlink:href="#g131" y="84813"/></g><g><use xlink:href="#g66" y="84864"/><use xlink:href="#g67" y="84881"/><use xlink:href="#g68" y="84898"/><use xlink:href="#g69" y="84915"/><use xlink:href="#g70" y="84932"/><use xlink:href="#g68" y="84949"/><use xlink:href="#g71" y="84966"/><use xlink:href="#g72" y="84983"/><use xlink:href="#g73" y="85000"/><use xlink:href="#g74" y="85017"/><use xlink:href="#g75" y="85034"/><use xlink:href="#g68" y="85051"/><use xlink:href="#g76" y="85068"/><use xlink:href="#g77" y="85085"/><use xlink:href="#g78" y="85102"/><use xlink:href="#g79" y="85119"/><use xlink:href="#g80" y="85136"/><use xlink:href="#g81" y="85153"/><use xlink:href="#g82" y="85170"/><use xlink:href="#g83" y="85187"/><use xlink:href="#g84" y="85204"/><use xlink:href="#g85" y="85221"/><use xlink:href="#g87" y="85238"/><use xlink:href="#g88" y="85255"/><use xlink:href="#g89" y="85272"/><use xlink:href="#g90" y="85289"/><use xlink:href="#g84" y="85306"/><use xlink:href="#g91" y="85323"/><use xlink:href="#g92" y="85340"/><use xlink:href="#g93" y="85357"/><use xlink:href="#g94" y="85374"/><use xlink:href="#g95" y="85391"/><use xlink:href="#g79" y="85408"/><use xlink:href="#g96" y="85425"/><use xlink:href="#g97" y="85442"/><use xlink:href="#g98" y="85459"/><use xlink:href="#g99" y="85476"/><use xlink:href="#g100" y="85493"/><use xlink:href="#g101" y="85510"/><use xlink:href="#g102" y="85527"/><use xlink:href="#g103" y="85544"/><use xlink:href="#g105" y="85561"/><use xlink:href="#g106" y="85578"/><use xlink:href="#g107" y="85595"/><use xlink:href="#g109" y="85612"/><use xlink:href="#g79" y="85629"/><use xlink:href="#g110" y="85646"/><use xlink:href="#g79" y="85663"/><use xlink:href="#g112" y="85680"/><rect x="272" y="85697" width="8" height="17" class="foreground"/><use xlink:href="#g132" y="85697"/></g><g><use xlink:href="#g66" y="85748"/><use xlink:href="#g67" y="85765"/><use xlink:href="#g68" y="85782"/><use xlink:href="#g69" y="85799"/><use xlink:href="#g70" y="85816"/><use xlink:href="#g68" y="85833"/><use xlink:href="#g71" y="85850"/><use xlink:href="#g72" y="85867"/><use xlink:href="#g73" y="85884"/><use xlink:href="#g74" y="85901"/><use xlink:href="#g75" y="85918"/><use xlink:href="#g68" y="85935"/><use xlink:href="#g76" y="85952"/><use xlink:href="#g77" y="85969"/><use xlink:href="#g78" y="85986"/><use xlink:href="#g79" y="86003"/><use xlink:href="#g80" y="86020"/><use xlink:href="#g81" y="86037"/><use xlink:href="#g82" y="86054"/><use xlink:href="#g83" y="86071"/><use xlink:href="#g84" y="86088"/><use xlink:href="#g85" y="86105"/><use xlink:href="#g87" y="86122"/><use xlink:href="#g88" y="86139"/><use xlink:href="#g89" y="86156"/><use xlink:href="#g90" y="86173"/><use xlink:href="#g84" y="86190"/><use xlink:href="#g91" y="86207"/><use xlink:href="#g92" y="86224"/><use xlink:href="#g93" y="86241"/><use xlink:href="#g94" y="86258"/><use xlink:href="#g95" y="86275"/><use xlink:href="#g79" y="86292"/><use xlink:href="#g96" y="86309"/><use xlink:href="#g97" y="86326"/><use xlink:href="#g98" y="86343"/><use xlink:href="#g99" y="86360"/><use xlink:href="#g100" y="86377"/><use xlink:href="#g101" y="86394"/><use xlink:href="#g102" y="86411"/><use xlink:href="#g103" y="86428"/><use xlink:href="#g105" y="86445"/><use xlink:href="#g106" y="86462"/><use xlink:href="#g107" y="86479"/><use xlink:href="#g109" y="86496"/><use xlink:href="#g79" y="86513"/><use xlink:href="#g110" y="86530"/><use xlink:href="#g79" y="86547"/><use xlink:href="#g112" y="86564"/><rect x="280" y="86581" width="8" height="17" class="foreground"/><use xlink:href="#g133" y="86581"/></g><g><use xlink:href="#g66" y="86632"/><use xlink:href="#g67" y="86649"/><use xlink:href="#g68" y="86666"/><use xlink:href="#g69" y="86683"/><use xlink:href="#g70" y="86700"/><use xlink:href="#g68" y="86717"/><use xlink:href="#g71" y="86734"/><use xlink:href="#g72" y="86751"/><use xlink:href="#g73" y="86768"/><use xlink:href="#g74" y="86785"/><use xlink:href="#g75" y="86802"/><use xlink:href="#g68" y="86819"/><use xlink:href="#g76" y="86836"/><use xlink:href="#g77" y="86853"/><use xlink:href="#g78" y="86870"/><use xlink:href="#g79" y="86887"/><use xlink:href="#g80" y="86904"/><use xlink:href="#g81" y="86921"/><use xlink:href="#g82" y="86938"/><use xlink:href="#g83" y="86955"/><use xlink:href="#g84" y="86972"/><use xlink:href="#g85" y="86989"/><use xlink:href="#g87" y="87006"/><use xlink:href="#g88" y="87023"/><use xlink:href="#g89" y="87040"/><use xlink:href="#g90" y="87057"/><use xlink:href="#g84" y="87074"/><use xlink:href="#g91" y="87091"/><use xlink:href="#g92" y="87108"/><use xlink:href="#g93" y="87125"/><use xlink:href="#g94" y="87142"/><use xlink:href="#g95" y="87159"/><use xlink:href="#g79" y="87176"/><use xlink:href="#g96" y="87193"/><use xlink:href="#g97" y="87210"/><use xlink:href="#g98" y="87227"/><use xlink:href="#g99" y="87244"/><use xlink:href="#g100" y="87261"/><use xlink:href="#g101" y="87278"/><use xlink:href="#g102" y="87295"/><use xlink:href="#g103" y="87312"/><use xlink:href="#g105" y="87329"/><use xlink:href="#g106" y="87346"/><use xlink:href="#g107" y="87363"/><use xlink:href="#g109" y="87380"/><use xlink:href="#g79" y="87397"/><use xlink:href="#g110" y="87414"/><use xlink:href="#g79" y="87431"/><use xlink:href="#g112" y="87448"/><rect x="288" y="87465" width="8" height="17" class="foreground"/><use xlink:href="#g134" y="87465"/></g><g><use xlink:href="#g66" y="87516"/><use xlink:href="#g67" y="87533"/><use xlink:href="#g68" y="87550"/><use xlink:href="#g69" y="87567"/><use xlink:href="#g70" y="87584"/><use xlink:href="#g68" y="87601"/><use xlink:href="#g71" y="87618"/><use xlink:href="#g72" y="87635"/><use xlink:href="#g73" y="87652"/><use xlink:href="#g74" y="87669"/><use xlink:href="#g75" y="87686"/><use xlink:href="#g68" y="87703"/><use xlink:href="#g76" y="87720"/><use xlink:href="#g77" y="87737"/><use xlink:href="#g78" y="87754"/><use xlink:href="#g79" y="87771"/><use xlink:href="#g80" y="87788"/><use xlink:href="#g81" y="87805"/><use xlink:href="#g82" y="87822"/><use xlink:href="#g83" y="87839"/><use xlink:href="#g84" y="87856"/><use xlink:href="#g85" y="87873"/><use xlink:href="#g87" y="87890"/><use xlink:href="#g88" y="87907"/><use xlink:href="#g89" y="87924"/><use xlink:href="#g90" y="87941"/><use xlink:href="#g84" y="87958"/><use xlink:href="#g91" y="87975"/><use xlink:href="#g92" y="87992"/><use xlink:href="#g93" y="88009"/><use xlink:href="#g94" y="88026"/><use xlink:href="#g95" y="88043"/><use xlink:href="#g79" y="88060"/><use xlink:href="#g96" y="88077"/><use xlink:href="#g97" y="88094"/><use xlink:href="#g98" y="88111"/><use xlink:href="#g99" y="88128"/><use xlink:href="#g100" y="88145"/><use xlink:href="#g101" y="88162"/><use xlink:href="#g102" y="88179"/><use xlink:href="#g103" y="88196"/><use xlink:href="#g105" y="88213"/><use xlink:href="#g106" y="88230"/><use xlink:href="#g107" y="88247"/><use xlink:href="#g109" y="88264"/><use xlink:href="#g79" y="88281"/><use xlink:href="#g110" y="88298"/><use xlink:href="#g79" y="88315"/><use xlink:href="#g112" y="88332"/><rect x="296" y="88349" width="8" height="17" class="foreground"/><use xlink:href="#g135" y="88349"/></g><g><use xlink:href="#g66" y="88400"/><use xlink:href="#g67" y="88417"/><use xlink:href="#g68" y="88434"/><use xlink:href="#g69" y="88451"/><use xlink:href="#g70" y="88468"/><use xlink:href="#g68" y="88485"/><use xlink:href="#g71" y="88502"/><use xlink:href="#g72" y="88519"/><use xlink:href="#g73" y="88536"/><use xlink:href="#g74" y="88553"/><use xlink:href="#g75" y="88570"/><use xlink:href="#g68" y="88587"/><use xlink:href="#g76" y="88604"/><use xlink:href="#g77" y="88621"/><use xlink:href="#g78" y="88638"/><use xlink:href="#g79" y="88655"/><use xlink:href="#g80" y="88672"/><use xlink:href="#g81" y="88689"/><use xlink:href="#g82" y="88706"/><use xlink:href="#g83" y="88723"/><use xlink:href="#g84" y="88740"/><use xlink:href="#g85" y="88757"/><use xlink:href="#g87" y="88774"/><use xlink:href="#g88" y="88791"/><use xlink:href="#g89" y="88808"/><use xlink:href="#g90" y="88825"/><use xlink:href="#g84" y="88842"/><use xlink:href="#g91" y="88859"/><use xlink:href="#g92" y="88876"/><use xlink:href="#g93" y="88893"/><use xlink:href="#g94" y="88910"/><use xlink:href="#g95" y="88927"/><use xlink:href="#g79" y="88944"/><use xlink:href="#g96" y="88961"/><use xlink:href="#g97" y="88978"/><use xlink:href="#g98" y="88995"/><use xlink:href="#g99" y="89012"/><use xlink:href="#g100" y="89029"/><use xlink:href="#g101" y="89046"/><use xlink:href="#g102" y="89063"/><use xlink:href="#g103" y="89080"/><use xlink:href="#g105" y="89097"/><use xlink:href="#g106" y="89114"/><use xlink:href="#g107" y="89131"/><use xlink:href="#g109" y="89148"/><use xlink:href="#g79" y="89165"/><use xlink:href="#g110" y="89182"/><use xlink:href="#g79" y="89199"/><use xlink:href="#g112" y="89216"/><rect x="304" y="89233" width="8" height="17" class="foreground"/><use xlink:href="#g136" y="89233"/></g><g><use xlink:href="#g66" y="89284"/><use xlink:href="#g67" y="89301"/><use xlink:href="#g68" y="89318"/><use xlink:href="#g69" y="89335"/><use xlink:href="#g70" y="89352"/><use xlink:href="#g68" y="89369"/><use xlink:href="#g71" y="89386"/><use xlink:href="#g72" y="89403"/><use xlink:href="#g73" y="89420"/><use xlink:href="#g74" y="89437"/><use xlink:href="#g75" y="89454"/><use xlink:href="#g68" y="89471"/><use xlink:href="#g76" y="89488"/><use xlink:href="#g77" y="89505"/><use xlink:href="#g78" y="89522"/><use xlink:href="#g79" y="89539"/><use xlink:href="#g80" y="89556"/><use xlink:href="#g81" y="89573"/><use xlink:href="#g82" y="89590"/><use xlink:href="#g83" y="89607"/><use xlink:href="#g84" y="89624"/><use xlink:href="#g85" y="89641"/><use xlink:href="#g87" y="89658"/><use xlink:href="#g88" y="89675"/><use xlink:href="#g89" y="89692"/><use xlink:href="#g90" y="89709"/><use xlink:href="#g84" y="89726"/><use xlink:href="#g91" y="89743"/><use xlink:href="#g92" y="89760"/><use xlink:href="#g93" y="89777"/><use xlink:href="#g94" y="89794"/><use xlink:href="#g95" y="89811"/><use xlink:href="#g79" y="89828"/><use xlink:href="#g96" y="89845"/><use xlink:href="#g97" y="89862"/><use xlink:href="#g98" y="89879"/><use xlink:href="#g99" y="89896"/><use xlink:href="#g100" y="89913"/><use xlink:href="#g101" y="89930"/><use xlink:href="#g102" y="89947"/><use xlink:href="#g103" y="89964"/><use xlink:href="#g105" y="89981"/><use xlink:href="#g106" y="89998"/><use xlink:href="#g107" y="90015"/><use xlink:href="#g109" y="90032"/><use xlink:href="#g79" y="90049"/><use xlink:href="#g110" y="90066"/><use xlink:href="#g79" y="90083"/><use xlink:href="#g112" y="90100"/><rect x="312" y="90117" width="8" height="17" class="foreground"/><use xlink:href="#g137" y="90117"/></g><g><use xlink:href="#g66" y="90168"/><use xlink:href="#g67" y="90185"/><use xlink:href="#g68" y="90202"/><use xlink:href="#g69" y="90219"/><use xlink:href="#g70" y="90236"/><use xlink:href="#g68" y="90253"/><use xlink:href="#g71" y="90270"/><use xlink:href="#g72" y="90287"/><use xlink:href="#g73" y="90304"/><use xlink:href="#g74" y="90321"/><use xlink:href="#g75" y="90338"/><use xlink:href="#g68" y="90355"/><use xlink:href="#g76" y="90372"/><use xlink:href="#g77" y="90389"/><use xlink:href="#g78" y="90406"/><use xlink:href="#g79" y="90423"/><use xlink:href="#g80" y="90440"/><use xlink:href="#g81" y="90457"/><use xlink:href="#g82" y="90474"/><use xlink:href="#g83" y="90491"/><use xlink:href="#g84" y="90508"/><use xlink:href="#g85" y="90525"/><use xlink:href="#g87" y="90542"/><use xlink:href="#g88" y="90559"/><use xlink:href="#g89" y="90576"/><use xlink:href="#g90" y="90593"/><use xlink:href="#g84" y="90610"/><use xlink:href="#g91" y="90627"/><use xlink:href="#g92" y="90644"/><use xlink:href="#g93" y="90661"/><use xlink:href="#g94" y="90678"/><use xlink:href="#g95" y="90695"/><use xlink:href="#g79" y="90712"/><use xlink:href="#g96" y="90729"/><use xlink:href="#g97" y="90746"/><use xlink:href="#g98" y="90763"/><use xlink:href="#g99" y="90780"/><use xlink:href="#g100" y="90797"/><use xlink:href="#g101" y="90814"/><use xlink:href="#g102" y="90831"/><use xlink:href="#g103" y="90848"/><use xlink:href="#g105" y="90865"/><use xlink:href="#g106" y="90882"/><use xlink:href="#g107" y="90899"/><use xlink:href="#g109" y="90916"/><use xlink:href="#g79" y="90933"/><use xlink:href="#g110" y="90950"/><use xlink:href="#g79" y="90967"/><use xlink:href="#g112" y="90984"/><rect x="320" y="91001" width="8" height="17" class="foreground"/><use xlink:href="#g138" y="91001"/></g><g><use xlink:href="#g66" y="91052"/><use xlink:href="#g67" y="91069"/><use xlink:href="#g68" y="91086"/><use xlink:href="#g69" y="91103"/><use xlink:href="#g70" y="91120"/><use xlink:href="#g68" y="91137"/><use xlink:href="#g71" y="91154"/><use xlink:href="#g72" y="91171"/><use xlink:href="#g73" y="91188"/><use xlink:href="#g74" y="91205"/><use xlink:href="#g75" y="91222"/><use xlink:href="#g68" y="91239"/><use xlink:href="#g76" y="91256"/><use xlink:href="#g77" y="91273"/><use xlink:href="#g78" y="91290"/><use xlink:href="#g79" y="91307"/><use xlink:href="#g80" y="91324"/><use xlink:href="#g81" y="91341"/><use xlink:href="#g82" y="91358"/><use xlink:href="#g83" y="91375"/><use xlink:href="#g84" y="91392"/><use xlink:href="#g85" y="91409"/><use xlink:href="#g87" y="91426"/><use xlink:href="#g88" y="91443"/><use xlink:href="#g89" y="91460"/><use xlink:href="#g90" y="91477"/><use xlink:href="#g84" y="91494"/><use xlink:href="#g91" y="91511"/><use xlink:href="#g92" y="91528"/><use xlink:href="#g93" y="91545"/><use xlink:href="#g94" y="91562"/><use xlink:href="#g95" y="91579"/><use xlink:href="#g79" y="91596"/><use xlink:href="#g96" y="91613"/><use xlink:href="#g97" y="91630"/><use xlink:href="#g98" y="91647"/><use xlink:href="#g99" y="91664"/><use xlink:href="#g100" y="91681"/><use xlink:href="#g101" y="91698"/><use xlink:href="#g102" y="91715"/><use xlink:href="#g103" y="91732"/><use xlink:href="#g105" y="91749"/><use xlink:href="#g106" y="91766"/><use xlink:href="#g107" y="91783"/><use xlink:href="#g109" y="91800"/><use xlink:href="#g79" y="91817"/><use xlink:href="#g110" y="91834"/><use xlink:href="#g79" y="91851"/><use xlink:href="#g112" y="91868"/><rect x="328" y="91885" width="8" height="17" class="foreground"/><use xlink:href="#g139" y="91885"/></g><g><use xlink:href="#g66" y="91936"/><use xlink:href="#g67" y="91953"/><use xlink:href="#g68" y="91970"/><use xlink:href="#g69" y="91987"/><use xlink:href="#g70" y="92004"/><use xlink:href="#g68" y="92021"/><use xlink:href="#g71" y="92038"/><use xlink:href="#g72" y="92055"/><use xlink:href="#g73" y="92072"/><use xlink:href="#g74" y="92089"/><use xlink:href="#g75" y="92106"/><use xlink:href="#g68" y="92123"/><use xlink:href="#g76" y="92140"/><use xlink:href="#g77" y="92157"/><use xlink:href="#g78" y="92174"/><use xlink:href="#g79" y="92191"/><use xlink:href="#g80" y="92208"/><use xlink:href="#g81" y="92225"/><use xlink:href="#g82" y="92242"/><use xlink:href="#g83" y="92259"/><use xlink:href="#g84" y="92276"/><use xlink:href="#g85" y="92293"/><use xlink:href="#g87" y="92310"/><use xlink:href="#g88" y="92327"/><use xlink:href="#g89" y="92344"/><use xlink:href="#g90" y="92361"/><use xlink:href="#g84" y="92378"/><use xlink:href="#g91" y="92395"/><use xlink:href="#g92" y="92412"/><use xlink:href="#g93" y="92429"/><use xlink:href="#g94" y="92446"/><use xlink:href="#g95" y="92463"/><use xlink:href="#g79" y="92480"/><use xlink:href="#g96" y="92497"/><use xlink:href="#g97" y="92514"/><use xlink:href="#g98" y="92531"/><use xlink:href="#g99" y="92548"/><use xlink:href="#g100" y="92565"/><use xlink:href="#g101" y="92582"/><use xlink:href="#g102" y="92599"/><use xlink:href="#g103" y="92616"/><use xlink:href="#g105" y="92633"/><use xlink:href="#g106" y="92650"/><use xlink:href="#g107" y="92667"/><use xlink:href="#g109" y="92684"/><use xlink:href="#g79" y="92701"/><use xlink:href="#g110" y="92718"/><use xlink:href="#g79" y="92735"/><use xlink:href="#g112" y="92752"/><rect x="336" y="92769" width="8" height="17" class="foreground"/><use xlink:href="#g140" y="92769"/></g><g><use xlink:href="#g66" y="92820"/><use xlink:href="#g67" y="92837"/><use xlink:href="#g68" y="92854"/><use xlink:href="#g69" y="92871"/><use xlink:href="#g70" y="92888"/><use xlink:href="#g68" y="92905"/><use xlink:href="#g71" y="92922"/><use xlink:href="#g72" y="92939"/><use xlink:href="#g73" y="92956"/><use xlink:href="#g74" y="92973"/><use xlink:href="#g75" y="92990"/><use xlink:href="#g68" y="93007"/><use xlink:href="#g76" y="93024"/><use xlink:href="#g77" y="93041"/><use xlink:href="#g78" y="93058"/><use xlink:href="#g79" y="93075"/><use xlink:href="#g80" y="93092"/><use xlink:href="#g81" y="93109"/><use xlink:href="#g82" y="93126"/><use xlink:href="#g83" y="93143"/><use xlink:href="#g84" y="93160"/><use xlink:href="#g85" y="93177"/><use xlink:href="#g87" y="93194"/><use xlink:href="#g88" y="93211"/><use xlink:href="#g89" y="93228"/><use xlink:href="#g90" y="93245"/><use xlink:href="#g84" y="93262"/><use xlink:href="#g91" y="93279"/><use xlink:href="#g92" y="93296"/><use xlink:href="#g93" y="93313"/><use xlink:href="#g94" y="93330"/><use xlink:href="#g95" y="93347"/><use xlink:href="#g79" y="93364"/><use xlink:href="#g96" y="93381"/><use xlink:href="#g97" y="93398"/><use xlink:href="#g98" y="93415"/><use xlink:href="#g99" y="93432"/><use xlink:href="#g100" y="93449"/><use xlink:href="#g101" y="93466"/><use xlink:href="#g102" y="93483"/><use xlink:href="#g103" y="93500"/><use xlink:href="#g105" y="93517"/><use xlink:href="#g106" y="93534"/><use xlink:href="#g107" y="93551"/><use xlink:href="#g109" y="93568"/><use xlink:href="#g79" y="93585"/><use xlink:href="#g110" y="93602"/><use xlink:href="#g79" y="93619"/><use xlink:href="#g112" y="93636"/><rect x="344" y="93653" width="8" height="17" class="foreground"/><use xlink:href="#g141" y="93653"/></g><g><use xlink:href="#g67" y="93704"/><use xlink:href="#g68" y="93721"/><use xlink:href="#g69" y="93738"/><use xlink:href="#g70" y="93755"/><use xlink:href="#g68" y="93772"/><use xlink:href="#g71" y="93789"/><use xlink:href="#g72" y="93806"/><use xlink:href="#g73" y="93823"/><use xlink:href="#g74" y="93840"/><use xlink:href="#g75" y="93857"/><use xlink:href="#g68" y="93874"/><use xlink:href="#g76" y="93891"/><use xlink:href="#g77" y="93908"/><use xlink:href="#g78" y="93925"/><use xlink:href="#g79" y="93942"/><use xlink:href="#g80" y="93959"/><use xlink:href="#g81" y="93976"/><use xlink:href="#g82" y="93993"/><use xlink:href="#g83" y="94010"/><use xlink:href="#g84" y="94027"/><use xlink:href="#g85" y="94044"/><use xlink:href="#g87" y="94061"/><use xlink:href="#g88" y="94078"/><use xlink:href="#g89" y="94095"/><use xlink:href="#g90" y="94112"/><use xlink:href="#g84" y="94129"/><use xlink:href="#g91" y="94146"/><use xlink:href="#g92" y="94163"/><use xlink:href="#g93" y="94180"/><use xlink:href="#g94" y="94197"/><use xlink:href="#g95" y="94214"/><use xlink:href="#g79" y="94231"/><use xlink:href="#g96" y="94248"/><use xlink:href="#g97" y="94265"/><use xlink:href="#g98" y="94282"/><use xlink:href="#g99" y="94299"/><use xlink:href="#g100" y="94316"/><use xlink:href="#g101" y="94333"/><use xlink:href="#g102" y="94350"/><use xlink:href="#g103" y="94367"/><use xlink:href="#g105" y="94384"/><use xlink:href="#g106" y="94401"/><use xlink:href="#g107" y="94418"/><use xlink:href="#g109" y="94435"/><use xlink:href="#g79" y="94452"/><use xlink:href="#g110" y="94469"/><use xlink:href="#g79" y="94486"/><use xlink:href="#g112" y="94503"/><use xlink:href="#g142" y="94520"/><rect x="0" y="94537" width="8" height="17" class="foreground"/><use xlink:href="#g34" y="94537"/></g><g><use xlink:href="#g67" y="94588"/><use xlink:href="#g68" y="94605"/><use xlink:href="#g69" y="94622"/><use xlink:href="#g70" y="94639"/><use xlink:href="#g68" y="94656"/><use xlink:href="#g71" y="94673"/><use xlink:href="#g72" y="94690"/><use xlink:href="#g73" y="94707"/><use xlink:href="#g74" y="94724"/><use xlink:href="#g75" y="94741"/><use xlink:href="#g68" y="94758"/><use xlink:href="#g76" y="94775"/><use xlink:href="#g77" y="94792"/><use xlink:href="#g78" y="94809"/><use xlink:href="#g79" y="94826"/><use xlink:href="#g80" y="94843"/><use xlink:href="#g81" y="94860"/><use xlink:href="#g82" y="94877"/><use xlink:href="#g83" y="94894"/><use xlink:href="#g84" y="94911"/><use xlink:href="#g85" y="94928"/><use xlink:href="#g87" y="94945"/><use xlink:href="#g88" y="94962"/><use xlink:href="#g89" y="94979"/><use xlink:href="#g90" y="94996"/><use xlink:href="#g84" y="95013"/><use xlink:href="#g91" y="95030"/><use xlink:href="#g92" y="95047"/><use xlink:href="#g93" y="95064"/><use xlink:href="#g94" y="95081"/><use xlink:href="#g95" y="95098"/><use xlink:href="#g79" y="95115"/><use xlink:href="#g96" y="95132"/><use xlink:href="#g97" y="95149"/><use xlink:href="#g98" y="95166"/><use xlink:href="#g99" y="95183"/><use xlink:href="#g100" y="95200"/><use xlink:href="#g101" y="95217"/><use xlink:href="#g102" y="95234"/><use xlink:href="#g103" y="95251"/><use xlink:href="#g105" y="95268"/><use xlink:href="#g106" y="95285"/><use xlink:href="#g107" y="95302"/><use xlink:href="#g109" y="95319"/><use xlink:href="#g79" y="95336"/><use xlink:href="#g110" y="95353"/><use xlink:href="#g79" y="95370"/><use xlink:href="#g112" y="95387"/><use xlink:href="#g142" y="95404"/><rect x="0" y="95421" width="8" height="17" class="foreground"/><use xlink:href="#g34" y="95421"/></g><g><use xlink:href="#g69" y="95472"/><use xlink:href="#g70" y="95489"/><use xlink:href="#g68" y="95506"/><use xlink:href="#g71" y="95523"/><use xlink:href="#g72" y="95540"/><use xlink:href="#g73" y="95557"/><use xlink:href="#g74" y="95574"/><use xlink:href="#g75" y="95591"/><use xlink:href="#g68" y="95608"/><use xlink:href="#g76" y="95625"/><use xlink:href="#g77" y="95642"/><use xlink:href="#g78" y="95659"/><use xlink:href="#g79" y="95676"/><use xlink:href="#g80" y="95693"/><use xlink:href="#g81" y="95710"/><use xlink:href="#g82" y="95727"/><use xlink:href="#g83" y="95744"/><use xlink:href="#g84" y="95761"/><use xlink:href="#g85" y="95778"/><use xlink:href="#g87" y="95795"/><use xlink:href="#g88" y="95812"/><use xlink:href="#g89" y="95829"/><use xlink:href="#g90" y="95846"/><use xlink:href="#g84" y="95863"/><use xlink:href="#g91" y="95880"/><use xlink:href="#g92" y="95897"/><use xlink:href="#g93" y="95914"/><use xlink:href="#g94" y="95931"/><use xlink:href="#g95" y="95948"/><use xlink:href="#g79" y="95965"/><use xlink:href="#g96" y="95982"/><use xlink:href="#g97" y="95999"/><use xlink:href="#g98" y="96016"/><use xlink:href="#g99" y="96033"/><use xlink:href="#g100" y="96050"/><use xlink:href="#g101" y="96067"/><use xlink:href="#g102" y="96084"/><use xlink:href="#g103" y="96101"/><use xlink:href="#g105" y="96118"/><use xlink:href="#g106" y="96135"/><use xlink:href="#g107" y="96152"/><use xlink:href="#g109" y="96169"/><use xlink:href="#g79" y="96186"/><use xlink:href="#g110" y="96203"/><use xlink:href="#g79" y="96220"/><use xlink:href="#g112" y="96237"/><use xlink:href="#g142" y="96254"/><use xlink:href="#g35" y="96271"/><use xlink:href="#g36" y="96288"/><rect x="0" y="96305" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="96305"/></g><g><use xlink:href="#g68" y="96356"/><use xlink:href="#g71" y="96373"/><use xlink:href="#g72" y="96390"/><use xlink:href="#g73" y="96407"/><use xlink:href="#g74" y="96424"/><use xlink:href="#g75" y="96441"/><use xlink:href="#g68" y="96458"/><use xlink:href="#g76" y="96475"/><use xlink:href="#g77" y="96492"/><use xlink:href="#g78" y="96509"/><use xlink:href="#g79" y="96526"/><use xlink:href="#g80" y="96543"/><use xlink:href="#g81" y="96560"/><use xlink:href="#g82" y="96577"/><use xlink:href="#g83" y="96594"/><use xlink:href="#g84" y="96611"/><use xlink:href="#g85" y="96628"/><use xlink:href="#g87" y="96645"/><use xlink:href="#g88" y="96662"/><use xlink:href="#g89" y="96679"/><use xlink:href="#g90" y="96696"/><use xlink:href="#g84" y="96713"/><use xlink:href="#g91" y="96730"/><use xlink:href="#g92" y="96747"/><use xlink:href="#g93" y="96764"/><use xlink:href="#g94" y="96781"/><use xlink:href="#g95" y="96798"/><use xlink:href="#g79" y="96815"/><use xlink:href="#g96" y="96832"/><use xlink:href="#g97" y="96849"/><use xlink:href="#g98" y="96866"/><use xlink:href="#g99" y="96883"/><use xlink:href="#g100" y="96900"/><use xlink:href="#g101" y="96917"/><use xlink:href="#g102" y="96934"/><use xlink:href="#g103" y="96951"/><use xlink:href="#g105" y="96968"/><use xlink:href="#g106" y="96985"/><use xlink:href="#g107" y="97002"/><use xlink:href="#g109" y="97019"/><use xlink:href="#g79" y="97036"/><use xlink:href="#g110" y="97053"/><use xlink:href="#g79" y="97070"/><use xlink:href="#g112" y="97087"/><use xlink:href="#g142" y="97104"/><use xlink:href="#g35" y="97121"/><use xlink:href="#g36" y="97138"/><use xlink:href="#g143" y="97155"/><use xlink:href="#g144" y="97172"/><rect x="0" y="97189" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="97189"/></g><g><use xlink:href="#g74" y="97240"/><use xlink:href="#g75" y="97257"/><use xlink:href="#g68" y="97274"/><use xlink:href="#g76" y="97291"/><use xlink:href="#g77" y="97308"/><use xlink:href="#g78" y="97325"/><use xlink:href="#g79" y="97342"/><use xlink:href="#g80" y="97359"/><use xlink:href="#g81" y="97376"/><use xlink:href="#g82" y="97393"/><use xlink:href="#g83" y="97410"/><use xlink:href="#g84" y="97427"/><use xlink:href="#g85" y="97444"/><use xlink:href="#g87" y="97461"/><use xlink:href="#g88" y="97478"/><use xlink:href="#g89" y="97495"/><use xlink:href="#g90" y="97512"/><use xlink:href="#g84" y="97529"/><use xlink:href="#g91" y="97546"/><use xlink:href="#g92" y="97563"/><use xlink:href="#g93" y="97580"/><use xlink:href="#g94" y="97597"/><use xlink:href="#g95" y="97614"/><use xlink:href="#g79" y="97631"/><use xlink:href="#g96" y="97648"/><use xlink:href="#g97" y="97665"/><use xlink:href="#g98" y="97682"/><use xlink:href="#g99" y="97699"/><use xlink:href="#g100" y="97716"/><use xlink:href="#g101" y="97733"/><use xlink:href="#g102" y="97750"/><use xlink:href="#g103" y="97767"/><use xlink:href="#g105" y="97784"/><use xlink:href="#g106" y="97801"/><use xlink:href="#g107" y="97818"/><use xlink:href="#g109" y="97835"/><use xlink:href="#g79" y="97852"/><use xlink:href="#g110" y="97869"/><use xlink:href="#g79" y="97886"/><use xlink:href="#g112" y="97903"/><use xlink:href="#g142" y="97920"/><use xlink:href="#g35" y="97937"/><use xlink:href="#g36" y="97954"/><use xlink:href="#g143" y="97971"/><use xlink:href="#g144" y="97988"/><use xlink:href="#g145" y="98005"/><use xlink:href="#g146" y="98022"/><use xlink:href="#g147" y="98039"/><use xlink:href="#g148" y="98056"/><rect x="0" y="98073" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="98073"/></g><g><use xlink:href="#g74" y="98124"/><use xlink:href="#g75" y="98141"/><use xlink:href="#g68" y="98158"/><use xlink:href="#g76" y="98175"/><use xlink:href="#g77" y="98192"/><use xlink:href="#g78" y="98209"/><use xlink:href="#g79" y="98226"/><use xlink:href="#g80" y="98243"/><use xlink:href="#g81" y="98260"/><use xlink:href="#g82" y="98277"/><use xlink:href="#g83" y="98294"/><use xlink:href="#g84" y="98311"/><use xlink:href="#g85" y="98328"/><use xlink:href="#g87" y="98345"/><use xlink:href="#g88" y="98362"/><use xlink:href="#g89" y="98379"/><use xlink:href="#g90" y="98396"/><use xlink:href="#g84" y="98413"/><use xlink:href="#g91" y="98430"/><use xlink:href="#g92" y="98447"/><use xlink:href="#g93" y="98464"/><use xlink:href="#g94" y="98481"/><use xlink:href="#g95" y="98498"/><use xlink:href="#g79" y="98515"/><use xlink:href="#g96" y="98532"/><use xlink:href="#g97" y="98549"/><use xlink:href="#g98" y="98566"/><use xlink:href="#g99" y="98583"/><use xlink:href="#g100" y="98600"/><use xlink:href="#g101" y="98617"/><use xlink:href="#g102" y="98634"/><use xlink:href="#g103" y="98651"/><use xlink:href="#g105" y="98668"/><use xlink:href="#g106" y="98685"/><use xlink:href="#g107" y="98702"/><use xlink:href="#g109" y="98719"/><use xlink:href="#g79" y="98736"/><use xlink:href="#g110" y="98753"/><use xlink:href="#g79" y="98770"/><use xlink:href="#g112" y="98787"/><use xlink:href="#g142" y="98804"/><use xlink:href="#g35" y="98821"/><use xlink:href="#g36" y="98838"/><use xlink:href="#g143" y="98855"/><use xlink:href="#g144" y="98872"/><use xlink:href="#g145" y="98889"/><use xlink:href="#g146" y="98906"/><use xlink:href="#g147" y="98923"/><use xlink:href="#g148" y="98940"/><rect x="0" y="98957" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="98957"/></g><g><use xlink:href="#g74" y="99008"/><use xlink:href="#g75" y="99025"/><use xlink:href="#g68" y="99042"/><use xlink:href="#g76" y="99059"/><use xlink:href="#g77" y="99076"/><use xlink:href="#g78" y="99093"/><use xlink:href="#g79" y="99110"/><use xlink:href="#g80" y="99127"/><use xlink:href="#g81" y="99144"/><use xlink:href="#g82" y="99161"/><use xlink:href="#g83" y="99178"/><use xlink:href="#g84" y="99195"/><use xlink:href="#g85" y="99212"/><use xlink:href="#g87" y="99229"/><use xlink:href="#g88" y="99246"/><use xlink:href="#g89" y="99263"/><use xlink:href="#g90" y="99280"/><use xlink:href="#g84" y="99297"/><use xlink:href="#g91" y="99314"/><use xlink:href="#g92" y="99331"/><use xlink:href="#g93" y="99348"/><use xlink:href="#g94" y="99365"/><use xlink:href="#g95" y="99382"/><use xlink:href="#g79" y="99399"/><use xlink:href="#g96" y="99416"/><use xlink:href="#g97" y="99433"/><use xlink:href="#g98" y="99450"/><use xlink:href="#g99" y="99467"/><use xlink:href="#g100" y="99484"/><use xlink:href="#g101" y="99501"/><use xlink:href="#g102" y="99518"/><use xlink:href="#g103" y="99535"/><use xlink:href="#g105" y="99552"/><use xlink:href="#g106" y="99569"/><use xlink:href="#g107" y="99586"/><use xlink:href="#g109" y="99603"/><use xlink:href="#g79" y="99620"/><use xlink:href="#g110" y="99637"/><use xlink:href="#g79" y="99654"/><use xlink:href="#g112" y="99671"/><use xlink:href="#g142" y="99688"/><use xlink:href="#g35" y="99705"/><use xlink:href="#g36" y="99722"/><use xlink:href="#g143" y="99739"/><use xlink:href="#g144" y="99756"/><use xlink:href="#g145" y="99773"/><use xlink:href="#g146" y="99790"/><use xlink:href="#g147" y="99807"/><use xlink:href="#g148" y="99824"/><rect x="112" y="99841" width="8" height="17" class="foreground"/><use xlink:href="#g37" y="99841"/></g><g><use xlink:href="#g74" y="99892"/><use xlink:href="#g75" y="99909"/><use xlink:href="#g68" y="99926"/><use xlink:href="#g76" y="99943"/><use xlink:href="#g77" y="99960"/><use xlink:href="#g78" y="99977"/><use xlink:href="#g79" y="99994"/><use xlink:href="#g80" y="100011"/><use xlink:href="#g81" y="100028"/><use xlink:href="#g82" y="100045"/><use xlink:href="#g83" y="100062"/><use xlink:href="#g84" y="100079"/><use xlink:href="#g85" y="100096"/><use xlink:href="#g87" y="100113"/><use xlink:href="#g88" y="100130"/><use xlink:href="#g89" y="100147"/><use xlink:href="#g90" y="100164"/><use xlink:href="#g84" y="100181"/><use xlink:href="#g91" y="100198"/><use xlink:href="#g92" y="100215"/><use xlink:href="#g93" y="100232"/><use xlink:href="#g94" y="100249"/><use xlink:href="#g95" y="100266"/><use xlink:href="#g79" y="100283"/><use xlink:href="#g96" y="100300"/><use xlink:href="#g97" y="100317"/><use xlink:href="#g98" y="100334"/><use xlink:href="#g99" y="100351"/><use xlink:href="#g100" y="100368"/><use xlink:href="#g101" y="100385"/><use xlink:href="#g102" y="100402"/><use xlink:href="#g103" y="100419"/><use xlink:href="#g105" y="100436"/><use xlink:href="#g106" y="100453"/><use xlink:href="#g107" y="100470"/><use xlink:href="#g109" y="100487"/><use xlink:href="#g79" y="100504"/><use xlink:href="#g110" y="100521"/><use xlink:href="#g79" y="100538"/><use xlink:href="#g112" y="100555"/><use xlink:href="#g142" y="100572"/><use xlink:href="#g35" y="100589"/><use xlink:href="#g36" y="100606"/><use xlink:href="#g143" y="100623"/><use xlink:href="#g144" y="100640"/><use xlink:href="#g145" y="100657"/><use xlink:href="#g146" y="100674"/><use xlink:href="#g147" y="100691"/><use xlink:href="#g148" y="100708"/><rect x="112" y="100725" width="8" height="17" class="foreground"/><use xlink:href="#g37" y="100725"/></g><g><use xlink:href="#g74" y="100776"/><use xlink:href="#g75" y="100793"/><use xlink:href="#g68" y="100810"/><use xlink:href="#g76" y="100827"/><use xlink:href="#g77" y="100844"/><use xlink:href="#g78" y="100861"/><use xlink:href="#g79" y="100878"/><use xlink:href="#g80" y="100895"/><use xlink:href="#g81" y="100912"/><use xlink:href="#g82" y="100929"/><use xlink:href="#g83" y="100946"/><use xlink:href="#g84" y="100963"/><use xlink:href="#g85" y="100980"/><use xlink:href="#g87" y="100997"/><use xlink:href="#g88" y="101014"/><use xlink:href="#g89" y="101031"/><use xlink:href="#g90" y="101048"/><use xlink:href="#g84" y="101065"/><use xlink:href="#g91" y="101082"/><use xlink:href="#g92" y="101099"/><use xlink:href="#g93" y="101116"/><use xlink:href="#g94" y="101133"/><use xlink:href="#g95" y="101150"/><use xlink:href="#g79" y="101167"/><use xlink:href="#g96" y="101184"/><use xlink:href="#g97" y="101201"/><use xlink:href="#g98" y="101218"/><use xlink:href="#g99" y="101235"/><use xlink:href="#g100" y="101252"/><use xlink:href="#g101" y="101269"/><use xlink:href="#g102" y="101286"/><use xlink:href="#g103" y="101303"/><use xlink:href="#g105" y="101320"/><use xlink:href="#g106" y="101337"/><use xlink:href="#g107" y="101354"/><use xlink:href="#g109" y="101371"/><use xlink:href="#g79" y="101388"/><use xlink:href="#g110" y="101405"/><use xlink:href="#g79" y="101422"/><use xlink:href="#g112" y="101439"/><use xlink:href="#g142" y="101456"/><use xlink:href="#g35" y="101473"/><use xlink:href="#g36" y="101490"/><use xlink:href="#g143" y="101507"/><use xlink:href="#g144" y="101524"/><use xlink:href="#g145" y="101541"/><use xlink:href="#g146" y="101558"/><use xlink:href="#g147" y="101575"/><use xlink:href="#g148" y="101592"/><rect x="120" y="101609" width="8" height="17" class="foreground"/><use xlink:href="#g149" y="101609"/></g><g><use xlink:href="#g74" y="101660"/><use xlink:href="#g75" y="101677"/><use xlink:href="#g68" y="101694"/><use xlink:href="#g76" y="101711"/><use xlink:href="#g77" y="101728"/><use xlink:href="#g78" y="101745"/><use xlink:href="#g79" y="101762"/><use xlink:href="#g80" y="101779"/><use xlink:href="#g81" y="101796"/><use xlink:href="#g82" y="101813"/><use xlink:href="#g83" y="101830"/><use xlink:href="#g84" y="101847"/><use xlink:href="#g85" y="101864"/><use xlink:href="#g87" y="101881"/><use xlink:href="#g88" y="101898"/><use xlink:href="#g89" y="101915"/><use xlink:href="#g90" y="101932"/><use xlink:href="#g84" y="101949"/><use xlink:href="#g91" y="101966"/><use xlink:href="#g92" y="101983"/><use xlink:href="#g93" y="102000"/><use xlink:href="#g94" y="102017"/><use xlink:href="#g95" y="102034"/><use xlink:href="#g79" y="102051"/><use xlink:href="#g96" y="102068"/><use xlink:href="#g97" y="102085"/><use xlink:href="#g98" y="102102"/><use xlink:href="#g99" y="102119"/><use xlink:href="#g100" y="102136"/><use xlink:href="#g101" y="102153"/><use xlink:href="#g102" y="102170"/><use xlink:href="#g103" y="102187"/><use xlink:href="#g105" y="102204"/><use xlink:href="#g106" y="102221"/><use xlink:href="#g107" y="102238"/><use xlink:href="#g109" y="102255"/><use xlink:href="#g79" y="102272"/><use xlink:href="#g110" y="102289"/><use xlink:href="#g79" y="102306"/><use xlink:href="#g112" y="102323"/><use xlink:href="#g142" y="102340"/><use xlink:href="#g35" y="102357"/><use xlink:href="#g36" y="102374"/><use xlink:href="#g143" y="102391"/><use xlink:href="#g144" y="102408"/><use xlink:href="#g145" y="102425"/><use xlink:href="#g146" y="102442"/><use xlink:href="#g147" y="102459"/><use xlink:href="#g148" y="102476"/><rect x="128" y="102493" width="8" height="17" class="foreground"/><use xlink:href="#g150" y="102493"/></g><g><use xlink:href="#g74" y="102544"/><use xlink:href="#g75" y="102561"/><use xlink:href="#g68" y="102578"/><use xlink:href="#g76" y="102595"/><use xlink:href="#g77" y="102612"/><use xlink:href="#g78" y="102629"/><use xlink:href="#g79" y="102646"/><use xlink:href="#g80" y="102663"/><use xlink:href="#g81" y="102680"/><use xlink:href="#g82" y="102697"/><use xlink:href="#g83" y="102714"/><use xlink:href="#g84" y="102731"/><use xlink:href="#g85" y="102748"/><use xlink:href="#g87" y="102765"/><use xlink:href="#g88" y="102782"/><use xlink:href="#g89" y="102799"/><use xlink:href="#g90" y="102816"/><use xlink:href="#g84" y="102833"/><use xlink:href="#g91" y="102850"/><use xlink:href="#g92" y="102867"/><use xlink:href="#g93" y="102884"/><use xlink:href="#g94" y="102901"/><use xlink:href="#g95" y="102918"/><use xlink:href="#g79" y="102935"/><use xlink:href="#g96" y="102952"/><use xlink:href="#g97" y="102969"/><use xlink:href="#g98" y="102986"/><use xlink:href="#g99" y="103003"/><use xlink:href="#g100" y="103020"/><use xlink:href="#g101" y="103037"/><use xlink:href="#g102" y="103054"/><use xlink:href="#g103" y="103071"/><use xlink:href="#g105" y="103088"/><use xlink:href="#g106" y="103105"/><use xlink:href="#g107" y="103122"/><use xlink:href="#g109" y="103139"/><use xlink:href="#g79" y="103156"/><use xlink:href="#g110" y="103173"/><use xlink:href="#g79" y="103190"/><use xlink:href="#g112" y="103207"/><use xlink:href="#g142" y="103224"/><use xlink:href="#g35" y="103241"/><use xlink:href="#g36" y="103258"/><use xlink:href="#g143" y="103275"/><use xlink:href="#g144" y="103292"/><use xlink:href="#g145" y="103309"/><use xlink:href="#g146" y="103326"/><use xlink:href="#g147" y="103343"/><use xlink:href="#g148" y="103360"/><rect x="136" y="103377" width="8" height="17" class="foreground"/><use xlink:href="#g151" y="103377"/></g><g><use xlink:href="#g74" y="103428"/><use xlink:href="#g75" y="103445"/><use xlink:href="#g68" y="103462"/><use xlink:href="#g76" y="103479"/><use xlink:href="#g77" y="103496"/><use xlink:href="#g78" y="103513"/><use xlink:href="#g79" y="103530"/><use xlink:href="#g80" y="103547"/><use xlink:href="#g81" y="103564"/><use xlink:href="#g82" y="103581"/><use xlink:href="#g83" y="103598"/><use xlink:href="#g84" y="103615"/><use xlink:href="#g85" y="103632"/><use xlink:href="#g87" y="103649"/><use xlink:href="#g88" y="103666"/><use xlink:href="#g89" y="103683"/><use xlink:href="#g90" y="103700"/><use xlink:href="#g84" y="103717"/><use xlink:href="#g91" y="103734"/><use xlink:href="#g92" y="103751"/><use xlink:href="#g93" y="103768"/><use xlink:href="#g94" y="103785"/><use xlink:href="#g95" y="103802"/><use xlink:href="#g79" y="103819"/><use xlink:href="#g96" y="103836"/><use xlink:href="#g97" y="103853"/><use xlink:href="#g98" y="103870"/><use xlink:href="#g99" y="103887"/><use xlink:href="#g100" y="103904"/><use xlink:href="#g101" y="103921"/><use xlink:href="#g102" y="103938"/><use xlink:href="#g103" y="103955"/><use xlink:href="#g105" y="103972"/><use xlink:href="#g106" y="103989"/><use xlink:href="#g107" y="104006"/><use xlink:href="#g109" y="104023"/><use xlink:href="#g79" y="104040"/><use xlink:href="#g110" y="104057"/><use xlink:href="#g79" y="104074"/><use xlink:href="#g112" y="104091"/><use xlink:href="#g142" y="104108"/><use xlink:href="#g35" y="104125"/><use xlink:href="#g36" y="104142"/><use xlink:href="#g143" y="104159"/><use xlink:href="#g144" y="104176"/><use xlink:href="#g145" y="104193"/><use xlink:href="#g146" y="104210"/><use xlink:href="#g147" y="104227"/><use xlink:href="#g148" y="104244"/><rect x="144" y="104261" width="8" height="17" class="foreground"/><use xlink:href="#g152" y="104261"/></g><g><use xlink:href="#g74" y="104312"/><use xlink:href="#g75" y="104329"/><use xlink:href="#g68" y="104346"/><use xlink:href="#g76" y="104363"/><use xlink:href="#g77" y="104380"/><use xlink:href="#g78" y="104397"/><use xlink:href="#g79" y="104414"/><use xlink:href="#g80" y="104431"/><use xlink:href="#g81" y="104448"/><use xlink:href="#g82" y="104465"/><use xlink:href="#g83" y="104482"/><use xlink:href="#g84" y="104499"/><use xlink:href="#g85" y="104516"/><use xlink:href="#g87" y="104533"/><use xlink:href="#g88" y="104550"/><use xlink:href="#g89" y="104567"/><use xlink:href="#g90" y="104584"/><use xlink:href="#g84" y="104601"/><use xlink:href="#g91" y="104618"/><use xlink:href="#g92" y="104635"/><use xlink:href="#g93" y="104652"/><use xlink:href="#g94" y="104669"/><use xlink:href="#g95" y="104686"/><use xlink:href="#g79" y="104703"/><use xlink:href="#g96" y="104720"/><use xlink:href="#g97" y="104737"/><use xlink:href="#g98" y="104754"/><use xlink:href="#g99" y="104771"/><use xlink:href="#g100" y="104788"/><use xlink:href="#g101" y="104805"/><use xlink:href="#g102" y="104822"/><use xlink:href="#g103" y="104839"/><use xlink:href="#g105" y="104856"/><use xlink:href="#g106" y="104873"/><use xlink:href="#g107" y="104890"/><use xlink:href="#g109" y="104907"/><use xlink:href="#g79" y="104924"/><use xlink:href="#g110" y="104941"/><use xlink:href="#g79" y="104958"/><use xlink:href="#g112" y="104975"/><use xlink:href="#g142" y="104992"/><use xlink:href="#g35" y="105009"/><use xlink:href="#g36" y="105026"/><use xlink:href="#g143" y="105043"/><use xlink:href="#g144" y="105060"/><use xlink:href="#g145" y="105077"/><use xlink:href="#g146" y="105094"/><use xlink:href="#g147" y="105111"/><use xlink:href="#g148" y="105128"/><rect x="152" y="105145" width="8" height="17" class="foreground"/><use xlink:href="#g153" y="105145"/></g><g><use xlink:href="#g74" y="105196"/><use xlink:href="#g75" y="105213"/><use xlink:href="#g68" y="105230"/><use xlink:href="#g76" y="105247"/><use xlink:href="#g77" y="105264"/><use xlink:href="#g78" y="105281"/><use xlink:href="#g79" y="105298"/><use xlink:href="#g80" y="105315"/><use xlink:href="#g81" y="105332"/><use xlink:href="#g82" y="105349"/><use xlink:href="#g83" y="105366"/><use xlink:href="#g84" y="105383"/><use xlink:href="#g85" y="105400"/><use xlink:href="#g87" y="105417"/><use xlink:href="#g88" y="105434"/><use xlink:href="#g89" y="105451"/><use xlink:href="#g90" y="105468"/><use xlink:href="#g84" y="105485"/><use xlink:href="#g91" y="105502"/><use xlink:href="#g92" y="105519"/><use xlink:href="#g93" y="105536"/><use xlink:href="#g94" y="105553"/><use xlink:href="#g95" y="105570"/><use xlink:href="#g79" y="105587"/><use xlink:href="#g96" y="105604"/><use xlink:href="#g97" y="105621"/><use xlink:href="#g98" y="105638"/><use xlink:href="#g99" y="105655"/><use xlink:href="#g100" y="105672"/><use xlink:href="#g101" y="105689"/><use xlink:href="#g102" y="105706"/><use xlink:href="#g103" y="105723"/><use xlink:href="#g105" y="105740"/><use xlink:href="#g106" y="105757"/><use xlink:href="#g107" y="105774"/><use xlink:href="#g109" y="105791"/><use xlink:href="#g79" y="105808"/><use xlink:href="#g110" y="105825"/><use xlink:href="#g79" y="105842"/><use xlink:href="#g112" y="105859"/><use xlink:href="#g142" y="105876"/><use xlink:href="#g35" y="105893"/><use xlink:href="#g36" y="105910"/><use xlink:href="#g143" y="105927"/><use xlink:href="#g144" y="105944"/><use xlink:href="#g145" y="105961"/><use xlink:href="#g146" y="105978"/><use xlink:href="#g147" y="105995"/><use xlink:href="#g148" y="106012"/><rect x="160" y="106029" width="8" height="17" class="foreground"/><use xlink:href="#g154" y="106029"/></g><g><use xlink:href="#g74" y="106080"/><use xlink:href="#g75" y="106097"/><use xlink:href="#g68" y="106114"/><use xlink:href="#g76" y="106131"/><use xlink:href="#g77" y="106148"/><use xlink:href="#g78" y="106165"/><use xlink:href="#g79" y="106182"/><use xlink:href="#g80" y="106199"/><use xlink:href="#g81" y="106216"/><use xlink:href="#g82" y="106233"/><use xlink:href="#g83" y="106250"/><use xlink:href="#g84" y="106267"/><use xlink:href="#g85" y="106284"/><use xlink:href="#g87" y="106301"/><use xlink:href="#g88" y="106318"/><use xlink:href="#g89" y="106335"/><use xlink:href="#g90" y="106352"/><use xlink:href="#g84" y="106369"/><use xlink:href="#g91" y="106386"/><use xlink:href="#g92" y="106403"/><use xlink:href="#g93" y="106420"/><use xlink:href="#g94" y="106437"/><use xlink:href="#g95" y="106454"/><use xlink:href="#g79" y="106471"/><use xlink:href="#g96" y="106488"/><use xlink:href="#g97" y="106505"/><use xlink:href="#g98" y="106522"/><use xlink:href="#g99" y="106539"/><use xlink:href="#g100" y="106556"/><use xlink:href="#g101" y="106573"/><use xlink:href="#g102" y="106590"/><use xlink:href="#g103" y="106607"/><use xlink:href="#g105" y="106624"/><use xlink:href="#g106" y="106641"/><use xlink:href="#g107" y="106658"/><use xlink:href="#g109" y="106675"/><use xlink:href="#g79" y="106692"/><use xlink:href="#g110" y="106709"/><use xlink:href="#g79" y="106726"/><use xlink:href="#g112" y="106743"/><use xlink:href="#g142" y="106760"/><use xlink:href="#g35" y="106777"/><use xlink:href="#g36" y="106794"/><use xlink:href="#g143" y="106811"/><use xlink:href="#g144" y="106828"/><use xlink:href="#g145" y="106845"/><use xlink:href="#g146" y="106862"/><use xlink:href="#g147" y="106879"/><use xlink:href="#g148" y="106896"/><rect x="168" y="106913" width="8" height="17" class="foreground"/><use xlink:href="#g155" y="106913"/></g><g><use xlink:href="#g74" y="106964"/><use xlink:href="#g75" y="106981"/><use xlink:href="#g68" y="106998"/><use xlink:href="#g76" y="107015"/><use xlink:href="#g77" y="107032"/><use xlink:href="#g78" y="107049"/><use xlink:href="#g79" y="107066"/><use xlink:href="#g80" y="107083"/><use xlink:href="#g81" y="107100"/><use xlink:href="#g82" y="107117"/><use xlink:href="#g83" y="107134"/><use xlink:href="#g84" y="107151"/><use xlink:href="#g85" y="107168"/><use xlink:href="#g87" y="107185"/><use xlink:href="#g88" y="107202"/><use xlink:href="#g89" y="107219"/><use xlink:href="#g90" y="107236"/><use xlink:href="#g84" y="107253"/><use xlink:href="#g91" y="107270"/><use xlink:href="#g92" y="107287"/><use xlink:href="#g93" y="107304"/><use xlink:href="#g94" y="107321"/><use xlink:href="#g95" y="107338"/><use xlink:href="#g79" y="107355"/><use xlink:href="#g96" y="107372"/><use xlink:href="#g97" y="107389"/><use xlink:href="#g98" y="107406"/><use xlink:href="#g99" y="107423"/><use xlink:href="#g100" y="107440"/><use xlink:href="#g101" y="107457"/><use xlink:href="#g102" y="107474"/><use xlink:href="#g103" y="107491"/><use xlink:href="#g105" y="107508"/><use xlink:href="#g106" y="107525"/><use xlink:href="#g107" y="107542"/><use xlink:href="#g109" y="107559"/><use xlink:href="#g79" y="107576"/><use xlink:href="#g110" y="107593"/><use xlink:href="#g79" y="107610"/><use xlink:href="#g112" y="107627"/><use xlink:href="#g142" y="107644"/><use xlink:href="#g35" y="107661"/><use xlink:href="#g36" y="107678"/><use xlink:href="#g143" y="107695"/><use xlink:href="#g144" y="107712"/><use xlink:href="#g145" y="107729"/><use xlink:href="#g146" y="107746"/><use xlink:href="#g147" y="107763"/><use xlink:href="#g148" y="107780"/><rect x="176" y="107797" width="8" height="17" class="foreground"/><use xlink:href="#g156" y="107797"/></g><g><use xlink:href="#g75" y="107848"/><use xlink:href="#g68" y="107865"/><use xlink:href="#g76" y="107882"/><use xlink:href="#g77" y="107899"/><use xlink:href="#g78" y="107916"/><use xlink:href="#g79" y="107933"/><use xlink:href="#g80" y="107950"/><use xlink:href="#g81" y="107967"/><use xlink:href="#g82" y="107984"/><use xlink:href="#g83" y="108001"/><use xlink:href="#g84" y="108018"/><use xlink:href="#g85" y="108035"/><use xlink:href="#g87" y="108052"/><use xlink:href="#g88" y="108069"/><use xlink:href="#g89" y="108086"/><use xlink:href="#g90" y="108103"/><use xlink:href="#g84" y="108120"/><use xlink:href="#g91" y="108137"/><use xlink:href="#g92" y="108154"/><use xlink:href="#g93" y="108171"/><use xlink:href="#g94" y="108188"/><use xlink:href="#g95" y="108205"/><use xlink:href="#g79" y="108222"/><use xlink:href="#g96" y="108239"/><use xlink:href="#g97" y="108256"/><use xlink:href="#g98" y="108273"/><use xlink:href="#g99" y="108290"/><use xlink:href="#g100" y="108307"/><use xlink:href="#g101" y="108324"/><use xlink:href="#g102" y="108341"/><use xlink:href="#g103" y="108358"/><use xlink:href="#g105" y="108375"/><use xlink:href="#g106" y="108392"/><use xlink:href="#g107" y="108409"/><use xlink:href="#g109" y="108426"/><use xlink:href="#g79" y="108443"/><use xlink:href="#g110" y="108460"/><use xlink:href="#g79" y="108477"/><use xlink:href="#g112" y="108494"/><use xlink:href="#g142" y="108511"/><use xlink:href="#g35" y="108528"/><use xlink:href="#g36" y="108545"/><use xlink:href="#g143" y="108562"/><use xlink:href="#g144" y="108579"/><use xlink:href="#g145" y="108596"/><use xlink:href="#g146" y="108613"/><use xlink:href="#g147" y="108630"/><use xlink:href="#g148" y="108647"/><use xlink:href="#g157" y="108664"/><rect x="0" y="108681" width="8" height="17" class="foreground"/><use xlink:href="#g34" y="108681"/></g><g><use xlink:href="#g75" y="108732"/><use xlink:href="#g68" y="108749"/><use xlink:href="#g76" y="108766"/><use xlink:href="#g77" y="108783"/><use xlink:href="#g78" y="108800"/><use xlink:href="#g79" y="108817"/><use xlink:href="#g80" y="108834"/><use xlink:href="#g81" y="108851"/><use xlink:href="#g82" y="108868"/><use xlink:href="#g83" y="108885"/><use xlink:href="#g84" y="108902"/><use xlink:href="#g85" y="108919"/><use xlink:href="#g87" y="108936"/><use xlink:href="#g88" y="108953"/><use xlink:href="#g89" y="108970"/><use xlink:href="#g90" y="108987"/><use xlink:href="#g84" y="109004"/><use xlink:href="#g91" y="109021"/><use xlink:href="#g92" y="109038"/><use xlink:href="#g93" y="109055"/><use xlink:href="#g94" y="109072"/><use xlink:href="#g95" y="109089"/><use xlink:href="#g79" y="109106"/><use xlink:href="#g96" y="109123"/><use xlink:href="#g97" y="109140"/><use xlink:href="#g98" y="109157"/><use xlink:href="#g99" y="109174"/><use xlink:href="#g100" y="109191"/><use xlink:href="#g101" y="109208"/><use xlink:href="#g102" y="109225"/><use xlink:href="#g103" y="109242"/><use xlink:href="#g105" y="109259"/><use xlink:href="#g106" y="109276"/><use xlink:href="#g107" y="109293"/><use xlink:href="#g109" y="109310"/><use xlink:href="#g79" y="109327"/><use xlink:href="#g110" y="109344"/><use xlink:href="#g79" y="109361"/><use xlink:href="#g112" y="109378"/><use xlink:href="#g142" y="109395"/><use xlink:href="#g35" y="109412"/><use xlink:href="#g36" y="109429"/><use xlink:href="#g143" y="109446"/><use xlink:href="#g144" y="109463"/><use xlink:href="#g145" y="109480"/><use xlink:href="#g146" y="109497"/><use xlink:href="#g147" y="109514"/><use xlink:href="#g148" y="109531"/><use xlink:href="#g157" y="109548"/><rect x="0" y="109565" width="8" height="17" class="foreground"/><use xlink:href="#g34" y="109565"/></g><g><use xlink:href="#g68" y="109616"/><use xlink:href="#g76" y="109633"/><use xlink:href="#g77" y="109650"/><use xlink:href="#g78" y="109667"/><use xlink:href="#g79" y="109684"/><use xlink:href="#g80" y="109701"/><use xlink:href="#g81" y="109718"/><use xlink:href="#g82" y="109735"/><use xlink:href="#g83" y="109752"/><use xlink:href="#g84" y="109769"/><use xlink:href="#g85" y="109786"/><use xlink:href="#g87" y="109803"/><use xlink:href="#g88" y="109820"/><use xlink:href="#g89" y="109837"/><use xlink:href="#g90" y="109854"/><use xlink:href="#g84" y="109871"/><use xlink:href="#g91" y="109888"/><use xlink:href="#g92" y="109905"/><use xlink:href="#g93" y="109922"/><use xlink:href="#g94" y="109939"/><use xlink:href="#g95" y="109956"/><use xlink:href="#g79" y="109973"/><use xlink:href="#g96" y="109990"/><use xlink:href="#g97" y="110007"/><use xlink:href="#g98" y="110024"/><use xlink:href="#g99" y="110041"/><use xlink:href="#g100" y="110058"/><use xlink:href="#g101" y="110075"/><use xlink:href="#g102" y="110092"/><use xlink:href="#g103" y="110109"/><use xlink:href="#g105" y="110126"/><use xlink:href="#g106" y="110143"/><use xlink:href="#g107" y="110160"/><use xlink:href="#g109" y="110177"/><use xlink:href="#g79" y="110194"/><use xlink:href="#g110" y="110211"/><use xlink:href="#g79" y="110228"/><use xlink:href="#g112" y="110245"/><use xlink:href="#g142" y="110262"/><use xlink:href="#g35" y="110279"/><use xlink:href="#g36" y="110296"/><use xlink:href="#g143" y="110313"/><use xlink:href="#g144" y="110330"/><use xlink:href="#g145" y="110347"/><use xlink:href="#g146" y="110364"/><use xlink:href="#g147" y="110381"/><use xlink:href="#g148" y="110398"/><use xlink:href="#g157" y="110415"/><use xlink:href="#g158" y="110432"/><rect x="0" y="110449" width="8" height="17" class="foreground"/><use xlink:href="#g159" y="110449"/></g><g><use xlink:href="#g80" y="110500"/><use xlink:href="#g81" y="110517"/><use xlink:href="#g82" y="110534"/><use xlink:href="#g83" y="110551"/><use xlink:href="#g84" y="110568"/><use xlink:href="#g85" y="110585"/><use xlink:href="#g87" y="110602"/><use xlink:href="#g88" y="110619"/><use xlink:href="#g89" y="110636"/><use xlink:href="#g90" y="110653"/><use xlink:href="#g84" y="110670"/><use xlink:href="#g91" y="110687"/><use xlink:href="#g92" y="110704"/><use xlink:href="#g93" y="110721"/><use xlink:href="#g94" y="110738"/><use xlink:href="#g95" y="110755"/><use xlink:href="#g79" y="110772"/><use xlink:href="#g96" y="110789"/><use xlink:href="#g97" y="110806"/><use xlink:href="#g98" y="110823"/><use xlink:href="#g99" y="110840"/><use xlink:href="#g100" y="110857"/><use xlink:href="#g101" y="110874"/><use xlink:href="#g102" y="110891"/><use xlink:href="#g103" y="110908"/><use xlink:href="#g105" y="110925"/><use xlink:href="#g106" y="110942"/><use xlink:href="#g107" y="110959"/><use xlink:href="#g109" y="110976"/><use xlink:href="#g79" y="110993"/><use xlink:href="#g110" y="111010"/><use xlink:href="#g79" y="111027"/><use xlink:href="#g112" y="111044"/><use xlink:href="#g142" y="111061"/><use xlink:href="#g35" y="111078"/><use xlink:href="#g36" y="111095"/><use xlink:href="#g143" y="111112"/><use xlink:href="#g144" y="111129"/><use xlink:href="#g145" y="111146"/><use xlink:href="#g146" y="111163"/><use xlink:href="#g147" y="111180"/><use xlink:href="#g148" y="111197"/><use xlink:href="#g157" y="111214"/><use xlink:href="#g158" y="111231"/><use xlink:href="#g160" y="111248"/><use xlink:href="#g161" y="111265"/><use xlink:href="#g162" y="111282"/><use xlink:href="#g163" y="111299"/><use xlink:href="#g164" y="111316"/><rect x="0" y="111333" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="111333"/></g><g><use xlink:href="#g81" y="111384"/><use xlink:href="#g82" y="111401"/><use xlink:href="#g83" y="111418"/><use xlink:href="#g84" y="111435"/><use xlink:href="#g85" y="111452"/><use xlink:href="#g87" y="111469"/><use xlink:href="#g88" y="111486"/><use xlink:href="#g89" y="111503"/><use xlink:href="#g90" y="111520"/><use xlink:href="#g84" y="111537"/><use xlink:href="#g91" y="111554"/><use xlink:href="#g92" y="111571"/><use xlink:href="#g93" y="111588"/><use xlink:href="#g94" y="111605"/><use xlink:href="#g95" y="111622"/><use xlink:href="#g79" y="111639"/><use xlink:href="#g96" y="111656"/><use xlink:href="#g97" y="111673"/><use xlink:href="#g98" y="111690"/><use xlink:href="#g99" y="111707"/><use xlink:href="#g100" y="111724"/><use xlink:href="#g101" y="111741"/><use xlink:href="#g102" y="111758"/><use xlink:href="#g103" y="111775"/><use xlink:href="#g105" y="111792"/><use xlink:href="#g106" y="111809"/><use xlink:href="#g107" y="111826"/><use xlink:href="#g109" y="111843"/><use xlink:href="#g79" y="111860"/><use xlink:href="#g110" y="111877"/><use xlink:href="#g79" y="111894"/><use xlink:href="#g112" y="111911"/><use xlink:href="#g142" y="111928"/><use xlink:href="#g35" y="111945"/><use xlink:href="#g36" y="111962"/><use xlink:href="#g143" y="111979"/><use xlink:href="#g144" y="111996"/><use xlink:href="#g145" y="112013"/><use xlink:href="#g146" y="112030"/><use xlink:href="#g147" y="112047"/><use xlink:href="#g148" y="112064"/><use xlink:href="#g157" y="112081"/><use xlink:href="#g158" y="112098"/><use xlink:href="#g160" y="112115"/><use xlink:href="#g161" y="112132"/><use xlink:href="#g162" y="112149"/><use xlink:href="#g163" y="112166"/><use xlink:href="#g164" y="112183"/><use xlink:href="#g165" y="112200"/><rect x="0" y="112217" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="112217"/></g><g><use xlink:href="#g83" y="112268"/><use xlink:href="#g84" y="112285"/><use xlink:href="#g85" y="112302"/><use xlink:href="#g87" y="112319"/><use xlink:href="#g88" y="112336"/><use xlink:href="#g89" y="112353"/><use xlink:href="#g90" y="112370"/><use xlink:href="#g84" y="112387"/><use xlink:href="#g91" y="112404"/><use xlink:href="#g92" y="112421"/><use xlink:href="#g93" y="112438"/><use xlink:href="#g94" y="112455"/><use xlink:href="#g95" y="112472"/><use xlink:href="#g79" y="112489"/><use xlink:href="#g96" y="112506"/><use xlink:href="#g97" y="112523"/><use xlink:href="#g98" y="112540"/><use xlink:href="#g99" y="112557"/><use xlink:href="#g100" y="112574"/><use xlink:href="#g101" y="112591"/><use xlink:href="#g102" y="112608"/><use xlink:href="#g103" y="112625"/><use xlink:href="#g105" y="112642"/><use xlink:href="#g106" y="112659"/><use xlink:href="#g107" y="112676"/><use xlink:href="#g109" y="112693"/><use xlink:href="#g79" y="112710"/><use xlink:href="#g110" y="112727"/><use xlink:href="#g79" y="112744"/><use xlink:href="#g112" y="112761"/><use xlink:href="#g142" y="112778"/><use xlink:href="#g35" y="112795"/><use xlink:href="#g36" y="112812"/><use xlink:href="#g143" y="112829"/><use xlink:href="#g144" y="112846"/><use xlink:href="#g145" y="112863"/><use xlink:href="#g146" y="112880"/><use xlink:href="#g147" y="112897"/><use xlink:href="#g148" y="112914"/><use xlink:href="#g157" y="112931"/><use xlink:href="#g158" y="112948"/><use xlink:href="#g160" y="112965"/><use xlink:href="#g161" y="112982"/><use xlink:href="#g162" y="112999"/><use xlink:href="#g163" y="113016"/><use xlink:href="#g164" y="113033"/><use xlink:href="#g165" y="113050"/><use xlink:href="#g166" y="113067"/><use xlink:href="#g167" y="113084"/><rect x="0" y="113101" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="113101"/></g><g><use xlink:href="#g83" y="113152"/><use xlink:href="#g84" y="113169"/><use xlink:href="#g85" y="113186"/><use xlink:href="#g87" y="113203"/><use xlink:href="#g88" y="113220"/><use xlink:href="#g89" y="113237"/><use xlink:href="#g90" y="113254"/><use xlink:href="#g84" y="113271"/><use xlink:href="#g91" y="113288"/><use xlink:href="#g92" y="113305"/><use xlink:href="#g93" y="113322"/><use xlink:href="#g94" y="113339"/><use xlink:href="#g95" y="113356"/><use xlink:href="#g79" y="113373"/><use xlink:href="#g96" y="113390"/><use xlink:href="#g97" y="113407"/><use xlink:href="#g98" y="113424"/><use xlink:href="#g99" y="113441"/><use xlink:href="#g100" y="113458"/><use xlink:href="#g101" y="113475"/><use xlink:href="#g102" y="113492"/><use xlink:href="#g103" y="113509"/><use xlink:href="#g105" y="113526"/><use xlink:href="#g106" y="113543"/><use xlink:href="#g107" y="113560"/><use xlink:href="#g109" y="113577"/><use xlink:href="#g79" y="113594"/><use xlink:href="#g110" y="113611"/><use xlink:href="#g79" y="113628"/><use xlink:href="#g112" y="113645"/><use xlink:href="#g142" y="113662"/><use xlink:href="#g35" y="113679"/><use xlink:href="#g36" y="113696"/><use xlink:href="#g143" y="113713"/><use xlink:href="#g144" y="113730"/><use xlink:href="#g145" y="113747"/><use xlink:href="#g146" y="113764"/><use xlink:href="#g147" y="113781"/><use xlink:href="#g148" y="113798"/><use xlink:href="#g157" y="113815"/><use xlink:href="#g158" y="113832"/><use xlink:href="#g160" y="113849"/><use xlink:href="#g161" y="113866"/><use xlink:href="#g162" y="113883"/><use xlink:href="#g163" y="113900"/><use xlink:href="#g164" y="113917"/><use xlink:href="#g165" y="113934"/><use xlink:href="#g166" y="113951"/><use xlink:href="#g167" y="113968"/><rect x="0" y="113985" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="113985"/></g><g><use xlink:href="#g83" y="114036"/><use xlink:href="#g84" y="114053"/><use xlink:href="#g85" y="114070"/><use xlink:href="#g87" y="114087"/><use xlink:href="#g88" y="114104"/><use xlink:href="#g89" y="114121"/><use xlink:href="#g90" y="114138"/><use xlink:href="#g84" y="114155"/><use xlink:href="#g91" y="114172"/><use xlink:href="#g92" y="114189"/><use xlink:href="#g93" y="114206"/><use xlink:href="#g94" y="114223"/><use xlink:href="#g95" y="114240"/><use xlink:href="#g79" y="114257"/><use xlink:href="#g96" y="114274"/><use xlink:href="#g97" y="114291"/><use xlink:href="#g98" y="114308"/><use xlink:href="#g99" y="114325"/><use xlink:href="#g100" y="114342"/><use xlink:href="#g101" y="114359"/><use xlink:href="#g102" y="114376"/><use xlink:href="#g103" y="114393"/><use xlink:href="#g105" y="114410"/><use xlink:href="#g106" y="114427"/><use xlink:href="#g107" y="114444"/><use xlink:href="#g109" y="114461"/><use xlink:href="#g79" y="114478"/><use xlink:href="#g110" y="114495"/><use xlink:href="#g79" y="114512"/><use xlink:href="#g112" y="114529"/><use xlink:href="#g142" y="114546"/><use xlink:href="#g35" y="114563"/><use xlink:href="#g36" y="114580"/><use xlink:href="#g143" y="114597"/><use xlink:href="#g144" y="114614"/><use xlink:href="#g145" y="114631"/><use xlink:href="#g146" y="114648"/><use xlink:href="#g147" y="114665"/><use xlink:href="#g148" y="114682"/><use xlink:href="#g157" y="114699"/><use xlink:href="#g158" y="114716"/><use xlink:href="#g160" y="114733"/><use xlink:href="#g161" y="114750"/><use xlink:href="#g162" y="114767"/><use xlink:href="#g163" y="114784"/><use xlink:href="#g164" y="114801"/><use xlink:href="#g165" y="114818"/><use xlink:href="#g166" y="114835"/><use xlink:href="#g167" y="114852"/><rect x="112" y="114869" width="8" height="17" class="foreground"/><use xlink:href="#g37" y="114869"/></g><g><use xlink:href="#g83" y="114920"/><use xlink:href="#g84" y="114937"/><use xlink:href="#g85" y="114954"/><use xlink:href="#g87" y="114971"/><use xlink:href="#g88" y="114988"/><use xlink:href="#g89" y="115005"/><use xlink:href="#g90" y="115022"/><use xlink:href="#g84" y="115039"/><use xlink:href="#g91" y="115056"/><use xlink:href="#g92" y="115073"/><use xlink:href="#g93" y="115090"/><use xlink:href="#g94" y="115107"/><use xlink:href="#g95" y="115124"/><use xlink:href="#g79" y="115141"/><use xlink:href="#g96" y="115158"/><use xlink:href="#g97" y="115175"/><use xlink:href="#g98" y="115192"/><use xlink:href="#g99" y="115209"/><use xlink:href="#g100" y="115226"/><use xlink:href="#g101" y="115243"/><use xlink:href="#g102" y="115260"/><use xlink:href="#g103" y="115277"/><use xlink:href="#g105" y="115294"/><use xlink:href="#g106" y="115311"/><use xlink:href="#g107" y="115328"/><use xlink:href="#g109" y="115345"/><use xlink:href="#g79" y="115362"/><use xlink:href="#g110" y="115379"/><use xlink:href="#g79" y="115396"/><use xlink:href="#g112" y="115413"/><use xlink:href="#g142" y="115430"/><use xlink:href="#g35" y="115447"/><use xlink:href="#g36" y="115464"/><use xlink:href="#g143" y="115481"/><use xlink:href="#g144" y="115498"/><use xlink:href="#g145" y="115515"/><use xlink:href="#g146" y="115532"/><use xlink:href="#g147" y="115549"/><use xlink:href="#g148" y="115566"/><use xlink:href="#g157" y="115583"/><use xlink:href="#g158" y="115600"/><use xlink:href="#g160" y="115617"/><use xlink:href="#g161" y="115634"/><use xlink:href="#g162" y="115651"/><use xlink:href="#g163" y="115668"/><use xlink:href="#g164" y="115685"/><use xlink:href="#g165" y="115702"/><use xlink:href="#g166" y="115719"/><use xlink:href="#g167" y="115736"/><rect x="112" y="115753" width="8" height="17" class="foreground"/><use xlink:href="#g37" y="115753"/></g><g><use xlink:href="#g84" y="115804"/><use xlink:href="#g85" y="115821"/><use xlink:href="#g87" y="115838"/><use xlink:href="#g88" y="115855"/><use xlink:href="#g89" y="115872"/><use xlink:href="#g90" y="115889"/><use xlink:href="#g84" y="115906"/><use xlink:href="#g91" y="115923"/><use xlink:href="#g92" y="115940"/><use xlink:href="#g93" y="115957"/><use xlink:href="#g94" y="115974"/><use xlink:href="#g95" y="115991"/><use xlink:href="#g79" y="116008"/><use xlink:href="#g96" y="116025"/><use xlink:href="#g97" y="116042"/><use xlink:href="#g98" y="116059"/><use xlink:href="#g99" y="116076"/><use xlink:href="#g100" y="116093"/><use xlink:href="#g101" y="116110"/><use xlink:href="#g102" y="116127"/><use xlink:href="#g103" y="116144"/><use xlink:href="#g105" y="116161"/><use xlink:href="#g106" y="116178"/><use xlink:href="#g107" y="116195"/><use xlink:href="#g109" y="116212"/><use xlink:href="#g79" y="116229"/><use xlink:href="#g110" y="116246"/><use xlink:href="#g79" y="116263"/><use xlink:href="#g112" y="116280"/><use xlink:href="#g142" y="116297"/><use xlink:href="#g35" y="116314"/><use xlink:href="#g36" y="116331"/><use xlink:href="#g143" y="116348"/><use xlink:href="#g144" y="116365"/><use xlink:href="#g145" y="116382"/><use xlink:href="#g146" y="116399"/><use xlink:href="#g147" y="116416"/><use xlink:href="#g148" y="116433"/><use xlink:href="#g157" y="116450"/><use xlink:href="#g158" y="116467"/><use xlink:href="#g160" y="116484"/><use xlink:href="#g161" y="116501"/><use xlink:href="#g162" y="116518"/><use xlink:href="#g163" y="116535"/><use xlink:href="#g164" y="116552"/><use xlink:href="#g165" y="116569"/><use xlink:href="#g166" y="116586"/><use xlink:href="#g167" y="116603"/><use xlink:href="#g168" y="116620"/><rect x="0" y="116637" width="8" height="17" class="foreground"/><use xlink:href="#g1" y="116637"/></g><g><use xlink:href="#g85" y="116688"/><use xlink:href="#g87" y="116705"/><use xlink:href="#g88" y="116722"/><use xlink:href="#g89" y="116739"/><use xlink:href="#g90" y="116756"/><use xlink:href="#g84" y="116773"/><use xlink:href="#g91" y="116790"/><use xlink:href="#g92" y="116807"/><use xlink:href="#g93" y="116824"/><use xlink:href="#g94" y="116841"/><use xlink:href="#g95" y="116858"/><use xlink:href="#g79" y="116875"/><use xlink:href="#g96" y="116892"/><use xlink:href="#g97" y="116909"/><use xlink:href="#g98" y="116926"/><use xlink:href="#g99" y="116943"/><use xlink:href="#g100" y="116960"/><use xlink:href="#g101" y="116977"/><use xlink:href="#g102" y="116994"/><use xlink:href="#g103" y="117011"/><use xlink:href="#g105" y="117028"/><use xlink:href="#g106" y="117045"/><use xlink:href="#g107" y="117062"/><use xlink:href="#g109" y="117079"/><use xlink:href="#g79" y="117096"/><use xlink:href="#g110" y="117113"/><use xlink:href="#g79" y="117130"/><use xlink:href="#g112" y="117147"/><use xlink:href="#g142" y="117164"/><use xlink:href="#g35" y="117181"/><use xlink:href="#g36" y="117198"/><use xlink:href="#g143" y="117215"/><use xlink:href="#g144" y="117232"/><use xlink:href="#g145" y="117249"/><use xlink:href="#g146" y="117266"/><use xlink:href="#g147" y="117283"/><use xlink:href="#g148" y="117300"/><use xlink:href="#g157" y="117317"/><use xlink:href="#g158" y="117334"/><use xlink:href="#g160" y="117351"/><use xlink:href="#g161" y="117368"/><use xlink:href="#g162" y="117385"/><use xlink:href="#g163" y="117402"/><use xlink:href="#g164" y="117419"/><use xlink:href="#g165" y="117436"/><use xlink:href="#g166" y="117453"/><use xlink:href="#g167" y="117470"/><use xlink:href="#g168" y="117487"/><use xlink:href="#g168" y="117504"/><rect x="0" y="117521" width="8" height="17" class="foreground"/><use xlink:href="#g34" y="117521"/></g></g></svg>
+</svg>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/mypy.ini new/tempora-4.0.0/mypy.ini
--- old/tempora-3.0.0/mypy.ini 1970-01-01 01:00:00.000000000 +0100
+++ new/tempora-4.0.0/mypy.ini 2020-07-18 18:05:11.000000000 +0200
@@ -0,0 +1,2 @@
+[mypy]
+ignore_missing_imports = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/pyproject.toml new/tempora-4.0.0/pyproject.toml
--- old/tempora-3.0.0/pyproject.toml 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/pyproject.toml 2020-07-18 18:05:11.000000000 +0200
@@ -1,6 +1,8 @@
[build-system]
-requires = ["setuptools>=34.4", "wheel", "setuptools_scm>=1.15"]
+requires = ["setuptools>=42", "wheel", "setuptools_scm[toml]>=3.4.1"]
build-backend = "setuptools.build_meta"
[tool.black]
skip-string-normalization = true
+
+[tool.setuptools_scm]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/pytest.ini new/tempora-4.0.0/pytest.ini
--- old/tempora-3.0.0/pytest.ini 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/pytest.ini 2020-07-18 18:05:11.000000000 +0200
@@ -1,7 +1,12 @@
[pytest]
norecursedirs=dist build .tox .eggs
-addopts=--doctest-modules --flake8 --black --cov
+addopts=--doctest-modules --flake8 --black --cov --mypy
doctest_optionflags=ALLOW_UNICODE ELLIPSIS
+# workaround for warning pytest-dev/pytest#6178
+junit_family=xunit2
filterwarnings=
- # suppress known warning
- ignore:Use datetime.datetime.strptime:DeprecationWarning:tempora
+ # suppress known warnings
+ ignore:Use native division:DeprecationWarning:tempora
+ ignore:Use dateutil.parser:DeprecationWarning:tempora
+ # https://github.com/pytest-dev/pytest/issues/6928
+ ignore:direct construction of .*Item has been deprecated:DeprecationWarning
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/setup.cfg new/tempora-4.0.0/setup.cfg
--- old/tempora-3.0.0/setup.cfg 2020-03-20 23:03:33.184217700 +0100
+++ new/tempora-4.0.0/setup.cfg 2020-07-18 18:05:31.575982800 +0200
@@ -1,6 +1,3 @@
-[bdist_wheel]
-universal = 1
-
[metadata]
license_file = LICENSE
name = tempora
@@ -14,6 +11,7 @@
Intended Audience :: Developers
License :: OSI Approved :: MIT License
Programming Language :: Python :: 3
+ Programming Language :: Python :: 3 :: Only
[options]
packages = find:
@@ -22,15 +20,16 @@
install_requires =
pytz
jaraco.functools>=1.20
-setup_requires = setuptools_scm >= 1.15.0
+setup_requires = setuptools_scm[toml] >= 3.4.1
[options.extras_require]
testing =
pytest >= 3.5, !=3.7.3
pytest-checkdocs >= 1.2.3
pytest-flake8
- pytest-black-multipy
+ pytest-black >= 0.3.7
pytest-cov
+ pytest-mypy
backports.unittest_mock
freezegun
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/setup.py new/tempora-4.0.0/setup.py
--- old/tempora-3.0.0/setup.py 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/setup.py 2020-07-18 18:05:11.000000000 +0200
@@ -3,4 +3,4 @@
import setuptools
if __name__ == "__main__":
- setuptools.setup(use_scm_version=True)
+ setuptools.setup()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/skeleton.md new/tempora-4.0.0/skeleton.md
--- old/tempora-3.0.0/skeleton.md 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/skeleton.md 2020-07-18 18:05:11.000000000 +0200
@@ -2,9 +2,9 @@
This project is merged with [skeleton](https://github.com/jaraco/skeleton). What is skeleton? It's the scaffolding of a Python project jaraco [introduced in his blog](https://blog.jaraco.com/a-project-skeleton-for-python-projects/). It seeks to provide a means to re-use techniques and inherit advances when managing projects for distribution.
-## An SCM Managed Approach
+## An SCM-Managed Approach
-While maintaining dozens of projects in PyPI, jaraco derives best practices for project distribution and publishes them in the [skeleton repo](https://github.com/jaraco/skeleton), a git repo capturing the evolution and culmination of these best practices.
+While maintaining dozens of projects in PyPI, jaraco derives best practices for project distribution and publishes them in the [skeleton repo](https://github.com/jaraco/skeleton), a Git repo capturing the evolution and culmination of these best practices.
It's intended to be used by a new or existing project to adopt these practices and honed and proven techniques. Adopters are encouraged to use the project directly and maintain a small deviation from the technique, make their own fork for more substantial changes unique to their environment or preferences, or simply adopt the skeleton once and abandon it thereafter.
@@ -38,7 +38,7 @@
## Updating
-Whenever a change is needed or desired for the general technique for packaging, it can be made in the skeleton project and then merged into each of the derived projects as needed, recommended before each release. As a result, features and best practices for packaging are centrally maintained and readily trickle into a whole suite of packages. This technique lowers the amount of tedious work necessary to create or maintain a project, and coupled with other techniques like continuous integration and deployment, lowers the cost of creating and maintaining refined Python projects to just a few, familiar git operations.
+Whenever a change is needed or desired for the general technique for packaging, it can be made in the skeleton project and then merged into each of the derived projects as needed, recommended before each release. As a result, features and best practices for packaging are centrally maintained and readily trickle into a whole suite of packages. This technique lowers the amount of tedious work necessary to create or maintain a project, and coupled with other techniques like continuous integration and deployment, lowers the cost of creating and maintaining refined Python projects to just a few, familiar Git operations.
Thereafter, the target project can make whatever customizations it deems relevant to the scaffolding. The project may even at some point decide that the divergence is too great to merit renewed merging with the original skeleton. This approach applies maximal guidance while creating minimal constraints.
@@ -46,16 +46,16 @@
The features/techniques employed by the skeleton include:
-- PEP 517/518 based build relying on setuptools as the build tool
-- setuptools declarative configuration using setup.cfg
+- PEP 517/518-based build relying on Setuptools as the build tool
+- Setuptools declarative configuration using setup.cfg
- tox for running tests
-- A README.rst as reStructuredText with some popular badges, but with readthedocs and appveyor badges commented out
+- A README.rst as reStructuredText with some popular badges, but with Read the Docs and AppVeyor badges commented out
- A CHANGES.rst file intended for publishing release notes about the project
-- Use of [black](https://black.readthedocs.io/en/stable/) for code formatting (disabled on unsupported Python 3.5 and earlier)
+- Use of [Black](https://black.readthedocs.io/en/stable/) for code formatting (disabled on unsupported Python 3.5 and earlier)
## Packaging Conventions
-A pyproject.toml is included to enable PEP 517 and PEP 518 compatibility and declares the requirements necessary to build the project on setuptools (a minimum version compatible with setup.cfg declarative config).
+A pyproject.toml is included to enable PEP 517 and PEP 518 compatibility and declares the requirements necessary to build the project on Setuptools (a minimum version compatible with setup.cfg declarative config).
The setup.cfg file implements the following features:
@@ -92,14 +92,14 @@
- rely on default test discovery in the current directory
- avoid recursing into common directories not containing tests
-- run doctests on modules and invoke flake8 tests
-- in doctests, allow unicode literals and regular literals to match, allowing for doctests to run on Python 2 and 3. Also enable ELLIPSES, a default that would be undone by supplying the prior option.
+- run doctests on modules and invoke Flake8 tests
+- in doctests, allow Unicode literals and regular literals to match, allowing for doctests to run on Python 2 and 3. Also enable ELLIPSES, a default that would be undone by supplying the prior option.
- filters out known warnings caused by libraries/functionality included by the skeleton
-Relies a .flake8 file to correct some default behaviors:
+Relies on a .flake8 file to correct some default behaviors:
- disable mutually incompatible rules W503 and W504
-- support for black format
+- support for Black format
## Continuous Integration
@@ -116,16 +116,16 @@
### Travis CI
-[Travis-CI](https://travis-ci.org) is configured through .travis.yml. Any new project must be enabled either through their web site or with the `travis enable` command.
+[Travis CI](https://travis-ci.org) is configured through .travis.yml. Any new project must be enabled either through their web site or with the `travis enable` command.
Features include:
-- test against 3
-- run on Ubuntu Xenial
+- test against Python 3
+- run on Ubuntu Bionic
- correct for broken IPv6
-### Appveyor
+### AppVeyor
-A minimal template for running under Appveyor (Windows) is provided.
+A minimal template for running under AppVeyor (Windows) is provided.
### Continuous Deployments
@@ -148,7 +148,7 @@
Documentation is automatically built by [Read the Docs](https://readthedocs.org) when the project is registered with it, by way of the .readthedocs.yml file. To test the docs build manually, a tox env may be invoked as `tox -e docs`. Both techniques rely on the dependencies declared in `setup.cfg/options.extras_require.docs`.
-In addition to building the sphinx docs scaffolded in `docs/`, the docs build a `history.html` file that first injects release dates and hyperlinks into the CHANGES.rst before incorporating it as history in the docs.
+In addition to building the Sphinx docs scaffolded in `docs/`, the docs build a `history.html` file that first injects release dates and hyperlinks into the CHANGES.rst before incorporating it as history in the docs.
## Cutting releases
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/tempora/__init__.py new/tempora-4.0.0/tempora/__init__.py
--- old/tempora-3.0.0/tempora/__init__.py 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/tempora/__init__.py 2020-07-18 18:05:11.000000000 +0200
@@ -12,6 +12,8 @@
class Parser:
"""
+ *deprecated*
+
Datetime parser: parses a date-time string using multiple possible
formats.
@@ -49,6 +51,7 @@
"some common default formats"
def __init__(self, formats=None):
+ warnings.warn("Use dateutil.parser", DeprecationWarning)
if formats:
self.formats = formats
@@ -197,20 +200,6 @@
return t.strftime(fmt)
-def strptime(s, fmt, tzinfo=None):
- """
- A function to replace strptime in the time module. Should behave
- identically to the strptime function except it returns a datetime.datetime
- object instead of a time.struct_time object.
- Also takes an optional tzinfo parameter which is a time zone info object.
-
- >>> strptime('2019-09-20', '%Y-%m-%d')
- datetime.datetime(2019, 9, 20, 0, 0)
- """
- warnings.warn("Use datetime.datetime.strptime", DeprecationWarning)
- return datetime.datetime.strptime(s, fmt).replace(tzinfo=tzinfo)
-
-
def datetime_mod(dt, period, start=None):
"""
Find the time which is the specified date/time truncated to the time delta
@@ -397,10 +386,8 @@
>>> divide_timedelta_float(one_day, 2) == half_day
True
"""
- # td is comprised of days, seconds, microseconds
- dsm = [getattr(td, attr) for attr in ('days', 'seconds', 'microseconds')]
- dsm = map(lambda elem: elem / divisor, dsm)
- return datetime.timedelta(*dsm)
+ warnings.warn("Use native division", DeprecationWarning)
+ return td / divisor
def calculate_prorated_values():
@@ -510,12 +497,8 @@
>>> divide_timedelta(one_hour, one_day) == 1 / 24
True
"""
- try:
- return td1 / td2
- except TypeError: # pragma: nocover
- # Python 3.2 gets division
- # http://bugs.python.org/issue2706
- return td1.total_seconds() / td2.total_seconds()
+ warnings.warn("Use native division", DeprecationWarning)
+ return td1 / td2
def date_range(start=None, stop=None, step=None):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/tempora.egg-info/PKG-INFO new/tempora-4.0.0/tempora.egg-info/PKG-INFO
--- old/tempora-3.0.0/tempora.egg-info/PKG-INFO 2020-03-20 23:03:32.000000000 +0100
+++ new/tempora-4.0.0/tempora.egg-info/PKG-INFO 2020-07-18 18:05:31.000000000 +0200
@@ -1,15 +1,18 @@
Metadata-Version: 2.1
Name: tempora
-Version: 3.0.0
+Version: 4.0.0
Summary: Objects and routines pertaining to date and time (tempora)
Home-page: https://github.com/jaraco/tempora
Author: Jason R. Coombs
Author-email: jaraco(a)jaraco.com
License: UNKNOWN
Description: .. image:: https://img.shields.io/pypi/v/tempora.svg
- :target: https://pypi.org/project/tempora
+ :target: `PyPI link`_
.. image:: https://img.shields.io/pypi/pyversions/tempora.svg
+ :target: `PyPI link`_
+
+ .. _PyPI link: https://pypi.org/project/tempora
.. image:: https://dev.azure.com/jaraco/tempora/_apis/build/status/jaraco.tempora?bran…
:target: https://dev.azure.com/jaraco/tempora/_build/latest?definitionId=1&branchNam…
@@ -43,6 +46,7 @@
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.6
Provides-Extra: testing
Provides-Extra: docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/tempora.egg-info/SOURCES.txt new/tempora-4.0.0/tempora.egg-info/SOURCES.txt
--- old/tempora-3.0.0/tempora.egg-info/SOURCES.txt 2020-03-20 23:03:33.000000000 +0100
+++ new/tempora-4.0.0/tempora.egg-info/SOURCES.txt 2020-07-18 18:05:31.000000000 +0200
@@ -9,6 +9,7 @@
appveyor.yml
azure-pipelines.yml
conftest.py
+mypy.ini
pyproject.toml
pytest.ini
setup.cfg
@@ -18,6 +19,7 @@
docs/conf.py
docs/history.rst
docs/index.rst
+docs/refresh.svg
tempora/__init__.py
tempora/schedule.py
tempora/timing.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/tempora.egg-info/requires.txt new/tempora-4.0.0/tempora.egg-info/requires.txt
--- old/tempora-3.0.0/tempora.egg-info/requires.txt 2020-03-20 23:03:32.000000000 +0100
+++ new/tempora-4.0.0/tempora.egg-info/requires.txt 2020-07-18 18:05:31.000000000 +0200
@@ -10,8 +10,9 @@
pytest!=3.7.3,>=3.5
pytest-checkdocs>=1.2.3
pytest-flake8
-pytest-black-multipy
+pytest-black>=0.3.7
pytest-cov
+pytest-mypy
backports.unittest_mock
freezegun
pytest-freezegun
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tempora-3.0.0/tox.ini new/tempora-4.0.0/tox.ini
--- old/tempora-3.0.0/tox.ini 2020-03-20 23:03:10.000000000 +0100
+++ new/tempora-4.0.0/tox.ini 2020-07-18 18:05:11.000000000 +0200
@@ -3,16 +3,12 @@
minversion = 3.2
# https://github.com/jaraco/skeleton/issues/6
tox_pip_extensions_ext_venv_update = true
-# Ensure that a late version of pip is used even on tox-venv.
-requires =
- tox-pip-version>=0.0.6
- tox-venv
[testenv]
deps =
- setuptools>=31.0.1
-pip_version = pip
+ # workaround for python/mypy#8627
+ mypy@git+https://github.com/python/mypy
commands =
pytest {posargs}
usedevelop = True
1
0
Hello community,
here is the log from the commit of package python-requests for openSUSE:Factory checked in at 2020-08-01 12:30:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-requests (Old)
and /work/SRC/openSUSE:Factory/.python-requests.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-requests"
Sat Aug 1 12:30:36 2020 rev:65 rq:822516 version:2.24.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-requests/python-requests.changes 2020-04-22 20:45:12.822478520 +0200
+++ /work/SRC/openSUSE:Factory/.python-requests.new.3592/python-requests.changes 2020-08-01 12:30:44.450432252 +0200
@@ -1,0 +2,15 @@
+Thu Jul 23 18:47:44 UTC 2020 - Sebastian Wagner <sebix+novell.com(a)sebix.at>
+
+- remove patch pr_5251-pytest5.patch, not needed anymore.
+- update to version 2.24.0:
+ - pyOpenSSL TLS implementation is now only used if Python
+ either doesn't have an `ssl` module or doesn't support
+ SNI. Previously pyOpenSSL was unconditionally used if available.
+ This applies even if pyOpenSSL is installed via the
+ `requests[security]` extra (#5443)
+ - Redirect resolution should now only occur when
+ `allow_redirects` is True. (#5492)
+ - No longer perform unnecessary Content-Length calculation for
+ requests that won't use it. (#5496)
+
+-------------------------------------------------------------------
Old:
----
pr_5251-pytest5.patch
requests-2.23.0.tar.gz
New:
----
requests-2.24.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-requests.spec ++++++
--- /var/tmp/diff_new_pack.jlttog/_old 2020-08-01 12:30:45.778433496 +0200
+++ /var/tmp/diff_new_pack.jlttog/_new 2020-08-01 12:30:45.782433499 +0200
@@ -26,7 +26,7 @@
%endif
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-requests%{psuffix}
-Version: 2.23.0
+Version: 2.24.0
Release: 0
Summary: Python HTTP Library
License: Apache-2.0
@@ -35,7 +35,6 @@
Source: https://files.pythonhosted.org/packages/source/r/requests/requests-%{versio…
# PATCH-FIX-SUSE: do not hardcode versions in setup.py/requirements
Patch0: requests-no-hardcoded-version.patch
-Patch1: pr_5251-pytest5.patch
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
++++++ requests-2.23.0.tar.gz -> requests-2.24.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.23.0/HISTORY.md new/requests-2.24.0/HISTORY.md
--- old/requests-2.23.0/HISTORY.md 2020-02-19 19:27:13.000000000 +0100
+++ new/requests-2.24.0/HISTORY.md 2020-06-17 17:52:43.000000000 +0200
@@ -4,10 +4,25 @@
dev
---
-**Bugfixes**
-
- \[Short description of non-trivial change.\]
+2.24.0 (2020-06-17)
+-------------------
+
+**Improvements**
+
+- pyOpenSSL TLS implementation is now only used if Python
+ either doesn't have an `ssl` module or doesn't support
+ SNI. Previously pyOpenSSL was unconditionally used if available.
+ This applies even if pyOpenSSL is installed via the
+ `requests[security]` extra (#5443)
+
+- Redirect resolution should now only occur when
+ `allow_redirects` is True. (#5492)
+
+- No longer perform unnecessary Content-Length calculation for
+ requests that won't use it. (#5496)
+
2.23.0 (2020-02-19)
-------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.23.0/PKG-INFO new/requests-2.24.0/PKG-INFO
--- old/requests-2.23.0/PKG-INFO 2020-02-19 19:48:35.000000000 +0100
+++ new/requests-2.24.0/PKG-INFO 2020-06-17 18:29:52.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: requests
-Version: 2.23.0
+Version: 2.24.0
Summary: Python HTTP for Humans.
Home-page: https://requests.readthedocs.io
Author: Kenneth Reitz
@@ -24,10 +24,13 @@
<code> 'A simple, yet elegant HTTP library.'</code>
</div>
- <p align="center">
- This software has been designed for you, with much joy,
- by <a href="https://kennethreitz.org/">Kenneth Reitz</a> & is protected by The <a href="https://www.python.org/psf/">Python Software Foundation</a>.
- </p>
+ <p>
+ This software has been designed for you, with much joy,
+ by <a href="https://kennethreitz.org/">Kenneth Reitz</a> &
+ is protected by The <a href="https://www.python.org/psf/">Python Software Foundation</a>.
+
+ </p>
+
</pre>
</span>
@@ -38,7 +41,7 @@
<p> </p>
- ```pycon
+ ```python
>>> import requests
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
@@ -48,9 +51,9 @@
>>> r.encoding
'utf-8'
>>> r.text
- u'{"type":"User"...'
+ '{"type":"User"...'
>>> r.json()
- {u'disk_usage': 368627, u'private_gists': 484, ...}
+ {'disk_usage': 368627, 'private_gists': 484, ...}
```
@@ -62,7 +65,7 @@
Requests allows you to send HTTP/1.1 requests extremely easily. There’s no need to manually add query strings to your URLs, or to form-encode your `PUT` & `POST` data — but nowadays, just use the `json` method!
- Requests is **the most downloaded Python package today**, pulling in around `14M downloads / week`— according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2F… by `367_296` repositories. You may certainly put your trust in this code.
+ Requests is one of the most downloaded Python package today, pulling in around `14M downloads / week`— according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2F… by `500,000+` repositories. You may certainly put your trust in this code.
<p> </p>
@@ -87,11 +90,14 @@
+ Automatic honoring of `.netrc` + Chunked HTTP Requests
&, of course, rock–solid stability!
+
</pre>
+
</div>
<p align="center">
✨ 🍰 ✨
+
</p>
<p> </p>
@@ -99,7 +105,7 @@
Requests Module Installation
----------------------------
- The recommended way to intall the `requests` module is to simply use [`pipenv`](https://pipenv.kennethreitz.org) (or `pip`, of
+ The recommended way to install the `requests` module is to simply use [`pipenv`](https://pipenv.kennethreitz.org) (or `pip`, of
course):
```console
@@ -113,10 +119,11 @@
-------------------------------------
- ## P.S. — Documentation is Available at [`//requests.readthedocs.io`](https://requests.readthedocs.io/en/latest/).
+ ## P.S. — Documentation is available at [`requests.readthedocs.io`](https://requests.readthedocs.io/en/latest/).
<p align="center">
<a href="https://requests.readthedocs.io/"><img src="https://raw.githubusercontent.com/psf/requests/master/ext/ss.png" align="center" /></a>
+
</p>
@@ -127,12 +134,14 @@
<p align="center">
<a href="https://kennethreitz.org/"><img src="https://raw.githubusercontent.com/psf/requests/master/ext/kr.png" align="center" /></a>
+
</p>
<p> </p>
<p align="center">
<a href="https://www.python.org/psf/"><img src="https://raw.githubusercontent.com/psf/requests/master/ext/psf.png" align="center" /></a>
+
</p>
Platform: UNKNOWN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.23.0/Pipfile.lock new/requests-2.24.0/Pipfile.lock
--- old/requests-2.23.0/Pipfile.lock 2020-02-18 23:55:51.000000000 +0100
+++ new/requests-2.24.0/Pipfile.lock 2020-04-03 23:30:39.000000000 +0200
@@ -16,10 +16,10 @@
"default": {
"certifi": {
"hashes": [
- "sha256:e4f3620cfea4f83eedc95b24abd9cd56f3c4b146dd0177e83a21b4eb49e21e50",
- "sha256:fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef"
+ "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3",
+ "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"
],
- "version": "==2019.9.11"
+ "version": "==2019.11.28"
},
"chardet": {
"hashes": [
@@ -30,41 +30,32 @@
},
"idna": {
"hashes": [
- "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
- "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
+ "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb",
+ "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"
],
- "version": "==2.8"
+ "version": "==2.9"
},
"pysocks": {
"hashes": [
- "sha256:15d38914b60dbcb231d276f64882a20435c049450160e953ca7d313d1405f16f",
- "sha256:32238918ac0f19e9fd870a8692ac9bd14f5e8752b3c62624cda5851424642210",
- "sha256:d9031ea45fdfacbe59a99273e9f0448ddb33c1580fe3831c1b09557c5718977c"
+ "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299",
+ "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5",
+ "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"
],
- "version": "==1.7.0"
+ "version": "==1.7.1"
},
"requests": {
"editable": true,
"extras": [
"socks"
],
- "path": ".",
- "version": "==2.22.0"
+ "path": "."
},
"urllib3": {
"hashes": [
- "sha256:319cef72311e511d94be1bb478d202fde499935d0347a9e8f0d232dc3bce47c6",
- "sha256:8a8090dd02b145256534c205e624eb20161080428ffa14408f6f283c0d0c356e"
- ],
- "version": "==1.25.4"
- },
- "win-inet-pton": {
- "hashes": [
- "sha256:dd03d942c0d3e2b1cf8bab511844546dfa5f74cb61b241699fa379ad707dea4f",
- "sha256:eaf0193cbe7152ac313598a0da7313fb479f769343c0c16c5308f64887dc885b"
+ "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc",
+ "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"
],
- "markers": "sys_platform == 'win32' and python_version == '2.7'",
- "version": "==1.1.0"
+ "version": "==1.25.8"
}
},
"develop": {
@@ -83,6 +74,13 @@
],
"version": "==1.5"
},
+ "appdirs": {
+ "hashes": [
+ "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92",
+ "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"
+ ],
+ "version": "==1.4.3"
+ },
"atomicwrites": {
"hashes": [
"sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4",
@@ -92,24 +90,24 @@
},
"attrs": {
"hashes": [
- "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79",
- "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"
+ "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
+ "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
],
- "version": "==19.1.0"
+ "version": "==19.3.0"
},
"babel": {
"hashes": [
- "sha256:af92e6106cb7c55286b25b38ad7695f8b4efb36a90ba483d7f7a6628c46158ab",
- "sha256:e86135ae101e31e2c8ec20a4e0c5220f4eed12487d5cf3f78be7e98d3a57fc28"
+ "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38",
+ "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"
],
- "version": "==2.7.0"
+ "version": "==2.8.0"
},
"bleach": {
"hashes": [
- "sha256:213336e49e102af26d9cde77dd2d0397afabc5a6bf2fed985dc35b5d1e285a16",
- "sha256:3fdf7f77adcf649c9911387df51254b813185e32b2c6619f690b593a617e19fa"
+ "sha256:cc8da25076a1fe56c3ac63671e2194458e0c4d9c7becfd52ca251650d517903c",
+ "sha256:e78e426105ac07026ba098f04de8abe9b6e3e98b5befbf89b51a5ef0a4292b03"
],
- "version": "==3.1.0"
+ "version": "==3.1.4"
},
"blinker": {
"hashes": [
@@ -155,43 +153,43 @@
},
"certifi": {
"hashes": [
- "sha256:e4f3620cfea4f83eedc95b24abd9cd56f3c4b146dd0177e83a21b4eb49e21e50",
- "sha256:fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef"
+ "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3",
+ "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"
],
- "version": "==2019.9.11"
+ "version": "==2019.11.28"
},
"cffi": {
"hashes": [
- "sha256:041c81822e9f84b1d9c401182e174996f0bae9991f33725d059b771744290774",
- "sha256:046ef9a22f5d3eed06334d01b1e836977eeef500d9b78e9ef693f9380ad0b83d",
- "sha256:066bc4c7895c91812eff46f4b1c285220947d4aa46fa0a2651ff85f2afae9c90",
- "sha256:066c7ff148ae33040c01058662d6752fd73fbc8e64787229ea8498c7d7f4041b",
- "sha256:2444d0c61f03dcd26dbf7600cf64354376ee579acad77aef459e34efcb438c63",
- "sha256:300832850b8f7967e278870c5d51e3819b9aad8f0a2c8dbe39ab11f119237f45",
- "sha256:34c77afe85b6b9e967bd8154e3855e847b70ca42043db6ad17f26899a3df1b25",
- "sha256:46de5fa00f7ac09f020729148ff632819649b3e05a007d286242c4882f7b1dc3",
- "sha256:4aa8ee7ba27c472d429b980c51e714a24f47ca296d53f4d7868075b175866f4b",
- "sha256:4d0004eb4351e35ed950c14c11e734182591465a33e960a4ab5e8d4f04d72647",
- "sha256:4e3d3f31a1e202b0f5a35ba3bc4eb41e2fc2b11c1eff38b362de710bcffb5016",
- "sha256:50bec6d35e6b1aaeb17f7c4e2b9374ebf95a8975d57863546fa83e8d31bdb8c4",
- "sha256:55cad9a6df1e2a1d62063f79d0881a414a906a6962bc160ac968cc03ed3efcfb",
- "sha256:5662ad4e4e84f1eaa8efce5da695c5d2e229c563f9d5ce5b0113f71321bcf753",
- "sha256:59b4dc008f98fc6ee2bb4fd7fc786a8d70000d058c2bbe2698275bc53a8d3fa7",
- "sha256:73e1ffefe05e4ccd7bcea61af76f36077b914f92b76f95ccf00b0c1b9186f3f9",
- "sha256:a1f0fd46eba2d71ce1589f7e50a9e2ffaeb739fb2c11e8192aa2b45d5f6cc41f",
- "sha256:a2e85dc204556657661051ff4bab75a84e968669765c8a2cd425918699c3d0e8",
- "sha256:a5457d47dfff24882a21492e5815f891c0ca35fefae8aa742c6c263dac16ef1f",
- "sha256:a8dccd61d52a8dae4a825cdbb7735da530179fea472903eb871a5513b5abbfdc",
- "sha256:ae61af521ed676cf16ae94f30fe202781a38d7178b6b4ab622e4eec8cefaff42",
- "sha256:b012a5edb48288f77a63dba0840c92d0504aa215612da4541b7b42d849bc83a3",
- "sha256:d2c5cfa536227f57f97c92ac30c8109688ace8fa4ac086d19d0af47d134e2909",
- "sha256:d42b5796e20aacc9d15e66befb7a345454eef794fdb0737d1af593447c6c8f45",
- "sha256:dee54f5d30d775f525894d67b1495625dd9322945e7fee00731952e0368ff42d",
- "sha256:e070535507bd6aa07124258171be2ee8dfc19119c28ca94c9dfb7efd23564512",
- "sha256:e1ff2748c84d97b065cc95429814cdba39bcbd77c9c85c89344b317dc0d9cbff",
- "sha256:ed851c75d1e0e043cbf5ca9a8e1b13c4c90f3fbd863dacb01c0808e2b5204201"
+ "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff",
+ "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b",
+ "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac",
+ "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0",
+ "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384",
+ "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26",
+ "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6",
+ "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b",
+ "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e",
+ "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd",
+ "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2",
+ "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66",
+ "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc",
+ "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8",
+ "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55",
+ "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4",
+ "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5",
+ "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d",
+ "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78",
+ "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa",
+ "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793",
+ "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f",
+ "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a",
+ "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f",
+ "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30",
+ "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f",
+ "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3",
+ "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c"
],
- "version": "==1.12.3"
+ "version": "==1.14.0"
},
"chardet": {
"hashes": [
@@ -202,78 +200,77 @@
},
"click": {
"hashes": [
- "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
- "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
+ "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc",
+ "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a"
],
- "version": "==7.0"
+ "version": "==7.1.1"
},
"codecov": {
"hashes": [
- "sha256:8ed8b7c6791010d359baed66f84f061bba5bd41174bf324c31311e8737602788",
- "sha256:ae00d68e18d8a20e9c3288ba3875ae03db3a8e892115bf9b83ef20507732bed4"
+ "sha256:09fb045eb044a619cd2b9dacd7789ae8e322cb7f18196378579fd8d883e6b665",
+ "sha256:aeeefa3a03cac8a78e4f988e935b51a4689bb1f17f20d4e827807ee11135f845"
],
"index": "pypi",
- "version": "==2.0.15"
+ "version": "==2.0.22"
},
"configparser": {
"hashes": [
"sha256:254c1d9c79f60c45dfde850850883d5aaa7f19a23f13561243a050d5a7c3fe4c",
"sha256:c7d282687a5308319bf3d2e7706e575c635b0a470342641c93bea0ea3b5331df"
],
- "markers": "python_version == '2.7'",
+ "markers": "python_version < '3.2'",
"version": "==4.0.2"
},
"contextlib2": {
"hashes": [
- "sha256:509f9419ee91cdd00ba34443217d5ca51f5a364a404e1dce9e8979cea969ca48",
- "sha256:f5260a6e679d2ff42ec91ec5252f4eeffdcf21053db9113bd0a8e4d953769c00"
+ "sha256:01f490098c18b19d2bd5bb5dc445b2054d2fa97f09a4280ba2c5f3c394c8162e",
+ "sha256:3355078a159fbb44ee60ea80abd0d87b80b78c248643b49aa6d94673b413609b"
],
- "markers": "python_version < '3'",
- "version": "==0.5.5"
+ "markers": "python_version < '3.2'",
+ "version": "==0.6.0.post1"
},
"coverage": {
"hashes": [
- "sha256:08907593569fe59baca0bf152c43f3863201efb6113ecb38ce7e97ce339805a6",
- "sha256:0be0f1ed45fc0c185cfd4ecc19a1d6532d72f86a2bac9de7e24541febad72650",
- "sha256:141f08ed3c4b1847015e2cd62ec06d35e67a3ac185c26f7635f4406b90afa9c5",
- "sha256:19e4df788a0581238e9390c85a7a09af39c7b539b29f25c89209e6c3e371270d",
- "sha256:23cc09ed395b03424d1ae30dcc292615c1372bfba7141eb85e11e50efaa6b351",
- "sha256:245388cda02af78276b479f299bbf3783ef0a6a6273037d7c60dc73b8d8d7755",
- "sha256:331cb5115673a20fb131dadd22f5bcaf7677ef758741312bee4937d71a14b2ef",
- "sha256:386e2e4090f0bc5df274e720105c342263423e77ee8826002dcffe0c9533dbca",
- "sha256:3a794ce50daee01c74a494919d5ebdc23d58873747fa0e288318728533a3e1ca",
- "sha256:60851187677b24c6085248f0a0b9b98d49cba7ecc7ec60ba6b9d2e5574ac1ee9",
- "sha256:63a9a5fc43b58735f65ed63d2cf43508f462dc49857da70b8980ad78d41d52fc",
- "sha256:6b62544bb68106e3f00b21c8930e83e584fdca005d4fffd29bb39fb3ffa03cb5",
- "sha256:6ba744056423ef8d450cf627289166da65903885272055fb4b5e113137cfa14f",
- "sha256:7494b0b0274c5072bddbfd5b4a6c6f18fbbe1ab1d22a41e99cd2d00c8f96ecfe",
- "sha256:826f32b9547c8091679ff292a82aca9c7b9650f9fda3e2ca6bf2ac905b7ce888",
- "sha256:93715dffbcd0678057f947f496484e906bf9509f5c1c38fc9ba3922893cda5f5",
- "sha256:9a334d6c83dfeadae576b4d633a71620d40d1c379129d587faa42ee3e2a85cce",
- "sha256:af7ed8a8aa6957aac47b4268631fa1df984643f07ef00acd374e456364b373f5",
- "sha256:bf0a7aed7f5521c7ca67febd57db473af4762b9622254291fbcbb8cd0ba5e33e",
- "sha256:bf1ef9eb901113a9805287e090452c05547578eaab1b62e4ad456fcc049a9b7e",
- "sha256:c0afd27bc0e307a1ffc04ca5ec010a290e49e3afbe841c5cafc5c5a80ecd81c9",
- "sha256:dd579709a87092c6dbee09d1b7cfa81831040705ffa12a1b248935274aee0437",
- "sha256:df6712284b2e44a065097846488f66840445eb987eb81b3cc6e4149e7b6982e1",
- "sha256:e07d9f1a23e9e93ab5c62902833bf3e4b1f65502927379148b6622686223125c",
- "sha256:e2ede7c1d45e65e209d6093b762e98e8318ddeff95317d07a27a2140b80cfd24",
- "sha256:e4ef9c164eb55123c62411f5936b5c2e521b12356037b6e1c2617cef45523d47",
- "sha256:eca2b7343524e7ba246cab8ff00cab47a2d6d54ada3b02772e908a45675722e2",
- "sha256:eee64c616adeff7db37cc37da4180a3a5b6177f5c46b187894e633f088fb5b28",
- "sha256:ef824cad1f980d27f26166f86856efe11eff9912c4fed97d3804820d43fa550c",
- "sha256:efc89291bd5a08855829a3c522df16d856455297cf35ae827a37edac45f466a7",
- "sha256:fa964bae817babece5aa2e8c1af841bebb6d0b9add8e637548809d040443fee0",
- "sha256:ff37757e068ae606659c28c3bd0d923f9d29a85de79bf25b2b34b148473b5025"
+ "sha256:03f630aba2b9b0d69871c2e8d23a69b7fe94a1e2f5f10df5049c0df99db639a0",
+ "sha256:046a1a742e66d065d16fb564a26c2a15867f17695e7f3d358d7b1ad8a61bca30",
+ "sha256:0a907199566269e1cfa304325cc3b45c72ae341fbb3253ddde19fa820ded7a8b",
+ "sha256:165a48268bfb5a77e2d9dbb80de7ea917332a79c7adb747bd005b3a07ff8caf0",
+ "sha256:1b60a95fc995649464e0cd48cecc8288bac5f4198f21d04b8229dc4097d76823",
+ "sha256:1f66cf263ec77af5b8fe14ef14c5e46e2eb4a795ac495ad7c03adc72ae43fafe",
+ "sha256:2e08c32cbede4a29e2a701822291ae2bc9b5220a971bba9d1e7615312efd3037",
+ "sha256:3844c3dab800ca8536f75ae89f3cf566848a3eb2af4d9f7b1103b4f4f7a5dad6",
+ "sha256:408ce64078398b2ee2ec08199ea3fcf382828d2f8a19c5a5ba2946fe5ddc6c31",
+ "sha256:443be7602c790960b9514567917af538cac7807a7c0c0727c4d2bbd4014920fd",
+ "sha256:4482f69e0701139d0f2c44f3c395d1d1d37abd81bfafbf9b6efbe2542679d892",
+ "sha256:4a8a259bf990044351baf69d3b23e575699dd60b18460c71e81dc565f5819ac1",
+ "sha256:513e6526e0082c59a984448f4104c9bf346c2da9961779ede1fc458e8e8a1f78",
+ "sha256:5f587dfd83cb669933186661a351ad6fc7166273bc3e3a1531ec5c783d997aac",
+ "sha256:62061e87071497951155cbccee487980524d7abea647a1b2a6eb6b9647df9006",
+ "sha256:641e329e7f2c01531c45c687efcec8aeca2a78a4ff26d49184dce3d53fc35014",
+ "sha256:65a7e00c00472cd0f59ae09d2fb8a8aaae7f4a0cf54b2b74f3138d9f9ceb9cb2",
+ "sha256:6ad6ca45e9e92c05295f638e78cd42bfaaf8ee07878c9ed73e93190b26c125f7",
+ "sha256:73aa6e86034dad9f00f4bbf5a666a889d17d79db73bc5af04abd6c20a014d9c8",
+ "sha256:7c9762f80a25d8d0e4ab3cb1af5d9dffbddb3ee5d21c43e3474c84bf5ff941f7",
+ "sha256:85596aa5d9aac1bf39fe39d9fa1051b0f00823982a1de5766e35d495b4a36ca9",
+ "sha256:86a0ea78fd851b313b2e712266f663e13b6bc78c2fb260b079e8b67d970474b1",
+ "sha256:8a620767b8209f3446197c0e29ba895d75a1e272a36af0786ec70fe7834e4307",
+ "sha256:922fb9ef2c67c3ab20e22948dcfd783397e4c043a5c5fa5ff5e9df5529074b0a",
+ "sha256:9fad78c13e71546a76c2f8789623eec8e499f8d2d799f4b4547162ce0a4df435",
+ "sha256:a37c6233b28e5bc340054cf6170e7090a4e85069513320275a4dc929144dccf0",
+ "sha256:c3fc325ce4cbf902d05a80daa47b645d07e796a80682c1c5800d6ac5045193e5",
+ "sha256:cda33311cb9fb9323958a69499a667bd728a39a7aa4718d7622597a44c4f1441",
+ "sha256:db1d4e38c9b15be1521722e946ee24f6db95b189d1447fa9ff18dd16ba89f732",
+ "sha256:eda55e6e9ea258f5e4add23bcf33dc53b2c319e70806e180aecbff8d90ea24de",
+ "sha256:f372cdbb240e09ee855735b9d85e7f50730dcfb6296b74b95a3e5dea0615c4c1"
],
- "version": "==4.5.4"
+ "version": "==5.0.4"
},
"decorator": {
"hashes": [
- "sha256:86156361c50488b84a3f148056ea716ca587df2f0de1d34750d35c21312725de",
- "sha256:f069f3a01830ca754ba5258fde2278454a0b5b79e0d7f5c13b3b97e57d4acff6"
+ "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760",
+ "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"
],
- "version": "==4.4.0"
+ "version": "==4.4.2"
},
"detox": {
"hashes": [
@@ -283,6 +280,12 @@
"index": "pypi",
"version": "==0.19"
},
+ "distlib": {
+ "hashes": [
+ "sha256:2e166e231a26b36d6dfe35a48c4464346620f8645ed0ace01ee31822b288de21"
+ ],
+ "version": "==0.3.0"
+ },
"dnspython": {
"hashes": [
"sha256:36c5e8e38d4369a08b6780b7f27d790a292b2b08eea01607865bf0936c558e01",
@@ -292,12 +295,11 @@
},
"docutils": {
"hashes": [
- "sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0",
- "sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827",
- "sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"
+ "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af",
+ "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"
],
"index": "pypi",
- "version": "==0.15.2"
+ "version": "==0.16"
},
"entrypoints": {
"hashes": [
@@ -308,13 +310,12 @@
},
"enum34": {
"hashes": [
- "sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850",
- "sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a",
- "sha256:6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79",
- "sha256:8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1"
+ "sha256:a98a201d6de3f2ab3db284e70a33b0f896fbf35f8086594e8c9e74b909058d53",
+ "sha256:c3858660960c984d6ab0ebad691265180da2b43f07e061c0f8dca9ef3cffd328",
+ "sha256:cce6a7477ed816bd2542d03d53db9f0db935dd013b70f336a95c73979289f248"
],
"markers": "python_version == '2.7' or python_version == '3.3'",
- "version": "==1.1.6"
+ "version": "==1.1.10"
},
"eventlet": {
"hashes": [
@@ -339,18 +340,18 @@
},
"flake8": {
"hashes": [
- "sha256:19241c1cbc971b9962473e4438a2ca19749a7dd002dd1a946eaba171b4114548",
- "sha256:8e9dfa3cecb2400b3738a42c54c3043e821682b9c840b0448c0503f781130696"
+ "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb",
+ "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca"
],
"index": "pypi",
- "version": "==3.7.8"
+ "version": "==3.7.9"
},
"flask": {
"hashes": [
- "sha256:13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52",
- "sha256:45eb5a6fd193d6cf7e0cf5d8a5b31f83d5faae0293695626f539a823e93b13f6"
+ "sha256:4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060",
+ "sha256:8a4fdd8936eba2512e9c85df320a37e694c93945b33ef33c89946a340a238557"
],
- "version": "==1.1.1"
+ "version": "==1.1.2"
},
"funcsigs": {
"hashes": [
@@ -374,7 +375,9 @@
"sha256:0d48200bc50cbf498716712129eef819b1729339e34c3ae71656964dac907c28",
"sha256:23d12eacffa9d0f290c0fe0c4e81ba6d5f3a5b7ac3c30a5eaf0126bf4deda5c8",
"sha256:37c9ba82bd82eb6a23c2e5acc03055c0e45697253b2393c9a50cef76a3985304",
+ "sha256:51155342eb4d6058a0ffcd98a798fe6ba21195517da97e15fca3db12ab201e6e",
"sha256:51503524dd6f152ab4ad1fbd168fc6c30b5795e8c70be4410a64940b3abb55c0",
+ "sha256:7457d685158522df483196b16ec648b28f8e847861adb01a55d41134e7734122",
"sha256:8041e2de00e745c0e05a502d6e6db310db7faa7c979b3a5877123548a4c0b214",
"sha256:81fcd96a275209ef117e9ec91f75c731fa18dcfd9ffaa1c0adbdaa3616a86043",
"sha256:853da4f9563d982e4121fed8c92eea1a4594a2299037b3034c3c898cb8e933d6",
@@ -388,7 +391,8 @@
"sha256:bcb530089ff24f6458a81ac3fa699e8c00194208a724b644ecc68422e1111939",
"sha256:beeabe25c3b704f7d56b573f7d2ff88fc99f0138e43480cecdfcaa3b87fe4f87",
"sha256:d634a7ea1fc3380ff96f9e44d8d22f38418c1c381d5fac680b272d7d90883720",
- "sha256:d97b0661e1aead761f0ded3b769044bb00ed5d33e1ec865e891a8b128bf7c656"
+ "sha256:d97b0661e1aead761f0ded3b769044bb00ed5d33e1ec865e891a8b128bf7c656",
+ "sha256:e538b8dae561080b542b0f5af64d47ef859f22517f7eca617bb314e0e03fd7ef"
],
"version": "==0.4.15"
},
@@ -402,25 +406,33 @@
},
"idna": {
"hashes": [
- "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
- "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
+ "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb",
+ "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"
],
- "version": "==2.8"
+ "version": "==2.9"
},
"imagesize": {
"hashes": [
- "sha256:3f349de3eb99145973fefb7dbe38554414e5c30abd0c8e4b970a7c9d09f3a1d8",
- "sha256:f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5"
+ "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1",
+ "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"
],
- "version": "==1.1.0"
+ "version": "==1.2.0"
},
"importlib-metadata": {
"hashes": [
- "sha256:aa18d7378b00b40847790e7c27e11673d7fed219354109d0e7b9e5b25dc3ad26",
- "sha256:d5f18a79777f3aa179c145737780282e27b508fc8fd688cb17c7a813e8bd39af"
+ "sha256:2a688cbaa90e0cc587f1df48bdc97a6eadccdcd9c35fb3f976a09e3b5016d90f",
+ "sha256:34513a8a0c4962bc66d35b359558fd8a5e10cd472d37aec5f66858addef32c1e"
],
"markers": "python_version < '3.8'",
- "version": "==0.23"
+ "version": "==1.6.0"
+ },
+ "importlib-resources": {
+ "hashes": [
+ "sha256:4019b6a9082d8ada9def02bece4a76b131518866790d58fdda0b5f8c603b36c2",
+ "sha256:dd98ceeef3f5ad2ef4cc287b8586da4ebad15877f351e9688987ad663a0a29b8"
+ ],
+ "markers": "python_version < '3.7'",
+ "version": "==1.4.0"
},
"itsdangerous": {
"hashes": [
@@ -431,10 +443,10 @@
},
"jinja2": {
"hashes": [
- "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013",
- "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b"
+ "sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250",
+ "sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49"
],
- "version": "==2.10.1"
+ "version": "==2.11.1"
},
"markupsafe": {
"hashes": [
@@ -442,13 +454,16 @@
"sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
"sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
"sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
+ "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42",
"sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
"sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
"sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
"sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
"sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
"sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
+ "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b",
"sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
+ "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15",
"sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
"sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
"sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
@@ -465,7 +480,9 @@
"sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
"sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
"sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
- "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"
+ "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2",
+ "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7",
+ "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"
],
"version": "==1.1.1"
},
@@ -502,25 +519,25 @@
},
"pathlib2": {
"hashes": [
- "sha256:2156525d6576d21c4dcaddfa427fae887ef89a7a9de5cbfe0728b3aafa78427e",
- "sha256:446014523bb9be5c28128c4d2a10ad6bb60769e78bd85658fe44a450674e0ef8"
+ "sha256:0ec8205a157c80d7acc301c0b18fbd5d44fe655968f5d947b6ecef5290fc35db",
+ "sha256:6cd9a47b597b37cc57de1c05e56fb1a1c9cc9fab04fe78c29acd090418529868"
],
"markers": "python_version < '3.6'",
- "version": "==2.3.4"
+ "version": "==2.3.5"
},
"pluggy": {
"hashes": [
- "sha256:0db4b7601aae1d35b4a033282da476845aa19185c1e6964b25cf324b5e4ec3e6",
- "sha256:fa5fa1622fa6dd5c030e9cad086fa19ef6a0cf6d7a2d12318e10cb49d6d68f34"
+ "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0",
+ "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"
],
- "version": "==0.13.0"
+ "version": "==0.13.1"
},
"py": {
"hashes": [
- "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa",
- "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"
+ "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa",
+ "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"
],
- "version": "==1.8.0"
+ "version": "==1.8.1"
},
"pycodestyle": {
"hashes": [
@@ -531,9 +548,10 @@
},
"pycparser": {
"hashes": [
- "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"
+ "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0",
+ "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"
],
- "version": "==2.19"
+ "version": "==2.20"
},
"pyflakes": {
"hashes": [
@@ -544,18 +562,18 @@
},
"pygments": {
"hashes": [
- "sha256:71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127",
- "sha256:881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297"
+ "sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b",
+ "sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe"
],
- "version": "==2.4.2"
+ "version": "==2.5.2"
},
"pysocks": {
"hashes": [
- "sha256:15d38914b60dbcb231d276f64882a20435c049450160e953ca7d313d1405f16f",
- "sha256:32238918ac0f19e9fd870a8692ac9bd14f5e8752b3c62624cda5851424642210",
- "sha256:d9031ea45fdfacbe59a99273e9f0448ddb33c1580fe3831c1b09557c5718977c"
+ "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299",
+ "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5",
+ "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"
],
- "version": "==1.7.0"
+ "version": "==1.7.1"
},
"pytest": {
"hashes": [
@@ -567,18 +585,18 @@
},
"pytest-cov": {
"hashes": [
- "sha256:2b097cde81a302e1047331b48cadacf23577e431b61e9c6f49a1170bbe3d3da6",
- "sha256:e00ea4fdde970725482f1f35630d12f074e121a23801aabf2ae154ec6bdd343a"
+ "sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b",
+ "sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626"
],
"index": "pypi",
- "version": "==2.7.1"
+ "version": "==2.8.1"
},
"pytest-forked": {
"hashes": [
- "sha256:5fe33fbd07d7b1302c95310803a5e5726a4ff7f19d5a542b7ce57c76fed8135f",
- "sha256:d352aaced2ebd54d42a65825722cb433004b4446ab5d2044851d9cc7a00c9e38"
+ "sha256:1805699ed9c9e60cb7a8179b8d4fa2b8898098e82d229b0825d8095f0f261100",
+ "sha256:1ae25dba8ee2e56fb47311c9638f9e58552691da87e82d25b0ce0e4bf52b7d87"
],
- "version": "==1.0.2"
+ "version": "==1.1.3"
},
"pytest-httpbin": {
"hashes": [
@@ -590,11 +608,11 @@
},
"pytest-mock": {
"hashes": [
- "sha256:43ce4e9dd5074993e7c021bb1c22cbb5363e612a2b5a76bc6d956775b10758b7",
- "sha256:5bf5771b1db93beac965a7347dc81c675ec4090cb841e49d9d34637a25c30568"
+ "sha256:b35eb281e93aafed138db25c8772b95d3756108b601947f89af503f8c629413f",
+ "sha256:cb67402d87d5f53c579263d37971a164743dc33c159dfb4fb4a86f37c5552307"
],
"index": "pypi",
- "version": "==1.10.4"
+ "version": "==2.0.0"
},
"pytest-xdist": {
"hashes": [
@@ -606,10 +624,10 @@
},
"pytz": {
"hashes": [
- "sha256:26c0b32e437e54a18161324a2fca3c4b9846b74a8dccddd843113109e1116b32",
- "sha256:c894d57500a4cd2d5c71114aaab77dbab5eabd9022308ce5ac9bb93a60a6f0c7"
+ "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d",
+ "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"
],
- "version": "==2019.2"
+ "version": "==2019.3"
},
"raven": {
"extras": [
@@ -623,19 +641,18 @@
},
"readme-renderer": {
"hashes": [
- "sha256:bb16f55b259f27f75f640acf5e00cf897845a8b3e4731b5c1a436e4b8529202f",
- "sha256:c8532b79afc0375a85f10433eca157d6b50f7d6990f337fa498c96cd4bfc203d"
+ "sha256:1b6d8dd1673a0b293766b4106af766b6eff3654605f9c4f239e65de6076bc222",
+ "sha256:e67d64242f0174a63c3b727801a2fff4c1f38ebe5d71d95ff7ece081945a6cd4"
],
"index": "pypi",
- "version": "==24.0"
+ "version": "==25.0"
},
"requests": {
"editable": true,
"extras": [
"socks"
],
- "path": ".",
- "version": "==2.22.0"
+ "path": "."
},
"scandir": {
"hashes": [
@@ -654,18 +671,27 @@
"markers": "python_version < '3.5'",
"version": "==1.10.0"
},
+ "singledispatch": {
+ "hashes": [
+ "sha256:5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c",
+ "sha256:833b46966687b3de7f438c761ac475213e53b306740f1abfaa86e1d1aae56aa8"
+ ],
+ "markers": "python_version < '3.4'",
+ "version": "==3.4.0.3"
+ },
"six": {
"hashes": [
- "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
- "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
+ "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
+ "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
],
- "version": "==1.12.0"
+ "version": "==1.14.0"
},
"snowballstemmer": {
"hashes": [
- "sha256:713e53b79cbcf97bc5245a06080a33d54a77e7cce2f789c835a143bcdb5c033e"
+ "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0",
+ "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"
],
- "version": "==1.9.1"
+ "version": "==2.0.0"
},
"sphinx": {
"hashes": [
@@ -678,8 +704,7 @@
"toml": {
"hashes": [
"sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c",
- "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e",
- "sha256:f1db651f9657708513243e61e6cc67d101a39bad662eaa9b5546f789338e07a3"
+ "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"
],
"version": "==0.10.0"
},
@@ -702,17 +727,17 @@
},
"urllib3": {
"hashes": [
- "sha256:319cef72311e511d94be1bb478d202fde499935d0347a9e8f0d232dc3bce47c6",
- "sha256:8a8090dd02b145256534c205e624eb20161080428ffa14408f6f283c0d0c356e"
+ "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc",
+ "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"
],
- "version": "==1.25.4"
+ "version": "==1.25.8"
},
"virtualenv": {
"hashes": [
- "sha256:680af46846662bb38c5504b78bad9ed9e4f3ba2d54f54ba42494fdf94337fe30",
- "sha256:f78d81b62d3147396ac33fc9d77579ddc42cc2a98dd9ea38886f616b33bc7fb2"
+ "sha256:4e399f48c6b71228bf79f5febd27e3bbb753d9d5905776a86667bc61ab628a25",
+ "sha256:9e81279f4a9d16d1c0654a127c2c86e5bca2073585341691882c1e66e31ef8a5"
],
- "version": "==16.7.5"
+ "version": "==20.0.15"
},
"webencodings": {
"hashes": [
@@ -723,17 +748,18 @@
},
"werkzeug": {
"hashes": [
- "sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7",
- "sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4"
+ "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43",
+ "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c"
],
- "version": "==0.16.0"
+ "version": "==1.0.1"
},
"zipp": {
"hashes": [
- "sha256:3718b1cbcd963c7d4c5511a8240812904164b7f381b647143a89d3b98f9bcd8e",
- "sha256:f06903e9f1f43b12d371004b4ac7b06ab39a44adc747266928ae6debfa7b3335"
+ "sha256:c70410551488251b0fee67b460fb9a536af8d6f9f008ad10ac51f615b6a521b1",
+ "sha256:e0d9e63797e483a30d27e09fffd308c59a700d365ec34e93cc100844168bf921"
],
- "version": "==0.6.0"
+ "markers": "python_version < '3.8'",
+ "version": "==1.2.0"
}
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.23.0/README.md new/requests-2.24.0/README.md
--- old/requests-2.23.0/README.md 2020-02-18 23:55:51.000000000 +0100
+++ new/requests-2.24.0/README.md 2020-06-17 18:26:37.000000000 +0200
@@ -14,10 +14,13 @@
<code> 'A simple, yet elegant HTTP library.'</code>
</div>
- <p align="center">
-This software has been designed for you, with much joy,
-by <a href="https://kennethreitz.org/">Kenneth Reitz</a> & is protected by The <a href="https://www.python.org/psf/">Python Software Foundation</a>.
- </p>
+ <p>
+ This software has been designed for you, with much joy,
+ by <a href="https://kennethreitz.org/">Kenneth Reitz</a> &
+ is protected by The <a href="https://www.python.org/psf/">Python Software Foundation</a>.
+
+ </p>
+
</pre>
</span>
@@ -28,7 +31,7 @@
<p> </p>
-```pycon
+```python
>>> import requests
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
@@ -38,9 +41,9 @@
>>> r.encoding
'utf-8'
>>> r.text
-u'{"type":"User"...'
+'{"type":"User"...'
>>> r.json()
-{u'disk_usage': 368627, u'private_gists': 484, ...}
+{'disk_usage': 368627, 'private_gists': 484, ...}
```
@@ -52,7 +55,7 @@
Requests allows you to send HTTP/1.1 requests extremely easily. There’s no need to manually add query strings to your URLs, or to form-encode your `PUT` & `POST` data — but nowadays, just use the `json` method!
-Requests is **the most downloaded Python package today**, pulling in around `14M downloads / week`— according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2F… by `367_296` repositories. You may certainly put your trust in this code.
+Requests is one of the most downloaded Python package today, pulling in around `14M downloads / week`— according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2F… by `500,000+` repositories. You may certainly put your trust in this code.
<p> </p>
@@ -77,11 +80,14 @@
+ Automatic honoring of `.netrc` + Chunked HTTP Requests
&, of course, rock–solid stability!
+
</pre>
+
</div>
<p align="center">
✨ 🍰 ✨
+
</p>
<p> </p>
@@ -89,7 +95,7 @@
Requests Module Installation
----------------------------
-The recommended way to intall the `requests` module is to simply use [`pipenv`](https://pipenv.kennethreitz.org) (or `pip`, of
+The recommended way to install the `requests` module is to simply use [`pipenv`](https://pipenv.kennethreitz.org) (or `pip`, of
course):
```console
@@ -103,10 +109,11 @@
-------------------------------------
-## P.S. — Documentation is Available at [`//requests.readthedocs.io`](https://requests.readthedocs.io/en/latest/).
+## P.S. — Documentation is available at [`requests.readthedocs.io`](https://requests.readthedocs.io/en/latest/).
<p align="center">
<a href="https://requests.readthedocs.io/"><img src="https://raw.githubusercontent.com/psf/requests/master/ext/ss.png" align="center" /></a>
+
</p>
@@ -117,10 +124,12 @@
<p align="center">
<a href="https://kennethreitz.org/"><img src="https://raw.githubusercontent.com/psf/requests/master/ext/kr.png" align="center" /></a>
+
</p>
<p> </p>
<p align="center">
<a href="https://www.python.org/psf/"><img src="https://raw.githubusercontent.com/psf/requests/master/ext/psf.png" align="center" /></a>
+
</p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.23.0/requests/__init__.py new/requests-2.24.0/requests/__init__.py
--- old/requests-2.23.0/requests/__init__.py 2020-02-18 23:55:51.000000000 +0100
+++ new/requests-2.24.0/requests/__init__.py 2020-05-09 06:43:25.000000000 +0200
@@ -90,14 +90,22 @@
"version!".format(urllib3.__version__, chardet.__version__),
RequestsDependencyWarning)
-# Attempt to enable urllib3's SNI support, if possible
+# Attempt to enable urllib3's fallback for SNI support
+# if the standard library doesn't support SNI or the
+# 'ssl' library isn't available.
try:
- from urllib3.contrib import pyopenssl
- pyopenssl.inject_into_urllib3()
+ try:
+ import ssl
+ except ImportError:
+ ssl = None
- # Check cryptography version
- from cryptography import __version__ as cryptography_version
- _check_cryptography(cryptography_version)
+ if not getattr(ssl, "HAS_SNI", False):
+ from urllib3.contrib import pyopenssl
+ pyopenssl.inject_into_urllib3()
+
+ # Check cryptography version
+ from cryptography import __version__ as cryptography_version
+ _check_cryptography(cryptography_version)
except ImportError:
pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.23.0/requests/__version__.py new/requests-2.24.0/requests/__version__.py
--- old/requests-2.23.0/requests/__version__.py 2020-02-19 19:27:13.000000000 +0100
+++ new/requests-2.24.0/requests/__version__.py 2020-06-17 17:52:43.000000000 +0200
@@ -5,8 +5,8 @@
__title__ = 'requests'
__description__ = 'Python HTTP for Humans.'
__url__ = 'https://requests.readthedocs.io'
-__version__ = '2.23.0'
-__build__ = 0x022300
+__version__ = '2.24.0'
+__build__ = 0x022400
__author__ = 'Kenneth Reitz'
__author_email__ = 'me(a)kennethreitz.org'
__license__ = 'Apache 2.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.23.0/requests/exceptions.py new/requests-2.24.0/requests/exceptions.py
--- old/requests-2.23.0/requests/exceptions.py 2019-09-19 16:16:07.000000000 +0200
+++ new/requests-2.24.0/requests/exceptions.py 2020-04-03 23:13:21.000000000 +0200
@@ -94,11 +94,11 @@
class ContentDecodingError(RequestException, BaseHTTPError):
- """Failed to decode response content"""
+ """Failed to decode response content."""
class StreamConsumedError(RequestException, TypeError):
- """The content for this response was already consumed"""
+ """The content for this response was already consumed."""
class RetryError(RequestException):
@@ -106,21 +106,18 @@
class UnrewindableBodyError(RequestException):
- """Requests encountered an error when trying to rewind a body"""
+ """Requests encountered an error when trying to rewind a body."""
# Warnings
class RequestsWarning(Warning):
"""Base warning for Requests."""
- pass
class FileModeWarning(RequestsWarning, DeprecationWarning):
"""A file was opened in text mode, but Requests determined its binary length."""
- pass
class RequestsDependencyWarning(RequestsWarning):
"""An imported dependency doesn't match the expected version range."""
- pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.23.0/requests/models.py new/requests-2.24.0/requests/models.py
--- old/requests-2.23.0/requests/models.py 2020-02-19 19:27:02.000000000 +0100
+++ new/requests-2.24.0/requests/models.py 2020-06-17 17:30:34.000000000 +0200
@@ -473,12 +473,12 @@
not isinstance(data, (basestring, list, tuple, Mapping))
])
- try:
- length = super_len(data)
- except (TypeError, AttributeError, UnsupportedOperation):
- length = None
-
if is_stream:
+ try:
+ length = super_len(data)
+ except (TypeError, AttributeError, UnsupportedOperation):
+ length = None
+
body = data
if getattr(body, 'tell', None) is not None:
@@ -916,7 +916,7 @@
return l
def raise_for_status(self):
- """Raises stored :class:`HTTPError`, if one occurred."""
+ """Raises :class:`HTTPError`, if one occurred."""
http_error_msg = ''
if isinstance(self.reason, bytes):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.23.0/requests/sessions.py new/requests-2.24.0/requests/sessions.py
--- old/requests-2.23.0/requests/sessions.py 2020-02-18 23:55:51.000000000 +0100
+++ new/requests-2.24.0/requests/sessions.py 2020-06-15 22:18:41.000000000 +0200
@@ -658,11 +658,13 @@
extract_cookies_to_jar(self.cookies, request, r.raw)
- # Redirect resolving generator.
- gen = self.resolve_redirects(r, request, **kwargs)
-
# Resolve redirects if allowed.
- history = [resp for resp in gen] if allow_redirects else []
+ if allow_redirects:
+ # Redirect resolving generator.
+ gen = self.resolve_redirects(r, request, **kwargs)
+ history = [resp for resp in gen]
+ else:
+ history = []
# Shuffle things around if there's history.
if history:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.23.0/requests.egg-info/PKG-INFO new/requests-2.24.0/requests.egg-info/PKG-INFO
--- old/requests-2.23.0/requests.egg-info/PKG-INFO 2020-02-19 19:48:35.000000000 +0100
+++ new/requests-2.24.0/requests.egg-info/PKG-INFO 2020-06-17 18:29:52.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: requests
-Version: 2.23.0
+Version: 2.24.0
Summary: Python HTTP for Humans.
Home-page: https://requests.readthedocs.io
Author: Kenneth Reitz
@@ -24,10 +24,13 @@
<code> 'A simple, yet elegant HTTP library.'</code>
</div>
- <p align="center">
- This software has been designed for you, with much joy,
- by <a href="https://kennethreitz.org/">Kenneth Reitz</a> & is protected by The <a href="https://www.python.org/psf/">Python Software Foundation</a>.
- </p>
+ <p>
+ This software has been designed for you, with much joy,
+ by <a href="https://kennethreitz.org/">Kenneth Reitz</a> &
+ is protected by The <a href="https://www.python.org/psf/">Python Software Foundation</a>.
+
+ </p>
+
</pre>
</span>
@@ -38,7 +41,7 @@
<p> </p>
- ```pycon
+ ```python
>>> import requests
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
@@ -48,9 +51,9 @@
>>> r.encoding
'utf-8'
>>> r.text
- u'{"type":"User"...'
+ '{"type":"User"...'
>>> r.json()
- {u'disk_usage': 368627, u'private_gists': 484, ...}
+ {'disk_usage': 368627, 'private_gists': 484, ...}
```
@@ -62,7 +65,7 @@
Requests allows you to send HTTP/1.1 requests extremely easily. There’s no need to manually add query strings to your URLs, or to form-encode your `PUT` & `POST` data — but nowadays, just use the `json` method!
- Requests is **the most downloaded Python package today**, pulling in around `14M downloads / week`— according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2F… by `367_296` repositories. You may certainly put your trust in this code.
+ Requests is one of the most downloaded Python package today, pulling in around `14M downloads / week`— according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2F… by `500,000+` repositories. You may certainly put your trust in this code.
<p> </p>
@@ -87,11 +90,14 @@
+ Automatic honoring of `.netrc` + Chunked HTTP Requests
&, of course, rock–solid stability!
+
</pre>
+
</div>
<p align="center">
✨ 🍰 ✨
+
</p>
<p> </p>
@@ -99,7 +105,7 @@
Requests Module Installation
----------------------------
- The recommended way to intall the `requests` module is to simply use [`pipenv`](https://pipenv.kennethreitz.org) (or `pip`, of
+ The recommended way to install the `requests` module is to simply use [`pipenv`](https://pipenv.kennethreitz.org) (or `pip`, of
course):
```console
@@ -113,10 +119,11 @@
-------------------------------------
- ## P.S. — Documentation is Available at [`//requests.readthedocs.io`](https://requests.readthedocs.io/en/latest/).
+ ## P.S. — Documentation is available at [`requests.readthedocs.io`](https://requests.readthedocs.io/en/latest/).
<p align="center">
<a href="https://requests.readthedocs.io/"><img src="https://raw.githubusercontent.com/psf/requests/master/ext/ss.png" align="center" /></a>
+
</p>
@@ -127,12 +134,14 @@
<p align="center">
<a href="https://kennethreitz.org/"><img src="https://raw.githubusercontent.com/psf/requests/master/ext/kr.png" align="center" /></a>
+
</p>
<p> </p>
<p align="center">
<a href="https://www.python.org/psf/"><img src="https://raw.githubusercontent.com/psf/requests/master/ext/psf.png" align="center" /></a>
+
</p>
Platform: UNKNOWN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requests-2.23.0/tests/test_requests.py new/requests-2.24.0/tests/test_requests.py
--- old/requests-2.23.0/tests/test_requests.py 2020-02-18 23:55:51.000000000 +0100
+++ new/requests-2.24.0/tests/test_requests.py 2020-06-15 22:18:41.000000000 +0200
@@ -774,8 +774,10 @@
def test_conflicting_post_params(self, httpbin):
url = httpbin('post')
with open('Pipfile') as f:
- pytest.raises(ValueError, "requests.post(url, data='[{\"some\": \"data\"}]', files={'some': f})")
- pytest.raises(ValueError, "requests.post(url, data=u('[{\"some\": \"data\"}]'), files={'some': f})")
+ with pytest.raises(ValueError):
+ requests.post(url, data='[{"some": "data"}]', files={'some': f})
+ with pytest.raises(ValueError):
+ requests.post(url, data=u('[{"some": "data"}]'), files={'some': f})
def test_request_ok_set(self, httpbin):
r = requests.get(httpbin('status', '404'))
1
0
Hello community,
here is the log from the commit of package python-tomlkit for openSUSE:Factory checked in at 2020-08-01 12:30:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-tomlkit (Old)
and /work/SRC/openSUSE:Factory/.python-tomlkit.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-tomlkit"
Sat Aug 1 12:30:29 2020 rev:5 rq:822437 version:0.6.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-tomlkit/python-tomlkit.changes 2020-03-27 00:21:33.632143230 +0100
+++ /work/SRC/openSUSE:Factory/.python-tomlkit.new.3592/python-tomlkit.changes 2020-08-01 12:30:40.090428171 +0200
@@ -1,0 +2,6 @@
+Thu Jul 23 14:15:23 UTC 2020 - Marketa Calabkova <mcalabkova(a)suse.com>
+
+- update to version 0.6.0
+ * Added support for heterogeneous arrays
+
+-------------------------------------------------------------------
Old:
----
tomlkit-0.5.11.tar.gz
New:
----
tomlkit-0.6.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-tomlkit.spec ++++++
--- /var/tmp/diff_new_pack.DXXl5b/_old 2020-08-01 12:30:41.818429788 +0200
+++ /var/tmp/diff_new_pack.DXXl5b/_new 2020-08-01 12:30:41.822429792 +0200
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%bcond_without python2
Name: python-tomlkit
-Version: 0.5.11
+Version: 0.6.0
Release: 0
Summary: Style preserving TOML library
License: MIT
++++++ tomlkit-0.5.11.tar.gz -> tomlkit-0.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/PKG-INFO new/tomlkit-0.6.0/PKG-INFO
--- old/tomlkit-0.5.11/PKG-INFO 2020-02-29 18:21:32.805722000 +0100
+++ new/tomlkit-0.6.0/PKG-INFO 2020-04-15 13:57:47.323125000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: tomlkit
-Version: 0.5.11
+Version: 0.6.0
Summary: Style preserving TOML library
Home-page: https://github.com/sdispater/tomlkit
License: MIT
@@ -42,7 +42,7 @@
# TOML Kit - Style-preserving TOML library for Python
-TOML Kit is a **0.5.0-compliant** [TOML](https://github.com/toml-lang/toml) library.
+TOML Kit is a **1.0.0rc1-compliant** [TOML](https://github.com/toml-lang/toml) library.
It includes a parser that preserves all comments, indentations, whitespace and internal element ordering,
and makes them accessible and editable via an intuitive API.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/README.md new/tomlkit-0.6.0/README.md
--- old/tomlkit-0.5.11/README.md 2018-11-07 01:09:23.300364300 +0100
+++ new/tomlkit-0.6.0/README.md 2020-04-15 13:28:44.796336400 +0200
@@ -18,7 +18,7 @@
# TOML Kit - Style-preserving TOML library for Python
-TOML Kit is a **0.5.0-compliant** [TOML](https://github.com/toml-lang/toml) library.
+TOML Kit is a **1.0.0rc1-compliant** [TOML](https://github.com/toml-lang/toml) library.
It includes a parser that preserves all comments, indentations, whitespace and internal element ordering,
and makes them accessible and editable via an intuitive API.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/pyproject.toml new/tomlkit-0.6.0/pyproject.toml
--- old/tomlkit-0.5.11/pyproject.toml 2020-02-29 18:21:26.120309000 +0100
+++ new/tomlkit-0.6.0/pyproject.toml 2020-04-15 13:27:59.729676500 +0200
@@ -1,6 +1,6 @@
[tool.poetry]
name = "tomlkit"
-version = "0.5.11"
+version = "0.6.0"
description = "Style preserving TOML library"
authors = ["Sébastien Eustace <sebastien(a)eustace.io>"]
license = "MIT"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/setup.py new/tomlkit-0.6.0/setup.py
--- old/tomlkit-0.5.11/setup.py 2020-02-29 18:21:32.805093000 +0100
+++ new/tomlkit-0.6.0/setup.py 2020-04-15 13:57:47.322600000 +0200
@@ -22,9 +22,9 @@
setup_kwargs = {
'name': 'tomlkit',
- 'version': '0.5.11',
+ 'version': '0.6.0',
'description': 'Style preserving TOML library',
- 'long_description': '[github_release]: https://img.shields.io/github/release/sdispater/tomlkit.svg?logo=github&log…: https://img.shields.io/pypi/v/tomlkit.svg?logo=python&logoColor=white\n[pyt…: https://img.shields.io/pypi/pyversions/tomlkit.svg?logo=python&logoColor=wh…: https://img.shields.io/github/license/sdispater/tomlkit.svg?logo=github&log…: https://img.shields.io/travis/com/sdispater/tomlkit/master.svg?logo=travis&…: https://img.shields.io/appveyor/ci/sdispater/tomlkit/master.svg?logo=appvey…<!--Codecov logo not offered by shields.io or simpleicons.org, this is Codecov\'s SVG image modified to be white-->\n[codecov]: https://img.shields.io/codecov/c/github/sdispater/tomlkit/master.svg?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNDgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CgogPGc+CiAgPHRpdGxlPmJhY2tncm91bmQ8L3RpdGxlPgogIDxyZWN0IGZpbGw9Im5vbmUiIGlkPSJjYW52YXNfYmFja2dyb3VuZCIgaGVpZ2h0PSI0MDIiIHdpZHRoPSI1ODIiIHk9Ii0xIiB4PSItMSIvPgogPC9nPgogPGc+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxwYXRoIGlkPSJzdmdfMSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjZmZmZmZmIiBkPSJtMjUuMDE0LDBjLTEzLjc4NCwwLjAxIC0yNS4wMDQsMTEuMTQ5IC0yNS4wMTQsMjQuODMybDAsMC4wNjJsNC4yNTQsMi40ODJsMC4wNTgsLTAuMDM5YTEyLjIzOCwxMi4yMzggMCAwIDEgOS4wNzgsLTEuOTI4YTExLjg0NCwxMS44NDQgMCAwIDEgNS45OCwyLjk3NWwwLjczLDAuNjhsMC40MTMsLTAuOTA0YzAuNCwtMC44NzQgMC44NjIsLTEuNjk2IDEuMzc0LC0yLjQ0M2MwLjIwNiwtMC4zIDAuNDMzLC0wLjYwNCAwLjY5MiwtMC45MjlsMC40MjcsLTAuNTM1bC0wLjUyNiwtMC40NGExNy40NSwxNy40NSAwIDAgMCAtOC4xLC0zLjc4MWExNy44NTMsMTcuODUzIDAgMCAwIC04LjM3NSwwLjQ5YzIuMDIzLC04Ljg2OCA5LjgyLC0xNS4wNSAxOS4wMjcsLTE1LjA1N2M1LjE5NSwwIDEwLjA3OCwyLjAwNyAxMy43NTIsNS42NTJjMi42MTksMi41OTggNC40MjIsNS44MzUgNS4yMjQsOS4zNzJhMTcuOTA4LDE3LjkwOCAwIDAgMCAtNS4yMDgsLTAuNzlsLTAuMzE4LC0wLjAwMWExOC4wOTYsMTguMDk2IDAgMCAwIC0yLjA2NywwLjE1M2wtMC4wODcsMC4wMTJjLTAuMzAzLDAuMDQgLTAuNTcsMC4wODEgLTAuODEzLDAuMTI2Yy0wLjExOSwwLjAyIC0wLjIzNywwLjA0NSAtMC4zNTUsMC4wNjhjLTAuMjgsMC4wNTcgLTAuNTU0LDAuMTE5IC0wLjgxNiwwLjE4NWwtMC4yODgsMC4wNzNjLTAuMzM2LDAuMDkgLTAuNjc1LDAuMTkxIC0xLjAwNiwwLjNsLTAuMDYxLDAuMDJjLTAuNzQsMC4yNTEgLTEuNDc4LDAuNTU4IC0yLjE5LDAuOTE0bC0wLjA1NywwLjAyOWMtMC4zMTYsMC4xNTggLTAuNjM2LDAuMzMzIC0wLjk3OCwwLjUzNGwtMC4wNzUsMC4wNDVhMTYuOTcsMTYuOTcgMCAwIDAgLTQuNDE0LDMuNzhsLTAuMTU3LDAuMTkxYy0wLjMxNywwLjM5NCAtMC41NjcsMC43MjcgLTAuNzg3LDEuMDQ4Yy0wLjE4NCwwLjI3IC0wLjM2OSwwLjU2IC0wLjYsMC45NDJsLTAuMTI2LDAuMjE3Yy0wLjE4NCwwLjMxOCAtMC4zNDgsMC42MjIgLTAuNDg3LDAuOWwtMC4wMzMsMC4wNjFjLTAuMzU0LDAuNzExIC0wLjY2MSwxLjQ1NSAtMC45MTcsMi4yMTRsLTAuMDM2LDAuMTExYTE3LjEzLDE3LjEzIDAgMCAwIC0wLjg1NSw1LjY0NGwwLjAwMywwLjIzNGEyMy41NjUsMjMuNTY1IDAgMCAwIDAuMDQzLDAuODIyYzAuMDEsMC4xMyAwLjAyMywwLjI1OSAwLjAzNiwwLjM4OGMwLjAxNSwwLjE1OCAwLjAzNCwwLjMxNiAwLjA1MywwLjQ3MWwwLjAxMSwwLjA4OGwwLjAyOCwwLjIxNGMwLjAzNywwLjI2NCAwLjA4LDAuNTI1IDAuMTMsMC43ODdjMC41MDMsMi42MzcgMS43Niw1LjI3NCAzLjYzNSw3LjYyNWwwLjA4NSwwLjEwNmwwLjA4NywtMC4xMDRjMC43NDgsLTAuODg0IDIuNjAzLC0zLjY4NyAyLjc2LC01LjM2OWwwLjAwMywtMC4wMzFsLTAuMDE1LC0wLjAyOGExMS43MzYsMTEuNzM2IDAgMCAxIC0xLjMzMywtNS40MDdjMCwtNi4yODQgNC45NCwtMTEuNTAyIDExLjI0MywtMTEuODhsMC40MTQsLTAuMDE1YzIuNTYxLC0wLjA1OCA1LjA2NCwwLjY3MyA3LjIzLDIuMTM2bDAuMDU4LDAuMDM5bDQuMTk3LC0yLjQ0bDAuMDU1LC0wLjAzM2wwLC0wLjA2MmMwLjAwNiwtNi42MzIgLTIuNTkyLC0xMi44NjUgLTcuMzE0LC0xNy41NTFjLTQuNzE2LC00LjY3OSAtMTAuOTkxLC03LjI1NSAtMTcuNjcyLC03LjI1NSIvPgogPC9nPgo8L3N2Zz4=&label=Codecov\n\n[![GitHub Release][github_release]](https://github.com/sdispater/tomlkit/releases/)\n… Version][pypi_version]](https://pypi.python.org/pypi/tomlkit/)\n[![Python Versions][python_versions]](https://pypi.python.org/pypi/tomlkit/)\n[![Lice…<br>\n[![Travis CI][travisci]](https://travis-ci.com/sdispater/tomlkit)\n[![AppVeyor][appve… TOML Kit - Style-preserving TOML library for Python\n\nTOML Kit is a **0.5.0-compliant** [TOML](https://github.com/toml-lang/toml) library.\n\nIt includes a parser that preserves all comments, indentations, whitespace and internal element ordering,\nand makes them accessible and editable via an intuitive API.\n\nYou can also create new TOML documents from scratch using the provided helpers.\n\nPart of the implementation as been adapted, improved and fixed from [Molten](https://github.com/LeopoldArkham/Molten).\n\n## Usage\n\n### Parsing\n\nTOML Kit comes with a fast and style-preserving parser to help you access\nthe content of TOML files and strings.\n\n```python\n>>> from tomlkit import dumps\n>>> from tomlkit import parse # you can also use loads\n\n>>> content = """[table]\n... foo = "bar" # String\n... """\n>>> doc = parse(content)\n\n# doc is a TOMLDocument instance that holds all the information\n# about the TOML string.\n# It behaves like a standard dictionary.\n\n>>> assert doc["table"]["foo"] == "bar"\n\n# The string generated from the document is exactly the same\n# as the original string\n>>> assert dumps(doc) == content\n```\n\n### Modifying\n\nTOML Kit provides an intuitive API to modify TOML documents.\n\n```python\n>>> from tomlkit import dumps\n>>> from tomlkit import parse\n>>> from tomlkit import table\n\n>>> doc = parse("""[table]\n... foo = "bar" # String\n... """)\n\n>>> doc["table"]["baz"] = 13\n\n>>> dumps(doc)\n"""[table]\nfoo = "bar" # String\nbaz = 13\n"""\n\n# Add a new table\n>>> tab = table()\n>>> tab.add("array", [1, 2, 3])\n\n>>> doc["table2"] = tab\n\n>>> dumps(doc)\n"""[table]\nfoo = "bar" # String\nbaz = 13\n\n[table2]\narray = [1, 2, 3]\n"""\n\n# Remove the newly added table\n>>> doc.remove("table2")\n# del doc["table2] is also possible\n```\n\n### Writing\n\nYou can also write a new TOML document from scratch.\n\nLet\'s say we want to create this following document:\n\n```toml\n# This is a TOML document.\n\ntitle = "TOML Example"\n\n[owner]\nname = "Tom Preston-Werner"\norganization = "GitHub"\nbio = "GitHub Cofounder & CEO\\nLikes tater tots and beer."\ndob = 1979-05-27T07:32:00Z # First class dates? Why not?\n\n[database]\nserver = "192.168.1.1"\nports = [ 8001, 8001, 8002 ]\nconnection_max = 5000\nenabled = true\n```\n\nIt can be created with the following code:\n\n```python\n>>> from tomlkit import comment\n>>> from tomlkit import document\n>>> from tomlkit import nl\n>>> from tomlkit import table\n\n>>> doc = document()\n>>> doc.add(comment("This is a TOML document."))\n>>> doc.add(nl())\n>>> doc.add("title", "TOML Example")\n# Using doc["title"] = "TOML Example" is also possible\n\n>>> owner = table()\n>>> owner.add("name", "Tom Preston-Werner")\n>>> owner.add("organization", "GitHub")\n>>> owner.add("bio", "GitHub Cofounder & CEO\\nLikes tater tots and beer.")\n>>> owner.add("dob", datetime(1979, 5, 27, 7, 32, tzinfo=utc))\n>>> owner["dob"].comment("First class dates? Why not?")\n\n# Adding the table to the document\n>>> doc.add("owner", owner)\n\n>>> database = table()\n>>> database["server"] = "192.168.1.1"\n>>> database["ports"] = [8001, 8001, 8002]\n>>> database["connection_max"] = 5000\n>>> database["enabled"] = True\n\n>>> doc["database"] = database\n```\n\n\n## Installation\n\nIf you are using [Poetry](https://poetry.eustace.io),\nadd `tomlkit` to your `pyproject.toml` file by using:\n\n```bash\npoetry add tomlkit\n```\n\nIf not, you can use `pip`:\n\n```bash\npip install tomlkit\n```\n',
+ 'long_description': '[github_release]: https://img.shields.io/github/release/sdispater/tomlkit.svg?logo=github&log…: https://img.shields.io/pypi/v/tomlkit.svg?logo=python&logoColor=white\n[pyt…: https://img.shields.io/pypi/pyversions/tomlkit.svg?logo=python&logoColor=wh…: https://img.shields.io/github/license/sdispater/tomlkit.svg?logo=github&log…: https://img.shields.io/travis/com/sdispater/tomlkit/master.svg?logo=travis&…: https://img.shields.io/appveyor/ci/sdispater/tomlkit/master.svg?logo=appvey…<!--Codecov logo not offered by shields.io or simpleicons.org, this is Codecov\'s SVG image modified to be white-->\n[codecov]: https://img.shields.io/codecov/c/github/sdispater/tomlkit/master.svg?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNDgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CgogPGc+CiAgPHRpdGxlPmJhY2tncm91bmQ8L3RpdGxlPgogIDxyZWN0IGZpbGw9Im5vbmUiIGlkPSJjYW52YXNfYmFja2dyb3VuZCIgaGVpZ2h0PSI0MDIiIHdpZHRoPSI1ODIiIHk9Ii0xIiB4PSItMSIvPgogPC9nPgogPGc+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxwYXRoIGlkPSJzdmdfMSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjZmZmZmZmIiBkPSJtMjUuMDE0LDBjLTEzLjc4NCwwLjAxIC0yNS4wMDQsMTEuMTQ5IC0yNS4wMTQsMjQuODMybDAsMC4wNjJsNC4yNTQsMi40ODJsMC4wNTgsLTAuMDM5YTEyLjIzOCwxMi4yMzggMCAwIDEgOS4wNzgsLTEuOTI4YTExLjg0NCwxMS44NDQgMCAwIDEgNS45OCwyLjk3NWwwLjczLDAuNjhsMC40MTMsLTAuOTA0YzAuNCwtMC44NzQgMC44NjIsLTEuNjk2IDEuMzc0LC0yLjQ0M2MwLjIwNiwtMC4zIDAuNDMzLC0wLjYwNCAwLjY5MiwtMC45MjlsMC40MjcsLTAuNTM1bC0wLjUyNiwtMC40NGExNy40NSwxNy40NSAwIDAgMCAtOC4xLC0zLjc4MWExNy44NTMsMTcuODUzIDAgMCAwIC04LjM3NSwwLjQ5YzIuMDIzLC04Ljg2OCA5LjgyLC0xNS4wNSAxOS4wMjcsLTE1LjA1N2M1LjE5NSwwIDEwLjA3OCwyLjAwNyAxMy43NTIsNS42NTJjMi42MTksMi41OTggNC40MjIsNS44MzUgNS4yMjQsOS4zNzJhMTcuOTA4LDE3LjkwOCAwIDAgMCAtNS4yMDgsLTAuNzlsLTAuMzE4LC0wLjAwMWExOC4wOTYsMTguMDk2IDAgMCAwIC0yLjA2NywwLjE1M2wtMC4wODcsMC4wMTJjLTAuMzAzLDAuMDQgLTAuNTcsMC4wODEgLTAuODEzLDAuMTI2Yy0wLjExOSwwLjAyIC0wLjIzNywwLjA0NSAtMC4zNTUsMC4wNjhjLTAuMjgsMC4wNTcgLTAuNTU0LDAuMTE5IC0wLjgxNiwwLjE4NWwtMC4yODgsMC4wNzNjLTAuMzM2LDAuMDkgLTAuNjc1LDAuMTkxIC0xLjAwNiwwLjNsLTAuMDYxLDAuMDJjLTAuNzQsMC4yNTEgLTEuNDc4LDAuNTU4IC0yLjE5LDAuOTE0bC0wLjA1NywwLjAyOWMtMC4zMTYsMC4xNTggLTAuNjM2LDAuMzMzIC0wLjk3OCwwLjUzNGwtMC4wNzUsMC4wNDVhMTYuOTcsMTYuOTcgMCAwIDAgLTQuNDE0LDMuNzhsLTAuMTU3LDAuMTkxYy0wLjMxNywwLjM5NCAtMC41NjcsMC43MjcgLTAuNzg3LDEuMDQ4Yy0wLjE4NCwwLjI3IC0wLjM2OSwwLjU2IC0wLjYsMC45NDJsLTAuMTI2LDAuMjE3Yy0wLjE4NCwwLjMxOCAtMC4zNDgsMC42MjIgLTAuNDg3LDAuOWwtMC4wMzMsMC4wNjFjLTAuMzU0LDAuNzExIC0wLjY2MSwxLjQ1NSAtMC45MTcsMi4yMTRsLTAuMDM2LDAuMTExYTE3LjEzLDE3LjEzIDAgMCAwIC0wLjg1NSw1LjY0NGwwLjAwMywwLjIzNGEyMy41NjUsMjMuNTY1IDAgMCAwIDAuMDQzLDAuODIyYzAuMDEsMC4xMyAwLjAyMywwLjI1OSAwLjAzNiwwLjM4OGMwLjAxNSwwLjE1OCAwLjAzNCwwLjMxNiAwLjA1MywwLjQ3MWwwLjAxMSwwLjA4OGwwLjAyOCwwLjIxNGMwLjAzNywwLjI2NCAwLjA4LDAuNTI1IDAuMTMsMC43ODdjMC41MDMsMi42MzcgMS43Niw1LjI3NCAzLjYzNSw3LjYyNWwwLjA4NSwwLjEwNmwwLjA4NywtMC4xMDRjMC43NDgsLTAuODg0IDIuNjAzLC0zLjY4NyAyLjc2LC01LjM2OWwwLjAwMywtMC4wMzFsLTAuMDE1LC0wLjAyOGExMS43MzYsMTEuNzM2IDAgMCAxIC0xLjMzMywtNS40MDdjMCwtNi4yODQgNC45NCwtMTEuNTAyIDExLjI0MywtMTEuODhsMC40MTQsLTAuMDE1YzIuNTYxLC0wLjA1OCA1LjA2NCwwLjY3MyA3LjIzLDIuMTM2bDAuMDU4LDAuMDM5bDQuMTk3LC0yLjQ0bDAuMDU1LC0wLjAzM2wwLC0wLjA2MmMwLjAwNiwtNi42MzIgLTIuNTkyLC0xMi44NjUgLTcuMzE0LC0xNy41NTFjLTQuNzE2LC00LjY3OSAtMTAuOTkxLC03LjI1NSAtMTcuNjcyLC03LjI1NSIvPgogPC9nPgo8L3N2Zz4=&label=Codecov\n\n[![GitHub Release][github_release]](https://github.com/sdispater/tomlkit/releases/)\n… Version][pypi_version]](https://pypi.python.org/pypi/tomlkit/)\n[![Python Versions][python_versions]](https://pypi.python.org/pypi/tomlkit/)\n[![Lice…<br>\n[![Travis CI][travisci]](https://travis-ci.com/sdispater/tomlkit)\n[![AppVeyor][appve… TOML Kit - Style-preserving TOML library for Python\n\nTOML Kit is a **1.0.0rc1-compliant** [TOML](https://github.com/toml-lang/toml) library.\n\nIt includes a parser that preserves all comments, indentations, whitespace and internal element ordering,\nand makes them accessible and editable via an intuitive API.\n\nYou can also create new TOML documents from scratch using the provided helpers.\n\nPart of the implementation as been adapted, improved and fixed from [Molten](https://github.com/LeopoldArkham/Molten).\n\n## Usage\n\n### Parsing\n\nTOML Kit comes with a fast and style-preserving parser to help you access\nthe content of TOML files and strings.\n\n```python\n>>> from tomlkit import dumps\n>>> from tomlkit import parse # you can also use loads\n\n>>> content = """[table]\n... foo = "bar" # String\n... """\n>>> doc = parse(content)\n\n# doc is a TOMLDocument instance that holds all the information\n# about the TOML string.\n# It behaves like a standard dictionary.\n\n>>> assert doc["table"]["foo"] == "bar"\n\n# The string generated from the document is exactly the same\n# as the original string\n>>> assert dumps(doc) == content\n```\n\n### Modifying\n\nTOML Kit provides an intuitive API to modify TOML documents.\n\n```python\n>>> from tomlkit import dumps\n>>> from tomlkit import parse\n>>> from tomlkit import table\n\n>>> doc = parse("""[table]\n... foo = "bar" # String\n... """)\n\n>>> doc["table"]["baz"] = 13\n\n>>> dumps(doc)\n"""[table]\nfoo = "bar" # String\nbaz = 13\n"""\n\n# Add a new table\n>>> tab = table()\n>>> tab.add("array", [1, 2, 3])\n\n>>> doc["table2"] = tab\n\n>>> dumps(doc)\n"""[table]\nfoo = "bar" # String\nbaz = 13\n\n[table2]\narray = [1, 2, 3]\n"""\n\n# Remove the newly added table\n>>> doc.remove("table2")\n# del doc["table2] is also possible\n```\n\n### Writing\n\nYou can also write a new TOML document from scratch.\n\nLet\'s say we want to create this following document:\n\n```toml\n# This is a TOML document.\n\ntitle = "TOML Example"\n\n[owner]\nname = "Tom Preston-Werner"\norganization = "GitHub"\nbio = "GitHub Cofounder & CEO\\nLikes tater tots and beer."\ndob = 1979-05-27T07:32:00Z # First class dates? Why not?\n\n[database]\nserver = "192.168.1.1"\nports = [ 8001, 8001, 8002 ]\nconnection_max = 5000\nenabled = true\n```\n\nIt can be created with the following code:\n\n```python\n>>> from tomlkit import comment\n>>> from tomlkit import document\n>>> from tomlkit import nl\n>>> from tomlkit import table\n\n>>> doc = document()\n>>> doc.add(comment("This is a TOML document."))\n>>> doc.add(nl())\n>>> doc.add("title", "TOML Example")\n# Using doc["title"] = "TOML Example" is also possible\n\n>>> owner = table()\n>>> owner.add("name", "Tom Preston-Werner")\n>>> owner.add("organization", "GitHub")\n>>> owner.add("bio", "GitHub Cofounder & CEO\\nLikes tater tots and beer.")\n>>> owner.add("dob", datetime(1979, 5, 27, 7, 32, tzinfo=utc))\n>>> owner["dob"].comment("First class dates? Why not?")\n\n# Adding the table to the document\n>>> doc.add("owner", owner)\n\n>>> database = table()\n>>> database["server"] = "192.168.1.1"\n>>> database["ports"] = [8001, 8001, 8002]\n>>> database["connection_max"] = 5000\n>>> database["enabled"] = True\n\n>>> doc["database"] = database\n```\n\n\n## Installation\n\nIf you are using [Poetry](https://poetry.eustace.io),\nadd `tomlkit` to your `pyproject.toml` file by using:\n\n```bash\npoetry add tomlkit\n```\n\nIf not, you can use `pip`:\n\n```bash\npip install tomlkit\n```\n',
'author': 'Sébastien Eustace',
'author_email': 'sebastien(a)eustace.io',
'maintainer': None,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tests/conftest.py new/tomlkit-0.6.0/tests/conftest.py
--- old/tomlkit-0.5.11/tests/conftest.py 2018-11-09 17:33:48.107540100 +0100
+++ new/tomlkit-0.6.0/tests/conftest.py 2020-04-15 10:43:59.794576600 +0200
@@ -42,6 +42,13 @@
TEST_DIR = os.path.join(os.path.dirname(__file__), "toml-test", "tests")
+IGNORED_TESTS = {
+ "invalid": [
+ "array-mixed-types-strings-and-ints.toml",
+ "array-mixed-types-arrays-and-ints.toml",
+ "array-mixed-types-ints-and-floats.toml",
+ ]
+}
def get_tomltest_cases():
@@ -52,8 +59,12 @@
rv = {}
for d in dirs:
rv[d] = {}
+ ignored = IGNORED_TESTS.get(d, [])
files = os.listdir(os.path.join(TEST_DIR, d))
for f in files:
+ if f in ignored:
+ continue
+
bn, ext = f.rsplit(".", 1)
if bn not in rv[d]:
rv[d][bn] = {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tests/examples/invalid/mixed_array_types.toml new/tomlkit-0.6.0/tests/examples/invalid/mixed_array_types.toml
--- old/tomlkit-0.5.11/tests/examples/invalid/mixed_array_types.toml 2018-07-06 19:56:02.546034000 +0200
+++ new/tomlkit-0.6.0/tests/examples/invalid/mixed_array_types.toml 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-array = [1, "2", 3]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tests/test_api.py new/tomlkit-0.6.0/tests/test_api.py
--- old/tomlkit-0.5.11/tests/test_api.py 2020-02-29 13:19:19.665425300 +0100
+++ new/tomlkit-0.6.0/tests/test_api.py 2020-04-15 10:43:59.795713400 +0200
@@ -77,7 +77,6 @@
("section_with_trailing_characters", UnexpectedCharError),
("key_value_with_trailing_chars", UnexpectedCharError),
("array_with_invalid_chars", UnexpectedCharError),
- ("mixed_array_types", MixedArrayTypesError),
("invalid_number", InvalidNumberError),
("invalid_date", InvalidDateError),
("invalid_time", InvalidTimeError),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tests/toml-test/tests/valid/nested-inline-table-array.json new/tomlkit-0.6.0/tests/toml-test/tests/valid/nested-inline-table-array.json
--- old/tomlkit-0.5.11/tests/toml-test/tests/valid/nested-inline-table-array.json 1970-01-01 01:00:00.000000000 +0100
+++ new/tomlkit-0.6.0/tests/toml-test/tests/valid/nested-inline-table-array.json 2020-01-09 13:28:44.855810600 +0100
@@ -0,0 +1,7 @@
+{
+ "a": [
+ {
+ "b": {}
+ }
+ ]
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tests/toml-test/tests/valid/nested-inline-table-array.toml new/tomlkit-0.6.0/tests/toml-test/tests/valid/nested-inline-table-array.toml
--- old/tomlkit-0.5.11/tests/toml-test/tests/valid/nested-inline-table-array.toml 1970-01-01 01:00:00.000000000 +0100
+++ new/tomlkit-0.6.0/tests/toml-test/tests/valid/nested-inline-table-array.toml 2020-01-09 13:28:44.856207000 +0100
@@ -0,0 +1 @@
+a = [ { b = {} } ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tests/toml-test/tests/valid/right-curly-brace-after-boolean.json new/tomlkit-0.6.0/tests/toml-test/tests/valid/right-curly-brace-after-boolean.json
--- old/tomlkit-0.5.11/tests/toml-test/tests/valid/right-curly-brace-after-boolean.json 1970-01-01 01:00:00.000000000 +0100
+++ new/tomlkit-0.6.0/tests/toml-test/tests/valid/right-curly-brace-after-boolean.json 2020-01-09 13:28:44.856418600 +0100
@@ -0,0 +1,16 @@
+{
+ "black":{
+ "allow_prereleases":{
+ "type":"bool",
+ "value":"true"
+ },
+ "python":{
+ "type":"string",
+ "value":">3.6"
+ },
+ "version":{
+ "type":"string",
+ "value":">=18.9b0"
+ }
+ }
+ }
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tests/toml-test/tests/valid/right-curly-brace-after-boolean.toml new/tomlkit-0.6.0/tests/toml-test/tests/valid/right-curly-brace-after-boolean.toml
--- old/tomlkit-0.5.11/tests/toml-test/tests/valid/right-curly-brace-after-boolean.toml 1970-01-01 01:00:00.000000000 +0100
+++ new/tomlkit-0.6.0/tests/toml-test/tests/valid/right-curly-brace-after-boolean.toml 2020-01-09 13:28:44.856581000 +0100
@@ -0,0 +1 @@
+black = { python=">3.6", version=">=18.9b0", allow_prereleases=true }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tomlkit/__init__.py new/tomlkit-0.6.0/tomlkit/__init__.py
--- old/tomlkit-0.5.11/tomlkit/__init__.py 2020-02-29 18:21:26.121214600 +0100
+++ new/tomlkit-0.6.0/tomlkit/__init__.py 2020-04-15 13:27:59.730194600 +0200
@@ -22,4 +22,4 @@
from .api import ws
-__version__ = "0.5.11"
+__version__ = "0.6.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tomlkit/_utils.py new/tomlkit-0.6.0/tomlkit/_utils.py
--- old/tomlkit-0.5.11/tomlkit/_utils.py 2019-06-29 17:32:03.951543800 +0200
+++ new/tomlkit-0.6.0/tomlkit/_utils.py 2020-04-15 13:27:59.685228800 +0200
@@ -4,6 +4,7 @@
from datetime import datetime
from datetime import time
from datetime import timedelta
+from typing import Union
from ._compat import decode
@@ -52,8 +53,6 @@
if m.group(7):
microsecond = int(("{:<06s}".format(m.group(8)))[:6])
- dt = datetime(year, month, day, hour, minute, second, microsecond)
-
if m.group(9):
# Timezone
tz = m.group(9)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tomlkit/container.py new/tomlkit-0.6.0/tomlkit/container.py
--- old/tomlkit-0.5.11/tomlkit/container.py 2020-02-29 18:09:22.692561600 +0100
+++ new/tomlkit-0.6.0/tomlkit/container.py 2020-04-15 13:27:59.685626000 +0200
@@ -335,7 +335,7 @@
if self._body:
return self._body[-1][1]
- def as_string(self, prefix=None): # type: () -> str
+ def as_string(self): # type: () -> str
s = ""
for k, v in self._body:
if k is not None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tomlkit/items.py new/tomlkit-0.6.0/tomlkit/items.py
--- old/tomlkit-0.5.11/tomlkit/items.py 2020-01-10 13:52:51.193374600 +0100
+++ new/tomlkit-0.6.0/tomlkit/items.py 2020-04-15 13:27:59.686598800 +0200
@@ -201,7 +201,9 @@
A key value.
"""
- def __init__(self, k, t=None, sep=None, dotted=False): # type: (str) -> None
+ def __init__(
+ self, k, t=None, sep=None, dotted=False
+ ): # type: (str, Optional[KeyType], Optional[str], bool) -> None
if t is None:
if any(
[c not in string.ascii_letters + string.digits + "-" + "_" for c in k]
@@ -545,7 +547,7 @@
trivia,
raw,
**kwargs
- ): # type: (int, int, int, int, int, int, int, ..., Trivia, ...) -> datetime
+ ): # type: (int, int, int, int, int, int, int, Optional[datetime.tzinfo], Trivia, str, Any) -> datetime
return datetime.__new__(
cls,
year,
@@ -561,7 +563,7 @@
def __init__(
self, year, month, day, hour, minute, second, microsecond, tzinfo, trivia, raw
- ): # type: (int, int, int, int, int, int, int, ..., Trivia) -> None
+ ): # type: (int, int, int, int, int, int, int, Optional[datetime.tzinfo], Trivia, str) -> None
super(DateTime, self).__init__(trivia)
self._raw = raw
@@ -650,7 +652,7 @@
A date literal.
"""
- def __new__(cls, year, month, day, *_): # type: (int, int, int, ...) -> date
+ def __new__(cls, year, month, day, *_): # type: (int, int, int, Any) -> date
return date.__new__(cls, year, month, day)
def __init__(
@@ -706,12 +708,12 @@
def __new__(
cls, hour, minute, second, microsecond, tzinfo, *_
- ): # type: (int, int, int, int, ...) -> time
+ ): # type: (int, int, int, int, Optional[datetime.tzinfo], Any) -> time
return time.__new__(cls, hour, minute, second, microsecond, tzinfo)
def __init__(
self, hour, minute, second, microsecond, tzinfo, trivia, raw
- ): # type: (int, int, int, int, Trivia, str) -> None
+ ): # type: (int, int, int, int, Optional[datetime.tzinfo], Trivia, str) -> None
super(Time, self).__init__(trivia)
self._raw = raw
@@ -744,7 +746,9 @@
An array literal
"""
- def __init__(self, value, trivia, multiline=False): # type: (list, Trivia) -> None
+ def __init__(
+ self, value, trivia, multiline=False
+ ): # type: (list, Trivia, bool) -> None
super(Array, self).__init__(trivia)
list.__init__(
@@ -762,18 +766,6 @@
def value(self): # type: () -> list
return self
- def is_homogeneous(self): # type: () -> bool
- if not self:
- return True
-
- discriminants = [
- i.discriminant
- for i in self._value
- if not isinstance(i, (Whitespace, Comment))
- ]
-
- return len(set(discriminants)) == 1
-
def multiline(self, multiline): # type: (bool) -> self
self._multiline = multiline
@@ -792,7 +784,7 @@
return s
- def append(self, _item): # type: () -> None
+ def append(self, _item): # type: (Any) -> None
if self._value:
self._value.append(Whitespace(", "))
@@ -801,9 +793,6 @@
self._value.append(it)
- if not self.is_homogeneous():
- raise ValueError("Array has mixed types elements")
-
if not PY2:
def clear(self):
@@ -869,7 +858,7 @@
is_super_table=False,
name=None,
display_name=None,
- ): # type: (tomlkit.container.Container, Trivia, bool, ...) -> None
+ ): # type: (tomlkit.container.Container, Trivia, bool, bool, Optional[str], Optional[str]) -> None
super(Table, self).__init__(trivia)
self.name = name
@@ -962,8 +951,8 @@
def is_super_table(self): # type: () -> bool
return self._is_super_table
- def as_string(self, prefix=None): # type: () -> str
- return self._value.as_string(prefix=prefix)
+ def as_string(self): # type: () -> str
+ return self._value.as_string()
# Helpers
@@ -1250,7 +1239,7 @@
def __init__(
self, body, name=None, parsed=False
- ): # type: (List[Table], Optional[str]) -> None
+ ): # type: (List[Table], Optional[str], bool) -> None
self.name = name
self._body = []
self._parsed = parsed
@@ -1295,7 +1284,7 @@
def as_string(self): # type: () -> str
b = ""
for table in self._body:
- b += table.as_string(prefix=self.name)
+ b += table.as_string()
return b
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tomlkit/parser.py new/tomlkit-0.6.0/tomlkit/parser.py
--- old/tomlkit-0.5.11/tomlkit/parser.py 2020-02-29 13:19:19.669257900 +0100
+++ new/tomlkit-0.6.0/tomlkit/parser.py 2020-04-15 10:43:59.797905700 +0200
@@ -674,10 +674,7 @@
except ValueError:
pass
else:
- if res.is_homogeneous():
- return res
-
- raise self.parse_error(MixedArrayTypesError)
+ return res
def _parse_inline_table(self): # type: () -> InlineTable
# consume opening bracket, EOF here is an issue (middle of array)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tomlkit-0.5.11/tomlkit/source.py new/tomlkit-0.6.0/tomlkit/source.py
--- old/tomlkit-0.5.11/tomlkit/source.py 2018-11-19 18:39:17.283517100 +0100
+++ new/tomlkit-0.6.0/tomlkit/source.py 2020-04-15 13:27:59.687095900 +0200
@@ -4,8 +4,10 @@
import itertools
from copy import copy
+from typing import Any
from typing import Optional
from typing import Tuple
+from typing import Type
from ._compat import PY2
from ._compat import unicode
@@ -116,7 +118,7 @@
"""
return self[self._marker : self._idx]
- def inc(self, exception=None): # type: (Optional[ParseError.__class__]) -> bool
+ def inc(self, exception=None): # type: (Optional[Type[ParseError]]) -> bool
"""
Increments the parser if the end of the input has not been reached.
Returns whether or not it was able to advance.
@@ -172,7 +174,7 @@
def parse_error(
self, exception=ParseError, *args
- ): # type: (ParseError.__class__, ...) -> ParseError
+ ): # type: (Type[ParseError], Any) -> ParseError
"""
Creates a generic "parse error" at the current position.
"""
1
0
Hello community,
here is the log from the commit of package python-u-msgpack-python for openSUSE:Factory checked in at 2020-08-01 12:30:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-u-msgpack-python (Old)
and /work/SRC/openSUSE:Factory/.python-u-msgpack-python.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-u-msgpack-python"
Sat Aug 1 12:30:26 2020 rev:9 rq:822417 version:2.6.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-u-msgpack-python/python-u-msgpack-python.changes 2019-11-04 17:11:50.480609506 +0100
+++ /work/SRC/openSUSE:Factory/.python-u-msgpack-python.new.3592/python-u-msgpack-python.changes 2020-08-01 12:30:34.982423388 +0200
@@ -1,0 +2,7 @@
+Thu Jul 23 12:18:09 UTC 2020 - Marketa Calabkova <mcalabkova(a)suse.com>
+
+- update to 2.6.0
+ * Add `use_tuple` option to unpacking functions for unpacking MessagePack arrays into tuples.
+ * Add `ext_serializable()` decorator for registration of application classes with Ext types for automatic packing and unpacking.
+
+-------------------------------------------------------------------
Old:
----
u-msgpack-python-2.5.2.tar.gz
New:
----
u-msgpack-python-2.6.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-u-msgpack-python.spec ++++++
--- /var/tmp/diff_new_pack.eMkvUu/_old 2020-08-01 12:30:36.882425168 +0200
+++ /var/tmp/diff_new_pack.eMkvUu/_new 2020-08-01 12:30:36.886425171 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-u-msgpack-python
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-u-msgpack-python
-Version: 2.5.2
+Version: 2.6.0
Release: 0
Summary: A MessagePack serializer and deserializer
License: MIT
++++++ u-msgpack-python-2.5.2.tar.gz -> u-msgpack-python-2.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/u-msgpack-python-2.5.2/LICENSE new/u-msgpack-python-2.6.0/LICENSE
--- old/u-msgpack-python-2.5.2/LICENSE 2017-08-05 03:25:46.000000000 +0200
+++ new/u-msgpack-python-2.6.0/LICENSE 2020-04-25 10:31:46.000000000 +0200
@@ -1,4 +1,4 @@
- Copyright (c) 2013-2016 vsergeev / Ivan (Vanya) A. Sergeev
+ Copyright (c) 2013-2020 vsergeev / Ivan (Vanya) A. Sergeev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/u-msgpack-python-2.5.2/PKG-INFO new/u-msgpack-python-2.6.0/PKG-INFO
--- old/u-msgpack-python-2.5.2/PKG-INFO 2019-08-15 09:21:16.000000000 +0200
+++ new/u-msgpack-python-2.6.0/PKG-INFO 2020-04-25 10:39:46.034381400 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: u-msgpack-python
-Version: 2.5.2
+Version: 2.6.0
Summary: A portable, lightweight MessagePack serializer and deserializer written in pure Python.
Home-page: https://github.com/vsergeev/u-msgpack-python
Author: vsergeev
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/u-msgpack-python-2.5.2/README.md new/u-msgpack-python-2.6.0/README.md
--- old/u-msgpack-python-2.5.2/README.md 2019-03-04 03:10:56.000000000 +0100
+++ new/u-msgpack-python-2.6.0/README.md 2020-04-25 10:31:46.000000000 +0200
@@ -79,6 +79,23 @@
>>>
```
+Serializing and deserializing application-defined types with `ext_serializable()`:
+``` python
+>>> @umsgpack.ext_serializable(0x50)
+... class Point(collections.namedtuple('Point', ['x', 'y'])):
+... def packb(self):
+... return struct.pack(">ii", self.x, self.y)
+... @staticmethod
+... def unpackb(data):
+... return Point(*struct.unpack(">ii", data))
+...
+>>> umsgpack.packb(Point(1, 2))
+b'\xd7P\x00\x00\x00\x01\x00\x00\x00\x02'
+>>> umsgpack.unpackb(_)
+Point(x=1, y=2)
+>>>
+```
+
Serializing and deserializing application-defined types with Ext handlers:
``` python
>>> umsgpack.packb([complex(1,2), decimal.Decimal("0.31")],
@@ -113,6 +130,45 @@
>>>
```
+## Ext Serializable
+
+The `ext_serializable()` decorator registers application classes for automatic
+packing and unpacking with the specified Ext type. The decorator accepts the
+Ext type code as an argument. The application class should implement a
+`packb()` method that returns serialized bytes, and an `unpackb()` class method
+or static method that accepts serialized bytes and returns an instance of the
+application class.
+
+Example for registering, packing, and unpacking a custom class with Ext type
+code 0x10:
+
+``` python
+(a)umsgpack.ext_serializable(0x10)
+class Point(object):
+ def __init__(self, x, y, z):
+ self.x = x
+ self.y = y
+ self.z = z
+
+ def __str__(self):
+ return "Point({}, {}, {})".format(self.x, self.y, self.z)
+
+ def packb(self):
+ return struct.pack(">iii", self.x, self.y, self.z)
+
+ @staticmethod
+ def unpackb(data):
+ return Point(*struct.unpack(">iii", data))
+
+# Pack
+obj = Point(1,2,3)
+data = umsgpack.packb(obj)
+
+# Unpack
+obj = umsgpack.unpackb(data)
+print(obj) # -> Point(1, 2, 3)
+```
+
## Ext Handlers
The packing functions accept an optional `ext_handlers` dictionary that maps
@@ -225,6 +281,18 @@
>>>
```
+## Tuples
+
+The unpacking functions provide a `use_tuple` option to unpack MessagePack arrays into tuples, rather than lists.
+
+``` python
+>>> umsgpack.unpackb(b'\x93\xa1a\xc3\x92\x01\x92\x02\x03')
+['a', True, [1, [2, 3]]]
+>>> umsgpack.unpackb(b'\x93\xa1a\xc3\x92\x01\x92\x02\x03', use_tuple=True)
+('a', True, (1, (2, 3)))
+>>>
+```
+
### Invalid UTF-8 Strings
The unpacking functions provide an `allow_invalid_utf8` option to unpack MessagePack strings with invalid UTF-8 into the `umsgpack.InvalidString` type, instead of throwing an exception. The `umsgpack.InvalidString` type is a subclass of `bytes`, and can be used like any other `bytes` object.
@@ -289,6 +357,19 @@
>>>
```
+* `NotImplementedError`: Ext serializable class is missing implementation of `packb()`.
+
+ ``` python
+ >>> @umsgpack.ext_serializable(0x50)
+ ... class Point(collections.namedtuple('Point', ['x', 'y'])):
+ ... pass
+ ...
+ >>> umsgpack.packb(Point(1, 2))
+ ...
+ NotImplementedError: Ext serializable class <class '__main__.Point'> is missing implementation of packb()
+ >>>
+ ```
+
### Unpacking Exceptions
If a non-byte-string argument is passed to `umsgpack.unpackb()`, it will raise a `TypeError` exception. If an error occurs during unpacking, umsgpack will raise an exception derived from `umsgpack.UnpackException`. All possible unpacking exceptions are described below.
@@ -387,6 +468,19 @@
>>>
```
+* `NotImplementedError`: Ext serializable class is missing implementation of `unpackb()`.
+
+ ``` python
+ >>> @umsgpack.ext_serializable(0x50)
+ ... class Point(collections.namedtuple('Point', ['x', 'y'])):
+ ... pass
+ ...
+ >>> umsgpack.unpackb(b'\xd7\x50\x00\x00\x00\x01\x00\x00\x00\x02')
+ ...
+ NotImplementedError: Ext serializable class <class '__main__.Point'> is missing implementation of unpackb()
+ >>>
+ ```
+
## Behavior Notes
* Python 2
@@ -402,6 +496,7 @@
* The Python `datetime.datetime` type is packed into, and unpacked from, the msgpack `timestamp` format
* Note that this Python type only supports microsecond resolution, while the msgpack `timestamp` format supports nanosecond resolution. Timestamps with finer than microsecond resolution will lose precision during unpacking. Users may override the packing and unpacking of the msgpack `timestamp` format with a custom type for alternate behavior.
* Both naive and aware timestamp are supported. Naive timestamps are packed as if they are in the UTC timezone. Timestamps are always unpacked as aware `datetime.datetime` objects in the UTC timezone.
+* Ext type handlers specified in the optional `ext_handlers` dictionary will override `ext_serializable()` classes during packing and unpacking
## Testing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/u-msgpack-python-2.5.2/setup.py new/u-msgpack-python-2.6.0/setup.py
--- old/u-msgpack-python-2.5.2/setup.py 2019-08-15 09:18:51.000000000 +0200
+++ new/u-msgpack-python-2.6.0/setup.py 2020-04-25 10:31:46.000000000 +0200
@@ -5,7 +5,7 @@
setup(
name='u-msgpack-python',
- version='2.5.2',
+ version='2.6.0',
description='A portable, lightweight MessagePack serializer and deserializer written in pure Python.',
author='vsergeev',
author_email='v(a)sergeev.io',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/u-msgpack-python-2.5.2/test_umsgpack.py new/u-msgpack-python-2.6.0/test_umsgpack.py
--- old/u-msgpack-python-2.5.2/test_umsgpack.py 2019-08-15 09:18:40.000000000 +0200
+++ new/u-msgpack-python-2.6.0/test_umsgpack.py 2020-04-25 10:21:55.000000000 +0200
@@ -319,6 +319,12 @@
["float precision double", 2.5, b"\xcb\x40\x04\x00\x00\x00\x00\x00\x00"],
]
+tuple_test_vectors = [
+ ["nested array", [0x01, [b"\x80", [[u"a", u"b", u"c"], True]]],
+ b"\x92\x01\x92\xc4\x01\x80\x92\x93\xa1a\xa1b\xa1c\xc3",
+ (0x01, (b"\x80", ((u"a", u"b", u"c"), True)))],
+]
+
naive_timestamp_test_vectors = [
["32-bit timestamp (naive)", datetime.datetime(2000, 1, 1, 10, 5, 2, 0, umsgpack._utc_tzinfo),
b"\xd6\xff\x38\x6d\xd1\x4e",
@@ -377,6 +383,7 @@
"DuplicateKeyException",
"KeyNotPrimitiveException",
"KeyDuplicateException",
+ "ext_serializable",
"pack",
"packb",
"unpack",
@@ -518,6 +525,19 @@
self.assertTrue(isinstance(unpacked, OrderedDict))
self.assertEqual(unpacked, obj)
+ def test_unpack_tuple(self):
+ # Use tuple test vector
+ (_, obj, data, obj_tuple) = tuple_test_vectors[0]
+
+ # Unpack with default options (list)
+ self.assertEqual(umsgpack.unpackb(data), obj)
+
+ # Unpack with use_tuple=False (list)
+ self.assertEqual(umsgpack.unpackb(data, use_tuple=False), obj)
+
+ # Unpack with use_tuple=True (tuple)
+ self.assertEqual(umsgpack.unpackb(data, use_tuple=True), obj_tuple)
+
def test_ext_exceptions(self):
with self.assertRaises(TypeError):
_ = umsgpack.Ext(5.0, b"")
@@ -590,6 +610,68 @@
unpacked = umsgpack.unpackb(data, ext_handlers=override_ext_handlers)
self.assertEqual(unpacked, obj)
+ def test_ext_serializable(self):
+ # Register test class
+ @umsgpack.ext_serializable(0x20)
+ class CustomComplex:
+ def __init__(self, real, imag):
+ self.real = real
+ self.imag = imag
+
+ def __eq__(self, other):
+ return self.real == other.real and self.imag == other.imag
+
+ def packb(self):
+ return struct.pack("<II", self.real, self.imag)
+
+ @classmethod
+ def unpackb(cls, data):
+ return cls(*struct.unpack("<II", data))
+
+ obj, data = CustomComplex(123, 456), b"\xd7\x20\x7b\x00\x00\x00\xc8\x01\x00\x00"
+
+ # Test pack
+ packed = umsgpack.packb(obj)
+ self.assertEqual(packed, data)
+
+ # Test unpack
+ unpacked = umsgpack.unpackb(packed)
+ self.assertTrue(isinstance(unpacked, CustomComplex))
+ self.assertEqual(unpacked, obj)
+
+ _, obj, data = ext_handlers_test_vectors[0]
+
+ # Test pack priority of ext_handlers over ext_serializable()
+ packed = umsgpack.packb(obj, ext_handlers=ext_handlers)
+ self.assertEqual(packed, data)
+
+ # Test unpack priority of ext_handlers over ext_serializable()
+ unpacked = umsgpack.unpackb(data, ext_handlers=ext_handlers)
+ self.assertTrue(isinstance(unpacked, complex))
+ self.assertEqual(unpacked, obj)
+
+ # Test registration collision
+ with self.assertRaises(ValueError):
+ @umsgpack.ext_serializable(0x20)
+ class DummyClass:
+ pass
+
+ # Register class with missing packb() and unpackb()
+ @umsgpack.ext_serializable(0x21)
+ class IncompleteClass:
+ pass
+
+ # Test unimplemented packb()
+ with self.assertRaises(NotImplementedError):
+ umsgpack.packb(IncompleteClass())
+
+ # Test unimplemented unpackb()
+ with self.assertRaises(NotImplementedError):
+ umsgpack.unpackb(b"\xd4\x21\x00")
+
+ # Unregister Ext serializable classes for future tests
+ umsgpack._ext_classes = {}
+
def test_streaming_writer(self):
# Try first composite test vector
(_, obj, data) = composite_test_vectors[0]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/u-msgpack-python-2.5.2/u_msgpack_python.egg-info/PKG-INFO new/u-msgpack-python-2.6.0/u_msgpack_python.egg-info/PKG-INFO
--- old/u-msgpack-python-2.5.2/u_msgpack_python.egg-info/PKG-INFO 2019-08-15 09:21:15.000000000 +0200
+++ new/u-msgpack-python-2.6.0/u_msgpack_python.egg-info/PKG-INFO 2020-04-25 10:39:45.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: u-msgpack-python
-Version: 2.5.2
+Version: 2.6.0
Summary: A portable, lightweight MessagePack serializer and deserializer written in pure Python.
Home-page: https://github.com/vsergeev/u-msgpack-python
Author: vsergeev
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/u-msgpack-python-2.5.2/umsgpack.py new/u-msgpack-python-2.6.0/umsgpack.py
--- old/u-msgpack-python-2.5.2/umsgpack.py 2019-08-15 09:18:51.000000000 +0200
+++ new/u-msgpack-python-2.6.0/umsgpack.py 2020-04-25 10:31:46.000000000 +0200
@@ -1,4 +1,4 @@
-# u-msgpack-python v2.5.2 - v at sergeev.io
+# u-msgpack-python v2.6.0 - v at sergeev.io
# https://github.com/vsergeev/u-msgpack-python
#
# u-msgpack-python is a lightweight MessagePack serializer and deserializer
@@ -10,7 +10,7 @@
#
# MIT License
#
-# Copyright (c) 2013-2016 vsergeev / Ivan (Vanya) A. Sergeev
+# Copyright (c) 2013-2020 vsergeev / Ivan (Vanya) A. Sergeev
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -31,7 +31,7 @@
# THE SOFTWARE.
#
"""
-u-msgpack-python v2.5.2 - v at sergeev.io
+u-msgpack-python v2.6.0 - v at sergeev.io
https://github.com/vsergeev/u-msgpack-python
u-msgpack-python is a lightweight MessagePack serializer and deserializer
@@ -54,10 +54,10 @@
else:
from collections import Hashable
-__version__ = "2.5.2"
+__version__ = "2.6.0"
"Module version string"
-version = (2, 5, 2)
+version = (2, 6, 0)
"Module version tuple"
@@ -104,9 +104,8 @@
"""
Compare this Ext object with another for equality.
"""
- return (isinstance(other, self.__class__) and
- self.type == other.type and
- self.data == other.data)
+ return isinstance(other, self.__class__) \
+ and self.type == other.type and self.data == other.data
def __ne__(self, other):
"""
@@ -135,7 +134,43 @@
class InvalidString(bytes):
"""Subclass of bytes to hold invalid UTF-8 strings."""
- pass
+
+
+##############################################################################
+# Ext Serializable Decorator
+##############################################################################
+
+_ext_classes = {}
+
+
+def ext_serializable(ext_type):
+ """
+ Return a decorator to register a class for automatic packing and unpacking
+ with the specified Ext type code. The application class should implement a
+ `packb()` method that returns serialized bytes, and an `unpackb()` class
+ method or static method that accepts serialized bytes and returns an
+ instance of the application class.
+
+ Args:
+ ext_type: application-defined Ext type code
+
+ Raises:
+ ValueError:
+ Ext type or class already registered.
+ """
+ def wrapper(cls):
+ if ext_type in _ext_classes:
+ raise ValueError("Ext type 0x{:02x} already registered with class {:s}".format(ext_type, repr(_ext_classes[ext_type])))
+ elif cls in _ext_classes:
+ raise ValueError("Class {:s} already registered with Ext type 0x{:02x}".format(repr(cls), ext_type))
+
+ _ext_classes[ext_type] = cls
+ _ext_classes[cls] = ext_type
+
+ return cls
+
+ return wrapper
+
##############################################################################
# Exceptions
@@ -145,39 +180,32 @@
# Base Exception classes
class PackException(Exception):
"Base class for exceptions encountered during packing."
- pass
class UnpackException(Exception):
"Base class for exceptions encountered during unpacking."
- pass
# Packing error
class UnsupportedTypeException(PackException):
"Object type not supported for packing."
- pass
# Unpacking error
class InsufficientDataException(UnpackException):
"Insufficient data to unpack the serialized object."
- pass
class InvalidStringException(UnpackException):
"Invalid UTF-8 string encountered during unpacking."
- pass
class UnsupportedTimestampException(UnpackException):
"Unsupported timestamp format encountered during unpacking."
- pass
class ReservedCodeException(UnpackException):
"Reserved code encountered during unpacking."
- pass
class UnhashableKeyException(UnpackException):
@@ -185,12 +213,10 @@
Unhashable key encountered during map unpacking.
The serialized map cannot be deserialized into a Python dictionary.
"""
- pass
class DuplicateKeyException(UnpackException):
"Duplicate key encountered during map unpacking."
- pass
# Backwards compatibility
@@ -340,14 +366,11 @@
elif obj_len == 16:
fp.write(b"\xd8" + struct.pack("B", obj.type & 0xff) + obj.data)
elif obj_len < 2**8:
- fp.write(b"\xc7" +
- struct.pack("BB", obj_len, obj.type & 0xff) + obj.data)
+ fp.write(b"\xc7" + struct.pack("BB", obj_len, obj.type & 0xff) + obj.data)
elif obj_len < 2**16:
- fp.write(b"\xc8" +
- struct.pack(">HB", obj_len, obj.type & 0xff) + obj.data)
+ fp.write(b"\xc8" + struct.pack(">HB", obj_len, obj.type & 0xff) + obj.data)
elif obj_len < 2**32:
- fp.write(b"\xc9" +
- struct.pack(">IB", obj_len, obj.type & 0xff) + obj.data)
+ fp.write(b"\xc9" + struct.pack(">IB", obj_len, obj.type & 0xff) + obj.data)
else:
raise UnsupportedTypeException("huge ext data")
@@ -366,18 +389,14 @@
if microseconds == 0 and 0 <= seconds <= 2**32 - 1:
# 32-bit timestamp
- fp.write(b"\xd6\xff" +
- struct.pack(">I", seconds))
+ fp.write(b"\xd6\xff" + struct.pack(">I", seconds))
elif 0 <= seconds <= 2**34 - 1:
# 64-bit timestamp
value = ((microseconds * 1000) << 34) | seconds
- fp.write(b"\xd7\xff" +
- struct.pack(">Q", value))
+ fp.write(b"\xd7\xff" + struct.pack(">Q", value))
elif -2**63 <= abs(seconds) <= 2**63 - 1:
# 96-bit timestamp
- fp.write(b"\xc7\x0c\xff" +
- struct.pack(">I", microseconds * 1000) +
- struct.pack(">q", seconds))
+ fp.write(b"\xc7\x0c\xff" + struct.pack(">Iq", microseconds * 1000, seconds))
else:
raise UnsupportedTypeException("huge timestamp")
@@ -453,6 +472,11 @@
_pack_nil(obj, fp, options)
elif ext_handlers and obj.__class__ in ext_handlers:
_pack_ext(ext_handlers[obj.__class__](obj), fp, options)
+ elif obj.__class__ in _ext_classes:
+ try:
+ _pack_ext(Ext(_ext_classes[obj.__class__], obj.packb()), fp, options)
+ except AttributeError:
+ raise NotImplementedError("Ext serializable class {:s} is missing implementation of packb()".format(repr(obj.__class__)))
elif isinstance(obj, bool):
_pack_boolean(obj, fp, options)
elif isinstance(obj, (int, long)):
@@ -525,6 +549,11 @@
_pack_nil(obj, fp, options)
elif ext_handlers and obj.__class__ in ext_handlers:
_pack_ext(ext_handlers[obj.__class__](obj), fp, options)
+ elif obj.__class__ in _ext_classes:
+ try:
+ _pack_ext(Ext(_ext_classes[obj.__class__], obj.packb()), fp, options)
+ except AttributeError:
+ raise NotImplementedError("Ext serializable class {:s} is missing implementation of packb()".format(repr(obj.__class__)))
elif isinstance(obj, bool):
_pack_boolean(obj, fp, options)
elif isinstance(obj, int):
@@ -764,39 +793,43 @@
ext_type = struct.unpack("b", _read_except(fp, 1))[0]
ext_data = _read_except(fp, length)
- # Create extension object
- ext = Ext(ext_type, ext_data)
-
# Unpack with ext handler, if we have one
ext_handlers = options.get("ext_handlers")
- if ext_handlers and ext.type in ext_handlers:
- return ext_handlers[ext.type](ext)
+ if ext_handlers and ext_type in ext_handlers:
+ return ext_handlers[ext_type](Ext(ext_type, ext_data))
+
+ # Unpack with ext classes, if type is registered
+ if ext_type in _ext_classes:
+ try:
+ return _ext_classes[ext_type].unpackb(ext_data)
+ except AttributeError:
+ raise NotImplementedError("Ext serializable class {:s} is missing implementation of unpackb()".format(repr(_ext_classes[ext_type])))
# Timestamp extension
- if ext.type == -1:
- return _unpack_ext_timestamp(ext, options)
+ if ext_type == -1:
+ return _unpack_ext_timestamp(ext_data, options)
- return ext
+ return Ext(ext_type, ext_data)
-def _unpack_ext_timestamp(ext, options):
- obj_len = len(ext.data)
+def _unpack_ext_timestamp(ext_data, options):
+ obj_len = len(ext_data)
if obj_len == 4:
# 32-bit timestamp
- seconds = struct.unpack(">I", ext.data)[0]
+ seconds = struct.unpack(">I", ext_data)[0]
microseconds = 0
elif obj_len == 8:
# 64-bit timestamp
- value = struct.unpack(">Q", ext.data)[0]
+ value = struct.unpack(">Q", ext_data)[0]
seconds = value & 0x3ffffffff
microseconds = (value >> 34) // 1000
elif obj_len == 12:
# 96-bit timestamp
- seconds = struct.unpack(">q", ext.data[4:12])[0]
- microseconds = struct.unpack(">I", ext.data[0:4])[0] // 1000
+ seconds = struct.unpack(">q", ext_data[4:12])[0]
+ microseconds = struct.unpack(">I", ext_data[0:4])[0] // 1000
else:
raise UnsupportedTimestampException(
- "unsupported timestamp with data length %d" % len(ext.data))
+ "unsupported timestamp with data length %d" % len(ext_data))
return _epoch + datetime.timedelta(seconds=seconds,
microseconds=microseconds)
@@ -812,6 +845,9 @@
else:
raise Exception("logic error, not array: 0x%02x" % ord(code))
+ if options.get('use_tuple'):
+ return tuple((_unpack(fp, options) for i in xrange(length)))
+
return [_unpack(fp, options) for i in xrange(length)]
@@ -831,8 +867,7 @@
else:
raise Exception("logic error, not map: 0x%02x" % ord(code))
- d = {} if not options.get('use_ordered_dict') \
- else collections.OrderedDict()
+ d = {} if not options.get('use_ordered_dict') else collections.OrderedDict()
for _ in xrange(length):
# Unpack key
k = _unpack(fp, options)
@@ -878,6 +913,8 @@
Ext into an object
use_ordered_dict (bool): unpack maps into OrderedDict, instead of
unordered dict (default False)
+ use_tuple (bool): unpacks arrays into tuples, instead of lists (default
+ False)
allow_invalid_utf8 (bool): unpack invalid strings into instances of
InvalidString, for access to the bytes
(default False)
@@ -922,6 +959,8 @@
Ext into an object
use_ordered_dict (bool): unpack maps into OrderedDict, instead of
unordered dict (default False)
+ use_tuple (bool): unpacks arrays into tuples, instead of lists (default
+ False)
allow_invalid_utf8 (bool): unpack invalid strings into instances of
InvalidString, for access to the bytes
(default False)
@@ -967,6 +1006,8 @@
Ext into an object
use_ordered_dict (bool): unpack maps into OrderedDict, instead of
unordered dict (default False)
+ use_tuple (bool): unpacks arrays into tuples, instead of lists (default
+ False)
allow_invalid_utf8 (bool): unpack invalid strings into instances of
InvalidString, for access to the bytes
(default False)
@@ -1015,6 +1056,8 @@
Ext into an object
use_ordered_dict (bool): unpack maps into OrderedDict, instead of
unordered dict (default False)
+ use_tuple (bool): unpacks arrays into tuples, instead of lists (default
+ False)
allow_invalid_utf8 (bool): unpack invalid strings into instances of
InvalidString, for access to the bytes
(default False)
1
0