From 8b1f7aed85460d743683149a007acf4241470fa1 Mon Sep 17 00:00:00 2001 From: benhid Date: Wed, 8 Jan 2020 17:18:49 +0100 Subject: [PATCH] Source moved to docs --- Makefile | 2 +- README.md | 10 +++++----- .../jmetal/lab/visualization/plotting.html | 9 ++++++--- .../jmetal/problem/multiobjective/lircmop.html | 2 +- docs/_sources/index.rst.txt | 13 ++++++++++--- {source => docs}/_static/NSGAII-ZDT1.png | Bin docs/index.html | 14 +++++++++++--- docs/searchindex.js | 2 +- {source => docs/source}/_static/2D.gif | Bin {source => docs/source}/_static/3D.gif | Bin docs/source/_static/NSGAII-ZDT1.png | Bin 0 -> 54449 bytes {source => docs/source}/_static/chordplot.gif | Bin {source => docs/source}/_static/custom.css | 0 {source => docs/source}/_static/jmetalpy.png | Bin {source => docs/source}/_static/p-c.gif | Bin .../source}/_templates/guzzle/comments.html | 0 .../source}/_templates/guzzle/globaltoc.html | 0 .../source}/_templates/guzzle/layout.html | 0 .../source}/_templates/guzzle/localtoc.html | 0 .../source}/_templates/guzzle/logo-text.html | 0 .../source}/_templates/guzzle/search.html | 0 .../source}/_templates/guzzle/searchbox.html | 0 .../guzzle/static/css/bootstrap-grid.css | 0 .../guzzle/static/css/bootstrap-grid.css.map | 0 .../guzzle/static/css/bootstrap-grid.min.css | 0 .../static/css/bootstrap-grid.min.css.map | 0 .../guzzle/static/css/bootstrap-reboot.css | 0 .../guzzle/static/css/bootstrap-reboot.css.map | 0 .../guzzle/static/css/bootstrap-reboot.min.css | 0 .../static/css/bootstrap-reboot.min.css.map | 0 .../_templates/guzzle/static/css/bootstrap.css | 0 .../guzzle/static/css/bootstrap.css.map | 0 .../guzzle/static/css/bootstrap.min.css | 0 .../guzzle/static/css/bootstrap.min.css.map | 0 .../fonts/glyphicons-halflings-regular.eot | Bin .../fonts/glyphicons-halflings-regular.svg | 0 .../fonts/glyphicons-halflings-regular.ttf | Bin .../fonts/glyphicons-halflings-regular.woff | Bin .../open-sans/fonts/OpenSans-Bold-webfont.eot | Bin .../open-sans/fonts/OpenSans-Bold-webfont.svg | 0 .../open-sans/fonts/OpenSans-Bold-webfont.ttf | Bin .../open-sans/fonts/OpenSans-Bold-webfont.woff | Bin .../fonts/OpenSans-BoldItalic-webfont.eot | Bin .../fonts/OpenSans-BoldItalic-webfont.svg | 0 .../fonts/OpenSans-BoldItalic-webfont.ttf | Bin .../fonts/OpenSans-BoldItalic-webfont.woff | Bin .../fonts/OpenSans-ExtraBold-webfont.eot | Bin .../fonts/OpenSans-ExtraBold-webfont.svg | 0 .../fonts/OpenSans-ExtraBold-webfont.ttf | Bin .../fonts/OpenSans-ExtraBold-webfont.woff | Bin .../fonts/OpenSans-ExtraBoldItalic-webfont.eot | Bin .../fonts/OpenSans-ExtraBoldItalic-webfont.svg | 0 .../fonts/OpenSans-ExtraBoldItalic-webfont.ttf | Bin .../fonts/OpenSans-ExtraBoldItalic-webfont.woff | Bin .../open-sans/fonts/OpenSans-Italic-webfont.eot | Bin .../open-sans/fonts/OpenSans-Italic-webfont.svg | 0 .../open-sans/fonts/OpenSans-Italic-webfont.ttf | Bin .../fonts/OpenSans-Italic-webfont.woff | Bin .../open-sans/fonts/OpenSans-Light-webfont.eot | Bin .../open-sans/fonts/OpenSans-Light-webfont.svg | 0 .../open-sans/fonts/OpenSans-Light-webfont.ttf | Bin .../open-sans/fonts/OpenSans-Light-webfont.woff | Bin .../fonts/OpenSans-LightItalic-webfont.eot | Bin .../fonts/OpenSans-LightItalic-webfont.svg | 0 .../fonts/OpenSans-LightItalic-webfont.ttf | Bin .../fonts/OpenSans-LightItalic-webfont.woff | Bin .../fonts/OpenSans-Regular-webfont.eot | Bin .../fonts/OpenSans-Regular-webfont.svg | 0 .../fonts/OpenSans-Regular-webfont.ttf | Bin .../fonts/OpenSans-Regular-webfont.woff | Bin .../fonts/OpenSans-Semibold-webfont.eot | Bin .../fonts/OpenSans-Semibold-webfont.svg | 0 .../fonts/OpenSans-Semibold-webfont.ttf | Bin .../fonts/OpenSans-Semibold-webfont.woff | Bin .../fonts/OpenSans-SemiboldItalic-webfont.eot | Bin .../fonts/OpenSans-SemiboldItalic-webfont.svg | 0 .../fonts/OpenSans-SemiboldItalic-webfont.ttf | Bin .../fonts/OpenSans-SemiboldItalic-webfont.woff | Bin .../static/fonts/open-sans/stylesheet.css | 0 .../EOT/SourceSerifPro-Black.eot | Bin .../EOT/SourceSerifPro-Bold.eot | Bin .../EOT/SourceSerifPro-ExtraLight.eot | Bin .../EOT/SourceSerifPro-Light.eot | Bin .../EOT/SourceSerifPro-Regular.eot | Bin .../EOT/SourceSerifPro-Semibold.eot | Bin .../static/fonts/source-serif-pro/LICENSE.txt | 0 .../OTF/SourceSerifPro-Black.otf | Bin .../OTF/SourceSerifPro-Bold.otf | Bin .../OTF/SourceSerifPro-ExtraLight.otf | Bin .../OTF/SourceSerifPro-Light.otf | Bin .../OTF/SourceSerifPro-Regular.otf | Bin .../OTF/SourceSerifPro-Semibold.otf | Bin .../static/fonts/source-serif-pro/README.md | 0 .../static/fonts/source-serif-pro/ReadMe.html | 0 .../source-serif-pro/SourceSerifProReadMe.html | 0 .../TTF/SourceSerifPro-Black.ttf | Bin .../TTF/SourceSerifPro-Bold.ttf | Bin .../TTF/SourceSerifPro-ExtraLight.ttf | Bin .../TTF/SourceSerifPro-Light.ttf | Bin .../TTF/SourceSerifPro-Regular.ttf | Bin .../TTF/SourceSerifPro-Semibold.ttf | Bin .../WOFF/OTF/SourceSerifPro-Black.otf.woff | Bin .../WOFF/OTF/SourceSerifPro-Bold.otf.woff | Bin .../WOFF/OTF/SourceSerifPro-ExtraLight.otf.woff | Bin .../WOFF/OTF/SourceSerifPro-Light.otf.woff | Bin .../WOFF/OTF/SourceSerifPro-Regular.otf.woff | Bin .../WOFF/OTF/SourceSerifPro-Semibold.otf.woff | Bin .../WOFF/TTF/SourceSerifPro-Black.ttf.woff | Bin .../WOFF/TTF/SourceSerifPro-Bold.ttf.woff | Bin .../WOFF/TTF/SourceSerifPro-ExtraLight.ttf.woff | Bin .../WOFF/TTF/SourceSerifPro-Light.ttf.woff | Bin .../WOFF/TTF/SourceSerifPro-Regular.ttf.woff | Bin .../WOFF/TTF/SourceSerifPro-Semibold.ttf.woff | Bin .../static/fonts/source-serif-pro/bower.json | 0 .../fonts/source-serif-pro/source-serif-pro.css | 0 .../_templates/guzzle/static/guzzle.css_t | 0 .../source}/_templates/guzzle/static/jquery.js | 0 .../_templates/guzzle/static/jquery.min.map | 0 .../guzzle/static/js/bootstrap.bundle.js | 0 .../guzzle/static/js/bootstrap.bundle.js.map | 0 .../guzzle/static/js/bootstrap.bundle.min.js | 0 .../static/js/bootstrap.bundle.min.js.map | 0 .../_templates/guzzle/static/js/bootstrap.js | 0 .../guzzle/static/js/bootstrap.js.map | 0 .../guzzle/static/js/bootstrap.min.js | 0 .../guzzle/static/js/bootstrap.min.js.map | 0 .../source}/_templates/guzzle/theme.conf | 0 {source => docs/source}/about.rst | 0 .../source}/api/algorithm/multiobjective/ea.rst | 0 .../api/algorithm/multiobjective/eas/gde3.ipynb | 0 .../multiobjective/eas/gde3_dynamic.ipynb | 0 .../multiobjective/eas/gde3_preference.ipynb | 0 .../api/algorithm/multiobjective/eas/hype.ipynb | 0 .../api/algorithm/multiobjective/eas/ibea.ipynb | 0 .../algorithm/multiobjective/eas/mocell.ipynb | 0 .../algorithm/multiobjective/eas/moead.ipynb | 0 .../algorithm/multiobjective/eas/nsgaii.ipynb | 0 .../multiobjective/eas/nsgaii_distributed.ipynb | 0 .../multiobjective/eas/nsgaii_dynamic.ipynb | 0 .../multiobjective/eas/nsgaii_preference.ipynb | 0 .../algorithm/multiobjective/eas/nsgaiii.ipynb | 0 .../algorithm/multiobjective/eas/spea2.ipynb | 0 .../api/algorithm/multiobjective/pso.rst | 0 .../algorithm/multiobjective/psos/omopso.ipynb | 0 .../algorithm/multiobjective/psos/smpso.ipynb | 0 .../multiobjective/psos/smpso_dynamic.ipynb | 0 .../multiobjective/psos/smpso_preference.ipynb | 0 .../singleobjective/evolution.strategy.rst | 0 .../singleobjective/genetic.algorithm.rst | 0 .../algorithm/singleobjective/local.search.rst | 0 .../singleobjective/simulated.annealing.rst | 0 .../source}/api/jmetal.lab.statistical_test.rst | 0 .../source}/api/operator/crossover.rst | 0 .../source}/api/operator/mutation.rst | 0 .../source}/api/operator/selection.rst | 0 .../source}/api/problem/multiobjective.rst | 0 .../source}/api/problem/singleobjective.rst | 0 {source => docs/source}/conf.py | 2 +- {source => docs/source}/contributing.rst | 0 .../contributing/WorkflowGitBranches.png | Bin .../source}/contributing/abstract.png | Bin .../source}/contributing/bad_access.png | Bin .../source}/contributing/class_header.png | Bin .../source}/contributing/generic_class1.png | Bin .../source}/contributing/generic_class2.png | Bin .../source}/contributing/generic_types.png | Bin .../contributing/generic_types_fixed.png | Bin .../source}/contributing/good_access.png | Bin .../inheritance_generic_to_generic.png | Bin .../inheritance_non_generic_to_generic.png | Bin .../instance_with_generic_class_wearning.png | Bin .../instance_with_generic_types1_wearning.png | Bin .../instance_with_generic_types2_wearning.png | Bin .../source}/contributing/jMetal5UML.png | Bin .../source}/contributing/jmetalpy.png | Bin .../source}/contributing/method_way_sphinx.png | Bin .../contributing/property_annotation.png | Bin .../contributing/property_functional.png | Bin .../python_functional_programming.png | Bin .../python_imperative_programming.png | Bin .../contributing/python_poo_programming.png | Bin .../source}/contributing/types_in_methods.png | Bin .../source}/contributing/with_getter_setter.png | Bin .../contributing/without_getter_setter.png | Bin {source => docs/source}/index.rst | 13 ++++++++++--- {source => docs/source}/jmetalpy.png | Bin .../source}/multiobjective.algorithms.rst | 0 {source => docs/source}/operators.rst | 0 {source => docs/source}/problems.rst | 0 .../source}/singleobjective.algorithms.rst | 0 {source => docs/source}/tutorials.rst | 0 {source => docs/source}/tutorials/evaluator.rst | 0 .../source}/tutorials/experiment.rst | 0 {source => docs/source}/tutorials/observer.rst | 0 {source => docs/source}/tutorials/problem.rst | 0 .../source}/tutorials/statistics.rst | 0 .../source}/tutorials/visualization.rst | 0 setup.py | 2 +- 198 files changed, 47 insertions(+), 22 deletions(-) rename {source => docs}/_static/NSGAII-ZDT1.png (100%) rename {source => docs/source}/_static/2D.gif (100%) rename {source => docs/source}/_static/3D.gif (100%) create mode 100644 docs/source/_static/NSGAII-ZDT1.png rename {source => docs/source}/_static/chordplot.gif (100%) rename {source => docs/source}/_static/custom.css (100%) rename {source => docs/source}/_static/jmetalpy.png (100%) rename {source => docs/source}/_static/p-c.gif (100%) rename {source => docs/source}/_templates/guzzle/comments.html (100%) rename {source => docs/source}/_templates/guzzle/globaltoc.html (100%) rename {source => docs/source}/_templates/guzzle/layout.html (100%) rename {source => docs/source}/_templates/guzzle/localtoc.html (100%) rename {source => docs/source}/_templates/guzzle/logo-text.html (100%) rename {source => docs/source}/_templates/guzzle/search.html (100%) rename {source => docs/source}/_templates/guzzle/searchbox.html (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap-grid.css (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap-grid.css.map (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap-grid.min.css (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap-grid.min.css.map (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap-reboot.css (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap-reboot.css.map (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap-reboot.min.css (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap-reboot.min.css.map (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap.css (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap.css.map (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap.min.css (100%) rename {source => docs/source}/_templates/guzzle/static/css/bootstrap.min.css.map (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/glyphicons-halflings-regular.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/glyphicons-halflings-regular.svg (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/glyphicons-halflings-regular.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/glyphicons-halflings-regular.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Bold-webfont.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Bold-webfont.svg (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Bold-webfont.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Bold-webfont.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-BoldItalic-webfont.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-BoldItalic-webfont.svg (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-BoldItalic-webfont.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-BoldItalic-webfont.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-ExtraBold-webfont.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-ExtraBold-webfont.svg (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-ExtraBold-webfont.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-ExtraBold-webfont.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-ExtraBoldItalic-webfont.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-ExtraBoldItalic-webfont.svg (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-ExtraBoldItalic-webfont.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-ExtraBoldItalic-webfont.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Italic-webfont.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Italic-webfont.svg (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Italic-webfont.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Italic-webfont.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Light-webfont.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Light-webfont.svg (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Light-webfont.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Light-webfont.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-LightItalic-webfont.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-LightItalic-webfont.svg (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-LightItalic-webfont.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-LightItalic-webfont.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Regular-webfont.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Regular-webfont.svg (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Regular-webfont.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Regular-webfont.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Semibold-webfont.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Semibold-webfont.svg (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Semibold-webfont.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-Semibold-webfont.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-SemiboldItalic-webfont.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-SemiboldItalic-webfont.svg (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-SemiboldItalic-webfont.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/fonts/OpenSans-SemiboldItalic-webfont.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/open-sans/stylesheet.css (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/EOT/SourceSerifPro-Black.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/EOT/SourceSerifPro-Bold.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/EOT/SourceSerifPro-ExtraLight.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/EOT/SourceSerifPro-Light.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/EOT/SourceSerifPro-Regular.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/EOT/SourceSerifPro-Semibold.eot (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/LICENSE.txt (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/OTF/SourceSerifPro-Black.otf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/OTF/SourceSerifPro-Bold.otf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/OTF/SourceSerifPro-ExtraLight.otf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/OTF/SourceSerifPro-Light.otf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/OTF/SourceSerifPro-Regular.otf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/OTF/SourceSerifPro-Semibold.otf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/README.md (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/ReadMe.html (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/SourceSerifProReadMe.html (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/TTF/SourceSerifPro-Black.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/TTF/SourceSerifPro-Bold.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/TTF/SourceSerifPro-ExtraLight.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/TTF/SourceSerifPro-Light.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/TTF/SourceSerifPro-Regular.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/TTF/SourceSerifPro-Semibold.ttf (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Black.otf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Bold.otf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-ExtraLight.otf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Light.otf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Regular.otf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Semibold.otf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Black.ttf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Bold.ttf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-ExtraLight.ttf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Light.ttf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Regular.ttf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Semibold.ttf.woff (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/bower.json (100%) rename {source => docs/source}/_templates/guzzle/static/fonts/source-serif-pro/source-serif-pro.css (100%) rename {source => docs/source}/_templates/guzzle/static/guzzle.css_t (100%) rename {source => docs/source}/_templates/guzzle/static/jquery.js (100%) rename {source => docs/source}/_templates/guzzle/static/jquery.min.map (100%) rename {source => docs/source}/_templates/guzzle/static/js/bootstrap.bundle.js (100%) rename {source => docs/source}/_templates/guzzle/static/js/bootstrap.bundle.js.map (100%) rename {source => docs/source}/_templates/guzzle/static/js/bootstrap.bundle.min.js (100%) rename {source => docs/source}/_templates/guzzle/static/js/bootstrap.bundle.min.js.map (100%) rename {source => docs/source}/_templates/guzzle/static/js/bootstrap.js (100%) rename {source => docs/source}/_templates/guzzle/static/js/bootstrap.js.map (100%) rename {source => docs/source}/_templates/guzzle/static/js/bootstrap.min.js (100%) rename {source => docs/source}/_templates/guzzle/static/js/bootstrap.min.js.map (100%) rename {source => docs/source}/_templates/guzzle/theme.conf (100%) rename {source => docs/source}/about.rst (100%) rename {source => docs/source}/api/algorithm/multiobjective/ea.rst (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/gde3.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/gde3_dynamic.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/gde3_preference.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/hype.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/ibea.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/mocell.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/moead.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/nsgaii.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/nsgaii_distributed.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/nsgaii_dynamic.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/nsgaii_preference.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/nsgaiii.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/eas/spea2.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/pso.rst (100%) rename {source => docs/source}/api/algorithm/multiobjective/psos/omopso.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/psos/smpso.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/psos/smpso_dynamic.ipynb (100%) rename {source => docs/source}/api/algorithm/multiobjective/psos/smpso_preference.ipynb (100%) rename {source => docs/source}/api/algorithm/singleobjective/evolution.strategy.rst (100%) rename {source => docs/source}/api/algorithm/singleobjective/genetic.algorithm.rst (100%) rename {source => docs/source}/api/algorithm/singleobjective/local.search.rst (100%) rename {source => docs/source}/api/algorithm/singleobjective/simulated.annealing.rst (100%) rename {source => docs/source}/api/jmetal.lab.statistical_test.rst (100%) rename {source => docs/source}/api/operator/crossover.rst (100%) rename {source => docs/source}/api/operator/mutation.rst (100%) rename {source => docs/source}/api/operator/selection.rst (100%) rename {source => docs/source}/api/problem/multiobjective.rst (100%) rename {source => docs/source}/api/problem/singleobjective.rst (100%) rename {source => docs/source}/conf.py (98%) rename {source => docs/source}/contributing.rst (100%) rename {source => docs/source}/contributing/WorkflowGitBranches.png (100%) rename {source => docs/source}/contributing/abstract.png (100%) rename {source => docs/source}/contributing/bad_access.png (100%) rename {source => docs/source}/contributing/class_header.png (100%) rename {source => docs/source}/contributing/generic_class1.png (100%) rename {source => docs/source}/contributing/generic_class2.png (100%) rename {source => docs/source}/contributing/generic_types.png (100%) rename {source => docs/source}/contributing/generic_types_fixed.png (100%) rename {source => docs/source}/contributing/good_access.png (100%) rename {source => docs/source}/contributing/inheritance_generic_to_generic.png (100%) rename {source => docs/source}/contributing/inheritance_non_generic_to_generic.png (100%) rename {source => docs/source}/contributing/instance_with_generic_class_wearning.png (100%) rename {source => docs/source}/contributing/instance_with_generic_types1_wearning.png (100%) rename {source => docs/source}/contributing/instance_with_generic_types2_wearning.png (100%) rename {source => docs/source}/contributing/jMetal5UML.png (100%) rename {source => docs/source}/contributing/jmetalpy.png (100%) rename {source => docs/source}/contributing/method_way_sphinx.png (100%) rename {source => docs/source}/contributing/property_annotation.png (100%) rename {source => docs/source}/contributing/property_functional.png (100%) rename {source => docs/source}/contributing/python_functional_programming.png (100%) rename {source => docs/source}/contributing/python_imperative_programming.png (100%) rename {source => docs/source}/contributing/python_poo_programming.png (100%) rename {source => docs/source}/contributing/types_in_methods.png (100%) rename {source => docs/source}/contributing/with_getter_setter.png (100%) rename {source => docs/source}/contributing/without_getter_setter.png (100%) rename {source => docs/source}/index.rst (83%) rename {source => docs/source}/jmetalpy.png (100%) rename {source => docs/source}/multiobjective.algorithms.rst (100%) rename {source => docs/source}/operators.rst (100%) rename {source => docs/source}/problems.rst (100%) rename {source => docs/source}/singleobjective.algorithms.rst (100%) rename {source => docs/source}/tutorials.rst (100%) rename {source => docs/source}/tutorials/evaluator.rst (100%) rename {source => docs/source}/tutorials/experiment.rst (100%) rename {source => docs/source}/tutorials/observer.rst (100%) rename {source => docs/source}/tutorials/problem.rst (100%) rename {source => docs/source}/tutorials/statistics.rst (100%) rename {source => docs/source}/tutorials/visualization.rst (100%) diff --git a/Makefile b/Makefile index c024d661..e650b479 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ SPHINXOPTS = SPHINXBUILD = sphinx-build SPHINXPROJ = jMetalPy -SOURCEDIR = source +SOURCEDIR = docs/source BUILDDIR = build # Put it first so that "make" without argument is like "make help". diff --git a/README.md b/README.md index 42b7ff57..ab231b51 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![jMetalPy](source/jmetalpy.png) +![jMetalPy](docs/source/jmetalpy.png) [![Build Status](https://img.shields.io/travis/jMetal/jMetalPy/master.svg?style=flat-square)](https://travis-ci.org/jMetal/jMetalPy) [![Documentation](https://img.shields.io/badge/docs-online-success?style=flat-square)](https://jmetal.github.io/jMetalPy/index.html) @@ -42,7 +42,7 @@ pip install "jmetalpy[core]" Other supported commands are listed next: ```console -pip install "jmetalpy[doc]" # Install requirements for building docs +pip install "jmetalpy[docs]" # Install requirements for building docs pip install "jmetalpy[distributed]" # Install requirements for parallel/distributed computing pip install "jmetalpy[complete]" # Install all requirements ``` @@ -96,7 +96,7 @@ plot_front = Plot(title='Pareto front approximation', axis_labels=['x', 'y']) plot_front.plot(front, label='NSGAII-ZDT1', filename='NSGAII-ZDT1', format='png') ``` -Pareto front approximation +Pareto front approximation ## Features The current release of jMetalPy (v1.5.3) contains the following components: @@ -111,9 +111,9 @@ The current release of jMetalPy (v1.5.3) contains the following components: * Experiment class for performing studies either alone or alongside [jMetal](https://github.com/jMetal/jMetal). * Pairwise and multiple hypothesis testing for statistical analysis, including several frequentist and Bayesian testing methods, critical distance plots and posterior diagrams. -| ![Scatter plot 2D](source/_static/2D.gif) | ![Scatter plot 3D](source/_static/3D.gif) | +| ![Scatter plot 2D](docs/source/_static/2D.gif) | ![Scatter plot 3D](docs/source/_static/3D.gif) | |-------------- | ---------------- | -| ![Parallel coordinates](source/_static/p-c.gif) | ![Interactive chord plot](source/_static/chordplot.gif) | +| ![Parallel coordinates](docs/source/_static/p-c.gif) | ![Interactive chord plot](docs/source/_static/chordplot.gif) | ## License This project is licensed under the terms of the MIT - see the [LICENSE](LICENSE) file for details. \ No newline at end of file diff --git a/docs/_modules/jmetal/lab/visualization/plotting.html b/docs/_modules/jmetal/lab/visualization/plotting.html index a88f0275..3870466b 100644 --- a/docs/_modules/jmetal/lab/visualization/plotting.html +++ b/docs/_modules/jmetal/lab/visualization/plotting.html @@ -227,8 +227,9 @@

Source code for jmetal.lab.visualization.plotting

if filename: plt.savefig(filename + '.' + format, format=format, dpi=200) + else: + plt.show() - plt.show() plt.close(fig=fig)
[docs] def three_dim(self, fronts: List[list], labels: List[str] = None, filename: str = None, format: str = 'eps'): @@ -267,8 +268,9 @@

Source code for jmetal.lab.visualization.plotting

if filename: plt.savefig(filename + '.' + format, format=format, dpi=1000) + else: + plt.show() - plt.show() plt.close(fig=fig)
[docs] def pcoords(self, fronts: List[list], normalize: bool = False, filename: str = None, format: str = 'eps'): @@ -300,8 +302,9 @@

Source code for jmetal.lab.visualization.plotting

if filename: plt.savefig(filename + '.' + format, format=format, dpi=1000) + else: + plt.show() - plt.show() plt.close(fig=fig)
diff --git a/docs/_modules/jmetal/problem/multiobjective/lircmop.html b/docs/_modules/jmetal/problem/multiobjective/lircmop.html index 8b4b3013..d8b792e6 100644 --- a/docs/_modules/jmetal/problem/multiobjective/lircmop.html +++ b/docs/_modules/jmetal/problem/multiobjective/lircmop.html @@ -271,7 +271,7 @@

Source code for jmetal.problem.multiobjective.lircmop

""" def __init__(self, number_of_variables: int = 30): - super(LIRCMOP1, self).__init__() + super(LIRCMOP5, self).__init__() self.number_of_variables = number_of_variables self.number_of_objectives = 2 self.number_of_constraints = 2 diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt index 2b2d3884..2281df58 100644 --- a/docs/_sources/index.rst.txt +++ b/docs/_sources/index.rst.txt @@ -31,8 +31,15 @@ Via pip: .. code-block:: console $ pip install jmetalpy - $ pip install "jmetalpy[core]" # Install core components of the framework - $ pip install "jmetalpy[complete]" # Install also dependencies for distributed computing + +.. note:: Alternatively, you can use one of these instead: + + .. code-block:: console + + $ pip install "jmetalpy[core]" # Install core components of the framework + $ pip install "jmetalpy[docs]" # Install requirements for building docs + $ pip install "jmetalpy[distributed]" # Install requirements for parallel/distributed computing + $ pip install "jmetalpy[complete]" # Install all dependencies (equivalent to `pip install jmetalpy`) Via source code: @@ -51,7 +58,7 @@ The current release of jMetalPy (v1.5.3) contains the following components: * Encodings: real, binary, permutations. * Operators: selection (binary tournament, ranking and crowding distance, random, nary random, best solution), crossover (single-point, SBX), mutation (bit-blip, polynomial, uniform, random). * Quality indicators: hypervolume, additive epsilon, GD, IGD. -* Pareto front plotting for problems with two or more objectives (as scatter plot/parallel coordinates/chordplot) in real-time, static or interactive. +* Pareto front approximation plotting in real-time, static or interactive. * Experiment class for performing studies either alone or alongside jMetal. * Pairwise and multiple hypothesis testing for statistical analysis, including several frequentist and Bayesian testing methods, critical distance plots and posterior diagrams. diff --git a/source/_static/NSGAII-ZDT1.png b/docs/_static/NSGAII-ZDT1.png similarity index 100% rename from source/_static/NSGAII-ZDT1.png rename to docs/_static/NSGAII-ZDT1.png diff --git a/docs/index.html b/docs/index.html index 64724b5f..257288f4 100644 --- a/docs/index.html +++ b/docs/index.html @@ -164,10 +164,18 @@

ContentΒΆ

Via pip:

$ pip install jmetalpy
-$ pip install "jmetalpy[core]"  # Install core components of the framework
-$ pip install "jmetalpy[complete]"  # Install also dependencies for distributed computing
 
+
+

Note

+

Alternatively, you can use one of these instead:

+
$ pip install "jmetalpy[core]"  # Install core components of the framework
+$ pip install "jmetalpy[docs]"  # Install requirements for building docs
+$ pip install "jmetalpy[distributed]"  # Install requirements for parallel/distributed computing
+$ pip install "jmetalpy[complete]"  # Install all dependencies (equivalent to `pip install jmetalpy`)
+
+
+

Via source code:

$ git clone https://github.com/jMetal/jMetalPy.git
 $ python setup.py install
@@ -184,7 +192,7 @@ 

Summary of features zzj=ec-}{{JJ-_qMxvul=>v=ALz3*CUt~tjXW32sF=8-5K4k-=_g~AhiDDoJE!h#=9 zlwqHOe~kJ&9pRso)_29^vEk){t@{RkKV$Jw#Ttd8tU&(9F#BOE2!G_Uxvy*^Xa3B_ zUfW6!WvXpsVPbA$V)&HWPS48P(A;mp_8XhMQWD18T`sMg)C(xPb^#TJt-q3;&nsr2PrUmN}XyLxSDq;h0(Qt7z> zO=QEuaJeU%pr^dN+@L2_9cu%oK|=(Y8wEC5S=p)X6f)wQPu>`I#46a>CuZ;Mxio#@ zmX_q>9zR#Y-J< z-_IZ{YM8nnq zqmsWYN?$1@^yW=GM;`7i0$KXu>FKuvh4wmCZwS!8;k;WbjVw&@O7dNwo_sln(s0`z z$C){Eba92NM}tOlxWDK=GB?M}Lrh7jAzb_|@#>8mQfNC{+mwhfeB_g|dKGY&vh<^) zqc5~8Uy1qBU%fgy(foy|lQvP@%F2q)5Eu6#_}bAzNyT_5B0p_2(|KmLJLMy}#KVVW z5-i2h-%X5+7~yz}-!*vA(b3e`uAOdaX|b@ke;po9rTX0rkBOmMBa=9+XEWV!C-GgMSmHgi7-Ha0fK`>2HRB~=fRpvAp(b9k`Wxvswc z`NxkJ3v8xeFM|oUU^pI zIFBDc)-pHu3*j`5gt;{6jQ1DoW0tP3uYcq1UD^DF+dm}aU4Q?R+kAYLumqb!IPWDX zrf3-&8lrQpt*r1bUw*r_DMuz}Hif5$eX6s}-l zZSDE`_36G`Q}0uFq`}dx0V+;Tye(gOJjuAtsF|2>eSLim`m(RXGh?1UeY$vjaj4WU zKAxe!*!faxm;iDtjOO!=`Ck%tx49qK*>S=7ucpR?1O#Bg=kxOOzrl*fK6{pVbJ0dl zOhV$Gt}Y#=pbNvG1WblV-lve>BzvJgbZ05rei!ua**LXJ_0j{Z?W&Ha45?pwFKZvM62sRwr9$1*rV}{qL5#?Vsf1 z<4alp`Rf-hB$m7K@}G)6n!G%5`W(r=;72r?&bD~Dh78?fzc_dUyJFSYq%rWui_+54 z8Yf7!(OG_CVqz7dRIYRmj*ioF((tC2LXzScEG(?dA$KFA#OQOEE?rvANls?go@n~~ zqOh>An@cU*;L6;u@6zUcCr+KcwZreeRDL>h$d6n+=J9RYnNLdxyNkFGOg+Eca*VoO zvg*`e!@4+?6E)i}=(P6GVKUVIBs|r7Q&m+}oV1diM2qFo`<{I!U5NqFVG!hU_$P(y z8XGSX-%zE4D3+MrMc(RO6f+gv8a^RL(HO*XNz?ny8+=}ysfdgej1#A(lDTPV?*+5# z`~HX!J`o!JJ}oV6X*@_1CqF+wbBE7<;fa`|v9a+LHn#SN&Ao0l^90van7H;}`&wTL zbP>#bhsq|5J^l8t@8&Ee8?8cz*idLLB_}6ygyHJz>uW<+yQ`rQR#R}e_51ucQ9nvm z_nNK*Inkflh989|@8X{vndwTZnCs2*@}=N2npaz{tf_h6FrU-&Qm59pKGC`2<(UWW z<_3H{xw*M$7pt_;r?77B%E)|x#g&j_s-&c(-5D=i0i%YOsJ6bJs+uG2GQT=|9 zMM?KwhmgmfL&e6#oN?V*Yg6${MGe2gBRdI0;JMQkEp~APRycb7AO|Y}QsT=X4JR?X zFI28;{w>bm*sxIRu9SV0P`E21?|bWhkDBif)dwY8``#K0wO^uCmxab5y8!Xg$^4ru74h|%1y$%rh*B*WS@oNam(l@0v z4RofUpkSuwRpahtSz~8d^s1{t3Mh-A64w_|QBld(Z3%MMa@<#%zVgT|3VnY^b@AGx zPy5!UkV75}^_Z7z#}3XW!(CFrqPLlDuZ|E@R#U^xde)3~6@=UJe)sNWf?QmKS(Zkz zQ^ophk6wClo}^EiLpA-Tom+j~DQazn_U0+!N_w9FZMg04jC>z*`$+yhH#aaR zzwQMV?$X9Db6N=dc}@uli4@x>rEV1J1vcgNAFsWi*@Qr9D|WWev1NyBlA{p>Yo<0+ zuhGXSt!TPnQXPQN%uM2Pm=eIQxvbV(dJTk8ze;STFYIj0dw=>wSZ@id9!4i=oQ09G zqCel7)pf@vs;{xGt}H37iXG0ID$jH3U3vS)9GFcg`cliCD+a{1HWyoz8&-3(oNbR`}P3`R$U_43FI_l~k z`jGQHmUQ2lj#Ez8dOo(_+t+8bf1q6K#2Lt#{C1p)ZTI}6{)7Zon80s{oIHMl%~rv)`Rz?UJ!XveFv@X2c9t!LE^qD zYHCmzrGAsZmY zyX`4AZEh{=Xb%+F-Ys@o?_4=g%JFb9pQ{QG8NDkNmq~DRG0cy#Yj`59sJtjD@TO800kCs;2I3TOk|HKIiWRLIHQoJ}iz zHz{Sy(O32MqOFFse#=+?UCV~{5?5yo2SGij8lTG*-|oGJgmSW8KvP+n;YqQR!q!Yu z8i&Sf0D(@wWCgy%fR4pNfhFNfp04w?g^sXH4bR`-w}HhPN5= z0Z~gVp~ARbV8<(eBT)tblIeB|vOp{4jT+P)Nkscz6o4S+F3J+tMJh$ru|ik5;R$#>K@+ zl%!!`V_;xZK&7|ImFpw$0L)F8sFZfoZSxVJgFKsQ^q31Jj36`)p?&$cErvbPjeBmg zLf$tWDO@bMxG-4E4H%t$uH5R{gaQ^D})D9!c7`S}#i!&f8lKw*gA~J=4B?MpHRg=e4OT z0HBR;1cim&w3+Wym@gFTd5rNQf)d4inY?Yo4<(hEnfbE7c2<1G!omXImr@`x>j}iH zmZ|BD>pew|)+)1FH=pFmJZ^!SiomU!B7pJ%W45-o0Vh{;uA8FLw`3tIptn^t&j0$A zTrBFFEp+DfISRBuwL*eCj`t-N#oezT zKYm;f?8*@gyK)u}WmHfDT}d+W81wYO{;rYmJ*YRuv)e{rR{Ehrg>IU=xs~9PlQUoc zJu&eNt;Y^ctqszj1!T0JM2Y&6Cu}sX?k<*U#_r282HcH%6iR10wR=xN4P^m{^3?Y< z(mR)VtfJ>K0Sp+CQITX)MzCU(AtfJ*o)HEikNelLv9Wm5ur|Qqq2(Xj8D>!t;o;%s z?k}5zS?|rC7tJU87H?*Sx^vrgC%b#E?}a=(W}q@NxAI6;2*^u17C+fK|NCZ$yQB+Zr@?iVs#7Xp}F1zt4C$AjbyQ8H#Is1ipk6kIRcEbT0g3!aVma?^kln*q0+S6 zZhZ@j^cJ=dOphC?+4#_*uH|k{wb25w7k<1^_WVTVj<|@(iX|SbBJttn-?b!yF1I1| zF!Gq`>%WFo6JV%@z7Vfq5@h6uriWh8#2AGuFiiS zYH$j#4ij*W-Eb`0T_`jdDk)B0VSm=-0jPT{_)5=d6wobC_qLWZS4vh}_|P^`i)4*! z73=~71Glz*`_b3>F zsdeq@cSPymzxRAeQ%q4c+HCT|y>!+H+LSefqpPcegzN!@B}qUr^~qbn16SziPU4Yr z+)-8zR_!$}-6w{A`ueJ%?bHupwC}rjY z3+Rm1bnY2}6@{RSGWy)vv!5t_V0r*U7G?S?mv=VV2fC5hN}8@+5p0kcA3k~%NdAT2 zF>`K(i;K%hI0~?U)LDbNZ>kzWkZ3AuYegk55fP0*O~`CiqSv!*Ej`$oU0PW|hq|{% zi=l0vKBYO>Tb1q|FD@=7xNw1n?+`+msl z=4lBNU^1?ZAmucoW@bLCsHixaK`ZL3HB#aAP(q^e!q8X7#J}4sWP&($}uH_ZV6c2q+%7u89l<;MN+X%Z}~n z=s>QxwY%HMIFzEs?b&AxiDzslO`MPOQe#t-2w=jouuJlGUJ4Yw22BFyQ+2FBU~(9? zi?HDU7{{6K%lW8K0$_>M9;d4Y?rMK`vla*)y7~Gp07NQ$!9meZ&CsVuId3kU>S`-> zcmMhGC$*3eRoUvDMySbpu0nP|azUaG^b!BUXMgh?CI1`fdnI;=h>2rumDJ>*0}=Vc zWvV-=w0~~#XGRoV-u1XWc!DYze=9dPLEtt0KYZ|LYLe8|(=#N`QC%ry<>9%EG}{jf z0)n7UCcKYeU(*i?4W-ywpS{*g#0R5vBR%as>rgelLiOTP;6jg(fOsrGaphc-&wcKd zwqn4z#Y%laa7|Tpb;AB~njdSaK_gz>C!2+So}4wLIZnMMAfS$R+gkc2hUozi8hERZ zBGXT`D@cSjlq0eN}C~;xQLswT;d~23E^8VeJ(X%U<5tcoh>9GlyVu zboRH+%o+J*7&n#i_V)I4y+-0WAZ;gG!$qMR5uPXRk^PM60Xgrx?%Fl2z1CDT#+|NN z^&l8SvQ9;X{hL>562+0uKamJqCPxp`D$oU7y>lrCozFUxP{IK(p&~V%7&ff8yNz`5n`{o zIYoY-o&KJX=AC`(TN6)+f|xF&KJ9KRCMh-#MUogk zCmUp-AvMAXgTB*bpg^H}Dy)5Q6^MQ)wznJzBWCmsAL6$M&x+;c7HZUKtM zsUA5i?nkKf^z>T}uE~jaIByv>^s~gZa4x|W>ZGx%<|C>u z(p5itskU9kRVuQZ%)U^Fd!3E zp8*_cR{yRxHsEj$<8DbS=Brn0kR_ZAjPc_|lnHZ}y8L?{rMGY2qVeva;?=oXXu6!; zfEqO_jGcK*ytxN(M?yUoSb>0C0iAe_)k`;@+;R|m0fN($5*HOK$pudLrD0)a^#XaT zxi97=2vbEL#R)8g`m--L6>NdcMTfdUI`oEg-Eh-=ydmJRX@LTzi>s?PaN0bI#6pEz z$nwnjJfuk_BEsSU{lmldSC66uEQar>*oo%C2_@R0>0mQ-P9zH;VaJRG$cnasHmBTn zZ*R4gcb4N);v&@ag9=cy&L-Ylf0Cb<7Xh#-WuyNx(?hP^o*V@b>TDzq`7{ zW`BJ1oLf14j{KH^HNx8DY#Kgvu8}F8fK~=*2zL_s+UF-u(-}uYa}K(Sta(1L1wNDl zsuwKCd2JX5ofieN&4(y8-L_-s4xzV200n6$x3xS0fIoM0D4`Jmt|sT*9%>Qg)sm{((`Qe8K)^EwxI!re~ji# zSv0_j$)8M9FI2o*z5z@Nzsr`4-2s)`mM|KGq8gAPmUOk!cu0()+Hi!Wcz{`BlKuApd6gpt^wDkCOYU(?gWHFFTKme4;i6|(UwgZg-9Sx84OlBVu zMt?*+ANvV}g&x+0)s>Z{g~CN~-{Q4)iLIW}13ek4L>x6WwIZag(1FhDlR$uVJ(}K# zw&tpI*pp}bOt@iTVNhp#K4!=-ZUcqi7-AFx^eLo=%N*!OUqIV(*&2DBxuQ|zKmg=U zAUTQpt9VuosqB4pcHT_gCrQS;j?_OtLmG=_16oqDADe`F;|W- zRY`LY{}wA_V)d*%J$pd>5)cv5$C{d&W;kz}<-|~Pnf1ScTIX$;dOF^X1<*>pM#p01 zc_DdRwnkZkAu`~UgCtM1)YW}(Jp^S08+xb@gedSLABZgy5v+BXaJYbQt%SO*?K-p z+gAC1i{gffTI$sg7xS&Is?yq88mVh;?oz$U$47>cswO7MV_VQMYa~3#4#)xJL6glX z0ffWDot{z)0IZ?o5FM`pK1%qmLvztC#Uoc728_>@%U*hniJLAaCd?%VJI0}U?HwI$ z5adza2kp;5npwxD) z6y)b4ycFBa{C&;y>7dJ_{Tl#_2H&=fY>6-cq$0R8MO%+8aWCG@9BKvil`G}(1!F5q zOJxvd^tA~644w1z-s`d`QNJai4aHwXBCRUqA*pU98X88biQP-s1pb$k)V`YoQSopca9xAcNZ2<2;*Bo+JkaISW;4gU=5G< zp;aJUM_=96bX_L`2`kMVGD3f%5OU*p+L$w3+U0l^6-5iO_ti6V`p=$4LYw2T zSiFgU@gnW1ARJs=0;u?KlR9M{7-;`0(AyC9uFuJmexTS{X`W9P@*S^d5=i3+Lkxgs zY#nujnfaF6oBax=YcoWo&p*|&eU1L{ciDByK0d`M&AQPbg}wC5%nJwujL0y>iV!9v z5NK!}cp%7x)1F}q&wL5F*f?I0>+ zW*UJa%L&5;YO5Ty4>09`P-1CG@aXI9Z{Oc{cFN~iy&?r-CE6DXQn6mFU%q_Ng7#_I77Bwl zh=RPckhd>ko;X224oikvS68=gW++0~lTHtzc^d2Y} zL0xH2k)HTdIAkp0@!hp)+Utm}Z_xZDB!rQ}sPo}(eIR14fRW$~)LPQCVi4hRr9wFT z$xH3#Lk16A_t$$eOS!W{jp0VbN}$vf&mTZCz6&j7PVV^VXr!WfeXW{#F+CK-8B=|b zgwa+zZd^%>^XvCSM0PAsBB{PB+fZ(9pit@e(`67*5a!0`!kjEu+Fm~OqnSp`7u==Bs1Xp=y#JQ>1a_&8*t0xTS*hX;IvE~`@S(|}N; z<>OQPZT#)qH&~Dra2a;g`fPxj~oGhAaB4UdHMvy3*M5(QyEYU=!H z8;b`3jUa<-G+TsmXkQvXxC*$e2K+u|OH+KN^B}2`KyC>lmzI#|$h!*qF+C8@UNFa` zU188U`I7TQa^)!W6oZN-L=GQ@cKAV#3hD2f_mw5CyBuM&0NJ8rV~xH#P0!E2N0dI$ zO<%R_fSM>LA}Z=_2p)&Iz8s0)0pK1S9JpRR8$Ri6JQ!{Ebco(#>eW5@W@gRMryjSr`1Jl-Os}R`I60Q4!{rt`Ym-`|(n4}mZYo!yiz>|C{EJ)-J zU}Wg!m~xg^Rw`h)GN5fmkXdHJ8!jL%M4>j?&G&hM77_{kCRm4*e&Ic)0t*DBJqj>! zOo3j}a?sb?d*$|R5^(AOipP2@5P-!EAas1$OiAKuWCyAT{RRzd8Tw(j^v+DuD0_t9~m^>oeNDnR=jB zaXA!3LL+5U4s*r|i4R&w<0c(L!?#Krj#zL5!9wnC34H*+5D5#RIdkw_#aH0skbx|r z^x>R2Ai_O&t_EV@mh*;5PP3;xVk!ghOn-2&YhH}82zoQ$`j+NLxaG;=U@-m@47 z?ob~9_+mnih-7~=Gc)tfPjCktPy$m|NHnk}h)NAACW2DF0W^-6i#tb7K_PWeJOb7* z=n%9Q2aBir^RrqO&w=y=vhM|GMYcx0SsDbi#6(15qwqQQcSFGr_!XMauY#_mhkL8% z0gz~$n&Ppru)vsI0P03zG-wOXeubBp6xvo;VhPip{w zQ6==5mXj?M(2;|6h#2}tgMk9h5N>mgnSz1-{;F(mZ(N{Y=p2FN2PNb(0t%+5r-9aa z0LlVBA>m74^+@}l0UV(JGO-8lNHi)4kTWE5%k33CI(qu@nwnEUkvxD-OhTZdM?O`v z)EA_Ac;||M07YtQYP?F;)xK=QN(u!gf8>dQK7_lzCoYZySa5h`^@p`rf74}8Dv`uetv!}9i0=f?vV@y3%c?R0d2a=wiP(%?%<#F9DGfUecN*MB(QXE z%?1j-LDK@ngxCA`cwi>P0AlGZDF-%m0AS}<= zB!Jo)`<+8F_GdoPE$#dq>&_jqQmU(Js;Wpq0ACA&npvM#VS`M27Ln4|9fK4~y{U9+ zd}NIgm*y78n#_a@q>yc_>K*7nI_(nyZ# z!+HP_;-Vj*EnJujPk_sWI9TY9A1xuf_7^$Ik)KgyE9HVlVhgnJ8>jr=@!Y;mO-+r0 z4%5QYQdm`$6!CL{A(I;VG1L-x#)hHV*McG?G&fYLxv|URws#wZ0=im&S8xZ29kebr zF0u%UiiMRGTjCrX;&a4J0h$lpPEtsE1ye5Os|S@D9unxAH}Buy2PObD46V=BTE`L4 z2W}G&?pH3!9HbfEU*3LxwHZ3K*|{l+phTh9pqI0mKn$&D@1q5pxJD`D=0n7!sI{{; z9g`Rb-WITX;d?s5%t9wjg@54!CNA!JfGisDHlTDM=7=C``n43SuC5{uBxrXY@Dl^W zjKFqqy`*Pk$TG=+{RzC6$(p5g>tof?5qU7ZxTaW)%|1c&V=u7q!Wg6NnL>F$GN`aUHB zve>u+U31y0RxfC!tUx}!FBd{BLFWg7fHdyK#wk+ZtGlqb3(cM-Fr#2vmeyH1j{@f( zl7Yb;GzvA3gu~#2@ZvQvp(4~<@BzqORg$sQ}&Xb8Kz!6aCqojR%v;j!bAFKOB-cCv2Hul*F1M*h(IMksH%t3(x*{* z1qDwbe*x>v)L{o*B<*GO&!0X;TU!̿nhT*?Ar<-~ft%OD^SFdl^Ewb&pQOz~L~wtz4SY>ZC}B8#0};swyT5Bu$nl1vd3#uGd+} zxJ=3bMpmtXP2&a7(I0bpzyi1I2#alFVZgW@apu2~eE#Q(kQYj}MsZn-t;WRx*Zqhu z5P$R=s7w@iAjJoSx^ggH%Z~MirHRu}tfPRvezK#>c=_^W5^xse zRa&N~=A>IsKC+CCN+8m7M&T0?Dcl4bDe!glN1H+7#ToJwYCwtbQT0xNjD*;i4v$fzj2)6L=wXMaJX;<>BqgFvJ_%M&PQKvTG8EI^ruY?(SiQyR8N-cuAL7lCl1(VM_GYz0NXeMm;fGQp>Ff?(g1S4cvbR_AEiKc zcMx>Bg7&tyUB3=s0WU#?oNi*b8hcnD&#pipw+^FwiPNa_L(#(Uum{rTHhl+)N^Cfb zaT^vk-Ry!ZRKF>psPi|5k?*nawNgs zt^>(^e9&*S?Nc>)nvl&NG?9#6avmVy#5Vw9W=Bi|Cf#NYk6vH>&t2wvdR`C%z~PMy9UgGQM0kQQhHB-eQpwak z1OCP8Js?akhHDnur8Mn)s|SwJVyupUl>&N7_Cx3vt5I4uHXNW6z&0WMc0sejA{BjV z#DnZ~!ozy9r5Z|O^%_`G+CZLWn~nO0>?)cB(mXNU4S{2qz5h(}XCZe%X6CR%(kv+B zUxnNU>E@BmEa9#jpMzUKvM^49X&qgKDHpTDx@ine!#!D9|KJ7Kbp%@!xw?L41nWwmVqrO(2);(u4o$&qPtd_z?F6uHCW$^v@z=|CQcj-dg`{Zso`23hvvmZ+K0GfraT(PkSyd{!fZ_7%$gF`o% z(>QR>ZtXe)Lm4E$>gcxRv0as9uW}`*_P`YYAtrZS~Id zR9jSaHsIoCtzqi0e+^!2l!zKEBCof-wWS3F)>B?aMsfWEaBjkAB9^MHMfXE*Ftr&s zI|G^mP7@E{0kI!Eo78OfFNmdc2;bNNUCbRIS&{8^W0RA{rjtNg0AEi7QC)t@ubMF*`20QD0~{PFpqt#~$kX@^FJ)vW(ED+LJ&!)H6SFp$ZS(;@c( zos2N-s6v$u4pKtinw)~>l_oLs&j@C>3htf-m5UboZrvb2*}||j3--di1iv>zJH~@S z4&dL1PoG}Gf;l2x*+7Wo9dti*O|k9!`E%I)aF=S(ZP(P2_5&5B)MPHI<== zWph~40!PhTL#XVC9`&G00Zi-29>CdI*ps*gHgsB^z>gn2K}QB2a};(YB0jaEL2!ja zTOjqjPFfBOXFvF6ETAMq8Ag-io;gzv^sQ7cCo%+2|3q*KV9j8DM>fR%SM2D#K7)8~ z#Vi&fqVsHL1H0LP;Dqoy^{govgNbRNloxRV0vrd=9rZ+OxL;o0ZK!#Ypz3z2bocaJ zf{hkc5INA@(o#wTYyhudRra?IcZoozbEpH5U-Mjdxkxz-wB*(G62@w-maRqvWx(*n zv7>@Ne}0STmx}7Z4F%uQ#snp{m~H6C{Z!b7ki*HKU|3+sM57Gsjz|F6aqx}1B3Az# zBO*xEwi6)W@z?lK`N2XT20aB73Glx218(#_a%gx!qAc&|xCnJb1i-;9Sn0svUhWJB ztf>u1^S0v(9e8Zt0dF$`B^Y6YAauTlhK?*O_=3Dg107#l(F)GdUZYeBKD#$^Z$RN= zg{kt~d7O-}RO*FXu)zac7$0%EG==i@#1}LHcZ&r~-6>#Qk)3C-Xb}bgQ3POZE81)# z__DzVO5nFhK4Eya<5z6C)E(rVqu2kCy}3yCf&BB&oyIB(Hm9emKLrK72FmUP3Sl<% zswMo7Z#+I3jAS&h$ptmMxOkqAuMlT}K;h&A_4vEsF1QTB3()``l1w14UwQzg4_Z0K z0y24wb4eQ@wy-NwG*fT)JgNyDwq9izPB#ZTdM0@m#T+vf#qlh?^gI%Lm#!S$%AihUH z!t}MUL1hV?=Gt%;^V5$0@JAbD(7CE{ON;k5r6ly)f#Ufixq2p~R3LSDkq<}4eCsAuq zccFbq&(1!HI(hOWLT>>wxqtUACam*U$YxzIzcua3DqIi199@W`xiNY9357{pvM(7k zY_b`+aeTKO9~h$ldI4x?-jkq`MW78OF%GEGM4-c`Es73!EifMC*qk zJAp!2qos|F?qG9}z=0z^g?jn=b&%R2BU8-dvd(ZCR(EqBx~+&e{@wR)Sc4kI1r~X=uC?_v3JSB7u^{YTN5nv8IT;z5oBK)0$So0ET9|6OXgP8Y zekpX}{X4{T7f*Pw1Vi3m&Ijv#OHp+i?06mp+T!ZGl3uJl&QAw64aLFt*M9Th{QW`# zMxs=VtrudFl7!*LUk=ooz-8>>2Gk)~mYU-2I2^&lIak1_+P^QKV_4ePFVRwwb2`Cb zVcu+1<9NYN7WZkJcwmHqc4m+mMwT&OK5Vi-kfALcjz;dx|bPSeurEt`-jk8x-GJ{;v6)-KtQY+u=?-T0s%& zNOQ9v`6cMz$AlEtJ|eZOPDrut!_mvzKqY}e;i}jHIOs{b9s#Gt>at~lSZyJ&fRo`C z+*`T_8zV-bt5VLhxB?_C3MCQ9{2ZiY+4*2xSWz_}3wk7&bC-4bdoZDyMqZKPUKnNK zW8fvLf(6f6Vh5THLXKKB{X|hC+ea{faJdcG754x6g0)9N<9m8~8Q}G$7QRK2fmiu& z3d0k*=9RuU*Q?}hP!ly54@mVh9iN+q#_=}R7M33D%}4eV0PS)Yq%K(yV8D1*R$F@- zINLIK$ec%4+}fhY`PrG>bG5hsevOBu*cEI{`x_BfLBYY;K-Zwkph*Q+sCv0T`$9u8 z;n^n}-gA4qaU0{xi$BfW($j}E{=xxyN9692g!{i+ zYnh1Lp@0P^V0KNqsM?eC9I_jIA?B{UeFdECe_2!jtkLzb)@9YdP;=B>>Yl7 z!?dll@%?k8|3F@e*?@8C?!Y-Y)~!6fJ#ReD3cs@8#t7>qvJmV+N3UoCQPhRYcM=HG z=hue5o|63YXN6NRI&4rlAho}JgKOWZQ5f{qYuj1JVtPRixkXQpKcAF0w7|LLFZt`y zVG8S((&H*GzMpnGi!0Md--rPt<9`-Bi}exzmbCM){{2cB1ybZae0w2<%!%-u|80ua z4u2LNPUX$=4*gDB{O1Dd;bQ5D7=QH;vXcY5jONk^+R8>dK z5?%4eF&iMOHlr^qAF%Gu@@PX3CQh+INr+=J(`92{`*=!SE=~-KFZ5ezG{wus zejz6^vK8YJ!>jC{9R&|Uo@op%ZmQd#pB(FIo!qTIi$(q6d6h_mhFiY|C4A8jlw&mp z)bq1>;^Z4EF&isKe?s-%#lY5$$gQ}MR{L4Dd)6{Bwm)?I?eTkT_u#!U4m>Z<1E0*1 z2+deST}PUuw>+9;P?(o-uw0B1(?ZxgKf>0y zCq7Ewpdq15!%q%Q^3B7q%l+tc)M;=MuHe{jfi*^6n1c6fM#X*N#u#nmWBa9+Pal0` zcfr+6M=oHBvK!ZP;w6gJD=@H)Q^ zdUpJt2M=;<%8IHK0{1TK@j1QHRhed%K6!N9EpD7UWv|NHwm#V(G}DtxFtQQ1u817H zg|d!9oiuqU89g^%J3oFr8pLE+)LNcNRoX0?Ml9!#K9>HI0fj+k#MHmy^!2h{F=d=l z!+=T{_R)Jwus zksKX1Mh;i`Xh>>gZuUbdHAxBH)o+q4+72w)_>GaXFco$3_~v=;V_-9T7?QH#-MeUB z!l|F?tR)g!Tq(gpbaa|B8$ypV%zt}sWvt`dvU-Jyuk2CYmKT|!`=Hl=IiXIO|6ljz zgS_{TNYl!I@xvWvwEWo^)Yo|8=-kZ2ICr!#{x?tk47o0Zg2j(;SuXOmMvnLY8g6zt z?D<`c@Q|6Li6)LNB^ZGl&3BGYiDFm&Jd5Em-oSyE!_93l(8oD5bveX}F}>%v{Ou_v zhGCs`s-q9qUB|gI%<=ypYM2me*peMG>Ut`vwa2Fqer1osJpK_29`g7n1}#F5a=;ufC!8xGyq5zDb%H(orr2U8sJXEr5X z!2Nm0XW2W{tSrh8oS=nh)(AO1#ho^|IpVi^F(G!UvQ0~~-qxVs`BZ1|6CBMh!vo|Px~q>j zR(}7@!=EEiCo`)QM$>~>a)OSNUmXnc2l^Z$Ge?0IpG?S}oZ}0Br|BI5^4@L};`M?>!0owl ziN9&}+0iNbaK0B&>OW9Pt4#>8vJbrW=ejWT%9#IoaFDb6%ap~%?j-WCAI?W^8n||m zLLoSs7;hxY(frrwWTj_URbb{t+XJY7%+d9<@!g-iI9Pt;Q0{zu(#3g*Pl%L6(V5F;~yo*0t)Ge z6MthVKraTOUjI)qmx+f3PJT=3-bjQ{)SSc24cm=#*7(PHUl||bK=e=cZLY4BGn$=I zg0d=p=je{LptyaY{nvnfNE&N$T>X=WUeq6bN>jd1<3uL|gHbP{+CO z1}p?$Jl`7I;U$OvrL1_|1!OX&{FFwIMab+=;e3Z&P6sk-u}eZR|Iz6gpkChb?NZDe zU%$=X;3V*<>r>&s))^i0-sj`0lAAHX4_D&BK29RKkk9K*eDjc&T31+|uv;rhG+x~2 zR(G}kp1U|GN^t!26A<2GFk=Xgx$%WtH=E-2F_K8(+hM>sdW5pCFnIjhA+JQ2)!1(RXU9IUJv46P)WFSlJP-MZh^)6+O^HSNRRBBP@6nUs{Yv%5PM zgm_okFi$U5seALyczv0Ul|{dvM`c9!73_2sMEPAf&Nh_cXz6lb>rrSk_*Ee7WTo5?!cm5Wcx9X-_wMXCF}r&wBp;MMUH+{o~o z27S?rH?#n@*uz7_f!pD6_)cdWomgdM<<8P;p=3}aZ%$oq@ z+1>`*Y0myxX23T8)>;tW#3|!n`KjY4<#z6MCHphU4tWU)Z@TOL4}sBF&kbKizWD>) z0(Kh}c95yN!L%7W=Fj)frThe?3&|07QXUL2Gr_9x(ohvNc5=YTa734lnx2alky4f zPfJUnpJoJ??9ZFG25xb|hiEuxNh_?8_(!r7Wr%o&1d}jVRJsOw_!TeFP z659L$v+v>(5}bm9sRkTIyDHoRHXogwopZo+;kuC(-c?rS5fTz&Gw3)u{k?QQh0<}% zzka^Xe!w7sv8SJ(SYt$*dYl4_>w}D$sR_$;pyw#Ty|I+UuL{ zhnqV<7pH;yU{+sf_cM5+O$2mGQtCk8CGB0x9M(V%Vgo?+Xu<1sgc7E%6Jio&@`uJ z_jGdxn#KGyh-EurV)3t9c1S+Gz==d6)t}VVtZwfTNqOJaVv!b5DU8CZHa9?ub9)ygC~!&znOQ>oA&@_~GA1!4x1wGO zE%WkfO~^_J`>gF>qMf>T;V++7Wf7F&_-s^L^8|FvYrFp1FlpGkiMzyABuCk~b%}(1Oui0#`+S^`p zrm9-|_j|)mncZ5%kx}{=magQbCq=llUS8?|na6#}+08Xem8W)JfYi+DU6WyucMyY& zi_=$IU;gs0(Hda)M$TMXGbWe#4m#guB_BQ&_xo_`EU@}8&wlBFxa7PILf+``Aee6c6dxwa;`&1f_b1RL&T~+jqs9;l&LfZ|gv76TJrX$j%cHUZP z))g~#^>xbD6O#vT_W?Q$`04Zl4WKR|fZwxBAjq*J3UmcM!9{a1g+t!rWnH83(b4(ZRA3hSmBfjXyVjFbd%mg7+S~JIJNO& z-VuoNUO!=I$T4i~W3>!tfGT8pZwkP(q}FfnNMgY8)uUzWdK^NbGSvXoKpAl@2#h`} zolsFx!L6Bi^L zrbSP+6<}wLeloZ!W%?)mhVM1&*u@rRiaZV%ABYUPT@naDyrFsC7oe%ia(tIixlCe` zINFLc7!OjODrvfT+MoS{7kJ!*KbOjLc=-LVfG~pr*xL9(>a_xaWVfz@{<*Ubu>u^e z|6&D#fE+o>zhQEHacyMM`}2IMY1VE*=ASdP}pf$QBbjaI7)>Mnsn04L%> zZ2G>tgdh3l6{E_dYe4HvbTVA{oPYYurPe?x%{ey;B=a1ZcKPM5rgIS;Yj%wdUJ)kE zwwrZeZ^0$MzfLpWsb%-BDgUyt2H*-2hjh*|>C|IY0sxzk;KiefJ{2qKKDldHOZv%q zc~_rBVvK?~Qr4XRhFWh>cjWvv3ESDBz4ns=E8M2Fes-iG>i5KC8%>4P&O82g^V!#; z%i;F2-PK!Xqtx?z-Nv0<1zbalRq#R3-=f>;ieWh%j8j=o)Q#{0RiQ$1_AxwP*ggQ9 z57bCvV8(eR$s?wITL>@nQabG_GBGO`nU?Ygf(zlK?{BkX=M;bWH~K8Ztl}}Hhw|=% zYLq|C{l~mPC)Xj4tM;cFz)~TKHzwWn*A3EWS5a8ODFo6s*w`T@!nr4#)2J3^nlSOy zBdqj%WKM9#*lr3)Re%`<&gLioDGHnPd!Qz1SBW73BRxm6TxVzkP~{BDF^nLqB5rPiCHM zV7qJ?)<}%~pF0xxi?4PU?V;gKq~cG5_XqpyKVC`CL{UI5elIXkLT@6?Vq|2w^h`Dh z==tphO5yr${6|5nVB~5|a2OUl|CM0mz4u3(`H#4vV z*UIdk$6397gVY(#ERRX0>nivK8UMg6d<;%CB01exaP#Q>MO_8ZLqD(`l}3zERE_nK60c$+8iBEC>9ifnD^gKv(Ht|e8C z1EWu2PU@DVhAfT4mXzfzTCGO1UWm^{w`l8; z>R&xoyLcfDY$EMpi>t21v-En=FOKggS1g5|i-X|H*xfyds1k=YA3k7=bkLRg0BpWI zT%Tn&$^g8sP)l-|&3WtJxW;*DGi(vo{|Z&Gs`EsSyerDthwqgMiK3Mw(Rh=hyh(6F zC&EA>qi^;u)5<8%sr@I#CQFa**$HO4!fX5khr@VN)0aXw-u=WA0VfsE1vGwb^Kw~U z4F;SAZM_ZqUAqhpd^jAo2@;$+#05y41l&9E{#h6VN8!)bOK6ZIh_DloEbKs#K{Tx9 z4E}8G$}syYufVsKN%eP~WO}@ez2cM4uWgGLB?wQI1>iN)lHgsH4f9IsWm2@<1efE} z|L7syuBG+0ms39I+chTvwjIwA`^&QgleU~NX?&CL#G(ph;u@BrC+- z^Zqr0n^vJGIy&@;mYHNw(SD}&dWII5a)&Q!FBgaK(uD0E33Sn;RY*^QLfW_6rSTN$FrT3 zp1AGROWS}i`J(~oA>Hu3-)f{9kfMcyN|~yH@z>OGoi4DS^6T61`52&WMZ<8^2EbNh zg9GqJY`=fb$_-O^LWY34?6LUeeA&=0YuFdY$*ilpCGV`uF0#X4mh28&%%fK5T$}gS zv+{cJ^Y^c!_ruy1U|8r;9I?kkhqH?aKYm`1uVgYe7?z^}$U;2b-7xoH=M#6??qEwU zg9voc3`UMYZIWQyvTm}8*->EKAC?n4BkWCEC=j}M!86H*C78+%xCCAuxOF*znOf38 zVRP?(q1+if3VJjRJ-6b&Q0~c?6+qw$Eugz$^tWLH_yEMT<9)Ln9(-bu1>S(Q#lI!f zmcWaI`2KB;tTy12Sd81Q8B}YRfdz<3b^m8vnEe_= z0h?d`2G9JJYCmao_FL$?(>Bsd9pPT~e@A?npx>~;zgYUTd+`3P8vqI#PV0}naGl)n zQRG9h)l&TN+c!W+g6#A(*`~73);x>F+1s-F`N5ej)F0!rY%68}smKzuDu4r`SlA%! zDX(^W9r&ExlKx%%-w>{h3H8NQBIrSH+(K{*Zx%HNDqiDy zUNP046Pdz7LIznD^K)IwdKMOOK*BjfDK5mO4!TskIg|?ocY{Q-UQlUxxg1bv)^x0w z@%=pxOklo&Q~X}9*`_!MI!v`!|H3}RmPk@Xj_b~kT@OHl4^^-bH!S5jI66HBHCg+> zHC9aSdfjI0U3_}JT~PUfR5rNJz&H$KMT~3w9gh_2oxf}adu=3e-I{$oK=J*G+y>~( zEwK2pkzGI-y=&%EsZuOD{{T)^sWe{5KujK@m?2MQavTbToO5>8=Uo``t!rsXg<@pe zy5&&O2gv$)3dE6WjbnpR98#EZoV2+N6>Fow&yI-TneRTRe4?s|=jf{6G$Vb>6ELs{ z3#glpe`mob8iiS(Cd7hk{rYi8oIMYTre6x&vc(`JO{k^CzIs<~+bsotRpa?yz44XQ zp_NRo8o=rTuen-|d&N93W5&pw(Ey$G)bm-*>PY7T!-km1D-z@7G6a#m(I zK!Tab8ox3KDnPDv1E)pU={`Bo9p-|_Qy_dRD9|Q#1K3Ar)z+v1q=L{xD-Jf35U!J%d=0glcUgvj?}hA9{7P#IHd%jOf7S z|2t{j#|g(NbhbzFLjLwg1B-A0RoB`6Y_^*RWF#dYgZ8a)!v+eq>rW4w#6eHu@!Pj4 zFq%m`-{zgu!1VlrWy6_X$leYWomv>vq#lQw9Up+dN`T{7x`7H#1+vXO`BcFPbPsLK zU1n5q8rGj+=I^*DtAYm2yS0#Z(g2wU{Fcr0Qx~%hV`5^sczN}txt@)OK_+f_HL!V* zW9|wX=D0JcCJI_(4Rb~%NKkF!^)faaN9E)ad571y1^K*ajKq0#whe*wX3V0>A+xfXJ1{>M zr;PY@e$}op`&%eZ&<7Tn5H~s_P%0htC<$L>S?i#;sFGf{kG{U%Dfq)dBlB@C4Aq!R(Y17lvT!36QsPOT0 z)17N@e3O}xUAX|Kvc+$9J7{>G+)?sh&Y0ly$%`!o*6-M^;EeI2A8zS`&rDYSKdJ9s zIf3GL`(I`5g13A30o4|L>)E}Rw+5=F2&=k&^X9N(Baar8uG-2@Ae4$~h@jnyh`N!2 zTwOv~)tY7VzmeM?=iCLF;y

v_Zy(j|n<8?SV&xhXJSyK6IuHx`LGR^k6-vU&AZ z)P4N;$@PGdQB!*tY$k5+e#Ez=o-8*xMoI^v#PgBtT{Urug9G(2xQog!;ITUIsPOUi zyq;)=bO{4{IKb;}Wa^9WjE2=n`rbU-JgF84RZH$^RG->12XTdnxs%6^!5)H{qeWNP z+5VF6cOduqQE2XbYQd!u`-2BdZ@~VO1#unKz{-vq9X%tnSvg+VQw3Df@`KeNcRnRC z@%+eWx!oE{4{$e?ed&`6@9zHeBnib9BPXopoF5sL4juRP)B<@tr%vyJphvAFBwMD! zX!G~{Z$$U79B}-7?Ut16rb`cjCzjk+`}uQxT!gDy;Mlj7UY{oN7-&#@2b6hW(0?21 z5{P?MEm^7fD6?7#YAB5dDNVgxc@7Eypa4e}6x?aDtK3Fx>PnHC(9g41B8HnM3-usb zConqL*wY}`=+Xmud3k9GiARuzg~uw+xJ;!u6{thCJL==PCTwm|TXH3Zh*Wbp@gd8u z^78u`U&Tx)vNqqkR2ihpHIRjm;+h(jQ|?N;AQcbFR@GgJ9Ch-VbVB?#aL=f&aZl{S zi=ja-lX)%4r95tjIgA`WT!~ylGKXmh8WqBGJz5e+8+mVCwo?F(QXe^|(@Ly_R8!TW zxeoDhZ*lkC@HPSh0(LnkQP2jp3^mHSk+tscLPba{e5e^5h=&HD9;;BU>wwgbq<36@A8YC2z_CW4lO z@p}ybwv6f03I+osAa^I)E?b(N{x@kU;RlFmWZ#yhSLfoh4};rK{h)`Cjcn4u*SY>X zfLnZ;VT$X{5bTt8;izlaOoik4bqnXIgTGzNKoF*3BNgRWcLOHaWNIr=qHT9y{6z9!+LXUYlV&!d?JofHJX;4ku>a7zSK@uBqq`u7tfjw<$p z!U+o!!Xd(r4h!6=J9N##M8W2as8T2dtT^ui%QP}lDByhN3P1}S9JN|=q4)h|VpEl!11gj!Yv?q+dAHCrHP#fn> zNSw&S*knHv-RcyvpzttNY354w+D2cXErD?)P`Bvj{3WZf>o>yhUeN?n7>^~rQ(D1* z-i&MpOdfXq=oUfx>e$>LIY(cO4-@9+hZ>S)+0^7~j2KE56^+txM`28GeGLF%N;q zvQ=wPQOJ3)EUJ8R-pm9>`&nTxH;Ao^_uFv8$u9=~jfP;)33IxuC$(5I6qIloi619c-gSZO=Tcq3ix4TV_0m>H( z0i5y?G)6Z@@%1q9gM|+LNcIBIUs%W)V1)LvxWb_khNsN-=6INC!F01 z-SGoR6YMaom_o$)TBi}TuAvB_68xN+_e2qGJH|eq>lVAiJO*OxjP-a z>-EC#+CBiyB#0fgCn;rFv;UzoB?~|l0}HwHFXs>E2rZi5HA2MNblNEa)K1BUc?Te{ zVi1b=)Q|?uIIDXA~K`rBb{<%elSu~h$4Nsar^ zvKRiO$VuN|Jz#Ok|0!P=1Re*|c=(GXS6)g+{YO~?(-9NB{!;_ED7_%$oGO7?h`+!X zuM(VA?z8hB!HelQj@Vf|sIarESNUJs-XwfKB-f&TLdsX*a!!D->`wZNHElvUY8w)S zBJ;|KVc|H*jpI>s#0Tg*;LAqzNz(rZOUgt+oQGW9@2*C|GC~7=l!UrK&UBFo@BcI2 z&&mV6sPc~aR!Lm`sI}N)gcKJ^l3!_mq$jz#<(=}HA3u4U2HOvS{WoFC>O$jOy1}We zZ@f3RFQpbL5tte1rW~XtKmJPxd_5n#7p*+^ZDsGkKs_8Ylz9C*qsOqn@yGW^%?F>* zVqp>g6$`}g-3mn`lK`UVpkwOf!|MTg#ZF9Is;jGuhe$gTn*^3uH3LtWR*l1)zY`F) zD(*MJ>g(!y3TFpuK~w=H4xv`emSp|(Jv|O5sNhS+7fnAb`T&BMI2+j{(2aDtp2W5u zBJ_Ut=Ab2q6&XaR{kKXSkPp}Ba=qq00(FPZgO*`tz^Nz^4wF$0JRPQQYxk0#V=Jh= zeAZt)3iYYQN>5I#faCX48$?vE|1|uVT{#}`0IBQyd)k+O*)2SvLZ)w>v_8a2ws(b7 zq{fkYOBrApQoJ0JKgJLm8xMMy-n)@=(MUa1!fDa&T+`u8#b`o6z5Uy*1%YeHzhf^C zjG16cvkDWA^d0ai`=B^j-3F(xQ7!WWPJs(Agx|LfcLT(#K|UjR^gDx1#YE)W6($Gj{A8E& z32dtvtY?scf+Ss2h{`YY%k-Wxm^0*nX35|8)5u{MbQC>m8ewPx)dJ_Qwh-v;rJc}x3m$MLB zFB1gGND@HRF;J@#TB{zNIH4<)sh)vhtKC^i| z#p$i0Qz5YddgFdKg4kFXyea-EKQ%0wxe@-KStHCO6YmXTCm zV~r?=sZ!+>s5)r?mAtB_PI-+8dTmk-4GAf$NW#eRe+JvPvchy%8h*VN{G0p{wI=t` zw=V zG(T!yynAso-FgBTl`??}WlX=B2zvZ0MI*rXECs_V0q~*Bl*R27CxwUvjmop*{|+bW zvY;(;>oR0M%-;T&+xvjc8ILs$S#n&%pEVWjf%Gq>S?Y9xKIfMF-wbb>727!4Pv0c} zSKb646KZQeTFs04h~E@%*$T9u9$Snl{w&D?~{_ zs5`c=`7d7NdX>g{grLYL5ujj=`4xVGts|k@(Gq0l@BpE9H-D;np5VgefMDYB@JKeS zzUqes>FFn&=2|Q)6t^#mlidz@raoM7yV)!|u|))rVS|1Q9{dAH9za_0{>GbTRj_($ z>h|XRmIxJ%zL~%4Wp2iY9>@LVMm~)E7~*|@2B|<^3HplNEpvU9;{{E#RxPvb6%YMra_>#IST}Bc0eTXME0edpzPtWJqP#0${=wG z!{m?A)$0TunRPMQaQij2=`h%544XjKUBVZIJtmik z?K7Dh(_4e)4P_7DU`%2u9=_6?RoYynoS^sES8f#oT$I4J4P*?|Ypg?-;5R^2*xjlAJYyDZP)jJ)Y z^nd%F5ti(*Gr_-s*22hbuQhF#Sl^Kc4ekcMwfDydPO3#Uhs@L051u?%D0D$idfh+Y zBpybK8dq)~t1rBMLCsX1C1^wX(1-cWdYf*Y>Dg@f+-!DwNWDKhC9J;ao_g$4@pdMlF=j{0oD;+IN#+cuRq(8o$EHj9FpSBj=N)BjvBes|&}+g% zYA8Lb<>uPX^1>F!qRv%Z&smSIRnb@ty&kY+IQ(+dA?d`yripor@y6_T0-mw_sN+>q zZ0XivWNy0yOyeMUAhZDNZ00fx--k3G6PFC&P3)C1d&6{*F-Yv*KMqsAc0>E%*I2zg ztqO+Ol}T7ZD6yjaboJMmFq!&1*dw|Wa1J=rz)ElV6EWre8mw&Bbg86x-_=$-{MN?N_n=g8YU;f_&P zXiA9NufkINqk{Qix59bt%F!v!f~Zt#UnQf)VS(l+LdeNf*|7|^3;lgQr)!^&1ir40 z<-FV25yIB}Hs-9+<+_BQFIHynA}Vde=ri_ysvj7BD|$O+_sKnVJ4kOXWDc zAu<~s8N)=kiwJDo-R)r^{hV|=l!>Ewx zfrW2bZMn0)b>Da^K4;RvCHe;VefK^Hy|S`DzP4q)M`M1}K2G#)L$g$wmq@^tP!`&WvW*i zyBh7fJbYvS##l~mU$1LgDEEqVpAU73w;h^$g~ikpHEzR?1J-V~K$9fU;Zf$!j)E(} zw*=_Wq}64hRe^s$4b3pgF`!?W*QY545w|qMZ%IGuvg=$za#{IF=%(<98~Qx!*D-aRF@gp#e}8NhMrNym z>D_3Uy4S6@{gRxyN9QHEtn6Nc(EM(@qX zXYJ$Q>_NP!v(L0m|kj0{3+(&j@I;+?n1)#}3ys6I>>m{t1T%@5zO#L5Bq8c3ll>ODtADxW{ zu|GJYBoPt=@C=N+{vE0{@81WYRE&c0dP6y*Nrjf_Tj=Cpz|oynr=XuQwODJ88*Yqj zxLc=>+7wyhgmpduw$aku`~V!UG&5c8l>!02ElPP%UdpjfM-P8cXcdWaK@e{7@;o|~ zF}MGD;}{es=w9D4oDMHc$EyMm!qT4nzw^}s7HAHn%L9A+CZid8J9x-jDd zk*Z4RdTCRxbu2=P8}4U5Jt|{nUk&IJra((ez$X-CbN=r4x)06*xM#{-d=y~p!iYFk z>zj=}fbLqBonIveWey%V0BIE)RcjE1>XM46@r}>Qj_9bpN<-X-9!3u`&)iLYf|k&IrD8C1;cSQ); z&6I0;KK}mQ1my-bg9)j>wE{$l+7u3V8eIRAQFVyBT z2fz8;e`)`w)$~_ix+HTjdLvF+EpTDNnyNeKG3eGMQ+-k+QYn056wdt(1IezwJ8T$k z)sJG*`*&UCre}awN9brs5iediHhi-=!_B)Ai;Inwymh1_C2yd{+H-V$|JNLCAnF_Q zI}ZtZzTAqD#@DT55!f&ru5M$Z1{+n!EKX#J^4!9@{Gb+^z$rta?{L=YJ^r^-(rgOTsY#U|-r3@)zOPRg!~>a8((V19VR!p3Kl%oqVmA*u=@aHouD8DMDeyyK_yH#$Ct{xX+LLJDj56mOI;kXdq=E7R$PA{%py1;;Q$nk&IfA4 zF` z{{uiN@>vH8CQ*~!MsNC^YWw}qt6rLeku zPHT^*s7>ed(3k9CJown|3zLq~%*FK5^492>JlYs0IM&N_;{_3MgQ`+Aq3cC2p=ei1 z&VdFar*QrrC~;lyFJ2fTjZ&)^>1YF^QDg=-rO5GV2qlR;e7oi0+gPA$96v;IVriE+ zeU3C%sDC_~V*r1dH??sfldC5i*yIe2WA*7vB&xr9QRmN{J^Q|@>IU*YH^7x`&UUbuFO@ z18WXDl`B;I>lmGOnD}7;O-fkafISjwe?EhmYv#NMP*I|gNKj)(ngjDEFjl!)`ZeCI zsm03C6A>>BS{(DZ0YC;;_ieJ$&9<(ga6-mKk%x_q4U`xODJdE) zGxgaHb5pjEf#I0LyB5eycrA^Nba%M?eyH)e$ z0fxiKqBcwUU?E8V*Nl+Q`)Ep%KGRdE((}r;m7;$LMvuKO9sNwl8!!kaDqoxy!}0@m zo}^BugO8=@k*~#$fH~Q$OH{b(Tt4;Vi^7Fe@me_14emlgUIgiL-90wJrnR!cj~(e} z7Q|`)`k4j3cn!D|<|n4JBAq5zCKfB-^DjkfNEZk20UQ8iV6oNQ5;|egKd~kh#WToG z_)YUk@az8M26$K1(#rr$FE-*3_+&l~nlS-Ba3*g5Pt1PY(K6lD*lll%GJBdL%uAz8 z3AkU{38GQcbvs}wJQzRq{K!iUw@XNNN3OfRnF6n}zbsaWm^jXNBGJUthZHOtjB-8T zh_;Qo>3!zn=Vf>ukR)b0GF<;A4M(?tG%}@EB8--VeFeV|)4k!WJp@n@7W>oI*T=t0 z!3GdiB0QZRK|i=4^)Cpnzz9!}W`aK)n}CtFjo6i<71Z~S0c*hCpoLI8CZd%P+v+Vr zOu0NS*`CbS*Y{53%{Z8}-}o|7zZS_7N&9h^08`zt5Owcc%Nqh~p9o!wI@|6aG{8wN ze;7B(x1TmCBUl`uKu3n3zg@qMx5;R$wj>h2-2@XnhqumUkh^f;1}Rd*yVAL&RopjI0asT(-L?NK5_gt zWvX#s?!33Yx%C8l%^{^ z#tQF2jwwM41LJ(X{z|s>XSDf5U%72m_pq+V>+OiUvU`u?I9-Vl-dteX8kEnr91)Em!zXW&{fXugV|>qn!ayuTJ5Q)U}9Nr_&AK-iL;aR(!M~CTr56|soC{w za6M#(o$X$mllfcQzi;put!q+FT1n*y?)9XqdB;5gXD1;xDMSUH5gSE58J4C3UJvXy zVO36pw~aq2a5OD18z#ZmqI7sa$^}$D4sa3^qFerZTVsNESELUnl_Lh}U&Rh;%~}gX^Wg7WmWG%gUh-t) z@9|YYRG+R8-Vz%HUtU`0^^8l>!DQL{pmpyH2^PDqX1>}-Y(^D(p=I5TYAWcjWswa} zV!vF^G9_S-mZy2>c7W$P&_a#ItHr(MQKnujXJy@Hw8&SkLj9MtitydF8=Gh3oQ52y zd_OiRhh4fkuy7jw+ituJ+Adqd4b%#zzq>|;K29O`eCT$7i6>4xDX<85LV@oSm(lQ{ zPQI5QBpVKag5jZBuz z=oSKaRR;YfKuq1ezPI!HCAs6%N`g0EqPx)Hci}=7MOxQ@tFcBuhFU+%_1Bl*0Pr0* zymRTW_66^ShMB~SbIj%(@Ng=gZ7Wn@ZpyqOeDr?99WezB)=D>D!cee!L-XxK$IHBi z3z~I=pf|z1emitr!!0U7y@lmR#s%huZ|bRuf)Wv|TRlgLFV^W5Y6?t@(_MidS6)LK z2#H0K`Qh{X!O?S~jU}xssOMD&=>=oQ-lvm!dWB+DItz`7-2xMkYI=X8=1hNhWk=p*)HXSC-3a9 zc^pt4|J2pD`MtK_0S8yfz;#`~h9tUX%FoyP?}c?^q6j%Kl+e9sU6SeZUTkg8O?aEz z=k+-vS5DR+dv7Uzc)IXkjt-8@4qZiEjmc%d?<72z?*@aveV5R-$&^oz8dFn0bfqTp zBanFLGQPj2@n=}BxM-Oa%GL>21I(-YQWwn1x6tV%HS>^n{Csr_^>|nHLpcv~c%C{k zeh>8$HG3PFNbaYqlP2Zo_Vy0&YRnegeW^NMKCk>_7i@B^Yw&T=m+T3>3g8C31+h>^GlIZcfm7PaiVA0xJCzrAOjkSYZgEvC2p2KYf zIbT;>H>oAhk^6U|tFNrpKG)w{>-SA6cf3tUUSV_x+O8-G#3ag}obD4Ie^O}N zcg9At?bC&hH$ufl{*FbGNdtO5Yn3xma6ZYr#7-G*f(7`U{xsGy>7m7I7biY(cIK>i zOu FwZb5W})fRN?TyPp4x=L;8Ct0Jxc0sDVz}Un7@5)yijCE)l3yU*82$grkP=3 zpy8_A7Pl()nWxaUi#I}nnErOa|Ez79U4 z)4l@&ZLGL^dx?TSBZs0B?)4w7K%1BDCR!C}Fo}!6LcknvI~!rcA37HCb8@Pob*&Fh z4qTmf4jO{(8oJ8xy`si!p2Bh%As{+{X|kaAN9&z@|H>LPfs=&6Q$6yGZFHd!+--on z(M;c32!chRU--t(rGtacmpe(&T@6Ij3DEQfw?0SQZXc{~v9?T7`_bJuv@#yhWdD?) zG3N*BM0GU+lH~k1tKpYelKe08z0YunZGC;u;&{pxHQ?;p=AKsrMH3Ob)%)hhf_HD| z?$&vj8qr1p>oAC02U1;b*0!l@sk;?~o6q+s6P*i-6RgT30Oi$ zhQIWswECGHkmDNqwR?Sp#zoq9(O@F9;B5n(hcH#EW!K`*hgRxg6k&3CYThK5?vjG zlQryj)4w9#1#1_9t^A=l5E^v>|N~YPm8v3=pJ0&gIh7o5-z6>dG~!B`*1z0jWEGy2s;^?2c2Lqf^!EX1u-Q(l0@v`B!YTt` z|D{mC{(PDaP7pTVi!y=blWgSSI-`6gw=Z_X49R8rZa&zEaoCNqU#_bsCBklM>BOp5 z*8DcH@-!i*&?z;pp_#I-XubnG>CL8w2!ce3V|bwYALb)UiGIGA?R38WleEE5XX zXi7;*AvzTfgRlpBR%-Y&q>!XSc@j0J7LRQ7C~!Us>Pv&S*6VzfpafGdqWGb}O`uZI zH=p%mJ(^x8yv7cCMMKe#gLncAoY?~Lk!@poa3hsluwZ%T#Kq=EBfU0t+*0}J-t%yl z%uyBI{Y}KbVG4!4M06$4zju(v8fvE`^Y`3R7(i@qfOLuU5s#s(yvO-g1=RL@M8}YV zHcGLpdZZNOA~V@uvpZF_yu6B(AQ__5!SgvE+`s*nWy!Aq<#ETJS66a#ZgF)9>w~gw z!@`0O5L@{puh(kwpUTe4ism+5=M(zyp@1qu_8Z=__zY~~_wiKE@x=WGXu0MPZt$_a z9p;E6w3%`Os1J)!b&{EZU|E-h7f2qN0J0zrHssFLMJ?j08IAo3$;sjNC*e%>@8giL zlD4&a&CLUAQ^oUsWDxC6#{u<*;(n%oauG}iu#kham&yE=piCFu8Zzrzl8}%PJ=lH% z=Kgmmi!=T>32mZtCd3xV)wmcA)Lo{gGV&TuTXle{(yA5CJVh^F=tE5F&Y^uTNfOXw z5PHx;QXqa0$ZZJK!{Ch0o~%eXOQgE*GrVS+GlV`>OFg?FkgY`$jlR$!;6Ha9rdHH4 zZ1gqIoA;gjZDb{H-Cj!8)~;Vz@-_josqpj@h#By!qD++r#bKrc@Nj8%|HM6cu+&IV z2`4?%6lH0{1VJYk>|6k+Qr>7|Vqy|dg-IyqaSIi6>Fw*g%kS}x$@u+|olW;@3BM+6 zzxU^x*%muNCoH-W2w6YS7zv(&6Z0B5OH0+|;bixKOp6zgEHM6l?@HCcl){;F^KHrt zZTVdl4$>~}?kHR4ZGIP2i&Pl^3a+x>PG6n@klAsg6Zv$S^Z?|q191u`pl=`kQjy+# zh<{W07u(Y!g_8w?Jy3)yQ0(3fsQ#sVr|Dwkr2B(`?SPn67PkK~i?&t-;kDS*W{Qgm zoLL1L`#?#Kv;XXg+J}Ys=S}cc)I4=#tosv$2RcdT@z0i`Oid@`VOY(jOt=p|8BXQevBJdg5$V3?FYYlyM zsB9ZV8x|Hk5!EhKIzBeWe`=?+bd_5HP5xk#m?*$C+rc?Kf~T^xv*Wl;Lt{}MooXN~ zc{pOJ>zS^#b*j?ngX*mi&ABd;@*c7rrQqO&3#aVi{YZ|4Yxp$EE)zV&cEx`HxWzD2 z#p;3TSwTIj(Lj%pk|7kk86{9bTuNTG22M#!;xKmKZdnD17_7_a_*FsKSPRierM^*A z&}+xTBk&KZB~{^wPAOk+oqr4#5-cZJK{}8Sa?uO?4vdclH>DDzDyV0_g7BI`YeOgd z|AXJR*hPh%M#N*}Zsc)U?jU}T(T6P`+4N3E!O^Jiro%;2^R?hSyN)@}jp%mXmp{Bu zQlQol_^t+275hDf!Ey?M<;;W=$x$ZB$h5mW9I3H_M=?aY1oVwiDh)~jn$|=19@Mpi zPF}0*)qmc&aw^=~y=^@zRhV%K>2E^Ro#jL8rpn{(fl@mDGXiGk#tU~&LTaLBfCY6r?11GpxNy(Dr6TNH!XO0l5wh966=n;xJ*mpRBKS6WyzRdaZ}K3n(CPN=U0MA*rBUH z^Aii?Jq6I=mEAhje z3r06GR$-JAxJwCc!I|1M-2Mi6U4u0ls|J|pup~B|A;1EH;T1J*gdKCD4uzR=C92o0 zU6(0soG%&;Ash%S;@5K0kfe@2r zLh@0Mj#R9J@c2oRVvk3~9spMat3e56EfSZwZ^gJbY=57Yj~B-im?>#t zc#r`2^gBmRU(-SJA&7~F4_d>bNih;<^v2D-<653ex4eNHVWI-WR8e8nW!&3LZNABQ zn|ex=+iy#OMd)@w<{;pyFgT8MHv^1xSUW4xP}N55(`DtYXLLv9`Uivjf&PSf5emMH z|1ErMFv*Za3I2x}s|Y_$mE%Rl!1x*#AF)&DVMYKbb@qicKx`LgXcF!O zY*gi-E&gSj0wq^tD!QLgCM%j2*eT5vkx2BFhD4 z#eRn%$OkrJu=s!)e~>8JZUSsgR-{ED!IqM$(>@>y6W39FP|a(y8NAiSr(cr*nE6RmZw_Y;AmY; z{X@6R3#12#68$C|dH)ufR-j6B!FwT*9Oeuh)AQW#!2y4uUlBC-3xv z;GNiq{=w2_7T<{d{^?H+lSdSepEAJ-+ovNQ8Yno!71{ev1*7CG_N)Ip39FgR+lGzw zpCD@Ta@eLOy(Q=MAk^-UCJZ~Kzeaapi52dOA43@H>$gJ?S0`pd_L!;g%OD^w@3;HK9)l)9GtUj_N|1Bg=dh@1ILJWGe~nY8m`Zbo zs|87TG1~431g;z-GpUZ?9)Wm0ZXEzBct~q>wt*w z?M3%91H;nGmgtu+4ntxfp^<6FKV@00K%S(A09VIGd)qv2kby>w^RT?abeU*XP)n2q zn6p3QUH7x@-ex$BCDPOIq3=j_M7W*63QDOK^=_YcEGu=Q0owF;d_8XoO*{PnZji8~ z6TjRnp+vX2j0>xHWOv2u`BdBJL6Io}K4AKF1WyBvGv4rKy|u3+iz6Y|VPH#()%t&m z#@lTRroLDQHs5YxbN;1W&}XM3qemjk5Q=mYORMKBui{@p5MXlU&sc0-J{G`)t1IBW z1TrjF6;^#uDfAx%+B0VH-uTC!r6x}~a0mb1h!g}lMYj-e0}HrP-S+{)Q-BE~?5o}- zdWyFVxA+57JjgEnHUv1ud%l?dapFl3ZrSY&G_;FQ2Z^v5#o5y3 znnTnB*h*Y3PBp32%E|Q)ypNPD2FJ;_WseqZm)3dgE@)y@(z{`^?uZHtz4fAFs-+idjzrU;xCMMd(&r`>OUq(-USD?GSlB(-9F???R zV&{cR474Ex9}DP&)R97o{lW;^lGoJ`5mwJ*ka8Khzk1hn#i8#OaOELyb`t7bjGfO@ zuN9~}V0ANpkKKMiRQ#c$qfTos)4_$-FNj4Z=4o(mfd47^d(zwN~(<|Y7#ZBS#)UJyvKj~A9*);IQ`c?XUi-?SD1^^4eZFlmeJzwmUG-k>BzV5x72f|W66K*cZ zh67q~WdY0pNmV_bO{$2Chlq2n3}97QVM*KR$mp3c(afBRy&#OiC(j^fmBHylgcvg> zV-1%0^U+;|>sGv+WKGtdP2UaSCdEMj>}M+`!G!*jpjobD&|OZeg4)DJzQ!ofHM);~ zIklY{ep$oqTN1Liu(Q;-XDwawt5uPz7=sMasa-HxuQ`d9mxSAT30>T$Gi` zF)vX}8vf|gK#T%d?iwE#hzP;D`war9t)IzN`iH4=UxjWhUn0Ux!-sx=C6Z5n>a=2s z5QzrKk3r$yp|LajTIP;<)y#6QWfjX;S%CUtAHhohDzvL6n05e@Hih?ttKooqX4%*Xl!ztZkEYJl#KHWY+03(2>y< z!1xgHFZB#vCu$n3UG)rhLNo?nrun>Syb2iwC>I0Q%2B5eJ`)yC@3Ja@HFb%GR{aKn z8ZrGg$!AL&t#*Jex#LVS4yQM&3kYC#M3@*rLTKKuPhI2Pugf@LE9yEE4#B&-E|`8X zvCU%vy0NCOK<@GGoKjqYMDXpUd`oa)39OwPH5=9jMMoBL9X>}r@}}R8zi*1WaECw~Imv7%$j3*k0-wU?SC}Ex(li~c zu^1Jt-n#PTiB~{|p)iQol&{x&;91z18FcjZpW=C%kPn)Ok|mEGJ9bQ?-UayoF{pw? z6x@dV0$jB12<3_TK=a%Xr##;ihR9-|E>nP!{e1Iw6_2LNvieOx7mc;w)vSQp+HmHn z-(+lD96H>guuusV&6jr_dkR8x`9T@b*n*%s1!|Bx*U!SynOqw-)UDN2j6$^U43tI@ zEG9kKirVK>{;8l=?AWNEc<9nd)o@#>W97E&Zn%M+EH^4@0+qCEe7QzbDF7KEEoQfF6mm!N1Pg z;g291fJd*)EP)2rF%fLpQ?d7j_$rYNK$E$^ff3_#qt)txg;Q_D&w<=t)fCQaPwnkJ zr&=>V*^)|~tEN`DLZ)+qp6F|otK$?Q>g3vK zv3?EPwrvwCUFQ?k*=eq-CCgn8CmCd%*v#(VQ>wg>&L0o?FTAs#O0{mmzm#GtD%4bK zP}TT1CUfd6=#2w-iFhQK#YKq>lATUYnHlm(%CXfg2G{9*f%RGGFtLW#WIxh?PtAL( z1~y%U3OfB^ZBR&UZK|>JH~J=zN8U%fbe`z?7_W`y*3eK|GgL`3JcS%y zjQj>x|NnGC-Uu-%W^7y8v%$5v#^dthdQ0kL2;x$JgDoIX#E;6t)6?5qWa{V)Hao7O z-qKmJWQkB$`M5l4789laGkvE#tiRxMkguYn$?KX=>Vr&lBdejEUx5@Y$ZG$R4sk|^ z=v?2o364H6NVbQ_$?LwueJ`2@UiWz?-L06Ka@HNi7h2k?;Sr=BykV+5eL9;*-u%Mm z!*hic@Y$I>_K`k7c*qY}Ws%`8-^%8^_`lP%e!TaL>2O!(t)`2b`R^`;`!CjG9Jx%u zG0WQ%J3t9tIN}ksL`9YHU`C$tD*bby_x}Dh$KJ02Vnmg)g=s^tn&=^(;{RO3{pNJi z67-TPg?_=lR*RH>#V+6}i2V-I8!FD7irbYpOMf{AVoidO8x-jbVHIl&Zr+=xriz%L z_Pu_VmVifs3jay^-i{c^oO(&RLe8O}I(;jFD zs_un2U+8#o0nQdV)Bj?~y}>Vad!(aelQ>QkQS7b<`&NxVsGFrV9*p?HGYuGpM%404U$i1ejY zpRMNn@nx2_?J&_Z!E)f&iY zae)1%dS(ui`|rOszx&p_7GlVucHwY%f;OsG#ov=?JfC0=e>{|=q@JL#W?=M{E427| zC^H54pkit6aHA@;IkBwY(G5pD=R%m*VX$Bl71yhQt-=8cUUWmcS`a^E0ra;Nd7V1% ztjN;@^%Vo7!D>LXyc-T_&@(p1k0pZteVRJBr}l%9QxiJ&LU?BpH*upNZj@^V6&%s! z!9?^Os#Cs<-p+ITAcR)x;5_KAf_HGTs>2JBT$(SF+duw||@zkz6t zGGYq7{wpqV-gq`tk>@sqARu#02exyRL?iDx_X3Pr?jsrIHtPAo=BrPH2bFJmT~gh{ z_s@|R%Qx~Ll_0Zj3y?UF#ijO0ZTo(C-3pz57_V)Wmv4K)Ef_~!2|E^~D2=>aR(Kz{b!9M4etojvfn>@1fnir4TJco8)indrf( zxXF3mA5_Ehf2DA_3tDOBik*AqK2Wt{#qYl#V3^!Lk)E47Qui#)(s%MUy`>Mmmd%jU zSzEs_P0&kFTUF%=?Y-R&?%Bm+lR4kqAcHZltsC3Iex63r*u0*0K^B|1eoC4~q!gBsULIs77>s|O z8GDyrR8+)dl|nyDNXau7qtKFjZ11z@&mFONy?~A!vpIDlXU)vavf|=aX+>?>gE6}j z9DLZ*vnXb}b53)!fsL&#tN&$KLB6QJ&-7r`m8)0BiCPm{-|!DrDR;sY7Vh%+HU|1d zIj^tB>8xfNK<=og(!qlV8_9+*)vQRT2c(yi(G zZWh{8)n#mJUZv}&I^15W+Jv9^wzWc93CiZnl)opMj{Nk{{xLCe@t3P0s}nm;QPcX59yv@E)m6}5df31q zd81a$@pm=R9VPTkG+4==?Ak$VtO($ebLrh}Ug~+bl5PPwMztt4W;7?MFQZzPn<;t> zzk;TD3x1{P!94i_j&@J&UuWGyS6Ke7?Wv1ihRbrT9CQc(W2~3Vur=D_i z#nYb*w6#M>(E?^wYn8`3+4hEd)B7hHuzyXT9JRq_@jOrB-9ImQ47c6#n|ZrNNcQ-3 z5fZ>uy?F5ou<@Zur*dFQU?2yc>ccvwifxU+z`J(`8I6sNS-uvyUj>ihO?O%|Yicyh zNN2M=S1)IU_F6W@Zqz;PXK?fI$Y3wK?9CX8XiV&EEWE!w6KdH3niuj4L(|Rep171$ z`KK`~j_Ce=Ysb}eS2-Tlz2*~R5meI}kcB!ZPxkXYv;x!cF*B*iP-}eN@lp%tM|6tS zaJ!11DJ;x~mQ1{0TN8B*^R1Yjx8QM(@9M3828LP-$)7lmVfk=6u60NblRDc~I8a`3 z>P+vWb4&&P&Bnd%HRv{U3?@OJg8|nqCxB2}Fy*|%qN)_I3R%6&M9hftZeZZZkT3>D zTvGDEr!iQ{SPaO9mrtKQjY8EJ)5IxJg2R8I;2PiWw+c4+j=mK02@#i;-VQ#?0*^`{ z9k$l!EyvCuwnKG=^79j&_iKe@T>GB-J5oHx-RX-3w>^!iMoGp{GG`pscydo+|6s$o*cHr_d*4yM`91AcFM~$4{WQA-9DlC4#vRnUw_-6mS-(WIe z-QZ0$82nU|nVPK8smSr2Ly)+c21^qoYp=J&c2QTH`K+0Vi3E-H>Q+DxK_*m_ z{GyXeIz48kp1Oz!7|Fh~QG%xdNiI`lMznrq( zdbsDIB?BRt*o6xhCWTvXYefDrmr^nZy~QcBLr$%1!|w-Ks3A!z=qhk*RY+&E%X^TJ zmzNhF8=KkIW?Tl!X*r8!y;p^2OHYqjNcIlBE_(p)A$w-jy5M+&DmOPb8Au?r#-^rm z1mGOy%OCy7bNr#?JL5@f1bollca?u~)mWp3boZ9kY0eIAO2!be1Rp}nhf>OA3h%nU zs&GlB;FH)gZfSXWL%0P-^5e&k{aN1N3}cSgvcTS2XRRz}#}4J!@~DPS_Fv ztQ|0VY}sqB4|l6v6O^ee3H}a}*+!^p=6j7hK#fmh=gytPgw27f>L7zyQk1Ak_X_z7 z?^vzov!8P5y33coeU8O&3EPD&zx)O&gYxt|g%xrRdR(_^b9~FAA=VZwtZ0aaHbyd9 z@|mouc1mbGU9or=hwzRow6@D+1)W%gow@l`{y@M#cPDSDS%xe!6sV^JFBDc8dq3Y*lfsv zC$Gl_irR}JP>1B78M7rt)iyRZi+IMm=kP}91*_iwp*4bn>4c&5kHpH(IAt1UH=>Du zVBD)EMe7f&yY8=#_|ldt;rpN+DO?qA=7bJs*0K?1DmL64C zF^Y(cOeOlcxGjg*rNxkMOhpXC^z_+n<1rzl6A8oo^r@Pth{yq=ZfiJDy$cjAe^Lv< zRQS`c>@?UcDVgau+>&YJGbgNLnVg(#Ed3*m<(ZqGZ_rujTsXH;NvZ2^KQIHD_kxI7 z^Vv7!USt8%^fWbtfS%Yh-nbRt2n}8Lp+hkKO8itI5L>sx+py5kir7udw_tc4O$WziFb`a9?-f5s!}ve=QbVPm_?4(6g|( z+2aah%5>WowZI@!c(&`-UM@!j9kqu;vR9=U%qb?8UkV9fUi1CBf!2ulVD`0gLReT5 z;3lmRwYpBRYgFUdR9^rC*oj2v=5EQuocu#MLGg4>sI^EmJnol^^{{0}eUu%VHzmk{ zpz2mK<5AOYg1+ zu#o`+k32*3)T#XTLg$3~GyU)02^DraiA00!F$VD5v|Bc?2x^*~Gu_9?JpA@xYh^#+ zoE70lhpMwj_h9Ow1bMjA{fx_(FK#oH0(ksxiXTc8{by zzPhWbo(ICcg-p$M^cmHbw^( z%g}_3U7c|?>d={lX@7{IppyM`7@bT)o6_Fi4vzJ3KoB|L5=kgtRbP{*94a%SebyeQezhb`^gFS{5i^4`n-4I_2Jd_iOMi_WrCbGze z-d-PG?_xOdyeC>GQDL}E#pr@0MK>0{68BSAWG3~Hj*lJ~%b>31#Z<7k)2ew>skq7_ z!us)(C$*(###k;IZ>$m4EqZ@8Te_u~{Z*9XX&pEG;FKv+pzag<6n?tZQHi( z2EbZY*5*31z6bKGz+Kup@$iSwK6UlXJpr7U4Y2o-H+{Yx@c{)1VG}jKYRcIhygyjT z9!SXxqOvz`-pnz~HW6RHUKM|7lJ@<=GcY(PiL7;7liDR$LH%crPkv=Qyi;8#(M&~WvE`z(%oS;M3MGT^1tS)ORyIpaW%9D& z9SbUrh~Mbx>(j?shl#pPGeBIwhr6#J=+(>ZuSZ8m3l7t8ZsOcQO-%zD?J`-G&>aHx zlM{=X9m}~`AW=V6`z0#U5fK@kIB_C3brFtV^E11(oxJbuloXOI2RI3xni#o*pynWh z$gCjZ+x$WXX;Oa`4u71J76DQFG~A+ul+^t>C-_jN28wVgIx1hT^W&$125wD`&N3L9 zfFWjqV2r0Ph`cV$;g26_5%3%Y88b)h>f(^Y@cI2I$*?9W%qL29s9_tmNYYz`*3i(f zt@8NS_YK&n^L7!#{=2`#{G{nkd3|P3m}+`olOgLdY&=x#htMfz%Q4k0spO#8UeUGW zgBmaMi8Z602yANFc+?NR4YwzyrEMblv8()4#?x4mykyC+@5aI3ZGv=R>);4}=jTts zTc@2KdCf=$Mc4RnyFQUm0-F!Qk{j2r^Y#m3@1eI7$O0$&)+VS}&PS!h?iqd;BbI?l zf{o9gUCfJI_Q0s$XdPO@G{A@Tss|uhRCDwYsqz~?v}eyb!Z?ITQc_Otutvn@&`zJ( z$+t*UBi}NM0Fa4oTx@pSR`!|Vu&=~9pD)a3TwMa->R~6+U`4fJWE=eE#@5h>+ZqPj zU?6vWezc&fzTQYpEl_#p^IoEPk$YzT=1.2.2', 'distributed>=1.28.1', 'pyspark>=2.4.0'] } extras_require['complete'] = {v for req in extras_require.values() for v in req}