pax_global_header00006660000000000000000000000064143555474660014535gustar00rootroot0000000000000052 comment=79e4599ba775bc4e9dc245177f750886dd52b5ca UpSetPlot-0.8.0/000077500000000000000000000000001435554746600134415ustar00rootroot00000000000000UpSetPlot-0.8.0/.gitignore000066400000000000000000000016571435554746600154420ustar00rootroot00000000000000######################################### # Editor temporary/working/backup files # .#* *\#*\# [#]*# *~ *$ *.bak *flymake* *.kdev4 *.log *.swp *.pdb .project .pydevproject .settings .idea .vagrant .noseids .ipynb_checkpoints .tags .cache/ # Compiled source # ################### *.a *.com *.class *.dll *.exe *.pxi *.o *.py[ocd] *.so .build_cache_dir MANIFEST # Python files # ################ # setup.py working directory build # sphinx build directory doc/_* # setup.py dist directory dist # Egg metadata *.egg-info .eggs .pypirc # tox testing tool .tox # rope .ropeproject # wheel files *.whl **/wheelhouse/* # coverage .coverage coverage.xml coverage_html_report # OS generated files # ###################### .directory .gdb_history .DS_Store ehthumbs.db Icon? Thumbs.db # Data files # ############## *.dta *.xpt *.h5 # Generated Sources # ##################### !skts.c !np_datetime.c !np_datetime_strings.c *.c *.cpp .pytest_cache UpSetPlot-0.8.0/.readthedocs.yaml000066400000000000000000000007611435554746600166740ustar00rootroot00000000000000# .readthedocs.yaml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 # Set the version of Python and other tools you might need build: os: ubuntu-20.04 tools: python: "3.9" # Build documentation in the docs/ directory with Sphinx sphinx: configuration: doc/conf.py # Optionally declare the Python requirements required to build your docs python: install: - requirements: doc/requirements.txt UpSetPlot-0.8.0/.travis.yml000066400000000000000000000021751435554746600155570ustar00rootroot00000000000000language: generic install: - test -x $HOME/miniconda/bin/conda || (sudo apt-get update; wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh; bash miniconda.sh -u -b -p $HOME/miniconda) - export PATH="$HOME/miniconda/bin:$PATH" - hash -r - conda config --set always_yes yes --set changeps1 no - conda update -q conda # Useful for debugging any issues with conda - conda info -a - conda create -c conda-forge -q -n test-environment $CONDA_DEPS $FIXED_CONDA_DEPS - source activate test-environment - python setup.py install - pip list - cp ci/matplotlibrc matplotlibrc script: - pytest - pip install flake8 # fixes issue with missing typing import - flake8 after_success: - coveralls env: global: - FIXED_CONDA_DEPS="flake8 pytest pytest-cov<2.6 coveralls" matrix: include: - env: CONDA_DEPS="python=3.6 pandas=1.0 matplotlib=2.1.2 numpy=1.17" - env: CONDA_DEPS="python=3.10 pandas matplotlib seaborn" - env: CONDA_DEPS="python pandas matplotlib seaborn scikit-learn" # extra deps to run examples branches: only: - master - /^[0-9]+\.[0-9]+.*$/ UpSetPlot-0.8.0/CHANGELOG.rst000066400000000000000000000125331435554746600154660ustar00rootroot00000000000000What's new in version 0.8 ------------------------- - Allowed ``show_percentages`` to be provided with a custom formatting string, for example to show more decimal places. (:issue:`194`) - Added `include_empty_subsets` to `UpSet` and `query` to allow the display of all possible subsets. (:issue:`185`) - `sort_by` and `sort_categories_by` now accept '-' prefix to their values to sort in reverse. 'input' and '-input' are also supported. (:issue:`180`) - Added `subsets` attribute to QueryResult. (:issue:`198`) - Fixed a bug where more than 64 categories could result in an error. (:issue:`193`) What's new in version 0.7 ------------------------- - Added `query` function to support analysing set-based data. - Fixed support for matplotlib >3.5.2 (:issue:`191`. Thanks :user:`GuyTeichman`) What's new in version 0.6 ------------------------- - Added `add_stacked_bars`, similar to `add_catplot` but to add stacked bar charts to show discrete variable distributions within each subset. (:issue:`137`) - Improved ability to control colors, and added a new example of same. Parameters ``other_dots_color`` and ``shading_color`` were added. ``facecolor`` will now default to white if ``matplotlib.rcParams['axes.facecolor']`` is dark. (:issue:`138`) - Added `style_subsets` to colour intersection size bars and matrix dots in the plot according to a specified query. (:issue:`152`) - Added `from_indicators` to allow yet another data input format. This allows category membership to be easily derived from a DataFrame, such as when plotting missing values in the columns of a DataFrame. (:issue:`143`) What's new in version 0.5 ------------------------- - Support using input intersection order with ``sort_by=None`` (:issue:`133` with thanks to :user:`Brandon B `). - Add parameters for filtering by subset size (with thanks to :user:`Sichong Peng `) and degree. (:issue:`134`) - Fixed an issue where tick labels were not given enough space and overlapped category totals. (:issue:`132`) - Fixed an issue where our implementation of ``sort_by='degree'`` apparently gave incorrect results for some inputs and versions of Pandas. (:issue:`134`) What's new in version 0.4.4 --------------------------- - Fixed a regresion which caused the first column to be hidden (:issue:`125`) What's new in version 0.4.3 --------------------------- - Fixed issue with the order of catplots being reversed for vertical plots (:issue:`122` with thanks to :user:`Enrique Fernandez-Blanco `) - Fixed issue with the x limits of vertical plots (:issue:`121`). What's new in version 0.4.2 --------------------------- - Fixed large x-axis plot margins with high number of unique intersections (:issue:`106` with thanks to :user:`Yidi Huang `) What's new in version 0.4.1 --------------------------- - Fixed the calculation of percentage which was broken in 0.4.0. (:issue:`101`) What's new in version 0.4 ------------------------- - Added option to display both the absolute frequency and the percentage of the total for each intersection and category. (:issue:`89` with thanks to :user:`Carlos Melus ` and :user:`Aaron Rosenfeld `) - Improved efficiency where there are many categories, but valid combinations are sparse, if `sort_by='degree'`. (:issue:`82`) - Permit truthy (not necessarily bool) values in index. (:issue:`74` with thanks to :user:`ZaxR`) - `intersection_plot_elements` can now be set to 0 to hide the intersection size plot when `add_catplot` is used. (:issue:`80`) What's new in version 0.3 ------------------------- - Added `from_contents` to provide an alternative, intuitive way of specifying category membership of elements. - To improve code legibility and intuitiveness, `sum_over=False` was deprecated and a `subset_size` parameter was added. It will have better default handling of DataFrames after a short deprecation period. - `generate_data` has been replaced with `generate_counts` and `generate_samples`. - Fixed the display of the "intersection size" label on plots, which had been missing. - Trying to improve nomenclature, upsetplot now avoids "set" to refer to the top-level sets, which are now to be known as "categories". This matches the intuition that categories are named, logical groupings, as opposed to "subsets". To this end: - `generate_counts` (formerly `generate_data`) now names its categories "cat1", "cat2" etc. rather than "set1", "set2", etc. - the `sort_sets_by` parameter has been renamed to `sort_categories_by` and will be removed in version 0.4. What's new in version 0.2.1 --------------------------- - Return a Series (not a DataFrame) from `from_memberships` if data is 1-dimensional. What's new in version 0.2 ------------------------- - Added `from_memberships` to allow a more convenient data input format. - `plot` and `UpSet` now accept a `pandas.DataFrame` as input, if the `sum_over` parameter is also given. - Added an `add_catplot` method to `UpSet` which adds Seaborn plots of set intersection data to show more than just set size or total. - Shading of subset matrix is continued through to totals. - Added a `show_counts` option to show counts at the ends of bar plots. (:issue:`5`) - Defined `_repr_html_` so that an `UpSet` object will render in Jupyter notebooks. (:issue:`36`) - Fix a bug where an error was raised if an input set was empty. UpSetPlot-0.8.0/LICENSE000066400000000000000000000027121435554746600144500ustar00rootroot00000000000000New BSD License Copyright (c) 2018 Joel Nothman. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: a. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. b. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. c. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. UpSetPlot-0.8.0/README.rst000066400000000000000000000146271435554746600151420ustar00rootroot00000000000000UpSetPlot documentation ============================ |version| |licence| |py-versions| |issues| |build| |docs| |coverage| This is another Python implementation of UpSet plots by Lex et al. [Lex2014]_. UpSet plots are used to visualise set overlaps; like Venn diagrams but more readable. Documentation is at https://upsetplot.readthedocs.io. This ``upsetplot`` library tries to provide a simple interface backed by an extensible, object-oriented design. There are many ways to represent the categorisation of data, as covered in our `Data Format Guide `_. Our internal input format uses a `pandas.Series` containing counts corresponding to subset sizes, where each subset is an intersection of named categories. The index of the Series indicates which rows pertain to which categories, by having multiple boolean indices, like ``example`` in the following:: >>> from upsetplot import generate_counts >>> example = generate_counts() >>> example cat0 cat1 cat2 False False False 56 True 283 True False 1279 True 5882 True False False 24 True 90 True False 429 True 1957 Name: value, dtype: int64 Then:: >>> from upsetplot import plot >>> plot(example) # doctest: +SKIP >>> from matplotlib import pyplot >>> pyplot.show() # doctest: +SKIP makes: .. image:: http://upsetplot.readthedocs.io/en/latest/_images/sphx_glr_plot_generated_001.png :target: ../auto_examples/plot_generated.html And you can save the image in various formats:: >>> pyplot.savefig("/path/to/myplot.pdf") # doctest: +SKIP >>> pyplot.savefig("/path/to/myplot.png") # doctest: +SKIP This plot shows the cardinality of every category combination seen in our data. The leftmost column counts items absent from any category. The next three columns count items only in ``cat1``, ``cat2`` and ``cat3`` respectively, with following columns showing cardinalities for items in each combination of exactly two named sets. The rightmost column counts items in all three sets. Rotation ........ We call the above plot style "horizontal" because the category intersections are presented from left to right. `Vertical plots `__ are also supported! .. image:: http://upsetplot.readthedocs.io/en/latest/_images/sphx_glr_plot_vertical_001.png :target: http://upsetplot.readthedocs.io/en/latest/auto_examples/plot_vertical.html Distributions ............. Providing a DataFrame rather than a Series as input allows us to expressively `plot the distribution of variables `__ in each subset. .. image:: http://upsetplot.readthedocs.io/en/latest/_images/sphx_glr_plot_boston_001.png :target: http://upsetplot.readthedocs.io/en/latest/auto_examples/plot_boston.html Loading datasets ................ While the dataset above is randomly generated, you can prepare your own dataset for input to upsetplot. A helpful tool is `from_memberships`, which allows us to reconstruct the example above by indicating each data point's category membership:: >>> from upsetplot import from_memberships >>> example = from_memberships( ... [[], ... ['cat2'], ... ['cat1'], ... ['cat1', 'cat2'], ... ['cat0'], ... ['cat0', 'cat2'], ... ['cat0', 'cat1'], ... ['cat0', 'cat1', 'cat2'], ... ], ... data=[56, 283, 1279, 5882, 24, 90, 429, 1957] ... ) >>> example cat0 cat1 cat2 False False False 56 True 283 True False 1279 True 5882 True False False 24 True 90 True False 429 True 1957 dtype: int64 See also `from_contents`, another way to describe categorised data, and `from_indicators` which allows each category to be indicated by a column in the data frame (or a function of the column's data such as whether it is a missing value). Installation ------------ To install the library, you can use `pip`:: $ pip install upsetplot Installation requires: * pandas * matplotlib >= 2.0 * seaborn to use `UpSet.add_catplot` It should then be possible to:: >>> import upsetplot in Python. Why an alternative to py-upset? ------------------------------- Probably for petty reasons. It appeared `py-upset `_ was not being maintained. Its input format was undocumented, inefficient and, IMO, inappropriate. It did not facilitate showing plots of each subset's distribution as in Lex et al's work introducing UpSet plots. Nor did it include the horizontal bar plots illustrated there. It did not support Python 2. I decided it would be easier to construct a cleaner version than to fix it. References ---------- .. [Lex2014] Alexander Lex, Nils Gehlenborg, Hendrik Strobelt, Romain Vuillemot, Hanspeter Pfister, *UpSet: Visualization of Intersecting Sets*, IEEE Transactions on Visualization and Computer Graphics (InfoVis '14), vol. 20, no. 12, pp. 1983–1992, 2014. doi: `doi.org/10.1109/TVCG.2014.2346248 `_ .. |py-versions| image:: https://img.shields.io/pypi/pyversions/upsetplot.svg :alt: Python versions supported .. |version| image:: https://badge.fury.io/py/UpSetPlot.svg :alt: Latest version on PyPi :target: https://badge.fury.io/py/UpSetPlot .. |build| image:: https://travis-ci.org/jnothman/UpSetPlot.svg?branch=master :alt: Travis CI build status :scale: 100% :target: https://travis-ci.org/jnothman/UpSetPlot .. |issues| image:: https://img.shields.io/github/issues/jnothman/UpSetPlot.svg :alt: Issue tracker :target: https://github.com/jnothman/UpSetPlot .. |coverage| image:: https://coveralls.io/repos/github/jnothman/UpSetPlot/badge.svg :alt: Test coverage :target: https://coveralls.io/github/jnothman/UpSetPlot .. |docs| image:: https://readthedocs.org/projects/upsetplot/badge/?version=latest :alt: Documentation Status :scale: 100% :target: https://upsetplot.readthedocs.io/en/latest/?badge=latest .. |licence| image:: https://img.shields.io/badge/Licence-BSD-blue.svg :target: https://opensource.org/licenses/BSD-3-Clause UpSetPlot-0.8.0/ci/000077500000000000000000000000001435554746600140345ustar00rootroot00000000000000UpSetPlot-0.8.0/ci/matplotlibrc000066400000000000000000000000161435554746600164500ustar00rootroot00000000000000backend : Agg UpSetPlot-0.8.0/conftest.py000066400000000000000000000005331435554746600156410ustar00rootroot00000000000000import sys import pytest from _pytest.doctest import DoctestItem def pytest_runtest_setup(item): if isinstance(item, DoctestItem): if sys.version_info.major < 3 or (sys.version_info.major == 3 and sys.version_info.minor < 6): pytest.skip('Doctests are disabled in Python < 3.6') UpSetPlot-0.8.0/doc/000077500000000000000000000000001435554746600142065ustar00rootroot00000000000000UpSetPlot-0.8.0/doc/Makefile000066400000000000000000000155371435554746600156610ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # User-friendly check for sphinx-build ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* -rm -rf auto_examples/ -rm -rf _modules/* html: # These two lines make the build a bit more lengthy, and the # the embedding of images more robust rm -rf $(BUILDDIR)/html/_images #rm -rf _build/doctrees/ $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/project-template.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/project-template.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/project-template" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/project-template" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." UpSetPlot-0.8.0/doc/api.rst000066400000000000000000000007251435554746600155150ustar00rootroot00000000000000 API Reference ............. .. currentmodule:: upsetplot Plotting -------- .. autofunction:: plot .. autoclass:: UpSet :members: Dataset loading and generation ------------------------------ .. autofunction:: from_contents .. autofunction:: from_indicators .. autofunction:: from_memberships .. autofunction:: generate_counts .. autofunction:: generate_samples Data querying and transformation -------------------------------- .. autofunction:: query UpSetPlot-0.8.0/doc/changelog.rst000066400000000000000000000000641435554746600166670ustar00rootroot00000000000000 Changelog ......... .. include:: ../CHANGELOG.rst UpSetPlot-0.8.0/doc/conf.py000066400000000000000000000211361435554746600155100ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # project-template documentation build configuration file, created by # sphinx-quickstart on Mon Jan 18 14:44:12 2016. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys import os import re # project root sys.path.insert(0, os.path.abspath('..')) import matplotlib # noqa matplotlib.use('agg') import sphinx_rtd_theme # noqa from upsetplot import __version__ as release # noqa # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx_gallery.gen_gallery', 'sphinx.ext.autodoc', 'sphinx.ext.autosummary', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'numpydoc', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', 'sphinx_issues', 'nbsphinx', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. # source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'upsetplot' copyright = u'2018-2022, Joel Nothman' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = re.match(r'^\d+(\.\d+)*', release).group() # version = upsetplot.__version__ # The full version, including alpha/beta/rc tags. # release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. # today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all # documents. default_role = 'any' # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. # keep_warnings = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". # html_title = None # A shorter title for the navigation bar. Default is the same as html_title. # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. # html_extra_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. # html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_domain_indices = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, links to the reST sources are added to the pages. # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'project-templatedoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # 'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ ('index', 'upsetplot.tex', u'upsetplot Documentation', u'Joel Nothman', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # If true, show page references after internal links. # latex_show_pagerefs = False # If true, show URL addresses after external links. # latex_show_urls = False # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_domain_indices = True # Documents to append as an appendix to all manuals. # texinfo_appendices = [] # If false, no module index is generated. # texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. # texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. # texinfo_no_detailmenu = False # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = { 'python': ('http://docs.python.org/', None), 'numpy': ('https://docs.scipy.org/doc/numpy/', None), 'matplotlib': ('https://matplotlib.org/', None), 'pandas': ('https://pandas.pydata.org/pandas-docs/stable/', None), } # Config for sphinx_issues issues_uri = 'https://github.com/jnothman/upsetplot/issues/{issue}' issues_github_path = 'jnothman/upsetplot' issues_user_uri = 'https://github.com/{user}' sphinx_gallery_conf = { # path to your examples scripts 'examples_dirs': '../examples', # path where to save gallery generated examples 'gallery_dirs': 'auto_examples', 'backreferences_dir': '_modules', } UpSetPlot-0.8.0/doc/formats.ipynb000066400000000000000000023350301435554746600167320ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Data Format Guide" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "UpSetPlot fundamentally is about visualizing datapoints (or data aggregates) that are each assigned to one or more categories. Curiously, there are many ways to represent categories as data structures. Object 1 belongs to categories `A` and `B` and object 2 belongs to category `B` only, this information can be represented by:\n", "\n", "* listing the memberships for each object, i.e.\n", " ```\n", " [[\"A\", \"B\"], # object 1\n", " [\"B\"]] # object 2\n", " ```\n", "* listing the contents of each category, i.e.\n", " ```\n", " {\"A\": [1], \"B\": [1, 2]}\n", " ```\n", "* using a boolean-valued indicator matrix (perhaps columns in a larger DataFrame), i.e.\n", " ```\n", " # A B\n", " [[ True, True ], # object 1\n", " [ False, True ]] # object 2\n", " ```\n", "\n", "Moreover, UpSetPlot aims to handle both of the following cases:\n", "\n", "* where only aggregates (e.g. counts) of the values in each category subset are given; and\n", "* there are data points with several attributes in each category subset, where these attributes can be visualized as well as aggregates.\n", "\n", "This guide reviews the internal data format and alternative representations, but we recommend using the helper functions [`from_memberships`](api.html#upsetplot.from_memberships), [`from_contents`](api.html#upsetplot.from_contents) or [`from_indicators`](api.html#upsetplot.from_indicators) depending on how it's most convenient to express your data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Internal data format" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "UpSetPlot internally works with data based on [Pandas](https://pandas.pydata.org/) data structres: a Series when all you care about is counts, or a DataFrame when you're interested in visualising additional properties of the data, such as with the `UpSet.add_catplot` method.\n", "\n", "UpSetPlot expects the Series or DataFrame to have a MultiIndex as input, with this index being an indicator matrix. Specifically, each category is a level in the `pandas.MultiIndex` with boolean values.\n", "\n", "Note: This internal data format may change in a future version since it is not efficient. Using the `from_*` methods will provide more stable compatibility with future releases." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Use `Series` as input" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below is a minimal example using `Series` as input: \n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:32.057148Z", "start_time": "2021-07-31T14:30:31.618795Z" } }, "outputs": [ { "data": { "text/plain": [ "cat0 cat1 cat2 \n", "False False False 56\n", " True 283\n", " True False 1279\n", " True 5882\n", "True False False 24\n", " True 90\n", " True False 429\n", " True 1957\n", "Name: value, dtype: int64" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from upsetplot import generate_counts\n", "example_counts = generate_counts()\n", "example_counts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a `pandas.Series` with 3-level Multi-index. Each level is a `Set`: `cat0`, `cat1`, and `cat2`. Each row is a unique subset with boolean values in indices indicating memberships of each row. The value in each row indicates the number of observations in each subset. `upsetplot` will simply plot these numbers when supplied with a `Series`: \n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:32.241823Z", "start_time": "2021-07-31T14:30:32.059689Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from upsetplot import UpSet\n", "ax_dict = UpSet(example_counts).plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, we can supply a `Series` with each observation in a row: \n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:32.255597Z", "start_time": "2021-07-31T14:30:32.244146Z" } }, "outputs": [ { "data": { "text/plain": [ "cat0 cat1 cat2\n", "False True True 1.652317\n", " True 1.510447\n", " False True 1.584646\n", " True 1.279395\n", " True True 2.338243\n", " ... \n", " True 1.701618\n", " True 1.577837\n", "True True True 1.757554\n", "False True True 1.407799\n", "True True True 1.709067\n", "Name: value, Length: 10000, dtype: float64" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from upsetplot import generate_samples\n", "example_values = generate_samples().value\n", "example_values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, we can use `subset_size='count'` to have `upsetplot` count the number of observations in each unique subset and plot them: \n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:32.471669Z", "start_time": "2021-07-31T14:30:32.258639Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from upsetplot import UpSet\n", "ax_dict = UpSet(example_values, subset_size='count').plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or, we can weight each subset's size by the series value:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:32.677424Z", "start_time": "2021-07-31T14:30:32.474115Z" } }, "outputs": [ { "data": { "image/png": "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kCFD+PTTT5OqT3VRHT1YG+Qysgb79A2XrVu38s477/Dkk08CbgFHvXr1KsTZsWNH0vepNmMqAsMwfLFmzRpatmzJ6NGjOfrooxkzZgw7duwA4IYbbqB9+/ZMmzaNm2++uSxNUVERRx99NCeddFKFGR/7CyZgDcPwRUlJCR999BGXXXYZixcvplGjRtx2222AWwCybt06zj//fB588EEA2rRpwxdffMHixYu5++67Oe+889i6dWuYTah2TMAahuGL/Px88vPzOeaYYwA488wz+eijjyrEOe+885gxYwYA9evX58ADDwSgT58+HHrooaxcubJ6Kx0yJmCN/Z5169Zx8skn061bNwoKCrjvvvsAOOecc8pGwDt27EivXr3K0ixdupRjjz2WgoICevTowffffx9W9auNgw8+mPbt27NixQoA5syZQ/fu3Vm1alVZnFmzZtG1a1cAvvrqK/budWYv1qxZw6pVq/a75co2yGXs9+Tm5nLXXXfRu3dvtm3bRp8+fRg4cCDPPfdcWZxf//rXNG3aFHCfyhdccAFTp06lZ8+e/Pe//6Vu3bphVb9aeeCBBzj//PPZvXs3nTt35oknnmDMmDGsWLGCOnXq0KFDByZPngzAO++8w+9//3tyc3PJyclh8uTJ+1hJq/UkMhZrm22Vt+owuB0PqsmQ9NChQ/XNN98sOy4tLdX8/HxduXKlqqq+8sorev7556fcnkxRXdcpE8Qytn7jjTdqjx49tGfPnjpw4EBdv359hTSVja37JY3XKe7zYioCw4hi7dq1LF68uEzPCM7eQevWrenSpQsAK1euREQYNGgQvXv35o477girurWOWMbWr732WpYuXcqSJUsYMmRIhVkKENvYek3BBKyRNuLpMpcsWUJhYSG9evWib9++LFy4MOSaxmb79u0MHz6ce++9t2ziPMAzzzzDiBEjyo5LSkqYP38+06ZNY/78+fztb39jzpw5vsuJd52uvfZaunbtylFHHcXPfvYzNm/enL7GZQmxjK1H34vK82xjGVuvUSTq3tpmW+UtkYpgw4YN+uGHH6qq6tatW7VLly66bNkyHThwoL766quq6j6vTzrppLh5JIIMfvru3r1bTz31VL3rrrsqhO/Zs0dbtWql69atKwt75plndNSoUWXHN998s95xxx2+y4p3nd544w3ds2ePqqpOmDBBJ0yYkFQb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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from upsetplot import UpSet\n", "ax_dict = UpSet(example_values, subset_size='sum', show_counts=True).plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Use `DataFrame` as input: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A `DataFrame` can also be used as input to carry additional information. \n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:32.691208Z", "start_time": "2021-07-31T14:30:32.678924Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexvalue
cat0cat1cat2
FalseTrueTrue01.652317
True11.510447
FalseTrue21.584646
True31.279395
TrueTrue42.338243
\n", "
" ], "text/plain": [ " index value\n", "cat0 cat1 cat2 \n", "False True True 0 1.652317\n", " True 1 1.510447\n", " False True 2 1.584646\n", " True 3 1.279395\n", " True True 4 2.338243" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from upsetplot import generate_samples\n", "example_samples_df = generate_samples()\n", "example_samples_df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this data frame, each observation has two variables: `index` and `value`. If we simply want to count the number of observations in each unique subset, we can use `subset_size='count'`: \n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:32.872276Z", "start_time": "2021-07-31T14:30:32.693257Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAATgAAAD4CAYAAAB44PpqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3dedwcVZ3v8c83G5CYkEQgrLI4GVFUUCMi6IDbGEcEHK7jMgqjiF4veEEHZ3CZi6P3cp0ZdEQFGWRRXGCAiEGHVRhwAREQFBC4RkCJMCyGkLAlJPndP041T+dJL9XV1el+qr7v16tfz9PVVadOVXf/+lTVqfNTRGBmVkWThl0BM7NBcYAzs8pygDOzynKAM7PKcoAzs8pygJtgFi5cGIAffvgx9mjLAa4ASbMlnS/pDkm3S3qlpLmSLpf0m+zvnKb5Py5piaQ7Jb2xafrLJN2SvfYlSeq27ocffnhQm2VWOQ5wxZwIXBIRuwK7A7cDxwJXRMR84IrsOZJeALwD2A1YCJwsaXJWzleBDwDzs8fCjbkRZlXnANcjSbOAPwNOB4iI1RGxHDgQ+EY22zeAg7L/DwTOiYhVEXE3sATYU9I2wKyIuDZSb+uzmpYxsxJMGXYFJqBdgIeAMyXtDtwIHAXMi4j7ASLifklbZfNvB/ysafml2bSns//HT9+ApA+QWnrMmzePq666qrSNMZvo9ttvv7avOcD1bgrwUuDDEXGdpBPJDkfbaHVeLTpM33BixKnAqQALFiyITm+omY3xIWrvlgJLI+K67Pn5pID3QHbYSfb3wab5d2hafnvgvmz69i2mm1lJHOB6FBH/Bdwr6XnZpNcBvwYuBA7Nph0KLM7+vxB4h6RNJO1Mupjw8+xwdqWkvbKrp4c0LWMTlKSeHzY4PkQt5sPAtyVNA+4C3kv6sThX0mHA74G3AUTEbZLOJQXBNcAREbE2K+dDwNeBzYCLs4eZlUQeLmliWbBgQdxwww3Droa1UaRF5u9g39rudB+imlllOcCZWWU5wJlZZTnAmVllOcCZWWU5wJlZZTnAmVllOcCZWWU5wJlZZTnAmVllOcCZWWU5wJlZZTnAmVllOcCZWWU5wBUg6Z4s3d/Nkm7Ipm2UtIFmlp8DXHGviYg9ImJB9txpA81GjANceZw20GzEeMjyYgK4TFIA/5ZlvXLaQCvE72d/nDawfPtExH1ZELtc0h0d5nXaQOvI7+fg+BC1gIi4L/v7IHABsCdOG2g2chzgeiRphqSZjf+BPwduxWkDzUZOrQ9RJe0IzI+IH0raDJgSESu7LDYPuCDr0TEF+E5EXCLpepw20Gyk1DZtoKTDSSfu50bEcyXNB06JiNcNuWodOW3gaHPawKFw2sAWjgD2AVYARMRvgK06LmFmE0qdA9yqiFjdeCJpCm2uYprZxFTnAHe1pE8Am0l6A3Ae8P0h18nMSlTnAHcs8BBwC/BB4KKI+ORwq2RmZarzVdS/Jt1C9bXGBEn7R8QPhlgnMytRnVtwXwZ+LOn5TdM+M6zKmFn56hzg7gbeB5wv6W3ZNA9XZFYhdT5EjYj4haR9gbMlvQKY3G0hM5s46tyCa4z88TDwRlIXkRcOtUZmVqraBriIeHPT/+si4mMRUdv9YVZFtTtElfTFiDha0vdp0bE3Ig4YQrXMbABqF+CAb2Z/TxhqLcxs4GoX4CLixuzv1Y1pWYKYHSLiV0OrmJmVrrbnnCRdJWmWpLnAL4EzJX1h2PUys/LUNsABm0fECuAvgTMj4mXA6/MuLGmypJsk/SB77rSBZiOmzgFuSja0+F8BRW7POgq4vem50waajZg6B7jPAJcCSyLiekm7AL/Js6Ck7YE3A6c1TXbaQLMRU7uLDA0RcR5piKTG87uAg3Mu/kXg74CZTdOcNtAK8fvZH6cNLJGk/YEHI+JGSfvlWaTFNKcNtGf4/RwcB7je7QMcIOkvgE2BWZK+RZY2MGu9OW2g2Qio8zm4QiLi4xGxfUTsRLp4cGVEvBunDTQbObVtwUnahHTObSea9kNEFB0T7nM4baDZSKlz2sBLgEeBG4FGwCEiPj+0SuXgtIGjzWkDh6LtTq9tCw7YPiLc78yswup8Du4aSS8adiXMbHDq3IJ7FfA3ku4GVpGauRERLx5utcysLHUOcG8adgXMbLBqe4gaEb8DZgNvyR6zs2lmVhG1DXCSjgK+DWyVPb4l6cPDrZWZlanOh6iHAa+IiMcBJP0TcC0pX6qZVUBtW3Ckiwprm56vxXlRzSqlzi24M4HrJF2QPT8IOH2I9TGzktU2wEXEFyRdReouIuC9EXHTcGtlZmWqXYCTNCsiVmS5GO7JHo3X5kbEsmHVzczKVbsAB3wH2J90D2rzTYDKnu8yjEqZWflqF+AiYv/s787DrouZDVZtr6JKuiLPNDObuGoX4CRtmp1/20LSnCzd31xJOwHb5lz+55J+Kek2Sf+YTXfaQLMRU7sAB3yQdP5t1+xv47EYOCnH8quA10bE7sAewEJJe+G0gWYjp3YBLiJOzM6/HRMRu0TEztlj94j4So7lIyIey55OzR6B0waajZzaXWRosk7S7IhYDpAdUr4zIk7utmDWArsR+BPgpIi4TpLTBlohfj/747SBrR0eEc8ckkbEI5IOB7oGuCynwh6SZgMXSHphh9mdNtA68vs5OLU7RG0yqfmkftYqm9ZLAVnr7yrSubMHssNOnDbQbDTUOcBdSsqC9TpJrwXOBi7ptpCkLbOWG5I2A14P3IHTBpqNnDofov496Yrqh0iHi5cBp+VYbhvgG1mLbxJwbkT8QNK1OG2g2UipbdpAeKYF9pyIuHPYdcnLaQNHm9MGDkXbnV7bQ1RJBwA3kx2WStpD0oXDrZWZlam2AQ44DtgTWA4QETeTstybWUXUOcCtiYhHh10JMxucOl9kuFXSu4DJkuYD/xO4Zsh1MrMS1bkF92HS/aGrSF1EVgBHD7VGZlaq2rbgIuIJ4JPAJ7MuHzMi4qkhV8vMSlTbFpyk70iaJWkGcBtwp6SPDbteZlae2gY44AURsYI0gsdFwHOA9wy3SmZWpjoHuKmSppIC3OKIeJo2N7ub2cRU5wB3Cimj1gzgR5J2JF1oMLOKqOVFBkmTgAciYrumab8HXjO8WplZ2WrZgouIdcCR46ZFRKwZUpXMbABqGeAyl0s6RtIOTYln5g67UmZWnjoHuPcBRwA/YizxTNdhOrKA+J+Sbs+yah2VTXdWLbMRU9sA15RspvmRJ6v9GuBvI+L5wF7AEVnmLGfVMhsxtQ1wkqZL+pSkU7Pn8yXt3225iLg/In6R/b8SuJ2ULMZZtcxGTC2vombOJB2W7p09XwqcB/wgbwFZsuiXANcBzqplhfj97I+zarX23Ih4u6R3AkTEk72cA5P0LGARcHRErOiwqLNqWUd1fD831sjHtT1EBVZnQ5YHgKTnkkYW6Sq7A2IR8O2I+G422Vm1zEZMnQPcp0nDle8g6dukCwN/322hrJV3OnB7RHyh6SVn1TIbMbU9RI2IyyTdSLoSKuCoiHg4x6L7kG7Kv0XSzdm0TwCfw1m1zEZKbbNqSboiIl7XbdqocVat0easWvmUvJ/aFla7FpykTYHpwBZZZ9zGzpkFbDu0iplZ6WoX4EjJno8mBbMbGQtwK4CThlUpMytf7QJcRJwInCjpwxHx5WHXx8wGp3YBriEivixpb1Iu1ClN088aWqXMrFS1DXCSvgk8l5TdvnFVs3HLlJlVQG0DHLCAlJehfpewzGqizh19bwW2HnYlzGxw6tyC2wL4taSf03SLVkQcMLwqmVmZ6hzgPj3sCpjZYNU2wEXE1cOug5kNVu0CnKSVtB6WSKTcM7M2cpXMbEBqF+AiYuaw6zBR9Xr/oC9Q27DV+SqqmVWcA5yZVZYDXI8knSHpQUm3Nk1zykCzEeQA17uvs2F6P6cMNBtBDnA9iogfAcvGTXbKQLMRVLurqAMysJSBMHHTBk6Ueg6b91M+7faT0wYOT98pA2Hipg2cKPUcNu+nfIrsJx+ilsMpA81GkANcOZwy0GwE+RC1R5LOBvYjJa1ZChyHUwaajaTapg2cqIaZNtC3anXntIH5bKy0gT5ENbPKcoAzs8pygDOzynKAM7PKcoAzs8pygDOzynKAM7PKckdfswnG/RHzcwvOzCrLAc7MKssBzswqy+fgbGT4Pk4rm1twZlZZDnBmVlkOcEMmaWGWUnCJpGOHXR+zKvE5uCHKUgieBLyBNIz59ZIujIhfD7dmVndV6WvnFtxw7QksiYi7ImI1cA4p1WDPJPX0MKsDt+CGazvg3qbnS4FXjJ+pOW0gcBvwwvHzbIxf0EGvY1RbAb2owvuwMdaxsd5rB7jhypU+sDltoJnl50PU4WqXVtDMSuAAN1zXA/Ml7SxpGvAOUqpBMyuBD1GHKCLWSDoSuBSYDJwREbcNuVpmleG0gWZWWT5ENbPKcoAzs8pygDOzynKAM7PKcoAzs8pygDOzynKAM7PKGkqAW7x48SXDWK+Z1cuwWnBbDGm9ZlYjPkQ1s8rqeC+qpJmDWOmiRYsmDapsM6uXiFjZ7jW34MyssjyaSHXNAKaTBtVcBTxacvkCZgNTgXXAY8BTJa9jGjCL9EO8Blierassk4CFwEtIA43eCFxGi0FH+zAZ2Jz0XVsLrARWl1g+pPq/HtgUuBv4LvBEieVPAw4AdiW9Dz8Gflpi+ZBGt34r8GzgYdI23N9voRMlwK3ocf5ZA6nFxDCd9GGZNm761sCDwCMlrGNL0oWi5iOAecCTpEE8+/0CTyEN/jlj3PStgWXAf/VZPsD+wD+x/oCjAL8DPgaUcaV/G2AO64/cvDXpx2ApKeD140+BU4AF46Z/DvhX4PN9lg/wXuAf2PDC4O3AEcANfZY/E/gScBDpx6Dhs8Ai4Gjg8aKF+xC1WqYDO7FhcIMUNLYF5va5jq2BrWj92dkM2JnUqitqclbG+OAGKVA8mxT8+nEg8C02DG4AOwJnA3/R5zqeQ9rXrYalfxawC/19//6E1NocH9wg/cAfB3ymj/IBjgROpHWvh+cDPwBe2kf5mwLfAw5m/eAG6fP6dlJLrtXnORcHuOF5FesnmJkGfB24GbiS9AXp1ba0/kI1m0fx931TUoDpZEq2jqK2pPsHenNSkChiKql102kfTAa+wIZfurxmkVomnUwjbWtR/5vuP1ZHk1p5RWwJfLrLPNOBEwqWD3AY8PIu87wSeE/RFTjADc+rWT/AHUI6x7QHKVdqr7++mwGb5JhvEumwqYi8rb9ZFAsOjfN6ZdZlvIPI1w9zW4q34vLWLe+2jrcd8Mac876/4DoOIV/LaQHpM1vE+3LOV3QbHOAG4J3AtcA1pExYbyK1yH5CyrewJal1dhjpHMZPSb9Sbwa+k5XxPWC/Htc7fUDzFllOBdexCfkD42YFyoeUi3YQ8zbLW7cp5PtRGu9l5N9PRbehl+W6tcJamQvMzznvbhT8zE6UiwwTxa7AMaRM9ctILaUAXpu9fgjpsOGTwOmkk6dfyl7blnTiGdLJ50dJH4JlG6PiI6KXjNRFs1f38qM+qg2AjbENg15Hr+9foe0Y1TdwotoXWMxYUHqEFLi+B/wMOIp0craVftPNr+ph3qLdOXpZrsg6VpG/G0jRbfhVD/PeUnAded+LdRS74nxrD/MW3YZelutlnzYsA/6Qc967SVeee+YAVy6xYR+qE0iHqnuRAtymbZb9A2NXBxt9p3ppvT1Gvi9LULyrSN76PAY8XaD8deTvr1e0ZXse+bodLQMuKLiOvHVbTrE+d0uAq3POe3qB8gHOJN+Pze2kUzK9imwdeZxRoHzAAa5sV5E6KzZOMs8hnXBvJHN+V9O8j7H+lcCLml4/iPwf4GZ5+oc9TOqsWcQTdA8O64AHCpYP8BDd6/d4jnq08wTwjznm+1/01iputpzuHW2fJm1rUceR+h128u/ALwqWfy/w5S7zrAU+UbB8SD/8v+kyzx04wI2MO0gttotJFxmOzx5nkXKf/rFp3ouBtzB2keEsUmC8mdT/6LgC619J+mC26kAapI6+DxYot9m9pC9wK08D99DfHQ2NMtq1RleQOuP242ukzrytOpCuJLW0z+pzHb/LymplFWkbi/7QQApcb2Xsx7PZWlLr6EN9lA+pg+/naf1e/BH4a+CKPspfTupwfV2b16/NXm97r2k3HfOiDvBm+6sPPvjgfQdRtj1jNmOdZZ8ifZj67TnfbGq2jmmk4LmSPj6IbTyL1J9sMinwPUK5tznNIl313oO0Db8AzqHg+Z42NmHslra1pABduGd+C5NJV+C/lT0/Pvt/adslercl8G7GWr4fIHXALfO9eDljwfJk4Fxytj473WzvAGdWDY1D9kHepjjodRQq36OJmFktdewH1yky9mPx4sXrBlW2WR1JqZfRIL9Xg17HIMp3C87MKssBzswqywHOzCrLAc7MKssBzswqywHOzCrLwyVVkKSppNu+ZpAGAHgK+GNElJYURtKMbB3TSPefrgQeiYhS7paQNJ10K9BBpLsZ/kAa8fiy6NQ7vbd1TCONUNwYv+1J0n4qpYe+pEZSm0NIo8qsIOUZOCciut1Hmncdk2kaYFPSDqRtKC3pjKTdgQ82Pf8U8LWI6Oee4+bypwJ/2fT8u6SxEb8XEf3cztb5ToYulSr8ITvhhBM45phjii7eVUT0O/TQhCVpC1Kyk1b74BFgaT8BIvtC7UjrIcPXAb+PiKI3wjfWsS8pELQaHv0G4C0R0VfiGUnb0H7I8AdLKH974Pu0Hu32IeCgiLimz3XMJo1AMwn4ZTZ59+zvSuB3EVE4C1n2A3AG6YdmvKeBoyPi5KLlZ+vYjZTbYacWL/8W2D8i7ihavg9RK0TSXDrnZZhDGu66HzvRPh/CJGBHSUXzJSDpRcB/0D73wwLgUknthp3Ks455dM6HsJWkrfoofwYpIUy7oby3BC6W1G5swDzrmElKmtPuOzyT1kGjF6fROrhBurf2JEntXu9K0rbAD2lfz+cCP+znvXCAGxJJ+0nau+n5RyX9WtKvJF0hacceyxP5kr3MzX6Ze5Z9qVplu1pvtpz1aOdTOdbxYtJN8j3LWqB5kr1slR1iFnEI7Qc2bZgFHFuwfEj7uNuRyrOK/thkwTdPspfP9rGfjiJlaetkO9LQ/oU4wA3PfsDeTc9vAhZExIuB84F/7rG8meRP11c0YUu3jFoNMyT1nGsgO7x+a87ZP9Br+Zk55Pvc95OcJ2/d/io7zOxJ1nrNm6Og6Huddxt2Jg3R3xNJU8ifdOZwNe7j6pEDXMkkHZK1wn4p6ZuS3iLpOkk3SfqhpHmSdgL+O/ARSTdLenVE/GfTieGf0Xvuz14CStHDu17WUSSZyi7kD9K7FigfBr8NAM/LOd+mpPOZverl/Rv0NkCx92Iu+bKbQTqnXGgEE19FLVF2wvSTwD4R8XB2TiyAvSIiJL0f+LuI+FtJpwCPRUSrvJKHkQbEHJSiJ557uThR5EJGL8OcF73SOehtgLQdeTNrFdmOjbUNeRXZhl6HtC/0frsFV67XAudHxMMAEbGM1BK7VNItpFFkd+tUgKR3k06k/0uP6+5lBIaiAzrmXW4d3YfsbuVW8g93XnQk2V62veh+ylu3e4H/V6D8x8kfuAa9DdHDvGMLRTxC/uHUry3arcYBrlytks58GfhKRLyI1Jeo7eGFpNeTWoAHRERP+QCyPm55RopdS/shx7v5Y/dZAFhepD9cRDxNGk48j0LdE7IuLHlaA6v6GLbnpJzznVpwP60h33sYFE/O8w3yfZ6ujIgiQRryv4eFu6I4wJXrCtKJ42fDM902NmcsPdqhTfOuJF0YIJv3JcC/kYJb0bwJf6DzsORB6gdX6BA1C7r3d5ltFfmS37TzOVJft06+GBE/6WMd99K5BbQum6eQiLgCOKXLbNeS8h0UdT/dA/X9RTstR8SjwOF0Pp3xEP3lffg6qQ9cJ41Ov4U4wJUoIm4D/g9wtaRfAl8APg2cJ+nHpIxWDd8H3tq4yEA6JH1WNu/Nki4ssP6nSCnlWrU8ngLuyT64hUXEQ6Qv//gvTpBaFb/tp/d5RDxOOtQ/jQ2T19wPfDQiPlK0/KZ1/JbWh9GPA3eVcCfA/yB1Axn/Y/UE6YfsDf3czZDt49+S0iyOD9argXsbp0r6WMfZwIFsmIc1SOeI946IblmxOpW/lnQHwz+zYbrI5cD/Bd7eV2flku566cnixYtvOPDAAxds9BXXSNZNYzrZrVpl3rrTtI5G15QAVvZ7W02L8ucCbyIF/j8Al2aHsWWuYzPGLgg8UebtbFn500i3ay3OJs2JiKKnCNqtYypjPzgzI6LMpDmNdewDvICUCezqiLir5PJnMHa+8L8BF5fxmfVV1IrKDieL5vXMu46BDjufXaT59oDX8STd84v2U/5q4MKm4bhLDW5ZmU83lV96cMvK/SkpxeVARMTjTduwqKxyfYhqZpXlAGdmleUAZ2aV5QBnZpXlAGdmldXxKmrWDaB0ixYtmjSoss1G2aA/91X4XvW6DZ2u5rsFZ2aV5QBnZpXVraNvX2Prt3P33XcPrOxMobGjKmQWabytxqCIq0j5GB6h+PA5zeYCf0MauXYn0i1Vl5FuQSqrM+impAE2ZwKTScPrLCfdPF7WHROzSdvSGADhyaz8vm5na7Id8H7WH334JNJ++lVJ6/gzmhLCkEboOIt0s/wjJZQv0sCfjQRDkG5nW0ZvI9h0Mp/1B9i8CziXNPDCb/spuOOtWv0klulk0ElnqHeA24H2278KuJvON+R38zzSbUfbtnm9cf9tP+aSBjlsZS3wO/q7+0CkwNxuVNzHs3X08/nfG/h30mAL460DjiHdb9uP44Ej27x2L+k+0iV9lD+FtJ/aDZr5KLC0j/IhZU07jbHg2ewp0g/pRZ0K8Dm40fQq4BVNz/cGfkz61T2wYJnz6BzcNwGeU7BsSC2dC2gf3AA+SmrZFTWT9sENUmtux+xvUdvTecjvGfSXnGcb2gc3SN+7z5MGFSjqcNoHN0g/dIvIP0JyKzvSeUTgzYHCCWFIuTVOp3Vwg/R5+wbd81u05QA3PK9m/QC3lDSM+bkFy5tEvvH3p5N/PP/x3ka+odSPKlg+5BvGejLF8yVMJV8LfxbF79U+jPbBrUEU3095l92Z/DkuxptBvqHR59I9+U07R9I9AG9CGpmlEAe48r2TNNbXNcCppNEwrgR+AlxIyuj0HNKX4AjSOatXAr8HbqP4cOKzyP9+dvvytfOunPPNB15eoPyp5A++RQNc3iQv6mHe8d6Rc7796J5VqpV9yN8Sz1uX8fJu+2SKnRLahPzB920UjFUeTaRcu5LOrbyBdBJ2Duk8TuNQ5BDgaNKovaeTzvV8qaR19/JeFj1s6eVwpEjqwF62oeghai/rKPr9yLvtIu3TXgcI7WXfFgmgMPj3YnPyJ8SZTgqiPY/E4gBXrn1JJ+Abw0Q/QhpD6+ukD9pU0snrQeil5Vf0IkMvV76LXInspV5FW7obaz/lyb0KxfbToN8HGPx78Vi2XJ6W2RoK5pbwIWq5WuVkOIF0qLoX6bxJ4YzsXaxose5O8xbxvZzzPUA6TO/VavKPYVf0i9vLtg96P91EsR+8H5E/10LeuoyXd9uDYt1FngAuzznvRRTsGuQAV66rSOcVGif755Ca1vdlz5vPYT1GGqm2LGvI96FcTfH+S9/MuexpFO+rliexTT/JVPIOcPk4xQcMPZV8298tb0M7q4Azcsy3nOL5DPIm53mU4i3dr5Y83wYc4Mp1B6nFdjHpIsPx2eMs4FLW//JeDLyFsYsML82WfytwIvDzAuu/jw3zGDRbQ7qYUdQy4D10DhD/QdoHRTU6JLcTpOHL+xm6/Pd0/vKupr/+XXeSrhB2+uKfCpzdxzqOJ3Wubudx0g9qP51x76XzNjzJ2I93EVcCn+0yzz/QR+dxd/StHpG6Wsxh7GLCWtIv7UOUcxfAbsBHSJ00G32Y7iR9aU+n+PmxZrNJdzI0DumD1Op9iHKGGJ/M2H5qnCRfQwquD1PONrySdFpiIWONiRtJLZKi3YGaTSbdAfB+0pVrSK277wL/SvrB7NdU0n6azdg2PE36sfsj5dwZ8ybSD8Krm6ZdBXyFzkEc6NzRt1uAG9RoIlcffPDB+w6ibFtPI/g8TTkfxPFmkTq1PsXgLp5MYexWrTKCTiuN/VQoxV4Oc0lXS1cylkKybDuRrkreR3m3UDUTYwmGSk3802Qe6QdnGRtmI2urU4DzVdRqG9QXtmEFg72nGFKrqtRsXS0Mej8to/g5w7zuGXD5weD30wPZozQ+B2dmldWxBTeotHCLFy9eN+iUc2ZmbsGZWWU5wJlZZXW7inoJ+UZ36NUWpEvxg7JpRLxwgOWb2QTQMcANbKXSDRGxYKKWb2YTgw9RzayyHODMrLKGFeBOneDlm9kEMJRzcGZmG4MPUc2sshzgzKyySgtwku6RdIukmyXdkE2bK+lySb/J/s5pmv/jkpZIulPSG5umvywrZ4mkL0nqKWOPpIVZmUskHVvW9pnZxFN2C+41EbFHUx+0Y4ErImI+cEX2HEkvIGX72Y00VtbJkhpjcn2VNMbV/OyxMO/KszJOIo0v9QLgndm6zKyGBn2IeiApcSvZ34Oapp8TEasi4m5S9u09JW0DzIqIayNd/TiraZk89gSWRMRdEbEaOIfiSZTNbIIrM8AFcJmkGyV9IJs2LyLuB8j+NtLObUcaDrlhaTZtO9YfKroxPa925ZpZDZU54OU+EXGfpK2AyyV1Gi651Xm16DA9r36XN7MKKa0FFxH3ZX8fBC4gHS4+kB12kv1tDEO8FNihafHtSUMtL83+Hz89r3blmlkNlRLgJM1o5G+QNAP4c+BW4ELg0Gy2Q0lJkcmmv0PSJpJ2Jl1M+Hl2GLtS0l7Z1dNDmpbJ43pgvqSdJU0jXci4sM/NM7MJqqxD1HnABVmPjinAdyLiEknXA+dKOoyUqu1tABFxm6RzgV+Txts/IiIa6ck+RMoEvxkptd7FeSsREWskHUlK0TcZOCMibith+8xsAvKtWmZWWb6TwcwqywHOzCrLAc7MKssBzswqywHOzCrLAUQTo2oAAAAPSURBVM7MKssBzswq6/8DB1BaTgTs/UkAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from upsetplot import UpSet\n", "ax_dict = UpSet(example_samples_df, subset_size='count').plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If for some reason, we want to plot the sum of a variable in each subset (eg. `index`), we can use `sum_over='index'`. This will make `upsetplot` to take sum of a given variable in each unique subset and plot that number: \n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:33.058637Z", "start_time": "2021-07-31T14:30:32.876980Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from upsetplot import UpSet\n", "ax_dict = UpSet(example_samples_df, sum_over='index', subset_size='sum').plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Convert Data to UpSet-compatible format" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can convert data from common formats to be compatible with `upsetplot`.\n", "\n", "Suppose we have three categories (the data is not scientifically true!): \n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:33.065219Z", "start_time": "2021-07-31T14:30:33.061354Z" } }, "outputs": [ { "data": { "text/plain": [ "(['Cat', 'Dog', 'Horse', 'Sheep', 'Pig', 'Cattle', 'Rhinoceros', 'Moose'],\n", " ['Horse', 'Sheep', 'Cattle', 'Moose', 'Rhinoceros'],\n", " ['Dog', 'Chicken', 'Horse', 'Sheep', 'Pig', 'Cattle', 'Duck'])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mammals = ['Cat', 'Dog', 'Horse', 'Sheep', 'Pig', 'Cattle', 'Rhinoceros', 'Moose']\n", "herbivores = ['Horse', 'Sheep', 'Cattle', 'Moose', 'Rhinoceros']\n", "domesticated = ['Dog', 'Chicken', 'Horse', 'Sheep', 'Pig', 'Cattle', 'Duck']\n", "(mammals, herbivores, domesticated)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since this format lists the entries in each category, we can use `from_contents` to construct a data frame ready for plotting.\n", "\n", "`from_contents` takes a [dictionary](https://docs.python.org/3/tutorial/datastructures.html#dictionaries) as input. The input dictionary should have categories names as key and a [list](https://docs.python.org/3/tutorial/datastructures.html) or set of category members as values: \n", "\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:33.077758Z", "start_time": "2021-07-31T14:30:33.066609Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
id
mammalherbivoredomesticated
TrueFalseFalseCat
TrueDog
TrueTrueHorse
TrueSheep
FalseTruePig
TrueTrueCattle
FalseRhinoceros
FalseMoose
FalseFalseTrueChicken
TrueDuck
\n", "
" ], "text/plain": [ " id\n", "mammal herbivore domesticated \n", "True False False Cat\n", " True Dog\n", " True True Horse\n", " True Sheep\n", " False True Pig\n", " True True Cattle\n", " False Rhinoceros\n", " False Moose\n", "False False True Chicken\n", " True Duck" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from upsetplot import from_contents\n", "animals = from_contents({'mammal': mammals, 'herbivore': herbivores, 'domesticated': domesticated})\n", "animals" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can plot: \n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:33.254138Z", "start_time": "2021-07-31T14:30:33.079234Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAR8AAAD4CAYAAADVYeLDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAemElEQVR4nO3debgcZZn38e8vIRCIhIggIDtMBgVkWGJAUCSuARFURGUUR1BBttF5B31RXBjH0ctX3nFQFARZxEHcWIIacYkJOxJACARkjATHDBFBSEIIiyH3/PFUm06nl+rqpXJO/T7X1dc5XV311NN9Tt/91FNd962IwMxs2MaU3QEzqyYHHzMrhYOPmZXCwcfMSuHgY2alcPCxUkyfPj0A30b/rSUHHyvFo48+WnYXrGQOPmZWCgcfMyuFg4+1JWm8pFsl3SVpvqR/abKOJH1Z0gJJ8yTtXUZfbWRZr+wO2DrvGeDVEbFc0jjgBkk/iYhb6tY5GJic3fYFzsl+mrXkkY+1Fcny7O647NZ4FuNw4JJs3VuASZK2GmY/beTxyMc6kjQWuB34G+CrEfGrhlW2Bv5Qd39RtmxxQzvHAccBbLHFFsyZM2dQXbYeTZs2rav1Z8+e3XT5QQcd1HIbBx/rKCKeA/aUNAm4UtLuEXFP3SpqtlmTds4DzgOYMmVKtPvHtJGlyN/Sh12WW0QsAeYA0xseWgRsW3d/G+ChIXXLRigHH2tL0ubZiAdJGwKvBX7TsNrVwHuys177AUsjYjFmbfiwyzrZCvhmNu8zBvheRPxI0gcBIuJcYCZwCLAAWAEcU1ZnbeRw8LG2ImIesFeT5efW/R7AScPsl418Puwys1I4+JhZKRx8zKwUDj5mVgoHHzMrhYOPmZXCwcfMSuHgY2alcPAxs1I4+JhZKRx8zKwUDj5mVgoHHzMrhYOPtSVpW0mzJd2XVa/4UJN1DpK0VNKd2e1TZfTVRhan1LBOVgL/HBF3SNoYuF3SzyPi3ob1ro+IQ0von41QHvlYWxGxOCLuyH5/AriPlBzerCce+VhuknYgJRZrrF4B8HJJd5FyN58aEfObbO/qFaNUq79lu8TySknozNqT9DzgWuDfIuKKhscmAquywoKHAGdFxOR27U2ZMiVuu+22wXXYeiI1K0jSWps40rIhH3ZViKTtJb02+33DbA4nz3bjgMuBSxsDD0BELKsVFoyImcA4SZv1ses2Cjn4VISkDwA/AL6eLdoGuCrHdgIuAO6LiH9vsc6W2XpImkr6v/pzP/pto5fnfKrjJGAq2XxNRPxW0gtzbHcAcDRwt6Q7s2UfB7bL2jkXeBtwgqSVwFPAO8PH89aBg091PBMRz9aO5SWtR5Oqoo0i4gbaHLdn65wNnN2PTlp1+LCrOq6V9HFgQ0mvA74P/LDkPlmFOfhUx2nAI8DdwPHAzIg4vdwuWZX5sKs63gV8JyLOry2QdGhE/KjEPlmFeeRTHV8Brpf0krplnymrM2YOPtWxEDgW+IGkI7Nl3X2TzKyPfNhVHZFdHPoq4DJJ+wJjy+6UVZdHPtWxGCAiHgXeQDrNvnupPbJKc/CpiIh4Y93vqyLiIxHhv7+Vxoddo5yk/4iID0v6IU2+VBgRh5XQLTMHnwr4VvbzzFJ7YdbAwWeUi4jbs5/X1pZJej6wbUTMK61jVnk+5q8ISXMkTZS0KXAXcJGkplepmw2Dg091bBIRy4C3AhdFxD7Aa0vuk1WYg091rCdpK+DtgC+psNI5+FTHZ4CfAgsiYq6knYDfdtooZ+kcSfqypAWS5knaewD9t1HGE84VERHfJ6XRqN1/ADgix6Z5SuccDEzObvsC52Q/zVryyMfaylk653DgkkhuASZlh3hmLXnkY7m1KZ2zNfCHuvuLsmWLG7ZfJ0rnTJs2rav1Z8+ePaLbL7KPbrl0jg1Mh9I5PwY+n6VcRdIs4KO17xg1U2bpnD6WhRkR7Q9jH0VK53jkUxGSNiDN8exA3d89Ijrm9OlUOoc00tm27v42pOKBZi15zqc6ZpDmZlYCT9bd2spTOge4GnhPdtZrP2BpRCxusa4Z4JFPlWwTEdMLbJendM5M4BBgAbACOKb37tpo5+BTHTdJemlE3N3NRjlL5wSpLphZbg4+1fEK4L2SFgLPkAJKRMQe5XbLqsrBpzoOLrsDZvU84VwREfF7YBLwpuw2KVtmVgoHn4rIrsm6FHhhdvtPSaeU2yurMh92Vcf7gH0j4kkASV8AbibV8zIbOo98qkPAc3X3n8N1u6xEHvlUx0XAryRdmd1/M+nLg2alcPCpiIj4d0lzSKfcBRwTEb8ut1dWZQ4+o5ykiRGxLMvd/GB2qz22aUQ8VlbfrNocfEa/bwOHArezZt0uZfd3KqNTZg4+o1xEHJr93LHsvpjV89muishy7HRcZjYsHvmMcpLGAxsBm2XFAmun1ycCLyqtY1Z5HvmMfseT5ntenP2s3WYAX+20saQLJf1J0j0tHj9I0lJJd2a3T/Wx7zaKeeQzykXEWcBZkk6JiCLfZr4YOBu4pM0619fmlszy8sinOlZJmlS7I+n5kk7stFFEXAf4dLz1nUc+1fGBiPjrYVZEPC7pA8DX+tD2yyXdRcrbfGpEzG+20rpSvaJbg+7nMF6Hsp6Dq1cYkuYBf5dlHUTSWGBeROyWY9sdgB9FxO5NHpsIrIqI5ZIOAc6KiMmd2nT1iuG1P4x9FKle4cOu6vgp8D1Jr5H0auAy4JpeG42IZRGxPPt9JjBO0ma9tmujnw+7quP/ks58nUD6NPoZ8I1eG5W0JfBwRISkqaQPtD/32q6Nfg4+FRERqyRdDPwyIu7Pu52ky4CDSN8TWgR8GhiXtXku8DbgBEkrgaeAd4aP5S0HB5+KkHQY8EVgfWBHSXsCn4mIw9ptFxFHdXj8bNKpeLOueM6nOj4NTAWWAETEnaTqpWalcPCpjpURsbTsTpjV+LCrOu6R9PfAWEmTgX8Ebiq5T1ZhHvlUxynAbqSCgZcBy4APl9ojqzSPfCoiIlYApwOnZ18wnBART5fcLaswj3wqQtK3JU2UNAGYD9wv6SNl98uqy8GnOnaNiGWkqhUzge2Ao8vtklWZg091jJM0jhR8ZkTEX1gzp7PZUDn4VMe5pMoVE4DrJG1PmnQ2K4UnnCtA0hjS9Vdb1y37b2Baeb2yqvPIpwIiYhVwcsOyiIiVJXXJzMGnQn4u6VRJ20ratHYru1NWXT7sqo5js58n1S1z0UArjYNPRRQtGijpQlLF0z+1yGQo4CzgEGAF8N6IuKOXvlo1+LCrIiRtJOkTks7L7k+WlKfixMXA9DaPHwxMzm7HAef02lerBgef6rgIeBbYP7u/CPhsp41yVK84HLgkm8C+BZgkaateO2ujnw+7qmPniHiHpKMAIuIpFclEvratgT/U3V+ULVvcuGKe6hXTpnV/9n/27Nldb9MNV68o3r6rVxiSbgJeA9wYEXtL2hm4LCKm5th2B1pXr/gx8PmIuCG7Pwv4aETc3q7NVtUrRlhlhhHR/jD2UaR6hUc+1XEGqVrFtpIuBQ4AjulDu4uAbevub0Oq32XWloNPRUTEzyTdDuxH+jT6UEQ82oemrwZOlvQdYF9gaUSsdchl1sjBpyIkzYqI1wA/brKs3XadqlfMJJ1mX0A61d6P0ZRVgIPPKCdpPLARKXg8n9XH4BOBF3XaPkf1imDNLy6a5eLgM/odT0qX+iLgdlYHn2XAV1ttZDZoDj6jXEScBZwl6ZSI+ErZ/TGrcfCpiIj4iqT9SbW61qtbfklpnbJKc/CpCEnfAnYG7gSeyxYH4OBjpXDwqY4ppDzO/laprRN8bVd13ANsWXYnzGo88qmOzYB7Jd1KKhwIQEQcVl6XrMocfKrjjLI7YFbPwaciIuLasvtgVs/BZ5ST9ATN63OJ9AXliUPukhng4DPqRcTGZffBrBmf7TKzUjj4mFkpHHzMrBQOPtaRpOmS7pe0QNJpTR4/SNJSSXdmt0+V0U8bWTzhbG1JGktKvfE6UsrUuZKujoh7G1a9PiLylOIxAzzysc6mAgsi4oGIeBb4DqlcjllPPPKxTpqVxtm3yXovl3QXKXn8qRExv3GFPKVzihjppW1cOsesCUlHAm+IiPdn948GpkbEKXXrTARWRcRySYcAZ0XE5HbtunTO8Nofxj6KlM7xYZd10rE0TkQsi4jl2e8zgXGSNhteF20kcvCxTuYCkyXtKGl94J2kcjl/JWnLWvVTSVNJ/1d/HnpPbUTxnI+1FRErJZ0M/BQYC1wYEfMlfTB7/FzgbcAJklYCTwHvdNIy68RzPlYKz/kMr/1h7MNzPmY2Yjj4mFkpHHzMrBQOPmZWCgcfMyuFg4+ZlcLBx8xK4eBjZqVw8DGzUjj4mFkpHHzMrBQOPmZWCgcfMyuFg491lKN6hSR9OXt8nqS9y+injSwOPtZWXfWKg4FdgaMk7dqw2sHA5Ox2HHDOUDtpI5KDj3WSp3rF4cAlkdwCTJK01bA7aiOLMxlaJ3mqVzRbZ2tgcf1K9dUrgPnA7o07G0Zyu0HvY6S3P6x9OPhYJ80y0TX+Z+ZZh4g4DzivH52ykc+HXdZJx+oVOdcxW4ODj3XSsXpFdv892Vmv/YClEbG4sSGzej7ssrZyVq+YCRwCLABWAMeU1V8bOVy9wsxK4cMuMyuFg4+ZlcLBx8xK4eBjZqVw8DGzUjj4mFkpHHzMrBRDCT4zZsy4Zhj7MbORY1gjn82GtB8zGyF82GVmpWh7bZekjfuxk8svv3xMv9oys5EjIp5o9ZhHPmZWCl/Vbuu6ccBE0hX1K4Fl2c9+EbAJsD4pAdpy4Kk+tg+wETAh29czwNI+t7818BbgBcCjwBU0ZJHs0QbAm4G/BZ4FrgVu6bXRoQSfhQsX7kX6pxmWiUPclw3GGNKbqvFvuSXpzfsQTbIldukFwOakwFbzQuBpUoK0Z3psf0PSc9igYfmWwCPAYz22vzHwZVJgqH8O/wpcDnwYeLLHfXwQOA3YtG7Z6cDdwInAXUUb9mGXrYsE7EjzDxEBk4Dte9zH5qQgMLbJY+Oz/TcGjW5sCOzQoo31gK1Iwa+o8cBVwBGs/RzWA95BGgGt38M+/hn4f6wZeGpeSsrj9NKijTv4jDzbAb/qYfuPAf/YZPmWwLd6aLefXkB6c7UzAXh+wfbHkUY47YwlBYiitqLz+2sLmge/PN4HvKzDOi8Hji7Y/ouAT3RYZ2NScCrEwada2v2j/5Hi/6h595FX3qDS7BO5n9tNoNjIYTxp5NOJKB5Aj8253vsLtn8M+f6WBwAvLrIDB5+RaSzwFeBW0tC7dphwBXAdKeXp5Gzdc4DPAT8GPpMt2x34EfBr4B+yZfUjql+y5j/UTGBP0hvlMuBmYBawW/b4x0hzD1eRqlO8APhPYE5226+L57Ye+d/wnUZHrWw0oHWH1f6mrP77drJbwX00lkdqp9MIrCmf7RqZdiZ9Mp0CfJNUtO/dpAnG3wFTgC8Bh2br/w3wJmAVKVDsDrya9E95IylY1bsceCspaG1BOiS7E/giaYLxKOBAUqA5INtmT+D1pMnaC4CzSWdEtiEFpSn9eeqjTrOyQ/3epsggo5t9FBrEOPiMTA+SzjZAGr1sR/qkuqRunfqJzqtIgafmx6Qg8TRppLRPXXuQRlBXk4LPW7PtIc0hvDv7/TrSJ3BtUnhm1h7ANNYcOW0MPI90GruTldktz//msznWaeZp8o8Gipx2f7rzKj21/xjwP6QzaZ0sJN/r3uhu4FVdrNs1B5+Rqf5Nt4p0OLSU1aOQRo2nWxtPUTfeX0z6B9+NFHw+lC1vVxxwRd2yMcBr6O5NWO9x0tmoTv5csP3HyDfv8xTFTrevyLbLc7bs8QLtB3ARnSeEAS4s0H5tu5PoPAL6NXBHkR14zmd0eII0Gnpz3bK1ShHXeSPpjbEp8Eqa//P8gHQYtwlwb7bsRuDt2e+vIL35m319fhZwfN39bk/H/pnOo5pnKPbGzbttkCbhi/ojnb+H9Cjwl4Ltnwf8tsM6v6F48FlA5+qyfyFfAGzKwWf0eD/wHuAmUqG/N7ZZ93ZScJkFfIHmb7KrgLeRDsFqPg/sTZpw/hfWDDD1PgLsla03l3RauBvPkQ4XWh2SPJk93suXDB8iBblmbawEfs+ao7luLSfVr2/2bewgfcnw4R7aX0Ka02v1tYubs8dbXluVw0dJJzaaBchHSAUkry/aeNu6XX28sPTaI444Iu/xo1m9jUjzSuuR3shLKH4418x6pMPW2uUVT9L/yx8mkZ5H7fKKx0kBtl9eRvogAfga8D0KHgq1sAVpru/T2f1jgRnkGLW1u7DUcz62rltBbyOQTlaSPsUHaUl2G5S5db+fNoD2Hwb+P6uDzw/60agPu8ysFG1HPu2GTN2YMWPGqn61ZWZrk9JJqUG+z/q9D498zKwUDj5mVgoHHzMrhYOPmZXCwcfMSuHgY2al8JcMbZ2ldG53E9I3hGsJ5JcAy6LdV/O728dU4AOk5OjPAL8ALoiIohetNra/BenSl2mk99t9wLkRUTj3cUP7tdeodn97+v8a7U3dpTSSTiO9Rr19OTMiur6Rvoae+3bmmWd2tX6vtyLPybd160ZKFPYSYI8mt12A9XtsfyPS9WvN/oeeAt7Th+dwAimgNdvHt4EN+vAavTh7TWrt1l6jF/ep/e+36P/TwPt6ad+HXbbOkTQO2ImUa7mZDYCdJPWSsvUyUhK2ZsYDF0l6U9HGJf096TqrVlkZjwK+0UP7tdeoVfvrk16jXo5uLiFdXNzMBsD5klo93pGDzxBJOkPSqUPe53slvaju/jck7VqgnT0lHVJguzmSus1iuDmdpwTWp2D1B0n7AYd1WG0M8NmC7efd9t1F/haZzej8Go2j+Gu0N3Bkp9Uo+BqBg08VvJdUiQCAiHh/RNzbevWW9gS6Dj7dyuYw8iZVL1p65ric6+2RBapuvY6UU7ufffmrLl+jokn28/ZrF0mFMlY4+AyYpNMl3S/pF6S5itoo4hZJ8yRdKen52fI5kr4k6TpJ90l6maQrJP1W0mfr2ny3pFsl3Snp65LGZreLJd0j6W5J/5QNiacAl2brblg/EpE0XdIdku6SNCtbNlXSTZJ+nf3cRdL6pOTz78jaeYekCZIulDQ3W/fwbPsNJX0ne27fJV8Vh3rrkb8CxjjVLjjqzi5drFukMsOg2x9L/pNF4woeng76Ofhs1yBJ2oeUcGkv0mt9BymR1yXAKRFxraTPkFIVfDjb7NmIOFDSh0g5U/Yhpf38naQvkepNvQM4ICL+IulrwLuA+cDWEbF7tu9JEbFE0snAqRFxW7a81rfNgfOBAyNioaTaJ+RvsmUrJb0W+FxEHCHpU8CUiDg52/5zwC8j4lhJk4BbswB7PLAiIvaQtAfd55XpyxmaDrrJHlgkT/Sg2+/2NSrymg76OTj4DNgrgSsjYgWApKtJtaAmRcS12TrfJJ1RqLk6+3k3MD8iFmfbPgBsS0pfug8wNwskGwJ/An5ImmD8CilB/M869G0/4LqIWAgQEbXSvZsA35Q0mfRP22rS9/XAYXVzWONJiewPJJXRISLmSZrXoR9ryILe0+Qri/NkZKdlujSLfMnRV5LqkhdpP8hXAWJW51XWFBHPSXqKfKPKFRGxqvNqa5lFOnzsZBUwu0D7Puwagm7fHLWE5atYM3n5KtKHhYBvRsSe2W2XiDgjIh4H/o5UJ+skOp9JUYu+/SswOxtBvYnWQUDAEXX92C4i7sse63X0kvc7No8WbP988n2yXx0R/9Nt4xHxX+QLKiuAi7ttP5P3NSr6faULyJcx8icR8WCRHTj4DNZ1wFuyeZCNSW/mJ4HHJb0yW+douvt0nQW8TdILASRtKml7SZsBYyLicuCTpFzLkHL4NkuHezPwKkk71trJlm9CKssCabK6prGdnwKn1OZcJO1V95zflS3bnfSdk249Rufcw0siolC604j4I6nmWTuLWF21o4gTaZ8hcRVwXNHnQErFuqzDOkuzD6WuRcSjpOfQ7oNkMXBykfbBwWegIuIO4LukgnuXszrZ9j8AX8wOSfZkdSXRPG3eS6oY8LNs+5+T6oJvDcyRdCfp0/Rj2SYXA+fWJpzr2nmEdEbjCkl3Zf2EVHv785JuZM2J39nArrUJZ9IIaRwwT9I92X1IFVKfl/Xto6Sqql3JDqUeJL15Gw8ZniOl9fxDt+027OPrpLmz/2rS/lXA/hGxqIf2f0uqczaTtZ/DfODNEXFpD+0HKcn9I6ydD/o50qH4fxdtP9vHRaTv+dzX8NAq0mH+/kVHPdAhgXy/zJgx47bDDz/cFSuta9l3Ziay+vKKvl02kLUv0vzPZNLE6eyI6OlN22QfO5EqyQK8MiJu6HP7Y1gdgCYBTxSc52m3jwNZPULfISJ+32ubnnC2dVr2JhpY8vUskM3JboPaxwNanYK0r4Ena3NVXfv9rrxRa/e6un30HHjAh11mVhIHHzMrhYOPmZXCwcfMSuHgY2alaHu2S/2r1T6mX22ZjWSDfh8M433WzT6iTYFBj3zMrBQOPmZWik5fMux07UguCxcu7FtbOU0c4r5scHYhpeh4Kyl51qOky0DOBxb2of0xWbubki4VCdK1d48By/vQPsB0UoL6mluAC4FLs331ajJrJv56APge6TX6XdMtuvM80vWHx9Qtq7X/814a9sjH1lVvB24iVX7YlHQV/eakCxlvBt7QY/vjgJ2BLUkpWUV6P2wMbE+6Xq4XY4DzSG/U+tQUuwJnkq6V27LHfbyZ9FocX7dsM9IFoTfTe+bJbUiXVHyBNROGTSddq/jVXhp38LFhuIfu0nlOAc6ldS6hjUgJ2Sb30KcdaJ18HVJ/i6ZpBfg4KZFcKy9m9cW8RexBSnvR6jmMJ+WKeknB9kUKnO1e46OBjxRs38HH1kmn0HlKYEPW/MTvxkTaB56aosEnb9/2Ag4quI+TaR2cazYgjYKKeD2we471TiTfa7kWB5+RbztSatazgV+RkogdRMpk+GtS1sN9SMfnN2Q/a59m7yKVkPkuKXPicaR/6htIeYNqScpnAp8HrgFuI+UKujRr/5N1fbmMlM/nVtbMBdSNCcChOddtN7JoZ1LO9caR5jy6dQh1hfw6KPIcNgDeknPdIyn2Pj8q53ovIF/Gw7U4+IwOO5FqRO1Hqrx5JOmT63TgVFLOmumkFKz/RsoZXfMS4H2kgPUpUna9V5ACSP0/4F+yNi4AvgP8H2BfUgCrHVKdSEqjeiCpYF6Rygm1yd88JtJ9gnroLptD3r7U26KLdYvM+2xCCkB5bESxEzCDfg5OqTFKPAjUyuHcx+q8K/eSRkYTga+TJlgb8zJfTzqzs5x0RvInddvuVrfezOzn/GwfD9fte2vSGaIPkrI1ki3bOVvejSfIn//4WfKl+mzUmHyrX+vWdHNmt0gKjOWkhF55Bg8rKXbmrpt+FUrj4ZHP6FBfPaA+93Mt7/MnSIdD+5LOItV/ajbmiW7ctnG9VrmlX0GqR/4aYH9gHvk/nestIX9a2RkUyxedNzg8R+d0rs3MZM3XqJ2rCrS/gvynuWeSAlC38vZrBZ2LFTTl4FMNmwAPZb+/a0D7mEjKK/wUaU7pZT209bUc6wTpjFgRS8j3hlxCseD2GOlMUSeLSOlIizinz+s1ugL4Y471vk3B7/A5+FTDfwBnkD6heqlv3s4vSCOgm0mT0HN7aOsaUi7pVgI4rYd9BCm/cbtDqifJ9+ZrpVP+6sdIk81FRiUAv2R13uxWPgncWLD9Z0n9a5dF8ibSvGIhbXM4S+pLrtwzzzyTU08daolyf8N5dDiUdPZt/+x+kL6c92XSm69X65O+uDiR1R/Ez5ICQ9GSM/XGkybh30equQZp/uV7pA+EB/uwj4NJr9Er65bNIZ39LHQ41GBnUkHLI0mT15D6fSFpVNX28LLdhaWdgk+/rmq/9ogjjihUz9mMdDZlEunyiqK1utoRqy+v6KZSZzft70gaGS4izZP02xakr0Y8Rqpc0W8TSCcRVpIubck1MGkXfHy2y0aCP9LbIVAnQcGSv120/8AA24d09vHhjmsV9yRrlxnqied8zKwUbUc+7YZM3ZgxY8aqfrVlZqODRz5mVgoHHzMrRaezXdeQ8oP0ajMGc5ailfERkeeKXDMryVBqtUu6LSKGVqt92Pszs+75sMvMSuHgY2alGFbwOW9I+ylrf2bWpaHM+ZiZNfJhl5mVwsHHzEox0OAj6UFJd0u6U9Jtg9xX3T6nS7pf0gJJpw1jn2bWvYHO+Uh6EJgSEUP5gqGksaQrb19HSl0wFzgqIu5tu6GZDd1oO+yaCiyIiAci4llSlYXDS+6TmTUx6OATwM8k3S7puI5r925r4A919xdly8xsHTPoZGIHRMRDkl4I/FzSbyLiugHur1m5FX+XwGwdNNCRT0Q8lP38E3Al6bBokBaxOlcupEL3D7VY18xKNLDgI2lCLQe0pAmkCpr3DGp/mbnAZEk7SlqflH3/6gHv08wKGORh1xbAlZJq+/l2RFwzwP0RESslnQz8lFQi5sKImD/IfZpZMb68wsxKMdpOtZvZCOHgY2alcPAxs1I4+JhZKRx8zKwUDj5mVgoHHzMrxf8C0ntCyRl1rJIAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from upsetplot import UpSet\n", "ax_dict = UpSet(animals, subset_size='count').plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, our input data may have been structured by species, allowing us to use `from_memberships`:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:33.265478Z", "start_time": "2021-07-31T14:30:33.256034Z" } }, "outputs": [ { "data": { "text/plain": [ "Domesticated Herbivore Mammal\n", "False False True 1\n", "True False True 1\n", " True True 1\n", " True 1\n", " False True 1\n", " True True 1\n", "False True True 1\n", " True 1\n", "True False False 1\n", " False 1\n", "Name: ones, dtype: int64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from upsetplot import from_memberships\n", "\n", "animal_memberships = {\n", " \"Cat\": \"Mammal\",\n", " \"Dog\": \"Mammal,Domesticated\",\n", " \"Horse\": \"Mammal,Herbivore,Domesticated\",\n", " \"Sheep\": \"Mammal,Herbivore,Domesticated\",\n", " \"Pig\": \"Mammal,Domesticated\",\n", " \"Cattle\": \"Mammal,Herbivore,Domesticated\",\n", " \"Rhinoceros\": \"Mammal,Herbivore\",\n", " \"Moose\": \"Mammal,Herbivore\",\n", " \"Chicken\": \"Domesticated\",\n", " \"Duck\": \"Domesticated\",\n", "}\n", "\n", "# Turn this into a list of lists:\n", "animal_membership_lists = [categories.split(\",\") for categories in animal_memberships.values()]\n", "\n", "animals = from_memberships(animal_membership_lists)\n", "animals" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This should produce the same plot:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:33.444009Z", "start_time": "2021-07-31T14:30:33.266781Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAR8AAAD4CAYAAADVYeLDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAeq0lEQVR4nO3de9gcZX3/8fcnBwggMXJGQDk0FfGEGAOitglKBX4UVKCKiJdIRVBQ26LlpxatbS9r5derIApiBcUiiqIENSKI4aSAEDkGPKQEa0oUEZIQEsAk398f96zPZrPPzuzsYfLsfF7XtVeenZ29597N7nfvuWfm+1VEYGY2bJOq7oCZ1ZODj5lVwsHHzCrh4GNmlXDwMbNKOPhYJQ455JAAfBv927gcfKwSjzzySNVdsIo5+JhZJRx8zKwSDj7WkaRpkn4i6S5JiyT9Y5t1JOkcSYsl3S1pvyr6ahPLlKo7YJu8p4CDImKVpKnATZK+FxG3NK1zKDAzu+0PnJf9azYuj3yso0hWZXenZrfWoxhHAhdn694CzJC08zD7aROPRz6WS9JkYCHwJ8BnIuLWllV2AX7ddH9ptmxZSzsnAScB7Ljjjlx33XWD6rL1aO7cuV2tv2DBgrbL58yZM+5zHHwsV0SsA/aVNAP4lqQXRsS9Tauo3dPatHMBcAHArFmzotMH0yaWMv+X3u2ywiJiOXAdcEjLQ0uB3Zru7wo8NKRu2QTl4GMdSdo+G/EgaQvgtcDPWla7EnhbdtTrAGBFRCzDrAPvdlmenYEvZfM+k4DLIuI7kk4GiIjzgfnAYcBiYDVwQlWdtYnDwcc6ioi7gZe2WX5+098BvGeY/bKJz7tdZlYJBx8zq4SDj5lVwsHHzCrh4GNmlXDwMbNKOPiYWSUcfMysEg4+ZlYJBx8zq4SDj5lVwsHHzCrh4GNmlXDwsY4k7SZpgaT7s+oV72uzzhxJKyTdmd3OrKKvNrE4pYblWQv8XUT8VNLWwEJJ10TEfS3r3RgRh1fQP5ugPPKxjiJiWUT8NPv7ceB+UnJ4s5545GOFSdqdlFistXoFwCsk3UXK3Xx6RCxq83xXrxhR4/1fdkosr5SEzqwzSc8Argf+JSK+2fLYdGB9VljwMODsiJjZqb1Zs2bF7bffPrgOW0+kdgVJxtchjozbkHe7akTScyW9Nvt7i2wOp8jzpgKXA5e0Bh6AiFjZKCwYEfOBqZK262PXbQQ5+NSEpHcC3wA+ly3aFbiiwPMEfAG4PyL+fZx1dsrWQ9Js0ufq9/3ot40uz/nUx3uA2WTzNRHxS0k7FHjeK4HjgXsk3Zkt+xDwnKyd84GjgVMkrQXWAG8O789bDgef+ngqIp5u7MtLmkKbqqKtIuImOuy3Z+ucC5zbj05afXi3qz6ul/QhYAtJBwNfB75dcZ+sxhx86uMM4HfAPcC7gPkR8eFqu2R15t2u+jgO+GpEfL6xQNLhEfGdCvtkNeaRT318GrhR0vObln28qs6YOfjUxxLgHcA3JB2TLevuTDKzPvJuV31EdnHonwOXStofmFx1p6y+PPKpj2UAEfEI8DrSYfYXVtojqzUHn5qIiP/T9Pf6iPhARPj/3yrj3a4RJ+k/IuL9kr5Nm5MKI+KICrpl5uBTA1/O/j2r0l6YtXDwGXERsTD79/rGMknPAnaLiLsr65jVnvf5a0LSdZKmS9oGuAu4SFLbq9TNhsHBpz6eGRErgTcCF0XEy4DXVtwnqzEHn/qYImln4K8AX1JhlXPwqY+PA98HFkfEbZL2BH6Z96SCpXMk6RxJiyXdLWm/AfTfRownnGsiIr5OSqPRuP8AcFSBpxYpnXMoMDO77Q+cl/1rNi6PfKyjgqVzjgQujuQWYEa2i2c2Lo98rLAOpXN2AX7ddH9ptmxZy/M3idI5c+fO7Wr9BQsWTOj2y2yjWy6dYwOTUzrnu8AnspSrSLoW+GDjHKN2qiyd08eyMBOi/WFso0zpHI98akLS5qQ5nt1p+n+PiNycPnmlc0gjnd2a7u9KKh5oNi7P+dTHPNLczFrgiaZbR0VK5wBXAm/LjnodAKyIiGXjrGsGeORTJ7tGxCElnlekdM584DBgMbAaOKH37tqoc/Cpjx9LelFE3NPNkwqWzglSXTCzwhx86uNVwNslLQGeIgWUiIgXV9stqysHn/o4tOoOmDXzhHNNRMSvgBnAX2a3Gdkys0o4+NREdk3WJcAO2e2/JJ1Wba+szrzbVR8nAvtHxBMAkj4J3Eyq52U2dB751IeAdU331+G6XVYhj3zq4yLgVknfyu6/nnTyoFklHHxqIiL+XdJ1pEPuAk6IiDuq7ZXVmYPPiJM0PSJWZrmbH8xujce2iYhHq+qb1ZuDz+j7CnA4sJAN63Ypu79nFZ0yc/AZcRFxePbvHlX3xayZj3bVRJZjJ3eZ2bB45DPiJE0DtgS2y4oFNg6vTweeXVnHrPY88hl97yLN9+yd/du4zQM+k/dkSRdKeljSveM8PkfSCkl3Zrcz+9h3G2Ee+Yy4iDgbOFvSaRFR5mzmLwLnAhd3WOfGxtySWVEe+dTHekkzGnckPUvSu/OeFBE3AD4cb33nkU99vDMi/ribFRGPSXon8Nk+tP0KSXeR8jafHhGL2q20qVSv6Nag+zmM96Gq1+DqFYaku4GXZFkHkTQZuDsiXlDgubsD34mIF7Z5bDqwPiJWSToMODsiZua16eoVw2t/GNsoU73Cu1318X3gMkmvkXQQcClwVa+NRsTKiFiV/T0fmCppu17btdHn3a76+HvSka9TSL9GVwP/2WujknYCfhsRIWk26Qft9722a6PPwacmImK9pC8CP4yInxd9nqRLgTmk84SWAh8FpmZtng8cDZwiaS2wBnhzeF/eCnDwqQlJRwCfAjYD9pC0L/DxiDii0/Mi4ticx88lHYo364rnfOrjo8BsYDlARNxJql5qVgkHn/pYGxErqu6EWYN3u+rjXklvASZLmgm8F/hxxX2yGvPIpz5OA15AKhh4KbASeH+lPbJa88inJiJiNfBh4MPZCYZbRcSTFXfLaswjn5qQ9BVJ0yVtBSwCfi7pA1X3y+rLwac+9omIlaSqFfOB5wDHV9slqzMHn/qYKmkqKfjMi4g/sGFOZ7OhcvCpj/NJlSu2Am6Q9FzSpLNZJTzhXAOSJpGuv9qladn/AHOr65XVnUc+NRAR64FTW5ZFRKytqEtmDj41co2k0yXtJmmbxq3qTll9eberPt6R/fuepmUuGmiVcfCpibJFAyVdSKp4+vA4mQwFnA0cBqwG3h4RP+2lr1YP3u2qCUlbSvqIpAuy+zMlFak48UXgkA6PHwrMzG4nAef12lerBwef+rgIeBo4MLu/FPjnvCcVqF5xJHBxNoF9CzBD0s69dtZGn3e76mOviHiTpGMBImKNymQi39guwK+b7i/Nli1rXbFI9Yq5c7s/+r9gwYKun9MNV68o376rVxiSfgy8BvhRROwnaS/g0oiYXeC5uzN+9YrvAp+IiJuy+9cCH4yIhZ3aHK96xQSrzDAh2h/GNspUr/DIpz4+RqpWsZukS4BXAif0od2lwG5N93cl1e8y68jBpyYi4mpJC4EDSL9G74uIR/rQ9JXAqZK+CuwPrIiIjXa5zFo5+NSEpGsj4jXAd9ss6/S8vOoV80mH2ReTDrX3YzRlNeDgM+IkTQO2JAWPZzG2Dz4deHbe8wtUrwg2PHHRrBAHn9H3LlK61GcDCxkLPiuBz4z3JLNBc/AZcRFxNnC2pNMi4tNV98eswcGnJiLi05IOJNXqmtK0/OLKOmW15uBTE5K+DOwF3AmsyxYH4OBjlXDwqY9ZpDzOPqvUNgm+tqs+7gV2qroTZg0e+dTHdsB9kn5CKhwIQEQcUV2XrM4cfOrjY1V3wKyZg09NRMT1VffBrJmDz4iT9Djt63OJdILy9CF3yQxw8Bl5EbF11X0wa8dHu8ysEg4+ZlYJBx8zq4SDj+WSdIikn0taLOmMNo/PkbRC0p3Z7cwq+mkTiyecrSNJk0mpNw4mpUy9TdKVEXFfy6o3RkSRUjxmgEc+lm82sDgiHoiIp4GvksrlmPXEIx/L0640zv5t1nuFpLtIyeNPj4hFrSsUKZ1TxkQvbePSOWZtSDoGeF1E/HV2/3hgdkSc1rTOdGB9RKySdBhwdkTM7NSuS+cMr/1hbKNM6Rzvdlme3NI4EbEyIlZlf88HpkrabnhdtInIwcfy3AbMlLSHpM2AN5PK5fyRpJ0a1U8lzSZ9rn4/9J7ahOI5H+soItZKOhX4PjAZuDAiFkk6OXv8fOBo4BRJa4E1wJudtMzyeM7HKuE5n+G1P4xteM7HzCYMBx8zq4SDj5lVwsHHzCrh4GNmlXDwMbNKOPiYWSUcfMysEg4+ZlYJBx8zq4SDj5lVwsHHzCrh4GNmlXDwsVwFqldI0jnZ43dL2q+KftrE4uBjHTVVrzgU2Ac4VtI+LasdCszMbicB5w21kzYhOfhYniLVK44ELo7kFmCGpJ2H3VGbWJzJ0PIUqV7Rbp1dgGXNKzVXrwAWAS9s3dgwktsNehsTvf1hbcPBx/K0y0TX+skssg4RcQFwQT86ZROfd7ssT271ioLrmG3Awcfy5FavyO6/LTvqdQCwIiKWtTZk1sy7XdZRweoV84HDgMXAauCEqvprE4erV5hZJbzbZWaVcPAxs0o4+JhZJRx8zKwSDj5mVgkHHzOrhIOPmVViKMFn3rx5Vw1jO2Y2cQxr5LPdkLZjZhOEd7vMrBIdr+2StHU/NnL55ZdP6ldbZjZxRMTj4z3mkY+ZVcJXtdumbiownXRF/VpgZfZvvwh4JrAZKQHaKmBNH9sH2BLYKtvWU8CKPre/C/AGYFvgEeCbtGSR7NHmwOuBPwWeBq4Hbum10aEEnyVLlryU9KEZlulD3JYNxiTSl6r1/3In0pf3IdpkS+zStsD2pMDWsAPwJClB2lM9tr8F6TVs3rJ8J+B3wKM9tr81cA4pMDS/hn8CLgfeDzzR4zZOBs4Atmla9mHgHuDdwF1lG/Zul22KBOxB+x8RATOA5/a4je1JQWBym8emZdtvDRrd2ALYfZw2pgA7k4JfWdOAK4Cj2Pg1TAHeRBoBbdbDNv4O+Dc2DDwNLyLlcXpR2cYdfCaW1qH0ccBZXbbR6TnXdN2jwdiW9OXqZCvgWSXbn0oa4XQymRQgytqZ/O/XjrQPfkWcCLw8Z51XAMeXbP/ZwEdy1tmaFJxKcfCpl7wP+sFD2EYRRYNKu1/kfj5vK8qNHKaRRj55RPkA+o6C6/11yfZPoNj/5SuBvctswMFndGwL/BdwXXY7IFv+f0nzAlcwVjliV9KQfCFpf76hMbL6IvAXTcvPA44g7UJ8ljTZeBPw6uzx44CLga8B80gTrJ/J+nETKcVqUVMo/oXPGx2NZ8sBrTus9rchFWgs4gUlt9FaHqmTvBFYWz7aNbFsAfyo6f6zSPvdkIa/55ICw66kYDMre2xfUjB5khQoXkb6cK0mHbn4PnBHU7vfAN4IXE3aRZkD/A1jNbcOIH345wEvzZbNJg3zHwM+CtwAvId0JGkBKRCtLvvCR1i7skP9fk6ZQUY32yg1iHHwmVjWkIa5Dccx9uWfy4bD362BZ2R/zycFnoYfMnak5UpS0GgOPtcAnyKNQF5LCnhPZuudn63zS1KhwD9pavOx7O+DSKOd92b3p5EC4i8KvMa12a3IZ/PpAuu08yTFRwNlDrs/mb9KT+0/Cvwv6UhaniWk0we6dQ/w512s2zUHn9ExCXgN7T/4rSOO1kPUrfefAm4kBZ6jSCMh6Pxr2LwNAW8lBagyHiMdjcrz+5LtP0qxeZ81lDvcvjp7XpGjZY/lr7KRAC4if0IY4MIS7Tee9x7yR0B3AD8tswHP+YyOa4F3Nd3vdAj0INIu2zTgcNqfMHY5KYAcCPwgW/Yj0iFcSCOeXWkfYFr78uKcvrf6Pfmjmqco98Ut+twAflOyfbLn5p2H9Ajwh5LtX0B+cP8Z5YPPYvKry/6BYgGwLQef0fEB0i7YzaRCfyd2WPdm0gfrR6R5mzvarHMtKfAsYOwL8nnSZ+YW0qT0ybQPEp8kzRXdAtxK9x/QdaTdhfF2SZ7IHu/lJMOHSEGuXRtrgV/R2xzVKtJuabuzsYN0kuFve2h/OemH49ZxHr85e3zca6sK+CDwadoHyN+RCkjeWLbxjnW7+nhh6fVHHXVU0f1Hs2Zbkk42nEL6Ii+nuzmVPFNIo8DG5RVP0P/LH2aQXkfj8orHSAG2X15O+rGAdDTyMkruCo1jR9Io+KPZ/XeQfrRyR22dLiz1nI9t6lYz2KNka0m/4oO0PLsNym1Nf58x7lrl/Rb4f4wFn290WLcw73aZWSU6jnw6DZm6MW/evPX9asvMNialg1KD/J71exse+ZhZJRx8zKwSDj5mVgkHHzOrhIOPmVXCwcfMKuGTDG2TpXRs95mkM4QbCeSXAyuj06n53W1jNvBOUnL0p0jXsX0hIspetNra/o6khF5zSd+3+4HzI6J07uOW9hvvUeP+c+n/e7QfTdfqSTqD9B71dnJmRHR9I52GXvh21llndbV+r7cyr8m3TetGuuj1+aSLUltvzwM267H9LUk5j9p9htYAb+vDaziFFNDabeMrwOZ9eI/2zt6TRruN92jvPrX/9XH6/yRwYi/te7fLNjmSpgJ7ki5ObWdzYE9JvaRsvRQ4cpzHpgEXSfrLso1LegvpOqvxsjIeC/xnD+033qPx2t+M9B71sndzMXD0OI9tDnxe0niP53LwGRBJ6yTdKWmRpLsk/a2kob/fkvaVdFjT/SOyYXOZtj5U4jlvl3Rul0/bnvwpgc0oWf1B0gGktLCdTAL+uWT7RZ/7Vkn7lNkGsB3579FUyr9H+wHH5K1GyfcIHHwGaU1E7BsRLyAlZj+MsQvzhmlfmnIoR8SVEfGvJdvqOvh0K5vDKJpUvWzpmZPyVwHgxVmg6tbBpNI7/ezLH3X5HpVNsl+0X8+TVCpjhYPPEETEw6T/zFOVTJN0kaR7JN0haS78cZRwhaRvS1oi6dRsxHSHpFskbZOtt5ekqyQtlHSjpL2z5cdIujcbad0gaTPg48CbslHYm5pHIpJ2lPStbP27JB2YLb8ia3uRpJOyZf8KbJG1c0m27K2SfpIt+1xjN0jSCZJ+Iel6Nkz7WsQUilfAmKrGBUfdeV4X65apzDDo9idT/GDR1JK7p4N+DQ4+wxIRD5De7x1I6SmJiBeR9v2/JKlRieGFwFtICdn/BVgdEY0kYW/L1rkAOC0iXgacTppbADgTeF1EvAQ4IiKezpZ9LRuFfa2lW+cA12fr7wcsypa/I2t7FvBeSdtGxBmMjeaOk/R8UlbDV0bEvqT8NMdJ2hn4R1LQORjodreiL0docnSTPbBMnuhBt9/te1TmPR30a/Ch9iFr/Eq/ipQhjoj4maRfkQ71AiyIdNXw45JWAN/Olt9D2g14BinD4NebfvQbuYJ/BHxR0mWk0jh5DiILaBGxjrEkWu+V9Ibs791IlSpaDz2/hlQF47asH1sAD5OqYlwX2WFYSV9rem25ImKtpCcpVhbnicgOy3TpWoolR19Lqu5Rpv2gWAWIa/NX2VBErJO0hmK1wVZHxPput0HqV5E6butJ2S675pHPkEjakzQ6eJjOH8rmhOXrm+6vJ/1YTAKWZyOQxu35ABFxMill6W7AnZK6nhORNIeUOP4V2YjoDtoHAgFfaurD8yLiY9ljvY5eip5j80jJ9j9PsV/2KyPif7ttPCJ+QbGgspqUjraMou9R2fOVvkCxjJHfi4gHy2zAwWcIJG1PKjlzbvZLfQOp7A2S/hR4DvDzIm1FxEpgiaRjsudL0kuyv/eKiFsj4kzSF3M3Ug7f8dLhXks6FwVJkyVNJ52w9lhErM7mkponXP+QHeJtPPdoSTtkz98mO8HtVmCOpG2zdfOOmLTzKPm5h5dHRKl0pxHxG+C0nNWWAu8r037m3XTOkLgeOKnsayClYl2Zs86KiCiVZD8iHiG9hk4/JMuAU8u0Dw4+g9SYnF1EOmv2atJcCKQ5msmS7iFV+Xx7RHRTouU44ERJd5HmaRrnq3wqm8S+lxTg7iINifdpTDi3tPM+YG7Wj4Wk6pZXAVMk3Q38ExtWtrgAuFvSJRFxH2mUdXW27jXAzhGxDPgYaY7qB5TIJZwF6AdJX97WXYZ1pLSev+623ZZtfI40Z9VaS2wd6eTDAyNiaQ/t/5JU52w+G7+GRcDrI+KSHtoPUpL737FxPujGCPt/yrafbeMi0nk+97c8tJ40HXBg2VEP5CSQ75d58+bdfuSRR87KX9NsQ9k5M9MZu7yib5cNZO2LNP8zkzRxuiAievrSttnGnsB/Z3dfHRE39bn9SYwFoBnA4yXneTpt488Ym//aPSJ+1WubnnC2TVr2JRpY8vUskF2X3Qa1jQc0loK0r4Ena3N9U/v9rrzRaPeGpm30HHjAu11mVhEHHzOrhIOPmVXCwcfMKuHgY2aV6Hi0S/2r1T6pX22ZTWSD/h4M43vWzTaiQ4FBj3zMrBIOPmZWibyTDPOuHSlkyZIlfWuroOlD3JYNzvNIicvfSEqe9QjpcpTPA0v60P6krN1tSFn/AniCdG3Zqj60D3AIKUF9wy3AhcAl2bZ6NZMNE389AFxGeo/+u+0zuvMM4HjghKZljfav6aVhj3xsU/VXwI9JlR+2IV1Fvz3pQsabgdf12P5UYC9gJ1JKVpG+D1sDzwV27rH9SaRr4S5jw9QU+wBnka6526nHbbye9F68q2nZdqQLQm+mKYNlSbuSLqn4JBsmDDsEuBz4TC+NO/iMhpWkD3rDZNLI4LJqurORe+kunecsUhaA8RLIb0lKbj6zhz7tzvjJ1yH1t2yaVkgpZ9/c4fG9SaO4sl5MSnsx3muYBnyJVAGkDJE+P53e4+OBD5Rs38FnRDxB+kVt5N05CHiouu707DTypwS2YMNf/G5Mp3PgaSgbfIr27aXAnJLbOJXxg3PD5qRRUBl/QcqqmefdFHsvN+LgMzquYWxX5GhSvaWGl2WP35T92/g1O45UQuZrpEyJJ5E+1DeR8vU0kpTPBz5BSrdxOynl6iWkRGP/0LSdS0mpPH4CvL3k69gKOLzgup1GFp3MKLjeVNKcR7cOo6mQX44yr2Fz4A25ayXHUO57fmzB9balWMbDjTj4jI5vkILO5qRfrNubHvsFaT/9VaS80M1VNJ4PnEj6BT6TlF3vVaQA0vwB/EPWxheArwJ/S0qZehxju1TvBv4su51CucoJjcnfIqZTLJVoq26yORTtS7Mdu1i3zLzPMxlLnZtnS8odgBn0a3BKjRGyiJQR8RhS4rJm04HPkSZYgw2/UDeSjuysIs0dfS9bfh8puVjD/Kbt3E9K6AUp6dcupCNEJwONQnu7ZNt7tMvX8TjF8x8/TbFUn61ak2/1a92Gbo7slkmBsYqU0KvI4GEt5Y7cddOvUmk8PPIZLfNJRdy+3rL8I6Tdof1JR5GafzXzcka3rre+zXOmkEZLc0mJ5Q8E7qb4r3Oz5RRP2j6PcvmiiwaHdeSnc21nPhu+R51cUaL91RQ/zD2fFIC6VbRfq9n4x64QB5/R8mXSYdH7WpY/k7EJ6OMGtO3ppLzCa0hzSi/voa3P5q9CkI6IlbGcYl/I5ZQLbo9S7EjjUsaqk3TrvD6v1+qbwG8KrPcVSp7D5+AzWh6i/YftP0h5la+meEG+bv2ANAK6mTQJfVsPbV0F/FuHxwM4o4dtBCm/caddqico9uUbzwdJ82bjeZQ02VxmVALwQ1KO7U7+gVROqYynSf3rlEXyx8CHS7bfOYezpL7kyj3rrLM4/fTT+9FUUT7DeTQcTjr6dmB2P0gn551D+vL1ajPSiYvTGfshfpoUGMqWnGk2jTQJfyKpkgik+ZfLSD8ID/ZhG4eS3qNXNy27DjiXkrtDLfYC3k+aS9wyW/Yg6Szt88jZvex0YWle8OnXVe3XH3XUUaXqOZuRjqbMIF1eUbZWVydi7PKKbip1dtP+HqSR4VLSPEm/7Ug6NeJRUuWKftuKdBBhLekE1kIDk07Bx0e7bCL4Db3tAuUJSpb87aL9BwbYPqSjj7/NXau8J9i4zFBPPOdjZpXoOPLpNGTqxrx589b3qy0zGw0e+ZhZJRx8zKwSeUe7riLlB+nVdgzmKMV4pkVEkStyzawiQ6nVLun2iBharfZhb8/MuufdLjOrhIOPmVViWMHngvxVJvT2zKxLQ5nzMTNr5d0uM6uEg4+ZVWKgwUfSg5LukXSnpNvzn9GXbR4i6eeSFks6YxjbNLPuDXTOR9KDwKyIGMoJhpImk668PZiUuuA24NiIaM3sZ2YVG7XdrtnA4oh4ICKeJlVZOLLiPplZG4MOPgFcLWmhpJNy1+7dLsCvm+4vzZaZ2SZm0MnEXhkRD0naAbhG0s8i4oYBbq9duRWfS2C2CRroyCciHsr+fRj4Fmm3aJCWMpYrF1Kh+4lcNthsZA0s+EjaqpEDWtJWpNrP9w5qe5nbgJmS9pC0GSn7/pUD3qaZlTDI3a4dgW9JamznKxFx1QC3R0SslXQq8H1SiZgLI2LRILdpZuX48gozq8SoHWo3swnCwcfMKuHgY2aVcPAxs0o4+JhZJRx8zKwSDj5mVon/DyQJVp0crLHlAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from upsetplot import UpSet\n", "ax_dict = UpSet(animals, subset_size='count').plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## When category membership is indicated in DataFrame columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look at a `movies` dataset like that used in the [original publication by Alexander Lex et al.](https://caleydo.org/publications/2014_infovis_upset/).\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:33.622764Z", "start_time": "2021-07-31T14:30:33.445565Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
RankTitleGenreDescriptionDirectorActorsYearRuntime (Minutes)RatingVotesRevenue (Millions)Metascore
01Guardians of the GalaxyAction,Adventure,Sci-FiA group of intergalactic criminals are forced ...James GunnChris Pratt, Vin Diesel, Bradley Cooper, Zoe S...20141218.1757074333.1376
12PrometheusAdventure,Mystery,Sci-FiFollowing clues to the origin of mankind, a te...Ridley ScottNoomi Rapace, Logan Marshall-Green, Michael Fa...20121247.0485820126.4665
23SplitHorror,ThrillerThree girls are kidnapped by a man with a diag...M. Night ShyamalanJames McAvoy, Anya Taylor-Joy, Haley Lu Richar...20161177.3157606138.1262
34SingAnimation,Comedy,FamilyIn a city of humanoid animals, a hustling thea...Christophe LourdeletMatthew McConaughey,Reese Witherspoon, Seth Ma...20161087.260545270.3259
45Suicide SquadAction,Adventure,FantasyA secret government agency recruits some of th...David AyerWill Smith, Jared Leto, Margot Robbie, Viola D...20161236.2393727325.0240
\n", "
" ], "text/plain": [ " Rank Title Genre \\\n", "0 1 Guardians of the Galaxy Action,Adventure,Sci-Fi \n", "1 2 Prometheus Adventure,Mystery,Sci-Fi \n", "2 3 Split Horror,Thriller \n", "3 4 Sing Animation,Comedy,Family \n", "4 5 Suicide Squad Action,Adventure,Fantasy \n", "\n", " Description Director \\\n", "0 A group of intergalactic criminals are forced ... James Gunn \n", "1 Following clues to the origin of mankind, a te... Ridley Scott \n", "2 Three girls are kidnapped by a man with a diag... M. Night Shyamalan \n", "3 In a city of humanoid animals, a hustling thea... Christophe Lourdelet \n", "4 A secret government agency recruits some of th... David Ayer \n", "\n", " Actors Year Runtime (Minutes) \\\n", "0 Chris Pratt, Vin Diesel, Bradley Cooper, Zoe S... 2014 121 \n", "1 Noomi Rapace, Logan Marshall-Green, Michael Fa... 2012 124 \n", "2 James McAvoy, Anya Taylor-Joy, Haley Lu Richar... 2016 117 \n", "3 Matthew McConaughey,Reese Witherspoon, Seth Ma... 2016 108 \n", "4 Will Smith, Jared Leto, Margot Robbie, Viola D... 2016 123 \n", "\n", " Rating Votes Revenue (Millions) Metascore \n", "0 8.1 757074 333.13 76 \n", "1 7.0 485820 126.46 65 \n", "2 7.3 157606 138.12 62 \n", "3 7.2 60545 270.32 59 \n", "4 6.2 393727 325.02 40 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "movies = pd.read_csv(\"https://raw.githubusercontent.com/peetck/IMDB-Top1000-Movies/master/IMDB-Movie-Data.csv\")\n", "movies.head()" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2021-07-29T12:58:20.800787Z", "start_time": "2021-07-29T12:58:20.797460Z" } }, "source": [ "Here Genre category membership is represented with a comma-separated Genre column.\n", "\n", "`from_memberships` is our best option:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:33.721513Z", "start_time": "2021-07-31T14:30:33.625121Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
RankTitleGenreDescriptionDirectorActorsYearRuntime (Minutes)RatingVotesRevenue (Millions)Metascore
ActionAdventureAnimationBiographyComedyCrimeDramaFamilyFantasyHistoryHorrorMusicMusicalMysteryRomanceSci-FiSportThrillerWarWestern
TrueTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalseFalseFalseFalse1Guardians of the GalaxyAction,Adventure,Sci-FiA group of intergalactic criminals are forced ...James GunnChris Pratt, Vin Diesel, Bradley Cooper, Zoe S...20141218.1757074333.1376
FalseTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalseTrueFalseFalseFalseFalse2PrometheusAdventure,Mystery,Sci-FiFollowing clues to the origin of mankind, a te...Ridley ScottNoomi Rapace, Logan Marshall-Green, Michael Fa...20121247.0485820126.4665
FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalseFalseFalseFalseFalseFalseTrueFalseFalse3SplitHorror,ThrillerThree girls are kidnapped by a man with a diag...M. Night ShyamalanJames McAvoy, Anya Taylor-Joy, Haley Lu Richar...20161177.3157606138.1262
TrueFalseTrueFalseFalseTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse4SingAnimation,Comedy,FamilyIn a city of humanoid animals, a hustling thea...Christophe LourdeletMatthew McConaughey,Reese Witherspoon, Seth Ma...20161087.260545270.3259
TrueTrueFalseFalseFalseFalseFalseFalseTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse5Suicide SquadAction,Adventure,FantasyA secret government agency recruits some of th...David AyerWill Smith, Jared Leto, Margot Robbie, Viola D...20161236.2393727325.0240
................................................................................................
FalseFalseFalseFalseFalseTrueTrueFalseFalseFalseFalseFalseFalseTrueFalseFalseFalseFalseFalseFalse996Secret in Their EyesCrime,Drama,MysteryA tight-knit team of rising investigators, alo...Billy RayChiwetel Ejiofor, Nicole Kidman, Julia Roberts...20151116.2275850.0045
FalseFalseFalseFalseFalseTrueFalseFalseFalseFalseFalseFalseFalseFalseFalse997Hostel: Part IIHorrorThree American college students studying abroa...Eli RothLauren German, Heather Matarazzo, Bijou Philli...2007945.57315217.5446
TrueFalseFalseFalseFalseTrueFalseFalseTrueFalseFalseFalseFalseFalse998Step Up 2: The StreetsDrama,Music,RomanceRomantic sparks occur between two dance studen...Jon M. ChuRobert Hoffman, Briana Evigan, Cassie Ventura,...2008986.27069958.0150
TrueFalseFalseTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse999Search PartyAdventure,ComedyA pair of friends embark on a mission to reuni...Scot ArmstrongAdam Pally, T.J. Miller, Thomas Middleditch,Sh...2014935.648810.0022
FalseFalseFalseTrueFalseFalseTrueTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse1000Nine LivesComedy,Family,FantasyA stuffy businessman finds himself trapped ins...Barry SonnenfeldKevin Spacey, Jennifer Garner, Robbie Amell,Ch...2016875.31243519.6411
\n", "

1000 rows × 12 columns

\n", "
" ], "text/plain": [ " Rank \\\n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False 1 \n", "False True False False False False False False False False False False False True False True False False False False 2 \n", " False False False False False False False False False True False False False False False False True False False 3 \n", " True False True False False True False False False False False False False False False False False False 4 \n", "True True False False False False False False True False False False False False False False False False False False 5 \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False 996 \n", " False False False False False True False False False False False False False False False 997 \n", " True False False False False True False False True False False False False False 998 \n", " True False False True False False False False False False False False False False False False False False False 999 \n", " False False False True False False True True False False False False False False False False False False False 1000 \n", "\n", " Title \\\n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False Guardians of the Galaxy \n", "False True False False False False False False False False False False False True False True False False False False Prometheus \n", " False False False False False False False False False True False False False False False False True False False Split \n", " True False True False False True False False False False False False False False False False False False Sing \n", "True True False False False False False False True False False False False False False False False False False False Suicide Squad \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False Secret in Their Eyes \n", " False False False False False True False False False False False False False False False Hostel: Part II \n", " True False False False False True False False True False False False False False Step Up 2: The Streets \n", " True False False True False False False False False False False False False False False False False False False Search Party \n", " False False False True False False True True False False False False False False False False False False False Nine Lives \n", "\n", " Genre \\\n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False Action,Adventure,Sci-Fi \n", "False True False False False False False False False False False False False True False True False False False False Adventure,Mystery,Sci-Fi \n", " False False False False False False False False False True False False False False False False True False False Horror,Thriller \n", " True False True False False True False False False False False False False False False False False False Animation,Comedy,Family \n", "True True False False False False False False True False False False False False False False False False False False Action,Adventure,Fantasy \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False Crime,Drama,Mystery \n", " False False False False False True False False False False False False False False False Horror \n", " True False False False False True False False True False False False False False Drama,Music,Romance \n", " True False False True False False False False False False False False False False False False False False False Adventure,Comedy \n", " False False False True False False True True False False False False False False False False False False False Comedy,Family,Fantasy \n", "\n", " Description \\\n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False A group of intergalactic criminals are forced ... \n", "False True False False False False False False False False False False False True False True False False False False Following clues to the origin of mankind, a te... \n", " False False False False False False False False False True False False False False False False True False False Three girls are kidnapped by a man with a diag... \n", " True False True False False True False False False False False False False False False False False False In a city of humanoid animals, a hustling thea... \n", "True True False False False False False False True False False False False False False False False False False False A secret government agency recruits some of th... \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False A tight-knit team of rising investigators, alo... \n", " False False False False False True False False False False False False False False False Three American college students studying abroa... \n", " True False False False False True False False True False False False False False Romantic sparks occur between two dance studen... \n", " True False False True False False False False False False False False False False False False False False False A pair of friends embark on a mission to reuni... \n", " False False False True False False True True False False False False False False False False False False False A stuffy businessman finds himself trapped ins... \n", "\n", " Director \\\n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False James Gunn \n", "False True False False False False False False False False False False False True False True False False False False Ridley Scott \n", " False False False False False False False False False True False False False False False False True False False M. Night Shyamalan \n", " True False True False False True False False False False False False False False False False False False Christophe Lourdelet \n", "True True False False False False False False True False False False False False False False False False False False David Ayer \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False Billy Ray \n", " False False False False False True False False False False False False False False False Eli Roth \n", " True False False False False True False False True False False False False False Jon M. Chu \n", " True False False True False False False False False False False False False False False False False False False Scot Armstrong \n", " False False False True False False True True False False False False False False False False False False False Barry Sonnenfeld \n", "\n", " Actors \\\n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False Chris Pratt, Vin Diesel, Bradley Cooper, Zoe S... \n", "False True False False False False False False False False False False False True False True False False False False Noomi Rapace, Logan Marshall-Green, Michael Fa... \n", " False False False False False False False False False True False False False False False False True False False James McAvoy, Anya Taylor-Joy, Haley Lu Richar... \n", " True False True False False True False False False False False False False False False False False False Matthew McConaughey,Reese Witherspoon, Seth Ma... \n", "True True False False False False False False True False False False False False False False False False False False Will Smith, Jared Leto, Margot Robbie, Viola D... \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False Chiwetel Ejiofor, Nicole Kidman, Julia Roberts... \n", " False False False False False True False False False False False False False False False Lauren German, Heather Matarazzo, Bijou Philli... \n", " True False False False False True False False True False False False False False Robert Hoffman, Briana Evigan, Cassie Ventura,... \n", " True False False True False False False False False False False False False False False False False False False Adam Pally, T.J. Miller, Thomas Middleditch,Sh... \n", " False False False True False False True True False False False False False False False False False False False Kevin Spacey, Jennifer Garner, Robbie Amell,Ch... \n", "\n", " Year \\\n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False 2014 \n", "False True False False False False False False False False False False False True False True False False False False 2012 \n", " False False False False False False False False False True False False False False False False True False False 2016 \n", " True False True False False True False False False False False False False False False False False False 2016 \n", "True True False False False False False False True False False False False False False False False False False False 2016 \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False 2015 \n", " False False False False False True False False False False False False False False False 2007 \n", " True False False False False True False False True False False False False False 2008 \n", " True False False True False False False False False False False False False False False False False False False 2014 \n", " False False False True False False True True False False False False False False False False False False False 2016 \n", "\n", " Runtime (Minutes) \\\n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False 121 \n", "False True False False False False False False False False False False False True False True False False False False 124 \n", " False False False False False False False False False True False False False False False False True False False 117 \n", " True False True False False True False False False False False False False False False False False False 108 \n", "True True False False False False False False True False False False False False False False False False False False 123 \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False 111 \n", " False False False False False True False False False False False False False False False 94 \n", " True False False False False True False False True False False False False False 98 \n", " True False False True False False False False False False False False False False False False False False False 93 \n", " False False False True False False True True False False False False False False False False False False False 87 \n", "\n", " Rating \\\n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False 8.1 \n", "False True False False False False False False False False False False False True False True False False False False 7.0 \n", " False False False False False False False False False True False False False False False False True False False 7.3 \n", " True False True False False True False False False False False False False False False False False False 7.2 \n", "True True False False False False False False True False False False False False False False False False False False 6.2 \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False 6.2 \n", " False False False False False True False False False False False False False False False 5.5 \n", " True False False False False True False False True False False False False False 6.2 \n", " True False False True False False False False False False False False False False False False False False False 5.6 \n", " False False False True False False True True False False False False False False False False False False False 5.3 \n", "\n", " Votes \\\n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False 757074 \n", "False True False False False False False False False False False False False True False True False False False False 485820 \n", " False False False False False False False False False True False False False False False False True False False 157606 \n", " True False True False False True False False False False False False False False False False False False 60545 \n", "True True False False False False False False True False False False False False False False False False False False 393727 \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False 27585 \n", " False False False False False True False False False False False False False False False 73152 \n", " True False False False False True False False True False False False False False 70699 \n", " True False False True False False False False False False False False False False False False False False False 4881 \n", " False False False True False False True True False False False False False False False False False False False 12435 \n", "\n", " Revenue (Millions) \\\n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False 333.13 \n", "False True False False False False False False False False False False False True False True False False False False 126.46 \n", " False False False False False False False False False True False False False False False False True False False 138.12 \n", " True False True False False True False False False False False False False False False False False False 270.32 \n", "True True False False False False False False True False False False False False False False False False False False 325.02 \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False 0.00 \n", " False False False False False True False False False False False False False False False 17.54 \n", " True False False False False True False False True False False False False False 58.01 \n", " True False False True False False False False False False False False False False False False False False False 0.00 \n", " False False False True False False True True False False False False False False False False False False False 19.64 \n", "\n", " Metascore \n", "Action Adventure Animation Biography Comedy Crime Drama Family Fantasy History Horror Music Musical Mystery Romance Sci-Fi Sport Thriller War Western \n", "True True False False False False False False False False False False False False False True False False False False 76 \n", "False True False False False False False False False False False False False True False True False False False False 65 \n", " False False False False False False False False False True False False False False False False True False False 62 \n", " True False True False False True False False False False False False False False False False False False 59 \n", "True True False False False False False False True False False False False False False False False False False False 40 \n", "... ... \n", "False False False False False True True False False False False False False True False False False False False False 45 \n", " False False False False False True False False False False False False False False False 46 \n", " True False False False False True False False True False False False False False 50 \n", " True False False True False False False False False False False False False False False False False False False 22 \n", " False False False True False False True True False False False False False False False False False False False 11 \n", "\n", "[1000 rows x 12 columns]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "movies_by_genre = from_memberships(movies.Genre.str.split(','), data=movies)\n", "movies_by_genre" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:34.400949Z", "start_time": "2021-07-31T14:30:33.722972Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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fyy+Pxb4BqrJCQF+GfhR4BfK/u55fkWd8Yb6pZ8Gfrgsy9/pqfxtwOcBbwI+v375B+uMD/eUsQd4HfCVwKvrl/8R8Nay+iHZPjKuBb4G+N76pd8B3gH8VF91Y47vd1P5fteAvn+KysWiiSOblr+NyvObqLxD/773suH7VfXLffveQdVGTcr7WIZrzycTA95B9SN6pwdoz++rX7qN4drzyY+UPI/h2vOP1C9fT//tub5Xl19QXX/07nvtJqAUERERERERERGRzaUoihKgHOiHYoYuf0wZIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiJyJWN5fmwMGWPYBzPyKd+MvDLGsA9bNWNbH4WIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiISL44AaWIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjIyHECShEREREREREREREREREREREREREREREREREREREREREREREREREREZGR4wSUIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiPHCShFRERERERERERERERERERERERERERERERERERERERERERERERERERERo4TUIqIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiMHCegFBERERERERERERERERERERERERERERERERERERERERERERERERERERk5O7oWUBTFgWPHjm0riuJAHxskIiIiIiIiIiIi68HQY4opxizHkiEiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIlcylufHxpAxhn0wI5/yzcgrYwz7kGNGWZanF723rZ/NEREREREREREREREREREREREREREREREREREREREREREREREREREREZFccQJKGZJtDP8ZS5GxHSgSZAxJkSBD380yhkTfcfQdQ9/NMoZE33H0HUPfzTKGRN9x9B1D380yhkTfcfQd4yBwZOCMI8Dgv7Aj2WD9jmF7HkffMfTdLGNI9B1H3zH03SxjSPQdR98x9N0sY0j0HUffMfTdLGNI9B1H3zH03SxjSPQdR98x9N0sY0j0HUffMfTdLGNIxuQ7hYsx+B5D3dN3DH3H0XcMfTfLGBJ9x9F3DH03yxgSfcfRdwx9N8sY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vptl6DuPDH3H0HezDH3nkaHvGPpulqHvPDL0HUPfzTL0nUeGvmPou1mGvvPI0HcMfTfL0HceGfqOoe9mGfrOI0PfMfTdLEPfeWToO4a+m2XoO48MfcfQd7MMfeeRoe8Y+m6Woe88MvQdI5XvkuFd6Hs1+m6Woe9Yxlb3PXkO52r6+1HERRmHGc7HGJ4f20E1MdaQGZPjdJR+JhFblrHVnx8bQ8YY9sGMfMo3I6+MMexDthnLJqDcsegNkR4YsuOSMmPITl6qjDJBhr7zydB3HH3H0Hc+GfqOo+8Y+s4nQ99x9B1D3/lk6DuOvvNgyC+JJU+s3zFsz+PoO4a+88nQdxx9x9B3Phn6jqPvGPrOJ0PfcfQdQ9/5ZOg7jr5j6DufDH3H0XcMfeeToe84+o6h73wy9B1H3zH0nU+GvuPoO4a+88nQdxx9x9B3Phn6jqPvGPrOJ0PfcfQdQ9/5ZOg7jr5j6LsZQ00+OU2K4zUUKZ4fG2pCyM3OEhERGQ3bVi8iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIluZoiy7T0p91113vf81r3nNy3rYHhEREREREREREVlAURQlQFmWhRmbV/6YMkRERERERERERERERERERERERERERERERES2OmN51seMPMo3I6+MMeyDGfmUb0ZeGWPYh62asa2PQkREREREREREREREREREREREREREREREREREREREREREREREREREREQkX5yAUkRERERERERERERERERERERERERERERERERERERERERERERERERERGTkOAGliIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIyMhxAkoRERERERERERERERERERERERERERERERERERERERERERERERERERGRkeMElCIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjxwkoRUREREREREREREREREREREREREREREREREREREREREREREREREREREaOE1CKiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjJwdm70BqSmKoizLstjs7RgzRVFcBVwN7K9fegY4Xpbl0z1m7K8zrqpfOgM8UZblMz2VXwCHgKPALuAycIpqPy70lLEd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ERERERERERERERERERERERERERGZFA5AKSIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjJxUs65dyE33njjW2644YbrV7A8IiIiIiIiIiIiKyellAFyzsmM6WdMYR3GyhARERERERERERERERERERERERERERERqQWfNzBjJ5VvRl0ZU1gHM+op34y6MqawDmbUU74ZdWVMYR12asauVRQiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIvXiAJQiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiE8cBKEVEREREREREREREREREREREREREREREREREREREREREREREREREREQmjgNQioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiEwcB6AUERERERERERERERERERERERERERERERERERERERERERERERERERERmTgOQCkiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIycfac7QWQaZJSOhc40P55Muf84AAZ+4Hz2j8fyDk/vOLyE3A+cA5wGrgv5/zYijN2AQdp6uIp4ETO+fSKM/a0GbuAR4D7c855xRn6jmXoO54xNd+PtRn63j5jKr4PAbvR97IMfccy9B0rX9/xDH3HMvQdz9B3LGMqvg8A57Z/DuF7D/DJwDXAA8D/yDm/b8UZuzb9+zDD+Z79+yDD+Z79e/+Avh/PG7B+z/7eM1D9nv1b34szhq7ftufxjCm05/qOZ0zF90FgL/pelqHvWMYYvvfStFO7gEdyzvetsvw2Q9+xjKn4Pg/Y3/45hu/7c86PrLh8fccz9B3L0Hc8Q9+xDH3Hytd3PEPfsQx9xzMO0Fwvyeh7UYa+Y+XrO56h71iGvuMZU/C9u83Q9/KMsX2fyDmfWnHGVt8nBujb1nes/Cn6fjjnfP8qy28z9B3LmKLvh3LODw2Qoe9Yhr5j5es7nqHvWIa+4xn6jmXoO1a+vuMZY/g+n+Z6yRi+T9H0haza92HgOcAR4HbgjTnnkyvOuAr4JJq68bfAbwzwm/pg4KPaP/8k5/zHqyy/zXgW8HTgUeA3c843r7j8vcCnAVcA9wG/mnO+a8UZY/i+GvhEdrDv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czLG8H1em6HvxRn6jmfoO5ah71j5U/Z9vM9B/zYZ+o5lTNn38dzjofJtMvQdy9B3rHx9xzPG8H0+zbbS9+KMqfh+FvBlwBe1H30l8FO58C2925Q/8z27oekYw/m+s/3oGobzPbtYeCXD+L6Q5oE7gMsYrn7POmYvYpj6re/lGTPf57Yf3U+zHjutPT/c/md7vjhD37GM3TTHB/penqHvWMZUfd8L3DOA7yPAbvS9KEPfsQx9xzPOhu+7ad70re8zM/Qdy9hNsw4H0feyDH3HMvQdK/9s+T6ee7ywZJuMKfk+CuxF34sytvp+iMaFvs8sf0q+LwT2tx9Nwfcpmv4WfT8xQ9+x8vUdz9B3LGOr74dptpO+n5ih71iGvmPlb+s793iAaJsMfccz9B3L2M738dw8KLyqDH3HMqbiex+NC30vztB3PEPfsYyz4fs+mm21St8HabaVvhdn6DtW/lR8n0PjYmq+7wXuXaHvc2gGBfzJ9qOfA14LvHGFGUeAL6EZDBLgx4BX5JzfvIry24xrga8A/m370XcDL885/90KM57ZZnxl+9G/Al6Vm5dQrKL8BDybZls9v/34y4DX5R4vb9qScS6N79e2Hw3h+wKadfie9iN9z8+Y1e/ZQG5HWW39TjRt+V3tR9fS7C+GaM/vaD+6muHa89ng/1cwXHs+e77kEoZrz/W9OONs+b4r9xjUbZuM7Xzfs8K+7bF8H2VjoCl9z8/QdyxD37Hy9R3P2Edzjn9L+9FUfN+dm8EjV4K+O2XoO5axY32vxQCUIiIiIiIiIiJSN6l9gUge6MUhQ5dvRl0ZU1iHsTJERERERERERERERERERERERERERETkTKZyr7AZdZRvRl0ZU1gHM+op34y6MqawDmbUU74ZdWVMYR3MqKd8M+rKmMI67NSMXasoRERERERERERERERERERERERERERERERERERERERERERERERERERERETqxQEoRURERERERERERERERERERERERERERERERERERERERERERERERERERCaOA1CKiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiITBwHoBQRERERERERERERERERERERERERERERERERERERERERERERERERERGZOA5AKSIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi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IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiMnEcgFJERERERERERERERERERERERERERERERERERERERERERERERERERERk4jgApYiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiMjEcQBKERERERERERERERERERERERERERERERERERERERERERERERERERERkYmz52wvwFCklPK873LOacxlWTdSSgeBC4EDQAJOAseBe3LOc710KD8BR9qM84AMPADclXM+0bf8NmM3cLT9by9wGrgPuDPn/NCKMs6hWYcjNHXxMeAe4HjO+ZEVZewDLgIO0gw4+yhwF822OrWiDH3HMvQdK3+e7+M55/v6lt9m6Dueoe9Yhr5j5es7njGG70M020nfizP0HStf3/GMme9DNC70vX3GUeBFwJcC17bl/wrwspzzn6wo40nAVwOfT+PkDuCngR/OOb9zRRkz37O/n84wvi/c9PdTGM737LNjDFe/Z59dzTD1e/b3+7H6+r1/S8bTgLvR99aM7Xxf1Wbo+8yMMX2Puf8+wTC+h9x/z3zP9t+PMJzv/Qy3/76AxoW+F2foO5Zxtnzf3WY8uqIMfccy9B3P0HcsY7Pv3cAppuH7IZpzvp3m+8I2Z2q+7wLu1vcZGXva8vW9PEPfsQx9x8rfRbONtvq+M+d8f9/y24yxfF8EHGZ6vo8D907A950555MrytB3rPyp+t7c36LvjfJnvi8EzkXfizL2s3H9e2jfB9qP9L19xrk066DvxeXrO56h71iGvuMZ+o5l6DtW/na+76fZTvo+M0PfsQx9xzMOs3E+Bqv3vR/4QuArgGfQ3HP5W8AP5px/o2/5bcYlwIuBFwJX0dyb+ss09yu+fUUZT6O5X/Ef0/x+bwd+EviRnPO7V5TxMcBLgE+l6av4O+CVwKvzCp69auveDcBXAR9N85v6E+DlwC+s4nc7su8vAa6k8f1LbcbQvl+ec751RRkfS+P7UxjX9w/T+H5sBRnb+f5NGhe/2bf8NmPWnm++X/FKmrZ21e357O9nsPr2/MCWjKcxXHs++/vJrH7/Pbs+NvvsWobZf0/V910559MrypiC70to2o8Xbvrs5TT77z9fUcZ2vmf3nuwI3+216a33I+9E32erfuv7iRn6jmdMwfd+4Ito2tvZZ79Ac7z2W33Lb8u7lCe25z/cZuz09vw4zfHaTvE9Rv2e5/tlOee/WFHGVH1fR9OG7CTfe9i4P3X22VTac30/MWMs35uf1dX39hn6jmfoO5ah71j5Z9P3nTnnB3qVvYLl48Ybb3zLDTfccH3vglZIcgDK0Wkrw9U0F0e240Hgpj4d26l5EOpJbFyc3Mo9wC19Kl5K6bw2Y++cSd6bc35fafltxiHgGppBhrZyGnhX3ws+KaWLgcvnfP0ojYvixlzfnTL0Hcuowfd7cs53lJbfZug7lqHveMZUfF8H7Jszib43Mi4BLpvztb43MvQdK78G33cD794hvq8FtjtXPA28M/d8+Dvg+x0554d7lD8V3x8I/Drb7/sy8A055+8uLb/NuAF4Hc1Nd1t5EPjcnPMbe2Zs9v1n7f8/pP3/EL63ZqzC9x6aujfzvTVjiPq9NWPV9Xtr+UPU78n6zjnfUlp+m6HvWPlnw/dWhvC9FfffjLb/Hsv3dcx/4ZW+edz3NTQPEG3HVHzflnO+s2fGYZptNaTvS4FL53yt740MfcfK13c8Q9+xDH3HM/Qdy9jXZkzZ9yM0Lob0/QBws7713SFjme+7cs+HyyvxfXPuebPihHxfx/b9zqDvzRn6jmXoO1a+vuMZNfh+R+7xIpnW97U0N2xvx1R835pzPt4z4whN3/PUfd+UezwIoO9OGZcBl8z5Wt8bGfqOla/veIa+Yxn6jmesg+/juefgbhX4PkXTv6bvlC6nuZfwA+dM8iPAV/W8f+164I3Axdt8fRr4mpzzD5eW32Z8PvATbH8PzQngs3LPwVtSSt8B/Js5X78DeHbO+R09yj8X+HngM+ZM8tvAZ/T53QZ8vxz46hX4/lU2Pcy8idPAS3LOLy8tv814PvAa9L0sYwzf+4FjbLTnW+/DW3V7vrX8IdrzrRlDtOdbM+6nOQ7p057vpdm3zvbfWzNWsf/Wd6z8qfj+CJr993bt+Sma9vxHemaM4ftyNo5B9D0/Y3+bsXubjExTv+/qmbHM982572Ae+o5m6DtW/hi+r6Q5Xnv/OZP8IPBPex6vfRTwBjYN0rOJUzTne68oLb/NuIDmRQM73fcxmpdLbJexU+q3vmPlT8X3GO352fb9ME3f107wfR3Ni3y2y9D3RsY6+L4z53xbaflthr5j5es7njEF37tojs93rO/tBlORFZBSOpVS+tOU0p+llP4kNW8SI6V0RWpG9z9by/XNKaWvH6j4S5n/sDQ0g4xd2zPjWuYPVkabP+8h4aW0lXrRw/EAl7UdDKUZ59Gsx7z6twu4tp2uNOMI8wcrg2b9ntSubymXoe9Ihr7j1OD7cn0D6+V73kMIkQx9x7mW+Q/Xgb5nGcu2g77Rd0dq8H0B8x86WcrIvre7mRM2fJ875/tIRsT3dfpOB4FfY/6+LwHflVJ6Xo+MDwJ+lvk3Ie8HfiGl9H49MmrxfU2P8mnnH9L3bEBy6/dyxvC9tH6n5sa2IvTdCX3HMqbi+3Km43vewzcwHd99j88vZ/5gCDAd31ekZsDQ0ozzmD8YAqzG97LjGH0zmu996DtKxPcqjs/Xxfe8ZYgwFd+LBp8Efc+I+L66R/lg/Y5mLPN9DsP7PkB/38fQdyRjXXwfnYjvYymlc3pkjOH7Csbxvei6kb7RdxR9d0LfsYxafF+3At+LtsNUfF/Z0/fsPGVI30epw3ff8+9j1OH74ILvl2WM5Xve4FUwLd+L1nMh+u6EvmMZ6+R7jP13H9+zF0ysg+9VHJ+fbd8XTsD3bvRNu2z/jfmD0wH8E+YPwhfJuIj5g09CU/d+MKX0qT0yPgp4LfPvoTkE3JhSOtYj48Us3g7XAb+WmgdUS/l+5g9GCPAs4NWlhQd9fyXwr3tkzHxvN1gZNL5/KKX0KT0yPpr5g43Canx/Bct9/+oO8P0rDOt7D2cORrgdO6E9v5Dh2/MrWdyen8/O2H8f4+z7vlbfQMz3vH3vUtp5F7Xnu4EfTil9co+MsXwv2g765ozj893zJgGuSimd3yMj2p4X71sr8n1Vj/JB39GMHe970/HavMEnAV4C/MseGZcyfzBCaFy8PKX0ST0y9rMxmNG8jJ3ie9FxzE6o35fS7L+H9H2Aafi+ip3ve4z2vAbf57IzfD+JjcHKtkPfrJXvi/Qd9n1M35PxfRHD+x7jeG1Q3w5AORwP5Zw/NOf8ITQd+/8RIOd8W875c1YRkJqbF6ogNQ/mzeu028z57QlbScY+mkq1jAt7bJsLWPxw/IziSkeznZY1PInY9pxHZPn20qxvZ1rf807yNqPvafjezfC+96PvKDX5XvTA1KKMLr5Lj1WivosvUqLvaIa+40SWby+LB6iZi747oe9YRtT3RZX7vpjlvqPnO/PQd4wvpuloWUbxTWXA17G4kwWah8L/WY+MWnwfrLw9P4L1eykj+j4QmHQM333Ox/QdyxjD9xjn31PxfTQw6cFUOPC5vjsR8X0Odfs+QD2+a99/R36P+q7n/Hss30UD5Vbmu/bz75p8T6F+9/W96OGbGbX7HmP/HTk+P6Tv8P47sj3nMRXfkWup+tZ3lKPU47v29jyy/56Kb8+/h/d9PvqOMrTvPcR9Fw2M3NF36Y3I+g6g707UdP5d2t+ybr5rP/9eJ98X61vfQWryPcb599C+D1fenq9Tf8u56Dvqe4zj87X2DXwScH1gun/eI+NFLHeZgH9VWD7A17P8N3WQZvCWzrS/9cj9lE8Fil78nZqBQr40MOlnp5SeVpJB3PdLU/lgXy9mGr4jy/c04LMLM7r4fmpJBvBs4MMD0/XxXVN/S5/2PLJ8fdvzyLNIh0tdpGbQx8i9jrX3t0R8R68/LcpYRh/f0WfPxvDd53zsxSw/703ANxSWD3X5LnpRzYR8H2X+YCebGfp8bDfD97eM4fuIvrkEfUf4VOCZgem+LpUPBvRilreju+jXnkd9T6E9r71+fwXL+xH6+p7K/jtyLXUM332Ozy8k1p7Xfnwe7V+r2fchFg82OmOtfbfrru8Y6+T7PPQ9Fd+R5Vt73w5AOQ6HgLsBUkrHUkp/3v77vJTSj6eU3p5SemtK6R+2n+9PKf1cSultKaWfTSm9OaV0ffvd/Smlb00pvRn4eyml/y+l9H9SSn+eUvrR2Q8hpfTbKaXvSyn9QfvdR25anvdvv39HSulr2+n/Q0rp8QE2UkrfPvsuyGHiv6eiQbKIXaCkXY6ijlTiy7YvFdyI3PqJ3kR5pKRit8sVHYSg1EVtvkvf+K3vGIcY3nd0Pn3X5TtaT7fSxbfteYwx2nN9x+jjO7pspS7G2H/rO5axD32vOqOP7+iyXTCC75qPz8fw/cLgdNenlBa9SW9bUnOj6ecFJ/+CVDDw+Rr63k2572j7Zv1eL9/7U8FN4R333+vuO+qij+/oso3iu2v5bUZtvkuPCbv4Hrq/Zd19H6Ge8++afe9i/XyPsf+egu/SwSn2M/z5t74DVOjb+h2jdt/RZevjO3ruULPvoc/HuvQFle6/9R1H3zHG8F3b+VjnG9f03YmafB/Q9yTac33HOEzc9xT6W9bdd5f6re/VLsvWjC6++/S32J4vYSTfB9D3qjOm4tvjtRhj+C6qe63v6LJNwfcehu9vKfXd5bfYp37rO0bU9/n6Htx39F7Ci4HnDJzxrJTStV0LTykdBj5rxcuylY8Drhs44wXEXmSXaF5CXkJNvv9hSumaroW3vm9Y8bJsRd9xom3P+alg0KQJtecXUNf+++DAGevuu7bjtVLf0TbkE1JKV3UtfCTf56PvVWfUXL/1HafL+Vip7+iyrbvvaFt7Kc1glUNmfFJK6cquheu7EzXtv/Vdj++9DL//Plh5ex5dNn3HqNY3zUvk1833+QNnlPru0rdfs++a+lvG8h15McgZrKnvoucmGMG3A1AOx76U0p+mlP4KeCXwH7aZ5iUAOecPAp4PvKYdVOGrgbtzzh/czrf5rU4HgD/POX9Uzvn3gJflnD8i5/yBNINU/aPN0+acP6Yt71WbPn8G8CnARwLf1DbcP0Z78N7etPD5wE91WN8ujX/p2wy6NDi1ZuwiXu92ERsNeCtjuJiK76HXYzf6jqLvGLX57nwgWDCfvlc/7Wa6uCj1Xdvvdgq+17nujZHR1XfJOZV1r56M2nzXup3Gyriiw7SdLyjRdM5EB3c+n7KB16biYgrHIWPU76m4mMJxyB7iHbXr7nuM45CqfJcMKEx9vmt10XW+dfY9hbrXdb7S4/N1811zRk2+dxf61kU9GfoeZr5aM7r6tr9l2Iyht5W+68oYo79laN/r6KLWDH3HmcI5X5fzb30PM+1maupvmYrvWute1/nW2fcU6t4YGbX5Xue6N0ZGV9+dX9CGda+mjNp817qdaswoqRtj+K5tO9WcUVN/yx59hxnjOETfw2Zc3mHaknsJodv9il2WZ8bFxH8nF5c8lE1926nLtKXzla5Hl21Vsh6X0M13SRsyxnaaSkZNx+c1t+dTuJbRdT59D5sxxnpE25DUYdrNjOHbuldPRiffBeV3na/W7TRWRk3XQ9fdd03nAImy87Euvmt2MZUMfe/MjFr71/ai7yi1XefTd4ypHIeUXh+LUrPv2uperdtqHX1Xux4OQDkcD+WcPzTn/Aya0ft/YpvOpL8PvBYg5/xXwDuBp7Wfv679/M+Bt22a5xTw+k1//8OU0ptTSm8HPgH4gE3f/Uxbxu8Ah1JKs5FQ35BzfjjnfCfwPuDSnPPNwPGU0jOBTwbemnM+3mF9Tw007WZOV5bRZdrSeUoyxnBRm++S7QTdlm2dfU+h7sHw22odfZe6WEffJRlT8T2F/dIYvq179WSM0Z7X5qJm30Mfh+h7mIxS3ycGmnbGA0AOTnu6nb4rU3ExhXOALvPkwox19F3rcUiXdR/Dd63HOaDvITLW2QXU1b+m7+EzajofK/U9heOcsTL0vfqMWl2MkVGb73Wue1BXf0smfq5emlGzC32vPkPfw0xbMk+p73V0MQnfOedaz8dq813rcUin/hZ9DzLtZoZej6n4nkLdA31HmYKLMTLG2H9b9+rJ6Op7CudjNfuu6vxb34NMu5nazseGPv+u2YW+Y0zF9xSOQ2rzXXPdu6/DtCX3EnadrySjyzqczDk/OnBGrdtprIyht1WXeR7KOT82cEbNLsbIqKm/5fQIx+frvG8FfQ+RUasLGL4N6bSdKj7/norvmvrXdDF8Rk39a+vuu0v72eU4uzRj8Pa8oHyYTn9Lbb+pKfiu2cUU2kLrXpwp1A1d1JWh7xi1uVhn3+vY31KU4QCUI5Bz/kPgIpq3l21m3kjLi0ZgPplzPgWQUjoP+CHgc3LOHwS8Ajhvc/TWRWn///Cmz06xMZrqK4EvAb4UeNWCZdiOE9vkzePejmWXzFd6gSGa8SjwYNfC2w7F6LLdV3iD30M0yxehz8WemnwPnVHq+zTxzpMxfPfZTrX4ziNkPEqzXTsxMd9DTFsyXx/f0fZtDN8nCi8ojeG7y35gDN9D34RQs+8HmYbvaIa+9R2lpv23vmP08f1LweneBbyla+E55/uBXw9O/oac88PLJ3sCtfkeuu6NUb8fyTmPcT42hfq97r7vD07ex3f0xt8xbq6t+fhc3zFqO/8e+ndb6vsUdfmeSn/LGL5Ljs/H8P0A+o5Sk+/S87Gp+O5yPjb0DZ36HmbazYzhu8vx2jr7rukBu7GOz/W9+mlL5tO359+rzhjFd9fyW/S9+ow+vqMvZRrDd83XS2rzfbJr4SP6jt78WvPxeW3n30P7Lt1O6+h76PPvhwt9P8bwvu9H31H0vfr5ptDfou9hpt2MvmOMsf+urb9F38NmrNv9LX18R6+bj+G75v6W6L2EJ4E3DJzxVznnv+xaeM75duAPgpP/YtfyW34LuHvgjOh2GiPjJPDGwozosvXx/f+zd97hkhz1uX5rszZJqxxWmZzBgAFfokUw2AgQGJsoGTDhAhckDA4kG9tggsHkDEIkAQIEGGwyIpskCRENYpXzBqUN2t26f1QPZ3Z2ZvrXVd21dXq+93n06OxMT33T/U51V1dXV3+35e8yyteAjR1n9MV3k/OxxmOFG+7PY/e1fWmfl9S/lsP3rJ+PWT/XZIz3KNZ9yM+9979sWng1IbR827DWvRTf1owtkfV7Fn13va9N8W1dD/m20/W9XZuBL3SccZ73/tdNC59R3yXvz2fNd8n9LTnaazn259ZxMSXX71n0va1p4Q196/zbhnzbJ+ibdd9NzsdK9X3mCowDAAAgAElEQVQd8m1CE1BmwDl3K2AhcM3IW2cBj6+WuQVwBPAr4FvAn1ev3wa4/YSiB5NNXu2cWwk8euT9x1Zl/B9gk/e+7gf1KeAhwN2A/65Zdheqim2psNuI/LF676+tPl/HtTE7p4r12CbauybyZgmAq1tebheq7zX6Wxu7qHG5cRkl+d4U+aQ/mD3f6yMzOvddfc5av+XbsChpvi0NkG1VPY0hh+9rKMd37L42h+9tyLcV+bbRpL3WB98l78+3YTx+y7d8G8nh++3s+sCESby1ulkuhv8wLvfGmMIr3xaPOXxvLdy3uX5Hlg956rfF407jcuMySvKdcv7dF9+W77fTuNy4jCa+Uzr/LR6z9LdElg/ybSWH71mr3zn25/Ld7nK7IN+NKMl31/0tpfvehHzXIt+NKMl3yfvzrdiue+XybZ2waxT5tmXMmu8oFw0/W3J/i9X3Fh8eahODfBuYQd8b5dvs2zpxwmiGfNsp6fg9676vphzfJZ+PzZrvWT//7ovvks7HSvdt8ZjieyOz5bv08+8cvi0eZ729ZvWY4nsL8m1Fvm008R07tky+bRlNfFsnWB3ldOAKw3If8d7HHl/fgu039abI8sE2XtHHZvjwIJJ3GRa9DnhfZMZ5wFcNi57tvT8rJgO77w/Ldy98f5TufZfU35Jjfx7bv2bdn29O2J9bj98bEo7fJfmOPf+2+t5B2b430X177S3YJodJ2Z/Lt42S2ucl96/l8m3xKN/lHL9L9/1h4CrDch/03ketB2Xtz1N8W9Y/l2/rBIyj5Kjfb0a+LRmbKcd3Svu8L/1rVt/WB0WMZlh93yjf8m1Evg1kaq/l8m3x2Jf+Fvnu2LcmoOyOvZxzZzvnziZcCHnyGElvBRY6535aLXNiNbDircABzrlzgRcB5zJmsiDv/UbChYOfAp8GfjCyyAbn3HcIk3g8pe4LVzdNfQ34WOQP6mLC06UmsQNYVw1QiWUd0w96W6rvEUV1o9aFTN8JXovtxHlSxvXUXyi5IuHGFQjfb9oNcB64MOHGNKj3vR35pvIo3zVUn1uHfFsoxnds4UO+px1r5DuQw/clyLclQ74NFOR7E3l8xw6EBO3PrRm5fF9Zs5h8B98X0K3vi4AnMv3Gj08Cr03I+ALwLzWLvcx7/+XYDMLvqQTfF8QWnsn3TcBF1Nfv6A7ITPU7l+9pk7Pm8n1JQkYO39dSju/YG1cgj+91dOt7G2X4vly+5bsB8m3LMPn23qe0z3P5nnb+Lt/Id0NK8L2Z+eG77vPyXY7vjZl8xw50hjy+L6Le97rYwuW7EfJty7D6Tm2fd+37Csrw3XV/S198XybfZt+XJmTk8G253pLD9wXy7bcR2p3yXY982zJK8h07sB3k25oxK75vonzfW+mP72n9NW35nvbAPPnm977rPn+Zj79xBfrjex1l+I6eECGT78uZHd8p59/ybacE3zfSve8Nib43sud976R831uARzL9Ov4PgP+XkPEr4GmE7TGJDwJvS8j4GPWTEp7ivf9ebAbwUuArU97fDDzGx08MA2Fc52+nvH8p8OexhRt9/w/wvISMXwF/zXTfp5Hm+3TqH35+ivf++7EZwEuo9/3oal8Ti8X3Y2ILz+R7sD+fRo79+aXan5uP36nt87rjv3wHuva9k+59/4L6/fmpwDsSMjZSP8GdfAffFzDdRapvy/i3Nup3H3xfiHxbMqy+N8dm0A/fmwnttWnXAb4HnJyQ8TPg6Uz/Tb0P2wTskzJy+L6M+e87R/3+GfCMmgz5DpTi+7KEDOv+POrBKFXGBvLsz6ddX8vl+8LYwgvyvT6D70vkW74bYPU9bVvWkcP3OuTbgnwbcD5pbrjAmWee+cPjjz/+rskFtYhzbuKKee9dzu/SFOfcQmCx936Lc+5YwoWBW1SDz6xlfB14gff+hw0+swD4MeHC0v82/NqDMhYCBwD7Aouql3cSZlO9ssk6TMlYAhwI7MPcJKrbCbPOXpV40B5kLK8yVgGD38tWwo7rGt9CxXHO7U3YVsuHXr6RsA67TTgaUb4D9qv+W1q97Akn/FcmdngNMuTbniHftgz5tpUv3/YM+bZlyLc9Q75tGTl9rx56Wb53z5Bve4Z82zJy+L4X8LfAw4Yyfk14wt1bWsp4DOFi5z2GXv428Drv/adaKH/Y9y+rl+9A+74PBNYAP6tevj3d+f5p9fJt6a5+n1O9fCtC3U55+s1wxqB+D/o67kjoNLy65fq9P/CL6mX5Hp+Rw/c+BBfyPT0jx/58BaHu7Xb87sD38PG7K99Lqpc91QT3Hfju8vh9ELA3+X1fnTLYayRjku+rfJgUJbV8V5W/H/JdlyHftowcvpdWGeN8X5l4EXSQId+2jEm+N1QZ8j2XId+2DPm2lZ/T977Awupl+R6fsSd9X5k4wGiQMc33lT7tARODDPm2ld833/swd+1qO6Fv+yr5/n358m3PWMHc9dAB8r17xp7yfRNz59/yjXw3zBjnewuhP7VN3wcAew29LN+7Z8i3rfwcvhcxd/1bvqdnyLctQ75t5cu3PUO+bRl98b2SsB7yPT1Dvu0Zawg+hn1fTzjnk++5jFsBf0+Y3HAw7vJSwqQUr/FpE20PMu4HvAh4MHO/qZ8BbwLe2dL41CcQJtP7g6GXvw681nv/ny2UvwR4PmFCj6Oql28CPg280nv/kxYyDiCM6zyR4BzCeKnTqozoh1kPZdwa+Du69X1/4IXs6vs84M107/s13vvPt1B+Tt8nEa6JQth/DHxHT/Y7lDHO9yXM+W7jOt/w/nwwXvGWhH1t9M3xIxmD/fmvq5fuSNifX+XDQ9RTyx/enw+PV9xUZbS9Pz+vevl2zI1vafv4fW718m3o7vgt35Mz+uL7/oTj94PYdX/+JuBdLe3P++J7ML6lK9/LCL8p1e/p5Tvm6p58T8+Qb1tGDt+3IbTXHsOu7bV3Es5l2miv/TGhff5A5vbnPyXsz989j/bnk3xf6cPkTakZuer3YDxTV/V7ku83Au+ZZ773A35evSzf4zP6tD+X7/oM+bZlTPI9GI88n3wfCKxEvqdl7Enf1xB8yDfybSq7hXZYkRNQzmecc6uArwGLCY3nF3nvv9CwjK/TYALK6iTwc8CnvPenNPvGY8tzhJNJB2zzLdzUOiZjIeFCqAe2tnFSMSZjEcHDTh+ehtQ61YWfhcAO38INShMylhJuXrnJpz01flL58m3PkG9bhnzbM+TbliHftvLl254h37YM+bZnyLctQ75t5Q/73tpGJ9GYjBy+DyI8XQRgQUcZgzKP8t5HPwHMmLG4Q98Dxws79D347l25WEQYBNnZg0OGXCztsH7Lty1Dvm3l5/Kt47ctQ8dvW4Z828qXb3vGwPf2Ni64TciQb1uGfNvKl297hnzbMuTbniHftgz5tpU/8A2hP1W+J2fIty1Dvu0Z8m3LkG9b+fJtz5BvW4Z82zPk25Yh37by5dueId+2jBy+FxMeXCLf08uXb3uGfNsy5NuesYzQ1ynf0zPk21Z+Dt/7EG7UhO7G6RxCmOwwx3imI7z3F3VQ/gJgMD74AN/SA2JHMpYBgwlzVvoWJoUck7GGcFM89MP34b6FCTrHlJ/D917AYGKh+ex7MbANsvhe0uH+fJCxyHdzL8Dwb2o+j0+Vb1v5ffF9KGEyNPmeXn5ffKt+28qXb3uGfNsycrTXtD+3ld+X+i3ftvL74lv7c1v58m3P6NR31dc52P7yPT1Dvm0Z8m3PkG9bRuu+NQGlEEIIIYQQQgghimTQYdR1h1RX5SujrIw+rIMyyim/TxlCCCGEEEIIIYQQQgghhBBCCCGEEEKUTB/G6fRhHZRRTvnKKCujD+ugjHLKV0ZZGX1YB2WUU74yysrowzooo5zylVFWRh/WQRnllK+MsjL6sA7KKKd8ZZSV0Yd1mK8ZC9ooRAghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBClIsmoBRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGE6DmagFIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQoudoAkohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCiJ6jCSiFEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIXqOJqAUQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhOg5i1ILcM6tOuOMMxY451a18YWEEEIIIYQQQgghhum6zyFHn4Yyysnowzooo5zy+5QhhBBCCCGEEEIIIYQQQgghhBBCCCFEyfRhnE4f1kEZ5ZSvjLIy+rAOyiinfGWUldGHdVBGOeUro6yMPqyDMsopXxllZfRhHZRRTvnKKCujD+ugjHLKV0ZZGX1YhxIzvPfXTXpvQTtfRwghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBClIomoBRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGE6DmL9vQX6IBrDcus7vxbzDYLgTXACsABW4D1wLYWM5ZUGXsBHrgB2ADsaDFjObBPlbUTuA7YWOW1xSpgb0Jd3AFswvYbtuII67CKMOHsTYTtdGOLGfJtR75t5PK9BlhMd75XE3wvJHz3jVVOW4z63lZlzEff+wLLkO9p7Anfmwku5Ht3hn1vJ+zP5Xt35NuGI6zDSuZ8byA4aYu++L4H8ETgiKr8LwAfo71ttQB4GPBoYD/gauDjVc7OljKWA48FHlL9fSHwAeD7LZUPcADwZOBeBPfnAe8Ffttixs2Bk4DbEurFd4BTCdusLQb1e8AauqnfA9bSXf0ecCjd1e8BB9Fd/R6wP+3X73sCTxj695MI9a/NbSXfNnL4Vv22kdO32mvTUXvNjnzbkG87ffG9L2F7yfd0+up7PaGvvi3k20YO34uqDPmuR75tLK0y5Hs6ffV9PcGFfO+KfNuRbxt98b2CcC1x4Ptagg/53hX5tiPfNsb53kB71xFBvq3It529Cc7lezp7yvfGFssH+baSw/e9gccDh1Xlfw74BLC1pfIXAX8GPIrwu7oKOB34Iu3tQ1YBfwkcRxjL+zvCuJAftVQ+wCHAicDdCb7PJYxvWddixq0J41tuSagXZwGnEX5XbZHD98MJvveme9/LCA7eD/y4pfJBvq3sCd+/I/j+SUvlw+6+zyH4vqDFjGHfNwHfpH3f9wEex5zvzwJn0J3vKwm+v8T8830ScDe6872UXccz7Ud37bUB+9BNe23A2qr861ssfwG7rsOhhDqxpcWMQXttwEF0016T73rk204ffR9C2E7yvTt98L2K0AYZ8AbC8fvsFjMGx+8BLyccvy9sMeM2wF8N/fu5hPbahhYz+uB7T9TvA6sM1e9dWQQ8Yujf7wE+Smift0VffN+WXfchzwE+iOr3KH3x3Yf6DfJtRb5t5PI97GK++r4fu7Zt/wL4JO2Oo5dvG6rfNnL4Poxd21IvI5yPXdRixu1GMp5NaK+16UO+bah+2+mD77V0X79Hfe9L2FZJvp33adelnHOrzjjjjG+ccMIJ900qqD00AeWeZV/gYMKFw1E2AJe2kHEIu1aGAR64nPSLxgsIk9qsGPPeDuBi0ndSS4Ajq/+Pso1wsTW14bwCOJwwmGyUGwgdwqkHDPm2MQu+1wOXJZYP8m1lJaHxId/TkW87OXwfyq4dnANy+b6IsL1SkG878m1Dvm3sA3yIMIB3lPWEwapfT8y4OWEyy2PHvPe/wJ+TPoHjcYSOgn3GvPd1wuSamxIzngW8gnDTyjCecAH8BaT9phYCryds81G2AX8HvCuhfNi9fn+3+v896aZ+D5cP3dTv0Ywu6vdoRhf1ezijrfq9htB53WX9lm87XfteQHCxfEyG6veu5PY9TFe+h8nVXltH+gWZHO21/QgDdudze02+7ci3jaWENuGe8n09YT3kuz++VxEGa8x334cx/pxSvndlT/u+huAjFfm2Id82FhJcjPO9nXC9RL4De9r3ZaTflDErvi8k/UZ8+bYxzfdWQn+LfAf2tO+LSH+gnXzbkW8b8m2jT77XEs43RmnL9/6EAfnz3feRhAndRpHvXZFvG3va93WE9ZDvcEz6COEBq6NcTZi07rtj3mvCbQmTkx0x5r2fE8a3pE4Y8lDC2I9VY977L8JNM6nnGScDLybcdDWMB94C/H1i+YuBNxMmXRtlC3AKYeKTFPri+2HAO+nW9ynAPzDe95ur91JYTPjd/MWY99ryvT/B9x+Oee8qgu/vJWbU+X4M6TeoTfP9BcIEQV353knw1LXvkwljkVLYnzDRzN3HvNeW79sRfB8+5r22fP8p8A4m+z6J9HbICwj77HG+30zY16eylrkbT0fHM11K+k2uo+214Yw222tHEn6/o+OA2mqvrSa0dRaMyeiivTaacTVwRWL50A/fywj7cvmuZxZ8r6uyUui7752E87GufV9I+gMUcvj+M8Lxe+WY9z5PaK+l/m5fSBjzP9pnuxN4I/DSxPKXAG8lnK+Mshl4PvDhxIy++M5Rvw+o/lP9ns4dCO3zw8a8dx6hfX5JYkYffC8B3kbYHqNsBp5HOHdOQfXbjuq3Dfm2I9825NvGgYRj6x+Mee8KwqSUP0jMmOZ7C+H8e777vorw0JpUuva9iOBiT9XvtnzvTbg3Y5zvawnj8FJ9/x3hnGzc+dgbCA8HSGEp4ZzyUWPe20x4MMDpiRmLCPvzZdW/h7fVTYR6Id+BvtRv+bbxD4RrJuPq9+uBf0wsH8I1pcGciaO+L6Vmjgrv/cQHmI4bCCL2HBuBbw/9N+7icR2PJ9ygvifYhzCZ2LjBPxBugjwkMWPSZGVUuYcw/mbLJhzJ+MmMYG6w57jBYFYWAkcxfrAX1etHMX7grZW9COsxqYwVVUYK8m2jFN9HJpQP9b73JY/vcYP/mtAX30dMKaMN34P6O999H4V8W8jle9L+OpfvSYO5rci3Hfm2UYrv1HOHrn0vBD7O+MnpIKzDx4C7JGQcSHga/bjJJyFMTvlZwsDxWO5GuJA6aVvcj9BxN8mVhScDr2L3ySepyn1q9X4Kr2X85JMQ6sXrGD94vwlHUX/8XjbhfQuq33ZKqN+nA3dKzDgK+baQ6/g97uZZaKd+L0K+rUyarAz65fto5ofvSZOFg3wP6IvvaZPDD7+fgsX33hPet3IU89/3cqb7Xknc9Zlh5NuG9fidcj1zOZMf3gT5fB+UmHEok/fX8j1HCb4Hk9+kIN825NvOpMlGYW7wn3yX4ftQ5Btsvrtun7fhe9LkNtCe76Oo9700ofw630uR7wEl+D4S+Qb5tiLfduTbxsD3pDLa8j1pslGYX74njWeQ7znk20YO34OHo08qYxV5fB+YmGHxvXrC+xaWAJ9i/GSEECZ0OQO4TULGWsL4lUnnv7ep3k/53f4fwsRt4yYrA3gI6RO7PYNwA93oZGUQXDyb9BvsJk0+CeGc+M3AIxLKXwJ8mnrft07IsPj+DGm+702YmLFL388EXsZk38+p3k/hzYyfjBDmfB+fUP6gfo+bfBLCzYOfpHvfqfW7zvefkD5R57OY7HsB7fieNPkkBN9vAR6eUP7A97jJJ6Ed34cTfI6bfBLa8X0f4AN07/ulTPb9XNInsBq+eXYURzi+pxy/ofv22uIqY9y4TmivvTZpsnAIv4M2+s+ntdcGk9elkMP30XTvezDZ6Djke45Z8X005fue9nAX6N73AvL4Poru9+epvu8LnMr4ySchPCzg1ITyIbTHXsz4PtsFhMnjUieQfhvjJ5+E4OhthInRU+iDb0v9ntRetDLoT5lWvw9IzLDU70ltUgsO2/58Ut+YhSMJ59fjJp+EMHn8Z0hbj774fjvjJ5+E4OjtpNXvHL5Vv+30oX7n8L0S+bZQku+Uezfl28ZewJmMn3wSwvnHpwj37MZS53sZ/fA9mLwuhcPpvn4fxZ6t3235Hkw2Oo7VpPt+HuMfBkCVezLwosSMdzJ+8kkIjt5B6BuOZeB70vjTQV+JfE9/+CLMr/ot3/U8n1B/J9XvUwiTz6YwPPnkuIy1JPjWBJRlsRn4o6H/Yp5I+XjSJw2KxdKZvC+TK34di5k8WdkwKTvZVUwezDnAkdZxbtkGi0mb4GbagWjAXqR1zsu3jf0ow/dy0hoHpfhOcSHfdiz1qnTfq6mffC6Xb8u6TkK+bci3HYvvNYwfEGahJN8pbYRZ8r0vZft+GJMH7w5YBvxtQsYzqT+HWgv8dULG31M/iOFehIHbMSzCNtjjaUy+MF7HUYSnntfxEuL7Giz1ewHl78+nDcQakKt9XnL9/lMmD9YesBdp9Vu+bZRy/Fb9DuTwbXmYh3zLt5W9mS3fkwb4WsjRPu+L77ptkON8bAVl+17C7PheQj98W9Z1EvJtR75tWH2n9q/Jdz3ybUe+bfTFt6V9nst37MTnS7BN9p/qu24y0flw/M7h27IN5DsMfC3F96QHVVmQbxvybSOH730ox3fKg6Dl24Z82+na91LK8Z3SPs/h23o+FuvbOqZrf7r3nTKp6aOof7jiStJuLHkOYTtM42gmP1jUwqSJxIb5Y8LEZjFYx/g8m/hxtrei/uGpjrRJ0U4A7lizTA7fx5Dm+yXIt4VH073v52Lz/eSEDIvv45j8INk6rGN8UnzfmsmTTw5wpE1yafX9NwkZz6V+G+Tw/UDCxMMxWH0/h/jzyqXYJuFMOX73pb1maZ+vpPz2Wg7fdeN4++S77t6pSTTxHTtWWL7t5PBt2Qal+15DHt91+zhr39IkLOdjDybccxDDcmxt1ucSf/y+HZMnpxvgSHvoQF98W+q35V7YSVjr9wHE1+9l2Op3ykOaLfvzhaT5/n/U/+ZvDjwxIaMU3yn789sTzpfqvkfK+VgO37NUv1N8W+t31+01+ZbvJlh9d90+T/Xd9flYDt9/Dty2ZpnVhMm4YjmAcnzXjdWbRC7flvmESq/fffBt7VN+PvEPJroT8MiaZRaQdr1Evm3kOn53Xb8t59/yba/fJxM/x1vnvjUBZdmsIDy57pvA9whPqYHwZKIfAm8C/ofwBM1lhCcz3hl4N/Dt6rUXAV8Hvg+8cajsZwA/AL4LvI9QWX7C3IVMB5yNvbNwFfaJqWIrtvUEbjHxlc66viuJn4jLuv6x22kx9oH3sRnyback37Gd/zl8Wz8n37PnO3YiD2tGDt+xLnL4Xs3s+Y69MXSWfDv64XsV3fsueX/eF9+WCQ8BHkTcxIoLgCcZlz0xonwIT/B4gHFZ6/qO8lBsHQMLiR+Y+mRsfQhriZ9Isy/12zpQMzZjNbb170v9fgjxE6fKt40cvpv0L8XWb2s/wqz7trrI4TulfS7fNnL4znE+VpLv2Pb53pTjewnxE7eUdP49676tn+uL71gXS5DvtjPk2+47dmBqSb5znH/Ltw357r59Pou+Y28EzuHbOhA7h++Sj99N+lu69h27nXL5tqy/fHd//t3Ed8rxu2vfOc6/5dtGab5jJ/LIcfy2+s5x/I7N2Af5ttK176WU5TtH+7xr36uZbd9N9ucl+/4r43J/RtzEa0uAx7X8XUa5FXCPjjMege23soT4iR2sYxFuBty344yH073v2LFGt6Z734/EVv+WAk+IzLCu/82Jn0jzRONysb6XUj+J5oDSfVv207l8x06keaJxuYcTd+zL5bvuod8DSvado31uzUhpr1lvGE9pr1lvjM3RvxbbXivNd8z9to6yfM96f4t82yjNd+xEPU3Ov2N9W/dvsRNt3xa4m3HZ2OP3Cdh+t8uwn4+MYm2/3JL4iTT74HsZ3dfv0vrXuq7fexPney/gscZlY+teSb4XEO/bWr9vBdwzMqNr36XV75S5F7r2bf1uTfqPYzNK9133UIMBs+7bun/L4Tt2X5vLt2X9S/dtPWY8iriJ9nKcjzXxnXL87tq39buVXr/74PvR2O7ZWo69/3gUa927Lfb+41Hk28YayqrfsRMr5jj/7oPvx2AbI7ic+oesTaJz35qAsiz2Ikwc+W3gw8AWQmfdvQkTivzr0LLHAu8E7g5sIkw+eSZhEsmnAn9Uff6dwP0IB4BlwJ9Unz+5WuaewPMAD5zOXGfJ/YHzgPXG776kwXrWzXA7CWulhmbfJ/ZzMeuxAPtEX4uIu0iZw0WTz826b+uNWouI2yc3WYfY7ZTDd5PPzbLvHNupNN+xGV3Xjb747ssxo+v1WMjs+W5yHB6mD/uQJr4XI99WYtfjlsblFhAGjjZlDfanaxxCXKf2zal/OsYA6/qmfC5Hxi0iM2atfpd63IM852NN6vexEeX3xbfOv23Idzef69q3o1zfTeqFfNvI5dva7homh+9ZO/+O9d2kT1y+u89o4jtmH5LDd0nbKSWjpPWQbzt96F+Tbzsl96/Nmu9YFzl85zj/buK71PZaab770N+Sw/cSyvU9a/1rffFdctu5D/0tTX3HMIv9a33obynZt86/bSyme98lbScou43Q9fmYfNvJsR7WcRKLibv+fTD2MStHE/dQ7iZjPUoee5JjDE0T38dElN/E9zHEPVREvtv/XA7fxxJ3f4l8t/+5JcT5PoRwM6aFWN8lbaeUjJLaISW315q0j0puS5Xme5bPv+Xbhnx387mur/uk+LaOQex6THXTZYcprU0Ym5Hj+N2175L2g5CnjdB1RqzvQ7E/vL3JfUHD9MV3SecAfanffRnfUnL/+az5zjHeoeTzb6vvktu1pY1vic2wHgeWAUdGlF+a71nPKGkyDgAAACAASURBVKl+l3z+XVr/eWyGfNsobXxL1+2QJvOoDdMX3yWdK0Gk75iLzaI7NhMmhRywCHhZ9dpOQmfGgdV764CfVn//BDhiQpn3JkwwuZwwucovgC8QJpd8D/C56j+A04CPAm8lPDX0g4nrMwmf4XOxGU2IyWj6ma7Xo2QXs+i7VOS7HEpb9774zkGp+xD5tpHj+C3f5WTId/efa8JNHS07YHvD5WMymnym6feJyYhZh1wZqt/zMyP2+3T9m5pF36UeW3NkyPdsZcj3bGWU5rvU7dSXDPkuK6MJ8j3/M5og391mNKHU9ZDvspDv9im5P1W+y0G+26fk/bl8l4N8d/eZ+Z4xy75zUJqLvvgusfymGfLdzbIpn+kyY9Z9Nxnv0fXYE0/c+JOu16Hp50oeQ1Oa7x0dZ8h3txlNPrMT+e5i2WHku5yM0toIpfZ1KqOcjD6sgzLKKV8Z3VFq30wf2jlNPxfbJmyC6ne3GU0odT2a/mZn+TeVo37r+N0+Ja+HfJdDH7ZVH9Yh5XNdZZTatlXdm62M0upFLKX12fahvRZLH+pFiRkllt80o9TjHmRYD+tMoGLP8Fhgf8Ikkn8EXMncTKPbhpbbyfjJRJcCrydMJnkP4P1Dn3808E7gTsBZhKcuXVJl3Ae4K/DFBt/1hgbL3thg2diMJssOc71xuZ3ErYcHthiX3VLlNOXGBp+L3U45XJSUId/dLFtqRqzvnci3lSbbty++YxpqTXxbj1+jzJrvHch3F8sOU5rvzRHlN/G9mTjfm+nedw4XTTJi1+ObxuWuJUzM35RNwDnGZX9I3D7kx9jX/xsR5YN9O6VknJUhQ/XbRkn72pQM6++2ST0dpi+++9LfkqN+bzUu2xffJddv62+xZN99aZ/Pou8Y+tLf0gffO5Dv+ZixA3u7a/RzJfme9f25fNso6VplSkZJvmPPY3L4znH+Ld/2z81a/e56PXK01+S7m2WH6YPvG7Cft5fcv9YX39tqlwr0xXfJ9TvH+bd82+iD7+3Idxef69r3duS7i2VjP9f1emwn7nysie+UPuGufZd2/Tt2PaxjKq4GfhZR/mXA/xqX/RZx18e+h/0coOSxJ9axCL7BsqOU5PubxPn+PvJtpWvfl9LMdwzybce6HlcBP48o/xLgN8ZlY9fhe9jbCE28xX4u1ndJ/S052mt9aZ+X3L/W5HysD75LvjYt3zbk207X+/Ob6N53X47f1oydxLd1mvi2toGHyeG7tON3H+r3TcT5vhD4nXHZ2LqXw3eO/rWS6nes7yb1O+XYOmv1u+t2SMm+c/Sfy7f9c/JtI4dv63HgMuDXEeVrf24nh29rO6Tk+p3Dd5P2UdfnfCntNfm2Z3SxbOznuj7PmHXfOeq3df09keuhCSjLZjXhwuR2wiSURxg+cx2wsvp7MNnkNcAK4BHVvx2wlvAjfgmwz9BnTgXeDXyKZpOjbcE24G0HsKFBucNsxPYEv83EdQYDrG/wXWJnr72m5e8yiid8vy4zmvi2fpdRcvi2uuiLb+t3GUW+7Vg9zrrvDcyW71gXfdmfl+R7E/LdB9/W9c/hO9bFTrr3vZmyfMd0HkCYNN/CR4i/gP8u43Lvjiz/OuD0lr/LKD8iTHRZx0bg45EZHyWsSx3fA86LzMhxPtaX+m3Zh6bWb0ufQI76/WHi63cO35s6zijJ943E++5Df0tpvq3fZZQcvvvQ31Ka75Lrd0nn3zl8x57z5fC9Efm2IN92Smqfx7roy/5cvm3Itx3r+m+gH/vz2AzrNt6OfMu3DavvG7APqhqlie9Ycvi+tuMM+W4/Q/W7H7770N/SxHds/1oO31YX8i3fbWfMum9rf2oO37HHpCYZ8l3O8btk302uScVm3EA/fFuvf5+WkGEdt2L9LqOsBz5pWM4D743M+BbwS8NyVwJnRmachq0P7+vYJ4EbxbqNP0C4eSoGq+/YsUbXEO4XqSPF9zex+b4C+ExkhtX314DfRmbk8P0e43Jd+95JvO+zgF8Zlsvh+6vA+ZEZs+bb+l1GaeL7s5EZ1j7r64l30Yf+lh10359qbSPdRFp7rWvfOc6/u+5PLc239buMYr3mLN/ybaWk6yWx4x2uwnYOlHL8/hq2ic8vAz4XmfEBbOf4XwbWRWb0wXeT+h27Hjnqd1/aa123z3P4vp7ufZ+KrX5/CbggMqOk+t318dsnZOTw3Zf63bXv7cyW7+uQb/m2Ye1fez+2e5PHkcO35T7aXL4t32UcOXz34fw7h+8vYeuzvhj4QmTG+7F5/K8qJ4Ycvq2fzeE7R/s8tn6vx16/t0dmyLeNL2F7sMFFxNdvq+/rifStCSjL5nTgzoQnxjwW2wzeHwLeAHybcDL/fsIEIB8hTEoCsJAwKOF71XJvZu4iz+cJk1WeFvF9L2F6I88TntAYe+OK5fM7qu8Ry1ZCh+00thEuhMaykfod1HWk7WSvoP6AdBXxEz+BfFspyXfsjWkg31Y2IN8WZs13yiBh+bYxS76vpHzfl9Usk+p7C/3wfSXybeFc4N9rlvkV8K8JGR8C/rtmmc8TJmCM5RXUD9h4FfCLhIxnM/3iwQ7g/xJ/DnAD8Bym35SxAXhuZPlgq99bCXUjlg3UP8FjPtTvi8lz/J5Gav0+B3h9zTK/BF6ZkJHDd1+O3xbfdctMYwtwdc0y86F+l+L7EuR71nzH0hff6ynHd+xNoRBcTmtLpfreSffHb/m20wffmynD97XE36gE8m1llnxblpnGLPmuO0efRl98X0y975S2VJ981z1dVb5D2Zb+1JSMvvi+HPm2sJn6QX7yHZBvG/JtQ77t5PCdo31e53s7/fC9iTy+Y29cAfm2Uorvy5HvGynHd+yNiCDfVr4HvL1mmXOB1yRkvJsw4dc0Pkn8xI0AL6F+koCXYbuJZhLPZPrv9qZqmdiboTYAz2f69dSrgZMjywe779cmZFh8f4LyfT+LMnyfElk+wHeBd9Qsk+r7XYQJO6fxCeInbgS773UJGc9i+kNmU32vJ9TdPe37HOB1CRk5fL8YuLBmmZcSPzEM2Hw/g3jfudprdTeuWsY0TqMv7bUS+lvmg+9rqH/YtnyHvjP5tmFxmcN3yvlYDt83UI7v2IkjAP6BMBnBNF5sWGYadcfvbYTjd+xEQNcQ2mLT2mtXAi+ILB/649tSdy8zLDONWarfddfIp/F24Ds1y3yUcE9RLH3wfQ2h7tbV779JyMjh21K/LXMCTMN6/I49VwLVbyt98d11/7nVd90y05BvOzl8X16zTKrvb1D/kJsfAf+RkJHDt+XYLN+hftfNm2IZ0ziNvvh+JmFbTGIr4XzM8lC9cVxFfVvscuCFkeWDfDeh7t7PHPX7JlS/oXvfnlB3p83dMKjfsfcDd+5bE1CWxSEj/14PHAfclzCZyF0JFwEvBP5waLk3Mjchw2eAPwD+iPDjfAVwJ+DhhA7CVxJ+9A8C7lGVMzzhw+2B87A9zWaUrYQBBuMujm0ldG6mdJpTff5Cxt/YfWOVn3LTN4ROjnE7EE/oGDyf+IP2gAsJO9HRcnZWr9dd7K1jJ+F7bmL3HdBgp5FykyDIdxNmwfeFdOv7BuR7uBz5tiHfNnL5voj++t5BPt8pF0Fhzve4k7G2fG+i3/W7Ld87kG8rLyd0ao2eHN9EGGj5YNImd94BPI4wMf9oJ8S1hM7sJ5D2m1pPOAf7JLt3QlxKGBibMokmhPO4BwPfGvPez4HHEP808QGfBP6CMCngKGdV+ePea0KO+n0BoWNK9Xs6Oer3y5hcvz8OPIS0yaUgn+9r6c73Fvrh+wr6U7/3tO+UTnOQbyt98z1u8PkNhHVsy/doO0e+d2VLlbGnfadM6gDybaWU+t0H3ykD5wflyLeNWfGdMsgB6n1fgHwPmOb7Krr3fSnyPSCH73XIt4WN5PE9bjCUfO9KX3xfzmTfG5HvAbl8X4R817GD4EK+68nle/2YcuaT783U+66bGL2OOt+/m/BeE0rwfXFi+Xva9xbke5h17HnfdRMv1iHfdtYh3xZy+H4hYYK30f7GrcCHgYeRth43AScA72T3sX4bCZNb/lVC+RDGbDwQ+By7TzhyEeHBp29IzPgR8FDCJI6jnAM8EvhSYsaHgCey+/0QHvgKYR1/m5hR5/uhpPt+NMH3aN0Y+H5qQvkQ+hC69v1Dpvt+BPDlxIw638eR7vtvCJP1del7UL/3hO8LCb5TbvoG+AHwJ3Tr+4PU+z4/MWOa7w+Rvj/fRvD9Lsb7fjXt+D6Oyb6fRbgPLYUfEH773x/z3sD3VxIzNjD5+H09wXXKJD0Q+s6ntdd+R/xNoQMuoNv22nbC97yO3b/rNsKNzG2019Yx/ib5ttprffG9jsm+r0S+B8i3je2EbbEnfa+jfiLdOuTbxuWE9trnx2RcQJis5M2JGd8ntGXGHb/PBo4HvpaY8QHgycBvRl73hLbgA0mb9ByC7yuY376H6/cog/pdN1FXHbnq98V0X7+79L2N0BfxHnbfVhuAVwFPTygf+uP7VOBEdj/H9oS+nOPoR/1OmQgI+uO7hPp9PvINoe9gHfJtYR3ybWE93ft+HvCP7H6+sgU4Dfgz6iccq2Md8m0hh+9LmVy/N9De8XsD89v3d4E/JfSrjvJjwpxgdQ8mq+O9wEns3ke+E/gi4Xws9V6crn17+uF7MB/Wnqzfv6P8+t0X34P6/cMx7/2YcNyrezBZHZ36dt6n7aedc6vOOOOMb5xwwgn3TSpIlMDzCRcqn8L4i75NWAKsABxh55faABzHcmAZYYdyI+k3So9jFbCYsKO6nrQZisfhgNXAQsLOb9wArVQWEtZjAWFnkTqIehzybSOH70XASrr1vZTgQ76nI9925NuGfNsZ9n0d8U/fm4R82xn2fQPpA7XHId82+uB7IWESx9Orf9+M9El4R1nJ3BPYTgL+i/ROnFEOBn5d/f0YwkCKtn+3twL+p/r7QaSf343jnsB/V3/flbl1apNVzHUOraGb+r2p+vtwuqvfg86nw+iufg8GPB9Md/V7MEnk/nRXv9cSvv+XaL9+y7edrn2D6reVYd8HMf1JZ7GovWZjEWE9HGEbpQ6iHsdwe20z8j0J+bbTB98Lqgz5rke+bci3Hfm2Id825NuOfNuQbzvybSOH7xVVjnxPR77tyLcN+bYh33bk20Yu3yuqv+V7MvJtR75tyLeNxYQbuD5a/fto0ieFGWU1c5NdPIkwfqPtbXUY8Ivq70cBXyV9wtRRbgd8p/r7jxl/010q9wb+s/r7zqRPRDhKX31/hfb3IX3x/SDgI9W/5Xsyw74fwPib7lIZ9n0n0ieeHCWH772Zm/z/SYTxiltazsjh+/bAt6u/u/K9gjBZBcB+pN84O46uxzMtYO5hzGsZP6FcKsPjmQ6lm/baMubG9nU1nkm+bci3neHjq3xPRr5t5PC9Fvh59fcjCedjXR6/7094WEDb3IcwITbAHQmTIbRNH3yrftvp2vc+zE3I80TC+Vjb7fPFzJ1XzGff9wVuTuhX+yaq35Poi+8+1O9R39e2XD7IdxOGfe9D+/3O8m2na99LCP1rH67+fRTpk3yNIt92VL9tDPs+hPbvL4dwfjSYjO6+wE86yLgf8Jnq7zuQPlH4OOTbxnD9PpD2zzFA9dtKDt93Ym4y2a7qd5Rv7/3E+581AaUQQgghhBBCiPnEoNNg9TwtXxllZfRhHfqU0TV92U7KKKP8PmUIIYQQQgghhBBCCCGEEEIIIdpF10OVMZ/KV0ZZGX1YB2WUU74yysrowzooo5zylVFWRh/WQRnllK+MsjL6sA7KKKf8PmXkQL6VMZ/KV0ZZGX1YB2WUU74yysrowzooo5zylVFWRh/WodiMaRNQLkj+OkIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQomg0AaUQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghRM9x3vvkQs4888wfHn/88Xdt4fsIIYQQQgghhBATcc55AO+9m4/lK6OsjD6sQ58yuqYv20kZZZTfpwwhhBBCCCGEEEIIIYQQQgghRLvoeqgy5lP5yigrow/roIxyyldGWRl9WAdllFO+MsrK6MM6KKOc8pVRVkYf1kEZ5ZTfp4wcyLcy5lP5yigrow/roIxyyldGWRl9WAdllFO+MsrK6MM6zNeMBW0UIoQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghykUTUAohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBC9BxNQCmEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEII0XM0AaUQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghRM/RBJRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEED1HE1AKIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQvScRXv6C4h+4pxbCayo/rkFuNZ771ss3wGrgWXVSzd4769vq/wqYyGwN7AE2ElYhy0tZyyuMhYB24FN3vubWs5YRthWC4BtVcaOljPk25Yh37by5dueId+2DPm2Z8i3LUO+beXLtz3jDsDDCD7WAR/z3l/bcsYDgHsDC4FzgTPbXI9qOz0SuB2wAzjLe/+1tsqvMga+B/9e1pHvwd/70139Hvy9L93V78Hfe9NN/R52sbLD+j34d198b/Te72w5o0++u96fD/6W78nlq37bM/rke2n10nxur+1DaOfkap935bvr9rl82zLk25Yh3/aM3L6v997f0Fb5VYZ82zP64nsfYDHz2/dewCrkuy5Dvu0ZffS9yXu/teUM+baV31ffG73321vOkG9bhnzbM+TbltEX36uA5dU/u/C9lHB97DaE7fR17/1ZbZVfZewDPBY4HLiecI3vFy1nHAk8GlgDXEm4Vnl5yxl3Bh4K7AX8Fvh4m30VVd17IHBPwm/qbOCzbf5uK9+PAm5N8P017/032yq/yhj1/Wnv/S9bzuiT73sBDvgJwXdr11wz+V5D8L0W+Z5WvgMeRKjf8j09I4fvuwB/wpzvj7XZ1umR70F77feZHbTXlgz9vT/dtdcGf68htDu7aK8N/l4NXNfx9e8VHbbPB/+W78kZ8m3LkG9b+X3xfdTQ388hHFuvaDnjLkN/n0hor7V9/H7w0L+PBz7X8vG7L75Vv23ly7c9ow++lwInDP37j7z3326r/KpM+bZnqH7bMuTbVr582zP66Hu59/7GtsqvypRve0Yu34ProdfJ98SM5UN/z3ffg3/3oX7vR3Ah37uXL9/2jL74HnYh35Mz5NuW0Rffdx/6+0mE/tTNLWfs4tu3P5/AArQ/t2bkqN+rh//uwPde7Nq/dk/v/XdbzpBve0bXvjup372bgNI5V3sQ9d67HN9lFnHOrSAMkFo68tZ259xl3vsNLWSsAQ5h5PfrnNsKXNxGR6Rz7mBgf8KA1AEHO+duAC7y3m9LLH8BYTvtDQz/Hg9xzm0irEfSTqrauR7O3MD5AYc6565uY2CZfJvLl297hnzbMuTbniHftgz5tpUv3/YM+bZlHA28H7jPyFuvd869AXhpaiehc+4+wDuAW428dblz7kXe+w+klF9lnAS8Ejho5PVfAE9rYyDQBN+3cM5dT3DRpu8BhxJ8bwQu6ah+r6X7+n0kcJNz7vIO6/cxGep3m74XAoex53xf1cZA4Uy+9wUOZnffWwjbqcv9uXzvmrGnfV/cRkdkTf2+yCdOStIj3ysJ65HbNxl8H9yR79H2Wpe+oXvfMI98O+dcVf5+yHddxjTfl3nvN7aQId+2jD77Pki+d8uQb1v5ffJ9BHMTDQ2Q713Ll297hnzbMnL4XkrYn8v39PJz+V5LmNhZvqdn7EfoO++D771H3srh+5Cq/1y+ke+GGSsJ67Fk5K02fT8deAVwwMjrPwWe6r3/n8TyFwKvAp7Frtvqlc65LwMneu8vSczYB3gXYRKu4d/Ua51zHwT+b+ogeufcLQjXQ+858tYbnHOvBf65heuhxwFvA2428tYlzrkXeO8/mlJ+lfEM4J/Y1fc/tuz73wi+9xp6q0++X+O9/+eU8quMBwJvZbzvU7z3p7eQMc33U7z3P0gsP5fvdxMmyZXv6RnPJPjef+jlNn0vIvh+Jrv7/hJwUgu+1xDqd5e+b0nwfY+Rt3L4vrjy/bEWMrr2Pam9dsuO22uD66EbgEs7aq8dztz52JUp5VcZqwjt8+H22lF03z4/tmqfX9RCvZBve0ZffB8C7Mvuvq8jnPPJN7W+L/Xeb2ohow++9yUcvx8x9PIbCcfvDwDP8YkPi3LO3Qp4H7sev99HOH6/2nv/rynlVxkPBt4CHDv08qcJx++TvfcfbyGjD77r6vclLZwb96l+H0x4KMoA+d49oy++nw28nNCeGvAt59w5hPb5jxLLH/jej12vZcj37hl9qt9d+z6ccH1sgHyPz9ifcPzeU74v8omTVGTyvYywD+mj75s55zYT6p58U+v7Su/9VSnlVxl7yvdB8r1bRp9996F+H0ZwsZ7Q3yLfyHeDjBy+VxP2S/I9PWMRc+PXBsj3+Iwcvg8l9LfMZ9+3I/Sf3nXo5VOB/3DO/av3/jUp5VcZY30757YR1iF5oroa3xe10O/cF9/LCPV5+Bp+lvrdsu/nAS8h+BjwHefcTwhjEc5JLF++7Rnzun4vqF9ECBsuzPR6DLsP1oZwse/wqrM4JWNfQiUeN3nqUsLECKM3EDbNOAw4kPH1YwWhs3NxQvkOOJowu+/oZKiDmcOPqZaLzVhMuIg7blssAA50zq2NLb/KWEE/fK9Fvi0ZOXzvRz98H4N8WzJmxffR8i3fDTIsvg+LLb/KsPjed8x7TTLk25ZxOPAtdp98EmAl8GLCjVLROOfuDXyR3SefhDCA41Tn3NMSM54JvJeRyScrbg182Tl3r8SMab5Xku57AdN9r2H+1+/F5KnfR7uhJ4BEZuTwPa19nsP3QfPI91rG+16GfA8yZsX3MRl830y+f+/7aOa/78OZ/76XIN9W1hJuxpbv6Rkrme77CPnO6vtm7HnfaxIz9ke+LRnybafO93xonw98j9sWA9+HxpZfZcyS7+iHWRp9HyXfvfJd17/Whu9jkW8LuXyPTjYK8j2asT9hIFxffO/2Nt37Xoh8DyPftoyB79HJJ6E9388H3s7I5JMVtwe+6py7W0oGYRD7Cxi/rY4DvumcG3d9zkTVL/Vl4NHs/ptaDJwEfC7xHOAY4JvsPjkdhEHD/wT8e2z5VcZxwOfZfbIyCHXyw865JyRmPJ9w3Xaa77uOea8JHwBOYdeBzgPa8v0Vpvv+bMe+X+GcS/X9QOA/mez7Iy34Ppnpvr/mnPuDlAxsvg+MLbzaD34FOIFufX+L6b5fF1t+lWHx/fjEjFMIEx7uP+btZN/VMfNU4GTG+34g7fj+MtN9f6al+j06+SS05/tBTPa9FvhoBt9fdc7dJSWDMJ5iT7bX9qX79trBzrlDYsuvMlYRbp6c1l7bJzHjAKa3z491zo2rl02Qb1tGn3yPPnxxwCry+D6yB76PlO/fb6evsPvk8BC23VOBMxMzbsbk4/fewL84514dW36V8WDgc+w6+eSAtcDpzrm/TMzog+9Z2Z+3Wb8Xjnl7Pvk+lm59L6Ufvl8EvIldJ58ccEfC+didUjKY8z1ue88n35Ouh84n3znq9xHk8b163NvI93DGgYQJF6b5XpaSQfe+F5LHd93+/ODY8quMPe17L/L5HpdvohDfh/TE9zHyXZTvcW2UJhmz4Hs/5ofv1ch3LT3zfSTyPZXqs8cg35aMXL5HJxsdkMt3av/5rYCz2HXyyQH7AK92ziU9kK/G9xLCb7Zr3221z+e770H9HtcXkaN+t+X7JcDr2XXyyQF3Br7hwsSqKci3LSOH74PosH5rAsoCcM5559xpQ/9e5Jy7yjn3uYiy7uSce2i739DMWsbvNIY5JHbnUX2ubpCxI3RIR+HCYO+6SbYWEybsiWVfxt/oOIzle0zjYML3nPo9XNrg9sPoh++6m7pz+U65ubwvvusugswX33XbWb7743s/6n2vMHyPaci3LWOWfO+Xwfehhfu2bOfFjJ8Q0UoO3/9CfVvn6c65P0zIeBvjb6Yc5vXViW1jXLg5r+4mgmWEAfxRZPJtOX6rftvq9wLKr9/ybUC+G5HDt6W/JdV33TFJvgOHYPOdMhjS6juqXzej77qb+OeDb2v9lu/ufVvb5ymTR+TwbT1+y3ce33WDjHP4PizRd9fttZXYfEffIM9s+U6p34sow/cS+uF7f/k2++56f275HtOYJd/RE3Fl9F23neVbvptg9Z0yGFK+bfTFd9fn3/Jt5xDmv++DgFfVLLaCcAN9FC5Mqlg3ydbRhCfYx/JsoG5StQcAKZP5/Rv15xDPc87dIabwanDx25nep+OAN8X20Wfy/UDgcTWLpfp+DlA3qdofU/+7m4bF9/Odc7ePKVy+G5HD96sZP0nnMCfH3szQwPebE32/smaxJN+ECSYtvl+ckGHxfZzhe0yja98LCONbLPU76pyvumGkzvdK0ur3KsINaNNI7V/bH1t7LWUyAUt77YAM52Mp/eeWcYKp/WvybacU3ynnY6X4tnyPaci3LSOH7/8H1E2q9iAgZfLG1zB+0uVh/sY5d+uYwiuHb2f6b2rQXov6TfXId476fSi2+l03nnga1voddSNwj3wfQBg3PY1VjJ+w0Ip1f16y78OAukkbbylmFQAAIABJREFUVgFvjCm/yuiT77pxoam+Lf2ppdfv1dRv55n3XTnM4bvuOkXq+ZjF91Lq+zKmsT9l+D4wg+9De+I7tb0m3/UZFt+WMazTMuTbQEH7c/kO5PCd43xMvm3Ity2jL74nTfI1zIEuPBikMZl8L6H+fKwvvi3fYxqvo3481N+78OCfxsh3Iyzn36sZP2GhlT7U7yOBl9cstjdhgsoo5NtGxvrd6fFbE1CWwQ3A7YYGxjwQuCSyrDsBjSagdAlPcxkqYzn1lRrCby52IPIabL/ZZS7cCBuDddLHfVz8LLzWjKgJKKvvZW0cxWasQL7bzpDvcnzvXbhv6+AC+bYh32X5jp2YSb5tGbPmu+Tj937AnxsXf2Zkxn2A2xoWXQE8KSYDOJH6gXEAd3TO3TMyow++S6vfsQMV98VWv/ea8fq9CPm2It+2jJXUTyYM6b4tnZfy3f35dxPfse01+TYg343I4ds6kWjdDTRjke9GyLctoy++rS7WaH9u8r2QtP4Wq+/Yidfk25bRF9/W9V/jIm8EbpDRF9+x52NW38vluxe+rcdv+bb7jm0Tynf7GSXX71WMf7L0KPKdx7d1MGjJvp9izPhD51zdhGCTsF4ffGK1T2tE9Rt5esvfZTTjEOARXWYQJmQ51rDcPsRP3GL1fQ/n3J0jM+TbxoOBYwzLpfh+KvUPqQG4p3OubsKgSVjX/0kxY6Yy+T4UOL7LDJr5/ovIjKch35aMknyvofv6fS/n3B0jM3K016x9eLFtqcWU1V6LvVGwSfs8dqI9+bZllOR7ReG+uz4fy+F7NfJdS3WN5a+Ni8cev9cCf9ZlBvAnwFGG5fYFHhuZ0QffrkFGSv1e1XFGk/rddf9a6b67Hu/QF99Po34STYB7u8iJ7inLd+n123KuVHr9bjLeYWZ9V+XPku99C/fdafscu+8mY+FHKen4vW/lrhGZfC9htnyvdPETI8u3jSa+Y8+/90O+LRny3SzDQl98W7/LKNb2uXzn8d11+zyHb+t2yuF7TQbfUXXPOXc08BDLosAzYjKQbxOq3414Orb7v//YOXeLyAz5ttGL+q0JKMvhC8DDqr//EvgIhAFCzrn/dc4dMPTv3zjn9nfOPcY5d55z7hzn3FnVD/+fgMc65852zj3WObfCOfde59wPnHM/cc4dX5VzonPu4865zwJfdM6dNnivev9DzrmHN/j+TQY/xU4m1uQmydgbKq3fzWGbbGfXD4ULxtbOsqUu7ia+vbDX7ZJdzJrvZfLdeYZ1/RdQtm9r46tk302+W8m+rY0v+e5m2ZjP9cV3H/a1TZcdxvrdcvmOOae6S4OMe0WU3/RzJWf0wXeO+l1S3cuRsQB7u+v3yHcj5NtGacfvktuEXfteRFm++1D3mi47TJP2uXy3v2zuDPm2UZKLHBny3c2yw/TFt/UpgXvFXJSmvPZ5yecA8m2jL75ztM+79r2csnx3XfdSMuTbRkkumi4b87lY34uRbyvybaOJ71nvb5Fve4aV2Iwm17xiH9BmzViN7YF0oxwMHG1c9m4u7uHWd8M2kQCUfa2yD74PwTYxDMDd5dtMqb4PBY40Livfdrr2vTd5fMeMZ7o78m3F2g5pMs709zRsry3vSf9ayW3CJr4b3+TT1HfT8oc+J9/tZqT4ttyY1uS7jPucxre0+7ko38Ba4HDjsveIvB56d8L3s1Dy8buka66xvkur333Y1zZddhj5tmd0sewwOdrnJflOcdEH3yVdY+9L/e6DixwZpfvuYtlhSnKRktF1+1y+u8ko8vyb2fTdh3MA+e5m2WH60N9Smu8+1L2my8Z8Ltb3EuS7i4yu91NN7hMZponv2O10D+zz9eTo65x139Zr07Ne96y/RUf3/Wvy3c2yw3R+zqcJKMvho8BfuPAkjzsA3wfw3u8EPgg8vlruOOAc7/3VwEuBB3vv7wg83Hu/rXrtdO/9nbz3pwP/AHzVe3834P7Aa9zck3LvCTzZe/8A4N3ASQDOub0JO5vPd73SDWkyGCZm4IzohlgX8j0/ke/5j1zMFvJdDjlcyGE3xGzXJudhsedsfcno+nfbtPyY76N9rZ2ut1UO3yWVXzql+Z5lSmuHyF23yEU5qO7NFnJRDjm2r3x3Qx/Ox2bZt86/5y86/57/6Px7fqJzgNlCvuc/pZ3ji27pwzW4pp+JmbCsD9upLxlNP9N1RqnbqS8Z8m2nybG11PVo8hkXmdGH7ZQro2tK67+c9fZpUf0tkROONorouPzSmTXfJVPa+XfXY0ddhoySj62lHZc6zyi4fpe2fUvdTn0hh4s+tM9zoLo3Pym1DdIU+bbRF999oQ/nxvJtR2PL5j9F9bcIM6Ue++TbTmn9a6JbdOyzkeN6qNqSs4X618qhtLpXbD2d5R9JUXjvzwWOAv6S3Sd+fC/wpOrvvwLeV/39beD9zrmnMXmg54OAv3XOnQ18nfDU1COq977kvV9f5X8DuJlz7sDqO5zhvd/eYBW2dLTsMJs7Wjbmcx7Y2rRw7/0OYJtx8Zuq5ZuylfD9LMS6aPK5rl2kZFjXI4fvbfLdeYZ82yhpXwvd/25TfN9kXDyH7z7UvabLxnyuZN9bKMt3jmNGDt+NMzL5Pg+wfu6ciPKbfq7kjCbt8xjf2+lH/S6p7qVkyLc9o4tlYz+X4/w7h++dTTNo5rsPda/psjGfK913F8vGfq7kc4Cu+9f64rskFykZnZ6PEdrNJfku2UVJ53wl+y7NhXzbmPX6XVI7JNZ3acfvPtS9HBk5fG8t2HdJLlIyOm2fE3xbxxVs9d5bz6OH6YuLkvZTUeffyHdXGfLd/rK5M0o6B9D+3E6si5KuwW0FfhVR/uXAFcZlf+m9j/lNnYu9/7zka5UlZcT6vgy40rjsL6qHoDdFvtv/3Bbku4tlS83I4fvn3nvrufowP0W+rXTd33IT9vbalsj22qz1daZkWNd/J+X6nsX+ta7Px/riuw91r+myMZ+L9X0JcLVx2fMix6+d22DZko+tffDdl/pdkoscGTux3xc0zE3Yx4bP+r62pPZ5yb5zXJsuqe5B93WjL75L3teW1O6UbzslH5ea+I5tr1l9q+6VkxHrextl+e6Di5SMrs/HmvgueTuVllHq+bd82ympHRLbXptF331oh5TsO0d/akl1D2b7fKwvdU/9azZKq3vFnvNpAsqy+AzwWuAjwy967y8CrnDOPQD4Q+AL1evPAF4MHA6c7Zzbb0yZDjjBe3+n6r8jvPe/qN67YWTZ04DHAycxN8mlCe/9ddh2CB5Y36TsIdZjG8i0rfo+sRkWro0cjNUk45qYwqvvdW3HGU18b4jJII9v6/rn8B1VL3rkewPyXUuBvmP3533xbc3I4Ts2oy/H7774tq5/yfW7NN9NJlSPyYj1fQnwOePib4/JIJwzXGBYbhthwvsY3o1tcNxvgS9FZuTwnaN93nX9vhbVbyvybaOJ7+sTMixsmmXfVfmW9ksO31vlu9vzMZr57rq/Rb7l24p1/aN8VzdYlOQ7dl8r3wbkuxHybcvYRlm+YzOuQb4tGdvoR/vc+t364ju2fy2H72uR71p6VL9z+LZ+bqv3fnQsh5UmvhvfvC7fjcjh25qxUb5NvnfSve8t8l2U79jzsXdWn6/j5977syIzrNcHP+arh083oTrmv6fl7zKacT7264Ox10PPJEy+Vsdm4NTIDKvvn3nvvxmZId82Pk2YPLWOHL7P895/KzKjie/G+6mq78t6/T/W92+BL3eZgd33jfTD9+kF+/4N3fv+FLaJkVN8vwNb/9pPvfffjsywtl9S2mvW30lKe83a/xDbXtuEbaxRSnvN+t1S2uc5zr+79r2V2fN9Y2RGk+vf8l3PrPvehv1erdjj96+Br3aZAXwS20TYNxDuU4uhSX9L175LPn6XVr83RmZYXWwu3HfX/Wt98W1tn5/tvf9eZEaO9rl828hRv2fNd+y1jBy+resv37vf299qBmW1z3P5bvzw00zjW3L43oht4hb5ztM+l+92M0r2vYXZ8x07aVKT8zH5rqcvvjfIt8n3DvKcj8X6tq5/yb7PA6zXg2P7UzdRju8bC/bdZP9Wcv3O4dv6W/wf7/2PIzP64tvaXi3Zt/W7RddvTUBZFu8F/sl7/9Mx770b+CBhYNkOAOfcsd7773vvX0p4Ct7hhIG6q4Y+99/Ac5xzrvrMnafkvx94HoD3/mcR3/9SwzJX+ciJn6rBkJaLlJaBpZMyrqP+ZsQd2J8CP45rqJ99fyvxOycI369uB3Wdj58YBmzbWb7l20T1uata+h6TMmbJ97UZfF/pIycKyei7bhvId6AU35Z2xKSMvvi+HJvv2BuNQb6t5PD9YurX43PYB/LvQnXifQr1A3Re6b2P2lbe+0uBV9csthM4peroi8nI4ftqbL5jB2tAqN91HSiq33bflpuNJiHfBjL5vpY89btuss6ifVf7T8t2Lr19Lt8GMvq+2rBoH3xvoXzfOfbn8m1Dvm0Z8m2gge8r5oHvum2Qy3dqf0spvhsPbK8yLL6t32NSxiz53uQjbyzP6LuufZ7km7Avl+8aCvMdff5NWb67Pn6X7nsb8m1Fvm1Yj9+WcReTmCXfV2bwnXL8lm8DmXz/DviPmsV2AC+IKb/iTOonC7kG+KeEjDcAv6tZ5qfYJy4cx99RP4j3Ez5yYreqLfU3hkX/0UdM7FZl5PD9aeBrNcuk+n49sK5mmXOJf3Ah2Hx/3EdO7JbJ9/nAG2sW28788F33sMocvj/mvf9OTOENfUcN0C/M9ysSMiy+z0G+c/jO0b92Fbb2WuyNpxDaUnXttY0+8sbyjOdjnfanYvO9HfkuyXfK+fcm6m9GbMN33Rj8zch3X3y/DriwZpmzsU9UOY6/JfxmpvER7/33YwqvXLzQsOjLvPebIjMsY3Rz+U7pb8lRvy39LaXXb6vvlOO3fBvI5PvXwFtrFtuO7TxhEn3yXTcGP4fvy1W/e+PbMgZfvvO1z+t8b/CRE0c09N14opAqQ77t5PBt3Z/Lt8137MQwIN9W5NtAj3xvRL5rke9GzJLvKxJ8W8b4tOG77hwlh+8bSWuvvYj6e45P9d7/JKbwyqF828jh21q/t8QU3sB3yv78Z8C7ahaz9uNPQr4NVA67Pv/uvH5rAsqC8N5f7L2fNGDxM8BKdr2I+Brn3E+dc+cBZxEGCX0NuI1z7mzn3GMJA5MWA+dWy00cqOTDxDO/IPJCpQ83p13I+ImTPOFglzJRyOA7XsH4yr0DuDD2AuUQFzC5MbkN+F3sjgOg6oA9n8k72huB82M7aquMLVXGpIEnG6kfdFaXsYl++L4Q+bZk5PB9OfJtydhCuAlgmu+6QSl1GRbfKQNncvnuy/58VnzXTRBbR53v8+Vbvq1k8n0ecBzjj9Ee+DDwmKojMTbjDOAJjN9WW4GXe+9fHlt+xYsJ5xjjfrcbgMd5789MzOiD71Laa32p33WduROR70YZlxM6/+a779+Sx/ekjs4N9MP3BT3wfQPzx/dFdOv7MuTbkpHD90bku5YZ8n35PPI9qc9GvucyLL5TLrTm8r2OMnxHXWitMmbFdxvt83XMf9+bqfed2r82731X/U3ryON70uA6+Z7LsPiOfghVJt/bkW9rhnzbMvrk+yr2rO/ftuD7fLr3/Tvku658+bZndO6b8BC4VzN+Pa4BHu29/0Js4VVb6njgkxMW+Q3wAO/9bxIyrgLuD/xowiLfAI7zCQ/T8t7/GHgwcPGYt3cSxig+Prb8KuNDwF8x/oG0W4C/897/W0oGNt//FVt45fvhTPb9v7Tj+35M9/3AlnxfMubtge8nxJZfZXyQMnz/d2zhQ74/NWGRge/fJmRcSfD94wmLfJ103z+i3vcTY8uvMj4IPIXxD8TZAvyt977ugZl1nAK8hu58byef70k3O32d4Dtqcucq40fAQ5js+72k+z6Nyb43047vk4HXMtn3Cd77L8YWPtRem9Rns5XQXqubUHBaRl177Xq6b6+tJ7S1ovFhouCLGT9x0k7gsurYlZJxKdPb5xe01D6f5vt8+S7C93aC75Tjnidsp659T+tvuZ4w5lm+++H7CsLx++wJi3wVeJCPnFyqyvgB4fg9bnLGncC7gSfHll9lnAo8jcnH7xd671+XmHEJ8993jvp9I/2o3zl8r0O+LRmd+waeC/w7we0oVwOP9N5/ObbwzL4njWHvk2/LA1KnZVxC8NqH+j3Nd2r7PIfv9ci3JaMU3+P61ptkrCf058j39Az5tmfU+V43D3zfxGz4vjTVN+F8ck/7Tu1P3dO+PaHvWb7753vceYx8VzTwXTfh2LSMOt/XId8Dchy/6/rX2vB9PtN9/676LrEZ3wEexvhJ5HYAbweeGlt+lVGK75TrxnW+tzA/fJdSv+smBK7jmcCbGD9G7krgeO/9N2ILH/I96ZrqfPF9A937vobufXdav13CNv49Z5555g+PP/74uyYX1ALOudoV8t67HN+lTZxzdwVe772/d4cZywlPLr+LT5j0yzm3ANgHWFG9tIUw2+u4yhibsQhYAyyrXrqB8ASf6EbgmIwlwL7AEkKFvha4LmXHNCZjOWFbLSJU6OinEE3JWA2sJkw4u43gInrA+Zjy5due0alv55wDViHfloylVYZ8T8/orW+ffjP2aMae8L0+pUNtTIZ82zPk25bRJ99rgIV043sh8KfAp6uX/hV4n0+4gWhMxnLgccw9zeJFVUbq4J/hjAOBk4BXVS89hfCE7Kgn+EzIGPgePIFh7458D06wD6O7+j043zqE7ur3oDPiQLqr34MbNPeju/ot39Mz+ua76/25fNdnLCKcGw8mQFP9Hl9+33wvrV66Htg0D+v3CsK26qq91qf2uXzXly/f9oylVcZi5Htaxp7yvbHlvs6++F5NcJ7T93qfMGHqmIyB72WEi8fyPb58+bZnyLcto6++N/mEyRYmZMi3LUO+beXn8r0GWF69JN+TM+TbliHftvL74vtgwmR4/1K9dCJwuk94cNqYjFtX5Q6eSP8w4L9aPse/N+Hh1wD/AXzQe//DFstfRJiA7YzqpX8G3uu9/12LGSsJkxu+rXrpFOD9Pgzobitj1PeTgY917PuhBN9t7kPuQ5hwErrzfTzwieol+Z6cId+2jBy+DyH4/ufqJfkeX/6o71cQfK9rMaMvvpcR2iGDSb9Wd9ReG9wQeBih37nNMTqD9trgAWQHVxldtNcGN9MdSPvttcVVxuD697603z6Xb1uGfNsz+uj7gCpDvnfPuC9hwmiANwCn+TC5e1vlLwIeAXy8eqmL4/cqwvH7rdVLJxOO3xtazOiLb9VvW4Z828rvi+9DCe3zV1QvPRH4uG/3vqgcvlcydzO+fE/O6Ev9lm9bhnzbyu+r7zWE61fyvWv5Dtib8EA2mN++B+MVPWGbyffu5efwvZBwTTeH78GEXKrf48sf53u9T5iQaUxGX32v8gmT303IkG9bRh99H0poc8r37hnybSt/MfAo4KPVSy8n9KcmPQxgJEO+7Rmq37aMtYT+tX+sXno88ImW2517wveGlq/h98V3J/W7dxNQ9hHn3N8SZp59vPf+Wx1lHEd4Cu2/e+/f0EWGEEIIIYQQYjyumkjfdzhZvjLKKF8ZZWX0YR36lNE1fdlOyiij/D5lCCGEEEIIIYQQQggh4ulDP2Ef1kEZ5ZSvjLIy+rAOyiinfGWUldGHdVBGOeUro6yMPqyDMsopXxllZfRhHZRRTvnKKCujD+ugjHLKV0ZZGX1YB2WUU36fMnIg38qYT+Uro6yMPqyDMsopXxllZfRhHZRRTvnKKCujD+swXzMWtVGI6Bbv/auAV3Wc8WXgiC4zhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCLFnWLCnv4AQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhOgWTUAphBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCNFzNAGlEEIIIYQQQgghhBBCCCGEEEIIIYQQ/5+99w6X5Kjv9d/anFe7SiivBAIMNplrki/RBPuSc44iGzC2cbq278/X2AaMiSaZaAMmyUjkbHxtwMYEgQ02YECJIGkVV2FX0m7//qhuzpw553R/u6qrTk3P532efaQz012f6Xmnqrurq6uFEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCiJGjCSiFEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIUaOJqAUQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBg562ILcM5tP/3009c457YP8YGEEEIIIYQQYl7JcV6ljDLKV0ZZGWPYhjFlpGYs35Myyih/TBlCCCGEEEIIIYQQQohwxtBPOIZtUEY55SujrIwxbIMyyilfGWVljGEblFFO+cooK2MM26CMcspXRlkZY9gGZZRTvjLKyhjDNiijnPKVUVbGGLZBGeWUP6aMHMi3MmapfGWUlTGGbVBGOeUro6yMMWyDMsopXxllZYxhG0rMqKpq30rvrRnm4wghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCiFLRBJRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEECNn3Wp/ADFa1gBb6v8/AFyXIGMdsKn+/6uBQwkyNgIb6rKvSlA+wGb8tlwPXJMoYyveybV4H0Mz6Xs/fluG5njg54CDwNeBSxNkyLeNHL5Vv+3Itw35tiHfdlL73gjcHu/8HOC/EmTsAm4NrAX+Ezg/Qcbk/vtrwGUJMn4OOBHv+sv4+jEkDrgdcDiwF/jKwOVPs5F09buh+e0OzQkT/38YaXxvTFDmSmwmXXveIN/tyLeNHL7XT+XN6v67Qb7byeU7F/Ldznr856/w39Os1m+dj9mQbzvybUO+bYzN90F8n04KUvt2eBdr8K6H7kMA+e6DfNuQbxs5fK/FbwfIdxepfW8C/ked80PguwkydgO3wv+mvg38OEHGicBN8N/T14DLE2TcHN9PfyW+/3zocRsO7+IwfP/5VwcuH8bj+yTgxnjfXwWuSJAh3zbk28ak74vw7dTQ5Pb9LeAnCTLUn2rDTfz/BtIdrzWo/9yGfLcj3zbk287PT/x/iu2YdHEb0u2/G04FvpcgY/fE/x9Dmv33non/30Ga4zXVbxtjqd/ybUO++5PK9+aJ/0/Vnh8+8f83AH6aIGPPxP9vB/YlyEi9/55kE77veWhUv+3krN/y3U4O35u6Fxk0S75XRr5tyLcd+bYh32FZ8r0yk74dftzD0Mi3jVy+m/EtVyPfKzEm3w2q3ysj33bk24Z8h2XJ98rItw35tiPfNtZO/f/BBBnybWPLxP/fEPh+goyZ9D22CSitA0B2JP0U88064Gj8dzx5k/yVwAUMU8E3AUfhLxI3VPgbMi5gmJ3rduBIFl9cP4if9PBChmlsd+MvrG+YeO1a4GLgkgHKB/897WJxXb8GPzh8iAvsOXzfAvjfwL0nMvYDpwP/H8MMRljO9/X4SXRmxbfDb8Nq+N6H/55S1e9D+PY9Zf2W76U0vney+MB5aN9HA9smXsvl+1L8dzUrvpv2fPKAU76X0ub7wgHKh/S+NwG/CzyRxQOqvwK8FPjEABnHAH8IPJSFk71DwKeA/wv8+wAZt8Tvv3+ZhX3GNcAHgD/GO4/lfsCLgNtOvHYx8A7gzxhm0pBnAM8GTp547QfAa4E3D1D+ZP1uuBHp6nfDTRi2fk/6bvgOw/rejv+uJjsobkKa+t1wCuna8wb5Xh75tpHD93L775vg998/ZZjOr+V8p9p/N+T0fSH+HDmWNt8XMMx+b7V8j6l+z7rvQyz0r81a/V6N87EUvqfPx+R7MWP1XbHQnyrfC8i3Dfm2MRbfm/HbkdL3Dnz/mny3I9925NuGfNvYAvwe8HgWn5P9K/DnwGcHyDgO+CPgwSzcbHwQ+CS+7+vbA2TcBt+/dk8WflNXA+/HX//eO0DG/YHfwk+61nAR8Db8tYYhBsk9B3gmfqK9hu8BrwHePkD5OXwfj79ektL3bYHfZ6nv99UZqX2/hGEmJnwO8Cz8xKkNOXz/C34bUvr+BN7Ffw6QcVt8/b4H6Xw/APhNlvp+K75+z4LvrXjfjyOt7z8CHkQ638vtv29C+v33TfD71YsGKB/8vnvyunTTn7qXYR4OvFx/6qkMf7x2AxaPCb0x6Y/X5HspOXyvZ2H8WoN8L89q+b4avw2z5Pto/P6pYWjfD8Tvv2858dp/4fffLyN+/+2A5+LHuDR8Hr//fhXwN5Hlg/9+fh+//274Kn7//WfAPwyQcQILx2sN3wY+jt9/D/Hw3tvjt+PuE699h4XjtYsHyBhL/T4aPxl5Q1O/L2SYB1KNpX7n8r3c9W/5XsxKvpux4fLt2cbC+VjDV4Ev4dvzzw+QcSK+PX/QxGuT7fl3BshYrj3/LvDeOmOIvsgHA7+Bv5el4b+At+D330OMeZ72fUPGU7+b8WuzUr93AkeQt36PzfcFDNPvLN825sH3BQwzUd1O/P57coLZXL4vwm9LLPJtZwy+1+D7W+S7G/m2kcP3Fvx2TPq+Kel935iF+0OHQL5tLOf7EOPwfQB/vCbfC4y5fsv3UuTbhnzbWcn3JQwzfgb8+f3k9RL5Xh75tiHfduTbxnK+J+8Ple8FUvvegR/X+ZiJ174O/DPwp/V/Y5lp32u6FxHCzDr85DyHsfS3ta1+b8v0Sj3ZUpezfep1V+eeQvzEqrvwF743T72+Ft9o7WFDJnAnAAAgAElEQVTxzeAhHFP/2zD1+ob69WMjywf/PR3J0u9jM377di9Zox/r8N93St93wN/ccd+pjE3AY4HP4W8CimEl3+vI5/uYyPLBf87V8r2dtPV7Denr96TvWFL7dnT73kUck76nf/9D+9429fqQvnezsu8jmS3fR7D45lmQ72m6fJ+8ZI3+HEta35uAM4FfZ2m7fTv84LgnRmYcj79p67EsHjizBr+//RR+/xvDnfD77/uweJ+xGX/j4GeJP9Z5CvAeFk8+Cb5z+IXAGcQ/ifhV+IGC07+dU4C/rP/FMJb6ncN3U7+nn44xS/U7h+/1pPd9Z7p9x35XY/F9Mqvve3qf2Jec++8x+z6J9L5PId73Vlbf957I8kG+rbT53oV8N8i3nRJ83yCyfIvvw6ZX6slKvh3yPc1xyLcF+bYxJt97SO/7BOS7izHVb/nuRr7tpPa9Bfgw8DyWHof/Iv7hhY+ZXqkne/DXnx/F4v7ltcCvAJ/G99XHcFf85Gf3YvFvagu+//+z+MFBMTwTeBeLJ6cD7/pF+AfJrJ9eqSdvwE9KcNLU66cCr67fi2EL8BHafT86MmMP/vtu8z19DaIvd8NPrrCc7ycBnyHe97PI5/vEqdcb338aWX6b7zswnO+V6vev4l0M5XtyslEY3vc7Wd73bzOM7zeS1vdWvO9fY2Xfj4rM2IP3/UiW9/1p/GTAMVj239PHJ31p238fxXD77xuw/P77WPyg2BhyHq9NP9ylOV4b4nqJfNsYi+9m3ONq+p4+xgohh+9TWN73Fvw27JxeqScW39PfYV8a31unXh/S93OBv2Xx5JPgXf8OfuLD2HO+NwIvZvn992vxD6ONYRvwUfy2TNfjOwB/DzwiMuMUFvbfk7/btcD/wh9L3Toy4x7Ax1g8WTh4/0/GHyMcEZlxOOnr9/Hkqd+Ho/rdRU7f08f5s+R7A6vrezfy3dDWnt8R+CDw8MiMG+Lb80ewuJ1ah3+AxmdYek7bl3uxcnv+FIZpz5+HfxD6LaZePwr/gPn3Er//Hnv93sFs1e/jme36vYbV930K8t0g3za6fN+Q4XxP31OQy/dxxPcJy7edsfg+Gfm2IN82cvjeju+/Tun7CJb3vR7vYbpPLAT5tjF23xvJ53vH9Eo9sfiOva9Svm1YjtfG4jt2XqIcvk9Avi2stu+jGc730ch3F/Pi+8jI8nP43sjq+z4F+Qb57sMYfO/Ez4vwTJZ6vQvwIfxDwWOYed+xPxSRj59M/f1Y4C9W44O0cBxLB7RMsgZf8WM4nvbf7fp6mVDW031z+hbiGqgddE8GuIu4HdJRdE8us9wJVB+O61g/1vc6/IX76cZvkuPxA+RCKcX3buQbbPU7ZsJRq++YE8ocvo+k2/cxpPcd09ZCHt9dNzPKt+f4jvWH8H0C4/DdNblMrO/fwQ/kWwkHvJK4i6Gvpd3nVvz+N3Rw3Pp6/bbf7YnAawLLB38C9HLaJ4i+M/BbERkPxA8ub+Np+JvUQrHsv0uv31bfr47IaG5QbyNX/Z6eJLsPOXyn3n+X5Dv2+DyH766b23L4jj0+79p/NwMqQsnheyfybaXr+LwZABuKxfdW5Bvk24p825kX34eT3vexxN1IJN82dtI9GYF8e+TbRg7flvNv+ZbvvhltfV9j8j09qUsfjqYM30NcL0npeyPj8P2/gdu3vL8G3+8c8129gfbvajvwdsLH2WzC96+13dRxMv46QCg3Af68Y5m7AS+IyHgk3ZN9Pgf45YiMP6B9ss81+OsdMQ8esPpuq59tbKrXb/N9CnG+b0q377sDz4/IsPh+Ln7yh1By+H4j7dcSc/l+RWD5kMf3o+ie7HMI322Tfa4B/oq4iYu7fO/At8ehvh3+eK+E/XfMpCqH0b3/PoLZP15bS9zxmnzbyeH7hI71h/BdwvH5NmbDd9fNyseR3nfM+XcO3zfDTwzZxj3xEzOH8hi6J29+Pv44IZQ/pH3y5rXA64ibSOeNHevvAN5G+P57c71+200dNyLuYbQb6T6GGaJ+d01GcATt4667uAHt9dvh63fMzeVjqN9W34dHZIzF9/HIt4Ucvv8P7ZP5Nu15TD/hm2gfx7cT3x6HsgV4K+3t+anE3Wf183RP3vzL+PPjUHah+m3BWr9j+ow2kb5+5/DddXwu3x75tiPfNiy+j0S+5dtODt+lnI/J93h8H0d63119TtvJ47vrfqA25NvGWHxbzseOJ73vmMmAmvFQJfjuun+7jVy+2/opxuQ7pn8th2/Lvd05fOdoz1W/y/IdM2fXGHxvpgzflvu328jhO/X5t8W3ZbxCG/JtR75t5PD9p8DNW95fh7++1XXfYhupz8eS+9YElPPD9IGq9cDVutx6bAPS1hH+JI6d2G7o3kr7RJht7MY2QCmm4bA2nrEnxV24iIwNpPf9AGyN2z3wA79CkG8bOXxb6/c2VL9L8b0e+R6Lb8sFr1jflgHl2wifuCWHb+vFiRgXTzQstxZ4amDGqdgGlB+Df9p0CA/CNqD8Xvgb7UJ4KrZj1CcR/pt6xsDLLUdJ9Tt04lSr71/G3zgdgnX7c9Tv2IuUXZTu+8HYJvq8N+l9x+xbS/Id+rvN4TvX/nvI5WLWnXffh2HzvR35lm8bOfbfqX9TVo8xvjci30Nn5PAdmiHfw2fI9zh8p+5vyeXbckF7PeETK8q3Dfm2Y3VRcn+Lo3tClWa51L43ULbvkup3qO/NwOMMy62n+8FCK3Fz4E6G5U4E7huY8TBsPu5H+MRJp2EbB2TtZ1+Opw+83DQl+T4J7yOEXL4t18eeSvj4sNS+t5De98/T/gC4hpMIr98Px+b7Vwh/qM9YfD/WsFzpvg/D1oZuJ3zitZL6U2OOz63Ha6HHIZvIc7wm393k8t01wSXIN+Q5/5ZvG0/Htv9+Gun336HjW7bSPSE5eBdPCsy4JfCLhuVOIXyi+0dg+z3+L8Jvyiipfpfc39KnfodOlJujfqdua/tkyLd8W9hG9wMHwPeJPikw49a0P0Cm4YaEt+ePxPa7fQDhEyNb999PNS63HKnHt5R2vBZav3dhq987KPv4PHXGGtL73ox8l5Ih33bk20ZpvkOvXZV0Pla6764HioB8w/z5Dp1IM4fvMZyPybedsfi23INrPW9bjhy+D8PWZ53Dd8y9H/JtYyy+cxyfW3xb2/3lKMn3TuTb6rvk/XcO3znu5RuD7y3YfFvvQ1kO+bYh33bG4HsXfixvF1uAxwdmbKF9QtOGon1rAspxcALwYeBL9X+bwemvx8/E+lHgj5f5+xeAz9brvZuFg9mPAX8EfBx4tvEz9BnEFTrgq0/HZWiG9WbPdYTNkOuwNwhbCbsovQX7BZbQm1tzuLAO9HbAfQIz5NtGDt991gu9iCHfNvp8v6Eu5NtGDt85XOQ4Rsjh27peqO/bYz/BCr0Z6j7YP1toRo79tzXjKOC2AeVvBe5iXPau2DoBlsuwnsDl2LeWfLxm/Wwl12/5ttPHt2XA0zRrKMt3jv13yb+p0nyHMBbfJZ3zyXeaZScpyfd60vsOPY/ZQnrfOVzIt42x+C5p/y3faZadZCy+reuV7LskFzkyxuJ7DC5iMqzfccm+x9LfIt827oh9YG7qvm0In5DQmrGW8JvwrRnHArcIKH83tokEwG9DyECmO2F/KFpqF32XDVkvh+/j8JP69KWP73sTNgbtjth9q37bOI6w+n04cDvjsqG++9TvHL5DM6z7ZNdj2dCM9YRdq1xLWcdrYzj/lu+yzr/n3bd1vbGcj5Xs27qvOQE/iXJfjgRuY1w29Br+nbHX25KP16zrrcM/VDeEMdTvbdiP80ruC8lRv63f8QZsNxxNI9/Dr1ey73Wk930X7Ntf8vmYdb11pD//Pgm4WUD5OXz3qd8lXx+zbr/rsew01s+Wo36Hfk9bSe+7pPEt8j0O33323/JtQ/1rNmJ8W9cr2fdY+lvmzbfOx2zId5plQ9abd99jOR8rzfeGgPL7+J738+/S9t8hvtej+j30ernOx+R7+GUnsX42+S7r/Fu+h/0s05TmO/VcOvPu+67Yx0ylHksIBfsOfQqQyM9m4AsTf+/CTxQJ8BfA3+EnkXw88DIWnlB4I+D+wCH8BJSTf38J+M263N8Hfqf+B37Ab5+BOn0GFodOfNpnvdCnCfYhZDv6fq41wMGAdayEfk85MvpMIBRyMxT0+2whvvuuM8++U7vIkTGPvkt1kSOj7zoOqBJnhJDDxRh+Uzl859jv9VkvZCK/vuuFbkfqjD7ruHr5/T0z+vxmS27PSzteC/muctRv+baTuj3v+/2m3n+X7HsM5wAh59+HAtaxIt92cp2PzbrvkjPkWxlDLBu6zjz7HsNx5zz6ztEXUup2lNa/Vup+r+968j38spPMo+8x9LeU3Lct3zbG0rc9hu3os84a/OCwqxNmlPo99V2v1O3oU37j+5qeGWP4nvquV+p2yLedeTsfc5R7fF7aOcBYfIeg8+80GWPwPe/n36n3fX3WWYu/6ePanhlj2X/n2I6Szr/H0taWXL/Vns9mRqnfVY5jzhztYJ+MUseO9l0v9IHZKZadpLS6V3JGSePX5Dt9Rknjmcbie56PO+fRd6l1r+96Y/A9z3UvR0Zpvue57vVdr9T+ltK+p7FklOp7HuteqRlj2IYSM0qtG6p7ZWWUdP5d8vc0hrrXdz35tiHf6crvu57OAdJm5NiG0sYSluoi+IOJ/FyDf5Js8+/FE+/9IvC++v//DrjjxHtnsPgGzObvHfhJJptJLd9dl9twes/Pd12PZfsOYApZ7/rAjD7rhWzHIewTzh3ssewkfT5XH2+h64VmnNNj2XMDM1L/bvs4nHffpWXIt43Q9nweffedDAHGsd/ru948+86x3+uzXp/PE7peju0IybgUuMK47GXA5QEZY2gHobzjtZDvKkf9lm87Odpzq8Mc+++SfY/hOES+06xXqu/rmT/fOTLk28ZYfJfaTsn37GbIt4157l/r67vvZCeQx7f612yU5jvUxTz6Dsno4/t6wnyX1tbKt33ZEN/z2Ledejsq4LyA8vdin1Cyz7KTlPQ9QbjvPt9vqb4vop/vvpMRQlnfE8x3/c7hu6TvCcq9dtV3vdTH56H77xzH56UdE47Fdwg6/06z3hh8z/v5t3VfE7r/vhD7PvkCwr6reTxeK/UYIUf9Lm3fWnL9Lsl36DaM5XittOOQUN/WY+7U+yQIb89ztLUlZRwibP+dw/dY6neO87Ex1O959J3jPCPEx3XMn+9Sz437Zsj3fGWMwXfJdW8Mv1vtv9Osl3o7qh7LTpLD91hcyPfw65XsYt58l/w9lZaR+vxbvseRkdp3n+Pzkr+nsZwDpG7P5TvNevJto2QXYzhey+G7tLGExfrWBJTjZLKCXTX13vTfK9H3RoDLsU/ccmnPshsuMy53kLCJgMD+2a4hvGJbt8O63DTXYvcX6uIK0vv+mx7lfygwQ75t5PBtXe8g9knBQjOupmzf1kGjOXyHbod828jhu8/+O4fv1PvvGN/Wzxb6PX0X+FfjstZ95DRnYv98oRnW9S4BPpw444vA9wPKP4if1N3Cuwib8OQA9vod+pvKcXzex/dHAjPGUL/7+M7Rno/Fd2jnXer991h8l7b/Tu079HuaN9/XI99j8H2Jcbkcvq9Cvkvynfr8W77Las/n3ff+xBkl9bfId3rfl2HvG5h339Zjixy+Q1308T3v7Xnq/pb9yLcV6/aX7Pvfga8blw3t2/574ErDchXwt4EZ7zAudyHwicAM6/Z/nrAb5A8A7zcuG/o9fRM4y7hsyb6tn20svkNdfKP+lzKjJN8XAJ9MnPEPwPkB5e8HPjDwZ5mmJN+HgHcGZvTZf+9LnHElYRNMVaQ/Pu9zvBZz/l3K+dh1yPc8nX+X7tt67hDj+4Bx2RznYyX7tu7PPgv8KKD8a0i///4a8B+JMz6AbQxszP7b+tl+AnwqMGMM9fsa7PVb7bmNHL5Dv6fSfKfuX4vxbb3mWvLx2leBbxmXDW3P30857fmPgU8nzvg08NOA8nP4Lql+VxEZqt825tG3pe9nOay+9yHf8t3NPPrOcXwu32kzLsM2scOYfFvHb01yiDzn39Z7X2L61+bJ95WU67vPvU5j8H0t4b779LeMwfcY2vOx+A79nuTbzry15zHXv1P7tq53LfZ5iaaRbxs5fPep36l9l3x8Lt925NtGn/136ns35933F4D/Ni4ben2stOO1IN+agHIc/AvwsPr/Hwl8ybDOFfgf5h3rvx8F/HPk57jImGvtDJ3mALbGYy9hT14H/51YdhYXBpYPcDHdjefBerlQLC6uJbxxqvDfcxcxvr8DnGFY7tXYB7BOI982cvguqX5bvs+VyOHb8nuUb/m2UprvUHL43kt63y+l+wL+d4APBpa/H3iVYbkz8BNihvBtbBNLvorw39QHgO91LHMI/32G8jq6f7eXAW+IyCipfodO3Gj1/UrCfV/OOOq31XdoZ1EO39/CNrFkDt8xx+c5fFt+jwdI79v6fS7HAWwDc2PqXo7zMatva2focuTwbfk95vCd43gt9vy761hKvsvxXRF/Pibf3cyb79L336l970e+rVj2N/It31ZyHJ+Pxfde5st36ER+8m1nnnzHuLiUcfh+Cd3XjL5F+IOPrgT+yrDc+4AfBmachW3iub8k7OY3gPcCP+hY5iDwssDywV+f7xqgdAnwxogMi+//IL3v9wJnB2Z8DdvENbG+u36PuXy/KSLD6jv0wUf78Nd9ungP4/D9F4HlQzm+/x34aGD5Vt8x9fsabDfWjGX/naN/LXSi7UPYji8uI/x4zeo75vi8FN/XI9/ybcdyPrYf+f474JyOZa4n/fHaxcBfR2T8uWGZbwIfCyz/CuD1huXeDZwbmPFv+Ik+u3g5YTfHwPzV79CJvnLVb8uNNWrPy/Ideq6Uw3cp/anXE36DHfjzsS7OIvxBGZdj6w96F2EPTgD/kPd/MCz3F4Q9WBxs+5vr8fuMUHL4tvweY+u3pf2Jqd9XM1/1O/X5mHzbji+s14ZWQr5tlORb9Vu+rYzFd+rj87H4vogyzseuQb7l28ZYfF9KHt9d1ypz+Q6dyC+Xb8tDJuS7HN+XIt+W+Qhi+1tS+7Zen4/xfRXybUW+bVh9x/a3pPZt+T3Kt3xbkW87Ft/XEefbMt/Il7GNJ1iOPr5DxyIk960JKMfBi4DH4SeefFT9t4VnAH9Sr3cLbBeV27iY9pOYKwm/WNxwPu2N9MXENU7gB2yvdBGxwj8RMXRHAb5xO4eVG4aD+IvWoQNnwH++H7FyQ3st4QOpG/aS3vczaH/65OuIu3gPeXyfi3xbKKF+/6jjM3Qh33Zy+D6bcfj+Me2+Q290bJBvGzl8fxr4NVY+Wfwu8GDCJysAv99su+nq0/j9bwyn0X6S9VrgFRHlHwAexMqTUF4PPAf4XETGD/ETvK90QnoJ8HC6bxRoYyz1u8v3a/ATEoZSUUb9Pge15+B9t9WtXL5Dn7gCeXzvo9v32RHlg833jyIzzqP9u+76DF3Mi+8DxPu+iPZOSPn2XEt3f4t8e0rw/eOOz9DFvPjeh3yD3XfohTeQbyu5fLftv69Hvhvk28Y+4CfIdxe5jtfmxXfs+bd825gn3zEDncfi+2PAr7dkfBt4SMv7Fl4MvKXjMzw3onyAJwP/r+X9v8Q2cdpKXI2/jrDSJJTXAk8n7uGk38M/GHWlyYT2Ag/FHyeE8lHghaT3/daW9z+Gv2YTQ2rfV+Gvl6y274cQ5/sjwG+w8o1d3yLe95/Q7ft5EeWD9/1PLe+/HNvESith8X0acb6/Sxm+H0r5vrv2313HEF1Y99+WgaUrkWP/fQX+eG0lhjheu5D2QcY5zsfk2zMm323f9Sz4PoD3vVJbm8t3zHgKGIfvK/H777NXeL/Zf38pIuM7wKNZ+eb0i/DnCD+NyPgQ8Fus/Jv6d/z+O3SiL4A/Bt7R8v5HgBdElA/wROALLe+/lLiJtiv8734e6vfZEeVDd/2+gvj6fS7p23P5tlGC7wuJ832Icfg+g/b2/Jv4MZMx7fn/Af6m5f0P4fv4YngC8MWW9/8ceHNE+fvw+++VjmUOAE8B/iUi4wD+OCSl78tpr9/7ia/fF9Bdv2P6EKCM+n1+x2fowuo7pi9Evm0covt8TL49F+AnLFqJMfm+JiJDvu3Itw35tjFPvmP71+TbRi7fbf1zs+S77bvu6gPoovG90tjvoXy3nX93zf9gYSy+z2E+fJ/NOHy37VMsdPnuOifsIofv/YzD909p9911DGFBvm3It42mf63N93kdn6GLHL4vQ74tdPk+xDC+247P5XuBefEde3z+HuAPWPl+g6/hx0zGMPO+XVV1TQTaUYBz208//fR/fOhDH3rXqIKGwfq03B1JP4XYBOwGttZ/H8B3EsVMCjPNtjpjY/33VXXG/gEzDqv/rcc3JFdgm6HXypq6/F31/x/CNyiXEnfhfpL1dfk7AIf/7JfR3nD1JYfvewJPBW6G3zH8C36g1zcGzJBvG6rfNtbgXRzGgu9L8S7kezHybUO+7YzB94n4AWovrP/+J/ygvA8SN/nkJLfCD2J/fP33R/CD7mImbZzmXvj996/Wf78D+Gv8QMUh2IC/ye3xwC/Vr70cf0PZeQNl7MJP9P7i+u+vAe8H3ok/2RuC9fh60UyoeQv8b2qo8mGhfv9X/ffN64wh63fj++fwx2tfZFjfsFC/mzJvRJr63UwEeWvStOfybaM5dm6O+eV7eTYBhwP/Wf+dwnez//6P+u+bkmb/vQtYx8L++xLiBlJPIt92cvqerN8pfd+KhWPnWfd9CXGTwkyT6/g8R/1ujs8Pks73dhbOx1L53lL/vR/5Xg75tiPfNnL43lxn5PZ9Mb5vZyjk24Z825BvO/JtYyy+t+O/K/luZw++X+r59d//iO97PpPh+o1uW2c8rv77THz/+T8OVL4D7o2frO5X6tfeiu9f+9ZAGRvxEwY8Drhz/dpL65zYmwwaduP75/9v/fdXgPcB78Y+dqeLPeTx/TTgsfXf8r08u/ETPPxx/XcK3yfjr481vj/Pgu+h2qkcvu+D932/+rWhfW9iwfed6tdeAryNtL7fi/e90uRWfcnh+3b4NqTxfQZ+ouGhfMPC/rvpT70Jft861P7bATtZ3J96Q/yxzlDf01r8vnvW+1Ob47WU/anybUO+bTgWrn/Ldztj8L0J/5DTx7J4//1W4m8yaFhu//0e4O8Ybv99Cn7/3Uzk/A/4/feHGHb//TTgMfXfZ+CP19omdu+DA+6LP167b/3aW/DHa98eMEP128YY6rd825FvG2vx29A8fCCF71Pw50rNgzf+AXg78GGG247b49vzR9d/fxDfnrc9uKEPy7Xnb8a35/+50ko92czC+fcd69f+HH/+PdT+eyXfl7LyjZB9Uf22sZr1W76Xsr3O+Pf6b/leng347+m79d85fN+szpDvxayW70sYrn8e5NuKfNuRbxvybUO+7Szn+xLiJtmepvG9of77SuR7OXL5PpyFvs2UvlW/25n2/Qt1+fK9GPm2s6XOkO925NvOcr4vZrg5C+TbTg7fO/DfVWrfu4Cz6tduiN+OmIkCJ5FvO/Jt41T89bFn139/Bn997KMMtx2r4fvGdUan76qqVhw7MrYJKIUQQgghhBgLzQlqysnTlVFG+WPKyIF8l5ORA/mer4zUjOV7UkYZ5Y8pQwghhBBCCCFmjbGcj40hYwzboIxyyldGWRlj2AZllFO+MsrKGMM2KKOc8pVRVsYYtkEZ5ZSvjLIyxrANyiinfGWUlTGGbVBGOeUro6yMMWyDMsopXxllZYxhG5RRTvnKKCtjDNuQKyMH8q2MWSpfGWVljGEblFFO+cooK2MM26CMcspXRlkZY9iGYjPaJqBcE/1xhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCFE0WgCSiGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKIkeOqqoou5Mwzz/zKAx/4wNsN8HmEEEIIIYQQgHOuAqiqyiljdTPGsA25MnIg3+Vk5EC+5ysjNWP5npRRRvljyhBCCCGEEEKIWWMs52NjyBjDNiijnPKVUVbGGLZBGeWUr4yyMsawDcoop3xllJUxhm1QRjnlK6OsjDFsgzLKKV8ZZWWMYRuUUU75yigrYwzboIxyyldGWRlj2AZllFO+MsrKGMM25MrIgXwrY5bKV0ZZGWPYBmWUU74yysoYwzYoo5zylVFWxhi2YVYz1gxRiBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEKBdNQCmEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIMXI0AaUQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghxMjRBJRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEECNHE1AKIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQowcTUAphBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCDFyNAGlSIZzbo1zbm3ijLXOuaS/4zrDJSzf5cpIVX6dsc05tzPxdsh3j4xU5dcZqt+28uXbniHftoxNzrldKb+r1O15/T3tdM5tS1F+nbGm/p42JcxY75zb7ZxbnypDlEfK+j0WcrTnuZDvbuRbDE3qY6mJHPleZXI6kO9uUrfnOc+Ndf5typDvHhmpyq8z5ISxxcgAACAASURBVLuwjFTl1xnyXVhGqvLrDPm2Zayv+/DWJczI1Z+6I2H5zvn+1K0JM9bW39PGhBnybStfvsWgpGzHVzNLLI98zxepjzenspK35yn332NA9Xu+kO/5Qu15OeSoD6rf5SDfYmjke76Q7/lCvucL+Z4v5Hu+kO/5Qr7nC/meL+S7LHKMX0tV9mpmieWR7/lCvucL+Z4v5Hu+kO/5Qr7HzWgG/DvnKuuyVVXph5aIuhLvAg4HNtevXQdcDFxcVdXBATLW1uXvBjbUr11TZ1xaVZX5t9CSsQE4Ar8ta+vXrgT2VlV1RWz5dXlb6oydgAMq59zldcbVA2XsqDO21X8fBC6tM64doPz1wJOAZwG3rl8+1zn3JuB1VVVdOkCGfNszUvtern5fC1yC6vd0hnzbMhrfhwPr69fke/mMBwDPBe5VZ1zqnHsH8Kqqqs4eoPymPX82cKv65XPq9vz1A7Xnu+rynw6cWL/2deD1wNurqrpugIyTgecDTwQOw7v4NPDaqqo+HFt+nXF74AXAw/Dt1AHn3AeAV1ZV9ZWBMpr63fx9c9LV7+a1m5KufjevnUq6+t28djJ+G4au3w0/X9fvi6qqumagjLH5ztGeN6/J99Ly5duesZzvy/AuZsn3bsbVnjfHa/uQ7+nyx+i7eU31e2n5uX3nPB9LVb8nz8dS+Z48/25cDO17U/1aivPvI+oc+W7PkG9bhnzbyh+7771VVe2LLb8uL4fvnXgX0773DtQvNSbfR+L71lL5vgO+f+0h+O3Y75x7P75/7WsDZTwY3596j/qlS5xzb8f3p547QPkbgSfjr4/don7th8AbgTdUVXX5ABmHs9Cfenz92leA1wF/W1XV9QNk3Ajfn/oEYAe+7n0SeE1VVR+LLb/OuGOdkdv324BXD+z72cAv1K+l8P0c4DTy+T404fvjseXXGcv5fh/e99cHymja8+bvm5OuPW9euym+rb0kQXvevHYqsBe4LEF73rx2Mmn23w0pzr/H4HsdC9e/m9fke/kM+bZlnIpvax8/8drH8Pu9T8SWX5d3pzqjYZ9z7r34Y6mh2vOH4vffDRdO7L/PG6D8jcBT8cdrzWvfZ2H/HX3umsn3RnzdU/1uL38s9TuX7yMnXpLv5TOW832jOmPI9vwFLG7PP4o/Ph+yPX/BxEtNe/7KqqrOGigjdXu+CXgKS9vzNwBvHKg9PwK/DadNvPZl4K+Adw70m2rq9/T1sSHr91byt+c3Y+H62KzU7yNZOP9uXsvhew++jzCV75u7hfEt+wfK2Mni66E5fV9cVdWhATJytOfybStfvu0Z8m3LkG97hnzbMuTbVv7Yfe+tqurK2PLr8sbgew3Lj0fO4rsa4P6Vujz5tpUv3/aMHL4PI+35t3zbM5bz3fS3zJLvVdt/y/eSjDH5Ppx6jhLn3NXI93IZq+H7JiyMVxzad/Oa6vfyGcv5blzMku/p8UzyvXyGfNsy5NtW/mr63ltV1WWx5dflybet/JV8N9dDZ8n39HjFPcj3dPnybc+Qb1tGMt+jmYBSrD71xaSTqW/em2A9cANgt3Pu+zEVz/kJsk4BNk69tRl/M85hzrmzYyqe8wMtT6a+sW6CbcA259zeqqp+HFp+nbEL/3knJ0N1+AZ3p3PuR1VVXRKZcSyLG1jw23QEsKv+nq6KKH8z8CH8ZGiTnAj8CfAk59w9YgYSZvK9FdhDWt+7geOYbd9r8N/TdP3ewLD1+4Z1mZPI99IM+bZllOD7/NjOFufcq4Ffm3p5F36Q+JOdc79aVdUXIsrfDHwYuOfUWycBL64zYtvzE4HP4Z1PcmvgTcAjnHP3jzkBcM7dBfgIfqKCn70M3Bu4t3PuVVVVvWDZle0ZT8XflDT5m9oIPBZ4lHPutKqq3haZcRwTJxY1k/X7h1XExKaG+r3LOfeDDPX7hzGDgFrq93Zg+wzVb/m2ZeTyffz0y8j3dMYG/PH5WH3vwm+DfGPyvbM+XpNv+bZmyLet/HnxfVFVVT8JLb/OWE3fR+LPjeWbn/k+GZh+kvGQvg/HH58vepnZ830ysHXqLflemiHftowcvrfh2yn5bi9fvu0ZzwJeO5WxCT/hxqOdc0+uquqdkRlvAJ4x9fJu4IX4a1f3q6rqyxHlbwU+BvzPqbdOBv6chetjwd+V85NQfA7vY5LbAW8FHu6ce3BVVQciMu6Gv863ffJl4L7AfZ1zL6uq6kWh5dcZXb6fVFXVuyLKd/hJR54+9dZu4Dfwfdvy7TPujvc9edy5BrgfcL/Evp8APCbWd51xPBODZmpytefH1Bkp2/MTWLg+Vnp73rX/Pi92MJN8mzPk21a+xff3q4gJfw2+dzrnzon0fQ/gTJb2IzTt+Uuqqvqd0PLrjOcAr2Hx9bFN+AcANu35uyPKd/jrw0+beutw4Dfx++/7VhEP/qvrxceBu0y9dQrwEuCJzrl7VlX104iMHL676veFMdtQZ5RQv39QRUyMZqjfzflY6fVbvm3lr6bvLfW/IXzfE9+eT2/HrwC/4pz7s6qqfi+0/Drj14BXsXJ7/oSqqt4TUb4D3oyfHHKSyfb8PlVVfTUiYzu+Pb/z1FunAC9loT2/ICLjRsBnqR+kO8HtgbcDD3POPbSKeFhNpvp9BHDs9Mukr9/r8PW7uT4WW79PwdezSYas312+H1r7jjkHWMn3DmBHQt/N5CFD+T6BiRsEa2bN9wb8eKb1U28N2Z7Lt618+bZnjMH3WvzxWkrfG/G/KfnuzpBvW8Z2/Jj51fR9bhX5sCv5Nmd0+b4g5hyjzpBvW0arb+cnXJRv5LtHhnzbyi/B9w7g3BnwfST+O5mkmUxiVybfP6ji7rOTb3uGfNsy5NuesVq+NyLf0xk5fJ/IxIRMNeuAo1i4Pibf8m0tv8t3c++mfM+P7x9UEQ9Q6/B9Yn0+Fut7B/7620q+f1pV1YWh5dcZXb7PqSIfXrjKvo9loT2fBd8nsXgsAsj3dPlr8S42T70l30szkvp2zjnq8bpTb8n3BNMNuJgxnHO/75z7lnPum865s5xzv7jCcrdzfgKr5d77vHPuO/X6ZznnHuace7Pzs7X24ViWDnKeZANLb5zpyx6WTkY4yTaWduSamdhpT98cP8kRzg/IDM3YwtLJJxctAhxXLxeasZulk9NNshbYU29vKK9k6eSTk9wIOCOifMjjew/pfU9PXrVoEWbDd676PT14d5JcvqcHSvbJyOH7cOS7k4J8Hx/p+xksnXxykp3Ah5yf2DiUV7N08slJbgR8MKJ86vWnJ5+c5F74/UoQtccPsXjyyWme75w7reX9row74G+GWuk3tRb4a+fc/4jIWPREqBUyTk5cvzei+m09Xout36X4PimifBiX7xUXwfuePvHvkzEW3ych35aMefG9nTjf65BvK8ex+u25fCPfVoy+j4w5j5HvXuwhj++2aw2xvrey9Ob4RYuQx3dsf8txLL2pfBL5JpvvI5DvTmrfyw3+mUS+PaX4nr7wbiaT718C/qolYx3wNufcrSMynsfSyScn2Q18pB4MEcrrWDoZ4SQ3BT4QWng9yOFDtPfR3Q94WUTG0fjJTra3LPZbzrknRGRYfL/dOXer0AzgeSydfHKSIXy/nm7f7w8tvIfvl0ZkHI2/Ztt23Bnr+39i833LiIxFT2xdhqY9jxkDY2nPpycq6cseZr89t+y/T3DObYrIkG8DBR2fz4Lv41n947UdxPm+Ad3t+W875x4XkXFXlk4+Ocl6fHt+i9AM/EMWpyefnORw4KPOT/YRyhtYOvnkJDcD3hdRPvixZSl9W+r3Uc4/mT00I0f9PpLu+n1y4vq9ifj6ndr3etL73oZ8W7H4vkFo4c65Y/BjaNq243edc4+JyLg7SyefnGQ98DfOuV8IzcA/5GF68slJmva8bTu7eCNLJ5+c5ObAe0MLr3+LH6b9mO9/AX8WkZGrfrf1Aeao3+sYpn63jcGJqt9G3/dHvhvfbecQuXzHno+dzNKbbyaJbc/l24582zLG4vs4Evqu+1P3IN+WDIvvIfrXxuC7qz81h+8TZ8B30va8IN9HZ/Lddp9cV4Z82zKsvtvuP+nKyOH7KOTbkpHDd9cYHPnmZ767js93AkdHZOTy3dbnm8v3yfV3Gop82zLk24B898ooxfcJoYVn8r2B8fhuO4eQb+S7JyfQ7rt5SGIQ8t0roxTfpe+/N7D85JOT3CCD75PkO6vvtu9hFnwfTR7fbffAjMl38Dj9HL7xk0zOi++jQjM0AeUM45y7I36A022qqroFfvKm85Zbtqqqr1RV9byW4h5bVdWt6n8fqKrqaVVVfbvHZ1lL+wCjhs0ucJCw84PRLDcZ7nJ+IG4Iu2m/Ob6hbfI3y7pdDY+LzDjSsIzV2RKcvyH7iYZFb+Ocu1tghnzbSe17He0dXg0x9Xsb5fi2fJ8rkcO3Zd1cvoMGCff0HXrj98z7rg8EX2hYdDfw5MCMI4HHGxa9rfM3HIVk3B24jWHRJ7rwCX+fgu13a/k+V+IFdB87rwWeH5Fhrd9BNwoWVr93z0D97iJXe57a9xb5lm9jRkm+Ux875zo+H4PvmOO1Xch3J7Vvy6DWWN+WQczyLd9Wcuy/58130MTnI/Kd43jN8vms++AlZPK9HfkeMkO+58930I1Ezg98LcV36effv053f+o6/KSCvXH+JosXGBa19okul3EM8GjDondy/oE2IdwH+HnDck+NGKDzNPxNPF3E9KfOk+87uxUeEmkgh+/TmHHfNan339b2fKva8yznY/Jt43Bs475K9536fGw97Q+xayjd92m0Tx7dENOev5Du9nw96fffRwFBE2k6544DHmlY9Jecc7cPzNhB+8N0G+a6ftfjHXK059b6HfRgg56+Q8fi7ia976Tn33Po+/AI30/H1p7/RmD5YG/P2x6IuyJ122YZG3M08NjAjOOBRxgWvatz7rYhGcCv4h8q0MVp9b4+hHmr3zH9a0nrN3bfTw8dA4t8WzOsvrcV3p6X5DtozOUc+i79eM16fF6y7w3GdYN944+jSvGdY3xLat/WPrLlMsbi23r+Ld+J23Pmz3fq47VcvkMnTs2x/x5L/5qlbZDvPL5znI9ZfQddN87ou+3hLg0x52Pz5rv0+i3fXSuOa/89Bt/zdLy2vXDf89TfIt9l1e/SfVvG+Y3Ft/pb0vveiXx3rzifvkMn2huL79TnYxux+w6dWLEk36Xvv+fJ9xGhvjUB5WxzDLC3qqoDAFVV7a2q6sfOuds7577onPuGc+7Lzrntzrm7Oec+Yi3YOfd559ztenyWnXQPWmsIfRqYdfChI7AjFftn2xgy8LyuqNbPtjOkYtcX7KyNTqiLh/bICBpEiHxbM3L4zlG/revl8t37wvec+g4aFE4/36l/U8X6Bm4L3Ni4bGhbm6M9f4xxuU34z5My46YuYOB5fbL+EOPiD6s7AvpmbMHuIrTulVa/57k9L813yftv6/bn8H2YfJvI4XtToO812DpyIM63dT9Q8vG51cUa5Fu+h82Q73H4tn62TSEXxubUd+gxgnzbMnL4Poxyzsf6fKehGfIt35309d23/DpjK3bfY+hvKdn3NuABxsUfFTiQ6Y74JztaCO3rfDjtT44cIsPa17kFeHDijFs65yyTIy4ik+87AXuMy4a6eAT+huuUGVYXW4EHJc4I9b0duL9x8UcH7r9La89T96/FtOd9zr9D99/WyXdy7L/Hcv5d6v47l2/rvnXefVvb81s7527Wt3DnJ235VePiQe05cBfsT/Iuef9d0vH55pCBqc5PHpe0fuOPV1PX79LOv1P3r8X4Tnr+zXz6Tt2e38Y5Z5ksbxHOucOAXxn4s0zzS8AJxmVD29pHYptYPSbDuv3bsZ/jTjOG+t3neC2m7qU+Xsvh27r98j1f5985fIe6mDfffb7TaXL4Tn18nuv828oYfG+RbzOp+1tifFs/25bAseHybUe+bZTmO/X5t3zn6W+xMs++11GW79QucmT0qUOhGSX73oZ8D51Rum/rtascvnOcj4X67nM+Furb+vAZ+bYxFt+hLuR7+Iyx+M5xfJ7j/Du1763ynWTZkPVy+bYeA/+MAvffqeteTEZJ59/z7nvezsdK9r0d+TahCShnm08BJzjnvuuce51z7q71QdZ7gedXVXVL4F7ANYay3uWcO6v+FzLzq7XC9V12kj5PhQ/N6LNeyFPq12IfSOECM3K46DMDcejs1H22PeR7Avm2Moa61zcjZDvm0Xepda9vRqm+c7S1yrCxE/vFPetTKKZR3Ssno2/9Djmnkgs7qY9D5LusjNRt4RrK8j0WF6X6Lq1+j8V3aDsl3+VklHbcOYb9d8l9IfJtQ3WvnAz5tjN3vusbOEIyrJTcno/B9y7s278J+2CCScbQDzmWjD6+N+NvpunLGL6nsWTk8K221k5J599rAieYnUcXpR6HrEO+reQ4B0jdnu/G/tm21P/6Mob9HoxjvzSW9ry08++SfVsp2fcYXECe9tzqcGvIQ8EYT3veZ70c+4wc9TtkAunS2tpS6x7kGd9iJdT3WNraMRyHyHdZGSX5XpvBd8kuxnCNvdc2zLnvMRyHyLcd+R4+o2TfYzgOGYvv0upeqb7n8XitVBc5MnL4Vt0rJ2MMY+hhHC6grP411b30GUX1twSUD/KdKiN5f0tA+X0zSnYxhroh32nWK/W7Ku17mue61zdDvodfdpIxfFeluZjntlYTUM4yVVVdCdwWeDpwEX7iyWcAP6mq6t/qZa6oqup6Q3GPrarqVvW/iwM+jiUjZNlJDmbI6LNen88zuU5lXLYKzEi9DQB7eywb8nuCfp8tdDvmzfc8170cGTl853AxhrqXIyOH7xxtrTJsXI79N3UdcEVAhupemvVC2sK+9ftQQMZYXIzhOOQQ8p1ivVKPQ+bRd6l1r29GjuM1+R5+2ZwZpfnOcW5csu/SzsdK9T2GugfybWUMLvpmlHo+NobjHJDvPhlWxtK3XepxyKXYt/8AcFVAxhj6IceS0cf3fuR71jNy+C6trZ33/jUrVVVV6m9Jm5HjfMzKoYJ9j6HuQZ723OrwGuDqgIwx7PegvHaq1Po9lron38NnlLrfy5WRup26BHt7fnVVVZaH208zlva8z3o5xsCG9q9ZOVRVlbUvLjRjnusejMP3WNra0s75cuy/x+C71L5tkO8UGaW6yJHRZ9tz+J7nugfp68ZYfOscf/h15t33GPZLvX6zGc7H5rnu9c2YZ9+luZDv4ZedpDQXpV7nG8M5BpTnu9TjkHl0UWrd65uR+vi8ZBdjqHt910t9/l2y7zHUPZg/3/Nc93JkqO7ZGYPv0o7P5TvNsg2luZjntlYTUM46VVUdrKrq81VV/RHwXOAhdNyw55z7pHPuLOfcmwf8KFd05U5wWWCGdb0KP1FUyoxrq6rqPZi67lC0frYrQjog60GBB4yLX9q3/Jq/B641Lvt3gRnz5vvyDL5D697lzFf9PlCw76ux1z35thHj2zrJYJBv4CvAfxuXDW1rc7Tn7zEudwD/eVJmfBf4at/Cq6raD5xhXPzvq6qyfqeTGarfw2ccCLlZIkf9nlPfIROz9skI9X0I+bYi37aMefRdans+Ft/z1t8i3/LdyYh8qz03UPveZ/0s8m3iEOl976/PpXuRyfdVyLcV63ryXZbv0POx1L6vBD5qXPx9VVWFXPj+InCOcdnQvs4PYL+An7o/9RrsfZahGf9RVdW/9y08wHfIBDdfBM41Lhvq4v2U4/tqyvW9D/iYcfH3Bl4vuRr/8CcLOdrz0GvsOdrz1MdrB7F/tlAXfXyHuhjL/rsk36HHnDl8X8Y4fFvb829WVfWtvoVXVXU58HHj4qHt+T8D5xuXjdl/W48lU49nmvf6fRXp999jqd85fJvPv/uWX5PLd4plQ9bL0Z6fVVXVf/YtvKqqy4BPDvxZpvkn4EfGZUPb2vdhn0gzNMO63lXAhwIzrL+pa6qqso4B/Rkjqt999jWhGdbf+5XAhwMz5NtGDt/WjD591NPIt43SfKc+XpNvOyUfr8m3Dfk2kNG39VrGvJ+PpfZ9Pf540kJoX6d8D59xTeC9H318h35PVzJfvvv0WU5j3S/Jd5plQ9bL4ftq+TYTc83VQoxv63bIt50cvlP3t8i3ndTjW+Q7ve+Szr/l2+47dd3ru2zIevJdVnsu38N+lmn2Id9DZ4T6vg77Q+5D21r5Hj7j6tpdL3r6jqnf1rGEc+1bE1DOMM65mzjnTp146VbAfwLHOuduXy+z3Tm3bnK9qqruU1XVraqqetpQn6XecVsa6P31TUchGVfib6bq4rL684RwCbbG46LA8sH+JN3UGQcJ3KlWVXUR8LeGRb9RVdVnAzPmzXefJyyHrBvju6T6fWkG36ldxGZYfo8H8dvbmx6+r4n0bRkUH+P7UtL7trYNQRn1TTuvMCx6GfDWwIwLgHcZFj2rqqrPhWQAnwW+YVjunfX+JYS3YOtMfWXgzVAAr6R7cPuherlQctRvywlG6fVb7bkB+e6FfNsy9iHfQ2bk8m3tgJvO6OM79KkrpZyPVcblYjJifF+HfFspyXfo+bd825FvW4bV9yWRvi03Asf4tqwr3/nqt8V36mPnsfi+unDfFyPfndS+Lf1S8u37Orv65g4CrwopvJ7E0LLuxcA7AjN+BLzXsOiXq6r6QkgGfuInyyQjb6+qKnTwzJuwDS6w9E+3rWvx/eqQwuvfeg7f7zMs+q9VVX0xJIN+vkMHnbwJ2wC8kn1b9wW52vPeDzarM67A9mDBHMdrxZ6P9fQdVC/kuxfybcvI4TtHe/6XdLfn15N+/70X+JvAjPPwk1B28aWqqv4lMEP127KivX5bx6gsl1FS/Z7r/rWMvq39LUG+8edJqX2/EdsA+tj2vIuY9ty6rnWM6XIZ5+IfAtHFF6qq+nJIBvAR/INsu3hL3RaEMPP9a5nq97XY2vOrIur3h4HvGZaT73H4vgLbg4li2vOx+L7YsGgu370fZFfTx3fIg3Agj+8cx+fybcPqu/TzMavv0P4W+bZT0vn3GHxfXLhv6/7bUkeXrijffSipv2UMvq9Uez4a35Zz3rH4znE+NhbfvR98VHM58t29Yr7jc/m2Ucr5mPWax3IZ8m1nDL4PMB7flvu6x+I76CGPc+i79P4W1W8b8m3LKMl3bP9aat+lHJ/Pgm/LpI/ybWsbcvjeV7JvTUA522wD3uGc+7Zz7pvAzYA/BB4JvMY59w3g08CmTJ/nx7QPjrsWODsy4xzad3pXYX+68hLqgSRn037SeklVVUGNU51xNXB+x2I/ihg4Q/352j7jIeCcKnxiGIDnAf/Y8v7ZwIMiyocyfF88gO+uzzgLvkup3z8OLXwOfYcOjAOb73MiygfvIqXv6/GfcdZ9vw4/+Hwl9gEPitkO4NeAf2p5/4fAg0MLrw/MH0x7G/GP+P1KaMZe/D6n7aarN1RV9fqIjC8Az2Xl39Qh4NlV4I1KdcbFtE9OdQg4O7J+/wjVb0uG5Rjj/AHa83nwfSXyLd9GRuR7L+2+D5LH99kR5UM5voMmbqwzLL5jj9fk24B89yKX77ZO5zH4rpDvhrPp9v2T0MJr32dThu/Qga85fbf9Jmelfp9Nu++9A/hu+4xj8j3E8bl8d2fspf1mySF8n498WzI+D7yAlQciHASeXlXVV0Mz8A+HeXvL+5cDD6iqKmiAX82zgC+1vP894KGhhdcX/R8AnNey2GeBF0Zk/BT/GduOQ15VVVXQg4/qjM/T7fu0SN+vIL3vZ9Lt+2GhhRt9fwb4jYiMn+B9t7VTsb7/Afh12n0/raqqr0VkXER3e/7DxO35Acpvz6+j+3xsbxU+gS2Vf8BN1/77/Mj9t3wbkO9edB2fz4LvH9Pdnr+iqqq3R2R8Dr/P6WrPvx6aAbyc9sklLwPuX/lJ2EN5BvCvLe9/F3h4RPmg+m3NsNTvs6vwgc5QRv3eR1z/msX3RQP4bvuMje/Qgc6j8F2PbzmbtL5/hD+HaKtbL6+qKmgi3jrjM8BvsnJ7fj3wlKqqLA+TXYm/AN7Z8v6l+PY86OGINacBbZNLfgd4RGjh9bHFA2jve/4k8KKIjDHV77abLYao35bj83NDC699359u378dkSHfdlL7rvBjHrX/7s64EPm2ZOTw3fUZK+C8GfHddpwzS77bbqq8qAp/YNC8+Y49Ps/h+1zk20Ipvn8akTFPvn8o39W1yLeVEvbfV5De94XyDfjr0ql9n804fLd9xmjf+Ek2Vtv3fobx3XbPsnx7Sqjf8u0zuj5j49vysKqVyHF8Lt+2jBJ8X498N767+ltmxXfbWET5ppfv4HGdhfm2TM62EvJty7D4Ple+zb4viMiQbzvn4Z2uxBC+f8jq+75AvgGb77Z7BVrJ4Xtd6Ipi9an8DTl3WuatvcAdpl77fP1vuXLuZnnN8HkOOed+AOwGDmdh4svr8DdzXlzFTYBHVVXXOue+BxxR56yv39qPn5DtkshKTVVVV01k7GJhotar8IN3Y25SajIucc7tB44EdgAO3/BdUWdYnnLdlfEj59yV+O3YWr98CD+4b29kA0tVVVc75+4DPA1/s93N67d+Avw18JrK39gZk3Gtc+6/8b+nWfZ9sXPuGmbbd676PRbf++sM+V45I4fvK0fi+5nOuc/gJz+8a/3yPuBvgVdWVWV5Ontb+Vc5534Z354/Gz+hNfibTf4aeO0A7fkPnXO3x092eRpwTP3Wt4DXA28e4Hf7eefcbfE3NT8O2F6/9Xn8NpweU36d8fp60u8XsHBT8XXAGXgXXxwg43zn3D78b6ohZf1uaOr33iruBr7l6ndDyvrdcCW+jRq6fv/sZXz9vqiKmMxoIqPN90X1yXlM+avhO0d73iDfi8uXb3vGSr4vx39PqXwfxF9YHNL34eTxPZmR43htFn1fyeLvSb6XZoypfo/B9/cmMpo+4lmu+LtkjgAAIABJREFU35PnY6l8N+ffKX1vrN9K4bvpT5XvlTNy+P4+8m3J2Fv3p8p3e4Z82zPOq4/P5bs9o/F9JHAYi33vrfwF/iiqqnq1c+4sfP9a89Cb64C/x0+Y1DZRkKX8Cniyc+6TwHOAu9RvXYGf6OiVVVV9PzJjn3Punvh+zmcBN63fOh94E/BXVcREnXXGfzvnbsdCf+rR9VvfxPenvqXyN8nFZHy6zvh14LEs1I3P4a/xnRFTfp2xWr4vZ8H3DyIzJn0/G7hJ/VYK38/D99On8P2puv982vdn8f3nQ/h+lXPu6yz1fTreRZTvOmOyPW84yEL/+Sz0rx2Yas8bhmzP90215w1DtufN/vvIyZdJt/9ukO+lGfJtK/9gi++L8ce2s+D7UxP778ewuD1/TVVVZ8aUX2e8wjn3NXx73jx09loW9t9tE4FZyq+cc08CPoG//t2Me7sceAd+n/HDyIwrnHN3x09E+SzgxvVb57Gw/w6eGKbOGFP9Tt2f2tTv6eslY6nfe4FLZ8T3RRPn3z97Gfmezsjh+xNT7fmW+q3P4NvzD8WUX2e83Dn3VXx7/sD65Wvxx+evqKrq3yLLP+ScewLwcfz5WMr2/Oksbc/fCLxugPb8OxPnY08Fjqrf+gbwOuCtVfwYuX31NbgjmO36fa5z7gpmu37Ltz1jDL5Xas+vqTOG2n+vpu+LqojJwicy5NuWId+28g/W10vG4LvJkO+Vy298T48VHtr3cuORh/R9xYh8p+5fG7PvffhtkG9afV/Lwv1E8s0ofU9mpPA9PXZUvpdmjMH3/pH4vtA5dzVLfV+GdxHlu/4OxuJ7ubHhuXzvreIeatZkrLbvi6r4cSGr4bsZv5bC95HAzom35Htxxtjq91h9N2NP5JtR+T7HObcL+e7KkG9bhnzbM8buuxlrNKTv1P0t8t2ecdAtf69uLt97gcsG9p3yfOwaFn9P8r00I6lvF/lbAeDMM8/8ygMf+MDbRRckRoVzbi3+NxY1IKcjYx2+vkdVtJbyHbAWOFTFzTbflrEGfxNfjoyDsTuIlozd+O/q4oTbId/9MlL6Vv22Zci3PUO+bRmN4w2xB7KGjLUptqP+ng4CVFXlhi6/ztiAf/Jeyozme9oSe+JiyFiTsH5XkO57ypFR1+9DiTOS1oupjFn3naM9l+8eGfLdmSHftvJzuMhxvCbftvJz+Vb97pGRoe7pfKw7Yy1+UrSZPf+W714Z8t0vQ76NGfLdmSHftvLH4rv5/jdXVdX2xMchMma5P3Ut9dMqR9KfKt/t5ct3/4xZPx8b0/l3chc5MmbchXz3zJhxF2Nrz2d5/636XWDGjLuQ754ZM+5C7bmt/J+5YLbPx1S/e2Yk/J7W4m/8uK6KnMi0JUO+e2bMeN2T754ZM+5CvntmzLgL+e6ZMeMu5Ltnxoy7kO+eGTPuQr57Zsy4C/numTHjLuS7Z8aMu5DvnhmJXeQYvybfPTJmvO7Jd8+MGXch3z0zZtyFfPfMmHEX8t0zY8ZdyHfPjBl3Id89M2bJxbruRYQII1WnwVRGssnQ6vIr6kFlCTMOsTA4bpYzLklZfp0h3+VkqH7bMuTbniHf/bKS3HwzlZFkW6qqOuSPadNRVdW1qTMmspJMPjmVkeTkZSxUVVVl9J28js+67xztuXyXg3z3zphZ3zlc5Dhem8iS7xZy+Vb9LoNM50qjOB/LdG6cNEO+e2XIdzkZ8m0rX77tGfJdSMZEVpLJL6YyZrk/9eDI+lPlu71c+e6fMdPnYyM7/07uQr5XP2MyawwZqcjke2zt+Szvv1W/C8xIhXyXmZEKtedBGUna80kXM34+pvpdCHX/3YWJM+S7ELT/LjMjFfJdZkYq5LvMjFTId5kZqZDvMjNSId9lZqRCvsvMSIV8l5mRCvkuMyMV9Wcf0/1E8t2C6neZGamQ7zIzUiHfZWakQr7LzEiFfJeZkQr5LjMjFSlcrBm0NCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIURyagFIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQYuRoAkohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCiJGjCSiFEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIUaOJqAUQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBg5moBSCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEGLkrIstwDm3/fTTT1/jnNs+xAcSQgghhBDt5DjuUkYZ5SujrIwxbEOujBzIdzkZOZDv+cpIzVi+J2WUUf6YMoQQQgghVoOxHEspo4zylVFWxhi2QRnllK+MsjLGsA3KKKd8ZZSVMYZtUEY55SujrIwxbIMyyil/TBk5kG9lzFL5yigrYwzboIxyyldGWRlj2AZllFO+MsrKGMM2KKOc8pVRVsYYtkEZ5ZQ/powcyLcyZql8ZZSVMYZtUEY55SujrIwxbIMyyilfGWVljGEbSsyoqmrfSu+tGebjCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKIUtEElEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQI2csE1Be0fOfSMtG4BjgRsCpwPHA1oEzttblnlrnHFPnDslO4KQ644bAkcC6ActfA+wGTq4zTqn/HrJersN/7hvWGSfht2tI5NuGfNsZk+9TkO8uUvteBzwE+CDwVeD/Ab9X5wzFduDpwKfqjE/Vf28fMKPx3ZDSd0NK3w0p63fD0PW78d3wKeA0YNuAGfJtJ7Xvpj1vOLn+2w2YMTbfOfbfDfK9PPJtY7V87xiwfMjn+4SJv2f5+LxBvlcml+89E3/Pqu+jJv7O5XvLwBmN79Tt+R7ynX+n9D15/p3K9+T5t3wvRb7tyLeNsfi+G/A3wL8BXwJeBtx4wPLXAw8DzsD3ff0j8NvA0QNm7ACeBXyahf61pzLssc5xwB8A/1RnnA48EFg7YMbPA68E/gXv463AnQcsH+DupPf9cOBMFvs+qm2lnuh4zc5yx+cbBs5Y7vh8yHoxJt/HTvw9i74n63fDixi2fjftecMngacwbHsu33ZUv21sIr/vGyDfy5HD9y8Ar5r4+83AHQfOuAfwtxN/vxR/LjAk8m0jR/3ehuq3Bfm2M+37COR7OW4BvHri71Tt+Tsn/n4Jw7fnhyHfFnLU73si3xbWMw7fTXve9J+naM9Xw/cu5Hs5cuy/c/g+fOJv+V6Z1L43AI8EPjTx2m/inQ/FYcBzJ/7+BPAkhv2ulvM95HhnWOr7OGbPN4yzfp+IfK+EfNuQbxu5fE9es0/h+5bAayf+fhPwiwNnyLeNHL6Xq9+bB87Yhv/sDbPoexfwaxN/fxx4IsN+V/JtR/Xbxhh8bwAeDXx44rUXsthPLPJtp/E96/1r8m1D7bmNXL6Pm/h7aN8OuDfw7onX/hQ/xnpI5NvGrYG/mvj7DcD/GLD8xvffTbwm38uTw/dm0tZvWNqeH43ftiFJ7Xs38PyJvz8GPB7fPg7FWHxvZ/Z9j6V+3xZ43cTfbwBuP3DGGHxP1++Povq9Ekl8D3kzoBDgL1YdOfXaBvzgyH3AeUAVUb7DX1iYrsQb8Q3KXuCCiPLB14s9LL0hdxN+234MXBaZsRlfoafr4OY641zgmsiMnfjGaHIHugF/cHgkcDZwfWSGfNsYi++jWTpIRr6XksP3YfiOQflu51jg74GbTb1+K/xFhmcD74vMuB3wfhafwJwK3AH4XfzNnF+JzFjO9zbS+95Jet+7SV+/m33Vj4DLIzNuj//NTPq+Awu+H4F8Q7fvi4ALI8qHPL6Xa8+31P9Stue5fZ8bWX5Xey7fC8i3jVy+T2JxB1dO3weYHd8nsnSS5RzteXN8Lt8LjNm36vdSVsv30O35ySwdYJK6fm9gwfc5wP7IjLbz75S+J8+/5duzBb8ds+77Biwd9Nj4vgJ/PhaDfNsZg+8t+Iltfnnq9ZsDz8BPdPMnkRkn4PvXbjL1+q3xN1U+o34/hjsA72HxDdOT/WsPA86KzHgcfmKKyXO+U/Hf3TeBhxLfN/WnLL4pFPz39jD84OcnA9dGlL8FPxHCvaZeb3y/BHhxRPngfX+QpRNaNr6fXr8fw3L1e/J4bYj6vQs/kdtyx2v78fX7YGTGcvW7OV5L2Z43x+cX4tv0GNbjj8+n2/Mhj8/l20YO3yfi2+vp+v2/gd/CP2TpjMiMO+Lb811Tr92Rhfb8G5EZ8m2jq36fT/yDW1W/bazk+/D6n3wvkMP3S1g8SS74a3uPwE/O+xTguojyt+KP1+459foz639/Vv+LQb7t5KjfJ7F0kuUx1e8j8P1S8r26vo/GO5fvBV6GPw+epGnPPwg8jfj2/N34B0BM8qz634vx+5QY5NvOMSzuM4Jh6/c24F0s7/uZeN8vjcyQbzttvi/Hf1cxrNSebyRPe970t8T6bia4bzteOxCZsRu/fx2j72b/fQF+zGIM8m1nDL734PvXbjT1+h/i+9eeCnwkMuMu+Bu+Jx9mfKf63+8CDwG+FZmxWr4Pq//Niu+u+n0+/lp+DKtVv7fX/66pM0r3vQZ/nCPf3ci3Dfm24YC/xO/fJnlU/e/9+HPzmDEV8m1H9dtGDt//E9+PMHm8duf6X3O89u3IDPm2ofptZwy+b4g/Hzt56vX/g3/o5pPxk8HGkMv3MVOvDe37WBaP2YDhfZ/E0gnIm/61nwIXR2ZsqDPGUL/bfJ8NHIrMaPN9Gb5vKoaVfDf1W74XGIPvHfhxX3eZev25wHOAP8I/nD0G+bbh8OOdnzj1+mPqf+/BX8eK2WfsAN6LP46dpPH9hyx+uGsIuXyfiG+vGmbNN6xee35E/W9W2vPmgcCT9zXfpf73u8CDge9EZsi3jRy+mweWzHL9XoNvz58w9XrTnr8b3+bGtOcl+D4PuDIyY7n6/Uv1v9/B97eofif2vaZ7ETEglwFfAP4Vf1C2s33xmeNwlk5GOMl2/NMqYziO9hlkjyD+qSV7WDoZQoOrP8P0DQJ9WI+v1CtNALuufj9mhtmtLJ2McJKNLJ5dOASL7+Na3rcg3zZy+W57QutYfB/L0g7vPsi3ndS+N+BvlpyefHLy/TcCd4vIaG7YXOlzHg6czuInMvZFvu3sobs9j6nfJ+F9rvQ5jyDe9zbG4ft42n0fSfm+c7TnpfiOPT7P4ftkyvAd8wCHHL6bToKVkG9P43ulp6vI9wLH034uJN+eefI9PQCpL/JtY0y+V3q6aS7fexiH7yGOz1P6duTxPX3z7CSz5Ltt37kD+Qb57sNfs3TyyUlexNIJdvqwCd+/Nj35ZMNG4M0sHYDUh1OAD7Dy7/Io/OQRx67wvoV7458CvNJv5hb4Pr6YJzD+Fksnn5zk/vgBBDG8maWTT07y2/iJEUJpfE9PTtewEXgLcb430F2/Y4/XtrN0ctlJNjEb9fsE2tvzo4hvz/fQ3Z5PD1Dow1h8d537zoLvzXTX77fib2QP5Yb49nx64EzD0fVnmB680wf5tmGp38cTX79Tn3/Ltw35tvM7tB8bP5D4myXewtLJJyf5XfyEv6HIt51c9bvt3HcM9bvr+pmFUnzHnFOCfFvJ4fv3WDr55CQPJr49fxtLJyOc5PdZOgFHH+TbTldf5hD1+62s7NvhJ+3P4XtzRIbVd0zfVwm+dxLve7nJECZJ3Z6vYRjfbf0tzQQcMb53sHSy0UnG4vvojs/QhXzb6apbs+B7G/7BBdOTTzZsBt4B/GJExo3xk3mtdH/RMfVnaLt3owuL75MiyodyfK/UT2nBUr9PIK5+b2T163fzwM8YcvjuOh+Tb08pvmOuAYB8W8nh+w9oPxd6OPAXkRmpfa9Bvv9/9s473pKkrPvfmjyzO3lnZzYnQcKyRIkCi8AKgqxIZgmSESRIRgGJIhh4UUBJgmQD4OIrwpKV4EsQFEEUNrF52Zx3Z3f6/aP6OH3vPff001WnaurU+X0/n/nMvef2qed0f89TXV3d/bSVGvI7h+9bAH/D8uO1g/HjtUnXAvZRi+/U4zXlt50afG/CX2tw1DJ/Hz3A+Y4RMSy+Y+fXRr6XYxq++7b1tHxPmrve1fMZ+hgVVNnX+R3ru29bryd+vqXP95aez2BBvm3U4vtDLC0+OcIBr8U/CD4U+bbzGpYWn+zyaOIflvdhlr8W2AGvA06KaN/qe11EjJHv5epl5fKdev+dqz/fEtG+dXwe4/vW+Ic3LXdf86HAp4g7D1CK712RMWrwvZalxSe7jPI7pl5eDt+vYWnxyS6PJf5h1iX4Ppw438cyOb8Pw8+3KL8T+1YByrxcix+M3QW4lLgLi0vEckJ7E8sXG+hjDbainTtYfuKtj83YPl/Myfvt9A9WVxJXyONA+rfBWuJ2FpZtsJnldyZ9DPEdyhbk28q8+Hb47RlKLt99rCWuyHFq39bPF+P71/En+CaxEn9jdijPoj+vthJ3o39q3446fOfI7xy+LdtgFnxvMixXum9rfx5zwFpLflt8x1xIsYX+z6f9t98Glu1ci+9ZGJ/3Id95fB+AfFvItf+W737k2848+d5CeOFz+bYj3zbmzbdle44jh+9j8UUN+3hhRIxHADfrWWYVvtBlKL9F/3bezuTiEn28jP7589tg257j2AA8z7DcY1j+Yug+bgM82LDciwgvHpHDt+V4bBVx+W3pf9ZRdn6vY/LDH0bk6M9Tz7esIv38Wqxvy/exdN+PZPmb40fE5vdz6F+P7cDTI2Lk8F1Kfs/CfEvftUazkN/ybaMG3/vj+6k+TsJfpBfC7YBfMSz3YsIvbpdvG7Xk91bk24LV91bkuyTflu05jo1MfvjDiJMIf3DoHYAHGJaL6c/l28YK0ud3Sb5jjr/nyfcWwue+1mN7EH2O/ly+58u3+nP7/FrJvi3z+6vx52RCeR79D3g7EHhqRAyL7/XU4Tsm9+Ypv+Vbvq1YfW9FvmvwvRl/30QfTyS8CEYO3/M0n6r8zuP7+fQ/MGQn8OSIGFbflu05jhy+N2B7cLHOj8m3lZPoLwSyhrjjMYvv1cQV2svh2/J9LN13Kfkd69vy+eTb7jsmRi35nbo/vxtwvGG5lxBevyWH7x3Mvu9t2B5E/yT82DOEuwP3NiyXw3dMf16K7w3kye/Qc5XW/jx2vqXvfG2s79+mv0DtQcBvRMQoxfc25Nua36mPx6zbcxzW/vwphG+r/ajDtyW/D2ZyceY+Uvu23t8Wk9/JfasA5b7jm+x9mtttgC8A3wA+wt7iRp/GV6z9DPBt/AVPHwa+i3+a1IiPAv/ctvkbndfPA14FfL1tf/RF2dHG+Xr7b/S0xUcBXwK+BryVYd+Pzdi/6KEDNev7VhJ+Yao1xgbCb/S3FgEMLRa4BvsTsENdlOY79MZv6zaWb/medowcvkMHzTl8W9c/xvekivBd7kH/jZfjWImvLG/hJMLGXDnyexN1+E69/5ZvOzn68yG+Q280sH5vQ7fTGuxPZKrB9yrkO7XvksZrOXzvh3zLtw3rZwvdTmuZP9+p51vkW76tyPd031e679TzLfI9/Ri1+C55fs16AvVA4IGBMazza8cT9sS/1fjzUhYeH9A+wK2AOxmXDT0p/VBsOeWwb9PFWN+Xy3doYaaS8lv9uY2Sj7/XYn9i6rz7tub3fQgr1LMGX+Rymp9lMTl8b8E+t5/a92rCbxS0xtif8AvPcxyPyfd0Y5Tsex3pfT8U2zZeQfrx2i7glwNjpPbtqMP3kPwOHXfmyG/rZ5PvOnwrv238OrabOVYQPo9g7c8PBk4IjCHfNjaTPr+tc0HyXY5vFxFD/bmNdfQ/FDg2xrz53sh8+7aO10r3bR0jnIA/7hvKBuDhxmVDz2XMo+/QG4Fz5Ld1rjd0O61HvqcdQ77r8G09/7+RsBuBc+y/c/h+OLZ7GlYCjwuMUZLv/Zlv30PyO8f8Wqm+98PPTVkIHa/Nm+81lOtb+W0nh2/r8dgDCStaJt92asjvFci3lZJ8h47Pc/m23qsc49tSBDDGt7WvPRJbocpx5PCd4/g7te9HYjsnsxr7/e6Lsfo+CluhynHU4HtILYKS83tIfx5aeG3I/FqI703ArxmXDT0ek287ym8bj8Y2JlyNr0sSgvV7kst3SG2VzcCJxmVLzu/NpM/v5L5VgHLfsAI/wP50+/u78IUi7wb8AHhZZ9nd+Kfsvhf4GPACfMHIk9ibrM8C7tX++83O6/sB38JXIv8ae4tT/iHw1fb1XwT+C7g5fiL0/vhiXDdhv/EPht18FFrYbcj7Qm+GSr0eK7DvKFcOWLZLDdtp6PtC12NIjNCCZfI9/ffJt43Qm4hq8X3kgGVDbpjewrAbaEMGg7Xkt3XSHMpdj60Mm3CeZ981rMfQ/jy04KiVUvd7Q98n3zZK3U5D31fqOCSH7xr2e0PfN8++S8vvHPuMUr+3q5BvK6Wth3zbmOfx2irsDocs26WG7TT0faWuh3zbGVLw8cjAGEcZl3OEFSw7APvNngcQdqHikQOWDSmiOTRGaOHGITGGLNtliO+Q9Ria3yFPTs4xFzKP/XlIjFp8lxYj1Hfq/N6BvY/egf1BTF2U32nel2O8FpLfQ+bX5NtOqb5z5Le1H4Syx2vybaOW/E69reQ7zftq6c9DKK0/z3GMHxpDvm2UNr+Ww3fq4+9S90klxqhhvkW+7cyzbx1/2znSuNwKwo4rd2J/uNLBhO3D59F3jvUoNb9L207yna59qGM7QZ71GNJ/hsRYjX0OpeTtdGSiZbuU9L11gTFq8T1v/Xmo74OwP5zhMNJfzyTfNpTf6WOUtF9aSdj1a0N8l7ydaokxJL9Dx+fyPf33pZ5fK9l3jvmWWs7BybeNIxMt26UG39p/z2aMUN8HDYgR+p0taTuVHkP5bSPHtQglnfeJmW+xvu/IgPYZ0P7QZXPHSO5bBSjzsh5fCPJMfHGiL+Kr725uXwf4CL4A5IhRkcof4AtFXgDcAJwBHNL+7ZnA19v2DgGOaV+/Afin9ufvsbfjuTfwnvbnPcAV+IKYtwe+0n6WezMsAfckWrZLk2jZUELWY+jnCokx5D2h2ylHjBy+h7wvtYscMeTbTg2+Q6nBBcC1A5a9LqD9oe8JiVGL79LGCCExcvjOMXbJkXul+Q7ZrkM/V0iM0saq8+x76HtSxyi5r61hTJjDd2njc/m2M8/HY6X5ruF4rBYX8m1j3n2n3i/V4ru03JNvGyW7GDL3MGSeLPR91we0P2QdmoHLj0g9R5grRmm+c8x1lnr8Xdr8WqnjkFp813L8nTq/h7TfELbPKC33csQIpbT5ltR9iHynWTb0PaX6Tj2uhTzjtdLmW0r1XdoxXyilHX+X6ru0Y4BSx5059kk1jGuHvi+0P6/Bd2m5F7rOpfku9dx0Df3g0PeVOt9SS+7J9/TfU0vulew79T5jyHtubP8NpTQXJftO3Rcqv9O8T76nv2zo+0p1kSNGaWOQko+Vahh31uJbxxk2hnzXbwiMUVpfW/L3tob8Vu7ZSb1fqsV3Dbk39H2lzrfUkns15IZyz06Oc3Al+S7ZRQ3XCkNZx98l+66hr4X022rI9zD0O6vj7zTvqyG/Sz2vBOVtq9T5nWMecp5zTwUoM3MtvrjkrfEVQ59ueM/o4uY9LLzQeQ++GvsvAvcB7gvcHfgP9lYu3d1Z/ib8UzyWw7G3+OU9gDsCbzR8vhFXJVq2y5WJlu1yhXG5m4BrAtpvBrzvGsI6qGvwn89C6HYa4jA0Rg7f1vfJtx35tpHDt7U/W0xJLiB8n3GKcbmLgW8HtH81vvizha8S9p2qxXdJY4QbCXNxFfAN47Khvq+mLN+hLmrwPaQ/v5py+/McLmrwvWfA+3L4LrmvlW8b8m0nh2/rxOLVAe3DfPpOfQxwI+EXAMm3jZKOAeTbTsnzLfI9/feVHGPefJc832Kd+2qAzyWOcQHw3YD2LwW+ZVz2S4TdUPn/gMuNy1rXN+Z9n00cYw/w+cQxLsA/9G4oOfJ7HufXUvfnu0nfn4duJ/m2Y83v84F/D2j/EuA7xmW/gN1blyG+Sz4eK+kYIDS/b8J+0VeO/JZvG/Pue8gY7DOJY8SM14b4DrmgOpdv6wWOmm+xMe++522+pRbfoePzIf156PG39X034ce2IdTg+yrS+85xPCbfNnLkd0nj84Zy+/MbB7yv5P23fNuQ7+m/L8a3dX7tbOAHAe2fj78HaJqfZTHybWfI8XfIgyxuHPA+5beNXP25fKeNYX1fQ/rv1A3Mt+8h+5rQ/ZJ825i3+bWSfZ+DfZyXY7xW8vVMNfjOkd+1zK/l8G2dwzsD+O+A9of4jhlL1TC/VkN+DxnX5/Bd8vFYDt/WGPKdZtku1vHLbuCLgTFK8p1j/53j+pbU1zzn8n1DQPu7B7wvxrf1vtKS51usY4sc82uhvs/EPs4LzYscvkuqlZVrvFZDfue4vqWW+bUQ32cA/2NcNmY7pfZdxfG3ClDuG64AXgw8F3+z42XA3dq/PRpfuMjKJvxNetcCNwN+wfCeLwNPbX9eAWxsXzsROKB9fStw2IDPcQO2G8JuxK9vCJdju8HwasI6J/A3yFi4NLB98MXOLFg/yzisny80xhDf1ps7FyPfduTbhnzbqMX3e7BN5nwgIsY7jcu9K7B9qMP3ZZST36FjEJBvKyX5junPrTFCXTSk93098j3tGPJt830V8m35fE1EDKvv3ch36vF5Lt/xTqzQAAAgAElEQVSWApy5fO/uXWo88m2jFt9WF6X7thw/5PIdehJj3vLbutxiavF9ObbCLfJt9x26Hjl8/x02H5/Dn5gN4d3YTra+n7DikGCfRwmdb7kG+JBhuZuA9wbG+E9sDy45B/jHwBh/Sx2+rX3IvOf3ZdTRn+c4/p4n31cS7vtdlNOfvzuw/RzjteuwFegr3XdJ47WSj8fk204Nvv8DX5i8j7OAfwqM8TfYtvNn2jghyLeNIfkdesF2jvzW/JoNq+8byOM7dCxVku+Sj8e+h+1BFj8lvKDwX2Nbj8/gC0yFkMN3DcffOfI7h+/Ux8Y5Yuwhve9rSe/7UuzzLannvuRbvkuJMW++Y8Zr1rmvv8R+E3pojND5tVy+LYVTS/edI79TH4/Jt50c937Mm+/QG2hL8l3y8fcebNeMxcy3fAvbAyhPJ/xhmJdh22fKd3rfOfI7h+8c8+epr28Z4rvk/rwk3zmOx3Lk97z7th4D/SX2oiKLyXH8ndr3NZTj+wrqyG/5lm8LuXxbCivG+P6w8b2fAi4MjCHfNr6Bvya5jx8TXhzyw9juSTwZ+FlgjFrm10rKb4uzcQzpz0MeLA555tdqOB6T7+nHyHE8FlqX5OvYHmTxY3yttxAupQ7fJeV3qO8c+Z3ctwpQ7jv+A/g+8HDgGcDr8YPC44A3DWjn88Cq9r2vxHaR3UuAewH/CvwLcEt81efX4QeD32j/3zXgc4C/eW7ShbN7CL8Qa8TZTE6K3e3nCGU3cF7PMtcSfoAEPmH7BhaXEV5IAPzn67tg4zzCC4VAHb5voAzflyLfIN9WrL5Db2SAOnyfit/fTeL/AX8QEeOTwAd7lvkA8PcRMWryPelEzizk9yeQbyul+A6d4ATfT/cdKF5K+I2nUI7v0BsdR1h8x3yn5NtOKb5T5/c11OH7fNSfy7eds3veL98e+R4WYx58X0Kc7wuQbwvXU47v0BtXwOY7drx2NpMvtIr13eDHeyX4jjn+zuW77wK80n1fBzyZyScqz8I/CC2UHwG/27PM14E/iojx18DHepZ5L/DpiBivB/5twt8b4LeJO176Tfz3ajmuBp5E+Ml7q+/nBbYPNt9fI8635dyX8tt/J/v23zcQ35+f37NM7P5bvm1YfZ8bEeO/8NcRTOJrwB9HxPgovvjaJN5NeGE3sPsOvbAd6vA9b/md2nfM+EC+7eTw/UwmH6dcjR9vhRYKuRb/IOBJ12ScCTw/sH2w+b4a+Yb5yW/59szL/juH74sJvzENbL7PJc73M5i8Ha4irj+/hv7+/AzK788t16bNgu/U+X0N8DTS+r6OyXNG4H1fFBFDvm00+LmUlP25fNuRbxu5fPfdECXf8O/Aq3uW+TLw1ogYH8RfkzyJtwNfiIiRw/dZPe+fBd+58rvvWoZZyG/5tiHfNubNd+iNxuCPKS2+Q89Ngz9WmnSD+RX489+hhb5G35d58H0R5fvuG6/dRNx8ag7f15Le9/vx91tP4k8JLxwB+XxPev+s+O67Nu0qwouRgO3a0xz5fQ7y/R38tV+T+ALwtogYJfgejYVq8N13fekk5iW/5dsj33bO6nl/rO8rgKczeUz4E+DFETFy+e47tz0Lvp/C5EJel+PPh4ZyOf6Yb5LvHyPf4Pu4Wc/vPdjmW0rvz98L/GPPMm8BvhoRQ75tlJTf10TEyOH7KUyuO3Q5fn4tlFp8v4f+e4X+BH+deyjKbwMqQJmXgxb9/ij8jXXfB+4L3A14DHtvrvwV9j416qvAIzvvHf3tBuBh7Xuf0L4+2jF2452MvwEO/MVpjwbuCtwD+Gb7+ifa3++GL1BpKWbZZTdwGr6jW/ylvRp/MVbMIG3UzuksPbnWtHFPI+4mIvA7pLNYegHNTfiO73TCT5KMOJfxBQF34w8+Ym4aA//5TsfvOBd3Utfh1y+mijDk830G+873ReTxHTOJCvve91XId5eR78WfdbTDlm/Pcv3ENH2/CzgJf/FXl8uAPwMegu3pypN4NvA7LB3w/RR4OfBbke3X5Pv0Me3MWn5P8v0ypuf7Yvad73GehjLJ92XMju9zGF9QaNr9+b72HTPJAjbfMRetgXxbqc334gmdke8zmH3fP0W+R8i3Dfm2U4vv05FvC32+Y06SgHwPYV58hz6tcERN/fnZTPYdSw7fpzH7vr8IPAh/8Xo3xnXAR/DnnWL3fW8DnsjSJ+peAvwf4NewPa1vEs/AF0ZbfF7kDPwDZn47sv2r8dvpHSy9Wfff8Ofl3h8Z4zT89v47Fp4H2AOcAjwA/1C4GLq+u8ya77NRfltYbp5u1J+fTnx/fjGT+/PTI9sH+baSw/efAr9B2vx+GvAqxvfnLwJeGNl+Dt83UIdv5bcNi+/Y84jybWOS72uZju9T8eOlj7NwPfYAnwVOwD+8MIbPAQ8G/nnR69cBHwbuR3/BsT4m+f4Z0zkeS+17D8sff0/Ld678PoO0x9/ybUO+7ZyNvxF/Od+xfdTI9yUs77vvoSN9/ATfn3+Cpf35Z/D9+TfHvG8IpzC+P78W+BC+P+8raNCHfNuYlN9Xtn+Lze/PMtn3fYn3fRH1+z6T2fB9JeP78z1Mrz9fzveNzKbvxQV9p+37CuS7jxy+T2M+fMfcNAb+5ran4B/20uVi/INdHk7cNZEN/kbDV7N0HH4a/lzJyyPaB/keQo78Pgvlt4WR78Xzsnvwx5Py7ZFvOxfhz2PI92T+B3889PcsHDPtwd8QfgKTHwJpYV58xx5T5vB9PZPz+3T6i9T3UYPvBn89xWtZmsen4h8Y+orIGPJt52dM9n1mZPswOb/PJU9+9z2UoI9afL8ZXxjtR4tev6j92yOJP8bf175/SjrfDdP1fSZ58nvxvfg15bd87yWX7wtZ2k/I90L+L/5++68vev0a4K/w58diinnDZN8XMh3fP2X2ff8Xfnt/ioXrcRO+AN/9WVozYSh9vu9PXDExkG8rOfL7CvZtfz4N33uAxwFvYKnXH+NrO/zeFGLsq/G5fC9lX+f3NHz/EN+f/wMLt/moP78f8B+RMfp8n0r5vvfg6wEtl9/Ppv8hcZYY85DfUb5d08Td9+mc2/jxj3/8Kw972MPuHdWQqI2VwIb25+uILzI0jtXAuvbna4jv+Maxro3T4E9Sx94oPY4NwCp8Bxt7w8o4HLBf+/9u4julcci3Hfm2Id825NvOcewt0Hwg099WK9h7Iu+X8TeUT/s75dg7eE2xDuB9j27w2E4636PJp62ky+9RRf3NTN/FCuAu+G10MfI9iRp8w96nXe0iXX9ei+8c+2/57ke+7ci3jVz9+Wr8hNc1yPdy1ORb+d1Pzv68wU+az2p+5zz+voH44jzjyHn8Ld+TqdH3NSw9UTYN5NtGDt9HA99rfz6S+AK547gde2/G38H0t1V3fm1UAGja36kN7L0R4O4sLcQ2DXbgT94C3IbpXESxmGPY+wC7I5lN35B3vJZqHXKM19aw9+LNLaTrz0fj800J2gf5tpLDdw39uXzbUX7bkG87Nfg+EF/ADOBY/AWr0+bn2HsD9hHEF9gbh3zbUH7bkW8b8m0jd39+a5Y+SHQa1Naf7yS+IMw4asnvnwNujp+H/BbyvRy1+F4DrCX9/Ll897OKvfOb2n9PRr5t5PB9e+Ar7c8HsPSmu1i6/eD9iX9gwjjk28569t70qPxeHvm2U5vvbcQXfBqHfNvI4Xsn/mZvgFvhC7ZOG/m2ofy2k9p3d7x2P+IfiDIO+baj/LZRi+87Al9qf0417pRvGznm15TfNmrJb/m2kcP3zYDvtD8fRnxBpnHU4Lt7jVwq3wcB/93+fEuWPhh6Gtwc+Hb7s3wvTw7f6s9tdLfTffHndaeNfNtRftvI0Z/X4Fv5bSfId9M0Vy73t1VT+FBCjOMmfBXWlOwmzQRRl+tIU0CgS4qLOLs0+Cexp0S+7ci3Dfm2Id92uhXgU3jvDsq+kaB9WHiDZqrvbrf4SCon3XZTFDuBhdsnRfGLPaTzPEK+7aT23SVVv16T7xz77xHyvTzyPRz5nkyu/jz1+HyEfE9G+28bNfnW8Xc/Ov62I9825NuOfNs4rfNzimKEsLfAJaQ50dqdX/vXBO3Dwu9TiuKT4J/yOCJF8UnYW+ASZtd3lxzjtVTrkGO81r15OcXFIJDvWAzku48cvmvoz+XbjvLbhnwPZ5Z9X9j5OUXxSdhbEA3SFK8C+bai/B6OfE9Gvm3k7s9TFJ+E+vrzFDdjQD35/RMWOk+BfNvI1Z9Pu2DcYuTbRveGG+2/bcj3ZHL4/m7n5xR9SbcfTFF8EuR7CKlyLmcs+bYj3zZuXObnaSLfNnL4vqDzc4rikyDfVpTfdlL77o7XUhSfBPkegvLbRi2+v9P5OfW1kfI9mRzza8pvG7Xkt3zbyOH7x52fUxQjhDp8d3Mhle/zOj+nKFYG8D+dn+V7eXL4Vn9uo7ttUhSnA/kegvLbRo7+vAbfym87U/e9YhqNCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKIclEBSiGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKIynFN00Q3cvLJJ3/7xBNPvNMUPo8QQgghRBKccw1A0zRuFttXjPJipKaW7VRDjBrWIVeMHMh3OTFyIN/zFSM1tWwnxSij/ZpiCCGEqIMa9ks1rINilNO+YpQVo4Z1UIxy2leMsmLUsA6KUU77ilFWjBrWQTHKaV8xyopRwzooRjnt1xQjB/JdTowcyLdizFL7ilFWjBrWQTHKaV8xyopRwzooRjntK0ZZMWpYB8Uop33FKCtGDeugGOW0X1OMHMi3YsxS+4pRVowa1kExymlfMcqKUcM6KEY57StGWTFqWIdZjbFiGo0IIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQohyUQFKIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQojKUQFKIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQojKUQFKIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQojKUQFKIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQojKUQFKIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQojKmfkClM65Zui/ff2Za8d5tjrnDm3/HeCcWznlGCvbdkcxtjrn3JRjrHHO7XTOHeacO8Q5t3Ga7bcx1jvnDmpjHOScW58gxsb28x/Wrs+aKbcv3/YY8m2LId+29p1z7gHOubc5597nnHu1c+7IKcdY65x7vHPuXc659zrnnu+c2zrlGFvbdt/bxnmcc27tlGOscc7t7PyexHfn52T53fk5WX53fk+W353fk+V35/eZy+82hnzbYii/be1n851j/935Xb7Hty/f9hj7wvfqKbdfVX/uEo/POz/L9/IxtP+2x6jGd6c/3zKr+e3yz7ck8e3Sz7fskO/e9lc4537FOfd25+dbXuWcO3zKMdY5557o9s63PNc5t2XKMbY7517Qtv9O59xJbvrjzqOdc69pt9PbnHMnJPhO/YJz7o+dc+93zv2hc+62U26/Ft8rnXM7Or8ny+/O7/tPs/22zQ2dnw9yzq1LEGNT5+dZ3n/Lty2GfNtiyLet/Ry+tzvnXtj5/bEJ9t/ybWt/hfLbHEO+bTFq8X2Xzs9vds4dN+X2VzjnHtz5/ZXOuUMTxOj63p7A96pKfNeY3/K9fIzcvg+cUd8HOOde1Pn90QnW4xjn3Gs7v993mu23bd618/ObEvXnv9r5/RXqz5eNscY5t6vzu/J7fPsrnHPbOr8n8+3Sz5/Ld3/78m2PId+2GOrP7TFS+17vnHty5/dnd2NOKcaOReO1RyVYD/m2tV9Lfq+Vb1P78m2PkdS389Tge4dz7sWd31P05zdzzr2+8/t9ptl+2+bdOj//gXPu2Cm3v9I5d2Ln9991zh0y5RjjfE/1XmTlt7n9fZXf8j0+hnzbYsi3rf1afW+eUd/7dX6W7+VjdOfXDpHvZdvP4XuDc+6pnd9/00352u1K83vXjPrezzn3tM7vtfjeb9LygTFS+17pnHto5/ffcc4dNOUYte6/Z9G3c85t7vw+0/vvzu/yPb59+bbHkG9bDPm2x1jse9o1h8b5XjXlGDPre6obQog22Q5h6Xdrl3PuwqZpLpxCjAOBA1lYQHUbcJBz7pymaS6PbN8BhwKLi6xtd85dD/y0aZprI2OsAg4HFh8E73DOXQ2c2TTNjZEx1rcxFneqO51zlwJnN00TVZBVvs0x5NseoxbfRwCLB03T9H074G+Amy360yudcx8EntE0zfWRMX4deCdwwKI//b5z7vVN0/x+TPttjN8BXgF0i0U8DXiLc+4ZTdN8IrL95Xwfldj3DtLn907S5/fBpM/vw0if36l9g/d9VRtDvinC95lN01wXGWNSfsv3whj7av89i76PALqFA1L4PhToXtCX0/fZTdNcEdl+Dt+r8bm3r3xfApwzI7534n13J6BG/XlK39sr8X1gm9+pfV/QNM3PYtpvY+wr37Xkdw2+twE3znh+Q3rfMF3fW/DjtcUX5Mv3whg5fN8R+GvgmEV/epVz7v3As5qmuSEyxqOAtwPbF/3pjc651zRN8+aY9tsYrwJeDnRPrj4d+BPn3NOapvlUZPvrgXcBj2XhmPDZwI+cc49smub7kTEOxrv4xUV/epFz7gvAY2Jzwzl3J+BjjPf9PuDZU/L9Dny+dXmjc+7VTdP8YUz7bYxx+X0408vvFfg+anF+H63995IY4/rzHPvvafs+FFhcJHXWfG9oY8j35Pbl2x4jh+/XAC9h4f77w+zdf/9DZPvybY+h/LbFWI3ft27ovCzf42PsS9/X4V3E+j4Ef2767p2XXwy82Dn3OeCxTdNcFBnjzvjx+VGdl18L/J5z7j3Ac5qm2R0ZY5zvQ/BzX/K9N8a+zu9LgHMT5bd8L40xyfeVbYybImOM872LvedLivfdzn29Ft/3dc/rfhS4wDn35KZpPh0ZYwPwXuBRLPxOfd4590PgEU3T/DAyxqH4/vxunZdfArzEOXcKvj+/ODLGXfDbpdufvw54tXPu3cBzE/fn58fuk9oYu/C5MC6/z2qa5srI9pXf9hj7yvdo/ly+98bI4Xsrfjxes+8zp3Bdp3zbY+zr/ly+98Z4PPBWFp5reBvwB865VzRN89bI9h3weuCFLByvfQw43zn3pKZpPhMZQ77tMZTfthjybY+xnO/d7fG3fFOH77Y/fwO+P++ux8eA89r+/LORMfYD3gc8nIXfqS86574PPLJpmh9Fxjgc+Fvgzp2XXwq81Dn3T8BJTdNcGhnj7sBH8N+rEa/HH3+/E3j+FObwasnvw4DNi/40a/m9H349Zja/2xg1+F6D/8ypfR8OdAte5PR9XuwcYRtDvm0xavF9EP7+067vI/C+z2qa5qrI9ufB98XAeTPsezv1+L4COGtGfD8JeAsLt9U7gDc5517eNM3bY9pvY9SS30ew8B72A/Hnpmvx/bKmad4R034bY1/5PmbGfN8Tf13fYZ2X3wC8xjn3DuAFU4ixDTiIOvffs+Y7R37Lty2GfNtj7Evf1+LHzvJNVb4PBxY/VG7k+8wm/r4r+bbHSOZ7qlUyxXzjfGX+wxlf2HQF/iL9nWP+NiTGgfgkHvfdXQUc4eKfhnk4S2+mHLEWf+AaXCnX+ae7Hc3SYoQj9sN3tsFPgWs/39EsLUY4YisLTzSFxKjF9xHse99Hz4jvI0jreyf1+F6uYvc0fN8C+BJLi0+C33ZPxJ9kD8Y596v4k96Li0+CH7i9wTn3ysgYr8RPqqwf8+cDgL9tP0cMNfiel/w+fEby+xiW970/eXwfHtp+G8Pi+8DIGCX4Pka+5dvKAN/Bx88d34uLV42Ypu9x38tcvo9w8U9Py+F70v57Gr7XMdn3NmbH904WTkaNkO+9MSb5duTxfZB8y/fAGPJti5HD9+a2DfmeQCbftwa+yNJihOD9PAX4UGj7bYxfx9+Av7j4JPgL2d7knHtZZIzXAa9hYfGqEQcCn3DOPSCifYefM3oc48eEtwC+5Jz7uYgYW/BzX4uLT464L774QvATjp1zxwJfYHnfT2V6vhcXnwTv+83OuZdGxthFGfm93Li3l4L688PG/G1IDEt/vmPM34bEyOV78c11I2bJ91HIt4U+30fPiO8a8vsNwKsYv//eid9/nxATgzJ8HyXf5vwOHue05PK9YZlF5HtvjH3tex3xvrfhx+d3X2aR+wOfcxFPtHbOHQd8HhYUKxuxEngG8IHQ9tsYW5DvXjrnS/Zlfm8nPr9z+D6I+n1vJP14bSZ8A2/EP1x13PzWTuBk59z9QhtvXXwSeDTjv1O3Ar7snBvXT1pjbAe+zMLik11OAE5xvmBJaIzbMrk/fybw/tD22xh9vg+eUn4vLi47YhVwZOS8lKOO/F7Pvs/vg51z465tGxIjh+8jkW9LjC1tG7X7jp1fW0UZvg8Nbb+NId+2GLX4fgzwV4w/17A/8H+cc8+LiQG8Gfgdxo/XdgGfcs7dJ7Rx+R4UQ/ltiyHf9hiTfK9GvkcxqvAN/BH+YZvj1uMg4B+cc8eHNt6OnU8GHsH479Rt8MffwfdmtMekX2Zh8ckuDwQ+286ZhMa4A3AK4+8hWYV/eOh7QttvY+TI74PJk9+LiyGMGOX36mX+bolhye+j2s8SGmM9k89/TyO/t9Lve9y1TkNiWHzHnGfI5XvS+bFp+h73OXP5PkS+5XtgjINZWmx0xGr8dkrt++gKfB+AfJfiexN5fB8S2n4b4wnAXzJ+W20E3uace1ZkjJp8j7uHHabjewP73vfbnXO/GRkjh++jmH3fvwB8lvHnRFYBzwXeGdp+G2Mrfp8w6/15Dt/HMPv5ncP3Ici3JYZ829rv870e+R7FqMn3cjUi1jO9+bV58D3u3rIhMZL6VgHKGcM5t8s59zHn3KnOuR865z7tnLv5mOW+vg8+3kGM/6J2ObDtAAbTvs9SAOvgkPbbGPuz/M5uxEr8xQihbGP8DURd1jL+RmQruxjfMXXZ5OIudj6YOnz3FUTK4Xsd429EtpLLdx+xvi0FFeQbXsfyFzmM+DXn3H1DGm8HX2+hf4zwChdYBMP54hev6FlsBfAnoYPBAb5jCituR/ndizG/HX4cEURG330FU3L43pzB987CfW9Evq3Itw2r79Tj89J9r8bmO2a8Vovvnci3JYZ825FvGyX158GTtdh9BxXClu9B5PBtGSfJtz+Zk3p8/gb61+MRzrl7hTTu/M0ib6F/PvX3Qk8itieT+gpYrgT+JKT9lgcCD+pZZjvw6ogYzwGWnPNYxHHA0yJiWH3fM6TxAb5fHXoSsc3vvoIKsfm9CX9x2iRmIb8t/fmW0P68nb/Msf+2+I45/pZvA3Pm23qebjly+e47l1G670OBvoLEq4jYfxfkez3yXcr+uybfQUWy5HsQz2P8gxG73A54ckSM36d/PR7tnFuuCOZEWt85jr9r8H0Ayz9YaURsfh9E+vxO7XsN8+V7uYcSWKjB9xHAi3sWWwX8cUj7Lb+KLwA5iR34ouWhPJ/xD+LocgfgSREx3sjyD2ge8Vjn3F1DGq8lv/G5nTq/d5A+v3OM1yy+dxXuexP9eWG9bnI55NsWoxbfOfbfFt9b5Vu+LbTHSn9M//mS17vABxw7X6T7BT2LjT5HKPJtYMB8S478Dp4/px7fluOxrc4XRhnMQN9B9y3K9yBq8H008Ns9i8X25w/FP/ByEjuB342I8UIY+2CGLr8APCEixptY/oFgI57onLtjSOMZ87uvgGWu/E59/L2B8vPbsp0PyuA7Zny+GfnuZQ59p55vqcV3TH++ljJ8W66TnYR822JYfcfsv+fJ97YI32vxxdv7eGPENTTybccy3yLf3nff55sF329m+QJZI57i/IP7BlNZf57Dd1/Bs1z9edBDJjL67rs3pSbfffVXJpHDd+r5llp8H4h8W2LIt51SfMfMtyT3rQKUM0T7pfsk8OWmaY5pmuZW+Kc17uwssxKgaZqgC68jPtv+9N9kAP4LG3oh8jb6L0AAWOP8jc8hWG/u3eTCq/BaY4TeeLqK/ptnh36WxTH2p/8gDOR7SIxQFzl8b2T+fAcVbhkQI9TFLuDXjIuHPqHm/vRfdA7+O/GUwBhPwfad+rn284Rg3cabI3xbv+/Kb1t+r3XhhZlq8L0a+R4Sw4J8232HTqQqvw1U5HsrdfhOPV6rxXct+V2S79BjfPmefowY39bj0Xkfr5XkO6awW2rfm5BvK6nHa4cCDzYuHvqE2F8BDjcst47wG/2fir94to9bOueOD4zxTONyD3fO9V2csoT2ZNozjIsHuXDOHUZ/Ec0RofNrOXyXdPy9peD8Tj4+x+8vLOcPVpC+P18XehEhw3wPvjG0Pccp3zbk2xajNN+hx2NPo79oKsCtXWAhbOzrL9/pfefI7xp8r8Hue/CYsyWH7+3Mvu+V2Au/h47Pj8QXuk8WA/k2kTG/k863kK8/t5DD9+Y5972JPOM1yzW2xznn7hEYwzrf8ijn3OD1aI/Zn2pcPLQ/Pwr45ZQxyON7SH4HFWZC+W2lFt81HH/Ltx2N12wM8R16I5F822Lk8H0ithud9gceHxjj6djGa7d3gYWwkW8rm7Cdq4zJb+tnW6/87i3iERWDYb5j5lsszLvvtaT3vZn0vp+BbX7tDs65OwfGsB6PPtYFFEZuc8/6oBns25IAACAASURBVJ6gaxGcczejv4jmiNDj7xy+a8lv6/rPe37n8J3j+Fu+bQzxHVSIC7vvrS6gsMMc7r9Xkn6+Rb7ny/eGCN/W9Z933w+jv1g/+OO2kwJjyLctRkm+NwOPDYwh37YYtwCONy6e+nhsJenn1+bd91r6i65FxWD+fG8p2Pc60vvegu1aYflOf/wt39OPId9l+Q4qpKkClLPFfYDdTdP8xeiFpmm+B6x0zn3JOfcR4PsAzrmr2v+Pd859xTn3N865/3HO/YFz7iTn3Dedc993zh3TLrfDOfdx59y32n9DL4gc0uGEdk4lxXDYCm4ufJOfpLbcWA6+0F7I0x3XYTvxBnW4yBFj3n0P2cHU4nvwTjWT79tgO5gEuH1A+wB3GLBsaIwh7wuNUYNv9efTf5982wk6uBgYQ75t1JB7OWKE+l6FfM9ijBjf1sLy8+67pGOAXL5D5shq8V1SDPlOs2ypMULnW4b4XivfxcQo2fdx2E72QNnzLSXFWAvcKqD9HcAhxmVv5sIKedTiu6Rj/JLzu6R+sJYYQeM1/Lz2vPme2/k15tN3aIyS9hm5fFvH2V3mLfdyxCjZ95DPVbLvmZ9fA3ZhfyLyLduLr4dyHPZr13KMnWvJ7xAXpeV3DS5yxFhBet/r5tx3SfMt64FbBLR/EL5Pt3DrtmDGUG6L+vNpvy8mv63XloXmd0nbqZYY8l1HDOu+L9T3auR7FmPMu++SxlIxMebNd8nzLSXFqMV3DS5yxCjZt46/p/++/YCbB7R/KLbCMOAfZBFyfux22K9n0vG3jRXYryPvMiS/a9hOuWKkHofI93zFiNl/W68tq2E7QR3HAPJtp2TfqefX1lCW71AXJd2bPXTZkPfl8J0jL0JjlDT3NXTZkPeV7Hveci9HjNDxeWn5XYOLHDGG3LffJcf+u5b5tZLGhPJdVox59l2ai2JjWCe+RBkcC3xnmb/dGTi2aZrTx/zttsAtgUuA04D3NE1zZ+fc84DnAM8H3gq8pWmarzrnDgc+276nJJp9/QFEVob41ndjvphn3znyorTcm2ffpSEXadH2FWI8qXNjaPulfZ7aKG395VvMC6V9F0v7PEKkorTvemmfJye1zLfUEmMIITHmcTuJcphn36Wte2mfpzY032KntP2SmH00DhHLkXrsHBqjpPZjUO6J5ZDvtJQ291DqPMLQ9+xJHEN5MfuU5rC0zyPSMs++S1v30j5Pbubt+KfUcU6uGEXRNE0V6xFIaeue/PPMue/SmGfftRx/DyHH8XcIpe1bc1Da58lJaete2uepjdK2b2mfZ56Ri3IobV8vhlPamDMHJa9HaefHSkXf23KoxUUt6yGmj3ynRdtXiH1DablX2uf5X0KeliTK5JvLFJ8E+FbTNOc1TXM9cCpwSvv694Ej25/vB7zNOfc94FPAJufcxgHxr0m0bKkxGuC6oY03TXMTcL1x8evb5YdyLfZOpwYXOWLId5plS43R4LfrIDL5/u6AGP8a0P7Q94XG+EaGGDX4Vn5P/30l+74Ou++rA9qHslzkiFGy7yH5Ld82cvi+rmmakBuu1J9P/317CPN9I/JdUgxr/xbj+wbj4vJtJ3S/NMR3yPG3fNsZ4jD1OES+7aTOPciz/y7V978Bu43LljzfUlKMa/DnH4ZyIf4hWha+3zRNyPf2O9Thu6QxQsn5fQ1l9ec1xJDvNMuWGiOX75CLKUobr4XGKGmfEep7N3bf186575Ji7ME+T/a/yPfMxgjyDZwPnGFc9rtN01i/G12+DdxoXLaGsXOOGMrvNMuWGkP7bzuh82slzbdcBfwgoP1zgZ8al/1OO54fSmn9eQ3n2IPyG+/BOveVI79rcJEjRsm+h8y3yLeNWnzX4CJHjJtI7/uagn2XNJaKiWHt30J972aA74D2R++bt/xOfY59yHWHXXL5TrFs7hglXd8i3+ljlHQPy+XAjwLaPwt/DG7hm4HnQ7+J/cEROv62UXJ+D7luNkdfW3IfIt/Tf18NMUr2XdJ2qiVGDt+D72doKWk71RIjxrf1XEbJvku6N3vosiHvuwn7ec0uQ3yXnBclXVs2dNmQ94X6voH0vr+JfX6tBheQvi8M7c9z+C7NhXxP97PEvE8xbMy775LmtocuG/K+efddRQwVoJwtfgDccZm/TepUuonavdB4D7Cq/XkFcLemaW7X/jukaZorrR+saZqrsZ0wb4BLrO0u4lJsJ0qub5rmqsAYFxuXuyzwYsshMazLLaAtonNZ4hhW33tI7/u69vOEIN+2GDl8X0JZvkOKiQ2JEeriYuBvjYu/IzDGV4AfGha9Fnh/SIz2fZYD0R80TfPPgTFq8J0jv6/CNqDfg++XQ7gE28TavOf3jfgLVlLGkO/px5DvOnxbxy/yXY7vy+W7Ct9WFzG+1Z/buBS779BJTvm2xajFt8ZrthhDfFuPDRdj9X3tnPu+APiEcfE/D4kBfB74sWG5q4EPBMZ4L7aLbr7bNE3ohS3W9f9o0zSDv7ftDZJ/MeXPsjjGBcAnjYsHza9h930V8MHAGNbx2rznd47+/EpsuZdjfC7fcEXiGPI9/RihLnZTh2/r/vs7TdN8MzBGDfNrtfiuJb/l20ZJvi8N8d3eAP0u4+Kh4/NzgZONi4ee/7b6vok8vkMv2E7qu2We8rsm3yHFCmD+fIfOr70H282n32qa5juBMax96IeGXM85IlN/fg7wD8bFQ/vzK0jv25rf15Sa3+38Wo7jMet3MTSGfBuQ70HU4tu6/75oaPttDPm2M+T4O7XvYvMb+EfgTMNylwEfDYzxbmw3p/1r0zTfC4xhdTHvvq/ENnbOld8hxUBHMSyU7jvp8Rj1+C5p/z3vvt/Vvr+PrzdN8x+BMazHvB8IuSayPVf5buPiocfGPwU+bVw89PqWIb6t5+IXczHKb0uMGygrv1P7vlq+k/u+AvnuJaPv1OPzIb5D99/Wzybf8j3tGCXPr+Xw/SngHGP7fxMYw7qdavFdcn6fjK3QvXyn930a8Fnj4qHHYzn685J8X9K6G0RF+W31fSN17L/luxzfVzVNE1IscEgM+bb7jjn+tiDf/r6tZDHwDi3nKov2rQKUs8UXgbXOuaeNXnDO/QJw7ym0fQrwW512bxfQxjn0TxCeF3qhc/u+8/oWw3bgvFyMq+m/wPhG4ILQGPgOsO8GgmsIL+QHcD79O6RLQ06KdbD4Pj+Db+sT4sbFkG878+J7N+X7fgX92+r9TdN8LSLGs+i/yO8lTdME3ZDRNM0lwEt6FrsBeHZI+20Mq+/zQ2OQx/cFlJHfNey/Z8H3+fQfYFzahN+ICPJtRb4NVOT7Ymy+Q29EBJvvS+Q7m+++GwjkO4/vqyjHd+r+vHTfNyLfVuTbFsPqO+b4W74NDPAdM99yFf0nOHP4vpo43y8HLuxZ5t1NYOGn9sTYs+g/xn9h42++DInxM/x6TOI64Dkh7bcxvgh8uGexc4BXh8bA32jxbz3LfA14X0QMi+93NU3zrZDGM/m+kf79pvLbk6M/P5v+/vzckAvjYJDv2P13Db7Po9/3xU34jeUg31Zq8W0Zr8X4vgD43Z7FriVu/53D90XYfMfMt9Tg25Lfeyg/v+XbQCbfV2Lz3Tf2ncSfAX0FOv6F8EL6AC+j/waeP2+a5rsRMazH3/Pu+yL6H05aS37H+LbMY8q3x3I8Vnp/fh7wyp7FosZr+BuV+m4I+ynw2ogYfwr8e88yXyH8QRkAL6W/P3970zR9n2MSqX1bxkl7iJtvqSW/z6O/OMzFETcqQT2++24guMHwOSZh8W05bzMJ+bbFKMl36I1pYPN9kXzLt4XW4bMMMZ4fOkff+ELYv9ez2DXAc0Pab2NcgXz30p4fKyW/Y47H5NvAHPpOPT6X76Y5m/7rDK4GnhfSfss/0v9w0tOBN0TEeAvwnz3LfJHwwssAL6Z/fP9/mqb5QUjjGfO7L6+U354a8tvqO2Z8fgX9xRvlW76HkMP3ufT7/lkTWDhigO9z2mVDYuQ4/pZvA/I9iJ9h8x1aGAZs/XmM7xvx911PitEAz43YZ1iOe+Xbk8P3s/Dbe9nFgOdExMjh+3Ly+O7bBpZ53Um8kP79wR81TfPfIY13+vM+Yvrzknz/LDQGeXynzm+r73Pluxrflu2cw3ffPWaTYsi3gYy+kx5/4133+b6e8n3nOh7r/Rwl+1YByhmi/SI9FLi/c+5U59wP8CdYYhJ+xHOBOznn/sM590PgmQGf72r8yZZxRctuBM5umiboqQ+dGBfjb+wad3HqDcDpjb+pIibGWfhOatzB2DXAT9rkDG1/D347LdfBXY5fj9An1I8mc05lfCGdPfj1Ozu0/TaGfNval297jOS+2/Yn+T51BnyfCdwT+MaYP18L/CHwlND22xhfAR4I/GTMny8Cnt40zdsiY7wNeDrjLz7/CfCA9nPEYPFtqR4/lky+b6Anv9t+LJg2r/ryO7Ri+yjGRfTnd0wRTdj3vi9jOr5/gnxbkG9bjFy+z2G87+uB0+Tb3J/Hjtfk20Dr8TTG+27wvk+T7wW+x02u5fB9Nfl8B03ctTH6fF8o3//LyPe47S3fe2P0+T5LvuV7YIwcvkfza/vS9+mRvk/Hz7eMKzB5DfBGAubMF8X4PPAg/Los5kLgyU3TvDMyxp/gLzQa9735H+CEJu6hJQC/gb9pYtxFWV8F7hmTG+338b7AJ1k6RrgJ+Bh+3ij45tbGP4W2z/dvhrbfxvg88GB8ji9m5PtdkTF+Rp78vojZzu9c/fkZTO7PY4rsWX3HFNGE+fEdfKNSG0O+DXR8j7vwZJZ8X0l633+Ef1DkuHb+G7h/0zTjzgkNQb5tMXL47svv05Xf8j2Q1L6vwo/PTx4T4ybgI8ADm/CnZNM0zU/w4/Nvj/nz1cDriXhwYRsjl+/lLlbM5fsnU8jvU8mT3+MKDs5afk/ynWO8Ngu+r2ey7wsy+Y4pukbTNG/CX1s5rp0fAfdtmub/RbTfACfhi0SO60+/gp9vibkJ4Ergl1i+P/8w8KAm7pqpH+MfpP6dMX++GngdcYU6c/m+kPrz+1KU36MYOXz/lP7xWl+x3mUx+j5DvrP6vpjxvq8i3vdNlOE76r4Fg++fyndVvj8NPAQ4c8yfzwce1zTNX0XG+H3gtxk/Xvsv4JeawIeOdZBvW4wr8K73dX7HFLmHPL4nza/Nmu9xY1f5bpkT37uZju/XAy9gfDGP/8Iff4+bQ7S23wCPxj8Uc9zx95eAezX+4WGhMS4H7gP8X5Z+p24E/gr41chjvh8B9wLGPbDnKvx9pi8Ibb+NkcP3BSyf39eh/B7FqCW/L2D54g7T8n0m8m2JId8GCvIdPCfcxrD4jimqWJvvK8f9GfnuxpBvW4zrSO/7ZODX8ecbFnMu8JimaT4SGaPP96nybfJ9/pR8P5TJvmOK3Nfk+1Qm+z4z0vcPgeMZ/+C/K4FXNE3z4tD22xhX4OfP92V/XoPvS5hefo+7Z2Fa+S3fBgrwfRPT8X05k32fKd/V+Z40Pp+G7/Pp9x1z31WDX4dLWN73afJdh28XsY3/l5NPPvnbJ5544p2iGwrAOTd4BZqmcSk+i9iLc24jsF/763XA5TEJPaZ9B2wG1rUvXd34C1KmhnNuJbAFWIMfBF4xhZ3p4hhr8OuxCn8y6fIm4kLOZWKsBzbhC87eAFzWdsLTjCHfthjybWtfvu0x7sDeC7efDXw09kTPovYdcALwmfalk4CPNxE3EI2JsRZ4OPCh9qUHAKdM+Ts18j0qdrkhke/RdjmQdPk9uujxANLl9+gE2VbS5ffoe7opYX6n9p2jP5fv/hjKb3uMXL5z7L/luz+GfNtiLPZ9WRNxYd8yMWrynaM/Tz0+l+/+9h3exegG7Fr23/I9vv2R77XtS1c18Q9+WBxjXxx/p/Jdw3yLfNti3AkY3YT2m8DHYk/0LGp/BfDLwKfblx4DfGKa407n3Dr8fMsH25dOAD4/5e/UNuCxwJ+1L92+aZrvTav9NsZR7C3Y+RK8i6hC/WNiLPb90fbk37TaX4Gf7/rH9qUUvhfvvzcmzO/R/nt9zMnJZWLk2H9vwN/YD7O//5bv/hjybYsh3/YYqX2vAx4BfKB96X5N03xhWu23MeTbHkP5bYtRi+9N7C2QLN/LxziGvQ8wfDF+fB5VyHtMjDsDoyJuz8SPz/ueoj00RmrfK/DHrSl9r8L7Hj09XPm9fAz5tsWQb1v76/HjtVGBpPs2TfPFabXfxjgAP3fwp+1LxzVN8/0px8jRn98F+Nf2V/Xny8eoMb+3413MWn6PfK/D38SQYv5cvu0x5NsWQ75t7as/t8dI6rt18SDgU+1LjwI+Oc31aMdrjwTe3770S03TfGla7bcxavV9WRPxsN5lYnTzewv+3LHye2kM+ba1L9/2GDX43oDvz9/XvpSiP9+BP/5+a/vSsU3T/GDKMX4O+HH764vwx8ZRhePGxLgb8PX216fjj/Gndq1fO7e9EeW3JcZa9t7EPpP5Ld+DYsi3LYZ822PU6Hv/Jv7ByYtjyLet/Zy+1+GvFb5KvpeNkdr3SvyD0v++fenhwMlNRBGgMTGU3/YY8m2LUYvvewBfbX99Gv54bGpjnYr33+uaKdaoaGN0fe/Az21P2/d++EJrMPv7b/nuj1GL7y34QpFQj+/Lprnfa2PIty2GfNvan1nfM1+AUgghhJhnXFuIuUlYXFkxymhfMcqLkZpatlMNMWpYh1wxciDf5cTIgXzPV4zU1LKdFKOM9muKIYRYSi35XUOMGtZBMcppXzHKilHDOihGOe0rRlkxalgHxSinfcUoK0YN66AY5bSvGGXFqGEdFKOc9hWjrBg1rEOuGDmQ73Ji5EC+FWOW2leMsmLUsA6KUU77ilFWjBrWQTHKaV8xyopRwzooRjntK0ZZMWpYB8Uop/2aYuRAvhVjltpXjLJi1LAOilFO+4pRVowa1kExymlfMcqKUcM6zGqMFdNoRAghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBClIsKUAohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCVI4KUAohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCVI4KUAohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCVI4KUAohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCVI4KUAohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCVM6q2Aaccxs//vGPr3DObZzGBxJCCCHEcHLshxWjjPYVo7wYqallO9UQo4Z1yBUjB/JdTowcyPd8xUhNLdtJMcpov6YYQoil1JLfNcSoYR0Uo5z2FaOsGDWsg2KU075ilBWjhnVQjHLaV4yyYtSwDopRTvuKUVaMGtZBMcppXzHKilHDOuSKkQP5LidGDuRbMWapfcUoK0YN66AY5bSvGGXFqGEdFKOc9hWjrBg1rINilNO+YpQVo4Z1UIxy2q8pRg7kWzFmqX3FKCtGDeugGOW0rxhlxahhHRSjnPYVo6wYNaxDiTGaprlyub+tmM7HEUIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQpaIClEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQlaMClCIVq4EtwFZgfaIY69v2twBrEsXYv42xGViZoH0HbAK2tf+7BDG2A48EfgO4L2nyXr5t5PC9Ev/5t+LXJwU1+F6Bz4ffwOfH9gQx1gMPAZ7U/p9iW3W/p6l8d7d/Kt936vx8dKIY3e2TKr9HpMzvEbPsu9vu6gTtj/J7RIr8ztWfj5DvyaTO7+46/CqwLkGMHL6P6fx8x0QxuvvvWfWt/tyOfNuoyfeIlL5TH4+NyOF7vwTtQ12+R9Sw/5513zn68xrmW0ZzIal83wx4HPAE4A6JYty5bf8k4KgE7a8A7sfe+ZZtCWJsAE7Ez7covydTQ3++ofNzKt87Oj/fhzR9yM06P6fK79y+U5xnqHG8luI7C3nm1+7f+T1Ff77Ydwrk207q/O725w8G1iaI0e3Pjyd9f377BO2DfFtRftvJvf9OQQ7f3fy+XaIYd+n8fESC9mvZfx/Y+fl40vTnym8b3W2/MUH7UE9+y7eNbn7fmzT5ffPOz6l8d8c68r08OXzn6M/v2vk5xf4b6vCdoz/v5vdtE8XYQN7z37Pqe1XnZ/mejHzbyNGf17D/7rb/INJcV72z8/O9E7QPC+eJ5Ht5asnvGnyvBE7o/L4lQYxafP985+fjEsVQftuQbztdB/K9PDX05yDfVuTbhnzbkW8bNfpetexScaT23W1TvifTnV+T7+U5qPPzPRPFWLvMz9MkdX6vAh7Q+X1zghg15ves+oY68lu+7ci3jRy+7975+dAE7as/t6P8tiHfdrr5fUiiGPJtYybzO1UnkZIrptBGqguhhb+g4WCWJtp1wAXAVVOIsR+wi6UTH1cD5wI3TCHGVuAAFl6g0QCXA+cBe6YQ40D8Rf/dC/BuAi4BLpxC+1uBPwAexsL1OAv4I+B9U4gh33ZS+16Bn4zazMKJ7d3ARW2cWCb5Ph/vJJYcvp8EvAg4rPPaDcAngJcCl0a2vxJ4JfBkFl5ochnwl8Dr8O5j6PoecQTe98+IXwcY7/topuv7l4DXsvDCg+8CXwJeDPx4CjG24fO7e6Lq50mT3yMOI11+jzgC/729iNnxvT/+IsVuft+c9Pn9I/bm92VTiJGzPx9Rk++r8Lk3Dd+p83sVvj9/Uue1D+MdvBd4A+n682n6vjnwh/gbNUd8Cfh3/Pp9eQoxxvmG2fINfh22dn5P0Z8fzMLj0Wn7Xov/TuXOb5DvxdTkexcLJ7py9OfTPh5L7Xsl3kXX95HI9zhy7L9fxfj993uA3yd+/12zb5jd/E41Pu/67s63TNP3LYA3s3C8Bv74+JXAP08hxv2B1wDHdl5rgC8ALwF+MoUYTwVeyMITVdcDfwe8DO89hm5+d8fPo/x+A/HfqZrzu5b+/BL29uexMbbhc+/XOq+dDJzZvv7ByPYBbtm21b1R88tMN7/3le9bUM947WdMZ85oXH4fw+zl99OAF7CwP/8Re/vzaZynlW8bNeT3apb25x/Bu3438MYpxNjO0v78U8AZ7esfimwf4FbAm1jYn38F+Dd8f/4vU4gxyfe5+PM/sdTgex7ye1Z8w/L9+cV4H7Hk8H1rfH7fq/PaP+Pz+xXAV6cQ45eBV7exRvw78Dn8uavTphDj6fj998Gd134E/C3wctLuv6fl+wB8v31i57VPAafjHX1kCjEm5fd5wDVTiLERv632RX5fhu+nUuT34cxmfr+ZhTdyjfL7d4GvTSGGfNs4AH+u8iGd1/6B6ea3fNvZycLrW6btewfexTjffwB8dAoxluvPr8Vvp2n05w/A779v1Xnt34FT8Pvv06cQI4fvXcx+f34svq/o5ve/AN/B5/fXpxBjXH4DXIkfI8xKfsu3jX3lezR/ntL3jfhj8Fnxva6N0b05Ztr9+XL771nyvQZ/ju8Jndc+is/tv8Dvd5vIGDsYP147Db///lhk+zAfvs8j3gUov63k8P0s4HksLBby38Df4OdbpnGfTA2+j8Pvv+/Ree2rwLeB3wH+dQoxlN82VuLnB7s35h6J930h8ddsgHwPIbXvVfj8Tum7lv58e/tvX/i+GH+9USzybUe+beTyvYuF9+rK91Jq8b0Jn99d3z+PfC9mX/s+r/0/lnG+Yfq+D2BhDZRZ870LP9/yoM5r/wicir/e+e+mEGOc758jve/u9WvT8P1c4DksfDjKfwN/jT/OiL1OxzH+fGgN+Z3T97n4bRbLcvk9Ol8Sm9/ybacW37tYWMtDvsfzEPy1nd2HwH0f+Ay+nsfZU4ixXH/+Ufx5vthxp3zbUX7byOF7PX49cuf3f+Lz+0XAOVOIId82cvhOlt8pKoqK+WUN/mbZcVVe1+ETPLbK7EZ80Y5xT93Yr40fWwF2B/7E2+IJEIfvsI4mPncOa+OsXPT6yvb1wyPb3wz8E/AYlq7HYcBb8TcKxrAW+baS2vcK/OfcwtInxq/G7wh3RMbo830Es+H7pfjv/2GLXl8DPBo/kIqppu/wN6e/gKVPOd3Svv5BlnoaQp/vg5kN3w/CT5Qufuqlwxem/BwLn44Zwg7893/xU9Kmmd+HMzm/F3/XhjLJ96iI4Cz43ojfVpPyO/ap3C9jfH6vxe8PY/Mb5NvKJpb3vT/T8Z06v1fg++vfZml/vhV/0P1XpOvPp+X7lvj+9D5jYtwWX5z1gZExavANfh0OIH1+Ly4WDnt9HxAZYy1wFMpvCzl8H0M9vseNweV7L7Xl9yz7XoEvLvN8lo77tuJPir2P6ey/5bufA1F+W7gV/qbl48f87fbAJ/HFSmJ4CP4mmGMXve6A++HHizeLjPFK4E9Y+pS0tcBJ+HnKmO/tCnzxwb78jmFe8vsoys/vFfjiE+N8b8MXTY31vQ3/3X8kS7fHEcDb8ceDMdwan9/3HvO3UX6fEBmjBt/Q35/HPmG1L78PwZ8Uj8GS3/tHxsjh+1XAH7O0P18HPA74NPH91BHIt4XNbTv7Mr+PIm7svBLfnz+PpQ+H3IY/X/PeiPZH7ZwCPIKl63Ek8A78/iSGY4HPMr4/vwPw9/gxVQx9vnOMz6fh+6NM9v2eiPZHMVLn9zr2fX7Pgm+Y3J8fSHx/nsP3bfD5fa8xf7sDvjj5fSNjWBxbhQAAIABJREFU/Dr+pohbL3p9Bf5Y7/P4ecQYXoN/AOnBi15fBzwefxNL7Pc2te9Rf/5wln5vj8IXVXleZIy+/D6S6eR333zL4vUbyk6Wz++tKL9HHIfP73uO+du08lu+bWzHH38/jOXz+7mRMSy+fykyRm2+Fx/HT9P3KSzv+534G05iWMfy1zusZzr9+cPxhbZutej1FfjClJ/Dr08MuXxvJ53vHP35bVk+v++IL1Z9n8gYk/J7I7OV37Pu+3bU7XsF0/N9JON9r8L7Xjy3NxSL722L3zSQ0fh8w5i/jfrzcX39EGrwvQp/ju/ZLJ2X3Y6/YfOdEe2DHxt8Dn/8umrR344G3tXGj2FefB+N8hvy+N5Cet9vwBdgPWjR6+uBJ+KLtI5bxyEcyez7vj3+2ux7jPnbnfDbadzc+hBy+N5FPfvvxQ9XBe/7UOJ934F+3+PmWocg3zZW4j9nSt/rqaM/39X+21e+dyLfI/p8H4V8Q32+x53zlO+91OT7MOS7jxJ8L3eudAg5fS+ep5gl3zvx8y0nsnQ9jgH+Ev+Q6Bj2pW/H9Hy/GXg9C4uVgV+vJ+HP8427f20Iy82fj3wvvtZiKKsoI79j5yn6fB/N0u/zUA5i+fzeRtrzJfK9kFp8H9m2Jd+TeTz+XvmbL3p9Jb7Wx+eJP5f4Ryzfnz8Ff51tbH9+JPJtYSvKbwurSD+fOjrmmnQ8ljq/v0D82NbiO5YjkW8LSfM79qYwkYZt+Cdvfw34Cb6y89eAs4BvGdt4Mr7YEsCf4w9Uwd8cdvupfdKFHMLSC1K7uHaZ0J2F5f0riesA1+JP6PQts3jwM4QtLL3xZjEbWVrsaAi/w9KLIEOWmcTByLeFHL4PpL8wo2WZSdSQ37fEX3AVu8wkHgM8uGeZB7O3fw6hBt/r8Td+ThrAbAP+LLB9sOd33zKT2EL/DdebUH7nyO9b4fdrsctMIofvxU90HMcs+D645/259t8x+f0YFj5lbBwPAR4VESOH7z9j4RObFrMKf6wQGqMW36Xkt2WZSVjzO5RafG8lj+++QgGWZSZRg+91lOM7pki1fNvI4fsk4Fd6lvk1fHGaUOTbxjr6C2mvNSwziVry++1M3uesxt+IHxpjP/zx96Tv1HZ8Mf9QjsMXgJzEscQ9DOdx9BdOfyj+5vBQcvg+lP78jjkxZjmeWxUZI0d+Px5/M/8kYn2/iv7Cq682LDOJtzO5D4rN71p8W/rzzcT157vo386WZSZhye/Y/Xdq37fFP3BjEsfhi8CGspX+QiDybdsf5Mhvyxh+Eo+nv5D2w/A3t4fyavr76tcQV9ztHfT35+8k/ILqWnw/gf7Cyg/H78NDsYzFxt10MoTUx2MrqMP3NtL35zl8v4PJ5/FX4wtthMbYCLyNyddlHQC8JbB98Dd99xVOvy39x2yTsPruuyZiEq/FP+m5b5mjI2KUkt8xMdbT/2CEXPkd47uE/F6D33+HXnBZku+Y47Fc+d03FnsdcRcj/znybaEk30dGxDiUyfvW2P58E/4c+6QYB+IfxhNKLb6tx98x/fmfM3neaA1+vJY6v2PG5/Jtx+I7R38+C777bhy3XLM8CYvvcUWbhpC6P6/F95PpL6T9aPqvWZ7E6+g/1noDvnhMKPJtw5rfMQ+JqiW/FxeFXEys77vQXzj9jsALImLU4vsvmDwOWYsfr02ak5lEDt8b6C+kbekDJiHfNuTbjnV8HlNM4BBmf/8t33ZKGK+tpr8PmIR825FvGzl8H4R8W5BvO/JtYzvpfb8BXwRvEm8mbqyT2vdK0vu+B/DMnmXuTNzDKi2+LdewTqKU/XdM8Tir75jv7H70F3bKkd+Wa1gnId82cvnuK+RVi++Y/nw7/tz2pOvPDwb+MCLGPYGn9yxzV+IeVinfNlbSv2/Old8xDy/M5btvrjS17xXE+R5de9qX32+OiFFTfz7rvq35HTw+VwHKMrkEf+B0D+C9+BsVR7/vMbx/Jf4JCB+dwmexfkfWYqu2upLwQh5bsJ2MWk94BWxrVdpxTwKcdozQCrkbgMcalw19SoZ8Tz9GqG+HfRuHxliH3859lO7b+n1/DOHVo60xnhrYfi2+H8Hkgmgj7oovUhGCdf23oPwuJb83EF54zZp7j8W2vuOwHuzG+LbejJnDd+iNoTl858jvGvrz2+JPtFjaDy3cksO3NfdifOfIb/XnNnL4Lmn/HTqRmsP3Vuroz60xQl3Ukt+1+O47YTWi5P33vPneSrn9+QrS+74D/saUPrYTXpjpUdhuMvxF4OcDY1hz7yTSz+mEznXm8G2d01o14LMsZiu2+fz9CC+8NiS/Q7F+p0J9b8T2MAGHf+JmCHfE53gfBxBeiKsW36mPx1aQfr6llvy25t7jSX/MV4vv0Pm1HL6tLmLyO/X+exPwSMNyMf35LwC3Myy3A1/sPgT5tlFLfm+hHN8xD1/JcTyW2ved8XPofexg78Neh/JYbBe93ZvwwufWnHoC6ceEoS42Y3tYiMMXXwmhlvweMr8WSg35fRd84fQ+DiQ8v0vyHbP/Tu17C7ZzkDH5fVfgNoblduIfLhiCfNuw+l5BuG/rnHVMf34S/TemgS8GFloYuQbfK7AXtwuNYb1mbCfwq4ExrPm9P+GFemrxnXr/fTfg1obldlG27xzH3zXMr1n789WEF9KsxXfq+ZZt+AfE9LGC8Pk1+Z5+jNDrW4bkd+h65PBtnU+N8W3NqScSfjNiDb7vAdzSsNxB9D8Mfjly+E49loL0++8h13yH+v5F4BaG5Q6mDt8lj9esvl1EjP3I059brhmT7zy+LXNaOXxvRL7l20Ytvi3bOJfv0MJr8m1Dvu3kOP5OfQxwALZriFYCTwqMkcO39Z6OGN/W6xWfRHih+9S+h+R36Pe2JN/7Ez4XUsP5klp8Dzkek+9+cvheQ7jvJ2I7xn8A4YXRhvTnofXNavC9P+l9l5TfMfOp8m3jicYYv0J40dEafK+iDt9DjseC8lsFKGePlfinLH8T+Hv2XiT9aeD3gH8CngW8HHhuT1u/BHwe+BfgA+y9eO4/gZcCp2C/+XFItVjLRXqx7wuNYV2PlYQVqHPYC1+tJyxH74D9BOLxAe2DfFsZ6juk6MIG7JMnoVWdc7jIEeN443Kbsd0gvpiN2ApHANyJMB+1+L5PomW7pM7vFSi/U7wvdD2ONy4Xmt8rsBdKqcV3yTGG5HdIwdFN2L8ndyasD9mAfZwXup2G9J/HB8YoqQ8J9Z0rv1P7Lin3QL5L8l3y+HzefIdODpaUezlihPreiq1wBPibFkOK4OXIb/m2MSS/Qx8wkcP38YmW7ZLj+Pt443LbsBVwGvc+a37fjbAb/edx/516PULzexu2whEQ7vvO2NcjdV4MXbZLSccAob5XYi9kWHJ/Xkt+H29cbki/3GUefecYE5ban2/H3p/fg7ALke+C/btScn9eg+8DsD9M7BcJu7CltOPvGvJ7FXXsv0N9Hz9g2dA+xPo+hy9CmTLGdmwF+RYzxHfoOOeu2L+Lqc8bQ/prT4Yu26Wk/I4Z15Y035LjOzXPvnPk9/EDlp1n36uow3dJ15bF7L+H+A45l5HDd47+vKRryyD9cUbpvq3nUWvxnaM/D/VtnRMv2XeO+bUhOVuq74OwPzwudJ805Lz58YExcuy/a/BdWn6XfH1Ljv7cuq/ZCdwqoP3SfGv/baOW/JZvG6uZb98l3cs3dNkuQ3yHPIBRvu2UdA4u1Pdq5NtKSWNC+baT4/hbvm3Mu+/U++8cvu8xIMbxgTFy7Ftz+D7euNzBwM0D2i8tv0ueb7F+Nke54/MhvmPWoQbf1hjz7nt/0u+/c/i2ztOsBO4VGON443KHEvaQ5lp8l3Q8pvyuw3eO/B7iO+TertLGayX7Tp7fKkA5exwDvAt/k+TlLHwa+2bggfgClX1sA16Cf7r3PYF/A36r8/frgROAjxs/15BCDSFFHXLFGEJIjKHvCYkxpGMOffK6fKd5T44YIdTiO3VuDL1BMiRGLb6HbKvQJ+CkXg/ld1kxUue3fNsZcnxR6neqlv58yHqEjglr8K38nq8YtfiuIfdyxKjFdw0ucsTIsf9W7pUTY+h7QubAaziOgTxjwiHvCznGL218XmpelBgjJPdy+E79nR0ao5Y5+tR9bcjyQ99TS+7l2C+F5IZ8z1eMoX1b6jFCjnFOjv48lBp815AXMe9LFaOG+ZZS93swrNhqqcdjOXzn2E7K7zTvmef8nkffIZQ2XivZd+q551p8l9aHlHqOvYY+CurJ7xr681p813CerxbfimFjSF6sIOyBH6Xt90Lva6rB9zzmd8m+U49tSzvGCHVR2vx5Dfldcu7Vcsw3b74Vw06p15YpRpr3yXc5MUodE5a2nWqJId+KUUKM0uY6Q8fOQyjVBZR1P3DJ20kxymhfMcqKUcM65IpRw30T8zh/Ps8xctTAq2E7QR3n2Gs4h19NDBWgnD3OAL7f/vxd4PDO36zFIsEXsLwF8Dnga8BJEW0B3DBg2esHth3yviGfJ/R9IeuxB7jRuOyNwE0BMX4CNMZlfxzQPsi3laG+9wTEqGE7DX1f6HpYv+8NPo+GcinwM+OyP2uXH0otvods31L7qZtQfqd4X478PjWgfflO874c6xES41LgIuOyF+KLwg+lpLwYumyXGnzXkt+7ByxbS35r/21Dvm3It51S1+Ni4BLjshcAVwTEuG7AsqEu5NvGTdjnzHaTPr9DXeQYr5UUYw9hx2MXYc/v84CrAmLk8K38tjGkPw/1XVJexMSowfeQcyC7sZ/36KL8tjOkPz8toH35TvO+1PndBMYYcg7kXOCagBjqz6f/vhy+zwGuDYih/J7++0J919Kf58jvHOdDre+7iXL33zWcNx76PuX39JftMo/77xzHYyFovDb99/1/9s48bpKivv/v2ntZ9uS+l0tA8Ix432c0UUAuURM1h4pH1CQaYxI1BuMvmhhNVDwQORRFRUWJdzxREI0HMTEmKgtyRm4WkGv790f15OlneLqnuqqrtqbm8369eLHPTE99p/s936rq6upqX9934O4752vTKerznPbDtz5P4buU+jz2XIQ+n5PvONs2yem8ctZ959Y/z9X3lbhf096E+9yIJrnlXp/r8b4xcvXd55p2Kfmds2/X3/sdwEUe5feZo+Tru8/x9XWRWx2Sa37Ltzvy7cYszl+bZd85HaeQGDnth/pr8WPktB/yHT9GTvsh3/Fj5LQfOftO0XfO7f6x2OfftwOXeJSv/I7zuVnO75yOU0iMnPZDvuPHyGnexm3ALz3K7+Pbd35LKb5T7IfrMfbN79uRb1dymlNR4eejj+9Zr8+j74cWoJw+mj+8Lcx/YmWfm3MM8BXgYfV/hwIvbrx/c8/vdSPuFYLPomt9PncnfgsJ9IlxM/4NkmsM3+N0CdatCx/wjCHfw8fwPU534H6jtW+MG3GfnJSzb9ff+1fwG5CqgNMctz0Nvxsy7sC9fs7Z9ym4dQavBD7nGcN1sYLN5J3fJfh2/dwdxM/vf8UvvwGud9xu1n275l6I79j5vQU43XHbU8m3Pv8X7AKZk9iC3Q8f+vi+yTOG6/6H1Oc55bfrMR3nBvLK7xS+fSbPg3y7Mmu+fV2U4rtPfy1X33fh3n6f4lE+pGm/XX1XATFy8n0T/vkd+3zsduL7/gxuC5/fhft4wziu/dXLgC94xnA9H/sidoGpvtwFfNBx21M8yoc0vpXfbtxJfN8/A8513NZ3/PzT2MU0JxGS3yl8u/Zfcq/PXa+dheS3y43fuee36+/989gFYH2IfT5Wiu8U52N9xtd86/MPOW7rW9f+D/DtyDHOxu1Y3Yn7+cg4ri5ux2/hZYh/PnYHcIbjtr4u+uS37/n39eST3zn7hrzqc1/fn3L8bEh+u/7eLwG+HDnG57AP5PAh9vjaT4HzHLf1rUP6tN+u+zuO6++9lPz29X0b8ftrKfI7J9834fdwY4jv+7+A8x239c3vT+J2rO7AfbxhnBS++5x/x/btm3spfKeoz12/20XAVz1jpPDt+hBNX9+34b6wvG+MT+DmMSS/U/TP5duN3Hz3nT/fN0YpvkOuf+d0/p2r79uAjzhu69u2/gfw3cgxUrTfKXyX0D9Pkd99xtdy9n2K43bn4HY9cJw++5/Ct29dexZu7dLt5N1+u+7/jfjld0m+XeZ8y3cZvlPU533GW2bZ969xX3R01n27HmP5druXryTfPg8vr3A//5513zmdf8t3Xr59HkTbJ0bOvn8I/MBxW9/xlutw951ifM3Xt+v+fwq//cgtv31j9PGdc3736Z/Hzm+f8RxI4zu3/tos+76VMtpv17q2z/wt3xifxG8/Zs33FuLnd5/5W+O41m83oPyO7ds1936C+3yecXLy7du23or7gow5+46e31qAcna5AHgwsE/990pgv8Ayf+WwzXX4LwxzB26Vgsv3aONGJl+MqfCfnA+2IZt0DO7EvwIEeBOTV8n9HvbCty/y7ca1TD4Grvvaxv8yeTGBW/Ff6GsUYxKhvl0aPZfv0ca/MHmy1O3A/wuI8W7sooldXFlv58tVTL/vTbjdXP+3+N8c45rfIb+pa5n8/e7A/wQG0vhOUZ+75HdIfX4Otl3rIjS/ryG+7xT1uctxdmm72kjhO0V+n8jk9v8K4D0BMWL7vgNbj07iA/g9OWYUI7bvG4jvO6f89l04AsrIb/l2x9W3b18qle9Jg7WpfKc4H8vZ9+2U4ftdDp+/HHhvQIxcfF9HmG+XweoUvkNilJDft2PH8CbxfuwCkT78DLfJ/W/E72IP2IWZJk2W+jXwd57lg83vSb+Xy4H3BcRw8X0LZeR3SF2bIr9T+D6Byf3i8/FfmNU1v0/Cb2HWUYxcfOfeX3MZXwvNb5djENpfi+37U9gJsF2E1udXI98ulJLf72TyYtuXYutCX05g8nE+D7sQtg+34Tam/D78F2ZN0T+/nvi+30F83679Nd+FYUYxJpEiv2P73kKY7xT1eWzft+HWpr2Xydd+2/gpbouFnIDfg67ALtRz4YRtbiVN++07+Q7c6vNvAV/yLN+1jgvJ79soI79d++chvmPn96+BNzts9x785wLdhtvk11Dfkya/bgmMkeJ8zCW/z8V/Id6cfIfkXi6+bye+729iHxzqg+uYU0h9/hPgow7bhbTfKXxfzeTFFEJ9u5x/30z8+vzd+OdfKfldgu9bgbc4bHci8p2Tb9+FI1zr82vwX8gvJ98hMf6JyS4vxv+BXWDbtEnH+Rv4L7ws3+645nfI+Zjy242PYRdo7eIW3NquNlL4djn/DvF9C/D3Dtu9C7cHcy5ETvmdov2Wb/l2JbbvFPX5r3GbHy/fZbTf8u3OLPkOuVc3he9fkcb3JDYT37fLb7sN+XZHvt0oxfcJTJ6T/WXsNXAf+vj2nRuewvdHsA8462IzbucibeSU374LfZXi+zomr3uSqr/mu/ATxPftegxCfLveryzfbucoufv+NyavJ1QBb/AsH+DD2HlyXdwE/ENAjFnyfQ1h+e0yPz7k/Ns1v33HCKEc3y7HIMT397DrJ3VRAX/jWT6UU5+naL9dfIe23y757d1+awHK2eUa4IXAydgbb74C3COwzOuwk+/bBjqvx/9myhFX0H4iV9XxQybOgF0Yra1i2IJdoMf1iWELcRd2wkdbRXt7/R18J0KCXWD0mbSfAJwHHIX/YBHMhu+7CPd9J5N9X0yY71uBS2j3eQt2P0NI4fty2hv+ke+QgZy7gKOBb7e8fyPwLOA7ATGuAp5K+/HeVL8fcuJ9K/Z3Oe2+/xg4veW9O4G/JGxiHEzO70sIz+9NTM7vkLo2he9rKSO/j6L9CRs3YtvFCwJipPB9C1vf93X43yw9IrZvsMc6Zn5fia2vL255/6L6/ZCBlpHvtpPFIXyfDLyW9n7G6cCfBsYowbdLfm9imPyO6TuH/O7qv7si326U4nsT8u1CSb7bfA7h+wrgaXU5C/ELbPsdMqidynfXRMIhfF/G9PvOIb9vJtz3+4DX0f49TwFeFRjjZdiLugtxB/BnuC1S2cYdwNNpH0+5ATgOe/Hal8ux+Tspv0MuUrr4bjs/cCWX/A658Abx8/tybH3etlD+zwn3/W3gd2i/IfqbwDH4LyQAdrGi19Oe3x/A5l8Iufh2fQLkQozq87YFQVPV5yny23fxqhGX0X7T1RC+7wCOoH387HrgGbg/oX0hZsX3qP8eQmzfMDm/LyYsvy/D1ueXtrz/s/r9kAdAnEt3ff51wuvzd2Mn17X9Lk8G/jygfJgt3yHXdW+uy1d+T2YT8dvvi4lbn6fwfSJ2cl3b93w/8JrAGC+hfRGrO7Dj8y6LVLZxO7b9bnsI43XAscCPAmKk8P1N4Dm031D1NWw/JIRr6b4xW/ltuYMy8vtddC+kcxLwF4ExLiW+74vIw7fvxFewixU9l/b8/irh+f1O8vDtskhGF7Pi+7iA8sGeP8Suz18EfLzlvTuAV2AXJQohhe9NxPXtUp+3jee68g7sQzfb8vt92PllIZSS35uYft//TLvvCjve+leBMVL5bvMp33OM6vM2RufnIeTie9KiCV1cAhxG+9zN/8GOt4Rc1/0q8Dza5218heHa7zamwXeFza2YvnPI780ov8F6Phz4fsv712LnK/84IEYK35uxYxUxfb8d+xCnhWJU2IcBvC4wxqW03xOl/J4jhe+3YR900+b73cT3fTnxfV9MGb5Dx9cm1efXEF6f/xL5diGV7645lfJtKcX31eTh22XRozYm+R5d2wr13TWeehvD+I7dP3fxHXJPFLi13/It366U4vtLwB/QPi78Rex8pxBK8H0rduyr7aGb1wBHMnmRyi5Gvtvuq1R+z5Eiv7vGU4fI70nrdaTwfRPyPSqjBN83UYbv3wc+0/LebcCLO9534Ra66/OrsfX5pEUqu0jpu20uQgrfVxPu+5e0L1JXYc85h8jvtvydtvyO6ftXdN/zNITv36N9kdlRfk9ahLYLV9+TFqnsIpXvy9j6vkPuaQa3/HZZpHJBTFWF3G8BxpjVZ5111tePPPLIRwUV5E5IZTZizQBliHaWAOuBVYDBdg6vJayRGGc5sAFYgU2Em7ETKEIW8RtnFXY/lmIro5uwk4NDKqZx1tb/LcYOZt9A+ISWJttiJ348BdgGW+mdhp3APxQl+76OsJvSxont22D3YTV2geE7sPvg++SbhSjF9yOA38XecAPwJ9jFGHyfwj3OEuyN8McAv1W/9hzsCdhQ+zHyvan++57E8/3z+u8DGN73QdiT14OxefEt7A34oRPCm4zy+z/rvzcSJ79HCyMcwvD5vQhYx/T7HuX3aKBgX+Ll957YgYvPMmx+w93r8+sZpo86Qr7diZ3fS7ATdY/G7su1wJnY+jzk5rom474Pwv6mhvS9C3ay8EOxv9sfY2+eDbkIM07K/lrK+jx2fsfwnTK/5bubhXxfh/+TUBaitPo89vmYfE+mlPb7MGz7vR57we1M7IB5zPY7hu8N2IVawD445jqmtz5POd4SK79H4y2jJ50O6XtX7IWf0WKT78b210Iuso5zMPb8+w/qv9+IXeAydMJok0dhJ0UdU//9CuxiKkP1dUb5/YH673MoJ7+vJeyi2zgl1OdLsb5Prv8+B/t7+heG870G+8CKN9d/fxg4lfYH2PiwUH6fBPz3gDFK8A3l9NdKyO9HY+vzo+u/X46tb4c8d5VvNxbyfS3D1YOQvj7/DPb3NHR9/izsjY9g6/NTaH9gkQ+7YevzV9Z/n4jtr8Wuz6fV91F1nKux7fdnUX9tnBJ8w/z6/GDstbFpq893x+b36GFNJ2L7a/8zYIx71TF+v/77BGw9FTqBsMljgGcz136/DFvfDnmsYvtei63Pn4gdq9iEPU7nDxgjRX6vwOae8rublPn9wDrehdj2e8j8Hve9D3Y/5Pvu5T8LuzAJwBkMn9/j9fm7mE7f22JzY+R7L+z50jT6HtXnF2HHW6atPr839jd1APac+xvY323ohPAmJfhOUZ/vgXVxKPHr89H1ks1MZ36vY+7GCPluZwW2DllOWb6vJ+CGkgVI4XspNvdi9883MDdHahrb72XYhw+8r/7709jxr88x3D0N67Dt95vqvz/E8O23fLuTIr/XY/tpYPP7WsIeMDdOKb4fhx1v2RXbXnwa+7CRIY9VCb73wI57HYq9v+FH2Pb7Z10f6ony242Uvv+4/vsd2GtA8n13SvC9FOti1B+f1vpcvt2Qb3dK9L0/1oV83x35dkO+3SjNt8bXulmPnYN3Qv336djxlrYHRPtQSn4/ATs2tQvWwdnYh4Xp/Hs+pfguIb+3lu9raV9A1wf5dqMU3/fH3mP+nPrv12HXHQp5iHwTg63Pnwk8vX7txdiHO4Y8nG2c1L4PxObFtPleid2P2Pm9HviP+u8S8ntafY/ye7+63K9g8/vaAWOsxvqQ7262Rn7vjT1WE/O7qqrW4zmNC1AKIYQQQzGaYBlzYeLYMUrYh1TIxWzFKIFSXJQSIzYl7EMqVJ/nEyMF8j1bMWJTynFSjHzQcRJDU8pvSu23YkxT+YqRV4wS9kEx8ilfMfKKUcI+KEZelHKcSohRwj4oRj7lp6IEFylilLAPqSjhWJWwD4qRT/mp0H7kUX6qGKUg37OFfCvGNJWvGHnFKGEfSooRGx0nd0o4ViXsg2LkU75i5BWjhH1QjHzKV4y8YpSwD4qRT/klxUiBfM9WjNiUcpwUI4/yFSOvGCXsg2LkU75i5BWjhH1IFSMF8j3FMboWoFwU/HWEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIUTWaAFKIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQojCMVVVBRdy9tlnf++www57wADfRwghhEj+nI/dAAAgAElEQVSGMaYCqKrKTGuMEvYhFXIxWzFKoBQXpcSITQn7kArV5/nESIF8z1aM2JRynBQjH3ScxNCU8ptS+60Y01S+YuQVo4R9UIx8yleMvGKUsA+KkRelHKcSYpSwD4qRT/mpKMFFihgl7EMqSjhWJeyDYuRTfiq0H3mUnypGKcj3bCHfijFN5StGXjFK2IeSYsRGx8mdEo5VCfugGPmUrxh5xShhHxQjn/IVI68YJeyDYuRTfkkxUiDfsxUjNqUcJ8XIo3zFyCtGCfugGPmUrxh5xShhH1LFSIF8lxtj0RCFCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKIfNEClEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQhaMFKIUQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghCkcLUAohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCFI4WoBRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEKBwtQCmEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIUThagFJEwViWG2NWGGOi/M6MMYvq8pcbY0ykGIvrGMtilF/H2NUYc29jzK4RYyyr92NxpPLl2z3G0jrG0ogx9jHG3MsYsyFS+UuMMQcaYw42xqyKFGNVXf6BxpglkWJEyYexGNE8LxArWn43/j3V+R2j3JZY0b1Pu++F4g0co4j6vBFLvrtjbBej3LEYRfgupb8Wo9yWWNPse2nj39tEilGa72jnY40Y01yfr2r8O1r/PHb73Yg1zfldSvud5HyshPa78e9pbr+3q8cp9olRfh1jNxN/fG3fej/WRyq/lPyO3j9vxNolQYypzu+F4g0cI6Vv1efdMYpovxuxUviOVZ+nOB/btvHvWL/b0nxP8/l3Ct+qz93KTTLe0vj31NbnOh9zjlFafy1F/1znY90ximi/TYL5LY1/T7PvKOO0WytWTN8mwfWxZrxIMVL63jlBDOV3d4wifJdSnycYP5/6+nzMxbpYMVLU5/LtVK58u8eYet9jMWLV58sa/14ZKcbqxr9j7cf2McptiTXNvtVfyzCWfE+MscSkm8+k9rs7Rmn5HeV8LJXvxr/leyvGKtF3LErwPRajlP55rN/UDjHKbYk1zb7NQv8eOEYK38pvt3KXN/69IlIM+e4fY5p9/9/4Wozy6xgpfe+UIMY01+dJ+mvTfv49FmOafaeYW6b63K1c+c4w1pS33/LdP4byuztGSt87Riq36WJtghix11YppX+u/O6OMfh3z3YBSmNMFeu/rb1vJVMPGuwEHAgcANwDuKexN4EPctJn7A0ruwH3rMs/ADjQGLPTUElijFlpjNmrEeNAY8w9zIA3aBhjnmqM+RpwGfAj4DJjzNeNMU8bMMZ2xph7YH2MXOxlBropSr57xVhjjNkXOKiOcZCxCxesGaj8RcaY440x/wH8HLgQuMoY83FjzKEDxVhtjPlr4GLgJ8CPgSuMMe+qj98QMfY0xrwLuKIu/yfAxcaYvzaNQejAGE3fo9di+h69NpjvurxRfo8Y5fcgF/nqTuYov5sxhszvZR35PUgfJbHvEYPmdx1ja/oe5AayMd8jhva9zbTX53UM+XaLcagx5uPAlY3Xfly3h0PFKM33eH8thu9Y9Xkzv0evTVV9bizbGWMOaLw8tO81xpg3YPtrI640xrzTGLPHQDFK8X24MeYbjZcuM8Z81Rjz2wOVn8L3YmMnoh7UeHno/N5ojHk3jboW2GSMeZ1pLIISGCNl+z3iIGMX7p+m/F7I90FT2H6nrM+b7bd83z1Givr8gcaYs7B1yIXAz40x/26MeYExwwygG2OOMMZ8E7iUufG1rxpjfmug8hcbY15ijPlP4GfMjbecaYy5/4AxUvjenbj5/SBjzCeY3z+P5XvE5caYrwzouy2/95zC/C7B99qW9nuoMUL5do/R1n4P9gCkBL4XG2Neaoz5SePlq4wxHzHG3G+gGGuNMScAv2y8fIUx5p9rR0PE2NsY8x7u3j9/rRnoYVG1741Mt29jjNk+cn6v24q+/2pA3w82xnwSuKrx2oXGmOdPWX1egu9U9flG0uT3+PnYNPlua793nbL2e6H8/pEx5g8HzO8jjTHnNl663Bjzr8aYJw9U/mJjzB8ZY/6r8fKo/b7vgDG2lu8dpzC/92u8FDO/m/Nb9jQDTaou0HdzLkJs3/dMWJ/H8D26PibfC8c4yhjzrcZLlxtjvmyM+c2Byk/te4R8Lxwjpe9S6vPm+Pm0+Y5dny8xxrwMGO+vnWGMuc9AMVLX5/LdXv4SY8zLWdj3vQeKUbLv/afMd4r2e4Mx5k3MH2+53BjzNjPQA+eMMfsZY05i/vjaL4wxf2GGG0d4qDHmbOZfL/mBMeb3jBns/HtdAb5L6a+tSpDf8u0WI7Xv0XymafM9ar9/2nj5KmPMh4wx9xooxmJjH0wTs/1evhXze7AH4hhjjjXGnNd46XJjzBeNMU8cqPylxphXkM73iGn23RxPHdp3W34PNedy5Pu/Gy+n9D3IDeAL+TbGlOJ77wF9j9rv8Xs/hu6f/z/sHLwRlxlj/tEMtGCusefBJ9O4doXtn/+5Ga5//nBjzGeY3z//vjHmeUOUX5eXwvcOkX0vlN/3HDi/U/guJb9j+97OGPN3zM/vyxPl96sH3I+Sfe+RwPdbB/S93Nh7k/5vfK3Rfg81FpLC93HGmO80XrrCGPN5Y8zjByo/he8U9XnT9+i1mL6b59/K7/kxUvpunhsfWO/bNOV3Cb6XyLdzjBJ8b2+MeTMLt9+DLJAs387lb8383iVB+z20772J6/uZxpgLGi9daYz5nDHmsQOVv8wY86fYewWbMU4zxtyz7XM9Y4x8N8uL6bvZP5823yXldyrfo9cG8Z3tApRi+jB2McB9gZ2A5sWjRcB2wH6hiVd/fv+6vObvd2kdd18TuCihsQsS7AesBZoJtgLYzdgFBYISzxjzGuDTwKPG3nokcLYx5i8DyzfG3hC6G/Z7/99b2P0KXkhHvnvF2BHYCIzfELgK2GgCV9uuj8GZwLuY3xgtAY4EzjXGHBYYYz3wTeC1QHNy12rgeOACY8zBgTEOBr5bl9ecOLFrHfeboZ2QQnxPyu/9pii/92Mr53dI+XWMWfC9/xT53pe4vndCvl1ipPB9OHAutp1rnnQdjG0PP2wCJ57MkO+gp1kk8r2W7vzeM6T8OkZ038CeWN/NYz6k7w3Y/tpfAbs03loNvAj4rjHmoIU+2yNGKb5fC3wSeMTYW48GPmOMeXVg+Sl8j/J7R+bXg0Pm972AC4AXAM2But2A1wPfMIFPzd7K+b0tNr+DnnS8lX0vRvX5eAz5douRwvfTsf21pzN/Pw4B3g2cMUB/7fXAJ4CHj731aOAcY8yrAstfAnwc+GfmX9xbChwDfMsELnyY2PcG4vk+EtsPOYKFfX8oou/HMIxvA4z65+P5vQ6b30E3+tS/Kfl2i7ET1sdC9fneA9XnW9v3fgP53p+4vrva790HbL9j+l6CrT/+ifkP41gKHAt82wQulGWM2R74FvAX2GM/Yg3wEuz4+QELfbZHjPtgx8+fz/xjtTvw18DXBuiHjHyvYXp9j/J7V+Ll9/bYfk6X73ss9NkeMe5Lu+83MIzvo4FvAIdj66YR9wLeA5xeH8+QGDsz/b53IL7vlXTX5/sMWJ/HzO8SfHe139szTPudwvcx2P7aeH7fG3gvcNoA+X0C9nzpYWNvPRb4rDHmTwLLX4Idv3s79sb1Ec32+0kDxNiavndmGN/r6M7v4AcTNfJ7/EGn05bf+7H1fYeeK8m3Wwz5do/xt8DHgIc2XwYeB3zO2IUMQsrPxXfQQ1ZnyPfLA8uXb/cYOdTn2weWvxQ4G3gb9iaGEcuA44DzjDFPCIwh3+4xUvn+R+R7Uow23ysZzvcuxPVtsNdbu+rzoBt9jB0j/BbwaqzzEeuAlwHfMfMfaOIT4wHY+Q6/z/xjtSdwAvCVAfbjmcDXgacx//z7vsD7gZMHOP/eBfudp9l3Sfm9D/HzW74nx5Bvt/KXAZ/Btt/7N95aBjwTON8Y87jAGCPfOxDP9za0X/9O4XuPgXy/BfgI8ODmy8ATgM8bY14SWP7I91uR70kx1jPnu8nId/CDxybk9z4m8EHNY76bN2U3fQfdiO/ge/+IvpdRhu/VDOO72X43j/mQ7fcuwHnAn2Gdj1gPvBx7PXTvwBgPBL4DPA97/EfsBfwt8GUT+BBGY8zvAF8Dfpv5v6n7YfvmJ4WUX8dI5XsX4vleSvz8nuT7SwP4Lim/Y/oe5fersH5HjPL7O8YuEhQS40HY8++FfL+JYfK7FN97s7Dv9cT3/QqG8T1qv9cz3e33W4EzgAc2XwaeBHzRGHN8YPkpfC/F9v1T9Nem3feuTH9+T/I95PnYQr53Qb5H5bv4Dm33JvXXSvG9W0j5dYwSfO8KnA+8kvb2O2hthIS+R9fHmsj3/Bhd+b0Dw+d3c6wzhu/x+R9D+n478CHg0ObLwG9izylfEFj+CuBzwFuwddWIFcDvYHPvkYExmr6b1xGbvoMe6lOQ70n5HfRgsK2Q31PpWwtQRsQYc4QxpjLzV0Btvv81Yyc4DBnzcDPQaroe7Mb8QaJxlmAHxULYi/mN6TgrsDdfeWHsRZI9mZ9s46xlfgeub4zHAm+csNnfmLAnZWyP/Z6tXwPYM7CCcvEduthXbN9Lie97W+xgShc7Bw4g/DFwVMf7y7ALcYU8FfhEoOvJ5DsCn/RtkOrPfZL5k8nGuQ/2JnYvCvKdKr+7FqBLkd8r6+/hhatvE3CDTEG+dye+742U4XvS00JS+Q5Z5b4E37thL/R0DaQcg20ffWOk8L0DefjeGFA+5JHf6wLzezVl+H4v9ibyNnbC9te8JrfXn9vI9Pt+InZxli7eZIx5jG8MCshvY298/yTzJ5ONcz/sor++MXLJ712mIL9j+y4lv+XbgUS+98Be6Ok6T3kG9gYy3xi/CbxuwmZ/Z4wZf/hLH/4Mu2BLGyuAM03YQtWz4vs4wnw/GTffIRf4duDuF7znfQ1gr0Ly23uMsIfvPwqI4Vqfh1zgy8H3UgLOvxu+uxYsCvXt2n6HjKem8P1q7A3AbawAPhbSDwFOwj4Uo41dgLMCzseWAJ/CLl7axgOAd/iUX8dI4XsN8X3vSPz8dvH9icx97wWcTnd9/izgpQEx1tB9zQfK8X2Wb+H172QvuuvzbQirz5eRJr9L8J1D+x3qeyNwGt19wmdjF1D1jfFU7KKsXbzFGDO+OGUf/gJ4asf7K4GPm7CJoyX4XgbsQXd+rw85Tj3ye3zyXx8m5fcibH6HLNa5O/MX1xgnle+Q82/5dke+3WI8DfjzCZv9gzHmIb4xyMf3Rt/CC/J9GJN9v3UKfO9BHr5LaL93DazP/wp4Ssf7o/5ayMOm5dstRg6+tyGNb/XPre9J45ihvnfi7jcQNRmiPv8A8x8WNM7u2IceeFG7+BT25ps2HoxdRNc3xr7AKXSffz8X+8BP3xil+FZ+u8VYi3xPRL578TrszbhtbIO9dtU1B2YSKXzHHj9fjptv7xtcjX2A6592bQL8kzHm0I5tJvE67GI5bcg3/+d7d7p9bwj07ZLfuxm7mK4vr2ey70/IdzG+U7TfpzL/YQPj7AF81Lfw2sWnsAvqtfFQ4B8CYtwDOJnu39TvG2P+MCBGKb5j5/dy7EMsunw/DPj7wBgl5PfOxPd9GvMXpx5nT8LyewU2v7vaHPm27IxdjLqNIXyfzmTfZ/oW7ng+tgo7j8Y3Rgrfx2AX9GrdBHiHMeb+vjFw9x2yxssedN9XOZoL6EVBvtcxeb2AVPkd0/dobpgX8t0LF98bM/e9iDx8bxdyXakg3x/ELuzWxl7Yh5p4kci3y3o/8m0pIb9T+J50P9Ii4J3GmK61jyZxAvZh621si70XP+QeVBffIeffrr4nrYXTFSOn/O6a6zuJFPm9J1PuWwtQxuU44FzsDdWpOBzotQClCbsJY1TGUroHikYsqydE+MRYQ/cA54g1xn8hru1wy4vt6xMqH1xvtva6Kbv+Xi43CC3CPinMJ4ar7+WZ+x5/UlobIb5db9byuqmrHlR0uUFoJeB1ocTYhb66FrgcsT/dEw27eArdA5wjjjT+q2CX4HvW8nttivz2LL/PZ3P37eIx1LfLExfk292318S1nr67LmR2xUjh+/l0L4I94iUBJ3spfLt4lG+b3y7tcsiNxjn59q3P9wKOcNj0ALonlnaxmjJ8u55neS2alMj3Mtz7a175jX0CcNcFjBFHG/u0TB+2I5/89q1rS/GdIr/l2y1GCt8p2u8X0L2Ix4iQ/lrs+nwJ8GKHTVcBf+AZIzffvmPEL8TtHD9n36nyO2r/HHff6xL4fmnm42u5+F4RcFE6hW/X9jvn8ZalwIscNl0F/L5njH3oXiBrxMHA43xiAIfhtqDCscaYSQs8tlGC7z757TXRIZHvw3GbYBDie9bq89i+DzHG+Pqetfo8xfmYr+9U7bfLeVbu/TWX/rnBv3++DDjeYdNtgd8LiFGC75zye9b752uR74nIdy9S+I5dn6fwvRz5dsXVt9ci9Al9u4ybpfC93vjfCFxCfb4c2++cxBrgeQExXH37LnQv3w5k5nulfE9cDCEoRl2fu9TTi/E//3adt3Jf4//gsaNwWxz6WcZ/AbkX4fab8n5gF2l8u+x/iO9S8nt78qnPY4+vleJ7XQLfOc9vWYHbArhrsYvl+sRI4Xsd8X2naL9f7rBNyPmYfLtTQv+8j+/neMaQb3di+3a9jyCk/b4n8ASHTR9gjHmoTwzgGNwWt/hdYxcd8OHFdC8OPyKkf16C7xV0L7gwYqXxXwj7WNwWOwjxXcL5t+s46WK6F/PsinEw8HiHTQ81/g8mkm8HEvk+BLd5Sg80xjzYJwb2u7nUtbmPr7n0zxfh+VDPnr5j1+fbBNTnKXznNN6SIr/lOx/fvuMtpfheSz6+Xdvgthgu5Oz73sBjHDZ9sDHmgT4xKKf9LsF3KfV5Lv011zWW7kY9nuVyH+AG7MPefWLk5HuD8b+XL5f8dl2D5e4fTJPfK7H3I01iG+O/UG5031qAMhL1JLaHYW9Ye0b92kpjzEeMMRcaY86kXjjHGHO8MebNjc8+1xjzz/W/n22MucAY80NjzHtGFbkxZrMx5o3GmB8ZY843xuxUD+Q+DXhLvf2+xpivGWMeUH9me2PMpkaMjxljPgN80RizyhhzsjHmu8aYHxj71Os+rMGt4gC3G6tDPmcSxFiK28JH86gbit9y3Pwpno3FStwuxID/cZJvB+rJGq43jK/xrMgPxX0lc5dFJBfiCLpXQh4ixpGO2y3GbXGlhYjtexFuE9vB3/cs5rfXooc9Yiz1qWt7+l5d1wd9SeF7LfI9kRn17XtxL4Vv1zZjL2w72YtEvrchL98l5PeygPx27a+l8O2be4fjfn7v218rwfcq3BfgfGo9ka4vKfK7z/H1jeH6O1mC/f35kFN+r8m4Pk/hu4T8lu/hP5eiv7YP0PsJsfW465McN3+a8VtI86G4P9XNt23NzbdvjNi+VwNPdNz8MON3o3+q/nmMbX0+l3N+L6aM+rzP53I+/+7TfvuMp6bw/TDi1+dHEP98zDX3lmGvE/qQwrfrAiC+vlfhdmEd/HOvFN+uMfYD7tu38IJ8Px338bVSxlti57dv29rHt/prbuwP9H4CdH1jUNeTn5sc4Xk99OGA6wK7sXOv77Y+n0uR38uNxxOgld+9cHUo32X4LiG/1+Nenz89QX+tlPFU34eKxPa9AbcbVyBv38pvBxLV54/E/YawFP21EsbXcvb9KPLyPcv5vQS3G1f6fJdxtqWM8RbXc+MV2IdzxoxxkLGLfvQioW/XueGx69q+2/p8Tvnt7ruE/lqfOaC+MVZk7PvRuN9sXUL7ncp377mExpgdgUc4bu7r4jHI99AxfH2nyO/H4P5gB/l2I2ffq4jffrv2ayF+/3wl7vfc+sY4xBhzYN/CC/KdYrzF1cU2wFM8Y8TO76XY7zfkdxknxflYTvkt32X47tN+x75e4ut7V8B1wVXf4zSL59++vl37eaXk96z7nrX6XL7dWGHsQ0Z7UZDvWWu/V86471nLb1/fuwOuC6765sXjcd8P3xh9+vWz7HsW8zv2NVdv31qAMh6HA5+vquq/gWuNMfcHjgduqarq3sAbgd+ot/04dkLFiGOBM40xB9X/flhVVfcF7gKeVW+zCji/qqr7AN8A/rCqqm8DnwZeWVXVfauq+vmE7/gQ4DlVVT0W+AvgK1VVHYq9IPEW0+9JVH1WOPZdDbnP7zXXGH0GgxfhPjmsSQoXufn2rcti78di3CdKgd9+5NTZzD1GbN99/fn4zi2/c829FDH67LvxjKG6Np8Yufn2dVGK79htRl/fPseqFBclxCjFdwl9qb6f8zlWq3t8bjHuk4XGPxdj29QxUvymYudGivwuxXcJ/ZA++zDrvktol1bjPt7SZ/Jnk9za1lxzD8rwXUrupRg/L+F8rBTfJbRLKXyXMradW7uUq+8S2r1SYvT17bPATSm+c2uXoue354KEKfo5JbStEP932+dBdn0mhzUpJfeU326U4iK3c/zY1ypn3XcJ53x9btxfhsdDXMnPd6651/dzsX0vxy7G1RflXj4xUtTnJVxHhNn07XP+rf55PjH69s9nebylhBgpfGuusDs5zW9ZlMB3zi5yOwfI1Xcp7XcJ19j7nI+t9HzAqny7k1P/XPkdZ9smJfgu4bpSKTFK8V3KOV9O59++vktxMXO+PcpPFaMEFyli9Omfr9b8lqxi5DqXMLfjlHOMnMZbcj5OucXIdbwlt+OU8/lYCXVhKb5zy71cfZdyHlOCixQxStgHKMS3FqCMx3HAR+p/f6T++5HABwGqqroQuLD+96+AXxhjHmyM2Q44APgW8DjsIpXfNcb8sP57n7rM24Fz6n//G7DR4zt+qaqqa+t/PxF4dR3na9iJhHv2KOuOSNs2uTOzGH22HXEDcIvjtrcC13vESOEiN98+LqDfd/OJcRewxXHbLfX2fbki0rY5x7jSM0bs320K38q9ODHke/htm5TQLt0FVI7b+vpO4aIU37Hbpb6+XeuCJrm5yNl37HOAUnyn6K/l5tvnWF0H/Npx21uAGz1ilJJ7KX5TsX2nyO9SfJfQD7mTvHzn2q+FMtql64DbHLe9GbjJI0YJ9WCqGDn53oyf71JyrwTfvdrvqqpin3/n7LuEfkgK36WMbZdwzpdbfudaD5YSo69vjbcMv22TrMbXMvZdgguI/7u9BvfvdhP2nKwvJVw3hjL6nX3y+y7P/NZ4Sz4x+oyvyXecbZvE3o8+9fkNVVW5znVrUoqLWfR9q0eMUnyXMN6Soj4vZfx8Fn27btskt3PjXF1AXuffvr5LGW8pIUYK36XkXm75neL8e5Z9l3AOkMJ3bu33LPv+VY/PXVNVlc+xyq1/nrPv2HVhKf3zWfQd+3zszgT981yvK5USoxTfpZzzzVp+5+yihHapl2+P8vt+LoXvWb7G/r+43/P5vzM+vyU337H757meY/SNMeu+Y5YPcpFTjFJ859aXyrUuTHGupNxzJ7bv/8X9ns+c78sowUWKGLmNheSc39F9awHKCNSLSD4WOMkYswl4JXAsYGg/WTkTOAY4EvhkPfBkgFOrqrpv/d8BVVW9vt7+jsbg1F3AkpZy72TO8/jTqZuT/Q1wZCPWnlVV/cRhd0fciHtFfl2Pcn0+twW70GPMGL/2mWxZVdWdzC1MOokzq6q63SPGr3FfVMXXhXw7UOeo63e7wWfAuV7M9keOm5/Wt/yas3C/Ocg3xumO290MfNwzRh/frjn0fyTynSK/b2D28ju27+vl24kt+C301SfGrQG+XReF9vV9K/Ltimub8YOqqv69b+Hy3Qvlt1uMFL4/jl3A3gXf/prrccrZ923ARx03P6M+f+sbo5T8dv2dbAY+4RlD+e1GbvV57P65fJfh27W/9r2qqv6zb+H1b+Rjjpt/yGcBq6qqvge4jo2GtK2uv8VZ9n0r7mNBH/KZ8FXHcF3k0tdFTr7vIo3vPtcXAKj9uX43r+NUL5oh3264tq231H3tXiTyfQHwX46b+9bnH8W9j3CqZwzX3LsR+JRnjBJ8p8jvUny7xrigqqqf9i28MN+uMWKPt9xF/PGWWc/vG8ir/Y49fv6dqqr+u2/hVVXdjPtY0OmeN1x9B3D9br51bSm+c8pvn4erKr/jxJDv2fPtM7dsM/BJx81d25bxGLdgH7DtQinn37n6vgn3cwevfq18R4nh67vPtVrf4/Rt4OeO25Ywfh7i27XNvDlj399i9nz7POiqTwxf331+i77n3zcTvz7/CO43yMSej3wtcE7kGOdWVXVR38IL8p0iv3MaX5v1/J6187FsfQPnAq51j29dK98OVFV1A/AZx819XXwT2BQ5Rm79tVx99+lLXtu3/Br5Hj7GzZXH4q89ffu235uJ335/GLeb0ivi98+vBj4bOcbXq6q6pG/hBflOkd+uLn4FfM4zhus5wGblt3N+e10H6PG5EN+u+5+tb+z90K7fzTfGGcSvz11z707ij6/5+r4W97bGdy5CCt996nOv67o9Ppez71LyO6fxtdx9xx5v6eM7JPdyOR/L2fed5OU7pP12udcppL82a759cy+F7+tQfk+kqqpfAZ933Ny3v/YV4DLHbX37zvLtQJ3fsftrm0mT3zG29fmct28tQBmHo0ET/bIAACAASURBVIDTqqraq6qqjVVV7YG9gPd94FkAxphDgHs3PvMJ4HDgOOxilAD/ChxljNmx/swGY8xeE2LfBKxu/L0J+I3G92rjC8BLjTGmjnW/CXHmUXfMr3HY9ObK76noo4mKmx02vdbnxvKa63CrPP7Xs3yAtzF5QvXt9Xa+uHy/O/CfFC7f7vyKyZ2Dqt7Ol79z2OYK/CcJ3wC822HTb1RVdb5njPOBrzts+p76+/hQim/X/Pa9iJEqv10WNb0mIL+vJx/fVwfESOHbZQJDKb5Dcm+WfG/O3PepuD2Z4s2e5UMa3y6/R/m2++9yITQkv69m+n1fB7zXYdOvVlX1Xc8YN1OG739k8oSN2wg7H8spv3svpF/H+BZ2MvIkTqxvXPRB+e1AIt998tvnSZ4we75DxltS+HZp+0N8nwJc5bBdSH/trUw+B/g18PaAGC7jLZcCH/IpvMf5d+6+P0AZvlOMp5aQ366+XfKnjZzOv2fd97XEb79T+Hb5Pf4SO5GnN1VVXQO832HTL1ZV9UPPGF8HXMbe31n/NnwoxXfs/O7j2/XhYeMxvoZdfG0SIb5Pxu1Yxa7Pt5B3//xq3Hx/IcD3ZmanPs/d9524td83VR4PTqhjpPB9Mm7HKiS//4HJv6lbgX/yKbyqqgq384dLcH/453iMUny75nfI9VCX8ZZU+e01T0C+e5GL79tRfZ7Ct0t9fgvwzwExXL5fKb6vTjB+Lt9u11pCfbuM1eTu27V/7jI+fTd69Nc2MTcXum8MV983Zu576s/H5LsXU++7EWMSIfX5VdhriZM4p/J4sFnNl7D3bEzin33H6IGTcKtHY89fy913n/zuvZB+HeMm3PPb50EZYPPbZS7UrOe369wY+Y7ffm8B3uKw6S9wf/jneAz5dufvHWLcDLzDp/Dat0t7I9955bfv+Zhrfv8c94e9jseYNd/Znn83YkzidvzHzy/HbSGTsyuPB5vVfB5wmSvxdt/fFHYO/aTfrev5bRsl+Ha9luqd31jfLtfOQ3xfw5TX540YkwjxfRnwQYdNPxWQ358DLnTYbqZ9122Z6/h5iG+XucyfrKrqfzxj3IjbQ3tD2u8Uvt+C9dnFZuBdPoXX++7y/W4jfn1+Q0B/rRTfLp8Nze+cfPdeSL+OkcJ3qvOxSci3fDvR07fXgxOqqnKdu35WVVWuD4sbj5GT79Dz70mEXg+N7Tun/P5V5r5d+ms3Aif6FF7Ze33+3mHTn+L+sNfxGNF9Y9eWK8G3S+653n95NzLL7+tz9q0FKONwHHd/SvhZwEZgW2PMhcCrgAtGb1Z2wZD/BPaqquqC+rX/BP4S+GL9mS8Bu0yI/RHglcaYHxhj9sVWfMcbY74NbN/xub8BlgIXGmN+XP/dlyvp7hDfClzsUW6TS+i+yHADdqE9L+qLMRfRPQnoqqqqfFe/pqqqfweeQfsilLcBx1WeNyrVMa6n+0bgO4GLKv+FYUC+XWP8GrsfbZV0BVziOzGujvFh4LUdm1wFPLnyXxgG4NV0X4D8Ad2L3LpwdF1OG2cBf+ZbeEG+XfPbdyIkpMnvi5mc3y4LzC1IXb/JtxtXMBu+r5RvwM1376c6jhHb943Ak+k+Vn9ZVZXXjad1DBffFwf6vo7ufbiDMnxfT/75PToO0+77ldz9PLTJvwHHBJQP1nfXcZgG3z/EPhii7Xzs18CxVVX9R0CMXPI7tP0+ku5JQB8FXuNbuPK7F6n6a9Oe3yX57hqwHsL3JuL6vh7bX+u6gPCaqqq8JrbXMX6Arc/bBt5vxdbnvjemUVXVqXSPkV6OHW/xXfgJyvH9FLovyPx5oO/vA8+m2/cxVVX9JCDGdXT/ZofI78vJw7fLApIL0sO3140MdYxbsYsBttXnW7D1ue+k1Fx830L+vl3a7ysq/wcGpfJ9CvDGjk0uw9bnXg9nqPlj4NMd738Xe+0whCOAf+94/8PAX/kWXpDvFPk9yfcFhPs+HPhxx/tnEOb7Orrr8wr4s6qqPhEQw8X3JYG+ryW+71cQ3/cmZqM+nwbfLu33EOOpMX1fi83vtsmUFfCqqqq6xhEnxfgu8Lu0LxJ/C3B0VVU/DYjxfuBNHZtcCvxm5b9QCJTh2zW/vSbG1TFuIX777ZLfvyggv6+rqir2+Fopvi+qKu+Jr1CO703E9X0B8By66/OjKv8bT0e+u8YQSvIdUp/fifXdNY8v1Pd3cPPtdeNpHSOF78uI73sT0+87RX3+XroXbfgltr/mHQPru2u+42g/Q9jE7Pj2vZFh5LtrkRv5xtn35QP4vpS4vq8hfn3+UuwiFW2ch70u5EX93Z4GdF03OhV4Q0CMXwG/Rfti2BXwiqqqPhMQoxTfqfK7qw4aIr8vQvntgny7xUjh+0TsQvRtXIK9PuYdA/l2jfFt4PdoP8e/GXh6VVW/CIhxIvbBnm1cjHyn8n0zk/N7U2B+v4ut7/tmyvHtfZ9dIt/X0L2Axu2Et98vBr7Q8f63sONKXtTf7anYhRvaOJnueR2TYlwF/Dbti1BWwMurqvpsQIxSfEfN7/paziTf7wf+NiDGLOX3LwJ9vwj4Ysf75xKW31uwube1fV8m3wAcj12Doo1zgecGlA/WRVf7fW1VVd6LzziOr4X6/ibwB7T3zzcDh1dVtSkgxtWkqc83d7w/RH+tBN+j4xAzv+XbgcouzLSJ6a/P5dsB+e7FC4Evd7z/DeB5AeXD5PPvVL67fteTYrj6bpsP4RKjlPzexGTf3ou/JvL9NeAFHTFuwvbXvOeGVFX1NrofCPQL4Cl1f8WXqL7r3+Imun1fMwW+N9Od33dhr5eE5nfXApZD5PelTPZ9qW/hDd9d7VqQbxO2/5azzz77e4cddtgDggtqYIwJ/2ItVFVlYpUtwBizBrvY5ar6pV9jk/H6KmxC+Kj8RcA6YDtgRf3yzdhk8L4xZizGEmBD/d9SbGV1I3b17pCbEJsx9scO4j0Te7yuxt4g+M4qYDLnWIxt6rLXAAY7MeBabMcgpLFrxpBvtxjLsfuwDliCHaC6HrsfIRPvmjEeArwE+5sC27E5GXhvSEPRKH8RdlLWi4An1C9/H3g38MEq7AafUYyV2IljLwTuX7/8JewTYz490G+q6Xs0wWwv4vkeLV60G8P6HuX36Eb1g4iX36MnI9yDNPl9dciF+7EYKX1fVr90MMPnd2m+Rzep7Es839Ncn6fwvRa7H9Psewfg+diJWXthJy99GtuXOm+gGG2+rw4ZfByLkdJ3yv7aZmxelFCfD+l7VR0jiu/axWHY/trDgcXYp0q+G/jQQP21UnzfAztp6jjsvlyNferju6qq+tlAMaL6rmPErs+3AX4HO2h7CHbA7hvM9c+Dx24WaL+3YAeCld93j9Hm+7qBXCwC1mNdjNrvfYif33vWMWL31+R7fvlN3yuwfefReMtQvndkrr+2d/3yB4F3VPaG5yFiHICtz19av3QVdkGmd1aeT/lbIMbD6xjPqF/6OXZS3PvqixBDxCghv3fC+n4e0+27tPyO7fv3sA/eguF9L9R+X4fdj9j1+TVV2MObmjFK8L0Euw/ridt+b8/cRdUYvh+BrUOOrV/6GXP1udcTEcfKX4RdJPJFwGPrl7/H3PmY9yLYjRirsP3zFwL3qV/+PLZ/fs6A/fMSfEfN7xbf38X6PmOKfO+EPd97HnP1+enY+vyCts/1jLG1fF+Dbb+H9v1Q7HjLDxnW96g+3465mzOmuT5fy9z52LT5Nthr6832e39sHTJ0+x3T987M9c831i+fhu07D5XfB2Lb1pfUL13J3Pia983SYzEeWccYPVjnZ8BJwEkDtd+l+C6t/R7Nb7mdufOxmPk9Gk+V77kYW6P9PpB4vkfXx25FvheKcRC2rn1x/dKV2HP8d1VVddFAMVL6LjG/rx7iGl8dY+T7GXWc/yWO7+2B1ZRRny8nzvj5Uux4TkzfK7D7ELM+fxT2N/VkYCV2vuKov9a2KFuf8lPX5/LdHWPc98+xvt8v3/NibA3f92Ru/tpQvretY2yqXxq6/V6MfSjm8cCj65cvAE4EPjzEPLx6H56DHf+6V/3yZ7Hnxt4Lz4zF2KUu/7nYeS0Ap9QxvjdQjBJ8G+x40XbYc3tI01/bG3ucvG9kHouh/HYrvzTfG7BjnVuYm488Tb4fzVz7vRzbX3sftv1uW6SrT/lN39vUL6c4/47pe/Sg06Hz+2Csi+Prl67AXpM5sQpY3GYsxqPrGEfVL/2Uuf7a0L5Lye9YvlPk92Owvn8Tm9/N/rl8z8UoxXfs9nsJtn/+IuCR9cvnY/vnHxliP4wxq7H95udj5yMDnIMdl+paoL5PjF2x19efC+xRv/wB7PXv7w8UowTfKfK76ftA7D3N/8qwvpXfbuUvwfYNjidtfn8G6/vzoeXXMRbyvQfWhXzPld/0/SDsGP33Gdb3IuZcjMbXRvcTxWy/h/Z9CHauwwvqly5nrn8e+mDxUYwS6vOm75j9tdH1saXYe5ZuIH5+j8bPvRczGosh324xmr5T1ufyffcY8u0eI0X7fTS2/X5E/fJ52Pb7zIHa78XM3W8w7b63Z27RvlS+R/d+TEt+l+L7Xtj+2vPrly5jrr8W+mDSUYzHY8dCjqhf+gl2/PzkaoC1rLaC75j9c+X35PKnOr+zXYBSCCGEH6ZewLeKuNiuYuQTo4R9SIVczFaMEijFhXy7oePkjurz2aKEY6XfVD6U4kIx8kHHyR2134oxTeUrRl4xStgHxcinfMXIK0YJ+6AY+ZSfKkYKdKzcKOU4lRCjhH1QjHzKT0UJLlLEKGEfUlHCsSphHxRj9ijlOJWQ38Id+Z4tSvCtGPnEKGEfFCOf8hUjL0rYh1SU8JsqYR8UI5/yU1GCixQxStgHxcin/JJipEC+FWOayk8VoxTke7ZixKaU46QYeZSvGHnFKGEfFCOf8hUjrxgl7EOqGCmQ73JjLBqiECGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIkS9agFIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQonC0AKUQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghROFoAUohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCiMLRApRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEIWjBSiFEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIQpHC1AKIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQhTOktACjDGrzzrrrEXGmNVDfCEhhBDDkKJeVox8YpSwD6mQi9mKUQKluJBvN3Sc3FF9PluUcKz0m8qHUlwoRj7oOLmj9lsxpql8xcgrRgn7oBj5lK8YecUoYR8UI5/yU8VIgY6VG6UcpxJilLAPipFP+akowUWKGCXsQypKOFYl7INizB6lHKcS8lu4I9+zRQm+FSOfGCXsg2LkU75i5EUJ+5CKEn5TJeyDYuRTfipKcJEiRgn7oBj5lF9SjBTIt2JMU/mpYpSCfM9WjNiUcpwUI4/yFSOvGCXsg2LkU75i5BWjhH1IFSMF8j2dMaqquqntvUXDfB0hhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCJErWoBSCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEKJwclyA8sYE/4m4bAvsCRxY/7cPsG7gGOuAvRsx9qzjDsVa4MXAd4DLgZ8D7wTuM2CMJcCOwP7AQcA9gJ2ApQPGWAHsChxQx9gP2I5hc79k3/ceMMbuwOuBHwNXAP9R/73HgDFGvkfE9D1iaN9LgWOBLzZe+wjwuAFjLMIel/0ar+2KPX5D0czvETvWrw9FCt+Pwx7/EV8EnsGw9dQ67O8oVn6n8L0HNp9H/Lj+e/cBYyzkewNx83tvhs/vZ5Auvw/Ctn9D+16Kzed71DH2J01+y/fdSeV7J+L6vg+23zHiO9h+ydoBY4z314b2DWXU5yPfI0ryPWT5UJbvaa/PnwCc2fj7i8AxTG9/LXZ9PiKW790af6dqv4fM72XAccCXGq99GHjsgDHa8nv5gDFS5Xds3+P5/QVsfg+1H03flwIXY30/ZqDyIY3vPYE3NP7+MfBa5vsJ5b7Mb7/PB14ErBkwRor8fiZ3z+9p811Kfb5Qfh/NsPk97vsM4vhujn3J98I8Efho4++hfcNcf23EnsCqActfD/wR8N3Ga/8EHDxgjL2YX5//O8PX56X0154FfLnx2hnAoweMUUp+3w84sfH3ecDxTFf7DWny+2XMz++3M2x+l1Kfb4utq1KMt4zYg2F9p8zvaT8fexLwscbfnwOOYrj9WM7d6/MPAY8aqHwouz5/IbB6wBirsfk9Yhrzez3wcuB7jdfeDtxzwBgpfK/E5ndzfsvQ+R3b93Lg2cC/Nl5Lkd+7MH35fX/g3Y2/v028/J7m9nsDd8/vtzG9+T1iGvMbtk5/LVZ+N/trO5CmPjcDxkjp+yBsHTLNvkdMu++Y9fl65NsF+XYjhe+NwAmNvy8E/gLYecAYDwDe0/j728DzGXauQIr6fOR7RKz+2r81XvtH7O9rKFLm94hpbb9j+14MbE/c/N4beGPj7x8Br2HY/N4avjcy/Pn37wBfabx2OvCIAWM0fY/mM6n9Xpjx9nsjw/o2pKnPX8H8+vyt2P0ZiqXMz+VS6vONTJ/vFPX5PsDfNv7+EfDnzM/5ULbG+fdG5HshUvg+FHhv4+9zgT9k2GNVgu8NwB8zvz7/B2yeDEWq/G7ej7Yvw+a3AZ4CfKLx2jnA4dicGSrGQuff2wxUPqTJ732BNzX+jpXf72v8fS7wB8TP7yHnz6wAfhf4WuO1U4GHDRgjhe9lxO+vPZB0vpv98yF9j/J7X9Ln97IBY6TwHbs+h/j53fQ9Iqbv0VobqXwP1e6Bze+TGn9PY32+EngO8+vzU4CHDhgjRX6Pt98/BF6NvQY+FCXk98j31xuvncL0+U6R36l8b2z8vZH49fnulNN+y/d85NudbYh//v3bwKcar30GeBrDzZlaqH8+tO/tgT8Fvt947S3M9x9KCb7B5vLGxt8bGb79fi7z2+8PAA8JLdhUVRVWgDGrzzrrrK8feeSRQ02WTbFA5JByxHx2o30xm1uBTcCWgPIXYRNsZcv7N2Bvmg/hHtgKfKGFwyrgddjJvCFsiz3JXqhR2ILdh5sCY2xH+2SDO7ALC9wWGKMU32ez8I2sFfYm17cHxngicBoLN9K3YE/QvhAYo+n7vPr/o0Yihu/xGEP4XgechR04X4gzgRcExliG/U2NFuQZ348rgWsCygfb6d+dufxuxoiR3zF8L8JOHjy25f3vAkcC1wfG2Eh7fl8PXBZQPtiLCHsR1/eTsBdF2vL7d5m/AJ8Pk3xvAm4PjLE7cxeHY+T3emx+P6Dl/Q9jbwAPiTHue5wY+d1kC/BLYHNgDPl2oxTfLwf+moVPTi/FXsT/78AYTd/jpOivTUt93vQ9Xv6Qvt/Q8t6lwGHA/wTGkG83UuT39sxNLolRny/CTj44uuX972AXRrghMMZG0voeZ1ryO7ZviN9+b8BOJrt/y/sfwi64FzKQOCm/rwCuDSgfysjvxdj8Pqrl/fOxuR+S35N8fxC7QHLuvp+CHSRfqJ66mbsv+ODDHzP/gQNNfontrw3Zfm+N/J4W36ux46lmgfKnKb9Pwo6pLMT52NwPuUayAfgkdqGehTgdeAnyDd2+b8eOr+XuezG2vzZauHt8P4bor90Te71koWsNFXZS1okLvNeH38LW5wstQL4ZW59/ZYH3+hDbN3TX57fUMULrc+W3G68E/qrlvUuw598/D4wR2/ek/L4O+0C1EA7G/qYWyu8t2Px+9wLv9WGS70uw/bYQUuT3HrTPL5gW38vrGKOJ8jHyew02NxYa6xzK9w7MTQaO4XsJ8H7giJb3z8O23yHX+bbD5t59W94/FXhpQPmQ3nes/H4V8Jct712Mrc9/ERijmd/TWp8fgv1NLXSj2xbscXzvAu/1IYXvZn6Pczv2fOyOwBixfW+H7Tu3PdhW+T3Hn2EXSFqITdjxliHze5xb6jghfecU+X0vbH4vlBtbsP3e9y3wXh9S5/dC7fcm4uf3JvL3vQJ7PlZSf22cafU9zjT6LqX9Hmco33vTfqP6tVgfIWxt33dhx1vkuxzfh2P7AAvtx43YB9B9MzDGa7BjQwtxEfZ8bFNgjK76/GZs/3xI3+MxhvB9b2x/bYcF3tuCvc54cmCM1Pm9Nfpr0+I7RX4fgc3vhW7QvBH7QPBzA2Ok8L0ncw8XiOF7B+y9H4e0vH8SNv9CGPfdpMLOZwr1vRZ7b0bM/N6RhesoiON7nGnJ7/ti5zwvdKzuwv6ePhAYY5LvS7D9nRCavqc1v7d2fV7V5V8XGOPp2DHZherzG7D1+bcCY6TOb/luJ4Xv12Jv8l+In2PPES4OjFGC7/th6/PtF3jvLuw8/lMDYxyJvdeuzfex2MX7Q4hdny/D3uP6lJb3v4b93Ya0S0uw42tb6/x7qPw+CjtnIqbv1wF/0vLez7D5fUlgjNj5vRO2f9724Kz3YK9nhLASux8xfafor72e9nOVGL7HGcJ3ivwuxXcJ/fNx3+MxrsGeH4cw7rvJNPn+a+xDDRbif7D5/cvAGLF974ytz9serHMi9jp/CCny+2hs+73QPWrXA8dg52+HsBNzfc5pze9UvvdibuGwaa3PJ/m+CLgzMEYp9bl8uzELvi8nbA0asOsO7cp0+16OvV/vSS3v/yvwTOx9g75M6p8P4fsBwMex97KMcyfwR9j9DKEE32DzYvQwx/EYm7H7EZLfu2Db77YHZ70T+9CMVqqqap3/PuRTpIU/O2IvSP0Iu6jXx7FPnkrBj1k40X3YkfbFCGHuxCCEPWhf/AJsxyHkCTLbYCeDLLT4JNgK6w3Ykz1fltG++CT163sQ9vSVNXQ/6XIptvIKWYm3FN+fYuHFJ8Een78hzPcB2Bs/21aI3gY7cH9AQIxSfJ9C++KTYAfmXxtQvmH+4pMLsTNhixQvp32xE+rXdyf//H4t7YtPgvV0SkD5YH8vXfm9jrAnihi6FzOCcN8u+X06dqFbX1x8byTM9050P5lwqPxuW4wQ7MTXtpvCXUjhezlu7XfI0xnWkofvPQLKB3thXr4n83Rsv7LN5+7YfmnIUyZS+C6hPk/pu42R765jOQn5diNVfd51njJEf+31tC8+CfAgwm9kkG83UvhOkd+n0b44HcCzaL8p3AUX37sg32Dzu23xSYAHYxdECeF0un0/mzDfi3Dz3TbJyYV7YvudbfXUKuzCqSFP0zqa9sUnwf6ePkH7jcgupMhvF9+vCSg/he9Rfrfl1rTk9xtoX4wQhsnvD9K+OB3A7zDhgtIEZsX3MuY/NdYHF98ndbzvwp5010HraL/pxIU1tC9OB9bR39E+Kd2FQ7DjRm37sS22Pt+35X0XUvjeme76fPxpiT58iMn53XZTuAsp8nsF8fP7WLrHnfbE/q5DxuhT+J6U3+uJm9+LgDcDTw6I4eJ7T8J8ryNNfnedp0yD71F+LzRZe8QQ+d22mNHoO+xJdx0ziUnjEEP4PoH2xSfBTgQKXejrDNoXnwT74MKQCbyl+D6O9sUnwe7jJwirQ0rI77W0Lz4J1sVbaJ/E6EIu+b0xoHxI4/vDtC8+CTa/XxVQ/uiBQdOe38+ke9xpI2nyO3S8ZS/i5vc67HFoy41FwN9jH4jryyzldwrfC93Y7opr+71tx/uTKMX3pOsI8m2ZJd+h7fdedI8RbGD6fS9GvkeU4Pt+2OsIbfuxBvgIYXP9nk33OOPe2H5KyG9qku9V5O97Pe2LT4L9Pfwj8PiAGCnyez1bP7+nwXeK/L4/9rpR27nQGuBMwvI7le+u89IhfJ9J++KTAH9A+6IPLkzybQj3vZK5m6UXYqj87jovnRbfsfN7A+2LT4J18TbgsQEx5NsdF9/bBZTvkt+7Epbfv0F3fb4WW4+FnLvKtxuLcfO9KiBGCt/PoX3xSbBzKT5Bdz9lEi6+2+67dCW27+1oX3wS7O/hn4DHBMR4AO2LhYP1/VHCciNFfr+F7nk+jwbeFRijhPw+lPbFZWEY38+lffFJsOsLnMXcoi4+7Er8/P4o7YtPArwAeFlA+aO+Ukzfrv21kLr2uXQvlD8tvlPkdwm+NxC/Ps/B93bIN8Dv0T0OsT+2v5Z7fn+U9sUIAY4n7IGbKdrvB2EXPm47v16H3c9dA2JMGocYYv5aCt8fY7LvlwSUP/Ld9ruflvx28b0xoHwopz6Xbzdy8R2yvpiL790I870Nc4sRtn2HafD9VrrnbT4OO1YRQmzfO9K++CRYB+8AHh4QoxTfu9E9rrwtYX0Qg22/2xafBHgx8CLfAFqAMg/OwD5t9D7Ywam/JmwS6tbA4NaxWIX/oiorcLuQswH/3/YxuA3sdw3uTWJ7Jn8/1+PZhsvvZyl2YNqHPr59b8Lv49v3xu9jcRvoDfH9Yib/5lfW2/lSgu/74XZh/g/xv6C7HrcL8yH173ZMzu9FpMnvrgVDu9gWeL7Ddo+l+wa5LlbgduKwHf75ncL3S5j8m0+V376+F+F24hCS3/fH7ULt8/E/oUyV35N+j4sIm8jk8tkUvrfF3/dvYC86T6IU3yH1uUv/Yg+6F5jrIoXvlbh5DOmvzZLvPZFvV98hdW0K3y6/P9qu/wAAIABJREFUx2X41+drsP3iSTwBuJdnjFJ8b8/0+06R34cCj3TY7gX4L4ws32645vcT6b6hoosHAo9w2C7E9zrSnI9NWjhqG+CFATG6JnuN2Is07bfvIlmuvl+I/5htCt855XfXgmNdrMXe7DSJJwEHe8Z4EG4X7uQ7fn3u6vs36Z6A28VK3OrpkPG1Z2JvNJhEyE18LvX5KsLq8xT9NZex99X41+cPBh7msN3x5J3fKc7HXNrvjXQvENtFCt/bED+/n0X3g3BGhOS3q++QiS0u5w+553cK36Xkd2zf67GTwifxFLon8HTxEOaeZtvF8fif47v6zv3826U+3wf74B8fXOuf3PP72Ux+YKfB7Xi2UUL/PIXvh2L7bJN4UUCMdbhNpCwlv7sWBO6ij2/fRS63wa3fHXKclN9u5OQ7dAErl/wuZbzFd3xtMe79c1/frnNb5Tsf32uQb1ffIeffs+Q7JC9S+P4jJp/zrcZt/mcbLuNB+wGHeZZfiu/fZbJLQ9j4Wor8dh1vUX7HPx9zzW+X+QRtlOD7UXQ/HH3ES/FfzC+Fb+W3G7NUny9GvnPqn4fEeJlDDNf5YW3k5Nu3rs3Jd0j/PIVvl/G//YGnepbv6nsteft+jsPnQ+vznPLb90HvO2LHnidxBPbhAz64zmWe9fx2/T0eAPy2Z4zFuI29h+T34+h+mO6Il+K/WEgu42sh/TXX6zkhvpcQ33cp+Z2if+5yjhJSn8+a79jn36H57Vqf/5ZnjBS+H4/bWgGh9bnLIpyxz8fW4Ta/uw2X/F5O3vn9BLofrjrij/BfODWF7x3Ioz7P3bdrfR4yvrYB+XYhJ9+hD/SJ7TuX8dTl+D8IehfsQ9gncTT+Dy5ZTXzfz2PycV4EvDwgRgm+l+A2Fus6v3shngjc22E77/ZbC1BufR4J3Amc3Hjt34HzgL8BvgOcz9zE+YcDnwNOBb6PXazyGOCr9Xajwb3tgA8CX6v/G0103gB8CjgXeDtzifiX2BsZRryWfjf0rcX99+Q7adT1c4vwv1DyTMft7oP/jcCu3813H5bjfkNKyA20rr59Fz0swfcS3BchOBq/E+9SfLu6WA0c7hnDdf9X4H/TR0757eviMNwX+XyWZwzX7xaS37F998nvY/DrqKXwvYa88tt3Yqry240+vn3bjFnz7XucDsF9UTjfujan/vli8q3PIS/fLpM6FmLWfK8kX999fou+MQ7DfRFf3zqkFN+ug/o5+06R367t91r8Jyr28e07EbkE34fjvuijb36n8O3aX/X1vQz3RaOegd9CHn3GglL012Kfj+XsG+Kfj/XJb18XR+C+KFzs/F6H/0RF+XYjhW/X77YY/4kOrr+pB2FvaOjLCtwXjXK5AN8WI7bvdeTTX1uH/0TF2PltiJ/f96P7qcxNQs6Vcjr/jp3fDwb29Si/j2/f49TnXDHERQm+c8rvnH0/Hfcxet86xPVzG7ALXfrg6nsb/CYyGeKff/8GdvK9C77jqetwP1fMOb9d6/OHYBf060sK333qnhAXsX2nyG/XSZQ55/cDgHs4bhvSX3P17XsO0Od8LPZ8pofi9wT2WczvFL5j99dyzu8+vn1drCW+75z65/JdRn8tJ9++LmbN9xLy9b0t8DTHbX3PlfqM9YZcHyvBt2t/7RH43TiWIr+3IX5/rRTfrsd4FX75vRr3a7W++V2Kb9fc2x774D8fYvtehPtNjL7HqRTfKfLbtT17FLC7R/ny7U4f3743AruOr63C796uNbjPxSilPo893hLiu099Htu3b9/5obgvAphz/zyF7z71+W4e5a/FfS6Gr4s++e2be8fg1n8xuPe7xklRn8fO73W4X8vJOb9TXB9z/Z3siF0sw4fYvvv013xz72G4X8vJuT4vIb9T+F5FXv21EnxvS3zfvsfp4cBejtvmnN+u9fnO2MUqfYjtez3wZMdtfV2Ukt8l+F6E+zoYvsepFN+un1uKf33uGkO+8/Ltekx9Y+Tu23Vs37dPeCxu+78I//tkUvh2bTMejz3v60spvvvkd+y5hLsCj/UJoAUotz73BH6wwOtPw64++hDsBeUTmHuy+SHAq7A3/TwD+yTRx2AXpXxBvc2bgXcAj8ZemHhH/fqrsYtbPhz4LHOTGk5j7gdnsDdxf7THfvSp/H1XZO3zOd8V9HeNtO2IRbjn3SL8FixLcZzk2401uC8Mswq/xqIU332O786eMWLvx2LKyO9demzrkxfQ77vl+rtdi/vCMKXkd4q6ts/vr8ms5bfvk2Nyq89L8e1zThW7DwLl9NdmzXeuedH3c7m2Syl8l3AeA/LtSm7HyTe/+9Q9udZTSyjDd4r8TuG7T3/Vx/d63Bd2W43fjQa5td+lnOP75rfrhZg+dX+TWcxv+XYjZ9+5jen4jNmux32hrzX4TWxJ4Tt2uwdl5Pdi4ud3Cf2cvp/Ldcy2r2+fBcNTnCvN4nhLivzO1bf6a26k8F3COEXfz+XaX0vhu89xyrk+T5Hfsfshfc/HYud3rvVg3xi+13Vj99dS+M4tv3O9ltH3c7nmdym+S+if5+Y71+PU93O57kdf3z6kOE4p6pASfG/f43Mb8HvIRIr+Wim+Yx+r3PI7hYucfcfuh/TJ7+16bNskNxc5j+GlmM/kmt+ltK0553fssUj5zitG7PG1HXD3uD3x7zfI2UVuY3ixfe+An+/c5grn6gLc62jTY9smfXzvSPz5TDlfyyjhN5XCd2792lm+f6zP+XeuYwigPkKf8mP7zm1sO+cYsc+/+/jOeZwit/GWXO+b6NPn9l2jopTcK8H3UuLndym+c7vOJ99ulDJOOMu+SzkHcP1ui/BrX0vxndtvyqv99q14RHweAnwc2AL8CjgX+A3gRuD7wFX1dhcBX6n//R/AI+t/PwY4sFHeauzKrw9jbmX2LwDX1f++BLgWu+jljsCF9d+ubOmx7V09tk0dY3OPbW/yKL/PPvhsD/323af8vp9L4dt3P2L7vgX73VwGkrcAN3vEKMV3n+Pbx1uT2PuRIr9zy4sbPWOk2I/YvlPkd27HyTdGn/z2qWshv/yOHaPyKL9vjJx999n/XOvzFMcpRR8hRQz5diO3PmEK37H7Ur4x+rjwrc9jn8fA7PmuPGOk8F3CWAjE993XRa7jLSlclOD75jqGy0WGu/A7H8vtPGaWz/FT1Oe5uUiR3yl8pzg3nmXfKcYRbsL9SYQ+Y7Z96/NbPGKUMr6m/HYjt9zLebzlJuykS9dt+9LXt089lZsL3/Ox3MZ0UuR3rr5TnAPkVp+n6J/7+E5Rn6fI71S/2+0ct/Xpr6XwnZuLFONrueZ33/G12Pmda7+2b4yQ87ENPbbtSwrfublI0Zfy9X0X7jdE+Rwr+XYn1TX2mL5L6Z+X4nsLefn2oRQXJfju0+bfXv/XlxT9tdzGQkLGbNc5butzrFL1QVzJeXwtVbvkmt+x55bdBtzhESO33Mt5fkts37nld87jLanqc9eHmqa4XuKDfPf7XC71+a+Jfw4w677vwn1RuNj981s9Y5Ry/TtVfb6t47Y+/fM+x3d0r1lfcutLpTjnC7nGnkt++/ouJb9TzbON6Tu3eV8530+Uqt857b5zG0/NvU/o6jvXucK53S+YYn2HFPV57LbVd42KUnKvBN8ltXs5xQg5Vq7rlsWe75BiHm/OLuTbjVk8/w45l1nuuG3s+Ws5+y7ivNLn6RpiWH4C3G+B17tuuLut8e8tjb+bF0MWAY/DLjj5MOAA5n5QbRemTsUuTvls4PRJX3yMGzvKXWhbH/p8zrdD+2nH7S4HvusZw/W7bcbvIuKtuE8sCHGRk2/fGLF9/xr4kuO2X6q370sf3zd4lA95udgCnOMZw3X/78Ae175UuDfcvvl9C/F9n4N7x+UznjFcfydVj219Y/j6vhX4suO2X2R+2+1KCt992svY+X0X8C+eMWL77pPfvn0Q+XYnp/rc1/cFwJWO27oe03H+P3vnHTZJUa7vu2ADYZec4wIGzEePx59ZMCcERTHrAQQFjIg554SKEQPmHFARBQwgqJgDguGohEVyXnaBZWP9/qgZtne2p7umqqu2p77nvi4uvtnpr9+v++nnrerqqrdz6O0bIyafS28/cuido/0uQe++9ddCr6mZpnfoA8RbgJWe2+a4H0s9FrISOCUwhu/xLydcb98igzn0DvVFDn+XoPdNwM88tz0Nf92q/Aa42nPb1Ll20m2r5NDb928L1Xs16f19M+nz+cn4jwX12d+T6B0y1im9/clxP+Y79ncxcE7A/hcDZ3luewphD3Rz6N2nfL4CODUwRp/8Hdqv/TXupX4+9Ln9nsTfqe8BLsK9tHBScuidw985JlvmyOcl+DuH3j+gP/21mZ7PfwVc67ntTB9PnWn5vIS5J8txYxUh5PC3b9H3UL3PBq7z3LbP/bU++fsC4K8B+8+h903438f1+X4sh96+53g5YXNPJtE79Bhmot6p7wFC9Z7kJR4zXe8c99+TtN/Su/ttq5Sg93W48S8fQud1/gK4PnGMUvK5b3/t37i1IpOSw983k97fOcbXcuid2t/X4p5P+xB6r5RD7z7Nb7kV+FFgjBztt+9z8xz+7vN4S5/uv/8F/F/A/qV397/X5/vvq4Hfem4bms9L6Z/3Te+Q4u059D4LWJQ4Ril6+x7/P3E5fVKuwq0H6PJvGSWHvyf521JfU6tJP762jDB/X4n/OuLQ83Qm/jr22d++YwNL8V9jPYrv3xaq90rS99fOogy9fb0X4+8S9O5bfy21FjNd7zMn+N0++9v3b7uF/ubzy4E/em6bo7/W5/vvSfT2raEwSg5/+86LyZHP+6x33/J5yMuVJtE7Zn6L71q+ma73JPdjfdV7Cen1nqStSf3MNUZv3+M4DzdHdVJK0btP7ffNwOkhAVSAcv1zFjAHeG7l3+6FGyB+Ek6jrXFFJP8wwX5PB55f+Xy3wf/PBg4a/PwIYMvKNicDDx/En7RDuBI/wy733K6OJfh1IpcQ1hgBfA6/B0UnEF691ndyju+k69AYdoK/ZZQ+6b2YsEICAJ8lvd6f6Hi7Onz1viFw/yvxa8hi9D4NWOix3Q+BSwNj3IDfwrFQX4C/b3P4O1TvS/ErCncR4YvfJsnnof6+nvR6+/r2kxExUuu9gvT5/FT8/P0D4LLAGDn09vVtTIwS9D4FV3iijVL0Ds3nq3D9izaW4fqnIeTQezFl5PO+6H0r8PnAGDNN75i+VI7+mk+ejsnnF+O3SPkCXCHsEErRu0/3331uv38IXOKx3feBKwJjlJDPIf14y0L8/H0+4Q/vf0B6vXPcf6ceb1kJfMZju1ztd2ihPV+9T8K/YPYoM8nfqwnP5xfht8jp34T7+2T8xs2+h5sYHYL09mMSvUMn59yI33OQmPHzz3jG+DRhL9uB/oyfx+i9Ar88HZPPT8ZvHKUUf4fGWIF77tPGUtxL+UJjpNa7FH/nGE/18W2Mv311zKV3zLPpvvg79XhLjN7n49cu/ws4IzDGSbgJz218B/+CuqOUMN6yHL9x8VsIz+eT+Nu3AOMoOfztm88/Fbh/yDO+1qd8Hqr3SfiNo/Td36nz+ST+/mJEDB+9l5He3zcS52+fvl6Mv/t0/+27kH6UUvTuk79Tz3eI1dtHR+ndL71j2u/Uei9CevtSit4+bWvf9T7ec7vQ+YrL8LvPugn4UmCMUvQ+wTNGzNzR1P0133kMMf721bHvevfF35bwa6oUvU/E70WS3yK87etT+12Kv30L6o4yib99F5CO8mnPGMrn/dF7EeF6X0d6f/s8186Vz0Pvv6W3P756h47hLcVvnHQJ8JXAGL5630q/9f4Ufn29mLknqfXO4e+/Ab/02O5c/F+AMMqNpG+/ff2den5qDn8vJs7fPr6N8fe38Hux4DcJ74f0ab5DaAzf51591ztH/7wEvS1+eXqV53Z1zDS9+zx+fgt+46SLga8GxphEb9+Cm6N8C79z9Q3CC6fm0DtHfy21v319m0Pvr9NvvXOMt5Sg9yL87pVi7sdyzC3ry/ia9M4z16hPeofex/wFvxeP/RH/FyCMkkPvT3n+bsx4Swl6+/p2qed2dXwTv3z7NQKLXKoAZT94BvBQXBL5HfAaXOftr7jBuh8Cb8DvYemQVwD3HPz+74FDB//+blwxy18MYlYXIK8Y/Pt3CUsgl9FczG8Vfguem/gPzUlwOeHFjMBNCH8ezRPLTgU+GBHjJtq1vIbwhUrgBu6aFrBb3HkKXZgGbnFMH/T2WaQzjiuAw0ir9+nAe1u2eS+BVYQH+Oh9Kf3WezXwTJobvX8CL4qIsRJ3HppuWpfgN/A9jptoXzCSw9+xer+I5rd0Xo/TK3ThKbjrpcnfy4jz90pcnkup90+B97Vs8x767+/LaC4wtQqXj0Px8ff/AS+JiJFDbx9/X03//d0Hvf9BOXqHToQEeD/NBaZW4PqloYWAIL3e4JfPY/rn0tufmaR3zABkDr3b+ntd5POjaH4L73Xk6a/1Xe8llKF3m79XEufvVbixqaZB0r8DL4uIkUvvtvYgl96hC1cAXogrSDaO64BnEe7vVbj8kFLvFbTrvZg4vU+jfbzmHbiX/4TyPpoL+a4ADmGyMdtRcvi7Te+/AUdHxMihdyn+Popmf1+L83coQ72bHmpLb0cJekP7+Hns+NrFwAtaYnwf+GhEjFOA41q2eTvu2VUoOfS+lLT5fCWuv9bk778CL4+I0Rd/X0Wcv99DcwG55cDBHn9HE6n1hvTj5xcDR7TEOAn4WESMHHq3jcdOg78hvd4rBr/fB3+HTmyHPHofgStEOY5rcP2tUFYOfr9pcu55wDERMXz1jlmQsZj0er+b5udrw3wec92W4O+LcP3OphjfBT4eESOH3m39+y78nfr+ewWuv9bk73Nxc7liYuTwd5uvYvV+F82FfIf+jjmO1HpDu79vJfzlLgAX0u7v7xA3gTeH3iX4G9LrPZz/1uTvG+m/v3Po3Yf2uyu9m8ih95Xk0Tt0IQNIb1+ktz9t46nToPf3aC9S90b8FjSN4x3AmQ3fLwP+l/AFOFCG3ucDL6b5uv8WcQXDff0dulAJ2sfnLC5Xyt/p/f1d2vv3b8StNQqlBL2X48bXmubZ/hl4dWSM1Hr7/L787fgPzX9jrL//jZvP3BTjm7hClaFIb3989I6ZY7uc9usl1t8n0l5c8g2ELyyHfui9gm7ux0rQu62/93ri9H4bzfMlbgWeS3gBDPDTO3Z9qI/eMfn8X7Tn82/g90LqcXybdr1fB/whIkYOfz8PN19gHFfirqlQfP7GpcT3z9t+fxFx/v4W7e1/rN5vpbkg6K3AcwgsHDHgEtLm81txz8eanuP/EVcvIZRlpNfbpz24grj+2tuAsxu+X0r/9c7h71L0bnvespr48dSZpHfMOGQOvd/C9PvbJ5//AXhtRIxltPfvY/X26e+9Gjd2FIqPv2P7a6n1XoobX2vS+/e4vk4oOfT2aQ+uwF3foZSgt6V9vGUpcfffOfJ5SXo31TWS3v6/n0vvmLXZh9I8nnI5bo5cKDn0Hq4/azoPXyL8xYVQjt4+/o4ZX7sF1343jRv9DjcWGYQKUPaD4cDcPYD7AE8BLsA9VPh/wH1xk0bBDSodVPndx7Kmo1v97nrcBI/7Af8DvLTy7wcAD8IN3NyFNY2tGWwb+hb51bgJsNeydmGF4Zt1LiDO1OAapAtYt8ruqkHcC4ibpAhuQdVjcYUHqzEuwnWWn9FBjGtwAwSjN6VLB/8es3B9yH9w19Zop3MJsJDwqvNDVlGG3t+jXu8LcTfDXej9dpzHRx8a/QHn07dH7h/a9Y4ZnIA8ep8H7IvrYFS9cR1uEfIjiBscBHceFrLuxJPluPMX+xAUnH/Xt79j9b4eeCTuvFcnsC3F6fNQ3ILmGG6l3t8rcdfZhcR770bS6/02nI9HHxr9Huf7d3QQo0nvi+jG3xfQ7O+mArQ+nIe7br5MOn836X0FefzdVuDKh5x6Vz3Wpd7nMl7vD+Lyy7TrfQnxeq8Cno7rX15U+ffVuH7JY3H90tgY4/S+gW70vhWXsxex9s11NZ/HDKrBzNH7+x3EKEnv0QcZ06Q3uMk5KfP5dbj280OsnVOH/bV9cQXkYpDe/qTWu83fFxLv77/g2u+vsPa93bWsab9jBv8hj95XMf16Xws8nHX9PXwDbhf+Pofxen+APHrHTkoFeBOuAOSfRv79d7iibu+J3P9K4Km4wfeFlX9fhSuY9mjgB5Excvj7HOBhuDen1un9KKZD76G/R8efUvvbssbfTQuZfLiGdn//IzLGn3H+btI7ZtI5SG9frsH11z5MOr2b+mvX0E1/7VvA43AFeav7Oh94FW5iXGyMN+IesI9O6votLp+3veDJh9R658jnf6Y+n1+De+lBKf6OKQwJ7vo/CHddVRdNrMK98O/RuHY8hhx6LyW9v78JPB74yUiMfwOvxPk7ZiIFpNcbyvB3Dr0XMf3+hvR6X43rr32EddvvL+Da739Gxvgjrr/2Nda+dq4BjsXlqdjn+Ln0vox0eq/AzZsZl88fhRtXjaH6/Ht9+fsC4v39dcbn81fgnmN2kc9T6g3umk3p75Wk13vo76+T1t8Xk9bfV1Kv9y248buU/v4B3fh7qPd1jNe7aQK/Dzna768B++EKrNf5+2Di/Z1ab8jn72nXu83fl0buH/LpfRXSu422/loOvWMKeQ9ZSL3ei5k+vW9EerexkPF6X0h6vS9Aeg95FfB83PPdKr8Gnkb7C3/aWA4cCLyZtfuXq4CTcc8Rm17g5kOT3tczPXp/GXgC7gUK1Rj/wr0s6HmR+4e8/q4uiqr6O+aF3JBP74uYfn+/Eufvc0f+fejvD3UQYyHTr/dvcfff32Dt+++rcM+UHkt8uzTUe3QhX5d6X4H87UOOfP4lYH/cCzNG8/nRdJPPpbcfOfS+gfT+fgXuRY+j+fxXuHlIH+4gxkLWr95d3I/dwni9r2Z69D4G94Kz80b+/Wyc3h+J3P8y4Im4wkbVv3clbp3BI2l+QaMPfdE7dqzzi7g10z8b2dc/cS/jPixy/9Cud8wLXIcsJK2/L8f1pT7O2s8sbsIVbNoHl9NjGKf3CpzeFxGv9zh/D4uhXBa5f3D3deP0Poh4vZfhrtlx/n4EzS/08sHH300FMnz4DW4+07dYO1dciXvp4OOIv25z6D3cz+jzwmF/LXYN3K24PudbGZ/Pp0HvUvydWm+LOxfj8vlF5OmvSW/HFbj2L6W/D6De399jevL5r3H5/Nusm8/fhcvnMS+aBve3LqzZT5d6vwz3osfR+ge/xM1TaHvBUxs+/o49Tzn0/hVr9K7ua6j34+lG74tr9pPL3xeTJ59Pg9458rn09mMl7n6rZL0vpxu9L6de75vpVu+rSaf3Jbj770+y9lrTJbgXHuzL2msVQ8ih92eBJwFnjfz7P3Av6zsqcv9Qht4rcFpcTzp/n42b437iyL4uB96Ja7+DX0xqrI27Vowx80888cSzDjzwwIdE7Uisb+6IG+Q5mbiK5FU2Gvx/OfGD/nVsAMwZ/Bxb+G4c2wG74Ez2f4lizAZm4ToMsQljHHNx52sFaxcX65JS9D5/8PNmiWIsYM2DxFQxhh2QrUin9zDGFqTRe3NgD1zj+k/iH1bVMYs1nY1UWsxmzYSA1HpvSXzBxjrm4NqIDVkzQatrcvg7h9574Hx3HfEd/nGk1rsaY9r9PRv398cuFhtHjvZbevtRit57A5vQXbHiOkror+XI50NfbI30bqIUvUvI53OBO+D6axcSX/yujlx6p87nOfyt9tsP+duPHP7enDWLx1J5I2f7fXfS3I8Z1twP34507XcOf5ek9zTn87msKaK4C/J3E6XonaO/Niw+mEqLHXALrVLGGJ6bu7F2MZoUMaa5v7YFrr+2Atdfk7/rqbbfe9FN8do6Uuudy9874SZPxBbXG0cJ+dzgcjqkHW9Jrbfux/zYiDX9/p2JX7RexxaseRmD+mvjMbjx1I3prhh5XYxhmzHt+Xxn3GKVac7nw/kty0mXz1Prrf6aH7n8XUL7vSNrfD2teldjpOyvlZDPc/h7Dm6cIsd8xWnO58PnY5Z0z65KyOeQR+8c+Vx6+5FT72XEL4qpozS970o3L/sbpZpr96SbYsVNMTYnnd45+ms74u7H/tWybSil9demWe8c/t4L18e5hjT+hjL03hK3NmMFbq1PinUTw/lMq0gzfwbUfvui++/JY0yzv0vL51fTzctj6sh5/y29mxl67y6k0bt6nvagm+K1o5Si9064nL4Y90KfFNwOd45S+jt1Pt8YuD1O9wuIL4ZWR2n33/J3M1sBu+P6OP8gzXVbwvjaBrjnYxvh5sel0lvja36of+5Hrv5arvvvVLUXSsvny3HjLdOez+9MN8Xnm2JMs79L0ztHbZVp1ru0+2/p3cyGuGLPIL19Y6TSexPcOILB1bOKLXZYx4a4vlTK/vnOuHs9kN5N9Lb9ttaOnQs/q5u/SxTAP3ELtLskVVGKIaszxLiadAvKh6wg3cDEkFQNRJVS9E7NwgwxhqRqUKukmMwJrkE9J9G+h+Q4P6m9XSXVYunlrPu2rq7J4e8cel80+C8HqfSuMu3+Tq15jvZ7iPRuphS9UxU7r1JCfy1HPh+SUnPp7Ueu/tq05/NllNNfy+XxHJqr/W5G/vYjh7+rLxlIdb5ytt8LE+23OtifY/wopb+HlKD3NOfz6nhtimKEIL1DmOZ8nipvVLkyQ4whqYpPVpnm/toi4M+J9j2kBH9X2+9UxSerpNI7l79zeXya87klz3hLanQ/5kdV6xTFJ2HNZE5Qf60Jy5pJa6mothnK536k9Hjq+S059FZ/zY9c/i6h/b4iQ4wh095fGzLN+TyHv1Mt3KtSQj4v5XnokGlvv/X8ezKkdzOl6Z2qOF0116YoPjkaI8XiG8jXX8vVZyulvzbNeueNv7A0AAAgAElEQVTw9wUZYgyZZr1vYM0C2lSUMp+plPY7Nbr/9kP53J8c+Tzn/bf09iNVMcLqeUpRzAjK0fvywX8pOT/x/qukyudLgXMT7XtIafff8ncz17Om+EwqShhfWw38PdG+h2h8bXLUP28mV38tl+ap4iif+5PT36mKT1aZZn+XpneOWNOsd2n339K7mRxrJaS3H7eQ/v57Fek1vyzx/qtMs95T2X5v0OXOhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCFE/1ABSiGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKIwjHW2uidnHTSSX/Yf//9793B3yOEEOsVY4wFsNaaaY1RwjHkooRzVYoWOSjhXJVwzQp/pLcQ9ahtnVmUoEcJx1AKpbStpVxTJRxHCccAZVy3JRyDYvRn/4rRrxglHEMuSjhXJRxDrhg5kN4zK0ZqdJ780bnyo5TzVEKMEq4nKEOLHJRwDKDj6Mv+S6KEHFLCMSjGzKOU81SCv4U/0ntmUYLeitEfSjlPitEfdJ76g86TPyVctyUcg2LMPErRQv6eWTFKQOfJH/m7PzFyUILewp8S9FaM/lDKeSpBC5C/+xQjB9JbMaZp/4rRrxglHENJSO/+xOiaDdb3HyCEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIdKiApRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEIWjApRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEIWjApRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEIWjApRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEIWjApRCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEIXTmwKUxhib67/1faylY4yZZYzZ1hizx+C/HY0xczuOcTtjzHuNMacZY35ojHm1MWbbjmNsYozZxRizpzFmgTFmK2NMp54xxmxmjNltEGM3Y8xmHe9/g8HfvWAQYxdjzCYdx8ih95zBfocxtjPGzOo4xibGmF0qnzvVe6DFfsaYr1b+7QkJYmxV+ZxC722NMa+qfH6fMeZ2HccY1XvbKdX7CcaYr1X+bRr1rvP3nI5jzJ12vQf7zJLPK59z+Pu9CfydTe8S2u/K51R6v7ryWXrX79/k0tuk769tp3zeuv8NjTH7Vz5/1bj+W+ftd2F6L5hSvbP5u/JZeo+PMZrPt0yhd+XzVOtd+TzVelc+J9Fb/vaKcQdjzLGVz680xmzdcYz7G2NOqHw+2BizcYf7z+HvTYwxh1U+f9IYc5+OY2xnjHlN5fN7jDF7dhxjrjFmx8rnbY0xG3YcY9Maf5sO97+hMeaAyuevGmMe13EOyaF3jnx+B2PM+yufU/j7ATX+3qjD/Zfi71z5vKr3KxLoncPfT6x8TuHvHO33dsaY11Y+vztVPh/pr01jPq/q/ZUEem9qjDm88vmTxpj/6Wr/g33myOd3zOVv4/rOuyfQ2xhjNq983s0YM7+r/Q/2Oar3J4wx9+44Ro58fkdjzAcqn6cxnxtjzOZm7fuxFHo/v/I5md6Vzzn0PqbaTnUUY33k88cmaL+3NmvGU3c2Hd5TDmIUpfeU5/Mcem9vjHld5fO7jDF7dBxjrjFmJzP9/bUnVT5/2RjzmI5jZPN3pf3eIYG/987g7wcZYz5T+fxc0+39dza9K59T6L2DMeb1lc/vMsYs6DjGXGPMTpXPKfw9qvdzTIfz8Ib53KTtr62P9juFv3Pl810rn7vO57OMMQdWPiufj48hvf1iSG//GA82xny28vnZKfJ55XOKfD7PGHNE5fPxxph7dRxjljFm+8rnFHrfyRjzwcrno40xW3YcY1NjzK5muu/HpLd/jNT53BjXX9vdJO6vVT6nyOc7GmPeUPn8DmPM7h3HyNZ+Z/T3rqn0HpyjPRLpPdu4MZeU7fedjTHHVT5Prb8rn1PoPX8kn3/cGHPPjmPMzpDPNzLp778fYoz5XOXzs0ya++9hPp9qf1c+72CMmd1xjFG9t0mg9z459K58TuXvIyufP5bJ313rfRdjzIcqn19mjNmi4xjzcrTfOfxd+Zyr/U7ib7Omv5bC3/NG2u8tprT9HvX3f3UcYydjzJsqn99ujNmt4xil6L1F5fNUt98F+HtfY8znK5+faTrsd+bUu/JZ/bXxMUbb7679PdsYc1Dl8xeNMY/oOMZ8Y8xRlc8fM8bco6v9D/a5kzHmzZXPyuf1+6/z97yu9j/Y54Y1/u7sGf5gn9n8Lb1bY2xmjHlh5fNHE/i7lHw+2n4/I0P7LX/Xx7irMebDlc8vMZV7m45iyN9+MUrpn5egdyn+TqK3sTa+HuNJJ530h/333z9qUr/JWBjSWtvZRSzWZmC2nYC6c3wdcLmNuOgGF/2HgCNrYiwHXm6t/Wjo/isxdgPqBgtWARdba2+KjDEH2AOoe2CxDFhorV0WGWMesDtQlyhuwh3HqsgYqfU2g/3XLa6yg/1fF7r/QYwNcedp2Pj8ZfD/e9Cd3rcHvg/sXfP1P4H9rLX/joxR1bt6DNCd3kcB72fd69YCxwMvjolRmN4nA3es+Xqa9Ja//WLMBRaQL5/L3+NjjOpdRXqvHeOFOL1HB24s8HHgJdLbS++LrLXLI2M09deWAP9Jnc+ttZdF7r+UfH4HXPt9h5qv/w/Xfp8fGSOH3tsAOyK922Lk8Pd83H1lXT6X3mtiNOXzlbjz1KXeo1pMq96jMa611l4euf/17e8Ueo8yrXqP0oXes4CPAYfVxLgVeKm19pORMbYEvg08tObra4GnWGvPjIzR5O9bcf3zWL0fBXwNqFu4cBrwVGvt4sgYLwHeS33//CPAy6y1qyP2b4CdgWHxg+q5ssBl1trrQ/c/iJHD33vjxtduX/P133H9tQsjY+TQO3U+b/P3S6y1n4qMsSVwIrBvzddd+nsPnC9S+fvRwFep1/tU4Gkd6z1KV3p/HHheTYxbceM5n46M0ebvi621N0fG2Bt3P1b3Yoyu/N3Wfl8ck2sHMV4GvJt18/lqXD4/uuN8XiVXPu9C7zvh8nmd3n/D6X1RZIzH4Pxdt1DlFJy/l0TGyJHPj8f5e5RU/q7Sld458nluvUfpSu9PAIfWfH0r8CJr7Qk1300SY0Nc33nTwT+l8HdV71Fy6P1D4Okd6L0tsANp/V2C3nfG5fO9ar7+K/CEDvJ5tf0eZTHuPiO2/V7fer/QWvuZmu8miTGqd5Wu9N5oECNlPt8M2JW0er8ceBcwOqFvNW4e0ss7eP6do7+2gPT+PhmoK6T+V1x/bWFkjBx6V/09yjXW2isi9z8b5+9Dar5eivP3Z2u+myTG1sB3gAfXfH01cKC19peRMe6Cy+d1ep+Hy+cLI2NU9R7NIV3pfQzwTur9fRxwTAf+3oU1YwjV41iN8/cNofsfxNgGp/eDar7uSu9qPh9lmvJ5U/vdhb9H9a7Sld6zcPdjKfN5m7/3s9ZeHBmjhHxeit53xeldV1hbeq/Zfw69twG+Czyw5uurcPn87MgYOfrn+wFfAuoWon0feEYH123qfD4b+BTwvzVfLwWOtNZ+PjLGqL+r5Lofu8hauyIyRil6fxp4bs3XS4EjrLVfiIzRls8XWmtviYzR1l/rQu8c/fNXAW+jvn/+fuBVHffPR2OkaL+rpNA7lb9ztN/bAduTrv2eg/P3c2q+Xgq8wFr7xcgYuf2dSu/9gS8CdS91/B7wrA7yeVXvHPdjKe6/t8Wdj/vXfH0l8CRr7a8jY+TO56Ok8Lf0Hh+jyd9LcTkkVu8DgC8w3t/P7CBPpdZ7DnAC8Oyar2/B5fMvRcaYhdOi7kWkK3D985T9ta703gz3fGwD1tXiRuCShO23xel9ZeT+c/XXFrBG7+q5SqF3Sn9/kfp17N/Ftd+xx/Fa4C3ArJGvVgHvs9a+Zt3fmmj/Jem9B+4+JpXem+Pa77oXOk6Tv3elfs7GauBSa+2iyBjb467/+9V8fQXwRGvtbyNj5NY7Rz4fnRueQu/R/loXeudov/8LOAnXvo7yJ2B/a+2lkTGeBHye+nz+HeDZHRzH64E3UZ/P32Otfd26vzXR/nP4O0c+33gQY9r9vT2wHfn8XUV6rx3jQOBz1Pv7RJy/l0bGyK13iny+Pe7+9L41X1+Oa79/FxlD/vbb/1zcNfv0mq9vBg6z1n4tMkYp/n4y7lzVzaP/NvCcjv1dRfl87Rjyt9/+k+pdd6Mqeoox5onGGGvcYrym7V5qjNmk8vkU0/HbgMbE3RI3mXpcgc9h8ZsYPgAcNSbGHOAjxpiDI2MsoL4TCO7hzB7V8zspgwS7F/XFEBj8+56D7UJjDBPsuCq184AFgwQTGiOH3jtSX/yCQdydTcSbCwfHv4D6TgF0o/d2wOnUF58EV6TwdFN5K3tAjBx6Pxf4KPXXrcEVhT2u5rtJKEXvM6gvPgnd6L0JboBzfft7x9D9DxhX3Aby6b3ARLw1aJCn9yRtPs+h98G0+/uDNd9NgvT2i+Gld+j+BzEOxhU9qHvobXD9rA/ExGDm6L1XYr3nE6/3VrTkc1N5a00gJei9Pa79ris+Ca4fd7pxE5FCY+TSe1yxUZDewxi5/L0A6d3IQO89GK/3LKan/V5As967h+5/EKNN720y6R08tiS9J4qRQ++PAIePibER8AljzDNDdz44xz+kvvgkwDbAD03EW9g99N6IeL3vh5twMi7XPRo4yRgTPMZujDkMN54yrn/+YuB9ofsfsBP1xS+GMXaZAn/viBtfqys+CXBnXH9tXB7zieGj9/ci7799/B073vJRmv39SWPMM0J3PvDUKdQXn4Ru/D0b5+9xb7sc+jv4DW3GmPvjJjmM0/sxwHenQO9xxUbBnadPRert4+89OvD3GdQXI4Ru/J2jf/583HhK3XW7AfAS4D0xMRhfzAjy5fNYvXfC5fNxet8FOCNS76G/x52LxxLv76aXfUA3/h4Wl61j6O+6yUFeTKB38Fs9M+XzB1CO3nXF6cCdp08bY54WuvOK3nWLpaE7vfdi/er9OOA7Heg9rtgodKP38TTr/SljzFNDd55J751x+byu+CTAXXHt97h2yyfGpjS335sR337n0Htc8UlY4+++650jn2/K+Jc3QTd6HwEcy7rFL8D1116GK04ZQ67+Wmp/n0F9sTJY4++YceEcerf5e9uO/F1XfBJgY+AEY8xBoTs3bkH2qdQXnwQ3WfVUY8zdImIM8/k4ve/GdOh9JG78bJy/j8YVp4xhZ8aPIWwA7GrcROUgKnrXFZ+EbvTuSz6PHT/38fcOMTEYv1gautE7Rz7fBT9/x7RL0tuDjHr/dBCnjrsBP5XeQHq95+JeZlVXfBLcYvBTjSsYGhojRz5/CG7R5Lhz8QTcoqtgMun9aeqLT4Lrr33WuIWjQfTofmyvSL33Ib3eTS93ge70ris+CU7vz2XQe88puP9uenkydJPPX4x7Wde4/vkrcMUpY+hD+y29uc3f44pHQzf+PoH64pPg/P154wp9BFGQ3vvi8nVdcTqAA4Bvhu5/EMNH7+1jYpDe3xsBP6K+GCG44zvNuBe0hMaYQz/8XVdcZ5IYM0nvO0XEaNN7Y+L1fijwLabf35+hvvgkuAIGXzCuEF8QlXw+bj3gbFz/fNxcQ58YOfQe+nvcfMTNSetvA2zXgd670u7vcdd0KwXp/TCcv8etY38i8I3Q/Q9ivAx4B+sWKwPXjrzaGPPmmBjk0XtP8uhddx8D3fl7WFy2ji783fRyly79PW6ccQNgt0i9N8a133XFJ8GNL/zItNTYaInhq3fM3HDp7cHgHKf29wLgJ4w/3/cCfmLcC1JDYzwcl6/H7eNJwNdD9z+I8XLceMq4fP5aY8wbY2JQht4l+Xvcyz7k7zUxcuj9CJr9fSAQW8ivBL03Bn5MffFJcPNvf2SMGbd22ydGDr2HL8te3/4OrkEz4AvUF58ENwb6ZWPM40N3XpC/H4lrn8fNo38y8NXQ/Q9i5NB7puTzPeRvILHeKkA5XTwd+CXQtsDkpVQMbK19bGxV2jYGAzk+Dwe3HiSAkBi74YoitfF2E7i4fGCmcQ8Pb9sMZ/xQtmZ88hsyG7dYN5QdaPf3pozv8DaSSe/ZjC9+UWWHwd8TwnzS6/1CXCJvYtfBdqGk1nsWbrC5jSONMUETEQbXic8133e9X4R7ENpErN7jOh5Vcvm7LZeNizGHfvh7A/yOdRzb4JfPgxdMk17vWcDbPTY9ctAOh8Tok94x/u6N3qGd/wn0PsoY09Z2jYuRQ2+f/pr0dufX5xz0PZ/n0PvFuIVjTeyGK8gbivT2Q/72oDC924q/59Db91jH0TTxbsi8SL370j+PWZQ90/Tu8/3YnsDzPTZ9Z8Tg/AGMn/wzZBPcWzhDyaH3Wxlf4HLIPrjChBMz0NBncc2LTWDR0Unyecj+B+Tw90tof9HNAuCIiBg+eu9LuN6+/t4mwt974YpPtvGOCH8/kfGTA4ZsAsRMZOqLvx9Kv/W+Ha74ZBsxem9Oen+/lPY+xgLgBRExUrffc3DXVBsvNYFFbgYxfIp4xeRzX71jHnzn0PttjF8AMORhwCNDdj7B/ViMv2/P+OKTVfru7xz5vE96hz6bLknvtnOQQ++HA48I2Xkmve/A+GKEt22Gux8LHW/JoffLaG9z9sDv3nMcPuNrsfffqfW+I+OL0922Gf3XO4e/fftr4yZ8NjKY4OjTXzvaBE7aHsToS38tRu+jPX7fd2xpHKn1zuHvvUnv7ycD/9OyzTzgDYH7B3+9fcYaxpFa743w93fQvcwE/o4ZP38KcO+WbWL13ha/fB5cQBo/vedH+tsnj24b4e+5jF8sXSU2n7e93CH2/vvltPvbdyxxHNLbjy3oh96+Y4njkN5+HAT8d8s284HXR8TIkc/fTvuYzqONK3Q1MZn0vjPjixHethlx/bUc/i5Bb997FOntp7dv33QcPuMtMfl8Y+DNHpseY1zho5AYG1FG+51Db9/2u22uXi0T+juoUI9xRZvHFSu7bTPiXjpQit7jCktVeaxxhaYnZgK9t4vQO4e/nwa0vUxzM+B1ETH64u/NMvhbevvrHfyCF/z8/ThjzLgX2TSSSe+7Ac9q24z0+XxD4sbPc+hdir99XoKRur+2IXna79T+frwxZtyLLhox7oW9PnN0X2kCXyyYSe8tcQWcm5gGvXP42+ccxPTPc+j9DOAeLdtsDrw2IkYp/bXUem9Mnnye2t+vpL1uwd7AwREx3kn7NbWfcS/enZjBdeIzJ/vVJvBFVAXpvS3jC/UPyeXvtrkdtcjfE5FD73d6xNjfGNO2dqqWgvR+FnD3lm22AF4TEcNX7xz9tRh/p74fuxfQ9jLsDfCrGzSOHP7ejvR6+/j7AGNM29qpWjLpXUo+99HbdyxxHCX4O7neKkA5JQwe5D4AtyDhaYN/29AYc6wx5jxjzLnGmBcZ99bAnYCfGWN+Nthu4fAhrTHmaGPMXwf/vXTwbwuMMf8wxnzaGPM3Y8yPBxffJMynfQLCkNCO2vNoTxzgjn+/wBi+k+Lnm8DCivgff+jA3Wz8C5GFLgLIofdWtCdxBn9H6Nslkuo9aCh8Fo0BHGYCFo5l0vvxtBdlAtem+B7vKL7XSS69J14YmknvOfTH34Y4f/vQW70HpM7nOfTej/YiHuDa3xL8vVkheod6rxS9fWPMdL03o4x8nlTvwc1626LvIYeHTESW3klihOo9yfHL3370tv3OqLfvxPsYvX0WWmTR24S/BSf1/Vjf9A7tn+fQ+3D8xlt2Ax4TGMO3CMHjjTE+4w1rkUnvvXDFinwILbpwAH4PGGbh318ZxfdanGPC396a2t+zaC/qMCRowXQmvTenP/5eADwqMIbv8e9nAgqnDvzt+2AwKNcaV7jxoZ6b59A79EFoDr19r8Uc/g7SwriF5anb7yfi99C87/k89f3YbNLrfXtmlr/3ILCwIpPpPfHC7wn7a6H5/A644tA+lNB+70lgYUX6pXdo/1x6+5Na79n4T7zP0X6HalGK3pOMr/XV33NpfynRkND+2oH4vQxzkv7KKL7HP8cEFvIgvd5zgP/13DzG36n1zuVvH/bCFUcOwfccH2ACCisWpPeBnr87h/CFY5Pcj4X6O7XeOcZbcui9BX5zR2Pux3z/trkZ8vnmgfl8Lv3yd2iuLUVv3+Pvs94bIb198T3HTzLGbDvpzjPl8zsDvoUtQu+/c+jt+7dNMt4wSmp/59D7Lri1KT7EjLf0Se99AmOkbr8nOf6YwjCp8/lB+B3HJO3XKL5/W5/7a7n09l0oGXP/7evv0GvK1993NMbsExijBL3vRvtLYofkyOehek/SXwsq1IP/8T/ZGDOxNwZ6+xZ8men+7pveEx/HhHqH9tfuTvtLYoeU0F+7kwkspMlk+Xzihf6D9X+p9c7h7z7df28U4W/fGFtE6J36fuwewP/z3DzU30/DebyNjYHnBMbIobdvju6z3hvj7+/U42uTHO8oOfT2vd4PMsZMfBzSeyJ8/7Y++3sT2otgDwkdP78n7S8VjIoBPB23xqSNmHyeQ+8+td+h92OT+Dt1fy2Xv4MKcVGG3vei/SWSQ1I/L8nVfofq7Xv8TzXG+PRP1yJj++1bXyvG3z61ZWL09tXi7iawcCpl3H//N+0vFRwS6u8t8dc7qIA0efxdgt45/F2E3ipAOT0cAJxmrf0XcP2g03I4bnHRPa21dwe+Yq39MHA5sK+1dq1JEYNEeDBucOq+uAJow7c53R74mLX2LsAi3ATNSZibaNsqd5pg2zsHxkh6HIOk6bswb1bIQ0om+7vaqg138Xuhek8SI/Q4Ul+3W+D/hvsdCOsMzkTv5dA7JMaW+FeE7rPeffNeL/09yOe+OXp2SKcZ+TtVjBC9Z9EvvUPPUyl6J+2HFKR332LkaJdCYmyF/9tMd8LvIfwofdOil97LFKNv7fdM9t6kvzeT9S7Be5P8ngmMIb39ydEn9I2xIW6hz6Tk0Htv/AqFQPrzFBOjT+1SqL+3wb2x0IddAwuv5dC7lHv81P6e9H4s5BnXJHpPck6rzLR7fIMr5jEp2+JXCAicv0MWCvbNe32+pnLo7fvgO1TvvSfYts9taw5/+/5toe33LPwmxkFcPvdFevuRQ+850tubvuq9Pf4Tc3cPnMjUp3Zv0m2r9K2/1ld/9817of21Pj1jz+HvBWbyFxtDOWPbfbr/no2b8zcpk+i9x2Dx86SUokWf8lSo3pPm84lfyEe/njNAv5+5pr7/3gH/Cet7DgoYTkqf2r2+x5ikf55a771MwEvYKUeLPt0DzAZuF7D/2aTP5zOtbYU8998h3pPe/vTpOHLoPTdQ71K06FO/c6brPdPu+fqs90zzHqTPU3NwLxaZlBx6z7S5hJBe77n0V++++bvPfYQ+PS+Z6d7rU4yY9tv3mVef+zl98h70d3wth9598kWuGKm9MRf3osdJkd5pfi912xfq710A3znle/e4v9a3PmGfx1t8/S3vpdm2Sgl6zzTvQfpztTGuNtak5Gi/++a9Pt9n+P5tG9Df/nmfzhP0u12aRG/fOmpVSvF3n7QIjqEClNPD04GvD37++uDzw4FPWGtXAlhrr2/ZxwOB71prb7bW3gR8B3jQ4LuLrLXnDH7+I7Cgw799FBv4eysn2HZFYIxJ/raQ45j0d0LPVer9pz5PuWJMQkiMSa5ZCL9uUzPJ39VX701KSIxJjz3kXPXt2Evxdw5StxkzuW3NQY72uxS9J6GvOaQUvUvwHqQ/jhz9tVL0LqEfUoq/c9C3a2om612C93LE0HiLPzn6hKlj5NC7hPME/WuX+tpfK0WLEq7bvvl70utvSA69c4zZpqaU+7Ec19QkKJ+n2z/075rq63H0LZ/3eaxTevshvf1JrXeO56GT0OfxtRKesZcy3lLKPUDfnpfk6NuGUEp/LXWMHHrnyNEltK3Qv75OCCXkwVwxUjPJ9WQn3L76eym2nekxQpDe/SL1PcBEx26t7ev9dylta6/ux3qs9yRIb9+Nw/SW9/oTI4feE4XI8Ht9fh5agt4lnKdcMfr0jN32OJ+XEqNPfZ1QvUtpW/ukBfT3WUYp3puEvsYoxReleK9P/bW+HsOk9DlGn8bXZrreJZyrSfLgqh7310rpE5aQzyehr8+VJo0xk/WW9/zp2/qSEPoWo69aQP/ybQilnKcStMhBKVokj6EClFOAMWZr4KHACcaYhcArgKfi9JtE+Kbq+8sqP6/CvZlnEm6aYNubJ9z3kJ8l2raK79+2Grhl0p1ba1cDSz03X2qtXTVpDNzftdpz20l0C/29UL0niZH6OEL1Xowr6OrDHwfbT0oOvfvkPei33n/y3LzPeufwXgl6r2KyfO6rW5VJ9C6hbYWZrfdSysjnfWq/J9HtNgrSu0/eyxEjVO8bgHNaN3T83lobkm+ld/e/F+PvWz03v6XH/u6TFjExfK9b6Z1m29wxStC7b/djfb4H8P29G/G/j76NTHr/Fv97h9TnKSZGn3JIqL+vBc7z3Pw31lrfa6NKDr1zaNEnfy8C/jzpzgcv25rE3yEPxn5DGXqfOcG2qY8j1N/XAH/13PzX1tpl7ZutQynja33L5xPnWmvt1cDfPDcP1fs3+F+LfR7r7NM1Fap3rnyeWu9S2u8+6X2z9E6ybZXUel8F/MNz87OttSET8G7Gfx5Mn8dCzpxg29TtUoy/ffL7TU4AACAASURBVNvkUH/n0LtP3pt02yqpx9euAP7Pc/NfFuLvPt8D+P7edcC5k+58Qr1/MXw59oSU4u8+3QOE6r2CfuXzUO/l0KJPz1yD8jlwOfBPz21/ETE/NbW/pbcfk+j984jnYyXo3ad7gEmee9zGpPl80v0P+NUEMUpoW+0E247i+7dNMm5yGxPqHXqezgaWe27b53ulSfQ+MzBGCXrnyOd9u/9OvYYlRm9f78W0rSXcf5/puV2Mv33/tj7r/asJYpTgvUm3rXKm53aTPNe8DWvtcvy1iLk3Tn3/nUPvPvUJrwL+PunOM+n9S/wLHai/5kdoPi/F36Xcf0+i98RzTwryd9/65zNZ7xz3Y33SAtLfA1yJ/7yF25DeyWKk7ndOMm5SZSFwkee2oXnwF/gXsSoln6fuhwTpPaG/Sxlv6bO/S9A7h7/7pEVMDN/jn+S55m3MUH+n1mI1cFZgjNT+XkYZ/u7bfIde9tcy6V3KeEvyGCpAOR08GfiitXZ3a+0Ca+2uuJuePwEvMMbMAjDGbDXYfgkwv2Y/PwcOMMZsYozZFHgiLjlGY61dit+izVXADYFhvoJbmN7GH6y1vw+Mca3ndjcETsaaJMZ1ITsf/F2+5zg0Rg69Fw1+v41bBn9PCDn0/rjndseH7DyT3n8Efuex6WLgyyExcMcgvVuYUG/f4x2NMYm/F4XEII/evtd7jN6+MXLk81C9fw/4tJk34trhEKS3B4NJ/anzeS69fc5xDr0XZdA71Hs59L4FvwUKsfm8BL1922/f7dZCek9EDr1T349Nco5L0Tuk0BeUcf8tvf3JoXeO/loJen8Rv4HkX1lr/xIY42Oe231hcMwhpNZ7EfBVz81D+wi/xq9A3/XA10Ni4K4TH0/dHOHvHPdjqftrOfSexN8+Y+B1fAE/f//SWjvx4tYBpfj7a56b59A7NJ9/Ab+HiDF6l+DvSc5x6D3+2YBPm3kd4fnct7820/P5DaT39834LUiJ8ffn8fP3L6y1vkVcR+nTeGqo9ybpI5Wg98+ttRMvdhzQJ71D2+9J9A59BpdLb58+0lnW2okXOw7wPcfX9zif57j/9tV75QR/yyifI73evjk0Ru8Sxtd+jl/h82uBb4bEwL+/dlNgoW2YTO/QN2XL3358Dr97vjOttRMvfhvge//9uYh7gBL0Pgu/ghDXAN8KiYEbm0vt7xx6lzB+fhP+/g4dX8uh9yT9tYnz+eB3fPvEof6eJIdKb8+/RXpn0dvnHOfI55/NcE2Fjrf4tpmTXHujMXLo/VnPGGdYa/8VGGOS8ZbQ/nnq9juX3j7Xew69T5/hek9yjkNjnI5fofurgBNDYpAnnydtvyeM0We9c/j7M54xfmqt/XdgjBzjLan19vXUauATgTFy6H0Dfv5eYl3hgRB8+2ufiYghf/vhm89nut598vcK3JrBEHzz+Y+ttRcExlD77RdjCen1zuHvEvS+EviOx6bB/gZ+Avj0kS4HvhcYY6bpHTresgJ/f18fGGMJfoVb+u5v3/b7BBv2sjyQ3r5Mvb8HcyR8c2jo+PkVwHc9Nl0NfDIkBvAj4HyP7S4DTgqMkUPvEu6/fT1lI2L0yd+Le663bw4N1cK3j7SKQH9n0vs60uvt235/2oa9/BTS612Kvz+NX6H7U6y1FwfGyNE/T623b5sZ4+/F+Ou9JCQGefxdgt45/N03vYPulVSAcjp4OuvegJwI7AT8BzjXGPMX4BmD7z4FnGqMWauarrX2T7hFDb8Dfou7yfZZ5OzLpbQXmLosdGL7YJLwYTRP+lo82CaIwSTNq1s2W4Z78B3KItoT1BLCCzeCe4NH24DwNTa8MAyk13v1IEYTqzy2aYqRQ+8vAqe0bHMqbsFwKD56Xx2p9+E0X7ergcMGPp2Ygd6XtWyWS+8rQ2PgdDy1ZZtYva/CT+/QSeeQx9+p9V5Ker1voL2TF5vPc+jt4+/De+5v6e2Pbz4PKhSSqf1eilsk1EQOvRcTvjAN+pHPLXBpz/trOfT+HO6BTBM/AL4UESOX3k1aSm9HDn9fSfuAkfT21zvmfkx6e1CQ3tfTD72v6rnei4Hnt8RYNNgmCGvtH4BjWzb7B/Dm0Bjk0ft1QNuk1rfZ8EJAAM+j+ThWAc8LHdOxbuG3j7/b7tmaYtxCen9/Bjchsonv419Esg4fvd9qwwvDQB5/v4Dmh0o3DLYJwroXG7y/ZbO/A28JjYHzd1shzVh/vxa4sGWbt2TQ+5LQB63W2htJr7ePv28lzt8nAD9t2eYk4vzt236HLkQEOJTm63aYz4P6CIN87jO+ljqfx+r9adLr7ePvN1trfRbBjuMS0vv7CNL7u22SX6zeXvncusLAobyG9jfVl6L3ESH7H8Toi943ZtD7TZF6p26/F9Gu9/Xk0bvtmUoTnwLOaNnmu4QXXga4gvTtt2//fKbrncPfOfQ+lOaCvyuBQ0NjZOyvpdb7k7S/uf07wDciYvjofWXP/X0DcCRp/f0r4MMtm50HvD00Bn56n0h4YVbwux+L1fsQ2v19SOhk6kz+Phv4SMtmsXpfR/p8nkPv1P7OoffNpM/nnwDObNnmRMILs4K/3qELGaAcvdsWKeTQ+9tI7xx6/4L2RXbnAu8IjYG7ntrm8N04GG8I5ZVA26Kz19nwwjCQXu/rgKNo7q9dh+vTBZHJ37n0/k/LNrF6px5f89H72sE2QfRI70WRel9B++LT2Hx+CM0F+1fg+udBi9888/lKj22aYuTQ+1r6ofcVkXqn9ve1wAtbNpsGf+fQ+xU4PZp4rbW27RlaE6n19vHuSlyRrCCstWfSXoDmHOBdoTGQv73okd5/Bt4dGoP++Ps11tq2Z2hNpO6fXwO8qGWza2jP+U0xbqI9n/usOWqiFH+n1tvX3zH9tVL0Pob2uZ2vsoGFYQYaHkx7//xgG1gIaPB7bbm6C73bCpLk0ju0EBDka7+bvNuFv1PrfTpuPkITfwLeExoDp3fbmknp3S9/t81pbOLDwK9atvkqbg56KC+n/Ty8MjKfH0LzC1iW4/J5W02AcTFK0fs60vv7cvzG10KL5IKfv2Pvx3z0jrkfy6F3jnx+NO3X/SustW33bE2UoPdPcOt9mvgD8L7QGPjpfUMGf1/Rc39fCby0ZbOrgBeH7H8QYwn98Hes3kfTft0fY60NXktLGf720dtnDUoT8rcHOfRWAcopwFq7j7X2tJF/+7C19ghr7dHW2jtba+9hrf3o4LuPWGv3ttbuO/i8YPDwDWvtB6y1dx38d9zg3xZaa+9a2fex1to3B/ydt+IW6dYNtiwDFtq4SYpYa78F7I9bpD7KL4EHW2vPiYxxJc5UowNnFvfmiQtCB9UG+7e4yTnXsu6A7erBvy8MTRyDGKtwWtzIuklqJXC5dW9WCCaT3jcCC6kv1nMzTouYog459F4JPBE4jnUn8t4EfAg4IDKGj94xRXqw1v4FeBDwi5qv/4E7hphJ58NFOAtZ/3oHDbIM9r8SOIDxeh9HvN4rSa93Dn+XoLfFHUPKfJ5D73OABzPe3/vL30Xq/cuar4d6x0w6z6X3Fax/vS9OqPcKutF7Kc35/GIb99C7FL1X4u4xPsy65+om4IPAgR3EWJ9634r0Hu6/zd/X0I2/z0d6+8Ro0nsRZeh9WQa9F0rvXukdU7Qll95fBQ4E/lnz9VnAg6y1f42M8QrchIrR87ESt2j9wdYt1g/dfw69rwYeiCusMHptXg68yFr7xtD9D2L8CXgIcHbN138D9rPW+rwZtSlGLn9fQTp/rwD2wy3EH/XGElxBxCdHxhjq/V3q9X6htfZNofsfxMjh768ATwL+VfP10N8xRVOx1h6DmwA7OmlzJa4IyUM68PdFuIlAKf39AJr1fnPo/gcxhnrXPQwd6h3zEBRr7Zdx+bxO7zPpRu9c/v4o656rob+fYgMLsw5itN2PddF+/xGXz+smK/4NeLy11udNuE0xbsA9W6rL5zcxXfl8nN7HEq/3Vbh8/j3q/X2UtTamSG4uf38JeDLj/f1AG1ckF+ve0JxS76Z8vopBPg/d/yDGVbh8Xqf3ZcCRU6b3v2u+PpNy9G4rZtAWw0fvt0bGuIX0en+Rdr3r5kJMEiO13suBxwEfZ91ztRg3WfSgjtrvxaRrv3Pp/RTq9f4Z06F3Dn/n0Pt3wD7Ar2u+/iuuvxazqMSnv3a+jSu61gd/vxd4aof+HmWod8wiwVz+/jxwEOP9/QAbVxQZa+1LgFex7iTdFcDXgH1ixhE89X5apN4rSK/30N+/qfn6POBx1tofRMbI4e8XM17vrxKv93A8NWU+z6H3LbiXDozz90Ud+LuEfL4MeCxwPOsuMF+MW5w7Df7OqXfdQt+u9L6MPHp/gvF6Pz1yPLVN70unRO/rSaw3rqjKa1i30OwK4Cu4fB58HB7986uJz+dX4O6/T66JcSnwfGttTFGmXHp/Fnga7tnuKKfj+mt1Y2+TxLgMV6B1fd2PdaH35TTrfXgmvdtePNgWY5zelrL0jlnIPMzn55M2n/8a2Bf4bc3X5wKPsdaeEhnjety1Py6fX9BR+z1O7xsGMWL6Un3RO2ZRaC5/n4Dz92gh3Kq/6+7NJ4mRS+/rSaf3ZcD9cS9aH41xCXCYtTamSE8uvZP7G1eA+nWs219bDnwZ2DfmODLpXYq/c+o9WqhuqPdDp0DvS3H9tXH+fp619r2RMW4mvd6fBp7Oui+TtLiXWD7AWlvXd58kxjCfj/bJhvn8winI5zn8nUNvH3/HFF3LrffomEqX/r4/8EPq/X2otbbtRfBtMc4GHgb8vubrvwCPstb+ODLGdTTrfX4Hel/K9Oudy9/jno8tpRt/J9cb90LeN1Dffn8R1363vXBrLAO9L0R6+8Qowd+3Ao/EvSh9dG7lItzL354TOX5+CePz+X9wL+J4f+j+BzF+wfh8fg4un/8kMkaT3kuYDr1X0+Jva21Xz0Pr/LUCV1iqK3/XFZEe+js4Dw5i5NL7Ktaf3ld1oPcluPuxU6j398HW2g9GxihCb+Aw4I2sW6huGfAF4GGDYw3CU+8u2u9x/l6O83fbiybbYgzvx8bpfWEHen8ceBbrvuzdAj8G7m/jXmLRF3/H6v0fXPt9ak2Mi3H+Pi4yRg69r8P1XddnPr9oCvQuxd9J9TYRfeLbOOmkk/6w//773zt6R6IYjDEbAZsOPi6LNcKYGA8B7oZLGr+01p7X8f4NMB+Yg+sULrFxFWvrYmw4iDEL98ByiY2YfDAmxuxBjA1wiWRJzM3wmBg59N4U2Gjw8WYbuZCyZv9DvYeTdeck0Hsz3OLKbXAPLE+2kZOkamLMZk2DsTlp9L4rrhjlhsB51tqzutz/IIb09ouRQ++qv2+NucFriDEPmDv4OK1658rnqfW+G26Bdkp/59I7Z/u9OObmaEwM6e23/1x6b4Y7Tyn1ztlfUz4fH2Mz4AnA1rj2+/uxD91qYkhvv/3nar9z+Fv9tfb958rnw4nCWzLdeg8HIudNud7yd3uMHP7eFzhj8PEuNrKwTc3+5+AWPg6LKO5s3UKmLmPk8PcuwGOAjXEP4k61ES+XGBPj7rhJfeAKdNa9JCA2xjzWPDDZeEr9vTluvGVr3ML4kxP013ZlzYK9J5BG76T5fKDFPsBdcP74eSJ/Pw7YFVdU8xQb+dKjmhg5/L0r8GjS+jtpPq/onTKfG1zbOnwpTSp/PwHYCufv73f9rCFT+30P3ISEDYG/JMznG+Eesqfqr+XQe7j/Z5JG71z+Tp3P98Xl8xXAWTayUNmYGJsBs5nu+7Ecem8MbDL4mCqf59J76L/ZCc5Tjvux3VhTwDRVf21j1kzUn3Z/p9R7C1z/fCvcQoyTE7XfqcdTS9J7mM8XJ/J3jvG11Hr/F3C/QYy/WGvrXtoWG6PaX7vJxi+UHt2//O0fI0f7/VDcImmAO9nIwpM1MeYAj8fdf98E/NBGvvSoJsao3t9PcK5y3I/dE7gv7po6x7rFtZ0yMr62UQJ/V/VegtM7qghvTYwc/bU5wDymuP0exCghn2+J8/eWpPN3Lr2T5fNBDOntF0N6++1/Lm78/MTBP+2QKJ+n7p/vjlugvTFuUc5pCeZE5rgfexhwJ9z92M+stXUv6YuNUcL9mPT2j1HC+Noc1hTcTtU/vxeuf26AP1tr617iFRsjV/s97f7O3X4vta54XZf7H/p7WFBj7yn2d2q9F+Dy+Ua4ojc/SpzPN+1a70GM1Pffc3H337vgCgP90EYW4a2Jkfv+exkuF6a8/55WvTfC6f2twT9tn0hv+bt9/wZ4OLA3rr92ho0sFD4mxrD9XoVr96a9v7YZ6fydrP0exChhvKUUf98buA+uf/4n64rHd4r09o6Rq/1O7e/5uPUGqfQebb+3s5FF3Wpi5NI7Rz5P3V+bz5qCmin6azna761YU9j0abjn3133dfYAHoHLhf8Gfpw4n//RWlv3kr7YGKn9XVI+v83ftuP1DIMYufwtvdtj7MmaF6Q8Ftdf6zpG7nw+18YXnhzd/7D93nkQ5wcltN/T6G9jzAa4NukOuDHh023kix9qYpTk70fgcuG/cO131zE2wT1/gzz98yUJ/F2K3jn8vQlujR3kab870VsFKIUQooIxxgJYa836/ltCKeEYclHCuSrhGHJRwrkq4RiEP9JbiHrkjZlFCXqXcAylkEOLUmLkoITjKOEYoIzrVlrMvBip0XnqDzpP/ui69aOEY8iF2m8/SjmO1Og89YsS9FC7508px5EanSc/dJ76hfToD9LCj1LOUynHUQKlaFHKcQg/pPfMQuNrfpRyHKkp5TzpOPpDCcdQCtLCnxLGhUvRuwQthD+l6C1/+1HKcZSAtPBH/p5ZSO+ZRQl6K0Z/KOEYSkL+7k+MHEjvmRUjNaWcpxK0gDL8LfwpQe9SYnTNBuv7DxBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEGlRAUohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCiMJRAUohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCiMJRAUohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCiMJRAUohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCiMJRAUohhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCiMKZFbsDY8z8E088cQNjzPwu/iAhhOgDJeS0Eo4hFyWcqxKOIRclnKsSjkH4I72FqEfemFmUoHcJx1AKObQoJUYOSjiOEo4ByrhupcXMi5Eanaf+oPPkj65bP0o4hlyo/fajlONIjc5TvyhBD7V7/pRyHKnRefJD56lfSI/+IC38KOU8lXIcJVCKFqUch/BDes8sNL7mRynHkZpSzpOOoz+UcAylIC38KWFcuBS9S9BC+FOK3vK3H6UcRwlIC3/k75mF9J5ZlKC3YvSHEo6hJOTv/sTIgfSeWTFSU8p5KkELKMPfwp8S9C4lxiRYa5eM+26DnH+IEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYTIjwpQCiGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIUjgpQilTcH3gF8GpgP2DDBDE2A7YFtgE2SbB/A2wxiLE1MDdBjFnAVoMYWw0+d80c3N+/LbAl7ri6ZhOcDtvidElBar03BZ5V+XzHBDFy6F39u58NzEsQowS95+HOz5AS9H4W7jruGunth/T2J0f7vSVr2u85CWKM6p2in7N35WfpPZ5S9J7Lmv7aFqi/No7RfH6HBDGktz/S248c+XxTpl/vHPl8h8rPzwe2SxCjqvczSaP3Ays/P57pHG8Z9fftE8TI4e87VX5OpXfV3/MT7H8W8ITK5/sliDGf9HrvWPk5lb9ztN9Vfz+O7sfuZwH7Vz5Pq97rw98pcmFqvSF9Pt+A9O33qL+3TRAjh79z5POqv++bIEaJ/n4G6Z41pNQb0vt7PvCcyufU7ffhTK+/H1T5+bEon4+jFL1L9PftEsTIkc/vXPk5VT5/cOXnafV3KXrPZY33Uvm7BL1z5POdKj8fjjuWrsmhdwn5fDPkb19y3I8dUPn8/xLEyOHvHHrfpfLz04GNE8RIrfds4ImVz9J7PDn8/ZDKz48hTfu9OWvyeYprdjPguZXPeyWIUYremw72n7L9lt5+SG8/cui9c+Xnw3DtRtfk0Hufys+PSRQjtd452m/p7U8J/s6Rz+9a+Tll/3za83kOf+9S+fl5TK+/U+s9G3hS5fP/JIixOWv7e88EMXLovRHp9d638vOjE8TIofeov2cniJEjn0tvPzYH/rfyOYe/t0oQowS9IX/7Pa3+vnvl56fi9O+aEvpr8rc/8yhP7z0SxNi18rP0bkZ6+5Ejnz+08vOj6P6amgMcWPl87473D679Hratqdrvqt6HIn83kdrfWwAHVz4vSBAjh973qPycyt8Pq/z8SKazf16i3geRpu5Qar3nAE+ufP7vjvcPefL5bpWfpXczJfg7h97V9nvzBPuHtdvvFPWfIL3eW5JX70OYXn8/vPJzDn930gcx1tq4HRhjjz32WI455pgu/p5cpCrIIOA+wEdYexEfwBXAm4CvdxBjC9xC8tEOxzLgcuCWDmIMjTY6MfFm4DJgReT+DW5y/uasnSwscCPuOOLM6Qazd2HdAgirgWuBayL3D67h2Zl1k+oK4GpgUQcxcuj9WuAo1r3Z/jlwBHBJ5P5z6L0LcDxrT64FWAJ8HHhH5P6hHL1fBxzJdOu9K07XOr0/Brwzcv/gFsLsxPrT+zJgaQcxxul9Fk7vSyP3n0vv41l78RtI7zqa2u9LgZWR+1/fen8UeFfk/qFZ76twxxKL9PZjNq5tHe2vrQKuo5v+Wgl6G1w+P4J18/mZg3+/rIMY0tuPXHofybqDaWcyPXrvhsvnDxr598W4fP7uyP1DGXoz2P/WpMvn84AP4h56V4uErwC+CRxN/HHk0Pt+wIdYu8gluOv1DcC3OoiRw9+vx/l41N8/w/m+C3/vjBv7S+Xv3XH3Y3V6fwR4T+T+wfl7Z9ZdvNClv5+JG6vbYeTf/wa8GPh95P7b9D4Cp0cM84DjcJOQR/39DeDlxF+3s3FjLqPFIrpsv++P8/foyxIuw/n72x3EeCbwZmD7kX//G/Ai4A+R+ze4v/UFpNM7l7+PZ+3ikOD8/WHgvZH7hzx6b4HTevTlGNPWfo/z99eBY5gOf+fI58/C5fNRf/8V5+8/Ru7fAG/EFQAd9fcZuPZ7Gvy9AOfvB4z8+404f78vcv+QR+8tcf5L5e82vY/APe+LYT7O30+k3t8vB26NjNHk72sH/8XyAFw+H31ZwmW4e9rvdBAjtd6QPp+P03s5a/pr06B3Kf5+E87f1bEpy5p8HuvvDXDjFHX5fNFg/7H5fA9cPr//yL/fiPPksZH7B9cXPI51/X0pzt/f7SCG9PYjh79L0BvG5/ObBjG6yOcfwuXz6iLK5azpn09DPt8Ud92ur3x+KfHnaQOcvw9nXX+fjvP3lR3EKMHfTXpfibvXj+U5uP7z6MtQzgNeCPy5gxjb4ybTpvJ3Dr33xI2njrbfi3C55f2R+4c8ej8XN3Yzqve5OL3P6SDG+tY79v4e8vj7wbjnPqMvS7gENwfwpA5ijMvnt+K06CKfvxlXQKwunx+Ba5tiY6TWew7uXmna8/n61PunuPZbejtK0vtw1j5XXeq9Oa4N3Z91++dfBV6B63/GkEPvhwAfoD6fvwb4fgcxUusNze33pbhzFsPmuDHsJ7Cu3l8BXon0HjJc1JrS32/B5fNRf/8E5++rO4ixM+4+PFU+vx2ufz76MrNFOI2O6yDGuHy+HJcDu8jnqfWG9efvZazx9/LIGE3+vgb3TDSWHHofghurG3251Tm4+7FzI/ff5O8f49YZxfp7c9ycov1Iq/curLu4uEu998Xdx4++DOU/uHx+cgcxDsHNNxp9+U1XekN6fzfl8xuIH5+H9a/3q4EfdBDjUJy/U+m9IfDWQZw6fx9J/NyQLXD5vM7fXwZexfT7uyu9S2i/h/4eXZvepb9vj+uvjb785gZcf+1DHcSYh3uJZF37fSVu7VIsqfVu8vePcO13F/4ett/Va2ra/L2+9b6U+PvWNr2PJP7edQvcnP/HI73byKH323B6V89Vl3pvifN3nd5fwrV9sXrfHje/5T4j/34Drs39cOT+wRWuOpZ1X45xMe6aPaWDGIfh+vqj/bU/43LtXzuIsQNOk9H2ewmuzYhtv8fpfStr9I6tGSJ/+7Eh8Hbcfd+ov0/DXVOp/N2l3nfA9ddG/X09zt8fidw/uMJV7yOtv9en3qfi7vmmRe/jWfdlCdfjcvBHI/cPTu9jWbeYepd6H47L56MvQ/kTznt/6yBG6ny+FU7vx5FO7zvi/J1S70fg/D2q90LcMUyDv2fh/H0wa/t7NWvyeWzb16T3F3HXc6zec3H3+HXt99U43WNZn+33Upz3utD7Hbji8Cn1/ijrvjy+S72b/P0+XM2eWB6JW3dY5+9X4dq/WKL0ttaOveZUgFJ0yX1wD4yaquG+GPh8RIwtcQ8ox2Fx5ospUrcjzZVwVwAXEjepcw/WfZBb5Rbgooj9z8Ilpaaq4DcQNxFhY9yizaa3h18+iBNKDr0/iBuMGsdluIGYmHOVWu8dcZNPd2nY5rPASyNi9EXvi4hbhNOm96U4vWMe+vRB788AL4uI0Qe9V+P8HaP3DO4ayQAAIABJREFUcbjBiXFIb8cmOL2bqqdPg94ltN874fTeuWGbE3CFskIpRe+dBnHGMQ16+/TXricuR5Wi94dZ+811o1yCy+cxiyr3pPk+Rno7tsLl23FIb8fOuHze5I1P4RZmh1KK3qnz+VzcOMXoxPkqv8QtzgkdhMyh9/1wCy6a3qhzFO6BSSg59P4IbpHuOP6D83fooiuDa79T+/sMms/VJ3ELu0Lx8fdlxBWJPxR3fzyOW3APYWOKEn4Utwh/HLF6b4Tz9+hEyyq/AA4g3N852u/74xZEj/O3xU2W+kpEjBx6fwx4dsP3Ofx9My5PhbILLp83+fsTuIUfoTwA+B5p9e5D+70c136HThLYCDdxfXRiTpWf44rfpPT3dcT1OXPk88NoLtRxC+6he0wRyjZ/X4zzd+iiq1z+PoN1iy5XOR73UDeUHHrn8HdqvTcCfsi6D+6rxPp7Nu6aSulvn3z+AuBrETFy6L0zbgL9OLrI5216n4XTO/SebzYun49OoqgSq/emuCLV69vfFxG3COfjuKLF41iI83foIpwc+XxXXD4fLbpc5WO4iUahPAhXcHB0stcQiyvqGPPSTentRw5/++h9OK5gbig59E6dzzfGTWxteuv9mbji8crn6fU+HveSiXFchPN36CT9vvj7WuIKM/nofSlxRUePoPlFNDfhJsXGFCVM7e8ceu+OG28ZLdpY5SO4QgOh9EXvxwB/iYiRQ+89aX7r/TT4+yHAiTS3388j7qVdOfL5J4GnN3x/IS6fh07SL0XvHP7OofengKc1fJ9D75tw4zqhSG9/Pg08teH7WL03wS1MuWfDNqcDTya8zcih9z64fD5uDM/inm/FvLRra5rHhLvQexdcQbFxxLbfPnr/FHhKRIwceu+L07JJ70Nw10QoOfQ+ATio4fsLcP4OXZCYI58vwOWI0SJ+VY7DFdoPZR7uJa4p83kJ/t4U5+//athmGvydQ+8X4xYzj2MJ8GjcyyBC+QzuXI/jfFwhgFB/++j9E1yO6bPeD8Xda43L56txi85jXurTpvdinN4xRW5S+7sv/fNriCucmkPvl+CKS42jC70/i+sbj+PfuMIPMf4+DbhHwzY/xt0jpPR3rN4Pw+k9LsZq3Lzu70XEaGu/V+Ha75iiCD7+vgB3PCHk8PeeuP7aaFGYKu/HFU4Oxaf9voS4ItI59P4ccGDD97H+nocrdHe3hm1+hPN36DU1BzdGn9Lfpej9edyzyHH8G9dfC1034aP3abgxPuktvX3YC3dP15TP30dzX6iNR+DmMjS1388l7qVdL6O5zbkReBTw94gYu9Jc8yW2/c7l7z1Zuxj5KNPg721onpPVhb+/gJsrOI5Yf8/H6X3Xhm1OxT2jC9X7djh/N61jfy/N97ZtPBI3N63J388h7qU+fdD7X7hcNu16vwdXmC0UH72fTdxLP16Oe9ntOG4c/B3/iIiROp/76H0K8IyIGLfHjdGl1PtRuLnlKfXO4e8v4dbijuOfOH+HzsObjxtPuUvDNqfg/B1aMM+n/b6auBcbzMd5Y5rbb4MrADntevv4+93AOwP3D24c82uMv6ZW4eZ1/zAiRrTeTQUomwpLifXPIuBs4HfAr3CVvJuSy/rmgzRPSgVnuqbB3CY2oHlwAtz5aSr60MbGNCcNcIP3TaZsYyuaixkx+L7t72hie5oX14FbJNymVxM7055DdvDYZhw59P4fmosRgjvO10fEyKH362kuTgduck7TIr82+qJ3U1G2Nnz03oX+6/0G2vU+FLh3RIw+6D18M1wo96G5+CRI7yE70d6/6Lvevu1308KWNnLp3XYenkfzIr82StG7qdgJTIfePv21rYjrr/VF75j+2n1pLkYIbhAmNp+3nWfp7X6v7T4ol94xCxFz6P1G2s/D4TQvEmjDV+/QMYQcem9C+nx+CM3FJwEeSHNRhjZy6P0hmotPgnuIMS9w/7n83VR8EtxD8Rh/+4xzxPr7TTQvTANXjKRp0ngbPv7e0WObcWwJvKtlm01wb8sO5X40F58Ep/drI2IcQnPxSXDFRJqKMrSxA37td9Ok0jba/G1wkxA2Ddy/r95NBezauD/NxcogXm8ff29Ke7vShI+/X0DzpPE2Uuudo3/u037PIa79PpTm4pMAD8ZNEAjFx99bE+fvnUnbX9uK9gkMsf5+AO3+3p24Ql8+/fNYf7+Zdm8cAdw9IkZqvX393ZbHmsih92G0P6d4MM1FONrwuf+O9feHac/n76N9bGkcG5Je701pLm4D8fncR++HEK930+R8iNc79f23r94x7feDaL/vXUD/8/lbaL93PYrmSYZtHMf4YkaQz9859H51RIwcevv6u228pAkfvY8lfMw2h9458vnhtD+X2ofmokpt5NC7hHz+YNrHOfYgj7/brrsmfPTehvR6x4yvbUP7grB5uBwSSg5/59D7rbT/jS8C7hwRQ3r74TOOGav3DqT394dob7/fT7/b731ovw/ak7gXZfjcB02D3qn9nUPvfWnvJ+1J3IuPfPSeh/TOMd6yL83FJyFe7xfQ/tz5YTQX0WojVz5vGsMb3o+FjulsiN/z7xi959G+HmIOzYX+2vDR++H0W2+Du/9u0/v9ETFy6P0wmotPgisu0fd8/nbar8mXAneIiOGTq2O0mEUZ/j6C9nklD6e5aFobvv5u6l+3kVrv7XHP+ZqYjxuzDcUnj96OuBcP++j9CJqLaLWRWm9De/u9AW5NYWg+99F7M+L0zuFv33weuq4SnK/a9N6Wfuu9A83FLyBe70fQnkdvjyvEEcqRtM8jeiTNRbTayKV3U4yh3qExfNrvDYm7/87h721I7+930FysDOBo3LUbiu/9dyi+esfEeCTt7ebtcecqlKNoLlYGrnhMjL992u8Yf0MZevuc5xx6P5rmIlptSG8/cuj9Qvz0PiAihk8+PwY3lhDCBrjxFp/2u20e3Th2+v/t3Xm0ZVddJ/DvrQSTkISQAGFGsZnFCTAo8xKMQju1gDII6nJoezl0/0G33atVgoqgTXc79mDbgtgyhMkkAiEgCkIrooIGEoYAgYQ5ZqpMVanU7T/2e6te37xXd5993jl16tTns1ZWVeqdd/e993t/++yzzzn7Zv0XVJyWcs1zq1Nz+MXKkv777zHyvkcOv3hVcnTU97rzkH3r+6lZ348+MGXh01Y/nfXXjT01h19Ea50XZ/39SP825VxAiz2pH5+31vdU8n5Q+uX9Mxk+71/N+rz/Xcq1Oi3GyLtmHY3Tcvgv5FxnjP68Ju+nJfnuHm3U1HefvI9Lfd7rxo07GaO+n5b1dfXg9Kvvn83hFyPcfB598r5n1u+/z0x77W22MeT+u2bds93oz2vy/jc92hgj75dkfX3/XMq11S2OSxmfH+4ztblNa30PnrcFKKft5pQbvs5KKYazs/2NH+s6tjGclfUHYUm5GaP1xu87p+4ze0Lab/qoXYTgTpXPpU8brQsi7Mn6QVrfNk5K3YmiPWm/0GGMvNctRrjp6Wm/QWbovO+c+osLfqyxjTvm2Mr7GWl/HWPkXXtxgbzryHtaebfeBFD7Hp9W+Vy2s27iv+tzWXV65F1rDnnvSf3FBa1tTCnvE9Oed5f+vPWCDXnXmVLez8x08z4j9ReTjNGftx7HnJ7h8x6jP6/9TP144+OPkfdjkzykYrtT0r5wyxh5177+Z6Z+TmPVGPVde/FQ62dqjPr+wdTdrPUNaV/ovjbv70852dhi6Po+LsPPrz0u5UTLOqemfSGP2ry/Me0L3Y+R9xj1XXvxUOtn6vGpu1mrT96np+7m2zH237Vjx+3Mob5PTt3FYselvT9/Xurq+xEb/7Wore8fSHt9Dz2/dpcMX99j5F1b3yel/absLnm3Lny+7guDNk25vp+Qups57pT1Cw7s5M4ZPu/az2Ltc9nOHPLuUt995lvmUN9D9+d3Tf3FQ62fqSelrr5Py/oFB3YypbyflfaFz4fOe4z6flKGz3uM/XeX+bXW/vxHKrdrnfuaS38+pfHaGPVde5y+ai55P7+yjbPSvtD9GPU9dH9+ZpLvrNy2df99SqaT96NTd+3kduaQ93GpnxtobePJqbtZq8u1dKu69Oeti2zU9ufPTvs1U7XHfK1ZHJ/h8x6jvqeU93Mi79q8W68TqM279lzddmr3Z89J2xz9IvXzLa3j8zHyfkrqbs47I8P3533y7nK+pGX/Le96Y+TdpT9vPQc3dH9+z5Qb9GpMeXw+h/rek+HnW6a2/27N+4dTdzPmY5I8tLGN2vf4uWmb05lL3menfFFdzeO3LsT1w6nLu/Zauu0MXd9d2ugzPq89l3Os51177ckY9d26bx0j729P+WLhde6S9ryntP+ufS47/e5uPpdV905ZAGudReo/36tOTd3iGcdn+PFa7Vz+dmpf/w+m7TO1J6WfqjHl+j7W8n5e5F2b99Dza33yrh0Tt+Z9XIbP+z4Zvj//jiT3rdjurmlfOPVHUrd2Se21dNvpsv9uMUbed8jwx2Nzqe/az/vzM936vm/K+HmdPvX91JRx4Tp3S/vCqWdkOnk/r7GNMfK+X8rx8Tpj5H1m2hfSrO3Pn5jh+/PWMeec8q754oU+eY9R313Ga631/UOV2/bZfw89Pr9Txtl/1xgj7+enbbHOMfL+ypTzlev0qe+npa6+7572hTQHz9sClEePq1JWbv2Jjf9/bpJXJnltkvNSPgQXJPnLJH+dQyeI75fk75L8TpL3Jfn9lIvpL0rygRy6sfiRSd6e5D0bf3YdIHxzh20f3fGxN3W5wKr15H1tG3sa29iT+gOfE9JWoyd1+L3Wi9a6/N4YbbTmXfu5PSltF4WPkffXpf71t9Zel/dX3nVa8/761L/+Lv3yVmPk3eWGF3nXmXJ9d8l76D6kz/67drDdJ+/aixfkXWesvFsuQjipw+9Nebw2Rt61/fkd03ZTl7zrTS3vdd9atJ0x8v6G1I8RWsdrUzsea22jto/ek7YL/M5I3UJfSfk8tbyOb8zwec9lvqX2dZyctvo+LsPXd5e8x8hi6L42aX8dQ+d9RurnLr82bZ/bLvvv1kUdppTFGG2MUd8npq2+H5Hh63uMLMaYb+lyPNay/75rkgdUbvt1jW2MUd9d3t+h963J8J/bU7L+Wwe307W+WzyyQxtTHktN6XjslLT153dL/be2f33aLiIc4/h7av35GPNrLfXXJe9vSNuFDneM+ZZatZ/bU3Ns9+dzqe+h8z4+w+fdpb6nfDw2pfm149KWx91Tt9BXUo6rWr6deYy85zKfWvu5vVOShzU8/lzqe0pZJMP3Ia313SXv1uOYR6X+4uIxzn9P+fh7DnlPbf/dek6my3Mb+nWclrZFdMbIe4zj7zHqW971v3esHX9PNe97pW5hmCT5prRff36sza8NfR7guLTNdXbNu+X82Bjza3PJu/Z13Dlti2SN0Z8/MvXH7VOeC5nafEtLfd87dQuFJOWLDYau72P9+Lu2jdPTVt9d824xl+OxqR1/t9T3HVI/F9KnH5xS3lM+J1PbRpfrTLe6z8Z/NeZS31M+Pzal+u4zn1qzMEwyn+tbhv7cttb3/VK3EFAyTn1P+V7dqeXdsmjSGHmfnGnlPYf5tT551ywMk7T3tV3m5eYwluq67VZDH3+Pkfdc5kKmdD3TGam/jnyrr0z5ApYax3p9T2lO5y5py/urktyjcttjPe/aNhbpN7atcXza+vOvyvB5n5Vp5T3le45rn9tdU38d+Vb3z/B5d3ntU76faEr77ynnPbX6nuz8WsvFvxw5l6d8sO+28f9nJfmWJNekHEA9J8nelMH1O5O8ZWO7r05ZIfjSJO9K8syUFZifluQFKd+W/LGUbz24LWWByhemfMtLrS4XqtROhq7qcvK09duIuhijjakaI4sx2ujyWWz93A5tjNcg7+no8rxaF5meS187xns1tLnU9xyM8drlXW/o59b18RdJlgO3cSwbujbkXW8OfeEYec9hDJJMb5zX8ny6vr8tn6kubbTmPZdjgKkdj021vufQ147RRtffGWOf0WIOWYzVxtDGqO+pvU9THaOOsf+ewzin6++NUd8ttTHG+HyMc1ddTLX2kuHzntr+ey7j2lZDv1dj5N3FlGtvDHPoz+cyrp3accYYc1MteY9hLnlPsT8/0NDO0KaWRau5jEOGJovpmMu1hPKuM7Xam/I5uKmdD20xtbmvKR/zTe14rMXUsphy3kPv+7r8ziLl+Rzs2MbU9q1TPuc6peOxRYY/HpvyWGqMvIeu76mNpaacxRzGIS39+W0N7QxtDrXXtY2hz4+17r/H4JqK6ZjLPmMObXSt76lef+6ait035bFzF1POYkr1vSfD1/fUxtljm1reQ5tyFmOY0vzalMe1Y+y/u451Wkzp+PtYr++pzQsfy/U9tTm8qeY9tXv5ppz31PrCFmPkPbV965TvDx36vZratUatpnbM12pK/flc+trJXls21Z0AO9vaebwzZfHJzX9/YZK/SnJByqr8Z2787PIkl6RMZG0uQpmNf9v8dsw7JfmjJO9L8tJ0/3bVD3XY9uKOj73p5g7b7mtso/b3lkluaXj8g0n2V257a9pOHu5L/aRl6/vU5bW3vE9Jt7xb26j93N6WUjtdHUzJsUZr3pem/qKhLnW61Rh5j9HGHPK+JPUXkXy44fGTbu9vlzptbWOMvD/S8PhTy7u1vrvsB8bIe4z9d0sbt0XetcbIu7aNMfLen7a8b0n9eK21H+zy2sfYf7fmXXvscCBt/bm8641xPDaHvC/p8Hut47W55N2lP295Hf+U5HOV216e8oUeXXXJu3X/3eX3WtsY4/i7tr5vzXTr+8Mdfm/Kx99d5uVa5/C65P3Rhse/KsnnK7f9VJIbGtqYUl103XaqbbTm3bW+Wxa3GaO+x8hijD5k6OPvq5J8oXLbTyW5saGNqc11th5/dxlLjlHfH2t4/AMZvr67jNda36e5zLfUvv79aevPv5Tki5XbfjLJTQ1tjFF7XT4nY4wJpzq/1iXvT6QtjzHyPtbm1/anvT+vPVfZZ7xW+3tjjJ3HOP4+lvOe2rHxlPMeenz+xZQ+vcbHG9uY2vh8yte31H5u92Wc+m4xl7zHuEZu6PoeI+8x9t9jjAnlXWdK/WAyjzn6fSn7165uzbTyHuN4bMrXr3XJ+7KGxx8j76kdf08579q+55a05f25lHPgNT6atsUI5zK/NsZ+aej5tS55fyTzyHuM+0umWt9d+vPWOYQxzitN7fh76H3GwbTl8dkkV1due2naFp88Fo+/h74u6+aU8xlddc279frUIbbdaoz99xht1NZsa33fmvqabe3Pp3b8PeVzMlOq7817erua0jgnmfYcXpf6bjk+HqO+x6i9qZ3/Hvpze1PK9SddXZFD9+yv02UefKupza/Ju86U79XtkveU1xSofY+nnPcY45wpXTuaDF8brfvvLnmPcV5pyvU9peOMG1OuD+/qM0murdx2ysetU1uvZ+h54da8r0hyXeW2x3reU5tvae3Ph857SvOQfdqY0jU0N6S9Px867ymdR5x6G7V9yA0p92d31SXvKfeDU5tfa8rbApRHl69Kmaz88sb/b7356geS3DXJ45M8NuUi8BM3frZ1R7z1RMjBJMdv/P3nk7w7yaOTfH+SEzo+tz9L3Q7gQJI/7PjYm65N3YTc/rQtHJHUT/7fkPZvCq09YK19LqsOpP71t7ZxQ+oGeMvUv95VXfJuWUggSf535XZvTf3CBqtq3+PWLL6Q8vxq1L7eVWPkfU2mk/dbUn+j+6op5f37jW10ybt2QmbVlPJ+c+aRd2t978088q59j/dmuvvvzye5sHLbMfKecn8+pbxb36cDqX/9rW3MJe8/qNzuzalf2GDVlPJu7UP2pm7hlrnk/aepv/F51dB5fzb1/XnreG0uedc+t71pu5h6meQVldvWfvZWdcm7df99YZIrK7bbn/LFIi265N2y0FfSrb6/vHar7Q09XvtskrdVbttnvDZ0fb8idTX1iSR/3thGbd4XpC3vLvX98obHT8aZX7sw5XO1Tp/6fkXq8r4syV80tjF03snw9X1lkosqt22t77embmHkPnlfneH789r3+Pq07b8PZvj9962Z1vi8db7l5al7jz+eQ19K1lXt5/28lMVDWwxd359J8vbKbVvr+/oMn3ft6+9T37Wv//zU3/i81cHUnx8co75bx1K1/fm+9Buf15h6fz6HvLvUd5/j7xpj1Pd5aavvZPj+/NNJ3lG5bWt/Xnu+6JYk/6exjSnl/Sdpz2PovMcYr3XJ+48b25hDf35bkldWbjvl8fnU+vOWhbaTadV36/5iLnm/PHULQnw0yXsb26h9/ddVPpftDJ33p1I/v9jneKzmfPDB9Dv+rnmPP5Lk/za2MYe8b039/qy1vi9I3fnBm5O8qrGN2ue2L8P3529Mv+sua4yRd+truC7D1/eU8n5Dppt3l/HqsZ537fn/1vo+kPr5ptZrEbrkPXR/flOm3Z/XZti6/+6Sd+tYaoy8z0/d+cGbkry6sY2p9eet/VTt77VmcVnqzxe1HuOP0Z/X1t6+tN9AW9vG9Wmr71szj/oeI++Xp+7894eSvK+xjdr3+PWpvxF2q7nkXXs++Ma09+e1eV+c5G8a2+gynzr08XdrFlPL+zWNbfxBhs+7S31f3/D4+1N/vqhPfdeOX1rz/pPUHS/2ybv2ud2S9v33lObXWrP4eJL3VG7bOl67NnXni8Y4/u6T9xj1XXt+cIz67jNndCzl/bq0rSkwRt5djkeP9bxr57Ra896X+vmm1vm1j6b+fFFrG29MXR43JHltYxu1n/cPJvm7xjaGnl/rkvcY9d06RuhS3619yBj1XTt+GaO+W/P+SJK/qtx26Prem+TcxjZqPye3pH3Bstq8z03bPYm3ZPi8L03y15XbTjnv2tf/90k+0NhGbR9Su3bQqjHyviTD5117Pvj6tOfdpT9vre/a9/jctF0TeUvq5xdbs+hy/qDP/HnN/vu2DD8+vznD9+evzfB5t9b3h1N//qC1jdenLsfrU8Y6LQbP2wKUR4+7JPmNJL+3w8/vlHKC/kDKIpT36/j4p+XQDVPPbXh+yyT/MesP4n4z7Qt9HUjdSYzWhWeSMkhdN1A92LONq7N+MaD9ad8ZJeXinHU7pJrXejg178FVaV/4aYy835H1N5fvTfIrPdoYI+9fyfoJ8YtSf2PWdo6VvK/P9PP+5dTl/Wc92phD3m/P+pvL55L32yLvmn3abWlfrCwpJ9bHyHvdBOnbkryzRxu1ebfciJjIu4svZv3YeYzx2pcz7bxrxjDXJ3lxjzamkvfetN9ovNnGOmPk3Xq8l9TlfV2mn/cvZ33tvjXtC30l4+Rdc1FZn7z3Zvj+/H9m/bdbfiztF2Mlw+d9MOVLQ9adZPkvaV/YbYy8a8asY9V364n1pC7vt6R9oa9k+Pr+bJLfXrPNwZR5vlYXZv2Y9dokv9qjjZr6/mj61ffQ++/N93ldfb8s7TeG1ub9842Pn5Q+bui8x6jvX0pdfb+78fHHyHus/fe6z3zf/ff/yPovu5p6fW+2sU6f/vzKJL+zZpuDSX6h8fGT0p+vWyzk2iQv6dFGzfzavvSv73VZvjnJX/ZoYw7HY2Pk/d+y/tstP5L2BaST4ev7ttTtN/9T+i28NnTeY/TntXm/okcbU+nPv1TxPHZSk/cy/fKuOUa5JslLe7RRM17bl37zLTX9+QVpX+hrKvUt76Kmvq9P+8IRtXn/evrlvW583jfv6zN8f/67KYvAHs4laf8i2mT4vJO696Bvf16Td+sXnyZlzFpT37/Wo43a+u4zPp9D3pcn+e9rtrkt/ebXauu7dU44GSfvF2V9luen/kad7dQej8l7+Ly/kGHr+0Dq5jl+Le2vY4z9959m/RzE1SnjkFZX5ejPOxm+vsfI+4KsXzxC3sUYx99zyPu3k1yxZpsPpf2LUZL68Vrrjca3JvnFiu1emraFvjbbGDrv67L+M9/3eEze9W0Mnfd5WT/ntBv9+brF9Pv25+dkfZZvTPtCX8nw/XnNNV1j1PeB9K/vdV9Ge3Havwgnqavv69Je35ttrNMn78uS/K812xxIv+sdzsv6xWH+KWVeuFVt3q1fhJOULNZdi9An7/1JXlix3UvSttBXMk7eY9R3TX9+S/rPr80h73WLBPTN+0+yfs6pb33/VtZ/+fA/pl99fyHD510zXvvVtC0EtNnGVPbffefXhq7vF2b9IgGvS/tCX8k8xmtvyvrFYa5Kv/r+zaz/ctJ/SPsXJyTD13ci71q1ebcutJ1MJ++a44SdHEt5fzD98v7FrO/PX7vRTot9qdt/vzjt9yTW3GNza/pdn3pt1n/m++6/x8i7tr5bF35K6uu7ZWG3ZJz6fkPWL/705ZTr6Fv9Rtbn/YG0L6yelNrbt2ab16TsN1rcknKOfZ0+9V0zx3i05L3uGpwx8n51ynFfi9q8fyXt18DWXKM7Vn9ec130Tmrzbl14ORkn73MqtuuT9xj1/fqsP4fwpST/uUcb/zXr8/779Mu7Zv99bdr338vUX7/Wuv+uzbvP+g5zyfsXsv6aildl+Pr+5bRfUzF43sedc845rb+bJHnRi150ztlnn52LLlq3ptek9Lk5aky/kOS7kvxkkmelXJyyWXhfl+SeObSY2ieT/GySH01ytyQn5VABfX8OTcx/Z8pE/UdTFp3c/NkVKYO0p2/8/eEpNwZ18bGNx35SkhNXfrY/ZTGEX+r4mKs2d5Z3TLJY+dltKQcGrScwNl2f5Cty+9eQlAHUZ9LvQG+50cbJSe6wzc9vTrmAv/VGxGz87o0bbRy3zc+vy/qTmOvsS8n15Nx+MdtlyiCwz4m3ZJy8z09y/yQP3aaNK5L8QNoP9JJx8r4q5UaDJ6fU9Wr7b0zyY2lfPC6ZV95fncPn3TowSOTdxY0pGQyZ9wXZOe9Y+TC+AAAQzklEQVTPpOR9cY/Hn0Leb8jweX85/SZqk3HyPtz+e39KjU99//3llMVMvjXyXmcOeW+O107JkRuvHS15n5/kASn9+arPpBzTTL0/HyvvW3Ns5P2hHo8/Zn/+5JQvi1ht//VJfjz9+/M55H19khM2/lu1PyXzdZP3h3NLypjwMSlzKKvel+SZaV/oK1mf9+uS/ET65X1pyk2uT8zt36v9KTcx9J3rGqu+H5jkIdv87NMp9f3hHo+/Wd+nJDl+m5/vRn1/KeXG0G/Nznn/eM82xqjvP08ZS31Tbr9fujbJv0rJq4/N/nyovG/O4ev7r1Pqu8+CJzX773U3fa1zacr7sV1970up7z4LwyQl7xOSPCrb5/2TKe9lH4fL+/IcXfW9U39+bkp/3qeNS1P2bU/I9nn/WvotFJKM059fl2H33zen3Ig/ZH0fyPD1PVZ/fmJ2ru9/mX71vczh99+Xp9T3JT3bGKO+35Od6/u1Ke/V1PffN2489knZvr4/m/YbPpJDeT8oyYO3+fnlKbXXJ++a+n5G+t2QcSDlxPxO9X1t+h9/X5LS1+20/35p+t1onAyfdzJef/7YJPfY5udHS96b9X1Kbp/FZn33uTAuOfL1/amU+r60Zxt7U/rB7frzm1L689YbGZJyUcx7U/rzU7dp/zXp359/OGUMsNN47SXpdyNDMl7eD87RnfcY9V2Td58LnZNysfcc+vM3Z+f+/K9SPlOt38SdjJP3LRvtnJzt+/MvpX9/PnTem/X9kJQ+fdUnU7L4SM825lDfY+T9zpRj70fl9scA16TMEb61ZxvXpRzzDVXfY+T9hZT991Oy/f77VSlzkX3230c676tT8r6wZxtzyHuM+v7QxmPstP9+cco1qn1MoT9/Rsr1vX3amEPeU9h/X5l+Xxq6TFnUSN7r1eTd55xuMl7eD02ZU131iZTxWp+8b0oZnz8uyd23+fl7U+ZsWxfyS8bJ++KU8xVPSDlnudUtKTff/EbPNobOO1m///501t/MdDg3pXzRxE55vyfy3nRDyvMfsr7Pz+Hr+xkp99L0aeNw50t2oz//fMpx/FM22tnqYMpihz/Vs411/fkXszv9+ZB5JyWLIev7xhy+P//LlPruc173QMq8zk73E12T9YumrTNG3m9POb/3iGx/PPajOXRPXYuDOfz++7KU+v54jzY28358kjO3+flu5X1Ths37H1OO8x+f7fvzX0pZ3KWPmrzf3rONoet7XX9+Y8ox/m6Nz1ffp0Temzbr+2HZub6fvvFnqxtTxms71fe7U+5Z2o36PtJ5/1bPNuaw/z6Y4ev7cynn0Xcar70yyU/3bOOWlPd8u/33wRwd47Wt9f2AbX7+8ZT995D1/a6U+u4zTzhGfR/pvA+kvIah8356ynFZq2Mp7z7XXCbj5f01GS7vG7I+72elX96fTVmo5ykpeWy12Z//TPr15/+QMme63f775pQFcNZ9wfk6F6Xc37rdeO2fkvxIkj/r2cZ1KZ+n1deQ7M7++4aUc7ZPSFl7ZdVfpH/e6rvOwZT5taHre13ez86w9f2KJP86/er7gynnvx6Xnev7d3s8flLeg8PlfWX6fen3Zt4PT/LPtvn5x5N8X8p5slbr8v7z9M/7yiTvT7le8Ujl/cJ0X/Np1duSnJ7kG7N9f/7DKe9XH2P05xdG3jX2phyznpjh6vu87FzfH0vpz/vW97q8n5N++6Vbc/j999VZv6jxOjfn8PvvL6T//nvovG9Lyftrs3Pe35dyXXKrdXm/M6W+++S9Wd877b9fnlLfrYuBJmUR3KtT6nt13YKbUxa5XfcFyOv0zvucc87ZsS9eLJd9Xn+yWCyWL3vZy/KCF7yg1+OMbPUGM3bXSSknwB6TMvi8JOXbNfveXLfVcSkDnRNTivimlIsc+n2g/39fsdHGHVI6jRvS/+bcVScluXPK67ktdd+41NWpG//tSdkRXpN+A7RVi5TXsHlT8+a3NfW5OHjVGHk/IMnzktw3pQN/S8qBR59B4Kqh896T5KlJnrbR1hUpF4P0OeG9ai55PzDJD2bYvO+YMsEm78OTd53t8v6j9Dshtmouea/uv/em/817q1bzrvmGji72pGT91Mh7nTnknZTjk82Jiv0bbRiv3d4DU8Zr98mhi6wvzLD9+RzyvnmjDXnf3tj9+WdS+vM+J8RWLVKy2Dzpc7TmPUZ//s0pN/SckXKC5Nys/waeLo5Lyfs7Mlzed0y5gOWbN9r70EYbfS/+2Up91xkj7zHq+8yULB6aMtH83pRFcnfzvRoj729JuWDwjJSTca/L7tZ3Uvbfp6ZkMcT+++SU+dQh63uMvB+Ucvy9Ne+3Znf7kDnU9xh5z2X/vVrf56ac+NtNq/V9Tco8+m45Uv3569LvixlWrdb3m1P686Otvv95km9PyePTKbXX5wKHVWPkfXzKMd+Q9T1G3o9Jqe/Tc/TW98kp4/NHp3y+Lk75TPW9GGSrMfIeoz9fzfu1Sf52l9uYQ38+Rt4PTvLcHKrvP025wHCo/vxAyvmS3e7PvzPJ2TnUn78y/S5gWrW1vvfk0HjtaKvvzbzvm3JR0dGYdzJ8fZ+SkvdZGS/vG1Peq93M4oSNNobszx+bcoHo6SnX/5wb/fl2xsj7wTk0XlPfOxsj73ukHI89JOW5vydlvmU3j8fGqO+x99+Xp/S1u7n/lne9k1Pq72iu71NSbgg8a6ONi1OumRp6/91nweXtPCSHxuc3pPTnF2V3+/M55L1dfV+T3T3PcPxGGydE3uvIu85m3vfeePwLUhbP2c28H5cyPr9zys3mr03y97v4+EkZH2x+KcfR3J8Pnffq/vv69F88Z9XjU27gOtrzfnbKlyQezXk/NKW+75Xh6nvo/vz4JN+V5NtSxjqfShmfX76LbexJ+bwe7f35kajv16TcqLibhq7vMfK+Z8rx2INTnvu7k7wh/RbqXzVGfc8h71NT9t+b/fk/pvTnfb5wbNU9kzw/5ZzlUHmPUd+r/fm12d05hGScvJ+d8qUci5SFjv44w+b9riRvzO7m/bAcqu+9OVTfu+kJSf5Fjv76Hjrvuey/h67v45N8d8rCCCemXNfyypTr2HbLXMZrq/V9fpJ37HIbT0jZf5+WssDXa1IWjtlNcxivzSXvJ6b05/I+vDHy/pqUhYWO5ryPT/I9KQtZDdWf3yll//3IlLw/mLL/3s087pUyXntgymd2c7y2m9fRj7H/Xs371Snjnd20tb73peQwZH1vXmukvm9v6LzvkFLf35pS359Iqe8rdrGNMer7SOR9XvovXrtqa95fSOnP5X17906ZX9vsz/8iyZty9PXnT0ryvRk+7yenvJ7LUubPh8z7Aylf4Hq01ffDU+r7nhmuvp+UYfNO7L9rHYm8X50y/7xbxqjv01Lq+xEZr75vSOUXFi6Xyx2vQduNBShPfcMb3vCupz/96U/s9UAAAAAAAAAAAAAAAAAAAAAAAAAAADQ73AKUe8Z8IgAAAAAAAAAAAAAAAAAAAAAAAAAAjM8ClAAAAAAAAAAAAAAAAAAAAAAAAAAAM3d83wdYLpd7zzvvvIPL5XLvbjwhAAAAAAAAAAAAAAAAAAAAAAAAAAB2154j/QQAAAAAAAAAAAAAAAAAAAAAAAAAABiWBSgBAAAAAAAAAAAAAAAAAAAAAAAAAGbOApQAAAAAAAAAAAAAAAAAAAAAAAAAADNnAUoAAAAAAAAAAAAAAAAAAAAAAAAAgJmzACUAAAAAAAAAAAAAAAAAAAAAAAAAwMxZgBIAAAAAAAAAAAAAAAAAAAAAAAAAYOYsQAkAAAAAAAAAAAAAAAAAAAAAAAAAMHMWoAQAAAAAAAAAAAAAAAAAAAAAAAAAmDkLUAIAAAAAAAAAAAAAAAAAAAAAAAAAzJwFKAEAAAAAAAAAAAAAAAAAAAAAAAAAZs4ClAAAAAAAAAAAAAAAAAAAAAAAAAAAM2cBSgAAAAAAAAAAAAAAAAAAAAAAAACAmbMAJQAAAAAAAAAAAAAAAAAAAAAAAADAzFmAEgAAAAAAAAAAAAAAAAAAAAAAAABg5ixACQAAAAAAAAAAAAAAAAAAAAAAAAAwcxagBAAAAAAAAAAAAAAAAAAAAAAAAACYOQtQAgAAAAAAAAAAAAAAAAAAAAAAAADMnAUoAQAAAAAAAAAAAAAAAAAAAAAAAABmzgKUAAAAAAAAAAAAAAAAAAAAAAAAAAAzZwFKAAAAAAAAAAAAAAAAAAAAAAAAAICZswAlAAAAAAAAAAAAAAAAAAAAAAAAAMDMLZbLZb8HWCwuTPKQJFftyjMax4nL5fLhR/pJAAAAAAAAAAAAAAAAAAAAAAAAAACMofcClEmyWCz+drlcPmoXns8ojrbnCwAAAAAAAAAAAAAAAAAAAAAAAADQx54j/QQAAAAAAAAAAAAAAAAAAAAAAAAAABiWBSgBAAAAAAAAAAAAAAAAAAAAAAAAAGZutxag/L1depyxHG3PFwAAAAAAAAAAAAAAAAAAAAAAAACg2WK5XB7p5wAAAAAAAAAAAAAAAAAAAAAAAAAAwID2HOknAAAAAAAAAAAAAAAAAAAAAAAAAADAsKoWoFwsFpcvFouLF4vFBxeLxd9u/NsZi8Xi7YvF4uMbf56+Zfv/sFgsLlssFh9dLBbfPtSTb7FYLL5j43ldtlgs/v2Rfj4AAAAAAAAAAAAAAAAAAAAAAAAAAENbLJfL9RstFpcnedRyubxqy7/9epKrl8vlSzcWcjx9uVz+3GKxeFiSVyc5K8m9krwjyYOWy+VtQ7yALhaLxXFJPpbk25JcmeT9SZ69XC4vOaJPDAAAAAAAAAAAAAAAAAAAAAAAAABgQHt6/O73JPnDjb//YZLv3fLvr1kul/uWy+WnklyWshjlFJyV5LLlcvnJ5XK5P8lrUp4vAAAAAAAAAAAAAAAAAAAAAAAAAMBs1S5AuUxy0WKx+LvFYvETG/929+Vy+fkk2fjzzI1/v3eSK7b87pUb/zYFU35uAAAAAAAAAAAAAAAAAAAAAAAAAACDOL5yu8cul8vPLRaLM5O8fbFYfOQw2y62+bdl96c2iCk/NwAAAAAAAAAAAAAAAAAAAAAAAACAQeyp2Wi5XH5u488vJXlTkrOSfHGxWNwzSTb+/NLG5lcmue+WX79Pks/t1hPuacrPDQAAAAAAAAAAAAAAAAAAAAAAAABgEGsXoFwsFicvFotTN/+e5OwkH0pyfpIf2tjsh5Kct/H385M8a7FYnLBYLO6f5IFJ/ma3n3ij9yd54GKxuP9isfiKJM9Keb4AAAAAAAAAAAAAAAAAAAAAAAAAALN1fMU2d0/ypsVisbn9q5bL5YWLxeL9Sc5dLBY/muQzSZ6ZJMvl8sOLxeLcJJckOZDkp5bL5W2DPPuOlsvlgcVi8dNJ3pbkuCR/sFwuP3yEnxYAAAAAAAAAAAAAAAAAAAAAAAAAwKAWy+XySD8HAAAAAAAAAAAAAAAAAAAAAAAAAAAGtOdIPwEAAAAAAAAAAAAAAAAAAAAAAAAAAIZlAUoAAAAAAAAAAAAAAAAAAAAAAAAAgJmzACUAAAAAAAAAAAAAAAAAAAAAAAAAwMxZgBIAAAAAAAAAAAAAAAAAAAAAAAAAYOYsQAkAAAAAAAAAAAAAAAAAAAAAAAAAMHMWoAQAAAAAAAAAAAAAAAAAAAAAAAAAmDkLUAIAAAAAAAAAAAAAAAAAAAAAAAAAzJwFKAEAAAAAAAAAAAAAAAAAAAAAAAAAZu7/AfjJajDun6lUAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "UpSet(movies_by_genre)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Given the size of this plot, we limit ourselves to frequent genres:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:34.819839Z", "start_time": "2021-07-31T14:30:34.402594Z" } }, "outputs": [ { "data": { "text/plain": [ "{'matrix': ,\n", " 'shading': ,\n", " 'totals': ,\n", " 'intersections': }" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "UpSet(movies_by_genre, min_subset_size=15, show_counts=True).plot()" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2021-07-29T12:58:35.379788Z", "start_time": "2021-07-29T12:58:35.374869Z" } }, "source": [ "If the genres were instead presented as a series of boolean columns, we could use `from_indicators`." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:34.846966Z", "start_time": "2021-07-31T14:30:34.821393Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ActionAdventureSci-FiMysteryHorrorThrillerAnimationComedyFamilyFantasyDramaMusicBiographyRomanceHistoryCrimeWesternWarMusicalSport
0TrueTrueTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
1FalseTrueTrueTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
2FalseFalseFalseFalseTrueTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
3FalseFalseFalseFalseFalseFalseTrueTrueTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
4TrueTrueFalseFalseFalseFalseFalseFalseFalseTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
...............................................................
995FalseFalseFalseTrueFalseFalseFalseFalseFalseFalseTrueFalseFalseFalseFalseTrueFalseFalseFalseFalse
996FalseFalseFalseFalseTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
997FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseTrueTrueFalseTrueFalseFalseFalseFalseFalseFalse
998FalseTrueFalseFalseFalseFalseFalseTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
999FalseFalseFalseFalseFalseFalseFalseTrueTrueTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
\n", "

1000 rows × 20 columns

\n", "
" ], "text/plain": [ " Action Adventure Sci-Fi Mystery Horror Thriller Animation Comedy \\\n", "0 True True True False False False False False \n", "1 False True True True False False False False \n", "2 False False False False True True False False \n", "3 False False False False False False True True \n", "4 True True False False False False False False \n", ".. ... ... ... ... ... ... ... ... \n", "995 False False False True False False False False \n", "996 False False False False True False False False \n", "997 False False False False False False False False \n", "998 False True False False False False False True \n", "999 False False False False False False False True \n", "\n", " Family Fantasy Drama Music Biography Romance History Crime \\\n", "0 False False False False False False False False \n", "1 False False False False False False False False \n", "2 False False False False False False False False \n", "3 True False False False False False False False \n", "4 False True False False False False False False \n", ".. ... ... ... ... ... ... ... ... \n", "995 False False True False False False False True \n", "996 False False False False False False False False \n", "997 False False True True False True False False \n", "998 False False False False False False False False \n", "999 True True False False False False False False \n", "\n", " Western War Musical Sport \n", "0 False False False False \n", "1 False False False False \n", "2 False False False False \n", "3 False False False False \n", "4 False False False False \n", ".. ... ... ... ... \n", "995 False False False False \n", "996 False False False False \n", "997 False False False False \n", "998 False False False False \n", "999 False False False False \n", "\n", "[1000 rows x 20 columns]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "genre_indicators = pd.DataFrame([{cat: True\n", " for cat in cats}\n", " for cats in movies.Genre.str.split(',').values]).fillna(False)\n", "genre_indicators" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:34.863338Z", "start_time": "2021-07-31T14:30:34.848832Z" } }, "outputs": [], "source": [ "from upsetplot import from_indicators\n", "# this produces the same result as from_memberships above\n", "movies_by_genre = from_indicators(genre_indicators, data=movies)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These columns could also be part of the original matrix. For this case `from_indicators` allows the `indicators` to be specified as a list of column names, or as a function of the data frame." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:34.887205Z", "start_time": "2021-07-31T14:30:34.864873Z" }, "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
RankTitleGenreDescriptionDirectorActorsYearRuntime (Minutes)RatingVotes...DramaMusicBiographyRomanceHistoryCrimeWesternWarMusicalSport
01Guardians of the GalaxyAction,Adventure,Sci-FiA group of intergalactic criminals are forced ...James GunnChris Pratt, Vin Diesel, Bradley Cooper, Zoe S...20141218.1757074...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
12PrometheusAdventure,Mystery,Sci-FiFollowing clues to the origin of mankind, a te...Ridley ScottNoomi Rapace, Logan Marshall-Green, Michael Fa...20121247.0485820...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
23SplitHorror,ThrillerThree girls are kidnapped by a man with a diag...M. Night ShyamalanJames McAvoy, Anya Taylor-Joy, Haley Lu Richar...20161177.3157606...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
34SingAnimation,Comedy,FamilyIn a city of humanoid animals, a hustling thea...Christophe LourdeletMatthew McConaughey,Reese Witherspoon, Seth Ma...20161087.260545...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
45Suicide SquadAction,Adventure,FantasyA secret government agency recruits some of th...David AyerWill Smith, Jared Leto, Margot Robbie, Viola D...20161236.2393727...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
..................................................................
995996Secret in Their EyesCrime,Drama,MysteryA tight-knit team of rising investigators, alo...Billy RayChiwetel Ejiofor, Nicole Kidman, Julia Roberts...20151116.227585...TrueFalseFalseFalseFalseTrueFalseFalseFalseFalse
996997Hostel: Part IIHorrorThree American college students studying abroa...Eli RothLauren German, Heather Matarazzo, Bijou Philli...2007945.573152...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
997998Step Up 2: The StreetsDrama,Music,RomanceRomantic sparks occur between two dance studen...Jon M. ChuRobert Hoffman, Briana Evigan, Cassie Ventura,...2008986.270699...TrueTrueFalseTrueFalseFalseFalseFalseFalseFalse
998999Search PartyAdventure,ComedyA pair of friends embark on a mission to reuni...Scot ArmstrongAdam Pally, T.J. Miller, Thomas Middleditch,Sh...2014935.64881...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
9991000Nine LivesComedy,Family,FantasyA stuffy businessman finds himself trapped ins...Barry SonnenfeldKevin Spacey, Jennifer Garner, Robbie Amell,Ch...2016875.312435...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
\n", "

1000 rows × 32 columns

\n", "
" ], "text/plain": [ " Rank Title Genre \\\n", "0 1 Guardians of the Galaxy Action,Adventure,Sci-Fi \n", "1 2 Prometheus Adventure,Mystery,Sci-Fi \n", "2 3 Split Horror,Thriller \n", "3 4 Sing Animation,Comedy,Family \n", "4 5 Suicide Squad Action,Adventure,Fantasy \n", ".. ... ... ... \n", "995 996 Secret in Their Eyes Crime,Drama,Mystery \n", "996 997 Hostel: Part II Horror \n", "997 998 Step Up 2: The Streets Drama,Music,Romance \n", "998 999 Search Party Adventure,Comedy \n", "999 1000 Nine Lives Comedy,Family,Fantasy \n", "\n", " Description Director \\\n", "0 A group of intergalactic criminals are forced ... James Gunn \n", "1 Following clues to the origin of mankind, a te... Ridley Scott \n", "2 Three girls are kidnapped by a man with a diag... M. Night Shyamalan \n", "3 In a city of humanoid animals, a hustling thea... Christophe Lourdelet \n", "4 A secret government agency recruits some of th... David Ayer \n", ".. ... ... \n", "995 A tight-knit team of rising investigators, alo... Billy Ray \n", "996 Three American college students studying abroa... Eli Roth \n", "997 Romantic sparks occur between two dance studen... Jon M. Chu \n", "998 A pair of friends embark on a mission to reuni... Scot Armstrong \n", "999 A stuffy businessman finds himself trapped ins... Barry Sonnenfeld \n", "\n", " Actors Year \\\n", "0 Chris Pratt, Vin Diesel, Bradley Cooper, Zoe S... 2014 \n", "1 Noomi Rapace, Logan Marshall-Green, Michael Fa... 2012 \n", "2 James McAvoy, Anya Taylor-Joy, Haley Lu Richar... 2016 \n", "3 Matthew McConaughey,Reese Witherspoon, Seth Ma... 2016 \n", "4 Will Smith, Jared Leto, Margot Robbie, Viola D... 2016 \n", ".. ... ... \n", "995 Chiwetel Ejiofor, Nicole Kidman, Julia Roberts... 2015 \n", "996 Lauren German, Heather Matarazzo, Bijou Philli... 2007 \n", "997 Robert Hoffman, Briana Evigan, Cassie Ventura,... 2008 \n", "998 Adam Pally, T.J. Miller, Thomas Middleditch,Sh... 2014 \n", "999 Kevin Spacey, Jennifer Garner, Robbie Amell,Ch... 2016 \n", "\n", " Runtime (Minutes) Rating Votes ... Drama Music Biography Romance \\\n", "0 121 8.1 757074 ... False False False False \n", "1 124 7.0 485820 ... False False False False \n", "2 117 7.3 157606 ... False False False False \n", "3 108 7.2 60545 ... False False False False \n", "4 123 6.2 393727 ... False False False False \n", ".. ... ... ... ... ... ... ... ... \n", "995 111 6.2 27585 ... True False False False \n", "996 94 5.5 73152 ... False False False False \n", "997 98 6.2 70699 ... True True False True \n", "998 93 5.6 4881 ... False False False False \n", "999 87 5.3 12435 ... False False False False \n", "\n", " History Crime Western War Musical Sport \n", "0 False False False False False False \n", "1 False False False False False False \n", "2 False False False False False False \n", "3 False False False False False False \n", "4 False False False False False False \n", ".. ... ... ... ... ... ... \n", "995 False True False False False False \n", "996 False False False False False False \n", "997 False False False False False False \n", "998 False False False False False False \n", "999 False False False False False False \n", "\n", "[1000 rows x 32 columns]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "movies_with_indicators = pd.concat([movies, genre_indicators], axis=1)\n", "movies_with_indicators" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2021-07-29T13:00:57.617771Z", "start_time": "2021-07-29T13:00:57.594629Z" } }, "source": [ "We can now specify some or all category column names instead of passing a separate indicator matrix:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:35.089744Z", "start_time": "2021-07-31T14:30:34.888825Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "UpSet(from_indicators([\"Drama\", \"Action\", \"Comedy\", \"Adventure\"],\n", " data=movies_with_indicators))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or we can use `pd.select_dtypes` to extract out all boolean columns:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2021-07-31T14:30:35.625514Z", "start_time": "2021-07-31T14:30:35.092223Z" }, "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "UpSet(from_indicators(lambda df: df.select_dtypes(bool),\n", " data=movies_with_indicators),\n", " min_subset_size=15, show_counts=True)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" }, "toc-autonumbering": false, "toc-showcode": false, "toc-showmarkdowntxt": false, "toc-showtags": true, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 } UpSetPlot-0.8.0/doc/index.rst000066400000000000000000000001521435554746600160450ustar00rootroot00000000000000.. include:: ../README.rst .. toctree:: auto_examples/index formats.ipynb api changelog UpSetPlot-0.8.0/doc/make.bat000066400000000000000000000151011435554746600156110ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. xml to make Docutils-native XML files echo. pseudoxml to make pseudoxml-XML files for display purposes echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) %SPHINXBUILD% 2> nul if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\project-template.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\project-template.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdf" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf cd %BUILDDIR%/.. echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdfja" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf-ja cd %BUILDDIR%/.. echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) if "%1" == "xml" ( %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml if errorlevel 1 exit /b 1 echo. echo.Build finished. The XML files are in %BUILDDIR%/xml. goto end ) if "%1" == "pseudoxml" ( %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml if errorlevel 1 exit /b 1 echo. echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. goto end ) :end UpSetPlot-0.8.0/doc/requirements.txt000066400000000000000000000001741435554746600174740ustar00rootroot00000000000000numpy scipy pandas matplotlib numpydoc sphinx-gallery sphinx-issues seaborn scikit-learn nbsphinx sphinx<2 sphinx-rtd-theme UpSetPlot-0.8.0/examples/000077500000000000000000000000001435554746600152575ustar00rootroot00000000000000UpSetPlot-0.8.0/examples/README.txt000066400000000000000000000001171435554746600167540ustar00rootroot00000000000000.. _general_examples: Examples ======== Introductory examples for upsetplot. UpSetPlot-0.8.0/examples/plot_diabetes.py000066400000000000000000000051111435554746600204450ustar00rootroot00000000000000""" ================================== Above-average features in Diabetes ================================== Explore above-average attributes in the Diabetes dataset (Efron et al, 2004). Here we take some features correlated with disease progression, and look at the distribution of that disease progression value when each of these features is above average. The most correlated features are: - bmi body mass index - bp average blood pressure - s4 tch, total cholesterol / HDL - s5 ltg, possibly log of serum triglycerides level - s6 glu, blood sugar level This kind of dataset analysis may not be a practical use of UpSet, but helps to illustrate the :meth:`UpSet.add_catplot` feature. """ import pandas as pd from sklearn.datasets import load_diabetes from matplotlib import pyplot as plt from upsetplot import UpSet # Load the dataset into a DataFrame diabetes = load_diabetes() diabetes_df = pd.DataFrame(diabetes.data, columns=diabetes.feature_names) # Get five features most correlated with median house value correls = diabetes_df.corrwith(pd.Series(diabetes.target), method='spearman').sort_values() top_features = correls.index[-5:] # Get a binary indicator of whether each top feature is above average diabetes_above_avg = diabetes_df > diabetes_df.median(axis=0) diabetes_above_avg = diabetes_above_avg[top_features] diabetes_above_avg = diabetes_above_avg.rename(columns=lambda x: x + '>') # Make this indicator mask an index of diabetes_df diabetes_df = pd.concat([diabetes_df, diabetes_above_avg], axis=1) diabetes_df = diabetes_df.set_index(list(diabetes_above_avg.columns)) # Also give us access to the target (median house value) diabetes_df = diabetes_df.assign(progression=diabetes.target) ########################################################################## # UpSet plot it! upset = UpSet(diabetes_df, subset_size='count', intersection_plot_elements=3) upset.add_catplot(value='progression', kind='strip', color='blue') print(diabetes_df) upset.add_catplot(value='bmi', kind='strip', color='black') upset.plot() plt.title("UpSet with catplots, for orientation='horizontal'") plt.show() ########################################################################## # And again in vertical orientation upset = UpSet(diabetes_df, subset_size='count', intersection_plot_elements=3, orientation='vertical') upset.add_catplot(value='progression', kind='strip', color='blue') upset.add_catplot(value='bmi', kind='strip', color='black') upset.plot() plt.title("UpSet with catplots, for orientation='vertical'") plt.show() UpSetPlot-0.8.0/examples/plot_discrete.py000066400000000000000000000022311435554746600204670ustar00rootroot00000000000000""" ================================================= Plotting discrete variables as stacked bar charts ================================================= Currently, a somewhat contrived example of `add_stacked_bars`. """ import pandas as pd from upsetplot import UpSet from matplotlib import pyplot as plt from matplotlib import cm TITANIC_URL = 'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv' # noqa df = pd.read_csv(TITANIC_URL) # Show UpSet on survival and first classs df = df.set_index(df.Survived == 1).set_index(df.Pclass == 1, append=True) upset = UpSet(df, intersection_plot_elements=0) # disable the default bar chart upset.add_stacked_bars(by="Sex", colors=cm.Pastel1, title="Count by gender", elements=10) upset.plot() plt.suptitle("Gender for first class and survival on Titanic") plt.show() upset = UpSet(df, show_counts=True, orientation="vertical", intersection_plot_elements=0) upset.add_stacked_bars(by="Sex", colors=cm.Pastel1, title="Count by gender", elements=10) upset.plot() plt.suptitle("Same, but vertical, with counts shown") plt.show() UpSetPlot-0.8.0/examples/plot_generated.py000066400000000000000000000021371435554746600206300ustar00rootroot00000000000000""" ============================ Plotting with generated data ============================ This example illustrates basic plotting functionality using generated data. """ from matplotlib import pyplot as plt from upsetplot import generate_counts, plot example = generate_counts() print(example) ########################################################################## plot(example) plt.suptitle('Ordered by degree') plt.show() ########################################################################## plot(example, sort_by='cardinality') plt.suptitle('Ordered by cardinality') plt.show() ########################################################################## plot(example, show_counts='{:d}') plt.suptitle('With counts shown') plt.show() ########################################################################## plot(example, show_counts='%d', show_percentages=True) plt.suptitle('With counts and % shown') plt.show() ########################################################################## plot(example, show_percentages="{:.2%}") plt.suptitle('With fraction shown in custom format') plt.show() UpSetPlot-0.8.0/examples/plot_hide.py000066400000000000000000000021221435554746600175750ustar00rootroot00000000000000""" ====================================== Hiding subsets based on size or degree ====================================== This illustrates the use of ``min_subset_size``, ``max_subset_size``, ``min_degree`` or ``max_degree``. """ from matplotlib import pyplot as plt from upsetplot import generate_counts, plot example = generate_counts() plot(example, show_counts=True) plt.suptitle('Nothing hidden') plt.show() ########################################################################## plot(example, show_counts=True, min_subset_size=100) plt.suptitle('Small subsets hidden') plt.show() ########################################################################## plot(example, show_counts=True, max_subset_size=500) plt.suptitle('Large subsets hidden') plt.show() ########################################################################## plot(example, show_counts=True, min_degree=2) plt.suptitle('Degree <2 hidden') plt.show() ########################################################################## plot(example, show_counts=True, max_degree=2) plt.suptitle('Degree >2 hidden') plt.show() UpSetPlot-0.8.0/examples/plot_highlight.py000066400000000000000000000037331435554746600206440ustar00rootroot00000000000000""" ============================= Highlighting selected subsets ============================= Demonstrates use of the `style_subsets` method to mark some subsets as different. """ from matplotlib import pyplot as plt from upsetplot import generate_counts, UpSet example = generate_counts() ########################################################################## # Subsets can be styled by the categories present in them, and a legend # can be optionally generated. upset = UpSet(example) upset.style_subsets(present=["cat1", "cat2"], facecolor="blue", label="special") upset.plot() plt.suptitle("Paint blue subsets including both cat1 and cat2; show a legend") plt.show() ########################################################################## # ... or styling can be applied by the categories absent in a subset. upset = UpSet(example, orientation="vertical") upset.style_subsets(present="cat2", absent="cat1", edgecolor="red", linewidth=2) upset.plot() plt.suptitle("Border for subsets including cat2 but not cat1") plt.show() ########################################################################## # ... or their size or degree. upset = UpSet(example) upset.style_subsets(min_subset_size=1000, facecolor="lightblue", hatch="xx", label="big") upset.plot() plt.suptitle("Hatch subsets with size >1000") plt.show() ########################################################################## # Multiple stylings can be applied with different criteria in the same # plot. upset = UpSet(example, facecolor="gray") upset.style_subsets(present="cat0", label="Contains cat0", facecolor="blue") upset.style_subsets(present="cat1", label="Contains cat1", hatch="xx") upset.style_subsets(present="cat2", label="Contains cat2", edgecolor="red") # reduce legend size: params = {'legend.fontsize': 8} with plt.rc_context(params): upset.plot() plt.suptitle("Styles for every category!") plt.show() UpSetPlot-0.8.0/examples/plot_missingness.py000066400000000000000000000012371435554746600212340ustar00rootroot00000000000000""" ======================================= Plot the distribution of missing values ======================================= UpSet plots are often used to show which variables are missing together. Passing a callable ``indicators=pd.isna`` to :func:`from_indicators` is an easy way to categorise a record by the variables that are missing in it. """ from matplotlib import pyplot as plt import pandas as pd from upsetplot import plot, from_indicators TITANIC_URL = 'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv' # noqa data = pd.read_csv(TITANIC_URL) plot(from_indicators(indicators=pd.isna, data=data), show_counts=True) plt.show() UpSetPlot-0.8.0/examples/plot_sizing.py000066400000000000000000000026721435554746600202010ustar00rootroot00000000000000""" ======================================== Customising element size and figure size ======================================== This example illustrates controlling sizing within an UpSet plot. """ from matplotlib import pyplot as plt from upsetplot import generate_counts, plot example = generate_counts() print(example) plot(example) plt.suptitle('Defaults') plt.show() ########################################################################## # upsetplot uses a grid of square "elements" to display. Controlling the # size of these elements affects all components of the plot. plot(example, element_size=40) plt.suptitle('Increased element_size') plt.show() ########################################################################## # When setting ``figsize`` explicitly, you then need to pass the figure to # ``plot``, and use ``element_size=None`` for optimal sizing. fig = plt.figure(figsize=(10, 3)) plot(example, fig=fig, element_size=None) plt.suptitle('Setting figsize explicitly') plt.show() ########################################################################## # Components in the plot can be resized by indicating how many elements # they should equate to. plot(example, intersection_plot_elements=3) plt.suptitle('Decreased intersection_plot_elements') plt.show() ########################################################################## plot(example, totals_plot_elements=5) plt.suptitle('Increased totals_plot_elements') plt.show() UpSetPlot-0.8.0/examples/plot_theming.py000066400000000000000000000050601435554746600203230ustar00rootroot00000000000000""" ==================== Changing Plot Colors ==================== This example illustrates use of matplotlib and upsetplot color settings, aside from matplotlib style sheets, which can control colors as well as grid lines, fonts and tick display. Upsetplot provides some color settings: * ``facecolor``: sets the color for intersection size bars, and for active matrix dots. Defaults to white on a dark background, otherwise black. * ``other_dots_color``: sets the color for other (inactive) dots. Specify as a color, or a float specifying opacity relative to facecolor. * ``shading_color``: sets the color odd rows. Specify as a color, or a float specifying opacity relative to facecolor. For an introduction to matplotlib theming see: * `Tutorial `__ * `Reference `__ """ from matplotlib import pyplot as plt from upsetplot import generate_counts, plot example = generate_counts() plot(example, facecolor="darkblue") plt.suptitle('facecolor="darkblue"') plt.show() ########################################################################## plot(example, facecolor="darkblue", shading_color="lightgray") plt.suptitle('facecolor="darkblue", shading_color="lightgray"') plt.show() ########################################################################## with plt.style.context('Solarize_Light2'): plot(example) plt.suptitle('matplotlib classic stylesheet') plt.show() ########################################################################## with plt.style.context('dark_background'): plot(example, show_counts=True) plt.suptitle('matplotlib dark_background stylesheet') plt.show() ########################################################################## with plt.style.context('dark_background'): plot(example, show_counts=True, shading_color=.15) plt.suptitle('matplotlib dark_background stylesheet, shading_color=.15') plt.show() ########################################################################## with plt.style.context('dark_background'): plot(example, show_counts=True, facecolor="red") plt.suptitle('matplotlib dark_background, facecolor="red"') plt.show() ########################################################################## with plt.style.context('dark_background'): plot(example, show_counts=True, facecolor="red", other_dots_color=.4, shading_color=.2) plt.suptitle('dark_background, red face, stronger other colors') plt.show() UpSetPlot-0.8.0/examples/plot_vertical.py000066400000000000000000000013431435554746600205010ustar00rootroot00000000000000""" ==================== Vertical orientation ==================== This illustrates the effect of orientation='vertical'. """ from matplotlib import pyplot as plt from upsetplot import generate_counts, plot example = generate_counts() plot(example, orientation='vertical') plt.suptitle('A vertical plot') plt.show() ########################################################################## plot(example, orientation='vertical', show_counts='{:d}') plt.suptitle('A vertical plot with counts shown') plt.show() ########################################################################## plot(example, orientation='vertical', show_counts='{:d}', show_percentages=True) plt.suptitle('With counts and percentages shown') plt.show() UpSetPlot-0.8.0/setup.cfg000066400000000000000000000013731435554746600152660ustar00rootroot00000000000000[metadata] description = Draw Lex et al.'s UpSet plots with Pandas and Matplotlib long_description = file: README.rst author = Joel Nothman author_email = joel.nothman@gmail.com url = https://upsetplot.readthedocs.io license = BSD 3-Clause License classifiers = License :: OSI Approved :: BSD License Programming Language :: Python :: 3 Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.10 Topic :: Scientific/Engineering :: Visualization Intended Audience :: Science/Research [aliases] test = pytest [tool:pytest] addopts = --doctest-modules --verbose --cov=upsetplot --showlocals # --cov=upsetplot testpaths = upsetplot README.rst doctest_optionflags = ALLOW_UNICODE NORMALIZE_WHITESPACE ELLIPSIS [flake8] ignore = W503,W504 UpSetPlot-0.8.0/setup.py000066400000000000000000000015661435554746600151630ustar00rootroot00000000000000#!/usr/bin/env python import os import sys from setuptools import setup def setup_package(): src_path = os.path.dirname(os.path.abspath(sys.argv[0])) old_path = os.getcwd() os.chdir(src_path) sys.path.insert(0, src_path) try: os.environ['__in-setup'] = '1' # ensures only version is imported from upsetplot import __version__ as version # See also setup.cfg setup(name='UpSetPlot', version=version, packages=["upsetplot"], license='BSD-3-Clause', setup_requires=['pytest-runner'], tests_require=['pytest>=2.7', 'pytest-cov<2.6'], # TODO: check versions install_requires=['pandas>=0.23', 'matplotlib>=2.0']) finally: del sys.path[0] os.chdir(old_path) return if __name__ == '__main__': setup_package() UpSetPlot-0.8.0/upsetplot/000077500000000000000000000000001435554746600155005ustar00rootroot00000000000000UpSetPlot-0.8.0/upsetplot/__init__.py000066400000000000000000000007571435554746600176220ustar00rootroot00000000000000__version__ = '0.8.0' import os if os.environ.get('__in-setup', None) != '1': from .plotting import UpSet, plot from .data import (generate_counts, generate_data, generate_samples, from_memberships, from_contents, from_indicators) from .reformat import query __all__ = ['UpSet', 'generate_data', 'generate_counts', 'generate_samples', 'plot', 'from_memberships', 'from_contents', 'from_indicators', 'query'] UpSetPlot-0.8.0/upsetplot/data.py000066400000000000000000000336011435554746600167660ustar00rootroot00000000000000from __future__ import print_function, division, absolute_import from numbers import Number import functools from distutils.version import LooseVersion import warnings import pandas as pd import numpy as np def generate_samples(seed=0, n_samples=10000, n_categories=3): """Generate artificial samples assigned to set intersections Parameters ---------- seed : int A seed for randomisation n_samples : int Number of samples to generate n_categories : int Number of categories (named "cat0", "cat1", ...) to generate Returns ------- DataFrame Field 'value' is a weight or score for each element. Field 'index' is a unique id for each element. Index includes a boolean indicator mask for each category. Note: Further fields may be added in future versions. See Also -------- generate_counts : Generates the counts for each subset of categories corresponding to these samples. """ rng = np.random.RandomState(seed) df = pd.DataFrame({'value': np.zeros(n_samples)}) for i in range(n_categories): r = rng.rand(n_samples) df['cat%d' % i] = r > rng.rand() df['value'] += r df.reset_index(inplace=True) df.set_index(['cat%d' % i for i in range(n_categories)], inplace=True) return df def generate_counts(seed=0, n_samples=10000, n_categories=3): """Generate artificial counts corresponding to set intersections Parameters ---------- seed : int A seed for randomisation n_samples : int Number of samples to generate statistics over n_categories : int Number of categories (named "cat0", "cat1", ...) to generate Returns ------- Series Counts indexed by boolean indicator mask for each category. See Also -------- generate_samples : Generates a DataFrame of samples that these counts are derived from. """ df = generate_samples(seed=seed, n_samples=n_samples, n_categories=n_categories) return df.value.groupby(level=list(range(n_categories))).count() def generate_data(seed=0, n_samples=10000, n_sets=3, aggregated=False): warnings.warn('generate_data was replaced by generate_counts in version ' '0.3 and will be removed in version 0.4.', DeprecationWarning) if aggregated: return generate_counts(seed=seed, n_samples=n_samples, n_categories=n_sets) else: return generate_samples(seed=seed, n_samples=n_samples, n_categories=n_sets)['value'] def from_indicators(indicators, data=None): """Load category membership indicated by a boolean indicator matrix This loader also supports the case where the indicator columns can be derived from `data`. .. versionadded:: 0.6 Parameters ---------- indicators : DataFrame-like of booleans, Sequence of str, or callable Specifies the category indicators (boolean mask arrays) within ``data``, i.e. which records in ``data`` belong to which categories. If a list of strings, these should be column names found in ``data`` whose values are boolean mask arrays. If a DataFrame, its columns should correspond to categories, and its index should be a subset of those in ``data``, values should be True where a data record is in that category, and False or NA otherwise. If callable, it will be applied to ``data`` after the latter is converted to a Series or DataFrame. data : Series-like or DataFrame-like, optional If given, the index of category membership is attached to this data. It must have the same length as `indicators`. If not given, the series will contain the value 1. Returns ------- DataFrame or Series `data` is returned with its index indicating category membership. It will be a Series if `data` is a Series or 1d numeric array or None. Notes ----- Categories with indicators that are all False will be removed. Examples -------- >>> import pandas as pd >>> from upsetplot import from_indicators >>> >>> # Just indicators: >>> indicators = {"cat1": [True, False, True, False], ... "cat2": [False, True, False, False], ... "cat3": [True, True, False, False]} >>> from_indicators(indicators) cat1 cat2 cat3 True False True 1.0 False True True 1.0 True False False 1.0 False False False 1.0 Name: ones, dtype: float64 >>> >>> # Where indicators are included within data, specifying >>> # columns by name: >>> data = pd.DataFrame({"value": [5, 4, 6, 4], **indicators}) >>> from_indicators(["cat1", "cat3"], data=data) value cat1 cat2 cat3 cat1 cat3 True True 5 True False True False True 4 False True True True False 6 True False False False False 4 False False False >>> >>> # Making indicators out of all boolean columns: >>> from_indicators(lambda data: data.select_dtypes(bool), data=data) value cat1 cat2 cat3 cat1 cat2 cat3 True False True 5 True False True False True True 4 False True True True False False 6 True False False False False False 4 False False False >>> >>> # Using a dataset with missing data, we can use missingness as >>> # an indicator: >>> data = pd.DataFrame({"val1": [pd.NA, .7, pd.NA, .9], ... "val2": ["male", pd.NA, "female", "female"], ... "val3": [pd.NA, pd.NA, 23000, 78000]}) >>> from_indicators(pd.isna, data=data) val1 val2 val3 val1 val2 val3 True False True male False True True 0.7 True False False female 23000 False False False 0.9 female 78000 """ if data is not None: data = _convert_to_pandas(data) if callable(indicators): if data is None: raise ValueError("data must be provided when indicators is " "callable") indicators = indicators(data) try: indicators[0] except Exception: pass else: if isinstance(indicators[0], (str, int)): if data is None: raise ValueError("data must be provided when indicators are " "specified as a list of columns") if isinstance(indicators, tuple): raise ValueError("indicators as tuple is not supported") # column array indicators = data[indicators] indicators = pd.DataFrame(indicators).fillna(False).infer_objects() # drop all-False (should we be dropping all-True also? making an option?) indicators = indicators.loc[:, indicators.any(axis=0)] if not all(dtype.kind == 'b' for dtype in indicators.dtypes): raise ValueError('The indicators must all be boolean') if data is not None: if not (isinstance(indicators.index, pd.RangeIndex) and indicators.index[0] == 0 and indicators.index[-1] == len(data) - 1): # index is specified on indicators. Need to align it to data if not indicators.index.isin(data.index).all(): raise ValueError("If indicators.index is not the default, " "all its values must be present in " "data.index") indicators = indicators.reindex(index=data.index, fill_value=False) else: data = pd.Series(np.ones(len(indicators)), name="ones") indicators.set_index(list(indicators.columns), inplace=True) data.index = indicators.index return data def _convert_to_pandas(data, copy=True): is_series = False if hasattr(data, 'loc'): if copy: data = data.copy(deep=False) is_series = data.ndim == 1 elif len(data): try: is_series = isinstance(data[0], Number) except KeyError: is_series = False if is_series: data = pd.Series(data) else: data = pd.DataFrame(data) return data def from_memberships(memberships, data=None): """Load data where each sample has a collection of category names The output should be suitable for passing to `UpSet` or `plot`. Parameters ---------- memberships : sequence of collections of strings Each element corresponds to a data point, indicating the sets it is a member of. Each category is named by a string. data : Series-like or DataFrame-like, optional If given, the index of category memberships is attached to this data. It must have the same length as `memberships`. If not given, the series will contain the value 1. Returns ------- DataFrame or Series `data` is returned with its index indicating category membership. It will be a Series if `data` is a Series or 1d numeric array. The index will have levels ordered by category names. Examples -------- >>> from upsetplot import from_memberships >>> from_memberships([ ... ['cat1', 'cat3'], ... ['cat2', 'cat3'], ... ['cat1'], ... [] ... ]) cat1 cat2 cat3 True False True 1 False True True 1 True False False 1 False False False 1 Name: ones, dtype: ... >>> # now with data: >>> import numpy as np >>> from_memberships([ ... ['cat1', 'cat3'], ... ['cat2', 'cat3'], ... ['cat1'], ... [] ... ], data=np.arange(12).reshape(4, 3)) 0 1 2 cat1 cat2 cat3 True False True 0 1 2 False True True 3 4 5 True False False 6 7 8 False False False 9 10 11 """ df = pd.DataFrame([{name: True for name in names} for names in memberships]) for set_name in df.columns: if not hasattr(set_name, 'lower'): raise ValueError('Category names should be strings') if df.shape[1] == 0: raise ValueError('Require at least one category. None were found.') df.sort_index(axis=1, inplace=True) df.fillna(False, inplace=True) df = df.astype(bool) df.set_index(list(df.columns), inplace=True) if data is None: return df.assign(ones=1)['ones'] data = _convert_to_pandas(data) if len(data) != len(df): raise ValueError('memberships and data must have the same length. ' 'Got len(memberships) == %d, len(data) == %d' % (len(memberships), len(data))) data.index = df.index return data def from_contents(contents, data=None, id_column='id'): """Build data from category listings Parameters ---------- contents : Mapping (or iterable over pairs) of strings to sets Keys are category names, values are sets of identifiers (int or string). data : DataFrame, optional If provided, this should be indexed by the identifiers used in `contents`. id_column : str, default='id' The column name to use for the identifiers in the output. Returns ------- DataFrame `data` is returned with its index indicating category membership, including a column named according to id_column. If data is not given, the order of rows is not assured. Notes ----- The order of categories in the output DataFrame is determined from `contents`, which may have non-deterministic iteration order. Examples -------- >>> from upsetplot import from_contents >>> contents = {'cat1': ['a', 'b', 'c'], ... 'cat2': ['b', 'd'], ... 'cat3': ['e']} >>> from_contents(contents) id cat1 cat2 cat3 True False False a True False b False False c False True False d False True e >>> import pandas as pd >>> contents = {'cat1': [0, 1, 2], ... 'cat2': [1, 3], ... 'cat3': [4]} >>> data = pd.DataFrame({'favourite': ['green', 'red', 'red', ... 'yellow', 'blue']}) >>> from_contents(contents, data=data) id favourite cat1 cat2 cat3 True False False 0 green True False 1 red False False 2 red False True False 3 yellow False True 4 blue """ cat_series = [pd.Series(True, index=list(elements), name=name) for name, elements in contents.items()] if not all(s.index.is_unique for s in cat_series): raise ValueError('Got duplicate ids in a category') concat = pd.concat if LooseVersion(pd.__version__) >= '0.23.0': # silence the warning concat = functools.partial(concat, sort=False) df = concat(cat_series, axis=1) if id_column in df.columns: raise ValueError('A category cannot be named %r' % id_column) df.fillna(False, inplace=True) cat_names = list(df.columns) if data is not None: if set(df.columns).intersection(data.columns): raise ValueError('Data columns overlap with category names') if id_column in data.columns: raise ValueError('data cannot contain a column named %r' % id_column) not_in_data = df.drop(data.index, axis=0, errors='ignore') if len(not_in_data): raise ValueError('Found identifiers in contents that are not in ' 'data: %r' % not_in_data.index.values) df = df.reindex(index=data.index).fillna(False) df = concat([data, df], axis=1) df.index.name = id_column return df.reset_index().set_index(cat_names) UpSetPlot-0.8.0/upsetplot/plotting.py000066400000000000000000001047661435554746600177300ustar00rootroot00000000000000from __future__ import print_function, division, absolute_import try: import typing except ImportError: import collections as typing import numpy as np import pandas as pd import matplotlib from matplotlib import pyplot as plt from matplotlib import colors from matplotlib import patches from .reformat import query, _get_subset_mask from . import util # prevents ImportError on matplotlib versions >3.5.2 try: from matplotlib.tight_layout import get_renderer RENDERER_IMPORTED = True except ImportError: RENDERER_IMPORTED = False def _process_data(df, *, sort_by, sort_categories_by, subset_size, sum_over, min_subset_size=None, max_subset_size=None, min_degree=None, max_degree=None, reverse=False, include_empty_subsets=False): results = query(df, sort_by=sort_by, sort_categories_by=sort_categories_by, subset_size=subset_size, sum_over=sum_over, min_subset_size=min_subset_size, max_subset_size=max_subset_size, min_degree=min_degree, max_degree=max_degree, include_empty_subsets=include_empty_subsets) df = results.data agg = results.subset_sizes totals = results.category_totals total = agg.sum() # add '_bin' to df indicating index in agg # XXX: ugly! def _pack_binary(X): X = pd.DataFrame(X) # use objects if arbitrary precision integers are needed dtype = np.object_ if X.shape[1] > 62 else np.uint64 out = pd.Series(0, index=X.index, dtype=dtype) for i, (_, col) in enumerate(X.items()): out *= 2 out += col return out df_packed = _pack_binary(df.index.to_frame()) data_packed = _pack_binary(agg.index.to_frame()) df['_bin'] = pd.Series(df_packed).map( pd.Series(np.arange(len(data_packed))[::-1 if reverse else 1], index=data_packed)) if reverse: agg = agg[::-1] return total, df, agg, totals def _multiply_alpha(c, mult): r, g, b, a = colors.to_rgba(c) a *= mult return colors.to_hex((r, g, b, a), keep_alpha=True) class _Transposed: """Wrap an object in order to transpose some plotting operations Attributes of obj will be mapped. Keyword arguments when calling obj will be mapped. The mapping is not recursive: callable attributes need to be _Transposed again. """ def __init__(self, obj): self.__obj = obj def __getattr__(self, key): return getattr(self.__obj, self._NAME_TRANSPOSE.get(key, key)) def __call__(self, *args, **kwargs): return self.__obj(*args, **{self._NAME_TRANSPOSE.get(k, k): v for k, v in kwargs.items()}) _NAME_TRANSPOSE = { 'width': 'height', 'height': 'width', 'hspace': 'wspace', 'wspace': 'hspace', 'hlines': 'vlines', 'vlines': 'hlines', 'bar': 'barh', 'barh': 'bar', 'xaxis': 'yaxis', 'yaxis': 'xaxis', 'left': 'bottom', 'right': 'top', 'top': 'right', 'bottom': 'left', 'sharex': 'sharey', 'sharey': 'sharex', 'get_figwidth': 'get_figheight', 'get_figheight': 'get_figwidth', 'set_figwidth': 'set_figheight', 'set_figheight': 'set_figwidth', 'set_xlabel': 'set_ylabel', 'set_ylabel': 'set_xlabel', 'set_xlim': 'set_ylim', 'set_ylim': 'set_xlim', 'get_xlim': 'get_ylim', 'get_ylim': 'get_xlim', 'set_autoscalex_on': 'set_autoscaley_on', 'set_autoscaley_on': 'set_autoscalex_on', } def _transpose(obj): if isinstance(obj, str): return _Transposed._NAME_TRANSPOSE.get(obj, obj) return _Transposed(obj) def _identity(obj): return obj class UpSet: """Manage the data and drawing for a basic UpSet plot Primary public method is :meth:`plot`. Parameters ---------- data : pandas.Series or pandas.DataFrame Elements associated with categories (a DataFrame), or the size of each subset of categories (a Series). Should have MultiIndex where each level is binary, corresponding to category membership. If a DataFrame, `sum_over` must be a string or False. orientation : {'horizontal' (default), 'vertical'} If horizontal, intersections are listed from left to right. sort_by : {'cardinality', 'degree', '-cardinality', '-degree', 'input', '-input'} If 'cardinality', subset are listed from largest to smallest. If 'degree', they are listed in order of the number of categories intersected. If 'input', the order they appear in the data input is used. Prefix with '-' to reverse the ordering. Note this affects ``subset_sizes`` but not ``data``. sort_categories_by : {'cardinality', '-cardinality', 'input', '-input'} Whether to sort the categories by total cardinality, or leave them in the input data's provided order (order of index levels). Prefix with '-' to reverse the ordering. subset_size : {'auto', 'count', 'sum'} Configures how to calculate the size of a subset. Choices are: 'auto' (default) If `data` is a DataFrame, count the number of rows in each group, unless `sum_over` is specified. If `data` is a Series with at most one row for each group, use the value of the Series. If `data` is a Series with more than one row per group, raise a ValueError. 'count' Count the number of rows in each group. 'sum' Sum the value of the `data` Series, or the DataFrame field specified by `sum_over`. sum_over : str or None If `subset_size='sum'` or `'auto'`, then the intersection size is the sum of the specified field in the `data` DataFrame. If a Series, only None is supported and its value is summed. min_subset_size : int, optional Minimum size of a subset to be shown in the plot. All subsets with a size smaller than this threshold will be omitted from plotting. Size may be a sum of values, see `subset_size`. .. versionadded:: 0.5 max_subset_size : int, optional Maximum size of a subset to be shown in the plot. All subsets with a size greater than this threshold will be omitted from plotting. .. versionadded:: 0.5 min_degree : int, optional Minimum degree of a subset to be shown in the plot. .. versionadded:: 0.5 max_degree : int, optional Maximum degree of a subset to be shown in the plot. .. versionadded:: 0.5 facecolor : 'auto' or matplotlib color or float Color for bar charts and active dots. Defaults to black if axes.facecolor is a light color, otherwise white. .. versionchanged:: 0.6 Before 0.6, the default was 'black' other_dots_color : matplotlib color or float Color for shading of inactive dots, or opacity (between 0 and 1) applied to facecolor. .. versionadded:: 0.6 shading_color : matplotlib color or float Color for shading of odd rows in matrix and totals, or opacity (between 0 and 1) applied to facecolor. .. versionadded:: 0.6 with_lines : bool Whether to show lines joining dots in the matrix, to mark multiple categories being intersected. element_size : float or None Side length in pt. If None, size is estimated to fit figure intersection_plot_elements : int The intersections plot should be large enough to fit this many matrix elements. Set to 0 to disable intersection size bars. .. versionchanged:: 0.4 Setting to 0 is handled. totals_plot_elements : int The totals plot should be large enough to fit this many matrix elements. show_counts : bool or str, default=False Whether to label the intersection size bars with the cardinality of the intersection. When a string, this formats the number. For example, '{:d}' is equivalent to True. Note that, for legacy reasons, if the string does not contain '{', it will be interpreted as a C-style format string, such as '%d'. show_percentages : bool or str, default=False Whether to label the intersection size bars with the percentage of the intersection relative to the total dataset. When a string, this formats the number representing a fraction of samples. For example, '{:.1%}' is the default, formatting .123 as 12.3%. This may be applied with or without show_counts. .. versionadded:: 0.4 include_empty_subsets : bool (default=False) If True, all possible category combinations will be shown as subsets, even when some are not present in data. """ _default_figsize = (10, 6) def __init__(self, data, orientation='horizontal', sort_by='degree', sort_categories_by='cardinality', subset_size='auto', sum_over=None, min_subset_size=None, max_subset_size=None, min_degree=None, max_degree=None, facecolor='auto', other_dots_color=.18, shading_color=.05, with_lines=True, element_size=32, intersection_plot_elements=6, totals_plot_elements=2, show_counts='', show_percentages=False, include_empty_subsets=False): self._horizontal = orientation == 'horizontal' self._reorient = _identity if self._horizontal else _transpose if facecolor == 'auto': bgcolor = matplotlib.rcParams.get('axes.facecolor', 'white') r, g, b, a = colors.to_rgba(bgcolor) lightness = colors.rgb_to_hsv((r, g, b))[-1] * a facecolor = 'black' if lightness >= .5 else 'white' self._facecolor = facecolor self._shading_color = (_multiply_alpha(facecolor, shading_color) if isinstance(shading_color, float) else shading_color) self._other_dots_color = (_multiply_alpha(facecolor, other_dots_color) if isinstance(other_dots_color, float) else other_dots_color) self._with_lines = with_lines self._element_size = element_size self._totals_plot_elements = totals_plot_elements self._subset_plots = [{'type': 'default', 'id': 'intersections', 'elements': intersection_plot_elements}] if not intersection_plot_elements: self._subset_plots.pop() self._show_counts = show_counts self._show_percentages = show_percentages (self.total, self._df, self.intersections, self.totals) = _process_data( data, sort_by=sort_by, sort_categories_by=sort_categories_by, subset_size=subset_size, sum_over=sum_over, min_subset_size=min_subset_size, max_subset_size=max_subset_size, min_degree=min_degree, max_degree=max_degree, reverse=not self._horizontal, include_empty_subsets=include_empty_subsets) self.subset_styles = [{"facecolor": facecolor} for i in range(len(self.intersections))] self.subset_legend = [] # pairs of (style, label) def _swapaxes(self, x, y): if self._horizontal: return x, y return y, x def style_subsets(self, present=None, absent=None, min_subset_size=None, max_subset_size=None, min_degree=None, max_degree=None, facecolor=None, edgecolor=None, hatch=None, linewidth=None, linestyle=None, label=None): """Updates the style of selected subsets' bars and matrix dots Parameters are either used to select subsets, or to style them with attributes of :class:`matplotlib.patches.Patch`, apart from label, which adds a legend entry. Parameters ---------- present : str or list of str, optional Category or categories that must be present in subsets for styling. absent : str or list of str, optional Category or categories that must not be present in subsets for styling. min_subset_size : int, optional Minimum size of a subset to be styled. max_subset_size : int, optional Maximum size of a subset to be styled. min_degree : int, optional Minimum degree of a subset to be styled. max_degree : int, optional Maximum degree of a subset to be styled. facecolor : str or matplotlib color, optional Override the default UpSet facecolor for selected subsets. edgecolor : str or matplotlib color, optional Set the edgecolor for bars, dots, and the line between dots. hatch : str, optional Set the hatch. This will apply to intersection size bars, but not to matrix dots. linewidth : int, optional Line width in points for edges. linestyle : str, optional Line style for edges. label : str, optional If provided, a legend will be added """ style = {"facecolor": facecolor, "edgecolor": edgecolor, "hatch": hatch, "linewidth": linewidth, "linestyle": linestyle} style = {k: v for k, v in style.items() if v is not None} mask = _get_subset_mask(self.intersections, present=present, absent=absent, min_subset_size=min_subset_size, max_subset_size=max_subset_size, min_degree=min_degree, max_degree=max_degree) for idx in np.flatnonzero(mask): self.subset_styles[idx].update(style) if label is not None: if "facecolor" not in style: style["facecolor"] = self._facecolor for i, (other_style, other_label) in enumerate(self.subset_legend): if other_style == style: if other_label != label: self.subset_legend[i] = (style, other_label + '; ' + label) break else: self.subset_legend.append((style, label)) def _plot_bars(self, ax, data, title, colors=None, use_labels=False): ax = self._reorient(ax) ax.set_autoscalex_on(False) data_df = pd.DataFrame(data) if self._horizontal: data_df = data_df.loc[:, ::-1] # reverse: top row is top of stack # TODO: colors should be broadcastable to data_df shape if callable(colors): colors = colors(range(data_df.shape[1])) elif isinstance(colors, (str, type(None))): colors = [colors] * len(data_df) if self._horizontal: colors = reversed(colors) x = np.arange(len(data_df)) cum_y = None all_rects = [] for (name, y), color in zip(data_df.items(), colors): rects = ax.bar(x, y, .5, cum_y, color=color, zorder=10, label=name if use_labels else None, align='center') cum_y = y if cum_y is None else cum_y + y all_rects.extend(rects) self._label_sizes(ax, rects, 'top' if self._horizontal else 'right') ax.xaxis.set_visible(False) for x in ['top', 'bottom', 'right']: ax.spines[self._reorient(x)].set_visible(False) tick_axis = ax.yaxis tick_axis.grid(True) ax.set_ylabel(title) return all_rects def _plot_stacked_bars(self, ax, by, sum_over, colors, title): df = self._df.set_index("_bin").set_index(by, append=True, drop=False) gb = df.groupby(level=list(range(df.index.nlevels)), sort=True) if sum_over is None and "_value" in df.columns: data = gb["_value"].sum() elif sum_over is None: data = gb.size() else: data = gb[sum_over].sum() data = data.unstack(by).fillna(0) if isinstance(colors, str): colors = matplotlib.cm.get_cmap(colors) elif isinstance(colors, typing.Mapping): colors = data.columns.map(colors).values if pd.isna(colors).any(): raise KeyError("Some labels mapped by colors: %r" % data.columns[pd.isna(colors)].tolist()) self._plot_bars(ax, data=data, colors=colors, title=title, use_labels=True) handles, labels = ax.get_legend_handles_labels() if self._horizontal: # Make legend order match visual stack order ax.legend(reversed(handles), reversed(labels)) else: ax.legend() def add_stacked_bars(self, by, sum_over=None, colors=None, elements=3, title=None): """Add a stacked bar chart over subsets when :func:`plot` is called. Used to plot categorical variable distributions within each subset. .. versionadded:: 0.6 Parameters ---------- by : str Column name within the dataframe for color coding the stacked bars, containing discrete or categorical values. sum_over : str, optional Ordinarily the bars will chart the size of each group. sum_over may specify a column which will be summed to determine the size of each bar. colors : Mapping, list-like, str or callable, optional The facecolors to use for bars corresponding to each discrete label, specified as one of: Mapping Maps from label to matplotlib-compatible color specification. list-like A list of matplotlib colors to apply to labels in order. str The name of a matplotlib colormap name. callable When called with the number of labels, this should return a list-like of that many colors. Matplotlib colormaps satisfy this callable API. None Uses the matplotlib default colormap. elements : int, default=3 Size of the axes counted in number of matrix elements. title : str, optional The axis title labelling bar length. Returns ------- None """ # TODO: allow sort_by = {"lexical", "sum_squares", "rev_sum_squares", # list of labels} self._subset_plots.append({'type': 'stacked_bars', 'by': by, 'sum_over': sum_over, 'colors': colors, 'title': title, 'id': 'extra%d' % len(self._subset_plots), 'elements': elements}) def add_catplot(self, kind, value=None, elements=3, **kw): """Add a seaborn catplot over subsets when :func:`plot` is called. Parameters ---------- kind : str One of {"point", "bar", "strip", "swarm", "box", "violin", "boxen"} value : str, optional Column name for the value to plot (i.e. y if orientation='horizontal'), required if `data` is a DataFrame. elements : int, default=3 Size of the axes counted in number of matrix elements. **kw : dict Additional keywords to pass to :func:`seaborn.catplot`. Our implementation automatically determines 'ax', 'data', 'x', 'y' and 'orient', so these are prohibited keys in `kw`. Returns ------- None """ assert not set(kw.keys()) & {'ax', 'data', 'x', 'y', 'orient'} if value is None: if '_value' not in self._df.columns: raise ValueError('value cannot be set if data is a Series. ' 'Got %r' % value) else: if value not in self._df.columns: raise ValueError('value %r is not a column in data' % value) self._subset_plots.append({'type': 'catplot', 'value': value, 'kind': kind, 'id': 'extra%d' % len(self._subset_plots), 'elements': elements, 'kw': kw}) def _check_value(self, value): if value is None and '_value' in self._df.columns: value = '_value' elif value is None: raise ValueError('value can only be None when data is a Series') return value def _plot_catplot(self, ax, value, kind, kw): df = self._df value = self._check_value(value) kw = kw.copy() if self._horizontal: kw['orient'] = 'v' kw['x'] = '_bin' kw['y'] = value else: kw['orient'] = 'h' kw['x'] = value kw['y'] = '_bin' import seaborn kw['ax'] = ax getattr(seaborn, kind + 'plot')(data=df, **kw) ax = self._reorient(ax) if value == '_value': ax.set_ylabel('') ax.xaxis.set_visible(False) for x in ['top', 'bottom', 'right']: ax.spines[self._reorient(x)].set_visible(False) tick_axis = ax.yaxis tick_axis.grid(True) def make_grid(self, fig=None): """Get a SubplotSpec for each Axes, accounting for label text width """ n_cats = len(self.totals) n_inters = len(self.intersections) if fig is None: fig = plt.gcf() # Determine text size to determine figure size / spacing text_kw = {"size": matplotlib.rcParams['xtick.labelsize']} # adding "x" ensures a margin t = fig.text(0, 0, '\n'.join(str(label) + "x" for label in self.totals.index.values), **text_kw) window_extent_args = {} if RENDERER_IMPORTED: window_extent_args["renderer"] = get_renderer(fig) textw = t.get_window_extent(**window_extent_args).width t.remove() window_extent_args = {} if RENDERER_IMPORTED: window_extent_args["renderer"] = get_renderer(fig) figw = self._reorient( fig.get_window_extent(**window_extent_args)).width sizes = np.asarray([p['elements'] for p in self._subset_plots]) fig = self._reorient(fig) non_text_nelems = len(self.intersections) + self._totals_plot_elements if self._element_size is None: colw = (figw - textw) / non_text_nelems else: render_ratio = figw / fig.get_figwidth() colw = self._element_size / 72 * render_ratio figw = colw * (non_text_nelems + np.ceil(textw / colw) + 1) fig.set_figwidth(figw / render_ratio) fig.set_figheight((colw * (n_cats + sizes.sum())) / render_ratio) text_nelems = int(np.ceil(figw / colw - non_text_nelems)) # print('textw', textw, 'figw', figw, 'colw', colw, # 'ncols', figw/colw, 'text_nelems', text_nelems) GS = self._reorient(matplotlib.gridspec.GridSpec) gridspec = GS(*self._swapaxes(n_cats + (sizes.sum() or 0), n_inters + text_nelems + self._totals_plot_elements), hspace=1) if self._horizontal: out = {'matrix': gridspec[-n_cats:, -n_inters:], 'shading': gridspec[-n_cats:, :], 'totals': gridspec[-n_cats:, :self._totals_plot_elements], 'gs': gridspec} cumsizes = np.cumsum(sizes[::-1]) for start, stop, plot in zip(np.hstack([[0], cumsizes]), cumsizes, self._subset_plots[::-1]): out[plot['id']] = gridspec[start:stop, -n_inters:] else: out = {'matrix': gridspec[-n_inters:, :n_cats], 'shading': gridspec[:, :n_cats], 'totals': gridspec[:self._totals_plot_elements, :n_cats], 'gs': gridspec} cumsizes = np.cumsum(sizes) for start, stop, plot in zip(np.hstack([[0], cumsizes]), cumsizes, self._subset_plots): out[plot['id']] = \ gridspec[-n_inters:, start + n_cats:stop + n_cats] return out def plot_matrix(self, ax): """Plot the matrix of intersection indicators onto ax """ ax = self._reorient(ax) data = self.intersections n_cats = data.index.nlevels inclusion = data.index.to_frame().values # Prepare styling styles = [ [ self.subset_styles[i] if inclusion[i, j] else {"facecolor": self._other_dots_color, "linewidth": 0} for j in range(n_cats) ] for i in range(len(data)) ] styles = sum(styles, []) # flatten nested list style_columns = {"facecolor": "facecolors", "edgecolor": "edgecolors", "linewidth": "linewidths", "linestyle": "linestyles", "hatch": "hatch"} styles = pd.DataFrame(styles).reindex(columns=style_columns.keys()) styles["linewidth"].fillna(1, inplace=True) styles["facecolor"].fillna(self._facecolor, inplace=True) styles["edgecolor"].fillna(styles["facecolor"], inplace=True) styles["linestyle"].fillna("solid", inplace=True) del styles["hatch"] # not supported in matrix (currently) x = np.repeat(np.arange(len(data)), n_cats) y = np.tile(np.arange(n_cats), len(data)) # Plot dots if self._element_size is not None: s = (self._element_size * .35) ** 2 else: # TODO: make s relative to colw s = 200 ax.scatter(*self._swapaxes(x, y), s=s, zorder=10, **styles.rename(columns=style_columns)) # Plot lines if self._with_lines: idx = np.flatnonzero(inclusion) line_data = (pd.Series(y[idx], index=x[idx]) .groupby(level=0) .aggregate(['min', 'max'])) colors = pd.Series([ style.get("edgecolor", style.get("facecolor", self._facecolor)) for style in self.subset_styles], name="color") line_data = line_data.join(colors) ax.vlines(line_data.index.values, line_data['min'], line_data['max'], lw=2, colors=line_data["color"], zorder=5) # Ticks and axes tick_axis = ax.yaxis tick_axis.set_ticks(np.arange(n_cats)) tick_axis.set_ticklabels(data.index.names, rotation=0 if self._horizontal else -90) ax.xaxis.set_visible(False) ax.tick_params(axis='both', which='both', length=0) if not self._horizontal: ax.yaxis.set_ticks_position('top') ax.set_frame_on(False) ax.set_xlim(-.5, x[-1] + .5, auto=False) ax.grid(False) def plot_intersections(self, ax): """Plot bars indicating intersection size """ rects = self._plot_bars(ax, self.intersections, title='Intersection size', colors=self._facecolor) for style, rect in zip(self.subset_styles, rects): style = style.copy() style.setdefault("edgecolor", style.get("facecolor", self._facecolor)) for attr, val in style.items(): getattr(rect, "set_" + attr)(val) if self.subset_legend: styles, labels = zip(*self.subset_legend) styles = [patches.Patch(**patch_style) for patch_style in styles] ax.legend(styles, labels) def _label_sizes(self, ax, rects, where): if not self._show_counts and not self._show_percentages: return if self._show_counts is True: count_fmt = "{:.0f}" else: count_fmt = self._show_counts if '{' not in count_fmt: count_fmt = util.to_new_pos_format(count_fmt) if self._show_percentages is True: pct_fmt = "{:.1%}" else: pct_fmt = self._show_percentages if count_fmt and pct_fmt: if where == 'top': fmt = '%s\n(%s)' % (count_fmt, pct_fmt) else: fmt = '%s (%s)' % (count_fmt, pct_fmt) def make_args(val): return val, val / self.total elif count_fmt: fmt = count_fmt def make_args(val): return val, else: fmt = pct_fmt def make_args(val): return val / self.total, if where == 'right': margin = 0.01 * abs(np.diff(ax.get_xlim())) for rect in rects: width = rect.get_width() + rect.get_x() ax.text(width + margin, rect.get_y() + rect.get_height() * .5, fmt.format(*make_args(width)), ha='left', va='center') elif where == 'left': margin = 0.01 * abs(np.diff(ax.get_xlim())) for rect in rects: width = rect.get_width() + rect.get_x() ax.text(width + margin, rect.get_y() + rect.get_height() * .5, fmt.format(*make_args(width)), ha='right', va='center') elif where == 'top': margin = 0.01 * abs(np.diff(ax.get_ylim())) for rect in rects: height = rect.get_height() + rect.get_y() ax.text(rect.get_x() + rect.get_width() * .5, height + margin, fmt.format(*make_args(height)), ha='center', va='bottom') else: raise NotImplementedError('unhandled where: %r' % where) def plot_totals(self, ax): """Plot bars indicating total set size """ orig_ax = ax ax = self._reorient(ax) rects = ax.barh(np.arange(len(self.totals.index.values)), self.totals, .5, color=self._facecolor, align='center') self._label_sizes(ax, rects, 'left' if self._horizontal else 'top') max_total = self.totals.max() if self._horizontal: orig_ax.set_xlim(max_total, 0) for x in ['top', 'left', 'right']: ax.spines[self._reorient(x)].set_visible(False) ax.yaxis.set_visible(False) ax.xaxis.grid(True) ax.yaxis.grid(False) ax.patch.set_visible(False) def plot_shading(self, ax): # alternating row shading (XXX: use add_patch(Rectangle)?) for i in range(0, len(self.totals), 2): rect = plt.Rectangle(self._swapaxes(0, i - .4), *self._swapaxes(*(1, .8)), facecolor=self._shading_color, lw=0, zorder=0) ax.add_patch(rect) ax.set_frame_on(False) ax.tick_params( axis='both', which='both', left=False, right=False, bottom=False, top=False, labelbottom=False, labelleft=False) ax.grid(False) ax.set_xticks([]) ax.set_yticks([]) ax.set_xticklabels([]) ax.set_yticklabels([]) def plot(self, fig=None): """Draw all parts of the plot onto fig or a new figure Parameters ---------- fig : matplotlib.figure.Figure, optional Defaults to a new figure. Returns ------- subplots : dict of matplotlib.axes.Axes Keys are 'matrix', 'intersections', 'totals', 'shading' """ if fig is None: fig = plt.figure(figsize=self._default_figsize) specs = self.make_grid(fig) shading_ax = fig.add_subplot(specs['shading']) self.plot_shading(shading_ax) matrix_ax = self._reorient(fig.add_subplot)(specs['matrix'], sharey=shading_ax) self.plot_matrix(matrix_ax) totals_ax = self._reorient(fig.add_subplot)(specs['totals'], sharey=matrix_ax) self.plot_totals(totals_ax) out = {'matrix': matrix_ax, 'shading': shading_ax, 'totals': totals_ax} for plot in self._subset_plots: ax = self._reorient(fig.add_subplot)(specs[plot['id']], sharex=matrix_ax) if plot['type'] == 'default': self.plot_intersections(ax) elif plot['type'] in self.PLOT_TYPES: kw = plot.copy() del kw['type'] del kw['elements'] del kw['id'] self.PLOT_TYPES[plot['type']](self, ax, **kw) else: raise ValueError('Unknown subset plot type: %r' % plot['type']) out[plot['id']] = ax return out PLOT_TYPES = { 'catplot': _plot_catplot, 'stacked_bars': _plot_stacked_bars, } def _repr_html_(self): fig = plt.figure(figsize=self._default_figsize) self.plot(fig=fig) return fig._repr_html_() def plot(data, fig=None, **kwargs): """Make an UpSet plot of data on fig Parameters ---------- data : pandas.Series or pandas.DataFrame Values for each set to plot. Should have multi-index where each level is binary, corresponding to set membership. If a DataFrame, `sum_over` must be a string or False. fig : matplotlib.figure.Figure, optional Defaults to a new figure. kwargs Other arguments for :class:`UpSet` Returns ------- subplots : dict of matplotlib.axes.Axes Keys are 'matrix', 'intersections', 'totals', 'shading' """ return UpSet(data, **kwargs).plot(fig) UpSetPlot-0.8.0/upsetplot/reformat.py000066400000000000000000000325721435554746600177020ustar00rootroot00000000000000from __future__ import print_function, division, absolute_import try: import typing except ImportError: import collections as typing import numpy as np import pandas as pd def _aggregate_data(df, subset_size, sum_over): """ Returns ------- df : DataFrame full data frame aggregated : Series aggregates """ _SUBSET_SIZE_VALUES = ['auto', 'count', 'sum'] if subset_size not in _SUBSET_SIZE_VALUES: raise ValueError('subset_size should be one of %s. Got %r' % (_SUBSET_SIZE_VALUES, subset_size)) if df.ndim == 1: # Series input_name = df.name df = pd.DataFrame({'_value': df}) if subset_size == 'auto' and not df.index.is_unique: raise ValueError('subset_size="auto" cannot be used for a ' 'Series with non-unique groups.') if sum_over is not None: raise ValueError('sum_over is not applicable when the input is a ' 'Series') if subset_size == 'count': sum_over = False else: sum_over = '_value' else: # DataFrame if sum_over is False: raise ValueError('Unsupported value for sum_over: False') elif subset_size == 'auto' and sum_over is None: sum_over = False elif subset_size == 'count': if sum_over is not None: raise ValueError('sum_over cannot be set if subset_size=%r' % subset_size) sum_over = False elif subset_size == 'sum': if sum_over is None: raise ValueError('sum_over should be a field name if ' 'subset_size="sum" and a DataFrame is ' 'provided.') gb = df.groupby(level=list(range(df.index.nlevels)), sort=False) if sum_over is False: aggregated = gb.size() aggregated.name = 'size' elif hasattr(sum_over, 'lower'): aggregated = gb[sum_over].sum() else: raise ValueError('Unsupported value for sum_over: %r' % sum_over) if aggregated.name == '_value': aggregated.name = input_name return df, aggregated def _check_index(df): # check all indices are boolean if not all(set([True, False]) >= set(level) for level in df.index.levels): raise ValueError('The DataFrame has values in its index that are not ' 'boolean') df = df.copy(deep=False) # XXX: this may break if input is not MultiIndex kw = {'levels': [x.astype(bool) for x in df.index.levels], 'names': df.index.names, } if hasattr(df.index, 'codes'): # compat for pandas <= 0.20 kw['codes'] = df.index.codes else: kw['labels'] = df.index.labels df.index = pd.MultiIndex(**kw) return df def _scalar_to_list(val): if not isinstance(val, (typing.Sequence, set)) or isinstance(val, str): val = [val] return val def _get_subset_mask(agg, min_subset_size, max_subset_size, min_degree, max_degree, present, absent): """Get a mask over subsets based on size, degree or category presence""" subset_mask = True if min_subset_size is not None: subset_mask = np.logical_and(subset_mask, agg >= min_subset_size) if max_subset_size is not None: subset_mask = np.logical_and(subset_mask, agg <= max_subset_size) if (min_degree is not None and min_degree >= 0) or max_degree is not None: degree = agg.index.to_frame().sum(axis=1) if min_degree is not None: subset_mask = np.logical_and(subset_mask, degree >= min_degree) if max_degree is not None: subset_mask = np.logical_and(subset_mask, degree <= max_degree) if present is not None: for col in _scalar_to_list(present): subset_mask = np.logical_and( subset_mask, agg.index.get_level_values(col).values) if absent is not None: for col in _scalar_to_list(absent): exclude_mask = np.logical_not( agg.index.get_level_values(col).values) subset_mask = np.logical_and(subset_mask, exclude_mask) return subset_mask def _filter_subsets(df, agg, min_subset_size, max_subset_size, min_degree, max_degree, present, absent): subset_mask = _get_subset_mask(agg, min_subset_size=min_subset_size, max_subset_size=max_subset_size, min_degree=min_degree, max_degree=max_degree, present=present, absent=absent) if subset_mask is True: return df, agg agg = agg[subset_mask] df = df[df.index.isin(agg.index)] return df, agg class QueryResult: """Container for reformatted data and aggregates Attributes ---------- data : DataFrame Selected samples. The index is a MultiIndex with one boolean level for each category. subsets : dict[frozenset, DataFrame] Dataframes for each intersection of categories. subset_sizes : Series Total size of each selected subset as a series. The index is as for `data`. category_totals : Series Total size of each category, regardless of selection. """ def __init__(self, data, subset_sizes, category_totals): self.data = data self.subset_sizes = subset_sizes self.category_totals = category_totals def __repr__(self): return ("QueryResult(data={data}, subset_sizes={subset_sizes}, " "category_totals={category_totals}".format(**vars(self))) @property def subsets(self): categories = np.asarray(self.data.index.names) return { frozenset(categories.take(mask)): subset_data for mask, subset_data in self.data.groupby(level=list(range(len(categories))), sort=False) } def query(data, present=None, absent=None, min_subset_size=None, max_subset_size=None, min_degree=None, max_degree=None, sort_by='degree', sort_categories_by='cardinality', subset_size='auto', sum_over=None, include_empty_subsets=False): """Transform and filter a categorised dataset Retrieve the set of items and totals corresponding to subsets of interest. Parameters ---------- data : pandas.Series or pandas.DataFrame Elements associated with categories (a DataFrame), or the size of each subset of categories (a Series). Should have MultiIndex where each level is binary, corresponding to category membership. If a DataFrame, `sum_over` must be a string or False. present : str or list of str, optional Category or categories that must be present in subsets for styling. absent : str or list of str, optional Category or categories that must not be present in subsets for styling. min_subset_size : int, optional Minimum size of a subset to be reported. All subsets with a size smaller than this threshold will be omitted from category_totals and data. Size may be a sum of values, see `subset_size`. max_subset_size : int, optional Maximum size of a subset to be reported. min_degree : int, optional Minimum degree of a subset to be reported. max_degree : int, optional Maximum degree of a subset to be reported. sort_by : {'cardinality', 'degree', '-cardinality', '-degree', 'input', '-input'} If 'cardinality', subset are listed from largest to smallest. If 'degree', they are listed in order of the number of categories intersected. If 'input', the order they appear in the data input is used. Prefix with '-' to reverse the ordering. Note this affects ``subset_sizes`` but not ``data``. sort_categories_by : {'cardinality', '-cardinality', 'input', '-input'} Whether to sort the categories by total cardinality, or leave them in the input data's provided order (order of index levels). Prefix with '-' to reverse the ordering. subset_size : {'auto', 'count', 'sum'} Configures how to calculate the size of a subset. Choices are: 'auto' (default) If `data` is a DataFrame, count the number of rows in each group, unless `sum_over` is specified. If `data` is a Series with at most one row for each group, use the value of the Series. If `data` is a Series with more than one row per group, raise a ValueError. 'count' Count the number of rows in each group. 'sum' Sum the value of the `data` Series, or the DataFrame field specified by `sum_over`. sum_over : str or None If `subset_size='sum'` or `'auto'`, then the intersection size is the sum of the specified field in the `data` DataFrame. If a Series, only None is supported and its value is summed. include_empty_subsets : bool (default=False) If True, all possible category combinations will be returned in subset_sizes, even when some are not present in data. Returns ------- QueryResult Including filtered ``data``, filtered and sorted ``subset_sizes`` and overall ``category_totals``. Examples -------- >>> from upsetplot import query, generate_samples >>> data = generate_samples(n_samples=20) >>> result = query(data, present="cat1", max_subset_size=4) >>> result.category_totals cat1 14 cat2 4 cat0 0 dtype: int64 >>> result.subset_sizes cat1 cat2 cat0 True True False 3 Name: size, dtype: int64 >>> result.data index value cat1 cat2 cat0 True True False 0 2.04... False 2 2.05... False 10 2.55... >>> >>> # Sorting: >>> query(data, min_degree=1, sort_by="degree").subset_sizes cat1 cat2 cat0 True False False 11 False True False 1 True True False 3 Name: size, dtype: int64 >>> query(data, min_degree=1, sort_by="cardinality").subset_sizes cat1 cat2 cat0 True False False 11 True False 3 False True False 1 Name: size, dtype: int64 >>> >>> # Getting each subset's data >>> result = query(data) >>> result.subsets[frozenset({"cat1", "cat2"})] index value cat1 cat2 cat0 False True False 3 1.333795 >>> result.subsets[frozenset({"cat1"})] index value cat1 cat2 cat0 False False False 5 0.918174 False 8 1.948521 False 9 1.086599 False 13 1.105696 False 19 1.339895 """ data, agg = _aggregate_data(data, subset_size, sum_over) data = _check_index(data) totals = [agg[agg.index.get_level_values(name).values.astype(bool)].sum() for name in agg.index.names] totals = pd.Series(totals, index=agg.index.names) if include_empty_subsets: nlevels = len(agg.index.levels) if nlevels > 10: raise ValueError( "include_empty_subsets is supported for at most 10 categories") new_agg = pd.Series(0, index=pd.MultiIndex.from_product( [[False, True]] * nlevels, names=agg.index.names), dtype=agg.dtype, name=agg.name) new_agg.update(agg) agg = new_agg data, agg = _filter_subsets(data, agg, min_subset_size=min_subset_size, max_subset_size=max_subset_size, min_degree=min_degree, max_degree=max_degree, present=present, absent=absent) # sort: if sort_categories_by in ('cardinality', '-cardinality'): totals.sort_values(ascending=sort_categories_by[:1] == '-', inplace=True) elif sort_categories_by == '-input': totals = totals[::-1] elif sort_categories_by in (None, 'input'): pass else: raise ValueError('Unknown sort_categories_by: %r' % sort_categories_by) data = data.reorder_levels(totals.index.values) agg = agg.reorder_levels(totals.index.values) if sort_by in ('cardinality', '-cardinality'): agg = agg.sort_values(ascending=sort_by[:1] == '-') elif sort_by in ('degree', '-degree'): index_tuples = sorted(agg.index, key=lambda x: (sum(x),) + tuple(reversed(x)), reverse=sort_by[:1] == '-') agg = agg.reindex(pd.MultiIndex.from_tuples(index_tuples, names=agg.index.names)) elif sort_by == '-input': print("<", agg) agg = agg[::-1] print(">", agg) elif sort_by in (None, 'input'): pass else: raise ValueError('Unknown sort_by: %r' % sort_by) return QueryResult(data=data, subset_sizes=agg, category_totals=totals) UpSetPlot-0.8.0/upsetplot/tests/000077500000000000000000000000001435554746600166425ustar00rootroot00000000000000UpSetPlot-0.8.0/upsetplot/tests/__init__.py000066400000000000000000000000001435554746600207410ustar00rootroot00000000000000UpSetPlot-0.8.0/upsetplot/tests/test_data.py000066400000000000000000000217221435554746600211700ustar00rootroot00000000000000from collections import OrderedDict import pytest import pandas as pd import numpy as np from distutils.version import LooseVersion from pandas.util.testing import (assert_series_equal, assert_frame_equal, assert_index_equal) from upsetplot import (from_memberships, from_contents, from_indicators, generate_data) @pytest.mark.parametrize('typ', [set, list, tuple, iter]) def test_from_memberships_no_data(typ): with pytest.raises(ValueError, match='at least one category'): from_memberships([]) with pytest.raises(ValueError, match='at least one category'): from_memberships([[], []]) with pytest.raises(ValueError, match='strings'): from_memberships([[1]]) with pytest.raises(ValueError, match='strings'): from_memberships([[1, 'str']]) with pytest.raises(TypeError): from_memberships([1]) out = from_memberships([typ([]), typ(['hello']), typ(['world']), typ(['hello', 'world']), ]) exp = pd.DataFrame([[False, False, 1], [True, False, 1], [False, True, 1], [True, True, 1]], columns=['hello', 'world', 'ones'] ).set_index(['hello', 'world'])['ones'] assert isinstance(exp.index, pd.MultiIndex) assert_series_equal(exp, out) # test sorting by name out = from_memberships([typ(['hello']), typ(['world'])]) exp = pd.DataFrame([[True, False, 1], [False, True, 1]], columns=['hello', 'world', 'ones'] ).set_index(['hello', 'world'])['ones'] assert_series_equal(exp, out) out = from_memberships([typ(['world']), typ(['hello'])]) exp = pd.DataFrame([[False, True, 1], [True, False, 1]], columns=['hello', 'world', 'ones'] ).set_index(['hello', 'world'])['ones'] assert_series_equal(exp, out) @pytest.mark.parametrize('data,ndim', [ ([1, 2, 3, 4], 1), (np.array([1, 2, 3, 4]), 1), (pd.Series([1, 2, 3, 4], name='foo'), 1), ([[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd']], 2), (pd.DataFrame([[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd']], columns=['foo', 'bar'], index=['q', 'r', 's', 't']), 2), ]) def test_from_memberships_with_data(data, ndim): memberships = [[], ['hello'], ['world'], ['hello', 'world']] out = from_memberships(memberships, data=data) assert out is not data # make sure frame is copied if hasattr(data, 'loc') and np.asarray(data).dtype.kind in 'ifb': # but not deepcopied when possible if LooseVersion(pd.__version__) > LooseVersion('0.35'): assert out.values.base is np.asarray(data).base if ndim == 1: assert isinstance(out, pd.Series) else: assert isinstance(out, pd.DataFrame) assert_frame_equal(pd.DataFrame(out).reset_index(drop=True), pd.DataFrame(data).reset_index(drop=True)) no_data = from_memberships(memberships=memberships) assert_index_equal(out.index, no_data.index) with pytest.raises(ValueError, match='length'): from_memberships(memberships[:-1], data=data) @pytest.mark.parametrize('data', [None, {'attr1': [3, 4, 5, 6, 7, 8], 'attr2': list('qrstuv')}]) @pytest.mark.parametrize('typ', [set, list, tuple, iter]) @pytest.mark.parametrize('id_column', ['id', 'blah']) def test_from_contents_vs_memberships(data, typ, id_column): contents = OrderedDict([('cat1', typ(['aa', 'bb', 'cc'])), ('cat2', typ(['cc', 'dd'])), ('cat3', typ(['ee']))]) # Note that ff is not present in contents data_df = pd.DataFrame(data, index=['aa', 'bb', 'cc', 'dd', 'ee', 'ff']) baseline = from_contents(contents, data=data_df, id_column=id_column) # compare from_contents to from_memberships expected = from_memberships(memberships=[{'cat1'}, {'cat1'}, {'cat1', 'cat2'}, {'cat2'}, {'cat3'}, []], data=data_df) assert_series_equal(baseline[id_column].reset_index(drop=True), pd.Series(['aa', 'bb', 'cc', 'dd', 'ee', 'ff'], name=id_column)) assert_frame_equal(baseline.drop([id_column], axis=1), expected) def test_from_contents(typ=set, id_column='id'): contents = OrderedDict([('cat1', {'aa', 'bb', 'cc'}), ('cat2', {'cc', 'dd'}), ('cat3', {'ee'})]) empty_data = pd.DataFrame(index=['aa', 'bb', 'cc', 'dd', 'ee']) baseline = from_contents(contents, data=empty_data, id_column=id_column) # data=None out = from_contents(contents, id_column=id_column) assert_frame_equal(out.sort_values(id_column), baseline) # unordered contents dict out = from_contents({'cat3': contents['cat3'], 'cat2': contents['cat2'], 'cat1': contents['cat1']}, data=empty_data, id_column=id_column) assert_frame_equal(out.reorder_levels(['cat1', 'cat2', 'cat3']), baseline) # empty category out = from_contents({'cat1': contents['cat1'], 'cat2': contents['cat2'], 'cat3': contents['cat3'], 'cat4': []}, data=empty_data, id_column=id_column) assert not out.index.to_frame()['cat4'].any() # cat4 should be all-false assert len(out.index.names) == 4 out.index = out.index.to_frame().set_index(['cat1', 'cat2', 'cat3']).index assert_frame_equal(out, baseline) @pytest.mark.parametrize('id_column', ['id', 'blah']) def test_from_contents_invalid(id_column): contents = OrderedDict([('cat1', {'aa', 'bb', 'cc'}), ('cat2', {'cc', 'dd'}), ('cat3', {'ee'})]) with pytest.raises(ValueError, match='columns overlap'): from_contents(contents, data=pd.DataFrame({'cat1': [1, 2, 3, 4, 5]}), id_column=id_column) with pytest.raises(ValueError, match='duplicate ids'): from_contents({'cat1': ['aa', 'bb'], 'cat2': ['dd', 'dd']}, id_column=id_column) # category named id with pytest.raises(ValueError, match='cannot be named'): from_contents({id_column: {'aa', 'bb', 'cc'}, 'cat2': {'cc', 'dd'}, }, id_column=id_column) # category named id with pytest.raises(ValueError, match='cannot contain'): from_contents(contents, data=pd.DataFrame({id_column: [1, 2, 3, 4, 5]}, index=['aa', 'bb', 'cc', 'dd', 'ee']), id_column=id_column) with pytest.raises(ValueError, match='identifiers in contents'): from_contents({'cat1': ['aa']}, data=pd.DataFrame([[1]]), id_column=id_column) @pytest.mark.parametrize('indicators,data,exc_type,match', [ (["a", "b"], None, ValueError, "data must be provided"), (lambda df: [True, False, True], None, ValueError, "data must be provided"), (["a", "unknown_col"], {"a": [1, 2, 3]}, KeyError, "unknown_col"), (("a",), {"a": [1, 2, 3]}, ValueError, "tuple"), ({"cat1": [0, 1, 1]}, {"a": [1, 2, 3]}, ValueError, "must all be boolean"), (pd.DataFrame({"cat1": [True, False, True]}, index=["a", "b", "c"]), {"A": [1, 2, 3]}, ValueError, "all its values must be present"), ]) def test_from_indicators_invalid(indicators, data, exc_type, match): with pytest.raises(exc_type, match=match): from_indicators(indicators=indicators, data=data) @pytest.mark.parametrize('indicators', [ pd.DataFrame({"cat1": [False, True, False]}), pd.DataFrame({"cat1": [False, True, False]}, dtype="O"), {"cat1": [False, True, False]}, lambda data: {"cat1": {pd.DataFrame(data).index.values[1]: True}}, ]) @pytest.mark.parametrize('data', [ pd.DataFrame({"val1": [3, 4, 5]}), pd.DataFrame({"val1": [3, 4, 5]}, index=["a", "b", "c"]), {"val1": [3, 4, 5]}, ]) def test_from_indicators_equivalence(indicators, data): assert_frame_equal(from_indicators(indicators, data), from_memberships([[], ["cat1"], []], data)) def test_generate_data_warning(): with pytest.warns(DeprecationWarning): generate_data() UpSetPlot-0.8.0/upsetplot/tests/test_examples.py000066400000000000000000000007651435554746600221010ustar00rootroot00000000000000import glob import os import subprocess import sys import pytest exa_glob = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', 'examples', '*.py') @pytest.mark.parametrize('path', glob.glob(exa_glob)) def test_example(path): pytest.importorskip('sklearn') pytest.importorskip('seaborn') env = os.environ.copy() env["PYTHONPATH"] = os.getcwd() + ":" + env.get("PYTHONPATH", "") subprocess.check_output([sys.executable, path], env=env) UpSetPlot-0.8.0/upsetplot/tests/test_reformat.py000066400000000000000000000032311435554746600220710ustar00rootroot00000000000000import pytest import pandas as pd from pandas.util.testing import assert_series_equal, assert_frame_equal from upsetplot import generate_counts, generate_samples from upsetplot import query # `query` is mostly tested through plotting tests, especially tests of # `_process_data` which cover sort_by, sort_categories_by, subset_size # and sum_over. @pytest.mark.parametrize('data', [ generate_counts(), generate_samples(), ]) @pytest.mark.parametrize('param_set', [ [{"present": "cat1"}, {"absent": "cat1"}], [{"max_degree": 0}, {"min_degree": 1, "max_degree": 2}, {"min_degree": 3}], [{"max_subset_size": 30}, {"min_subset_size": 31}], [{"present": "cat1", "max_subset_size": 30}, {"absent": "cat1", "max_subset_size": 30}, {"present": "cat1", "min_subset_size": 31}, {"absent": "cat1", "min_subset_size": 31}, ], ]) def test_mece_queries(data, param_set): unfiltered_results = query(data) all_results = [query(data, **params) for params in param_set] # category_totals is unaffected by filter for results in all_results: assert_series_equal(unfiltered_results.category_totals, results.category_totals) combined_data = pd.concat([results.data for results in all_results]) combined_data.sort_index(inplace=True) assert_frame_equal(unfiltered_results.data.sort_index(), combined_data) combined_sizes = pd.concat([results.subset_sizes for results in all_results]) combined_sizes.sort_index(inplace=True) assert_series_equal(unfiltered_results.subset_sizes.sort_index(), combined_sizes) UpSetPlot-0.8.0/upsetplot/tests/test_upsetplot.py000066400000000000000000001115171435554746600223200ustar00rootroot00000000000000import io import itertools import pytest from pandas.util.testing import ( assert_series_equal, assert_frame_equal, assert_index_equal) from numpy.testing import assert_array_equal import pandas as pd import numpy as np import matplotlib.figure import matplotlib.pyplot as plt from matplotlib.text import Text from matplotlib.colors import to_hex from matplotlib import cm from upsetplot import plot from upsetplot import UpSet from upsetplot import generate_counts, generate_samples from upsetplot.plotting import _process_data # TODO: warnings should raise errors def is_ascending(seq): # return np.all(np.diff(seq) >= 0) return sorted(seq) == list(seq) def get_all_texts(mpl_artist): out = [text.get_text() for text in mpl_artist.findobj(Text)] return [text for text in out if text] @pytest.mark.parametrize('x', [ generate_counts(), generate_counts().iloc[1:-2], ]) @pytest.mark.parametrize( 'sort_by', ['cardinality', 'degree', '-cardinality', '-degree', None, 'input', '-input']) @pytest.mark.parametrize( 'sort_categories_by', [None, 'input', '-input', 'cardinality', '-cardinality']) def test_process_data_series(x, sort_by, sort_categories_by): assert x.name == 'value' for subset_size in ['auto', 'sum', 'count']: for sum_over in ['abc', False]: with pytest.raises(ValueError, match='sum_over is not applicable'): _process_data(x, sort_by=sort_by, sort_categories_by=sort_categories_by, subset_size=subset_size, sum_over=sum_over) # shuffle input to test sorting x = x.sample(frac=1., replace=False, random_state=0) total, df, intersections, totals = _process_data( x, subset_size='auto', sort_by=sort_by, sort_categories_by=sort_categories_by, sum_over=None) assert total == x.sum() assert intersections.name == 'value' x_reordered_levels = (x .reorder_levels(intersections.index.names)) x_reordered = (x_reordered_levels .reindex(index=intersections.index)) assert len(x) == len(x_reordered) assert x_reordered.index.is_unique assert_series_equal(x_reordered, intersections, check_dtype=False) if sort_by == 'cardinality': assert is_ascending(intersections.values[::-1]) elif sort_by == '-cardinality': assert is_ascending(intersections.values) elif sort_by == 'degree': # check degree order assert is_ascending(intersections.index.to_frame().sum(axis=1)) # TODO: within a same-degree group, the tuple of active names should # be in sort-order elif sort_by == '-degree': # check degree order assert is_ascending(intersections.index.to_frame().sum(axis=1)[::-1]) else: find_first_in_orig = x_reordered_levels.index.tolist().index orig_order = [find_first_in_orig(key) for key in intersections.index.tolist()] assert orig_order == sorted( orig_order, reverse=sort_by is not None and sort_by.startswith('-')) if sort_categories_by == 'cardinality': assert is_ascending(totals.values[::-1]) elif sort_categories_by == '-cardinality': assert is_ascending(totals.values) assert np.all(totals.index.values == intersections.index.names) assert np.all(df.index.names == intersections.index.names) assert set(df.columns) == {'_value', '_bin'} assert_index_equal(df['_value'].reorder_levels(x.index.names).index, x.index) assert_array_equal(df['_value'], x) assert_index_equal(intersections.iloc[df['_bin']].index, df.index) assert len(df) == len(x) @pytest.mark.parametrize('x', [ generate_samples()['value'], generate_counts(), ]) def test_subset_size_series(x): kw = {'sort_by': 'cardinality', 'sort_categories_by': 'cardinality', 'sum_over': None} total, df_sum, intersections_sum, totals_sum = _process_data( x, subset_size='sum', **kw) assert total == intersections_sum.sum() if x.index.is_unique: total, df, intersections, totals = _process_data( x, subset_size='auto', **kw) assert total == intersections.sum() assert_frame_equal(df, df_sum) assert_series_equal(intersections, intersections_sum) assert_series_equal(totals, totals_sum) else: with pytest.raises(ValueError): _process_data(x, subset_size='auto', **kw) total, df_count, intersections_count, totals_count = _process_data( x, subset_size='count', **kw) assert total == intersections_count.sum() total, df, intersections, totals = _process_data( x.groupby(level=list(range(len(x.index.levels)))).count(), subset_size='sum', **kw) assert total == intersections.sum() assert_series_equal(intersections, intersections_count, check_names=False) assert_series_equal(totals, totals_count) @pytest.mark.parametrize('x', [ generate_samples()['value'], ]) @pytest.mark.parametrize('sort_by', ['cardinality', 'degree', None]) @pytest.mark.parametrize('sort_categories_by', [None, 'cardinality']) def test_process_data_frame(x, sort_by, sort_categories_by): # shuffle input to test sorting x = x.sample(frac=1., replace=False, random_state=0) X = pd.DataFrame({'a': x}) with pytest.warns(None): total, df, intersections, totals = _process_data( X, sort_by=sort_by, sort_categories_by=sort_categories_by, sum_over='a', subset_size='auto') assert df is not X assert total == pytest.approx(intersections.sum()) # check equivalence to Series total1, df1, intersections1, totals1 = _process_data( x, sort_by=sort_by, sort_categories_by=sort_categories_by, subset_size='sum', sum_over=None) assert intersections.name == 'a' assert_frame_equal(df, df1.rename(columns={'_value': 'a'})) assert_series_equal(intersections, intersections1, check_names=False) assert_series_equal(totals, totals1) # check effect of extra column X = pd.DataFrame({'a': x, 'b': np.arange(len(x))}) total2, df2, intersections2, totals2 = _process_data( X, sort_by=sort_by, sort_categories_by=sort_categories_by, sum_over='a', subset_size='auto') assert total2 == pytest.approx(intersections2.sum()) assert_series_equal(intersections, intersections2) assert_series_equal(totals, totals2) assert_frame_equal(df, df2.drop('b', axis=1)) assert_array_equal(df2['b'], X['b']) # disregard levels, tested above # check effect not dependent on order/name X = pd.DataFrame({'b': np.arange(len(x)), 'c': x}) total3, df3, intersections3, totals3 = _process_data( X, sort_by=sort_by, sort_categories_by=sort_categories_by, sum_over='c', subset_size='auto') assert total3 == pytest.approx(intersections3.sum()) assert_series_equal(intersections, intersections3, check_names=False) assert intersections.name == 'a' assert intersections3.name == 'c' assert_series_equal(totals, totals3) assert_frame_equal(df.rename(columns={'a': 'c'}), df3.drop('b', axis=1)) assert_array_equal(df3['b'], X['b']) # check subset_size='count' X = pd.DataFrame({'b': np.ones(len(x), dtype='int64'), 'c': x}) total4, df4, intersections4, totals4 = _process_data( X, sort_by=sort_by, sort_categories_by=sort_categories_by, sum_over='b', subset_size='auto') total5, df5, intersections5, totals5 = _process_data( X, sort_by=sort_by, sort_categories_by=sort_categories_by, subset_size='count', sum_over=None) assert total5 == pytest.approx(intersections5.sum()) assert_series_equal(intersections4, intersections5, check_names=False) assert intersections4.name == 'b' assert intersections5.name == 'size' assert_series_equal(totals4, totals5) assert_frame_equal(df4, df5) @pytest.mark.parametrize('x', [ generate_samples()['value'], generate_counts(), ]) def test_subset_size_frame(x): kw = {'sort_by': 'cardinality', 'sort_categories_by': 'cardinality'} X = pd.DataFrame({'x': x}) total_sum, df_sum, intersections_sum, totals_sum = _process_data( X, subset_size='sum', sum_over='x', **kw) total_count, df_count, intersections_count, totals_count = _process_data( X, subset_size='count', sum_over=None, **kw) # error cases: sum_over=False for subset_size in ['auto', 'sum', 'count']: with pytest.raises(ValueError, match='sum_over'): _process_data( X, subset_size=subset_size, sum_over=False, **kw) with pytest.raises(ValueError, match='sum_over'): _process_data( X, subset_size=subset_size, sum_over=False, **kw) # error cases: sum_over incompatible with subset_size with pytest.raises(ValueError, match='sum_over should be a field'): _process_data( X, subset_size='sum', sum_over=None, **kw) with pytest.raises(ValueError, match='sum_over cannot be set'): _process_data( X, subset_size='count', sum_over='x', **kw) # check subset_size='auto' with sum_over=str => sum total, df, intersections, totals = _process_data( X, subset_size='auto', sum_over='x', **kw) assert total == intersections.sum() assert_frame_equal(df, df_sum) assert_series_equal(intersections, intersections_sum) assert_series_equal(totals, totals_sum) # check subset_size='auto' with sum_over=None => count total, df, intersections, totals = _process_data( X, subset_size='auto', sum_over=None, **kw) assert total == intersections.sum() assert_frame_equal(df, df_count) assert_series_equal(intersections, intersections_count) assert_series_equal(totals, totals_count) @pytest.mark.parametrize('sort_by', ['cardinality', 'degree']) @pytest.mark.parametrize('sort_categories_by', [None, 'cardinality']) def test_not_unique(sort_by, sort_categories_by): kw = {'sort_by': sort_by, 'sort_categories_by': sort_categories_by, 'subset_size': 'sum', 'sum_over': None} Xagg = generate_counts() total1, df1, intersections1, totals1 = _process_data(Xagg, **kw) Xunagg = generate_samples()['value'] Xunagg.loc[:] = 1 total2, df2, intersections2, totals2 = _process_data(Xunagg, **kw) assert_series_equal(intersections1, intersections2, check_dtype=False) assert total2 == intersections2.sum() assert_series_equal(totals1, totals2, check_dtype=False) assert set(df1.columns) == {'_value', '_bin'} assert set(df2.columns) == {'_value', '_bin'} assert len(df2) == len(Xunagg) assert df2['_bin'].nunique() == len(intersections2) def test_include_empty_subsets(): X = generate_counts(n_samples=2, n_categories=3) no_empty_upset = UpSet(X, include_empty_subsets=False) assert len(no_empty_upset.intersections) <= 2 include_empty_upset = UpSet(X, include_empty_subsets=True) assert len(include_empty_upset.intersections) == 2 ** 3 common_intersections = include_empty_upset.intersections.loc[ no_empty_upset.intersections.index] assert_series_equal(no_empty_upset.intersections, common_intersections) include_empty_upset.plot() # smoke test @pytest.mark.parametrize('kw', [{'sort_by': 'blah'}, {'sort_by': True}, {'sort_categories_by': 'blah'}, {'sort_categories_by': True}]) def test_param_validation(kw): X = generate_counts(n_samples=100) with pytest.raises(ValueError): UpSet(X, **kw) @pytest.mark.parametrize('kw', [{}, {'element_size': None}, {'orientation': 'vertical'}, {'intersection_plot_elements': 0}, {'facecolor': 'red'}, {'shading_color': 'lightgrey', 'other_dots_color': 'pink'}]) def test_plot_smoke_test(kw): fig = matplotlib.figure.Figure() X = generate_counts(n_samples=100) axes = plot(X, fig, **kw) fig.savefig(io.BytesIO(), format='png') attr = ('get_xlim' if kw.get('orientation', 'horizontal') == 'horizontal' else 'get_ylim') lim = getattr(axes['matrix'], attr)() expected_width = len(X) assert expected_width == lim[1] - lim[0] # Also check fig is optional n_nums = len(plt.get_fignums()) plot(X, **kw) assert len(plt.get_fignums()) - n_nums == 1 assert plt.gcf().axes @pytest.mark.parametrize('set1', itertools.product([False, True], repeat=2)) @pytest.mark.parametrize('set2', itertools.product([False, True], repeat=2)) def test_two_sets(set1, set2): # we had a bug where processing failed if no items were in some set fig = matplotlib.figure.Figure() plot(pd.DataFrame({'val': [5, 7], 'set1': set1, 'set2': set2}).set_index(['set1', 'set2'])['val'], fig, subset_size='sum') def test_vertical(): X = generate_counts(n_samples=100) fig = matplotlib.figure.Figure() UpSet(X, orientation='horizontal').make_grid(fig) horz_height = fig.get_figheight() horz_width = fig.get_figwidth() assert horz_height < horz_width fig = matplotlib.figure.Figure() UpSet(X, orientation='vertical').make_grid(fig) vert_height = fig.get_figheight() vert_width = fig.get_figwidth() assert horz_width / horz_height > vert_width / vert_height # TODO: test axes positions, plot order, bar orientation pass def test_element_size(): X = generate_counts(n_samples=100) figsizes = [] for element_size in range(10, 50, 5): fig = matplotlib.figure.Figure() UpSet(X, element_size=element_size).make_grid(fig) figsizes.append((fig.get_figwidth(), fig.get_figheight())) figwidths, figheights = zip(*figsizes) # Absolute width increases assert np.all(np.diff(figwidths) > 0) aspect = np.divide(figwidths, figheights) # Font size stays constant, so aspect ratio decreases assert np.all(np.diff(aspect) <= 1e-8) # allow for near-equality assert np.any(np.diff(aspect) < 1e-4) # require some significant decrease # But doesn't decrease by much assert np.all(aspect[:-1] / aspect[1:] < 1.1) fig = matplotlib.figure.Figure() figsize_before = fig.get_figwidth(), fig.get_figheight() UpSet(X, element_size=None).make_grid(fig) figsize_after = fig.get_figwidth(), fig.get_figheight() assert figsize_before == figsize_after # TODO: make sure axes are all within figure # TODO: make sure text does not overlap axes, even with element_size=None def _walk_artists(el): children = el.get_children() yield el, children for ch in children: for x in _walk_artists(ch): yield x def _count_descendants(el): return sum(len(children) for x, children in _walk_artists(el)) @pytest.mark.parametrize('orientation', ['horizontal', 'vertical']) def test_show_counts(orientation): fig = matplotlib.figure.Figure() X = generate_counts(n_samples=10000) plot(X, fig, orientation=orientation) n_artists_no_sizes = _count_descendants(fig) fig = matplotlib.figure.Figure() plot(X, fig, orientation=orientation, show_counts=True) n_artists_yes_sizes = _count_descendants(fig) assert n_artists_yes_sizes - n_artists_no_sizes > 6 assert '9547' in get_all_texts(fig) # set size assert '283' in get_all_texts(fig) # intersection size fig = matplotlib.figure.Figure() plot(X, fig, orientation=orientation, show_counts='%0.2g') assert n_artists_yes_sizes == _count_descendants(fig) assert '9.5e+03' in get_all_texts(fig) assert '2.8e+02' in get_all_texts(fig) fig = matplotlib.figure.Figure() plot(X, fig, orientation=orientation, show_counts='{:0.2g}') assert n_artists_yes_sizes == _count_descendants(fig) assert '9.5e+03' in get_all_texts(fig) assert '2.8e+02' in get_all_texts(fig) fig = matplotlib.figure.Figure() plot(X, fig, orientation=orientation, show_percentages=True) assert n_artists_yes_sizes == _count_descendants(fig) assert '95.5%' in get_all_texts(fig) assert '2.8%' in get_all_texts(fig) fig = matplotlib.figure.Figure() plot(X, fig, orientation=orientation, show_percentages='!{:0.2f}!') assert n_artists_yes_sizes == _count_descendants(fig) assert '!0.95!' in get_all_texts(fig) assert '!0.03!' in get_all_texts(fig) fig = matplotlib.figure.Figure() plot(X, fig, orientation=orientation, show_counts=True, show_percentages=True) assert n_artists_yes_sizes == _count_descendants(fig) if orientation == 'vertical': assert '9547\n(95.5%)' in get_all_texts(fig) assert '283 (2.8%)' in get_all_texts(fig) else: assert '9547 (95.5%)' in get_all_texts(fig) assert '283\n(2.8%)' in get_all_texts(fig) with pytest.raises(ValueError): fig = matplotlib.figure.Figure() plot(X, fig, orientation=orientation, show_counts='%0.2h') def test_add_catplot(): pytest.importorskip('seaborn') X = generate_counts(n_samples=100) upset = UpSet(X) # smoke test upset.add_catplot('violin') fig = matplotlib.figure.Figure() upset.plot(fig) # can't provide value with Series with pytest.raises(ValueError): upset.add_catplot('violin', value='foo') # check the above add_catplot did not break the state upset.plot(fig) X = generate_counts(n_samples=100) X.name = 'foo' X = X.to_frame() upset = UpSet(X, subset_size='count') # must provide value with DataFrame with pytest.raises(ValueError): upset.add_catplot('violin') upset.add_catplot('violin', value='foo') with pytest.raises(ValueError): # not a known column upset.add_catplot('violin', value='bar') upset.plot(fig) # invalid plot kind raises error when plotting upset.add_catplot('foobar', value='foo') with pytest.raises(AttributeError): upset.plot(fig) def _get_patch_data(axes, is_vertical): out = [{"y": patch.get_y(), "x": patch.get_x(), "h": patch.get_height(), "w": patch.get_width(), "fc": patch.get_facecolor(), "ec": patch.get_edgecolor(), "lw": patch.get_linewidth(), "ls": patch.get_linestyle(), "hatch": patch.get_hatch(), } for patch in axes.patches] if is_vertical: out = [{"y": patch["x"], "x": 6.5 - patch["y"], "h": patch["w"], "w": patch["h"], "fc": patch["fc"], "ec": patch["ec"], "lw": patch["lw"], "ls": patch["ls"], "hatch": patch["hatch"], } for patch in out] return pd.DataFrame(out).sort_values("x").reset_index(drop=True) def _get_color_to_label_from_legend(ax): handles, labels = ax.get_legend_handles_labels() color_to_label = { patches[0].get_facecolor(): label for patches, label in zip(handles, labels) } return color_to_label @pytest.mark.parametrize('orientation', ['horizontal', 'vertical']) @pytest.mark.parametrize('show_counts', [False, True]) def test_add_stacked_bars(orientation, show_counts): df = generate_samples() df["label"] = (pd.cut(generate_samples().value + np.random.rand() / 2, 3) .cat.codes .map({0: "foo", 1: "bar", 2: "baz"})) upset = UpSet(df, show_counts=show_counts, orientation=orientation) upset.add_stacked_bars(by="label") upset_axes = upset.plot() int_axes = upset_axes["intersections"] stacked_axes = upset_axes["extra1"] is_vertical = orientation == 'vertical' int_rects = _get_patch_data(int_axes, is_vertical) stacked_rects = _get_patch_data(stacked_axes, is_vertical) # check bar heights match between int_rects and stacked_rects assert_series_equal(int_rects.groupby("x")["h"].sum(), stacked_rects.groupby("x")["h"].sum(), check_dtype=False) # check count labels match (TODO: check coordinate) assert ([elem.get_text() for elem in int_axes.texts] == [elem.get_text() for elem in stacked_axes.texts]) color_to_label = _get_color_to_label_from_legend(stacked_axes) stacked_rects["label"] = stacked_rects["fc"].map(color_to_label) # check totals for each label assert_series_equal(stacked_rects.groupby("label")["h"].sum(), df.groupby("label").size(), check_dtype=False, check_names=False) label_order = [text_obj.get_text() for text_obj in stacked_axes.get_legend().get_texts()] # label order should be lexicographic assert label_order == sorted(label_order) if orientation == "horizontal": # order of labels in legend should match stack, top to bottom for prev, curr in zip(label_order, label_order[1:]): assert (stacked_rects.query("label == @prev") .sort_values("x")["y"].values >= stacked_rects.query("label == @curr") .sort_values("x")["y"].values).all() else: # order of labels in legend should match stack, left to right for prev, curr in zip(label_order, label_order[1:]): assert (stacked_rects.query("label == @prev") .sort_values("x")["y"].values <= stacked_rects.query("label == @curr") .sort_values("x")["y"].values).all() @pytest.mark.parametrize("colors, expected", [ (["blue", "red", "green"], ["blue", "red", "green"]), ({"bar": "blue", "baz": "red", "foo": "green"}, ["blue", "red", "green"]), ("Pastel1", ["#fbb4ae", "#b3cde3", "#ccebc5"]), (cm.viridis, ["#440154", "#440256", "#450457"]), (lambda x: cm.Pastel1(x), ["#fbb4ae", "#b3cde3", "#ccebc5"]), ]) def test_add_stacked_bars_colors(colors, expected): df = generate_samples() df["label"] = (pd.cut(generate_samples().value + np.random.rand() / 2, 3) .cat.codes .map({0: "foo", 1: "bar", 2: "baz"})) upset = UpSet(df) upset.add_stacked_bars(by="label", colors=colors, title="Count by gender") upset_axes = upset.plot() stacked_axes = upset_axes["extra1"] color_to_label = _get_color_to_label_from_legend(stacked_axes) label_to_color = {v: k for k, v in color_to_label.items()} actual = [to_hex(label_to_color[label]) for label in ["bar", "baz", "foo"]] expected = [to_hex(color) for color in expected] assert actual == expected @pytest.mark.parametrize('int_sum_over', [False, True]) @pytest.mark.parametrize('stack_sum_over', [False, True]) @pytest.mark.parametrize('show_counts', [False, True]) def test_add_stacked_bars_sum_over(int_sum_over, stack_sum_over, show_counts): # A rough test of sum_over df = generate_samples() df["label"] = (pd.cut(generate_samples().value + np.random.rand() / 2, 3) .cat.codes .map({0: "foo", 1: "bar", 2: "baz"})) upset = UpSet(df, sum_over="value" if int_sum_over else None, show_counts=show_counts) upset.add_stacked_bars(by="label", sum_over="value" if stack_sum_over else None, colors='Pastel1') upset_axes = upset.plot() int_axes = upset_axes["intersections"] stacked_axes = upset_axes["extra1"] int_rects = _get_patch_data(int_axes, is_vertical=False) stacked_rects = _get_patch_data(stacked_axes, is_vertical=False) if int_sum_over == stack_sum_over: # check bar heights match between int_rects and stacked_rects assert_series_equal(int_rects.groupby("x")["h"].sum(), stacked_rects.groupby("x")["h"].sum(), check_dtype=False) # and check labels match with show_counts assert ([elem.get_text() for elem in int_axes.texts] == [elem.get_text() for elem in stacked_axes.texts]) else: assert (int_rects.groupby("x")["h"].sum() != stacked_rects.groupby("x")["h"].sum()).all() if show_counts: assert ([elem.get_text() for elem in int_axes.texts] != [elem.get_text() for elem in stacked_axes.texts]) @pytest.mark.parametrize('x', [ generate_counts(), ]) def test_index_must_be_bool(x): # Truthy ints are okay x = x.reset_index() x[['cat0', 'cat2', 'cat2']] = x[['cat0', 'cat1', 'cat2']].astype(int) x = x.set_index(['cat0', 'cat1', 'cat2']).iloc[:, 0] UpSet(x) # other ints are not x = x.reset_index() x[['cat0', 'cat2', 'cat2']] = x[['cat0', 'cat1', 'cat2']] + 1 x = x.set_index(['cat0', 'cat1', 'cat2']).iloc[:, 0] with pytest.raises(ValueError, match='not boolean'): UpSet(x) @pytest.mark.parametrize( "filter_params, expected", [ ({"min_subset_size": 623}, {(True, False, False): 884, (True, True, False): 1547, (True, False, True): 623, (True, True, True): 990, }), ({"min_subset_size": 800, "max_subset_size": 990}, {(True, False, False): 884, (True, True, True): 990, }), ({"min_degree": 2}, {(True, True, False): 1547, (True, False, True): 623, (False, True, True): 258, (True, True, True): 990, }), ({"min_degree": 2, "max_degree": 2}, {(True, True, False): 1547, (True, False, True): 623, (False, True, True): 258, }), ({"max_subset_size": 500, "max_degree": 2}, {(False, False, False): 220, (False, True, False): 335, (False, False, True): 143, (False, True, True): 258, }), ] ) @pytest.mark.parametrize('sort_by', ['cardinality', 'degree']) def test_filter_subsets(filter_params, expected, sort_by): data = generate_samples(seed=0, n_samples=5000, n_categories=3) # data = # cat1 cat0 cat2 # False False False 220 # True False False 884 # False True False 335 # False True 143 # True True False 1547 # False True 623 # False True True 258 # True True True 990 upset_full = UpSet(data, subset_size='auto', sort_by=sort_by) upset_filtered = UpSet(data, subset_size='auto', sort_by=sort_by, **filter_params) intersections = upset_full.intersections df = upset_full._df # check integrity of expected, just to be sure for key, value in expected.items(): assert intersections.loc[key] == value subset_intersections = intersections[ intersections.index.isin(list(expected.keys()))] subset_df = df[df.index.isin(list(expected.keys()))] assert len(subset_intersections) < len(intersections) assert_series_equal(upset_filtered.intersections, subset_intersections) assert_frame_equal(upset_filtered._df.drop("_bin", axis=1), subset_df.drop("_bin", axis=1)) # category totals should not be affected assert_series_equal(upset_full.totals, upset_filtered.totals) @pytest.mark.parametrize('x', [ generate_counts(n_categories=3), generate_counts(n_categories=8), generate_counts(n_categories=15), ]) @pytest.mark.parametrize('orientation', [ 'horizontal', 'vertical', ]) def test_matrix_plot_margins(x, orientation): """Non-regression test addressing a bug where there is are large whitespace margins around the matrix when the number of intersections is large""" axes = plot(x, orientation=orientation) # Expected behavior is that each matrix column takes up one unit on x-axis expected_width = len(x) attr = 'get_xlim' if orientation == 'horizontal' else 'get_ylim' lim = getattr(axes['matrix'], attr)() assert expected_width == lim[1] - lim[0] def _make_facecolor_list(colors): return [{"facecolor": c} for c in colors] CAT1_2_RED_STYLES = _make_facecolor_list(["blue", "blue", "blue", "blue", "red", "blue", "blue", "red"]) CAT1_RED_STYLES = _make_facecolor_list(["blue", "red", "blue", "blue", "red", "red", "blue", "red"]) CAT_NOT1_RED_STYLES = _make_facecolor_list(["red", "blue", "red", "red", "blue", "blue", "red", "blue"]) CAT1_NOT2_RED_STYLES = _make_facecolor_list(["blue", "red", "blue", "blue", "blue", "red", "blue", "blue"]) CAT_NOT1_2_RED_STYLES = _make_facecolor_list(["red", "blue", "blue", "red", "blue", "blue", "blue", "blue"]) @pytest.mark.parametrize( "kwarg_list,expected_subset_styles,expected_legend", [ # Different forms of including two categories ([{"present": ["cat1", "cat2"], "facecolor": "red"}], CAT1_2_RED_STYLES, []), ([{"present": {"cat1", "cat2"}, "facecolor": "red"}], CAT1_2_RED_STYLES, []), ([{"present": ("cat1", "cat2"), "facecolor": "red"}], CAT1_2_RED_STYLES, []), # with legend ([{"present": ("cat1", "cat2"), "facecolor": "red", "label": "foo"}], CAT1_2_RED_STYLES, [({"facecolor": "red"}, "foo")]), # present only cat1 ([{"present": ("cat1",), "facecolor": "red"}], CAT1_RED_STYLES, []), ([{"present": "cat1", "facecolor": "red"}], CAT1_RED_STYLES, []), # Some uses of absent ([{"absent": "cat1", "facecolor": "red"}], CAT_NOT1_RED_STYLES, []), ([{"present": "cat1", "absent": ["cat2"], "facecolor": "red"}], CAT1_NOT2_RED_STYLES, []), ([{"absent": ["cat2", "cat1"], "facecolor": "red"}], CAT_NOT1_2_RED_STYLES, []), # min/max args ([{"present": ["cat1", "cat2"], "min_degree": 3, "facecolor": "red"}], _make_facecolor_list(["blue"] * 7 + ["red"]), []), ([{"present": ["cat1", "cat2"], "max_subset_size": 3000, "facecolor": "red"}], _make_facecolor_list(["blue"] * 7 + ["red"]), []), ([{"present": ["cat1", "cat2"], "max_degree": 2, "facecolor": "red"}], _make_facecolor_list(["blue"] * 4 + ["red"] + ["blue"] * 3), []), ([{"present": ["cat1", "cat2"], "min_subset_size": 3000, "facecolor": "red"}], _make_facecolor_list(["blue"] * 4 + ["red"] + ["blue"] * 3), []), # cat1 _or_ cat2 ([{"present": "cat1", "facecolor": "red"}, {"present": "cat2", "facecolor": "red"}], _make_facecolor_list(["blue", "red", "red", "blue", "red", "red", "red", "red"]), []), # With multiple uses of label ([{"present": "cat1", "facecolor": "red", "label": "foo"}, {"present": "cat2", "facecolor": "red", "label": "bar"}], _make_facecolor_list(["blue", "red", "red", "blue", "red", "red", "red", "red"]), [({"facecolor": "red"}, "foo; bar")]), ([{"present": "cat1", "facecolor": "red", "label": "foo"}, {"present": "cat2", "facecolor": "red", "label": "foo"}], _make_facecolor_list(["blue", "red", "red", "blue", "red", "red", "red", "red"]), [({"facecolor": "red"}, "foo")]), # With multiple colours, the latest overrides ([{"present": "cat1", "facecolor": "red", "label": "foo"}, {"present": "cat2", "facecolor": "green", "label": "bar"}], _make_facecolor_list(["blue", "red", "green", "blue", "green", "red", "green", "green"]), [({"facecolor": "red"}, "foo"), ({"facecolor": "green"}, "bar")]), # Combining multiple style properties ([{"present": "cat1", "facecolor": "red", "hatch": "//"}, {"present": "cat2", "edgecolor": "green", "linestyle": "dotted"}], [{"facecolor": "blue"}, {"facecolor": "red", "hatch": "//"}, {"facecolor": "blue", "edgecolor": "green", "linestyle": "dotted"}, {"facecolor": "blue"}, {"facecolor": "red", "hatch": "//", "edgecolor": "green", "linestyle": "dotted"}, {"facecolor": "red", "hatch": "//"}, {"facecolor": "blue", "edgecolor": "green", "linestyle": "dotted"}, {"facecolor": "red", "hatch": "//", "edgecolor": "green", "linestyle": "dotted"}, ], []), ]) def test_style_subsets(kwarg_list, expected_subset_styles, expected_legend): data = generate_counts() upset = UpSet(data, facecolor="blue") for kw in kwarg_list: upset.style_subsets(**kw) actual_subset_styles = upset.subset_styles assert actual_subset_styles == expected_subset_styles assert upset.subset_legend == expected_legend def _dots_to_dataframe(ax, is_vertical): matrix_path_collection = ax.collections[0] matrix_dots = pd.DataFrame( matrix_path_collection.get_offsets(), columns=["x", "y"] ).join( pd.DataFrame(matrix_path_collection.get_facecolors(), columns=["fc_r", "fc_g", "fc_b", "fc_a"]), ).join( pd.DataFrame(matrix_path_collection.get_edgecolors(), columns=["ec_r", "ec_g", "ec_b", "ec_a"]), ).assign( lw=matrix_path_collection.get_linewidths(), ls=matrix_path_collection.get_linestyles(), hatch=matrix_path_collection.get_hatch(), ) matrix_dots["ls_offset"] = matrix_dots["ls"].map( lambda tup: tup[0]).astype(float) matrix_dots["ls_seq"] = matrix_dots["ls"].map( lambda tup: None if tup[1] is None else tuple(tup[1])) del matrix_dots["ls"] if is_vertical: matrix_dots[["x", "y"]] = matrix_dots[["y", "x"]] matrix_dots["x"] = 7 - matrix_dots["x"] return matrix_dots @pytest.mark.parametrize('orientation', ['horizontal', 'vertical']) def test_style_subsets_artists(orientation): # Check that subset_styles are all appropriately reflected in matplotlib # artists. # This may be a bit overkill, and too coupled with implementation details. is_vertical = orientation == 'vertical' data = generate_counts() upset = UpSet(data, orientation=orientation) subset_styles = [ {"facecolor": "black"}, {"facecolor": "red"}, {"edgecolor": "red"}, {"edgecolor": "red", "linewidth": 4}, {"linestyle": "dotted"}, {"edgecolor": "red", "facecolor": "blue", "hatch": "//"}, {"facecolor": "blue"}, {}, ] if is_vertical: upset.subset_styles = subset_styles[::-1] else: upset.subset_styles = subset_styles upset_axes = upset.plot() int_rects = _get_patch_data(upset_axes["intersections"], is_vertical) int_rects[["fc_r", "fc_g", "fc_b", "fc_a"]] = ( int_rects.pop("fc").apply(lambda x: pd.Series(x))) int_rects[["ec_r", "ec_g", "ec_b", "ec_a"]] = ( int_rects.pop("ec").apply(lambda x: pd.Series(x))) int_rects["ls_is_solid"] = int_rects.pop("ls").map( lambda x: x == "solid" or pd.isna(x)) expected = pd.DataFrame({ "fc_r": [0, 1, 0, 0, 0, 0, 0, 0], "fc_g": [0, 0, 0, 0, 0, 0, 0, 0], "fc_b": [0, 0, 0, 0, 0, 1, 1, 0], "ec_r": [0, 1, 1, 1, 0, 1, 0, 0], "ec_g": [0, 0, 0, 0, 0, 0, 0, 0], "ec_b": [0, 0, 0, 0, 0, 0, 1, 0], "lw": [1, 1, 1, 4, 1, 1, 1, 1], "ls_is_solid": [True, True, True, True, False, True, True, True], }) assert_frame_equal(expected, int_rects[expected.columns], check_dtype=False) styled_dots = _dots_to_dataframe(upset_axes["matrix"], is_vertical) baseline_dots = _dots_to_dataframe( UpSet(data, orientation=orientation).plot()["matrix"], is_vertical ) inactive_dot_mask = (baseline_dots[["fc_a"]] < 1).values.ravel() assert_frame_equal(baseline_dots.loc[inactive_dot_mask], styled_dots.loc[inactive_dot_mask]) styled_dots = styled_dots.loc[~inactive_dot_mask] styled_dots = styled_dots.drop(columns="y").groupby("x").apply( lambda df: df.drop_duplicates()) styled_dots["ls_is_solid"] = styled_dots.pop("ls_seq").isna() assert_frame_equal(expected.iloc[1:].reset_index(drop=True), styled_dots[expected.columns].reset_index(drop=True), check_dtype=False) # TODO: check lines between dots # matrix_line_collection = upset_axes["matrix"].collections[1] def test_many_categories(): # Tests regressions against GH#193 n_cats = 250 index1 = [True, False] + [False] * (n_cats - 2) index2 = [False, True] + [False] * (n_cats - 2) columns = [chr(i + 33) for i in range(n_cats)] data = pd.DataFrame([index1, index2], columns=columns) data["value"] = 1 data = data.set_index(columns)["value"] UpSet(data) UpSetPlot-0.8.0/upsetplot/util.py000066400000000000000000000050301435554746600170250ustar00rootroot00000000000000"""Generic utilities""" import re # The below is adapted from an answer to # https://stackoverflow.com/questions/66822945 # by Andrius at https://stackoverflow.com/a/66869159/1017546 # Reproduced under the CC-BY-SA 3.0 licence. ODD_REPEAT_PATTERN = r'((? str: """Convert old style named formatting to new style formatting. For example: '%(x)s - %%%(y)s' -> '{x} - %{y}' Args: fmt: old style formatting to convert. Returns: new style formatting. """ return __to_new_format(fmt, named=True) def to_new_pos_format(fmt: str) -> str: """Convert old style positional formatting to new style formatting. For example: '%s - %%%s' -> '{} - %{}' Args: fmt: old style formatting to convert. Returns: new style formatting. """ return __to_new_format(fmt, named=False)