From c3c055e1cd0327afb3b9ccff2297d2a8e63bc1ac Mon Sep 17 00:00:00 2001 From: RLKRo Date: Tue, 21 Nov 2023 17:09:58 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20deeppavl?= =?UTF-8?q?ov/dialog=5Fflow=5Fframework@faccc40a6600eb014cba62f455e72a4107?= =?UTF-8?q?ed7a60=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .buildinfo | 4 + .doctrees/about_us.doctree | Bin 0 -> 3588 bytes .../dff.context_storages.database.doctree | Bin 0 -> 59330 bytes .../apiref/dff.context_storages.json.doctree | Bin 0 -> 37358 bytes .../apiref/dff.context_storages.mongo.doctree | Bin 0 -> 34163 bytes .../dff.context_storages.pickle.doctree | Bin 0 -> 31868 bytes .../dff.context_storages.protocol.doctree | Bin 0 -> 9670 bytes .../apiref/dff.context_storages.redis.doctree | Bin 0 -> 29225 bytes .../dff.context_storages.shelve.doctree | Bin 0 -> 30903 bytes .../apiref/dff.context_storages.sql.doctree | Bin 0 -> 39797 bytes .../apiref/dff.context_storages.ydb.doctree | Bin 0 -> 39365 bytes .../dff.messengers.common.interface.doctree | Bin 0 -> 72380 bytes .../dff.messengers.common.types.doctree | Bin 0 -> 10282 bytes .../dff.messengers.telegram.interface.doctree | Bin 0 -> 71443 bytes .../dff.messengers.telegram.message.doctree | Bin 0 -> 59217 bytes .../dff.messengers.telegram.messenger.doctree | Bin 0 -> 59937 bytes .../dff.messengers.telegram.utils.doctree | Bin 0 -> 13822 bytes .../apiref/dff.pipeline.conditions.doctree | Bin 0 -> 46654 bytes .../dff.pipeline.pipeline.actor.doctree | Bin 0 -> 86856 bytes .../dff.pipeline.pipeline.component.doctree | Bin 0 -> 76123 bytes .../dff.pipeline.pipeline.pipeline.doctree | Bin 0 -> 128595 bytes .../dff.pipeline.pipeline.utils.doctree | Bin 0 -> 31507 bytes .../apiref/dff.pipeline.service.extra.doctree | Bin 0 -> 49316 bytes .../apiref/dff.pipeline.service.group.doctree | Bin 0 -> 53504 bytes .../dff.pipeline.service.service.doctree | Bin 0 -> 42991 bytes .../apiref/dff.pipeline.service.utils.doctree | Bin 0 -> 25137 bytes .doctrees/apiref/dff.pipeline.types.doctree | Bin 0 -> 263792 bytes ...f.script.conditions.std_conditions.doctree | Bin 0 -> 84676 bytes .../apiref/dff.script.core.context.doctree | Bin 0 -> 94650 bytes .../apiref/dff.script.core.keywords.doctree | Bin 0 -> 44796 bytes .../apiref/dff.script.core.message.doctree | Bin 0 -> 150305 bytes .../dff.script.core.normalization.doctree | Bin 0 -> 33179 bytes .../apiref/dff.script.core.script.doctree | Bin 0 -> 76340 bytes .../apiref/dff.script.core.types.doctree | Bin 0 -> 50386 bytes .../dff.script.extras.conditions.doctree | Bin 0 -> 3516 bytes .../apiref/dff.script.extras.slots.doctree | Bin 0 -> 3466 bytes .../dff.script.labels.std_labels.doctree | Bin 0 -> 63136 bytes ...dff.script.responses.std_responses.doctree | Bin 0 -> 8120 bytes .doctrees/apiref/dff.stats.cli.doctree | Bin 0 -> 21198 bytes .../dff.stats.default_extractors.doctree | Bin 0 -> 20153 bytes .../apiref/dff.stats.instrumentor.doctree | Bin 0 -> 31062 bytes .doctrees/apiref/dff.stats.utils.doctree | Bin 0 -> 42339 bytes ...ff.utils.db_benchmark.basic_config.doctree | Bin 0 -> 58557 bytes .../dff.utils.db_benchmark.benchmark.doctree | Bin 0 -> 116313 bytes .../dff.utils.db_benchmark.report.doctree | Bin 0 -> 12820 bytes .../dff.utils.testing.cleanup_db.doctree | Bin 0 -> 26065 bytes .../apiref/dff.utils.testing.common.doctree | Bin 0 -> 20774 bytes ...f.utils.testing.response_comparers.doctree | Bin 0 -> 10354 bytes .../apiref/dff.utils.testing.telegram.doctree | Bin 0 -> 52677 bytes .../dff.utils.testing.toy_script.doctree | Bin 0 -> 11203 bytes ...urn_caching.singleton_turn_caching.doctree | Bin 0 -> 14926 bytes .doctrees/apiref/index_caching.doctree | Bin 0 -> 5168 bytes .../apiref/index_context_storages.doctree | Bin 0 -> 21636 bytes .doctrees/apiref/index_db_benchmark.doctree | Bin 0 -> 7738 bytes .../apiref/index_messenger_interfaces.doctree | Bin 0 -> 13547 bytes .doctrees/apiref/index_pipeline.doctree | Bin 0 -> 23739 bytes .doctrees/apiref/index_script.doctree | Bin 0 -> 23538 bytes .doctrees/apiref/index_stats.doctree | Bin 0 -> 9238 bytes .doctrees/apiref/index_testing_utils.doctree | Bin 0 -> 10731 bytes .doctrees/community.doctree | Bin 0 -> 6602 bytes .doctrees/development.doctree | Bin 0 -> 6682 bytes .doctrees/environment.pickle | Bin 0 -> 6193221 bytes .doctrees/examples.doctree | Bin 0 -> 3144 bytes .doctrees/get_started.doctree | Bin 0 -> 13893 bytes .doctrees/index.doctree | Bin 0 -> 16502 bytes .../tutorials.context_storages.1_basics.ipynb | 132 + ...orials.context_storages.2_postgresql.ipynb | 165 + ...tutorials.context_storages.3_mongodb.ipynb | 163 + .../tutorials.context_storages.4_redis.ipynb | 162 + .../tutorials.context_storages.5_mysql.ipynb | 165 + .../tutorials.context_storages.6_sqlite.ipynb | 169 + ...s.context_storages.7_yandex_database.ipynb | 170 + ...s.context_storages.8_db_benchmarking.ipynb | 7231 +++++++++++++++++ ...utorials.messengers.telegram.1_basic.ipynb | 212 + ...orials.messengers.telegram.2_buttons.ipynb | 298 + ...ers.telegram.3_buttons_with_callback.ipynb | 287 + ...als.messengers.telegram.4_conditions.ipynb | 263 + ...ers.telegram.5_conditions_with_media.ipynb | 354 + ...sengers.telegram.6_conditions_extras.ipynb | 245 + ....messengers.telegram.7_polling_setup.ipynb | 170 + ....messengers.telegram.8_webhook_setup.ipynb | 167 + ...ssengers.web_api_interface.1_fastapi.ipynb | 233 + ...s.web_api_interface.2_websocket_chat.ipynb | 231 + ...interface.3_load_testing_with_locust.ipynb | 279 + ...s.web_api_interface.4_streamlit_chat.ipynb | 441 + .../tutorials.pipeline.1_basics.ipynb | 226 + ...s.pipeline.2_pre_and_post_processors.ipynb | 216 + ....3_pipeline_dict_with_services_basic.ipynb | 232 + ...e.3_pipeline_dict_with_services_full.ipynb | 302 + ...peline.4_groups_and_conditions_basic.ipynb | 260 + ...ipeline.4_groups_and_conditions_full.ipynb | 389 + ...ynchronous_groups_and_services_basic.ipynb | 188 + ...synchronous_groups_and_services_full.ipynb | 313 + ...ials.pipeline.6_extra_handlers_basic.ipynb | 258 + ...rials.pipeline.6_extra_handlers_full.ipynb | 392 + ...line.7_extra_handlers_and_extensions.ipynb | 287 + .../tutorials.script.core.1_basics.ipynb | 307 + .../tutorials.script.core.2_conditions.ipynb | 379 + .../tutorials.script.core.3_responses.ipynb | 364 + .../tutorials.script.core.4_transitions.ipynb | 483 ++ ...als.script.core.5_global_transitions.ipynb | 378 + ....script.core.6_context_serialization.ipynb | 239 + ...cript.core.7_pre_response_processing.ipynb | 709 ++ .../tutorials.script.core.8_misc.ipynb | 299 + ...pt.core.9_pre_transitions_processing.ipynb | 351 + .../tutorials.script.responses.1_basics.ipynb | 252 + ...tutorials.script.responses.2_buttons.ipynb | 394 + .../tutorials.script.responses.3_media.ipynb | 255 + ...als.script.responses.4_multi_message.ipynb | 283 + ...utorials.stats.1_extractor_functions.ipynb | 289 + ...torials.stats.2_pipeline_integration.ipynb | 274 + .../tutorials/tutorials.utils.1_cache.ipynb | 203 + .../tutorials.utils.2_lru_cache.ipynb | 201 + .doctrees/reference.doctree | Bin 0 -> 3086 bytes .doctrees/tutorials.doctree | Bin 0 -> 6975 bytes .../tutorials/index_context_storages.doctree | Bin 0 -> 3660 bytes .doctrees/tutorials/index_interfaces.doctree | Bin 0 -> 4632 bytes .doctrees/tutorials/index_pipeline.doctree | Bin 0 -> 3886 bytes .doctrees/tutorials/index_script.doctree | Bin 0 -> 4523 bytes .doctrees/tutorials/index_stats.doctree | Bin 0 -> 3260 bytes .doctrees/tutorials/index_utils.doctree | Bin 0 -> 3235 bytes ...utorials.context_storages.1_basics.doctree | Bin 0 -> 11844 bytes ...ials.context_storages.2_postgresql.doctree | Bin 0 -> 12990 bytes ...torials.context_storages.3_mongodb.doctree | Bin 0 -> 12675 bytes ...tutorials.context_storages.4_redis.doctree | Bin 0 -> 12485 bytes ...tutorials.context_storages.5_mysql.doctree | Bin 0 -> 12877 bytes ...utorials.context_storages.6_sqlite.doctree | Bin 0 -> 13358 bytes ...context_storages.7_yandex_database.doctree | Bin 0 -> 13383 bytes ...context_storages.8_db_benchmarking.doctree | Bin 0 -> 406847 bytes ...orials.messengers.telegram.1_basic.doctree | Bin 0 -> 13870 bytes ...ials.messengers.telegram.2_buttons.doctree | Bin 0 -> 19295 bytes ...s.telegram.3_buttons_with_callback.doctree | Bin 0 -> 19148 bytes ...s.messengers.telegram.4_conditions.doctree | Bin 0 -> 20134 bytes ...s.telegram.5_conditions_with_media.doctree | Bin 0 -> 21055 bytes ...ngers.telegram.6_conditions_extras.doctree | Bin 0 -> 18726 bytes ...essengers.telegram.7_polling_setup.doctree | Bin 0 -> 10967 bytes ...essengers.telegram.8_webhook_setup.doctree | Bin 0 -> 11086 bytes ...engers.web_api_interface.1_fastapi.doctree | Bin 0 -> 22614 bytes ...web_api_interface.2_websocket_chat.doctree | Bin 0 -> 15646 bytes ...terface.3_load_testing_with_locust.doctree | Bin 0 -> 18719 bytes ...web_api_interface.4_streamlit_chat.doctree | Bin 0 -> 28028 bytes .../tutorials.pipeline.1_basics.doctree | Bin 0 -> 18031 bytes ...pipeline.2_pre_and_post_processors.doctree | Bin 0 -> 18596 bytes ..._pipeline_dict_with_services_basic.doctree | Bin 0 -> 18041 bytes ...3_pipeline_dict_with_services_full.doctree | Bin 0 -> 29073 bytes ...line.4_groups_and_conditions_basic.doctree | Bin 0 -> 21977 bytes ...eline.4_groups_and_conditions_full.doctree | Bin 0 -> 42590 bytes ...chronous_groups_and_services_basic.doctree | Bin 0 -> 14556 bytes ...nchronous_groups_and_services_full.doctree | Bin 0 -> 22636 bytes ...ls.pipeline.6_extra_handlers_basic.doctree | Bin 0 -> 19547 bytes ...als.pipeline.6_extra_handlers_full.doctree | Bin 0 -> 42535 bytes ...ne.7_extra_handlers_and_extensions.doctree | Bin 0 -> 22812 bytes .../tutorials.script.core.1_basics.doctree | Bin 0 -> 27020 bytes ...tutorials.script.core.2_conditions.doctree | Bin 0 -> 37149 bytes .../tutorials.script.core.3_responses.doctree | Bin 0 -> 29981 bytes ...utorials.script.core.4_transitions.doctree | Bin 0 -> 45739 bytes ...s.script.core.5_global_transitions.doctree | Bin 0 -> 34970 bytes ...cript.core.6_context_serialization.doctree | Bin 0 -> 14024 bytes ...ipt.core.7_pre_response_processing.doctree | Bin 0 -> 204019 bytes .../tutorials.script.core.8_misc.doctree | Bin 0 -> 23595 bytes ....core.9_pre_transitions_processing.doctree | Bin 0 -> 67098 bytes ...utorials.script.responses.1_basics.doctree | Bin 0 -> 20178 bytes ...torials.script.responses.2_buttons.doctree | Bin 0 -> 33578 bytes ...tutorials.script.responses.3_media.doctree | Bin 0 -> 26057 bytes ...s.script.responses.4_multi_message.doctree | Bin 0 -> 25113 bytes ...orials.stats.1_extractor_functions.doctree | Bin 0 -> 25246 bytes ...rials.stats.2_pipeline_integration.doctree | Bin 0 -> 20939 bytes .../tutorials/tutorials.utils.1_cache.doctree | Bin 0 -> 13137 bytes .../tutorials.utils.2_lru_cache.doctree | Bin 0 -> 13403 bytes .doctrees/user_guides.doctree | Bin 0 -> 8160 bytes .../user_guides/basic_conceptions.doctree | Bin 0 -> 65413 bytes .doctrees/user_guides/context_guide.doctree | Bin 0 -> 56759 bytes .../user_guides/optimization_guide.doctree | Bin 0 -> 22530 bytes .doctrees/user_guides/superset_guide.doctree | Bin 0 -> 39161 bytes .nojekyll | 0 _images/annotations.png | Bin 0 -> 64834 bytes _images/benchmark_compare.png | Bin 0 -> 40604 bytes _images/benchmark_mass_compare.png | Bin 0 -> 84227 bytes _images/benchmark_sets.png | Bin 0 -> 68422 bytes _images/benchmark_view.png | Bin 0 -> 63389 bytes _images/databases.png | Bin 0 -> 94621 bytes _images/general_stats.png | Bin 0 -> 122816 bytes _images/overview.png | Bin 0 -> 152260 bytes _images/service_stats.png | Bin 0 -> 26817 bytes _images/user_actor.png | Bin 0 -> 72168 bytes _misc/benchmark_schema.json | 184 + _misc/benchmark_streamlit.py | 403 + _modules/dff/context_storages/database.html | 843 ++ _modules/dff/context_storages/json.html | 697 ++ _modules/dff/context_storages/mongo.html | 698 ++ _modules/dff/context_storages/pickle.html | 686 ++ _modules/dff/context_storages/protocol.html | 617 ++ _modules/dff/context_storages/redis.html | 673 ++ _modules/dff/context_storages/shelve.html | 652 ++ _modules/dff/context_storages/sql.html | 804 ++ _modules/dff/context_storages/ydb.html | 849 ++ _modules/dff/messengers/common/interface.html | 822 ++ .../dff/messengers/telegram/interface.html | 862 ++ _modules/dff/messengers/telegram/message.html | 703 ++ .../dff/messengers/telegram/messenger.html | 839 ++ _modules/dff/messengers/telegram/utils.html | 643 ++ _modules/dff/pipeline/conditions.html | 693 ++ _modules/dff/pipeline/pipeline/actor.html | 1031 +++ _modules/dff/pipeline/pipeline/component.html | 843 ++ _modules/dff/pipeline/pipeline/pipeline.html | 972 +++ _modules/dff/pipeline/pipeline/utils.html | 718 ++ _modules/dff/pipeline/service/extra.html | 806 ++ _modules/dff/pipeline/service/group.html | 850 ++ _modules/dff/pipeline/service/service.html | 825 ++ _modules/dff/pipeline/service/utils.html | 658 ++ _modules/dff/pipeline/types.html | 845 ++ .../dff/script/conditions/std_conditions.html | 839 ++ _modules/dff/script/core/context.html | 907 +++ _modules/dff/script/core/keywords.html | 683 ++ _modules/dff/script/core/message.html | 854 ++ _modules/dff/script/core/normalization.html | 724 ++ _modules/dff/script/core/script.html | 746 ++ _modules/dff/script/core/types.html | 696 ++ _modules/dff/script/labels/std_labels.html | 779 ++ .../dff/script/responses/std_responses.html | 612 ++ _modules/dff/stats/cli.html | 847 ++ _modules/dff/stats/default_extractors.html | 685 ++ _modules/dff/stats/instrumentor.html | 791 ++ _modules/dff/stats/utils.html | 803 ++ .../dff/utils/db_benchmark/basic_config.html | 819 ++ .../dff/utils/db_benchmark/benchmark.html | 1034 +++ _modules/dff/utils/db_benchmark/report.html | 646 ++ _modules/dff/utils/testing/cleanup_db.html | 713 ++ _modules/dff/utils/testing/common.html | 674 ++ .../dff/utils/testing/response_comparers.html | 603 ++ _modules/dff/utils/testing/telegram.html | 885 ++ .../turn_caching/singleton_turn_caching.html | 638 ++ _modules/index.html | 623 ++ _sources/about_us.rst.txt | 8 + .../dff.context_storages.database.rst.txt | 6 + .../apiref/dff.context_storages.json.rst.txt | 6 + .../apiref/dff.context_storages.mongo.rst.txt | 6 + .../dff.context_storages.pickle.rst.txt | 6 + .../dff.context_storages.protocol.rst.txt | 6 + .../apiref/dff.context_storages.redis.rst.txt | 6 + .../dff.context_storages.shelve.rst.txt | 6 + .../apiref/dff.context_storages.sql.rst.txt | 6 + .../apiref/dff.context_storages.ydb.rst.txt | 6 + .../dff.messengers.common.interface.rst.txt | 6 + .../dff.messengers.common.types.rst.txt | 6 + .../dff.messengers.telegram.interface.rst.txt | 6 + .../dff.messengers.telegram.message.rst.txt | 6 + .../dff.messengers.telegram.messenger.rst.txt | 6 + .../dff.messengers.telegram.utils.rst.txt | 6 + .../apiref/dff.pipeline.conditions.rst.txt | 6 + .../dff.pipeline.pipeline.actor.rst.txt | 6 + .../dff.pipeline.pipeline.component.rst.txt | 6 + .../dff.pipeline.pipeline.pipeline.rst.txt | 6 + .../dff.pipeline.pipeline.utils.rst.txt | 6 + .../apiref/dff.pipeline.service.extra.rst.txt | 6 + .../apiref/dff.pipeline.service.group.rst.txt | 6 + .../dff.pipeline.service.service.rst.txt | 6 + .../apiref/dff.pipeline.service.utils.rst.txt | 6 + _sources/apiref/dff.pipeline.types.rst.txt | 6 + ...f.script.conditions.std_conditions.rst.txt | 6 + .../apiref/dff.script.core.context.rst.txt | 6 + .../apiref/dff.script.core.keywords.rst.txt | 6 + .../apiref/dff.script.core.message.rst.txt | 6 + .../dff.script.core.normalization.rst.txt | 6 + .../apiref/dff.script.core.script.rst.txt | 6 + _sources/apiref/dff.script.core.types.rst.txt | 6 + .../dff.script.extras.conditions.rst.txt | 12 + .../apiref/dff.script.extras.slots.rst.txt | 12 + .../dff.script.labels.std_labels.rst.txt | 6 + ...dff.script.responses.std_responses.rst.txt | 6 + _sources/apiref/dff.stats.cli.rst.txt | 6 + .../dff.stats.default_extractors.rst.txt | 6 + .../apiref/dff.stats.instrumentor.rst.txt | 6 + _sources/apiref/dff.stats.utils.rst.txt | 6 + ...ff.utils.db_benchmark.basic_config.rst.txt | 6 + .../dff.utils.db_benchmark.benchmark.rst.txt | 6 + .../dff.utils.db_benchmark.report.rst.txt | 6 + .../dff.utils.testing.cleanup_db.rst.txt | 6 + .../apiref/dff.utils.testing.common.rst.txt | 6 + ...f.utils.testing.response_comparers.rst.txt | 6 + .../apiref/dff.utils.testing.telegram.rst.txt | 6 + .../dff.utils.testing.toy_script.rst.txt | 6 + ...urn_caching.singleton_turn_caching.rst.txt | 6 + _sources/apiref/index_caching.rst.txt | 11 + .../apiref/index_context_storages.rst.txt | 19 + _sources/apiref/index_db_benchmark.rst.txt | 13 + .../apiref/index_messenger_interfaces.rst.txt | 16 + _sources/apiref/index_pipeline.rst.txt | 20 + _sources/apiref/index_script.rst.txt | 21 + _sources/apiref/index_stats.rst.txt | 14 + _sources/apiref/index_testing_utils.rst.txt | 15 + _sources/community.rst.txt | 21 + _sources/development.rst.txt | 23 + _sources/examples.rst.txt | 4 + _sources/get_started.rst.txt | 74 + _sources/index.rst.txt | 97 + _sources/reference.rst.txt | 9 + _sources/tutorials.rst.txt | 30 + .../tutorials/index_context_storages.rst.txt | 16 + _sources/tutorials/index_interfaces.rst.txt | 28 + _sources/tutorials/index_pipeline.rst.txt | 19 + _sources/tutorials/index_script.rst.txt | 29 + _sources/tutorials/index_stats.rst.txt | 10 + _sources/tutorials/index_utils.rst.txt | 10 + ...tutorials.context_storages.1_basics.py.txt | 42 + ...rials.context_storages.2_postgresql.py.txt | 47 + ...utorials.context_storages.3_mongodb.py.txt | 45 + .../tutorials.context_storages.4_redis.py.txt | 44 + .../tutorials.context_storages.5_mysql.py.txt | 47 + ...tutorials.context_storages.6_sqlite.py.txt | 51 + ....context_storages.7_yandex_database.py.txt | 52 + ....context_storages.8_db_benchmarking.py.txt | 241 + ...torials.messengers.telegram.1_basic.py.txt | 92 + ...rials.messengers.telegram.2_buttons.py.txt | 192 + ...rs.telegram.3_buttons_with_callback.py.txt | 181 + ...ls.messengers.telegram.4_conditions.py.txt | 143 + ...rs.telegram.5_conditions_with_media.py.txt | 208 + ...engers.telegram.6_conditions_extras.py.txt | 125 + ...messengers.telegram.7_polling_setup.py.txt | 64 + ...messengers.telegram.8_webhook_setup.py.txt | 61 + ...sengers.web_api_interface.1_fastapi.py.txt | 113 + ....web_api_interface.2_websocket_chat.py.txt | 116 + ...nterface.3_load_testing_with_locust.py.txt | 150 + ....web_api_interface.4_streamlit_chat.py.txt | 188 + .../tutorials.pipeline.1_basics.py.txt | 84 + ....pipeline.2_pre_and_post_processors.py.txt | 95 + ...3_pipeline_dict_with_services_basic.py.txt | 97 + ....3_pipeline_dict_with_services_full.py.txt | 167 + ...eline.4_groups_and_conditions_basic.py.txt | 125 + ...peline.4_groups_and_conditions_full.py.txt | 214 + ...nchronous_groups_and_services_basic.py.txt | 65 + ...ynchronous_groups_and_services_full.py.txt | 153 + ...als.pipeline.6_extra_handlers_basic.py.txt | 123 + ...ials.pipeline.6_extra_handlers_full.py.txt | 192 + ...ine.7_extra_handlers_and_extensions.py.txt | 144 + .../tutorials.script.core.1_basics.py.txt | 167 + .../tutorials.script.core.2_conditions.py.txt | 228 + .../tutorials.script.core.3_responses.py.txt | 213 + ...tutorials.script.core.4_transitions.py.txt | 309 + ...ls.script.core.5_global_transitions.py.txt | 221 + ...script.core.6_context_serialization.py.txt | 89 + ...ript.core.7_pre_response_processing.py.txt | 135 + .../tutorials.script.core.8_misc.py.txt | 167 + ...t.core.9_pre_transitions_processing.py.txt | 106 + ...tutorials.script.responses.1_basics.py.txt | 110 + ...utorials.script.responses.2_buttons.py.txt | 259 + .../tutorials.script.responses.3_media.py.txt | 127 + ...ls.script.responses.4_multi_message.py.txt | 149 + ...torials.stats.1_extractor_functions.py.txt | 136 + ...orials.stats.2_pipeline_integration.py.txt | 136 + .../tutorials/tutorials.utils.1_cache.py.txt | 77 + .../tutorials.utils.2_lru_cache.py.txt | 75 + _sources/user_guides.rst.txt | 39 + .../user_guides/basic_conceptions.rst.txt | 388 + _sources/user_guides/context_guide.rst.txt | 250 + .../user_guides/optimization_guide.rst.txt | 107 + _sources/user_guides/superset_guide.rst.txt | 191 + _static/auto-render.min.js | 1 + _static/basic.css | 925 +++ _static/binder_badge_logo.svg | 1 + _static/broken_example.png | Bin 0 -> 21404 bytes _static/check-solid.svg | 4 + _static/clipboard.min.js | 7 + _static/copy-button.svg | 5 + _static/copybutton.css | 94 + _static/copybutton.js | 248 + _static/copybutton_funcs.js | 73 + _static/css/custom.css | 45 + _static/doctools.js | 156 + _static/documentation_options.js | 13 + _static/drawio/dfe/user_actor.png | Bin 0 -> 72168 bytes _static/file.png | Bin 0 -> 286 bytes _static/images/additional_stats.png | Bin 0 -> 31560 bytes _static/images/annotations.png | Bin 0 -> 64834 bytes _static/images/benchmark_compare.png | Bin 0 -> 40604 bytes _static/images/benchmark_mass_compare.png | Bin 0 -> 84227 bytes _static/images/benchmark_sets.png | Bin 0 -> 68422 bytes _static/images/benchmark_view.png | Bin 0 -> 63389 bytes _static/images/databases.png | Bin 0 -> 94621 bytes _static/images/general_stats.png | Bin 0 -> 122816 bytes _static/images/logo-colab.svg | 24 + _static/images/logo-deeppavlov.svg | 22 + _static/images/logo-dff.svg | 39 + _static/images/logo-download.svg | 10 + _static/images/logo-github.svg | 15 + _static/images/logo-simple.svg | 39 + _static/images/overview.png | Bin 0 -> 152260 bytes _static/images/service_stats.png | Bin 0 -> 26817 bytes _static/jupyterlite_badge_logo.svg | 3 + _static/katex-math.css | 50 + _static/katex.min.js | 1 + _static/katex_autorenderer.js | 10 + _static/language_data.js | 199 + _static/logo-simple.svg | 39 + _static/minus.png | Bin 0 -> 90 bytes _static/nbsphinx-broken-thumbnail.svg | 9 + _static/nbsphinx-code-cells.css | 259 + _static/nbsphinx-gallery.css | 31 + _static/nbsphinx-no-thumbnail.svg | 9 + _static/no_image.png | Bin 0 -> 4315 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 152 + _static/scripts/bootstrap.js | 3 + _static/scripts/bootstrap.js.LICENSE.txt | 5 + _static/scripts/bootstrap.js.map | 1 + _static/scripts/pydata-sphinx-theme.js | 2 + _static/scripts/pydata-sphinx-theme.js.map | 1 + _static/searchtools.js | 574 ++ _static/sg_gallery-binder.css | 11 + _static/sg_gallery-dataframe.css | 47 + _static/sg_gallery-rendered-html.css | 224 + _static/sg_gallery.css | 342 + _static/sphinx_highlight.js | 154 + _static/styles/bootstrap.css | 6 + _static/styles/pydata-sphinx-theme.css | 1 + _static/styles/theme.css | 2 + _static/vendor/fontawesome/6.1.2/LICENSE.txt | 165 + .../vendor/fontawesome/6.1.2/css/all.min.css | 5 + .../vendor/fontawesome/6.1.2/js/all.min.js | 2 + .../6.1.2/js/all.min.js.LICENSE.txt | 5 + .../6.1.2/webfonts/fa-brands-400.ttf | Bin 0 -> 181264 bytes .../6.1.2/webfonts/fa-brands-400.woff2 | Bin 0 -> 105112 bytes .../6.1.2/webfonts/fa-regular-400.ttf | Bin 0 -> 60236 bytes .../6.1.2/webfonts/fa-regular-400.woff2 | Bin 0 -> 24028 bytes .../6.1.2/webfonts/fa-solid-900.ttf | Bin 0 -> 389948 bytes .../6.1.2/webfonts/fa-solid-900.woff2 | Bin 0 -> 154840 bytes .../6.1.2/webfonts/fa-v4compatibility.ttf | Bin 0 -> 10084 bytes .../6.1.2/webfonts/fa-v4compatibility.woff2 | Bin 0 -> 4776 bytes _static/webpack-macros.html | 31 + about_us.html | 593 ++ apiref/dff.context_storages.database.html | 1134 +++ apiref/dff.context_storages.json.html | 1045 +++ apiref/dff.context_storages.mongo.html | 1031 +++ apiref/dff.context_storages.pickle.html | 1027 +++ apiref/dff.context_storages.protocol.html | 931 +++ apiref/dff.context_storages.redis.html | 1017 +++ apiref/dff.context_storages.shelve.html | 1017 +++ apiref/dff.context_storages.sql.html | 1057 +++ apiref/dff.context_storages.ydb.html | 1042 +++ apiref/dff.messengers.common.interface.html | 1142 +++ apiref/dff.messengers.common.types.html | 929 +++ apiref/dff.messengers.telegram.interface.html | 1110 +++ apiref/dff.messengers.telegram.message.html | 1070 +++ apiref/dff.messengers.telegram.messenger.html | 1086 +++ apiref/dff.messengers.telegram.utils.html | 946 +++ apiref/dff.pipeline.conditions.html | 1012 +++ apiref/dff.pipeline.pipeline.actor.html | 1131 +++ apiref/dff.pipeline.pipeline.component.html | 1141 +++ apiref/dff.pipeline.pipeline.pipeline.html | 1151 +++ apiref/dff.pipeline.pipeline.utils.html | 994 +++ apiref/dff.pipeline.service.extra.html | 1049 +++ apiref/dff.pipeline.service.group.html | 1061 +++ apiref/dff.pipeline.service.service.html | 1042 +++ apiref/dff.pipeline.service.utils.html | 975 +++ apiref/dff.pipeline.types.html | 1413 ++++ .../dff.script.conditions.std_conditions.html | 1115 +++ apiref/dff.script.core.context.html | 1197 +++ apiref/dff.script.core.keywords.html | 1054 +++ apiref/dff.script.core.message.html | 1388 ++++ apiref/dff.script.core.normalization.html | 991 +++ apiref/dff.script.core.script.html | 1093 +++ apiref/dff.script.core.types.html | 1072 +++ apiref/dff.script.extras.conditions.html | 910 +++ apiref/dff.script.extras.slots.html | 910 +++ apiref/dff.script.labels.std_labels.html | 1065 +++ .../dff.script.responses.std_responses.html | 926 +++ apiref/dff.stats.cli.html | 993 +++ apiref/dff.stats.default_extractors.html | 966 +++ apiref/dff.stats.instrumentor.html | 1008 +++ apiref/dff.stats.utils.html | 1036 +++ .../dff.utils.db_benchmark.basic_config.html | 1094 +++ apiref/dff.utils.db_benchmark.benchmark.html | 1248 +++ apiref/dff.utils.db_benchmark.report.html | 937 +++ apiref/dff.utils.testing.cleanup_db.html | 994 +++ apiref/dff.utils.testing.common.html | 959 +++ .../dff.utils.testing.response_comparers.html | 931 +++ apiref/dff.utils.testing.telegram.html | 1056 +++ apiref/dff.utils.testing.toy_script.html | 959 +++ ...s.turn_caching.singleton_turn_caching.html | 946 +++ apiref/index_caching.html | 881 ++ apiref/index_context_storages.html | 929 +++ apiref/index_db_benchmark.html | 887 ++ apiref/index_messenger_interfaces.html | 902 ++ apiref/index_pipeline.html | 938 +++ apiref/index_script.html | 935 +++ apiref/index_stats.html | 894 ++ apiref/index_testing_utils.html | 895 ++ community.html | 613 ++ development.html | 637 ++ examples.html | 601 ++ genindex.html | 2410 ++++++ get_started.html | 676 ++ index.html | 656 ++ objects.inv | Bin 0 -> 20748 bytes py-modindex.html | 816 ++ reference.html | 883 ++ search.html | 580 ++ searchindex.js | 1 + tutorials.html | 811 ++ tutorials/index_context_storages.html | 744 ++ tutorials/index_interfaces.html | 791 ++ tutorials/index_pipeline.html | 741 ++ tutorials/index_script.html | 782 ++ tutorials/index_stats.html | 696 ++ tutorials/index_utils.html | 696 ++ .../tutorials.context_storages.1_basics.html | 793 ++ .../tutorials.context_storages.1_basics.ipynb | 132 + ...torials.context_storages.2_postgresql.html | 804 ++ ...orials.context_storages.2_postgresql.ipynb | 165 + .../tutorials.context_storages.3_mongodb.html | 803 ++ ...tutorials.context_storages.3_mongodb.ipynb | 163 + .../tutorials.context_storages.4_redis.html | 802 ++ .../tutorials.context_storages.4_redis.ipynb | 162 + .../tutorials.context_storages.5_mysql.html | 804 ++ .../tutorials.context_storages.5_mysql.ipynb | 165 + .../tutorials.context_storages.6_sqlite.html | 807 ++ .../tutorials.context_storages.6_sqlite.ipynb | 169 + ...ls.context_storages.7_yandex_database.html | 810 ++ ...s.context_storages.7_yandex_database.ipynb | 170 + ...ls.context_storages.8_db_benchmarking.html | 1107 +++ ...s.context_storages.8_db_benchmarking.ipynb | 7231 +++++++++++++++++ ...tutorials.messengers.telegram.1_basic.html | 824 ++ ...utorials.messengers.telegram.1_basic.ipynb | 212 + ...torials.messengers.telegram.2_buttons.html | 920 +++ ...orials.messengers.telegram.2_buttons.ipynb | 298 + ...gers.telegram.3_buttons_with_callback.html | 906 +++ ...ers.telegram.3_buttons_with_callback.ipynb | 287 + ...ials.messengers.telegram.4_conditions.html | 875 ++ ...als.messengers.telegram.4_conditions.ipynb | 263 + ...gers.telegram.5_conditions_with_media.html | 952 +++ ...ers.telegram.5_conditions_with_media.ipynb | 354 + ...ssengers.telegram.6_conditions_extras.html | 858 ++ ...sengers.telegram.6_conditions_extras.ipynb | 245 + ...s.messengers.telegram.7_polling_setup.html | 802 ++ ....messengers.telegram.7_polling_setup.ipynb | 170 + ...s.messengers.telegram.8_webhook_setup.html | 796 ++ ....messengers.telegram.8_webhook_setup.ipynb | 167 + ...essengers.web_api_interface.1_fastapi.html | 838 ++ ...ssengers.web_api_interface.1_fastapi.ipynb | 233 + ...rs.web_api_interface.2_websocket_chat.html | 857 ++ ...s.web_api_interface.2_websocket_chat.ipynb | 231 + ..._interface.3_load_testing_with_locust.html | 917 +++ ...interface.3_load_testing_with_locust.ipynb | 279 + ...rs.web_api_interface.4_streamlit_chat.html | 986 +++ ...s.web_api_interface.4_streamlit_chat.ipynb | 441 + tutorials/tutorials.pipeline.1_basics.html | 824 ++ tutorials/tutorials.pipeline.1_basics.ipynb | 226 + ...ls.pipeline.2_pre_and_post_processors.html | 837 ++ ...s.pipeline.2_pre_and_post_processors.ipynb | 216 + ...e.3_pipeline_dict_with_services_basic.html | 839 ++ ....3_pipeline_dict_with_services_basic.ipynb | 232 + ...ne.3_pipeline_dict_with_services_full.html | 895 ++ ...e.3_pipeline_dict_with_services_full.ipynb | 302 + ...ipeline.4_groups_and_conditions_basic.html | 860 ++ ...peline.4_groups_and_conditions_basic.ipynb | 260 + ...pipeline.4_groups_and_conditions_full.html | 933 +++ ...ipeline.4_groups_and_conditions_full.ipynb | 389 + ...synchronous_groups_and_services_basic.html | 811 ++ ...ynchronous_groups_and_services_basic.ipynb | 188 + ...asynchronous_groups_and_services_full.html | 875 ++ ...synchronous_groups_and_services_full.ipynb | 313 + ...rials.pipeline.6_extra_handlers_basic.html | 871 ++ ...ials.pipeline.6_extra_handlers_basic.ipynb | 258 + ...orials.pipeline.6_extra_handlers_full.html | 994 +++ ...rials.pipeline.6_extra_handlers_full.ipynb | 392 + ...eline.7_extra_handlers_and_extensions.html | 885 ++ ...line.7_extra_handlers_and_extensions.ipynb | 287 + tutorials/tutorials.script.core.1_basics.html | 906 +++ .../tutorials.script.core.1_basics.ipynb | 307 + .../tutorials.script.core.2_conditions.html | 983 +++ .../tutorials.script.core.2_conditions.ipynb | 379 + .../tutorials.script.core.3_responses.html | 987 +++ .../tutorials.script.core.3_responses.ipynb | 364 + .../tutorials.script.core.4_transitions.html | 1076 +++ .../tutorials.script.core.4_transitions.ipynb | 483 ++ ...ials.script.core.5_global_transitions.html | 1004 +++ ...als.script.core.5_global_transitions.ipynb | 378 + ...s.script.core.6_context_serialization.html | 847 ++ ....script.core.6_context_serialization.ipynb | 239 + ...script.core.7_pre_response_processing.html | 1222 +++ ...cript.core.7_pre_response_processing.ipynb | 709 ++ tutorials/tutorials.script.core.8_misc.html | 932 +++ tutorials/tutorials.script.core.8_misc.ipynb | 299 + ...ipt.core.9_pre_transitions_processing.html | 960 +++ ...pt.core.9_pre_transitions_processing.ipynb | 351 + .../tutorials.script.responses.1_basics.html | 885 ++ .../tutorials.script.responses.1_basics.ipynb | 252 + .../tutorials.script.responses.2_buttons.html | 1026 +++ ...tutorials.script.responses.2_buttons.ipynb | 394 + .../tutorials.script.responses.3_media.html | 888 ++ .../tutorials.script.responses.3_media.ipynb | 255 + ...ials.script.responses.4_multi_message.html | 925 +++ ...als.script.responses.4_multi_message.ipynb | 283 + ...tutorials.stats.1_extractor_functions.html | 859 ++ ...utorials.stats.1_extractor_functions.ipynb | 289 + ...utorials.stats.2_pipeline_integration.html | 881 ++ ...torials.stats.2_pipeline_integration.ipynb | 274 + tutorials/tutorials.utils.1_cache.html | 833 ++ tutorials/tutorials.utils.1_cache.ipynb | 203 + tutorials/tutorials.utils.2_lru_cache.html | 831 ++ tutorials/tutorials.utils.2_lru_cache.ipynb | 201 + user_guides.html | 662 ++ user_guides/basic_conceptions.html | 994 +++ user_guides/context_guide.html | 859 ++ user_guides/optimization_guide.html | 730 ++ user_guides/superset_guide.html | 813 ++ 606 files changed, 207935 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/about_us.doctree create mode 100644 .doctrees/apiref/dff.context_storages.database.doctree create mode 100644 .doctrees/apiref/dff.context_storages.json.doctree create mode 100644 .doctrees/apiref/dff.context_storages.mongo.doctree create mode 100644 .doctrees/apiref/dff.context_storages.pickle.doctree create mode 100644 .doctrees/apiref/dff.context_storages.protocol.doctree create mode 100644 .doctrees/apiref/dff.context_storages.redis.doctree create mode 100644 .doctrees/apiref/dff.context_storages.shelve.doctree create mode 100644 .doctrees/apiref/dff.context_storages.sql.doctree create mode 100644 .doctrees/apiref/dff.context_storages.ydb.doctree create mode 100644 .doctrees/apiref/dff.messengers.common.interface.doctree create mode 100644 .doctrees/apiref/dff.messengers.common.types.doctree create mode 100644 .doctrees/apiref/dff.messengers.telegram.interface.doctree create mode 100644 .doctrees/apiref/dff.messengers.telegram.message.doctree create mode 100644 .doctrees/apiref/dff.messengers.telegram.messenger.doctree create mode 100644 .doctrees/apiref/dff.messengers.telegram.utils.doctree create mode 100644 .doctrees/apiref/dff.pipeline.conditions.doctree create mode 100644 .doctrees/apiref/dff.pipeline.pipeline.actor.doctree create mode 100644 .doctrees/apiref/dff.pipeline.pipeline.component.doctree create mode 100644 .doctrees/apiref/dff.pipeline.pipeline.pipeline.doctree create mode 100644 .doctrees/apiref/dff.pipeline.pipeline.utils.doctree create mode 100644 .doctrees/apiref/dff.pipeline.service.extra.doctree create mode 100644 .doctrees/apiref/dff.pipeline.service.group.doctree create mode 100644 .doctrees/apiref/dff.pipeline.service.service.doctree create mode 100644 .doctrees/apiref/dff.pipeline.service.utils.doctree create mode 100644 .doctrees/apiref/dff.pipeline.types.doctree create mode 100644 .doctrees/apiref/dff.script.conditions.std_conditions.doctree create mode 100644 .doctrees/apiref/dff.script.core.context.doctree create mode 100644 .doctrees/apiref/dff.script.core.keywords.doctree create mode 100644 .doctrees/apiref/dff.script.core.message.doctree create mode 100644 .doctrees/apiref/dff.script.core.normalization.doctree create mode 100644 .doctrees/apiref/dff.script.core.script.doctree create mode 100644 .doctrees/apiref/dff.script.core.types.doctree create mode 100644 .doctrees/apiref/dff.script.extras.conditions.doctree create mode 100644 .doctrees/apiref/dff.script.extras.slots.doctree create mode 100644 .doctrees/apiref/dff.script.labels.std_labels.doctree create mode 100644 .doctrees/apiref/dff.script.responses.std_responses.doctree create mode 100644 .doctrees/apiref/dff.stats.cli.doctree create mode 100644 .doctrees/apiref/dff.stats.default_extractors.doctree create mode 100644 .doctrees/apiref/dff.stats.instrumentor.doctree create mode 100644 .doctrees/apiref/dff.stats.utils.doctree create mode 100644 .doctrees/apiref/dff.utils.db_benchmark.basic_config.doctree create mode 100644 .doctrees/apiref/dff.utils.db_benchmark.benchmark.doctree create mode 100644 .doctrees/apiref/dff.utils.db_benchmark.report.doctree create mode 100644 .doctrees/apiref/dff.utils.testing.cleanup_db.doctree create mode 100644 .doctrees/apiref/dff.utils.testing.common.doctree create mode 100644 .doctrees/apiref/dff.utils.testing.response_comparers.doctree create mode 100644 .doctrees/apiref/dff.utils.testing.telegram.doctree create mode 100644 .doctrees/apiref/dff.utils.testing.toy_script.doctree create mode 100644 .doctrees/apiref/dff.utils.turn_caching.singleton_turn_caching.doctree create mode 100644 .doctrees/apiref/index_caching.doctree create mode 100644 .doctrees/apiref/index_context_storages.doctree create mode 100644 .doctrees/apiref/index_db_benchmark.doctree create mode 100644 .doctrees/apiref/index_messenger_interfaces.doctree create mode 100644 .doctrees/apiref/index_pipeline.doctree create mode 100644 .doctrees/apiref/index_script.doctree create mode 100644 .doctrees/apiref/index_stats.doctree create mode 100644 .doctrees/apiref/index_testing_utils.doctree create mode 100644 .doctrees/community.doctree create mode 100644 .doctrees/development.doctree create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/examples.doctree create mode 100644 .doctrees/get_started.doctree create mode 100644 .doctrees/index.doctree create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.1_basics.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.2_postgresql.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.3_mongodb.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.4_redis.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.5_mysql.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.6_sqlite.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.7_yandex_database.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.8_db_benchmarking.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.1_basic.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.2_buttons.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.4_conditions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.5_conditions_with_media.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.6_conditions_extras.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.7_polling_setup.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.8_webhook_setup.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.1_fastapi.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.1_basics.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.2_pre_and_post_processors.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_full.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_basic.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_full.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.1_basics.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.2_conditions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.3_responses.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.4_transitions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.5_global_transitions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.6_context_serialization.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.7_pre_response_processing.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.8_misc.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.9_pre_transitions_processing.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.responses.1_basics.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.responses.2_buttons.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.responses.3_media.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.responses.4_multi_message.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.stats.1_extractor_functions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.stats.2_pipeline_integration.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.utils.1_cache.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.utils.2_lru_cache.ipynb create mode 100644 .doctrees/reference.doctree create mode 100644 .doctrees/tutorials.doctree create mode 100644 .doctrees/tutorials/index_context_storages.doctree create mode 100644 .doctrees/tutorials/index_interfaces.doctree create mode 100644 .doctrees/tutorials/index_pipeline.doctree create mode 100644 .doctrees/tutorials/index_script.doctree create mode 100644 .doctrees/tutorials/index_stats.doctree create mode 100644 .doctrees/tutorials/index_utils.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.1_basics.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.2_postgresql.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.3_mongodb.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.4_redis.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.5_mysql.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.6_sqlite.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.7_yandex_database.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.8_db_benchmarking.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.1_basic.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.2_buttons.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.4_conditions.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.5_conditions_with_media.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.6_conditions_extras.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.7_polling_setup.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.8_webhook_setup.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.web_api_interface.1_fastapi.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.1_basics.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.2_pre_and_post_processors.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_full.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.6_extra_handlers_basic.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.6_extra_handlers_full.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.1_basics.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.2_conditions.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.3_responses.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.4_transitions.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.5_global_transitions.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.6_context_serialization.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.7_pre_response_processing.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.8_misc.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.9_pre_transitions_processing.doctree create mode 100644 .doctrees/tutorials/tutorials.script.responses.1_basics.doctree create mode 100644 .doctrees/tutorials/tutorials.script.responses.2_buttons.doctree create mode 100644 .doctrees/tutorials/tutorials.script.responses.3_media.doctree create mode 100644 .doctrees/tutorials/tutorials.script.responses.4_multi_message.doctree create mode 100644 .doctrees/tutorials/tutorials.stats.1_extractor_functions.doctree create mode 100644 .doctrees/tutorials/tutorials.stats.2_pipeline_integration.doctree create mode 100644 .doctrees/tutorials/tutorials.utils.1_cache.doctree create mode 100644 .doctrees/tutorials/tutorials.utils.2_lru_cache.doctree create mode 100644 .doctrees/user_guides.doctree create mode 100644 .doctrees/user_guides/basic_conceptions.doctree create mode 100644 .doctrees/user_guides/context_guide.doctree create mode 100644 .doctrees/user_guides/optimization_guide.doctree create mode 100644 .doctrees/user_guides/superset_guide.doctree create mode 100644 .nojekyll create mode 100644 _images/annotations.png create mode 100644 _images/benchmark_compare.png create mode 100644 _images/benchmark_mass_compare.png create mode 100644 _images/benchmark_sets.png create mode 100644 _images/benchmark_view.png create mode 100644 _images/databases.png create mode 100644 _images/general_stats.png create mode 100644 _images/overview.png create mode 100644 _images/service_stats.png create mode 100644 _images/user_actor.png create mode 100644 _misc/benchmark_schema.json create mode 100644 _misc/benchmark_streamlit.py create mode 100644 _modules/dff/context_storages/database.html create mode 100644 _modules/dff/context_storages/json.html create mode 100644 _modules/dff/context_storages/mongo.html create mode 100644 _modules/dff/context_storages/pickle.html create mode 100644 _modules/dff/context_storages/protocol.html create mode 100644 _modules/dff/context_storages/redis.html create mode 100644 _modules/dff/context_storages/shelve.html create mode 100644 _modules/dff/context_storages/sql.html create mode 100644 _modules/dff/context_storages/ydb.html create mode 100644 _modules/dff/messengers/common/interface.html create mode 100644 _modules/dff/messengers/telegram/interface.html create mode 100644 _modules/dff/messengers/telegram/message.html create mode 100644 _modules/dff/messengers/telegram/messenger.html create mode 100644 _modules/dff/messengers/telegram/utils.html create mode 100644 _modules/dff/pipeline/conditions.html create mode 100644 _modules/dff/pipeline/pipeline/actor.html create mode 100644 _modules/dff/pipeline/pipeline/component.html create mode 100644 _modules/dff/pipeline/pipeline/pipeline.html create mode 100644 _modules/dff/pipeline/pipeline/utils.html create mode 100644 _modules/dff/pipeline/service/extra.html create mode 100644 _modules/dff/pipeline/service/group.html create mode 100644 _modules/dff/pipeline/service/service.html create mode 100644 _modules/dff/pipeline/service/utils.html create mode 100644 _modules/dff/pipeline/types.html create mode 100644 _modules/dff/script/conditions/std_conditions.html create mode 100644 _modules/dff/script/core/context.html create mode 100644 _modules/dff/script/core/keywords.html create mode 100644 _modules/dff/script/core/message.html create mode 100644 _modules/dff/script/core/normalization.html create mode 100644 _modules/dff/script/core/script.html create mode 100644 _modules/dff/script/core/types.html create mode 100644 _modules/dff/script/labels/std_labels.html create mode 100644 _modules/dff/script/responses/std_responses.html create mode 100644 _modules/dff/stats/cli.html create mode 100644 _modules/dff/stats/default_extractors.html create mode 100644 _modules/dff/stats/instrumentor.html create mode 100644 _modules/dff/stats/utils.html create mode 100644 _modules/dff/utils/db_benchmark/basic_config.html create mode 100644 _modules/dff/utils/db_benchmark/benchmark.html create mode 100644 _modules/dff/utils/db_benchmark/report.html create mode 100644 _modules/dff/utils/testing/cleanup_db.html create mode 100644 _modules/dff/utils/testing/common.html create mode 100644 _modules/dff/utils/testing/response_comparers.html create mode 100644 _modules/dff/utils/testing/telegram.html create mode 100644 _modules/dff/utils/turn_caching/singleton_turn_caching.html create mode 100644 _modules/index.html create mode 100644 _sources/about_us.rst.txt create mode 100644 _sources/apiref/dff.context_storages.database.rst.txt create mode 100644 _sources/apiref/dff.context_storages.json.rst.txt create mode 100644 _sources/apiref/dff.context_storages.mongo.rst.txt create mode 100644 _sources/apiref/dff.context_storages.pickle.rst.txt create mode 100644 _sources/apiref/dff.context_storages.protocol.rst.txt create mode 100644 _sources/apiref/dff.context_storages.redis.rst.txt create mode 100644 _sources/apiref/dff.context_storages.shelve.rst.txt create mode 100644 _sources/apiref/dff.context_storages.sql.rst.txt create mode 100644 _sources/apiref/dff.context_storages.ydb.rst.txt create mode 100644 _sources/apiref/dff.messengers.common.interface.rst.txt create mode 100644 _sources/apiref/dff.messengers.common.types.rst.txt create mode 100644 _sources/apiref/dff.messengers.telegram.interface.rst.txt create mode 100644 _sources/apiref/dff.messengers.telegram.message.rst.txt create mode 100644 _sources/apiref/dff.messengers.telegram.messenger.rst.txt create mode 100644 _sources/apiref/dff.messengers.telegram.utils.rst.txt create mode 100644 _sources/apiref/dff.pipeline.conditions.rst.txt create mode 100644 _sources/apiref/dff.pipeline.pipeline.actor.rst.txt create mode 100644 _sources/apiref/dff.pipeline.pipeline.component.rst.txt create mode 100644 _sources/apiref/dff.pipeline.pipeline.pipeline.rst.txt create mode 100644 _sources/apiref/dff.pipeline.pipeline.utils.rst.txt create mode 100644 _sources/apiref/dff.pipeline.service.extra.rst.txt create mode 100644 _sources/apiref/dff.pipeline.service.group.rst.txt create mode 100644 _sources/apiref/dff.pipeline.service.service.rst.txt create mode 100644 _sources/apiref/dff.pipeline.service.utils.rst.txt create mode 100644 _sources/apiref/dff.pipeline.types.rst.txt create mode 100644 _sources/apiref/dff.script.conditions.std_conditions.rst.txt create mode 100644 _sources/apiref/dff.script.core.context.rst.txt create mode 100644 _sources/apiref/dff.script.core.keywords.rst.txt create mode 100644 _sources/apiref/dff.script.core.message.rst.txt create mode 100644 _sources/apiref/dff.script.core.normalization.rst.txt create mode 100644 _sources/apiref/dff.script.core.script.rst.txt create mode 100644 _sources/apiref/dff.script.core.types.rst.txt create mode 100644 _sources/apiref/dff.script.extras.conditions.rst.txt create mode 100644 _sources/apiref/dff.script.extras.slots.rst.txt create mode 100644 _sources/apiref/dff.script.labels.std_labels.rst.txt create mode 100644 _sources/apiref/dff.script.responses.std_responses.rst.txt create mode 100644 _sources/apiref/dff.stats.cli.rst.txt create mode 100644 _sources/apiref/dff.stats.default_extractors.rst.txt create mode 100644 _sources/apiref/dff.stats.instrumentor.rst.txt create mode 100644 _sources/apiref/dff.stats.utils.rst.txt create mode 100644 _sources/apiref/dff.utils.db_benchmark.basic_config.rst.txt create mode 100644 _sources/apiref/dff.utils.db_benchmark.benchmark.rst.txt create mode 100644 _sources/apiref/dff.utils.db_benchmark.report.rst.txt create mode 100644 _sources/apiref/dff.utils.testing.cleanup_db.rst.txt create mode 100644 _sources/apiref/dff.utils.testing.common.rst.txt create mode 100644 _sources/apiref/dff.utils.testing.response_comparers.rst.txt create mode 100644 _sources/apiref/dff.utils.testing.telegram.rst.txt create mode 100644 _sources/apiref/dff.utils.testing.toy_script.rst.txt create mode 100644 _sources/apiref/dff.utils.turn_caching.singleton_turn_caching.rst.txt create mode 100644 _sources/apiref/index_caching.rst.txt create mode 100644 _sources/apiref/index_context_storages.rst.txt create mode 100644 _sources/apiref/index_db_benchmark.rst.txt create mode 100644 _sources/apiref/index_messenger_interfaces.rst.txt create mode 100644 _sources/apiref/index_pipeline.rst.txt create mode 100644 _sources/apiref/index_script.rst.txt create mode 100644 _sources/apiref/index_stats.rst.txt create mode 100644 _sources/apiref/index_testing_utils.rst.txt create mode 100644 _sources/community.rst.txt create mode 100644 _sources/development.rst.txt create mode 100644 _sources/examples.rst.txt create mode 100644 _sources/get_started.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/reference.rst.txt create mode 100644 _sources/tutorials.rst.txt create mode 100644 _sources/tutorials/index_context_storages.rst.txt create mode 100644 _sources/tutorials/index_interfaces.rst.txt create mode 100644 _sources/tutorials/index_pipeline.rst.txt create mode 100644 _sources/tutorials/index_script.rst.txt create mode 100644 _sources/tutorials/index_stats.rst.txt create mode 100644 _sources/tutorials/index_utils.rst.txt create mode 100644 _sources/tutorials/tutorials.context_storages.1_basics.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.2_postgresql.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.3_mongodb.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.4_redis.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.5_mysql.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.6_sqlite.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.7_yandex_database.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.8_db_benchmarking.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.1_basic.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.2_buttons.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.4_conditions.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.5_conditions_with_media.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.6_conditions_extras.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.7_polling_setup.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.8_webhook_setup.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.web_api_interface.1_fastapi.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.1_basics.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.2_pre_and_post_processors.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.4_groups_and_conditions_full.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.6_extra_handlers_basic.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.6_extra_handlers_full.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.1_basics.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.2_conditions.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.3_responses.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.4_transitions.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.5_global_transitions.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.6_context_serialization.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.7_pre_response_processing.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.8_misc.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.9_pre_transitions_processing.py.txt create mode 100644 _sources/tutorials/tutorials.script.responses.1_basics.py.txt create mode 100644 _sources/tutorials/tutorials.script.responses.2_buttons.py.txt create mode 100644 _sources/tutorials/tutorials.script.responses.3_media.py.txt create mode 100644 _sources/tutorials/tutorials.script.responses.4_multi_message.py.txt create mode 100644 _sources/tutorials/tutorials.stats.1_extractor_functions.py.txt create mode 100644 _sources/tutorials/tutorials.stats.2_pipeline_integration.py.txt create mode 100644 _sources/tutorials/tutorials.utils.1_cache.py.txt create mode 100644 _sources/tutorials/tutorials.utils.2_lru_cache.py.txt create mode 100644 _sources/user_guides.rst.txt create mode 100644 _sources/user_guides/basic_conceptions.rst.txt create mode 100644 _sources/user_guides/context_guide.rst.txt create mode 100644 _sources/user_guides/optimization_guide.rst.txt create mode 100644 _sources/user_guides/superset_guide.rst.txt create mode 100644 _static/auto-render.min.js create mode 100644 _static/basic.css create mode 100644 _static/binder_badge_logo.svg create mode 100644 _static/broken_example.png create mode 100644 _static/check-solid.svg create mode 100644 _static/clipboard.min.js create mode 100644 _static/copy-button.svg create mode 100644 _static/copybutton.css create mode 100644 _static/copybutton.js create mode 100644 _static/copybutton_funcs.js create mode 100644 _static/css/custom.css create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/drawio/dfe/user_actor.png create mode 100644 _static/file.png create mode 100644 _static/images/additional_stats.png create mode 100644 _static/images/annotations.png create mode 100644 _static/images/benchmark_compare.png create mode 100644 _static/images/benchmark_mass_compare.png create mode 100644 _static/images/benchmark_sets.png create mode 100644 _static/images/benchmark_view.png create mode 100644 _static/images/databases.png create mode 100644 _static/images/general_stats.png create mode 100644 _static/images/logo-colab.svg create mode 100644 _static/images/logo-deeppavlov.svg create mode 100644 _static/images/logo-dff.svg create mode 100644 _static/images/logo-download.svg create mode 100644 _static/images/logo-github.svg create mode 100644 _static/images/logo-simple.svg create mode 100644 _static/images/overview.png create mode 100644 _static/images/service_stats.png create mode 100644 _static/jupyterlite_badge_logo.svg create mode 100644 _static/katex-math.css create mode 100644 _static/katex.min.js create mode 100644 _static/katex_autorenderer.js create mode 100644 _static/language_data.js create mode 100644 _static/logo-simple.svg create mode 100644 _static/minus.png create mode 100644 _static/nbsphinx-broken-thumbnail.svg create mode 100644 _static/nbsphinx-code-cells.css create mode 100644 _static/nbsphinx-gallery.css create mode 100644 _static/nbsphinx-no-thumbnail.svg create mode 100644 _static/no_image.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/scripts/bootstrap.js create mode 100644 _static/scripts/bootstrap.js.LICENSE.txt create mode 100644 _static/scripts/bootstrap.js.map create mode 100644 _static/scripts/pydata-sphinx-theme.js create mode 100644 _static/scripts/pydata-sphinx-theme.js.map create mode 100644 _static/searchtools.js create mode 100644 _static/sg_gallery-binder.css create mode 100644 _static/sg_gallery-dataframe.css create mode 100644 _static/sg_gallery-rendered-html.css create mode 100644 _static/sg_gallery.css create mode 100644 _static/sphinx_highlight.js create mode 100644 _static/styles/bootstrap.css create mode 100644 _static/styles/pydata-sphinx-theme.css create mode 100644 _static/styles/theme.css create mode 100644 _static/vendor/fontawesome/6.1.2/LICENSE.txt create mode 100644 _static/vendor/fontawesome/6.1.2/css/all.min.css create mode 100644 _static/vendor/fontawesome/6.1.2/js/all.min.js create mode 100644 _static/vendor/fontawesome/6.1.2/js/all.min.js.LICENSE.txt create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-brands-400.ttf create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-brands-400.woff2 create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-regular-400.ttf create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-regular-400.woff2 create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-solid-900.ttf create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-solid-900.woff2 create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-v4compatibility.ttf create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-v4compatibility.woff2 create mode 100644 _static/webpack-macros.html create mode 100644 about_us.html create mode 100644 apiref/dff.context_storages.database.html create mode 100644 apiref/dff.context_storages.json.html create mode 100644 apiref/dff.context_storages.mongo.html create mode 100644 apiref/dff.context_storages.pickle.html create mode 100644 apiref/dff.context_storages.protocol.html create mode 100644 apiref/dff.context_storages.redis.html create mode 100644 apiref/dff.context_storages.shelve.html create mode 100644 apiref/dff.context_storages.sql.html create mode 100644 apiref/dff.context_storages.ydb.html create mode 100644 apiref/dff.messengers.common.interface.html create mode 100644 apiref/dff.messengers.common.types.html create mode 100644 apiref/dff.messengers.telegram.interface.html create mode 100644 apiref/dff.messengers.telegram.message.html create mode 100644 apiref/dff.messengers.telegram.messenger.html create mode 100644 apiref/dff.messengers.telegram.utils.html create mode 100644 apiref/dff.pipeline.conditions.html create mode 100644 apiref/dff.pipeline.pipeline.actor.html create mode 100644 apiref/dff.pipeline.pipeline.component.html create mode 100644 apiref/dff.pipeline.pipeline.pipeline.html create mode 100644 apiref/dff.pipeline.pipeline.utils.html create mode 100644 apiref/dff.pipeline.service.extra.html create mode 100644 apiref/dff.pipeline.service.group.html create mode 100644 apiref/dff.pipeline.service.service.html create mode 100644 apiref/dff.pipeline.service.utils.html create mode 100644 apiref/dff.pipeline.types.html create mode 100644 apiref/dff.script.conditions.std_conditions.html create mode 100644 apiref/dff.script.core.context.html create mode 100644 apiref/dff.script.core.keywords.html create mode 100644 apiref/dff.script.core.message.html create mode 100644 apiref/dff.script.core.normalization.html create mode 100644 apiref/dff.script.core.script.html create mode 100644 apiref/dff.script.core.types.html create mode 100644 apiref/dff.script.extras.conditions.html create mode 100644 apiref/dff.script.extras.slots.html create mode 100644 apiref/dff.script.labels.std_labels.html create mode 100644 apiref/dff.script.responses.std_responses.html create mode 100644 apiref/dff.stats.cli.html create mode 100644 apiref/dff.stats.default_extractors.html create mode 100644 apiref/dff.stats.instrumentor.html create mode 100644 apiref/dff.stats.utils.html create mode 100644 apiref/dff.utils.db_benchmark.basic_config.html create mode 100644 apiref/dff.utils.db_benchmark.benchmark.html create mode 100644 apiref/dff.utils.db_benchmark.report.html create mode 100644 apiref/dff.utils.testing.cleanup_db.html create mode 100644 apiref/dff.utils.testing.common.html create mode 100644 apiref/dff.utils.testing.response_comparers.html create mode 100644 apiref/dff.utils.testing.telegram.html create mode 100644 apiref/dff.utils.testing.toy_script.html create mode 100644 apiref/dff.utils.turn_caching.singleton_turn_caching.html create mode 100644 apiref/index_caching.html create mode 100644 apiref/index_context_storages.html create mode 100644 apiref/index_db_benchmark.html create mode 100644 apiref/index_messenger_interfaces.html create mode 100644 apiref/index_pipeline.html create mode 100644 apiref/index_script.html create mode 100644 apiref/index_stats.html create mode 100644 apiref/index_testing_utils.html create mode 100644 community.html create mode 100644 development.html create mode 100644 examples.html create mode 100644 genindex.html create mode 100644 get_started.html create mode 100644 index.html create mode 100644 objects.inv create mode 100644 py-modindex.html create mode 100644 reference.html create mode 100644 search.html create mode 100644 searchindex.js create mode 100644 tutorials.html create mode 100644 tutorials/index_context_storages.html create mode 100644 tutorials/index_interfaces.html create mode 100644 tutorials/index_pipeline.html create mode 100644 tutorials/index_script.html create mode 100644 tutorials/index_stats.html create mode 100644 tutorials/index_utils.html create mode 100644 tutorials/tutorials.context_storages.1_basics.html create mode 100644 tutorials/tutorials.context_storages.1_basics.ipynb create mode 100644 tutorials/tutorials.context_storages.2_postgresql.html create mode 100644 tutorials/tutorials.context_storages.2_postgresql.ipynb create mode 100644 tutorials/tutorials.context_storages.3_mongodb.html create mode 100644 tutorials/tutorials.context_storages.3_mongodb.ipynb create mode 100644 tutorials/tutorials.context_storages.4_redis.html create mode 100644 tutorials/tutorials.context_storages.4_redis.ipynb create mode 100644 tutorials/tutorials.context_storages.5_mysql.html create mode 100644 tutorials/tutorials.context_storages.5_mysql.ipynb create mode 100644 tutorials/tutorials.context_storages.6_sqlite.html create mode 100644 tutorials/tutorials.context_storages.6_sqlite.ipynb create mode 100644 tutorials/tutorials.context_storages.7_yandex_database.html create mode 100644 tutorials/tutorials.context_storages.7_yandex_database.ipynb create mode 100644 tutorials/tutorials.context_storages.8_db_benchmarking.html create mode 100644 tutorials/tutorials.context_storages.8_db_benchmarking.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.1_basic.html create mode 100644 tutorials/tutorials.messengers.telegram.1_basic.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.2_buttons.html create mode 100644 tutorials/tutorials.messengers.telegram.2_buttons.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.3_buttons_with_callback.html create mode 100644 tutorials/tutorials.messengers.telegram.3_buttons_with_callback.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.4_conditions.html create mode 100644 tutorials/tutorials.messengers.telegram.4_conditions.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.5_conditions_with_media.html create mode 100644 tutorials/tutorials.messengers.telegram.5_conditions_with_media.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.6_conditions_extras.html create mode 100644 tutorials/tutorials.messengers.telegram.6_conditions_extras.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.7_polling_setup.html create mode 100644 tutorials/tutorials.messengers.telegram.7_polling_setup.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.8_webhook_setup.html create mode 100644 tutorials/tutorials.messengers.telegram.8_webhook_setup.ipynb create mode 100644 tutorials/tutorials.messengers.web_api_interface.1_fastapi.html create mode 100644 tutorials/tutorials.messengers.web_api_interface.1_fastapi.ipynb create mode 100644 tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.html create mode 100644 tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.ipynb create mode 100644 tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.html create mode 100644 tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.ipynb create mode 100644 tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.html create mode 100644 tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.ipynb create mode 100644 tutorials/tutorials.pipeline.1_basics.html create mode 100644 tutorials/tutorials.pipeline.1_basics.ipynb create mode 100644 tutorials/tutorials.pipeline.2_pre_and_post_processors.html create mode 100644 tutorials/tutorials.pipeline.2_pre_and_post_processors.ipynb create mode 100644 tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.html create mode 100644 tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.ipynb create mode 100644 tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.html create mode 100644 tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.ipynb create mode 100644 tutorials/tutorials.pipeline.4_groups_and_conditions_basic.html create mode 100644 tutorials/tutorials.pipeline.4_groups_and_conditions_basic.ipynb create mode 100644 tutorials/tutorials.pipeline.4_groups_and_conditions_full.html create mode 100644 tutorials/tutorials.pipeline.4_groups_and_conditions_full.ipynb create mode 100644 tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.html create mode 100644 tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.ipynb create mode 100644 tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.html create mode 100644 tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.ipynb create mode 100644 tutorials/tutorials.pipeline.6_extra_handlers_basic.html create mode 100644 tutorials/tutorials.pipeline.6_extra_handlers_basic.ipynb create mode 100644 tutorials/tutorials.pipeline.6_extra_handlers_full.html create mode 100644 tutorials/tutorials.pipeline.6_extra_handlers_full.ipynb create mode 100644 tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.html create mode 100644 tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.ipynb create mode 100644 tutorials/tutorials.script.core.1_basics.html create mode 100644 tutorials/tutorials.script.core.1_basics.ipynb create mode 100644 tutorials/tutorials.script.core.2_conditions.html create mode 100644 tutorials/tutorials.script.core.2_conditions.ipynb create mode 100644 tutorials/tutorials.script.core.3_responses.html create mode 100644 tutorials/tutorials.script.core.3_responses.ipynb create mode 100644 tutorials/tutorials.script.core.4_transitions.html create mode 100644 tutorials/tutorials.script.core.4_transitions.ipynb create mode 100644 tutorials/tutorials.script.core.5_global_transitions.html create mode 100644 tutorials/tutorials.script.core.5_global_transitions.ipynb create mode 100644 tutorials/tutorials.script.core.6_context_serialization.html create mode 100644 tutorials/tutorials.script.core.6_context_serialization.ipynb create mode 100644 tutorials/tutorials.script.core.7_pre_response_processing.html create mode 100644 tutorials/tutorials.script.core.7_pre_response_processing.ipynb create mode 100644 tutorials/tutorials.script.core.8_misc.html create mode 100644 tutorials/tutorials.script.core.8_misc.ipynb create mode 100644 tutorials/tutorials.script.core.9_pre_transitions_processing.html create mode 100644 tutorials/tutorials.script.core.9_pre_transitions_processing.ipynb create mode 100644 tutorials/tutorials.script.responses.1_basics.html create mode 100644 tutorials/tutorials.script.responses.1_basics.ipynb create mode 100644 tutorials/tutorials.script.responses.2_buttons.html create mode 100644 tutorials/tutorials.script.responses.2_buttons.ipynb create mode 100644 tutorials/tutorials.script.responses.3_media.html create mode 100644 tutorials/tutorials.script.responses.3_media.ipynb create mode 100644 tutorials/tutorials.script.responses.4_multi_message.html create mode 100644 tutorials/tutorials.script.responses.4_multi_message.ipynb create mode 100644 tutorials/tutorials.stats.1_extractor_functions.html create mode 100644 tutorials/tutorials.stats.1_extractor_functions.ipynb create mode 100644 tutorials/tutorials.stats.2_pipeline_integration.html create mode 100644 tutorials/tutorials.stats.2_pipeline_integration.ipynb create mode 100644 tutorials/tutorials.utils.1_cache.html create mode 100644 tutorials/tutorials.utils.1_cache.ipynb create mode 100644 tutorials/tutorials.utils.2_lru_cache.html create mode 100644 tutorials/tutorials.utils.2_lru_cache.ipynb create mode 100644 user_guides.html create mode 100644 user_guides/basic_conceptions.html create mode 100644 user_guides/context_guide.html create mode 100644 user_guides/optimization_guide.html create mode 100644 user_guides/superset_guide.html diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000000..69694a8da6 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: ff11a09a351086ec486c122975495b78 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/about_us.doctree b/.doctrees/about_us.doctree new file mode 100644 index 0000000000000000000000000000000000000000..509e065af41a56f09847d8ee8434e6a3e357c7da GIT binary patch literal 3588 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 HVCjDW@WU1= literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.context_storages.pickle.doctree b/.doctrees/apiref/dff.context_storages.pickle.doctree new file mode 100644 index 0000000000000000000000000000000000000000..74147299f08a1207a265580a4fe3ba060daae2c5 GIT binary patch literal 31868 zcmd^I3y>VgS=Q@Lx|4Kz_z~N&lsTUitt!%0=XPgrW^Q+9 zJu@rmlGrg+IauX3nDSC2aXGe&REne^P%aYUxJcp(P?NYs{=7=|_*~dE zJ8XSuE>QnndxDL(O-wKB+H2WFCE^D@jY~Gnv2_inWp(E|^K6PLgia$UOAd~QroUjt z{8J3Er@#e!>m6NtJN})Ef9K=h1;hm>z(~9IvoXxssdeq09ow*9Z_lv%W^J!&&H9~I z%kpPWdj8^U%`qF^LZ#mDPFCtZMx0k#ug|8rGb^}LZZ93g$OEvpwP1MlTu$1%j<2?- z?X~tL_S(+8y_>BMtZL|Zt)5jc;mfhm3Bi6PKlT_KzeTJF$ptE`yA8{Q@1yejx?IxG z#Ubj#o|&_EfwyK~mJxprp!yp{^%caYHJm>akRWrxH`}(xhIbrWy=v8Mwq*!z7(zOY zw(p&ApnHaCh^5&-Zw6M)IAQq#SWIgZqR~Mt7}uPGcb2ca=2{{1ZxbSar@_A|Pu^xb zfp|9X&>=FRXOLo8hS{nazD25Z!ZM^(7&S9A4W||LZPY!#X@=#=W1(R-AY%dV{JI-% zAVQWIIE|%Z^aLTaHbWYVRj)f$2U<0WFO0zQA;!+TO%ftLGBBX0tZKH5c}w-mXM>@( zmqOcXmAfQNCHp8lFfvQKvE0q+atEWfscp4t(2U9{sHC=rY)9@o@IjG&G@Q`#&4$*} z{sk`mN7>f&>S@Dxmp+W7_`~+`v9LAmB^crM(tf_?T}wA5q!;gmUc4hudDuAS1l@;$ zG}{iIXY&js%sF(6uLqms0XzT&l81yK zB%Q8N;s%hsXO3;#+hv#Ld|l3>+?7Eocrg+4Lc~PyP3xdtRo%1jc$-4;Df*@oIEZA! zj-Lp@F3Ret1c|rzN>93qZQ;$$7PNyqW~~o)*)JZRp(y*Hv4>B4&yjt`VbxtFXq#2* zpb=Fu_8d8aP)~Yj=_z8NdPWy2ecXbO-tTHd_|&5ePcenB=oFHUlC3`3HPf>BCGhbX zT^^MPD#2qDr<#p}d>-UoeF{fTSY49G&!O$pqCfVb6%mm4ks3tlko8q;g0Bl#4=o5k zH%kH(bF;sU`TfoQ{4TK#khuN4JHSUsAb(86CH6ns&l4-Z5wp^Mflvh>?{+?33YnW0 z!ls53=;(Y|dUw>gr{G#|8TM4b4R=0XY%Uw-PrtSa9 z3%S(%e~gMh7*vs6*z7byr$P|363rAJ!Ism+#qafUk)0!vJXExN!m& zt*Y($8oLHrLOt%IbX~<-xF6}!ME%zqshQN9*TybwsjV5V`OSWAEthmQPB~K?bY0|-n z`}1fw3?8xHBi8+H`$hYGtUTPRa8CfFvEn^|JB(E&{Y; zfqgF#8Z5B)r1~38VBZZYqX_K%Xg8|B-g7@>ws-4*mhx31m9*9nucK^Sh)bRr>}Ff| zCSn}%Yo3d3P?Dyi7X>Y1KmJ7SLZ_lb_c5wH?M5TqsEcq+G%c-~4@+(7Dh>M(5$@5j z-E6Y%SdE%+>2ZiAT{3o1`PbT%#W%FMDqE(5n#o&K^b{zj=tc1y{$wb|d_geg^YlOA z7ikHjQOtX_rJhl02IMeBZbk{4%zKUf`;FW9#<)>;8kX^Mw;n4S*Pk-U!T?hU({XTi zmcA^v7aMz&?Lf#UH`B1e?|ZEUtwTLD?2YCAVW_G8y_o9X;D207*BB*DLaA7f3pGQv zMf1BD;hlp2v1$5GYAQ_AT70h&eJMqBG;8!-KH_9sUBLUf&!3>(sMhFx2-YwaX?4 ziTS#JNsBh^l1dElvF>L@)u#(keM(eSZaDIXBW+yRzt8qItX9PgmRi-)UZa$S{0v|% z+pA%J;$UVZB)FT2G|Lh33n&0sD+9VDc0sxu+6SE~#yae~Ma6Xx$2Z z(n?|rcWg~kRg;=gvcGHpM?Y-pULUn(A6dCbKjuD2*fCqnLt#lI~@w>|TyPiIsM*L`nWh zgnNLxdC@&c1X>{I9-^lccw*UmBuo>+U+KDUrY;7{Hd#(U&4}$-jB98GIN)@z0+Hkj z=n(VGSCd}b@P%F{kZMflcItGG4s=_c<~(-DadyZL|7wQRvmn~sK0_+8zTG3ot&~2g zZ@MR?(H#!0h)hvF@YwU+7Tb9HQ+PDbT(i@`kSl)fjT2cgTnsOuK zUO*rDPQ3oPHH>6=uv7P(-|mh@&fd zB}zZA(#G9`H7>(EmKAF}1cCxMS3aW`SfzmBg_|J6akhLdc(4K#7D2B-W;6F#BjQwCL)}5_}rY_d@ zgYQ8=1l=gBS@l4xZxI~G7gj5_-i0}IJctSD(x{au?dI@9h~2QZXi-&bgs z)9x2}Rrgu^PlX~qYOsqte4``o5e^_CnUwl>$GFMi~N6 z#X2ob;P>eQPZ4)e^__Nz-(~og`f)~C&ZkEK4iH_T0PAHPP5uw1dQHl3QTe};Pbt~9 zi2PrVcB9Mx>jtnQtq)_6mWcTYedytRhCXD}+14vVvCyaM4;K2J1Gv~D^tmM6KNb4% z1+E|c*M_Ld9Tf6SX?(0NBUP10F27fRszmO}9V;ctAGJj8Dr$;dmlt87^lqM>za?gFFPF|>~0vj$Y7vci!1nTQ!f zL+U?5)1r|2sRDJA5H(&U_tP}S6#!9FE20HyWa#8^SUm0?i24NPv8)jFMGzDa^*ea# z3sFWm6I)1-0(PkzdE(Ex^Ou`+2y!B}~mR~@Xvi9>5C zJc+W{B8J53!oX7=WZy-NiYsx17Wq)(!|XFcqYuy+`l8VXbEj2QElz_hPQKORsgvhrivnvQJTh+`?Fyt$Jgsw zz6kw|v$kHugrU|e*OI9da}`mj^~i4|akmNu<24xpcmELc5xDzD^u%#De|iORcg<>? zW!#dn0BHjk|ZFX`Tbn zkFuu=)J@{;_i6dJ-B-U^H^5geKQCO+RV?&YsIgHIOS z8I*Y(7VSs&zRPoZs2NHSejgfTfN(0-(aoqJ{86IQAA~=a>Lw}RMbXA1d=AOBML_t+ z&~8YyLDp#y2yapy0m38hCO~)(b2C7AMxDc%XTL>dDb|EE>D;JP0G|O2)&gnLn1X?H zs{mDbfTfItGK9H9c4Z)~Y9}zyk!lfuL5I4ApJ9V>KjO>#+@HXCo5}# zv|0rO(m$3Ogb*qJmt8mY3#99KU7zCUlQw>|iQjdZEiFC@)Rq(9Uh3UiT4t)TRk@i2 zt>`xIiVwk)E2%>8x5_zU?RrD-O^RP zAP^7wo4JE73PGO-mAt@53k(wHz~4c;(KSHK1?$g$-zmkOPPLwslgb+sHKS9luMZfy zCSJ5w%Pd|6PPNY8FoIZ}Lyd}y)it;I9o)Ujuc5|0(r^LSinA?4zE^{H_l^0b_)u$~ zaf8{wb*&!7DkmM>ai$Q;a*&F}bI&l7=j*u(Ee5Q+dfSwkG}L`WvbZ%k+yP^}|E|m{TL)7pAk1uHfH0CMG~P;@deF zs$7!!8!(LozzNy;k{w^EvQhh5>1d)XR<=b*O@9ZLzlE?6wS5(_n_o^EzW_Vb#VYZH z-6fj)%ZkRcZy(WDTJyN%!Q`1%Jm?-MZekM43dJ7+LHTn>JoSU(2~kuyyoj8W|EB9z z6!YQAYqSpiPP4Q-%ih)xgL4KF2q&P3YgRcB!ad{raPNvd=E8O8JY7P+J6FyM?N~)0 zms3>Er9bEp@y(1|r4|rQ@aNHpKe^4+2C`zO#^kiO%)7fl`~u<+(Wmf9pQb17llapa z_#`34RUbY;*` zcXsm@+E20mLdu5{F8j+-KiPM5yMLQ%k&>&wPXBn`#wFb@b(0n(9WJZa4R9&9`_-re z_V^0+;&Rcs572z?m@F62OMZ%#`P4ZWJK2^`m#)7FV`hunb+2r z1?RH8SUlVwFZM<7Vp+Y|_6g<1F2YkkFD92(`LBE(R-Q|(8^rv}QW7$^kNe*9Mvh$` z_9+6e)rxFd#Rl8zH_%-9uhsU^6Svj;=?rYOG4s<4&WfET!pm=`#cytBbNs|muIpq~K|EkFR2rs*Y8|M@pw*uVz!#j!(I+Dp5YlO{zrXr9?^=aSIzV zdTztLMj}CF9an~iNT`MDj^0j}js?-(ENtBCgzZk)owE=_XCw>w|P`6G&8H z;lh<>n{u;>4kQGv$!P zwSkpWl%T7Nk}2FN?X)W*?HAH?%(2&s61?=svk+A1guBA?4`J}=Q8thXMd#Qi-)eh4 z?xjJFL$GfRo3zbF^l^-BvrajbC=}_D0##{@jn%CA&I0I7QQ|s4e7b4eGMgxw0Q;*J zO$w>#rkoadR6znNk51!}J){%X_rGaB&s%bF^2>_l`<`F1k#(_QA!F${4Yi6z-y%4z zQ5oY@x@<@4n-mH6@1PQFO3;nRpjuy?{36wuZKXK`V3Z9OH87_x+pKb*f#Z}cW(`uh zvU4cynqRBbEXsh0ZYcBW92>``M;+-|z!9egSw*6kQ;3h)l-UWrN?gR&AOQ^9T&|?CmA?yM> z4BG)NxkoXw)QUWop1&~LW#>^%J_OXP;EF>^T!%H;fb#vjFTDaxo$~9|6nQF%$-iEa zr_?eew~NTY;aFk4Ontx#%-UhIfzBq7c?POfLsq5Z8`usAX0sCMXq013=Hfcdwqoxf zG*4A*XTfgZAB1>agD&D{n}R0t=~V9OK)D03>Ky)Ae5^FQswtVfqiQ2PK^3bnln#96 zOhoI&P8)YlQW9N}@Ie@Z(-0y2XsT6*ASmmwo$LjYxuxnkP3*y;GgGJ}CFWi1LU3^Z zaSeLBgdx}#((#^V=T%W_v0@>WWutouGF!>GujQy-?-S3s)}f=eo4t>k=mB8!0YDT`oms9kyAQ20rY~NbV{86oxEH zNb^-a!3VvBB$by!dYbcIBN8xPcy6jNsy&gQIH7vwjkYJ~!-)GKd5!bZwB$GNov=$) zuR~U+%QjX$Tv^7m7Q;8;*Q28RVQ}@n?yXQSq=tf`VwnO;9!c4$w@2nlFGl){sbDFf zYe;3~$c?ImP*rw5aO7>0deON6p0fO7f^%{D2FKW8Gc_?zh>;6St~&a5|&n; zuCC`-zwh_G`i;grzq>G_|EX0Gb3fecI-VCs9ut{b@FF)IvQTEXvx`5?Ze<{5_X96sVRj?y@EO(cLyzs1-FbsI`TUJcEjm&r{#Gh6ElqRW_XLKhc{gx` zKqG!PLT6}xEqG~MJ#0DdcEWn5KQ@#2x>rZd#g3n3>cTMc(ttf{dA(lOjY7%xq%CBW zIDIC%aT3YMje<;_H~rQocjL`XnK`MNmrkGdknxsk#tx1sGk#pP>{2FpYUZNYRC9qJ zvTQTmQf=xW{XlecDK@2(^jRgtLMXfqN$?XlGJXnwr}6h7{vIMp_yT*)-ck*m+xIg5 zSjsK_1V5(^)_F8!>q#1hELq=;lI?ZRcY>&I_kw8G?j_jqq}E<RC!IxO=nEyK@k^7D|fbExP@PS2qG*G%`%nY?DToLWGW(@&h3*TwON>zrAI zNGtpUH``3NxE^%z&JhV-|YAw!H_ns>}Y&J;k68Lbwim$r2~1 zjo{zcnB7pVQfjqze^_646ssUDy||i<_rZSg{u)U?V|Dc>4F3QaesvPiRTF1`wu082 z*vIen$+QOIrv5{qDdWDH$CKQTLE>|I18NBkY%dOc*O%FWe!uG^A%3<15d+6eJvwEP z1@zU7o^9$GMa*2k=ewXXT0bYky42{fukdsHGU((u4h`)FbiVlsA$SM|*hJoVskRNx zAK1!wjM?LjS6@ChGedyRHPZ=11jTZL6qeF*tX>*w^0Np^^Z<Dz^h*wA7L4YEbr zhgl*u?OePGeR8Db=Xxq5(x@HZV~bTUp|w39O~g!85Hgnu;UxP|W&$+}T^L2()3FMn zm+IMFyw0&kxkc%0=ju-ej+mb2#5sVYN~tXe=L#*@F6{!~w`V0xrb#Fkv52t}IYHgM zuYALXkBFTx+-y)Exe!aYWQ+4h5pGS%-mWVd|6XxVYVE!*!07mmVl;mz*Xy%W@2<9$ zU)HxWrth3rs!kVhZ&km2Bvt3>h!+30uEl!p!?l?InE!;|+T^dj#a~xnnsT_Tu9QtE z<=do`ug*dP{twvNy^lcfXxu{5yo+1Z9$_Em*~(2T5z3AOKUeOPb{=BfpIkK78LSfR z3d@%k2&C%EtX*GntMUJ*MP;rwaLp?%n#{b$v~u!HbqZL)}Pu3YBXTl=<-1#V^P3-^2rC;b*y z;~fE2SuE*92S0}z9W`H%W|{&l3Kv;jo}!+ei&h8zR&IzUTI7qF`o_c#(`;0hheHrl zs}hv)!r@WP!DzU3zepdL0>L)Dv4xKq3MOO3@t?M4r?@^X^NYEKm{Bb~rM`zE9OaGa zWR^4fRMM-E`0?RL1h{afHN6Rh$2g<@IpV*m*4{9{2p#ggg&u#-^UJz{;ROkNOhS19_GPv2u6EXS);-W@@$gX*;3IqogKelYu#$gzAp@ z6SiR$LD9tFnF3@eK#r7{xKqX@A2>wENdG{IkQ5?SinazI+flbj zHIEu_G)%O?n`)t#27y*aY--U)&W8jmMK*Ym_H^gx8FDw&YIOGq4jx&DfAMpr@S(f^ zAT()BSk@TTxfCRZDu^0scdEcay>iv~^f2y)=l^N=^hUcj{%g}$TJ&9#-;uK~u+9H# z)CPUOmY)%KdqFMsd=_{{8}GhZYCoR5X7i$N-OL`lsVg2om+t%bhZP1!dtXl>m)zywq zSmXb(L^tj6B}nOwDN;he!E1C5gY|T4;*L}Ws*B|7>xgoai1!T5kC(;%#So_Lj|(_Ic4KDWYIO<7qTXU(4$>ehNUQ7OdfPq z4>E2>1sV9>qr*BTrv#VBBpt`Sr##O)`06Z)A0C#5_TVXc)Im%AIgHj!(GFSPFe-kw zi{>?oQTLGtUd~?@&nM9%_kTp$X*EQx4HdXhilQIQq*D(}N<_HYzvX||T11g|UeXyo z;3!2F^~U5AMof__*3De&N6DFY6L{n5v`m~(1UivP+1x(jIa9-I$OswT?DC9SEc!4H zkK_pRW2)_@3DsuovPQUEw3u2ULP;YMR9a6Wm2ZlMJs4KV&&yQv6(>kh>MZ;S)r?XZ zr!w2*&upqzpP>Zkpv;L}dkaZ?B$b_EOo?~1AO#oOcwEdM(EFE1ZcD^$}9)1keGn$s{tOB-g=k8R2`(Jf=jFPat>Fx_HP+R4^75u3+~ z`GCC8yQ!8FM)e~*U^@)rn^lY43ChQYI?48YD&Qh+Q)ots!IS!I`i^gp6$DZ6d1m!0S(CZ|&=AI^uX_^rg*`BuZ?K+;qTDNp8|s5sau+ zBk9^K4Lu7gAY*UFrWg!J$J%DzY7fQeM@C2P=US_ES`{A#n=y zW>IQa4U=<C(>!As$P`-rE63R!Q z^rVig0~Ypy#lRn;sP*lczusx6cFf``vqvXFRWJtVaRAZ~^$?db7MIr7(TuML_9c(P zZj|)bGj)b~>MfwBE!hxvBz2C5#cLP7{4|8xPI~Ux^wd&K|3oo8mE8!p+broK(c9B& zfCbjM90pjdg&ZwZ$&)<0yr3QhFo$-jqh)H+Hfg2<%zt02w0mO3wx#((H z3=s$0KT4t80-}0AKbuE8h+HQZ?xQY8kmBMFjnYBRT8J3EoyIT#^kIXp;^$;=00>2{ zANBx*f*no~UmyoM*3Tajf`iC0DoGzpY-a$@a0|&*A@{Kb&hUxEfjZ-&*S5`2s0?g; zi9&3vw|z4Ix&Vj`dWPE$)NvN>=#MTI45vVefk)UdRI-3RQ*YGJIf+dHToNP;;GhIf z9Ij4{w2~vMn=xCje4s)reXT^XWsTce^00uHE1J8-QGVC`~-d5@g8#h zkKykF{$Z+C>bIwtSwXGU*cB{cT1ZoierDhG7DAS8#cdC_qM!tXZah8KSoUs>%-AYc z)q_rr%n#B{B(eON@wxIhuyx=OH%dv@Gqr>dYXV3bGKDRfe=cvo4Jo{tU4uFx1p~!` zSOoxJ7A)zc-i(N~E%pU;s%S0EUirC9=_2PY^M?BN3n*zI3mI-(=Blm7P2y~u6kYX)qAgg?^SozgCoDO&)>xVV>^SE?KDr!nAK|2 zt6D*aZLNBhcEf6hoku%|KGiwdDY0?iJRW#$zhZURCe*0dPQB_|&CWfYlD&zIIL)ec zBC2kW*rWE?Jsmb-hN15)wnLC5GQ&AX_=1SVf!0iwOzNaF{-uNOvP)4)`_qjgr09MS;35NRUNQ0B`Qtl)Uihw z!j9QyW1+c3Pw&{{Y_w&9xv*mov+;5y4g4CFLRes1>Q2+@EVLKdBvlBVdN3p9HyWD$ zk`+r&iNl_R4D4O^bnHF&|9t%aHvIo~l7SPTqn(G@2sn1C9eZEfHtcuU2iPyq+Frw& z_1n#+<rIW7fT;a;@$iFV}qZIIpx;n@!7Rmdj?QwK|862as!X$?$4l}WMhF<2_3K5HR2`Q90{GUZfUpJ$enyNNF{K8%Q1`;ZmZ%?cesw> z0oTw2>;nt-Wss|xDK3)D5mdiQRNpW%+RSA$4&5=Ae6wY1BDnkfp-r2P*_Od2VF;}> zTE4g9z~l^5lus|3fmJnDEI)v7X;4BmnZrnNdzrg$=B69pCp7&oq3HJ+{Lak8G202m zwSkK^kqJG6%)v6uX4UX5GN2X9klJ8W&CoQQrh4?u#I2!W)}d1Yf9Op&-%JE7GjQsw z#pu*LzhQ=GjX&sv?JU{Uv|`rH#kw^?y#TpYB1;-;9Ct!{rb9|mvgg@**C?G%tUe36 z`oJq~Z&}SMw7Yx)R;3LF+nXy=-X&77;YC}k(|q_kmhKHmy?+tveRrM>uu<>?`-O`$TMn*gb6gzUH&t$!PP1b>Yz)7` z)fQa&hl|nb@=LAUa>Ru(#myfw`qdl?hV4YUChDu$lVXZi3kS* z`!eAmpy1PDMmh{zo^DtT&tDa$4aeTDgl(9=a01FKmz&=4rU6?uoG_RmBQ;u<&uzC^ z5xzp0tONC5oiX4RIDsJY7|Yh`^om(;TLw+U)RC$Yv|BCD56P3Qm~b@VDxXr|VCL$&JAGy}i1dRV&73iw{Mgogtu z)2Nsg+d6CjLj;)ljYZ#EwtPW_d>pw{+%=bJnseaexO+7*UkjJi@{WW3cHOAho&y1p zWVml6u8AP;j@iT|K_cO>?D_v63z~1v^;pC<_DHtVP5V}5V_Ox3XfMV_St1BV(9zy! zDVU~;Ooi9TWxWTjIUtf2yO~`C4+>aRCSMBlSh1?*#nm#0lqWmv!k%}5^-khZb}4|N zPbfnd=sD9-urVDDj|R|e;4OB9yM`n_FiPCR(?p-`ybpEQO!nQG9%MTbG(!&Ku^a?$ z!^FD-qzKw*;ZlmiDyn|za2hh5a;Ii;2v+J_`Y*u-}7)@HNmg)ra*{A5>r z?Aikq0?ZkgbCxf^{;+YadRjSXnH6i!h^iQuUw=KosKg#}8jQ8+MO~ZpZVN(sw}%XY z7v>qRVhS(m6p|o-4IS^8X{9_3F}|oPqEbGkb8P%Xqdv#^Amrd%f#t7Q9a6=wpzRCd zdF(SAAYSOLF^D0c6f|=4 z6z76=#HTxq**}|AHq`9WDtCyQOxgdPha?sM|AmS_=~t0m)M(d3r%b_bIpP#QA(m4l z#W%X8$j*})23Y6JienwGAkENWJJn^`Y+~;9HF5Rxe>$K%P!{ksAOM^Z>jLP)DN|hi zdW4(pHoEH?LO{}bgaeBw1N$kH%n*4CXc4j*q)XnS3n!mM>}<3UM3!#G9%WkrIO=@x z(W8lS=v7FVVbF1}rVhRSPzQMjDwTCevd>|n;d%)PKSO%J^>aJdB_7mi`5KjRD8=BB z-FPFAP%x*5lMnRt`U*952b+<@9Fw#(?R;NKJME9C*^FJIgP^xEmu$O81m+$El{|~klt~Y<++RSuL82`C<6_)T+OON6%$SQaM}$j&|(vZ9vj+7kO%w49j;~6J+o-T!|M^O-4xV6!$b1)w0%G|B4Ji}nz=M$d0kKzu> zrYJcYlwU-CAkIK+)97l7?aMx>yp*QcMe+!->VAR<^;g{oQqNnP>fR43Yf;^Y(Qd7( z`@qA{-tNo@jq6)MKWU)hQ|H;JP@Fs+ILLPLEN2Y%wdsqENu5&wMurseRQ~zgF-~Da z_qVC`lpFQ$qHJA`ACXpDZB|QVpOxMHCOxLh?hdkvnq$?gVvdgyo1CMO?&Y^N_Qf5_ z1k09blr!-`1*Z^Z34_p!VjjLekeL2li0P~JkC-ZHIHO)HdezmgUTX8>Z3MTB5^@uV zjOl6PCYd`hK6K};GGQ@e{QL=%e9s)xsqiUtv$IIF`g1L;Wgw$jowvOpoTEI5aw@=t zGKq+l3EyijX&sRGP6{9m_P#q1>)#Qqzk+|b25&Y>n)Xt$4jeTPwo{v$(Zl=1c*H*I z$JA5|(J=07ME^ZSbZu_xhrGwhwz~Rf&9MK2c58K0p9Gu(E7C2wQtgp?bR+o<9nv`M z65l)LG}s8I5TAem|Ep<^FA-;irdx3w1CyWY&GqgZpQq>I(&^J}0UwfDujZYs$gc zPqJx(;K;8BWh`+tE2Tq5sYgVMEM;hWRU}-l>j}O20QL%>`2uH5KAC@sU{b`zmzDM? zU;Ml(V3+skR*HHF8D5oic`a%9{1xyS32%>^pwl`b67gW=P=|2 zq5%Md$7n2g$mISU2q_g)jvx-BZoh#Xl?_zlwFBvx`07UuFLTgh$#EOb%JQ)QvTDez zGOg?K)u5_?$V<+O)ij{zYFUJ>Gu7A*{y_4jd|d8~MRDX?%5h-eelH%l=eq~a{YsCr zuW4mWhtRpG`cDUuq$^SN^VBF(G`JP_Z?uO?OOKW7D0IRo-Gb#kTKngKTKyn(iC$2^ z(p_cQaB8uFHG>fOKr7ZXiKX4Y)1D`sqynboXJbYA>w(yl$oa3(s0VVU;smUVlUkQ( z$oT=Rro&=p6pLLj`X7jnfYDo3C9TWWV{+BNV?1V91x>ariItO45y__4!Q@M3?jM3DHioq_?y%f1(oeqrs{d|! z)8f5hym8j_)a9fqo~E}PR`Cwnc6n3%-i;a*jN*3?RodC~RGF$rl<0YQttiCwEEXug z#OL!V5i`qIP1pA31x5WJUB+92jk6T>C&`~d)Za6wkfcsg|6#nng%`Ve1pmppQShHC zjxFY!7;zmrB`qO8_&*)B-MAP&#dufnKM_ll3#(+GNfO|-NFoC#0ltT(c@vPH1o#fG ztMzn*s{>~snXu4qAY~zc#iRezwfFZw2kvjuKk0~UA;052idkoyh4N7H}yuA%5xoL<8+5l&f20|SEAy2%0?7ORPd~q(k{GC zDY6uU<|b+b2}I^57SX6jZi0$+E!9@_2Fgv`Pjs?#6Q4*uCOwfCdz0n_=ONivHzdvP zB_gwj&~CuUjQm!=+{8T95xI#-x{2IGmvDRJCVJF4+%q?kr8}|5Nt4Q+(p0=y?jul| zJ?%&MLkc-ea6rd_Ybu}Fi6sjx86i<}{h3f7f z19G|hNATwfx;j8tPexaNf~!;RQ~dAK{O_0e-!JpO&+xy`(qHmN>l;$z%h|ITQYXou zK}g+mAw5YwV-t> zfu==c=%WSdCS%fgh};iQAJ2JAni>xcn~{H$F=^cEu9);naIu~-=_=@nh4fG1Dk~;U z^*T2uP1e<7QZ)dW7Jin-qR2w}yR%|anY2b!D%Z^AY#0TnYiJpJg;TPBYSu`4h19IH zu@}UX!=a+ohvEU~j#5kO7^Z%15J{>q^)YI6Kv`@?m>MsLzqxVd(*toNVfPbg)FaNM zVtw|}VD~_A=3fw<>^Spu>M==mE{e0i&Ur|-)lEV3Wr;ZRTWB{R&L&^fFV6f7)e&)K zB;5qA?hgsq98c_EU((%gcD2LQh5?(u{#_c zO{!_O4p5inviC4GDsIG4c*wgFuY8|T__>$*kQshnn#)#Ev$z;k@&HVhSsX&UwVOrZ z@Kc%zg`XEne)D=uF$b-gpWlZoO*d(v*I75CHF7n0Y7ITs$q!0q3Qf^UCvT@l#dY$E zWB8~^;){yd8wQ&n1c6s^%n-Z4&@L4G`Jc1u%}>9%%Eca~Nn>t@_yvw3Fo5JJ3#2 z&j_@Wm7+j9RUE7I?_z9psFPIH{6PEhsO`oLv{Q_qr9k_IND>1F+RvhCp6AyWtDi1V zHyLQhL*zb1eLUxZc4|DdS(v6S8ED77?h3RY0~hNVXuk@2BGCRPTxA8?sb1#>+R3_F zpsfY~)A(=ESQH7g-<1_;``Gtrg;swv;_Sg2#y;UkvUh6ENcsdlwh*vn11|j3^GPalLx!@HiBfCD;xp*KBWz>Bk8uf^}saT(i)*5xs5}oX*``xL>B(=L}crnd+ zNVe4nRC8>JsQVhU8!)^e$J8(C{$HviqV7n#iKx3vxILoo9(Atmxw>0amtvQaCY=jI zMWoY5z$59^F(BSu2UvwgdU=E-7j6`RMr9 zqqgkx8})lmO$rKfs3%&q$fG5%)4 z55N6{OSxQA;}YbWRb~KY%r@f zoK3fp9LVi#lUwBQ*NR_`7J1nC*M6#*B|$ zkJ9Edv8wn58$_Qsu~Dxbw%TE5!9KFU#+NJ{ z8D!$SIGo5aj%`mZe6!SO(eWJOfwYP9GJa0TpKZU6Upr{qVcHv&?&85C;%jQQr{;Mf zHeR>1n@5M(4mt@4aJ77bj*#e}WD=X}IjwTVYtVTK0Z3jfN|06OC1rXgq0BdFN9XZG z*+3o%wZOLf7Hy(fuH(EKh;K8Su+4h(bA;`-PB?Vb6Sj~KRHYF%QneP_OQ1JNN0-1O z(Uyyr*+9uS#9y(9DV#DB(^pUPEuJq)-Yi?b@A+jLXF${~ zoH;d0UB&LtY^RX4MrDLk>9D=2J1G+G$T-~kq@Wx3LAAalc_Y=B?IIqaYk>_B)xlGT z?Wmj0r8XQcBu?9EZ^ofq>^$GXr!UoV)uJPC@EAHfYk`fzN7t~EH6-Fxp{v*v`vhPg zn>5>@SB{I=X6%*Cc2wJqRyk5Z2$mNhrnP(=$w35n@)EAxH2iT% zS6AW)#|X8c^k9H2guUGk!xruRiQ)jKXkkOY=8Wer&34!YRFiiBHOtr*0AmzlOtzwY z`ry0X1EEg(wMvRSmBi%Vp~%xl#iX}5&141#s?_*1;00#wuu;du#&Na@OsR@J;*V}+ zd!d+(a%7{?85Husf>Uf4cKZs=6J>rZ6Ha}B5^t%~j-+gR(7@i~)w_;=8)(S>n7#-xyg^1S6?H2ZFpo7rFuDHS(oPrABHKb+@ilDs19`YAB z>>^dqX^;ljJyVz@9j>&V;kZts?7 zl0jqZHR0P%v0rWX zAO3&Jet~a4$G4|*>6>nszWH|PO?sE!w0CK#-=$XpTuRCE9J5Q<(L;$Y5Ug8OOPGE9=dzUmAZ zwLvPdWD~AG=yR?ez1O&mdU^R5HX>)nA-09@r^2?}x^VLyG(CwU8tp6P@q~!e5XCrx h9@`d4hnvARr&+1Dt7LXdbP(f2l_m}8Tt!SU^M7GYnsNXD literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.context_storages.shelve.doctree b/.doctrees/apiref/dff.context_storages.shelve.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c340becbaea4d90932f1f9173333fbff702e3e15 GIT binary patch literal 30903 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.context_storages.sql.doctree b/.doctrees/apiref/dff.context_storages.sql.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fe8412f4d8d578233a85b85d5031f3ac8876e9c1 GIT binary patch literal 39797 zcmeHQdypkndEeK}?#%AaJ^%$_p_gUZS(pc}AS^6yKq;5Uh=715c#25<_AUl`@q-Or*qUK*ea8XlYr9S}8FV1xZY*Ocha#CKB`e&ZE!i z=j}T)yE{pRDrWnhKIc2<`_A_~-|2JiANqj%&?@#{v?b`+PW$MT*=V%Ah86Up4Gpi} zZCUNG_h4`D+k5x*#-kD6JQ8?azi#!SRj5(7oo2(g+P%AbVEwapfP+R*5B)Q?%Se#p1xczq1UcUZ0Q zXkEv2{9a_VyhgWaU1c=p=BDaiJG735wIK9-bKVN3f_t02=p0^Uvap6dJQMcJZnQo$ z=c(tOJrWIfOduBa?6uKIEv5v14GRLyMC+PP+v?49XQMHy5IW6ZO3-dNH2rx?QBIP= z9s~aN*1LQ5cKm-T{(l+%Kb`P*0t~bFKr{qwokq_-yK5Wv`Sz~pZPT{bvZnoRyKVW? zM?C+~bi*;5-h6GY=^d%f`519o>D=6Onl96z%T#A!ABG)(qV0LZn=2-uecp|$?Va{o z`&@f%ch=q=tq-hv=y>hSOpoK`Q0RnBOM4Zqz3ufk^@tJhcHQlmAH3v+@9Z(Y0`RK{ zxV>w}J`eOX3&}(@xf0bc=hasPZPqZFjDTOvdEe~V8tQkQzIxTF+ilAL1q7oS9p5|b zK)?)>N+)N{z-kzWEk6K3X&ORQ--o$jva#=;saIcn9p~!XI8)zaus2hqx7$v@pA9^8 z2~6l2#QK(Dwi||Tk+2-L3^Dsg!wgMh&i7huIP{A;52i*BhKAV$F9odgS6_cU0kX`% zX)g4I=d^*yoaeX95UueCW3ioio0`_mra9ZRMrkwvw?JTtQ;j1|XiqVg7`G2Zmo9=r zJ;gdRI_p3SZR%L<26(!56q2M(Mzo`ptdc|5H=WS(&8F7UeiP%~1JTy>WN5>9vp$R@ z2SZu0u|#V+3(%UKg-JGrJxkXB#M-|J*1oHZ|D$2x1gV8mGdm8Rrwf%Dlr>dtnNGWB zJJEXl3Ku$1+(W$cXd_Cjqn)Nxcf#H=R^f>0xA8av_TxIU7oA?*0TAI_+M8j(f{s;p z=A1f|81*ewU=Gm;)jRB6_KnaiYk@LE9&GS;|7RGxfH$pDwRV$65T@Qhl$*KTwTJHd zaET%zjbY9@;9DkPb=&g-i-|HBPY464l?9k>1FxLA#dN^v%?nUJ6UHrG5YGD+d-i2O+T=k@@!nXm z>d=6Ng(_%R&=pL5d63*mZeF3inkLy8v&r-p(^R~BYIUgX9cikEa3aNI8iCcEnsf3}pIzPng?r**WH(+$!M>CP&_hHpzQr+v019XwuO zN_UyXqWATpm*>8Pk9Z$Cvd04`iczU3 zxW`?nXrlGH3q2gbOu|=-4mhoj=Z7_?9a#7W@?0Yq6GIx`YmCFhb8ArOBJS-)mlWBF zsY2L2;dg^1BZ?&41%w@62PdhnTVWPVP@FMFZ)$-9XPsnIs}r4D*xR_kXs_@)Rz)KW z45PA)aO|Pzj6w+9LpV@YLvhp>iaBaL+JLc7vW^jD0T=d|@CKrhqpjw?pkq>~wV~r% zn3%&>kJ#t)pw;6Xdi24Q92=BPE}{l-=Bj8rBQv?jEeoDi(+TvrC|WP(g;Q5fZd_fT z+;r8=k`K73Xp@+%c|didCg|DX35r&?duCehzYns1ugo{IpR&J6^YdL){7%1$(HX67 zGjwVcLe^qr@e{;3Mo_+`X4!t4A~1xRr-&FGA=K1i$2w9+px%qN$j6%5hPn1NiuKb5 zx|_DM#)Ui}mohhEgzE?eMX~7@V?WgH(qMn32Ft})X+--`lT;xoMrR&N0mS*Z?p&sAMgz7WU z#f;3r;j|I>%s0JRI5R;V zUXIbQM37=2=p+9P6Bk%*1IEK_)@`e`U8KuUK7Ygn%#<9M$*O;6%t}ACSW>!Vyi{&%;?eiLZr9VX=9P3ww z-<<>D_XdvN>+uipIuNZf##JosQnAj4_MOtdiMD7#JjQtsC;Hv;y?cn7(pu92Xq?d3 zfVNUVQ!%=2R|(HuhmAPdRyP%zX4E5a_Xyez5`^1t;hOBe8T)M<6H>H@n%#>D4;DBx zIx+IC-m4*+q27UL$awbt2aWPNuP9*=HO*<@nx;=JY0`La0uRshp&079HxW*p-F0_b zI?5$#CStD))q)|wZX+Ol^4J%!Dzizvl)ty3hA>S*Txm<&lV!3VL8ATw zD-7Z9bNAwtOuQ%#5o@lC3nA>kjD8JE2G=E4D2;Kp!UVHd7BE~;7%*f2mIexsNzvy@ zeBAzPSrA>9fi&JRLwmwt%NEQv*uRI7>u4D4nK0^Ite&=N4d20f?EdS`W?-pkVGHvG z%y!!g*}{ab9xwTgt9Mc2VV|*wp}yyu3FGS6Ib~k_J|nJT?78L|C@3f?TKyD0jgqkM z5d&&ASPyt=JR;ES&uT-O9Xu%@|C9ofR9MmKBN+$R{UJ5k=~DM;e%BS8aC6=7^6KA- zJBr?avV)P#boaR9Y(E*Z#I~F|+*;(kQRMt(jAdSiV%+|k{q;onCSw7_YObP?`(Ffx z$3@?chjh`PJSkY`nHU06VWG|0;0Jky2Pj#F8VaB7Ymz*cWDontdC`wMhDQD38dCZQ zfZS15*H&XZEm!6QDr(fDs+#0$y+~nj!D28tpO0!)v@I4+c;mi_oQW>ZtM|*k@ua%k zSK4K?+RMt+71U&>EBf6X4Lfa?G}HumRB0gDt6rqKzp=b~1jBPCV#?ZKv)Q$hLqX)& z?XVS|poJ*u-mXWfSc)^e$ zmG~!?gM!HnO5wY&!RxdTxMDU%FE{AD3^8jVu@b)&Hg7NQ?T&PB{U?kMVvq?duWP>~ zmmTsImb(hNOA_@stt+_yjXpF7nv@Ba7PJASR~Ou;(1I^8xZCjPZpWX5CU##&FpINT zE~RMgVfPGbP5ryCpg(_s8DT%))pO61uV_42D2UZKhW0exk+BBXorA|Df%FA}Yp z@qKz~_pP}ekj%?w6Td>Fu$m=cX}al?DF)LbrmM7wX;EF;D!Td{b;IptNiNiVGBui{ zc^R)5YCQocW%fqnltifYRkRy0)S~IO?_(2=aBFI?iD3&!h|E^10|YiD_9%1eh_kVp z<9?6mz_xq1pP)y+5QfDMwoWtFg8HzT`O^x1ZW39eR*;A?k;D+33fi;gi!EM+} zHDMgGtPU-Lv{1m4;n*Z$*e14QAs;|{B^n;~6!69YwnExSn(x^&iu6HfnQYevGO^f` zgK@~W(|ZUaWenyVw4`AR#p&Lm(MJS)La(KxzdHt+5V2HyD;ni2)l#v}!kXjJZ>iR$ zrd;!;mTH?Rph>x?>Oa_Q#L2e0OcnVLhtX~c$~LuJE2L~4WG^ORV!1X$!JOsVoH~!4 zL?(Uq{y$t*%BQF>{p|f8%;8m~{L(m;sxP*Z{JK693MJ{@Osuohy@6GAXYh|y>q2M5 zd#a*~)mnoR{o5g0l;e?GFF$oh=m!V*e)aBIKQO+M~w$p9< zbN9o22sa>iKb%-^F~(;-ugNlj2iayoh-OGz1BE3Du*KZ)U|0NjyPd(;!BH_bM`U+= ztM0Y1sSjJ^ki52niBTjLV3DxBF5bsLP;d9U%+Ad&bg;>vnJk`!N3Pqd9}04XDYYCV z_%v0ji2Ue(s9$eSfJS1&INs$NP#y00a1 z+3CKf0#uRQy^K{Yhbof07gvBPlDl%5B3=hr)K*C3F)xG~V{t+aUn;cgwDB>MD>ATy z&Gs7D?s#SH5)p!dsZ67(B;aH+Q;WyM#>bL;=0rc(Hb7x>2Yu; zAYH6@>>Z^{U7qxMTiiB!c*Ug!Gc%G-$&D&HibYqI$Xbhce4SrqtyCFyozQzl#6OA& zk(W6v$YcCI8kMPgJsb0Ttge=68{!EdW;@jo^-?HhUPle{(Zvk&;{y+~So#SiEeE0a z$9+Eyjm^-B$U#K3u|K(=AASbrT)u6>ngpb_LoE7(kF#Qn|D(DfDHs%>5ZvHxsPdg(6`Q~ z#Y{j07D2Mb2Am0!saS`ltvgNVJWt+nQ1_iqh;Q27I@_e$RBWX9K3%^* z-_Q0TWQOlcLCQ#SV+E)pk|ayiFWn^~$^T$gizl7NDk4c~e5GwDA2r`59J@x!Fycd< zWJ|GGc$mkI$*scf<4D@L-va9H6ZG_Ldireq^f^2ob3f1iKFR)mf&Kj(_VI|+!r){jxn*lCRjdT$-!Lb-&Py^= zc^Le!aod&Xgr-o=>`YaT)S|=Rq2V&(6@K z+NWSIj7EIW5_h9q$8-)iYttr z?wkA26!qlCaU>LJ-!cVKejIlLtJ+_RH{NRD00rzPqJx11|0K$kF8nl+x-gHK9>>*i zN}**Qqej)`I1c^TP}FkDl0wUG&=?9s%cn}wsv25;9Z<@g5Y4hDR#%=uyCq3R<7D>f@t=15`$ zqEqzOOf4BP3Zm6;GePvt82+*b(GLP3527E!Q+^Pg8gWSwovf(^(UR=I?sYT+Rg$w8 z6$R10)xwda$j%BICsvDNBQ|(LWx_rpMknn-arD4ljun}#O-_Rhp&wR+&xX+beQ*7g z7~!AlMT&%<9)yH4f_{t|?ULdNMNl3=&s5C9;;_bc=*%t1b(T00%d-5SlSOAX=4PqX zVq#{G%-09PP(;*UL8F|Anu_%}Ww8rhfVqZOcvypq%tQU#X77kMSA)s+k{!X=*AAYI}~dSWgydpe0Oah;#N8Z7%R%Ov3C zb%~R(3tZx4rPw7-6)RT09&@5=s-zkycZsi!+pa{HIEC`@aEb4Z2{3?5{6;jY>Jq=9 zLS4-zRukghPD4AXE^&(fniY{Qu^Mj1CEkzWFRM%Z4glmX@w@Sq?-Hj*T;dWZYicgB zBs*N>pX{Q~GDB4w<3WL!v?NK5 zp*s#M*qKgFpme6+r=~3HOfP3X>dywDq4cI7p+>u;WcT%^Z>;D|vk##RXD;ha<6|lw zj1B5ae|8}Bge(0SG|F+MsaQ8qi*==+A~?ma^wX(sl3ZQYmHr09A=y@!2u%qlTq=MRC8bKza7&$1=0|_34}mp5n#85z z((;E{)&9|PA}b}BDN&|S+d7hD+hU%eA&X4aW@=Pj!ue-$Y#b_0)%P>OJ=6&og!E^E zdrJphRS0$iN|}RGBm|eD-I9bL`I(^Ld`dR$6nK@5iW{q)?%91tuW=Yn*D`ZhoLmw! z6#rJ7^(KK#CHpHm>rQG^owKfG-_61%kl$g^r4`qSJ-}kG3p+4kLFJkz40iMw|9JO^ z6R0yumIIVR{?H)EGmT-hNh%jVv7?iSG|+sO>MNOyl1_!3ukuDB@|Mn{nzKbj-aX*M zlTja_Cl-0Lr;`_XpWn3Fm4fce2KclwhPi}zdq;L3XABnpJ&EJEc7o?f{8EP4T8U!U zkAv>I^O9u4^62`{M~yTStv-U0FKe{=Gyw8w^%*?nMyndX$w0La4-+DEaG<0!aQYaLyh@C^ zzbHl(_q$P;+V0}gBA<>dNv3ebAq)77V~J3dTsZdW`b>rKpl?c&s{%BJ4KX8~VDSRI;z8MnK&xy}oQHS1 z!+i#idU9V4O;tr#=HFS>{=rY|iWa-3*9v4RiKXPKS5c$tTy-|>gX*tp`c+emb=x3= zW-jF|)#rhb8)zQNy+e`Ak%~gnxxA5ZDW$Ggv|fZu`P;yUyOj6Q6LTrq)5&uwan8SG z`jwo@%Li~OHK>JdW%MU2&oN7ko9?l-OV08*C+h=g?Q{IzjoNGJ`6kMgT>SwUq)cI# zomT%~+;-)Ym|ZZoNbgtS={`azpE&O~$5+&+RIF>08>%{_ir%w7Z-m|;FL14 zrwJDuv$MyF9OL5xTZ!V=1d7sL^mUir_fiXRBk1#$m_DV=#FaHMIW;1u4PgIoQJ+Jf z+|2xto|u_oPfIW}0w>ali#?rbx>omb6RTCD3tVgLP{uwdH0>Y2;$(pr8XhizWt#o` ztY*)`mkQo}2470Z12ZD+9vPEPQW@wT8P-DEa{H3t9?5#{^LkeW_r?ruEHfSM3jmS1 z7C~GbL;a=sO^*k~+Jn3}<`?nsqK~dTTb`Y<>|HY3^D6NOD({t23a=<7a{1bnBAa^# zfmzZLP%f|&a>~+qRfHsOEl3SHV+(%@j#^e*cnt{5ZQ=EJ%C&`g6D>_*RYf2zqnuA@ z{+|iqK%k$!R-$lqkD^c!a!3HM1rlspHv8LxI|+YwF2P;&#B2e3T7oSQ`g5^%V6sNv zvvxbUB?Gn~Y_SW9GrXkE>APwWE06-c1RF4&8PZf{;Nr4nLPD%^A4g+wFD6hA2`U+b zg;b-Y7gA~rsJ}GBl^BCo+*9=76=)1HjKQ_8I$LpTdUj=mmVKej!0*OLbD>C*x7-XU zg1PS@FljTeQR6N?7IlO}_MJK=F#GO6lqgff|7hv(3yyYp7>&vn++>1+?wR`I3U#$D zc)27wA;v7{SiKBC4{g9q`NJCF2&x~DEWBYY# z=3&!mnzIh>kXYyw&s;NzCCfrzf-$=+$Czb17*Cuxp3U2yl7q6;lDY4crg=%Qk&I*p zQIx-k+eVM9K+BS)ql`1ux>oA=bCv{9+C1;A(&u?^4@9X_Md?#FCEbK1r3-ZWRy3-r z(>GP9tLbz#d+tUW8Z&bzM5pJRE|tf?Ici;vIiuEp3T9kZwZ0ET;cER_JmsqOT-lPE zeNQ#fR?1z@0>vmovKAks#G5C;UB7PiqSg{sqE`>5Ijm{3 z~ABum(Zsx#3B9B)qdTL(Sd?&{UMq0_`#i3}dV|CPh8H^pNWENMQ)<{C4)9oHEXz^4RaJ?PBx%?a`#1-fv98tTs;MzN)-6>C3w0tmH76Mc7MQlf zRui3#AY%YgYTy#=8#hEdz?iLCETfoOY_-K{(&BdYW6@SDzK7<~n(fTnP5cigUf1-9 z|2MGj)6bCI=^p(D}!TT zAsi^vo&zID?XaEnMbMp1)pJ_J!A;NPBDs#KCNK{6fHfe;3mAfJSs^+(t&UoUYE}zT zM$K$ANZVraABeUQWYWPbox%Vdi`H80!#yNvq77W9K#0MQ^d%G|Bt+81N6^PuXB!3u z<_e)?0RtCLlMauzCrarOEmjO@bMcR1lA{Kd+h-&48#jY!J-rlVAF>|`q7f>fBdJ)m z4;>5atrRIfWM6KdjsG9DA7|J8vTK1|I$ob0zwgq4i0r^bmriwHr#`s!F`G*tyScPc zkZmM%DP_u1sxB=UyR@L}QoQX_JnoW<=8_B7jW+8X!cf^k>7AGZGnd=MMhUhX+vHG3Lo_6P<6pSzuOlPIJtg~6XaJ{efz;&v{e;7dHpaAJ!h)5u Xdb8Ug;hZNGJK7-AB2+M62$}jH_CC6b literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.context_storages.ydb.doctree b/.doctrees/apiref/dff.context_storages.ydb.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7027d7898cbe58ed1dc8238e869f0683921f1242 GIT binary patch literal 39365 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 XO1)jBAvsT?o2b%+A`CAFm^1$i>h`a{ literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.messengers.common.interface.doctree b/.doctrees/apiref/dff.messengers.common.interface.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8855262d2e4435b94d69ed2e54cc94506f6bbc20 GIT binary patch literal 72380 zcmeHw3zQsJd8Quo(2SmzAK1o^mL;RH(Tr?kyjaFYvcSZaEDIqv&T8dWO?S;ym%6)} zu4;`Y#;keRLD_->ag$vy0Rk*9!wGB*gvT1og3B^<5PE#JpWJP$Xm27g*p?X=X7X{&O)ZO`!X z7)-myN=<}AEvwe4X-&>YX)|E#-ahgfR~&s zD(H+H2)b4$91W~l8b{X|3rAWOrWtgd)!|qbvrb}A_C=tURUlH+#|aCJ_bM9M@$HLtwhi>9?ANd%5aw%T!t>JIOkBmVn<{Q(6|H8|3#?pldc2xFT*tK?*q9Ud3x7-502;Mm1><))njjlqqH|waT zkC->4k9cKC5+9ya3vbg~h%?e~lcfa!dYHe|>k=L&HS=rwhsX3te1({;m*^090+ zD~{LJu!7@y#BtJV2{s|bm~f)Z_Z@#HNYErsK#&pg%Ol|ko*-I44zpS{JX2kxz(!O1 zoSGV^QpFRUjzxonGzmaK#w2ig(=Iq#HwL9}gb%hGUS8Crq$+15Tr<vx^R%uEVb(E(q3v0hqb0|jaPE{WG<^Q8 z79`^&z=9G$7w}oqq~P@hg~b0ht904Ag`6i8r zL$-@0rA8$>j|w<5&h#{7?B&6c0K@N^*e?MZQiZ!78lDi-|4JaHLc9OEmsBt=x3z7? zqnm*bxlhO&N}k{%-Hg}PWID+CrD;2uv+ZW7RcqO#0+p<0mC8Z~8^1j$)%+3|f6Ht7 zwduND;`O1sFeM?XOyyZc*~*TR<(KB{dY%5IN^SeK9or8kMPm?T+g8)JSTlYkP5!b> zC)y+2^Jw*Y)^M=i%LjWUHV!05I(~R1_$ndN#8st?|VySC7CnfWia^ijRMfk$>cx00k62;40hnKSAo1)6IN-ngfp=|-li$z0-j#8Mk z{P||3xP}rY*T`-Zn|EK5z&q!y(fG3EM|XFkMtpB@9?lXVSvS}zA<(i>FK7UV1|NVX zRwPU@QpkeD>Rump5Psxr7g{B{b-6(3d^lRZ(FnK6&axX;IDzYm>C8qG%`&S@IFCA? zitXtVNRUJ|Ah|QtjFg=>Gf{}F8z4-(U9b7NK`h*uAPX)*OU)~)rU@vyRo1hfAP;i+ zOq0~JJK3FXNrB=`Mo@$+n<>S}eFIh5;@*dUOfrrDntLxVKG#F>@S;Yi9@NUT&yqaK zL5ZJ$fQA5^`;ED-cOYL)s|2uII z>jM7A?qvHB1gaC>aTv$u90*N~q$Q5zB^dGos~OZ_GpjP8NDwGVTlfqq$ePBIJ9c$y z{7#tXriHnU#3UG0Ncu-LlHA&`jdMXuc7!6;n%}Bh^Hgfqh7p;}g&qX8Ch9ksks=bO zmerUQ&3-{Fh}@|YJ5j=pK{C_wV&}lQ&nld|G8~_&+4U-C1B%-TDu>mbebzXqlvkpf zOpjGH!|{WXw+L(e?$|2@>2LP~Y4-^#y~X_o{S#3Tcq9~1F@8ndW%#wZW{0S9jjiS zFV%wWq!N+9R+a;R&?#Hzs}ar*;+zVWgH3YqcBAFMf8guGzaSgV($1ClSxshSReS(OnskS#^cHs| z{xNN#x@~|P9Wsmo%v#`lOIP{bHE5U_4t$uvYcsV<_bu)iK*Tl)cbtIr2yyzSF^CAF zE3YyE6e4Wtsrw(&EUK(#4CuSVLyL%%Pu>48p`~e1(JF^~$oxYp5$sB&4@o@Ec#umy z6+?J#g>s⁣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 Cgo{D| literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.messengers.common.types.doctree b/.doctrees/apiref/dff.messengers.common.types.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f6946fe0b80a57e0c70dcdbd9a3b3f201dbf4b57 GIT binary patch literal 10282 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 D-l@E> literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.messengers.telegram.messenger.doctree b/.doctrees/apiref/dff.messengers.telegram.messenger.doctree new file mode 100644 index 0000000000000000000000000000000000000000..25e0f1bf46726f2cd8b5179a6e81f8c7d83c1f9c GIT binary patch literal 59937 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�ob*eaup}t~Bg!2b6FCQK-IY6kKZXZO%e>_@2TT z@UoAey2RK5SW>j(GyLF>#J2I3S7(Mnf5s}YM+e&i-Tvv@8QW2XdV z0kE<_>dgoGk*Gk|_c0M9qIxRUlwXD+*UB*DAv`g{_Ymd;w+a0GB$46xIVCD7I`Cb%= z4AbGm0yxc6S*^`F(BY{~xqVG%TIlh9uhw;J4(qh%-04#p>h{0n-Odv4-A@TPcJx`8;zh7hACe{;F zJOccEn#g41?+=V#bP(+kf4|2#(3@(S2v4hL%U0bzuSPnQnDKU_9t1P zABm`Vc8ip(sH7mqCc52QhCX|xwjMfVNR8(Yw;~5y{TBWer2`YPd4Zxk;z8y zHygd^5ZohrpJyECO*Ku;K<~Gs-LM!FXSfWExfC z1HGxHof#hP7PPxm9_~6ouavCj;c_I~vxi%dVl_S7iQYuo#lsyRP^S0kG98_V%MfTJ z=Ds{!OA62MaKT7q*BnrG4-F%`G!LiCO!IIFB{V!-%Ke0gOR4kR!|B+jxHq%aWpi&I z$(?KsK%OD@W{SpiZ|42(?rmciRZO_IT$0`x-?`=Vu*vJ^*zXMEq)o==3$?0fX#h|2 zs;7IP`W;?X?5h^rBlAc78@!R&D=+svuQo?kh&Ihq5|Eyg={x(p>n5;I{|Shczp(ry zU9lII+0}4w`)0EcPWX*>tBeP2=ZE~>L8I)?b6WFwB#5NleD}RzEj&!e`v@(3U$M%b z9TuCd#xjmh^E(fA3gLLr2ujt?F?>Ws)Uhl0*~Y{=tHarHyVb(7z8JBv5Uv*`bb@AQ zA)LY%z5rV${7$%;o>2yF)t_5xv6X$L6HdIgRK;fzI*)ev9;a{upDk~;gU*8UvW0M( zKj91-El`?9o(=oTOSL9`tm7RPDS3dOGttj>tBPM6f=0PWXA03>bUcm`wpKdfmZe4` zs5b&zxp{1LxWUKU#`SiscoCb^YaNu#;`yH2#LF2qdZg-u*?ejLow8Q4bZhqHIz(4{AHV%>O36Ix^>8?XxGb)3Tk!2>2|QR|E2qV7uVP6H;ZZEUxM#4Gr{#;$k5tu4FUXjQP0w`tca=*DG|o~eJDqVq~HDL#t*x#mjX;3bVlYk9sCK8I?uA)sb4uxps3 z0CO^h^8LGB@Dd1hwzX6?$Ww_Vf3qM@nQ_wFb9QUawSy(r2T)+%32IezHXW1}VM>+2 z=^UF1uZLpdZ4hCjF#|=vNow*)xXE9^28WA9$6a=+_#a9gJO!eAw8CXh z!uiuj*v*IA&L;Q_=W*v2XFLA?mh%*=?|qb7K1qMRM}H2In>|8*UO0(Ax6q$Y)1S}M zpPQ!eXAk}P5dHZm{h^cBJvyGU7BPV3PpY(4rSqDP-i^ys@>9(}yaqi?==^kEqGKA=bM3%0`zsx~sQ zZ792Zj}2J>FCpX+_4qufCA=PH2ijX(Y*b?fXH~Zug>mg^jpDTEl{MO;(T5Xh1?07! zW73N5z;^=|%Z)Z+S0`Lo#uw|kp20Ux9*)W%#pJ)Ea}wr_mjVG4P!rk#&pV9aQ7v|M z!BMXGzz9(qyK!fnzhCCuCAKa{zYm5BcS3JkSvnBhx1}isOu5ZDA<3k@2 zwpHe$l?Ou66?i3oF*{8_5evP-a31w?AIgnKPJ4AYMmi3VIlAzwyUBC%IL&!6+Y)6% n<`muroL;yt780}2b#A>}ZC3~pmdQA0D&)^1+^5V7_ILe%l)Y9U literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.messengers.telegram.utils.doctree b/.doctrees/apiref/dff.messengers.telegram.utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bd3c9368ea70c236a68127370357b9b18d270dc4 GIT binary patch literal 13822 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%0A}Jwr8btW;w?kT=d+i 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

L!5kFLa)TN?jlE&aP2^Xv+TEZ(*D9S@B$nD3 zoM^YY0eA3-nv6>-z0$E7F3n;rdK%8lb}4WJfQV5}$f;3(5n*i|;OSyMu&IW2*Nc*+ zd0ePPmUnmtJ)s|j(y{4?OSRD89H_pwQ$7xA@t@$*O*F;8Jk160VxzWL>kVFd%Ab9A zEZooz+9hBH*LEQ?k04q{Z|KYyn<3#@)n2dN-M?=iUU!S_C3sw##a3rw-yqydCD{-# zmr6Y(O@mkfO;+Rm-dz`84y11A%vY@D>5Xds`LcP;*fR0$(V$bT1-*IJ2c*EhYHzWD z&ertGvzSVAz3SlL>TnwvbFmc7(Fg#3Iu}O3M#Rkb$|p+I+CsH~|G~to8ZF}gb=^gH z=}NEZV{&(asx9m{|5<{Qt1OVaty0Ae=M}i8_@o1#84^+ZXupjvHehtUS`QT9!r(Em zP^(gF&Vv!8bl6PtqT8Rf%GDN$gBz_fpOUMXXaeIb&IWUs$4eMOH3)j>WNQVbj+O$P zookfJb8{qZ*|0ZJ%Or!lL1UiFw#UMiLG#!E3%PJLmni`W!;Q7(9K<`gj~i5sbv9v8 zV6Gm7EZV?nJ(A(!X5(!W_q(&#Xl*|FF;4Snj^0Eu;)wxP1KsJM{M<>AJJ#%2zjc z$abJj@lT+f&(RW&3H7-mTt$qB>3++hn{Fo^#?7VbWe@;lXJ8)&R_w=ld*Rv$Lu{_B ctu-r+{v6HC1(L9nbEH{>1SVUtKU@6&0i{{UYXATM literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.pipeline.pipeline.utils.doctree b/.doctrees/apiref/dff.pipeline.pipeline.utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2a72a7942e8823316b610a4a9015fe9c14994899 GIT binary patch literal 31507 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 WL!Z{jDo$3&8wjgOlfu?&@qYmV;N^b+ literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.pipeline.service.extra.doctree b/.doctrees/apiref/dff.pipeline.service.extra.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0fc5dc41c97864b30232f906e40bbe5cd2e55ddd GIT binary patch literal 49316 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 Jl?T7-{|^xl`K15= literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.pipeline.service.group.doctree b/.doctrees/apiref/dff.pipeline.service.group.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ec41fbcf42a9e9a7572525865dc2d421960b335e GIT binary patch literal 53504 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.pipeline.service.service.doctree b/.doctrees/apiref/dff.pipeline.service.service.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6df3f78e90ba0399413bf936447e486b457b936e GIT binary patch literal 42991 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�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 Kv8EZ5@&6Bew^xDy literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.context.doctree b/.doctrees/apiref/dff.script.core.context.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f0a017f6560c9b56f6be57ce92aace8f3c9e9adf GIT binary patch literal 94650 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 QUcSn2q=YNOB5>3H4-{;ekpKVy literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.keywords.doctree b/.doctrees/apiref/dff.script.core.keywords.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fd9ba24b0b4047e9d112a2299fad494ebaca2d31 GIT binary patch literal 44796 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 z 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.message.doctree b/.doctrees/apiref/dff.script.core.message.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3b98886fdce98926d9b5f814b67cc3e8c20da8ef GIT binary patch literal 150305 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.normalization.doctree b/.doctrees/apiref/dff.script.core.normalization.doctree new file mode 100644 index 0000000000000000000000000000000000000000..35211849a8e795d5713fa826b8d887f74a70cdae GIT binary patch literal 33179 zcmd^IdypK(d6#tWlXTKaNQmOKdZ87*+ru((Ks+oLiOV23up+3W6tSAyoxPdS-tMw9 ztGgpeK|EB5Gzl&i+XRpkV}kRjic|j2DRAs^B}L)5QhB-ZN6G;!+Z)UAEY{;$@&7~l_HDnE2 zBgdO;-0-}*J=gG1EmbpM7hM!#BZaczx=6(HP{mjfPou>~P5qcN3McDkN#sXo>Nd}n zWrH=tt~c48AS z6^0TNYXV4En~yiGE%^Tu{J$Ol?;s>>7kzC$!GQ-ZVvz&Q;^mNMdu3B247PDLG(AKn$TxV@Tq3BVuODx6 z`a^>^QG?d*S!)l_Hrj$nh~0?npA^|w8FK45Vq>5yW4>| z2x{P^jDm**bIBy~MUAz3wP3n#Zv3c)QhqlI)rx1>6||F?GhDlnaZQhCMKwva${rFS z6%EhG*cB8Il1lFzb@5@^BVtgB4P zOQNp~$y{h%TrbzHU;8?CnYmO0`Q*WGOt89wSz6E1C4c263T@drQ zkPmXn2Yr01_cvKGOAq9LUw6}I z@c?2>0U`JaMA#shc0pT@LV}TSo1iy&*M?m18ubt}n~wIMk76oQG)qRK>C-x=kVYWGHEauqlo;!R>6!Ji?dp=3U6C{~!Muo> z4l2>8ferBr#FVUI8zo7IwW3X;p6`$>r6%m<_7ld|R+@%BJ2VY1VH&=iB=4-I^(!npgKPjUN~@Ca;$Eqtyw-jw*4JYP@=ZQdlL2d~}@G z-XdGalWOey?HgljtF5?w4{%U(d)csE;X0Z&N9*?Ola0`$YUPIstzgOpPN$4=!wk2` zwz`d4ty=f;?t)SG9%xia;XP0D@{gh;ihD;nV`Ku8GqTGTz*g)$jVK?`DSm?5d2?Sx zbN;fmzCfxPG}EoVf)5QVcgi*w3(!xSY?FM<81%<5V~2`I>ctWY*MWuXBQ!(sp{a( z8){~y2#KFx!fb0pWjFTRRk40ye3Wf)d!ww?>g1>gWL6v^snEjQg5~ZUh;%h3s9rqfTbcD zV(XCt6|8I*Y!6l;Wmq)omF9UihAH;RnUf-Q@1P*tSzfbTo;%vjHc_T?E%kgiTjlZ{ z*b-4;)f{4La|xuTF@=a}O*{lTwR409%nexQYI>A5?0CsG%SFLQTbCltSpHrkGPz3k zGQTM20IDb(zelPfu9P);k|ILe??)=r)|sc=JDno^Be)9T67*uOT3l}FC0?(e10yrN z_5&Ov5t7GRT4*hxDZ+*dF{Wacaq z7A;i*-4>FQOx9491u~@M`Uk`+Sx_c=@+9j#X8HF%_U=kpq0^HVd+x|-Q1 z#mt_=Kb+FnWwIKnQ?kxgosS_QkPthFkCMTC@WdIg5U|=DpQ00-^qh}td7a;(ngn+o z;+eEoz7lCA!VsOC@m{dQ5wJsQuq`*dfUG@o!#|={6gM2??Sz@(d5sx5v&hf6pmR5# zW}SPe{01EdjoC>SFo;#8uwHXaLm?UK%UiLQ)EWo(chMOi?opXfYwOSHwI(fBfcSS% zRgZ}O6(P1##5ehf2cuLHCLZ*uj0Qw9=rIJ&c}^VSKURnj@l0AP@AePwcY25W-}?c# zBycgrPFM#7?vuSc7v>Ld*>ndOWqXX^qt8seMC;e&|b@ixUU4o(?CH-nj0otNp z<@yNewY@`nLth~6TEA+;R8t74dlaUTHGia!h|czo=&$w#(KJTD+T#h@D!D56C%+%c zy!G%iNg6Ne_{~-36jRQvsCwSX_qx-0w1dG+=D}IA&v!a!cvj~T{3Cr_{+^WbMVhUy z{fzIJgmpTVIczTDL{!lg&P8nlL^=j->2EAnO&88XFGHI#@W+!6b5Wc}@ZEsUZ)iP< z-Bd`m-|+dwB@)^Cb$o~5Q+zFe7QzleO4emU*qo11kJ>r}U#6PcI0Rpbw6X&C)JuFE z;R^I2Cv1=W35sfhXJzV<@Oie{q9dR?g>~RB$@hN{JQx-h$zAsM7;mIP!5*Wtq_y25jQ4S_8owjRr7`z!9><yV<<@9IEQkNXnz=2QI5{e$lzhAFkLe49P3`N^U8K@$Pa1YmwR!kjHIcE&JV& zZG}mzE7TjPsz=lxMbQ$WXwVTO3?t^sY}n!y(kwBV*o*q8elFk$&4cxLPR~I)>7FqWm~ftHS}Y zoz5K{h)GlFNI&YcN;e`@y5PiE@LLV(*2H<$4QlGDugcv-g;J_=_a6zJloCg>LPx8n z#-XswQy!$m*SR8U7N^7^D*t{LPHFjvuCy$|p#odtgKkD4c6T?3aU!@AC6ee}BLYIU zDY*3**n<$m46Q`SGlDvuF|&tI@%c@lLA<6$E>Kh3QQ zXPJKT%Om>lN_AS?_rx)*N>x5i$mD6d>a&bfsvG>5@;A;$(-~Si@azVeaJxmO$$V53 zwTC-q9?r6flkJO~o6*HX{|;bpcaJQWeM(ZZnMcb-n{K^zck$@sQBzyi$d4XsmsEoK z6E7bvMeIE5v`k=E$(r@P2DQo?MUMvgx5ng`#$oI`wN75ZTqj5j>$j|@LkH^R#Rc3H za=sLlWiPJA%R&KSO>rl}`ci<{nD&m$9Cd*v`bOQEiM~0+v=oKtHv&{*Z>`2&l5zeR zg_4+$gdG=toIgyF*ZP^f7^2OR^9R&5ad+x}B^16@-}ZX)O0Io47tmnX#S1P<_d2v* zMXz=^&!CXF-QjEolXE8VCq#qJHl%dA(BWK44071nK~+#coXhCxpXiBxo@+XnQ#IRS z){eTu5kQ76KZ{bdR2p;6RVWz-Fl(tziUaNMQG_n^o(PCg7=v^NV_(X$n!fXn->-m0 z?q!?!1#ES}Q$N4FKH4l=jV0utM(Pb4`BA0gCzN}qL!F6=p-5IblmAg*7#PjlJ_MNZ z`&*~Hv$sw^{O`L{^d!YJ)(;EXl5?1hwXfifQlZ_FL;-uUyAEFg@a0}6D-}6@2LHAo zT_?}jT`-MM{PAchYB-s$hU4#fU4cR|hu|q$mryJ6Yh6#3wfAd%GSXIf8oKgp9pIx0 zSD-J1Fk1{=3_66On)#G&=ZiBo?I?VbUu%$t$?usv0qCKP>nP@65iM^1m^_!Zqa;Nc z(Nc*@F4xO1>j0#tm(zmizoz(e5AU+`NI0vybch2&^kMO^b^1qMqzmN03=jbmHe*cW|Tb0rcZ&3}`md);L@$1ss;~H=9YGN+$%-TlOsv8Bb#W3Zw$(^7gnPgF5zmm!bjDsun``4p=|KT zi$hE$C@`}DAYEACdr&Be^XnFPCPiM&0#_5{TuoiOm=^d}G#Hkzw35jJSG{Vnz(-N2 z&lWiKLs;PV(i8oZ7WgHti$*iRC1U9DI0~gQz`x8tVkNzv!HE;yx*;z$=Q~pw__gJa zz`>1F{`oBB8v{Zwn}n2)`b zUWtN~TllM=7lEXHS&`HSYv9+q!B6hsEKs4{l4*cFB^&sk3nWVwx@+!42@E`HBX*BaKdfV21)@Pve z;fp^-T}jeBVG3SHQEduRZeB;{;OeM?8i7YYl^HuNp+gzT)6(VHt~b>zD0hP5^lzu0 zhK`rxe%SjgyceE@bUv`?BqaI3VnGkqg1XjK8^+)JVDAr9HHN(kRPNx8l~Tz8unp)S_Z9z zPbiR2#{bUN;od?2l`!Z7)J&)ELqzFZ42=47E%t$+lf|)*&`J6zs&Ju)TA6J?5_Z9jvQu*If&p>CX{9f-<@U!p~Ts*1VGBqIy5}ldOjQm0e3^YbgT(QrL zJlKVjCZ0Uks$|nOV_1xBHQzQ2d^Z(J&%m>v34JtGINjV#!T)Yy;Oh&#aOn%Ef&6?o z1K~pUdXz|F5!&3)fV-NTM9Pr+Ptw&T*ZK(BjH!8b1P^=A>LfqJVRTlb+fm%7R(ccS87 zD%yS!Q`CNuChtX^3d*tzt8p(%M?-AGs57DC`b*Ln)S=LpS87M9<<%jkCn;DzA3)Q^ zuGCW~l*BdkU8(aa@@l(MYO0(ksB0HfZxhu6@uIJFA3%>0gUp9EoV7sw z9Yk(9WtNvS_&9DEVUk3En7XNI$he4WgcqfHbpZic3SJ=dRzXkH%J{C2pOj2tMLePv z@V%vv0&f9fd|MI52fMrU58WUrcbER23hkDJ3^tRzyYy=sU1fg(#B}V_m1VWHB({<6 z3FK2|(XtDc{JKg4aq?(EB5F})*F8t>zAbO>%1qzNBNF9l`!sLI?nCKZ*4H@oBt>37 z=?WZwFX~+sirI^zWL-AK*roh~?CO)ugjAf@Y~46&5_ahz<GcmaH45oz0>( zs4Gc;gt>5NFKPlsHOn-mS;QHswi&e^cY2_%u-w!Z^n{;#*xVQJBYlm}!8WP!8Gu$tZW} z;<`gY9k;b~XaDg2Z0~sA*AKjtTwHOa9kT4Bm`8oXG4ES^!!db|t&sb^_3#UV|GxF` zi!B^j@zZF_iH0P%egB0s(?qc@9n2(@Qrf?{%ub`?P#mLuDR1+h;v9}b`q$IRsf(vzy59q`OV({&Mz`3;FIgX-TRX?8)6Wxn8>4w$KxIxACWy zx!c+gA&8C3>MQj6ASCUKh_gGBCQewcju>d{60dGl+%osPk&A2|C(=ad;UTZ;Ax_lc zHEdkwF^l-wATF?$O%xh+3ig{1Li=uzDI&x#!YPXD=m?NJ8N~X9Jx%x7i%m9sAH{`p zgZq_ixZ3b)4X-(C-H4b>^Clwq@?dxP0cF*MLB3FH&a(BQK?>=15smxtG~jTDNv(pbnZkrmZM$^^c?W!G@eeSzXRyQuPV zkz$rjo|32FH+dP387=w+{P@hXYy;c~6xpt9!o$!!ypD}q1|nPfKZn?)xnu)153w;_ zl{!>3=Nj{9Zh|6KLF=dRIi|6Ilrg|xFlkVTX*FS2fKeWyN2?Se4Dr+&UTOMaC72y|= z!fZ2*0kq~?fT+x4Xl^VUmH7rdEkK-t?5#tDY__#-;){jFe9@#hXlRB4S}#j38E*GqCLK^WLmwrf*7M%0xr+AalmqE94-C5x9{dEAPV#t$WwSC5S}fZO z2zPeJnm7Mrh)vYYn!3A8BSI{>8i*bPpcTS)Se{pN56;XW*+nF4iiw=7*5_xMY#Zg| zT|mw}B3ogOJRaxNtWEE|?s|YaQ7;uD)l-V9{u)_5nU_SjC(U}!HoX#W16*Ln@)pWy zYz(25v6PCQ)jT}Pt^{E&Atawb@J1C;GGDG@?@EAsWx+y#u>xjaEIQ!KK}7D8jT%0_LGj4N-EYAR&Vz)i z1-nuLAxQ49h4=-+_(t;C3q-*P{W?1*TY>X24 z2SzBHao)8yQ%Lsv5j6ZN{NJ$7@GlSWFB3R)1Hz#j5)OHtol|6Lu#NiM@=k0-j6NZC z&;gM`>saO!qta7|?szI_VPURX4#TCo_T&GP^{C!{jK>yXZ~_eY_cP`XQ|40ZUi` zUjwIdJ4B18b5AcLUy`MOP;Wx~t!0BmI9RT?&wl1^l0nr*9nq7mPhbHfC@b(LYvCnP hA6p*)#A$uKT`80sMOs_)#39FvBpG}TD)tR>{|D+|Gt>Y8 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.script.doctree b/.doctrees/apiref/dff.script.core.script.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e226a3dc70ebc778b11a69ad85382fd29f8d4f57 GIT binary patch literal 76340 zcmdsg3z!{Moo71f?sRvO&WjK*5Gv_FE-~HFk!L^*ARw;>1qBS*+qdtn?z)xR_g-(+ zP15FzptA~*LLIsC7U7(MVzHQI)rtdIyyfLu$#LK%JP*`MbM$Gb(r$_$)1~tMmN`SyLt|Q1 zlB(eKH%rx4$J;#DsI+V51x96NX2L1As!eyI+-RBXx#OKm6O6}vw+1KOPO0rJcT2Na zYsVV)2Ad`5l-seEdBa5?1^6|{IzQ?4*Q#~1GufW@Mlpd~tvM46w?Vhmnl%M#90qF? z`fjb+*Rj^Y|0lrzC&K?HVc)9`G_rH2Hvm1YRyx+^wq;mnSYzJdT~=ex+|_E=>t<`$ z!A5KUu1d93Ys?mBYK?=%nHIEI_jYDx7sX^3V#1y$n)AD%(GFl)pEVjYanM=YuI{t8 zSj()f*0T1rb-K6QG0SeXQ4dkL03Qe3s#`OqPu}1Sgd82@0Z7n)qj?BX@!!9>L%0g6 zxB#oL#wM+8fM_WeC`9FaNPZ4YzToIAC8!Jox0GgErKTl!{`ng%)1Uwtlmm@st8t(T zL(3=`j_D%sQ_cBGsqR+GQ<%oAImS$*Wwgv@%XEMNkvuLGLrHFsIwnS-V8`U?fl-aN zV^$2eVN`&5>L$riZqyH$EvJOkGLThv8l^f*PP0*mqNht( zV52^QbwlB;?T%5cH`^{P174QfEgT?*<6=hW2&RBLY9lWP7|Jj;K`R&2o`??s^Sy7qB3-`w5QlqNK=^w?B}9 zCNU_R+5vZsHD+B6qF@;xcG>iN!bdvZ#>lTA9gl!~v$v`Fc!+0-CJWDkqD$7y)Qgo`Ib=-DK;p>%HaAC)e zO35vq$wm@rXp*5+uQy=SsZ!Yclf4&?xgcJ58{0{DwqLZZdG& z3UQA|e+bk*9gkYU8v;%lC&htb2Ao44O&Lh*6V~4%Ab%$Su|A19oU~^hX%DKZITJKM zt?I}YiZ@8PjZ%{{r=MCTxttRDc&*Q7ji%Wuxs8^bdg+cGoI~(YboTr4o%Q+}VHWu= z^y*urC#(DlL+Ijw;nnq%AELsibrsgb6+T5P6tXVJlN|3SAmKmg%oa@OojljBxz!?? zjYS_<_z7e#ENsU-_03joqDGg zsafLe0_hfEC4yPXtkKVUgYX0vBN)@AW)+?>OO&w<9kGYNp%8tcf=~kSXbEuy9{~6n zJOkwF#Na**J^|rtj~HQMYmB#h+U^+Z^6cV_AMQ- zycJ(>OC$7hd%f;WH@fY42tW+(Fn3JFKQ>;)bqC!V`Cy4ogmNyF4W7d}x z8N)R%SUNUDu$cVxyoI*@R6MBVbsq=h=2t^Y$H%MAc*}9e$7N9tLJq|J#LKH?ck0%? z_yuhjP$=xftLs4M$S;?cYPHgI&79gv6p@N%bFd_ z>nSs>II1yHiz93ByUsnCCEf|XW!P-j%Wga5CiU&+;t8Gv|9!~kp{NLy*VhbLhxT7# zmM!)N;UADu4{;*LI7Iemv^7|dMtMZ6aQke?>z9909N&s#oXv!)m%v^Y+bp zSHb|_%9d9I(CT=i!!QEqf5MU|&;ulqRLgGywWxYeMtV6IRK#adWF1;1%%1u+6qOO^ zKR{LqXzClqn^Q43uaxCcUO;aO%R7H)M_|2SsgLy#Pba~>5kE`jbPsT^hoUmVy#=!N z4)QwnV`BMgivlNhAUKr#S+8TXsP2&IeG|JsqUWz;KfK-?hSv6$PKG3Xi8oH(4k=mL1-2tMD$IP)H$Re-#VnuX6Fi+s z%W(oz5(hCNmUtJc(HkoR)-Ll6v5;Y~9>3*dg{_97GFoA$Le}1`u!S-V&KCFvWWc$p z(M^^CFUbz?#VWjuS_a$_3+CP&!MrIunC4;uGnJKfM8FxcvTn-}(8JjQJ(>@o-C0>N zVl{=5dPpD|80`<|i06aZ@q9ENJQLl3WF^&Qz~GAl*{FcQW2xayG*`cn9o=uJ=w>um zy9yZe?bEmh@zW_h_72M~q}aRt2!^>x#9L&w-vKY_bg#V$9_>@$j}qLn4R{kf!)tGa zuMp!K!$jc;2YVa5w||4k(UlYs2NcsHojW@A8JOUokt%e;*KZ}X{he4gnI^Lf@W=zK zbfzPA1|7Yv?U+*(0JCpVou{+hWTtf3pPLEJar5cU{(iJnU@8tGK4!-rz@KE5hy1(V z7^mxNVdAsi;E$vH^*F9^nun>-mFy$`y%tii8EwZ;w7TBl?|3>a3G0KkiMaBRE=#zJ zm~mU^+z?x!nQh$_Ok17oFEI?yS#8tJS@C>5OjxZV6IP<2z--l!@&zXy{TE`Mpa68y zn6=t@s%?H=@92WhQ~7;k%Y*z$D(?&G43+8&$n#Kadgcv5vcV#5r!;F$Tuc9roS5PP zO_-ayb?>FP*y518)40CcG;w(ho9#(k0ZR^pXE)41*Uc$5A7no&4QnrE=H~*RDp4~( z_9vl;;M5GC`Z*V}rkVP=Qd>pL)DJCOjekWrXR$L9w_v3)GZK5X4eDw};wFND8e^BI z@--_wOvsv_b4F)fB4S~TN`a{#d@B!R73iH(pfQoZBVv$8uyhLkayASkReM{YZWTQl z{$%g%FqDJ@U|EO6apC%&YTL6WsCrX!A-$Q~1QC8o>sfmzi^*xxK z29K&VIEGfA5BZ6EBL%L+pL#O%IySy2=n^qD9!pJ@~#5tN|yy08y+Bi|ft_YCO6DhAys)FR2ID)J1QC1g$Gmz1?t#P}t&aMfJyW=WcZl~U8VKd>aNt!+71}e9v z^h<7otU1`lNlVfgl>&YVzLm$D3iOGn& zeHRp!(fN27vPvLlG<-+cki;HFD19Gd)y>dj+@+iGDFJkpoAH_a(Een0v>(d_?KHt< zA95wQ97H^woh9^#eLcb$w6o5KmwDM)i5iw#UQZ#A%<|GHP;QI;0@8C^jQ0U-u?w&} zz1U*B0I>&H8g)ssycm@NmKVOw z!}6+PIgysv{y+^XMl#BYme(v4mC^EQLskjoV`F*w5UZA#9^)=8ue$}%QI^-+^F#Zt z>}Wrb3)*QcFCTKn@(LoJ&hiqvUORrU_+4U(zk(phwdXw8+pN7QT z=Hjgfn`;$zq!*iu7XUUFFE*3S^%ZCcwYk2EPsHXTPYY*rZJ4V%<%mdE%z-F0(uH|? zu%?EIHAM>vm`?rvTdVmKGm5AzUMk4;csrmK`&9^;jSpw2O^!5Um*(TBH4#iq_qcOl@&h&$rhBdUyrRLsMy2OTCRj8n#y4>sSi2wUJ%dK zaAGB#JA>yRk%MYbJP$#8pnIaR6h9%L?J_hzCn;xbcqi`SR|!{sez;_{Xw z2~9TPb*v#=u*8uu*W*DjGkA^yo*{YAs+KLI>iCCE`b=y{W1buk*)rigJ2;obPf>vb zEXyuEVg^jQ{0kNg{kN=l(dMBXh(KuIb5t#UgJ!_0%T|Kf?%4uVY7F6(M^ARx%43sDhB$l*+Pk0p%~dg7Oy> z%AdhMfZrZ(sZo&3RD3P#F4YF^CXTmc2ug~M<1NKc;NwO!e|NU<^Q0fDij{|tDiW2m zyH-Loy0?W?G^+61scbRgEjjrv_i@?If8j*8@6l^@QRXUF-*TyWMz@}i+u z_V0Ji*RgwdYXb7n-rahBc-z_WK9mdIoUaKG(i(wiuzevC!`CUc@x4O;8`#G8&eX6b z2P)o{9oP4$xTXwLgak%l8(%b@KJ&)lnQE))-v~rQTTMTnBc>n8j_K#~!8EkhG!oUo zy5Rg|!gnR0>39*Q(DzdVov7=+lO5-us5tki>yDdD_*VgJKqfq&8rEc)@LYCWhlX=8 z*m98xDP*hx&1DvF0MD)XB_{)TGnAFlCfj-Z@RX!MjF64kH5O|Yyj&m~G7BzGjcuX` zxFkEY*Q?O}v4{Xm02^RgJ2kAyB48#vuC9vff|>;>M1U8I=i73`^R3zOynhklnaa%i zYk_FU%=$=n*PSjVw%?@z?h+>nq@9U-0lBa8sjsC96rR}N8P(y!2@UnZs6Uxk18G#LxI z+fPXEycMq^a~B3Vc7sQU<#(cM7XW4BZOvdiSfKqp%p?ce?I)$`*~FHZf;l%So-PH| zA&BmW$=Ono%m+um3Y!@nW4=+_?e1dC*F#wuP3->wS&w~;c>uWV8rESN)b~R~xF?r? z;_>!~pnl3Y^8u`c0v?JpA7TyQwWu+98Sz9x=0Z^!0e=%@l>pBu$ap+1F3#K&;9csE zKNpxs>5up12mAfmVgEobu&2-;VdVYjT_#qK^)WvyU=R72pU)5TPiM#czvqHEXZ5%+ zQyB0rWJ?O$^GSho!1nw}YLt^*&L3un`5#r7b9Ony@OHt^Dc~Jk;Y;iQyhHdUryx{6 zl$B9nuY;_Tz+O!7rgBJk2!KNl>CPM>E@X%JoO~dTbx1=z+`kX3Jjry|8z5ck!$|>n zls>#ZHRg$C$Tis^f2|66Ml&RfK2&_FAn?h4&6Np)Qu1riNyyo+Sx$Wzf9;U}Tlh0? z*3vh|pLr8zO7G9SNcI^IR$WUh-l-UHkC9m;3&`ML!V0xQdgoC0?-w$w47o;2HqevfG;NFCci!tJCBkt>=X2Wi$B$zsSarQ9CV4UgZ?}| zk#*4IY2nsEp91%v`NdrIcpD#o?lFshsuQ&%I=|^Mw1;{ zxYO7Hx4t{@&yM|YCE=_SUjDpN&dpcxsV@cBeh;wMSP|NNF5mX^dUr4QVrR9}!8OjC z^&rwfh9%ZLFN5?HIzn@%Nh>vQh%-d6m4Od% zz^I>6w0CHwj_NV%vHKxY=JpN{wq-bfj|a!RKL6HUcoOY1^zHj;XuUYx+H0Re+Gh!Z z_2c-U_`n7)@l+!3!zDo+2C1arNbsKm ziyQUTL}Nj#=>`jZT6KB8kS+Glac~{4<@swv@;81}zG!1;RsPqZ&3UcLe?3r#uF8KC zJn>cesz7Ip@xAq-<`>Sy^=RanHV!0=l_wC>xNWNP>U`(2LuR?{nvQ{Yx%z9MD+WJk zVPfP4(=;lkTdLL^yxktt;a)pj(hpZl`dNI%Iwe;7H)f0}o`77UIMJM+;_IvTcxPv- zT#_Si4KTJEIo+&pCK)g42Eh)NN8_g_@OF!1L;z|rrtS??tq-RnSh2?)z7vYl30}>z z-StF*{*F)Dvxail#7rms@?O(Ic{JETj7*M-@Vi_bM2 z49>7piJyQvejpqRwVp0Vp12FDmHyl#-I~-n$wB3)gI)Y$ zBtRMm^>p7y1i?Hmov01ICHGMsKfs?dwP4eySUb2Cq`GkdD~oLOUi?}L;Qg6^_Za&K z&vyeL_Yr=Nna21iJVrjk`ca)#B9k^3AHn_un6=C`z){3JY{@lP4Gq#MXYLxTOissL z0|YXqYw#>ds^xD!Z^XHW4~lppi@js>MtnpIx<&AEp?kbQV6Q zuOiw&rd7ntV?D{bcNV^?Z)7wMUk>8Hy@Ob1;eYC@iN=Cf(+w8-w5qcpq>Ww2)*UZr zVJw9lkM|cut3&?6P0)+H{Dr>N++P@mC+;sKsR8aXoSveKlGniD2ebAT#wU@7{K?Z= z+cjQ;B(i^~IJhB$KkhX2%csI?&_=0a zzzg7xK=8GYmUjY0;-#g2ir_!`dA+wU62o6~oY)1@tiX=+uoBb?l1)7#@=`>FDH-~- z$CFcSIvH)PTY7ul@5kEE4aE!NG6=8AWrwRE4z(!h`Q(m=67ju@b#m4Oe@ zYw5n0rM-{$(%$Y|m7nX|7j2^dn6xkLTDoWSRYaTTvQ1`CNsx>+Z zV@2aI44Gh3Pq0LytFlR7O*9s?nr^Vrr&V1QAs_8~ky6LYRS}EPB)O$7R>JroJL6Wg zGUS@v2CdG^HMtn*L#HyXgeUHr1Qio^MK(k!MzNxf!wD?k(K{CqPQS zrcUHZzpC!sj17?1C%rPjQ;G6YSJv&t66wmi6ZrxwQwgI=)$a>buLiAy zTa~qI>u!Ofbec_NSJ{@gXCZ6XYwM8dl(luzIzoYvyt-~tnl!-h$OHQIbwMuaeSO^< zpw4(JG3Zm{`Z~Xr%KExs%i^Ue^UdvftQiC+6gkNnaqQjS_jJ=;?*2Z2nZ~%J2NE5N z^>rUk-7lt9kT}oC^0rNaaP#;^6@GB~pYazS-6){u0sU35#61)%Lto*{8}+5|%l-{$5--~H4)E{& zyo+Ehw%Tdx{@&-qwpm;}bZM>RIIk(S_QDEZAU~c#)6Lb@>(=T3vp)$pCj_?%*?&c^ zQy7J;K;4J@R`nS?LIF>LCWf|(n9GM);d{IjB0DHb$AmJ)}G8h+AhH0j08_m3>%RX#RReKXJGW^CR-x?8tH~ zrPjQGf*-CPs@7-mhK0RTLJ~~v+uNM4lm|nY=7fF=W(+n}a8&e}XJhv7 zkd)MhJEmeC_%Nvr`LSqJ}1{NgP) z>u#%RIvq4M?(hmXlv~xNYZS_;OmX{N^n3yAUOzSZ%LFY!HK3qn(#bM9Gia1%FYMTX zN09M}0HN>yWbcJzE+{0>Mx=?`FWPBbSTUV)(W%ZBoo1ApbyP zEBvPrBfs=J5H%m5w>w4W?WeIATDjN(F-WupkrtAz)aeuOd2ZORG>th&)<3qhJX8Inta!%cYTxY1Oc8B)Z4`hBEsf zp`~ir3;k>sr4@||MQQ&Y^7U-T4BBI0NRl>C!{wzw81nNi9s3OaiQ6fh>j2*`LG36T zBJC7;>BkE%DLJOIn*=F|fPqcQzNs-+s@5kk!L{g^vb#{hFkH?uNy6xo0LQ2?&~4In zqx$02IOsK4DjloCemkUECj+&r3?+v?lMhw93d+(M04fv6fgJm0$STD?Q=a-oXn6}K zqWxNU@;1g`FNZ)Ei(~~hL#pd^1C29{**4ON+FCEeN5Ywsxx5u`y`xH-o61vER8JX= zY1`!Y*cE{J)`inb9Pv61 zFDMX=8srr)OMv|pw0lI$3VKW6VLz{Tbm7e)9|CHS_}1vn21pzcfRaTt?C=IJbOM7= zQ@8HLFHuM8(l1PFz@f-fI~6q&B=CN7{$Qh3aVD;24^wci-on=!Y$oLda{1)cK4yLg z;yJsy1nJu?iJrgnsUBrJYU4Q{r&1)*fd7)VikNr~EnHQ|-Q0cnU96N2lYZm~smtHj zwx>J&`yGNoyu{V$-=9F%eDv=MiSs3$3w|ioUW`z1n7e%SA-5tA<@Y}-#uIZ?bOkc$d_gW}aAIsKMOt-YOpwGbV(SP3$9`hW z+jv6^|Eqx-lq77nOtdsKTlNZQd4A&4ej5}=W#+x`BxGiISa9iyIk@!XFakNQg4cAm z!Y+VZR@WuS^Jov>XjL6?w5rdTjvV1+s|%)f8&wyMV{+TAx*)jBK)!VMBLwZ=h%+~I(~c-qpOIbqM_F>h7W&%GQx!A5t?yKL}UB2oXm! z7n09r9=X2M0@3H1E&pBv`ITVT{tYV9+TQY=BYl`@jO$bwditFsuc4-cQIKvAB^QPA zNawzt#>MsdePaj1mbp|_1Korj$FZd7d8A!|N>l>LQya;FnirCO zs3pkbQlkmZhpato0-^(A!j4=F4g&WJyp<~mQ{bI)F6os5?@;LRhSY#3h90lWj`uzl z?{uNZfZ`=^$IT@r;LWHIjFF|7L~09c12M;gsgX@)WhXndZ&aa88Fq=nHZX}44XHAZ zq-WvYBajaW@S`G-@6M3|_hqNR`*Wi}R}sia`UIwu^aMH)O?y?wfa0R7|J2#)&j>;+ zgCvsH_*`llB+8dhWhcRxRT5;EFC%PO0CrNC^^s63Hx>qg2H#7$1wP_?=oa{38dU+O z^uwMKl;ZA*Fpr*2O{`>*_4Dl1dPb#IHj$v1ti zhhRj!nDv=D0g6$|KXI>Dl|ck^Rbh}tJy9xSFIGY^4;iKVSOa)1D(lIhCn}9wps0+P z&q7uS^Xy6^$tdj!^AtAfZ360mjrzvaKqm|QBiWI@OGP@Hz$f;9jEx#bSg}*}T;02! z`mi8Cl%4wi9I5b7b}IbW+^CSrP7Tp0V5{nh)Qz}*OpqhE?CHxnlH!ZmN%76xNRbeK z2!X!z7>WC*1?C}f|EtuXCyM*0vSa=`74tt{ald+_uUP})el324@y9*0k?-z1D&W$-OI&H@i@*kdXG2ktyaTNJj6Ba^)1K}v;Zvr*MM+cIf z)?Y(e8LgNGqnR(}5c(5dy$A6O0X^F>?U%KLPZSDM`EI!|# zs>yu$DPMsl*f)IGA3aHN*k806b&c*>C-LQ{XXDd~e)vP47H;|JhFR0aGw#`H0D1*5 zY>f^XR&;`&Ewh?{Ts^EY-9&4{QVOtZYo~FbRBM|roov)$S2hkl`OLm$q%Jxl$+M6{ zlYpYesnD(>y~@w)y=4)sA|;&+E*xDQ0Eb~CmXI!k1a$q4SU)P>!9ni$UEpQ^DC)mWCdv}+<@aXev zSmCF8gVlPiS~olQbo>Qgu=4?4@JK%SA-eKzZEfDFiaAqi*W4n7Ksf=)Tko`+%|^>D zI&-C#`?_|+g`=j9qMUpHOWk7AR>cdyFn#oC)s?+snAo>seaCBM?}!i)@pmVQ#)TI1 zUIvZLaWU@~pg6ji_i=a)o*kbPw%jQ28tc9wzcEZhsCJEMEc67Co~2Pd<)f zVg(y=qzme*Iuwy?(Z6V2NKX6;NRgwQ*aV%Ya$*dggq)z_B47bz;n^rC{~>p@nqV-+V@{UKp7 zz$&29g8dTWViI7>Y^wTsy*n3yxL_UaNnTv#cgemLACH$=!BsTvL#)6M%?k;P%b>YA z3JeE|qXOeFJPCop7>G-ZAop>R!NEi00&(ogxL^gKaeMO84|3VT z@dMfMAVS%T?BE4}?BKNH+52 z{IP<>JGYCyd1{GCmtw4sYzIgiImD(OKhJ^~>PsP!{*CcU7RTrJe%^(>7cvqQDwq7D z3B4RI#&`i8UeS91QeBLpEniDAT1zs?Zq`4)oBNy{X(ayvWRIm`yiy@%8WA@D6?l7+eQ1%*ZLvbe<$~2 z1PCqd;O*vqj6f-Y;Ut}kj)0Ta@>x00$j9I zcWUIy8@#M?wq-g_2Ua$C18&1D)jC%%@kV$WvjRWc$kBb?Xt~{L!Brkb*6vAfC4WQa zdM3Rg$8=pdlGy2ZYr$S?yVaUAG1F?)U9(<+Ns8CtB&Op}3VDN#w%csGok{EbNpE=8 ztebEXPovd=AFxrubllQh6Mn3q6&9hE{qS>y{cN{t@N1RZC>N(o<^A{-DjvYgM&>)- zx|v49t;1Z9^zrIGZ5AyQ^b=z zisS%gXgt)>`kctw<^dDnTk4HiC77#XKL@Gx` zW~>tBu@J4C5q76LvDe8wnW^WDl z0eH=^0HPZ7spGAxmFlzY(yR%H!%1k~QnTLi*0;7f4;xO6QJF<_qhEbwBj zI#+c&S1tL`GXvge(`*(28914yUZ(7bZ>Hfsh$4;aB6+>u%{#(W=f`HTWNx zxWCpw{$EMvd5dhK_fDAq74yEuTBBTI;GSBx;N*!iP@fJuz?pyusrR>=P{k;;&aJvY z0V)iR0t+?DRk+?uNQZSOFP!#tAYFA1Ik?s+(IMGSL=!O1+_YJNaXb%AuuND1a@5;U zhE)5DCfw3dE0!u1l(s;oJH547G7{Y}Yco`~9rc!(^#dJHd)^S0DKLnEAFK5Wh;`sT zx731V5QKHsLZg7WToAHQ2F#D64ENS4Z|iXG26+vo&Gd{PP3+^CbQ$!!|_Q!arYM0e`-Ye|D{cKWE{en?~W!t@sD8&bIMtZF0>VxjoRv zi&|{F$c3EYM-KY4@i;0QkE^nAF5AYrZX0K-$XuI^VQ3q})Ha5dYz#XQ>)b{cyX~!# zd5?g!s$2yQMl=B+`Ud3;Pe)Og-_Ue0jDc6@rW-Y%ok`LY0x$j4!%B(6yjGHFol-ui zjFyW!YD2Ir_60OGNWpTWjWVv|ttdBYHOf_>3722W-robHeskwlFqoUA7KjC43J2Ji zR_F^u`L%UAsKt2)Bm#fyD{X6lUH9d?3GDYC@6uNQ!?bWH7?e?stq_W7*Ua%~dt@sf zodqfy&cR~ht1`jX;($4O&88(woN2w8eGR0$64L2RUT=UY;y$mR?5y?rubjO6I#iC- w{<2;Ik_8v5T-}G}@fEZ@Z-tKx8H6jU^>VFU!9hQZqI;x*DvODB8X27U|0&jZQ~&?~ literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.types.doctree b/.doctrees/apiref/dff.script.core.types.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e46b17baf9e1ce355d8e64793895aa1de2744f81 GIT binary patch literal 50386 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.extras.conditions.doctree b/.doctrees/apiref/dff.script.extras.conditions.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c7990f29429bfa3f383e01b803ab25ee0fca64fe GIT binary patch literal 3516 zcmbtX--{%*7M|Ie?w+0>Jv+PZBDm{q^{Ok{-9Gpr3cd((b=a1Bx%hI?kgiH~!lWv- zNouF(LC^=mfjkJtKg2)DKSJb!h+isI)jhK~EZERcIdyV!ethT4sc(8e{d}}l|J<=D zxhPgsnx=(HnelEfRY{ez!ulWmTi^Px{UbNj^xUXQC(OGoXe3<7RI|c=>D?%(TOrM~ z**`EWu|gHycHZNCKKRl<;zQT7!b-OB%KbCVvZ+b5DD9N3tfpp~s3H}?gc+AKIipMF z!+vbv{V!Co`#E=g=cE7qlEPc-`H35nED`b|`Gw<|@#{JdIFw@XKmq-?c;g$R?swB!cxOp7}0kKArag$5Av+VKy^HzmQl*P`0wMlIf-TTg?- zA0fWR;TRvV*SAzJ*}5y*G_L)9Os@xz7!6ML-v^_gqxe7k&EjX-EcVJQ_R4JCD>Fhw zAuJ)&^5O%4+#pxQa;&nOQ-gABx6xJ$)fWPBj0R0q3(!f2W)M}}ji5$?g%2Mf1 zx7>cK!%{4(P}prZN-7-~hID*#*h(U=xIM$HMLj^UCmmyEx^B1ByZ#qcRzP+~xqVgH zva){8kLPZ?pEGI25;>2b{LzHuO zs9CABC6Ya5NZ&2D&#CN|J$J%ZfGnc1m1&iFu9vb!wZw6wbE*qu4H}x!9Fif@pRf>= z|K5#6fgBN5Br1iLcf-nNllLb^;Q7JTmxO7pG~u*JB?EEvgR6=4?l@+8!%DBV;@!h* zZ?2i(xcs8gwFB+e2UlNQ+v#qH001<@kspbGygQP#SXQ{}knR-gTex1`UCk1uQz8u;1ME(J>ifL^?zYpt4M?Jny>^t*jzzk-H^;t)sNcOVZ&FS*-;EOs@+ngTdok zQX@Omel02ut5QW)dBD?cwknljpqcf~8X}1$PlXW?pT{H>hAw0Xr15gl_62(E5WyI9 zLfvFAdeo?qOvswr-Tm-{Lk!b(BeEh`1Bto=%ps^#Tmqjbp}7E?VhI#VkqhfT+xq3# zo*R{{BuEQGQzmuF4ufPt;eF^0_ae8pG#|`n5E~Gt<*Jw}y_|V>FKE^-K$BROqd*n~ z*@JxY`n&HTqa&Rq*USgW+WZ@>dGsm`h&^L^DwxgcGtmDtZgYvlhL$eSM5*Qebk98m zBy-YrXBPl5;6>&y-EDJGSh^xyEV;xV@ZFUvApg+h6n*xjLR%Z8>TbP`OCnW5o8&%B zIE6nbU~D(!xlST>pH(G}2=iP$q%|~f3H+!;6d6#^^1_|K6sB5S(-V1suT(TPV;HH< zJW!J_Sc(q5fD4@A2EBCm5@?+fmQx`KM$f>rwc97n@CdldEVA0A+hN7iFq*l&$R=oC zfDzLJrXN5r-pln^b^@mWE{lN_44#HT>}&Ad6=@vSAcnQ9Tl7N{Va|hm5QOph5f?n; zlz&yZVUXI35^jb`M_h7xS@BoGbB5XOE6fXz`M)c7v{}B|-ccd|g5VI&h?3B!tzL9| zQxf$sWun~qLdgyhwdxDkgq`;Aip61jYQ5>s75m^@Z3DsIyKbv_gKG{flBg6B(kYw|-v=01{xCO82;qwV9ZLVd zag69SSKPMS4Jbilemei;^Kj3^4=4V=<{RU5I~e>ed}$nXNva`zAc{m*X=tHk_{i8# O1N%2b8RnU4G5r&^$!ORB literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.extras.slots.doctree b/.doctrees/apiref/dff.script.extras.slots.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1b6c10157431ed527c0b95dd1772f50bfe8044b1 GIT binary patch literal 3466 zcmbtX&u=6(7EUJV?sR^1CId5CiJ7696)*_8n*#>~5|>2?h^7$;?PUd)yUNwJ;wl%m zYtlI&-~b|$Z)@o)U#zx9vZP}6gxDxEOzwxE%4Aydr?|CM*6pl*dU)8_oZ zu*3>gbjNv*_xa!}|CkS5&k8Hq#+G|I&9bRUv?%SAt*oYIYNWDeT+-x>E}0KUadP)d z?Bd|xANbKnulps1kJj@OHzZw9e8=^hSmth5ih}uhwV-aFTC2sPvdBS*c}Jus#5YJJ zH3mX__X?WFuf4P?*NX*Q)hr7-l^a;P3|pQb^OyJ`zt4C011D!(IdZZnfYCv3~0U+-?Q#_=!p@$;OE) zERtkmn(sX;Z?cI{-j1Qn`NNPf{xY(}UqNmDiT_ve|2qEPKnD1mb>x$%&fkJF130tg zdZI|#YNPlO7dKjR19+xIo$<$Rx1>U&{CVy8`{Ntp_wHfTnB1hm`*Z7QaPtF1)wmg> z0?zuD>Lpu)zfIoS%O~`D$cW6~QvY)>`WdSI)BjoREStran8lWu)h#h2L=?gjGA%FO z1E39(Q!K|SyD=9?{dOB;wP0Ng?zqWOSN<-hc596cx>?!%HKyCjZkP?tJc*u9qUV#^ z^GVyx>udhD@1MDLX9G|`_st0G8l1o7UIe2QM$*7Yq||DunTZYFv&vHGPq*BDtHV+( zt5C#kH%clU=!0}*ao9>CX}CSZtVIF9nI|0yX1Z>u)Vuz_sjPtAjz#;bvSnrcoFC8K zaLGUf)GF<1wFXjpLW4mB&4wnVb0 z4C%Y&_BoZ^vgc0N3K&H+wlb|!&-GHasFt{HbWU}FtU*IFnnN-~`V$s{@;|$gD3Bw< zibSQ*@@`n!Z1V2J2z=kax=EPUN)t|tR5DOQKe(D$?~Y@pH>~t(E8ac0wsXw{$9ooy zt{rHP-oLtW?WDUM0sznqM}8y%^6p5|Vp-u0L%LI}Z{fvsFKCu1osyK540Ko|f#2q? zk50@GBhn#K0F`B8<$2$YXk`^yi`*>%Y#pUlUXl)f$Z9PR;BsA184MoRk{a2e_G?jT zSd}WW$^)KmvsI}K1Fx)4)(}Z7c`A&E_&g@5Fmxe9AdQ!UwlC0QhX}@?6Y3^|(W6F< zWJ1>D?e2vyTw<868<7>k8VJ)JV6;G;;u82g3C#uA6ic8`idDF(*_uQytB|%yk znlhvpr-Iq6z61R~<2IMLY-s5MO_W;hPxssdKr$y?cXj~~ z14?B6(%m)}g{3RP#ga?>1HQXb1>_%^oTAUZsnFI2sd}Ma$0d;}p-plhB%Hz@6fm|M z@?0kor_ZVqSA-F*p1T?vxCDMwB8m(sXnEmIU0GGv#2?kHYl=Ut6?us-{Vi3bx)-C#>i7>=LJ_y42{g?}$amv50+%QP( zMF}^jF2dI zzEHA5M6LSbHDRYcykc?K-dZ2JbHzURR@*@Ecdy%OcJR!BMG{qoPWSF0QBoq+hyl;Y z;9rgW7i8i`{{{L1!!tSyF{5jm(8XQ?=6W#p_0=p&P;+U20nLXLs+p z4?ji`bimd)R(|~G`7_+3u`pvicjK;~(kc87b3f*j|C#3u2jO-9FO>d#?gY_mUbk(x z8vufy{AB*oXW@y7KZE#xn%@qm+ri);;TOa~m!BHV2ck%1m4@zFh93|6X(0ZFBf}_D HEvA0~bpupF literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.labels.std_labels.doctree b/.doctrees/apiref/dff.script.labels.std_labels.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d9217287344eb9cc340cb29a79074481fcd327b0 GIT binary patch literal 63136 zcmeHw3zQsJd8S@7ni*;Iw2X}{tHvWaEoU@i#f}NWb`&5sw&by~MIy(To|^9JsVen! zwYsV`Gk}d_g4fEa7$nM?X;Gs&3e7% z)h)jlj?}$cchPDEy@z`Tf3bIWuM&=S%q8FJc4}5HTn8y?w$rS4tXA)?Ud3J)4mqv5 zwHzh4hwNc{^Ig4g%nX8#Gv5uMSS)6vQ}-cDxVhFeeIIVZ@1d5tNPmsgyKQkXZ`MwA ztOiXFjp;ZfRVCciHl0o{+`s76yG`pAM!nIP_G=xd9ZWaPd8_G9`$4@*fA+#jn(UA^ zl|4Kg^vrI!IWQNn1wDH-9B!M?!Jubv3`eUGB5*a#fS3(8HJz5#o9)hr+b}`kK-~<( z;lS)HSOP%~iMZ2oYNP2bRT~{>vF>i8F+=g0p`gqNe5TtgN1*9Gpxat7 zyoMf3d;hWZ_JqCBzSQ2>owpB!n|-SmI9{ty@)dYE6gWZCk{*S_$BBG;s2h-A(+O)C z5sL1=tw*#Cs(1xfVNcH5`vF}u6*NTX<&gYpn*5wXY6C%N6tu`(=$LI=0^;QI`gQA$ z0Q5DlZE3WYRvCKn@yjV+wI^$#ODFl>2sV%B8H*l3glIIa zWy5UMjrt1o%&B3C~J6EEOhLGCQr_*>DuJnOfRjc(J|` z=+F^j|9i7AuRs;lQic~w*;MuKVP|i%C+%Zkfi^;?!6?{APu>Kh=wHXhz{Z8JzO%A! zT3YLST#^d0!XTNOsncK&g^!-F9UlfJPSm8Gpjp0Qg4uxaX?E&{Z^3wO7<78VDM%W6 zR6mogA~TACZ3bg#Vz_mgUja*Z#%g+PutaDZ>M)lwqbHjI17}Wd3XX<{3%9c;(7Inn z%f3D8{Gmd9p;qJ$p4)ziTMi0?RNt@3^{I1X#jfWv8V}|&8un>2KIhLHS{nbe|MKt*o85_bBS!Ae$!%PhJB^LMGqI)Ly z;m}N71^J1C#0JKO@ItVd;3iekcEUtfv+C9Pl`3&F@9u>!Nqh?a-`(H=+7%x#8H<#H zc-5)nG29H(WaK6f`!Jrs{|XOxtTs%Lm4ikFCSNufC86}q0|#Nc&^@1~1@@TN44p>M zSf{DW2Gi>%SWDF8xsWs-C*E!Nr0P51Y6snp;vw!~ZEbfPuj2$O*Uo}#b1<5+M@dcs z9bcM&m4QhPJ4iiW?^TAMNj;aryzY{kuBbj|syI7oinS75i3= z6aX$kZLmiBe+#9z{|VQGumIl8b`iiqpFZPQOEp+n^uq1@XVq-gY(*$^halaS$)4eX zDz#cZy058gS#VRq#Nx{NnaJ<8Pa{M>Lm^@Vm0BnXtWTSW7wk@eC4fB(vFRzcaThtUw|2e zzzcAH7Door^sPkG!IufZ*h@-I@vI2v>*Nhk#cdW?Sa7+-vd*x<^=iWM31?X&Fi%-N zb-Hjz=E&UitLQ3gZfcCUFZAv`I32W|wuL$|eJlF`i&9u+NnQ>g=EgPPUYWslbGU{C z2as3UVXZOcOl0~ou8BN;>e`Kg?}qDKs6U{qRI*YujRoh7)spikRC*&_BS%l52`w+6 zS*MIS-u`K`28M!e8dZ7XIRjFYl`1Sh*@zU5;$`^&m5hvqf|fQjBnR<43E>ELYCIx8 z(Dg7s?w1@5H#6BtrJs(Ku5$-bl&VJKV1_lMy9lM|tb#P0WRK8&6Xa8zLQ;jgN<1sA z6740b_bam`jSp^-({O6N2f$5?I){ydwca^7odQ-UPZ)?t!wpkok{~o z{Sg!^75WI*R;jXI$H$URm6Q6zq$g@#d4^4s`nw=sIjMt~_as^pz7%jD#Ga8|MgjB? zF*8#4HCSJ)vqo{0AH&KR%6#}s)%*!Q&WUpB{*3!aP)eDx_2-aJL77ycjxBiyMvN^$ zd5G9wEvgr$+GYs?4bl@5(#a+~4)<3C+(RUXRMA%lg7ue5V*QQPU_GwPTw2WcWz1?4 zAR6Qg>G=8$S{>hrk5{eZ&z8h}9BN-n9XF=O^sayo@B`s?LSTq>yX0+!`!c);s{BX8 zz1(~!IvY~`2eguq?J|0_lbBkXjLu8+TEx;Lu1=Eo8{?sH`h`tB*%HsQ!3opefpDzh zSWTeU)I}usK7sWi&n2kDBbJr;y3(3y>{h-q^*L(tEzyY^3qf=Ph3M7zKk7*1yd8C5 z-m9!5MykZ~(p(GuQ7a3;pf}<%y(PmSeT3PD!+@xf!SstT5S&4M-2vtn#=?^JngZ ze3BK~L~2kc+GHmdCfe<>j>paaW*DRb*>!hHebykmQ}P&z&h_E>n*vWZ*Nb8D&U|1J zUMYP|@Q#vbzE4Gyt%Y;Kne4YHAg;elhvCt1{XzZnA>)~QA2#%9_G(ABCa=36de3)j z2R}!ALMvHW*QGh4PtT5q7pB`Fp+@n1SyRS@dq;-KV55E>yD;IRRqoDfi*#Q}lm0YG z>b?s8$B|`Iiu)SrUbuxW%?%il(GHw)Pjv0uSaPb@6UUKFB;UkL(L~~&lP=Aah^ntf3Bg~Zjpv@NxFO7u!<3yvrMfT` z`ycFYD)Q&M`9MCoR+Kk<=v?8SM4u@G^?xEblBlL1>Yi5Ibue6_6uI2rdm~7a!pGdL zP+$_1rE)D=*65x3x~AiGWl}|~3F%gf>ld&^ z?lJ*I)kt}Q#I){DLmN0VBx$6(giR+p;J#AoFPkn?BOzBo{kW%~O3BejmxHoDQoG^= zkUIyNC>_@z<013oq~Qxo^Ny#`y54 zL^MwX6iz0P6m2JHq6x{l>ho1}6kBuhQFxkSZQqXPv{PN$D1pp-HrYbK6zHhm;UR%{z43DsQmkp}50 zV#TmgN9GuPBn{`-ybw2OHwfhWn4}vA0{hRFg#Gr_z@8Z?=_W~HGRLebZ5wE0Qb_wx z2^k2lT&!sp2OUxZkS1HQ(4gukK%UN+F^8#5jW+el`m*Cz2ut8;>c zPQ;N&UxCoAok>~W{|Zez^^33T+j^^HZx70p60_R!Ez!!~D+D0h9Q<9(G|ByVz*4_I z_v6k4$=^5FCt5dK@w(kV$x3-m;Xu+Juc!&J*=*j6Q|Mq?1XXi`AmKD3MF6 zCzJk$^gzuj51usd=4+5o@@{gFNn+YfC6k!h9|8YSAgho`8f3G{r0)wn`^cmp<^wZh zeek`KXl@!(&@8q-NVek&hzgn1hhdCNN_gH!CMBfFO(wZG`{g2ba|{|Qbs1dmn6-eEfnI2*&5}Zm@jTFgd>|T zZo*9Y=Zk^xNp-A~nazlM5&dXr`;pUZ&O;$(mMd+@w_39q^$EQP{yHB0x*2|*b!W-nTgcyA$=}zKzqgUUx8q-gae(Yk;6WG+Y_tuK{ozHHW`B4A zl`Qs$Cydyi=!O_~9|fG#?XaHxc`V9%?(BF)U8Fnz_H)esJQYDwjQ#l(6hT#`pM(htC9uoV*fr7c`4^5w?2q78=+_}$ zc<=n|2dT>@U0UZBWpAdjDC)FDZ^($bPU@zwv5%;6qKTKjHD5zus25_pX9XV zS)Ji{cmc6De6aQysepn_U~e??F2Ua1ju4~Z@@+^=h z^D5*kE%OZa<~a6@vNsXXee8_}>q7h2OIR60nY(ck$}9LdC(7yUO&3ZjGqT?!BZwCVVZIU0LrlhP_fa0A= zUjg6>9$x{H^mT$Y4OU2N%f38Y2m`j8_Ai)ek}o&_ju#F4a^7a$G!$0}#=h);ObP4@ z-j=5{$tx|wzErRnHgR%_Mlw>D$7)esjL0R`voDvC9;jL6&Zc=MS3y2$-ps+ih-ovG zePP1@-$D_{D(s5}*=+XZxWKcIeVNS%W`?hKQ%N*Ws%RGT?~_fj0;0mc^kEodUlN}8 zu`dZ}a8+Wtm~4kkGC-|`x4KWW%?)F@eGy0MltpUjcbHKSSK@^5mO;n@*mOmBd6K?Lnx%oa^ue+-)hZf)F<>F zkbPlh6W`|fFzcMIZPe+Qa6gpM2TAi#jD<8$tM{CJ;jT_0_J!};39Tx{zWiV45oKS# zkG}}}LVi6@?90`#0m4I@3lT6CDVUFh_sJh+o|Z~2%fY-+34P z$IvFEnh=JKrCa8zWoGUx21 z27?r3n?THHL|%fJc|XF$T=)cH=HKDtoRmTOcQ@WkdZMa~Y~s_z{vRP%wIw&Wd_&hA)kVBHZdaxS8Pip3DsQ0 zj0Wjd5i{Qw$oCO5-x&z(-zo|FKd%P%Y+@!!647flnz>Kf_SDFvkoNB$)oTA9e7tJy z-wCCZ(f)mqZ!NXI2saZ4e2w?(eo_m(Y@pG}W!wz5F&8%z?@an?fNqmax{}Iv+0a~b zZsztv7_hyzTQSolUwi-@FB)#fE(8bTX6leBft$hG^0=0K(<0o=o3R)+cP4N%_rz*Z zy^P2))pIj%Bt1~G%KD$?pgaKiB;%2Tn-Mc-DmTN10n!QrS%sU?Ae+t2{I~J-i+ZJctWd6aWluD^OT!8j=u;uLw-F^+{_JCIA4+;bBX5(k?*=y zecNf^N7xFHH80naHM(lbvNub*LMydkdCF+BLnh#td=}6YoHhvO{o(1PaQdaWaP5gs z*P1eFD>XQj&V&!=uE@79hoj~EDdY0XPr)&D3qC(cNPM5|VqHTxSENrQ?1aUJ64y@E zN79o=W|TL4&$&V#>9L8kNq4N7*w~)0_)y$NsEXWlm9N7^w_)xjzlCVt9Kl#NX-jn$%x4QBw}u}$PcbmvF;M(Vi@%vgXbrHwjVxUs+t(XPJ0jMqb^!3JhvGiYGO z2SG?KUh=?*qvI`- zk9?AkUBjW{c+wqr=M1v}$7mXStwqw2d!FKBp&N~PzN|6 zM%rVjc^zw-4Xo624}XZ|riR%3ORU!TQd>R-J3ZFo`=m>1UU}e17E%eZ8Q!Yw$>rI6 zNBc%YZ1!a!5gj4(1ZE-U-MbO?%IPM3&>s!^w%rrbY>z9CuqpA>=@S~?68vfgggCQ& z1v@g~K24Ike+&OpziKTVobh9kjji0uHh^S(=T8$AUaX)w1;&$0&d19@bh5gp3m;p~ zRR2oIl%V=}TP{neJ{!U7!X5l5Cu^~7o4(^q!#os6JMsqeK1&Urja8y=@NrB%;oe9Z zoSszHW_r}b7CfDNxec3W4xI8UHk`><%}H|j2oG#H_S{>cY&V2h#|PlZL8jKI4YxtP z5m1Vr_TiMErwM6xFg@i`oR(0DC(l;YD>5J{sHiWXFF4+hI+03W$o5WB`TGc5;L2=J zjswHna#=#4BP6?rfTIe;?!%`VYt0OU2D_VLtD0g$AQgalHzTIA)f0Cj`4ii7WXX~DpSznzER!EG%E9+ z*CfsXobl-d_~By81<@58S&-q)D4SI`=2wivQ)3>S-q2Zcd^pL0WUE`iD49NcK5e|( zYM9+-0H-{7q{u{XBff>o%vt=l@U3=^tEMyEGD&8595N+%9(X&&4DXPRhd_k-zMgvk z^HSTp2@^=O>W{^WRht;u-3(JPN!qODm6b8g@E(SIlHo08Dri>#Il^x5H|e-g(S&V zlkX$A_qo=1yR1$BQ_P!e)1QbHtJ>wfHvMtZW;L&DoYHLilaOz)HhnAD^aw%4ruPAu zVAB)QB--?NI@R!GjPJkKLN3E5+4OjgpdU96bfieuD_)n{yFGJ!@JNFyni7C{rXx#w zC>8y~0rh=|jAE%^eVeyLZN4IE=_qgM6;d%)EM6*t&(#t(j+Bpqnv>T3&0fpG$}m??`B zh|cc|&p**^H?2G2jQ1%xN)GW77@V?g39Xo7uM@cwkC&EtU^kwij_m*fcYOnetCFZ$AM`s{p4O z@FvXwDPy3aU~|iB7!{aumS_k$+ddG{)(5BY*stj2S6Go*%T}!$z%Cih#vk$g@oOHo zeb6vFR>GmE7ik(M+1ra_7^%MMzBz3lB42Q?Hknl2{#bRYc~9}(<81`r{iW&fNwvi@ zs+~K`Iu}PaejOnlb$6zqh@>W6Js<$K#l$YOKHllNGi#1yj)XP8{ePeeZ<)dY;}p`H6dUq(ga6Z|G}A(ZAn>FX*HzD%2tZhYid27Z-*BE5~W# ztc;<|&446QA0OvLIsG$m9+XmMVBHP*6qK_+11APnZ1XD#)m)!}(;&U7&%iw*knj5p z+^-J=_J>Qt{;t))p8XlPBuQM#&*x$OL&EeZX{AOag_Qp>A%dh6dj4b}Quw2iQuy=L zNFj&vD<*~68h>6QZzgm28+1`7$g!^oM0EijUmXatUn+_0H&%nJ8UdH2%SAq~7uRHU zXL4VLyT+Hqd$nGjG;p5P;x12oxVB)Stk^~}+h-kp6z@#>!U{?!M;}S>UBsHU<}ae{ z-Km?>;utVC;H8);TFU?&2`{3#Uj&An)5P@El#2c}oFzWv8WsK-xjQL6O#*JOZ+gHa zL}`FY2s$Rv3K-8dZM@F6d_yaE!)b`zxCj83-f3C&#K0_J05$HwPZh$B1!7$VnG%9) z@wV(*NS3F_I}XRO80Nrm5G9SDjn$&MdXbx`XXI}pJy5gCijw9fo`igo|B{1|7w${y zI}U8j;5!ZiS%r|-Ae&8vwgsMjRA?t3m>Hyet0bClR?*Bu$_qG?CqxBAg$C`zF!qi^ z!t=g&91_w@<`~nG_Qp$Ck*&Fywq&RUyt}= ztXS3VMkYJM%6yizStv9!Af)cL+xT78>y$I>1cQ2R8owEC82 zD9_6V)IKGaHr}G_+2Qew0pB+}Xp7{rv_GDsR2JNXYlNIJ5icQ02O3N37Lo#6)+}JA zjAf1V*?@t31@;%QPUf&jUrZJIx^LC?BeMQ_hy5*3NSO`CUx9p*@h|1DM|}c?BT=-> zVIPNS;7zP^y0&4qunxFy0mXcN-ymK>Aw4Fbw@7n5_DzPG6{IhR7doWi?GUxiM1tQJ*x zx|p0->gy^YJlcdJ!qcZ!V{(Ljmg1g z(3qSyh|k4K9+NZ1ZJzWwKMoX3^PhpFXyHK<@o2@^2Db42PM&@72IX*s5@<(>1dDd! zuOXZC*Uh~!qjJu~#<#TbUNkD_UM!0G@(Bkt-WRJV?mOiBdfYuwiq2n_2A>j@6GA@8 zm(R12gF`1fD(BqvWnd(uU=zY}H1aMHmh)c3h%MhZ`y}mHzaJmx3>ZoOV&J<;PgH%$ zvw8O)AYW;jXN2WEian!YIT6qbhhAYKkh?F9twNCre~Fbbl)2fFQ2r!7&WUn*Sk7NS zDP>01XCa@0a&}mb7+EnQCJEJCVL2MDUR7Amw*>NiVL9I(2<-n*680ag2KMZ*oFqv^ zr!#6MNJ%XB&Kd;4Ip80Tn!QyhFStu(mC*GO##TDIqoOC7l zd}i}td2k)<3&xfQ*<09Sx0)Su(E{=``l!BqOYAgt3t_-EusfJ(lCS$=>&XLZ*bc9K0=CSILDb5|{HHEQWb732`~^i`Am~dO5fGe~0uy%_|X2<1xLg3jKm-A#kFf$nQ|5_5wr&KhHEwqx|K?Ou5 zE~gK}SX@rR^S-#8gfs=?a^fYd@$~RLt$byTm!^k!8}r8H#Pem%78CB-48_4lvACT3 zNz#9f%b~~TNv`undsM5NZqyJ>X2D+qnG!5G-cGULnQ=KYn3tOEcwElmSg~poBa@wB zWe$-xt9fM&PP5ssfP9k8E@ovCokNVvi4auca{2&Fh|5VxlNgs1Pp6uSjL?cZw2;fN zNdrG#RJUtEs9&AH=p?jBJ4G;ullmS!l=+XvJ>B`zo4qU_n> zJZOe)o!vJ(Xp7`=Id9D|=dkDqTqER+j_~O8^s0n~&TFK5;THPQAp^de7JZjMxhIx2 z|GAJ9*s|thm?>jfBbb?RAaOZg#5$S79>uVTetb#WkI4G#<8nR^h3Ir4&G`RM$R`>9 zQVx66Cr~&Nm%|)(jLZ29>zuA_m<{7{K9$i2)Muu7D8@pXr&oOzm%~@&h2nBJ%O|v| zR9wyl=kvIn3-K3;%OSs37nhUX?{L`nx}BQU3s0{ygv6`)GqkK3v+ck+EHm2ZoQ@y# z!t=-rH%;;dWq3>8Tj*H6-@Ch435NnNFq^$&>%uXf#;U_*7u95axUJUhbnx(G*816S zE5Fl(S8#f>;fQYqc!ady3wPE%_~Mt-gfH}TyjEbf>b-FI=gel;66e^2!(KONcZ1%n z{qosxbirz2G`iP;l1AaHm6jivi*2~rLMw!$uv(|!a*SPeJ59J654>6xw{r0*R6GPN z?5y;{T@B9*-~}N|dU$MoIPP1upw(ThF2h@yi#@or4L;K7w5v655l@Epp~#Eq9rm$k zzq;fEcD07g4m2KWWEr9xTRT?U>%dW6))@=n+YpY~W;41R3U^w|4xkp8LD%PrhQgt` zHQ!x;^0q+?Rtr#r6mXWnBHS4T_-ht+s`mgMxC$6mtyayeL#kdl+6@|qe(I3#!0(II zhgGZ7@j6u-j+|>+9Y7qLS_7ePr$|es43ScL;ojJjSP|~^Febunv|P~!p8I0;K`e8) z1N-0uP&Po+gg*7c@ut~Y=$Z=_AYO;-4OXic?(SG{vRA!Yx7wg7P>n;79)>T@HK3b- zh*Jk$g;%}c@aExgo7oM#s<;(ya6rAr>)pk6HBvzUmfUba`#LSNiK5$1?hxfh@rzq+ z-|E)A>hdD0)DAe!$nz~Y7hU8eT2c$DXB>D}ji~7MYTfb8`6hORwQ@5b8t#5XZ7cN0 zhw(s$8k9TEQdS#I6Z&^oFFYTAK|Q|J!582_JXl~Iq`swNE=8B1r8{wmf%3E#Ko^_N zA{@1J)4H#JcPQM}w%S!ZfeD6Yji9y_@65xY6jdA{;RSXOwEZJ9GjQ9VZm$G3ylLlk z7G`?k9!yD^04b|*k{rk=0GW)y{X++?xC%hs)@jsY#p4}O{AIj&{LU=u?J27>?N~vB z)B#pt#ts&nP}yi;&cjfu2X^n+NVpdibFmtY(WnDezl~~gHr(N_v;uRvYC8*d6aIk` zZ)$p||6Bb<6Gq$VE(~rTpxRBY>1DO))l3HN-kJ^Dv^9_+9dv**0TFVa>b9YZZP2>F z2|xnW7@P$a@@h`20gAw_!!EQJes?~W&RIkahIbk1klaK}6DZE&yj6#ByaG+IEjaS( zY`CWesZLd`Mbl|k&3YZJEot^nEE$FFTg?WwZD+%cR_jb}wmTn=P@4jS81xaoMh(Ut zw2vO7MO0@eGzyd}03!=!z*~@L!^2(5-4<+8liN^QBf1#Iaa70q_9b`q?274!oADvL z_fh*JemIIZ&=VxdK6=)-cfbr`f5g7pz6Ab#+J4%d+X$1Tg@68F2>v{Ve?~^&&p7_U z13z6n5Y)wQ^|<&g9~UEpT#O*Hmz&r^ysOELiPQW=&H4jc~ zBr=702x3R*{f7bQxAks=q0}}zFepJJJ}3{ZFfv8*ZTkRBN-I8$M}Aj2`YnFKBfCBt z-uN02R|gf*plV`Vy6DxrP3w@(C%BY*DWM2uR8=Z(_>(STz04*=v65&Gz!WKA?r`fIJz*|7` TIR?k?c=QD}@F7UN*Yy7bv&y=` literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.responses.std_responses.doctree b/.doctrees/apiref/dff.script.responses.std_responses.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b89060e6da4c084633fc081df4b42992ae8a143e GIT binary patch literal 8120 zcmds6TaO$^72ezI?(Ai}>)0U?iPN!@Fbm!pBqAUV2#1IWaI!&B6bS{ZUDI7N)iXWa zov!M=JOl+r0UQ+)!p#ehT*L#)1L6h#1mYKf;4NeQ*K zbG~z_Q}48X`N0!&=AXVG6A?s*J?8sS>~opxRX_H!DUVcsFW>o5{&wEg?UWtJI7>aA z>p4((A_)DINBQl%E9P`7hshnkcMX?d>CKqkJoG=_#-ye`J$%G@G5!dv+ zzKEy1pJq|S)BZu6PWpbp!g%Bk!}!1*rr7amy~APO%Bo*Ur+-XVz2xWy4j>`#XynAh z^N3eGb!%QcDHg?5v6v0S(|Sd6PX%#wA0oOKY^gwnyfLKPua$bs2{xcvdYvDVz?wtv zmrbj^=qZJq!UNs5&q-o z;XZsv1Z`GO8D^0&ON$wgMFg2r;csPuHwll{EVaQvrF$0n&V=*Cpy8Nm$?L#TREm7S zc2&#$2cKTuU}%F<(DV!POP zCI21cK4@0k%rYV@a~7D$a=8}@DmSZU4T@i!42rH^#U^$QOJqdYl=mPK5Yk=Z^1E8y;xYllEA0~N5N{4*1NF#H-j4z~jFlCkm_@?P+WzTfLztsn{MqGPD@h&6B zgX|s#gPfntCLWC8;qv3wvTV1U>#OHjRJY6>0e(cU4zn;c)+fN;Rk24pP%;-Eiu}jO z5lvTNsfCZ&F;@6Ke6CRkcK;JXkb(M!0VBegqMW|QV(EnH82kQ9WyCx{VwNDEGTD}5 z6E00GBm_`aRk5G9#fqp+EBxUon&0*w$14n%-#EY1`NKw8aoQV_&bL~on` zX`C}m3!JZCKvS&e?sJtE-p?*cAQ>$PFPL*E+vELi9|V}?Hg zM%7G%%zCC?`(Ei~0b%R&nq8Gt$6NDrbLST9xI@%Wj@RkO!hQ~LuXZtr{iFMK*~llq zRb#mOG7$IXD_lx8;!XqDBb`RkOo7;Qj2Cl%y`P{hk zLv@tUu}C0y%FF3WakR#y@i%AztIH)KZmj*{%-Y8AY-7wPAzTT9q+t&+Jn8)BJN$@puSQYN7LtjoNTR) zTw|tEMybimz?cJZoTdaq<`t5k^^e)$RF>nmC0#xT*Cj)0!$nz=I+eNjs7yx6gr5`PnJEcj<OWxpUiI z3RkT!DTFZ@nqrlU!q*6)&=#y)DpoAaZ_Vkol7{-SM)N3d3$y2Hq%pY&jU0 zNGlhV)wipU~=R#*DsFpgCeE8ZBqHLo|RSQ}+i_mFCPIeI!&{Y_ji zp3*CT1k2Cb9v*Vj<5DruEsOYAv6xU)_4o8f%9A)%ZpimJ#J8Z=1PiNXOK`@4 z(B)|wr*4scL*lemTut-^E9nN8mf@1?$7e=nSd2d+L+e<+^&ZOEj~ySFnXI?y48WQc z5K(9<2b&>_Mi~McBu-bv1-z^1hfpGoQ{VMD3@k)1xPBnnAf$s7yId(vWBgZ=+6K;pdNFD{s2PLrW_I$AsVQM7}8tFI^LkFCQ!OfCI;|CBVaKMrbuAEJNM6zTe_3*q%N+}iID3h06h*s z7NQ>!N+t3}zmIN-2M;CUs28WBey%SQrP%@~UB!{s!t5w95OCjafdP7ceA$H%&VB8X-ddReG(+y*f6~cYo6S#VK(7rV~$k_-H zvnN@CC_ryl=6R-Y26q9W*rTd{?Hw+Xzd#vshAx;Ag2R|ulce{sNeIP+!|A4qy!_=^Ud0Gv9sGzFXXGVvz3#-P)WUA+SHF$q0_DhP;#gHX zSM9Cj9B;W-9lVer;GxJ;R@!?-wu(gX`wMe(@{H$0$}Qgj-D$a{ZWU2(UN4!n+a literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.stats.cli.doctree b/.doctrees/apiref/dff.stats.cli.doctree new file mode 100644 index 0000000000000000000000000000000000000000..57a4ef330e538f94f2bb3c72b616b81399c3e768 GIT binary patch literal 21198 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.stats.default_extractors.doctree b/.doctrees/apiref/dff.stats.default_extractors.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7fabb21643b6737632211dfa6a1161856aab8522 GIT binary patch literal 20153 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 R#ijUQTEH4M19#0;{vQWpS8D(O literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.stats.utils.doctree b/.doctrees/apiref/dff.stats.utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..47b4471df9f451e29de757d9d1312224193eaa38 GIT binary patch literal 42339 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 U;>zQ==)KAFn?W^UmO}ae1N+4JC;$Ke literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.utils.db_benchmark.benchmark.doctree b/.doctrees/apiref/dff.utils.db_benchmark.benchmark.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6f6db401f66799eb660b5573483730aad8131aca GIT binary patch literal 116313 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

c7yB5mB)F;ExXLk=u11hna}x?0R#RdDtN9^9 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 bX!Aig==hmU*3%<1ZP?`dm5-DMFRlLp(8Ku` literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.utils.testing.cleanup_db.doctree b/.doctrees/apiref/dff.utils.testing.cleanup_db.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2a9a6b90198fcad4ef03e950d3f44a561ff53e0b GIT binary patch literal 26065 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.utils.testing.common.doctree b/.doctrees/apiref/dff.utils.testing.common.doctree new file mode 100644 index 0000000000000000000000000000000000000000..057836c440bce733825a160752f0e082bc89cb9b GIT binary patch literal 20774 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 H7}fs+!+!yh literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.utils.testing.response_comparers.doctree b/.doctrees/apiref/dff.utils.testing.response_comparers.doctree new file mode 100644 index 0000000000000000000000000000000000000000..975b4705611efdc456860cf7db9c66acee421cbb GIT binary patch literal 10354 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.utils.turn_caching.singleton_turn_caching.doctree b/.doctrees/apiref/dff.utils.turn_caching.singleton_turn_caching.doctree new file mode 100644 index 0000000000000000000000000000000000000000..48116b0125ce9e05b6f2cf1bf848f66e4d75da45 GIT binary patch literal 14926 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/index_db_benchmark.doctree b/.doctrees/apiref/index_db_benchmark.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a8b56f3deebc0a36003115699ebc47b2c9d418dd GIT binary patch literal 7738 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/index_messenger_interfaces.doctree b/.doctrees/apiref/index_messenger_interfaces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..33fb06f05c273594bd1c75c92c006b6a5771c9d6 GIT binary patch literal 13547 zcmd^G-H#+y6`$St?%kc;S$0u`jRo>C7`8_YF=QmDKvrR3+~7!71&ivc+kLC2x~id+#~F^Sh_JfA#$Iw_d$xLj98`L!aC3cGIvd*Rxm{%Q?$4qaJfb{9=6P7vjtD zlAI5Wt0i&DcoG3{=#;`W@=#8^m;?%`Lw*W&h1dce}=0Wk?_uU zn9Bk~FiU&<6YE;rc9<40KVTsyw%v}FEy57C=W5C1nq>#f6kgERLJ>r!hyoV#*{5PY zFQ?YoHm&%-IMbDwydh_N16vm{KOVLW*)W6%>{cY;I&#&dZG~`)oHZRI4AF@9)2`7= z-pyH&Ke%Wa=0?EUs?Yp(&shn5gIqkP{19xiIFhr%=+KCmH~95@QqJp{XJTB! zxz}UMLFB@%%UfQsv259f<8}15<8A5f04C~MJu_TRY%Lo;yxd;4U5jn&ST`clVS#SD zf(31?FKh;(h~<=HyDVOvidyjgY>2oZP&s7yG@qf!EaB#~u!X}4x8#|}GPBylx!EL= zixoE$=P$trck|o%B)?;g-?I@b;Ax{aT6*)$ro1UYGJ~InTOIBTJR8Fb>^3;=;p1u3>v+uv0y{hRxG?-34{}u;i zYgu1%R#9LPct1Gd6~2s3XWhKnu}?Gr-!$m z%No=X%M3iM40n9b0gyYI<9U8_*M0?aSO>Y&R0Kym##+jorF*up;RaeDjJuQ!u!*VG zGXvG8^F0ikw|l!EJE>5 zg0_6CSrGid+q7|P4Q*`DORX%$lNa<@0C%WWBUXXe%SS!niDVapX1_1e*tI+XPShN` z6(F&ijZcOYTwC0w^}R?Vcl*F`wizw*Eu3o_2lgBmP}D-KkopE%;vEG`0whp_!%f{0 zfq{N>jWg1O`z%c2V77`B%&{5_dQ;@M(8)UA$kw(3M zHRZk#$(|VZ1OpKbAGGotsnfqX-Q#0HtBC7rC}c-pauVDrjbB`gEC= zQg)t~Gok|m@pln79XBXHoU3H@ISkpdEy3f}2Avz91(AOSXN8{BKiOeceJm6Ve7b0W z4!@RX_4i!pWZ-S>d1D$`AM753z0ITcFhEE?FAS6qt@!;Fuhm_7x`wW``)Y39|MZi} z=}R~skNXVBbUXSs%7EfD4<5iYS!id$n1sfHeg1V-$}P$pYZe+0>VR)n*8xj%N-bU< z_4`z?_0PjQF)Nn`-$0nZR#!vF8MpxTRxEEGSrx^olBshK2Vl%!lC!v?qc4_|G`T#6 zYqsq>wrPv_E9&-^5xDUVg4$n6k~LmK?blyXnTGddP#8gnq1>u<3PEm%-*G64j@2XZ z>J=oq;?LtTK^kBVXiq@E@aCBRkL6MTa^+hfdF8vd@vNzFSZ@N>&tx#pK225Q{9{$@oRu+24ZG_Y7`{C? z2)>$4EkAldmJ{5*klE#bP5J&@iSLJ3RABr!sxh&|zdHum|G6$WIob1#>UT>o$%|Or(_k$2uQpl>KTgWv}f2V^+qE|A~p5 zgu3TwTVsFQaF}?g`z|bf%t+LScOO)AaU@~npI)lzDDSctC4KyWXDCrq_aO>AeX+PG zZ?0mee1QXo>RzY?%vdDVePBf7DtM}U5##njRb%Y$u+dfbe&wQ}3RATebG07TL|QEh zmZ~$m9~|NHl()L~CKFem!eNoR-lDH?GS2&-%sn8>h}`-1B+KBc!e5W9eemU@BiStb zR;K(JJ};Hh4tsIs>H%6W^W;ku^MohgUB#2>(h4m3y;`J<$CBR}5wa?ld>P~R!IC3) zcj!3s+sZ-197%1(6s<=xapccvM8c6TDueYO#qe>w`$95tHAl88IPw6$P|hgvt(a=S zfWIrbx87HWs$Bf-RRy;mH~V0~(G?@Hi25SAx?;?`?8SnkE5>~ISTmHF@b47+5fx)T zLxBt5ti{ZDT==&U!K>oJiKF}C!pe$qu)jmchHoer4YMJ&T^$>qhQm@e{L2WRXBFe0 zl8LL?@J;%D^06G<>901|{O?*BL;t^Se{gEtMxc6o*3GwI>0^A!&`pxyz)y|Jx;d38 zM2n)gooQv*M8vA*(toE@9jO)Xlqg zcj!)v3(7&mCk3??Q?wq*R5y2NL{c|Ds0`NEf>bwuIGMQmq)@;2&`EKP{m{Rd{6=?e z?QFpBmrLNOM*_gZA5D?-%vB+$9+YWOUf)UJXD8?$syoRk5?92lM=5PTh2Bq;>0h2L z=*pm~ayyBL!zlmwzK+os%cF~(_uQIuQw493|LXlDDKk{FlDnNO??Y+hTd^-ktJqXOwy@mP;eL<>yr_ zZy(W>N^Q`xr>sSoFxGY1Z|}6UF-e=F#K}7*8OGr`bzrxtMv8P>FaOQ zE0c3QW7}dr)HIL$3;*O)$MIT_Gt8QXuSBA2vH?NyU=BpN`%?@C3H}5xV}PRjBh|fx zive!snS9^pbFYT6k%>eL_X|oV+%Jen-wWJLCaj-{M+XyRhOz;<5|=N@GfK@@GC|Tp$g~%8 z*)^1GP<^=;lrB#gPK2;!$slK-u!J}*UgOJ17l+xH^F}(n+dJcf*)JCr`IMPq?07h33^G@&t*1-KeK;L+96v(Xs$NnC(MntMuR@ zjNO>DKv}1xjXLSR^i)|!bEN}P?KB(!QMeZf-GO)wjyozF+;H;CX}QR@ZTL$VA_}uk z({kEkt*8Tg3nZ~2EfefAqlcDxINoHm9f)uiY!}|qnQKC!=yo9CiA4MSz2`$4?{6Bu zsk0#P0zH-W!Pm4@6Uv;EiH{3brj?ago-5rcndlyyL`}7j*d44P8-3I8jnZIwiuMq~ zQ5-IEly3ZlW4N6Nv;dD=;D)16=*#OMnTMKCM@9l8n1=FtP0m1n*v2;D5!(VvL3!IT zpOFhhtoooy9<>3i6IRso^&EU~tZGoHNs{Kq_#a)Ga$CNisH)u5va@3MANZY$ik+s0@SA6KOX+qiuOTy~89S z3y5(L8?t60RD(df!GfmEL|e^)jCzZW}1bsNpn`MHsb8{p=pW*YS)bAL${3jToruwU~t@ z?qdm@K@Ybh&zk79p)=_1934-u5Xq`#FQ(5T0Ip6up|l-2$=uBtrGuPH2!#;`p29N@ z>WLEQ-$`Ys9>iG0q5v*|GaJA`DL~XMPY<;wk8q$F*4p_6i3RED546uxWAeWH8jh;& zAMn3W&Qo(zGhB|zPtx-g|zi+k7^wvUGaLKFBr@#O`Oyw$eK|-M}BF7m*ej!bg;h4uTDL;@Fyf zFl~Pke!3Drj!b~26*-kwG|7ZHjSMv(%bQjBj-|yK;L@STY#J6ZT}ldca7V4?zX8LK B@2~&> literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/index_pipeline.doctree b/.doctrees/apiref/index_pipeline.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c2ecbf5845891358de133aaf6342176bc0782441 GIT binary patch literal 23739 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 byjiI4m`W94E`1u+vI*%FC{W-|yY2r4Rn==& literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/index_script.doctree b/.doctrees/apiref/index_script.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6602b0db36803f3534e92da6f1a8bc720bb406a4 GIT binary patch literal 23538 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/index_stats.doctree b/.doctrees/apiref/index_stats.doctree new file mode 100644 index 0000000000000000000000000000000000000000..156316bce1f9f9975e4f7f12b3ee72744711de0d GIT binary patch literal 9238 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 NT?PttamUTte*x~Tra}M! literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/index_testing_utils.doctree b/.doctrees/apiref/index_testing_utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..02f0c352cf63be3569e74a79707faab299e07c9b GIT binary patch literal 10731 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 C;KqLd literal 0 HcmV?d00001 diff --git a/.doctrees/development.doctree b/.doctrees/development.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e9a385c639d79f3916aa8dc1f9d439c55def9899 GIT binary patch literal 6682 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 w7a|YCjn(~q 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�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 _gRj2CKySMJWuha22{C?cre)rx}Rp*>K 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

uazD+^nQt-~UBWWHW0BB7*Sm2=gTyuqj;F)7C8I z)9t-v#2x(C9v-%yYfJUg{xUeB3@4lZfZ+WTq!;<{uAJ8o15{WlD-i=0rQ3P^vqi)` zt-0r)a6Ad$2+n%lqkXj$FTK}_#T$z?-wFFQ(GM`$8_iO67?yR-(NYtn%h(w1+pyRI zluArw!ep0o*Dian>~Z21S3eWvez!p6szCH_15`jKGcjfcz0_re50wzt=xGI_pQCL8 zJRkSwA{55lL?~1~vxlfRGW<2Rt8Wy{kG`S(`;DuAj+INU&4OPtOgSLON)W2_$!5W< z!@wq(2YU%@Z>T+Ic&yZDOtu%oFQA&nD#MlLVAhbOPCP%E;@tJ&rFiO&$0Z^Ti4j;xgX-T@H zQPPc+nx*xF&xgs25}wh^EzO>euytuRhkZcj%oVNJ$<(ERv8n zPZL5aA~%Mt*|)-;eIO#;bMF-<$!5Xplw)2sg#`P{A_?}oA_&$aW*(wN2nrE(psa+r zdDmy?{PgqAmxOoTiZ zIvp)kVq-eTk!$_1)|;(zuOFU_EOfbD9Q1Ah;~%$)ckKeP&K41UfynfQNq@~a_iOF~ zZ{+T1T@kq>BiEYpOEULHX?VCi&ejjZWeA^Fep7INU>sA_3ATX1B#iRS%?+^PfCm@? z*$B4Rsu-FSG!H=Dh1mP%YYJGAfEyI!n;;9L+5q3leg@xY2xEX?Wir9mAtRMNd&>24 zwb{YDvMg#wB1Ue%u*nefoN&l7GaX9;AH&&Ng&YM?ovRRhm~ItvoNWh1M0d;JwFq8c zh|G_^p;Ba>s~e7y=UI!K&hX&??7J4Z5P;=gi!2cqk;IM5Eb8Hws!q|_Gj^E^lJqq7 zHH@BNlGCGZVPlku+#31nWFaECH)+YQJs-R&APaNE&~V(m0zN zFH)TnHy)~UW_HE7M4QH7)4Hkn9g~W);B`vC@8%$&_bmN(krez1rC`Qc$}r+Xw%x`O z)IAYnm!Ju+$1OnaMrPx06ylOuj&*>Koh*o` zQU%=oWc}FLmE{>(QaO8&Ytem#_bd{q$-ZefXhin~y_oqXw&?bZl^}2lg93Q4w!Z5I ztK4W=+6eYQ{J;c67eQz@#uoL$M%;Bfw_bDo&NUsDwM&eq>7v$pO7MS9fqbQHtN~Q# zlJ*Q&la^~geIDV{5vIP5jmaat!qu*03h8TDZ#lk=VZZ^|cM-c2fN6`^jB-3Kk5GB^ z4;Py(tlvEN!}1Nf5XfJT6U=T}GXb-0Q&7m%AS~@{GnYtN>rGIHNXgKPpUO~zuVjrz zP{~vnJC!q;>Y=Q?P{~v@I!%is%77k~OhrRXNrYHI$y9H^IlxNf{WadPWGZ%d=p<8Z zfFd{93!kiYm09SI1KYKvsuSZ{>y2VmI^;nukNc2n%=lM`jQJ;*D0E2tJo!)`FxqNQ z9_)OmcofRWdNU_VMK4Aw+RWFn-^iE0^f?1%GI-uW9-sWBPXp}2@|Ql51DGT2!DN^4 z5k!V0&cRH3cmR4rRzZLz$(e?DGitV zdoccT1ac2*P>QC8#R4F18Ov0of0Ah-!wtI~LPitBy_J3y^#|-fCjXgj}Y` zRSGu=-+K@`&l31Ecb`c4S+jMrX-0}mj3n2cpVqRQGwTd8YFNg(3g2`!ao}jui+s3O zi33LgR4@zG1jS`)>Z&(aMfOFIBMSf|2<9=#nPP{>+S-sUmekLLN!J#LD7AuL15lkS zczmeDnMNCH1z&6uz$R>0U*$WJ0JgaL=a{#-R{EDPOgSL?uJo@4VE!w8rl#^I0W3qb zF+*WCmjpT!n9cw<4=`qpa|R@Qa;{erfSg8TGB}&C%m<$wfK$CmEbJP!>PEqnbJcxB z)?TPpHx=#L#La*nwd$tU4H2&et-9ODnQYbla=c@!Zg$s&Rksf+RAKu4IoD*V3e)q# zCI4HLK7UdAS0fw!2^Xcu^0`oy9t-HIqVzMd+|(bjrfyV}9)Hn_(&Mv`6#{1EciA0Q z;tW~gPRuh8Sz03@qL*&<{XXH7~;+lKCK%dqXWQFO;-h!fGQQ7_+9oZ7KmJ)IO_*Q&mmT5VjDo)r zGv6Vi9}6lBblA~ZYQmuM$9_y$xOa|2J2+T4&rZ%MMqBN-O;hDyGl1GaFn4#J;-FYW zg9Kn3cTfprX%)&jx_)XR)c$R6;MQf_3LJU^Yr5 zue(uVzrsh+ zqB(XBq2Qm1ie?oj&^BpSr+7ia(+A`RT-0OMHdkjGi$O#*6sAx#lt;YeF|Are=0NRF|mB?fu*hpl0FQQ9d zIPAtyZIUf5RA=YY9DZF+KlERR}pV4R`Ios5Cc<3$1E zi(}j)CG>TI$wlA&MbS4yFI0ZT!&!Bbiu6EJ*!EI;oqY8^uGYGHtlT?X+~6Z81rMr) zz*_-o`h|d5X7}(YO&F`x!2UI#L%o)9n<-)YK^(9?D;){jAN53xu9|!kw*M8{^7AcH zrwOrTKLfxt&6F--+caep61J7;I-f6VA0XJ0W{8=(O<(J@aPh5q@_p=pPFB0-$qz{% zwZ2Vo}?tESyIeN%M79ycl|gc{i8SHgz!At$AD*4*|p z3q*^`ZC~qx$_=E8SoN^1VmiPQhT0jT){ zP{)y_{)7WiF(3vEcnpbA0jP^%T@x;Ziwr=;U$g*Jd=|2R9~Mx!O3_$oPmZS*O$AHSd5vV8tVYTp+SqC8k zb(K2;wOJl3?}amNCfh5Wai{W~xM`rIDo+A3*W+k)N(bN7o(6LdZCQ2mfJ)%fqSsF7Cb&5`h;L+uApHfbb ze}(YxjQI|s@8I7&L8QM&#?TZ@`_kWH3KI8@87CU|4%^Jo z9}rSK#gkM%k)lTeY(L9Nh4TqLt|CR3%h2>H) zvjk4Cve5uhg!^k%>lE}s)Cc= ziLw$GW<1y)9KF8T5_b+Tk+-9s_%ioikSo)kVm89C=tBr9aL8_29f0Y3FRUX;rRfW^e0yCt34_gb(srHCo1yEtMO7oz!amMGG+w#|J;-^Lq;HiQqWHn7vWskgXrP>2M7w+ng(3@Zul z?lZSX722pMcYkMUtHp!5epfNO4E`eh8ExSs2V=ZzqcvGNh9FbGiIR-doKNgG0UG>_ zb1{q5{xZ%Y+i~C(+VfXgd!hEzsD#oaL%uY>HGhvY=Pm0s}oz|i{eWb%3y&U4rN zBP(E-`oZVhc3m`5ZVV4JDtia^l_w6=>Lcrei%!PFyw(S+OO1)@@al^%?hDjgjd5@( zY3~H^Tnpv;{V;7{4uc^LPA1I6Z$v08TL3&0XVtr;_WY3O0@^M3n{??U-!An*10B0`61<>y$!A7eu7sl`umwg(+pm}oE+d^Kqdfzl!g_-W zi|Bj$;)6aSv^mEZvRni@*d>og&O~o`Ha0HZDyHvisX6^3F0(VG=kiyh7pydC^EsP6 z(T@ZlS9s#X$L+NZVEbuSi&vG~Ycm68B}mVYWR(*a_8SZv>SuzFp)TU%&x*%KHbLNU z119im(G`OI+<@l+^60AEas!(Emvh^~(rf_MEjJ)`l)C}{3h(gG$PKty7g?73Pm>N@ z*3ZT7rD_8a=yLyg7%u{8%D$tGfPJTR!)ep@wr7q{Ot$AoMQ0q2m~c4+DTMdoFqnP! z2E1eT9lJY(>^s9l8Gxx&YA_F~?Z}BNIM@k0&HdDLdUnmk8#DUe8x^bV3rgdafnliS z3`QT+cy4UOkk7uL0ZE{hT6JJgWvncI;_62H5!tzDA*!F)T?d2ltXyF=v>8m+!ERe( zy{emT)>A_6FB@Z*65c_iJl30u=kQC|xYK&u)x~KQ**3NzsA@k)E<|%D)P94TKT&t- z(&fjV2=*}te+aM(GY7xRfLZ3?@;H&E&}SlNiSc^$Cig#DPYEy1>e02cCVCva=!2?1 z^3i=`8C??}wvl!a{w7^o=G&zoKm#2Yo?nL-xG^HS^j}7o_>puG^D)+nIi>C--;Vvt z*|GMKjn?>ht==4H>@U@uH@0fvIhnju*fp<4gM&GKcz-R+uY+I5lDTT};o!Dqma2^C z(`zls7U}OsuW>%3j|fFC@I~B6k}Kg^a`k@>zy_nzm&vyIcFBXuM3=HL*-qb% zT_&TSxYelR4i()Y!#;`%pjtBNWuic@CrxW}z`=*H{zx*sLx6x5z6*%f(@STP>90Q^ zs1FN7y^7h}3s8xe#Z|mBX0L#nnlF!hg~suA*H*^MV{rHY4`IVVzG&+s{xHcM>8G!l`1H+@`;e8M@1NS}ben7>f!_NmQ5LyU_dSQ6Y#+~(6IhqQ2&&PX7 zfy7ZY_g)B4fgH>cW>x9Lhe`@)Q_)gK#h#D%8f;frSdR1YUhC?gLsaBaS@$qZIUvUh zp$;nR%>b+zmBm7`B8Km`Zz86raoOQ8qK-*?aXf|22xcKZHy`kguHezz?lNME5tzy?`+nQq?Ce{I9kKrx-k8Ivq1$X zJBzxKlqn(!H-|}WN(K6+Mg>dAU6ze~OeNuFpdTTMbOuVyO8GHfQTx5s8>(+r{1|~`u>Cb2j3m5s3I#wkKxuC-Ro!oD&*E{S) zY1THEHqZBF6#+t(M81WANM929c4KQa=#@1XcecjI%DbQd0K|$k>$`XJ0_#ythE3OA z9#rsn@DWH3X^i&wTr<=xRjQ?-v2t)zr4)=do8yi3>(&j!DdH;HxmMr14q9ASV=qJM z;Q+Q@8PPKTPFO&9L#^#uGS#i8L{;<^NPK1d^#asLG+M?VK8zJDmR!tK#qwzgUYB)_ zDwdmF-AJh<;RvQuS|xcg!-oTK?0o8A;#~#6bP2~gl0``-RI*f-oTy|;sA|@)Oi$IL zQQKjsA(yr}F^)%lvx%f6mg#32F-bayeL%(7o++f~P?7W;FN&UvbZk0RP)A~NDT}mh z3|Z50iRKyvq35R89Y_j&3eJMpDYagPuVl0@yq$tCg~kdqFeU+*HvMuq1sPU^e&QZM zZS@pKraogWlzz_XqytsuCf&O%(!uMLbnl)@(!HZd(*0v`q(iLukZ$*GibOZ*n7L*y zloMW$JL4kZlQmKFVUT2}r0w{-AYn|;jOzC@a3XgWcNzJ9OpKaucyg#)1GnlGI4To) zkXI3Vr>w@CfZoIUQ=%=GIs8=b*^%2EeuW;srP;!005kh{6LWqxM{Ct6fI7ecYGVEl z;mKRoDr{e2Z4FjZYYco2P(vf)$}KDdj~UMplwGdld*kpzIjFYw50&fe$#89?+`%rU z;bcT1(MN=NW*qLPnPQnopjlbOzh{(kxI^(_tTMDza3+g*IgUtI#}12lh3Cjkw~>!U zd<3*rm`V-+n5L4`)pd_^8>P007jZ+0P}Q`E(^ECIcD}%*jrH4vBE^?O97ZBLUT+$C#GEH@?s@Rl@g4+N2jDR0f+*3vPdpd>o-$xY7O#$XU)jk zDSV6EIuiC)6)Kg1g;XsyD>uQ;b1fK$j6AfLOvfd9B6aJngXt6nOp`ef{YbF=9#59< zBtMk7^iIax4s!_~Do*LNv69JL`Y3|e=f1;Sdf3$sho4WM?7qj~Jjn3j033_b4i3bB z17O-*p8|7fDWBqms;0S=o~r9L$^LvPm-%Foj&$)SoiT2K|3j1Li|LnC&i^O}>AmIr z_luGgD%p<-tQU?2DKMQ~xt?g%DmB#k*-Ru$+QVoQJh+KSj#9FrGnyU)r4P|>g9iT?$ zr?q*B54&i43?ldxw#SgG8x8@G$M*O$h7Si|U)y60fK9FKaU{1r2vtqnBRy49yJ}u+ zQqp$Syfg<9y{(8pFOrI{pj6CZMKG+mR)#U8Gi?JmBLu|iTHQR$rr866yJUVPX^z4LVhpF;0^)71@!ddQ=9zRK|7 z033_b4r|`;1F)&pJ1e-}AyhT>PI{{9-b}UTZI1Or%tyJ=k26Tw)TTG{4<>bIZgR)5 zXryATLXSBsFF|zZGS{q%N07J46M3fO^*JVBBeYf6&cc-dOqaZ=jtPj{oK0OL*kw*0 ztt7Hy!)T=!8+`5NjH2d5$&;+Hde3)GEH;cG!f4Jh=Q1)s>@D%dpv=JS488d2q9|GA z=B(l4s>C@a9cIdieNxsN8p+xVRpOkcb?RFn-Kp!nihFQ^-pDI1PN)e=O{f44#}+_| z?Dm;H851nNC$`q3Ikxu2BXABcGy_&X82tW?uynNTFwqwR3A6|`S@XO%TuPs`<)MjU zoc(zJwn>>vqc0MRApa^cxX-|jZ>71%DxMvfOF(}@Y25D!Tz$+zK`M^ zEA7kfiYV=i0#Qd2in8vA`ICUBI?MQe5Ah4Y(h2wtSp__{kU_d18O^6ix-&S!6gSK3 zr*R1Vp0I23l*l90|Ho*neb00h>XI^7!r>^EV0awH&_#(JPhTd^mo1GI=ZwgaEI$I? zp|ZROej&2_mxKsjvV3#2nbr$CXZxzP1Hl2YX@*JNtYAcGFB}O4PxsVeH;r2!YfM?5 z84Qu-$Kb%EPD*CnPRkEb^5qFcjjs1rkTzntAz4i*SxylTQc)vKL9+Y|>@Sn$XW|`` z8O5mhUrj(9pX-)@Qz>~xwzwgO!9~b&AkQ+B#S#}l}Fo~ z=nnT_^_X);&3*;n}s*=a~pFtAkrFFbv6G336`rM2=52@CktJr#~!4R;8?4 z4473oeVHXyBE(shtUJ8Q5ES#Apz7`}qUx2!qsqtgrtt14N14Fa2elk!`*=fD@)9x8 zETOxM!cbIaaGN8O(!s*tCZJLGtl;ngWG`m)eiZIvd>B;v3G26gVyD4dXZ2{}h|hz&H7;+y4h`T^WCH8vFIvN}r0DOtoF9}bXn|RTSW}}B3}PI>P-%GIz>TeP zePXaLs8z=%g7G@oKibi%eL-b!73ysSH5TT!r&1mpQEn1ZLUTioe$btzPZ4D3_JO&7 zu+$uYlsZh5ET+Swt$fkdibEg8s(iu6YF`ce4&-Cauk}MGk#bHPSo0xy9l)0uhmOg? zr^F`+eE_Eir3T~Uq!$`5X5bQ4gYjno6;@$N3?R>Rvj!s+Cu1ubwVt_}|G<)u#XX7( zwBO{S*^W4s)(dgj%U=l#AHGbNY57p6;(ZnX)M$cPai;iCiBYXdD<$|MJsSd7a)_XE zb#J-ekjW72H&_PB{5OFo_vZ9UY+v7;mM(DdDHTB{ySnROE`4{}J9^|KhByc0Sm8!h zHmUKu7JzBn(5Bk%<*33T0)Z5oDy}@qoPwtb+-Vl zBWzs&&c^qt)N8uhcMLg~)Ej4*a6tBzdd~-7#Ynw{qUaREjv${XW~3zATt3|iG0j-W z^u%1JYrJNZg$5ye!>vZMwqGi{L?!osO&ZUORc^1IN-|FtN#-{eM&?z?cy{Wu80wp0 zl5XO&nQyAUgxBNLU&1G!-uWja@u`$@kK7DzyilK5N!E<6R@`Fr{`iZHW zXCEtao_(RPdDiEHcIS)}#p5XDqqT;a+(_TjmKwQCyJvah*J0Xa=!FXSn~}8_D&P-S zxPH4QVjwEu@4p!cAJr{DsDMA}L&!%YwVO(vbz~h6+x8C3i^!O{eE+axSj{;RRW;j4XR3 zBpKv&rf2%jOkeeMw|kK^fC&yuq|jtz9LPV9kc2z}Apru(BLx0zfj~&Y9?0?tTS9;& zF9ZUCz>DASoT^*5s_xQ#mzG+KzE8J%?!8^hsk7BNr_RBlp{6qqJ0kA^nqi*QW(&DD zrhJF$1|s5it6ZTSc$0FR`8#pjx@tAwH=pX=T{<3CGaTW3ZR4fd{%WOGERC0V3YcN7 z8slJf{Ib?PI#}U=y`tqDXl*E5BLJA95;k{bN|AMhY03btQA%Q;?9EXvMNx7BpDc~i zW5`Rz^!qi9t$m+H1fvMul=z+@$>V(2^0TagcHTIMu4S8GeP^s4IkqbBs=l8LJT-UI z7AzE-i@?1sK4u&4?xWOsq>uT^UO0v4z6g4oPgOtn-U&EXLtf!+fOg*iRx2T}lK7nK zXgfEbbA=lV_?*wD1eu`>HxfiW{DeUk^PU01P9H&dFnc9Gi) zrfpj?Ro@+LPfjtC00^(fGWF3N{Z7I#c1Qm)zJ<7>0}RpgNMF_k1OcbC#=nH&X_)#} zIsxQvROo%sDSc>Dt%}I{mS^+D2^2V@3yO)sQVaWQu|OHuVDp_5&ZyC$-Lqv>u4`A3 z;ue{3i-`=!h&eA#&CVh5t!6z|rd#2X9iVX;jO4=xs5SK~LU4sD2@;E?yZ2~P0|dT( zzyJd9Ez09N>^^OtJkri2Ew;*h=+*TM%e4N$Sc@+j!^pN4zRUOXXcb#UpU6m&?WfCk z!Y8&6SItJ@iwV$WYqkiYh3^Iam1eo*P`y2hB5{Jm>Pgw4msry{43KO04Tyg?M~M4Q zkpF{Lz0E?v2|^Ej-li>b4o;AzXQFLgX$^6LET?xAZ`JybAoxs9kj3aMnKovMN5l2| zOf;6<2}07#cKyaUK|W2d>uz0RF>NPE?~9q66J(9O#^Fwok;A#n!+9?AO}Q;|awkaa z>f26`=*16pf^>O3%n8!vC!6x%r3OEY>@c8x_7?ml#OpsZKaAinaSDYWHtm0X zVzxVU#CC@^ryAvYYm^K2c^kd1K?d)ksp~qF>eqnKdlNz^lN$AIbe5YM^-(mIj~aC; z`AuSgZ23EV;d-i&3-2;um~4XDmQytLj>IsMP59JF_?ZiJreHI^>(JbcY6^OaR(;o@ zX;Lw$Fc;V14{0sgb@(It#;!yDcJ#OouaPxZ$1Am3JIA0VXiwh4!3>u-rokJe zWEoll$5iwNVG)!pcQ}x$#jAwNtKz*Tvm{nF^N6P}zQUAb+ z#6|vExUWI=v?msZ-KX&R=z<%g@&~+x+bGEj7aX^t<6cJKQr@Z~YpoBQ9MiF~o2lNO zS+uGCR7|;#ruth5qHL;v4!(t$>PY01pF;Og}_x1>R(!h)pRat90~NtxoCW>T5xNEI3lyzo)iPcUlOEd zxX1Rznf?0786xc^w~yhVgC?KPF&!YC>k^Jp2wf)dwrN3+eLg9VHie=H= zY@oYOQRhlKvGX-tBh3ggF?UQaK8EkK$VHu4^lS`Sk~jQrLP#YEq*<`UuDmin;&o8AdY8&dIlX(-W!+{x+!Kvq^{a z4RlZpWja!k`y0F<6bU(`Z(BoJOsw7?=tJ_JhcQb-AcrHQt;nHd>Fj zYly#HI3&mWx|7ZECb55X#l>`uMMNZZ;UY(Nj}uVyEyiqmTqW%NfFyfviW>(YSO;SC zahJ2~Y;b1Y<*dTDkX?=~RJ?sop^FZ*+Ot#2osK2~1i3T}jE~vr1jCU+b5j&4BxwZO zohgS(K;on+id~4jaU%tp7PQ<_{wKj7GPPt7@VNv?wQnq*hcImfn@H+zz4w{H!yzS0Q%L zu^P~hScWE_Z8^(i1@w=)Md zu!wLBKQLn$sTxEY1$nYbglAAY&DEnro1N(*GBv&}T=f~!f&g?RrqT1zUIh=kQ-LHMXw6MYbZ53R{u<30AG18sCz0Pl^U`_Wg)z;T zqkLx+NFumaCVu!fUZ04Tlk&s&p|O1UVJx&HHOssYJ}+D**n_#so;0-2A)9Y$%1b8J z^oxnX8Nr%TjKUA~*^qV=elP)PVaaTRaw2}H&(Rh3(g(gC|LkjTtz5{bZWayf? z1QR?>qh{a1N$21j`wsY9e!c^>jqTGpE$=$@hg3F>>iem2xd<8VhWc(mt!}5IvXIlg9 zymb(L1rZn$<1{!o@+Z0`5c!s&I^Sf$NKt&mVrFq8*z4imNS#Nz5poZ*=+gg@H9%g| zBj@NAZ(&bTEoeZNoet>t(GvL(EiPLkC-E)B5*dl0o=GwRGnHC_v`uPwC3LlC(pVJp zgRT}Ch0%L7kL=Qy_hu)M_u4Qbd0K*4fhJ9Y<$a63vApMRM~}RJ7KaCn&lc;JdmK5PWP%|KG8|p@c=mx@D36 zHt5~AQ0I}-|CY35pNjir7CcT#eSvtbrVXKn2Q4lH|kff#QJovAUI;GB zLyty>14Oz^icRkgVZ>E;4e~tgTwV3kgj@uROG2KfqHQRXNwMm}q(e%8RdPrHtRe-& z1lMA|Wx#56(t%~iDly(%u_|3-5kV_mq}Gw$GX`Qd0?L5tRg_y6KWxRGos$0n7`_|~ zr;nS(9fWzjS=@tfA)CdZBIE56FYl_5+o3C(;vu$&uQa%6%=R!Cx^nl9N^!nWYf~y6 zoQST}X4;O(n2uU3T-~LxiQM@jcAxI4w~$H)hc4-awQ|1+MwU~X25Cu>7mZM5_77P8T0R=2{R6t9AQ`oePVe}xAViv=XXlbBTSRH)qCfU@_6gHRo z`ZT$x?>RVtQq225RvOW^Dos=1EYeuMaS73gk$1Gg zd!iOF1^9fl`9lG|NVK8nF=(?sakPQyxsPl<6I#8KCzS#&>CtLN>hXo)$y%+#@o+Dg zMFCeFb>rwyoLHkISA}}H?o`UCB+{I%wJRk`cZFY8k({nDTq-we&Ht(Tf+!IJ*4gf&Ng3f#s1y$i!U!F7X;mz}w6v#VGuMm6xR* zg&(j&N>(y!w48_^uu|hD5`;`I6S--cp4gP;4)3n9d>euPp&TO#eaRvFs^uMMwRhFh zI?3#-6^Wf|elX^Cj3AjMR8GQQI+{c-OP2x%{a7P&3!s@%yG}6gH|tBaCn7+1Aof{ z4*zo*QCYMNCT5e+S=y|%8&l3grOM43Jj`9ZOeDZq ziqCB)xy$&YEy?cyg;OubtugmhzW!)2Zmh)D)lV)^+Kg3v_vLtP%srjIpTXB>^7Tx< zo`tJ>HeJraW!uT_x#HtIe2ls0^YsG0UPuoXxht07V~Kka{k6osm>*rj*Gq9d=q|%^ zcL^|f=#6L7<#aqd z=$=MzJcBN`;pQQCIldlpZ>OJ}?4HVh{9l^Vf79h@Tn@P>;qF0qh@Q=UgE9)-fw#xp zJ8{L4^^N#=V!_=cKJFGD_lS=_0D9w<|AmiY)7>g=egl8GU&p2CZu9RPYH~Ui!Vh}p zeuysgd-3f*>Dy1}vY4p*RJy#KE`LCmH?G3vEp+)VU4BRxs!Hv05o<~a?sEQc$~WS2 zdJ;O5=kgIgiivSKgoX^BF4;%h?wAxRba%0bP6Nf;)|`XlGV@thhi?#EU@-zRZjirmRHX^IYVsYhZ5#17ndwDGQg+ z)k^J(vo<<*;_?D^N>xtxJ&gpy)hP!hWrY$U3=F>qjBHM(P#Ao1{X1wPnYivOsW|(b z%EGpjJBvjUzAFI|#n;>qV!1nuX%~oBBy$>Dn1tjPA4?WoDdcxj$Kvl9F z1Hi-ihqgX}5p=E;>+tMC$U@ZS$3;T8h0Ybx%jLf{+Z<~x6vd=xw}?ghD6tKmC4JMx zhWo*YnI_0o)LBw)Vqgmg-B)2Q?&oPW-8Z0J_XC8SXLo)kqm-GRUdJM3oh&7^uBB!> zTA$xgf)r{sXn&6sHn9MdqCE^I;7u=$0L8HT3iC;4Xm@SCAQ#2h9qSJaP5U3B79a)T zkoXf*_^Q?Fph0>OplY$C&KQ>k5QwZQw8DbZEYDHJSOHZ&yyf{w3j1fN)GH-2r}Ilg zR719nM6+<9_=W4mHYe}KjWzt91#P8!rC3AZ6>+~yO|rfz&&-)C8r*;kcZPucYdzc} zT64@SV*G-KoJBXpB{Tb(Fap3fz#q*b_dh|(kj+05AJmWg1zeg~(Z_Kwj5#J@8Ox9s zxKT!Cf=3~>mm;A@=lb2-9~|GcY3J4*y9>iuVu>Mf^t^hZb4}dyQNPL12)}5qxWY^^ zq6F-)d%F1qtUwK0?YONfNbV))1A4j$snzce6hT3b4w5SMb68=qWb9(Tfxtv7_{s(M7rjSPzR3vUwe*VEH44f) zpKhpS1j$525C>hvmu##SoC8JXg`APi;ER^;x7*7GZry4OO49)XppDr&%85&-?hQSQ z-jFpFpt{Kz6+ji`WKFA->YGu_RR;gm@F2*!C6|`ggT*+x zRE#Yg`49nyjVKS(H#Va1xAevX=69Sy($)g|!_sf@dE@xTo%ifYz}LA5tYt^=l|HN8 zzA^Vzc1Io;w>f-+mPqIDfnOS=*fNk_!^a3x%);jDR$rah4j!9l?C|5315ntDIrNX$ z^WrhDKS;2mKRsSg-%VcsB)y{Z`Z>Chj@Li2u`$yYHLl=`tQVW?lO*39rA6K_@e-0( zo;x$-%MR)39Gz~|=Hw=E0&dVkt$|`c@NW)5UoKF4#BI=?#)T&~cYeZ0I)!iCwnHI0Bbs96Aq5C^iItx#tKFw|VM-jVFw z2-J>5p7#+x=*SbPh`*oSR8*~DdXJbBBi;j;^T!OFh=xN|5#Oa9z?_exF&%SwAPF$% zYrvd?0)KSi$U#fb_8$^-bS9{;@5vi_T+bBBm)tf7`u|yDxqxXedGjKDkJ@=o7_S^& zW6AdsFNyMa6ZQpUQNDe2babSEi^|q2a5#H&f=>zR_y>$WnF-YomUmx`nI4+GadxZw zbNKdzN5D_u52&O*q!x?50+8y5zHN4*QBR5`_x0^LW05gAO%`X@x0hT1oMwG{DScyo zo4*}B`u6qD-MC}NgX23k?tX3pRXg5<;y2khEqh4o!{g4jf_*WqiNU$G9~mGQnHvZ{9{-X!SKXCKL@i(I%90F#P_h)x2b^R$otGqCY*g zn!Zb5N)yTmy`oE$^XP_J##~G&BGR}=6N>k;fm^p2gVOj~65%Z;p4@~ITvLICHyWer zlL^J_M4NghmTs;xSh|J>*;)F71Q=%N579Sf>HO{JVd=Nt|G<5_w{E#_`wNoW#>2e2 zz7550xNq$J^gvG@Be$9S?|kYg4zO3mu4^SVJXqXfY#_-M#x z)WszF$MAXinBo5n0gL|h7(RVB8U9P@6`kQ%=teq*fB7!qI}|)y9H^Q@BEvE{6sIe- z{kEI1mme6I)-eXx9n(U0Z6@RI-EBP@wZek^A2P<)C-!f4q5&Wi`#0Ad>|eu*?Ck&d z2r$h4-$vh<{qwh@hyCB>Fa6HDpZCDsyLOLn-?4k^_OT?k^qb<`UK(;)J@ic=oF6$U zWw@~=!$)ZWb;%IZhC#R=Gl)aO+dhbhKe77i{Knvk2z!mAHwW*>Z2BiFctKfK{2f7! z{`6!8eK%#r=jjz)R(z0dq>~jpb~=x@>C{iH-YVCs%>vS+6^aNanL{eUl1v$oJo5aK zc&b|&ebg193KMEOAnQThPBv9q6>wMa%k^r~yTi z&|i}Ec~O0Sp+iRWB&N`BqOTCWCB`8gV+#EN8cS>nWporqbj=hR1d+s0X(!**yPe#} zpa@zNQk~EMvYajEcAD5o6iFeBrA2l5g%*i@$yoJ1X%%KC8m_09h;Jt}xdXHcjelg< zDy||(u~u<4ePgYHzx6?@NCE~G{MvauquA*wsNdg6o(SvD9@f8}P$@dB|EQ1Vr}#mH zuTun}AI-m%?D?mV@577cr#o6SKRt6fB9h||`5T3Oxg5GiK>;pDH;^6EWm_z5a9!T2 zlltP4MmEq9`CF4j()Ol8{%k`N2_*sp8Zug3U*pxKx~0tvcS)ZZC9h5Wmx{Z`$*ypM^#3PZL*QHJ83= z;;|1=`)yipBWnLG8O4YnwXaQoT{zU@!uYjcM*+{+9GFl8_Vgatf6gv%O$)oxZDEsG zYNblEHWu}gvG06E)Y3&L&2a`JKi>bRtyVin-5Q0R2-p#NBEYLxEcRfM==>_i4X4Sa zN@@s~#VW}(GB_B}sH!cQ(4O;e-dO1cYfW-E74RBrlJ~pvRDikeK^=CubB>~`wFH8- z5?%`~(Y1X-z<-(HRq$SpJuP686|`!9l=f)>>eJniOaD#_-2K3=yEl(-+PLYtcSo7R zy7LX3AJFRycmKht)@!JF%mz|tOVq|NVP}jEbbzw=lL;&I!O9K)uxne^K1ge&TLX-r z8JPZIdNoWOMewvN?w0pkeRclusF6knl1Ryfg|iDcT=EheTqHf>zH+nmu=mHNVx>YE zYM?BOMHzNay2v>mp~p+`1d!-q zYsDTmp|j+oWVG%kN22%@TkcVUIj%F4jw|!3t&*#z#uKx0?kN~vs^w7hE-ikKn$x}} z>9i9sM-o$$AAKm%&99)7Z!i}NJ0op5gL}24=K!Cgp|Zc>m+2e(8~9s#e*^DQ zIDnPDVZaJLw8QAnS-^W}lj)34Rh(jj>bQiS@b11TO1@>&`t5DYb`L-7IWW#=XdV5N0-y2W` z-h{>uqbfjS7wPK%H+`c&r7F;|DA3djv?UQ*!CUC(skDNJwzR8L6z{?c0OOpmA|U7m zOc@G;(iLEYKr9ScG^L=YTH44&;He47PT)-8WH#CgF}C)zBZI$u&45LB{?db%@MdaK z*Al*L^pR0ZFc%L(S6kk0TEcSA7#?vLRiqpI5e=6$h5w>&tSRuf95n?6qyA|McUKy1 zcCtCy^n{zWut$y6MEH1Ew)DSWE>xhaFS`v!%ad9ltdx>HCN3B1bctMjg-$6Tv{RmneF{+=JXVBT5;3y7`M zf8)Ql#}e(!tDDUeDSPOPus1$aSdD-VkaBt@vXq(e%8P;y8%LM>s|Ye7rgGobaNq(jS&Qewop zqEx!ZA}U_ljNiSCV5Ioy!0jW>#_+oABkUwu3Us)bO-^6pi_w z*3M!cNVg;>Of*`0oHIkP&7&O|)_*i>v4YqM;h@#Ahvwmal9GW~k!T)Zp)tCVL?LOy z|03b4zB&J0x}meN|1vctKLX(ChzG++2yVtPtPoW)ctfTLjA3UyG3NSBV;mYuM-Wk* zA;Pbr@sDT~HUgh{(<(-mXR~wc`p$EY6Ijmn&V}09Agy<7E)Pe99_? zxMi$V-GZK?^e9~-fjOpvwv!2$7~|AzhQ=Z+2{z`qGX#vmwIn=@;h9?$DM@{gq&+3I zoB{|2zVYzEh<&JN$d_ zNK6SZpPu*Nftmd}O;uw85z8O9Y4CM(lcPX4*LY6kenh6z?@c%Vdm1k5=3l07tef+< z{B(0y!3Y{(5=i^U_kTL0f*X5$zXx6X#CiVg=lQ=)_;n1Q=cf~Xh}@?$e*Ss>-=-+r z-@-+m=chZ`d4784@>xbcA;{k-EZgN%0~D3zau65!Ra|z%kY41H8a2?T_#f)!6n}Th z>w2tz*`=9}^)E&f38iV5WBpHJ0h1o)#fM)ec?3=`iZkW zd}bJN?M3*2kiBW`j8k>snS!@x=dRs_=`u3^HJm#9Q1~smrf?3EODz;Ra!u4M#i8Mb zLxJ!p=GJPor{EN_;tKlLjnJorE`4RU)#9%ad}o+WTSqWt)W8P${FlD^_<6h4UtBQfeoaLgVm{(_e43>Rv}Tcq&UVmHmW& zr?-le?MksRK2@uX(|J7;5q&R1@8zmHi@BZ7>5uGr(fTJ|blnr)r{{gzOvB*#e0zkQ zX8#v+!}|3bZX=p%w&&*HS-nFPW`RC4dqw9A?ZG%eQ*lgqbY3=ue~BXRhKBlf{+~F= z>|Yt2!(T9FFH2i9jas{IPC~si?0P(?lGD;J2O7asjj|%!hUB)Ps8;(id;{K1;zQ$g zYBUKdV0E;99*XLR=eDFZSu4#)%wJ6ZltyiT#0vsITx~f5%C>82mUim3Nq56UA|xr? zmgx06CLZzF%5Y$3Jad?a;Ef=D)0gK@*@oUN%Ng-WeDBUF;O2-VrY67$?0*Kp|a1(fccYLvE~=BmXNYSSuh zoZ~H&{ECp4ta2{H3$2D@X;!J!fR*LyRHa?Q8LA4`+U?v>tYgnJO~jfZjA74Kq?l%iKHIy_qGN&7#c8@+X>DjO4jbP*G%j zZac|c#vg47xdT-CdpT~6xu^2=N3?}riLa6euj0G3#Tj!?=kI6m^_hG%NOL0BuF2i$o39_HK1^n$^ zMwiR!as^$kRQIl;Z&%ah8oCVAWfguqdy~5w-^XUp%Wiq&E!;6|dD{v=J+a`P0}^!4 z#6{WK=#H|r@gtWAqUnx_U+fScJMjU_-EQ&meDSeId^{vR9uXgp;RDDqP9G<^6Zmi^ zad`p}tveUoX?#UHv*N?W$C$fU{4vLWC}D{m%@y&6o+~g;O^4|8&+1~R4E^gys18ET z+(wHunMA4w;|K6jhwm`3or+es?zz(scMn{@2XJ1;(r zOSobEtr4~zcb7TqJ!@B-bdqPwnX<8=UY^=pamaGx6n60Uf;iw^s5ff+5Qz`NEKUs5 zOKT^KO;~03IgKWr8OBLsivHhxm&6N+7C3{9{8gjE6vW>tX$i{LmQcnP*4Y|j{&8La zHeJ#s_Bmdm#sY~FvT)c{j& z3PA0ouOWcq`-cro+}nTw3CtN*nwq4%9r7;^R3vSRWfT`8`AEVX@&~6ANmkRHQh9pX z;WTUH+-_IPQ$mgK8kLFsqnRUs%9oes&yO^tzo)f_E&9Yg!Mi@?Wvz;wG(nP1Dw4%(Wk)Y_%BRX`5f zATb`OU;D~aB=phcTyZZz1=Yag4^5|4XxB%ENO^#2Fv5bIIEhmrwz3wtS?8&u1sW3H zEbc3o!D`AZ`4wa1b)2uYQ8%hyugJyIN(}BXHEDnU@My$?;k;dbLD%9Ob~uN_wJ7^J z5INH)BA@i^N!V=o?*iB>_W|rMjCdI99^8~e^J8)4D;{N6WxZR z)-j3ESk7Czl763>)LltG%e^OAK-r-0-}@OcfnKR{&uy^(?k3T6!W=;IBe6L^u?(_{ zoq%RWaGFBkkG2l@WocmeF`VIm|bAUeIr zu`>RioVrj%Ys>k6CXCbN{KcVi-W#lmuK$`4T{B4fZzaZ^7)k%1Xe^7Q?*gNNmG%F~ zKn#=h^dx6lf9hqHtp8f#B@D>=FN+EEEbBihW&P$8*6Cx!I;|KPYab`p7e0bx%KKmn zn2U&qXl`V+1vw`4q4P1jWM^C=7~+8FLtX40(pwX5?+_1Tb)hcyj-HxV?8DZBHW8-j zdQkXoUUXt2>D>vDG=mnjF)_x(XhGZ2SQafP7D5B71KrLb4AX(=Nhq^PL0;0{QKTky zd&dUuJq7pj?HxCZ3G}Q3dG?N7C!Dr9+B;4_lf4hgtw%=KR4a<)Qc%d?**hN3i`Y{z zpnljpo)d43peTh1TL(RgmF;(CY&ue||0-daF4xZwwQtY>O{xC+gs7Q8s{cx2Jc*I& zzm3MSNc9-_46ICliUAlV)9FdhGW|W&q%PBciF;4Mv3!~S^I`(M%Jj}B$boTe1Pdw3 z<IF4>uV>I#e{)G6MLF#Tzj4Uxy_XTJyi`0z+ z(7?*wyBUIEa+jWjvY8ZwCGEv!YEs`@-o?GA*dzFR%R9vc63bl<`VWbx=KIIb;R8kg z>~Qv!k`urYN{O+@eQ^{)q`=?7+vCpXMT#ldLqDv!UF0sGu8EMl{49&y?V)i+clKWQ zjf7?0-QP%zEHQHT?Px52xhnuPuyXhH48btDOHXo^yC0$^b-DZh zaqlVkmM?c-D<;sh++8O3yE{*uWmB}zGWP^v)R9q>pM5@x5K`dn;K|$1jC^7EDh~H&b zWD~z#U^K82`1=gRFbPaga+bj71IUI1{%+zW3|O51O-!Iy3EX)f9}7E5k4P(;Wk2fC zJr!eDIYO9m%vy6-V|E#>xdP1xM9OvXoZ`fOg!I9aSlQOabK0e0MIE+8+eO%=OSEv; zAeuLY*#il&GJ`OCUSbr95oY6PEX!Up8ax9l$L?qNg~>5`63SXq5R+`y}MD`Z48l{s~>4#d)4b__~&_qkLV**K7H@p0C&8Dwg5c&&>UG zkdpfqTvTRmy5nc&rbjN3$dS#=O;iFIvG_R7%zf&WIcDZwipIpAhrS^*_e`JCI+rHL zC!OllEJ}0jO`Vl{B~tp`<+Y+V@oeHU9~r9Wh1MLi92@tuai3?k>YhtCSRJJ*Z2ir~ zZFk-|aF~{D!}{xc&BT2T_MKiPZc($t!~us=JPuQdkB3K)Te4ZN6z3mZJv6kVfh5a? zA`&%H#$#k7ZdZ^Rk`uKS<)5NZB4^kx)!N9Kt(9&wI^k5vsDW3VF3(VINIxwoiEqwz z$*&;YwZu)zOo^A<$hL@_$jAm8*|hhIh<3T!GBv?@7p1nKbOFCZB*6Bgc?U5E;|AdM z;mE-#`{`>A#&IJ6G!iR?Q8Mx|ER%&t7;_(a_z{J>k39OwYL6!ctGAiXxX7lv_U!c# zsLnP)>_<0UvZE=oBh!94X)&{IEHZ=r@-arIB)fj!eo12ANYYqAV_EE%U0`GyF^@2h z_41}Y!~kRiX6K9m|1{T?-qppsTGu4|2?+&hb$JOjsasuMz~f1>pt3>Vq`6y6saKO` z=lT>fLJWnQumWp1_G567%iu#`JY9A(8>> zFU7j1cJ-kOF*oI@iB~jva(>eSP>Qk9coFM9#qb-<=q6*{ z7%YzePkAlrfN=b=t}NKwyhXEn?~Pbqe}AqWDU7wb{25nST)q&+<-JjxEdEUTJqOJQ zE00nGBQQ4ui(iGVl9}XVSp3CkEDMY84yJ+R?<*LFVf>w*gf3(X!jt;^I%-nq@5{OO z2+WA9ROj>eC1L_S^Y@LR{5_Qgg_(U0?HQc^t|+jlfRY6JbtFu5u-};%*i)c_t#zkp z!gpQ^J5G`&qMg?_#|oxio!8gLwvy0!ZJS^aa@c_U5}iml(te-)$z}EyM8G_uW1P5^{eD7v;O9JHGFh9=SvsN7i>sR02oB z9mlcn_Pw-7c~w>ZBU)D0>ggMNx3xYw0q2}%)2Yrljd3o2I$fMXv9q+5mCw50Ypt-A zim7sI-p=Q##V5gQh=0Po9saJNn*F5(gl=1#I0e>s?ta2*)%`QN!RlK7ox67DotGZw zb=|Q3re2-A^B`u=$*a($iOOJe2uB-j&DR}SlW{kF_3}q3=WA;}swCH)DHJ6x@XMkM zUJ+%JMQPvJMy)+F3m-2Ya81F2LLaVyi|T}BU?Trmm0tD=7ODZE$gadRN)$9zp?b*T zUU7=tyqvt2I%ql=8cG3IogsP=KH^4Alq9UzDix|#T&dOS(kZN(Z;rN{iZjzF&I!wF zgh!ZkFjU$F7-)cKyy~ELs()N7?DiTE{^qcz)f~*`%YO0SeZ@w()<*q6Z?>W*uWbc6 zQIyy!q0B!5IJg=qL)-gZVdIXiF;k|o!c!kPDp~EAYagOmHl|O;i{@0LTyFtU8qTO} zfv}@IUB-(9pEflr2ICE+%OIFV(J&kzNj!{0P@|{-NvrI&rvM_VVTc0LR8A3fpyjA# z;DPt6yJ{`*u82pV+bD}I*KV@bf)b5VmXnQQV}5k#fhH|(88t2uU(SV}>%e2LbCh*N z2r0@qA`NwgDnq02CMuBAyQtI6&|$PBgyj0n;z_Gf#Csf@P$*6Td?j>JL2n$VK#*iG zC=yh--~)!>y46P!Spl7podY78C|2D7J@WoQ%ob}VD`HYDPeu-J%~bn>9I0j~l|;uc zB*;+-dw-E@-HJ+}{Oe|`(Vn7G(_Ue9f8e4gp92sXdeufHJ`mWcyr?HN+(8VR_!mfw z!x1(i`{`@ggjveLUn_&p3sY*u!&ob-S;`@zg)Yr2T(E7Y&%7FvTlbK0p@N7`Ota}( z^ixg2>ZV&{Fq@u^uF{%KNuf5PA}&E=S|F>{!yR6d|)E_ZXa?v3=PTg_bF>Nct29 zj3l3v7g3}jRNt}dzCsD=elmWB*Y|Ep1eP63y}{+~o+S-5`>a2jX{ z@ID4+m;|6FIZJ@AP?Nd@cn|lUg46jD;D3n;^eh3Ix&$~(Mp8v~EIN+J2n?C?y{M&4 zu@ZwRbH0-oVhxDQxv#4rAYM%tTrQj%#<=ARvGQhHj@>Avw`I)**I2UV(kNLYhipok zi|FTv$NF|2y2{P^b~PHyB5ArpX`toISq#cBIYUoE*E0p_NekR9)TAzF&fwlta5rDh zJVQ*NXE`$&A!l-QdnpQIv2r*%G^EJ3sD(=b=fRXB&&>;MQlN4_Y*gKME=q93%Mtb^ z#!8azJC|f#DO|UuNrSMkr=5%H(3B^wglL>$=Tc9MPcb`}m!PpM@+5NS;=^g6B}#>X z875KaNzM}G7pO^HqLjJ!6r9eNDAQsBJxi1ykWc4+&y#=LL@+4IXDN5Q0>O~HZ;V3l z6!L;?zfYjGc1U`FMoCv&4e%>xW?~tE&%FpNUXTp<$ zqxexWD{ah4!B|wW38ZtD0?S$j^kBwU|1B*9KmO#PeTK(8Xkw3}x08c>R^`OW!AvIy z8HUIH$-&(qDffA}sFQ^BYSd?s06X}mmJ3@2VY2wl-J3@{j{v?TBC0` zIXKm)6K3^t-NCUbC-rH;s8a3>biQ*iSIHg82MQw~Ko#T^d zuoM*37o4iAHHL;Z(gz(?1mZ@;mK|$z0;pGr)#J! z%!**u!yxrlY~YyQz9ObXD{Ze8n%-BQaz-(xMp0ny-SoBaTyZ?lv%;&zDVD^kJRFqs z^3)V@x)TT8W{a%?nsKTnIyHwu7VE`H@8qWhWOKgRa^{96oq0NLDnN_Fa7Ig`1u+8u zfFLl3ke3z}v_c(6o!Aw7JNC#mZtOcNL_rQx}&jHXBt0@mF`+o=4-S3VU+B!t* z(HRaZ&N^6D@D5;r#|SjC2lNHbI%b-uyMxjW*AV!Xx?JABC5Ag~U`zA*36q{wNwD|cP4+yQv zrUl#d7>yhiAEcICSgkMPlQDCe1RwTw3J94*esO~wNt~eE&&Q#Cd7qL7$q>dN1GK!@Mh>i>ivSBHTft7$jIJaCWfVnduk4UwpbukUv7ren6o5Vg$w&XO+GgY7`x&%j=Ezit? zrB1a`wPvpT!Xjx7G$1fMk@OxnG+Zm;D0rn-r_<^9Jp|1N(0#7950ZocN5}O^;4!ln z`ix}Y5*S^E%tzMi-WEY()TsP4Dc3%vPMz+OR4vF=B8FthQpGDlTw>&2A4FHRNf&7s zX#7P~9boyyr}cfsRU1gO5lu2Rdas>dY(qCoPz*Z zppA)JizHKp_hK;=%6o(=G-1MA4|@J9#;OF!b+TQqQ09WdWTiH>mq1M`>dS+|#*iiz z|D_%UcN~HqRVVcl(DRATTW_KMnKUmnW#pZKhRIYfHXhShiB_?Rp&*;Yczd`{`?vf$NNzWN!&Y4jJLbHt)qc$k!)sOc@w#H~430x39awpGjfN=2%S6 z_vb8wK{qo*2G94W7y+W3Fk$W!-}6o8G$U`om(W-i&vzJLOlS8IG+uZq0{)yK7Utll zC%RQkEn5;ZyqvG}B>o#UsXMqo&b=pDFWI2);QpwXK+g{D@9YL=J)X=kijvt>c>GP@ zFo`Z&9f8y-a8QPj4FC~8ofjFUAZQFjg9x z33k*E)t6qHS5#%o$JK;kx_spHF{*9#g*!0?<+BnZX9hue4Z2F^JdP2RH=?mDf-)9D z11B-BV9D#Jq=^)Foztdr!fwe2ICnm_V-*bI+@hgL2~uV?8!Vv@sh1W4+=% zB+*YSkJu{@(DE1>$3sy}Aq5Q&j>hqVyx7oyXdHKiZ;++IOZdU8UAOTpR^Ql|xp77D zwzlykVVACLTwv_RjWL?a#>*1oWd>#ArxGJejI!}+G?qo#hy&2T=^8I$$c5<|^dx6p z;|ST@rH_CSLwsLcGi%iNBZ_Sz;vd zKccbxC9wd|z)9lIG33G|F+Isy68|SPsY~KdbMGnmlrM?@QcR#%N!)o8iQxwZK6FXZ zBU`tRmO&dk#Gy422$W*I2S+X~!>p277z3^yfwBW4mu?H+#A&f{rajt!5G#?MouOHU z`?f4vPZ*`kqH~R1p+7WJ5M7@T5iaNazfl6nYkeEldj0lbof{ zc4|_WLc`p93a;c!p{v9MdX_@pBPrzLs~2g5JEA&=7mOzZt&WNKQ$^M+(vC|A81iv4 z3bj*U;^4@~@w|v>K;&aLpKaLQN;yOMVXU0&=Ckdkc|};ZygWo0rpwC+k0f_u%FI_K zM9vH{^JfxcOpMHY3XNrvnXwQWIJx;U23?rkq$fGc&EKXbb-DRc?mY#!^5y0eVgfzO z&0qI+Z-aVDLD3=$xxpWS`1C}ay18ld{AK(sRvvZn z>GjaKq5xYOeU-3Fmqy_(EAGM+Mqf{eml=f7mlGpPj4=9FG?qme#Q|vGWYOO-FtsSRPH%(>@+;F z9Fog7kI*SVlV?BkSrJ5^f<^~Nmso{aWwibZHZvf)#J%BWT1CX(7t1s0-B#ygVs(nG zxpkr_-qtN{C2Z4mi%Sg4aA3S9u0A^bXe^6<(G5rgr(;~t&v!0m_W}u#*d|rvE#(qX`FFJkaF1h`eXO(wBmQH;haE* z_lNXB}5dCUPxa#BCW8|l$U0F|Kb*sB`=|J%rTd(>>!ZKa2 zy2#M0tdW`+`kI6onnA1j`NU`wqgA~gjb+iQ;z2ZUI@PNfc40adJ;_<8dOJ0#>r@B1 z_Y^$K*Qs71CeX7^R3`Z+9Z{@>RhSd7r~GqXhL(OOd@=d)hoi_j1@#S% z#_)l>7|4KV3}$JOfZ<|PCF`-22KAoVLAjo$ytY3He%@zUrD@p z5`exA@g*^VUUi7hk0=gdlb3$e3*S4g5@m6K!*L7;BXZ&b!bvUFwn{3LTDH1xMA{KU zRX!JeWb{1*h0 zC1LIOanIdGBU_0bjffZNTou-nnwIxvp>svpd*00Cr&$!m`>k?z`8wEwRuttSkmoBG z#@vVH=Ogm-QTh3p{2Z5`6Y{etKPTnq6n`cxnsPsWl#Dk75coU2A+Sxho#h^UPy*$( z!2d@VWWIgl$*+nhujdaTerG=;=*2EmU?$$T`!oA+jdnXro3(ah%2^OioG6ZxsW=MP zKREV_qr3>D;~v086-S{vesL6f#611T7Dpi}K@QNh$8m9#-=Iaxt2oN9(Xz6}M&D2z zrP!y68%KdnSriAm9yLo@PHOu8ZFe0jeK=;g?<&-HO>9Q$x`B1}Y zp)3R?FQ;tYNc&!{w<&kOr~`x4;5<$Zc$88aH8Pq_$E%T`FQ!bzE>dIPFAIpOEb~Rm z+t0;PDq5Wx9=%FqEz(cRcEqat#UGmOIwjyo>h{U`Ax>wHT=AUyn?OiqQe<5knhXYt zEbT2S^q^N>sG}ADrFdsJ&DEMMnTwt}mKtqfW?m(X(PpbOj;>T;3@niRUZBDbC|~2@ z2Dj|j3s6QoPN7af73++|>BagiulBsENaHZn>ot_E;UXzqv;zo=9PF(!YSBzLYRE!| zzN)Cx<8{alaY}lW#Q+8h4Dtud1N2b7S$C!=PdzGfaGG$WTQ5&x;ZZ5W??%GCHU)Yb z5tVSzYhemN1*i+))F_}+M%kF%dMzPuA&`ySs>&e{h2X4>ikHSZv5Cj6Myc}FJ^X08Y#nVzQ1_yH;q^#wRt zzmES^D$!Fx5dm7Kp`kJTPtWe9F){CT6db5j3ibKcEZ{4W@l!T@lv7gGVyM;tQ3@&m zp`3!?h0S)k#pMd9WP=z6|B5H!m2E(aG7Eg!lMHpff-4# zgdj{0@5?Ct(((#4RIxP&l8RjU_6m=B!zR2cR+?NYf}0`Kugy)CtD>j~^AUkPJ~oaF zHQOlO8I5shg{$Kd$u0khnk-rov@ZG(>O?K(-KN z`jysDfrILEL2C*r9up{Y!ABuPKcZP`3SEM4N~HE`)dj}o5glS2!LXV`#6l}nw}hZu z*zaIf@oA8mKOtrmLNHR@3!$R<)i(?PO4#}Y9|qvP&ODT|5`e!=elvKH1~VOlv>Ho< z_ZIQDP6WE0FhQ`85#or&i?YdRiX_XR0Wm=+ zw!{H*C)SX+7nGm=Xj(&qy{sl)pqZK#dr88;4fb;6?4TYqy&7{$=5UN)XDL{$Uz+7x zf+OZonk8C4@eFsIQ9)M%qzR2OWu#?_CCk;Orw$Qui{@!h-1NNhkwJK|E4FsZx`AApSkvdkT)^2hnX7 z6X;bx>3m=}c7yjHy(V=StrftS6&TE(M0jVDTfq0eDGXD4v4s`XRHPZ=C&7 zqRI2$SgsvwCmiustTcO|FC8i}vgO>H2?upKcO}KMb(^Ot^nNEH9%m4GZ%T|_F+%ST z&{!6s*Bht?OalHULoiGN(vzGe;Ga^Hx&(X!_nv~k`4aGdhzay60r&hjcIcZ?787e5q#KQq=E3N2kZyN<5<1x zo}9W+%*NKVP8zi|t&0s!%btsgq>Jds3Cvp=RIL9_j5{$Z)=G>!i;C3+Mgyi>{g+Tp zLcAaJBy{~!5SX+sTtXsJ4nc;N!(!v7Ex=vBAsd}Hjm2vt%v%|?jhWzvSNVtqme zB+sXqXGbKy4T_W;#hfzQ*9F0(AmV=5D$GPUat|MftTSvBfv2%D(oBStwgW{?wuIb6 zIHuboILk{^H>QAmC?S4k5RlJLj5aX>vV_L62*`L44VZk~$&d@PJNkTQkRe0 zx%U)Wy>ENCPfVa!`M75XY!4^mSo4izRqTUz^Cut-|BiQZ1tAuBL<*an^-vUPrl6!j zk^HaBixmur zLO%6f$LWCyMccd=KE6R=?2x}2h3qMCb5P{u-{(bK10pAPhKV%q5RY~0$B>y3@5IW_ z=jGm+qCH!#E?;NK)yp-x8ZmZL#tu;nhsVIY6kR1VyTr)Yv(Q);8QTk>229>AV)%v0 zTY3_@h$+ZVTA8n=CUtrHbas~TlZ5j2@BPDZ{z)Y|<>X;DpDa6SkKZY(W{G;NPu7r` zw?-lCQ7kiWV)9He0bd~%1d@Vi`(afMjoQ{vi5h}Ze-JAjLr<0Izm92EQH(7ICkUVP z{iPn4tT%27zsZDXm|=tYSYqsm5q=dkmPPnQLTA7v-a`zuFo{P`a+Y{6p(b^S_X6%c z6G8756Xb&PI+$P6Ofa6 zv{d4(7|0p>fUif9QVPr;6x-QX@*>?7?4%$2fY9g?sZ+!8=p{7MLofqRW2JFubV;BI zL(T`D-Z7y_(%u^kU2Dl^J#-?_kSU^9(r*ush+dAaad$_Jd2^5vkI9d6f(X!aBM4 zB$hkfo~hwTuJj1uk-lR%&)zY3qcb_uWAwYj!;v0Jj3P0chFLV0g(F3SXTZ48^BHPk z+=!lpE?o)|lHBNp)TGXhc5&~SxX}(VfnN6wosS)B>B`s~f6UCv(6?V5g@P$CMxx*+ zD8G}Af^-01WxP{UqNDMu`*s1ux4;=UH0C5%q$%C$SFcFLbU9dpmFd%P3wj`IrC zUGeW5)lq~J;#FO->mQhT{q4Tutowe|6)p{MqUuVfsw)h`W54RkcR)7ozv9w->g1DP z)x|$|8xk=+vEb4pzx)cl;}TsQ+43tyF381t)^S{Z<(&07mR~s&jfss0eM9=KiGEe~ zXcb${(X`c9mh7URs~s|{-SVEHv<_R-$&%vFuf1}W)v9|X-C#ww|Fu`_&O49ydxbWv zzoFOCE7vX3O0Vz=qf$nz(Vjzk^IC&afUDfvP0BSdD`_AuYkSM7Y}MW^h*}<^00HHx zrzV<1+w1sn=&x2|9)(lxDmESCXMU*?O3BT2Nkr!PV!KsCNdu>Zf+^mRL3szs#n0-ziTrngg`|@yyWOS z|EWsZnzqQsP1B!46_k=J0U?V@Oku>xXuhvpl-bz%9i$dV4GuLmqXVwRXLNxVrz&kq z$W716t$D4u1MVUlH+tYg4j3VFmY1h!FzDAv?argeSc~mSYn(O0DJ&sUjB9J?_f#y@ zYpA0EP|BYG7F6hlf5MA6Uu$!HZ6tCpAWgehL}9XaV6d}&-vin{9NE5QKYh*iZJqfE z5U8|s2JXjNIju84fgeXVs`$6eK0`>>UPg)}mJi>) zNxF)W=zAWGWwCEY0mrm%9w{;5Wu~2BkcAmH>4~m$sC7%S+mVx%mZeuwle%T8#Jwk3 zFxjB*YAK2d^laSxhQ=t5VPU6;n3b^OWzvS0`D;-KoC4nj0v|D@&ZE{}&5K@A(6Dcb zeN2#C4tb=9O;;RC5~yanY{H+ha_*WQn@|K{OSO*@n&?vPH1^whV=;x<#}eXH24VIm ziPt(tn0*F~Wf5i;Oa@DaeSjeqCd24S&NA%l)TA!M-p9SC;3>Wgdykkv&oXR>A;WUm zxhUdbX_0^P24DU`)S{$-;ehbv@8yL91HzX_LYOM=Xm!raH)477vl29;P|)Vj7hh-b z=T$y`<{_9I`citG!zqNROsTCA*p-1pUx==fIWuB7^lCJgg+m9RGFUwNT!vK`kESP~ z3zmWwVI^0vIzJq0fILtnNccUeab8UuAE9ef(gv8~A6lpQF9wRw4)P)yggMObP?Hzs4> zpAbDWF!p9*w25KtPol9bj6EJigT>`*47e~ZPfv2@@~@#LbuM4w-cxWZpUaoU1bXK3 zJ43mAK4y33_WkI<;QDWhT9_1Yl;ZbJQtrRtS6YFFL8<>7{ zyQkh_o!AwBBGxHWtP{iV*pGGkF^I3ZQ8@h^?s3jI)499qM%2ZqZEP0R(ecAy3vbL*2UGnr1ii zRGe|b4}H4UYSmpwH&_Mhf9R9ld1wA`t=xw7H})C=Rn|hF#L7!N7^S$S83Y%ZAvB&* zeY#!c_!~s+G!dWEsuk#Wh28Q;f#@Hz?Wu}WthVdprO9rsi-Xn`igZFBB{bi13Z-JJ zh#m_2ij8uujgX}II>Lu2ngPo*;*D7Fvk)Y9OSm8QL2KUe&4*JvE(uPNP`SLZ-~-322RW6@Wt< zh$9oxVFbJQPQCd3ar9nCh5$Q~%0>f)1@iquYd<=6nsxMw0IEqB(OS*Hj-1*F)^Io? zr({2Ujhwp6a4=Zd>yhYfDiGV_A56JctI9yMKZK7{=Y{NzUB;|4@@UcmEjoo`QS%-2EeB z0zGs0UyJANM|%IF2$H48pbyrNPAA_GfiNl7cfh36f9Hj#M}c(mcgtbI!+)AuI{8g> z>p&5MEuDr5)w)P0zZ+9Jtx1Tc8Kl$I=qj1tBt|;jfW~r`P8x^?Q#xJF01T5(^dx8L zw1t|~rPHO{dkXI5OQ(y(1bUWEW4d(8Zl6*F#L^`1#trWOVAO)7fZu>||L5n02Lr7&6jm|Xsa47@NdPfv2@^1nt+>Rf(5_nv}F`CPswCeSmNe=wBG=iwVrG{g+Q zkNp_D|M#PoDFsvqjQ77SFYFi)-v9gIFC8j8w`Ij&6DsPm z;>w^$A~*w6Zv1URbj~0*zK|HbV&uj@ps_4+qc>0urVRNk12Rm8(36~H$PcJVU50#$ zdr!gbd>Qf=VgfzOkh^plVtXkPx_4PvmH?hb$+&g%YGYdwP zt@)1cvx$34GpHCj4Xw6#kF{W=h&0~_kx*J}?^Yl^#rEDSKex%x`{d{S{FyMu_cr_} z870NU_{J``jpUuvWC+t*20|d#*L%$QhA0#`Cg#_UzB2>J?4Emz`Q;e26EVM;VtyHh z$9~N31c=Ce6c-iqOLzR3UwY&caU9v0U!oF(PTd<9^XtA81-@24xj?nPUW~6QxBsyF z3iCTFg{<>{Q@ORh72j_M^f5(mWO}p;9>5hr< zQISG#f4Nc-2@0{UgnM(;Rk>A|bXqN^p_X}=_e`CudmE6sQGQbtDBa(+2;+t{Gcmcz z3Jn(KFy0n5j3oS|v$%@Hj0+v38~6XmJUUnO0Qd#DuXrndAaHv(87i%?)S_o6AfVq?1UZDHdiLwRXKQ zMYRcqE~9jbpdv#W$Iy(^D&Q1Hy)fOV&8bARLcj9XeK;UOZcH^quRS5JA>x@haJk0=>Nru-&EoT}sv^o;BxWS{vk8UEEO=;;G!3F}Bz;DYB>n3XC;$Kw+K$6| zM5z9XA{)Wf-kQA4q^smz+V`&}yjZt(Q5R5}DXKJ>JB=8k~ug{xu5|PDfb3Yjc z5=qIsvJYLMAY;NaOi-8<`&iU!rJ-26Cqc5K9?A9w`XHG;6i%k=6ECWQi$$8x;E}EM zup&U4;(0-P9wAt(F~lin!AtU3C~@Y8Tn0f>$9*Hnv%(3|)_gmsDg#^qy2c{|u!7Hd zm5<2OsL#XojW)34CBoOG&04!LT6&&fjk7J@L(+=^m6CaN*xVy#2^To#=@$r!Octm_Wh7TB%#_8iE zcLE>oBrZ=tZtPrer|}i-%!&^eA7k!b@y8thp}Yc6te!pvKc2^A!n_a(+!HG{`(|&& z!;xK(YX?-cAjHrXr>MK4i(SAJ{RSHM31mJaqS@iN941B zHIeOtp+$hOL!(>^qlK;T;dq60%2hOiYC>3r0#ZrLiewse9Do~j(0&QN1JSN*VFU*L zYH`LXpb}1_Km~?Ka~&b44yXE%d&6c8EynEqW)2e&P3(GRaOF%z^RF#zNQGmbi9f72 zp=@sVl+B#5C8&*l9uo=KH15nFQ5A$Ob@iDFkAPll8D|4ZmGO?i>*zh@H)%={drCQ7 z=C*%wED(;t`Dk{bQo>eXO(UD>n3159z7C(uNneM_2iuc&)18(2dIna~ej1}8+tSJ6 zxV?*!RXYSzD>Q1w(p<5wFp<$9@YDe5ikl-qnnXjFAoYdGa;sHsYAb`nr1RMcYX<44 zbFK^t)T%)|Kxz!ZsVhVU34`f2+3O64JZvphQA-Xxxe+N0C?8VQ*{=+IEN7hRY!S|X zQL;`PSVmj)d$06byN(SL{kDPRF_d2^hU4$*!(@}J_{G-RWMb_BDTU%nt4 zKOch*VdEP!BZ`8Y#kEfKFEv&O9 zfroHN51eZSKZ@XwFTzk0^T#t4e+=loD>REoV1=!RF?^fhn3ebwcHvBR zVTR#xU>AOhDEOD?vV<;+=<;2{$$!J8<0&6X!*g%I3muQ*JPqIgZu(YYYVr^_cZi!h z=)M_u4!Uolt8X9XPFXkMPI;qAox0zm%RPA6W#x!^bVup(D!MQ`pbp&zE^Rk=OR@VC z#HDXr)YL4-!|sX;BJ9AHA+U4Z=C&xSjbK;gbS+OI&ve^^a??WM0DHSJaJCHUlIKPJn7;KYAK08iwrVst5XmQ=_DzOe1&&SJ{F zyWn04aCVd*i)gL0n0BWN+ZIWIH-tAtucn4Pd$z_QPlqJ$d1bEc2H49Dv23r)4c&f@ zbuk(UuF4nsvMQfTzA8jM8CS)W%EqdkLo&LHkA=h@7H?-xM?jX}eV|Agl&#%}f7{Sn zexTOjJNTBDcjbFltDWcP=Us8+^tzn?c+3L>=Zh}xE0!z8NyP6{{^nUk!%a~9RFd2%aUId>)Oe2igp2*Sj5}a%a zr$|h&b?n~F){AK|^%F2AF@|g!mU|=>(B1VX#>~ZBJ*x^~u@JEWpIv_psTFr_;)LR! zNpWWw9tVp1215Cp>2eKSuEfPx!Rg^4exNDb{4x^;z3g7XzsOyE*3{;1N&pcKSlszJ zDFLhQ!O=4EIv^mf(Q-61Zt&3VL7%pnGWu!7976BG4vePW_eM;I*yD~Ond#s&{nq-Jwts>V(I;$_x+ z6qH;mXHaLE9F;c+u@5{2BQ;xmRaA>fG!_Z>4Pv8%1gZ%lND*6n}$F>+ehYxM5vltXy3-4(iG)byEAE4eb z-Q0lB|kA5{obFxd)}GEY|R_+pJX|EflUW)`gB`N|`{lo`&on)w$x+qtU+- zC7}YpYfy!#xZb#gRN!Z*v@}yIO~(CD7NZLObiVm`CH9B&s8bdA8EgP8I+qpy+a2Pq zum2MYT(Pk?{MYI+ zScM@{P9TcaVGuaVTCz8AeOF;eClv&BhQTBqP8~jqAg&K(l&x{glSTw z*_t?0V#saiv16)RCQ4d?N8 zxgo+FSXFO2m1$*P6hiWdj>HgeU+$-PyR^rJdDq5LsZ9Gcpxyk4Se6RHsb`DOifAEf zbq?5u%2KNBuT~KI$hXB|ArZ1&0?emc*eZEv`jFv893D;+WkIp%zI9dGWl0^ask9!s zt$Ls@Q!qD4{~EPc0WYiOy01NOLgXj~Yyp9h+xk_IeQZfbl)tiFYL$*pA63QrXyhtB)fOS|ErLC%pVlE*Ig z@(6OawAIc-fJtGhLX0%UN{-^!LsKOr^eR?rGuCN-6EXYQkuJ?H##$Y=z4cWQP`0Jn zm$oBNS&1-qgF#|37laQ?a8b@{fSRYoL%rSQ#000S+UHdF!CFK+N$fO{WrRdNy;pT; zyI6!9&5&fIAJOAVd9s0rqeEMT{H!{n=54zUX(_n1{yTX}CfGk`{S*U$u%zwp1P=)T zfjDEOaGe$+OmC9YZal0lU>{29!*!J5|BYZ2iWl){}6=fDMbr?Afry#{cjx zmpRAYA@~dlLAlN*2!|Mi{K#zop1#9y1);peIJ58QxxE<{MeU?yXQ@C{b54s1ea#jh z%yBlqt*n|lMlAEl#gGD#Gs!~=tO@5&cGI1ex)mxQAMK}xloUkZc_VF4gJy@MLKpyLY$v6^03}HO!u|$K8f<`- zM;(RqEeJ0IOo8(-Gfl%3i46{ND$?esSQ(Npp)`7(GGQW174p1I;UFcMD8ce49cb`n zj8E>T)OxGc}j zDS=-??XNXT!kbenQ%d9^1&VSN-8b8lYX!#?2kAX;5ZLn^u%}*ZKx?neD^4}+zVE+H zWoO8Tzp3yn74R`tp5Mt4Yu<~I2t0WcTJ@CR`|`vBbMVwn`2OI1mIk<{cl1#}vwY+3 z`>8j*o=zx0KNvNp2!5ki%voNaU&}bY;J9H`B?6m`_c5F!S`KZ(ubD%kE}c^w&UC3Z zheKlv?kCWgRx@Xb7)fUZUO}2|4j*4Q#4qeGHmVDU+%E&jWA0b^`gL487snE&XYzS3 zUNyYaw+4}Bg+|1^uDPxCFZZZlttcC4mI{J3Tm4GHRSSi!TpnNZ*U8|0sbx!3YKtYR%+Ft#s3JKFB&dglL1DGr zo3Zzb(0&#Z7)(5U#)b%9pM?8K3iSom5L)#F)yIwzsGD%38HUTqAkPrXWiG`MzG=2u zh-x#%TKL>jUkf`3ND?lrqs=XiX^2H zHHy>Icp#NWx!bO_u4#f$n|17B9nyJ=9O;9blo-Bz)`1;=13aSMvmu1^C8 z_60_y#Goo7{G zyDbgTWAy@O=?)B>Ui2v9NToW)(VkvZM8V_GwD6)2)Kmhwg>~TLD4t4+)RQJlW=~B~ zXTE^&19yWe+R8O+{53L(V!8LgB#EEPktBS^|FdY-Q`Ihv!4-2X^sCz~|jJTYhKX!MB8|)$FzR`J85uxjCg38V4}j z|483w_3>kd;}{Yta$)k2NcV(GB)jR(N>KV*a8BWHv=5@vQ{t=M({wIScnbsluEGH- z@|CUSLjpK0W_RtqppKJSd3sC-EFBxud7kF0Onn@bjTwt!xubN-OYw=6#>@DlEjQH% zD3WVAZjHI8^7Th_mTo1!N>}_UzDq9EG52)-eg>DW+>7Y1CGN%i=n}qOit9ml8J@dKplP@T{Ow*wm&@sL1zoOG z_pYLESJUMhx(w506@EK=le-$<$7atPbJyStYCry%=0%A)+-K1fcZ9EN`8vwib$q>+ zuj~1G9j;;-j)UW%-y$aX4Z7?j<6@I8tLU?7$Na4E__L5?EQ^Z5K> zrA&VJkpePWle-ON7TXnA7Fz|%iirR|nL3X3)Ed;%iB@f@)o`2%82Ttux4h3$Rsmt8 zJE}%5gpH5`tDc=cJWw*b%dv{0v6W~{FkAXIdv<46eyKLfbOc2^QM(xE)qD8N*`b(a zYBCY;7^3+yYlc}o=zc)WC048M#dL$u*e=C1t$>=&m1}Sk$H5-)#jRSYIRE0pn&%^k z1I8}8C66Dz*qht1`%^?(%bmG8obKi3!fO_ca4^x9_qH@SQ~RbeccV4LEEB(;+WG|& zk?Ziy+s7>0V41Jzp^izwdW?m z!4V1Jorv%w+D`kN(vessR7Xc)nLuR3h7BqpyYAHIN2x^8y2)Z`#-Y+mLxnoNx zdp>6P#6sufI~Uv+;WtgmMOWgs0N`HSg-=)kb}U(LFBPWWx!8+fuZPXmb3yy34$PIa zhTz&O^U9EwDbLM}HfPIDrPLfP*W~il`IPipoRYrkx@)hxc@wVJkKU?%Uw^Is$NIH6 z1L;&poBL+`Ro&IDlXVLIKhc^xWu1P-I_F0=x*!+w1s(u%o|lIN?i0izUK5H1@rz-J zggw8BL$OT6rIFk0Pobo);?h2?vcA!&s6h&8UzW9d3eIQ3ZQS zkC2Sf9A$GSC{YwfFS63saAwglbS;kZ2e+V*Q4t9Q>mk=#LJXy#Yx3ZVz{o;GV5F#` zLGO9dlp}?GUIurY65!4 znVv?9L-J-}7**8uE|_P$NVWA1yHJ&9%QLfBBNR7oAw~QPDLol_qo`XNgSVna+^tZw zp+5^-El$~sgN5ZOM6Wp|Z>9Vbg-U0Z2P3Xefw889eTwLZ)58db(^nB}q4VqvsIG(p z$IJ}*G-D3t^-+UKBJRCYWqL2-WZAPkX4C_H26;O{3bOcv(7JSmW;7YuD@d5)u`?w2 z#oFuEUK_C2$Y;c3@XRn2DN*JA9t|(zM422q0e{a8;BzN9k0@M45$GU283liW^OV8z zA~}z-i;H9%d8om%ny4wiLw0f3k%!MTZKz65%${o=_l1*-LK*yXyJ7>BrU3&CAI*bd zNvf6M;7V!Tc3#A8p!Yrd)f)hv4HH)Ou)=Ml>$DtOclbdIR-CK**EBsDqx$VL48CVP zW3C>bhU`lTAteJ@PieMF3!P=SuEkX116f~3c3IvO|1I&tMA?x1Kvpui8G)?-gvPW$ z)>CL4W*F;1KaBOD%b}~M84&hli40ZsSNH-k+%F^^u0$E%{_!~ry#C&2+l4{O*|Q0t zy1PjMeRRYnSl~e(-eR2)x{&Y6_B7REd5$6pTR7x1QzrEYf$t(^*>tUqUr5*agpGTg zp{&swB3%>;ltH}YpM)MIX;lOULd$E^N^Kls;`fo02pozcl_*RJ-9sZ5h3@MOkUmAw zb4hMPIU60?0==0kg=5Q%!C|mCE5X?sL~1$t{3kK?v`|6t&Z{9gGWG((5dv5|K$5Eb*%eG|8>k9)0%-O7rwX%0-?_I4d z$>_2z%Q}!`TSk&+=jh#?*6hr94oPcUUnyW2+{Z@pK&^*&XOGZI38FWahd z6r=cNf^XeD+Nk~DPgehDSgPoS!WxR5&<;}^=JEwxi>NA~^Xr1Dd6r`xOyz{PQoY2SoRAo9<)E z4@@apn-o1{zr!j~#yav}VNy^LSqr{X5X=m+wt#!ZeqD$Sn2Fg0OiC$VT%fhNezwmI zMGmORFmiN&{R1^Zn95*MG4o$b1X7v!h=i^*|a4Q<%~YPW3ze)uCk z$coj_4rm-!<3=vss%ZLHjVnl13~)u<5Sd^Ph0^whCb$-`Vf+Esf>c0wYw<#EEsoZ( z*FT(BW-F@p9|4x)5#n8qrI4R7OL4hVyeeX^jVJ(Z*@;&(xricK0kfDlp|GfS;)=we zLs_krxS8|ODbY1Q~tb%ZhF0seQl)Pt6E>j^1rMrJqlws`2EyoTjy7nV;B@g ztEFHZiZ;OoMCEQDMSHm`Yur{j7(!l7b!e zQLvBSl`EWL0dhLWrBK0Q8#$(8wV&KxxVm)yRT;?z%n7!mL-yJn#gDMM#kQw5&mwF? zyQGM1V7S7B@-)SYB;6-J+TNqH($g4Ga>GN8BIU7z72Z}w+x);Y4355z!iZvU8-m8; zoLkhP_R%)-Suk(My3ol*0YXQflYQcpXRRr;t|4X$uWQ8gUzr?H0Kl0k1!$aSZPRNU z`5DtVS1DDfHuQN^kl!+>W=z^rJI_I7u>}BLg2JMz9XNIlb+vj&z|5Z+xv>p;=UNYO zCB3u7NAG-$rnbshQEZluB8ESvB(k!62-?L(xL>Js1)wFq)YF4`i{teP#UwUW5qgEa zfaSj|Qd=4HmFX~We+EHd?J!aKzOjz#r$bA>(NK6v=54&+U6Oy zSoPFauBTMi@X=FOrAj%(bVSgkVFF5z-Iz+tQ&3{V$Qo-mUqq(Z4e2Y9;X!`}XslyI zRE>`$KjQ&QsR~tJos2j(ZRx9*qq5la)hr5&s;{t|CQ(Ym8WZO~XpJmi%$ z)(#(yRpQY~X|$whB~2T7j8JGHVCHQYrqn9}<5X+hD-wZ5Xf+BglJdipiOSv1tDrTD9qSD=>!8CXvl!d zZBtQEcUp?YF$okXW|gme)Sc&eZPhdLJZx{pqAEE!We#PvDsB%~alaV3 zu?;Hj=RL%gRNQSoD(($j#W^D-DL5Q&jAZF&7t?}q7xn0;q6gjO( zMb5J$64c~_9_&m6JQ3+UH?xw$YN^U8gH}S=T22V%_c>4B^vVwrF{w+c>eI31-{?w@ z!aQO;T*XIiwiVxkqxhDbwu(yB(lHK|cn4=?l@EPXBDMn&`liAAQy#UZ4vE*pt3weN z+rju0#v0m?@ochI2~dV>w(FIl{ER8X^>*Q^E?h@tEY$?{VpJBJ!*>k|i>eC|7qjWA zRfYRF|NM~2O$(yuCQtpqBhZp6yvs)w?!QkcGbGU&^H^M92~@PLnowS{S64Mt^KLej zJ+`j)^lG!stro7b%SI6WZAUM{LOTBW@=b#uc;)o8+dNehYIt%mB2R|%0IBJ=BD~yI zgr0+z=^fu*#i5uEaK=)(0xjYwKxm^9rMRgmKmfUgxAPw=BG-MOCVU6sp?Lia`Fn|R z2|{yy2kKWy8Jml*Tf_}omlX*z?1r>RK+oMU9{oi-bMm|c{;|ZO{9{+ivX33O(dFfIIYF2E=`u~1G+nZ|nAWBE0BHO5_;J9x4A=AZOXqS~oL{*3X#FaY zqbqKludgpKG#fT5*te$MQ_WQ|!zmW>3)mC%a#pjjmH!UPDrrWCIHC5UPOY}8Un7vm z181;LIWhoYL;^NLy`4J2a!A$Tm+J+ZEP}~+`d*|OQvM=2GF8e3wUeGGI0F%FH>1#~2Ait$gNGA+~jjzGY4;hiWFNev`IEUGFsT}sCr`a9luunuLa{!0^2?~qMVGa>=9G2pv`9$QF z>Nrdk_*<6HWpl7kh=r<9eI_zb2ltXC7=R@h5SGBZ z(r>>bTZ_PDIK7$L2Q}{PXnj31>;tt*!(56#!Ti1DAUb^IhWf7KDAfT1Z4Nk-`i9EI zYkad|`L%#aop-AYSBLDwmJi;R1o>O_OF0&Hkr&b3m#D3Mi5R@)M_^x~OK*j-xr8ns zClJO*>2d=t?Z22VXX#R-%V+5FM|8QG=9yQ}dv#O&a-OHvntNB;?J|9&$D9Bvm(#4;-r0$SmRk@ zCTsjJQ4d(-8I*uEo~4Jf#v4G;mu6uGKMBc%;;aK-}56(igLA)d=M_9qr4=drI0N0$Kdo13LmQ?RxFP-^EdmWYwJ%lUc3!e;pfM3(K95zGrz|2rD4hCdM1H)-LUPAgT8slua!;VP7 zraWxNZp3`qp@(84SDr{q2nSTc79LXB(m=SHr4C0yvO`_$ z2B6!Sd<}i1B)Ak157_rcg3WPE1MTl^=Y*pD4k>xt9Uz1afwKX;&NPmdLXbG@6_zTn zgC5a7I(e99>N!gwEbF5?UUs7N${jC7bNsYN#@q2}Mac0nDw6q5mvG-n)gw@oULh}v z-Me-nR|*Vo9058E66fwFU__Pz*4SnuqcQKSZDDR~YgS$hP^gr8Of zB$4Y_Q1U(B@R0I8Z4HRiRd~`E&N#J^_{I!QzOFIX0_Qa&4 zi=0aFgf>dV>*PmaziN3S0rJUC=gc$Y7Yb{^T{^z2B5j3jNM}Z?{>zUl4HRbljZQM7 z*dDCGCzw5?Te3c-KB;d%ibO?cBOqoAToVQdfUHvrPBoZ$#@R#6F*=^JmD?>$A>99t zk#OWdS?@vDF(+jy4gbqixaIm;*TJXqQtA1_n+##|2aR2n=QL;xCybr62a_j7j`BH!tBocZqj(ud&7Z$y4(YqGC$m7;`{ty01=~od$*DhVe26gLR>KnSgB$pj_mvYsh zwWBTlmy@NSwW`PEVet!EOIdDCxLnQWdJ!6%vL0ucR?Y+V9wZdml4D#F16*wVDL&YD zQDcBUh{fE6V@9%Wu)3{aHKXALAFQrR9Be%wyjl@UyVex`c(h`@4U9+&y*J=biwOt4 zWic6yKSIrp9@=+NMUGTo@mzmL${Tg5_wTOJN$v=i(%FaXOn0O>mMJe9+oqUXj9y0# z^m@GHp=O^x^~k%NkDq$vaZdv9J|am>;c5yxaSL$=N{yxg*a)WT>u4K<{Nlcg>T5B1 zF&C{HKtfeJ)Yno7Xc6mSe3RxLyuoX=wQG|F0@7Zv>`eXZ76=*-1Uka@)TDqn_QXNx zb^u{$Y}i2O031GY6d@Iy3BynManAUrNR2~!ab8cc3``0OkYl!`dPNy@?j$aP*zN&4ro%Y&8xGhh#J5)N5N(i=H7UZ2NjtnKEmTB1d*^BJNR_ar zIs%Q46@TqPPnX;AxZR|KGoDhd({zIcZIOO8H(2kv9g#M(yl@ozVKsg-lBAFbyGV4QKts-&eQYXRqp1CElA}63%aC1n>IIZTZcNh8MiwY&}7O@Y}dJ4l~_3Z#&HF zkwr36iQh|>z2hcs8c7M>t*TXxWT z_QF3av*lFPHIpAGPT9YEIv9^r_J2L4THmG{wo?`%eQ3SCsI7L#y{&ZS(jDq(#nYKf zJf%vVxf~L99$oXzK<&I&$%NbSDqY9W{Vn0-0#p(>IF;oGB!pwhJR@Jf((j{@BzAtO zViBHwcB`K==J(mC{aKQB-%HYRS~`_E#R?eW$W_R*ZVv(nQ)IB}weU zmUPT0^xO;%fyO;1a62M@KSGjMDP~TY)g&D?$cot)xtP&pzL?4;tF&(nQ~=Y1dF&rp z;RQx-*BBx>SQwti)Yxv9s}fGpaL&`ENS6n2iCO%`c~JMGu*0C3`3ghR_UyyUMPSj}kCE+&cH3##0WviET3D=?+GO?-V#r;xEE&uwQt zac8DdBc=koqWj*deox@%<4HNsUT%vIId->Ol+&ouz>+4CY+{_`M_QLF5-~=iedtuU zHSoJhZ-vBGE>r-#;QGX0Bf0uVy8IJezCo9Nq02Yv@-4djU%GskF8@K7@8J@Q+w6+8 zSjqV-lpKrO{Fi|Rg>st%6wot#9NG1@1T^@~@{<53)@vbDh39pg!>!yf0(YI*wwzc- z!wcStwXWI;$?n0$S-GJ*?#c~4vPdSDcjbnp1l}l1sQi)gMn`FA;##>GqQPX|DE$U+ zG}}3Elq1br_C+t{+3l()YTs1+&^?|`#p8$W^ptAtpc{@K8a|l0ma_BJZtz=5C+_i7 z7f&aScuJKzvCOM9OpqOCy3fz65e$?8`Rvu1fXo{C?Gb5hg89EUH!FV>i8~yn$gA*8 z#gVHROG+q4R)_Dxjr_@YayDN~r}7P7`mTD&U$V6p$}z)g2O-}D_>xuY>s8AiW1R)_ z3%h&v{DLR)9H`&ej53>(^SMffRpsk@%2iFVswBdwwYk1$mH6^BUCz?wLApFlmsil` z5xTsZF0a8Q7LU^vUa?Lyi;`pUIJ1ETh4MH9q!iE}uLoFPOA^uGZQ6GOJk0==7Hxgz z^23g>sQXvA_Z8*#9vVx@?8Kwo-sLG(Qf`E@S;k0#s@#Hfi7l2DRm1saC<;k)KT%ho zee(?)zCl)_v(_7=vD{k5lJm8EHHYsi6`=N^30ygTf`;Jt=<@q?c@meH#r1l=tokb` zITmsKNMJ#s#5I8LUf?6H*xlK-EZ&tBE}|q=Ew8CC z?c1G>wly7PG`!%aqkYy_NRfP*E|1aWr|9xUx_llNcTI&}JI`J@&mK!_D(qus>)6N4 zy3)rM3GVW)sgQ8NG%-ZrkJK#o(p@pmVlP2q+?}A`FpJG}a2AV$zbY+HV%Hs^&(+DF zxTiQs&++sq9tY_4r0fT}B6q34k;Eb2IbY-x74<8hJ%5f}TN^e9}4BkxfR1 zd?zmKBdn;1oqAZ_3%38EvxyYPWr8TN8JAex6_>6ep1lbr$KtNs7+6p!cO`%edVHLR zb&T*0zJqf+z;*D-rOIz!Hziyon~}EbI<)0FFdAO)u7kCoWcp5AoJcm^aUicG0@YhC?`Et#9)s0d79Ci5pxWr=W zUGfQ2|5GSA7E}M$z=A@V`hdaqHT8^eji%nd9boFc;-|7zYo?x&wrlF!GWCpx7rv?g zZIbDaa13Vn zb>GW1+p$Ua75o2R9%{#9|G)1kRq76{`FOVKt=~p_L^f`#XSip4v+Wn?Bw^Zskv8G8 z_Y|NFWD9%`UC(whaTThNt7o^$ob8ZH>}>3gv{)omiRVMEj~+2iV_IPO?X5%ru%UPb z9mkE6QcF3U(lMBwnQ3Hin{pIh+7SGPri$&;$)sV&MKEqaMH=#@D z6mbJP$MVfE91dlB&etP;&{-3u(i@xdxr&Rn3S~#(;`HqT4h_I| zQW{^P&tiVZT6UPL#@%?u2QQXkAN94zhfjJoSmn1k#W^ujAh>p#U%wRj?enE7CLMk= zn)-V3T57b+Y<-FXB;LKE&Y?xTn)^|W=(>LTlXJ}c@$J%XF?bkg3r};3HA&4Brak504vK{h}xY#uHP;xr_QL7 zSwFB9iEi6_4iu}{+;9QMz|W@^jDpDyV4)KY;2l(%$9l>v7tFkUE=;WiKMXIGumb~~ zN|ETtnG|+3z%bl5_hOg_F!tukQIGF6sRp;}K68a>{SFFTKxHNr& z55fOZhoJuI6KQicS9qvWn#&c=-eZ>2@F?fc9j8;sfhPgzyIk3J;>3xEPMkX#1GP^; zPkQT8X}=O0B#+k@g2v0=t~o=rE)Qlq8)A%Z4jiK$ZF9Lw;uy-4DfEwRP-rbBx`rUo zh)f`jN$9IzQLI%RJ2zJ`eTS#PGCaW~Bhq}tHeqv>0Q<$2p0=^;3u)fm#rma%bRPRO zgw@PmQ|8Qum(PrCZq1B&-Kw?6M;d)jx+U}5^Y;X3P-f}c_BXFb6*2pp&q9$PlGX%z zNO9~#@QAUMZxLpUCi3}Qx`!V{<`+AlO@HZ4&6HgF(oUAJzc?h4C)~360*lzI196Ob z?2Ku@-PdE_AJ%6wr+{-Tl@^lJwtjXuSK%9vARdxCZDK#otjQmgYXzStn{+i+iwjAf z(`eUv^x%ETBfAdoJ#;j=cl7iK;v^2CA$`5sbftGwV*XS% zSMD><<|@@>@zl1X<(j#vC!035=?K) z%7^%_f)ngco6>jqrpFnZZH7H82|9gFkfZOW210nods{Y*VsbM^GD*8WBV4p?o6(z0 zQs^R??A_u!dVO}aGF>;ZS2tjqt^}ND-(ol)xs0W~waLgut&2x`w#BkGfhX>(AU^xit{9n6KrJ5zD=AG)Gj~fbSSbZe7hA3 z+ZEmtMv$wd2A-8Uqbs}w^WlN8uJA6O@XGGRc%XanD4fNn?nSr=%1FyjhV6b@FGLXm z9w_%YG#;q+n6@hoF0$9-bc2w~8az4Pn%Aj|w*&=GtX~7QLQW`>%+-rDq0ojYPq4D| zZlkU*eU@jYe{3TT=Hx+>J_O;*n~WQ0tGC$y8#E8wcH@T8sax*Iu^&A~U%FVuTY0=C z{#V}O2V&A`vIxK2%D)LNnHM~dwSa=@_jPcMw-<}qgmEu+p);~Y7V#F#6cJN zQ$~trQ=yu1msw@4g(Kp8Xw27emR2H6&yN(#WgJ_%7pGAcn6u$61vk%#l7i`R@KnDs zi(aJ{%uqGsy)a~MX8?VoVO_?tC8NtYTtE29u3#M5ke-F=TGB{oiU)~mTxELo-!I_w z@hHJgA-mhRZ|7=n;~lw;wo=@>b*pnzrN+jdhVOD4{ZyV$S)nwXPX*x1jXuiEr-pF4 z%clxiRr!<)&E)e@NP;zu2_NeY-L{RZXXs=da6U)}_=acQ1&+|s^HQMP&q3}RWHKac zHhkBW8QAUCJ{*+qEDa)S^m+{INEqF6@fTBeKwGrkH)!_c3bdkjILa_X3eA4 z1hNnJU1VL0Kki)f)qh`SU4q{ZSQp`HT}+orN>AKOmrL1`wRCeGU8d;M_13dsLC;%T z=#5+G@-#eq)Vhk^xSB3oar3;j9>1Qqw$UdSS(mdv{+n{)e@K`A!R5TQ26rE|dg$5Q zKT_mqJKjEE-HI!ky8}PYEn2(yk3Iay?fl1H{^Qe-()y)>bsabW-F4vrUmPlPG3T#B1FnA+PY1Ds{^b2(ZyP zn$%sJ!=f)jVp!O7d*w;h4gHnU;pcmr)=q~-j-#ZwKibHRG z^8QUaYBovUzqX;FYTEvYuG}bW>89;l3HX65kKWGOKNy&`-;~aHL9Bg?)iWha-x{In zE<-AQlO%o8&O&(HBz-+iS;p=yM$m9R^~hsE1FDFEwxTGWm1us0D2R0ZrlRmGyKlRV zII&_(gQ%%Ik~`*sW|^y2OBKpbC}t`N_d%jqo*gs`gCj$OjI)s@z!9bRxX=`D*qm7E#*`hY12$P$SA(=Y9M3x zPOng0?zCU!;6pkNwmz($Z%`j?q2sE8?{NvFHsYAB5s}1bEhTd-*5z8PCkRK_+kBK3 z1%G^qa;sV5I}rvdk@50697dh>;DN#u?v^%2UM1jVf;m*`&BsYSrwUHG0h@H8cr}=c zV@4}%tf&Gl(c@4B0=Uwk3Obwgu2zR^I@e4Sa7DjxsZDzKq{xLssJtCaq+NxGCtGk4 zRfzt@l`#L4Tu8%a3)ZKi;ZfW(vORE=Hp=1r%yrDK1QI>Q9Ey*$OnN(VWIcu=0&*z$ zNNB|nj)s3ah|s$(ow;L^DP^RyOM7nQc%g zc#Xp)kU*Vq0%=S@#5In8jjq>hOBJ}r!F8OrjZxP)yavOG(sUSN;;mP58kZ7ca(f_i z5t!27=tqDw??x3dJB>R~Bs}Y|PUEo`Ag(X6w2Ku9BjQ07ATaeKiY`$msaxLx|Q;%qpTn6b=81COFEQijw46zJ$QI`;7hxA(&HuoIo=PT%i=+)shYJ*D2{9N7+yjIDPr@1K(UEYr~X{a z!sF=FH=&3CoyukDLf5JH$E8!p8g(k&l6C6m0+}Ngo%&}jvxQct{t1eVpi}E_h!5S0 zlG*}?DmrXMHB4rUe+guZ77we)k9=~+VQVxp?62@|Dgpe~$kH4UBYOusZp2gJ23_evf>)yRDpRJDYlDn)F& zlwU&1%Tjl!4XF#e)cYn`=rmKzh)cbjnBk5zZ?b2?flIx74yA451+din?nZDKfhY#t zL}2WW`gUZrB72SR`phsEZiF3=1J1Jv0DZI!Yhy_Rp9grRi(>;+3r7X~fPhc`MVFg# z%iIQi3?|Y8~(B= zV70t(Hj){Hr>0f~ob3ZdGX|=n-vDQOXo=x$IC#BSn8nUMONnLk_S*UlB0~#Uww}?1 zv7g$%d#4)XmLG5fEl_MvdI;{M3q`ShB4gG?v3?YfV`Bw4KsJZy zdK}x|>8RQS$My`LrixWD!J1#!l^lgNgOF@@2O`-xLA7W8@W<>L2cC`8vk)T}&!(qs z5T1<>s~673$Sn=5A{yF?G`_0ugjqDdK{N!Ot*L0tIe4(?`6AGk5-N@UOyCHNEKagw zxHh2DfMo+vEuA-IJlaAK8jX=4JPvK$Uey*k`oaf?7QMl$eqP54Q2GBVUHy^xUqH}A z1sp=P(Sc9}6SfgNMKpm{W9-*2z*FI9uJD_dv~lp808KUUTW3L2YIVpDb#22^f~F=h zK-yS$JfNvDR3Z8o*W%(ZXREOJul0#&ped%MvuO`vs?|a`C-bPop+IuSxJJLfWun`W z32O>P1gz2XG0+O2HgmcGE~S@*&Sy#L>t3mFsRtSBM^ouKxYQX|Rt#(Os~0ZyR**oe z|Kfv7xyoI@rQXa*?^)~X!ljzQrQR1bUcPQ-=xqkwF%obo%^0n4xYS46pipoO-6fEK zOK}2eOhCjK`j0b#h@{tSOBEPH=Q>W?#;7rLufcGg{AF_&ml7`Z^+4u|CH3@cs3K-} z@vDrt^mfj(-9Q)r(-i-sESGlCWppA_Sh&=hI|DopE5<3nf43}1wqmvZ8ASw40k~Xg zb!$|(lvlU9Q{rWv2rMOBY9Np~V$rWRp^BLG>qZobC{Nhw_^|;6E+uB$J{YNy$)VxN zK#Prd!b;%d? zq%;LRb6cQ@#i)OGwJd0k{vAXS0s5EA-G#1yPeQfm(E<_nkO~2 zn7E)-zrjQ_Qg}lv?!V5;(z{!_zI35gU1(JcN4<4V3JW+xuZziRipi4=>1Uz3mUOwL z$k$yz!&RndxupxOT2;`hx4mNx0tfgf`;6T&TvcNzD}%2DDTBDy@?H_B0J=z@B}Dot zV%w$s5>j54x^J~1bz#?se?k^I&0I6$`tTny3m$0#WlxC%*N6FJO54T@V14*;AB+|9 z`v*jNYXiWFa{on4J{VmU07GaQUBz+?y6CFs9I$QzM5-Nh6{F;ZkFM(7hj7&FttVQRgya#we6bBipHD;W=|our~D=B@!$HSH-?>Wm+#sy7H!#roo)dw4#7 zm=Bb0KHzCkJKYqh5qEq9pi1pDgv}pN#rhKwP{p}X3-IBOeF}~SsA2_3xEtX#>j71- z)KRq=pvtGIDxl=`x{{-?W$S<{PS7UwW-rA7s3N7@0I1T_HaeinJFtpqXe-h%HJp;fCx4wNe*O9{F9D~ymf1|ARO>Mv1+=wDort3T&_6*kAKJ{Apf#rWIuT;3zbMGQ`8cnb3 z;8xFOWyP>=zk1 zFtJDdASH4`i-b(otW7Dq?mOU&VM!Z|AyjtJy@gxR9)5%DGb2K65JwKcuXjcHvf0 z;8s5qC_*t#0UmEzkZi?joktM?QvfbkTHP8IZl%|8%Q_KQO1RaZ1Tse~`t^@nW(#fp z@Bc=T2=RoTihtTYnu<-ceUMfYqmxq&K&#%~enUQN>hPZ3dyga~$du7L)VrL=N!2f? zp2>lWe+*>I7`4{lx6Gc7*7_`p2+&%bTQ792bpisZ&%2Kor1Xsa0h8!>0*FsT6)}5- zSE0x#TC02hlYxKbS|OP$RLycKQ_Y<=vD;|Y?6WbY>X~u~UiZ$a*s!%nmMWdR^pE6SEVy${Bd$Xsn#43NvzRm^8eHS6Kga{c$ zY`c_SLdwfwuQ#_Lbzv7%e_R$i%@i}@Vrq^V?nv_{dnO#Xn9Ao++BRMQi>dGO!6qR| zet;zIlGtK=7nc+RE{Rd{!p9|j5;~#2j&rMnN}`)CD(Un1 z%c2O?@}iPRTo8}CXjPz+{*h?LP)YRLGN6*ilk*Fe2l7jaO7iyE`VS&PE2yM#9QU+v z!w1L`{qRxwDfAP5XnQ$cvIi$MZSQ~AuCIltfnkl0~P?t?_JJWB^V zjSTTaol=FYG0jj*@<+3|Di&N4nd1Cl9*5nHb1{> z(ho}`K#2$g4aj(Rok1g}wmCfEh9eKPO18@c6R7p4nPd?W zS>iP^TD~3FW)eGwSCy+p^`{Dz2xr$wYy8eNa-m_lX1$8w8b$vf*ynMa- z(4a1Nj0C7lGe#>M)OGp60FG`#q2P50mp}s4#R;S_0TI_Bo?-$KNw3+KDsUZw>o{#2 zqpm}E4TckO=`g6vTd(9QE+wdIYanyQ0y>yN6*0St6DShXwy>^Z_YAG>8Con^xgP+L z864PRWM^g)wQ4S3Nzh&~h*Cwwz{yj9y8}fi#wozzmIcXHtk!lE5ikYda;4R+Q9)gL z9k;9#fu#g>y*iLNV$rX!Y?&>z`O*)g$SC^t8ubh|E$N^nR!Z zJ!&Feh}jr^iwUfg;s}t5=BPPp)2aRDLDagMKw(JyS^I87BT9K|I;#aI6C8x zQAB{w;Jl*I8Bri+E7aq%TGJLf1rryF2t-0 zF=G@+FPLEBPG8Jbrf12d3o+|L%!<`b#@4M{Icjv{ z9l3sEu6V{sl}$<}yLF?DFx|d=yLctHao(886-@7oLPFfKLcv&lDgbJABT}y%sH-tw ztK>3?jXe!D94VH|3;o7kBaJ|EqY z^JzjO!A>+=h8qvk0ZkT}*3pjJXBVxB^*9Y}5*Lwo_assVlpL5>2FiUG=(L1DCwYc< ztV{VNq`Yi-_p~8(VV8E_BnzEpiWzZf_l3-GN18X;GvUCcT|S4>w($a3+I_bl#B3bL zUojv=%6j{yYt|q~?J@SFPFM(*a~2FS3xH&_3^8M=0bPh$3=lI$$qOH1b_P13zK(ON z12LnUF2w8&_{*XQ)$&5jNL&z)I*;l+b z4)}>97ealZbo38AO=_p30%zuqk-(X$-G;CN8Mu&oq|;O z*|X!M-{o#49DsJS4L}RQsf|E1nT|u@fM^mEE7nj;@;H=$K%zBO0=o|stEN$<4fY_Z z)ncZYH!5Z+RZby2i2-WQn&^SMIptj8~ir$~iVBXMwq zPG4TjLlq6A>MUqatquW8SAjpfwRLOHnG*H2$A?dDQ6-Mw;-uxhJ_yQcS7G7-?cIec zME~Mi_TGykL8P#m*!A&fC$Vvx=0WYXScXjOxjnKmdCytd;KXiO%M z#soxM+j&0|h)86Yxj z{7)cr#gY>JU#KExXYu=txAb<-LyBYD0V~PPGwfO^Rh>hif}^)eNH~}&mgnu$$|?($ zsyW}|Lc2T|kBa@G=e~{okiK-VAEMqvxsr*gmFbqP!p5+V&wR09m*2-=DA*<_b1FHP zDwP(J)b4(EH&QQhjT)M6$r^f3Aalf`p?9{-7TTG}ttc|WbpF^uXlS9D z6NjMc`g*hJO7Et`{HbiN+-IK6RjSG2sclEgHIv|X$(dZ<1gx&%lR>e_m`(RO?*Woq z%glKT>2YIX+l=19!NFc5H)C)M(6`ChhMV{DI9ab@<|`(9XRwzlua$GCd#0Dyb+Z$W z-13l9=DCMNBNM4~rI@c(&Av_N=;P%A4t5C~KQdDm)B6L(G)5hMyk%i^bolKkB0z_8 z*}c$pcsec}KGvwi>6XkKZwzFPSakTKEwhDIhrbp@M$q9a3g0KYt1GHuGF!YakS$`= z8SibGIUJqw<0v9PXK-H8=!_`9!xifB67HrZetVd)4S-Wbb?nq@T1_f!8oqT56Te+@DvK$5e8q?J)*4X5oNNX z?lR8V>Ndt#UB+q3IIliWqKBUy1>IO@URO!Yy>oR7I^r*ARQ3b zLgJ4F%6%99wuJCE#c}9TehDcrTi*3Y0xWM6sSCR}{Z?7%G*iroi_>3ahC9-{$({)Z zE>80~l(vl*z~c1J`T!4sf*BC#7%%dW05UvG9t=GUKBallgR}f z$zz^PW>eKvI#pRx5TdvDR)NUT0toTxlL_NK)(>Mh`mq!JP;a3O@V!EW^Pc9mLj(a?bVpP`7FCi! zP`!}FpJzwo-M4$^t|Hse^a$TX*4Uaz1fJQpkWK54#-oP~MMgUsPwfT5L*aydbi`#0J2N^~=lVOtv_m$`ux^5#-CW+RvoQ zg~dnfSKt{=Tgm4#xhnp=l)ai+WE#8yw5X>kLwjwFayVYYh$_OMtx4m<`nvQg4967) z0b6V;4EMXRMIt-$DO?yD-Kd(GIXV!J4rG&|h6@a^q&eEo)|5LP^&xopa;G+x;hxYj zTm#T><8-)Y+QP#zdY6fh)LK8Kt2Gjv3uK{F1;@o*Z{y+`h}ejNquxVLG5$&j6kJ&P zDjcOHV;meMFmMeV)mdPdS{)MTTozx-)7btEL!^yz#{=y87gQno7Zq!V#HJae6%Ogjw?U!csJTlZaS|IRkj4Z=jGFIZ0ujkEwJlX()ST-$Z5yLT&AkT0 znc#OA(&epJaub*GB)0biGFL3grtd-(t$8lm?6b!hZ|Uuv7t-|t7t&R%NVqExGHXR3 zw)}xvbkLA5mMf;C#gqloF1d>3s&Vw-eaR!c4(~m5G`ZvO?MM2JJ9Zp8bYJq&j-z*o zSvj8q{AQpC#W)4{Sj&QBD^}~hC?a4Az~xG-TcZN9^g3=?Cjv`(65BrnGDj@>^{JNG zLaSf@4n-oq6LuPY>=ESfZZI~`KLau90yg}@>4p@cU*Jm+nS8O9?b%@1F{asEb*`39 z0LMD`V6KqL4`OCMP+F+Y6$=BE?5V+YzL*}w5)77Ka+v}1Y-+xgHwv1`}CyAK>q?%Q);^0vKq?Md!B zyl3~G14sAnxa-Ka8}2x`f6w44b76qmQArI9C9F!Zpq8}f!0tl__Z~R9ZMIy>RB*x^ z1@nQzWH-fxbvd%jk%i;E%gd2+pzw!* zh9E{S;Rh|71IJ7FI*JJJ61a7^(7l8#44@vx67N}qH{Tr;MUKTw=tC7T&%$1UA|rSS zD+*aB8;cdyFj;5p4rGfMb;gdCnZwZ;11KUuXK-H8=!__kzZE*CD7B_7bP6Ue$X|hp zXrv&Vc2aPPm8G8)==#!y{B_S7Z2ibMSy6W(e_hC*3JF$EUgId+t=Mzi+^&S^UJuo! zO@`>iqTp#B8hi~`nVv<#F66HZ`RhXdmKyT+jvyTn*Fy7a1LeL8JX=EGnc_HfDZhl2 zm#45FY(wh8CNI2A7COxoGh*_>tC-=AG;gwJ!hy*Pd=8~;;{}ks@ID{NAD|`!Ji~gx z!J>Gve*{Mni$yk`AQ%J~fRt$&1jrI%x*)(9K!A*r7d{B^uc0UE*KocaaQN0i1JYv` z4fwD4%cA(z@}dDra1gCJu`1AjKO~wlG$8%93~0d3Nvxr!%|d2wK2<)2RqdrblF-|G z>*{-2Lj%5ObAlG;abR}U5C|kg?vx5XY5F#|@B(}FJZh6PL{0`>6!Y1D6MT-RRH^HJ zIKc^q6Rg&NjLW5Pgb@IO6?S|(auA%38e-YlCPBqP`*0{rtA!}!*yL$=JLC|EL3h*z zVo)UxgxQN2y!$q!3d|RAbbYQcQ^bi*rZK(a&|ZUZWo0n4>BSE6{l#TgPdH>F3?Tsn z9cl?|)YBU)QQ=CHI#M)2`(33pRW0*YU71n1%|-gvF9A-BgYl}V@~l~1toO;7${@P5 zhT$W<+koNIQ;K1%E=s6G(7vwmEPbc9DiF`*F#*JD;IYoarqt@NQt3A68Lh3Yc#=TF zorg6K_R>ZQr-X@<6VZx^j6s`ntg3jd4Zw$66j_dmd>OQAEIs zDj##Lz=wxx=_Rl8S(^H~_r0Jssn@MS#PJ{vda>2@rC~*N^}@CO z2qe(z+xS*yTw}6<2aEoIliss3(}im_gKPbD(0KW}8KL1??ig(f9HSKu*ZM{q6bg=b zx&#`M38XOr5hI>YGJ%Ms*KA7_81dvfPTR()5l^qdaAsE>hHH82mE6;b)(lmndm7>d zt{2=Jpf2NaPoIk_Vs=lTjUuDCrzLjAusE*8KIMuIdI>y;OPrmBGr3B1;7d=BxRITi zNi=e1>brRiU@E~`M7IkKPsF^FN4eKsO|=9 zKXU1sHJe_wcy6)JdKkaXRmAFJpY>YxN&Px+7_MSgYbBKdHSZ{4rfHBq{;1nYPpOic zyA$2)YzQEr@LX>a2at#;@|IRIPAN8jKr71>p_STkV$}wlJL=gezjEh)o=1i~d zI&aSOb?=*wOVx%r>gvfr=7aM-Cq7 z-GYMwDW(c+CY=FD8t~j8-C+3BUJkMBJ;Va8>}9TzmDl;LMCnxCe*Xwl*X(_+xs~_% zE&JU=Jc^4Qnel$F8`Hg+?UYxV#i#boEdZ!iUg}~<$HzuT2CHVJYL~U2!oa(CQb8gj zjIUGK`CP&K>B!{J@Fag^e|(r?$Mh)+BI85vHxr|iQ-eeH>-!f(lUcNxw|0I3pOuTn zs`t~;(VD8>gULuz;s$hN-+3h^9#K?K8T zN#|IXDY{HSOd(JG{x(n@#%L?Q)Ur}^Y~`m=M1Za2I`Trdl~tc)H+%9nAXNSUpWu1( z-LCWGB4CZ4=7A~eom@#g&VKMU+POdHzLb6fypLvQ;U}TJM^dM0g9c||4{m>@makT5 z%Z8Le;S)t$)x&(COi!;q)`{uq6`oS1>FI+YfHw=`B|GiB9jAXOq(oFwr!l`lPpO~Y z9FUOTD4l)2r&&%=GD8C zU`vi-p|Zu8b_P9}!o1J3hje40Ow9w?;2%wsUQ&u@`$^NZahiyp6kL|97Wu?3_R9Tg z@k?E~Aq=I|oQs=ugWN2cMIne<=7_G$D2(GKvsek*N18U4wsTpIhs|Yi_6ZMU0JSSE zZDH-3{-UQXOMh9%A`dF*^q>6hW&W`^p5ygQKNeAozO&P#l8$#&e0#KHgX7Ij(hiKq z8Sq^+)G5PPgj0s~T?dL)b4x?MAC7>pRG|BF1!#ZhNbIHKXh!U%19g}-v0b_eE0J}w z-8kRGQlert=Hg&89ibixNvP?Alne+``1k^ft>j)ozp+rP8JSeUIGr=kFtJQw`=*5l zSsC-#orvxG1dB6oVl$^~WsB-ZbiO);#HTw+;#X@({BKwK>z_XByXuqrr>F1c^aA-0 zn{3Of+k~Muwr*h01~4=OW%g{qW>qq1TMU-)YTsf*g86ePpIR^~B{P$o$uT~kVOu%D z^7Fl+QpRlVw2439`6P^;3r5zQNx|{!H*!^@REAu@1w?BKsd*mmh1D*nW=$H-axQ}% zrr=?ismz?jE*Ux^rNU6rJJw!tf5Wb8 zED=0u$D|T|Iqn;nDEqNrjA^fL)DeK|+&8Z@E?0+7+xj>x-D|jZc|9l;ElX5bgzrGt z@FHI0A+kGZqByfhCmrj>G(wWtBh|8*n$JT!>?oBSrR3ZlNR>)l9qlljn+9&udQ$3i zDwn5?>6q3agF(iDW&_ywuY^tO{AQpywMbZ)S}9*lWhF(!XAgYVW?LHQD%7^IV)X8G z=6aY(S9%Sc-2|;xAZ1v^&us2=E?WaMz@F*m3QW`W-h+0Dx80_>3eSFR7i+S~-qdTm zV=wNK4i<;T@M3rEiS?!d=myifmH|#(=4!5|EN2Bw(fLi2B}P@Sk5x1pCX6C^~@NR z%$zx&>Nn2J<=`yRgaI?FnPLsfUuaY(mLT3W0K}=yV^h==1*#Ip9`Z8nGy{CCSPS^J zY`QiF{}iq(au?1Ngl6Zyt*v6XAgsVe?NN9VGdUpLkOl*mg7;#~`sA8b{MXTeq> zaAGt}M}lZxhrlpNu1A)HMiguTv4mqk?qKJO%)f8|;D1Gz;pYI{2_T?;@&A;7^*V zG6bYjhtX#yW)lYV2HM(_&CM`8WYuY>loZP5&!p3MuV~7=$q5Px2;@EP*vH8>s)Muk zKFwN6lWFKx3U{bwUa2cHiaH5$nmQGErf5Tq9+aN8Y?Xc*?!0Zox+2vfkx~qTc0i&y zKRP@2<9_DB#~{1|!@jeKWJO1*(6;N6GH1NdNp;RDU_hVI=9do_=2AcJkKPigmg)A7fsz-b&JoXfaM zB{UJ}vn20C;5w81o?l%=53dG(dgC~$n(ii@rfZ@-ukmzLEpC4vckYn7GfmPD#3;d+IvR8kG59h0{XYe528OIe&`g|`@1_L zh+*l~WF^#3#MGis#6h4SFJZ13m&+;v&bc=IKz@(uuVrKShV@V#4dXCqZw_hDo(_XX zCmEN@MT9|dQiyF*nDWPMEQLb-i>diEqoB~(VXT}?eX&^xOi8weT>?-OoPL_T(=jE* z8mpT2p{ev^QK?eF;u3zN*@2nGIup5futiP`7-knPKCX5X(+g}7mkPv#dD1R42XKbl zG1-{Jl#L9c*Hx1iEirRLh(PJK*Oc58oNyYT#`&I?pC=RQ(M{&saTf)hA{n*i>L1_yGKIKiNi?ym)BC!RB?E$n) zOkz~A-?~A$KOjCKcgr@XV!nH0xO!Ax{uv!FHxUoYq;#VLwgynk{-Cbx7UiTNgX)kQ z@^^m=8T?nYjZM`Ug-J`;I9N~Mchpc?<6NnJljA1~?TUT3C@O0Qd$1gYWCBbZi@I*;Uw$N<7tu}Hcoj6!ahb)7**2mc-sbhes`;;~T`B2z59 zg-|0!UGYq$YEUtQR4zJ8v=ec`tXabL4~W1ctjUZj zdXwfMPthdDLlCJ0UJJV3ridz}f2JES%j?l!;~}N3ez-S%g+ykxhA--Bh@u7>Jb7xj z?aBX}->71NtIcucC9K4eRYXoZf^le?cZ3tU`fu7^VJcsd=al6CO;2aB?_Y5?nKuj5 z)BX5cIG2E>B8X9;+-FE8i5VW{DjD^@tE7a~i6Al@M;doH$4np`F`)ZrQjiqpSvo;( zyo#Z8d{MSa1x%~W#lna_FQ6YPTYpQ()(wJlwMqcHMlLsqbKA60%m1FP{IV%YO{ju06eRnAQ4vUakqA$JWJljH}dI!}k&~j0Sd8yLgS~xmwfnJKnz} zCS0}&?}&6Lnnp{xI5f>q`)e9+(RI&?r5C$%74(4Xm_PjeH#{_ zuybj-mZ{dt9(<1Xp+eGIV`LF`jdiQ1RB4U%aUVDFWk=ac9l1T4?15?0<2-MG#T=5v z_k)fy#bKb7Qow+*eu3Z@H?2Swoc*5mJ847Khp~<dY@#9#mk7lpU;A!pH?2x6;kZxBmMEU)NTZ%28+xIV^z_<-50 zhD~kX!=+MXD72)ryN#&TDT4WaRIcB9FT&A}<0n1&?`x0KEiRqB*RKTCJG|S-!>A(W z-9{ETuY}!j^w`zNu%Oi^VBCpc`^CY;6mWF1kTGGIuk>x&!r<|a*t^Iwf~)Z}iRs*7 zT8`glXE(FGM+SkVClEbVa8Ab0)9Z9|TklbOe`u$80Vk(d5Ef;}4Z~I3CS{XSv+a81 zx6{d5IfsLX=?BMwQz1^lB6?cc#^L_-jQ;iVGzRe$sB!0mgkLz`?Jxh_pgFcZ)7&;b z615de(mnp0~w0pLsp8P9w1f}gpR?N{fwj|s4y zPr!C+Eo2KuRrg6;`}ux~S+Zy@mwC2SUYz@e@SsjOL-I*h*4$wIn%h!^%)-H1wN$Gf zC}z#Yw=PN!rL#Mn*2%EE`_ewPmD?txx=?~0Ln>lEmtjHt!PA9o!m5=P5MfQ6$zctx zIzUj1n`sxB-t7&$#Im!+LdQf4|cGBG@w zNlm84(lb+2Lz_ot#z!*a>CDW~kU7zNZtEa#&~`^mWqtA$43ysK^7CEYU2NCR zRp;}I*2H?O_fO&?xZp`}fh>gkKE=iK%R&4VagWx&4l2u6Yt(JEG*=Pr{36QWE#us( z(?ql}Ye-G>dsJk*2Y}T1c1v|mURkuHlBGH3@3~rVm1&%7kJCIW9*uJ~D=Us2#K*T{ z)o(j|@1d7GY&#={@vt#8IBXmr8rm{6bYs4H%dP#!t-0!8bQfaAeB5JQkqNhER%M2&DD~ zE$_MHQ|(QtFXUeCYonK8cjx}H+)0goji~u=VC)%5XSkX_z#HZIL(@hpf(^I=4Q$&6 zSeK&|o0*!MfIm`9z_LY)o?2!0=e5y!NxK!|t65prm*4@cDhGFJY<%TqzE2ly=H$?%fy{tr=~i%)>gk-{9i+&LDP*sOH`gRFn=S%ee+(L0^!c12Nv-scHlXVN6;|4bc**;-?Nj?U+Wf!C7~P(RDX_ntSW3tLZWid@qOxH0n08%m0JGakpX` zOYgkPXDHQ~!%|i((|rAj0J&>I^NUalF){>v^}WmAxy5Q4ZuV7IceR^Jq4a&%;7Xf(5Vbo0dI80I4B z@ySt4J!VESBa`W&%|k0?3KFHAvZ6cQj-m?}W8Z&`P;|$F_$i{IyE~{Xje^$CK{$8D zpx(BkSuv@%kaLjzmka9BYTqhTFmH@Lh}ucWqpYkrCLt}x$CcP{i)F}?`95@LDP8~l z&lQaHUQS7`@4sZ>ZiSFbR;x_|I%Hb!xBUyBCDWCg-Hx%;1?nt^5Wa{E`Cm-|1_xk+n;{)?5h z`n=qU$?QaSc=Kp>WHd82n$1kj%xoT^XnQ6#l^RZst`sjfN;_pu_neafwzP>t4;g6R zKPCk5I@G0|HAU2PPY)_f({8<&%egZK{r3I%^jlajH=(Mx)f8&KBl;j}70e!1RvcdL zxe%dt=NL2JV7q&wS-a8pWp0bCDN-Qtl6u{@3dX*lkF3}0{^i&r?vVyFrl9+(YrV`0 z06R!3( zZHzKA*@*@&^~_|mYPy$gX7aMtHZ%F%=-i}r9Da+HwfbfzL+0>Mdb7EC7%4x7R!(&^M&Y; zRx&$~db2+(80mSOlHQrXl10K5LM~aYGU*3{Nbk>=mqzxytzdG8il!^13iXBD&0E{( zW>_!x0i~B34I5GSKZh}B{9Z0sA(}Qu@pAtsJ}VG9{(e$51Iy;+o?dNU?m~2K(i)-D ztgO}N<&KPG$J5yOo~`43XZ;<=h#AeygBaOYG&IRn^;S@^U{JeGs(@=J!}xad^24A>!|q zIWvFS+%h=m8-Ev1+st%d#&*aW;%`9MCH1z?3x@t8A5pKj{h`?6?x6=UrkMMxYPrk; z{}RLk8f6>V>wi=5u;&8f?V*Py=6VUu}>)>i)Md294j#zHTocG70eVXD-JLB z6(Qp6C7h=_i^CNk$lsi*EEF=OS;XA!n_Eh$O68^bVkVWJ!+TrC$3{m6t0sQaN8X=$ ziFj> z+z@Em7-g<9fd(%1T;(&WF<-X1%0H~Oxyr9Z=O(Qy@ex+m>YJ-f4$YWTL+Q!MnUOSh zo*CIZG?5<1?lb0OW+*i_Jibyg-=nls)^vY_anbr8O^i+0xyru^0sMm?eu}8+o(w8W z({BA-g>z>N`t29dteEs$*tyErRrR)-<|^NhK8RWc^B=6NIOZxXM$?t(Xp3dYlKJ#h zfMj+eBL6+XNY|iZY+>Y`87x_BTp{F=)hd&ILlEgT$|bS~{=;B$hl;N&qzd(g+|AK8 zx*68XU3W3x_K!1_M#Dzb{Z}#ujo-`VDn!%9C|>S&;aN256@Mf8AZiuNud}k^ z@N!=jA|gLuEX)?OX@ucZ+4)?-8-pL292%Y!kMvP^&uK`yp!^DGkE}613qot>#hviJ zUmzI#Gkk=--gkUa?TCY_iN#}7osHj@IxfG2J&;-AD?u!wQO1#H1sj6dAUG}_kud(T zc+bd2iOYASet8JK)y5Enow3}cjDW^kMzrI9#DqHj84EWDnl?t6vHS`e7?VX0J!5&6 zYSNc&#xl6tW-K?Q19Cq66_M7V*vQISeKQs_Gc{xmA$N#Qr5YZdOizrAOpK>f+0l`S z?AT~}rNrfoRZ#| z!IDMD6+$jqtupB!4R5~?;bC1SSLnAB2%Z<`bS<|h_1lZCh3O%fsdqN1{e+ThXL{0af zL1k&$t@m;{cgCRKzKUkWq~F4Nx%a5*Z8dqhLts8Fbi#iSwF+i{l@*7VTL}@DFPqt1 z1yOl#Kz?F$a%ylWAS2!ri$Cd`9=|LtkhQ|zAg#~|4|`TH@ojt*y&m@aW6OyTF>oQ` z?I%NI!LO1w%ftTipkeoyM*{-;7~gW~nl=09 zgNHg3nD-uH_?pMmPpT31C8<#+v(*Nf!_F?M3Y9gMEuzic#e_5d*#%eKnl?t6UEG8Q z#$?y5_Wd+Dj|Ts9mG!&HQmR9%F?u3KfB=E8H0X% zH<}fbehWLhct}-mt7&%euh9olt6;vt%8Fxl(PI2tiD$N0hAf$vW&QCmda2Q{5q19>#-QAhehJTGb3Jo0t3U)#l}1PY+!=#@ zJC0^8v6uTZs(M>ZUhXeOA4IK!`FU1W9A0jyT=E5HqnY^y#L~;fV$~Z@9~~WpKxT=*3}Ok5 zGLAee_;@fIG|6p`OqeF2c#NzXiC>2LjHS0LOy(DWawu4k}C2ZvBjf zb7u_t?Kx;xO!_TsT>ew4dRt91mf7fosGYH7Sy^$+SXzv!D>2d*%aA4W5p+l^nVpy! zd_geMIZjFM%wWl~%oRc|S*;l8s!q%1OMA#a)*ktE2Ikbh1|{ew$aV7Uhdy3 zz0_#fh`Rql#-QMP zge41-D}-FKT4mB-F&jX7jdF?Xf!`QR?ofetg;b%wkh}T3Ho6(s%N^5S`c7(TljD*MfV3R_%-XxbRX%l#WPFeWPy+RMFOH3Q4$<&La2 zFZXUpL0r2+9A;&$J});rGMt$j9~~K)85u$X%E)FM(2C6Yu@OYPsr7Z=$;yhu*DZzEd}g*>${;B39>qE`JUYSu3=YKK zn6KV)Yrk=8t~yxp-+5-~tCzLH$3ey=^{{sd_WdXyKd*=Vv$1VE(`?A}!FFel_b_|T ztcC{51OA6W1MaKz>d`lx*&95_(}5e#G#fZ=1l=7sHOIa4)yV|@VjBbwJEJ(H&{u2C zz7IP!R|#p#ew7Ji{Bd)xsI_fe4`Um};=TjTjLG7Lo>y#BP42SIEAF9r#m{1zw&_)i z=N9{{hw*Fu<%es9Las1tROd`1W9IWlDqTEn8fS9&HB&ZIRntfrGr2t7s?Hf{vyhpa zPnAy@ICi|2uT~69+YR%ySzd6TnOS4^&Mm4Kb+RHZKz)1;dgWXULo8gi_ku*qURcMa zv2^(ebX~SlP0^?xgQ!ZQI#&^4jXwQq$tym1vHVGW?eU3|o+0D6WbL#GwAI>sE00#B z{Efi+e5x>8OU;^#)~7B(puoH7*g3R@58sWbLXbSJIpqcv2_h|Mh-7(5@%((QQthkO zs>O0Hl}~1KB4X8F_14}5vhF39HE^*$`Eo=+rHP)%gId0$C3K69%$fPqX0!&~dF0@MXkUO(P+8HwIh4zs%18X> zFm0qE*pn|$;h1|zR23(P9MVU$- z>kgmo{jZkclNG>++fV>uBr!)?=3iwGh-umI)PV9~i&b|i`BX|T){9}`^RiD(azb9v&p;)xje7h-%rVM(I zi=>DI{|oq2ZkWR{QP^DstzJX@V>wR$>?u_`DdGKo5%zB$D4s!dJym5Pb~|dGDw_rf zk4U*gWn-aOGcu`yVIt6OmW|V(27NPc)GBs_e!6Uyish=YHIW!hm2zcsW-vQ5lc-g5 z`3hiNNr!R?{$iqBscvZU1}ky~jO+F9DN18U930YM6SjLw zm2ASV``Lusk7Bje(;vR%S}NxXRijceGr5@@tV6EA)1pZ$&yF)WwqQjY`150eKUD&PL%i$MFWtFdWX+irmYfZkBSxkQv#2DjMyilC zU`@+dVKnB=YB`q?3)8909BgXEORDyZQ)qOulQjCcjz*nbb5@5$k>MwZr}axb+N477 zLhIV&lZ|W6bc++0o2Lgs+YYZepFtHduQ^vyB#0Dx&3W2!sf6d&*8_+?lk#oyO0+R( z^h%M}-hKlMFr|EIVcSE!Bni0Dn<*A%a&2_{Q(Ar9`~R>-(bj1L>#cBtDBI|5_=!m{p9}Y~ToLQn zK(3JaWlu19iehr=+QsYNW@YJRQ`eV1%e(6HJ>;_R#p{8X|MeUd=_l@FxF_Z+26}cn z$y}7gWviL^>#5}COL;TN^-}!Bmr~`_d}WLA5L<*tEmiYuHCd?5v%j|(<3s%h`;{Ch zr1PZm#o1)u=(OlxdL*PbZ-xjBqo&C zSzEkij!%v3l*_dH<$Z5BF~SQw7yn@1TSnr-7Go$eG&D3kGD1esIBce}&aE+a%ecFg zMQ);fca+_w_ik1mjErxNzlmE1OJ#GrGXFT%)dXR*6L`F<36R><)dbDCrDyeM0@>I7 z0-Ou&bfpuCDSs-aho9qKjn_r_Gq@;G5>uKFOtd#HKu6|8$32-74{a2d`~>+i8@Ug& zk^Gkv!VNh=9tdyykDO1{HI{ zEMy<5l;(1Uv-g9s!PvWp3k6m5q3s2YVitL#wR9p^929F>Gx_3~hpV4va>ySxs;RV5oUvuh=<9XY zjVorg(!0qcZRt2Gd+L#QsntF8$m6I`k=y$^DYwtk(RlsmG+D-1sSoNSi39|B7GQua zTMXomBCuIS94|ANo5!kgMb4%MITNMAY>y))zUdRb+)}@!R?aP2vj_=V*P{i95jA~7?^4N$dM8Yt&x=c-1gST2}l zPkQF>d;0;_rk)T(FKJ&;ujmb`j?^DT>dtji>YlrVQb$0GHl;4>l{&f+M(XUk8>Q}z zUa5OQr=*SwZjidOdpT39jBi6!sM!W#51ee^LY#< zBF=0m8MF7`U+bQg>1BAjAsD_th~d5MXyp3OdAWX5r?{R9?r`Wto!~0|-A$<78yXU^ zh5;uUF@TAD14{K7d{W}hF!@UXu+)HX3560Gnqi|)8^N;;jk%u8A4zfohw$b>nHa6 z1ll-NCdZ6@g=8L-h3S?^6~Z3~7O>4hD@LUVyp@>+(28(X6=#wo0KaRghwAkF1`m-O z(l-I>UMY86EwW!%WRz*C1lQdU47&o?y}1coS7};&SX@1+m_)z9SUJP4NSC(VUNzea zh;>}}463ko+>WW$DR%4@l5IUqBmw|#b0YwbZgJxBc*%X>b$#G4mK`GRK^3Bd(IPu~ zkj)Vk2_l6Cz)dkoXP;wH6S9OUe+W}hNt`klDh)fbwo#5u^l~84V}z^~TPD4|9A_Oz z5dkZ5d?d7j7#^~w7l_V7*7SAn-`%1x>f|>r$lAM@1Vl1OTFBaCtSr4W>H5+DS*w4U z2g@-4TBfq^`>B^=~{)EV#sn(90~xv9qolyjl?Rn}J@1A}OdL?>VecM7BYYn(GZu!H(vN5LEr zGoBFKxY1=J$^}4H+~w76tGL5%e1ju(@EA zC@PM1(0N)9b$oPZXQ+y2)h4b&IlqdGqf7GfMXDOIbJDswrZ+q1nA7`&^IHws%PQmxnEtJIt4q|E3jxomu21mAn*x~|3y z2kf|_H(BpG-_Tibm^UE!$%2C6gP+gbRjX97>66k3)!6vIq6p4tjDq8aK8HM|N{XiD zr)cin%TtKhyk6~*k*gSmV%0DU#oFu~J5dO$yZz3Fh~gX~+$$T%jB`SceA}xy3s&g1 z!_z}Yg-0IaaLRK9ERN2VO|}8oTrum~1Q8j2UO-3G z=pUe#xbf7iBUbv+89L;MK`~LG3H_Nnx~zvJ)-EOmlyU;Pt&@o z!UVJl62^wM-LZF7V~eZE-eB%QfjuF;%Oz3-qFr<3S?#mlLru~#$$Gm5DtD}&~nNGq^&m_yvNQ?vefF77X29c{GKTA zu}|bLUbD55Dd$Q+5nx~JZM{g_!LHOS4`J|hA)ByjIMNWQ(r0qWD5zrFd~E7*sj8_obrh0bVuI@R82oeKCnRGHvKaAB-fhDH*-swkpYM z3{j}^rf;d@4NdEllyU^urBkB0D@VQObz^B4UqXD_IA--8;dyQzHc|7Y*r zVr0wGGoiBk;&%HsGrr(q%s4ov+ikil&suA*>*;pe9$#>er)n&_@ieY(((8IMvLZ9G zBOO_kaKM%LQs`fB9lFIKLOu)h}9XoW@aFZFA#E zh?7${23P)KYx4*a>02A;Ec&gj;Mcdet?%we26Z(cjpBRjf1TF#QL9bQC&O?GO26IQ z1m#5>?&$jBvUOyO(e+!oz0}($s4Cdl)nYFj8=u?OVa#`nPi~CCS%s+UEY5%5=3bjO z^FOkAd;JHU#kw?M^*!eZEez9(?F+knW8>1UUnsNyem<;ki<_x&+1)N`DsVe9waY`a2}$eIbZ+UI4Vl}?~>)wAKw?tH~64qENndQnjO;Xe%IY)hzf;)WlJ5Lt2VR=ve_GFB% zhtuir&R&e-8+#k2+E-7;qv^dHruL3|8>jriyiyxAKaWcjd3(AVK~z6Ou=z5f;j zM4zl(BW&FEUw68q`2#%cimv^Tex7G}irW`#}Ax)q!}Fz@E)6MtC=Y z9EpmQCs4-*5U7WL?YIBA(>MO=ul@R8Iqk#~_#EsPK15F-AN%BDZtMU6@EUEQBdC=( zR_F;h62reY}j%Y@7U3G{XTxsd>V6W zR1B7TW(=3MvMQ>|GfsoiEU{KAp&73Qcs6e9m%HjY>RC&ud^VV9= zxsyh6CSoFn@}xBP8Ef>LUw`ATJPJ6peISQ9&gBZUr)}DRLjLXNs8PGDm&7->b<1hC zun@dXg4>#_Ypur4#m3uMYVK=@sy&KDC$XeBjnpM!qt*buUh=4RUERlslt9$_V4f7ds!86j>F47ovPExglZ3i{!l zmD~gtanBZvlw~skpdms&w}ADMo5TfTLcWSTGK$&C9T5yOHdZ1PJXBw}ol&ozHfMn( zmou@1i0W`$2@$Qu^1io2LAUp!=}Hi1(nLr`!s(mL-eg6JRPDpY>g)opM? z`&wnqa{K(Z2WL-z>%zYJ$kF4&L!CgPCm!lF1wHZ5fIg*zw+MMg$md71FVA0mX)s_X zLJen6r{7w@Au6p5krPtJzWb-JuqhFe)P8=Ys8Vs)r2cgYx{SrQEC7@r7^4)ZRAw?&`Y#e zxOm>kqym>hn2H!*nMA3q2wY0$>gCxN?R9_F{(xisCxpR<-}^h z4|qds;OD+lDx?cf0GKT3C1SxTxeLFf(_HLS`OgI zd+SsX(kfFxQTC=h(BKqMR6tPyMYyAGI15{#C@5QbuDq3mbKxWE01UXB^(!jCfy=nn z?L0)=OJ?uhwsUC@?sBQ^v7I|E36*VvNz#HDp%SSmk4W5er@WALl0_>OcU|2#j!vX5 z36-lQ(RG7=yFbCC6G#Ak^dXpZnu30SXN_R8to;JcS&V@%^F{$7i?`0?!v*y2KYJvw6QL)W+odQ-iia>J(cLfm@MASICf`|$t zY9_XzT3v?lK*a@8_t6@!IKi?j>fF`KGd0=}CToA&5THHy zOZ69?{;Io`qN2j86;t2qg`%*gTv=)1SAPiYDQI<+4gaV^i(0t<@M#u@9 zJaxQcgb9?jkX#J2#1BgRpz&%Yeo*2E&1Bd+ey|e~1>;BrqZ4aI9#B?S)r8MfX_s6I zD#y;Zz6oh7OHwFFh&KeQrR;3fAf^{T7{f&E5=}JOZ06I&R z4S+)h4`t`#fy=KFA}S%G5+cGKwF?h1PACZ#;ReLqAcIXYf`{O-P-8-=Y%ZlJzs+UO zx3tH5`pAvY&@mV$QlR96Xp0(M$C=blafW4n&=euS(3|Bln6`IRjL}LnS=ac(f88D&e7K zGVC25x{Y3GW}Xc-A?+#3O;CC@?yx zPTUx8jfuo_?E`Wt#Ff}V7Ppny!E*UmoMmyA{hj5`*Z~o!OEC~Nai~rS-Z&p4OFC%an9iN5_n(f~B@bcaj7O5#%9A(3K!W&_FFu4$UJozNQdN9ty#v6G#Ak z^dXpZnu30SXN_R8rF3#N^ly*iF0GTryC+v~kDfv7MBj*=)O`@7hjb4?BPeCHwl-;~ zpI{NE9D+=l*<6rQK~9acEXb)Kr)DzT89A|tZeIvKa3vBqNWU;ey|gwem?N1Aaynkm z_*XzhQIbQDJu!4043HzG28h1JMs96%C!pHJM(Ol%dpOrQ8->y&X@I^j1!WVR6H&#&K;1;i zdIfGutb15*5~WJ`po9+^*HFR-C4A6KhC7E33>3&yMI1_d8L!Z%E@}m(R4uJRIcT=l zVVP$yY?PxUVEV980@@2gI16P*=>HDJt#u((6`JsnL{Y$!6VA$$H69V($sgb=4;U=( zlB2UxI`IU6$$g2PbXto&KoEv3$tX*)6B?-%!XtJ7v6G0ZD*3KTj97bOY7ICTtBAkEQk$9fT~K#)?ATqvKdQ$p!>$*92CJo)AGjqBVdDK8)v zkR+5*vLxljfJ=KZ7fv}!Mx_f#0DSb}qI8;qet2h%i*k$Di6hbi#zW=AB6_JgO6nwp zC(&F7JuIMpQt(i2E|!9&Wz4*UhzcIMKRm>(fz8o~RznDba0&LN4IsS1H zH$<8%8^ZAN`D(-78ME8yB_vWr44@{D-Z|*$RT<%`%0ZrzGbQp1v_daAN!;P(S<4K5UIPu2wC z84Q$?(p7X91>sQuqV3GkVa&_}ZPP1As7OWumj<0uPiDyXTM40lFNShsmfgNGg*$^@7(hEf_$birE) z>gH-)w!y~H0ujA-TzU|0_aLk)=tU40EJa5Z%Zyb<1t%4aR_Q7iYAUGdC>gaQ^dRg6 z5V7P%j| zLMth?(tEJ<9<1-EvtbDF@(FC&Rs@N$Akc^vDklo9TNq@)7}a%k62Z!h@*E?s@K287 zEf3(IbOwlU#aH~3&K%s@Xq52Z4x@JQPda_v9xipB@kInv63Pkwd61*(Sb--bndBv! zT!b7gr4Rok%EaLR6btAn2+?gVp$vxR0Lt?uw9LVr!ao6YykTRt3v#ndv^ykM zmJ{pf{F6>R0bp`p@+O_uVh<36AxrwnQr;vm0e(0Nt7HghZV{~Y42{1cRF}|Kn&&ct z1rilV)ZE7f5*0|)Oolr{B5x(HgX+e>_Gky4H(B`@A#(!vDr_#AS@I}Hq2eAx-bAPb zQW3|+w1^Bv=*EL#q$recsWnhK0S?$CT$en`Q6fXf$fI-t34o72?2}GY&=2pdu}^N1 zH-Sit=9LU}D@{}ZNRx=OnrUGANMh;7JeSAWlG-Wxl;ygn;Gu$t?hg;4bC<86e_@nF zZxtqOq$x-eD_x;Qs>y|j3Lbhec!*L6nLs^4N~Sm(=D^KJ^tpAY)2^M(E-}Bt#=Y-= zQGL%WgGC`u{bYDG8;&pQuc=djV-# z@ldBJ=!u7R$eYj;rd#xqNR^0*5NU$v4h;ch6@)UCa0EJqDOV0q!b2rI)Of%GhYB2O zCd1z0q1)&s0Vb(}-y}?Hj^;Ur$||a4kkt2(qs#^o+FfRPkzw0|v$CPn8T5`}_`mby zG>k7!{m4$Iv6fPJt0pt7acOJ!u(fbn%W`yn+s*zOmD2Wc9hNs+`~G)^@!k3>_S8r{ zfL_uW0m4aJ(Mvj0Y-^)C(bO(_NvDt7!?VumC6(jRfe9W#6y_9t=PJb+qag*&&_+kj z=gHzCFE3$nmc>~%_OUq2;w+oVu(z|^C2zt4Y*WCRaMQ$WI3|i zGI3t$B}a)N^r4ps5+d>3C*>H2q^*`tAa7Fl(qYQETzzAqm%zb3CVELHo&YepH+hpz zbFl{s!jL7uWF>DxeMI~cncTY6T;XLvivu){hU}Zegf5^cw=O6NmF1mWKv4ljjak1l zC_-=3Xy8;6v#8Z|&_!iRD-}@9f-X9VWvo$2s2l|h9fx3o9)qH0Q`c%HwW^5|6k2d8 zm?)#l^=c~wlZQeuL45CaAOZBzhhWla3i<(_HG;{OyvfygI(t5e({GQyXs0hO{nhhl zPoFL~KD$EH@RvtpZ%1bs_e}7LJ)K3o8c?znJgJv*i5h1EX0{dqDPg>%PC^9*?KE@L zxDs3{!KKD^793S@R5KawjH3`u5)KMt5D-&%qEN;_M=;KiCq~_`EjS9vpH?~ruyQ;1 zbKn~970ASCj+`1;kl<~EFnOxSt;HZa!qdI{^PaM^03VPzGf!I(y zA>}AD4s03V@jlh4cc8uihcs1?go`h1Q$S508!%u3m__hsF@6V z1ESlgDYg>m0tSArqn>l(oTiK>nG8C`(?D`1!A1GxC~os0YD!1!2ySdeP3cU}t&Q%) zQ@f}sojz_4-@2ftD2pO18qhS@b7c`3i^4bx?Nl`LjW(A~EY7kx%f>zyXIY$OGa2@F zmb<7a=x%|YUyvvi&>lzrMLQ&9h(a+aF%UA$6+RSd%IIE8?>3?ceW)oxheV@Rh(%i- zYO*5>)SzoXWh>884(1eU%44IZbm0jAllxLW>9iJmfFKN6GEe=^h1sDU|6Bk zMdF4yG`kS2f(%nG$W1rXjEq_IYJv6% z&q1O>OnETG6hI_O!Mv_$LYKmnOi0!n>(Igk(%mt){4NQVqeO;|Q0dzVBmh485K}r$ zK|j2+MohUy`NRo>VgV2BW{y_jCYVqW9?;aHLdZym9IP*RsNkW-1r|J1@K7@u?u>_Y za6Y1PNdOaZ<)IuO(BwCIDkL;eWWhrZnqU%Rw3UOfmS&FYD6Fa=qpLtTf$FFvxz^hS z4?Pq-)CnYd;-OAc&=U{sP(ESn$|uQU^;Jo<@Jdj0rl`52L53uWl$uuAN`V503LI)Y zV1Yvg4mFcuZ#Z-ty+n}|5usMdl{qdb(*!laLP7n+Lm-#tDk%%STj&FK^tXIY$O zV;_sNEY7l-40}7vUGx&kDkUITXcI&WRbBjvicm_Vh=PEtkc+k#ddbIzUV=D)54BcJ zs5lQ=7)ucaViIlMg`qK5T2$yIkBnX-yYK{n$-OC`befAjP!NVJ`6Z3=iBEM;LFIIS z5>pZeslHm#M{^>;drLV1rUHrzC~Ev*0YwEAHIw1apokDBp#>)qXJ?$UXlfopc4{WWov{=6w?RWL4nCD}V}b=o0or1kI6~lL zcj<~f3K`vPmhoXq^B-Te6Bm5&BGw&EB!|q2Q$%oM6U0ivPq8%PYYG|VD0#IbV5d$X z(Gxp$nu4C#X;A5>f(+i8i=2FZH2d<6+6iUV2_r4J6Qe6I;Eb<(qH;>HeuF>{ud5}s zXN;6`CETX>rm?iZl1m(KN5kirr**50*j`2~HVevZ&DPoYs{Qfx-G$*4i+~ra0W}6%|LZiNdDUvu^T{xr+DWXn z18;u*V$=0(jKdvWUtG41Z1q-dFZD+z<99d5FZQyr|L3-K81voYlN)1jR&g}5IRAZ{ zdu`s#|H$U;^&eCaQFEC$rq|lMdS^Hty5VRztEbX!d=%omQ)qWWC9l_L5t81)L!?un zQFA~8JA8broo~BiO}pJq{Z+R%$7v5Pop=@yY}rJnX89~_l^efzI-R{(Wb^9gb^dHP z3X@njvwN$>FzE~!;iD@)N@q@PZFDD~+Qmod^l^JQ*LnB=XdM}(QIwsa=tg+LwW3rD3elQija4XJQMs;eg^$wXir%3G;gYr0fFCXr}v$i>|!!l=g07%DRqjUlZT);kTlulF75AUq8QErhtL4cB|Xe#K(TW(`A zj>zN_Qh;cd>S-Om-?Tsl4;^ZA7H4h=(@Q>OggIUEDQk(Z3p;r}tfSO7kpL{GPB#%( zy$#-PcGem;yxbm!Z5zYJ?mYV0X&SatZ8zJ{g=;t)j$2MkZcq`tsu=@G0?!dio&7!B{2+C6D$l$>|iTs zcOX75v4g_Jd~sTw`W5sOfaN5fWvPMmd#oMXtR5TQ(6#{jZP#u_aX=Z_+v zl0TS_GKSEHUJ?vMO$VGYJ~4(1ek$tv=8%xJ-KVlCs=?pXAa zPCNl%a&K}co#tW>6oes5en}&DqEI(wp^OR1q);P851YS%Nv9F+(MSP$CE= zg3z3S5-a`?U)^d~;I<7!METW(j;dTh8@`}n`MV*fV5N&6MK1wij41!6e zIGO`gXpf6mAs{wHeUMzU3Q2v&RL0kolHH@khK^9O+X*CqKKc+$I!!@8z_Ug$*^)b% zMATtI>||5tL{`c?CC>%}!EPi@kOp)t(ZE?15I*8i&&3qRbF46_OAzT^+ntsmQVAlJ zAku2tycI-3Y`m6(OK3cpIGV&GO) z++6H=h)|grG|JB^B>1^SyIZs%Oh(&ORY`lDlhZ1A>7n4IP9V`2FLjxMo_J}%WLDyY z33{Sri-Q9GKO<;s5mBj)5+z|%tiz#JJ9Pa*NGXHrO9ZJzkeZ-D;h>ZVQZpI$jv(E} zL6K0T0Q=2q?@is-L`R0!%+3GW}XIM+F(13BCwW#|L5nrqG-nk3kY1%+))g;LL(U4Rr0%92J^ive*2wBWHJ7d}{K*B?d7C4Vp9l z9IGk{OT@T`bdM{Ls6e73k-DfmE)uCnFX{D_Aq)u=jsI~G!0|+zdr2IO6lBH4E{?*Z zfJ2X;fr1RZQJhMKoEb+W03&gAIYH-1g>`w%L8g*XIZ9;c2n>`?AOY~vi-FQ*3i{!l zH3rHp5+?yvHyMH91C-(|(tH-}P-U!SE&7Hon+c2UR5u`mhD?~D#p~Jx33a)WRvdg43)rrnMf6qyr zAooCwg}@0Km!K;Ng|aa?jb1`BS4e7h@vYw|l5aU5v^Lq^8OC?(`E)&s*;%{@Keg3# zmIX`qCV$%nBzoeZPE*hm5ABdRL0qU!FQLjhF9Yh5Y~av((;;!jTqL@t;j&z%U7?p0 zdP(B}OUA6gp=L7N3%!JEiteX`3Q?0x(4_%?(r0zEtl7Nn8>7av<#mBdU4z0CLIVAp# z2s|ZeB$VMHQ-fs}x*^3J%qjGe9#`}Z(Sjv!X&Es%n#4&bo&YepH;I$bWiIwWK^U^+ zmoyS5R2m~uWF9J%>^jiG8Dx6USP&fr6M75g%uoSE1r#;5xqzYqikiuAXHb+BVwnj& zchSUxr-&dsfqSi#hN!qpHpjUw36<-s7qbV^L&sJ|s30oiRmH7fMjJz_N_aF~hD2O0 zd0z-7M~Mv`fnd@JB!E8p5KKBvK|jE=MljiuIJtN+{r2dKcKYJdU%Y_S$z(j9ZOWZM zy-+=!#pw)+Cq~{Vo=}hJYne?*4)TPI3jsT&Rv17%x)w5LunK%C@Tu{b1wIw{)J%pu z!zT!KM{dv}-aCu-%-*2)m(+&oio#5(TspYGrw0R{1e)y-=(7hxJl8I0LK8Zx@Bq|=43#aT9!VQ*)-i;)s5f}Y{X{5q;3aDr5@VbXbY?X`(Ym8)i1=Gq@c zg>U{~9*p2glq3Xe(b`la5)GvYLK$=?A?~JZNV()nVWd1ZMoJf+05G{P!IMsFu?Gmk zkR>5yDR|rN?S=pLb!-%7Hv%y&Xq(g$Ck}nKp(DW)dX*^1{>5GNp(1#a^+9(iVX9H)@>1WI;7KQt=!u6q zO+imQv=Tg_pC8S>Ovp1rzBCxn6KbYUhqG@znP<$vc1j9*lh&JB4;Lj$)Ib15Q5Gui zd~S-C@K6a4H6F0Qp#q1R$*^~L=r(#u@Q{$uDn;uw56q*5j)^ofFCiL6Wa+1KIeRr( zmYTG)beeAb-syDqVpK1WpFDvl@@Ky2nbZS=mJ2w!oS1ere13Ua&-B<{6f8Cm(Z6N7x?vU@r*Tx5wcXrA zZafKba_Yvj+4y2>^C+g)O51@sBGA?C{E3c+Lp?j2~GUO_^I(PTVH5?u%rN2RWl7Cq@W02JCS zC#hkCHW%Q9VDexHCS5=RCZrF+q|+4i13YU4lP$p$$eqC9e$fuci&xM*!GE)htNP#B zi!o$O-1KR{zs36}!95#brFJ8Gf|6bbc_t>%57Auc$9%1Oq#F(z2TD?_7z ziHd5MFvg=OTG~c~A7w=8D6AAGh=sN;;iTfxLgGdSMi@d*Q3?}sk*5Np9tw!+1QI<# zRHrHE38DsqG_ogcUJ9>HD%O%cfqb|0(x5FWq~9QF=qwswR23TXXa(z3Qf;u;+kyH6 zS8gS$gdp1J`r@(`FMB>2hEsbz8=t1p_}!JWTy39>-`yO)*vrP?=e89bn|~ai+!)jJ zTDFsDH}~4Sng5Z^+v`850HXeY=r&%8_UHxXwDFZ=oKfPKB7#(aNun00&k1`M*^{HV z%>#HToq;2`u@x_+GdH(3T6W>7UA&Y|AGe2Zo#S-`I%R_F35euSnvdE-lgG+r5>Y96 zQo-14hQ&(sphOQE`&gm}#aT9!;m*;6IyjHg6_=n9#)WY%_)1p6Dy6-$CZ`X!%(y>_ z2txi~KFTP`ik7;T?Bp!*gC#YlK%xSP?hz7I+6rkPg#pP_6`fP)*kV$m4$bX^D+!ecUFPc? zM>jb_acw2{kc=aY2u&+^9UFqr^(-j~m7_$4j!@>?2_yhMda+WvOhG@qv&KrfMfOA! z=`5(_o@t8is92p<3XQ?gXb1J_p(?$a3mz&g-NMp^@p%<2T>$|M=!EGcD|k#RbtQ#U zT1gwA0%vp9Xq%VOu0+b-z3ruTdvLY{NEvC@z74$6UJJyCmLeh!Urgw2*Cl^E!ED3TDmX@ zCP|J+UNUASW7b3jN_eP*hnmT-cgE~CdWrL1du>&PA^^x!!W==9iJ=s@st`D`*}^3d zA>J5=II0CX+5qQX(NGv)ocfWSPGikWdaEWgoc8*%wb5DZbu(gFf4fGTISd@NpC zlmGg6hVk9g_O~w!EccZ?>5Ks3q^;;Bohi1p(Vb{&7rms@$Kh*cs5`N4F6(kr6FM7@ zN3-FQu{NidAY@rrqEs50Kwi1%h=PDK$ihs5ccO~3%-(M$mr`;m%QH}%Wq)V6OZJ30 z?l};8L4KaK_VYwzmMH0*D$P zSO8H0M9pN_8xY;bKM9N?s8BHm*-W(EVOpcP2{LR9swWY|l$_fv{FCcNN1R(bCcFav zNoRlvZfwOr>CC~cjqb!#yZ9%aK5h@+`u?1N0^R88aC~`sVbAAP>2bFHTwS7zOooHn7z1)zxc#nU5$p` z&am^R?_7qHo5mL>sEL0bXRpt5x?en>jxV2l^|Rl3vP$tvPXoGJBXnT|;;cr~#0ix2 ztmV3H-I=*riu*3^yRq2CeHZuLOoqMP_panmRIU=JHAUVBsdcD8LG?h3G52> zMV>^`Cb__b-7a3y9$XkPb#J_eHHv;Q`wOn1{@XxXw+co;ku@+)R8R`x3z8tg;&XDW zg%N|<`Is0nop=I(=e`72I<3VXu&l;kc642LgIo%(aEl&5$TWLq3~V;x>(> zjc^_i9NIpR!*~++Lk>PhfiY+U@F?i+l#=2!Ld-(gs1ZLGUh=4RUERWm>72!VV^v4s z!*l`(fR8?WnAl|s`r(~5KFlqGE0UYU1!6+JLepqQFUAVtKPPhLtPFVUTzP=wvAz9cOL!h zG!18~Z@AfZHJ%RZ0CVe&y6a}^&sWeEk<{gzR!a(LUi5qkkmhwl#-w8~Jcb+rZyQDw zJQV9n>z+Pxqgd(~c&Ju24VMeB8dJmu0mA==&sw{aod*|nXJEzYty%LX~!IhVo(@+J~pG(v#j3IYc-G0jlK$532heNM8Y z&`WmkLJzc28!?1F^b+)3!o@=;=cEEuas*oVpoO7Hl%mZ%TnbF-W?sI~OK?&i6TPGp zPXL(Qo8U^Px!3~*VaPJR&oMu9zMg-P`~}$4ID< zq{X~6l%R$FkYv$H#a&mo5KOW@=wl|h(g`GBLi!|BI!!@8z_Ug$*%Dl- zi;*C>@^p4_RsTDCF-G>pO`it*tKU1B4;TzI``n_RC&YrHVUB4-45vmp>LS;gQ>7_d zv*ya-OXB5F(^PmUb>YMH#bqrOezSrqJd~JPtdQ@G#LLaKZ?k0Pk!`4PQsWFEm6fQN zgjWboFUfYM^3(2Ac()1smfipX{J32QaMA=ZnEZLaGSFjN*rpt*v( zf`|$tY5+~iu9fUsGa2^IuH8mOFpJw=#y?$n0-w7trISu;u?GmkkR=mk zsdPf1F3c)uzH#Ub6R6xlT-fo75j5`9nBq9#O-5CLL&zS)`1{%&z(t@cr+_O2}lKvEh0>uP0?=8iYycc8c&J9eTME$! zRst-LE*)1axZ^OrYaWW_4EZ(1XE4 z=>Os^(H1qjjx(v9;tb3DpeaIt$rn8Iknxb@9YCTd9_lm&J@L>^rIR&!30KKj;Bzo- z3HLfV@6hBNa?X)^#j2bED&e6L9%>>2B|KEZL(OE^J3Mq7y+l~zOU1!6aiH9S zR+5-!3eg3UgG7a1@-d;8bVh*S#8&i@&J^3)=uR}Xi(b;{=bm9pBlY3J-VO{284-|wUOMXeCbb>mRAO(7PS*B|`xZ{eM z=+W6gMG6_`j2SARsDPs8PA;IRfTCtH+!+*+grZK%p@d-~>N}$)!5N)^hpgj9<(6nA zq4Ho7Dp+c3bSFum5J4V-1YHS21P#>k*^Ndl)cU$Gvw3>BzhvJPE*hmISn|^ zi=FW5gto;_Vp1jqf(GM^axWc)xCnl1#YXAO$gPd;1XR1& zD4jlT59c~(qfnY84bb9A=r)r0n5?Z z4xCT0J<+*W<`!s$i}GN&C`ky$sbh!&X^wU~){9sLf|QEnLiuc+QsJWP1M1t{-aPbv zXBgi-T_W%Lo>@k*?@Rct6G#Aj^x>j(nu30KXN`+;i`a=H(gMaq<-{U-sX0pOB!nl? zTn9ZYpng*DP{Bh556$u1EMDMD%;M=}{BA2BQbI({BKOWAB5nVj)JTJGz27-NpQe-)CmL&9b9y@s61FF1rFtIg+eb`uJB97tiYlEaOgIA z35gUD1E|TPcMf`bRYtg~a*(IwOo{vgtC7Ch@X{ z4=ut-X9NgNY(+2WOtGzv?nG0&=p~&#ZV%5oruR z5Z-o~t5@hHI4O^bUebvt08H*p?4;9N?16$XWXUgS#7+okQVBpE|4BT-APIt~CUYW& zAY}nXS<82z!6^kQr-fir2quji*dmySS_q@ILLyNve6l78&tRaGl&+$?C2{cSrl z^ihJLW0dSlMgf=z^l(8m@lI(A#3VJRh6l!VP99<{@z4v9wg+eNXi2ENd!L;JJAnky zM<0Sorzz+Mc-9CeTVf~Evp9NZr`XBOyMw`i+z6cn;#n|BL5->6RZW89RvU;qyC}2@ zIoY04sZ=VJ8pl`iE+v%IOoqGDP|#q9(%_*7hcW?XjG>f96J78Yg1Wg{mu;}o_Ltc; z&&M;2w0$6t4K<rs24r352kOgB@*VRb`D>KS-jJU!-If}PDfPc~%AcFT=@lQ-w z4sLC9Cyd&~Kk4*wd$`m&{{#_CiJrp*|2)W1b*#V>l1%avO)f$Xrk9{W2^uu^u{g`( zESt%2=b!-tH`5uk{h}2``3ef^(A^?}wwWBNd{b^&nWt<#(7-|dU_Q#=L7!$jQ6>ie zr&vHwL5OZ^31u)e2T-0Tp=A!{6#mI0_G(k~itJ7JGmo3|Z1omhvWn3Gl;F zSS3S1bBkcDXK4Htp}K^=(ma|=1KMYGS($WS@+O@?0^p+$`=rwp^us%A?2}vM zO`!Isc_l;LN)uH8(j?-nW*V42l34mN*DG0o8QSQ`Onj?2%i=5>`&gW1ahAxi@)}PIIvb3c`>jzhotELVZO15}Dk()Lh|ZK#K!3j)v@;!-OuN zs3cU1UVPDuA3Pbq6DRA9lCEqB!^`I@vwmk#gx;pnz^Nu?QLF2qi^`N%Dg=02G%I5n zYg7^{4@NIuDD)T7i$&z?SAZhUryP6EF?8hblB z!?e;u=3tWa~naWV-Qm`M@|haNN}$S zM`uYbG%=DPb_ks8OfKtRaMV#sxQ~FNI)Ow_9Mx$Gdg7>o*ibwn<;3_8WrKyoF)Mfv0?Zu1~&N=NJnZfr$O=}gb9jqb!#yQnFhK5h@+x}c^g ziy|u;&@|X{Wf2*R!Z-@;R5bIAHkVE;&aybm#y%EjS)64v8TNLTyQnGXZh@X(kSG+; z9!LH~J0xU?LNO>Y5HidaKIGXPg_?4xjoOGJ^r5B%9TJUNAr@_UsL75jP=l@km90EW zIha$ZDXSc2yACNE7rH~%s zS-hybYTr1I#l~qIrPVe!o`g6#b>rD=e6h886jN)bH)A(^*3H)0_^SQ!_1%Txv=CDY zG3C_|Qy_*R2ncZK>LK}AWkA$#c&GttB}7z0M9pN_fZJ<0`<>x*=!T==?8ORuZ}lP6!TE^FB>_yt zm4|YCK$G9-sgTe>kp&MuXo5+M(N+$^TADeoqp+%ijIILV1gfKwVi+~o>T1tR*=nSC7H>XoroMmyAjeRW6vN+3T zGVJXvchO5EtCWCXp-m7iRCVzuDncodA_@YoLN40AOq|bY5y!6w?ZsO;ZI8~YdoM;T z<-PLqGmGO z859xXB(&fp;_Qr57ER4Vh+IS^cz{SHJV>tj%A){8+f12{5)2)qVz=(F9GOS=NQnI< zsv&?vDlJk>0SyUxNvO1WhR1|R^;BEZ9Pf*4+X*CqKKc+$I!!@8z_Ug$*-}2a7+*dg z2M4(m8!m>In_4GK5vp$98Vr>D+>?1gDLKIijiN$tW{zx&GfYwrCW;A+p%+iaS{3Y6 zuv6nM3wA2lshJFS#!leh1`WA5_*BM?2^Jg$Xp3p$2!WH`r7KpjQ=GgGX3z6Dn;vSL zHtLj)ft_6N!HZaTG?5%KCr%N;jZF|M1wX~ojISwVl%wR;j)0vyfkaR2)M*NOVy8i+ zp9(T~Yc6u~`O)mlH)(x8Rc- zV^9Q!CCx0J+DWvVdu`ra?0)Cl>p!RIDE~_f;a3&^`*YCDYNl-G#f5W$~=4kw2ll?@-`ZVv?0iw zE7K2^|p2y2<~;n z3%7@1+s3f5JCA;Lnue{i@0)FqSRT%Xe(`~-NH zP+ba!6T%B0Wpz2)o)25^4bX3d5&FoTa1>=HD7q1zaIGlSf00n7RIbT&*cwsmZlZ)_;ptn1QzZ$l!*4WtDu5KruiLK}*ohi1p(Vb{&7rms@$L--+ z=kyXwDb!J|wiTqAD+U@kS5Y`Lza)l%YEohcxuD&F_`J|d3ccjTY00H5xioF^%iJ2V z2*r3bY$fQ#S(nH;hI|SU%G7lXAe&^Y(K2zqzU*#0!3PvS$REsMZt_4Ibq9J$Fc38{ z94&Qd^K|6NO$;mSB!&%utCSln6p|Czl99i6AtS zVebgSu7ryBP(-D*9A$-$E07S2DCk7E9m1)+qHa#)FBYNjy?65j}TIoGY)!thoFZZ{vXmkRCr?QYHqC^0NvF zes0n37A**q(Kc08(q8A}vmlD)NM_4 zWN6LoEb&ZnOLAKDg@bYwzj;8*oz5T;{Md?v(wT=_8{G-0c5zTTecT?-b)NMFIou&- z=mWEwYt9{-B-n}tg>6iQQqNn$2UA4JT0K^4_qbXC7H3(UWq)V6D|`?TyYw6~gbX>~ z2-r@Na4{f`fEGM9kvLHn>9Lw_qFm&hd2K;JiI6`fg3{!3 zsr$k~S((x{tt9Jp?vP+vPOPJIP&)AhfXRJHoOD`?JwOnKEGZ~Ui4%YzCL&@70%;U9 zws5SfC@c}<9@0IoK%(sAEE$z$P`p5*0*USq68Xvyh6IYn|F{U?c%sd{Bo0Ojvf^SF zN8wSxq3?l=3U@|vDj9NS9E|{s#MR{lohKF6`}#8?QN zpm7Phl29lcgVX3GBy)wNW*6W3jUxG$V>#X-U{v2T%V5!cH6ZK+55w>ME)reSa9OU>uFy*gy`+fgnFUg#xUQ*=Ki zREU~nf-WU!=oL_%6rB=aY~}*ig9yiq)%9@Ez{ zn~)sj2^kjxc1o=Q-WX@m}_*CFi<1q_-D)6b940nc45bTcJphdiQ7VVk6LGLfA z4bv5cnNqoQaDh(`20jTi+ab_r4}^HGUC@LkbXMU3qV3MvoR&m^PY(t@bpeT<@Tt=j z^n_0XuCt0Kf}cp*5 zBm`^G+EgPF4W$S|8FVKh?xt)=x#UV=q&zl8N*A60Fu5ayg5av(-vrv3a9;?_%RLj_NGz%>vtvCm~Kw-FP+|UuL2Vi7S+3NyA52>^ugb#Q{#Y)EzJV8S@0x>OUo755~4t=(vBf%4T zl_<#m#a;BF~tFI`}(aqFS8ci!^Z8lYHKA#?Z{zXU1l-j(q7aq^~oB} zJ1hja_Wkb+W8kv_64I{Gj(`m1rI>FIhoaO=alFkSaoY;z9qPkLS zYoj~S)Gm5Sr;ppiv(B9*8XoXiCB(KM(ab$_lo^D$K*mg787BdBidbq9OKmOqYWIj) zaTCBO&aybmW-{#UEO*gMNOT&7D9G$0+OE-ZF4o!^UQqP6uPn>uQu2(9_FArU<<}mZ zU3pDs2pP>S;gOe=`GYxZZFyjWi#rIOR1n&h5Z?|0Apz8ATZsrzWi2u#3|X;UUcS&v zR;Kirz-KwJmJtJIC#Tcdi_tugQA_LIR|ugKPvE=mP4J}CT1@sBGA?C{E3c=*T5KI_N#*-w`g)nhc>N;uBla2#Gq1|$lI^%2B5)WSCy?)!UK+GTh4dRl4V^^;jH*II9<5-V zN~*2K&L!1WQf-B%`%auBEHQCI++@nGYzV{4=c^5S1ESk_DcYkKnA65rj&VkbV~Pk; z0VauBpgt$;U1U#=;x-T9rE~_4;Ko+Gl+N7T+GyE@r*`pDI(^(8zIDz^L7-D6$ew^m z4yF01Ei`$oOePVPk|!kvQ=Da~X?ap=S_V(X_vkEl@lxvGJW5wwf<_n@#<}1tSp}<< z_R5-^KG-tj{wN{{`Gff=qX>N(@kmIZDlk*v10h<2(iNdBc$x~4pA<}$i$oV*$_i>e z3SLSlo&YepFWHk$Yq19i!jL5`Whr}NARRA^CMgOEx~?_ok^mKXL(w9kQnb{y6i8Gc zQGrCT9IpftRoV(^AcX`t;i|6=bI62EsFIx*GCx|ItIZ+8x2N@;4DzkhJc5v!UbBVp{`;@zc z{_b8v;teblh37H8e^b$#3POSEYogPE>q!UlTXg}i&Ky+U(ZAI!Y%E=A1xr-&J2B&VCWbL6$n9K(T!FC z#4;?vHLf$-B|(TZXd$%8O5)<`zVR4iL+#@_>^iq$eH%|@XYpb{6B{}L!K4#N0Dbf! zm~@(get>6og*w!8^eXC#1Fo`MvZz+Oib^#+Lc zC|1`e0EETZS_{Rd43Rr3;!=1qrmT3yKx2OqmvK?MA&3gq`k0D9t!)U6G-#~OP!{mCs^7kZ-TZvv?Xui zgw;u)8bDce6ObBh1eA`Nf(2(h&1QQGAS!^U@qq;p6+qNXhP?sNZSp38Q3Mq##vq%C zwmVE~G&ezpjY0J!f|!zXn{A#(J08@TnP?BrF1uUVw8B4WDbM?};V4XEoz{M<#VF|v z5W$VD_$Qq?xV6!pcxo5_q|?Xk;alII6Hp*pFonA8>4iO?rx_VO*=!qL&bN{GKl_!Z zQ$HDA&A$34|J`ff_gekm%RhSgH($R0^88=_^lPu3|AWydUYk05{%_)s_g{YD{7>-w zt(WKj*5c`JFP{FL#nZn#fBNv#X*{{GvzH%!vevJCc`iSL{U|(KpZ|LpasFTb+9zH+ z`^obk{k>1TcK&Z*!y6xba`9aR-*x`C>LLH=pZ&yZ*Dh{+>xVz_tJhO>v3(uEs5E?j zJ+ZZX?n}G=Yd-u5KOa?xUDige{mR8}Is5My-~9b=x4(Jq$6bFi^Fw~>S0I*Df4LpK zKD=BUZ|H5Spr(x~Kklc^?S$*>Quh#v6-96&#SLZ{^$MH4{o2T^=os!w%-pwJsn?9e0;f>3xDU= zKk?dk&p-JCi;4DWJpa~f=RYuiy1tn@@70szGuZUz`47$?|KTUG;fL|^7wRedh4UYq zZ~a#=?9KB(Gk^VO=Z}AG{`lkb$DhFC`A^mlKZS?i`o8mjZ1MEdczW~v&(9zK@%iIl zsNeYh^B?*Yo<4Q{GxcAeI{zo;Z~evj6to9BFhzt8{4`r%3a@N@OU zKha|v^~2BC4_~Msehi;IljpyH*KeNv^qc4ZG+vxd&;OtLxc=Yz;fwV<=UF3w~%|C`r;|BpDS=Rb@u`R=*I-#FSoi$DJIYk&9u{?z#= z@aoO;@5AHy_ty`q{(!C@K0SZull8_=)eolr=x5G<3di`t`LlY&m+OZ=gZI9B{v-8> zAFUt0f{h=Xe+DlBQa{j;6AOF#M z0PeZTwVz#2F!WE)vGvc_41(-lU!MQMe8BazetUKn@pV_@$?WxXed*`6?ED|p1Acrl z06UKM0utG;+bjIypQsPHWl`2F&-v>xp7VoU*}T`Ua5Ql?eR=-F^+#{);)eCSKL4%O zDaF;pN&8@ac0QON`3Lhu{a}7*AIyLM2lF5K!Tk4pF#p~U=3nr^_1rtux8YNK-}&5* zk^0rQ{u&-={pyFX_j6Xi`akPeRsHHKIKSt-e)YfMq@IiV)mMjjkoBuC;e?#4`qkV> z>-yD?*XG*PuWFZZeg5WRZv6J*>38siS@iYA)9)>wzOi`v{l(Ka7f=5@o-jvG>!;Vw z{{TCqcMShw4U5AV0Uf|(ci#J+{f?Z z>03Aw!`*5vKRL26<{y6Ya(o$Ie)uVP9hlA!KK!xK@G@SGXJ@$BXX8pF#tm}SYEjS=Fhv+0Uidk@c?sTU(24C;S)<8m+>kFTcnE-;A) z^9L%GYjeF48w zJL2Dr6EubRgWtww#6?_Qk*~oaPLlO;@RgI3r}k<%iRo!bDSImpmxE6x)7j5;kJ|NJ zU;TsA)4{wo`usxwL4B{g@oeywv)Sxwid5&-ie@*(Ygx4gVL&HphzzB)d;U{74CNIza_nRyCP5he0F8>a8iIenV-&3J}4vq^DY3{lQAznpzz)L@j z)6ahHYIwDLbMX4N2k^>oEvGY9BZ~#aVk#fJm-Y$&zivI@-`(egfB2ap9Q@h%vf2*z ztxo&@aqwyX^wng1aW#8+{y$?E2pY{ooJ?L~xj7FfzPE7|c3PyJhjO!{zt-$%_q|ZZ zDn7FN@MjOZ4|mCl{e}6ycHc<5j^zvI z{|$a{%Rqhj=2sB?`08ih9M9sj0s5v5F6@iJWn8!kES2l^$$YKycAQ+sQSCf{H3!#M z0hlxluB?9>#$Nn5hzw}KPpARp;Grc++UcUExapDklzj*(xo0XkEvyh z`o;%(fJM0%dRaw)!FnGH?^>FJAdP6>WKXh z;$hF9x#_H$fW$}VsPtiuY8x=JZNOM>YEP~|zIAfl3t;>%zT%z%;~&lE)^0zyaVoy? zc?5ih7j>>+FrI$)vk8ExMusQLklf-eaS8^mHDqu*jag6X#XIYnH5>xBs8LcY%}Rs_uks zkg*y3z&6I%#87VGPdzZxdRmePjX{=WOO_=INyajg=FwQNYpJDbNQzhoh=O|nUNlR!4v{h#}&y7yMynyQ-WneosH z@yv8r-N(7-oO|wh{BL}^sY3OkNTJH`Q1F4&q9s*r{VixBLfdjlvufLSld-!DZR84^b4(96R1;l&$5DWa*K#cKmJ(|h{^TW?7$4sjU!WzWw_ za{wHP8W@AD6g<@Mf!4f>Ot>)z{x=--DaMVU8KReDRgn@S$)z57 zNUH*EIE7$k8LAJF%&v3RT|i76zjkK&b8fTORTR`9G{yBTi(Xomrnm;JN=@;C1Qge~ zh+0`Woq3zBx6CN<2m;e9%sbrh60u1uJ+qL?qcNp&j$-h=d2ThZXfjR{Eu@H4xXX-W z1HvRXxPpV{7aUzqstCzcdLShpB$=WF0&Eq+yvMFD4Gcwi*sk@^fI8RtcGAX4byI?` zR7b5V_bcRd^tSig+Flly(uk$JjwsaA*vC4pEZFCmg?(1dA$}6{uzQ3P1g5qJ{S5Sx zdL(Lq{8qOt^O;-xvGD^_HFS}&pJAFaP29lL$-jQmC6@@F!lZM4#KAuR$+<3_y(Nwu z|CoKnyy(Ry5-+IIfjv&2(?7*$V17kk`>l$%;jJjRkK!PYg!Nu!HctluxEb=~|C`M5 zjGf%*sMg1YG4D_1*Fe+yz@%GaLV7Yp7YAy&QNO+56yPaA220y5_wu6?0F3l(ICX4;INAVu9@2VvM@(^2cpJ`-=)rk(pmEc`01>jG?}d>IBO@Cz zF2vo>m67f@)qv}!%QsDy{l)z>BeO_ZT`0E8IA2aWc{V)Dl6oE`WgWyq7;mr@3R$)A zr|(*DL9_73M>Rb@M zB0^UA8m)I(eO*?vdV5e-=_8dn{xy<0GLhA9re+JPtbPqmCXm&WuR#RV3l>6Jg(IOr zPP-yMvT!q#|31loaD$#7Q&`Y*GVfc)3>O!lROu zhCk`47(SGZyatc^uc)xovxC`Uzxd&Sl0D4n~)+bg~ky;pD@vEKKJ_XVq_l{&KVt%Y%3 zXlB;AU)K}$8mt(N71bdpP^+-!;Tc)wZdU*KvFr4e+bl(GSh<}+PeN-f zK3%fz_||dGxLr|(%)WnPS5y+$kK*Y%MG?EJTI5TT17qbYR9LX)i+syOGgjnFzoE$Y zl`CK5yRA6Y@AX>E?n;*VniH=-LX=2R=KBm8*_v>+q0E=hM6-Mr!yn=Mun6V7(pU#C zog_sV$S?IhZ?vjRGOX11;0bcohFADjYwY$~W**MgsxE9#CX5u|o@$j5;YM|(B!w5I zwK@qQ*GA^l$=~wJYvuGsI3i9}Eu8`oxrnT(mCqQ> zD}}UJHCFpdNeeCma)5o_lclfXedIsL79Kn}sIfhGkPVAUxJ$>}xz;)NkmQdTHO6wL zQ5DAW8NGF%7)S!qYJnvd2c1(CgdLMQ&NPBGz~xZ$Ggyc@v?};LHqKk3D)<_?0*Cp! z>#^Vu+FDJb1fq(8Pc2mpEQuRu0VD;*JL&3wzk*#-2m$6Mlr&`)&xLOx`z0uzv^isSm%cbZr z^(eQ`m0ON`x%ez!PilLybwMpB@)#L{{$4DKzL(mI7k~Ti+VnJ_F0lKRgjzB;I_~O2 zX+XziFc<3P8}^-O#=gIJ8!mH%dHsvp133!0yNsdE9w~`?d%ZF+*D%mAXK%k+YmEuZ zam+b5hartQZm;55Q6iOj#Gjqc_g}H`{Sv#;DioS&J* zLUQOr%rC2|=jWoy1hJ6C)P?`q!w1|MN$?E4%`Z$%cF)_q2~9*qCiyB@MG%ET;Te9y z*7e~7?6NTU8X3z$|0_L>rMcsOYk`>w~%0p^C`Ia~(} zA7J*Y7>p|kAMl5f%$143`1|N0V}tQ`7;oA4ITJphq{9b@>UkeP0B7fz$N@@r@R%dB z*!^PtkmH@K)#qUp|52I0BEOdzJ^mAPE;P_%<-b|Ej zWZHPx3d;f>7*ZU0({cp{MR9eP_~%GL&hQ}ezfy~{RPXgaMiUVS5iZ?U4WBff*{*3< z^*BPE8-cgQUpmopWK0$aq)z>VuIo&R17Ic zXu9{drO{8)ApW9&S<^G~H9!Xdwz^g+15%|oTb5XY zB5?vp>V2pqzy|P;P}S57H(L7F`Q%~SItHqguPYg`d6QQnqikhcKg-ezGQ!C`rY(=F6XwArI3Zqjj{2}#7qF+eA_Ha3V-8NERY#7` zyE}qqXt5fSoHjpWwCk4Wg7zNMs4Nv=AN5OG!^CUy5-NtrU27B0L)djUb)9X_3!H5) z%JJhoH7WmXbbu4aD%C5jrhcB?CgJ7Kjd$B_r8Zrw$Y5|mTRm!p73(YjpSuGQ@Zo`& zbl^R}o*^*}EKzG#8hzwX&LIQAX|-v1-LUbvg_(lWh4%$T^HQMbP*H0#2t@f&a3KBK zq&!PMcreJVG**#sJ9#QF3;LG+aR-d3vcKKL6X4JA|7uU}uswMuI7ND$6&lfeChx&z zKyLU$oz{GDzJ}XCCU*oMFa*c=Gl?8^`|Q>bQd%bdK`5Cdk%hxT&2j?hyX80$`aBhdrTm(c173!hJpcLUbELkY{&L6p{BI>i-ml>k-M9sKg*Gu`QaYvc zIkvr^C0YBX&rg|#@+%$&A(l5CZHz=|`sdB@U=xWygf#?F?9LOc7hRizKLAP3R5$R4 z=rWlZ6vKsR3D#C9ZS)1B=MqsXdJm1l4*~grvf&jDE~_>Cq(h%7#p%;&rY zh;)2IjiZ32k&O*P^KjTmR zxT6_Y^t5)oljpSI!E$)893Cu_!9aSF6>hf<4Z7tTbWB?KcNgDQ_r)CRlxzV4ZNf0S^%zivG3_}@;;bCVX zaxyMcl&FRBDfxwT;dzPG;W&kB6>V@xKB(A4V2x^m^tU5LEJOYKt<-|%>EFLZ6A}8C z%iVg{zyB733+Tg6jc)@kpg^WFkpZ94^N<07UnSyY(b#|y*ja#;vXDA7GZX8E8|Esw zhnsdBw{;=*9<1f~wsFb29y%aB;iCiY#$R=^o>mtfkYopD!0ruC z1a!cIL^FmCNWTFcaB=0)0k=zZK;!`RW{VYZRmw_Y1)5~2KTLEi(=;et@QP_#Sd%(mt! zy&F($NV_q!*;t00EZ7m5Zn)8=Q&Vu+c;(1|`p}5kGp4;9Vv6DepK}DhpiWw72BXYr zh%dHHmU~V&MzYJ{!Onv{QHa_=5JfQ{oGLaL|jk zrtk&RtXCMmVA^GftbF>+pqFCJ;R~i&j=|syS{F3QaZ@h@^!H+cFSyiR{N0K#_$M~L zUt%{3#~1vft+lLnq1D3|3>6nU_0|Nwpmlgz2$sMX3<%a>YYX-65F_y=eI@Y)uj&oF zwr~Vpi1}rOFL*hcOc1A7OZbBSPb9%J^jdFBO?J;~eGQt3@LKa#u!>-Od_lV`3_f0H z?|ZG{3m#?6pJ*ep2K)}Qw(J2vdx^7&inInsRj~QtE;oa7xdM;z!#k6 zq&Mlf7U29e+OLHHsq6KMsP(c0aBz_`F5$koxCFkSzeWOI(6UAu-~nnR&Y(S<_3I zg`)8VeF6!5K~5mc7LX8Mu)+i)kzSKKRV2P3*KyV{CdC&tHw@3=I$(T3vtPwvTuFSv z&qgv=CW$SdK^GYtjGtz_W#8vae8JbP6u#inpn(Yx2)#6zF2E@o?o6jVmnpuWf+ZNz zmAtAzc3Irls8!DLkbXuWgu`V)!i)?vh?;&4;&H{6Mcr@yC{iV4c%=D*)QUlF6!l+3 z6A?!mt|zQ}MN*_fyUt$KgH0$>;lXKVq1AWh%XBSQi$lYN1V8Z=9_x5q=v07OLP#>W z&ZOiOl-uzObpS%N20XYr&QbFW{C(d9F1$)3gdQw^sz)Nd^~?H})|1#n0T@FXGyEh= z!x+Y&Tsr)|8wWnUtH3Tu9&J{DUe|JT;>Mrd6_OkERog%;s<$~h@EN^$*%HB(v;fMq z62YSFLXT3m;DkUa)b(93QDE`skM=qK6mDi@xqbw28lq(YnFV<#6@WV&Wjc*RSr!Yx zAS4tNKvyw6#gq{sOAG8C@@lzPmYAvhY3Pw|4=_gT?ne%~?@m9rp=p%?f)8#_0 zo*MXEFD=BJTNXkpKokQ)x@v)rl>||I9BXNH^JN2~_`T>N<8$j{TrOf4WE{C_Wk3`q zvfB_naV5|b*9Nt<>Och%P5c@OZsE;fkicojd*x0~f?M7y;S}!xoZ{9kVR(vE-^Wqp z1Ow0G{9BwIH8IRig}nn-{Ur|}29n<>DAZj&g~40IbZ3vDDSlA-%(xzZ~l zHc*-Mk;`c8@}J}kVF>2UVTdJJY7jwjp$<}@BN|Xx#$0v8k5vLVpZ+@_Ili8(1S zgq~Irs3jbiGDvHD0{p>^96R+~xwHE44oOs1cE$XO^idi;WauAdCB?7ehc9bO$d~Fv z&T|cn63?pp=;YQ>rFFBF6f78bfV^oRfHPtg8dnR!O|V4`*Ilrnw(eV&UUv^DFxi@} zWlTU1LfqfDO`acen+Je}bw|l}Hh8m|Yvknce8mhSWsCK}lb2!IbLE&GVUq@>C}R3k zH-$9epszKHP_-lct%)9!|5gG$P#dE{VezZ@5e^>c&0rae0Gw@Y2y*ToFm)26#e10{ zQA=GlJYPw=$e+XW70*)`p0AD{ec;IP{jsm|7@n`@B+qDCYiMUfwfLKu)Vz{bhW}!C zzG7KYVfzw4b#yKMK5;bR+_s+1)x-0Z*qTkr8EP5N#?JJ7rDl@-aAc4!!%VUtN*${6 zGRaO`I?d>%p39iA50jc--Nan~S^Z0YA*}__3 z^DAf)M2a239b&>k|0cqOQ%fmM4#}64e5(HaQlyAwsDJ+=wV-+W_czc)g#P7nx8C*d zKLw%e7JWRX@$DX@-Z%kMjqj5HPA0$}d_4Rd&Oo1p>B~W%b;_Lu zGhusXg~p`k^PV;c=PgGdEBhH?lhHZg>E>+pzN)sqQY`&1Uk>f_wx{4fGy|EL{Zya0 z8q-;4X)(WIlot51Brphd7Q~1Q48p}~;HvpPk$ zNv!0RN&24^I^EvJrJoA+a%ZVnbf){w3MnEgUjpw|9aNq>sKac}I?eLA+6?X<$Cu>_ zasjL2E>|i1j(ZLz4PBFOpTei5FZE-#rCtK;$b+KwiK93CT3f?Ocqj^eZ))%hadGjf zSm|nO4)^0;tZxGh2^-LSxzoJ(hQ+7hJNMBxN>gh+{P`62Xyqc?Zv!BFb~>|?s=G5; zZ%ve}J!Ta|K))LauZ$uJ2LubOTr6#-QO!y?4h;SzGRj`U+e5510EDYX_Yw!Ee zE$QUYCc5=^z;d{7F<*ZtexA8le;50aXH_=!Pk>r(lm+k*9^kgeHyHCL+Ip;h*srp- z?1E&QOTKO*^kfZ2r1~!xvu<3~fLF~&Xu#}{j(qjLkuT#2`UQiTbX*I-LK^MY!hqEE zdQQ}Og-X!kQ(__=`D-*9xkecv6KN#QpgomBg=J7E8tKR<&=!?ImMtJ5($VEiAQI^{ zxl=_V9dR9J9b;0YBXh&>53j3cFz!sZQ5o<)iyKaD3mS~{k;+`o&lXS!Swg=oRkG|zK?koksAEVS{Q0zR}fXi~&@%z^xlP3J%HWF-}r4sv`G_NRi9%$S|K; z@T4NHSI|Vnk%7yhRTn2k5;AqMe~4bygTo={W782gbFk@X2tkmRegm$#c^5aTwAwwm z#R!O_yU^{qbA;A0U28zLx=#6AxrVF$8ZJ45IaY`1^0Yg6@5`=R-6!?|EVLTq@V7w| z_~#kR_Tm1dt*<1;LI4JcW`KoaJ}a9K*E&lJ3y0dDIy{VTLmlNdl+MHu*_0PP33pzAG)wxM~*oK~}nC!63&h4D#hGFS%s&)fdT^ z@EEq)*{;}h^Yw4&-zh!<5P@`>P+(`q&r@E`GJS7HrO3+UBF7}Bj41y7br92X4$Wen%cw`L0a z?>=~9|J}vI`;Q;rd+&b03o-Pf>6!~zGXZwiT{%f^!#{jO9QRPQ|gByTB|A~;*0?@iVx_1>=^_|%_e6FGe#@yYPCQpuB5 zebV7qjNCTxDVpF?*12S%!B21v{?|-8Q!wb)q0e~}UozB&Zt9wPzp84uQi+aj$QOXl zFL!48a|9B{lz*j6CI#7)(nRq0V^XwCuXkLW@93{a4W?-oI{<6Uw;oJex4xeiF|NkF z*S6vTjSF7#CSvfC_+01GBes@PEQBBWr}0WndpKKqYLvVKOL6U!cCGc!(9c}VdJkgaYpJ))o>9dkPbZyB!UB*wDgh#%>xPG zEcqaGCfYzB>KxP^2nV$l4!XzZpk)z4V;$-s^lX*|>%5ffqXwJA3bM}arBcV8L6QQP zrvjZs*->Q&AN3pMj)TvE2GONF5^l?mIc~2~81a_aunHG3 zmaC;>h&_DCWBUI*0;J{%=O9CAZnwaUZ;?>(b4- z4w(5IJEr&gfN8A((|NSu9B9oW8>%zL^rg(HDmQ99oV}*;VY%m&+sGs=S7s^Gs!^_- z#ffgh*^AwK79Y&D*v`*3_1-)=3~;bwhqY4aFn1U*#SAADaI35R4xI=2IR*n_35wL7 z%8?@8*c@~2^ggTddYsdTwP;)ulMvhTTjapFdDzy`ro{UmQSC1d@94B z^449a?&achz2!e1I8}4l4wqs-ZL70RHi-_fIp`kd>M9`l@%=A%kTdMj9>j{lEyH`k z{4nA(?%9CsDu*QLL-E$b*tqK7phbu>&(5$qq-X5zCDn&{FWjiSE_T?8HpYX z-DCoa0Jd7p2|aDW(&n;6UY*bg*O;Vi(@rPparl;jPwEPf;WYNJu22?ob&AW?*BG;; zSRViM@nwUNqEE$#u&an#FAwEhlS=|hhpZ}c8F-%Whh4j2d0%#&NFffIn{c6-Ba;vF z?J*LqeBVI0>P2W(?v4?%PmjfxeZC<2)HcwEx&S_CYcmCN`S!FrA*<}ipU(2uY-Zq7 zv}gkB1hdctr@1D0A!D5sixpE7BpK?`2LhqK0%n1+Q!nnl2W1X(xMcwrJhP7o21`t};vu?uC2S`bc+Z0yP0f!Y`=NTf3ust#Xd zf~v=v(zfs^X@jOA(m!rXv2gUH5&{$P-!XFT!F4v7BL{FU(1Mi^)U<%LhS!5mT;1{< zJjh+GiH*hzF`8LMuMK20g68yoT$*d6p)vDCxVP1+78p#wQ|0%1$;-!j<;Gd3Jk{#= zUZhha8OSG_==KE5M6RYuf%Q4pg+nPf*YDOUIdW9tZzKmk+6zp^x;hH=ypb%EWXD^b z&cc{;kR{3BzBI?Dl*5MVG+Xn9Wz%d&IL$0vy!Zb5tu){q%4%%zB z%fFzrCU4&(ut`4}Rb2XU4x3tVqb1u@A0fI)<^ITNAaR65uTk#y#1zOWNsdaE6(Xa; zq4S!Sr?gPbx|AAwpw()3qi5*#N>iYJQBz))I=-+Rko^+^e?)lW#046g*{*{LdgbE! z_dzu-6oefBku%1@O>;Q=Lf0w^C430+l$2;DX777RvvGM{dH^v+-WWmnWLjtKv}Cd( zClLNR7pEj^F{+u*US)sqKN;p3GzPdZ0yZ5MUZ zZh@-Xio7P9@AUllN&bUZOLG@J3Mk#iBc#__Zz!Ep8zT+TJ^6pKwbs{xueIqBqzxP-IT zEEbU#)x=fpUEZ`(ZY^6%4-GveZI+}}MY9+wni=Zt)2Rj2)7uBoM1;W8zYl-a>8P~2sL&)nup_?tgg}M##59Y;hfba}%P)H(xj&-6z=FMcg?uCp?urvJSd=JYmXM&I|km2uU-Yv@sgtS+jrNdrvV#|Dsfr7Z-Rvj#R9-?mw|)> zYsP~J5BpAJdoVQc3Q|J4RJ@5SGbk{Q2HtV0eiL0%%~{p!pHeT7Gb>(qrcw6U$8%$- zML+AJu&sw$H!5lybN2SDwbq!!Zy-c2&>V)uYe3~DAnMgd{MqTrs#l-a_h(OyEg@Cm zKnBmWwU(7A?Nc$s!)Puc+rz#S1WgAD9x5w#>M>b)#98rW*Y+su@UjrBYj}oiK(Gdz z7p!-uZJIY^<$;WWAifWbKH$9I7o!U?zpN0%C(&dA59C@x5I-GB@C^M*52q%(=U3W~ zCL;Vwd=;!B2*~Sl)DGukV%ue5@KHN^--n)?P7ZA;{aGQ1e;;H1L>rOSmH!&nmObod zo69;v5dTq-z^VbWLlE~3x!d@D^CO(}Lj-X;__l#|K!}Hhk<)IodcND9tu-HgsoR;t z@w3yjXN3B<=zKM+>?yu1cBG)Jb#BWgp&d>B2w5NtHerXvLibfFk3A9ZmkYx)< zh#>xMCJ>4An%t=(5yZKUvyL$-g1EV1_y>(uGZ=TL+o%lK?05*`Uyo$2OhVRQK^GYt zjQ_-V%f8PUq&T@4f*?*VcHGETpb7|F?Z!dG4|C)d1b_M8KFm1Kw&e|e1U3S|6CakF zAL?Wqh)YohKMDel?LBh*;E96|967Eal6xrBAxA;kgg7w!N9wNM8J!lFfn#o@&GWFl z3^(`=>4aeBNfEVGeK}kmA7y@Rtd6?-T=`gpJyp-}fb&#zluk{^ZKM88sD+3F4%Zsi zog*pUxw&)re)3g4<~)$q?h&I5`Ho2D$Yl4}nVK!Er=;y@GKst4Bkfv+Je|dUr{PRG zJh>@1+v~Nv6Pq{B0En|N1Gs?x6db4>Y!f~BKvaNjk_8rw7cT~1aZSIuk#iN^dR<>^0zH@4;TPfeMWorA5 zt(EfhmYvldTW;T3-M({r=Z@*h)~)XD-J9X3T`1JsGr1AHm}&6|HF8z!9E)VE47JV! zsoBfZIxj>MzSdd1&Yf%b7RD(ht~);E0&Bv(c<53Q&Uh4F6mDvBCS32z=;e?zGdTFp z6CON135<*LG5w}DSXHQcIKod;tgMZN2vBE5HsEhT_QDV|gK#J6N;Xi`R7k=VNLLvWu=pvo{X*D!{mW#*wtAhA%k;{?c_WXOP z7scD2KZ_>(?K!Xy^EI*vX!43BT|5Opv4pBsJrs1alGPYh5SLyUxUBw1YPPV->c62$ z5Gk&#p8Tz=g4jfzR;#B0fC$7O6B9&n44GdM{6#*814oyNOv~M~MREAZjfSEV1+X)y zfk=#uz#CRz6cyY=R#|A%qrU9;AAycIt_4cHYF)$wW&p9%g$V~kuIg+Sh)Qzkgw!lS zmb7+6eFybS|DITs6a?kVtFFAZ(CQa7M>~Z%L5~vw2~x@NScQA_=wMJW|y}CBGR61^;$aIll}(0u)xS}I-A&&n^<|x zrfRFg?#9@}0YDK-QeRSk-{?GqapEYBbP!F*0(1-g2CZC1Rx@xh*-@N{_>@Q- z#El`YE~IwF6(BFyWCzg1CP3paNKJNYF1U0G4^Juql05SbOrBz)lYAEm*A;hCaomlX zVrbAvSCaW0+sm;9dmEq7iJZO)8I@l-MHwTQBuz|<`&%vG%fa#C5u+PMjf|FxWFj?T zo##8-3~CyGE|<8V@dZ?50!NTveLFIXyA>9Sj3=c-*59e*4s@6+NE4{bW4`d`tlO!W zlf56W;bl?NH^&qrnnTsPiYYv)*H;;b_;pEA@F6iQFK?(Z=8)btOg1oSZpMH%vl&-0 zNpPeU)rUtL;uub|7;>L_Aq_!IMzeLkn0n-7c)TNy#J|M*R(cVp?gUHHuk=sfH#BLX zuYC*5Fob&I4C3cA_*$D@l>f3lC<{wqc)XM3rJo!5QEYg;!@aveoDb(iNwDGZPEsQH zb9lTP9`A<7yL2aUlBTSzMrtc^n@)aq9v<(6y&_Mnnx!*5-gyic^UyUs-YG&FlV)T7uq)C%Zuv^@(FtdttY0Wjc;J3;e&Zy!m&Kpx z7(GME>(Yl&D7@?_Cifi9dVcHBq$@Y}Ml0jejTzy%aX5Nzb=d!(>BF0yQ! z^d5VZU$udTX51c(mrh>12&X*%3K4Q@fICdluy|pqcJU--6xO=6Ch!KE6*tdc9CO6> zD*ypQhJ;uB1DqwOCPonwQ=?w_w*?j%^mciQkyrYil)c95&g`$889`|4q8MXwgJSkvBiu84!wOOEFi?u2r0K)eDM$htMwKd;t zw8~ZfHoeDRCQm+poi1K;5RPoZxkG_tme-6WpPza`Zj>r-n(jP%+vgkkNnyTI>$$+{ zrvb>pNS4x)2Tu;Uf5`nTz2Lir`_&Du6uH4=X#Jc?z0G;n&p|X1Vg2x3Z=G8|hp)Ia zEAwYp(EOo~RPK07BzI(D{=6wQUs%nb*Q3cK=FgGLK#XOgfV>Ba?dmdXpeSLBNhcuVrQyz?Ja7DV1?8ACKWAhQ@R*+W0gwL% zf7PkdVs!zJNs?f5ykrAPiWUHsI{NC17cS=Oj}dBWS0EhZ>tEXUz@*{OjY?Ayj3_PxVHx$MQhPzlIg;|r?HY=58?~uUxwGJ5AqzCn`?Ks=FFw81Ac05Nx>;rW zjIa^wOZs$kN_tz#bM1^KYzVU&2O(ND=2{azTTEv3;gFEu$-N$^%4(V%tZh&?YjtAbz!C@6_i1mYI}d>po+ zh+=Emjz4pq2lr>egHK5CXxfei3;W>Fdu`<4?!Z=w%!6SwnB|jBR{L zR7TWty)0`c=bE3mHyv(qnq?Z-VXCDJ*knmljn*a0LNy97?|^C?Y;C^Y9m34MuD%|6 zIg{G_7?{Iv0`CsEHvjeLLd-8K%;DFfNf0S+z3*DW9R9ILf@kRbd4FoMd(NLlG!fza z;j3U3!T6ZNc3BvF-MzinFvC(ss^K$a~aA?ENGnLs4cYjUTG#2n^2&N{}Vn8W6V z;X5N%&0yS_Zlf}QcH?0VPed|TCK2Xc=pti-aR-`AU@)HC8-h9P!wE~IU!}s$#|R#C z?!EtkyY}9n423wvbs>AiOf5qL|@P;%I7tlnT1O2TepACAfTAb#zj6UsFf>hwD{6P#l5^G90dpGY6Xv zT`(vG+nH-s`wd*U1!$Xcwbdr;h`=$s3*DYOM>v?$Utc~~t|3DOd7h}xv&t$mv;*M4SSaiZN)h}Ne z9uUgczoCD#cn~TSS2iEQXj5h|&$A{p(b}HZVe6yna7J68n1jcNFp3k%}N1A5e3l8&wu8|5DBe zUtmK{p;W#OuHa34-WaBC%9z~q;!nU@thw0{#pd zjNY;{&DUrgHm12Q*sabnSL>tF+2vo1DS9XB6om8H1GrB!b2$)X=~fMsZHDV zzU(@YeFPQO)6GugqkQSFRHv!)-7T-OENqH(@cHg0v?{HDi2&clrm8+vYII;cc#`wr z4Q${k<{py=ljzm@({F+TycYivM)E&HA!HTK zXc}U#ZFN!*GhkA@jIT~$qVY|N``MP>Y`TqNyVdQHtfT7Aq2EcWD;?Ygjm-h}MVU+q zdQh<=9KcW0ZC6ut5N*BClP*Kp>nDf^whaP8Dq0pp@S0)AtSi+obq7>rv(qb$sb^zroM&so*=g5=Ct1npqHz+nI518+!#Qc5jd}$+X;-NP z@bGpUR)lYM$WMGTgBci83rq*mB{O!N^FE@Ijb&hz%C=>1I=5V{f2}jhkJ%O=1-*Q| z^L|Eh&M3D{0Qj0yBWms%ThRLhV~dw_w)hb?#uU>`t6*M)q+OKBu{_FFzb6-K0_DAg z29C{oy4IP)?X!R`kSE_*?D4BaEgO5_o|>>;br!iU_=wIXpSLYY3i|nM@;SByoK1k< z5SI=bt56#QW0fLjm0xD#Ofl88tg;b{2A>d_F!a-72gMO$*A{Xjj$=`;4k?Vt}*#3+jFL{x&y~A-r`H(HBh{(VuJAvCx!XGvuN#*9RgGAT0o$<%CNEvEc1ngo&Jo+TG?+ma~a0O0OXcne|8 zN*|F|-;wXN&brOXR=40HS*z1(p30rLw|LhBCyFN?IJEx=E-2M(pUfInW%YBB%aNh1 z{z~da@nrR5Xd*&Z`5LWvS^ZC0$!d%n!@m~E9GS@Kms7KaRaXBIO(u}llLs?{9MuoR z@c%IEQGO&67MiyOO90ZqJKhuQ^ekTUYRHP7Vwv=QTf1nZL(&p#O|8pU4V4*i=M+%| zgqwglO!`Jbkv&IQmvDJF)qV&2go9XtGu5v(s`!IB8|KQjW`0!o*+rz~@hF#UhI;!7 zbd=69>*?)pMC)xXuj^fJ|6&Nvs1HFmzEi^)6?khJom4dJo zy_r689!e$KLAF%#ii;hz+f|X^zLwg@?~-*F(Cg8 zEIZ)Loj*YrVt!d+K>i_`OyI#;OBj&fh$MK1=kl+nCcAeo|8q1E;ZNnOU==~28kVE> zA|KVzE(?Q?df5A3s~C{ac?~gtqAkVh3Vk+f%O19{2YpQJ!Xta&sJe6HNUP^gF#L-- zB&aoARyastAiZ)2mBX+n&$=B}WZ0t2Zh=Ezb=u|1+479rEsX5hObzL_S=NoK0ghcD zfmH)$hXLuUcYy)9gOlE*jIOCy>B^<~09>rB zsx>Keqp4c`Gx4gP1MUs+hrJ=nvFKC)^)dx)E~;K8*C^1J=#oD&f4k*57uGK7FkDf} z0Q@fRrWsKThT=l&-AiLmx9wJH)3r*u(OB^COM)ee+50|!2i%~B3%so_$)+tFM1JYk z7tpHoeePX0>2!x5wH-R*fTwu*w?}=+)>mfKxl!I8W%2;mGvX>T>zple8fr7^Wp2LR zcR$ZA&?ObC7ax&klQZr{THCein@Nz^Y#p)oe%*5WP|Uysa|+wFy7y9|qbQaSzV+F<=n zkE<-MOXb1oV+D&R{!%&j~P$7cDpFi2e5v4!aY?R zZgeQg$ybxYE6^_EP1N=S)X4E1f#uFje-3HhBc!UT?zF>Gx_J_~e5!yP@H{vha@F!5k}Fa6{clBzP=@;TH&P3dr(b^#O+@HdE?4Va zzdjz4eeWl0j_)dr3$Ok-&+0TY?{AhVR4fBj9%NWXYjoCqL=I}|tb1mM53}ww$hv2g zT>n}3-zF9CEXl&-yT%0rk8=k0GVbX)KjZ$&*TFkP_R{KR+>-=hH>-kq9lwa%`5#=SZH`Z&>Jc^UV+3(iA)K1*cW2OiX%I1|RoEGM|(XWZ{H zT2&?-mT~_|vKW`jxTn0SQfVK~$5Y6fI$_=l2+Tm{=bbB`b-R>`)uF4GoN}cCleI>7 zhV^DUt^Uj`*`NKXMy-PT#uz_%?n;rQpN~5lJ?L`4n6pR8K+xru$Z6;Y@|&y^)_Xr{ z>pg`F-VajIoSCZw(~&+i4y@vESN879t=L`vW2{SSPgJ9UMr$Os-^N|9io(19n2c2VIEy zC5yK$TAeuWLX!!cIE#}T;a@>+F)JW+s%{(UtZuVXbGswA!D}MFbjBZXaE0$FY2lu6 zrW@t%S$%_9W?QNU?dKwipW*TUlc|@$JO2MDnus|5^A)j*&{C%s9> zwUAS<(S9uqNL{ay?~7QkP&+twlE1%3BFW#fMj0gKYb4H~J(WT?FM~qSN&Y^8M3O%z zkYx)GH%F@VgMo)^w*eN0w$mhV10KM`eb;_k^C{pCV76 zy3rfqhi%zq2&$BB@O~H0U)7+~kxZVUkzPs7>QeR9A3zfkMmpzwtM*Hphi_^>{|LLP zrg~T&{_9S(0F~cEhAX_8!i_n`>Q7niDF@JJae5XSXU{mu|AE(2Tq;J#$7aPXAXrZq zV&Ytg|Jw8Sedny7#BXF&tdTKsUKdH>Zvg|TaR+ZhOLD}}lfr#FK_rFiYy(XkKPmi; zSQ4ar-b1Hyb$JSoyyk|oCa{F+m%ONgKI=@?dYy6y1;>55_}Xbr6Koz~N6GpNIJ}Ym zRdDu+3s1|yvLVVG^(SE{**&n?RwitEeUw`*lXLy^&_%}Q`diUtl5_pNUbGYW{nq1pQgHpu zTIB-DW#`3_3zFd(bTaj_cxTX2G!bzI<*Q^7*5rBkx`3)-)Kxu$PGu#nG4k-|BAFu- zX|1Pb3v0A#22CcA){`$@vw8SSRt&AtRQ(}Efvk`vmj3re3Sx#@`ZcM=(bLi`G!dbt zxpb~~E&W(@HvjIzxX2h?I-4I!qr$C7?jhhgm+L?LluIr-bFuzj_JjL1W`B?G=Mnj> zsk8Z+?K;fn&mfzhQF8rf^M8U=fS=93dt5NEnaxkn`PuxR!(Vl>x>h%vpCkz8!wa4e z+5CS*G-KKP^c%AIU%z7b`B>9pxn1+C4+~q1(`Cdm+O?I0&^IYi|63wSiiG~_p^*vo zWy0B7aPGlG@Vo9m34KEIc6{Afj^(&+{S^MM7_BN(3`^m!usBjL94ntiA1I80*)jjs z-S^xB98|j0N6eX5a5j6LR<)0WeRcsfk6(GG+OF?!WSO=r(xXP`OW&aL{c;E`aC3aV z5t-{c*`X55%=O!4Xs8REck&p*d)RNF(4ptd_ImA!&6~Gw+f~?t|JypTd&`zBn{jQD zPdZWJaI?J;Jpue0+m!1cg&i>Z>WddH=If8)*TtLdz3U7e^`J)X8*P0j3EnL}r2`LS zr*^S^6Pgp@n2%t<+;XA$fyj)Z%o_--bGO)$p{_YSc<3*;$kJYNxj%Zq?YLu(SNF2& zr3#1^qY|e|cVM(TEh?@72R_mV$V7n4p2EkjbJP~ws%BNQu-n!_BDT34Y|~q4yBF&P zB>OHtmHtGvy4$BSCp}2+%<&r}2`Vxr& zfV0gTI5_5Kq0;KO1xjhcBVKt<*mt5CR)ZsH05HM|ZCJEBm7V*JKXAl34!p3rGTXVd z7>!hH`6YPwa?y`22`?KoqwZ6SYr>{4Z_5b#PLMBM5(S?{_vK$M0 zUCpb}B#0Cj93^30jnh9@gQjUZ;s7GG0cYoAbv1#uRN}uslK2@q;@+Ej2|P#K8_`6B zBaW|#RUG5j)!5}?@PQJ0--m8ZCzCcYuD=78Dw){t#7{Wi-o<|8nZVUQ0cyEXMyG$( z$Zs$~NMrz6BOSlS+Oi9kZ7%t`Sr3wR>5G=9mUZK*K>ig-VAY1%)z$c_eiPTiU*x1W z>9`ikSTx$Ng#oGS^^K_Y3YDPPbv6DPjYqCg26ZqRi8E+VrO<{qMsV~J6pF5^@d>m; zC6HwcNLW|%=S(0H={31iMb_1D9cLY5(z+UR!|)tO^;I(-C(>BK@xumfOg7Ok}^Xo7jQ2$1lzhMlSEPy-+PTkv=Y4x~trE598kU2LD zpehVk{mC1l5j^Sk5iz?C-3tcaJ9D+B_`8dMKC+I1zbV^u+(+FCO6gin z2mf==xu_(eo~1vR^@j_N>6(t-e9M{Y*BZTXIA^G9BRJ!buN2o9%pwdS%7}1pIl)rU z960V$tvTyu0#YA@+)|mPgP~QE*KeZ*G8+=Ms*wbQs?V2r-nEenAk5! z!;Lbtt!j5-WMtd{Kv+>kBl4rHyTj~T&Y04}i_k^K?R9Ekd5z)GDiyLS)pNLUgy-Mm z`93^7kl7x~)bF<&Zg;}Tt3w}iAjyb?I914DYsRTnN0E;&2i3)7s(A$K@U!c7gQJ5; zRVkJt9uSu*^dLY}3%<-^>|8rYsnSMEXlHFuSB_JR1bAaD7#ENBy10^D4yn~Fx{uQ1 zPyl&1I37@o%EZwB{4DM%DZ?uc4TF!MH^ggBt5WGhQ`HJ6B=kRJR74dT_2_hatq$oa zy1F{3H^x{6S{X@39XQia{veyiFo7j}ykD91Kf}D-GK)NsT12*+r`<&H1aXa=ANp^) zm0n(IyCP78aZAM*W34fH*+OvIP|d`jOz{dH70qHiEXd6nj=a@^KEUFsRbB9&?28bK z!F~KeK9hqSijEd%J2WbXJtn3_t6&jOSAbV>Rz(B8qGmAf?4jv?v%(a%dZmfr%@ZB4 z9@v8jUu)ubA!6R!w4Kn+Gk9jc3^9_s4U;u*FTh=-(vg`rceKTYRg-RiOuuru9(V?t z-ci0#VH!ui$DOh_S)bHHGjGdK&-!S3i)a=4l*Qam4^kEClc8=yHw}wT7JA&bZ5pB) z<_&ymvA2rFx34)(?Qx1>#x1^WtqoOc89gDg_((qV$KH4cNv}H$-WGW}`ke8bqkb1n_OIRP9Zj zf>%gGRB!u#+1k#GY-Vzobv9XSiZA5~;P=?FrI^B!3gEwkUDv$*p2~Qa>=Lv+Ke+bi z><`{FQgP2_aKYr`T)8~md_WhGYu{uMzZCrCYnH3fsx(R8YG@Y!fU_zGKz;f&&`|A@ zg}k2R^7>Rx4099Pk%p1=wN2NA=K2}65g^6-2a=CprV=0pMVC@oCkt?emP*;5$x|N4 zt*7y&kK)TXhtsPW9Kw%fPe{qFLBr?;2|AOlaDBEZ=4$J5zCS}Y_to59F4@e0+GMCX zo5M#R7qu`j{d1a&-y|QUsef)y#pH4^M8^Luk&WncJ!6||z|woV>GP7kau&E!b%^PG zxVAo0s55_^Y2YTD8u6Vv z&xv+pdh;|my#6+tj0!TgR6`mmeqfNKnBt^(D`Tt_yy@?ZZ)Q!@&9nS2RO5U zpG;z=?m?sSPY#mG6;9`%=d}Xi1t_dUV3S$9>*OnhuQabvD0;sU}YT12drai6Bu} zqyuIRhk4}HlWJ}NF)oU=&LK)g*Kc~ECU(ELfapb-O=JTs9b<*-K}K1{&oQUcd$fp% zC&FHc^p#5fBgJxep;KBW#F~hlNAURl+$AO=-{gG! zY+wHbR!?WY8{ceUzh%kP^=MTdzc$c5pm$1Nhw^;jTzQ*1ZR-Z2PySYa@|HLB(Tv(g zlNkx7&8@}5^2~IH)2C%6au$kZmMfNP*gB`6lW&(@$yvob4gHkW-84GTojTGx;#&ho zVvl6N;5OY~m3jE%F?Z(gi5ic5jVqC7S^RdRI-fl-5b-(0*@B&$o?(g)S!Vhm=<#?O z<$8Y+J(EtK_chX#6yNJTm2EwxkOJQbQK!2xhJ~q*DgNw{7vgKjQc0iqi2s$|es|z= zHlwoE8D*io>Rfr<%UR4c8CKlO`eqw-1G`~*FY7yOeJqP>Y2^6|5tIP8kAn*vZ58UsE|-A5X%Lwmi}%m+2*$@NI-C#Im!i?sS=e zucCbp9;gU>MGVQ(QgWjf+E6(R{Y^>fD2HLm-OTrk&%BiZqu1P~f0cw_*J}gg)A{J{ zZG05a`h#(%eAU)}5U)V7HrwJu;r@N?Vbaf?Fb9m;^seV zF{&s$le*m-&_%{|yVs#f5Ggk3%NIS7_E9Aj1pULZXvHgI%8!n0^Z@pQU&A+zlmgUX za0n?ow&Mdotv+ zkx|{+U;oqP+JOu1)<_o4u#UEnnvuOa+MCftL>(>XYl~7#e$#-y)2hHyt6E3<+N|_j zjGG2t9?2Y;=(kg;*}{sya}rG^&~GP?BXUUh%uPzHRp_sg5q{&}1N|Q2XnC)Ue{_QC z(O88cf_W1t-s`XrWL4q>syJBLF!Twq z00<>GEgqQNb_8Dhel^GOJ$;QFaC2l_7k*?|mnuyTlT!z=XF8`6NbouQ;j2Ze!WsVO;GDjx5`~#`k!m7*PhbEKg@)78A z+}c?zHp_EvvFJ=rI=NzTu3T#ti#e_(@pZ@*$obI;$JyvqTddw1)x|jABEP>1WMsgc z0wS8BJ5=!pQ;oC-7OJU8Kl0ug(dP0 z?{3N9?iNPL^?!HE-;>Z^3*H?E?~ZRBmz>+J9|GC~Y;AhLzqI9lXW;Wm^$z-ECFQy1gQu9ar-17LyS5TZl3#?rymm3Yp*C zvaR6Y_v36n&OXdXI~*=XJ;=9d0q^vDV~v&r@8sX)vdL&wnQ+)mE(cjIO!Q4IG+ja- z0~k_Mx)pGECR@^5SpPZ*o>!7#yBg7U8`E13(L^St&k^EQ7M+BUc{4V;RYob}-pXQz zIb+|*a*u7gfg4$#8Ga*+&YQM}G!h@N^_e7SmHJenP!P!_5IFbI@*IHo#<0n30+uEGwva)FTiFF#ZNqgA zoH%?xc{BP%5@){Fn{~P^K%U)KK36^t{JM5;%t6Tph3E*ejc^9BWx>mhor~ZuYuzz| z_p7vkYKLynWwV7n4j6fJz`dg!fQ44ynQ!$Q)#j!i8vuaRSQ!nwxr~;<$4?9F5}$km z&PL~;PygksJ{-CpfBC9+ulkB$47N4Vb=-Rf$=cWR$m0((&5=YE30e6s5CMead|43< z24uywLDt<>VIQ+C(-P@hu`7#y&elPaWmA&6o>*6f(YaOdoPSlAo#xCkOLA41wW%!j z#~ZkmEh!Z9rNca)IEbslkWMF1USe2}VYCmhsE>yO;tfQ;I${@iCTm|Nz2E;W}FXyBmUIj*3 zwe51{EKBbxw5vbQ3h9c zY1>N%?WtSL^i^O!fhJS}S+;gHtH8L9vyL(8Rbb|Z;YBM3 zd=;44ui{^Lak`Bv)m30W8_8Umq-lKuU1V%Lew^`^eV;Q(adI!xwATAoU?Oy3Tw*om zhdGpA@2+)4dYE=kSV1P);sz0Z*%;PPqJ(Mhiuv+K%LJy5(PD?PnEm`+O{sm$?jk<5{ap8nU=Y++5O{U(}B za>##2NFwV}rC%~Fc4exy*5n9PMtR2fN1T7^8ETPh(NVf>-P0of9<4<<_pEm<^75>- zNQ?rjy^+k3i59stHCtG<$P3YA0xfcK4k?O(0;}2HTmvd1m&=Xpx%KV`_MLe6=zgSq z%r)*D*~5QO&ikHOTxfQumlwaMSL-$0J1K)~&u0ER`)|G7O=t?GjE%IwxVz04Ap zdxnR%D&HeGjVtZgtznb79P+ig{i(ScGVST&5D^>6<0iajZ#3t>#s()q7ICxVWR9X6 zIb3NsnG+$76YPU>zt=*}3S#d)Jk*+=&TTdtnd&G_(c7NQ;tzkqn`wCd8+-bQ z%~vNk$uP<$<*Uto(2mAM|Mu|OSpNh1@Lahgs`61*2IAk1lG{SFHJ=}Sq4%PEZoZ2L z2uac-UcNL>DLIW6z`3XvVS=g+HqUoAKkqy*^+%%@N=8%jU6h=O(V{^K4=D)hoY(r5 zeaqS51(~Z*m~ngi8!n|S+_iA9n)fNdYt`sg`H!aQcj>iI>A0A$Xe7U>QQH*$Dl2D0 zyh`buze+251ciHi@P%r*R}QuyIxc|Wv7-BCYmI7Nv}k>}t354R(4W4buaKl8AQ((0 zwa}FFsxl{opc>oieG^@=j?`72HB&fOZuH&YL&}$+-lk1~#bshtKtPbh>28isfoe;+ zaP;$n_t&1yDi1?8m|R18nUWyIA!;l!6O>ry)H+J~NK{3N+yB&)Q=XcjB2QML>1C0j z5pc7@%vzJ)V@1%R-9mYK-ur06mlEK>aMRxQU0vD0oGt_dn!lvBqG2( zSjKhevO@ne`kdGeR5cswxD~f{&MlJuF-U1XN(;!Jo6bFmLeB~3JT-a&)1(gMKLJFG zz7F%qaGu(p46-|8YusQd2Stp_uD$gO?t}HFT36Jik9#ZWrafYgjTg|OPtm(xby}dI zYVV`mOP-=-y3!G(g6XuSaYRw;u2v7klI@rTa~s`6?d8xMP&>}c?sj$0z;OE=Zolj%?BVuHa<2RnJMD1$^=UHP zeuvwy&kc?<+w_nx&^Rmbzeun;^hf*K(J^#->G!fxN=I8$P?*I8vR{ozDpbW2% zWR6VyKd(*A7FPeytI=cv|Igx|tqvlCXA-X%#KQWXsjAi9AIZ2GYPI*KW?xUMy%9}B zXf@8w>s_n;YzSZimECf{gl&a!{Lbrh$60-@iJNdUTo)WS0kyoI8-ta&UW|lKh^Qt` z4WGdBWQOnw8NeqnO0IwSgx@3;@GP(`gHPBt?lJH<)o5SzP!#AnA4TDR;IBHxx>pxP zfg}jq?JZ9T6os!4&E8H$%k&#i6nvltfR`k7P?Syi z7z-mts|pdqFcyk>`8KXTLp%!qp&QLuRcn*st4mM3!vi#;zSs2-7i5_))%_AHNP>CQ z;=Fuj;Js-Cezrl1`urgn9sYNhGN=JOCU?O>pl3Fo7l_4gj3~mIFYYa^uROdGA8UJ%k5%wzgdg2A>vZ z@B7fR(@CJMHYKY%oAZqAlWZ!BR*%G^tSx)~v28BvsLtjhNMO}{i%*@c&CE9N|2>@6 z-VO8Y%*FZ-^B?bJKl~z&4HO)|Sl@XCY`9(ck6`m(1)FP%{Z`KOZ|9^R*4ZSiv-$C; z^;%+yE^8o><a9F`YO|pQ( z&OPRrngRYdSfT7sIDcuhs@T92nAkIa$~H0cipLjWVjO*Vnlgc^HKh3T8pseD0n|?g z`DYUo&Q!TOJ3!7?Gx4@Y2N_EiKD8_-V-cluE>RZny+BJos1t zjxleKk&=jj*kl67nLS)Szr|##Zj=!%UKgCbK9#TsR4ew1w?}N6p-R}_7wd2Ni6>q1 z#@X8!H_&2StiKh1UbrYGashv6yXBqgL@Yua+M#IBzmo0iHhP;^qA%V@%gxPyr&sPE zCyvCWN4VC+F5wI%o*$o%$y3i=q7!{VmV8>}v3d^6la-(bSnDpnBF{k|5Koh}ZV07= zJ{ik1DuZoVF$TL^oz4m|*c)l>Ssfo2M2(~PM@&hH;0>gOgdv!BaR(Ev0JjQ^`6QNl4OaeHuG|eTM!si~qo) zsnPFs{72~a8|d%1!Mv$Q*bsZ5q)b4w?F6a{-zd=bkO!}UHS*)*${No-FJAN zPjMaJEs;&=sBk@-Fa(eoJLK;p3{lk|eGEqeN*RSCwW3+J@q) zT4$Vu0Ys014MJuj-PNm_cvj!Ho5@Y5+-pT zzhI*eI>JZ2_2(1LxNU9m-kHVX*@$-{OkhB~!TP!NwbBf{m!WgJn<>G)gWH0|r}UAk zO+Nw3T75m)__;rhE;9CWf0PSaT!g8UV>n=J%=jNJCS>++yWFeHQawPc*;qiClZzV& zDYnGrMi|HxH9B~dAF$54ou=Es>x6MyDL0)dh-7)%#oHZsu653>j)?twh8MZawVG$$ zg^>~M&jRbW2-iJqmW-#iQB$u&>LnzvCSYHP6tE1V8=p@tX3}R={}h^th;DGHv+h^% zqZ@YJH~8p=z3)S{71X=`8p#%!#23Grnjx&gk*}di5Xq`{?Yoxg)W3EQO84#@q1v>O zJ)7xwP3J6ze6Ma>&-j6eZEFxA3UN8{wdfZFFlV#>^prbOYno_Sr% z-SrpLVOn%rLU;Yuj5(5>C)&7txQ&qdccN7<7d-1QlX~n;CFnU?SI_8uO;*Y`2I9(W zB!6Y1d|h;rvC%ul*vqbbO~2!(g%#QF*F1|77=5m^F3E?+F`{%28eOPy0GDP^UGEsY zz1_1YL`GdGU9>&MTxH@lq=XcBUA4rN5>>vuRr9zFVS@#x+Y z2MG3`SNIZY0!okRGFx3cJYi>{DzsNeGF*m6;44$Joo58r(L{t1$hpv}iIUsHPdXMu>ZP{aXvHs5s{(_@bRfoO=HCs+si zN&oiId$@yyJqQfb-fY49?w(f1amzTvm+~HffUM6SE#cu>hmP+hzmt+*^1rp<9Ea~r zLJ!cvpPXg5JJNTl@pC@&67;$rgn&N)ltJu+6;Os(j^2}f^Hf}Ftt3Ax`7dEo2iXNk z3-YGfIdVjdIn(7@gN;E88Mrm3 zJxb9-rMyt`V-nNBdCb`dHw3*VzZ<_3_q;qt;0UAmmi@%gwRZU6;cLd$QgvL8$3kut zd5J*DzkQbaWh;+)!E31ziOm|rto34dK;to57nk+QPV|L{+i=+_NkSOS1Lg)`JK~lc z$scl2oidFcZr9EXyGut~W3k8{+6}maZc?WUvG`RwI+YlG_!mS=+O~1|P6r+-_?g^J z2dpkC)#LS23ZYeC{CY=~R)?|-{PtBjM8Y-QLl5!BAoFCI6zD%Y@}ok?X{qUspMWHi z2>KGJGcLb;2%4b40aFTXU<&bz@2Nfc4}eKjqwyj!h{^NfmkY-I$MigbK;fRT$sno_ zeVgN$E4Z*e2UXOlRRDh6YHqG~Tg{NR*cBiu3S=NQiU18_4FuPi-VL@d z=0(U)`J5b{fmK6qDojX!(!bcCFXCYmb*2hsH_DF08dUzn1hOa=0h5%kFq9l`_IlmC z@;Z%8ZvuQlmuQjD21%;E8A2l3HxL-gYb}QN?KaS}zCyS9qqp}Q(W|yMs3WD{r*r!s zZ9}KHRRuanutK#z*DeaSJ>B$oe6tPS&b@S%i!PB=jjGR{=7MoN$B(jrW0sH+HM@8iwH7`b3e1UHFg-)HM;Ddra_C&`o*&7y~)%9 zT4oH6HH$bGy{!H-#!%ZdhxD>0ZU>}#EwYahuznGZi+T$k2oo@o$3PlwsV?G9lcfo< zp^j?)iQ&0sc&^cS>>$6Dc6hGAm7l|Njb{gt>KLADxUL_bYs9q+!*dO12=l)%AGA{l z*%iZcjY%c{@9Es|T;m^-hUXf|8N+i8C}Er_;u`!!LpoP|7oBU=h~=+E2Bk8LSpJvP zp(!t7`O|13B4WuSRqH)s`L(PfmNBpfzY)nCnM5qVnwl-F5zBu@lL;c0i?4tgQe=gY z#iBEb`z4A+Dt##ybKJdzuS2pIBvw4>kEoKGVv*HZ7JbKpwXSA02cqhPtKJcjbeHA* zGb89IUGj{l6TTI#6F4udcb)KmLXi4oIrI4a9L&W;=et@Ke(FQET&bzEcyjZ*~AHlpVNVvXYk0;@`eUg81rIOB}K%}R|N$SVJb$blIk z2Qo^od*r};eJ|A7VopK_ZXYLJ)+Ipja{Uf^Qc5D8W3Ws8`XStYL~sVw&>Pu9Z|v9K zi5fKe@B}`rGl6`Next;ye*Fl0qkfeCIEEiUYdOJxyp;bq$$z|z|2WNmyc|CcU0N^F zk4x$${HRaiKXkwEv5WO-{EBvF`Hwn&9I2n>f6xsPNBlx-?6>771lZs-(TqXW(Qg17 zeCsNL4elr+!seFe8pwvCjD8evT-^I)4f}j}NNh;|1$L%||Zr-+i_pWVQZ@**LxI4Xj z_qLr|tK;q+?#}TYckHT;PnCD>9^W!msoYWCwe$AfTXq-P&6$h5-uOz4B^)^|yoBS) ztqkwjrDhN zl81qf=|#OhM_t9sI|3Z_y|ipM;$A*vqyy3uSzAS$hw~Kj z+gEU%ahuqP2ScH<9`RiL|0O0BO!y9bKzl#g0N}|8I@N!MUi$?7=acjwT8(lg^5Ujj7- zTzUN$KEanO}c7GzlVED*%nO@5OtPA&h!<59Jtf3y9-tOO9vQ3RyL(Iyb%( zxf~ffJpU#2qIk}Yzd{oc4o|*D=IPth4)N=B?UFM1;tYG=hn|~GN^OE2zL(}1_(A;> zpq3lDuZo?=$83GxMG}o9cBdVM^j6lEUCeBASw|?OlOTarKW10r>zfR>@!e>Glin=x zeLP8t?~zu|ouFhjl*@5U2!;rO4C`{I$Fd7K2!zBS@3$!(x{6wp%2^m1-NMMy^}%al zK&k>g6185T5)`|**k7X;M6S`^Wz$_A9yp{;2JNX7digRa6kXQr6KI=CAj=kzu&j9( z6Np55P3}~YD5PA+S;v^PrrF#uyaVch9VTYKimzZdHmdjzlk1KN$R*ENGNH3$*aO-b z{jFFj)rsYiAj#qdoFQ*ET2&@^CnjiGd^dTP8-u`6p!W3HL_DVo&5tA&nq;_|zUaJ| zi;g~BOmMKL5xqO@G;$z#6ke1(Fs?9(8N#_vhH$)2RysNA)08 zJc_+cl!hB?Z+}i>=wC8eFB^vbtkJ5%(1W*YBRW3;TH6h~1gFm!xL%BaK$8jYLuLccJOd7a1%Vt{-Z(f&C@F=(;`i z3;K3hz+jrh4k?)s15ABf!vp(Pq~K-fXZU(*@srkD{ePf|2tNatMymmr6bizw8CO*+ zyIE=F7{D|e-x+b{%?6FpK^GZoX7*=(So6K+=eBMXhmH{_Pnv zR9DjNaf})7Ll!5MFf_8nO|;}aL;;vKD#x0=ZsFWkR*LL>;A7T=LfUBB@QFDC)vDeT z$!HmBp*vEuo2P|tLlY5Nh;!e1*Fxt)&H}>P9*4C(F05_D9^0)B-OQuKf);N=A+5zQ z4~^B#{vJOJMVt&sDaStSkHC6&+7bA*=sc4nQ4AcWcZ0H4hjTWY?+>Djj5ptRph*xZ_L1lSjznP4;)BQT z$EhMG(AAM*R&LA!HDzM=mMvQtOiB(xXhH-4Fi2-1-!3muy4o1kcN2mO!vT<6bm5pN zXyb{|62^idS}ALVI!n9PH6XzZ=Brddu#L&YFP)?r?ma~ufYJ>8!BHiT2%~{_hYK2 zp>nS@ROEDA#Ua&3gpqk@S=JMflwJY+`4;e_x^B0NEGXw(8EK3_bL$%Mhs;{l2=+B& zYMB}|ALIs&PCgJU{uOGsmr7#GE0vt_ahyDX*27><7?2rEKMA%1+!)-M3v8sO>sx)s z%G59WL9hqU-pbd11b^s-5%wl;!6+2t7~V1=ToOPCb%}xht3LDX(P}XVzV)uY#3sUk(o2ZEsP$&Ft6CZ-*e zKLlMh*fV-W=O0DqnVivMR35(pYd7FC`s>g|#%J`$8OOyxqxWz|2N)+s^vGB%aw`sJ zaQu$6^@cl{^DS1uDYFa4j6E&;^Q$2AV&aD+9@Ue8FurTJz&nKH2QLA` z^PzHwE-|0jvzgwzlcEymYVJJ8ob~q$09NCwIw0Fjbx@{AS9~B{OamvMZc#623S$sA z7~wiz252FRGT1xItB^hCHqUKt)TTD`t5~-e?%3Q#6j(;Gx|?h51)e2cY?S*=K!$cu z2kV^Ld+go^5AQ#6;`o`7aMJArB0qOzFy-ar%TA*eD)VyYXOVd$ljH!TUg^}@9Gsm} zaZ1?7cacZYqBbF}7NfgD5TdHNKgBiK`EzwBY2QLKh^dE(m9P z(io=+*}Bqdv^wWQ^u>kq?E9(d^HNn@xUhO!;&gEuS_c2cl@#uLt8;cU2e}S@9-q}t zud=FGvT9?v*6Vw%RW0+)C@mA}?o3e-^ZSvSWgeQvt}UK@YWw!NXP??SC)L5TPi>i7 zJ%zyZK|mdtpT<`PtE&t2v*d6gR?U7B4n{5~m%S@u=U+l5$%FuyuA*6o+8gd8xXc`Ml4x|T-koOx? z_P96&Ap?naU*&?QlQo2ppSy={Vo_2K%j|X(kf@E5>U7O*RB@WE;qtmN%giFA>~6n} z`>*)zA3fYQts$Ev%GAO%<^>$vkW%kqw}T~Zu)jQ zPoG&Sy5ZE$Ge(LD|46l>=RsNPSv{Mq%pSVPIO6jNngo$zXJt+SB#)9UyAZu16^MnSF1hK#1lZf--3_lzw*EA-jjibGRvkEwRhD*pLf|F95l#IpdbF7gWj! z$$awtS_H-@ zjL_;RznM@{RE-0%7#6~AO5E#Ijtw=3m=ifb5zo?JKnksZ1E#NeeyH@7nk}hsc5`P6 z@Wf)d^XkXqzAiQBg+cKYTs8peMbsPei<-2zmHV>t%JoR>nOb!+B7Da$b>dmBYVUbio6W8;Nzj8}f7#Z6q2w=X1npxM@)(kVr)3PsE@Ko9RYzZz`4wL! zpVI$*3DLDHJ|l#`cpcB>xu@Ldx?u?;p%18n_1q`|4j?7r@a{{wSLu7uG1Qkip?i`f zB=Bi38T?+%s!^42TcQXTD!|F3tcUN6Ce~$)0NUwlQGBKj^~K8=YRur%;r-f3E!r(1 z0N_oGMUuF^7d<6>8QzUh!dwEa!%P}^GF7qXvmbEe$?Vq;j~r%KHpCD1T(eIik|3KK z{wkfR0^f4>5_ciALF?>8KXXQ_%G_Q;TZ|d|Da+VT84kuWB@lAR75MHD_-W&aNj^IY zDU?cN+o0%01Rp3Zk9qmXGh;ltA1RL=JPIqx3nvJK|IyeT>a`}XG$!UVi&>Xkm67Csil%2vp&zu*r$4{KQ!=(UdGp2 z<8bR-EE*(K{|oY(F}cIXh3eE99&{gUoJH?Wjk6qnI5QJ&ckuK@AE~?3FJeUp9BBCk zbdj+M_w!sdVh37&3>i_LO6nG7dvlFE^Vm{6U=Pm(zH9FL@y^3Hid80N?-IrK)aK-I}VJYK^3{ zes*oqeCT9*B zCs(k8n zs3PNO<_8N*Gx042H*!nCgJ!K&dW4j939|$aRkv+`!rrbfycT%YD{kwe$l4A2!K=k; z=_XVhVn29A68k}b7z>*cx=_BCoOeZ$Gjvs%!m99WGzl;DlSO5Y;B9XQ9#}*N;@TSC zqO@P59~0Udu4n9&WVhtn8dl-m2sO@SSli5`wg$gKb+?a8wqJNV6uG~D9oJ@n&^odx z_+gjUI_qI!a)<<7iZFFBb3g)9hd5m|Dph-?RziwPk=2atbJzOsa_$zUj#p!-vp01d z^Ofo`b^J(}spD~Jd4Rz}STr10VV1TE1`7#;4`(XTPwuGcIAoF+B^)^%hb}NUy!MlaNQ`w~J1_HG@#X#`B%vNsq2Mq-DlXpt_B!;TX27+Hk6&bJGKE@d= zwt-*;3QIr2pRiRxT|-o-0bn|&KO*le483ol>vx|Mlf z#P9vSEqISCa|KQouSk3;QY13meZP!dFK5>)*!3m2T36ELDqQxQXI;%duEEEsbuGJI$FA4Y zjq|MwSKwoXbp!pi!n%>&x`|zH#`UDN3imBit(Jkmt#x$ir^|Y}+~WLpD}B3-E(3JQ z(Pb^(ow~;w#P`vuYeucx@ny=k{)77UpLDr{?pQwY{WYnQ?Ra|BdMU0*fV=}A$T!W>98>CI+uF%~5!tWV4cmH%KlKRz*v&q2 z) z@>O!<4E?v4Q`?{ogr2Zkq|4oXo7mV{|H*z9%F5AZZEKIGi>FxgPqDV1VhuXQYCmOB zC8t=?r&vkwd8EA3BvJ-$Sxn8Wqi-x{SwDSaIa}7#HwFiM3w>kZpSRLCrU`GOZ)~$X zK;K9?x2;i5`+fXlKRz&e2l>b2{9}xNyo!Gu<{wYv1H4h7k7ZU7AJ#Z7b6BYEpSLFP z73ECv4+|fo))D^4H2cHBN(JL=C8nB12R#U^kRJ)l`K_H7gx(2nQEw3TC1*zBT z$T>3KS%GCGRMx4^T7rnJBlHGm;ZuO_nSbl*AMkWZ#VsGPg!+($HH&8BZtS9Y3< zL*2n~k-dQ{&ke|b-T=~X&33=#9R%Au3*#lbS_X1EHs&n#H|;gLYufO4*4jnAXO*u+ z<*faAm@f-(`yB(RqZ zIXVV-b*Q z`@~R^YE_d!+1EjbYyo8Bi@fbs$7Hqah+6g$UD+vy#Py`07K8N6!gPHE-PE?k@8=aE z1XsJe);Az(O>wkz$Ttnd2LV-g53I#BA&IT?J zego#sra7^J2q<|b+dr?wBEtXQz=MrA6THmeD zU~UbYM7fw<03xd;eKdwFzt2m5Cybdo`NUJ5NmlocKa2IS2daWzwICWYP>5 z**}$olJ5WT#BAaurR(mA{U+`-$*HF8pOYN6KgZZNC#txjnY+11=#Rz6Hn5@WsymkoXrq_LgI?GXdT963TDZ}@NOEUjR_pa&PsMneP~K8_*}}5$TnSMbT71Pc@ooD;h=}C>H66%LHy1Qt(k+;6$lR zhHYa9E1oFg2|I+be9O%27M4a~3!ZXmC&)#Wz@o!r5|u{}uy7SoD}c%>$cczd33+38 zi|8)Ua;iv`2)jK+EV90m8Y9;mY?cY6ky>0a(aLG$Tf{Aje1t}8HfC`40&0p ze~3~c56nFFNJd<*wwr1QZFj(KyVfTzDp@Y{h>}{vi@F*zqs&{gk=z%beScipeeu~B z!lhU3dVJ#I2qhr)DuHqE%`}))3u;aO+I1qYU_ztT8oz&6Yt)z8$16fqoLb|`_iNZS zGiJIajz(1*6`u?jE2>!S{2E6|tEFGl^)BBOJtwHmiQicycFoJlMD6M-@w-~`?OpHa zi;RcQ?KzDvenrH9cCa+7$WWt+?ws>6&B=&=_11wK6!Ye9)N8Yt`JZXyM3d}%&ZLbf zV_HWXtyZ{^a7G?gV%6hQdsvsS$sMbuQo9B_V#BbpeZpd7-z+n_thIYh)iNDSv z7X%h}o?sV-*-PpYjitE7!V1kZr)OHTv}BaiKN`Z25r?YSi9OvGbc5GDXeLyF@frZ3k=en2cYFgABK<$@Htz29l zOG|>Rro+QsC&l)~$xB)SC0~HoyG{xuyJj2C(<<<335dzp(GZ9nojN3#mZf^mgl4P9?>sB5WYUJl ztxpxQl`!u~#Xy~JHD;xmjDxAr87@*yjhnTRT>oU#G|7(5vQ{DXs-GS47V5B3_lr2M z2`rArOR#He-*KLhuc@(E|0O!?W#d1NWaA7C*Z)^)W_AqMpGFZ8hHK8-8pW18%IXX? zTu(xLeOsT-(+|T!%IuY;Bg}&t@IXhatyv)3;#b^q%#zat3B>#$ibYpy*^v#_^w{OV zj@p9TdiB+=cczm@L^x({N>Q6SQGOQ#8P6JsMSP%{>V&-3cVDgPycaYzEou=@?U#%A zYqV5TCSq-uHT;@ri(EU?CgNsR6Y=KYL`*+v6Ix@eJ9Kt2pYemYwy3lh+;Tk(f)#Ah$!hMag_a%&Z8v zejNOYwFfQvJ+37bA7oO>C&cQ}t=+<|ip2G7>5tan3>No`5AHs&}0+GbkcrPUX5(Gp8oWKyij{1LsrBrtg05GMtg&AL6)me)d_#41A2uWl45f z9qqjMi>xfY(Ms2sK+M3{0A@@cHo$;=294V$TU+J-Ec@%oZRGfu@W4a zuy03L(GjCGj+B0}n(?UFVy(se?7V19w-J<{kJIx5jb;hD8!X^j)zi1qm~ zZVLKct}=bGK4Tw-{!bF_BV>2`_U&Bl4eY88NTs-K+cxJ%l^O$mf%mEdVJa`AtXLW@ zqyq5eK!`F6sUe>33aP@YszSW;89J{H__HV-5NhX*jd$#Z zM}0U_?x!I40hx@+nt}IvvOH)+C_m+RVys7bn5_p5cLwRA7FA4uf4>N+iyM>pDX-9J z_L>P}5`UXb+==#0a!VW;lgRf_+BTj8F^OLc!W?#hNi{66s{ELX1XsmypX_MF$q3x6 z)WC{NZTEl`GXPd(lsq?p6*-z>D1f4M2MfmVB=sEXy7yu|BO=QXbIS5 z6%i1aDR|)KG}Wu_FEw9>9Wn;I<>3h}Pn?QHbqg9q#@1U-?Ni0+zv+rf!tznzdb_;fdSSGSqN}7mYj-L*J({!yr?_x> zdipV%Z(YprDLP+UQ5K9Y@bvjW%L-rb zk5D93QEXrJgcx~BMx=!Add++P5J}t&56%BBHHoE#!1^kRh&VLo6xWJde0)7U-*+GM zLtpoqim!LoPY|OgnnSc_^g1iLdmts3POV;T+>F z{XFNx*Bje_6HtMFS8Gg8Vl(N1$#d{vY;0hsrvdLE9^Luq?!6KYYqvzhauN9W4$XO( z?|si;s6GkJ*VjihKw#L2A&5cw^B!ft<)k~g&xg22KwupvB%oJ^zdusUGTbISpIX?Y z^0nTCA|kd4T=um3Hz`7(U;nzB4>u!8Ap{Fq9J^{(%LoXAM zVMAWal@0|)00N2-X$d+fekJ&pV)204JX$TA545YbirI9qVQeGk4XiFw>INHkdG4A) zW0)bl5b%qQkWhv$VH+^35r~b=Dw<_Ztm7sF(Q7yBuxKN&0H8NBW*On2Zq?p8Z4;S! zWq8M?K>_b1gDMdH0enMP?+}sNG)fb|%|kH^Mi7M%G9OSC0Ww+x-VH3>z}JJP0QHXW zXcTC~Qkh^5S@NAGnf{Pp5B(_B;dn{_el8y1kYTpUexu+`(F3Mh_&yKL_Z|qjYXLuY zUs{~HKhV{XWStZ+n^U``*?e!NOqZ5ENQms`R`pon67{xP&;Q+ZDqZOaf>(CbR>bFq zHAN|OYA07PQB+I)cGvs1Cqv0s+a8}HK!y_1OhC4N^+KJO8308CF zKcKix)=LDTD<>JG52RBk;3T;D;kIC+I)qrMrwIOxe;slH^6(=~X!2(Udj`y*`b2~7 zE`+lfwNB?Nw z;&pNXLCC>IjDo|_ z@o{=DYgUS$r5$Q)e`!i)l1dkU;xfx=&ep7;o%-o+jBHCTuo74;8zUd#%(9$XsA{F()-gtkadbKK zH$5C`fkRKz=%`(zMs$tmpX5CMnJ)8u5>0GfdM#AuWw?kX^*=&|D*h-!Coj09{y4+& zMVbmv{s|-3KLd&CA7m1Pd)^EbbhE*4GKa|k_%gKcED|vj{4qIoK`ybl_Bt~$A!cbO z$TUAwLq-Y)P(tsJAhWl|&DJp!mN_B2l)0nAb7D9eUEr71LVG~4{3r~N`+7ds`NrNHu%M0; zJ>lUvP&$Jgp$9)Phtoq`Q$2;FFM{vs>+56hL$IUYryB5%EQZd@gwh)_9xl~vljHKp z`>2L=9#uncs=|AAG?_~&7od%itd!y5)o^Ntat^PqMG+B)SDe2z$|X72nyOm7GwPBa zUOkhQo{0g#_*5iwWa2>Zs?=bv1c${8v_$1VE9!A=JNeY zfohH1PbN=$x^ce*vTZo8iq(&A6Dg=`Yzjvi_81y+`R z^R4Sk4{1>gCD{YaTM#hM8#>WLTI?Y$Ze0*#H3Vt#Q&3%}HR|hq+%)#9TxI&AzIt$d zXBAwZqJerKnP)4~;_pZ4fKUg+6p@5K7b*8Wyg%6KP8Z&vBDOuspGL}ix3K?n5mFa7 zI`!ARLZ{hcCX7z~1e>@M?VIFII5Ikw@1eA9JO`pve=h`S5y)P{1OYY-w+mQe?Ur*I zOZbZKUCELTJkLHD3YaDcDjJJ101zbrCqEiE=9$q$TJ-@5?5V6%|L!5^BRo6lLV!PhC~Cgd42F zmsQJaIE0z+EUzQHV!pEij+SL}{#0je4QVfM95{vWzo|y8GXK`qKj8mfCtP^GiOPk~ z0nv<|Dhgbb>hCH_;l^{HF+_v%`ST5%YCJK2oZ+fSRwE3iAJr~ zI7YrZ^2`~YhK*x3JPhR^!@H10@RDaQ9p&i~D+z}G#dhSw-p*{rc+aidjFpHKBnk7`I!ciRn zT?rBRhAQiz4}K5rUl90)2ZZPMwtU_T#V3b8FNDSUlz4pF2SkAk=dg_9bObK9D1DDN z#F-Ed!`4H@wunX%$EG$RA`}0t>(%hDT?BBIJe}CQp_2|r3Y;$i z`Ec$yU-l`UR8&3_77DUJ>d9%dHPrwZfd>p!zUiv%oTImSn8%=BLN1n-y!h<%wl6mC z13K1TKv32=^icKshjry;B`SwQMMY92?|g|td*@lVFWE_sp0G@EUdrNV7BR$%xM(ZO zLR{AJ6=^_Ry6Z-+RtMKocUrqL-BGj;6sfcP(4E0ty7Ut#E${W$z|Y!)m2BL|zk(`6 z|FXhC{1S=;kz%`%Cjiw_>E z=lkxvRO{>Bb8|YG)45E9@1}E1psbIBT4vNj_X#|}#q-(^5~C-YTeLpWSFy76LZj?1#SjP8gWqYS`4mFXmd^1M^bfkjX#`gq1A&|O{vX{LaL$1_7rAQI^{Ia5U* z&u|^5ZDZ2o8UKXgT5*7e55c{ znwgm`%#>PFJPxL6^N<|?zW_L|0C+zU`2(!IkUN7eQmI;Ft1(+pu}gRD*thS=!oD2` zcMTbC{8Ad6&>pQKF;%_7^AnN6li}k3{i#Jrs#NPFiilYJbBWSw)ufQ1ey!?meV23# zuos%uZ#n+H7G4tB)M3CCfS_d8!bt-+XSv{2WYBHbDgeqfB!XuN&;_0dz`U`$C7+@o zLV%Z`Okw9FkWUI2bg=dwX*Sw3et6I!p6IYts{!WIs8w;Q0kg96j^}ZLH52+Pv?N%s z6@0VJenZ>M3s6HfmHo~K)uSzU^7I2KU96B%iMHzK3~~QMS9+2~Mc@#G+6*>eCagy? z8qc&;!NHKr2r5xl%NuIh-|RX~RxpNCYmGn7S8MoB?c5b1JgV0C&t325jRH+FT)5QM z#P9#&P*a!xv__sXT0)k9d^@p9KhVhhUn?!-4RxD%FVzfK?)( z91{|U(+NA5Y%~EHy`zi(a|$e{2=tcG&(^s8a;5?zMuR3bypCAVmQez7&!p3yydeZw zOg)0y@=#RHgeIB=&}eF%3*f23ZrwFVV2kVtb~3d=6cs*eA~LvAW4PHgX@<7JKcU?c zhq9`)=XLBEcCasp$PbdM(ckyz%3hR&Q;X%C_V1aq27r?oa{xK%OlFU?g9xBwhp*IW zYL)n1EqPbhhwyqf1#8$_(O+6t%|d@2jHkakzcLDZh(;ZY(|uBf3GWEfO>z}oD3q~) zEfhS9X!4t2K04)+4b=Ez5zjlfC96RR5%vUE2(41HWxJZPWY5;iQ_V)b(Y9%A48$-f zv^sFl###FMMnP>z{7$YC!>9J|0t~5I;;XyfwMo&nu5*wgidsr#A&QU36vZbQ zG@i4P5c^Hr*z8Q*L(V=G`_RqKiUGcarCD1}#C#QjZL0*^b{*yT#;J?-C`5fOLuUB^ zdC7VY;RUp5V12e^hTo?locbfWY{BI|3d(BF$+GbZ_z0@V*zo&d6bT~5^$Hj}grzmZ zha<2{{KvAi=L!N-&I=CXV94~l57H8xCX9M(xB?g&20|-WowV*|D6~%Y3CHd;$N^~x z)X1qjPQ@j1tj2m-ZNM>ed>D?sn8ifG6ik|8X<)d>H~nfeXsV@jG5)5waUG#V0FI9n z_(7eQ^(ckc#S(qckDAjXHe(`Z++A8`Lu{@Y`AqP|Nb$|k^!$a?LhP8HKZYVAOwU}V zHM3-LKtENTdlmkYnx2nlrQ2fw`h6#oIWjra`{&ebp>}7%&;u}L zCzu5G^Ru!3EuNz=egM}GV@I=9fNnHvxSi{tY?>w=;uR(kX3#%mhzII8nd=wmdHoYm zrsE|X=S95cJfpnn1{$EUL(UY#TPXq5`o%62k1)+IrzzfIdTP%7>dp=BZ)|h!{wb6; zKZlf+h&o0*3f_G~bQC~*bIR&{tVd!&zf4K&)#I1^Ow=+gLp^>WDoVE)bM*NC8?DE= z{GRK2{2f{8@w+1?}h5p+HAWK+wfD|*fh^orZ2Xk2a(r<$ZNC)jcwbu zalFTYUDY82@$D=X`D~;8(t*Al<@WZXiB$)tjR|0g_#Xs#g<94ljRwwqpP*3tO2a^D zIG}jrMETyrDgaz7Vx8S*jAk0!f$2T)67n7# z!;67FJa%Nrm_+l&XU(v3@pH&ayQ(2g2omh@Lh&*miqZk0?nx=)Wj+=u_dTFCA5(Xc zA(WltSda3jk@DV|_tzF7b#Y^`e#+dKU^L`Fi9&G2Pb0wj`BSRx2a^kkKyZC zFR%~pRyy@%&K40UQmLWySo~iPIxhq0JVwcLA3E=UL7#NiNnQ?<0R}-f@1W?>3oeS@ z_wbiRmanBn(IZiUo$CM+f}Qy&dYAk+84^I>fTGtqBT)1v+O^v01kv-8!Mcg)k^)5U z)`dXysAoP5y_oOt1%rqzxWhMYPH0q;*;qstxDa|dU#T84oQ)8A_xrlz5Gl-sR;rzV zr@g$P`kC&~m7QV$TnIgCF?2`95PDiVXqH%^`#d!a#gz{Mp{KGA`rr?Q{9$&M<-jcB zT&sk`E0!qvDCH=u7)Q;fO>SWbK7^y1QG_$X(JEZ8U2H}I7Lz5|?l%|HDjqf`0f_k> zv^OSgp2`kS>eyicl(5SJom9&$>B>#QW*%U@y^mvxUDGrt;HZKewey`FE*af#i3pkw zOpm5V!BQ@mo}P+KBF@XJ#L+&U1z!scyZ~Q!*L_#54jvV*pk0yf@XQBR5D(Pr9bh}H zDL5PV-M66%(Z8(liB6(O5Gk(vZc<<_?;%UlcfGs)pN%ALh6mO^otngQn{K@mMMNA} zbBb%l?ZFF{m7*pS7p6+j_uY4^)YrY|#&j~LJLJvk!1~LK(GyJpT7R1V!OGGLjjk_& z1M9OF)a!qN1X^vE-NBcu%GYzF%inO)`wqT(pk50dQv65Mc!lbl*oPGE7!5{_Q3fDf z%5;)JdEP1J!k>-c=mjVgZBTXzw9!i-%@mN(p!}CiAQI^{Ia5U%l(~-6wlS$e**{^p z`^qI-9Nv>|q6#h!V}N>Xk7TY){6@E;ii{VB_o2uHi^H*>bwRx>yHW3}0@T0RlHg79 z&vvs`tB&WJ<}+=;b$KwnRQ#-+K;|)zw_Lz2CuG?6;d||TboXA<<_WTQ%V=WvJ!y=H zKodK_4-EFV>p(*^cOx~qL>S{R*b@_Z748dR1b|tT*Vbg&8|W2spMBm^vtGYHtKmfN*b6L|B@cDdDVnp>n>M2=fxlcAQq7QDd| z^3bWm)Rpe)APdy8H|t7IvT72BH`ne=ZN_LaE89TKVNq>y@q2wm$aqSE^A@c2jkj9U zk9M5`S2`TyWiPcA@%y``SQLDz_HqULRW0@By56@Pix&>%AWBOIjrI%OeCW;=1VoIg z|G=l;zDSpx>|fP8oo9+gXQ{7 z4D@>_RjP*zfF7jQNq6HZysN@#u6FYB;IOFm{kg8bMX5k zwvlrt;8}uZBW%(K9}wH415Png2;EFQ0de|1HC881m}3HMQ@L!d@4m`n7ko&=(kbZc z&a%r;suZJ55Tm4|Qrk$S#S^=igwa?f$EE&3Q0ux5ilslFKdEbY~d#`>y z{!SXR2$d#F3^;_z8>&WmcUM^8IYw%}E#AN;2Z_%fqvy&rN+pGAyet^wNj{CfgS9q= zLQBgS8?d*AksHBUj4!0!zz{$BnBi_cGyDosN5>2odTLRZO{+vjDl7cDj?^hA%`NEi~go+IeGS?gK1>C}Qu zDb30DG-aLlA77-vs9*kJjU)sNm&x~j7wO7gl;)ro%e~+9;xX#MT3%fGDE3lyNH-~W zQ`af?cWxwMJoyMG(%B#*%Hl{nYDv_o?iAxGuK5E>H2x{Z-xS>(0;*j@7>b0^2WJ)& zhQMN^B6=%~ar$b3Y?(is`}KR@~!jX7tg<7N5Pr&5DK- zK8nURqz%BgDTpvP6sZL|7RD?pOZ4;bYI#GQXG~v*94~_uWOCQvJHu=rtfPgVQl#V!-m7LHrP0 zr(}!Uxii!4G{bsdG;&8wa|ZLRFWeb2I`v z7Q58n6P3>{^0rphIv>>yY>IJkne8KNC^@s;3}%a>s@fiUGnCP+&08;6HuyvHbMrat zHSoFUtd_%}_H`v6B(>Dv(v_N`mz&TI&amEI-kpjm)K!oS#Qd4fjmuA}8N73&va5b4BO3pT6lM0@*X`UfN)&ah7WgZ0{i+8(T zMdX5C4maoZw(Zw0ZNntf2CdtxWy9nnoUfJ>xm0Gp>E|>IlVW^bX1)%kN(W=6i15PZY_XpVSYmwUhX1N52OrQeOqkVIW)=+WSLF?r z8DFj|I|c8!GDj_zG8Z%DVEj(5ikWioaM!!GG${wQlu9C$I-}?W*B=Xs;#dJEOI^!4 z2!m!5+3s7%8Ul1?8it)}%QWoL^h^zttXZOX5X`(XJzJ&JDv@(5{7YNM^V3zkTr9G) zBf!p5Q81+vu#IzGU>*m+i_KtdD19gyK5dg0cPP7s<7V3sxtGo3tV)Uory@j$m_X+-}d9Wt>#sE;o<{9cCf^<>6|*d1uKY_v=sxdW@B9v$B321F8i&$p+TxYp5dQ$o;RNNDwJ5tkc-5R)l3`1&ePn zcJeTk)0Ci^N}k~3{U-kX(bxkLxJc(B}VHsLnn zp8O-C7~TMXp3Jl22N0$^7O~t zfJ~B0WMz2BDpErpe>P^!dai$})ta%lY}nwL@;3Aj!eVbAHSP?enzlHJ74bs>YcR^# zi(wPDf&EabH?FTGE{44^IwSl|g1| zTO0?~5ROQi379o1G@tTBKi1dn8YS7pd5T@eBDZmbFO0XiU7zSbK_DLaN_%?7&PnnT z6T?TLHL{tdEia*%5%^pU&Uu-~NxexaJckVDPs+pzK>#Dn)bd!2H=23p9?Rs(+T1kD zX7#99fkfLg@KH1Q^Bf)Ikn;kS{gnGBmHiYLi@zcY;(yqM=@K>$C?=%n5vFd02JyV? zr5t3Cxr`RJ| z^S-Qhb}@3Y-~97k-`U-ODl*>LU5g@X% zq@VJ2waA5tTz8FefQwX&x_Qi5NK+UBFBaj#WB$GoOwD) zpW{l^o~e~)%?exH@^|>O2`D;jvg&|$A~1MtP+7WTf^9K!_@O8nAP;I3`JzKqsnQ}w z-S9`jIXZKIZlW4&jXkXa{=6V9Cl)IYhv|F^4YU44^|WJ_xu4 z^uRg=XW-XE>~ZSs3FjOA)i1o5=|$y+?*m>}={qCQ_kHM84YP}%b$c(!mb>E-|sNxatrc>$IAb(FU)i1OEBw!AwZgyq zDJN)Cc�xpS;XrMlwexsLSK2*+QFLpnxJ1tnfR(CRcYbaPAXv`+0JaV9WiSyvzO? z?CXPxrNCA;1sGySjQ#?wqt$w$(9f5mES|qG1>}&~!c3_(<-G6380JezlvK4jLLm0+ zFxeIWB5LM@?V9u)mYc!*vO%g@^epa%m*rj?$#NO$qZ6qa&(TMdC?Y~1aX!@OBZ~le z&+bGeUrwiqbO+B_B`Wz46aOS0Gaaoe`59K0{uo%-mq4PDv4QiKE!&1w&32i5`?kr} zR{1|qHh$asP4{ozRb?MCxA$!|JSF~Do>H@o^LIpAZ&@mRdfwp$hvh1dQ)8^;<#C#U zZ078-kc{SW+7U0sd7OrLQ(VWX8A;IN6uX!K+_r%@MBNYe7^gMD=-y)-t{=iAUoeh$ zBK<9>F0J29Hxdl}2|qIUELWMn1VdvVh8yMKadWa-KVi>IRqMweH=E-CP@0}QM7bbf zc4W>8BZm(kK5=;NDXAs5Z{N;U*ubvpfK-axwrz8MRH-o#e6KnXrt(6{ilyN~Dga*& zgebF+8sh1$kSe^YDx_R!rjVCn66|nT<|7$JOfkT{p=*r{oIOM5)d7DTr2|4y(NiR? z`s+x!pMuBUrPsJ8seH|FUV9&Z?FIJ1Bc7(d%(;Scz<7f&UErBLNU82`soDTb zDHqm_M!Q)y=XnudedvN^C#~hHcsR^TeC}ChtzsW-5p;DN?Xgzlr%`JSyM7nv=hj8| zDv%M@vR^6x`>1s(`+ga_Ue2ypusofbj$N;(8|PaW z!u@*B3hM^?YlU?qyLA)0-i+%>YZdNWD=-yV2L86z(WRd*>*;cf^V_ZT?KZj$&?QHg zwRm^x9%~TaN2jhCwQk3kDckxF>eqkL|5ViVO@Z4qtzW;va|k$J6*g_X_l}%qrr; z8pmZ07ViD?)&#zyoGJcc;bYV~!vC0Nf4qwrnIs8)Uqy78#Sb2I53qm)KKRy71^2_b z6K>H8Uw199mFko8o#k~L+0S=Yz(oL3cdE0NoS@+rI|Yx~sYb0b|JKz%;QwAH1n!%t zoQwT^L^IZG`ZjfC=Peti;KaXyJUGnehGUK9kqtaGMuB{P3lro+5%p`MY;WN5@1|*Y zzqtw9Hy0+GjrNRPz%Gt_%{hvMT>#u#wVa=sowuF??e;)RTHOtK@l(LsMI>RBuSDg~ zYDe%*>Ya{(h%g3QKzMc)7a0S&L|CVMruT&(=j#IzLikGGKrIGGixepz{{6mEJ)MWv z_d|Dd_5*y><6R>{5eTN?7zJ#~Lk8f4h`GmLgN$fX#3wMS_)tS^e^BQQQ8lPhUu9q0 z9g2hnRk}@67QCI+@`hUW5nb6ymO4V%+=w!2F{sKwvfL2Zg-N6^g0|a9=4jEh4}cNi zD(7u7w?!?iM5ijaSP?HHmVj_-D@RN9GU9buEH#X*a1n!C zdwh4uS&ZNzDFE6d?|z>a3wZf!1rb<~w_{8C$^&^Q`O&i|d)U?xM=5ZbC($KiRnuUlEU9tCp)R{J9c; zRvP7bHlqs0{WNIASyfL*CT6Rb2^Lc6rGG1$`WJcGMlJG#-5!F`$RUWu^n(2C+0!=$ zkFqhyO12bbs2#^Fl;Oo1W!T;INW_$U1vIh#^e{mP?wvt54*JP!koXeVS$hi|??Y=lkvlN9gO`b7MN0(}`*L z_AbW+%KA8{Wrl9`#I*MW9^gvpieDf`Pc*x09TqNSW$A@R*O!39LT8kFD~vW;<`!eN z(Ke<_vxp490txQ%*o_jLAoI{aVm2u^DSky5xY3@$5(^K_l*&i2QLyuUA&1(T7w#3v zA&@|;?Xo-gbQjv|`7jQ0()$iRJFic2>bZDoFL<1HMl{GfUL#TC6)Hio52@TS8jKvH z9gC*BI-O)to|i&<7eS%u0|l2r8@&Y5OaTcG6mDYzkw~w}nJV%?f$KPJ8KE89PBICv3s~KLxqtV*gMED*@c~ZM zf~o{P@+b&wHgnQpTD6<@Muq&n&xBF&Dum}F6+(s^n)jqu3v!yUUXLOoHZ)vIXlDv? z!M4`m_$}r_-9J;f#?~d>)*QfW;X{)h+W>th^%O&CqCioEDG3h^O9_{D2de}y5X%sl+D`b zxAay|8~Ie*<8Okcy{CBYa>Ng=msKL+FY0PcvUC%>TK9m2`T@pdmfI`jAbMCKZLfhU zFGkX36Ls~y)^}g6>3?>;w<{RCskO!*)oYyoc{vq=qIU8nA?$3cb^b%wdzzyhUvcD9 zZCHF_06)^^+9*JP)$)c~_V>Hq>H8SIfXZX>6bzqb#UZek2%70CbSEsNE^ziIl4h$D zR&bi={M13R%-{T2<00D8->q22yC+iHm+li|c=+;knx9uu--J|2KfGY)N(mb#Sfe1pXuDc#4Pyu7JnITHDv7vjFawJLCp?rSH4hpNn~Y>js%jcQFrGOrsy@Gh zxIZVqC zCw|8JMe2Z#@otOPUZ-$o)#w+ki|C@tke~3;&@t_#7#Y{l@=I)R`8r`U7&0+M)kacr zq5K#&hw!0L$+Db&RLlH=uFT9jezlGr6j{^uEelyQ`LgIEY&cSMEUm1)9XaT{XHbX` z;`^I00h4=gIB?K{sxbo>SV}&`j+MHmvP({IJ1ED~au3r+$+u5V7ZrvWt> zk;AWZCN)!XY%rtW^%2dKZ*f_>T0?b}_5Z#rtp7KR$#^>+4#<3}K~|eh6~xm5Fwwc( zp;BnIyrGu;Jzd!;gvM2aUXt9r0GF!m(e^b9tsrua{RJDa6djDI6_PYnm$T4y1`*4K zzPW1o%v)iQJU<9#iYx+I6CAC!(b1ezm#r$#er!eQCu;CDb*#2i3awcAZpZ2q7fA zyW*^@K(+KtqQG^hJ|fRpKy5FXA6p%Qs`off5ah5a=*LDsanka2cMII2w{&LW$My`W z$k>mqjv_&%xIqqMpTmp`&kHd}`sdFaa%2^f<;j}pm$pYGl@;j_p~v$1d_Nr0`l#Aa ztsk@2W~qupl!uO&%^5ma%uVz^HU&Mk&NzrIhFZCtkKIPBbDDrw(S!?FOq?+KC+L_> z;ht)FD#8Wz)=@%KDApe|jnjMDL{D^cp(Ia=I_!-paoX8Gre0!G$ zhwdnfi14A~8cH)gCC{6pPEOu)r6u*Ddt+8JRgAnTzaGgPnaot5OwAVB$f93Hkx6E% zw*l}}?vl>XyeXOt8Dc_oX9hxImgyeE!Go9^<;IZv@X~Yik0Y^%Kk3PBAyPol8%YvQ zgwDZg1AJ#VBdVp!Nqs>z(?2oYhTF0G-SB@+kK7!RRG6n%p0ANKja2_?&p2r#UkFk- zm}H~JocyrQ$Hqa@(TMh#Q@h^GiaEV&hp$9V4;ii(<>uZM( zX0>*Rk&$89FLiyF`@Pg`pG~1?IOt_$02*-* zSRcoHoC=f(6L?|FYZP!7FXg!&Lcl9}j3Y_b%gB%@Bg0{+F6{|LH-Je#$xlX}xWya0;W_9%ZEDeslK zxkX4_TmYr7d4*21#Y_mG^f;TilXy#Y^K^k!ctr(8yD#VPHO*y)+CNq+wu` zJonQud=xsQb3Nx`Ki@Mbdp83EJ?ds)_#FPS$j-I285l^2VAZ<)tjNId6`~o-z(C)S zf#JMZy)UknK3jeqiu(qh7}-1H0o z+gGZm>tX2^4v^Q|M5Bg89B?oCk{4~7@HgeM; z=;_Cp{=B?O7VYC%@Up5*2mUj|j;42ew!gsxU^I9ZvGdy0drY5o6R9mk^5fR7BoZ?z>1KMOMY65W);q`pq zeJ5Fc-DfI({(BgsCsO`ePn92GW$A?`_VIG&5ci6_Wev{n708c*1X^vE-7%G`$_0M@ zM>y$y$5dwoT)jg3GXc=wJ6^vTHD00mCiannJ4S=tx~UnX9ixlQ5}|G+GAPeWp)W0h zLeb`5mp}qPpA$$k1tc{8ewYbFBE2SOsz~!M*Kyi5CN=;1Ck$tM*X3l7{(3!&!_$eM zf5FEi)MYk{!)2%<_;&o1sw&{0T(S_ki^&BBD_60qggM3m8P4NzTwb2;TYWhDa5X;TGuH)QUt- zEY=DX5wQj0dPO_8Bt_iU>-Z(z2ptSs@y518L++EPAOv|#AP3z-+^IYBT!ss29R+548P5_c7rr_tJyBY=Iua7*?v&W=IN)V zYEat=R`;IfxCHKDXJbAWV0KJuMG= zKG7{IDU3rkh6;2RjB|)H&IIdK3b}QGzRJF4x*Hps^!!kpTZ_eGO~SHj+F&*>he_cy zSUFu zNM(gj>PVe}GA=9pG9xZ$gk zy&uYY*5<7jDA^oW%b`(wypj)?TIxUQN=?z%O=t&aVQ*izE`mYSw#KKx3dUJ#_b&jm zspT#EgodJ-^}XNU_Yme*^ozEOSu8xB=7aN9#)v8Um{z}RE(X(wKmf$LR_q@c5(#aE zxv#B$k}+u1bV85)l@HRyzwn68RB~&EEa8fNKT4JRt91+aT;T|MH&pDi;D`d}h?`jZ zP9sOO0Uio#B%5h=w(VA9+K{#Y`W^0WO=d1o=8MpY1y3VC6day_MlBeMZ-@khE2WdF zSD$H{gAs_+SofU%=1A=nM3zR%4c;922%j{T(~qhK+oNNS6l3YK>mwd^t$|%n+X$(h zqh@rC^F?Z!on7YqBtoh~TXv5Q#m+Hca`5{JzDBCn9Hq=uglJHvP@AZlwF;HLu-mrqsl*Fy$fL0^*(t^p~C`w?q7IH}FQKIx&GC>Sfb4&T*z)+NLO) zw4vjt6v86%=($595~~D;CcZVOTr86P2kD#5N`Wm-3lp`{B-fD=A)3bMXsOmF=zW%q zufhTO{cGLu0n|^buP55*CRHSw3~!mLpI#F7kSfw|$#4iY0E?^QC?=s|1MHQarD#BL(k;cl>JIkSj8v?Q0T6rL%|%F!*QLaHQy%yS|+Bkt^D; zRfDavR4cb@NVKIFof52Bl&KPrLfN@57)WekSI4WhD)LbZziFv5an#}4-Rec?Q`Bai z2mvkKtx=I~m4&VheM;rm&-#dyjg9QnY}B|A9iT~H3Q<;cQ}~c-3zfMn_)z3m`6TPn zY2?E<`qcv?Bb}Rx1gUfi2asfC{E>QqCgLF|bfNr(f^T4+ZB{E--nu-2vl&1u!92P55_NdgdcLEpC$p~Jla3qIX2vH6HX59bR3a>=AJsBf{j!F{nRWg05LQ-H zhPGQ-s0@*OvfSV z1rNwMi$!ooY<9=GRi$L2&<$e4hp(Q>cQ@lT534s24ZoPPpCan&y< zNg1bXXPw|bLw*?sNhq2DTS8s4+&Xn*2YKnx;SJCGE=PlgreX}h&8X2F&@Z1W)N#H% z;nV)ZZdETn`+TCxUVQdPS#@~N7y35QP4XV$tePu0gkWnA(=hhLo#$gNCBIT4WBFs5h<{n z5i;?dpZXi4iUrpz1qZo*zMG_;=A?e-=_d8?V`PjxhLkZ#rqc40y51oDBhmLGX#HV7 zt?!H~7qnJO4ifw4yGiUiC-%>tZenlRF#$s`mYztG2hUX;@SDdSl9wtKXnL$n1sk%t zJYpq!SMtK-8k0{EX$nwu&*!>1Mh!kjpY8G(C0eabV5YYw=`w{2Ci*IUw{Q_gy({VO zcdo=mT_q?X)km^e&6!~MA}Z0FyyLu0c~Dau{vR4jVcoMD3yXVk5h6Q>UMMSzW18;z zR~vtV)rR1FvOcgx&yI*zC$KPp1*uhPw%o8!u~L9c7K;a)Z5*EDjR$7Q@2Erx?jg=z zi>i1X&O>m8;1bRS{-EReP;XCgp9N|l_pM0t*3&adF^Pd&`4?%Jl)C;{DtQxVP|>a4w-epJhRP*>)nv=p^e zYN^kk13aqIEdDqkdc<_~`^6$!Ay_Q>ZxikhJb=X0&}9Czcrd(cPnuDC3Xmq}*=8 z>yVrm$4%NqJ4=9^YYt$?N1pH&Ijebg+J0k(^`q3j2u^XDK$_kmpxJ*co0!qKbt6xnRr zW%#n%gdjVsS17+hw9&B%rZ2Y+l}}d78!DrGPDkn#lyMp5zcb=;M)3w8X!@!QKE2zu z!Jp%U|7q5~6kSZKPM}2|-m&{p-_Uc_K{m>XQndya$Z;cg&8Cy%X5$!H2cTd?Qu?TH zf`_xIK=Mq`pQ6vLKt9CBcO~zb%2t1?8^jbeciHMMJ#4kjqkj_9QEe<0+cl1RE$6sz zcA4XnteO_~pAfUIYK{-FV%_QPOr6bCs03@xG!fF8Wo?$faPjz&Y--eB=T| zh`)$@3?7a=m9ft*z$SnPg%u#U?Hdu8zCxpU| z<;dS{kg?XoFd?zCFE*br^9sCukBRtdQ3%dZ;nX(?q#Uy8aA!GpHS1lCzy;XGBXR`+ z7hpXrK1f~CvEps;cS zHazC)oIDZ=(<1WFyJ^~FyKc?KVK%Z{cRU=>9jPd*Hk&Glr%fPj z?vSVyS}kv=W&gCU>=c~pY85X@ZeEBr6j9XnH49OEBNxTDu>nib!L*|IVJy-nC!6LZ zPCeZ7qn!MWoLq00!()eur+gB!$0d{@@Zr43Yyw{ev$ykhxFp(xM%yNP7IT6|t{1mK zjV4}^ujl9Aecm#hgyEkM%77*7w~1kN0t?_Dr>Su|sWlhdKMIDnOV4~J*9s)?5bog_}to$>cC7B2o|gzmX9viVM#Y`Ji)wxcSGT}~Bx zvZ`gX*;tEG<$n0yfL@75SGAo~VrV-9`;9c}zVoEsSqjo25As@nJij^7^4rY2tJ$Pvdlc_3Z4B>`&0rPg+txLh?Pn=DAk;q$-eyyCOVe zjCn;%v|3Va3B40f55`vwbzPY$v=7f->sS6)e2~&LFjK-&=$3BQ1>n?(iA|FEzBGozu zZ%D77rN^|%t?c#|PYf^*DFrG~yI#jOSw?qZ#R}WF;{(E+LNP^+!%=5R}43{7k4;;fLcWrB3iyg?JTf8c6sZvV7?lIn`*_Dh4YYQMJHmuIEvi z@SQBoAb_N$c9i`Dk5ZXO04*XEU2m`rm5t~YDg@aDBw^@;oB4Cnv`y=OnL`s!G$=$) zz_xR$Ai_`{%wot?5&Bh~j0cv%a3>FtT%G*Z`tGYWeO6b~q9z4uzuXvHr)NF2DTz8A z;8|a%efQOxzSQ+jFDDUFD^1otaf0T^p1*tQeYK_+yWYJUqEvy}nE2fW5|l=VsGYwu z^eMI0f9*O6u-1`^1IA3LQPoz&@B3oKc;&BY){B{mF+vJ$2Cx)IL8m3d4N;n1<$`N; zQ-E6cHC-o68S?}tq3+H&iqTHXR!LSZx>LSWe1R2Mt1MZT;vdFDqE8w66f(jN{?Po~ ze9n3eVsjmU4$B_~wEWPfr+j`r{3lLY-s_iwTl9fDHPjWJeYUf@R;o|7OOxij^@R&? z<`5Rn!>ibaDl$$)cRz{*kzyyJ`z)532<|b|IWkumG79*gB2~9Y_v-z8@w6Mi4Q}Z( z@Q*@t&1RmS%1!hi;Pa3%aDslw)ADm}fHZ|zbO1E0f3UBwkE#n*+c9fxmVjblJS2S# zQS)O{&_?SFxOVv}mwqE|Bi1=hK&xmiSfIuR){Zfo;w1p12vJ2x2~nX~deaJ%s@~G? zd683Yx=}G}g-UyRreN8PI`U6d;J!Vwc}Rv~jUZThaE`y|%T(7J&$E6!y-H{-QVC_4 z%I=k^Rgsg*ZU>5pNM*-0lV)1VS?5S9yPwHwhT0sQq39?%TO?!rXs92mTT2F3N zurD$6GCA9FoDyt$=_VyXbXvJyc9W;G2!SFh`Ylb)yE}Fsd~81-Dx!^8Z9D>Bkr|#K zmwu&x)R>We)+CM{)$hJV_ubJNQAdbwiel9g=?49q0`fu4Y>xN{?KF`;#jig9=@IpC zHuM#GQFh;TX7wCAY2TtZ`}0yt^0E+NG03a!Eo^j`9Q301pO6LbPx8Agw3{uvGjYp+ zhYB(AjmZhTB zBYLk~0-_HK+ouN5+IqTFZ-cdPyvTu&u~G~)I2KQbuE>L}pqBVqTXjp7Vv;iC`)P5rn0LeZBHMd70x6BAFu-Ys42*vxU|g@dXr_#2P_?1ahARL&QGeS&*lg zB4(Y)$-C??*t_9dQ7F*Lr%*6PMvVSKVH%DGg+f2q@hsG_K;8_q1qzyT-XAh{?bx^P z$-=%J2Y2yJ2uiBjSat%f3c%fnf-I1wI46wpB>i4{^hCdG92V@&cA4Sg9j>2{?aM3p ziaFSm-K`FmxWRhli$05Uk0R!vA_#vODF_*A$#10=2S-c(5sHY=l3Y48T9TP;!_UCP zf#MT5Bnvx2^n%$@4)!HGPyE|-`cZcTY5fRnm2~|0ZhSs9Z@rg&1M2*2wK} zVIzCSbLPcyL)P{A54i@7NlJfRhc(eWj;t1h34FwyJ%-E_PQ)dz5a)-4MaT;7H3d-4 zj1oPnEXXU{HW2r!c9|Yi_vGuW);fZzy({qnsC=#GN@vYfb#khP|6B9nlXqt&M`fSy zET3vk*X9EbET6~3;GM$v{1cz#Z{bsof8O{4=8ePSCh*%&*fUer`tirj<~V@vr{@mg zCy#A$J&Z4hTPNi_rfb_qj!mQLkz@cIX@*PiFqxEgz2&iXDE_Kr0$rmbonTl6QgRY~jPlD2o9_86e+nqwXs796D z@Fx}_c5!#Z4=7Tn*<$kD@RS{M8{A=2_hPrfrvlqxzKznhk@msX8eC#F^9XAJR#P3>d5J#8XxkhMWdV$B3@$|Ir3x@N;`?yoi3+#gv zdg{yE*zlEK0vSD!m~K{sJ!^ukQ>(U=a$(V6`6K6f5nsj7oV1p&;%-4J@wsQ2wTgYT z-BWweCxs$_*h}xK!2^UZe+J^V%M8-J!!4NeQO2gAIres);hZM z(`7wfZgGCQmA>6ZmjSxu=&}~?PTgY-;``{-HKW$;_yRD7|Db;TCtdEKJJt}p4zp{X zT{p1nMs~fEUGKt`Q*smgdo%t0bz=I9P{~Q_9{i2oUWPwjzU*7ySz%p(Z==?ExLW7a zKDw-Acb3zSE9i1Ry}H`E3Vl3fZJ{T&(&bXzJ84}^Ph3KmZTRt&wHjYfStIny zdDa^C$M>iw->1tDa5-fy!>=c;KDsyc*W}f<9Z!#1FU1wEU_0=Ekf5FX<01a>2>;m4 zKmH0Tq;nmM*$Z$zG5x%4?Qx$xWiu}`l=<&?kL97atx~1V#`wpp z_{U-X@iacru>yT8vx@kz#&Ma0YTiF@P2elanc^Q7K1Qu0{Eun&ha)-Y_0>d?Sum@| zb<9EH$XVaosW_E6cfwug!q-{L319=>33X&fo$suGw?f&RKh;@VgLwvajVYjsPc>?l z`M0kA0sr?pA!^@564F^J-+QCyrK;Ee`uo>YwUFoa{}$ zOwaL=yv;X~j(Io9TrBv5bSy7*y{}XcNiZS!@#8yB5cG(fPfBut0X{@VG^DB#ZsLTS z=cSJz3LKD-Oi#e4Fa-c)djQDz(dBN8tVXP(1YI`!df?C{02_z=3U2$9WpHP;yrGu8 zO;>gbn!D(s)MC(yda0!E#yOK%`_X7!x6ZNer{XId!P>eLEX?>pTSfRrt|rLUgT}H zTI69}kx96zvkF9Q&CURHDNm#YZ9PT0AdC1K)Gt#eYax9kT;FtXAI~ubxKM2u9vt!6-nF- z18aUFHHqcXw)Hj?;hb&Pdfuts0^o*UE2oK8%`cL&J> zYyOZidZKwnd%*pBtSr6I==u@}tm%yMsG8A6%iO}who?)kK*+=VjWc3wW-yQ8uof%K zBWAO1*63G)0cp=*HpfFVz%0UI(a!gU9D-(ExK|+m3M9~KyX+3i+{M>=KDWHcN$)!+ z>%2b6A=%=oz2NE38POo`c>P<{c!lq^omhYcoIBky8jKvH9gC*BI-O)to|i%^KOMo* z3s5N9{Ol5FqnALMDIlTs`Tt=8kw~w}nabmY6`ZEHj?=a=srA`EVYqwJC0iWclWwB& zuZWf(x+}Oiq@TRZb$=vtWfCEO530y`akvRZf=F=@WjlY53<3>ISZv=}ZS?iAberD& ztRbG*C#)hv2E%sqJlSqlYj(bcsgL%h6eUDxsk~ec%@z^}&!Lz6@$~%Huz>cVzCpKb zYK^VNY=MId%39r6{2>q8psI`hOZD8#*!v?HJHv(fW2xC&syk~diilX4b8gpayrd|l zevRka5tnp%z8eDVOE}W`17V@z2WZ0JAuYIN1ZD%k%WJ#z+m`aiZsf(7t(T{ojXEXp z^c5lgvmd;U)A;-@+A2=W^*Mdou5hTnK;Nc78OhPOKC$T5oG?Wr_ zlQSE0PX({}i%|#PZ!ovX=uoW?I3hEKdf)c3!&%T?Wsu*}%|YH5Z;;1s#WATTw~c2U zL&e>nRp-u)j^GX%W~n?S(&0^$)tZv}*frCfVaDr?`Hgq7tUGvvj`8!xuEsISCo}|> zVB27RLPAaOs2heQi{HjgvPn7mh0Njp62U6iL&JQP_i>*0AcWX(phZg0TZ@CiiHvh) z9P{yHN}gsoye1L?ee0Yjnrh5{w~kpeICgqLS9S_*=N>yzi!mKCgZnxf^%tLgUO(<> zd%MPA7!Q$&v2I$~uhBS5wgnu^Y6}=6smRwb zv|5Wb)>;X&`OlwlY3WH_Ypmkn*8md|PIphigx2$xmL~}NA zW3`cI^FWR?Hl+%Y$IoXO?t6HT+3Z%J$)^eb6*ISS$hdRkpa-4NgK!=M5bn_w2zmi7 zN=#Glw)NYQ!kFQ<^&e7;q_b`PQxp-gZRHZGQP0VfYn-9m)_PW&I!1Dh8$Q!@O?@q@ z$XHWfg(5+uxSG22Yf{6Wd03WVCOZcl)8{^R_IAUokM53SxeWEuU8xz*(MLC-hzNbe z`B0;ek^o1Zp_=G5=`@k1jJ`UBT-DP*fFGVDEZ*!ID^GoRk0k_VkAmCp7HiJ)bLuJp-`0Z0s zIv~_w85_vXb>(>%w`FSNz86G{^V>n=^aK$rV%wwqX{5Y&3;X;cq%N-i+y}fur`cjA z^q*_8i96B0N$!Lr{pa`|O54VBz<=(Sg5l8=%s0HlbGkIl4s3Z$tMKSR9JdGq^apZN z454!3%3t<|$hk3uB{le(A34dOZgPq6I!Cy^H|c}And92X+4eG)w0; zFGGh)0}}=}z?MHydg(w8!G3yR}`{EVDxQda84ZD-R;NTV)V5+wb!@&r&)& zasK3sW=uB_gzbc0!(q*?!fU+&2MC026%llOv`TKV&Px;wF8^38Rs_X?`(4jACT*kY zg|tP-1`9-bUl!=8TJ8h7a+9!^C)|7Qh!NBch=d+MfyW z;@<4n;(4Xt@;IS$t&skYNK|)`@w|6^ks^r&t_h z^&`3!K|yA#-K+yFRA^CzmNv#MBtjp8WwBD7n5DSZYAdrKc}@%-eGAlFS%0ZM+d`7w z$sr(6RbjboirNj)EWefUU1uC|RbyHKg5f;~au+q9QvoYG2+Pk(r z$P;!#*G5il1q(By;N?NqP@53HV;6dOO6}SzF{o_4>Y47y5#R&mhbACu0||pYjbK-l3;;j;glf$aFJ2Zv zjYi3Rz5yFD#@p;gF-+bb02rYT#DlUq)1nh6lnxAZU;*ci(FfLXY$d0CbW&A2R+{yN ze~V4K04=yTCC901KN$9)<3IW3g82ePAL}EA->3aQ?29YGaP4kj`fc7`83Ww;a6ro?Z{>^ z>pc-~*6V!WAUKXJ0SzdJm`1%eYfuITn?sy?cuFd_u=PDt-BP!5R2b5ctR1Fj+RH&#>BFU7-0b>U(P0HKRy2eDQTEmQ>a`9QvUS*I!pP^_8gnZY4`l@(? zJhmOuCm{f_?P*~4ny$XOL~~eyz|^q`u_<9fbFw`Rd@#9FV>2gKG?l77Qv*=0_dR4* z=3=@;#!zMEh1ToSu8}qdo$_045Sp$n13^y@14UGQU>|j_04ik!LdyPX) zRgr#KH`)Pbp=-6npz`~bUXnS3rPlg&U9BmmX;*zyU*t4>1F7#Gd+6Cik$Ei_WTDs( z$CUYdv7KRvSW+c3QGxW2mypy4DJytJ99ok@AqUpL$Z$bOUiUaA=a+?gWR zDqR*a0#FE%BXFl$(~Vspfi@d~)2*M>UdE?q@-$f+x=ukaUSYV3P21bWsl**!@A>s? zTc(*Qly#4GgtJ)pJgr&xESbZEi8({>+Lj>MQ4BD{DU7n#zbqSv2@_Rh>@YEoB0;3M z-n3(1ghw}9y)ZCCZ02Tarkcc2Ok}yjkWs+@Rd_FK3GrwUc!%6MAWu)_Ci)MEwdcSI z`XOJ3?Rjp1EpGYhtDj&H-RfzD8AQR0g{4SPj4*7M3dhXx0{l3dbfD;hwH#5~} zH463i^tjpFLi<{HLu@gO^#+S1m}u9_%)rb~Djk4ttZz$l{R;C4SRi859qs51w0;Jud(^g4muRCvHjfec2z+l!mE2&yf-ObGR2xJM6D8%R z@E9Ubh&Zy4LV2px#L+`;(5al>Q2z=gP@bn43f6W)DTzv>e-r&DsF?qsy?23=7YKwTkYve=JeJLpY(iiY@=JCDUltMqgz){(eN^3BRkx<9 zx>_$vKfAl99`|wXdEIl)J*QFb_KIR}rc9VW!#`(olPXw>9w1Fx1ldBPRjzjP3OGhj z2lh*C=6bbW!*;=|_IB3ymb>cooC}F4v^j@$!}@{?ka1AkLlLo3gTj?hBli*-sF?_n zt?z|iu?;H~)wpoz5CC+DB9LM1=P_0mk-(&NkpZf@FyHRx{a(U@Ij0xd@h8a4sVUKb6z zTBF!)vG8+UtEG+Co}6yx&GCR_(&*@)YQo<0WVz85qvUt7$8h@GlUg!n$ zFlBSX)3Ar!4F31&DRnf#yT*Xr>ATc)^s=u}e+Q9gqhz;Nnqg)ex7E|;Z7JI&jIxok zpThZo?D-SOp05qpq*C*K{0a3l3dtx$Kw!`5j6y6%A*vSjo1ua-MJ?*%iN&R(MZF(Q zglJJ*dS2^V)X%4-MeX$0GNnr@a(p=yIa1N0{ys5U7`3P`pvf3oR8}6r+Ox;X6^ru- zS|}EC+)n8|W#<%S7_;0esobUpb8W!sySy-Lk%9p)YY`?eL}S6WeBLh7IWVWeQ4Qs8 z{gp6xLyG)p7#$^ZIyn63AH(?($3p`@ic=op3f<5BN-|Dla$KcV9^oM@Y+6ZKcCfb0 zZY0xOvhoO{)`PRXN9F%YVSp^l{hC?s)#M6Ud4#My!lMfL9IUZGLuM^mYArnWAYs$6 zsH>ssZpXp|=^*mL{02A69^ow0lNTl{kC2r|X!S-dx8Q&mkw=E}h!)i{$=62aaW153 z>li;WY~?-03trV~;e6fGb7czHwLliIBEqkZ7+2K)J%{s=2;F@wpaaOF5uBrQp0VZ^ zy0uCnpogooJVH5)2LzsEO^|EoQ=xR9CF%Dd_0e-<)-3RKddUt#G+Yiq)PuDEob*wU z7WjE8gZw3gyefI$&hL1 zpgaPSVUO=qPBsK4gwOLV+TQ92lt^3kL-7;;+QCOU$bkgoqpP9C5khi;BL%i$NeptK z+gj*U>{XrwCM%ARLU9CknDW{$j__mPD=RNo@i~wd2%X*92=tO$8{q@^t4>z1%Uc_P z$O$&D{Z~b8gx@5XvDygq3$+p6e2Ho!>?$HVT&G;bVe4uGQL05&_To~OLhw$#{>KE1 z1f>uj*j2C&&}6KGVlvozl(9w7V=Pxfp5uyvNH+7Ao;7jO6vdIcBH4^v=-{)SR+Z@n z6*@Rb$L?oZjYeyc4*tpH^mI6Rv5V7_G+nuN7EVcbYtywxtyiPd(m1zANBSydoSk;g z>hV-Y={2i??EiWu*AK|VA$AuVL?HkjfS_)10}sxvbM8JbgoB6_}7u?y_&LZ{o?6mnZ@l2ZONu$T7Dz<-izM{0|_A4K60 z7Bnepy|y0zuMAHSJDV#e>EeYruzpV< z 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�nW1p;9GzP9T6%=5C{)_Skyo?o*#e8 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%0A4;Q$+B~#3)VXYl26@Np58}ovoDoi% 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࠻ydsPM3z;=k-;{&Qy=z)DC7f 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 literal 0 HcmV?d00001 diff --git a/.doctrees/examples.doctree b/.doctrees/examples.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2b220a18611efdd451c56aede9435dec76a98602 GIT binary patch literal 3144 zcmbtWTWcIQ6n0|o+Uv_Y&W%Fi#HFNlXuR7(p%>b`l)l8&4^7Eis%U4lBgLB0R2O^w z5NIC)G3YJI5A2WVdq2%(Z_t#`g@w`4(b2hl=hOM4^X`Z3mFnkrP02+u8PGH>RLV^7 z8>vcM&I%jehKGNKSK-k2G(9)U>4XKp0*!eVVBy4#sNba4YB6#awqq2lA~n(D^+Zx*AjEg4pn3hZk-BoW7}4ZZvvJgMe%;b6 zZUw%}@9=GYm#^}D|7^%r&W73*1=GWGrB8>cpi*UIEY&#~Yn*tWR3&CuyFFx03I^IB zxO>M}-3W>3AzGSgTJrgP{nqB|0J%7zXH-Z!lI%bf2bK$S@Itdv8DW*aIQX7hTbl2N z!%SH2MuSA79WjJ2(o2?E*&?_$9cg6P;rz3BWDNAg(lA102 zhGEuI(^OImL3bSvoDT+OaAjk!RvAF7CiXeG&Ziu~N2Bmd$M*U-3JURtuMt$yn(e74>}s zdMgQ4>z^d~F^72f#1D3Bup9#AQ?g6}yyKKka!2z=jN z+$2nEr3t4+Dw#&cqpOJxez(r_oRv;xCHVcNoh1|eo$uF1XAZPS?=EgEo%GjY005fd z$d5!o!S6^~WR7MG=}xh}ipS62&@53pB`GTb6I>&JkrUrdR53=3NQX!PR5liqz`MRr zomFHe@>d10wUfHMBvbq$tCc_idb*%88r-cU6|!UPXQI+Dmnt&JBc86Y35cJO`I8ky z5=+iR^&&)DBo!t;7zm{Ca=q;f^w>6nG3bP<$)LW|sFAUVPc#_xcKpI6hUuyiSrM(J zsP`781k|Zs0-t-axd59Y0}7?cg$++u{`$M)`z0&Ml$~NY+fg#2@ILm2|EMKmh|Qq9 zuv`@brL$r1x1wg{0yK$b7#+}X7#1Kudho?p$Y@`WlO^*}GBf{aYaYEyBVtdP9tdW~ z)g9>nA-B22Wj#wrXrk2eaJ=F70m+<9yK@=BIH?F%r9A{A&4OX^p#g3cbC0=O*3MKE|8$E#Q1y9H@I zfod_4;5??e8QXZ#s|>U=Ls?L`SUd^HC``}t_ zBe~yNw$<$5i35Wq%0+$%ek)N@BF%^aPssX@jr=XL@H+g0Ucd~AuELCKQ2qMCDUmFQ ex2EE%fLo$Sq)Q`Uve@>UY2>kM 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 literal 0 HcmV?d00001 diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c17794e013559050436d3b0cde0a29fae7c40d95 GIT binary patch literal 16502 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 Ra|zxBv*7CyvuEwbe*@{x9UTAw literal 0 HcmV?d00001 diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.1_basics.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.1_basics.ipynb new file mode 100644 index 0000000000..dca6994e60 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.1_basics.ipynb @@ -0,0 +1,132 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "cdc7ab69", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 1. Basics\n", + "\n", + "The following tutorial shows the basic use of the database connection.\n", + "\n", + "See [context_storage_factory](../apiref/dff.context_storages.database.rst#dff.context_storages.database.context_storage_factory) function\n", + "for creating a context storage by path.\n", + "\n", + "In this example JSON file is used as a storage." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "17498750", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:18.695725Z", + "iopub.status.busy": "2023-11-21T17:05:18.695324Z", + "iopub.status.idle": "2023-11-21T17:05:21.023273Z", + "shell.execute_reply": "2023-11-21T17:05:21.022236Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[json,pickle]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d80c506e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:21.028036Z", + "iopub.status.busy": "2023-11-21T17:05:21.027715Z", + "iopub.status.idle": "2023-11-21T17:05:21.773241Z", + "shell.execute_reply": "2023-11-21T17:05:21.772552Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "import pathlib\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH\n", + "\n", + "pathlib.Path(\"dbs\").mkdir(exist_ok=True)\n", + "db = context_storage_factory(\"json://dbs/file.json\")\n", + "# db = context_storage_factory(\"pickle://dbs/file.pkl\")\n", + "# db = context_storage_factory(\"shelve://dbs/file\")\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " # a function for automatic tutorial running (testing) with HAPPY_PATH\n", + "\n", + " # This runs tutorial in interactive mode if not in IPython env\n", + " # and if `DISABLE_INTERACTIVE_MODE` is not set\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline) # This runs tutorial in interactive mode" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.2_postgresql.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.2_postgresql.ipynb new file mode 100644 index 0000000000..fe7896256c --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.2_postgresql.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "21d03fd4", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 2. PostgreSQL\n", + "\n", + "This is a tutorial on using PostgreSQL.\n", + "\n", + "See [SQLContextStorage](../apiref/dff.context_storages.sql.rst#dff.context_storages.sql.SQLContextStorage) class\n", + "for storing your users' contexts in SQL databases.\n", + "\n", + "DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/)\n", + "and [asyncpg](https://magicstack.github.io/asyncpg/current/)\n", + "libraries for asynchronous access to PostgreSQL DB." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "45106f68", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:23.452354Z", + "iopub.status.busy": "2023-11-21T17:05:23.451793Z", + "iopub.status.idle": "2023-11-21T17:05:25.866733Z", + "shell.execute_reply": "2023-11-21T17:05:25.865808Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[postgresql]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8a2235a0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:25.870187Z", + "iopub.status.busy": "2023-11-21T17:05:25.869599Z", + "iopub.status.idle": "2023-11-21T17:05:26.592947Z", + "shell.execute_reply": "2023-11-21T17:05:26.591929Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "188053ae", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:26.596361Z", + "iopub.status.busy": "2023-11-21T17:05:26.595770Z", + "iopub.status.idle": "2023-11-21T17:05:26.684233Z", + "shell.execute_reply": "2023-11-21T17:05:26.683610Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "db_uri = \"postgresql+asyncpg://{}:{}@localhost:5432/{}\".format(\n", + " os.environ[\"POSTGRES_USERNAME\"],\n", + " os.environ[\"POSTGRES_PASSWORD\"],\n", + " os.environ[\"POSTGRES_DB\"],\n", + ")\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "aec3470d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:26.687379Z", + "iopub.status.busy": "2023-11-21T17:05:26.686994Z", + "iopub.status.idle": "2023-11-21T17:05:26.708926Z", + "shell.execute_reply": "2023-11-21T17:05:26.708315Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.3_mongodb.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.3_mongodb.ipynb new file mode 100644 index 0000000000..ff6b49eee5 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.3_mongodb.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "20f41fb1", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 3. MongoDB\n", + "\n", + "This is a tutorial on using MongoDB.\n", + "\n", + "See [MongoContextStorage](../apiref/dff.context_storages.mongo.rst#dff.context_storages.mongo.MongoContextStorage) class\n", + "for storing you users' contexts in Mongo database.\n", + "\n", + "DFF uses [motor](https://motor.readthedocs.io/en/stable/)\n", + "library for asynchronous access to MongoDB." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "775aa33a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:28.549960Z", + "iopub.status.busy": "2023-11-21T17:05:28.549751Z", + "iopub.status.idle": "2023-11-21T17:05:30.911651Z", + "shell.execute_reply": "2023-11-21T17:05:30.910787Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[mongodb]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ea0bff60", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:30.914690Z", + "iopub.status.busy": "2023-11-21T17:05:30.914290Z", + "iopub.status.idle": "2023-11-21T17:05:31.676953Z", + "shell.execute_reply": "2023-11-21T17:05:31.676203Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "30619c5b", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:31.680176Z", + "iopub.status.busy": "2023-11-21T17:05:31.679691Z", + "iopub.status.idle": "2023-11-21T17:05:31.721290Z", + "shell.execute_reply": "2023-11-21T17:05:31.720549Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "db_uri = \"mongodb://{}:{}@localhost:27017/{}\".format(\n", + " os.environ[\"MONGO_INITDB_ROOT_USERNAME\"],\n", + " os.environ[\"MONGO_INITDB_ROOT_PASSWORD\"],\n", + " os.environ[\"MONGO_INITDB_ROOT_USERNAME\"],\n", + ")\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8f0cd7e7", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:31.725003Z", + "iopub.status.busy": "2023-11-21T17:05:31.724396Z", + "iopub.status.idle": "2023-11-21T17:05:31.759173Z", + "shell.execute_reply": "2023-11-21T17:05:31.758444Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.4_redis.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.4_redis.ipynb new file mode 100644 index 0000000000..d299433294 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.4_redis.ipynb @@ -0,0 +1,162 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e3bda33b", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 4. Redis\n", + "\n", + "This is a tutorial on using Redis.\n", + "\n", + "See [RedisContextStorage](../apiref/dff.context_storages.redis.rst#dff.context_storages.redis.RedisContextStorage) class\n", + "for storing you users' contexts in Redis database.\n", + "\n", + "DFF uses [redis.asyncio](https://redis.readthedocs.io/en/latest/)\n", + "library for asynchronous access to Redis DB." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b37cdd83", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:33.839069Z", + "iopub.status.busy": "2023-11-21T17:05:33.838873Z", + "iopub.status.idle": "2023-11-21T17:05:36.222293Z", + "shell.execute_reply": "2023-11-21T17:05:36.221487Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[redis]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b0d95dd3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:36.225408Z", + "iopub.status.busy": "2023-11-21T17:05:36.225118Z", + "iopub.status.idle": "2023-11-21T17:05:36.989967Z", + "shell.execute_reply": "2023-11-21T17:05:36.989229Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a662c202", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:36.993424Z", + "iopub.status.busy": "2023-11-21T17:05:36.993077Z", + "iopub.status.idle": "2023-11-21T17:05:36.998364Z", + "shell.execute_reply": "2023-11-21T17:05:36.997738Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "db_uri = \"redis://{}:{}@localhost:6379/{}\".format(\n", + " \"\", os.environ[\"REDIS_PASSWORD\"], \"0\"\n", + ")\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6463ba2a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:37.001328Z", + "iopub.status.busy": "2023-11-21T17:05:37.001100Z", + "iopub.status.idle": "2023-11-21T17:05:37.015690Z", + "shell.execute_reply": "2023-11-21T17:05:37.014936Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.5_mysql.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.5_mysql.ipynb new file mode 100644 index 0000000000..50c2c4d71c --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.5_mysql.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "83d1072b", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 5. MySQL\n", + "\n", + "This is a tutorial on using MySQL.\n", + "\n", + "See [SQLContextStorage](../apiref/dff.context_storages.sql.rst#dff.context_storages.sql.SQLContextStorage) class\n", + "for storing you users' contexts in SQL databases.\n", + "\n", + "DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/)\n", + "and [asyncmy](https://github.com/long2ice/asyncmy)\n", + "libraries for asynchronous access to MySQL DB." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "d29b5e8c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:38.803545Z", + "iopub.status.busy": "2023-11-21T17:05:38.803293Z", + "iopub.status.idle": "2023-11-21T17:05:41.168838Z", + "shell.execute_reply": "2023-11-21T17:05:41.168045Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[mysql]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "856d168f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:41.172012Z", + "iopub.status.busy": "2023-11-21T17:05:41.171614Z", + "iopub.status.idle": "2023-11-21T17:05:41.911422Z", + "shell.execute_reply": "2023-11-21T17:05:41.910782Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8395accd", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:41.914847Z", + "iopub.status.busy": "2023-11-21T17:05:41.914316Z", + "iopub.status.idle": "2023-11-21T17:05:41.958206Z", + "shell.execute_reply": "2023-11-21T17:05:41.957432Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "db_uri = \"mysql+asyncmy://{}:{}@localhost:3307/{}\".format(\n", + " os.environ[\"MYSQL_USERNAME\"],\n", + " os.environ[\"MYSQL_PASSWORD\"],\n", + " os.environ[\"MYSQL_DATABASE\"],\n", + ")\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ff70c65b", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:41.961995Z", + "iopub.status.busy": "2023-11-21T17:05:41.961414Z", + "iopub.status.idle": "2023-11-21T17:05:41.991404Z", + "shell.execute_reply": "2023-11-21T17:05:41.990726Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.6_sqlite.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.6_sqlite.ipynb new file mode 100644 index 0000000000..b2595856d9 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.6_sqlite.ipynb @@ -0,0 +1,169 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ed2eb5f8", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 6. SQLite\n", + "\n", + "This is a tutorial on using SQLite.\n", + "\n", + "See [SQLContextStorage](../apiref/dff.context_storages.sql.rst#dff.context_storages.sql.SQLContextStorage) class\n", + "for storing you users' contexts in SQL databases.\n", + "\n", + "DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/)\n", + "and [aiosqlite](https://readthedocs.org/projects/aiosqlite/)\n", + "libraries for asynchronous access to SQLite DB.\n", + "\n", + "Note that protocol separator for windows differs from one for linux." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "ebd4421d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:43.781903Z", + "iopub.status.busy": "2023-11-21T17:05:43.781367Z", + "iopub.status.idle": "2023-11-21T17:05:46.158514Z", + "shell.execute_reply": "2023-11-21T17:05:46.157646Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[sqlite]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "9b0f1c7d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:46.161856Z", + "iopub.status.busy": "2023-11-21T17:05:46.161304Z", + "iopub.status.idle": "2023-11-21T17:05:46.905220Z", + "shell.execute_reply": "2023-11-21T17:05:46.904455Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import pathlib\n", + "from platform import system\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "050efd17", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:46.908796Z", + "iopub.status.busy": "2023-11-21T17:05:46.908043Z", + "iopub.status.idle": "2023-11-21T17:05:46.932132Z", + "shell.execute_reply": "2023-11-21T17:05:46.931338Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "pathlib.Path(\"dbs\").mkdir(exist_ok=True)\n", + "db_file = pathlib.Path(\"dbs/sqlite.db\")\n", + "db_file.touch(exist_ok=True)\n", + "\n", + "separator = \"///\" if system() == \"Windows\" else \"////\"\n", + "db_uri = f\"sqlite+aiosqlite:{separator}{db_file.absolute()}\"\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7183c2c1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:46.936062Z", + "iopub.status.busy": "2023-11-21T17:05:46.935749Z", + "iopub.status.idle": "2023-11-21T17:05:47.007787Z", + "shell.execute_reply": "2023-11-21T17:05:47.006925Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.7_yandex_database.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.7_yandex_database.ipynb new file mode 100644 index 0000000000..c2cc05e75b --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.7_yandex_database.ipynb @@ -0,0 +1,170 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e3dd7aa4", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 7. Yandex DataBase\n", + "\n", + "This is a tutorial on how to use Yandex DataBase.\n", + "\n", + "See [YDBContextStorage](../apiref/dff.context_storages.ydb.rst#dff.context_storages.ydb.YDBContextStorage) class\n", + "for storing you users' contexts in Yandex database.\n", + "\n", + "DFF uses [ydb.aio](https://ydb.tech/en/docs/)\n", + "library for asynchronous access to Yandex DB." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "1485ddb1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:48.738312Z", + "iopub.status.busy": "2023-11-21T17:05:48.737737Z", + "iopub.status.idle": "2023-11-21T17:05:51.178382Z", + "shell.execute_reply": "2023-11-21T17:05:51.177493Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[ydb]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d7b5a4ff", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:51.181599Z", + "iopub.status.busy": "2023-11-21T17:05:51.181060Z", + "iopub.status.idle": "2023-11-21T17:05:51.929664Z", + "shell.execute_reply": "2023-11-21T17:05:51.928992Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " run_interactive_mode,\n", + " is_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "31463b04", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:51.932821Z", + "iopub.status.busy": "2023-11-21T17:05:51.932465Z", + "iopub.status.idle": "2023-11-21T17:05:51.968693Z", + "shell.execute_reply": "2023-11-21T17:05:51.967937Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "# ##### Connecting to yandex cloud\n", + "# https://github.com/zinal/ydb-python-sdk/blob/ex_basic-example_p1/examples/basic_example_v1/README.md\n", + "# export YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS=$HOME/key-ydb-sa-0.json\n", + "# export YDB_ENDPOINT=grpcs://ydb.serverless.yandexcloud.net:2135\n", + "# export YDB_DATABASE=/ru-central1/qwertyuiopasdfgh/123456789qwertyui\n", + "# ##### or use local-ydb with variables from .env_file\n", + "# db_uri=\"grpc://localhost:2136/local\"\n", + "\n", + "db_uri = \"{}{}\".format(\n", + " os.environ[\"YDB_ENDPOINT\"],\n", + " os.environ[\"YDB_DATABASE\"],\n", + ")\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8db3c6c1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:51.972494Z", + "iopub.status.busy": "2023-11-21T17:05:51.971722Z", + "iopub.status.idle": "2023-11-21T17:05:52.020421Z", + "shell.execute_reply": "2023-11-21T17:05:52.019688Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.8_db_benchmarking.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.8_db_benchmarking.ipynb new file mode 100644 index 0000000000..4227d2d373 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.8_db_benchmarking.ipynb @@ -0,0 +1,7231 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "faccabf9", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 8. Context storage benchmarking\n", + "\n", + "This tutorial shows how to benchmark context storages.\n", + "\n", + "For more info see [API reference](../apiref/dff.utils.db_benchmark.benchmark.rst)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "53977cd3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:53.734348Z", + "iopub.status.busy": "2023-11-21T17:05:53.733614Z", + "iopub.status.idle": "2023-11-21T17:05:56.509350Z", + "shell.execute_reply": "2023-11-21T17:05:56.508537Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[benchmark,json,pickle,postgresql,mongodb,redis,mysql,sqlite,ydb]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8f0ee610", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:56.512370Z", + "iopub.status.busy": "2023-11-21T17:05:56.512141Z", + "iopub.status.idle": "2023-11-21T17:05:57.352525Z", + "shell.execute_reply": "2023-11-21T17:05:57.351695Z" + } + }, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "from platform import system\n", + "import tempfile\n", + "\n", + "import dff.utils.db_benchmark as benchmark" + ] + }, + { + "cell_type": "markdown", + "id": "7a3b3923", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "## Context storage setup" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7812d36f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:57.357873Z", + "iopub.status.busy": "2023-11-21T17:05:57.356240Z", + "iopub.status.idle": "2023-11-21T17:05:57.363345Z", + "shell.execute_reply": "2023-11-21T17:05:57.362660Z" + } + }, + "outputs": [], + "source": [ + "# this cell is only required for pickle, shelve and sqlite databases\n", + "tutorial_dir = Path(tempfile.mkdtemp())\n", + "db_path = tutorial_dir / \"dbs\"\n", + "db_path.mkdir()\n", + "sqlite_file = db_path / \"sqlite.db\"\n", + "sqlite_file.touch(exist_ok=True)\n", + "sqlite_separator = \"///\" if system() == \"Windows\" else \"////\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "25b1c58c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:57.368355Z", + "iopub.status.busy": "2023-11-21T17:05:57.367171Z", + "iopub.status.idle": "2023-11-21T17:05:57.373133Z", + "shell.execute_reply": "2023-11-21T17:05:57.372526Z" + } + }, + "outputs": [], + "source": [ + "storages = {\n", + " \"JSON\": f\"json://{db_path}/json.json\",\n", + " \"Pickle\": f\"pickle://{db_path}/pickle.pkl\",\n", + " \"Shelve\": f\"shelve://{db_path}/shelve\",\n", + " \"PostgreSQL\": \"postgresql+asyncpg://postgres:pass@localhost:5432/test\",\n", + " \"MongoDB\": \"mongodb://admin:pass@localhost:27017/admin\",\n", + " \"Redis\": \"redis://:pass@localhost:6379/0\",\n", + " \"MySQL\": \"mysql+asyncmy://root:pass@localhost:3307/test\",\n", + " \"SQLite\": f\"sqlite+aiosqlite:{sqlite_separator}{sqlite_file.absolute()}\",\n", + " \"YDB\": \"grpc://localhost:2136/local\",\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "c88df82d", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "## Saving benchmark results to a file\n", + "\n", + "Benchmark results are saved to files.\n", + "\n", + "For that there exist two functions:\n", + "[benchmark_all](../apiref/dff.utils.db_benchmark.benchmark.rst#dff.utils.db_benchmark.benchmark.benchmark_all)\n", + "and\n", + "[save_results_to_file](../apiref/dff.utils.db_benchmark.benchmark.rst#dff.utils.db_benchmark.benchmark.save_results_to_file).\n", + "\n", + "Note: context storages passed into these functions will be cleared.\n", + "\n", + "Once the benchmark results are saved to a file, you can view and analyze them using two methods:\n", + "\n", + "* [Using the Report Function](#Using-the-report-function): This function\n", + " can display specified information from a given file.\n", + " By default, it prints the name and average metrics for each benchmark case.\n", + "\n", + "* [Using the Streamlit App](#Using-Streamlit-app): A Streamlit app\n", + " is available for viewing and comparing benchmark results.\n", + " You can upload benchmark result files using the app's \"Benchmark sets\" tab,\n", + " inspect individual results in the \"View\" tab, and compare metrics in the \"Compare\" tab.\n", + "\n", + "Benchmark results are saved according to a specific schema,\n", + "which can be found in the benchmark schema documentation.\n", + "Each database being benchmarked will have its own result file.\n", + "\n", + "### Configuration\n", + "\n", + "The first one is a higher-level wrapper of the second one.\n", + "The first function accepts\n", + "[BenchmarkCase](../apiref/dff.utils.db_benchmark.benchmark.rst#dff.utils.db_benchmark.benchmark.BenchmarkCase)\n", + "which configure databases that are being benchmark and configurations of the benchmarks.\n", + "The second function accepts only a single URI for the database and several benchmark configurations.\n", + "So, the second function is simpler to use, while the first function allows for more configuration\n", + "(e.g. having different databases benchmarked in a single file).\n", + "\n", + "Both function use\n", + "[BenchmarkConfig](../apiref/dff.utils.db_benchmark.benchmark.rst#dff.utils.db_benchmark.benchmark.BenchmarkConfig)\n", + "to configure benchmark behaviour.\n", + "`BenchmarkConfig` is only an interface for benchmark configurations.\n", + "Its most basic implementation is\n", + "[BasicBenchmarkConfig](../apiref/dff.utils.db_benchmark.basic_config.rst#dff.utils.db_benchmark.basic_config.BasicBenchmarkConfig).\n", + "\n", + "DFF provides configuration presets in the\n", + "[basic_config](../apiref/dff.utils.db_benchmark.basic_config.rst) module,\n", + "covering various contexts, messages, and edge cases.\n", + "You can use these presets by passing them to the benchmark functions or create\n", + "your own configuration.\n", + "\n", + "To learn more about using presets see [Configuration presets](#Configuration-presets)\n", + "\n", + "Benchmark configs have several parameters:\n", + "\n", + "Setting `context_num` to 50 means that we'll run fifty cycles of writing and reading context.\n", + "This way we'll be able to get a more accurate average read/write time as well as\n", + "check if read/write times are dependent on the number of contexts in the storage.\n", + "\n", + "You can also configure the `dialog_len`, `message_dimensions` and `misc_dimensions` parameters.\n", + "This allows you to set the contexts you want your database to be benchmarked with.\n", + "\n", + "### File structure\n", + "\n", + "The files are saved according to [the schema](\n", + "../_misc/benchmark_schema.json\n", + ")." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0752ba43", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:05:57.377852Z", + "iopub.status.busy": "2023-11-21T17:05:57.376609Z", + "iopub.status.idle": "2023-11-21T17:06:03.214550Z", + "shell.execute_reply": "2023-11-21T17:06:03.213840Z" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "aebc2613ca7a4bf99082f52c5bcf00e6", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/1 [00:00 ... for this example, we'll use a very simple HTML document with some JavaScript,\n", + "> all inside a long string.\n", + "> This, of course, is not optimal and you wouldn't use it for production.\n", + "\n", + "Here, [CallbackMessengerInterface](../apiref/dff.messengers.common.interface.rst#dff.messengers.common.interface.CallbackMessengerInterface)\n", + "is used to process requests.\n", + "\n", + "[Message](../apiref/dff.script.core.message.rst#dff.script.core.message.Message) is used to represent text messages." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "7f46e2ba", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:06:52.245215Z", + "iopub.status.busy": "2023-11-21T17:06:52.244687Z", + "iopub.status.idle": "2023-11-21T17:06:54.714008Z", + "shell.execute_reply": "2023-11-21T17:06:54.713212Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff uvicorn fastapi" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "07f3d180", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:06:54.717090Z", + "iopub.status.busy": "2023-11-21T17:06:54.716674Z", + "iopub.status.idle": "2023-11-21T17:06:55.853567Z", + "shell.execute_reply": "2023-11-21T17:06:55.852855Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "from dff.messengers.common.interface import CallbackMessengerInterface\n", + "from dff.script import Message\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing import TOY_SCRIPT_ARGS, is_interactive_mode\n", + "\n", + "import uvicorn\n", + "from fastapi import FastAPI, WebSocket, WebSocketDisconnect\n", + "from fastapi.responses import HTMLResponse" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a12c0e0e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:06:55.856966Z", + "iopub.status.busy": "2023-11-21T17:06:55.856392Z", + "iopub.status.idle": "2023-11-21T17:06:55.860802Z", + "shell.execute_reply": "2023-11-21T17:06:55.860218Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "messenger_interface = CallbackMessengerInterface()\n", + "pipeline = Pipeline.from_script(\n", + " *TOY_SCRIPT_ARGS, messenger_interface=messenger_interface\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "01bbba7f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:06:55.863697Z", + "iopub.status.busy": "2023-11-21T17:06:55.863209Z", + "iopub.status.idle": "2023-11-21T17:06:55.871450Z", + "shell.execute_reply": "2023-11-21T17:06:55.870670Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "app = FastAPI()\n", + "\n", + "html = \"\"\"\n", + "\n", + "\n", + " \n", + " Chat\n", + " \n", + " \n", + "

WebSocket Chat

\n", + "
\n", + " \n", + " \n", + "
\n", + "
    \n", + "
\n", + " \n", + " \n", + "\n", + "\"\"\"\n", + "\n", + "\n", + "@app.get(\"/\")\n", + "async def get():\n", + " return HTMLResponse(html)\n", + "\n", + "\n", + "@app.websocket(\"/ws/{client_id}\")\n", + "async def websocket_endpoint(websocket: WebSocket, client_id: int):\n", + " await websocket.accept()\n", + " try:\n", + " while True:\n", + " data = await websocket.receive_text()\n", + " await websocket.send_text(f\"User: {data}\")\n", + " request = Message(text=data)\n", + " context = await messenger_interface.on_request_async(\n", + " request, client_id\n", + " )\n", + " response = context.last_response.text\n", + " if response is not None:\n", + " await websocket.send_text(f\"Bot: {response}\")\n", + " else:\n", + " await websocket.send_text(\"Bot did not return text.\")\n", + " except WebSocketDisconnect: # ignore disconnections\n", + " pass" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6164fbe0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:06:55.874660Z", + "iopub.status.busy": "2023-11-21T17:06:55.874196Z", + "iopub.status.idle": "2023-11-21T17:06:55.877968Z", + "shell.execute_reply": "2023-11-21T17:06:55.877294Z" + } + }, + "outputs": [], + "source": [ + "if __name__ == \"__main__\":\n", + " if is_interactive_mode(): # do not run this during doc building\n", + " pipeline.run()\n", + " uvicorn.run(\n", + " app,\n", + " host=\"127.0.0.1\",\n", + " port=8000,\n", + " )" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.ipynb new file mode 100644 index 0000000000..01a724c4fa --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.ipynb @@ -0,0 +1,279 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "3c0b52bf", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Web API: 3. Load testing with Locust\n", + "\n", + "This tutorial shows how to use an API endpoint created in the FastAPI tutorial in load testing." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "63b20429", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:06:57.659205Z", + "iopub.status.busy": "2023-11-21T17:06:57.658998Z", + "iopub.status.idle": "2023-11-21T17:07:00.097562Z", + "shell.execute_reply": "2023-11-21T17:07:00.096696Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff locust" + ] + }, + { + "cell_type": "markdown", + "id": "8747a2b3", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "## Running Locust\n", + "\n", + "1. Run this file directly:\n", + " ```bash\n", + " python {file_name}\n", + " ```\n", + "2. Run locust targeting this file:\n", + " ```bash\n", + " locust -f {file_name}\n", + " ```\n", + "3. Run from python:\n", + " ```python\n", + " import sys\n", + " from locust import main\n", + " \n", + " sys.argv = [\"locust\", \"-f\", {file_name}]\n", + " main.main()\n", + " ```\n", + "\n", + "You should see the result at http://127.0.0.1:8089.\n", + "\n", + "Make sure that your POST endpoint is also running (run the FastAPI tutorial)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "fd18d6aa", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:00.101142Z", + "iopub.status.busy": "2023-11-21T17:07:00.100668Z", + "iopub.status.idle": "2023-11-21T17:07:00.586709Z", + "shell.execute_reply": "2023-11-21T17:07:00.562793Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "################################################################################\n", + "# this patch is only needed to run this file in IPython kernel\n", + "# and can be safely removed\n", + "import gevent.monkey\n", + "\n", + "gevent.monkey.patch_all()\n", + "################################################################################" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7212444f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:00.590473Z", + "iopub.status.busy": "2023-11-21T17:07:00.589929Z", + "iopub.status.idle": "2023-11-21T17:07:01.527068Z", + "shell.execute_reply": "2023-11-21T17:07:01.495579Z" + } + }, + "outputs": [], + "source": [ + "import uuid\n", + "import time\n", + "import sys\n", + "\n", + "from locust import FastHttpUser, task, constant, main\n", + "\n", + "from dff.script import Message\n", + "from dff.utils.testing import HAPPY_PATH, is_interactive_mode" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "db3ae26e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:01.530692Z", + "iopub.status.busy": "2023-11-21T17:07:01.529976Z", + "iopub.status.idle": "2023-11-21T17:07:01.606519Z", + "shell.execute_reply": "2023-11-21T17:07:01.578616Z" + } + }, + "outputs": [], + "source": [ + "class DFFUser(FastHttpUser):\n", + " wait_time = constant(1)\n", + "\n", + " def check_happy_path(self, happy_path):\n", + " \"\"\"\n", + " Check a happy path.\n", + " For each `(request, response)` pair in `happy_path`:\n", + " 1. Send request to the API endpoint and catch its response.\n", + " 2. Compare API response with the `response`.\n", + " If they do not match, fail the request.\n", + "\n", + " :param happy_path:\n", + " An iterable of tuples of\n", + " `(Message, Message | Callable(Message->str|None) | None)`.\n", + "\n", + " If the second element is `Message`,\n", + " check that API response matches it.\n", + "\n", + " If the second element is `None`,\n", + " do not check the API response.\n", + "\n", + " If the second element is a `Callable`,\n", + " call it with the API response as its argument.\n", + " If the function returns a string,\n", + " that string is considered an error message.\n", + " If the function returns `None`,\n", + " the API response is considered correct.\n", + " \"\"\"\n", + " user_id = str(uuid.uuid4())\n", + "\n", + " for request, response in happy_path:\n", + " with self.client.post(\n", + " f\"/chat?user_id={user_id}\",\n", + " headers={\n", + " \"accept\": \"application/json\",\n", + " \"Content-Type\": \"application/json\",\n", + " },\n", + " # Name is the displayed name of the request.\n", + " name=f\"/chat?user_message={request.json()}\",\n", + " data=request.json(),\n", + " catch_response=True,\n", + " ) as candidate_response:\n", + " text_response = Message.model_validate(\n", + " candidate_response.json().get(\"response\")\n", + " )\n", + "\n", + " if response is not None:\n", + " if callable(response):\n", + " error_message = response(text_response)\n", + " if error_message is not None:\n", + " candidate_response.failure(error_message)\n", + " elif text_response != response:\n", + " candidate_response.failure(\n", + " f\"Expected: {response.model_dump_json()}\\n\"\n", + " f\"Got: {text_response.model_dump_json()}\"\n", + " )\n", + "\n", + " time.sleep(self.wait_time())\n", + "\n", + " @task(3) # <- this task is 3 times more likely than the other\n", + " def dialog_1(self):\n", + " self.check_happy_path(HAPPY_PATH)\n", + "\n", + " @task\n", + " def dialog_2(self):\n", + " def check_first_message(msg: Message) -> str | None:\n", + " if msg.text is None:\n", + " return f\"Message does not contain text: {msg.model_dump_json()}\"\n", + " if \"Hi\" not in msg.text:\n", + " return (\n", + " f'\"Hi\" is not in the response message: '\n", + " f\"{msg.model_dump_json()}\"\n", + " )\n", + " return None\n", + "\n", + " self.check_happy_path(\n", + " [\n", + " # a function can be used to check the return message\n", + " (Message(text=\"Hi\"), check_first_message),\n", + " # a None is used if return message should not be checked\n", + " (Message(text=\"i'm fine, how are you?\"), None),\n", + " # this should fail\n", + " (Message(text=\"Hi\"), check_first_message),\n", + " ]\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "8c27446b", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:01.609677Z", + "iopub.status.busy": "2023-11-21T17:07:01.609365Z", + "iopub.status.idle": "2023-11-21T17:07:01.674939Z", + "shell.execute_reply": "2023-11-21T17:07:01.648446Z" + } + }, + "outputs": [], + "source": [ + "if __name__ == \"__main__\":\n", + " if is_interactive_mode():\n", + " sys.argv = [\"locust\", \"-f\", __file__]\n", + " main.main()" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.ipynb new file mode 100644 index 0000000000..ff9f9362e9 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.ipynb @@ -0,0 +1,441 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a2a5528b", + "metadata": {}, + "source": [ + "# Web API: 4. Streamlit chat interface\n", + "\n", + "This tutorial shows how to use an API endpoint created in the FastAPI tutorial\n", + "in a Streamlit chat.\n", + "\n", + "A demonstration of the chat:\n", + "![demo](https://user-images.githubusercontent.com/61429541/238721597-ef88261d-e9e6-497d-ba68-0bcc9a765808.png)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "d945a9b9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:03.538584Z", + "iopub.status.busy": "2023-11-21T17:07:03.538062Z", + "iopub.status.idle": "2023-11-21T17:07:06.136918Z", + "shell.execute_reply": "2023-11-21T17:07:06.136101Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff streamlit streamlit-chat" + ] + }, + { + "cell_type": "markdown", + "id": "39873b31", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "## Running Streamlit:\n", + "\n", + "```bash\n", + "streamlit run {file_name}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "9a5c3745", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "## Module and package import" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e8dfd1fc", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:06.139937Z", + "iopub.status.busy": "2023-11-21T17:07:06.139656Z", + "iopub.status.idle": "2023-11-21T17:07:06.143600Z", + "shell.execute_reply": "2023-11-21T17:07:06.143059Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "###########################################################\n", + "# This patch is only needed to import Message from dff.\n", + "# Streamlit Chat interface can be written without using it.\n", + "import asyncio\n", + "\n", + "loop = asyncio.new_event_loop()\n", + "asyncio.set_event_loop(loop)\n", + "###########################################################" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5e7f1544", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:06.146246Z", + "iopub.status.busy": "2023-11-21T17:07:06.145869Z", + "iopub.status.idle": "2023-11-21T17:07:07.096378Z", + "shell.execute_reply": "2023-11-21T17:07:07.095746Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import uuid\n", + "import itertools\n", + "\n", + "import requests\n", + "import streamlit as st\n", + "from streamlit_chat import message\n", + "import streamlit.components.v1 as components\n", + "from dff.script import Message" + ] + }, + { + "cell_type": "markdown", + "id": "3aa0b2b6", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "## API configuration\n", + "\n", + "Here we define methods to contact the API endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "530349d6", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:07.099830Z", + "iopub.status.busy": "2023-11-21T17:07:07.099327Z", + "iopub.status.idle": "2023-11-21T17:07:07.103347Z", + "shell.execute_reply": "2023-11-21T17:07:07.102795Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "API_URL = \"http://localhost:8000/chat\"\n", + "\n", + "\n", + "def query(payload, user_id) -> requests.Response:\n", + " response = requests.post(\n", + " API_URL + f\"?user_id={user_id}\",\n", + " headers={\n", + " \"accept\": \"application/json\",\n", + " \"Content-Type\": \"application/json\",\n", + " },\n", + " json=payload,\n", + " )\n", + " return response" + ] + }, + { + "cell_type": "markdown", + "id": "c6facc9c", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "## Streamlit configuration\n", + "\n", + "Here we configure Streamlit page and initialize some session variables:\n", + "\n", + "1. `user_id` -- stores user_id to be used in pipeline.\n", + "2. `bot_responses` -- a list of bot responses.\n", + "3. `user_requests` -- a list of user requests." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c1148437", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:07.106058Z", + "iopub.status.busy": "2023-11-21T17:07:07.105661Z", + "iopub.status.idle": "2023-11-21T17:07:07.129046Z", + "shell.execute_reply": "2023-11-21T17:07:07.128448Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-11-21 17:07:07.125 \n", + " \u001b[33m\u001b[1mWarning:\u001b[0m to view this Streamlit app on a browser, run it with the following\n", + " command:\n", + "\n", + " streamlit run /home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/ipykernel_launcher.py [ARGUMENTS]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-11-21 17:07:07.126 Session state does not function when running a script without `streamlit run`\n" + ] + } + ], + "source": [ + "st.set_page_config(page_title=\"Streamlit DFF Chat\", page_icon=\":robot:\")\n", + "\n", + "st.header(\"Streamlit DFF Chat\")\n", + "\n", + "if \"user_id\" not in st.session_state:\n", + " st.session_state[\"user_id\"] = str(uuid.uuid4())\n", + "\n", + "if \"bot_responses\" not in st.session_state:\n", + " st.session_state[\"bot_responses\"] = []\n", + "\n", + "if \"user_requests\" not in st.session_state:\n", + " st.session_state[\"user_requests\"] = []" + ] + }, + { + "cell_type": "markdown", + "id": "c0263334", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "## UI setup\n", + "\n", + "Here we configure elements that will be used in Streamlit to interact with the API.\n", + "\n", + "First we define a text input field which a user is supposed to type his requests into.\n", + "Then we define a button that sends a query to the API, logs requests and responses,\n", + "and clears the text field." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e1dca029", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:07.131764Z", + "iopub.status.busy": "2023-11-21T17:07:07.131410Z", + "iopub.status.idle": "2023-11-21T17:07:07.136406Z", + "shell.execute_reply": "2023-11-21T17:07:07.135828Z" + } + }, + "outputs": [], + "source": [ + "def send_and_receive():\n", + " \"\"\"\n", + " Send text inside the input field. Receive response from API endpoint.\n", + "\n", + " Add both the request and response to `user_requests` and `bot_responses`.\n", + "\n", + " We do not call this function inside the `text_input.on_change` because then\n", + " we'd call it whenever the text field loses focus\n", + " (e.g. when a browser tab is switched).\n", + " \"\"\"\n", + " user_request = st.session_state[\"input\"]\n", + "\n", + " if user_request == \"\":\n", + " return\n", + "\n", + " st.session_state[\"user_requests\"].append(user_request)\n", + "\n", + " bot_response = query(\n", + " Message(text=user_request).model_dump(),\n", + " user_id=st.session_state[\"user_id\"],\n", + " )\n", + " bot_response.raise_for_status()\n", + "\n", + " bot_message = Message.model_validate(bot_response.json()[\"response\"]).text\n", + "\n", + " # # Implementation without using Message:\n", + " # bot_response = query(\n", + " # {\"text\": user_request},\n", + " # user_id=st.session_state[\"user_id\"]\n", + " # )\n", + " # bot_response.raise_for_status()\n", + " #\n", + " # bot_message = bot_response.json()[\"response\"][\"text\"]\n", + "\n", + " st.session_state[\"bot_responses\"].append(bot_message)\n", + "\n", + " st.session_state[\"input\"] = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "00ce7d3e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:07.139199Z", + "iopub.status.busy": "2023-11-21T17:07:07.138612Z", + "iopub.status.idle": "2023-11-21T17:07:07.145481Z", + "shell.execute_reply": "2023-11-21T17:07:07.144856Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.text_input(\"You: \", key=\"input\")\n", + "st.button(\"Send\", on_click=send_and_receive)" + ] + }, + { + "cell_type": "markdown", + "id": "e036212a", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "### Component patch\n", + "\n", + "Here we add a component that presses the `Send` button whenever user presses the `Enter` key." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e96e6bab", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:07.148309Z", + "iopub.status.busy": "2023-11-21T17:07:07.147896Z", + "iopub.status.idle": "2023-11-21T17:07:07.153722Z", + "shell.execute_reply": "2023-11-21T17:07:07.153155Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DeltaGenerator()" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "components.html(\n", + " \"\"\"\n", + "\n", + "\"\"\",\n", + " height=0,\n", + " width=0,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "3b108b1d", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "### Message display\n", + "\n", + "Here we use the `streamlit-chat` package to display user requests and bot responses." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "86df6af4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:07.156395Z", + "iopub.status.busy": "2023-11-21T17:07:07.155985Z", + "iopub.status.idle": "2023-11-21T17:07:07.159980Z", + "shell.execute_reply": "2023-11-21T17:07:07.159340Z" + } + }, + "outputs": [], + "source": [ + "for i, bot_response, user_request in zip(\n", + " itertools.count(0),\n", + " st.session_state.get(\"bot_responses\", []),\n", + " st.session_state.get(\"user_requests\", []),\n", + "):\n", + " message(user_request, key=f\"{i}_user\", is_user=True)\n", + " message(bot_response, key=f\"{i}_bot\")" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.1_basics.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.1_basics.ipynb new file mode 100644 index 0000000000..74f8f63e25 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.1_basics.ipynb @@ -0,0 +1,226 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f7561e85", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 1. Basics\n", + "\n", + "The following tutorial shows basic usage of `pipeline`\n", + "module as an extension to `dff.script.core`.\n", + "\n", + "Here, `__call__` (same as [run](../apiref/dff.pipeline.pipeline.pipeline.rst#dff.pipeline.pipeline.pipeline.Pipeline.run))\n", + "method is used to execute pipeline once." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "bc279ce8", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:09.251765Z", + "iopub.status.busy": "2023-11-21T17:07:09.251536Z", + "iopub.status.idle": "2023-11-21T17:07:11.593598Z", + "shell.execute_reply": "2023-11-21T17:07:11.592767Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3369058a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:11.596652Z", + "iopub.status.busy": "2023-11-21T17:07:11.596312Z", + "iopub.status.idle": "2023-11-21T17:07:12.333017Z", + "shell.execute_reply": "2023-11-21T17:07:12.332238Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "from dff.script import Context, Message\n", + "\n", + "from dff.pipeline import Pipeline\n", + "\n", + "from dff.utils.testing import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " HAPPY_PATH,\n", + " TOY_SCRIPT,\n", + " TOY_SCRIPT_ARGS,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "f9259815", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "`Pipeline` is an object, that automates script execution and context management.\n", + "`from_script` method can be used to create\n", + "a pipeline of the most basic structure:\n", + "\"preprocessors -> actor -> postprocessors\"\n", + "as well as to define `context_storage` and `messenger_interface`.\n", + "Actor is a component of :py:class:`.Pipeline`, that contains the :py:class:`.Script`\n", + "and handles it. It is responsible for processing user input and determining\n", + "the appropriate response based on the current state of the conversation and the script.\n", + "These parameters usage will be shown in tutorials 2, 3 and 6.\n", + "\n", + "Here only required parameters are provided to pipeline.\n", + "`context_storage` will default to simple Python dict and\n", + "`messenger_interface` will never be used.\n", + "pre- and postprocessors lists are empty.\n", + "`Pipeline` object can be called with user input\n", + "as first argument and dialog id (any immutable object).\n", + "This call will return `Context`,\n", + "its `last_response` property will be actors response." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "79b11031", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:12.337130Z", + "iopub.status.busy": "2023-11-21T17:07:12.336288Z", + "iopub.status.idle": "2023-11-21T17:07:12.341579Z", + "shell.execute_reply": "2023-11-21T17:07:12.340878Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "pipeline = Pipeline.from_script(\n", + " TOY_SCRIPT,\n", + " # Pipeline script object, defined in `dff.utils.testing.toy_script`\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "d9b30961", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "For the sake of brevity, other tutorials might use `TOY_SCRIPT_ARGS` to initialize pipeline:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "579c7aa7", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:12.344760Z", + "iopub.status.busy": "2023-11-21T17:07:12.344504Z", + "iopub.status.idle": "2023-11-21T17:07:12.349255Z", + "shell.execute_reply": "2023-11-21T17:07:12.347777Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "assert TOY_SCRIPT_ARGS == (\n", + " TOY_SCRIPT,\n", + " (\"greeting_flow\", \"start_node\"),\n", + " (\"greeting_flow\", \"fallback_node\"),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a7b8fd73", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:12.353630Z", + "iopub.status.busy": "2023-11-21T17:07:12.353174Z", + "iopub.status.idle": "2023-11-21T17:07:12.364886Z", + "shell.execute_reply": "2023-11-21T17:07:12.363972Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " # a function for automatic tutorial running (testing) with HAPPY_PATH\n", + "\n", + " # This runs tutorial in interactive mode if not in IPython env\n", + " # and if `DISABLE_INTERACTIVE_MODE` is not set\n", + " if is_interactive_mode():\n", + " ctx_id = 0 # 0 will be current dialog (context) identification.\n", + " while True:\n", + " message = Message(text=input(\"Send request: \"))\n", + " ctx: Context = pipeline(message, ctx_id)\n", + " print(ctx.last_response)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.2_pre_and_post_processors.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.2_pre_and_post_processors.ipynb new file mode 100644 index 0000000000..3e2a900738 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.2_pre_and_post_processors.ipynb @@ -0,0 +1,216 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7f2479b0", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 2. Pre- and postprocessors\n", + "\n", + "The following tutorial shows more advanced usage of `pipeline`\n", + "module as an extension to `dff.script.core`.\n", + "\n", + "Here, [misc](../apiref/dff.script.core.context.rst#dff.script.core.context.Context.misc)\n", + "dictionary of context is used for storing additional data." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "0af757c4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:14.342549Z", + "iopub.status.busy": "2023-11-21T17:07:14.341950Z", + "iopub.status.idle": "2023-11-21T17:07:16.701186Z", + "shell.execute_reply": "2023-11-21T17:07:16.700120Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "43f1e2d0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:16.704658Z", + "iopub.status.busy": "2023-11-21T17:07:16.704276Z", + "iopub.status.idle": "2023-11-21T17:07:17.423232Z", + "shell.execute_reply": "2023-11-21T17:07:17.422613Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "from dff.messengers.common import CLIMessengerInterface\n", + "from dff.script import Context, Message\n", + "\n", + "from dff.pipeline import Pipeline\n", + "\n", + "from dff.utils.testing import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " HAPPY_PATH,\n", + " TOY_SCRIPT_ARGS,\n", + ")\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "03ee10cf", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "When Pipeline is created with `from_script` method, additional pre-\n", + "and postprocessors can be defined.\n", + "These can be any `ServiceBuilder` objects (defined in `types` module)\n", + "- callables, objects or dicts.\n", + "They are being turned into special `Service` objects (see tutorial 3),\n", + "that will be run before or after `Actor` respectively.\n", + "These services can be used to access external APIs, annotate user input, etc.\n", + "\n", + "Service callable signature can be one of the following:\n", + "`[ctx]`, `[ctx, pipeline]` or `[ctx, actor, info]` (see tutorial 3),\n", + "where:\n", + "\n", + "* `ctx` - Context of the current dialog.\n", + "* `pipeline` - The current pipeline.\n", + "* `info` - dictionary, containing information about\n", + " current service and pipeline execution state (see tutorial 4).\n", + "\n", + "Here a preprocessor (\"ping\") and a postprocessor (\"pong\") are added to pipeline.\n", + "They share data in `context.misc` -\n", + "a common place for sharing data between services and actor." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f73d7d97", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:17.426594Z", + "iopub.status.busy": "2023-11-21T17:07:17.426157Z", + "iopub.status.idle": "2023-11-21T17:07:17.430167Z", + "shell.execute_reply": "2023-11-21T17:07:17.429538Z" + } + }, + "outputs": [], + "source": [ + "def ping_processor(ctx: Context):\n", + " ctx.misc[\"ping\"] = True\n", + "\n", + "\n", + "def pong_processor(ctx: Context):\n", + " ping = ctx.misc.get(\"ping\", False)\n", + " ctx.misc[\"pong\"] = ping" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f4f9784a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:17.433016Z", + "iopub.status.busy": "2023-11-21T17:07:17.432531Z", + "iopub.status.idle": "2023-11-21T17:07:17.446431Z", + "shell.execute_reply": "2023-11-21T17:07:17.445630Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " *TOY_SCRIPT_ARGS,\n", + " context_storage={}, # `context_storage` - a dictionary or\n", + " # a `DBContextStorage` instance,\n", + " # a place to store dialog contexts\n", + " messenger_interface=CLIMessengerInterface(),\n", + " # `messenger_interface` - a message channel adapter,\n", + " # it's not used in this tutorial\n", + " pre_services=[ping_processor],\n", + " post_services=[pong_processor],\n", + ")\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " ctx_id = 0 # 0 will be current dialog (context) identification.\n", + " while True:\n", + " message = Message(text=input(\"Send request: \"))\n", + " ctx: Context = pipeline(message, ctx_id)\n", + " print(f\"Response: {ctx.last_response}\")\n", + " ping_pong = ctx.misc.get(\"ping\", False) and ctx.misc.get(\n", + " \"pong\", False\n", + " )\n", + " print(\n", + " f\"Ping-pong exchange: {'completed' if ping_pong else 'failed'}.\"\n", + " )\n", + " logger.info(f\"Context misc: {ctx.misc}\")" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.ipynb new file mode 100644 index 0000000000..3967b73898 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.ipynb @@ -0,0 +1,232 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a66142cb", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 3. Pipeline dict with services (basic)\n", + "\n", + "The following tutorial shows `pipeline` creation from\n", + "dict and most important pipeline components.\n", + "\n", + "Here, [Service](../apiref/dff.pipeline.service.service.rst#dff.pipeline.service.service.Service)\n", + "class, that can be used for pre- and postprocessing of messages is shown.\n", + "\n", + "Pipeline's [from_dict](../apiref/dff.pipeline.pipeline.pipeline.rst#dff.pipeline.pipeline.pipeline.Pipeline.from_dict)\n", + "static method is used for pipeline creation (from dictionary)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "55941163", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:19.250026Z", + "iopub.status.busy": "2023-11-21T17:07:19.249519Z", + "iopub.status.idle": "2023-11-21T17:07:21.567370Z", + "shell.execute_reply": "2023-11-21T17:07:21.566535Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "24ab147e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:21.570730Z", + "iopub.status.busy": "2023-11-21T17:07:21.570136Z", + "iopub.status.idle": "2023-11-21T17:07:22.326267Z", + "shell.execute_reply": "2023-11-21T17:07:22.325537Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "from dff.pipeline import Service, Pipeline, ACTOR\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "1470a0c8", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "When Pipeline is created using `from_dict` method,\n", + "pipeline should be defined as a dictionary.\n", + "It should contain `services` - a `ServiceGroupBuilder` object,\n", + "basically a list of `ServiceBuilder` or `ServiceGroupBuilder` objects,\n", + "see tutorial 4.\n", + "\n", + "On pipeline execution services from `services`\n", + "list are run without difference between pre- and postprocessors.\n", + "Actor constant \"ACTOR\" should also be present among services.\n", + "ServiceBuilder object can be defined either with callable\n", + "(see tutorial 2) or with dict / object.\n", + "It should contain `handler` - a ServiceBuilder object.\n", + "\n", + "Not only Pipeline can be run using `__call__` method,\n", + "for most cases `run` method should be used.\n", + "It starts pipeline asynchronously and connects to provided messenger interface.\n", + "\n", + "Here pipeline contains 4 services,\n", + "defined in 4 different ways with different signatures." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "361b6778", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:22.330853Z", + "iopub.status.busy": "2023-11-21T17:07:22.330366Z", + "iopub.status.idle": "2023-11-21T17:07:22.334957Z", + "shell.execute_reply": "2023-11-21T17:07:22.334104Z" + } + }, + "outputs": [], + "source": [ + "def prepreprocess(_):\n", + " logger.info(\n", + " \"preprocession intent-detection Service running (defined as a dict)\"\n", + " )\n", + "\n", + "\n", + "def preprocess(_):\n", + " logger.info(\n", + " \"another preprocession web-based annotator Service \"\n", + " \"(defined as a callable)\"\n", + " )\n", + "\n", + "\n", + "def postprocess(_):\n", + " logger.info(\"postprocession Service (defined as an object)\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "306d26b1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:22.338068Z", + "iopub.status.busy": "2023-11-21T17:07:22.337587Z", + "iopub.status.idle": "2023-11-21T17:07:22.342321Z", + "shell.execute_reply": "2023-11-21T17:07:22.341770Z" + } + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " {\n", + " \"handler\": prepreprocess,\n", + " },\n", + " preprocess,\n", + " ACTOR,\n", + " Service(\n", + " handler=postprocess,\n", + " ),\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "eeeac6ac", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:22.345086Z", + "iopub.status.busy": "2023-11-21T17:07:22.344812Z", + "iopub.status.idle": "2023-11-21T17:07:22.358888Z", + "shell.execute_reply": "2023-11-21T17:07:22.358135Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline) # This runs tutorial in interactive mode" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.ipynb new file mode 100644 index 0000000000..d088db656e --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.ipynb @@ -0,0 +1,302 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fc52eea5", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 3. Pipeline dict with services (full)\n", + "\n", + "The following tutorial shows `pipeline` creation from dict\n", + "and most important pipeline components.\n", + "\n", + "This tutorial is a more advanced version of the\n", + "[previous tutorial](../tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "34dd2124", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:24.094880Z", + "iopub.status.busy": "2023-11-21T17:07:24.094449Z", + "iopub.status.idle": "2023-11-21T17:07:26.532478Z", + "shell.execute_reply": "2023-11-21T17:07:26.531699Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "9b8a3390", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:26.536002Z", + "iopub.status.busy": "2023-11-21T17:07:26.535522Z", + "iopub.status.idle": "2023-11-21T17:07:27.273053Z", + "shell.execute_reply": "2023-11-21T17:07:27.272368Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import json\n", + "import logging\n", + "import urllib.request\n", + "\n", + "from dff.script import Context\n", + "from dff.messengers.common import CLIMessengerInterface\n", + "from dff.pipeline import Service, Pipeline, ServiceRuntimeInfo, ACTOR\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "5bffd156", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "When Pipeline is created using `from_dict` method,\n", + "pipeline should be defined as `PipelineBuilder` objects\n", + "(defined in `types` module).\n", + "These objects are dictionaries of particular structure:\n", + "\n", + "* `messenger_interface` - `MessengerInterface` instance,\n", + " is used to connect to channel and transfer IO to user.\n", + "* `context_storage` - Place to store dialog contexts\n", + " (dictionary or a `DBContextStorage` instance).\n", + "* `services` (required) - A `ServiceGroupBuilder` object,\n", + " basically a list of `ServiceBuilder` or `ServiceGroupBuilder` objects,\n", + " see tutorial 4.\n", + "* `wrappers` - A list of pipeline wrappers, see tutorial 7.\n", + "* `timeout` - Pipeline timeout, see tutorial 5.\n", + "* `optimization_warnings` - Whether pipeline asynchronous structure\n", + " should be checked during initialization,\n", + " see tutorial 5.\n", + "\n", + "On pipeline execution services from `services` list are run\n", + "without difference between pre- and postprocessors.\n", + "If \"ACTOR\" constant is not found among `services` pipeline creation fails.\n", + "There can be only one \"ACTOR\" constant in the pipeline.\n", + "ServiceBuilder object can be defined either with callable (see tutorial 2) or\n", + "with dict of structure / object with following constructor arguments:\n", + "\n", + "* `handler` (required) - ServiceBuilder,\n", + " if handler is an object or a dict itself,\n", + " it will be used instead of base ServiceBuilder.\n", + " NB! Fields of nested ServiceBuilder will be overridden\n", + " by defined fields of the base ServiceBuilder.\n", + "* `wrappers` - a list of service wrappers, see tutorial 7.\n", + "* `timeout` - service timeout, see tutorial 5.\n", + "* `asynchronous` - whether or not this service _should_ be asynchronous\n", + " (keep in mind that not all services _can_ be asynchronous),\n", + " see tutorial 5.\n", + "* `start_condition` - service start condition, see tutorial 4.\n", + "* `name` - custom defined name for the service\n", + " (keep in mind that names in one ServiceGroup should be unique),\n", + " see tutorial 4.\n", + "\n", + "Not only Pipeline can be run using `__call__` method,\n", + "for most cases `run` method should be used.\n", + "It starts pipeline asynchronously and connects to provided messenger interface.\n", + "\n", + "Here pipeline contains 4 services,\n", + "defined in 4 different ways with different signatures.\n", + "First two of them write sample feature detection data to `ctx.misc`.\n", + "The first uses a constant expression and the second fetches from `example.com`.\n", + "Third one is \"ACTOR\" constant (it acts like a _special_ service here).\n", + "Final service logs `ctx.misc` dict." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a0a22bf8", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:27.276550Z", + "iopub.status.busy": "2023-11-21T17:07:27.275857Z", + "iopub.status.idle": "2023-11-21T17:07:27.282193Z", + "shell.execute_reply": "2023-11-21T17:07:27.281553Z" + } + }, + "outputs": [], + "source": [ + "def prepreprocess(ctx: Context):\n", + " logger.info(\n", + " \"preprocession intent-detection Service running (defined as a dict)\"\n", + " )\n", + " ctx.misc[\"preprocess_detection\"] = {\n", + " ctx.last_request.text: \"some_intent\"\n", + " } # Similar syntax can be used to access\n", + " # service output dedicated to current pipeline run\n", + "\n", + "\n", + "def preprocess(ctx: Context, _, info: ServiceRuntimeInfo):\n", + " logger.info(\n", + " f\"another preprocession web-based annotator Service\"\n", + " f\"(defined as a callable), named '{info.name}'\"\n", + " )\n", + " with urllib.request.urlopen(\"https://example.com/\") as webpage:\n", + " web_content = webpage.read().decode(\n", + " webpage.headers.get_content_charset()\n", + " )\n", + " ctx.misc[\"another_detection\"] = {\n", + " ctx.last_request.text: \"online\"\n", + " if \"Example Domain\" in web_content\n", + " else \"offline\"\n", + " }\n", + "\n", + "\n", + "def postprocess(ctx: Context, pl: Pipeline):\n", + " logger.info(\"postprocession Service (defined as an object)\")\n", + " logger.info(\n", + " f\"resulting misc looks like:\"\n", + " f\"{json.dumps(ctx.misc, indent=4, default=str)}\"\n", + " )\n", + " fallback_flow, fallback_node, _ = pl.actor.fallback_label\n", + " received_response = pl.script[fallback_flow][fallback_node].response\n", + " responses_match = received_response == ctx.last_response\n", + " logger.info(f\"actor is{'' if responses_match else ' not'} in fallback node\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "dda4420b", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:27.284764Z", + "iopub.status.busy": "2023-11-21T17:07:27.284391Z", + "iopub.status.idle": "2023-11-21T17:07:27.288742Z", + "shell.execute_reply": "2023-11-21T17:07:27.288096Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"messenger_interface\": CLIMessengerInterface(\n", + " intro=\"Hi, this is a brand new Pipeline running!\",\n", + " prompt_request=\"Request: \",\n", + " prompt_response=\"Response: \",\n", + " ), # `CLIMessengerInterface` has the following constructor parameters:\n", + " # `intro` - a string that will be displayed\n", + " # on connection to interface (on `pipeline.run`)\n", + " # `prompt_request` - a string that will be displayed before user input\n", + " # `prompt_response` - an output prefix string\n", + " \"context_storage\": {},\n", + " \"components\": [\n", + " {\n", + " \"handler\": {\n", + " \"handler\": prepreprocess,\n", + " \"name\": \"silly_service_name\",\n", + " },\n", + " \"name\": \"preprocessor\",\n", + " }, # This service will be named `preprocessor`\n", + " # handler name will be overridden\n", + " preprocess,\n", + " ACTOR,\n", + " Service(\n", + " handler=postprocess,\n", + " name=\"postprocessor\",\n", + " ),\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "11399d48", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:27.291417Z", + "iopub.status.busy": "2023-11-21T17:07:27.290829Z", + "iopub.status.idle": "2023-11-21T17:07:27.368904Z", + "shell.execute_reply": "2023-11-21T17:07:27.368174Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.ipynb new file mode 100644 index 0000000000..2102f298f2 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.ipynb @@ -0,0 +1,260 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2ac79d79", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 4. Groups and conditions (basic)\n", + "\n", + "The following example shows `pipeline` service group usage and start conditions.\n", + "\n", + "Here, [Service](../apiref/dff.pipeline.service.service.rst#dff.pipeline.service.service.Service)s\n", + "and [ServiceGroup](../apiref/dff.pipeline.service.group.rst#dff.pipeline.service.group.ServiceGroup)s\n", + "are shown for advanced data pre- and postprocessing based on conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "2e4df5f3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:29.341949Z", + "iopub.status.busy": "2023-11-21T17:07:29.341733Z", + "iopub.status.idle": "2023-11-21T17:07:31.724021Z", + "shell.execute_reply": "2023-11-21T17:07:31.723049Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ffb4e98f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:31.727201Z", + "iopub.status.busy": "2023-11-21T17:07:31.726936Z", + "iopub.status.idle": "2023-11-21T17:07:32.453728Z", + "shell.execute_reply": "2023-11-21T17:07:32.453095Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import json\n", + "import logging\n", + "\n", + "from dff.pipeline import (\n", + " Service,\n", + " Pipeline,\n", + " not_condition,\n", + " service_successful_condition,\n", + " ServiceRuntimeInfo,\n", + " ACTOR,\n", + ")\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "86414fb1", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Pipeline can contain not only single services, but also service groups.\n", + "Service groups can be defined as `ServiceGroupBuilder` objects:\n", + " lists of `ServiceBuilders` and `ServiceGroupBuilders` or objects.\n", + "The objects should contain `services` -\n", + "a ServiceBuilder and ServiceGroupBuilder object list.\n", + "\n", + "To receive serialized information about service,\n", + " service group or pipeline a property `info_dict` can be used,\n", + " it returns important object properties as a dict.\n", + "\n", + "Services and service groups can be executed conditionally.\n", + "Conditions are functions passed to `start_condition` argument.\n", + "These functions should have following signature:\n", + "\n", + " (ctx: Context, pipeline: Pipeline) -> bool.\n", + "\n", + "Service is only executed if its start_condition returned `True`.\n", + "By default all the services start unconditionally.\n", + "There are number of built-in condition functions.\n", + "Built-in condition functions check other service states.\n", + "These are most important built-in condition functions:\n", + "\n", + "* `always_start_condition` - Default condition function, always starts service.\n", + "* `service_successful_condition(path)` - Function that checks,\n", + " whether service with given `path` executed successfully.\n", + "* `not_condition(function)` - Function that returns result\n", + " opposite from the one returned\n", + " by the `function` (condition function) argument.\n", + "\n", + "Here there is a conditionally executed service named\n", + "`never_running_service` is always executed.\n", + "It is executed only if `always_running_service`\n", + "is not finished, that should never happen.\n", + "The service named `context_printing_service`\n", + "prints pipeline runtime information,\n", + "that contains execution state of all previously run services." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ef49c0b9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:32.457197Z", + "iopub.status.busy": "2023-11-21T17:07:32.456695Z", + "iopub.status.idle": "2023-11-21T17:07:32.462561Z", + "shell.execute_reply": "2023-11-21T17:07:32.461834Z" + } + }, + "outputs": [], + "source": [ + "def always_running_service(_, __, info: ServiceRuntimeInfo):\n", + " logger.info(f\"Service '{info.name}' is running...\")\n", + "\n", + "\n", + "def never_running_service(_, __, info: ServiceRuntimeInfo):\n", + " raise Exception(f\"Oh no! The '{info.name}' service is running!\")\n", + "\n", + "\n", + "def runtime_info_printing_service(_, __, info: ServiceRuntimeInfo):\n", + " logger.info(\n", + " f\"Service '{info.name}' runtime execution info:\"\n", + " f\"{json.dumps(info, indent=4, default=str)}\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "18d5e496", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:32.466673Z", + "iopub.status.busy": "2023-11-21T17:07:32.465961Z", + "iopub.status.idle": "2023-11-21T17:07:32.472291Z", + "shell.execute_reply": "2023-11-21T17:07:32.471593Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " Service(\n", + " handler=always_running_service,\n", + " name=\"always_running_service\",\n", + " ),\n", + " ACTOR,\n", + " Service(\n", + " handler=never_running_service,\n", + " start_condition=not_condition(\n", + " service_successful_condition(\".pipeline.always_running_service\")\n", + " ),\n", + " ),\n", + " Service(\n", + " handler=runtime_info_printing_service,\n", + " name=\"runtime_info_printing_service\",\n", + " ),\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "78580731", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:32.477087Z", + "iopub.status.busy": "2023-11-21T17:07:32.476153Z", + "iopub.status.idle": "2023-11-21T17:07:32.490921Z", + "shell.execute_reply": "2023-11-21T17:07:32.490297Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_full.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_full.ipynb new file mode 100644 index 0000000000..93d948fed5 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_full.ipynb @@ -0,0 +1,389 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "320a2175", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 4. Groups and conditions (full)\n", + "\n", + "The following tutorial shows `pipeline` service group usage and start conditions.\n", + "\n", + "This tutorial is a more advanced version of the\n", + "[previous tutorial](../tutorials/tutorials.pipeline.4_groups_and_conditions_basic.py)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a0c42fc1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:34.313260Z", + "iopub.status.busy": "2023-11-21T17:07:34.312984Z", + "iopub.status.idle": "2023-11-21T17:07:36.660251Z", + "shell.execute_reply": "2023-11-21T17:07:36.659467Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "edcf0f5f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:36.663886Z", + "iopub.status.busy": "2023-11-21T17:07:36.663270Z", + "iopub.status.idle": "2023-11-21T17:07:37.433212Z", + "shell.execute_reply": "2023-11-21T17:07:37.432556Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "from dff.pipeline import (\n", + " Service,\n", + " Pipeline,\n", + " ServiceGroup,\n", + " not_condition,\n", + " service_successful_condition,\n", + " all_condition,\n", + " ServiceRuntimeInfo,\n", + " ACTOR,\n", + ")\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "2064700a", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Pipeline can contain not only single services, but also service groups.\n", + "Service groups can be defined as lists of `ServiceBuilders`\n", + " (in fact, all of the pipeline services are combined\n", + " into root service group named \"pipeline\").\n", + "Alternatively, the groups can be defined as objects\n", + " with following constructor arguments:\n", + "\n", + "* `components` (required) - A list of ServiceBuilder objects,\n", + " ServiceGroup objects and lists of them.\n", + "* `wrappers` - A list of pipeline wrappers, see tutorial 7.\n", + "* `timeout` - Pipeline timeout, see tutorial 5.\n", + "* `asynchronous` - Whether or not this service group _should_ be asynchronous\n", + " (keep in mind that not all service groups _can_ be asynchronous),\n", + " see tutorial 5.\n", + "* `start_condition` - Service group start condition.\n", + "* `name` - Custom defined name for the service group\n", + " (keep in mind that names in one ServiceGroup should be unique).\n", + "\n", + "Service (and service group) object fields\n", + "are mostly the same as constructor parameters,\n", + "however there are some differences:\n", + "\n", + "* `requested_async_flag` - Contains the value received\n", + " from `asynchronous` constructor parameter.\n", + "* `calculated_async_flag` - Contains automatically calculated\n", + " possibility of the service to be asynchronous.\n", + "* `asynchronous` - Combination af `..._async_flag` fields,\n", + " requested value overrides calculated (if not `None`),\n", + " see tutorial 5.\n", + "* `path` - Contains globally unique (for pipeline)\n", + " path to the service or service group.\n", + "\n", + "If no name is specified for a service or service group,\n", + " the name will be generated according to the following rules:\n", + "\n", + "1. If service's handler is an Actor, service will be named 'actor'.\n", + "2. If service's handler is callable,\n", + " service will be named callable.\n", + "3. Service group will be named 'service_group'.\n", + "4. Otherwise, it will be named 'noname_service'.\n", + "5. After that an index will be added to service name.\n", + "\n", + "To receive serialized information about service, service group\n", + "or pipeline a property `info_dict` can be used,\n", + "it returns important object properties as a dict.\n", + "In addition to that `pretty_format` method of Pipeline\n", + "can be used to get all pipeline properties as a formatted string\n", + "(e.g. for logging or debugging purposes).\n", + "\n", + "Services and service groups can be executed conditionally.\n", + "Conditions are functions passed to `start_condition` argument.\n", + "These functions should have following signature:\n", + "\n", + " (ctx: Context, pipeline: Pipeline) -> bool.\n", + "\n", + "Service is only executed if its start_condition returned `True`.\n", + "By default all the services start unconditionally.\n", + "There are number of built-in condition functions as well\n", + "as possibility to create custom ones.\n", + "Custom condition functions can rely on data in `ctx.misc`\n", + "as well as on any external data source.\n", + "Built-in condition functions check other service states.\n", + "All of the services store their execution status in context,\n", + " this status can be one of the following:\n", + "\n", + "* `NOT_RUN` - Service hasn't bee executed yet.\n", + "* `RUNNING` - Service is currently being executed\n", + " (important for asynchronous services).\n", + "* `FINISHED` - Service finished successfully.\n", + "* `FAILED` - Service execution failed (that also throws an exception).\n", + "\n", + "There are following built-in condition functions:\n", + "\n", + "* `always_start_condition` - Default condition function,\n", + " always starts service.\n", + "* `service_successful_condition(path)` -\n", + " Function that checks, whether service\n", + " with given `path` executed successfully (is `FINISHED`).\n", + "* `not_condition(function)` -\n", + " Function that returns result opposite\n", + " from the one returned by\n", + " the `function` (condition function) argument.\n", + "* `aggregate_condition(aggregator, *functions)` -\n", + " Function that aggregated results of\n", + " numerous `functions` (condition functions)\n", + " using special `aggregator` function.\n", + "* `all_condition(*functions)` -\n", + " Function that returns True only if all\n", + " of the given `functions`\n", + " (condition functions) return `True`.\n", + "* `any_condition(*functions)` -\n", + " Function that returns `True`\n", + " if any of the given `functions`\n", + " (condition functions) return `True`.\n", + "NB! Actor service ALWAYS runs unconditionally.\n", + "\n", + "Here there are two conditionally executed services:\n", + "a service named `running_service` is executed\n", + " only if both `simple_services` in `service_group_0`\n", + " are finished successfully.\n", + "`never_running_service` is executed only if `running_service` is not finished,\n", + "this should never happen.\n", + "`context_printing_service` prints pipeline runtime information,\n", + " that contains execution state of all previously run services." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d742a681", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:37.436870Z", + "iopub.status.busy": "2023-11-21T17:07:37.436137Z", + "iopub.status.idle": "2023-11-21T17:07:37.440938Z", + "shell.execute_reply": "2023-11-21T17:07:37.440360Z" + } + }, + "outputs": [], + "source": [ + "def simple_service(_, __, info: ServiceRuntimeInfo):\n", + " logger.info(f\"Service '{info.name}' is running...\")\n", + "\n", + "\n", + "def never_running_service(_, __, info: ServiceRuntimeInfo):\n", + " raise Exception(f\"Oh no! The '{info.name}' service is running!\")\n", + "\n", + "\n", + "def runtime_info_printing_service(_, __, info: ServiceRuntimeInfo):\n", + " logger.info(\n", + " f\"Service '{info.name}' runtime execution info:\"\n", + " f\"{info.model_dump_json(indent=4, default=str)}\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8ecc22ee", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:37.443560Z", + "iopub.status.busy": "2023-11-21T17:07:37.443143Z", + "iopub.status.idle": "2023-11-21T17:07:37.448125Z", + "shell.execute_reply": "2023-11-21T17:07:37.447569Z" + } + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " [\n", + " simple_service, # This simple service\n", + " # will be named `simple_service_0`\n", + " simple_service, # This simple service\n", + " # will be named `simple_service_1`\n", + " ], # Despite this is the unnamed service group in the root\n", + " # service group, it will be named `service_group_0`\n", + " ACTOR,\n", + " ServiceGroup(\n", + " name=\"named_group\",\n", + " components=[\n", + " Service(\n", + " handler=simple_service,\n", + " start_condition=all_condition(\n", + " service_successful_condition(\n", + " \".pipeline.service_group_0.simple_service_0\"\n", + " ),\n", + " service_successful_condition(\n", + " \".pipeline.service_group_0.simple_service_1\"\n", + " ),\n", + " ), # Alternative:\n", + " # service_successful_condition(\".pipeline.service_group_0\")\n", + " name=\"running_service\",\n", + " ), # This simple service will be named `running_service`,\n", + " # because its name is manually overridden\n", + " Service(\n", + " handler=never_running_service,\n", + " start_condition=not_condition(\n", + " service_successful_condition(\n", + " \".pipeline.named_group.running_service\"\n", + " )\n", + " ),\n", + " ),\n", + " ],\n", + " ),\n", + " runtime_info_printing_service,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f508d559", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:37.451104Z", + "iopub.status.busy": "2023-11-21T17:07:37.450546Z", + "iopub.status.idle": "2023-11-21T17:07:37.472363Z", + "shell.execute_reply": "2023-11-21T17:07:37.471737Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Service 'runtime_info_printing_service_0' execution failed!\n", + "model_dump_json() got an unexpected keyword argument 'default'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Service 'runtime_info_printing_service_0' execution failed!\n", + "model_dump_json() got an unexpected keyword argument 'default'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Service 'runtime_info_printing_service_0' execution failed!\n", + "model_dump_json() got an unexpected keyword argument 'default'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Service 'runtime_info_printing_service_0' execution failed!\n", + "model_dump_json() got an unexpected keyword argument 'default'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Service 'runtime_info_printing_service_0' execution failed!\n", + "model_dump_json() got an unexpected keyword argument 'default'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " logger.info(f\"Pipeline structure:\\n{pipeline.pretty_format()}\")\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.ipynb new file mode 100644 index 0000000000..5094b61fc2 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.ipynb @@ -0,0 +1,188 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5a067bcb", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 5. Asynchronous groups and services (basic)\n", + "\n", + "The following tutorial shows `pipeline` asynchronous\n", + "service and service group usage.\n", + "\n", + "Here, [ServiceGroup](../apiref/dff.pipeline.service.group.rst#dff.pipeline.service.group.ServiceGroup)s\n", + "are shown for advanced and asynchronous data pre- and postprocessing." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "fa1ee872", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:39.408679Z", + "iopub.status.busy": "2023-11-21T17:07:39.408138Z", + "iopub.status.idle": "2023-11-21T17:07:41.810491Z", + "shell.execute_reply": "2023-11-21T17:07:41.809696Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5e1d4aa7", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:41.813698Z", + "iopub.status.busy": "2023-11-21T17:07:41.813168Z", + "iopub.status.idle": "2023-11-21T17:07:42.570110Z", + "shell.execute_reply": "2023-11-21T17:07:42.569463Z" + } + }, + "outputs": [], + "source": [ + "import asyncio\n", + "\n", + "from dff.pipeline import Pipeline, ACTOR\n", + "\n", + "from dff.utils.testing.common import (\n", + " is_interactive_mode,\n", + " check_happy_path,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT" + ] + }, + { + "cell_type": "markdown", + "id": "984cae58", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "Services and service groups can be synchronous and asynchronous.\n", + "In synchronous service groups services are executed consequently.\n", + "In asynchronous service groups all services are executed simultaneously.\n", + "\n", + "Service can be asynchronous if its handler is an async function.\n", + "Service group can be asynchronous if all services\n", + "and service groups inside it are asynchronous.\n", + "\n", + "Here there is an asynchronous service group, that contains 10 services,\n", + "each of them should sleep for 0.01 of a second.\n", + "However, as the group is asynchronous,\n", + "it is being executed for 0.01 of a second in total.\n", + "Service group `pipeline` can't be asynchronous because `actor` is synchronous." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8d66eab0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:42.573600Z", + "iopub.status.busy": "2023-11-21T17:07:42.572994Z", + "iopub.status.idle": "2023-11-21T17:07:42.577599Z", + "shell.execute_reply": "2023-11-21T17:07:42.576824Z" + } + }, + "outputs": [], + "source": [ + "async def time_consuming_service(_):\n", + " await asyncio.sleep(0.01)\n", + "\n", + "\n", + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " [time_consuming_service for _ in range(0, 10)],\n", + " ACTOR,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6b57f053", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:42.580344Z", + "iopub.status.busy": "2023-11-21T17:07:42.580135Z", + "iopub.status.idle": "2023-11-21T17:07:42.652180Z", + "shell.execute_reply": "2023-11-21T17:07:42.651406Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.ipynb new file mode 100644 index 0000000000..47bd6e7ee4 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.ipynb @@ -0,0 +1,313 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a963459b", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 5. Asynchronous groups and services (full)\n", + "\n", + "The following tutorial shows `pipeline`\n", + "asynchronous service and service group usage.\n", + "\n", + "This tutorial is a more advanced version of the\n", + "[previous tutorial](../tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.py)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "cdf3df99", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:44.637150Z", + "iopub.status.busy": "2023-11-21T17:07:44.636936Z", + "iopub.status.idle": "2023-11-21T17:07:46.977377Z", + "shell.execute_reply": "2023-11-21T17:07:46.976504Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "865bbfc6", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:46.980187Z", + "iopub.status.busy": "2023-11-21T17:07:46.979972Z", + "iopub.status.idle": "2023-11-21T17:07:47.718259Z", + "shell.execute_reply": "2023-11-21T17:07:47.717527Z" + } + }, + "outputs": [], + "source": [ + "import asyncio\n", + "import json\n", + "import logging\n", + "import urllib.request\n", + "\n", + "from dff.script import Context\n", + "\n", + "from dff.pipeline import ServiceGroup, Pipeline, ServiceRuntimeInfo, ACTOR\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "a9f1b0ed", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "Services and service groups can be synchronous and asynchronous.\n", + "In synchronous service groups services are executed consequently,\n", + " some of them (`ACTOR`) can even return `Context` object,\n", + " modifying it.\n", + "In asynchronous service groups all services\n", + " are executed simultaneously and should not return anything,\n", + " neither modify Context.\n", + "\n", + "To become asynchronous service or service group\n", + " should _be able_ to be asynchronous\n", + " and should not be marked synchronous.\n", + "Service can be asynchronous if its handler is an async function.\n", + "Service group can be asynchronous if all services\n", + "and service groups inside it are asynchronous.\n", + "If service or service group can be asynchronous\n", + "the `asynchronous` constructor parameter is checked.\n", + "If the parameter is not set,\n", + "the service becomes asynchronous, and if set, it is used instead.\n", + "If service can not be asynchronous,\n", + "but is marked asynchronous, an exception is thrown.\n", + "NB! ACTOR service is always synchronous.\n", + "\n", + "The timeout field only works for asynchronous services and service groups.\n", + "If service execution takes more time than timeout,\n", + "it is aborted and marked as failed.\n", + "\n", + "Pipeline `optimization_warnings` argument can be used to\n", + " display optimization warnings during pipeline construction.\n", + "Generally for optimization purposes asynchronous\n", + " services should be combined into asynchronous\n", + " groups to run simultaneously.\n", + "Synchronous services should be expelled from (mostly) asynchronous groups.\n", + "\n", + "Here service group `balanced_group` can be asynchronous,\n", + " however it is requested to be synchronous,\n", + " so its services are executed consequently.\n", + "Service group `service_group_0` is asynchronous,\n", + " it doesn't run out of timeout of 0.02 seconds,\n", + " however contains 6 time consuming services,\n", + " each of them sleeps for 0.01 of a second.\n", + "Service group `service_group_1` is also asynchronous,\n", + "it logs HTTPS requests (from 1 to 15),\n", + " running simultaneously, in random order.\n", + "Service group `pipeline` can't be asynchronous because\n", + "`balanced_group` and ACTOR are synchronous." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "cd9fa0b1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:47.721625Z", + "iopub.status.busy": "2023-11-21T17:07:47.721132Z", + "iopub.status.idle": "2023-11-21T17:07:47.727452Z", + "shell.execute_reply": "2023-11-21T17:07:47.726840Z" + } + }, + "outputs": [], + "source": [ + "async def simple_asynchronous_service(_, __, info: ServiceRuntimeInfo):\n", + " logger.info(f\"Service '{info.name}' is running\")\n", + "\n", + "\n", + "async def time_consuming_service(_):\n", + " await asyncio.sleep(0.01)\n", + "\n", + "\n", + "def meta_web_querying_service(\n", + " photo_number: int,\n", + "): # This function returns services, a service factory\n", + " async def web_querying_service(ctx: Context, _, info: ServiceRuntimeInfo):\n", + " if ctx.misc.get(\"web_query\", None) is None:\n", + " ctx.misc[\"web_query\"] = {}\n", + " with urllib.request.urlopen(\n", + " f\"https://jsonplaceholder.typicode.com/photos/{photo_number}\"\n", + " ) as webpage:\n", + " web_content = webpage.read().decode(\n", + " webpage.headers.get_content_charset()\n", + " )\n", + " ctx.misc[\"web_query\"].update(\n", + " {\n", + " f\"{ctx.last_request}\"\n", + " f\":photo_number_{photo_number}\": json.loads(web_content)[\n", + " \"title\"\n", + " ]\n", + " }\n", + " )\n", + " logger.info(f\"Service '{info.name}' has completed HTTPS request\")\n", + "\n", + " return web_querying_service\n", + "\n", + "\n", + "def context_printing_service(ctx: Context):\n", + " logger.info(f\"Context misc: {json.dumps(ctx.misc, indent=4, default=str)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "74c046cb", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:47.730309Z", + "iopub.status.busy": "2023-11-21T17:07:47.729943Z", + "iopub.status.idle": "2023-11-21T17:07:47.734780Z", + "shell.execute_reply": "2023-11-21T17:07:47.734139Z" + } + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"optimization_warnings\": True,\n", + " # There are no warnings - pipeline is well-optimized\n", + " \"components\": [\n", + " ServiceGroup(\n", + " name=\"balanced_group\",\n", + " asynchronous=False,\n", + " components=[\n", + " simple_asynchronous_service,\n", + " ServiceGroup(\n", + " timeout=0.02,\n", + " components=[time_consuming_service for _ in range(0, 6)],\n", + " ),\n", + " simple_asynchronous_service,\n", + " ],\n", + " ),\n", + " ACTOR,\n", + " [meta_web_querying_service(photo) for photo in range(1, 16)],\n", + " context_printing_service,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "3a6c28e3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:47.737476Z", + "iopub.status.busy": "2023-11-21T17:07:47.737083Z", + "iopub.status.idle": "2023-11-21T17:07:55.470353Z", + "shell.execute_reply": "2023-11-21T17:07:55.469639Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_basic.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_basic.ipynb new file mode 100644 index 0000000000..98a22ba28f --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_basic.ipynb @@ -0,0 +1,258 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4d164bb5", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 6. Extra Handlers (basic)\n", + "\n", + "The following tutorial shows extra handlers possibilities and use cases.\n", + "\n", + "Here, extra handlers [BeforeHandler](../apiref/dff.pipeline.service.extra.rst#dff.pipeline.service.extra.BeforeHandler)\n", + "and [AfterHandler](../apiref/dff.pipeline.service.extra.rst#dff.pipeline.service.extra.AfterHandler)\n", + "are shown as additional means of data processing, attached to services." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3f5f4950", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:57.376334Z", + "iopub.status.busy": "2023-11-21T17:07:57.375825Z", + "iopub.status.idle": "2023-11-21T17:07:59.733026Z", + "shell.execute_reply": "2023-11-21T17:07:59.732155Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "198cf272", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:07:59.736072Z", + "iopub.status.busy": "2023-11-21T17:07:59.735673Z", + "iopub.status.idle": "2023-11-21T17:08:00.491076Z", + "shell.execute_reply": "2023-11-21T17:08:00.490270Z" + } + }, + "outputs": [], + "source": [ + "import asyncio\n", + "import json\n", + "import logging\n", + "import random\n", + "from datetime import datetime\n", + "\n", + "from dff.script import Context\n", + "\n", + "from dff.pipeline import Pipeline, ServiceGroup, ExtraHandlerRuntimeInfo, ACTOR\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "c800eb21", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Extra handlers are additional function\n", + " lists (before-functions and/or after-functions)\n", + " that can be added to any `pipeline` components (service and service groups).\n", + "Extra handlers main purpose should be service\n", + "and service groups statistics collection.\n", + "Extra handlers can be attached to pipeline component using\n", + "`before_handler` and `after_handler` constructor parameter.\n", + "\n", + "Here 5 `heavy_service`s are run in single asynchronous service group.\n", + "Each of them sleeps for random amount of seconds (between 0 and 0.05).\n", + "To each of them (as well as to group)\n", + " time measurement extra handler is attached,\n", + " that writes execution time to `ctx.misc`.\n", + "In the end `ctx.misc` is logged to info channel." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ca53fcb3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:00.495154Z", + "iopub.status.busy": "2023-11-21T17:08:00.494533Z", + "iopub.status.idle": "2023-11-21T17:08:00.500089Z", + "shell.execute_reply": "2023-11-21T17:08:00.499449Z" + } + }, + "outputs": [], + "source": [ + "def collect_timestamp_before(ctx: Context, _, info: ExtraHandlerRuntimeInfo):\n", + " ctx.misc.update({f\"{info.component.name}\": datetime.now()})\n", + "\n", + "\n", + "def collect_timestamp_after(ctx: Context, _, info: ExtraHandlerRuntimeInfo):\n", + " ctx.misc.update(\n", + " {\n", + " f\"{info.component.name}\": datetime.now()\n", + " - ctx.misc[f\"{info.component.name}\"]\n", + " }\n", + " )\n", + "\n", + "\n", + "async def heavy_service(_):\n", + " await asyncio.sleep(random.randint(0, 5) / 100)\n", + "\n", + "\n", + "def logging_service(ctx: Context):\n", + " logger.info(f\"Context misc: {json.dumps(ctx.misc, indent=4, default=str)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e3ff23e6", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:00.503063Z", + "iopub.status.busy": "2023-11-21T17:08:00.502480Z", + "iopub.status.idle": "2023-11-21T17:08:00.508225Z", + "shell.execute_reply": "2023-11-21T17:08:00.507604Z" + } + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " ServiceGroup(\n", + " before_handler=[collect_timestamp_before],\n", + " after_handler=[collect_timestamp_after],\n", + " components=[\n", + " {\n", + " \"handler\": heavy_service,\n", + " \"before_handler\": [collect_timestamp_before],\n", + " \"after_handler\": [collect_timestamp_after],\n", + " },\n", + " {\n", + " \"handler\": heavy_service,\n", + " \"before_handler\": [collect_timestamp_before],\n", + " \"after_handler\": [collect_timestamp_after],\n", + " },\n", + " {\n", + " \"handler\": heavy_service,\n", + " \"before_handler\": [collect_timestamp_before],\n", + " \"after_handler\": [collect_timestamp_after],\n", + " },\n", + " {\n", + " \"handler\": heavy_service,\n", + " \"before_handler\": [collect_timestamp_before],\n", + " \"after_handler\": [collect_timestamp_after],\n", + " },\n", + " {\n", + " \"handler\": heavy_service,\n", + " \"before_handler\": [collect_timestamp_before],\n", + " \"after_handler\": [collect_timestamp_after],\n", + " },\n", + " ],\n", + " ),\n", + " ACTOR,\n", + " logging_service,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c582b9ed", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:00.510869Z", + "iopub.status.busy": "2023-11-21T17:08:00.510491Z", + "iopub.status.idle": "2023-11-21T17:08:00.731781Z", + "shell.execute_reply": "2023-11-21T17:08:00.730977Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline(**pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_full.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_full.ipynb new file mode 100644 index 0000000000..5be80b7b8d --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_full.ipynb @@ -0,0 +1,392 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7dd4d461", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 6. Extra Handlers (full)\n", + "\n", + "The following tutorial shows extra handlers possibilities and use cases.\n", + "\n", + "This tutorial is a more advanced version of the\n", + "[previous tutorial](../tutorials/tutorials.pipeline.6_extra_handlers_basic.py)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "8112d1fd", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:02.704731Z", + "iopub.status.busy": "2023-11-21T17:08:02.704323Z", + "iopub.status.idle": "2023-11-21T17:08:05.182635Z", + "shell.execute_reply": "2023-11-21T17:08:05.181815Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff psutil" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7156484a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:05.185640Z", + "iopub.status.busy": "2023-11-21T17:08:05.185420Z", + "iopub.status.idle": "2023-11-21T17:08:05.964016Z", + "shell.execute_reply": "2023-11-21T17:08:05.963387Z" + } + }, + "outputs": [], + "source": [ + "import json\n", + "import logging\n", + "import random\n", + "from datetime import datetime\n", + "\n", + "import psutil\n", + "from dff.script import Context\n", + "\n", + "from dff.pipeline import (\n", + " Pipeline,\n", + " ServiceGroup,\n", + " to_service,\n", + " ExtraHandlerRuntimeInfo,\n", + " ServiceRuntimeInfo,\n", + " ACTOR,\n", + ")\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "61d46bbe", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Extra handlers are additional function lists\n", + " (before-functions and/or after-functions)\n", + " that can be added to any pipeline components (service and service groups).\n", + "Despite extra handlers can be used to prepare data for certain services,\n", + "that require some very special input type,\n", + " in most cases services should be preferred for that purpose.\n", + "Extra handlers can be asynchronous,\n", + "however there's no statistics that can be collected about them.\n", + "So their main purpose should be _really_ lightweight data conversion (etc.)\n", + " operations or service and service groups statistics collection.\n", + "\n", + "Extra handlers have the following constructor arguments / parameters:\n", + "\n", + "* `functions` - Functions that will be run.\n", + "* `timeout` - Timeout for that extra handler\n", + " (for asynchronous extra handlers only).\n", + "* `asynchronous` - Whether this extra handler should be asynchronous or not.\n", + "NB! Extra handlers don't have execution state,\n", + "so their names shouldn't appear in built-in condition functions.\n", + "\n", + "Extra handlers callable signature can be one of the following:\n", + "`[ctx]`, `[ctx, pipeline]` or `[ctx, pipeline, info]`, where:\n", + "\n", + "* `ctx` - `Context` of the current dialog.\n", + "* `pipeline` - The current pipeline.\n", + "* `info` - Dictionary, containing information about current extra handler\n", + " and pipeline execution state (see tutorial 4).\n", + "\n", + "Extra handlers can be attached to pipeline component in a few different ways:\n", + "\n", + "1. Directly in constructor - by adding extra handlers to\n", + " `before_handler` or `after_handler` constructor parameter.\n", + "2. (Services only) `to_service` decorator -\n", + " transforms function to service with extra handlers\n", + " from `before_handler` and `after_handler` arguments.\n", + "\n", + "Here 5 `heavy_service`s fill big amounts of memory with random numbers.\n", + "Their runtime stats are captured and displayed by extra services,\n", + "`time_measure_handler` measures time and\n", + "`ram_measure_handler` - allocated memory.\n", + "Another `time_measure_handler` measures total\n", + "amount of time taken by all of them (combined in service group).\n", + "`logging_service` logs stats, however it can use string arguments only,\n", + " so `json_encoder_handler` is applied to encode stats to JSON." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d598e0cb", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:05.967743Z", + "iopub.status.busy": "2023-11-21T17:08:05.967027Z", + "iopub.status.idle": "2023-11-21T17:08:05.975164Z", + "shell.execute_reply": "2023-11-21T17:08:05.974442Z" + } + }, + "outputs": [], + "source": [ + "def get_extra_handler_misc_field(\n", + " info: ExtraHandlerRuntimeInfo, postfix: str\n", + ") -> str: # This method calculates `misc` field name dedicated to extra handler\n", + " # based on its and its service name\n", + " return f\"{info.component.name}-{postfix}\"\n", + "\n", + "\n", + "def time_measure_before_handler(ctx, _, info):\n", + " ctx.misc.update(\n", + " {get_extra_handler_misc_field(info, \"time\"): datetime.now()}\n", + " )\n", + "\n", + "\n", + "def time_measure_after_handler(ctx, _, info):\n", + " ctx.misc.update(\n", + " {\n", + " get_extra_handler_misc_field(info, \"time\"): datetime.now()\n", + " - ctx.misc[get_extra_handler_misc_field(info, \"time\")]\n", + " }\n", + " )\n", + "\n", + "\n", + "def ram_measure_before_handler(ctx, _, info):\n", + " ctx.misc.update(\n", + " {\n", + " get_extra_handler_misc_field(\n", + " info, \"ram\"\n", + " ): psutil.virtual_memory().available\n", + " }\n", + " )\n", + "\n", + "\n", + "def ram_measure_after_handler(ctx, _, info):\n", + " ctx.misc.update(\n", + " {\n", + " get_extra_handler_misc_field(info, \"ram\"): ctx.misc[\n", + " get_extra_handler_misc_field(info, \"ram\")\n", + " ]\n", + " - psutil.virtual_memory().available\n", + " }\n", + " )\n", + "\n", + "\n", + "def json_converter_before_handler(ctx, _, info):\n", + " ctx.misc.update(\n", + " {\n", + " get_extra_handler_misc_field(info, \"str\"): json.dumps(\n", + " ctx.misc, indent=4, default=str\n", + " )\n", + " }\n", + " )\n", + "\n", + "\n", + "def json_converter_after_handler(ctx, _, info):\n", + " ctx.misc.pop(get_extra_handler_misc_field(info, \"str\"))\n", + "\n", + "\n", + "memory_heap = dict() # This object plays part of some memory heap" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1d545b72", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:05.978364Z", + "iopub.status.busy": "2023-11-21T17:08:05.977859Z", + "iopub.status.idle": "2023-11-21T17:08:05.984758Z", + "shell.execute_reply": "2023-11-21T17:08:05.984068Z" + } + }, + "outputs": [], + "source": [ + "@to_service(\n", + " before_handler=[time_measure_before_handler, ram_measure_before_handler],\n", + " after_handler=[time_measure_after_handler, ram_measure_after_handler],\n", + ")\n", + "def heavy_service(ctx: Context):\n", + " memory_heap[ctx.last_request.text] = [\n", + " random.randint(0, num) for num in range(0, 1000)\n", + " ]\n", + "\n", + "\n", + "@to_service(\n", + " before_handler=[json_converter_before_handler],\n", + " after_handler=[json_converter_after_handler],\n", + ")\n", + "def logging_service(ctx: Context, _, info: ServiceRuntimeInfo):\n", + " str_misc = ctx.misc[f\"{info.name}-str\"]\n", + " assert isinstance(str_misc, str)\n", + " print(f\"Stringified misc: {str_misc}\")\n", + "\n", + "\n", + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " ServiceGroup(\n", + " before_handler=[time_measure_before_handler],\n", + " after_handler=[time_measure_after_handler],\n", + " components=[heavy_service for _ in range(0, 5)],\n", + " ),\n", + " ACTOR,\n", + " logging_service,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "ed69af40", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:05.987679Z", + "iopub.status.busy": "2023-11-21T17:08:05.987087Z", + "iopub.status.idle": "2023-11-21T17:08:06.029324Z", + "shell.execute_reply": "2023-11-21T17:08:06.028479Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Stringified misc: {\n", + " \"service_group_0-time\": \"0:00:00.006418\",\n", + " \"heavy_service_0-time\": \"0:00:00.001379\",\n", + " \"heavy_service_0-ram\": 0,\n", + " \"heavy_service_1-time\": \"0:00:00.001051\",\n", + " \"heavy_service_1-ram\": 0,\n", + " \"heavy_service_2-time\": \"0:00:00.000965\",\n", + " \"heavy_service_2-ram\": 0,\n", + " \"heavy_service_3-time\": \"0:00:00.000966\",\n", + " \"heavy_service_3-ram\": 0,\n", + " \"heavy_service_4-time\": \"0:00:00.000968\",\n", + " \"heavy_service_4-ram\": 0\n", + "}\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "Stringified misc: {\n", + " \"service_group_0-time\": \"0:00:00.005901\",\n", + " \"heavy_service_0-time\": \"0:00:00.000981\",\n", + " \"heavy_service_0-ram\": 0,\n", + " \"heavy_service_1-time\": \"0:00:00.001060\",\n", + " \"heavy_service_1-ram\": 0,\n", + " \"heavy_service_2-time\": \"0:00:00.000954\",\n", + " \"heavy_service_2-ram\": 229376,\n", + " \"heavy_service_3-time\": \"0:00:00.000951\",\n", + " \"heavy_service_3-ram\": 0,\n", + " \"heavy_service_4-time\": \"0:00:00.000912\",\n", + " \"heavy_service_4-ram\": 0\n", + "}\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "Stringified misc: {\n", + " \"service_group_0-time\": \"0:00:00.005604\",\n", + " \"heavy_service_0-time\": \"0:00:00.000919\",\n", + " \"heavy_service_0-ram\": 0,\n", + " \"heavy_service_1-time\": \"0:00:00.000933\",\n", + " \"heavy_service_1-ram\": 0,\n", + " \"heavy_service_2-time\": \"0:00:00.000952\",\n", + " \"heavy_service_2-ram\": 0,\n", + " \"heavy_service_3-time\": \"0:00:00.000942\",\n", + " \"heavy_service_3-ram\": 0,\n", + " \"heavy_service_4-time\": \"0:00:00.000930\",\n", + " \"heavy_service_4-ram\": 0\n", + "}\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "Stringified misc: {\n", + " \"service_group_0-time\": \"0:00:00.005815\",\n", + " \"heavy_service_0-time\": \"0:00:00.001003\",\n", + " \"heavy_service_0-ram\": 0,\n", + " \"heavy_service_1-time\": \"0:00:00.000972\",\n", + " \"heavy_service_1-ram\": 0,\n", + " \"heavy_service_2-time\": \"0:00:00.000938\",\n", + " \"heavy_service_2-ram\": 0,\n", + " \"heavy_service_3-time\": \"0:00:00.001008\",\n", + " \"heavy_service_3-ram\": 0,\n", + " \"heavy_service_4-time\": \"0:00:00.000941\",\n", + " \"heavy_service_4-ram\": 0\n", + "}\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "Stringified misc: {\n", + " \"service_group_0-time\": \"0:00:00.005796\",\n", + " \"heavy_service_0-time\": \"0:00:00.001019\",\n", + " \"heavy_service_0-ram\": 0,\n", + " \"heavy_service_1-time\": \"0:00:00.001000\",\n", + " \"heavy_service_1-ram\": 0,\n", + " \"heavy_service_2-time\": \"0:00:00.000940\",\n", + " \"heavy_service_2-ram\": 0,\n", + " \"heavy_service_3-time\": \"0:00:00.000934\",\n", + " \"heavy_service_3-ram\": 0,\n", + " \"heavy_service_4-time\": \"0:00:00.000923\",\n", + " \"heavy_service_4-ram\": 0\n", + "}\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline(**pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.ipynb new file mode 100644 index 0000000000..8b66109c67 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.ipynb @@ -0,0 +1,287 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a80211d6", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 7. Extra Handlers and Extensions\n", + "\n", + "The following tutorial shows how pipeline can be extended\n", + "by global extra handlers and custom functions.\n", + "\n", + "Here, [add_global_handler](../apiref/dff.pipeline.pipeline.pipeline.rst#dff.pipeline.pipeline.pipeline.Pipeline.add_global_handler)\n", + "function is shown, that can be used to add extra handlers before\n", + "and/or after all pipeline services." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "dd4cd726", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:07.905743Z", + "iopub.status.busy": "2023-11-21T17:08:07.905157Z", + "iopub.status.idle": "2023-11-21T17:08:10.363123Z", + "shell.execute_reply": "2023-11-21T17:08:10.362267Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "49dfae28", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:10.366384Z", + "iopub.status.busy": "2023-11-21T17:08:10.365950Z", + "iopub.status.idle": "2023-11-21T17:08:11.128681Z", + "shell.execute_reply": "2023-11-21T17:08:11.127788Z" + } + }, + "outputs": [], + "source": [ + "import asyncio\n", + "import json\n", + "import logging\n", + "import random\n", + "from datetime import datetime\n", + "\n", + "from dff.pipeline import (\n", + " Pipeline,\n", + " ComponentExecutionState,\n", + " GlobalExtraHandlerType,\n", + " ExtraHandlerRuntimeInfo,\n", + " ServiceRuntimeInfo,\n", + " ACTOR,\n", + ")\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "ccbae5a3", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Pipeline functionality can be extended by global extra handlers.\n", + "Global extra handlers are special extra handlers\n", + " that are called on some stages of pipeline execution.\n", + "There are 4 types of global extra handlers:\n", + "\n", + " * `BEFORE_ALL` is called before pipeline execution.\n", + " * `BEFORE` is called before each service and service group execution.\n", + " * `AFTER` is called after each service and service group execution.\n", + " * `AFTER_ALL` is called after pipeline execution.\n", + "\n", + "Global extra handlers have the same signature as regular extra handlers.\n", + "Actually `BEFORE_ALL` and `AFTER_ALL`\n", + " are attached to root service group named 'pipeline',\n", + " so they return its runtime info\n", + "\n", + "All extra handlers warnings (see tutorial 7)\n", + "are applicable to global extra handlers.\n", + "Pipeline `add_global_extra_handler` function is used to register\n", + " global extra handlers. It accepts following arguments:\n", + "\n", + "* `global_extra_handler_type` (required) - A `GlobalExtraHandlerType` instance,\n", + " indicates extra handler type to add.\n", + "* `extra_handler` (required) - The extra handler function itself.\n", + "* `whitelist` - An optional list of paths, if it's not `None`\n", + " the extra handlers will be applied to\n", + " specified pipeline components only.\n", + "* `blacklist` - An optional list of paths, if it's not `None`\n", + " the extra handlers will be applied to\n", + " all pipeline components except specified.\n", + "\n", + "Here basic functionality of `df-node-stats` library is emulated.\n", + "Information about pipeline component execution time and\n", + " result is collected and printed to info log after pipeline execution.\n", + "Pipeline consists of actor and 25 `long_service`s\n", + "that run random amount of time between 0 and 0.05 seconds." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b1d10321", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:11.132606Z", + "iopub.status.busy": "2023-11-21T17:08:11.132008Z", + "iopub.status.idle": "2023-11-21T17:08:11.139668Z", + "shell.execute_reply": "2023-11-21T17:08:11.138918Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "start_times = dict() # Place to temporarily store service start times\n", + "pipeline_info = dict() # Pipeline information storage\n", + "\n", + "\n", + "def before_all(_, __, info: ExtraHandlerRuntimeInfo):\n", + " global start_times, pipeline_info\n", + " now = datetime.now()\n", + " pipeline_info = {\"start_time\": now}\n", + " start_times = {info.component.path: now}\n", + "\n", + "\n", + "def before(_, __, info: ExtraHandlerRuntimeInfo):\n", + " start_times.update({info.component.path: datetime.now()})\n", + "\n", + "\n", + "def after(_, __, info: ExtraHandlerRuntimeInfo):\n", + " start_time = start_times[info.component.path]\n", + " pipeline_info.update(\n", + " {\n", + " f\"{info.component.path}_duration\": datetime.now() - start_time,\n", + " f\"{info.component.path}_success\": info.component.execution_state.get(\n", + " info.component.path, ComponentExecutionState.NOT_RUN\n", + " ),\n", + " }\n", + " )\n", + "\n", + "\n", + "def after_all(_, __, info: ExtraHandlerRuntimeInfo):\n", + " pipeline_info.update(\n", + " {\"total_time\": datetime.now() - start_times[info.component.path]}\n", + " )\n", + " logger.info(\n", + " f\"Pipeline stats: {json.dumps(pipeline_info, indent=4, default=str)}\"\n", + " )\n", + "\n", + "\n", + "async def long_service(_, __, info: ServiceRuntimeInfo):\n", + " timeout = random.randint(0, 5) / 100\n", + " logger.info(f\"Service {info.name} is going to sleep for {timeout} seconds.\")\n", + " await asyncio.sleep(timeout)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e390b93f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:11.143009Z", + "iopub.status.busy": "2023-11-21T17:08:11.142220Z", + "iopub.status.idle": "2023-11-21T17:08:11.146500Z", + "shell.execute_reply": "2023-11-21T17:08:11.145846Z" + } + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " [long_service for _ in range(0, 25)],\n", + " ACTOR,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "ec003906", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:11.149504Z", + "iopub.status.busy": "2023-11-21T17:08:11.148977Z", + "iopub.status.idle": "2023-11-21T17:08:11.452726Z", + "shell.execute_reply": "2023-11-21T17:08:11.451908Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline(**pipeline_dict)\n", + "\n", + "pipeline.add_global_handler(GlobalExtraHandlerType.BEFORE_ALL, before_all)\n", + "pipeline.add_global_handler(GlobalExtraHandlerType.BEFORE, before)\n", + "pipeline.add_global_handler(GlobalExtraHandlerType.AFTER, after)\n", + "pipeline.add_global_handler(GlobalExtraHandlerType.AFTER_ALL, after_all)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.1_basics.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.1_basics.ipynb new file mode 100644 index 0000000000..f4a13f0886 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.1_basics.ipynb @@ -0,0 +1,307 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "db04d59b", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 1. Basics\n", + "\n", + "This notebook shows basic tutorial of creating a simple dialog bot (agent).\n", + "\n", + "Here, basic usege of [Pipeline](../apiref/dff.pipeline.pipeline.pipeline.rst#dff.pipeline.pipeline.pipeline.Pipeline)\n", + "primitive is shown: its' creation with\n", + "[from_script](../apiref/dff.pipeline.pipeline.pipeline.rst#dff.pipeline.pipeline.pipeline.Pipeline.from_script)\n", + "and execution.\n", + "\n", + "Additionally, function [check_happy_path](../apiref/dff.utils.testing.common.rst#dff.utils.testing.common.check_happy_path)\n", + "that can be used for Pipeline testing is presented.\n", + "\n", + "Let's do all the necessary imports from DFF:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e7c66f23", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:13.461047Z", + "iopub.status.busy": "2023-11-21T17:08:13.460435Z", + "iopub.status.idle": "2023-11-21T17:08:15.871017Z", + "shell.execute_reply": "2023-11-21T17:08:15.870213Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "18d46e83", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:15.874054Z", + "iopub.status.busy": "2023-11-21T17:08:15.873597Z", + "iopub.status.idle": "2023-11-21T17:08:16.608828Z", + "shell.execute_reply": "2023-11-21T17:08:16.608122Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "from dff.script import TRANSITIONS, RESPONSE, Message\n", + "from dff.pipeline import Pipeline\n", + "import dff.script.conditions as cnd\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "252b9220", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "First of all, to create a dialog agent, we need to create a dialog script.\n", + "Below script means a dialog script.\n", + "A script is a dictionary, where the keys are the names of the flows.\n", + "A script can contain multiple scripts, which is needed in order to divide\n", + "a dialog into sub-dialogs and process them separately.\n", + "For example, the separation can be tied to the topic of the dialog.\n", + "In this tutorial there is one flow called `greeting_flow`.\n", + "\n", + "Flow describes a sub-dialog using linked nodes.\n", + "Each node has the keywords `RESPONSE` and `TRANSITIONS`.\n", + "\n", + "* `RESPONSE` contains the response\n", + " that the agent will return from the current node.\n", + "* `TRANSITIONS` describes transitions from the\n", + " current node to another nodes. This is a dictionary,\n", + " where keys are names of the nodes and\n", + " values are conditions of transition to them." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8d95fd32", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:16.612462Z", + "iopub.status.busy": "2023-11-21T17:08:16.612118Z", + "iopub.status.idle": "2023-11-21T17:08:16.621633Z", + "shell.execute_reply": "2023-11-21T17:08:16.620963Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"greeting_flow\": {\n", + " \"start_node\": { # This is the initial node,\n", + " # it doesn't contain a `RESPONSE`.\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " # If \"Hi\" == request of the user then we make the transition.\n", + " },\n", + " \"node1\": {\n", + " RESPONSE: Message(\n", + " text=\"Hi, how are you?\"\n", + " ), # When the agent enters node1,\n", + " # return \"Hi, how are you?\".\n", + " TRANSITIONS: {\n", + " \"node2\": cnd.exact_match(Message(text=\"I'm fine, how are you?\"))\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " \"node3\": cnd.exact_match(\n", + " Message(text=\"Let's talk about music.\")\n", + " )\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about music now.\"),\n", + " TRANSITIONS: {\n", + " \"node4\": cnd.exact_match(Message(text=\"Ok, goodbye.\"))\n", + " },\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"Bye\"),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " \"fallback_node\": {\n", + " # We get to this node if the conditions\n", + " # for switching to other nodes are not performed.\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " }\n", + "}\n", + "\n", + "\n", + "happy_path = (\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(text=\"Hi, how are you?\"),\n", + " ), # start_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"Bye\")), # node3 -> node4\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, how are you?\")), # node4 -> node1\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")), # node1 -> fallback_node\n", + " (\n", + " Message(text=\"stop\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # fallback_node -> fallback_node\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(text=\"Hi, how are you?\"),\n", + " ), # fallback_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"Bye\")), # node3 -> node4\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "ad611d7c", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "A `Pipeline` is an object that processes user\n", + "inputs and returns responses.\n", + "To create the pipeline you need to pass the script (`toy_script`),\n", + "initial node (`start_label`) and\n", + "the node to which the default transition will take place\n", + "if none of the current conditions are met (`fallback_label`).\n", + "By default, if `fallback_label` is not set,\n", + "then its value becomes equal to `start_label`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "aef4e907", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:16.624605Z", + "iopub.status.busy": "2023-11-21T17:08:16.624181Z", + "iopub.status.idle": "2023-11-21T17:08:16.638292Z", + "shell.execute_reply": "2023-11-21T17:08:16.637617Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='Bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='Bye'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(\n", + " pipeline,\n", + " happy_path,\n", + " ) # This is a function for automatic tutorial\n", + " # running (testing tutorial) with `happy_path`.\n", + "\n", + " # Run tutorial in interactive mode if not in IPython env\n", + " # and if `DISABLE_INTERACTIVE_MODE` is not set.\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)\n", + " # This runs tutorial in interactive mode." + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.2_conditions.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.2_conditions.ipynb new file mode 100644 index 0000000000..d8a6b03330 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.2_conditions.ipynb @@ -0,0 +1,379 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "92597435", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 2. Conditions\n", + "\n", + "This tutorial shows different options for\n", + "setting transition conditions from one node to another.\n", + "\n", + "Here, [conditions](../apiref/dff.script.conditions.std_conditions.rst)\n", + "for script transitions are shown.\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "0e93d7a8", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:18.751843Z", + "iopub.status.busy": "2023-11-21T17:08:18.751186Z", + "iopub.status.idle": "2023-11-21T17:08:21.139345Z", + "shell.execute_reply": "2023-11-21T17:08:21.138530Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "10ce31ef", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:21.142392Z", + "iopub.status.busy": "2023-11-21T17:08:21.142105Z", + "iopub.status.idle": "2023-11-21T17:08:21.904007Z", + "shell.execute_reply": "2023-11-21T17:08:21.903370Z" + } + }, + "outputs": [], + "source": [ + "import re\n", + "\n", + "from dff.script import Context, TRANSITIONS, RESPONSE, Message\n", + "import dff.script.conditions as cnd\n", + "from dff.pipeline import Pipeline\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "448c6206", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "The transition condition is set by the function.\n", + "If this function returns the value `True`,\n", + "then the actor performs the corresponding transition.\n", + "Actor is responsible for processing user input and determining\n", + "the appropriate response based on the current state of the conversation and the script.\n", + "See tutorial 1 of pipeline (pipeline/1_basics) to learn more about Actor.\n", + "Condition functions have signature\n", + "\n", + " def func(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool\n", + "\n", + "Out of the box `dff.script.conditions` offers the\n", + " following options for setting conditions:\n", + "\n", + "* `exact_match` returns `True` if the user's request completely\n", + " matches the value passed to the function.\n", + "* `regexp` returns `True` if the pattern matches the user's request,\n", + " while the user's request must be a string.\n", + " `regexp` has same signature as `re.compile` function.\n", + "* `aggregate` returns `bool` value as\n", + " a result after aggregate by `aggregate_func`\n", + " for input sequence of conditions.\n", + " `aggregate_func == any` by default. `aggregate` has alias `agg`.\n", + "* `any` returns `True` if one element of input sequence of conditions is `True`.\n", + " `any(input_sequence)` is equivalent to\n", + " `aggregate(input sequence, aggregate_func=any)`.\n", + "* `all` returns `True` if all elements of input\n", + " sequence of conditions are `True`.\n", + " `all(input_sequence)` is equivalent to\n", + " `aggregate(input sequence, aggregate_func=all)`.\n", + "* `negation` returns negation of passed function. `negation` has alias `neg`.\n", + "* `has_last_labels` covered in the following examples.\n", + "* `true` returns `True`.\n", + "* `false` returns `False`.\n", + "\n", + "For example function\n", + "```\n", + "def always_true_condition(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool:\n", + " return True\n", + "```\n", + "always returns `True` and `always_true_condition` function\n", + "is the same as `dff.script.conditions.std_conditions.true()`.\n", + "\n", + "The functions to be used in the `toy_script` are declared here." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d903b748", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:21.907543Z", + "iopub.status.busy": "2023-11-21T17:08:21.906993Z", + "iopub.status.idle": "2023-11-21T17:08:21.912718Z", + "shell.execute_reply": "2023-11-21T17:08:21.912089Z" + } + }, + "outputs": [], + "source": [ + "def hi_lower_case_condition(ctx: Context, _: Pipeline, *args, **kwargs) -> bool:\n", + " request = ctx.last_request\n", + " # Returns True if `hi` in both uppercase and lowercase\n", + " # letters is contained in the user request.\n", + " if request is None or request.text is None:\n", + " return False\n", + " return \"hi\" in request.text.lower()\n", + "\n", + "\n", + "def complex_user_answer_condition(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + ") -> bool:\n", + " request = ctx.last_request\n", + " # The user request can be anything.\n", + " if request is None or request.misc is None:\n", + " return False\n", + " return {\"some_key\": \"some_value\"} == request.misc\n", + "\n", + "\n", + "def predetermined_condition(condition: bool):\n", + " # Wrapper for internal condition function.\n", + " def internal_condition_function(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + " ) -> bool:\n", + " # It always returns `condition`.\n", + " return condition\n", + "\n", + " return internal_condition_function" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "07d0f855", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:21.915205Z", + "iopub.status.busy": "2023-11-21T17:08:21.914897Z", + "iopub.status.idle": "2023-11-21T17:08:21.926350Z", + "shell.execute_reply": "2023-11-21T17:08:21.925651Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"greeting_flow\": {\n", + " \"start_node\": { # This is the initial node,\n", + " # it doesn't contain a `RESPONSE`.\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " # If \"Hi\" == request of user then we make the transition\n", + " },\n", + " \"node1\": {\n", + " RESPONSE: Message(text=\"Hi, how are you?\"),\n", + " TRANSITIONS: {\"node2\": cnd.regexp(r\".*how are you\", re.IGNORECASE)},\n", + " # pattern matching (precompiled)\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " \"node3\": cnd.all(\n", + " [cnd.regexp(r\"talk\"), cnd.regexp(r\"about.*music\")]\n", + " )\n", + " },\n", + " # Mix sequence of conditions by `cnd.all`.\n", + " # `all` is alias `aggregate` with\n", + " # `aggregate_func` == `all`.\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about music now.\"),\n", + " TRANSITIONS: {\"node4\": cnd.regexp(re.compile(r\"Ok, goodbye.\"))},\n", + " # pattern matching by precompiled pattern\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"bye\"),\n", + " TRANSITIONS: {\n", + " \"node1\": cnd.any(\n", + " [\n", + " hi_lower_case_condition,\n", + " cnd.exact_match(Message(text=\"hello\")),\n", + " ]\n", + " )\n", + " },\n", + " # Mix sequence of conditions by `cnd.any`.\n", + " # `any` is alias `aggregate` with\n", + " # `aggregate_func` == `any`.\n", + " },\n", + " \"fallback_node\": { # We get to this node\n", + " # if an error occurred while the agent was running.\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {\n", + " \"node1\": complex_user_answer_condition,\n", + " # The user request can be more than just a string.\n", + " # First we will check returned value of\n", + " # `complex_user_answer_condition`.\n", + " # If the value is `True` then we will go to `node1`.\n", + " # If the value is `False` then we will check a result of\n", + " # `predetermined_condition(True)` for `fallback_node`.\n", + " \"fallback_node\": predetermined_condition(\n", + " True\n", + " ), # or you can use `cnd.true()`\n", + " # Last condition function will return\n", + " # `true` and will repeat `fallback_node`\n", + " # if `complex_user_answer_condition` return `false`.\n", + " },\n", + " },\n", + " }\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(text=\"Hi, how are you?\"),\n", + " ), # start_node -> node1\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")), # node3 -> node4\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, how are you?\")), # node4 -> node1\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")), # node1 -> fallback_node\n", + " (\n", + " Message(text=\"one\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # fallback_node -> fallback_node\n", + " (\n", + " Message(text=\"help\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # fallback_node -> fallback_node\n", + " (\n", + " Message(text=\"nope\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # fallback_node -> fallback_node\n", + " (\n", + " Message(misc={\"some_key\": \"some_value\"}),\n", + " Message(text=\"Hi, how are you?\"),\n", + " ), # fallback_node -> node1\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")), # node3 -> node4\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "163d8220", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:21.929007Z", + "iopub.status.busy": "2023-11-21T17:08:21.928638Z", + "iopub.status.idle": "2023-11-21T17:08:21.943935Z", + "shell.execute_reply": "2023-11-21T17:08:21.943342Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='one'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='help'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='nope'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> misc='{'some_key': 'some_value'}'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.3_responses.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.3_responses.ipynb new file mode 100644 index 0000000000..05e58e627c --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.3_responses.ipynb @@ -0,0 +1,364 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d31b7d68", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 3. Responses\n", + "\n", + "This tutorial shows different options for setting responses.\n", + "\n", + "Here, [responses](../apiref/dff.script.responses.std_responses.rst)\n", + "that allow giving custom answers to users are shown.\n", + "\n", + "Let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "7b6545ce", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:24.018975Z", + "iopub.status.busy": "2023-11-21T17:08:24.018612Z", + "iopub.status.idle": "2023-11-21T17:08:26.315694Z", + "shell.execute_reply": "2023-11-21T17:08:26.314921Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "21b48208", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:26.319346Z", + "iopub.status.busy": "2023-11-21T17:08:26.319036Z", + "iopub.status.idle": "2023-11-21T17:08:27.102723Z", + "shell.execute_reply": "2023-11-21T17:08:27.101880Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import re\n", + "import random\n", + "\n", + "from dff.script import TRANSITIONS, RESPONSE, Context, Message\n", + "import dff.script.responses as rsp\n", + "import dff.script.conditions as cnd\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "3a831fbb", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "The response can be set by Callable or *Message:\n", + "\n", + "* Callable objects. If the object is callable it must have a special signature:\n", + "\n", + " func(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Any\n", + "\n", + "* *Message objects. If the object is *Message\n", + " it will be returned by the agent as a response.\n", + "\n", + "\n", + "The functions to be used in the `toy_script` are declared here." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3f3c61a8", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:27.106373Z", + "iopub.status.busy": "2023-11-21T17:08:27.105826Z", + "iopub.status.idle": "2023-11-21T17:08:27.113516Z", + "shell.execute_reply": "2023-11-21T17:08:27.112730Z" + } + }, + "outputs": [], + "source": [ + "def cannot_talk_about_topic_response(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + ") -> Message:\n", + " request = ctx.last_request\n", + " if request is None or request.text is None:\n", + " topic = None\n", + " else:\n", + " topic_pattern = re.compile(r\"(.*talk about )(.*)\\.\")\n", + " topic = topic_pattern.findall(request.text)\n", + " topic = topic and topic[0] and topic[0][-1]\n", + " if topic:\n", + " return Message(text=f\"Sorry, I can not talk about {topic} now.\")\n", + " else:\n", + " return Message(text=\"Sorry, I can not talk about that now.\")\n", + "\n", + "\n", + "def upper_case_response(response: Message):\n", + " # wrapper for internal response function\n", + " def func(_: Context, __: Pipeline, *args, **kwargs) -> Message:\n", + " if response.text is not None:\n", + " response.text = response.text.upper()\n", + " return response\n", + "\n", + " return func\n", + "\n", + "\n", + "def fallback_trace_response(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + ") -> Message:\n", + " return Message(\n", + " misc={\n", + " \"previous_node\": list(ctx.labels.values())[-2],\n", + " \"last_request\": ctx.last_request,\n", + " }\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6f489bf0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:27.116685Z", + "iopub.status.busy": "2023-11-21T17:08:27.116282Z", + "iopub.status.idle": "2023-11-21T17:08:27.131362Z", + "shell.execute_reply": "2023-11-21T17:08:27.130035Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"greeting_flow\": {\n", + " \"start_node\": { # This is an initial node,\n", + " # it doesn't need a `RESPONSE`.\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " # If \"Hi\" == request of user then we make the transition\n", + " },\n", + " \"node1\": {\n", + " RESPONSE: rsp.choice(\n", + " [\n", + " Message(text=\"Hi, what is up?\"),\n", + " Message(text=\"Hello, how are you?\"),\n", + " ]\n", + " ),\n", + " # Random choice from candidate list.\n", + " TRANSITIONS: {\n", + " \"node2\": cnd.exact_match(Message(text=\"I'm fine, how are you?\"))\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " \"node3\": cnd.exact_match(\n", + " Message(text=\"Let's talk about music.\")\n", + " )\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: cannot_talk_about_topic_response,\n", + " TRANSITIONS: {\n", + " \"node4\": cnd.exact_match(Message(text=\"Ok, goodbye.\"))\n", + " },\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: upper_case_response(Message(text=\"bye\")),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " \"fallback_node\": { # We get to this node\n", + " # if an error occurred while the agent was running.\n", + " RESPONSE: fallback_trace_response,\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " }\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(text=\"Hello, how are you?\"),\n", + " ), # start_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"BYE\")), # node3 -> node4\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, what is up?\")), # node4 -> node1\n", + " (\n", + " Message(text=\"stop\"),\n", + " Message(\n", + " misc={\n", + " \"previous_node\": (\"greeting_flow\", \"node1\"),\n", + " \"last_request\": Message(text=\"stop\"),\n", + " }\n", + " ),\n", + " ),\n", + " # node1 -> fallback_node\n", + " (\n", + " Message(text=\"one\"),\n", + " Message(\n", + " misc={\n", + " \"previous_node\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"last_request\": Message(text=\"one\"),\n", + " }\n", + " ),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"help\"),\n", + " Message(\n", + " misc={\n", + " \"previous_node\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"last_request\": Message(text=\"help\"),\n", + " }\n", + " ),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"nope\"),\n", + " Message(\n", + " misc={\n", + " \"previous_node\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"last_request\": Message(text=\"nope\"),\n", + " }\n", + " ),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(text=\"Hello, how are you?\"),\n", + " ), # fallback_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"BYE\")), # node3 -> node4\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2cff75b5", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:27.134392Z", + "iopub.status.busy": "2023-11-21T17:08:27.133970Z", + "iopub.status.idle": "2023-11-21T17:08:27.149222Z", + "shell.execute_reply": "2023-11-21T17:08:27.148554Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hello, how are you?'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='BYE'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, what is up?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< misc='{'previous_node': ('greeting_flow', 'node1'), 'last_request': {'text': 'stop'}}'\n", + "(user) >>> text='one'\n", + " (bot) <<< misc='{'previous_node': ('greeting_flow', 'fallback_node'), 'last_request': {'text': 'one'}}'\n", + "(user) >>> text='help'\n", + " (bot) <<< misc='{'previous_node': ('greeting_flow', 'fallback_node'), 'last_request': {'text': 'help'}}'\n", + "(user) >>> text='nope'\n", + " (bot) <<< misc='{'previous_node': ('greeting_flow', 'fallback_node'), 'last_request': {'text': 'nope'}}'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hello, how are you?'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='BYE'\n" + ] + } + ], + "source": [ + "random.seed(31415) # predestination of choice\n", + "\n", + "\n", + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.4_transitions.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.4_transitions.ipynb new file mode 100644 index 0000000000..0622609edd --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.4_transitions.ipynb @@ -0,0 +1,483 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a579eff7", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "# Core: 4. Transitions\n", + "\n", + "This tutorial shows settings for transitions between flows and nodes.\n", + "\n", + "Here, [conditions](../apiref/dff.script.conditions.std_conditions.rst)\n", + "for transition between many different script steps are shown.\n", + "\n", + "Some of the destination steps can be set using\n", + "[labels](../apiref/dff.script.labels.std_labels.rst).\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "c8c9ce41", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:29.105678Z", + "iopub.status.busy": "2023-11-21T17:08:29.105456Z", + "iopub.status.idle": "2023-11-21T17:08:31.535990Z", + "shell.execute_reply": "2023-11-21T17:08:31.535179Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "9157565b", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:31.539114Z", + "iopub.status.busy": "2023-11-21T17:08:31.538880Z", + "iopub.status.idle": "2023-11-21T17:08:32.309025Z", + "shell.execute_reply": "2023-11-21T17:08:32.308214Z" + } + }, + "outputs": [], + "source": [ + "import re\n", + "\n", + "from dff.script import TRANSITIONS, RESPONSE, Context, NodeLabel3Type, Message\n", + "import dff.script.conditions as cnd\n", + "import dff.script.labels as lbl\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "77651228", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Let's define the functions with a special type of return value:\n", + "\n", + " NodeLabel3Type == tuple[str, str, float]\n", + "\n", + "which means that transition returns a `tuple`\n", + "with flow name, node name and priority." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c84b4fed", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:32.312873Z", + "iopub.status.busy": "2023-11-21T17:08:32.312191Z", + "iopub.status.idle": "2023-11-21T17:08:32.316872Z", + "shell.execute_reply": "2023-11-21T17:08:32.316166Z" + } + }, + "outputs": [], + "source": [ + "def greeting_flow_n2_transition(\n", + " _: Context, __: Pipeline, *args, **kwargs\n", + ") -> NodeLabel3Type:\n", + " return (\"greeting_flow\", \"node2\", 1.0)\n", + "\n", + "\n", + "def high_priority_node_transition(flow_label, label):\n", + " def transition(_: Context, __: Pipeline, *args, **kwargs) -> NodeLabel3Type:\n", + " return (flow_label, label, 2.0)\n", + "\n", + " return transition" + ] + }, + { + "cell_type": "markdown", + "id": "650b3f28", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Priority is needed to select a condition\n", + "in the situation where more than one condition is `True`.\n", + "All conditions in `TRANSITIONS` are being checked.\n", + "Of the set of `True` conditions,\n", + "the one that has the highest priority will be executed.\n", + "Of the set of `True` conditions with largest\n", + "priority the first met condition will be executed.\n", + "\n", + "Out of the box `dff.script.core.labels`\n", + "offers the following methods:\n", + "\n", + "* `lbl.repeat()` returns transition handler\n", + " which returns `NodeLabelType` to the last node,\n", + "\n", + "* `lbl.previous()` returns transition handler\n", + " which returns `NodeLabelType` to the previous node,\n", + "\n", + "* `lbl.to_start()` returns transition handler\n", + " which returns `NodeLabelType` to the start node,\n", + "\n", + "* `lbl.to_fallback()` returns transition\n", + " handler which returns `NodeLabelType` to the fallback node,\n", + "\n", + "* `lbl.forward()` returns transition handler\n", + " which returns `NodeLabelType` to the forward node,\n", + "\n", + "* `lbl.backward()` returns transition handler\n", + " which returns `NodeLabelType` to the backward node.\n", + "\n", + "There are three flows here: `global_flow`, `greeting_flow`, `music_flow`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "09e25d33", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:32.319971Z", + "iopub.status.busy": "2023-11-21T17:08:32.319770Z", + "iopub.status.idle": "2023-11-21T17:08:32.339561Z", + "shell.execute_reply": "2023-11-21T17:08:32.338821Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"global_flow\": {\n", + " \"start_node\": { # This is an initial node,\n", + " # it doesn't need a `RESPONSE`.\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {\n", + " (\"music_flow\", \"node1\"): cnd.regexp(\n", + " r\"talk about music\"\n", + " ), # first check\n", + " (\"greeting_flow\", \"node1\"): cnd.regexp(\n", + " r\"hi|hello\", re.IGNORECASE\n", + " ), # second check\n", + " \"fallback_node\": cnd.true(), # third check\n", + " # \"fallback_node\" is equivalent to\n", + " # (\"global_flow\", \"fallback_node\").\n", + " },\n", + " },\n", + " \"fallback_node\": { # We get to this node if\n", + " # an error occurred while the agent was running.\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {\n", + " (\"music_flow\", \"node1\"): cnd.regexp(\n", + " r\"talk about music\"\n", + " ), # first check\n", + " (\"greeting_flow\", \"node1\"): cnd.regexp(\n", + " r\"hi|hello\", re.IGNORECASE\n", + " ), # second check\n", + " lbl.previous(): cnd.regexp(\n", + " r\"previous\", re.IGNORECASE\n", + " ), # third check\n", + " # lbl.previous() is equivalent\n", + " # to (\"previous_flow\", \"previous_node\")\n", + " lbl.repeat(): cnd.true(), # fourth check\n", + " # lbl.repeat() is equivalent to (\"global_flow\", \"fallback_node\")\n", + " },\n", + " },\n", + " },\n", + " \"greeting_flow\": {\n", + " \"node1\": {\n", + " RESPONSE: Message(text=\"Hi, how are you?\"),\n", + " # When the agent goes to node1, we return \"Hi, how are you?\"\n", + " TRANSITIONS: {\n", + " (\n", + " \"global_flow\",\n", + " \"fallback_node\",\n", + " 0.1,\n", + " ): cnd.true(), # second check\n", + " \"node2\": cnd.regexp(r\"how are you\"), # first check\n", + " # \"node2\" is equivalent to (\"greeting_flow\", \"node2\", 1.0)\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " lbl.to_fallback(0.1): cnd.true(), # third check\n", + " # lbl.to_fallback(0.1) is equivalent\n", + " # to (\"global_flow\", \"fallback_node\", 0.1)\n", + " lbl.forward(0.5): cnd.regexp(r\"talk about\"), # second check\n", + " # lbl.forward(0.5) is equivalent\n", + " # to (\"greeting_flow\", \"node3\", 0.5)\n", + " (\"music_flow\", \"node1\"): cnd.regexp(\n", + " r\"talk about music\"\n", + " ), # first check\n", + " # (\"music_flow\", \"node1\") is equivalent\n", + " # to (\"music_flow\", \"node1\", 1.0)\n", + " lbl.previous(): cnd.regexp(\n", + " r\"previous\", re.IGNORECASE\n", + " ), # third check\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about that now.\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.regexp(r\"bye\")},\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"Bye\"),\n", + " TRANSITIONS: {\n", + " \"node1\": cnd.regexp(r\"hi|hello\", re.IGNORECASE), # first check\n", + " lbl.to_fallback(): cnd.true(), # second check\n", + " },\n", + " },\n", + " },\n", + " \"music_flow\": {\n", + " \"node1\": {\n", + " RESPONSE: Message(\n", + " text=\"I love `System of a Down` group, \"\n", + " \"would you like to talk about it?\"\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): cnd.regexp(r\"yes|yep|ok\", re.IGNORECASE),\n", + " lbl.to_fallback(): cnd.true(),\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): cnd.regexp(r\"next\", re.IGNORECASE),\n", + " lbl.repeat(): cnd.regexp(r\"repeat\", re.IGNORECASE),\n", + " lbl.to_fallback(): cnd.true(),\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): cnd.regexp(r\"next\", re.IGNORECASE),\n", + " lbl.backward(): cnd.regexp(r\"back\", re.IGNORECASE),\n", + " lbl.repeat(): cnd.regexp(r\"repeat\", re.IGNORECASE),\n", + " lbl.to_fallback(): cnd.true(),\n", + " },\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"That's all what I know.\"),\n", + " TRANSITIONS: {\n", + " greeting_flow_n2_transition: cnd.regexp(\n", + " r\"next\", re.IGNORECASE\n", + " ), # second check\n", + " high_priority_node_transition(\n", + " \"greeting_flow\", \"node4\"\n", + " ): cnd.regexp(\n", + " r\"next time\", re.IGNORECASE\n", + " ), # first check\n", + " lbl.to_fallback(): cnd.true(), # third check\n", + " },\n", + " },\n", + " },\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (Message(text=\"hi\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"talk about music.\"),\n", + " Message(\n", + " text=\"I love `System of a Down` group, \"\n", + " \"would you like to talk about it?\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"yes\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"back\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"repeat\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " ),\n", + " (Message(text=\"next\"), Message(text=\"That's all what I know.\")),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (Message(text=\"previous\"), Message(text=\"That's all what I know.\")),\n", + " (Message(text=\"next time\"), Message(text=\"Bye\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"previous\"), Message(text=\"Bye\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"nope\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"hi\"), Message(text=\"Hi, how are you?\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"previous\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"let's talk about something.\"),\n", + " Message(text=\"Sorry, I can not talk about that now.\"),\n", + " ),\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"Bye\")),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "b6ccc49a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:32.342935Z", + "iopub.status.busy": "2023-11-21T17:08:32.342379Z", + "iopub.status.idle": "2023-11-21T17:08:32.367898Z", + "shell.execute_reply": "2023-11-21T17:08:32.367161Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='talk about music.'\n", + " (bot) <<< text='I love `System of a Down` group, would you like to talk about it?'\n", + "(user) >>> text='yes'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='The band achieved commercial success with the release of five studio albums.'\n", + "(user) >>> text='back'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='repeat'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='The band achieved commercial success with the release of five studio albums.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='That's all what I know.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='That's all what I know.'\n", + "(user) >>> text='next time'\n", + " (bot) <<< text='Bye'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='Bye'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='nope'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='let's talk about something.'\n", + " (bot) <<< text='Sorry, I can not talk about that now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='Bye'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"global_flow\", \"start_node\"),\n", + " fallback_label=(\"global_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.5_global_transitions.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.5_global_transitions.ipynb new file mode 100644 index 0000000000..55beb421a2 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.5_global_transitions.ipynb @@ -0,0 +1,378 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "61fcde5b", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "# Core: 5. Global transitions\n", + "\n", + "This tutorial shows the global setting of transitions.\n", + "\n", + "Here, global [conditions](../apiref/dff.script.conditions.std_conditions.rst)\n", + "for default transition between many different script steps are shown.\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "22bc6156", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:34.392013Z", + "iopub.status.busy": "2023-11-21T17:08:34.391435Z", + "iopub.status.idle": "2023-11-21T17:08:36.773697Z", + "shell.execute_reply": "2023-11-21T17:08:36.772859Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8534ab55", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:36.776816Z", + "iopub.status.busy": "2023-11-21T17:08:36.776266Z", + "iopub.status.idle": "2023-11-21T17:08:37.507130Z", + "shell.execute_reply": "2023-11-21T17:08:37.506376Z" + } + }, + "outputs": [], + "source": [ + "import re\n", + "\n", + "from dff.script import GLOBAL, TRANSITIONS, RESPONSE, Message\n", + "import dff.script.conditions as cnd\n", + "import dff.script.labels as lbl\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "911d635b", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "The keyword `GLOBAL` is used to define a global node.\n", + "There can be only one global node in a script.\n", + "The value that corresponds to this key has the\n", + "`dict` type with the same keywords as regular nodes.\n", + "The global node is defined above the flow level as opposed to regular nodes.\n", + "This node allows to define default global values for all nodes.\n", + "\n", + "There are `GLOBAL` node and three flows:\n", + "`global_flow`, `greeting_flow`, `music_flow`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "6048b578", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:37.511095Z", + "iopub.status.busy": "2023-11-21T17:08:37.510507Z", + "iopub.status.idle": "2023-11-21T17:08:37.527554Z", + "shell.execute_reply": "2023-11-21T17:08:37.527016Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " GLOBAL: {\n", + " TRANSITIONS: {\n", + " (\"greeting_flow\", \"node1\", 1.1): cnd.regexp(\n", + " r\"\\b(hi|hello)\\b\", re.I\n", + " ), # first check\n", + " (\"music_flow\", \"node1\", 1.1): cnd.regexp(\n", + " r\"talk about music\"\n", + " ), # second check\n", + " lbl.to_fallback(0.1): cnd.true(), # fifth check\n", + " lbl.forward(): cnd.all(\n", + " [\n", + " cnd.regexp(r\"next\\b\"),\n", + " cnd.has_last_labels(\n", + " labels=[(\"music_flow\", i) for i in [\"node2\", \"node3\"]]\n", + " ),\n", + " ] # third check\n", + " ),\n", + " lbl.repeat(0.2): cnd.all(\n", + " [\n", + " cnd.regexp(r\"repeat\", re.I),\n", + " cnd.negation(\n", + " cnd.has_last_labels(flow_labels=[\"global_flow\"])\n", + " ),\n", + " ] # fourth check\n", + " ),\n", + " }\n", + " },\n", + " \"global_flow\": {\n", + " \"start_node\": {\n", + " RESPONSE: Message()\n", + " }, # This is an initial node, it doesn't need a `RESPONSE`.\n", + " \"fallback_node\": { # We get to this node\n", + " # if an error occurred while the agent was running.\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {lbl.previous(): cnd.regexp(r\"previous\", re.I)},\n", + " # lbl.previous() is equivalent to\n", + " # (\"previous_flow\", \"previous_node\", 1.0)\n", + " },\n", + " },\n", + " \"greeting_flow\": {\n", + " \"node1\": {\n", + " RESPONSE: Message(text=\"Hi, how are you?\"),\n", + " TRANSITIONS: {\"node2\": cnd.regexp(r\"how are you\")},\n", + " # \"node2\" is equivalent to (\"greeting_flow\", \"node2\", 1.0)\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " lbl.forward(0.5): cnd.regexp(r\"talk about\"),\n", + " # lbl.forward(0.5) is equivalent to\n", + " # (\"greeting_flow\", \"node3\", 0.5)\n", + " lbl.previous(): cnd.regexp(r\"previous\", re.I),\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about that now.\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.regexp(r\"bye\")},\n", + " },\n", + " \"node4\": {RESPONSE: Message(text=\"bye\")},\n", + " # Only the global transitions setting are used in this node.\n", + " },\n", + " \"music_flow\": {\n", + " \"node1\": {\n", + " RESPONSE: Message(\n", + " text=\"I love `System of a Down` group, \"\n", + " \"would you like to talk about it?\"\n", + " ),\n", + " TRANSITIONS: {lbl.forward(): cnd.regexp(r\"yes|yep|ok\", re.I)},\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " )\n", + " # Only the global transitions setting are used in this node.\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " TRANSITIONS: {lbl.backward(): cnd.regexp(r\"back\", re.I)},\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"That's all what I know.\"),\n", + " TRANSITIONS: {\n", + " (\"greeting_flow\", \"node4\"): cnd.regexp(r\"next time\", re.I),\n", + " (\"greeting_flow\", \"node2\"): cnd.regexp(r\"next\", re.I),\n", + " },\n", + " },\n", + " },\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (Message(text=\"hi\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"talk about music.\"),\n", + " Message(\n", + " text=\"I love `System of a Down` group, \"\n", + " \"would you like to talk about it?\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"yes\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"back\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"repeat\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " ),\n", + " (Message(text=\"next\"), Message(text=\"That's all what I know.\")),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (Message(text=\"previous\"), Message(text=\"That's all what I know.\")),\n", + " (Message(text=\"next time\"), Message(text=\"bye\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"previous\"), Message(text=\"bye\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"nope\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"hi\"), Message(text=\"Hi, how are you?\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"previous\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"let's talk about something.\"),\n", + " Message(text=\"Sorry, I can not talk about that now.\"),\n", + " ),\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7ebf5e47", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:37.530139Z", + "iopub.status.busy": "2023-11-21T17:08:37.529773Z", + "iopub.status.idle": "2023-11-21T17:08:37.553321Z", + "shell.execute_reply": "2023-11-21T17:08:37.552655Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='talk about music.'\n", + " (bot) <<< text='I love `System of a Down` group, would you like to talk about it?'\n", + "(user) >>> text='yes'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='The band achieved commercial success with the release of five studio albums.'\n", + "(user) >>> text='back'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='repeat'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='The band achieved commercial success with the release of five studio albums.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='That's all what I know.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='That's all what I know.'\n", + "(user) >>> text='next time'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='nope'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='let's talk about something.'\n", + " (bot) <<< text='Sorry, I can not talk about that now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"global_flow\", \"start_node\"),\n", + " fallback_label=(\"global_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.6_context_serialization.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.6_context_serialization.ipynb new file mode 100644 index 0000000000..88b66874eb --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.6_context_serialization.ipynb @@ -0,0 +1,239 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b1f895ac", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 6. Context serialization\n", + "\n", + "This tutorial shows context serialization.\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "775db5ad", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:39.354325Z", + "iopub.status.busy": "2023-11-21T17:08:39.354038Z", + "iopub.status.idle": "2023-11-21T17:08:41.756438Z", + "shell.execute_reply": "2023-11-21T17:08:41.755604Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "0ae08dca", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:41.759631Z", + "iopub.status.busy": "2023-11-21T17:08:41.759392Z", + "iopub.status.idle": "2023-11-21T17:08:42.492222Z", + "shell.execute_reply": "2023-11-21T17:08:42.491546Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "from dff.script import TRANSITIONS, RESPONSE, Context, Message\n", + "import dff.script.conditions as cnd\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "27670753", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "This function returns the user request number." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5791bfb9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:42.496216Z", + "iopub.status.busy": "2023-11-21T17:08:42.495496Z", + "iopub.status.idle": "2023-11-21T17:08:42.499628Z", + "shell.execute_reply": "2023-11-21T17:08:42.498917Z" + } + }, + "outputs": [], + "source": [ + "def response_handler(ctx: Context, _: Pipeline, *args, **kwargs) -> Message:\n", + " return Message(text=f\"answer {len(ctx.requests)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "37b398a1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:42.502642Z", + "iopub.status.busy": "2023-11-21T17:08:42.502075Z", + "iopub.status.idle": "2023-11-21T17:08:42.507001Z", + "shell.execute_reply": "2023-11-21T17:08:42.506343Z" + } + }, + "outputs": [], + "source": [ + "# a dialog script\n", + "toy_script = {\n", + " \"flow_start\": {\n", + " \"node_start\": {\n", + " RESPONSE: response_handler,\n", + " TRANSITIONS: {(\"flow_start\", \"node_start\"): cnd.true()},\n", + " }\n", + " }\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (Message(text=\"hi\"), Message(text=\"answer 1\")),\n", + " (Message(text=\"how are you?\"), Message(text=\"answer 2\")),\n", + " (Message(text=\"ok\"), Message(text=\"answer 3\")),\n", + " (Message(text=\"good\"), Message(text=\"answer 4\")),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "f6358f73", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Draft function that performs serialization." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "07864286", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:42.510182Z", + "iopub.status.busy": "2023-11-21T17:08:42.509600Z", + "iopub.status.idle": "2023-11-21T17:08:42.514640Z", + "shell.execute_reply": "2023-11-21T17:08:42.514065Z" + } + }, + "outputs": [], + "source": [ + "def process_response(ctx: Context):\n", + " ctx_json = ctx.model_dump_json()\n", + " if isinstance(ctx_json, str):\n", + " logging.info(\"context serialized to json str\")\n", + " else:\n", + " raise Exception(f\"ctx={ctx_json} has to be serialized to json string\")\n", + "\n", + " ctx_dict = ctx.model_dump()\n", + " if isinstance(ctx_dict, dict):\n", + " logging.info(\"context serialized to dict\")\n", + " else:\n", + " raise Exception(f\"ctx={ctx_dict} has to be serialized to dict\")\n", + "\n", + " if not isinstance(ctx, Context):\n", + " raise Exception(f\"ctx={ctx} has to have Context type\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "2be00a69", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:42.517504Z", + "iopub.status.busy": "2023-11-21T17:08:42.517098Z", + "iopub.status.idle": "2023-11-21T17:08:42.526191Z", + "shell.execute_reply": "2023-11-21T17:08:42.525496Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='hi'\n", + " (bot) <<< text='answer 1'\n", + "(user) >>> text='how are you?'\n", + " (bot) <<< text='answer 2'\n", + "(user) >>> text='ok'\n", + " (bot) <<< text='answer 3'\n", + "(user) >>> text='good'\n", + " (bot) <<< text='answer 4'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"flow_start\", \"node_start\"),\n", + " post_services=[process_response],\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.7_pre_response_processing.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.7_pre_response_processing.ipynb new file mode 100644 index 0000000000..274e13d1d5 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.7_pre_response_processing.ipynb @@ -0,0 +1,709 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "6f310a6b", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 7. Pre-response processing\n", + "\n", + "This tutorial shows pre-response processing feature.\n", + "\n", + "Here, [PRE_RESPONSE_PROCESSING](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords.PRE_RESPONSE_PROCESSING)\n", + "is demonstrated which can be used for additional context processing before response handlers.\n", + "\n", + "There are also some other [Keywords](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords)\n", + "worth attention used in this tutorial.\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "347364d6", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:44.437050Z", + "iopub.status.busy": "2023-11-21T17:08:44.436560Z", + "iopub.status.idle": "2023-11-21T17:08:46.791257Z", + "shell.execute_reply": "2023-11-21T17:08:46.790351Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a7882964", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:46.795061Z", + "iopub.status.busy": "2023-11-21T17:08:46.794448Z", + "iopub.status.idle": "2023-11-21T17:08:47.549625Z", + "shell.execute_reply": "2023-11-21T17:08:47.548790Z" + } + }, + "outputs": [], + "source": [ + "from dff.script import (\n", + " GLOBAL,\n", + " LOCAL,\n", + " RESPONSE,\n", + " TRANSITIONS,\n", + " PRE_RESPONSE_PROCESSING,\n", + " Context,\n", + " Message,\n", + ")\n", + "import dff.script.labels as lbl\n", + "import dff.script.conditions as cnd\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "02499e8e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:47.553311Z", + "iopub.status.busy": "2023-11-21T17:08:47.552636Z", + "iopub.status.idle": "2023-11-21T17:08:47.557505Z", + "shell.execute_reply": "2023-11-21T17:08:47.556727Z" + } + }, + "outputs": [], + "source": [ + "def add_prefix(prefix):\n", + " def add_prefix_processing(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + " ) -> Context:\n", + " processed_node = ctx.current_node\n", + " processed_node.response = Message(\n", + " text=f\"{prefix}: {processed_node.response.text}\"\n", + " )\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " return ctx\n", + "\n", + " return add_prefix_processing" + ] + }, + { + "cell_type": "markdown", + "id": "9b81feef", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "`PRE_RESPONSE_PROCESSING` is a keyword that\n", + "can be used in `GLOBAL`, `LOCAL` or nodes." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1976157a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:47.560879Z", + "iopub.status.busy": "2023-11-21T17:08:47.560373Z", + "iopub.status.idle": "2023-11-21T17:08:47.569883Z", + "shell.execute_reply": "2023-11-21T17:08:47.568981Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"root\": {\n", + " \"start\": {\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {(\"flow\", \"step_0\"): cnd.true()},\n", + " },\n", + " \"fallback\": {RESPONSE: Message(text=\"the end\")},\n", + " },\n", + " GLOBAL: {\n", + " PRE_RESPONSE_PROCESSING: {\n", + " \"proc_name_1\": add_prefix(\"l1_global\"),\n", + " \"proc_name_2\": add_prefix(\"l2_global\"),\n", + " }\n", + " },\n", + " \"flow\": {\n", + " LOCAL: {\n", + " PRE_RESPONSE_PROCESSING: {\n", + " \"proc_name_2\": add_prefix(\"l2_local\"),\n", + " \"proc_name_3\": add_prefix(\"l3_local\"),\n", + " }\n", + " },\n", + " \"step_0\": {\n", + " RESPONSE: Message(text=\"first\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_1\": {\n", + " PRE_RESPONSE_PROCESSING: {\"proc_name_1\": add_prefix(\"l1_step_1\")},\n", + " RESPONSE: Message(text=\"second\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_2\": {\n", + " PRE_RESPONSE_PROCESSING: {\"proc_name_2\": add_prefix(\"l2_step_2\")},\n", + " RESPONSE: Message(text=\"third\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_3\": {\n", + " PRE_RESPONSE_PROCESSING: {\"proc_name_3\": add_prefix(\"l3_step_3\")},\n", + " RESPONSE: Message(text=\"fourth\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_4\": {\n", + " PRE_RESPONSE_PROCESSING: {\"proc_name_4\": add_prefix(\"l4_step_4\")},\n", + " RESPONSE: Message(text=\"fifth\"),\n", + " TRANSITIONS: {\"step_0\": cnd.true()},\n", + " },\n", + " },\n", + "}\n", + "\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (Message(), Message(text=\"l3_local: l2_local: l1_global: first\")),\n", + " (Message(), Message(text=\"l3_local: l2_local: l1_step_1: second\")),\n", + " (Message(), Message(text=\"l3_local: l2_step_2: l1_global: third\")),\n", + " (Message(), Message(text=\"l3_step_3: l2_local: l1_global: fourth\")),\n", + " (\n", + " Message(),\n", + " Message(text=\"l4_step_4: l3_local: l2_local: l1_global: fifth\"),\n", + " ),\n", + " (Message(), Message(text=\"l3_local: l2_local: l1_global: first\")),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "55b0d1a9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:47.573671Z", + "iopub.status.busy": "2023-11-21T17:08:47.572987Z", + "iopub.status.idle": "2023-11-21T17:08:47.604682Z", + "shell.execute_reply": "2023-11-21T17:08:47.603986Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7fb78371ea60>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7fb78370c1f0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7fb78370c280>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7fb78370c430>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7fb78370c1f0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7fb78370c280>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7fb78371ea60>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7fb78370c5e0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7fb78370c280>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7fb78371ea60>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7fb78370c1f0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7fb78370c790>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7fb78371ea60>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7fb78370c1f0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7fb78370c280>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_4 and processing_func=.add_prefix_processing at 0x7fb78370c940>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7fb78371ea60>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7fb78370c1f0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7fb78370c280>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_24748/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> \n", + " (bot) <<< text='l3_local: l2_local: l1_global: first'\n", + "(user) >>> \n", + " (bot) <<< text='l3_local: l2_local: l1_step_1: second'\n", + "(user) >>> \n", + " (bot) <<< text='l3_local: l2_step_2: l1_global: third'\n", + "(user) >>> \n", + " (bot) <<< text='l3_step_3: l2_local: l1_global: fourth'\n", + "(user) >>> \n", + " (bot) <<< text='l4_step_4: l3_local: l2_local: l1_global: fifth'\n", + "(user) >>> \n", + " (bot) <<< text='l3_local: l2_local: l1_global: first'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"root\", \"start\"),\n", + " fallback_label=(\"root\", \"fallback\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.8_misc.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.8_misc.ipynb new file mode 100644 index 0000000000..345e0db38e --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.8_misc.ipynb @@ -0,0 +1,299 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a9ba71cb", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 8. Misc\n", + "\n", + "This tutorial shows `MISC` (miscellaneous) keyword usage.\n", + "\n", + "See [MISC](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords.MISC)\n", + "for more information.\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "673478da", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:49.476822Z", + "iopub.status.busy": "2023-11-21T17:08:49.476625Z", + "iopub.status.idle": "2023-11-21T17:08:51.820889Z", + "shell.execute_reply": "2023-11-21T17:08:51.819958Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6089e6a4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:51.823951Z", + "iopub.status.busy": "2023-11-21T17:08:51.823495Z", + "iopub.status.idle": "2023-11-21T17:08:52.581589Z", + "shell.execute_reply": "2023-11-21T17:08:52.580939Z" + } + }, + "outputs": [], + "source": [ + "from dff.script import (\n", + " GLOBAL,\n", + " LOCAL,\n", + " RESPONSE,\n", + " TRANSITIONS,\n", + " MISC,\n", + " Context,\n", + " Message,\n", + ")\n", + "import dff.script.labels as lbl\n", + "import dff.script.conditions as cnd\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ad894f51", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:52.584838Z", + "iopub.status.busy": "2023-11-21T17:08:52.584383Z", + "iopub.status.idle": "2023-11-21T17:08:52.588554Z", + "shell.execute_reply": "2023-11-21T17:08:52.587914Z" + } + }, + "outputs": [], + "source": [ + "def custom_response(ctx: Context, _: Pipeline, *args, **kwargs) -> Message:\n", + " if ctx.validation:\n", + " return Message()\n", + " current_node = ctx.current_node\n", + " return Message(\n", + " text=f\"ctx.last_label={ctx.last_label}: \"\n", + " f\"current_node.misc={current_node.misc}\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d2af27dc", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:52.591320Z", + "iopub.status.busy": "2023-11-21T17:08:52.590918Z", + "iopub.status.idle": "2023-11-21T17:08:52.600012Z", + "shell.execute_reply": "2023-11-21T17:08:52.599298Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"root\": {\n", + " \"start\": {\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {(\"flow\", \"step_0\"): cnd.true()},\n", + " },\n", + " \"fallback\": {RESPONSE: Message(text=\"the end\")},\n", + " },\n", + " GLOBAL: {\n", + " MISC: {\n", + " \"var1\": \"global_data\",\n", + " \"var2\": \"global_data\",\n", + " \"var3\": \"global_data\",\n", + " }\n", + " },\n", + " \"flow\": {\n", + " LOCAL: {\n", + " MISC: {\n", + " \"var2\": \"rewrite_by_local\",\n", + " \"var3\": \"rewrite_by_local\",\n", + " }\n", + " },\n", + " \"step_0\": {\n", + " MISC: {\"var3\": \"info_of_step_0\"},\n", + " RESPONSE: custom_response,\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_1\": {\n", + " MISC: {\"var3\": \"info_of_step_1\"},\n", + " RESPONSE: custom_response,\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_2\": {\n", + " MISC: {\"var3\": \"info_of_step_2\"},\n", + " RESPONSE: custom_response,\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_3\": {\n", + " MISC: {\"var3\": \"info_of_step_3\"},\n", + " RESPONSE: custom_response,\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_4\": {\n", + " MISC: {\"var3\": \"info_of_step_4\"},\n", + " RESPONSE: custom_response,\n", + " TRANSITIONS: {\"step_0\": cnd.true()},\n", + " },\n", + " },\n", + "}\n", + "\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_0'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_0'}\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_1'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_1'}\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_2'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_2'}\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_3'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_3'}\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_4'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_4'}\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_0'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_0'}\"\n", + " ),\n", + " ),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9c34ebb5", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:52.602753Z", + "iopub.status.busy": "2023-11-21T17:08:52.602526Z", + "iopub.status.idle": "2023-11-21T17:08:52.613961Z", + "shell.execute_reply": "2023-11-21T17:08:52.613188Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_0'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_0'}'\n", + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_1'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_1'}'\n", + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_2'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_2'}'\n", + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_3'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_3'}'\n", + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_4'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_4'}'\n", + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_0'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_0'}'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"root\", \"start\"),\n", + " fallback_label=(\"root\", \"fallback\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.9_pre_transitions_processing.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.9_pre_transitions_processing.ipynb new file mode 100644 index 0000000000..bd2087feaf --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.9_pre_transitions_processing.ipynb @@ -0,0 +1,351 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "525b866a", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 9. Pre-transitions processing\n", + "\n", + "This tutorial shows pre-transitions processing feature.\n", + "\n", + "Here, [PRE_TRANSITIONS_PROCESSING](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords.PRE_TRANSITIONS_PROCESSING)\n", + "is demonstrated which can be used for additional context\n", + "processing before transitioning to the next step.\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "9c3458c6", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:54.407362Z", + "iopub.status.busy": "2023-11-21T17:08:54.406982Z", + "iopub.status.idle": "2023-11-21T17:08:56.818758Z", + "shell.execute_reply": "2023-11-21T17:08:56.817959Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7a0920f8", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:56.821688Z", + "iopub.status.busy": "2023-11-21T17:08:56.821440Z", + "iopub.status.idle": "2023-11-21T17:08:57.573246Z", + "shell.execute_reply": "2023-11-21T17:08:57.572569Z" + } + }, + "outputs": [], + "source": [ + "from dff.script import (\n", + " GLOBAL,\n", + " RESPONSE,\n", + " TRANSITIONS,\n", + " PRE_RESPONSE_PROCESSING,\n", + " PRE_TRANSITIONS_PROCESSING,\n", + " Context,\n", + " Message,\n", + ")\n", + "import dff.script.labels as lbl\n", + "import dff.script.conditions as cnd\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "467c5a30", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:57.576820Z", + "iopub.status.busy": "2023-11-21T17:08:57.576044Z", + "iopub.status.idle": "2023-11-21T17:08:57.581370Z", + "shell.execute_reply": "2023-11-21T17:08:57.580633Z" + } + }, + "outputs": [], + "source": [ + "def save_previous_node_response_to_ctx_processing(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + ") -> Context:\n", + " processed_node = ctx.current_node\n", + " ctx.misc[\"previous_node_response\"] = processed_node.response\n", + " return ctx\n", + "\n", + "\n", + "def get_previous_node_response_for_response_processing(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + ") -> Context:\n", + " processed_node = ctx.current_node\n", + " processed_node.response = Message(\n", + " text=f\"previous={ctx.misc['previous_node_response'].text}:\"\n", + " f\" current={processed_node.response.text}\"\n", + " )\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " return ctx" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d84d6672", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:57.584618Z", + "iopub.status.busy": "2023-11-21T17:08:57.584036Z", + "iopub.status.idle": "2023-11-21T17:08:57.591754Z", + "shell.execute_reply": "2023-11-21T17:08:57.590679Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "# a dialog script\n", + "toy_script = {\n", + " \"root\": {\n", + " \"start\": {\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {(\"flow\", \"step_0\"): cnd.true()},\n", + " },\n", + " \"fallback\": {RESPONSE: Message(text=\"the end\")},\n", + " },\n", + " GLOBAL: {\n", + " PRE_RESPONSE_PROCESSING: {\n", + " \"proc_name_1\": get_previous_node_response_for_response_processing\n", + " },\n", + " PRE_TRANSITIONS_PROCESSING: {\n", + " \"proc_name_1\": save_previous_node_response_to_ctx_processing\n", + " },\n", + " TRANSITIONS: {lbl.forward(0.1): cnd.true()},\n", + " },\n", + " \"flow\": {\n", + " \"step_0\": {RESPONSE: Message(text=\"first\")},\n", + " \"step_1\": {RESPONSE: Message(text=\"second\")},\n", + " \"step_2\": {RESPONSE: Message(text=\"third\")},\n", + " \"step_3\": {RESPONSE: Message(text=\"fourth\")},\n", + " \"step_4\": {RESPONSE: Message(text=\"fifth\")},\n", + " },\n", + "}\n", + "\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (Message(text=\"1\"), Message(text=\"previous=None: current=first\")),\n", + " (Message(text=\"2\"), Message(text=\"previous=first: current=second\")),\n", + " (Message(text=\"3\"), Message(text=\"previous=second: current=third\")),\n", + " (Message(text=\"4\"), Message(text=\"previous=third: current=fourth\")),\n", + " (Message(text=\"5\"), Message(text=\"previous=fourth: current=fifth\")),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a7b6d3fb", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:57.595861Z", + "iopub.status.busy": "2023-11-21T17:08:57.595304Z", + "iopub.status.idle": "2023-11-21T17:08:57.614497Z", + "shell.execute_reply": "2023-11-21T17:08:57.613897Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_25268/2767853180.py\", line 17, in get_previous_node_response_for_response_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_25268/2767853180.py\", line 17, in get_previous_node_response_for_response_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_25268/2767853180.py\", line 17, in get_previous_node_response_for_response_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_25268/2767853180.py\", line 17, in get_previous_node_response_for_response_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_25268/2767853180.py\", line 17, in get_previous_node_response_for_response_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='1'\n", + " (bot) <<< text='previous=None: current=first'\n", + "(user) >>> text='2'\n", + " (bot) <<< text='previous=first: current=second'\n", + "(user) >>> text='3'\n", + " (bot) <<< text='previous=second: current=third'\n", + "(user) >>> text='4'\n", + " (bot) <<< text='previous=third: current=fourth'\n", + "(user) >>> text='5'\n", + " (bot) <<< text='previous=fourth: current=fifth'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"root\", \"start\"),\n", + " fallback_label=(\"root\", \"fallback\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.responses.1_basics.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.1_basics.ipynb new file mode 100644 index 0000000000..ec5f47050f --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.1_basics.ipynb @@ -0,0 +1,252 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "713891de", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Responses: 1. Basics\n", + "\n", + "Here, the process of response forming is shown.\n", + "Special keywords [RESPONSE](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords.RESPONSE)\n", + "and [TRANSITIONS](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords.TRANSITIONS)\n", + "are used for that." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "da412179", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:08:59.298186Z", + "iopub.status.busy": "2023-11-21T17:08:59.297756Z", + "iopub.status.idle": "2023-11-21T17:09:01.658772Z", + "shell.execute_reply": "2023-11-21T17:09:01.657933Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3ea78c76", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:01.662136Z", + "iopub.status.busy": "2023-11-21T17:09:01.661598Z", + "iopub.status.idle": "2023-11-21T17:09:02.415116Z", + "shell.execute_reply": "2023-11-21T17:09:02.414422Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "from typing import NamedTuple\n", + "\n", + "from dff.script import Message\n", + "from dff.script.conditions import exact_match\n", + "from dff.script import RESPONSE, TRANSITIONS\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "00e6c703", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:02.418336Z", + "iopub.status.busy": "2023-11-21T17:09:02.417975Z", + "iopub.status.idle": "2023-11-21T17:09:02.428582Z", + "shell.execute_reply": "2023-11-21T17:09:02.427826Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"greeting_flow\": {\n", + " \"start_node\": {\n", + " RESPONSE: Message(text=\"\"),\n", + " TRANSITIONS: {\"node1\": exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " \"node1\": {\n", + " RESPONSE: Message(text=\"Hi, how are you?\"),\n", + " TRANSITIONS: {\n", + " \"node2\": exact_match(Message(text=\"i'm fine, how are you?\"))\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " \"node3\": exact_match(Message(text=\"Let's talk about music.\"))\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about music now.\"),\n", + " TRANSITIONS: {\"node4\": exact_match(Message(text=\"Ok, goodbye.\"))},\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"bye\"),\n", + " TRANSITIONS: {\"node1\": exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " \"fallback_node\": {\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {\"node1\": exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " }\n", + "}\n", + "\n", + "happy_path = (\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ),\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")),\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, how are you?\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ),\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c9590ff9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:02.431330Z", + "iopub.status.busy": "2023-11-21T17:09:02.431050Z", + "iopub.status.idle": "2023-11-21T17:09:02.434412Z", + "shell.execute_reply": "2023-11-21T17:09:02.433797Z" + } + }, + "outputs": [], + "source": [ + "class CallbackRequest(NamedTuple):\n", + " payload: str" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "26b45b6d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:02.437061Z", + "iopub.status.busy": "2023-11-21T17:09:02.436693Z", + "iopub.status.idle": "2023-11-21T17:09:02.451006Z", + "shell.execute_reply": "2023-11-21T17:09:02.450373Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(\n", + " pipeline,\n", + " happy_path,\n", + " ) # This is a function for automatic tutorial running\n", + " # (testing) with `happy_path`\n", + "\n", + " # This runs tutorial in interactive mode if not in IPython env\n", + " # and if `DISABLE_INTERACTIVE_MODE` is not set\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline) # This runs tutorial in interactive mode" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.responses.2_buttons.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.2_buttons.ipynb new file mode 100644 index 0000000000..68beb77a88 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.2_buttons.ipynb @@ -0,0 +1,394 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "439309f2", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "# Responses: 2. Buttons\n", + "\n", + "In this tutorial [Button](../apiref/dff.script.core.message.rst#dff.script.core.message.Button)\n", + "class is demonstrated.\n", + "Buttons are one of [Message](../apiref/dff.script.core.message.rst#dff.script.core.message.Message) fields.\n", + "They can be attached to any message but will only work if the chosen\n", + "[messenger interface](../apiref/index_messenger_interfaces.rst) supports them." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b84adbd6", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:04.184791Z", + "iopub.status.busy": "2023-11-21T17:09:04.184593Z", + "iopub.status.idle": "2023-11-21T17:09:06.633064Z", + "shell.execute_reply": "2023-11-21T17:09:06.632212Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "68c9eaf0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:06.636051Z", + "iopub.status.busy": "2023-11-21T17:09:06.635820Z", + "iopub.status.idle": "2023-11-21T17:09:07.390994Z", + "shell.execute_reply": "2023-11-21T17:09:07.390311Z" + } + }, + "outputs": [], + "source": [ + "import dff.script.conditions as cnd\n", + "import dff.script.labels as lbl\n", + "from dff.script import Context, TRANSITIONS, RESPONSE\n", + "\n", + "from dff.script.core.message import Button, Keyboard, Message\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ded8d3d1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:07.394248Z", + "iopub.status.busy": "2023-11-21T17:09:07.393843Z", + "iopub.status.idle": "2023-11-21T17:09:07.398199Z", + "shell.execute_reply": "2023-11-21T17:09:07.397606Z" + } + }, + "outputs": [], + "source": [ + "def check_button_payload(value: str):\n", + " def payload_check_inner(ctx: Context, _: Pipeline):\n", + " if ctx.last_request.misc is not None:\n", + " return ctx.last_request.misc.get(\"payload\") == value\n", + " else:\n", + " return False\n", + "\n", + " return payload_check_inner" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "fd46bf9e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:07.400896Z", + "iopub.status.busy": "2023-11-21T17:09:07.400487Z", + "iopub.status.idle": "2023-11-21T17:09:07.416888Z", + "shell.execute_reply": "2023-11-21T17:09:07.416224Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"root\": {\n", + " \"start\": {\n", + " RESPONSE: Message(text=\"\"),\n", + " TRANSITIONS: {\n", + " (\"general\", \"question_1\"): cnd.true(),\n", + " },\n", + " },\n", + " \"fallback\": {RESPONSE: Message(text=\"Finishing test\")},\n", + " },\n", + " \"general\": {\n", + " \"question_1\": {\n", + " RESPONSE: Message(\n", + " **{\n", + " \"text\": \"Starting test! What's 2 + 2?\"\n", + " \" (type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"5\", payload=\"5\"),\n", + " Button(text=\"4\", payload=\"4\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): check_button_payload(\"4\"),\n", + " (\"general\", \"question_1\"): check_button_payload(\"5\"),\n", + " },\n", + " },\n", + " \"question_2\": {\n", + " RESPONSE: Message(\n", + " **{\n", + " \"text\": \"Next question: what's 6 * 8?\"\n", + " \" (type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"38\", payload=\"38\"),\n", + " Button(text=\"48\", payload=\"48\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): check_button_payload(\"48\"),\n", + " (\"general\", \"question_2\"): check_button_payload(\"38\"),\n", + " },\n", + " },\n", + " \"question_3\": {\n", + " RESPONSE: Message(\n", + " **{\n", + " \"text\": \"What's 114 + 115? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"229\", payload=\"229\"),\n", + " Button(text=\"283\", payload=\"283\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): check_button_payload(\"229\"),\n", + " (\"general\", \"question_3\"): check_button_payload(\"283\"),\n", + " },\n", + " },\n", + " \"success\": {\n", + " RESPONSE: Message(text=\"Success!\"),\n", + " TRANSITIONS: {(\"root\", \"fallback\"): cnd.true()},\n", + " },\n", + " },\n", + "}\n", + "\n", + "happy_path = (\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"Starting test! What's 2 + 2? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"5\", payload=\"5\"),\n", + " Button(text=\"4\", payload=\"4\"),\n", + " ]\n", + " )\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"0\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"Starting test! What's 2 + 2? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"5\", payload=\"5\"),\n", + " Button(text=\"4\", payload=\"4\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"1\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"Next question: what's 6 * 8? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"38\", payload=\"38\"),\n", + " Button(text=\"48\", payload=\"48\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"0\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"Next question: what's 6 * 8? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"38\", payload=\"38\"),\n", + " Button(text=\"48\", payload=\"48\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"1\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"What's 114 + 115? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"229\", payload=\"229\"),\n", + " Button(text=\"283\", payload=\"283\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"1\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"What's 114 + 115? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"229\", payload=\"229\"),\n", + " Button(text=\"283\", payload=\"283\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (Message(text=\"0\"), Message(text=\"Success!\")),\n", + " (Message(text=\"ok\"), Message(text=\"Finishing test\")),\n", + ")\n", + "\n", + "\n", + "def process_request(ctx: Context):\n", + " ui = (\n", + " ctx.last_response\n", + " and ctx.last_response.misc\n", + " and ctx.last_response.misc.get(\"ui\")\n", + " )\n", + " if ui and ui.buttons:\n", + " try:\n", + " chosen_button = ui.buttons[int(ctx.last_request.text)]\n", + " except (IndexError, ValueError):\n", + " raise ValueError(\n", + " \"Type in the index of the correct option \"\n", + " \"to choose from the buttons.\"\n", + " )\n", + " ctx.last_request = Message(misc={\"payload\": chosen_button.payload})" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "70ac0623", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:07.419597Z", + "iopub.status.busy": "2023-11-21T17:09:07.419383Z", + "iopub.status.idle": "2023-11-21T17:09:07.434371Z", + "shell.execute_reply": "2023-11-21T17:09:07.433624Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Starting test! What's 2 + 2? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '5', 'payload': '5'}, {'text': '4', 'payload': '4'}]}}'\n", + "(user) >>> text='0'\n", + " (bot) <<< text='Starting test! What's 2 + 2? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '5', 'payload': '5'}, {'text': '4', 'payload': '4'}]}}'\n", + "(user) >>> text='1'\n", + " (bot) <<< text='Next question: what's 6 * 8? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '38', 'payload': '38'}, {'text': '48', 'payload': '48'}]}}'\n", + "(user) >>> text='0'\n", + " (bot) <<< text='Next question: what's 6 * 8? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '38', 'payload': '38'}, {'text': '48', 'payload': '48'}]}}'\n", + "(user) >>> text='1'\n", + " (bot) <<< text='What's 114 + 115? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '229', 'payload': '229'}, {'text': '283', 'payload': '283'}]}}'\n", + "(user) >>> text='1'\n", + " (bot) <<< text='What's 114 + 115? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '229', 'payload': '229'}, {'text': '283', 'payload': '283'}]}}'\n", + "(user) >>> text='0'\n", + " (bot) <<< text='Success!'\n", + "(user) >>> text='ok'\n", + " (bot) <<< text='Finishing test'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"root\", \"start\"),\n", + " fallback_label=(\"root\", \"fallback\"),\n", + " pre_services=[process_request],\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(\n", + " pipeline,\n", + " happy_path,\n", + " ) # For response object with `happy_path` string comparing,\n", + " # a special `generics_comparer` comparator is used\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.responses.3_media.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.3_media.ipynb new file mode 100644 index 0000000000..56ac103748 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.3_media.ipynb @@ -0,0 +1,255 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "151003e3", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Responses: 3. Media\n", + "\n", + "Here, [Attachments](../apiref/dff.script.core.message.rst#dff.script.core.message.Attachments) class is shown.\n", + "Attachments can be used for attaching different media elements\n", + "(such as [Image](../apiref/dff.script.core.message.rst#dff.script.core.message.Image), [Document](../apiref/dff.script.core.message.rst#dff.script.core.message.Document)\n", + "or [Audio](../apiref/dff.script.core.message.rst#dff.script.core.message.Audio)).\n", + "\n", + "They can be attached to any message but will only work if the chosen\n", + "[messenger interface](../apiref/index_messenger_interfaces.rst) supports them." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "dba7470b", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:09.247928Z", + "iopub.status.busy": "2023-11-21T17:09:09.247578Z", + "iopub.status.idle": "2023-11-21T17:09:11.611323Z", + "shell.execute_reply": "2023-11-21T17:09:11.610446Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3cb2e07a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:11.614511Z", + "iopub.status.busy": "2023-11-21T17:09:11.614070Z", + "iopub.status.idle": "2023-11-21T17:09:12.336131Z", + "shell.execute_reply": "2023-11-21T17:09:12.335410Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "from dff.script import RESPONSE, TRANSITIONS\n", + "from dff.script.conditions import std_conditions as cnd\n", + "\n", + "from dff.script.core.message import Attachments, Image, Message\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "4fb0d3bb", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:12.339471Z", + "iopub.status.busy": "2023-11-21T17:09:12.338968Z", + "iopub.status.idle": "2023-11-21T17:09:12.350136Z", + "shell.execute_reply": "2023-11-21T17:09:12.349441Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "img_url = \"https://www.python.org/static/img/python-logo.png\"\n", + "toy_script = {\n", + " \"root\": {\n", + " \"start\": {\n", + " RESPONSE: Message(text=\"\"),\n", + " TRANSITIONS: {(\"pics\", \"ask_picture\"): cnd.true()},\n", + " },\n", + " \"fallback\": {\n", + " RESPONSE: Message(\n", + " text=\"Final node reached, send any message to restart.\"\n", + " ),\n", + " TRANSITIONS: {(\"pics\", \"ask_picture\"): cnd.true()},\n", + " },\n", + " },\n", + " \"pics\": {\n", + " \"ask_picture\": {\n", + " RESPONSE: Message(text=\"Please, send me a picture url\"),\n", + " TRANSITIONS: {\n", + " (\"pics\", \"send_one\", 1.1): cnd.regexp(r\"^http.+\\.png$\"),\n", + " (\"pics\", \"send_many\", 1.0): cnd.regexp(\n", + " f\"{img_url} repeat 10 times\"\n", + " ),\n", + " (\"pics\", \"repeat\", 0.9): cnd.true(),\n", + " },\n", + " },\n", + " \"send_one\": {\n", + " RESPONSE: Message(\n", + " text=\"here's my picture!\",\n", + " attachments=Attachments(files=[Image(source=img_url)]),\n", + " ),\n", + " TRANSITIONS: {(\"root\", \"fallback\"): cnd.true()},\n", + " },\n", + " \"send_many\": {\n", + " RESPONSE: Message(\n", + " text=\"Look at my pictures\",\n", + " attachments=Attachments(files=[Image(source=img_url)] * 10),\n", + " ),\n", + " TRANSITIONS: {(\"root\", \"fallback\"): cnd.true()},\n", + " },\n", + " \"repeat\": {\n", + " RESPONSE: Message(\n", + " text=\"I cannot find the picture. Please, try again.\"\n", + " ),\n", + " TRANSITIONS: {\n", + " (\"pics\", \"send_one\", 1.1): cnd.regexp(r\"^http.+\\.png$\"),\n", + " (\"pics\", \"send_many\", 1.0): cnd.regexp(\n", + " r\"^http.+\\.png repeat 10 times\"\n", + " ),\n", + " (\"pics\", \"repeat\", 0.9): cnd.true(),\n", + " },\n", + " },\n", + " },\n", + "}\n", + "\n", + "happy_path = (\n", + " (Message(text=\"Hi\"), Message(text=\"Please, send me a picture url\")),\n", + " (\n", + " Message(text=\"no\"),\n", + " Message(text=\"I cannot find the picture. Please, try again.\"),\n", + " ),\n", + " (\n", + " Message(text=img_url),\n", + " Message(\n", + " text=\"here's my picture!\",\n", + " attachments=Attachments(files=[Image(source=img_url)]),\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"ok\"),\n", + " Message(text=\"Final node reached, send any message to restart.\"),\n", + " ),\n", + " (Message(text=\"ok\"), Message(text=\"Please, send me a picture url\")),\n", + " (\n", + " Message(text=f\"{img_url} repeat 10 times\"),\n", + " Message(\n", + " text=\"Look at my pictures\",\n", + " attachments=Attachments(files=[Image(source=img_url)] * 10),\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"ok\"),\n", + " Message(text=\"Final node reached, send any message to restart.\"),\n", + " ),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2518bbb2", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:12.352830Z", + "iopub.status.busy": "2023-11-21T17:09:12.352400Z", + "iopub.status.idle": "2023-11-21T17:09:13.200311Z", + "shell.execute_reply": "2023-11-21T17:09:13.199606Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Please, send me a picture url'\n", + "(user) >>> text='no'\n", + " (bot) <<< text='I cannot find the picture. Please, try again.'\n", + "(user) >>> text='https://www.python.org/static/img/python-logo.png'\n", + " (bot) <<< text='here's my picture!' attachments='{'files': [{'source': Url('https://www.python.org/static/img/python-logo.png')}]}'\n", + "(user) >>> text='ok'\n", + " (bot) <<< text='Final node reached, send any message to restart.'\n", + "(user) >>> text='ok'\n", + " (bot) <<< text='Please, send me a picture url'\n", + "(user) >>> text='https://www.python.org/static/img/python-logo.png repeat 10 times'\n", + " (bot) <<< text='Look at my pictures' attachments='{'files': [{'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}]}'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='ok'\n", + " (bot) <<< text='Final node reached, send any message to restart.'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"root\", \"start\"),\n", + " fallback_label=(\"root\", \"fallback\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.responses.4_multi_message.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.4_multi_message.ipynb new file mode 100644 index 0000000000..851329ba08 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.4_multi_message.ipynb @@ -0,0 +1,283 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d77c4bde", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Responses: 4. Multi Message\n", + "\n", + "This tutorial shows Multi Message usage.\n", + "\n", + "The [MultiMessage](../apiref/dff.script.core.message.rst#dff.script.core.message.MultiMessage) represents a combination of several messages.\n", + "\n", + "Let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e71ea370", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:15.107032Z", + "iopub.status.busy": "2023-11-21T17:09:15.106457Z", + "iopub.status.idle": "2023-11-21T17:09:17.469303Z", + "shell.execute_reply": "2023-11-21T17:09:17.468420Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "12e8eca2", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:17.472247Z", + "iopub.status.busy": "2023-11-21T17:09:17.472021Z", + "iopub.status.idle": "2023-11-21T17:09:18.199756Z", + "shell.execute_reply": "2023-11-21T17:09:18.199129Z" + } + }, + "outputs": [], + "source": [ + "\n", + "from dff.script import TRANSITIONS, RESPONSE, Message, MultiMessage\n", + "import dff.script.conditions as cnd\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c5b6fba9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:18.203164Z", + "iopub.status.busy": "2023-11-21T17:09:18.202846Z", + "iopub.status.idle": "2023-11-21T17:09:18.215669Z", + "shell.execute_reply": "2023-11-21T17:09:18.215044Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"greeting_flow\": {\n", + " \"start_node\": { # This is an initial node,\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " # If \"Hi\" == request of user then we make the transition\n", + " },\n", + " \"node1\": {\n", + " RESPONSE: MultiMessage(\n", + " messages=[\n", + " Message(text=\"Hi, what is up?\", misc={\"confidences\": 0.85}),\n", + " Message(\n", + " text=\"Hello, how are you?\", misc={\"confidences\": 0.9}\n", + " ),\n", + " ]\n", + " ),\n", + " TRANSITIONS: {\n", + " \"node2\": cnd.exact_match(Message(text=\"I'm fine, how are you?\"))\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " \"node3\": cnd.exact_match(\n", + " Message(text=\"Let's talk about music.\")\n", + " )\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about that now.\"),\n", + " TRANSITIONS: {\n", + " \"node4\": cnd.exact_match(Message(text=\"Ok, goodbye.\"))\n", + " },\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"bye\"),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " \"fallback_node\": { # We get to this node\n", + " # if an error occurred while the agent was running.\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " }\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (\n", + " Message(text=\"Hi\"),\n", + " MultiMessage(\n", + " messages=[\n", + " Message(text=\"Hi, what is up?\", misc={\"confidences\": 0.85}),\n", + " Message(text=\"Hello, how are you?\", misc={\"confidences\": 0.9}),\n", + " ]\n", + " ),\n", + " ), # start_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about that now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")), # node3 -> node4\n", + " (\n", + " Message(text=\"Hi\"),\n", + " MultiMessage(\n", + " messages=[\n", + " Message(text=\"Hi, what is up?\", misc={\"confidences\": 0.85}),\n", + " Message(text=\"Hello, how are you?\", misc={\"confidences\": 0.9}),\n", + " ]\n", + " ),\n", + " ), # node4 -> node1\n", + " (\n", + " Message(text=\"stop\"),\n", + " Message(text=\"Ooops\"),\n", + " ),\n", + " # node1 -> fallback_node\n", + " (\n", + " Message(text=\"one\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"help\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"nope\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"Hi\"),\n", + " MultiMessage(\n", + " messages=[\n", + " Message(text=\"Hi, what is up?\", misc={\"confidences\": 0.85}),\n", + " Message(text=\"Hello, how are you?\", misc={\"confidences\": 0.9}),\n", + " ]\n", + " ),\n", + " ), # fallback_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about that now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")), # node3 -> node4\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e53f58d4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:18.218543Z", + "iopub.status.busy": "2023-11-21T17:09:18.218136Z", + "iopub.status.idle": "2023-11-21T17:09:18.234529Z", + "shell.execute_reply": "2023-11-21T17:09:18.233879Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< messages='[{'text': 'Hi, what is up?', 'misc': {'confidences': 0.85}}, {'text': 'Hello, how are you?', 'misc': {'confidences': 0.9}}]'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about that now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< messages='[{'text': 'Hi, what is up?', 'misc': {'confidences': 0.85}}, {'text': 'Hello, how are you?', 'misc': {'confidences': 0.9}}]'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='one'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='help'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='nope'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< messages='[{'text': 'Hi, what is up?', 'misc': {'confidences': 0.85}}, {'text': 'Hello, how are you?', 'misc': {'confidences': 0.9}}]'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about that now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + } + ], + "source": [ + "\n", + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.stats.1_extractor_functions.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.stats.1_extractor_functions.ipynb new file mode 100644 index 0000000000..e56f50e204 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.stats.1_extractor_functions.ipynb @@ -0,0 +1,289 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8948e07a", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 1. Extractor Functions\n", + "\n", + "The following example covers the basics of using the `stats` module.\n", + "\n", + "Statistics are collected from pipeline services by extractor functions\n", + "that report the state of one or more pipeline components. The `stats` module\n", + "provides several default extractors, but users are free to define their own\n", + "extractor functions. You can find API reference for default extractors\n", + "[here](../apiref/dff.stats.default_extractors.rst).\n", + "\n", + "It is a preferred practice to define extractors as asynchronous functions.\n", + "Extractors need to have the following uniform signature:\n", + "the expected arguments are always `Context`, `Pipeline`, and `ExtraHandlerRuntimeInfo`,\n", + "while the expected return value is an arbitrary `dict` or a `None`.\n", + "The returned value gets persisted to Clickhouse as JSON\n", + "which is why it can contain arbitrarily nested dictionaries,\n", + "but it cannot contain any complex objects that cannot be trivially serialized.\n", + "\n", + "The output of these functions will be captured by an OpenTelemetry instrumentor and directed to\n", + "the Opentelemetry collector server which in its turn batches and persists data\n", + "to Clickhouse or other OLAP storages.\n", + "\n", + "
\n", + "\n", + "Both the Opentelemetry collector and the Clickhouse instance must be running\n", + "during statistics collection. If you cloned the DFF repo, launch them using `docker compose`:\n", + "```bash\n", + "docker compose --profile stats up\n", + "```\n", + "\n", + "
\n", + "\n", + "For more information on OpenTelemetry instrumentation,\n", + "refer to the body of this tutorial as well as [OpenTelemetry documentation](\n", + "https://opentelemetry.io/docs/instrumentation/python/manual/\n", + ")." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "dcf6caa9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:19.945597Z", + "iopub.status.busy": "2023-11-21T17:09:19.945295Z", + "iopub.status.idle": "2023-11-21T17:09:22.445320Z", + "shell.execute_reply": "2023-11-21T17:09:22.444360Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[stats]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "343a2d08", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:22.448924Z", + "iopub.status.busy": "2023-11-21T17:09:22.448318Z", + "iopub.status.idle": "2023-11-21T17:09:23.348447Z", + "shell.execute_reply": "2023-11-21T17:09:23.347826Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import asyncio\n", + "\n", + "from dff.script import Context\n", + "from dff.pipeline import (\n", + " Pipeline,\n", + " ACTOR,\n", + " Service,\n", + " ExtraHandlerRuntimeInfo,\n", + " to_service,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH\n", + "from dff.stats import OtelInstrumentor, default_extractors\n", + "from dff.utils.testing import is_interactive_mode, check_happy_path" + ] + }, + { + "cell_type": "markdown", + "id": "9b7751a6", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "The cells below configure log export with the help of OTLP instrumentation.\n", + "\n", + "* The initial step is to configure the export destination.\n", + "`from_url` method of the `OtelInstrumentor` class simplifies this task\n", + "allowing you to only pass the url of the OTLP Collector server.\n", + "\n", + "* Alternatively, you can use the utility functions provided by the `stats` module:\n", + "`set_logger_destination`, `set_tracer_destination`, or `set_meter_destination`. These accept\n", + "an appropriate Opentelemetry exporter instance and bind it to provider classes.\n", + "\n", + "* Nextly, the `OtelInstrumentor` class should be constructed to log the output\n", + "of extractor functions. Custom extractors need to be decorated\n", + "with the `OtelInstrumentor` instance. Default extractors are instrumented\n", + "by calling the `instrument` method.\n", + "\n", + "* The entirety of the process is illustrated in the example below." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "645c06f8", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:23.351894Z", + "iopub.status.busy": "2023-11-21T17:09:23.351371Z", + "iopub.status.idle": "2023-11-21T17:09:23.359239Z", + "shell.execute_reply": "2023-11-21T17:09:23.358652Z" + } + }, + "outputs": [], + "source": [ + "dff_instrumentor = OtelInstrumentor.from_url(\"grpc://localhost:4317\")\n", + "dff_instrumentor.instrument()" + ] + }, + { + "cell_type": "markdown", + "id": "7b0b4cae", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "The following cell shows a custom extractor function. The data obtained from\n", + "the context and the runtime information gets shaped as a dict and returned\n", + "from the function body. The `dff_instrumentor` decorator then ensures\n", + "that the output is logged by OpenTelemetry." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "086c0472", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:23.362123Z", + "iopub.status.busy": "2023-11-21T17:09:23.361708Z", + "iopub.status.idle": "2023-11-21T17:09:23.365394Z", + "shell.execute_reply": "2023-11-21T17:09:23.364731Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "# decorated by an OTLP Instrumentor instance\n", + "@dff_instrumentor\n", + "async def get_service_state(ctx: Context, _, info: ExtraHandlerRuntimeInfo):\n", + " # extract the execution state of a target service\n", + " data = {\n", + " \"execution_state\": info.component.execution_state,\n", + " }\n", + " # return the state as an arbitrary dict for further logging\n", + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "8b13e48f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:23.368044Z", + "iopub.status.busy": "2023-11-21T17:09:23.367643Z", + "iopub.status.idle": "2023-11-21T17:09:23.371387Z", + "shell.execute_reply": "2023-11-21T17:09:23.370739Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "# configure `get_service_state` to run after the `heavy_service`\n", + "@to_service(after_handler=[get_service_state])\n", + "async def heavy_service(ctx: Context):\n", + " _ = ctx # get something from ctx if needed\n", + " await asyncio.sleep(0.02)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "4f2f1ece", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:23.374316Z", + "iopub.status.busy": "2023-11-21T17:09:23.373777Z", + "iopub.status.idle": "2023-11-21T17:09:23.509204Z", + "shell.execute_reply": "2023-11-21T17:09:23.508464Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(\n", + " {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " heavy_service,\n", + " Service(\n", + " handler=ACTOR,\n", + " after_handler=[default_extractors.get_current_label],\n", + " ),\n", + " ],\n", + " }\n", + ")\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " pipeline.run()" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.stats.2_pipeline_integration.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.stats.2_pipeline_integration.ipynb new file mode 100644 index 0000000000..8e8d8c5305 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.stats.2_pipeline_integration.ipynb @@ -0,0 +1,274 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f7b31b72", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 2. Pipeline Integration\n", + "\n", + "In the DFF ecosystem, extractor functions act as regular extra handlers (\n", + "[see the pipeline module documentation](../tutorials/tutorials.pipeline.6_extra_handlers_basic.py)\n", + ").\n", + "Hence, you can decorate any part of your pipeline, including services,\n", + "service groups and the pipeline as a whole, to obtain the statistics\n", + "specific for that component. Some examples of this functionality\n", + "are showcased in this tutorial.\n", + "\n", + "
\n", + "\n", + "Both the Opentelemetry collector and the Clickhouse instance must be running\n", + "during statistics collection. If you cloned the DFF repo, launch them using `docker compose`:\n", + "```bash\n", + "docker compose --profile stats up\n", + "```\n", + "\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "70906965", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:25.384371Z", + "iopub.status.busy": "2023-11-21T17:09:25.383931Z", + "iopub.status.idle": "2023-11-21T17:09:27.900179Z", + "shell.execute_reply": "2023-11-21T17:09:27.899291Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[stats]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5c98e7da", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:27.903309Z", + "iopub.status.busy": "2023-11-21T17:09:27.902850Z", + "iopub.status.idle": "2023-11-21T17:09:28.775332Z", + "shell.execute_reply": "2023-11-21T17:09:28.774700Z" + } + }, + "outputs": [], + "source": [ + "import asyncio\n", + "\n", + "from dff.script import Context\n", + "from dff.pipeline import (\n", + " Pipeline,\n", + " ACTOR,\n", + " Service,\n", + " ExtraHandlerRuntimeInfo,\n", + " ServiceGroup,\n", + " GlobalExtraHandlerType,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH\n", + "from dff.stats import (\n", + " OtelInstrumentor,\n", + " set_logger_destination,\n", + " set_tracer_destination,\n", + ")\n", + "from dff.stats import OTLPLogExporter, OTLPSpanExporter\n", + "from dff.stats import default_extractors\n", + "from dff.utils.testing import is_interactive_mode, check_happy_path" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5ee97a14", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:28.778699Z", + "iopub.status.busy": "2023-11-21T17:09:28.778238Z", + "iopub.status.idle": "2023-11-21T17:09:28.786710Z", + "shell.execute_reply": "2023-11-21T17:09:28.786001Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "set_logger_destination(OTLPLogExporter(\"grpc://localhost:4317\", insecure=True))\n", + "set_tracer_destination(OTLPSpanExporter(\"grpc://localhost:4317\", insecure=True))\n", + "dff_instrumentor = OtelInstrumentor()\n", + "dff_instrumentor.instrument()\n", + "\n", + "\n", + "# example extractor function\n", + "@dff_instrumentor\n", + "async def get_service_state(ctx: Context, _, info: ExtraHandlerRuntimeInfo):\n", + " # extract execution state of service from info\n", + " data = {\n", + " \"execution_state\": info.component.execution_state,\n", + " }\n", + " # return a record to save into connected database\n", + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "30b81256", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:28.789347Z", + "iopub.status.busy": "2023-11-21T17:09:28.789145Z", + "iopub.status.idle": "2023-11-21T17:09:28.792331Z", + "shell.execute_reply": "2023-11-21T17:09:28.791724Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "# example service\n", + "async def heavy_service(ctx: Context):\n", + " _ = ctx # get something from ctx if needed\n", + " await asyncio.sleep(0.02)" + ] + }, + { + "cell_type": "markdown", + "id": "9310938c", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 0 + }, + "source": [ + "\n", + "The many ways in which you can use extractor functions are shown in the following\n", + "pipeline definition. The functions are used to obtain statistics from respective components:\n", + "\n", + "* A service group of two `heavy_service` instances.\n", + "* An `Actor` service.\n", + "* The pipeline as a whole.\n", + "\n", + "As is the case with the regular extra handler functions, you can wire the extractors\n", + "to run either before or after the target service. As a result, you can compare\n", + "the pre-service and post-service states of the context to measure the performance\n", + "of various components, etc.\n", + "\n", + "Some extractors, like `get_current_label`, have restrictions in terms of their run stage:\n", + "for instance, `get_current_label` needs to only be used as an `after_handler`\n", + "to function correctly." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c1013c78", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:28.795111Z", + "iopub.status.busy": "2023-11-21T17:09:28.794738Z", + "iopub.status.idle": "2023-11-21T17:09:28.940555Z", + "shell.execute_reply": "2023-11-21T17:09:28.939799Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(\n", + " {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " ServiceGroup(\n", + " before_handler=[default_extractors.get_timing_before],\n", + " after_handler=[\n", + " get_service_state,\n", + " default_extractors.get_timing_after,\n", + " ],\n", + " components=[\n", + " {\"handler\": heavy_service},\n", + " {\"handler\": heavy_service},\n", + " ],\n", + " ),\n", + " Service(\n", + " handler=ACTOR,\n", + " before_handler=[\n", + " default_extractors.get_timing_before,\n", + " ],\n", + " after_handler=[\n", + " get_service_state,\n", + " default_extractors.get_current_label,\n", + " default_extractors.get_timing_after,\n", + " ],\n", + " ),\n", + " ],\n", + " }\n", + ")\n", + "pipeline.add_global_handler(\n", + " GlobalExtraHandlerType.BEFORE_ALL, default_extractors.get_timing_before\n", + ")\n", + "pipeline.add_global_handler(\n", + " GlobalExtraHandlerType.AFTER_ALL, default_extractors.get_timing_after\n", + ")\n", + "pipeline.add_global_handler(GlobalExtraHandlerType.AFTER_ALL, get_service_state)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " pipeline.run()" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.utils.1_cache.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.utils.1_cache.ipynb new file mode 100644 index 0000000000..ae77ee14db --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.utils.1_cache.ipynb @@ -0,0 +1,203 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7471d71c", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 1. Cache\n", + "\n", + "In this tutorial use of\n", + "[cache](../apiref/dff.utils.turn_caching.singleton_turn_caching.rst#dff.utils.turn_caching.singleton_turn_caching.cache)\n", + "function is demonstrated.\n", + "\n", + "This function is used a lot like `functools.cache` function and\n", + "helps by saving results of heavy function execution and avoiding recalculation.\n", + "\n", + "Caches are kept in a library-wide singleton\n", + "and are cleared at the end of each turn." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f0752469", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:30.825425Z", + "iopub.status.busy": "2023-11-21T17:09:30.825029Z", + "iopub.status.idle": "2023-11-21T17:09:33.254733Z", + "shell.execute_reply": "2023-11-21T17:09:33.253763Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "333f097e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:33.258247Z", + "iopub.status.busy": "2023-11-21T17:09:33.257800Z", + "iopub.status.idle": "2023-11-21T17:09:33.984878Z", + "shell.execute_reply": "2023-11-21T17:09:33.984104Z" + } + }, + "outputs": [], + "source": [ + "from dff.script.conditions import true\n", + "from dff.script import Context, TRANSITIONS, RESPONSE, Message\n", + "from dff.script.labels import repeat\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.turn_caching import cache\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "\n", + "\n", + "external_data = {\"counter\": 0}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "0ef5f8c0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:33.988620Z", + "iopub.status.busy": "2023-11-21T17:09:33.988269Z", + "iopub.status.idle": "2023-11-21T17:09:33.993258Z", + "shell.execute_reply": "2023-11-21T17:09:33.992566Z" + } + }, + "outputs": [], + "source": [ + "@cache\n", + "def cached_response(_):\n", + " \"\"\"\n", + " This function execution result will be saved\n", + " for any set of given argument(s).\n", + " If the function will be called again\n", + " with the same arguments it will prevent it from execution.\n", + " The cached values will be used instead.\n", + " The cache is stored in a library-wide singleton,\n", + " that is cleared in the end of execution of actor and/or pipeline.\n", + " \"\"\"\n", + " external_data[\"counter\"] += 1\n", + " return external_data[\"counter\"]\n", + "\n", + "\n", + "def response(ctx: Context, _, *__, **___) -> Message:\n", + " if ctx.validation:\n", + " return Message()\n", + " return Message(\n", + " text=f\"{cached_response(1)}-{cached_response(2)}-\"\n", + " f\"{cached_response(1)}-{cached_response(2)}\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "088d0375", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:33.995868Z", + "iopub.status.busy": "2023-11-21T17:09:33.995646Z", + "iopub.status.idle": "2023-11-21T17:09:34.000789Z", + "shell.execute_reply": "2023-11-21T17:09:33.999901Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"flow\": {\"node1\": {TRANSITIONS: {repeat(): true()}, RESPONSE: response}}\n", + "}\n", + "\n", + "happy_path = (\n", + " (Message(), Message(text=\"1-2-1-2\")),\n", + " (Message(), Message(text=\"3-4-3-4\")),\n", + " (Message(), Message(text=\"5-6-5-6\")),\n", + ")\n", + "\n", + "pipeline = Pipeline.from_script(toy_script, start_label=(\"flow\", \"node1\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9a491c82", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:34.004830Z", + "iopub.status.busy": "2023-11-21T17:09:34.004222Z", + "iopub.status.idle": "2023-11-21T17:09:34.011955Z", + "shell.execute_reply": "2023-11-21T17:09:34.011155Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> \n", + " (bot) <<< text='1-2-1-2'\n", + "(user) >>> \n", + " (bot) <<< text='3-4-3-4'\n", + "(user) >>> \n", + " (bot) <<< text='5-6-5-6'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.utils.2_lru_cache.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.utils.2_lru_cache.ipynb new file mode 100644 index 0000000000..87c3817eda --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.utils.2_lru_cache.ipynb @@ -0,0 +1,201 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "935e23a5", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 2. LRU Cache\n", + "\n", + "In this tutorial use of\n", + "[lru_cache](../apiref/dff.utils.turn_caching.singleton_turn_caching.rst#dff.utils.turn_caching.singleton_turn_caching.lru_cache)\n", + "function is demonstrated.\n", + "\n", + "This function is used a lot like `functools.lru_cache` function and\n", + "helps by saving results of heavy function execution and avoiding recalculation.\n", + "\n", + "Caches are kept in a library-wide singleton\n", + "and are cleared at the end of each turn.\n", + "\n", + "Maximum size parameter limits the amount of function execution results cached." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6e00a0b4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:35.701107Z", + "iopub.status.busy": "2023-11-21T17:09:35.700364Z", + "iopub.status.idle": "2023-11-21T17:09:38.161149Z", + "shell.execute_reply": "2023-11-21T17:09:38.160271Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d2be04b3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:38.164549Z", + "iopub.status.busy": "2023-11-21T17:09:38.163916Z", + "iopub.status.idle": "2023-11-21T17:09:38.952069Z", + "shell.execute_reply": "2023-11-21T17:09:38.951425Z" + } + }, + "outputs": [], + "source": [ + "from dff.script.conditions import true\n", + "from dff.script import Context, TRANSITIONS, RESPONSE, Message\n", + "from dff.script.labels import repeat\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.turn_caching import lru_cache\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "\n", + "external_data = {\"counter\": 0}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "1db412bc", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:38.955213Z", + "iopub.status.busy": "2023-11-21T17:09:38.954897Z", + "iopub.status.idle": "2023-11-21T17:09:38.959743Z", + "shell.execute_reply": "2023-11-21T17:09:38.959128Z" + } + }, + "outputs": [], + "source": [ + "@lru_cache(maxsize=2)\n", + "def cached_response(_):\n", + " \"\"\"\n", + " This function will work exactly the same as the one from previous\n", + " tutorial with only one exception.\n", + " Only 2 results will be stored;\n", + " when the function will be executed with third arguments set,\n", + " the least recent result will be deleted.\n", + " \"\"\"\n", + " external_data[\"counter\"] += 1\n", + " return external_data[\"counter\"]\n", + "\n", + "\n", + "def response(ctx: Context, _, *__, **___) -> Message:\n", + " if ctx.validation:\n", + " return Message()\n", + " return Message(\n", + " text=f\"{cached_response(1)}-{cached_response(2)}-{cached_response(3)}-\"\n", + " f\"{cached_response(2)}-{cached_response(1)}\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "bfe0d602", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:38.962353Z", + "iopub.status.busy": "2023-11-21T17:09:38.961974Z", + "iopub.status.idle": "2023-11-21T17:09:38.966860Z", + "shell.execute_reply": "2023-11-21T17:09:38.966224Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"flow\": {\"node1\": {TRANSITIONS: {repeat(): true()}, RESPONSE: response}}\n", + "}\n", + "\n", + "happy_path = (\n", + " (Message(), Message(text=\"1-2-3-2-4\")),\n", + " (Message(), Message(text=\"5-6-7-6-8\")),\n", + " (Message(), Message(text=\"9-10-11-10-12\")),\n", + ")\n", + "\n", + "pipeline = Pipeline.from_script(toy_script, start_label=(\"flow\", \"node1\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "da7fa476", + "metadata": { + "execution": { + "iopub.execute_input": "2023-11-21T17:09:38.969436Z", + "iopub.status.busy": "2023-11-21T17:09:38.969086Z", + "iopub.status.idle": "2023-11-21T17:09:38.975664Z", + "shell.execute_reply": "2023-11-21T17:09:38.975046Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> \n", + " (bot) <<< text='1-2-3-2-4'\n", + "(user) >>> \n", + " (bot) <<< text='5-6-7-6-8'\n", + "(user) >>> \n", + " (bot) <<< text='9-10-11-10-12'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/reference.doctree b/.doctrees/reference.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a7015a7626217c48a28afcb92cc67d31fad9c9d2 GIT binary patch literal 3086 zcmaJ@TW=gS6i%D&W;e+uP1+!!4N##%E1E1qJRqL92|gRPhAa$>_J8#eLIFWc|itf1V z$-dlqUO$q<(DTY`v9c9LU;g<0dsbuu_F$hBp?B+NF((H$w_nzcNBxpR-`Dae3|Z%} z+z$QL&q=tYRUzt0HRWNKdvDdW@`#V(*;c6|-**ztor4hHy@Kb>*C4IRj zCF0yVMEB0Ko7EKQ7$hbyO;w~TnQM|Nx8RgXycMfiZTH?qu<`*C`ab>-@&6G2$N1kv zNxPJX9c0p~82qD2xXVk0&9N#{F=q)!v5Q&#S3L=*>pQ0KC=zqtSU$sPQh94lC7rS< zsw#7CFXHxtwQc0viDD)!Q!r&Sp0rj@*3?Q>idaj!;Lh5XOROq=G=03j;kj=-dV5U{ z1bBqQB4Tk)gnd;cx=KZ+bdv%3h5Sl>Bfpj3$*1xMIT2xy^LZ*tFY9MFfEiv!cmrWG zZKn0B(3dJr!G`NFYK?V*K~d#XKs&9UZH3(kerF1O1>IecYMJ;-ek4DUr}7DEehb(d z1GjQfztw7SDrPurYkqcVd07fubE@yUUR!Lke6~a@-2hUErSTCmbhd;;ydYYmjTLJ0 z1$@ZjE-Y?0_>VpVr%Qh~@z$|YJ_&cd<%QFna>z<+W)>)jtn7K?xo#5G>cqTNbl;6| zkW`j9&pL+hFC-1q!@vno)kPCK>bg>938!FA=>NiXg&KElt#2w{R=%Fd!$}y<1lY>~ zW}s}CazYBvODy)93mI;?z;d@;R#sy*LLnIS2-?NPJu2x{9gZ_&d||v;*#vq<)Et2c zHqVUB2~P(O+$$LfPCeJbV;k^rqvAB9b9r-5GP<)@EnpMN|Xo+3gA9a1#-kdW0O)N2*b)} zXP=!ph41_8n@m`1ER(!QH86>?Beui?u1%&_tn{LlI-G9oY?zREU>c)K2Np-~uWxLe z47Vu&0L@9{M*n?IX=}CNbBX!f*0V}K7ye>7fA-AqgIVAnp}8;zHo^XHWE=3 zWGzL#_t2J5r)CL!9uc_!n_>nOYLzQrKi&H0-(EN?Rd?dLSu$-B-n<~;G?5(s;7M!fhCIh4(lc0pzXMPE3kPT{KQhMvj^zS{7Hj5Oq2)IbehnG_7Zf(udzk4sJxXk9RobEO%^JL&>6u{;2grbAv;iT>z zj@P8k_yjSmW!<7rB*Nqc`3?!2??+O}Omg|W3PY0ms}gR~fEDjg9#zV(z_R(vt zr{;dLX{+7AEPxJ@V4?#^>adp>t&wKLfG1?<>sJ06S$J9h1TJ9O1*>RYijx*xKkgdI ens~1h#{%xP^9TSlquTAJ)a%-|K(BW-J^v5da?c$A literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials.doctree b/.doctrees/tutorials.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ba45e21adfa17c190adad76a3cfa3406112fb9fa GIT binary patch literal 6975 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 Cr%UDl literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/index_context_storages.doctree b/.doctrees/tutorials/index_context_storages.doctree new file mode 100644 index 0000000000000000000000000000000000000000..039bf670274de4807e0a64c032620690315060c6 GIT binary patch literal 3660 zcmcIn-;Wzb5?->g*WMq_?m}`Pi10lGHYjV8I}Q*}aOi}TmHa>=bUIyVdS=@0*3NVf z-91_R0qG7Yh?V+{=KtVdx`_y6s`@h7gY>4j01PMLRG&`7z+GtH!bip@dLw<0&A z#=%aiiYxZK;~qcZ!VK|`$|0?+I-N1eG_@=ne*XB$P{@qUhf|TWp=PCK2FD9I8(OGp zL3154vlH$SE^L>+0w@a}Hi9?mGq<5lXgo!aKYha&m&rjukd%Yg_K{)7s_m zapSVi-_g%()GbU%DgHiF?IrDosv9R7t5-DDj$*J62hm*P&~4 zVkD~&t(V*&t#qJs(lF`7?Jp&f;U=zUm<=rm4e_XLa8n&93>@LQU(mcl;@cM4Rh2C( z>nD6Xas8&dDGiMFQFF{#T9jDq)dv!sa*pM0v#fNE)dBJZbf@QG7YBDjk{8|`PnEJ# zS+=%$_L4gY{EI3f^QqE>hh%`>C`xd5?7s#sU#}%BXQ3k-av>}y%O-^r8-u26Aq;50 zN?Ve%XAI%H;dVLA+hxZcvAGCMf!fL}l{&7Iv80;exWNV05>bPOX0(8$j})aWJj#FX z20|i61Xxm80Fvuhc6$2ZsS)`8#??*2v{ssM;1;xvh=;4D=s~yYNUwS6L@(am-PqZ1 z!GCgt+Ue>7OVc;5Zfsb(!|(tUn&F5~9^3UnPUWmZYecv+wC@{$v3nUqiqaVY>`^8- zCXoBYb%Bj3-iUCB4225Tn0wxJgD?t_mB`%?sI7ynDoWDUAEFus0;Q)VW+Aw_6(zCy zL+)3i(y%I11Y-rX4%r;U&&axEERocbXTk`8G58`NY?|cZA!I|@>DNTpGN^)C>uFL73QK4)<4?%&wo2^P_h!8 zV+y{LX$;wZkOZbC0UPdBZf$8k8jm41qjF)nk|U*OWAAPU&3FZ963YrC2+aZW6e~~f zz55;_I?&T}!+nsf+`qMSANoV6*mI^wg4t<21Na|vTjV&bkM;o&Wgzvlp1X^ZEJ%ya z_5q|G=`P)&Sx8Iggo_!^@rff8nyPpE2HnJxuPeaXAXG2Mb-g6HN@?9z+})H@+y|+z z;f6TJAckI4m1qWG{EpqBp#iiKNQ9iC3YNTZ9GJpX$%dXNLiy&3)?f_7-ML5ApzmZr z@B&xhj9DCVJB8LcVFeXA!B2(2v+>$T%?yZg&8Ic1UAk>1pLxt{u2-`O;EQ6!Tp4G0 zVyT`n8|U96Tnfd79v&DR-88VbJH8^VCufM^ZQ3rn0Yn(OA>RqY`a6HlzcsEO1a?v4 zhTnMp{L=8(@c*~`fpG`x$%@tosX)rZ@$gtn0xFk!^)=TewH^k1B)3RZ-sV55zOo@~ zwfk2*_LrwdqvI?7!LHf{I={W?tJ%Rk0M1A;t)eWv+e;ND+c=7&Y3zL3$bZ1&pZm{I v{rKqu9O1`^36p&IZF1aF#})BjD~>7KYi1IZ$ShdxW`W%rA_)DuN=E+&dlj`U literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/index_interfaces.doctree b/.doctrees/tutorials/index_interfaces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e1460570cd2e70d2fd337d73fb8b6ccfd92bad37 GIT binary patch literal 4632 zcmcIo-Hseb6<&Kizx!kF#x@DD#c+{i4eU&u7!sL_C~$$2l}2E%5+txn)!j8y#dLRd zs;a%SfAx0Erhs2=NS&auX>RJOtOtSJgc|KaS1r1uKu#b^6pf)u+Dm zopby_<1ah=8~)E;))^P+v`?cbl@Zg0ZAUW96PB9dQE}_T;{D>lb`(9)GFKrh>;^PK zF5*bBw0MA*yH4MTSobRftxzT_`+39OKjuRB@QLM%>u+NeA5e(Z3W2!ZTcy6RLDWBR=o-Gyu4JV3?yiRAD#CLT@ zU0~b(yVXNhvWiwB(qKVtGPF z3MQT=m7yM#wgz>i2mUUINDWgX98C9>Hif+ui6PuiRU0esY;Q$WM)&|9dYiwVK5sErKCWS&Nkzudsx%g`vc9KmYilj6az+iySl{(wpVR|${B zgP~oz>UvWjNJY+#nbLhzMXG2=)L*#x90p(uNU<4*YnZKr%Uv59nSB~$*f|7ch}ax zURytzE%=C!0fwQy`#+EgL=l>aMKJ&;jHot{d2qgY?)|Sglxi7Hm?0sj#+x}hx0zQ- zENMhgeqEbTW^9Z$1eMCM)%nkLhoG%sG>JuhF2+w?#{7f-lmCnVoAKZJ1mV9M^7m)_ z_cQ*78UNsDgMT>Ve=JMV9N*6ZIe&i)r+@xNJpb)6y|p^$@VtzK8!LEjA)1HoHWqMp zqFyO_3Yr0^rL^cSs{N9sRq2|s%_VfA_AZRg^J-qK>u!Y~*sI{gRL9g249S!nqth!J zsD_b-#wCkXI-XQ=M;sUIZkQ|Aevzv48QSf+#P=mb+XiJiETDnis~gghlIT28W^MBw z8t34^x}|N(++?{ahI}xzovIs^3gGEPXiI_dB*S8>bV%T3f@QZ_<|@W&2b6^x8BW|= zIBqz;J1y+~NJ^7R!Wj6__KN!kU`=y`DE1xpPE6BrPR9%pkI->n zL{YQPV6KoVA}E4D3f#CxX=s~hB}Vv6L_|cuDr)Go;7z;hrWdjh*^2`3+KKWcbA`8r zAOhtBd6&GJYROajol!ls$jtYqA3r$$U~t8CLm{vL_*Ub zb{|rmvNcZ)q}et;#u1~>GpO%WYGmFA*z4{IPBc?K7g_48Ma9Q<3uPNuRW1S1J(piV zPC7wb1>xJ>&} zjR%Fj<~02gpa~XFa6!h8KrB0a;pIDs=&l-tYv!F~VgALrd88|Kpq(()7tD;j4^Y5> zn50U_*A+jXk8UcP6hIBSun1{>iX(8w44hmGp*0~ap&}-j?j6@lR&_^I6WHbIUI<^F2a; z_Zj~*w>!(X=*{kg0$6b8f~!*E(siy^o_|?V>fz3C>q#Kv8W>*n>YA|D?yOks%)RQ3vs~E!7@;vB&4MDFUxBvhE literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/index_pipeline.doctree b/.doctrees/tutorials/index_pipeline.doctree new file mode 100644 index 0000000000000000000000000000000000000000..844aa8590531f4e81a7db939d6574ecda3e5bc9a GIT binary patch literal 3886 zcmcInTW=h<6;>?oYFC$)WyfxU#OM}<6S;`A&9$vjph4RpfCVgq#3+iQF3XwWELqKv z6OtpX9s;xvDJ+Ct*-IM%X;8rn4-d~dJUo~09R9iYw;vvE#Xomw zDlX*wlxCS!88hAuGL_aPlh%LjAOFRF;g8)=(@UdjoigvXz>#uMWSU9;9Gj!SZ$)8F zTLn9*D%a$B&wcic3p2()D#x_8>SV?w)6}wT{OM=U#zJOnKF&qK#+p@{85}RNG8b-UDBEt1;8 zVZlM$A~SG?+er&*42bydNm@2vgRHKWi-e}yQq}7%gHF z98cY&C1dw>+WGlyl29X3;K z%HNFDKL8qhya^fZur1`1OHHeaX-_v%B9}ExmPEw!zKXs0@&yRr`BjI znDrwl+Fr-3rJ{xK0^~Y;=g014B!e^s4PFd|K0|M8T29X@ON+);El>1Z9lZ0B8>O`l z4U4qBV(Ru6l!)b1H!#eGCX1GT)V1&&)qvP%Xn4P&MU8NGLqK2EwyLe4^2yW<+y1RI z&}x{WksC|P3X8qwK!Q`wvD|H!wJxwaKwJPa>3P`2!MzaFEAQ^+N?EBaTiHB&$sL4F zgRCI)TbC?Fu7Ht?OwgPQmh8r+oC~Zl>E*RW*%k6Sn zbjzMQVsinnS!w|aEmP0+GM3ac95=e8TEc7K(2SO#3=yJ~g-iJtZX_gpM3_uf1}^W0 zwarg{dSV2=UtixOOlzeVr4Ek=Q&V)?!^YDqT6$57cMmsqHdOGxyHTTbX~07C_4SPn zNp~k)0EuQe{8Pk%y@GGlDWln&6nw-lnb({LXPlxI>^V zVZIS_&--o^hCQ+*xmyCcb&%C%g|5@)AG{g~0;#7Zrah=RjFg!DA@)mBWmuglg24$~ zci0>)kdal%m?G$G7s3b(j6oM#ouNq)F49`Lv#1Ny*gh^}PzkZfz<$uOkpmUE@xlzR`0=EF)BswjQ*$))- zd`3cTxL3Hfm3cCmfNV~yE6bHUReCn@?tb8mCV-PzRw6()PK>NNdGzD=;L(xJ(+%~3 zvQ+=ZLOp7ghKxOD`cyER$1_m>6K=}_hYc-FP(&F({A}PJA|*@GRcChr(hRNF?hbmW zrE|i?j2HODVNr$5-!~;ioqb-TtPNasFRq&EoWdT2z9~2OIXV&2=XC|} z4-bsk4O$pL>i|W_99giyg}VVMOr31-i87>bp=eW#VT?WZ$QtyS3>AC@6F6fQhulxW zbxv4GMM3Zw3OF0hK5D03q-&8ksCMnPnY{3rRNbIK6Lc6PBPQqgN+Fi&8MAT1KY~$6 zF7)7l;OLf1=U-hL{wn@| z!QV3OU^Q4#`XChuc{m;#8%n6k1z%(4Dy8AW69&O86IFEakE}0m5IgSSn#SSc)F^a! zO+V08+W_bHH+8i;=>Ncs6mvS#!n?gxVWy9d4m6FOU$ykFarrO(r^tRh&QM2qZW+Y8 jIk1C{HS%6Zjv?D?XAq>wEWFuvvw&_b5QKhRC#U}gg*Oq9 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/index_script.doctree b/.doctrees/tutorials/index_script.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3a9342f8104f0ec57d7488bb331c7495337d8831 GIT binary patch literal 4523 zcmcIoTZ;CoE%%8WtbkyZ_)&WHFl_ zjzz)_70VUVSYBk4LjzSMXrd2ep;&~$`Jpz-M#d^u@Xdz>@4Af#Z0a}r|5@at!pFe1 zbBY6-g74@Nbz9UJB}UdDU_LPQd5T@W29k(<8Krf?gH$XIc*VMmDerp7%8nbqjvE#CGwafHd1 z5hh`cDc8Oq9F=#~tA}M&k8rqG_-($#`4*aIO`PFv?^Z}qs1k4=`-O)m= z{_0oP8X+?MSICHJ5$WQO#n8P}>nxzKr2Q(1WEKm5^`*s&msz|Ao43Y6NC^HRg6i79}=jo;^LO9C5)I*v{)>MgDw>Dm4&8>2U@>!TF5(!RK6AU3$6C0fuF97 zf3Y(DdXnH{J^>UiPP#fhm#LtC0VEeDuM(6$Gbe+K=wo5?8c7)nQ~>@(slBkcOH!K{ z0Xwbfgu#;WUwe%Io&SUXlmCnH_XD8$Z-)H0GycJhe>mg6J6YqupYcDGRb!6FTe$JR zJ%Ov)SK{xlPw1_bB9Fi3?Hw%PuUj9W0m3EW1xN%C8c=SRjNS0FkgPaaZ=eaKap7d1 z2lHB5HxT^DJsp@O3EbzIWrD4jJx$9i zT^PEKX2y4M=qY=3k2qGIbx{pn`(2t?Fjn1Vwxu<>HN}t*hOS#Rh*E)%yD`?*hNd|N z+vS1;tDIuERSm65FxmyZpsYoweijS2JU5*e?)q3tlS#uGlP6c)u5V^QZe%)^DlH({ zLwhN5)P~T)YPfv1l(2;PrdE?PVK|xhd04SBs2V?n0UfMVh9v9}L-?+`El!hq*m6BK z6^NRl#_G9J%e7)QvJ)(~cSco)s6j(9nnKdW6-CS+s`!)J6B%MeSQg3H*BjThW_ALbHiQW+UP;n&7J_K<+8D`clON1q(>QGQOu7x;6^-7{^3J zMC_~LSWFAvc6bPi1&fz|DS;gaq){zYyh`*;o=Z z=g_*wrn%ING%W*4B10YtbSnX(`y>{cjuL;6YL}by)Igf;;4m7=Q1%!=O{GTWRomV4 zUswd)h%d~z8}BW~m2acO)&>pO)LpS&pV;j7puMAHm*t zyaZhyBR)Ocx41F6erqs*SoiaD!)4Z&YBDI?4X+ut08L_8iVHH~Rl@S)=U={yi0-Lz zwBp`N7VdA)-6LJ82kj|SeZkB)tN{ubaFZrjtZV29c@(1^IqA3qpfV+Og4PEh<-=&^ zuIcm4&?(_!!V~<$lSF#(@92~w)!wtnY>iMo6~^U|Br>99OXLnBPO%?ceVK8Ha|j}= zPi>Ai#y?_1UsEvwnjlC-HUnwXz;7#N@C7~dL0Y<#e!b_MKswT{Y zS7Z;H0=Q7NJ#f$odIERXm!#$U6JmH9*MqiCB0OCo-}J)r`-p$Zzu=$n$NY2tnRQ)1 zW6pDI)j!U@obgX){PUURxBT!6JjouT7yFEVYTa)07K7W}NB|3dUs$S?_;j7?mHTf> zNeDO2TD!aCu{&Qi7+qiT59U?IQ~ixqU)2m+T#!kGHyiL$xa~;d zeHY%mC@7n6SMrY$jE{C?W)ZNb|(H023xVGy^0}x JEw`io{{UPt_#XfO literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/index_stats.doctree b/.doctrees/tutorials/index_stats.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ad36fb289ac9ce130f103d9c06c210b2de98d648 GIT binary patch literal 3260 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.1_basics.doctree b/.doctrees/tutorials/tutorials.context_storages.1_basics.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ae68fc3eb8ffcf7e2ed659f692d2f2e91adb775b GIT binary patch literal 11844 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 H_3Hls75-Ih literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.2_postgresql.doctree b/.doctrees/tutorials/tutorials.context_storages.2_postgresql.doctree new file mode 100644 index 0000000000000000000000000000000000000000..21eb7065e2a8557eb98c9f9a495aceb0751ee956 GIT binary patch literal 12990 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.3_mongodb.doctree b/.doctrees/tutorials/tutorials.context_storages.3_mongodb.doctree new file mode 100644 index 0000000000000000000000000000000000000000..090accf07a488b06f8df3d19dc4a3707819fa724 GIT binary patch literal 12675 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.4_redis.doctree b/.doctrees/tutorials/tutorials.context_storages.4_redis.doctree new file mode 100644 index 0000000000000000000000000000000000000000..401c03a8f45dedcc1a8189fb755a54fe73fa1b32 GIT binary patch literal 12485 zcmeHNTaO$^6}GcGdztmFZ*dffIBC|gcNW$&PHf@Cmjz>!*m1P6ye1cHtJBk6Gu5*_ z-JR}g?+(@~0VN1W1utokkoW_<@B&C7Qn(255*~O&0fYqNg&)96Uf`>$?w+2R-pMR> zL_oGY+V1MAQ>RXS=bXBHZAKxAN)OI(jhGn^)MZ%a*S)LiSiOb@5;>B;o zn{kCt2gZ8nMS)3Tz5_K(YCBdy-1uf(p*#32wVTwzk2!|h%$m^>ouHF9V_r5G3+#Ht zAYOVTeLJmt3Q*o~EqG@4nOxb1fhZS!Y~|=i{#DLXlF#6AInoyB*sl zuE%IVLh3nI{Pxtp)W6pwKFN%xkQUQvKH(csn#FXCPwUwz@ivhTu2Z94o795HbxBZL z_ky*WWgCvy)Ekbst~UZm8dmC=VNJ=Zv50vA+J@bys_D6mY%o2Ipp{mK|38 zPRz%}FyhNQqdK1x$}!sstI3>9nqIqSN>ba>IT)1gxf#=a_&tcol~K2 zh&h|`VHy(LB5_0?rHAQbbc|~FeU{GCLzgF_I(?i^hQwsH=MGF?1s_YyW)8`H;!`K8 z+Et-@ET$M$#;;*ysFC~fRxIIz?w(fNt5X`$UoR6mi^Zdz(Ljj1!5f#K7< z67$!n9cuV*XsNk1&()&PcAHAOs#0&6k5aX(@8!|;y_8sSCe<7IKBxSKmiUiX3DI7a zhB~h%e^t%BcBWdb8NLl{*Q`ck5E=>?LC6jb`CK4)`Bh!lq+@At5KTZ$Sfk@bunP&o z1ua1#4Cg8%X_mo^x)Bm(tqNV{<3jJaYmis+27$}(@`-CfuD*c*fPH<8acIxni$oG<+TmlMXw>V5U9}Wx)HeX zxA_bn$%gOPrp@p=fmb+d%$HICj^gjq4GjRM*R0F@^st%x+Z#U^I(J*l78&YpDST%O z;rrT!XPyzT3AI-h9*wZ$nzpB%p^W+Asaj1H2gI-#C9p(TwY?f~YmR|v&uS8lj$IFo zpd;}p1<=5Ay$Eh=nj{Q0<|R11@Z~N7r?akeuz52N8w4Ez2ZET6AeSa9INj;HP&SPh zvpwU@sqo#r3PX@PF0&5rlOq8W1$N9AMzo;B3diiciNLbVk80bpW)~AZrW*|tyK|U0 zl7_Uz!?(&i^ca02O)~i~en5qB;cIX#66EGfNfZl-anE%+179%DvyRP3U^sf+@yxYc z4L*MTiJPa=NmDOs%+URpVPCGn3Lx;>K8uZ>R5>Nq6%i6LlCWG`q=R@LLf#YceOS`s zm!CL5z`GQzO~J!Y`?>( z=N^yqcKg%E+AW<7`fDt}m_>phz9XRXp)y}DM){;$m&)|&A?p7G^>a|e3WMG)S|5Xq zpQdw?;`8Ud1^pFz!fb_pz)J*B>%=6FwM5@mdFPHDBY=wjK{NoKT9dK?{o`;Q#9D0( zi}f7B_{tfq{+7!t9wVpZGN5gAG?x%d#9gclkxrS0;H|BZz$K0-Ma0)4AFBdX!U}Rt zu2sutYC=$owR1>P9JO6wFi=4KB)qrxp1c9x`AtYItVY%D-th8S1 zF#ePhgrMBT(CN+Za?2Q{YZr|9vc@M021CHF^S8B^o zgDRQ*PZroe58MQE9syVb|p(3`E#W+m{cbg5CB# zgi9|hmm640h#Wkyb<>hc$-W}p?duK0#1^BIYl(zT#I8SWaV2^0%2uZUVkwQ~0D5Y- zvA<2^SIQdxnUt7oIyHR1qx%MB=?z+|_4Sm$ZxLu3ULVzjE%{#l$!78%knin4vP1f4>Oj|JVxU zyl|=2dS?{4ry->EI%*F_5rzJ~C_+DKwNSe#W~G5coFLtc71#6IjU31Gkwd&>HvLVJ zO-GCzzZ%7q{gLB+G=lp5YqKnJ@ZVW=9h*MwtTrzf?ASNo-aK`C^Gn#x7!LJ9cIpeq zPd<&p`KnsaDBqr+UqYy<68Dyk9rN}1t6#ZrX%()vy86-!S1-)pT+-%`&6gL;Rvn_Z z2sahg_hPwR&ce-EEsZo)5ycV@uY7I*vVAhoTJ^;=0smi(DZ|d6i?Fj@fBbM15M}=O zTht!(M}?{XoAE=v~i-s7{LXH~VAsKGSLlSdfqhKn-`Ps2Icnr4Wd z&PZxJPngseN6uM8t&QsKXM$G4tI_V9)8!eaNIfaUU`&G8B1j0+}pb5X6~#d2;9CP^B&dUT-}65yI(q4(}3Q zTwY#QVQk@|y^sdEGiT0Zg}q~3C=ax=7m7kyfvk}tRzU|q+d@HbD(GRfSX9tOKJ*mG zMWiWcG@`+VoN>NT*^9QkVfaqwM7`UfO6zNIqb)8LbeTPe>@U)N7cID0Pxd62P=G6S|Z7QD|{*>OdRclceyts{ozawXZJ3MM-wj^P6S$HN^ap3 z$)(N;J-NcCn*>Y>1D6UhUc_}RE_2&HUS?E>I(k{dYdLw10taui%rkYts}x_+aS0j* zARz8*cpk&HhU7k8-pOYLG0=_L`i3}~1VNF{g`ji#u#n^=h7kD~RYDvhSc;*(ZZoQ< z>`wHUG)U;4FhfAZ8M*F|TLk8NfS0M^WUnQ@mu%RACTXxJOe>Xm$s+ZriSFhE8B4Iw zAeR_zluX0?CJ}?ee9bA=0%#MS;HZJo6|u(Ar;dg;o*(J`sDpOk1-L(PEeEU=ar6+_ zChn7WD@*HLDJ3Z-<_G(}^oeNw9ZtvRl-$AAkMw@%Ys~kEF#u~J*sQ)I*_*Q|Jw;+N z<_~~)%l8Mw^a4xIGelsA37ptAFicp)wt!XAuyH{lp-L zSXm%%j$BYzA!fHMk>D27-!1Y(5?P)OmMLoO0R_eji8=>MT1u3dOuuD^wu0zx9eh!v z?!d27EhkggfbZ?XV8lI_^fL&ZO{(b)+fmfuhr|;)K?s+=NL(S!!j#W|^nj^SuYl-Y z;a@Wi4W3k!Wt990hQ4Q;-S585B_k<%R;dr<_cy@)eD-n zm>&=|r3$F2GtfK41-PKs694GoV<%wIxu9Y8i5DeZ@kdhef^#WA3)V%|CafX*KnSP_ z8WB311|<`I1X^8ud5RwdD%*PIpxFR)#qhnu_kftkj19fZlK`RE6X4$!w!!ewUyI<` zBAV@&@9I^T7ZA$02LjCzZUZPtL&H81 zEW)VXSI=&PLW0f=<&T2uycPpB?K-jG#2w5pC4`}q114&%=>+Gojt)|~2(?n}y$L@V zaCI6gu-)NfxEhIZ{luqKK!FDXj5esLa1W*{rl{nO?}btT7g(Aih+BeDzKM|6Q>s|! zD2B8~_97^rg0PPANl~btTki@lFR9!U@@er!5LHDz`Rz_f_uz4149WRK$Y=9&Cxy*| zL8?*;I#4CTNz-~t>wJm8l`O?vx9gsh!9f;2*jJd*sX!vYALy5r zd_kH+2r<1#TrJ0Z#`GKqc7{cfMkdcE_QwJaB7;ZfqMhkS5j$Mg)(O@jFs}Tcv zL2j#Ug&4}mOveaAG~#=~HJa+%xE1;BhpJ(&1f(YWj7ai)#PwV-QmA=?p__b%W4pxl z7!62BJ;#dQ9{-Q}c|GD|%%}@$F`eL}z5%9LOtGxUdM+btOb_wOsFSe#xZZ4quQ_GE z74s3XjQI5CsLH1VbIf+aaI3Ie4&uf%jWKKJ5tA3pa(pc89NXD;*& zv1j8xL_>mWB#!7q^bz_n-AXllK0~MJzSE;om423wg~VjG=k{!02`>xGW)8`{;^U8( zwHI57-3s@O?YOKq&;O-c@AI)($A-S8t)*1D{ z@M)fj=?l~jHT*NQRNR{9YEfvrb;Vs-vA4j7>DuP^^zi&XpGa|A$~X9ZLD>y0@Ext&mk4g$M+ z_{vc;^VHVY0zL-ftmQ*-w~A@te(-Drb;4qP_V&aExu#-JJE5psUemB$%oj2XehKrf z8i5;sgKxuEvgSLsX)`>I;t{qP^8=~A4P)NY>I~>dr#Kh*+@KBn(;MF#v}NmT5*cV* zsj^P?Rn{MzeD+zPETMK4axxr~l4eVrr;PdGT&04AhvoK*vKQ1V#H}1YRFS%8xR!R+ z2wSe1A5^y)jjB-aX2tQ``eEB7m86p#<=EB02yDzLv{t^Mf#-S=jM_9w7;4N@rmUTO zx~-@a8LK({dNZ$Ia7jXM2s}PqU>eF`l1Dzq;!-bCY%f1I@3-^w4$$in8HjkEh}5Vk zuwy=bYcWeb;@G-3;bRtfK@%d+@zJ^dZ)HyCu?=ray56y5t8$b4aAS+jDA4!#zI2HL zl%i{m6>WnG(l(0@X$)r;J91{RKNVl%+tv%T^bmb4jjH*$wMWG*;cehrNRU%OMNwo< zBcAKDdfq^FCmoxSz;N`c7aSwut_m@GU(@e$wl)0f)8*E9sfOEO}=@n&=F}$^g~`CP_D(;^=U5jr7dUXjUpalRr5rMh;f$);M^cnT}+QN)StOx3ynd=zoA zX&@6)=9g$-<4F)nGEwCBjn7NzHRkXu6(Ilm&SfZwzV)7 z*&U#it@!fLD;^Q&)qV>;oGrN1ZI$>oFJhSwrK5el!4avR15%~TRgU(!%EU8tPm9>2 zCXV^2TSZ}k^>sw4<5Wk{+xDAJ4C6Q3!EWTz;e7BG580-Cr{AW0xL)9q$AEH&u!YO?14%VLpmUi4NV;A6Z)m1h98_t%oUv)zTeV)gV6)B)edzV#gzb4 z+SiEQMAo5RpqA6;&Fp$JGOwkFW?=g)o%O=mi~913^Ut5Vpf8?(Zux+AYVq8;i~706 z3#Ss>yelZFBZCB$Y57n4Y5Bj`({kQ7)oT2B7cA#(Lb^O=Q zZKb|LRL$;0(sgE|&f`eld5DKhtiK1#-8lpu(s}$AV>j$PKENQb-<_VdorjR5Rn>8} z)sAb^GHrh}IZdLLaQ(*I^&4Nr*~W0F7qYn{M-ClB<8)bNH_FnzuuR-*Hp&5)reC~> z%98%&Ex!27^c7{?y*FoG+h@ZF%+(k!$;`4 zD8lOc^jzOKUrKE-AAx68@UP(#peM?gW)&fkH1x{?GJ>gLeyUi?cJ5feo!h8E935s0 zGlS63yVoGpj&>S^4456!`x7cqG=?#St_ntXfud1@q4x{y4MQsHfb&Rq?)<78&=dZ; z7$|idz+aicAXS?vi7S~|ZGW9Tm3}mF(mK9>-;pPuI%UgWMXglz76>t%++pvpmeom%Sip9nhZFOvBZ1@!LZMjjIWz!SXn}azLwNRn-<5YG(8s zM$EUffgMGsyDF2~#9ft9o}r)BCMuIfjIY4YbRP!zZ4?xJ)OuE>!|U{CKY=^lNKG-Z z#f60h<;G@C*)yq=o1dT08avlGQ|uXM&-8O)eP|8kvHDB^ZJX)iochc#oGiqy(}=?5O;8ZDe3?=)Nz@s5Tym?;Up2C-o%S(A7bG# z5=?C7Q)Uzh+ue&nvB?^2fRJlNejlN_!5#XsQjEIjW zcTG$5*b<+p697C6+;zlw5Vy#FqK<0QMQKhhCq|_3V>DTPgRw}wfx9rfU zIXGlWuy=b`(VWKJg8cz=ca&B(9)lVavAxi-E0Dk5JKF z!oHw6ZXJr~*iE1)U)c1=e-`+ZPkcSY=ZWP2Tk1pO!M!jKet!xULvsj#v;f>l$YIR) zh@O%K^wb$pC*odSz?_MH@R37DAK zM>D9^vIl{^6@NH@_A$|@zBk?%R$frCC*%|2jld3ze)8STknY6S`K<`fM?*fD-#bZc z63|{1QZRvP5k{K!Q(Wg;gkH&3>~*v1Ihi`h#(TROv)&UO6erSI<)Gai^d&+`IQTu? zw30Unb8sQ17l|A1m~S&Z$AO$7QG}7P6G{8K5W!pVc^Cu0^Dry?eMKmMP2$fjc4wZX iqj_7_EO&65?V3)6_=~@Q5TlBgaCV7b5I9gEd;bfg{>S+M literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.6_sqlite.doctree b/.doctrees/tutorials/tutorials.context_storages.6_sqlite.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0dcf9ebd28f61d35b0ac040d0e409c6d00277530 GIT binary patch literal 13358 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 CsDSJM literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.7_yandex_database.doctree b/.doctrees/tutorials/tutorials.context_storages.7_yandex_database.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fe92fdda251609a66387a7bff1155949084a0fb0 GIT binary patch literal 13383 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 baoaVW7?v3CzVKcJi^E=u5IpS}H`V_G7^7rW literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.8_db_benchmarking.doctree b/.doctrees/tutorials/tutorials.context_storages.8_db_benchmarking.doctree new file mode 100644 index 0000000000000000000000000000000000000000..530a3dcbf52619f4079125b7feffa50d035ce53e GIT binary patch literal 406847 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.1_basic.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.1_basic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6d814fcc005c22e48e04589e6b118ce764688385 GIT binary patch literal 13870 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.2_buttons.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.2_buttons.doctree new file mode 100644 index 0000000000000000000000000000000000000000..14dcedf8c1bad7d520433497182503c7b313a0b8 GIT binary patch literal 19295 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 C!~1*y literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0f79e4c2c2691fb755e6b9cf3566ea51a23a80ed GIT binary patch literal 19148 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 E2Q>OF$p8QV literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.4_conditions.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.4_conditions.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1507a1c1da2c1d086546233d9109fda45266d86d GIT binary patch literal 20134 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 R2$Es^5<5W$wxVkJe*vUG;d}r9 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.5_conditions_with_media.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.5_conditions_with_media.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6a65c802ffc1fc084bfb91c669763ee540a2b3e8 GIT binary patch literal 21055 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.6_conditions_extras.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.6_conditions_extras.doctree new file mode 100644 index 0000000000000000000000000000000000000000..04d215fc708a22b30986cb05eb87456682b4588d GIT binary patch literal 18726 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 P&ai>0xuEUxs8aer&G;AW literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.7_polling_setup.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.7_polling_setup.doctree new file mode 100644 index 0000000000000000000000000000000000000000..381d634b00b104b0e9792218e122aa56ede51125 GIT binary patch literal 10967 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 INNKJ5Z(VzyZ~y=R literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.8_webhook_setup.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.8_webhook_setup.doctree new file mode 100644 index 0000000000000000000000000000000000000000..92cd0c3cdf61c9c09b4a9b53a635e0ba0a53327c GIT binary patch literal 11086 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.web_api_interface.1_fastapi.doctree b/.doctrees/tutorials/tutorials.messengers.web_api_interface.1_fastapi.doctree new file mode 100644 index 0000000000000000000000000000000000000000..722ad3cd6a48c572ee9e6fc5745e46138a97b315 GIT binary patch literal 22614 zcmeHPeT*H~Rk!2)e74u0`Dhv^lXa84ZFb+g&L8XEM5)uW(#~-blRu%lt zy>n;o%zN|p?b?YAirdZZ+_@j;p8GrJo_pq=^Y-|!p1HV-|4R;pUEA?C8ir+gzQw{` zGG+N@++kkS`)Y6Q7kh8@>dACqtcQLan5>uVLJiY)Tq|H+?{cqh?@IRD&YJDwCvpvM zEo)|v+Y|QWW|x<(kH5Py$*Mo0WLWyRh6p=p>`0@mVn z#(4M1nCE*SWW41QLD!N4uH!M!kL-Yjw(nZKUz++K@$VPnWHK_=sJEUyolJBM5FPdG zJ;}75%@R)&a&li>wEYfS3}Vk?!Q#3fTv@an!}Ztnmg}$UtpGg@EA`EAQS`MK#gQMN zZJ7Vnzzjp?t+60%th1(WbRFICA{Mj^lQmB2EhCIj*642bk};Z8@67JFnamKWk>iGq zbcH5Ozf)Ks$!U8A?6nVG?%9X&a}+;!;O8!|cY34aE`?o;gXQajQ7pL1da-@4{eXR+ zy~oz@bH6=nA3rk@H|ndZ^()TI6eHz>J7#hDWq(z?1gOv(IXA=y+>#7I(;_Jujr&9#0;7)sHn3YzP_CBAaOdNbE+M5ovZ5 zb(aG-*#Z8jH{ZAZyWTwN#x!V()v640w$ojE-+rr+TE7RbAI08*#`il7?>J z1K}YS|Mi%Kk+Q%Of@*~!Z>rqI7O=0&JPTr@Z-8!PJ;e?{7^$X1>Glh1w?h_f5~D<$ zT`03XG#Lslk$vrb&r%dcK=8HiszhgKa$Ot0~8ybjNHv+HsrDQMuWE)-A zF`WpHgfa+CFIkeBX#4vDSJ&?XRz>EoB*%uYVlESfhNHpwz(5#(ag~5;tg$j$Lo;x? zQN#2D#*vFE8A=DeOS>sR(eZ?0CM|4e&!2zstajeCS;ycSn$#1p*7dOxLh;t^&r3~~ z!EG|_Si#osY!_R05m%>GTn(Cwl*U2t2tVLO0W|injQ|+?JyJ`w>c6eh4~aUJt@?Ht zmV=?t-)LYsq=4bU63?ql5Br3DQra2no_(j-vrXTNAVDnXQyOGhj`^Ou+4lyU$9~tr z?rXSu)Ah|ON{wXfwUd{Z$gmkaIRqS@cTlAH3H!rbm9`%c5!ej4`2S^QS$PZ9k0lDovZKyZQ*qdTY(l|bs&76mfDh%5!cyE#=)QTaj@oi z-8j-=SsT?{oN~IGk?nhr_Eb*(XiHAY<+0y~jUHJn2zu8DOg|J1EuuD=^qQQQA{|u! zuTWnB9}Gcu`+zu|okEN2pG?58?-;NQ zgg~YUY@bFasa5EN=MBUEmAzPI91})0>sb5gcQ?b`e`Yyd{S zB3a>F`kdDgz9Tr_BC;UTkuSXXs($|TOV6FVpg;Z6PoJNMF)4ge2K+u(ncjg}Qmdtv zQ=>w3+1<1ZFLF%T(`Ss3y@1-Tc%2#^@@>HxwDK{7I?^&LGbls#9}PftdkTeBz)l8Q zSM5JQlPwW0wMP3lP`h7o2*8&VNBa|~+rEbX4AN9mU63>JM%Yx8yOn{(_rCbnwd)0!+=XUrpeB?!4Qj}DMhXd2oDn{C3}@nFAj-yZ$O zz7GGdi|(BW9$e?=MOWkr#G#|(chG0F<9f_BLbJWswfpE3l&xTMup(&se@Cmf8L_^_fm)?6beD#T>0I*uIp zjW0v})Imxta#5xgv^56b0Y8N_H*+x*2NVdr6qEwBhH0`cxGU*QDOp`T4QB*oEL>g9 zNb)_MZBTW{be;9n18$Lz5Hh)LL(Ld)T|sG}2*R2+(|ps6L5tI14W*QGk=!2`Q48_0 zh*S?gK@3m@^BO*Hp>O(Xhl%!?V^p-Y-hRamqnC?eFz`C)ty zUwZ0NA?o7O*F3K@ui>=AU?cWVn;!{@z0jp8M$>LV5C7sK07pKmlt1udI2Hr;)!dSQY-fO$172(h|LQDphus6 zz<9^Q-zoW7Yf|!6Y7){e6~y7Vv4#+jtwPC z9+o~)sgH6OYWv6AQJU=!sP=vB@8cKLU4KE;<3DzsgK@rP&)DKyjYDqM?Fyic{8Bp0Tn zDW!Dta;cl`OoJQt>2bLB?% zI*4ou%Y)^`Q{egLPT;x0;RMP2a!E3CyZ5G?3zT^giK_IDCMy>qE0LI7ZdIJx39=;b zch)#RvG+>z7%IcriT!7@c?_L*yISTiHn5+ruHN{Q(hiSFm1m@_4@kVm&Q3?vbmvE- zmu@`&2Fd=z+ZaZ|@}UtIR*|UR-wqO`Df$f|Oe@JlB~4LvlvW0$w%ZrsOMw2@#i+Rm zKei*(31&mh9UIzQA^FcrBo}RlgJmy(T#bFIb3p0tFH7AG6@JNbqJdlgQ_{(x^jIcv zsCvlM$75lKDJNC=K38u4vYq*5)U0OIY<*_EcewLJ(3;_-{bM4CF7U1-TeZw* z@sl0RqKR32z?W+Hs-`OX2fS+WT=O{YhV8`ZQ=awVJ=v^x+-1&=qtqL}Sv|_7X6a)# z!H$DyIqdES92auO8pMuIZ&Ot(R^QynO(nXw(IRKf!#iS)1=c*YUDi|!b}}Ix_`PKJ z0^QSU|0|uG#Wi>W<<~jVs@p58AP(ErRokBh+3jbE_To5ns26Uh>c+}A|4tMtkSd75 zMWP?4vD8Oe@oC{Szw|C{va4UaXyI`i?kb$L_)wO6TIpK6)XMNOr{A}>{=|S|lKjY! z{+`#&XhVm?A6{Q{y1JTI(T#A^GvWB>SC7?-MZZnz%*D5`)T_)4_`bQrmVac(Cg8Dk zd=$a03VyRW{U$!2exV5E$A|Qkx`j7sLacBqVJ+jA6RVxs8OiVd-=cpIzVF*&3KHO-%mu%1 zp%l!#Tf)pp2!C55e2g@!(i^={5m*$>2UOB4b+DYk{rLnc>M8?&tu*lVrqL=NlEeq* zT$|n)y|2()X4Gh+YC}}ta2*j-!2mA$^Wx$M$U zh}gOQC{K!ylfiB)$-=hAQ>5)g2_ORk=f;RSrO6YeCe@hY!E9+zCJ%L_0ACrD`H&hs zH)OKc5g^y@n_V%8x9@%R`U5nXG42gq@~==tEWiF_v6exx(!&oqS*#we6@|DZ*R8mw z$}d#O8{N3qN6$P~KhXH?Dej#?S;j)Z%0W(p92|%GC{tGRmC|Y!70wMksOhDls)0iy zn(jzMA6G`khtIIw8CB-WXu#+yz_{LEva6W%mce9Mm;quOA60`Q=t0Z|3h@hIVL3L+ z9x*85bF^loMK|U_5pRn%D~Fxs)V`mAHP3dTEf0x(sL$1o4|xs04!)V-`W~)f<7O*~ z2<}AFg>T%#%*H~kG(SU4noSt=Tq;`)x_zmO(26=;9MnGD7ZH(lm6N?ZpsY40O`QM# z6U|Wen*&g`lOTonMnPN_r0^xw?hjHB04xe^{i6+1cz3( zDBLUuHGK<>Kz^nCUOW%4veE5AdeUGX$Y-s_%^B@Q9=TS}Vu0qBxG<3~7LMK}+-nYa zfxNK2gj;w#5*|G~g-#n?KaA?LiwL=hX30G(?sfC*yf!PRg2Hs%28GzAx5GmAR;o2VW^W)@?8dS;lc;|lAW=KfRsS@KbY;5g+o;{I ztAw!KR9*Gnc6HTbs;;7kjI)QwcW!GOK-+EG8vD>_sIIC(S2-0(%URAYqPpe zIa+jmR_G?Y9uVtTpIg$jm3#h15N?qflz}K>uv0%H`QC6Vq(*Eya^AQ*x%f zSQ;i5Kjun-D;a(t9)RDSXomVISk5%VQPl3&3YUMM1nzkHaR5Ir06E% zighy#kwNKb6c}EJbOH#(((##h4I8XTCpaGYNRQGxvn#2|I?TdjOhoKXW)OTuY5(+e zfV0UyS;BMdolT~2BB!GSk{=#|q>FfI91vhFc*yEB@v`9}AyyVslT4&x^JneH&nDAp z1ezc8@IVPMa5(97@vv76i10w~3Lb0eV;s16+8_C*P8q=HEe0M3g#q&Z9d7x4glI3O zygaiz*-!cSytt!pP%;bT1x#jOS~*>Ch^GP!(d8#a33C}G2MqOfC$e>!Vi6;z4bq&8 zU_-!2Y3ME@{J_53lA3L}+2eR}h;2CFT4Y3VC@YO8;}&biYZz{ZGF^ddsDT>=9h6Li z{U)PHVZCNVUKpgR@kwjKu@gtFg(nt52Y=sFe5oU`iy!C+yR}?o0wUoE91|Hk4hT-` zc`xI?OA$`(<(@ zU`V!O>1tLU@L>X~zJ+OmBaQ{EvX+As7!%2ift-*qi)B%An*(_5x8hD$&maiK@&bN* z^^iXj-5lU09Ne`0c~LiHvE}PX?uc3kk#@)rnK-ScEjdceNWbcY4nhp6FWquNgi1rM zB$bm=G$4EXFd0e|z~v0p_ovnLmV;PM%G7xW{e?kb33FLw9`$Bn$@e0y43+I>LaD;Ab(sJhzIo~9?4yl1u#V3K@^9`he^4E z8h)_0*h_Awnw$jG)Dc>X1&Vl9OV(X@;KV6#bS7w-rS7RD@BTsAJ;c=@&?2u*!(ma2 zj{z01NU57J*ffI5AxBnZ_s&cu$AHR?o(X6+0bL~4yp|lqC6>t8(DO_*$m8h~`1ge! z1oY~!$B=B&W=Ht5c+`=?%1D`ejB?5#1p|&xTr9z7&P24n5_gg8l#+q+^qZ+BxCZ?A zrsK7M0;w7fld=foW~rXj!Kny?8A2W@!|0VBP}6BL3qrgJ5^TmI405}PT32+WTytC< znPExQapG*mb0tp5f;R;6%LqJcsfH`yyfhd3rDey>% z<2*+SJULt_6{%lQjNV$=1Le=7tg$Gcq(bp``xTP%L)eKHuoEquT#)-vm`qbG9zl;b zyxz6YK8QcRMSJzBFxjuJBky=WQuT@L1%rta5?EPJ%s?$6jPX*ed#CBU88mp|(NbYn zd%Do$v>cT;I$Y?VUkxT@e|x#F^bNK=s1wtV$=B6O_L_*r1<%19MD>b-y_q6D!m8Wq2&^N@$YFF{_CATZ*<$PdV)lOV4_5Lkeb*E}Ro36gxLx~ng< zGrP+RASd7u%bBjOI(6#Y>YP)jKAQZ)XV#9%k2o2Jj_dF0rfvIy&Eizd*nyP{n9tKs z(xu-`@1-p<8<{(CkVFdcC%&;-&vbxw#`qgW-Lrqtqo&~}0W zYe$Liv#7ljL|bj!HNBu`biH85=th8aP-|et?F?3%Cp?HSHZFhZSYgck9*bgqhjk1y zbPd<%Eb5vT(=Qolivw$mal>*QPWm1sPRb=+*tsX zom00{=M4Uy#ozPzdjV9Q-5q!>1#1#8h4lm)+ZjhQ1-TIZ<`>g-7W>N!l`SI5seC&zFnoc(v937K78^x$A@1&@IK}^J?XXbt{+o$46Tx ztxXB%=?Z4AiMfsk>uY?N1iYq$Kh||!!`2B5A*gKE9E2V_50kd&c`$Ee_#m=-TI|vb z?W;H5{Y_2nmD-NW9WBNdsl8)vo7b(#4f%P^#7NhVU7H4b0Ssh}{oe2C8cF1N5`7Ea zLyT!KC3b2p2)R2jJy zk9S$wn{y?&rgTUx1lb^F7U2wmznoWTkv>1Dq#P<3ibfQ zIE`8OUI-8H1kES6YHmh7##7OKoYb>&J{4YXLHuk|I~bU*4>V$KBNzZOJ7(mkAB#Es zWV@l~S}w;UZRW5*skp4{=|lU}($)Pbq^r(@b#eA!W|nrjHt=XW#&aX3dFKwvui0b6 zLK{n~iv2!fQh?D#SHe2#T@GegA|odKdmp)()0}J2vmBA zi4QK`UQydo_K>aFdAYxM{MfO0DAGdU90h}rr)DjfoS|?$fp{WJl_7b)j{Z5o0H`K? zA(}kM>Wc{|dISItA9$pleJvY&7GDT@XZ%iBSI-?`emTDkERXR z4-;-6BVmrG>x>)jaVPNKNQY>p;$FtkR{xcKZ6mtX!nRib62^#024USxSyfs~ z^!pL|96=`gzd`*$vWN{^gC(ySt;VsjM+dA+d-e|$wcy#sSk^I7IU zARfma3|o!Ze2Yas^T?|pcRUGgq$6w%Nt-R`TC6u#+XP4n>Ei}lNbL`>(0x)nTcrBx z(jlf0QVfvh$u(Jts{oMPsauA;-Op(F2NfEM-@DaeJ=edR>G?NU)G-kp-1~q$HpBp%MY7}5HA6AXX z9p>^iTnk1Cd)48+{JHFrCGc?&!pSkoXTI^Zo5uBx_piQp!?^tZSFTf*Bs&){k^b0b z26Bn4(a1aJzDfo%cUTmlJh^zj%qUiVUU6f1l0FjpwXr(3o-pun45Oe>%IE#OF<0{^ z#H3@HMUYq+|Bv`@ zjJZ_SijIsPhb#E?hc;JlRLvDV6tw=8r$*44{KRpz9%Zgt0CFgmN1Lm27>Z?$@Efb< zN_;}`t~?wp&jhu#1FTYOsZrRQHBFfsootnn*{N1T!{?XxnU@hWt&M1FEU8WY7ZSIE z!B<8x_~Df4@=@4aDAO`}k5s0N<)5`O{q{pE)0EilJX)pydfJ*6doXU!r=`^r=Z(y zwugYA5`zc+`gP2<+Rh)!1-A*ka>Qza!yS8VF`pw|th{O`pdH~wpViFhlnvClZAO~q zxmb$f+93WFL@KCX*l8{OdNEM-!x8)%0^*(0duiR-p#w%7WSO25#5_Bj-ih0<-7SFL zyE6o8C)NW$#})v)i7zRg6I8ofn^(=PR)+!VuuDfq{7W9AQ@ywMuG+1V0!s&hs6xm} z334EEsF^f@HLiT5fl*3(#fmy$9^S4lJ zw4&W5p!cv$nm~Q>Q!~u)BPECpwn zV9bjj2woH5G#eI}kjcf9@YZuiuw9akQl!dQaYfUROYiwOjRF7_L1O2Mi#3NR;!|TlZ}@@_{Lj==HDL`nm=3`>%?N6DnqfA8Vtanu;j`OY04KRt@r70UfL=si-oGZFl(mHV%gPKkoNQ?g9=PnIv~%imP@PnPBV6H{G=5icSp zh6K9umP!#H%c~wJYRIq3pzy=FgnF#%ofzCGDJN6l)Bq4EyCLN?#c5TwWLQYv7#8BA zkHxb*GW{4w^$4B}6jb#P+-3KnCV7BTrS#e{(NKMujmLzLI4%~fB%*suMn1u&cv`i{ z+d-RRCT5%t6mfg&G^MZPEg>8PP*w@0l~doKIHNnjY^#?qN?5O9Q>{5CWH=4u(6^VzSki5hc1LWtj7M3O5VuPy94RuEhGv)*GOJg7dO88(I3=hd2 zknbtca7?dwoD`?ot_!MhlP9t2G$|%+)=7GpZh^{8K{fP15!L`Lvmn34Xi?zTg3K); z^#UHE7wQlb-d+B}a_r*wOZArq3af(1a8R$}p-zt!CUPxQ!<@{k4oWDK5=tu04!s!y z(QloA;w@xw_m6(5{$gmbI7MrKti`w!7kcu#*SxCMlQNl#r*M5wJcC?L5ZOkxLJoA8 zLZ+jOWr8BE4OwMf7v&{WVu5nYNaU&}@stbknzxfdXcQs{!pa6&?d#(L9Kf8EEmF9N z{bf@av&0SzTuVc*Q>Xc7glLqn-X2*kGDJ-XzYC!j%#$xDn zUFsQt&gb2XE|OgG8sYQw3zHxpC3TVc1kDD^=TNc*hG&lu(bJ?~kQ~1ULG)bY=+k$O z{p>#`#X`tJWPtK3PP7~pafgt2U{C5HUQkzD&>Z6?9~JTGLDXxf;yLOmQ9w^5$B;09 z&e4557A~K=@Fpm_5Ou8~@YGU*e_es66d4IEYQ}Vz@vfW$CP1bvG1)9PJJ2JWJL$C< zaTZcJFbV}N7GPvo0`H4cNM~|$*C?yJa03w+I#7KX4^W?$T_+)H_KbX%w@aW~l%UUu zdzR|8aJIpsOyfXjNkoj^N#}ll{w01r>`Y9sPd+j@q+W literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.doctree b/.doctrees/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6f30eb992af8a16ee0945f06fae4cc02d87bfc65 GIT binary patch literal 18719 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.doctree b/.doctrees/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0aedafbc3352de77f94229b0f062634efd1e6816 GIT binary patch literal 28028 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.1_basics.doctree b/.doctrees/tutorials/tutorials.pipeline.1_basics.doctree new file mode 100644 index 0000000000000000000000000000000000000000..120b22b9bf521bc43e587a65a6ea9baed2e2411b GIT binary patch literal 18031 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.doctree b/.doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..eb2d7158c5b00c8647de1634d74d288f25b82346 GIT binary patch literal 18041 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 P%m5H(m_Z@6al7^3S8B8= literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.doctree b/.doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f91d8b76a94e6663caf0d80cbedbd3a11da45d73 GIT binary patch literal 29073 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.doctree b/.doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a727dd80bcd80817ab613c9979b02ef4d5988a1e GIT binary patch literal 21977 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_full.doctree b/.doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_full.doctree new file mode 100644 index 0000000000000000000000000000000000000000..36a1201cf2148031e9fffde79f25935b9bedd987 GIT binary patch literal 42590 zcmeHQe~cVgeYfMg^WFJZ?ED}<$>f~m_QHAXBo1jD`@nHXY@A%&*bt|-nVsF8y_vn) zna#|s@2rSoH(rv%{LU-zI-3#4PFy?9tp3`w_dNpKUB5a zysJ0ZJ3|b7Fl0M65E*VbgwVxchh^Hj?f8bPdxm4xyT3a6WB%`#JHcjOnSKH5w&8jfla$W3S<~^u2D!wsm*!g5%Ebt(%(V%&85_Sx_4;Amu%EYTjNB zYp>t&9T#oA_^)!?Z0m$}sM#r+s?WJxoM6Y#^Z|qcq z?S!dsT3$J1(B_)cO7KSz+Sm^28ke8z8oTgwC4R2P&o!X#*ka2%;I%bk;Ak6k(%tiV zw`088xYfAH*kma9x!IU7b{`+07$=RdCb(vholckb(gz z@qm;PjcBS%Vt|%Ir}RYUg1uWeP$Giy+{nTo2$%-c68N)iiNG7DfCx3+cYwmqjV!iGsq z<%SXD-`O)93EF}Ttv^G9%>eE%wV~UaU@M^Q^jUM~biW(i7ZW7@s~~AOq`K46OdGI0 zzYd!X*bAC#cb^Zo;7@(AZJ9OG$Hx(TWZmB@lxbko$1G9@f|8`;Ot7&mktOkEG2z=L z3Eyo(_(CT1Gnℜ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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.doctree b/.doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b371e29596c7c5664542eea62ae537aff74679ab GIT binary patch literal 14556 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 W*r4$skAR_S5gMkzLD@QSqyBH69TK|$ literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.doctree b/.doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6fca3f1e12059e28269a4dd9e1852a5a1aa0fa6b GIT binary patch literal 22636 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.core.1_basics.doctree b/.doctrees/tutorials/tutorials.script.core.1_basics.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1101632019bd3610a620de8078bcac1bcd3c433d GIT binary patch literal 27020 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 Jy~`PL zc4j>@E0VF*Izimp?X)kMrpQ|Z^r;VdD9{20TA*!!G)3B`KwBUI8uSM((gH2gJOq6z z+V9*ucjnH|E{EhwR*EG+i936L&OPTlKlj{w=e{-h8^86t`}j|I%x5m=oQJ>gK+1*0fel8^3{V zIIBrDbJCnL58jEw86yZhtJx3GJT-T~YWt`f9&Fi$@8cobCqv(bi(n z4_ps*{q(Pf-}0W60 z^>)N@1u~u!WGtJfm-|g);9!XAkD~aJLiIGKdKxk{Rz0IEHrWm>)_MW6u|8@}eV zAh4WOUjuM7h51^O1sjYx8p+t#45zJet~bPJE`=j%Egkjs>Z86E%jmEiJx2X$p_b-k z_{*PS9-G%zTCUR;NYb8fG!~7X1)W)JcRDHLWPyeswDq)n!}EhnE4rRzO2U(_;cRJb ztJ6V8PM`?{Ykt6b;FQNWYaPLP?tN&FyG` z$uxKh=#oM9A_hatZ~z)oGOh1JzS@dyG@0!W0HpYmgE9Uy24ae(#T|C2pyf*{TFj=@ zmjq)|qEDqpsMe^0FZ1;bwmw*bt-=^Hm@?sYrFJ`%iUou=KF@XrCHsc>jf~Tp4-(v@ySmn*7Es66aW0y zS1UJ?0{3^SNrd<#fqPsT(=$1t5Au`dv*uap6jk@~Q^LK#7zMBZ%qy5GihL$q$KEP@ z0|z*3TLJS7TW{KKYh5W3PP}&Z&IRdN#0N2E(EgWx&Icl70egEvWMo|XAqs^0#wx6w z2!`Y!zKuq{MIK|AGYuzTxI9!fgRadj&^J--8wfiNIZY7`M&Xewhz2iv%vi?%3jMJP z{e|RixNust96ta+Na@>*%sX>h7V~F5)U$f>OKstG4gN?De229X4*f@gLo=4s>jye~ zkujJ{hpgUKV7kuvNafVOZ_6pke)Bts5ra1Kyy#s5%MS#@vYHkibef!)EFDz-Pf%U~ z7h)ZAulRf#ZTzW}f{;qx{Il$Xe1VMhubbZuCmF!C6)_cEF}-V#@87qt0*uUmr3ygM z+9_Va{I}sWP&9b}^9co0;qvo{PcO|Zy8$A~Ew`_AjV;Y#tgQvEhR78TJmBVMop}y} zC34|onAY#LjR1uZPl=5ZfHQ{l)_ga;jh|W6O~57T!j59EDR( z6RCip)DTI-DdvcKwwo8K*v-_vO}utab=UME5z4QY3FW(kT($Xq#rLeegSy+gAK|D| z3;Q+~Lczi&)V_Ka1w>#5vpF-vW3zM?7{_edt(Pt@-@JC~+KuI#^V&;SZ+;ekT%Fgh zAk+bN<~4HppP}IW{4LC+=Cv0o9(N(vL$wo{=eMZAi%Ve!}-86c=Exl(1<~)CD`MQOXcm~oL zcbVSBXv7yt>y&&m7whYodBoBkGcVDG-!9XJ{~n|bVQEOV_O&W%Ax+KNuc36&+6XPl zS(~*(D7&_af6C08v@w(p8%1zNZKPS6kAFr?qgaRVPSfX3-{HA7U)!((Q!_Nb$681h zYLvR5*_X$HzUOFn4ZF{h*}`SCBj!@OZb?Y14p;DP;xx|zR!P3e8P-i1$YOwr*$L}e zi=kb-h}>JxX0Q2yH;?=P{y}cd2#_13{NSY>R7l|UJ8bmX8Apeu+345M}ByX^lCM}++ z)38K#_qS@;-NZ+YDKd-uT`j8;(@kdG!R?(fGLfsv^^Ao59^79j>M6X_b z86s-4j<)JCMov(yLOAD?r32vz^$V%@*6~3)(|PT~$bI_w@5AdzT(0^vbK1hCoP)o> zy=H82>a|Q~wRx>Z$?$Xd<80&ExtW<6B8a9sx&*&Y1yqvwS_yai$RJT1F(#*cW;C4HIiJS{KW3 zrWsrSN!A&Dss^hDh~OMjsK0 zY)olqo)bjfa!+a^#HZkfj01vpP1*7yIlSN1fv>&n>n ztZHdEn3q@9)D8*Z?BC!D5<_q99TTRjVeNAo>O z@gGsgtqA@5yAk^Lq|iTHoqtN7RDG}~I$q$k9K&oz0!o8F%r#gExyc|-6eX#&ohP;$ zTHnO9_3t>BhSTylMEO%|f1L~Nc+xJHVT-n?J@U|X6r)3a6 zQS4U&;3$Dul3kxuq;%>)7E;5x9_JN~qY}4WyMr-RA1RE_SuDTOB)@2cSMGO@LqMz!GXvuE3q?LJ?neIC zxM&bO><+|KeWW1Pa}5p$O{|H@Al@fItVmShP@dXq2!0C)zRKA&oS13|UQO`S!HyEz z{5v8L%jO2y?Jezs0n4Le`jr{+Bi)Pm#rs^XF@pp0!4hKyP;$#q~q+yQvR={wc-f9^B5-|LG zoKeHcsfOV=P9~c?LJ-U5_>dcgNnRW$%TgoK9NC=cv<$~_oGc4czY@qiPENm2ko@D_ zfZ#`5K)XgVRUavm4^Cto91fir$;luRb1WGYvp7vq;`mO&7%)GA5d0XMmcu4{zM!iFeAF)0rcz=JRtS^zZ`GRI9ez#KvEGxUzz? z87r9uHSws6E%L3nNV<0X#IS}HoGs);l+98gpPL~;;`XreRB7xZxyCBVn<(IuyGQ0V zrLEzF!8hbsAxWFfJXacgVMN3MJw%(|%(Cj}%8DupNzP3AP@&~>d!j|%uFq*vm3A;X z)n)T{6g2L2+5Fcby=`|7CkxTow7#S+o70D6dG9UG*c@ysE}P#Yo>tqgp6-JCJSu_w z!OP}TPwv|nxLbOBSm~nn24CT>DGE@#5I>~V;ToS0@nvj!u4$(=etrxqa#&Wg9GtAe z)*LYbrtD2PIEaXSg<>JHP^2aUeJL+uK!D{m zFqB3Sn3gxF?rAMon-*Q!>wOFRtmt%G;1;?&tzqb?MJLv037E^u`Cckj<EC>_@A=$gpTuCqu$%LLiPE;KZWaYV|!2AVcch7Td_MDHBw0VBM8YtkN#YOywfx zXn*I$+6~w3`L!|rc7?xemb8lg$&_J5^bZGcw)-r8Gr}jmhBmmsuOxs69E9NH0YR=d zSExsw$YmTcLPfzkI0%kCi{*CWG;Q)t>SoCk#0*!a3@M5N#ec^C<@PA4_LA>bI-4=? z#EC(w@F{Cv!{K1QDvg6DAJ1#WY3&sgCxdAzN+{bZ%smZ+ICpkl+hFk`jaDl(l^M%+ z<~>uGD5jsR zN`awnawC+AqVc{nbvQ*_(6@1U6%6!vkmO%*UF>mrg|>j=d?Ot?+Az2a&{BU{fWtOY zBL0h8KPe2D;w6E zuIFvdYu7Y77mk;6C|U(;3Z--0jYi(uX4OjtXLkHvt+@riHH6Tm%7p$bwUo7vSuzUD zPFzgZ5)O!Qx3`LUt5Gx=1J$m`f%u7vQPm``|6Jy`8R#oC73x7*yp+SWP(SM2OaXCzke@obfy$zm8rwwV9s z7VEv~uICjZ*9UQ6xDYafDl(lKsO)|+ZBb3Z**r(do@6=0dx17x_V6Yc%WxJhcbR9A zewoa;yG1*mFimaJ`%7SiyO=3ppXb@+iqKF<2F;}<#x8REKh6{SV#Rhq$ zYuftuj;VlJ>OOnPEeyQqn@Sv@}FS{K&Xv?$`u zJ}XS{=3+~lCf>3YtTSDxx`R_=$}}l6r^uGy(UfGHz7-eCW6n&hCA-atWmgV<2hKev zcpJLmwAFBI2&LOQ%-SBEWi^Vq_Qpj?Q-+Yd3m;P3vHz$>HMi;2sD4-&9mfhkSwuhN z=#XF)${!P(Kv+B-=p$oE3^IR%hAvv&m9fi`D`&?=Q@t(8*@lQx;kOD#pHC0vK(n>{ z!0i>gj+5)C3y%;uoP3~#su_t zlp84r(v9_bZ50_zFa95_$Ww+$I<{Qypa33X-N+Kv)Rl#Fk79UxszCdUkb4%=5VUJ<2D3PZQ-@W5;+!bZ7bDWa6Do6pvR#)$LBP)sY$A0X!S8h-P;qj8{ZgS-eYOydqlI zbG2u5WDVAMMRefe5(P=QT{GhqQK^|DEzDN1Ajz44@@5tzJ9ZeuNBV&f1?UJ^S5IB zF)9r`4_w2$Sd;4}E+#L>ZqW4@@gZTchb28UEN02#Trhvn-1`QT)~Lf=GSzcE*#YLns{Y){)UUX90&FkCf8nwLo#To0$J+EH>3HrX1L|$Jd807JD->Q5kRza; zxo_*$KcC*WPh3S-$Ngg7oc7FW@GD0ZQ2@75^%w@@`wy z8Q!vJxNO^Sl^!eYsjEUpeuF}zO7GjA4chJ?P!-BB8?Hi2*`C#1?FOzw6HOAT5LIdW zZ^iw-Rp_GhWfi&}D6_iU&33ge(|+t>M2F@1Xt>XNi;4GF&d zeX!v)y#m3;ZxCgYp6P|~6K2r0ORh(M@!o#CB=#wuHOwXj|7U97zS~W@ ze3^Mo+`!kp_Zqzc1g~3ZnTF?IynXxj8@KP>nThrH(xpox7kI|B&d3?gF--9()OO?zmk5D!z<}&WLc<^9?9XBbUDh{t)y4Vzm@cQKL;uT zu?O7gd&Avj5V z$>dYL-Z-6aPTB^Jf0j)+zdmTf`G=Trjwg}n@)KSWTLP7_?;QJ1`P$WrduB>dG++)m z_MJ$WTs$+LM5+P6kg4-{5*ep8X%Z>ti(@}lc-47{1seOYu^$`zv5iKFYLIgtCqu35 z>!VBfw8NR{*pE?Yqr5<~B=^DnSTfzaQhB;JLGSu0o9+E$I@`;h(5SDOIP_pnl^%O| zg0DvoIrborgqTys^C02~M83BT^tQG+;GBiH?bLjF**v|BBUO96W%9-2kMx^q|KZ6i zF0M#jSZXZX@(jnvwTiCeW1;rMorosS;mH<#uPrsSAoKlW`2O)bbUCYe4tHQ45LaiK zHS_fKX|)5{kQrA1OK?|Ni$!KFJnl5b>aE_w;VZr6`_Vh$N!|};=paPzc`n}LkLUNI zdN>)lSRIY7?+a&S8P>+fJ`u4$Jj$=)a{@i?U^zS@pV)Zed$b%L@>vkzHL!jZ9&fv? zeqh-?9XN9WWZ0u{>Se?3Ge7!rH1`GG;S{cC?Dd0a+5G5oIE{P#m}dm8hnA+>$ROab zS+|D|hed}vdRfQEnfPPhv+-#*a9cVpI?}i3coMe*dRtL=qT{*&?%-j{m)G})v$#wk zaQa<+ldcPi@Z_i;cvcS_>f(lxz(zN4c`ax=rOL4JUD{9tLp{2 zjTjPKL+XrUkAAM$q?Vp~-Nv&6@pHw09IYOVd4uDB&@qizm}ye~Zze zAg`mA10LzjfecY93a9%)XW?fSd<%a+k^NHVw4@%X5?j6Bkd?*9gGc-CI7t=eq$kLCX`H#_G=mdwZxGpk>T5Ch(hdpBh zq7okg(c`3FK#sEtAlg>f3ZhT%`==jIhDUp>r-LoHh1tPfEa>J4J!#^~6`j;0eB2Cz zo_}F+5s&>wZ!0ier{Q|5i&1!rN^%lVQb#-r0R<4yAv|CB(6dY6=uxlJ$~8|<(&nF$ z%|l%c0_{5U8WsyWybqXwMcR3S&ZYyS2|a2DW_0~f_#{x-)e{9x2B7;r!pOVfqyCl? z7@K;!vn8CcT>}3RziU9%UhhM*$(p^7e-V4^vNn`>3nZ9~ z1?c2d3#Ha|hU2ZaZnWEEYB|}*sbw<2KC?T*u)P}|V9wnLE+{-C3<@+DV6>dJ1@#E@ z!0>Q$Dj(f(5Cw1ru&`*O%{pYj!xNdObiS59Mr)nq!xSk|n?FBD55?bWebVw1-?GsaUYp_19OxFHXzODEh_&nH?mfI(55rv0a zu5Aku!KWO&5|AZ&KzG2!sO-JDdrsiCSrks8McXhf-DP%kCu$f|;eugy4GX`%rP(xYFW`#E*s2@YHgi|E9d~P0H#N)YsvXPORy!^r?RM8`d#eK0svr1{i@x6QQ`2j^ zX5VkN9hWsqYwsG;EZ3r5{I zeRVcy8NU!7^H`gZDJ)|HU(WcZZ?V)@;Zv_-G8dE=o675aI!bCf5v@LYP2XTU#7(<5 z{%*vX4M@E#kXkoRuLmt{f%Ee}LRqLCOm{q;g88Vz~(DZy=9ky?}o_}dWRTapRqO*<`Sbl2qN{jj1jM++0 zvj>W9b~+f>_7%a$is!Swr$DASEp0)mhH)ue$lwBqsoKB|Z^qds3m<31aRpWW%tW=_D1@weaKww)Ryu#c9Qf9-aQbxr#{A&%c-ZcFpc-o0DoHfpxsHZ<2;yM6oid$;f1IRxt6 zhS286lC*pnP)X?jObPwd%sV9cj0Fzak@B9V`7e&3`Q-z1p(NQMKuTu3T6xCPm@i@? zVb9VNej%A~R$(>5<4)iw+S8aV(*v8coIQ7O&Jra#TU3%z3;8i&WW=aZIBT~MIQr%K zC)SrDcsQ`Se5s1M99p&MTQ8)oG+iVs!pc_UC!;L1@fRtRv)Mx5J*|$g&xvl`RQU=N z)N6w6O$7~vKL(vyt8tfX7&XMMn)3P^Z+`jm8_UX#w=S<=zjEWso9ow?mAAfn{Tul3 z)n(-xId)xEivbP$Bg~aihoX5(+ty3kSXzr&h#@@1YFR@J-~liSgC!2%h_8n&L|BZB z0)=cCs@HRD*}73v@Y6O}drLL6et)3$HQ!j~cTG< zPH0tyRtc|vyNuWWX%w%ArGD1tdsUcTYLU$@S{D>aECV@RVtlmu7Fw67t;2S=-hlo{ z;`W>GVALDjD;Xe*q$?X6Lbx_I6l5mgp>Y2NaX7KQCgXd`{WKNyL!jN(Yy{;B#Si$C zq%NolTxRr%Q%uxcxvNt5VEtJR)@VBiPj~ZAsP!`(0r116@Ph}v+^L!5sj~T}KsIqG z=OklDQcM${q`Lp~K!o_qPcy#>ZP$nwHqBXCeUo-HDejSJhi}U0F0CWNUjg?*&?&1n zWW-o3Z0HAMxrIo17tkQiA(M!0Y%J3ad`%{iC#=P-Uf`MS_# zGmm67)_9~GA_o>F+`LwHITtrJ(!3$jsSR(YaQWUUfy&dVnz&p~iOWH=An$ zS^72QJ?{Am8+IYSA`dy`(Wh_ISB-jxC+o{foviFxd^p=YyL5rv`6lc)Qi8(UrcUz5 zt>11n4D)@1!HzH8ZlMz%cwOOG$TmyMigH@%@U$`a)HB~U>O&qJcWmSox5)ble1!w4 zXCRAl@r(`i|OxTR~4A8_y?`_1%CqB-S1HM@6iuGkg*}6wn(ni2$ca zpIezBB}Gycb?Y`_au9Aw#3r(d{7+5cxv3Nd;}3;U#ZhEq@%`GZ98Jw7?mwC2Hs0ck z`+}tOx%!dCpy`ziyW9^ zk0wwVHTmOSNx6E;bky%GjYXOc9-EgkOA6(C9O6B()|tW5Vp-=|O_jv3p1x0$mErgW z8ICuGSl;83#-Dw{zefCE+IU!~3AcG!F?~F!VV-@)7YS5N*^tmSn#ok_QX-P^Y2DvO z0K$-HjROioE$KmMA;*s=LbiegI9zq7-3}0i=*l*>4~WnJi32=N+(uYHkK8Ge&-9mw z45vl8sD$ z{7bu2D3(a)$gf8BBPrt&rgvv{yb zIsa{qFNQKy_|2BDH#{kDTo1GHgb(8AbN%NE{57l`A~+fK4_jYD4W~F>GhMnI}(C z6eXGRByJ5@hRyPbo+m^{;g;`wT6vT5B9wE869uWwD9QE?imZ651%{93K}bY}-ib#~ zJ0EG;TASXxK}K)EK-c+S%o{$uN6Co3=}o5hlsZxy)i39%*9BMF)v&?8OOmlQvwm zf}WQrMOH5qxq@8XwAY##O8TM#LvSh0%yg8<-hj%$))30tZIkx6qHOK0Kr)bNAx0?C z^Yy%XAvapV6Hq26k)^~guwE#IRSqV_7x72@yH~5hF&57!YQv`x%9q#*>u zFrh>f?`@PlkL7#l%VvR?XL{fU8(YItW;|mQv+c*Sse6o_QcFDS$`}PXY-T0*r4+|d zh%v%@;0?`}Heb77y0`8+sNSlEF)?*Tl=q=#>SL>zYFKks5;rBe`xFp54lzGnNI&G< zA(veUe~fIx4C3xcBN4B}DD^jL>H_M%lwB6x#NRHc>OE1;0wPR>T`EB0POY41wwLES z{i2nKgW>WnqcJ|*acrj#M?P=Bc13MGi}x{7q8K(yS|;WyJNkn(vtny)%Gi21uz)ZI zsgp9BAXtB_AWlv`JLfmIu-_aZIM{{;%1NwbrewRsBnLgoL6en_e`F?gl7p5M$^DJSO=!Fg z@8{DS-svJC>UYYBT5-eshgE2qKgarQblP>pdmU#Rk`tqAiaadZqyw$-E_m_CaJVa8 z>;n-yYI$;c4L-Pd9}{i;#XgVpcH5X8lRdB_dL-ZTO`qtrRI6bFtg6~tkKrXdYimkf zRp}ivs#?FmU8VdX)rOo0ws0gTSH)H)Kq@)BioLCg&sBDWH367Bnwe0G%$hby0~3ImjvzTKN)=_z*n3*6R>n8glKaO6ntb zpeFy;5aWN!4%}}31DEd6C!4~&I`})@p>X~sH+m!UVvL*rI6pNd-Wk%s-cNT)d9Lff zB7a4o^4#fjFTY}#{9jFJv>YF;EVPP$Q?2sWTJ+f+vH)DRKdZ`!l{PO_L8A~NR~dcJ zjjMa@Qmuj+Heyx5rEC}0zP5{2!HHsnDo9n@XH{`yRTaD_kgbB(CrT`_UFxAj>tS8P z>Ue2_2aDTgtFTJdVGd2h$Sp@z7=gA;@pk*48{bA%Wh^}AsX{Lb>#Bg`dz-2N9ETnc z3P;+$b*Pj6`0VHdU7t^};m5`?zQTCl$M68jaPwG|)vvUTtcpma1NkZgCt{I#UE9Q| z!&yj9zSN3}=N?svI&tdu@bV{49Ri|>Q{l zg5c0`oH%tsrHsPFsoV2_cNNulP^T_Qxc(aweEB!(g!_M4?zJx*!TXQ?m1hmJNx}b} zothfwg}Jf(Ub=KiJQVokPK<%hes$yF&H7QAP3zHyn{Fktmi2j42?#NLmL8QNSW)eiE9e`az=SdJ5r!^^vjNcG{b7IE|@8K-b zdy^P&5(COtc~;!}S;9pVJBAGZ+L~QKL zUi)*L2pNta7j|EHvAOa(KSZ^Xdhs@jo5nTi!>3S&OcaYRzMmV-;*#}rhy}GLGqvea z*L^sggeN=Ts0^wspuoLR4^PQj#HezvGqvq`D9HUdM+cQXQ3parX=J>D9ry1=4HUF@ z@T@etIu+Jr8>ZtjAS8~2i@aii?W^$s>){D`hsqO1>)~8nHQtNDQ>ghZ$`az>8EOpL zC=x#VEvmuhCH2L^*|>=1y79&Ja319kP>RrZTtJ$q+O#;4*6ZWqxEN5yC|kI!#g~C= z;cCHm+A2MQq;E0s45|{igD8Bg<2XLv(aus|UOf^npxTLV2R(I%UYH%>&Z6hLW*-#7 zE2nMW1IVYu9lTVU-%-h4scqC3@qj!=j5{PZP9O`5I^HTT>lR&oB*ZI@t>khhJjHfQ zP|er;0A)(3_FHsyCY;e(E9e5=A{9=jDpi2Xv>xuvgZynqlfrr}isH1zEaA|86E!|0ehch=V|L|7d zV}b6dJ1FM89zKdfJ}Ap44#dShIhVA3^{(lef<;fNy6I^x3vwl~JSIg0vUdWLp?aKL z&H!{FZl-on@577kMB$V434`DW7MDe46Eq!5ejF8^u~gy`EP9IM3!Gzj!HAaGGyUl6 zQ$PFfnQ*bs`YOnRB55|>l8#|c(47`uhOUx$gr75fzwcdGUBzv$DGGQu9k;t0g-=jR zjsjY$@J_KnJ{D*W_g9{M{yZqU=yuvU@N{Pg{y7OA;;IqTqQrF5WPXQ_0Tr-H_0cid zysxz&N4jrBSLec~!IeEV5zu4;s)u6KEV>^)>J3mben%Y^g$}1JhnW9_*F!mL_1yrH zP1@`;{90V9s1uK>B%HWUQ+a39HD#`lIMA6B5xuv9K89EXcE0Ij1%xKJ5B_o5rriM- zNY(HdDGM)X<=UA&lxo3Xnvln7u9v_yy%y6U!~>vUpzs_9d7_P0TPnjbS4-7&om4GH z`xHSY1?(}aBNW^H@F=tIMmVAv&IyGA2?jHoC>#s%@Kx0DMu8bVyHh|4%;iJF0tTu~ zk^&DO%iN`Nw){4rb&`u&5+a@7KSnpj=go5@2XI2ty1i?vUWhc48*!JE9##1MA;wIab0Vyy@e)n@Q{W z48(akD)01I20lOIOiKTWJgoQ|m_DeLwi8fU+$cQWb}UP*6imypSL6FX013Vuy#)d3 vqlP$&!HTlKV!%YZWNsf%Zu3<=ZrW`tfK9fXF6n}rP6{yA6;wSjXf^*IckSmE literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.core.6_context_serialization.doctree b/.doctrees/tutorials/tutorials.script.core.6_context_serialization.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f723b626acff4c29a284cecd7d2747af90160057 GIT binary patch literal 14024 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

~HCs5r>59l-{N+k3!m#>6W*~87mX)D$ z!uJ(}q}BR7`Plg@(!8+7d9t2zT(p`6QbefsXr6rF{E9T6^MRmIDn_MlP^q#r>0fk- ziWYstd>oNct8w?@e_7X(z8*&Rub-&yUq9~d-#Ag-zj55%Upi6UUpnsYFQ2IHFCTaJ zubrswU+drfbZI&Y#c3iMh2jXn(@lfO{HJ&N@!S2Le*8`T^n((qOxOF#bjZ_>&kQ5V@~P?TsI=$lM-|5->0OA`^lY?2 z7bW5&5wR`jtWi=I-+3o5u!t>Tnbmgyr5-2Pr& zm1?p~m!D<1CQe(+*DUG@zgMJe3sIcEf>NLB7uY;cmlORiVWb4ph3H5s8p}x~)nBcj z{_fW&D8ndn>J#pubgxekdR_Dh`kx9{I*#a0?0*j94N8}0%XeZo&%x^YUHI7iXKt^1 zT!AYa_&@OqJ=Y>i4AcvEKHvY3%Gj8=4qL|^S9d|W-0@#ceydWwW&6l8kr)4pZT8ET zmR@IC&%Fmwz(7Xx*IdM+3`hMo(xJ3&1c3>`zym$^Zmpq>kcj-lt* zPFl|eLvhawA1aJ|{wuGJe10;=)Bi)8=SM!j&*g%r6XA?}K82`9YUlqae15uM`!<#b zhxrxRf8hh4Z}BBZaYgaT@v*V}d`K2Y-)n1Yi5t3g>y}t$%qJ_1X0mTkxXsg)^Jm&k ze$`rBeQuU-@HF`~M!E)6y0g>7Z9!0{>w@vy^qNi+clet85+60x+?`L9=`Uh6zu$kP ztX@AbtNCj(N6PAr1GAdH(sHD%E*+TF{GRubvbua=R*%`N_V^I={gF4J58Fy-r%id} zO~h5oypJAv6MXb@=riB{4{wr2K|ksf1?}@&?mMSW4G4XHab|36m~f_VG*bv>aHm7@Nq-QW$(?7iIlp++T;F^TC%6M(OuotYNA@_wP0qIUJ}@TYJh$8$Lu*e&2{;_^ zk~<#*&SchpjMsSeX5%V{b5s&I$#9lnDml(0hpkf*d`UWY2M$aDND=^z8Oek~QURy? z0y|W%g%=WZFj>VX^s?%C0J(eCcNNP6$__rjmjPDR!MFVaDYW9-Kn07|$HHn-hG|F! z#Kfs^F8SyyZeSxko8)jv&5dx%V?N<~0N31$qki-s#e3~&MS zd9jTzj)7B(Z&}lq>!-q5g5R`)uDnecPk;dp=RClrI*<@Y{`5fd!y<>7jIcmG`Jv(K za)O?U7UK#roGQfNGD6mqP4<96e5XTvjAy3FN_c^78$Ncy6hH8iLY1(hu~yJQb8`en zNFa-#%aks1rXhZn5#JcEIRTdjgf^R?7=dUQ`0cAVuX+ZaUnstmfp=!R08z0t699O0 z)5A4XU@D%A0fRCs6;34zUo5>Tk=VS9fIOTNbbD*RP<&CU9G<5>K-WB=#X2U(NS#fP z@VHJ!;b{QdhR?VR`mf1(FgnO#0+2IpbQ2OWH0Ua88$gDd2M2eVG8Ko=jjQJ;LZrQMP?B-4MRQyv^6e@l>h4cqN3M&WZ*lCyx4vJYH2Lf#?}TjpGS`PwohI_I|45_!tW$X`y#(--cf zw19hS7|d_;HsAsl39%53P5Vj=~XGNwEhlg!>{vtpPNMxx(TgXD&q4-U=Mx7!&p{N861( z!DHx;t@0Z#scX1M&cX{?rE*3W7)oeN5%x%c!dnrvrrTl~jCcp*t25@Kk>^yD+L9S= z;F&T&pUKs7wlBmez))ASEgak9@C>saL_nqqr-Va+1w$DPpf15Yd|BY5a%|=cU<%3w zlu~lyz-b`|9$qZu3RGuggIYUH5X30~LL+~YGR5=e|6rC4XJ`(BXW=uD7f#cA0%@hv zyu@QqKaWQPEi|1m*yDi&Hm4atJTgpsJ zPZuaoC#~{I7Yp?H#Y%GX&y{J#Z!p=xk*Ib+C{q#1z%(Ik$Q6^x_5v_ylcKPhC-q}hBNXADa<1I)s}wpF literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.core.9_pre_transitions_processing.doctree b/.doctrees/tutorials/tutorials.script.core.9_pre_transitions_processing.doctree new file mode 100644 index 0000000000000000000000000000000000000000..df811d8916b449b33b71d9aba552b9351d6db258 GIT binary patch literal 67098 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.responses.1_basics.doctree b/.doctrees/tutorials/tutorials.script.responses.1_basics.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dfd73630646bcc11944d885c17b228158786fe05 GIT binary patch literal 20178 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.responses.2_buttons.doctree b/.doctrees/tutorials/tutorials.script.responses.2_buttons.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c5f1886cb03e35a29c2a06c566aa8e9f92bc3849 GIT binary patch literal 33578 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 Ef9tT{2LJ#7 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.responses.3_media.doctree b/.doctrees/tutorials/tutorials.script.responses.3_media.doctree new file mode 100644 index 0000000000000000000000000000000000000000..95e4936ee5daa61c8d494924a3f20f4eccc4814d GIT binary patch literal 26057 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.responses.4_multi_message.doctree b/.doctrees/tutorials/tutorials.script.responses.4_multi_message.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fee1ba1942451e1d354c7eed667440f1e46748f9 GIT binary patch literal 25113 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 Q4TBtD;wuPsJ8HN77rOK24gdfE literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.stats.1_extractor_functions.doctree b/.doctrees/tutorials/tutorials.stats.1_extractor_functions.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c37d339491b7327741a4ea2e7d09d0f3769bdd69 GIT binary patch literal 25246 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 WjHo!ORY~ILFp=G5x{e&xs{aS&(qOm% literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.stats.2_pipeline_integration.doctree b/.doctrees/tutorials/tutorials.stats.2_pipeline_integration.doctree new file mode 100644 index 0000000000000000000000000000000000000000..18595ac4075f45d9ad77833d0992bf5d4b2a6bd6 GIT binary patch literal 20939 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 EKcs6k5&!@I literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.utils.1_cache.doctree b/.doctrees/tutorials/tutorials.utils.1_cache.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f9c4a98c23940c8dbd785366a3433cb8839fed72 GIT binary patch literal 13137 zcmeHO-ESOM6?YP^KQ^)R(Wa{U#l)fMn#SwqqqKDsiz+H2jcTeURF#rwGCOm3XYART z>C7F+R%B?AkVv_Jpo7E{5)u*;5-La(Q9gutsX*|C3Wzrz_!H;@FXeacojW_b-gVYZ znwBb-);sskx#ymH?)kj;?5maUeg4FV{1bbV$n}D?y5%@Q=&&Rc6HaKSZ5HtCjcoR{ zY$L0Q$=JG@glTNEOpE}+c0J#TS&&`MYVL@ba=n)8D+HZzTyj@mvY4wtAXy(x}sDSoTWHni6JIq8Fn<7=VyUGbDnpi@m-V zups1a%n~>Bo$U3A_toE5QZdf07GcZWNih~#Aev|HE-`5qt3+!|FD{sO!#10b(;#5+ z{M9gCnRh(P4_ju_53icd7?`%|4eexJ;hN_u4`Yl?I#2bKdwxtZtkk+B4c$ zfQ(*XYa}P7H($%7%wW2w)O1Vk;ia@;4J4YVdjjAmOVmwD>L#&YRx7q5w@k!O&jto} zy~NNQHqwL{Vbi!G*=n4s*XOOsgV4-7&1TMXp2mS>yBD|B{+P^>)>3mgz@u3tZ(^*;?d#w#U&NLlb(Ei9>q#2kMs;`|}X2Zmuqh`?lDv0eiu=l-{$sPVLrG4C#GN znNGJNzH@eVQhXUaUIl*_#pTYbKMWpqB%y2J!%4zaUrD%d zhHPhIzzZ2GEaHZTZGs3iVk=&syXra2C`^;uKLFZ313dPU!|E{u27$Jn0TT>hoNp%B z@!=rvaN+yI?~&Gry(KOj(fW|vu0bx$eat%CEv5Wim^9zKgv;eENmh-VUvX| zsD0T5Kob!Ix!QVS$6mzih+rI#!tliK+EGZBG)`Hy2TZ>^gLnr5bkw-;;xkL<&t5qD z#ijE{jTfIi{{kMKJ!(A9k_5K4cX-{m8q6#PqPV*h1R8%FH&x8ubEa zFMZz3R;yL;0shAFO}H7$IBi^;vBQ*b%q$p>ZRBcxhv&DG=Y{Tlx1a9)dywvlz5(F! zw}(+e9Rn_31N3IwrgXB$wz=;uHv!$xl4^5Chhn!P4kR2mi~|b`f%M}<*`86O;OX!C z@pMRg_S<1t*=x_<#vqX28!;BtzWkS+BO{+v2EbuWLq0hsBEksfjMdE91*zLJGc)qL z`*fjmG@*_!jH{mS8x7>V)+%%407PcUdvVOcI3>9)SO#RsaZ4UY*OJ+~ggV=lnQ(EU zqVeE}!>2^Kg#=LoUiCPVWF*ZAj%^D(u!>yGjo=g$APwh+G`|IfYMu)isg`K0T7HVe zUC$&Ba45}UmeT`E2Y?AqenH3<*}XD#+(l9kc%9;7Ksm)Pj&i^Xm`TYSXC7bLe5a#lkjTHXc1~9FzQr85wkA5Fkt}?P{@|HeXvX3I}8!H9lj~Km0dmjk!hbd(@tL z5C^_i2ctZgXSg@jO~xpnHg{FE*)lDKHZd2!RbShD!q1zax z2F+@paYwF|CfKI9+$e8_hF^1H)0lfp0m0nnTMvhpn-onLNm*Ds$e`(


ydpbjxmI#io&CreFF?uSc5ooEr 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 Vdl>r34ialnc&Tony4Sc?{V(*@b&dc4 literal 0 HcmV?d00001 diff --git a/.doctrees/user_guides.doctree b/.doctrees/user_guides.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ba46d40d488ab73bad9c16175440269509d1cc70 GIT binary patch literal 8160 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 literal 0 HcmV?d00001 diff --git a/.doctrees/user_guides/context_guide.doctree b/.doctrees/user_guides/context_guide.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ec602d3477ef83cd269ad535798c379206f64377 GIT binary patch literal 56759 zcmeHw3y>sdeV?Se-MgK=y@wu0#39j~K-yjH&I<7`Is@h;ozO|>biO-au@EyoGrc=K zH#0rz$L%gg6=90hUfhXo7~5dkfQieNE#p+kqmsf7ff$FE6N6nQ1tApJRO}E;Z0w}` zBKiIQ-=n|ond$4<+mjASs=ComPxsgV@Be;%-}l(WPyhN?ui*dUeL=73cGt^xqtW#m zPSB5cH@te(ak^puz5Tg&_8;xf##6q%7I=|gclz-axTD^5+YR68_8;!Yd+GMjZ3kuf z{I0;MhpyMvk2fcplg(WZ_h*|^@kHo`ZO8a2p1I5GhR%9utwwIc>C=t4Z|50Y!fn}~ z-`y7wP4;ZOKkPRT#8VXwaC1jIDd9X3?`*qWr+*@<*>TAZL*K1MA?8Q(+2J+;ECyIB4_A331D{XJBvf|^3ysKV4SQ20_MSP;GT8(3gOxcqSaL=2!jP&!UzpJw5=fY zF~`VvXiOljVTB$pdUTT*yeQ<6>XA# z)VBGDbB-VI2<6f-yWYf@4fmYei0n4K%(t3$K%=_8<*jv76Lq_IL$~f&cDG^G?XFb= zL=C*zU2y?rZNqZIGIRNC^B~w9)9xn}d7ViSAb3~X4ISTZ8|aOv4ZI3*IT-Jfm^OyG z&m1bBxc7n=UI&66jQ{&Hn@|RN(wIK31*jl)-?|m--V8n}!W|>{!O4}-*EVlp$=n5E zvZR8bKcuJi+XmB^B6HSpdRFK|B$W^nf8P>VzVk>Vgs$d={Jqz9onWCvzc2bu8)DR8 zCYN^_*Sa2r4B`igB`L7G8XPOa2C&Kd>8WKc5(gUUpYlG^*fx#?bnPB#; z22IWD(G&Fu_OO$dC-@|8y|mVJ$)*KNzV?RIu^SF>NXCg?6WDGeL4%OGM3p>8eYi8v zGU}77a{o3;ykUob#?(&DE8;yQH(=k&I-G99?GYga;FvbFg)z>D%yCA$JMk_I8*cOv z$m~Ga&_`&4@3z0{g#Gx&l>0rPhQ!ScuVcGiJRXD%L=bp<&Gx(f&3GDrI_psVbvMM< zNqpruTu-)Zs87$H^#`D9(?~cNKlXHMIs>t3*v7WKA1g)|iZRFy{Ta5s(bFPe+c)Xo z-O8lTCcgKj*XfCSkfLuf_uy&}>OB{V7=IE`;(p~vkZ+puM}PAug@W31(B^X?W#oFk zhp5ZpTgff#x)j2>h}--X8}0{LJPNGI+_9@jvEf1qX53q&YtkCRjFNZhz|DZQL#AT^ zo&ypBu$8zO9%{$#x;?~x@F6(56zV-~Iswb7PlO4SA9^spe&j3+Uiy~F49&3x=)30Q zqZOMHpl`7Nz0bN_QI{}Y3NOVN@A-geR(5 zO@(0066At5y)|}w@I2?CWYA7dB9a?U*MmIn0$Nq^9lov-q9Lmm% zWIw{J@3Gr~qle{71kS9)N;z|;?L*T(6C+!$dt#{f- zf*uq-QqDc-UdKO&Kamqd($EXwV@<#S;Meoq)Lero=LYMQ2KuZ@)@pFYCyLTgV@t;}j!om12G!8f__pyBsZ@nY{t1>je=&85?*ryq;Bcu`dtAs$bkc#&5AUY z3jckl*WQ>T1R1xtZ6Ll{EzQz3PA$vCvwRB9!8tcT#ny^pi1}EG`VMe7{yL>_k+n3L|?=?PiR1ejLP5jGJ)R zk*%vp1Av^#6f0)59^d*Do@WhL(8b_8ppmWgxWe{~#J0F@jP{YO!)mdS5FWgCE=@CG zye0>!dnM4)nka}%3^89c#`*Zx!98{JqAWT#jx1S=17n&Q7biW&iV9Ec)1a6l+q zUbpc9_ge;1()?S}B7$O^1+G;br`2yMh64g4V-AH*ATM@lNF(B2n( z2zWo$lcyfM>)7ej$4|T-L#iN8xG-xzOu1$IH5UagAGY0Yqok$kOaz61VWHHqIfVef z5g^;=@P5127U=~wEshNrg_lK12wm$)O#ggwBp4j>r3{A{x@dQ`DsZKEY$ts+p8Z
>Ac$oi5SP8T51px5%Hgu z0p)3Vq_%?0EiKXU*ZTRC6aW9qvAiJew$x@FGK^;oE;o2SQi;p_4NU%{vl8kMO^{ymV^kvF03srDFNa(H_%e% z>U!OCjwkH=ljlE5c(`B4Z@z;3xG)hNkXW!|R~RuJ8Wx}8^MsZ{`8II^DftA}8Clrb z*#SZZP$=c(h*4r{YiT(FongbnK8V!N7gq2&fB*urC&1!zx~8UTfU<{~nHk7Y zP_0KF4bLr^PnorC{X_R)-!OaVe*f`TzVq+evQ+QH05FB*Pws;NR!M?Yt$% zaQ(!HoZ%S#BMswEQ!l5gXBQ$Fqo3L9KhMliut4D^b9j9+B=V={A(R>elEKi1@^}Dnj%iftNp6@0U)G5 z@8Q>bZPGD(cDaB*@`(c_qY@W^ja$*j`OmzpvI-iQ6kb~P&sy!*y}kU)yuD5$OWON? zF0dCc&?=0x>@TXV6@qgrz%?HG^P;~t+(Ii3Xo3`fUb=K5k4NP^&Qvz8sNW2tlcUBQ!Ds=ZgA?FFC4hi)$QI=?us&_W zPG+6CUbBSOa2tYD|1)1>bhSd^Q(p2=m0XK6Xitcfvoi$I?ZwCYATe^TX|&{n_W#Z+ zoV+U13-0XOZeI_^aBP%IfOf)GzpAmL)f!*exG0^Bb!FukU>)7WVS@ zuz6duRiPJWu6iskMqXZ?)q6O;P@Nv0{~bIz$r~F9_Gyz4*goyFrcRd$U~q1KeJK8q zs0A$}iz`7uB6&$@9G zUXCy4SrjoQu$W8$Hwl5uU@s^t;sbOkw}V>{zdu(BC=Yi*C~IoE z9?VtN)Nq_7!S@{ibaQiZD)58J!73dfg8y+Kd{I4Q;I7mcX;}~sE{fc$ z$gh6}STMtLQ>>yo4I50VQIU_1i~A6?B@4HT*zEi4quQAy&8s~Cf|33)D@956OcN-% zKjcMP{8qjd^=4In>L%Hr&-Z3|WTxc~61Byi=%;^s5x^+|&{sduJZNEQ32mV_p(_-% zsB%vZP~rY}DL>ax+fAtv=Q>2I(?>;655^DdeV~#fKAWAIilsyF3#Y&gnp5Nd9Qt3M z4d=vM)xZuX;P_|m;Be-#uGDoj+4LHBXG~-__X`+b`Hi6eafxnn5yWUVpl=|)sZd(> zU)4zG{|!NKen_Q31f1%Ug()U+GRa9@N&T3V!)jPTVn8=FWu}I6$HM`FIF8eNaiLp3 z3H3;Q(QC9yYp4x40BA<7#WX$FzdiY5FOq`@xZ9=b)C>*vjWk6(tel$C?)xy7!l0M| zT%%I?GP1LNmeyuvgYnW+>Lyg(E5V9#@(gdy2~XrMYUf@%Bo|XK%E`K`Wtm##eUPsq z4+hG7Fe!ME-a6K4z;^23F}9iKd$i)aOR zjcghn?hjlXi#dknE?8mMI>kv(a~^+Y_t%EGshv!r4!d?VsH*Cd_9t(Q?c{?l$SxGV zE{%DH&kAF(uPI+t@rRwG`g|NkV7R`#)aVG+dqJrNoOB%<^JDYEUJX*UX}a-R`@JuH zjChNJt~+{l(ze{XFZ2AacJ7w35*Xwb7n>%oLq;qJ@fZ2LIjGeq!Yd!g(gc1u?_QL8 z^~a&fR;f_#Orv)1J|78VX1z8eTm6``uOaPAamh-?Ixd%X9ln1|CeQfwb{k@5XrT zbOy)KO`9W~+N@8u0WowTYnS09=sf#b=v|b}4#$@%+R>wcc{P2bFI|o2^;IYccdf!z zlB&)&f$6~wsVhqPJ3X0(EXous5TUVe20x-4o|-r6nVXOW4>`w~AACE1dtp{A!QnfB5NjKKE)$a~A6xUwyN6cPdf0wic~3oebj z6M{oM3GVJL4G9Emq;Y86-QD^3%$++k_q}=_U)8I6{f+9w;heoUYwxwz zPfp+S8##I$mg~^?FE`%Li1&5pITYbd(G5{Ek;_Fz$rPpQKSJ_F<36+H*o^@vZ;TY~ zB*vVYK8Qy``MQp}sr#pP`L{T$j#S4E6R=xl2zPiR@1h+X7<}zyR50!BnG_U}kkAwF z$mD3eNkKp8}|^i;w+%JG%rmq!zjaIOB@_dJi^0YbhFM%c~_ZpW(^ znplR8-kpFe!Q z`FSgmzsKtEAh(m!!ijA~z<0SnpOHI$bL+a)Kbn#o0gUwCUi45~=)Go7oTe+IEz}*fj3%QO?$>-o7>xidQs6+EHBb3RpK(lqZyM_e)s}d zSwT|v1Yg>f%{S^*g$QTVNo_(ixm^2s0aR2$wQkOhW_WM{9e*&tr|Ns%{@Ee}q9z)D zI)!4GA5AX~B;+dF>kX=;CpR)bYj0HegilN)p-s6TubL_pNEpbL$7F5f(VuP{5eq*P z4)U4L>oG%XPS)WyLo+@6C=jl<BHAm0KQH2 zl#~QJ5;xG^%x`>gUOJzkB-y}ji^cR}V-+xFWQ?p_l$@cUFkrXP1NR6a^#esthZK^VrZf{I|MsqPn3mRZX{pppC_* ztS4ELV7e)r!l6U)?bCN?@a5&jtCy+euO!n-C~)Jyc%RL{P-e=qAZrHt(%rAreWNj{ zFU1S^j8Z?dA%$}FeeNu=9_RB82^kvQ>h0gM{;~YIYzmp7ls1Z0vWCfMt>igFZlCul z=oG|j`%WZ{R*%LJCYfYgs)dTjY^uUB^iL9C*Y_zr%Zv|(0J^9Mrmf}*EtxiLPK}wi zqF<1U87`q(kh64olh{3sO(i8K_trT*eJ~QrWsPvsb%ZVmtn!4#8i{%R0aUgTAqF-;y!%0RPgDqM>qO-&qD)kGL0ud^1QsjWJg_h-t=y{Pa8MiU>8g*(0%!J1?% z`vjyIS!Fb3#{SJ4z?uIFHP5C0a0B3N-YWY^~O^5{9IAr0I8i zE#(M567O_bsB4eTPk2yI4AcvMT$Vm4d=vcG+#@@fQ2-2dv)FRb8}m=l;hA z2?|QOeVxLdP|>8rRs8!beOol%(xmXC;H(GQ%JztH?{15STc!4{$Is>yv<)To535zN&1Tq52A3N{BXu)#YcgYV% zeLNElQsK8Izs7Q~V6S%a(JhyCq!)c@y*Jv#!NI@r>^_@)8@(d+1KQG=BH;GSkSp!K z3SXYN5e;s@-3e~HaLn(O7WqEjC*I-#4dP+7m05b!$lNLbV1z1;eIaFuFK&>*SX@^F@$Aj8hp0uXnLVe@S=o$GF9Dpp#5Z7+gee1?HdRo zUc0c>_-qbLJd2p$D(-n(2V)7W?klG9I~oJpx)#41-+TYY)Vj0N&_+tYfc#)7EX?2J z80A^o#1~Oko%}G%Z+84v`6*I3DV{R~o#=r5Dzc@_A6?PLJMzcI37N8%JCgPs)ze{+ zPBJ7z;TR&4RTIB+6>l2!tAK)A-q@gJxN-{05uBE)L%)Ae|sAPIxM|Ao1 zvv5k_4aQu(NNpP>B5a-I@4CDU>e3M)`)j>InwRV;ul)t&ozsNZ7o@&dVymg2oox8J zTS?M>N6jMDO8=w;IuPW(*RCr-L5co^7l+b|t3a~_i8+{W$KQVNZfArxO@f+Aq1u?< z4srz^`bSq@4(?hE9CfX
  • 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ǦWmXg@mW3ZlcS2ksmozzzwvuN6YYTppW86VaC& zZKurw_TK0wX2S{*`6mqGL#e>VAqRk&50(C+Zk>vNSTtDx$k?}m0ZYJ+;D@EVwVP!l zbpGx2&XvrjDRF%=ll`rOdfM7zwyvgfazIJ?=KT@+@HBlLbLcSTurXU2co1qo;8b<3 zErHk5pznUN&W(d(54nVU=x-|1aP z*EB^!qRzsyiw@*F{18rZ`wj@lW?B-rJ>`w$!pq;^xtYPz=LkQLRS~zGZ&6C%+E|s7 zTVE>fEUS4g6TuASiscv(Oi~S5b<~G@Zr4{F4Oe;RMyeDO8DH>N)f%~9@L$qR{q9;Y zt==eJ(fsN%H?js+N zA#^x1JP)RBFfsxgyE5FUzBBb6Ru(GmfF`%Sl!^tj{O?lRTh+cZW_-bSRt_8wdPX*i zQ!{RplF$|C@9K%H1Gh4ZAkiy=UCU8W{K)cMzm}SM_jYzn?DKDN15m-90@3fSGiHk^NN7iwqp!;-;GF3 z)z#%sS1QBxL7r7}x4wI={53^g?N1LUK@?qi!z>Z{8Lbh?L|Ij)chc5dAKqYnAz40N zX)VLX=Gr2ugtxc;-MK3Ns_#sa)-Tl_-*VdU^}JY>hy(-)>)e7S8}S^-46FG~5|2pPe5(-7etY43K{&}a}dvm9t?mKa6n<{Fl@4JJ2PW$c%^eIOUj8d2MLSV=CcNz>8rS#jKl z_up5Yw9^uB%^qC97;c+`c68h z3cMyRHMp`psa<}4;gUYUDo@!<02dWB&G8xIJH~Qkig;}m;gbSROZ$r~Xo|6BM{d`W zwq`dY*cErlZBNQM1?s6iocB?kGU4)If_`eVHsVphB z+(|0ov_Bm6@)+3>5(BUx)7U1_Mg>+&M?WJfZ;2rVlJ)A0y6}2U zNAS${^;9RZ0Pt<>hDrGaof3}a!$W@%y{?ukzz6Q$e_HNhg&nN*UtEOSa7&H0@3!bP ziZAEWqh6~!UsjJ7M$kysQp!G>k6);;;pHanUvjDz6Mil951DI12d3tn0s@IkxvvZ9 zrx~USMJ*6--mX!iTZ;83f{Il;d;&%;jNkyfiNpK$m6FrIO?@vv?PhypYghqRU)BJ) zqq+STmOEkQA)?Qod5_uv+P_UK*%bRtGDA|wH*B+!<-@!8JJTz}`GX5gmai|b+uvE~ z7j~TM0Dk0B1C(Sp%~x}BD!A{bO)uIwlLCFYP^s5sr%HXHCGZMR3-e8rPS#``dYeGb zL;VNX^Ih5E(ij6`fj)J8#r*W(vULglJ&CrnM5WvOqc_*r_aq(`*CP635+FIB8*WCU zH&=Hn=8MG7KiQbyitE(0nJ`H9+Ud~XOw$+hq#5GDGkg-apgYBXCfy9xg<+<$yF!KnLu@cF4)M;VQ9GV}Rpt~a-` zh_l_@kL*3=%F9DPf3BbjUWD8u#CbM}ocS06zx*v}t^P80XxI#U+WvxoxZdQ))TZ*+w|a%^mal%@no=btv{sh40xvc&cL@C3R#Elv zTr9nQNz0_x#QO5Y9hzVWRmgKP#>v5ZlZMuAjCm2XOeMg1>6P2v;70M&que8$O+MdR z>F_dp?NI*UTYv!2V3WBYR~dPU$|oHVjK3RXF3Z)b+SjS|G>T>{GrhE+KsTML{I9(BQNJWqIoa2}V2$s8ykM86w*xuw^dC0?x0OHoUHa_>y-g;h}b@0^Vc2y=>x z8fw0O^q8I9ap_a&Yc&@Ix#EiMs7}19Ym)D4?BE`|y!!G!$?Ny?j|z0%B`4y`DsnzN zRtq!#-+FymiUOApmy^~0I`;4q>=ex&kQ9lkH#VN}@ww_Nyn0D2`3iT{7(6gPR_e(N4}tjD_5Oc`z^&K=HJ5oVzcv3yaaV@JJuh}0sGIr zp|i>+z}V!FE)d!OscEL2B={5Fp!2o3CGE4cpU_UpC5dm2zI7L)@!G+rw2x~Mii^`a zjQ-1U;9;yt8iD>b_ptjvVk`q5P$VQ;Mp3SDFsp}!M>hL9{LFe2GMV(Pa?S;%2qRY| z5Yr@Eh{q-BcmZfxHeI0lzcS!d9AkIfc9^LKd9bqhZ1`IduzaKb#tiOfKguShB%zYH zydt~ZY%Y0%+CdKPkC$Ye%wJed1LD`c>7|;L)%hmZjjODq^MPE1`sY6#XK@^*McdDF0f=%aPI%N_BHSk%E(l%~82l#@O-VKexn0R*`HO~Nfd9b7Yr{~um+w}Hb90%d) zC1ZWd8gMm~Sp0O=y!b9KGGol5Zc-vzo6+D5Y(bp-xe44Do+c-hOc)t+9WJa<7{p{` zu$TP!79Sg{rmjYeKw>!9N7Bs2a-ItMW!u6B)r~k*Ur(y8kSTThkH{ zvZiaCa+jyXL;1}TGgFEX=V92mN~P4mo+6jUcdenO180vpnc0=-xpNp;_2uO1#<%M_ z-=utIc;Y;nmEm1)0lV%V@Jr7^(qnae?^D9pjiZd7U_j10`V4Ua=laA#xfWoB*1b!? zqiB|fL>dkIwfx8weJ=_JDb2qO)d$HHkwxRqiqrOMzFSgK9Og7*C34DCI?pNpMQ(WY z_I?`XbwB*w$?*!)m6y`Jn+VP$V$!EJ-rkNKj6VAC+#1O;2}OAnd>{bD1_R{4M*)1R zx8AV4jud))7(xHvo{2oFZOGn<+}G#la!z|qgp!y=XQq`H_~`cPpjDva;1Ll6&G&-w8mch@ zcJ4Y>+FZh2jn0)?1s@$Fs(nR0XBQ|9rwX3ig-O?}20P_VlHS4Ik$Too&<8<1y|}?8 zOVD=YXT3Q;;W&qyq=~r?LL82XO`31p$!wrsC-EZxL_DD9ar;mAH zX!ZHQ6sf%35L_GIj%q-oYB-yD|2s&&TeMt9P<%Lcjd3~`z~(M6ucZltuWbr=iXE{AI+ioz{P^Q;n9L_VoZ>sUV7r|FbA|;Ry|-bo zVrI<$neN1KiU!X}9zA6c!)3B)QA8WKd_IojHWozp$!HSu4A1-Uuof)~J(m)W^01vd zsV_J<@Eqz?1#)*OeaYn0~g-OSmR655k5IdSt*QO{DMn3s9s=%7$&ItzJ09 zp1rT2G!r55p0>LAVFTwd=AI)3*UU5DKBm9{&S+GXkAvA}! z%hP>p?t7$eU7l1h?(?Cvhk?c&gsE`7_lSd)(EfCxTbFO z;m-xaw$-vJ$EJ(4v9=~!ZmGWRTSjh%b7K>khnuWd=12D>DpNUWu*>ExUl7T0#~(w^+|8xFR+H&JS2NDGGI`9KpiwO?ld#rO}_b%gA&51;FXo^B1`L=PBhIqLq+v0=cw-k%x&7U^Ma?CCw#9h-CgH(3fNBld=6 zOBsS9nfVdkQtRJW+3f7dOg7X`Z|TkSSw}(yM5G`Lw3Oo>tg?FWI=-W{0l5>lV8x!@IG%8}n!5Li1Uo=XCs1AVR|Cpa)GfxyOtr)Ed*{S+qqgNB&Bk2yMuB3D z|7l50%W?Ux%c2zi4+xjB8Tt;=uOXH5h1##IUfpjG2V`ZVPu~mL&Fo`fPGp1xAie(q z@v%P#HEg|rCtR8u5_~Jav~=gvXzF;dQkq&qWQbR3m~89|W@`W~XH$tPZa%q^a#AW= zn_TGdv>tD|RWz{xFCpMBN{RhU?$h9poklAR_~C@H;Hexe+#XAK;3IoBVGf$bLwR?9574-7omy3SRy zYe0V_xs$AbCRb z*_3IGmzHJ~d@k!j@E0bg3I7REjjiu)zrG6XkwK*HHDF?eA2v|O2{VY^kZiAAOyrfT z{QHuIV`yZ3qo}+*|AE1s#<}YHAxih_0Kj zD8D6VV3JhTqGsZE(l&wM6t`i^jktUrHa*_Qtl^p0g1#_#Nw^9;@p|o=oL6Y_C1uW6 zTt-;2gW2cK_(&287@3VgxNi{J1gYB9O&K5Wh5IL3gI|vMJbrkgwUb`>HKhUXq1VOo zK+~^eaWDQl`4A#kt^2%fs;gEk((x{8Z(l5pv-5 ziWn>yE|Ud4Lf4v*xU;>&rFv*lraWQX+j5qJmwyjp(S7zOkVW7UHR4q80J7A*xQ}X9 zrXuSZTmGh{DL3i+c2ySm?+^+QwOS4(dd*~ytgY%oDAoV3ovq9zW%+?u?Wvv{lm+s# zs%y5|dGVWLUCJ3*IA%A&;AQ_oA8$efT(ZbH)owzj>@HW^!V3BEm8As=Ar=VOneN_h zuhE4=aS^%kDRm!~SJDE%r^hhdiQfM-gU6{U7K~oe%dM29ExE0{r3!hKmlnk$bR&Uc z{o{nWy0Kq#3TI7=D=P~hm|eeWtZH$D^8osj%?}dOP=7cte7;1=3khm^_pTC|y9(u+ zLeQS=kj~%}B-2pMMG!}IcqupgP8~hqS$zii^8EkW*!s3dCZ&D0Vj0T6!sS7N40E3` z@L1TBqk8x{3y1LDHQ_^g=JKKf9EilY-a(VU&j_b21k!Nt`cH3K?~9?7hbkGAk6G+xPc-Jbi2v?^=cj(kq}zDjKjt zh7HEs%E!0LN;ZD)7f~<_2wGS#jM*D|{G|yG55G|%QO8hbw^xqa%xAP2{quXU(_$JPL>ew+yoOs>-j_Z_^?Ji!Q~Z z&6uicVRIy(%{fzmx&0gmMJySUUaR%fm~Z>*M*M6f|R+)$@R7UiMDokR;4^erwmzfd1)lVR76!!ZS^VRJ~(bEVV{~4x; zeEkj407sKyi_%XdVt-Y1Ll+AfD{Y1sPA#r^y{>N68>*^fNvP1f89P2=aeM3NR*a<6 zaz?7LOz>M;Ya{fsiK^QB#w__hB0?}BIIu1WZ{Omd`#t@0dq#j!YzfHv`kzIQUj1&9 z2DeDZbx`kR1Y?Ws->K1^E?MFzreNq3JNOa*O<(2dvqB1p*~4bW#8#eW?Qw$mgqmGd z5|YQrF?59plA}I(QWqxSEDfd1U5=UH-xqVQs~(r*f%peBQ~t1NwB^123k5et+-_}0eXB!!-@)t0CjZN~9=}qo7FAVYP>E-8OoNPvMoP94 z%K0;zz8OA$Z8PZqF;z}!Iy+q*lY#zf5fUOHH(>N}p?h#Kb76Le9j~*_ZTWF2Zz*|- zWpHUVzy5TVgPGf>l2Gue&l!~si@34b@9c^wAdq46b8o-REt3`xe0_ga;x525dE}6EYmJ?-ft31wxu6X`{ zvA&7p*RNkN>AD-E%0@%9Juk0D{mCA%6~c)I+hHdUa#Gy0Eg@lcN=v?@yRP$PyE+GN z&Ygl3gtGp|RK=QHpxW9*JnC4=)jmX)7C4o0OhH2(w4)2&hn_zp>dJy zKpB1@*%w=f?#rUCj(#p2ToFL|AkN6meZPtJ;}?Vw;=bFG@9(w&YwVv`g0$t_v?IO;8RepNdbQtBNrTyg$Z$&%i{y7HgF=|Td>_TpfgcjdIQy+a(ot<lq^48;U4RR!A=e;W*KmRxZ8W&Kq1Q_y6%rhU# zHF6t*xhJo?nSOm~4l;vL0*GeFqae;AHNS>e72djJZpXJ##A-(RMm)dguY-+nu}C8q zE*0<775Q7@A)B~Aas^=F7@kWj*6$Ad`= z6kVMxKC2A3c$tx0IB9|S2?w*(g%tS&z^g6R3S=Ho3u;bIsqsJ{r-{G1QYZb~r^1u* zAewT-w~@J{vu0BdYn}Jf%JO0?@jiZf`sw@mZ@=h~5hMkKG%D$q7O{dsF2xr)eFveA z0v^>Yh1xF@^RK8VDdGNXfj~$2nG`Sn3`PXHl)Q#O0>_SaI_9qDw-C0#P=`=@#I0|h zb5=c|8f}}lDJ?Ty@`$v=qw4=YOR?PIbzHXt$XJUHkQlnfP6U&lNn7%Ks-0M7IthEK zSYKbgrc%_uo=1^?=Z1{4ik9C6f};8+kGxr8~TC428n-aBMubV7ImD-YTqs1A)8 zOb>Wpu-jCR60ELfzTkD);V(vIDFeIrnEh^{K->dKo}kc{`biD_^6#>v42&7=4PU>? zWzc5;&-}jnxOmEsT4)Nrd830kl9(UXp1TJeeO|zJ(Qj^gv@$e4K5bbvswXV_vs6U! zr6*aO+jMYjN8fbjDa1LD6jzHuArD*>Ve7nrmH|!v}#7X7b4{OVGKDvXNS|* z=?=^1s=l! z$d@AUdVq4NDvf2?hv*tIH7{@zGM&Pj1 z6#4^7tl6)x=rqTeN=|`{C5|slOvpfGZ~-OWWvG2W@%MFo);9w7MZ#GKg4okE(HE4BS&F=Jc1|9R^vchN=VWH;vYg1d=dCv$I|mJLjJS!Uhmwv>k@g%Uik*`Ts}*7Ul{0k(0?CL0VCXSfyg^Z@o*6+Zq zNvj~ymsivey~_q$;YU$a5zaFb1Q49ir2ASb3X1f>!PxA&Gs8b^;q~yoo?TrgUE>{6y zk{meFH^d6u^vuDe54DUj?08vcBj46M^gcx9`nBt`D0UZtPur3 zN*IR6=d}K=H!<$ZWZ!OT^PT+-wabKi{ z?t(jE_Yy~GEHS{B^@8kP-3_^t1rjKkr=+gGFRm>Qu$u_tKaC?PjTgJ;Z9z~|;^AI( z>*lsw+kQo-T~QMa2b2yvZK*YR69K{kjj9eI@X!%8G8i zAWbZA&-v@B90xf9`-f}}{bRMxp z%So$aL4rtcP9LWwjZY+sO`p*8hoqn+LLa1pQF{8g#qVXH;A$Mi#Ee{Onv-z=LvO{D zm0hHo9M^pWwv5=pOH^&sR(!^zMe8Cr2nUa5gpgk?!%f$*X6@l9mIPBggR~MMy8uiY z!{qDn+^C>w*f*IUm@(l)9{UOJSyz}*O-2k>55k%*$kGEHP0bPMeNs`JMle#M! z-18DqORa6z^;uB{htG7nJ8p#;q`L1OG0 zUkM2dBSPqJR8-+(`);Ll|G)u=@FgaQGl#$O8`pXt38H{R7=Jj>S~|8;){Q546HY~B5l)o zpUb~>g6zACm_9fxiBT&F z9wIqDHA%ilRKyYR>F2wWPvv=73`B(RI3C4>E2oiQX98ez`%_ZRL zp0&1fX?_jLFTnmfx_$oeHNV=m4H&dEw3KG znCdQg$Qoh~mh&(v5@#&WEuL>a0w(gkNSi+5g#Vq@k07u&&tH<{;Zhuce@BOL-h;^8 z*Gf`AFknYmlGhbpnpk3z>hW5Jv`mb=LU6*K0ZwM$*8G>-mOm7=N(F&%f1lJa`EwkZ z?aG6Kj6S;lM~E&jJf|{l?4PyPdn_cuLl9%*-QjTYeZgTJs6`lMAuRru><}sHxxk$q z@3%>HLVD7*x17T{Yl{}cT_U7`0ggjLT?j2E$vdzh#3#=zEGn;`0VTR%h{%^WJ>lO| z<j0)~gZD3pkQAsaz<^Rv2>J4kehK;gM%F}kYLQrI!b5`swv!mW@1FSpm)=PIDU3C+2#|0n1K-re4u_y7Ch zuVZ5{zHE>*kgY@&9jVahJte{d*J0NdpaJr?sOG>M@o*T<;Q8e@J3RjmT=P9r0l$Ls z_C!ISi2W{TC-M7Oibp0Ial)?8fFsfjPh!`qP#6SiBe^*C4uetAe2UqQG0HD*ukBfV zKS~e}Y{~#Cwf@)NavMi&>Wz9E(glzi#lvtjcI zWZiTT@n*7057}SCdgz$E^-@YTr}Tm>)seGNqLvIG-Hc0q`0+BUr{9*-V*eizgw9JU zwf$<6#)$PM)cq+y<61Rer1$+UVvz{hi2AOpH%bt=lKv`9|2Z!=Hwc>i+2kU~*bNHb zqX`1v2skQ?C_6l%LE&qR&+6#j$OkF75WU~J*`nwb=L;huN6l;RyVf%m%<=JaAXo!hADAW zXsjhh3!&l9iJnByt~#zFWM!(=kcqT%xb4R3v5<=$6|a7$>#M>(OC$vyj>8k(Ha)7U zaTZLSXS7_8gEiT=b6x;70zDih+ zM7W&!W&0l*N8LoL_?x=F`2u#r_DZF8;Nv<%qt8aneu;0qxP4VY&*hZ>xIocs8!rX^uTVgq#nuJ=J@jNF&MCNc` zP?q+|S<6U=<>@RGy?g()-QfNMBfIWDt;)`=0~C%c_0I0!E!AI@_b+TAY)&#za7F0~ zg$yzCFC-u9FbR;?U)Ei{GC-00F73SX#$!T2Fi)6uy*z2#lMpL~?$n+rA}@L5W|rRz zu66|;f~49vbBC>|s;zcnK)kEhyKtE~s^0Na-xvX%`JrUiwYL2>Ext=W$BEhBC( zB9tZ$Aw~h%DxBiB(qHHI#CM$6cu9$i>a00=IXRidIGH&)d6(kej^^0Fb|uX3vM!s)`a1>fD7nHfEM%?M~_oUl}fNpxS7vnEcuL%6QFb4TaZYm_g2* z!=z{z+B2^q8G|W}EYV5eRGa8m2829ld$#+_CExtzN#6P=aglE~T@olmVWE3R`@gv= zu1V{9Q2CMAJ9HPhzM5CtSDtT*A@an>=@oQv>_M3b|0u~b!1^?trdPKT5@}ejdFy|P z>Du{acZsRxvfhP*)W9=(ZrLVAIh-eMIgt>jz&I5?O7ZJLrd>>p%IJFdNUywce69ZF zSqzc7d@HgZwK%qCXDuU6nXmD0raIC0*DIg84l|-R3Lt6UdAB`J3IB;*Zsv@GCgyri zS;d4iCG%&rF2^3&5;}rT{$@%6j~;Q5dIUOO%#WsC28U({pfg1CMG)F)<|P1Zatq^ ztDD=K*cddR;Bk~2rsj3@bk&pm9mWn8YgrV>Qe~&4XTl?5)kk+=)bh*p)+Ga0$w`IE z>ikhds%g);P1g#8?vM-|glpqJK&tVmWxg92T3aI_HzuYwI`x5sgf+Gsff-Dg4-N{l zVlUw}|B+%z*~y;Ckz)79TBd6>owbg2<t0xjE5;tH{!>y?V)`jV+2T zKii>&W)S7{<`yO;$vL&QHiXo^#ITbS>v|Sjojt!>l~gakQLXLiZ7t^s86sNPLgCs9PMh2;Ph55Yn`_s##5)Tv*;7{cgu_FI^E^AITJwzf8=}57mfAw>DhwQX z+XB0%>Qx*+;sLM>+~3|jpQ&gVE@n|x<`KodL^?Jvj3eg-(ahK<0cB~d++&Al6HybZ z4h{~dIujC5p$DV>A-;&u&KC2VbwIkjPSTIraBkw&O7|Il8ar1PY0yJsM#gL~b zBt3ZaDE$%|nyFNPW@6rve|wRECSmFQt0$)p+lU$?k4|7Z&dNF!@_&9(*TAI4K3aqv zC&+!%aZZ)OH%JoU@Zr`-OV$&lD(bFK%8BZBoDRByrKR>0`f|?Zo$_7OsGn2-+UswE zfvl|iF*f8lPQ*+mxo40@xa>=$IgVtXj3w zZ`lQ#CR0=65Mn-dhmh)?P}IQS6Y7urjKVfU1NY5Ck$@#k7?(1PSGQVkiL;QcQW?E4 zE4`o8zZr+GcS!1Yc7B|>53b*Dd7cIR68VpYq75K%G168pZ{p`8xg8>t zsrS)FiGy5lt<0goYAY%;B}>svD^rp_GAj@{2Crk$er;?lF5p#D?(dKurj7` zmT5tn{@p@l<(>5t!dXEWlr6#jDrBDBa2`P<7;h!YnLIvxL>t{}t!vHkt-6C3Ej=FY z`tn`2x_B}XO+LlNh_Faj>+09^yPrUXLgJwc1qH8Vt%gHJk5*duK+cN7^BHW`=o*&i zW-VeaZ{>>BkOjz_npiyOgxn5))MtbnlX+9*qjMHWej?250oI5=?T^aHO6Bo+yLEPI zT6&~JQNvB1*`2Gb9{X6B({67Dyl-E3bn>~IkBwCzNJlNxsQlSb`)-w%?5wn$zrq9A z_(lUJ{j;2Rk+=3`yhJD!$I4(rDcaR#cy9T^Pe$C`_TJd)W#nC-QQ4D?9@wZElGt|Q{`kgJo8sEAkZFAEK7L6{wPzW_b+manzET=1D61)Ga}tJCo7$cE_#^KaLaF*VBJJ&3@|o%Dv9tyBqhBvWQ=U&+2uV`d>Muq4`D{739kJXcG9c(?z4i+`17CV zmtMtFTS%a}u<)#a@s9F5r#U~@0eCO|gMeQ-sioCW|J8}7F4E16Ixi0x+_KYp|Lq)uX16Pa9Y z^^~R)w-pW`4$S7~bZAWH?KJOvG7)gyQt>2!&}nx_xm`+8=3c{4szOz9T@>(?*16&0 zkS#e%x_7{6&(v0x6*tgSEr)*K`Qf5nBe$USe5V1Cy68UJ%WgnXdgM-TEweMm1DuNB zarQw}%b%;vgHI~WH5!QtQp-4_env?3dLK}q@K3;N(?6E!#>Xg!2XvAwmLcrNW`&~d z#58qS6*4V}N5mGUICt*06?(3`CSkqzn1_#@9h8J2=?uX!Ny1vEK#-LyN?sryAmUm< z8Zi@9|I8FLEPK;3e#eZBPr@Ll+6j{4HWLHF#p=zrKQ^#Q`c((W?Iw0H^K@%4c6LP` ztLT>(D9xt_-`cPLB2FH`$Hy@9kc(2ppO2qHa3~>3pv0rN!q{@T0xE7GZmF=%_$}Ao z&a_ZCV;*x5^nga;5DmL$;VGKnvhW%s zK3FD@qS>3GKpTE=EU@n?j3TCmOGrnZAL>{{qU4|wqt4cLN>gEd<6N!vZ;o}>U4hxAOlLURKQzjLgilhvKP?ziKsdae+bD{8xTO#E`$PWK^t} z&ugeJM-d9ygywx)-IYc)7dqq|S7AQ}&}P8D_-vEwW; z$lhb^q4Y0kxP2cv<~_)o%m!J>CLbabas27tBAG^Vp8x)h(EgMo;QReK2~r9jXQ75I9dsw%{A+KYY5!e_2J!zr606Tnzv7cXsp9v}cYdZc z=qV<^L!L`;;h4#pBY%CPeC8MOrl_xf1R$ONJ!R)tPZx0LJrt-6>A=dTee@_5=JR#H zVwo23lF_b{htnSB1C=nzSiTCaZ3qG5P$z``TcRD!506(I9E@nJoeHL=!y8y5Dm2#! zDufPS_gT1=WPGHs+WSrw&XORM)C5B01_ds^qAehkYJ49GOuR7&Mp=lFDwc} zy7(|M*b)zvkm)UxvPyZ~R>N^mIgF7X;}c!BqXJ&tWl{Y$tkUh7GgGLjsG9C&@%#8- zOYHEnZgrDxWG9nnR^##ZgP(zb2Rlqvs2>AN*1vLM!b58u^)3?x~ zEl!@V5}{-u*r6ht;)A&uA|M#G05yI$=bvkcR3l+uXEkel(YrOo;$nWi)2T5n2On1X zmkL#>7IIq;!qTrM5?o^OT4xlvJx;8>D|`ct3dN<6iY zeJ}47>P$?C`S3oLCN(3`9JYqO4`HKZ4=f~4NKoK84fXXicu}5Yblb3HjvGhF8+;PJ zO%|m7qzqe=^JAN|f(0`xM`n`W?!+MQ7nthS>K7%j4B)n$QmV*Z4lcuAPGXC~eHv#b zHPoU0dtq(*j_hVuTb%c}GEmP_7zx94+$Z5}mUs|;Jr|quknMF{&kT#o z#mU*3F&StO=uHvtt2L&n^EHk^-ls%Z+?BIj;`SN(MbdA9WE!u{C2xs}GUX?Y1|G@u zZe-KhZO?}*&#a7${>ncdgV1p$Fog%?#@(l$;zYhbdrmm|ID0QMXm2lxbT0x60+y61 zC^4`{!KD3q^{1K2$f{HQ?Fs6Npys(fw}JO|&C$^jZa1cc{0m`a`3_7{Lun#%`zEdTw_5|;-svC+egKLdC!-6F$9-G4L?{?OAf5yTz#ZonIHYgfaba&^ zuWy{QRfM0Fd01j3V68MU0fZ#{KfL}FakZ%0C>2;q9x+ul{>t%UlFX%$;FQTu6^U?n ze(QFkrOON`^6s8!D;PV(e1YJ@yVGn6=)DC_-1=XT; zu1HeS!OgteU>-`p1^(IKLEdBCe2Pgn!4l7KpVo-G2j#y}$sy?c_; zqSwk`Y>MwgnPu5xJGVi_vKgzQn2&^T=8X&~nK;jv{MBb3>B!8!WpM)DWRi9QC3$w1 zegBA7E&-mxrD?WD^hnw8nY`PUL1_k7&{|I-<(1N4D~n=j9=zcFwpC?CJ9 z)XSiEK5V+3uM^tS+?bz%qw$>V8wmFdMJ{We9?OAL|MZ!}y{0CC@yY28?}H9glhzMB zZ`AHS--^9juc*w!qWcY+IW1X$n8kgIkCe%y*7w?*gA4HSG29SHX1_k|_QNqqH;HU} z&;2T`-jgGuMlwRodr%$8pIB}A>UmeL^QneXbC{U?l@ zN5=2zyw&)Vw*J`bP9h6hJ68uZd)(*e5up5jYed=j9$}3ocVjIX67IiZXvO66TYolA9sJ$8zD*}_0iV3}VB8f=wZkMZ0f~nqs9%RPE ztRQ%?4-}<~Ss|XOD1lTZgI*xxD^4`s4_(TP&B)Z-sneV9!N?e~B)Hlbx(Hwpys$r5 zYGkJu$Sv`?I7&|8arC3LAyFnL__&%7B*fUPIn1& zMV#bgTR`-fW_lJ53sN!bp2$r8Q#{-nVW~m8+YN0fkO%BD=%B$fiXeyB*3Sj^G>!aD zRAN^B$nCh`PKgD{#VyoH2v8hiK@n3gqRkO=GL&yCi^^#TF>yVYg!#kBNnRtn3T^EY zoBr75`Ztbh)-O;Hdb757O2b25;}5-~Ej7rO?CgCS)4)3b=Hs>vS2Uef1!}IStlO3D za(x)ZV^O&KE8^ux9LRI>|M#iOK@x`{a_Hh}LxU;N%bWQHbWzW$fX=i8l2vbdTL~BY;9|5qy(=I zO@P^6lz{K+4zoCkdm|9mq6)d>X?;-__0Ysy7SiS;J&`lA!i zxS*rx%@~I^i|IE>yz(<{^V-hV7k}rM^C*&f7bhkU;jf*-eG3$>BKYc00orb6{SPviiu?u$xooH61FK$@Xzlm@yY2q*{)Fl-n6jirA~mwzez6N}^|8 zdfy+#J`F}bbe(|or-1}w_PU;06pmd(BlwO>ToNi#asLkTp9wPychus}n)UD~fg~7> z_d0$HQbLI2VKQpg2`C=%SWO3zP7hn3(u?G2OXTZ}SNCoK$A%8=EPlF4T&WiX8ZdfE5(^ z{havtxZE&iz^y!~8(+sg%q{;dVJ< zMehk3XhY}&Y3pv)UvERzUr`Z`21>M^W6%XK9u)xf4)ETtNBpi5Ey?i{>~W>eN8%is zME(sXf;;Q|R{T~yO9>2{+>Rzy*OCHE1kRn!l%Nj4I<&qM85t)C1S85ak=9P~s;$8| zal(~`KHwrxzUKcWkR}j?7dcFU33iaWh=LW+K5OBuLtwhhGA%PR6F{@WkJkEN(!J-d zbUI&eJC*m9l~omB1$5V}1u5>Nr^9Z6ez3w36LS)&Rt7!ZT*eQb=y)6hr*PxeMKvhF zO)$ejG%?Y7)WdACqEq&f>toZKF9I1@AxTxZ?LTl~{~zuZ z`jUU)JrqUk0CZgRc=>~dSsG`myzVPyp4;7tS&1UvO=_W8nV{|ZAGM0~MHB(K!Y)r@ z&^7o#{dR5yM{1$xp18`rf`#f__`-2g=P z`G_AU7uTcPs{pT+`O(|AZwVfYWxjSj#h?MejL@O+MnKoEtB6SUD26;n}~@vMp7H= zxE&vNuO1%nCtIcYfayNE!(jc`_Vb4Yn)f5o5Qvl-+2ducSLI^CJL=tL*xlSVdbqp4 zm0m1=mfQ&DMhF7*?E=AoeA`ppeuvWm0BYxRTA~k-yNcv};Sfn3HhVin!y2n{#Cs3p zVbxUCiB)-3VvCy2lf}Kwr*M$N89uXp-20sYGdw)Jo$X}@a5*2k5WpR zX+)azIb?2UwXaNxk`6DykRytQpJ^l-3$pPcNkdCPQSe3z?Cmtaki%0qY`H<~{GZGR z2f9S(Goc~JyrRN3=!rpg2b>J7e8u5oGSC2JA*8dhWj+AFq-F&RVA(H#+7dSbIK}{t z`nq`;0IdCdFM#Ffbe-mzbh-NfYNBEU8O@ako?SswtoI{;Y7A3F%8P>s+$ zx@(-e#nlI&aVo{z3}%Z@S3f)!24OlR?tv0MJ3A64O$^=~Fk7!7;?-J6PU^B`;%McReVUM@;XDb-nb?Rt+ak=#hfph+&tl~56SwaZg)a>ke zW9KCYSh4`N0jQ~*lBs8@x$RaqZf$Slatc_j^@c}2Qq0HDC{-@i+T68+kJNT-m`_TttE+sb+D;?I?v zVPZN3Y-~m(=}ng%D)k>362x`7$#Y3Rp|^VP_W?gUTu6r5~=XQ2qx5$Khzk5c-^i?l+hN z4v9D>#RsCt*I!#aG;8J!TB9v7k-ZLIFxA^X|3V1XIfd)zU76u5GXNJL;@|&i&&C z`SK_MG2;WI>djexF;-KBXS(eD4WgATk7tyRp%HG#&(CjYNXa%!18|c!1E4Jh<2wK! zR?o!5Z)4!T=MRzgPF^}*-eg)yXJQ{=;$zrA>Y{b3wKb47JoB#^D()Vjbb%Ll!!$zT z+o~282|_VA=Z?z8%2v39&jsKTJsLHwqVkl7hRT8;<9UvUxSOA(fM$zp;cEi{P$}1W zN&LhlE9c-(UHuqwGT25M84&@%?U%eyP+kAozZ;-NfW|1Z5|I7c@A4PGI=?aN0A%=< z)j(_K?>U~vuS`C)|jT676Sn4yb zppNt3#*eU$-QrFsS4ZJ9}AS-57xnT2~iC5gieK z&f{bJAd@!rW|STW#1Q04$+lZ9L?YP9l@2}Qc5UyZYPuzOBq}I;*HOjgpYpKY_Af3h zc&sQ>=1-#dm)qVBCIB3D+e3iB=gS&l2D@s5$hm=Pf4}Bg9 z)H8)9$K;>`%AWZSI~54?P}5VM-siw!!!hXoHTE({8H5AdyvF>q6vk7p!wzhWg4|ZJ9fH33rNgWf~>l z^I7Y3?P)ToRdl!+kHiUGZ)yp_vGbz<)w4#!_mj9EmbHS9Cnst{_5y8M^`@XUUwY|+2^ofl-DO-d`j+!s*w z3EEr2pQqhssIJdgf5rE}q^p7o-?~l)PA~WhgAM>O{ z!sBg+7OSjno9)+MiLA2Dffv5}60}&9(IK?wwo7g4;K-;9-qV45i~?^4sKp$h^|I(Rg&zWy}W12yi@hX8zt0 zjZmWQ&l2%Cj<2N!(Mw23$m2_l{G;}K!nZ09WEHW5iCY$ob#1^UJaRowG8H^i1f9FE z_%S8?XN04VY>g^YR&^W?p0+SoO@^S9!NzeoIVHmZ&64*;O@p?+vz`&6w5g_c4Ill& zc!b4<`?g4f1q<^M-+s;ajW8mGTX_6FQv;a?i;q%2%JU3_ZPxlM#Sl^Ek1RAh**9-K zL>U0Y%5wdxE0BN0Y>wcs&VSH&U~yxZPoA_b3Bn)r9|2%bc6N~3ON7PU9E!abCT$|H zEEe>_M0G$pV1D=L$s76qIu9Ws<)tBwe|^IWf4-xd(h@BFHL);U)|@i*RQTyO{{FcT zyKX2ix>_EoXToo~7j$Y0gAOQ+)geF|Q3%;1hwZp-4gX9lCL^tr0oH<8@f(yHoHr*4NQHm^5H0YPfJM0s3{f< zB~?2e@^s$gYx?(AR17Nzlch#`|@5?2(8J%%3B0??9hzW4-R~X&{AdWyfkqr=pQ9; zL?7)K+gq^`LeMg#*n_*pk{zJH+JFts4dgR5Q!=C!1(UsT$7C~iND%%VB~-h~z#mT9 zHoCc>AyANA5@1#J?eX!WNAHGm6xDmaj_f3{J&KO#7@BlX4;dLXS96{SpGE-D6dww5 z2%>ZPs+h==>Yc?iaBZ5B-}K|hUVrQugjiK3+iHNT*{NyaoiY#M=u=I5jUpr~i&-t0 zTmDRUL$%gBM2IoM+Qy~gpFX}PQ%8Gk*8k9sH}mx3kBEt*V8Z-x6hhD?xQfKcqo~L+ zyTCVMjzGX@5BDa;6=6?vBh%WZ-utWt@$1h-vb@EHFeCjqbVM4r=Q=< z$Mu;-=y_I;v36H;?P;cAu-a)HMV6)EbB8v`KnnI;yo{uz_-`FF;$RAu?rzGZ#e)kI z;$Rug1V5-@+}s@8zXQ*JF?9Vg9mM}VgGCDIE5Kz#q%tzW3u?H*4fQ+(H3WvGAZ;mWtIySQlpS zcL|sH@c8?pw+@a5{7f*PrOJsIP?{#}EtxQa45q_7`-BCCY9kG2NGIn66W#HdPt;jT zRa+QYVl`0b%18(X-(M?4nY?NFVNFT*JKU~ubKD08k-=3=An#TV^lpA_SNbUh2a{Yf z&BKz2hTpts`_iRvsmfw97))0J_PO&O0e7qXUO0>1<}Eu3NVpLV$APD8g-n`JjWCPG z% zKey5O9YnB4L=chUy66q6&|?tp;d!*FC~3+x20{=ua8k4UVYDZ*0yU)Y05#gW&^AHv zT@(tz6E>+vp$f1(StG2or-yv**U7KVbL_*q{6VSxzJ;($7_Dr|)RI_!eOZ^cr=6AV z8`V>4`}vpAX+dhI6444uZPp8L(1cgYN=pMh+@tjqL^@l3tA5)0cdHmN9<6|%EIukcFU}iZ?F5bu7qB!JQ9aaJzSfelevezA(b!pN{ z$Vt1C_}(oDfXEcQpc!NiP6ayFQmH#q0&=g|6_?gUF!=&%xbZwXz{qd9W_;&8@7SU4 z*vGG`(=$d?W%V|P+BonxcLhbQYRg-WK_I@RCtDP(CUVf;n&0YTdGZixC5DZTf9Z#Z zx5i^|oHb_9=23EtH(`tAf1HJ$DlLvxm~M1F?C0^4Y_A&29|8Qzh(lgHPCoqMz2V!hBr zff%|YT2ChJ{9Zg`$;nAso>P@Ec)E_Zw}>(5YZKFVBz&|!PBy_r&Y7)}rWJ5 znYSv`Qg^`7|Syiz@7NiC~0b$j3cMVZ1N zT^?Fh&s5sp;S&1I6wUVGJFD1Jc0g_VkcA+(yeS3Tm&E5{?*u#+ z;HomU=y=$_>SBg{`sPNB%!FOiX#41nnVzG^1d4fqhgc5(S&=a`!^0aTr|1=rWbOs? z5qg1=jgUojVd2|_>Y&L1Zz!DkGY#OqW-dWKn?eW0sN>dsS@f7BxL5^6MM|+uV6(#T zwA>ZXZ)}#UK)oXv;ic#p2essjd%$WCdnMiTCyHTGypx6Us3dcGMg|_6sz0h^Y2Q}>;p{(x`j z(bjmzXhp@F_7TGueRuhoLO`UQO{D%VB97ho0ks+~;iw;|pEEU4+F;_TDc)`EO%0`Q zX?I|wuS{y&wluA|)r_++6oLj6is3Mb#Jz;=*YN_jl!U||!Q!P)U%}*1NSMq(JJ!Bq z^Nd=hc}H#1OhK3aiYUKwZeJc1FwJibcew-u@267f8>8%xEi2e8tWl4deV1 zD=?GtffrpX%Hd&6FG+Heg^_9Rc&|cB2pQ#3HOsfZUuV1}ew`|+vg%LIs+h2+FVSj5 zJ4I2+4NX-xrd*ViXXey$6VMr-sI_SSOr- z$twhPR=Vxv_?+5>5E=|-PCC6-H5U-$wiHIET3EbAt}Pq+=Q53Sh#)QqDCziSV}W8z z4^I1}$Q(b;uo(Jw7cPM-t)QeN@fQkt!xnd}903~VJoU}09D{A$3bZMA2s}rjU?@u_ zKuS--L}|ayDs6=HObG3)c1mXCvaYkVk@iDom)Baw4+k%M4o>aR|A3P-#xhK@!CW45 zzf0r(+m3$*0MBCA^ynEUo|KuEmK@HFA&@Nmm%yL`JyqFstbWi_{o;VzQx=ws3to2N z2`|}g+CHRAQrdJS;-7v!^}~c@|3GG>emcf#v2>0cBNMCsn9ni|1S5D-V->Uii6{9+ zNyY!6>aC-q-2OLE8l(}CkW%VMBPlhYAkr!lk^)lF-3%>_bcZ4!UD7d%(k;?4BHbMW z!_3{|Ip2GK_pEjP(6xN$-TU49lh5;fZslk&VBOQWft%mn*87?V@jC)DeGiypEIGV{ ze;39>vp-S&Ag^%R=)mFhs4QZD^C*9dUzM@htxwX|ybZwno;oA-IT>Fi)Mx*x z_{E*t?xL2f!*>jQiuFj9i3MV}L?$9f`e)a}Dz-LUN&e-bjMGgohBy5@Q7^dG9Pz@2 z80g>WP5}NZ{)+%*sv=+rn&;n&tu?~7a#WoPuw`C@qdEPMMhr{xY2w!`$t|wzZ3Tm} z%8l~OA8usPwW4FqHYG_;68f5tpMuAyh6cZK`yYek9-dF@5O5=-T&m$8q zpV~Kfn3-}mI)$2VNHPKG43UNEr6Ryo!Zv$P0|Hmcm6{;-E1FT}_&@?T${!ba6~U>O3B&ExyBS*+nQs-^BUD7$+->HF)3(J|n z|0w#n>;;Ii@6|p?x>+1I_zAQxY^H;&N~mK*|&0 zbxd@8F~+FG-7*C~7MNRNFUC~-LB7aKdB;VNQe_`(`##1GCT5jd9ux~>)b%C|^gwpG}> z4U{yej-#HB0d7E9vG?GNzRp0{^>Egk(UIXUJcGa>EgKOVk`CYz8OC<^O3OcCv)1}$ zQTAUiCF%awCNB@%%L3|Rf{d-s;GEFE2vxoh&Pn&HirPGEKEdF*nWGxo+gh2wiSMXc_}HDRINS7#lzq+oY0vqa6CrD63Z6 zKSFxgOnCP>MDNmEnPC5azfn}{(I0?W7Bhv|T}D=5x!S66O?x+UCKLFIt+HTS3L`F} z>o%X7o_T(>T8a6jgeCZ_W$C-Rt~pPq-h}(*EfBm(H^=|}tw=b~5;Agy%E@CL%pVV#c1{U=VFL zqYUR@UnyQTc@;=W*YMj%)VQ8Dt3@NPNC_)}^zMIq zbvLSrhL7DpmQ_~km^f5172l4T z4f6b0Y+=Poe_%(*iudQ3i~Y75IPy`)gY;w3qU4k|iR=mMjvzK{LI1JJ5tFh@~YzKGtZ=qBEbK=5t)zGyBYTu^@wO(<(NKBFcrAYON;aIDCj)!*A! z&>gAQF)@`A&RtG&zee@AO#TDLh7yqhL4{VYtcitr1zb5i<=Q-$e1{wt!>B(snX^xO z9B|uo_deZ93dUH*u46`?tNV;M;}u8$`xRi?-VyK|*w{~K>G!X{;wG-pcCD~l(<|fp zEX~=TYCKj(r5stHHf@Q``o_%sOZI`Wd3*?+uor!$D)L=HqHrYm+our}^K$^B83Y0D|fl4n)Y^m8h*GS|E!_eV?k zrmq3DjHg?r*e?SHoPRPLc{**YX-w5X|A~$PQ+5F5T)0BWUGfkmY@nWUzv~k#=0asV z%z$G9RB!%XCbsgxIBpQkZ_a8YRcrTM*Bz*~(@8#FRVkK2i~482$Dd%n}2gLK-jmub*auK>e#z(aFP` z*OGxXligh;#_`1cqyP9rWX{HYwJ9RpT?MOR0O$YHm5X)vb{^zg;C)6RaJwU<(M04K zKqy0VfjujhU_;R?QC2pW8K6Zd4^#g9U}wm;dTWpdJhiWafQ}pm5T&8y-%IsT{<`p> zlwOLV=Td6ycz8H6mwT4DE__@ZS8l^8ylDl17Xqi39NzvB`UiNX#4955#a+w!=}CjvS9ydhNf5~#Uq`U~iS^GLPzT$!Sa4v-r@e85LEZ7n1LN*4RD>Er$%6Y=e*$kO zxp7sHV89kjfr)l!ra!OD~ci!rIkk zijQ$GY=!B!-hlO&50qF+FuaMP#gCr?l}8|LN6Bw&ODGdOogiTQt>k23{vUqZq>CNyHfJjn}S-g@XXSc*q_0Y|x$bv24d+ee0slFjh+6g=-9@LT$~ z@F!!r9R1(BNosH$7asy@WbmywFH&s+nLiuyr_6&)oXxwJoLb$jJ?+n&4^GQ%u|WSVzqm*W+)%e`h>_Ktr)jz zGpP6QG#3*|YYTZH-kPw->QrQ8bdA*GSv^37c>_3w-WKd#lO;a%!>JH18xaORAV-7sJm}x`=0@Bb5G*e* zc8UNY5eBq(yKU$Zc#Vx0BXj7Uz$0wQjD{>C@8cL zv5wdw)%BZiDn!xMBvDZ^XcZ48ifH;yk7q#Ob9LBj9^_%~UOkum_k`-b##6Erdb2Xhh7}QUf%NmitNFSx&$}PaD#wn< zZHR1oe5(FOLZb>31BKuEcTMdHEAs(oqWOKe^wKf(MBrUc*yVpS0X)*}4W*cm;G{DAxKW4tl9_NKiGLvefo(64xulwGc>S&VHKL;_UIC=X?99^*<9 zmFq-f-X!_IYen199==K@{I5@uS$z9JiIU`mo(_vl5bvfSfn<@FKCpLKq&K~1!>t_T zUyCyQJtd*Qc8raJQ*vFfn2w&JUfgA6k$L~C` z2)dbbt5>{C!~~d&GlomH!HTew8(?DY`dgCnNyla~IH3mzm^A3Z8M6q@)(mFsufI+4 zlqg3xK`PGu&wzYFuV)l#gN7?(BqWjgPe zc*6Q76&98PHuy)?sQaU};Rrok(3B3%WcRkuIidTQ%Wsbdt|O883?R^L3Mt4q7AxMw zW5DWE#x{p?gm<~V?@%@tNR0xIzwzR|@+%OPa^C+a6-|C3_xl@5Xgd4B$0>};q`C_? zcua&U9VCcZ{ulLv!-ukHfR`Q>l#0L@^$_I?OAt&lbUe!1ZSga}+I&uY=tG7ojp?8u;NKAoZ z{Q-*b=^xcKKs}z)Iefu)l>sh=j(XX+~@Cz|9DM&&d(SEYEx31`Y}(4)@WoTO;$qcZu5u6yve6UOz<; z*G61_zIuX+OhXWnLm2WQ;C4}dA9!IFptTcYOX)>L|A7#^fH&_cbqraB(TCkvMr==HW5B3U4c7{vweERyi;+{mb|X{;laS5fX zC6H$?kRCz^ZI}E-YGk~82(*XNWV6J_al7agbRMC8$8*}W(C5KD=Urka2VG}b6+4Be z1GK|A%7*n$r##vxZX!f}g)3+vTQaAJZbZ=cIsg_bH?BJ!MKBFE1=D2Z zy%HUGYEBUh?RjtFy)nZv(C9xwG;GkZThDT9^s8VY%&_TF)N)gJzmn&Z6+r5Ykl$P-oS9f3q;>tfCPT_^zd~Jz{_1p*#$aE+CCtwSLDAM=Zow>b zLud~!Wo+8e{?#2Qs4h^QUS?{SkvEsxq!xIkpjw<=D>Hm)hL)CG6sMNufLc~OQp|Bt zE#9Zza)`la1(cRT^}b8ZNy(z$gMC@cYJPABxj>p__(PXNd%En?;JY9+OwP^tS4+zNb(6xc(*-E9!y;_vfd+D~oSvIwZ>!kpK&6x9xA3%6By!|tH22mgGXQx)ekY!^P9n=`&z(&gKf z|7YRL>r;)RQK@F9A;-!2&!z}~B2|NKnH)4=6o@;~jK4RAIC|Jn-o*nJ^ zdvyCA0hH(U3K!(Y{IFv0?s)WTCy_qj?u6N~*(6x+z2ttiFTe4k+PXK#KV6fcDfk}pUbZ@z_0SkQMJc?r0X3onKZuyO7-%ul zy;_2MUh4AFIYN^?e6APZN{;7M9F>cxDGFpUKMh#LazFEoO0J(v+Cyj;wJmY59W_br z(a#)%JRjtti8ShBd`@*hVB>OPUw}X0>h)t*5vG&)LjE#}AIB&D8O5kk!a4CIio@t0 z@%CqapO=vFFHD|PLKNVwOYa?z+z(O5@HufR->Y%d$U#YkR9|s~Z)thL3$?#_z+(#b z5c$_{Pz744rtbQHZ;goze^lQvB{i+VkyLmRLs#R6I1;t;U%mqeb>4gHefulvxkh#2 zhSW%8Y-VOA6m^`(#~0+z_W0|j8#5#zo6+z@8!v`QO3aC#G?DXR25|7-IYTMw%N_B* z45rDszK#2)`7H$KcD79)t9X<)RKQ(gkm8Or;i6g-L9Vp_@cF~nt{f-r8w~{~nhsLu zYLSG67KJFZG4F*ZX-~?alNJNQAAQwj87`ETXU*w($~*4VeYTjSc{}Tv#mh}Q;CD;M zuRZ-%uRWtOaeHs~smg^`kM=L#r$(-{6^j9tBu1#U%hPx}$SoqmhAL?252N)W`MmKf zi-v21Q~|v&$PYtveeb5*ZP#75)8IZsMw%(0QhHXCU9C@KV(fD-_dnY*l_uCH)u-xJCak~3Zmn4pf{ zL6AY&a4;v{wyNFZ;P*G#yaED;jJ5$p<75&5>U{nBerIRr7}gRP9Q>?3_{HW+JzQ|K zaTxA}o_^?gP&jGL&J;krC_cG)@|y)nJ5?t zv4tdgnjCsXIkLf&yjS-HTm#ug zK`bS2Tr$)e&?RY7=D85HeLU}2X@bt>LkGq31RGor3cg!J7emRM*J@K#H`;9AjoVl7 zqS$3<>ct3Y-0pSa*9S3WX%(674V2CZo{q+8w3W+7jwio$(A_ z+BWWyCq!@hb))P%)*VKro>!gsw_{gm+x~i+0ns3##+Y~oiYIJc1R#NG`)}Yjmqzxe zwa9p}CJc}Vpcmg+0=5m{{e6AT&4#{bJ2Nfrwn|FxG>ThKCk+G`*slv%uB`z_!J*L? z+ydb8Ik|Mp^$xS(NYJUe-i?PMmt$f`T~+}xV_-laC-6MwD_>F;@jQdf9MciqwqaUx zQBn9jFM>1@pqPQ-gHG34kW9*l+%&}_R0xFvSHbeJtX{Gkbh&*@Hx+R8W$id%SN4&P zGKUiopHJ4TyH?>Pr8~Pp#sXklM~!BxU3UdkGhS`y>gV?Sx(z|)gt_(=jM%1?2YiU( zFYQRKsO7Fs{`h(epC?n81j+WGx2JroUYs#IiW^-SrG{E5p+yR*<=wowE1EUYT@#Cd)WZF(Wy%+|Qz95xAls)z=828U33b(}DDYn8w2)mRFuK zDmt2i>B!#FWyT_{!UTpAhara6hO)%%XWjPO&<I4eomE&(y6)3v`TbpTe*AJi%tF zS7t+?9qh`>J@L@rfC=HV@j+^@i4A~vD|7%L+8;1ua zJ28XDk8u&BpifD1o0pZv`E+YSe8ElY#fzH=$|@M@@@gNZDS-csH0F0;M8Y*ES$5QF zqCezK*kXy{aOJT_WT2iU4`Mf|)$cpUkuGvdJJ+&q23-~_>w5GB@o@+}9xkHQf@Uv4u`zuoG*eGfI9^ws5J^qne=kYP!w^Gp)qI;bVjnK=@Vu!|k?{2=vc^80N=3r;9 z=FQ567u@Z8o>{KAxezDSllc`mshGSd< zoZ*s_8-VNARP0+`bm2mpM0Uyardjr@ioz_KNY;+R+oNuc~2L1Bx2=XdtVSi6gORfXoafi5V zzpHx%UzTpU>GOiogwre<{vK(^@96g0BfNdPlj4QH$Es^pncEkl&p`S3bDuxlW9Gd=B(uE2v|U3{QPI~! zfJz@hEAhz4$Vf>^InA$AT19ugFf>H&)QzBy(qPDaG-^NZddCVdjTDTGnEYKM*f}^V z44aQI{_pa1yQ=L-r5&_-OEC0%+Y0S5rpE6M<33@4ozvB93@g4W=Nv4s8L;PtcQo z_9%;?40_aUd&{DI2pKB2p;gFzix&-5Rb6bnpumyk^@qd9`ZGndJU$be4~CZXb)YAq z7pM=%3>K#>0gUPQU+4+Wq2YT>(uQm3ePjxS0AH^tLFR;*ohFy(|F-Ja<{L=x;~^JJ z1tnJn)B|dr%D+}86Pdp{n=k+8s7=brX}Hj;1<-wseRu0mx2GV;gYO_wKzkxD4gu8> zpX4^)6Q|H;Mn(&Bjqx2T#MIv>O{cLW6C_2my69y<6m;u&scDrk zScVOkhc)d{(t}rIv?u9E3icz!BzopWuHi}V$S`@!83c9ebsg*S z4WRo@I+h*M9ol9fY#RS893AhzL&nR=Oh`?kH1lV2pmTg_BCR1W&jOt5XY6i>Y?C;) zEx>y~#xh-{vUR;anCD=8RStdS;WGATTfq3I(V4uncHKk4yNYR)Ubg-gub+z{NaO9j zk7x!1Qy>1Q zZ4Ocs3k(nDtGtWL0|X;Z4;FC{^f&7RJr=Of>zFJpF|4D+kbiOcwqgb(LzkdJXyHxE ziY`Mti}ko)0)MeZdU+w_mH6C>6gSl7^kbRjaNFCltu*9->oV~q@{LXEeuU|uugC4H zZXYl5Hmw&_5;XHtm!Zolc}I|IvjHKkG0gx;IIKUtH%n9?-n4Yl&vcuRqYLI!5}MuO zqoQdW6C2I!UD|v84YP?FvXg@uuKV*Z|6Fm`<3qgMy6Dh~*Mhzt`CX3u#?bZ7u=5T| zy=B9Luie^7euUap6-Fy_cbwNcwdV%<%w73y4@Uwd(S~U6;T;5O@1gfT2dEEpfbr{L zx^TJ+OS^X4y-ovKzLw3|=5srXBU~*Rx!k8zoS24O<_D{LJ$(Uq@1j6CjG69l(uX6d z^EAkUi1I!lTqSX;|FrfiXguGUIR>FDS9NVub29?iP>9oStcT39eiu74v=CNWyl=~g zcmY-A<-7vtGG|Ou9y^$CGf}1s_gaoEDJi)NzX##q=rXGTHAp_$;zD1YdwE1WI33gW)k2HXe>d;EPe;yLMUXtPBxzB zXeenI12Pr(Qo!8-?jZ!EiJ}ZcjUA^I#koG*f||?Ynh>J~yBUm2OibKs+2(iA0w49r zryYc7;>ruT4_((-PzUb@1Ym6i1_OFVv_=;21{#9RN35ATfq4i%56TwPuJ)MFVRCij2w)pk=IS2(=9GjL1d_+lymC{D?l_(cZUa?uhnzKO3-^G2VUEPXKe)x_Q3wPDc zJfA3M(@&NxjN*$AuHHdZ)YS{=Z*`js&EZt(i)5-T3|1UYXD+l7pcmMAP6p%Y)>v}5HP2T z!{B{k|DHVu>XoAQ_V%4kc-Jn1aA*`)NcO`TYM;raznSTiX|s36xZ@?m0^NPTkGobQ zL1Av|cK?^6WA95Oq!WG0TZ5^ZcgluRiCPV3r|{^;F^Kl>dH|z^4!Br)2L+VS>osxM zeF1@~xAnRv{-WO7%{IgL16K0u>W-TMI~eSq$NpkYRu(4Za5=)*G*C{<^;{alMX4-N&`mULatQ*1y^Sqibi8q zC#P{HH+oXiep=EF!kRyS7M$J_{ve8gO#W^i37vfEP})l2?;)a6Ws-m$#V||*iKY#vofSLy6Wc0D3 zqGG|5*n0`tYAPz3fHnlG69J%#M0@)-K_xp7Om6l%{ByY6L&&cR{!>$9cb+KKuCp3h zlh^}G`N93c}k3*AbbpurQ#Tx{?Y~G`(lf@~5_CnB#TIa)hnOy{Qp0 zqq(W{$P)dtV|P)#gxJvM?R8#{9R$4ltFy5J z%PND=HrEF-%%JYEs}K#-3{`kV{26Z^JL zo3ggptzI|sdcU>aw)R@pcAv2lc}x+ya%-ZU!m$0#4Gh8V6$_XrdQrSCp^CY?bM8|t ze7!b@`k?D^tKRvrJS>S*?bAa$K`;T%kPOk-)eMmLhF@q zPKuiQmcE*c0p!we9@vmq6Z5UR{2Bn-(ymWCoyS4|cymNTc5i7Pdu3(!2xI@i^Q88$ zkEQ2jc6fw`@$^p$%`lkB{mjgr-QBn%oIh3MXY2-3u;V-;z# z2ZhfOk|4-~0QBD7aC|eNAGY7#GJx(O&8QF_#t!+hNdTad<#lv^A^XnbY4PD%8)0*x z$$)`}(voewKKLGfBj#y{U&*WgAiYAMOmR1NSPb(%cwp=Q5;=GgQe4N(BHqMY9Gn<{ zn50x|3;5JnuZjK#LzeAYv3Mg34Kde#Td!aEh{ZkdAU1>&zyQL%`1I6q1%FiINQPHW zA2ZyGu+T1_&s*9!l>~zL1RM0*hk}zD#p7VI5tc$|)dBc^igcHq#h;qk1;FwwC348G zD}w+^Kai{balh3LBgV%iw|4`qu)Z=^x_ai>~!dO!es?@dzNGRMeDfjvt`qOEOnUCGAXvoPcqP0PS2-s&?i@0JX=A*7SHt;eJR@x)8 z7A+Iwq_YV`VOFbFI00Z)_;k2rf}!(6dc(I>zudo%d755I)an~q55ocHaw>r9{Mg{8 zCnZ#?JSJ^f*F0m_fF~L~X?|#8w}&u`AM%v1n;9R^H4Wx+3aXf!BWkNJo@1GpebZnr zC5|>b-4cy=L|~0*y^cueRP7f4R2Sp26hIV{DOQg7uF&!CuK$HQ)Wrfw&yVHf-&`38Gv%dMp>Ll-Vn$o3GR0|*SB|Q%(8r6h?|u*$Ud1i>X%yRHg4p)&TrUs zP!vW&J81O9$M%%~B!;rzv(i|^GYI`B%yoV7)XSOAf8gP275KY-eK@{2U$!q_^PfLd zjSUpy3+}t~U-73vx_ue;;EsQEUg64Nmn&_+vH|=atZMd^;>abVk5AuVYeVw52y0>1 zUYphU8HL8nJlPGg?(P*HlU7)oG2{pD3m0V!AHZ@WcfF~xA82hg6 zh5lUMgE`LWvQ%%?(|XYB?s%aWJmIr~rs&k1!V_t&mdy{kU&@$`QXmnV@`WsWLavIM z?dZL|Mq>lv=-e0=7D&C*Qi#C$0T+(Ypsvd{P$V!u+}xCAJ6;_L%^m-UEkkF0>rq4v zcigzS`DpsmrZs?sP&!v$O8VeEkB^Sl+7vP;zW2`JRd^BtY((+IQ#uD~#)irUCiL50 zT|{0$&8gc`t>fCbUn*i~$Y9_&^?D0I6Xspyre(a836T|pd)W=7F3|F-6rDLDc6}Q< z^X%uGTxFZ5MQk>;U?vHUi}kB$@-dS1T0R(GjZwSlT!A8DCHMqcn1$4pzB-!W8I;Of z)X#0*nSz--PgmvdsYEwOSAj3es4eE(#(;Z^f+jOoxc6snjGKr zckAjhkw-V}idpV#NM}%deK#%lACc?A^!t1WV+S>fTlSOqV%!iQavhr69l>=|==;JX zd*l(i7>AWu*|=(1O%#LOf#Tka*RF|CS+h@XVlPM!p1O^vXfM`?pbxoSs@#I}E zyGIKI+_nfnn^>r!Vxx=4)aau3n)#CMBfjubj_6(rz>k)?qKD_$c+k0py29Fd$z!L@ zg&e+vYGXsuu$JHf*!p&u+G&pk4Qd)0&{y0+p?9FYD|Fj`yMgz^ryZ?KdcN-mL6OvA zWwFY~_8f2j78QT$%CxlYpVcA8cei162eSiKAeUZB6g3za9`deS?6{m%)C}kqEH>%b zpHz%?FluklQc~8Q(-qJ^d3j&U0D0kgdpPHz>s}|vImF1U<6veGpT%sV=+Bnxu@KI_ zu^H<1xC`7DUN3r}Eu350D82wY*&&nFHawkBAiJcJ>1n8v_5G$Rtjv$f7SAytCx7t& zZtzR3w11A}MHtI|meyy_i${?20H=5IE7I#8mGA{WkK^}TF|5a57k;hS_mF0%e^Blk z(YgCakA~-b{UHEZ4-9?;_Od=piqC71Q}t8|T3;v)ooI11_A!yrLvfgAKe!v;9T;4K zPwKk$gQFm|OoOpbXuMdXJ>QP5SYz0#Uo-j2;EOgF#ccYFR`CVgCAH>t>3)UKH&-FXn{i2O-|2VRAr{R1O zYCEy^eLgrP-eKMgjkCPTcMkWOn*2(ZWeHtIX^Y2MrJr;91>ni#?#;<$_+D+62N@hK#I<>O~(#!S`eciDT>!6Dey29>synkstnyW+<3f8tUsOfVKHZXU8nr-` z@oAj%Qoj<5L7l|7{^k6&t;s3HaL0vfZr(N&v?(zb5J0lKii@SZxPWIhoglz9-iG`G zJmH4T%|l+9REax6GsLfnrZpIg0X7fQnA9wMA;g`bxisp+t=&xocq`m#s&5_lF@q9U zI?vXM)US?prQ7~=77480OdmAO5XnvveGp&r8RoSu_vm%{moL$?4c=^ZbVVJq)tS>% zFGULrui{7ghK`J$uRAUg^N07T4IJd5Rdgolic0r(2zd?9)A&@WHPf^~z1!2lkT+Qx zQTAsH67aT*?(&Rz#zW@p*lgtVj>$}m!_1JPqG#3I*`;uF(m*59qj+tIokP zE0M`~Yr!xbx~Q^8lAP+(f$ndpABb|`*KhEcOr z`B);2roEBwKgqk7>)vdcn!+T;)7QuXp419Mp*%kxa>rL_LvIwWz}|F|+2)X$GPyEp)i<@K|JqwJSB*@P!v( zz904}J7A!yqUE#cztI^qq!=VGm^$5aTNeS!`}W~?0f9y-#lXd;?g zA6C{Ol{I7XVpdHPkK?$(ces^o`IHBiFp}(d&;i4>&usTwKBgFf><@Xr%1}dW9(PoB z7OIY1Ik0fwuk1HG8&6r!IU3=6_)`CJVs`3Pbl?su$>Ah8KHX)gl zoDO7gRTd^^Uo0BoQkkVxtZc$lom8ig`GL7jPaTXK2R_OyI#^Y#S;Q48(dHj#`XAM{ zY`c==y6Uc2c%rcvWO(hr&_K>s2=V{+RFdsYV18p29oYS+v>I<@i-+c)$Ua&OBPmoL zCpk*5JqnQF%oI87+}F+BpZm4bdWxm#y*W%PCewjJar|vrU9Yb>K68#-7pQQsEwRc( zqux6PA2*wLI?iZzh|TFjcAK4yyeS}H0M%X0ApqB?t?x%&B5S0`K(c&=rpTYA{(KCe z^&S0aP1nTBf!=Eql0a)V$(%UimP4{1cwh&P^d1!y$aj!B`;0Y4(x0d=OiqpgUdj*I zIYOAPOJnf{R~fOdUr9)ubk$qy_Rm56FST`r5CsA@G+Yd^q~ntwV}r9UaPGIWXXp{1q7oampHO%_v^O8u6Q24`oN>tXkE*h+5W z7OK$u-J}3o8`|(kYx@gIneEzXF>_CKS|y;y8iW4WmmVt}%JiSB%|oFwXcj8@A$dZs zTjeu#BUkPdr_r<~8SiwG5);f+Rro=i>G-55D*=HdyZ1Z|q^ltqP7t#WxB-iceRGE{ z8i5fmlM_CCOd@i;qhM#K)@|hm{P9Jo9MxWjQxs!DX#IJevbo(NdNacr-`2sH3a^EF z;Sv2K!-wB*RdFbJ+MjBA{nIP(+U|;i`N#ySv-$1XZDK!6jhfR!$RySO7G1bn1_kp) zseygw`@F8?6n~#38WZNrEn+kw@6}N!MbrN4nP&1+-7U{bU*xDe#Q#%o?@QYK*}TRJ zU!EujSqFQs^$&b*91n~oNPU$UZb&L1rYBc_D3 z9Xkw>6YvLfl~W$GiL`JxrXg(Yxk-moZl4t^l<8oHL4oVX*e7h}H6B-wZ;nqK6Q|c2 zIcB3NdmFa%IMnu#-v0bAWK9(NqzE@YXd+BJ6RK*eN2dhNphn)y!>!Fx@sPb!4y&** zk{B}IGsDpbRRZ2V$7k0IJ4e%OS*O88vOgsL6S(*@G~D0|WO>uVwaxKQSV1!Uq4?*W zm-+~p*-MRVb&y0+J~!gh9A%530vcQICFVj>g>y2s3av)5{7uWsX5ZHMe^Glg#LeA; z2sR1xzCoJwFon@1hb3LhuFZS3RJkEhDHVd6{ZP7g^pkdS@p|Beq*&lWPPs>{uyk)q$J~X*D_Yq!wCTbwzdzd6L?6H_3?%L+$3e z=f=q$41A~5RZ}6gb=;nt!ctQ?a49iknDbnBm(9Dz%66-zM4D|+ofW2a(H^|_uILN*~F{$|dn0{(Rh zdvJUG)8#@LvZ{ZOGutB&!4FHCWoh$YoR)G1#G#qhCsWWFuRV|8|jPUh;R#xA;)8MtZ+NM9##kewMEvhHbC*G#{HF z3Zu1EA{}1Z`#nQfY>sElIFdf|)33v_JU~?FjA@+dcYvidnw|L!{w57?=3uEcjBi!I z4vm~z_GtX2N}kauqLFRmf?T_=?JG4j%CnBC_U$lB+q__mADUkpD@u={-TlhtB^{&V zI|g|c+%s=!9>Ym(ujcvPT+Ss1_n!g?@AkRR*5z)49v*;BFu1 zQa2?yv|y_9i?>#|T!&d9JV&bqSG*)0IKG#+fSQz}W$NQ(^kfr(Mq1{tD-o8BJ0PUF z{T3emjWuChHfr>Dy z(h=r#OAapFs#UG9*NJh#;dn5F{uWLK=gq&t`s=9;2S(>9^MinK`y$6V6OlG)*{aC2 zk10m_sQTF*fOhRZ5Q{ErP6fQIJHFn{1*M4u5mbQR^%zqf)K?Etvysp#6o2}J4XAN# zUL>5Q-o{9vDExge2p#hhJL_U}|JbD7uTY_8q1D7C#reC{pa~*xG(ks#Md`tGb*7RC zA|#^gr$AM!_p?OY(h4MuP1abT2xIk^-oDKg1nLq0y(}{7{hFf$fIf9-6v(0Ftc z&>geYMOX3+!TXT5aPzcim=Ed4j9FRMFe>57{Xm@E{nZEE$v6I9(i2mN9h_fTCX_V< zx+q`s|2`f_N$O4#rQvw6iga;w^_b%+VP1YI7|>;vj(h~ea9PVG&;0M1ebX-obSXOh z4uUUFltTRIe=$mt4n$wdBafojO1b}k>W4}|Nbcs1Oo?DHR}_Swh9V$6$*&X!ys6OW zjYGY&-2!a0cX#h#)EzqrM2al|w!(VKiM#$At7*5{s0i6!7x&Fb z-OPd|%<#bVN*U-96MIce2qsbeRnWX&f!Wo9Co_s%WJiTsHaBAa`fx5BFSMSWJ;{LcL zqXU#XwWuU<$&M^WT}m0HeRc@d9~-&4i-IDwAknAn#E&Ytc;75koTD7TuTH#APEJ?& ztIZ~kDNlEK)?1Slk)#zyW8Je4~(R*W)*~_j+WwXmME!Cg}Hft`HmF3%3 z7!BX5$;cX7V|M62w>;80o@tcqy*fi}C&v4}K2FRanS#CRIU{9D-q(luAuf$pab(7D z(dWqdyr+oNR!ig72Crvux%k31k%OtVkjJMo*UwG*spfsXw*aYu@tJ+@u>eG&7G3HU4$jfv4r3;9RY*)j+)LcVA zmFCfhB}Zt5*IQ~bN~xPiTxw8nFhb?ALL$3o+QJ+wy60u_wn4=R$~dh3GA6<%W{LzV1{Iy1+8Usjo5w4Uv{ua7SEq&|7Ro86|ih7(Os!O2^er|iFNJ0?7DW| zFkF{5EY`nK^&Zp8bIjHp$=*+F>}U*FYccD7dGc#G_E?}PCou6;cofVyB7M5;xK4N_6I2(M zk}@H46@wkE7`(=i2VI-I)1Px>B5a&4ds>7qZe5?yq1*h?jo-gG|2q)(JFztp z+ci;J+yl-T4Krdwxu?o6dW;9*5z0V4=Ogw&ZH!8n(-8}9&inMQD=XkSj80C8X={VQ zQLlMkLD#QGQYL#=X=SSSGScAw=c`teGS8A(bWK3n3GVZ0<)g)WP%VRd!&84+ng@)P zx?}LnIZPu+JMHHk4IOR+*Q!%#dK(tFR{Q}wY5oGW>aAN>cUb1U_NHoWRt$BIPlYc$X}gd;xZR5dTT#kwj)`a54j*kLPT0RmAZ)-IlkD3WT%Ar_jL}0bEem(oPJb*6#Bm|a+aj6F?R}B0Go+p^hl>|fr{A^qL~UuKs?`3xf=|r0 zxMKEjFD{lR?Y72)3{Dz;qh{xxD=8gyv%xOgsSY3G#u~G2e~5rs4^6pGf?>OvjcLby z8JJUFRIC)L&fKD7e~Yk@9Q6(he2}XBGDqt{0p6D8jrppQ4kkGD6WRdxqK&ng|A(ow z4y*Ec0{sC2C8fJLbV_#!QW7F1Ee+D$AqsqHICLW^A|PD?N*|FHkUVt5q4UIj{oUt2 z&;6U&cV}m3W@mRkvwM~2*5wax^m-w&>RQg3G5)6AyFVr~8j14PGV`?H(7$f$y?ID8 zzbGo~8vETWHsNM!lgs zH+=R2NbpY>xS^5P7br`{;JXD22Z4xLcrlR3-|aecektL4Ra+()b{$X=mPqp+{}v#7 z0AOnXq@O0CiF+Y&$)o*FlZQ~q>7PJ>OS{AkH_9bwKL9)^X^FV?sJA~oEPML|oX7+; zvyLGj_0pt%u*V5V-oIm;QIWS!EcUAB%(i+ck zqQ}?sW7+r1%&`>o#@TT3qG@Q!(pg{8{i8vkkf^}C=`ItZoPDVomfi#t;ODezF8jU} zt=*F!930|&71Z|Ul@Y@K>?en}T|I%;!fM1i-bRtaS=75eY?f zhRw_jQYCtJjI4jK-+CHgxsJ^{nO>#CFe+q~#Z-Q0(|V(+iB|Hfz&$Gdf~uR7YQ-mn(RQKb@c3;Hi(=Y8)H~4BL-+g7Pe3S2)`DAU zCt9KmG*f)S=62wjNu=Cu3pw6W(pdYaMLjO><*BQGpDfEUT zFPMr0s%tN+yXrc8u6D9Rt@g)v=LD_3hq?qw5Z*=MVsAAG@XFLHtbF%Dei@UoGVQ&t zC_)d^!EWz%i{WpI)Y$BsAoaX*EJ;HNnGEO14vRl69I#C6=x73czdbG_{g)oT8poVI z-VrE1`7NyJh|4l?{%QF~pi2P2A`kRd4WdrV-s+uRwNuwr|96xGI@>>C%T%oqNh$#_ zJ56v$!pZ{8pcu@o2a7JRAuFXaA>_J4z)Mmr>QAsm!SbHuPt?;&A}G|nVDCx z#YIh#%k9ZHWrB3EkhvFbKYbFTM>-Q`{M|;-D+Pd3NKdUqko2WdN8*Y4T;3tk*R6^S_#`Q}Y z^PKqGW=!VYP0NxG?;ZUg3oJBvdDV3sRd*R#$+DDN@9IZrKddKr7h}6SnaJ--T`oIx z{ChxLOg1#ajV+ER_H$RtqqNc^*v9lWh&oVX;E;Iul9# zd-BWfU;Zd(}=>c|$q?cBZOHy#_?ujtLqmdLW^oBP>I*?r2{Yne5gf!?Pw zQ=W>dtFP%SR|?wO-i;rFUP!pFydtNTFCF7S{1l-}Nc@em7)0HXwzgUQ^-hFZ-979Y zQ#xP^Km`x18^7_pP1P5hLh7%QZkZ*TcdD7lg`O`A7hC?R>iG}tBg7x(up3m||7$mF z>;`GpTD+1s@diMM*ExK#4EC;pH+@;W&p$SVUPOHN59fMNe7;|dZcAi=CBf>sf6G4P zB2H82E^4X9@yf(^{{tg0%H#SvYX6l8ycEifQ{SDnG*kZQmZx@FPSA1?JxO< z#^iK%>S^Bk1VT|nlUgQ zzMw9mBuMEsbk!oLbKCQ}#Sy;j#2n9|R!hN2;C*v35Fh#}bX2f4R%P?9 zp5aE9aNN{)BDzT}@j?Ria4`|^_0(_64Ic5TPpF9s=7lo1M%%5wFiG4-rU(YAq#Fi~ zVb=sU4QVmMD#d;3XM_;N%BbmzXeymb0pMLJ-;k02p84TQd*E^Bg85yRV}N0IN6_fA zO+-tIuY$1s526Sohy9%{z2?0kcht8>5mo{x2k%;t_hmP=0#;_O;uLbg7E7^87}G|D z--nEK;~~W6?z_-Jp5?BPe~h_U7l4Ve_?3}9n@+U+03 zrzCz?e&K2FSXh*_;{5idH9K~|(2#|m5kQ|!JwDGpuRSbg*iujVa&LOx#eIx;f8ge} zRj(c%{fdzt;l?@gO~1E!-z|Q2BnAO@^pUbUxPl{L;myxU zg)eNe?|KjroIS(EQ$CnbH1pDxvvW^Pe(?Td@!P!Um2oZVRK#{lT^+ue(Q{x{8)UlaUfO`d5+sK|#U4>L}AEy1UE_jZt}HatwvtKqCPJ1O(< zL}MJ^$$ZVjG_1VnMIK(z5~!JC!kG7-T}9p+oQ9>GD(O{&u?w^Tqu>ahMH_ zzgYE(S4)FoY8RN<+SivrUs?ta#G0?Bo}ij1j# zF-mdXP^FL>hbVOHyS63;y^S)DeTpqDtsbexHZhvMyS7bNp0*|baXL`ns>ZUbgH--GQVEkJL(zmzEKffh~Ex=uxOUM*m`rA#MFD*UDMi7S70KzT7G<_=KtKc zz=iI63B%p@PIh6Fn~u2@#D9q%`6hbNjSGfxWR;R`@#&mUPq*hHhqBK!jut*!XK*R% z3Xqpr|N2DeyA%J=eWH2<1$oNddj4$+&=Z_D<(m|LzN{D zR7kh3(cS5={O5vXD&iEk1^?^O*nnVPjs-2M0RuapdCk z?rtP+Cgsmfm$(~fzC??~~9bF70@eAnWtL2gO~cc#%;b_RrCUUhXw?$4|S zrnyGHEvy{|ae4qcJKcx6cms7WrE>M*yJ%S$f0Ha?P))(9dg`>J9_EqOg1pYRLi#KX zwz-F(fQr$u{NLwi^$OzIiE&19h&K#uF88wm;XY@a*;4-KQ`ms6fY}u^w%&A@4|SP> z-gn5gJ)Ao{>DQAm;*(qQ`RToi=z@2ea4cQqGaY>|amsZHIk7_RbfFt-TwE2p4Fe)d zU(X>Qn2@MG3*xfjhzkT`uIm{xfL(&802FP+DbGUdf_v73Fl-aZx?8=!iajZ)w32Jy ztCT^z9X@9lzZ$3^xoA}Iswf@?)o1R1e+qI7n`me zf&KgU@yqY?;RjQACO7yB?WcsK!#l+aKBlt1^D9gRrsl}g{*3@1*bA$O<|~Qb@KMg1 zz}pl2Y)HTTfB!ZN1T@d_TA!|h%xgVf;l@NsV-#QDUFp;G$RMCr5;}YNqj914t8$ci z)pfc{sx#?2sAj5W)IId)qsV3g*&9cXvRhLOVZ(*p-p_n_U$crp=`kt8(Vo}E_q2}f zkt+g+DpG!!drsi2?E2c8nRhLAPXv_pf<|BWS9i;#05!)qf(%ak9`Zf#l`s$42P7Qr zt)@28xFyqz_$f!#{8n>y(f1uZ**0YL7Woq1dfCbt5diCHL+^&5&$|L1l(Xz3(4$PD zU-$a#Eq0=Pe59xEFQsyZ3AL;UcoD zkU{DtW4Pz1xJ2Uk+|f}P@uL%>QM+tuzJpa{7sCbx=5$(FlvSF=1TAR z@3|GP+hceHe7Ngjud^O~TkH{pw)83v-JIQQe2T8Os9Fs?&N+$_oFjLRu-&cR9DaJ! zBGHEHlV$M5UKn{4eCG1E`6{V4Ha2Q1vbGm_N~aKduh4o0bqHNAM!Re1oEKdlqt^9% zUF+B5bXjOg~C~m-)HzjS# zGT>mUejIVW7GNnI9+)07lv6wZQueo{ft^TRsU!}l5#B6DG{g?)6 zw&%-FX3*XHNpP6LJgKu>dw75F+2-3OU5OhMytiS$R{@#kwsF9Sf@{}Dpx@)XEInTP zn=}u1NuZ`XLC?=iAa~X~Q@*-VDBQj54LYa`9$ZVStw&wQ!jStH8^>V>(r4H8R^9lg z4~YTD3x(AewC~Mh5likCeCc9h5*F#}&7&lGRfuYf+9ohkDRKq3Jg$Mmh-{?gqCCRfi9cht24>XmmjX~b3cvCLPhzirurF1cYp-M%g71_`lGV zyCUxp2RIfi6dBk6v8|~ikBI#_g&U&*Gh;TpNfjWK+Mfxc7==94r zZ`~{5s8LDpCuSr%iRO;bw*Q#sjUHtl4!MWcX3AgvO&UzeFfM-48Nw9O+}9S~f8Q&L zivr#C2^fb_cB3V_&oFt}s1zptuT&1}pWunsatp;T^1lKSqt~c?9$VL@jbMnbH$v@|8?78QA zJ>{LSAe=P2>l)2CnTqFCKMM1T!5UHA2zX^^P(8vArU3~|^tkMvy3|8Jxz%f%H-|gs z-zvxz7m2N|*-Nci@+=Q+Dlv7Zeo6|8ep1>U5PBb3Q`+b~ZXRDcLaaXbMq)jwcWK@1 z`qV0q%CQ3>oz6siBR>e^!$fh1RY>J)ic&NqO!m$>ULJ+PTA`eRl_&5g~Y z8wkkw00d0)i-e5y<~@OKXGv2dQy{1lkzUJgX(jM&PA8bIG<&%5_nNQQu`hO@G^3~bY2b@O85jKtSXL1(x%%o##WTp&rl2((iNh+VtGRM3UR^VE-DD@!B`O>17MZ;YYHl`&{v zt4P=~cHqze%RdBL(8L6VempMJet+QxRvZ$pHPx=eC})pJA1!ZqV#@27b8iCvp)$#t z9Ka~6hzSBEl5nbe1%oj-`i%8<5(70x-n}!`%Sh?2uf)QeOl9rNTObc(lcDdwBqR0O zZRqwY&bI@#D}Jt@X!XO#O>N-H6X)-B>LQ5rRn{Y~%^F}0t1Y1TO{rAILQ|JpS~DXi zx^+_qcnjfaOtFg`^8>T6X+%5pDy%bG=3gPO~IMe$HI0}C+VnAbRTEO5H|YO zyD}3mk%S?ywMN$O(ZhIf%uXYmRr-yXu!Lod{f5PWOJl?zr&juX?3UlBWcmYH?~hm@ z5R|M+#mfem2&;j@Fz-io;8!|`u=lv5Fh$Fg-Elf^?H>hfhUm?6;ev!XCa0`nEg!H( z>~=D1xZ_zdnE8`h-aFVQiY_YB`JUU4sz=7XYHfRZb)&{g0>Ju_IKheo$pnX21wl& zDnS2^AJ-)56L+CydXC;pVXcoF%N;$}7jY_4b|8=jX_eCd27*|#MqN;1*-d@?kzO#X zNpPoHmWGw%3aIbFBwj@&sadY$htI?7l8x!ZbR!^PlVvzl@YQxZUA~XQBjop>f(0#1 zMcOjwJjly!#H%t(POFwYtehu9@UlGGkcmQep!p_b!1>ib$)(xlJV8SSuXD0Lx>oHr z1E*dFKx7rovu{kY*hAf_9)&r5!e+iGkUa^7GvlVNYmH{5yMXrHz7mSE*|JaJm{zUX zRaAg~V0l&P`hUWI3{uaRB#cjI!4*=nE}Sb)RY4PC4?1T8$%tqm8IduaF`7OJY&)EHWK0S9mIYC{z0w?Y`%CA(~M|) zuwu+bKx^PQ{h<3tW)sX}>Xp{Pu*)aV)O7=U`!ByVfuR`tg_<=<-AZ1lcB^__X#a0E zI{roSFEBxo1OJhgND@LoWLs7p%Z%y2@|tWc1nxbwxB)TEHqZKuh>e7flfh$Rg4IE( z)DbSDr*!pz8cekN1~pb;D8{J!uc!Vtv6sf?%rHy^kqt;6#bt@eIW_>#Six!q_XD`E z3UD-HaPju9?tCM-OC^BWy= z|DYc8+wo2Ff98)yur}RFxOJ4gjnYM$P3yG{jM50m1`4I8g76YbFciH9s&xxM8j-lP z@LrNkRWu<5|GbMIUNpGKNSo>p2Fq+l5PQM1SgeuIo@kmGX z%h8rB(~zKB+Ik*iEh$xDke+&+h*P_MF@hh>I856;nax)_ha1| z*QM&92@|H@n7(by(RXT~TZ*(#3u#w;Iyzy7* zqY0D~3}{IkSKd%1dy~H1Xip!O(J3bV<_Boh2g#MV^diYCU|v+yE)_EoY`Si$=%nfx zOi`^z+CdB*I3_GRehW|C<2qF}a7NyJdjB5fSe*3N6|8I|#0O~Lh^(kKrfuTC;fIj;jY8V;^MLJC~DD7xmv*E4wOP!-{S zldz`!oKW*7DH&@7?|qT@Zi8H?sFtu|R{UcG@J?^*r%n7(-)FHQ_Lu6Q5iW9Veedc^ zUQt@#^L!5u431F^OVi=%ut%ALQeVu|!^_aMe+Bed)7m(Cr(Zp#R@tMCh zuJP-rXy+dX1P6_@q|9dR`9yaz4PS8@3l6()T;Z-97>&`bbvhsHGgEWlbUc@~ki68? z;o?qTzgoYtk##@#6IYid@^3cWUZrGJGG5cbY~m~XO$!A{z|WSpzi4d_+Jk>&{3Mgi zVchFW3nTp$iJZLtZ2QqJ@+;ZVK27M^UAr!i3r2Z=vo}QtPO3A+LNenuw_=lM#f%H7 zh$FB7!wfQuv!NXHL)ux32bF1oS>@Wk>VU_mE`}X2eIA=O`u9ql>^(!U=Qva(2_uf z>|aF|>G*dckK159-+<=07dyj@AxAk_MdUo*_!J#4z>1V!5=>`BQXJq(OX9{P+liB@ zV>69NzS8Ra>O#Gjn2I`5%orA!bhCR$*1K1;KHy+75=pcZJ4+E z?CMP90NrwLE-&BkQMO12^=(d-sok8c$e^nF)`2I5XSba6^DtPi^GxMg*=BLlX8YL$ zhqTX5qU46B|6nTp)fca0`E4i zHi&1lLLM0F7D%pN1*b5|0k7Gl9mnarEh7MUrWIm?YHVx_Acn*eF_88W8X6ih{V6ds zGaH=faGv4FALFouwYuf2mH{jd%1wZn5)Sa7($Yve%mq|yjk@0cjB+dvyLPd9SUi}m zaU9cZt)fneVlI#gI02X+3=9l{J-4O(>i})VpYl%$cb?8i#QVA?u(E&LUmTMbBSQn7 zDJpG45Y5M@(J_``L3M>vSZ`YJ#?(hLyXHL$3D$4}XQp!qyY=gV7U_@%YL0vE5 zD(*ALj>GqW8ToZ`e#&~K>7^Hf3+ibR%G6b_oBIU(9PHR-s=t8f?2xutY!M#)g(+(4 z2?mHgZLsi%VE|Xj5U_j(Ai(~$7M_s3&|)UOeHB441#o2m%*G%c;<8Gi@R_ZuzW&Tj z&y8HdAnU3nJz};#oFYyI1xF)$Hy`j8kFNoS&@Q~^;Y2t5ob2rLZLV>x>D51kAb@1s zD5g;8ca*=NIdg#B&$SJdS>5*88@~m*AqN4ikT={^0E}t&AbK7ELX9*KRMq5;e*TuE z)k<10d~@41k%pD}{s?|T6MSW_l&bkyv|0)9F|e-DM6m*jF(Z5>E)ASOiPD5Uj9upf25I64tkY|1PRn4Y_ z7$4;*K!CiP8Uq0o4_QkwN?nP5cqHy&`f8%&CjYh;F6oA~oT3qIfm#ZOghTb0c73s4YU^~9?mo+iiqICY{ zq5&BHi_W9Rt8s}$X#}Zy->Y=5P;j^n<5Os=pQxWmi^!?WlSYgedZPWWAiDb-FI4c0w*y5cvg_DyeB{t^0r&gi3YgND*pevmcxb(Is(`*V;F%H= zeeo(%=U{J75+FMQZIXu%M>c;uG#S;fuZLx3W-={T_Vz}gQAoV#jlT`Hf<17=-Ngn= z%`9!gAYeO4;#6G4>7=eV5`ejrqzsc0;0!B3TXFy#NyjzHSZrz{b=H!LoitrR;&WdH0kO{@H4?wu&YG?U=dm>eix}(6TY6Z7kf7nLYQv#-iX)buzz@}Ww z@7`u0o)2g&SjT3=fJ4U#+<$e>Zy`;ZHpzQqV__NOMT0AJ1k+f{stEk#z?W$x=+A+B)Kl;I}8$a%Y7>?p?)@muvE0EFv~WO67abjDzO z%U6|@nJ&mIrAzmCm+iGP8@36vtmxkdSnqYKXga~d6Ql(5D40s=Wp!)8TUVxN+XzOFUqIWtN9)Wf|9<~qZKg!h^J48y$8zSiLMXVK9ANIkDBfM=AxY>@?8o?zji5S+Uq@H7GwO??@Cvjh}fsvN|vgeJ>o8|)~f8M@*m z{sf;A_?DMbE88CKjC;Vr5X4;e-%R$u&!hpAK5Eps^J9r`YmeTvcUU9w?Rx8DAwNKx zJc5GtH8p@aT8<9mr?*va&wxN6z(y!4Dq3H+7WTzxF_rV#`JI-Q*4ipAd`WU^!cxBsoUM_i0abamEUisud5bO5-Yhld9V_vKrqZBxVtz%bLoSWW>p(5~c3rm-c7 zhe)^qJylA48%@dv+PG#mIWaMDIF3{y{}$V0vDq0x2JF~tfPO_PIC!`*-xQ{$+8l3` zX~4^m4F*EW&g0eq37lZThj0Q#Y0vI}Z@b3m7npW}m$1mMDhURpJc_&~s`iuY-!k_I zZOwHSP6{2LmXbUM+2w2vw1hZ%lYXEhE9ey(IJLHXUd6Xt!`~s*0any30Tq@T)i4EZ zrS5oT;bG0E?v&QJtScOFNPeM9zdMR(a@1SnL zivWbLFF-5@WbGDir`lG7U51kx>TYfvYOAYFTHa+!axqE+p67P01s~@FfEm^WfUF*E zZEXo&GnLvKu;<^&>t*PZtA@>kNCNWSl51Kpw6gvVCwUkdX*G@tgEARMif*|$JEJ4e zMNeWiVvZ^b4O0Lm3j-q1H#!{Q>ZRoRtQ_M+6u?jvFjq(Y{>!=tnALkE3gE;hq5*aYVk=!Yxh;?q{U@G+ zS5s4yh(TI3{Lj8`_*sHg!86;T#}Ug;qW*qLniB%n4625>sA80|AM;KGei4 zW7ll_70Z!dXuqnO8?D>m(E|C4G!jsxFZ+|eDQ&ua!b6(k6oQ{u@f75NS$rpPi|SdC zp_xH?$KQP|F&I*+jJ*=AslDBPuLD?@7GBc^8|)5o)zH=~OWpYlP4*7)6oaNQD8Kes%as`B8m$ zsr0uLyLODCkdwn=!$peD@zrm+P8#k=2HyEREe^5v5!Qz<*&;78>+z+3RDW_=(b4D!L+x{TSY_B&~d9 z@{Z4CuJoQ@foCE5gT8tVzM3UblP@=}r)`EB5n+Kds>F;Lq!>(E#qHHdTEz!hAG$q! zhtp3p+2z+b!fjMPS?+TsW%dcA4YY!AUu@przCi*6XNBO)J-{t1@R>AzT*j=-sSFmc znMwmKjKdaeU}&A+3C5B_W02Wh^ouK#=hQ76yR9-nXr)TPnf=G;BVN`N-PKtKA-JEg z#O9g9(wsJ(bUSIF z)FkSdPqWj(Y6|sS#TG#JsQuY_Ptj?dtsAE<1Q^|609Ui1asV1{*Z!>M1%6Da4r%!( z_5A$eY+cN9V!X)+FW@zNx9|H3$$Y`>OTP>Izt<|7^lJXnDaXk{6<7FAr?I|FOlO2V zF#H(|aRS-pHVDvrYxu2Ca!bAlXS6Z`3^Vm0Dj-C+NRf>Qq^`X22dwjIL-d94a*pT9 z@6@O(c5riAebk1pCO?pi!3UBINlrWmk{_b6Qe&nb!6k{{iJfX1IO=hVA!aZ*if-1i zT5oGN-{>nCgE^$ZJNgf$(k>O%WQ_+ahC2a8oRAsJd9kMuh+>*qbhJ0H*md;5{YhtE zEyc*w=a!P9^9l|cHA$IUfE1Q!-)BGQi%I5Z$!szVaJT-VkEy~aAIA{XL)*37o)@>2 zRNKlYE-q$ZoGDR$`6^Z=+C&~~3pr&W8>N}8)SIgqn2hI+#n)$8k)o_Rn*W;^Fjm~| zPIMAZz_M61Y{`)K?GxZUf~J}R8OC6}Yy+N)1Pu_kmjpv=ch@u7M2Ti= zyt{GH8^l4cdF(11O}UDKN00lsIVq@-fz5c5Rt|Ui?X!cuJA8Ymb9s%=Dp5-v-ChsZ zZ}?PWK%mMvNs|9JE=?5OK;ut{jpOf^rK0367hgte)FU&1MENxSpy$0wf;uSftVqUr z1!?42qQ7=FfXQLPN`Eb0bb{IzTpmt_u%wd5|N43Em`WOB?bMQm<(w+gJoQzV&s0lz zS;#%`KcEZD=CvDeP}L&yVkNC&^Lh<vtg~ zXL_rV(OWayxhWRm$jdZ1PAcSFN)#J*Q&(4v{^N51rooKUqol~qT3-%LCDt79&M?<# z6y4g%>B#>^v2OQTOiWs*_{7{u|i;&n|}mb$>sVlaJ**IjNaG{&`mO z@c6FzU$&beT1wZd_ajzn(VAkm-~8dK59emMb0IO7KKReP#O1+gckf+A{Wbv&=03C= zsS~6_gbSMfp;?a~n`isS!KXBw2r5KF9uiP2=l|z$ut^w{gR`;4rlYi>0%WOTeoSx6 zOEYd&v~1O=WLtee(arqJBdWzny)17Hkum2ImUdlgS`Bgy738Bl~p%fL?1B_zytU3Zm3wpu~Ag#A{AgtSXJ7do+G^?8cv7r4r0w0Mpg43>u}0 zj>k&n(Y>%fteX#Ga3obypuud%A;}+Wy(&y*LjDLNHzU$y81s?}Sk}Od9QcOEUM2=% zrnwuuI~oHnZqrr5_SR10$dJ1efTa~09KcokH*&094mf$1m%Sa)VQwW^RtlulIe`6= zH=QwGJ?fAOBBk7OV_H3jTnu#SQJDgh#q|#$>_I%g5sV-?*ym7Ywm!(Csk9%}0Hx;G zQ4vLJsy2aNe$eCI)zrL$yoOjqMgrVjQr17RozvsA+jBa%&=u-7jBsW+` zc*B5AM{=WCIp!_o@BFGTX|}oYv1~(L57sNX6-#WiEv#9?)d_ci$UPWXY(7g_S zw_P^9SVvW-$4czUAhmpTQJj48!xWb}**69nb=v;ML?dtb&zxDj$}f3>TwofG zxY8Pt#t0a6EFaLV9LxK@*HVCld17 z1s3D2Qtio0G~Y=9IqTLQMqwld;5ywypN$4H6?(34?e!vD9v1}3IO_We z<<{};Iw2?DZfb)mVQMj6K{v0-h8I&9f!+J|b=*vXB=kRhLa0zsLBO&&Y5MZHBSo!{ zGofnPR_lPeG9Yi$nOX4>?G7+##O_&Jnajk`u2tZjYltydV#Opgz8b5eOlNV>PKRwo zuz(E%OBqNwS5{DPw{;1)7!We5d+WXbhJWlhfD=LE@)F#@*Z=}zwg!9_PtqS9ZZdQy zc67&)ML-%sdMwc`#Zqg*Vy7520fYqc z{~w>+KcA_SrvJIPB^4`GJbU>RvEMWBAn1pq<|_ETxv~ z>mmiJ<)()}bG3l8S&rP&pa}6#Aj5|WRWIKxi;?@BlbWIUz6g=qKK#6Vk11*g+AOF@ zG*!k_H#GRP@`vfb7fU@HhGOH4IEPL2G+LV(!$CArU*~2NE*C406_6`FT|}XQkHH?y zms!&rO(mOEe;TAMP~A6aAkcAgnJ zn~5KjB7)s_OS_hGeme#8=yg0XJHlcG&(7^-xMd(Rq9~%atSTkZ^5}Q!@k;5z$5lmP zb%^zpO@H4DFz5$$O#009QoN@tNpp1ft|i2}vHJSxKq@rQ$ukv*t8hsXwkAx0cTT2)XWox*b13#tmfl^e)}I?Y^wxj$xqz$LM|ehM-w1 z`xnESl9msY8com6hAOcD%kx=Xr6KI)rcAzt02K`;sNG@X4~q`-1`vvI*gfGeZ2m4> zG9y*qhA^>9qr=0)Q;!t=A&b16*?JfJ)+EdPQ9H=78S7!GtWFQ2q>1oGHaQlCoe)E_ zcRf3F3#1OcLo)HCh8v~%rQ7U2upBzgEL_yP{=NSd%J_~T2$ zi_sngR#Fuih^mZBGZi9%*vO!q-PpuU?t)X1}Z( z!v~qSDKdNBCe3$@(Mi>068yBIL;kJ`=C(@BHV^Anw0GyK7v$w|@-46&W@w~1^71pWMm4MEQ zvEwu6*>_UIUku;K6j##=1eiHa(7}&FQDb9O;{{2aq+35`Z~M|-g`Xt`{)dkZxbjDX zjrLaejdhF``5*zMP;vGVF8MVU6X8Gfhr~H=LS(iF>C*M1&VtDpZ~kNE%@s?i^or*P znOn#*Dj??a5px0Lax1_RnAxe;+Pa5%7{rg>?ri<}oiC+UYm{E#45W&%$xGI~B@4MH zXGw2fo*1TQOnGnbf8NP0vjAI(L@@uIp7W~fUZQ*AH2bdN`KKR{g2auB$I>D95+|WI zgA%Zyn^UhdI!z+;CZ&2SD|7SpfKi)g!dRpw05U%C{4f!CF90%+EdBhE`Sep{V(;9| zMI%nxtJ_)W^(|aLYa4Xbz{H-;qJy(yc27WS=gIJ8lE3Xreyy2yIhb?03d@{<{m(P( zps%LRbEPtUgo8Bj@FuGxF-6UZ#-MkBzhMi{h1Gw2?nBh{ue|^3ClC_QzRa0FaZQ-~ zv5cez$klyT5cPOY8$V>Tf>iDzq7T12cFXtg;SDE)zK=V6qUyN4O5Ld2XDppZ`+Z>R(lF0ZGY3}x*l^Jfn))HFxW&o7|FpdS^@qGBdiftF!- z9(X#RCJS&vEUpxf@@T0Ya!q!AMf(9BE^Uk8Bc?A8pd7|OoC$i8cT~6(ffNIARd|QY z-*;V8P4=;0Tg$4(|I+K^RZ@6&C~*$*=Lo+*PmWB@I9i5>jPe4B3Idpuh-49!YRizR ziB`0RGHnJsJB1Y*r)CC-qL`kwKFQlay60Z{_wO3;6wfi!%V-K~VcboYuu*4Z8t05T z2xEaf8 z_LMnQs;u`GE!F-B1<=#DhTa$qMoVAY5q+_ZCfV)ia1vN?$Wc!f>prs~f{g zz5DX@#yx-SvBk#CfAn3?#uZ-~y*47d5?L3biQ>yVLLmkP^Nqg(X?p?o4vJ5=Y5(D; z)p#7|+h_1?ZbyHcRZZFWox?qFg5FJZT#isrEhn)Wy`+X0$6S-_T{;N z)jF3TZM>9576dPBJu0sQ8yg$!$U$DB4}_`h!X3{z|H4Qv)V(+|iSo9`M=yJW>wUb7 zGe7pF`4q}==9$&{tFfjLTSfCycqjK4h!jSB@`O!}KzHWafJQWDwE@Xut^dI|yj>xe zfsdlu2iX~8J;y?*pL0yl%^HRt*VDAb0MCI4;!6W*Q)oh!d5Dg z8BgIcjPHBi%~(|q`e8*tK+x>A3XV9o#|vrJdUmM%^m?#BkEJ_4r~28jxm>`GYsG5~ zZ-?g?(iFfEn72#{yUYN)(==K#+}WPLt?#xgy+3&}BQzoG{ae6JGz?|2)bLXi#Q6{n zH)vwFa%qXBOu%G>eAh~#`jqEo{nV<0D)1G-}=+LX3 z$9<&J7Pt#v4!EtY?Xp~I?k=m+Mfj)M>a)=&b?^tZ#C?+$H57Btv5dh^_|=P`Fij4C zfa(ZeK%MfQF7FB8=c-q~?(|h%KP90_nX#!PW=I<8lu;9vwy^%B`oTvZR6g#|B<2Pi z?>@&oOtUc*%?#|Yxh(2>uqpFWitpW_^>+MSlV3LLfN0eP=G2D8cirb&79F;H=v zrnZ0^w}ozWi?)ooD~xURZlf)dKHtX3N>T6iYlidJITDRTWwVB;D+$q-7Vx7Vvy-9> zR9Gx~*>6d*D9|V54CN*ZcfbKs{{vC9-HL^>bm6COuWEk4n)aW-sqIMkecRJsp?$R^*(-5R5g` zR~eEN=PcYkiiX@2M9~}oQ!pCbMrIp7^)vEoRmiI<2@1+;10F!zUT^qH>mDsadv0YN zyM6_0w0ku~J>UI8(XB@(n7(mXC?zF!;j-&6O!-gYjA~{#)UB+TpiEw){A~ut#_6Z> zK&na~DD?9t@ujY(Z;UOTLG2gROo+I_^sAO;LhF!w)gs*=l>M{Kh#?p9*&l=UgRzv? zt(TnC;6F}olHFHZ;F*L=M8&S8a69inX#%LBh*a((oQ+19$x+l0z(Ie3kOC80d_|r~ z4EW!ywGeND7tb`Ktv*4-#L`%DgcD(chsO-lbXw8TpOqe|Cyj1PcQ`)1*zj2vx_7LM zx)Lcqsd^MHuhp0#L~c>Tn-3F$D_2YtWbR-)>FMdEsg~`-;pj=JF}~3{lO_ig;tp&D z0#wi7tC8Tq=Fe4eK8N2#xY5C*T-`Oc_b}?GAD;uJSWQ<jkjzIVRibN7+#e8721FVo^T@pE1R{`dMMWW$1IwPA~LW|$674KLntAc}9b>lbCv z;fVn1((&JedsV#*=I~Qo7S_SLSNx8J!s3fF%3V`QzQ3Ny3&NH}T!nM-@iH`z+Ax?Y z+}j?udIG94i7^O7C`82ko~q=|m;))c> zat6$$gqIeJWZQvqo)qnt{Zw@QoM0E{6nBZNoK?uO%U2%cRCh2iyrgvg~}GGMB2r5RC}TpGu!rjrGXhq7Fdq{l}cutcLxDr zFdW;AcX`{GD~{1v*Uu(g%e*%|lCSSJ#e!BHzE|W2D;U z)j8KUk|b@Bv3S%!cYV@x{6OUPw`aFyOh&g*ig#6Si*mn;jXpoqMOaczBPP-C)c7gI z@(u340zu}_M|DjVqOYwPJlvMU=at7ZzOlfqFPqln{CB8QJo zKI+*iy8Tg-bTg2&_my-jA3vZD8rRnoJIt<8pnN})B&V#zyJgX$q%jSEdS52!A{|_I zLp`M96AhVsnsfE8%G2K|)5kC8OH@_KUG1-hPL**b$pIN)Whh`e6&Bd%?di(i3Sj+A z;;S2tIpeA4WEA2!KLmXblXHui@t?tySQ#}$vq6~P;U!0N!+SEEnE7s@XK3h?+zEH} zFNLTql22CKi%!OpxbV)aC!tM4#t>~elt5htEQ)$`S?xd_vs z^2)gN%6Tu4+6d5Y5E0Tvw$D*vr8PiK1CNY2G-M-^!82fC9~4=lGF;I?QPEHxdbswb z4-Jt<`Lq`&MU|zm;pGx#8Z3?0o-{So`NKCOCHAoj2d1s7wZr+fBGs)sWs~#Z2V>a7 zr^3D?WOC}M_kJ1EM@M8eSQuKsR{@S%oN{*RdwbUOL-j!V+_W^r6iu6@{O)22U+9bt zNMlT1w}}q?V(p~zSUfCPm~=ZsI$eE6B`(u>a=Mo8k+X6kP+4LMBG;m%q?8wM`(EDI zt5s@>reeGuOv|tKLPIyp;&ZX(_3jw5TUk@Ux{cr8Bz?N4#^Qe4&kbPkKHr!q$9#5_ zI`~lA6N>I6i+&;-g5J$?8s^cYo;_8hCKLFkFe)^`>6&U_bDDxMJdiTlfr>%@CV;}1 zeEY%!6=s7-Ipvr6;uvzvFho}Uo$AjD@NQjxnrSc6jr-}I?^!zWP0$m$7@+qQNokjG zh_mc$yYO(nH@is#3|Lp=Q?EMG%UYcE9N85t5PEF_0s>0sYAec{2l#*I@aNt!s$-RF zdT}!?z-Te!letbc;^O0DQknl9$jw_4$|lx($ZmVQG5AfH;IhX3g%m-sN=&*5Jxd>B zUq2TS<{BBaNuiLcYx@~1Z84j-QRX#k!pfJqJ)*sx)Vo)e;aFI+B_HUyv3{0QUDkZV z?*>BQ7?A~J`08*xKIPG*V=0KyI!l@=KZcnGKkZyS7__Z4ct~J^<;l^wOL~O>S;(u3CCtadd|2C8?^?d{LJBp50H5G(||W z@V_c#A+_fsY~M>SYS%hn?u~MQQ~%|K%V(S?;Arj$vjJ%KYz_|*CXM)s6Mz&QhhPkT zX;H9BmX^_1)DJU|CN=C78G1y2EB;>fjs5dQBZmEYX+7i0pnUj`Smx}8v>nB^OK`%W zrXc$Raw`wIE5}?il75!=I7D_7*!YJ(fIk5l#&oV7C(e<&$y_$>_!<3lohCI06y0RG z^h+azek*PC92NubG>LY# ze^fO9v@+0ezmtFQ6vc#6sPb(phBO9iul6qwW8WLZg(XE8xf)V@`22lEWsr!PhK3{z zMER2=#Epn^~!w-del?VFn9#6?c<$d-J3i7rpfCabv ze7PT-DetTBd3-OQkmYMsF?R%{oNHy0Bqw1q7y0rsU9Il8S?b2vwPCmAR$)n_~B>K&=uYthQH0Zz4&q#v(!hQGl9l$*~_arM#3!Re_13WPE2uD;>7lLf-! zg#05SPL)+qr9vs#nTfvlyTgW`K$-)O-#^Qlf_EniNXJT3PbVbM#Iw+XRb-vFGtMJ@ zc`I#o8knP=e8PS~ma{6Z=GB^YBdF(9yRf3Hq*5l#ft!}kW`sRA0L-0C@j}c8WbG4D zoTOo#CMH$B!hyRSIfduh4}Mv|SaXmrG$d5`92{ZO9|pNzFt*~c7=y5C7b+9je{j9k$C)E6+}AHA?( z7i!^^618}gQ-q?IG5KK_8hcD`Q2c11jI*@#Q+N~wP_8nWrvB6wFkyKbMT%7Kl&;a7 zk62DkURsScx5%9IVw?!rb3@I#SEcC)Dxb3Gpk+~4ueXUyRn*>*q|b>$a#9;>C6C8W z^Orn+{HRaDKoBK-P8PF@_|EHN2(}6YiGItVVl4k%L^qXpvQ%z!L0%R#a4|UPu^fAY z+piVBz{0Z;jWHf>oXDboyY=#M*j{mPUo$lZuC$q#;}Zv95i-KJbj9O<9lQ%R)6!<# zkr>H}S@k+JxqSLQRe{HLMmc45gMgpM-sV?RC;EzCxq~hM`1JiR;tbbtKfUA-OplykeI@H?>pdGL%SQa?mjRgfw3XdDtqGkcB zsYQSa%MMyK+Qk^%C=qMi?F?@&T{^}f7=|e0QY+!6OQF5ku|w)%uL@i9X9zC=hLiqZ zvyIsgZHgIjYmlF~PfmV}Mq|@^9o;)xJ1y|xP|1FYL6{9rCx?1VnNFhGo$5#iT%|H* zU0xGAN9A~XkynvDk0e00*zeL@Kw>%t8PF>$PLX^fmrj>IFGwt45qnlH-OI#X>lRu; zXITl%^(1+Uh5xLjlOups{LT2F)?a}WdJ?N3Y^`prE(B+jpFq951@`GrU%wsCA|47b z6ctzW0)=3UAGb-t43m-YSJBEcSJ1}}BuAas;t zRB+_XnDP3M`1TWqqgSg(K@LsXXbi@7T~eBI%|eso-OUk*Xo7O4Yb{{O^~G zwD0JoU{+c0`NVBCeYdMMex?ut9k-m%R~awKJXR5vyk5mnB+@i$A2e90)mEk0e+l7o zS2K$v42PNa(pk14%!W-8YR2)8c#?+m<~`-=B>Z#Qbof~mB8tMdg*immH|&@-yug`R z(5@(`bhjfZh4cwG%PKkFa`7k{o^#8nI|LEzxWaqCYr_ckw*o?zoJJ5AfYw7q=HfEN z1?8!%)sza|UKDcMFPEr8kj8tCcO+q4{z9A7S}~Sjp*huR)3(s@gW;FTr_b&!~QUTXTDD2lI+vJ}2@S6^t6me5u!pgEzyq@sjbSHS3H>IcT(jnALP zP)NscRLK=$Y-2z;$rZ3m01bm9qOfk`5do<2r>_~aQI%3 zij?R9JZ`N!|neH`_gX~*nSA;s`u=}n6L9?-+V0FBeuqb27d zEAxuNa%4)Cf1ZYX-lSn5rV(c=1ppy?hX5d3DD(R-%L#DqVma|L6yyAi*mEmwMj%DC zC*lh>3j}?f`CEdB$B__8baWm0xxGwjh1cx9M14KZuN2z9C6r3rdzUb6qJ5#^>=!+% zIJ{k?wRffQ6fp>u{(}U|eSM5iNNETGa2N8c+{!DCbmqE0pTEe#A zQB;l?gGH(c?;;#ldBOgit-mA-za6efQ9Vb)RaJ{s1|@#!P7`RjIE=IR&{+(sA=>G> zs2@J>ZCw03q0vf5XBS^+JnA2~>Wl-SLin2ivblb(mtZev6dVgZz|BLG;7I%Wuoct* z&^um}d=s^jR&KWb8uJ0qTqY@=rTFUCG&l}GOG_c*c6|AvUx~tO`<{=;5N}1(f4A#2 zmGccMqONu5_!{{4M>(?%ncNs+(5K?#kAgu^^HQ85<2tKcl zWit9P5ZAxS!kv^;%`E64ifAg>A5$IDXpCc6>Hg|mwlo_cIi$I@e-$Eo*{iCIj~^%a zfIMVM0|t!+T*U;azXzyem7n8qH50k4uK*YVh5YZv&6&}w8y@VYlap%`NjN!3H~Px( z1sP-&QPS&5>W(;p6E{hDFIj8uWlao|5ra1HUcpzR{@IdGcq8P@VcPvgu0S7%b2ZUL zS-pOgfq1_yr7EiWF4LjzdjSp3a{J7QWehOQoK0wsaeic#i1KH?f&#Gfb)GRpOPNe% zcjsrOLD1E*R|_s)+$s zrOMRp>I$=|Ih6YPt}u*`Zyf|`EYB}J=)5=x9wdsn#ax}W(RLEPnfVe?4b`KPO^jC` z>?{993m=3l|5u1oAg^yWE{j^sZ_$A5W}cf|!B-YPU!CBR&!t^Tn&Yl(6Kk?TtW?c5 zCYK&`0Q>?R6y;+H+n`Uz{wN*KmZrUb!f_bK)~&B35O&=GS-Bj{%5Y>~A+8*HD#E!2%u2 z<;1Aao?d|d?(1scp+h<&5QWrVBDLjmOi{PX$dSkTaU?OeTr;nYnE^+pokbTy@KKmB zx+}NYI3fl_>VDMn->aUxmb1GSYI`%j^%Yn_ON;;n`8`gd@ zAK{^CWB5>4Z)@8@g(&rDoGho0fk9lD8;3^RL60sTF!qO-VPPl)lv4o|tH~?(q%qWC zCYI{CXW)U#SlZs_Ib>5t7DH(y=eMN_37K`8nXS-datZzN%g)U~N>8AMYz_|`wi>#* zS`&gq^7wJFNINrgF%mFqFvR`;1%(xT7bN`+EkS&e4s;X6a67nqs{c5b1et>1+ZR{P zva+FqANc*AuHWqJT4?yJ*=sg^1FYQySK_JQFzssPEA?UcgcD1r14VLX13yrLk@4fK z{2C4l3c6`u`6w9wPWKJ4R~_})l0*Bmu`_2iC)-9$UJA|;sAPnLqZkrtRI)l)#pxP+ zKLG%Z>CV3+R8?8Wm#|r-ip2MshPUnbx_WeywLRdGOLzB8~@fE{RMefbeWWrWf+Rm$~NvZQK30Y=VT!9qJew(sJ3vtTE$-^@7|>^~6} z5kWfF2(R}}IY|pACY;J|YR#gKxOV1$-Qkas!T{F{Nir$ZYH~sDaWs|k_*>gk#JviX zvFpRUsHJ_gZ6Ihw0X^c!2 za66b4Z@Q0PmHTnkp@=2g0F)y$hqsy*6NE3mmoXNq=v0|b`DeAiiJ^Y_w;WUn8&A;; z7v>y+OOE!tK0#8bnC@tDM*$X>6aMl3WUR6>BPcv88G>XLc6>e4J+8kerO4UcyOEbl>;xj$ajC6NoBttD z^&r0yVY`Yg2o5~sKIt01M7P7%7Kv0I4bh74+Xzh<tCgm<3;+r^Oltpv8?!31newHjsf#8IXN>DNWY=QIecz`9j4DN__TE}6 zsr!f;TqdQauY5nTWVN>ogj+fBaZc9WnEZ$?$4ZA7{p^zh*B1$)q+lBHsKsr|&$c3D zM?0h^*J%ntnct-VpKbyIe#j-y;r!_Rq5f?5`AKX~7n!{iXiVSmd@$QpEp3Hjg1mbN ze4g6=3&!URc)-8ii9~$d4hAOV%*?~OVR_gxBrDALl+HVY$WsgSe9@3jSw$Uu0;l|_ zvB`jYjU2ahMKs>02HY_7EO30j*5VO`)-SpwxoqX1=pip{ZL7$hb#S1pojMJMKdh`Q zijoumP6-L2*+AwN?dvqI_;Exc_~U3{I}fu+=w~OHl@kaemQ(3*HZ&*jTAUq$x%A65 zUo|5>i&~*7mF%m(zDtfky>#s?UddPT$?dK#LO%&s(Kmtc9}OUuv7-wsfD_upg0hFe z8p-vlU-(bg-L0?!1Y}yWZvGhp9zK0iGxDl~y-Fn)9XH`vGEzxU5lZp$JC?xo{5COo z=i;W5%*NSAm=6@S$e)s|u>Wggu1dMdo6+J&jB@YuMqNA4yNbh^g7ltp<*c`9JS|Qi z)XebUW3a#N!*MCQp5kms94j}@FKda##F&`!>#^||@Vdreh`};&p4tJ>A^~f+hMWBl zfo&PFUbo6p7UK8!J+(F!NAsC8z{9NL%nzVg#3(*!`bXoa(6DZY*DomYXJ+#rO~7#` z%j=)dmt$2E(|Wy(t#gaKfAH`ELHpQCF=yJ(Sr&oCZ_B-$KA#(36((+qCM>E9NJKC+ zKVYh7Q&WPXR$@Xkth6)eDAsAkWAfvEh~@IXZvJRzPb(h9w=MN~?{Hl}z{c(}W3Z?X z-uCc0$_`*`!Ao_Z7yFq!_DZQ%IKGx}gkHKbMPZx%$xB#;-94*$GJ`rN6TA(7<4F8( zu(Zk_V2p^sk|e(Jc8EqQp4o`E=i_+`0dzeUw(@~^^n?^^u0>Z)Pfzc@c1bxQ0qAFF zQPdMjgKmr_Wl^gC5|)9HXOH-SJj=L#jSKC&03;#HlheufTzn{O z-o#ivh0I51M+?k0i#fa=ns;Ks9QAFfUxGzGrPAV$9)8KU`R12ZJ2I3#7hwR#wqHVrwqFmq5F{=-Z9JBXA2* z6dybn9<_qV8=ROy4JlrY>n(f`5nsm)0G*lBwtW zN6Qt}L$6SaZ`IZcM8c+KKpH%6ow@kq+SaJFe)0auy$hywKGKu~41pjd3n@uXsuMZ& z`dFAxoN@BKuULh{$!83Es5zv2ZBu*bGb(C#--!785*Td4iI+IPwsE}4P0@G`f3od< z6`P6=loYH{93*lpWj}woHd=nfijKPpJJG7<;*f%||MhNBG`RJF5HU3Db2P`o7Cvwu zo;}8?d;k_OKn-~lEtQi|z`w8dHs=8gKYJ9{`()*Beql|C-~$~s)XPwj&+7mzGn2Mi zPzssk>3+c(fr%%!dZ}(Du_v|<+P|y^Tg^yo-~hlR^darkSgdMY`=pmyE)P(t!3D z9M~$0*Z1Dy7o(XgM)m6X9ItxWKfyWXr`wgw-CN>%-m`^S^MijeWc!oPkJ^ttHxwZ(RoMt|crnbu0ttw>| zZ&X@RK%V2NSp0r_wCKD37B~tatu+$ue8R96}k?NyhDj0ZHF0`$-Zfv0%gq zXM^?>SZqx*>3{MzWSe$WCisDMhSl4P(_u;au>Rqnw*%Tzn9+XNnpi8+c@;?YkUHr$hDzb5d@ zwxeT#a>|k|qkpigU$ahl#i8zgW^~;1lK+E^$p<@)RAKsuPthh(c>d4u`Qn*((XeSv zEmd8kfxu9V&n#(wFZ*ZLcuM_3CLbr+*~`@8wv;5%pT=zGB~v*U}?Dua+>aOEo! z3@4$5vsru#dxOaS0}>K7EvCoX5v7i>c5b1;-k`rNU{Rh3*Yg9zP;Ib?>iR3wP${#? zZ6P;TXo(TR?X^M98y()3_dt}OhC8tTjjvMTfY4p>7!2m=4sXoEd39(hb-xu0^epe@mATHN zVF-Ehwk9)M83+^tu4B_n0_!eXK|xvpV)^6I9Uw9awD#U!snbI}A=HZ?ZhO^(c@{EK z9N(y3qu$q!*;eZu>AS(R-hzwCOB@Dq+hMc5J8bil!c8Mau=^^Lc~$u>d35o0AXaqhtnS4%E1vfapq25dlL{xe zV3?%V=x7!D2kPs9{FKj+bN61AiY#NJ9Y|(TUR_?E%@k8OR2&Nce*1}L9PQ7xMPL;b z2k?7*CL*LlC6_(-JuSa2{3LWp4PLBev)E*Qrh$)#7mY#o;{WNLeLw`1o|m-?(HTws zpI2O*RxtSn@QX6)Z-<`$I!?hc#OZt)EUKU{-&u}sas3NbJ)aSPI>?az5d_X&h*SO< zMCMD+=fo;)Y`r+`A#|v7tKnBJo>+=rC~!Yh1!TE+>KlIEqz#Q`im8`RTUO5$DD@$U zeUAuBo&A}=HbQaKeLf#?p!<%JP{^XGjkcMSDspahhH$0h1TU{X*Y%uZPZ}oMhQ6)Z zif$?8Tq9%;h-@mD+OtL=Q7#>-3Heq61x_M{b^o)&LrWF2BiQFKnYcf#25P>yM*yF; z5C@3@=d1^MWBRnPinQUw{kP@qZuzq*W-9TT(D?Y{)6M=OYxI6bnXMrJX}%69y7a8= z04(9dgJ{KJ@T z6OKyT%dpA|oc`1Ez=DHdcp|7`sy(*YX}&fg=BT@v<~HebWB{znN|t-|H}Bd7Ma+t~ zKlxrIzg~IM5Gfx3d42LRoJK{TLZ?zrO-U1Cp%c2GKR4&QDfiJ-^TYm^ ztlA(fq+a$Y&}Et%=3wCt2KF6MzVM@f6u4Tl~!{ zt_18*>Z>7y;y-a3GkH)5Qp}6tL0P~FZ*jjmIg#BO>>nIV`06%n#Bx`{{nhk88_!s1GKagZ9*AkABu{lw;ZEW@c^BwJ>Qde?g}gblKe3djs7HJ zcMy9#dtrAU{;UV*phKKIK&bX&>7-CWL3eLdo#ikeSfzM_dQc{?nts-bi8EW~2CMw7{@K9v}Dh93?k z!Rj%T4ej7>cln?)7(Op566Z?W+g|-_dWg9G=-W`Q)F;LAF{9)Hj;~9C7VZaOV5$zh ze;bJc=whHQdeGPqQSmt|tMb@-d9VV}FQ=X0)D`nU9%DE*wPGSpt@_WI&_ZfGutHrX zoZmgf9dCH0fE5x&xVoKDJ^aS7?U24vNhot8~n zw0!Lmhl!pTOLU#JOB{#D1de_+&`Q!#F@_}dvL_0& zBv`u`w*Fcmar`;+&F*3SsU6)Z0Yw`Xz+?O+d~0dZz9Mr4f3Eu}b6X-lskU4@bawyO zzb))OcIAw;@#fnle1xgL>Ox6a9qiTzn(4cxB}@+=C9}H|3h_|Q938u+Tar9`(jGSv z%0w7kPx90)Pgp+r{e`G$#&yZ>fj>%C7b-9F^yY1X2?*Z(*rGW(WsXnvpZy_k{sWp# z0dQTBpCBZR^No$II?RBJ)hw;dQBk$>1Bg*xby!yek{>Fl8;+e#fV8lBDYL#>i;La8 zP0R`*K$L$p85*Z_zV~zY<^yZMNuyzSGG*O%QE)DSq^eP6n2P68)}sfCdFf$|sQsC~<?Ff9Jv0!i({PIyg+TXEyJ_t#ufCc>1tS)=9%x`vT2ute7ZLg!cv0uwrq zV6!Q}rh$)xAWi=py+ac2m(_1q4uTE4IepN_LPRjeg7{%Twlk5eqkN)t3I0KAGPI!z zXn^>hmpj|{-~c?Z#E(q)=e#%yjPTztI+{mD4&9Qb^(ny1?{QGX1!*F+=H5CSBJpbqrMALsYZ`8_>JyqidCQ{4E?^wLVaRqqT(qDab;)|?HtIU$r4 z0|J=*X69f9^qk7mY6<>=gvfsT{W(??1{wQ0CYJ5&keyeG=_l*%;t9u4YCHIg zkdV(YD!J+w1N~faUjc7kt$mP#iv`hU!au#eCrz2;Vq2~WhusUm&qyaEG$p}04#3J3 zdoGu_H=celpn=^r^75`SEX-V@>rThM-8yLR9|9<8sNt5`Z9KD%wMnrfbLWTu@zSMh z3>s*BE82K`wFb&UO3BAu$jHFZd~Mq=&jWk~o0#CRWPo2{wPO62Sc=OQ6uGCdd|Hu1tm_jDr3(4O{Ty)`mY68j+JkHu^;X<6R5)#hBS*(|9-fWd zDN9?S$l_mJ6A1~8brq&Ij0G(dK|G!3%N+~3-F^jWrdMbY#tG{K4F`GE9!=jc+TQ-N zDSQXw#U0)nflY-a11SadOEURyMyLwxh>1SP_3@H#vf~hUJo)__DvM5Z6q7W{00jPW z!()Ed1Fp@!oQ^x=^P(i;fxFq!f|p^(+P3qCa<4F+21GM3;W#Exm(%eVr zrd?=}4B5Wrgu5P9{!3RgwezKiG{;$VK&Hh`loL0Muha{qP6 z^+Z9VcMCJ9y+SkW#KZJLxo;=KTiAR*;KD-Gf}>Zd?3RqUgkc*UI~F4$hL)$aK>xeP ztPG$O_OB&teZ@aC^PvS?gB6uZiUgY@7<)LB0-Qn==~Udtf={zDSfQNd^KQ{D0D*}B z7$%SF4obQ)v(&nmTO+OX(6i+rnJBquoxyn`EnTHM-$6L8J zs&qLp^*A~Os+6hIPY~8CxF9szl94g+$Rp-?)a{>uM zcUEdrEt9sIrY7(gg1>cGFC=<&r44f!1{=%zS)8DLU&*n^ZwSDX#-!z?SH#7)Les2{ z(Iy8Hl}~*iltt`;aS=lsl;<+bEf%a6E8r~ri+9SdqHEBz+lpKtFcGRO_BwoiR?iutMPLxJ_O z5>m;x9wvmviDaGCTajAFnYr2Unm?dj`|7H3HIdeHzen5eb3 zpj!r~hIUG-4zusL@9c}TYaE{TE1b3qNa+lWD~iaM<)Pkvf1{qYfo?lE4~VOr^5&aO zr@eq)#+r0gd`txfH5%fAYQ_^=bq8dNb+pKIG9va5VfiijrKQxAphskq5Lo^hF7@Xp zK+e#Sp^g?8ryr6z2PDHFP@>1hu;7?Z&QWAU3`T-RF{_SB3(&Ct3#y|kcQOCz}yeG+>iUxkT@d)msr^agLqZ9||-2gD5zFfCL$^HO5)-q61){xO? zhZ6t2HO>&3Q*>7ex3sX}W%=8K4lgPR`Hhz)UiP9t>gxfwCFRLotD&x}x8m$n$ZzD& zk>WhH$i0UulC|LkP_fv~U&X)djC4@y21aMPF#R@Vi7ubm!1s1Ez`3&F(Y;>}roC}F za~P0@E}u+PWl>mkGc(#HfA!uq)KxG01n4-DPfk!z;&woxLD#(#tkQYg+-BXEQM{cr9lZ*$V*-JkcV+5ZOvv9lS2^hGW!5E-MiS7iy+bIrrvJ><{{;BKo* z$l{L~_`Dg(a(xPFr3y`vgYR+>RAk+F*}gwFJD>bZVuL2OrIBHDLHv582??|el_;`?lHL{TFK&e00vj3~qCW6rVzJ7rnpme- z4&m&-k+ql#Zu}Do1+fYCm@l6LJ53eX?@O*FQTdU@$iX1UyGT||Rn5e`?+UB*vLy-@ zx^;D%Wa(2=#^vupQqN2VGr*hy%^w&dl()|p`*u5*$q(8KR{^FnD`$S&Ma9pbCLi3| z6=BOE-8v%W+Ew#5+_4mis(&3hIhWJBvZ8{R$j_@j*kqwmqeN@jc*8Cdwswu~&!Ucz z#C|6+<&H*C5L1csz&MglrWW+hOYIp$LjX9hC?PNqfO0&Mc(wu;;b3B<2cTmk?ujF#U4g;+f6qL!r6HJ~eN`G^^^Q>b2gt0P`p1~bJpc*zsOP@; z8y9$sx>EBiMjIZ`4$B`$DmH&RukZ0OD(nfUwfeZEX|UN?+S8P`7XZ5Jh9^x9G8XDI zI6Q^3A^(lrV#${A?-GU$Cx3l0`5Xx~6;#BM!yWv#DL+j7p7sT(@=Z&Bad{Dw)32G% zb2mvfT-0(ZNQ_!%||e3-@d7owv~_X;)P9FPevCdE78eap2sMIKy`#Y z-ehhAX|tq+VQ8_9b29kjBYi;so~OJnc#Rieb%FkNRdeK$46=F|6|Mw>GYsm=gnDdB zR(g71S?qTx$i3Vhf_gdQn;(gB!HFPk7LB;L1fP{q32dJjz;oqLhh$mCuf+~#+(T^4 z9Bnm|0c=A>U-EY-qrjXDa0<&O`;opw%K9U~5}wW6U1(R}jvJQMyU)H4XcL7QzW8Kn0WYVFt6R-PQvr=9sx!xSs~@V zloo^9fG>;cjv>MsbEyQoprwfEF^0r|C()a$m{fJ!)2;ICmR-Q0Py0Z|o^9aX{$AAu zDF_L?xRd&c-}`!X_F11yzZ8r<;P2$DwSY6ZFNw2XBCV#A%U+=S$4QgXLU*@a3*Tq34j%bG7&v7cTkqWes70SwkH0e}4IXdkgAS5n?g0lW_Oz=tI-k!BuojZKx_aJ7)drb9h>!E(>fk z1gQh=9`eFidDfMSI+h8u#{s3uw|n5DugJlNXy7J9!QcGY;w7tVVO*(%vI{AM`Hgbo zPL=7oK9e6eMa#qaJDX@l1ss8y5g!>=7b59H$TL#ClFgQ(kKS#;X^GgNq~0>6gzsNx zk0`EHG}9DBYBN{&eAAq7NglUgoXUEnL>CR!Ops7U?o)`#1b=vK7R{#9m^vdE85G6+ zr*CpdXBt3*EI6LICBMQeO*ARe{<(_}2)V-yL;f}o5Ou$dgC}z*aR=Y(eRzO`8&H;< zFbAEeUOorX*vY##!;+Fpnq~F3EZ*h~f;_Bl3kw^Hf`!HD;(!nlM5&U1vjZKYKj=Hf zN++FWcg8eIh%DtX(!%uP{^azz9(hL~I}c03{JlP7v{f6?d6X62Y~~g-;XeaJ&Vv44 zf!`EWx|#IlW?y%|cqc|mnBGZjEj(j#qcZo}(L{Z0)OWC8>!`iktocEZo}|EDQdC#B z{v$FDfD7_{qkJN|Df?|#cKpepp?G_+G5D9wSdjBcI}L~HA=Bd?5QbC&=XEi5cN*Q6 z7^N@K6vo!C)ckSEzb^zGpj-U)2M8?ET1rLVajEXUy`>}9RdOPX((!T12yLljzyxWP zvp#2GV(6{b5wYy(w&eWPpoORC!+f+DseEOI4x05h()7zhPLit|C^U57+*6&!w11N7dLpE4?MaDSa?nCKP~HC%FYA!4`yTk z1#53eNht5`4*1_OI3Sm3=d%=NYO(BANvz&+x7ZzNot+~_(bW#Ksty*M)SvOiXDNE; ztyc`whlax00Sk{Q5#!JWc$ZITl@t@9r4!n6i>sBIyl=6Mrk{g)eZI}v0ez}P@DFz! z1PId0%*;4v=l4@3jar4O0O~8Vgh}*WCZ_=2Gm&}Fbo;o|o$mOKeN!C|aT^Q3LC%fp zZ>exvZ0N#tcUzPIE?Xt;@ac;dR$=~6glFf$R9B1N+LjBUvo}1CafzGId!Jq7TLq&{ zC^~^{!jow!g^E+=YU_lh)Yw>Y7gBGud$LC$ERtm+&_VeWd?DSS;4C-ExW&rM!1Nldg2f0lvl%lGXiV>?gjk!Ja@`Ek zWHS+R#D^R=r~}jQX40^iY9j!bE+x){6XCA+G$GtHkynxpGO|GCd(V}3F9;}V^m?^j zKRc)`+X)p&b!=30zc=5OiJxH6WOE~hvyoIfA#KGdFW0Ego5guBHD>#qiy(NqR{k9VL)ss^DOv7~2UP_2j8c50iyoo?&%e9A$qvdJX(r(t!J)`@`M7 zZ(k;d^EEbDeyls^QLACrmed8CK8i9u$^(F=EgnCkY-yf{*FSdzG%GXYm@9FeUgvzU zmVU-Z^Yrot4)BLAFYfEe)7r2h?@|9AnE!#NQB*O z69b4qfBjOp=!BO$TKHK`-@ni1WMVpOa)K zTNl=!#?NsPVuJm5{zV^$fGPWh`+1@iK+HxH9W#n#omfLP%JayUN94FS0C2IQCm+8> zBHaa#icyeK1E{#h6;1mkCDU8(i{BKFVeqM-+x(7A;sO!LIn8(GKbXp6Cn)a*ZHuS= zQ(pko!v5pREO)2vZ9kk^6GiaU{@Pan{$mo{hI1fY?=lJXP-~1W1-JpNiKdvpwjv_2 z`mfG@F$u4|ed%Se^!?8~-%9v&A*bi)Gth74MkvQk((sIH$iud!YHRr?qIMOzfC}@$ zvB|)|Kp>(J{fj6$&kbUlu7`#QrtQI%5yteKqBJqix;|waYi?!NtNEmcuaX}#CFIrP zj}v<`yfEPDB-pY?IB(OG-^!JBIb=caF}mCXuRv5Ux!)SL2h#K)?$ZJ{ z0*$gync3tRGJ3t2LnnUl+tsHw=onFl-TcB^LM}%nOFpZk$srJcPYz0GV+#vgLDGMo zH52t4N{=gJD=k6JDx&_5QeX-8ffy7ej1((<)u%BlA=_RtV>lE4{G$`7Orzqpg|vJ} zI}Djh{MVPB@!|@(llm!4psptGcVwDlE3V1Qnjk}~7iv~|b-)W6OMn*`@LEi1kb3|2 z`)L=e*nK+ySXk@#lGg8DuUSG@+=noO_na4=q$yd`|DfhB*2l+EMnqhH1!_He5nsAY zcH8)V(?(6-PpsJNO~p!70CB)xOvf&P#(-Y63$lc=DcTqSKY2uKwyM&x^y<_YmZh4+ zGG}%~BSqGRB8>H;K1*-8xa#1rF6yNNfpm#r8%VI1tL$2WGB87bq|#AI$8VY^pZU}? zO)LG`?0TV{nz8CAOz14(y;kcN3}OEj z*mcfRt{IM_>(K`=tN;YGRDYXEzQN-64P8l|hBt^gk-DK)=JFdImkaLWV-mn+0ntc3 z|18x?_GpfrC~3U)kP>!G$<@2ApM0=|AqPc*^S=JGYv;#nrFQj;e>Pt@yP!aYaM08; zwG}(nTG&b`RAFRVY`9=+YjUB%BODkuh)0=!e`@ropu#qpYByZdbktPsnlO0i;(46M z-s%F`b#>?4L_KVGPZ4rm3Q#3d|)d@(y(&+qiHd5Ngi?>9XrNVfLsL zjQsv@x{R0u1>`Ggnow&GyoV26t^;POP{}8&-m68-R@n{qxmv5M#l=NE769yzo++V3 ztY;*2O}p!yk0s<3%Ie$BIvk`MVX2X@A1E?2BQVgOS9uv=#_6%8ebgs67z+xI9DubDSi2)s;|` zfo}bT_=n?p4D#Moi8ikrK9Kr+l8yn$zdrW!>`b9OKo#nzeY7!=JzC645r%Tt<|n*+ z#eOpg45&b@rfYw8W81T+cgHG^BZf81_w1}mghgHvQiE9(6)K#=Can_|RF#xOVdQ%M za>ks+!vM*pSwLIS=I6qO4AplyMysmPEB+qSWC81Lq1r{4y`o%zF9V{{sYE$&rL`Ur zR2Xc=@r#o@=cA0i3i1>&KuP}+bdX(f$TBNCJPrU?aDj&5Z|dC2VZlB%b$VwftIc2B zJ)u1wL)_mgYmu+fz<#nu^m+OQ6(8X8)YQDE5X67SA{S~%S7m#YS?jjHL-guHgAnke zXd-7V=@{wnI!UajOSLl93m3IWA#EYa)JkzWJS-|zM@JH7zIzPqheDWab z%j&&Lb$-JLT+-!kG;Hq>gYQc3w1@OM+P9t^BN%wzCcTVs_TNull!_(Sh7L|>%r{uN zy1Vm%{m=dtwrt_BlI*z)()sUedO_nG=cvH1oqyG&Zo-}-?9;;xoDDU+3|Dev?>zl8(l=4{XUw96{1IJHVH*IR=Nw?7oY1h*M*b#ggDK zb$Q*`aleH+T#FO|*Hv-X?@ZmAoY;Cr_QaVzd)1XKJt zl_V4H#fJAg4P3>$7R!8OKvRg?dZcXhb3YW)sHjvBz;G|M4%7Y$?8CBQdP#kf&xVB7 zlLZApdEgc7&je*jYMbKTT^tYqqvI|n>w1F-2CioQZQB*sn8Jf4n9X;`n( zTj;!Pz4+m)oHx*7@*odLLQ{buz*}CAepB>j+1+Pv@sj)C)#NASPjJ zcHMJWw^7E$xI^S4j0pnq(BX$lkWe;GOINOUVbrsL_d*qZp$BNvy&~OS8&1#G_l-O8 zfYSk?49%nI_eh7!ft;B%IA0}plqmjp{jh5)-+`cF@FS`jvOd z7-`yF1o%ayz{EK9TumUK(-$C=>M~W>1llYt6ooJZ0yI3D$n2KW`H^eVKWuOu_12`R z!JlSBseDx8(7zyd6e&f$CPbYJ(iz}IhuZ0_<7?m>8izB+3C|k@rb`+<2X~83a2_M3 z6(xQ+jrE8R4}6SD1IC#bE#*&u1c4OdR9M!P^GuD)+v+M_UOpaKQWz`q%fp}P#RaPI zaU7|sVG1nYjs&JZ{`xSKAXP4-5whW&H)me1&E_i%kNT%DhA=i;$gy=nCRBep!d~06 zb>ZReBctB{GJT$$2axJVGjx6!!{ucOSP}!UtU;h1M#A7uV#={nv2i)zPAK-isVH1v zV%ZYpn%g84--^KOBZ*nbCf~Asy00kwKQWMpwSf+khYbqz(2R@|JDsU zxE5w@&SKE$0L(}LTpZ^AuEpN=j)242dKsc*DR3s!M4?8ZZ=zmDn899lcZI?_*tgJ*E~A*J+0(i@dWE7@1)X0a3C~Oufx&qIP)#w7JR1NM9V3T+ z7MP+(N1rs?z>NzTRL)}Yw4P4F2S&syF+GI#MLLx(qd5EGv7`U&6cXq7D8DnHbdjfg!iOV0uzDexcIq7}%7}E$vjRMvJ)eiqvFg=*A=Qds$ z$iu8vpkDmAmR`DOCAPyV>3kIC?-^}XMb~La`7g& zyR(OE+OGa}mO%Y|6|~vz48=qCI;Z2ilz0|gR^SqYOlicPXRSo3z8}HG<67r`=|V0X zPNE$6rRU}To>4@jq^)~U7y#bHIc%n_u*q#Gd1J)(<>hm*JfHBgz|x}E*eFeJrSIBn z)$||#Akv~xYkp53-%6pg7m?Fj7gspr6@4g%IP9FZoZA>43%11x3so*g9VOaMAfWA` zTZuyQw1;{ml(LNdTJ!(f`^u;)yP)l(s3;()l$3}90@B?e-AH#y3Wqv$iwa09-AI>o zhkzXEI5g7T-EoL_^E~pr|G&TA%b&AY>t6T0C$5>ZFhIo2l)vJh`(A+ z3y}(dTCF)HWxz=!-(S zf{JNT{^@~D9?#?FTk*@O{tCh3Ph!D^cvvk?g~L(Erech)9aZCE zc7#-#u9})o(uASSXcKX%KQRRI0g4kW@-F1t21o@!uTA*gH<7W#2t4!?xG;*4e00$z zovTqy&~3rYS#-1?|3hefnl@mjN^4&Ael*n>eJKox-w6qpn+9tno0EU1>Rdrm&2FeBNw{Vs5qwiO&x@V zK__vYzlNhk3p5Gz&m5i)rt7vO;rA+eLK2vTTz}D~O591g-lN$)Q4`m^Z^B@n4U!Pg zTY(XC1;IvE}_4$AT4qN?HbxE1c?m1T=kqIIvkL-FmV_-QWRNK!exP%q#|F!VD zWfm9i#_qg$$F4#s7aPSd&!f7TdAaULkm86=dsw@-Gpk5a=W+CIkmIB)O5R5uL$D>n zl0wnnmr<`fWGmtq#MZ)we`t^kv;Pf}zeY%~x~3K%s@tv4&Iikdwk~7cvz?-lApmV5 z2Xedb!S|Z?qq_3-SPP%&B!Psv@by;MQoafrt923dp6;3ItiRD(h?c*4#Bmi|_|xF* z@n=gd;HYIt%_k?D_98n{-;L=TRmpf<65Dab@emcDvh05QB8Ka`OT*Z*`Ip6a`@WgsZ7E?42$3z@YX+;PX$-z?aQ?BCV9Erp?m!@< z-+sJtOK2x#O?E+FypzHHeNf{i!F1D$$HBk(w%U51JFM`HhU9}NS8*ex_A~BlT+!wq zzd$bnBSyo~nlU-71cG1}i5_AM(UG+dD=T$frB8MorKJCQzYo714h|B{%=v~vZ_m+i z=o6Crluu$k!f<5peGTjh%jNQN@(R?Mhv%v@Q-g?sGFPR77;V3LUM`RJn`ET6_hM=d zu~tOr9>K8tJS@!EESiOvSA^74zQQdFLmvH>;wJ;6%Bda(y&PKFcd|>gRD9UG>S~=i z13gENk|nj~>~MIL^gIX77eR57(fty_e^&(w;u)QA{ZV`fU}i9$jUe4Y{kQ;W95QQN z>+x}^?!@cTVJ`HXop8OjzB6$YpnhdK+(zBUIRYbtD$kN&^A+I)iZ0qpk~{$-YAVjU*ve>D~tG zyDd@J-T8EuiQaFio?_e;GT_&eWAIrQ8z>XY@6V1fk2IIl>29hn#Y4pFD8|TR0s&4u z-E9{GB{SoGpCw#>TAe+5Q-Jn92tEtdLY^xC#MyBPy?l8vs%mhI>1rPVE=R97FE1%p zPW?jUs^Q|;P@;Fs2^CX!KTNdd=Nep-ydxne%`L_@tyt^6TLL=NgEsen<9>+RumEd6 ztbV?$IwZ4n6Em9U5yoBN6tm$(b2K%|Xgkev&3r{onU>Sib(0a*K+@)H9u!C;j>PbH zcuJLr`u!}6oR0=+XA^y#q#@FaKV7`#f1_OLdoc_Ryxy3QIz9rXmGQB=3zq{@M@Y1~ zrYvE|j5>}CwM3V7VhVOvmd8hvzN+z3Osq8fyXWX!24%QEhPTn*Jz^sp+CAZ5Q$+In zb+h;DD_f*!cRqRRb4Hl3u*noGyfZDA0^LcXqr377^O6bf~MfB*@*!at3y%c^<@z=N5kc@G=5osY3->*aYrdQ=v zQ-$YH3GIzgeKX4m%f-&$QZFNtxC%YRE`s7fxDI;?91O*sH-K$A>{H8>!mDH{gLhT9 zwKy%b1oQ&c86TC0{1&quOaV4aSQ$sl7or{aTz_(n<~C6L;}wwtYFc7IUBx+MIPAK7n80R zW=!RyT`-i*YVJ@lT2^E*e128~&cDR?q5w7jcHf zX_K@ww(f^&uCjEOpltV7l%2BQO25U=AYXBY=h>reY{hR{T!c2LYZUQy#nO`7m}hx; zAcI*ok0DV_x54aE$oHEJ56;Q`zgUQ&4bHdBLX;(1S+0{jm7)*C{CxX8`}{BQ_n^{F zGrunz457vANi5gz>C#|R0Xa7i$bS({+x@^{MH=;Bz@q?HRQ#|S(;KbjiP0S+X0pej zu6(n8mbkX3mIk;vzV;jMgQKGKOwLXx=cwgzKMWlhIFrM%^Q@<2Rw&X_ku&0-+bm;f|V zR&HyS4%TEVthcJ$N=P;&s|2i*U;#}D@OD~AUY4BLCmG`o#kePok@$yU;0NA4pRJ#& z8X)6=eR*%5?yd_1zh%yJY^>H5)%6Uu_Us3w7I4@EMyIz9WI zP9~7eQjWk=i;V6{F+)fP5Qd0eXNrLpkyjdz)wErR9( z0e7VX!FkdniND!vNIGaYy1hmOP`a^2w6aE2HcB%8It@N+#!2Yk{5CX+n7EZ@5iNsR z!%CHA!G$X-w`8uPB&?%YK+R*Dz-0>x|G>p9DA~$Ge^F_pKs*+c(vqr(0W+!q%GQ~Vx#F#; zfvf~eGJeod@#$09pE-M(#(6M1JFwtqf4!FsezL&VAL7Rk9S!cEw6vwLG~mGOs<%} z;-Y}5dwA$}({-w?AG$K%0TvmY@jryTZz8?#2$mJfw*IIPL&I`@J?-T;vl2oQ`7dp< z8NmimLyQ-Qvz}Vy0F4aX+i$Vxj?8FJEmcjU&V$4E@^W=3?%9hlR6Gqa(dvhKAPs-6) zfPa;cW+j%ob77mM(jvc$96(c%up|umea9Q4F?eRa_{#`30pT2pBe*yT*k*C+-8>HsO#D1s=W zJO;0onr1V`KvK%IX3)ki*u-$J|D68NiqAmP{r*+uyC-w| zXNjtP=yiTfIVKlZltz=kRr{yDDm-Y7!07(WyT88YD+zJCRGHIxm~w{BGr#dodzY7e zW+j;2`*n;*h?BbvU)sJn8`J99e3|&*e$<&p6_D9VZzgqay5YJfU}$J~6*T#Qn6S2~ zm$kD5t$G65uQkQ+I$pM&rgZT_dT$h@3TF0z!Jx$n;t~J66ER4i#vK?Rh3q|Zq4A&o z^~I8WY4@%0r>2xoU8n3caci>e5O5^8=s(77-b|B{9mDbz$K`GU+QY5Pw-fW`Rsxe? zE}aszcvs(_@?GlfmVT4kb2f<0RIe`y`~jcRg< zL6yOMlb^ZNlZMA2xq#mxOWC5oplptY*ij0SKS%}#F_wq>;i{-VhN6dXmFcz0l->Kl z$SHc1fAa$1lOX+}L;J+vucd+_sI{%vA#Ej_4DqY;V=?vA?4ts~8N*-CNq7869LM-+ zEV$_sxFxHL49R3Le;K9X(MGU!E!)8&qlnM0EVjXHbGmh;_pwJ;HNIOBYG9Gb+iH7? zuU;|>U}{7QvvNi@Gft|cLi!VI3?B|%Nk%4x2tlFdFp+SyOtjzWFU*B#aC`-|ao)V$ zGSvBFaTJpn%RgOtC4W55Bd4$7IJ!AC8jCP>bDKJLN%BN)R+>)7p7xYBIN4AMFh086 zbgEsgtztesNyEC-Z%tEJe`~RY-+wwn$9w5e=(72~P@sJL4wB--7V0flz-Ckt1?A+p zAV;Xx5az0BK}+LDJ|FMIa$(F8E?&)GsSK6aT&u~rv2vD+llfg=B(uQepUuyo9v5mR zx(sOKJFF|B<3&Z$%SNN_EtYT-m5LZH|2ZbDz4G@@b{x@*oQ0l7_!OR=4vZ9PmgkP& zDHMTBV%;`_K=iH5qCY3aLAR!+;)u7|Nz$|57CfYPeY3i(L7l4-KO|)crHy-vuyUGxf z-7){=&)`UuGq!#+#~p`2-Ti&jdY9$^+(}AKiQ6llj|9Pn%}$ZHHQ1aY?ho#!YsUSO zw*{DVuJxJ%ZK)((ikpNa<>q$pN{a2oEnqJ$&NEL^NKM!+JD{E^JRj3E>fA-^V8%-i zv&utsVxJLrFla^)5qIIL{E1=Fj3@P4aEpIN7^<7ngnR&hEw5g;^n+z2G$_bEerD#u zcjOxoFhIHtg3Ze{5}_fMa-s}MS})`CLWxWBM|0WJtkCTwUIi62A8HyRkIc-O%PlR| z`jXR=JSdUpnS->*-Gpcrdhyl*8Pdv%L%Tv*l2TS4#u&X4awV#z0MV5Fguz^ucWPWIx_`zd4oYxivbhByUs!eJ>vpa(?gKaGS~aKteQ~bi>l` z;kfyJpa-+F6CZu5-!W-X(G)U~vN~;__hAdTJC7($9ukO^pjfNB&k;@Aw19cuwX!z% z|5JrJ&XDyXsq-)xarc~{gH0b^M)Gn-wnFGyxtV)iv7vaWs;u?&@YspA>ppsHzSe+N zW%@d*?Okb1g}k?BbUJtpI%AskFMhhpTC_7&zoTw2Q*bmQ*P=4n_u1lH3in@5u3h%u zwzSyTDsW2RELl78c|DSRndyU$?-)PR`yVe*^HuZs4$HYmCyFVCHoBa8@Ganhdf9Ag z>YJvT3O}dngSX8?LjB|;4;Dns*N2B$ZG9aLt-B zHqMCGcy=#ejsj>1kxeM(*gH|}s}f%vyb>5ITAXdKO2l&Pu=>F>`)9t#8NLc;o)g^m zll#{mnZ(7#oq>^`+^nqj8^x`T@va-E%gNJ#5$fvo?k-i+buRmHY!*w6J|cv{Ep`Y# z{CYR_YM3!Qvg1mDl|bOaLx}S>>WLr(Q>v1oql4M$g>G*yhxigm0s zy|p#X-#=SddV4f+s)WLIDYmPJWVM)Nm1KONJDQrd2P0p*pxjK-VmH-!Hg#jHJm0ue z6P~u|(k(2!`Jm@ih%%X@HP#~_i!#}HBL&&&$(%sf;JN#t!>SkkUx;;?N>0?dpYE+T z9(!Fbd(l@fgrU<{%@kgp6^2J8xn778E4{%E4pl*_1bw2srH!+`fT zme&a!%VS0OdaQjb|50&zh7*wA_Ib}X^iR?3YrWHsSkoi|O@1&6wg&-mJ>Hs}Eh^M& z;IAVwaM)k!j@I)$g<}c0UmT8HtrcFHGvE6F&tvCedR$&1Co`N{HGT(`IwUSpqK1Hj zsBghYIp_DGX0C#~tV+L|V`YnDdPUt=!trlO6X9c}ulSglIM$>p*V(WhX88JPeS+sS z2P$@|rsFf1KMc*h*OB8+rbK1ZxwtW-&tuWEIA&|7T7E}2;~jgcy_pSSp=Um-P%cZw zIOWy97>+@NKxdHsUmU0I^hPQNbNO<~{!gI{o zl=92Q^M>p5yURBlJR3;%y){rC1{W4mTYfXU{1L{?ukr9`G#+QVYBe*S|F|0A zak-x?aCN?qPp5ee+WPE!2S=OZ;i+BN*w~U8OZsOnSrqWF#a`U{D(Ga*VFujf8Ufcs ztzQ?`G1qkooQ4ZLK-8NLu>ZEAzmzAfJF>Uf8BMDZc2Hkt?0R)v`f7lI zD~A7Vd!IxUc6-s;l)p4fG6hrV7rQ?Qdv1^2X8Z=K4^vk>Y)WBz4ZFeCID#k#%6UV% zLqzjKYf=7^(J#_RG;I@p59HfeF#O*1aiz1GCd|)%%rTDA+@~t$c5)KTy)G$};j2e?&--Wj!#mQIVr`Ox_p9wwzS2Y} z`UttDsGBXq>5@B^2bvXg)iKaF7iHMPJJU-~WymH1R&6>>gtg4JY0F+N+5dTdpm-9b z#m&j6NskN9%JWAY#Qck$QjxU2lig6S^I3qJ-Bwa8Jyst7cXwCI`lrL; z+K}W6E@tMv9;f>K!ppV7lFT)+!&vDdv;M*2DL*1i_E5y|~LbCIHR$>JhF-~M%XM2SmD{z=2??ZylKoi}WuU!q> z94k*g?J}+3Pu%Xp_zq`!fKu@DXl&c_xVHVbUvnV7Um^yQG-*AAXX`%d0t)F#qqx9X zU;6R2Apj%R&-_7O=$b`&?xuUkN^LJ(+O1s&;yoADJSpm?b{cKE5M0X%2(Qb1Fda>z z@KOju&aw>Kj9j~){x#kJAq@nhC{6e zT*pITH4`wuA79D+Yy%JC=}uNJCn0?p+*8Ky2qIYHyQO|!Hl6%dhO;el&S~aU;a-;I zMYc+oOwbFGY<)a}Rbi2GQ#;b2!N-mb_(-lc&DM%#xauAqBG%gl)@FSXh`ifwQfjt*{UJ6EMDCBt81zf$R(Qv3{O2|}mvTP`v#(bjw;hfrodm$N_Y{sGE`YVH%*<=(>9}o{>s{_ehl?k| zI;b12kPW0!@R^H)B*(G$P7}7Rq!)dpJ_bNBbj+$j3k+^V5!Uq-d3k}014hcK^S#c( z`m;4KG=*;!jpur>{3TrATzC)X&7VB4vn($u*W;JGlV0boUUip;g#z1k`&&Pcr;1n% zqH8=z6mTwPPz9<0x8e9R3y1ftJ=V3RPkWrEV4ZZpEd{aks5f|ez`i$~^zJ2JohE}R z0|pjgOE1|uA1d&y<@2{h*)2rFd1nLg0Awzy4Hx4L7fT!srzuz-R8TT|pG~hNmSmSJ z<}@Y)*=W;4jtQInZVrK?KZc2xm778W zwWl^+C5)WB;19aqiBP^O^7kwLZ#cJ~5fYxYiSzIEFW67kIH+mcimu42UMm5>`k_+t*&qml zNL7WAi_v=gOiZ@(!5m@=Wmi)@_b}VQH20~6Ip<&3p@QS)SnYN_&uG(T|@{tK-J&x-@>izbHiCLes=r_bUS zI%nB@O%qND<#{&CLOl=CjzM@ceRVPIH~+|yjkte@c0fxa3hph{f{J>n8x$JqXIghO zX5j^h$HNizt4L z0%VXQGJh#~{?mnUIqsbC!FDR(y2f-yEdcLcCD;g+5R3L%R!*u?;RtoY-8QFw@{~cR z>pk4v-35LEm((tX`Fqqfc~VCzBZ^LootrxjO19BB=`{Tl@UOIoJ8yil82F;Celq8S zK5;l^vgg?<%ly2J%+&c3N98LrCrZq#IflzQU^g7Me;)fTW+i)aM|bJ~6Db`<8*BBT zkR#~5z+PkmK;(ctP7(!_oY%24ijLu!P#zdomLAS|Z`5b^TMd$HYu+^ntiI?&dS#i^ z<1^IlG<9=K6YGjP(_P1erdE$W@ZZmxo`ty_e*8x9Y0(NB!dKz^z0BO+2(ZehAn9=3Nt+<$&KlL8SaCv^0W?Z%NCEabHA# z8li%glF@Wp!zmnk8tjfpdcrPVo{E+{wLZ1d# zS*yYFPqn7cRGm~eb@k5Y@IfSUG{6I9#!YsRNjN?aNKIGWo5iirrove}banD5?0qs8 z-u`%fIG+d1{p7G5I{;KnI8A%Bk~mH5$?1eVBx3&@_58q>sU1ZxG1@J7HW6)GZAI!{ zoxNK4t@gdk>70e1&U@{z7-~04w%wO`u00ii-f+=!yWy>s277KDS{yOdjy!Qc{HVZ5 zRS0ID%|{(JZeDK2M{?D(zsD`_V#Y!UKX|B@n-7&3cd}cKm3bhKtdwX})>jHPI(K$< zY+Fex0jq(o)Qq#jFWs;~7u4E=+>L$eInJcGxU~Y}k4BFB*ooC$lbJm&q#g%-y-6}0 zm^?N;T+6(`uuY#0S0=gdweR=vFt8@s_e&a_0;n#5sF>I_-1%6=ts4GRGs$Hswiox_ zhTT6@by^x}W+WC>hc0ENQ3+QGsaDMW>Eii|=Xi?nsQdCOdX73K6o{1iBIe3dLX ze_=*;&Kg}4gAH<0$Rel-dk~atUtMme_wRaY+x)s)>$q7nAHs74I^LFj z_Ol)<%Tdg!duMHPzT1kA=F{HZZgi+3ku=xCvz;)tbghlRf4u@G2w?Pj6YvR(|D+KG zi@cTmK2gJVJyHmHP`3oY_u3snNC;FjO1qS4qG46m8W_P^&3skGDz1%jYfmK*>mA=0I;mS^`w_+vk2jNF@S+nVca{04&Eaq4aK3>bQ7Pz%gzN0@N zy4k%%ZeM|L%zfJ9*ke^%Z>-!xtrBURVAsPHt?Rm~)^IiyZ(YyDOXIxr3-xLPak@L3c4yxA<>MV68mZ5X;Y_@L;(1*{7E+e&5xKlrDpy9W!FX^ebX{q(G+@*ia)jCSKm_ zU7H?=Q@r*$ys)3)y3e4HIwRbs!j&IQd09WgD*&+?Dyci8{iOYXY)XbUeX>o{1IaKV zTHU%6u%aY6w@>(+Vk>7|ru=qW)yuvla!D_s`?+}qar6UqqzoRS46ZdrIpbEfbQlsL zl5c4ug*p!|Q4Q4K3TUBmqfeuRrOo7Z+gK31O0;+ge&j~_v8e7r7`6c$t8anPA#jH$ z(GBN|tMI3~8?OXT+k0aU?%`|Oym|VSxP4}P`tm5c{vZRm$W0ckLC>i`Fm|>GKA#ZlibPB z;0}ZBt#AiHy5vBPW)vznv>tyfqe?g#*nPW*bkW`FbO$sg_YGKy9nI9tcZ@dibLXGd z;l3jfUwRM10!}5mX+J9DC~wsxx2|EA527?^h%DTbAGqfM{OLd*{0DW%Q*NeF@A*rB z7a_si&@fG;@VGbAn=!Du6FzHGT?gFF>5e}8OUYZ#8nfgCa*?y239jj*_VB&Dj%KW< zPg*!Gfk#Z$I;&JN=A^c?1zRyE@h+)Q{&lNh=VKusi#8h(#t&6yvWW) zB{{B)T1>Esej#S>^wX6 zx;j1vaq(oN@)}S9SK!>nbz+;@t*3|`-OidmErYZ}`G{_OI$}0&3hY+i7LJ4$yiaig z3DEk7cW2D-TW#}olYekrrw!7o#?crXa7$t{gg<@qaW8(m!zWNWkwE*4?880%XD&0| zs0AQ62Iz1cIgTSxL}~1!4@i~DuP9X{iI39}_y( zYMzQUD@|ffuM)l7{Vr*g(~16+UobMgw_CAke*bRsAP_%M;?_t_k6hhpZl<9xDhrUM zKzB-zWzhfrmI{ApVutGF-@}1MgR;sO;+9Zz$BP5hUi3iJ4)jh@HV#gyo1ChRGpKwK zE7iyusoaW9Q2vGzlXh>vIs^V`QHU(LGpG8Og4Ex9{|DVK^HrLK@(yUiBQJ5eK2)cD z?WQFmB&J%Bz6;)1bMwYt9t9kg^~1@bv7>gW33CUnTOo3>_O9*vE@jHJxM=29jHox+ z!(OFp&7{WQV^_mWlxh}k|4@e0Il2hx54WW& zp?7B3ymsi|bJ8-Pe-R(v`p&cUsIjXr)aw?$m7~m+y8w3!;R>~ zRf$^<#nQ&itdbMrvN>wzZqI2KD;-Dc zb^CNWF(-GRO@kwX=z4v#!melk&@7c!ZJ5hU;d{>&`aD^S^)3Cf-QqiigDzh38(n~6 zx9%F1t6H);D(B)dvG$?>BcM>N+_8)*ooc$o01i0re+Ng1CRuVAI{EBz@62Wx$B6ir z?@3eivFs<@5KyW?+^RIB*$g$C`AX4e$CXUVxK6-*la`LT2zy#Hrc6ZW%oe7J$k3KM zz+k!244X0udIfb$*4E#>jot)p%XnB3()29%kuPo**q4DVJYv!9h{2~}ZLf9fvhbIX z=dNINOlM@^-9DC$@S7!wr#WKi6poBXQ~i(`B+6HUmbi)){w1DzhJlcafRSW z{6=ll)QDS$Tz^glIXb>up^6fQpGS75`=OosEW*g5>HL#sAvY>vQwAmh4jmb-EIH@b z*J@gb*jA#%knW9kndNXQ(k|FlE2eyv%c>=5^t_>nk)upA--IQXeNE}GrAMlKEU1R0 zaYCiT7(YrHXdJa(+hR$oDJRu`qGI|78|GQO2Sz_fE$=Qx{SpEq(C(WK*t+v^Rc8dJ#$0i}|{@QJV8>EZ!CcNZ1;^Lkl`X>O#oRKyuV)ScZ2-N+eoQpqdN z-0QU|qgi4`m&%xROj&m4kH+PLr(oYGRSzH$s0+6Pm!oQK_@P)O3MU~3-X73sMSis{ z85h+R0!;k>-W|GHLtL9z&Nt-xlAVmuq|lv`MVlrlDj?TVF!Y9NjMLXVDAllFecj#C zle4A__dzpoycREJL`StdQ!=`Yi|@0?Hw%~wNX?!yV^95u$BHaugdsn`TQ%uJaL`Yo z1z!=yfDNdV9RJRtH#GGl2*ce z)p4b~5uJiZCR9c&@a86)VjYvT7>nq!uRQRL8^}WnF zWCGf>c(Bo<^ko^XO01a38!~4eHQP==^$LpmVzG6S&Dm9!^)IQGN>HjNY>I(o(5v06 zqIuwbLVuwJ!HfnYkImTEXRV3lhu5(WU7K;yW79fLH{PZ&s#7g6#|rUBBNhioKct1+ zK$qCD9T(kVle$kKgCJNfHjN8=W_txi`WR+$NW_ ze;E+hosGx#$~@TL^=FDQt9Yb4JBuw1sdV!N5zI6O<%X8;0%Q1eL8-1R z<}H27Kbds%)Z)9NH2S)vR_${mI)ic00Y2%&=@v@7=Xw}hZY(VlY-41zk#vueZzvTd+lW_fvyT!i;ohi6jO84s73j-HWp3ZJ((dY!+xJ8KTWlY3fHtL0n+YoVskab6?E-hD zJ-1~EOPAISa2Vq$4D1!tUd9sWyl1sYT->_v>~adtjOmWruZHoHM(rn-^azk2qlOJd=`+xb8%_y(%gsg_G(?J1Kj5caCND9+S3%i|<0 z=MIbOQy`X?57}DiqZCIl_&_rm4dd(_t!0<(#ho5CO5bp|k$9)Hq)!1S%A(sWw=Y}V zR^2k@8DC{Oj}P14=KG#lZ}<8b3xpMB9vU|as`QPPEhVjX^li=&8<2(M2Ah=INy1%M z!X-#mm}BizNSI8esN4JAAYXdSm}2blJ+~noA^j!$tr5X8f?O!g83eZB?k&AyqD0e7Olv z=+=Z$|HaqNbUV;b1J`c!9lctciLf+fnbEk5oonHi*$4PdtOQxP*Pp1-ziB~OAy5&Q zuR4E~-k)zX?Eyh8#AdCWUm~}#QnR#@Hd%2@>ZEf`EHkgZW7le1+)K&8W~j_!uS{Dyl5#70 zN7(rIrZxmZT-C$7THv@vTsc;3kED+z?@RRWS3sKkC89s~ZLyi|DX1mltjXYszSEUH zuvyc!YEKs5ZOT$DQ)?v_#*;OW(^Ix|G#$&v`f-aAV)F1t=rcttpZhlxxHRr_v!snH zCOX$7ia1#f>}Q6TJZq2X@t~1=HaR6xGBjnr+`Ngj&-93vx;<}`9MKt*)H#6}!Bbg8 z`0Q&?Y)>@L_^K2;x{dNp&;vR99!|53?W_ zbEo%?ZOi+U8Or7$yHhy<>wN9oz6d*=3uMqO(tqPLiSaMKj;ujuW81lv$3(230oN5C z6T52nPt6zDUE%&vFP^iscGKcc+$y-zOW^|<*~!D7e=%EE0up??bk;7?PK#G)n<Qi40E$syCgM)Ug&ypbf1f4JuB=-G*WL5i3(^%0P8TypQUBr_bFd4BKr&#Eq`!`o za>N|ea_kY?ALznIPXX`6160Y0&=)FB1_!*Pbr(5(cPuP& z`ipP+uYVaj@gq zQ=Bn56L=vq8!5#p+ZK230<*Yyg}6y#6aMoj783<2{MVl$Zjb-l$5{G7`jC(-zkc-j zX=up}T;5;rBpFzqdon?=f4${azh5l%`yOv1@$_l%Z2on3C9TivYLb_Jy?vhZL?;}F z>est_BxF^>zbAr~`r%Ef4{8DG+zWqgMn4vq(f2CjE6= z{@wkpNg5F^Hs;)u5~W*1so8%{-htu%{l^|dp&;f3A)dcRj27|VFR{st*36FyAPD=`H=^jjutPAQ~maK-Udjh5M);L;tJ6 z%i_DU4}%ITn4Ak*3U|iL>0xmn-uxaXgyeHDCT=}dOAnN(j9BU#v<{z)uL7=XE}!yP z_p?Jz)|=afs?DhQYA%%~lBwxPDY4`Ksb`gt{ZuU%kg>{UfS1h{%^j~fZ`8-fpo?FM zGX3>S1I)T(o7N3t4eUyHwzxM3i%3?1$g4NM_!-Ha<41u0vxcg$bR29C#3EL4%HwFC+9Y5vBw)Z)fjvpWMyUL<+VRjpbEAP zsiK0xn2K{tQmXu53M|DeI{%nRz|BGuy4;QjUXRn6AdZlbFipRm@4eH_-n8NYAKrdJ zP+9JQ618-+_01~Re+~&j|2bxM4F2j=fxdp~*zVUdPBwwQ%}|{L&6=*MJJr^uD~UdD zTix6>IO)2ikNk#q$LN{(&*a=>Y$;w=y-7|^e)|?R_vuos?od8RTU$p@-;pEqCmPIk z%4OcWPexveKk*dXQHqiRem!eX;fK_unI_HxhgBqn-W#fE)qeZ%)awh{+q1N3%=w7y z;O9j?+L2Z77Rk}hGiogr4Gc~efs4+QwG=wcu(-YB?RK!RXHmbbWYF%ivVnntl~ult zS7ubz1PsQSevkhj82YBXe))P~MT9Y&0ndh-r6q*pYcAON;@XE3uI*)qk(r!ORA4e^FGfZCDZ||Urp5)U)`=!jyQ<>W7 zlOtPNS`H3;q_6|$KEB{?xhDMZVW)g~Ab+02%c}e42|tw+68M*L?%>-941GIjMM)!w zw?r)U4A)*Rgq^;3jv6Ot(UDZ0H0KX+uS|)-b~KR0+z@0P(if#Cn$5T+@`O#PAbYaw z&1+BxSBX0~pTQZ0v^7x0TvO&3)%^e?hch!XhwUTg#!3wru6t&Q`tAUFR9_GlvXp9I zy#I41c@I2)83qY%4dIfWq+uIOP-4U3a|MGrxfrHlA^8NuK`bRbYQs`rX^b;w{}-(<6Q`D)hQ{`PG7*#jHPO7HEN(a*+L zN6z)O7KN<(1v$^f3e7c`nW=LeZd`KxIfrKwfTZc^M2;1Xq>QTuvRDeVPDFIH0AszF z6PbzRhGhxnCeIo#*!OeI%%}`@YjBz#sDoXysR_Xp6qX`AEFp8ACBz(g#M*XAi34)C zuH*;zk40wkw9S(#P=f1lkn}^5t0k&(gO4T~72Cg0)qH=whusbJJC^RrRO%g|7)lDa zA1|ZyTX`rOcSk(n+mGFW^c`(v-rfOfF`S4t>ZtB{b3vm5RsCH-_UA)aLtBk8xbez&OS^y^pu6;`@Srd%r`Sy1PHyWc@~)Xo0x2^RVBZa<#Sl zh*M_DLG*aAa*_@vnb0tboZe){cA92UkwB<*P*)-t?biuFU#?-k zMl;?u;IkJ~aE?xoGiWrs z9E3H!Qa}Z1Ob|^AB@U-L6Up{qOa79c0huI|Zi0f}*Ly;qTMf3$w ze+;Wvw(ncoBmZsAW3GtAOlA?0NuNV^8JTXtF%n2@&$gehjTFEL%*QlXn3x*eS5#~{ zg2yP}QUP^N2o~Zco_uc$ON08xt6!j^w5uPd^2-SGw+6|HJUL#YT|G1FG)1cts)S%N ziSt;9pOV#b(qPmhzh$`^+%xDXZ27qIDczb?g_b1s7n_-E3r_rG&5{rmq72iT44L=n z-FR;OHnU!+MYa~-^RF*$8KawY-zrWTP+O-|ZKa?cU}Y)`%B|>a!TKh%LDcXDE!8r! zC-$^lNx*!LOn;_Nu1%@a-AE@ppPpOoTD0wuH9gdBcu5O7u3I{_#bQmom^%t^7#d@b zPjay>8@P{f^x0*}-~irXoH(qslz43+wXV46Th5hCnRU?e;krUnK3A2O)`ncuX?1s9 zyNkoOOsi<>RX1r$kJ6V zdDYad@4X4~^71fz0R9j5w+uVKIQSp#ES(->q+RVP0wV}%g(={&siIb`MRL$js11rORfKuqH^imqwJfN<&)Qu5EF?obT*- z=i%fGJ!AO(&7t*^x#jtScIxj*tEsP)gwOq!>x0=sU%$Sr&SL0xeiqp2KuJky{*E5@ zgrFL+4aQg* z4Z5OiNR&~>o$Ug#K0Pt_3y-4_iP85(AzmEPh@5@X@~!VKO=PC&c}iBC@2JTir7rkW z8x;v(uO~?>m`ZNAJ4|y=yO6wpU{0`QhoFETiHeH3wmA8rvRRx4!8z&QY>hP_$;j~h z?z=`5mC|2U$$Pv?QX2vWx@d~Tu4;MipT8?PBgjnIR)r*ZQf74EQw>&$RS}=i6BRGWlMz*W(c`&P4ICg zoIO}A)-BHx4?LRt^vaxp1m?j7Rt7YJK;&DPfIb^wpRxs>-qsx#zfZA8gx2N2tW6hG zPF^dYOT2H^teHr;@3R)>gB0#&wA&bCXKlU85^vy7`*jE$g#4IPDlTPYETUvsNR3$h z*od|sk8_-+;wpV#yzx=GsZ#t#1}AiB6eh!*&cILnQ!C%-JYQPAC1Qi{m}X^taMle+ z20GdEC*syrZe`XSLR=S2)6>b@#!U^A*0N}t&5}`w@gWQHH3~lQ2U9yY`xU;D!VzIh zBK_)FhQ8`fWOayll)*6ca`gPKGz^8oqS~e%gV?5zpT??&p4r%b*HmK!HLjf)Uxn@s7BH^Q%8{a=yW>{^p`t8)iu0g%x-%^yL8&y=PtS`wiYCs6 ziU=M8#2MsGA%VDm){*FJ&2c=~cMgZQ>yV;q0NHaT3!YD@*YG{IkF#{20o zJ(RpbIY!)i{@psU-2(9kCWz`0IbqFkMQ})-Co2gcE56nnM+?yCh3kqlfU8>p2S@39 zZwY&@gHAEC&F(949~`zUTSNHSqxU3|dFeck?BdO1-6_cd1Rm*<`6o6=&sC{ldr+iT zO{&wI#tKQuUz2s`Xz@ABHoF(yvGG>=3*h^OoFC5BZ`(+s3CE0JIKmRclh0jWe_UC?qX8_(i!8}VHf8|CzX^a+4nN< zpQe+;TQ3d5c+#J06Q!rSiwKFkS)H4cxwiTdG9sDyC#nJgk;&|ko5s&LIuf9>nT)Yd z&jJUtQyrnZR%sY?3Pq;Nap%?9H>9MbDM@_-&IS$D^R@QlT_eq2r-v)x?U_~*)o%p^ z;d64vd{3w@8L-3+g%UcHwA9(w-_mSt3D9*C^Kt3~?XW;7U;dL&IhN0Srl0E*?{L?C zz-@mx`$$F2=+Mv!7yZd5@S%}UPdoelu>0I>T|0cA!&+JvHwwYZ1U(L(#aoTn&4%HW z1&QHnVf2d0&!`{p7r7AFH0!kaECsT0$az=yEYOx@0-RCif-`P&1XW3$gtEqpCG)3~ zFvZrHt#lD5+F3eWBEi(p!S{o| z%@B>&S5VQyRqNQGpV+2AmZG+|IfawB7p$JV!C z^HHgX;)h5uGQ~!NYrJ?ocMBdl^SBb_Pol|P?Y8R}cx|5)?$;=!OYC{ckHE89&`s_< zh5Pu;4I1I+A5u(Pe9ThbB_|hbnuLMDqQ2%n7i=YrIdA9Rq(uWeGqcIl&R%zX%)}pW z!%`8qW~W2^6T_a{5z>}@lLewkr8t4}KWL$xE&i&mfOFpKt88%7Btu>nSAd8h5Iu2@ z8v-U0t^sKBz=1#>@h9hPeYr&#Slzv8ha5tRMYi*C_sPdnLS@v%N2_Y5IcKa%gYpPrXU8r@~nsF#=yIFFO58<)SOozyfC~+xmgGJfd zOMBzZ!xEUNIYo`UJ~k@h3TPg7o9cPu9WBWf#;fR?)y!#}k6It;;NyDal&24OeVa5d z!aY{DLoYbnH8ZHhZgOU665t7@)8|vLB;YiqOcfON8nzs#^AAJ)&WV8JhV^PP2048U zFl)>5BOv>*xVVVfo&~3+8K|j2l(_mUtcS9`#IQIA->{-%*s?eGnirgj%hE@Pvc3;KKzrE~xckw-Vp?14`p?p9|;;X7e zwb{MpblDtgvbGjvF0L}+K*>Axz5r;Bf}y0L+u=QN5n!3Kh#HMadCyzfYMa&>GgDKXJ(bR5x9?H` z0kt4I`+!fRhl)y}>=|I$KLfz97eD}*4@5wMe9tjZ*#+NA(Nfk%i1krJ0lXTOS8*0P znUe-Bu60_H5{mH{;&6g^h<4DP6?ac^r^)5ih3#U+Rv8 z>S*?YJ9w)ynn{i2BHl;7^P&hw0x6}4TkKIwW^;E=i}5z5S*^VZN8^pmlpYT8an+lU z4VD*$l!@4;9w+tb=K9~AY2R$NdF;99@V-Tu9f-w)=BxM1TS9S!1$NO_0`rhdL3)_V zd#!@n(@%t&&@$|zzNsk@ov??|DTJa1=yEv^g7FyPjCmaWUSX{Uc2J-wki zF=I{}ig-pr5Bf}j;}^x~=|Bp%QXHI^Ut8Ak(d>*g?4Ov~$YxN?(ktOUR|9h0+@QXF zIaO5(PS#j}vq=OTsCm>cZL8ba0lN&n5a=0sH*uK^w*2Vqp9I-{g79OFCsozut4>SF znGA{0r4(HO&+P+IdX=O3z1V|KU9!EM z(ve#xEGKeOZ&vRVYe2s~fu!!Ke>_uAe0$hkS7>>HN(y7vu{0<$jbc>T!Ym*~dW|z2YghILeX_;=hnftWzH8C;2 zsOaQ$0M*V-#nz;l%zA~c&p?ki{01i1yQ`d>-IVK93}+J-$XI|Hf>KRivloq^%iQun zIxNo8=OS-=w6}pmp%&JRn^nN#jy^>-zY=T1a~Fv<(7-L~e{`^U@6XiQ4Hii7s)YN1 zK5M6hP2R;sf2LBx%-`zpd89YUJAwB!EM!Tk9iA3=e{j{I#`QKFdM#*Z;Q^}nju~If zwf|sAIGyjvnotb(1d;(wK*H+PRU#@UA*TE^wf$;fJ;>R1)6}i6g_`DeYnIQSKew`q zA|AJ8PKP)|e53m*x@WY1rZhi%#%Yo_6sQNXwdSh%dJRG*x3&N`qi<~?7OsC=^eO69 zdbp`kRqsuTs*{q}_lN{W#`!bI&lN-u&jOv+O}5Xzc=k#F{P?T(Zaz3SlqmZ({YDba zwr;?cS78Ik{@q!%m4kVhO++;sjV9hMDA;raLJ3ZjmYea4oSdAh`W^3O^X{bUEB;Kn zeiHaO!@rZROp7>8#C-!Wh1NGW+XYPI7ZOWK*qXh>Tcxutlxyu6oOP2c*E^o${1V&ZlOzZKFd8ycOIBcDnwXlT6 zo96Px3M2{t6fuyeuZH#Y`JWu1GDW-r1%XpjQ!_J5-*Ox16Ixn=v^8{;^u;Xc8-Gy# zTz=x8Y2k}HK`8_>x72q5sDqzB%PA^0zsH8zF|occc~@mlKa>6w1F^nI{h1B_S2Yge z`KO)yF8G!H$J&36i)EAf^*XVJ*#$Cy8;AM>k99;{m@Wz#w}`aZw_)Ox#odoc^WbX8pkLckfU6Y)nOQSily_x378K2#ck z_@|Q8aLUwN>s@gSQ!Xeg(D~s5hfOj&7q!$@;lS)73N0W1QQ`S$+v1n5N~jFugWa%N z`Aoh1WFfwO|HfH=;Bvd{iH4avP`eu8zT?{|_s2z8SpRp$%HI_-EUf>x>ZAXE9<`hyA(OUJ0e6P!?bvSHV_p`Qur2z{=7Xln0K1q8~(eS;u+&F z>tud~BYcX8CT~t4ph34%00ToCsEDYk!i z&j@DyYZ?F*w{mtn4(wfcG2IpZuihN($bWx-YW80~|Gm_Z#a}x4FE{_+AN{-S=>OAl zifhG117vS{dRjL4=2GZ*nK21IOXNWX;4IY&X#~B@5mC44VMOK^H3py3r0MzD!vc zKvDDQenH7EyZ_n06%r-$vqvfReaJ8J#dFxGPgGrH5-AJ(p2?lylX~xWD`q$7E8?YP zrjGHov$PaQb(yIs9tbBn2AxcOUB;ylj@s7ZKHsNs=W^0}EyK2fFIMR=`hf@6p3JaYaB;oxkR!Y3ot2Durn-i}m)w_3_zkvCuRI^xygfxc_ zotRbK`98UDH4}3@0YsVhJln9QWA}|u#iasR^XLMmNJ%#MV8!`XtF-Ok&C2Dzc2fi50AOspke!)4r> z?w@!P%VWae@R{=bZdf(Nc%f_lNTy5I^I}|&yl15$97O99@{Sa6nL_CmBmj#cEK0wy zo@MVgyc=htCAfbm3d2hvzOp{?ti!9B(`#&6t80B5i=GVLZTcuH361}BKBLhxNIT*z ziPNj}mC1G78dqCOzHVs*$D4}{PG~`3gCAqfxqs3V%r%jMu(f4Y{eU;*?5H!<{dQne z{PF4B#MkA+I$W>PcD}G7*ybzlxC*naK`vki1j8H4jKR4B^y%Jh3sS7MdL$6blgg0+h-3^8kGB|nNs(=0U zx7O8o!S{O++>ez6&VR(Fk9-jsKERJTTqiSyWR0qR+iaN}Mu{X)f4O6NQ`>M`MdXn?5QfTu= z)Z~q?%e>?9my43BYPoum!(U{FG8*7<6&PFFK*@=h9Ovn3!_RTK3I<0m7c*962E^zR zlV;{n4%Uk2h7497sSx_5jKT5@gL$M2V4t!>-)FAsD7VinSUpOrL9yK#X?;XtYD)icF{qg+!X; zh0m6BzvK2B&n?v?P1^zv-(~H*O38hBP|^2P9=9fMWHx7nXVF*nNXDD1G}d3s+-|IR zDkGfPRe~Z*jWC}5j?_el{j7CYBSlthqw+Q7hIfg3kLd3=e6Y@{81T7~d{@9gNo#N` zU#6RJRz-P+#9$LIl<1vKZ%THa2i=)C-V!HvquqnH# z-Uq{UGUa#M-!2+lk%jPW+@VR0$+5X}c?w3Wj)N6~Cxh*n8i-qCvKW*Qm{Zp!eF$As zN!%2Z;?a-T`HDFeeYm)Q>FU9yFu^Z5@NGtYedMY>zgK+elw`z1w|zOE{)mWl#P4!+ zLQRe)Z)a*skYGghi-o5pvUB>Up9w-Oy!9r!b9T3`IFY<0(EuHm)4h&ko}x>*wX0Bj zwj5JjH1g5$LqYInmfrc?Y)R?(_d9#Y-Gx4=^+7IfXE^kxz+=VW)&UIY?2Os zr!R<9x)I>ikpr{!9=upz%W15j$}GYvC}%V3rtb z)`8lEf1)RcAEH8&$(wt`c$K)z1>H4C5=oeyw|hyRD3=#}Mws{Ta&oT~j zirRyXHnjwyK22j{S{ZI8ye6T;-Ny~RruAa6U=}LF1VUzI?94W+4`vG0YbdBn4=3q< z_4`F7ss-~X71r48-A6(}ne7-ORm>r@j!8((=+T#lB|p+!7FV2`wj#wBNSLR{7uOrT zFsl5GSh=e()D=y9Q|EaS{)zw-rxQ>KU};z%AK!l2$?cE7nuG6#+dKqUBLBi!v&wm> zbjDlp!h7D38voNmutDIBO=09v^*SRJC3%-Uk5DVS1BGP0FaBe_|d z6|2w4Z|l|`&~mRoH;#xWMDOo=U^q4%_uidCm+pxv%?_S`CO@9MXBq&kZcJRhSdl-7 zG?ejB+Hl&M&@|`~LQu-cQo)2)eWrs{|5>Q9*|A7K;miRug_- zkn|r7WF{rmd8}zjh%JSq(H^L-aAI1oRHn)hej#Z#(LOG)xwMYad}?OwIKxo{NkdMt z%IlNMs;Jp>Xup29Jz*3_A$d%@5YuiHA+t1grnZk+Z90OMF8}pDx2WYN+)}zAkv!-+ zccTATxeI-)J9%ci%A+i8>Uzsns!km$-628f=M(R{#j|lsyKWcZ3a^sTE7NY}YxDqO zjg{YJ8tkA<8x18jHZ}{`$k}>^E4fUIERNmpeV_Tc@Tb zsL%UaI|K_5_R&eEUq6z+8xo8Sp4a2$u6lbI2FeNHPns(mm}qYF3kyCECtHct4{zqZ|JtzHYZqx9y$V6AgaLrwxacEu+poJHA2}%*llVkOO(v z*Xl)rfuko;gAZa=zu#fz?{{0|cark#WTVR$z2ez# z#W8x6UfocXf6?IJ6uFbSA!ZhVbU>iRALaA84yTiC#|;%1uVgV`dlauxc~XtzT|)!o8SbRbG3@ z`r6g0)3$g|lM84Pa(zjtqq@VErIYWx>%r4L8Hu{YW&D0|CX}!yD95!ny6oMfW4KaE zrlVmdV#l`;wRMrg4biOd-M4Ao9;w{@wNzzrMT?%UZvAy>?;%!UX&xbx>Hxp|N0Tz? zll0}-QOB9S) zIlY_*4Q^&A_Z-O3CuLDJ;s^uyFMH6MemwP|K`fHFDdG8H?lfd|K!FLuI)`V2ub8A4 z_4WssrE$Owof?fKH*aA#%g)J}YPhdcyp^LqiZ>MI7=vxhy*mPX-Dv(qVsYTg zUP)#MIr#<*VePl+avBeHsxh~J-2g`}FjsRMPbB4F<3(qFrW$(33}_U7w>zZnW62_q zW$QL8lrn8E^tP%cdyD7Wld0#6nHzY{80*Se-Zu5fyaKlNGNK{gynUzV=V;2#^HtPI6ej-4()yQ9mwlA$_ZlE3jx zRGMSoUgoH&!(`(7(=ne{n^q%>(TSsnk!P(_VJiFkS=842n>EjZ3~ZMink$TS;5)P4Bfqz^-i5tF8evEn@E zJ)QcdmNxu^f+*82%^D~2HXHzDLzV@DQBEJG zt=5xBr`5;~8`mPUrJ}n#sxk@U;_{rz^cK!7u zPoI=Tzx#vDKhp3EZ}D3Kvc1F7d$^mwC#yP`42|fi?caeG`U)h^CLf92h4KxKy8sa6_k>vAB@jd zR+QD7*!UuH?I`}yio(>_j!3+b1ii)6&cr>!X<}OMry1o2dO@~>p6uLCRV{=0ib&r3 z9;$9dNQ&6&PN9lfO_~{thSTeSS`37{yvUUVH6PBFC(;Gh-Me>3Od38*4i&Z%NFdlCv+YAd-yKEqL1;aYUdiEr zY9vqAB&Fw$$~TRgxtx)jocm9eV&bCNGwSt*>|L!cHNNER?y$|1&vVL&EwDCIclN?D zsJR)6Fx_3teVR&o1g)Xe^a!TTEV!PvJS#&DZs=fzMT0++6AqZ&GtL1T{qBU~OjHrE zL$)NOs@rZZ7MApq@DJW^r=`-?%P>F+D6`6CcDz_*bGA_FFiL2e(t34QyeC>^UZMWX zimkjTOCDv{fquv<*4#E{>Y@KS=g0OI8|UnqyRl+Sxejj=-WTeJzap7H)4(rr8s_rV)!m3}$)&n$cM zla2L^i-Fztx`aoaM2X|RGrzEwkaPVR*#%ML{Y4ZDG$`PftP%nn*-k&AN(%T{4XNGS z#a*s<&)(_ZmMLZ1D|AY2s(id@HWd{vMB7C9az1d&Z{y^$vnz}9yv#S~ZC%dd+*<#< z^nn@2M*%yuCs1IiZWrmVMTXawrKHw2dFG<=?5FPti=Uqt7Pyjp%_bu+U(Ix_iMsi9q$m8AC1G z-?_n3%ER8X(0X4W+85#HlJ?H~nE3j`S~qIR@4)otu5fsU&(M7m0*pGZ%PbR8?4r!@ z@vihkJ>MT)Bw7BvAN|<2>caYjkB!oGfzM-U8JU{UrVWI9G}*4Fm1+883mzl?dN-SjsUy^1ACM)$jNL6wkrXJuuk6CFo8Tfb)J)k9S9rpoCF zQK$TKPH!-K@BWne#ra#{^`YwNKO{CB$DkN3KCJLmLt^X5P&Wvhm{R+GDHiEh2`ev>XaI!jtu}EyPAXF@$m4v7I)CV z<-on-?}`aCGWI+Q{h5$wBDydksaGY$Kf@TD;2WzC$GetNo8R7Ah^@_jS?--A>hl9) zSnq^HB7r8EM@s)3?uEVj6?6Q|x-z;nIkFZ$!{Nh{FH zL~Ux5f)Hd1M`f=Wrrbc7-6SKU&$9ofre9LE3?r%wche!y>9+{*?u^oBgAlq?r8s4p zC4%btMYU2?xk^&D_%5`_BKD{Cs7Q+7)?}L^$4V!GuK1a@z+?29CJ|9QFdC~SL1OWa z>XNl(6t}UjPU;G9gcar?)k8%~>+F-*+}!M|*lZ5PThfR2r}D(o)VOtfot+#eu^Y0G zBo=_eVNci6Y&xZulzU<*EqpYWVnN~V%l%ya5VasDIOK&HF6pgXx57*&_e1-ECJ@63 zps9NJy)3nWEDMAX99bnDMo9`Q;u| z&y49k8LS#68Ws&oOh&H`TP*jdc5`L&aC3t~V<>sL)rQlEKABa9=v=hQbb>N6GJv@O z=Od>pbi!}Y6q&ZSt>H0k=e1Zw;?{IjNRNfhsWAYjhICRt9gIZ*Cp1{M%N#)S(}@Dy zrvaeabzlL-I;8}J&1S&Fk%?GXvVELPK8fka-$ysD4!I+(Bo0M(hx1~tu53?<`0nlx zgVK*V3nC6TcQHAK0s-XH=-tM~uiH8wzkG#+e4T?#W`FYTklHRWauu+%1X6_)>nZ;B zx&`Hi>6JprPlH>jD1TbUJA>k=gEJlks{C*$QaYv+b+ zSXv6d{RL3U%m|Uevysxa^Aiz=MpJN3O;0Q1>nvH@W+AGrSxErtbS*BFI%#QvwDc7F zYN|t$gpHQ;Epv82JG&+N)gbWs(FSLy<`qD(>-ej5r-Z}<8y1%HdmG~dMwfvzw%Ch9 zup^JPFP7(Lr!ek^4<8b0f;=^shg%7-)UwWc{g1U~*=7e}ZTt6j%WKe@^~gK&jg{M9 zYPTpjpqb4T`{={bfT)lbnZy-imT-ll)iWMr7KM^I&Juz+&qoz2Rj?pt|3gR7V&#=HwZ@X(TN8W0 zaTZ@_E6@j)`Uy@77V%b5V$T(|zs=Qo5}3zKuG?Rsx5R8q7z?Wi(aFD^#m%iG&~I^@ z=&623XE>3Vs3?d`vySz_gB*Vh5(d(*wvwlaxrDWeQk|KU72@`!<_y$ip$H&u&Hvbsk5UHOP_h$eeu~G9k(gRWt z1di$zMrq6KmH8SMKl1n#b{{zJDo7dz15z~AH8_?UlGHO3F6`CJYfV;`)P}WowXTaY zOW?3!eu70eCe0@AZKoh?KCF*gpPIe(0nrA4JkOA=@5h~y3T;(q@$I>G4dzu#0abd8 z$8uy9SKK?ThchF7#55?!-?;0uzj8Qk>%DvK%RY7&izVYPsD`}7IRe0q$9j-=Mr`Qg zqia=LIDWt$-CG~!A@FrTmbahT>HA1Mi6(&7r{PQl;DSbXfBaB0m89PGIsjS=JFD?J zJCw`q`5hK7%s`q_21or20RS2}=%`RJnd8gcSFDhNa?^{w{U#}hZmGMjokM}W;!^dR z!HxdavL37c^QjL@;|q3>A~)hgkhb7kk_W36gAM; z*a^TL;0cGkuuo48cLA6ZaQOBE_&AIiRy~rh%tML*Jl-xE?Er^7_VB2g*N09ux+_~J zDa?E!hli2bOgGh53WIs9RZfrgMk(M?yDLMi&b&@jf{O&O4nPTcN&=!wDdV=TIBtA(B?;{v*&HKJZo;L1Y<@j`ri4gNsaq&qKsDtwtl=h zHsrUa5lM4jaznnCHQ&X8l>FKM;DR&344G~9zj(X?;Gg-NrW)iE7$nXP7Ps5a#Q~$5 z#I0G_nyjCnpO2;D(=f60nLpfJA=ECJM+6@4^ErHj|0ppBRE5icK?#6bVCnn734!^} zaNtZUnJQRZdu*fu2Y@5k5l9}p)By^#gMugtz>yuDol>dhQ^KLyPC6!*!V_U;o3||J z39+<$il?TU5vu1c=|OWaPg%lzl$pN!x>4bos$r2UtL7ISX$j$*V0SJdfsM*<23Ts! zf9nT0kOp+kf989ekg$kEUd&%gqWHwXsUZ|%W~B*hO!kS*vTZMULvFvNZ`lho1e)%V zW;Ow12XIN>4@$hoaXSXn573}Q{YE!Sz=bK^IqL|BCZK*$n!VPcY|YPI62D`BYH$(y zVs}Y050nfJK1b|EuVLbIr@jS<%iDQovO4cZpPsinYSf9))@8%f`1fWbGtP zuH&d(*kpD_W%19)nq)}gQo!qz*l#&ITwt$j1nqC8rsT@Q{BBV5_Y1y8 zUyL71%}6)`IE8IgbTY-rHf@8OF^eOsrb$~bnW6pF!qn2VMrxYFgCC!g1- z+tl1_ZEdaC3FPs`KUR;Q8~MNS&t{=NZOVsZ2L%_J)mDFapjaQuWgfjZ+0Bcjtkk9@!i1a*g}@ zxSeL$H~*4xxVQ7{jA8R~fBcf*ZI3S%pAZEqZN+{RxQdBQZ}-bLuY^Q_Ox50;p%JFu zBa57-3Bm}LL|LJ{1Lp*dC4~}cT^U;OgB?EwZ0I$$+P`d*YI|pvyv29-#N2JaFu^jN zu|T!8$+!BRKs{dF5Ej;CR_ht#()|0y;MpjVWIF9iZ62bm#059wLMwXu<*_PyOz`9h zdXv@}Z+i+0qHybv&d@mrJiM7ishM_v#v~%F4?6@DBImxC8NjpW9VJfrYeXF*6}DKI zwUIKi;=&#weK{{!r2nuqfcL@Y&8_|27&jshS~lq!dnh;53Ip|^;Z1q`%X07@6+wYAbAGEj*Jw7?}=-Q$Z0b(k53s^vm8Hv zu=w!%wq=Jn=CZQ)Js72M~@SaT1^vQ)%#$Vv(0W zT*9;~y529<3L$3y9yZi*b+UfhsBwow!Zbh?i&yIJJu$fQX*WYcW7|m_OgH*Ix5b@z zDgWTc<~?ojQ_V&i@*TnX9};V83zIky?Ee^)igWh62_V<)FMNe$^khk$y65DkVKlkj z2{t@y8y4VGU-9!jR#Yvv%bmX^B>3WZC=1-=>wiictPsdlIJeoJ@t}=ZL{6G<*iGXV z&RrVOA49FYs3mNd%YR>Kqw5rOwih11Z>sXvPHo}CW~+~OfPmK<7L^6k-fs=_zF$IL zP8p%taXv`?Jz028Npkt%Y-2q@bpWySSm}PTL=hq$+wn(|EP2`dSbP{hE84)>riexM zF?3YD00oKM?!BQ=AfLg7sqb1cYD1SnBm)YuVE^j4{29jrbj5mXE5|wIBp@R^Zt?d!8RT*4oru1(md7kJ2o_(PhS55p+T)IeC$Ge$i0J~?J z(&^FaWrWB6%Y%u{dxT@9u)vVd3@$SW<-zU@(wp*y)7v>I`Mw^d=i z;A6}XJ1b(_(bh|{P@ps=Vfp0~n1MD+cabJPn&=E_5AR1@vL3V*bNHUitl8ylI|4jH z#OfS#E^8LQ@!=}6z4NyuZ}UXw?%D6Bg{5r;wMDMERJ7S`ZL5zpm)D7^5kcw9`=O_ zRhO}+Fz#h{-S7R@vL>w%bufng;o;x78TH2W2M2)cVie^HG)&CfC8BN*d}cr88G5r% z-4x)o+Ul=J)V!1wZ~9%td~E7d`ykbKKJSm4hk;g{tHSm#CNn~fDGod_*H>$K8&se9 zoWJ?}f>nnwE{2Ax+U(o9au}0p?9PvyrbWs?iYKDbcoB1D7R28}72w`rGJRTBiwV%Q z_n%Hnw;$It-PjoAYd1LbtR*Ad2%lGYzUGllTw@BhwZ`YZvkDRAfo+fJ!aq(c{aw{SYi%)@kug#XOLFZ$X5Mm= zkeuwnY0(Gn)zDVZvKsBJHoF?fHr-@@HbKbK`7qdoT+nK!<8AdyY)ZS&=LhX3N5v_} zm&1q%OfCITZmCc89pZydp%f098X8~LkK8Pc%!Kl{^Xo@T8{5XlxqyvVV?#cbooTwF za@Oi6bAzU8xHE9P%T>1EG$1HxWiK>F*tlChI?^x8Nq&D%K%0>iwoU@6RU$B**<>Pb>)QmG<}7R|$+FMGiJC*iwAx zCbDN2`)v$vo_9siRvBGPFpT(!NLYSW%a0-G0sH012_y2ndF}i^-kE)wtg*r2YN5J? z+-|9j7B(NshnsWF=we{OpD? z12Kg9jxroaG%I9-(_G(Rd)+*A(vnKI0y_9?=U;ox3ox;;lp>l#Mo&bfBF0M_HdA#r zExnt{-&xviCWzb6NMaw&|K|4C&Be+0Nw;_Y@wC7QJcGezsfWrpOzftgGp09rbW@Or zZnw@&eM3DYJb+eqFJyXygix%*cJimT<188C?jhdV0$Fau_sOp(W6HNmv{2Agx{ex~ z*b+aRll0MT5%ZJ!@j0#Y%`csIUx-v5ZV$V6{C;k4G(&L7hnQhkDKKXeaPZws(5zAI zxV--TKOI9~Vvs_jmk0a>P^Og-xeEq6*NclPDid~szO^~tDijsZiBkf0a~aXVxHqGvE5=cFq2dz!GTA;B5Zkf(Sai6 z*luFaZQY^JTA`q(&@I&td;k7M8L^ftP?($;=g8ftK3IO$B%-@98hlZ&1NJ{m#5I&s z;O%rRcgsLh_s^l~L%V?;-<^4~b6md{m`{IH1&}|YlG&(k4MSPrwXTbvZpg3ZU2ik# zr)?grX({yuMn;mxb@e+>Z`9gxiIVQ0m6cHFkNTcOuC8iprm?DcQD8DFnr!;U=11|b z%EDDlYkp?e^B~)~Mj)ha3dd~Re};bCbXUm;7Q1x~%czdmg z{|IN!)ehJV)tm2w-1{l(23@0IufTI5p1L?Zd?syzO1h11`!BZcjYI1kn5w;X3v!Af zldo%5QUZ@#MJjb?Iyg+)zs(YNr6(i8M!(1CUhgSaxzOJWl)gQPdF1_|bENkf^XKQ? zPTs3EYAgen(&~CBFt8U-dr126NS|*4-U96CVA5TXy8eRHX!n2y(lT8wR{+9HL~Q3O zS6i%@q3U%vM?WH}hYljPZ+e{0{1!(J4#dW;_9YZf6sC!?wPv8)^|wTxkuYQWvzS@0 zBR3Ex75EgFYd4>MZyek7(V=|eP<<*pZ`^co16%5Aw9b@#nypS{v+Hig1n<`dm+dK? zng|Gq0{&=GMfN!SwM4b{R8>zmy}#>6I?t)to*b#2Vkl~HgQV={b@dp`=+~<5Y74Po z>8o(pibSzDgjbd!WFxG-de{%3EE2lTHT3%dzUsonX8 zSZp>+e=M|__S06m$z3r$zp42(26wWM6fUqG8ynl9Z#WC^PPohNL-mq&!;^+_eOT#E zDE_ury^FS}#UBtF!BPZe3XO|&Xm=)2%!k<%$$qT=G4kb&7Z!}pfIDc#Wp@$Yj0#dumc&9w_24&)u&qc z(oBBNvrX(TlD-p}`IOsyhaF`0B6aIEXZz7@wvG<%oLFlA3Dh60NUto>s5{r1LU$X* zZFHXP{hT}uJV&1DlRk7VeJR&;l1@M?!stS_X*1VY_t{mY;0@D>sX{s>_x2R$_8h;* z**EW47PU!cq|46(Q{T(SC#+fJ{|P|%&N_NNJr>MUu4a9^Jk;JnRilV^hn9cZGZ*&E z_UcuE1Jh^owQ=vmg!y)5BPeL=Pibz-gT#A1^C?nwR1b1dXmAau;I_Jo3rSq*OJJQU zjQZGTf0di)wW;uZ64ROgMoqtek7vGasgjwPGTEJ;L~ME?V0*QGWELtCCaKiO+0(2@U_^-hgW16b+s&yMB`Mh1qlcjEOeC zZdr`TKdZ1IJ-$g45vta&v2(UNu}MNJ+-lh$+)=-u9#k^*$oXr#w9nd@t@*R43D2($ z017UAhswi^|1tpFomC;~xEn+)4X)E`+{jakk=&eW2Nn*IgN~{qLzbJYG#Gh}U*YEZ zCLG{J^2=6C%4?Sab=;O+99mBuvQ_9>zW<0WgH*|H$yNCHn|gBHKaX+-iXOWBW?5<( zF+9Bs9?k-Mg>-Xc*6vr$(_P`hf<3Am7Hsz5AjT)AbGYzl5n&$uFFBmXPbb_?xPV!T z3%NucErz$C8rjX-XAu5gH*W<ntBK&L5&!52*JX#xya_(<;1*_oI zW|V_f3Zvh$&+`@QMSM%t;2Pbzw~!KI=Rp(Ge%+YqQ&zW}FOnVYtn!NEaHeP^ETu-D z3`|OraV(6#H;x~dlnJL5e7&VOF6OrPz+>WG0V~sT%KXOY#|vPZ;hexFs$7adEv(p# zhXqS~y;rLzRK@b9~!-4Jw=WqMu#<;K}cHX*0zEpu7Ev|K5xAM37mQ~T}iVr z!IYNIu_L+%Qq|wWq&dU)Ul*EhHvX z#20M^m={z{r}XeZdA6{UK^%K0^z@Fd@TjHoyp+PNz|t6b2*k%+!p0#sL1G1XW>jw| zC==Sb;+pj_%~hSGtVpo0Pq{ape`)Xb{PcqJLtyNGwkOTT)Yuk)ssP!P0k{6#-2D4s z9bP@x30=L#C$-3!1LZFJSSmhi)M5u-S&{ZW&@O%wIRrVE zAN5qq!j?^@_C96*f3AHwf@OC*d9(qzR2(7@`C^q(b@juZzL_(Wp0;~4)2Vd1GEF); zIcXSF@d803(cT8#5DOVU&`qago4TrPgw2b^cEZvnG&k(no}+)h<5iSJ(Es1>?I*vi zd=g6|mzcLPK1m#H=VjBI5?!%^uiuypv&$U~iosQ0-H){tumQCc@3H~y=)}Ytua7}$ zu0+-*r-D^E)0H~IpQfwrjX=&FBcf+Y0QNrwGkRAes+q z%^PI8tA{UyF8#C(J}7$mkFt0CbL5CA8oAppRy9S;`DYlg0gPJ0N_#Kri!%gUo;qoV z`13`L%cqvBOWiH6ajcIt4C-kw&*i?rT&+JL6+~TicEvY(dtteh@B%clxUE{e=+3v-JFR{i#%8Wa7e(I$K$OCzyLBRAyRwB_~@)Pg2{T z`W+> zXNs4OnH`RA8_HDLEOU(zj1@7Eq_k61fSmGOd{JOCfZrCU)XVa3q+lYGzr7Cda9R6M zxBOjpGs~Vj^}d)lc+Qra1AsRa3+m!(gD*s{N_s0|yu+<;W>@|?)V&-;WAC`i5 ze!8_`%KxCN-+w*zx-^{6vxJ0iegrY!Z;*l-k)D0jQa;{NqI^oP_{-&rNZu4CDnPpcn!#FjN^-JOkejFr>=iRPsK8uvXbM;kK zDCCk`mbL2JP!O%0{>_aK9)dT7`G*S z>Qo{0%y-tkd9!+~;IVo_Zp<*V*KxSOz7t}a z=*k^P=gop%=X!R%nqNk97laCbhuqVOi)s}07E5d9yv##{se3B;W$xaJCTyHEksp~s>R5siOrAVUR_Q{`FIn3 zR*nXh%kEG9*y!rSiBZ-KOqXCb3Xttn0NNt;SmXzHP$M_}#Ynlww$gt#$56GLTe8iAb`#q(54xg0G7Eu)7#% zOs5{U46^?&xVMmsm*rz4sc=i+rbUI3IYP)0jN4|LRNUF28>LGMukk?2cyxfU3MRV?oNKPQJ;T zo)t?Odjs^%{MxyA?||09tk#14fN&tfF!lO z|8CrW$}3%t!_PAlt!9M{qBGBjzdvV#%kwi8d&+7qPZ+m+!*#|iCY^i#6d2l8FM>f0 z3*H`b=?wIrLtKk#hU%sML_G)KzARH|XDsFYy@TCNLl|~rK!h_lmjCY{lT*|U_iz{${hbUVTEMdMWb48*FyAi`c&~q8(fCpzrSb|L@=sz z%#xjb2q-;+EsZ-*9c_(TKC`hYnJDIPKi*LPxn}?wlMU`*94)0nK$oH}y(0&bSmVJ{ zKHc0mjKo&Myl!7!Y3@kGZ9q9#knI$u@!UIeVIEv~(V?;s{t?@u;Xx9@z#H`+bO!)E zElg}W2Iy!#I30ov$Oea76{s>~Nj7j8b?HH$sBE}brG4y6ZC57vPg&rVy-!OtD}SR- z|FCsKC)W{8l@nr6ohpwsMs4zrb|X8VVP3YM%|xLp7z8m8rz{;rt06YS zX72NI07GU!2LFFHo(=u;4=|G-LcnCIS!!h}SQxX)QAta#;+gWkT%5aZ0J)MabdyFP zgQQ+wmfEL^SbJ#L&LDx%s3BR+Ln~w@!||s4T?Tq46L5Ur(M)xOAKT?9WZQD?_xU0q zTgdO&m|5c^S3q2erqq8NO@%_bT<#o}7JBbYwOY@u$W~CW^7K^i(zg6`{WF|ppm(O& z%QHS8VP))8#SG*~!vZ-j8||KNEo;2=91ztijTq%1GE{L&d?9G@tx=`aXe8ZSZOwNF zfQ@vIFld(7{0`#xkLpJE!BbkE8io6(2`H4mS%(~i(&2w&Em(6@?UHGSkE>2E5!3@`Sr)pf; z-#ce=;tD|sBtiJ(1LueU^25UzY!*+qG}0829>Foosy~eS9M+k?@5hSt8fdagxmD z5}CV+kses2nOgcdqIPdBz90O+^TsaLV^a?gNCL0PwD7v98F|tL4%xWb%E?G+MF*{I z$Ab5{0K9~rKP13Q3xBMLcsnQ+IjmQh``!zUS09e%_cdPxl;M&91yy=`#Dy z^5P=IduGLu*je+L@03$0Z2o$a&N1bLtG)1C?4aq0Ehq}Q!WtD>DR9b?vbm{Nkk|pz zo#eP{DIE28?CH2%JlMc^0XQ6~Q%H#OI(8yujLg~0^>_Yb$aGQP+ns4P{9E7gF)fbq z)+tp1WWbVN^fTPi9--NQkgB1+Z}cn`d3LC8?5oncHm~AY984|lYkw6bTkw{#UFTM@ zUWJoX`@!DN(q=#=RT`KoZgAb;f3vG&^8aqJK5mwEyU;XgM>aokB`kFz8Pv~ z7EexVE}0{+vl#!gg7v+zmb^l^%L)RElNmfU0erLKR*oQ#!=iOr705_mtdTE^^DDYJX=>EU|Q!Ka`N&z(?_BOVvM
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.database

    +"""
    +Database
    +--------
    +The `Database` module provides classes for managing the context storage of a dialog system.
    +The module can be used to store information such as the current state of the conversation
    +and other data. This module includes the intermediate class (:py:class:`.DBContextStorage`) is a class
    +that developers can inherit from in order to create their own context storage solutions.
    +This class implements the basic functionality and can be extended to add additional features as needed.
    +"""
    +import asyncio
    +import importlib
    +import threading
    +from functools import wraps
    +from abc import ABC, abstractmethod
    +from typing import Callable, Hashable, Optional
    +
    +from .protocol import PROTOCOLS
    +from ..script import Context
    +
    +
    +
    +[docs] +class DBContextStorage(ABC): + r""" + An abstract interface for `dff` DB context storages. + It includes the most essential methods of the python `dict` class. + Can not be instantiated. + + :param path: Parameter `path` should be set with the URI of the database. + It includes a prefix and the required connection credentials. + Example: postgresql+asyncpg://user:password@host:port/database + In the case of classes that save data to hard drive instead of external databases + you need to specify the location of the file, like you do in sqlite. + Keep in mind that in Windows you will have to use double backslashes '\\' + instead of forward slashes '/' when defining the file path. + + """ + + def __init__(self, path: str): + _, _, file_path = path.partition("://") + self.full_path = path + """Full path to access the context storage, as it was provided by user.""" + self.path = file_path + """`full_path` without a prefix defining db used""" + self._lock = threading.Lock() + """Threading for methods that require single thread access.""" + + def __getitem__(self, key: Hashable) -> Context: + """ + Synchronous method for accessing stored Context. + + :param key: Hashable key used to store Context instance. + :return: The stored context, associated with the given key. + """ + return asyncio.run(self.get_item_async(key)) + +
    +[docs] + @abstractmethod + async def get_item_async(self, key: Hashable) -> Context: + """ + Asynchronous method for accessing stored Context. + + :param key: Hashable key used to store Context instance. + :return: The stored context, associated with the given key. + """ + raise NotImplementedError
    + + + def __setitem__(self, key: Hashable, value: Context): + """ + Synchronous method for storing Context. + + :param key: Hashable key used to store Context instance. + :param value: Context to store. + """ + return asyncio.run(self.set_item_async(key, value)) + +
    +[docs] + @abstractmethod + async def set_item_async(self, key: Hashable, value: Context): + """ + Asynchronous method for storing Context. + + :param key: Hashable key used to store Context instance. + :param value: Context to store. + """ + raise NotImplementedError
    + + + def __delitem__(self, key: Hashable): + """ + Synchronous method for removing stored Context. + + :param key: Hashable key used to identify Context instance for deletion. + """ + return asyncio.run(self.del_item_async(key)) + +
    +[docs] + @abstractmethod + async def del_item_async(self, key: Hashable): + """ + Asynchronous method for removing stored Context. + + :param key: Hashable key used to identify Context instance for deletion. + """ + raise NotImplementedError
    + + + def __contains__(self, key: Hashable) -> bool: + """ + Synchronous method for finding whether any Context is stored with given key. + + :param key: Hashable key used to check if Context instance is stored. + :return: True if there is Context accessible by given key, False otherwise. + """ + return asyncio.run(self.contains_async(key)) + +
    +[docs] + @abstractmethod + async def contains_async(self, key: Hashable) -> bool: + """ + Asynchronous method for finding whether any Context is stored with given key. + + :param key: Hashable key used to check if Context instance is stored. + :return: True if there is Context accessible by given key, False otherwise. + """ + raise NotImplementedError
    + + + def __len__(self) -> int: + """ + Synchronous method for retrieving number of stored Contexts. + + :return: The number of stored Contexts. + """ + return asyncio.run(self.len_async()) + +
    +[docs] + @abstractmethod + async def len_async(self) -> int: + """ + Asynchronous method for retrieving number of stored Contexts. + + :return: The number of stored Contexts. + """ + raise NotImplementedError
    + + +
    +[docs] + def get(self, key: Hashable, default: Optional[Context] = None) -> Context: + """ + Synchronous method for accessing stored Context, returning default if no Context is stored with the given key. + + :param key: Hashable key used to store Context instance. + :param default: Optional default value to be returned if no Context is found. + :return: The stored context, associated with the given key or default value. + """ + return asyncio.run(self.get_async(key, default))
    + + +
    +[docs] + async def get_async(self, key: Hashable, default: Optional[Context] = None) -> Context: + """ + Asynchronous method for accessing stored Context, returning default if no Context is stored with the given key. + + :param key: Hashable key used to store Context instance. + :param default: Optional default value to be returned if no Context is found. + :return: The stored context, associated with the given key or default value. + """ + try: + return await self.get_item_async(str(key)) + except KeyError: + return default
    + + +
    +[docs] + def clear(self): + """ + Synchronous method for clearing context storage, removing all the stored Contexts. + """ + return asyncio.run(self.clear_async())
    + + +
    +[docs] + @abstractmethod + async def clear_async(self): + """ + Asynchronous method for clearing context storage, removing all the stored Contexts. + """ + raise NotImplementedError
    +
    + + + +
    +[docs] +def threadsafe_method(func: Callable): + """ + A decorator that makes sure methods of an object instance are threadsafe. + """ + + @wraps(func) + def _synchronized(self, *args, **kwargs): + with self._lock: + return func(self, *args, **kwargs) + + return _synchronized
    + + + +
    +[docs] +def context_storage_factory(path: str, **kwargs) -> DBContextStorage: + """ + Use context_storage_factory to lazy import context storage types and instantiate them. + The function takes a database connection URI or its equivalent. It should be prefixed with database name, + followed by the symbol triplet '://'. + + Then, you should list the connection parameters like this: user:password@host:port/database + The whole URI will then look like this: + + - shelve://path_to_the_file/file_name + - json://path_to_the_file/file_name + - pickle://path_to_the_file/file_name + - sqlite+aiosqlite://path_to_the_file/file_name + - redis://:pass@localhost:6378/0 + - mongodb://admin:pass@localhost:27016/admin + - mysql+asyncmy://root:pass@localhost:3306/test + - postgresql+asyncpg://postgres:pass@localhost:5430/test + - grpc://localhost:2134/local + - grpcs://localhost:2134/local + + For context storages that write to local files, the function expects a file path instead of connection params: + json://file.json + When using sqlite backend your prefix should contain three slashes if you use Windows, or four in other cases: + sqlite:////file.db + If you want to use additional parameters in class constructors, you can pass them to this function as kwargs. + + :param path: Path to the file. + """ + prefix, _, _ = path.partition("://") + if "sql" in prefix: + prefix = prefix.split("+")[0] # this takes care of alternative sql drivers + assert ( + prefix in PROTOCOLS + ), f""" + URI path should be prefixed with one of the following:\n + {", ".join(PROTOCOLS.keys())}.\n + For more information, see the function doc:\n{context_storage_factory.__doc__} + """ + _class, module = PROTOCOLS[prefix]["class"], PROTOCOLS[prefix]["module"] + target_class = getattr(importlib.import_module(f".{module}", package="dff.context_storages"), _class) + return target_class(path, **kwargs)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/json.html b/_modules/dff/context_storages/json.html new file mode 100644 index 0000000000..e97f6c4f46 --- /dev/null +++ b/_modules/dff/context_storages/json.html @@ -0,0 +1,697 @@ + + + + + + + + + + dff.context_storages.json — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.json

    +"""
    +JSON
    +----
    +The JSON module provides a json-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data in a JSON. It allows the DFF to easily
    +store and retrieve context data.
    +"""
    +import asyncio
    +from typing import Hashable
    +
    +try:
    +    import aiofiles
    +    import aiofiles.os
    +
    +    json_available = True
    +except ImportError:
    +    json_available = False
    +
    +from pydantic import BaseModel, model_validator
    +
    +from .database import DBContextStorage, threadsafe_method
    +from dff.script import Context
    +
    +
    +
    +[docs] +class SerializableStorage(BaseModel, extra="allow"): +
    +[docs] + @model_validator(mode="before") + @classmethod + def validate_any(cls, vals): + for key, value in vals.items(): + vals[key] = Context.cast(value) + return vals
    +
    + + + +
    +[docs] +class JSONContextStorage(DBContextStorage): + """ + Implements :py:class:`.DBContextStorage` with `json` as the storage format. + + :param path: Target file URI. Example: `json://file.json`. + """ + + def __init__(self, path: str): + DBContextStorage.__init__(self, path) + asyncio.run(self._load()) + +
    +[docs] + @threadsafe_method + async def len_async(self) -> int: + return len(self.storage.model_extra)
    + + +
    +[docs] + @threadsafe_method + async def set_item_async(self, key: Hashable, value: Context): + self.storage.model_extra.__setitem__(str(key), value) + await self._save()
    + + +
    +[docs] + @threadsafe_method + async def get_item_async(self, key: Hashable) -> Context: + await self._load() + return Context.cast(self.storage.model_extra.__getitem__(str(key)))
    + + +
    +[docs] + @threadsafe_method + async def del_item_async(self, key: Hashable): + self.storage.model_extra.__delitem__(str(key)) + await self._save()
    + + +
    +[docs] + @threadsafe_method + async def contains_async(self, key: Hashable) -> bool: + await self._load() + return self.storage.model_extra.__contains__(str(key))
    + + +
    +[docs] + @threadsafe_method + async def clear_async(self): + self.storage.model_extra.clear() + await self._save()
    + + +
    +[docs] + async def _save(self): + async with aiofiles.open(self.path, "w+", encoding="utf-8") as file_stream: + await file_stream.write(self.storage.model_dump_json())
    + + +
    +[docs] + async def _load(self): + if not await aiofiles.os.path.isfile(self.path) or (await aiofiles.os.stat(self.path)).st_size == 0: + self.storage = SerializableStorage() + await self._save() + else: + async with aiofiles.open(self.path, "r", encoding="utf-8") as file_stream: + self.storage = SerializableStorage.model_validate_json(await file_stream.read())
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/mongo.html b/_modules/dff/context_storages/mongo.html new file mode 100644 index 0000000000..e8f29e3910 --- /dev/null +++ b/_modules/dff/context_storages/mongo.html @@ -0,0 +1,698 @@ + + + + + + + + + + dff.context_storages.mongo — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.mongo

    +"""
    +Mongo
    +-----
    +The Mongo module provides a MongoDB-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data in a MongoDB.
    +It allows the DFF to easily store and retrieve context data in a format that is highly scalable
    +and easy to work with.
    +
    +MongoDB is a widely-used, open-source NoSQL database that is known for its scalability and performance.
    +It stores data in a format similar to JSON, making it easy to work with the data in a variety of programming languages
    +and environments. Additionally, MongoDB is highly scalable and can handle large amounts of data
    +and high levels of read and write traffic.
    +"""
    +from typing import Hashable, Dict, Any
    +
    +try:
    +    from motor.motor_asyncio import AsyncIOMotorClient
    +    from bson.objectid import ObjectId
    +
    +    mongo_available = True
    +except ImportError:
    +    mongo_available = False
    +    AsyncIOMotorClient = None
    +    ObjectId = Any
    +
    +import json
    +
    +from dff.script import Context
    +
    +from .database import DBContextStorage, threadsafe_method
    +from .protocol import get_protocol_install_suggestion
    +
    +
    +
    +[docs] +class MongoContextStorage(DBContextStorage): + """ + Implements :py:class:`.DBContextStorage` with `mongodb` as the database backend. + + :param path: Database URI. Example: `mongodb://user:password@host:port/dbname`. + :param collection: Name of the collection to store the data in. + """ + + def __init__(self, path: str, collection: str = "context_collection"): + DBContextStorage.__init__(self, path) + if not mongo_available: + install_suggestion = get_protocol_install_suggestion("mongodb") + raise ImportError("`mongodb` package is missing.\n" + install_suggestion) + self._mongo = AsyncIOMotorClient(self.full_path) + db = self._mongo.get_default_database() + self.collection = db[collection] + +
    +[docs] + @staticmethod + def _adjust_key(key: Hashable) -> Dict[str, ObjectId]: + """Convert a n-digit context id to a 24-digit mongo id""" + new_key = hex(int.from_bytes(str.encode(str(key)), "big", signed=False))[3:] + new_key = (new_key * (24 // len(new_key) + 1))[:24] + assert len(new_key) == 24 + return {"_id": ObjectId(new_key)}
    + + +
    +[docs] + @threadsafe_method + async def set_item_async(self, key: Hashable, value: Context): + new_key = self._adjust_key(key) + value = value if isinstance(value, Context) else Context.cast(value) + document = json.loads(value.model_dump_json()) + + document.update(new_key) + await self.collection.replace_one(new_key, document, upsert=True)
    + + +
    +[docs] + @threadsafe_method + async def get_item_async(self, key: Hashable) -> Context: + adjust_key = self._adjust_key(key) + document = await self.collection.find_one(adjust_key) + if document: + document.pop("_id") + ctx = Context.cast(document) + return ctx + raise KeyError
    + + +
    +[docs] + @threadsafe_method + async def del_item_async(self, key: Hashable): + adjust_key = self._adjust_key(key) + await self.collection.delete_one(adjust_key)
    + + +
    +[docs] + @threadsafe_method + async def contains_async(self, key: Hashable) -> bool: + adjust_key = self._adjust_key(key) + return bool(await self.collection.find_one(adjust_key))
    + + +
    +[docs] + @threadsafe_method + async def len_async(self) -> int: + return await self.collection.estimated_document_count()
    + + +
    +[docs] + @threadsafe_method + async def clear_async(self): + await self.collection.delete_many(dict())
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/pickle.html b/_modules/dff/context_storages/pickle.html new file mode 100644 index 0000000000..d92c309fc4 --- /dev/null +++ b/_modules/dff/context_storages/pickle.html @@ -0,0 +1,686 @@ + + + + + + + + + + dff.context_storages.pickle — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.pickle

    +"""
    +Pickle
    +------
    +The Pickle module provides a pickle-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data in a pickle format.
    +It allows the DFF to easily store and retrieve context data in a format that is efficient
    +for serialization and deserialization and can be easily used in python.
    +
    +Pickle is a python library that allows to serialize and deserialize python objects.
    +It is efficient and fast, but it is not recommended to use it to transfer data across
    +different languages or platforms because it's not cross-language compatible.
    +"""
    +import asyncio
    +import pickle
    +from typing import Hashable
    +
    +try:
    +    import aiofiles
    +    import aiofiles.os
    +
    +    pickle_available = True
    +except ImportError:
    +    pickle_available = False
    +
    +from .database import DBContextStorage, threadsafe_method
    +from dff.script import Context
    +
    +
    +
    +[docs] +class PickleContextStorage(DBContextStorage): + """ + Implements :py:class:`.DBContextStorage` with `pickle` as driver. + + :param path: Target file URI. Example: 'pickle://file.pkl'. + """ + + def __init__(self, path: str): + DBContextStorage.__init__(self, path) + asyncio.run(self._load()) + +
    +[docs] + @threadsafe_method + async def len_async(self) -> int: + return len(self.dict)
    + + +
    +[docs] + @threadsafe_method + async def set_item_async(self, key: Hashable, value: Context): + self.dict.__setitem__(str(key), value) + await self._save()
    + + +
    +[docs] + @threadsafe_method + async def get_item_async(self, key: Hashable) -> Context: + await self._load() + return Context.cast(self.dict.__getitem__(str(key)))
    + + +
    +[docs] + @threadsafe_method + async def del_item_async(self, key: Hashable): + self.dict.__delitem__(str(key)) + await self._save()
    + + +
    +[docs] + @threadsafe_method + async def contains_async(self, key: Hashable) -> bool: + await self._load() + return self.dict.__contains__(str(key))
    + + +
    +[docs] + @threadsafe_method + async def clear_async(self): + self.dict.clear() + await self._save()
    + + +
    +[docs] + async def _save(self): + async with aiofiles.open(self.path, "wb+") as file: + await file.write(pickle.dumps(self.dict))
    + + +
    +[docs] + async def _load(self): + if not await aiofiles.os.path.isfile(self.path) or (await aiofiles.os.stat(self.path)).st_size == 0: + self.dict = dict() + await self._save() + else: + async with aiofiles.open(self.path, "rb") as file: + self.dict = pickle.loads(await file.read())
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/protocol.html b/_modules/dff/context_storages/protocol.html new file mode 100644 index 0000000000..253ba9f125 --- /dev/null +++ b/_modules/dff/context_storages/protocol.html @@ -0,0 +1,617 @@ + + + + + + + + + + dff.context_storages.protocol — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.protocol

    +"""
    +Protocol
    +--------
    +The Protocol module contains the base code for the different communication protocols used in the DFF.
    +It defines the :py:data:`.PROTOCOLS` constant, which lists all the supported protocols in the DFF.
    +
    +The module also includes a function :py:func:`.get_protocol_install_suggestion()` that is used to provide
    +suggestions for installing the necessary dependencies for a specific protocol.
    +This function takes the name of the desired protocol as an argument and returns
    +a string containing the necessary installation commands for that protocol.
    +
    +The DFF supports a variety of communication protocols,
    +which allows it to communicate with different types of databases.
    +"""
    +import json
    +import pathlib
    +
    +with open(pathlib.Path(__file__).parent / "protocols.json", "r", encoding="utf-8") as protocols:
    +    PROTOCOLS = json.load(protocols)
    +_prtocol_keys = {"module", "class", "slug", "uri_example"}
    +assert all(set(proc.keys()) == _prtocol_keys for proc in PROTOCOLS.values()), "Protocols are incomplete"
    +
    +
    +
    +[docs] +def get_protocol_install_suggestion(protocol_name: str) -> str: + """ + Provide suggestions for installing the necessary dependencies for a specific protocol. + + :param protocol_name: Protocol name. + """ + protocol = PROTOCOLS.get(protocol_name, {}) + slug = protocol.get("slug") + if slug: + return f"Try to run `pip install dff[{slug}]`" + return ""
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/redis.html b/_modules/dff/context_storages/redis.html new file mode 100644 index 0000000000..7f47eeb0ef --- /dev/null +++ b/_modules/dff/context_storages/redis.html @@ -0,0 +1,673 @@ + + + + + + + + + + dff.context_storages.redis — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.redis

    +"""
    +Redis
    +-----
    +The Redis module provides a Redis-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data in a Redis.
    +It allows the DFF to easily store and retrieve context data in a format that is highly scalable
    +and easy to work with.
    +
    +Redis is an open-source, in-memory data structure store that is known for its
    +high performance and scalability. It stores data in key-value pairs and supports a variety of data
    +structures such as strings, hashes, lists, sets, and more.
    +Additionally, Redis can be used as a cache, message broker, and database, making it a versatile
    +and powerful choice for data storage and management.
    +"""
    +import json
    +from typing import Hashable
    +
    +try:
    +    from redis.asyncio import Redis
    +
    +    redis_available = True
    +except ImportError:
    +    redis_available = False
    +
    +from dff.script import Context
    +
    +from .database import DBContextStorage, threadsafe_method
    +from .protocol import get_protocol_install_suggestion
    +
    +
    +
    +[docs] +class RedisContextStorage(DBContextStorage): + """ + Implements :py:class:`.DBContextStorage` with `redis` as the database backend. + + :param path: Database URI string. Example: `redis://user:password@host:port`. + """ + + def __init__(self, path: str): + DBContextStorage.__init__(self, path) + if not redis_available: + install_suggestion = get_protocol_install_suggestion("redis") + raise ImportError("`redis` package is missing.\n" + install_suggestion) + self._redis = Redis.from_url(self.full_path) + +
    +[docs] + @threadsafe_method + async def contains_async(self, key: Hashable) -> bool: + return bool(await self._redis.exists(str(key)))
    + + +
    +[docs] + @threadsafe_method + async def set_item_async(self, key: Hashable, value: Context): + value = value if isinstance(value, Context) else Context.cast(value) + await self._redis.set(str(key), value.model_dump_json())
    + + +
    +[docs] + @threadsafe_method + async def get_item_async(self, key: Hashable) -> Context: + result = await self._redis.get(str(key)) + if result: + result_dict = json.loads(result.decode("utf-8")) + return Context.cast(result_dict) + raise KeyError(f"No entry for key {key}.")
    + + +
    +[docs] + @threadsafe_method + async def del_item_async(self, key: Hashable): + await self._redis.delete(str(key))
    + + +
    +[docs] + @threadsafe_method + async def len_async(self) -> int: + return await self._redis.dbsize()
    + + +
    +[docs] + @threadsafe_method + async def clear_async(self): + await self._redis.flushdb()
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/shelve.html b/_modules/dff/context_storages/shelve.html new file mode 100644 index 0000000000..21db9c958e --- /dev/null +++ b/_modules/dff/context_storages/shelve.html @@ -0,0 +1,652 @@ + + + + + + + + + + dff.context_storages.shelve — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.shelve

    +"""
    +Shelve
    +------
    +The Shelve module provides a shelve-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data in a shelve format.
    +It allows the DFF to easily store and retrieve context data in a format that is efficient
    +for serialization and deserialization and can be easily used in python.
    +
    +Shelve is a python library that allows to store and retrieve python objects.
    +It is efficient and fast, but it is not recommended to use it to transfer data across different languages
    +or platforms because it's not cross-language compatible.
    +It stores data in a dbm-style format in the file system, which is not as fast as the other serialization
    +libraries like pickle or JSON.
    +"""
    +import pickle
    +from shelve import DbfilenameShelf
    +from typing import Hashable
    +
    +from dff.script import Context
    +
    +from .database import DBContextStorage
    +
    +
    +
    +[docs] +class ShelveContextStorage(DBContextStorage): + """ + Implements :py:class:`.DBContextStorage` with `shelve` as the driver. + + :param path: Target file URI. Example: `shelve://file.db`. + """ + + def __init__(self, path: str): + DBContextStorage.__init__(self, path) + self.shelve_db = DbfilenameShelf(filename=self.path, protocol=pickle.HIGHEST_PROTOCOL) + +
    +[docs] + async def get_item_async(self, key: Hashable) -> Context: + return self.shelve_db[str(key)]
    + + +
    +[docs] + async def set_item_async(self, key: Hashable, value: Context): + self.shelve_db.__setitem__(str(key), value)
    + + +
    +[docs] + async def del_item_async(self, key: Hashable): + self.shelve_db.__delitem__(str(key))
    + + +
    +[docs] + async def contains_async(self, key: Hashable) -> bool: + return self.shelve_db.__contains__(str(key))
    + + +
    +[docs] + async def len_async(self) -> int: + return self.shelve_db.__len__()
    + + +
    +[docs] + async def clear_async(self): + self.shelve_db.clear()
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/sql.html b/_modules/dff/context_storages/sql.html new file mode 100644 index 0000000000..ae7ee6b251 --- /dev/null +++ b/_modules/dff/context_storages/sql.html @@ -0,0 +1,804 @@ + + + + + + + + + + dff.context_storages.sql — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.sql

    +"""
    +SQL
    +---
    +The SQL module provides a SQL-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data from SQL databases.
    +It allows the DFF to easily store and retrieve context data in a format that is highly scalable
    +and easy to work with.
    +
    +The SQL module provides the ability to choose the backend of your choice from
    +MySQL, PostgreSQL, or SQLite. You can choose the one that is most suitable for your use case and environment.
    +MySQL and PostgreSQL are widely used open-source relational databases that are known for their
    +reliability and scalability. SQLite is a self-contained, high-reliability, embedded, full-featured,
    +public-domain, SQL database engine.
    +"""
    +import asyncio
    +import importlib
    +import json
    +from typing import Hashable
    +
    +from dff.script import Context
    +
    +from .database import DBContextStorage, threadsafe_method
    +from .protocol import get_protocol_install_suggestion
    +
    +try:
    +    from sqlalchemy import Table, MetaData, Column, JSON, String, inspect, select, delete, func
    +    from sqlalchemy.ext.asyncio import create_async_engine
    +
    +    sqlalchemy_available = True
    +except (ImportError, ModuleNotFoundError):
    +    sqlalchemy_available = False
    +
    +postgres_available = sqlite_available = mysql_available = False
    +
    +try:
    +    import asyncpg
    +
    +    _ = asyncpg
    +
    +    postgres_available = True
    +except (ImportError, ModuleNotFoundError):
    +    pass
    +
    +try:
    +    import asyncmy
    +
    +    _ = asyncmy
    +
    +    mysql_available = True
    +except (ImportError, ModuleNotFoundError):
    +    pass
    +
    +try:
    +    import aiosqlite
    +
    +    _ = aiosqlite
    +
    +    sqlite_available = True
    +except (ImportError, ModuleNotFoundError):
    +    pass
    +
    +if not sqlalchemy_available:
    +    postgres_available = sqlite_available = mysql_available = False
    +
    +
    +
    +[docs] +def import_insert_for_dialect(dialect: str): + """ + Imports the insert function into global scope depending on the chosen sqlalchemy dialect. + + :param dialect: Chosen sqlalchemy dialect. + """ + global insert + insert = getattr( + importlib.import_module(f"sqlalchemy.dialects.{dialect}"), + "insert", + )
    + + + +
    +[docs] +class SQLContextStorage(DBContextStorage): + """ + | SQL-based version of the :py:class:`.DBContextStorage`. + | Compatible with MySQL, Postgresql, Sqlite. + + :param path: Standard sqlalchemy URI string. + When using sqlite backend in Windows, keep in mind that you have to use double backslashes '\\' + instead of forward slashes '/' in the file path. + :param table_name: The name of the table to use. + :param custom_driver: If you intend to use some other database driver instead of the recommended ones, + set this parameter to `True` to bypass the import checks. + """ + + def __init__(self, path: str, table_name: str = "contexts", custom_driver: bool = False): + DBContextStorage.__init__(self, path) + + self._check_availability(custom_driver) + self.engine = create_async_engine(self.full_path) + self.dialect: str = self.engine.dialect.name + + id_column_args = {"primary_key": True} + if self.dialect == "sqlite": + id_column_args["sqlite_on_conflict_primary_key"] = "REPLACE" + + self.metadata = MetaData() + self.table = Table( + table_name, + self.metadata, + Column("id", String(36), **id_column_args), + Column("context", JSON), # column for storing serialized contexts + ) + + asyncio.run(self._create_self_table()) + + import_insert_for_dialect(self.dialect) + +
    +[docs] + @threadsafe_method + async def set_item_async(self, key: Hashable, value: Context): + value = value if isinstance(value, Context) else Context.cast(value) + value = json.loads(value.model_dump_json()) + + insert_stmt = insert(self.table).values(id=str(key), context=value) + update_stmt = await self._get_update_stmt(insert_stmt) + + async with self.engine.connect() as conn: + await conn.execute(update_stmt) + await conn.commit()
    + + +
    +[docs] + @threadsafe_method + async def get_item_async(self, key: Hashable) -> Context: + stmt = select(self.table.c.context).where(self.table.c.id == str(key)) + async with self.engine.connect() as conn: + result = await conn.execute(stmt) + row = result.fetchone() + if row: + return Context.cast(row[0]) + raise KeyError
    + + +
    +[docs] + @threadsafe_method + async def del_item_async(self, key: Hashable): + stmt = delete(self.table).where(self.table.c.id == str(key)) + async with self.engine.connect() as conn: + await conn.execute(stmt) + await conn.commit()
    + + +
    +[docs] + @threadsafe_method + async def contains_async(self, key: Hashable) -> bool: + stmt = select(self.table.c.context).where(self.table.c.id == str(key)) + async with self.engine.connect() as conn: + result = await conn.execute(stmt) + return bool(result.fetchone())
    + + +
    +[docs] + @threadsafe_method + async def len_async(self) -> int: + stmt = select(func.count()).select_from(self.table) + async with self.engine.connect() as conn: + result = await conn.execute(stmt) + return result.fetchone()[0]
    + + +
    +[docs] + @threadsafe_method + async def clear_async(self): + stmt = delete(self.table) + async with self.engine.connect() as conn: + await conn.execute(stmt) + await conn.commit()
    + + +
    +[docs] + async def _create_self_table(self): + async with self.engine.begin() as conn: + if not await conn.run_sync(lambda sync_conn: inspect(sync_conn).has_table(self.table.name)): + await conn.run_sync(self.table.create, self.engine)
    + + +
    +[docs] + async def _get_update_stmt(self, insert_stmt): + if self.dialect == "sqlite": + return insert_stmt + elif self.dialect == "mysql": + update_stmt = insert_stmt.on_duplicate_key_update(context=insert_stmt.inserted.context) + else: + update_stmt = insert_stmt.on_conflict_do_update( + index_elements=["id"], set_=dict(context=insert_stmt.excluded.context) + ) + return update_stmt
    + + +
    +[docs] + def _check_availability(self, custom_driver: bool): + if not custom_driver: + if self.full_path.startswith("postgresql") and not postgres_available: + install_suggestion = get_protocol_install_suggestion("postgresql") + raise ImportError("Packages `sqlalchemy` and/or `asyncpg` are missing.\n" + install_suggestion) + elif self.full_path.startswith("mysql") and not mysql_available: + install_suggestion = get_protocol_install_suggestion("mysql") + raise ImportError("Packages `sqlalchemy` and/or `asyncmy` are missing.\n" + install_suggestion) + elif self.full_path.startswith("sqlite") and not sqlite_available: + install_suggestion = get_protocol_install_suggestion("sqlite") + raise ImportError("Package `sqlalchemy` and/or `aiosqlite` is missing.\n" + install_suggestion)
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/ydb.html b/_modules/dff/context_storages/ydb.html new file mode 100644 index 0000000000..b922f7b5d0 --- /dev/null +++ b/_modules/dff/context_storages/ydb.html @@ -0,0 +1,849 @@ + + + + + + + + + + dff.context_storages.ydb — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.ydb

    +"""
    +Yandex DB
    +---------
    +The Yandex DB module provides a version of the :py:class:`.DBContextStorage` class that designed to work with
    +Yandex and other databases. Yandex DataBase is a fully-managed cloud-native SQL service that makes it easy to set up,
    +operate, and scale high-performance and high-availability databases for your applications.
    +
    +The Yandex DB module uses the Yandex Cloud SDK, which is a python library that allows you to work
    +with Yandex Cloud services using python. This allows the DFF to easily integrate with the Yandex DataBase and
    +take advantage of the scalability and high-availability features provided by the service.
    +"""
    +import asyncio
    +import os
    +from typing import Hashable
    +from urllib.parse import urlsplit
    +
    +
    +from dff.script import Context
    +
    +from .database import DBContextStorage
    +from .protocol import get_protocol_install_suggestion
    +
    +try:
    +    import ydb
    +    import ydb.aio
    +
    +    ydb_available = True
    +except ImportError:
    +    ydb_available = False
    +
    +
    +
    +[docs] +class YDBContextStorage(DBContextStorage): + """ + Version of the :py:class:`.DBContextStorage` for YDB. + + :param path: Standard sqlalchemy URI string. + When using sqlite backend in Windows, keep in mind that you have to use double backslashes '\\' + instead of forward slashes '/' in the file path. + :param table_name: The name of the table to use. + """ + + def __init__(self, path: str, table_name: str = "contexts", timeout=5): + DBContextStorage.__init__(self, path) + protocol, netloc, self.database, _, _ = urlsplit(path) + self.endpoint = "{}://{}".format(protocol, netloc) + self.table_name = table_name + if not ydb_available: + install_suggestion = get_protocol_install_suggestion("grpc") + raise ImportError("`ydb` package is missing.\n" + install_suggestion) + self.driver, self.pool = asyncio.run(_init_drive(timeout, self.endpoint, self.database, self.table_name)) + +
    +[docs] + async def set_item_async(self, key: Hashable, value: Context): + value = value if isinstance(value, Context) else Context.cast(value) + + async def callee(session): + query = """ + PRAGMA TablePathPrefix("{}"); + DECLARE $queryId AS Utf8; + DECLARE $queryContext AS Json; + UPSERT INTO {} + ( + id, + context + ) + VALUES + ( + $queryId, + $queryContext + ); + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + {"$queryId": str(key), "$queryContext": value.model_dump_json()}, + commit_tx=True, + ) + + return await self.pool.retry_operation(callee)
    + + +
    +[docs] + async def get_item_async(self, key: Hashable) -> Context: + async def callee(session): + query = """ + PRAGMA TablePathPrefix("{}"); + DECLARE $queryId AS Utf8; + SELECT + id, + context + FROM {} + WHERE id = $queryId; + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + result_sets = await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + { + "$queryId": str(key), + }, + commit_tx=True, + ) + if result_sets[0].rows: + return Context.cast(result_sets[0].rows[0].context) + else: + raise KeyError + + return await self.pool.retry_operation(callee)
    + + +
    +[docs] + async def del_item_async(self, key: Hashable): + async def callee(session): + query = """ + PRAGMA TablePathPrefix("{}"); + DECLARE $queryId AS Utf8; + DELETE + FROM {} + WHERE + id = $queryId + ; + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + {"$queryId": str(key)}, + commit_tx=True, + ) + + return await self.pool.retry_operation(callee)
    + + +
    +[docs] + async def contains_async(self, key: Hashable) -> bool: + async def callee(session): + # new transaction in serializable read write mode + # if query successfully completed you will get result sets. + # otherwise exception will be raised + query = """ + PRAGMA TablePathPrefix("{}"); + DECLARE $queryId AS Utf8; + SELECT + id, + context + FROM {} + WHERE id = $queryId; + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + result_sets = await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + { + "$queryId": str(key), + }, + commit_tx=True, + ) + return len(result_sets[0].rows) > 0 + + return await self.pool.retry_operation(callee)
    + + +
    +[docs] + async def len_async(self) -> int: + async def callee(session): + query = """ + PRAGMA TablePathPrefix("{}"); + SELECT + COUNT(*) as cnt + FROM {} + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + result_sets = await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + commit_tx=True, + ) + return result_sets[0].rows[0].cnt + + return await self.pool.retry_operation(callee)
    + + +
    +[docs] + async def clear_async(self): + async def callee(session): + query = """ + PRAGMA TablePathPrefix("{}"); + DECLARE $queryId AS Utf8; + DELETE + FROM {} + ; + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + {}, + commit_tx=True, + ) + + return await self.pool.retry_operation(callee)
    +
    + + + +
    +[docs] +async def _init_drive(timeout: int, endpoint: str, database: str, table_name: str): + driver = ydb.aio.Driver(endpoint=endpoint, database=database) + await driver.wait(fail_fast=True, timeout=timeout) + + pool = ydb.aio.SessionPool(driver, size=10) + + if not await _is_table_exists(pool, database, table_name): # create table if it does not exist + await _create_table(pool, database, table_name) + return driver, pool
    + + + +
    +[docs] +async def _is_table_exists(pool, path, table_name) -> bool: + try: + + async def callee(session): + await session.describe_table(os.path.join(path, table_name)) + + await pool.retry_operation(callee) + return True + except ydb.SchemeError: + return False
    + + + +
    +[docs] +async def _create_table(pool, path, table_name): + async def callee(session): + await session.create_table( + "/".join([path, table_name]), + ydb.TableDescription() + .with_column(ydb.Column("id", ydb.OptionalType(ydb.PrimitiveType.Utf8))) + .with_column(ydb.Column("context", ydb.OptionalType(ydb.PrimitiveType.Json))) + .with_primary_key("id"), + ) + + return await pool.retry_operation(callee)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/messengers/common/interface.html b/_modules/dff/messengers/common/interface.html new file mode 100644 index 0000000000..c5258b285a --- /dev/null +++ b/_modules/dff/messengers/common/interface.html @@ -0,0 +1,822 @@ + + + + + + + + + + dff.messengers.common.interface — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.messengers.common.interface

    +"""
    +Message Interfaces
    +------------------
    +The Message Interfaces module contains several basic classes that define the message interfaces.
    +These classes provide a way to define the structure of the messengers that are used to communicate with the DFF.
    +"""
    +import abc
    +import asyncio
    +import logging
    +import uuid
    +from typing import Optional, Any, List, Tuple, TextIO, Hashable
    +
    +from dff.script import Context, Message
    +
    +from .types import PipelineRunnerFunction, PollingInterfaceLoopFunction
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +class MessengerInterface(abc.ABC): + """ + Class that represents a message interface used for communication between pipeline and users. + It is responsible for connection between user and pipeline, as well as for request-response transactions. + """ + +
    +[docs] + @abc.abstractmethod + async def connect(self, pipeline_runner: PipelineRunnerFunction): + """ + Method invoked when message interface is instantiated and connection is established. + May be used for sending an introduction message or displaying general bot information. + + :param pipeline_runner: A function that should return pipeline response to user request; + usually it's a :py:meth:`~dff.pipeline.pipeline.pipeline.Pipeline._run_pipeline` function. + :type pipeline_runner: PipelineRunnerFunction + """ + raise NotImplementedError
    +
    + + + +
    +[docs] +class PollingMessengerInterface(MessengerInterface): + """ + Polling message interface runs in a loop, constantly asking users for a new input. + """ + +
    +[docs] + @abc.abstractmethod + def _request(self) -> List[Tuple[Message, Hashable]]: + """ + Method used for sending users request for their input. + + :return: A list of tuples: user inputs and context ids (any user ids) associated with the inputs. + """ + raise NotImplementedError
    + + +
    +[docs] + @abc.abstractmethod + def _respond(self, responses: List[Context]): + """ + Method used for sending users responses for their last input. + + :param responses: A list of contexts, representing dialogs with the users; + `last_response`, `id` and some dialog info can be extracted from there. + """ + raise NotImplementedError
    + + +
    +[docs] + def _on_exception(self, e: BaseException): + """ + Method that is called on polling cycle exceptions, in some cases it should show users the exception. + By default, it logs all exit exceptions to `info` log and all non-exit exceptions to `error`. + + :param e: The exception. + """ + if isinstance(e, Exception): + logger.error(f"Exception in {type(self).__name__} loop!\n{str(e)}") + else: + logger.info(f"{type(self).__name__} has stopped polling.")
    + + +
    +[docs] + async def _polling_loop( + self, + pipeline_runner: PipelineRunnerFunction, + timeout: float = 0, + ): + """ + Method running the request - response cycle once. + """ + user_updates = self._request() + responses = [await pipeline_runner(request, ctx_id) for request, ctx_id in user_updates] + self._respond(responses) + await asyncio.sleep(timeout)
    + + +
    +[docs] + async def connect( + self, + pipeline_runner: PipelineRunnerFunction, + loop: PollingInterfaceLoopFunction = lambda: True, + timeout: float = 0, + ): + """ + Method, running a request - response cycle in a loop. + The looping behavior is determined by `loop` and `timeout`, + for most cases the loop itself shouldn't be overridden. + + :param pipeline_runner: A function that should return pipeline response to user request; + usually it's a :py:meth:`~dff.pipeline.pipeline.pipeline.Pipeline._run_pipeline` function. + :type pipeline_runner: PipelineRunnerFunction + :param loop: a function that determines whether polling should be continued; + called in each cycle, should return `True` to continue polling or `False` to stop. + :type loop: PollingInterfaceLoopFunction + :param timeout: a time interval between polls (in seconds). + """ + while loop(): + try: + await self._polling_loop(pipeline_runner, timeout) + + except BaseException as e: + self._on_exception(e) + break
    +
    + + + +
    +[docs] +class CallbackMessengerInterface(MessengerInterface): + """ + Callback message interface is waiting for user input and answers once it gets one. + """ + + def __init__(self): + self._pipeline_runner: Optional[PipelineRunnerFunction] = None + +
    +[docs] + async def connect(self, pipeline_runner: PipelineRunnerFunction): + self._pipeline_runner = pipeline_runner
    + + +
    +[docs] + async def on_request_async(self, request: Any, ctx_id: Hashable) -> Context: + """ + Method invoked on user input. This method works just like + :py:meth:`~dff.pipeline.pipeline.pipeline.Pipeline._run_pipeline`, + however callback message interface may contain additional functionality (e.g. for external API accessing). + Return context that represents dialog with the user; + `last_response`, `id` and some dialog info can be extracted from there. + + :param request: User input. + :param ctx_id: Any unique id that will be associated with dialog between this user and pipeline. + :return: Context that represents dialog with the user. + """ + return await self._pipeline_runner(request, ctx_id)
    + + +
    +[docs] + def on_request(self, request: Any, ctx_id: Hashable) -> Context: + """ + Method invoked on user input. This method works just like + :py:meth:`~dff.pipeline.pipeline.pipeline.Pipeline._run_pipeline`, + however callback message interface may contain additional functionality (e.g. for external API accessing). + Return context that represents dialog with the user; + `last_response`, `id` and some dialog info can be extracted from there. + + :param request: User input. + :param ctx_id: Any unique id that will be associated with dialog between this user and pipeline. + :return: Context that represents dialog with the user. + """ + return asyncio.run(self.on_request_async(request, ctx_id))
    +
    + + + +
    +[docs] +class CLIMessengerInterface(PollingMessengerInterface): + """ + Command line message interface is the default message interface, communicating with user via `STDIN/STDOUT`. + This message interface can maintain dialog with one user at a time only. + """ + + def __init__( + self, + intro: Optional[str] = None, + prompt_request: str = "request: ", + prompt_response: str = "response: ", + out_descriptor: Optional[TextIO] = None, + ): + super().__init__() + self._ctx_id: Optional[Hashable] = None + self._intro: Optional[str] = intro + self._prompt_request: str = prompt_request + self._prompt_response: str = prompt_response + self._descriptor: Optional[TextIO] = out_descriptor + +
    +[docs] + def _request(self) -> List[Tuple[Message, Any]]: + return [(Message(text=input(self._prompt_request)), self._ctx_id)]
    + + +
    +[docs] + def _respond(self, responses: List[Context]): + print(f"{self._prompt_response}{responses[0].last_response.text}", file=self._descriptor)
    + + +
    +[docs] + async def connect(self, pipeline_runner: PipelineRunnerFunction, **kwargs): + """ + The CLIProvider generates new dialog id used to user identification on each `connect` call. + + :param pipeline_runner: A function that should return pipeline response to user request; + usually it's a :py:meth:`~dff.pipeline.pipeline.pipeline.Pipeline._run_pipeline` function. + :type pipeline_runner: PipelineRunnerFunction + :param \\**kwargs: argument, added for compatibility with super class, it shouldn't be used normally. + """ + self._ctx_id = uuid.uuid4() + if self._intro is not None: + print(self._intro) + await super().connect(pipeline_runner, **kwargs)
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/messengers/telegram/interface.html b/_modules/dff/messengers/telegram/interface.html new file mode 100644 index 0000000000..ddb6bfed2b --- /dev/null +++ b/_modules/dff/messengers/telegram/interface.html @@ -0,0 +1,862 @@ + + + + + + + + + + dff.messengers.telegram.interface — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.messengers.telegram.interface

    +"""
    +Interface
    +------------
    +This module implements various interfaces for :py:class:`~dff.messengers.telegram.messenger.TelegramMessenger`
    +that can be used to interact with the Telegram API.
    +"""
    +import asyncio
    +from typing import Any, Optional, List, Tuple, Callable
    +
    +from telebot import types, logger
    +
    +from dff.script import Context
    +from dff.messengers.common import PollingMessengerInterface, PipelineRunnerFunction, CallbackMessengerInterface
    +from .messenger import TelegramMessenger
    +from .message import TelegramMessage, Message
    +
    +try:
    +    from flask import Flask, request, abort
    +
    +    flask_imported = True
    +except ImportError:
    +    flask_imported = False
    +    Flask = Any
    +    request, abort = None, None
    +
    +
    +
    +[docs] +def extract_telegram_request_and_id( + update: types.Update, messenger: Optional[TelegramMessenger] = None +) -> Tuple[TelegramMessage, int]: # pragma: no cover + """ + Utility function that extracts parameters from a telegram update. + Changes the messenger state, setting the last update id. + + Returned message has the following fields: + + - | `update_id` -- this field stores `update.update_id`, + - | `update` -- this field stores the first non-empty field of `update`, + - | `update_type` -- this field stores the name of the first non-empty field of `update`, + - | `text` -- this field stores `update.message.text`, + - | `callback_query` -- this field stores `update.callback_query.data`. + + Also return context id which is `chat`, `from_user` or `user` of the update. + + :param update: Update to process. + :param messenger: + Messenger instance. If passed updates `last_update_id`. + Defaults to None. + """ + if messenger is not None: + if update.update_id > messenger.last_update_id: + messenger.last_update_id = update.update_id + + message = TelegramMessage(update_id=update.update_id) + ctx_id = None + + for update_field, update_value in vars(update).items(): + if update_field != "update_id" and update_value is not None: + if message.update is not None: + raise RuntimeError(f"Two update fields. First: {message.update_type}; second: {update_field}") + message.update_type = update_field + message.update = update_value + if isinstance(update_value, types.Message): + message.text = update_value.text + + if isinstance(update_value, types.CallbackQuery): + data = update_value.data + if data is not None: + message.callback_query = data + + dict_update = vars(update_value) + # if 'chat' is not available, fall back to 'from_user', then to 'user' + user = dict_update.get("chat", dict_update.get("from_user", dict_update.get("user"))) + ctx_id = getattr(user, "id", None) + if message.update is None: + raise RuntimeError(f"No update fields found: {update}") + + return message, ctx_id
    + + + +
    +[docs] +class PollingTelegramInterface(PollingMessengerInterface): # pragma: no cover + """ + Telegram interface that retrieves updates by polling. + Multi-threaded polling is currently not supported. + + :param token: Bot token + :param messenger: + :py:class:`~dff.messengers.telegram.messenger.TelegramMessenger` instance. + If not `None` will be used instead of creating messenger from token. + Token value does not matter in that case. + Defaults to None. + :param interval: + Polling interval. See `link <https://github.com/eternnoir/pyTelegramBotAPI#telebot>`__. + Defaults to 2. + :param allowed_updates: + Processed updates. See `link <https://github.com/eternnoir/pyTelegramBotAPI#telebot>`__. + Defaults to None. + :param timeout: + General timeout. See `link <https://github.com/eternnoir/pyTelegramBotAPI#telebot>`__. + Defaults to 20. + :param long_polling_timeout: + Polling timeout. See `link <https://github.com/eternnoir/pyTelegramBotAPI#telebot>`__. + Defaults to 20. + """ + + def __init__( + self, + token: str, + interval: int = 2, + allowed_updates: Optional[List[str]] = None, + timeout: int = 20, + long_polling_timeout: int = 20, + messenger: Optional[TelegramMessenger] = None, + ): + self.messenger = messenger if messenger is not None else TelegramMessenger(token) + self.interval = interval + self.allowed_updates = allowed_updates + self.timeout = timeout + self.long_polling_timeout = long_polling_timeout + self._last_processed_update = -1 + self._stop_polling = asyncio.Event() + +
    +[docs] + def _request(self) -> List[Tuple[Message, int]]: + updates = self.messenger.get_updates( + offset=(self.messenger.last_update_id + 1), + allowed_updates=self.allowed_updates, + timeout=self.timeout, + long_polling_timeout=self.long_polling_timeout, + ) + update_list = [extract_telegram_request_and_id(update, self.messenger) for update in updates] + return update_list
    + + +
    +[docs] + def _respond(self, response: List[Context]): + for resp in response: + self.messenger.send_response(resp.id, resp.last_response) + update_id = getattr(resp.last_request, "update_id", None) + if update_id is not None: + if update_id > self._last_processed_update: + self._last_processed_update = update_id
    + + +
    +[docs] + def _on_exception(self, e: Exception): + logger.error(e) + self._stop_polling.set()
    + + +
    +[docs] + def forget_processed_updates(self): + """ + Forget updates already processed by the pipeline. + """ + self.messenger.get_updates( + offset=self._last_processed_update + 1, + allowed_updates=self.allowed_updates, + timeout=1, + long_polling_timeout=1, + )
    + + +
    +[docs] + async def connect(self, callback: PipelineRunnerFunction, loop: Optional[Callable] = None, *args, **kwargs): + self._stop_polling.clear() + + try: + await super().connect( + callback, loop=loop or (lambda: not self._stop_polling.is_set()), timeout=self.interval + ) + finally: + self.forget_processed_updates()
    + + +
    +[docs] + def stop(self): + """Stop polling.""" + self._stop_polling.set()
    +
    + + + +
    +[docs] +class CallbackTelegramInterface(CallbackMessengerInterface): # pragma: no cover + """ + Asynchronous Telegram interface that retrieves updates via webhook. + Any Flask server can be passed to set up a webhook on a separate endpoint. + + :param token: Bot token + :param messenger: + :py:class:`~dff.messengers.telegram.messenger.TelegramMessenger` instance. + If not `None` will be used instead of creating messenger from token. + Token value does not matter in that case. + Defaults to None. + :param app: + Flask instance. + Defaults to `Flask(__name__)`. + :param endpoint: + Webhook endpoint. Should be prefixed with "/". + Defaults to "/telegram-webhook". + :param host: + Host IP. + Defaults to "localhost". + :param port: + Port of the app. + Defaults to 8443. + :param debug: + Run the Flask app in debug mode. + :param load_dotenv: + Whether or not the .env file in the project folder + should be used to set environment variables. + :param full_uri: + Full public IP of your webhook that is accessible by https. + Defaults to `"https://{host}:{port}{endpoint}"`. + :param wsgi_options: + Keyword arguments to forward to `Flask.run` method. + Use these to set `ssl_context` and other WSGI options. + """ + + def __init__( + self, + token: str, + app: Optional[Flask] = None, + host: str = "localhost", + port: int = 8443, + debug: Optional[bool] = None, + load_dotenv: bool = True, + endpoint: str = "/telegram-webhook", + full_uri: Optional[str] = None, + messenger: Optional[TelegramMessenger] = None, + **wsgi_options, + ): + if not flask_imported: + raise ModuleNotFoundError("Flask is not installed. Install it with `pip install flask`.") + + self.messenger = messenger if messenger is not None else TelegramMessenger(token) + self.app = app if app else Flask(__name__) + self.host = host + self.port = port + self.debug = debug + self.load_dotenv = load_dotenv + self.wsgi_options = wsgi_options + self.endpoint = endpoint + self.full_uri = full_uri if full_uri is not None else "".join([f"https://{host}:{port}", endpoint]) + + async def endpoint(): + if not request.headers.get("content-type") == "application/json": + abort(403) + + json_string = request.get_data().decode("utf-8") + update = types.Update.de_json(json_string) + resp = await self.on_request_async(*extract_telegram_request_and_id(update, self.messenger)) + self.messenger.send_response(resp.id, resp.last_response) + return "" + + self.app.route(self.endpoint, methods=["POST"])(endpoint) + +
    +[docs] + async def connect(self, callback: PipelineRunnerFunction): + await super().connect(callback) + + self.messenger.remove_webhook() + self.messenger.set_webhook(self.full_uri) + + self.app.run( + host=self.host, port=self.port, load_dotenv=self.load_dotenv, debug=self.debug, **self.wsgi_options + )
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/messengers/telegram/message.html b/_modules/dff/messengers/telegram/message.html new file mode 100644 index 0000000000..3f98ab6ef5 --- /dev/null +++ b/_modules/dff/messengers/telegram/message.html @@ -0,0 +1,703 @@ + + + + + + + + + + dff.messengers.telegram.message — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.messengers.telegram.message

    +"""
    +Telegram Message
    +----------------
    +This module implements inherited classes :py:mod:`dff.script.core.message` modified for usage with Telegram.
    +"""
    +from typing import Optional, Union
    +from enum import Enum
    +
    +from telebot.types import (
    +    ReplyKeyboardRemove,
    +    ReplyKeyboardMarkup,
    +    InlineKeyboardMarkup,
    +    Message as tlMessage,
    +    InlineQuery,
    +    ChosenInlineResult,
    +    CallbackQuery as tlCallbackQuery,
    +    ShippingQuery,
    +    PreCheckoutQuery,
    +    Poll,
    +    PollAnswer,
    +    ChatMemberUpdated,
    +    ChatJoinRequest,
    +)
    +
    +from dff.script.core.message import Message, Location, Keyboard, DataModel
    +from pydantic import model_validator
    +
    +
    +
    +[docs] +class TelegramUI(Keyboard): + is_inline: bool = True + """ + Whether to use `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`__ or + a `keyboard <https://core.telegram.org/bots/features#keyboards>`__. + """ + row_width: int = 3 + """Limits the maximum number of buttons in a row.""" + +
    +[docs] + @model_validator(mode="after") + def validate_buttons(self, _): + if not self.is_inline: + for button in self.buttons: + if button.payload is not None or button.source is not None: + raise AssertionError(f"`payload` and `source` are only used for inline keyboards: {button}") + return self
    +
    + + + +
    +[docs] +class _ClickButton(DataModel): + """This class is only used in telegram tests (to click buttons as a client).""" + + button_index: int
    + + + +
    +[docs] +class RemoveKeyboard(DataModel): + """Pass an instance of this class to :py:attr:`~.TelegramMessage.ui` to remove current keyboard.""" + + ...
    + + + +
    +[docs] +class ParseMode(Enum): + """ + Parse mode of the message. + More info: https://core.telegram.org/bots/api#formatting-options. + """ + + HTML = "HTML" + MARKDOWN = "MarkdownV2"
    + + + +
    +[docs] +class TelegramMessage(Message): + ui: Optional[ + Union[TelegramUI, RemoveKeyboard, ReplyKeyboardRemove, ReplyKeyboardMarkup, InlineKeyboardMarkup] + ] = None + location: Optional[Location] = None + callback_query: Optional[Union[str, _ClickButton]] = None + update: Optional[ + Union[ + tlMessage, + InlineQuery, + ChosenInlineResult, + tlCallbackQuery, + ShippingQuery, + PreCheckoutQuery, + Poll, + PollAnswer, + ChatMemberUpdated, + ChatJoinRequest, + ] + ] = None + """This field stores an update representing this message.""" + update_id: Optional[int] = None + update_type: Optional[str] = None + """Name of the field that stores an update representing this message.""" + parse_mode: Optional[ParseMode] = None + """Parse mode of the message.""" + + def __eq__(self, other): + if isinstance(other, Message): + for field in self.model_fields: + if field not in ("parse_mode", "update_id", "update", "update_type"): + if field not in other.model_fields: + return False + if self.__getattribute__(field) != other.__getattribute__(field): + return False + return True + return NotImplemented
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/messengers/telegram/messenger.html b/_modules/dff/messengers/telegram/messenger.html new file mode 100644 index 0000000000..97dfc990ca --- /dev/null +++ b/_modules/dff/messengers/telegram/messenger.html @@ -0,0 +1,839 @@ + + + + + + + + + + dff.messengers.telegram.messenger — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.messengers.telegram.messenger

    +"""
    +Messenger
    +-----------------
    +The Messenger module provides the :py:class:`~dff.messengers.telegram.messenger.TelegramMessenger` class.
    +The former inherits from the :py:class:`~TeleBot` class from the `pytelegrambotapi` library.
    +Using it, you can put Telegram update handlers inside your script and condition your transitions accordingly.
    +
    +"""
    +from pathlib import Path
    +from typing import Union, List, Optional, Callable
    +from enum import Enum
    +
    +from telebot import types, TeleBot
    +
    +from dff.script import Context
    +from dff.pipeline import Pipeline
    +
    +from .utils import batch_open_io
    +from .message import TelegramMessage, TelegramUI, RemoveKeyboard
    +
    +from dff.script import Message
    +from dff.script.core.message import Audio, Video, Image, Document
    +
    +
    +
    +[docs] +class TelegramMessenger(TeleBot): # pragma: no cover + """ + This class inherits from `Telebot` and implements framework-specific functionality + like sending generic responses. + + :param token: A Telegram API bot token. + :param kwargs: Arbitrary parameters that match the signature of the `Telebot` class. + For reference see: `link <https://github.com/eternnoir/pyTelegramBotAPI#telebot>`_ . + + """ + + def __init__( + self, + token: str, + **kwargs, + ): + super().__init__(token, threaded=False, **kwargs) + +
    +[docs] + def send_response(self, chat_id: Union[str, int], response: Union[str, dict, Message]) -> None: + """ + Cast `response` to :py:class:`~dff.messengers.telegram.types.TelegramMessage` and send it. + Message fields are sent in separate messages in the following order: + + 1. Attachments + 2. Location + 3. Text with keyboard + + :param chat_id: Telegram chat ID. + :param response: Response data. String, dictionary or :py:class:`~dff.script.responses.generics.Response`. + will be cast to :py:class:`~dff.messengers.telegram.types.TelegramMessage`. + """ + if isinstance(response, TelegramMessage): + ready_response = response + elif isinstance(response, str): + ready_response = TelegramMessage(text=response) + elif isinstance(response, Message): + ready_response = TelegramMessage.model_validate(response.model_dump()) + elif isinstance(response, dict): + ready_response = TelegramMessage.model_validate(response) + else: + raise TypeError( + "Type of the response argument should be one of the following:" + " `str`, `dict`, `Message`, or `TelegramMessage`." + ) + parse_mode = ready_response.parse_mode.value if ready_response.parse_mode is not None else None + if ready_response.attachments is not None: + if len(ready_response.attachments.files) == 1: + attachment = ready_response.attachments.files[0] + if isinstance(attachment, Audio): + method = self.send_audio + elif isinstance(attachment, Document): + method = self.send_document + elif isinstance(attachment, Video): + method = self.send_video + elif isinstance(attachment, Image): + method = self.send_photo + else: + raise TypeError(type(attachment)) + params = {"caption": attachment.title, "parse_mode": parse_mode} + if isinstance(attachment.source, Path): + with open(attachment.source, "rb") as file: + method(chat_id, file, **params) + else: + method(chat_id, attachment.source or attachment.id, **params) + else: + + def cast(file): + if isinstance(file, Image): + cast_to_media_type = types.InputMediaPhoto + elif isinstance(file, Audio): + cast_to_media_type = types.InputMediaAudio + elif isinstance(file, Document): + cast_to_media_type = types.InputMediaDocument + elif isinstance(file, Video): + cast_to_media_type = types.InputMediaVideo + else: + raise TypeError(type(file)) + return cast_to_media_type(media=file.source or file.id, caption=file.title) + + files = map(cast, ready_response.attachments.files) + with batch_open_io(files) as media: + self.send_media_group(chat_id=chat_id, media=media) + + if ready_response.location: + self.send_location( + chat_id=chat_id, + latitude=ready_response.location.latitude, + longitude=ready_response.location.longitude, + ) + + if ready_response.ui is not None: + if isinstance(ready_response.ui, RemoveKeyboard): + keyboard = types.ReplyKeyboardRemove() + elif isinstance(ready_response.ui, TelegramUI): + if ready_response.ui.is_inline: + keyboard = types.InlineKeyboardMarkup(row_width=ready_response.ui.row_width) + buttons = [ + types.InlineKeyboardButton( + text=item.text, + url=item.source, + callback_data=item.payload, + ) + for item in ready_response.ui.buttons + ] + else: + keyboard = types.ReplyKeyboardMarkup(row_width=ready_response.ui.row_width) + buttons = [ + types.KeyboardButton( + text=item.text, + ) + for item in ready_response.ui.buttons + ] + keyboard.add(*buttons, row_width=ready_response.ui.row_width) + else: + keyboard = ready_response.ui + else: + keyboard = None + + if ready_response.text is not None: + self.send_message( + chat_id=chat_id, + text=ready_response.text, + reply_markup=keyboard, + parse_mode=parse_mode, + ) + elif keyboard is not None: + self.send_message( + chat_id=chat_id, + text="", + reply_markup=keyboard, + parse_mode=parse_mode, + )
    +
    + + + +_default_messenger = TeleBot("") + + +
    +[docs] +class UpdateType(Enum): + """ + Represents a type of the telegram update + (which field contains an update in :py:class:`telebot.types.Update`). + See `link <https://pytba.readthedocs.io/en/latest/types.html#telebot.types.Update>`__. + """ + + ALL = "ALL" + MESSAGE = "message" + EDITED_MESSAGE = "edited_message" + CHANNEL_POST = "channel_post" + EDITED_CHANNEL_POST = "edited_channel_post" + INLINE_QUERY = "inline_query" + CHOSEN_INLINE_RESULT = "chosen_inline_result" + CALLBACK_QUERY = "callback_query" + SHIPPING_QUERY = "shipping_query" + PRE_CHECKOUT_QUERY = "pre_checkout_query" + POLL = "poll" + POLL_ANSWER = "poll_answer" + MY_CHAT_MEMBER = "my_chat_member" + CHAT_MEMBER = "chat_member" + CHAT_JOIN_REQUEST = "chat_join_request"
    + + + +
    +[docs] +def telegram_condition( + messenger: TeleBot = _default_messenger, + update_type: UpdateType = UpdateType.MESSAGE, + commands: Optional[List[str]] = None, + regexp: Optional[str] = None, + func: Optional[Callable] = None, + content_types: Optional[List[str]] = None, + chat_types: Optional[List[str]] = None, + **kwargs, +): + """ + A condition triggered by updates that match the given parameters. + + :param messenger: + Messenger to test filters on. Used only for :py:attr:`Telebot.custom_filters`. + Defaults to :py:data:`._default_messenger`. + :param update_type: + If set to any `UpdateType` other than `UpdateType.ALL` + it will check that an update is of the same type. + Defaults to `UpdateType.Message`. + :param commands: + Telegram command trigger. + See `link <https://github.com/eternnoir/pyTelegramBotAPI#general-api-documentation>`__. + :param regexp: + Regex trigger. + See `link <https://github.com/eternnoir/pyTelegramBotAPI#general-api-documentation>`__. + :param func: + Callable trigger. + See `link <https://github.com/eternnoir/pyTelegramBotAPI#general-api-documentation>`__. + :param content_types: + Content type trigger. + See `link <https://github.com/eternnoir/pyTelegramBotAPI#general-api-documentation>`__. + :param chat_types: + Chat type trigger. + See `link <https://github.com/eternnoir/pyTelegramBotAPI#general-api-documentation>`__. + """ + + update_handler = messenger._build_handler_dict( + None, + False, + commands=commands, + regexp=regexp, + func=func, + content_types=content_types, + chat_types=chat_types, + **kwargs, + ) + + def condition(ctx: Context, _: Pipeline, *__, **___): # pragma: no cover + last_request = ctx.last_request + if last_request is None: + return False + update = getattr(last_request, "update", None) + request_update_type = getattr(last_request, "update_type", None) + if update is None: + return False + if update_type != UpdateType.ALL and request_update_type != update_type.value: + return False + test_result = messenger._test_message_handler(update_handler, update) + return test_result + + return condition
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/messengers/telegram/utils.html b/_modules/dff/messengers/telegram/utils.html new file mode 100644 index 0000000000..116f07666e --- /dev/null +++ b/_modules/dff/messengers/telegram/utils.html @@ -0,0 +1,643 @@ + + + + + + + + + + dff.messengers.telegram.utils — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.messengers.telegram.utils

    +"""
    +Utils
    +------
    +This module contains utilities for connecting to Telegram.
    +"""
    +from typing import Union, Iterable
    +from contextlib import contextmanager
    +from pathlib import Path
    +from io import IOBase
    +
    +from telebot import types
    +
    +
    +
    +[docs] +def open_io(item: types.InputMedia): + """ + Returns `InputMedia` with an opened file descriptor instead of path. + + :param item: InputMedia object. + """ + if isinstance(item.media, Path): + item.media = item.media.open(mode="rb") + return item
    + + + +
    +[docs] +def close_io(item: types.InputMedia): + """ + Closes an IO in an `InputMedia` object to perform the cleanup. + + :param item: InputMedia object. + """ + if isinstance(item.media, IOBase): + item.media.close()
    + + + +
    +[docs] +@contextmanager +def batch_open_io(item: Union[types.InputMedia, Iterable[types.InputMedia]]): + """ + Context manager that controls the state of file descriptors inside `InputMedia`. + Can be used both for single objects and collections. + + :param item: InputMedia objects that contain file descriptors. + """ + if isinstance(item, Iterable): + resources = list(map(open_io, item)) + else: + resources = open_io(item) + try: + yield resources + finally: + if isinstance(resources, Iterable): + for resource in resources: + close_io(resource) + else: + close_io(resources)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/conditions.html b/_modules/dff/pipeline/conditions.html new file mode 100644 index 0000000000..1f4b56880c --- /dev/null +++ b/_modules/dff/pipeline/conditions.html @@ -0,0 +1,693 @@ + + + + + + + + + + dff.pipeline.conditions — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.conditions

    +"""
    +Conditions
    +----------
    +The conditions module contains functions that can be used to determine whether the pipeline component to which they
    +are attached should be executed or not.
    +The standard set of them allows user to setup dependencies between pipeline components.
    +"""
    +from typing import Optional, ForwardRef
    +
    +from dff.script import Context
    +
    +from .types import (
    +    PIPELINE_STATE_KEY,
    +    StartConditionCheckerFunction,
    +    ComponentExecutionState,
    +    StartConditionCheckerAggregationFunction,
    +)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +def always_start_condition(_: Context, __: Pipeline) -> bool: + """ + Condition that always allows service execution. It's the default condition for all services. + + :param _: Current dialog context. + :param __: Pipeline. + """ + return True
    + + + +
    +[docs] +def service_successful_condition(path: Optional[str] = None) -> StartConditionCheckerFunction: + """ + Condition that allows service execution, only if the other service was executed successfully. + Returns :py:data:`~.StartConditionCheckerFunction`. + + :param path: The path of the condition pipeline component. + """ + + def check_service_state(ctx: Context, _: Pipeline): + state = ctx.framework_states[PIPELINE_STATE_KEY].get(path, ComponentExecutionState.NOT_RUN) + return ComponentExecutionState[state] == ComponentExecutionState.FINISHED + + return check_service_state
    + + + +
    +[docs] +def not_condition(func: StartConditionCheckerFunction) -> StartConditionCheckerFunction: + """ + Condition that returns opposite boolean value to the one returned by incoming function. + Returns :py:data:`~.StartConditionCheckerFunction`. + + :param func: The function to return opposite of. + """ + + def not_function(ctx: Context, pipeline: Pipeline): + return not func(ctx, pipeline) + + return not_function
    + + + +
    +[docs] +def aggregate_condition( + aggregator: StartConditionCheckerAggregationFunction, *functions: StartConditionCheckerFunction +) -> StartConditionCheckerFunction: + """ + Condition that returns aggregated boolean value from all booleans returned by incoming functions. + Returns :py:data:`~.StartConditionCheckerFunction`. + + :param aggregator: The function that accepts list of booleans and returns a single boolean. + :param functions: Functions to aggregate. + """ + + def aggregation_function(ctx: Context, pipeline: Pipeline): + return aggregator([func(ctx, pipeline) for func in functions]) + + return aggregation_function
    + + + +
    +[docs] +def all_condition(*functions: StartConditionCheckerFunction) -> StartConditionCheckerFunction: + """ + Condition that returns `True` only if all incoming functions return `True`. + Returns :py:data:`~.StartConditionCheckerFunction`. + + :param functions: Functions to aggregate. + """ + return aggregate_condition(all, *functions)
    + + + +
    +[docs] +def any_condition(*functions: StartConditionCheckerFunction) -> StartConditionCheckerFunction: + """ + Condition that returns `True` if any of incoming functions returns `True`. + Returns :py:data:`~.StartConditionCheckerFunction`. + + :param functions: Functions to aggregate. + """ + return aggregate_condition(any, *functions)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/pipeline/actor.html b/_modules/dff/pipeline/pipeline/actor.html new file mode 100644 index 0000000000..9f8e32e55a --- /dev/null +++ b/_modules/dff/pipeline/pipeline/actor.html @@ -0,0 +1,1031 @@ + + + + + + + + + + dff.pipeline.pipeline.actor — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.pipeline.actor

    +"""
    +Actor
    +-----
    +Actor is a component of :py:class:`.Pipeline`, that contains the :py:class:`.Script` and handles it.
    +It is responsible for processing user input and determining the appropriate response based
    +on the current state of the conversation and the script.
    +The actor receives requests in the form of a :py:class:`.Context` class, which contains
    +information about the user's input, the current state of the conversation, and other relevant data.
    +
    +The actor uses the dialog graph, represented by the :py:class:`.Script` class,
    +to determine the appropriate response. The script contains the structure of the conversation,
    +including the different `nodes` and `transitions`.
    +It defines the possible paths that the conversation can take, and the conditions that must be met
    +for a transition to occur. The actor uses this information to navigate the graph
    +and determine the next step in the conversation.
    +
    +Overall, the actor acts as a bridge between the user's input and the dialog graph,
    +making sure that the conversation follows the expected flow and providing a personalized experience to the user.
    +
    +Below you can see a diagram of user request processing with Actor.
    +Both `request` and `response` are saved to :py:class:`.Context`.
    +
    +.. figure:: /_static/drawio/dfe/user_actor.png
    +"""
    +import logging
    +from typing import Union, Callable, Optional, Dict, List, Any, ForwardRef
    +import copy
    +
    +from dff.utils.turn_caching import cache_clear
    +from dff.script.core.types import ActorStage, NodeLabel2Type, NodeLabel3Type, LabelType
    +from dff.script.core.message import Message
    +
    +from dff.script.core.context import Context
    +from dff.script.core.script import Script, Node
    +from dff.script.core.normalization import normalize_label, normalize_response
    +from dff.script.core.keywords import GLOBAL, LOCAL
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +def error_handler(error_msgs: list, msg: str, exception: Optional[Exception] = None, logging_flag: bool = True): + """ + This function handles errors during :py:class:`~dff.script.Script` validation. + + :param error_msgs: List that contains error messages. :py:func:`~dff.script.error_handler` + adds every next error message to that list. + :param msg: Error message which is to be added into `error_msgs`. + :param exception: Invoked exception. If it has been set, it is used to obtain logging traceback. + Defaults to `None`. + :param logging_flag: The flag which defines whether logging is necessary. Defaults to `True`. + """ + error_msgs.append(msg) + if logging_flag: + logger.error(msg, exc_info=exception)
    + + + +
    +[docs] +class Actor: + """ + The class which is used to process :py:class:`~dff.script.Context` + according to the :py:class:`~dff.script.Script`. + + :param script: The dialog scenario: a graph described by the :py:class:`.Keywords`. + While the graph is being initialized, it is validated and then used for the dialog. + :param start_label: The start node of :py:class:`~dff.script.Script`. The execution begins with it. + :param fallback_label: The label of :py:class:`~dff.script.Script`. + Dialog comes into that label if all other transitions failed, + or there was an error while executing the scenario. + Defaults to `None`. + :param label_priority: Default priority value for all :py:const:`labels <dff.script.NodeLabel3Type>` + where there is no priority. Defaults to `1.0`. + :param condition_handler: Handler that processes a call of condition functions. Defaults to `None`. + :param handlers: This variable is responsible for the usage of external handlers on + the certain stages of work of :py:class:`~dff.script.Actor`. + + - key (:py:class:`~dff.script.ActorStage`) - Stage in which the handler is called. + - value (List[Callable]) - The list of called handlers for each stage. Defaults to an empty `dict`. + """ + + def __init__( + self, + script: Union[Script, dict], + start_label: NodeLabel2Type, + fallback_label: Optional[NodeLabel2Type] = None, + label_priority: float = 1.0, + condition_handler: Optional[Callable] = None, + handlers: Optional[Dict[ActorStage, List[Callable]]] = None, + ): + # script validation + self.script = script if isinstance(script, Script) else Script(script=script) + self.label_priority = label_priority + + # node labels validation + self.start_label = normalize_label(start_label) + if self.script.get(self.start_label[0], {}).get(self.start_label[1]) is None: + raise ValueError(f"Unknown start_label={self.start_label}") + + if fallback_label is None: + self.fallback_label = self.start_label + else: + self.fallback_label = normalize_label(fallback_label) + if self.script.get(self.fallback_label[0], {}).get(self.fallback_label[1]) is None: + raise ValueError(f"Unknown fallback_label={self.fallback_label}") + self.condition_handler = default_condition_handler if condition_handler is None else condition_handler + + self.handlers = {} if handlers is None else handlers + + # NB! The following API is highly experimental and may be removed at ANY time WITHOUT FURTHER NOTICE!! + self._clean_turn_cache = True + + def __call__( + self, pipeline: Pipeline, ctx: Optional[Union[Context, dict, str]] = None, *args, **kwargs + ) -> Union[Context, dict, str]: + # context init + ctx = self._context_init(ctx, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.CONTEXT_INIT, *args, **kwargs) + + # get previous node + ctx = self._get_previous_node(ctx, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.GET_PREVIOUS_NODE, *args, **kwargs) + + # rewrite previous node + ctx = self._rewrite_previous_node(ctx, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.REWRITE_PREVIOUS_NODE, *args, **kwargs) + + # run pre transitions processing + ctx = self._run_pre_transitions_processing(ctx, pipeline, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.RUN_PRE_TRANSITIONS_PROCESSING, *args, **kwargs) + + # get true labels for scopes (GLOBAL, LOCAL, NODE) + ctx = self._get_true_labels(ctx, pipeline, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.GET_TRUE_LABELS, *args, **kwargs) + + # get next node + ctx = self._get_next_node(ctx, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.GET_NEXT_NODE, *args, **kwargs) + + ctx.add_label(ctx.framework_states["actor"]["next_label"][:2]) + + # rewrite next node + ctx = self._rewrite_next_node(ctx, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.REWRITE_NEXT_NODE, *args, **kwargs) + + # run pre response processing + ctx = self._run_pre_response_processing(ctx, pipeline, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.RUN_PRE_RESPONSE_PROCESSING, *args, **kwargs) + + # create response + ctx.framework_states["actor"]["response"] = ctx.framework_states["actor"][ + "pre_response_processed_node" + ].run_response(ctx, pipeline, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.CREATE_RESPONSE, *args, **kwargs) + ctx.add_response(ctx.framework_states["actor"]["response"]) + + self._run_handlers(ctx, pipeline, ActorStage.FINISH_TURN, *args, **kwargs) + if self._clean_turn_cache: + cache_clear() + + del ctx.framework_states["actor"] + return ctx + +
    +[docs] + @staticmethod + def _context_init(ctx: Optional[Union[Context, dict, str]] = None, *args, **kwargs) -> Context: + ctx = Context.cast(ctx) + if not ctx.requests: + ctx.add_request(Message()) + ctx.framework_states["actor"] = {} + return ctx
    + + +
    +[docs] + def _get_previous_node(self, ctx: Context, *args, **kwargs) -> Context: + ctx.framework_states["actor"]["previous_label"] = ( + normalize_label(ctx.last_label) if ctx.last_label else self.start_label + ) + ctx.framework_states["actor"]["previous_node"] = self.script.get( + ctx.framework_states["actor"]["previous_label"][0], {} + ).get(ctx.framework_states["actor"]["previous_label"][1], Node()) + return ctx
    + + +
    +[docs] + def _get_true_labels(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + # GLOBAL + ctx.framework_states["actor"]["global_transitions"] = ( + self.script.get(GLOBAL, {}).get(GLOBAL, Node()).transitions + ) + ctx.framework_states["actor"]["global_true_label"] = self._get_true_label( + ctx.framework_states["actor"]["global_transitions"], ctx, pipeline, GLOBAL, "global" + ) + + # LOCAL + ctx.framework_states["actor"]["local_transitions"] = ( + self.script.get(ctx.framework_states["actor"]["previous_label"][0], {}).get(LOCAL, Node()).transitions + ) + ctx.framework_states["actor"]["local_true_label"] = self._get_true_label( + ctx.framework_states["actor"]["local_transitions"], + ctx, + pipeline, + ctx.framework_states["actor"]["previous_label"][0], + "local", + ) + + # NODE + ctx.framework_states["actor"]["node_transitions"] = ctx.framework_states["actor"][ + "pre_transitions_processed_node" + ].transitions + ctx.framework_states["actor"]["node_true_label"] = self._get_true_label( + ctx.framework_states["actor"]["node_transitions"], + ctx, + pipeline, + ctx.framework_states["actor"]["previous_label"][0], + "node", + ) + return ctx
    + + +
    +[docs] + def _get_next_node(self, ctx: Context, *args, **kwargs) -> Context: + # choose next label + ctx.framework_states["actor"]["next_label"] = self._choose_label( + ctx.framework_states["actor"]["node_true_label"], ctx.framework_states["actor"]["local_true_label"] + ) + ctx.framework_states["actor"]["next_label"] = self._choose_label( + ctx.framework_states["actor"]["next_label"], ctx.framework_states["actor"]["global_true_label"] + ) + # get next node + ctx.framework_states["actor"]["next_node"] = self.script.get( + ctx.framework_states["actor"]["next_label"][0], {} + ).get(ctx.framework_states["actor"]["next_label"][1]) + return ctx
    + + +
    +[docs] + def _rewrite_previous_node(self, ctx: Context, *args, **kwargs) -> Context: + node = ctx.framework_states["actor"]["previous_node"] + flow_label = ctx.framework_states["actor"]["previous_label"][0] + ctx.framework_states["actor"]["previous_node"] = self._overwrite_node( + node, + flow_label, + only_current_node_transitions=True, + ) + return ctx
    + + +
    +[docs] + def _rewrite_next_node(self, ctx: Context, *args, **kwargs) -> Context: + node = ctx.framework_states["actor"]["next_node"] + flow_label = ctx.framework_states["actor"]["next_label"][0] + ctx.framework_states["actor"]["next_node"] = self._overwrite_node(node, flow_label) + return ctx
    + + +
    +[docs] + def _overwrite_node( + self, + current_node: Node, + flow_label: LabelType, + *args, + only_current_node_transitions: bool = False, + **kwargs, + ) -> Node: + overwritten_node = copy.deepcopy(self.script.get(GLOBAL, {}).get(GLOBAL, Node())) + local_node = self.script.get(flow_label, {}).get(LOCAL, Node()) + for node in [local_node, current_node]: + overwritten_node.pre_transitions_processing.update(node.pre_transitions_processing) + overwritten_node.pre_response_processing.update(node.pre_response_processing) + overwritten_node.response = overwritten_node.response if node.response is None else node.response + overwritten_node.misc.update(node.misc) + if not only_current_node_transitions: + overwritten_node.transitions.update(node.transitions) + if only_current_node_transitions: + overwritten_node.transitions = current_node.transitions + return overwritten_node
    + + +
    +[docs] + def _run_pre_transitions_processing(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + ctx.framework_states["actor"]["processed_node"] = copy.deepcopy(ctx.framework_states["actor"]["previous_node"]) + ctx = ctx.framework_states["actor"]["previous_node"].run_pre_transitions_processing( + ctx, pipeline, *args, **kwargs + ) + ctx.framework_states["actor"]["pre_transitions_processed_node"] = ctx.framework_states["actor"][ + "processed_node" + ] + del ctx.framework_states["actor"]["processed_node"] + return ctx
    + + +
    +[docs] + def _run_pre_response_processing(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + ctx.framework_states["actor"]["processed_node"] = copy.deepcopy(ctx.framework_states["actor"]["next_node"]) + ctx = ctx.framework_states["actor"]["next_node"].run_pre_response_processing(ctx, pipeline, *args, **kwargs) + ctx.framework_states["actor"]["pre_response_processed_node"] = ctx.framework_states["actor"]["processed_node"] + del ctx.framework_states["actor"]["processed_node"] + return ctx
    + + +
    +[docs] + def _get_true_label( + self, + transitions: dict, + ctx: Context, + pipeline: Pipeline, + flow_label: LabelType, + transition_info: str = "", + *args, + **kwargs, + ) -> Optional[NodeLabel3Type]: + true_labels = [] + for label, condition in transitions.items(): + if self.condition_handler(condition, ctx, pipeline, *args, **kwargs): + if callable(label): + label = label(ctx, pipeline, *args, **kwargs) + # TODO: explicit handling of errors + if label is None: + continue + label = normalize_label(label, flow_label) + true_labels += [label] + true_labels = [ + ((label[0] if label[0] else flow_label),) + + label[1:2] + + ((self.label_priority if label[2] == float("-inf") else label[2]),) + for label in true_labels + ] + true_labels.sort(key=lambda label: -label[2]) + true_label = true_labels[0] if true_labels else None + logger.debug(f"{transition_info} transitions sorted by priority = {true_labels}") + return true_label
    + + +
    +[docs] + def _run_handlers(self, ctx, pipeline: Pipeline, actor_stage: ActorStage, *args, **kwargs): + [handler(ctx, pipeline, *args, **kwargs) for handler in self.handlers.get(actor_stage, [])]
    + + +
    +[docs] + def _choose_label( + self, specific_label: Optional[NodeLabel3Type], general_label: Optional[NodeLabel3Type] + ) -> NodeLabel3Type: + if all([specific_label, general_label]): + chosen_label = specific_label if specific_label[2] >= general_label[2] else general_label + elif any([specific_label, general_label]): + chosen_label = specific_label if specific_label else general_label + else: + chosen_label = self.fallback_label + return chosen_label
    + + +
    +[docs] + def validate_script(self, pipeline: Pipeline, verbose: bool = True): + # TODO: script has to not contain priority == -inf, because it uses for miss values + flow_labels = [] + node_labels = [] + labels = [] + conditions = [] + for flow_name, flow in self.script.items(): + for node_name, node in flow.items(): + flow_labels += [flow_name] * len(node.transitions) + node_labels += [node_name] * len(node.transitions) + labels += list(node.transitions.keys()) + conditions += list(node.transitions.values()) + + error_msgs = [] + for flow_label, node_label, label, condition in zip(flow_labels, node_labels, labels, conditions): + ctx = Context() + ctx.validation = True + ctx.add_request(Message(text="text")) + + label = label(ctx, pipeline) if callable(label) else normalize_label(label, flow_label) + + # validate labeling + try: + node = self.script[label[0]][label[1]] + except Exception as exc: + msg = ( + f"Could not find node with label={label}, " + f"error was found in (flow_label, node_label)={(flow_label, node_label)}" + ) + error_handler(error_msgs, msg, exc, verbose) + break + + # validate responsing + response_func = normalize_response(node.response) + try: + response_result = response_func(ctx, pipeline) + if not isinstance(response_result, Message): + msg = ( + "Expected type of response_result is `Message`.\n" + + f"Got type(response_result)={type(response_result)}" + f" for label={label} , error was found in (flow_label, node_label)={(flow_label, node_label)}" + ) + error_handler(error_msgs, msg, None, verbose) + continue + except Exception as exc: + msg = ( + f"Got exception '''{exc}''' during response execution " + f"for label={label} and node.response={node.response}" + f", error was found in (flow_label, node_label)={(flow_label, node_label)}" + ) + error_handler(error_msgs, msg, exc, verbose) + continue + + # validate conditioning + try: + condition_result = condition(ctx, pipeline) + if not isinstance(condition(ctx, pipeline), bool): + raise Exception(f"Returned condition_result={condition_result}, but expected bool type") + except Exception as exc: + msg = f"Got exception '''{exc}''' during condition execution for label={label}" + error_handler(error_msgs, msg, exc, verbose) + continue + return error_msgs
    +
    + + + +
    +[docs] +def default_condition_handler( + condition: Callable, ctx: Context, pipeline: Pipeline, *args, **kwargs +) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + The simplest and quickest condition handler for trivial condition handling returns the callable condition: + + :param condition: Condition to copy. + :param ctx: Context of current condition. + :param pipeline: Pipeline we use in this condition. + """ + return condition(ctx, pipeline, *args, **kwargs)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/pipeline/component.html b/_modules/dff/pipeline/pipeline/component.html new file mode 100644 index 0000000000..ed8c3afb36 --- /dev/null +++ b/_modules/dff/pipeline/pipeline/component.html @@ -0,0 +1,843 @@ + + + + + + + + + + dff.pipeline.pipeline.component — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.pipeline.component

    +"""
    +Component
    +---------
    +The Component module defines a :py:class:`.PipelineComponent` class,
    +which is a fundamental building block of the framework. A PipelineComponent represents a single
    +step in a processing pipeline, and is responsible for performing a specific task or set of tasks.
    +
    +The PipelineComponent class can be a group or a service. It is designed to be reusable and composable,
    +allowing developers to create complex processing pipelines by combining multiple components.
    +"""
    +import logging
    +import abc
    +import asyncio
    +import copy
    +from typing import Optional, Union, Awaitable, ForwardRef
    +
    +from dff.script import Context
    +
    +from ..service.extra import BeforeHandler, AfterHandler
    +from ..conditions import always_start_condition
    +from ..types import (
    +    PIPELINE_STATE_KEY,
    +    StartConditionCheckerFunction,
    +    ComponentExecutionState,
    +    ServiceRuntimeInfo,
    +    GlobalExtraHandlerType,
    +    ExtraHandlerFunction,
    +    ExtraHandlerType,
    +    ExtraHandlerBuilder,
    +)
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +class PipelineComponent(abc.ABC): + """ + This class represents a pipeline component, which is a service or a service group. + It contains some fields that they have in common. + + :param before_handler: :py:class:`~.BeforeHandler`, associated with this component. + :type before_handler: Optional[:py:data:`~.ExtraHandlerBuilder`] + :param after_handler: :py:class:`~.AfterHandler`, associated with this component. + :type after_handler: Optional[:py:data:`~.ExtraHandlerBuilder`] + :param timeout: (for asynchronous only!) Maximum component execution time (in seconds), + if it exceeds this time, it is interrupted. + :param requested_async_flag: Requested asynchronous property; + if not defined, `calculated_async_flag` is used instead. + :param calculated_async_flag: Whether the component can be asynchronous or not + 1) for :py:class:`~.pipeline.service.service.Service`: whether its `handler` is asynchronous or not, + 2) for :py:class:`~.pipeline.service.group.ServiceGroup`: whether all its `services` are asynchronous or not. + + :param start_condition: StartConditionCheckerFunction that is invoked before each component execution; + component is executed only if it returns `True`. + :type start_condition: Optional[:py:data:`~.StartConditionCheckerFunction`] + :param name: Component name (should be unique in single :py:class:`~.pipeline.service.group.ServiceGroup`), + should not be blank or contain `.` symbol. + :param path: Separated by dots path to component, is universally unique. + """ + + def __init__( + self, + before_handler: Optional[ExtraHandlerBuilder] = None, + after_handler: Optional[ExtraHandlerBuilder] = None, + timeout: Optional[float] = None, + requested_async_flag: Optional[bool] = None, + calculated_async_flag: bool = False, + start_condition: Optional[StartConditionCheckerFunction] = None, + name: Optional[str] = None, + path: Optional[str] = None, + ): + self.timeout = timeout + """ + Maximum component execution time (in seconds), + if it exceeds this time, it is interrupted (for asynchronous only!). + """ + self.requested_async_flag = requested_async_flag + """Requested asynchronous property; if not defined, :py:attr:`~requested_async_flag` is used instead.""" + self.calculated_async_flag = calculated_async_flag + """Calculated asynchronous property, whether the component can be asynchronous or not.""" + self.start_condition = always_start_condition if start_condition is None else start_condition + """ + Component start condition that is invoked before each component execution; + component is executed only if it returns `True`. + """ + self.name = name + """ + Component name (should be unique in single :py:class:`~pipeline.service.group.ServiceGroup`), + should not be blank or contain '.' symbol. + """ + self.path = path + """ + Dot-separated path to component (is universally unique). + This attribute is set in :py:func:`~dff.pipeline.pipeline.utils.finalize_service_group`. + """ + + self.before_handler = BeforeHandler([] if before_handler is None else before_handler) + self.after_handler = AfterHandler([] if after_handler is None else after_handler) + + if name is not None and (name == "" or "." in name): + raise Exception(f"User defined service name shouldn't be blank or contain '.' (service: {name})!") + + if not calculated_async_flag and requested_async_flag: + raise Exception(f"{type(self).__name__} '{name}' can't be asynchronous!") + +
    +[docs] + def _set_state(self, ctx: Context, value: ComponentExecutionState): + """ + Method for component runtime state setting, state is preserved in `ctx.framework_states` dict, + in subdict, dedicated to this library. + + :param ctx: :py:class:`~.Context` to keep state in. + :param value: State to set. + :return: `None` + """ + if PIPELINE_STATE_KEY not in ctx.framework_states: + ctx.framework_states[PIPELINE_STATE_KEY] = {} + ctx.framework_states[PIPELINE_STATE_KEY][self.path] = value
    + + +
    +[docs] + def get_state(self, ctx: Context, default: Optional[ComponentExecutionState] = None) -> ComponentExecutionState: + """ + Method for component runtime state getting, state is preserved in `ctx.framework_states` dict, + in subdict, dedicated to this library. + + :param ctx: :py:class:`~.Context` to get state from. + :param default: Default to return if no record found + (usually it's :py:attr:`~.pipeline.types.ComponentExecutionState.NOT_RUN`). + :return: :py:class:`~pipeline.types.ComponentExecutionState` of this service or default if not found. + """ + return ctx.framework_states[PIPELINE_STATE_KEY].get(self.path, default if default is not None else None)
    + + + @property + def asynchronous(self) -> bool: + """ + Property, that indicates, whether this component is synchronous or asynchronous. + It is calculated according to the following rules: + + - | If component **can** be asynchronous and :py:attr:`~requested_async_flag` is set, + it returns :py:attr:`~requested_async_flag`. + - | If component **can** be asynchronous and :py:attr:`~requested_async_flag` isn't set, + it returns `True`. + - | If component **can't** be asynchronous and :py:attr:`~requested_async_flag` is `False` or not set, + it returns `False`. + - | If component **can't** be asynchronous and :py:attr:`~requested_async_flag` is `True`, + an Exception is thrown in constructor. + + """ + return self.calculated_async_flag if self.requested_async_flag is None else self.requested_async_flag + +
    +[docs] + async def run_extra_handler(self, stage: ExtraHandlerType, ctx: Context, pipeline: Pipeline): + extra_handler = None + if stage == ExtraHandlerType.BEFORE: + extra_handler = self.before_handler + if stage == ExtraHandlerType.AFTER: + extra_handler = self.after_handler + if extra_handler is None: + return + try: + extra_handler_result = await extra_handler(ctx, pipeline, self._get_runtime_info(ctx)) + if extra_handler.asynchronous and isinstance(extra_handler_result, Awaitable): + await extra_handler_result + except asyncio.TimeoutError: + logger.warning(f"{type(self).__name__} '{self.name}' {extra_handler.stage} extra handler timed out!")
    + + +
    +[docs] + @abc.abstractmethod + async def _run(self, ctx: Context, pipeline: Optional[Pipeline] = None) -> Optional[Context]: + """ + A method for running pipeline component, it is overridden in all its children. + This method is run after the component's timeout is set (if needed). + + :param ctx: Current dialog :py:class:`~.Context`. + :param pipeline: This :py:class:`~.Pipeline`. + :return: :py:class:`~.Context` if this is a synchronous service or `None`, + asynchronous services shouldn't modify :py:class:`~.Context`. + """ + raise NotImplementedError
    + + + async def __call__(self, ctx: Context, pipeline: Optional[Pipeline] = None) -> Optional[Union[Context, Awaitable]]: + """ + A method for calling pipeline components. + It sets up timeout if this component is asynchronous and executes it using :py:meth:`~._run` method. + + :param ctx: Current dialog :py:class:`~.Context`. + :param pipeline: This :py:class:`~.Pipeline`. + :return: :py:class:`~.Context` if this is a synchronous service or :py:class:`~.typing.const.Awaitable`, + asynchronous services shouldn't modify :py:class:`~.Context`. + """ + if self.asynchronous: + task = asyncio.create_task(self._run(ctx, pipeline)) + return asyncio.wait_for(task, timeout=self.timeout) + else: + return await self._run(ctx, pipeline) + +
    +[docs] + def add_extra_handler(self, global_extra_handler_type: GlobalExtraHandlerType, extra_handler: ExtraHandlerFunction): + """ + Method for adding a global extra handler to this particular component. + + :param global_extra_handler_type: A type of extra handler to add. + :param extra_handler: A :py:class:`~.GlobalExtraHandlerType` to add to the component as an extra handler. + :type extra_handler: :py:data:`~.ExtraHandlerFunction` + :return: `None` + """ + target = ( + self.before_handler if global_extra_handler_type is GlobalExtraHandlerType.BEFORE else self.after_handler + ) + target.functions.append(extra_handler)
    + + +
    +[docs] + def _get_runtime_info(self, ctx: Context) -> ServiceRuntimeInfo: + """ + Method for retrieving runtime info about this component. + + :param ctx: Current dialog :py:class:`~.Context`. + :return: :py:class:`~.dff.script.typing.ServiceRuntimeInfo` + object where all not set fields are replaced with `[None]`. + """ + return ServiceRuntimeInfo( + name=self.name if self.name is not None else "[None]", + path=self.path if self.path is not None else "[None]", + timeout=self.timeout, + asynchronous=self.asynchronous, + execution_state=copy.deepcopy(ctx.framework_states[PIPELINE_STATE_KEY]), + )
    + + + @property + def info_dict(self) -> dict: + """ + Property for retrieving info dictionary about this component. + All not set fields there are replaced with `[None]`. + + :return: Info dict, containing most important component public fields as well as its type. + """ + return { + "type": type(self).__name__, + "name": self.name, + "path": self.path if self.path is not None else "[None]", + "asynchronous": self.asynchronous, + "start_condition": self.start_condition.__name__, + "extra_handlers": { + "before": self.before_handler.info_dict, + "after": self.after_handler.info_dict, + }, + }
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/pipeline/pipeline.html b/_modules/dff/pipeline/pipeline/pipeline.html new file mode 100644 index 0000000000..36a0301875 --- /dev/null +++ b/_modules/dff/pipeline/pipeline/pipeline.html @@ -0,0 +1,972 @@ + + + + + + + + + + dff.pipeline.pipeline.pipeline — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.pipeline.pipeline

    +"""
    +Pipeline
    +--------
    +The Pipeline module contains the :py:class:`.Pipeline` class,
    +which is a fundamental element of the DFF. The Pipeline class is responsible
    +for managing and executing the various components (:py:class:`.PipelineComponent`)which make up
    +the processing of messages from and to users.
    +It provides a way to organize and structure the messages processing flow.
    +The Pipeline class is designed to be highly customizable and configurable,
    +allowing developers to add, remove, or modify the components that make up the messages processing flow.
    +
    +The Pipeline class is designed to be used in conjunction with the :py:class:`.PipelineComponent`
    +class, which is defined in the Component module. Together, these classes provide a powerful and flexible way
    +to structure and manage the messages processing flow.
    +"""
    +import asyncio
    +import logging
    +from typing import Union, List, Dict, Optional, Hashable, Callable
    +
    +from dff.context_storages import DBContextStorage
    +from dff.script import Script, Context, ActorStage
    +from dff.script import NodeLabel2Type, Message
    +from dff.utils.turn_caching import cache_clear
    +
    +from dff.messengers.common import MessengerInterface, CLIMessengerInterface
    +from ..service.group import ServiceGroup
    +from ..types import (
    +    ServiceBuilder,
    +    ServiceGroupBuilder,
    +    PipelineBuilder,
    +    GlobalExtraHandlerType,
    +    ExtraHandlerFunction,
    +    ExtraHandlerBuilder,
    +)
    +from ..types import PIPELINE_STATE_KEY
    +from .utils import finalize_service_group, pretty_format_component_info_dict
    +from dff.pipeline.pipeline.actor import Actor
    +
    +logger = logging.getLogger(__name__)
    +
    +ACTOR = "ACTOR"
    +
    +
    +
    +[docs] +class Pipeline: + """ + Class that automates service execution and creates service pipeline. + It accepts constructor parameters: + + :param script: (required) A :py:class:`~.Script` instance (object or dict). + :param start_label: (required) Actor start label. + :param fallback_label: Actor fallback label. + :param label_priority: Default priority value for all actor :py:const:`labels <dff.script.NodeLabel3Type>` + where there is no priority. Defaults to `1.0`. + :param validation_stage: This flag sets whether the validation stage is executed after actor creation. + It is executed by default. Defaults to `None`. + :param condition_handler: Handler that processes a call of actor condition functions. Defaults to `None`. + :param verbose: If it is `True`, logging is used in actor. Defaults to `True`. + :param handlers: This variable is responsible for the usage of external handlers on + the certain stages of work of :py:class:`~dff.script.Actor`. + + - key: :py:class:`~dff.script.ActorStage` - Stage in which the handler is called. + - value: List[Callable] - The list of called handlers for each stage. Defaults to an empty `dict`. + + :param messenger_interface: An `AbsMessagingInterface` instance for this pipeline. + :param context_storage: An :py:class:`~.DBContextStorage` instance for this pipeline or + a dict to store dialog :py:class:`~.Context`. + :param services: (required) A :py:data:`~.ServiceGroupBuilder` object, + that will be transformed to root service group. It should include :py:class:`~.Actor`, + but only once (raises exception otherwise). It will always be named pipeline. + :param wrappers: List of wrappers to add to pipeline root service group. + :param timeout: Timeout to add to pipeline root service group. + :param optimization_warnings: Asynchronous pipeline optimization check request flag; + warnings will be sent to logs. Additionally it has some calculated fields: + + - `_services_pipeline` is a pipeline root :py:class:`~.ServiceGroup` object, + - `actor` is a pipeline actor, found among services. + + """ + + def __init__( + self, + components: ServiceGroupBuilder, + script: Union[Script, Dict], + start_label: NodeLabel2Type, + fallback_label: Optional[NodeLabel2Type] = None, + label_priority: float = 1.0, + validation_stage: Optional[bool] = None, + condition_handler: Optional[Callable] = None, + verbose: bool = True, + handlers: Optional[Dict[ActorStage, List[Callable]]] = None, + messenger_interface: Optional[MessengerInterface] = None, + context_storage: Optional[Union[DBContextStorage, Dict]] = None, + before_handler: Optional[ExtraHandlerBuilder] = None, + after_handler: Optional[ExtraHandlerBuilder] = None, + timeout: Optional[float] = None, + optimization_warnings: bool = False, + ): + self.actor: Actor = None + self.messenger_interface = CLIMessengerInterface() if messenger_interface is None else messenger_interface + self.context_storage = {} if context_storage is None else context_storage + self._services_pipeline = ServiceGroup( + components, + before_handler=before_handler, + after_handler=after_handler, + timeout=timeout, + ) + + self._services_pipeline.name = "pipeline" + self._services_pipeline.path = ".pipeline" + actor_exists = finalize_service_group(self._services_pipeline, path=self._services_pipeline.path) + if not actor_exists: + raise Exception("Actor not found in pipeline!") + else: + self.set_actor( + script, + start_label, + fallback_label, + label_priority, + validation_stage, + condition_handler, + verbose, + handlers, + ) + if self.actor is None: + raise Exception("Actor wasn't initialized correctly!") + + if optimization_warnings: + self._services_pipeline.log_optimization_warnings() + + # NB! The following API is highly experimental and may be removed at ANY time WITHOUT FURTHER NOTICE!! + self._clean_turn_cache = True + if self._clean_turn_cache: + self.actor._clean_turn_cache = False + +
    +[docs] + def add_global_handler( + self, + global_handler_type: GlobalExtraHandlerType, + extra_handler: ExtraHandlerFunction, + whitelist: Optional[List[str]] = None, + blacklist: Optional[List[str]] = None, + ): + """ + Method for adding global wrappers to pipeline. + Different types of global wrappers are called before/after pipeline execution + or before/after each pipeline component. + They can be used for pipeline statistics collection or other functionality extensions. + NB! Global wrappers are still wrappers, + they shouldn't be used for much time-consuming tasks (see ../service/wrapper.py). + + :param global_handler_type: (required) indication where the wrapper + function should be executed. + :param extra_handler: (required) wrapper function itself. + :type extra_handler: ExtraHandlerFunction + :param whitelist: a list of services to only add this wrapper to. + :param blacklist: a list of services to not add this wrapper to. + :return: `None` + """ + + def condition(name: str) -> bool: + return (whitelist is None or name in whitelist) and (blacklist is None or name not in blacklist) + + if ( + global_handler_type is GlobalExtraHandlerType.BEFORE_ALL + or global_handler_type is GlobalExtraHandlerType.AFTER_ALL + ): + whitelist = ["pipeline"] + global_handler_type = ( + GlobalExtraHandlerType.BEFORE + if global_handler_type is GlobalExtraHandlerType.BEFORE_ALL + else GlobalExtraHandlerType.AFTER + ) + + self._services_pipeline.add_extra_handler(global_handler_type, extra_handler, condition)
    + + + @property + def info_dict(self) -> dict: + """ + Property for retrieving info dictionary about this pipeline. + Returns info dict, containing most important component public fields as well as its type. + All complex or unserializable fields here are replaced with 'Instance of [type]'. + """ + return { + "type": type(self).__name__, + "messenger_interface": f"Instance of {type(self.messenger_interface).__name__}", + "context_storage": f"Instance of {type(self.context_storage).__name__}", + "services": [self._services_pipeline.info_dict], + } + +
    +[docs] + def pretty_format(self, show_extra_handlers: bool = False, indent: int = 4) -> str: + """ + Method for receiving pretty-formatted string description of the pipeline. + Resulting string structure is somewhat similar to YAML string. + Should be used in debugging/logging purposes and should not be parsed. + + :param show_wrappers: Whether to include Wrappers or not (could be many and/or generated). + :param indent: Offset from new line to add before component children. + """ + return pretty_format_component_info_dict(self.info_dict, show_extra_handlers, indent=indent)
    + + +
    +[docs] + @classmethod + def from_script( + cls, + script: Union[Script, Dict], + start_label: NodeLabel2Type, + fallback_label: Optional[NodeLabel2Type] = None, + label_priority: float = 1.0, + validation_stage: Optional[bool] = None, + condition_handler: Optional[Callable] = None, + verbose: bool = True, + handlers: Optional[Dict[ActorStage, List[Callable]]] = None, + context_storage: Optional[Union[DBContextStorage, Dict]] = None, + messenger_interface: Optional[MessengerInterface] = None, + pre_services: Optional[List[Union[ServiceBuilder, ServiceGroupBuilder]]] = None, + post_services: Optional[List[Union[ServiceBuilder, ServiceGroupBuilder]]] = None, + ) -> "Pipeline": + """ + Pipeline script-based constructor. + It creates :py:class:`~.Actor` object and wraps it with pipeline. + NB! It is generally not designed for projects with complex structure. + :py:class:`~.Service` and :py:class:`~.ServiceGroup` customization + becomes not as obvious as it could be with it. + Should be preferred for simple workflows with Actor auto-execution. + + :param script: (required) A :py:class:`~.Script` instance (object or dict). + :param start_label: (required) Actor start label. + :param fallback_label: Actor fallback label. + :param label_priority: Default priority value for all actor :py:const:`labels <dff.script.NodeLabel3Type>` + where there is no priority. Defaults to `1.0`. + :param validation_stage: This flag sets whether the validation stage is executed after actor creation. + It is executed by default. Defaults to `None`. + :param condition_handler: Handler that processes a call of actor condition functions. Defaults to `None`. + :param verbose: If it is `True`, logging is used in actor. Defaults to `True`. + :param handlers: This variable is responsible for the usage of external handlers on + the certain stages of work of :py:class:`~dff.script.Actor`. + + - key: :py:class:`~dff.script.ActorStage` - Stage in which the handler is called. + - value: List[Callable] - The list of called handlers for each stage. Defaults to an empty `dict`. + + :param context_storage: An :py:class:`~.DBContextStorage` instance for this pipeline + or a dict to store dialog :py:class:`~.Context`. + :param messenger_interface: An instance for this pipeline. + :param pre_services: List of :py:data:`~.ServiceBuilder` or + :py:data:`~.ServiceGroupBuilder` that will be executed before Actor. + :type pre_services: Optional[List[Union[ServiceBuilder, ServiceGroupBuilder]]] + :param post_services: List of :py:data:`~.ServiceBuilder` or + :py:data:`~.ServiceGroupBuilder` that will be executed after Actor. + It constructs root service group by merging `pre_services` + actor + `post_services`. + :type post_services: Optional[List[Union[ServiceBuilder, ServiceGroupBuilder]]] + """ + pre_services = [] if pre_services is None else pre_services + post_services = [] if post_services is None else post_services + return cls( + script=script, + start_label=start_label, + fallback_label=fallback_label, + label_priority=label_priority, + validation_stage=validation_stage, + condition_handler=condition_handler, + verbose=verbose, + handlers=handlers, + messenger_interface=messenger_interface, + context_storage=context_storage, + components=[*pre_services, ACTOR, *post_services], + )
    + + +
    +[docs] + def set_actor( + self, + script: Union[Script, Dict], + start_label: NodeLabel2Type, + fallback_label: Optional[NodeLabel2Type] = None, + label_priority: float = 1.0, + validation_stage: Optional[bool] = None, + condition_handler: Optional[Callable] = None, + verbose: bool = True, + handlers: Optional[Dict[ActorStage, List[Callable]]] = None, + ): + """ + Set actor for the current pipeline and conducts necessary checks. + Reset actor to previous if any errors are found. + + :param script: (required) A :py:class:`~.Script` instance (object or dict). + :param start_label: (required) Actor start label. + The start node of :py:class:`~dff.script.Script`. The execution begins with it. + :param fallback_label: Actor fallback label. The label of :py:class:`~dff.script.Script`. + Dialog comes into that label if all other transitions failed, + or there was an error while executing the scenario. + :param label_priority: Default priority value for all actor :py:const:`labels <dff.script.NodeLabel3Type>` + where there is no priority. Defaults to `1.0`. + :param validation_stage: This flag sets whether the validation stage is executed in actor. + It is executed by default. Defaults to `None`. + :param condition_handler: Handler that processes a call of actor condition functions. Defaults to `None`. + :param verbose: If it is `True`, logging is used in actor. Defaults to `True`. + :param handlers: This variable is responsible for the usage of external handlers on + the certain stages of work of :py:class:`~dff.script.Actor`. + + - key :py:class:`~dff.script.ActorStage` - Stage in which the handler is called. + - value List[Callable] - The list of called handlers for each stage. Defaults to an empty `dict`. + """ + old_actor = self.actor + self.actor = Actor(script, start_label, fallback_label, label_priority, condition_handler, handlers) + errors = self.actor.validate_script(self, verbose) if validation_stage is not False else [] + if errors: + self.actor = old_actor + raise ValueError( + f"Found {len(errors)} errors: " + " ".join([f"{i}) {er}" for i, er in enumerate(errors, 1)]) + )
    + + +
    +[docs] + @classmethod + def from_dict(cls, dictionary: PipelineBuilder) -> "Pipeline": + """ + Pipeline dictionary-based constructor. + Dictionary should have the fields defined in Pipeline main constructor, + it will be split and passed to it as `**kwargs`. + """ + return cls(**dictionary)
    + + +
    +[docs] + async def _run_pipeline(self, request: Message, ctx_id: Optional[Hashable] = None) -> Context: + """ + Method that runs pipeline once for user request. + + :param request: (required) Any user request. + :param ctx_id: Current dialog id; if `None`, new dialog will be created. + :return: Dialog `Context`. + """ + if isinstance(self.context_storage, DBContextStorage): + ctx = await self.context_storage.get_async(ctx_id, Context(id=ctx_id)) + else: + ctx = self.context_storage.get(ctx_id, Context(id=ctx_id)) + + ctx.framework_states[PIPELINE_STATE_KEY] = {} + ctx.add_request(request) + ctx = await self._services_pipeline(ctx, self) + del ctx.framework_states[PIPELINE_STATE_KEY] + + if isinstance(self.context_storage, DBContextStorage): + await self.context_storage.set_item_async(ctx_id, ctx) + else: + self.context_storage[ctx_id] = ctx + if self._clean_turn_cache: + cache_clear() + + return ctx
    + + +
    +[docs] + def run(self): + """ + Method that starts a pipeline and connects to `messenger_interface`. + It passes `_run_pipeline` to `messenger_interface` as a callbacks, + so every time user request is received, `_run_pipeline` will be called. + This method can be both blocking and non-blocking. It depends on current `messenger_interface` nature. + Message interfaces that run in a loop block current thread. + """ + asyncio.run(self.messenger_interface.connect(self._run_pipeline))
    + + + def __call__(self, request: Message, ctx_id: Hashable) -> Context: + """ + Method that executes pipeline once. + Basically, it is a shortcut for `_run_pipeline`. + NB! When pipeline is executed this way, `messenger_interface` won't be initiated nor connected. + + :param request: Any user request. + :param ctx_id: Current dialog id. + :return: Dialog `Context`. + """ + return asyncio.run(self._run_pipeline(request, ctx_id)) + + @property + def script(self) -> Script: + return self.actor.script
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/pipeline/utils.html b/_modules/dff/pipeline/pipeline/utils.html new file mode 100644 index 0000000000..bee092e39a --- /dev/null +++ b/_modules/dff/pipeline/pipeline/utils.html @@ -0,0 +1,718 @@ + + + + + + + + + + dff.pipeline.pipeline.utils — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.pipeline.utils

    +"""
    +Utils
    +-----
    +The Utils module contains several service functions that are commonly used throughout the framework.
    +These functions provide a variety of utility functionality.
    +"""
    +import collections
    +from typing import Union, List
    +from inspect import isfunction
    +
    +from ..service.service import Service
    +from ..service.group import ServiceGroup
    +
    +
    +
    +[docs] +def pretty_format_component_info_dict( + service: dict, + show_extra_handlers: bool, + offset: str = "", + extra_handlers_key: str = "extra_handlers", + type_key: str = "type", + name_key: str = "name", + indent: int = 4, +) -> str: + """ + Function for dumping any pipeline components info dictionary (received from `info_dict` property) as a string. + Resulting string is formatted with YAML-like format, however it's not strict and shouldn't be parsed. + However, most preferable usage is via `pipeline.pretty_format`. + + :param service: (required) Pipeline components info dictionary. + :param show_wrappers: (required) Whether to include Wrappers or not (could be many and/or generated). + :param offset: Current level new line offset. + :param wrappers_key: Key that is mapped to Wrappers lists. + :param type_key: Key that is mapped to components type name. + :param name_key: Key that is mapped to components name. + :param indent: Current level new line offset (whitespace number). + :return: Formatted string + """ + indent = " " * indent + representation = f"{offset}{service.get(type_key, '[None]')}%s:\n" % ( + f" '{service.get(name_key, '[None]')}'" if name_key in service else "" + ) + for key, value in service.items(): + if key not in (type_key, name_key, extra_handlers_key) or (key == extra_handlers_key and show_extra_handlers): + if isinstance(value, List): + if len(value) > 0: + values = [ + pretty_format_component_info_dict(instance, show_extra_handlers, f"{indent * 2}{offset}") + for instance in value + ] + value_str = "\n%s" % "\n".join(values) + else: + value_str = "[None]" + else: + value_str = str(value) + representation += f"{offset}{indent}{key}: {value_str}\n" + return representation[:-1]
    + + + +
    +[docs] +def rename_component_incrementing( + service: Union[Service, ServiceGroup], collisions: List[Union[Service, ServiceGroup]] +) -> str: + """ + Function for generating new name for a pipeline component, + that has similar name with other components in the same group. + The name is generated according to these rules: + + - If service's handler is "ACTOR", it is named `actor`. + - If service's handler is `Callable`, it is named after this `callable`. + - If it's a service group, it is named `service_group`. + - Otherwise, it is names `noname_service`. + - | After that, `_[NUMBER]` is added to the resulting name, + where `_[NUMBER]` is number of components with the same name in current service group. + + :param service: Service to be renamed. + :param collisions: Services in the same service group as service. + :return: Generated name + """ + if isinstance(service, Service) and isinstance(service.handler, str) and service.handler == "ACTOR": + base_name = "actor" + elif isinstance(service, Service) and callable(service.handler): + if isfunction(service.handler): + base_name = service.handler.__name__ + else: + base_name = service.handler.__class__.__name__ + elif isinstance(service, ServiceGroup): + base_name = "service_group" + else: + base_name = "noname_service" + + name_index = 0 + while f"{base_name}_{name_index}" in [component.name for component in collisions]: + name_index += 1 + return f"{base_name}_{name_index}"
    + + + +
    +[docs] +def finalize_service_group(service_group: ServiceGroup, path: str = ".") -> bool: + """ + Function that iterates through a service group (and all its subgroups), + finalizing component's names and paths in it. + Components are renamed only if user didn't set a name for them. Their paths are also generated here. + It also searches for "ACTOR" in the group, throwing exception if no actor or multiple actors found. + + :param service_group: Service group to resolve name collisions in. + :param path: + A prefix for component paths -- path of `component` is equal to `{path}.{component.name}`. + Defaults to ".". + """ + actor = False + names_counter = collections.Counter([component.name for component in service_group.components]) + for component in service_group.components: + if component.name is None: + component.name = rename_component_incrementing(component, service_group.components) + elif names_counter[component.name] > 1: + raise Exception(f"User defined service name collision ({path})!") + component.path = f"{path}.{component.name}" + + if isinstance(component, Service) and isinstance(component.handler, str) and component.handler == "ACTOR": + actor_found = True + elif isinstance(component, ServiceGroup): + actor_found = finalize_service_group(component, f"{path}.{component.name}") + else: + actor_found = False + + if actor_found: + if not actor: + actor = actor_found + else: + raise Exception(f"More than one actor found in group ({path})!") + return actor
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/service/extra.html b/_modules/dff/pipeline/service/extra.html new file mode 100644 index 0000000000..40763266d0 --- /dev/null +++ b/_modules/dff/pipeline/service/extra.html @@ -0,0 +1,806 @@ + + + + + + + + + + dff.pipeline.service.extra — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.service.extra

    +"""
    +Extra Handler
    +-------------
    +The Extra Handler module contains additional functionality that extends the capabilities of the system
    +beyond the core functionality. Extra handlers is an input converting addition to :py:class:`.PipelineComponent`.
    +For example, it is used to grep statistics from components, timing, logging, etc.
    +"""
    +import asyncio
    +import logging
    +import inspect
    +from typing import Optional, List, ForwardRef
    +
    +from dff.script import Context
    +
    +from .utils import collect_defined_constructor_parameters_to_dict, _get_attrs_with_updates, wrap_sync_function_in_async
    +from ..types import (
    +    ServiceRuntimeInfo,
    +    ExtraHandlerType,
    +    ExtraHandlerBuilder,
    +    ExtraHandlerFunction,
    +    ExtraHandlerRuntimeInfo,
    +)
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +class _ComponentExtraHandler: + """ + Class, representing an extra pipeline component handler. + A component extra handler is a set of functions, attached to pipeline component (before or after it). + Extra handlers should execute supportive tasks (like time or resources measurement, minor data transformations). + Extra handlers should NOT edit context or pipeline, use services for that purpose instead. + + :param functions: An `ExtraHandlerBuilder` object, an `_ComponentExtraHandler` instance, + a dict or a list of :py:data:`~.ExtraHandlerFunction`. + :type functions: :py:data:`~.ExtraHandlerBuilder` + :param stage: An :py:class:`~.ExtraHandlerType`, specifying whether this handler will be executed before or + after pipeline component. + :param timeout: (for asynchronous only!) Maximum component execution time (in seconds), + if it exceeds this time, it is interrupted. + :param asynchronous: Requested asynchronous property. + """ + + def __init__( + self, + functions: ExtraHandlerBuilder, + stage: ExtraHandlerType = ExtraHandlerType.UNDEFINED, + timeout: Optional[float] = None, + asynchronous: Optional[bool] = None, + ): + overridden_parameters = collect_defined_constructor_parameters_to_dict( + timeout=timeout, asynchronous=asynchronous + ) + if isinstance(functions, _ComponentExtraHandler): + self.__init__( + **_get_attrs_with_updates( + functions, + ("calculated_async_flag", "stage"), + {"requested_async_flag": "asynchronous"}, + overridden_parameters, + ) + ) + elif isinstance(functions, dict): + functions.update(overridden_parameters) + self.__init__(**functions) + elif isinstance(functions, List): + self.functions = functions + self.timeout = timeout + self.requested_async_flag = asynchronous + self.calculated_async_flag = all([asyncio.iscoroutinefunction(func) for func in self.functions]) + self.stage = stage + else: + raise Exception(f"Unknown type for {type(self).__name__} {functions}") + + @property + def asynchronous(self) -> bool: + """ + Property, that indicates, whether this component extra handler is synchronous or asynchronous. + It is calculated according to the following rules: + + - | If component **can** be asynchronous and :py:attr:`~requested_async_flag` is set, + it returns :py:attr:`~requested_async_flag`. + - | If component **can** be asynchronous and :py:attr:`~requested_async_flag` isn't set, + it returns `True`. + - | If component **can't** be asynchronous and :py:attr:`~requested_async_flag` is `False` or not set, + it returns `False`. + - | If component **can't** be asynchronous and :py:attr:`~requested_async_flag` is `True`, + an Exception is thrown in constructor. + + """ + return self.calculated_async_flag if self.requested_async_flag is None else self.requested_async_flag + +
    +[docs] + async def _run_function( + self, func: ExtraHandlerFunction, ctx: Context, pipeline: Pipeline, component_info: ServiceRuntimeInfo + ): + handler_params = len(inspect.signature(func).parameters) + if handler_params == 1: + await wrap_sync_function_in_async(func, ctx) + elif handler_params == 2: + await wrap_sync_function_in_async(func, ctx, pipeline) + elif handler_params == 3: + extra_handler_runtime_info = ExtraHandlerRuntimeInfo(func=func, stage=self.stage, component=component_info) + await wrap_sync_function_in_async(func, ctx, pipeline, extra_handler_runtime_info) + else: + raise Exception( + f"Too many parameters required for component {component_info.name} {self.stage}" + f" wrapper handler '{func.__name__}': {handler_params}!" + )
    + + +
    +[docs] + async def _run(self, ctx: Context, pipeline: Pipeline, component_info: ServiceRuntimeInfo): + """ + Method for executing one of the wrapper functions (before or after). + If the function is not set, nothing happens. + + :param stage: current `WrapperStage` (before or after). + :param ctx: current dialog context. + :param pipeline: the current pipeline. + :param component_info: associated component's info dictionary. + :return: `None` + """ + + if self.asynchronous: + futures = [self._run_function(func, ctx, pipeline, component_info) for func in self.functions] + for func, future in zip(self.functions, asyncio.as_completed(futures)): + try: + await future + except asyncio.TimeoutError: + logger.warning(f"Component {component_info.name} {self.stage} wrapper '{func.__name__}' timed out!") + + else: + for func in self.functions: + await self._run_function(func, ctx, pipeline, component_info)
    + + + async def __call__(self, ctx: Context, pipeline: Pipeline, component_info: ServiceRuntimeInfo): + """ + A method for calling pipeline components. + It sets up timeout if this component is asynchronous and executes it using `_run` method. + + :param ctx: (required) Current dialog `Context`. + :param pipeline: This `Pipeline`. + :return: `Context` if this is a synchronous service or + `Awaitable` if this is an asynchronous component or `None`. + """ + if self.asynchronous: + task = asyncio.create_task(self._run(ctx, pipeline, component_info)) + return await asyncio.wait_for(task, timeout=self.timeout) + else: + return await self._run(ctx, pipeline, component_info) + + @property + def info_dict(self) -> dict: + """ + Property for retrieving info dictionary about this wrapper. + + :return: Info dict, containing its fields as well as its type. + All not set fields there are replaced with `None`. + """ + return { + "type": type(self).__name__, + "timeout": self.timeout, + "asynchronous": self.asynchronous, + "functions": [func.__name__ for func in self.functions], + }
    + + + +
    +[docs] +class BeforeHandler(_ComponentExtraHandler): + """ + A handler for extra functions that are executed before the component's main function. + + :param functions: A callable or a list of callables that will be executed + before the component's main function. + :type functions: ExtraHandlerBuilder + :param timeout: Optional timeout for the execution of the extra functions, in + seconds. + :param asynchronous: Optional flag that indicates whether the extra functions + should be executed asynchronously. The default value of the flag is True + if all the functions in this handler are asynchronous. + """ + + def __init__( + self, + functions: ExtraHandlerBuilder, + timeout: Optional[int] = None, + asynchronous: Optional[bool] = None, + ): + super().__init__(functions, ExtraHandlerType.BEFORE, timeout, asynchronous)
    + + + +
    +[docs] +class AfterHandler(_ComponentExtraHandler): + """ + A handler for extra functions that are executed after the component's main function. + + :param functions: A callable or a list of callables that will be executed + after the component's main function. + :type functions: ExtraHandlerBuilder + :param timeout: Optional timeout for the execution of the extra functions, in + seconds. + :param asynchronous: Optional flag that indicates whether the extra functions + should be executed asynchronously. The default value of the flag is True + if all the functions in this handler are asynchronous. + """ + + def __init__( + self, + functions: ExtraHandlerBuilder, + timeout: Optional[int] = None, + asynchronous: Optional[bool] = None, + ): + super().__init__(functions, ExtraHandlerType.AFTER, timeout, asynchronous)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/service/group.html b/_modules/dff/pipeline/service/group.html new file mode 100644 index 0000000000..cd16b1165e --- /dev/null +++ b/_modules/dff/pipeline/service/group.html @@ -0,0 +1,850 @@ + + + + + + + + + + dff.pipeline.service.group — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.service.group

    +"""
    +Service Group
    +-------------
    +The Service Group module contains the
    +:py:class:`~.ServiceGroup` class, which is used to represent a group of related services.
    +This class provides a way to organize and manage multiple services as a single unit,
    +allowing for easier management and organization of the services within the pipeline.
    +The :py:class:`~.ServiceGroup` serves the important function of grouping services to work together in parallel.
    +"""
    +import asyncio
    +import logging
    +from typing import Optional, List, Union, Awaitable, ForwardRef
    +
    +from dff.script import Context
    +
    +from .utils import collect_defined_constructor_parameters_to_dict, _get_attrs_with_updates
    +from ..pipeline.component import PipelineComponent
    +from ..types import (
    +    StartConditionCheckerFunction,
    +    ComponentExecutionState,
    +    ServiceGroupBuilder,
    +    GlobalExtraHandlerType,
    +    ExtraHandlerConditionFunction,
    +    ExtraHandlerFunction,
    +    ExtraHandlerBuilder,
    +    ExtraHandlerType,
    +)
    +from .service import Service
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +class ServiceGroup(PipelineComponent): + """ + A service group class. + Service group can be included into pipeline as an object or a pipeline component list. + Service group can be synchronous or asynchronous. + Components in synchronous groups are executed consequently (no matter is they are synchronous or asynchronous). + Components in asynchronous groups are executed simultaneously. + Group can be asynchronous only if all components in it are asynchronous. + Group containing actor can be synchronous only. + + :param components: A `ServiceGroupBuilder` object, that will be added to the group. + :type components: :py:data:`~.ServiceGroupBuilder` + :param before_handler: List of `ExtraHandlerBuilder` to add to the group. + :type before_handler: Optional[:py:data:`~.ExtraHandlerBuilder`] + :param after_handler: List of `ExtraHandlerBuilder` to add to the group. + :type after_handler: Optional[:py:data:`~.ExtraHandlerBuilder`] + :param timeout: Timeout to add to the group. + :param asynchronous: Requested asynchronous property. + :param start_condition: :py:data:`~.StartConditionCheckerFunction` that is invoked before each group execution; + group is executed only if it returns `True`. + :param name: Requested group name. + """ + + def __init__( + self, + components: ServiceGroupBuilder, + before_handler: Optional[ExtraHandlerBuilder] = None, + after_handler: Optional[ExtraHandlerBuilder] = None, + timeout: Optional[float] = None, + asynchronous: Optional[bool] = None, + start_condition: Optional[StartConditionCheckerFunction] = None, + name: Optional[str] = None, + ): + overridden_parameters = collect_defined_constructor_parameters_to_dict( + before_handler=before_handler, + after_handler=after_handler, + timeout=timeout, + asynchronous=asynchronous, + start_condition=start_condition, + name=name, + ) + if isinstance(components, ServiceGroup): + self.__init__( + **_get_attrs_with_updates( + components, + ( + "calculated_async_flag", + "path", + ), + {"requested_async_flag": "asynchronous"}, + overridden_parameters, + ) + ) + elif isinstance(components, dict): + components.update(overridden_parameters) + self.__init__(**components) + elif isinstance(components, List): + self.components = self._create_components(components) + calc_async = all([service.asynchronous for service in self.components]) + super(ServiceGroup, self).__init__( + before_handler, after_handler, timeout, asynchronous, calc_async, start_condition, name + ) + else: + raise Exception(f"Unknown type for ServiceGroup {components}") + +
    +[docs] + async def _run_services_group(self, ctx: Context, pipeline: Pipeline) -> Context: + """ + Method for running this service group. + It doesn't include wrappers execution, start condition checking or error handling - pure execution only. + Executes components inside the group based on its `asynchronous` property. + Collects information about their execution state - group is finished successfully + only if all components in it finished successfully. + + :param ctx: Current dialog context. + :param pipeline: The current pipeline. + :return: Current dialog context. + """ + self._set_state(ctx, ComponentExecutionState.RUNNING) + + if self.asynchronous: + service_futures = [service(ctx, pipeline) for service in self.components] + for service, future in zip(self.components, await asyncio.gather(*service_futures, return_exceptions=True)): + service_result = future + if service.asynchronous and isinstance(service_result, Awaitable): + await service_result + elif isinstance(service_result, asyncio.TimeoutError): + logger.warning(f"{type(service).__name__} '{service.name}' timed out!") + + else: + for service in self.components: + service_result = await service(ctx, pipeline) + if not service.asynchronous and isinstance(service_result, Context): + ctx = service_result + elif service.asynchronous and isinstance(service_result, Awaitable): + await service_result + + failed = any([service.get_state(ctx) == ComponentExecutionState.FAILED for service in self.components]) + self._set_state(ctx, ComponentExecutionState.FAILED if failed else ComponentExecutionState.FINISHED) + return ctx
    + + +
    +[docs] + async def _run( + self, + ctx: Context, + pipeline: Pipeline = None, + ) -> Optional[Context]: + """ + Method for handling this group execution. + Executes before and after execution wrappers, checks start condition and catches runtime exceptions. + + :param ctx: Current dialog context. + :param pipeline: The current pipeline. + :return: Current dialog context if synchronous, else `None`. + """ + await self.run_extra_handler(ExtraHandlerType.BEFORE, ctx, pipeline) + + try: + if self.start_condition(ctx, pipeline): + ctx = await self._run_services_group(ctx, pipeline) + else: + self._set_state(ctx, ComponentExecutionState.NOT_RUN) + + except Exception as e: + self._set_state(ctx, ComponentExecutionState.FAILED) + logger.error(f"ServiceGroup '{self.name}' execution failed!\n{e}") + + await self.run_extra_handler(ExtraHandlerType.AFTER, ctx, pipeline) + return ctx if not self.asynchronous else None
    + + +
    +[docs] + def log_optimization_warnings(self): + """ + Method for logging service group optimization warnings for all this groups inner components. + (NOT this group itself!). + Warnings are basically messages, + that indicate service group inefficiency or explicitly defined parameters mismatch. + These are cases for warnings issuing: + + - Service can be asynchronous, however is marked synchronous explicitly. + - Service is not asynchronous, however has a timeout defined. + - Group is not marked synchronous explicitly and contains both synchronous and asynchronous components. + + :return: `None` + """ + for service in self.components: + if isinstance(service, Service): + if ( + service.calculated_async_flag + and service.requested_async_flag is not None + and not service.requested_async_flag + ): + logger.warning(f"Service '{service.name}' could be asynchronous!") + if not service.asynchronous and service.timeout is not None: + logger.warning(f"Timeout can not be applied for Service '{service.name}': it's not asynchronous!") + else: + if not service.calculated_async_flag: + if service.requested_async_flag is None and any( + [sub_service.asynchronous for sub_service in service.components] + ): + logger.warning( + f"ServiceGroup '{service.name}' contains both sync and async services, " + "it should be split or marked as synchronous explicitly!", + ) + service.log_optimization_warnings()
    + + +
    +[docs] + def add_extra_handler( + self, + global_extra_handler_type: GlobalExtraHandlerType, + extra_handler: ExtraHandlerFunction, + condition: ExtraHandlerConditionFunction = lambda _: True, + ): + """ + Method for adding a global wrapper to this group. + Adds wrapper to itself and propagates it to all inner components. + Uses a special condition function to determine whether to add wrapper to any particular inner component or not. + Condition checks components path to be in whitelist (if defined) and not to be in blacklist (if defined). + + :param global_extra_handler_type: A type of wrapper to add. + :param extra_handler: A `WrapperFunction` to add as a wrapper. + :type extra_handler: :py:data:`~.ExtraHandlerFunction` + :param condition: A condition function. + :return: `None` + """ + super().add_extra_handler(global_extra_handler_type, extra_handler) + for service in self.components: + if not condition(service.path): + continue + if isinstance(service, Service): + service.add_extra_handler(global_extra_handler_type, extra_handler) + else: + service.add_extra_handler(global_extra_handler_type, extra_handler, condition)
    + + + @property + def info_dict(self) -> dict: + """ + See `Component.info_dict` property. + Adds `services` key to base info dictionary. + """ + representation = super(ServiceGroup, self).info_dict + representation.update({"services": [service.info_dict for service in self.components]}) + return representation + +
    +[docs] + @staticmethod + def _create_components(services: ServiceGroupBuilder) -> List[Union[Service, "ServiceGroup"]]: + """ + Utility method, used to create inner components, judging by their nature. + Services are created from services and dictionaries. + ServiceGroups are created from service groups and lists. + + :param services: ServiceGroupBuilder object (a `ServiceGroup` instance or a list). + :type services: :py:data:`~.ServiceGroupBuilder` + :return: List of services and service groups. + """ + handled_services: List[Union[Service, "ServiceGroup"]] = [] + for service in services: + if isinstance(service, List) or isinstance(service, ServiceGroup): + handled_services.append(ServiceGroup(service)) + else: + handled_services.append(Service(service)) + return handled_services
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/service/service.html b/_modules/dff/pipeline/service/service.html new file mode 100644 index 0000000000..78176cc0e1 --- /dev/null +++ b/_modules/dff/pipeline/service/service.html @@ -0,0 +1,825 @@ + + + + + + + + + + dff.pipeline.service.service — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.service.service

    +"""
    +Service
    +-------
    +The Service module contains the :py:class:`.Service` class,
    +which can be included into pipeline as object or a dictionary.
    +Pipeline consists of services and service groups.
    +Service group can be synchronous or asynchronous.
    +Service is an atomic part of a pipeline.
    +Service can be asynchronous only if its handler is a coroutine.
    +Actor wrapping service can be synchronous only.
    +"""
    +# TODO: change last sentence, when actor will be asynchronous
    +
    +import logging
    +import asyncio
    +import inspect
    +from typing import Optional, ForwardRef
    +
    +from dff.script import Context
    +
    +from .utils import wrap_sync_function_in_async, collect_defined_constructor_parameters_to_dict, _get_attrs_with_updates
    +from ..types import (
    +    ServiceBuilder,
    +    StartConditionCheckerFunction,
    +    ComponentExecutionState,
    +    ExtraHandlerBuilder,
    +    ExtraHandlerType,
    +)
    +from ..pipeline.component import PipelineComponent
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +class Service(PipelineComponent): + """ + This class represents a service. + Service can be included into pipeline as object or a dictionary. + Service group can be synchronous or asynchronous. + Service can be asynchronous only if its handler is a coroutine. + Actor wrapping service can be synchronous only. + + :param handler: A service function or an actor. + :type handler: :py:data:`~.ServiceBuilder` + :param wrappers: List of Wrappers to add to the service. + :param timeout: Timeout to add to the group. + :param asynchronous: Requested asynchronous property. + :param start_condition: StartConditionCheckerFunction that is invoked before each service execution; + service is executed only if it returns `True`. + :type start_condition: Optional[:py:data:`~.StartConditionCheckerFunction`] + :param name: Requested service name. + """ + + def __init__( + self, + handler: ServiceBuilder, + before_handler: Optional[ExtraHandlerBuilder] = None, + after_handler: Optional[ExtraHandlerBuilder] = None, + timeout: Optional[float] = None, + asynchronous: Optional[bool] = None, + start_condition: Optional[StartConditionCheckerFunction] = None, + name: Optional[str] = None, + ): + overridden_parameters = collect_defined_constructor_parameters_to_dict( + before_handler=before_handler, + after_handler=after_handler, + timeout=timeout, + asynchronous=asynchronous, + start_condition=start_condition, + name=name, + ) + if isinstance(handler, dict): + handler.update(overridden_parameters) + self.__init__(**handler) + elif isinstance(handler, Service): + self.__init__( + **_get_attrs_with_updates( + handler, + ( + "calculated_async_flag", + "path", + ), + {"requested_async_flag": "asynchronous"}, + overridden_parameters, + ) + ) + elif callable(handler) or isinstance(handler, str) and handler == "ACTOR": + self.handler = handler + super(Service, self).__init__( + before_handler, + after_handler, + timeout, + asynchronous, + asyncio.iscoroutinefunction(handler), + start_condition, + name, + ) + else: + raise Exception(f"Unknown type of service handler: {handler}") + +
    +[docs] + async def _run_handler(self, ctx: Context, pipeline: Pipeline): + """ + Method for service `handler` execution. + Handler has three possible signatures, so this method picks the right one to invoke. + These possible signatures are: + + - (ctx: Context) - accepts current dialog context only. + - (ctx: Context, pipeline: Pipeline) - accepts context and current pipeline. + - | (ctx: Context, pipeline: Pipeline, info: ServiceRuntimeInfo) - accepts context, + pipeline and service runtime info dictionary. + + :param ctx: Current dialog context. + :param pipeline: The current pipeline. + :return: `None` + """ + handler_params = len(inspect.signature(self.handler).parameters) + if handler_params == 1: + await wrap_sync_function_in_async(self.handler, ctx) + elif handler_params == 2: + await wrap_sync_function_in_async(self.handler, ctx, pipeline) + elif handler_params == 3: + await wrap_sync_function_in_async(self.handler, ctx, pipeline, self._get_runtime_info(ctx)) + else: + raise Exception(f"Too many parameters required for service '{self.name}' handler: {handler_params}!")
    + + +
    +[docs] + def _run_as_actor(self, ctx: Context, pipeline: Pipeline): + """ + Method for running this service if its handler is an `Actor`. + Catches runtime exceptions. + + :param ctx: Current dialog context. + :return: Context, mutated by actor. + """ + try: + ctx = pipeline.actor(pipeline, ctx) + self._set_state(ctx, ComponentExecutionState.FINISHED) + except Exception as exc: + self._set_state(ctx, ComponentExecutionState.FAILED) + logger.error(f"Actor '{self.name}' execution failed!\n{exc}") + return ctx
    + + +
    +[docs] + async def _run_as_service(self, ctx: Context, pipeline: Pipeline): + """ + Method for running this service if its handler is not an Actor. + Checks start condition and catches runtime exceptions. + + :param ctx: Current dialog context. + :param pipeline: Current pipeline. + :return: `None` + """ + try: + if self.start_condition(ctx, pipeline): + self._set_state(ctx, ComponentExecutionState.RUNNING) + await self._run_handler(ctx, pipeline) + self._set_state(ctx, ComponentExecutionState.FINISHED) + else: + self._set_state(ctx, ComponentExecutionState.NOT_RUN) + except Exception as e: + self._set_state(ctx, ComponentExecutionState.FAILED) + logger.error(f"Service '{self.name}' execution failed!\n{e}")
    + + +
    +[docs] + async def _run(self, ctx: Context, pipeline: Optional[Pipeline] = None) -> Optional[Context]: + """ + Method for handling this service execution. + Executes before and after execution wrappers, launches `_run_as_actor` or `_run_as_service` method. + + :param ctx: (required) Current dialog context. + :param pipeline: the current pipeline. + :return: `Context` if this service's handler is an `Actor` else `None`. + """ + await self.run_extra_handler(ExtraHandlerType.BEFORE, ctx, pipeline) + + if isinstance(self.handler, str) and self.handler == "ACTOR": + ctx = self._run_as_actor(ctx, pipeline) + else: + await self._run_as_service(ctx, pipeline) + + await self.run_extra_handler(ExtraHandlerType.AFTER, ctx, pipeline) + + if isinstance(self.handler, str) and self.handler == "ACTOR": + return ctx + return None
    + + + @property + def info_dict(self) -> dict: + """ + See `Component.info_dict` property. + Adds `handler` key to base info dictionary. + """ + representation = super(Service, self).info_dict + if isinstance(self.handler, str) and self.handler == "ACTOR": + service_representation = "Instance of Actor" + elif callable(self.handler): + service_representation = f"Callable '{self.handler.__name__}'" + else: + service_representation = "[Unknown]" + representation.update({"handler": service_representation}) + return representation
    + + + +
    +[docs] +def to_service( + before_handler: Optional[ExtraHandlerBuilder] = None, + after_handler: Optional[ExtraHandlerBuilder] = None, + timeout: Optional[int] = None, + asynchronous: Optional[bool] = None, + start_condition: Optional[StartConditionCheckerFunction] = None, + name: Optional[str] = None, +): + """ + Function for decorating a function as a Service. + Returns a Service, constructed from this function (taken as a handler). + All arguments are passed directly to `Service` constructor. + """ + + def inner(handler: ServiceBuilder) -> Service: + return Service( + handler=handler, + before_handler=before_handler, + after_handler=after_handler, + timeout=timeout, + asynchronous=asynchronous, + start_condition=start_condition, + name=name, + ) + + return inner
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/service/utils.html b/_modules/dff/pipeline/service/utils.html new file mode 100644 index 0000000000..07d56379f9 --- /dev/null +++ b/_modules/dff/pipeline/service/utils.html @@ -0,0 +1,658 @@ + + + + + + + + + + dff.pipeline.service.utils — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.service.utils

    +"""
    +Utility Functions
    +-----------------
    +The Utility Functions module contains several utility functions that are commonly used throughout the DFF.
    +These functions provide a variety of utility functionality.
    +"""
    +import asyncio
    +from typing import Callable, Any, Optional, Tuple, Mapping
    +
    +
    +
    +[docs] +async def wrap_sync_function_in_async(func: Callable, *args, **kwargs) -> Any: + """ + Utility function, that wraps both functions and coroutines in coroutines. + Invokes `func` if it is just a callable and awaits, if this is a coroutine. + + :param func: Callable to wrap. + :param \\*args: Function args. + :param \\**kwargs: Function kwargs. + :return: What function returns. + """ + if asyncio.iscoroutinefunction(func): + return await func(*args, **kwargs) + else: + return func(*args, **kwargs)
    + + + +
    +[docs] +def _get_attrs_with_updates( + obj: object, + drop_attrs: Optional[Tuple[str, ...]] = None, + replace_attrs: Optional[Mapping[str, str]] = None, + add_attrs: Optional[Mapping[str, Any]] = None, +) -> dict: + """ + Advanced customizable version of built-in `__dict__` property. + Sometimes during Pipeline construction `Services` (or `ServiceGroups`) should be rebuilt, + e.g. in case of some fields overriding. + This method can be customized to return a dict, + that can be spread (** operator) and passed to Service or ServiceGroup constructor. + Base dict is formed via `vars` built-in function. All "private" or "dunder" fields are omitted. + + :param drop_attrs: A tuple of key names that should be removed from the resulting dict. + :param replace_attrs: A mapping that should be replaced in the resulting dict. + :param add_attrs: A mapping that should be added to the resulting dict. + :return: Resulting dict. + """ + drop_attrs = () if drop_attrs is None else drop_attrs + replace_attrs = {} if replace_attrs is None else dict(replace_attrs) + add_attrs = {} if add_attrs is None else dict(add_attrs) + result = {} + for attribute in vars(obj): + if not attribute.startswith("__") and attribute not in drop_attrs: + if attribute in replace_attrs: + result[replace_attrs[attribute]] = getattr(obj, attribute) + else: + result[attribute] = getattr(obj, attribute) + result.update(add_attrs) + return result
    + + + +
    +[docs] +def collect_defined_constructor_parameters_to_dict(**kwargs: Any): + """ + Function, that creates dict from non-`None` constructor parameters of pipeline component. + It is used in overriding component parameters, + when service handler or service group service is instance of Service or ServiceGroup (or dict). + It accepts same named parameters as component constructor. + + :return: Dict, containing key-value pairs of these parameters, that are not `None`. + """ + return dict([(key, value) for key, value in kwargs.items() if value is not None])
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/types.html b/_modules/dff/pipeline/types.html new file mode 100644 index 0000000000..2c119159d8 --- /dev/null +++ b/_modules/dff/pipeline/types.html @@ -0,0 +1,845 @@ + + + + + + + + + + dff.pipeline.types — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.types

    +"""
    +Types
    +-----
    +The Types module contains several classes and special types that are used throughout the `DFF Pipeline`.
    +The classes and special types in this module can include data models,
    +data structures, and other types that are defined for type hinting.
    +"""
    +from abc import ABC
    +from enum import unique, Enum
    +from typing import Callable, Union, Awaitable, Dict, List, Optional, NewType, Iterable, Any
    +
    +from dff.context_storages import DBContextStorage
    +from dff.script import Context, ActorStage, NodeLabel2Type, Script
    +from typing_extensions import NotRequired, TypedDict, TypeAlias
    +from pydantic import BaseModel
    +
    +
    +_ForwardPipeline = NewType("Pipeline", Any)
    +_ForwardPipelineComponent = NewType("PipelineComponent", Any)
    +_ForwardService = NewType("Service", _ForwardPipelineComponent)
    +_ForwardServiceBuilder = NewType("ServiceBuilder", Any)
    +_ForwardServiceGroup = NewType("ServiceGroup", _ForwardPipelineComponent)
    +_ForwardComponentExtraHandler = NewType("_ComponentExtraHandler", Any)
    +_ForwardProvider = NewType("ABCProvider", ABC)
    +_ForwardExtraHandlerRuntimeInfo = NewType("ExtraHandlerRuntimeInfo", Any)
    +
    +
    +
    +[docs] +@unique +class ComponentExecutionState(str, Enum): + """ + Enum, representing pipeline component execution state. + These states are stored in `ctx.framework_keys[PIPELINE_STATE_KEY]`, + that should always be requested with `NOT_RUN` being default fallback. + Following states are supported: + + - NOT_RUN: component has not been executed yet (the default one), + - RUNNING: component is currently being executed, + - FINISHED: component executed successfully, + - FAILED: component execution failed. + """ + + NOT_RUN = "NOT_RUN" + RUNNING = "RUNNING" + FINISHED = "FINISHED" + FAILED = "FAILED"
    + + + +
    +[docs] +@unique +class GlobalExtraHandlerType(str, Enum): + """ + Enum, representing types of global wrappers, that can be set applied for a pipeline. + The following types are supported: + + - BEFORE_ALL: function called before each pipeline call, + - BEFORE: function called before each component, + - AFTER: function called after each component, + - AFTER_ALL: function called after each pipeline call. + """ + + BEFORE_ALL = "BEFORE_ALL" + BEFORE = "BEFORE" + AFTER = "AFTER" + AFTER_ALL = "AFTER_ALL"
    + + + +
    +[docs] +@unique +class ExtraHandlerType(str, Enum): + """ + Enum, representing wrapper execution stage: before or after the wrapped function. + The following types are supported: + + - UNDEFINED: wrapper function with undetermined execution stage, + - BEFORE: wrapper function called before component, + - AFTER: wrapper function called after component. + """ + + UNDEFINED = "UNDEFINED" + BEFORE = "BEFORE" + AFTER = "AFTER"
    + + + +PIPELINE_STATE_KEY = "PIPELINE" +""" +PIPELINE: storage for services and groups execution status. +Should be used in `ctx.framework_keys[PIPELINE_STATE_KEY]`. +""" + + +StartConditionCheckerFunction: TypeAlias = Callable[[Context, _ForwardPipeline], bool] +""" +A function type for components `start_conditions`. +Accepts context and pipeline, returns boolean (whether service can be launched). +""" + + +StartConditionCheckerAggregationFunction: TypeAlias = Callable[[Iterable[bool]], bool] +""" +A function type for creating aggregation `start_conditions` for components. +Accepts list of functions (other start_conditions to aggregate), returns boolean (whether service can be launched). +""" + + +ExtraHandlerConditionFunction: TypeAlias = Callable[[str], bool] +""" +A function type used during global wrappers initialization to determine +whether wrapper should be applied to component with given path or not. +Checks components path to be in whitelist (if defined) and not to be in blacklist (if defined). +Accepts str (component path), returns boolean (whether wrapper should be applied). +""" + + +
    +[docs] +class ServiceRuntimeInfo(BaseModel): + """ + Type of object, that is passed to components in runtime. + Contains current component info (`name`, `path`, `timeout`, `asynchronous`). + Also contains `execution_state` - a dictionary, + containing execution states of other components mapped to their paths. + """ + + name: str + path: str + timeout: Optional[float] + asynchronous: bool + execution_state: Dict[str, ComponentExecutionState]
    + + + +ExtraHandlerFunction: TypeAlias = Union[ + Callable[[Context], Any], + Callable[[Context, _ForwardPipeline], Any], + Callable[[Context, _ForwardPipeline, _ForwardExtraHandlerRuntimeInfo], Any], +] +""" +A function type for creating wrappers (before and after functions). +Can accept current dialog context, pipeline, and current wrapper info. +""" + + +
    +[docs] +class ExtraHandlerRuntimeInfo(BaseModel): + func: ExtraHandlerFunction + stage: ExtraHandlerType + component: ServiceRuntimeInfo
    + + + +""" +Type of object, that is passed to wrappers in runtime. +Contains current wrapper info (`name`, `stage`). +Also contains `component` - runtime info of the component this wrapper is attached to. +""" + + +ServiceFunction: TypeAlias = Union[ + Callable[[Context], None], + Callable[[Context], Awaitable[None]], + Callable[[Context, _ForwardPipeline], None], + Callable[[Context, _ForwardPipeline], Awaitable[None]], + Callable[[Context, _ForwardPipeline, ServiceRuntimeInfo], None], + Callable[[Context, _ForwardPipeline, ServiceRuntimeInfo], Awaitable[None]], +] +""" +A function type for creating service handlers. +Can accept current dialog context, pipeline, and current service info. +Can be both synchronous and asynchronous. +""" + + +ExtraHandlerBuilder: TypeAlias = Union[ + _ForwardComponentExtraHandler, + TypedDict( + "WrapperDict", + { + "timeout": NotRequired[Optional[float]], + "asynchronous": NotRequired[bool], + "functions": List[ExtraHandlerFunction], + }, + ), + List[ExtraHandlerFunction], +] +""" +A type, representing anything that can be transformed to ExtraHandlers. +It can be: + +- _ForwardComponentExtraHandler object +- Dictionary, containing keys `timeout`, `asynchronous`, `functions` +""" + + +ServiceBuilder: TypeAlias = Union[ + ServiceFunction, + _ForwardService, + str, + TypedDict( + "ServiceDict", + { + "handler": _ForwardServiceBuilder, + "before_handler": NotRequired[Optional[ExtraHandlerBuilder]], + "after_handler": NotRequired[Optional[ExtraHandlerBuilder]], + "timeout": NotRequired[Optional[float]], + "asynchronous": NotRequired[bool], + "start_condition": NotRequired[StartConditionCheckerFunction], + "name": Optional[str], + }, + ), +] +""" +A type, representing anything that can be transformed to service. +It can be: + +- ServiceFunction (will become handler) +- Service object (will be spread and recreated) +- String 'ACTOR' - the pipeline Actor will be placed there +- Dictionary, containing keys that are present in Service constructor parameters +""" + + +ServiceGroupBuilder: TypeAlias = Union[ + List[Union[ServiceBuilder, List[ServiceBuilder], _ForwardServiceGroup]], + _ForwardServiceGroup, +] +""" +A type, representing anything that can be transformed to service group. +It can be: + +- List of `ServiceBuilders`, `ServiceGroup` objects and lists (recursive) +- `ServiceGroup` object (will be spread and recreated) +""" + + +PipelineBuilder: TypeAlias = TypedDict( + "PipelineBuilder", + { + "messenger_interface": NotRequired[Optional[_ForwardProvider]], + "context_storage": NotRequired[Optional[Union[DBContextStorage, Dict]]], + "components": ServiceGroupBuilder, + "before_handler": NotRequired[Optional[ExtraHandlerBuilder]], + "after_handler": NotRequired[Optional[ExtraHandlerBuilder]], + "optimization_warnings": NotRequired[bool], + "script": Union[Script, Dict], + "start_label": NodeLabel2Type, + "fallback_label": NotRequired[Optional[NodeLabel2Type]], + "label_priority": NotRequired[float], + "validation_stage": NotRequired[Optional[bool]], + "condition_handler": NotRequired[Optional[Callable]], + "verbose": NotRequired[bool], + "handlers": NotRequired[Optional[Dict[ActorStage, List[Callable]]]], + }, +) +""" +A type, representing anything that can be transformed to pipeline. +It can be Dictionary, containing keys that are present in Pipeline constructor parameters. +""" +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/conditions/std_conditions.html b/_modules/dff/script/conditions/std_conditions.html new file mode 100644 index 0000000000..6982546489 --- /dev/null +++ b/_modules/dff/script/conditions/std_conditions.html @@ -0,0 +1,839 @@ + + + + + + + + + + dff.script.conditions.std_conditions — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.conditions.std_conditions

    +"""
    +Conditions
    +----------
    +Conditions are one of the most important components of the dialog graph.
    +They determine the possibility of transition from one node of the graph to another.
    +The conditions are used to specify when a particular transition should occur, based on certain criteria.
    +This module contains a standard set of scripting conditions that can be used to control the flow of a conversation.
    +These conditions can be used to check the current context, the user's input,
    +or other factors that may affect the conversation flow.
    +"""
    +from typing import Callable, Pattern, Union, Any, List, Optional
    +import logging
    +import re
    +
    +from pydantic import validate_call
    +
    +from dff.pipeline import Pipeline
    +from dff.script import NodeLabel2Type, Context, Message
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +@validate_call +def exact_match(match: Message, skip_none: bool = True) -> Callable[..., bool]: + """ + Return function handler. This handler returns `True` only if the last user phrase + is the same Message as the :py:const:`match`. + If :py:const:`skip_none` the handler will not compare `None` fields of :py:const:`match`. + + :param match: A Message variable to compare user request with. + :param skip_none: Whether fields should be compared if they are `None` in :py:const:`match`. + """ + + def exact_match_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + request = ctx.last_request + if request is None: + return False + for field in match.model_fields: + match_value = match.__getattribute__(field) + if skip_none and match_value is None: + continue + if field in request.model_fields.keys(): + if request.__getattribute__(field) != match.__getattribute__(field): + return False + else: + return False + return True + + return exact_match_condition_handler
    + + + +
    +[docs] +@validate_call +def regexp( + pattern: Union[str, Pattern], flags: Union[int, re.RegexFlag] = 0 +) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler returns `True` only if the last user phrase contains + :py:const:`pattern <Union[str, Pattern]>` with :py:const:`flags <Union[int, re.RegexFlag]>`. + + :param pattern: The `RegExp` pattern. + :param flags: Flags for this pattern. Defaults to 0. + """ + pattern = re.compile(pattern, flags) + + def regexp_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + request = ctx.last_request + if isinstance(request, Message): + if request.text is None: + return False + return bool(pattern.search(request.text)) + else: + logger.error(f"request has to be str type, but got request={request}") + return False + + return regexp_condition_handler
    + + + +
    +[docs] +@validate_call +def check_cond_seq(cond_seq: list): + """ + Check if the list consists only of Callables. + + :param cond_seq: List of conditions to check. + """ + for cond in cond_seq: + if not callable(cond): + raise TypeError(f"{cond_seq} has to consist of callable objects")
    + + + +_any = any +""" +_any is an alias for any. +""" +_all = all +""" +_all is an alias for all. +""" + + +
    +[docs] +@validate_call +def aggregate(cond_seq: list, aggregate_func: Callable = _any) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Aggregate multiple functions into one by using aggregating function. + + :param cond_seq: List of conditions to check. + :param aggregate_func: Function to aggregate conditions. Defaults to :py:func:`_any`. + """ + check_cond_seq(cond_seq) + + def aggregate_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + try: + return bool(aggregate_func([cond(ctx, pipeline, *args, **kwargs) for cond in cond_seq])) + except Exception as exc: + logger.error(f"Exception {exc} for {cond_seq}, {aggregate_func} and {ctx.last_request}", exc_info=exc) + return False + + return aggregate_condition_handler
    + + + +
    +[docs] +@validate_call +def any(cond_seq: list) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler returns `True` + if any function from the list is `True`. + + :param cond_seq: List of conditions to check. + """ + _agg = aggregate(cond_seq, _any) + + def any_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return _agg(ctx, pipeline, *args, **kwargs) + + return any_condition_handler
    + + + +
    +[docs] +@validate_call +def all(cond_seq: list) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler returns `True` only + if all functions from the list are `True`. + + :param cond_seq: List of conditions to check. + """ + _agg = aggregate(cond_seq, _all) + + def all_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return _agg(ctx, pipeline, *args, **kwargs) + + return all_condition_handler
    + + + +
    +[docs] +@validate_call +def negation(condition: Callable) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler returns negation of the :py:func:`~condition`: `False` + if :py:func:`~condition` holds `True` and returns `True` otherwise. + + :param condition: Any :py:func:`~condition`. + """ + + def negation_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return not condition(ctx, pipeline, *args, **kwargs) + + return negation_condition_handler
    + + + +
    +[docs] +@validate_call +def has_last_labels( + flow_labels: Optional[List[str]] = None, + labels: Optional[List[NodeLabel2Type]] = None, + last_n_indices: int = 1, +) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return condition handler. This handler returns `True` if any label from + last :py:const:`last_n_indices` context labels is in + the :py:const:`flow_labels` list or in + the :py:const:`~dff.script.NodeLabel2Type` list. + + :param flow_labels: List of labels to check. Every label has type `str`. Empty if not set. + :param labels: List of labels corresponding to the nodes. Empty if not set. + :param last_n_indices: Number of last utterances to check. + """ + flow_labels = [] if flow_labels is None else flow_labels + labels = [] if labels is None else labels + + def has_last_labels_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + label = list(ctx.labels.values())[-last_n_indices:] + for label in list(ctx.labels.values())[-last_n_indices:]: + label = label if label else (None, None) + if label[0] in flow_labels or label in labels: + return True + return False + + return has_last_labels_condition_handler
    + + + +
    +[docs] +@validate_call +def true() -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler always returns `True`. + """ + + def true_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return True + + return true_handler
    + + + +
    +[docs] +@validate_call +def false() -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler always returns `False`. + """ + + def false_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return False + + return false_handler
    + + + +# aliases +agg = aggregate +""" +:py:func:`~agg` is an alias for :py:func:`~aggregate`. +""" +neg = negation +""" +:py:func:`~neg` is an alias for :py:func:`~negation`. +""" +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/context.html b/_modules/dff/script/core/context.html new file mode 100644 index 0000000000..51a8b1872a --- /dev/null +++ b/_modules/dff/script/core/context.html @@ -0,0 +1,907 @@ + + + + + + + + + + dff.script.core.context — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.context

    +"""
    +Context
    +-------
    +A Context is a data structure that is used to store information about the current state of a conversation.
    +It is used to keep track of the user's input, the current stage of the conversation, and any other
    +information that is relevant to the current context of a dialog.
    +The Context provides a convenient interface for working with data, allowing developers to easily add,
    +retrieve, and manipulate data as the conversation progresses.
    +
    +The Context data structure provides several key features to make working with data easier.
    +Developers can use the context to store any information that is relevant to the current conversation,
    +such as user data, session data, conversation history, or etc.
    +This allows developers to easily access and use this data throughout the conversation flow.
    +
    +Another important feature of the context is data serialization.
    +The context can be easily serialized to a format that can be stored or transmitted, such as JSON.
    +This allows developers to save the context data and resume the conversation later.
    +"""
    +import logging
    +from uuid import UUID, uuid4
    +
    +from typing import Any, Optional, Union, Dict, List, Set
    +
    +from pydantic import BaseModel, Field, field_validator
    +from .types import NodeLabel2Type, ModuleName
    +from .message import Message
    +
    +logger = logging.getLogger(__name__)
    +
    +Node = BaseModel
    +
    +
    +
    +[docs] +def get_last_index(dictionary: dict) -> int: + """ + Obtain the last index from the `dictionary`. Return `-1` if the `dict` is empty. + + :param dictionary: Dictionary with unsorted keys. + :return: Last index from the `dictionary`. + """ + indices = list(dictionary) + return indices[-1] if indices else -1
    + + + +
    +[docs] +class Context(BaseModel): + """ + A structure that is used to store data about the context of a dialog. + + Avoid storing unserializable data in the fields of this class in order for + context storages to work. + """ + + id: Union[UUID, int, str] = Field(default_factory=uuid4) + """ + `id` is the unique context identifier. By default, randomly generated using `uuid4` `id` is used. + `id` can be used to trace the user behavior, e.g while collecting the statistical data. + """ + labels: Dict[int, NodeLabel2Type] = {} + """ + `labels` stores the history of all passed `labels` + + - key - `id` of the turn. + - value - `label` on this turn. + """ + requests: Dict[int, Message] = {} + """ + `requests` stores the history of all `requests` received by the agent + + - key - `id` of the turn. + - value - `request` on this turn. + """ + responses: Dict[int, Message] = {} + """ + `responses` stores the history of all agent `responses` + + - key - `id` of the turn. + - value - `response` on this turn. + """ + misc: Dict[str, Any] = {} + """ + `misc` stores any custom data. The scripting doesn't use this dictionary by default, + so storage of any data won't reflect on the work on the internal Dialog Flow Scripting functions. + + Avoid storing unserializable data in order for context storages to work. + + - key - Arbitrary data name. + - value - Arbitrary data. + """ + validation: bool = False + """ + `validation` is a flag that signals that :py:class:`~dff.pipeline.pipeline.pipeline.Pipeline`, + while being initialized, checks the :py:class:`~dff.script.core.script.Script`. + The functions that can give not valid data + while being validated must use this flag to take the validation mode into account. + Otherwise the validation will not be passed. + """ + framework_states: Dict[ModuleName, Dict[str, Any]] = {} + """ + `framework_states` is used for addons states or for + :py:class:`~dff.pipeline.pipeline.pipeline.Pipeline`'s states. + :py:class:`~dff.pipeline.pipeline.pipeline.Pipeline` + records all its intermediate conditions into the `framework_states`. + After :py:class:`~.Context` processing is finished, + :py:class:`~dff.pipeline.pipeline.pipeline.Pipeline` resets `framework_states` and + returns :py:class:`~.Context`. + + - key - Temporary variable name. + - value - Temporary variable data. + """ + +
    +[docs] + @field_validator("labels", "requests", "responses") + @classmethod + def sort_dict_keys(cls, dictionary: dict) -> dict: + """ + Sort the keys in the `dictionary`. This needs to be done after deserialization, + since the keys are deserialized in a random order. + + :param dictionary: Dictionary with unsorted keys. + :return: Dictionary with sorted keys. + """ + return {key: dictionary[key] for key in sorted(dictionary)}
    + + +
    +[docs] + @classmethod + def cast(cls, ctx: Optional[Union["Context", dict, str]] = None, *args, **kwargs) -> "Context": + """ + Transform different data types to the objects of the + :py:class:`~.Context` class. + Return an object of the :py:class:`~.Context` + type that is initialized by the input data. + + :param ctx: Data that is used to initialize an object of the + :py:class:`~.Context` type. + An empty :py:class:`~.Context` object is returned if no data is given. + :return: Object of the :py:class:`~.Context` + type that is initialized by the input data. + """ + if not ctx: + ctx = Context(*args, **kwargs) + elif isinstance(ctx, dict): + ctx = Context.model_validate(ctx) + elif isinstance(ctx, str): + ctx = Context.model_validate_json(ctx) + elif not issubclass(type(ctx), Context): + raise ValueError( + f"Context expected to be an instance of the Context class " + f"or an instance of the dict/str(json) type. Got: {type(ctx)}" + ) + return ctx
    + + +
    +[docs] + def add_request(self, request: Message): + """ + Add a new `request` to the context. + The new `request` is added with the index of `last_index + 1`. + + :param request: `request` to be added to the context. + """ + request_message = Message.model_validate(request) + last_index = get_last_index(self.requests) + self.requests[last_index + 1] = request_message
    + + +
    +[docs] + def add_response(self, response: Message): + """ + Add a new `response` to the context. + The new `response` is added with the index of `last_index + 1`. + + :param response: `response` to be added to the context. + """ + response_message = Message.model_validate(response) + last_index = get_last_index(self.responses) + self.responses[last_index + 1] = response_message
    + + +
    +[docs] + def add_label(self, label: NodeLabel2Type): + """ + Add a new :py:data:`~.NodeLabel2Type` to the context. + The new `label` is added with the index of `last_index + 1`. + + :param label: `label` that we need to add to the context. + """ + last_index = get_last_index(self.labels) + self.labels[last_index + 1] = label
    + + +
    +[docs] + def clear( + self, + hold_last_n_indices: int, + field_names: Union[Set[str], List[str]] = {"requests", "responses", "labels"}, + ): + """ + Delete all records from the `requests`/`responses`/`labels` except for + the last `hold_last_n_indices` turns. + If `field_names` contains `misc` field, `misc` field is fully cleared. + + :param hold_last_n_indices: Number of last turns to keep. + :param field_names: Properties of :py:class:`~.Context` to clear. + Defaults to {"requests", "responses", "labels"} + """ + field_names = field_names if isinstance(field_names, set) else set(field_names) + if "requests" in field_names: + for index in list(self.requests)[:-hold_last_n_indices]: + del self.requests[index] + if "responses" in field_names: + for index in list(self.responses)[:-hold_last_n_indices]: + del self.responses[index] + if "misc" in field_names: + self.misc.clear() + if "labels" in field_names: + for index in list(self.labels)[:-hold_last_n_indices]: + del self.labels[index] + if "framework_states" in field_names: + self.framework_states.clear()
    + + + @property + def last_label(self) -> Optional[NodeLabel2Type]: + """ + Return the last :py:data:`~.NodeLabel2Type` of + the :py:class:`~.Context`. + Return `None` if `labels` is empty. + + Since `start_label` is not added to the `labels` field, + empty `labels` usually indicates that the current node is the `start_node`. + """ + last_index = get_last_index(self.labels) + return self.labels.get(last_index) + + @property + def last_response(self) -> Optional[Message]: + """ + Return the last `response` of the current :py:class:`~.Context`. + Return `None` if `responses` is empty. + """ + last_index = get_last_index(self.responses) + return self.responses.get(last_index) + + @last_response.setter + def last_response(self, response: Optional[Message]): + """ + Set the last `response` of the current :py:class:`~.Context`. + Required for use with various response wrappers. + """ + last_index = get_last_index(self.responses) + self.responses[last_index] = Message() if response is None else Message.model_validate(response) + + @property + def last_request(self) -> Optional[Message]: + """ + Return the last `request` of the current :py:class:`~.Context`. + Return `None` if `requests` is empty. + """ + last_index = get_last_index(self.requests) + return self.requests.get(last_index) + + @last_request.setter + def last_request(self, request: Optional[Message]): + """ + Set the last `request` of the current :py:class:`~.Context`. + Required for use with various request wrappers. + """ + last_index = get_last_index(self.requests) + self.requests[last_index] = Message() if request is None else Message.model_validate(request) + + @property + def current_node(self) -> Optional[Node]: + """ + Return current :py:class:`~dff.script.core.script.Node`. + """ + actor = self.framework_states.get("actor", {}) + node = ( + actor.get("processed_node") + or actor.get("pre_response_processed_node") + or actor.get("next_node") + or actor.get("pre_transitions_processed_node") + or actor.get("previous_node") + ) + if node is None: + logger.warning( + "The `current_node` method should be called " + "when an actor is running between the " + "`ActorStage.GET_PREVIOUS_NODE` and `ActorStage.FINISH_TURN` stages." + ) + + return node + +
    +[docs] + def overwrite_current_node_in_processing(self, processed_node: Node): + """ + Set the current node to be `processed_node`. + This method only works in processing functions (pre-response and pre-transition). + + The actual current node is not changed. + + :param processed_node: `node` to set as the current node. + """ + is_processing = self.framework_states.get("actor", {}).get("processed_node") + if is_processing: + self.framework_states["actor"]["processed_node"] = Node.model_validate(processed_node) + else: + logger.warning( + f"The `{self.overwrite_current_node_in_processing.__name__}` " + "method can only be called from processing functions (either pre-response or pre-transition)." + )
    +
    + + + +Context.model_rebuild() +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/keywords.html b/_modules/dff/script/core/keywords.html new file mode 100644 index 0000000000..46d7c0d3b0 --- /dev/null +++ b/_modules/dff/script/core/keywords.html @@ -0,0 +1,683 @@ + + + + + + + + + + dff.script.core.keywords — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.keywords

    +"""
    +Keywords
    +--------
    +Keywords are used to define the dialog graph, which is the structure of a conversation.
    +They are used to determine all nodes in the script and to assign python objects and python functions for nodes.
    +
    +"""
    +from enum import Enum
    +
    +
    +
    +[docs] +class Keywords(str, Enum): + """ + Keywords used to define the dialog script (:py:class:`~dff.script.Script`). + The data type `dict` is used to describe the scenario. + `Enums` of this class are used as keys in this `dict`. + Different keys correspond to the different value types aimed at different purposes. + + Enums: + + GLOBAL: Enum(auto) + This keyword is used to define a global node. + The value that corresponds to this key has the `dict` type with keywords: + + `{TRANSITIONS:..., RESPONSE:..., PRE_RESPONSE_PROCESSING:..., MISC:...}`. + There can be only one global node in a script :py:class:`~dff.script.Script`. + The global node is defined at the flow level as opposed to regular nodes. + This node allows to define default global values for all nodes. + + LOCAL: Enum(auto) + This keyword is used to define the local node. + The value that corresponds to this key has the `dict` type with keywords: + + `{TRANSITIONS:..., RESPONSE:..., PRE_RESPONSE_PROCESSING:..., MISC:...}`. + The local node is defined in the same way as all other nodes in the flow of this node. + It also allows to redefine default values for all nodes in this node's flow. + + TRANSITIONS: Enum(auto) + This keyword defines possible transitions from node. + The value that corresponds to the `TRANSITIONS` key has the `dict` type. + Every key-value pair describes the transition node and the condition: + + `{label_to_transition_0: condition_for_transition_0, ..., label_to_transition_N: condition_for_transition_N}`, + + where `label_to_transition_i` is a node into which the actor make the transition in case of + `condition_for_transition_i == True`. + + RESPONSE: Enum(auto) + The keyword specifying the result which is returned to the user after getting to the node. + Value corresponding to the `RESPONSE` key can have any data type. + + MISC: Enum(auto) + The keyword specifying `dict` containing extra data, + which were not aimed to be used in the standard functions of `DFE`. + Value corresponding to the `MISC` key must have `dict` type: + + `{"VAR_KEY_0": VAR_VALUE_0, ..., "VAR_KEY_N": VAR_VALUE_N}`, + + where `"VAR_KEY_0"` is an arbitrary name of the value which is saved into the `MISC`. + + PRE_RESPONSE_PROCESSING: Enum(auto) + The keyword specifying the preprocessing that is called before the response generation. + The value that corresponds to the `PRE_RESPONSE_PROCESSING` key must have the `dict` type: + + `{"PRE_RESPONSE_PROC_0": pre_response_proc_func_0, ..., "PRE_RESPONSE_PROC_N": pre_response_proc__func_N}`, + + where `"PRE_RESPONSE_PROC_i"` is an arbitrary name of the preprocessing stage in the pipeline. + The order of `pre_response_proc__func_i` calls is defined by the order + in which the preprocessing `dict` is defined. + + PRE_TRANSITIONS_PROCESSING: Enum(auto) + The keyword specifying the preprocessing that is called before the transition. + The value that corresponds to the `PRE_TRANSITIONS_PROCESSING` key must have the `dict` type: + + `{"PRE_TRANSITIONS_PROC_0": pre_transitions_proc_func_0, ..., + "PRE_TRANSITIONS_PROC_N": pre_transitions_proc_func_N}`, + + where `"PRE_TRANSITIONS_PROC_i"` is an arbitrary name of the preprocessing stage in the pipeline. + The order of `pre_transitions_proc_func_i` calls is defined by the order + in which the preprocessing `dict` is defined. + + """ + + GLOBAL = "global" + LOCAL = "local" + TRANSITIONS = "transitions" + RESPONSE = "response" + MISC = "misc" + PRE_RESPONSE_PROCESSING = "pre_response_processing" + PRE_TRANSITIONS_PROCESSING = "pre_transitions_processing" + PROCESSING = "pre_transitions_processing"
    + + + +# Redefine shortcuts +GLOBAL = Keywords.GLOBAL +LOCAL = Keywords.LOCAL +TRANSITIONS = Keywords.TRANSITIONS +RESPONSE = Keywords.RESPONSE +MISC = Keywords.MISC +PRE_RESPONSE_PROCESSING = Keywords.PRE_RESPONSE_PROCESSING +PRE_TRANSITIONS_PROCESSING = Keywords.PRE_TRANSITIONS_PROCESSING +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/message.html b/_modules/dff/script/core/message.html new file mode 100644 index 0000000000..faebaaa158 --- /dev/null +++ b/_modules/dff/script/core/message.html @@ -0,0 +1,854 @@ + + + + + + + + + + dff.script.core.message — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.message

    +"""
    +Message
    +-------
    +The :py:class:`.Message` class is a universal data model for representing a message that should be supported by
    +DFF. It only contains types and properties that are compatible with most messaging services.
    +"""
    +from typing import Any, Optional, List, Union
    +from enum import Enum, auto
    +from pathlib import Path
    +from urllib.request import urlopen
    +
    +from pydantic import field_validator, Field, FilePath, HttpUrl, BaseModel, model_validator
    +
    +
    +
    +[docs] +class Session(Enum): + """ + An enumeration that defines two possible states of a session. + """ + + ACTIVE = auto() + FINISHED = auto()
    + + + +
    +[docs] +class DataModel(BaseModel, extra="allow", arbitrary_types_allowed=True): + """ + This class is a Pydantic BaseModel that serves as a base class for all DFF models. + """ + + ...
    + + + +
    +[docs] +class Command(DataModel): + """ + This class is a subclass of DataModel and represents + a command that can be executed in response to a user input. + """ + + ...
    + + + +
    +[docs] +class Location(DataModel): + """ + This class is a data model that represents a geographical + location on the Earth's surface. + It has two attributes, longitude and latitude, both of which are float values. + If the absolute difference between the latitude and longitude values of the two + locations is less than 0.00004, they are considered equal. + """ + + longitude: float + latitude: float + + def __eq__(self, other): + if isinstance(other, Location): + return abs(self.latitude - other.latitude) + abs(self.longitude - other.longitude) < 0.00004 + return NotImplemented
    + + + +
    +[docs] +class Attachment(DataModel): + """ + This class represents an attachment that can be either + a file or a URL, along with an optional ID and title. + """ + + source: Optional[Union[HttpUrl, FilePath]] = None + id: Optional[str] = None # id field is made separate to simplify type validation + title: Optional[str] = None + +
    +[docs] + def get_bytes(self) -> Optional[bytes]: + if self.source is None: + return None + if isinstance(self.source, Path): + with open(self.source, "rb") as file: + return file.read() + else: + with urlopen(self.source.unicode_string()) as file: + return file.read()
    + + + def __eq__(self, other): + if isinstance(other, Attachment): + if self.title != other.title: + return False + if self.id != other.id: + return False + return self.get_bytes() == other.get_bytes() + return NotImplemented + +
    +[docs] + @model_validator(mode="before") + @classmethod + def validate_source_or_id(cls, values: dict): + if not isinstance(values, dict): + raise AssertionError(f"Invalid constructor parameters: {str(values)}") + if bool(values.get("source")) == bool(values.get("id")): + raise AssertionError("Attachment type requires exactly one parameter, `source` or `id`, to be set.") + return values
    + + +
    +[docs] + @field_validator("source", mode="before") + @classmethod + def validate_source(cls, value): + if isinstance(value, Path): + return Path(value) + return value
    +
    + + + +
    +[docs] +class Audio(Attachment): + """Represents an audio file attachment.""" + + pass
    + + + +
    +[docs] +class Video(Attachment): + """Represents a video file attachment.""" + + pass
    + + + +
    +[docs] +class Image(Attachment): + """Represents an image file attachment.""" + + pass
    + + + +
    +[docs] +class Document(Attachment): + """Represents a document file attachment.""" + + pass
    + + + +
    +[docs] +class Attachments(DataModel): + """This class is a data model that represents a list of attachments.""" + + files: List[Attachment] = Field(default_factory=list) + + def __eq__(self, other): + if isinstance(other, Attachments): + return self.files == other.files + return NotImplemented
    + + + + + + + +
    +[docs] +class Button(DataModel): + """ + This class allows for the creation of a button object + with a source URL, a text description, and a payload. + """ + + source: Optional[HttpUrl] = None + text: str + payload: Optional[Any] = None + + def __eq__(self, other): + if isinstance(other, Button): + if self.source != other.source: + return False + if self.text != other.text: + return False + first_payload = bytes(self.payload, encoding="utf-8") if isinstance(self.payload, str) else self.payload + second_payload = bytes(other.payload, encoding="utf-8") if isinstance(other.payload, str) else other.payload + return first_payload == second_payload + return NotImplemented
    + + + +
    +[docs] +class Keyboard(DataModel): + """ + This class is a DataModel that represents a keyboard object + that can be used for a chatbot or messaging application. + """ + + buttons: List[Button] = Field(default_factory=list, min_length=1) + + def __eq__(self, other): + if isinstance(other, Keyboard): + return self.buttons == other.buttons + return NotImplemented
    + + + +
    +[docs] +class Message(DataModel): + """ + Class representing a message and contains several + class level variables to store message information. + """ + + text: Optional[str] = None + commands: Optional[List[Command]] = None + attachments: Optional[Attachments] = None + annotations: Optional[dict] = None + misc: Optional[dict] = None + # commands and state options are required for integration with services + # that use an intermediate backend server, like Yandex's Alice + # state: Optional[Session] = Session.ACTIVE + # ui: Optional[Union[Keyboard, DataModel]] = None + + def __eq__(self, other): + if isinstance(other, Message): + for field in self.model_fields: + if field not in other.model_fields: + return False + if self.__getattribute__(field) != other.__getattribute__(field): + return False + return True + return NotImplemented + + def __repr__(self) -> str: + return " ".join([f"{key}='{value}'" for key, value in self.model_dump(exclude_none=True).items()])
    + + + +
    +[docs] +class MultiMessage(Message): + """This class represents a message that contains multiple sub-messages.""" + + messages: Optional[List[Message]] = None
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/normalization.html b/_modules/dff/script/core/normalization.html new file mode 100644 index 0000000000..a0de1392ac --- /dev/null +++ b/_modules/dff/script/core/normalization.html @@ -0,0 +1,724 @@ + + + + + + + + + + dff.script.core.normalization — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.normalization

    +"""
    +Normalization
    +-------------
    +Normalization module is used to normalize all python objects and functions to a format
    +that is suitable for script and actor execution process.
    +This module contains a basic set of functions for normalizing data in a dialog script.
    +"""
    +import logging
    +
    +from typing import Union, Callable, Any, Dict, Optional, ForwardRef
    +
    +from .keywords import Keywords
    +from .context import Context
    +from .types import NodeLabel3Type, NodeLabelType, ConditionType, LabelType
    +from .message import Message
    +
    +from pydantic import validate_call
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +def normalize_label(label: NodeLabelType, default_flow_label: LabelType = "") -> Union[Callable, NodeLabel3Type]: + """ + The function that is used for normalization of + :py:const:`default_flow_label <dff.script.NodeLabelType>`. + + :param label: If label is Callable the function is wrapped into try/except + and normalization is used on the result of the function call with the name label. + :param default_flow_label: flow_label is used if label does not contain flow_label. + :return: Result of the label normalization, + if Callable is returned, the normalized result is returned. + """ + if callable(label): + + def get_label_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + try: + new_label = label(ctx, pipeline, *args, **kwargs) + new_label = normalize_label(new_label, default_flow_label) + flow_label, node_label, _ = new_label + node = pipeline.script.get(flow_label, {}).get(node_label) + if not node: + raise Exception(f"Unknown transitions {new_label} for pipeline.script={pipeline.script}") + if node_label in [Keywords.LOCAL, Keywords.GLOBAL]: + raise Exception(f"Invalid transition: can't transition to {flow_label}:{node_label}") + except Exception as exc: + new_label = None + logger.error(f"Exception {exc} of function {label}", exc_info=exc) + return new_label + + return get_label_handler # create wrap to get uniq key for dictionary + elif isinstance(label, str) or isinstance(label, Keywords): + return (default_flow_label, label, float("-inf")) + elif isinstance(label, tuple) and len(label) == 2 and isinstance(label[-1], float): + return (default_flow_label, label[0], label[-1]) + elif isinstance(label, tuple) and len(label) == 2 and isinstance(label[-1], str): + flow_label = label[0] or default_flow_label + return (flow_label, label[-1], float("-inf")) + elif isinstance(label, tuple) and len(label) == 3: + flow_label = label[0] or default_flow_label + return (flow_label, label[1], label[2])
    + + + +
    +[docs] +def normalize_condition(condition: ConditionType) -> Callable: + """ + The function that is used to normalize `condition` + + :param condition: Condition to normalize. + :return: The function condition wrapped into the try/except. + """ + if callable(condition): + + def callable_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + try: + return condition(ctx, pipeline, *args, **kwargs) + except Exception as exc: + logger.error(f"Exception {exc} of function {condition}", exc_info=exc) + return False + + return callable_condition_handler
    + + + +
    +[docs] +@validate_call +def normalize_response(response: Optional[Union[Message, Callable[..., Message]]]) -> Callable[..., Message]: + """ + This function is used to normalize response, if response Callable, it is returned, otherwise + response is wrapped to the function and this function is returned. + + :param response: Response to normalize. + :return: Function that returns callable response. + """ + if callable(response): + return response + else: + if response is None: + result = Message() + elif isinstance(response, Message): + result = response + else: + raise TypeError(type(response)) + + def response_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs): + return result + + return response_handler
    + + + +
    +[docs] +@validate_call +def normalize_processing(processing: Dict[Any, Callable]) -> Callable: + """ + This function is used to normalize processing. + It returns function that consecutively applies all preprocessing stages from dict. + + :param processing: Processing which contains all preprocessing stages in a format "PROC_i" -> proc_func_i. + :return: Function that consequentially applies all preprocessing stages from dict. + """ + if isinstance(processing, dict): + + def processing_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + for processing_name, processing_func in processing.items(): + try: + if processing_func is not None: + ctx = processing_func(ctx, pipeline, *args, **kwargs) + except Exception as exc: + logger.error( + f"Exception {exc} for processing_name={processing_name} and processing_func={processing_func}", + exc_info=exc, + ) + return ctx + + return processing_handler
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/script.html b/_modules/dff/script/core/script.html new file mode 100644 index 0000000000..724f3f18bf --- /dev/null +++ b/_modules/dff/script/core/script.html @@ -0,0 +1,746 @@ + + + + + + + + + + dff.script.core.script — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.script

    +"""
    +Script
    +------
    +The Script module provides a set of `pydantic` models for representing the dialog graph.
    +These models are used to define the conversation flow, and to determine the appropriate response based on
    +the user's input and the current state of the conversation.
    +"""
    +# %%
    +
    +import logging
    +from typing import Callable, Optional, Any, Dict, Union
    +
    +from pydantic import BaseModel, field_validator
    +
    +from .types import LabelType, NodeLabelType, ConditionType, NodeLabel3Type
    +from .message import Message
    +from .keywords import Keywords
    +from .normalization import normalize_response, normalize_processing, normalize_condition, normalize_label, validate_call
    +from typing import ForwardRef
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +Pipeline = ForwardRef("Pipeline")
    +Context = ForwardRef("Context")
    +
    +
    +
    +[docs] +class Node(BaseModel, extra="forbid"): + """ + The class for the `Node` object. + """ + + transitions: Dict[NodeLabelType, ConditionType] = {} + response: Optional[Union[Message, Callable[[Context, Pipeline], Message]]] = None + pre_transitions_processing: Dict[Any, Callable] = {} + pre_response_processing: Dict[Any, Callable] = {} + misc: dict = {} + +
    +[docs] + @field_validator("transitions", mode="before") + @classmethod + @validate_call + def normalize_transitions( + cls, transitions: Dict[NodeLabelType, ConditionType] + ) -> Dict[Union[Callable, NodeLabel3Type], Callable]: + """ + The function which is used to normalize transitions and returns normalized dict. + + :param transitions: Transitions to normalize. + :return: Transitions with normalized label and condition. + """ + transitions = { + normalize_label(label): normalize_condition(condition) for label, condition in transitions.items() + } + return transitions
    + + +
    +[docs] + def run_response(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + """ + Executes the normalized response. + See details in the :py:func:`~normalize_response` function of `normalization.py`. + """ + response = normalize_response(self.response) + return response(ctx, pipeline, *args, **kwargs)
    + + +
    +[docs] + def run_pre_response_processing(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + """ + Executes pre-processing of responses. + """ + return self.run_processing(self.pre_response_processing, ctx, pipeline, *args, **kwargs)
    + + +
    +[docs] + def run_pre_transitions_processing(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + """ + Executes pre-processing of transitions. + """ + return self.run_processing(self.pre_transitions_processing, ctx, pipeline, *args, **kwargs)
    + + +
    +[docs] + def run_processing( + self, processing: Dict[Any, Callable], ctx: Context, pipeline: Pipeline, *args, **kwargs + ) -> Context: + """ + Executes the normalized processing. + See details in the :py:func:`~normalize_processing` function of `normalization.py`. + """ + processing = normalize_processing(processing) + return processing(ctx, pipeline, *args, **kwargs)
    +
    + + + +
    +[docs] +class Script(BaseModel, extra="forbid"): + """ + The class for the `Script` object. + """ + + script: Dict[LabelType, Dict[LabelType, Node]] + +
    +[docs] + @field_validator("script", mode="before") + @classmethod + @validate_call + def normalize_script(cls, script: Dict[LabelType, Any]) -> Dict[LabelType, Dict[LabelType, Dict[str, Any]]]: + """ + This function normalizes :py:class:`.Script`: it returns dict where the GLOBAL node is moved + into the flow with the GLOBAL name. The function returns the structure + + `{GLOBAL: {...NODE...}, ...}` -> `{GLOBAL: {GLOBAL: {...NODE...}}, ...}`. + + :param script: :py:class:`.Script` that describes the dialog scenario. + :return: Normalized :py:class:`.Script`. + """ + if isinstance(script, dict): + if Keywords.GLOBAL in script and all( + [isinstance(item, Keywords) for item in script[Keywords.GLOBAL].keys()] + ): + script[Keywords.GLOBAL] = {Keywords.GLOBAL: script[Keywords.GLOBAL]} + return script
    + + + def __getitem__(self, key): + return self.script[key] + +
    +[docs] + def get(self, key, value=None): + return self.script.get(key, value)
    + + +
    +[docs] + def keys(self): + return self.script.keys()
    + + +
    +[docs] + def items(self): + return self.script.items()
    + + +
    +[docs] + def values(self): + return self.script.values()
    + + + def __iter__(self): + return self.script.__iter__()
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/types.html b/_modules/dff/script/core/types.html new file mode 100644 index 0000000000..98cd6558e3 --- /dev/null +++ b/_modules/dff/script/core/types.html @@ -0,0 +1,696 @@ + + + + + + + + + + dff.script.core.types — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.types

    +"""
    +Types
    +-----
    +The Types module contains a set of basic data types that
    +are used to define the expected input and output of various components of the framework.
    +The types defined in this module include basic data types such as strings
    +and lists, as well as more complex types that are specific to the framework.
    +"""
    +from typing import Union, Callable, Tuple
    +from enum import Enum, auto
    +from typing_extensions import TypeAlias
    +
    +from .keywords import Keywords
    +
    +LabelType: TypeAlias = Union[str, Keywords]
    +"""Label can be a casual string or :py:class:`~dff.script.Keywords`."""
    +
    +NodeLabel1Type: TypeAlias = Tuple[str, float]
    +"""Label type for transitions can be `[node_name, transition_priority]`."""
    +
    +NodeLabel2Type: TypeAlias = Tuple[str, str]
    +"""Label type for transitions can be `[flow_name, node_name]`."""
    +
    +NodeLabel3Type: TypeAlias = Tuple[str, str, float]
    +"""Label type for transitions can be `[flow_name, node_name, transition_priority]`."""
    +
    +NodeLabelTupledType: TypeAlias = Union[NodeLabel1Type, NodeLabel2Type, NodeLabel3Type]
    +"""Label type for transitions can be one of three different types."""
    +
    +NodeLabelType: TypeAlias = Union[Callable, NodeLabelTupledType, str]
    +"""Label type for transitions can be one of three different types."""
    +
    +ConditionType: TypeAlias = Callable
    +"""Condition type can be only `Callable`."""
    +
    +ModuleName: TypeAlias = "str"
    +"""
    +Module name names addon state, or your own module state. For example module name can be `"dff_context_storages"`.
    +"""
    +# TODO: change example
    +
    +
    +
    +[docs] +class ActorStage(Enum): + """ + The class which holds keys for the handlers. These keys are used + for the actions of :py:class:`.Actor`. Each stage represents + a specific step in the conversation flow. Here is a brief description + of each stage. + """ + + CONTEXT_INIT = auto() + """ + This stage is used for the context initialization. + It involves setting up the conversation context. + """ + + GET_PREVIOUS_NODE = auto() + """ + This stage is used to retrieve the previous node. + """ + + REWRITE_PREVIOUS_NODE = auto() + """ + This stage is used to rewrite the previous node. + It involves updating the previous node in the conversation history + to reflect any changes made during the current conversation turn. + """ + + RUN_PRE_TRANSITIONS_PROCESSING = auto() + """ + This stage is used for running pre-transitions processing. + It involves performing any necessary pre-processing tasks. + """ + + GET_TRUE_LABELS = auto() + """ + This stage is used to retrieve the true labels. + It involves determining the correct label to take based + on the current conversation context. + """ + + GET_NEXT_NODE = auto() + """ + This stage is used to retrieve the next node in the conversation flow. + """ + + REWRITE_NEXT_NODE = auto() + """ + This stage is used to rewrite the next node. + It involves updating the next node in the conversation flow + to reflect any changes made during the current conversation turn. + """ + + RUN_PRE_RESPONSE_PROCESSING = auto() + """ + This stage is used for running pre-response processing. + It involves performing any necessary pre-processing tasks + before generating the response to the user. + """ + + CREATE_RESPONSE = auto() + """ + This stage is used for response creation. + It involves generating a response to the user based on the + current conversation context and any pre-processing performed. + """ + + FINISH_TURN = auto() + """ + This stage is used for finishing the current conversation turn. + It involves wrapping up any loose ends, such as saving context, + before waiting for the user's next input. + """
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/labels/std_labels.html b/_modules/dff/script/labels/std_labels.html new file mode 100644 index 0000000000..6508676634 --- /dev/null +++ b/_modules/dff/script/labels/std_labels.html @@ -0,0 +1,779 @@ + + + + + + + + + + dff.script.labels.std_labels — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.labels.std_labels

    +"""
    +Labels
    +------
    +:py:const:`Labels <dff.script.NodeLabel3Type>` are one of the important components of the dialog graph,
    +which determine the targeted node name of the transition.
    +They are used to identify the next step in the conversation.
    +Labels can also be used in combination with other conditions,
    +such as the current context or user data, to create more complex and dynamic conversations.
    +
    +This module contains a standard set of scripting :py:const:`labels <dff.script.NodeLabelType>` that
    +can be used by developers to define the conversation flow.
    +"""
    +from typing import Optional, Callable, ForwardRef
    +from dff.script import Context, NodeLabel3Type
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +def repeat(priority: Optional[float] = None) -> Callable: + """ + Returns transition handler that takes :py:class:`.Context`, + :py:class:`~dff.pipeline.Pipeline` and :py:const:`priority <float>`. + This handler returns a :py:const:`label <NodeLabelType>` + to the last node with a given :py:const:`priority <float>`. + If the priority is not given, `Pipeline.actor.label_priority` is used as default. + + :param priority: Priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + """ + + def repeat_transition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + current_priority = pipeline.actor.label_priority if priority is None else priority + if len(ctx.labels) >= 1: + flow_label, label = list(ctx.labels.values())[-1] + else: + flow_label, label = pipeline.actor.start_label[:2] + return (flow_label, label, current_priority) + + return repeat_transition_handler
    + + + + + + + +
    +[docs] +def to_start(priority: Optional[float] = None) -> Callable: + """ + Returns transition handler that takes :py:class:`~dff.script.Context`, + :py:class:`~dff.pipeline.Pipeline` and :py:const:`priority <float>`. + This handler returns a :py:const:`label <dff.script.NodeLabelType>` + to the start node with a given :py:const:`priority <float>`. + If the priority is not given, `Pipeline.actor.label_priority` is used as default. + + :param priority: Priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + """ + + def to_start_transition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + current_priority = pipeline.actor.label_priority if priority is None else priority + return (*pipeline.actor.start_label[:2], current_priority) + + return to_start_transition_handler
    + + + +
    +[docs] +def to_fallback(priority: Optional[float] = None) -> Callable: + """ + Returns transition handler that takes :py:class:`~dff.script.Context`, + :py:class:`~dff.pipeline.Pipeline` and :py:const:`priority <float>`. + This handler returns a :py:const:`label <dff.script.NodeLabelType>` + to the fallback node with a given :py:const:`priority <float>`. + If the priority is not given, `Pipeline.actor.label_priority` is used as default. + + :param priority: Priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + """ + + def to_fallback_transition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + current_priority = pipeline.actor.label_priority if priority is None else priority + return (*pipeline.actor.fallback_label[:2], current_priority) + + return to_fallback_transition_handler
    + + + +
    +[docs] +def _get_label_by_index_shifting( + ctx: Context, + pipeline: Pipeline, + priority: Optional[float] = None, + increment_flag: bool = True, + cyclicality_flag: bool = True, + *args, + **kwargs, +) -> NodeLabel3Type: + """ + Function that returns node label from the context and pipeline after shifting the index. + + :param ctx: Dialog context. + :param pipeline: Dialog pipeline. + :param priority: Priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + :param increment_flag: If it is `True`, label index is incremented by `1`, + otherwise it is decreased by `1`. Defaults to `True`. + :param cyclicality_flag: If it is `True` the iteration over the label list is going cyclically + (e.g the element with `index = len(labels)` has `index = 0`). Defaults to `True`. + :return: The tuple that consists of `(flow_label, label, priority)`. + If fallback is executed `(flow_fallback_label, fallback_label, priority)` are returned. + """ + flow_label, node_label, current_priority = repeat(priority)(ctx, pipeline, *args, **kwargs) + labels = list(pipeline.script.get(flow_label, {})) + + if node_label not in labels: + return (*pipeline.actor.fallback_label[:2], current_priority) + + label_index = labels.index(node_label) + label_index = label_index + 1 if increment_flag else label_index - 1 + if not (cyclicality_flag or (0 <= label_index < len(labels))): + return (*pipeline.actor.fallback_label[:2], current_priority) + label_index %= len(labels) + + return (flow_label, labels[label_index], current_priority)
    + + + +
    +[docs] +def forward(priority: Optional[float] = None, cyclicality_flag: bool = True) -> Callable: + """ + Returns transition handler that takes :py:class:`~dff.script.Context`, + :py:class:`~dff.pipeline.Pipeline` and :py:const:`priority <float>`. + This handler returns a :py:const:`label <dff.script.NodeLabelType>` + to the forward node with a given :py:const:`priority <float>` and :py:const:`cyclicality_flag <bool>`. + If the priority is not given, `Pipeline.actor.label_priority` is used as default. + + :param priority: Float priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + :param cyclicality_flag: If it is `True`, the iteration over the label list is going cyclically + (e.g the element with `index = len(labels)` has `index = 0`). Defaults to `True`. + """ + + def forward_transition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + return _get_label_by_index_shifting( + ctx, pipeline, priority, increment_flag=True, cyclicality_flag=cyclicality_flag, *args, **kwargs + ) + + return forward_transition_handler
    + + + +
    +[docs] +def backward(priority: Optional[float] = None, cyclicality_flag: bool = True) -> Callable: + """ + Returns transition handler that takes :py:class:`~dff.script.Context`, + :py:class:`~dff.pipeline.Pipeline` and :py:const:`priority <float>`. + This handler returns a :py:const:`label <dff.script.NodeLabelType>` + to the backward node with a given :py:const:`priority <float>` and :py:const:`cyclicality_flag <bool>`. + If the priority is not given, `Pipeline.actor.label_priority` is used as default. + + :param priority: Float priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + :param cyclicality_flag: If it is `True`, the iteration over the label list is going cyclically + (e.g the element with `index = len(labels)` has `index = 0`). Defaults to `True`. + """ + + def back_transition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + return _get_label_by_index_shifting( + ctx, pipeline, priority, increment_flag=False, cyclicality_flag=cyclicality_flag, *args, **kwargs + ) + + return back_transition_handler
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/responses/std_responses.html b/_modules/dff/script/responses/std_responses.html new file mode 100644 index 0000000000..d7482fc772 --- /dev/null +++ b/_modules/dff/script/responses/std_responses.html @@ -0,0 +1,612 @@ + + + + + + + + + + dff.script.responses.std_responses — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.responses.std_responses

    +"""
    +Responses
    +---------
    +Responses determine the response that will be sent to the user for each node of the dialog graph.
    +Responses are used to provide the user with information, ask questions,
    +or guide the conversation in a particular direction.
    +
    +This module provides only one predefined response function that can be used to quickly
    +respond to the user and keep the conversation flowing.
    +"""
    +import random
    +from typing import List
    +
    +from dff.pipeline import Pipeline
    +from dff.script import Context, Message
    +
    +
    +
    +[docs] +def choice(responses: List[Message]): + """ + Function wrapper that takes the list of responses as an input + and returns handler which outputs a response randomly chosen from that list. + + :param responses: A list of responses for random sampling. + """ + + def choice_response_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs): + return random.choice(responses) + + return choice_response_handler
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/stats/cli.html b/_modules/dff/stats/cli.html new file mode 100644 index 0000000000..b6c3c19e8d --- /dev/null +++ b/_modules/dff/stats/cli.html @@ -0,0 +1,847 @@ + + + + + + + + + + dff.stats.cli — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.stats.cli

    +"""
    +Command Line Interface
    +----------------------
    +This modules defines commands that can be called via the command line interface.
    +
    +"""
    +from uuid import uuid4
    +import tempfile
    +import shutil
    +import sys
    +import argparse
    +import os
    +import logging
    +from urllib import parse
    +from pathlib import Path
    +from typing import Optional
    +
    +try:
    +    from omegaconf import OmegaConf
    +    from .utils import get_superset_session, drop_superset_assets
    +except ImportError:
    +    raise ImportError("Some packages are not found. Run `pip install dff[stats]`")
    +
    +logger = logging.getLogger(__name__)
    +logger.setLevel(logging.INFO)
    +
    +DFF_DIR = Path(__file__).absolute().parent.parent
    +"""
    +Root directory of the local `dff` installation.
    +
    +:meta hide-value:
    +"""
    +DASHBOARD_DIR = str(DFF_DIR / "config" / "superset_dashboard")
    +"""
    +Local path to superset dashboard files to import.
    +
    +:meta hide-value:
    +"""
    +DASHBOARD_SLUG = "dff-stats"
    +"""
    +This variable stores a slug used for building the http address of the DFF dashboard.
    +"""
    +DEFAULT_SUPERSET_URL = parse.urlunsplit(("http", "localhost:8088", "/", "", ""))
    +"""
    +Default location of the Superset dashboard.
    +"""
    +
    +TYPE_MAPPING_CH = {
    +    "FLOAT": "Nullable(Float64)",
    +    "STRING": "Nullable(String)",
    +    "LONGINTEGER": "Nullable(Int64)",
    +    "INTEGER": "Nullable(Int64)",
    +    "DATETIME": "Nullable(DateTime)",
    +}
    +"""
    +Mapping of standard sql column types to Clickhouse native types.
    +
    +:meta hide-value:
    +"""
    +
    +DFF_NODE_STATS_STATEMENT = """
    +WITH main AS (
    +    SELECT DISTINCT {table}.LogAttributes['context_id'] as context_id,
    +    toUInt64OrNull({table}.LogAttributes['request_id']) as request_id,
    +    toDateTime(otel_traces.Timestamp) as start_time,
    +    otel_traces.SpanName as data_key,
    +    {table}.Body as data,
    +    {lblfield} as label,
    +    {flowfield} as flow_label,
    +    {nodefield} as node_label,
    +    {table}.TraceId as trace_id,
    +    otel_traces.TraceId\nFROM {table}, otel_traces
    +    WHERE {table}.TraceId = otel_traces.TraceId and data_key = 'get_current_label'
    +    ORDER BY context_id, request_id
    +) SELECT context_id,
    +    request_id,
    +    start_time,
    +    data_key,
    +    data,
    +    label,
    +    {label_lag} as prev_label,
    +    {flow_lag} as prev_flow,
    +    flow_label,
    +    node_label
    +FROM main
    +"""
    +DFF_STATS_STATEMENT = """
    +WITH main AS (
    +    SELECT DISTINCT {table}.LogAttributes['context_id'] as context_id,
    +    toUInt64OrNull({table}.LogAttributes['request_id']) as request_id,
    +    toDateTime(otel_traces.Timestamp) as start_time,
    +    otel_traces.SpanName as data_key,
    +    {table}.Body as data,
    +    {lblfield} as label,
    +    {flowfield} as flow_label,
    +    {nodefield} as node_label,
    +    {table}.TraceId as trace_id,
    +    otel_traces.TraceId\nFROM {table}, otel_traces
    +    WHERE {table}.TraceId = otel_traces.TraceId
    +    ORDER BY data_key, context_id, request_id
    +) SELECT context_id,
    +    request_id,
    +    start_time,
    +    data_key,
    +    data,
    +    label,
    +    {label_lag} as prev_label,
    +    {flow_lag} as prev_flow,
    +    flow_label,
    +    node_label
    +FROM main
    +"""
    +DFF_FINAL_NODES_STATEMENT = """
    +WITH main AS (
    +    SELECT LogAttributes['context_id'] AS context_id,
    +    max(toUInt64OrNull(LogAttributes['request_id'])) AS max_history
    +    FROM {table}\nGROUP BY context_id
    +)
    +SELECT DISTINCT LogAttributes['context_id'] AS context_id,
    +toUInt64OrNull({table}.LogAttributes['request_id']) AS request_id,
    +toDateTime(otel_traces.Timestamp) AS start_time,
    +{lblfield} AS label,
    +{flowfield} AS flow_label,
    +{nodefield} AS node_label
    +FROM {table}
    +INNER JOIN main
    +ON context_id  = main.context_id
    +AND request_id = main.max_history
    +INNER JOIN otel_traces
    +ON {table}.TraceId = otel_traces.TraceId
    +WHERE otel_traces.SpanName = 'get_current_label'
    +"""
    +
    +SQL_STATEMENT_MAPPING = {
    +    "dff_stats.yaml": DFF_STATS_STATEMENT,
    +    "dff_node_stats.yaml": DFF_NODE_STATS_STATEMENT,
    +    "dff_final_nodes.yaml": DFF_FINAL_NODES_STATEMENT,
    +}
    +"""
    +Select statements for dashboard configuration with names and types represented as placeholders.
    +The placeholder system makes queries database agnostic, required values are set during the import phase.
    +
    +:meta hide-value:
    +"""
    +
    +
    +
    +[docs] +def import_dashboard(parsed_args: Optional[argparse.Namespace] = None, zip_file: Optional[str] = None): + """ + Import an Apache Superset dashboard to a local instance with specified arguments. + Before using the command, make sure you have your Superset instance + up and running: `ghcr.io/deeppavlov/superset_df_dashboard:latest`. + The import will override existing dashboard configurations if present. + + :param parsed_args: Command line arguments produced by `argparse`. + :param zip_file: Zip archived dashboard config. + """ + host = parsed_args.host if hasattr(parsed_args, "host") else "localhost" + port = parsed_args.port if hasattr(parsed_args, "port") else "8088" + superset_url = parse.urlunsplit(("http", f"{host}:{port}", "/", "", "")) + zip_filename = os.path.basename(zip_file) + db_password = getattr(parsed_args, "db.password") + + session, headers = get_superset_session(parsed_args, superset_url) + drop_superset_assets(session, headers, superset_url) + import_dashboard_url = parse.urljoin(superset_url, "/api/v1/dashboard/import/") + # upload files + with open(zip_file, "rb") as f: + response = session.request( + "POST", + import_dashboard_url, + headers=headers, + data={ + "passwords": '{"databases/dff_database.yaml":"' + db_password + '"}', + "overwrite": "true", + }, + files=[("formData", (zip_filename, f, "application/zip"))], + ) + response.raise_for_status() + logger.info(f"Upload finished with status {response.status_code}.")
    + + + +
    +[docs] +def make_zip_config(parsed_args: argparse.Namespace) -> Path: + """ + Make a zip-archived Apache Superset dashboard config, using specified arguments. + + :param parsed_args: Command line arguments produced by `argparse`. + """ + if hasattr(parsed_args, "outfile") and parsed_args.outfile: + outfile_name = parsed_args.outfile + else: + outfile_name = f"config_{str(uuid4())}.zip" + + file_conf = OmegaConf.load(parsed_args.file) + sys.argv = [__file__] + [f"{key}={value}" for key, value in parsed_args.__dict__.items() if value] + cmd_conf = OmegaConf.from_cli() + cli_conf = OmegaConf.merge(file_conf, cmd_conf) + + if OmegaConf.select(cli_conf, "db.driver") == "clickhousedb+connect": + params = dict( + table="${db.table}", + label_lag="lagInFrame(label) OVER " + "(PARTITION BY context_id ORDER BY request_id ASC " + "ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)", + flow_lag="lagInFrame(flow_label) OVER " + "(PARTITION BY context_id ORDER BY request_id ASC " + "ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)", + texttype="String", + lblfield="JSON_VALUE(${db.table}.Body, '$.label')", + flowfield="JSON_VALUE(${db.table}.Body, '$.flow')", + nodefield="JSON_VALUE(${db.table}.Body, '$.node')", + ) + else: + raise ValueError("The only supported database driver is 'clickhousedb+connect'.") + + conf = SQL_STATEMENT_MAPPING.copy() + for key in conf.keys(): + conf[key] = {} + conf[key]["sql"] = SQL_STATEMENT_MAPPING[key].format(**params) + + resolve_conf = OmegaConf.create( + { + "database": { + "sqlalchemy_uri": "${db.driver}://${db.user}:XXXXXXXXXX@${db.host}:${db.port}/${db.name}", + }, + **conf, + } + ) + + user_config = OmegaConf.merge(cli_conf, resolve_conf) + OmegaConf.resolve(user_config) + + with tempfile.TemporaryDirectory() as temp_config_dir: + nested_temp_dir = os.path.join(temp_config_dir, "superset_dashboard") + logger.info(f"Copying config files to temporary directory: {nested_temp_dir}.") + + shutil.copytree(DASHBOARD_DIR, nested_temp_dir) + database_dir = Path(os.path.join(nested_temp_dir, "databases")) + dataset_dir = Path(os.path.join(nested_temp_dir, "datasets/dff_database")) + + logger.info("Overriding the initial configuration.") + # overwrite sqlalchemy uri + for filepath in database_dir.iterdir(): + file_config = OmegaConf.load(filepath) + new_file_config = OmegaConf.merge(file_config, OmegaConf.select(user_config, "database")) + OmegaConf.save(new_file_config, filepath) + + # overwrite sql expressions and column types + for filepath in dataset_dir.iterdir(): + file_config = OmegaConf.load(filepath) + new_file_config = OmegaConf.merge(file_config, getattr(user_config, filepath.name)) + if OmegaConf.select(cli_conf, "db.driver") == "clickhousedb+connect": + for col in OmegaConf.select(new_file_config, "columns"): + col.type = TYPE_MAPPING_CH.get(col.type, col.type) + OmegaConf.save(new_file_config, filepath) + + if ".zip" not in outfile_name: + raise ValueError(f"Outfile name missing .zip extension: {outfile_name}.") + logger.info(f"Saving the archive to {outfile_name}.") + shutil.make_archive(outfile_name[: outfile_name.rindex(".zip")], format="zip", root_dir=temp_config_dir) + + return Path(outfile_name)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/stats/default_extractors.html b/_modules/dff/stats/default_extractors.html new file mode 100644 index 0000000000..8477ce7703 --- /dev/null +++ b/_modules/dff/stats/default_extractors.html @@ -0,0 +1,685 @@ + + + + + + + + + + dff.stats.default_extractors — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.stats.default_extractors

    +"""
    +Default Extractors
    +------------------
    +This module includes a pool of default extractors
    +that you can use out of the box.
    +
    +The default configuration for Superset dashboard leverages the data collected
    +by the extractors below. In order to use the default charts,
    +make sure that you include those functions in your pipeline.
    +Detailed examples can be found in the `tutorials` section.
    +
    +"""
    +from datetime import datetime
    +
    +from dff.script import Context
    +from dff.pipeline import ExtraHandlerRuntimeInfo, Pipeline
    +from .utils import get_wrapper_field
    +
    +
    +
    +[docs] +async def get_current_label(ctx: Context, pipeline: Pipeline, info: ExtraHandlerRuntimeInfo): + """ + Extract the current label on each turn. + This function is required for running the dashboard with the default configuration. + + .. note:: + + Preferrably, it needs to be invoked as `after_handler` of the `Actor` service. + + """ + last_label = ctx.last_label + if last_label is None: + last_label = pipeline.actor.start_label[:2] + return {"flow": last_label[0], "node": last_label[1], "label": ": ".join(last_label)}
    + + + +
    +[docs] +async def get_timing_before(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + """ + Extract the pipeline component's start time. + This function is required for running the dashboard with the default configuration. + + The function leverages the `framework_states` field of the context to store results. + As a result, the function output is cleared on every turn and does not get persisted + to the context storage. + """ + start_time = datetime.now() + ctx.framework_states[get_wrapper_field(info, "time")] = start_time
    + + + +
    +[docs] +async def get_timing_after(ctx: Context, _, info: ExtraHandlerRuntimeInfo): # noqa: F811 + """ + Extract the pipeline component's finish time. + This function is required for running the dashboard with the default configuration. + + The function leverages the `framework_states` field of the context to store results. + As a result, the function output is cleared on every turn and does not get persisted + to the context storage. + """ + start_time = ctx.framework_states[get_wrapper_field(info, "time")] + data = {"execution_time": str(datetime.now() - start_time)} + return data
    + + + +
    +[docs] +async def get_last_response(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + """ + Extract the text of the last response in the current context. + This handler is best used together with the `ACTOR` component. + + This function is required to enable charts that aggregate requests and responses. + """ + data = {"last_response": ctx.last_response.text} + return data
    + + + +
    +[docs] +async def get_last_request(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + """ + Extract the text of the last request in the current context. + This handler is best used together with the `ACTOR` component. + + This function is required to enable charts that aggregate requests and responses. + """ + data = {"last_request": ctx.last_request.text} + return data
    + + + +__all__ = ["get_current_label", "get_timing_before", "get_timing_after", "get_last_request", "get_last_response"] +""" +List of exported functions. + +:meta hide-avlue: +""" +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/stats/instrumentor.html b/_modules/dff/stats/instrumentor.html new file mode 100644 index 0000000000..04715cd291 --- /dev/null +++ b/_modules/dff/stats/instrumentor.html @@ -0,0 +1,791 @@ + + + + + + + + + + dff.stats.instrumentor — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.stats.instrumentor

    +"""
    +Instrumentor
    +-------------
    +This modules contains the :py:class:`~OtelInstrumentor` class that implements
    +Opentelemetry's `BaseInstrumentor` interface and allows for automated
    +instrumentation of Dialog Flow Framework applications,
    +e.g. for automated logging and log export.
    +
    +For detailed reference, see `~OtelInstrumentor` class.
    +"""
    +import asyncio
    +from typing import Collection, Optional
    +
    +from wrapt import wrap_function_wrapper, decorator
    +from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
    +from opentelemetry.instrumentation.utils import unwrap
    +from opentelemetry.metrics import get_meter, get_meter_provider, Meter
    +from opentelemetry.trace import get_tracer, get_tracer_provider, Tracer
    +from opentelemetry._logs import get_logger, get_logger_provider, Logger, SeverityNumber
    +from opentelemetry.trace import SpanKind, Span
    +from opentelemetry.sdk.trace import TracerProvider
    +from opentelemetry.sdk._logs import LoggerProvider, LogRecord
    +from opentelemetry.sdk.metrics import MeterProvider
    +from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
    +from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
    +from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter
    +
    +from dff.script.core.context import get_last_index
    +from dff.stats.utils import (
    +    resource,
    +    get_wrapper_field,
    +    set_logger_destination,
    +    set_meter_destination,
    +    set_tracer_destination,
    +)
    +from dff.stats import default_extractors
    +
    +
    +INSTRUMENTS = ["dff"]
    +
    +
    +
    +[docs] +class OtelInstrumentor(BaseInstrumentor): + """ + Utility class for instrumenting DFF-related functions + that implements the :py:class:`~BaseInstrumentor` interface. + :py:meth:`~instrument` and :py:meth:`~uninstrument` methods + are available to apply and revert the instrumentation effects, + e.g. enable and disable logging at runtime. + + .. code-block:: + + dff_instrumentor = OtelInstrumentor() + dff_instrumentor.instrument() + dff_instrumentor.uninstrument() + + Opentelemetry provider instances can be optionally passed to the class constructor. + Otherwise, the global logger, tracer and meter providers are leveraged. + + The class implements the :py:meth:`~__call__` method, so that + regular functions can be decorated using the class instance. + + .. code-block:: + + @dff_instrumentor + async def function(context, pipeline, runtime_info): + ... + + :param logger_provider: Opentelemetry logger provider. Used to construct a logger instance. + :param tracer_provider: Opentelemetry tracer provider. Used to construct a tracer instance. + :parame meter_provider: Opentelemetry meter provider. Used to construct a meter instance. + """ + + def __init__(self, logger_provider=None, tracer_provider=None, meter_provider=None) -> None: + super().__init__() + self._logger_provider: Optional[LoggerProvider] = None + self._tracer_provider: Optional[TracerProvider] = None + self._meter_provider: Optional[MeterProvider] = None + self._logger: Optional[Logger] = None + self._tracer: Optional[Tracer] = None + self._meter: Optional[Meter] = None + self._configure_providers( + logger_provider=logger_provider, tracer_provider=tracer_provider, meter_provider=meter_provider + ) + + def __enter__(self): + if not self.is_instrumented_by_opentelemetry: + self.instrument() + return self + + def __exit__(self): + if self.is_instrumented_by_opentelemetry: + self.uninstrument() + +
    +[docs] + @classmethod + def from_url(cls, url: str, insecure: bool = True, timeout: Optional[int] = None): + """ + Construct an instrumentor instance using only the url of the OTLP Collector. + Inherently modifies the global provider instances adding an export destination + for the target url. + + .. code-block:: + + instrumentor = OtelInstrumentor.from_url("grpc://localhost:4317") + + :param url: Url of the running Otel Collector server. Due to limited support of HTTP protocol + by the Opentelemetry Python extension, GRPC protocol is preferred. + :param insecure: Whether non-SSL-protected connection is allowed. Defaults to True. + :param timeout: Connection timeout in seconds, optional. + """ + set_logger_destination(OTLPLogExporter(endpoint=url, insecure=insecure, timeout=timeout)) + set_tracer_destination(OTLPSpanExporter(endpoint=url, insecure=insecure, timeout=timeout)) + set_meter_destination(OTLPMetricExporter(endpoint=url, insecure=insecure, timeout=timeout)) + return cls()
    + + +
    +[docs] + def instrumentation_dependencies(self) -> Collection[str]: + """ + :meta private: + + Required libraries. Implements the Python Opentelemetry instrumentor interface. + + """ + return INSTRUMENTS
    + + +
    +[docs] + def _instrument(self, logger_provider=None, tracer_provider=None, meter_provider=None): + if any([logger_provider, meter_provider, tracer_provider]): + self._configure_providers( + logger_provider=logger_provider, tracer_provider=tracer_provider, meter_provider=meter_provider + ) + for func_name in default_extractors.__all__: + wrap_function_wrapper(default_extractors, func_name, self.__call__.__wrapped__)
    + + +
    +[docs] + def _uninstrument(self, **kwargs): + for func_name in default_extractors.__all__: + unwrap(default_extractors, func_name)
    + + +
    +[docs] + def _configure_providers(self, logger_provider, tracer_provider, meter_provider): + self._logger_provider = logger_provider or get_logger_provider() + self._tracer_provider = tracer_provider or get_tracer_provider() + self._meter_provider = meter_provider or get_meter_provider() + self._logger = get_logger(__name__, None, self._logger_provider) + self._tracer = get_tracer(__name__, None, self._tracer_provider) + self._meter = get_meter(__name__, None, self._meter_provider)
    + + + @decorator + async def __call__(self, wrapped, _, args, kwargs): + """ + Regular functions that match the :py:class:`~dff.pipeline.types.ExtraHandlerFunction` + signature can be decorated with the class instance to log the returned value. + This method implements the logging procedure. + The returned value is assumed to be `dict` or `NoneType`. + Logging non-atomic values is discouraged, as they cannot be translated using + the `Protobuf` protocol. + Logging is ignored if the application is in 'uninstrumented' state. + + :param wrapped: Function to decorate. + :param args: Positional arguments of the decorated function. + :param kwargs: Keyword arguments of the decorated function. + """ + ctx, _, info = args + pipeline_component = get_wrapper_field(info) + attributes = { + "context_id": str(ctx.id), + "request_id": get_last_index(ctx.requests), + "pipeline_component": pipeline_component, + } + + result: Optional[dict] + if asyncio.iscoroutinefunction(wrapped): + result = await wrapped(ctx, _, info) + else: + result = wrapped(ctx, _, info) + + if result is None or not self.is_instrumented_by_opentelemetry: + # self.is_instrumented_by_opentelemetry allows to disable + # the decorator programmatically if + # instrumentation is disabled. + return result + + span: Span + with self._tracer.start_as_current_span(wrapped.__name__, kind=SpanKind.INTERNAL) as span: + span_ctx = span.get_span_context() + record = LogRecord( + span_id=span_ctx.span_id, + trace_id=span_ctx.trace_id, + body=result, + trace_flags=span_ctx.trace_flags, + severity_text=None, + severity_number=SeverityNumber(1), + resource=resource, + attributes=attributes, + ) + self._logger.emit(record=record) + return result
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/stats/utils.html b/_modules/dff/stats/utils.html new file mode 100644 index 0000000000..2a5709c897 --- /dev/null +++ b/_modules/dff/stats/utils.html @@ -0,0 +1,803 @@ + + + + + + + + + + dff.stats.utils — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.stats.utils

    +"""
    +Utils
    +-----
    +This module includes utility functions designed for statistics collection.
    +
    +The functions below can be used to configure the opentelemetry destination.
    +
    +.. code:: python
    +
    +    set_logger_destination(OTLPLogExporter("grpc://localhost:4317", insecure=True))
    +    set_tracer_destination(OTLPSpanExporter("grpc://localhost:4317", insecure=True))
    +
    +"""
    +import json
    +import getpass
    +from urllib import parse
    +from typing import Optional, Tuple
    +from argparse import Namespace, Action
    +
    +import requests
    +from opentelemetry.sdk.resources import Resource
    +from opentelemetry._logs import get_logger_provider, set_logger_provider
    +from opentelemetry.trace import get_tracer_provider, set_tracer_provider
    +from opentelemetry.metrics import get_meter_provider, set_meter_provider
    +from opentelemetry.sdk.trace import TracerProvider
    +from opentelemetry.sdk._logs import LoggerProvider
    +from opentelemetry.sdk.metrics import MeterProvider
    +from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
    +from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
    +from opentelemetry.sdk.trace.export import BatchSpanProcessor
    +from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter, SpanExporter
    +from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter, LogExporter
    +from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter, MetricExporter
    +
    +from dff.pipeline import ExtraHandlerRuntimeInfo
    +
    +SERVICE_NAME = "dialog_flow_framework"
    +
    +resource = Resource.create({"service.name": SERVICE_NAME})
    +"""
    +Singletone :py:class:`~Resource` instance shared inside the framework.
    +"""
    +tracer_provider = TracerProvider(resource=resource)
    +"""
    +Global tracer provider bound to the DFF resource.
    +"""
    +logger_provider = LoggerProvider(resource=resource)
    +"""
    +Global logger provider bound to the DFF resource.
    +"""
    +set_logger_provider(logger_provider)
    +set_tracer_provider(tracer_provider)
    +
    +
    +
    +[docs] +def set_logger_destination(exporter: Optional[LogExporter] = None): + """ + Configure the global Opentelemetry logger provider to export logs to the given destination. + + :param exporter: Opentelemetry log exporter instance. + """ + if exporter is None: + exporter = OTLPLogExporter(endpoint="grpc://localhost:4317", insecure=True) + get_logger_provider().add_log_record_processor(BatchLogRecordProcessor(exporter))
    + + + +
    +[docs] +def set_meter_destination(exporter: Optional[MetricExporter] = None): + """ + Configure the global Opentelemetry meter provider to export metrics to the given destination. + + :param exporter: Opentelemetry meter exporter instance. + """ + if exporter is None: + exporter = OTLPMetricExporter(endpoint="grpc://localhost:4317", insecure=True) + cur_meter_provider = get_meter_provider() + new_meter_provider = MeterProvider(resource=resource, metric_readers=[PeriodicExportingMetricReader(exporter)]) + if not isinstance(cur_meter_provider, MeterProvider): + set_meter_provider(new_meter_provider)
    + + + +
    +[docs] +def set_tracer_destination(exporter: Optional[SpanExporter] = None): + """ + Configure the global Opentelemetry tracer provider to export traces to the given destination. + + :param exporter: Opentelemetry span exporter instance. + """ + if exporter is None: + exporter = OTLPSpanExporter(endpoint="grpc://localhost:4317", insecure=True) + get_tracer_provider().add_span_processor(BatchSpanProcessor(exporter))
    + + + +
    +[docs] +def get_wrapper_field(info: ExtraHandlerRuntimeInfo, postfix: str = "") -> str: + """ + This function can be used to obtain a key, under which the wrapper data will be stored + in the context. + + :param info: Handler runtime info obtained from the pipeline. + :param postfix: Field-specific postfix that will be appended to the field name. + """ + path = info.component.path.replace(".", "-") + return f"{path}" + (f"-{postfix}" if postfix else "")
    + + + +
    +[docs] +def get_superset_session(args: Namespace, base_url: str = "http://localhost:8088/") -> Tuple[requests.Session, dict]: + """ + Utility function for authorized interaction with Superset HTTP API. + + :param args: Command line arguments including Superset username and Superset password. + :param base_url: Base Superset URL. + + :return: Authorized session - authorization headers tuple. + """ + healthcheck_url = parse.urljoin(base_url, "/healthcheck") + login_url = parse.urljoin(base_url, "/api/v1/security/login") + csrf_url = parse.urljoin(base_url, "/api/v1/security/csrf_token/") + + session = requests.Session() + # do healthcheck + response = session.get(healthcheck_url, timeout=10) + response.raise_for_status() + # get access token + access_request = session.post( + login_url, + headers={"Content-Type": "application/json", "Accept": "*/*"}, + data=json.dumps({"username": args.username, "password": args.password, "refresh": True, "provider": "db"}), + ) + access_token = access_request.json()["access_token"] + # get csrf_token + csrf_request = session.get(csrf_url, headers={"Authorization": f"Bearer {access_token}"}) + csrf_token = csrf_request.json()["result"] + headers = { + "Authorization": f"Bearer {access_token}", + "X-CSRFToken": csrf_token, + } + return session, headers
    + + + +
    +[docs] +def drop_superset_assets(session: requests.Session, headers: dict, base_url: str): + """ + Drop the existing assets from the Superset dashboard. + + :param session: Authorized Superset session. + :param headers: Superset session headers. + :param base_url: Base Superset URL. + """ + dashboard_url = parse.urljoin(base_url, "/api/v1/dashboard") + charts_url = parse.urljoin(base_url, "/api/v1/chart") + datasets_url = parse.urljoin(base_url, "/api/v1/dataset") + database_url = parse.urljoin(base_url, "/api/v1/database/") + delete_res: requests.Response + + dashboard_res = session.get(dashboard_url, headers=headers) + dashboard_json = dashboard_res.json() + if dashboard_json["count"] > 0: + delete_res = requests.delete(dashboard_url, params={"q": json.dumps(dashboard_json["ids"])}, headers=headers) + delete_res.raise_for_status() + + charts_result = session.get(charts_url, headers=headers) + charts_json = charts_result.json() + if charts_json["count"] > 0: + delete_res = requests.delete(charts_url, params={"q": json.dumps(charts_json["ids"])}, headers=headers) + delete_res.raise_for_status() + + datasets_result = session.get(datasets_url, headers=headers) + datasets_json = datasets_result.json() + if datasets_json["count"] > 0: + delete_res = requests.delete(datasets_url, params={"q": json.dumps(datasets_json["ids"])}, headers=headers) + delete_res.raise_for_status() + + database_res = session.get(database_url, headers=headers) + database_json = database_res.json() + if database_json["count"] > 0: + delete_res = requests.delete(database_url + str(database_json["ids"][-1]), headers=headers) + delete_res.raise_for_status()
    + + + +
    +[docs] +class PasswordAction(Action): + """ + Child class for Argparse's :py:class:`~Action` that prompts users for passwords interactively, + ensuring password safety, unless the password is specified directly. + + """ + + def __init__( + self, option_strings, dest=None, nargs=0, default=None, required=False, type=None, metavar=None, help=None + ): + super().__init__( + option_strings=option_strings, + dest=dest, + nargs=nargs, + default=default, + required=required, + metavar=metavar, + type=type, + help=help, + ) + + def __call__(self, parser, args, values, option_string=None): + if values: + print(f"{self.dest}: setting passwords explicitly through the command line is discouraged.") + setattr(args, self.dest, values) + else: + setattr(args, self.dest, getpass.getpass(prompt=f"{self.dest}: "))
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/db_benchmark/basic_config.html b/_modules/dff/utils/db_benchmark/basic_config.html new file mode 100644 index 0000000000..8bd7619c0f --- /dev/null +++ b/_modules/dff/utils/db_benchmark/basic_config.html @@ -0,0 +1,819 @@ + + + + + + + + + + dff.utils.db_benchmark.basic_config — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.db_benchmark.basic_config

    +"""
    +Basic Config
    +------------
    +This module contains basic benchmark configurations.
    +
    +It defines a simple configurations class (:py:class:`~.BasicBenchmarkConfig`)
    +as well as a set of configurations that covers different dialogs a user might have and some edge-cases
    +(:py:data:`~.basic_configurations`).
    +"""
    +from typing import Tuple, Optional
    +import string
    +import random
    +
    +from humanize import naturalsize
    +from pympler import asizeof
    +
    +from dff.script import Message, Context
    +from dff.utils.db_benchmark.benchmark import BenchmarkConfig
    +
    +
    +
    +[docs] +def get_dict(dimensions: Tuple[int, ...]): + """ + Return misc dictionary build in `dimensions` dimensions. + + :param dimensions: + Dimensions of the dictionary. + Each element of the dimensions tuple is the number of keys on the corresponding level of the dictionary. + The last element of the dimensions tuple is the length of the string values of the dict. + + e.g. dimensions=(1, 2) returns a dictionary with 1 key that points to a string of len 2. + whereas dimensions=(1, 2, 3) returns a dictionary with 1 key that points to a dictionary + with 2 keys each of which points to a string of len 3. + + So, the len of dimensions is the depth of the dictionary, while its values are + the width of the dictionary at each level. + """ + + def _get_dict(dimensions: Tuple[int, ...]): + if len(dimensions) < 2: + # get a random string of length dimensions[0] + return "".join(random.choice(string.printable) for _ in range(dimensions[0])) + return {str(i): _get_dict(dimensions[1:]) for i in range(dimensions[0])} + + if len(dimensions) > 1: + return _get_dict(dimensions) + elif len(dimensions) == 1: + return _get_dict((dimensions[0], 0)) + else: + return _get_dict((0, 0))
    + + + +
    +[docs] +def get_message(message_dimensions: Tuple[int, ...]): + """ + Return message with a non-empty misc field. + + :param message_dimensions: Dimensions of the misc field of the message. See :py:func:`~.get_dict`. + """ + return Message(misc=get_dict(message_dimensions))
    + + + +
    +[docs] +def get_context( + dialog_len: int, + message_dimensions: Tuple[int, ...], + misc_dimensions: Tuple[int, ...], +) -> Context: + """ + Return context with a non-empty misc, labels, requests, responses fields. + + :param dialog_len: Number of labels, requests and responses. + :param message_dimensions: + A parameter used to generate messages for requests and responses. See :py:func:`~.get_message`. + :param misc_dimensions: + A parameter used to generate misc field. See :py:func:`~.get_dict`. + """ + return Context( + labels={i: (f"flow_{i}", f"node_{i}") for i in range(dialog_len)}, + requests={i: get_message(message_dimensions) for i in range(dialog_len)}, + responses={i: get_message(message_dimensions) for i in range(dialog_len)}, + misc=get_dict(misc_dimensions), + )
    + + + +
    +[docs] +class BasicBenchmarkConfig(BenchmarkConfig, frozen=True): + """ + A simple benchmark configuration that generates contexts using two parameters: + + - `message_dimensions` -- to configure the way messages are generated. + - `misc_dimensions` -- to configure size of context's misc field. + + Dialog length is configured using `from_dialog_len`, `to_dialog_len`, `step_dialog_len`. + """ + + context_num: int = 30 + """ + Number of times the contexts will be benchmarked. + Increasing this number decreases standard error of the mean for benchmarked data. + """ + from_dialog_len: int = 300 + """Starting dialog len of a context.""" + to_dialog_len: int = 311 + """ + Final dialog len of a context. + :py:meth:`~.BasicBenchmarkConfig.context_updater` will return contexts + until their dialog len is less then `to_dialog_len`. + """ + step_dialog_len: int = 1 + """ + Increment step for dialog len. + :py:meth:`~.BasicBenchmarkConfig.context_updater` will return contexts + increasing dialog len by `step_dialog_len`. + """ + message_dimensions: Tuple[int, ...] = (10, 10) + """ + Dimensions of misc dictionaries inside messages. + See :py:func:`~.get_message`. + """ + misc_dimensions: Tuple[int, ...] = (10, 10) + """ + Dimensions of misc dictionary. + See :py:func:`~.get_dict`. + """ + +
    +[docs] + def get_context(self) -> Context: + """ + Return context with `from_dialog_len`, `message_dimensions`, `misc_dimensions`. + + Wraps :py:func:`~.get_context`. + """ + return get_context(self.from_dialog_len, self.message_dimensions, self.misc_dimensions)
    + + +
    +[docs] + def info(self): + """ + Return fields of this instance and sizes of objects defined by this config. + + :return: + A dictionary with two keys. + Key "params" stores fields of this configuration. + Key "sizes" stores string representation of following values: + + - "starting_context_size" -- size of a context with `from_dialog_len`. + - "final_context_size" -- size of a context with `to_dialog_len`. + A context of this size will never actually be benchmarked. + - "misc_size" -- size of a misc field of a context. + - "message_size" -- size of a misc field of a message. + """ + return { + "params": self.model_dump(), + "sizes": { + "starting_context_size": naturalsize(asizeof.asizeof(self.get_context()), gnu=True), + "final_context_size": naturalsize( + asizeof.asizeof(get_context(self.to_dialog_len, self.message_dimensions, self.misc_dimensions)), + gnu=True, + ), + "misc_size": naturalsize(asizeof.asizeof(get_dict(self.misc_dimensions)), gnu=True), + "message_size": naturalsize(asizeof.asizeof(get_message(self.message_dimensions)), gnu=True), + }, + }
    + + +
    +[docs] + def context_updater(self, context: Context) -> Optional[Context]: + """ + Update context to have `step_dialog_len` more labels, requests and responses, + unless such dialog len would be equal to `to_dialog_len` or exceed than it, + in which case None is returned. + """ + start_len = len(context.labels) + if start_len + self.step_dialog_len < self.to_dialog_len: + for i in range(start_len, start_len + self.step_dialog_len): + context.add_label((f"flow_{i}", f"node_{i}")) + context.add_request(get_message(self.message_dimensions)) + context.add_response(get_message(self.message_dimensions)) + return context + else: + return None
    +
    + + + +basic_configurations = { + "large-misc": BasicBenchmarkConfig( + from_dialog_len=1, + to_dialog_len=50, + message_dimensions=(3, 5, 6, 5, 3), + misc_dimensions=(2, 4, 3, 8, 100), + ), + "short-messages": BasicBenchmarkConfig( + from_dialog_len=500, + to_dialog_len=550, + message_dimensions=(2, 30), + misc_dimensions=(0, 0), + ), + "default": BasicBenchmarkConfig(), + "large-misc--long-dialog": BasicBenchmarkConfig( + from_dialog_len=500, + to_dialog_len=550, + message_dimensions=(3, 5, 6, 5, 3), + misc_dimensions=(2, 4, 3, 8, 100), + ), + "very-long-dialog-len": BasicBenchmarkConfig( + context_num=10, + from_dialog_len=10000, + to_dialog_len=10050, + ), + "very-long-message-len": BasicBenchmarkConfig( + context_num=10, + from_dialog_len=1, + to_dialog_len=3, + message_dimensions=(10000, 1), + ), + "very-long-misc-len": BasicBenchmarkConfig( + context_num=10, + from_dialog_len=1, + to_dialog_len=3, + misc_dimensions=(10000, 1), + ), +} +""" +Configuration that covers many dialog cases (as well as some edge-cases). + +:meta hide-value: +""" +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/db_benchmark/benchmark.html b/_modules/dff/utils/db_benchmark/benchmark.html new file mode 100644 index 0000000000..7ccbd37367 --- /dev/null +++ b/_modules/dff/utils/db_benchmark/benchmark.html @@ -0,0 +1,1034 @@ + + + + + + + + + + dff.utils.db_benchmark.benchmark — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.db_benchmark.benchmark

    +"""
    +Context storage benchmarking
    +----------------------------
    +This module contains functions for context storages benchmarking.
    +
    +The basic function is :py:func:`~.time_context_read_write` but it has a low level interface.
    +
    +Higher level wrappers of the function provided by this module are:
    +
    +- :py:func:`~.save_results_to_file` -- saves results for a list of benchmark cases.
    +- :py:func:`~.benchmark_all` -- a wrapper of `save_results_to_file`. Creates cases from configs.
    +
    +Wrappers use :py:class:`~.BenchmarkConfig` interface to configure benchmarks.
    +A simple configuration class as well as a configuration set are provided by
    +:py:mod:`dff.utils.db_benchmark.basic_config`.
    +
    +To view files generated by :py:func:`~.save_results_to_file` use either
    +:py:func:`~dff.utils.db_benchmark.report.report` or
    +`our streamlit app <../_misc/benchmark_streamlit.py>`_.
    +"""
    +from uuid import uuid4
    +from pathlib import Path
    +from time import perf_counter
    +from typing import Tuple, List, Dict, Union, Optional, Callable, Any
    +import json
    +import importlib
    +from statistics import mean
    +import abc
    +from traceback import extract_tb, StackSummary
    +
    +from pydantic import BaseModel, Field
    +from tqdm.auto import tqdm
    +
    +from dff.context_storages import DBContextStorage
    +from dff.script import Context
    +
    +
    +
    +[docs] +def time_context_read_write( + context_storage: DBContextStorage, + context_factory: Callable[[], Context], + context_num: int, + context_updater: Optional[Callable[[Context], Optional[Context]]] = None, +) -> Tuple[List[float], List[Dict[int, float]], List[Dict[int, float]]]: + """ + Benchmark `context_storage` by writing and reading `context`\\s generated by `context_factory` + into it / from it `context_num` times. + If `context_updater` is not `None` it is used to update `context`\\s and benchmark update operation. + + This function clears `context_storage` before and after execution. + + :param context_storage: Context storage to benchmark. + :param context_factory: A function that creates contexts which will be written into context storage. + :param context_num: A number of times the context will be written and read. + :param context_updater: + None or a function. + If not None, function should accept :py:class:`~.Context` and return an updated :py:class:`~.Context`. + The updated context can be either the same object (at the same pointer) or a different object (e.g. copied). + The updated context should have a higher dialog length than the received context + (to emulate context updating during dialog). + The function should return `None` to stop updating contexts. + For an example of such function, see implementation of + :py:meth:`dff.utils.db_benchmark.basic_config.BasicBenchmarkConfig.context_updater`. + + To avoid keeping many contexts in memory, + this function will be called repeatedly at least `context_num` times. + :return: + A tuple of 3 elements. + + The first element -- a list of write times. Its length is equal to `context_num`. + + The second element -- a list of dictionaries with read times. + Each dictionary maps from int to float. The key in the mapping is the `dialog_len` of the context and the + values are the read times for the corresponding `dialog_len`. + If `context_updater` is None, all dictionaries will have only one key -- + dialog length of the context returned by `context_factory`. + Otherwise, the dictionaries will also have a key for each updated context. + + The third element -- a list of dictionaries with update times. + Structurally the same as the second element, but none of the elements here have a key for + dialog_len of the context returned by `context_factory`. + So if `context_updater` is None, all dictionaries will be empty. + """ + context_storage.clear() + + write_times: List[float] = [] + read_times: List[Dict[int, float]] = [] + update_times: List[Dict[int, float]] = [] + + for _ in tqdm(range(context_num), desc=f"Benchmarking context storage:{context_storage.full_path}", leave=False): + context = context_factory() + + ctx_id = uuid4() + + # write operation benchmark + write_start = perf_counter() + context_storage[ctx_id] = context + write_times.append(perf_counter() - write_start) + + read_times.append({}) + update_times.append({}) + + # read operation benchmark + read_start = perf_counter() + _ = context_storage[ctx_id] + read_time = perf_counter() - read_start + read_times[-1][len(context.labels)] = read_time + + if context_updater is not None: + updated_context = context_updater(context) + + while updated_context is not None: + update_start = perf_counter() + context_storage[ctx_id] = updated_context + update_time = perf_counter() - update_start + update_times[-1][len(updated_context.labels)] = update_time + + read_start = perf_counter() + _ = context_storage[ctx_id] + read_time = perf_counter() - read_start + read_times[-1][len(updated_context.labels)] = read_time + + updated_context = context_updater(updated_context) + + context_storage.clear() + return write_times, read_times, update_times
    + + + +
    +[docs] +class DBFactory(BaseModel): + """ + A class for storing information about context storage to benchmark. + Also used to create a context storage from the configuration. + """ + + uri: str + """URI of the context storage.""" + factory_module: str = "dff.context_storages" + """A module containing `factory`.""" + factory: str = "context_storage_factory" + """Name of the context storage factory. (function that creates context storages from URIs)""" + +
    +[docs] + def db(self): + """ + Create a context storage using `factory` from `uri`. + """ + module = importlib.import_module(self.factory_module) + return getattr(module, self.factory)(self.uri)
    +
    + + + +
    +[docs] +class BenchmarkConfig(BaseModel, abc.ABC, frozen=True): + """ + Configuration for a benchmark. + + Defines methods and parameters required to run :py:func:`~.time_context_read_write`. + Also defines a method (`info`) for displaying information about this configuration. + + A simple way to configure benchmarks is provided by + :py:class:`~.dff.utils.db_benchmark.basic_config.BasicBenchmarkConfig`. + + Inherit from this class only if `BasicBenchmarkConfig` is not enough for your benchmarking needs. + """ + + context_num: int = 30 + """ + Number of times the contexts will be benchmarked. + Increasing this number decreases standard error of the mean for benchmarked data. + """ + +
    +[docs] + @abc.abstractmethod + def get_context(self) -> Context: + """ + Return context to benchmark read and write operations with. + + This function will be called `context_num` times. + """ + ...
    + + +
    +[docs] + @abc.abstractmethod + def info(self) -> Dict[str, Any]: + """ + Return a dictionary with information about this configuration. + """ + ...
    + + +
    +[docs] + @abc.abstractmethod + def context_updater(self, context: Context) -> Optional[Context]: + """ + Update context with new dialog turns or return `None` to stop updates. + + This function is used to benchmark update and read operations. + + This function will be called AT LEAST `context_num` times. + + :return: Updated context or `None` to stop updating context. + """ + ...
    +
    + + + +
    +[docs] +class BenchmarkCase(BaseModel): + """ + This class represents a benchmark case and includes + information about it, its configuration and configuration of a context storage to benchmark. + """ + + name: str + """Name of a benchmark case.""" + db_factory: DBFactory + """DBFactory that specifies context storage to benchmark.""" + benchmark_config: BenchmarkConfig + """Benchmark configuration.""" + uuid: str = Field(default_factory=lambda: str(uuid4())) + """Unique id of the case. Defaults to a random uuid.""" + description: str = "" + """Description of the case. Defaults to an empty string.""" + +
    +[docs] + @staticmethod + def set_average_results(benchmark): + """ + Modify `benchmark` dictionary to include averaged benchmark results. + + Add field "average_results" to the benchmark that contains the following fields: + + - average_write_time + - average_read_time + - average_update_time + - read_times_grouped_by_context_num -- a list of read times. + Each element is the average of read times with the same context_num. + - read_times_grouped_by_dialog_len -- a dictionary of read times. + Its values are the averages of read times with the same dialog_len, + its keys are dialog_len values. + - update_times_grouped_by_context_num + - update_times_grouped_by_dialog_len + - pretty_write -- average write time with only 3 significant digits. + - pretty_read + - pretty_update + - pretty_read+update -- sum of average read and update times with only 3 significant digits. + + :param benchmark: + A dictionary returned by `BenchmarkCase._run`. + Should include a "success" and "result" fields. + "success" field should be true. + "result" field should be a dictionary with the values returned by + :py:func:`~.time_context_read_write` and keys + "write_times", "read_times" and "update_times". + :return: None + """ + if not benchmark["success"] or isinstance(benchmark["result"], str): + return + + def get_complex_stats(results): + if len(results) == 0 or len(results[0]) == 0: + return [], {}, None + + average_grouped_by_context_num = [mean(times.values()) for times in results] + average_grouped_by_dialog_len = {key: mean([times[key] for times in results]) for key in results[0].keys()} + average = float(mean(average_grouped_by_context_num)) + return average_grouped_by_context_num, average_grouped_by_dialog_len, average + + read_stats = get_complex_stats(benchmark["result"]["read_times"]) + update_stats = get_complex_stats(benchmark["result"]["update_times"]) + + result = { + "average_write_time": mean(benchmark["result"]["write_times"]), + "average_read_time": read_stats[2], + "average_update_time": update_stats[2], + "read_times_grouped_by_context_num": read_stats[0], + "read_times_grouped_by_dialog_len": read_stats[1], + "update_times_grouped_by_context_num": update_stats[0], + "update_times_grouped_by_dialog_len": update_stats[1], + } + result["pretty_write"] = ( + float(f'{result["average_write_time"]:.3}') if result["average_write_time"] is not None else None + ) + result["pretty_read"] = ( + float(f'{result["average_read_time"]:.3}') if result["average_read_time"] is not None else None + ) + result["pretty_update"] = ( + float(f'{result["average_update_time"]:.3}') if result["average_update_time"] is not None else None + ) + result["pretty_read+update"] = ( + float(f'{result["average_read_time"] + result["average_update_time"]:.3}') + if result["average_read_time"] is not None and result["average_update_time"] is not None + else None + ) + + benchmark["average_results"] = result
    + + +
    +[docs] + def _run(self): + try: + write_times, read_times, update_times = time_context_read_write( + self.db_factory.db(), + self.benchmark_config.get_context, + self.benchmark_config.context_num, + self.benchmark_config.context_updater, + ) + return { + "success": True, + "result": { + "write_times": write_times, + "read_times": read_times, + "update_times": update_times, + }, + } + except Exception as e: + return { + "success": False, + "result": { + "type": e.__class__.__name__, + "msg": getattr(e, "message", str(e)), + "traceback": "\n".join(StackSummary.from_list(extract_tb(e.__traceback__)).format()), + }, + }
    + + +
    +[docs] + def run(self): + """ + Run benchmark, return results. + + :return: + A dictionary with 3 keys: "success", "result", "average_results". + + Success is a bool value. It is false if an exception was raised during benchmarking. + + Result is either an exception message or a dictionary with 3 keys + ("write_times", "read_times", "update_times"). + Values of those fields are the values returned by :py:func:`~.time_context_read_write`. + + Average results field is as described in :py:meth:`~.BenchmarkCase.set_average_results`. + """ + benchmark = self._run() + BenchmarkCase.set_average_results(benchmark) + return benchmark
    +
    + + + +
    +[docs] +def save_results_to_file( + benchmark_cases: List[BenchmarkCase], + file: Union[str, Path], + name: str, + description: str, + exist_ok: bool = False, +): + """ + Benchmark all `benchmark_cases` and save results to a file. + + Result are saved in json format with this schema: + `utils/db_benchmark/benchmark_schema.json <../_misc/benchmark_schema.json>`_. + + Files created by this function cen be viewed either by using :py:func:`~dff.utils.db_benchmark.report.report` or + streamlit app located in the utils directory: + `utils/db_benchmark/benchmark_streamlit.py <../_misc/benchmark_streamlit.py>`_. + + :param benchmark_cases: A list of benchmark cases that specify benchmarks. + :param file: File to save results to. + :param name: Name of the benchmark set. + :param description: Description of the benchmark set. + :param exist_ok: Whether to continue if the file already exists. + """ + with open(file, "w" if exist_ok else "x", encoding="utf-8") as fd: + uuid = str(uuid4()) + result: Dict[str, Any] = { + "name": name, + "description": description, + "uuid": uuid, + "benchmarks": [], + } + cases = tqdm(benchmark_cases, leave=False) + case: BenchmarkCase + for case in cases: + cases.set_description(f"Benchmarking: {case.name}") + result["benchmarks"].append( + { + **case.model_dump(exclude={"benchmark_config"}), + "benchmark_config": case.benchmark_config.info(), + **case.run(), + } + ) + + json.dump(result, fd)
    + + + +
    +[docs] +def benchmark_all( + file: Union[str, Path], + name: str, + description: str, + db_uri: str, + benchmark_configs: Dict[str, BenchmarkConfig], + exist_ok: bool = False, +): + """ + A wrapper for :py:func:`~.save_results_to_file`. + + Generates `benchmark_cases` from `db_uri` and `benchmark_configs`: + `db_uri` is used to initialize :py:class:`~.DBFactory` instance + which is then used along with `benchmark_configs` to initialize :py:class:`~.BenchmarkCase` instances. + + :param file: File to save results to. + :param name: Name of the benchmark set. + :param description: Description of the benchmark set. The same description is used for benchmark cases. + :param db_uri: URI of the database to benchmark + :param benchmark_configs: Mapping from case names to configs. + :param exist_ok: Whether to continue if the file already exists. + """ + save_results_to_file( + [ + BenchmarkCase( + name=case_name, + description=description, + db_factory=DBFactory(uri=db_uri), + benchmark_config=benchmark_config, + ) + for case_name, benchmark_config in benchmark_configs.items() + ], + file, + name, + description, + exist_ok=exist_ok, + )
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/db_benchmark/report.html b/_modules/dff/utils/db_benchmark/report.html new file mode 100644 index 0000000000..4b911eaf64 --- /dev/null +++ b/_modules/dff/utils/db_benchmark/report.html @@ -0,0 +1,646 @@ + + + + + + + + + + dff.utils.db_benchmark.report — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.db_benchmark.report

    +"""
    +Report
    +--------
    +This method contains a function to print benchmark results to console.
    +"""
    +from pathlib import Path
    +from typing import Union, Set, Literal
    +import json
    +
    +
    +
    +[docs] +def report( + file: Union[str, Path], + display: Set[Literal["name", "desc", "config", "metrics"]] = set({"name", "metrics"}), +): + """ + Print average results from a result file to stdout. + + Printed stats contain benchmark configs, object sizes, average benchmark values for successful cases and + exception message for unsuccessful cases. + + :param file: + File with benchmark results generated by + :py:func:`~dff.utils.db_benchmark.benchmark.save_results_to_file`. + :param display: + A set of objects to display in results. + Values allowed inside the set: + + - "name" -- displays the name of the benchmark case. + - "desc" -- displays the description of the benchmark case. + - "config" -- displays the config info of the benchmark case. + - "metrics" -- displays average write, read, update read+update times. + """ + with open(file, "r", encoding="utf-8") as fd: + file_contents = json.load(fd) + + sep = "-" * 80 + + report_result = "\n".join([sep, file_contents["name"], sep, file_contents["description"], sep, ""]) + + for benchmark in file_contents["benchmarks"]: + reported_values = { + "name": benchmark["name"], + "desc": benchmark["description"], + "config": "\n".join(f"{k}: {v}" for k, v in benchmark["benchmark_config"].items()), + "metrics": "".join( + [ + f"{metric.title() + ': ' + str(benchmark['average_results']['pretty_' + metric]):20}" + if benchmark["success"] + else benchmark["result"] + for metric in ("write", "read", "update", "read+update") + ] + ), + } + + result = [] + for value_name, value in reported_values.items(): + if value_name in display: + result.append(value) + result.append("") + + report_result += f"\n{sep}\n".join(result) + + print(report_result, end="")
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/testing/cleanup_db.html b/_modules/dff/utils/testing/cleanup_db.html new file mode 100644 index 0000000000..7ecf4ad8cb --- /dev/null +++ b/_modules/dff/utils/testing/cleanup_db.html @@ -0,0 +1,713 @@ + + + + + + + + + + dff.utils.testing.cleanup_db — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.testing.cleanup_db

    +"""
    +Cleanup DB
    +----------
    +This module defines functions that allow to delete data in various types of databases,
    +including JSON, MongoDB, Pickle, Redis, Shelve, SQL, and YDB databases.
    +"""
    +import os
    +
    +from dff.context_storages import (
    +    JSONContextStorage,
    +    MongoContextStorage,
    +    PickleContextStorage,
    +    RedisContextStorage,
    +    ShelveContextStorage,
    +    SQLContextStorage,
    +    YDBContextStorage,
    +    json_available,
    +    mongo_available,
    +    pickle_available,
    +    redis_available,
    +    sqlite_available,
    +    postgres_available,
    +    mysql_available,
    +    ydb_available,
    +)
    +
    +
    +
    +[docs] +async def delete_json(storage: JSONContextStorage): + """ + Delete all data from a JSON context storage. + + :param storage: A JSONContextStorage object. + """ + if not json_available: + raise Exception("Can't delete JSON database - JSON provider unavailable!") + if os.path.isfile(storage.path): + os.remove(storage.path)
    + + + +
    +[docs] +async def delete_mongo(storage: MongoContextStorage): + """ + Delete all data from a MongoDB context storage. + + :param storage: A MongoContextStorage object + """ + if not mongo_available: + raise Exception("Can't delete mongo database - mongo provider unavailable!") + await storage.collection.drop()
    + + + +
    +[docs] +async def delete_pickle(storage: PickleContextStorage): + """ + Delete all data from a Pickle context storage. + + :param storage: A PickleContextStorage object. + """ + if not pickle_available: + raise Exception("Can't delete pickle database - pickle provider unavailable!") + if os.path.isfile(storage.path): + os.remove(storage.path)
    + + + +
    +[docs] +async def delete_redis(storage: RedisContextStorage): + """ + Delete all data from a Redis context storage. + + :param storage: A RedisContextStorage object. + """ + if not redis_available: + raise Exception("Can't delete redis database - redis provider unavailable!") + await storage.clear_async()
    + + + +
    +[docs] +async def delete_shelve(storage: ShelveContextStorage): + """ + Delete all data from a Shelve context storage. + + :param storage: A ShelveContextStorage object. + """ + if os.path.isfile(storage.path): + os.remove(storage.path)
    + + + +
    +[docs] +async def delete_sql(storage: SQLContextStorage): + """ + Delete all data from an SQL context storage. + + :param storage: An SQLContextStorage object. + """ + if storage.dialect == "postgres" and not postgres_available: + raise Exception("Can't delete postgres database - postgres provider unavailable!") + if storage.dialect == "sqlite" and not sqlite_available: + raise Exception("Can't delete sqlite database - sqlite provider unavailable!") + if storage.dialect == "mysql" and not mysql_available: + raise Exception("Can't delete mysql database - mysql provider unavailable!") + async with storage.engine.connect() as conn: + await conn.run_sync(storage.table.drop, storage.engine)
    + + + +
    +[docs] +async def delete_ydb(storage: YDBContextStorage): + """ + Delete all data from a YDB context storage. + + :param storage: A YDBContextStorage object. + """ + if not ydb_available: + raise Exception("Can't delete ydb database - ydb provider unavailable!") + + async def callee(session): + await session.drop_table("/".join([storage.database, storage.table_name])) + + await storage.pool.retry_operation(callee)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/testing/common.html b/_modules/dff/utils/testing/common.html new file mode 100644 index 0000000000..2e7de396d9 --- /dev/null +++ b/_modules/dff/utils/testing/common.html @@ -0,0 +1,674 @@ + + + + + + + + + + dff.utils.testing.common — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.testing.common

    +"""
    +Common
    +------
    +This module contains several functions which are used to run demonstrations in tutorials.
    +"""
    +from os import getenv
    +from typing import Callable, Tuple, Any, Optional
    +from uuid import uuid4
    +
    +from dff.script import Context, Message
    +from dff.pipeline import Pipeline
    +from dff.utils.testing.response_comparers import default_comparer
    +
    +
    +
    +[docs] +def is_interactive_mode() -> bool: # pragma: no cover + """ + Checking whether the tutorial code should be run in interactive mode. + + :return: `True` if it's being executed by Jupyter kernel and DISABLE_INTERACTIVE_MODE env variable isn't set, + `False` otherwise. + """ + + shell = None + try: + from IPython import get_ipython + + shell = get_ipython().__class__.__name__ + finally: + return shell != "ZMQInteractiveShell" and getenv("DISABLE_INTERACTIVE_MODE") is None
    + + + +
    +[docs] +def check_happy_path( + pipeline: Pipeline, + happy_path: Tuple[Tuple[Any, Any], ...], + # This optional argument is used for additional processing of candidate responses and reference responses + response_comparer: Callable[[Any, Any, Context], Optional[str]] = default_comparer, + printout_enable: bool = True, +): + """ + Running tutorial with provided pipeline for provided requests, comparing responses with correct expected responses. + In cases when additional processing of responses is needed (e.g. in case of response being an HTML string), + a special function (response comparer) is used. + + :param pipeline: The Pipeline instance, that will be used for checking. + :param happy_path: A tuple of (request, response) tuples, so-called happy path, + its requests are passed to pipeline and the pipeline responses are compared to its responses. + :param response_comparer: A special comparer function that accepts received response, true response and context; + it returns `None` is two responses are equal and transformed received response if they are different. + :param printout_enable: A flag that enables requests and responses fancy printing (to STDOUT). + """ + + ctx_id = uuid4() # get random ID for current context + for step_id, (request, reference_response) in enumerate(happy_path): + ctx = pipeline(request, ctx_id) + candidate_response = ctx.last_response + if printout_enable: + print(f"(user) >>> {repr(request)}") + print(f" (bot) <<< {repr(candidate_response)}") + parsed_response_with_deviation = response_comparer(candidate_response, reference_response, ctx) + if parsed_response_with_deviation is not None: + raise Exception( + f"\n\npipeline = {pipeline.info_dict}\n\n" + f"ctx = {ctx}\n\n" + f"step_id = {step_id}\n" + f"request = {repr(request)}\n" + f"candidate_response = {repr(parsed_response_with_deviation)}\n" + f"reference_response = {repr(reference_response)}\n" + "candidate_response != reference_response" + )
    + + + +
    +[docs] +def run_interactive_mode(pipeline: Pipeline): # pragma: no cover + """ + Running tutorial with provided pipeline in interactive mode, just like with CLI messenger interface. + The dialog won't be stored anywhere, it will only be outputted to STDOUT. + + :param pipeline: The Pipeline instance, that will be used for running. + """ + + ctx_id = uuid4() # Random UID + print("Start a dialogue with the bot") + while True: + request = input(">>> ") + ctx = pipeline(request=Message(text=request), ctx_id=ctx_id) + print(f"<<< {repr(ctx.last_response)}")
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/testing/response_comparers.html b/_modules/dff/utils/testing/response_comparers.html new file mode 100644 index 0000000000..96be293e61 --- /dev/null +++ b/_modules/dff/utils/testing/response_comparers.html @@ -0,0 +1,603 @@ + + + + + + + + + + dff.utils.testing.response_comparers — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.testing.response_comparers

    +"""
    +Response comparer
    +-----------------
    +This module defines function used to compare two response objects.
    +"""
    +from typing import Any, Optional
    +
    +from dff.script import Context, Message
    +
    +
    +
    +[docs] +def default_comparer(candidate: Message, reference: Message, _: Context) -> Optional[Any]: + """ + The default response comparer. Literally compares two response objects. + + :param candidate: The received (candidate) response. + :param reference: The true (reference) response. + :param _: Current Context (unused). + :return: `None` if two responses are equal or candidate response otherwise. + """ + return None if candidate == reference else candidate
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/testing/telegram.html b/_modules/dff/utils/testing/telegram.html new file mode 100644 index 0000000000..4fbc54f0b5 --- /dev/null +++ b/_modules/dff/utils/testing/telegram.html @@ -0,0 +1,885 @@ + + + + + + + + + + dff.utils.testing.telegram — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.testing.telegram

    +"""
    +Telegram testing utils
    +----------------------
    +This module defines functions used to test Telegram interface.
    +"""
    +from typing import List, Optional, cast, Tuple
    +from contextlib import asynccontextmanager, nullcontext
    +import logging
    +import asyncio
    +from tempfile import TemporaryDirectory
    +from pathlib import Path
    +from copy import deepcopy
    +
    +from telethon.tl.types import ReplyKeyboardHide
    +from telethon import TelegramClient
    +from telethon.types import User
    +from telethon.custom import Message as TlMessage
    +from telebot import types
    +
    +from dff.pipeline.pipeline.pipeline import Pipeline
    +from dff.script.core.message import Message, Attachments, Attachment, Button, Location
    +from dff.messengers.telegram.interface import PollingTelegramInterface
    +from dff.messengers.telegram.message import TelegramMessage, TelegramUI, RemoveKeyboard, _ClickButton
    +
    +
    +
    +[docs] +def replace_click_button(happy_path): + """ + Replace all _ClickButton instances in `happy_path`. + This allows using :py:func:`~dff.utils.testing.common.check_happy_path` instead of + :py:meth:~dff.utils.testing.telegram.TelegramTesting.check_happy_path`. + + :return: A `happy_path` with all `_ClickButton` replaced with payload values of the buttons. + """ + result = deepcopy(happy_path) + for index in range(len(happy_path)): + user_request = happy_path[index][0] + if not isinstance(user_request, TelegramMessage): + continue + if isinstance(user_request.callback_query, _ClickButton): + callback_query = None + for _, bot_response in reversed(happy_path[:index]): + if isinstance(bot_response, TelegramMessage) and bot_response.ui is not None and callback_query is None: + callback_query = bot_response.ui.buttons[user_request.callback_query.button_index].payload + if callback_query is None: + raise RuntimeError("Bot response with buttons not found.") + result[index][0].callback_query = callback_query + return result
    + + + +
    +[docs] +async def get_bot_user(client: TelegramClient, username: str): + async with client: + return await client.get_entity(username)
    + + + +
    +[docs] +class TelegramTesting: # pragma: no cover + """ + Defines functions for testing. + + :param pipeline: + Pipeline with the telegram messenger interface. + Required for :py:meth:`~dff.utils.testing.telegram.TelegramTesting.send_and_check` and + :py:meth:`~dff.utils.testing.telegram.TelegramTesting.check_happy_path` with `run_bot=True` + :param api_credentials: + Telegram API id and hash. + Obtainable via https://core.telegram.org/api/obtaining_api_id. + :param session_file: + A `telethon` session file. + Obtainable by connecting to :py:class:`telethon.TelegramClient` and entering phone number and code. + :param client: + An alternative to passing `api_credentials` and `session_file`. + :param bot_username: + Either a link to the bot user or its handle. Used to determine whom to talk with as a client. + :param bot: + An alternative to passing `bot_username`. + Result of calling :py:func:`~dff.utils.testing.telegram.get_bot_user` with `bot_username` as parameter. + """ + + def __init__( + self, + pipeline: Pipeline, + api_credentials: Optional[Tuple[int, str]] = None, + session_file: Optional[str] = None, + client: Optional[TelegramClient] = None, + bot_username: Optional[str] = None, + bot: Optional[User] = None, + ): + if client is None: + if api_credentials is None or session_file is None: + raise RuntimeError("Pass either `client` or `api_credentials` and `session_file`.") + client = TelegramClient(session_file, *api_credentials) + self.client = client + """Telegram client (not bot). Needed to verify bot replies.""" + self.pipeline = pipeline + if bot is None: + if bot_username is None: + raise RuntimeError("Pass either `bot_username` or `bot`.") + bot = asyncio.run(get_bot_user(self.client, bot_username)) + self.bot = bot + """Bot user (to know whom to send messages to from client).""" + +
    +[docs] + async def send_message(self, message: TelegramMessage, last_bot_messages: List[TlMessage]): + """ + Send a message from client to bot. + If the message contains `callback_query`, only press the button, ignore other fields. + + :param message: Message to send. + :param last_bot_messages: + The last bot response. Accepts a list because messages with multiple fields are split in telegram. + Can only contain one keyboard in the list. + Used to determine which button to press when message contains + :py:class:`~dff.messengers.telegram.message._ClickButton`. + """ + if message.callback_query is not None: + query = message.callback_query + if not isinstance(query, _ClickButton): + raise RuntimeError(f"Use `_ClickButton` during tests: {query}") + for bot_message in last_bot_messages: + if bot_message.buttons is not None: + await bot_message.click(i=query.button_index) + return None + if message.attachments is None or len(message.attachments.files) == 0: + return await self.client.send_message(self.bot, message.text) + else: + if len(message.attachments.files) == 1: + attachment = message.attachments.files[0] + files = attachment.source + else: + files = [file.source for file in message.attachments.files] + return await self.client.send_file(self.bot, files, caption=message.text)
    + + +
    +[docs] + @staticmethod + async def parse_responses(responses: List[TlMessage], file_download_destination) -> Message: + """ + Convert a list of bot responses into a single message. + This function accepts a list because messages with multiple attachments are split. + + :param responses: A list of bot responses that are considered to be a single message. + :param file_download_destination: A directory to download sent media to. + """ + msg = TelegramMessage() + for response in responses: + if response.text and response.file is None: + if msg.text: + raise RuntimeError(f"Several messages with text:\n{msg.text}\n{response.text}") + msg.text = response.text or msg.text + if response.file is not None: + file = Path(file_download_destination) / (str(response.file.media.id) + response.file.ext) + await response.download_media(file=file) + if msg.attachments is None: + msg.attachments = Attachments() + msg.attachments.files.append( + Attachment(source=file, id=None, title=response.file.title or response.text or None) + ) + if response.buttons is not None: + buttons = [] + for row in response.buttons: + for button in row: + buttons.append( + Button( + source=button.url, + text=button.text, + payload=button.data, + ) + ) + if msg.ui is not None: + raise RuntimeError(f"Several messages with ui:\n{msg.ui}\n{TelegramUI(buttons=buttons)}") + msg.ui = TelegramUI(buttons=buttons) + if isinstance(response.reply_markup, ReplyKeyboardHide): + if msg.ui is not None: + raise RuntimeError(f"Several messages with ui:\n{msg.ui}\n{types.ReplyKeyboardRemove()}") + msg.ui = RemoveKeyboard() + if response.geo is not None: + location = Location(latitude=response.geo.lat, longitude=response.geo.long) + if msg.location is not None: + raise RuntimeError(f"Several messages with location:\n{msg.location}\n{location}") + msg.location = location + return msg
    + + +
    +[docs] + @asynccontextmanager + async def run_bot_loop(self): + """A context manager that returns a function to run one polling loop of a messenger interface.""" + self.pipeline.messenger_interface.timeout = 2 + self.pipeline.messenger_interface.long_polling_timeout = 2 + await self.forget_previous_updates() + + yield lambda: self.pipeline.messenger_interface._polling_loop(self.pipeline._run_pipeline) + + self.pipeline.messenger_interface.forget_processed_updates()
    + + +
    +[docs] + async def send_and_check(self, message: Message, file_download_destination=None): + """ + Send a message from a bot, receive it as client, verify it. + + :param message: Message to send and check. + :param file_download_destination: + Temporary directory (used to download sent files). + Defaults to :py:class:`tempfile.TemporaryDirectory`. + """ + await self.forget_previous_updates() + + async with self.client: + messenger_interface = cast(PollingTelegramInterface, self.pipeline.messenger_interface) + + messages = await self.client.get_messages(self.bot, limit=1) + if len(messages) == 0: + last_message_id = 0 + else: + last_message_id = messages[0].id + + messenger_interface.messenger.send_response((await self.client.get_me(input_peer=True)).user_id, message) + + await asyncio.sleep(3) + bot_messages = [ + x async for x in self.client.iter_messages(self.bot, min_id=last_message_id, from_user=self.bot) + ] # iter_messages is used instead of get_messages because get_messages requires bot min_id and max_id + + if file_download_destination is None: + fd_context = TemporaryDirectory() + else: + fd_context = nullcontext(file_download_destination) + + with fd_context as file_download_destination: + result = await self.parse_responses(bot_messages, file_download_destination) + + assert result == message
    + + +
    +[docs] + async def forget_previous_updates(self): + messenger_interface = cast(PollingTelegramInterface, self.pipeline.messenger_interface) + messenger = messenger_interface.messenger + updates = messenger.get_updates(offset=messenger.last_update_id + 1, timeout=1, long_polling_timeout=1) + max_update_id = max([*map(lambda x: x.update_id, updates), -1]) + messenger.get_updates(offset=max_update_id + 1, timeout=1, long_polling_timeout=1)
    + + +
    +[docs] + async def check_happy_path(self, happy_path, file_download_destination=None, run_bot: bool = True): + """ + Play out a dialogue with the bot. Check that the dialogue is correct. + + :param happy_path: Expected dialogue + :param file_download_destination: Temporary directory (used to download sent files) + :param run_bot: Whether a bot inside pipeline should be running (disable this to test non-async bots) + :return: + """ + if run_bot: + bot = self.run_bot_loop() + else: + + async def null(): + ... + + bot = nullcontext(null) + + if file_download_destination is None: + fd_context = TemporaryDirectory() + else: + fd_context = nullcontext(file_download_destination) + + async with self.client, bot as boot_loop: + with fd_context as file_download_destination: + bot_messages = [] + last_message = None + for request, response in happy_path: + logging.info(f"Sending request {request}") + user_message = await self.send_message(TelegramMessage.model_validate(request), bot_messages) + if user_message is not None: + last_message = user_message + logging.info("Request sent") + await boot_loop() + await asyncio.sleep(2) + logging.info("Extracting responses") + bot_messages = [ + x async for x in self.client.iter_messages(self.bot, min_id=last_message.id, from_user=self.bot) + ] + # iter_messages is used instead of get_messages because get_messages requires bot min_id and max_id + if len(bot_messages) > 0: + last_message = bot_messages[0] + logging.info("Got responses") + result = await self.parse_responses(bot_messages, file_download_destination) + assert result == TelegramMessage.model_validate(response)
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/turn_caching/singleton_turn_caching.html b/_modules/dff/utils/turn_caching/singleton_turn_caching.html new file mode 100644 index 0000000000..62b9aa73a1 --- /dev/null +++ b/_modules/dff/utils/turn_caching/singleton_turn_caching.html @@ -0,0 +1,638 @@ + + + + + + + + + + dff.utils.turn_caching.singleton_turn_caching — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.turn_caching.singleton_turn_caching

    +"""
    +Singleton Turn Caching
    +----------------------
    +This module contains functions for caching function results on each dialog turn.
    +"""
    +import functools
    +from typing import Callable, List, Optional
    +
    +
    +USED_CACHES: List[Callable] = list()
    +"""Cache singleton, it is common for all actors and pipelines in current environment."""
    +
    +
    +
    +[docs] +def cache_clear(): + """ + Function for cache singleton clearing, it is called in the end of pipeline execution turn. + """ + for used_cache in USED_CACHES: + used_cache.cache_clear()
    + + + +
    +[docs] +def lru_cache(maxsize: Optional[int] = None, typed: bool = False) -> Callable: + """ + Decorator function for caching function results in scripts. + Works like the standard :py:func:`~functools.lru_cache` function. + Caches are kept in a library-wide singleton and cleared in the end of each turn. + """ + + def decorator(func): + global USED_CACHES + + @functools.wraps(func) + @functools.lru_cache(maxsize=maxsize, typed=typed) + def wrapper(*args, **kwargs): + return func(*args, **kwargs) + + USED_CACHES += [wrapper] + return wrapper + + return decorator
    + + + +
    +[docs] +def cache(func): + """ + Decorator function for caching function results in scripts. + Works like the standard :py:func:`~functools.cache` function. + Caches are kept in a library-wide singleton and cleared in the end of each turn. + """ + return lru_cache(maxsize=None)(func)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 0000000000..75d67105fb --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,623 @@ + + + + + + + + + + Overview: module code — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_sources/about_us.rst.txt b/_sources/about_us.rst.txt new file mode 100644 index 0000000000..4eacd29d12 --- /dev/null +++ b/_sources/about_us.rst.txt @@ -0,0 +1,8 @@ +About us +-------- + +Dialog Flow Framework is developed by the DFF development department of `DeepPavlov `_. + +Founder and leader of the project -- Denis Kuznetsov. + +Developers -- Roman Zlobin, Aleksandr Sergeev, Daniil Ignatiev, Aleksandr Sakharov. \ No newline at end of file diff --git a/_sources/apiref/dff.context_storages.database.rst.txt b/_sources/apiref/dff.context_storages.database.rst.txt new file mode 100644 index 0000000000..d066c5dd6d --- /dev/null +++ b/_sources/apiref/dff.context_storages.database.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/database + +.. automodule:: dff.context_storages.database + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.json.rst.txt b/_sources/apiref/dff.context_storages.json.rst.txt new file mode 100644 index 0000000000..b0503ccfe3 --- /dev/null +++ b/_sources/apiref/dff.context_storages.json.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/json + +.. automodule:: dff.context_storages.json + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.mongo.rst.txt b/_sources/apiref/dff.context_storages.mongo.rst.txt new file mode 100644 index 0000000000..57163c5fc2 --- /dev/null +++ b/_sources/apiref/dff.context_storages.mongo.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/mongo + +.. automodule:: dff.context_storages.mongo + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.pickle.rst.txt b/_sources/apiref/dff.context_storages.pickle.rst.txt new file mode 100644 index 0000000000..b4c3eaf643 --- /dev/null +++ b/_sources/apiref/dff.context_storages.pickle.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/pickle + +.. automodule:: dff.context_storages.pickle + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.protocol.rst.txt b/_sources/apiref/dff.context_storages.protocol.rst.txt new file mode 100644 index 0000000000..4a2d208384 --- /dev/null +++ b/_sources/apiref/dff.context_storages.protocol.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/protocol + +.. automodule:: dff.context_storages.protocol + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.redis.rst.txt b/_sources/apiref/dff.context_storages.redis.rst.txt new file mode 100644 index 0000000000..05aa567cc3 --- /dev/null +++ b/_sources/apiref/dff.context_storages.redis.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/redis + +.. automodule:: dff.context_storages.redis + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.shelve.rst.txt b/_sources/apiref/dff.context_storages.shelve.rst.txt new file mode 100644 index 0000000000..71452671e8 --- /dev/null +++ b/_sources/apiref/dff.context_storages.shelve.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/shelve + +.. automodule:: dff.context_storages.shelve + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.sql.rst.txt b/_sources/apiref/dff.context_storages.sql.rst.txt new file mode 100644 index 0000000000..7f5e0ccecc --- /dev/null +++ b/_sources/apiref/dff.context_storages.sql.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/sql + +.. automodule:: dff.context_storages.sql + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.ydb.rst.txt b/_sources/apiref/dff.context_storages.ydb.rst.txt new file mode 100644 index 0000000000..a59a14aeb5 --- /dev/null +++ b/_sources/apiref/dff.context_storages.ydb.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/ydb + +.. automodule:: dff.context_storages.ydb + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.common.interface.rst.txt b/_sources/apiref/dff.messengers.common.interface.rst.txt new file mode 100644 index 0000000000..cf4b9fd411 --- /dev/null +++ b/_sources/apiref/dff.messengers.common.interface.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/common/interface + +.. automodule:: dff.messengers.common.interface + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.common.types.rst.txt b/_sources/apiref/dff.messengers.common.types.rst.txt new file mode 100644 index 0000000000..9bc80fbcc5 --- /dev/null +++ b/_sources/apiref/dff.messengers.common.types.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/common/types + +.. automodule:: dff.messengers.common.types + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.telegram.interface.rst.txt b/_sources/apiref/dff.messengers.telegram.interface.rst.txt new file mode 100644 index 0000000000..3e4e0d5c76 --- /dev/null +++ b/_sources/apiref/dff.messengers.telegram.interface.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/telegram/interface + +.. automodule:: dff.messengers.telegram.interface + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.telegram.message.rst.txt b/_sources/apiref/dff.messengers.telegram.message.rst.txt new file mode 100644 index 0000000000..5d552fdec3 --- /dev/null +++ b/_sources/apiref/dff.messengers.telegram.message.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/telegram/message + +.. automodule:: dff.messengers.telegram.message + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.telegram.messenger.rst.txt b/_sources/apiref/dff.messengers.telegram.messenger.rst.txt new file mode 100644 index 0000000000..c752252bf2 --- /dev/null +++ b/_sources/apiref/dff.messengers.telegram.messenger.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/telegram/messenger + +.. automodule:: dff.messengers.telegram.messenger + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.telegram.utils.rst.txt b/_sources/apiref/dff.messengers.telegram.utils.rst.txt new file mode 100644 index 0000000000..e8cea54a8b --- /dev/null +++ b/_sources/apiref/dff.messengers.telegram.utils.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/telegram/utils + +.. automodule:: dff.messengers.telegram.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.conditions.rst.txt b/_sources/apiref/dff.pipeline.conditions.rst.txt new file mode 100644 index 0000000000..f8390c6a85 --- /dev/null +++ b/_sources/apiref/dff.pipeline.conditions.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/conditions + +.. automodule:: dff.pipeline.conditions + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.pipeline.actor.rst.txt b/_sources/apiref/dff.pipeline.pipeline.actor.rst.txt new file mode 100644 index 0000000000..ecafe83dfc --- /dev/null +++ b/_sources/apiref/dff.pipeline.pipeline.actor.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/pipeline/actor + +.. automodule:: dff.pipeline.pipeline.actor + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.pipeline.component.rst.txt b/_sources/apiref/dff.pipeline.pipeline.component.rst.txt new file mode 100644 index 0000000000..ef42951245 --- /dev/null +++ b/_sources/apiref/dff.pipeline.pipeline.component.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/pipeline/component + +.. automodule:: dff.pipeline.pipeline.component + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.pipeline.pipeline.rst.txt b/_sources/apiref/dff.pipeline.pipeline.pipeline.rst.txt new file mode 100644 index 0000000000..5bee8a72d2 --- /dev/null +++ b/_sources/apiref/dff.pipeline.pipeline.pipeline.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/pipeline/pipeline + +.. automodule:: dff.pipeline.pipeline.pipeline + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.pipeline.utils.rst.txt b/_sources/apiref/dff.pipeline.pipeline.utils.rst.txt new file mode 100644 index 0000000000..44dd020256 --- /dev/null +++ b/_sources/apiref/dff.pipeline.pipeline.utils.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/pipeline/utils + +.. automodule:: dff.pipeline.pipeline.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.service.extra.rst.txt b/_sources/apiref/dff.pipeline.service.extra.rst.txt new file mode 100644 index 0000000000..b8525d2ac2 --- /dev/null +++ b/_sources/apiref/dff.pipeline.service.extra.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/service/extra + +.. automodule:: dff.pipeline.service.extra + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.service.group.rst.txt b/_sources/apiref/dff.pipeline.service.group.rst.txt new file mode 100644 index 0000000000..c9813524e2 --- /dev/null +++ b/_sources/apiref/dff.pipeline.service.group.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/service/group + +.. automodule:: dff.pipeline.service.group + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.service.service.rst.txt b/_sources/apiref/dff.pipeline.service.service.rst.txt new file mode 100644 index 0000000000..673ecb4ff1 --- /dev/null +++ b/_sources/apiref/dff.pipeline.service.service.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/service/service + +.. automodule:: dff.pipeline.service.service + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.service.utils.rst.txt b/_sources/apiref/dff.pipeline.service.utils.rst.txt new file mode 100644 index 0000000000..0fda2b8eef --- /dev/null +++ b/_sources/apiref/dff.pipeline.service.utils.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/service/utils + +.. automodule:: dff.pipeline.service.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.types.rst.txt b/_sources/apiref/dff.pipeline.types.rst.txt new file mode 100644 index 0000000000..3658cd98fb --- /dev/null +++ b/_sources/apiref/dff.pipeline.types.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/types + +.. automodule:: dff.pipeline.types + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.conditions.std_conditions.rst.txt b/_sources/apiref/dff.script.conditions.std_conditions.rst.txt new file mode 100644 index 0000000000..9452e07b1a --- /dev/null +++ b/_sources/apiref/dff.script.conditions.std_conditions.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/conditions/std_conditions + +.. automodule:: dff.script.conditions.std_conditions + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.context.rst.txt b/_sources/apiref/dff.script.core.context.rst.txt new file mode 100644 index 0000000000..8f40706bca --- /dev/null +++ b/_sources/apiref/dff.script.core.context.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/context + +.. automodule:: dff.script.core.context + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.keywords.rst.txt b/_sources/apiref/dff.script.core.keywords.rst.txt new file mode 100644 index 0000000000..6a66bbd854 --- /dev/null +++ b/_sources/apiref/dff.script.core.keywords.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/keywords + +.. automodule:: dff.script.core.keywords + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.message.rst.txt b/_sources/apiref/dff.script.core.message.rst.txt new file mode 100644 index 0000000000..16e406c701 --- /dev/null +++ b/_sources/apiref/dff.script.core.message.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/message + +.. automodule:: dff.script.core.message + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.normalization.rst.txt b/_sources/apiref/dff.script.core.normalization.rst.txt new file mode 100644 index 0000000000..5ae5f028a0 --- /dev/null +++ b/_sources/apiref/dff.script.core.normalization.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/normalization + +.. automodule:: dff.script.core.normalization + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.script.rst.txt b/_sources/apiref/dff.script.core.script.rst.txt new file mode 100644 index 0000000000..d55b17f08e --- /dev/null +++ b/_sources/apiref/dff.script.core.script.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/script + +.. automodule:: dff.script.core.script + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.types.rst.txt b/_sources/apiref/dff.script.core.types.rst.txt new file mode 100644 index 0000000000..e86e0857da --- /dev/null +++ b/_sources/apiref/dff.script.core.types.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/types + +.. automodule:: dff.script.core.types + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.extras.conditions.rst.txt b/_sources/apiref/dff.script.extras.conditions.rst.txt new file mode 100644 index 0000000000..6ebb47e585 --- /dev/null +++ b/_sources/apiref/dff.script.extras.conditions.rst.txt @@ -0,0 +1,12 @@ +:source_name: dff/script/extras/conditions + +dff.script.extras.conditions package +==================================== + +Module contents +--------------- + +.. automodule:: dff.script.extras.conditions + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.extras.slots.rst.txt b/_sources/apiref/dff.script.extras.slots.rst.txt new file mode 100644 index 0000000000..205fe4174b --- /dev/null +++ b/_sources/apiref/dff.script.extras.slots.rst.txt @@ -0,0 +1,12 @@ +:source_name: dff/script/extras/slots + +dff.script.extras.slots package +=============================== + +Module contents +--------------- + +.. automodule:: dff.script.extras.slots + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.labels.std_labels.rst.txt b/_sources/apiref/dff.script.labels.std_labels.rst.txt new file mode 100644 index 0000000000..db10a608c2 --- /dev/null +++ b/_sources/apiref/dff.script.labels.std_labels.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/labels/std_labels + +.. automodule:: dff.script.labels.std_labels + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.responses.std_responses.rst.txt b/_sources/apiref/dff.script.responses.std_responses.rst.txt new file mode 100644 index 0000000000..bc8a8e8b8c --- /dev/null +++ b/_sources/apiref/dff.script.responses.std_responses.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/responses/std_responses + +.. automodule:: dff.script.responses.std_responses + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.stats.cli.rst.txt b/_sources/apiref/dff.stats.cli.rst.txt new file mode 100644 index 0000000000..d23493194a --- /dev/null +++ b/_sources/apiref/dff.stats.cli.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/stats/cli + +.. automodule:: dff.stats.cli + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.stats.default_extractors.rst.txt b/_sources/apiref/dff.stats.default_extractors.rst.txt new file mode 100644 index 0000000000..a0ee6e2ba9 --- /dev/null +++ b/_sources/apiref/dff.stats.default_extractors.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/stats/default_extractors + +.. automodule:: dff.stats.default_extractors + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.stats.instrumentor.rst.txt b/_sources/apiref/dff.stats.instrumentor.rst.txt new file mode 100644 index 0000000000..bef1ed24c7 --- /dev/null +++ b/_sources/apiref/dff.stats.instrumentor.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/stats/instrumentor + +.. automodule:: dff.stats.instrumentor + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.stats.utils.rst.txt b/_sources/apiref/dff.stats.utils.rst.txt new file mode 100644 index 0000000000..e3094d7b26 --- /dev/null +++ b/_sources/apiref/dff.stats.utils.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/stats/utils + +.. automodule:: dff.stats.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.db_benchmark.basic_config.rst.txt b/_sources/apiref/dff.utils.db_benchmark.basic_config.rst.txt new file mode 100644 index 0000000000..204b26b546 --- /dev/null +++ b/_sources/apiref/dff.utils.db_benchmark.basic_config.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/db_benchmark/basic_config + +.. automodule:: dff.utils.db_benchmark.basic_config + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.db_benchmark.benchmark.rst.txt b/_sources/apiref/dff.utils.db_benchmark.benchmark.rst.txt new file mode 100644 index 0000000000..aad30022e9 --- /dev/null +++ b/_sources/apiref/dff.utils.db_benchmark.benchmark.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/db_benchmark/benchmark + +.. automodule:: dff.utils.db_benchmark.benchmark + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.db_benchmark.report.rst.txt b/_sources/apiref/dff.utils.db_benchmark.report.rst.txt new file mode 100644 index 0000000000..7d62dabd81 --- /dev/null +++ b/_sources/apiref/dff.utils.db_benchmark.report.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/db_benchmark/report + +.. automodule:: dff.utils.db_benchmark.report + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.testing.cleanup_db.rst.txt b/_sources/apiref/dff.utils.testing.cleanup_db.rst.txt new file mode 100644 index 0000000000..811aea1211 --- /dev/null +++ b/_sources/apiref/dff.utils.testing.cleanup_db.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/testing/cleanup_db + +.. automodule:: dff.utils.testing.cleanup_db + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.testing.common.rst.txt b/_sources/apiref/dff.utils.testing.common.rst.txt new file mode 100644 index 0000000000..346f64250a --- /dev/null +++ b/_sources/apiref/dff.utils.testing.common.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/testing/common + +.. automodule:: dff.utils.testing.common + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.testing.response_comparers.rst.txt b/_sources/apiref/dff.utils.testing.response_comparers.rst.txt new file mode 100644 index 0000000000..505cac3a52 --- /dev/null +++ b/_sources/apiref/dff.utils.testing.response_comparers.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/testing/response_comparers + +.. automodule:: dff.utils.testing.response_comparers + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.testing.telegram.rst.txt b/_sources/apiref/dff.utils.testing.telegram.rst.txt new file mode 100644 index 0000000000..b7efe86359 --- /dev/null +++ b/_sources/apiref/dff.utils.testing.telegram.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/testing/telegram + +.. automodule:: dff.utils.testing.telegram + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.testing.toy_script.rst.txt b/_sources/apiref/dff.utils.testing.toy_script.rst.txt new file mode 100644 index 0000000000..4e781ac81a --- /dev/null +++ b/_sources/apiref/dff.utils.testing.toy_script.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/testing/toy_script + +.. automodule:: dff.utils.testing.toy_script + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.turn_caching.singleton_turn_caching.rst.txt b/_sources/apiref/dff.utils.turn_caching.singleton_turn_caching.rst.txt new file mode 100644 index 0000000000..8fa7968f27 --- /dev/null +++ b/_sources/apiref/dff.utils.turn_caching.singleton_turn_caching.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/turn_caching/singleton_turn_caching + +.. automodule:: dff.utils.turn_caching.singleton_turn_caching + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/index_caching.rst.txt b/_sources/apiref/index_caching.rst.txt new file mode 100644 index 0000000000..3a2e87c87d --- /dev/null +++ b/_sources/apiref/index_caching.rst.txt @@ -0,0 +1,11 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Caching +======= + +.. autosummary:: + :toctree: + + dff.utils.turn_caching.singleton_turn_caching diff --git a/_sources/apiref/index_context_storages.rst.txt b/_sources/apiref/index_context_storages.rst.txt new file mode 100644 index 0000000000..9677d2aa13 --- /dev/null +++ b/_sources/apiref/index_context_storages.rst.txt @@ -0,0 +1,19 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Context Storages +================ + +.. autosummary:: + :toctree: + + dff.context_storages.pickle + dff.context_storages.database + dff.context_storages.shelve + dff.context_storages.json + dff.context_storages.sql + dff.context_storages.mongo + dff.context_storages.redis + dff.context_storages.protocol + dff.context_storages.ydb diff --git a/_sources/apiref/index_db_benchmark.rst.txt b/_sources/apiref/index_db_benchmark.rst.txt new file mode 100644 index 0000000000..959c6c74d0 --- /dev/null +++ b/_sources/apiref/index_db_benchmark.rst.txt @@ -0,0 +1,13 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +DB Benchmark +============ + +.. autosummary:: + :toctree: + + dff.utils.db_benchmark.report + dff.utils.db_benchmark.basic_config + dff.utils.db_benchmark.benchmark diff --git a/_sources/apiref/index_messenger_interfaces.rst.txt b/_sources/apiref/index_messenger_interfaces.rst.txt new file mode 100644 index 0000000000..d1093f275b --- /dev/null +++ b/_sources/apiref/index_messenger_interfaces.rst.txt @@ -0,0 +1,16 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Messenger Interfaces +==================== + +.. autosummary:: + :toctree: + + dff.messengers.common.types + dff.messengers.telegram.utils + dff.messengers.telegram.interface + dff.messengers.telegram.message + dff.messengers.telegram.messenger + dff.messengers.common.interface diff --git a/_sources/apiref/index_pipeline.rst.txt b/_sources/apiref/index_pipeline.rst.txt new file mode 100644 index 0000000000..fd5016a32b --- /dev/null +++ b/_sources/apiref/index_pipeline.rst.txt @@ -0,0 +1,20 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Pipeline +======== + +.. autosummary:: + :toctree: + + dff.pipeline.types + dff.pipeline.pipeline.actor + dff.pipeline.service.extra + dff.pipeline.service.utils + dff.pipeline.conditions + dff.pipeline.pipeline.utils + dff.pipeline.service.group + dff.pipeline.pipeline.pipeline + dff.pipeline.service.service + dff.pipeline.pipeline.component diff --git a/_sources/apiref/index_script.rst.txt b/_sources/apiref/index_script.rst.txt new file mode 100644 index 0000000000..31ec925144 --- /dev/null +++ b/_sources/apiref/index_script.rst.txt @@ -0,0 +1,21 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Script +====== + +.. autosummary:: + :toctree: + + dff.script.core.context + dff.script.core.message + dff.script.conditions.std_conditions + dff.script.core.normalization + dff.script.labels.std_labels + dff.script.core.script + dff.script.responses.std_responses + dff.script.extras.slots + dff.script.core.types + dff.script.extras.conditions + dff.script.core.keywords diff --git a/_sources/apiref/index_stats.rst.txt b/_sources/apiref/index_stats.rst.txt new file mode 100644 index 0000000000..3669e3d2c6 --- /dev/null +++ b/_sources/apiref/index_stats.rst.txt @@ -0,0 +1,14 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Stats +===== + +.. autosummary:: + :toctree: + + dff.stats.instrumentor + dff.stats.cli + dff.stats.utils + dff.stats.default_extractors diff --git a/_sources/apiref/index_testing_utils.rst.txt b/_sources/apiref/index_testing_utils.rst.txt new file mode 100644 index 0000000000..c2b43d2474 --- /dev/null +++ b/_sources/apiref/index_testing_utils.rst.txt @@ -0,0 +1,15 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Testing Utils +============= + +.. autosummary:: + :toctree: + + dff.utils.testing.telegram + dff.utils.testing.cleanup_db + dff.utils.testing.toy_script + dff.utils.testing.common + dff.utils.testing.response_comparers diff --git a/_sources/community.rst.txt b/_sources/community.rst.txt new file mode 100644 index 0000000000..3aae1a75f4 --- /dev/null +++ b/_sources/community.rst.txt @@ -0,0 +1,21 @@ +Community +--------- + +This section provides links to different platforms where users of DFF can ask questions, +share their experiences, report issues, and communicate with the DFF development team and other DFF users. + +Please take a short survey about DFF: +`Google Form `_. +This will allow us to make it better. + +`DeepPavlov Forum `_ is designed to discuss various aspects of DeepPavlov, +which includes the DFF. + +`Telegram `_ is a group chat where DFF users can ask questions and +get help from the community. + +`GitHub Issues `_ is a platform where users +can report issues, suggest features, and track the progress of DFF development. + +`Stack Overflow `_ is a platform where DFF users can ask +technical questions and get answers from the community. \ No newline at end of file diff --git a/_sources/development.rst.txt b/_sources/development.rst.txt new file mode 100644 index 0000000000..19163a38de --- /dev/null +++ b/_sources/development.rst.txt @@ -0,0 +1,23 @@ +Development +----------- + +Contribution +~~~~~~~~~~~~~~~ + +`Contribution rules `_ provide +guidelines and rules for contributing to the Dialog Flow Framework project. It includes information on +how to contribute code to the project, manage your workflow, use tests, and so on. + +Project roadmap +~~~~~~~~~~~~~~~ + +`Project roadmap `_ +outlines the future development plans for DFF, including new features and enhancements +that are planned for upcoming releases. + +Release notes +~~~~~~~~~~~~~ + +`Release notes `_ +contain information about the latest releases of DFF, including new features, improvements, and bug fixes. + diff --git a/_sources/examples.rst.txt b/_sources/examples.rst.txt new file mode 100644 index 0000000000..6c5854dbc4 --- /dev/null +++ b/_sources/examples.rst.txt @@ -0,0 +1,4 @@ +Examples +-------- + +Examples are available in this `repository `_. diff --git a/_sources/get_started.rst.txt b/_sources/get_started.rst.txt new file mode 100644 index 0000000000..b0749793ee --- /dev/null +++ b/_sources/get_started.rst.txt @@ -0,0 +1,74 @@ +Getting started +--------------- + +Installation +~~~~~~~~~~~~ + +DFF can be easily installed on your system using the ``pip`` package manager: + +.. code-block:: console + + pip install dff + +This framework is compatible with Python 3.8 and newer versions. + +The above command will set the minimum dependencies to start working with DFF. +The installation process allows the user to choose from different packages based on their dependencies, which are: + +.. code-block:: console + + pip install dff[json] # dependencies for using JSON + pip install dff[pickle] # dependencies for using Pickle + pip install dff[redis] # dependencies for using Redis + pip install dff[mongodb] # dependencies for using MongoDB + pip install dff[mysql] # dependencies for using MySQL + pip install dff[postgresql] # dependencies for using PostgreSQL + pip install dff[sqlite] # dependencies for using SQLite + pip install dff[ydb] # dependencies for using Yandex Database + pip install dff[telegram] # dependencies for using Telegram + pip install dff[benchmark] # dependencies for benchmarking + +For example, if you are going to use one of the database backends, +you can specify the corresponding requirements yourself. + +Additionally, you also have the option to download the source code directly from the +`GitHub `_ repository using the commands: + +.. code-block:: console + + git clone https://github.com/deeppavlov/dialog_flow_framework.git + cd dialog_flow_framework + +Once you are in the directory, you can run the command ``make venv`` to set up all the necessary requirements for the library. +If you need to update the requirements, use the command ``make clean`` to remove `venv` first. + +Key concepts +~~~~~~~~~~~~ + +DFF is a powerful tool for creating conversational services. +It allows developers to easily write and manage dialog systems by defining a special +dialog graph that describes the behavior of the service. +DFF offers a specialized language (DSL) for quickly writing dialog graphs, +making it easy for developers to create chatbots for a wide +range of applications, such as social networks, call centers, websites, personal assistants, etc. + +DFF has several important concepts: + +**Script**: First of all, to create a dialog agent it is necessary +to create a dialog :py:class:`~dff.script.core.script.Script`. +A dialog `script` is a dictionary, where keys correspond to different `flows`. +A script can contain multiple scripts, which are flows too, what is needed in order to divide +a dialog into sub-dialogs and process them separately. + +**Flow**: As mentioned above, the dialog is divided into flows. +Each flow represent a sub-dialog corresponding to the discussion of a particular topic. +Each flow is also a dictionary, where the keys are the `nodes`. + +**Node**: A `node` is the smallest unit of a dialog flow, and it contains the bot's response +to a user's input as well as a `condition` that determines +the `transition` to another node, whether it's within the current or another flow. + +**Keywords**: DFF uses several special `keywords`. These keywords are the keys in the dictionaries inside the script. +The most important for using the framework are `RESPONSE` and `TRANSITIONS` keywords. +The first one corresponds to the response that the bot will send to the user from the current node. +The second corresponds to the transition conditions from the current node to other nodes. \ No newline at end of file diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000000..42b71d3f36 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,97 @@ +.. Dialog Flow Framework documentation master file, created by + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Dialog Flow Framework +===================== + +*Date*: |today| *Version*: |version| + +.. image:: https://pepy.tech/badge/dff + :alt: Number of downloads + :target: https://pypi.org/project/dff/ + +.. image:: https://img.shields.io/badge/python-3.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-green.svg + :alt: Supported python versions + +The Dialog Flow Framework (DFF) is an open-source, `Apache 2.0 `_-licensed library +that was developed specifically for creating dialog systems. DFF provides a comprehensive set of tools and resources, +targeting a wide range of applications, including chatbots, virtual assistants, and other interactive systems. +It allows developers to easily create and manage complex dialog flows, integrate with natural language processing (NLP) tools, +and handle user input in a flexible and efficient manner. Additionally, the framework is highly customizable, +allowing developers to easily adapt it to their specific needs and requirements. + +DFF documentation includes the following sections: + +:doc:`Getting started <./get_started>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Essential information about installing and using the library +aimed at beginners can be found in the ``Getting started`` part +of the documentation. This section also introduces the basic terms +that form the principles of the framework. +For deeper understanding of the API, consult the documentation sections described below. + +:doc:`User guides <./user_guides>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``User guides`` section provides comprehensive human-readable explanations +of how your conversational service should be set up and function. +It specifically highlights the aspects that are not covered by the API reference, +e.g. deployment, optimization techniques, etc. + +:doc:`Tutorials <./tutorials>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Most capabilities of DFF can also be explored in the ``Tutorials`` +section. These interactive files dynamically showcase how different +modules and classes of the framework interact. + +:doc:`Examples <./examples>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Links to demonsration projects that leverage the library +integrating it with external services and models and serve as examples +can be found in this section. + +:doc:`API reference <./reference>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The API reference contains documentation for classes and abstractions +used in the library which can be used to determine the exact typing +and behavior of all the functions involved. + +:doc:`Development <./development>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``Development`` section shows the library's current development status and specifies the contribution rules. + +:doc:`Community <./community>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``Community`` section links you to useful resources where you can find supplemental information +about the framework and ask questions. + +:doc:`About us <./about_us>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can get more info about the development team in the ``About us`` section. + +.. toctree:: + :hidden: + :maxdepth: 1 + + get_started + user_guides + tutorials + examples + reference + development + community + about_us + +Indices and tables +------------------ + +* :ref:`genindex` +* :ref:`modindex` diff --git a/_sources/reference.rst.txt b/_sources/reference.rst.txt new file mode 100644 index 0000000000..467c763a2e --- /dev/null +++ b/_sources/reference.rst.txt @@ -0,0 +1,9 @@ +API reference +------------- + +.. toctree:: + :name: reference + :glob: + :maxdepth: 1 + + apiref/index_* diff --git a/_sources/tutorials.rst.txt b/_sources/tutorials.rst.txt new file mode 100644 index 0000000000..ba9b2e0986 --- /dev/null +++ b/_sources/tutorials.rst.txt @@ -0,0 +1,30 @@ +Tutorials +--------- +Tutorials page is a collection of instructional materials designed to help developers learn +how to use DFF to build conversational agents. The tutorials cover a range of topics, +from getting started with DFF to more advanced topics such as integrating external APIs. +Each tutorial includes detailed explanations and code examples. Tutorials cover different aspects +of the framework and are organized into sections. + +The Context Storages section describes how to use context storages in DFF. +The Messengers section covers how to use the Telegram messenger with DFF. +The Pipeline section teaches the basics of the pipeline concept, how to use pre- and postprocessors, +asynchronous groups and services, custom messenger interfaces, and extra handlers and extensions. +The Script section covers the basics of the script concept, including conditions, responses, transitions, +and serialization. It also includes tutorials on pre-response and pre-transitions processing. +Finally, the Utils section covers the cache and LRU cache utilities in DFF. + +The main difference between Tutorials and Examples is that Tutorials typically show how to implement +a specific feature or solve a particular problem, whereas Examples provide a more +comprehensive overview of how to build a complete application. + +| To understand the basics of DFF, read the following tutorials: +| 1) Script / Core / 1. Basics +| 2) Script / Core / 2. Conditions +| 3) Pipeline / 1. Basics + +.. toctree:: + :name: tutorials + :glob: + + tutorials/index_* diff --git a/_sources/tutorials/index_context_storages.rst.txt b/_sources/tutorials/index_context_storages.rst.txt new file mode 100644 index 0000000000..55d72b14b4 --- /dev/null +++ b/_sources/tutorials/index_context_storages.rst.txt @@ -0,0 +1,16 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Context Storages +================ + +.. nbgallery:: + tutorials.context_storages.1_basics.py + tutorials.context_storages.2_postgresql.py + tutorials.context_storages.3_mongodb.py + tutorials.context_storages.4_redis.py + tutorials.context_storages.5_mysql.py + tutorials.context_storages.6_sqlite.py + tutorials.context_storages.7_yandex_database.py + tutorials.context_storages.8_db_benchmarking.py diff --git a/_sources/tutorials/index_interfaces.rst.txt b/_sources/tutorials/index_interfaces.rst.txt new file mode 100644 index 0000000000..b2daaf6db8 --- /dev/null +++ b/_sources/tutorials/index_interfaces.rst.txt @@ -0,0 +1,28 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Interfaces +========== + +Telegram +-------- + +.. nbgallery:: + tutorials.messengers.telegram.1_basic.py + tutorials.messengers.telegram.2_buttons.py + tutorials.messengers.telegram.3_buttons_with_callback.py + tutorials.messengers.telegram.4_conditions.py + tutorials.messengers.telegram.5_conditions_with_media.py + tutorials.messengers.telegram.6_conditions_extras.py + tutorials.messengers.telegram.7_polling_setup.py + tutorials.messengers.telegram.8_webhook_setup.py + +Web API +------- + +.. nbgallery:: + tutorials.messengers.web_api_interface.1_fastapi.py + tutorials.messengers.web_api_interface.2_websocket_chat.py + tutorials.messengers.web_api_interface.3_load_testing_with_locust.py + tutorials.messengers.web_api_interface.4_streamlit_chat.py diff --git a/_sources/tutorials/index_pipeline.rst.txt b/_sources/tutorials/index_pipeline.rst.txt new file mode 100644 index 0000000000..87e65577a5 --- /dev/null +++ b/_sources/tutorials/index_pipeline.rst.txt @@ -0,0 +1,19 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Pipeline +======== + +.. nbgallery:: + tutorials.pipeline.1_basics.py + tutorials.pipeline.2_pre_and_post_processors.py + tutorials.pipeline.3_pipeline_dict_with_services_basic.py + tutorials.pipeline.3_pipeline_dict_with_services_full.py + tutorials.pipeline.4_groups_and_conditions_basic.py + tutorials.pipeline.4_groups_and_conditions_full.py + tutorials.pipeline.5_asynchronous_groups_and_services_basic.py + tutorials.pipeline.5_asynchronous_groups_and_services_full.py + tutorials.pipeline.6_extra_handlers_basic.py + tutorials.pipeline.6_extra_handlers_full.py + tutorials.pipeline.7_extra_handlers_and_extensions.py diff --git a/_sources/tutorials/index_script.rst.txt b/_sources/tutorials/index_script.rst.txt new file mode 100644 index 0000000000..7a7eec6a31 --- /dev/null +++ b/_sources/tutorials/index_script.rst.txt @@ -0,0 +1,29 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Script +====== + +Core +---- + +.. nbgallery:: + tutorials.script.core.1_basics.py + tutorials.script.core.2_conditions.py + tutorials.script.core.3_responses.py + tutorials.script.core.4_transitions.py + tutorials.script.core.5_global_transitions.py + tutorials.script.core.6_context_serialization.py + tutorials.script.core.7_pre_response_processing.py + tutorials.script.core.8_misc.py + tutorials.script.core.9_pre_transitions_processing.py + +Responses +--------- + +.. nbgallery:: + tutorials.script.responses.1_basics.py + tutorials.script.responses.2_buttons.py + tutorials.script.responses.3_media.py + tutorials.script.responses.4_multi_message.py diff --git a/_sources/tutorials/index_stats.rst.txt b/_sources/tutorials/index_stats.rst.txt new file mode 100644 index 0000000000..64fa941200 --- /dev/null +++ b/_sources/tutorials/index_stats.rst.txt @@ -0,0 +1,10 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Stats +===== + +.. nbgallery:: + tutorials.stats.1_extractor_functions.py + tutorials.stats.2_pipeline_integration.py diff --git a/_sources/tutorials/index_utils.rst.txt b/_sources/tutorials/index_utils.rst.txt new file mode 100644 index 0000000000..56e2a7a3a2 --- /dev/null +++ b/_sources/tutorials/index_utils.rst.txt @@ -0,0 +1,10 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Utils +===== + +.. nbgallery:: + tutorials.utils.1_cache.py + tutorials.utils.2_lru_cache.py diff --git a/_sources/tutorials/tutorials.context_storages.1_basics.py.txt b/_sources/tutorials/tutorials.context_storages.1_basics.py.txt new file mode 100644 index 0000000000..449f93ef27 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.1_basics.py.txt @@ -0,0 +1,42 @@ +# %% [markdown] +""" +# 1. Basics + +The following tutorial shows the basic use of the database connection. + +See %mddoclink(api,context_storages.database,context_storage_factory) function +for creating a context storage by path. + +In this example JSON file is used as a storage. +""" + +# %pip install dff[json,pickle] + +# %% +import pathlib + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + +pathlib.Path("dbs").mkdir(exist_ok=True) +db = context_storage_factory("json://dbs/file.json") +# db = context_storage_factory("pickle://dbs/file.pkl") +# db = context_storage_factory("shelve://dbs/file") + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + # a function for automatic tutorial running (testing) with HAPPY_PATH + + # This runs tutorial in interactive mode if not in IPython env + # and if `DISABLE_INTERACTIVE_MODE` is not set + if is_interactive_mode(): + run_interactive_mode(pipeline) # This runs tutorial in interactive mode diff --git a/_sources/tutorials/tutorials.context_storages.2_postgresql.py.txt b/_sources/tutorials/tutorials.context_storages.2_postgresql.py.txt new file mode 100644 index 0000000000..4a92685755 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.2_postgresql.py.txt @@ -0,0 +1,47 @@ +# %% [markdown] +""" +# 2. PostgreSQL + +This is a tutorial on using PostgreSQL. + +See %mddoclink(api,context_storages.sql,SQLContextStorage) class +for storing your users' contexts in SQL databases. + +DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/) +and [asyncpg](https://magicstack.github.io/asyncpg/current/) +libraries for asynchronous access to PostgreSQL DB. +""" + +# %pip install dff[postgresql] + +# %% +import os + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +db_uri = "postgresql+asyncpg://{}:{}@localhost:5432/{}".format( + os.environ["POSTGRES_USERNAME"], + os.environ["POSTGRES_PASSWORD"], + os.environ["POSTGRES_DB"], +) +db = context_storage_factory(db_uri) + + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.3_mongodb.py.txt b/_sources/tutorials/tutorials.context_storages.3_mongodb.py.txt new file mode 100644 index 0000000000..f55ae3fbb7 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.3_mongodb.py.txt @@ -0,0 +1,45 @@ +# %% [markdown] +""" +# 3. MongoDB + +This is a tutorial on using MongoDB. + +See %mddoclink(api,context_storages.mongo,MongoContextStorage) class +for storing you users' contexts in Mongo database. + +DFF uses [motor](https://motor.readthedocs.io/en/stable/) +library for asynchronous access to MongoDB. +""" + +# %pip install dff[mongodb] + +# %% +import os + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +db_uri = "mongodb://{}:{}@localhost:27017/{}".format( + os.environ["MONGO_INITDB_ROOT_USERNAME"], + os.environ["MONGO_INITDB_ROOT_PASSWORD"], + os.environ["MONGO_INITDB_ROOT_USERNAME"], +) +db = context_storage_factory(db_uri) + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.4_redis.py.txt b/_sources/tutorials/tutorials.context_storages.4_redis.py.txt new file mode 100644 index 0000000000..918b5d1276 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.4_redis.py.txt @@ -0,0 +1,44 @@ +# %% [markdown] +""" +# 4. Redis + +This is a tutorial on using Redis. + +See %mddoclink(api,context_storages.redis,RedisContextStorage) class +for storing you users' contexts in Redis database. + +DFF uses [redis.asyncio](https://redis.readthedocs.io/en/latest/) +library for asynchronous access to Redis DB. +""" + +# %pip install dff[redis] + +# %% +import os + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +db_uri = "redis://{}:{}@localhost:6379/{}".format( + "", os.environ["REDIS_PASSWORD"], "0" +) +db = context_storage_factory(db_uri) + + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.5_mysql.py.txt b/_sources/tutorials/tutorials.context_storages.5_mysql.py.txt new file mode 100644 index 0000000000..aed04712ae --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.5_mysql.py.txt @@ -0,0 +1,47 @@ +# %% [markdown] +""" +# 5. MySQL + +This is a tutorial on using MySQL. + +See %mddoclink(api,context_storages.sql,SQLContextStorage) class +for storing you users' contexts in SQL databases. + +DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/) +and [asyncmy](https://github.com/long2ice/asyncmy) +libraries for asynchronous access to MySQL DB. +""" + +# %pip install dff[mysql] + +# %% +import os + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +db_uri = "mysql+asyncmy://{}:{}@localhost:3307/{}".format( + os.environ["MYSQL_USERNAME"], + os.environ["MYSQL_PASSWORD"], + os.environ["MYSQL_DATABASE"], +) +db = context_storage_factory(db_uri) + + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.6_sqlite.py.txt b/_sources/tutorials/tutorials.context_storages.6_sqlite.py.txt new file mode 100644 index 0000000000..8d7e0b53b4 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.6_sqlite.py.txt @@ -0,0 +1,51 @@ +# %% [markdown] +""" +# 6. SQLite + +This is a tutorial on using SQLite. + +See %mddoclink(api,context_storages.sql,SQLContextStorage) class +for storing you users' contexts in SQL databases. + +DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/) +and [aiosqlite](https://readthedocs.org/projects/aiosqlite/) +libraries for asynchronous access to SQLite DB. + +Note that protocol separator for windows differs from one for linux. +""" + +# %pip install dff[sqlite] + +# %% +import pathlib +from platform import system + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +pathlib.Path("dbs").mkdir(exist_ok=True) +db_file = pathlib.Path("dbs/sqlite.db") +db_file.touch(exist_ok=True) + +separator = "///" if system() == "Windows" else "////" +db_uri = f"sqlite+aiosqlite:{separator}{db_file.absolute()}" +db = context_storage_factory(db_uri) + + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.7_yandex_database.py.txt b/_sources/tutorials/tutorials.context_storages.7_yandex_database.py.txt new file mode 100644 index 0000000000..2474900416 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.7_yandex_database.py.txt @@ -0,0 +1,52 @@ +# %% [markdown] +""" +# 7. Yandex DataBase + +This is a tutorial on how to use Yandex DataBase. + +See %mddoclink(api,context_storages.ydb,YDBContextStorage) class +for storing you users' contexts in Yandex database. + +DFF uses [ydb.aio](https://ydb.tech/en/docs/) +library for asynchronous access to Yandex DB. +""" + +# %pip install dff[ydb] + +# %% +import os + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + run_interactive_mode, + is_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +# ##### Connecting to yandex cloud +# https://github.com/zinal/ydb-python-sdk/blob/ex_basic-example_p1/examples/basic_example_v1/README.md +# export YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS=$HOME/key-ydb-sa-0.json +# export YDB_ENDPOINT=grpcs://ydb.serverless.yandexcloud.net:2135 +# export YDB_DATABASE=/ru-central1/qwertyuiopasdfgh/123456789qwertyui +# ##### or use local-ydb with variables from .env_file +# db_uri="grpc://localhost:2136/local" + +db_uri = "{}{}".format( + os.environ["YDB_ENDPOINT"], + os.environ["YDB_DATABASE"], +) +db = context_storage_factory(db_uri) + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.8_db_benchmarking.py.txt b/_sources/tutorials/tutorials.context_storages.8_db_benchmarking.py.txt new file mode 100644 index 0000000000..1b56414b41 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.8_db_benchmarking.py.txt @@ -0,0 +1,241 @@ +# %% [markdown] +""" +# 8. Context storage benchmarking + +This tutorial shows how to benchmark context storages. + +For more info see [API reference](%doclink(api,utils.db_benchmark.benchmark)). +""" + +# %pip install dff[benchmark,json,pickle,postgresql,mongodb,redis,mysql,sqlite,ydb] + +# %% +from pathlib import Path +from platform import system +import tempfile + +import dff.utils.db_benchmark as benchmark + +# %% [markdown] +""" +## Context storage setup +""" + +# %% +# this cell is only required for pickle, shelve and sqlite databases +tutorial_dir = Path(tempfile.mkdtemp()) +db_path = tutorial_dir / "dbs" +db_path.mkdir() +sqlite_file = db_path / "sqlite.db" +sqlite_file.touch(exist_ok=True) +sqlite_separator = "///" if system() == "Windows" else "////" + +# %% +storages = { + "JSON": f"json://{db_path}/json.json", + "Pickle": f"pickle://{db_path}/pickle.pkl", + "Shelve": f"shelve://{db_path}/shelve", + "PostgreSQL": "postgresql+asyncpg://postgres:pass@localhost:5432/test", + "MongoDB": "mongodb://admin:pass@localhost:27017/admin", + "Redis": "redis://:pass@localhost:6379/0", + "MySQL": "mysql+asyncmy://root:pass@localhost:3307/test", + "SQLite": f"sqlite+aiosqlite:{sqlite_separator}{sqlite_file.absolute()}", + "YDB": "grpc://localhost:2136/local", +} + +# %% [markdown] +""" +## Saving benchmark results to a file + +Benchmark results are saved to files. + +For that there exist two functions: +%mddoclink(api,utils.db_benchmark.benchmark,benchmark_all) +and +%mddoclink(api,utils.db_benchmark.benchmark,save_results_to_file). + +Note: context storages passed into these functions will be cleared. + +Once the benchmark results are saved to a file, you can view and analyze them using two methods: + +* [Using the Report Function](#Using-the-report-function): This function + can display specified information from a given file. + By default, it prints the name and average metrics for each benchmark case. + +* [Using the Streamlit App](#Using-Streamlit-app): A Streamlit app + is available for viewing and comparing benchmark results. + You can upload benchmark result files using the app's "Benchmark sets" tab, + inspect individual results in the "View" tab, and compare metrics in the "Compare" tab. + +Benchmark results are saved according to a specific schema, +which can be found in the benchmark schema documentation. +Each database being benchmarked will have its own result file. + +### Configuration + +The first one is a higher-level wrapper of the second one. +The first function accepts +%mddoclink(api,utils.db_benchmark.benchmark,BenchmarkCase) +which configure databases that are being benchmark and configurations of the benchmarks. +The second function accepts only a single URI for the database and several benchmark configurations. +So, the second function is simpler to use, while the first function allows for more configuration +(e.g. having different databases benchmarked in a single file). + +Both function use +%mddoclink(api,utils.db_benchmark.benchmark,BenchmarkConfig) +to configure benchmark behaviour. +`BenchmarkConfig` is only an interface for benchmark configurations. +Its most basic implementation is +%mddoclink(api,utils.db_benchmark.basic_config,BasicBenchmarkConfig). + +DFF provides configuration presets in the +%mddoclink(api,utils.db_benchmark.basic_config) module, +covering various contexts, messages, and edge cases. +You can use these presets by passing them to the benchmark functions or create +your own configuration. + +To learn more about using presets see [Configuration presets](#Configuration-presets) + +Benchmark configs have several parameters: + +Setting `context_num` to 50 means that we'll run fifty cycles of writing and reading context. +This way we'll be able to get a more accurate average read/write time as well as +check if read/write times are dependent on the number of contexts in the storage. + +You can also configure the `dialog_len`, `message_dimensions` and `misc_dimensions` parameters. +This allows you to set the contexts you want your database to be benchmarked with. + +### File structure + +The files are saved according to [the schema]( +../_misc/benchmark_schema.json +). +""" + +# %% +for db_name, db_uri in storages.items(): + benchmark.benchmark_all( + file=tutorial_dir / f"{db_name}.json", + name="Tutorial benchmark", + description="Benchmark for tutorial", + db_uri=db_uri, + benchmark_configs={ + "simple_config": benchmark.BasicBenchmarkConfig( + context_num=50, + from_dialog_len=1, + to_dialog_len=5, + message_dimensions=(3, 10), + misc_dimensions=(3, 10), + ), + }, + ) + +# %% [markdown] +""" +Running the cell above will create a file with benchmark results for every benchmarked DB: +""" + +# %% +list(tutorial_dir.iterdir()) + +# %% [markdown] +""" +## Viewing benchmark results + +Now that the results are saved to a file you can either view them using the +%mddoclink(api,utils.db_benchmark.report,report) +function or [our streamlit app]( +../_misc/benchmark_streamlit.py +). +""" + +# %% [markdown] +""" +### Using the report function + +The report function will print specified information from a given file. + +By default it prints the name and average metrics for each case. +""" + +# %% +benchmark.report( + file=tutorial_dir / "Shelve.json", display={"name", "config", "metrics"} +) + +# %% [markdown] +""" +### Using Streamlit app + +To run the app, execute: + +``` +# download file +curl https://deeppavlov.github.io/dialog_flow_framework/_misc/benchmark_streamlit.py \ +-o benchmark_streamlit.py +# install dependencies +pip install dff[benchmark] +# run +streamlit run benchmark_streamlit.py +``` + +You can upload files with benchmark results using the first tab of the app ("Benchmark sets"): + +.. figure:: ../_static/images/benchmark_sets.png + +The second tab ("View") lets you inspect individual benchmark results. +It also allows you to add a specific benchmark result +to the "Compare" tab via the button in the top-right corner. + +.. figure:: ../_static/images/benchmark_view.png + +In the "Compare" tab you can view main metrics (write, read, update, read+update) +of previously added benchmark results: + +.. figure:: ../_static/images/benchmark_compare.png + +"Mass compare" tab saves you the trouble of manually adding +to compare every benchmark result from a single file. + +.. figure:: ../_static/images/benchmark_mass_compare.png +""" + +# %% [markdown] +""" +## Additional information + +### Configuration presets + +The +%mddoclink(api,utils.db_benchmark.basic_config) +module also includes a dictionary containing configuration presets. +Those cover various contexts and messages as well as some edge cases. +""" + +# %% +print(benchmark.basic_config.basic_configurations.keys()) + +# %% [markdown] +""" +To use configuration presets, simply pass them to benchmark functions: + + benchmark.benchmark_all( + ..., + benchmark_configs=benchmark.basic_configurations + ) +""" + +# %% [markdown] +""" +### Custom configuration + +If the basic configuration is not enough for you, you can create your own. + +To do so, inherit from the +%mddoclink(api,utils.db_benchmark.benchmark,BenchmarkConfig) +class. You need to define three methods: + +- `get_context` -- method to get initial contexts. +- `info` -- method for getting display info representing the configuration. +- `context_updater` -- method for updating contexts. +""" diff --git a/_sources/tutorials/tutorials.messengers.telegram.1_basic.py.txt b/_sources/tutorials/tutorials.messengers.telegram.1_basic.py.txt new file mode 100644 index 0000000000..45fccc2729 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.1_basic.py.txt @@ -0,0 +1,92 @@ +# %% [markdown] +""" +# Telegram: 1. Basic + +The following tutorial shows how to run a regular DFF script in Telegram. +It asks users for the '/start' command and then loops in one place. + +Here, %mddoclink(api,messengers.telegram.interface,PollingTelegramInterface) +class and [telebot](https://pytba.readthedocs.io/en/latest/index.html) +library are used for accessing telegram API in polling mode. + +Telegram API token is required to access telegram API. +""" + +# %pip install dff[telegram] + +# %% +import os + +from dff.script import conditions as cnd +from dff.script import labels as lbl +from dff.script import RESPONSE, TRANSITIONS, Message +from dff.messengers.telegram import PollingTelegramInterface +from dff.pipeline import Pipeline +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +In order to integrate your script with Telegram, you need an instance of +`TelegramMessenger` class and one of the following interfaces: +`PollingMessengerInterface` or `WebhookMessengerInterface`. + +`TelegramMessenger` encapsulates the bot logic. +Like Telebot, `TelegramMessenger` only requires a token to run. +However, all parameters from the Telebot class can be passed as keyword arguments. + +The two interfaces connect the bot to Telegram. They can be passed directly +to the DFF `Pipeline` instance. +""" + + +# %% +script = { + "greeting_flow": { + "start_node": { + TRANSITIONS: { + "greeting_node": cnd.exact_match(Message(text="/start")) + }, + }, + "greeting_node": { + RESPONSE: Message(text="Hi"), + TRANSITIONS: {lbl.repeat(): cnd.true()}, + }, + "fallback_node": { + RESPONSE: Message(text="Please, repeat the request"), + TRANSITIONS: { + "greeting_node": cnd.exact_match(Message(text="/start")) + }, + }, + } +} + +# this variable is only for testing +happy_path = ( + (Message(text="/start"), Message(text="Hi")), + (Message(text="Hi"), Message(text="Hi")), + (Message(text="Bye"), Message(text="Hi")), +) + + +# %% +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), + messenger_interface=interface, + # The interface can be passed as a pipeline argument. +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.2_buttons.py.txt b/_sources/tutorials/tutorials.messengers.telegram.2_buttons.py.txt new file mode 100644 index 0000000000..efbbf2ab47 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.2_buttons.py.txt @@ -0,0 +1,192 @@ +# %% [markdown] +""" +# Telegram: 2. Buttons + +This tutorial shows how to display and hide a basic keyboard in Telegram. + +Here, %mddoclink(api,messengers.telegram.message,TelegramMessage) +class is used to represent telegram message, +%mddoclink(api,messengers.telegram.message,TelegramUI) and +%mddoclink(api,messengers.telegram.message,RemoveKeyboard) +classes are used for configuring additional telegram message features. + +Different %mddoclink(api,script.core.message,message) +classes are used for representing different common message features, +like Attachment, Audio, Button, Image, etc. +""" + + +# %pip install dff[telegram] + +# %% +import os + +import dff.script.conditions as cnd +from dff.script import TRANSITIONS, RESPONSE +from dff.script.core.message import Button +from dff.pipeline import Pipeline +from dff.messengers.telegram import ( + PollingTelegramInterface, + TelegramUI, + TelegramMessage, + RemoveKeyboard, +) +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +To display or hide a keyboard, you can utilize the `ui` field of the `TelegramMessage` class. +It can be initialized either with a `TelegramUI` instance or with a custom telebot keyboard. + +Passing an instance of `RemoveKeyboard` to the `ui` field will indicate that the keyboard +should be removed. +""" + + +# %% +script = { + "root": { + "start": { + TRANSITIONS: { + ("general", "native_keyboard"): ( + lambda ctx, _: ctx.last_request.text + in ("/start", "/restart") + ), + }, + }, + "fallback": { + RESPONSE: TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + TRANSITIONS: { + ("general", "native_keyboard"): ( + lambda ctx, _: ctx.last_request.text + in ("/start", "/restart") + ), + }, + }, + }, + "general": { + "native_keyboard": { + RESPONSE: TelegramMessage( + text="Question: What's 2 + 2?", + # In this case, we use telegram-specific classes. + # They derive from the generic ones and include more options, + # e.g. simple keyboard or inline keyboard. + ui=TelegramUI( + buttons=[ + Button(text="5"), + Button(text="4"), + ], + is_inline=False, + row_width=4, + ), + ), + TRANSITIONS: { + ("general", "success"): cnd.exact_match( + TelegramMessage(text="4") + ), + ("general", "fail"): cnd.true(), + }, + }, + "success": { + RESPONSE: TelegramMessage( + **{"text": "Success!", "ui": RemoveKeyboard()} + ), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + "fail": { + RESPONSE: TelegramMessage( + **{ + "text": "Incorrect answer, type anything to try again", + "ui": RemoveKeyboard(), + } + ), + TRANSITIONS: {("general", "native_keyboard"): cnd.true()}, + }, + }, +} + +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + +# this variable is only for testing +happy_path = ( + ( + TelegramMessage(text="/start"), + TelegramMessage( + text="Question: What's 2 + 2?", + ui=TelegramUI( + buttons=[ + Button(text="5"), + Button(text="4"), + ], + is_inline=False, + row_width=4, + ), + ), + ), + ( + TelegramMessage(text="5"), + TelegramMessage( + text="Incorrect answer, type anything to try again", + ui=RemoveKeyboard(), + ), + ), + ( + TelegramMessage(text="ok"), + TelegramMessage( + text="Question: What's 2 + 2?", + ui=TelegramUI( + buttons=[ + Button(text="5"), + Button(text="4"), + ], + is_inline=False, + row_width=4, + ), + ), + ), + ( + TelegramMessage(text="4"), + TelegramMessage(text="Success!", ui=RemoveKeyboard()), + ), + ( + TelegramMessage(text="Yay!"), + TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + ), + ( + TelegramMessage(text="/start"), + TelegramMessage( + text="Question: What's 2 + 2?", + ui=TelegramUI( + buttons=[ + Button(text="5"), + Button(text="4"), + ], + is_inline=False, + row_width=4, + ), + ), + ), +) + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), + messenger_interface=interface, +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.py.txt b/_sources/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.py.txt new file mode 100644 index 0000000000..10d54927ff --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.py.txt @@ -0,0 +1,181 @@ +# %% [markdown] +""" +# Telegram: 3. Buttons with Callback + +This tutorial demonstrates, how to add an inline keyboard and utilize +inline queries. + +Here, %mddoclink(api,messengers.telegram.message,TelegramMessage) +class is used to represent telegram message, +%mddoclink(api,messengers.telegram.message,TelegramUI) and +%mddoclink(api,messengers.telegram.message,RemoveKeyboard) +classes are used for configuring additional telegram message features. + +Different %mddoclink(api,script.core.message,message) +classes are used for representing different common message features, +like Attachment, Audio, Button, Image, etc. +""" + + +# %pip install dff[telegram] + +# %% +import os + +import dff.script.conditions as cnd +from dff.script import TRANSITIONS, RESPONSE +from dff.pipeline import Pipeline +from dff.script.core.message import Button +from dff.messengers.telegram import ( + PollingTelegramInterface, + TelegramUI, + TelegramMessage, +) +from dff.messengers.telegram.message import _ClickButton +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +If you want to send an inline keyboard to your Telegram chat, +set `is_inline` field of the `TelegramUI` instance to `True` +(note that it is inline by default, so you could also omit it). + +Pushing a button of an inline keyboard results in a callback +query being sent to your bot. The data of the query +is stored in the `callback_query` field of a user `TelegramMessage`. +""" + + +# %% +script = { + "root": { + "start": { + TRANSITIONS: { + ("general", "keyboard"): ( + lambda ctx, _: ctx.last_request.text + in ("/start", "/restart") + ), + }, + }, + "fallback": { + RESPONSE: TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + TRANSITIONS: { + ("general", "keyboard"): ( + lambda ctx, _: ctx.last_request.text + in ("/start", "/restart") + ) + }, + }, + }, + "general": { + "keyboard": { + RESPONSE: TelegramMessage( + **{ + "text": "Starting test! What's 9 + 10?", + "ui": TelegramUI( + buttons=[ + Button(text="19", payload="correct"), + Button(text="21", payload="wrong"), + ], + is_inline=True, + ), + } + ), + TRANSITIONS: { + ("general", "success"): cnd.exact_match( + TelegramMessage(callback_query="correct") + ), + ("general", "fail"): cnd.exact_match( + TelegramMessage(callback_query="wrong") + ), + }, + }, + "success": { + RESPONSE: TelegramMessage(text="Success!"), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + "fail": { + RESPONSE: TelegramMessage( + text="Incorrect answer, type anything to try again" + ), + TRANSITIONS: {("general", "keyboard"): cnd.true()}, + }, + }, +} + +# this variable is only for testing +happy_path = ( + ( + TelegramMessage(text="/start"), + TelegramMessage( + text="Starting test! What's 9 + 10?", + ui=TelegramUI( + buttons=[ + Button(text="19", payload="correct"), + Button(text="21", payload="wrong"), + ], + ), + ), + ), + ( + TelegramMessage(callback_query=_ClickButton(button_index=1)), + TelegramMessage(text="Incorrect answer, type anything to try again"), + ), + ( + TelegramMessage(text="try again"), + TelegramMessage( + text="Starting test! What's 9 + 10?", + ui=TelegramUI( + buttons=[ + Button(text="19", payload="correct"), + Button(text="21", payload="wrong"), + ], + ), + ), + ), + ( + TelegramMessage(callback_query=_ClickButton(button_index=0)), + TelegramMessage(text="Success!"), + ), + ( + TelegramMessage(text="Yay!"), + TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + ), + ( + TelegramMessage(text="/restart"), + TelegramMessage( + text="Starting test! What's 9 + 10?", + ui=TelegramUI( + buttons=[ + Button(text="19", payload="correct"), + Button(text="21", payload="wrong"), + ], + ), + ), + ), +) + +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), + messenger_interface=interface, +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.4_conditions.py.txt b/_sources/tutorials/tutorials.messengers.telegram.4_conditions.py.txt new file mode 100644 index 0000000000..d6ba4f4c52 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.4_conditions.py.txt @@ -0,0 +1,143 @@ +# %% [markdown] +""" +# Telegram: 4. Conditions + +This tutorial shows how to process Telegram updates in your script +and reuse handler triggers from the `pytelegrambotapi` library. + +Here, %mddoclink(api,messengers.telegram.messenger,telegram_condition) +function is used for graph navigation according to Telegram events. +""" + + +# %pip install dff[telegram] + +# %% +import os + +from dff.script import TRANSITIONS, RESPONSE + +from dff.messengers.telegram import ( + PollingTelegramInterface, + telegram_condition, + UpdateType, +) +from dff.pipeline import Pipeline +from dff.messengers.telegram import TelegramMessage +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +In our Telegram module, we adopted the system of filters +available in the `pytelegrambotapi` library. + +You can use `telegram_condition` to filter text messages from telegram in various ways. + +- Setting the `update_type` will allow filtering by update type: + if you want the condition to trigger only on updates of the type `edited_message`, + set it to `UpdateType.EDITED_MESSAGE`. + The field defaults to `message`. +- Setting the `command` argument will cause the telegram_condition to only react to listed commands. +- `func` argument on the other hand allows you to define arbitrary conditions. +- `regexp` creates a regular expression filter, etc. + +Note: +It is possible to use `cnd.exact_match` as a condition (as seen in previous tutorials). +However, the functionality of that approach is lacking: +At this moment only two fields of `Message` are set during update processing: + +- `text` stores the `text` field of `message` updates +- `callback_query` stores the `data` field of `callback_query` updates + +For more information see tutorial `3_buttons_with_callback.py`. +""" + + +# %% +script = { + "greeting_flow": { + "start_node": { + TRANSITIONS: { + "node1": telegram_condition(commands=["start", "restart"]) + }, + }, + "node1": { + RESPONSE: TelegramMessage(text="Hi, how are you?"), + TRANSITIONS: { + "node2": telegram_condition( + update_type=UpdateType.MESSAGE, regexp="fine" + ) + }, + # this is the same as + # TRANSITIONS: {"node2": telegram_condition(regexp="fine")}, + }, + "node2": { + RESPONSE: TelegramMessage( + text="Good. What do you want to talk about?" + ), + TRANSITIONS: { + "node3": telegram_condition( + func=lambda msg: "music" in msg.text + ) + }, + }, + "node3": { + RESPONSE: TelegramMessage( + text="Sorry, I can not talk about music now." + ), + TRANSITIONS: { + "node4": telegram_condition(update_type=UpdateType.ALL) + }, + # This condition is true for any type of update + }, + "node4": { + RESPONSE: TelegramMessage(text="bye"), + TRANSITIONS: {"node1": telegram_condition()}, + # This condition is true if the last update is of type `message` + }, + "fallback_node": { + RESPONSE: TelegramMessage(text="Ooops"), + TRANSITIONS: { + "node1": telegram_condition(commands=["start", "restart"]) + }, + }, + } +} + +# this variable is only for testing +happy_path = ( + (TelegramMessage(text="/start"), TelegramMessage(text="Hi, how are you?")), + ( + TelegramMessage(text="I'm fine"), + TelegramMessage(text="Good. What do you want to talk about?"), + ), + ( + TelegramMessage(text="About music"), + TelegramMessage(text="Sorry, I can not talk about music now."), + ), + (TelegramMessage(text="ok"), TelegramMessage(text="bye")), + (TelegramMessage(text="bye"), TelegramMessage(text="Hi, how are you?")), +) + + +# %% +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), + messenger_interface=interface, +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.5_conditions_with_media.py.txt b/_sources/tutorials/tutorials.messengers.telegram.5_conditions_with_media.py.txt new file mode 100644 index 0000000000..25b555138e --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.5_conditions_with_media.py.txt @@ -0,0 +1,208 @@ +# %% [markdown] +""" +# Telegram: 5. Conditions with Media + +This tutorial shows how to use media-related logic in your script. + +Here, %mddoclink(api,messengers.telegram.messenger,telegram_condition) +function is used for graph navigation according to Telegram events. + +Different %mddoclink(api,script.core.message,message) +classes are used for representing different common message features, +like Attachment, Audio, Button, Image, etc. +""" + + +# %pip install dff[telegram] + +# %% +import os + +from telebot.types import Message + +import dff.script.conditions as cnd +from dff.script import Context, TRANSITIONS, RESPONSE +from dff.script.core.message import Image, Attachments +from dff.messengers.telegram import ( + PollingTelegramInterface, + TelegramMessage, + telegram_condition, +) +from dff.pipeline import Pipeline +from dff.utils.testing.common import is_interactive_mode + + +# %% + +picture_url = ( + "https://gist.githubusercontent.com/scotthaleen/" + "32f76a413e0dfd4b4d79c2a534d49c0b/raw" + "/6c1036b1eca90b341caf06d4056d36f64fc11e88/tiny.jpg" +) + + +# %% [markdown] +""" +To filter user messages depending on whether or not media files were sent, +you can use the `content_types` parameter of the `telegram_condition`. +""" + + +# %% +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +script = { + "root": { + "start": { + TRANSITIONS: { + ("pics", "ask_picture"): telegram_condition( + commands=["start", "restart"] + ) + }, + }, + "fallback": { + RESPONSE: TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + TRANSITIONS: { + ("pics", "ask_picture"): telegram_condition( + commands=["start", "restart"] + ) + }, + }, + }, + "pics": { + "ask_picture": { + RESPONSE: TelegramMessage(text="Send me a picture"), + TRANSITIONS: { + ("pics", "send_one"): cnd.any( + [ + # Telegram can put photos + # both in 'photo' and 'document' fields. + # We should consider both cases + # when we check the message for media. + telegram_condition(content_types=["photo"]), + telegram_condition( + func=lambda message: ( + # check attachments in message properties + message.document + and message.document.mime_type == "image/jpeg" + ), + content_types=["document"], + ), + ] + ), + ("pics", "send_many"): telegram_condition( + content_types=["text"] + ), + ("pics", "ask_picture"): cnd.true(), + }, + }, + "send_one": { + # An HTTP path or a path to a local file can be used here. + RESPONSE: TelegramMessage( + text="Here's my picture!", + attachments=Attachments(files=[Image(source=picture_url)]), + ), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + "send_many": { + RESPONSE: TelegramMessage( + text="Look at my pictures!", + # An HTTP path or a path to a local file can be used here. + attachments=Attachments(files=[Image(source=picture_url)] * 2), + ), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + }, +} + + +# testing +happy_path = ( + ( + TelegramMessage(text="/start"), + TelegramMessage(text="Send me a picture"), + ), + ( + TelegramMessage( + attachments=Attachments(files=[Image(source=picture_url)]) + ), + TelegramMessage( + text="Here's my picture!", + attachments=Attachments(files=[Image(source=picture_url)]), + ), + ), + ( + TelegramMessage(text="ok"), + TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + ), + ( + TelegramMessage(text="/restart"), + TelegramMessage(text="Send me a picture"), + ), + ( + TelegramMessage(text="No"), + TelegramMessage( + text="Look at my pictures!", + attachments=Attachments(files=[Image(source=picture_url)] * 2), + ), + ), + ( + TelegramMessage(text="ok"), + TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + ), + ( + TelegramMessage(text="/restart"), + TelegramMessage(text="Send me a picture"), + ), +) + + +# %% +def extract_data(ctx: Context, _: Pipeline): # A function to extract data with + message = ctx.last_request + if message is None: + return ctx + update = getattr(message, "update", None) + if update is None: + return ctx + if not isinstance(update, Message): + return ctx + if ( + # check attachments in update properties + not update.photo + and not (update.document and update.document.mime_type == "image/jpeg") + ): + return ctx + photo = update.document or update.photo[-1] + file = interface.messenger.get_file(photo.file_id) + result = interface.messenger.download_file(file.file_path) + with open("photo.jpg", "wb+") as new_file: + new_file.write(result) + return ctx + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), + messenger_interface=interface, + pre_services=[extract_data], +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.6_conditions_extras.py.txt b/_sources/tutorials/tutorials.messengers.telegram.6_conditions_extras.py.txt new file mode 100644 index 0000000000..eee19866f9 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.6_conditions_extras.py.txt @@ -0,0 +1,125 @@ +# %% [markdown] +""" +# Telegram: 6. Conditions Extras + +This tutorial shows how to use additional update filters +inherited from the `pytelegrambotapi` library. + +%mddoclink(api,messengers.telegram.messenger,telegram_condition) +function and different types of %mddoclink(api,messengers.telegram.messenger,UpdateType) +are used for telegram message type checking. +""" + + +# %pip install dff[telegram] + +# %% +import os + +from dff.script import TRANSITIONS, RESPONSE, GLOBAL +import dff.script.conditions as cnd +from dff.messengers.telegram import ( + PollingTelegramInterface, + TelegramMessage, + telegram_condition, + UpdateType, +) +from dff.pipeline import Pipeline +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +In our Telegram module, we adopted the system of filters +available in the `pytelegrambotapi` library. + +Aside from `MESSAGE` you can use +other triggers to interact with the api. In this tutorial, we use +handlers of other type as global conditions that trigger a response +from the bot. + +Here, we use the following triggers: + +* `chat_join_request`: join request is sent to the chat where the bot is. +* `my_chat_member`: triggered when the bot is invited to a chat. +* `inline_query`: triggered when an inline query is being sent to the bot. + +The other available conditions are: + +* `channel_post`: new post is created in a channel the bot is subscribed to; +* `edited_channel_post`: post is edited in a channel the bot is subscribed to; +* `shipping_query`: shipping query is sent by the user; +* `pre_checkout_query`: order confirmation is sent by the user; +* `poll`: poll is sent to the chat; +* `poll_answer`: users answered the poll sent by the bot. + +You can read more on those in the Telegram documentation or in the docs for the `telebot` library. +""" + + +# %% +script = { + GLOBAL: { + TRANSITIONS: { + ("greeting_flow", "node1"): cnd.any( + [ + # say hi when invited to a chat + telegram_condition( + update_type=UpdateType.CHAT_JOIN_REQUEST, + func=lambda x: True, + ), + # say hi when someone enters the chat + telegram_condition( + update_type=UpdateType.MY_CHAT_MEMBER, + func=lambda x: True, + ), + ] + ), + # send a message when inline query is received + ("greeting_flow", "node2"): telegram_condition( + update_type=UpdateType.INLINE_QUERY, + ), + }, + }, + "greeting_flow": { + "start_node": { + RESPONSE: TelegramMessage(text="Bot running"), + TRANSITIONS: { + "node1": telegram_condition(commands=["start", "restart"]) + }, + }, + "node1": { + RESPONSE: TelegramMessage(text="Hi"), + TRANSITIONS: {"start_node": cnd.true()}, + }, + "node2": { + RESPONSE: TelegramMessage(text="Inline query received."), + TRANSITIONS: {"start_node": cnd.true()}, + }, + "fallback_node": { + RESPONSE: TelegramMessage(text="Ooops"), + }, + }, +} + + +# %% +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), + messenger_interface=interface, +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.7_polling_setup.py.txt b/_sources/tutorials/tutorials.messengers.telegram.7_polling_setup.py.txt new file mode 100644 index 0000000000..d070e47280 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.7_polling_setup.py.txt @@ -0,0 +1,64 @@ +# %% [markdown] +""" +# Telegram: 7. Polling Setup + +The following tutorial shows how to configure `PollingTelegramInterface`. + +See %mddoclink(api,messengers.telegram.interface,PollingTelegramInterface) +for more information. +""" + +# %pip install dff[telegram] + +# %% +import os + +from dff.messengers.telegram.interface import PollingTelegramInterface +from dff.pipeline import Pipeline + +from dff.utils.testing.common import is_interactive_mode +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH +from telebot.util import update_types + + +# %% [markdown] +""" +`PollingTelegramInterface` can be configured with the same parameters +that are used in the `pytelegrambotapi` library, specifically: + +* interval - time between calls to the API. +* allowed updates - updates that should be fetched. +* timeout - general timeout. +* long polling timeout - timeout for polling. +""" + + +# %% +interface = PollingTelegramInterface( + token=os.environ["TG_BOT_TOKEN"], + interval=2, + allowed_updates=update_types, + timeout=30, + long_polling_timeout=30, +) + + +# testing +happy_path = HAPPY_PATH + + +# %% +pipeline = Pipeline.from_script( + *TOY_SCRIPT_ARGS, + messenger_interface=interface, + # The interface can be passed as a pipeline argument +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.8_webhook_setup.py.txt b/_sources/tutorials/tutorials.messengers.telegram.8_webhook_setup.py.txt new file mode 100644 index 0000000000..a7f4fd68f5 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.8_webhook_setup.py.txt @@ -0,0 +1,61 @@ +# %% [markdown] +""" +# Telegram: 8. Webhook Setup + +The following tutorial shows how to use `CallbackTelegramInterface` +that makes your bot accessible through a public webhook. + +See %mddoclink(api,messengers.common.interface,CallbackMessengerInterface) +for more information. +""" + +# %pip install dff[telegram] flask + +# %% +import os + +from dff.messengers.telegram import ( + CallbackTelegramInterface, +) +from dff.pipeline import Pipeline +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +To set up a webhook, you need a messenger and a web application instance. +This class can be configured with the following parameters: + +* app - Flask application. You can pass an application with an arbitrary + number of pre-configured routes. Created automatically if not set. +* host - application host. +* port - application port. +* endpoint - bot access endpoint. +* full_uri - full public address of the endpoint. HTTPS should be enabled + for successful configuration. +""" + + +# %% +interface = CallbackTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +pipeline = Pipeline.from_script( + *TOY_SCRIPT_ARGS, + messenger_interface=interface, + # The interface can be passed as a pipeline argument +) + +# testing +happy_path = HAPPY_PATH + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.web_api_interface.1_fastapi.py.txt b/_sources/tutorials/tutorials.messengers.web_api_interface.1_fastapi.py.txt new file mode 100644 index 0000000000..199d1eb282 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.web_api_interface.1_fastapi.py.txt @@ -0,0 +1,113 @@ +# %% [markdown] +""" +# Web API: 1. FastAPI + +This tutorial shows how to create an API for DFF using FastAPI and +introduces messenger interfaces. + +You can see the result at http://127.0.0.1:8000/docs. + +Here, %mddoclink(api,messengers.common.interface,CallbackMessengerInterface) +is used to process requests. + +%mddoclink(api,script.core.message,Message) is used in creating a JSON Schema for the endpoint. +""" + +# %pip install dff uvicorn fastapi + +# %% +from dff.messengers.common.interface import CallbackMessengerInterface +from dff.script import Message +from dff.pipeline import Pipeline +from dff.utils.testing import TOY_SCRIPT_ARGS, is_interactive_mode + +import uvicorn +from pydantic import BaseModel +from fastapi import FastAPI + +# %% [markdown] +""" +Messenger interfaces establish communication between users and the pipeline. +They manage message channel initialization and termination +as well as pipeline execution on every user request. +There are two built-in messenger interface types that can be extended +through inheritance: + +* `PollingMessengerInterface` - Starts polling for user requests + in a loop upon initialization, + it has following methods: + + * `_request()` - Method that is used to retrieve user requests from a messenger, + should return list of tuples: (user request, unique dialog id). + * `_respond(responses)` - Method that sends responses generated by pipeline + to users through a messenger, + accepts list of dialog `Contexts`. + * `_on_exception(e)` - Method that is called when a critical exception occurs + i.e. exception from context storage or messenger interface, not a service exception. + + Such exceptions lead to the termination of the loop. + * `connect(pipeline_runner, loop, timeout)` - + Method that starts the polling loop. + + This method is called inside `pipeline.run` method. + + It accepts 3 arguments: + + * a callback that runs pipeline, + * a function that should return True to continue polling, + * and time to wait between loop executions. + +* `CallbackMessengerInterface` - Creates message channel + and provides a callback for pipeline execution, + it has following methods: + + * `on_request(request, ctx_id)` or `on_request_async(request, ctx_id)` - + Method that should be called each time + user provides new input to pipeline, + returns dialog Context. + * `connect(pipeline_runner)` - Method that sets `pipeline_runner` as + a function to be called inside `on_request`. + + This method is called inside `pipeline.run` method. + +You can find API reference for these classes [here](%doclink(api,messengers.common.interface)). + +Here the default `CallbackMessengerInterface` is used to setup +communication between the pipeline on the server side and the messenger client. +""" + +# %% +messenger_interface = CallbackMessengerInterface() +# CallbackMessengerInterface instantiating the dedicated messenger interface +pipeline = Pipeline.from_script( + *TOY_SCRIPT_ARGS, messenger_interface=messenger_interface +) + + +# %% +app = FastAPI() + + +class Output(BaseModel): + user_id: str + response: Message + + +@app.post("/chat", response_model=Output) +async def respond( + user_id: str, + user_message: Message, +): + context = await messenger_interface.on_request_async(user_message, user_id) + return {"user_id": user_id, "response": context.last_response} + + +# %% +if __name__ == "__main__": + if is_interactive_mode(): # do not run this during doc building + pipeline.run() # runs the messenger_interface.connect method + uvicorn.run( + app, + host="127.0.0.1", + port=8000, + ) diff --git a/_sources/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.py.txt b/_sources/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.py.txt new file mode 100644 index 0000000000..4719d14f36 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.py.txt @@ -0,0 +1,116 @@ +# %% [markdown] +""" +# Web API: 2. WebSocket Chat + +This tutorial shows how to create a Web chat on FastAPI using websockets. + +You can see the result at http://127.0.0.1:8000/. + +This tutorial is a modified version of the FastAPI tutorial on WebSockets: +https://fastapi.tiangolo.com/advanced/websockets/. + +As mentioned in that tutorial, + +> ... for this example, we'll use a very simple HTML document with some JavaScript, +> all inside a long string. +> This, of course, is not optimal and you wouldn't use it for production. + +Here, %mddoclink(api,messengers.common.interface,CallbackMessengerInterface) +is used to process requests. + +%mddoclink(api,script.core.message,Message) is used to represent text messages. +""" + +# %pip install dff uvicorn fastapi + +# %% +from dff.messengers.common.interface import CallbackMessengerInterface +from dff.script import Message +from dff.pipeline import Pipeline +from dff.utils.testing import TOY_SCRIPT_ARGS, is_interactive_mode + +import uvicorn +from fastapi import FastAPI, WebSocket, WebSocketDisconnect +from fastapi.responses import HTMLResponse + + +# %% +messenger_interface = CallbackMessengerInterface() +pipeline = Pipeline.from_script( + *TOY_SCRIPT_ARGS, messenger_interface=messenger_interface +) + + +# %% +app = FastAPI() + +html = """ + + + + Chat + + +

    WebSocket Chat

    +
    + + +
    +
      +
    + + + +""" + + +@app.get("/") +async def get(): + return HTMLResponse(html) + + +@app.websocket("/ws/{client_id}") +async def websocket_endpoint(websocket: WebSocket, client_id: int): + await websocket.accept() + try: + while True: + data = await websocket.receive_text() + await websocket.send_text(f"User: {data}") + request = Message(text=data) + context = await messenger_interface.on_request_async( + request, client_id + ) + response = context.last_response.text + if response is not None: + await websocket.send_text(f"Bot: {response}") + else: + await websocket.send_text("Bot did not return text.") + except WebSocketDisconnect: # ignore disconnections + pass + + +# %% +if __name__ == "__main__": + if is_interactive_mode(): # do not run this during doc building + pipeline.run() + uvicorn.run( + app, + host="127.0.0.1", + port=8000, + ) diff --git a/_sources/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.py.txt b/_sources/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.py.txt new file mode 100644 index 0000000000..a2ae9a6479 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.py.txt @@ -0,0 +1,150 @@ +# %% [markdown] +""" +# Web API: 3. Load testing with Locust + +This tutorial shows how to use an API endpoint created in the FastAPI tutorial in load testing. +""" + +# %pip install dff locust + +# %% [markdown] +""" +## Running Locust + +1. Run this file directly: + ```bash + python {file_name} + ``` +2. Run locust targeting this file: + ```bash + locust -f {file_name} + ``` +3. Run from python: + ```python + import sys + from locust import main + + sys.argv = ["locust", "-f", {file_name}] + main.main() + ``` + +You should see the result at http://127.0.0.1:8089. + +Make sure that your POST endpoint is also running (run the FastAPI tutorial). +""" + + +# %% +################################################################################ +# this patch is only needed to run this file in IPython kernel +# and can be safely removed +import gevent.monkey + +gevent.monkey.patch_all() +################################################################################ + + +# %% +import uuid +import time +import sys + +from locust import FastHttpUser, task, constant, main + +from dff.script import Message +from dff.utils.testing import HAPPY_PATH, is_interactive_mode + + +# %% +class DFFUser(FastHttpUser): + wait_time = constant(1) + + def check_happy_path(self, happy_path): + """ + Check a happy path. + For each `(request, response)` pair in `happy_path`: + 1. Send request to the API endpoint and catch its response. + 2. Compare API response with the `response`. + If they do not match, fail the request. + + :param happy_path: + An iterable of tuples of + `(Message, Message | Callable(Message->str|None) | None)`. + + If the second element is `Message`, + check that API response matches it. + + If the second element is `None`, + do not check the API response. + + If the second element is a `Callable`, + call it with the API response as its argument. + If the function returns a string, + that string is considered an error message. + If the function returns `None`, + the API response is considered correct. + """ + user_id = str(uuid.uuid4()) + + for request, response in happy_path: + with self.client.post( + f"/chat?user_id={user_id}", + headers={ + "accept": "application/json", + "Content-Type": "application/json", + }, + # Name is the displayed name of the request. + name=f"/chat?user_message={request.json()}", + data=request.json(), + catch_response=True, + ) as candidate_response: + text_response = Message.model_validate( + candidate_response.json().get("response") + ) + + if response is not None: + if callable(response): + error_message = response(text_response) + if error_message is not None: + candidate_response.failure(error_message) + elif text_response != response: + candidate_response.failure( + f"Expected: {response.model_dump_json()}\n" + f"Got: {text_response.model_dump_json()}" + ) + + time.sleep(self.wait_time()) + + @task(3) # <- this task is 3 times more likely than the other + def dialog_1(self): + self.check_happy_path(HAPPY_PATH) + + @task + def dialog_2(self): + def check_first_message(msg: Message) -> str | None: + if msg.text is None: + return f"Message does not contain text: {msg.model_dump_json()}" + if "Hi" not in msg.text: + return ( + f'"Hi" is not in the response message: ' + f"{msg.model_dump_json()}" + ) + return None + + self.check_happy_path( + [ + # a function can be used to check the return message + (Message(text="Hi"), check_first_message), + # a None is used if return message should not be checked + (Message(text="i'm fine, how are you?"), None), + # this should fail + (Message(text="Hi"), check_first_message), + ] + ) + + +# %% +if __name__ == "__main__": + if is_interactive_mode(): + sys.argv = ["locust", "-f", __file__] + main.main() diff --git a/_sources/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.py.txt b/_sources/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.py.txt new file mode 100644 index 0000000000..90dd195dd5 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.py.txt @@ -0,0 +1,188 @@ +# %% [markdown] +# # Web API: 4. Streamlit chat interface +# +# This tutorial shows how to use an API endpoint created in the FastAPI tutorial +# in a Streamlit chat. +# +# A demonstration of the chat: +# ![demo](https://user-images.githubusercontent.com/61429541/238721597-ef88261d-e9e6-497d-ba68-0bcc9a765808.png) + +# %pip install dff streamlit streamlit-chat + +# %% [markdown] +# ## Running Streamlit: +# +# ```bash +# streamlit run {file_name} +# ``` + + +# %% [markdown] +# ## Module and package import + + +# %% +########################################################### +# This patch is only needed to import Message from dff. +# Streamlit Chat interface can be written without using it. +import asyncio + +loop = asyncio.new_event_loop() +asyncio.set_event_loop(loop) +########################################################### + + +# %% +import uuid +import itertools + +import requests +import streamlit as st +from streamlit_chat import message +import streamlit.components.v1 as components +from dff.script import Message + + +# %% [markdown] +# ## API configuration +# +# Here we define methods to contact the API endpoint. + + +# %% +API_URL = "http://localhost:8000/chat" + + +def query(payload, user_id) -> requests.Response: + response = requests.post( + API_URL + f"?user_id={user_id}", + headers={ + "accept": "application/json", + "Content-Type": "application/json", + }, + json=payload, + ) + return response + + +# %% [markdown] +# ## Streamlit configuration +# +# Here we configure Streamlit page and initialize some session variables: +# +# 1. `user_id` -- stores user_id to be used in pipeline. +# 2. `bot_responses` -- a list of bot responses. +# 3. `user_requests` -- a list of user requests. + + +# %% +st.set_page_config(page_title="Streamlit DFF Chat", page_icon=":robot:") + +st.header("Streamlit DFF Chat") + +if "user_id" not in st.session_state: + st.session_state["user_id"] = str(uuid.uuid4()) + +if "bot_responses" not in st.session_state: + st.session_state["bot_responses"] = [] + +if "user_requests" not in st.session_state: + st.session_state["user_requests"] = [] + + +# %% [markdown] +# ## UI setup +# +# Here we configure elements that will be used in Streamlit to interact with the API. +# +# First we define a text input field which a user is supposed to type his requests into. +# Then we define a button that sends a query to the API, logs requests and responses, +# and clears the text field. + + +# %% +def send_and_receive(): + """ + Send text inside the input field. Receive response from API endpoint. + + Add both the request and response to `user_requests` and `bot_responses`. + + We do not call this function inside the `text_input.on_change` because then + we'd call it whenever the text field loses focus + (e.g. when a browser tab is switched). + """ + user_request = st.session_state["input"] + + if user_request == "": + return + + st.session_state["user_requests"].append(user_request) + + bot_response = query( + Message(text=user_request).model_dump(), + user_id=st.session_state["user_id"], + ) + bot_response.raise_for_status() + + bot_message = Message.model_validate(bot_response.json()["response"]).text + + # # Implementation without using Message: + # bot_response = query( + # {"text": user_request}, + # user_id=st.session_state["user_id"] + # ) + # bot_response.raise_for_status() + # + # bot_message = bot_response.json()["response"]["text"] + + st.session_state["bot_responses"].append(bot_message) + + st.session_state["input"] = "" + + +# %% +st.text_input("You: ", key="input") +st.button("Send", on_click=send_and_receive) + + +# %% [markdown] +# ### Component patch +# +# Here we add a component that presses the `Send` button whenever user presses the `Enter` key. + + +# %% +components.html( + """ + +""", + height=0, + width=0, +) + + +# %% [markdown] +# ### Message display +# +# Here we use the `streamlit-chat` package to display user requests and bot responses. + + +# %% +for i, bot_response, user_request in zip( + itertools.count(0), + st.session_state.get("bot_responses", []), + st.session_state.get("user_requests", []), +): + message(user_request, key=f"{i}_user", is_user=True) + message(bot_response, key=f"{i}_bot") diff --git a/_sources/tutorials/tutorials.pipeline.1_basics.py.txt b/_sources/tutorials/tutorials.pipeline.1_basics.py.txt new file mode 100644 index 0000000000..91d0dbbcd8 --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.1_basics.py.txt @@ -0,0 +1,84 @@ +# %% [markdown] +""" +# 1. Basics + +The following tutorial shows basic usage of `pipeline` +module as an extension to `dff.script.core`. + +Here, `__call__` (same as %mddoclink(api,pipeline.pipeline.pipeline,Pipeline.run)) +method is used to execute pipeline once. +""" + +# %pip install dff + +# %% +from dff.script import Context, Message + +from dff.pipeline import Pipeline + +from dff.utils.testing import ( + check_happy_path, + is_interactive_mode, + HAPPY_PATH, + TOY_SCRIPT, + TOY_SCRIPT_ARGS, +) + + +# %% [markdown] +""" +`Pipeline` is an object, that automates script execution and context management. +`from_script` method can be used to create +a pipeline of the most basic structure: +"preprocessors -> actor -> postprocessors" +as well as to define `context_storage` and `messenger_interface`. +Actor is a component of :py:class:`.Pipeline`, that contains the :py:class:`.Script` +and handles it. It is responsible for processing user input and determining +the appropriate response based on the current state of the conversation and the script. +These parameters usage will be shown in tutorials 2, 3 and 6. + +Here only required parameters are provided to pipeline. +`context_storage` will default to simple Python dict and +`messenger_interface` will never be used. +pre- and postprocessors lists are empty. +`Pipeline` object can be called with user input +as first argument and dialog id (any immutable object). +This call will return `Context`, +its `last_response` property will be actors response. +""" + +# %% +pipeline = Pipeline.from_script( + TOY_SCRIPT, + # Pipeline script object, defined in `dff.utils.testing.toy_script` + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + + +# %% [markdown] +""" +For the sake of brevity, other tutorials might use `TOY_SCRIPT_ARGS` to initialize pipeline: +""" + +# %% +assert TOY_SCRIPT_ARGS == ( + TOY_SCRIPT, + ("greeting_flow", "start_node"), + ("greeting_flow", "fallback_node"), +) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + # a function for automatic tutorial running (testing) with HAPPY_PATH + + # This runs tutorial in interactive mode if not in IPython env + # and if `DISABLE_INTERACTIVE_MODE` is not set + if is_interactive_mode(): + ctx_id = 0 # 0 will be current dialog (context) identification. + while True: + message = Message(text=input("Send request: ")) + ctx: Context = pipeline(message, ctx_id) + print(ctx.last_response) diff --git a/_sources/tutorials/tutorials.pipeline.2_pre_and_post_processors.py.txt b/_sources/tutorials/tutorials.pipeline.2_pre_and_post_processors.py.txt new file mode 100644 index 0000000000..f26fafa54a --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.2_pre_and_post_processors.py.txt @@ -0,0 +1,95 @@ +# %% [markdown] +""" +# 2. Pre- and postprocessors + +The following tutorial shows more advanced usage of `pipeline` +module as an extension to `dff.script.core`. + +Here, %mddoclink(api,script.core.context,Context.misc) +dictionary of context is used for storing additional data. +""" + +# %pip install dff + +# %% +import logging + +from dff.messengers.common import CLIMessengerInterface +from dff.script import Context, Message + +from dff.pipeline import Pipeline + +from dff.utils.testing import ( + check_happy_path, + is_interactive_mode, + HAPPY_PATH, + TOY_SCRIPT_ARGS, +) + +logger = logging.getLogger(__name__) + + +# %% [markdown] +""" +When Pipeline is created with `from_script` method, additional pre- +and postprocessors can be defined. +These can be any `ServiceBuilder` objects (defined in `types` module) +- callables, objects or dicts. +They are being turned into special `Service` objects (see tutorial 3), +that will be run before or after `Actor` respectively. +These services can be used to access external APIs, annotate user input, etc. + +Service callable signature can be one of the following: +`[ctx]`, `[ctx, pipeline]` or `[ctx, actor, info]` (see tutorial 3), +where: + +* `ctx` - Context of the current dialog. +* `pipeline` - The current pipeline. +* `info` - dictionary, containing information about + current service and pipeline execution state (see tutorial 4). + +Here a preprocessor ("ping") and a postprocessor ("pong") are added to pipeline. +They share data in `context.misc` - +a common place for sharing data between services and actor. +""" + + +# %% +def ping_processor(ctx: Context): + ctx.misc["ping"] = True + + +def pong_processor(ctx: Context): + ping = ctx.misc.get("ping", False) + ctx.misc["pong"] = ping + + +# %% +pipeline = Pipeline.from_script( + *TOY_SCRIPT_ARGS, + context_storage={}, # `context_storage` - a dictionary or + # a `DBContextStorage` instance, + # a place to store dialog contexts + messenger_interface=CLIMessengerInterface(), + # `messenger_interface` - a message channel adapter, + # it's not used in this tutorial + pre_services=[ping_processor], + post_services=[pong_processor], +) + + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + ctx_id = 0 # 0 will be current dialog (context) identification. + while True: + message = Message(text=input("Send request: ")) + ctx: Context = pipeline(message, ctx_id) + print(f"Response: {ctx.last_response}") + ping_pong = ctx.misc.get("ping", False) and ctx.misc.get( + "pong", False + ) + print( + f"Ping-pong exchange: {'completed' if ping_pong else 'failed'}." + ) + logger.info(f"Context misc: {ctx.misc}") diff --git a/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py.txt b/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py.txt new file mode 100644 index 0000000000..dbe7fb1e5b --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py.txt @@ -0,0 +1,97 @@ +# %% [markdown] +""" +# 3. Pipeline dict with services (basic) + +The following tutorial shows `pipeline` creation from +dict and most important pipeline components. + +Here, %mddoclink(api,pipeline.service.service,Service) +class, that can be used for pre- and postprocessing of messages is shown. + +Pipeline's %mddoclink(api,pipeline.pipeline.pipeline,Pipeline.from_dict) +static method is used for pipeline creation (from dictionary). +""" + +# %pip install dff + +# %% +import logging + +from dff.pipeline import Service, Pipeline, ACTOR + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + + +# %% [markdown] +""" +When Pipeline is created using `from_dict` method, +pipeline should be defined as a dictionary. +It should contain `services` - a `ServiceGroupBuilder` object, +basically a list of `ServiceBuilder` or `ServiceGroupBuilder` objects, +see tutorial 4. + +On pipeline execution services from `services` +list are run without difference between pre- and postprocessors. +Actor constant "ACTOR" should also be present among services. +ServiceBuilder object can be defined either with callable +(see tutorial 2) or with dict / object. +It should contain `handler` - a ServiceBuilder object. + +Not only Pipeline can be run using `__call__` method, +for most cases `run` method should be used. +It starts pipeline asynchronously and connects to provided messenger interface. + +Here pipeline contains 4 services, +defined in 4 different ways with different signatures. +""" + + +# %% +def prepreprocess(_): + logger.info( + "preprocession intent-detection Service running (defined as a dict)" + ) + + +def preprocess(_): + logger.info( + "another preprocession web-based annotator Service " + "(defined as a callable)" + ) + + +def postprocess(_): + logger.info("postprocession Service (defined as an object)") + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + { + "handler": prepreprocess, + }, + preprocess, + ACTOR, + Service( + handler=postprocess, + ), + ], +} + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) # This runs tutorial in interactive mode diff --git a/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.py.txt b/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.py.txt new file mode 100644 index 0000000000..91c29dbded --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.py.txt @@ -0,0 +1,167 @@ +# %% [markdown] +""" +# 3. Pipeline dict with services (full) + +The following tutorial shows `pipeline` creation from dict +and most important pipeline components. + +This tutorial is a more advanced version of the +[previous tutorial](%doclink(tutorial,pipeline.3_pipeline_dict_with_services_basic)). +""" + +# %pip install dff + +# %% +import json +import logging +import urllib.request + +from dff.script import Context +from dff.messengers.common import CLIMessengerInterface +from dff.pipeline import Service, Pipeline, ServiceRuntimeInfo, ACTOR +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH + +logger = logging.getLogger(__name__) + + +# %% [markdown] +""" +When Pipeline is created using `from_dict` method, +pipeline should be defined as `PipelineBuilder` objects +(defined in `types` module). +These objects are dictionaries of particular structure: + +* `messenger_interface` - `MessengerInterface` instance, + is used to connect to channel and transfer IO to user. +* `context_storage` - Place to store dialog contexts + (dictionary or a `DBContextStorage` instance). +* `services` (required) - A `ServiceGroupBuilder` object, + basically a list of `ServiceBuilder` or `ServiceGroupBuilder` objects, + see tutorial 4. +* `wrappers` - A list of pipeline wrappers, see tutorial 7. +* `timeout` - Pipeline timeout, see tutorial 5. +* `optimization_warnings` - Whether pipeline asynchronous structure + should be checked during initialization, + see tutorial 5. + +On pipeline execution services from `services` list are run +without difference between pre- and postprocessors. +If "ACTOR" constant is not found among `services` pipeline creation fails. +There can be only one "ACTOR" constant in the pipeline. +ServiceBuilder object can be defined either with callable (see tutorial 2) or +with dict of structure / object with following constructor arguments: + +* `handler` (required) - ServiceBuilder, + if handler is an object or a dict itself, + it will be used instead of base ServiceBuilder. + NB! Fields of nested ServiceBuilder will be overridden + by defined fields of the base ServiceBuilder. +* `wrappers` - a list of service wrappers, see tutorial 7. +* `timeout` - service timeout, see tutorial 5. +* `asynchronous` - whether or not this service _should_ be asynchronous + (keep in mind that not all services _can_ be asynchronous), + see tutorial 5. +* `start_condition` - service start condition, see tutorial 4. +* `name` - custom defined name for the service + (keep in mind that names in one ServiceGroup should be unique), + see tutorial 4. + +Not only Pipeline can be run using `__call__` method, +for most cases `run` method should be used. +It starts pipeline asynchronously and connects to provided messenger interface. + +Here pipeline contains 4 services, +defined in 4 different ways with different signatures. +First two of them write sample feature detection data to `ctx.misc`. +The first uses a constant expression and the second fetches from `example.com`. +Third one is "ACTOR" constant (it acts like a _special_ service here). +Final service logs `ctx.misc` dict. +""" + + +# %% +def prepreprocess(ctx: Context): + logger.info( + "preprocession intent-detection Service running (defined as a dict)" + ) + ctx.misc["preprocess_detection"] = { + ctx.last_request.text: "some_intent" + } # Similar syntax can be used to access + # service output dedicated to current pipeline run + + +def preprocess(ctx: Context, _, info: ServiceRuntimeInfo): + logger.info( + f"another preprocession web-based annotator Service" + f"(defined as a callable), named '{info.name}'" + ) + with urllib.request.urlopen("https://example.com/") as webpage: + web_content = webpage.read().decode( + webpage.headers.get_content_charset() + ) + ctx.misc["another_detection"] = { + ctx.last_request.text: "online" + if "Example Domain" in web_content + else "offline" + } + + +def postprocess(ctx: Context, pl: Pipeline): + logger.info("postprocession Service (defined as an object)") + logger.info( + f"resulting misc looks like:" + f"{json.dumps(ctx.misc, indent=4, default=str)}" + ) + fallback_flow, fallback_node, _ = pl.actor.fallback_label + received_response = pl.script[fallback_flow][fallback_node].response + responses_match = received_response == ctx.last_response + logger.info(f"actor is{'' if responses_match else ' not'} in fallback node") + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "messenger_interface": CLIMessengerInterface( + intro="Hi, this is a brand new Pipeline running!", + prompt_request="Request: ", + prompt_response="Response: ", + ), # `CLIMessengerInterface` has the following constructor parameters: + # `intro` - a string that will be displayed + # on connection to interface (on `pipeline.run`) + # `prompt_request` - a string that will be displayed before user input + # `prompt_response` - an output prefix string + "context_storage": {}, + "components": [ + { + "handler": { + "handler": prepreprocess, + "name": "silly_service_name", + }, + "name": "preprocessor", + }, # This service will be named `preprocessor` + # handler name will be overridden + preprocess, + ACTOR, + Service( + handler=postprocess, + name="postprocessor", + ), + ], +} + + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.py.txt b/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.py.txt new file mode 100644 index 0000000000..18b4527b5c --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.py.txt @@ -0,0 +1,125 @@ +# %% [markdown] +""" +# 4. Groups and conditions (basic) + +The following example shows `pipeline` service group usage and start conditions. + +Here, %mddoclink(api,pipeline.service.service,Service)s +and %mddoclink(api,pipeline.service.group,ServiceGroup)s +are shown for advanced data pre- and postprocessing based on conditions. +""" + +# %pip install dff + +# %% +import json +import logging + +from dff.pipeline import ( + Service, + Pipeline, + not_condition, + service_successful_condition, + ServiceRuntimeInfo, + ACTOR, +) + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + + +# %% [markdown] +""" +Pipeline can contain not only single services, but also service groups. +Service groups can be defined as `ServiceGroupBuilder` objects: + lists of `ServiceBuilders` and `ServiceGroupBuilders` or objects. +The objects should contain `services` - +a ServiceBuilder and ServiceGroupBuilder object list. + +To receive serialized information about service, + service group or pipeline a property `info_dict` can be used, + it returns important object properties as a dict. + +Services and service groups can be executed conditionally. +Conditions are functions passed to `start_condition` argument. +These functions should have following signature: + + (ctx: Context, pipeline: Pipeline) -> bool. + +Service is only executed if its start_condition returned `True`. +By default all the services start unconditionally. +There are number of built-in condition functions. +Built-in condition functions check other service states. +These are most important built-in condition functions: + +* `always_start_condition` - Default condition function, always starts service. +* `service_successful_condition(path)` - Function that checks, + whether service with given `path` executed successfully. +* `not_condition(function)` - Function that returns result + opposite from the one returned + by the `function` (condition function) argument. + +Here there is a conditionally executed service named +`never_running_service` is always executed. +It is executed only if `always_running_service` +is not finished, that should never happen. +The service named `context_printing_service` +prints pipeline runtime information, +that contains execution state of all previously run services. +""" + + +# %% +def always_running_service(_, __, info: ServiceRuntimeInfo): + logger.info(f"Service '{info.name}' is running...") + + +def never_running_service(_, __, info: ServiceRuntimeInfo): + raise Exception(f"Oh no! The '{info.name}' service is running!") + + +def runtime_info_printing_service(_, __, info: ServiceRuntimeInfo): + logger.info( + f"Service '{info.name}' runtime execution info:" + f"{json.dumps(info, indent=4, default=str)}" + ) + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + Service( + handler=always_running_service, + name="always_running_service", + ), + ACTOR, + Service( + handler=never_running_service, + start_condition=not_condition( + service_successful_condition(".pipeline.always_running_service") + ), + ), + Service( + handler=runtime_info_printing_service, + name="runtime_info_printing_service", + ), + ], +} + + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_full.py.txt b/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_full.py.txt new file mode 100644 index 0000000000..fcd6ef5ae0 --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_full.py.txt @@ -0,0 +1,214 @@ +# %% [markdown] +""" +# 4. Groups and conditions (full) + +The following tutorial shows `pipeline` service group usage and start conditions. + +This tutorial is a more advanced version of the +[previous tutorial](%doclink(tutorial,pipeline.4_groups_and_conditions_basic)). +""" + +# %pip install dff + +# %% +import logging + +from dff.pipeline import ( + Service, + Pipeline, + ServiceGroup, + not_condition, + service_successful_condition, + all_condition, + ServiceRuntimeInfo, + ACTOR, +) + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + + +# %% [markdown] +""" +Pipeline can contain not only single services, but also service groups. +Service groups can be defined as lists of `ServiceBuilders` + (in fact, all of the pipeline services are combined + into root service group named "pipeline"). +Alternatively, the groups can be defined as objects + with following constructor arguments: + +* `components` (required) - A list of ServiceBuilder objects, + ServiceGroup objects and lists of them. +* `wrappers` - A list of pipeline wrappers, see tutorial 7. +* `timeout` - Pipeline timeout, see tutorial 5. +* `asynchronous` - Whether or not this service group _should_ be asynchronous + (keep in mind that not all service groups _can_ be asynchronous), + see tutorial 5. +* `start_condition` - Service group start condition. +* `name` - Custom defined name for the service group + (keep in mind that names in one ServiceGroup should be unique). + +Service (and service group) object fields +are mostly the same as constructor parameters, +however there are some differences: + +* `requested_async_flag` - Contains the value received + from `asynchronous` constructor parameter. +* `calculated_async_flag` - Contains automatically calculated + possibility of the service to be asynchronous. +* `asynchronous` - Combination af `..._async_flag` fields, + requested value overrides calculated (if not `None`), + see tutorial 5. +* `path` - Contains globally unique (for pipeline) + path to the service or service group. + +If no name is specified for a service or service group, + the name will be generated according to the following rules: + +1. If service's handler is an Actor, service will be named 'actor'. +2. If service's handler is callable, + service will be named callable. +3. Service group will be named 'service_group'. +4. Otherwise, it will be named 'noname_service'. +5. After that an index will be added to service name. + +To receive serialized information about service, service group +or pipeline a property `info_dict` can be used, +it returns important object properties as a dict. +In addition to that `pretty_format` method of Pipeline +can be used to get all pipeline properties as a formatted string +(e.g. for logging or debugging purposes). + +Services and service groups can be executed conditionally. +Conditions are functions passed to `start_condition` argument. +These functions should have following signature: + + (ctx: Context, pipeline: Pipeline) -> bool. + +Service is only executed if its start_condition returned `True`. +By default all the services start unconditionally. +There are number of built-in condition functions as well +as possibility to create custom ones. +Custom condition functions can rely on data in `ctx.misc` +as well as on any external data source. +Built-in condition functions check other service states. +All of the services store their execution status in context, + this status can be one of the following: + +* `NOT_RUN` - Service hasn't bee executed yet. +* `RUNNING` - Service is currently being executed + (important for asynchronous services). +* `FINISHED` - Service finished successfully. +* `FAILED` - Service execution failed (that also throws an exception). + +There are following built-in condition functions: + +* `always_start_condition` - Default condition function, + always starts service. +* `service_successful_condition(path)` - + Function that checks, whether service + with given `path` executed successfully (is `FINISHED`). +* `not_condition(function)` - + Function that returns result opposite + from the one returned by + the `function` (condition function) argument. +* `aggregate_condition(aggregator, *functions)` - + Function that aggregated results of + numerous `functions` (condition functions) + using special `aggregator` function. +* `all_condition(*functions)` - + Function that returns True only if all + of the given `functions` + (condition functions) return `True`. +* `any_condition(*functions)` - + Function that returns `True` + if any of the given `functions` + (condition functions) return `True`. +NB! Actor service ALWAYS runs unconditionally. + +Here there are two conditionally executed services: +a service named `running_service` is executed + only if both `simple_services` in `service_group_0` + are finished successfully. +`never_running_service` is executed only if `running_service` is not finished, +this should never happen. +`context_printing_service` prints pipeline runtime information, + that contains execution state of all previously run services. +""" + + +# %% +def simple_service(_, __, info: ServiceRuntimeInfo): + logger.info(f"Service '{info.name}' is running...") + + +def never_running_service(_, __, info: ServiceRuntimeInfo): + raise Exception(f"Oh no! The '{info.name}' service is running!") + + +def runtime_info_printing_service(_, __, info: ServiceRuntimeInfo): + logger.info( + f"Service '{info.name}' runtime execution info:" + f"{info.model_dump_json(indent=4, default=str)}" + ) + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + [ + simple_service, # This simple service + # will be named `simple_service_0` + simple_service, # This simple service + # will be named `simple_service_1` + ], # Despite this is the unnamed service group in the root + # service group, it will be named `service_group_0` + ACTOR, + ServiceGroup( + name="named_group", + components=[ + Service( + handler=simple_service, + start_condition=all_condition( + service_successful_condition( + ".pipeline.service_group_0.simple_service_0" + ), + service_successful_condition( + ".pipeline.service_group_0.simple_service_1" + ), + ), # Alternative: + # service_successful_condition(".pipeline.service_group_0") + name="running_service", + ), # This simple service will be named `running_service`, + # because its name is manually overridden + Service( + handler=never_running_service, + start_condition=not_condition( + service_successful_condition( + ".pipeline.named_group.running_service" + ) + ), + ), + ], + ), + runtime_info_printing_service, + ], +} + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + logger.info(f"Pipeline structure:\n{pipeline.pretty_format()}") + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.py.txt b/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.py.txt new file mode 100644 index 0000000000..4d25fa7b96 --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.py.txt @@ -0,0 +1,65 @@ +# %% [markdown] +""" +# 5. Asynchronous groups and services (basic) + +The following tutorial shows `pipeline` asynchronous +service and service group usage. + +Here, %mddoclink(api,pipeline.service.group,ServiceGroup)s +are shown for advanced and asynchronous data pre- and postprocessing. +""" + +# %pip install dff + +# %% +import asyncio + +from dff.pipeline import Pipeline, ACTOR + +from dff.utils.testing.common import ( + is_interactive_mode, + check_happy_path, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +# %% [markdown] +""" +Services and service groups can be synchronous and asynchronous. +In synchronous service groups services are executed consequently. +In asynchronous service groups all services are executed simultaneously. + +Service can be asynchronous if its handler is an async function. +Service group can be asynchronous if all services +and service groups inside it are asynchronous. + +Here there is an asynchronous service group, that contains 10 services, +each of them should sleep for 0.01 of a second. +However, as the group is asynchronous, +it is being executed for 0.01 of a second in total. +Service group `pipeline` can't be asynchronous because `actor` is synchronous. +""" + + +# %% +async def time_consuming_service(_): + await asyncio.sleep(0.01) + + +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + [time_consuming_service for _ in range(0, 10)], + ACTOR, + ], +} + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.py.txt b/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.py.txt new file mode 100644 index 0000000000..137c029890 --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.py.txt @@ -0,0 +1,153 @@ +# %% [markdown] +""" +# 5. Asynchronous groups and services (full) + +The following tutorial shows `pipeline` +asynchronous service and service group usage. + +This tutorial is a more advanced version of the +[previous tutorial](%doclink(tutorial,pipeline.5_asynchronous_groups_and_services_basic)). +""" + +# %pip install dff + +# %% +import asyncio +import json +import logging +import urllib.request + +from dff.script import Context + +from dff.pipeline import ServiceGroup, Pipeline, ServiceRuntimeInfo, ACTOR + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + +# %% [markdown] +""" +Services and service groups can be synchronous and asynchronous. +In synchronous service groups services are executed consequently, + some of them (`ACTOR`) can even return `Context` object, + modifying it. +In asynchronous service groups all services + are executed simultaneously and should not return anything, + neither modify Context. + +To become asynchronous service or service group + should _be able_ to be asynchronous + and should not be marked synchronous. +Service can be asynchronous if its handler is an async function. +Service group can be asynchronous if all services +and service groups inside it are asynchronous. +If service or service group can be asynchronous +the `asynchronous` constructor parameter is checked. +If the parameter is not set, +the service becomes asynchronous, and if set, it is used instead. +If service can not be asynchronous, +but is marked asynchronous, an exception is thrown. +NB! ACTOR service is always synchronous. + +The timeout field only works for asynchronous services and service groups. +If service execution takes more time than timeout, +it is aborted and marked as failed. + +Pipeline `optimization_warnings` argument can be used to + display optimization warnings during pipeline construction. +Generally for optimization purposes asynchronous + services should be combined into asynchronous + groups to run simultaneously. +Synchronous services should be expelled from (mostly) asynchronous groups. + +Here service group `balanced_group` can be asynchronous, + however it is requested to be synchronous, + so its services are executed consequently. +Service group `service_group_0` is asynchronous, + it doesn't run out of timeout of 0.02 seconds, + however contains 6 time consuming services, + each of them sleeps for 0.01 of a second. +Service group `service_group_1` is also asynchronous, +it logs HTTPS requests (from 1 to 15), + running simultaneously, in random order. +Service group `pipeline` can't be asynchronous because +`balanced_group` and ACTOR are synchronous. +""" + + +# %% +async def simple_asynchronous_service(_, __, info: ServiceRuntimeInfo): + logger.info(f"Service '{info.name}' is running") + + +async def time_consuming_service(_): + await asyncio.sleep(0.01) + + +def meta_web_querying_service( + photo_number: int, +): # This function returns services, a service factory + async def web_querying_service(ctx: Context, _, info: ServiceRuntimeInfo): + if ctx.misc.get("web_query", None) is None: + ctx.misc["web_query"] = {} + with urllib.request.urlopen( + f"https://jsonplaceholder.typicode.com/photos/{photo_number}" + ) as webpage: + web_content = webpage.read().decode( + webpage.headers.get_content_charset() + ) + ctx.misc["web_query"].update( + { + f"{ctx.last_request}" + f":photo_number_{photo_number}": json.loads(web_content)[ + "title" + ] + } + ) + logger.info(f"Service '{info.name}' has completed HTTPS request") + + return web_querying_service + + +def context_printing_service(ctx: Context): + logger.info(f"Context misc: {json.dumps(ctx.misc, indent=4, default=str)}") + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "optimization_warnings": True, + # There are no warnings - pipeline is well-optimized + "components": [ + ServiceGroup( + name="balanced_group", + asynchronous=False, + components=[ + simple_asynchronous_service, + ServiceGroup( + timeout=0.02, + components=[time_consuming_service for _ in range(0, 6)], + ), + simple_asynchronous_service, + ], + ), + ACTOR, + [meta_web_querying_service(photo) for photo in range(1, 16)], + context_printing_service, + ], +} + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.6_extra_handlers_basic.py.txt b/_sources/tutorials/tutorials.pipeline.6_extra_handlers_basic.py.txt new file mode 100644 index 0000000000..386dd2885c --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.6_extra_handlers_basic.py.txt @@ -0,0 +1,123 @@ +# %% [markdown] +""" +# 6. Extra Handlers (basic) + +The following tutorial shows extra handlers possibilities and use cases. + +Here, extra handlers %mddoclink(api,pipeline.service.extra,BeforeHandler) +and %mddoclink(api,pipeline.service.extra,AfterHandler) +are shown as additional means of data processing, attached to services. +""" + +# %pip install dff + +# %% +import asyncio +import json +import logging +import random +from datetime import datetime + +from dff.script import Context + +from dff.pipeline import Pipeline, ServiceGroup, ExtraHandlerRuntimeInfo, ACTOR + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + +# %% [markdown] +""" +Extra handlers are additional function + lists (before-functions and/or after-functions) + that can be added to any `pipeline` components (service and service groups). +Extra handlers main purpose should be service +and service groups statistics collection. +Extra handlers can be attached to pipeline component using +`before_handler` and `after_handler` constructor parameter. + +Here 5 `heavy_service`s are run in single asynchronous service group. +Each of them sleeps for random amount of seconds (between 0 and 0.05). +To each of them (as well as to group) + time measurement extra handler is attached, + that writes execution time to `ctx.misc`. +In the end `ctx.misc` is logged to info channel. +""" + + +# %% +def collect_timestamp_before(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + ctx.misc.update({f"{info.component.name}": datetime.now()}) + + +def collect_timestamp_after(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + ctx.misc.update( + { + f"{info.component.name}": datetime.now() + - ctx.misc[f"{info.component.name}"] + } + ) + + +async def heavy_service(_): + await asyncio.sleep(random.randint(0, 5) / 100) + + +def logging_service(ctx: Context): + logger.info(f"Context misc: {json.dumps(ctx.misc, indent=4, default=str)}") + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + ServiceGroup( + before_handler=[collect_timestamp_before], + after_handler=[collect_timestamp_after], + components=[ + { + "handler": heavy_service, + "before_handler": [collect_timestamp_before], + "after_handler": [collect_timestamp_after], + }, + { + "handler": heavy_service, + "before_handler": [collect_timestamp_before], + "after_handler": [collect_timestamp_after], + }, + { + "handler": heavy_service, + "before_handler": [collect_timestamp_before], + "after_handler": [collect_timestamp_after], + }, + { + "handler": heavy_service, + "before_handler": [collect_timestamp_before], + "after_handler": [collect_timestamp_after], + }, + { + "handler": heavy_service, + "before_handler": [collect_timestamp_before], + "after_handler": [collect_timestamp_after], + }, + ], + ), + ACTOR, + logging_service, + ], +} + +# %% +pipeline = Pipeline(**pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.6_extra_handlers_full.py.txt b/_sources/tutorials/tutorials.pipeline.6_extra_handlers_full.py.txt new file mode 100644 index 0000000000..3672f0f82b --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.6_extra_handlers_full.py.txt @@ -0,0 +1,192 @@ +# %% [markdown] +""" +# 6. Extra Handlers (full) + +The following tutorial shows extra handlers possibilities and use cases. + +This tutorial is a more advanced version of the +[previous tutorial](%doclink(tutorial,pipeline.6_extra_handlers_basic)). +""" + +# %pip install dff psutil + +# %% +import json +import logging +import random +from datetime import datetime + +import psutil +from dff.script import Context + +from dff.pipeline import ( + Pipeline, + ServiceGroup, + to_service, + ExtraHandlerRuntimeInfo, + ServiceRuntimeInfo, + ACTOR, +) + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + +# %% [markdown] +""" +Extra handlers are additional function lists + (before-functions and/or after-functions) + that can be added to any pipeline components (service and service groups). +Despite extra handlers can be used to prepare data for certain services, +that require some very special input type, + in most cases services should be preferred for that purpose. +Extra handlers can be asynchronous, +however there's no statistics that can be collected about them. +So their main purpose should be _really_ lightweight data conversion (etc.) + operations or service and service groups statistics collection. + +Extra handlers have the following constructor arguments / parameters: + +* `functions` - Functions that will be run. +* `timeout` - Timeout for that extra handler + (for asynchronous extra handlers only). +* `asynchronous` - Whether this extra handler should be asynchronous or not. +NB! Extra handlers don't have execution state, +so their names shouldn't appear in built-in condition functions. + +Extra handlers callable signature can be one of the following: +`[ctx]`, `[ctx, pipeline]` or `[ctx, pipeline, info]`, where: + +* `ctx` - `Context` of the current dialog. +* `pipeline` - The current pipeline. +* `info` - Dictionary, containing information about current extra handler + and pipeline execution state (see tutorial 4). + +Extra handlers can be attached to pipeline component in a few different ways: + +1. Directly in constructor - by adding extra handlers to + `before_handler` or `after_handler` constructor parameter. +2. (Services only) `to_service` decorator - + transforms function to service with extra handlers + from `before_handler` and `after_handler` arguments. + +Here 5 `heavy_service`s fill big amounts of memory with random numbers. +Their runtime stats are captured and displayed by extra services, +`time_measure_handler` measures time and +`ram_measure_handler` - allocated memory. +Another `time_measure_handler` measures total +amount of time taken by all of them (combined in service group). +`logging_service` logs stats, however it can use string arguments only, + so `json_encoder_handler` is applied to encode stats to JSON. +""" + + +# %% +def get_extra_handler_misc_field( + info: ExtraHandlerRuntimeInfo, postfix: str +) -> str: # This method calculates `misc` field name dedicated to extra handler + # based on its and its service name + return f"{info.component.name}-{postfix}" + + +def time_measure_before_handler(ctx, _, info): + ctx.misc.update( + {get_extra_handler_misc_field(info, "time"): datetime.now()} + ) + + +def time_measure_after_handler(ctx, _, info): + ctx.misc.update( + { + get_extra_handler_misc_field(info, "time"): datetime.now() + - ctx.misc[get_extra_handler_misc_field(info, "time")] + } + ) + + +def ram_measure_before_handler(ctx, _, info): + ctx.misc.update( + { + get_extra_handler_misc_field( + info, "ram" + ): psutil.virtual_memory().available + } + ) + + +def ram_measure_after_handler(ctx, _, info): + ctx.misc.update( + { + get_extra_handler_misc_field(info, "ram"): ctx.misc[ + get_extra_handler_misc_field(info, "ram") + ] + - psutil.virtual_memory().available + } + ) + + +def json_converter_before_handler(ctx, _, info): + ctx.misc.update( + { + get_extra_handler_misc_field(info, "str"): json.dumps( + ctx.misc, indent=4, default=str + ) + } + ) + + +def json_converter_after_handler(ctx, _, info): + ctx.misc.pop(get_extra_handler_misc_field(info, "str")) + + +memory_heap = dict() # This object plays part of some memory heap + + +# %% +@to_service( + before_handler=[time_measure_before_handler, ram_measure_before_handler], + after_handler=[time_measure_after_handler, ram_measure_after_handler], +) +def heavy_service(ctx: Context): + memory_heap[ctx.last_request.text] = [ + random.randint(0, num) for num in range(0, 1000) + ] + + +@to_service( + before_handler=[json_converter_before_handler], + after_handler=[json_converter_after_handler], +) +def logging_service(ctx: Context, _, info: ServiceRuntimeInfo): + str_misc = ctx.misc[f"{info.name}-str"] + assert isinstance(str_misc, str) + print(f"Stringified misc: {str_misc}") + + +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + ServiceGroup( + before_handler=[time_measure_before_handler], + after_handler=[time_measure_after_handler], + components=[heavy_service for _ in range(0, 5)], + ), + ACTOR, + logging_service, + ], +} + +# %% +pipeline = Pipeline(**pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.py.txt b/_sources/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.py.txt new file mode 100644 index 0000000000..ca1d9a6526 --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.py.txt @@ -0,0 +1,144 @@ +# %% [markdown] +""" +# 7. Extra Handlers and Extensions + +The following tutorial shows how pipeline can be extended +by global extra handlers and custom functions. + +Here, %mddoclink(api,pipeline.pipeline.pipeline,Pipeline.add_global_handler) +function is shown, that can be used to add extra handlers before +and/or after all pipeline services. +""" + +# %pip install dff + +# %% +import asyncio +import json +import logging +import random +from datetime import datetime + +from dff.pipeline import ( + Pipeline, + ComponentExecutionState, + GlobalExtraHandlerType, + ExtraHandlerRuntimeInfo, + ServiceRuntimeInfo, + ACTOR, +) + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + +# %% [markdown] +""" +Pipeline functionality can be extended by global extra handlers. +Global extra handlers are special extra handlers + that are called on some stages of pipeline execution. +There are 4 types of global extra handlers: + + * `BEFORE_ALL` is called before pipeline execution. + * `BEFORE` is called before each service and service group execution. + * `AFTER` is called after each service and service group execution. + * `AFTER_ALL` is called after pipeline execution. + +Global extra handlers have the same signature as regular extra handlers. +Actually `BEFORE_ALL` and `AFTER_ALL` + are attached to root service group named 'pipeline', + so they return its runtime info + +All extra handlers warnings (see tutorial 7) +are applicable to global extra handlers. +Pipeline `add_global_extra_handler` function is used to register + global extra handlers. It accepts following arguments: + +* `global_extra_handler_type` (required) - A `GlobalExtraHandlerType` instance, + indicates extra handler type to add. +* `extra_handler` (required) - The extra handler function itself. +* `whitelist` - An optional list of paths, if it's not `None` + the extra handlers will be applied to + specified pipeline components only. +* `blacklist` - An optional list of paths, if it's not `None` + the extra handlers will be applied to + all pipeline components except specified. + +Here basic functionality of `df-node-stats` library is emulated. +Information about pipeline component execution time and + result is collected and printed to info log after pipeline execution. +Pipeline consists of actor and 25 `long_service`s +that run random amount of time between 0 and 0.05 seconds. +""" + +# %% +start_times = dict() # Place to temporarily store service start times +pipeline_info = dict() # Pipeline information storage + + +def before_all(_, __, info: ExtraHandlerRuntimeInfo): + global start_times, pipeline_info + now = datetime.now() + pipeline_info = {"start_time": now} + start_times = {info.component.path: now} + + +def before(_, __, info: ExtraHandlerRuntimeInfo): + start_times.update({info.component.path: datetime.now()}) + + +def after(_, __, info: ExtraHandlerRuntimeInfo): + start_time = start_times[info.component.path] + pipeline_info.update( + { + f"{info.component.path}_duration": datetime.now() - start_time, + f"{info.component.path}_success": info.component.execution_state.get( + info.component.path, ComponentExecutionState.NOT_RUN + ), + } + ) + + +def after_all(_, __, info: ExtraHandlerRuntimeInfo): + pipeline_info.update( + {"total_time": datetime.now() - start_times[info.component.path]} + ) + logger.info( + f"Pipeline stats: {json.dumps(pipeline_info, indent=4, default=str)}" + ) + + +async def long_service(_, __, info: ServiceRuntimeInfo): + timeout = random.randint(0, 5) / 100 + logger.info(f"Service {info.name} is going to sleep for {timeout} seconds.") + await asyncio.sleep(timeout) + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + [long_service for _ in range(0, 25)], + ACTOR, + ], +} + +# %% +pipeline = Pipeline(**pipeline_dict) + +pipeline.add_global_handler(GlobalExtraHandlerType.BEFORE_ALL, before_all) +pipeline.add_global_handler(GlobalExtraHandlerType.BEFORE, before) +pipeline.add_global_handler(GlobalExtraHandlerType.AFTER, after) +pipeline.add_global_handler(GlobalExtraHandlerType.AFTER_ALL, after_all) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.1_basics.py.txt b/_sources/tutorials/tutorials.script.core.1_basics.py.txt new file mode 100644 index 0000000000..a06ffb96de --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.1_basics.py.txt @@ -0,0 +1,167 @@ +# %% [markdown] +""" +# Core: 1. Basics + +This notebook shows basic tutorial of creating a simple dialog bot (agent). + +Here, basic usege of %mddoclink(api,pipeline.pipeline.pipeline,Pipeline) +primitive is shown: its' creation with +%mddoclink(api,pipeline.pipeline.pipeline,Pipeline.from_script) +and execution. + +Additionally, function %mddoclink(api,utils.testing.common,check_happy_path) +that can be used for Pipeline testing is presented. + +Let's do all the necessary imports from DFF: +""" + +# %pip install dff + +# %% +from dff.script import TRANSITIONS, RESPONSE, Message +from dff.pipeline import Pipeline +import dff.script.conditions as cnd + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% [markdown] +""" +First of all, to create a dialog agent, we need to create a dialog script. +Below script means a dialog script. +A script is a dictionary, where the keys are the names of the flows. +A script can contain multiple scripts, which is needed in order to divide +a dialog into sub-dialogs and process them separately. +For example, the separation can be tied to the topic of the dialog. +In this tutorial there is one flow called `greeting_flow`. + +Flow describes a sub-dialog using linked nodes. +Each node has the keywords `RESPONSE` and `TRANSITIONS`. + +* `RESPONSE` contains the response + that the agent will return from the current node. +* `TRANSITIONS` describes transitions from the + current node to another nodes. This is a dictionary, + where keys are names of the nodes and + values are conditions of transition to them. +""" + + +# %% +toy_script = { + "greeting_flow": { + "start_node": { # This is the initial node, + # it doesn't contain a `RESPONSE`. + RESPONSE: Message(), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + # If "Hi" == request of the user then we make the transition. + }, + "node1": { + RESPONSE: Message( + text="Hi, how are you?" + ), # When the agent enters node1, + # return "Hi, how are you?". + TRANSITIONS: { + "node2": cnd.exact_match(Message(text="I'm fine, how are you?")) + }, + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + "node3": cnd.exact_match( + Message(text="Let's talk about music.") + ) + }, + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about music now."), + TRANSITIONS: { + "node4": cnd.exact_match(Message(text="Ok, goodbye.")) + }, + }, + "node4": { + RESPONSE: Message(text="Bye"), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + "fallback_node": { + # We get to this node if the conditions + # for switching to other nodes are not performed. + RESPONSE: Message(text="Ooops"), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + } +} + + +happy_path = ( + ( + Message(text="Hi"), + Message(text="Hi, how are you?"), + ), # start_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="Bye")), # node3 -> node4 + (Message(text="Hi"), Message(text="Hi, how are you?")), # node4 -> node1 + (Message(text="stop"), Message(text="Ooops")), # node1 -> fallback_node + ( + Message(text="stop"), + Message(text="Ooops"), + ), # fallback_node -> fallback_node + ( + Message(text="Hi"), + Message(text="Hi, how are you?"), + ), # fallback_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="Bye")), # node3 -> node4 +) + + +# %% [markdown] +""" +A `Pipeline` is an object that processes user +inputs and returns responses. +To create the pipeline you need to pass the script (`toy_script`), +initial node (`start_label`) and +the node to which the default transition will take place +if none of the current conditions are met (`fallback_label`). +By default, if `fallback_label` is not set, +then its value becomes equal to `start_label`. +""" + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path( + pipeline, + happy_path, + ) # This is a function for automatic tutorial + # running (testing tutorial) with `happy_path`. + + # Run tutorial in interactive mode if not in IPython env + # and if `DISABLE_INTERACTIVE_MODE` is not set. + if is_interactive_mode(): + run_interactive_mode(pipeline) + # This runs tutorial in interactive mode. diff --git a/_sources/tutorials/tutorials.script.core.2_conditions.py.txt b/_sources/tutorials/tutorials.script.core.2_conditions.py.txt new file mode 100644 index 0000000000..d8838b9f49 --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.2_conditions.py.txt @@ -0,0 +1,228 @@ +# %% [markdown] +""" +# Core: 2. Conditions + +This tutorial shows different options for +setting transition conditions from one node to another. + +Here, [conditions](%doclink(api,script.conditions.std_conditions)) +for script transitions are shown. + +First of all, let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +import re + +from dff.script import Context, TRANSITIONS, RESPONSE, Message +import dff.script.conditions as cnd +from dff.pipeline import Pipeline + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +# %% [markdown] +""" +The transition condition is set by the function. +If this function returns the value `True`, +then the actor performs the corresponding transition. +Actor is responsible for processing user input and determining +the appropriate response based on the current state of the conversation and the script. +See tutorial 1 of pipeline (pipeline/1_basics) to learn more about Actor. +Condition functions have signature + + def func(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool + +Out of the box `dff.script.conditions` offers the + following options for setting conditions: + +* `exact_match` returns `True` if the user's request completely + matches the value passed to the function. +* `regexp` returns `True` if the pattern matches the user's request, + while the user's request must be a string. + `regexp` has same signature as `re.compile` function. +* `aggregate` returns `bool` value as + a result after aggregate by `aggregate_func` + for input sequence of conditions. + `aggregate_func == any` by default. `aggregate` has alias `agg`. +* `any` returns `True` if one element of input sequence of conditions is `True`. + `any(input_sequence)` is equivalent to + `aggregate(input sequence, aggregate_func=any)`. +* `all` returns `True` if all elements of input + sequence of conditions are `True`. + `all(input_sequence)` is equivalent to + `aggregate(input sequence, aggregate_func=all)`. +* `negation` returns negation of passed function. `negation` has alias `neg`. +* `has_last_labels` covered in the following examples. +* `true` returns `True`. +* `false` returns `False`. + +For example function +``` +def always_true_condition(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return True +``` +always returns `True` and `always_true_condition` function +is the same as `dff.script.conditions.std_conditions.true()`. + +The functions to be used in the `toy_script` are declared here. +""" + + +# %% +def hi_lower_case_condition(ctx: Context, _: Pipeline, *args, **kwargs) -> bool: + request = ctx.last_request + # Returns True if `hi` in both uppercase and lowercase + # letters is contained in the user request. + if request is None or request.text is None: + return False + return "hi" in request.text.lower() + + +def complex_user_answer_condition( + ctx: Context, _: Pipeline, *args, **kwargs +) -> bool: + request = ctx.last_request + # The user request can be anything. + if request is None or request.misc is None: + return False + return {"some_key": "some_value"} == request.misc + + +def predetermined_condition(condition: bool): + # Wrapper for internal condition function. + def internal_condition_function( + ctx: Context, _: Pipeline, *args, **kwargs + ) -> bool: + # It always returns `condition`. + return condition + + return internal_condition_function + + +# %% +toy_script = { + "greeting_flow": { + "start_node": { # This is the initial node, + # it doesn't contain a `RESPONSE`. + RESPONSE: Message(), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + # If "Hi" == request of user then we make the transition + }, + "node1": { + RESPONSE: Message(text="Hi, how are you?"), + TRANSITIONS: {"node2": cnd.regexp(r".*how are you", re.IGNORECASE)}, + # pattern matching (precompiled) + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + "node3": cnd.all( + [cnd.regexp(r"talk"), cnd.regexp(r"about.*music")] + ) + }, + # Mix sequence of conditions by `cnd.all`. + # `all` is alias `aggregate` with + # `aggregate_func` == `all`. + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about music now."), + TRANSITIONS: {"node4": cnd.regexp(re.compile(r"Ok, goodbye."))}, + # pattern matching by precompiled pattern + }, + "node4": { + RESPONSE: Message(text="bye"), + TRANSITIONS: { + "node1": cnd.any( + [ + hi_lower_case_condition, + cnd.exact_match(Message(text="hello")), + ] + ) + }, + # Mix sequence of conditions by `cnd.any`. + # `any` is alias `aggregate` with + # `aggregate_func` == `any`. + }, + "fallback_node": { # We get to this node + # if an error occurred while the agent was running. + RESPONSE: Message(text="Ooops"), + TRANSITIONS: { + "node1": complex_user_answer_condition, + # The user request can be more than just a string. + # First we will check returned value of + # `complex_user_answer_condition`. + # If the value is `True` then we will go to `node1`. + # If the value is `False` then we will check a result of + # `predetermined_condition(True)` for `fallback_node`. + "fallback_node": predetermined_condition( + True + ), # or you can use `cnd.true()` + # Last condition function will return + # `true` and will repeat `fallback_node` + # if `complex_user_answer_condition` return `false`. + }, + }, + } +} + +# testing +happy_path = ( + ( + Message(text="Hi"), + Message(text="Hi, how are you?"), + ), # start_node -> node1 + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="bye")), # node3 -> node4 + (Message(text="Hi"), Message(text="Hi, how are you?")), # node4 -> node1 + (Message(text="stop"), Message(text="Ooops")), # node1 -> fallback_node + ( + Message(text="one"), + Message(text="Ooops"), + ), # fallback_node -> fallback_node + ( + Message(text="help"), + Message(text="Ooops"), + ), # fallback_node -> fallback_node + ( + Message(text="nope"), + Message(text="Ooops"), + ), # fallback_node -> fallback_node + ( + Message(misc={"some_key": "some_value"}), + Message(text="Hi, how are you?"), + ), # fallback_node -> node1 + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="bye")), # node3 -> node4 +) + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.3_responses.py.txt b/_sources/tutorials/tutorials.script.core.3_responses.py.txt new file mode 100644 index 0000000000..6d42b3b2b6 --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.3_responses.py.txt @@ -0,0 +1,213 @@ +# %% [markdown] +""" +# Core: 3. Responses + +This tutorial shows different options for setting responses. + +Here, [responses](%doclink(api,script.responses.std_responses)) +that allow giving custom answers to users are shown. + +Let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +import re +import random + +from dff.script import TRANSITIONS, RESPONSE, Context, Message +import dff.script.responses as rsp +import dff.script.conditions as cnd + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% [markdown] +""" +The response can be set by Callable or *Message: + +* Callable objects. If the object is callable it must have a special signature: + + func(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Any + +* *Message objects. If the object is *Message + it will be returned by the agent as a response. + + +The functions to be used in the `toy_script` are declared here. +""" + + +# %% +def cannot_talk_about_topic_response( + ctx: Context, _: Pipeline, *args, **kwargs +) -> Message: + request = ctx.last_request + if request is None or request.text is None: + topic = None + else: + topic_pattern = re.compile(r"(.*talk about )(.*)\.") + topic = topic_pattern.findall(request.text) + topic = topic and topic[0] and topic[0][-1] + if topic: + return Message(text=f"Sorry, I can not talk about {topic} now.") + else: + return Message(text="Sorry, I can not talk about that now.") + + +def upper_case_response(response: Message): + # wrapper for internal response function + def func(_: Context, __: Pipeline, *args, **kwargs) -> Message: + if response.text is not None: + response.text = response.text.upper() + return response + + return func + + +def fallback_trace_response( + ctx: Context, _: Pipeline, *args, **kwargs +) -> Message: + return Message( + misc={ + "previous_node": list(ctx.labels.values())[-2], + "last_request": ctx.last_request, + } + ) + + +# %% +toy_script = { + "greeting_flow": { + "start_node": { # This is an initial node, + # it doesn't need a `RESPONSE`. + RESPONSE: Message(), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + # If "Hi" == request of user then we make the transition + }, + "node1": { + RESPONSE: rsp.choice( + [ + Message(text="Hi, what is up?"), + Message(text="Hello, how are you?"), + ] + ), + # Random choice from candidate list. + TRANSITIONS: { + "node2": cnd.exact_match(Message(text="I'm fine, how are you?")) + }, + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + "node3": cnd.exact_match( + Message(text="Let's talk about music.") + ) + }, + }, + "node3": { + RESPONSE: cannot_talk_about_topic_response, + TRANSITIONS: { + "node4": cnd.exact_match(Message(text="Ok, goodbye.")) + }, + }, + "node4": { + RESPONSE: upper_case_response(Message(text="bye")), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + "fallback_node": { # We get to this node + # if an error occurred while the agent was running. + RESPONSE: fallback_trace_response, + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + } +} + +# testing +happy_path = ( + ( + Message(text="Hi"), + Message(text="Hello, how are you?"), + ), # start_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="BYE")), # node3 -> node4 + (Message(text="Hi"), Message(text="Hi, what is up?")), # node4 -> node1 + ( + Message(text="stop"), + Message( + misc={ + "previous_node": ("greeting_flow", "node1"), + "last_request": Message(text="stop"), + } + ), + ), + # node1 -> fallback_node + ( + Message(text="one"), + Message( + misc={ + "previous_node": ("greeting_flow", "fallback_node"), + "last_request": Message(text="one"), + } + ), + ), # f_n->f_n + ( + Message(text="help"), + Message( + misc={ + "previous_node": ("greeting_flow", "fallback_node"), + "last_request": Message(text="help"), + } + ), + ), # f_n->f_n + ( + Message(text="nope"), + Message( + misc={ + "previous_node": ("greeting_flow", "fallback_node"), + "last_request": Message(text="nope"), + } + ), + ), # f_n->f_n + ( + Message(text="Hi"), + Message(text="Hello, how are you?"), + ), # fallback_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="BYE")), # node3 -> node4 +) + +# %% +random.seed(31415) # predestination of choice + + +pipeline = Pipeline.from_script( + toy_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.4_transitions.py.txt b/_sources/tutorials/tutorials.script.core.4_transitions.py.txt new file mode 100644 index 0000000000..1a1ece5386 --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.4_transitions.py.txt @@ -0,0 +1,309 @@ +# %% [markdown] +""" +# Core: 4. Transitions + +This tutorial shows settings for transitions between flows and nodes. + +Here, [conditions](%doclink(api,script.conditions.std_conditions)) +for transition between many different script steps are shown. + +Some of the destination steps can be set using +[labels](%doclink(api,script.labels.std_labels)). + +First of all, let's do all the necessary imports from DFF. +""" + + +# %pip install dff + +# %% +import re + +from dff.script import TRANSITIONS, RESPONSE, Context, NodeLabel3Type, Message +import dff.script.conditions as cnd +import dff.script.labels as lbl +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +# %% [markdown] +""" +Let's define the functions with a special type of return value: + + NodeLabel3Type == tuple[str, str, float] + +which means that transition returns a `tuple` +with flow name, node name and priority. +""" + + +# %% +def greeting_flow_n2_transition( + _: Context, __: Pipeline, *args, **kwargs +) -> NodeLabel3Type: + return ("greeting_flow", "node2", 1.0) + + +def high_priority_node_transition(flow_label, label): + def transition(_: Context, __: Pipeline, *args, **kwargs) -> NodeLabel3Type: + return (flow_label, label, 2.0) + + return transition + + +# %% [markdown] +""" +Priority is needed to select a condition +in the situation where more than one condition is `True`. +All conditions in `TRANSITIONS` are being checked. +Of the set of `True` conditions, +the one that has the highest priority will be executed. +Of the set of `True` conditions with largest +priority the first met condition will be executed. + +Out of the box `dff.script.core.labels` +offers the following methods: + +* `lbl.repeat()` returns transition handler + which returns `NodeLabelType` to the last node, + +* `lbl.previous()` returns transition handler + which returns `NodeLabelType` to the previous node, + +* `lbl.to_start()` returns transition handler + which returns `NodeLabelType` to the start node, + +* `lbl.to_fallback()` returns transition + handler which returns `NodeLabelType` to the fallback node, + +* `lbl.forward()` returns transition handler + which returns `NodeLabelType` to the forward node, + +* `lbl.backward()` returns transition handler + which returns `NodeLabelType` to the backward node. + +There are three flows here: `global_flow`, `greeting_flow`, `music_flow`. +""" + +# %% +toy_script = { + "global_flow": { + "start_node": { # This is an initial node, + # it doesn't need a `RESPONSE`. + RESPONSE: Message(), + TRANSITIONS: { + ("music_flow", "node1"): cnd.regexp( + r"talk about music" + ), # first check + ("greeting_flow", "node1"): cnd.regexp( + r"hi|hello", re.IGNORECASE + ), # second check + "fallback_node": cnd.true(), # third check + # "fallback_node" is equivalent to + # ("global_flow", "fallback_node"). + }, + }, + "fallback_node": { # We get to this node if + # an error occurred while the agent was running. + RESPONSE: Message(text="Ooops"), + TRANSITIONS: { + ("music_flow", "node1"): cnd.regexp( + r"talk about music" + ), # first check + ("greeting_flow", "node1"): cnd.regexp( + r"hi|hello", re.IGNORECASE + ), # second check + lbl.previous(): cnd.regexp( + r"previous", re.IGNORECASE + ), # third check + # lbl.previous() is equivalent + # to ("previous_flow", "previous_node") + lbl.repeat(): cnd.true(), # fourth check + # lbl.repeat() is equivalent to ("global_flow", "fallback_node") + }, + }, + }, + "greeting_flow": { + "node1": { + RESPONSE: Message(text="Hi, how are you?"), + # When the agent goes to node1, we return "Hi, how are you?" + TRANSITIONS: { + ( + "global_flow", + "fallback_node", + 0.1, + ): cnd.true(), # second check + "node2": cnd.regexp(r"how are you"), # first check + # "node2" is equivalent to ("greeting_flow", "node2", 1.0) + }, + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + lbl.to_fallback(0.1): cnd.true(), # third check + # lbl.to_fallback(0.1) is equivalent + # to ("global_flow", "fallback_node", 0.1) + lbl.forward(0.5): cnd.regexp(r"talk about"), # second check + # lbl.forward(0.5) is equivalent + # to ("greeting_flow", "node3", 0.5) + ("music_flow", "node1"): cnd.regexp( + r"talk about music" + ), # first check + # ("music_flow", "node1") is equivalent + # to ("music_flow", "node1", 1.0) + lbl.previous(): cnd.regexp( + r"previous", re.IGNORECASE + ), # third check + }, + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about that now."), + TRANSITIONS: {lbl.forward(): cnd.regexp(r"bye")}, + }, + "node4": { + RESPONSE: Message(text="Bye"), + TRANSITIONS: { + "node1": cnd.regexp(r"hi|hello", re.IGNORECASE), # first check + lbl.to_fallback(): cnd.true(), # second check + }, + }, + }, + "music_flow": { + "node1": { + RESPONSE: Message( + text="I love `System of a Down` group, " + "would you like to talk about it?" + ), + TRANSITIONS: { + lbl.forward(): cnd.regexp(r"yes|yep|ok", re.IGNORECASE), + lbl.to_fallback(): cnd.true(), + }, + }, + "node2": { + RESPONSE: Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + TRANSITIONS: { + lbl.forward(): cnd.regexp(r"next", re.IGNORECASE), + lbl.repeat(): cnd.regexp(r"repeat", re.IGNORECASE), + lbl.to_fallback(): cnd.true(), + }, + }, + "node3": { + RESPONSE: Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + TRANSITIONS: { + lbl.forward(): cnd.regexp(r"next", re.IGNORECASE), + lbl.backward(): cnd.regexp(r"back", re.IGNORECASE), + lbl.repeat(): cnd.regexp(r"repeat", re.IGNORECASE), + lbl.to_fallback(): cnd.true(), + }, + }, + "node4": { + RESPONSE: Message(text="That's all what I know."), + TRANSITIONS: { + greeting_flow_n2_transition: cnd.regexp( + r"next", re.IGNORECASE + ), # second check + high_priority_node_transition( + "greeting_flow", "node4" + ): cnd.regexp( + r"next time", re.IGNORECASE + ), # first check + lbl.to_fallback(): cnd.true(), # third check + }, + }, + }, +} + +# testing +happy_path = ( + (Message(text="hi"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="talk about music."), + Message( + text="I love `System of a Down` group, " + "would you like to talk about it?" + ), + ), + ( + Message(text="yes"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="next"), + Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + ), + ( + Message(text="back"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="repeat"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="next"), + Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + ), + (Message(text="next"), Message(text="That's all what I know.")), + ( + Message(text="next"), + Message(text="Good. What do you want to talk about?"), + ), + (Message(text="previous"), Message(text="That's all what I know.")), + (Message(text="next time"), Message(text="Bye")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="previous"), Message(text="Bye")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="nope"), Message(text="Ooops")), + (Message(text="hi"), Message(text="Hi, how are you?")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="previous"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="let's talk about something."), + Message(text="Sorry, I can not talk about that now."), + ), + (Message(text="Ok, goodbye."), Message(text="Bye")), +) + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("global_flow", "start_node"), + fallback_label=("global_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.5_global_transitions.py.txt b/_sources/tutorials/tutorials.script.core.5_global_transitions.py.txt new file mode 100644 index 0000000000..f0dc5a0fcc --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.5_global_transitions.py.txt @@ -0,0 +1,221 @@ +# %% [markdown] +""" +# Core: 5. Global transitions + +This tutorial shows the global setting of transitions. + +Here, global [conditions](%doclink(api,script.conditions.std_conditions)) +for default transition between many different script steps are shown. + +First of all, let's do all the necessary imports from DFF. +""" + + +# %pip install dff + +# %% +import re + +from dff.script import GLOBAL, TRANSITIONS, RESPONSE, Message +import dff.script.conditions as cnd +import dff.script.labels as lbl +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +# %% [markdown] +""" +The keyword `GLOBAL` is used to define a global node. +There can be only one global node in a script. +The value that corresponds to this key has the +`dict` type with the same keywords as regular nodes. +The global node is defined above the flow level as opposed to regular nodes. +This node allows to define default global values for all nodes. + +There are `GLOBAL` node and three flows: +`global_flow`, `greeting_flow`, `music_flow`. +""" + +# %% +toy_script = { + GLOBAL: { + TRANSITIONS: { + ("greeting_flow", "node1", 1.1): cnd.regexp( + r"\b(hi|hello)\b", re.I + ), # first check + ("music_flow", "node1", 1.1): cnd.regexp( + r"talk about music" + ), # second check + lbl.to_fallback(0.1): cnd.true(), # fifth check + lbl.forward(): cnd.all( + [ + cnd.regexp(r"next\b"), + cnd.has_last_labels( + labels=[("music_flow", i) for i in ["node2", "node3"]] + ), + ] # third check + ), + lbl.repeat(0.2): cnd.all( + [ + cnd.regexp(r"repeat", re.I), + cnd.negation( + cnd.has_last_labels(flow_labels=["global_flow"]) + ), + ] # fourth check + ), + } + }, + "global_flow": { + "start_node": { + RESPONSE: Message() + }, # This is an initial node, it doesn't need a `RESPONSE`. + "fallback_node": { # We get to this node + # if an error occurred while the agent was running. + RESPONSE: Message(text="Ooops"), + TRANSITIONS: {lbl.previous(): cnd.regexp(r"previous", re.I)}, + # lbl.previous() is equivalent to + # ("previous_flow", "previous_node", 1.0) + }, + }, + "greeting_flow": { + "node1": { + RESPONSE: Message(text="Hi, how are you?"), + TRANSITIONS: {"node2": cnd.regexp(r"how are you")}, + # "node2" is equivalent to ("greeting_flow", "node2", 1.0) + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + lbl.forward(0.5): cnd.regexp(r"talk about"), + # lbl.forward(0.5) is equivalent to + # ("greeting_flow", "node3", 0.5) + lbl.previous(): cnd.regexp(r"previous", re.I), + }, + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about that now."), + TRANSITIONS: {lbl.forward(): cnd.regexp(r"bye")}, + }, + "node4": {RESPONSE: Message(text="bye")}, + # Only the global transitions setting are used in this node. + }, + "music_flow": { + "node1": { + RESPONSE: Message( + text="I love `System of a Down` group, " + "would you like to talk about it?" + ), + TRANSITIONS: {lbl.forward(): cnd.regexp(r"yes|yep|ok", re.I)}, + }, + "node2": { + RESPONSE: Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ) + # Only the global transitions setting are used in this node. + }, + "node3": { + RESPONSE: Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + TRANSITIONS: {lbl.backward(): cnd.regexp(r"back", re.I)}, + }, + "node4": { + RESPONSE: Message(text="That's all what I know."), + TRANSITIONS: { + ("greeting_flow", "node4"): cnd.regexp(r"next time", re.I), + ("greeting_flow", "node2"): cnd.regexp(r"next", re.I), + }, + }, + }, +} + +# testing +happy_path = ( + (Message(text="hi"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="talk about music."), + Message( + text="I love `System of a Down` group, " + "would you like to talk about it?" + ), + ), + ( + Message(text="yes"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="next"), + Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + ), + ( + Message(text="back"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="repeat"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="next"), + Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + ), + (Message(text="next"), Message(text="That's all what I know.")), + ( + Message(text="next"), + Message(text="Good. What do you want to talk about?"), + ), + (Message(text="previous"), Message(text="That's all what I know.")), + (Message(text="next time"), Message(text="bye")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="previous"), Message(text="bye")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="nope"), Message(text="Ooops")), + (Message(text="hi"), Message(text="Hi, how are you?")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="previous"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="let's talk about something."), + Message(text="Sorry, I can not talk about that now."), + ), + (Message(text="Ok, goodbye."), Message(text="bye")), +) + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("global_flow", "start_node"), + fallback_label=("global_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.6_context_serialization.py.txt b/_sources/tutorials/tutorials.script.core.6_context_serialization.py.txt new file mode 100644 index 0000000000..bcf6cb7e24 --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.6_context_serialization.py.txt @@ -0,0 +1,89 @@ +# %% [markdown] +""" +# Core: 6. Context serialization + +This tutorial shows context serialization. +First of all, let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +import logging + +from dff.script import TRANSITIONS, RESPONSE, Context, Message +import dff.script.conditions as cnd + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% [markdown] +""" +This function returns the user request number. +""" + + +# %% +def response_handler(ctx: Context, _: Pipeline, *args, **kwargs) -> Message: + return Message(text=f"answer {len(ctx.requests)}") + + +# %% +# a dialog script +toy_script = { + "flow_start": { + "node_start": { + RESPONSE: response_handler, + TRANSITIONS: {("flow_start", "node_start"): cnd.true()}, + } + } +} + +# testing +happy_path = ( + (Message(text="hi"), Message(text="answer 1")), + (Message(text="how are you?"), Message(text="answer 2")), + (Message(text="ok"), Message(text="answer 3")), + (Message(text="good"), Message(text="answer 4")), +) + +# %% [markdown] +""" +Draft function that performs serialization. +""" + + +# %% +def process_response(ctx: Context): + ctx_json = ctx.model_dump_json() + if isinstance(ctx_json, str): + logging.info("context serialized to json str") + else: + raise Exception(f"ctx={ctx_json} has to be serialized to json string") + + ctx_dict = ctx.model_dump() + if isinstance(ctx_dict, dict): + logging.info("context serialized to dict") + else: + raise Exception(f"ctx={ctx_dict} has to be serialized to dict") + + if not isinstance(ctx, Context): + raise Exception(f"ctx={ctx} has to have Context type") + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("flow_start", "node_start"), + post_services=[process_response], +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.7_pre_response_processing.py.txt b/_sources/tutorials/tutorials.script.core.7_pre_response_processing.py.txt new file mode 100644 index 0000000000..38269b6a65 --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.7_pre_response_processing.py.txt @@ -0,0 +1,135 @@ +# %% [markdown] +""" +# Core: 7. Pre-response processing + +This tutorial shows pre-response processing feature. + +Here, %mddoclink(api,script.core.keywords,Keywords.PRE_RESPONSE_PROCESSING) +is demonstrated which can be used for additional context processing before response handlers. + +There are also some other %mddoclink(api,script.core.keywords,Keywords) +worth attention used in this tutorial. + +First of all, let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +from dff.script import ( + GLOBAL, + LOCAL, + RESPONSE, + TRANSITIONS, + PRE_RESPONSE_PROCESSING, + Context, + Message, +) +import dff.script.labels as lbl +import dff.script.conditions as cnd + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +def add_prefix(prefix): + def add_prefix_processing( + ctx: Context, _: Pipeline, *args, **kwargs + ) -> Context: + processed_node = ctx.current_node + processed_node.response = Message( + text=f"{prefix}: {processed_node.response.text}" + ) + ctx.overwrite_current_node_in_processing(processed_node) + return ctx + + return add_prefix_processing + + +# %% [markdown] +""" +`PRE_RESPONSE_PROCESSING` is a keyword that +can be used in `GLOBAL`, `LOCAL` or nodes. +""" + + +# %% +toy_script = { + "root": { + "start": { + RESPONSE: Message(), + TRANSITIONS: {("flow", "step_0"): cnd.true()}, + }, + "fallback": {RESPONSE: Message(text="the end")}, + }, + GLOBAL: { + PRE_RESPONSE_PROCESSING: { + "proc_name_1": add_prefix("l1_global"), + "proc_name_2": add_prefix("l2_global"), + } + }, + "flow": { + LOCAL: { + PRE_RESPONSE_PROCESSING: { + "proc_name_2": add_prefix("l2_local"), + "proc_name_3": add_prefix("l3_local"), + } + }, + "step_0": { + RESPONSE: Message(text="first"), + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_1": { + PRE_RESPONSE_PROCESSING: {"proc_name_1": add_prefix("l1_step_1")}, + RESPONSE: Message(text="second"), + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_2": { + PRE_RESPONSE_PROCESSING: {"proc_name_2": add_prefix("l2_step_2")}, + RESPONSE: Message(text="third"), + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_3": { + PRE_RESPONSE_PROCESSING: {"proc_name_3": add_prefix("l3_step_3")}, + RESPONSE: Message(text="fourth"), + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_4": { + PRE_RESPONSE_PROCESSING: {"proc_name_4": add_prefix("l4_step_4")}, + RESPONSE: Message(text="fifth"), + TRANSITIONS: {"step_0": cnd.true()}, + }, + }, +} + + +# testing +happy_path = ( + (Message(), Message(text="l3_local: l2_local: l1_global: first")), + (Message(), Message(text="l3_local: l2_local: l1_step_1: second")), + (Message(), Message(text="l3_local: l2_step_2: l1_global: third")), + (Message(), Message(text="l3_step_3: l2_local: l1_global: fourth")), + ( + Message(), + Message(text="l4_step_4: l3_local: l2_local: l1_global: fifth"), + ), + (Message(), Message(text="l3_local: l2_local: l1_global: first")), +) + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.8_misc.py.txt b/_sources/tutorials/tutorials.script.core.8_misc.py.txt new file mode 100644 index 0000000000..ac5eb813dd --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.8_misc.py.txt @@ -0,0 +1,167 @@ +# %% [markdown] +""" +# Core: 8. Misc + +This tutorial shows `MISC` (miscellaneous) keyword usage. + +See %mddoclink(api,script.core.keywords,Keywords.MISC) +for more information. + +First of all, let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +from dff.script import ( + GLOBAL, + LOCAL, + RESPONSE, + TRANSITIONS, + MISC, + Context, + Message, +) +import dff.script.labels as lbl +import dff.script.conditions as cnd +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +def custom_response(ctx: Context, _: Pipeline, *args, **kwargs) -> Message: + if ctx.validation: + return Message() + current_node = ctx.current_node + return Message( + text=f"ctx.last_label={ctx.last_label}: " + f"current_node.misc={current_node.misc}" + ) + + +# %% +toy_script = { + "root": { + "start": { + RESPONSE: Message(), + TRANSITIONS: {("flow", "step_0"): cnd.true()}, + }, + "fallback": {RESPONSE: Message(text="the end")}, + }, + GLOBAL: { + MISC: { + "var1": "global_data", + "var2": "global_data", + "var3": "global_data", + } + }, + "flow": { + LOCAL: { + MISC: { + "var2": "rewrite_by_local", + "var3": "rewrite_by_local", + } + }, + "step_0": { + MISC: {"var3": "info_of_step_0"}, + RESPONSE: custom_response, + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_1": { + MISC: {"var3": "info_of_step_1"}, + RESPONSE: custom_response, + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_2": { + MISC: {"var3": "info_of_step_2"}, + RESPONSE: custom_response, + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_3": { + MISC: {"var3": "info_of_step_3"}, + RESPONSE: custom_response, + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_4": { + MISC: {"var3": "info_of_step_4"}, + RESPONSE: custom_response, + TRANSITIONS: {"step_0": cnd.true()}, + }, + }, +} + + +# testing +happy_path = ( + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_0'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_0'}" + ), + ), + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_1'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_1'}" + ), + ), + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_2'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_2'}" + ), + ), + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_3'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_3'}" + ), + ), + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_4'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_4'}" + ), + ), + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_0'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_0'}" + ), + ), +) + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.9_pre_transitions_processing.py.txt b/_sources/tutorials/tutorials.script.core.9_pre_transitions_processing.py.txt new file mode 100644 index 0000000000..b875b4eb0e --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.9_pre_transitions_processing.py.txt @@ -0,0 +1,106 @@ +# %% [markdown] +""" +# Core: 9. Pre-transitions processing + +This tutorial shows pre-transitions processing feature. + +Here, %mddoclink(api,script.core.keywords,Keywords.PRE_TRANSITIONS_PROCESSING) +is demonstrated which can be used for additional context +processing before transitioning to the next step. + +First of all, let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +from dff.script import ( + GLOBAL, + RESPONSE, + TRANSITIONS, + PRE_RESPONSE_PROCESSING, + PRE_TRANSITIONS_PROCESSING, + Context, + Message, +) +import dff.script.labels as lbl +import dff.script.conditions as cnd +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +def save_previous_node_response_to_ctx_processing( + ctx: Context, _: Pipeline, *args, **kwargs +) -> Context: + processed_node = ctx.current_node + ctx.misc["previous_node_response"] = processed_node.response + return ctx + + +def get_previous_node_response_for_response_processing( + ctx: Context, _: Pipeline, *args, **kwargs +) -> Context: + processed_node = ctx.current_node + processed_node.response = Message( + text=f"previous={ctx.misc['previous_node_response'].text}:" + f" current={processed_node.response.text}" + ) + ctx.overwrite_current_node_in_processing(processed_node) + return ctx + + +# %% +# a dialog script +toy_script = { + "root": { + "start": { + RESPONSE: Message(), + TRANSITIONS: {("flow", "step_0"): cnd.true()}, + }, + "fallback": {RESPONSE: Message(text="the end")}, + }, + GLOBAL: { + PRE_RESPONSE_PROCESSING: { + "proc_name_1": get_previous_node_response_for_response_processing + }, + PRE_TRANSITIONS_PROCESSING: { + "proc_name_1": save_previous_node_response_to_ctx_processing + }, + TRANSITIONS: {lbl.forward(0.1): cnd.true()}, + }, + "flow": { + "step_0": {RESPONSE: Message(text="first")}, + "step_1": {RESPONSE: Message(text="second")}, + "step_2": {RESPONSE: Message(text="third")}, + "step_3": {RESPONSE: Message(text="fourth")}, + "step_4": {RESPONSE: Message(text="fifth")}, + }, +} + + +# testing +happy_path = ( + (Message(text="1"), Message(text="previous=None: current=first")), + (Message(text="2"), Message(text="previous=first: current=second")), + (Message(text="3"), Message(text="previous=second: current=third")), + (Message(text="4"), Message(text="previous=third: current=fourth")), + (Message(text="5"), Message(text="previous=fourth: current=fifth")), +) + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.responses.1_basics.py.txt b/_sources/tutorials/tutorials.script.responses.1_basics.py.txt new file mode 100644 index 0000000000..e021a4a670 --- /dev/null +++ b/_sources/tutorials/tutorials.script.responses.1_basics.py.txt @@ -0,0 +1,110 @@ +# %% [markdown] +""" +# Responses: 1. Basics + +Here, the process of response forming is shown. +Special keywords %mddoclink(api,script.core.keywords,Keywords.RESPONSE) +and %mddoclink(api,script.core.keywords,Keywords.TRANSITIONS) +are used for that. +""" + +# %pip install dff + +# %% +from typing import NamedTuple + +from dff.script import Message +from dff.script.conditions import exact_match +from dff.script import RESPONSE, TRANSITIONS +from dff.pipeline import Pipeline +from dff.utils.testing import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +toy_script = { + "greeting_flow": { + "start_node": { + RESPONSE: Message(text=""), + TRANSITIONS: {"node1": exact_match(Message(text="Hi"))}, + }, + "node1": { + RESPONSE: Message(text="Hi, how are you?"), + TRANSITIONS: { + "node2": exact_match(Message(text="i'm fine, how are you?")) + }, + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + "node3": exact_match(Message(text="Let's talk about music.")) + }, + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about music now."), + TRANSITIONS: {"node4": exact_match(Message(text="Ok, goodbye."))}, + }, + "node4": { + RESPONSE: Message(text="bye"), + TRANSITIONS: {"node1": exact_match(Message(text="Hi"))}, + }, + "fallback_node": { + RESPONSE: Message(text="Ooops"), + TRANSITIONS: {"node1": exact_match(Message(text="Hi"))}, + }, + } +} + +happy_path = ( + (Message(text="Hi"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), + (Message(text="Ok, goodbye."), Message(text="bye")), + (Message(text="Hi"), Message(text="Hi, how are you?")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="Hi"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), + (Message(text="Ok, goodbye."), Message(text="bye")), +) + + +# %% +class CallbackRequest(NamedTuple): + payload: str + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path( + pipeline, + happy_path, + ) # This is a function for automatic tutorial running + # (testing) with `happy_path` + + # This runs tutorial in interactive mode if not in IPython env + # and if `DISABLE_INTERACTIVE_MODE` is not set + if is_interactive_mode(): + run_interactive_mode(pipeline) # This runs tutorial in interactive mode diff --git a/_sources/tutorials/tutorials.script.responses.2_buttons.py.txt b/_sources/tutorials/tutorials.script.responses.2_buttons.py.txt new file mode 100644 index 0000000000..ff6373c0ce --- /dev/null +++ b/_sources/tutorials/tutorials.script.responses.2_buttons.py.txt @@ -0,0 +1,259 @@ +# %% [markdown] +""" +# Responses: 2. Buttons + +In this tutorial %mddoclink(api,script.core.message,Button) +class is demonstrated. +Buttons are one of %mddoclink(api,script.core.message,Message) fields. +They can be attached to any message but will only work if the chosen +[messenger interface](%doclink(api,index_messenger_interfaces)) supports them. +""" + + +# %pip install dff + +# %% +import dff.script.conditions as cnd +import dff.script.labels as lbl +from dff.script import Context, TRANSITIONS, RESPONSE + +from dff.script.core.message import Button, Keyboard, Message +from dff.pipeline import Pipeline +from dff.utils.testing import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +def check_button_payload(value: str): + def payload_check_inner(ctx: Context, _: Pipeline): + if ctx.last_request.misc is not None: + return ctx.last_request.misc.get("payload") == value + else: + return False + + return payload_check_inner + + +# %% +toy_script = { + "root": { + "start": { + RESPONSE: Message(text=""), + TRANSITIONS: { + ("general", "question_1"): cnd.true(), + }, + }, + "fallback": {RESPONSE: Message(text="Finishing test")}, + }, + "general": { + "question_1": { + RESPONSE: Message( + **{ + "text": "Starting test! What's 2 + 2?" + " (type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="5", payload="5"), + Button(text="4", payload="4"), + ] + ), + }, + } + ), + TRANSITIONS: { + lbl.forward(): check_button_payload("4"), + ("general", "question_1"): check_button_payload("5"), + }, + }, + "question_2": { + RESPONSE: Message( + **{ + "text": "Next question: what's 6 * 8?" + " (type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="38", payload="38"), + Button(text="48", payload="48"), + ] + ), + }, + } + ), + TRANSITIONS: { + lbl.forward(): check_button_payload("48"), + ("general", "question_2"): check_button_payload("38"), + }, + }, + "question_3": { + RESPONSE: Message( + **{ + "text": "What's 114 + 115? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="229", payload="229"), + Button(text="283", payload="283"), + ] + ), + }, + } + ), + TRANSITIONS: { + lbl.forward(): check_button_payload("229"), + ("general", "question_3"): check_button_payload("283"), + }, + }, + "success": { + RESPONSE: Message(text="Success!"), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + }, +} + +happy_path = ( + ( + Message(text="Hi"), + Message( + **{ + "text": "Starting test! What's 2 + 2? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="5", payload="5"), + Button(text="4", payload="4"), + ] + ) + }, + } + ), + ), + ( + Message(text="0"), + Message( + **{ + "text": "Starting test! What's 2 + 2? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="5", payload="5"), + Button(text="4", payload="4"), + ] + ), + }, + } + ), + ), + ( + Message(text="1"), + Message( + **{ + "text": "Next question: what's 6 * 8? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="38", payload="38"), + Button(text="48", payload="48"), + ] + ), + }, + } + ), + ), + ( + Message(text="0"), + Message( + **{ + "text": "Next question: what's 6 * 8? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="38", payload="38"), + Button(text="48", payload="48"), + ] + ), + }, + } + ), + ), + ( + Message(text="1"), + Message( + **{ + "text": "What's 114 + 115? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="229", payload="229"), + Button(text="283", payload="283"), + ] + ), + }, + } + ), + ), + ( + Message(text="1"), + Message( + **{ + "text": "What's 114 + 115? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="229", payload="229"), + Button(text="283", payload="283"), + ] + ), + }, + } + ), + ), + (Message(text="0"), Message(text="Success!")), + (Message(text="ok"), Message(text="Finishing test")), +) + + +def process_request(ctx: Context): + ui = ( + ctx.last_response + and ctx.last_response.misc + and ctx.last_response.misc.get("ui") + ) + if ui and ui.buttons: + try: + chosen_button = ui.buttons[int(ctx.last_request.text)] + except (IndexError, ValueError): + raise ValueError( + "Type in the index of the correct option " + "to choose from the buttons." + ) + ctx.last_request = Message(misc={"payload": chosen_button.payload}) + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), + pre_services=[process_request], +) + +if __name__ == "__main__": + check_happy_path( + pipeline, + happy_path, + ) # For response object with `happy_path` string comparing, + # a special `generics_comparer` comparator is used + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.responses.3_media.py.txt b/_sources/tutorials/tutorials.script.responses.3_media.py.txt new file mode 100644 index 0000000000..ad29dd0546 --- /dev/null +++ b/_sources/tutorials/tutorials.script.responses.3_media.py.txt @@ -0,0 +1,127 @@ +# %% [markdown] +""" +# Responses: 3. Media + +Here, %mddoclink(api,script.core.message,Attachments) class is shown. +Attachments can be used for attaching different media elements +(such as %mddoclink(api,script.core.message,Image), %mddoclink(api,script.core.message,Document) +or %mddoclink(api,script.core.message,Audio)). + +They can be attached to any message but will only work if the chosen +[messenger interface](%doclink(api,index_messenger_interfaces)) supports them. +""" + +# %pip install dff + +# %% +from dff.script import RESPONSE, TRANSITIONS +from dff.script.conditions import std_conditions as cnd + +from dff.script.core.message import Attachments, Image, Message + +from dff.pipeline import Pipeline +from dff.utils.testing import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +img_url = "https://www.python.org/static/img/python-logo.png" +toy_script = { + "root": { + "start": { + RESPONSE: Message(text=""), + TRANSITIONS: {("pics", "ask_picture"): cnd.true()}, + }, + "fallback": { + RESPONSE: Message( + text="Final node reached, send any message to restart." + ), + TRANSITIONS: {("pics", "ask_picture"): cnd.true()}, + }, + }, + "pics": { + "ask_picture": { + RESPONSE: Message(text="Please, send me a picture url"), + TRANSITIONS: { + ("pics", "send_one", 1.1): cnd.regexp(r"^http.+\.png$"), + ("pics", "send_many", 1.0): cnd.regexp( + f"{img_url} repeat 10 times" + ), + ("pics", "repeat", 0.9): cnd.true(), + }, + }, + "send_one": { + RESPONSE: Message( + text="here's my picture!", + attachments=Attachments(files=[Image(source=img_url)]), + ), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + "send_many": { + RESPONSE: Message( + text="Look at my pictures", + attachments=Attachments(files=[Image(source=img_url)] * 10), + ), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + "repeat": { + RESPONSE: Message( + text="I cannot find the picture. Please, try again." + ), + TRANSITIONS: { + ("pics", "send_one", 1.1): cnd.regexp(r"^http.+\.png$"), + ("pics", "send_many", 1.0): cnd.regexp( + r"^http.+\.png repeat 10 times" + ), + ("pics", "repeat", 0.9): cnd.true(), + }, + }, + }, +} + +happy_path = ( + (Message(text="Hi"), Message(text="Please, send me a picture url")), + ( + Message(text="no"), + Message(text="I cannot find the picture. Please, try again."), + ), + ( + Message(text=img_url), + Message( + text="here's my picture!", + attachments=Attachments(files=[Image(source=img_url)]), + ), + ), + ( + Message(text="ok"), + Message(text="Final node reached, send any message to restart."), + ), + (Message(text="ok"), Message(text="Please, send me a picture url")), + ( + Message(text=f"{img_url} repeat 10 times"), + Message( + text="Look at my pictures", + attachments=Attachments(files=[Image(source=img_url)] * 10), + ), + ), + ( + Message(text="ok"), + Message(text="Final node reached, send any message to restart."), + ), +) + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.responses.4_multi_message.py.txt b/_sources/tutorials/tutorials.script.responses.4_multi_message.py.txt new file mode 100644 index 0000000000..e2b7836758 --- /dev/null +++ b/_sources/tutorials/tutorials.script.responses.4_multi_message.py.txt @@ -0,0 +1,149 @@ +# %% [markdown] +""" +# Responses: 4. Multi Message + +This tutorial shows Multi Message usage. + +The %mddoclink(api,script.core.message,MultiMessage) represents a combination of several messages. + +Let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% + +from dff.script import TRANSITIONS, RESPONSE, Message, MultiMessage +import dff.script.conditions as cnd + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +# %% +toy_script = { + "greeting_flow": { + "start_node": { # This is an initial node, + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + # If "Hi" == request of user then we make the transition + }, + "node1": { + RESPONSE: MultiMessage( + messages=[ + Message(text="Hi, what is up?", misc={"confidences": 0.85}), + Message( + text="Hello, how are you?", misc={"confidences": 0.9} + ), + ] + ), + TRANSITIONS: { + "node2": cnd.exact_match(Message(text="I'm fine, how are you?")) + }, + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + "node3": cnd.exact_match( + Message(text="Let's talk about music.") + ) + }, + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about that now."), + TRANSITIONS: { + "node4": cnd.exact_match(Message(text="Ok, goodbye.")) + }, + }, + "node4": { + RESPONSE: Message(text="bye"), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + "fallback_node": { # We get to this node + # if an error occurred while the agent was running. + RESPONSE: Message(text="Ooops"), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + } +} + +# testing +happy_path = ( + ( + Message(text="Hi"), + MultiMessage( + messages=[ + Message(text="Hi, what is up?", misc={"confidences": 0.85}), + Message(text="Hello, how are you?", misc={"confidences": 0.9}), + ] + ), + ), # start_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about that now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="bye")), # node3 -> node4 + ( + Message(text="Hi"), + MultiMessage( + messages=[ + Message(text="Hi, what is up?", misc={"confidences": 0.85}), + Message(text="Hello, how are you?", misc={"confidences": 0.9}), + ] + ), + ), # node4 -> node1 + ( + Message(text="stop"), + Message(text="Ooops"), + ), + # node1 -> fallback_node + ( + Message(text="one"), + Message(text="Ooops"), + ), # f_n->f_n + ( + Message(text="help"), + Message(text="Ooops"), + ), # f_n->f_n + ( + Message(text="nope"), + Message(text="Ooops"), + ), # f_n->f_n + ( + Message(text="Hi"), + MultiMessage( + messages=[ + Message(text="Hi, what is up?", misc={"confidences": 0.85}), + Message(text="Hello, how are you?", misc={"confidences": 0.9}), + ] + ), + ), # fallback_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about that now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="bye")), # node3 -> node4 +) + +# %% + +pipeline = Pipeline.from_script( + toy_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.stats.1_extractor_functions.py.txt b/_sources/tutorials/tutorials.stats.1_extractor_functions.py.txt new file mode 100644 index 0000000000..981333a1d7 --- /dev/null +++ b/_sources/tutorials/tutorials.stats.1_extractor_functions.py.txt @@ -0,0 +1,136 @@ +# %% [markdown] +""" +# 1. Extractor Functions + +The following example covers the basics of using the `stats` module. + +Statistics are collected from pipeline services by extractor functions +that report the state of one or more pipeline components. The `stats` module +provides several default extractors, but users are free to define their own +extractor functions. You can find API reference for default extractors +[here](%doclink(api,stats.default_extractors)). + +It is a preferred practice to define extractors as asynchronous functions. +Extractors need to have the following uniform signature: +the expected arguments are always `Context`, `Pipeline`, and `ExtraHandlerRuntimeInfo`, +while the expected return value is an arbitrary `dict` or a `None`. +The returned value gets persisted to Clickhouse as JSON +which is why it can contain arbitrarily nested dictionaries, +but it cannot contain any complex objects that cannot be trivially serialized. + +The output of these functions will be captured by an OpenTelemetry instrumentor and directed to +the Opentelemetry collector server which in its turn batches and persists data +to Clickhouse or other OLAP storages. + +
    + +Both the Opentelemetry collector and the Clickhouse instance must be running +during statistics collection. If you cloned the DFF repo, launch them using `docker compose`: +```bash +docker compose --profile stats up +``` + +
    + +For more information on OpenTelemetry instrumentation, +refer to the body of this tutorial as well as [OpenTelemetry documentation]( +https://opentelemetry.io/docs/instrumentation/python/manual/ +). + +""" + +# %pip install dff[stats] + +# %% +import asyncio + +from dff.script import Context +from dff.pipeline import ( + Pipeline, + ACTOR, + Service, + ExtraHandlerRuntimeInfo, + to_service, +) +from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH +from dff.stats import OtelInstrumentor, default_extractors +from dff.utils.testing import is_interactive_mode, check_happy_path + + +# %% [markdown] +""" +The cells below configure log export with the help of OTLP instrumentation. + +* The initial step is to configure the export destination. +`from_url` method of the `OtelInstrumentor` class simplifies this task +allowing you to only pass the url of the OTLP Collector server. + +* Alternatively, you can use the utility functions provided by the `stats` module: +`set_logger_destination`, `set_tracer_destination`, or `set_meter_destination`. These accept +an appropriate Opentelemetry exporter instance and bind it to provider classes. + +* Nextly, the `OtelInstrumentor` class should be constructed to log the output +of extractor functions. Custom extractors need to be decorated +with the `OtelInstrumentor` instance. Default extractors are instrumented +by calling the `instrument` method. + +* The entirety of the process is illustrated in the example below. + +""" + + +# %% +dff_instrumentor = OtelInstrumentor.from_url("grpc://localhost:4317") +dff_instrumentor.instrument() + +# %% [markdown] +""" +The following cell shows a custom extractor function. The data obtained from +the context and the runtime information gets shaped as a dict and returned +from the function body. The `dff_instrumentor` decorator then ensures +that the output is logged by OpenTelemetry. + +""" + + +# %% +# decorated by an OTLP Instrumentor instance +@dff_instrumentor +async def get_service_state(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + # extract the execution state of a target service + data = { + "execution_state": info.component.execution_state, + } + # return the state as an arbitrary dict for further logging + return data + + +# %% +# configure `get_service_state` to run after the `heavy_service` +@to_service(after_handler=[get_service_state]) +async def heavy_service(ctx: Context): + _ = ctx # get something from ctx if needed + await asyncio.sleep(0.02) + + +# %% +pipeline = Pipeline.from_dict( + { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + heavy_service, + Service( + handler=ACTOR, + after_handler=[default_extractors.get_current_label], + ), + ], + } +) + + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + pipeline.run() diff --git a/_sources/tutorials/tutorials.stats.2_pipeline_integration.py.txt b/_sources/tutorials/tutorials.stats.2_pipeline_integration.py.txt new file mode 100644 index 0000000000..cd042d11e6 --- /dev/null +++ b/_sources/tutorials/tutorials.stats.2_pipeline_integration.py.txt @@ -0,0 +1,136 @@ +# %% [markdown] +""" +# 2. Pipeline Integration + +In the DFF ecosystem, extractor functions act as regular extra handlers ( +[see the pipeline module documentation](%doclink(tutorial,pipeline.6_extra_handlers_basic)) +). +Hence, you can decorate any part of your pipeline, including services, +service groups and the pipeline as a whole, to obtain the statistics +specific for that component. Some examples of this functionality +are showcased in this tutorial. + +
    + +Both the Opentelemetry collector and the Clickhouse instance must be running +during statistics collection. If you cloned the DFF repo, launch them using `docker compose`: +```bash +docker compose --profile stats up +``` + +
    +""" + +# %pip install dff[stats] + +# %% +import asyncio + +from dff.script import Context +from dff.pipeline import ( + Pipeline, + ACTOR, + Service, + ExtraHandlerRuntimeInfo, + ServiceGroup, + GlobalExtraHandlerType, +) +from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH +from dff.stats import ( + OtelInstrumentor, + set_logger_destination, + set_tracer_destination, +) +from dff.stats import OTLPLogExporter, OTLPSpanExporter +from dff.stats import default_extractors +from dff.utils.testing import is_interactive_mode, check_happy_path + +# %% +set_logger_destination(OTLPLogExporter("grpc://localhost:4317", insecure=True)) +set_tracer_destination(OTLPSpanExporter("grpc://localhost:4317", insecure=True)) +dff_instrumentor = OtelInstrumentor() +dff_instrumentor.instrument() + + +# example extractor function +@dff_instrumentor +async def get_service_state(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + # extract execution state of service from info + data = { + "execution_state": info.component.execution_state, + } + # return a record to save into connected database + return data + + +# %% +# example service +async def heavy_service(ctx: Context): + _ = ctx # get something from ctx if needed + await asyncio.sleep(0.02) + + +# %% [markdown] +""" + +The many ways in which you can use extractor functions are shown in the following +pipeline definition. The functions are used to obtain statistics from respective components: + +* A service group of two `heavy_service` instances. +* An `Actor` service. +* The pipeline as a whole. + +As is the case with the regular extra handler functions, you can wire the extractors +to run either before or after the target service. As a result, you can compare +the pre-service and post-service states of the context to measure the performance +of various components, etc. + +Some extractors, like `get_current_label`, have restrictions in terms of their run stage: +for instance, `get_current_label` needs to only be used as an `after_handler` +to function correctly. + +""" +# %% +pipeline = Pipeline.from_dict( + { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + ServiceGroup( + before_handler=[default_extractors.get_timing_before], + after_handler=[ + get_service_state, + default_extractors.get_timing_after, + ], + components=[ + {"handler": heavy_service}, + {"handler": heavy_service}, + ], + ), + Service( + handler=ACTOR, + before_handler=[ + default_extractors.get_timing_before, + ], + after_handler=[ + get_service_state, + default_extractors.get_current_label, + default_extractors.get_timing_after, + ], + ), + ], + } +) +pipeline.add_global_handler( + GlobalExtraHandlerType.BEFORE_ALL, default_extractors.get_timing_before +) +pipeline.add_global_handler( + GlobalExtraHandlerType.AFTER_ALL, default_extractors.get_timing_after +) +pipeline.add_global_handler(GlobalExtraHandlerType.AFTER_ALL, get_service_state) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + pipeline.run() diff --git a/_sources/tutorials/tutorials.utils.1_cache.py.txt b/_sources/tutorials/tutorials.utils.1_cache.py.txt new file mode 100644 index 0000000000..676f2f9e59 --- /dev/null +++ b/_sources/tutorials/tutorials.utils.1_cache.py.txt @@ -0,0 +1,77 @@ +# %% [markdown] +""" +# 1. Cache + +In this tutorial use of +%mddoclink(api,utils.turn_caching.singleton_turn_caching,cache) +function is demonstrated. + +This function is used a lot like `functools.cache` function and +helps by saving results of heavy function execution and avoiding recalculation. + +Caches are kept in a library-wide singleton +and are cleared at the end of each turn. +""" + +# %pip install dff + +# %% +from dff.script.conditions import true +from dff.script import Context, TRANSITIONS, RESPONSE, Message +from dff.script.labels import repeat +from dff.pipeline import Pipeline +from dff.utils.turn_caching import cache +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +external_data = {"counter": 0} + + +# %% +@cache +def cached_response(_): + """ + This function execution result will be saved + for any set of given argument(s). + If the function will be called again + with the same arguments it will prevent it from execution. + The cached values will be used instead. + The cache is stored in a library-wide singleton, + that is cleared in the end of execution of actor and/or pipeline. + """ + external_data["counter"] += 1 + return external_data["counter"] + + +def response(ctx: Context, _, *__, **___) -> Message: + if ctx.validation: + return Message() + return Message( + text=f"{cached_response(1)}-{cached_response(2)}-" + f"{cached_response(1)}-{cached_response(2)}" + ) + + +# %% +toy_script = { + "flow": {"node1": {TRANSITIONS: {repeat(): true()}, RESPONSE: response}} +} + +happy_path = ( + (Message(), Message(text="1-2-1-2")), + (Message(), Message(text="3-4-3-4")), + (Message(), Message(text="5-6-5-6")), +) + +pipeline = Pipeline.from_script(toy_script, start_label=("flow", "node1")) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.utils.2_lru_cache.py.txt b/_sources/tutorials/tutorials.utils.2_lru_cache.py.txt new file mode 100644 index 0000000000..b0fa4f0280 --- /dev/null +++ b/_sources/tutorials/tutorials.utils.2_lru_cache.py.txt @@ -0,0 +1,75 @@ +# %% [markdown] +""" +# 2. LRU Cache + +In this tutorial use of +%mddoclink(api,utils.turn_caching.singleton_turn_caching,lru_cache) +function is demonstrated. + +This function is used a lot like `functools.lru_cache` function and +helps by saving results of heavy function execution and avoiding recalculation. + +Caches are kept in a library-wide singleton +and are cleared at the end of each turn. + +Maximum size parameter limits the amount of function execution results cached. +""" + +# %pip install dff + +# %% +from dff.script.conditions import true +from dff.script import Context, TRANSITIONS, RESPONSE, Message +from dff.script.labels import repeat +from dff.pipeline import Pipeline +from dff.utils.turn_caching import lru_cache +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +external_data = {"counter": 0} + + +# %% +@lru_cache(maxsize=2) +def cached_response(_): + """ + This function will work exactly the same as the one from previous + tutorial with only one exception. + Only 2 results will be stored; + when the function will be executed with third arguments set, + the least recent result will be deleted. + """ + external_data["counter"] += 1 + return external_data["counter"] + + +def response(ctx: Context, _, *__, **___) -> Message: + if ctx.validation: + return Message() + return Message( + text=f"{cached_response(1)}-{cached_response(2)}-{cached_response(3)}-" + f"{cached_response(2)}-{cached_response(1)}" + ) + + +# %% +toy_script = { + "flow": {"node1": {TRANSITIONS: {repeat(): true()}, RESPONSE: response}} +} + +happy_path = ( + (Message(), Message(text="1-2-3-2-4")), + (Message(), Message(text="5-6-7-6-8")), + (Message(), Message(text="9-10-11-10-12")), +) + +pipeline = Pipeline.from_script(toy_script, start_label=("flow", "node1")) + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/user_guides.rst.txt b/_sources/user_guides.rst.txt new file mode 100644 index 0000000000..0cb1a15316 --- /dev/null +++ b/_sources/user_guides.rst.txt @@ -0,0 +1,39 @@ +User guides +----------- + +:doc:`Basic concepts <./user_guides/basic_conceptions>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In the ``basic concepts`` tutorial the basics of DFF are described, +those include but are not limited to: dialog graph creation, specifying start and fallback nodes, +setting transitions and conditions, using ``Context`` object in order to receive information +about current script execution. + +:doc:`Context guide <./user_guides/context_guide>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``context guide`` walks you through the details of working with the +``Context`` object, the backbone of the DFF API, including most of the relevant fields and methods. + +:doc:`Superset guide <./user_guides/superset_guide>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``superset guide`` tutorial highlights the usage of Superset visualization tool +for exploring the telemetry data collected from your conversational services. +We show how to plug in the telemetry collection and configure the pre-built +Superset dashboard shipped with DFF. + +:doc:`Optimization guide <./user_guides/optimization_guide>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``optimization guide`` demonstrates various tools provided by the library +that you can use to profile your conversational service, +and to locate and remove performance bottlenecks. + +.. toctree:: + :hidden: + + user_guides/basic_conceptions + user_guides/context_guide + user_guides/superset_guide + user_guides/optimization_guide diff --git a/_sources/user_guides/basic_conceptions.rst.txt b/_sources/user_guides/basic_conceptions.rst.txt new file mode 100644 index 0000000000..5344143e05 --- /dev/null +++ b/_sources/user_guides/basic_conceptions.rst.txt @@ -0,0 +1,388 @@ +Basic Concepts +-------------- + +Introduction +~~~~~~~~~~~~ + +The Dialog Flow Framework (DFF) is a modern tool for designing conversational services. + +DFF introduces a specialized Domain-Specific Language (DSL) based on standard Python functions and data structures +which makes it very easy for developers with any level of expertise to design a script for user - bot interaction. +The script comes in a form of a *dialog graph* where +each node equals a specific state of the dialog, i.e. a specific conversation turn. +The graph includes the majority of the conversation logic, and covers one or several user scenarios, all in a single Python dict. + +In this tutorial, we describe the basics of DFF API, +and walk you through the process of creating and maintaining a conversational service with the help of DFF. + + +Creating Conversational Services with DFF +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Installation +============ + +To get started with DFF, you need to install its core dependencies, which can be done using the following command: + +.. code-block:: shell + + pip3 install dff + +Defining Dialogue Goals and User Scenarios +========================================== + +To create a conversational service using Dialog Flow Framework (DFF), you start by defining the overall dialogue goal +and breaking down the dialogue into smaller scenarios based on the user intents or actions that you want to cover. +DFF's Domain-Specific Language makes it easy to break down the dialog script into `flows`, i.e. named groups of nodes +unified by a specific purpose. + +For instance, if one of the dialog options that we provide to the user is to play a game, +the bot can have a 'game' flow that contains dialog states related to this subject, while other flows +cover other topics, e.g. 'time' flow can include questions and answers related to telling the time, +'weather' to telling the weather, etc. + +Creating Dialogue Flows for User Scenarios +========================================== + +Once you have DFF installed, you can define dialog flows targeting various user scenarios +and combine them in a global script object. A flow consists of one or more nodes +that represent conversation turns. + +.. note:: + + In other words, the script object has 3 levels of nestedness: + **script - flow - node** + +Let's assume that the only user scenario of the service is the chat bot playing ping pong with the user. +The practical implementation of this is that the bot is supposed to reply 'pong' to messages that say 'ping' +and handle any other messages as exceptions. The pseudo-code for the said flow would be as follows: + +.. code-block:: text + + If user writes "Hello!": + Respond with "Hi! Let's play ping-pong!" + + If user afterwards writes "Ping" or "ping" or "Ping!" or "ping!": + Respond with "Pong!" + Repeat this behaviour + + If user writes something else: + Respond with "That was against the rules" + Go to responding with "Hi! Let's play ping-pong!" if user writes anything + +This leaves us with a single dialog flow in the dialog graph that we lay down below, with the annotations for +each part of the graph available under the code snippet. + +Example flow & script +===================== + +.. code-block:: python + :linenos: + + from dff.pipeline import Pipeline + from dff.script import TRANSITIONS, RESPONSE, Message + import dff.script.conditions as cnd + + ping_pong_script = { + "greeting_flow": { + "start_node": { + RESPONSE: Message(), # the response of the initial node is skipped + TRANSITIONS: { + ("greeting_flow", "greeting_node"): + cnd.exact_match(Message(text="/start")), + }, + }, + "greeting_node": { + RESPONSE: Message(text="Hi!"), + TRANSITIONS: { + ("ping_pong_flow", "game_start_node"): + cnd.exact_match(Message(text="Hello!")) + } + }, + "fallback_node": { + RESPONSE: fallback_response, + TRANSITIONS: { + ("greeting_flow", "greeting_node"): cnd.true(), + }, + }, + }, + "ping_pong_flow": { + "game_start_node": { + RESPONSE: Message(text="Let's play ping-pong!"), + TRANSITIONS: { + ("ping_pong_flow", "response_node"): + cnd.exact_match(Message(text="Ping!")), + }, + }, + "response_node": { + RESPONSE: Message(text="Pong!"), + TRANSITIONS: { + ("ping_pong_flow", "response_node"): + cnd.exact_match(Message(text="Ping!")), + }, + }, + }, + } + + pipeline = Pipeline.from_script( + ping_pong_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), + ) + + if __name__ == "__main__": + pipeline.run() + +The code snippet defines a script with a single dialogue flow that emulates a ping-pong game. +Likewise, if additional scenarios need to be covered, additional flow objects can be embedded into the same script object. + +* ``ping_pong_script``: The dialog **script** mentioned above is a dictionary that has one or more + dialog flows as its values. + +* ``ping_pong_flow`` is the game emulation flow; it contains linked + conversation nodes and possibly some extra data, transitions, etc. + +* A node object is an atomic part of the script. + The required fields of a node object are ``RESPONSE`` and ``TRANSITIONS``. + +* The ``RESPONSE`` field specifies the response that the dialog agent gives to the user in the current turn. + +* The ``TRANSITIONS`` field specifies the edges of the dialog graph that link the dialog states. + This is a dictionary that maps labels of other nodes to conditions, i.e. callback functions that + return `True` or `False`. These conditions determine whether respective nodes can be visited + in the next turn. + In the example script, we use standard transitions: ``exact_match`` requires the user request to + fully match the provided text, while ``true`` always allows a transition. However, passing custom + callbacks that implement arbitrary logic is also an option. + +* ``start_node`` is the initial node, which contains an empty response and only transfers user to another node + according to the first message user sends. + It transfers user to ``greeting_node`` if user writes text message exactly equal to "Hello!". + +* ``greeting_node`` is the node that will greet user and propose him a ping-pong game. + It transfers user to ``response_node`` if user writes text message exactly equal to "Ping!". + +* ``response_node`` is the node that will play ping-pong game with the user. + It transfers user to ``response_node`` if user writes text message exactly equal to "Ping!". + +* ``fallback_node`` is an "exception handling node"; user will be transferred here if + none of the transition conditions (see ``TRANSITIONS``) is satisfied. + It transfers user to ``greeting_node`` no matter what user writes. + +* ``pipeline`` is a special object that traverses the script graph based on the values of user input. + It is also capable of executing custom actions that you want to run on every turn of the conversation. + The pipeline can be initialized with a script, and with labels of two nodes: + the entrypoint of the graph, aka the 'start node', and the 'fallback node' + (if not provided it defaults to the same node as 'start node'). + +.. note:: + + See `tutorial on basic dialog structure <../tutorials/tutorials.script.core.1_basics.html>`_. + +Processing Definition +===================== + +.. note:: + + The topic of this section is explained in greater detail in the following tutorials: + + * `Pre-response processing <../tutorials/tutorials.script.core.7_pre_response_processing.html>`_ + * `Pre-transitions processing <../tutorials/tutorials.script.core.9_pre_transitions_processing.html>`_ + * `Pipeline processors <../tutorials/tutorials.pipeline.2_pre_and_post_processors.html>`_ + +Processing user requests and extracting additional parameters is a crucial part of building a conversational bot. +DFF allows you to define how user requests will be processed to extract additional parameters. +This is done by passing callbacks to a special ``PROCESSING`` fields in a Node dict. + +* User input can be altered with ``PRE_RESPONSE_PROCESSING`` and will happen **before** response generation. See `tutorial on pre-response processing`_. +* Node response can be modified with ``PRE_TRANSITIONS_PROCESSING`` and will happen **after** response generation but **before** transition to the next node. See `tutorial on pre-transition processing`_. + +Depending on the requirements of your bot and the dialog goal, you may need to interact with external databases or APIs to retrieve data. +For instance, if a user wants to know a schedule, you may need to access a database and extract parameters such as date and location. + +.. code-block:: python + + import requests + ... + def use_api_processing(ctx: Context, _: Pipeline, *args, **kwargs) -> Context: + # save to the context field for custom info + ctx.misc["api_call_results"] = requests.get("http://schedule.api/day1").json() + return ctx + ... + node = { + RESPONSE: ... + TRANSITIONS: ... + PRE_TRANSITIONS_PROCESSING: {"use_api": use_api_processing} + } + +.. note:: + + This function uses ``Context`` to store the result of a request for other functions to use. + Context is a data structure that keeps all the information about a specific conversation. + + To learn more about ``Context`` see the `relevant guide <../user_guides/context_guide.html>`__. + +If you retrieve data from the database or API, it's important to validate it to ensure it meets expectations. + +Since DFF extensively leverages pydantic, you can resort to the validation tools of this feature-rich library. +For instance, given that each processing routine is a callback, you can use tools like pydantic's `validate_call` +to ensure that the returned values match the function signature. +Error handling logic can also be incorporated into these callbacks. + +Generating a bot Response +========================= + +Generating a bot response involves creating a text or multimedia response that will be delivered to the user. +Response is defined in the ``RESPONSE`` section of each node and should be either a ``Message`` object, +that can contain text, images, audios, attachments, etc., or a callback that returns a ``Message``. +The latter allows you to customize the response based on the specific scenario and user input. + +.. code-block:: python + + def sample_response(ctx: Context, _: Pipeline, *args, **kwargs) -> Message: + if ctx.misc["user"] == 'vegan': + return Message(text="Here is a list of vegan cafes.") + return Message(text="Here is a list of cafes.") + +Handling Fallbacks +================== + +In DFF, you should provide handling for situations where the user makes requests +that do not trigger any of the transitions specified in the script graph. +To cover that use case, DFF requires you to define a fallback node that the agent will move to +when no adequate transition has been found. + +Like other nodes, the fallback node can either use a message or a callback to produce a response +which gives you a lot of freedom in creating situationally appropriate error messages. +Create friendly error messages and, if possible, suggest alternative options. +This ensures a smoother user experience even when the bot encounters unexpected inputs. + +.. code-block:: python + + def fallback_response(ctx: Context, _: Pipeline, *args, **kwargs) -> Message: + """ + Generate a special fallback response depending on the situation. + """ + if ctx.last_request is not None: + if ctx.last_request.text != "/start" and ctx.last_label is None: + # an empty last_label indicates start_node + return Message(text="You should've started the dialog with '/start'") + else: + return Message( + text=f"That was against the rules!\n" + f"You should've written 'Ping', not '{ctx.last_request.text}'!" + ) + else: + raise RuntimeError("Error occurred: last request is None!") + +Testing and Debugging +~~~~~~~~~~~~~~~~~~~~~ + +Periodically testing the conversational service is crucial to ensure it works correctly. +You should also be prepared to debug the code and dialogue logic if problems are discovered during testing. +Thorough testing helps identify and resolve any potential problems in the conversation flow. + +The basic testing procedure offered by DFF is end-to-end testing of the pipeline and the script +which ensures that the pipeline yields correct responses for any given input. +It requires a sequence of user request - bot response pairs that form the happy path of your +conversational service. + +.. code-block:: python + + happy_path = ( + (Message(text="/start"), Message(text="Hi!")), + (Message(text="Hello!"), Message(text="Let's play ping-pong!")), + (Message(text="Ping!"), Message(text="Pong!")) + ) + +A special function is then used to ascertain complete identity of the messages taken from +the happy path and the pipeline. The function will play out a dialog with the pipeline acting as a user while checking returned messages. + +.. code-block:: python + + from dff.utils.testing.common import check_happy_path + + check_happy_path(pipeline, happy_path) + +Monitoring and Analytics +~~~~~~~~~~~~~~~~~~~~~~~~ + +Setting up bot performance monitoring and usage analytics is essential to monitor its operation and identify potential issues. +Monitoring helps you understand how users are interacting with the bot and whether any improvements are needed. +Analytics data can provide valuable insights for refining the bot's behavior and responses. + +DFF provides a `statistics` module as an out-of-the-box solution for collecting arbitrary statistical metrics +from your service. Setting up the data collection is as easy as instantiating the relevant class in the same +context with the pipeline. +What's more, the data you obtain can be visualized right away using Apache Superset as a charting engine. + +.. note:: + + More information is available in the respective `guide <../user_guides/superset_guide.html>`__. + +Iterative Improvement +~~~~~~~~~~~~~~~~~~~~~ + +To continually enhance your chat-bot's performance, monitor user feedback and analyze data on bot usage. +For instance, the statistics or the charts may reveal that some flow is visited by users more frequently or +less frequently than planned. This would mean that adjustments to the transition structure +of the graph need to be made. + +Gradually improve the transition logic and response content based on the data received. +This iterative approach ensures that the bot becomes more effective over time. + +Data Protection +~~~~~~~~~~~~~~~ + +Data protection is a critical consideration in bot development, especially when handling sensitive information. + +.. note:: + + The DFF framework helps ensure the safety of your application by storing the history and other user data present + in the ``Context`` object under unique ids and abstracting the storage logic away from the user interface. + As a result, it offers the basic level of data protection making it impossible to gain unlawful access to personal information. + +Documentation +~~~~~~~~~~~~~ + +Creating documentation is essential for teamwork and future bot maintenance. +Document how different parts of the script work and how the bot covers the expected interaction scenarios. +It is especially important to document the purpose and functionality of callback functions and pipeline services +that you may have in your project, using Python docstrings. + +.. code-block:: python + + def fav_kitchen_response(ctx: Context, _: Pipeline, *args, **kwargs) -> Message: + """ + This function returns a user-targeted response depending on the value + of the 'kitchen preference' slot. + """ + ... + +This documentation serves as a reference for developers involved in the project. + +Scaling +~~~~~~~ + +If your bot becomes popular and requires scaling, consider scalability during development. +Scalability ensures that the bot can handle a growing user base without performance issues. +While having only one application instance will suffice in most cases, there are many ways +how you can adapt the application to a high load environment. + +* With the database connection support that DFF offers out of the box, DFF projects can be easily scaled through sharing the same database between multiple application instances. However, using an external database is required due to the fact that this is the only kind of storage that can be efficiently shared between processes. +* Likewise, using multiple database instances to ensure the availability of data is also an option. +* The structure of the `Context` object makes it easy to vertically partition the data storing different subsets of data across multiple database instances. + +Further reading +~~~~~~~~~~~~~~~ + +* `Tutorial on basic dialog structure <../tutorials/tutorials.script.core.1_basics.html>`_ +* `Tutorial on transitions <../tutorials/tutorials.script.core.4_transitions.html>`_ +* `Tutorial on conditions <../tutorials/tutorials.script.core.2_conditions.html>`_ +* `Tutorial on response functions <../tutorials/tutorials.script.core.3_responses.html>`_ +* `Tutorial on pre-response processing <../tutorials/tutorials.script.core.7_pre_response_processing.html>`_ +* `Tutorial on pre-transition processing <../tutorials/tutorials.script.core.9_pre_transitions_processing.html>`_ +* `Guide on Context <../user_guides/context_guide.html>`_ +* `Tutorial on global transitions <../tutorials/tutorials.script.core.5_global_transitions.html>`_ +* `Tutorial on context serialization <../tutorials/tutorials.script.core.6_context_serialization.html>`_ +* `Tutorial on script MISC <../tutorials/tutorials.script.core.8_misc.html>`_ \ No newline at end of file diff --git a/_sources/user_guides/context_guide.rst.txt b/_sources/user_guides/context_guide.rst.txt new file mode 100644 index 0000000000..0583aecc1b --- /dev/null +++ b/_sources/user_guides/context_guide.rst.txt @@ -0,0 +1,250 @@ +Context guide +-------------- + +Introduction +~~~~~~~~~~~~ + +The ``Context`` class is a backbone component of the DFF API. +Like the name suggests, this data structure is used to store information +about the current state, or context, of a particular conversation. +Each individual user has their own ``Context`` instance and can be identified by it. + +``Context`` is used to keep track of the user's requests, bot's replies, +user-related and request-related annotations, and any other information +that is relevant to the conversation with the user. + +.. note:: + + Since most callback functions used in DFF script and DFF pipeline (see the `basic guide <./basic_conceptions.rst>`__) + need to either read or update the current dialog state, + the framework-level convention is that all functions of this kind + use ``Context`` as their first parameter. This dependency is being + injected by the pipeline during its run. + Thus, understanding the ``Context`` class is essential for developing custom conversation logic + which is mostly made up by the said functions. + +As a callback parameter, ``Context`` provides a convenient interface for working with data, +allowing developers to easily add, retrieve, +and manipulate data as the conversation progresses. + +Let's consider some of the built-in callback instances to see how the context can be leveraged: + +.. code-block:: python + :linenos: + + pattern = re.compile("[a-zA-Z]+") + + def regexp_condition_handler( + ctx: Context, pipeline: Pipeline, *args, **kwargs + ) -> bool: + # retrieve the current request + request = ctx.last_request + if request.text is None: + return False + return bool(pattern.search(request.text)) + +The code above is a condition function (see the `basic guide <./basic_conceptions.rst>`__) +that belongs to the ``TRANSITIONS`` section of the script and returns `True` or `False` +depending on whether the current user request matches the given pattern. +As can be seen from the code block, the current +request (``last_request``) can be easily retrieved as one of the attributes of the ``Context`` object. +Likewise, the ``last_response`` (bot's current reply) or the ``last_label`` +(the name of the currently visited node) attributes can be used in the same manner. + +Another common use case is leveraging the ``misc`` field (see below for a detailed description): +pipeline functions or ``PROCESSING`` callbacks can write arbitrary values to the misc field, +making those available for other context-dependent functions. + +.. code-block:: python + :linenos: + + import urllib.request + import urllib.error + + def ping_example_com( + ctx: Context, *_, **__ + ): + try: + with urllib.request.urlopen("https://example.com/") as webpage: + web_content = webpage.read().decode( + webpage.headers.get_content_charset() + ) + result = "Example Domain" in web_content + except urllib.error.URLError: + result = False + ctx.misc["can_ping_example_com"] = result + +.. + todo: link to the user defined functions tutorial + + .. note:: + For more information about user-defined functions see the `user functions guide <./user_functions.rst>`__. + +API +~~~ + +This sections describes the API of the ``Context`` class. + +For more information, such as method signatures, see +`API reference <../apiref/dff.script.core.context.html#dff.script.core.context.Context>`__. + +Attributes +========== + +* **id**: This attribute represents the unique context identifier. By default, it is randomly generated using uuid4. + In most cases, this attribute will be used to identify a user. + +* **labels**: The labels attribute stores the history of all passed labels within the conversation. + It maps turn IDs to labels. The collection is ordered, so getting the last item of the mapping + always shows the last visited node. + + Note that `labels` only stores the nodes that were transitioned to + so `start_label` will not be in this attribute. + +* **requests**: The requests attribute maintains the history of all received requests by the agent. + It also maps turn IDs to requests. Like labels, it stores the requests in-order. + +* **responses**: This attribute keeps a record of all agent responses, mapping turn IDs to responses. + Stores the responses in-order. + +* **misc**: The misc attribute is a dictionary for storing custom data. This field is not used by any of the + built-in DFF classes or functions, so the values that you write there are guaranteed to persist + throughout the lifetime of the ``Context`` object. + +* **framework_states**: This attribute is used for storing addon or pipeline states. + Each turn, the DFF pipeline records the intermediary states of its components into this field, + and clears it at the end of the turn. For this reason, developers are discouraged from storing + their own data in this field. + +Methods +======= + +The methods of the ``Context`` class can be divided into two categories: + +* Public methods that get called manually in custom callbacks and in functions that depend on the context. +* Methods that are not designed for manual calls and get called automatically during pipeline runs, + i.e. quasi-private methods. You may still need them when developing extensions or heavily modifying DFF. + +Public methods +^^^^^^^^^^^^^^ + +* **last_request**: Return the last request of the context, or `None` if the ``requests`` field is empty. + + Note that a request is added right after the context is created/retrieved from db, + so an empty ``requests`` field usually indicates an issue with the messenger interface. + +* **last_response**: Return the last response of the context, or `None` if the ``responses`` field is empty. + + Responses are added at the end of each turn, so an empty ``response`` field is something you should definitely consider. + +* **last_label**: Return the last label of the context, or `None` if the ``labels`` field is empty. + Last label is always the name of the current node but not vice versa: + + Since ``start_label`` is not added to the ``labels`` field, + empty ``labels`` usually indicates that the current node is the `start_node`. + After a transition is made from the `start_node` + the label of that transition is added to the field. + +* **clear**: Clear all items from context fields, optionally keeping the data from `hold_last_n_indices` turns. + You can specify which fields to clear using the `field_names` parameter. This method is designed for cases + when contexts are shared over high latency networks. + +.. note:: + + See the `preprocessing tutorial <../tutorials/tutorials.script.core.7_pre_response_processing.py>`__. + +Private methods +^^^^^^^^^^^^^^^ + +* **set_last_response, set_last_request**: These methods allow you to set the last response or request for the current context. + This functionality can prove useful if you want to create a middleware component that overrides the pipeline functionality. + +* **add_request**: Add a request to the context. + It updates the `requests` dictionary. This method is called by the `Pipeline` component + before any of the `pipeline services <../tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py>`__ are executed, + including `Actor <../apiref/dff.pipeline.pipeline.actor.html>`__. + +* **add_response**: Add a response to the context. + It updates the `responses` dictionary. This function is run by the `Actor <../apiref/dff.pipeline.pipeline.actor.html>`__ pipeline component at the end of the turn, after it has run + the `PRE_RESPONSE_PROCESSING <../tutorials/tutorials.script.core.7_pre_response_processing.py>`__ functions. + + To be more precise, this method is called between the ``CREATE_RESPONSE`` and ``FINISH_TURN`` stages. + For more information about stages, see `ActorStages <../apiref/dff.script.core.types.html#dff.script.core.types.ActorStage>`__. + +* **add_label**: Add a label to the context. + It updates the `labels` field. This method is called by the `Actor <../apiref/dff.pipeline.pipeline.actor.html>`_ component when transition conditions + have been resolved, and when `PRE_TRANSITIONS_PROCESSING <../tutorials/tutorials.script.core.9_pre_transitions_processing.py>`__ callbacks have been run. + + To be more precise, this method is called between the ``GET_NEXT_NODE`` and ``REWRITE_NEXT_NODE`` stages. + For more information about stages, see `ActorStages <../apiref/dff.script.core.types.html#dff.script.core.types.ActorStage>`__. + +* **current_node**: Return the current node of the context. This is particularly useful for tracking the node during the conversation flow. + This method only returns a node inside ``PROCESSING`` callbacks yielding ``None`` in other contexts. + +Context storages +~~~~~~~~~~~~~~~~ + +Since context instances contain all the information, relevant for a particular user, there needs to be a way +to persistently store that information and to make it accessible in different user sessions. +This functionality is implemented by the ``context storages`` module that provides +the uniform ``DBContextStorage`` interface as well as child classes thereof that integrate +various database types (see the +`api reference <../apiref/dff.context_storages.database.html#dff.context_storages.database.DBContextStorage>`_). + +The supported storage options are as follows: + +* `JSON `_ +* `pickle `_ +* `shelve `_ +* `SQLite `_ +* `PostgreSQL `_ +* `MySQL `_ +* `MongoDB `_ +* `Redis `_ +* `Yandex DataBase `_ + +``DBContextStorage`` instances can be uniformly constructed using the ``context_storage_factory`` function. +The function's only parameter is a connection string that specifies both the database type +and the connection parameters, for example, *mongodb://admin:pass@localhost:27016/admin*. +(`see the reference <../apiref/dff.context_storages.database.html#dff.context_storages.database.context_storage_factory>`_) + +.. note:: + To learn how to use ``context_storage_factory`` in your pipeline, see our `Context Storage Tutorials <../tutorials/index_context_storages.html>`__. + +The GitHub-based distribution of DFF includes Docker images for each of the supported database types. +Therefore, the easiest way to deploy your service together with a database is to clone the GitHub +distribution and to take advantage of the packaged +`docker-compose file `_. + +.. code-block:: shell + :linenos: + + git clone https://github.com/deeppavlov/dialog_flow_framework.git + cd dialog_flow_framework + # assuming we need to deploy mongodb + docker-compose up mongo + +The images can be configured using the docker-compose file or the +`environment file `_, +also available in the distribution. Consult these files for more options. + +.. warning:: + + The data transmission protocols require the data to be JSON-serializable. DFF tackles this problem + through utilization of ``pydantic`` as described in the next section. + +Serialization +~~~~~~~~~~~~~ + +The fact that the ``Context`` class is a Pydantic model makes it easily convertible to other data formats, +such as JSON. For instance, as a developer, you don't need to implement instructions on how datetime fields +need to be marshalled, since this functionality is provided by Pydantic out of the box. +As a result, working with web interfaces and databases that require the transmitted data to be serialized +becomes as easy as calling the `model_dump_json` method: + +.. code-block:: python + + context = Context() + serialized_context = context.model_dump_json() + +Knowing that, you can easily extend DFF to work with storages like Memcache or web APIs of your liking. \ No newline at end of file diff --git a/_sources/user_guides/optimization_guide.rst.txt b/_sources/user_guides/optimization_guide.rst.txt new file mode 100644 index 0000000000..198e704022 --- /dev/null +++ b/_sources/user_guides/optimization_guide.rst.txt @@ -0,0 +1,107 @@ +Optimization Guide +------------------ + +Introduction +~~~~~~~~~~~~ + +When optimizing a dialog service to provide the best possible user experience, +it's essential to identify and address performance issues. +Similar to any complex system, a dialog service can have performance bottlenecks at various levels. +These bottlenecks can occur during I/O operations like receiving and sending messages, +as well as when synchronizing service states with a database. +As the number of callbacks in the script and pipeline increases, +the performance of DFF classes can degrade leading to longer response time. + +As a result, it becomes necessary to locate the part of the pipeline that is causing issues, so that +further optimization steps can be taken. DFF provides several tools that address the need for +profiling individual system components. This guide will walk you through the process +of using these tools in practice and optimizing the profiled application. + +Profiling with Locust testing +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`Locust `__ is a tool for load testing web applications that +simultaneously spawns several user agents that execute a pre-determined behavior +against the target application. Assuming that your pipeline is integrated into a web +server application, like Flask or FastAPI, that is not strongly impacted by the load, +the load testing reveals how well your pipeline would scale to a highly loaded environment. +Using this approach, you can also measure the scalability of each component in your pipeline, +if you take advantage of the Opentelemetry package bundled with the library (`stats` extra required) +as described below. + +Since Locust testing can only target web apps, +this approach only applies if you integrate your dialog pipeline into a web application. +The `FastAPI integration tutorial <../tutorials/tutorials.messengers.web_api_interface.1_fastapi.py>`_ +shows the most straightforward way to do this. +At this stage, you will also need to instrument the pipeline components that you want to additionally profile +using `extractor functions`. Put simply, you are decorating the components of the pipeline +with functions that can report their performance, e.g. their execution time or the CPU load. + +.. note:: + + You can get more info on how instrumentation is done and statistics are collected + in the `stats tutorial <../tutorials/tutorials.stats.1_extractor_functions.py>`__. + +When you are done setting up the instrumentation, you can launch the web server to accept connections from locust. + +The final step is to run a Locust file which will result in artificial load traffic being generated and sent to your server. +A Locust file is a script that implements the behavior of artificial users, +i.e. the requests to the server that will be made during testing. + +.. note:: + + An example Locust script along with instructions on how to run it can be found in the + `load testing tutorial <../tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.py>`_. + The simplest way, however, is to pass a locust file to the Python interpreter. + +Once Locust is running, you can access its GUI, where you can set the number of users to emulate. +After configuring this parameter, the active phase of testing will begin, +and the results will become accessible on an interactive dashboard. +These reported values include timing data, such as the average response time of your service, +allowing you to assess the performance's reasonableness and impact on user experience. + +The data provided by extractor functions will be available in the Clickhouse database; +you can view it using the Superset dashboard (see `instructions <./superset_guide.html>`__) +or analyze it with your own queries using the Clickhouse client. + +Profiling context storages +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Benchmarking the performance of context storage is crucial to understanding +how different storage methods impact your dialog service's efficiency. +This process involves running tests to measure the speed and reliability of various context storage solutions. +Given the exact configuration of your system, one or the other database type may be performing more efficiently, +so you may prefer to change your database depending on the testing results. + +.. note:: + The exact instructions of how the testing can be carried out are available in the + `DB benchmarking tutorial <../tutorials/tutorials.context_storages.8_db_benchmarking.py>`__. + +Optimization techniques +~~~~~~~~~~~~~~~~~~~~~~~ + +Aside from choosing an appropriate database type, there exists a number of other recommendations +that may help you improve the efficiency of your service. + +* Firstly, follow the DRY principle not only with regard to your code, but also with regard to + computational operations. In other words, you have to make sure that your callback functions work only once + during a dialog turn and only when needed. E.g. you can take note of the `conditions` api available as a part + of the `Pipeline` module: while normally a pipeline service runs every turn, you can restrict it + to only run on turns when a particular condition is satisfied, greatly reducing + the number of performed actions (see the + `Groups and Conditions tutorial <../tutorials/tutorials.pipeline.4_groups_and_conditions_full.py>`__). + +* Using caching for resource-consuming callbacks and actions may also prove to be a helpful strategy. + In this manner, you can improve the computational efficiency of your pipeline, + while making very few changes to the code itself. DFF includes a caching mechanism + for response functions. However, the simplicity + of the DFF API makes it easy to integrate any custom caching solutions that you may come up with. + See the `Cache tutorial <../tutorials/tutorials.utils.1_cache.py>`__. + +* Finally, be mindful about the use of computationally expensive algorithms, like NLU classifiers + or LLM-based generative networks, since those require a great deal of time and resources + to produce an answer. In case you need to use one, take full advantage of caching along with + other means to relieve the computational load imposed by neural networks such as message queueing. + +.. + todo: add a link to a user guide about using message queueing. diff --git a/_sources/user_guides/superset_guide.rst.txt b/_sources/user_guides/superset_guide.rst.txt new file mode 100644 index 0000000000..d3b4a29a14 --- /dev/null +++ b/_sources/user_guides/superset_guide.rst.txt @@ -0,0 +1,191 @@ +Superset guide +--------------------- + +Description +~~~~~~~~~~~ + +| The Dialog Flow Stats module can be used to obtain and visualize usage statistics for your service. +| The module relies on several open source solutions that allow for data persistence and visualization + +* `Clickhouse `_ serves as an OLAP storage for data. +* Batching and preprocessing data is based on `OpenTelemetry protocol `_ and the `OpenTelemetry collector `_. +* Interactive visualization is powered by `Apache Superset `_. + +All the mentioned services are shipped as Docker containers, including a pre-built Superset image that ensures API compatibility. + +Collection procedure +~~~~~~~~~~~~~~~~~~~~ + +**Installation** + +.. code-block:: shell + :linenos: + + # clone the original repository to access the docker-compose file + git clone https://github.com/deeppavlov/dialog_flow_framework.git + # install with the stats extra + cd dialog_flow_framework + pip install .[stats] + +**Launching services** + +.. code-block:: shell + :linenos: + + # clone the original repository to access the docker-compose file + git clone https://github.com/deeppavlov/dialog_flow_framework.git + # launch the required services + cd dialog_flow_framework + docker-compose --profile stats up + +**Collecting data** + +Collecting data is done by means of instrumenting your conversational service before you run it. +DFF tutorials (`1 <../tutorials/tutorials.stats.1_extractor_functions.py>`_, `2 <../tutorials/tutorials.stats.2_pipeline_integration.py>`_) +showcase all the steps needed to achieve that. We will run +a special script in order to obtain richly-annotated sample data points to visualize. + +.. code-block:: shell + + python utils/stats/sample_data_provider.py + +Displaying the data +~~~~~~~~~~~~~~~~~~~ + +In order to display the Superset dashboard, you should update the default configuration with the credentials of your database. +The configuration can be optionally saved as a zip archive for inspection / debug. + +You can set most of the configuration options using a YAML file. +The default example file can be found in the `tutorials/stats` directory: + +.. code-block:: yaml + :linenos: + + # tutorials/stats/example_config.yaml + db: + driver: clickhousedb+connect + name: test + user: username + host: clickhouse + port: 8123 + table: otel_logs + +The file can then be used to parametrize the configuration script. + +.. code-block:: shell + + dff.stats tutorials/stats/example_config.yaml -P superset -dP pass -U superset --outfile=config_artifact.zip + +.. warning:: + + Here we passed passwords via CLI, which is not recommended. For enhanced security, call the command above omitting the passwords (`dff.stats -P -dP -U superset ...`) and you will be prompted to enter them interactively. + +Running the command will automatically import the dashboard as well as the data sources +into the running superset server. If you are using a version of Superset different from the one +shipped with DFF, make sure that your access rights are sufficient to edit the workspace. + +Using Superset +~~~~~~~~~~~~~~ + +| In order to view the imported dashboard, log into `Superset `_ using your username and password (which are both `superset` by default and can be configured via `.env_file`). +| The dashboard will then be available in the **Dashboards** section of the Superset UI under the name of **DFF stats**. +| The dashboard is split into four sections based on the types of charts and on the chart topic. + +* The **Overview** section summarizes the information about user interaction with your script. And displays a weighted graph of transitions from one node to another. The data is also shown in the form of a table for better introspection capabilities. + +.. figure:: ../_static/images/overview.png + + Overview plots. + +* The data displayed in the **Node stats** section reports, how frequent each of the nodes in your script was visited by users. The information is aggregated in several forms for better interpretability. + +.. figure:: ../_static/images/general_stats.png + + Node stats plots. + +* General service load data aggregated over time can be found in the **Service stats** section. + +.. figure:: ../_static/images/service_stats.png + + Service stats plots. + +* The **Annotations** section contains example charts that show how annotations from supplemental pipeline services can be viewed and analyzed. + +.. figure:: ../_static/images/annotations.png + + Plots for pipeline-produced dialog annotations. + +On some occasions, Superset can show warnings about the database connection being faulty. +In that case, you can navigate to the `Database Connections` section through the `Settings` menu and edit the `dff_database` instance updating the credentials. + +.. figure:: ../_static/images/databases.png + + Locate the database settings in the right corner of the screen. + +Customizing the dashboard +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The most notable advantage of using Superset as a visualization tool is that it provides +an easy and intuitive way to create your own charts and to customize the dashboard. + +**Datasets** + +If you aim to create your own chart, Superset will prompt you to select a dataset to draw data from. +The current configuration provides three datasets `dff-node-stats`, `dff-stats`, and `dff-final-nodes`. +However, in most cases, you would use `dff-stats` or `dff-node-stats`. The former contains all data points, +while the latter only includes the logs produced by `get_current_label` extractor +(`see the API reference <../apiref/dff.stats.default_extractors.html#dff.stats.default_extractors.get_current_label>`_). +`dff-final-nodes` contains the same information as the said datasources, +but only aggregates the labels of nodes visited at the end of dialog graph traversal, +i.e. nodes that terminate the dialog. + +`dff-nodes-stats` uses the following variables to store the data: + +* The `context_id` field can be used to distinguish dialog contexts from each other and serves as a user identifier. +* `request_id` is the number of the dialog turn at which the data record was emitted. The data points can be aggregated over this field, showing the distribution of a variable over the dialog history. +* The `data_key` field contains the name of the extractor function that emitted the given record. Since in most cases you will only need the output of one extractor, you can filter out all the other records using filters. +* Finally, the `data` field is a set of JSON-encoded key-value pairs. The keys and values differ depending on the extractor function that emitted the data (you can essentially save arbitrary data under arbitrary keys), which makes filtering the data rows by their `data_key` all the more important. The JSON format implies that individual values need to be extracted using the Superset SQL functions (see below). + + +.. code-block:: + + JSON_VALUE(data, '$.key') + JSON_VALUE(data, '$.outer_key.nested_key') + +**Chart creation** + +.. note:: + + Chart creation is described in detail in the official Superset documentation. + We suggest that you consult it in addition to this section: + `link `_. + +Creating your own chart is as easy as navigating to the `Charts` section of the Superset app +and pressing the `Create` button. + +Initially, you will be prompted for the dataset that you want to use as well as for the chart type. +The Superset GUI provides comprehensive previews of each chart type making it very easy +to find the exact kind that you need. + +At the next step, you will be redirected to the chart creation interface. +Depending on the kind of chat that you have chosen previously, menus will be available +to choose a column for the x-axis and, optionally, a column for the y-axis. As mentioned above, +a separate menu for data filters will also be available. If you need to use the data +from the `data` column, you will need to find the `custom_sql` option when adding the column +and put in the extraction expression, as shown in the examples above. + +**Exporting the chart configuration** + +The configuration of a Superset dashboard can be easily exported and then reused +in other Superset instances. This can be done using the GUI: navigate to the +`Dashboards` section of the Superset application, locate your dashboard (named `DFF statistics` per default). +Then press the `export` button on the right and save the zip file to any convenient location. + +**Importing existing configuration files** + +If you need to restore your dashboard or update the configuration, you can import a configuration archive +that has been saved in the manner described below. + +Log in to Superset, open the `Dashboards` tab and press the import button on the right of the screen. +You will be prompted for the database password. If the database credentials match, +the updated dashboard will appear in the dashboard list. \ No newline at end of file diff --git a/_static/auto-render.min.js b/_static/auto-render.min.js new file mode 100644 index 0000000000..c169ec639f --- /dev/null +++ b/_static/auto-render.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},r={};function n(e){var a=r[e];if(void 0!==a)return a.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var a={};return function(){n.d(a,{default:function(){return s}});var e=n(771),t=n.n(e),r=function(e,t,r){for(var n=r,a=0,i=e.length;n0&&(a.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));var l=t.findIndex((function(t){return e.startsWith(t.left)}));if(-1===(n=r(t[l].right,e,t[l].left.length)))break;var d=e.slice(0,n+t[l].right.length),s=i.test(d)?d:e.slice(t[l].left.length,n);a.push({type:"math",data:s,rawData:d,display:t[l].display}),e=e.slice(n+t[l].right.length)}return""!==e&&a.push({type:"text",data:e}),a},l=function(e,r){var n=o(e,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;for(var a=document.createDocumentFragment(),i=0;i tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/binder_badge_logo.svg b/_static/binder_badge_logo.svg new file mode 100644 index 0000000000..327f6b639a --- /dev/null +++ b/_static/binder_badge_logo.svg @@ -0,0 +1 @@ + launchlaunchbinderbinder \ No newline at end of file diff --git a/_static/broken_example.png b/_static/broken_example.png new file mode 100644 index 0000000000000000000000000000000000000000..4fea24e7df4781c2c32c8d7995511ac89e953145 GIT binary patch literal 21404 zcmaHTWmKEb({>2%?jE#QaVRdqp+KR9;KkkDwKxQKD^i>mcWI%x7Y&k9+}-8j_dn93t*7AV|HwhohmqKD$2joW8ywxydML zqrEnNH1nv}&*;vI5H|n-lkmR>0w6n=?Db1>cR5{mEhkHNug|U)052~uE*nQXH?z;q z7FUG-5?6Je82K9+|@BAhth9CST zcHAcNv&0`(9}ayi)2wQc@&7-~jsgpX(%s?2qY+ic?=2k&^fkcbJ3TknEkKtDe&=cQ z0sPtmK2NQh;D#Y$&7V2Y^6sv#*~LahMU`V>iICenIfqO4taPuTpf)ZngI?P{O4u`s z0y&n$M&@6Xr%?l)|9V(8`Q9z9qwelr@uMg5WpxhDtsm=(Xg5w7AEldPGDW?Jy-Nb0 zrg(@%fC03Cai>T62zfwNHn*;$2*qH0d^@__p>5R6EErAj5#AlsOa^i9D#F^?Qw~A{ zkmHTp_)*CJu0q2SL>9z3HHd#g3=t2xx`O)jf=n3THGrF2mjgt7WbgLWh!%!QQ{byY zs4-Exf&)U3dmE4+9sqvyqd4YET>w?7NpYH8tM78bHVA886=S{#+o|Ww%jnaeJ@67jlAh$qiTgZ(5vFUE9+*NvohRuUx<&0xEfDR#2V*@-%Wn z)GmNqmvj+T7b9*$-=#YUnShrTMGRS0HVbYs?jMgB%&9?j>ayO9JjK_0E9k?3{bd)Z z0Ose$YR}|tK}DQI^=2gPIWVn9lT1ja%we!|k_o=aQ3*@{KeR;j{RT)gE=%I8)Y(Ll zn1I1yKmR%TA-+XndVBuRBJ~L-(p!aa%)dz2>sNJ_9Zh_TGlP=t6~DyWyE~uXqKVJh z8x@5Trj%SSus`AIm;dM=Jbc{+kuIYfUdS$LV) zL$}h_C6R>jKDq_3Oy}rju2_$^Hv_H}vbIElV|)=~IMVZb=f2&6kSHWF{AnESfkhl} zxFDP2TJrh}ed?Tmc7rGdnN~XUB>Y#o%l;^W{9W_7##akfa=UUNQ!H-KSM%17Erj(Y z+nd){QocQTN}~%#KzWoTlPqrvVT?>WJfLpy0@fFbYQp*8e#J%r14uczC5wW}BwKo+ zb6{uC9+xUyaVl6R>G&kiRY(6vSpXExm-SR8n0SrT@}VTsL_z+)AMImlxtbZTIB+<7 z2`TV&%WCF2;G9|qzhSEVfjL#$JK|3QDT007b0O@~A0r40M6k?g`tAEaJ>o4sF)xO#dhJal5wZh>KXSC6%3tABw}3V^TFR*3(+WA-y(f$M^I zQ^MwR8khCvwTmO<6&PQQLoob}&ksyzvv^@+b+}u(|2P!t1BRyQ&Qtgm-T$re$4)=q zpoUBOR85SY4>i^LC+Cgw%8Ok@1>4SoFu9Fr^eqi93KYRjk zlO`94lDE45fCTD6g2-CSb|NK=AR3{rU7C5_IDBc075!s3ekC7=AP=raQ9bLBP2#>Y z_930Wp^fA1)G0I{RAjV!Gj4k>5emEeRlB#1fwV3t_9kTXCH`iwEg`O9qs>HNMN&LDoyv=@F%`7Duax+Tz zSt}uKSj@$X>yB%z9`9`XzvECt0mYb9_|r0(2Hlf@6O>j7^}vM5V&#Nd){c88-95qd z1b|cVK^Nh`kC(^hXMy)upb_AW{0!O3`GI9q!R+_{*{3SmrQj`pOz{(E@8ZhyGs*** zeW zUe~&?JRObhW}KLdBaD?;#X_M|Z_(5`0rV8R4$`!&^-Ztq6Vb<3QebD2sDcz?*8H~* zBz#2C6)e-zQ$>p+ps%Xl^X@DwBWHy#xhu~BA#PBpFhEN)sQZC3{*mf!(aluq)eS%2T#_Ptl_7Di}$w74yFK6GA&WWB)C|cQaURdtej<9uz zl=A2(5L{#`s4*lKE4#73hY~BE*F!AzNuJcYFfTGOI#ong(ChHBHVzzg!KA{bH6bZW z^sKi*RvHoVfiHcEzgn9@jt#Wr|2XFt=e6`y+46I@4}K<@;uVw5_hy z(2ShmC{M&oAN$?9lp5XP_Mr~HY9~3%Z&@ST2>=vwdn!1mdNYL5>Ipi(797HR`0&sTA@UBdE z&se)5OPto!iN9Zk)N;7VYo`ql^}FH9*9pxVx<MySO1Lixsv z1k~rj`*5BaVer>{J-zo$*>7Zl6h@{lrv5T zCySy2X>XL%^)lmZgD-Z*Y8@0UgOWHb-<@_!jkS5 z*sJo#TWOY(IoJ&U80-4CQwwd>T(3x$uTW{44)V@y7A^QY;}iKZ5{Q#X8?K-(ORDfw z?VH!N@m2Px1-lhUWqT5GK8k1TMTC10zhT#dmOZJDac99>I#^h3-++}+h%>5w_p5^S zINc*Cc4hV*>yk!l9;dSHC5nWpvo13viP21cJHa^E049OFvo9xoL;4cb`DG)#LvKXj zq-fX&`@bZb8iVT-N?Y3tB@ylD@jAk=lGLCh;E|`7_Wb9LNbQdf7SjZtq*IjVl!C!& zB6)@?J2S9`(v<=UL?$P}H2VVMdMjyF2yOTC{x+5Wj=pwaE#VvM=(KkWIC5Lw@5?Ab z8!J;SGOQ;!U8Zrvq zx?yHZtn#RxAnF(_oP>Wg2~eRdO^_>DB2vl-eRY!7)|rhqgLE4moK6F6Id}Nl81v+Y zxBtRc`gjN5JK|795OAUMuq3Azm~{DtF$WWguTP?da_ufm=iL+>Pbr8%$W zzP0QWFKrw*h8x+!&~IZVmCoz7KoM^6r%0qQXJBllJ%w>NT9JaE`DVE(3eP05^WzTW znk#Uvs4UL2ep`C!*39p}Oz&486Opk3$!y&@SM^?KCqT{mAfD^b3+CwoT}ExShhq!{ z;4p&gkwb|?I$ix`Oc45U`4H!gqvll^@9*@0Jmjd`WILaQaC3vebD*>M!2M65fB?B- z-UqstW?VIvPxZShYyu-Rw&IUttoKMBB=B~OoNSBM=FkQVe^9L+92Fna-ePE zC2o$M{nOK!b$HbS(~1SG_$n@S!GQh{(;GZFL#sz>;ooDmeF-g>Tz9ui&;H0|4u;lHSBW%t@-Y7QOV4p#=+OwgsjHp4C zbI>=^lcJL56@_?4+LT|Pl^>k1N?)~J@I7?+0iNjobS-H>pC6!FosyEWqDLRe8kI57;eB`oYmo%1-+#tKH@9-9$4%CJ^|sJ;fDWo$>aqlnO}n@9s!x`r2SxU2b+ zDykzI6Uw9-$!uiO7W$iax%2(AYaoxH3v_eZ@t&57d8^#Vw8#y+aL1xX_1CMIJlnB!nl; z{m>4p?ox2AOBv_gsj2Vg{|rHHn{%QYjmSN{(Ku}6h&8y`OdEIrXb4Q9lm8JjqqT@RO{xKy1L4}+IW5wHbh~E;e?PF zDQI6tVG>j7($U$^?6#;J>)@18MucPSb#N*-i@gQ-(BdN)<8uAgVt)Oh*Szk2vF}eP zhw;q=hO%o-q{J^xt{b2ELUsK>qw)X5RStXe<%Y@RhZXCN`Lzd+FvTrTI~gLu<#S7l zF~n}AAI`xa%V3O4sbLBan6bB7yU)R0p}C|vaN&`Ri?Rc$W&94=D62Zep*9KBaNU+j z4OY(PA)?ZAgSl>Qob2|uf1Z9P_VAD^>GZvn7^E_7kaB#t^M~-2A}AN-;0z2R-Mi#y z2@*bilgcB&nEa#wefST@d=*{~EFtw+yT1eA8%S+t2GEWsiQXx4##V9S!Kr5t+>6@} zR5Y7CS;Bbeg?3thw|#4uYGZFlx0uWlZM20cg1uGLI(hRN-`PG7J7sMu=YSw%Pu=X~ zvv(_%^UI%JL%60;>-*yXgD6VZ3wl+TMlGdM#)}aBY5%pEW$i59(ZQ5IYjUoEQ?`nHeP28ZfvXH&v{?CTqtiluh6{Uh%tAdlfVO z`|F-aP)iVbRX*~$SWMEjnj`f6u`KpH?%YM>LFjAbaKM?&4y3Xm57II@^N6>tr9_A&S?p_VIfB;Srz%3DUUQaHwb-1)k|ShXOy5O;%w;W z3eCsyIP~vR@KrF!>d%WNG9Gk-X=ZK+25AxI;UMy63*RY&wq6r4)L$5uR?xRJ#`zW z4w5$=Z4Vz4X?GZ!8A&BtD|affv5rbzx-jY=AU;S zXq(@?#_mQ86md0|&e;%3#78E|o`#Xrk?z)kjq{8QS(nIU-)c9sQ%LHr?)Mn7f7I57 z5TKHtCh`ZM>h~_<#Bx=mj+6>nWiNM^x23JpKmCSy#rtDW^MxW5Fz0jWdXC0HA+9QT z{2b4Bg6X%6vZ;asPU~C8Ctp6TL=}zWp>uz262`t-t#banx-5dUx69pTgknGd|58t4 zW!rlPG0%H1OVN+6CO+8EnrJDwh3>?bMsA|9uv2+3LHDkujkAXR1(? zvpVYZ@T?&%Ck6-6{3EsL0C3+kEa-Ul@o#Nrab(A6et?S2wL1 ze1kalLnPVc)yOUTHur1Cgf0L1GwW>i1glI(bRt>2A4Ksf(Y>!JhpA51dhSO1E2 z0?L-=l3x9I3_hSuU%KM05XfZ7__ea3Y8iM5if>^$swANwR+N|(!$j{DMJSfVZ0|Rp z?<5kCa2UDwqsDh-DeRfcKbz({)rB(#wVEYddbVubG%x?>VhGCwKjz$KoJ~Wk4lb+r zm3r$myeu`+ehQrr&imvAh;MtNxQeI5TD(&xu*X!j4Qah6cXx1~$Ym#gpD$Nm$8w7O zA#{bb#)`RKqUD?C-mD|(VI5o_w4 zXPy6mS)H0GCT)QjPR=h*SkEZ+85m@W2rgjI253bQ#0gXUu@ zP^If_dvuKg`v`W93}Y{v6hw>BZZBbE!4~2oi@(Hy_>B12AmCCZ*uTyC*VWnaficy8 z7h?>gro;Id3_Lm1_$s!?1jE8N`S6#Qa^R8RM#$yF2+a9-Fb90*A&OKR;z~L(xAI`L z3v9?6a?+WhoX2SF=DBNX^>ia!mH-9uIbwo=2BUu+2V90+@AQWt%8qA8WMUN|-K~>= zg)am!ZGn(+Xaa|eI$@|UQB!RsNoxd_331)c<3OfSh=*d zo1Y04m=uC^KUfH=GaXrCkB~`{gU3pHIj_{9IDF{HV@UbfZNE{U^Hh0%{)6ed>AvC< zJ03AR9}q^jajw_rClx=mkq^vBx4PEb2C(EQa;A6nXNM3)jTOqSZ=diB|9zHJuUR6C zPP-BwIrXIX2)gOB`W!x|FROBfRd4V>r_%lHg+tC|+DfL4FXe%O{(f}#8HFIu!RRa;g^)SNRpiIscDtPq|DD($=JJ#FB>nQ=!A2G2Jypl*5s`%~F#Dk+K zH!IaE13fSB{?vGjvkh}OJ*nYx|4MyAZtLb#>KLddS!yNj7Jc1Wpv-C8R?t*90FQ~2 zuXZZubX&H&942(Dk0vp-zj0O=60rE*81bTCf>^kp@G3FBYF5ucptMm23*XDn{7_p1 zg(Be@ZM{q>R(vJ@qua6OyIl}%RFv(={_g~!YJ(O}~8Oi@AuuAzNo}GxGzDmlR#!de|}R zhriw&VI@tR;vgm3P=?qN#>KJiB}x)JcE^=hlxI+7t%5aNon25>VI`G>cWYM}&b&zhMF~ z3F-r)2w9>+Vr%kHNviTvwbajPoWq^DjhDA@dZo$G-RTphKBTmNKfxf=(u{I zi-)Iccfh&=u&WxmRG53>r`wY?5im8Xe^esP$a28wK|!t60wnYVa0(1uv4V*0qlA*> zD>C>)O6wddYqz_;_$G?LJefxGIW}0&a2hLiRn}3}vd>LOnx~l&Mn3hh5}R7MJ>A@e zaw31MH&e8UNCa9$ZR{>$YpN=JKDA~{zR!OL*HUCz#X1k@8v})tn9eFf^%s`m71Z0HY0iIWe|*e%LjYT(jjr8AG#ZIO~b5 zs78T+D-G@Wys@s<75%#~N1P{QNMO3!XVcWH2FVHRsJdkV-4(%fdpZ6v?pNf+qQ8*Yw}r90gUI#i z6TL0abX;@lYk-7t^9o%r#%#oD*q`LA*wClwhnyy7UpkemMC5NUiUEH0KNVRaL%cTK z6ws+=F4J`Yp(^R6&(PD+k))YY&5{di6;8c!B9h~2&KytR<6+^RHDbUx=2U!nq{Jubbvk~ZYlCU=Uo;iBrN6Cj`@@~l=fC2_;gH$h{b%pQ`+03(si+T7J zEG3U@Y{jD)bslndCt>Dqv6BiR#2^Gu?#xF2S&i2r-O=?7V?Pp{>bMW)hh|eYwuvr& zXf3>@pZS8okaSsE-u|=T=Qr%YRKEg4DDfh301hUUI1A5;x2o9@jbh`8@eM*k@yye> zmpKHi_e#Zl88u2i%XIp>XnozqC7Ya~X~B%6T3`N@WZ@8XnveCyhGh_$$Zr*cNhqJq zF5clas8A!7y?`5~R&f4TDfy4Ug`=UyZhvH~@Z*cJkEA_{@_#t9g4hb@C*4Z3TR zkk7G}Tk|E~M!$$F?r*S=t)?%nGdoLS@Ex8U47K+tXxvF8d)_YH2qO-dBZ3a?2W@1P z(ou65if!1vO)Z0FI4(h#ONkX{;?Jw!r2k(nfU?Ns%ACo1gXJsV8}=(~$BO>o@6O$# zy5$QR7->`^3r59;`pAz29200Ik8Wtl?xKiPnY5Z3|EDBMANr0c?US1PkKV(xk23|n zbkliPCVep^PiF$QPKrnS0gUns3JKg z{cCR9%Vnp^3qN$=yqXF&#-w{7)oOel`UuYUD|j~;n&_2GI=Bhz%$W&pMa75vWH~f# z(#$5MH8MD}?-dq>3;|)1H@P~p(MPvW9<8lh57j+mAe~oAuDYjxhVqjS z+FQ+49LXQY_Y92`qXL=X>}&?N-#H`QO2zcIWj9I=nc>m6mZ zeh;y$Y-hmB0-iKQJ;yWB$_neq{Whrgfthoa+g3kFB}u?9+v$aZKmk`aeLi7mUpc=4 z=si+OcA*@DX!!%pqFOQyCP6a(KIBro`xr7WlvLQp4@nM^Ku!Kll>t!KGU%Je-Q!=E zs_A009TpVGqh;xYkP*Q0;Hk+1Wy)#tM?->6&OeLRS)tr?6p$ zp%h^qRP>%`G>iH@db7+ogmkDKpP`vJqPMq+D#?u>KnZ+7s7fpANKUO+-dcGJO$7O@ zFv7jdJg=O)Gibn<%8k1ZPaTTf?g?D0{~F(;$P*C>R_#iO_?C z@$6-dyIw&W{Jf54Q68Mu-ZsBe>Rl$|FANXyrP{oX^gSGyzVs z^em}!VFDzO%0M#A@)K34jCcJO06alAdXWUBw1X?SZpQq#;Bsg=)`6aEGQ9mpvsdRpjmIZuE zf-%C<-p0t@MyULiDnm4or&3iI36h{tc)#2)cN}Z_?Ez@nemYo8Il9^GERD!f&;O89 zeZaK&%%u<=hI#>+^Zj|*ohb7nDU0+-h8z#_KkA^bnCltQd(C?YOhkMCAY0JyPu@s7 zu1gUeh=6gkVz_esWRwUyvF=+9EC6ZPnw%GYNHet_h}{m#5@J+(y82Xb#1zWgyOr9( za(jD>`Z7-io*8LvquxmdQg=S{t#KLNoUe=LK_Z02H-#`mOZ%#%DV6(e2fs~MUJ}&Opw_^03G8P_&8Yq{sWf<8?fopA?-<=B- z%z4ouK~5+Gjw&H4AFrhxZ#;&43*sE#ySWZBkL&mW6PrDB3mINnWpw9-4Gwq*;FbNr zK4qVoKmHeN9Dd*E#-?X1<(k}9R!gJgZwp%~f^2vr)OfW#O3V%f0hMQ}XI3$7Q%`l^ ze%*UaoBLnJKBs8-pAf?v+O)>x!kbvw2JTtwgKZ%}awn*gH|ax_t27a`+dx{rq#?#l zu7yr|fpgKG z5K2HzeY4QJB|B-E4c_58T7rqX$c-#Be`=p|*h(TFV}YLCFfIsT9=q(gn}vSCOy(2Z zc4~5yIe#H7^oQIHc{?hn65QOAe7H`c=^(?dU(aVE{J5-1he z?pMiL|Cl@Qqb@Kc>nkr?2=|c@A&PUih~rau$?-IIVaywZe+`%o=Ja3ZW&A{wEh+)E zlutzE;t?KNe$iWA4w6KCq(7OUsCH7O!bWz)wXHC2eqaB0YVD;_04F^`-e0(v33+L? zI2fj(U$S}p*igt8922gXH@`5uX`3I$F2>Ulc08`7(|cXA#t8$&b3j#&>|msW4|xD3 z?&U=NkkCVPVA`=0iBj?gY8IumR_i;r_rW}YKb+*5e8^q(NplQth^6xi>oA>pln)JJ z73)EW*`h&(uBUgbuW_o**WSqRxmbrq`e@#3a=$ zHLn$WN#)E3H_&=`F56H~WT+VZRARc}zb!-u zG~OQUdVlP8b@~hKrH?UgjV9?qutbR!Di??aYRM{zSCZYn!O}kZA@cKtq|fjuOoL#1 zUHa%&wD?2&n^!zqJZXX`*?df&mhcLOYl4Rb?j=rP8dC@hX4a&|Mci~sKSu!;DFy#} zprgLtmikiR-Z-am`j!{LS3p$(0kfgOrhJs|`=KvVm8;YjZh436@zB2`b0hCyLud*n3BlVys_>1Evzmmn zk)uX-mTHk8(6jO8Gc)O_{mT*plf@SX{0l1GrR@s5_rMo!h@llj)({q0JLiLvHYOC= z>;1j^d%igd(zeoJ>9;vUtiy+%wJYPisb>bk8?JuzEvM&Yl1XVSx*^Y!v!9uwA1RVX zr5b~fV_4EZMf|fPk24*3N*W08DxYQ^C91t8yBDK168C85SZ&hk;^Exg@p*atUQ+>-t0{@K&p{FB1tiMs*D+&3sxkBH?HRIV( zWw_+MF#a%;JcE#MtmcqNF4^XNbERl>$0+H;fw|vl+|{>b}qf*=vOFZu9wewQD3*QVmd8-wZ~*OdAXd1mIvoXiyW^|vJC z%%w5YKiyTsRiCzWRbKWq+CZCKhc@HA&CTo&QaHUnabc zZvD~&x~q`@A#9t}e|iqB?wOT!{0`kS?LfBpCt>?-H&1zzs`ZUZUrXW6bVBQ`=#SU|#}Clv z-+Hg!?b_qIX+&?^GeVkFEBVlW^J~ydr2+!u;5D~J2(BFY?gQl|Gwkn=d1mQHoKC~j z+Ft3d+w+G+L@p`P>#Lz`kx~K3Z{EL-TPTX4WYtGy0=(Jj2q82J2#g59h<&v%i4c8LVlK)z9}>3G`3KV_;(TQMW-4 znWiz(;_Ox3K259YG$iZ$&;ZoE_1{*U66-yfr|XK8sIDHQK$fP`0c`~=FoS^Phwn~| z_0K>DD4-(bAc@9VIPJoPkP+-nTmNNyV~(P#m+>-)EEFve-4(Y1sbC;|$kcwK4Mt@& zz(W@O3tQ>av226jxl%$AYlkSwtrqHCzK3`9N2Fbn{+6kSXG;m2zYjg}BMU&+AGOj) z5h63%)%oS;o8ZdPHu*wKSBm5lduR_rH5V{Wz@lKXV#PpO15-23)s1M=m`Mpa(+ZSS z{h;rxJ8*Egoa@%Yq{`%}0J8HV+r#?jC+m?ChyA#C*Sk(BTv9J@T0t% zJT&(V65>zUFqldDa)Tg=HJ+#`K*0PJ?n85de|8kgyQCCXt%g4JBX_x`0_!6u6&xnW zC0t8lB)1NuDd~ENsqVSaC=Qp{aNDI!7BnwpKL`&wmvD zD8xSs7f1()m+^8B&D`2Z_qO${rzJ{}&iIx4AJy4OK{SQT<2RL9hM&3QR|{@rk2;MU z4>D6asu~p0`-IGf#Mgi)go;PMtC}Xdre>mDhTmZ)-DA_wlGd%AsveubN4viaL_N}Q zLNy%{__Iz5Lw%1jt!xDQ4-3X=VgF~jO{zn?uW>)3V(i6$OaqTdx+eB z2yE}YQoJrmjG0Jz_RokQ`2F5;ej0tR?>;H{`-z?sk!aDz^9wJ!NziQa0-7zJNLXVr zkK%Cyc{^EwO!x!A$d|Xp5=gg}TlL(js=l-q(S(hQAF;V-wS&Y-y-QRpVh`jK<%FtE ziYCu>ihKc@q?bK3p(5@57zrr9DComIy><(R;vd{YI{ffrJf6@X!Lv!_>8}-fAG}Uv z;L3mU#om6H!1VQ_lRn`}Z_aY!N(QSpvoS7iEy}}s642qIz z9$tRgD= z9R4jh5R$nIEcWxYJQ-rPlMNTM)sH>ri7m=f-5@LJo8IY#75~C7d~+JWzzyoPk|}#? zsj!%;D912;qZ}@VOhpavEM!ixsCFR?dwc(@|HwaEyY&H3d0~)t)dFC$T$2f1V^9n4 zRz~W2L4ExE;R)eh%(wV(Ykv3QAZ+N)Kr1qH?u&laQr|uTlVp9$Dv+CrUw1e||HyFq z#oA2!ryvepdEou(*pEE%{&UD55_>u8U{7oOaoI?alvaeSF+998aKv4+Aa28saFw_l zTbQf-NsIj8!10v$PpIwpx;OZgk`Wwj=tBgf%95|ZaguIzZMB56X2KzaJ-1)3fRXzA zg1_Q{Qp44p^2JXU4x5jA&otiqR~v^qJ8Z)O(RFZj0i|xv(z#;9CkhZ*#BpMPVVRk^ zHoD|Z80AmJ{q=166v=vOp_Cm-myAD(^}yHOmO}I$R?~aq@I(x($~F#msX!u7ffc>%-Dsk!_u6OKztV=$@P0y!PcA;T6K$2pWt_&+J0O9G91KA63AK_)6$+` zLhu%AbUUi5P@79)&CgvS%E$Rmr)ZfX-u$hC;ezLVOkG6ii6wYYT9%-&BI@On`PpjH zQ?if$Hh6QyFnFc9DkLM6xoM6ncJa5}p&j?i>Wcrl2@hL^ilsRt=?g=kJqy_WpQb6D zs0#=E&jn5UW2Ko^<9a7uH!}~KR`q23VkP|{FNIP)r)0h0zMEGJ>r`?1oAauGj@m4J zvEatxwI*6Zip#g7PwDwXYSU53rmzl5!1kTl13hH)w(#=-z8!!f24HyN$sVJWhgXR? z6j_9|-=z3Ql(Ox$!o&4wMAwWoj89Y5+AURaNZ*AJFX?b2kr4PuYKwmr0Ph79V8!Uu zd^sTCBMade5`r@2%2@>+ZErA_$Wq4sM1|aq%4_S{z5V*^ae|1673fg$(8cB-Hqu6i zeq8GNe()tNEp_BqVUA7B&R6J9R7Exq$dr|KcxedGlMl*=q$n1jc!rnTr!* z^Q4nxQ5`86_|{OUa`P(b43>utcNz_IsgLM=I}Nhq=(?2QsXsr#ySLa(34?L0xJSyt zG;c*HA*dP1hUQC8s{ps3!YGhxFNW3iQKmWpI?@yF4>~Rwdxy~+((&~1Me%|G6IMdR zCm1GW(kgy*8&r{8Qr*n-A|&_ukAj-<9^xoc|)6R%@j6Jqf}^CZ<4%ES%h%e;j8s9hd27>n)Rd z&Qsj+v`4t3jz69lMxLW>8z|t&c{C|qe(`Xp58>^IO~T9-O(j(#q`N^?d-Tot*jodo ze7wskx;5l|;=nAvT5jv&4N{jvhi*RB6=iPwDuy=b_t_;X4Ch|?uOGYzDV_A#3!5Ob z4Xa$o%Y5>)G1SOCeJd-{<)ImO8&UXfvd$s_vkXU|aPzlQ=ucdHJ8tC`fEw3ABJ^>i zA9@h?*Kwqo)lmS{%iGc|F}LPr)-ppQpAH7~zBdg<*PN6+PYDO;Q}DH~1_enqQ8D@C z4HsRR!gBDVZ!jpt^3!_7qN_V?hJKEJa%HR&&sVN;Nqyn64a|<}5iPp88YHk#qAb4M zKlU905m^QBX}1)w13kX^5UegT6aM&A$Pc{4`g^0XvJ0cP>dRcIKLL^Mps@gHAOwUIh@@&a?z0UEG9?Ln>igB(P5`cVdh{)f1(=W*$DiW}!1aHN!v zd9A+?2B>?KZJ&s*h^SQ9NO??BQ^x7mow5RMzJAt{#B948xe9%g<0pnu<<3MLx}KT% zug&NT$@rwH%0(-Bw~#dgpcd}TcUlb9`jZ2Eu_|I5;^oh|(Jt9xFa0d7f@hLmAwH-5 z>NugBW~7%(2{NBj$=z|sqhM`m@2K&o}bOj_d9cIdH&PQPIV1&1@Wa9_?KZHEmil>nId(irnzm zI_T<-`VEGVzzN_(uc-J2kMYl{Chi^msgXu0nBgBqDnOW{fs;P^bzhww)PShD-L6Dt zzrm<){!}AnMgyxHdRBtt4k=T{^R|y_G)&i#P)QOGoFt!jTZw^xC|K4Yv`zJ}vwyJ! z9Wf-$b)tiADT7%qxLWkPtO_-Lza4cQW}qPSpqEOlctjHBQyjB5ADVPWc#{0^HD@QW z4vSg}a+1DcUv=zhIs{bZZ5fuz{}=3_IxnwwloK6{l9engx9N*bqs6~y?ZL^eF8?^r z|6(3M1fz;1pbsl|w+cIfp+JsM;@s`nqP^ZDJ||cj{>jrdsC30hzIt3;2ol{VY-RO2 zv>Y-ujESm~gIq=l5IQIa=l8bawFQ%IThP`PcL1U@I_wC85W6YaI#9ic7=at%jAbCh z4M$eZvxI0xg3wzO-xp%%o1=!_g(?HTu*SM&|?C3-NeWLT*8As4IZfy2+%YHU_$(4 z@yTywc$N?~2`pXlmL{1TuJyb!CB98Ue=B?|lKzD0I_M!kPU@*3v!mOGuNl!?59lb8 zmPL)+=#!DvxYPSu+JT1s1YK~Cp@$Iw#jm{kr z7w<6Nyj)F#MEo=E7x1jOhJ7P^s}&uRhe~=VN+mo64+@+AW83O?OVxHaoRITrXQd`0 z^5Xn1Q{kIKinEjcu*S+W(&1UHjDE0K# z=GoEEDYKIIzUaK_o4+{v9hXp=KQ+>02eIBScBp7G4JhtyA*N&Fo6$_P(iGuk?vgMu zv?Q0;8c_asXb}CSTgstT!*JfJ2aP;B1c>874%ahzQD(0Qk?Kp8mLla4m%^OX3&;0+ zL203k7R}s~u;dKN>Aoq;G&*Unb;tDgApP+BjS#LiYD5DAk~{KhyHjG^Q_0}!?s0t0 zyJUp6n!F^+8)zx{gk>M+8oOq20PjfDduO$!Gl6{1*8^ZX?*~{b^|x3a9Hl=^T@NXb z9glACXjfjta>q(#`~KM63IDM?M7uN$pb?hrEofM0(8{UQg8J|OraJ*88~3wK&qLst zn%6hlFQLp#b{!fsW1k53@*@Z^C_j)(!Ybfza6whkF@S zUS<_zU$;4%51VbGz__f78Dp2LG45aWrrXx!m4Zv!|8cs*uce8psL^+d>&0bV#w8Y2zdsf>13&89>?bf;GsVf6qHUtOv8IuKQ6&i#(GwLsk zc8byUnea=Ond3Tx;yw>u!_j)VmW$k-HlGW-vIfUjZ(n^*kgB4a`k%A1{U$ZYwVCVW zXuchK#T6xV6f2GEijIhK6+z9+j)>bs)IFfZ|^ihBM; zLy+sin+8-^SA9IJ<`zVFaLE5+INF3ncCgex?)E^#?BIm#T8zT53JX9cF-t)skO@M? zUqad2&OT5+_0~X#>tXV-W59z}xiT-9~aNgjyy=cM8^*|1v%nJXw z$Gy0u?E(VD)DQ>xDOSav;FKG>vmH2YXhs z(j%=z;G&bI$YWXVkTb_q|iHRk6QQ>)v7C78XUp z*L5PnS`xL`M4B2@^=$Tse%}WS=pLJVYK{wsx_=V2`y)Wj*9x#3!8G^%%Za{{ot_ zOFCLzA;-G3TbD!6i&K@(ulSjzFV3;QyHq2vdZpmOT3q!k`Wis5=Iz2U7Im(j<{(NN5$ZLlZ z>l`qW6z3|jW)K|-qcE4Z*pZkjWqUQTp*CRDC6%B<#(UaJ+!;G_Ne+H|OoE`XN5}CS zN$)WD0xgCRqpwZ>owX**#HSh}$~o0Bv!JWWFz>UMSpI(+q`F5Uo@&G8*W-=7O?xF0zEdYOzSV03 zEcyCnn&Jic`ynBn2)Rfoh5sqPo>a(GVQDt7!s|Wom!~mdV%^*CtrYon ziGP14jwNkmp@7(+w-nic-vqc=VBeMOx4h;b<>#P|yvvU+v_q2{U~Xf#E$g;_-mOuriujUg#o~f(2&*o^E(?pbQ|cYmLo~ll)4~r9RQJ|c8?Maz za-Ieyu2`-9{C!odBbFh`;q#kx+lSG65?*TKv$8^4ORyO`Llhy8CK=W^4g72_;jL@4 z(!$Rm-)ma)7B4}472El9q(rbNub>^3^RTm(d*X5XSoiQ`sm%RHn&m=}Nn!@jK)B#H zgFHdhzXwE|TF^iOoq;~=4U?)p91F^O7SE+8_SjGjZ27X2!%Hmf?ms4a*PNp&KC-HM z`hB;&F9^G~rj~ybuZ`q8@J$2d-00w`$b`N>h{j)`M9q?5O*w2yH8GG_JOow1FX%Nq zmuNAQQpc>v*DhrcGchKAUS<#t1hy>=X0^xHvRjF znQqs>)N>|unzAi){OGZ!41-SVC8m%;<YGTL5)Hl~UVX>%61JyaMQ1G>kIiau^kr&th>WUWD+%KAe&7^q>#^LV z`-&JHdR=>T=daQ~neDE3_P_R^gaet@Z19Iw&!>#5+&4w|={6T%Z@5+x_d*9}QkzYk zb{GQbn;HV(iHs;T`nYT-!^!<2hsP z=>tXrx5|`J;ueeAgu}>4)gtCl>RJRh3LCZswMVQE8Ql+#3eaejcjYGh>-WWvb&{Zk z_!b${`5uuA2Gpa~=-Zs#;-`+{{yzRGe_rs3Ziz1de=V`UpVQvEMLduWZrjEYSDSz1 zR)^)VooD#Ta^Vt2Y+_1s*#L^&Grmvi=U*QLZ{He;p=cQkZCQTO2#67gHazxFv+Ei# zp5Y>@@9ABB_}{WLYI?9LHoh?`=AO4C>#Ac*TpTk^y6LYE8^6s2+jHC4+6Z(mM}~6TA#ctq9Mqw zldToszUTTTIbQcOzbSiS$lO*h;jc7tfOPa;$D^M@ppJ ze56?`HZ9H-Os{i?m4O-KOk=LH{pOvV;ZtM1j7JxV9fbQjVGW%D!MfNRG$sE63W14A z+7gu?{BQ5K#xu%uW@6`7*KM4XA)hSwz)xnjU4BPV)B}5{N3>_Ty6z2GjK7%SzddE* zEmmFF8~|DztfDdPIpbR0 zO7R^88}!gi+^`;bRuE` z%17F)p2w`Ev1?B4fMr%%ycpAU&$R;l`C}(onG*52Xr+Ve3&o%G$6wtLdU=Io_{I+; z;y$?B*1h@zXZeG(?MO497FxBcc`Gh$=@?JwqVLrfm}&N@@mS&?@F$^B<4?l-Jf_a# z^a*M)%n&{Sg^P~jFjUtI5Ly7FZHp@(F2vv?T(^h7eSO%kZ^QVuEdy?bFs7cP7zs!x zkv4n>qk5v#O%V|UUHe~TpO@0C9p+kwFGi=r=3X2{3;P+j4UDy0= z2^)KQx@3|{c09eX+sJ0CbLlLvtKYMoiO_KqI*-9H()vz&FD|W}$UAHA7FKCu=ME3d zA_x@7g#0&BsdDsu0tW19_i$gh!ol%H@v}^KhH_iKOxdBE_-7-1Glr?Y6cM^yZ=Wb+WvUoN8*D-~9a8 zCfX$-*`?^UAT4a{VpMfsIdzVx4e-?BQnRC$CUrX3fOT({MY*h7ih}%)MUUBssljvk zc*sSsD6se{hX>dCQ7hL%s6m`Jzo4TJnnZdInFDUGON3VuWyw~$`J?8LanoeK-R4o# z3KMb@`aWr1;%Jr%E`$KWnNt7YeG( zjhag6(pz4IrqSkeI8r;50TOSsjTo7qWbM+q%N!?^B#0_eKH7h8$z4LK7vP1Tbc81a zTic{4RJt6yXnw;cz7~0~;AioS?oddS?y+>D|`_Ft`~=!yRv zOAla~dK@Po`c77|*aW-hAUy0J_5v?F#t_Lz9+N40AVn<`z2SB)2yR!K3-6lI*h zmDe@11u;vrN}H0o%EsByQrj&`XySZUo1N9zPepHHz(LEH(#Ywy-*lC4n3!=ouWjts znq_wj+54c2($MO-!4VhCx7Gn`L)-ML%XCrUb%dd>Xh#TBPTwz^20b_1u>aC!dB`if z&HV=-{^ytm?nZ>^X9`o1l{SI!0aCVfGG&25zMDnymJ;w!4W3?)jb}Nhxd_0n=r-py zz^l3hL^(S5xJ1kxo(02D`uZwcHo<9DRRgNA<{jPuF#%=wQt`-n8ASEp$$WsV9QlR6 z>ILXj+QQHAU}!RIr+f>F^7l|)dCf}OwmcI_Vjv5^C;l|&(GVNVSVe-@cV57oPa8Pb zM`cW;F>aiCosl-Wvj+z;cvT#&379-2bbF%p@8nHAY|m*w6(uC@@yil>_1!}ll>oFr zJWVMm4j*O^6MR&!l}DrIG_slJg5`w~3fINgT%nT-L%1!7x22-ABM-6QiEWU-xck@f zANR6oQ3Lul@NP6>H5tP8u5>M7Gj^_bOsKeXKrlYeqRehvYfsT8Sb?AbJjZqKWGm2~ z&w~Fo=m8A}O0m{ca)h2n^x$0**WK`; zV2lpEErk4X{EnftS=YCby12L`I=IAE1%^P7r%;%8q?40V@{ zgM;ldeE9&~|6564$Z@O8_tZr%eKtwDi=INr5F~@)oiAS?`H+qYbFD53z_t~&M+{`o zE!l&r!;?zJQKR=#IEDc?Tz9D%^g2qT;@w9BDj*h9jHMU*Eh!23uKoM;1t23K*f02q zPOQW5YgzMKH=ko=_{Xtiw8Kk(7G{WHOmG%uP<$R9g#sTDpJGDyugTfTPEKo6#LbP= zxi~nC;~#T9eA*%QKWD(9b3k1!rIpmC9F@vs!C?n1rI8vdM$)*y3XBB>DUJI-!rn^_ ztBH>YL{Xa<3LSGD-3B4vG(4Ss=W*2W1>SHTvhwzCn)XYj$5e0l+v8KVCA??*i zt5M3_=!;62;`I4>FUd;-1yWdT^-MdpvSXaGglB%w1gr>@TP`b7v(GdTH&R1!6bAib zXq=Qu|M*t{UjQQlD+@{z%^pTSgOM3Wl~YFS+|Rceqc-oJ``4MVyC5+CAli0-?507g zY5>tCs9kLg0j2;{MapvW;rikjan*J75?(1OR~7_t3Oq&BVe4P(V07)9GDflc>cO!zxk8(BPXT4S#Jo){!EgLLQt@=!=1EUEl5030 zl&R9`6>8S{wT#&KA;`gDzYQGKTU^><&!egO@Hf1T`v_1eo|9M!cqk zf9#f0(Ki!+YKcVHP))`_gIh~da}h2;LS|*QUEcB!O%3Y|ViD7+{P0_S>E;l{(R5h? zMilZ2+fJ1$E)zn|J9;3JK2}tw&2>oOxAPLn`PTc!xjxUeOQJDIPCLBKfzhk{0vxZ@ zF0FR*xX3DJu-#Q zbNuo;GcF+!ME)(VAJ|lvM5)Ew>Zku7+#cd`a2NXwvS=Y){m2=Cx-0iU^YyS&?0Xa(MFA7QAe z`3;c}o;#3!x~cbQ_xv)f756VorAgkG2g&>lc1ILe>; zMID5)%{gY6H_ce`q3)t2pf7w{2!|!Mod>HmOmhq5PV}#UkZui_b=Lg)m|Ynjg#vf? zccB(DZ5R0?&b(vn-uXui!PcKH*GZq138rs)QtTFOQoR`~@_o<_jIz}G<6*sbLM1CQ z&4$Z5qCX{7Zqb3EWH0=ebqt`m-DQo7Tzq>_>4%KZDi1(ld`E)Hpl0o59P)dEvoPq7 z`2yYEuC!RMwDnL!hm-Unucxg~n=pVV*Enpq0wwBRtbS|ngK=^WM@*sNm z9$vVWxd5(Ge8okW(huCGhqJfodnki>PiLn;Cx}w-elV3!opbv^1XYnLw^bPl)Fvq9 z5tWGm3*HSkpYeN1M{y-Z<84kA;unjrqNhhm&pt-s^(xlOTWT093&@SeG0loJJ8vp + + + diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js new file mode 100644 index 0000000000..54b3c46381 --- /dev/null +++ b/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/_static/copybutton.css b/_static/copybutton.css new file mode 100644 index 0000000000..f1916ec7d1 --- /dev/null +++ b/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

    Short

    + */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/_static/copybutton.js b/_static/copybutton.js new file mode 100644 index 0000000000..2ea7ff3e21 --- /dev/null +++ b/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 0000000000..dbe1aaad79 --- /dev/null +++ b/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/_static/css/custom.css b/_static/css/custom.css new file mode 100644 index 0000000000..4957fe1a45 --- /dev/null +++ b/_static/css/custom.css @@ -0,0 +1,45 @@ +.call-to-action-any { + width: 2rem; + height: 2rem; + margin-inline-end: 10px; + background-size: 100% 100%; +} + +.pytorch-colab { + background-image: url("../images/logo-colab.svg"); +} + +.pytorch-download { + background-image: url("../images/logo-download.svg"); +} + +.pytorch-github { + background-image: url("../images/logo-github.svg"); +} + + + +.call-to-action-desktop-view { + display: none; +} + +.call-to-action-mobile-view { + display: block; +} + +#google-colab-link, #download-notebook-link, #github-view-link { + padding-bottom: 0.625rem; + display: flex; +} + + + +@media screen and (min-width: 768px) { + .call-to-action-desktop-view { + display: block; + } + + .call-to-action-mobile-view { + display: none; + } +} diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000000..d06a71d751 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000000..1d3ab29a8e --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '0.6.3', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: true, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/drawio/dfe/user_actor.png b/_static/drawio/dfe/user_actor.png new file mode 100644 index 0000000000000000000000000000000000000000..220270aafb393899bdee784e107ebbad4d78b4b7 GIT binary patch literal 72168 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 literal 0 HcmV?d00001 diff --git a/_static/images/additional_stats.png b/_static/images/additional_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..2b9d2c3f5e66977d586147acb0bdd928fceaf482 GIT binary patch literal 31560 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 GMf?Z-ff#lG literal 0 HcmV?d00001 diff --git a/_static/images/benchmark_mass_compare.png b/_static/images/benchmark_mass_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..71911c5546eb110da746d19cb746afab8a16a137 GIT binary patch literal 84227 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 z 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
    >Ac$oi5SP8T51px5%Hgu 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
  • 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ǦWmXg@mW3ZlcS2ksmozzzwvuN6YYTppW86VaC& zZKurw_TK0wX2S{*`6mqGL#e>VAqRk&50(C+Zk>vNSTtDx$k?}m0ZYJ+;D@EVwVP!l zbpGx2&XvrjDRF%=ll`rOdfM7zwyvgfazIJ?=KT@+@HBlLbLcSTurXU2co1qo;8b<3 zErHk5pznUN&W(d(54nVU=x-|1aP z*EB^!qRzsyiw@*F{18rZ`wj@lW?B-rJ>`w$!pq;^xtYPz=LkQLRS~zGZ&6C%+E|s7 zTVE>fEUS4g6TuASiscv(Oi~S5b<~G@Zr4{F4Oe;RMyeDO8DH>N)f%~9@L$qR{q9;Y zt==eJ(fsN%H?js+N zA#^x1JP)RBFfsxgyE5FUzBBb6Ru(GmfF`%Sl!^tj{O?lRTh+cZW_-bSRt_8wdPX*i zQ!{RplF$|C@9K%H1Gh4ZAkiy=UCU8W{K)cMzm}SM_jYzn?DKDN15m-90@3fSGiHk^NN7iwqp!;-;GF3 z)z#%sS1QBxL7r7}x4wI={53^g?N1LUK@?qi!z>Z{8Lbh?L|Ij)chc5dAKqYnAz40N zX)VLX=Gr2ugtxc;-MK3Ns_#sa)-Tl_-*VdU^}JY>hy(-)>)e7S8}S^-46FG~5|2pPe5(-7etY43K{&}a}dvm9t?mKa6n<{Fl@4JJ2PW$c%^eIOUj8d2MLSV=CcNz>8rS#jKl z_up5Yw9^uB%^qC97;c+`c68h z3cMyRHMp`psa<}4;gUYUDo@!<02dWB&G8xIJH~Qkig;}m;gbSROZ$r~Xo|6BM{d`W zwq`dY*cErlZBNQM1?s6iocB?kGU4)If_`eVHsVphB z+(|0ov_Bm6@)+3>5(BUx)7U1_Mg>+&M?WJfZ;2rVlJ)A0y6}2U zNAS${^;9RZ0Pt<>hDrGaof3}a!$W@%y{?ukzz6Q$e_HNhg&nN*UtEOSa7&H0@3!bP ziZAEWqh6~!UsjJ7M$kysQp!G>k6);;;pHanUvjDz6Mil951DI12d3tn0s@IkxvvZ9 zrx~USMJ*6--mX!iTZ;83f{Il;d;&%;jNkyfiNpK$m6FrIO?@vv?PhypYghqRU)BJ) zqq+STmOEkQA)?Qod5_uv+P_UK*%bRtGDA|wH*B+!<-@!8JJTz}`GX5gmai|b+uvE~ z7j~TM0Dk0B1C(Sp%~x}BD!A{bO)uIwlLCFYP^s5sr%HXHCGZMR3-e8rPS#``dYeGb zL;VNX^Ih5E(ij6`fj)J8#r*W(vULglJ&CrnM5WvOqc_*r_aq(`*CP635+FIB8*WCU zH&=Hn=8MG7KiQbyitE(0nJ`H9+Ud~XOw$+hq#5GDGkg-apgYBXCfy9xg<+<$yF!KnLu@cF4)M;VQ9GV}Rpt~a-` zh_l_@kL*3=%F9DPf3BbjUWD8u#CbM}ocS06zx*v}t^P80XxI#U+WvxoxZdQ))TZ*+w|a%^mal%@no=btv{sh40xvc&cL@C3R#Elv zTr9nQNz0_x#QO5Y9hzVWRmgKP#>v5ZlZMuAjCm2XOeMg1>6P2v;70M&que8$O+MdR z>F_dp?NI*UTYv!2V3WBYR~dPU$|oHVjK3RXF3Z)b+SjS|G>T>{GrhE+KsTML{I9(BQNJWqIoa2}V2$s8ykM86w*xuw^dC0?x0OHoUHa_>y-g;h}b@0^Vc2y=>x z8fw0O^q8I9ap_a&Yc&@Ix#EiMs7}19Ym)D4?BE`|y!!G!$?Ny?j|z0%B`4y`DsnzN zRtq!#-+FymiUOApmy^~0I`;4q>=ex&kQ9lkH#VN}@ww_Nyn0D2`3iT{7(6gPR_e(N4}tjD_5Oc`z^&K=HJ5oVzcv3yaaV@JJuh}0sGIr zp|i>+z}V!FE)d!OscEL2B={5Fp!2o3CGE4cpU_UpC5dm2zI7L)@!G+rw2x~Mii^`a zjQ-1U;9;yt8iD>b_ptjvVk`q5P$VQ;Mp3SDFsp}!M>hL9{LFe2GMV(Pa?S;%2qRY| z5Yr@Eh{q-BcmZfxHeI0lzcS!d9AkIfc9^LKd9bqhZ1`IduzaKb#tiOfKguShB%zYH zydt~ZY%Y0%+CdKPkC$Ye%wJed1LD`c>7|;L)%hmZjjODq^MPE1`sY6#XK@^*McdDF0f=%aPI%N_BHSk%E(l%~82l#@O-VKexn0R*`HO~Nfd9b7Yr{~um+w}Hb90%d) zC1ZWd8gMm~Sp0O=y!b9KGGol5Zc-vzo6+D5Y(bp-xe44Do+c-hOc)t+9WJa<7{p{` zu$TP!79Sg{rmjYeKw>!9N7Bs2a-ItMW!u6B)r~k*Ur(y8kSTThkH{ zvZiaCa+jyXL;1}TGgFEX=V92mN~P4mo+6jUcdenO180vpnc0=-xpNp;_2uO1#<%M_ z-=utIc;Y;nmEm1)0lV%V@Jr7^(qnae?^D9pjiZd7U_j10`V4Ua=laA#xfWoB*1b!? zqiB|fL>dkIwfx8weJ=_JDb2qO)d$HHkwxRqiqrOMzFSgK9Og7*C34DCI?pNpMQ(WY z_I?`XbwB*w$?*!)m6y`Jn+VP$V$!EJ-rkNKj6VAC+#1O;2}OAnd>{bD1_R{4M*)1R zx8AV4jud))7(xHvo{2oFZOGn<+}G#la!z|qgp!y=XQq`H_~`cPpjDva;1Ll6&G&-w8mch@ zcJ4Y>+FZh2jn0)?1s@$Fs(nR0XBQ|9rwX3ig-O?}20P_VlHS4Ik$Too&<8<1y|}?8 zOVD=YXT3Q;;W&qyq=~r?LL82XO`31p$!wrsC-EZxL_DD9ar;mAH zX!ZHQ6sf%35L_GIj%q-oYB-yD|2s&&TeMt9P<%Lcjd3~`z~(M6ucZltuWbr=iXE{AI+ioz{P^Q;n9L_VoZ>sUV7r|FbA|;Ry|-bo zVrI<$neN1KiU!X}9zA6c!)3B)QA8WKd_IojHWozp$!HSu4A1-Uuof)~J(m)W^01vd zsV_J<@Eqz?1#)*OeaYn0~g-OSmR655k5IdSt*QO{DMn3s9s=%7$&ItzJ09 zp1rT2G!r55p0>LAVFTwd=AI)3*UU5DKBm9{&S+GXkAvA}! z%hP>p?t7$eU7l1h?(?Cvhk?c&gsE`7_lSd)(EfCxTbFO z;m-xaw$-vJ$EJ(4v9=~!ZmGWRTSjh%b7K>khnuWd=12D>DpNUWu*>ExUl7T0#~(w^+|8xFR+H&JS2NDGGI`9KpiwO?ld#rO}_b%gA&51;FXo^B1`L=PBhIqLq+v0=cw-k%x&7U^Ma?CCw#9h-CgH(3fNBld=6 zOBsS9nfVdkQtRJW+3f7dOg7X`Z|TkSSw}(yM5G`Lw3Oo>tg?FWI=-W{0l5>lV8x!@IG%8}n!5Li1Uo=XCs1AVR|Cpa)GfxyOtr)Ed*{S+qqgNB&Bk2yMuB3D z|7l50%W?Ux%c2zi4+xjB8Tt;=uOXH5h1##IUfpjG2V`ZVPu~mL&Fo`fPGp1xAie(q z@v%P#HEg|rCtR8u5_~Jav~=gvXzF;dQkq&qWQbR3m~89|W@`W~XH$tPZa%q^a#AW= zn_TGdv>tD|RWz{xFCpMBN{RhU?$h9poklAR_~C@H;Hexe+#XAK;3IoBVGf$bLwR?9574-7omy3SRy zYe0V_xs$AbCRb z*_3IGmzHJ~d@k!j@E0bg3I7REjjiu)zrG6XkwK*HHDF?eA2v|O2{VY^kZiAAOyrfT z{QHuIV`yZ3qo}+*|AE1s#<}YHAxih_0Kj zD8D6VV3JhTqGsZE(l&wM6t`i^jktUrHa*_Qtl^p0g1#_#Nw^9;@p|o=oL6Y_C1uW6 zTt-;2gW2cK_(&287@3VgxNi{J1gYB9O&K5Wh5IL3gI|vMJbrkgwUb`>HKhUXq1VOo zK+~^eaWDQl`4A#kt^2%fs;gEk((x{8Z(l5pv-5 ziWn>yE|Ud4Lf4v*xU;>&rFv*lraWQX+j5qJmwyjp(S7zOkVW7UHR4q80J7A*xQ}X9 zrXuSZTmGh{DL3i+c2ySm?+^+QwOS4(dd*~ytgY%oDAoV3ovq9zW%+?u?Wvv{lm+s# zs%y5|dGVWLUCJ3*IA%A&;AQ_oA8$efT(ZbH)owzj>@HW^!V3BEm8As=Ar=VOneN_h zuhE4=aS^%kDRm!~SJDE%r^hhdiQfM-gU6{U7K~oe%dM29ExE0{r3!hKmlnk$bR&Uc z{o{nWy0Kq#3TI7=D=P~hm|eeWtZH$D^8osj%?}dOP=7cte7;1=3khm^_pTC|y9(u+ zLeQS=kj~%}B-2pMMG!}IcqupgP8~hqS$zii^8EkW*!s3dCZ&D0Vj0T6!sS7N40E3` z@L1TBqk8x{3y1LDHQ_^g=JKKf9EilY-a(VU&j_b21k!Nt`cH3K?~9?7hbkGAk6G+xPc-Jbi2v?^=cj(kq}zDjKjt zh7HEs%E!0LN;ZD)7f~<_2wGS#jM*D|{G|yG55G|%QO8hbw^xqa%xAP2{quXU(_$JPL>ew+yoOs>-j_Z_^?Ji!Q~Z z&6uicVRIy(%{fzmx&0gmMJySUUaR%fm~Z>*M*M6f|R+)$@R7UiMDokR;4^erwmzfd1)lVR76!!ZS^VRJ~(bEVV{~4x; zeEkj407sKyi_%XdVt-Y1Ll+AfD{Y1sPA#r^y{>N68>*^fNvP1f89P2=aeM3NR*a<6 zaz?7LOz>M;Ya{fsiK^QB#w__hB0?}BIIu1WZ{Omd`#t@0dq#j!YzfHv`kzIQUj1&9 z2DeDZbx`kR1Y?Ws->K1^E?MFzreNq3JNOa*O<(2dvqB1p*~4bW#8#eW?Qw$mgqmGd z5|YQrF?59plA}I(QWqxSEDfd1U5=UH-xqVQs~(r*f%peBQ~t1NwB^123k5et+-_}0eXB!!-@)t0CjZN~9=}qo7FAVYP>E-8OoNPvMoP94 z%K0;zz8OA$Z8PZqF;z}!Iy+q*lY#zf5fUOHH(>N}p?h#Kb76Le9j~*_ZTWF2Zz*|- zWpHUVzy5TVgPGf>l2Gue&l!~si@34b@9c^wAdq46b8o-REt3`xe0_ga;x525dE}6EYmJ?-ft31wxu6X`{ zvA&7p*RNkN>AD-E%0@%9Juk0D{mCA%6~c)I+hHdUa#Gy0Eg@lcN=v?@yRP$PyE+GN z&Ygl3gtGp|RK=QHpxW9*JnC4=)jmX)7C4o0OhH2(w4)2&hn_zp>dJy zKpB1@*%w=f?#rUCj(#p2ToFL|AkN6meZPtJ;}?Vw;=bFG@9(w&YwVv`g0$t_v?IO;8RepNdbQtBNrTyg$Z$&%i{y7HgF=|Td>_TpfgcjdIQy+a(ot<lq^48;U4RR!A=e;W*KmRxZ8W&Kq1Q_y6%rhU# zHF6t*xhJo?nSOm~4l;vL0*GeFqae;AHNS>e72djJZpXJ##A-(RMm)dguY-+nu}C8q zE*0<775Q7@A)B~Aas^=F7@kWj*6$Ad`= z6kVMxKC2A3c$tx0IB9|S2?w*(g%tS&z^g6R3S=Ho3u;bIsqsJ{r-{G1QYZb~r^1u* zAewT-w~@J{vu0BdYn}Jf%JO0?@jiZf`sw@mZ@=h~5hMkKG%D$q7O{dsF2xr)eFveA z0v^>Yh1xF@^RK8VDdGNXfj~$2nG`Sn3`PXHl)Q#O0>_SaI_9qDw-C0#P=`=@#I0|h zb5=c|8f}}lDJ?Ty@`$v=qw4=YOR?PIbzHXt$XJUHkQlnfP6U&lNn7%Ks-0M7IthEK zSYKbgrc%_uo=1^?=Z1{4ik9C6f};8+kGxr8~TC428n-aBMubV7ImD-YTqs1A)8 zOb>Wpu-jCR60ELfzTkD);V(vIDFeIrnEh^{K->dKo}kc{`biD_^6#>v42&7=4PU>? zWzc5;&-}jnxOmEsT4)Nrd830kl9(UXp1TJeeO|zJ(Qj^gv@$e4K5bbvswXV_vs6U! zr6*aO+jMYjN8fbjDa1LD6jzHuArD*>Ve7nrmH|!v}#7X7b4{OVGKDvXNS|* z=?=^1s=l! z$d@AUdVq4NDvf2?hv*tIH7{@zGM&Pj1 z6#4^7tl6)x=rqTeN=|`{C5|slOvpfGZ~-OWWvG2W@%MFo);9w7MZ#GKg4okE(HE4BS&F=Jc1|9R^vchN=VWH;vYg1d=dCv$I|mJLjJS!Uhmwv>k@g%Uik*`Ts}*7Ul{0k(0?CL0VCXSfyg^Z@o*6+Zq zNvj~ymsivey~_q$;YU$a5zaFb1Q49ir2ASb3X1f>!PxA&Gs8b^;q~yoo?TrgUE>{6y zk{meFH^d6u^vuDe54DUj?08vcBj46M^gcx9`nBt`D0UZtPur3 zN*IR6=d}K=H!<$ZWZ!OT^PT+-wabKi{ z?t(jE_Yy~GEHS{B^@8kP-3_^t1rjKkr=+gGFRm>Qu$u_tKaC?PjTgJ;Z9z~|;^AI( z>*lsw+kQo-T~QMa2b2yvZK*YR69K{kjj9eI@X!%8G8i zAWbZA&-v@B90xf9`-f}}{bRMxp z%So$aL4rtcP9LWwjZY+sO`p*8hoqn+LLa1pQF{8g#qVXH;A$Mi#Ee{Onv-z=LvO{D zm0hHo9M^pWwv5=pOH^&sR(!^zMe8Cr2nUa5gpgk?!%f$*X6@l9mIPBggR~MMy8uiY z!{qDn+^C>w*f*IUm@(l)9{UOJSyz}*O-2k>55k%*$kGEHP0bPMeNs`JMle#M! z-18DqORa6z^;uB{htG7nJ8p#;q`L1OG0 zUkM2dBSPqJR8-+(`);Ll|G)u=@FgaQGl#$O8`pXt38H{R7=Jj>S~|8;){Q546HY~B5l)o zpUb~>g6zACm_9fxiBT&F z9wIqDHA%ilRKyYR>F2wWPvv=73`B(RI3C4>E2oiQX98ez`%_ZRL zp0&1fX?_jLFTnmfx_$oeHNV=m4H&dEw3KG znCdQg$Qoh~mh&(v5@#&WEuL>a0w(gkNSi+5g#Vq@k07u&&tH<{;Zhuce@BOL-h;^8 z*Gf`AFknYmlGhbpnpk3z>hW5Jv`mb=LU6*K0ZwM$*8G>-mOm7=N(F&%f1lJa`EwkZ z?aG6Kj6S;lM~E&jJf|{l?4PyPdn_cuLl9%*-QjTYeZgTJs6`lMAuRru><}sHxxk$q z@3%>HLVD7*x17T{Yl{}cT_U7`0ggjLT?j2E$vdzh#3#=zEGn;`0VTR%h{%^WJ>lO| z<j0)~gZD3pkQAsaz<^Rv2>J4kehK;gM%F}kYLQrI!b5`swv!mW@1FSpm)=PIDU3C+2#|0n1K-re4u_y7Ch zuVZ5{zHE>*kgY@&9jVahJte{d*J0NdpaJr?sOG>M@o*T<;Q8e@J3RjmT=P9r0l$Ls z_C!ISi2W{TC-M7Oibp0Ial)?8fFsfjPh!`qP#6SiBe^*C4uetAe2UqQG0HD*ukBfV zKS~e}Y{~#Cwf@)NavMi&>Wz9E(glzi#lvtjcI zWZiTT@n*7057}SCdgz$E^-@YTr}Tm>)seGNqLvIG-Hc0q`0+BUr{9*-V*eizgw9JU zwf$<6#)$PM)cq+y<61Rer1$+UVvz{hi2AOpH%bt=lKv`9|2Z!=Hwc>i+2kU~*bNHb zqX`1v2skQ?C_6l%LE&qR&+6#j$OkF75WU~J*`nwb=L;huN6l;RyVf%m%<=JaAXo!hADAW zXsjhh3!&l9iJnByt~#zFWM!(=kcqT%xb4R3v5<=$6|a7$>#M>(OC$vyj>8k(Ha)7U zaTZLSXS7_8gEiT=b6x;70zDih+ zM7W&!W&0l*N8LoL_?x=F`2u#r_DZF8;Nv<%qt8aneu;0qxP4VY&*hZ>xIocs8!rX^uTVgq#nuJ=J@jNF&MCNc` zP?q+|S<6U=<>@RGy?g()-QfNMBfIWDt;)`=0~C%c_0I0!E!AI@_b+TAY)&#za7F0~ zg$yzCFC-u9FbR;?U)Ei{GC-00F73SX#$!T2Fi)6uy*z2#lMpL~?$n+rA}@L5W|rRz zu66|;f~49vbBC>|s;zcnK)kEhyKtE~s^0Na-xvX%`JrUiwYL2>Ext=W$BEhBC( zB9tZ$Aw~h%DxBiB(qHHI#CM$6cu9$i>a00=IXRidIGH&)d6(kej^^0Fb|uX3vM!s)`a1>fD7nHfEM%?M~_oUl}fNpxS7vnEcuL%6QFb4TaZYm_g2* z!=z{z+B2^q8G|W}EYV5eRGa8m2829ld$#+_CExtzN#6P=aglE~T@olmVWE3R`@gv= zu1V{9Q2CMAJ9HPhzM5CtSDtT*A@an>=@oQv>_M3b|0u~b!1^?trdPKT5@}ejdFy|P z>Du{acZsRxvfhP*)W9=(ZrLVAIh-eMIgt>jz&I5?O7ZJLrd>>p%IJFdNUywce69ZF zSqzc7d@HgZwK%qCXDuU6nXmD0raIC0*DIg84l|-R3Lt6UdAB`J3IB;*Zsv@GCgyri zS;d4iCG%&rF2^3&5;}rT{$@%6j~;Q5dIUOO%#WsC28U({pfg1CMG)F)<|P1Zatq^ ztDD=K*cddR;Bk~2rsj3@bk&pm9mWn8YgrV>Qe~&4XTl?5)kk+=)bh*p)+Ga0$w`IE z>ikhds%g);P1g#8?vM-|glpqJK&tVmWxg92T3aI_HzuYwI`x5sgf+Gsff-Dg4-N{l zVlUw}|B+%z*~y;Ckz)79TBd6>owbg2<t0xjE5;tH{!>y?V)`jV+2T zKii>&W)S7{<`yO;$vL&QHiXo^#ITbS>v|Sjojt!>l~gakQLXLiZ7t^s86sNPLgCs9PMh2;Ph55Yn`_s##5)Tv*;7{cgu_FI^E^AITJwzf8=}57mfAw>DhwQX z+XB0%>Qx*+;sLM>+~3|jpQ&gVE@n|x<`KodL^?Jvj3eg-(ahK<0cB~d++&Al6HybZ z4h{~dIujC5p$DV>A-;&u&KC2VbwIkjPSTIraBkw&O7|Il8ar1PY0yJsM#gL~b zBt3ZaDE$%|nyFNPW@6rve|wRECSmFQt0$)p+lU$?k4|7Z&dNF!@_&9(*TAI4K3aqv zC&+!%aZZ)OH%JoU@Zr`-OV$&lD(bFK%8BZBoDRByrKR>0`f|?Zo$_7OsGn2-+UswE zfvl|iF*f8lPQ*+mxo40@xa>=$IgVtXj3w zZ`lQ#CR0=65Mn-dhmh)?P}IQS6Y7urjKVfU1NY5Ck$@#k7?(1PSGQVkiL;QcQW?E4 zE4`o8zZr+GcS!1Yc7B|>53b*Dd7cIR68VpYq75K%G168pZ{p`8xg8>t zsrS)FiGy5lt<0goYAY%;B}>svD^rp_GAj@{2Crk$er;?lF5p#D?(dKurj7` zmT5tn{@p@l<(>5t!dXEWlr6#jDrBDBa2`P<7;h!YnLIvxL>t{}t!vHkt-6C3Ej=FY z`tn`2x_B}XO+LlNh_Faj>+09^yPrUXLgJwc1qH8Vt%gHJk5*duK+cN7^BHW`=o*&i zW-VeaZ{>>BkOjz_npiyOgxn5))MtbnlX+9*qjMHWej?250oI5=?T^aHO6Bo+yLEPI zT6&~JQNvB1*`2Gb9{X6B({67Dyl-E3bn>~IkBwCzNJlNxsQlSb`)-w%?5wn$zrq9A z_(lUJ{j;2Rk+=3`yhJD!$I4(rDcaR#cy9T^Pe$C`_TJd)W#nC-QQ4D?9@wZElGt|Q{`kgJo8sEAkZFAEK7L6{wPzW_b+manzET=1D61)Ga}tJCo7$cE_#^KaLaF*VBJJ&3@|o%Dv9tyBqhBvWQ=U&+2uV`d>Muq4`D{739kJXcG9c(?z4i+`17CV zmtMtFTS%a}u<)#a@s9F5r#U~@0eCO|gMeQ-sioCW|J8}7F4E16Ixi0x+_KYp|Lq)uX16Pa9Y z^^~R)w-pW`4$S7~bZAWH?KJOvG7)gyQt>2!&}nx_xm`+8=3c{4szOz9T@>(?*16&0 zkS#e%x_7{6&(v0x6*tgSEr)*K`Qf5nBe$USe5V1Cy68UJ%WgnXdgM-TEweMm1DuNB zarQw}%b%;vgHI~WH5!QtQp-4_env?3dLK}q@K3;N(?6E!#>Xg!2XvAwmLcrNW`&~d z#58qS6*4V}N5mGUICt*06?(3`CSkqzn1_#@9h8J2=?uX!Ny1vEK#-LyN?sryAmUm< z8Zi@9|I8FLEPK;3e#eZBPr@Ll+6j{4HWLHF#p=zrKQ^#Q`c((W?Iw0H^K@%4c6LP` ztLT>(D9xt_-`cPLB2FH`$Hy@9kc(2ppO2qHa3~>3pv0rN!q{@T0xE7GZmF=%_$}Ao z&a_ZCV;*x5^nga;5DmL$;VGKnvhW%s zK3FD@qS>3GKpTE=EU@n?j3TCmOGrnZAL>{{qU4|wqt4cLN>gEd<6N!vZ;o}>U4hxAOlLURKQzjLgilhvKP?ziKsdae+bD{8xTO#E`$PWK^t} z&ugeJM-d9ygywx)-IYc)7dqq|S7AQ}&}P8D_-vEwW; z$lhb^q4Y0kxP2cv<~_)o%m!J>CLbabas27tBAG^Vp8x)h(EgMo;QReK2~r9jXQ75I9dsw%{A+KYY5!e_2J!zr606Tnzv7cXsp9v}cYdZc z=qV<^L!L`;;h4#pBY%CPeC8MOrl_xf1R$ONJ!R)tPZx0LJrt-6>A=dTee@_5=JR#H zVwo23lF_b{htnSB1C=nzSiTCaZ3qG5P$z``TcRD!506(I9E@nJoeHL=!y8y5Dm2#! zDufPS_gT1=WPGHs+WSrw&XORM)C5B01_ds^qAehkYJ49GOuR7&Mp=lFDwc} zy7(|M*b)zvkm)UxvPyZ~R>N^mIgF7X;}c!BqXJ&tWl{Y$tkUh7GgGLjsG9C&@%#8- zOYHEnZgrDxWG9nnR^##ZgP(zb2Rlqvs2>AN*1vLM!b58u^)3?x~ zEl!@V5}{-u*r6ht;)A&uA|M#G05yI$=bvkcR3l+uXEkel(YrOo;$nWi)2T5n2On1X zmkL#>7IIq;!qTrM5?o^OT4xlvJx;8>D|`ct3dN<6iY zeJ}47>P$?C`S3oLCN(3`9JYqO4`HKZ4=f~4NKoK84fXXicu}5Yblb3HjvGhF8+;PJ zO%|m7qzqe=^JAN|f(0`xM`n`W?!+MQ7nthS>K7%j4B)n$QmV*Z4lcuAPGXC~eHv#b zHPoU0dtq(*j_hVuTb%c}GEmP_7zx94+$Z5}mUs|;Jr|quknMF{&kT#o z#mU*3F&StO=uHvtt2L&n^EHk^-ls%Z+?BIj;`SN(MbdA9WE!u{C2xs}GUX?Y1|G@u zZe-KhZO?}*&#a7${>ncdgV1p$Fog%?#@(l$;zYhbdrmm|ID0QMXm2lxbT0x60+y61 zC^4`{!KD3q^{1K2$f{HQ?Fs6Npys(fw}JO|&C$^jZa1cc{0m`a`3_7{Lun#%`zEdTw_5|;-svC+egKLdC!-6F$9-G4L?{?OAf5yTz#ZonIHYgfaba&^ zuWy{QRfM0Fd01j3V68MU0fZ#{KfL}FakZ%0C>2;q9x+ul{>t%UlFX%$;FQTu6^U?n ze(QFkrOON`^6s8!D;PV(e1YJ@yVGn6=)DC_-1=XT; zu1HeS!OgteU>-`p1^(IKLEdBCe2Pgn!4l7KpVo-G2j#y}$sy?c_; zqSwk`Y>MwgnPu5xJGVi_vKgzQn2&^T=8X&~nK;jv{MBb3>B!8!WpM)DWRi9QC3$w1 zegBA7E&-mxrD?WD^hnw8nY`PUL1_k7&{|I-<(1N4D~n=j9=zcFwpC?CJ9 z)XSiEK5V+3uM^tS+?bz%qw$>V8wmFdMJ{We9?OAL|MZ!}y{0CC@yY28?}H9glhzMB zZ`AHS--^9juc*w!qWcY+IW1X$n8kgIkCe%y*7w?*gA4HSG29SHX1_k|_QNqqH;HU} z&;2T`-jgGuMlwRodr%$8pIB}A>UmeL^QneXbC{U?l@ zN5=2zyw&)Vw*J`bP9h6hJ68uZd)(*e5up5jYed=j9$}3ocVjIX67IiZXvO66TYolA9sJ$8zD*}_0iV3}VB8f=wZkMZ0f~nqs9%RPE ztRQ%?4-}<~Ss|XOD1lTZgI*xxD^4`s4_(TP&B)Z-sneV9!N?e~B)Hlbx(Hwpys$r5 zYGkJu$Sv`?I7&|8arC3LAyFnL__&%7B*fUPIn1& zMV#bgTR`-fW_lJ53sN!bp2$r8Q#{-nVW~m8+YN0fkO%BD=%B$fiXeyB*3Sj^G>!aD zRAN^B$nCh`PKgD{#VyoH2v8hiK@n3gqRkO=GL&yCi^^#TF>yVYg!#kBNnRtn3T^EY zoBr75`Ztbh)-O;Hdb757O2b25;}5-~Ej7rO?CgCS)4)3b=Hs>vS2Uef1!}IStlO3D za(x)ZV^O&KE8^ux9LRI>|M#iOK@x`{a_Hh}LxU;N%bWQHbWzW$fX=i8l2vbdTL~BY;9|5qy(=I zO@P^6lz{K+4zoCkdm|9mq6)d>X?;-__0Ysy7SiS;J&`lA!i zxS*rx%@~I^i|IE>yz(<{^V-hV7k}rM^C*&f7bhkU;jf*-eG3$>BKYc00orb6{SPviiu?u$xooH61FK$@Xzlm@yY2q*{)Fl-n6jirA~mwzez6N}^|8 zdfy+#J`F}bbe(|or-1}w_PU;06pmd(BlwO>ToNi#asLkTp9wPychus}n)UD~fg~7> z_d0$HQbLI2VKQpg2`C=%SWO3zP7hn3(u?G2OXTZ}SNCoK$A%8=EPlF4T&WiX8ZdfE5(^ z{havtxZE&iz^y!~8(+sg%q{;dVJ< zMehk3XhY}&Y3pv)UvERzUr`Z`21>M^W6%XK9u)xf4)ETtNBpi5Ey?i{>~W>eN8%is zME(sXf;;Q|R{T~yO9>2{+>Rzy*OCHE1kRn!l%Nj4I<&qM85t)C1S85ak=9P~s;$8| zal(~`KHwrxzUKcWkR}j?7dcFU33iaWh=LW+K5OBuLtwhhGA%PR6F{@WkJkEN(!J-d zbUI&eJC*m9l~omB1$5V}1u5>Nr^9Z6ez3w36LS)&Rt7!ZT*eQb=y)6hr*PxeMKvhF zO)$ejG%?Y7)WdACqEq&f>toZKF9I1@AxTxZ?LTl~{~zuZ z`jUU)JrqUk0CZgRc=>~dSsG`myzVPyp4;7tS&1UvO=_W8nV{|ZAGM0~MHB(K!Y)r@ z&^7o#{dR5yM{1$xp18`rf`#f__`-2g=P z`G_AU7uTcPs{pT+`O(|AZwVfYWxjSj#h?MejL@O+MnKoEtB6SUD26;n}~@vMp7H= zxE&vNuO1%nCtIcYfayNE!(jc`_Vb4Yn)f5o5Qvl-+2ducSLI^CJL=tL*xlSVdbqp4 zm0m1=mfQ&DMhF7*?E=AoeA`ppeuvWm0BYxRTA~k-yNcv};Sfn3HhVin!y2n{#Cs3p zVbxUCiB)-3VvCy2lf}Kwr*M$N89uXp-20sYGdw)Jo$X}@a5*2k5WpR zX+)azIb?2UwXaNxk`6DykRytQpJ^l-3$pPcNkdCPQSe3z?Cmtaki%0qY`H<~{GZGR z2f9S(Goc~JyrRN3=!rpg2b>J7e8u5oGSC2JA*8dhWj+AFq-F&RVA(H#+7dSbIK}{t z`nq`;0IdCdFM#Ffbe-mzbh-NfYNBEU8O@ako?SswtoI{;Y7A3F%8P>s+$ zx@(-e#nlI&aVo{z3}%Z@S3f)!24OlR?tv0MJ3A64O$^=~Fk7!7;?-J6PU^B`;%McReVUM@;XDb-nb?Rt+ak=#hfph+&tl~56SwaZg)a>ke zW9KCYSh4`N0jQ~*lBs8@x$RaqZf$Slatc_j^@c}2Qq0HDC{-@i+T68+kJNT-m`_TttE+sb+D;?I?v zVPZN3Y-~m(=}ng%D)k>362x`7$#Y3Rp|^VP_W?gUTu6r5~=XQ2qx5$Khzk5c-^i?l+hN z4v9D>#RsCt*I!#aG;8J!TB9v7k-ZLIFxA^X|3V1XIfd)zU76u5GXNJL;@|&i&&C z`SK_MG2;WI>djexF;-KBXS(eD4WgATk7tyRp%HG#&(CjYNXa%!18|c!1E4Jh<2wK! zR?o!5Z)4!T=MRzgPF^}*-eg)yXJQ{=;$zrA>Y{b3wKb47JoB#^D()Vjbb%Ll!!$zT z+o~282|_VA=Z?z8%2v39&jsKTJsLHwqVkl7hRT8;<9UvUxSOA(fM$zp;cEi{P$}1W zN&LhlE9c-(UHuqwGT25M84&@%?U%eyP+kAozZ;-NfW|1Z5|I7c@A4PGI=?aN0A%=< z)j(_K?>U~vuS`C)|jT676Sn4yb zppNt3#*eU$-QrFsS4ZJ9}AS-57xnT2~iC5gieK z&f{bJAd@!rW|STW#1Q04$+lZ9L?YP9l@2}Qc5UyZYPuzOBq}I;*HOjgpYpKY_Af3h zc&sQ>=1-#dm)qVBCIB3D+e3iB=gS&l2D@s5$hm=Pf4}Bg9 z)H8)9$K;>`%AWZSI~54?P}5VM-siw!!!hXoHTE({8H5AdyvF>q6vk7p!wzhWg4|ZJ9fH33rNgWf~>l z^I7Y3?P)ToRdl!+kHiUGZ)yp_vGbz<)w4#!_mj9EmbHS9Cnst{_5y8M^`@XUUwY|+2^ofl-DO-d`j+!s*w z3EEr2pQqhssIJdgf5rE}q^p7o-?~l)PA~WhgAM>O{ z!sBg+7OSjno9)+MiLA2Dffv5}60}&9(IK?wwo7g4;K-;9-qV45i~?^4sKp$h^|I(Rg&zWy}W12yi@hX8zt0 zjZmWQ&l2%Cj<2N!(Mw23$m2_l{G;}K!nZ09WEHW5iCY$ob#1^UJaRowG8H^i1f9FE z_%S8?XN04VY>g^YR&^W?p0+SoO@^S9!NzeoIVHmZ&64*;O@p?+vz`&6w5g_c4Ill& zc!b4<`?g4f1q<^M-+s;ajW8mGTX_6FQv;a?i;q%2%JU3_ZPxlM#Sl^Ek1RAh**9-K zL>U0Y%5wdxE0BN0Y>wcs&VSH&U~yxZPoA_b3Bn)r9|2%bc6N~3ON7PU9E!abCT$|H zEEe>_M0G$pV1D=L$s76qIu9Ws<)tBwe|^IWf4-xd(h@BFHL);U)|@i*RQTyO{{FcT zyKX2ix>_EoXToo~7j$Y0gAOQ+)geF|Q3%;1hwZp-4gX9lCL^tr0oH<8@f(yHoHr*4NQHm^5H0YPfJM0s3{f< zB~?2e@^s$gYx?(AR17Nzlch#`|@5?2(8J%%3B0??9hzW4-R~X&{AdWyfkqr=pQ9; zL?7)K+gq^`LeMg#*n_*pk{zJH+JFts4dgR5Q!=C!1(UsT$7C~iND%%VB~-h~z#mT9 zHoCc>AyANA5@1#J?eX!WNAHGm6xDmaj_f3{J&KO#7@BlX4;dLXS96{SpGE-D6dww5 z2%>ZPs+h==>Yc?iaBZ5B-}K|hUVrQugjiK3+iHNT*{NyaoiY#M=u=I5jUpr~i&-t0 zTmDRUL$%gBM2IoM+Qy~gpFX}PQ%8Gk*8k9sH}mx3kBEt*V8Z-x6hhD?xQfKcqo~L+ zyTCVMjzGX@5BDa;6=6?vBh%WZ-utWt@$1h-vb@EHFeCjqbVM4r=Q=< z$Mu;-=y_I;v36H;?P;cAu-a)HMV6)EbB8v`KnnI;yo{uz_-`FF;$RAu?rzGZ#e)kI z;$Rug1V5-@+}s@8zXQ*JF?9Vg9mM}VgGCDIE5Kz#q%tzW3u?H*4fQ+(H3WvGAZ;mWtIySQlpS zcL|sH@c8?pw+@a5{7f*PrOJsIP?{#}EtxQa45q_7`-BCCY9kG2NGIn66W#HdPt;jT zRa+QYVl`0b%18(X-(M?4nY?NFVNFT*JKU~ubKD08k-=3=An#TV^lpA_SNbUh2a{Yf z&BKz2hTpts`_iRvsmfw97))0J_PO&O0e7qXUO0>1<}Eu3NVpLV$APD8g-n`JjWCPG z% zKey5O9YnB4L=chUy66q6&|?tp;d!*FC~3+x20{=ua8k4UVYDZ*0yU)Y05#gW&^AHv zT@(tz6E>+vp$f1(StG2or-yv**U7KVbL_*q{6VSxzJ;($7_Dr|)RI_!eOZ^cr=6AV z8`V>4`}vpAX+dhI6444uZPp8L(1cgYN=pMh+@tjqL^@l3tA5)0cdHmN9<6|%EIukcFU}iZ?F5bu7qB!JQ9aaJzSfelevezA(b!pN{ z$Vt1C_}(oDfXEcQpc!NiP6ayFQmH#q0&=g|6_?gUF!=&%xbZwXz{qd9W_;&8@7SU4 z*vGG`(=$d?W%V|P+BonxcLhbQYRg-WK_I@RCtDP(CUVf;n&0YTdGZixC5DZTf9Z#Z zx5i^|oHb_9=23EtH(`tAf1HJ$DlLvxm~M1F?C0^4Y_A&29|8Qzh(lgHPCoqMz2V!hBr zff%|YT2ChJ{9Zg`$;nAso>P@Ec)E_Zw}>(5YZKFVBz&|!PBy_r&Y7)}rWJ5 znYSv`Qg^`7|Syiz@7NiC~0b$j3cMVZ1N zT^?Fh&s5sp;S&1I6wUVGJFD1Jc0g_VkcA+(yeS3Tm&E5{?*u#+ z;HomU=y=$_>SBg{`sPNB%!FOiX#41nnVzG^1d4fqhgc5(S&=a`!^0aTr|1=rWbOs? z5qg1=jgUojVd2|_>Y&L1Zz!DkGY#OqW-dWKn?eW0sN>dsS@f7BxL5^6MM|+uV6(#T zwA>ZXZ)}#UK)oXv;ic#p2essjd%$WCdnMiTCyHTGypx6Us3dcGMg|_6sz0h^Y2Q}>;p{(x`j z(bjmzXhp@F_7TGueRuhoLO`UQO{D%VB97ho0ks+~;iw;|pEEU4+F;_TDc)`EO%0`Q zX?I|wuS{y&wluA|)r_++6oLj6is3Mb#Jz;=*YN_jl!U||!Q!P)U%}*1NSMq(JJ!Bq z^Nd=hc}H#1OhK3aiYUKwZeJc1FwJibcew-u@267f8>8%xEi2e8tWl4deV1 zD=?GtffrpX%Hd&6FG+Heg^_9Rc&|cB2pQ#3HOsfZUuV1}ew`|+vg%LIs+h2+FVSj5 zJ4I2+4NX-xrd*ViXXey$6VMr-sI_SSOr- z$twhPR=Vxv_?+5>5E=|-PCC6-H5U-$wiHIET3EbAt}Pq+=Q53Sh#)QqDCziSV}W8z z4^I1}$Q(b;uo(Jw7cPM-t)QeN@fQkt!xnd}903~VJoU}09D{A$3bZMA2s}rjU?@u_ zKuS--L}|ayDs6=HObG3)c1mXCvaYkVk@iDom)Baw4+k%M4o>aR|A3P-#xhK@!CW45 zzf0r(+m3$*0MBCA^ynEUo|KuEmK@HFA&@Nmm%yL`JyqFstbWi_{o;VzQx=ws3to2N z2`|}g+CHRAQrdJS;-7v!^}~c@|3GG>emcf#v2>0cBNMCsn9ni|1S5D-V->Uii6{9+ zNyY!6>aC-q-2OLE8l(}CkW%VMBPlhYAkr!lk^)lF-3%>_bcZ4!UD7d%(k;?4BHbMW z!_3{|Ip2GK_pEjP(6xN$-TU49lh5;fZslk&VBOQWft%mn*87?V@jC)DeGiypEIGV{ ze;39>vp-S&Ag^%R=)mFhs4QZD^C*9dUzM@htxwX|ybZwno;oA-IT>Fi)Mx*x z_{E*t?xL2f!*>jQiuFj9i3MV}L?$9f`e)a}Dz-LUN&e-bjMGgohBy5@Q7^dG9Pz@2 z80g>WP5}NZ{)+%*sv=+rn&;n&tu?~7a#WoPuw`C@qdEPMMhr{xY2w!`$t|wzZ3Tm} z%8l~OA8usPwW4FqHYG_;68f5tpMuAyh6cZK`yYek9-dF@5O5=-T&m$8q zpV~Kfn3-}mI)$2VNHPKG43UNEr6Ryo!Zv$P0|Hmcm6{;-E1FT}_&@?T${!ba6~U>O3B&ExyBS*+nQs-^BUD7$+->HF)3(J|n z|0w#n>;;Ii@6|p?x>+1I_zAQxY^H;&N~mK*|&0 zbxd@8F~+FG-7*C~7MNRNFUC~-LB7aKdB;VNQe_`(`##1GCT5jd9ux~>)b%C|^gwpG}> z4U{yej-#HB0d7E9vG?GNzRp0{^>Egk(UIXUJcGa>EgKOVk`CYz8OC<^O3OcCv)1}$ zQTAUiCF%awCNB@%%L3|Rf{d-s;GEFE2vxoh&Pn&HirPGEKEdF*nWGxo+gh2wiSMXc_}HDRINS7#lzq+oY0vqa6CrD63Z6 zKSFxgOnCP>MDNmEnPC5azfn}{(I0?W7Bhv|T}D=5x!S66O?x+UCKLFIt+HTS3L`F} z>o%X7o_T(>T8a6jgeCZ_W$C-Rt~pPq-h}(*EfBm(H^=|}tw=b~5;Agy%E@CL%pVV#c1{U=VFL zqYUR@UnyQTc@;=W*YMj%)VQ8Dt3@NPNC_)}^zMIq zbvLSrhL7DpmQ_~km^f5172l4T z4f6b0Y+=Poe_%(*iudQ3i~Y75IPy`)gY;w3qU4k|iR=mMjvzK{LI1JJ5tFh@~YzKGtZ=qBEbK=5t)zGyBYTu^@wO(<(NKBFcrAYON;aIDCj)!*A! z&>gAQF)@`A&RtG&zee@AO#TDLh7yqhL4{VYtcitr1zb5i<=Q-$e1{wt!>B(snX^xO z9B|uo_deZ93dUH*u46`?tNV;M;}u8$`xRi?-VyK|*w{~K>G!X{;wG-pcCD~l(<|fp zEX~=TYCKj(r5stHHf@Q``o_%sOZI`Wd3*?+uor!$D)L=HqHrYm+our}^K$^B83Y0D|fl4n)Y^m8h*GS|E!_eV?k zrmq3DjHg?r*e?SHoPRPLc{**YX-w5X|A~$PQ+5F5T)0BWUGfkmY@nWUzv~k#=0asV z%z$G9RB!%XCbsgxIBpQkZ_a8YRcrTM*Bz*~(@8#FRVkK2i~482$Dd%n}2gLK-jmub*auK>e#z(aFP` z*OGxXligh;#_`1cqyP9rWX{HYwJ9RpT?MOR0O$YHm5X)vb{^zg;C)6RaJwU<(M04K zKqy0VfjujhU_;R?QC2pW8K6Zd4^#g9U}wm;dTWpdJhiWafQ}pm5T&8y-%IsT{<`p> zlwOLV=Td6ycz8H6mwT4DE__@ZS8l^8ylDl17Xqi39NzvB`UiNX#4955#a+w!=}CjvS9ydhNf5~#Uq`U~iS^GLPzT$!Sa4v-r@e85LEZ7n1LN*4RD>Er$%6Y=e*$kO zxp7sHV89kjfr)l!ra!OD~ci!rIkk zijQ$GY=!B!-hlO&50qF+FuaMP#gCr?l}8|LN6Bw&ODGdOogiTQt>k23{vUqZq>CNyHfJjn}S-g@XXSc*q_0Y|x$bv24d+ee0slFjh+6g=-9@LT$~ z@F!!r9R1(BNosH$7asy@WbmywFH&s+nLiuyr_6&)oXxwJoLb$jJ?+n&4^GQ%u|WSVzqm*W+)%e`h>_Ktr)jz zGpP6QG#3*|YYTZH-kPw->QrQ8bdA*GSv^37c>_3w-WKd#lO;a%!>JH18xaORAV-7sJm}x`=0@Bb5G*e* zc8UNY5eBq(yKU$Zc#Vx0BXj7Uz$0wQjD{>C@8cL zv5wdw)%BZiDn!xMBvDZ^XcZ48ifH;yk7q#Ob9LBj9^_%~UOkum_k`-b##6Erdb2Xhh7}QUf%NmitNFSx&$}PaD#wn< zZHR1oe5(FOLZb>31BKuEcTMdHEAs(oqWOKe^wKf(MBrUc*yVpS0X)*}4W*cm;G{DAxKW4tl9_NKiGLvefo(64xulwGc>S&VHKL;_UIC=X?99^*<9 zmFq-f-X!_IYen199==K@{I5@uS$z9JiIU`mo(_vl5bvfSfn<@FKCpLKq&K~1!>t_T zUyCyQJtd*Qc8raJQ*vFfn2w&JUfgA6k$L~C` z2)dbbt5>{C!~~d&GlomH!HTew8(?DY`dgCnNyla~IH3mzm^A3Z8M6q@)(mFsufI+4 zlqg3xK`PGu&wzYFuV)l#gN7?(BqWjgPe zc*6Q76&98PHuy)?sQaU};Rrok(3B3%WcRkuIidTQ%Wsbdt|O883?R^L3Mt4q7AxMw zW5DWE#x{p?gm<~V?@%@tNR0xIzwzR|@+%OPa^C+a6-|C3_xl@5Xgd4B$0>};q`C_? zcua&U9VCcZ{ulLv!-ukHfR`Q>l#0L@^$_I?OAt&lbUe!1ZSga}+I&uY=tG7ojp?8u;NKAoZ z{Q-*b=^xcKKs}z)Iefu)l>sh=j(XX+~@Cz|9DM&&d(SEYEx31`Y}(4)@WoTO;$qcZu5u6yve6UOz<; z*G61_zIuX+OhXWnLm2WQ;C4}dA9!IFptTcYOX)>L|A7#^fH&_cbqraB(TCkvMr==HW5B3U4c7{vweERyi;+{mb|X{;laS5fX zC6H$?kRCz^ZI}E-YGk~82(*XNWV6J_al7agbRMC8$8*}W(C5KD=Urka2VG}b6+4Be z1GK|A%7*n$r##vxZX!f}g)3+vTQaAJZbZ=cIsg_bH?BJ!MKBFE1=D2Z zy%HUGYEBUh?RjtFy)nZv(C9xwG;GkZThDT9^s8VY%&_TF)N)gJzmn&Z6+r5Ykl$P-oS9f3q;>tfCPT_^zd~Jz{_1p*#$aE+CCtwSLDAM=Zow>b zLud~!Wo+8e{?#2Qs4h^QUS?{SkvEsxq!xIkpjw<=D>Hm)hL)CG6sMNufLc~OQp|Bt zE#9Zza)`la1(cRT^}b8ZNy(z$gMC@cYJPABxj>p__(PXNd%En?;JY9+OwP^tS4+zNb(6xc(*-E9!y;_vfd+D~oSvIwZ>!kpK&6x9xA3%6By!|tH22mgGXQx)ekY!^P9n=`&z(&gKf z|7YRL>r;)RQK@F9A;-!2&!z}~B2|NKnH)4=6o@;~jK4RAIC|Jn-o*nJ^ zdvyCA0hH(U3K!(Y{IFv0?s)WTCy_qj?u6N~*(6x+z2ttiFTe4k+PXK#KV6fcDfk}pUbZ@z_0SkQMJc?r0X3onKZuyO7-%ul zy;_2MUh4AFIYN^?e6APZN{;7M9F>cxDGFpUKMh#LazFEoO0J(v+Cyj;wJmY59W_br z(a#)%JRjtti8ShBd`@*hVB>OPUw}X0>h)t*5vG&)LjE#}AIB&D8O5kk!a4CIio@t0 z@%CqapO=vFFHD|PLKNVwOYa?z+z(O5@HufR->Y%d$U#YkR9|s~Z)thL3$?#_z+(#b z5c$_{Pz744rtbQHZ;goze^lQvB{i+VkyLmRLs#R6I1;t;U%mqeb>4gHefulvxkh#2 zhSW%8Y-VOA6m^`(#~0+z_W0|j8#5#zo6+z@8!v`QO3aC#G?DXR25|7-IYTMw%N_B* z45rDszK#2)`7H$KcD79)t9X<)RKQ(gkm8Or;i6g-L9Vp_@cF~nt{f-r8w~{~nhsLu zYLSG67KJFZG4F*ZX-~?alNJNQAAQwj87`ETXU*w($~*4VeYTjSc{}Tv#mh}Q;CD;M zuRZ-%uRWtOaeHs~smg^`kM=L#r$(-{6^j9tBu1#U%hPx}$SoqmhAL?252N)W`MmKf zi-v21Q~|v&$PYtveeb5*ZP#75)8IZsMw%(0QhHXCU9C@KV(fD-_dnY*l_uCH)u-xJCak~3Zmn4pf{ zL6AY&a4;v{wyNFZ;P*G#yaED;jJ5$p<75&5>U{nBerIRr7}gRP9Q>?3_{HW+JzQ|K zaTxA}o_^?gP&jGL&J;krC_cG)@|y)nJ5?t zv4tdgnjCsXIkLf&yjS-HTm#ug zK`bS2Tr$)e&?RY7=D85HeLU}2X@bt>LkGq31RGor3cg!J7emRM*J@K#H`;9AjoVl7 zqS$3<>ct3Y-0pSa*9S3WX%(674V2CZo{q+8w3W+7jwio$(A_ z+BWWyCq!@hb))P%)*VKro>!gsw_{gm+x~i+0ns3##+Y~oiYIJc1R#NG`)}Yjmqzxe zwa9p}CJc}Vpcmg+0=5m{{e6AT&4#{bJ2Nfrwn|FxG>ThKCk+G`*slv%uB`z_!J*L? z+ydb8Ik|Mp^$xS(NYJUe-i?PMmt$f`T~+}xV_-laC-6MwD_>F;@jQdf9MciqwqaUx zQBn9jFM>1@pqPQ-gHG34kW9*l+%&}_R0xFvSHbeJtX{Gkbh&*@Hx+R8W$id%SN4&P zGKUiopHJ4TyH?>Pr8~Pp#sXklM~!BxU3UdkGhS`y>gV?Sx(z|)gt_(=jM%1?2YiU( zFYQRKsO7Fs{`h(epC?n81j+WGx2JroUYs#IiW^-SrG{E5p+yR*<=wowE1EUYT@#Cd)WZF(Wy%+|Qz95xAls)z=828U33b(}DDYn8w2)mRFuK zDmt2i>B!#FWyT_{!UTpAhara6hO)%%XWjPO&<I4eomE&(y6)3v`TbpTe*AJi%tF zS7t+?9qh`>J@L@rfC=HV@j+^@i4A~vD|7%L+8;1ua zJ28XDk8u&BpifD1o0pZv`E+YSe8ElY#fzH=$|@M@@@gNZDS-csH0F0;M8Y*ES$5QF zqCezK*kXy{aOJT_WT2iU4`Mf|)$cpUkuGvdJJ+&q23-~_>w5GB@o@+}9xkHQf@Uv4u`zuoG*eGfI9^ws5J^qne=kYP!w^Gp)qI;bVjnK=@Vu!|k?{2=vc^80N=3r;9 z=FQ567u@Z8o>{KAxezDSllc`mshGSd< zoZ*s_8-VNARP0+`bm2mpM0Uyardjr@ioz_KNY;+R+oNuc~2L1Bx2=XdtVSi6gORfXoafi5V zzpHx%UzTpU>GOiogwre<{vK(^@96g0BfNdPlj4QH$Es^pncEkl&p`S3bDuxlW9Gd=B(uE2v|U3{QPI~! zfJz@hEAhz4$Vf>^InA$AT19ugFf>H&)QzBy(qPDaG-^NZddCVdjTDTGnEYKM*f}^V z44aQI{_pa1yQ=L-r5&_-OEC0%+Y0S5rpE6M<33@4ozvB93@g4W=Nv4s8L;PtcQo z_9%;?40_aUd&{DI2pKB2p;gFzix&-5Rb6bnpumyk^@qd9`ZGndJU$be4~CZXb)YAq z7pM=%3>K#>0gUPQU+4+Wq2YT>(uQm3ePjxS0AH^tLFR;*ohFy(|F-Ja<{L=x;~^JJ z1tnJn)B|dr%D+}86Pdp{n=k+8s7=brX}Hj;1<-wseRu0mx2GV;gYO_wKzkxD4gu8> zpX4^)6Q|H;Mn(&Bjqx2T#MIv>O{cLW6C_2my69y<6m;u&scDrk zScVOkhc)d{(t}rIv?u9E3icz!BzopWuHi}V$S`@!83c9ebsg*S z4WRo@I+h*M9ol9fY#RS893AhzL&nR=Oh`?kH1lV2pmTg_BCR1W&jOt5XY6i>Y?C;) zEx>y~#xh-{vUR;anCD=8RStdS;WGATTfq3I(V4uncHKk4yNYR)Ubg-gub+z{NaO9j zk7x!1Qy>1Q zZ4Ocs3k(nDtGtWL0|X;Z4;FC{^f&7RJr=Of>zFJpF|4D+kbiOcwqgb(LzkdJXyHxE ziY`Mti}ko)0)MeZdU+w_mH6C>6gSl7^kbRjaNFCltu*9->oV~q@{LXEeuU|uugC4H zZXYl5Hmw&_5;XHtm!Zolc}I|IvjHKkG0gx;IIKUtH%n9?-n4Yl&vcuRqYLI!5}MuO zqoQdW6C2I!UD|v84YP?FvXg@uuKV*Z|6Fm`<3qgMy6Dh~*Mhzt`CX3u#?bZ7u=5T| zy=B9Luie^7euUap6-Fy_cbwNcwdV%<%w73y4@Uwd(S~U6;T;5O@1gfT2dEEpfbr{L zx^TJ+OS^X4y-ovKzLw3|=5srXBU~*Rx!k8zoS24O<_D{LJ$(Uq@1j6CjG69l(uX6d z^EAkUi1I!lTqSX;|FrfiXguGUIR>FDS9NVub29?iP>9oStcT39eiu74v=CNWyl=~g zcmY-A<-7vtGG|Ou9y^$CGf}1s_gaoEDJi)NzX##q=rXGTHAp_$;zD1YdwE1WI33gW)k2HXe>d;EPe;yLMUXtPBxzB zXeenI12Pr(Qo!8-?jZ!EiJ}ZcjUA^I#koG*f||?Ynh>J~yBUm2OibKs+2(iA0w49r zryYc7;>ruT4_((-PzUb@1Ym6i1_OFVv_=;21{#9RN35ATfq4i%56TwPuJ)MFVRCij2w)pk=IS2(=9GjL1d_+lymC{D?l_(cZUa?uhnzKO3-^G2VUEPXKe)x_Q3wPDc zJfA3M(@&NxjN*$AuHHdZ)YS{=Z*`js&EZt(i)5-T3|1UYXD+l7pcmMAP6p%Y)>v}5HP2T z!{B{k|DHVu>XoAQ_V%4kc-Jn1aA*`)NcO`TYM;raznSTiX|s36xZ@?m0^NPTkGobQ zL1Av|cK?^6WA95Oq!WG0TZ5^ZcgluRiCPV3r|{^;F^Kl>dH|z^4!Br)2L+VS>osxM zeF1@~xAnRv{-WO7%{IgL16K0u>W-TMI~eSq$NpkYRu(4Za5=)*G*C{<^;{alMX4-N&`mULatQ*1y^Sqibi8q zC#P{HH+oXiep=EF!kRyS7M$J_{ve8gO#W^i37vfEP})l2?;)a6Ws-m$#V||*iKY#vofSLy6Wc0D3 zqGG|5*n0`tYAPz3fHnlG69J%#M0@)-K_xp7Om6l%{ByY6L&&cR{!>$9cb+KKuCp3h zlh^}G`N93c}k3*AbbpurQ#Tx{?Y~G`(lf@~5_CnB#TIa)hnOy{Qp0 zqq(W{$P)dtV|P)#gxJvM?R8#{9R$4ltFy5J z%PND=HrEF-%%JYEs}K#-3{`kV{26Z^JL zo3ggptzI|sdcU>aw)R@pcAv2lc}x+ya%-ZU!m$0#4Gh8V6$_XrdQrSCp^CY?bM8|t ze7!b@`k?D^tKRvrJS>S*?bAa$K`;T%kPOk-)eMmLhF@q zPKuiQmcE*c0p!we9@vmq6Z5UR{2Bn-(ymWCoyS4|cymNTc5i7Pdu3(!2xI@i^Q88$ zkEQ2jc6fw`@$^p$%`lkB{mjgr-QBn%oIh3MXY2-3u;V-;z# z2ZhfOk|4-~0QBD7aC|eNAGY7#GJx(O&8QF_#t!+hNdTad<#lv^A^XnbY4PD%8)0*x z$$)`}(voewKKLGfBj#y{U&*WgAiYAMOmR1NSPb(%cwp=Q5;=GgQe4N(BHqMY9Gn<{ zn50x|3;5JnuZjK#LzeAYv3Mg34Kde#Td!aEh{ZkdAU1>&zyQL%`1I6q1%FiINQPHW zA2ZyGu+T1_&s*9!l>~zL1RM0*hk}zD#p7VI5tc$|)dBc^igcHq#h;qk1;FwwC348G zD}w+^Kai{balh3LBgV%iw|4`qu)Z=^x_ai>~!dO!es?@dzNGRMeDfjvt`qOEOnUCGAXvoPcqP0PS2-s&?i@0JX=A*7SHt;eJR@x)8 z7A+Iwq_YV`VOFbFI00Z)_;k2rf}!(6dc(I>zudo%d755I)an~q55ocHaw>r9{Mg{8 zCnZ#?JSJ^f*F0m_fF~L~X?|#8w}&u`AM%v1n;9R^H4Wx+3aXf!BWkNJo@1GpebZnr zC5|>b-4cy=L|~0*y^cueRP7f4R2Sp26hIV{DOQg7uF&!CuK$HQ)Wrfw&yVHf-&`38Gv%dMp>Ll-Vn$o3GR0|*SB|Q%(8r6h?|u*$Ud1i>X%yRHg4p)&TrUs zP!vW&J81O9$M%%~B!;rzv(i|^GYI`B%yoV7)XSOAf8gP275KY-eK@{2U$!q_^PfLd zjSUpy3+}t~U-73vx_ue;;EsQEUg64Nmn&_+vH|=atZMd^;>abVk5AuVYeVw52y0>1 zUYphU8HL8nJlPGg?(P*HlU7)oG2{pD3m0V!AHZ@WcfF~xA82hg6 zh5lUMgE`LWvQ%%?(|XYB?s%aWJmIr~rs&k1!V_t&mdy{kU&@$`QXmnV@`WsWLavIM z?dZL|Mq>lv=-e0=7D&C*Qi#C$0T+(Ypsvd{P$V!u+}xCAJ6;_L%^m-UEkkF0>rq4v zcigzS`DpsmrZs?sP&!v$O8VeEkB^Sl+7vP;zW2`JRd^BtY((+IQ#uD~#)irUCiL50 zT|{0$&8gc`t>fCbUn*i~$Y9_&^?D0I6Xspyre(a836T|pd)W=7F3|F-6rDLDc6}Q< z^X%uGTxFZ5MQk>;U?vHUi}kB$@-dS1T0R(GjZwSlT!A8DCHMqcn1$4pzB-!W8I;Of z)X#0*nSz--PgmvdsYEwOSAj3es4eE(#(;Z^f+jOoxc6snjGKr zckAjhkw-V}idpV#NM}%deK#%lACc?A^!t1WV+S>fTlSOqV%!iQavhr69l>=|==;JX zd*l(i7>AWu*|=(1O%#LOf#Tka*RF|CS+h@XVlPM!p1O^vXfM`?pbxoSs@#I}E zyGIKI+_nfnn^>r!Vxx=4)aau3n)#CMBfjubj_6(rz>k)?qKD_$c+k0py29Fd$z!L@ zg&e+vYGXsuu$JHf*!p&u+G&pk4Qd)0&{y0+p?9FYD|Fj`yMgz^ryZ?KdcN-mL6OvA zWwFY~_8f2j78QT$%CxlYpVcA8cei162eSiKAeUZB6g3za9`deS?6{m%)C}kqEH>%b zpHz%?FluklQc~8Q(-qJ^d3j&U0D0kgdpPHz>s}|vImF1U<6veGpT%sV=+Bnxu@KI_ zu^H<1xC`7DUN3r}Eu350D82wY*&&nFHawkBAiJcJ>1n8v_5G$Rtjv$f7SAytCx7t& zZtzR3w11A}MHtI|meyy_i${?20H=5IE7I#8mGA{WkK^}TF|5a57k;hS_mF0%e^Blk z(YgCakA~-b{UHEZ4-9?;_Od=piqC71Q}t8|T3;v)ooI11_A!yrLvfgAKe!v;9T;4K zPwKk$gQFm|OoOpbXuMdXJ>QP5SYz0#Uo-j2;EOgF#ccYFR`CVgCAH>t>3)UKH&-FXn{i2O-|2VRAr{R1O zYCEy^eLgrP-eKMgjkCPTcMkWOn*2(ZWeHtIX^Y2MrJr;91>ni#?#;<$_+D+62N@hK#I<>O~(#!S`eciDT>!6Dey29>synkstnyW+<3f8tUsOfVKHZXU8nr-` z@oAj%Qoj<5L7l|7{^k6&t;s3HaL0vfZr(N&v?(zb5J0lKii@SZxPWIhoglz9-iG`G zJmH4T%|l+9REax6GsLfnrZpIg0X7fQnA9wMA;g`bxisp+t=&xocq`m#s&5_lF@q9U zI?vXM)US?prQ7~=77480OdmAO5XnvveGp&r8RoSu_vm%{moL$?4c=^ZbVVJq)tS>% zFGULrui{7ghK`J$uRAUg^N07T4IJd5Rdgolic0r(2zd?9)A&@WHPf^~z1!2lkT+Qx zQTAsH67aT*?(&Rz#zW@p*lgtVj>$}m!_1JPqG#3I*`;uF(m*59qj+tIokP zE0M`~Yr!xbx~Q^8lAP+(f$ndpABb|`*KhEcOr z`B);2roEBwKgqk7>)vdcn!+T;)7QuXp419Mp*%kxa>rL_LvIwWz}|F|+2)X$GPyEp)i<@K|JqwJSB*@P!v( zz904}J7A!yqUE#cztI^qq!=VGm^$5aTNeS!`}W~?0f9y-#lXd;?g zA6C{Ol{I7XVpdHPkK?$(ces^o`IHBiFp}(d&;i4>&usTwKBgFf><@Xr%1}dW9(PoB z7OIY1Ik0fwuk1HG8&6r!IU3=6_)`CJVs`3Pbl?su$>Ah8KHX)gl zoDO7gRTd^^Uo0BoQkkVxtZc$lom8ig`GL7jPaTXK2R_OyI#^Y#S;Q48(dHj#`XAM{ zY`c==y6Uc2c%rcvWO(hr&_K>s2=V{+RFdsYV18p29oYS+v>I<@i-+c)$Ua&OBPmoL zCpk*5JqnQF%oI87+}F+BpZm4bdWxm#y*W%PCewjJar|vrU9Yb>K68#-7pQQsEwRc( zqux6PA2*wLI?iZzh|TFjcAK4yyeS}H0M%X0ApqB?t?x%&B5S0`K(c&=rpTYA{(KCe z^&S0aP1nTBf!=Eql0a)V$(%UimP4{1cwh&P^d1!y$aj!B`;0Y4(x0d=OiqpgUdj*I zIYOAPOJnf{R~fOdUr9)ubk$qy_Rm56FST`r5CsA@G+Yd^q~ntwV}r9UaPGIWXXp{1q7oampHO%_v^O8u6Q24`oN>tXkE*h+5W z7OK$u-J}3o8`|(kYx@gIneEzXF>_CKS|y;y8iW4WmmVt}%JiSB%|oFwXcj8@A$dZs zTjeu#BUkPdr_r<~8SiwG5);f+Rro=i>G-55D*=HdyZ1Z|q^ltqP7t#WxB-iceRGE{ z8i5fmlM_CCOd@i;qhM#K)@|hm{P9Jo9MxWjQxs!DX#IJevbo(NdNacr-`2sH3a^EF z;Sv2K!-wB*RdFbJ+MjBA{nIP(+U|;i`N#ySv-$1XZDK!6jhfR!$RySO7G1bn1_kp) zseygw`@F8?6n~#38WZNrEn+kw@6}N!MbrN4nP&1+-7U{bU*xDe#Q#%o?@QYK*}TRJ zU!EujSqFQs^$&b*91n~oNPU$UZb&L1rYBc_D3 z9Xkw>6YvLfl~W$GiL`JxrXg(Yxk-moZl4t^l<8oHL4oVX*e7h}H6B-wZ;nqK6Q|c2 zIcB3NdmFa%IMnu#-v0bAWK9(NqzE@YXd+BJ6RK*eN2dhNphn)y!>!Fx@sPb!4y&** zk{B}IGsDpbRRZ2V$7k0IJ4e%OS*O88vOgsL6S(*@G~D0|WO>uVwaxKQSV1!Uq4?*W zm-+~p*-MRVb&y0+J~!gh9A%530vcQICFVj>g>y2s3av)5{7uWsX5ZHMe^Glg#LeA; z2sR1xzCoJwFon@1hb3LhuFZS3RJkEhDHVd6{ZP7g^pkdS@p|Beq*&lWPPs>{uyk)q$J~X*D_Yq!wCTbwzdzd6L?6H_3?%L+$3e z=f=q$41A~5RZ}6gb=;nt!ctQ?a49iknDbnBm(9Dz%66-zM4D|+ofW2a(H^|_uILN*~F{$|dn0{(Rh zdvJUG)8#@LvZ{ZOGutB&!4FHCWoh$YoR)G1#G#qhCsWWFuRV|8|jPUh;R#xA;)8MtZ+NM9##kewMEvhHbC*G#{HF z3Zu1EA{}1Z`#nQfY>sElIFdf|)33v_JU~?FjA@+dcYvidnw|L!{w57?=3uEcjBi!I z4vm~z_GtX2N}kauqLFRmf?T_=?JG4j%CnBC_U$lB+q__mADUkpD@u={-TlhtB^{&V zI|g|c+%s=!9>Ym(ujcvPT+Ss1_n!g?@AkRR*5z)49v*;BFu1 zQa2?yv|y_9i?>#|T!&d9JV&bqSG*)0IKG#+fSQz}W$NQ(^kfr(Mq1{tD-o8BJ0PUF z{T3emjWuChHfr>Dy z(h=r#OAapFs#UG9*NJh#;dn5F{uWLK=gq&t`s=9;2S(>9^MinK`y$6V6OlG)*{aC2 zk10m_sQTF*fOhRZ5Q{ErP6fQIJHFn{1*M4u5mbQR^%zqf)K?Etvysp#6o2}J4XAN# zUL>5Q-o{9vDExge2p#hhJL_U}|JbD7uTY_8q1D7C#reC{pa~*xG(ks#Md`tGb*7RC zA|#^gr$AM!_p?OY(h4MuP1abT2xIk^-oDKg1nLq0y(}{7{hFf$fIf9-6v(0Ftc z&>geYMOX3+!TXT5aPzcim=Ed4j9FRMFe>57{Xm@E{nZEE$v6I9(i2mN9h_fTCX_V< zx+q`s|2`f_N$O4#rQvw6iga;w^_b%+VP1YI7|>;vj(h~ea9PVG&;0M1ebX-obSXOh z4uUUFltTRIe=$mt4n$wdBafojO1b}k>W4}|Nbcs1Oo?DHR}_Swh9V$6$*&X!ys6OW zjYGY&-2!a0cX#h#)EzqrM2al|w!(VKiM#$At7*5{s0i6!7x&Fb z-OPd|%<#bVN*U-96MIce2qsbeRnWX&f!Wo9Co_s%WJiTsHaBAa`fx5BFSMSWJ;{LcL zqXU#XwWuU<$&M^WT}m0HeRc@d9~-&4i-IDwAknAn#E&Ytc;75koTD7TuTH#APEJ?& ztIZ~kDNlEK)?1Slk)#zyW8Je4~(R*W)*~_j+WwXmME!Cg}Hft`HmF3%3 z7!BX5$;cX7V|M62w>;80o@tcqy*fi}C&v4}K2FRanS#CRIU{9D-q(luAuf$pab(7D z(dWqdyr+oNR!ig72Crvux%k31k%OtVkjJMo*UwG*spfsXw*aYu@tJ+@u>eG&7G3HU4$jfv4r3;9RY*)j+)LcVA zmFCfhB}Zt5*IQ~bN~xPiTxw8nFhb?ALL$3o+QJ+wy60u_wn4=R$~dh3GA6<%W{LzV1{Iy1+8Usjo5w4Uv{ua7SEq&|7Ro86|ih7(Os!O2^er|iFNJ0?7DW| zFkF{5EY`nK^&Zp8bIjHp$=*+F>}U*FYccD7dGc#G_E?}PCou6;cofVyB7M5;xK4N_6I2(M zk}@H46@wkE7`(=i2VI-I)1Px>B5a&4ds>7qZe5?yq1*h?jo-gG|2q)(JFztp z+ci;J+yl-T4Krdwxu?o6dW;9*5z0V4=Ogw&ZH!8n(-8}9&inMQD=XkSj80C8X={VQ zQLlMkLD#QGQYL#=X=SSSGScAw=c`teGS8A(bWK3n3GVZ0<)g)WP%VRd!&84+ng@)P zx?}LnIZPu+JMHHk4IOR+*Q!%#dK(tFR{Q}wY5oGW>aAN>cUb1U_NHoWRt$BIPlYc$X}gd;xZR5dTT#kwj)`a54j*kLPT0RmAZ)-IlkD3WT%Ar_jL}0bEem(oPJb*6#Bm|a+aj6F?R}B0Go+p^hl>|fr{A^qL~UuKs?`3xf=|r0 zxMKEjFD{lR?Y72)3{Dz;qh{xxD=8gyv%xOgsSY3G#u~G2e~5rs4^6pGf?>OvjcLby z8JJUFRIC)L&fKD7e~Yk@9Q6(he2}XBGDqt{0p6D8jrppQ4kkGD6WRdxqK&ng|A(ow z4y*Ec0{sC2C8fJLbV_#!QW7F1Ee+D$AqsqHICLW^A|PD?N*|FHkUVt5q4UIj{oUt2 z&;6U&cV}m3W@mRkvwM~2*5wax^m-w&>RQg3G5)6AyFVr~8j14PGV`?H(7$f$y?ID8 zzbGo~8vETWHsNM!lgs zH+=R2NbpY>xS^5P7br`{;JXD22Z4xLcrlR3-|aecektL4Ra+()b{$X=mPqp+{}v#7 z0AOnXq@O0CiF+Y&$)o*FlZQ~q>7PJ>OS{AkH_9bwKL9)^X^FV?sJA~oEPML|oX7+; zvyLGj_0pt%u*V5V-oIm;QIWS!EcUAB%(i+ck zqQ}?sW7+r1%&`>o#@TT3qG@Q!(pg{8{i8vkkf^}C=`ItZoPDVomfi#t;ODezF8jU} zt=*F!930|&71Z|Ul@Y@K>?en}T|I%;!fM1i-bRtaS=75eY?f zhRw_jQYCtJjI4jK-+CHgxsJ^{nO>#CFe+q~#Z-Q0(|V(+iB|Hfz&$Gdf~uR7YQ-mn(RQKb@c3;Hi(=Y8)H~4BL-+g7Pe3S2)`DAU zCt9KmG*f)S=62wjNu=Cu3pw6W(pdYaMLjO><*BQGpDfEUT zFPMr0s%tN+yXrc8u6D9Rt@g)v=LD_3hq?qw5Z*=MVsAAG@XFLHtbF%Dei@UoGVQ&t zC_)d^!EWz%i{WpI)Y$BsAoaX*EJ;HNnGEO14vRl69I#C6=x73czdbG_{g)oT8poVI z-VrE1`7NyJh|4l?{%QF~pi2P2A`kRd4WdrV-s+uRwNuwr|96xGI@>>C%T%oqNh$#_ zJ56v$!pZ{8pcu@o2a7JRAuFXaA>_J4z)Mmr>QAsm!SbHuPt?;&A}G|nVDCx z#YIh#%k9ZHWrB3EkhvFbKYbFTM>-Q`{M|;-D+Pd3NKdUqko2WdN8*Y4T;3tk*R6^S_#`Q}Y z^PKqGW=!VYP0NxG?;ZUg3oJBvdDV3sRd*R#$+DDN@9IZrKddKr7h}6SnaJ--T`oIx z{ChxLOg1#ajV+ER_H$RtqqNc^*v9lWh&oVX;E;Iul9# zd-BWfU;Zd(}=>c|$q?cBZOHy#_?ujtLqmdLW^oBP>I*?r2{Yne5gf!?Pw zQ=W>dtFP%SR|?wO-i;rFUP!pFydtNTFCF7S{1l-}Nc@em7)0HXwzgUQ^-hFZ-979Y zQ#xP^Km`x18^7_pP1P5hLh7%QZkZ*TcdD7lg`O`A7hC?R>iG}tBg7x(up3m||7$mF z>;`GpTD+1s@diMM*ExK#4EC;pH+@;W&p$SVUPOHN59fMNe7;|dZcAi=CBf>sf6G4P zB2H82E^4X9@yf(^{{tg0%H#SvYX6l8ycEifQ{SDnG*kZQmZx@FPSA1?JxO< z#^iK%>S^Bk1VT|nlUgQ zzMw9mBuMEsbk!oLbKCQ}#Sy;j#2n9|R!hN2;C*v35Fh#}bX2f4R%P?9 zp5aE9aNN{)BDzT}@j?Ria4`|^_0(_64Ic5TPpF9s=7lo1M%%5wFiG4-rU(YAq#Fi~ zVb=sU4QVmMD#d;3XM_;N%BbmzXeymb0pMLJ-;k02p84TQd*E^Bg85yRV}N0IN6_fA zO+-tIuY$1s526Sohy9%{z2?0kcht8>5mo{x2k%;t_hmP=0#;_O;uLbg7E7^87}G|D z--nEK;~~W6?z_-Jp5?BPe~h_U7l4Ve_?3}9n@+U+03 zrzCz?e&K2FSXh*_;{5idH9K~|(2#|m5kQ|!JwDGpuRSbg*iujVa&LOx#eIx;f8ge} zRj(c%{fdzt;l?@gO~1E!-z|Q2BnAO@^pUbUxPl{L;myxU zg)eNe?|KjroIS(EQ$CnbH1pDxvvW^Pe(?Td@!P!Um2oZVRK#{lT^+ue(Q{x{8)UlaUfO`d5+sK|#U4>L}AEy1UE_jZt}HatwvtKqCPJ1O(< zL}MJ^$$ZVjG_1VnMIK(z5~!JC!kG7-T}9p+oQ9>GD(O{&u?w^Tqu>ahMH_ zzgYE(S4)FoY8RN<+SivrUs?ta#G0?Bo}ij1j# zF-mdXP^FL>hbVOHyS63;y^S)DeTpqDtsbexHZhvMyS7bNp0*|baXL`ns>ZUbgH--GQVEkJL(zmzEKffh~Ex=uxOUM*m`rA#MFD*UDMi7S70KzT7G<_=KtKc zz=iI63B%p@PIh6Fn~u2@#D9q%`6hbNjSGfxWR;R`@#&mUPq*hHhqBK!jut*!XK*R% z3Xqpr|N2DeyA%J=eWH2<1$oNddj4$+&=Z_D<(m|LzN{D zR7kh3(cS5={O5vXD&iEk1^?^O*nnVPjs-2M0RuapdCk z?rtP+Cgsmfm$(~fzC??~~9bF70@eAnWtL2gO~cc#%;b_RrCUUhXw?$4|S zrnyGHEvy{|ae4qcJKcx6cms7WrE>M*yJ%S$f0Ha?P))(9dg`>J9_EqOg1pYRLi#KX zwz-F(fQr$u{NLwi^$OzIiE&19h&K#uF88wm;XY@a*;4-KQ`ms6fY}u^w%&A@4|SP> z-gn5gJ)Ao{>DQAm;*(qQ`RToi=z@2ea4cQqGaY>|amsZHIk7_RbfFt-TwE2p4Fe)d zU(X>Qn2@MG3*xfjhzkT`uIm{xfL(&802FP+DbGUdf_v73Fl-aZx?8=!iajZ)w32Jy ztCT^z9X@9lzZ$3^xoA}Iswf@?)o1R1e+qI7n`me zf&KgU@yqY?;RjQACO7yB?WcsK!#l+aKBlt1^D9gRrsl}g{*3@1*bA$O<|~Qb@KMg1 zz}pl2Y)HTTfB!ZN1T@d_TA!|h%xgVf;l@NsV-#QDUFp;G$RMCr5;}YNqj914t8$ci z)pfc{sx#?2sAj5W)IId)qsV3g*&9cXvRhLOVZ(*p-p_n_U$crp=`kt8(Vo}E_q2}f zkt+g+DpG!!drsi2?E2c8nRhLAPXv_pf<|BWS9i;#05!)qf(%ak9`Zf#l`s$42P7Qr zt)@28xFyqz_$f!#{8n>y(f1uZ**0YL7Woq1dfCbt5diCHL+^&5&$|L1l(Xz3(4$PD zU-$a#Eq0=Pe59xEFQsyZ3AL;UcoD zkU{DtW4Pz1xJ2Uk+|f}P@uL%>QM+tuzJpa{7sCbx=5$(FlvSF=1TAR z@3|GP+hceHe7Ngjud^O~TkH{pw)83v-JIQQe2T8Os9Fs?&N+$_oFjLRu-&cR9DaJ! zBGHEHlV$M5UKn{4eCG1E`6{V4Ha2Q1vbGm_N~aKduh4o0bqHNAM!Re1oEKdlqt^9% zUF+B5bXjOg~C~m-)HzjS# zGT>mUejIVW7GNnI9+)07lv6wZQueo{ft^TRsU!}l5#B6DG{g?)6 zw&%-FX3*XHNpP6LJgKu>dw75F+2-3OU5OhMytiS$R{@#kwsF9Sf@{}Dpx@)XEInTP zn=}u1NuZ`XLC?=iAa~X~Q@*-VDBQj54LYa`9$ZVStw&wQ!jStH8^>V>(r4H8R^9lg z4~YTD3x(AewC~Mh5likCeCc9h5*F#}&7&lGRfuYf+9ohkDRKq3Jg$Mmh-{?gqCCRfi9cht24>XmmjX~b3cvCLPhzirurF1cYp-M%g71_`lGV zyCUxp2RIfi6dBk6v8|~ikBI#_g&U&*Gh;TpNfjWK+Mfxc7==94r zZ`~{5s8LDpCuSr%iRO;bw*Q#sjUHtl4!MWcX3AgvO&UzeFfM-48Nw9O+}9S~f8Q&L zivr#C2^fb_cB3V_&oFt}s1zptuT&1}pWunsatp;T^1lKSqt~c?9$VL@jbMnbH$v@|8?78QA zJ>{LSAe=P2>l)2CnTqFCKMM1T!5UHA2zX^^P(8vArU3~|^tkMvy3|8Jxz%f%H-|gs z-zvxz7m2N|*-Nci@+=Q+Dlv7Zeo6|8ep1>U5PBb3Q`+b~ZXRDcLaaXbMq)jwcWK@1 z`qV0q%CQ3>oz6siBR>e^!$fh1RY>J)ic&NqO!m$>ULJ+PTA`eRl_&5g~Y z8wkkw00d0)i-e5y<~@OKXGv2dQy{1lkzUJgX(jM&PA8bIG<&%5_nNQQu`hO@G^3~bY2b@O85jKtSXL1(x%%o##WTp&rl2((iNh+VtGRM3UR^VE-DD@!B`O>17MZ;YYHl`&{v zt4P=~cHqze%RdBL(8L6VempMJet+QxRvZ$pHPx=eC})pJA1!ZqV#@27b8iCvp)$#t z9Ka~6hzSBEl5nbe1%oj-`i%8<5(70x-n}!`%Sh?2uf)QeOl9rNTObc(lcDdwBqR0O zZRqwY&bI@#D}Jt@X!XO#O>N-H6X)-B>LQ5rRn{Y~%^F}0t1Y1TO{rAILQ|JpS~DXi zx^+_qcnjfaOtFg`^8>T6X+%5pDy%bG=3gPO~IMe$HI0}C+VnAbRTEO5H|YO zyD}3mk%S?ywMN$O(ZhIf%uXYmRr-yXu!Lod{f5PWOJl?zr&juX?3UlBWcmYH?~hm@ z5R|M+#mfem2&;j@Fz-io;8!|`u=lv5Fh$Fg-Elf^?H>hfhUm?6;ev!XCa0`nEg!H( z>~=D1xZ_zdnE8`h-aFVQiY_YB`JUU4sz=7XYHfRZb)&{g0>Ju_IKheo$pnX21wl& zDnS2^AJ-)56L+CydXC;pVXcoF%N;$}7jY_4b|8=jX_eCd27*|#MqN;1*-d@?kzO#X zNpPoHmWGw%3aIbFBwj@&sadY$htI?7l8x!ZbR!^PlVvzl@YQxZUA~XQBjop>f(0#1 zMcOjwJjly!#H%t(POFwYtehu9@UlGGkcmQep!p_b!1>ib$)(xlJV8SSuXD0Lx>oHr z1E*dFKx7rovu{kY*hAf_9)&r5!e+iGkUa^7GvlVNYmH{5yMXrHz7mSE*|JaJm{zUX zRaAg~V0l&P`hUWI3{uaRB#cjI!4*=nE}Sb)RY4PC4?1T8$%tqm8IduaF`7OJY&)EHWK0S9mIYC{z0w?Y`%CA(~M|) zuwu+bKx^PQ{h<3tW)sX}>Xp{Pu*)aV)O7=U`!ByVfuR`tg_<=<-AZ1lcB^__X#a0E zI{roSFEBxo1OJhgND@LoWLs7p%Z%y2@|tWc1nxbwxB)TEHqZKuh>e7flfh$Rg4IE( z)DbSDr*!pz8cekN1~pb;D8{J!uc!Vtv6sf?%rHy^kqt;6#bt@eIW_>#Six!q_XD`E z3UD-HaPju9?tCM-OC^BWy= z|DYc8+wo2Ff98)yur}RFxOJ4gjnYM$P3yG{jM50m1`4I8g76YbFciH9s&xxM8j-lP z@LrNkRWu<5|GbMIUNpGKNSo>p2Fq+l5PQM1SgeuIo@kmGX z%h8rB(~zKB+Ik*iEh$xDke+&+h*P_MF@hh>I856;nax)_ha1| z*QM&92@|H@n7(by(RXT~TZ*(#3u#w;Iyzy7* zqY0D~3}{IkSKd%1dy~H1Xip!O(J3bV<_Boh2g#MV^diYCU|v+yE)_EoY`Si$=%nfx zOi`^z+CdB*I3_GRehW|C<2qF}a7NyJdjB5fSe*3N6|8I|#0O~Lh^(kKrfuTC;fIj;jY8V;^MLJC~DD7xmv*E4wOP!-{S zldz`!oKW*7DH&@7?|qT@Zi8H?sFtu|R{UcG@J?^*r%n7(-)FHQ_Lu6Q5iW9Veedc^ zUQt@#^L!5u431F^OVi=%ut%ALQeVu|!^_aMe+Bed)7m(Cr(Zp#R@tMCh zuJP-rXy+dX1P6_@q|9dR`9yaz4PS8@3l6()T;Z-97>&`bbvhsHGgEWlbUc@~ki68? z;o?qTzgoYtk##@#6IYid@^3cWUZrGJGG5cbY~m~XO$!A{z|WSpzi4d_+Jk>&{3Mgi zVchFW3nTp$iJZLtZ2QqJ@+;ZVK27M^UAr!i3r2Z=vo}QtPO3A+LNenuw_=lM#f%H7 zh$FB7!wfQuv!NXHL)ux32bF1oS>@Wk>VU_mE`}X2eIA=O`u9ql>^(!U=Qva(2_uf z>|aF|>G*dckK159-+<=07dyj@AxAk_MdUo*_!J#4z>1V!5=>`BQXJq(OX9{P+liB@ zV>69NzS8Ra>O#Gjn2I`5%orA!bhCR$*1K1;KHy+75=pcZJ4+E z?CMP90NrwLE-&BkQMO12^=(d-sok8c$e^nF)`2I5XSba6^DtPi^GxMg*=BLlX8YL$ zhqTX5qU46B|6nTp)fca0`E4i zHi&1lLLM0F7D%pN1*b5|0k7Gl9mnarEh7MUrWIm?YHVx_Acn*eF_88W8X6ih{V6ds zGaH=faGv4FALFouwYuf2mH{jd%1wZn5)Sa7($Yve%mq|yjk@0cjB+dvyLPd9SUi}m zaU9cZt)fneVlI#gI02X+3=9l{J-4O(>i})VpYl%$cb?8i#QVA?u(E&LUmTMbBSQn7 zDJpG45Y5M@(J_``L3M>vSZ`YJ#?(hLyXHL$3D$4}XQp!qyY=gV7U_@%YL0vE5 zD(*ALj>GqW8ToZ`e#&~K>7^Hf3+ibR%G6b_oBIU(9PHR-s=t8f?2xutY!M#)g(+(4 z2?mHgZLsi%VE|Xj5U_j(Ai(~$7M_s3&|)UOeHB441#o2m%*G%c;<8Gi@R_ZuzW&Tj z&y8HdAnU3nJz};#oFYyI1xF)$Hy`j8kFNoS&@Q~^;Y2t5ob2rLZLV>x>D51kAb@1s zD5g;8ca*=NIdg#B&$SJdS>5*88@~m*AqN4ikT={^0E}t&AbK7ELX9*KRMq5;e*TuE z)k<10d~@41k%pD}{s?|T6MSW_l&bkyv|0)9F|e-DM6m*jF(Z5>E)ASOiPD5Uj9upf25I64tkY|1PRn4Y_ z7$4;*K!CiP8Uq0o4_QkwN?nP5cqHy&`f8%&CjYh;F6oA~oT3qIfm#ZOghTb0c73s4YU^~9?mo+iiqICY{ zq5&BHi_W9Rt8s}$X#}Zy->Y=5P;j^n<5Os=pQxWmi^!?WlSYgedZPWWAiDb-FI4c0w*y5cvg_DyeB{t^0r&gi3YgND*pevmcxb(Is(`*V;F%H= zeeo(%=U{J75+FMQZIXu%M>c;uG#S;fuZLx3W-={T_Vz}gQAoV#jlT`Hf<17=-Ngn= z%`9!gAYeO4;#6G4>7=eV5`ejrqzsc0;0!B3TXFy#NyjzHSZrz{b=H!LoitrR;&WdH0kO{@H4?wu&YG?U=dm>eix}(6TY6Z7kf7nLYQv#-iX)buzz@}Ww z@7`u0o)2g&SjT3=fJ4U#+<$e>Zy`;ZHpzQqV__NOMT0AJ1k+f{stEk#z?W$x=+A+B)Kl;I}8$a%Y7>?p?)@muvE0EFv~WO67abjDzO z%U6|@nJ&mIrAzmCm+iGP8@36vtmxkdSnqYKXga~d6Ql(5D40s=Wp!)8TUVxN+XzOFUqIWtN9)Wf|9<~qZKg!h^J48y$8zSiLMXVK9ANIkDBfM=AxY>@?8o?zji5S+Uq@H7GwO??@Cvjh}fsvN|vgeJ>o8|)~f8M@*m z{sf;A_?DMbE88CKjC;Vr5X4;e-%R$u&!hpAK5Eps^J9r`YmeTvcUU9w?Rx8DAwNKx zJc5GtH8p@aT8<9mr?*va&wxN6z(y!4Dq3H+7WTzxF_rV#`JI-Q*4ipAd`WU^!cxBsoUM_i0abamEUisud5bO5-Yhld9V_vKrqZBxVtz%bLoSWW>p(5~c3rm-c7 zhe)^qJylA48%@dv+PG#mIWaMDIF3{y{}$V0vDq0x2JF~tfPO_PIC!`*-xQ{$+8l3` zX~4^m4F*EW&g0eq37lZThj0Q#Y0vI}Z@b3m7npW}m$1mMDhURpJc_&~s`iuY-!k_I zZOwHSP6{2LmXbUM+2w2vw1hZ%lYXEhE9ey(IJLHXUd6Xt!`~s*0any30Tq@T)i4EZ zrS5oT;bG0E?v&QJtScOFNPeM9zdMR(a@1SnL zivWbLFF-5@WbGDir`lG7U51kx>TYfvYOAYFTHa+!axqE+p67P01s~@FfEm^WfUF*E zZEXo&GnLvKu;<^&>t*PZtA@>kNCNWSl51Kpw6gvVCwUkdX*G@tgEARMif*|$JEJ4e zMNeWiVvZ^b4O0Lm3j-q1H#!{Q>ZRoRtQ_M+6u?jvFjq(Y{>!=tnALkE3gE;hq5*aYVk=!Yxh;?q{U@G+ zS5s4yh(TI3{Lj8`_*sHg!86;T#}Ug;qW*qLniB%n4625>sA80|AM;KGei4 zW7ll_70Z!dXuqnO8?D>m(E|C4G!jsxFZ+|eDQ&ua!b6(k6oQ{u@f75NS$rpPi|SdC zp_xH?$KQP|F&I*+jJ*=AslDBPuLD?@7GBc^8|)5o)zH=~OWpYlP4*7)6oaNQD8Kes%as`B8m$ zsr0uLyLODCkdwn=!$peD@zrm+P8#k=2HyEREe^5v5!Qz<*&;78>+z+3RDW_=(b4D!L+x{TSY_B&~d9 z@{Z4CuJoQ@foCE5gT8tVzM3UblP@=}r)`EB5n+Kds>F;Lq!>(E#qHHdTEz!hAG$q! zhtp3p+2z+b!fjMPS?+TsW%dcA4YY!AUu@przCi*6XNBO)J-{t1@R>AzT*j=-sSFmc znMwmKjKdaeU}&A+3C5B_W02Wh^ouK#=hQ76yR9-nXr)TPnf=G;BVN`N-PKtKA-JEg z#O9g9(wsJ(bUSIF z)FkSdPqWj(Y6|sS#TG#JsQuY_Ptj?dtsAE<1Q^|609Ui1asV1{*Z!>M1%6Da4r%!( z_5A$eY+cN9V!X)+FW@zNx9|H3$$Y`>OTP>Izt<|7^lJXnDaXk{6<7FAr?I|FOlO2V zF#H(|aRS-pHVDvrYxu2Ca!bAlXS6Z`3^Vm0Dj-C+NRf>Qq^`X22dwjIL-d94a*pT9 z@6@O(c5riAebk1pCO?pi!3UBINlrWmk{_b6Qe&nb!6k{{iJfX1IO=hVA!aZ*if-1i zT5oGN-{>nCgE^$ZJNgf$(k>O%WQ_+ahC2a8oRAsJd9kMuh+>*qbhJ0H*md;5{YhtE zEyc*w=a!P9^9l|cHA$IUfE1Q!-)BGQi%I5Z$!szVaJT-VkEy~aAIA{XL)*37o)@>2 zRNKlYE-q$ZoGDR$`6^Z=+C&~~3pr&W8>N}8)SIgqn2hI+#n)$8k)o_Rn*W;^Fjm~| zPIMAZz_M61Y{`)K?GxZUf~J}R8OC6}Yy+N)1Pu_kmjpv=ch@u7M2Ti= zyt{GH8^l4cdF(11O}UDKN00lsIVq@-fz5c5Rt|Ui?X!cuJA8Ymb9s%=Dp5-v-ChsZ zZ}?PWK%mMvNs|9JE=?5OK;ut{jpOf^rK0367hgte)FU&1MENxSpy$0wf;uSftVqUr z1!?42qQ7=FfXQLPN`Eb0bb{IzTpmt_u%wd5|N43Em`WOB?bMQm<(w+gJoQzV&s0lz zS;#%`KcEZD=CvDeP}L&yVkNC&^Lh<vtg~ zXL_rV(OWayxhWRm$jdZ1PAcSFN)#J*Q&(4v{^N51rooKUqol~qT3-%LCDt79&M?<# z6y4g%>B#>^v2OQTOiWs*_{7{u|i;&n|}mb$>sVlaJ**IjNaG{&`mO z@c6FzU$&beT1wZd_ajzn(VAkm-~8dK59emMb0IO7KKReP#O1+gckf+A{Wbv&=03C= zsS~6_gbSMfp;?a~n`isS!KXBw2r5KF9uiP2=l|z$ut^w{gR`;4rlYi>0%WOTeoSx6 zOEYd&v~1O=WLtee(arqJBdWzny)17Hkum2ImUdlgS`Bgy738Bl~p%fL?1B_zytU3Zm3wpu~Ag#A{AgtSXJ7do+G^?8cv7r4r0w0Mpg43>u}0 zj>k&n(Y>%fteX#Ga3obypuud%A;}+Wy(&y*LjDLNHzU$y81s?}Sk}Od9QcOEUM2=% zrnwuuI~oHnZqrr5_SR10$dJ1efTa~09KcokH*&094mf$1m%Sa)VQwW^RtlulIe`6= zH=QwGJ?fAOBBk7OV_H3jTnu#SQJDgh#q|#$>_I%g5sV-?*ym7Ywm!(Csk9%}0Hx;G zQ4vLJsy2aNe$eCI)zrL$yoOjqMgrVjQr17RozvsA+jBa%&=u-7jBsW+` zc*B5AM{=WCIp!_o@BFGTX|}oYv1~(L57sNX6-#WiEv#9?)d_ci$UPWXY(7g_S zw_P^9SVvW-$4czUAhmpTQJj48!xWb}**69nb=v;ML?dtb&zxDj$}f3>TwofG zxY8Pt#t0a6EFaLV9LxK@*HVCld17 z1s3D2Qtio0G~Y=9IqTLQMqwld;5ywypN$4H6?(34?e!vD9v1}3IO_We z<<{};Iw2?DZfb)mVQMj6K{v0-h8I&9f!+J|b=*vXB=kRhLa0zsLBO&&Y5MZHBSo!{ zGofnPR_lPeG9Yi$nOX4>?G7+##O_&Jnajk`u2tZjYltydV#Opgz8b5eOlNV>PKRwo zuz(E%OBqNwS5{DPw{;1)7!We5d+WXbhJWlhfD=LE@)F#@*Z=}zwg!9_PtqS9ZZdQy zc67&)ML-%sdMwc`#Zqg*Vy7520fYqc z{~w>+KcA_SrvJIPB^4`GJbU>RvEMWBAn1pq<|_ETxv~ z>mmiJ<)()}bG3l8S&rP&pa}6#Aj5|WRWIKxi;?@BlbWIUz6g=qKK#6Vk11*g+AOF@ zG*!k_H#GRP@`vfb7fU@HhGOH4IEPL2G+LV(!$CArU*~2NE*C406_6`FT|}XQkHH?y zms!&rO(mOEe;TAMP~A6aAkcAgnJ zn~5KjB7)s_OS_hGeme#8=yg0XJHlcG&(7^-xMd(Rq9~%atSTkZ^5}Q!@k;5z$5lmP zb%^zpO@H4DFz5$$O#009QoN@tNpp1ft|i2}vHJSxKq@rQ$ukv*t8hsXwkAx0cTT2)XWox*b13#tmfl^e)}I?Y^wxj$xqz$LM|ehM-w1 z`xnESl9msY8com6hAOcD%kx=Xr6KI)rcAzt02K`;sNG@X4~q`-1`vvI*gfGeZ2m4> zG9y*qhA^>9qr=0)Q;!t=A&b16*?JfJ)+EdPQ9H=78S7!GtWFQ2q>1oGHaQlCoe)E_ zcRf3F3#1OcLo)HCh8v~%rQ7U2upBzgEL_yP{=NSd%J_~T2$ zi_sngR#Fuih^mZBGZi9%*vO!q-PpuU?t)X1}Z( z!v~qSDKdNBCe3$@(Mi>068yBIL;kJ`=C(@BHV^Anw0GyK7v$w|@-46&W@w~1^71pWMm4MEQ zvEwu6*>_UIUku;K6j##=1eiHa(7}&FQDb9O;{{2aq+35`Z~M|-g`Xt`{)dkZxbjDX zjrLaejdhF``5*zMP;vGVF8MVU6X8Gfhr~H=LS(iF>C*M1&VtDpZ~kNE%@s?i^or*P znOn#*Dj??a5px0Lax1_RnAxe;+Pa5%7{rg>?ri<}oiC+UYm{E#45W&%$xGI~B@4MH zXGw2fo*1TQOnGnbf8NP0vjAI(L@@uIp7W~fUZQ*AH2bdN`KKR{g2auB$I>D95+|WI zgA%Zyn^UhdI!z+;CZ&2SD|7SpfKi)g!dRpw05U%C{4f!CF90%+EdBhE`Sep{V(;9| zMI%nxtJ_)W^(|aLYa4Xbz{H-;qJy(yc27WS=gIJ8lE3Xreyy2yIhb?03d@{<{m(P( zps%LRbEPtUgo8Bj@FuGxF-6UZ#-MkBzhMi{h1Gw2?nBh{ue|^3ClC_QzRa0FaZQ-~ zv5cez$klyT5cPOY8$V>Tf>iDzq7T12cFXtg;SDE)zK=V6qUyN4O5Ld2XDppZ`+Z>R(lF0ZGY3}x*l^Jfn))HFxW&o7|FpdS^@qGBdiftF!- z9(X#RCJS&vEUpxf@@T0Ya!q!AMf(9BE^Uk8Bc?A8pd7|OoC$i8cT~6(ffNIARd|QY z-*;V8P4=;0Tg$4(|I+K^RZ@6&C~*$*=Lo+*PmWB@I9i5>jPe4B3Idpuh-49!YRizR ziB`0RGHnJsJB1Y*r)CC-qL`kwKFQlay60Z{_wO3;6wfi!%V-K~VcboYuu*4Z8t05T z2xEaf8 z_LMnQs;u`GE!F-B1<=#DhTa$qMoVAY5q+_ZCfV)ia1vN?$Wc!f>prs~f{g zz5DX@#yx-SvBk#CfAn3?#uZ-~y*47d5?L3biQ>yVLLmkP^Nqg(X?p?o4vJ5=Y5(D; z)p#7|+h_1?ZbyHcRZZFWox?qFg5FJZT#isrEhn)Wy`+X0$6S-_T{;N z)jF3TZM>9576dPBJu0sQ8yg$!$U$DB4}_`h!X3{z|H4Qv)V(+|iSo9`M=yJW>wUb7 zGe7pF`4q}==9$&{tFfjLTSfCycqjK4h!jSB@`O!}KzHWafJQWDwE@Xut^dI|yj>xe zfsdlu2iX~8J;y?*pL0yl%^HRt*VDAb0MCI4;!6W*Q)oh!d5Dg z8BgIcjPHBi%~(|q`e8*tK+x>A3XV9o#|vrJdUmM%^m?#BkEJ_4r~28jxm>`GYsG5~ zZ-?g?(iFfEn72#{yUYN)(==K#+}WPLt?#xgy+3&}BQzoG{ae6JGz?|2)bLXi#Q6{n zH)vwFa%qXBOu%G>eAh~#`jqEo{nV<0D)1G-}=+LX3 z$9<&J7Pt#v4!EtY?Xp~I?k=m+Mfj)M>a)=&b?^tZ#C?+$H57Btv5dh^_|=P`Fij4C zfa(ZeK%MfQF7FB8=c-q~?(|h%KP90_nX#!PW=I<8lu;9vwy^%B`oTvZR6g#|B<2Pi z?>@&oOtUc*%?#|Yxh(2>uqpFWitpW_^>+MSlV3LLfN0eP=G2D8cirb&79F;H=v zrnZ0^w}ozWi?)ooD~xURZlf)dKHtX3N>T6iYlidJITDRTWwVB;D+$q-7Vx7Vvy-9> zR9Gx~*>6d*D9|V54CN*ZcfbKs{{vC9-HL^>bm6COuWEk4n)aW-sqIMkecRJsp?$R^*(-5R5g` zR~eEN=PcYkiiX@2M9~}oQ!pCbMrIp7^)vEoRmiI<2@1+;10F!zUT^qH>mDsadv0YN zyM6_0w0ku~J>UI8(XB@(n7(mXC?zF!;j-&6O!-gYjA~{#)UB+TpiEw){A~ut#_6Z> zK&na~DD?9t@ujY(Z;UOTLG2gROo+I_^sAO;LhF!w)gs*=l>M{Kh#?p9*&l=UgRzv? zt(TnC;6F}olHFHZ;F*L=M8&S8a69inX#%LBh*a((oQ+19$x+l0z(Ie3kOC80d_|r~ z4EW!ywGeND7tb`Ktv*4-#L`%DgcD(chsO-lbXw8TpOqe|Cyj1PcQ`)1*zj2vx_7LM zx)Lcqsd^MHuhp0#L~c>Tn-3F$D_2YtWbR-)>FMdEsg~`-;pj=JF}~3{lO_ig;tp&D z0#wi7tC8Tq=Fe4eK8N2#xY5C*T-`Oc_b}?GAD;uJSWQ<jkjzIVRibN7+#e8721FVo^T@pE1R{`dMMWW$1IwPA~LW|$674KLntAc}9b>lbCv z;fVn1((&JedsV#*=I~Qo7S_SLSNx8J!s3fF%3V`QzQ3Ny3&NH}T!nM-@iH`z+Ax?Y z+}j?udIG94i7^O7C`82ko~q=|m;))c> zat6$$gqIeJWZQvqo)qnt{Zw@QoM0E{6nBZNoK?uO%U2%cRCh2iyrgvg~}GGMB2r5RC}TpGu!rjrGXhq7Fdq{l}cutcLxDr zFdW;AcX`{GD~{1v*Uu(g%e*%|lCSSJ#e!BHzE|W2D;U z)j8KUk|b@Bv3S%!cYV@x{6OUPw`aFyOh&g*ig#6Si*mn;jXpoqMOaczBPP-C)c7gI z@(u340zu}_M|DjVqOYwPJlvMU=at7ZzOlfqFPqln{CB8QJo zKI+*iy8Tg-bTg2&_my-jA3vZD8rRnoJIt<8pnN})B&V#zyJgX$q%jSEdS52!A{|_I zLp`M96AhVsnsfE8%G2K|)5kC8OH@_KUG1-hPL**b$pIN)Whh`e6&Bd%?di(i3Sj+A z;;S2tIpeA4WEA2!KLmXblXHui@t?tySQ#}$vq6~P;U!0N!+SEEnE7s@XK3h?+zEH} zFNLTql22CKi%!OpxbV)aC!tM4#t>~elt5htEQ)$`S?xd_vs z^2)gN%6Tu4+6d5Y5E0Tvw$D*vr8PiK1CNY2G-M-^!82fC9~4=lGF;I?QPEHxdbswb z4-Jt<`Lq`&MU|zm;pGx#8Z3?0o-{So`NKCOCHAoj2d1s7wZr+fBGs)sWs~#Z2V>a7 zr^3D?WOC}M_kJ1EM@M8eSQuKsR{@S%oN{*RdwbUOL-j!V+_W^r6iu6@{O)22U+9bt zNMlT1w}}q?V(p~zSUfCPm~=ZsI$eE6B`(u>a=Mo8k+X6kP+4LMBG;m%q?8wM`(EDI zt5s@>reeGuOv|tKLPIyp;&ZX(_3jw5TUk@Ux{cr8Bz?N4#^Qe4&kbPkKHr!q$9#5_ zI`~lA6N>I6i+&;-g5J$?8s^cYo;_8hCKLFkFe)^`>6&U_bDDxMJdiTlfr>%@CV;}1 zeEY%!6=s7-Ipvr6;uvzvFho}Uo$AjD@NQjxnrSc6jr-}I?^!zWP0$m$7@+qQNokjG zh_mc$yYO(nH@is#3|Lp=Q?EMG%UYcE9N85t5PEF_0s>0sYAec{2l#*I@aNt!s$-RF zdT}!?z-Te!letbc;^O0DQknl9$jw_4$|lx($ZmVQG5AfH;IhX3g%m-sN=&*5Jxd>B zUq2TS<{BBaNuiLcYx@~1Z84j-QRX#k!pfJqJ)*sx)Vo)e;aFI+B_HUyv3{0QUDkZV z?*>BQ7?A~J`08*xKIPG*V=0KyI!l@=KZcnGKkZyS7__Z4ct~J^<;l^wOL~O>S;(u3CCtadd|2C8?^?d{LJBp50H5G(||W z@V_c#A+_fsY~M>SYS%hn?u~MQQ~%|K%V(S?;Arj$vjJ%KYz_|*CXM)s6Mz&QhhPkT zX;H9BmX^_1)DJU|CN=C78G1y2EB;>fjs5dQBZmEYX+7i0pnUj`Smx}8v>nB^OK`%W zrXc$Raw`wIE5}?il75!=I7D_7*!YJ(fIk5l#&oV7C(e<&$y_$>_!<3lohCI06y0RG z^h+azek*PC92NubG>LY# ze^fO9v@+0ezmtFQ6vc#6sPb(phBO9iul6qwW8WLZg(XE8xf)V@`22lEWsr!PhK3{z zMER2=#Epn^~!w-del?VFn9#6?c<$d-J3i7rpfCabv ze7PT-DetTBd3-OQkmYMsF?R%{oNHy0Bqw1q7y0rsU9Il8S?b2vwPCmAR$)n_~B>K&=uYthQH0Zz4&q#v(!hQGl9l$*~_arM#3!Re_13WPE2uD;>7lLf-! zg#05SPL)+qr9vs#nTfvlyTgW`K$-)O-#^Qlf_EniNXJT3PbVbM#Iw+XRb-vFGtMJ@ zc`I#o8knP=e8PS~ma{6Z=GB^YBdF(9yRf3Hq*5l#ft!}kW`sRA0L-0C@j}c8WbG4D zoTOo#CMH$B!hyRSIfduh4}Mv|SaXmrG$d5`92{ZO9|pNzFt*~c7=y5C7b+9je{j9k$C)E6+}AHA?( z7i!^^618}gQ-q?IG5KK_8hcD`Q2c11jI*@#Q+N~wP_8nWrvB6wFkyKbMT%7Kl&;a7 zk62DkURsScx5%9IVw?!rb3@I#SEcC)Dxb3Gpk+~4ueXUyRn*>*q|b>$a#9;>C6C8W z^Orn+{HRaDKoBK-P8PF@_|EHN2(}6YiGItVVl4k%L^qXpvQ%z!L0%R#a4|UPu^fAY z+piVBz{0Z;jWHf>oXDboyY=#M*j{mPUo$lZuC$q#;}Zv95i-KJbj9O<9lQ%R)6!<# zkr>H}S@k+JxqSLQRe{HLMmc45gMgpM-sV?RC;EzCxq~hM`1JiR;tbbtKfUA-OplykeI@H?>pdGL%SQa?mjRgfw3XdDtqGkcB zsYQSa%MMyK+Qk^%C=qMi?F?@&T{^}f7=|e0QY+!6OQF5ku|w)%uL@i9X9zC=hLiqZ zvyIsgZHgIjYmlF~PfmV}Mq|@^9o;)xJ1y|xP|1FYL6{9rCx?1VnNFhGo$5#iT%|H* zU0xGAN9A~XkynvDk0e00*zeL@Kw>%t8PF>$PLX^fmrj>IFGwt45qnlH-OI#X>lRu; zXITl%^(1+Uh5xLjlOups{LT2F)?a}WdJ?N3Y^`prE(B+jpFq951@`GrU%wsCA|47b z6ctzW0)=3UAGb-t43m-YSJBEcSJ1}}BuAas;t zRB+_XnDP3M`1TWqqgSg(K@LsXXbi@7T~eBI%|eso-OUk*Xo7O4Yb{{O^~G zwD0JoU{+c0`NVBCeYdMMex?ut9k-m%R~awKJXR5vyk5mnB+@i$A2e90)mEk0e+l7o zS2K$v42PNa(pk14%!W-8YR2)8c#?+m<~`-=B>Z#Qbof~mB8tMdg*immH|&@-yug`R z(5@(`bhjfZh4cwG%PKkFa`7k{o^#8nI|LEzxWaqCYr_ckw*o?zoJJ5AfYw7q=HfEN z1?8!%)sza|UKDcMFPEr8kj8tCcO+q4{z9A7S}~Sjp*huR)3(s@gW;FTr_b&!~QUTXTDD2lI+vJ}2@S6^t6me5u!pgEzyq@sjbSHS3H>IcT(jnALP zP)NscRLK=$Y-2z;$rZ3m01bm9qOfk`5do<2r>_~aQI%3 zij?R9JZ`N!|neH`_gX~*nSA;s`u=}n6L9?-+V0FBeuqb27d zEAxuNa%4)Cf1ZYX-lSn5rV(c=1ppy?hX5d3DD(R-%L#DqVma|L6yyAi*mEmwMj%DC zC*lh>3j}?f`CEdB$B__8baWm0xxGwjh1cx9M14KZuN2z9C6r3rdzUb6qJ5#^>=!+% zIJ{k?wRffQ6fp>u{(}U|eSM5iNNETGa2N8c+{!DCbmqE0pTEe#A zQB;l?gGH(c?;;#ldBOgit-mA-za6efQ9Vb)RaJ{s1|@#!P7`RjIE=IR&{+(sA=>G> zs2@J>ZCw03q0vf5XBS^+JnA2~>Wl-SLin2ivblb(mtZev6dVgZz|BLG;7I%Wuoct* z&^um}d=s^jR&KWb8uJ0qTqY@=rTFUCG&l}GOG_c*c6|AvUx~tO`<{=;5N}1(f4A#2 zmGccMqONu5_!{{4M>(?%ncNs+(5K?#kAgu^^HQ85<2tKcl zWit9P5ZAxS!kv^;%`E64ifAg>A5$IDXpCc6>Hg|mwlo_cIi$I@e-$Eo*{iCIj~^%a zfIMVM0|t!+T*U;azXzyem7n8qH50k4uK*YVh5YZv&6&}w8y@VYlap%`NjN!3H~Px( z1sP-&QPS&5>W(;p6E{hDFIj8uWlao|5ra1HUcpzR{@IdGcq8P@VcPvgu0S7%b2ZUL zS-pOgfq1_yr7EiWF4LjzdjSp3a{J7QWehOQoK0wsaeic#i1KH?f&#Gfb)GRpOPNe% zcjsrOLD1E*R|_s)+$s zrOMRp>I$=|Ih6YPt}u*`Zyf|`EYB}J=)5=x9wdsn#ax}W(RLEPnfVe?4b`KPO^jC` z>?{993m=3l|5u1oAg^yWE{j^sZ_$A5W}cf|!B-YPU!CBR&!t^Tn&Yl(6Kk?TtW?c5 zCYK&`0Q>?R6y;+H+n`Uz{wN*KmZrUb!f_bK)~&B35O&=GS-Bj{%5Y>~A+8*HD#E!2%u2 z<;1Aao?d|d?(1scp+h<&5QWrVBDLjmOi{PX$dSkTaU?OeTr;nYnE^+pokbTy@KKmB zx+}NYI3fl_>VDMn->aUxmb1GSYI`%j^%Yn_ON;;n`8`gd@ zAK{^CWB5>4Z)@8@g(&rDoGho0fk9lD8;3^RL60sTF!qO-VPPl)lv4o|tH~?(q%qWC zCYI{CXW)U#SlZs_Ib>5t7DH(y=eMN_37K`8nXS-datZzN%g)U~N>8AMYz_|`wi>#* zS`&gq^7wJFNINrgF%mFqFvR`;1%(xT7bN`+EkS&e4s;X6a67nqs{c5b1et>1+ZR{P zva+FqANc*AuHWqJT4?yJ*=sg^1FYQySK_JQFzssPEA?UcgcD1r14VLX13yrLk@4fK z{2C4l3c6`u`6w9wPWKJ4R~_})l0*Bmu`_2iC)-9$UJA|;sAPnLqZkrtRI)l)#pxP+ zKLG%Z>CV3+R8?8Wm#|r-ip2MshPUnbx_WeywLRdGOLzB8~@fE{RMefbeWWrWf+Rm$~NvZQK30Y=VT!9qJew(sJ3vtTE$-^@7|>^~6} z5kWfF2(R}}IY|pACY;J|YR#gKxOV1$-Qkas!T{F{Nir$ZYH~sDaWs|k_*>gk#JviX zvFpRUsHJ_gZ6Ihw0X^c!2 za66b4Z@Q0PmHTnkp@=2g0F)y$hqsy*6NE3mmoXNq=v0|b`DeAiiJ^Y_w;WUn8&A;; z7v>y+OOE!tK0#8bnC@tDM*$X>6aMl3WUR6>BPcv88G>XLc6>e4J+8kerO4UcyOEbl>;xj$ajC6NoBttD z^&r0yVY`Yg2o5~sKIt01M7P7%7Kv0I4bh74+Xzh<tCgm<3;+r^Oltpv8?!31newHjsf#8IXN>DNWY=QIecz`9j4DN__TE}6 zsr!f;TqdQauY5nTWVN>ogj+fBaZc9WnEZ$?$4ZA7{p^zh*B1$)q+lBHsKsr|&$c3D zM?0h^*J%ntnct-VpKbyIe#j-y;r!_Rq5f?5`AKX~7n!{iXiVSmd@$QpEp3Hjg1mbN ze4g6=3&!URc)-8ii9~$d4hAOV%*?~OVR_gxBrDALl+HVY$WsgSe9@3jSw$Uu0;l|_ zvB`jYjU2ahMKs>02HY_7EO30j*5VO`)-SpwxoqX1=pip{ZL7$hb#S1pojMJMKdh`Q zijoumP6-L2*+AwN?dvqI_;Exc_~U3{I}fu+=w~OHl@kaemQ(3*HZ&*jTAUq$x%A65 zUo|5>i&~*7mF%m(zDtfky>#s?UddPT$?dK#LO%&s(Kmtc9}OUuv7-wsfD_upg0hFe z8p-vlU-(bg-L0?!1Y}yWZvGhp9zK0iGxDl~y-Fn)9XH`vGEzxU5lZp$JC?xo{5COo z=i;W5%*NSAm=6@S$e)s|u>Wggu1dMdo6+J&jB@YuMqNA4yNbh^g7ltp<*c`9JS|Qi z)XebUW3a#N!*MCQp5kms94j}@FKda##F&`!>#^||@Vdreh`};&p4tJ>A^~f+hMWBl zfo&PFUbo6p7UK8!J+(F!NAsC8z{9NL%nzVg#3(*!`bXoa(6DZY*DomYXJ+#rO~7#` z%j=)dmt$2E(|Wy(t#gaKfAH`ELHpQCF=yJ(Sr&oCZ_B-$KA#(36((+qCM>E9NJKC+ zKVYh7Q&WPXR$@Xkth6)eDAsAkWAfvEh~@IXZvJRzPb(h9w=MN~?{Hl}z{c(}W3Z?X z-uCc0$_`*`!Ao_Z7yFq!_DZQ%IKGx}gkHKbMPZx%$xB#;-94*$GJ`rN6TA(7<4F8( zu(Zk_V2p^sk|e(Jc8EqQp4o`E=i_+`0dzeUw(@~^^n?^^u0>Z)Pfzc@c1bxQ0qAFF zQPdMjgKmr_Wl^gC5|)9HXOH-SJj=L#jSKC&03;#HlheufTzn{O z-o#ivh0I51M+?k0i#fa=ns;Ks9QAFfUxGzGrPAV$9)8KU`R12ZJ2I3#7hwR#wqHVrwqFmq5F{=-Z9JBXA2* z6dybn9<_qV8=ROy4JlrY>n(f`5nsm)0G*lBwtW zN6Qt}L$6SaZ`IZcM8c+KKpH%6ow@kq+SaJFe)0auy$hywKGKu~41pjd3n@uXsuMZ& z`dFAxoN@BKuULh{$!83Es5zv2ZBu*bGb(C#--!785*Td4iI+IPwsE}4P0@G`f3od< z6`P6=loYH{93*lpWj}woHd=nfijKPpJJG7<;*f%||MhNBG`RJF5HU3Db2P`o7Cvwu zo;}8?d;k_OKn-~lEtQi|z`w8dHs=8gKYJ9{`()*Beql|C-~$~s)XPwj&+7mzGn2Mi zPzssk>3+c(fr%%!dZ}(Du_v|<+P|y^Tg^yo-~hlR^darkSgdMY`=pmyE)P(t!3D z9M~$0*Z1Dy7o(XgM)m6X9ItxWKfyWXr`wgw-CN>%-m`^S^MijeWc!oPkJ^ttHxwZ(RoMt|crnbu0ttw>| zZ&X@RK%V2NSp0r_wCKD37B~tatu+$ue8R96}k?NyhDj0ZHF0`$-Zfv0%gq zXM^?>SZqx*>3{MzWSe$WCisDMhSl4P(_u;au>Rqnw*%Tzn9+XNnpi8+c@;?YkUHr$hDzb5d@ zwxeT#a>|k|qkpigU$ahl#i8zgW^~;1lK+E^$p<@)RAKsuPthh(c>d4u`Qn*((XeSv zEmd8kfxu9V&n#(wFZ*ZLcuM_3CLbr+*~`@8wv;5%pT=zGB~v*U}?Dua+>aOEo! z3@4$5vsru#dxOaS0}>K7EvCoX5v7i>c5b1;-k`rNU{Rh3*Yg9zP;Ib?>iR3wP${#? zZ6P;TXo(TR?X^M98y()3_dt}OhC8tTjjvMTfY4p>7!2m=4sXoEd39(hb-xu0^epe@mATHN zVF-Ehwk9)M83+^tu4B_n0_!eXK|xvpV)^6I9Uw9awD#U!snbI}A=HZ?ZhO^(c@{EK z9N(y3qu$q!*;eZu>AS(R-hzwCOB@Dq+hMc5J8bil!c8Mau=^^Lc~$u>d35o0AXaqhtnS4%E1vfapq25dlL{xe zV3?%V=x7!D2kPs9{FKj+bN61AiY#NJ9Y|(TUR_?E%@k8OR2&Nce*1}L9PQ7xMPL;b z2k?7*CL*LlC6_(-JuSa2{3LWp4PLBev)E*Qrh$)#7mY#o;{WNLeLw`1o|m-?(HTws zpI2O*RxtSn@QX6)Z-<`$I!?hc#OZt)EUKU{-&u}sas3NbJ)aSPI>?az5d_X&h*SO< zMCMD+=fo;)Y`r+`A#|v7tKnBJo>+=rC~!Yh1!TE+>KlIEqz#Q`im8`RTUO5$DD@$U zeUAuBo&A}=HbQaKeLf#?p!<%JP{^XGjkcMSDspahhH$0h1TU{X*Y%uZPZ}oMhQ6)Z zif$?8Tq9%;h-@mD+OtL=Q7#>-3Heq61x_M{b^o)&LrWF2BiQFKnYcf#25P>yM*yF; z5C@3@=d1^MWBRnPinQUw{kP@qZuzq*W-9TT(D?Y{)6M=OYxI6bnXMrJX}%69y7a8= z04(9dgJ{KJ@T z6OKyT%dpA|oc`1Ez=DHdcp|7`sy(*YX}&fg=BT@v<~HebWB{znN|t-|H}Bd7Ma+t~ zKlxrIzg~IM5Gfx3d42LRoJK{TLZ?zrO-U1Cp%c2GKR4&QDfiJ-^TYm^ ztlA(fq+a$Y&}Et%=3wCt2KF6MzVM@f6u4Tl~!{ zt_18*>Z>7y;y-a3GkH)5Qp}6tL0P~FZ*jjmIg#BO>>nIV`06%n#Bx`{{nhk88_!s1GKagZ9*AkABu{lw;ZEW@c^BwJ>Qde?g}gblKe3djs7HJ zcMy9#dtrAU{;UV*phKKIK&bX&>7-CWL3eLdo#ikeSfzM_dQc{?nts-bi8EW~2CMw7{@K9v}Dh93?k z!Rj%T4ej7>cln?)7(Op566Z?W+g|-_dWg9G=-W`Q)F;LAF{9)Hj;~9C7VZaOV5$zh ze;bJc=whHQdeGPqQSmt|tMb@-d9VV}FQ=X0)D`nU9%DE*wPGSpt@_WI&_ZfGutHrX zoZmgf9dCH0fE5x&xVoKDJ^aS7?U24vNhot8~n zw0!Lmhl!pTOLU#JOB{#D1de_+&`Q!#F@_}dvL_0& zBv`u`w*Fcmar`;+&F*3SsU6)Z0Yw`Xz+?O+d~0dZz9Mr4f3Eu}b6X-lskU4@bawyO zzb))OcIAw;@#fnle1xgL>Ox6a9qiTzn(4cxB}@+=C9}H|3h_|Q938u+Tar9`(jGSv z%0w7kPx90)Pgp+r{e`G$#&yZ>fj>%C7b-9F^yY1X2?*Z(*rGW(WsXnvpZy_k{sWp# z0dQTBpCBZR^No$II?RBJ)hw;dQBk$>1Bg*xby!yek{>Fl8;+e#fV8lBDYL#>i;La8 zP0R`*K$L$p85*Z_zV~zY<^yZMNuyzSGG*O%QE)DSq^eP6n2P68)}sfCdFf$|sQsC~<?Ff9Jv0!i({PIyg+TXEyJ_t#ufCc>1tS)=9%x`vT2ute7ZLg!cv0uwrq zV6!Q}rh$)xAWi=py+ac2m(_1q4uTE4IepN_LPRjeg7{%Twlk5eqkN)t3I0KAGPI!z zXn^>hmpj|{-~c?Z#E(q)=e#%yjPTztI+{mD4&9Qb^(ny1?{QGX1!*F+=H5CSBJpbqrMALsYZ`8_>JyqidCQ{4E?^wLVaRqqT(qDab;)|?HtIU$r4 z0|J=*X69f9^qk7mY6<>=gvfsT{W(??1{wQ0CYJ5&keyeG=_l*%;t9u4YCHIg zkdV(YD!J+w1N~faUjc7kt$mP#iv`hU!au#eCrz2;Vq2~WhusUm&qyaEG$p}04#3J3 zdoGu_H=celpn=^r^75`SEX-V@>rThM-8yLR9|9<8sNt5`Z9KD%wMnrfbLWTu@zSMh z3>s*BE82K`wFb&UO3BAu$jHFZd~Mq=&jWk~o0#CRWPo2{wPO62Sc=OQ6uGCdd|Hu1tm_jDr3(4O{Ty)`mY68j+JkHu^;X<6R5)#hBS*(|9-fWd zDN9?S$l_mJ6A1~8brq&Ij0G(dK|G!3%N+~3-F^jWrdMbY#tG{K4F`GE9!=jc+TQ-N zDSQXw#U0)nflY-a11SadOEURyMyLwxh>1SP_3@H#vf~hUJo)__DvM5Z6q7W{00jPW z!()Ed1Fp@!oQ^x=^P(i;fxFq!f|p^(+P3qCa<4F+21GM3;W#Exm(%eVr zrd?=}4B5Wrgu5P9{!3RgwezKiG{;$VK&Hh`loL0Muha{qP6 z^+Z9VcMCJ9y+SkW#KZJLxo;=KTiAR*;KD-Gf}>Zd?3RqUgkc*UI~F4$hL)$aK>xeP ztPG$O_OB&teZ@aC^PvS?gB6uZiUgY@7<)LB0-Qn==~Udtf={zDSfQNd^KQ{D0D*}B z7$%SF4obQ)v(&nmTO+OX(6i+rnJBquoxyn`EnTHM-$6L8J zs&qLp^*A~Os+6hIPY~8CxF9szl94g+$Rp-?)a{>uM zcUEdrEt9sIrY7(gg1>cGFC=<&r44f!1{=%zS)8DLU&*n^ZwSDX#-!z?SH#7)Les2{ z(Iy8Hl}~*iltt`;aS=lsl;<+bEf%a6E8r~ri+9SdqHEBz+lpKtFcGRO_BwoiR?iutMPLxJ_O z5>m;x9wvmviDaGCTajAFnYr2Unm?dj`|7H3HIdeHzen5eb3 zpj!r~hIUG-4zusL@9c}TYaE{TE1b3qNa+lWD~iaM<)Pkvf1{qYfo?lE4~VOr^5&aO zr@eq)#+r0gd`txfH5%fAYQ_^=bq8dNb+pKIG9va5VfiijrKQxAphskq5Lo^hF7@Xp zK+e#Sp^g?8ryr6z2PDHFP@>1hu;7?Z&QWAU3`T-RF{_SB3(&Ct3#y|kcQOCz}yeG+>iUxkT@d)msr^agLqZ9||-2gD5zFfCL$^HO5)-q61){xO? zhZ6t2HO>&3Q*>7ex3sX}W%=8K4lgPR`Hhz)UiP9t>gxfwCFRLotD&x}x8m$n$ZzD& zk>WhH$i0UulC|LkP_fv~U&X)djC4@y21aMPF#R@Vi7ubm!1s1Ez`3&F(Y;>}roC}F za~P0@E}u+PWl>mkGc(#HfA!uq)KxG01n4-DPfk!z;&woxLD#(#tkQYg+-BXEQM{cr9lZ*$V*-JkcV+5ZOvv9lS2^hGW!5E-MiS7iy+bIrrvJ><{{;BKo* z$l{L~_`Dg(a(xPFr3y`vgYR+>RAk+F*}gwFJD>bZVuL2OrIBHDLHv582??|el_;`?lHL{TFK&e00vj3~qCW6rVzJ7rnpme- z4&m&-k+ql#Zu}Do1+fYCm@l6LJ53eX?@O*FQTdU@$iX1UyGT||Rn5e`?+UB*vLy-@ zx^;D%Wa(2=#^vupQqN2VGr*hy%^w&dl()|p`*u5*$q(8KR{^FnD`$S&Ma9pbCLi3| z6=BOE-8v%W+Ew#5+_4mis(&3hIhWJBvZ8{R$j_@j*kqwmqeN@jc*8Cdwswu~&!Ucz z#C|6+<&H*C5L1csz&MglrWW+hOYIp$LjX9hC?PNqfO0&Mc(wu;;b3B<2cTmk?ujF#U4g;+f6qL!r6HJ~eN`G^^^Q>b2gt0P`p1~bJpc*zsOP@; z8y9$sx>EBiMjIZ`4$B`$DmH&RukZ0OD(nfUwfeZEX|UN?+S8P`7XZ5Jh9^x9G8XDI zI6Q^3A^(lrV#${A?-GU$Cx3l0`5Xx~6;#BM!yWv#DL+j7p7sT(@=Z&Bad{Dw)32G% zb2mvfT-0(ZNQ_!%||e3-@d7owv~_X;)P9FPevCdE78eap2sMIKy`#Y z-ehhAX|tq+VQ8_9b29kjBYi;so~OJnc#Rieb%FkNRdeK$46=F|6|Mw>GYsm=gnDdB zR(g71S?qTx$i3Vhf_gdQn;(gB!HFPk7LB;L1fP{q32dJjz;oqLhh$mCuf+~#+(T^4 z9Bnm|0c=A>U-EY-qrjXDa0<&O`;opw%K9U~5}wW6U1(R}jvJQMyU)H4XcL7QzW8Kn0WYVFt6R-PQvr=9sx!xSs~@V zloo^9fG>;cjv>MsbEyQoprwfEF^0r|C()a$m{fJ!)2;ICmR-Q0Py0Z|o^9aX{$AAu zDF_L?xRd&c-}`!X_F11yzZ8r<;P2$DwSY6ZFNw2XBCV#A%U+=S$4QgXLU*@a3*Tq34j%bG7&v7cTkqWes70SwkH0e}4IXdkgAS5n?g0lW_Oz=tI-k!BuojZKx_aJ7)drb9h>!E(>fk z1gQh=9`eFidDfMSI+h8u#{s3uw|n5DugJlNXy7J9!QcGY;w7tVVO*(%vI{AM`Hgbo zPL=7oK9e6eMa#qaJDX@l1ss8y5g!>=7b59H$TL#ClFgQ(kKS#;X^GgNq~0>6gzsNx zk0`EHG}9DBYBN{&eAAq7NglUgoXUEnL>CR!Ops7U?o)`#1b=vK7R{#9m^vdE85G6+ zr*CpdXBt3*EI6LICBMQeO*ARe{<(_}2)V-yL;f}o5Ou$dgC}z*aR=Y(eRzO`8&H;< zFbAEeUOorX*vY##!;+Fpnq~F3EZ*h~f;_Bl3kw^Hf`!HD;(!nlM5&U1vjZKYKj=Hf zN++FWcg8eIh%DtX(!%uP{^azz9(hL~I}c03{JlP7v{f6?d6X62Y~~g-;XeaJ&Vv44 zf!`EWx|#IlW?y%|cqc|mnBGZjEj(j#qcZo}(L{Z0)OWC8>!`iktocEZo}|EDQdC#B z{v$FDfD7_{qkJN|Df?|#cKpepp?G_+G5D9wSdjBcI}L~HA=Bd?5QbC&=XEi5cN*Q6 z7^N@K6vo!C)ckSEzb^zGpj-U)2M8?ET1rLVajEXUy`>}9RdOPX((!T12yLljzyxWP zvp#2GV(6{b5wYy(w&eWPpoORC!+f+DseEOI4x05h()7zhPLit|C^U57+*6&!w11N7dLpE4?MaDSa?nCKP~HC%FYA!4`yTk z1#53eNht5`4*1_OI3Sm3=d%=NYO(BANvz&+x7ZzNot+~_(bW#Ksty*M)SvOiXDNE; ztyc`whlax00Sk{Q5#!JWc$ZITl@t@9r4!n6i>sBIyl=6Mrk{g)eZI}v0ez}P@DFz! z1PId0%*;4v=l4@3jar4O0O~8Vgh}*WCZ_=2Gm&}Fbo;o|o$mOKeN!C|aT^Q3LC%fp zZ>exvZ0N#tcUzPIE?Xt;@ac;dR$=~6glFf$R9B1N+LjBUvo}1CafzGId!Jq7TLq&{ zC^~^{!jow!g^E+=YU_lh)Yw>Y7gBGud$LC$ERtm+&_VeWd?DSS;4C-ExW&rM!1Nldg2f0lvl%lGXiV>?gjk!Ja@`Ek zWHS+R#D^R=r~}jQX40^iY9j!bE+x){6XCA+G$GtHkynxpGO|GCd(V}3F9;}V^m?^j zKRc)`+X)p&b!=30zc=5OiJxH6WOE~hvyoIfA#KGdFW0Ego5guBHD>#qiy(NqR{k9VL)ss^DOv7~2UP_2j8c50iyoo?&%e9A$qvdJX(r(t!J)`@`M7 zZ(k;d^EEbDeyls^QLACrmed8CK8i9u$^(F=EgnCkY-yf{*FSdzG%GXYm@9FeUgvzU zmVU-Z^Yrot4)BLAFYfEe)7r2h?@|9AnE!#NQB*O z69b4qfBjOp=!BO$TKHK`-@ni1WMVpOa)K zTNl=!#?NsPVuJm5{zV^$fGPWh`+1@iK+HxH9W#n#omfLP%JayUN94FS0C2IQCm+8> zBHaa#icyeK1E{#h6;1mkCDU8(i{BKFVeqM-+x(7A;sO!LIn8(GKbXp6Cn)a*ZHuS= zQ(pko!v5pREO)2vZ9kk^6GiaU{@Pan{$mo{hI1fY?=lJXP-~1W1-JpNiKdvpwjv_2 z`mfG@F$u4|ed%Se^!?8~-%9v&A*bi)Gth74MkvQk((sIH$iud!YHRr?qIMOzfC}@$ zvB|)|Kp>(J{fj6$&kbUlu7`#QrtQI%5yteKqBJqix;|waYi?!NtNEmcuaX}#CFIrP zj}v<`yfEPDB-pY?IB(OG-^!JBIb=caF}mCXuRv5Ux!)SL2h#K)?$ZJ{ z0*$gync3tRGJ3t2LnnUl+tsHw=onFl-TcB^LM}%nOFpZk$srJcPYz0GV+#vgLDGMo zH52t4N{=gJD=k6JDx&_5QeX-8ffy7ej1((<)u%BlA=_RtV>lE4{G$`7Orzqpg|vJ} zI}Djh{MVPB@!|@(llm!4psptGcVwDlE3V1Qnjk}~7iv~|b-)W6OMn*`@LEi1kb3|2 z`)L=e*nK+ySXk@#lGg8DuUSG@+=noO_na4=q$yd`|DfhB*2l+EMnqhH1!_He5nsAY zcH8)V(?(6-PpsJNO~p!70CB)xOvf&P#(-Y63$lc=DcTqSKY2uKwyM&x^y<_YmZh4+ zGG}%~BSqGRB8>H;K1*-8xa#1rF6yNNfpm#r8%VI1tL$2WGB87bq|#AI$8VY^pZU}? zO)LG`?0TV{nz8CAOz14(y;kcN3}OEj z*mcfRt{IM_>(K`=tN;YGRDYXEzQN-64P8l|hBt^gk-DK)=JFdImkaLWV-mn+0ntc3 z|18x?_GpfrC~3U)kP>!G$<@2ApM0=|AqPc*^S=JGYv;#nrFQj;e>Pt@yP!aYaM08; zwG}(nTG&b`RAFRVY`9=+YjUB%BODkuh)0=!e`@ropu#qpYByZdbktPsnlO0i;(46M z-s%F`b#>?4L_KVGPZ4rm3Q#3d|)d@(y(&+qiHd5Ngi?>9XrNVfLsL zjQsv@x{R0u1>`Ggnow&GyoV26t^;POP{}8&-m68-R@n{qxmv5M#l=NE769yzo++V3 ztY;*2O}p!yk0s<3%Ie$BIvk`MVX2X@A1E?2BQVgOS9uv=#_6%8ebgs67z+xI9DubDSi2)s;|` zfo}bT_=n?p4D#Moi8ikrK9Kr+l8yn$zdrW!>`b9OKo#nzeY7!=JzC645r%Tt<|n*+ z#eOpg45&b@rfYw8W81T+cgHG^BZf81_w1}mghgHvQiE9(6)K#=Can_|RF#xOVdQ%M za>ks+!vM*pSwLIS=I6qO4AplyMysmPEB+qSWC81Lq1r{4y`o%zF9V{{sYE$&rL`Ur zR2Xc=@r#o@=cA0i3i1>&KuP}+bdX(f$TBNCJPrU?aDj&5Z|dC2VZlB%b$VwftIc2B zJ)u1wL)_mgYmu+fz<#nu^m+OQ6(8X8)YQDE5X67SA{S~%S7m#YS?jjHL-guHgAnke zXd-7V=@{wnI!UajOSLl93m3IWA#EYa)JkzWJS-|zM@JH7zIzPqheDWab z%j&&Lb$-JLT+-!kG;Hq>gYQc3w1@OM+P9t^BN%wzCcTVs_TNull!_(Sh7L|>%r{uN zy1Vm%{m=dtwrt_BlI*z)()sUedO_nG=cvH1oqyG&Zo-}-?9;;xoDDU+3|Dev?>zl8(l=4{XUw96{1IJHVH*IR=Nw?7oY1h*M*b#ggDK zb$Q*`aleH+T#FO|*Hv-X?@ZmAoY;Cr_QaVzd)1XKJt zl_V4H#fJAg4P3>$7R!8OKvRg?dZcXhb3YW)sHjvBz;G|M4%7Y$?8CBQdP#kf&xVB7 zlLZApdEgc7&je*jYMbKTT^tYqqvI|n>w1F-2CioQZQB*sn8Jf4n9X;`n( zTj;!Pz4+m)oHx*7@*odLLQ{buz*}CAepB>j+1+Pv@sj)C)#NASPjJ zcHMJWw^7E$xI^S4j0pnq(BX$lkWe;GOINOUVbrsL_d*qZp$BNvy&~OS8&1#G_l-O8 zfYSk?49%nI_eh7!ft;B%IA0}plqmjp{jh5)-+`cF@FS`jvOd z7-`yF1o%ayz{EK9TumUK(-$C=>M~W>1llYt6ooJZ0yI3D$n2KW`H^eVKWuOu_12`R z!JlSBseDx8(7zyd6e&f$CPbYJ(iz}IhuZ0_<7?m>8izB+3C|k@rb`+<2X~83a2_M3 z6(xQ+jrE8R4}6SD1IC#bE#*&u1c4OdR9M!P^GuD)+v+M_UOpaKQWz`q%fp}P#RaPI zaU7|sVG1nYjs&JZ{`xSKAXP4-5whW&H)me1&E_i%kNT%DhA=i;$gy=nCRBep!d~06 zb>ZReBctB{GJT$$2axJVGjx6!!{ucOSP}!UtU;h1M#A7uV#={nv2i)zPAK-isVH1v zV%ZYpn%g84--^KOBZ*nbCf~Asy00kwKQWMpwSf+khYbqz(2R@|JDsU zxE5w@&SKE$0L(}LTpZ^AuEpN=j)242dKsc*DR3s!M4?8ZZ=zmDn899lcZI?_*tgJ*E~A*J+0(i@dWE7@1)X0a3C~Oufx&qIP)#w7JR1NM9V3T+ z7MP+(N1rs?z>NzTRL)}Yw4P4F2S&syF+GI#MLLx(qd5EGv7`U&6cXq7D8DnHbdjfg!iOV0uzDexcIq7}%7}E$vjRMvJ)eiqvFg=*A=Qds$ z$iu8vpkDmAmR`DOCAPyV>3kIC?-^}XMb~La`7g& zyR(OE+OGa}mO%Y|6|~vz48=qCI;Z2ilz0|gR^SqYOlicPXRSo3z8}HG<67r`=|V0X zPNE$6rRU}To>4@jq^)~U7y#bHIc%n_u*q#Gd1J)(<>hm*JfHBgz|x}E*eFeJrSIBn z)$||#Akv~xYkp53-%6pg7m?Fj7gspr6@4g%IP9FZoZA>43%11x3so*g9VOaMAfWA` zTZuyQw1;{ml(LNdTJ!(f`^u;)yP)l(s3;()l$3}90@B?e-AH#y3Wqv$iwa09-AI>o zhkzXEI5g7T-EoL_^E~pr|G&TA%b&AY>t6T0C$5>ZFhIo2l)vJh`(A+ z3y}(dTCF)HWxz=!-(S zf{JNT{^@~D9?#?FTk*@O{tCh3Ph!D^cvvk?g~L(Erech)9aZCE zc7#-#u9})o(uASSXcKX%KQRRI0g4kW@-F1t21o@!uTA*gH<7W#2t4!?xG;*4e00$z zovTqy&~3rYS#-1?|3hefnl@mjN^4&Ael*n>eJKox-w6qpn+9tno0EU1>Rdrm&2FeBNw{Vs5qwiO&x@V zK__vYzlNhk3p5Gz&m5i)rt7vO;rA+eLK2vTTz}D~O591g-lN$)Q4`m^Z^B@n4U!Pg zTY(XC1;IvE}_4$AT4qN?HbxE1c?m1T=kqIIvkL-FmV_-QWRNK!exP%q#|F!VD zWfm9i#_qg$$F4#s7aPSd&!f7TdAaULkm86=dsw@-Gpk5a=W+CIkmIB)O5R5uL$D>n zl0wnnmr<`fWGmtq#MZ)we`t^kv;Pf}zeY%~x~3K%s@tv4&Iikdwk~7cvz?-lApmV5 z2Xedb!S|Z?qq_3-SPP%&B!Psv@by;MQoafrt923dp6;3ItiRD(h?c*4#Bmi|_|xF* z@n=gd;HYIt%_k?D_98n{-;L=TRmpf<65Dab@emcDvh05QB8Ka`OT*Z*`Ip6a`@WgsZ7E?42$3z@YX+;PX$-z?aQ?BCV9Erp?m!@< z-+sJtOK2x#O?E+FypzHHeNf{i!F1D$$HBk(w%U51JFM`HhU9}NS8*ex_A~BlT+!wq zzd$bnBSyo~nlU-71cG1}i5_AM(UG+dD=T$frB8MorKJCQzYo714h|B{%=v~vZ_m+i z=o6Crluu$k!f<5peGTjh%jNQN@(R?Mhv%v@Q-g?sGFPR77;V3LUM`RJn`ET6_hM=d zu~tOr9>K8tJS@!EESiOvSA^74zQQdFLmvH>;wJ;6%Bda(y&PKFcd|>gRD9UG>S~=i z13gENk|nj~>~MIL^gIX77eR57(fty_e^&(w;u)QA{ZV`fU}i9$jUe4Y{kQ;W95QQN z>+x}^?!@cTVJ`HXop8OjzB6$YpnhdK+(zBUIRYbtD$kN&^A+I)iZ0qpk~{$-YAVjU*ve>D~tG zyDd@J-T8EuiQaFio?_e;GT_&eWAIrQ8z>XY@6V1fk2IIl>29hn#Y4pFD8|TR0s&4u z-E9{GB{SoGpCw#>TAe+5Q-Jn92tEtdLY^xC#MyBPy?l8vs%mhI>1rPVE=R97FE1%p zPW?jUs^Q|;P@;Fs2^CX!KTNdd=Nep-ydxne%`L_@tyt^6TLL=NgEsen<9>+RumEd6 ztbV?$IwZ4n6Em9U5yoBN6tm$(b2K%|Xgkev&3r{onU>Sib(0a*K+@)H9u!C;j>PbH zcuJLr`u!}6oR0=+XA^y#q#@FaKV7`#f1_OLdoc_Ryxy3QIz9rXmGQB=3zq{@M@Y1~ zrYvE|j5>}CwM3V7VhVOvmd8hvzN+z3Osq8fyXWX!24%QEhPTn*Jz^sp+CAZ5Q$+In zb+h;DD_f*!cRqRRb4Hl3u*noGyfZDA0^LcXqr377^O6bf~MfB*@*!at3y%c^<@z=N5kc@G=5osY3->*aYrdQ=v zQ-$YH3GIzgeKX4m%f-&$QZFNtxC%YRE`s7fxDI;?91O*sH-K$A>{H8>!mDH{gLhT9 zwKy%b1oQ&c86TC0{1&quOaV4aSQ$sl7or{aTz_(n<~C6L;}wwtYFc7IUBx+MIPAK7n80R zW=!RyT`-i*YVJ@lT2^E*e128~&cDR?q5w7jcHf zX_K@ww(f^&uCjEOpltV7l%2BQO25U=AYXBY=h>reY{hR{T!c2LYZUQy#nO`7m}hx; zAcI*ok0DV_x54aE$oHEJ56;Q`zgUQ&4bHdBLX;(1S+0{jm7)*C{CxX8`}{BQ_n^{F zGrunz457vANi5gz>C#|R0Xa7i$bS({+x@^{MH=;Bz@q?HRQ#|S(;KbjiP0S+X0pej zu6(n8mbkX3mIk;vzV;jMgQKGKOwLXx=cwgzKMWlhIFrM%^Q@<2Rw&X_ku&0-+bm;f|V zR&HyS4%TEVthcJ$N=P;&s|2i*U;#}D@OD~AUY4BLCmG`o#kePok@$yU;0NA4pRJ#& z8X)6=eR*%5?yd_1zh%yJY^>H5)%6Uu_Us3w7I4@EMyIz9WI zP9~7eQjWk=i;V6{F+)fP5Qd0eXNrLpkyjdz)wErR9( z0e7VX!FkdniND!vNIGaYy1hmOP`a^2w6aE2HcB%8It@N+#!2Yk{5CX+n7EZ@5iNsR z!%CHA!G$X-w`8uPB&?%YK+R*Dz-0>x|G>p9DA~$Ge^F_pKs*+c(vqr(0W+!q%GQ~Vx#F#; zfvf~eGJeod@#$09pE-M(#(6M1JFwtqf4!FsezL&VAL7Rk9S!cEw6vwLG~mGOs<%} z;-Y}5dwA$}({-w?AG$K%0TvmY@jryTZz8?#2$mJfw*IIPL&I`@J?-T;vl2oQ`7dp< z8NmimLyQ-Qvz}Vy0F4aX+i$Vxj?8FJEmcjU&V$4E@^W=3?%9hlR6Gqa(dvhKAPs-6) zfPa;cW+j%ob77mM(jvc$96(c%up|umea9Q4F?eRa_{#`30pT2pBe*yT*k*C+-8>HsO#D1s=W zJO;0onr1V`KvK%IX3)ki*u-$J|D68NiqAmP{r*+uyC-w| zXNjtP=yiTfIVKlZltz=kRr{yDDm-Y7!07(WyT88YD+zJCRGHIxm~w{BGr#dodzY7e zW+j;2`*n;*h?BbvU)sJn8`J99e3|&*e$<&p6_D9VZzgqay5YJfU}$J~6*T#Qn6S2~ zm$kD5t$G65uQkQ+I$pM&rgZT_dT$h@3TF0z!Jx$n;t~J66ER4i#vK?Rh3q|Zq4A&o z^~I8WY4@%0r>2xoU8n3caci>e5O5^8=s(77-b|B{9mDbz$K`GU+QY5Pw-fW`Rsxe? zE}aszcvs(_@?GlfmVT4kb2f<0RIe`y`~jcRg< zL6yOMlb^ZNlZMA2xq#mxOWC5oplptY*ij0SKS%}#F_wq>;i{-VhN6dXmFcz0l->Kl z$SHc1fAa$1lOX+}L;J+vucd+_sI{%vA#Ej_4DqY;V=?vA?4ts~8N*-CNq7869LM-+ zEV$_sxFxHL49R3Le;K9X(MGU!E!)8&qlnM0EVjXHbGmh;_pwJ;HNIOBYG9Gb+iH7? zuU;|>U}{7QvvNi@Gft|cLi!VI3?B|%Nk%4x2tlFdFp+SyOtjzWFU*B#aC`-|ao)V$ zGSvBFaTJpn%RgOtC4W55Bd4$7IJ!AC8jCP>bDKJLN%BN)R+>)7p7xYBIN4AMFh086 zbgEsgtztesNyEC-Z%tEJe`~RY-+wwn$9w5e=(72~P@sJL4wB--7V0flz-Ckt1?A+p zAV;Xx5az0BK}+LDJ|FMIa$(F8E?&)GsSK6aT&u~rv2vD+llfg=B(uQepUuyo9v5mR zx(sOKJFF|B<3&Z$%SNN_EtYT-m5LZH|2ZbDz4G@@b{x@*oQ0l7_!OR=4vZ9PmgkP& zDHMTBV%;`_K=iH5qCY3aLAR!+;)u7|Nz$|57CfYPeY3i(L7l4-KO|)crHy-vuyUGxf z-7){=&)`UuGq!#+#~p`2-Ti&jdY9$^+(}AKiQ6llj|9Pn%}$ZHHQ1aY?ho#!YsUSO zw*{DVuJxJ%ZK)((ikpNa<>q$pN{a2oEnqJ$&NEL^NKM!+JD{E^JRj3E>fA-^V8%-i zv&utsVxJLrFla^)5qIIL{E1=Fj3@P4aEpIN7^<7ngnR&hEw5g;^n+z2G$_bEerD#u zcjOxoFhIHtg3Ze{5}_fMa-s}MS})`CLWxWBM|0WJtkCTwUIi62A8HyRkIc-O%PlR| z`jXR=JSdUpnS->*-Gpcrdhyl*8Pdv%L%Tv*l2TS4#u&X4awV#z0MV5Fguz^ucWPWIx_`zd4oYxivbhByUs!eJ>vpa(?gKaGS~aKteQ~bi>l` z;kfyJpa-+F6CZu5-!W-X(G)U~vN~;__hAdTJC7($9ukO^pjfNB&k;@Aw19cuwX!z% z|5JrJ&XDyXsq-)xarc~{gH0b^M)Gn-wnFGyxtV)iv7vaWs;u?&@YspA>ppsHzSe+N zW%@d*?Okb1g}k?BbUJtpI%AskFMhhpTC_7&zoTw2Q*bmQ*P=4n_u1lH3in@5u3h%u zwzSyTDsW2RELl78c|DSRndyU$?-)PR`yVe*^HuZs4$HYmCyFVCHoBa8@Ganhdf9Ag z>YJvT3O}dngSX8?LjB|;4;Dns*N2B$ZG9aLt-B zHqMCGcy=#ejsj>1kxeM(*gH|}s}f%vyb>5ITAXdKO2l&Pu=>F>`)9t#8NLc;o)g^m zll#{mnZ(7#oq>^`+^nqj8^x`T@va-E%gNJ#5$fvo?k-i+buRmHY!*w6J|cv{Ep`Y# z{CYR_YM3!Qvg1mDl|bOaLx}S>>WLr(Q>v1oql4M$g>G*yhxigm0s zy|p#X-#=SddV4f+s)WLIDYmPJWVM)Nm1KONJDQrd2P0p*pxjK-VmH-!Hg#jHJm0ue z6P~u|(k(2!`Jm@ih%%X@HP#~_i!#}HBL&&&$(%sf;JN#t!>SkkUx;;?N>0?dpYE+T z9(!Fbd(l@fgrU<{%@kgp6^2J8xn778E4{%E4pl*_1bw2srH!+`fT zme&a!%VS0OdaQjb|50&zh7*wA_Ib}X^iR?3YrWHsSkoi|O@1&6wg&-mJ>Hs}Eh^M& z;IAVwaM)k!j@I)$g<}c0UmT8HtrcFHGvE6F&tvCedR$&1Co`N{HGT(`IwUSpqK1Hj zsBghYIp_DGX0C#~tV+L|V`YnDdPUt=!trlO6X9c}ulSglIM$>p*V(WhX88JPeS+sS z2P$@|rsFf1KMc*h*OB8+rbK1ZxwtW-&tuWEIA&|7T7E}2;~jgcy_pSSp=Um-P%cZw zIOWy97>+@NKxdHsUmU0I^hPQNbNO<~{!gI{o zl=92Q^M>p5yURBlJR3;%y){rC1{W4mTYfXU{1L{?ukr9`G#+QVYBe*S|F|0A zak-x?aCN?qPp5ee+WPE!2S=OZ;i+BN*w~U8OZsOnSrqWF#a`U{D(Ga*VFujf8Ufcs ztzQ?`G1qkooQ4ZLK-8NLu>ZEAzmzAfJF>Uf8BMDZc2Hkt?0R)v`f7lI zD~A7Vd!IxUc6-s;l)p4fG6hrV7rQ?Qdv1^2X8Z=K4^vk>Y)WBz4ZFeCID#k#%6UV% zLqzjKYf=7^(J#_RG;I@p59HfeF#O*1aiz1GCd|)%%rTDA+@~t$c5)KTy)G$};j2e?&--Wj!#mQIVr`Ox_p9wwzS2Y} z`UttDsGBXq>5@B^2bvXg)iKaF7iHMPJJU-~WymH1R&6>>gtg4JY0F+N+5dTdpm-9b z#m&j6NskN9%JWAY#Qck$QjxU2lig6S^I3qJ-Bwa8Jyst7cXwCI`lrL; z+K}W6E@tMv9;f>K!ppV7lFT)+!&vDdv;M*2DL*1i_E5y|~LbCIHR$>JhF-~M%XM2SmD{z=2??ZylKoi}WuU!q> z94k*g?J}+3Pu%Xp_zq`!fKu@DXl&c_xVHVbUvnV7Um^yQG-*AAXX`%d0t)F#qqx9X zU;6R2Apj%R&-_7O=$b`&?xuUkN^LJ(+O1s&;yoADJSpm?b{cKE5M0X%2(Qb1Fda>z z@KOju&aw>Kj9j~){x#kJAq@nhC{6e zT*pITH4`wuA79D+Yy%JC=}uNJCn0?p+*8Ky2qIYHyQO|!Hl6%dhO;el&S~aU;a-;I zMYc+oOwbFGY<)a}Rbi2GQ#;b2!N-mb_(-lc&DM%#xauAqBG%gl)@FSXh`ifwQfjt*{UJ6EMDCBt81zf$R(Qv3{O2|}mvTP`v#(bjw;hfrodm$N_Y{sGE`YVH%*<=(>9}o{>s{_ehl?k| zI;b12kPW0!@R^H)B*(G$P7}7Rq!)dpJ_bNBbj+$j3k+^V5!Uq-d3k}014hcK^S#c( z`m;4KG=*;!jpur>{3TrATzC)X&7VB4vn($u*W;JGlV0boUUip;g#z1k`&&Pcr;1n% zqH8=z6mTwPPz9<0x8e9R3y1ftJ=V3RPkWrEV4ZZpEd{aks5f|ez`i$~^zJ2JohE}R z0|pjgOE1|uA1d&y<@2{h*)2rFd1nLg0Awzy4Hx4L7fT!srzuz-R8TT|pG~hNmSmSJ z<}@Y)*=W;4jtQInZVrK?KZc2xm778W zwWl^+C5)WB;19aqiBP^O^7kwLZ#cJ~5fYxYiSzIEFW67kIH+mcimu42UMm5>`k_+t*&qml zNL7WAi_v=gOiZ@(!5m@=Wmi)@_b}VQH20~6Ip<&3p@QS)SnYN_&uG(T|@{tK-J&x-@>izbHiCLes=r_bUS zI%nB@O%qND<#{&CLOl=CjzM@ceRVPIH~+|yjkte@c0fxa3hph{f{J>n8x$JqXIghO zX5j^h$HNizt4L z0%VXQGJh#~{?mnUIqsbC!FDR(y2f-yEdcLcCD;g+5R3L%R!*u?;RtoY-8QFw@{~cR z>pk4v-35LEm((tX`Fqqfc~VCzBZ^LootrxjO19BB=`{Tl@UOIoJ8yil82F;Celq8S zK5;l^vgg?<%ly2J%+&c3N98LrCrZq#IflzQU^g7Me;)fTW+i)aM|bJ~6Db`<8*BBT zkR#~5z+PkmK;(ctP7(!_oY%24ijLu!P#zdomLAS|Z`5b^TMd$HYu+^ntiI?&dS#i^ z<1^IlG<9=K6YGjP(_P1erdE$W@ZZmxo`ty_e*8x9Y0(NB!dKz^z0BO+2(ZehAn9=3Nt+<$&KlL8SaCv^0W?Z%NCEabHA# z8li%glF@Wp!zmnk8tjfpdcrPVo{E+{wLZ1d# zS*yYFPqn7cRGm~eb@k5Y@IfSUG{6I9#!YsRNjN?aNKIGWo5iirrove}banD5?0qs8 z-u`%fIG+d1{p7G5I{;KnI8A%Bk~mH5$?1eVBx3&@_58q>sU1ZxG1@J7HW6)GZAI!{ zoxNK4t@gdk>70e1&U@{z7-~04w%wO`u00ii-f+=!yWy>s277KDS{yOdjy!Qc{HVZ5 zRS0ID%|{(JZeDK2M{?D(zsD`_V#Y!UKX|B@n-7&3cd}cKm3bhKtdwX})>jHPI(K$< zY+Fex0jq(o)Qq#jFWs;~7u4E=+>L$eInJcGxU~Y}k4BFB*ooC$lbJm&q#g%-y-6}0 zm^?N;T+6(`uuY#0S0=gdweR=vFt8@s_e&a_0;n#5sF>I_-1%6=ts4GRGs$Hswiox_ zhTT6@by^x}W+WC>hc0ENQ3+QGsaDMW>Eii|=Xi?nsQdCOdX73K6o{1iBIe3dLX ze_=*;&Kg}4gAH<0$Rel-dk~atUtMme_wRaY+x)s)>$q7nAHs74I^LFj z_Ol)<%Tdg!duMHPzT1kA=F{HZZgi+3ku=xCvz;)tbghlRf4u@G2w?Pj6YvR(|D+KG zi@cTmK2gJVJyHmHP`3oY_u3snNC;FjO1qS4qG46m8W_P^&3skGDz1%jYfmK*>mA=0I;mS^`w_+vk2jNF@S+nVca{04&Eaq4aK3>bQ7Pz%gzN0@N zy4k%%ZeM|L%zfJ9*ke^%Z>-!xtrBURVAsPHt?Rm~)^IiyZ(YyDOXIxr3-xLPak@L3c4yxA<>MV68mZ5X;Y_@L;(1*{7E+e&5xKlrDpy9W!FX^ebX{q(G+@*ia)jCSKm_ zU7H?=Q@r*$ys)3)y3e4HIwRbs!j&IQd09WgD*&+?Dyci8{iOYXY)XbUeX>o{1IaKV zTHU%6u%aY6w@>(+Vk>7|ru=qW)yuvla!D_s`?+}qar6UqqzoRS46ZdrIpbEfbQlsL zl5c4ug*p!|Q4Q4K3TUBmqfeuRrOo7Z+gK31O0;+ge&j~_v8e7r7`6c$t8anPA#jH$ z(GBN|tMI3~8?OXT+k0aU?%`|Oym|VSxP4}P`tm5c{vZRm$W0ckLC>i`Fm|>GKA#ZlibPB z;0}ZBt#AiHy5vBPW)vznv>tyfqe?g#*nPW*bkW`FbO$sg_YGKy9nI9tcZ@dibLXGd z;l3jfUwRM10!}5mX+J9DC~wsxx2|EA527?^h%DTbAGqfM{OLd*{0DW%Q*NeF@A*rB z7a_si&@fG;@VGbAn=!Du6FzHGT?gFF>5e}8OUYZ#8nfgCa*?y239jj*_VB&Dj%KW< zPg*!Gfk#Z$I;&JN=A^c?1zRyE@h+)Q{&lNh=VKusi#8h(#t&6yvWW) zB{{B)T1>Esej#S>^wX6 zx;j1vaq(oN@)}S9SK!>nbz+;@t*3|`-OidmErYZ}`G{_OI$}0&3hY+i7LJ4$yiaig z3DEk7cW2D-TW#}olYekrrw!7o#?crXa7$t{gg<@qaW8(m!zWNWkwE*4?880%XD&0| zs0AQ62Iz1cIgTSxL}~1!4@i~DuP9X{iI39}_y( zYMzQUD@|ffuM)l7{Vr*g(~16+UobMgw_CAke*bRsAP_%M;?_t_k6hhpZl<9xDhrUM zKzB-zWzhfrmI{ApVutGF-@}1MgR;sO;+9Zz$BP5hUi3iJ4)jh@HV#gyo1ChRGpKwK zE7iyusoaW9Q2vGzlXh>vIs^V`QHU(LGpG8Og4Ex9{|DVK^HrLK@(yUiBQJ5eK2)cD z?WQFmB&J%Bz6;)1bMwYt9t9kg^~1@bv7>gW33CUnTOo3>_O9*vE@jHJxM=29jHox+ z!(OFp&7{WQV^_mWlxh}k|4@e0Il2hx54WW& zp?7B3ymsi|bJ8-Pe-R(v`p&cUsIjXr)aw?$m7~m+y8w3!;R>~ zRf$^<#nQ&itdbMrvN>wzZqI2KD;-Dc zb^CNWF(-GRO@kwX=z4v#!melk&@7c!ZJ5hU;d{>&`aD^S^)3Cf-QqiigDzh38(n~6 zx9%F1t6H);D(B)dvG$?>BcM>N+_8)*ooc$o01i0re+Ng1CRuVAI{EBz@62Wx$B6ir z?@3eivFs<@5KyW?+^RIB*$g$C`AX4e$CXUVxK6-*la`LT2zy#Hrc6ZW%oe7J$k3KM zz+k!244X0udIfb$*4E#>jot)p%XnB3()29%kuPo**q4DVJYv!9h{2~}ZLf9fvhbIX z=dNINOlM@^-9DC$@S7!wr#WKi6poBXQ~i(`B+6HUmbi)){w1DzhJlcafRSW z{6=ll)QDS$Tz^glIXb>up^6fQpGS75`=OosEW*g5>HL#sAvY>vQwAmh4jmb-EIH@b z*J@gb*jA#%knW9kndNXQ(k|FlE2eyv%c>=5^t_>nk)upA--IQXeNE}GrAMlKEU1R0 zaYCiT7(YrHXdJa(+hR$oDJRu`qGI|78|GQO2Sz_fE$=Qx{SpEq(C(WK*t+v^Rc8dJ#$0i}|{@QJV8>EZ!CcNZ1;^Lkl`X>O#oRKyuV)ScZ2-N+eoQpqdN z-0QU|qgi4`m&%xROj&m4kH+PLr(oYGRSzH$s0+6Pm!oQK_@P)O3MU~3-X73sMSis{ z85h+R0!;k>-W|GHLtL9z&Nt-xlAVmuq|lv`MVlrlDj?TVF!Y9NjMLXVDAllFecj#C zle4A__dzpoycREJL`StdQ!=`Yi|@0?Hw%~wNX?!yV^95u$BHaugdsn`TQ%uJaL`Yo z1z!=yfDNdV9RJRtH#GGl2*ce z)p4b~5uJiZCR9c&@a86)VjYvT7>nq!uRQRL8^}WnF zWCGf>c(Bo<^ko^XO01a38!~4eHQP==^$LpmVzG6S&Dm9!^)IQGN>HjNY>I(o(5v06 zqIuwbLVuwJ!HfnYkImTEXRV3lhu5(WU7K;yW79fLH{PZ&s#7g6#|rUBBNhioKct1+ zK$qCD9T(kVle$kKgCJNfHjN8=W_txi`WR+$NW_ ze;E+hosGx#$~@TL^=FDQt9Yb4JBuw1sdV!N5zI6O<%X8;0%Q1eL8-1R z<}H27Kbds%)Z)9NH2S)vR_${mI)ic00Y2%&=@v@7=Xw}hZY(VlY-41zk#vueZzvTd+lW_fvyT!i;ohi6jO84s73j-HWp3ZJ((dY!+xJ8KTWlY3fHtL0n+YoVskab6?E-hD zJ-1~EOPAISa2Vq$4D1!tUd9sWyl1sYT->_v>~adtjOmWruZHoHM(rn-^azk2qlOJd=`+xb8%_y(%gsg_G(?J1Kj5caCND9+S3%i|<0 z=MIbOQy`X?57}DiqZCIl_&_rm4dd(_t!0<(#ho5CO5bp|k$9)Hq)!1S%A(sWw=Y}V zR^2k@8DC{Oj}P14=KG#lZ}<8b3xpMB9vU|as`QPPEhVjX^li=&8<2(M2Ah=INy1%M z!X-#mm}BizNSI8esN4JAAYXdSm}2blJ+~noA^j!$tr5X8f?O!g83eZB?k&AyqD0e7Olv z=+=Z$|HaqNbUV;b1J`c!9lctciLf+fnbEk5oonHi*$4PdtOQxP*Pp1-ziB~OAy5&Q zuR4E~-k)zX?Eyh8#AdCWUm~}#QnR#@Hd%2@>ZEf`EHkgZW7le1+)K&8W~j_!uS{Dyl5#70 zN7(rIrZxmZT-C$7THv@vTsc;3kED+z?@RRWS3sKkC89s~ZLyi|DX1mltjXYszSEUH zuvyc!YEKs5ZOT$DQ)?v_#*;OW(^Ix|G#$&v`f-aAV)F1t=rcttpZhlxxHRr_v!snH zCOX$7ia1#f>}Q6TJZq2X@t~1=HaR6xGBjnr+`Ngj&-93vx;<}`9MKt*)H#6}!Bbg8 z`0Q&?Y)>@L_^K2;x{dNp&;vR99!|53?W_ zbEo%?ZOi+U8Or7$yHhy<>wN9oz6d*=3uMqO(tqPLiSaMKj;ujuW81lv$3(230oN5C z6T52nPt6zDUE%&vFP^iscGKcc+$y-zOW^|<*~!D7e=%EE0up??bk;7?PK#G)n<Qi40E$syCgM)Ug&ypbf1f4JuB=-G*WL5i3(^%0P8TypQUBr_bFd4BKr&#Eq`!`o za + + + + + + + + + + + diff --git a/_static/images/logo-deeppavlov.svg b/_static/images/logo-deeppavlov.svg new file mode 100644 index 0000000000..5aa494ffaf --- /dev/null +++ b/_static/images/logo-deeppavlov.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/images/logo-dff.svg b/_static/images/logo-dff.svg new file mode 100644 index 0000000000..b2f644b0c9 --- /dev/null +++ b/_static/images/logo-dff.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/images/logo-download.svg b/_static/images/logo-download.svg new file mode 100644 index 0000000000..cc37d638e9 --- /dev/null +++ b/_static/images/logo-download.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/_static/images/logo-github.svg b/_static/images/logo-github.svg new file mode 100644 index 0000000000..2c2570da1d --- /dev/null +++ b/_static/images/logo-github.svg @@ -0,0 +1,15 @@ + + + + + + diff --git a/_static/images/logo-simple.svg b/_static/images/logo-simple.svg new file mode 100644 index 0000000000..b2f644b0c9 --- /dev/null +++ b/_static/images/logo-simple.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/images/overview.png b/_static/images/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..5bd0fb6a1bb9eb94175e899fa612844893008112 GIT binary patch literal 152260 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
    "},Jn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Zn={entry:"(string|element|function|null)",selector:"(string|element)"};class ts extends ve{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Gn}static get DefaultType(){return Jn}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Zn)}_setContent(t,e,i){const n=ke.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?Mt(e)?this._putElementInTemplate(Ht(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return"function"==typeof t?t(this):t}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const es=new Set(["sanitize","allowList","sanitizeFn"]),is="fade",ns="show",ss=".modal",os="hide.bs.modal",rs="hover",as="focus",ls={AUTO:"auto",TOP:"top",RIGHT:Yt()?"left":"right",BOTTOM:"bottom",LEFT:Yt()?"right":"left"},cs={allowList:Un,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},hs={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class ds extends ye{constructor(t,i){if(void 0===e)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,i),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return cs}static get DefaultType(){return hs}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),ue.off(this._element.closest(ss),os,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=ue.trigger(this._element,this.constructor.eventName("show")),e=(Ft(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),ue.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(ns),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))ue.on(t,"mouseover",zt);this._queueCallback((()=>{ue.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!ue.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(ns),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))ue.off(t,"mouseover",zt);this._activeTrigger.click=!1,this._activeTrigger[as]=!1,this._activeTrigger[rs]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),ue.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(is,ns),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(is),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new ts({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(is)}_isShown(){return this.tip&&this.tip.classList.contains(ns)}_createPopper(t){const e="function"==typeof this._config.placement?this._config.placement.call(this,t,this._element):this._config.placement,i=ls[e.toUpperCase()];return Dt(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)ue.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===rs?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===rs?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");ue.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?as:rs]=!0,e._enter()})),ue.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?as:rs]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},ue.on(this._element.closest(ss),os,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=be.getDataAttributes(this._element);for(const t of Object.keys(e))es.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:Ht(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=ds.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Kt(ds);const us={...ds.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},fs={...ds.DefaultType,content:"(null|string|element|function)"};class ps extends ds{static get Default(){return us}static get DefaultType(){return fs}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=ps.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Kt(ps);const gs=".bs.scrollspy",ms=`activate${gs}`,_s=`click${gs}`,bs=`load${gs}.data-api`,vs="active",ys="[href]",ws=".nav-link",As=`${ws}, .nav-item > ${ws}, .list-group-item`,Es={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Cs={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ts extends ye{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Es}static get DefaultType(){return Cs}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=Ht(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(ue.off(this._config.target,_s),ue.on(this._config.target,_s,ys,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=ke.find(ys,this._config.target);for(const e of t){if(!e.hash||Wt(e))continue;const t=ke.findOne(e.hash,this._element);Bt(t)&&(this._targetLinks.set(e.hash,e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(vs),this._activateParents(t),ue.trigger(this._element,ms,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))ke.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(vs);else for(const e of ke.parents(t,".nav, .list-group"))for(const t of ke.prev(e,As))t.classList.add(vs)}_clearActiveClass(t){t.classList.remove(vs);const e=ke.find(`${ys}.${vs}`,t);for(const t of e)t.classList.remove(vs)}static jQueryInterface(t){return this.each((function(){const e=Ts.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}ue.on(window,bs,(()=>{for(const t of ke.find('[data-bs-spy="scroll"]'))Ts.getOrCreateInstance(t)})),Kt(Ts);const Os=".bs.tab",xs=`hide${Os}`,ks=`hidden${Os}`,Ls=`show${Os}`,Ds=`shown${Os}`,$s=`click${Os}`,Ss=`keydown${Os}`,Is=`load${Os}`,Ns="ArrowLeft",Ps="ArrowRight",js="ArrowUp",Ms="ArrowDown",Hs="active",Bs="fade",Ws="show",Fs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',qs=`.nav-link${Fs}, .list-group-item${Fs}, [role="tab"]${Fs}, ${zs}`,Rs=`.${Hs}[data-bs-toggle="tab"], .${Hs}[data-bs-toggle="pill"], .${Hs}[data-bs-toggle="list"]`;class Vs extends ye{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),ue.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?ue.trigger(e,xs,{relatedTarget:t}):null;ue.trigger(t,Ls,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Hs),this._activate(Pt(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),ue.trigger(t,Ds,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Bs)))}_deactivate(t,e){t&&(t.classList.remove(Hs),t.blur(),this._deactivate(Pt(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),ue.trigger(t,ks,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Bs)))}_keydown(t){if(![Ns,Ps,js,Ms].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=[Ps,Ms].includes(t.key),i=Ut(this._getChildren().filter((t=>!Wt(t))),t.target,e,!0);i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return ke.find(qs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=Pt(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`#${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=ke.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Hs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Hs)}_getInnerElement(t){return t.matches(qs)?t:ke.findOne(qs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}ue.on(document,$s,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this)||Vs.getOrCreateInstance(this).show()})),ue.on(window,Is,(()=>{for(const t of ke.find(Rs))Vs.getOrCreateInstance(t)})),Kt(Vs);const Ys=".bs.toast",Ks=`mouseover${Ys}`,Qs=`mouseout${Ys}`,Xs=`focusin${Ys}`,Us=`focusout${Ys}`,Gs=`hide${Ys}`,Js=`hidden${Ys}`,Zs=`show${Ys}`,to=`shown${Ys}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends ye{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){ue.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),qt(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),ue.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(ue.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),ue.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){ue.on(this._element,Ks,(t=>this._onInteraction(t,!0))),ue.on(this._element,Qs,(t=>this._onInteraction(t,!1))),ue.on(this._element,Xs,(t=>this._onInteraction(t,!0))),ue.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}function ao(t){"loading"!=document.readyState?t():document.addEventListener("DOMContentLoaded",t)}we(ro),Kt(ro),ao((function(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new ds(t,{delay:{show:500,hide:100}})}))})),ao((function(){document.getElementById("pst-back-to-top").addEventListener("click",(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0}))})),ao((function(){var t=document.getElementById("pst-back-to-top"),e=document.getElementsByClassName("bd-header")[0].getBoundingClientRect();window.addEventListener("scroll",(function(){this.oldScroll>this.scrollY&&this.scrollY>e.bottom?t.style.display="block":t.style.display="none",this.oldScroll=this.scrollY}))}))})(); +//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/_static/scripts/bootstrap.js.LICENSE.txt b/_static/scripts/bootstrap.js.LICENSE.txt new file mode 100644 index 0000000000..91ad10aa07 --- /dev/null +++ b/_static/scripts/bootstrap.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Bootstrap v5.2.3 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ diff --git a/_static/scripts/bootstrap.js.map b/_static/scripts/bootstrap.js.map new file mode 100644 index 0000000000..04c27d7bcd --- /dev/null +++ b/_static/scripts/bootstrap.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/bootstrap.js","mappings":"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","sources":["webpack://pydata_sphinx_theme/webpack/bootstrap","webpack://pydata_sphinx_theme/webpack/runtime/define property getters","webpack://pydata_sphinx_theme/webpack/runtime/hasOwnProperty shorthand","webpack://pydata_sphinx_theme/webpack/runtime/make namespace object","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/enums.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/math.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/within.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/createPopper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://pydata_sphinx_theme/./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/mixin.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/bootstrap.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*!\n * Bootstrap v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp)\n\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * Public Util API\n */\n\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n\n return prefix;\n};\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n }\n\n return selector;\n};\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element);\n\n if (selector) {\n return document.querySelector(selector) ? selector : null;\n }\n\n return null;\n};\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element);\n return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n\n return typeof object.nodeType !== 'undefined';\n};\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(object);\n }\n\n return null;\n};\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed\n\n const closedDetails = element.closest('details:not([open])');\n\n if (!closedDetails) {\n return elementIsVisible;\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n\n if (summary === null) {\n return false;\n }\n }\n\n return elementIsVisible;\n};\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n\n if (element.classList.contains('disabled')) {\n return true;\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n } // Can find the shadow root otherwise it'll return the document\n\n\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n\n if (element instanceof ShadowRoot) {\n return element;\n } // when we don't find a shadow root\n\n\n if (!element.parentNode) {\n return null;\n }\n\n return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\n\n\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n\n return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback();\n }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement); // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n\n index += shouldGetNext ? 1 : -1;\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n\n return fn.apply(element, [event]);\n };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n\n hydrateObj(event, {\n delegateTarget: target\n });\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n\n return fn.apply(target, [event]);\n }\n }\n };\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check\n\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n\n return [isDelegated, callable, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n\n callable = wrapFunction(callable);\n }\n\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n if (!fn) {\n return;\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n\n for (const handlerKey of Object.keys(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey];\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n\n for (const keyHandlers of Object.keys(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers];\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n\n let evt = new Event(event, {\n bubbles,\n cancelable: true\n });\n evt = hydrateObj(evt, args);\n\n if (defaultPrevented) {\n evt.preventDefault();\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n\n return evt;\n }\n\n};\n\nfunction hydrateObj(obj, meta) {\n for (const [key, value] of Object.entries(meta || {})) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n\n get() {\n return value;\n }\n\n });\n }\n }\n\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n\n const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n\n instanceMap.set(key, instance);\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n\n return null;\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n\n if (value === 'false') {\n return false;\n }\n\n if (value === Number(value).toString()) {\n return Number(value);\n }\n\n if (value === '' || value === 'null') {\n return null;\n }\n\n if (typeof value !== 'string') {\n return value;\n }\n\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n\n return attributes;\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n\n static get DefaultType() {\n return {};\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n\n this._typeCheckConfig(config);\n\n return config;\n }\n\n _configAfterMerge(config) {\n return config;\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return { ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const property of Object.keys(configTypes)) {\n const expectedTypes = configTypes[property];\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst VERSION = '5.2.3';\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n\n if (!element) {\n return;\n }\n\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n } // Public\n\n\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n\n this._typeCheckConfig(config);\n\n return config;\n } // Static\n\n\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n\n static get VERSION() {\n return VERSION;\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n\n if (isDisabled(this)) {\n return;\n }\n\n const target = getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n } // Public\n\n\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n if (closeEvent.defaultPrevented) {\n return;\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n } // Private\n\n\n _destroyElement() {\n this._element.remove();\n\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](this);\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nenableDismissTrigger(Alert, 'close');\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n } // Public\n\n\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n\n return parents;\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling;\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n\n previous = previous.previousElementSibling;\n }\n\n return [];\n },\n\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n\n next = next.nextElementSibling;\n }\n\n return [];\n },\n\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n\n if (!element || !Swipe.isSupported()) {\n return;\n }\n\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n\n this._initEvents();\n } // Getters\n\n\n static get Default() {\n return Default$c;\n }\n\n static get DefaultType() {\n return DefaultType$c;\n }\n\n static get NAME() {\n return NAME$d;\n } // Public\n\n\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n } // Private\n\n\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n\n this._handleSwipe();\n\n execute(this._config.endCallback);\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n\n if (!direction) {\n return;\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n } // Static\n\n\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n\n this._addEventListeners();\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n } // Getters\n\n\n static get Default() {\n return Default$b;\n }\n\n static get DefaultType() {\n return DefaultType$b;\n }\n\n static get NAME() {\n return NAME$c;\n } // Public\n\n\n next() {\n this._slide(ORDER_NEXT);\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n\n prev() {\n this._slide(ORDER_PREV);\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n\n this._clearInterval();\n }\n\n cycle() {\n this._clearInterval();\n\n this._updateInterval();\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n\n this.cycle();\n }\n\n to(index) {\n const items = this._getItems();\n\n if (index > items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n\n const activeIndex = this._getItemIndex(this._getActive());\n\n if (activeIndex === index) {\n return;\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n this._slide(order, items[index]);\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n\n super.dispose();\n } // Private\n\n\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n } // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n\n this.pause();\n\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n const direction = KEY_TO_DIRECTION[event.key];\n\n if (direction) {\n event.preventDefault();\n\n this._slide(this._directionToOrder(direction));\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n\n if (!element) {\n return;\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n\n const activeElement = this._getActive();\n\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n\n if (nextElement === activeElement) {\n return;\n }\n\n const nextElementIndex = this._getItemIndex(nextElement);\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n\n const slideEvent = triggerEvent(EVENT_SLIDE);\n\n if (slideEvent.defaultPrevented) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return;\n }\n\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n\n this._setActiveIndicatorElement(nextElementIndex);\n\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n\n if (isCycling) {\n this.cycle();\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n }\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = getElementFromSelector(this);\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n\n if (slideIndex) {\n carousel.to(slideIndex);\n\n carousel._maybeEnableCycle();\n\n return;\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n\n carousel._maybeEnableCycle();\n\n return;\n }\n\n carousel.prev();\n\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n for (const elem of toggleList) {\n const selector = getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n\n this._initializeChildren();\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n static get Default() {\n return Default$a;\n }\n\n static get DefaultType() {\n return DefaultType$a;\n }\n\n static get NAME() {\n return NAME$b;\n } // Public\n\n\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n\n let activeChildren = []; // find active children\n\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n\n if (startEvent.defaultPrevented) {\n return;\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n\n const dimension = this._getDimension();\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n this._element.style[dimension] = 0;\n\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n\n this._isTransitioning = true;\n\n const complete = () => {\n this._isTransitioning = false;\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n\n this._queueCallback(complete, this._element, true);\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n\n if (startEvent.defaultPrevented) {\n return;\n }\n\n const dimension = this._getDimension();\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n for (const trigger of this._triggerArray) {\n const element = getElementFromSelector(trigger);\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n\n this._isTransitioning = true;\n\n const complete = () => {\n this._isTransitioning = false;\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n\n this._element.style[dimension] = '';\n\n this._queueCallback(complete, this._element, true);\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n } // Private\n\n\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n config.parent = getElement(config.parent);\n return config;\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n\n for (const element of children) {\n const selected = getElementFromSelector(element);\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth\n\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n } // Static\n\n\n static jQueryInterface(config) {\n const _config = {};\n\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n }\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n\n const selector = getSelectorFromElement(this);\n const selectorElements = SelectorEngine.find(selector);\n\n for (const element of selectorElements) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n } // Getters\n\n\n static get Default() {\n return Default$9;\n }\n\n static get DefaultType() {\n return DefaultType$9;\n }\n\n static get NAME() {\n return NAME$a;\n } // Public\n\n\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n this._createPopper(); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n\n this._element.classList.add(CLASS_NAME_SHOW$6);\n\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n };\n\n this._completeHide(relatedTarget);\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n\n super.dispose();\n }\n\n update() {\n this._inNavbar = this._detectNavbar();\n\n if (this._popper) {\n this._popper.update();\n }\n } // Private\n\n\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n\n if (hideEvent.defaultPrevented) {\n return;\n } // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n\n if (this._popper) {\n this._popper.destroy();\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n\n this._element.setAttribute('aria-expanded', 'false');\n\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n\n _getConfig(config) {\n config = super._getConfig(config);\n\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n\n return config;\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n\n let referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n\n const popperConfig = this._getPopperConfig();\n\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n\n _getPlacement() {\n const parentDropdown = this._parent;\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n } // We need to trim the value because custom properties can also include spaces\n\n\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n\n _getOffset() {\n const {\n offset\n } = this._config;\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n\n return offset;\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }; // Disable Popper if we have a static display or Dropdown is in Navbar\n\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove\n\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n\n return { ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n };\n }\n\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n\n if (!items.length) {\n return;\n } // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n });\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n\n if (!context || context._config.autoClose === false) {\n continue;\n }\n\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n\n const relatedTarget = {\n relatedTarget: context._element\n };\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n\n context._completeHide(relatedTarget);\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n\n if (isInput && !isEscapeEvent) {\n return;\n }\n\n event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n\n instance._selectMenuItem(event);\n\n return;\n }\n\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n } // Public\n\n\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n\n hide() {\n const width = this.getWidth();\n\n this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n\n isOverflowing() {\n return this.getWidth() > 0;\n } // Private\n\n\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n\n this._element.style.overflow = 'hidden';\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n\n this._saveInitialAttribute(element, styleProperty);\n\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero\n\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n\n};\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n } // Getters\n\n\n static get Default() {\n return Default$8;\n }\n\n static get DefaultType() {\n return DefaultType$8;\n }\n\n static get NAME() {\n return NAME$9;\n } // Public\n\n\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n\n this._append();\n\n const element = this._getElement();\n\n if (this._config.isAnimated) {\n reflow(element);\n }\n\n element.classList.add(CLASS_NAME_SHOW$5);\n\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n\n dispose() {\n if (!this._isAppended) {\n return;\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n this._element.remove();\n\n this._isAppended = false;\n } // Private\n\n\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n\n this._element = backdrop;\n }\n\n return this._element;\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n\n _append() {\n if (this._isAppended) {\n return;\n }\n\n const element = this._getElement();\n\n this._config.rootElement.append(element);\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n\n};\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n } // Getters\n\n\n static get Default() {\n return Default$7;\n }\n\n static get DefaultType() {\n return DefaultType$7;\n }\n\n static get NAME() {\n return NAME$8;\n } // Public\n\n\n activate() {\n if (this._isActive) {\n return;\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n\n deactivate() {\n if (!this._isActive) {\n return;\n }\n\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n } // Private\n\n\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement);\n\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n\n this._addEventListeners();\n } // Getters\n\n\n static get Default() {\n return Default$6;\n }\n\n static get DefaultType() {\n return DefaultType$6;\n }\n\n static get NAME() {\n return NAME$7;\n } // Public\n\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n this._isShown = true;\n this._isTransitioning = true;\n\n this._scrollBar.hide();\n\n document.body.classList.add(CLASS_NAME_OPEN);\n\n this._adjustDialog();\n\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n this._isShown = false;\n this._isTransitioning = true;\n\n this._focustrap.deactivate();\n\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY$4);\n }\n\n this._backdrop.dispose();\n\n this._focustrap.deactivate();\n\n super.dispose();\n }\n\n handleUpdate() {\n this._adjustDialog();\n } // Private\n\n\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.setAttribute('aria-modal', true);\n\n this._element.setAttribute('role', 'dialog');\n\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n\n reflow(this._element);\n\n this._element.classList.add(CLASS_NAME_SHOW$4);\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n\n if (this._config.keyboard) {\n event.preventDefault();\n this.hide();\n return;\n }\n\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n\n return;\n }\n\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n\n _hideModal() {\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._element.removeAttribute('aria-modal');\n\n this._element.removeAttribute('role');\n\n this._isTransitioning = false;\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n\n this._resetAdjustments();\n\n this._scrollBar.reset();\n\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed\n\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n\n this._element.classList.add(CLASS_NAME_STATIC);\n\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n\n this._element.focus();\n }\n /**\n * The following methods are used to handle overflowing modals\n */\n\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n const scrollbarWidth = this._scrollBar.getWidth();\n\n const isBodyOverflowing = scrollbarWidth > 0;\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n } // Static\n\n\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](relatedTarget);\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = getElementFromSelector(this);\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n }); // avoid conflict when clicking modal toggler while another one is open\n\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n\n this._addEventListeners();\n } // Getters\n\n\n static get Default() {\n return Default$5;\n }\n\n static get DefaultType() {\n return DefaultType$5;\n }\n\n static get NAME() {\n return NAME$6;\n } // Public\n\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n this._isShown = true;\n\n this._backdrop.show();\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n\n this._element.setAttribute('aria-modal', true);\n\n this._element.setAttribute('role', 'dialog');\n\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n\n this._element.classList.add(CLASS_NAME_SHOW$3);\n\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n\n this._queueCallback(completeCallBack, this._element, true);\n }\n\n hide() {\n if (!this._isShown) {\n return;\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n this._focustrap.deactivate();\n\n this._element.blur();\n\n this._isShown = false;\n\n this._element.classList.add(CLASS_NAME_HIDING);\n\n this._backdrop.hide();\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n\n this._element.removeAttribute('aria-modal');\n\n this._element.removeAttribute('role');\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n\n this._queueCallback(completeCallback, this._element, true);\n }\n\n dispose() {\n this._backdrop.dispose();\n\n this._focustrap.deactivate();\n\n super.dispose();\n } // Private\n\n\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n\n this.hide();\n }; // 'static' option will be translated to true, and booleans will keep their value\n\n\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n\n this.hide();\n });\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](this);\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = getElementFromSelector(this);\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n\n if (isDisabled(this)) {\n return;\n }\n\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));\n }\n\n return true;\n } // Check if a regular expression validates the attribute.\n\n\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\n\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
    '\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n } // Getters\n\n\n static get Default() {\n return Default$4;\n }\n\n static get DefaultType() {\n return DefaultType$4;\n }\n\n static get NAME() {\n return NAME$5;\n } // Public\n\n\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n\n hasContent() {\n return this.getContent().length > 0;\n }\n\n changeContent(content) {\n this._checkContent(content);\n\n this._config.content = { ...this._config.content,\n ...content\n };\n return this;\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n\n const template = templateWrapper.children[0];\n\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n\n return template;\n } // Private\n\n\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n\n this._checkContent(config.content);\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n\n if (!templateElement) {\n return;\n }\n\n content = this._resolvePossibleFunction(content);\n\n if (!content) {\n templateElement.remove();\n return;\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n\n return;\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n\n templateElement.textContent = content;\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg(this) : arg;\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n\n templateElement.textContent = element.textContent;\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
    ' + '
    ' + '
    ' + '
    ',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n\n super(element, config); // Private\n\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null; // Protected\n\n this.tip = null;\n\n this._setListeners();\n\n if (!this._config.selector) {\n this._fixTitle();\n }\n } // Getters\n\n\n static get Default() {\n return Default$3;\n }\n\n static get DefaultType() {\n return DefaultType$3;\n }\n\n static get NAME() {\n return NAME$4;\n } // Public\n\n\n enable() {\n this._isEnabled = true;\n }\n\n disable() {\n this._isEnabled = false;\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n\n this._activeTrigger.click = !this._activeTrigger.click;\n\n if (this._isShown()) {\n this._leave();\n\n return;\n }\n\n this._enter();\n }\n\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n\n this._disposePopper();\n\n super.dispose();\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n } // todo v6 remove this OR make it optional\n\n\n this._disposePopper();\n\n const tip = this._getTipElement();\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n\n const {\n container\n } = this._config;\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n\n if (this._isHovered === false) {\n this._leave();\n }\n\n this._isHovered = false;\n };\n\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n\n hide() {\n if (!this._isShown()) {\n return;\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n const tip = this._getTipElement();\n\n tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n\n if (!this._isHovered) {\n this._disposePopper();\n }\n\n this._element.removeAttribute('aria-describedby');\n\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n\n update() {\n if (this._popper) {\n this._popper.update();\n }\n } // Protected\n\n\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n\n return this.tip;\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6\n\n\n if (!tip) {\n return null;\n }\n\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only\n\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n\n return tip;\n }\n\n setContent(content) {\n this._newContent = content;\n\n if (this._isShown()) {\n this._disposePopper();\n\n this.show();\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({ ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n\n return this._templateFactory;\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n } // Private\n\n\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n\n _createPopper(tip) {\n const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n\n _getOffset() {\n const {\n offset\n } = this._config;\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n\n return offset;\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg.call(this._element) : arg;\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return { ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n };\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n\n context._leave();\n });\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title');\n\n if (!title) {\n return;\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n\n\n this._element.removeAttribute('title');\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n\n this._isHovered = true;\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n\n this._isHovered = false;\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n\n config = { ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n\n this._typeCheckConfig(config);\n\n return config;\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n return config;\n }\n\n _getDelegateConfig() {\n const config = {};\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key];\n }\n }\n\n config.selector = false;\n config.trigger = 'manual'; // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n\n return config;\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n\n this._popper = null;\n }\n\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n });\n }\n\n}\n/**\n * jQuery\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = { ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
    ' + '
    ' + '

    ' + '
    ' + '
    ',\n trigger: 'click'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n\n static get DefaultType() {\n return DefaultType$2;\n }\n\n static get NAME() {\n return NAME$3;\n } // Overrides\n\n\n _isWithContent() {\n return this._getTitle() || this._getContent();\n } // Private\n\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n });\n }\n\n}\n/**\n * jQuery\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper\n\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n } // Getters\n\n\n static get Default() {\n return Default$1;\n }\n\n static get DefaultType() {\n return DefaultType$1;\n }\n\n static get NAME() {\n return NAME$2;\n } // Public\n\n\n refresh() {\n this._initializeTargetsAndObservables();\n\n this._maybeEnableSmoothScroll();\n\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n\n dispose() {\n this._observer.disconnect();\n\n super.dispose();\n } // Private\n\n\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n\n return config;\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n } // unregister any previous listeners\n\n\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n } // Chrome 60 doesn't support `scrollTo`\n\n\n root.scrollTop = height;\n }\n });\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n } // The logic of selection\n\n\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n\n this._process(targetElement(entry));\n };\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n\n this._clearActiveClass(targetElement(entry));\n\n continue;\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop\n\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n\n if (!parentScrollTop) {\n return;\n }\n\n continue;\n } // if we are scrolling up, pick the smallest offsetTop\n\n\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible\n\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor);\n\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n\n this._clearActiveClass(this._config.target);\n\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n\n this._activateParents(target);\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both

    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 beI}57?ti7Ly<=xg6vYF1HMyL-Pu~0w&79?9 literal 0 HcmV?d00001 diff --git a/_static/images/service_stats.png b/_static/images/service_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce72428634e1da53091275d102def239b3f7a59 GIT binary patch literal 26817 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�_G;qyt_Pzz3pj+|%?|TtZZ0Im6aPn=$;vw5 z@kcfbt{F*@AbvLmN`Cvhl@Tav%0WvydgYItJ}Syp@&B{yCwl^Q9UTsie~ar;9-i0K L&_R@_Sw;L0pfa*j literal 0 HcmV?d00001 diff --git a/_static/jupyterlite_badge_logo.svg b/_static/jupyterlite_badge_logo.svg new file mode 100644 index 0000000000..5de36d7fd5 --- /dev/null +++ b/_static/jupyterlite_badge_logo.svg @@ -0,0 +1,3 @@ + + +launchlaunchlitelite \ No newline at end of file diff --git a/_static/katex-math.css b/_static/katex-math.css new file mode 100644 index 0000000000..bdd1634d81 --- /dev/null +++ b/_static/katex-math.css @@ -0,0 +1,50 @@ +/* Responsives: make equations scrollable on small screens. + * See: https://github.com/Khan/KaTeX/issues/327 */ +.katex-display > .katex { + max-width: 100%; +} +.katex-display > .katex > .katex-html { + max-width: 100%; + overflow-x: auto; + overflow-y: hidden; + padding-left: 2px; + padding-right: 2px; + padding-bottom: 1px; + padding-top: 3px; +} +/* Increase margin around equations */ +.katex-display { + margin: 1.2em 0; +} +/* Equation number floats to the right and shows permalink for mouse hover + on the right side of equation number. */ +div.math { + position: relative; + padding-right: 2.5em; +} +.eqno { + height: 100%; + position: absolute; + right: 0; + padding-left: 5px; + padding-bottom: 5px; + padding-right: 1px; +} +.eqno:before { + /* Force vertical alignment of number */ + display: inline-block; + height: 100%; + vertical-align: middle; + content: ""; +} +.eqno .headerlink { + display: none; + visibility: hidden; + font-size: 14px; + padding-left: .3em; +} +.eqno:hover .headerlink { + display: inline-block; + visibility: visible; + margin-right: -1.05em; +} diff --git a/_static/katex.min.js b/_static/katex.min.js new file mode 100644 index 0000000000..a919bd4407 --- /dev/null +++ b/_static/katex.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return Qn}});var r=function e(t,r){this.position=void 0;var n,a="KaTeX parse error: "+t,i=r&&r.loc;if(i&&i.start<=i.end){var o=i.lexer.input;n=i.start;var s=i.end;n===o.length?a+=" at end of input: ":a+=" at position "+(n+1)+": ";var l=o.slice(n,s).replace(/[^]/g,"$&\u0332");a+=(n>15?"\u2026"+o.slice(n-15,n):o.slice(0,n))+l+(s+15":">","<":"<",'"':""","'":"'"},o=/[&><"']/g;var s=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(o,(function(e){return i[e]}))},hyphenate:function(e){return e.replace(a,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){var t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(e);return null!=t?t[1]:"_relative"}},h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:function(e){return"#"+e}},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:function(e,t){return t.push(e),t}},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:function(e){return Math.max(0,e)},cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:function(e){return Math.max(0,e)},cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:function(e){return Math.max(0,e)},cli:"-e, --max-expand ",cliProcessor:function(e){return"Infinity"===e?1/0:parseInt(e)}},globalGroup:{type:"boolean",cli:!1}};function m(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}var c=function(){function e(e){for(var t in this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},h)if(h.hasOwnProperty(t)){var r=h[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:m(r)}}var t=e.prototype;return t.reportNonstrict=function(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}},t.useStrictBehavior=function(e,t,r){var n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))},t.isTrusted=function(e){e.url&&!e.protocol&&(e.protocol=l.protocolFromUrl(e.url));var t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)},e}(),u=function(){function e(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}var t=e.prototype;return t.sup=function(){return p[d[this.id]]},t.sub=function(){return p[f[this.id]]},t.fracNum=function(){return p[g[this.id]]},t.fracDen=function(){return p[v[this.id]]},t.cramp=function(){return p[b[this.id]]},t.text=function(){return p[y[this.id]]},t.isTight=function(){return this.size>=2},e}(),p=[new u(0,0,!1),new u(1,0,!0),new u(2,1,!1),new u(3,1,!0),new u(4,2,!1),new u(5,2,!0),new u(6,3,!1),new u(7,3,!0)],d=[4,5,4,5,6,7,6,7],f=[5,5,5,5,7,7,7,7],g=[2,3,4,5,6,7,6,7],v=[3,3,5,5,7,7,7,7],b=[1,1,3,3,5,5,7,7],y=[0,1,2,3,2,3,2,3],x={DISPLAY:p[0],TEXT:p[2],SCRIPT:p[4],SCRIPTSCRIPT:p[6]},w=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var k=[];function S(e){for(var t=0;t=k[t]&&e<=k[t+1])return!0;return!1}w.forEach((function(e){return e.blocks.forEach((function(e){return k.push.apply(k,e)}))}));var M=80,z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},A=function(){function e(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){for(var e=document.createDocumentFragment(),t=0;t=5?0:e>=3?1:2]){var r=N[t]={cssEmPerMu:B.quad[t]/18};for(var n in B)B.hasOwnProperty(n)&&(r[n]=B[n][t])}return N[t]}(this.size)),this._fontMetrics},t.getColor=function(){return this.phantom?"transparent":this.color},e}();H.BASESIZE=6;var E=H,L={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},D={ex:!0,em:!0,mu:!0},P=function(e){return"string"!=typeof e&&(e=e.unit),e in L||e in D||"ex"===e},F=function(e,t){var r;if(e.unit in L)r=L[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},V=function(e){return+e.toFixed(4)+"em"},G=function(e){return e.filter((function(e){return e})).join(" ")},U=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var n=t.getColor();n&&(this.style.color=n)}},Y=function(e){var t=document.createElement(e);for(var r in t.className=G(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&t.setAttribute(n,this.attributes[n]);for(var a=0;a"},W=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,e,r,n),this.children=t||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"span")},t.toMarkup=function(){return X.call(this,"span")},e}(),_=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"a")},t.toMarkup=function(){return X.call(this,"a")},e}(),j=function(){function e(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e},t.toMarkup=function(){var e=""+this.alt+"=a[0]&&e<=a[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=$[this.text])}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=V(this.italic)),this.classes.length>0&&((t=t||document.createElement("span")).className=G(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e},t.toMarkup=function(){var e=!1,t="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(n)&&(r+=l.hyphenate(n)+":"+this.style[n]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');var a=l.escape(this.text);return e?(t+=">",t+=a,t+=""):a},e}(),K=function(){function e(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r":""},e}(),Q=function(){function e(e){this.attributes=void 0,this.attributes=e||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e},t.toMarkup=function(){var e="","\\gt",!0),ie(oe,le,be,"\u2208","\\in",!0),ie(oe,le,be,"\ue020","\\@not"),ie(oe,le,be,"\u2282","\\subset",!0),ie(oe,le,be,"\u2283","\\supset",!0),ie(oe,le,be,"\u2286","\\subseteq",!0),ie(oe,le,be,"\u2287","\\supseteq",!0),ie(oe,he,be,"\u2288","\\nsubseteq",!0),ie(oe,he,be,"\u2289","\\nsupseteq",!0),ie(oe,le,be,"\u22a8","\\models"),ie(oe,le,be,"\u2190","\\leftarrow",!0),ie(oe,le,be,"\u2264","\\le"),ie(oe,le,be,"\u2264","\\leq",!0),ie(oe,le,be,"<","\\lt",!0),ie(oe,le,be,"\u2192","\\rightarrow",!0),ie(oe,le,be,"\u2192","\\to"),ie(oe,he,be,"\u2271","\\ngeq",!0),ie(oe,he,be,"\u2270","\\nleq",!0),ie(oe,le,ye,"\xa0","\\ "),ie(oe,le,ye,"\xa0","\\space"),ie(oe,le,ye,"\xa0","\\nobreakspace"),ie(se,le,ye,"\xa0","\\ "),ie(se,le,ye,"\xa0"," "),ie(se,le,ye,"\xa0","\\space"),ie(se,le,ye,"\xa0","\\nobreakspace"),ie(oe,le,ye,null,"\\nobreak"),ie(oe,le,ye,null,"\\allowbreak"),ie(oe,le,ve,",",","),ie(oe,le,ve,";",";"),ie(oe,he,ce,"\u22bc","\\barwedge",!0),ie(oe,he,ce,"\u22bb","\\veebar",!0),ie(oe,le,ce,"\u2299","\\odot",!0),ie(oe,le,ce,"\u2295","\\oplus",!0),ie(oe,le,ce,"\u2297","\\otimes",!0),ie(oe,le,xe,"\u2202","\\partial",!0),ie(oe,le,ce,"\u2298","\\oslash",!0),ie(oe,he,ce,"\u229a","\\circledcirc",!0),ie(oe,he,ce,"\u22a1","\\boxdot",!0),ie(oe,le,ce,"\u25b3","\\bigtriangleup"),ie(oe,le,ce,"\u25bd","\\bigtriangledown"),ie(oe,le,ce,"\u2020","\\dagger"),ie(oe,le,ce,"\u22c4","\\diamond"),ie(oe,le,ce,"\u22c6","\\star"),ie(oe,le,ce,"\u25c3","\\triangleleft"),ie(oe,le,ce,"\u25b9","\\triangleright"),ie(oe,le,ge,"{","\\{"),ie(se,le,xe,"{","\\{"),ie(se,le,xe,"{","\\textbraceleft"),ie(oe,le,ue,"}","\\}"),ie(se,le,xe,"}","\\}"),ie(se,le,xe,"}","\\textbraceright"),ie(oe,le,ge,"{","\\lbrace"),ie(oe,le,ue,"}","\\rbrace"),ie(oe,le,ge,"[","\\lbrack",!0),ie(se,le,xe,"[","\\lbrack",!0),ie(oe,le,ue,"]","\\rbrack",!0),ie(se,le,xe,"]","\\rbrack",!0),ie(oe,le,ge,"(","\\lparen",!0),ie(oe,le,ue,")","\\rparen",!0),ie(se,le,xe,"<","\\textless",!0),ie(se,le,xe,">","\\textgreater",!0),ie(oe,le,ge,"\u230a","\\lfloor",!0),ie(oe,le,ue,"\u230b","\\rfloor",!0),ie(oe,le,ge,"\u2308","\\lceil",!0),ie(oe,le,ue,"\u2309","\\rceil",!0),ie(oe,le,xe,"\\","\\backslash"),ie(oe,le,xe,"\u2223","|"),ie(oe,le,xe,"\u2223","\\vert"),ie(se,le,xe,"|","\\textbar",!0),ie(oe,le,xe,"\u2225","\\|"),ie(oe,le,xe,"\u2225","\\Vert"),ie(se,le,xe,"\u2225","\\textbardbl"),ie(se,le,xe,"~","\\textasciitilde"),ie(se,le,xe,"\\","\\textbackslash"),ie(se,le,xe,"^","\\textasciicircum"),ie(oe,le,be,"\u2191","\\uparrow",!0),ie(oe,le,be,"\u21d1","\\Uparrow",!0),ie(oe,le,be,"\u2193","\\downarrow",!0),ie(oe,le,be,"\u21d3","\\Downarrow",!0),ie(oe,le,be,"\u2195","\\updownarrow",!0),ie(oe,le,be,"\u21d5","\\Updownarrow",!0),ie(oe,le,fe,"\u2210","\\coprod"),ie(oe,le,fe,"\u22c1","\\bigvee"),ie(oe,le,fe,"\u22c0","\\bigwedge"),ie(oe,le,fe,"\u2a04","\\biguplus"),ie(oe,le,fe,"\u22c2","\\bigcap"),ie(oe,le,fe,"\u22c3","\\bigcup"),ie(oe,le,fe,"\u222b","\\int"),ie(oe,le,fe,"\u222b","\\intop"),ie(oe,le,fe,"\u222c","\\iint"),ie(oe,le,fe,"\u222d","\\iiint"),ie(oe,le,fe,"\u220f","\\prod"),ie(oe,le,fe,"\u2211","\\sum"),ie(oe,le,fe,"\u2a02","\\bigotimes"),ie(oe,le,fe,"\u2a01","\\bigoplus"),ie(oe,le,fe,"\u2a00","\\bigodot"),ie(oe,le,fe,"\u222e","\\oint"),ie(oe,le,fe,"\u222f","\\oiint"),ie(oe,le,fe,"\u2230","\\oiiint"),ie(oe,le,fe,"\u2a06","\\bigsqcup"),ie(oe,le,fe,"\u222b","\\smallint"),ie(se,le,pe,"\u2026","\\textellipsis"),ie(oe,le,pe,"\u2026","\\mathellipsis"),ie(se,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u22ef","\\@cdots",!0),ie(oe,le,pe,"\u22f1","\\ddots",!0),ie(oe,le,xe,"\u22ee","\\varvdots"),ie(oe,le,me,"\u02ca","\\acute"),ie(oe,le,me,"\u02cb","\\grave"),ie(oe,le,me,"\xa8","\\ddot"),ie(oe,le,me,"~","\\tilde"),ie(oe,le,me,"\u02c9","\\bar"),ie(oe,le,me,"\u02d8","\\breve"),ie(oe,le,me,"\u02c7","\\check"),ie(oe,le,me,"^","\\hat"),ie(oe,le,me,"\u20d7","\\vec"),ie(oe,le,me,"\u02d9","\\dot"),ie(oe,le,me,"\u02da","\\mathring"),ie(oe,le,de,"\ue131","\\@imath"),ie(oe,le,de,"\ue237","\\@jmath"),ie(oe,le,xe,"\u0131","\u0131"),ie(oe,le,xe,"\u0237","\u0237"),ie(se,le,xe,"\u0131","\\i",!0),ie(se,le,xe,"\u0237","\\j",!0),ie(se,le,xe,"\xdf","\\ss",!0),ie(se,le,xe,"\xe6","\\ae",!0),ie(se,le,xe,"\u0153","\\oe",!0),ie(se,le,xe,"\xf8","\\o",!0),ie(se,le,xe,"\xc6","\\AE",!0),ie(se,le,xe,"\u0152","\\OE",!0),ie(se,le,xe,"\xd8","\\O",!0),ie(se,le,me,"\u02ca","\\'"),ie(se,le,me,"\u02cb","\\`"),ie(se,le,me,"\u02c6","\\^"),ie(se,le,me,"\u02dc","\\~"),ie(se,le,me,"\u02c9","\\="),ie(se,le,me,"\u02d8","\\u"),ie(se,le,me,"\u02d9","\\."),ie(se,le,me,"\xb8","\\c"),ie(se,le,me,"\u02da","\\r"),ie(se,le,me,"\u02c7","\\v"),ie(se,le,me,"\xa8",'\\"'),ie(se,le,me,"\u02dd","\\H"),ie(se,le,me,"\u25ef","\\textcircled");var we={"--":!0,"---":!0,"``":!0,"''":!0};ie(se,le,xe,"\u2013","--",!0),ie(se,le,xe,"\u2013","\\textendash"),ie(se,le,xe,"\u2014","---",!0),ie(se,le,xe,"\u2014","\\textemdash"),ie(se,le,xe,"\u2018","`",!0),ie(se,le,xe,"\u2018","\\textquoteleft"),ie(se,le,xe,"\u2019","'",!0),ie(se,le,xe,"\u2019","\\textquoteright"),ie(se,le,xe,"\u201c","``",!0),ie(se,le,xe,"\u201c","\\textquotedblleft"),ie(se,le,xe,"\u201d","''",!0),ie(se,le,xe,"\u201d","\\textquotedblright"),ie(oe,le,xe,"\xb0","\\degree",!0),ie(se,le,xe,"\xb0","\\degree"),ie(se,le,xe,"\xb0","\\textdegree",!0),ie(oe,le,xe,"\xa3","\\pounds"),ie(oe,le,xe,"\xa3","\\mathsterling",!0),ie(se,le,xe,"\xa3","\\pounds"),ie(se,le,xe,"\xa3","\\textsterling",!0),ie(oe,he,xe,"\u2720","\\maltese"),ie(se,he,xe,"\u2720","\\maltese");for(var ke='0123456789/@."',Se=0;Set&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>n&&(n=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},Xe=function(e,t,r,n){var a=new W(e,t,r,n);return Ye(a),a},We=function(e,t,r,n){return new W(e,t,r,n)},_e=function(e){var t=new A(e);return Ye(t),t},je=function(e,t,r){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return n+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},$e={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ke={fontMap:$e,makeSymbol:Ge,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&Ve(e,"Main-Bold",t).metrics?Ge(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===ae[t][e].font?Ge(e,"Main-Regular",t,r,n):Ge(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:Xe,makeSvgSpan:We,makeLineSpan:function(e,t,r){var n=Xe([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=V(n.height),n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){var a=new _(e,t,r,n);return Ye(a),a},makeFragment:_e,wrapFragment:function(e,t){return e instanceof A?Xe([],[e],t):e},makeVList:function(e,t){for(var r=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth,a=n,i=1;i0&&(o.push(kt(s,t)),s=[]),o.push(a[l]));s.length>0&&o.push(kt(s,t)),r?((i=kt(ft(r,t,!0))).classes=["tag"],o.push(i)):n&&o.push(n);var m=mt(["katex-html"],o);if(m.setAttribute("aria-hidden","true"),i){var c=i.children[0];c.style.height=V(m.height+m.depth),m.depth&&(c.style.verticalAlign=V(-m.depth))}return m}function Mt(e){return new A(e)}var zt=function(){function e(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.getAttribute=function(e){return this.attributes[e]},t.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=G(this.classes));for(var r=0;r0&&(e+=' class ="'+l.escape(G(this.classes))+'"'),e+=">";for(var r=0;r"},t.toText=function(){return this.children.map((function(e){return e.toText()})).join("")},e}(),At=function(){function e(e){this.text=void 0,this.text=e}var t=e.prototype;return t.toNode=function(){return document.createTextNode(this.text)},t.toMarkup=function(){return l.escape(this.toText())},t.toText=function(){return this.text},e}(),Tt={MathNode:zt,TextNode:At,SpaceNode:function(){function e(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}var t=e.prototype;return t.toNode=function(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",V(this.width)),e},t.toMarkup=function(){return this.character?""+this.character+"":''},t.toText=function(){return this.character?this.character:" "},e}(),newDocumentFragment:Mt},Bt=function(e,t,r){return!ae[t][e]||!ae[t][e].replace||55349===e.charCodeAt(0)||we.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.substr(4,2)||r.font&&"tt"===r.font.substr(4,2))||(e=ae[t][e].replace),new Tt.TextNode(e)},Ct=function(e){return 1===e.length?e[0]:new Tt.MathNode("mrow",e)},qt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var a=e.text;return l.contains(["\\imath","\\jmath"],a)?null:(ae[n][a]&&ae[n][a].replace&&(a=ae[n][a].replace),q(a,Ke.fontMap[r].fontName,n)?Ke.fontMap[r].variant:null)},Nt=function(e,t,r){if(1===e.length){var n=Rt(e[0],t);return r&&n instanceof zt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a,i=[],o=0;o0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),a=s}return i},It=function(e,t,r){return Ct(Nt(e,t,r))},Rt=function(e,t){if(!e)return new Tt.MathNode("mrow");if(it[e.type])return it[e.type](e,t);throw new n("Got group of unknown type: '"+e.type+"'")};function Ot(e,t,r,n,a){var i,o=Nt(e,r);i=1===o.length&&o[0]instanceof zt&&l.contains(["mrow","mtable"],o[0].type)?o[0]:new Tt.MathNode("mrow",o);var s=new Tt.MathNode("annotation",[new Tt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var h=new Tt.MathNode("semantics",[i,s]),m=new Tt.MathNode("math",[h]);m.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&m.setAttribute("display","block");var c=a?"katex":"katex-mathml";return Ke.makeSpan([c],[m])}var Ht=function(e){return new E({style:e.displayMode?x.DISPLAY:x.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Et=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Ke.makeSpan(r,[e])}return e},Lt=function(e,t,r){var n,a=Ht(r);if("mathml"===r.output)return Ot(e,t,a,r.displayMode,!0);if("html"===r.output){var i=St(e,a);n=Ke.makeSpan(["katex"],[i])}else{var o=Ot(e,t,a,r.displayMode,!1),s=St(e,a);n=Ke.makeSpan(["katex"],[o,s])}return Et(n,r)},Dt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Pt={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Ft=function(e,t,r,n,a){var i,o=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(i=Ke.makeSpan(["stretchy",t],[],a),"fbox"===t){var s=a.color&&a.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new K(l,{width:"100%",height:V(o)});i=Ke.makeSvgSpan([],[h],a)}return i.height=o,i.style.height=V(o),i},Vt=function(e){var t=new Tt.MathNode("mo",[new Tt.TextNode(Dt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Gt=function(e,t){var r=function(){var r=4e5,n=e.label.substr(1);if(l.contains(["widehat","widecheck","widetilde","utilde"],n)){var a,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===n||"widecheck"===n?(a=420,r=2364,o=.42,i=n+"4"):(a=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][h],a=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=n+h):(r=[0,600,1033,2339,2340][h],a=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var m=new J(i),c=new K([m],{width:"100%",height:V(o),viewBox:"0 0 "+r+" "+a,preserveAspectRatio:"none"});return{span:Ke.makeSvgSpan([],[c],t),minWidth:0,height:o}}var u,p,d,f=[],g=Pt[n],v=g[0],b=g[1],y=g[2],x=y/1e3,w=v.length;if(1===w)u=["hide-tail"],p=[g[3]];else if(2===w)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n "+w+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k0&&(n.style.minWidth=V(a)),n};function Ut(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Yt(e){var t=Xt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Xt(e){return e&&("atom"===e.type||re.hasOwnProperty(e.type))?e:null}var Wt=function(e,t){var r,n,a;e&&"supsub"===e.type?(r=(n=Ut(e.base,"accent")).base,e.base=r,a=function(e){if(e instanceof W)return e;throw new Error("Expected span but got "+String(e)+".")}(wt(e,t)),e.base=n):r=(n=Ut(e,"accent")).base;var i=wt(r,t.havingCrampedStyle()),o=0;if(n.isShifty&&l.isCharacterBox(r)){var s=l.getBaseElem(r);o=ee(wt(s,t.havingCrampedStyle())).skew}var h,m="\\c"===n.label,c=m?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(n.isStretchy)h=Gt(n,t),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+V(2*o)+")",marginLeft:V(2*o)}:void 0}]},t);else{var u,p;"\\vec"===n.label?(u=Ke.staticSvg("vec",t),p=Ke.svgData.vec[1]):((u=ee(u=Ke.makeOrd({mode:n.mode,text:n.label},t,"textord"))).italic=0,p=u.width,m&&(c+=u.depth)),h=Ke.makeSpan(["accent-body"],[u]);var d="\\textcircled"===n.label;d&&(h.classes.push("accent-full"),c=i.height);var f=o;d||(f-=p/2),h.style.left=V(f),"\\textcircled"===n.label&&(h.style.top=".2em"),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-c},{type:"elem",elem:h}]},t)}var g=Ke.makeSpan(["mord","accent"],[h],t);return a?(a.children[0]=g,a.height=Math.max(g.height,a.height),a.classes[0]="mord",a):g},_t=function(e,t){var r=e.isStretchy?Vt(e.label):new Tt.MathNode("mo",[Bt(e.label,e.mode)]),n=new Tt.MathNode("mover",[Rt(e.base,t),r]);return n.setAttribute("accent","true"),n},jt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((function(e){return"\\"+e})).join("|"));ot({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(e,t){var r=lt(t[0]),n=!jt.test(e.funcName),a=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:function(e,t){var r=t[0],n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:function(e,t){var r=wt(e.base,t),n=Gt(e,t),a="\\utilde"===e.label?.12:0,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:function(e,t){var r=Vt(e.label),n=new Tt.MathNode("munder",[Rt(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var $t=function(e){var t=new Tt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};ot({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var n=e.parser,a=e.funcName;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder:function(e,t){var r,n=t.style,a=t.havingStyle(n.sup()),i=Ke.wrapFragment(wt(e.body,a,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(a=t.havingStyle(n.sub()),(r=Ke.wrapFragment(wt(e.below,a,t),t)).classes.push(o+"-arrow-pad"));var s,l=Gt(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,m=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(m-=i.depth),r){var c=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:c}]},t)}else s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),Ke.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder:function(e,t){var r,n=Vt(e.label);if(n.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var a=$t(Rt(e.body,t));if(e.below){var i=$t(Rt(e.below,t));r=new Tt.MathNode("munderover",[n,i,a])}else r=new Tt.MathNode("mover",[n,a])}else if(e.below){var o=$t(Rt(e.below,t));r=new Tt.MathNode("munder",[n,o])}else r=$t(),r=new Tt.MathNode("mover",[n,r]);return r}});var Zt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Kt=function(e){return"textord"===e.type&&"@"===e.text};function Jt(e,t,r){var n=Zt[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var a={type:"atom",text:n,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[a],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}ot({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder:function(e,t){var r=t.havingStyle(t.style.sup()),n=Ke.wrapFragment(wt(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=V(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mrow",[Rt(e.label,t)]);return(r=new Tt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Tt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),ot({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:function(e,t){return{type:"cdlabelparent",mode:e.parser.mode,fragment:t[0]}},htmlBuilder:function(e,t){var r=Ke.wrapFragment(wt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:function(e,t){return new Tt.MathNode("mrow",[Rt(e.fragment,t)])}}),ot({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){for(var r=e.parser,a=Ut(t[0],"ordgroup").body,i="",o=0;o=1114111)throw new n("\\@char with invalid code point "+i);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var Qt=function(e,t){var r=ft(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},er=function(e,t){var r=Nt(e.body,t.withColor(e.color)),n=new Tt.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};ot({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler:function(e,t){var r=e.parser,n=Ut(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:ht(a)}},htmlBuilder:Qt,mathmlBuilder:er}),ot({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler:function(e,t){var r=e.parser,n=e.breakOnTokenText,a=Ut(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:Qt,mathmlBuilder:er}),ot({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:1,argTypes:["size"],allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=r[0],i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&Ut(a,"size").value}},htmlBuilder:function(e,t){var r=Ke.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=V(F(e.size,t)))),r},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",V(F(e.size,t)))),r}});var tr={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},rr=function(e){var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},nr=function(e,t,r,n){var a=e.gullet.macros.get(r.text);null==a&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};ot({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler:function(e){var t=e.parser,r=e.funcName;t.consumeSpaces();var a=t.fetch();if(tr[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=tr[a.text]),Ut(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",a)}}),ot({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,a=t.gullet.popToken(),i=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new n("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new n('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new n('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new n("Expected a macro definition");l[s].push(a.text)}var h=t.gullet.consumeArg().tokens;return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(i,{tokens:h,numArgs:s,delimiters:l},r===tr[r]),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=rr(t.gullet.popToken());t.gullet.consumeSpaces();var a=function(e){var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t}(t);return nr(t,n,a,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=rr(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return nr(t,n,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var ar=function(e,t,r){var n=q(ae.math[e]&&ae.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},ir=function(e,t,r,n){var a=r.havingBaseStyle(t),i=Ke.makeSpan(n.concat(a.sizingClasses(r)),[e],r),o=a.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=a.sizeMultiplier,i},or=function(e,t,r){var n=t.havingBaseStyle(r),a=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=V(a),e.height-=a,e.depth+=a},sr=function(e,t,r,n,a,i){var o=function(e,t,r,n){return Ke.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,a,n),s=ir(Ke.makeSpan(["delimsizing","size"+t],[o],n),x.TEXT,n,i);return r&&or(s,n,x.TEXT),s},lr=function(e,t,r){var n;return n="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:Ke.makeSpan(["delimsizinginner",n],[Ke.makeSpan([],[Ke.makeSymbol(e,t,r)])])}},hr=function(e,t,r){var n=T["Size4-Regular"][e.charCodeAt(0)]?T["Size4-Regular"][e.charCodeAt(0)][4]:T["Size1-Regular"][e.charCodeAt(0)][4],a=new J("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new K([a],{width:V(n),height:V(t),style:"width:"+V(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=Ke.makeSvgSpan([],[i],r);return o.height=t,o.style.height=V(t),o.style.width=V(n),{type:"elem",elem:o}},mr={type:"kern",size:-.008},cr=["|","\\lvert","\\rvert","\\vert"],ur=["\\|","\\lVert","\\rVert","\\Vert"],pr=function(e,t,r,n,a,i){var o,s,h,m;o=h=m=e,s=null;var c="Size1-Regular";"\\uparrow"===e?h=m="\u23d0":"\\Uparrow"===e?h=m="\u2016":"\\downarrow"===e?o=h="\u23d0":"\\Downarrow"===e?o=h="\u2016":"\\updownarrow"===e?(o="\\uparrow",h="\u23d0",m="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",h="\u2016",m="\\Downarrow"):l.contains(cr,e)?h="\u2223":l.contains(ur,e)?h="\u2225":"["===e||"\\lbrack"===e?(o="\u23a1",h="\u23a2",m="\u23a3",c="Size4-Regular"):"]"===e||"\\rbrack"===e?(o="\u23a4",h="\u23a5",m="\u23a6",c="Size4-Regular"):"\\lfloor"===e||"\u230a"===e?(h=o="\u23a2",m="\u23a3",c="Size4-Regular"):"\\lceil"===e||"\u2308"===e?(o="\u23a1",h=m="\u23a2",c="Size4-Regular"):"\\rfloor"===e||"\u230b"===e?(h=o="\u23a5",m="\u23a6",c="Size4-Regular"):"\\rceil"===e||"\u2309"===e?(o="\u23a4",h=m="\u23a5",c="Size4-Regular"):"("===e||"\\lparen"===e?(o="\u239b",h="\u239c",m="\u239d",c="Size4-Regular"):")"===e||"\\rparen"===e?(o="\u239e",h="\u239f",m="\u23a0",c="Size4-Regular"):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",m="\u23a9",h="\u23aa",c="Size4-Regular");var u=ar(o,c,a),p=u.height+u.depth,d=ar(h,c,a),f=d.height+d.depth,g=ar(m,c,a),v=g.height+g.depth,b=0,y=1;if(null!==s){var w=ar(s,c,a);b=w.height+w.depth,y=2}var k=p+v+b,S=k+Math.max(0,Math.ceil((t-k)/(y*f)))*y*f,M=n.fontMetrics().axisHeight;r&&(M*=n.sizeMultiplier);var z=S/2-M,A=[];if(A.push(lr(m,c,a)),A.push(mr),null===s){var T=S-p-v+.016;A.push(hr(h,T,n))}else{var B=(S-p-v-b)/2+.016;A.push(hr(h,B,n)),A.push(mr),A.push(lr(s,c,a)),A.push(mr),A.push(hr(h,B,n))}A.push(mr),A.push(lr(o,c,a));var C=n.havingBaseStyle(x.TEXT),q=Ke.makeVList({positionType:"bottom",positionData:z,children:A},C);return ir(Ke.makeSpan(["delimsizing","mult"],[q],C),x.TEXT,n,i)},dr=.08,fr=function(e,t,r,n,a){var i=function(e,t,r){t*=1e3;var n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,M);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,M,r)}return n}(e,n,r),o=new J(e,i),s=new K([o],{width:"400em",height:V(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Ke.makeSvgSpan(["hide-tail"],[s],a)},gr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],vr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],br=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],yr=[0,1.2,1.8,2.4,3],xr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],wr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"stack"}],kr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],Sr=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Mr=function(e,t,r,n){for(var a=Math.min(2,3-n.style.size);at)return r[a]}return r[r.length-1]},zr=function(e,t,r,n,a,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=l.contains(br,e)?xr:l.contains(gr,e)?kr:wr;var s=Mr(e,t,o,n);return"small"===s.type?function(e,t,r,n,a,i){var o=Ke.makeSymbol(e,"Main-Regular",a,n),s=ir(o,t,n,i);return r&&or(s,n,t),s}(e,s.style,r,n,a,i):"large"===s.type?sr(e,s.size,r,n,a,i):pr(e,t,r,n,a,i)},Ar={sqrtImage:function(e,t){var r,n,a=t.havingBaseSizing(),i=Mr("\\surd",e*a.sizeMultiplier,kr,a),o=a.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,m=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=fr("sqrtMain",l=(1+s+dr)/o,m=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",n=.833/o):"large"===i.type?(m=1080*yr[i.size],h=(yr[i.size]+s)/o,l=(yr[i.size]+s+dr)/o,(r=fr("sqrtSize"+i.size,l,m,s,t)).style.minWidth="1.02em",n=1/o):(l=e+s+dr,h=e+s,m=Math.floor(1e3*e+s)+80,(r=fr("sqrtTall",l,m,s,t)).style.minWidth="0.742em",n=1.056),r.height=h,r.style.height=V(l),{span:r,advanceWidth:n,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,a,i){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),l.contains(gr,e)||l.contains(br,e))return sr(e,t,!1,r,a,i);if(l.contains(vr,e))return pr(e,yr[t],!1,r,a,i);throw new n("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:yr,customSizedDelim:zr,leftRightDelim:function(e,t,r,n,a,i){var o=n.fontMetrics().axisHeight*n.sizeMultiplier,s=5/n.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return zr(e,h,!0,n,a,i)}},Tr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Br=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Cr(e,t){var r=Xt(e);if(r&&l.contains(Br,r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function qr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}ot({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:function(e,t){var r=Cr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Tr[e.funcName].size,mclass:Tr[e.funcName].mclass,delim:r.text}},htmlBuilder:function(e,t){return"."===e.delim?Ke.makeSpan([e.mclass]):Ar.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass])},mathmlBuilder:function(e){var t=[];"."!==e.delim&&t.push(Bt(e.delim,e.mode));var r=new Tt.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=V(Ar.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}}),ot({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Cr(t[0],e).text,color:r}}}),ot({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=Cr(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=Ut(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(e,t){qr(e);for(var r,n,a=ft(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l-1?"mpadded":"menclose",[Rt(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+a+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};ot({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:o}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=Ut(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\fbox",body:t[0]}}}),ot({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\angl",body:t[0]}}});var Rr={};function Or(e){for(var t=e.type,r=e.names,n=e.props,a=e.handler,i=e.htmlBuilder,o=e.mathmlBuilder,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l1||!c)&&g.pop(),b.length0&&(y+=.25),m.push({pos:y,isDashed:e[t]})}for(w(o[0]),r=0;r0&&(M<(B+=b)&&(M=B),B=0),e.addJot&&(M+=f),z.height=S,z.depth=M,y+=S,z.pos=y,y+=M+B,h[r]=z,w(o[r+1])}var C,q,N=y/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],O=[];if(e.tags&&e.tags.some((function(e){return e})))for(r=0;r=s)){var W=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(W=l.deflt(P.pregap,p))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=V(W),R.push(C));var _=[];for(r=0;r0){for(var K=Ke.makeLineSpan("hline",t,c),J=Ke.makeLineSpan("hdashline",t,c),Q=[{type:"elem",elem:h,shift:0}];m.length>0;){var ee=m.pop(),te=ee.pos-N;ee.isDashed?Q.push({type:"elem",elem:J,shift:te}):Q.push({type:"elem",elem:K,shift:te})}h=Ke.makeVList({positionType:"individualShift",children:Q},t)}if(0===O.length)return Ke.makeSpan(["mord"],[h],t);var re=Ke.makeVList({positionType:"individualShift",children:O},t);return re=Ke.makeSpan(["tag"],[re],t),Ke.makeFragment([h,re])},Xr={c:"center ",l:"left ",r:"right "},Wr=function(e,t){for(var r=[],n=new Tt.MathNode("mtd",[],["mtr-glue"]),a=new Tt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i0){var p=e.cols,d="",f=!1,g=0,v=p.length;"separator"===p[0].type&&(c+="top ",g=1),"separator"===p[p.length-1].type&&(c+="bottom ",v-=1);for(var b=g;b0?"left ":"",c+=S[S.length-1].length>0?"right ":"";for(var M=1;M-1?"alignat":"align",o="split"===e.envName,s=Gr(e.parser,{cols:a,addJot:!0,autoTag:o?void 0:Vr(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:o?2:void 0,leqno:e.parser.settings.leqno},"display"),l=0,h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var m="",c=0;c0&&u&&(f=1),a[p]={type:"align",align:d,pregap:f,postgap:0}}return s.colSeparationType=u?"align":"alignat",s};Or({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Gr(e.parser,a,Ur(e.envName))},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler:function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var i=e.parser;if(i.consumeSpaces(),"["===i.fetch().text){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),a.cols=[{type:"align",align:r}]}}var o=Gr(e.parser,a,Ur(e.envName)),s=Math.max.apply(Math,[0].concat(o.body.map((function(e){return e.length}))));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(e){var t=Gr(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["subarray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Gr(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new n("{subarray} can contain only one column");return a},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler:function(e){var t=Gr(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Ur(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:_r,htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler:function(e){l.contains(["gather","gather*"],e.envName)&&Fr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Vr(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Gr(e.parser,t,"display")},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:_r,htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["equation","equation*"],props:{numArgs:0},handler:function(e){Fr(e);var t={autoTag:Vr(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Gr(e.parser,t,"display")},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["CD"],props:{numArgs:0},handler:function(e){return Fr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,i,o=[],s=[o],l=0;l-1);else{if(!("<>AV".indexOf(u)>-1))throw new n('Expected one of "<>AV=|." after @',h[c]);for(var d=0;d<2;d++){for(var f=!0,g=c+1;g=x.SCRIPT.id?r.text():x.DISPLAY:"text"===e&&r.size===x.DISPLAY.size?r=x.TEXT:"script"===e?r=x.SCRIPT:"scriptscript"===e&&(r=x.SCRIPTSCRIPT),r},nn=function(e,t){var r,n=rn(e.size,t.style),a=n.fracNum(),i=n.fracDen();r=t.havingStyle(a);var o=wt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height0?3*c:7*c,d=t.fontMetrics().denom1):(m>0?(u=t.fontMetrics().num2,p=c):(u=t.fontMetrics().num3,p=3*c),d=t.fontMetrics().denom2),h){var w=t.fontMetrics().axisHeight;u-o.depth-(w+.5*m)0&&(t="."===(t=e)?null:t),t};ot({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler:function(e,t){var r,n=e.parser,a=t[4],i=t[5],o=lt(t[0]),s="atom"===o.type&&"open"===o.family?sn(o.text):null,l=lt(t[1]),h="atom"===l.type&&"close"===l.family?sn(l.text):null,m=Ut(t[2],"size"),c=null;r=!!m.isBlank||(c=m.value).number>0;var u="auto",p=t[3];if("ordgroup"===p.type){if(p.body.length>0){var d=Ut(p.body[0],"textord");u=on[Number(d.text)]}}else p=Ut(p,"textord"),u=on[Number(p.text)];return{type:"genfrac",mode:n.mode,numer:a,denom:i,continued:!1,hasBarLine:r,barSize:c,leftDelim:s,rightDelim:h,size:u}},htmlBuilder:nn,mathmlBuilder:an}),ot({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(e,t){var r=e.parser,n=(e.funcName,e.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ut(t[0],"size").value,token:n}}}),ot({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(e,t){var r=e.parser,n=(e.funcName,t[0]),a=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ut(t[1],"infix").size),i=t[2],o=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:o,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:nn,mathmlBuilder:an});var ln=function(e,t){var r,n,a=t.style;"supsub"===e.type?(r=e.sup?wt(e.sup,t.havingStyle(a.sup()),t):wt(e.sub,t.havingStyle(a.sub()),t),n=Ut(e.base,"horizBrace")):n=Ut(e,"horizBrace");var i,o=wt(n.base,t.havingBaseStyle(x.DISPLAY)),s=Gt(n,t);if(n.isOver?(i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=Ke.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t);i=n.isOver?Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):Ke.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t)};ot({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:ln,mathmlBuilder:function(e,t){var r=Vt(e.label);return new Tt.MathNode(e.isOver?"mover":"munder",[Rt(e.base,t),r])}}),ot({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[1],a=Ut(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:ht(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(e,t){var r=ft(e.body,t,!1);return Ke.makeAnchor(e.href,[],r,t)},mathmlBuilder:function(e,t){var r=It(e.body,t);return r instanceof zt||(r=new zt("mrow",[r])),r.setAttribute("href",e.href),r}}),ot({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=Ut(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i0&&(n=F(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=F(e.width,t));var i={height:V(r+n)};a>0&&(i.width=V(a)),n>0&&(i.verticalAlign=V(-n));var o=new j(e.src,e.alt,i);return o.height=r,o.depth=n,o},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var n=F(e.height,t),a=0;if(e.totalheight.number>0&&(a=F(e.totalheight,t)-n,r.setAttribute("valign",V(-a))),r.setAttribute("height",V(n+a)),e.width.number>0){var i=F(e.width,t);r.setAttribute("width",V(i))}return r.setAttribute("src",e.src),r}}),ot({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=Ut(t[0],"size");if(r.settings.strict){var i="m"===n[1],o="mu"===a.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+a.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder:function(e,t){return Ke.makeGlue(e.dimension,t)},mathmlBuilder:function(e,t){var r=F(e.dimension,t);return new Tt.SpaceNode(r)}}),ot({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:function(e,t){var r;"clap"===e.alignment?(r=Ke.makeSpan([],[wt(e.body,t)]),r=Ke.makeSpan(["inner"],[r],t)):r=Ke.makeSpan(["inner"],[wt(e.body,t)]);var n=Ke.makeSpan(["fix"],[]),a=Ke.makeSpan([e.alignment],[r,n],t),i=Ke.makeSpan(["strut"]);return i.style.height=V(a.height+a.depth),a.depth&&(i.style.verticalAlign=V(-a.depth)),a.children.unshift(i),a=Ke.makeSpan(["thinbox"],[a],t),Ke.makeSpan(["mord","vbox"],[a],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);if("rlap"!==e.alignment){var n="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}}),ot({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=e.funcName,n=e.parser,a=n.mode;n.switchMode("math");var i="\\("===r?"\\)":"$",o=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",body:o}}}),ot({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){throw new n("Mismatched "+e.funcName)}});var mn=function(e,t){switch(t.style.size){case x.DISPLAY.size:return e.display;case x.TEXT.size:return e.text;case x.SCRIPT.size:return e.script;case x.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};ot({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:function(e,t){return{type:"mathchoice",mode:e.parser.mode,display:ht(t[0]),text:ht(t[1]),script:ht(t[2]),scriptscript:ht(t[3])}},htmlBuilder:function(e,t){var r=mn(e,t),n=ft(r,t,!1);return Ke.makeFragment(n)},mathmlBuilder:function(e,t){var r=mn(e,t);return It(r,t)}});var cn=function(e,t,r,n,a,i,o){e=Ke.makeSpan([],[e]);var s,h,m,c=r&&l.isCharacterBox(r);if(t){var u=wt(t,n.havingStyle(a.sup()),n);h={elem:u,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-u.depth)}}if(r){var p=wt(r,n.havingStyle(a.sub()),n);s={elem:p,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-p.height)}}if(h&&s){var d=n.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;m=Ke.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:V(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(s){var f=e.height-o;m=Ke.makeVList({positionType:"top",positionData:f,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:V(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e}]},n)}else{if(!h)return e;var g=e.depth+o;m=Ke.makeVList({positionType:"bottom",positionData:g,children:[{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}var v=[m];if(s&&0!==i&&!c){var b=Ke.makeSpan(["mspace"],[],n);b.style.marginRight=V(i),v.unshift(b)}return Ke.makeSpan(["mop","op-limits"],v,n)},un=["\\smallint"],pn=function(e,t){var r,n,a,i=!1;"supsub"===e.type?(r=e.sup,n=e.sub,a=Ut(e.base,"op"),i=!0):a=Ut(e,"op");var o,s=t.style,h=!1;if(s.size===x.DISPLAY.size&&a.symbol&&!l.contains(un,a.name)&&(h=!0),a.symbol){var m=h?"Size2-Regular":"Size1-Regular",c="";if("\\oiint"!==a.name&&"\\oiiint"!==a.name||(c=a.name.substr(1),a.name="oiint"===c?"\\iint":"\\iiint"),o=Ke.makeSymbol(a.name,m,"math",t,["mop","op-symbol",h?"large-op":"small-op"]),c.length>0){var u=o.italic,p=Ke.staticSvg(c+"Size"+(h?"2":"1"),t);o=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:p,shift:h?.08:0}]},t),a.name="\\"+c,o.classes.unshift("mop"),o.italic=u}}else if(a.body){var d=ft(a.body,t,!0);1===d.length&&d[0]instanceof Z?(o=d[0]).classes[0]="mop":o=Ke.makeSpan(["mop"],d,t)}else{for(var f=[],g=1;g0){for(var s=a.body.map((function(e){var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=ft(s,t.withFont("mathrm"),!0),h=0;h=0?s.setAttribute("height",V(a)):(s.setAttribute("height",V(a)),s.setAttribute("depth",V(-a))),s.setAttribute("voffset",V(a)),s}});var yn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];ot({type:"sizing",names:yn,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:yn.indexOf(n)+1,body:i}},htmlBuilder:function(e,t){var r=t.havingSize(e.size);return bn(e.body,r,t)},mathmlBuilder:function(e,t){var r=t.havingSize(e.size),n=Nt(e.body,r),a=new Tt.MathNode("mstyle",n);return a.setAttribute("mathsize",V(r.sizeMultiplier)),a}}),ot({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=!1,i=!1,o=r[0]&&Ut(r[0],"ordgroup");if(o)for(var s="",l=0;lr.height+r.depth+i&&(i=(i+c-r.height-r.depth)/2);var u=l.height-r.height-i-h;r.style.paddingLeft=V(m);var p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:l},{type:"kern",size:h}]},t);if(e.index){var d=t.havingStyle(x.SCRIPTSCRIPT),f=wt(e.index,d,t),g=.6*(p.height-p.depth),v=Ke.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},t),b=Ke.makeSpan(["root"],[v]);return Ke.makeSpan(["mord","sqrt"],[b,p],t)}return Ke.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder:function(e,t){var r=e.body,n=e.index;return n?new Tt.MathNode("mroot",[Rt(r,t),Rt(n,t)]):new Tt.MathNode("msqrt",[Rt(r,t)])}});var xn={display:x.DISPLAY,text:x.TEXT,script:x.SCRIPT,scriptscript:x.SCRIPTSCRIPT};ot({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!0,r),o=n.slice(1,n.length-5);return{type:"styling",mode:a.mode,style:o,body:i}},htmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r).withFont("");return bn(e.body,n,t)},mathmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r),a=Nt(e.body,n),i=new Tt.MathNode("mstyle",a),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});var wn=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===x.DISPLAY.size||r.alwaysHandleSupSub)?pn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===x.DISPLAY.size||r.limits)?vn:null:"accent"===r.type?l.isCharacterBox(r.base)?Wt:null:"horizBrace"===r.type&&!e.sub===r.isOver?ln:null:null};st({type:"supsub",htmlBuilder:function(e,t){var r=wn(e,t);if(r)return r(e,t);var n,a,i,o=e.base,s=e.sup,h=e.sub,m=wt(o,t),c=t.fontMetrics(),u=0,p=0,d=o&&l.isCharacterBox(o);if(s){var f=t.havingStyle(t.style.sup());n=wt(s,f,t),d||(u=m.height-f.fontMetrics().supDrop*f.sizeMultiplier/t.sizeMultiplier)}if(h){var g=t.havingStyle(t.style.sub());a=wt(h,g,t),d||(p=m.depth+g.fontMetrics().subDrop*g.sizeMultiplier/t.sizeMultiplier)}i=t.style===x.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;var v,b=t.sizeMultiplier,y=V(.5/c.ptPerEm/b),w=null;if(a){var k=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(m instanceof Z||k)&&(w=V(-m.italic))}if(n&&a){u=Math.max(u,i,n.depth+.25*c.xHeight),p=Math.max(p,c.sub2);var S=4*c.defaultRuleThickness;if(u-n.depth-(a.height-p)0&&(u+=M,p-=M)}var z=[{type:"elem",elem:a,shift:p,marginRight:y,marginLeft:w},{type:"elem",elem:n,shift:-u,marginRight:y}];v=Ke.makeVList({positionType:"individualShift",children:z},t)}else if(a){p=Math.max(p,c.sub1,a.height-.8*c.xHeight);var A=[{type:"elem",elem:a,marginLeft:w,marginRight:y}];v=Ke.makeVList({positionType:"shift",positionData:p,children:A},t)}else{if(!n)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,n.depth+.25*c.xHeight),v=Ke.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:n,marginRight:y}]},t)}var T=yt(m,"right")||"mord";return Ke.makeSpan([T],[m,Ke.makeSpan(["msupsub"],[v])],t)},mathmlBuilder:function(e,t){var r,n=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(n=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var a,i=[Rt(e.base,t)];if(e.sub&&i.push(Rt(e.sub,t)),e.sup&&i.push(Rt(e.sup,t)),n)a=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;a=o&&"op"===o.type&&o.limits&&t.style===x.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===x.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;a=s&&"op"===s.type&&s.limits&&(t.style===x.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===x.DISPLAY)?"munder":"msub"}else{var l=e.base;a=l&&"op"===l.type&&l.limits&&(t.style===x.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===x.DISPLAY)?"mover":"msup"}return new Tt.MathNode(a,i)}}),st({type:"atom",htmlBuilder:function(e,t){return Ke.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[Bt(e.text,e.mode)]);if("bin"===e.family){var n=qt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var kn={mi:"italic",mn:"normal",mtext:"normal"};st({type:"mathord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"mathord")},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mi",[Bt(e.text,e.mode,t)]),n=qt(e,t)||"italic";return n!==kn[r.type]&&r.setAttribute("mathvariant",n),r}}),st({type:"textord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"textord")},mathmlBuilder:function(e,t){var r,n=Bt(e.text,e.mode,t),a=qt(e,t)||"normal";return r="text"===e.mode?new Tt.MathNode("mtext",[n]):/[0-9]/.test(e.text)?new Tt.MathNode("mn",[n]):"\\prime"===e.text?new Tt.MathNode("mo",[n]):new Tt.MathNode("mi",[n]),a!==kn[r.type]&&r.setAttribute("mathvariant",a),r}});var Sn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Mn={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};st({type:"spacing",htmlBuilder:function(e,t){if(Mn.hasOwnProperty(e.text)){var r=Mn[e.text].className||"";if("text"===e.mode){var a=Ke.makeOrd(e,t,"textord");return a.classes.push(r),a}return Ke.makeSpan(["mspace",r],[Ke.mathsym(e.text,e.mode,t)],t)}if(Sn.hasOwnProperty(e.text))return Ke.makeSpan(["mspace",Sn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder:function(e,t){if(!Mn.hasOwnProperty(e.text)){if(Sn.hasOwnProperty(e.text))return new Tt.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return new Tt.MathNode("mtext",[new Tt.TextNode("\xa0")])}});var zn=function(){var e=new Tt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};st({type:"tag",mathmlBuilder:function(e,t){var r=new Tt.MathNode("mtable",[new Tt.MathNode("mtr",[zn(),new Tt.MathNode("mtd",[It(e.body,t)]),zn(),new Tt.MathNode("mtd",[It(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var An={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Tn={"\\textbf":"textbf","\\textmd":"textmd"},Bn={"\\textit":"textit","\\textup":"textup"},Cn=function(e,t){var r=e.font;return r?An[r]?t.withTextFontFamily(An[r]):Tn[r]?t.withTextFontWeight(Tn[r]):t.withTextFontShape(Bn[r]):t};ot({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"text",mode:r.mode,body:ht(a),font:n}},htmlBuilder:function(e,t){var r=Cn(e,t),n=ft(e.body,r,!0);return Ke.makeSpan(["mord","text"],n,r)},mathmlBuilder:function(e,t){var r=Cn(e,t);return It(e.body,r)}}),ot({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"underline",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=Ke.makeLineSpan("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","underline"],[i],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var n=new Tt.MathNode("munder",[Rt(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),ot({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:function(e,t){return{type:"vcenter",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ke.makeVList({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:function(e,t){return new Tt.MathNode("mpadded",[Rt(e.body,t)],["vcenter"])}}),ot({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(e,t){for(var r=qn(e),n=[],a=t.havingStyle(t.style.text()),i=0;i0;)this.endGroup()},t.has=function(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)},t.get=function(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]},t.set=function(e,t,r){if(void 0===r&&(r=!1),r){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t},e}(),Hn=Hr;Er("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Er("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Er("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Er("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Er("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Er("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Er("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var En={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Er("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=En[r.text])||a>=t)throw new n("Invalid base-"+t+" digit "+r.text);for(var i;null!=(i=En[e.future().text])&&i":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Er("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in Dn?t=Dn[r]:("\\not"===r.substr(0,4)||r in ae.math&&l.contains(["bin","rel"],ae.math[r].group))&&(t="\\dotsb"),t}));var Pn={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Er("\\dotso",(function(e){return e.future().text in Pn?"\\ldots\\,":"\\ldots"})),Er("\\dotsc",(function(e){var t=e.future().text;return t in Pn&&","!==t?"\\ldots\\,":"\\ldots"})),Er("\\cdots",(function(e){return e.future().text in Pn?"\\@cdots\\,":"\\@cdots"})),Er("\\dotsb","\\cdots"),Er("\\dotsm","\\cdots"),Er("\\dotsi","\\!\\cdots"),Er("\\dotsx","\\ldots\\,"),Er("\\DOTSI","\\relax"),Er("\\DOTSB","\\relax"),Er("\\DOTSX","\\relax"),Er("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Er("\\,","\\tmspace+{3mu}{.1667em}"),Er("\\thinspace","\\,"),Er("\\>","\\mskip{4mu}"),Er("\\:","\\tmspace+{4mu}{.2222em}"),Er("\\medspace","\\:"),Er("\\;","\\tmspace+{5mu}{.2777em}"),Er("\\thickspace","\\;"),Er("\\!","\\tmspace-{3mu}{.1667em}"),Er("\\negthinspace","\\!"),Er("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Er("\\negthickspace","\\tmspace-{5mu}{.277em}"),Er("\\enspace","\\kern.5em "),Er("\\enskip","\\hskip.5em\\relax"),Er("\\quad","\\hskip1em\\relax"),Er("\\qquad","\\hskip2em\\relax"),Er("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Er("\\tag@paren","\\tag@literal{({#1})}"),Er("\\tag@literal",(function(e){if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Er("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Er("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Er("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Er("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Er("\\pmb","\\html@mathml{\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}{\\mathbf{#1}}"),Er("\\newline","\\\\\\relax"),Er("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Fn=V(T["Main-Regular"]["T".charCodeAt(0)][1]-.7*T["Main-Regular"]["A".charCodeAt(0)][1]);Er("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Er("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Er("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Er("\\@hspace","\\hskip #1\\relax"),Er("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Er("\\ordinarycolon",":"),Er("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Er("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Er("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Er("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Er("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Er("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Er("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Er("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Er("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Er("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Er("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Er("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Er("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Er("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Er("\u2237","\\dblcolon"),Er("\u2239","\\eqcolon"),Er("\u2254","\\coloneqq"),Er("\u2255","\\eqqcolon"),Er("\u2a74","\\Coloneqq"),Er("\\ratio","\\vcentcolon"),Er("\\coloncolon","\\dblcolon"),Er("\\colonequals","\\coloneqq"),Er("\\coloncolonequals","\\Coloneqq"),Er("\\equalscolon","\\eqqcolon"),Er("\\equalscoloncolon","\\Eqqcolon"),Er("\\colonminus","\\coloneq"),Er("\\coloncolonminus","\\Coloneq"),Er("\\minuscolon","\\eqcolon"),Er("\\minuscoloncolon","\\Eqcolon"),Er("\\coloncolonapprox","\\Colonapprox"),Er("\\coloncolonsim","\\Colonsim"),Er("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Er("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Er("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Er("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Er("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Er("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Er("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Er("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Er("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Er("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Er("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Er("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Er("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Er("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Er("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Er("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Er("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Er("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Er("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Er("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Er("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Er("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Er("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Er("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Er("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Er("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Er("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Er("\\imath","\\html@mathml{\\@imath}{\u0131}"),Er("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Er("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Er("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Er("\u27e6","\\llbracket"),Er("\u27e7","\\rrbracket"),Er("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Er("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Er("\u2983","\\lBrace"),Er("\u2984","\\rBrace"),Er("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Er("\u29b5","\\minuso"),Er("\\darr","\\downarrow"),Er("\\dArr","\\Downarrow"),Er("\\Darr","\\Downarrow"),Er("\\lang","\\langle"),Er("\\rang","\\rangle"),Er("\\uarr","\\uparrow"),Er("\\uArr","\\Uparrow"),Er("\\Uarr","\\Uparrow"),Er("\\N","\\mathbb{N}"),Er("\\R","\\mathbb{R}"),Er("\\Z","\\mathbb{Z}"),Er("\\alef","\\aleph"),Er("\\alefsym","\\aleph"),Er("\\Alpha","\\mathrm{A}"),Er("\\Beta","\\mathrm{B}"),Er("\\bull","\\bullet"),Er("\\Chi","\\mathrm{X}"),Er("\\clubs","\\clubsuit"),Er("\\cnums","\\mathbb{C}"),Er("\\Complex","\\mathbb{C}"),Er("\\Dagger","\\ddagger"),Er("\\diamonds","\\diamondsuit"),Er("\\empty","\\emptyset"),Er("\\Epsilon","\\mathrm{E}"),Er("\\Eta","\\mathrm{H}"),Er("\\exist","\\exists"),Er("\\harr","\\leftrightarrow"),Er("\\hArr","\\Leftrightarrow"),Er("\\Harr","\\Leftrightarrow"),Er("\\hearts","\\heartsuit"),Er("\\image","\\Im"),Er("\\infin","\\infty"),Er("\\Iota","\\mathrm{I}"),Er("\\isin","\\in"),Er("\\Kappa","\\mathrm{K}"),Er("\\larr","\\leftarrow"),Er("\\lArr","\\Leftarrow"),Er("\\Larr","\\Leftarrow"),Er("\\lrarr","\\leftrightarrow"),Er("\\lrArr","\\Leftrightarrow"),Er("\\Lrarr","\\Leftrightarrow"),Er("\\Mu","\\mathrm{M}"),Er("\\natnums","\\mathbb{N}"),Er("\\Nu","\\mathrm{N}"),Er("\\Omicron","\\mathrm{O}"),Er("\\plusmn","\\pm"),Er("\\rarr","\\rightarrow"),Er("\\rArr","\\Rightarrow"),Er("\\Rarr","\\Rightarrow"),Er("\\real","\\Re"),Er("\\reals","\\mathbb{R}"),Er("\\Reals","\\mathbb{R}"),Er("\\Rho","\\mathrm{P}"),Er("\\sdot","\\cdot"),Er("\\sect","\\S"),Er("\\spades","\\spadesuit"),Er("\\sub","\\subset"),Er("\\sube","\\subseteq"),Er("\\supe","\\supseteq"),Er("\\Tau","\\mathrm{T}"),Er("\\thetasym","\\vartheta"),Er("\\weierp","\\wp"),Er("\\Zeta","\\mathrm{Z}"),Er("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Er("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Er("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Er("\\bra","\\mathinner{\\langle{#1}|}"),Er("\\ket","\\mathinner{|{#1}\\rangle}"),Er("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Er("\\Bra","\\left\\langle#1\\right|"),Er("\\Ket","\\left|#1\\right\\rangle");var Vn=function(e){return function(t){var r=t.consumeArg().tokens,n=t.consumeArg().tokens,a=t.consumeArg().tokens,i=t.consumeArg().tokens,o=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=function(t){return function(r){e&&(r.macros.set("|",o),a.length&&r.macros.set("\\|",s));var i=t;!t&&a.length&&("|"===r.future().text&&(r.popToken(),i=!0));return{tokens:i?a:n,numArgs:0}}};t.macros.set("|",l(!1)),a.length&&t.macros.set("\\|",l(!0));var h=t.consumeArg().tokens,m=t.expandTokens([].concat(i,h,r));return t.macros.endGroup(),{tokens:m.reverse(),numArgs:0}}};Er("\\bra@ket",Vn(!1)),Er("\\bra@set",Vn(!0)),Er("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),Er("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),Er("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),Er("\\angln","{\\angl n}"),Er("\\blue","\\textcolor{##6495ed}{#1}"),Er("\\orange","\\textcolor{##ffa500}{#1}"),Er("\\pink","\\textcolor{##ff00af}{#1}"),Er("\\red","\\textcolor{##df0030}{#1}"),Er("\\green","\\textcolor{##28ae7b}{#1}"),Er("\\gray","\\textcolor{gray}{#1}"),Er("\\purple","\\textcolor{##9d38bd}{#1}"),Er("\\blueA","\\textcolor{##ccfaff}{#1}"),Er("\\blueB","\\textcolor{##80f6ff}{#1}"),Er("\\blueC","\\textcolor{##63d9ea}{#1}"),Er("\\blueD","\\textcolor{##11accd}{#1}"),Er("\\blueE","\\textcolor{##0c7f99}{#1}"),Er("\\tealA","\\textcolor{##94fff5}{#1}"),Er("\\tealB","\\textcolor{##26edd5}{#1}"),Er("\\tealC","\\textcolor{##01d1c1}{#1}"),Er("\\tealD","\\textcolor{##01a995}{#1}"),Er("\\tealE","\\textcolor{##208170}{#1}"),Er("\\greenA","\\textcolor{##b6ffb0}{#1}"),Er("\\greenB","\\textcolor{##8af281}{#1}"),Er("\\greenC","\\textcolor{##74cf70}{#1}"),Er("\\greenD","\\textcolor{##1fab54}{#1}"),Er("\\greenE","\\textcolor{##0d923f}{#1}"),Er("\\goldA","\\textcolor{##ffd0a9}{#1}"),Er("\\goldB","\\textcolor{##ffbb71}{#1}"),Er("\\goldC","\\textcolor{##ff9c39}{#1}"),Er("\\goldD","\\textcolor{##e07d10}{#1}"),Er("\\goldE","\\textcolor{##a75a05}{#1}"),Er("\\redA","\\textcolor{##fca9a9}{#1}"),Er("\\redB","\\textcolor{##ff8482}{#1}"),Er("\\redC","\\textcolor{##f9685d}{#1}"),Er("\\redD","\\textcolor{##e84d39}{#1}"),Er("\\redE","\\textcolor{##bc2612}{#1}"),Er("\\maroonA","\\textcolor{##ffbde0}{#1}"),Er("\\maroonB","\\textcolor{##ff92c6}{#1}"),Er("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Er("\\maroonD","\\textcolor{##ca337c}{#1}"),Er("\\maroonE","\\textcolor{##9e034e}{#1}"),Er("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Er("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Er("\\purpleC","\\textcolor{##aa87ff}{#1}"),Er("\\purpleD","\\textcolor{##7854ab}{#1}"),Er("\\purpleE","\\textcolor{##543b78}{#1}"),Er("\\mintA","\\textcolor{##f5f9e8}{#1}"),Er("\\mintB","\\textcolor{##edf2df}{#1}"),Er("\\mintC","\\textcolor{##e0e5cc}{#1}"),Er("\\grayA","\\textcolor{##f6f7f7}{#1}"),Er("\\grayB","\\textcolor{##f0f1f2}{#1}"),Er("\\grayC","\\textcolor{##e3e5e6}{#1}"),Er("\\grayD","\\textcolor{##d6d8da}{#1}"),Er("\\grayE","\\textcolor{##babec2}{#1}"),Er("\\grayF","\\textcolor{##888d93}{#1}"),Er("\\grayG","\\textcolor{##626569}{#1}"),Er("\\grayH","\\textcolor{##3b3e40}{#1}"),Er("\\grayI","\\textcolor{##21242c}{#1}"),Er("\\kaBlue","\\textcolor{##314453}{#1}"),Er("\\kaGreen","\\textcolor{##71B307}{#1}");var Gn={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},Un=function(){function e(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new On(Hn,t.macros),this.mode=r,this.stack=[]}var t=e.prototype;return t.feed=function(e){this.lexer=new Rn(e,this.settings)},t.switchMode=function(e){this.mode=e},t.beginGroup=function(){this.macros.beginGroup()},t.endGroup=function(){this.macros.endGroup()},t.endGroups=function(){this.macros.endGroups()},t.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},t.popToken=function(){return this.future(),this.stack.pop()},t.pushToken=function(e){this.stack.push(e)},t.pushTokens=function(e){var t;(t=this.stack).push.apply(t,e)},t.scanArgument=function(e){var t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken();var a=this.consumeArg(["]"]);n=a.tokens,r=a.end}else{var i=this.consumeArg();n=i.tokens,t=i.start,r=i.end}return this.pushToken(new Dr("EOF",r.loc)),this.pushTokens(n),t.range(r,"")},t.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},t.consumeArg=function(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,i=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new n("Extra }",a)}else if("EOF"===a.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===i.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:i,end:a}},t.consumeArgs=function(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;athis.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting");var i=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(i=i.slice()).length-1;s>=0;--s){var l=i[s];if("#"===l.text){if(0===s)throw new n("Incomplete placeholder at end of macro body",l);if("#"===(l=i[--s]).text)i.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new n("Not a valid argument number",l);var h;(h=i).splice.apply(h,[s,2].concat(o[+l.text-1]))}}}return this.pushTokens(i),i},t.expandAfterFuture=function(){return this.expandOnce(),this.future()},t.expandNextToken=function(){for(;;){var e=this.expandOnce();if(e instanceof Dr)return e.treatAsRelax&&(e.text="\\relax"),this.stack.pop()}throw new Error},t.expandMacro=function(e){return this.macros.has(e)?this.expandTokens([new Dr(e)]):void 0},t.expandTokens=function(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;){var n=this.expandOnce(!0);n instanceof Dr&&(n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(this.stack.pop()))}return t},t.expandMacroAsText=function(e){var t=this.expandMacro(e);return t?t.map((function(e){return e.text})).join(""):t},t._getExpansion=function(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var n="function"==typeof t?t(this):t;if("string"==typeof n){var a=0;if(-1!==n.indexOf("#"))for(var i=n.replace(/##/g,"");-1!==i.indexOf("#"+(a+1));)++a;for(var o=new Rn(n,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:a}}return n},t.isDefined=function(e){return this.macros.has(e)||Nn.hasOwnProperty(e)||ae.math.hasOwnProperty(e)||ae.text.hasOwnProperty(e)||Gn.hasOwnProperty(e)},t.isExpandable=function(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Nn.hasOwnProperty(e)&&!Nn[e].primitive},e}(),Yn=/^[\u208a\u208b\u208c\u208d\u208e\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u1d66\u1d67\u1d68\u1d69\u1d6a]/,Xn=Object.freeze({"\u208a":"+","\u208b":"-","\u208c":"=","\u208d":"(","\u208e":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1d62":"i","\u2c7c":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209a":"p","\u1d63":"r","\u209b":"s","\u209c":"t","\u1d64":"u","\u1d65":"v","\u2093":"x","\u1d66":"\u03b2","\u1d67":"\u03b3","\u1d68":"\u03c1","\u1d69":"\u03d5","\u1d6a":"\u03c7","\u207a":"+","\u207b":"-","\u207c":"=","\u207d":"(","\u207e":")","\u2070":"0","\xb9":"1","\xb2":"2","\xb3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1d2c":"A","\u1d2e":"B","\u1d30":"D","\u1d31":"E","\u1d33":"G","\u1d34":"H","\u1d35":"I","\u1d36":"J","\u1d37":"K","\u1d38":"L","\u1d39":"M","\u1d3a":"N","\u1d3c":"O","\u1d3e":"P","\u1d3f":"R","\u1d40":"T","\u1d41":"U","\u2c7d":"V","\u1d42":"W","\u1d43":"a","\u1d47":"b","\u1d9c":"c","\u1d48":"d","\u1d49":"e","\u1da0":"f","\u1d4d":"g","\u02b0":"h","\u2071":"i","\u02b2":"j","\u1d4f":"k","\u02e1":"l","\u1d50":"m","\u207f":"n","\u1d52":"o","\u1d56":"p","\u02b3":"r","\u02e2":"s","\u1d57":"t","\u1d58":"u","\u1d5b":"v","\u02b7":"w","\u02e3":"x","\u02b8":"y","\u1dbb":"z","\u1d5d":"\u03b2","\u1d5e":"\u03b3","\u1d5f":"\u03b4","\u1d60":"\u03d5","\u1d61":"\u03c7","\u1dbf":"\u03b8"}),Wn={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},_n={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},jn=function(){function e(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new Un(e,t,this.mode),this.settings=t,this.leftrightDepth=0}var t=e.prototype;return t.expect=function(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()},t.consume=function(){this.nextToken=null},t.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},t.switchMode=function(e){this.mode=e,this.gullet.switchMode(e)},t.parse=function(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}},t.subparse=function(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new Dr("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r},t.parseExpression=function(t,r){for(var n=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==e.endOfExpression.indexOf(a.text))break;if(r&&a.text===r)break;if(t&&Nn[a.text]&&Nn[a.text].infix)break;var i=this.parseAtom(r);if(!i)break;"internal"!==i.type&&n.push(i)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)},t.handleInfixNodes=function(e){for(var t,r=-1,a=0;a=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var s,l=ae[this.mode][t].group,h=Lr.range(e);if(te.hasOwnProperty(l)){var m=l;s={type:"atom",mode:this.mode,family:m,loc:h,text:t}}else s={type:l,mode:this.mode,loc:h,text:t};i=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(S(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),i={type:"textord",mode:"text",loc:Lr.range(e),text:t}}if(this.consume(),o)for(var c=0;c0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/logo-simple.svg b/_static/logo-simple.svg new file mode 100644 index 0000000000..b2f644b0c9 --- /dev/null +++ b/_static/logo-simple.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_static/nbsphinx-broken-thumbnail.svg b/_static/nbsphinx-broken-thumbnail.svg new file mode 100644 index 0000000000..4919ca8829 --- /dev/null +++ b/_static/nbsphinx-broken-thumbnail.svg @@ -0,0 +1,9 @@ + + + + diff --git a/_static/nbsphinx-code-cells.css b/_static/nbsphinx-code-cells.css new file mode 100644 index 0000000000..a3fb27c30f --- /dev/null +++ b/_static/nbsphinx-code-cells.css @@ -0,0 +1,259 @@ +/* remove conflicting styling from Sphinx themes */ +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt *, +div.nbinput.container div.input_area pre, +div.nboutput.container div.output_area pre, +div.nbinput.container div.input_area .highlight, +div.nboutput.container div.output_area .highlight { + border: none; + padding: 0; + margin: 0; + box-shadow: none; +} + +div.nbinput.container > div[class*=highlight], +div.nboutput.container > div[class*=highlight] { + margin: 0; +} + +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt * { + background: none; +} + +div.nboutput.container div.output_area .highlight, +div.nboutput.container div.output_area pre { + background: unset; +} + +div.nboutput.container div.output_area div.highlight { + color: unset; /* override Pygments text color */ +} + +/* avoid gaps between output lines */ +div.nboutput.container div[class*=highlight] pre { + line-height: normal; +} + +/* input/output containers */ +div.nbinput.container, +div.nboutput.container { + display: -webkit-flex; + display: flex; + align-items: flex-start; + margin: 0; + width: 100%; +} +@media (max-width: 540px) { + div.nbinput.container, + div.nboutput.container { + flex-direction: column; + } +} + +/* input container */ +div.nbinput.container { + padding-top: 5px; +} + +/* last container */ +div.nblast.container { + padding-bottom: 5px; +} + +/* input prompt */ +div.nbinput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nbinput.container div.prompt pre > code { + color: #307FC1; +} + +/* output prompt */ +div.nboutput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nboutput.container div.prompt pre > code { + color: #BF5B3D; +} + +/* all prompts */ +div.nbinput.container div.prompt, +div.nboutput.container div.prompt { + width: 4.5ex; + padding-top: 5px; + position: relative; + user-select: none; +} + +div.nbinput.container div.prompt > div, +div.nboutput.container div.prompt > div { + position: absolute; + right: 0; + margin-right: 0.3ex; +} + +@media (max-width: 540px) { + div.nbinput.container div.prompt, + div.nboutput.container div.prompt { + width: unset; + text-align: left; + padding: 0.4em; + } + div.nboutput.container div.prompt.empty { + padding: 0; + } + + div.nbinput.container div.prompt > div, + div.nboutput.container div.prompt > div { + position: unset; + } +} + +/* disable scrollbars and line breaks on prompts */ +div.nbinput.container div.prompt pre, +div.nboutput.container div.prompt pre { + overflow: hidden; + white-space: pre; +} + +/* input/output area */ +div.nbinput.container div.input_area, +div.nboutput.container div.output_area { + -webkit-flex: 1; + flex: 1; + overflow: auto; +} +@media (max-width: 540px) { + div.nbinput.container div.input_area, + div.nboutput.container div.output_area { + width: 100%; + } +} + +/* input area */ +div.nbinput.container div.input_area { + border: 1px solid #e0e0e0; + border-radius: 2px; + /*background: #f5f5f5;*/ +} + +/* override MathJax center alignment in output cells */ +div.nboutput.container div[class*=MathJax] { + text-align: left !important; +} + +/* override sphinx.ext.imgmath center alignment in output cells */ +div.nboutput.container div.math p { + text-align: left; +} + +/* standard error */ +div.nboutput.container div.output_area.stderr { + background: #fdd; +} + +/* ANSI colors */ +.ansi-black-fg { color: #3E424D; } +.ansi-black-bg { background-color: #3E424D; } +.ansi-black-intense-fg { color: #282C36; } +.ansi-black-intense-bg { background-color: #282C36; } +.ansi-red-fg { color: #E75C58; } +.ansi-red-bg { background-color: #E75C58; } +.ansi-red-intense-fg { color: #B22B31; } +.ansi-red-intense-bg { background-color: #B22B31; } +.ansi-green-fg { color: #00A250; } +.ansi-green-bg { background-color: #00A250; } +.ansi-green-intense-fg { color: #007427; } +.ansi-green-intense-bg { background-color: #007427; } +.ansi-yellow-fg { color: #DDB62B; } +.ansi-yellow-bg { background-color: #DDB62B; } +.ansi-yellow-intense-fg { color: #B27D12; } +.ansi-yellow-intense-bg { background-color: #B27D12; } +.ansi-blue-fg { color: #208FFB; } +.ansi-blue-bg { background-color: #208FFB; } +.ansi-blue-intense-fg { color: #0065CA; } +.ansi-blue-intense-bg { background-color: #0065CA; } +.ansi-magenta-fg { color: #D160C4; } +.ansi-magenta-bg { background-color: #D160C4; } +.ansi-magenta-intense-fg { color: #A03196; } +.ansi-magenta-intense-bg { background-color: #A03196; } +.ansi-cyan-fg { color: #60C6C8; } +.ansi-cyan-bg { background-color: #60C6C8; } +.ansi-cyan-intense-fg { color: #258F8F; } +.ansi-cyan-intense-bg { background-color: #258F8F; } +.ansi-white-fg { color: #C5C1B4; } +.ansi-white-bg { background-color: #C5C1B4; } +.ansi-white-intense-fg { color: #A1A6B2; } +.ansi-white-intense-bg { background-color: #A1A6B2; } + +.ansi-default-inverse-fg { color: #FFFFFF; } +.ansi-default-inverse-bg { background-color: #000000; } + +.ansi-bold { font-weight: bold; } +.ansi-underline { text-decoration: underline; } + + +div.nbinput.container div.input_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight].math, +div.nboutput.container div.output_area.rendered_html, +div.nboutput.container div.output_area > div.output_javascript, +div.nboutput.container div.output_area:not(.rendered_html) > img{ + padding: 5px; + margin: 0; +} + +/* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */ +div.nbinput.container div.input_area > div[class^='highlight'], +div.nboutput.container div.output_area > div[class^='highlight']{ + overflow-y: hidden; +} + +/* hide copy button on prompts for 'sphinx_copybutton' extension ... */ +.prompt .copybtn, +/* ... and 'sphinx_immaterial' theme */ +.prompt .md-clipboard.md-icon { + display: none; +} + +/* Some additional styling taken form the Jupyter notebook CSS */ +.jp-RenderedHTMLCommon table, +div.rendered_html table { + border: none; + border-collapse: collapse; + border-spacing: 0; + color: black; + font-size: 12px; + table-layout: fixed; +} +.jp-RenderedHTMLCommon thead, +div.rendered_html thead { + border-bottom: 1px solid black; + vertical-align: bottom; +} +.jp-RenderedHTMLCommon tr, +.jp-RenderedHTMLCommon th, +.jp-RenderedHTMLCommon td, +div.rendered_html tr, +div.rendered_html th, +div.rendered_html td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} +.jp-RenderedHTMLCommon th, +div.rendered_html th { + font-weight: bold; +} +.jp-RenderedHTMLCommon tbody tr:nth-child(odd), +div.rendered_html tbody tr:nth-child(odd) { + background: #f5f5f5; +} +.jp-RenderedHTMLCommon tbody tr:hover, +div.rendered_html tbody tr:hover { + background: rgba(66, 165, 245, 0.2); +} + diff --git a/_static/nbsphinx-gallery.css b/_static/nbsphinx-gallery.css new file mode 100644 index 0000000000..365c27a96b --- /dev/null +++ b/_static/nbsphinx-gallery.css @@ -0,0 +1,31 @@ +.nbsphinx-gallery { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + gap: 5px; + margin-top: 1em; + margin-bottom: 1em; +} + +.nbsphinx-gallery > a { + padding: 5px; + border: 1px dotted currentColor; + border-radius: 2px; + text-align: center; +} + +.nbsphinx-gallery > a:hover { + border-style: solid; +} + +.nbsphinx-gallery img { + max-width: 100%; + max-height: 100%; +} + +.nbsphinx-gallery > a > div:first-child { + display: flex; + align-items: start; + justify-content: center; + height: 120px; + margin-bottom: 5px; +} diff --git a/_static/nbsphinx-no-thumbnail.svg b/_static/nbsphinx-no-thumbnail.svg new file mode 100644 index 0000000000..9dca7588fa --- /dev/null +++ b/_static/nbsphinx-no-thumbnail.svg @@ -0,0 +1,9 @@ + + + + diff --git a/_static/no_image.png b/_static/no_image.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2d48d5d3f0044cf0399b3608d8eb5db6f9d12d GIT binary patch literal 4315 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 HW8D7$6^1w` literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 0000000000..997797f270 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,152 @@ +html[data-theme="light"] .highlight pre { line-height: 125%; } +html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight .hll { background-color: #7971292e } +html[data-theme="light"] .highlight { background: #fefefe; color: #545454 } +html[data-theme="light"] .highlight .c { color: #797129 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #d91e18 } /* Error */ +html[data-theme="light"] .highlight .k { color: #7928a1 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #797129 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #545454 } /* Name */ +html[data-theme="light"] .highlight .o { color: #008000 } /* Operator */ +html[data-theme="light"] .highlight .p { color: #545454 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #797129 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #797129 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #797129 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #797129 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #797129 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #797129 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #007faa } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #007faa } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #007faa } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #7928a1 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #7928a1 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #7928a1 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #7928a1 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #7928a1 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #797129 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #797129 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #797129 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #008000 } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #797129 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #797129 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #007faa } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #007faa } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #797129 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #008000 } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #7928a1 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #007faa } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #797129 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #545454 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #545454 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #007faa } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #007faa } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #d91e18 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #7928a1 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #545454 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #545454 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #797129 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #797129 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #797129 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #797129 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #797129 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #008000 } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #008000 } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #008000 } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #008000 } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #008000 } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #008000 } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #008000 } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #008000 } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #008000 } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #008000 } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #d91e18 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #008000 } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #007faa } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #797129 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #007faa } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #d91e18 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #d91e18 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #d91e18 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #797129 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #797129 } /* Literal.Number.Integer.Long */ +html[data-theme="dark"] .highlight pre { line-height: 125%; } +html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } +html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ +html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/scripts/bootstrap.js b/_static/scripts/bootstrap.js new file mode 100644 index 0000000000..ef07e0bca0 --- /dev/null +++ b/_static/scripts/bootstrap.js @@ -0,0 +1,3 @@ +/*! For license information please see bootstrap.js.LICENSE.txt */ +(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>w,afterRead:()=>b,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>G,auto:()=>r,basePlacements:()=>a,beforeMain:()=>v,beforeRead:()=>m,beforeWrite:()=>A,bottom:()=>n,clippingParents:()=>h,computeStyles:()=>et,createPopper:()=>Dt,createPopperBase:()=>Lt,createPopperLite:()=>$t,detectOverflow:()=>mt,end:()=>c,eventListeners:()=>nt,flip:()=>_t,hide:()=>yt,left:()=>o,main:()=>y,modifierPhases:()=>T,offset:()=>wt,placements:()=>g,popper:()=>u,popperGenerator:()=>kt,popperOffsets:()=>At,preventOverflow:()=>Et,read:()=>_,reference:()=>f,right:()=>s,start:()=>l,top:()=>i,variationPlacements:()=>p,viewport:()=>d,write:()=>E});var i="top",n="bottom",s="right",o="left",r="auto",a=[i,n,s,o],l="start",c="end",h="clippingParents",d="viewport",u="popper",f="reference",p=a.reduce((function(t,e){return t.concat([e+"-"+l,e+"-"+c])}),[]),g=[].concat(a,[r]).reduce((function(t,e){return t.concat([e,e+"-"+l,e+"-"+c])}),[]),m="beforeRead",_="read",b="afterRead",v="beforeMain",y="main",w="afterMain",A="beforeWrite",E="write",C="afterWrite",T=[m,_,b,v,y,w,A,E,C];function O(t){return t?(t.nodeName||"").toLowerCase():null}function x(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function k(t){return t instanceof x(t).Element||t instanceof Element}function L(t){return t instanceof x(t).HTMLElement||t instanceof HTMLElement}function D(t){return"undefined"!=typeof ShadowRoot&&(t instanceof x(t).ShadowRoot||t instanceof ShadowRoot)}const $={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];L(s)&&O(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});L(n)&&O(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function S(t){return t.split("-")[0]}var I=Math.max,N=Math.min,P=Math.round;function j(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function M(){return!/^((?!chrome|android).)*safari/i.test(j())}function H(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&L(t)&&(s=t.offsetWidth>0&&P(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&P(n.height)/t.offsetHeight||1);var r=(k(t)?x(t):window).visualViewport,a=!M()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function B(t){var e=H(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function W(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&D(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function F(t){return x(t).getComputedStyle(t)}function z(t){return["table","td","th"].indexOf(O(t))>=0}function q(t){return((k(t)?t.ownerDocument:t.document)||window.document).documentElement}function R(t){return"html"===O(t)?t:t.assignedSlot||t.parentNode||(D(t)?t.host:null)||q(t)}function V(t){return L(t)&&"fixed"!==F(t).position?t.offsetParent:null}function Y(t){for(var e=x(t),i=V(t);i&&z(i)&&"static"===F(i).position;)i=V(i);return i&&("html"===O(i)||"body"===O(i)&&"static"===F(i).position)?e:i||function(t){var e=/firefox/i.test(j());if(/Trident/i.test(j())&&L(t)&&"fixed"===F(t).position)return null;var i=R(t);for(D(i)&&(i=i.host);L(i)&&["html","body"].indexOf(O(i))<0;){var n=F(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function K(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Q(t,e,i){return I(t,N(e,i))}function X(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function U(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const G={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,r=t.state,l=t.name,c=t.options,h=r.elements.arrow,d=r.modifiersData.popperOffsets,u=S(r.placement),f=K(u),p=[o,s].indexOf(u)>=0?"height":"width";if(h&&d){var g=function(t,e){return X("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:U(t,a))}(c.padding,r),m=B(h),_="y"===f?i:o,b="y"===f?n:s,v=r.rects.reference[p]+r.rects.reference[f]-d[f]-r.rects.popper[p],y=d[f]-r.rects.reference[f],w=Y(h),A=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,E=v/2-y/2,C=g[_],T=A-m[p]-g[b],O=A/2-m[p]/2+E,x=Q(C,O,T),k=f;r.modifiersData[l]=((e={})[k]=x,e.centerOffset=x-O,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&W(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function J(t){return t.split("-")[1]}var Z={top:"auto",right:"auto",bottom:"auto",left:"auto"};function tt(t){var e,r=t.popper,a=t.popperRect,l=t.placement,h=t.variation,d=t.offsets,u=t.position,f=t.gpuAcceleration,p=t.adaptive,g=t.roundOffsets,m=t.isFixed,_=d.x,b=void 0===_?0:_,v=d.y,y=void 0===v?0:v,w="function"==typeof g?g({x:b,y}):{x:b,y};b=w.x,y=w.y;var A=d.hasOwnProperty("x"),E=d.hasOwnProperty("y"),C=o,T=i,O=window;if(p){var k=Y(r),L="clientHeight",D="clientWidth";k===x(r)&&"static"!==F(k=q(r)).position&&"absolute"===u&&(L="scrollHeight",D="scrollWidth"),(l===i||(l===o||l===s)&&h===c)&&(T=n,y-=(m&&k===O&&O.visualViewport?O.visualViewport.height:k[L])-a.height,y*=f?1:-1),l!==o&&(l!==i&&l!==n||h!==c)||(C=s,b-=(m&&k===O&&O.visualViewport?O.visualViewport.width:k[D])-a.width,b*=f?1:-1)}var $,S=Object.assign({position:u},p&&Z),I=!0===g?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:P(i*s)/s||0,y:P(n*s)/s||0}}({x:b,y},x(r)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},S,(($={})[T]=E?"0":"",$[C]=A?"0":"",$.transform=(O.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",$)):Object.assign({},S,((e={})[T]=E?y+"px":"",e[C]=A?b+"px":"",e.transform="",e))}const et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:S(e.placement),variation:J(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,tt(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,tt(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var it={passive:!0};const nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=x(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,it)})),a&&l.addEventListener("resize",i.update,it),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,it)})),a&&l.removeEventListener("resize",i.update,it)}},data:{}};var st={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(t){return t.replace(/left|right|bottom|top/g,(function(t){return st[t]}))}var rt={start:"end",end:"start"};function at(t){return t.replace(/start|end/g,(function(t){return rt[t]}))}function lt(t){var e=x(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ct(t){return H(q(t)).left+lt(t).scrollLeft}function ht(t){var e=F(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function dt(t){return["html","body","#document"].indexOf(O(t))>=0?t.ownerDocument.body:L(t)&&ht(t)?t:dt(R(t))}function ut(t,e){var i;void 0===e&&(e=[]);var n=dt(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=x(n),r=s?[o].concat(o.visualViewport||[],ht(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ut(R(r)))}function ft(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function pt(t,e,i){return e===d?ft(function(t,e){var i=x(t),n=q(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=M();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ct(t),y:l}}(t,i)):k(e)?function(t,e){var i=H(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):ft(function(t){var e,i=q(t),n=lt(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=I(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=I(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ct(t),l=-n.scrollTop;return"rtl"===F(s||i).direction&&(a+=I(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(t)))}function gt(t){var e,r=t.reference,a=t.element,h=t.placement,d=h?S(h):null,u=h?J(h):null,f=r.x+r.width/2-a.width/2,p=r.y+r.height/2-a.height/2;switch(d){case i:e={x:f,y:r.y-a.height};break;case n:e={x:f,y:r.y+r.height};break;case s:e={x:r.x+r.width,y:p};break;case o:e={x:r.x-a.width,y:p};break;default:e={x:r.x,y:r.y}}var g=d?K(d):null;if(null!=g){var m="y"===g?"height":"width";switch(u){case l:e[g]=e[g]-(r[m]/2-a[m]/2);break;case c:e[g]=e[g]+(r[m]/2-a[m]/2)}}return e}function mt(t,e){void 0===e&&(e={});var o=e,r=o.placement,l=void 0===r?t.placement:r,c=o.strategy,p=void 0===c?t.strategy:c,g=o.boundary,m=void 0===g?h:g,_=o.rootBoundary,b=void 0===_?d:_,v=o.elementContext,y=void 0===v?u:v,w=o.altBoundary,A=void 0!==w&&w,E=o.padding,C=void 0===E?0:E,T=X("number"!=typeof C?C:U(C,a)),x=y===u?f:u,D=t.rects.popper,$=t.elements[A?x:y],S=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ut(R(t)),i=["absolute","fixed"].indexOf(F(t).position)>=0&&L(t)?Y(t):t;return k(i)?e.filter((function(t){return k(t)&&W(t,i)&&"body"!==O(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=pt(t,i,n);return e.top=I(s.top,e.top),e.right=N(s.right,e.right),e.bottom=N(s.bottom,e.bottom),e.left=I(s.left,e.left),e}),pt(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(k($)?$:$.contextElement||q(t.elements.popper),m,b,p),P=H(t.elements.reference),j=gt({reference:P,element:D,strategy:"absolute",placement:l}),M=ft(Object.assign({},D,j)),B=y===u?M:P,z={top:S.top-B.top+T.top,bottom:B.bottom-S.bottom+T.bottom,left:S.left-B.left+T.left,right:B.right-S.right+T.right},V=t.modifiersData.offset;if(y===u&&V){var K=V[l];Object.keys(z).forEach((function(t){var e=[s,n].indexOf(t)>=0?1:-1,o=[i,n].indexOf(t)>=0?"y":"x";z[t]+=K[o]*e}))}return z}const _t={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,c=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var d=c.mainAxis,u=void 0===d||d,f=c.altAxis,m=void 0===f||f,_=c.fallbackPlacements,b=c.padding,v=c.boundary,y=c.rootBoundary,w=c.altBoundary,A=c.flipVariations,E=void 0===A||A,C=c.allowedAutoPlacements,T=e.options.placement,O=S(T),x=_||(O!==T&&E?function(t){if(S(t)===r)return[];var e=ot(t);return[at(t),e,at(e)]}(T):[ot(T)]),k=[T].concat(x).reduce((function(t,i){return t.concat(S(i)===r?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,l=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?g:c,d=J(n),u=d?l?p:p.filter((function(t){return J(t)===d})):a,f=u.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=u);var m=f.reduce((function(e,i){return e[i]=mt(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[S(i)],e}),{});return Object.keys(m).sort((function(t,e){return m[t]-m[e]}))}(e,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:E,allowedAutoPlacements:C}):i)}),[]),L=e.rects.reference,D=e.rects.popper,$=new Map,I=!0,N=k[0],P=0;P=0,W=B?"width":"height",F=mt(e,{placement:j,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),z=B?H?s:o:H?n:i;L[W]>D[W]&&(z=ot(z));var q=ot(z),R=[];if(u&&R.push(F[M]<=0),m&&R.push(F[z]<=0,F[q]<=0),R.every((function(t){return t}))){N=j,I=!1;break}$.set(j,R)}if(I)for(var V=function(t){var e=k.find((function(e){var i=$.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return N=e,"break"},Y=E?3:1;Y>0&&"break"!==V(Y);Y--);e.placement!==N&&(e.modifiersData[h]._skip=!0,e.placement=N,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function bt(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function vt(t){return[i,s,n,o].some((function(e){return t[e]>=0}))}const yt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=mt(e,{elementContext:"reference"}),a=mt(e,{altBoundary:!0}),l=bt(r,n),c=bt(a,s,o),h=vt(l),d=vt(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},wt={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,n=t.options,r=t.name,a=n.offset,l=void 0===a?[0,0]:a,c=g.reduce((function(t,n){return t[n]=function(t,e,n){var r=S(t),a=[o,i].indexOf(r)>=0?-1:1,l="function"==typeof n?n(Object.assign({},e,{placement:t})):n,c=l[0],h=l[1];return c=c||0,h=(h||0)*a,[o,s].indexOf(r)>=0?{x:h,y:c}:{x:c,y:h}}(n,e.rects,l),t}),{}),h=c[e.placement],d=h.x,u=h.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=d,e.modifiersData.popperOffsets.y+=u),e.modifiersData[r]=c}},At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},Et={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,r=t.options,a=t.name,c=r.mainAxis,h=void 0===c||c,d=r.altAxis,u=void 0!==d&&d,f=r.boundary,p=r.rootBoundary,g=r.altBoundary,m=r.padding,_=r.tether,b=void 0===_||_,v=r.tetherOffset,y=void 0===v?0:v,w=mt(e,{boundary:f,rootBoundary:p,padding:m,altBoundary:g}),A=S(e.placement),E=J(e.placement),C=!E,T=K(A),O="x"===T?"y":"x",x=e.modifiersData.popperOffsets,k=e.rects.reference,L=e.rects.popper,D="function"==typeof y?y(Object.assign({},e.rects,{placement:e.placement})):y,$="number"==typeof D?{mainAxis:D,altAxis:D}:Object.assign({mainAxis:0,altAxis:0},D),P=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,j={x:0,y:0};if(x){if(h){var M,H="y"===T?i:o,W="y"===T?n:s,F="y"===T?"height":"width",z=x[T],q=z+w[H],R=z-w[W],V=b?-L[F]/2:0,X=E===l?k[F]:L[F],U=E===l?-L[F]:-k[F],G=e.elements.arrow,Z=b&&G?B(G):{width:0,height:0},tt=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[H],it=tt[W],nt=Q(0,k[F],Z[F]),st=C?k[F]/2-V-nt-et-$.mainAxis:X-nt-et-$.mainAxis,ot=C?-k[F]/2+V+nt+it+$.mainAxis:U+nt+it+$.mainAxis,rt=e.elements.arrow&&Y(e.elements.arrow),at=rt?"y"===T?rt.clientTop||0:rt.clientLeft||0:0,lt=null!=(M=null==P?void 0:P[T])?M:0,ct=z+ot-lt,ht=Q(b?N(q,z+st-lt-at):q,z,b?I(R,ct):R);x[T]=ht,j[T]=ht-z}if(u){var dt,ut="x"===T?i:o,ft="x"===T?n:s,pt=x[O],gt="y"===O?"height":"width",_t=pt+w[ut],bt=pt-w[ft],vt=-1!==[i,o].indexOf(A),yt=null!=(dt=null==P?void 0:P[O])?dt:0,wt=vt?_t:pt-k[gt]-L[gt]-yt+$.altAxis,At=vt?pt+k[gt]+L[gt]-yt-$.altAxis:bt,Et=b&&vt?function(t,e,i){var n=Q(t,e,i);return n>i?i:n}(wt,pt,At):Q(b?wt:_t,pt,b?At:bt);x[O]=Et,j[O]=Et-pt}e.modifiersData[a]=j}},requiresIfExists:["offset"]};function Ct(t,e,i){void 0===i&&(i=!1);var n,s,o=L(e),r=L(e)&&function(t){var e=t.getBoundingClientRect(),i=P(e.width)/t.offsetWidth||1,n=P(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=q(e),l=H(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==O(e)||ht(a))&&(c=(n=e)!==x(n)&&L(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:lt(n)),L(e)?((h=H(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ct(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Tt(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Ot={placement:"bottom",modifiers:[],strategy:"absolute"};function xt(){for(var t=arguments.length,e=new Array(t),i=0;i{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},Nt=t=>{const e=It(t);return e&&document.querySelector(e)?e:null},Pt=t=>{const e=It(t);return e?document.querySelector(e):null},jt=t=>{t.dispatchEvent(new Event(St))},Mt=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ht=t=>Mt(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,Bt=t=>{if(!Mt(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},Wt=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),Ft=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?Ft(t.parentNode):null},zt=()=>{},qt=t=>{t.offsetHeight},Rt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Vt=[],Yt=()=>"rtl"===document.documentElement.dir,Kt=t=>{var e;e=()=>{const e=Rt();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(Vt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Vt)t()})),Vt.push(e)):e()},Qt=t=>{"function"==typeof t&&t()},Xt=(t,e,i=!0)=>{if(!i)return void Qt(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let s=!1;const o=({target:i})=>{i===e&&(s=!0,e.removeEventListener(St,o),Qt(t))};e.addEventListener(St,o),setTimeout((()=>{s||jt(e)}),n)},Ut=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},Gt=/[^.]*(?=\..*)\.|.*/,Jt=/\..*/,Zt=/::\d+$/,te={};let ee=1;const ie={mouseenter:"mouseover",mouseleave:"mouseout"},ne=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function se(t,e){return e&&`${e}::${ee++}`||t.uidEvent||ee++}function oe(t){const e=se(t);return t.uidEvent=e,te[e]=te[e]||{},te[e]}function re(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function ae(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=de(t);return ne.has(o)||(o=t),[n,s,o]}function le(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=ae(e,i,n);if(e in ie){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=oe(t),c=l[a]||(l[a]={}),h=re(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=se(r,e.replace(Gt,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return fe(s,{delegateTarget:r}),n.oneOff&&ue.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return fe(n,{delegateTarget:t}),i.oneOff&&ue.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function ce(t,e,i,n,s){const o=re(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function he(t,e,i,n){const s=e[i]||{};for(const o of Object.keys(s))if(o.includes(n)){const n=s[o];ce(t,e,i,n.callable,n.delegationSelector)}}function de(t){return t=t.replace(Jt,""),ie[t]||t}const ue={on(t,e,i,n){le(t,e,i,n,!1)},one(t,e,i,n){le(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=ae(e,i,n),a=r!==e,l=oe(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))he(t,l,i,e.slice(1));for(const i of Object.keys(c)){const n=i.replace(Zt,"");if(!a||e.includes(n)){const e=c[i];ce(t,l,r,e.callable,e.delegationSelector)}}}else{if(!Object.keys(c).length)return;ce(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=Rt();let s=null,o=!0,r=!0,a=!1;e!==de(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());let l=new Event(e,{bubbles:o,cancelable:!0});return l=fe(l,i),a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function fe(t,e){for(const[i,n]of Object.entries(e||{}))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}const pe=new Map,ge={set(t,e,i){pe.has(t)||pe.set(t,new Map);const n=pe.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>pe.has(t)&&pe.get(t).get(e)||null,remove(t,e){if(!pe.has(t))return;const i=pe.get(t);i.delete(e),0===i.size&&pe.delete(t)}};function me(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function _e(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const be={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${_e(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${_e(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=me(t.dataset[n])}return e},getDataAttribute:(t,e)=>me(t.getAttribute(`data-bs-${_e(e)}`))};class ve{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=Mt(e)?be.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Mt(e)?be.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const n of Object.keys(e)){const s=e[n],o=t[n],r=Mt(o)?"element":null==(i=o)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class ye extends ve{constructor(t,e){super(),(t=Ht(t))&&(this._element=t,this._config=this._getConfig(e),ge.set(this._element,this.constructor.DATA_KEY,this))}dispose(){ge.remove(this._element,this.constructor.DATA_KEY),ue.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){Xt(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return ge.get(Ht(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.2.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const we=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;ue.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Wt(this))return;const s=Pt(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},Ae=".bs.alert",Ee=`close${Ae}`,Ce=`closed${Ae}`;class Te extends ye{static get NAME(){return"alert"}close(){if(ue.trigger(this._element,Ee).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),ue.trigger(this._element,Ce),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Te.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}we(Te,"close"),Kt(Te);const Oe='[data-bs-toggle="button"]';class xe extends ye{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=xe.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}ue.on(document,"click.bs.button.data-api",Oe,(t=>{t.preventDefault();const e=t.target.closest(Oe);xe.getOrCreateInstance(e).toggle()})),Kt(xe);const ke={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!Wt(t)&&Bt(t)))}},Le=".bs.swipe",De=`touchstart${Le}`,$e=`touchmove${Le}`,Se=`touchend${Le}`,Ie=`pointerdown${Le}`,Ne=`pointerup${Le}`,Pe={endCallback:null,leftCallback:null,rightCallback:null},je={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class Me extends ve{constructor(t,e){super(),this._element=t,t&&Me.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pe}static get DefaultType(){return je}static get NAME(){return"swipe"}dispose(){ue.off(this._element,Le)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Qt(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&Qt(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(ue.on(this._element,Ie,(t=>this._start(t))),ue.on(this._element,Ne,(t=>this._end(t))),this._element.classList.add("pointer-event")):(ue.on(this._element,De,(t=>this._start(t))),ue.on(this._element,$e,(t=>this._move(t))),ue.on(this._element,Se,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const He=".bs.carousel",Be=".data-api",We="next",Fe="prev",ze="left",qe="right",Re=`slide${He}`,Ve=`slid${He}`,Ye=`keydown${He}`,Ke=`mouseenter${He}`,Qe=`mouseleave${He}`,Xe=`dragstart${He}`,Ue=`load${He}${Be}`,Ge=`click${He}${Be}`,Je="carousel",Ze="active",ti=".active",ei=".carousel-item",ii=ti+ei,ni={ArrowLeft:qe,ArrowRight:ze},si={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},oi={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class ri extends ye{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=ke.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===Je&&this.cycle()}static get Default(){return si}static get DefaultType(){return oi}static get NAME(){return"carousel"}next(){this._slide(We)}nextWhenVisible(){!document.hidden&&Bt(this._element)&&this.next()}prev(){this._slide(Fe)}pause(){this._isSliding&&jt(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?ue.one(this._element,Ve,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void ue.one(this._element,Ve,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?We:Fe;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&ue.on(this._element,Ye,(t=>this._keydown(t))),"hover"===this._config.pause&&(ue.on(this._element,Ke,(()=>this.pause())),ue.on(this._element,Qe,(()=>this._maybeEnableCycle()))),this._config.touch&&Me.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of ke.find(".carousel-item img",this._element))ue.on(t,Xe,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ze)),rightCallback:()=>this._slide(this._directionToOrder(qe)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new Me(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=ni[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=ke.findOne(ti,this._indicatorsElement);e.classList.remove(Ze),e.removeAttribute("aria-current");const i=ke.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(Ze),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===We,s=e||Ut(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>ue.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(Re).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),qt(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(Ze),i.classList.remove(Ze,c,l),this._isSliding=!1,r(Ve)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return ke.findOne(ii,this._element)}_getItems(){return ke.find(ei,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return Yt()?t===ze?Fe:We:t===ze?We:Fe}_orderToDirection(t){return Yt()?t===Fe?ze:qe:t===Fe?qe:ze}static jQueryInterface(t){return this.each((function(){const e=ri.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}ue.on(document,Ge,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=Pt(this);if(!e||!e.classList.contains(Je))return;t.preventDefault();const i=ri.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===be.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),ue.on(window,Ue,(()=>{const t=ke.find('[data-bs-ride="carousel"]');for(const e of t)ri.getOrCreateInstance(e)})),Kt(ri);const ai=".bs.collapse",li=`show${ai}`,ci=`shown${ai}`,hi=`hide${ai}`,di=`hidden${ai}`,ui=`click${ai}.data-api`,fi="show",pi="collapse",gi="collapsing",mi=`:scope .${pi} .${pi}`,_i='[data-bs-toggle="collapse"]',bi={parent:null,toggle:!0},vi={parent:"(null|element)",toggle:"boolean"};class yi extends ye{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=ke.find(_i);for(const t of i){const e=Nt(t),i=ke.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return bi}static get DefaultType(){return vi}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>yi.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(ue.trigger(this._element,li).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(pi),this._element.classList.add(gi),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(gi),this._element.classList.add(pi,fi),this._element.style[e]="",ue.trigger(this._element,ci)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(ue.trigger(this._element,hi).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,qt(this._element),this._element.classList.add(gi),this._element.classList.remove(pi,fi);for(const t of this._triggerArray){const e=Pt(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(gi),this._element.classList.add(pi),ue.trigger(this._element,di)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(fi)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ht(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(_i);for(const e of t){const t=Pt(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=ke.find(mi,this._config.parent);return ke.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=yi.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}ue.on(document,ui,_i,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=Nt(this),i=ke.find(e);for(const t of i)yi.getOrCreateInstance(t,{toggle:!1}).toggle()})),Kt(yi);const wi="dropdown",Ai=".bs.dropdown",Ei=".data-api",Ci="ArrowUp",Ti="ArrowDown",Oi=`hide${Ai}`,xi=`hidden${Ai}`,ki=`show${Ai}`,Li=`shown${Ai}`,Di=`click${Ai}${Ei}`,$i=`keydown${Ai}${Ei}`,Si=`keyup${Ai}${Ei}`,Ii="show",Ni='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Pi=`${Ni}.${Ii}`,ji=".dropdown-menu",Mi=Yt()?"top-end":"top-start",Hi=Yt()?"top-start":"top-end",Bi=Yt()?"bottom-end":"bottom-start",Wi=Yt()?"bottom-start":"bottom-end",Fi=Yt()?"left-start":"right-start",zi=Yt()?"right-start":"left-start",qi={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Ri={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Vi extends ye{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=ke.next(this._element,ji)[0]||ke.prev(this._element,ji)[0]||ke.findOne(ji,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return qi}static get DefaultType(){return Ri}static get NAME(){return wi}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Wt(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!ue.trigger(this._element,ki,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))ue.on(t,"mouseover",zt);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Ii),this._element.classList.add(Ii),ue.trigger(this._element,Li,t)}}hide(){if(Wt(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!ue.trigger(this._element,Oi,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))ue.off(t,"mouseover",zt);this._popper&&this._popper.destroy(),this._menu.classList.remove(Ii),this._element.classList.remove(Ii),this._element.setAttribute("aria-expanded","false"),be.removeDataAttribute(this._menu,"popper"),ue.trigger(this._element,xi,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!Mt(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${wi.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===e)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:Mt(this._config.reference)?t=Ht(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const i=this._getPopperConfig();this._popper=Dt(t,this._menu,i)}_isShown(){return this._menu.classList.contains(Ii)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Fi;if(t.classList.contains("dropstart"))return zi;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?Hi:Mi:e?Wi:Bi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(be.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=ke.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>Bt(t)));i.length&&Ut(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Vi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=ke.find(Pi);for(const i of e){const e=Vi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ci,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ni)?this:ke.prev(this,Ni)[0]||ke.next(this,Ni)[0]||ke.findOne(Ni,t.delegateTarget.parentNode),o=Vi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}ue.on(document,$i,Ni,Vi.dataApiKeydownHandler),ue.on(document,$i,ji,Vi.dataApiKeydownHandler),ue.on(document,Di,Vi.clearMenus),ue.on(document,Si,Vi.clearMenus),ue.on(document,Di,Ni,(function(t){t.preventDefault(),Vi.getOrCreateInstance(this).toggle()})),Kt(Vi);const Yi=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Ki=".sticky-top",Qi="padding-right",Xi="margin-right";class Ui{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Qi,(e=>e+t)),this._setElementAttributes(Yi,Qi,(e=>e+t)),this._setElementAttributes(Ki,Xi,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Qi),this._resetElementAttributes(Yi,Qi),this._resetElementAttributes(Ki,Xi)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&be.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=be.getDataAttribute(t,e);null!==i?(be.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(Mt(t))e(t);else for(const i of ke.find(t,this._element))e(i)}}const Gi="backdrop",Ji="show",Zi=`mousedown.bs.${Gi}`,tn={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},en={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class nn extends ve{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return tn}static get DefaultType(){return en}static get NAME(){return Gi}show(t){if(!this._config.isVisible)return void Qt(t);this._append();const e=this._getElement();this._config.isAnimated&&qt(e),e.classList.add(Ji),this._emulateAnimation((()=>{Qt(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ji),this._emulateAnimation((()=>{this.dispose(),Qt(t)}))):Qt(t)}dispose(){this._isAppended&&(ue.off(this._element,Zi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=Ht(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),ue.on(t,Zi,(()=>{Qt(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){Xt(t,this._getElement(),this._config.isAnimated)}}const sn=".bs.focustrap",on=`focusin${sn}`,rn=`keydown.tab${sn}`,an="backward",ln={autofocus:!0,trapElement:null},cn={autofocus:"boolean",trapElement:"element"};class hn extends ve{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return ln}static get DefaultType(){return cn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),ue.off(document,sn),ue.on(document,on,(t=>this._handleFocusin(t))),ue.on(document,rn,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,ue.off(document,sn))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=ke.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===an?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?an:"forward")}}const dn=".bs.modal",un=`hide${dn}`,fn=`hidePrevented${dn}`,pn=`hidden${dn}`,gn=`show${dn}`,mn=`shown${dn}`,_n=`resize${dn}`,bn=`click.dismiss${dn}`,vn=`mousedown.dismiss${dn}`,yn=`keydown.dismiss${dn}`,wn=`click${dn}.data-api`,An="modal-open",En="show",Cn="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},On={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class xn extends ye{constructor(t,e){super(t,e),this._dialog=ke.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new Ui,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return On}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||ue.trigger(this._element,gn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(An),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(ue.trigger(this._element,un).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(En),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){for(const t of[window,this._dialog])ue.off(t,dn);this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new nn({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new hn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=ke.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),qt(this._element),this._element.classList.add(En),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,ue.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){ue.on(this._element,yn,(t=>{if("Escape"===t.key)return this._config.keyboard?(t.preventDefault(),void this.hide()):void this._triggerBackdropTransition()})),ue.on(window,_n,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),ue.on(this._element,vn,(t=>{ue.one(this._element,bn,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(An),this._resetAdjustments(),this._scrollBar.reset(),ue.trigger(this._element,pn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(ue.trigger(this._element,fn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(Cn)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(Cn),this._queueCallback((()=>{this._element.classList.remove(Cn),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=Yt()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=Yt()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=xn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}ue.on(document,wn,'[data-bs-toggle="modal"]',(function(t){const e=Pt(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),ue.one(e,gn,(t=>{t.defaultPrevented||ue.one(e,pn,(()=>{Bt(this)&&this.focus()}))}));const i=ke.findOne(".modal.show");i&&xn.getInstance(i).hide(),xn.getOrCreateInstance(e).toggle(this)})),we(xn),Kt(xn);const kn=".bs.offcanvas",Ln=".data-api",Dn=`load${kn}${Ln}`,$n="show",Sn="showing",In="hiding",Nn=".offcanvas.show",Pn=`show${kn}`,jn=`shown${kn}`,Mn=`hide${kn}`,Hn=`hidePrevented${kn}`,Bn=`hidden${kn}`,Wn=`resize${kn}`,Fn=`click${kn}${Ln}`,zn=`keydown.dismiss${kn}`,qn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Vn extends ye{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return qn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||ue.trigger(this._element,Pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new Ui).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Sn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add($n),this._element.classList.remove(Sn),ue.trigger(this._element,jn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(ue.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(In),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove($n,In),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new Ui).reset(),ue.trigger(this._element,Bn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new nn({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():ue.trigger(this._element,Hn)}:null})}_initializeFocusTrap(){return new hn({trapElement:this._element})}_addEventListeners(){ue.on(this._element,zn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():ue.trigger(this._element,Hn))}))}static jQueryInterface(t){return this.each((function(){const e=Vn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}ue.on(document,Fn,'[data-bs-toggle="offcanvas"]',(function(t){const e=Pt(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this))return;ue.one(e,Bn,(()=>{Bt(this)&&this.focus()}));const i=ke.findOne(Nn);i&&i!==e&&Vn.getInstance(i).hide(),Vn.getOrCreateInstance(e).toggle(this)})),ue.on(window,Dn,(()=>{for(const t of ke.find(Nn))Vn.getOrCreateInstance(t).show()})),ue.on(window,Wn,(()=>{for(const t of ke.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Vn.getOrCreateInstance(t).hide()})),we(Vn),Kt(Vn);const Yn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Kn=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Qn=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Yn.has(i)||Boolean(Kn.test(t.nodeValue)||Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Un={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Gn={allowList:Un,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"

  • 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 beI}57?ti7Ly<=xg6vYF1HMyL-Pu~0w&79?9 literal 0 HcmV?d00001 diff --git a/_images/service_stats.png b/_images/service_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce72428634e1da53091275d102def239b3f7a59 GIT binary patch literal 26817 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�_G;qyt_Pzz3pj+|%?|TtZZ0Im6aPn=$;vw5 z@kcfbt{F*@AbvLmN`Cvhl@Tav%0WvydgYItJ}Syp@&B{yCwl^Q9UTsie~ar;9-i0K L&_R@_Sw;L0pfa*j literal 0 HcmV?d00001 diff --git a/_images/user_actor.png b/_images/user_actor.png new file mode 100644 index 0000000000000000000000000000000000000000..220270aafb393899bdee784e107ebbad4d78b4b7 GIT binary patch literal 72168 zcmXtg1ymeM*DdZ4+#$HTy9a{1y9al7cMI;p!{F``JZOO67F;H{`|I5Ae`_%d>*=mj zb?V68yCz0ONd^^(5D5YT0#)|2lo|vCWDM{!Lx2PR0&PU~0(^sXQbuuv^AkT+FchOz@;l3d8J5T#cyMhr7EYJJ6Q z%tYh{C@5?Yuur3ley^hVcI(>TE2v$__1W2YixRI8(JIWvbs6uruLBTA0UFP2R zM9mGD$S;dDQv;yWK)3lBa3v;fq3#Nk1<`Td8HXy6-KG?KJ5)$_azx@ zRFOCWV+Rk^OO9DJ)jTLRH}WzOt$g`1%t|fC@b`42lgH4irUG9@UiW~-E^mdy3(}>-k+1fYk zNC$Je2$DE*L%jL93dh0b`X`ES{ml*m6ukY-_LFacD1-gYlK8C&Hu_mb$s$v0Jmr?A z2zVu;u>^}1UW06;58`D~+=TeAuSvgnpMRyi4xV>_w9M|BKoI=5K1TFg8M?94F#P6vS~@&}SJ-CRL#rcE)qQzptY z4|iRDp5{}IL(x(%&yuE-+uMl>=|~i*Bb$v2?~lmWI=MV{jMfeg^obZmLpOARnoPyE znv<0_GgcvjZSa15`GMIPJIf{J=n1V$7G)@Erf6tSg*KK1eqf$Hg-YzjqwnW}DL<*g znI>m16BQB!Kx#jTiSAFm&ig+2JqN}MAE0~o-ncvVT|h~)N`M0gY0UN$W8nE) zgwJ2a+yFa{^ns%|lOesW%Cz=4WGOwr_tFWbevyP=DySP6PbO*ZY%$!cEcJQ(fPmAj zpBidiVI#Dwb|5wJ12?_PRy-V6A4EGV=}|I0^h&B_^2yoR=@vB#%&MmXQV!?LOtz?~ z0Cs3E7f8Fob|=O3i7_=B;cRNGtXatTkdW!O2a3g^@bheqmRP!Uu1oJflQS)dJIKZl zP+prp6`P_w+ik&(y4ZoCs{0%u4FfObhVF2Fj-4%Ih9W}lYSdLI^(h*_Y2BRBF%lo{ zs^okOg9ZD0GQGJq9}&oiQJ`TPG@VRA%Wj`=sousoJ-G7k9kX2O zDA6bib|s#SLCv4h6+HD5fgkk|^UBcCrQu?SEJE)vNaXD~R(yFY&t-cq!Ivbl6W1L7 zZo6O&St$pr%WyJtmt63ZsjoHsJ0Mh@NWL$8&iDtS~sOSN$=p$mJsq^fi zNL-H#me*DQZ=~tP$HM~T$e*v-O#klNpc8M{<$2juRcqhXByyFKRPV6H^Yr}8|Fkl* zedzU4;4L)0yo{f?>wE$>8tn^s80kDW=6V?EG<~ zW5dBKk7k{CoNaZFE=SR#sWR+^vk8Bj%$wv}7_iPShV`egti?gDv1NrXS$0Z36Va>;0)o0$&dcZv{XS z&ev1CZqxjS7pvMmu^$aR2~wMyx_3#=O>AvrlL9ZoApDOcKkhIy6D*p+ZT@KiEwSZz zq**>fZGiMbq)F`De;@j~;T_bMTmNWONq_@s!M07zeU%WM0Rosi6io2HDam*4C#d^Y zAm@6dzd3#}o!@>dAR0845{bp!Z2ztGxN|mkcxzmFXc}YR`o~^970%`YvC)|TsrTg@~+(S2Q3ZKt;O z_82bFJIfD(n z?hQJ$!84Tbc267r_#WNG+L86K@KH|sg9!dMA4K#pZ1qo@Adn3Ua^x|xQJg(o9*tI} z(^mdk*n*|_ciT^R4J+gyf7)-fW4L+4P|nG)WJ3S>WZg|X--uqb(;X23t9Hq^?VJ@e zwc5Dy+x5PkabmeZz1@}vBU|D5byb+P{STDLcO zN91R!fv&Ar$4#Fn8?YJO*$&j=gZJq0qJ8lRx5oS|_!QaDq7p{!$&8UB9YQdkovWHT z+V)f1C4!7V3%VS6MkX6v@i*+Hyeo;tBI-U85;3lmtkwhqH1mi7oqzz~YZ+SgX=DU( zI5K*Anxox^bGFikVsj`2B1sR13Il=~X1IfY{1R5q%?;aYOWD$g;8-A98hVh;T^@Px zTaYc%d?O+%%CA1tuVY7aDGlsT73B@jPxU3Lf4`)uxCa;Z9HR6?plt&Gp6__Y`Z$Pznf=*h$V|lRD@Y@G81rs1G4~TLvVb>OHYh?1bXYB_>2Ye| zu*`EX7HwqDBPLg^^8HnpsKWj4E;63+oI8`(rZ1atE! zwWt5oV8TX^(bUqFAJv@B{{wE@3g(*_Rr{XTgFjVXEl#Yfr68f-00eoz+~P zN{jvJ*&}(A&3ia==UYIit-mCeHR2jnF={w%_@~j6J@2x^kX$*I}7Y5 zA!b%$cufY|h|Y}d-Ol!vY7v||dL4S715*K$*90g3FlPN$=gVQdrglHx_v;!b=a(4T ztD1BFD7P8m%tK+YuECS>J8UpUOugHo64S&E*!Yb@hQt*C&;Kg*G-<2DjW!AxvuO9_ zVfPo)kX*;k7{=Q6P}YFI=Ien=hTU(*@9FX^9pOMaVaJHWK#Ph=OqktL+uVA-YvXse zjg?FkZoLk$n9FL&a-7+7L5$JBEUEiQX<^=sv~3}qdYscj-AFJw%kCiS%~2r5QCX98 zi5Op;h^m_r5zmTQko}sw7R|TMacdtrw@#eCPi-3mQx@UV81x`~AMjcgtYmbQn`L6+ zNr{ytn72|PgtMk^fp1bLCWiS8F&>9(an_zcR2QW9R?rn4AHS0(k6-@t*Byzy;PE5M zq$5SE4QIga?uWp^sNnR%H<&cD>!yOi2J0Tjjq@qz&-Y3vp@Mzz6Z**8ozV(%hxdMs zj#6egO?5Mc3@4pq_HYVVc8cT-Wp)Hl&jDvlUXHwLNg|O>LCerFwd-a9dWS9|k6 z^qu$ID9^YaWLsbLy+8LE1U~MsUxAIUuhfiDA6g$J!Uq+xtqA=YRDR*eqAAL2uTiP46sdLI?Pcou@q0BG2}6Wtf6( zPP}oSktK+zY?AAPk#@o3X=nF^nv!$kY5> zcM*JiJ}YXs{%{|7%D8?z9LGk90cT}JAh@Sul_Z#0RI~QcIVe~LO+2hGNaf!G>=(YK z?VLSVR;bgF*Tb7lirn%=wmMjQFTLG(mC1=1(7jxWyj^t6T$CpH|5Y}+?sE#j3NYUl zdJ}!yy35gtHAfj?i;`Zov+I52{)9lrVdHF2ZKIs-!pOXc5D~zQYvzMUNqk2y>t#x6 zXS-@_pD|H<;t|x4haRnfq>#&M=tEuSw*hY7jwIr{`xDj-233vgQE8DApP^%a8>g1y ziRvlC;#3``DAu{ql&Z3YO_?%NR&HA}A5$PKhW>6loGD9QdN)aLrne`_VC4IxL+iNcxJGSH1f^ zkT60>i%-J-+KNZy)tg6jH@x6yD=TF^)mun%@2S>~XlKTrljBINR6RT#{%UK!!;GKE zZc@PdpcS6E?~~In zSEHLBy26z5$FN&APN-(Ew5a^6z1KnrQiVrh`fxmErivw{{Y}@3qw`Z+6q!X&;<&{N zeRV>lBh}IIaVcSq*^d}hlF+e3wqocpvmZ;YlIasBIp1R|aH7CFOw5?J9Y-29tG+CK zak2}xzrKS#Y3(e&VPnT~*)0@c!UW^Q)E_@sHv+HLrLTP**%2R&ri3#CV+2Ltb&KaY zCyAf2ffliuRIbyBoGeC$9~7erSe_VR7Z_}#OGm%ry*{7qbJYN}lF3GK_q60hsM2VB zD(?nkB?hB-X&H|~aty{G+Lj#0so9MR8xL3s@^>4-%uk4;+GR|svXh@bMz(br_auHU z^FM9_X-RSutu`Jt;-X7T>{YsIm0^OkZkN3I6fMj&Q*|e%%820`I(Mq}RchlDDm?6x zwYtSKCh&`rX%L)DO?whuNi<4kb+wUrdw6_c5~W}9|9DlV#g6%JR>WJfR8@8Ktf-iH57E^#h9+)^x@*_Sg3Xpqth5T07OcUugwb;_QuZ1;pxTR(+S#)%F>M3n--Kq@O(2 zjc>tT*Gg~Z7EahEhX$gAoBiaHpj>se*w|giAh3(Fa2J<#4t3KdO6P;Gu!dfU?|yT6 zGojmZM@zYb{^sOGKs6eT5`MJnYSJi+A3JQIt$5hFo;E!}9Ibz^Oj5#|UcaxUc-#G` z8pFzQJ4EYxl)D*=qg#lL@uyBw3^NIHJ!m+n=`i+Px-+yAz@w%!d-6h#kKwo4@hEP) z^mU#tZ-=bP>1i?l&4;w-i7w`J!A3Zb<6rC)$g>@x#fR{7i)tiTsmh}dZvtp$mb!%} zO9%rVE<4EKJPwx_@m<~F1SChlRln^bje9iD8Bros#Ee@N)qQmHZWqSW*J5lx#=iTl zU`Gfd#X4bOF-c4?ml~j}l*x}>u*_EzK%bwNE)&~p#FsFOPiPsf9CyVaOl&pjW*$(N zRhS4*nY|OTZRi9UYRu9_nzpK0s_V>V895~c58HgZf~`KLpL8zVWQAqO9VRB&9`VYb zh#XA%^QXz^o$b}bFKS)b%WagFwKPM4<2h}Y?`F#SUavF=0fwp})BJMvqw5mTD3c^K zUba^>?S5i?j61=((_(tPp`A3mB_WJ}QY!jo#CwX4R3?+Gr**i{=rLUHFwZL>O_@5I zFR$-bTf)hyfrsbL-B6is}DV z!lU3S53f6|=U3Mq<}LPuq3K^PdlMzJkOmtYN>mNQzYvmH%6kHEX^g{)grzBI*)Nu& z7Vn5O6a@tp#fr63Xrz5UI@sAtdWN5+8A}dRCp;)=8sSlqUo1Flp6N8e*~ysmXyiEw z(|O?9_b#V^Gg;z?lO-XFplcbV>@}y|MCG7RX`YFH9`I`PuwxW=^IcjD(~lmr?}@ta zeUjFtO4GCZ0oybGt`Yd3SIAe)L9WWJppS{We;B@G$on36Fhr;`P%sm<=?&K`um$^? z!CJ0FTdC`RP{Pu!qb&Q4GniPC-r>O6Y>B*J0RW_N?kY%(b4wH-)n{rwiKC?vZ|~dg z=j~6Pn+@;bNRXW}OwrvjJ_Q}UQ%c&6CD_!|UEvI5euD9RNaPndIloSm zGnJy~9T3p1+6ExQ&oI;mX~}ft&O32g>gswa$VE$xmZdh|^c;!OLam^6YaZ8CzkvxB z*Nq}AkFk6kg88|^F^=c8A}wvI25KM)**Bjw!3f1}v`M}d^G5`QyqU;7dV9k5#`i2+#KUY8Et~+hvOA-KF z9dEmqH6Z1|V~MTXE(lHZ-tZmWu}p@!^aghNohi-tA?oHu_^jgt`b{vijK64X;#P9?{jk zz)QYu`n8|MtH(I3PIC6T>WZNQ`1%0f#X=pq0H^$pb{|#XYmzVXv{6F;SMTtK!!B(g z>}R?>@E^j8%tAo=#tZgc_>9ZDl#>Q==@&kC0|U{f0O|qsHbZa7p8&={8?-YY)W)*` z2?g^o@!!Nsi_8R8Mf9y4iYg_^2{Ftdne~gvre*gRPX3z& zr?VD1V2s}Af4#TkfbFXl7)ZHa<_*l09pK1Yh)ek{4D+KxF=5j}RZGP%20G|srWB9!sngy;Ez35D6K+Zen@c`gbO-Jch|3DV{DEc3P8Q^&s-?L+{uT> zwXN|T8qf3xc9447qa39oj&qEoP{HKH7_a49$Z8EZ$C=A}7UE^b-t$y>(iuF#Lh=0@ z0#i&MMu*>->3v(@a6{pX{r_fiF#4EQ1Tl@m@7bXTx2yuN*lDP4D}Yo`*^gkhvhshn zL}93p3L#eLkq3Zl{{L0|2~K{DCGet=Q!{);|M%dL{=ZB`M-Y`;Z{~ zVB@mZ&H=2=`?vp_7%ZN`3#L+Z4Xi5QUe>@9>%?4U9C7QqB1=RsivI5+N;Cb|;56*} zzsD_f!a%MLf(>+g^UD^xy8I#40ZhgZ_T~V1#~L~2l%xN7@4U@>=%B|3+r0a%{ z2%x@tN4H-W&otb2&|;7hp8U@VVN5@u6^9@F-yI;m0=KX6Glt)+|Noj{h@I7Tt%^p$ z!>h_Y1{OZPk|Z^M7MA?==UiMxw)$)Dt|!{#p$UvlFvK&G3ZsdE{|J#HY2;z%igL@F?(OP|o z6-$&o&yQBbVK~)+{hxS&v11}TzG&-;L2&yI6di)+7Vn%!EC2Vlfxlq$Yfj~%MoD7d zyFRFkhx_~_o9uX!o2-CHGQhD#G9!m6N9Ax=U0^R&@=w1N*zN5=P$f74=4M4 zk5F?ieBK{(g$R;|3dL*!6JL7n>)$7g{x3d2XJt$s{fPRbWv7#Z;1zI*Y|pnd7BC(Q zMA2pSt%Q&^Cu@CH&S%~CT^LfiI;^!Sml^Kh%%{xJ> zf``)oEg$IsN<=o_3&Pt&!bFz9K}-*B1ucS_$wvsctv)1b7$D#RF%FZgzXS=`EI3H! zS$?CB>huwq67Q*M@A}UxO_6Cec7~>46)_R=@nMP!K*Y{JiC9cc@ne5#bsU zn2xl#m<|PJ2d&^v+OT=+9L2H z&NH9YtH)S$y)7BOPtDtx^qMrIN@*)6XtF$B~PSg~m6`Po+B zroy&bUPCcVL!F214+u%|ji>yyxBs@;oufw8%boehqHb)Nj?iOT(FkbP7pk*yj)OmB zbB!s9VQHAUEH=X*kxEK`Rh;>fWYyTy{(mii>X>PKQrK@=`-RTMcu`}^id@vmAL0SAJSf<3u9k>?y9d*<#47uk<7lSggVpqAx&YUOI(g|*Se((p zba3?Lxkn8t<+Dj*qDdrW{%yt%Z+C@r8PI29AbBh*K&MQbB*uTq*0U(fQAC-5sw#=p zEJ3Rc6_4qMB(@4QKhL-xz=$eodb z`h=5i>HCGBRuGVMhGEYh_C{AcMi`fGZg$r=V29leAC8HPlW>r(_mYA@|DtET_HO23 ze%Qj&==8kt$PpwwB-xHj{10(}D8BP()R4kK0vKX19^{ZFHsvqRXj{U=J3=GNdUz?cr0-(K&x zqIv>E9rmkFlUU7Al1zMskQ~zC5ha2qJtd>1 zsQ7PCw1%s&I1{sJLgEu5MeZj#fV^J%M1{F*L;;t#agVjyIwgbd>H+)o6aZ6144*CA zwB26eGSsy>b%nY_nd3o5hWIg~whygM%W_w}aPeQnT&_y#+4cO_D*(;8tj+z%XPHYf zn6ndx#i7W=9S`E669%mblHV(ZBW#M3DGk$s^e&m1^*qlwg$3jq zxK62h&Npe{ndb6IUN5ERM!io|sbD6EY+3VV+{pW8fcphm{yo+$R50VOl^vCLzII#Y zj{Ya1L^vrfe zYfw3bg9X{Q!{inX!M4BIyLz##T{dOl0FYy!W0{B-a1oG(N=xl|>55pnx=!v3ZnBQ< z2r=`#K1nAtyr({zY<03`;aeAeKgh~02KQ+)Cp5iHfL#7iXjxG>M` zuD#;^zj$Sfp8>08w#>ta#*q7C^~kFyT0@S}afW`?P;ZEs^p>855LJq%h8g+%EdxA$ zF+$_2OOi%%->&;lj1bR1&#zmhhnk{j?sPS=$1-U;V-M4XMVA4{GwcgtOB;35lCwy? z(7ea`n~a%QY$-13zG&8wyXle$-3Po075zNEJDdQR?lBwJYjkozWl{TN&Zo9Bgtvr| z_L-U-`wDh-ql|iT*+d(qEVz2t&y+S%#_I_#qUMI5K}yS#d=kJJ=LqJNoy4Wh^-GnQSQH ze1twQ0^FE<=bj zKohZ32pDP{xY1Qqsw)aRAKsfdon8%UGpO9^!?m+GQiPl$a#i_~=+Xhv{K-IjdcDBo zhq)JhB0t|=n;fu6Q|F0l`|E=u_EG{7kXfX2>Iso((N1Si1@fPq z4Wp$6?=_LK<>rn+#|WRHbYAxrrKF{^1O)0SfPRGS^AhZ!*l*ij56vp^9<=Rb5$<_` zVJ#4No%kQ7G*mh>1+bA8JPG`}s&mYCg9WD#f75r#uKDA81LMEYCjOZ|om~;${NqAV zG;iECj^LGG3 zp8&)erYKKDu(1m`lOd4tI#H8D<5vQ0xeS>Qutm;-XylwW&cs2T!t+4@U)A{kB7MQi-iD1D_!k4DkVunmW?*AHGry3{_VVT~d#{ zN*X$Q;zUEyiDvEuX{7&~GQkd)N8q5CcF5Dkst+*~_tC_p$?YE^g8 zYzejH`oZO|h1kplJ=jlt-F`GDU_J>J_`2U%i;LHoZ_Cs~kOsCzHcLPW{{_R|HG98N zB~7APQ&f7PFAc0TdKRU5`xM+a^odU2z(QKY3N>D`6*U+=}0h7Oda#hVm} zWzAJ3qN}oa>6j@x!^A{jI&U!xHIpnI^MYm-a%Ze69YCXXN%yFM*;KcM7mQO`>R7aW zSpvRU5;3+H!;KSY{Z%%Z-yz(oGu_q7)>liX%uO_=F=s44`+c`O6>N)P!GP#FR`^zh zJw0F`$WsK;OxyjISFY^&MOVKplr>cr7imm-u&vyd8=ZwK-&4iVf|D#gG1J>n;}SOC z;lM?8yK{Al#-I?TQR8=w-~dK^uSlL51|_ycw%*6HYpRsqecmA+C#xq}<^S4aApw)% z?@MbL;Y7wmN9XtX3d1LIjK9FLjLg{XAbV|$yN)kss$3CuSsr)rIda9baiyF4^81uK!jF(d zz_v$1cfXtaT1Iw4w;W*k+`3wX3`t=c*y@lUx+83m-8y>*z-x6H$@^CVcEbs*U-0z# z;z0{4N>~Om)~Y^tl+=zwwdx*APy98oIX#Q9yJBTf`1lRtC~MNV*CvFW6IHyCDGEnv zI(3@!dc03hY!cgdUf*&QHF_d#f3IakFyXkw!cMB-&;E)E4k)0S>+6CQBrNO8-G&B$ zhu|-~(RN(**4FGoHZ>rP-;S8d7}>7GQf3}KGkyEzmt~!;Y2Dny^9{I2K88~c*(4LC zv;DGVh(2kRwp{2d@t&4G>r7^r1e82S+U4?b0?wqD6@{@66bE}6QPE#?$>y5^Ib2BA zhZsDyx!XTin@Pj7!AGgwb~-N8!bsbX;SmLE>7D&{e{My45Ii3J z&dIs>nrpco{{b5)D3Xk<^gq^cT8v~Yn%>mw(*(W?HO+2`e#f!D)qLm4Wu_M0)XHnr znDgNQ5)_G&zv?}eUKp5Sj-Eol?Q%_YedRGv!`84NTgPYs{~~o{RiGh@^?@lP)4h5~ zoyltp=z%Lg_?s9Kp&A;0Q#aHsDQb#Ffi4j}k)MY(+zndM7S9fo!chbxYI76w%^T+ta*Lro#J5o zA(n1Ouj?nz$%(NbIGP1+?nX$?uJlfko8MO;vj9O z#rFOXcJx=ZhVprRxa2#C7G>4|ng)r$0HUM?oMY*46v2n>qQF-T*;B z10)Hw#!GJpZ4m3e;2QkMAMmW*$-Bm`NYK#G|2TP#D$QwuS1yseh`7hWd@nP6xLervprbIIu&{qREQmaxgY18LzSP3k_!wxkeivdT z{(bDt#|&QZfPk`rbm_cK1GyA{PYZzj`02}jF6c8I@(BbB@16IQGVCwn9X#ll9yS8H zFO8Z=cA<6GTxvF2fyG=*sCl;Ja+9S0t zalcJp9%cSV3z55qB*=@P_t!0-YhCL{bu~9#pl_FAiEA-c(??PZWn_yI*n*cMPesi4 z{VV&f*}^dHqS}(v$1PVBjFI?_!Lo;?%<+>5f6R8wR2I^JE_8wWr+9KP%ycsFB;Y87{{t8bRnC8bhDQZQAF&ScUFl(D(&&t+iwCt9<+Yrk~GUQ{mKh z6!C!IOps`iN_4*9tx54|6Q}*1H-|=L_-tL+JkWH}0O~Pl*zJ1d>^9Eq?i%q$ruy32 zPLLYhghWQ{X@6@MTb*IZ=FQ3ij#N`o1tQP=WxvPUSr;2qT#8oL?mzg`T}pZseK_=t zbI*nLrx}LsDbhEFh^)1+osOcOmv!PxYVfa=ei4d7dtL1w|^C6+^g4BA@sK z1jZ{wUu`5}a9AGJ4_BP}UUl^JpiBn1>UkWkp6^bD&V6Rg-QCmn%cuvo(dU_Ag*i*k zd)&`^I^|ZHaP1;Qa|%wRdWoUHt_`c|s3OEBxK z_hVPpd=(QefOZ^QsL-a`Oc@*1v?z~)jAX3ld*kVKS?uQUb1&L1bg~BX@*LrvD)fJB zgeRNita~gO`k$y5QjjJ!xwwa0&6DT_8sjx-rcpqx z?(d)q;8Y-udTT58LGr&LI{K|Z_-XXokfjq4E3Jw%2huMolmgbQTndbP#UlJs5P<$H zB5kgTepg#05PW_8kt)@kVs$d^Qu=}0Gv*Sn{?w5nBDYsxKA zD6h9yMC4^Q$#uhH=@Q6T1wrrkK^3f-+nRL&BoIykVEvA>PVhs}G=CIurIO#{gy2A3 z%j?J15`xpV(ZvynE(-RzkF z7UP#4yvL36z)@u53n*gp_NSAomBunjgvMmrW|vga8m|1E1y(_lO6cuSE@Xow+H4-uET|&|Jbi!n@h_erK{h zxU^!yG9-@P8+OYtlUU1-bMrSS5ed03v}=~aBvabvzwB*!Q%yZbLV1XyU10~g*qV20zC>;*u1%w&#+;_ksZMGn?9E~N1S@Ic}_*bYbw0mSkamWP^?+uIs$+`|^Z z2_ks9J>YP|;)tT2skWZ0pOtlU-Bf8xVw~^>B57QNPyB3y(x5~cI>841Y;xzaB9&GH zO$B;oX%J64`e`TXR&tR&oFqa%6u6}tvkD)Y9R*w39zA918?j8PI5KEf%t|e*#Jtxg z#4Bj~dhe_!Dq&PKjCsa)TEtfN?`DEKNo40s>AzU=MFqs|{l&CEL1q5x|ln7ovh~{6$wq|(%6lJ8}gB=b& zC7bJDnU5oLz9PWsywYB}4fTH9nCVL>J~4oW9{e$>A{is2C=8R{kU>Y7WdIS~VT3c_ z#-N~K5)%K0bi32_ns+2zu@}PxN|AInh!y)IazRo{1`eCFulR=QM^X$OEX-P^UvLtqe1D0c4Id+r#1y3rqD(`}kqA>#dTP z9nY;nOtvmb^-L*yiE7PyRAj)jW>d`P+7riy0zXiB-*EwOI_9ZlOb^G+9YvGHJbVBE zs>~6L%8bV-NwoEiPwzHyG|FQ6_hwkIR#2pkMH^@P@ktkZn&&>Sb#kTrQa=`gbTQnh zHAla@pqsNXYc&&pCYDXh+zE$=C)jlAgYV<}XCBJnuODDsjh@7@8tsuzomxxr=32Z6 zp#w4CnJpW%Ag%f5o(yr#wjCZ}5>xRc`WB&{+_YUXHAII6Z%bE0K#O?C^Nxbx6{y4* z-~_U30j;I_9qJ>8=;+#bMWmM%J4P-o$b$k-)eIQ-xI4zFEgFveXmpuEEh+3Yt1l7r z(HO%w=Pk3xTnPwKPX%l>MFCJHWyTy0^=VzIF?kdvLUk(gEEL>~P{l~1o2ult(JZ1# z5ANB;0%Y=~=)Ty@&lIvlcri*dY)@H|zW-S6B)w=o#Ws|RvUu%`#X=oq{`@vkp3Pe8 z2!c04Xvj9_daw3s{mqEywafm1trLUDpz%P|1X+z|prnsPH z3kKNMedK6L>gg-rP^<}g{6R`R0_52Ol9t0(26YVcHT zcoy`fPFlEorf(qj>u1E+3xxC7a;zMFE^h1&*RSFDwcmvTXfY(COjnj?=^Xtr{QSdM zyKJUB0K~}s1&9Ln371?^QERl00PxDq@mKxoOwHeL%|3hTTiO8eZD~;XSN!ezGpmyj zz`(@BYA3uodozb4!h8Wy;EW!)O-oCQ?TNwxmYKsw);(7Oj6%DWoTH?3eat%w(n_e^= zMdkub!@-=YT!k}X`E<7pJwroh@o0+gIul1jC_CF9d7Sk9uZ{$>3tcf*gLoE^EeF9E zljP?|zdIfA8XN2mJp2RJTmbq7AMQZMF3*~!Vwbfc zij$7Kd5#ywq9K|f?ifB|p{%K=8})8; zZ-aSl!cthU7>8)~BNcF95W#6J1oNwkLRa&h_*We(6B@E;0Aj%%vr7E|{oz8BpE8^U zj)>?S6s>d=d-SE^NWsEgIE?#@03mJaTj^E)w-d9vpdM*i^;FHGXO}Yt$4M` z&gQbJa!TGlo-YMy=C}L~Wyth+|8_Qh7{M=5prIWuR$cog^umf3$QFW?Rnh~%G1n8c z&lPH&Y!0PZnHmcqB}GHzlTMc6&dray9Zf2aj9>HP(=)cLhPHNed;)vp``dpK5*g-LH^2U7gy(gpI308Iz$L|^ z;3BaINs@7DhHpkJxb1$8Sstjx$uN#{xBEUdg2lwJ6;l(qImn} zS_7)87N+k$MLIuID7BEll45KHD05-$^?5%;y<76f^(VyO?B>MX>ZuK*xT5&Pwx2yI z3h1%J-R z3jLlK*3|h|`$ggp3oF2l>BF6=5xaT+-a6*a{`DH&ovk2u{Kw4;WXBPLL2}VDsP!QY zih-JL`5O4dfd73iz}ZeQP4wbn+gg^_u%Jds$oQc@5U90OBf4j9%ZM(Irabz3tLaJDCX>8gqo(*ny`T3$*3FA} zUBfJY#~tq=pk`9DB#{Z*-LwGSF7>v%A%&Yap-#9nE$17Y@UY_)4ajJzr$C4uy>v)7 z)_i8ty}+1${Q;`T5!QID1camDB>H^;XG5x?iaR=*^^11Fy&(ObIMU>o=2H?Ye8I8W0<}ahuq0Fv)04Y01E3X@P?Gz7U{PTww`ee>Mm{BA|||= z%EQfWE?_!Dy_%QpyTyg;~}_PB1Ya(zy)CL8HE8_#2n0)>TB zVsxd}Y;>@6Qb6VuhyH&weRW(_-ShROyXzv-m+tNk>6Dc2?ryGhd+8LA20^-!ZUsRa zq@<*~;XTjy_j&)lx%ZqoGi%nG*@sK4r;$%xs;0JO#fPP-gYclqr#_N~5%^QzrsvnC zz*#%x+J7o%@#jAWa!qZRc}i7&FhQupQ!u5??2zM^Hj3+2R~CnL*gIF&d<1k_Iy;c7 zR@-u2#@?}|ls6|57Se3uCDh1Yj_p-_f_O6mWxBm#@sgFxRRSt$) zGcwP9wA~IT8nxdp1%|G-l9o!A_MeI+;dNqHOeNk)T5|GNDkX41x)IBmB~|YCgt03i z=f?91=PPk&de-GIY%r3iG2^jNkIQ>aDkkoY#}s8c#%p>j)yNuq4J*JcubXl$8Z-d88zNxno=MtN>A@p62}?|wWPQl)%cr&h-=ZEL!w!!GYk)GBIX z*Vypip85P@AbPzJ8hiRO5t=k#n%Nh!iwOONdT9FU@Umq!pK>Rr`m+@1d)~T;l+oHU zE~$K)DqV6+A$k!8%ZBMrdT0qSiMjvLI>OIX%e@Wo_S2N6+6Vet*kL63C|-K@;4M?xzwuZp1Ls; z7%1fLU6E{J(=Hq%zfFa=x`VnVI-`?M%pc2J0>I z?M5N#IVN}GpO<<^YZo8Sc)B!!WMz(OkrOijQi0({Q*Tj$Fr;Ol*-LB)(r`KPFJA+& zD{3U?d2ttzz7YO)_jA*p8?(=suAak9lBelJGjc2E%`r0*1u5f0A8V?NdKa9w?nqw2F1BQPFBjh>yXT;+iW+*il3F^9 zRpZXH?_`SPkU{5TsTwy&c)rg1#IJv@&epu8@yuq8uOi zqgbx8(^(6msxbCVOhARqzSW11a%+kO`Tcv!8Lm~t4>vFD36;o+M!#KvM>1g?t%@7& z!w8?0G}LW(9#MvKXpS0kG{qi7Y>wwxI?r)}fKSK8{6_^!{Y|}$Y%tkyc%+}G536sfm0|5%W|;)zIE_X4i6#+g}Fo5*cSPY%iJ2gWI32);gQhu;LnBLgkK~VXl%NrC z;8G23{1@OILP4V69{v`|?D-eVnKVACFw}=&#`HAw-S;& z_+(Gd(&+kIJ!!tNMpcm@_)<4M#d2rd|p>lM2WXFAKE|LjGh{D z&L=pEgM89h@Htd0lnjTrjY0uVUwF#A?IueOd1*|!#s^z!RO^U79lVmg?gXC>TZTTh zdj`i#a06eH+6EhbX?J9D`rk@d&rZeBLHodg7(LI*5;&YuuCEsy#lGv^pfIx6*^!?+ z$IlA&EU*aHi5OOb8D&3%KwzmRg70sS`u;h(N?E(3Ej$gsB7)jpT3<03>Ihr2}FB#&_Wa`LX;?MHK`OUpehA*Y3e8WpXJDvAU*A|%Y@ zk&0r)qc9hfPF23UxX5r`gQ*)rDfOQ{aUn??@7TLWr6hx7-NSC8L-EyLAHI+La(yL= zdc6X%Km7eZq}^>fO-P2G%T{Zu5ZhTXv*osw{Fy0N+}qGm3KnlLC?*s zIXwJe^J`rP>W}3UBTlWtUS)DFI>BEONlE9J9XIq*Y9!`wE&h6G&R12~@zwC&_Mtg3 zHb93>#ZaIB;%*KpbGmfDP0(y&zTD3`M2$@bDwh$XkE~<*&L{7{(Pn1fy1Cd_EO_lIP^!Ngun-5tGhg1DkG%if@rbyF4I)g9*A}MJk`YRaBY7>JineGkj z_pWr|g`an4$oEdPE_HA=7y0GoQGN4(4Fj(zg%0hyDhfl7Oz_*x;Dr&=bzG8?VkE>} zdHuQ;O%YblZHh!qn8xJ?*SALbD#-r0_dP0Q5WL9c6&aoaPJpvE4zFc00~HuiTC7_j zl#%th!Hag=)5KUbIlQ@HpFi(7WbaKUVb42!rww@FZ12ZIiQYAap2YB3xi70wvgJhy zUvS9ZB4gt)h@)VaA1R@MoFdzo5?!-M{&5FVzTmBEdPUAvywy>;>QzuFA>8?<9DCFW zC{YWz@`VXduDIH{zStM8r@z;f@(V^Iv>$FQg6{}v-V_=e4_>2~#8YV zP#R7L8Ok^;HX_`%y@@^F;;ex0wiGVZwapj(&9yRQ{(B=3FE~V<)_e2SLlGqW{vGPq z)R~#NZugh6xbGAkx^4Db+v(j?yZ+E0a0n(cbjaXzLrI}B?-7;={*h>u(9Lzjf2(Ht zCBXvtK;MnjW~YcQiux^u^!oDPO5Od&)wB8At=!}%q19>mg;hyOQKPOPqCb8+fn0jV zPv+uDdx@9KiciXP!N6uMIvR4`>-fb71mdir0z!>Yob6 zE~tWV16ndFxMZ|(-JaZodO|0mHSw;iol(us7>PMat!rL*E?o{&25Ywe1txG?QKBow zBa7&o1hRpa1{3oeL$P9@%Z@SOH();0!Ib!Z`*;xp3 zRP*_po8}v-Pd0F6r#D3k=!T{AREjBdq~hmXZYYZjt0PhMrp^g$(_BS}8Yx*M|!K48WJ!W^vP{CdgXMZ2lLVdEY zn;Uuh&Toys6O=8COrKbIKJluACdjuZ4m~jc@f%XNDC)U@ish2P@9`>Ps#1nNG;jM| zW#h3+2u8!oHb~YB^mvAWStqI$=jFFNHTKW28!C^n} zhI)j!q%fTdOSpb(A2Uwa#uR)ZM*@XDuQ8k_1}=PCWZwSh+73^0%%)pP45-J$VhlYW zPsML;r{9xjel?0e#Qu{2EC~$ePgG@H$c*%vnI?yF#|AX^vUYX)je_E`}-^(Et3Ck7XDXiko&NC-RXYI zvkv%eSnYn>Zg2JZ!^EHae$he_&>pK|(Bq4D(B&V#u7`i!f<6{8WXUyK!?gDqSVfXk z7K^j^2wo#*S#^rj+U3EsmQ=iylL8}zfy)+$cAk?gs6y9UYR45}Aj?dPQYQM;M6Q7z zpB{k4T@OTG@AAdUJaXLDTMztUFZw@N!Nfl@wQ)*uM?2b(kcIy=s6*Ks9;sXw+T&7V zS>F=VAS}X`6OP8<^{t#Mo=1_}poXouYa4I_={KW zC40gkFMl0JimJK)+>ImLJ?SNFeibl@!MJVNjKoaz2;ol=J3i$Nx}oX48S=pgIpty= z$3?(0LK2IOiB=Rvn!hk^kJ-7>lRA-N#(Sd~I{e}C027kh=|X@ss{Xu#u%Be~v>aGB zR8(9A;3A}fR*Gk`8m!NfBSr%sY6B!{dp6`Zr&?>+eqRf}DILDz6KUFvz$UJa*Z8|6 zvC0;Rfz=(}A+C&!;0nqf%c}lq_(!Z9MNXH~G#jgl>5IO=eEs)sO09pW%ibM~Omt1- zjiI-ep$Uvh-`;=7=^-A33-IX~x=v1Bk9ya7BGbs798ekgq3-3N(O-oF98#iK%;R?U z{duhWF5TA@LE19tg(Z2bRpL&Gu_~%);=?=pBi9B+* z_F7l2_ezqg>fI8^$ovBiET-W#yw;4BU9-)MZ>&kv-_LLvp(7h)CE}t7y>3$UTwO<> zSJ77AWeXUGAgfma!Px*vu04JWl!aviAT+#&EN6q7L7HUaeBOq!L#HV(r-W@^RcpQE_f58 z4P|r0c>M4fId!B@{#)5w{{+-3cE`}>amsS`bvrZ>=g*bI2Go;x@#Pa;>?7sj=7g_k z;_ErW!nVk5ouw1fU8R7Lu+UfSBj?W@@SMS6T2VgU#FME@(iyS5H(&^TQ9AnS!EDHz zT+1ji;B1x9DT|8qFbC#r%(qc6_}|)dNyi9MD)kx@lOn^Z=n-5&SIH+(M6~aho&tGe zv@HKsA~?>gk`I3I+59BEk9gGNkrAX@LO=i*=}qV zgWlVap8EZu2K5eS;iSzrhKK*qn4!W<&Ih^Cni!PSTf03t%5QB~8ThazKryhE>~(f-8hFg~ zSr15JHh1GPrm|DZgAe;mPfyhn&;V;}A2W>bl{2gecgDP%0l^5;tZ5?hA2Uu#X3_jd zy~7^C{)Ul*yu(rL)EdV5z_yq5tJu)y##_1*<8<-Fc@kuR%}ZNLk`4i%=*ob^>^wB+ zhu_hrWTD=wOPL4IpZIO@r~O6;@UO8W!fC*L^v?%_0<4gI_HUur`3z>uaDUEoWbSZ2 zcVp<8b_uHDt{@L6X{+GUMoa5JsHG4i`p_@XiXF8kb%qe}hQf|{sHNJdUlW|5;6=>D zhAb+l&*9vtX#Ln>g2V)}3ZU69?TEh`!G=0qQecXKT-Pqd(~cd^mrnH{GTI4=9Z$d$ zKxcZl!N?~2g*pa<-(O-SdX0ifqg>6}#j8P+y%8k-(nxr-;3!wgPlVK2oz$*kKlJt@ zd%s(|q7g-qFT2s8ToRpkd=h|GRrK3x$=5r(?nN!2J^KWxv&v7Mm=|?WK~Pz~;igcn z|9n$dWNg3vmE#e#JSXQw%HVEyp!BqP{M}c6>g;|iItOwh-hu^c+Z@+V5p$r+( zX*<8X*W?ka|E`75~pEA|Xa)34wN@>)thyOmtC+BD~H5wqUSNE&b+h_3dWsOD-8u zmw7VqKmPO-?}SJ45fQ&nT!+%IXjmbgw%vTBN;BKXuGcWgLUsYdVibD@(C)d(g)lHp zCY@nbM7~2nsrI)}(*dBR!HyXD-p`Ztz{>Z^HdXT|4SHTGscn9}0kIz|u@a zo$UlB)34=FXKGf2+GXUzZ;vy)q^+e5=hR1aCmKN8Pd0uCw)r7Z{OLle`+h_Yz#xfW zADnB}GZ|%k)29bZww??U0Ajf>tg%PMVSNl1A~D?JDEc+Z zq*crxS(W>pKptd?XL5QZ%DAFVaIdwDr}c1^rkgv3d}hnq$Ep+G zL%HD*P>9(F(gSM;#2CJRTrho6d!jUb{=pN}U>i-T1iPDQr5GuQWVRT0oBFbH7uiag z{jxM|&RDr+zmg2Dp)zH|bc)hNYWJ5RJS}W!0Wb5B{`*VIxc&9>PLyEE4cbOzZ~xIL zdV>4>tc5WY^222NnDe}#MKx}yW7N+BJ}L!tsl(L=oL={+Di$v_>-|*yIhaoTIuobY zXCR*vpcOiC6S$sEoWI9abNCTqPnss=a3w@o77xf#IX=E+9dG`l3ZV+X8 z?E6#Jkef8a0{t6*TDvO#V73Gq{qV>JLt=bIS=y_$klOs;zK@KRbf3fzu{CrjW)~R0 z0C~r*f!=7O_nWWbLe+Y8~48=cdt&!-+PV*W}Hp_&;Ia#U2d04j)WkK0)G0 zL=}T}eiG>0Wo#lLmXV{PI}F&S&?%PG4L@0ZPstXzQi*aak}1saCYryyASM5 ziPRr0LotWJ|4JX4yk$v;7Rf$p&@8$EW}w0@yV8?Jo9z7?%UD_$W02tN_`&WOl*ddq zt6w;k^vp%Ft!4hT%v`OjQ9oSpt}=a1cd&XuEn)R=7|; zf`&ZT%?Rit=K#o$)3lZY171|X!#tW_SBpZ~$8I1w$oy{A_aO|@(j8_X!W{hB#*C&I zkGN{9%W`0K@z=@r@^f9kb@jpqS@H{=iT5wE^GM1kTgDjO(bP}b>}y2kBj_W zVH+0+o^4Fl^?0(PS?u$2Y*OnMS=Dh2ezTTlnEhR#4LETT#v5rWDnidnp<&==vt2eA zd(7l+#G2T1F7<*QtPsw@60VYpK1~$bUg1St2+69Fe3fcZjf(8Rq`MX?8!;F@@JF)l zozL2w&&A&ApF{4syWU=;ARah^?<5HIdptF79t*s56~530`E4ZIC&*XAsm|jL;Q^_s z%&y;lJ@##cdrX5aF>`#lNLGtKj7ptRYW+Z+01;ukFC7kpk4uuFG2Dxj0f^#QNRG)= z*qj&g@N~W#*oEWFyVaM_H=TP|8o!t;92@6T)r0hV=pf`_B6IAzBuJ;_KtNZ%rn75^ zq75_+?>@#jw>mXv<-6H@NnICT8wr;8lY+_0GK$~ty>mZ!;jb0$3L~q{6RXL(@X=@y z_}t{;<$cpZ#vQ@s@wGhZ6QxNs7tV}w<)G!s^iTM^!Y+f1!cwS^D?w~c>A5VWraD)F zUl@r*YPhyHOU`KR8{tu`zxg0kOL_?RORkO1ujuuAZh#DX+1@*mf2;kU^PKI3KEP*? z1p?_Au#Y(Csfl6`j@b~2u6dB@YdD+%EYc@IJ?QQej`6QZ@t0|GX+5v~Dt5$sHb>fF5~tx0vx5aVxpqqs^kI--HeZPxc~Os@Rdqxg&}+ zd3r|F3q+M&Y{0M^KFkyEvRuxVaCt>*5D@`=CL#QwvvG^c4oKe7LZbJP<8dy1 z7Vr%kmWm1@Y9Rya1!+`6Y+}omKf_9vatazzu76=;01^bIkyNX9{=D8)ON9LgwFFEr z2=3w^#j)_;m0usJlT3;HFDl0{4OE-9=v7dG{^XjDe~XX8j;vLJ3Ykg@BDLt?t?<%D z7ZvY(c(+s#s?dhY-YGbWeiz#4T<}TeSM6lfvdJKQ0>gQMO7d|<9VpDFs)17!8SOs& zY0+A!>Zliv`Ar0MCmE>Oki4$jh7$YKaa;Yn&s!w)uHRffD0e?CL!;ldoD5BMKhT2i z#sdB(BBIQN^GHrw6q!;sf-OVyFm`qAr1ZQ8-B}??1+xUYus1z$I+{f+9UCtW$n*=+ zRyGJgozx-zWgR|sUftQ=kPX}erG>k6ctg zG$i!obH8)+!-PT5q;gdjRp;q?vME7Cp;zAFq>-XJ{6`47O3B`MEeM?tOr&vXd=*v4T6+u4l zG^};Nyemama#|bmwY~J*qP6doYWWZdU=S&2+LxT=@cdk?gf7k6AI;A359lo4{4nCB z3Ol0QvvT!7T~+pa%l)2ZHH(XQ*ymT-ytr6j$z}E`t?N(JQ`{)=3hBJ zpDAKKl3o@6{1;VoQALeP^nICDiau>JfYOv(eHqmI)*6gkRlEsHuZD9& z`R(JcD+OGC&Oh8rpIcB)K!op6^IZN)LwSi7N=fG^WnS=*HuN(cF|c8vI7#zjUg-dxZYY>Y1_ z=qfXQRxLpgwRO^*T#yaCEFsV6VGzbUvu0|C84jy*tVCC1{{Zf&7e+uGtSoZ%b-T(w z-CUf123Q0M9IDeQ2P9$(;>$j7W^ht)t-k^=Uc5zJ##Jnck30>xS@UJ^06>Hq@_4iQ zsJq(3+Lk(5Scs4faZSEo49sy~?4cJlIG~MpJ)9io2}PFPKvhm)Lm-np`@XRw7RwTW zB{AKe8?cAV{%%!H&n(GcK$yb8^Eu0(#Atz&VYbX3^3ca#O0fmg0sHNm)WP-8SNo^j z&jgvli*N|kk~}-zg!pDhJI<^=4aaKByi48q8B?V4_J&Tr{rXC+6?bpLTC-+i2e87a z5O=kuIxMx+bX1KO8t;r`ClLKOwpcV%h5FzB$iG)LPA%3+_k2hwNWb;}r}BICz%&Qa zFR=cN^7ifN)_6Sed8w;-5tisA=Tt>>4~vmCGpn#mKL81r8AW6Wb|broabj;0m{v&Qd-g>BgKB&Qsshh|{xR|D zWYjH?=38orxf;f=dJ(&HLwJHQbk+#SB800YcH{i*Lu& z>qC_3fcEn{O|5akU!gCTKN^+rUk^NeH<#lxHR^soC`uKJ{#??~sIh@E30!=f4uBVA zgg?3TyU_A(SDwR}u1V`%6;f~w4$MITna}Bd(4JG7s z+H(C?wur~t7_%!!tpAO>?rMES{d$Czxiwf8UfzOPLnPe^&w(e}7D58dLHrnhi_K;n z?i@(gtmVA?a2}h?iA}BCFpcd&OQJR?FhSQC8zX-vjZ;-D{fW>V)NSpox~7Xp=O&ZM zQsRr-@wN|xy_vl9=eSQ0w^uB2_ z^p51ezAY2Z)bE*YYkTZTu@bMf_zc^SAwH zSbddzHe9Uh(sI>d8Z_WN=am)hR-JK1%+H4`4Shi?OY+8b7z2)BjY%`_m$HWT_45z9 zXzo>vcP1;mM3{t*%MYsI&^T{KfT|p$Zxx+2B})Y%6c=T+RM!<%ae_fSp?9>ofIs0s zf*a|yDqJM2%+7C{=(I1k?~7g9il5*1$?QX?KYyM(?C#=NeJfvJYJUG$toA=69ei=8 zmA~b;O`xAx;VBnpRW@pyLTrc=)iwEP$3AbK?TM&bYE?e-WW&Oo)QC}w!;{-!x2zfcqcIXCJjO9C9`s6A4mg>>DLB@8Oofii&k9)^X{JecRW>p()Hz zhqVf)gpTufX|6Pva&{6!yx&sTJTq!W!?`_b}1t$%T9aY zEvz$2OAz-`qF*MX2p2)}81=J~`P$z8&7UCcgMm!JpED%fLw`Wn2DUFVnmk0Z1xieF zwXAuLD++#0vnuP`?d#j6*Duy?xPHGSES63%-jG9AvJ5)BGyPH~;5LUO0Pr%@S=g&^ z0_W8+$Au7ZnfiQid2;*3+sWR^<8rk}O29Y{0a!3rwD5&9EY5GMzKKtGU`y#Og=Jku zC}|r4uTrAX^_CpP(KK4zuh4r~n`_P6gJSse`bN2mwaKIy zjEbrbN&juX9+aW&H?k2ff;K(djhnqRyts2*=ws8u<>jZ$)E*sn)|+2imE?1$BC_$2 z5GSl0l!2o$9AT}X){C3c6**eNt(cxZdmFD(Q7h-EyZdwxH#gS({dtaL)6rM#BMT1O z_6^FsCg4GM>%mVG`YuLc6Sqdu^%BHh2xHJffZw&F7S=`i;h~LsCgU4(|4;Nm&D0Fl zKjQX@K%Jh4Q}Y*d%$9-%lSmN)gO|s^_Fy3g`QJ_-5}jb1M6L_@ibHR|PYmxlq~4kx zCD!YIAUu)q4;9WXsjS6^oDhmshBTo4r*9VQQWVMY-HZqs0%tF@H0L*xn+nXI6X=D4 z$UU(D&*sl#Qxj2KJ)b6KwDz0D3PL$rR5ntzUC0vuzH`+@RhIX{6pj`>c9lX3aC~jj8|LMv#QE&^HWnpgN1;Am6-~Z=A3*5BtU;f>$05L z^E3I*w`9d$d{dF$I9p}ilz{TOrOy_3X_F7ctF7~?xT5XkqFdjtqV3d=1i;bYb3oES z9=2fR$3ZPOo)v&|gEQiRKN!i@=k+2yp&%u|S!N5c&9VQ8H7Hx*Ow z0q?{y_!+;`K!nMuXf-%R*M?A}w_-d>y!79`8_f!(c~ip5rA zvlZ4u!PW}6AB@wb$!{R%3~Ti~`*{{{NytifuPwleR9(+n;-2F2_r z@TJ?~dA!$&Z;YRjxd=OpLow54la~ao5FCp?#W2JK82pwVBv_LbK1Yl|d8siT?cL?c z(yBThHZWps&91ZM>N>q9+1%d_p5z;EyY(Z98o?a|ptM{#rRX)^| z>l#HcN3?EcZL)-c^0D)5%!-S3H{{tJ0#w0fw|Nx1mlQm68&;|vpyxJv|#&MEvp#fKVx-!^!ODj+LQhfoM{$;yKNTvTD; z$zlSGSj~VfT9jp`REF$l+8)?@(Io^$O4Fvz{cOS?ajck4`C)ZLU;oj_jADeRaBg}{ zwT>zZ`DixM{M0DULJ2kFU)eygjvD$cDMYopU0EE<%KT!ia;LgkGL)_zywXLKQMN1} zd(n|y$Dfgl&nq{)8O+x7Pq@c_9oY&*hXlA7}%y8mO7dXR<^-eCCI%ixJc4^6=h9EDY;BahyqQ}d=A1;jua z7p3Cxx)KYycaP4%CvB6ADh(Cg*=$!S_dRixD;1SgEi*tbGB$93H3R+m$&J9%8d-OG zqp77NEyAWKdVomA6NiA2S!`KjZh6J~lMt|#%j3(ezEftsZGF}4PVh=T-q*q`?OCJM>A?wNKRoob+_2U%rNR)`yFb6sn_1iVHXWrmt%0;h! z_MC2cQrF-iFMcw`iq_+QtbMXvuOY^%8e?E=0GSUBvkDERF^slXWffv(O2GgXH1|Em zQc1hB$Gg=M=)?Kp?e;!FFmIKxQ~9EZ=EhL?cK#P|Cqmc5R;!9>yaDE{K#`IK<)7sH z;dU>P@kAq#Q6H;vL+|bZaQ+Y9Ny3{UJaznp;+d#VTD%GSxC~`A zTGup;X^Qg=g3lZZN^}H(W;j3VCE#1h^qx;`-;K}LIfIJn3%En(kFXNjB_JZc6D>lg z=IZMuM|I{2!}-o(XA%}?GN2m$!XoK%n0&bT9&6&Rk2O&q?qud0` zx-C+^s&h!D(?oTq?YRB8-%PQY5ZuP%&UZ1@_~Ru2huw*E$NK8DkdIW8 zySMaJHqeMnCby+OIMy2WEn>S}#Zmx`i0kG7w1B8}9>wy9C)oKYQHtq@bNB~=`N$zL z&9{BD6iQ0=Z-NLG!?8Fn%DSJ5L}cZvRrF&UePpK&r1Y*=&;0%-3%1jhjwqbwm?gL? zRhb~g%2hd9V8Qmu!p43c_e#lqMID3Kd(tr54b$hSNDj-6^*(e3dxYjf`} zl5gJAO?frf3pw}=p2L++IfyGJoM6rk_ojMj9TM&&D? z*73I(`ELkhImKvW5!`XAo}O>o&}cb>35dF3D?Y9EP8Olczoh{}o$(7aQ9=6i+QOu^ zaihb@5tI&8k(R@Fs3ZE#N8~5sR5nCd1|^NF>)$w0_`Jit=xBN1A!OGR&H(?INkzio zl_}(ASD$d=xalKx+&!l-r1*k#gTX~;DCdIauNTI7#7mA?Und;GM?@X-S%`o~JFWAB zK;mjFBl|!xz&K&Z(a-pKI6pjVPTKb!S3#QAhEu77JD4w|f4V4fh;NB&Zl%2Hywm;V zl6KykN(;2cif`8vtoKI(VYo!+uBCl?ILO=N+pvOD9a8ykv{K%CS9obOfY)WYCIUot zqH#kcskf+e{c1oc+d@A~DnmogVyx3~et7vLAYHxMzet9`a3_oL$>!Y{4+&QK+Xpk}G6@~^v!#OB?9y-(d}W-JX}VA<6Zr-j(l9nr zmco1lex8dh-gv4M?QD{#^dDj6P?Gh9e07@-$P?MLCf?`FTUlF!HlHBqdEfU9KAh2_ z2#|;HoPG_IX&Psv&bkJ8>y8R;iVm4coxMAXC_=t8uBd{w0Sjlmsv0%>O0^Btbb0Qs zA8!tZ(zLB-opWj~makObUo$84;xgk(E2?4i^>TXLfA4GeFxlob&ClO@bfL_FwSuyj zgG-=22f1cu@IOehI4hevs92AL#9Sa*0U-#<7?(3g6@$x`rk<20K7G|xaDH}|R|^mc zTUgs`J-bo|bSHL;O_PbkTGq}|fWwJ4wYN3TT^Uw^~Gn-NRHL75%9EI3&_{i5Zz61`t}%5YT=p`Q`VpTzux2 zJvRwRcs>uQX!*zNO|pv2e@3i&E;35_G_6N$yc4Sh1M#AgTWHkA_IG%#Wm$ET81Ltr zsvYrDQo}t0NIz9oxXI{ggzyYcdw2M=MNHgETNzsis=1E0!57HzaA~HN`&t7DG;0Xx z7TPqR6KN&eSu(Qudx@B?mQv;l)ynBCZ$8g4JFX9Xu@G%?7YN$g_ByLkq(QZGx*<0T zU1Fv61yos;jUDW&RbCEbq^qN@ouTR75G8wbhxOg9<`RLa-fDQ`9Ry=za2yXJ9?qHK z*^vR}#MhuOXWc=9C$;x_9Ehta#m2ch%xb6=RfwGQ-zq@tN6LC4aB!@qD!3p{H!yQY zS|c~*;(LW}d5U~R9cA5htZI9zINxU#Z>^(AG-imdhS`CzPkFvEoWHozcbRk25Vbl3vQPCAQ3<4u6IZJ20YNq0t7S-%8gGtKpAi z^yS;ke)x+_P(J4rMhR?3QF$~Oyc+W%3~~%%*pP9M2LD@HTc(#0DSb+!x9DuoX&Yi+ zYRP<2RYZb)bpjp~@UE0#a~cVFtjlapm{g5fl2H>#no-Tii4%xuA=ELV`Y&KT$~!K< zPYQE+CqXVhcY!CbQA@!WS^ZngF;ntpYn39+H*`sBnsMsGjR(}3_F3^1k}f&-i13jQ z25~hisYz888dh?GeL&Fw(24j)7PMMA)zaMD2n29wWi?-|+^4mI(Uyj!!t~)F6Df=p zf+*Qe!^*SJ0l~p(qJ@uR73Q+`#$b~lo9GQqAAcoa@ip%w%T`tAOB^GJQkAc10kEv|xiTz?8=b*RV}3kF0n!zE zv^V6SYZeZb*5=(57u)K?)*?GZ)l=YjPZB}hP2_=R9564<7*5t6W005o@hY$2?nytv zIq-v-0G?7?yJ^(zT#!mo^yPr)Udvxyj*D#Dy~#S~)G*QV>l?#!-6=7a-Vo+{4dyc@r zI)3pAW-LOKam{iJq1he;3m;dXgh=ip}y5qdNU2-rZJeR&0X5J$FWF^*8oEc2}#tlETY|8VG3lr;K4 zDpWkac;Sz;j-?;sKUET(ifFIKM3~qH{vQa7 zYW_vg=C$+2oN>jw1L$SmlAI?8N+FLo(TqvczK^roO$WJ*_H>AlQ8uual^p6fkOWt5 zI8&2phYtyz^R6eamp>Kdqh*od*_T*fZDXhCNOx4^41!%}FxhMoCxXnvuFOeZ#m|F1 zwMQ9WRMmM8o-8&`jN=A7+6L=AWAjRXajPFH6 z%ts*Z9uxgqozV11WL+LYt$|#`+6M4nQrXke!2+7j_4Zt@eouJu5}%+bpIyTINjw;p zGm>altM>XpDz?Ww@#L72&o@c30# zq*)aQeBd4hZ`HIZdp6nPC;EiHM_mgEe4Bv9QCH&B$C00FfwNnu$&#Gh_W3i+mO*_hL=`B zWuuG6gNQ%1-~vETmR8y^+FwSYO)h|KHsFHB#2{v#2GeDfQ!gK@j6%Gt-c9>49QOk4@BrL0 zHV)pxfLlf*_xqH&a<4*~e^RVg91G;Iu^R8c5!kOsizJJhgh3|%HIpH4>6*D4+DG+w zSUa273$JiII~m5<4p04Mj;WWBS7ZwhKOW6d;?RE6hENg59OS~CpzcUtEZ7f}k%|}~ zVVmf6TL-^<%&Egt{(^l8s5anJ^-HbhLe$u`CC^%5Mgp<)J0|hdf6H8#Dh0Jn*f|LO z5*%fK9pM1Wn6}|`74z>@lRvmYVq;WmEBEm&m|K!y z%>G>hGaboaxX|okQQ6qcE@^NuF*V=rEX&#h2YW=!N;BbAl$rePOLAhJA7XPGdz|G- z9+amw*SjBlH)#QYikh^@-gax3BIBH9KQI_`YNNjibIyC^kGyJ~>c=M1te9=VOa=ZQ zsx?4B(uD!ttX5bN_(f19V)W8fdkc|*m(`w?y^L+^`iJF)R*%4MfoeE&S~?2!vn9qK z27{bQ9S26-nUAs{YF;XDmlvR{3<2=S0-#;(0;O5AoV6*Z9RmrO+~VSiSt%}4TXYa+ z4ooOAI*85g%iu=_>s2DY+?W7jnJ@6+FpM)ZW<{Pr%n94V4VizC>;xn6x3~SGz*_%~ zA6xO`$tIkpk1hu5i+^@5*~1#kncJDf9JwN`qH`b9Sl_x$c{#>3GUYZM;&tadL+o58 zKGglSCtspJbJetui9}{V(QODzX%i zyjh{Ki%j}pBs+QaM_qe)N# z;1gn9bw?W)2ii<3=v1El)^nV(tK6df_pRV&i8ryoG<4OTr-018-n7GTd5q%i#&Jn^ zVmI{84d^sdh)anH+8Q{sdB61WGPCze?RfQ@B`k%ii0^z58|`EBfQFzDQaMUDLNwW` z4r06uvSP-stVwr#&D`2EW@&vgA}BF@*0(aH zumUA|5vCE<&nt0F4#L78E!Z_Tp29b=>O)UB0dHZQC$T+x%PIbj>Rw2C#zql-d78Yq zCIe|rTE#NqnJb4*vlMgEM+Ab&0F<16%mSP*)~uTovWB7Mn*E4MEZ^V#vCDbe!0Zm1 zrOLMxZ%C?H`r!srN5o8sN7cq|!`tadyt0KT(u(=DN;~e&mF`Aqh{1Ki#~S2acK;I+ zJ97T9tXX}G;3k7nF3qk8_5sbJ)&H*bAj8hQou3^mv;`i+;ML4|1Cqm6-&O0aj=G{a zte?1si-?P}!N1JV<+HZ_#dVjWr@zX>C80`&4bQVC*E#+{DP-{b2W^{Us@XjRn}Lay zC>*D_D*jnEh{L|F&RaW%+HZ-Ix4sPXGzX5h{T)k=8B>*x25j;coLM&9-fS5>C|=T0 zDQA53T-Kax#V`P3P*I6v|1^zCe?YHtQ1abKl=@^kXMcxWESN)&4KR*Xq8oJ20mv=1 zr<9|&=cM2VHA-*ivRtqr0`G+C-5`nDynOG9kbO?g<|T0|qT*_n0NTvhGed}iy^@26 zgc+{dW2`>AeLmeK%u3<=`~2)1)uE7P1L!r4dLaVCVoPhJcSWz2AGt7e!da!g$3mS} zq^lM#Wg~j(cr`^CUxp>DY+T<-uZ^>o9+|0D6Zi4V2Qr`Ph>+C_I|DsM+c{ed;MrWju(RDXzyX8V@u!pY4UCFo{Ttw%&`pI=lm1M*ut zTtZW({DW*%=558+?YKwC`>2t^ahS$e6)YT{mQ6KO4Tb)_8{frZlA)lm0?}DmZ7=hG zfeta`FPxda^C^kS;mp9Hm-1kuk$J_DJUdvh57I4R!9Xi%*0RZ#?+4%tYv&d&m!o9g zrnk4K>!kTEd-~x>a=Ma?cs=XM!HeN+(-y6hY^-w`5d=?HAzJBLlNO8NV#Y>k^J-4n zTW2CRT!5`T(|@;gW%1NDARJg}6sQG^oe8t`BG|~>Ty-aP;r#>Vo#MG}kp0;I!Ujh# zfZ3ZXEuq$zSvOKEt3_2rH+W`D2U5Qj)hQOtWIfWB&#sr4`LZ~i?I=LU=a_Vu3S*^m zHi!)OXMjUm+bf=8`w0E*0b-XJA$}ArXAL}pJFJ3RkAmmrZ;bFn(5K<{3mIprZDB zB%aTG`t3|?w`@L2la&smrHa`FW;eBKXr^KN6km`G>c#(~>6*hTZ=-FPY}-x7$!@Z3 z+qOB`ZnCY(o@`8ZO}1;AT=)0g``rJl=bX0}Yp=ET+R`L~($E@4g*EBBV)06hfF&}R z4OQU?aNs0U0?+TGsA>-j^A_?MuRcJ1gnADubWx#~ubPpmbh1fU3hdev?D-8i)GXV)nwd&U zwELfd=u_atpk9fbYE|^!9;5hF78mt@fRVnr)#+xDjy32 z1T^`fa0FTytvaZ+{`J9vjx{k{HZMW6WP@OcV|W2u1atcl2jElpY|P}EnBo_kdW44Y zJDdR4+~^N$XpE33x;btil| z|2>K_mhQ1Z|F&%y>13z718ES*E`#8EQOEJ$g2@-P)E}FH+m`^I1?);)AGb{Z1-W8Z z74!^RVk7x$)KZ?SrF6*5N9$PEz?!t>YW!dY+3{_3Oi(qTE7}5G(jkX4$(dh_F7k}O z8h4k_Ig(XE5|9AiZ-(YaN1jwY^ zYZMf2pun=zt-i8&jCL^EIUKlrD?zl448BeS1KI2I6b^1^qzL-qM!-seiNFDt(Drgu z+tC}o-e*3qi@8y-sqSLfLz9kT$%LXUhy9)YkX3fhusCnP@(qHGVpwDNQJN2&L;OmCO{uUg3H-=xvu(q?x5s2T}(NsgI)VmOJ&|k?+(Nnf2@_ zX2`F#F7=gRR8`<|V`&fczLnD7BeRmUK8zh63r za9n_a5eL3Gcc02Tigc-uPXBDj-0sc&dDnG+^*UEE_B2EC%Ej&X1o|(Sm@E?4Z$Mvr zferWDo_*DDEcO7kkhu8(VX>`BGo1<4Kp#DgLd@Y$aTd)`X3J1_$cSqM#h)SW5P4JV z>d^n?K-_;(uqtG?PP& z!S8^gUId|$QZZ$Gu2|A}nq$RiaI??PK7f}QB!JQTy!}ZPPssb-qbm+2;3fq2JJ|UM z?|^b-+pkM|s}`OAzUjx#=L;mzD#+CP*M;!cCyn4krQ+@gfnz8^NBe#}pVRrdqj;s- zK#%|H&D`fh@xroV_0quW_GiH6UAXQ|Vg5_v%>_BWeA`{=oO>r=qz!H`58E{0-!i$6 zLZPpprQvXq-hj{ZmDOjGZa0Wb!z8laFj`&s-6l9M`#orUTqCL6-%Z4O#|&{6lWK~y zJF!38t|oNuJ-3eWa>cX7OuCoGzi^ULoSD<(k`$AA$N7ZWNlKeMp0vO3w7d%fs5 zvaWUi)at5QuHub_*kXSWOh8ewyjJyH@z&~X3F!5-niB6a-CF9$-N!@TA6}&vg#HJX zvNWDrKHJz6J8r|j`0K2y`sT{epDSQLq&L_x@O!!*r3 zjQpoB9}k9~SiR4M+e2kY+5fwqU^ll3frQuZagRkA^hE{OMS1T6kDDQ;3f$1sDr{Lu zUPFUe`MnUD2F_nU-ex`t10OU4!vbI10td@Ku2eHBfA0wV=z;Ova>wbpOZ&N#hSQBs z@^Oi>|B|nlQ2p^)4F-1Ycg%PDO#dxG5}E(I?6wQ7-}Y$W$8q4EJTOXJ@THt&7^UYK z5=^K=Z^ZNGJCg$61N+-J$*1(+U$n(m=k~w7&|$&-ZT)mAC>0Rks8S^bw0go!>S$P6 zy`uHOQw2pszD*W8ji$_|p$*H4)*bp|RHR{5wvqh15LNsN{d<7+08Bj%PsE|m$S2Zc zCD!>{c?rjGUvk76nOk=7yw_t5A0k+JDII)ooAoPc=*~#C!{CJ(QkTc&0QI+L=}pgV z|NpYMZ|gjJ3667JsRZwm5{%gKcWt-d9EPSkfv9e$XU7lDc$#{sZ~4R$nSI1-pZa9PdQZ$Oikx zgdo)5Ir4ty6jU)0_ywcrl6x2pBI%_f99oUa;far4IJtI(Vi#HdQv%w(wfoKkPanLt z&94W`1#fB9=&<}gBeq8;KCtY1{rQ->E?B$I^{)pGe;CFiFm;1%Kdp0tHZq3iBuS9K zGB&s)irel!Nup2eHb$+2p z_3e&mo}13VhRS=~*;_G;O$a>OZ$GouG(In@<$f+n0S9AaW6RiNkJ|XzOVnAnUrh2& z!{ql6_SE$GY+0dE{q$JH!_-L=;Ni2rsp#5**+fq`7IR6H{{qqr zLHV3?fhR4+eAXidf5`uPokfS9s)Bh($IB~Toc!BX2{W_j466GZbM$36wrEF15UaKp zj#6GG>5(9Fg4f>)Epo(&w#wu|-AU8>Fl==pZ$lOJL*LJj>i}3szkA)=ju}6Q<6K{4 zPKV9N>ww3u)wU@Lm~XF{y~4i?Ml&t*;J{8=9>w#IBWrb^A479irbh;kE5*j<`VNSd zr$dwSk5%QClgs>rjwdC;iE;}w$ND`Wp$DbAu8|qTrG?`zVZI>3%Xm{w)3cg!k7g4dt2t==6sWCgZ~#k zKWEbdVjIM<2&2=|)B6G@H!bH(a4$jR=sl_HG|)gT);suDern~op>az0Pt$$VtUeK2 z9G;w_qN%kt?L@2K*;w&`rDe^Hs=V;B2<0&c8PH=Xh|_WhOEF7Cl&Wmai3UZ!WT8BU zrONn=QbiV_5HZXTxe1BGCIZYB#fFwhRXCR92dOAn#nx^j2CsMgscq5Wi? zn8btH6^k&RzE_k=rBErT?z|wDY)0?zt3T>QU|`|=kmk=1-j{blV6$BpF4^op27IE_ z8w<3-w!hs?HkghgZ#qp1tUmWSy#3gI>MeTp64PemwpvPDS_LD?flS2JbpUZ5%dQ4& z5QkuZ*h8PiR-|B1!XO_qhwRE6@1#_nIrm?>3u0z?M8iX%#e7HepaoOsn z<``_yIyHV6$~ISsby`FQ597QV|DZ33I6@8i08?dC<-R?^00)bSiOI3BeVo(2D$uDl zad81W*I}l_wRM@<| zi6Eff@^pk&Hyoe2vM#w3&f&LSioDcT-4Wh8DP5xD`1Ac+C`$b=^S&SVwttiT2E#qiE?LVz`gCysCI z<8xNo{%_s(_Kd3=%G0hFYbD?{`)U414`wAl77cBK!HiJ_R#0Po#yK)%X`k3$(?7&$ zB)E|ul3qy_>3b>KHTCg^l6YKlIdW6JFVG|gF&7LAP%b=Jst-eb6u>{~3shn=s(#ZX zBQxDCT!H1kqA+@~)t8LQNgKP3<0waySF?jyR8U^=-NVm7A{+xZGKZc+3-0(3u8%!} z2Kx=poWPIgr@J4$u_*@5=nw*Z(_GuJlgzz@>5hdOhvk_Bfld^^1J>5KcSAASKa-11 zXF`0P-fl;W)#${B8TsFF!@+0n>tE-#o|ZLx!z7A>M@a$+Q&dy9pHowur;8#7B4NL6%YW0g%iD+rrfxt3bHeSf zeRO5y1zaTb5R}tur+h6?7Fw(`#Vu+|SQ$Dkxabs&cVR6Fbg5d0dQ;jfU@_M?`q7^* zmOPsjKVS9ddR0eOMe->PM>Hf-*8<+I<7YCil$N=y&sy|zS*PQFJ|azor@!Gd8`Tu6 z9zET?!kO0y6ip#K^}d3eW=*eh^}IuR453NZYg7+^tQh*|)+6Me7--jjo@zl^5ybf68~udj83ut)1CQ#x&6Ut8r#6<$v*~G z-}^-JsoEJhLs~gw)1HbXH=$?P)5A^5AjMCY4_aoUS;z&f;B#+37Aa2G`day zm1_m*NWC*9c-eg#^}5M>y0z9YH~D&O4uaJuyv<3jPR{u8RIi+0%zNrj*lk$Eva~ig z4+Y%H_l}j7m92&&5v)cC{v}%`^2oe8vvc%i_8q1-=#L&Ie?5`>Het7I5mPKKL1S#0 z@6XwF(KxBKeby8|mvr^M^wU3WdU~c|d|dk9sbXN3|Ai@u>99%C`?cbmifw*KZ$!e2<&1|1It)u`k2x zq~gcddpJX>qvPYXYQuLM3omG0LPnWK>ePC3`%LY;Zd~_R`f0nGwQJAgK<6BX>bT~OLHg2(1BX%5HluFHj+s0c%z`!=96 zq{v98C#|TZb4YyULPqCH(6tvzEV9w$Q2I$rVPMj#%BhY%<`TKgb8-od!F)PMIWzKz zi1=aW#lfr%?P@?^Puw3E1#y}^ODIqLflfj{B16Y*WrU){yv*VvIS;1o+M@PHeETYd z1zP}PpuNDURgfO3WUDU@5cdwySRDFILj?5Q)22&1y2fwq7pLk)qd^q*;5jaj5SgBcr(raj4kW_f|b1?4h6H?T?ES zDhX)}6#1eErWzGig-G%PsXdiK?ZGjHYzO3Zw*!)Z%l1q z7Na?=>ZsOCYs_a@+`>sy#Rg4Byuu&U+-2xc3m;Wn{>-xQRj!4eX4ea7d)Id0+Z^IE z%p}7P0kuixM5-F;MPK;ktzCkTa=e*5c}qujAr~{0UdF=Z$zEdAxhshI8BKeozSy`KEFK(I+jqu9n14IeH2e(93yr22HC(mCwm%KQ-KTPg2vLX z5ncVrp)bakh1phFgi4M3={jCuA-hFo0>tv)B5Jt9Lsrx4>&|I{RAX`#25oC)WO>0u zSEwgkc=a-#37K449f4YfrgZ+d&SN`db$iCYT0xs(e41kPB@c1K-P`={!~cp}Bi-HC zq#UJnll624UqyGbP+1abVim9y3CkP@D2S`VY}8_Tm)GN4Ctp~pCL7W6ckyo`FZ8ig z^oJqHuo>sBiX9)5R9(@fgMy8Rwfgnq@^>Kcjar%Vlar;eqBMSe8BM|R+MN=*DDDDB zp{&9@7+ytqiq|d)s*9Z$@LD)b$62sl4e(`mxX)nvR*8zQYU3W!)+&cXbCkGhueul$ z&CfjB&SSL7Ssa@$cL&&!sqqNE+$_XHNX4*N>dj#;E#2YLc*QX39e8IXlILn{HuRLJ zM+Qj&kPQkCsM#Y6I``u`YDQ>Jk)M}YKC~z4 znid|PC?g>>`4!7}8vVyKho&@mp+--5owRvo3G4e}aW5{-DK$J{w^ z;bz~;BS<^whZL$O4SEp<)`V3|v~JYRC?XlhOx!**@fXNVRM(|H* zdbW-&eD-Zqm96U1;o;!7REDt=j%;X-qU-&2brLCL>YVHu%NOI@e;fM7R{T31gjYIlefd_vBuy)A8P=PFrzLiY9dt3U7qge;CDD7oANN0 zQtABiyfsl;oWP%u?*cRj(M}LBis5QWG}tZ`>31iH?I$IUF6C;%`@tXFUQ!2_O}B(X zgl>t^gHvFU3wNy?8xt? zacndcyktf3LhK^t^bPIJR=(OpCrE?Y0da#SJlHgtvt8OUomdVE#2`+OdiiinZG$Y9 z)+!c;)`*M>^YTbwwWw^_3Sv#P`GWkI5>92hN!NRj7C2N}x3h}LjPCX-yLk1shwbz& zE@`5Zb*-&Ga7Yc+zh}&#{K!}%QXT!XN zds4%uOM2ohs2gFZG6fy@YF`CeGJ4<^*i>U$k4j?lB>4q{n3hX~UD$%ti?vpwBf8T^OZ1>N_HQeys`_rt(XtM~)0x?ld zm*4-_D;P~%);{i)$32{rbBaFs9$f?IrYChHOoxi43AFkt?SjX0B7#L2k5 zcR||kVq$ea+^uXQC0Fs)9%km#cIXCFYMn(8EQ{W)YkB%~m1sf~VNi!dFGHhG_O)eB2SmlY1Mz==k-`EiN zeShUr@6Dfv5?E=9q?W=7D{Z{qUSpuv;Tf7G5msk;Ar!;@$`xsR$4RV^iUbMtbOlyD zDNMo;Ch!eMpJdBTBq2Aj7G>BD1&h3RN$HVX?`(k;#J07$>1w!kffrDtZx4`laig~K z2SiJ^wm(7CO1%e+9>=)xusH5gSFkUoNv4e;GIJTt>Qf;-gZCd-)|C9wof?K(rhZ#g zqZf{Lyu`E1vF$fn6>PQ70fTCj98cU;5~}8n15U?$%kZ2@^y4-9?^!ei$qW*&hwAqf>KNd-CzXiAD7bP^{820We=mS_Yaeb5xi;f=a`bI<&wxAS zfU64xOsk`55i8m>OLw2>_Jyb?wAQvCwz!E2e>?G4Tm^nZ9)XHWJj^taZUhvX0&P~l z$lmyTp{gk4@hS-l9cok*>lp8z5b9KvG25?DqN<#u_ppX$miW#l1cgG|sg-r{Ge*AM z?U7wB6mr4UW4$R&F{D^*{!>~qzgfafZ5#{^WBi0V(#^=7A!c)%)5Sc!YO1P8Z3M!+ zw-3d_LoM!A)rxD3oYf^uGenz|55uSzB+a;a{SxU0Ar>YcBX0ZO)5Zmwv@rjK`=QeUE-@cb+9gm-8?hG8fZNv<`#6Cu-7GgM+ zEaM1$mL91egcdQ0MGOPY2270@Cztt~j|xJ6nEUBkkVR94y#~{eNt=ask^9H}5kLN(ntmkMGU~HR4~=j{7>tc01&I}{@T*v_-X5*A ziZZbFtWK;~7#0wKve2OxsRa>dglILBwZ84%=wQ}A)DTD8pbh)6;Gcz;CtGyTp0e>; zz$`3TYpYqhsTB1%-PrkZW*u7mWn@q;t_F3qm~yYB4w^h!LFzIz(Hy4g0Qp|hZ$#8 zbek`H4EV(jQoo%#4!yJxae+uI3vq+k4gA4aQVj}rx6-tf!-1)b18YkoR#31sR4ioD z)Za%|ebW5>%Qh#$1(Iy+=(U~JnH{J`(C<53muLuPqxo?&BNozr2b~z3*S>v!wMlWi zjHy+5JY+_@Jbw79wv$%rCdvjhXW5n0QjGW;$1-Lja1&uJf19M7sB?l46RJC6o=yHf zi@w;gsutTft9HHDp8)4yiGq zXB8F-{z`W3Te69wIWsYV)334;qleIy&?d?`cokR7dmym+_d_kA(&55Ej%N2f(iVixi=q{qLnQ+*|xtZJv zX;K2xP-oNu+{8aTwXpu%{c8{i?~axVCxn282FnD#jxXNL9fB&irkN#0rlgbg#(TzR z_k$Q*Lz1(#HqeFEAJ~tO=Q_Gdv>LZw*M*oV*2c|29WObH0YIIb>he{agryY;Ct@h{ zmZ-PA2`IjLTrC;!|EfsLwRGwQQCq0j2)pacE*@i$FgbVFw-w2VTNpP3@0Q)RL|?lD zxfz%Hv_rHY!Jlv5TYu%ef+Hj<$*?NL?a}VzwA|~ucx9f^fuC&Aid$C;x9o!>ocfBn zAW#h>o`k0pvrhh4q4FfM$hN*ZyB=-skEa;M5i?ZQ0qs)t-GIg)dk0O>6_t^moj?hT z>J+2h;(Hl9V!8W#h5KM-F`{4;%zQdbDm*-_c|ol7ujjmROR%EV*z(o!m&l%Rn5{hy z=-&!iwUZ_tR>2A?^6uf|S#p8ykkB$%U)X;q&5B-EMeD^fC<-eWEAQUGei~-@qB)ew z{V1Q6rwl)%r{I}S0~tAPggdlz2iSJIjsXwLfSkWT=Sz{By|&?qnYjvQMiY!ttn>i) z^qdgwu$i}t&*y*@Sxbl})_-7`bF!)<8n_|}cGpBf^=c@+8mZ#$p=c*{@h&}xB2j8e zMdBWtWiF67OwRo@F$%Jf5p8ip8n}I)uV5;~iV8agDiu;;R>Qb4TO%{ln3HKPr4{n# zFn)iMF*hDA1>5v-aCHiiq`dMaHLoKs2{LT$)BLLPU=@`p&p`GhZJS+`;$i3$p38ev z{dZsqAlk6FI8#CDDwoDw94FtH`e{*7@XY!U55ItK>cWdCRzkOIwrz0 zG;Dnl9r|V~D&VTA44_{^Bq(1wY_ z;+md7#p1ON5~yQUxQfM*K+syz!f7!Tsj8Obx8A+ZAi`A3Br@}YzUWK0Y89xC$RS5q z1v8KX8~`~&%OW)=E(W4PkQqHuL0{(H2c1d|PRDOz7u^%Q>iH4E^n`t=fL{Sh4P_nu zJ#tcEzbe|B*REiMttB9NpcEtW$Ocv_=u}6KdzrU?^VhY-!6Jk~>$4p{QH?fbYn^S8 zK)ut1@B?>-sG<`{DP*jk zgT(K7F41Jy3}Ujt(da3d(h+{1A(uOZW3Qw-kId-Q)wQBz#OuWl1UH(! zUf!B@na$zr#E$w!-$M)_$nngSEQn<6g2-laK#e>IQK$~KSE_%?WE!j4vvGRT`-bo{ z_8;Lhx4{ps153O4Pl&a19w@QL4#^%-hL z#py~4qH8Hc;5s!lO^Covmy?Z>rg1}#Y$}I1x0X~p;QzyV&>2+<(t?uG3Di4L_PsFw zz>Mz5H`qGjfUfB+Ls3St`9B*-dJ4I<@{*4z6yk+ry$gTkR)y_e0F%K zB9B~FJmDAmSsG4E4hW7~)-ThrQUHNzYDT_@4~^)``UK`3xfa};cf}gf2%}?1*UoPl zP*~yASoet*ROu0F!8%JF1DypBzCSn+kxgd{JV9f$dW;nUBk#oYY|)3 z{|3txN)?Mo*Z3e-h(@|23qq)PGZNcifz9|ieK8xQiH?d61O2Oq6-q-Ltt}aVZve~6 z)oG)Q?whg6@dFI)A+Y9X^%8&L+#F#<>vFgq5r8iiLclglwMhc}#irQaNr1m~NA!t#OQ-&q}&4 zYkek_MD+w9hu=TOVzibz911`I;qfyYGTt0zrDsfrQtlDrbhf0x zMax=6UeH4VQ<}P^>{fDRQO}go&TD(%#6OgvI~P&Ltn6bMp>5CBY0xNie3+x*0=Y=2 zu)x+z52YX*e}S|mwN{3}FEI6>q<0ST)jQRIIrM|FBzd;s$KW?kvRaZItAszIqHli> zPCM!3(V>yAOhZ#Guu&-ZrAaQIn3d_uc1Q@Y1yR)$2Zb>c*m2^WFgBH{*Z9OpxtH z1*_^1nDZ2jB0bTPW4V|)RoTp|Ryj7(+{(Yz4HG)bhW#Xo{Z&1*oJMf-ET#ZOH~jRg z)X&ZWm)uVBYh|l{h>5{djjgxYR!4Q*S|uH){Ere0J>Zy<|K9k=%ir#Y17;*`DD$-e zz{K!Xo4jyZK|NbPJeI>PgIJ@1tDJGnSVzBjF%egls42vyhoPlnU4mdC&6)=){^h0u zMg;C`*hh^1YivPn+t-GiT|Cm%f<$_;=5@ei@Sq}K9=`%mSU=9tZDm~9K_E4FtW!2Z zTp}+K;7mh=vgYNZ1^lj;iu!j}NO7g-uK+Kt1MvUqnFG1LfrwmAPJ7`$em+0?kn>j- z4u&yrgbKt^V7kyrgim^2*dkRSg=cnl_r=>mi;Fi4soX%RP7fnAmVqn zwxIf_#Oa$u$<*{0^9`>gIXlhz$$sR7L(Uv0GgTTzR!AI^9wNQErn4T*T z5vMgw#=cTYBHa4sw4+K=RU{GPTybfIY0fCNeO3-VUuFr=^Coo}@H|2M(C89O5ri5l0phbc-crFNBj+aFgz)cgepYzakl15kDA~Y2n>@hA| z!&HSU!ZK{Bu=a9nI@39%N=acLyuTF4ft$YFW4RbZhuf{=sCbFD>8uAMr z+lDSxTNY7Dr*i;UmalbgpCEBX^`*sQ$Mh`aIoJ&Y1=7*N^`5vO=&?$kH7pOiY$oi% z__^J+Ki|WoX=LnD@!NL`9g7U|`m}YKN7#l{bq4iaerx7-FduZ={ddNyhpsk&_y&25LR2iZrA%ufFo(r$3rZfp4eS4-Ns0R!3PL9I*UC z%3KToy+LHVJV(Z%2!NM&kzull@E!`0?2bIbk9vqi$bTVCmD*N!#%5w+LXV!9grcnhBK+B_D6iN_fYsORw5A?3OBJd zFgMl&4c&&JbUblop#ID!u@?K6upS46iOxYV?tHVv z7_j?Vva1mTub0n!1~i0~rtXt&Y_$*njz(ZJ0gKAE;}vO&KnMLGQ47&?qw2}L|=e3mM~3ytmk zpTIY4-1TS%!! zX9E)m$OdD;9l4+NPjrd+=X+4Hb+QZK^!9;rR7ev~GeP>Q@DxR{Wff(G z4rF+Drm^=qqCY8bKX|@US2n}^BV`>`#Y$@`o^q%Xz@8G1oi8-jXL^*@$1@!<>jUy9!$aMnGGkW)v_h9UyQzmqtu&9Y27x)ZpInoyH8^Ku6QUl1DbEv zsgXDewl9v$Jc|`;GLLPFNmghABn^`~;7=0g+WGAP@hzoLJ-|vaYIy&x07=5u^1yd| zcWaEK>5eKQi+=DsbA74qL+rZxs0OKLk5(sq9#TIe2=L^2=mFi#19M((&Y|b6*TZ`H zdGcbkQZXj*rXFY9$kY~BR1;=Kd71&2 z*1UX@?KUk`AVUT;1MDF9kx?_>@DFBfWJat!IR6PdouDob9;aHroV=*hhx zE~8VOCns7rrxZv}9=8)b9JI_I8}5Vma!OoHX61*BWx-rB8KTr#{=uT0DP>C*%ULyC zwOEADD_T(%ZNl`s1y(d*h%@cTiUvEHG*nDbe)rXO7$24bJ*C>dnMF4{u1C}BJDQ?W zEDM9RZ1T}wx@1oT#!4>)ACANDn&hve@eh8*Xvi&yTT<&LM}s<2Gr@*1csOC3 z?=+`lKxAoN|JQo-p##qt*B!q{)6;A@ZTIF;vCMAtP^e7Gm5iT{d1rC$`-IUt^1n9s z?vI)a%%t7nxbZW@_$&dmw(Dnb-WT)&A$$W>CATSL3!A%m|6#4&=HGtZxS>EvR8@WA z27eQ#>gkrpqo13ae3Cp@2}rCI#O3Spp8o)sp-&|fQhV_2jrLd$^i!o&@b~VlA66Z* z>*z=4_enkdf8}VRAw;C;%9>M|#sA@xrMH;NX`07Lj$V|U^v1l9bGC9yY|lN|UtC{H zjN0u#Q1{%!eb6bQ%v4AbHd#Yh=C>oa{pk%Yt!uC-DZji8V;VPuXY3s|nVlPrHks=h zE7QxQxtbV_sg#OBY9daC5FC^z0EcMs(QYPc6SztdqbZ>AOSDUnf3-l5axa^t^mP&h zrh~n@nB<+Za@#6tbzqAyQKn85bq3w+{(^AWy(Qtg42CePEklfeV&eTbO>-dgw4SS3 zGJmGQo_Cpe@U#-+t{r!&yGh$h1>`c0+x4xEh=2oJt&AQOHVv1PF-&Vo7_1_cbh*~_ z?hEo9#`qnB(n!b=5Y$6sg3z0?e~;*p|ALM&euId)2!Xhg=vSxl7mJX(<{kiyQ%hhxDp(Igt5Ys1fOuKB=$deZ z&#|_|;TH(_U=*l;!mc!3ZV05ZG#0#cgUH>J;u4KiJ0<>&`bWE7$8_XhZOv(Q+Ji9w zWU)H|x2>hwsehXqeW&^4T~VO#>i$?w4{KgtvQIah8ic2N) z_Mtcw?*c*H$cl1JqN1LH@YzQ!q;B%U1Q~;fFg&o2hN7?gL3gE>t&@E9{A=IPEI ztk(`mG|zg1SZJ@cM216U;}p(Qo8uX_A8*aimcPW`uX_VHdtQpSKtv>cUKM&Np8rJY z1^7Mqp(kapi#D?SAPNz2an&aB!MIJUk~K?fpz^+t&Q^_0IC9aky0A3z|L#P0$FIg8 zRvREy@@$_`Q2->TCxf1b1SEL4eQW=?M!I8>3`FyOi6QE@`$buo4SClfz4%@Q^`MO_ z!x2+i{D5~PYQfWOQUECtz;}={34YXaJAAPF-M01$8%)dAW(Pr^;9GZ|M)!O_)nRC* zNCgU8m6#49r!-eULGf6z7qF*XZSqkn5WD)Bsto8W^ED8WFlQ-g;}w0N5s+IrZIx|B zH#S1f$p?Pb_#kGtO5GQ6<)U;ID_ZQ5ipo(qpha_Lbul|*CVtW7EXVU7`T9~6!BlF zceUwD@yF-o^>(`J$K4~yu9!jZ3z`#Ty zJSMk>uD#T-_rkI@Wt)3*&bD>ncPmHh>x+)0OSvQI0*?zn&M80z6=3kOqcU5oTL8h?l*)tz3D5>yiRaxVxF+xkG9Ks zh|3zXR#PzEeV*^D7N;ktPyz0K@@~9w6?IF0$BT5nAN&#I08QKV0Lw^Rq%Bgpo{=*;4^YRt0bviFJpZ|>r%sIZf!udqkAJfI9QGfKLz#yGS z3y6r_(BxkMm;ON+fwHX}f{;U7{(G{+R^im)lf&kYixzX5u893PzCAvI0w8o$T@}T?-N;f4s|WY?TEGNp#enirH{9LAD?4k#a94#YNtx>#NYvhV^Y4}wRm=sN zz0RpKzvE;fM~7LO-E%79I+Pg6xqoFZYKD0GGJy1{S!Btjwb_@J-WhS*bHqH9?TasdR z8|m^eCGXseNBZdR7RnYxfa^2**@SL;{g$XQ*Zh?ekZgWwC178*Fie6M*m|f!$+&V< zL`QcgCq!cwe$j7=Sv#vSL)t?_ITX>RvjCJbo5JWMw&Zm+1d26(>_{Z|VYAM!{r*7Xk8=DjMv=_=Z3vJl#)5NHXYpw(MV?7l zAkah!l*VxgpiosXOX*nQGNDr1bp<>B5yPXw8rq(ukYr5Ahjua5MV(BE*xQ{7PUNN> za{_8RrgV%J)Ut@w1$$JTR0Jp$S6rI3?Q^sb19kAT{kTb$mA;lXfq1T5PfE@yv*#r| zjSds!M*+RmSiVcb^Ens z=51|XFLl5mRn>7$7=w}4v>a`brEl#|8EaOprweR5wXvJtfmQ>o7b z4}vaV=HsvnW$%EZ+&REv@5k=fP}!L`)E;0@-e%(jAZq@()4Ykosf-;KB8CpHTap*g zkIz9X?}MK!#(aC1t~&3-lS1&+icAK=^3l~9lpOjh>tb0>&E}Rjk~v@szfgFF0)*YP zxLy7^2-lqEP-f20SXx&G4%S^W0%xrG4`2=j+vfm9CXQIDnkR^b95qJMzenYAnbQo7p;GNk5@i-oK{7hwAm>xf~ z@s7q0yYT1xWZ*kq0ob+gAe`cj8$gHivutQ3G{tx0ZvT3ufBLl&fS&)nD_LK_SfWD* z$d~}OolC@v^v_F{s|ec_nXqm(b^A{$S)SHOKUCOp(y^DXM<^7O+x}84cNcJ`#s4J9 zfUh6ZRx#8e1rW$pbTq}lV$=rv(O~BQRB%>Q;#n3Vk56|K4Bz8cs7ztFA>TCx%~zGX zJbM0ex>^LoRyej=cnfN}r*r1*sGO=21~v_eQ>ab>8Me#;Rbh_ZvvoGB3B6f2@Rjmp z>;Z)K)i@SFT+-FQY(OitLmh*1AMXDCeL_6g0ni&c`XxeDjI3NJM53ZN^4dbnq4J&L zBC04aWJYvgl?&gW9k(J1clTxj9%`rq+kp$E%LMl!Jr{Bp29ETmVoZrhtNG%U1|BCG&LSepWro1h?H`eVe=}cwgSMR?LW6O zN|;cVMBXgREqUJrmRy+*-_v5^`;|PM|3%$DZE9YJ9;cjGcDqwD&sOttZDKsYjjWDP zR5o6nU@o|8$LvDs4N*Zq0OQP%dDOxCTHtqo>0qhzW@-^TVqx8PCx%W~s)J8FhxQlz z-qK0w7j7XhA|L9jl@?2&21^Q)uEoU3J$KlS@qPSzQ@P!-Q%P(Ku-6<0p7VS+eRo8& zm*4@rt6Y2cT<>3lR@2n~N|UELX)Yb{j$?WJpKNSGgLFv-fiKk=))EVbhr8~R4MTFc zckZt{%N=`d?n716mkhmUTqoM-zSP!{*0GD9bi(*I4_)zV;iY%eW~`13vUV5IGUxi! zZHS>Hi{^-};v1G--ugc`lKZBC`@Kh}XI;hqUkM)0!$8Qnyd6-d9jR?{+`7YcSntTdibTX4@p{z$#A>^G z7KA>c3pibzym`+4#Odx!!8Qfcn*RaP%uaEG(XWoN5%w_W@W=2llD({Of?@7K-U%yK zx0aSGDP;Qs#x6U3Vz&DQIXvDD=}yf4XV228nmgT#<oL)<5G2Ou zlEo&U_J<_fIWEl`+n;ZucDaIAe=MZRw0w&a04)`|#0hV#Ib8=rQMXoG< zP1@Y}ybf8UBhAx`IsfTITR@NijnG{3pVWj8*ptvNgDO)i6pDvt9Iq4IcePIam9sJn z0-)J%nd2ZO`RcUY^*Z6!%9r|2z(}C5fU)3{pRjRkLwUej(#MZ{wAZwO#G5St=ImitVS+MyB5xRzIi4JeFwvqz|e!N?#s>#6%F=pN+Z9OkxPQ;B;26czOI@Xb_fvP z-SeO1SU9M#MgYQ31AojBJ550aa3+c3}<>r6_@f#_TP77gD#*KTjbh>D!0^g+=1lap_ zY6jPC6L)e{^u^QwR3#TSJ{9ILgQ4TENYaK(S(GXr*A1`;Z3V35PAO+xRV=V@99K@T zAgbRE_z|{+E9tq}+*DXx;DVYy!*!~?+snuXzSj^NE$H^71X(D~6u-{m?Fb1@yzIGbKfnMXNI5Y=>cx}; z({#K(6KQ|;W!~Dew0}JHeu5)f77X#)U~SrWvg6R_I)<1g#KEZks=?q7;pGR50IA<5 zmwJeKR*S+_mvO!_0Bw$IOVM2rHPVsmyfmw?CFoCGyn*N6l?K3;AIyv|H0YLj{*5~r&~k;0Qd8cQYVr2%HV)sUzcZm7nL9H zMk4rSX4#J?p#w4&`Q*XOh%-_%89!W)Xb?`D4W4*s{Ogxhf|eja&jQ8f)lmREOi-5E z=XVH#l_b&4i^#QpP@4D+lp4fg=V}#6iv=tC0f*xB^J#96{tE|mgY5BLXmDre_GER1 zBjkqXLU88Y&5P@`A2uA=QhjB#_wzve;}x&`;6{UQ)|w|6vB%Bu5(}|lUq5MoP-5z5 zNorP5TlJk2Gn!r+rppgh;%!9J>z;gEP}Vaun+E(VHoF|1tH>P;yDpDAuVn^U=i>;vjjPzBxSsL z=dqa3+?5O9CL2`)WrW!sH-z5R-ei!B4HGNaKrE5ym1_4eGKn8vVex20Oh#&yY zz-@}q@z+1twr4@A?fAFEb$?SqfnCwt*X}=ES_qP3M(7Bl5~gOV36l8W5teKN3!k?Y zb!wZ*+)Aiw^A>2CfFz}QTqNuhoTyMSDhzxx`0mrjT)$~$2aG_@W8Om>fy(%y1Y8QR z#Au6`Ezl2VolwA1%M|Jbk((+=8*_2_`e)9|&^1bgCzr_OM?kK3{SF!gv|Xn6f1DB( zJj!tCmeNrx0xPO$=R&kfn?L{Bl%F<8s-vu;7f-6C<<;Ut})!hIyj(^91n zbDI1C!ZP}%F=#qPsE61C(QRKeOXH;Lj}NAfe!D0vpUDa6UsZAJtC7jGU*8)yYGF7p zH2PerD|_=Rz23RU0B44&-}2e3=7o33cB{}VvG6Lh_MNUEfFQ`T*OSXYcp?a;9+qr= z{#Mp3iVE(g$7!x$f$C>ewRaOSzBWFkC(tYU3IfmxpOIO>aERZ7j1SkDc|lmxasKB( z#g=+=AP_wg!dUe;I(wmUvq%4nIvU1_KIa(1)Jq05S-t4#IKK$!Jl2deeZg6ejSQby zioj@?Ffc20#ITIa(Tu_|1H(=BDPgJ$a7s|%qF4WdT7h!JAXD77NXwLp1gV;t)C4Y= zf_YO777gBXe=oLXb4WBd;`%zVsxY{=hamU^;4kx`M_I3WVLGGSajbfE49Pd_o?mkI z!f3=CCr^Zw5>z`J0PN~%=*gD$BSK$DyDMk_df3uYO1lS80!la3dLTqyW^0uVKzm30 zu&oQB$I$*Wxm@ecH=|m029&q~+^+Znt=Hq$q7Y5Ds3Wws=kkk^N2W(|CK7Teuwg|T zPA}J@PcN6EccYU7te~p+{Wvolu?h(ZiOIjQhq-CSY6+$yp^E3n5RW_#|0u!6@%OO_ zyf;$gKqAo4A)ZD@zm$ze=@YvwuIi`6j?da?{Fj0WHg9A9Mg*3T=^uB! zmGj$Ok&eT5Ar@zMFVYkcB}K-v?j+*%NRb25;qm!|yL-O|A0WWrYiL=xS|uk6x@U4^ z(LAlIPQ(_rXD>4kZ@Rh0&*uH4k?A|zm>!J~?YV3JuH&Ugz#=BxcMtRJsut#3)e%Lg*;6M~0a{EvKjtv&%UARZ-K8jl zj*vSHZDw8VXx4@{7M5%HChmaRE!LIb|Hvv6CAi@CU;g{M(wsh9b8IY>*z`)raBG%ZrW>h+Ip!WRv zTm%6a;Qa%<_1;N;N#KC0v}x;>p6f38N%fC8U>=bfJa)G4`4@K!-7A1W_n|(I$rY1% zO6K~x4an4%T%TtBZ1on;$dX2-&PhgVfvNF;Rw{5BqM&qE`Lx)wPKid9;<^0Mi_ymR zV`uVe=*08rXf)a4*Vjdjf&Re{79jO(My*6NBPJX`ta!GvI5!kCEXyc{Ox(6u31L~dna z!AQ5xac+~RH-Ib#pp>7+|{R)1}Gc!6YDAYcfuyLS2OUa(g_AqaiV z0ll&@@hbTeD<*`ws``WN>$>NpI}*VECX)^%Xi0@p%K`1%Yv5^At%GGM2+>S>0Oxu4 z7h(K3yu5%pb|EoqVA#;;IPfsx@D0}6)AKLYl`l;9_e4FS#@GdgzP>pLl|Ozq;f(*K zI7r23-dqDj;(M$7e$|B*LmS}LQMb;rj2+b({I~Z48Lnnq}ygq84 z;OEm2ZU?l`3$(bO3Qp~rbO{sCmJ&ZvPJR{2rlq9~|^N}#bwl`J{ zQyb&pFxc%=FSD>3NIW*&Mn~!QP?|Aq)3DLN3a#H-A?moAwzvWyEB^bw;bvFb$0{!q zXRHJ%>yLjg?6ZvrLMp${dD;~O4p8aO+K^rao)(q%DF-s(dFU_CPA z#L)H#-!hm-|)BK-)voUocH#6Nf0FZpr6Y_9VUe{9Ec*!6!oq8154R6waWfvPwqJd3uS zveCc^CHB5^8Y5rGS2@W5>f` zwHqcqc^zRu3ikD9>VB)$DFO~fCMl36 zVGP@cxb=0c5*!ff)z_vFRs4&d$zu#G{-Ll%0r=+Ke;09)!VJ}Ur@UtWcXbaRaN}vW zXUd?Yz7tK5?KVOFawvev5hoG%-DnIs2`?1Y-q}5=xrVYRfKM4YR8Nc*?KE0(_-XXe z#mE8<+Z~;#-e&H; z4+DRg9qiB@#l3R?`&z7(&;pD)Kl3&_{^41NLl9h^%m4@F!^{NS>d?QV2G;m~sEd2= zkZ$*G%eCKTn0vZf*^1-*{R3>lGNU{3qjw{1P*Z)u`TeqX-Lts8rPNnETMXP-jVv2_ zSv5kM;xk5kC|)CC>gFqY9`mk|tSpNX^}8%p#q<&5Fr=6*I1WSw2wli2fsI~fR(HOB ztz~t2(e&Nrg8w0tb_e@UOZkm!yNlXG^I`f+y2|*&jYs3;gA{^xQ_mpE>PUQ*`-M6q zxkMC!1eo6Qz+nyuXiStc*>*V!_PS22+yBmI!^w4Cm8WW&5RW+VYVYfGQ zotJa`c~HO=2ZHOe-xLDyg%ie$a5u7yvWjU%uUGi51p2_&mDp^`&*^4<16RmG#Cbbt zPPPnhZxk4^Za-&n%Bl-*-}DSQd_7_ObvHxw?H7Jr(VPtAs>U!ga6^K4Y;t)kMO#_| z`&yxuItp&-N$!jP1{1r!dfIk* zB%%fhEMQh0)L$^ApG;B7HcCh&CW0{FgB#2|irffV-1{Yo%g@zZrUhcn>8NZ223Rsv|UFJ+zI4GFi=Tx7g zDS+1)jnr{ntX=iOkVCBBU^y1qE{PwpE&k~n2q(l3#BQ>i6&bO!l%@9DyglOZ`EN2A z65%J2k`f=XXu6WPcTHBdI10S=tnS0Vx7`ZO0=}=s=Cs3ICVcyC{1moihr02UpGonc z!Er01E}>|0LYZgq;x@S8;A3Mbvhitsaio+9(|diEY7V0}zinu%VdW~u6_gZ<>Zg;o zcKe}$MUx4sm0?afMjGUI^>?}w#oKGvEOAgwCs%;~xFawhKUe8UBp;lF|NgubX}9?0 zhh0TC-XwQuvthw;<+5rjB_>oZ6BQ!avn2u)lv+GAJ-mS*Nnhh9OsF0bswjgvif(pK z2N8T15;&j=&frWfWOn@j&HDT$$g$jdIw^x+}t6{Rps_0yW#dq(FT z_{v#Vt=l;UhAT$cp6wfBw9gAZZ=#vWc?B;@Hid*#o{hu@WBk<|eqResO=afh6JxFp zUG7hFx3yoqs?@Ygp1}*<$S~ejV}~0b#+eV=lLlT7vd``t92DT$_@BcCHMaX$v#RE0 zhGTa_2Iv>p$Dfsh!}V+#ZU!R|rC$`IS5yP-%9Dv|-HB35n3=yTM2Cu2Ic4{*T@;Ub zE+)CnQPE=34J_R;#1hY@m*x-Vk`%O>v)Ipx-aq#4UMrpH%PDUyrg2+qNo z(RNN=o+lu@A#b6hs+CY+5h$-~HPOd(C>d80=(%tY&>QMoJ4%TI<OoLlH@HLMOTsB-gx^4)Y({7b55nNMQu(*X9*K@_z+BX*^1H86R0v7G zGYBS3HcZ6s3i?q^We^=ogLlupKkf0>2y3il~~x8QmV*f+7hZo%qG(H zL@Cb_viPn~0bT*C4=hHgE~N6Cqo{~oC*goe>7-JB5Vl;ZWk>JoK1$a+voDQ zwPhA5HbWyzN>xwDXOP-Zfpx3)WgB;N$LKC&yf+(DHC{4*%yeT&%~2wBpJd6}V`A5s z?bC_>XNoUM2%!o3(Xd;;#lOM*z2%DTH<1Y3G& z6xrs=J$VT3EmTOvEt0Qn5M z@RZ&KtGnvL>d}`68cu0EZo5sQj@fBmIDg#6%h~ke{6F|m*Lm*7bX5D|%=kMeO#wo( zp60jiVLi!SbT8@d@`6Enqq#cqdky81J4O7wRjsZfx={olXo#iXAvj484azFwmo0;Z z0t}z=3=yZkH!{O(T9ey+`ZYTqWEBHluFA|}G$Sxq$gCztjL_bvB;09fT7eVFHo%IY zX`R<;~XC~I5N{OvS(HeQ!JkRSUK8y2o5-QIdIOo?LkYz;g-z1nl1p#$hRuAIgOZrPn=0VPyrLX7Fta?OO2{xSZ*80L@S zjPZzVOL`|tp$I}?KZlk4;e8p3hJAyb`xOFjlw71r_ahQfb2wmV#XsP- z3C6%#Hx4x6!VZ>U9IsUyp@*Ac;j|Z2&%q7<2HcnKv8mHN8JdPA%=pxdN3MVn$;)Q&y}@J%*YJNVSGEbt7BVfp2VEQ-BN&Q(D|)aP{A|Ns^mG?xo&s zHEX;?lNc`W5UVs+DZyqnn$zScmQP@<_8h!bQk-Io6kaBYLg&*y_{xDUy7i2V6aRl& zfS^aK7uN0|_K)oV*D))B90mYNVrTA}miT-fXj4sp5N4CHK%Wcg ztl=l|6H7>|5KA|fC_(7fQ?j^#5e?<0MiV8_al*ieH9s$yQIdVL9)(n2SE*u=)s=ZJ zN$zIDET4~Lz*r9Eovc*lyzSTFpmDxYYD9ySKg0+UP*x!pFl;8JDfU7_6lApvUZVwy z6Q8|GceC+NimIc8xTJ=I;%CB&tE)0*9~9Y_jgm;49P!nL-6-D@19`A>?JS8gkIHU+ zEhW+2Y3gh)ou6yd?nZj zV|@x&{8KMyeU7T?!i}jrX4!;EFWxhnR5~h*lsRg7l)v5-C;^d;JnfZZ6?r_x?PU3O z;ZGxzUdG-nzp$YEJpP`WFoa;P1`7+3Eat#1M?%YU#he3t8yApyv+XdAxFDzxl7?b@HhhW$&I_thCQT?tgr9tM z6B5QE7=UZPD!Dwm!!)|laN7~YhWNo6ccI&28d@Z!bYQE+rZYRX6jLZjdMKuSKIh@BA0|Ls^-tJmVht* z48aYD&Zq>dDuke{Jvjh`o!8~Y?auRwFzm_g?B$5%zFq4I)_N6Qq6fl79&3F@1}qo= zu4N2ZNm-&PO$cAUfR-DbMOl4mu0#&@HK+ ztXMDq9P@OTBm%r{Dl?0MZNiU+FXk%CR9uBwlt@yFM4_lZm6uLh0HjFTSD?H&VfUTN z2By`q_M8M2Zw4-CeasLN4T?FFFdLLsnzxYT#%5yvQztsc*?n;*Fm!0z59=gbH=&jN$FH2icx}*hkVTxQuT6?E#iL5S3#L($LS`vj-@hUgD9*p>{BQG8^Si>PaL@|=Ir-c zRyms-V$vN7-BTN+a}m!}`+8aA{6-UFJKS!P1T1K@d2yP%E)QywE8&qyyUzxv^+r&s zN>eQRl^xXW`NB%Q_I|gI4HTgmlYH2Ve>q1#9|CAfqKD7{#K|#t^y2jONFsq2DuQ`; zR&S-O7B~|SKy9jN#b|oB3jv`KyL>apNvz~fz(v^bt#G1)5hI{Y0nrtEP=kq)+T@K* z;0EpI`aSz(>&PTVtEc8i!2EF5Es11t6WR^Jx7rH-{zwJ@U#Y$Vlje;)RsLnd;1eUL z#oHo|(X-XY=m($`D*%S6oH>-qLV6)L;ZS`95{oXrJWz6D54bbeykYs`k1)duD}r#8 zSpes_cuN!c`|=+8Qkix($`17J_0*?mnIX}YeiLktirKsw9lh~eEHZNQcrzrf}MYdi%tvXM*%}$d-$nXan-7|k-6O>-WDX$rqMa8=j5WjB0Jgt7b=}{esZv&mBZDf;#o56(t=pL{P zS6ZXWB3`E}rC4o=i7I_*=N6NCq1pj;Uo>Nu2Htv^tmY^)q6OMg1w*iia!}amE`q*= zJA5;m-D{wL^I6U-TzXjtObP(g2y7LB{v$y#^FkcI-Dp%kuL6E5GBD%^D)9rkc|0&V zt~=c3`Mtm+aNXY6enrFUM?xj8XS69yh(`7aZD5TMI(6G2zxTL`Ja0-~l=hYwqZ^ux zj0_lo%OgqB$A}D<+a$zzC{^d%$Yw!(i+r`tmM5_bV_5E0G|-fk?>f|->!Q!_v9|M7 z1x%i68`7%voa6n1oOq|_FeAF4R0rtU{jZ5@!l*Gr%O1p<1}(Ra!?c*JoV>m})mv2m zY^E)=g23@`8_?E!uk!t*^0Be~K_3%|Pa&vmtU;t%kLg}gZm z6cXBlo0p9tA@$kqvy%#rw74|Wn`4??dB`PnT8~w^|GMmP_17(}chDYn0}b+;x1`4w zN(E-rvDKZj-5yu2&2FJJ7LW=Zob9X>n8EhNF_}27NbNaWN-@kl5BD0y?!f;uxWk2J z0mGBl(Oc^|t;;M%KzUq!pOb0xy!-*QKu3K`q$HS?iT2$2@K6TZsju|RXgWx>5UpLt z#QE+~9pb0KcV1Q)9vTYwuP1ugL;HiL@GRRke&wSaX#nb_`{oNI$pr5qpY0ot73!qx zggqq5{lz+6$Mrlu6bXa(@cvH6%LT^E!zIpdX)(SJ*GZi3o$qNob+hsqIC?HQsKO!M zt!Pa-8cF7aezc*MBgwD53=4U2IRw8^b81L@SL$xgx}@ z$E6pEn|w8RlRc?zF~b)OI6Wtoa1m-P3k7R0I~dCv;@{glt-?Ve|Gpn-#`q98`@k~T z;W#lUobyb(|H0AIUQ>S4jHUF^`u(L0_Z3(`aklxY$n&Y)+s&1@WDaVYW&kIqm~B*ppA#vx zzdF0s#5(hLwYid|Wc~^T8rLU!n%Z3>^bZpWb0Z`f@AC?oe7&9%ZoG3UTv!IHv7B3e z#Tr)mM$0C+ACt$e%`XG(|MMy!z}|9m4c@0DSDM0{EcvFBaVA<{t;bA-PldagWKTUS zJI6y5%VP85F}Ld{*&CO2l1S~vkhC+!CE2(UrB>899H9c8VZ}v)j3;<*zD#i6q}=|} zoNlVBBFS%KkIakO2t0Ik;K`^HK3dv!1{k=z7DVsm2LGCF8>baQFt6Q4@5lpD|IL^7 zO%d4c_uvPWGR&ser0?R@8hs6xUT?;gUtwcokDTOC@``qm&{uv^&Ke{YXGBKSNm$S4 zaxKVN)e{0ZzpO&UkhXLd6Nda8RCoz+bzBA1@jyv0h-~;kk&lj~N~C05x`0GqJH9W} zlrY%zr4E}{yFCGLtGEdkl&W$OZ@b=r9m$cTFVc&^QQCirmKALP1kS_k8M-SP_X zd3FetAaV_m20R~QJVhMr0LF;Oud=ArqET=W?+0h^!3^h(VO{5qal*!p{uBklPr%;m z+_*tzliN+si{2jhek>S!79&$+{|ySEQHMW%7=8~c`;oJLg9=;Xzb5LvULc^>eZr;s zd4KK-g?Bo5?@UubT!`AHx4Z3hnqP#mr@l@0QU?+VYd1B|{tYX0C3D5qBczyT96btvKt5zYb>%U^8^ubX8sFDawz$=g-` z8bS62F#r;Yf8GiR^0*=-;{wcU$7H@gD}!y^7I0pNdcRXtdcIjat{n=FX7amp9pW8c zU6%?>AbtNp|2IHkl(X|mPVf4((g(7RStKkb2q$L0v7am~*XCxN^CsV-@^I!*SGrl} z;NReeU}VA_OYc_>uaEH$M)}Rdjdtg2PVXDewtbWjV7$lOxySiH<#lzmC!&vXb)T<4 zOw+-NMMxZovNy+UvuPsE^a)ZgIVe6o^OlETHcyo>HeA-MmCe+cvA^n;Gi)c~0%NG8 zd?IXkEcyAuW<}4iA}ZIX;HN*FmwzmL8VlYkBB%Ge{56XA{qp}pHAJFicS(;U6hYFJ zQC+}tN~MR)ORSKEN=O}mBE&k4L*Ik`lo-0@w$H6POm3u7mR*2o2wk@GsOrWYwH*fI z+5j^L*zgtn4?9T8I>`ThcHKuUp!7wciY$%-?J&!`BRMq{9R}q~*u%#;jA*?U z7BI~qciw#1^n@$7b!D<_(-{J2{$3br-g+3;g%D`y*5h0g`f-w04@r$~;E^ zP+WWGzqbItdwZEf9C~lZsN!O?S&kBd(ssPtLj;V077qDUWto<<+0gV{S$X&~i7!xP zV!3vH6yQm#23NW{vOF)7T&KO8eVX$Me-a+CROe*|W$yi8gb^c+SG~*ldZAHhfj5j) zdX73cESbwI4FqQ?Ys+J1oXrK%myog%#Xa{6Us42<%Z%Kap%0OwPzc5Hv%2U>SzZyH1@&wdkS&sB0EMNfJDJ;15CAVoV zk4IBV#6#rgy?Jdq+{?QCtU!nR8-Lqh1uwj%gKa9G0oBN1LOH9}?T!Dj8jxZB6&s+4 zpTs9BX%q6lYFijeN{nC)iX2rf6Img*Z~1f0L{Z7m%7{;xnUk;{ZqC3K|FS^pI})(T z(bm)APu%?yqzs`*q^;bq){#J`ZgQ%k$vM;XqRnEKM~&Ok`OKPkiL%CYjsWMMtgQC= z@-Ck!p0{QkfN=#nbX%?Z(x|;mlP+GlbM{_=PAZCt?{B4+*BwdW0FrwVmT`Z@dH~ zdNAQB{ksrghG&&cuA-NnLVCFjU3QrUE~H}HWhoOdq z(iO`-r$Be;Kb`Gq7;a1@n?!8?U=V3mmkd6I)C;)`!W`9HzMP7#ddW;TE{}*3(@!7q zMnv*$c0yTI$!zYU=ISJUr;ke6q-kFH&mUI z;+8z@xA4K*R5a6~CDlOR)gROiXhSYg20iB8Trzca%#IT!e>`7Qo~SyeoH~n|Lht%> zl@5+k@RNySwG7vO@}SPL9C{2i1 zG8-FrOgmUBy6ib=QC6T~{njlqkHtn$XS1ly3bW%!PKF^IWONd*xx)gZCHt268~OB@ ze}swBSuyD3wmst3h3C85ueXY0j6t~HzHQCRPDN}ow+rR67&=?xE)7}t!jDcqN>jG< zSt~}|b1=kz!%T8t5aR zl1*d!;MUdRpB>o8BOe>m6BpC*v&e9UwBc&4XCbXVsPrZqWezSU;>&N~*fk1pvh z12yiw+$1$3VbDM|GxgA($+JbA>_FDMvoJtSX)t8tu%&mXS~)^z_FX;2OHS$Hk6*&R zg}9K=cU0pDNBOg-;ALr;j>N5mR`jc6HrgBF&}rUI$&xT>?MlZC#n?J?6s87*D(u&SIel5C~X*rRYBRSRI#s8F`9x@ zag6r7d{P982+d38N>n)t+K8LCl|;qMUj>C2L9}Hnm5j(csj2+gb1P4Fbv_Ml86%`m zdz7STE=pxP+HFS#I}InKIftFdp=bPQQ>s%3hcmMBvqO$zGL%PP@k=~C$#y_Sw^ zbF;V`3Zi~oVZ~N4?A7iJwgjeo@-1}O^CmPRJjXY4@H9W6^hCFUaiQo{%n`Vy_-MVZ zzhy?{_B0A+QCHjVErsak{gxDWj1&IqJpM<6(S+6`h+J$C>D!Cq_j`0B#M>_IWPFr$ z*k^ieC$s4A4aapkIUDswp|3$~e7rF#O9M`KVCTko_bg#~hBLJ`9OK&!EkIgLKjAjP z2p|H}<}3&S@)WZFZ_yV{WMjuz0&gAxuQ@R#Oj@~=${715_FR%vyrx8jqv(-ufv7Ht z3b^8Ucup~LJ{|FdFss_NELs{Q-p}p z2+kR9o}*a*w?t)C4NC<&j7ndk1LG54R5|w02xf^X@+BarHJOXq!t#nu5!(VYN9Tk& zZs&l#9JfZ!x}Qqakw)lAYpN!iVwgj`%?log6lwd$o@OvSbhZ%hLh`95FP4V1o~LGe z0(5lD-$Lg(5;+r8(B(4}4f-ZANg41Ze0^^jk!s?136z7#0ec)5DSTdpDe5yzG!w%j zX*hUa0a~SqZ)aqFMT}bIZ{ZL)DKeJ97kY$sTvs=g&BlOST8dcJ?s2J|&Fe;Kaw^jfk?x(8^YN{8RQX{-t|FR+*2WTXfG^PfR_pJd8?cf3ds+lS zQ&)9`1P{#xtpd*|LLZ&-R+}S!cMzSlKAMB=Ww~8Hx@(C+=j%(%@LZG$Rq-h@zyAp6 zN#IvcX~g-xh+t1G#PSlSxW_tHu~}M%0wF3iTE96nk~Vii^pe>lltZGsWUYw04#9Yxtf-E8b&UQQ5Qp>>aDj+$2I zVH*E`1Utu)>l%UlB&ihS=EovT5u3E?fKx%Y4faj)_C3KerEb=SqIrvfRca1Ne5dq) z&9G==GY!F<*2rg-m>FzwsYz7Pt$;`Q25SiDoV*lis_AoHQePaU3M`3X1C_)R6L$fl zP4QyAu>gl>`ZVF`>=j&hYP}GP=bB4{uT<)jVtrCPVpg}Z>#`kGp%`V|0nHI-&SXGJ zH6=~pEAuSDLqZ;! zpH2;+5Mt)rO_HaM!f-1WXw>m`=J`YQdm0ykFjV75{kiNB?9!I`(7FAxtP0LStf7fT48qp0NfC2I`BoGSboN`u06(?l? z9ZQF2J^0xvIU4VsD}s4dzGMMDE<~8|53|a6KvR&#XKMeARJmfUp@4EQAhid>^Ud%n zF`r0iEo!6IA79Xu&Xn(v!UVfOgG)b=D=wo;DjiU1h**~R`6aYq zhjyKC^~IiXOQHirWq?=6vSTraG%Uq7g_PgCElna4rrO0uyyyn+ExCh;2&_;XERf;2 zB?l0(@N!qJC+gP9yICP4Bp{a3laY=%4H}t(2zYpT=dAg2EP^K9iQEgfD|;)m*Y zPa3~$NEO->Vo>aZ>R10sx8i9lDJ9+dDsHo#;*I~1;@Ysw8RGreTTf&wsO>_xGgbec zfV+Y9qW##*>b)m}Z+kD#jPPVi^I{YQ6B=46R=2x^CB|J5z_5UTK`91HB$eSKyf?s3 zcfy7#%x;n32`x}sh~tuG=1NQ`!s-ZD3`tCF=7V^@EbOG~@svfDRk36qQEtUUjPwd3 z4tC@Yf+W%jojRE?DRlWna#j9oB_;KM=kAGi^VMP&X=(N|13bLAra~xX6#80+M2ZC-j_=Huuv@bLRR4gQudq*1 zfvA1GhCU^mRdT(#TN3AmBz_+Hz^Fm;U|LV2%sH78cIS#5v)OIQ&W;{$?@sC}i1#G~@G8YTLe z-;z>fikNtRLxDPVzFWRHE+Hi>ZbRW%K`gZ#Zr#C?5!6W=CKS-vS*oPzqKpWSMiDCD zfB_+b7_6`4pK3YupZwH^sdb4w$EKic5~S;%YkPpnvLj3l<5}vaD>-wvp%=V^SCxYz zokI9rQlO7{7f}d=H$^2BlXm3+hHjX2f#50TMX6sR%jMK*kX4=4#hCAg!`cpg68L$uIh5qvQPk9!SCQvK|8Bidc5mF2dj@z74Nr1q8ss+}JEz6> zDfp~*{N-Oju2WJCl(EYN@;SD>Q)bk|Q&lMM0&E8cHnLqdN&HcK{^%!*e;YtKF-mL z>W|4~wPx6VcNkD-q>+fS1Q$~>O4oatJ``9usz^yO=_>CtBs?KP)_Kl30Lb^H| z&5ByLzgqXP_PlTSj~eFo8qnaM+E{?11C|ogW&4!j$6c(Ws@(oY+QsHSV-UM*3YqfS z;5suKwR)2O3(qd@k>Kc(@sG~xsQ3S|e&`&M`Xn->V{?RMuI|HD{A z*SMrn7(`7sXqk2!7=Y8z4ojyX`qcI+mn5xJ&UA1?{Jf&hNc~SG2!7FQ3#2-1b~INx ziNOJAW72elb=dPGVXO1Cx6$au3(#3cX{>p_^qz4WKBzMqj>g9K8E&9{(E$U)6P6Mc zQVl`yI>(bePwoO8z25K&Oo}`Zt({Qr1J7O9wa$4#c`Gu}cC}ZoHs^`Ko z$iHs}cJY3o2QcsF+HJZ2QsERKJ;~PI@5oX7`yeV4e8FeGEc-o*Yu2u6>dT$QjaLZ1 z!NSFwrjzyWxvdMEC&vFSFxcf>(F!OzxE=zVb0PLtAf`B*AYhA&+V}#2-3{#;I%1dm8MvqzkzC*VF{eiCFT% z#GY!tinp$B#T;~PTl1Yw^P}8lK=id6QSWbQ^?K`!COpNnw2kxq`PQ-=A)b6tz4vU% zV@LP<)}xBE{rl*|#>qZ`(~y)wc-3Xp+uCjOYO-Fk5fElCPrB182)sO&>#0W(tiq21 zo8g*#^M`rIaCl{tO=*(71{rlI{Qy7b`eb8eb4KVgv@fw85J5=Fm^C60%;qZ#^4&f+ zV&sCTLeaV5805|57aQE9qUkzr@>^XWUtm(wEo`o>_eA>M`S&PnleZ=+HwViXH+#o= zDAw8IXS3|l3k6R5vQAxBf{CnbH#^^b0QIifO>i&wt^XmhJj$$tC6l?`t|+tXj7?vD zF32n>CRAGYt5F;i_xuK_CvWzk+Q=-9Zv**+jT2ZC+sFj4p z5C>^Z0&24s@gs>esybh?O8hbIjgXW)s$zD!KB=BiQ$An*!jD&HT=%F+_RA0Wiv61e z)65}2NBXlg$w33yi@k`O9}_5#7f27ew6rFJ2N4MJJAJj8SN4l@_Prm?p&}?1)9Dr0 zxgU0`i5yr!`1RNFxkR$BlU>!urkzpv92M$|u z&;maxEC0@EA7H9;uO^B*1IT|y`Xo@YeW2$*&l@yz` zgq2tvwS*O%9zkL0E>0sNjZZNly2{S718hGX@y9oLzEe0=d`heL*9@KKlB~-==l?XM zpB@NEY#=f}N=#W>EncL3KAMK4c9{C#UlN-RwI60J?%>v9o>hOxPcHYyXL;=%(s$V2 zm4Dgj?0I4oOv@OYfUsM*c&gB|IsTw%`X1DKVWv$dKs|fnN&=u$znzCl%knDg!&cGa4Iqb8t`N0 zN#rYFn9CW+h&-UnymhXSZrN0eW1s1H#!Rk*Fa}nrnL|qjQxp(FnM939tEE{6o96}a z+{=$S;)|&j0le2@tNK?@+LyP|m(?*M{*(#!_ZbOm(OE|)BHmt=%%_`TmuG80haUND zGb|Sb7z3$v*KHa=G)@l9Ek$r}R4@B}o(S{w?o9Mm2~%fuw|J5#R+oCr{!FU1!Oc|= zE0<~Ka^tU*-b2NAx!#`^FuY?#^}Zy4ezinwp)qAOV;!p@ z=|$C?Qo3H)ZS2=7EO_Lxx!V^Tk!MTy*)^Z~PlQy?Y*UfbKaB0yp~Z%AH>MDd%X!Dn z%&j`SI(+qTb^lKeh1Lxz@3ZWf0(_K3;kV#BabU_bS2*)UsU#wEnB9|a)zmIxOZ1C| z_8F72?EUkEU6yirGHG7FC!Nkscje#Ik0)g|Lxdp74@BF^#*4!V>sS2DbK6&y=xsbk zu1LG`+dRgxSmBT9!o4MFHq(>zw^tSJm#4y-+b!CM&3mSo&d$EKO;6ZOgypwAsLb2C zU9S5-y2le&Ho=#WU1mk@r$3^Ho6nFt8qERv12gzfBeS=>Cq+hN6k^s`=d@W`XRA2m^Wr6XOUo*|^Yle2cywxp#Uk2fFYu5@n zNZPV+{Eiwet(q?w?${One>Z#*-NZ7OM@k(^4hsm4t8LZ@z+fKAueSK3 zul#w5^^bkkgawVv4bk}%hKX$(fsDJoir>{QJmlr3)dj@J6VZm9VP^hZ zKDoYf9+F=?PYoWaQEwvWdNRI#kh8w)& zoVC8nR~EY!59O;@Cq?}ArL$}_C?q*~6BSwegr(iyAI46R2;aKytU?QO1o}7g4B{K? zBr<5RHmC3+OsZM02iLvuUx+Q#qD~6AjumcDA7W*M&%;kWggPDTbCEjCzqvB%?@Sy6 zgBfV5=R`&Q)&u9-d*Y1>Z1Ef}^GQA+S$C+}`O2mxLx_CF-}lLxa4Yfj;^3aq8)bYd z8E^-;7|wRLp}fhP{I&Bk@@PS5B@B^v#i{J#?d*WNEmAPqJ@UmtcT=JoGpyhRNUm!R z9o{Zy;R2_qp)Pwrx$R^w>7#OOwt`Z;%0IxC$S6`Q!ac4A$yTi(&*D4X1A0Ax9j*QJ zaP9-BtQ3rUHLW&H-9)%b0N(sxu3}m5WRyJ;@4{_C?n2`Kczs+Sof>;+|+{`;y-7WwB$@^7|7J zkVQxen#8JT!6p`M0LN6*E1f)q9 z6qMeH1EF^Tks3_sB_TvwDESUw*8QKgZqB`D@BKbcPTBoNa{0)vm@CB=vGe`vuPR&G z^Fyxv`WUSZip^FWF^2}t!?GiaDOZt;wyNvmVs;C8{I82mbGVa29raxu3L9$LCti58 zOAov#H)62I#4NQ%;s~TM+X$fk2j#c3V>Q5i~ zx6D$qgNCmeBf9A)KBNf-7xHV!?4tKzA(M5F7Er@rE3%r#bl{bA{=IVXUBNK8iID~W zp`V0jM(X?Ut7zLc@5^qEDFS5)8vN(3^(hxrprQ&FQeb+MuPlkTpym1VRIhR)o_6}v z7?99x4dV1hA8(ImSLE~Xl1QY+$^m3Rm!v<@(7G1{%6_{kd4or*c_Ue8n}WMh7^Iq~ zXU&{jC)4@K?^r2Ue@4omD#=WY{Qubs>k}*&DIOI>tKy3+JUr;*_4LVzReu4dtnn?eyE!OYX)bqNE* z;;CzEa{B2RDRX8TEu+>RyuGdJw)!{d2C*s^#MDpeRZp>{>h%;B*!Mcne)#~k>XCn= zZeUaNyeC~NO9$U0LGhf zl!%u49|WE;6n-S-9<stLD=Sq*Jr9?dA*ExbTy4Z;C+Z@%JIGmY174TaGd+Tc~_cJ=(%4lF>Qv zAqC{x!Rp~O*bJS){gVxxm_YHhY&S?L52!UeioWatsT`npLHjZoFU2<}JpElXIRfxb zmQrzrR{no*;t_B;1^bQ6U#cPV-o;PQR_}tgpV?cKIe>ER2c$Td7BDkQxjPZIGBl^G zImWahHpeC?2|gT_TZmfY*THqvk>l5;dKDL34k1VkN#sKQH#f(RB;gM{)=7C+83u>@ zZyB!LliM&VfD~W|HMO-m`KBMuoY{K9Y!g!E`vJn|Wx14C78!Y&YQvl7FWHvANcT*L zV+n{<4CNHFx(r1sQ9=Ft3=d0@?l;4p}EPKSA8IwV-Io z8b^Pj>Kn&^i2N%(T_A|RED{TH%!(a%a_-gyP5VBP@R7?a7yJ5 z7clkB<48HMszq2qH4a8kmjw!oEN*hX8vd!Yzf_p9FlP61N@OULj0()-e;f@IN>vG7 z3wdxMc#~+7=n5dh3~X44j@gUoujLY-n%@v2PR8?WF6o6qEZ=0&b<|wC2z?wk@n|@J zk*ZBTMN8jgKsm*#x4SwtqKCy(mP8e_rY(r&Lj2~U$~?*WVk9fC@!#Y_n>d`}oY%Nf z>+e0+MHFf~!EgGj4fA&_R+xC*zisB9VpGVd6KuNf+uQ4OR)jCI8X7&=d|j#%UfHa= zPc)kITE!s+5-0s%PZ&np7R~ohp9$uXx5N$yP$!1cs1pyL?c_En;S@ty%|!XR1o+n| z>o!@Ut4?aE6&UOuHnZ3rOSiI=5@gyOL8d~?P889HrS%2)gg73-p>kt#arQO{(W~>G zA%q~J%XtAZ*ui11aZon53q9DG@ojx4q7NV-#bkj^{hKi<)SaVCgohSma(gl2UBg72 z&{w7bVutpHFb}}UU$e`X$1xNeBx#j}RBm38hn_<@lIF9f8ynN==ZcdKa;O8sngFA@$`Ww-jfgbmAzsbDC@K552#_8<_Sy@u_-l+CfqCJwl`sDP;#Dg@1S;4-A-W3V62`>9{@oaI(b%_r{R;FyD zP8AG_*`Uay0rB_;_b${j?@{p>`!9ylewx}mNzgbVeC!dIfy3cDU+jCm5i1`)FDqlt ze5_B)A6iuY&;Yz0*Czpn!&-fJ6cBzHGCfJL zU=cc9;NW=BRnrDP67OX*Zy?wkSmm_eyEq|Q6MQuv7-RyG5b`E0KyzTL90!2i#%#YI z*DBk|udfBH2}w6Cu>l6w=WH>~wLs~?YK3dCq*$(>Ff`~lW7F0y*VwCxqh1VBq^(Cb z7r`8OFyBKs({Nq&Uib9M>-J?4Zp^ zjoD?y-eWc9id_bJ;FaaeTk63{ths|ETxRtQ&8$=jn&k`nSK5lon3%jmxt{xi2wwia z5ifo;fuRJm^E@LpE; zqTorViQ7+Ili!1kFv$YtlAd(+UGL#wV&;}2oDAMTh+a=NrE9)dmMeNBor;Nr0W4-2 z&nnLw=8bEDK0H&R65^VQCHMG6;ZAx%`%_K;Jc+s9{utaJ1mFHZ9qJ6a(bpK9)x(5J2j4nK8Jtz8Ws$qPEHeP?pZw_EGpRbd z=EdK^qTGL^J~4cdZlj|rUCnopFyk)92u8{nkLb$Q-meEX@|v!iCkm3dkY4G?L(h(( zrwdn{43@a|Z-9}~HNmA^o%kLBo5P(crL)>XGgEixgxI4k>DIQnQl*FY#;XgwJ89bg z{MxwF>*7S4tCI}BEhHeMt+B_XY~=G0mKFE8ISLUm=_6ZSUAdmW$?Kl+E*Y!!ehK!{ zG4su}7BOAAEL-6Sz|5Sxw6_z{g?CDJduxJ#UpNB+%C$Z16^m%?Fg+}F!#Rdq_7Dfi z>W=AG!Q8`6E%j;-h+2au)iq}L3D7h${dYX2GZ?u zhRVw~{W|nUDNlcaHpPJR5@ydGo-Sg1YZgXF*C~8jFAv%F(xX-^NhNW|Cv8?{!Urdm zzD-?Tvifl@eo8GKBb4zIz8A5#@?j5zb~?SHUF)4neB|8(kl#ELV#B!GJ{IY}=Kka4 zwDYXU$2?I;tp)dyXGT;=yOh9A7D};Q?avN{M@a(CmIDnaG?#a+R6^9J@1<0J(-w)V zlq*DU4aSETNXUtHFAa53oC!|mMKlFeCpR9X8T=T>{bDF!JP>Yl!}U*wEDEU(XY05T zF3bh6KK&G~=JiS$nHEq3C=Gj|u$T^0Of{PXJ?E~T^}=z)c0*K(QP=U?glrdMKN5aV zu<|9gGUd$0;KXykI5m6N1!-VTl?%NRO|kv@<2xDf`2Vp3OC1!L#0 zgf%UTR9*$RP_8bj?)FCavQZSDSn6+n`LVb$at8jVuYp}q~-H1&3dw^QpsenfUb|D>tlG+5 0: + new_uploaded_file_dir = UPLOAD_FILES_DIR / str(uuid4()) + new_uploaded_file_dir.mkdir() + + for file in uploaded_files: + file_path = new_uploaded_file_dir / file.name + with open(file_path, "wb") as uploaded_file_descriptor: + uploaded_file_descriptor.write(file.read()) + + _add_benchmark(file_path, upload_container) + + with upload_container.form("upload_form", clear_on_submit=True): + st.file_uploader( + "Upload benchmark results", accept_multiple_files=True, type="json", key="benchmark_file_uploader" + ) + st.form_submit_button("Submit", on_click=process_uploaded_files) + + +############################################################################### +# View tab +# Allows viewing existing benchmarks +############################################################################### + +with view_tab: + set_choice, benchmark_choice, compare = st.columns([3, 3, 1]) + + sets = { + f"{benchmark['name']} ({benchmark['uuid']})": benchmark for benchmark in st.session_state["benchmarks"].values() + } + benchmark_set = set_choice.selectbox("Benchmark set", sets.keys()) + + if benchmark_set is None: + set_choice.warning("No benchmark sets available") + st.stop() + + selected_set = sets[benchmark_set] + + set_choice.text("Set description:") + set_choice.markdown(selected_set["description"]) + + benchmarks = {f"{benchmark['name']} ({benchmark['uuid']})": benchmark for benchmark in selected_set["benchmarks"]} + + benchmark = benchmark_choice.selectbox("Benchmark", benchmarks.keys()) + + if benchmark is None: + benchmark_choice.warning("No benchmarks in the set") + st.stop() + + selected_benchmark = benchmarks[benchmark] + + benchmark_choice.text("Benchmark description:") + benchmark_choice.markdown(selected_benchmark["description"]) + + with st.expander("Benchmark stats"): + benchmark_stats = { + stat: selected_benchmark[stat] + for stat in ( + "db_factory", + "benchmark_config", + ) + } + + st.json(benchmark_stats) + + if not selected_benchmark["success"]: + exc_info = selected_benchmark["result"] + + st.warning(f"**{exc_info['type']}**: {exc_info['msg']}\n\nTraceback:\n\n```\n{exc_info['traceback']}\n```") + else: + add_metrics(st.container(), selected_benchmark) + + compare_item = { + "benchmark_set": benchmark_set, + "benchmark": benchmark, + "write": selected_benchmark["average_results"]["pretty_write"], + "read": selected_benchmark["average_results"]["pretty_read"], + "update": selected_benchmark["average_results"]["pretty_update"], + "read+update": selected_benchmark["average_results"]["pretty_read+update"], + } + + def add_results_to_compare_tab(): + if compare_item not in st.session_state["compare"]: + st.session_state["compare"].append(compare_item) + else: + st.session_state["compare"].remove(compare_item) + + item_in_compare = compare_item not in st.session_state["compare"] + + compare.button( + "Add to Compare" if item_in_compare else "Remove from Compare", + on_click=add_results_to_compare_tab, + help="Add current benchmark to the 'Compare' tab." + if item_in_compare + else "Remove current benchmark from the 'Compare' tab.", + ) + + select_graph, graph = st.columns([1, 3]) + + average_results = selected_benchmark["average_results"] + + graphs = { + "Write": selected_benchmark["result"]["write_times"], + "Read (grouped by contex_num)": average_results["read_times_grouped_by_context_num"], + "Read (grouped by dialog_len)": average_results["read_times_grouped_by_dialog_len"], + "Update (grouped by contex_num)": average_results["update_times_grouped_by_context_num"], + "Update (grouped by dialog_len)": average_results["update_times_grouped_by_dialog_len"], + } + + selected_graph = select_graph.selectbox("Select graph to display", graphs.keys()) + + graph_data = graphs[selected_graph] + + if isinstance(graph_data, dict): + data = pd.DataFrame({"dialog_len": graph_data.keys(), "time": graph_data.values()}) + else: + data = pd.DataFrame({"context_num": range(len(graph_data)), "time": graph_data}) + + chart = ( + alt.Chart(data) + .mark_circle() + .encode( + x=alt.X( + "dialog_len:Q" if isinstance(graph_data, dict) else "context_num:Q", scale=alt.Scale(zero=False) + ), + y="time:Q", + ) + .interactive() + ) + + graph.altair_chart(chart, use_container_width=True) + + +############################################################################### +# Compare tab +# Allows viewing existing benchmarks +############################################################################### + +with compare_tab: + df = pd.DataFrame(st.session_state["compare"]) + + st.info("Here you can compare metrics of different benchmarks. Add them here via the 'View' tab.") + + if not df.empty: + st.dataframe( + df.style.highlight_min( + axis=0, subset=["write", "read", "update", "read+update"], props="background-color:green;" + ).highlight_max(axis=0, subset=["write", "read", "update", "read+update"], props="background-color:red;") + ) + else: + st.warning("Currently, there are no benchmarks to compare.") + +############################################################################### +# Mass compare tab +# Allows comparing all benchmarks inside a single set +############################################################################### + +with mass_compare_tab: + st.info("Here you can compare benchmarks inside of a specific set.") + + sets = { + f"{benchmark_set['name']} ({benchmark_set['uuid']})": benchmark_set + for benchmark_set in st.session_state["benchmarks"].values() + } + benchmark_set = st.selectbox("Benchmark set", sets.keys(), key="mass_compare_selectbox") + + if benchmark_set is None: + st.warning("No benchmark sets available") + st.stop() + + selected_set = sets[benchmark_set] + + compare_items = [] + + for selected_benchmark in selected_set["benchmarks"]: + if selected_benchmark["success"]: + compare_items.append( + { + "benchmark": f"{selected_benchmark['name']} ({selected_benchmark['uuid']})", + "write": selected_benchmark["average_results"]["pretty_write"], + "read": selected_benchmark["average_results"]["pretty_read"], + "update": selected_benchmark["average_results"]["pretty_update"], + "read+update": selected_benchmark["average_results"]["pretty_read+update"], + } + ) + + df = pd.DataFrame(compare_items) + + if not df.empty: + st.dataframe( + df.style.highlight_min( + axis=0, subset=["write", "read", "update", "read+update"], props="background-color:green;" + ).highlight_max(axis=0, subset=["write", "read", "update", "read+update"], props="background-color:red;") + ) diff --git a/_modules/dff/context_storages/database.html b/_modules/dff/context_storages/database.html new file mode 100644 index 0000000000..5fe0b4ca8d --- /dev/null +++ b/_modules/dff/context_storages/database.html @@ -0,0 +1,843 @@ + + + + + + + + + + dff.context_storages.database — DFF 0.6.3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

  • +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 GY5zYb;afWZ literal 0 HcmV?d00001 diff --git a/.doctrees/user_guides/superset_guide.doctree b/.doctrees/user_guides/superset_guide.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2a4d2ce2e80e366571e4ac064ebfe8425d6c4aa1 GIT binary patch literal 39161 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 ZpIom`=SGr3s5EHZhSbL7H+5I5{}1LlH);R? literal 0 HcmV?d00001 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/_images/annotations.png b/_images/annotations.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e524890a8345a7f15acf071f5634524c7b61f4 GIT binary patch literal 64834 zcmeFZg;Si*wk{ln1P$>!Xs?cXyXTf;$8oLV&>F?(R--ha}kG?iw5h9T;GMfseh< z`R#L0)mQf~xLq|hwce@juDAPH(!HKFATdiX57u@P4mfAOL&7WKjW?X&#eMNZ%S#S47ee|=ucYtWp( zc=50xFD0(^)#P{$-Ct`iTkJ75GSF4LL^=VVwnjmx-f}JjMUm!lbmHd@@)wjO-2QjC zZ%6lVVKgi>-ICa=Y>OajRU(kII?NMBm zp6Z`g!2jpB`9A_x0e|2Blm5LL|9>lynGqwP-c*M&4p4S`kM-Ye3cg=()_p%tox44) z$d){@tbnt6pIzqGwz+J|X2OUa@2^QbJv|ebF{y4WF{`tBMzD2SZdImfO8e3MTA`Cy zP(MKWpAGWp=6Byy5+WiMT?o&Zi&TRu2-p$ta^k#Su-PWqE&)KZhc?+cn!0_HVko}B z=b*&}rlRYH0_3FRbpO4D1()*ogruTILEpnr)Vnu65rm}1@sP2Jh!EKt@4m8o8C_;j z|3-TQoGK@^7cvAsW;I>*tU{qxtepI4x&>8IN>2d2fkPiA!=YhFg=P);RTx>3N2$>9 zhRcut%<#1o4Ws2GtM^`!Ko0Sf=GcJMIk72HeDq<#zbpM8UN zF6e7x0mZ2`A1krb(gh9P;W1<+M_!R*wEY<9>Op%uq4jJ1C#O1>advQlcZIs4VWjE; zo0N%jTh@P%7k(f-BNN=~q}9z&VTHV_nEd)sQ^#yZsMh?hOsNQ_^jX6D;vhR_^}V#- z#iJk#>5*7N<^7sPl0zcfKO=;PGgvrs?Vqn>uZk29s=zhkh3z=zh2znm?t@=vx#wH1 zy5OG0)xI5^487fKBi*=<5mf(MmC6>vJRRrmp5Tx5(ZyJniPKpTqo>+E+NC;>WH+~C zaxy7=R$P-^Kr!9uS9H6hwu_Imjn_w5vl2}tIxkt3)RGX73z^gB!P9hbW_F}jTZ($( zqRnoJ0)H&e5bb9RH@azORat|Z4`RIpE>$r}N|q+2+43`~JPd(7*q(O}zfxO%h#O$SsnillYO<5d;C-RK&h<1@ZGnQ1rZU9X5(vS3ZE_T4(+FXG)9p3u!Bbms zHLbitxDP!LY8vIsmeRdgx4T%!fHvLwMcj5Ql=YVdP#Jc=`_SstL zpXmsp%yTh%IgEBmQ##>`$xO#^Rv~$qMwxa-)~O=(8^b5ecQ*e5CKT3 z)e2))=XVxms(^ed8Fu*y8y^A(dI(RC(Y2xT>%h_mc=C@I-ZHEoa4wZBu7|hjJy>ES zTs3OG$!SPdJG4`SOQDo>F`9>HB&u6X)z!1~1{I(5kWkEzb5M%OMz zFnCweY$F@1Rb-MIVVNit16gO0k#F+PKUh>Z*7cz|)RZeDl{>2bq)U-aor#$buxSIH z(VXF8SJcRNJA%R%t8+65tP5Nk0*3{Bi>PH0Y99%f7VdMSI@$?maw5#~`~n$K2xiM5 zjE4yVS`L+_n{7-hGf1#PBK}$*b8PEwk~qlwAq!IjV9DEuR*SVg3EXbWEX&Y;3_{s% z)8poOE(w}@EmK1Ls-~#p8OB1P390k7WaLFo1AbG}@^;gd^$ZF_-(A?t!7(2O1LNp5 zH^lN99IW+pD$~yuTK2rZ^q3iuo`wtN7m04?_e1?hkVB#$FZ+Xw8T85Bz(h4S%zuy5 zqaTvzZnZiC*MuPFCNQVY8;=<0Wi)NFVX>-&iO?13oaaJU!v~+P9Zqc~DE^lfb&7^Y zu6OkADMo?fIZvb`UC^Iu8!2CRHt15BMcHI7G`8W4Vmhrz6b{Bgp-0HCr1c)gb*eJ6 zPrO-S_WOnWtDA^@75@GXw;UiQMWlz%i9lU-GUWXC0A8Ad5+MIH8awGEnT@Kch2~&! zhOYC+k>eRCz!u(S4H?wC33u+c3cVcT)RN-DR{qDA;TF$RkUqAPcM}=nVR&3oB-#&> zf^!hW_^LxPZuD((?>ZrKsuLG_t^TZT&MM!$c`lG(@F^6nPJ2QuT*!F9Z_ApMnDVrT z2csRrQ>SWuL-M$opac%!wMEpKO=oX2b%HF5)FT@rP;NXRkM(M8th&lAAbleiPY_8( zc1qF~7+gNwRusef=SqFRy&23*i@3`sbypOVRg8MPp&(y|+`3uPguVtcnq( z;|C8$uh^Nj+7KL4yTv=fdM%CJ<3zyh!oG{|ZOYoh{A{R&Bth(#Ef2wnXn<(ySvBJnU*(4aEs98W)6#=GDO-cwOdm=r)|t{-UZLdENkT- z8E-G=$B4XtIwP0~aJPw+bxS?l-S`Ka;RYrUOblCp42QW zz?EjEP9*vVP)1~X1-97>anSQ+K1q^6VzCj(EUGWC9#afQ?&~o;2jHpkG2D^jPIItB zxwB8Xm3C_TPkv#KoEq`?1use-X~x7HDvRC)1#tW*6>dqCqWxDRIv9BgGkaCdrcEzSM2(dhQnZU&-F)yqh?I`g@Dc}Hq z>jMA%w?&$=Pnei7JbB`xJOuvxK5nreZjfYs34ZEwCOiO(Sl_G+s{DhRS+C_ydW>^ zx2^EWgjXe={6?|uYBMoem6C{;aHC`t*)onx5mx?PO)jTYR32#CksZm5I}Nf@I`--R zc->_+5;Tn0@{;axGuqv1S!GfeSsJZ>*5(-JnT<~ZQ(dP|4&_oOl*!5lMI%piP8wYY z-B9H^eh0>N4iN2qb=ZLUlD7+@+XBVdbwL$3lA{o{6RG42+0FJ6N*EG+b@Y)~D}Xf@ z*|o4j@FS*^0(u&?P{?VyT(j%3r{W+LEp7ijVFx$szAoiIu_Ny^U2w0#HQPBvf4E1`c4<(+g&7vX|b@DTN+wPnd0t&vCQGqccE& zuR0)Rg$sc+1PL^ZNI*cP^W0T%Hww|ItkHBzX3|15Dm@KDP+_t=GkW}Ln3uDvl3rdJ z{x#(W#t{nJFMgh8q0%ZUBAOGqxp9^#1K*5;>NnB?Kl}yu5YnFAjS)v3HyS!T{LCGy z>ruA=9zVyU*D)95yEH}DDk&5H6U~^cpkbg6ZA0U8|B4;Yw>A+1xEk0kx0G;M872D% z+>%%sel>O=ZO;FG%dp{0+Uou>;E&}FERM~Sub6txIpaN_9ez~*`A|Q@%Cm#k|FKox z%kkBY=%`)L0qvpbg)D}fEFtn6do|%xCtRm0$wc$>`a?Z*g%TBMQ0I2jMILHRT^M9Rf*8eWwpvH4HDRqC4`6P3Kvjh!I7fgyF`VL=zIpVS7Y!q~{FqCRN z-lit#%Ce`6Oz!w9q4o*OWi+%sPd+h`qx(u^hXfhtgcOomOz5}o-@DrGqh};U5Mqls8|Eemt-05mWa!0;PWw&Aqr$qHQ&9xVlcGygV3$V)LH-4}1;0ZM7nnm~j`bp*EAxdWx+P%%?qlLAHVT&B> zN~Xc_2oFtLWjp^$qTaG#X{MJIxE{%jK>lGUchr>_zpx@4ZFls&^yr;3=}j#(&aRVs zu@cGirKTl6(s;l9#I8XV1q0Difl?dw*@~Pq-gtw;m&s6zv5%PS}%Z1eS{s?^m zIdnpI&nr3Io0ik}kl(vH3p_Y8sm}d=6RI-TF#O#a!qA5uFw~mL~t4oLvmpJf&XT zx0A5Q4IGFS^b(g?2oHOF#r-?r7`IzD$AqOh@xzIif$GeA*T=!`KiBO@dG?%6@+uOk zr!in;F~dJ?blkjI32dykj~7`^QiY<4GBohY(;jkJBi7km6{&g#0(oPc&3E1(%u80( zh7AyZ1HK$w)!y!(jxpL$mJOPO)q2h6zvPX{{s#nQp$sz$jU&I!3)1Si2)O=TJOApNn>rcp2-z8dHU{$N`vCuO z8l?(QPT;j|f<^p^#L5%HJ(r3a^f1$}8o$Z{C;)cIQiS4-qGted~ zI#0RlLzSPT>Oz!|BvbuZj+r(mG!3}}ACCh|-5qWq@_MBG8z zKptuce&K3?_up;b(ie$z_<8<4Mjzg$G`;AIp~^o&4vS3zSX(1;av}pBb=p|Sk8361 z%S>9;pQLwH+N!D#2_j1fJUtowq;_Vgt+w<>)L(mke*Ia4*=SSh(=Y(lQ(dFQ_eVG? zmztLvYn~3yT)zeQb_!(~pd?b;$2wrj9*pj2Zde!YN5rsBXWEh!Y?VfN%>`(pYyoJ5 zRj5^69hy`n)UE_I$0*M>TV_LGOw8K45z7U`bSBk5h@<5vgv zO*+SD)D@7l>(w4-?P~XGpTBkC;sozL$>2q%>ee^SGrOpEOi89rC}c zEtLCm`TK9Xa&morhx!Gu|1H5Ji*at)Py;lMkC|foe#pvE`B}l&q_fdxf#@%Mnr`2! za7p<%5R6I>y``)0w}sqJkpt|qEV@KhjmtdC#_oAN%pu`fuF`~JzQPfw6QPo<#b0rE zJ(c`UH)ec3u3M-vLCL|g>j(Zjv5Ki9tZy8JG5$apu$RBOEQSu>*ng{ZkLR0xdDG0K z)jxLd^L0ATp2ca1k{1mqJR_PTxy(l|EWBV^hydPj8NXuKO-E&??1~>u+7dmuy0jg? zq|KT~XhsqD4Wq$k0w^Im*iT@}lG~IpF>-#TC={Q@M{qf_`W3Qtw)^xwh9>owT@Pzzb)eFro6{OxB{#CIlv(~JjbtVu!-c=Ka z*WU`1o$czuuI*uL?kU7j7E_RR<7>N+Az;!;-KxH6F4+5wQ*)bYY4rGH8#oPir06Ep zH3|?A%wXwFP1e&l_z{6wxhc4em3pJ_XIDqxqXw(yW-5$S5W$u${E@`8H_x zy0^9Uo~PAl1@yjcBfw9MdVS@*(B1`|*k$t*uAgNdVKWS#!lIUNXglGwJ%{8@7R z$uxsLlKW<)MNaBx_6)2HUWPJ`pr6!#7{fZ}P)5X{XaxWX=>_R155oonhnZ$(9 zWHmSib46L8gD&f`*=38(IHf|Rn-OQm3{Q^lho#rKjdDP<6y=#((g_4Wm4*D0hfhgN zkVwwc?kgrEcPskai2N$d{Ft#Q;q}+!3dh1bzwktawy)w}^P820(R)?PF46z0zCn{+ zw%X!f=OrD)tdSUwt=bN8%gLOt(t?=It^0aBn4=_IwcAQct#FhCY`%x=PO^0qT7YAF z!tB>jk{(L=YXKne!$M#9C8z)Tm&SHlz^^tzt(vc7R(Eg@oc)=(^O$!~T0NQzNdi5- zZ{xZ~0BoUG7WtIxdJBpTX?7pXeM5^J0Kp8YPekJP)Z77#G54QNS_?mgHAAY>-IdE$ z9`V-=+Q>7T^^5ZZqX^1R**+qOrA}1v9iujuq_lyrr0OX`>vBAB9e;N)pSNqoQiWsc z9QUIav*-fW?vkhDSAt2xlqC0f_D5kjX-<2RXEZauu+0oBqb+|rHXQ#Uf%YHo?na_m>FTNc}K96yls5xb=MnYnXRBPe5Wc{c=~$D852tt zu{`!`Kx(hf^l7$=lnCNxrv3Avp(7fRi}HNcz)APjfy;2Jfyf~G#`HLWZzCzGCH?GQqefP-Im%Pt(G z3L=q>Y22-Z?5!C1#Jq{iPZV;7Lr8^pf#}ke*wi}a+mJNzuha-uu zp>vOt4u;g1cjvYqiui}0QtbxG(Dvr!Y_2{ zi?dCil(a1)B-1yF5YJsG)8A&lgG=Fyy@C{Jiw(0yOKps1HmAUG1fLw|95Y=9w2JDM z^sWIeYort7IU=b3H*4PHh^b{!U%`=?$_3*bTED)?21DV?I~eq;JurDc{CeN4#wrJd z=ojpIMILPZmDm5%!jyDp&0=l+!^J0P)0A$GRbleY7>@nn6>Q_$!N=d_*EO=Ab(Pqb zfWE*4my!U%_Qsv+6^r|ja@kI^EE~>*$6Y;b&ZiN2-#d~G=XUg=reQ9?7m6p(e!x%u zQsdfKtck&|DP(bwjOhukb94XPv#%|kJab(9E^9zqbY;Qm%IXE@yG$Qj^Pg&{8c~ZH0K;A^qg;d`6ztwqfgJ) zYHy~T)Al*yOR*a2vIDlV?yruvi5i4ANikV2qp)^MC-}P@z?=kE>`98Q-NW@hwY5;@ zn@gtM4ac2Or;Q_`-@AIkcd;fraBv6k&7idmx$|VN8fFtGCA1mpI58_81i8Lgg{{hN zRlU;BwxO8#Da-dYCM&rz6wg8^whDU8=WIa2;8Wf?!Pb4iVVQ0-hxk!nP>aLM zCb=_)P!#TX1=Ua;q|F?)un3&!+r8h(kaz>fW=XiE)SE-c;w!D;B@G@XaP|TLP-6J3 zVbeD`zsj)m^)bfmNcLReMK&Xey_RU4qEZ2D>sA_0V~e#7CEZxNV?_Z6bIwsVQ!3l> zi>f`Mg*hUuq%h#SMM{}u?HP_^4^&u5 zs4zEn<32fzlK1eC4021B=tjh19Y7ulEX1Bjc~)F@i7OxLH~pSM9Lj8wy!XA zMi*H#8hL&j@Ov4|1^?=fXYyE!Jr$I3;yS?kuu>H>bG6L;MrdIwe|o(@%(2wjZhQer z8d%LJwcIm1NUSuRgKyZsVeR;i;S4=T8sY6ti ziY1_ilr7J*JF1#>g18;E@B?1R$KpL+FybSO>+oi-O)A5zPr7`fV(3_T3MVST^=eMr``~0hpFt zB(mwZMI?%c&Ku)mGt8_b{XJo7f`~X{>hB=%u_z`XQu0X^1icwJ_LGJgWcoP)f;kFZ zg>7<9Tq8M_cb}Lb?)>g<2ng0F_`c4H<1! zj<;kTdAXIG?8cAD`%zUpHW-~J=^SOTHs^UCY>B~F5^|*!D`pd$`CP)4Uc;9{egh5m z#SXvFeadg`+JyI9BZXI8RQ*zzBx?8E z>V)c38R-wf<`1Jn#KhI=BiL4YZQ#{iMb&*K0X-HmJOv;Ah}U{66_CrDh1R(ZRytjH$fof_xKeHeBbFUdhB@Zwz7}f;LJb zLe?O)2I~*!%J~rsOXHbqs4y{}W7g`{L%|dKGaoJb_?lqg>rCLYrRmu=*&BP3R`IkN zVkwbPPf^Z#_>7@OvR%I!egCrV4182>C(s5t{Iu>4%fi~VNr47gSYGr2AGqD6jAj`Q znOV!2tVZ$2XBkg|-9#sRoBf1-@Xn~Fw3tv6_;|rRSqquPns2BfAdQ+qT#}I_;TE~= zW-~UYa1V`JK-f0}!Y%!mb1lnTT!G75K039`FIQUX5dtT# zkAF9;UpvXJ)$)&5#e0_%R6KI5RG}@3m|lu%w{l}JO~9zeD=&s7bD;yDun1;_V}90t zVB#IRit&7ik#6IrZLTfSZMYL2MwS__yXqL>s{KRLoYDBcgk}3~C1-FpQt-*WiD1T3 zzj215xnO@N?>E&%4$PsP&q2`{xszhReiWIUrcI=$9iS64ni6{45DAHhkH1+0%*Y&E z7#!MzM8m=bWIH)*I&46K?`V&Jzm(C`cZkZg`1EwbEcG7E>GOYwH`dTLtx|Pl8tXg@qA{V<(pbZlp3|bdk5_Efl*Q zF{ful*JZU7WqsFHn0AQXjtFmCRBhgwzGJ~*>nsi{KHiafib}}d*ZGp?JUO#<+1sUB z%BpEm?GDK9H`O<|^@*aRwIA%e?`|C@yohMDz2@hFtCysMZE2Gsn7AXa3_t<34AI}0 zF3zAV#1);gM&Tp0dw6Oax%!f9tk5&v$GxYa-S}jjxquj-ewr~O#YWUjxnPYl)Uvoi zI%MwTVLQS}Va=YAhQBavy4?E1eQd&q(P<&H85u*xGtq`z*eFhPKuX=~!azHgS3yAA z;^cnOEsGHv?gR7`^8jXb$H6wRdn*4UOZ?vO1teIl1kMZqz=W7o2 zQN%*A&{aoF*0hq^51edP>$m7f@GrsQ1LHOa9<$qFf&1(p&nk!|)_JjBWfX~;JNW&y zc@hvLot{wl$zPT&qTXR^lOyF>JYw4$Ehup%VvRLuh%&BNIeuSfeUtmk*G`sPKaT2%^ zhx_synsAe_mcdXD2YKI~%(=VG0PG%RR(0Rawbcbi>)Uc8=99oew3XBG4aA^G5rwO@=Vj!`ez=8kuy= zBEMxcF4~dwjkVt>i6mPEPKLdWA_HG>JU4{QT-0plTOy?c`7*Ab^S!cosToWA z(TDs|Ef1M}u?%?dm~zn|t*HBlaxrs(|4%zu+2JKH_9_D$RZbV4&^9OGF9s0j|c$hzCqkE=+k zfm?d7_pS~X#aHZ(Jj;)sL^1f2JTdt|?lGUwJS^8~a{Xv2+iVhUdtRak&ZjV3PH3N~ z0Vg<-+X`RZFkU^rtw$c-ue0!Vz$m)bxIUAT>}r;ps*@#lquWVW!e^U)!iG1tk*0%5 znI1Rxq{ajsvAR9}v{8VMxrh!CWM#EA7s;i>^c5=MJ+Kj}@9m!%Bk^3k$Hd3wXainf zfyJ*Kx1Mf{7mJ-Yw31fZYz0eH$d zgWgUtk7fsL6!%H@5AFCTTt}e-ooKM69dg?wGtsv0d_l7{Yklyebs|IX??VV6BbC#6 zS~i^Dy8h`ZXo<@B=Klx@2Nzm9 zyB$t8tQ8rg3B!s(-kT1dZeM3Q8LKvcZalDXAoFoDtPtQ5?e3wYq1~4;=J{nB-jA3exRk(Hf#hRrrF+?39W$5X2YOj&lK z_F2{jH#KAe&=jT)1PO1u>|Z^D^~N7U#QoL;nsDv zlsyG29W8uRS4nbPOZn4xwwI!)ICgr;uddJdxXeb-Ms)NluwZQn-?e7_P|A#XOEngP zkC=cA0Hhs1i3a@99WRKm#kvXWRU~G*v!U}TY02z{E@-T}oPvyVMVbSSX?E7rag3~m z!tJxgpMko(Uv?eP09GUsOPSlM(`;NTC-NZ_`$NMfXul9&@@E#Ym;i&>O_^l&NnDLf z)?i~c&*vSbHG>nP?Exz%7PA4Gs92`<%V(y7P7||tI4Y(=H8>~5sOfS&rpGPzB6fZD z#?c32jN5pJEw)(PMG)zzA?%Aw`>Z{PWoqbzGL=y&X~uw9$dg0WWTRJqGB!|z2QWV748bOxUWl<~qx zf=(tOh|EaQxBjSJbAxl74kX^Gz@U4Qi;b}%Io@i<_jIr4#w=YO=9A>lE7iI^L{V}x zK=RZ-0AJ@{;5wuPI`JYq$!mVk1e+3Jl1LYtP!sny0x^n8K^UXJsdN8w#8_K{OvpEn zqEd)0BP(kXMsgvB_5^MO0L>q_61^QN`2vQV{8TN~lYM2nOI=%vLyM^-v9xcS_5ij_ z{6&!-_gW-=PdeDJi$O{GJ-L!YKtZQxifZp95>PKZICMRd|48W1+#HMItB8yO2&&i2y@~bsdL!8t4E6M zZ!A?%H#zyf;)OH2dYjI={6~p~wC3~gO%^mFF7!~v5%q?RlMPS{)eIZrhsTNM$1rei zX8#imoxk7{NQLWq`@mA;b2~kix+psRQEUFg;=ufKg7X6e;fwtvvXh9t^|KM{eI##A zT23nZ-|NgtLyQzDrazZFg%pZM%J>8ed|xQ8=OSUV?_9>wTc%AScK3L6t0=f#CWrq^ zW9-MyE?aLRpE9x-xERkuRg-&t3?2{-NEh8|SFKKXh1H8u|D_}fjbA5}4FoDT&QRRP z$M9Ik3Jx0vD`K-l`j~fSUf7n~9sPn?nH?>z-t@-@q!rmWEtWsXO$~4+g+oo*J*&bU zCF5LGLCbXM5%q!OWcsG}#UKNRfuJ4BPl2=bcoF|gNo1yaJXXJR@9uq9O=>OwA~m+Z zwe*X7b()9FwuSMvp$eSxyI!dQsk<1KWb`&(O2RXE`^>CQ`q_E=Cz~=!Ae(5#4cgh*dpl)WbbzF zIYSOR)5(+Ysc-u5T0tTtQxd&~WzW7Eojg4wYE4>WFjP2w+IYgqxQMU9B}}@4EDF z2)58_nRj|=PeZqSQ6LkxP*}I{R5SIFme2!SL&Q0TlwCkmpvK;exAu2`aM&kyen#y>kjy7`BnX@~J~&5nO|xANGt zM6`s8CY&GALxzAY;N63!dElrN4xf?pc;ERb+Nwy~i_26eab@Gzq`E~^_d!DiT^9>F z7c|E}X#}Xz+ic%|EJOr9{><)(9H&kKZramY$AXFB5w&@GkE;EA?(rp#j1-@Np5hX~ zjFY+}z-%yd9jb6hkU_cX7g`RE(a8sWE4_T$P*pC&fa|mp8!GHTmRth?d%0{K@JLE* zwv$#DJ3f)EB)gXkWdxtjZx}rvcH)fd8MP1oYwc>K+FHsx_T?5G=`QpYei@*nLyNIP zN4M=8SBA2{^gLkVt1x@D!d3Y3I>!F}=l1Z#_f*ldm>XXF>V*#8wR*BeiUz*E=h>o##TBEPK(_M#v|ADSVC;fL| z9s*LP7xlZJmG^mS!N8{9n=T?1qUuOMX=E=Ca_D#RHt=yd+DBx6TFE)Aq1S_j2e2D8 z;|`KsCxhTnOsj2VKW4RC@WZ!Sf))K6e_BEJ;nE=FBk78aN}OoZ6_@-Skc8H;s?_*% zHu~_?K+D-6%#)d*@QV()1^}L1MZWc?Gtw&|T zc&+(ghpC`5r>T57Iq6gC$U19CX_==E!1&N;2j)?@H#C}E=l%`ho|;r|e`B~M%MEfwv*Z++mjCc1rV~Iy zaD)Lay(kk1AQy4uq638H`y-1%vD)$8Q!F5wEOI9$5FC-Mm8m^xt4m}Gx7?MLv5gbt zkSkozv4T&ND>fUOzK|U&#X*&u0f|xnCZr8!PjiUV?7V+o3SuEAGjd2@e)+Sa;mn97 zAb59H`P4c2K|Xjc`r?tQgSUBwwb^)s+drEVVoFyWNys$ps-3J!_O1pSi?cfR`X)ql z*mybF<Dv>2h+TI8RiLVeFc-Z13?_GKK zrd+hMZ>-Moh_No6MGkX2g}M^1AQ);toC#>KX(+cY3NA}~lg)KHjp@t#3iauK~YF3Qzt<35TlA_Lzr-HMLx!{f|og$l8=j}VNNdu(pfAH5YIB2cJY)65qFw;SM!s@h3PEU z`Hj2blMhl~W2zPBqk9X0r^%5It?Js<{$^=0JHH;w=lsSQIaHIzD>dVZk0dkGlC0DN zF~Yq!gvsHU#mHm1B>@=}Rpmo2soJG)JRhstP)n#aN#%?AH{v>?Y#(qP^Z%*|MyUAT zm9^>Jemi)V{lT%X`2z`RBJj?bC&px1ccx(8;GV;ru1)YnfHcRwkygEXFP?S_T# zC~RA^lQZNJvRG?{_Wt?&JQkw(8b)RCkPB=ge*t7-W$6o?<0<2`S4|e5nAo`_v`xMx z;~G1>1UDj9-Yu|_LW#tO>tG~TW=`q=AZIn(xh0$H^ zwsuD~Yth)7o;4|P*(`2Iok#fiMgW#=GX&SK1$eYeRG4?4(LOGSwX!PLd#gVazutRB z^Q|W&Q>VBIeAhk$Iw^@ReDM0bprzitQ=mrG`47s6A9pKkS9 zR`xLaddd$!+~`;t5k-P5S*Y<{hrCR+N?e(vdKb@R534o`M^lgS4VAl8vVxPp)D#}a z{C*p5>)_O|=<#R=`)!`e(5bSUa=D^JXO^mgY#ph#D-)`x%N7o^FQuf0>EJq`v1B;4 zsxpiu#NARmg0el6BeG{zA9RgD&7z35_lstHZ0-9W4dJu* zYuLCw6hCX-S(8Kr-gD(*A3AgbxP}2UK=9|;5$C3bv4kAZaZW*#FL)BwNG8? zGY+qN_EK&Ey(TexK{r(_m=&ruyTuH;z}0Px;_7#l8TF)n`G~wPg(T=fFy9_qNpiX{&b%F>;+#^q>cJhmzY}Cx2)X#@)O&OEQ==!9@{GM3$BsPdUtP&vTkMj zfiuF0?uo>YCN{mUt+>Ut?cYn)Z#xOSORdeq!z2G1#H+ckb+x_WvKf_HqR40zkJamM z+*>sGG5zaynr1nuNkKG{-|RN%*wQuV6BRZS?|qAyvY#S*U~#{+^&3uST_7P?cr5AB ztZ!z$>9em+HLJAMFCNvIb3y^3b95!PrVyaXH3ehaUHc`Jl%|F$ z8@Qb{zU3p65N_UIAV#HOmB-HqPYt)SqPnq*S9#*0NM7lCL>vy7r zMpmknRYPVEpMDk9LPOGIKL%fpgxHs9gMEGnQv$+$`;LdLvS+AAYR@TnJH1{{mZHHVLP}pOFe1#;}CdMK^Iw*oJ2RAlc&q7D@P5ftS85@=%Kx%%(*~V3Ejw4VBuR# zaod-z()Uy8TEN|g6>YL zU7BRAo}D(~%r6%fJK|Ly`TK7k&qQgWJ%ER$vg{OYo#zyO%ozCBhh15#Bns*w!pPx3 zUsAZ&9uGQRrU4Jo@Y#6uYHCd0Fz$BezI#rtCej>DUsb)C?c~SzR%N}49PB;Q-MSE? z_LgdX%670ua}79tH?_|(01NATn}uE2)w4-nm^P2r)-(KLgwS*rO1~1MKa70kCM}(E z{Ws!%?G+lCfO0e-w1+&h3JXuJTNB=O#{dFuU8xTh#M(HZT6Hwf1{pO794q$=inw$5 zH){ZDgfDW~Hfu7o?%xH-DIYX`PE2Dys5R&~&lxkZ?jk7Ha#*>VYHi{@T@3DSbut1?n|Bn=62U*dsrsY=v)3pgkYBU znumQ=@%8Ew?d7Vv$g^teLy92|rRgxJkP+ z$jaqgJB6~i4((!*8UAX^UE9~^u}>@QY5xR2cpl&&7-`~}F|sgl6*o?P;o##IbtB^4 zRj>L;*?BTyReqLU_gG}K)v$XZy5$_81eNg~XsCVQm`Hp40l<5vpV0fJgl|V1g{)xN zHaKLtDS7+g3+!^PEg9!XQ}^HBDZ{Gn3|JFYPL1}`IkbFo>(>T_4X^5r1XPW!eSlLt zp&IxDRz7#PT{dYp1H%DZEW!HZhH@`GotyK2gfMj=r}zvoKr&~0x%}3zh4Hm+!hGnu zAL2_X3jot)`W8Uy;hF$6o1Z@VhAd)y)buS34;B^hTaWEPsGA?swr&gV}{XZTH z34BEDey%(BUC<<4)_(~b!wC1R_&*T|sp`BP zkSz|Z8*Xrp)&EyI%~RcEFyvS=Gnr_{OPJelVL<(=)bTloCarNc23=Hn(r8(`JpOFe zMU;acM0r&Owx_MWXM{>o-U7gc??$l%XU3gc882YAfMHv{s|Vf*S*e4!C$I3%{;5?tN3@=<*mMheNWU z?zJ67WLPI)d7PR-mbn$oN$wvHjU}ZYC{8tD%58F1rYCk)SVyeUa!~HDF)Zur!k0tt z7a8;Hze7(#P$kB`zkDw7c@HPiHS?%)l5~3ug-RSyJ$H!q&MQYG#!0Arfur@PObFbCkO`Ui> zo~i`{K8!x&l4s_D`-{}lEE;ZiZdiYl`y70S3XhYwNxi4g=}-?%e{*1`W#0Tw+0ERZ zW1wuWZ$5mh9k((K|5LAkY-8Z=SJjr!0Zo3SIu_YEch^+qxz%Z@p9q8u%X-MIgx@cP z@g}90t+@VP7?)0Q?uJo2BtG+yR>CDuC}3W<q{)TMFxF?G5f#_B|I8%%Uux@heSkva1sgZ@N@IeI)DGnQ4ZnUF&h6 z&?`w?+_Sds(sL`z+N%iy=oGwO3>CV^4F&z{PbCB~XKR6IGx($buI&oYVGD$}zduFb zF=Pp1T7{9xQItF^j>E@8+h4OkiM)C4VAsNrAxS{IF5v(2%c?;Xk-Ne};FRI+=cDWy z^(!NC4WAWZtZcro`|Rre_TM4VuW&n!UM{?E12exo?0LRzr5M8P%DP-VRKSg46(2;N zrxe?XmBhxvQumuN88mDRqI@nTJRgk4kH|OTp>Nze>QQ4Riz(CKB78Dc#`*uNKG$|3CKLGODe0 z3)|imN`>OC1&X^nl;TpPxEF%EyOdJg-7UBmcPK>y!CitC2p%W|w|wc|`|NYhH{S97 zegB;GZ;fPRtjx#e^Q`-txAE3pTb5obRsVli&G=80V*?lUKfsO+%>So%Dz_x0qAOto zfM`oWI-^%db~I_cPQ>y}tq?nf_{zm+V$1kHD7|Y~v2dw>0Dl`B?xX zG_P{`El)1))>&WIX5%IU#|_F4<2+X9-9%2b9oryIAinWbH>I`6b}a|KUpDVCNL6uh zRC$_nCgmiiw#jee*0%(D;5lhHz{%R@Jz+RLR9Ts;GJxDoEF~~D^gK`T(odPsu+yYt z8JI1-xAX|=b*r#=L+$bmj1EQta_KeJ5+*|!RqvF{W|EoqdzSAt=#BJ(%NvVIml;xD zXt0?-CAAn<5wZj=kCF^V%HlrAg%P1rJ zy2){wz#xhDtEuUPehPi6@nO}*D$=4%>jpPKmBuqL?m2xX2R;grH1{wkdO3b?@GvnX z=Cnrh{am_TzqKg7Lt>4dT1Al_lg%(UkL6^V%QrNxq?@%UejGzMfGC@8sV&ilO8x%D z(OMiC!D{Gf)hILX0I+6y;GX|g)qFtL#KNdDoO5RCgjHSmQ>7i9X|BV-{sk_PuAxG- z*#dG!41(8Dn0=hfY|_ZPx@Sac&tkwh&iMwamo6+z?p{@kQ*Kk7qIyvks<%$$icFJO z0-F)+{%4-JE4i;i^{usLf?DTyj87|tw?@IBD}QI5ig>by5tGRx2gFAge3PH>0g(RI zh2}#-_>li_Kj1wr_N+%^tq4ykmKoJv>Z=p+z4s%2_LKugHFuPFUKm@{4z8l7prVS3 z0sRWJq!;#dS;vvpvUBPJ&K`Hu)J|H)cF-vMk~-njhGAIXjz`a~{0H7YRJI(;Q8Q$z?cc1C;+tX;- z1}pu_3HLpIWI^Lj?z|q6lkIdf_=uE$mWV;in#3hQCm0M1b#l72nYgy3(PU+j=nrMh z(=yU`Nhfhb4gkL^6Md(1=xWWz{NIxH7&yg&O6!JO5(DU4GdWp6+LuE6Kr5>*GJ|^y zywW8%MUjx>0p74tmLMvU968|sML&o8^I-Py3TpzWW%E6OZFq1q}pGOvlSPb%&$IK!84tvkF zftpoW=?4^%d*?!L@6>gy1sH$GF1P*h5 z7K{8FOh_k7Wqx&gktdyWA3|XeWHa&R0yd2J^?00Y*SDYNk(CC<&H&@#9eCTHs+5cW zzfc6X#qy_1EH$D(r>d~VF2%l&-FFF}O~G%|KB!EE`3BLxMMl3E;4qmjnHh>#ZU5{z6RSk_L~LT44>w0ZT<_+*r8P?Q;^*5rj;gl z$&eIuFbqoGuMKx~@)*$2G740RFC6Amsx&f)_U0LT8_wB5&LltFc=ozITlTTX9lKJqLO#(dSU}-J7&H>pDAE zC-=wux92-wYXe+#$gEfWUlkok2$ml1plVU}*N_tP6jZ(X#D<`lR_0GO>h%ub)bC zcTx!+?Enj<-1@yM)xl-t65e4~+a5OI0b)natuqRJr5VmfIu4jT+yd%R4OmFoSxqG6 zMyz4VB_SZZ*4IP&{+8+FCUaxq;xS_BlGybWVhH-|4s+H|&I(h)Z{9%SE2n!bEV)$S zCHcXOsqRaxxA)HVoLdCPX9oh=qb-MYUpz7WDrdnR*}P*(quQoExsTi!^@Z?6i>++? zp??(LCnoCVVjvYZ57T*rpD5ehQH>(}70RX@I1blN9RV}NO>^2IKdv6eLheHb5h`x% zzP1=nA84%XZjH0Lgo(5WPw9Yg4lGgk=2(CAEi(~GJ)8?&MqjacZKKf}n7NZq_nhL# z7&u+F>SdtqI5Wf}61HpFdbX{)a7EhIP3RQRqfL=?fbh^-cY|i|+6sKb7gdrrqNB2d z|A1O42>Dzv|61`_^E#8MaH={TAzT7YS7@>I7Q|XCBDl0%9L_H(L){V}}4;Tx}CVQY?A}>uIO@IJe^Y?U;hp`@JQWRWJDyX z`@!QaCU+km4$2QO;KEH0VfqYTp9~8F99kEnmu_kD- zqT6D_8K9%G>*o6>lyOQ8=K-c|az=V=aL5)O%sXeRoOxefL2_7>(G$H)mdDh`8B_J= z2Q~egBg{0tu(FzTbG$$g{0xOibgD)dEM1V^(V*TxXkxi(Y*?E4qvY}!{o%O-uD5R5W&Yz+p#)wAU=v@~ zAmHn&y`sKV3hJL=!*S-Wjs_b6!(oz4r--LtveC`c{=zr-JD9-S9hOvoSh1V#84=_D zBA+u)vfIP4o=7jIG8%;NymE)S+fJ5uGbR0(+hlpP%I-ZHfO&GJarcI7murb`6w z&cfe`OE(I6r%C||<9$1YO(H9Fx!q*Ybr;oOWUm=AGMxO0ixoBe4Y}u~9o?L6%C+om zX+o8@X+W-~TX{EqZjT$|X2Syk zgNAH&CrA;&`RJnx>B@vH;iXn;=4Ku2AF{fH+EJ%zbly_Z13@6Jxf zD+(&@&YKT)uJ^2%?R~C`!*I$^^dbA(^mg#@bV_j)YBRDzkWRd#wHf(gy6SIyLa~Dj zb@gI|FbUdfQ<$*3jk3s=7cmw!Wjy5lDcxee*?DpC+4#i<2XN{FD>^K|jIW)4(u!yj zG+mNw>1()lBmlHM9wG9w-451<7^WZ*j0Y-AyUA7Rtm|p_aqPyraP(E@O`%GrpdWWv zTRzOsv@XLpH6PEcqo#T_A@-u0enD!4Npd|K^bk>s_3<8F zN7w;e$ILQJXD2pWf=^I=o?&GF)M>2mDIi~5Wju3QAug8u zghUuVBi`7PV<9$|5{ySUgEsQTc(=}3QXiA?mVj(W-i!Q4x?quQB%JW9(xRP1+Y=RR zTj;gma=a-vSQch3_P$iGpailm-YX1{yheca9-2LKW@8I}Aovecv=s8kWJpu%s>&)z zwjM|0k0iribXW@hMT!t|YYJY-`-i{E^TP9v65O=9@=QMrTgLNsGV9sTTJu*w(7(#A zU*Q(Hj(5*`R6Bz_d#aaZq4w}fIgB4xuPd0Wi7i2tdgZ*XPP8Txfma!R#G~A=ByUGm zI%jsdS)Ep?ALNqe{^UolO=JCz(0lbY_PGJkbNpyv8;$B(H)DXJ&2!XIxUVU*VADan zmj$!_^#QeD_38?EbL1s`;?3tcosk6%VMS)X)?esUQ`#aFW|-eSM02=+`Xj`ZtQeI- zkX*HtNI>p+Q?q_4RJL+Wrm)D__}D|360#^t1q*^KPSmmtz@ifn8xHlY|JV1$i6>aFdl zzJ%d>xf8)@B3jH?)D5^DsJYFL6Ne=si!u#*!=j=<^2{1o5`=_)zlo#MG)fcDEalsQ zBwJ|hK1Yk%=A|_loch|G4SyJp8{&kVzxk@-rw*yr{013FuP2B+Jesak>a2V{h;q?u z+s{pz(L!1tkU(Riq=M*^Z-B*=dgve_#8uwn&?S4+5}A>unI^*FxMK?D8)fi2$E|B3 z6*gGkg^0ooFZID*?AGHTMwkRmcela%J^iiON?}#44+{-^r4rrB%6P?rZ#cluM@L?O z_`K3Wp)==A2tVgoHw)iN%-F_Nn!cNKsN0aqbPA)eKN#2)M^H`A#=_|x0}>*~{NIX=dXC(ohb%h(8fmB}t(tgb zSWpAtT`xvkX4s*8-1&2QEfJ5al7z@fl~-f$J0TnReeHAWm-U|r+bRd8zZWWIx!RxD zE|eLlcuH|tR%EyLKS=%IJ#vUsL4Q&3T*Knbm5T+z>3ET0w~)JXN-SRrSG_2>8$E7u z_riaTcbjuxX^|sK(Vgd~xux^YYw_~bU_-l3IM(i^AeT`TCkf{BLJaaKd;(Q*af6gw zf1v$tKz(Mhg_8G$UkA9pa=DOs@EN!v(S-PkD{_n}dejR6y8nbz1QtjWay*L9S3G)b zJ4nX;{rL8xf=6D7JP?V!m;)=;!Wk2#Z7?bCyYX+jbAfJ#g3@*bY$L!lIT#U_Hk0hKXT^b=2%RyM)oE`6w7+{-yHc zBXsv&3p!77Q;VWbqKDA!@@cb;n6G~zDuoKl@)*1ocFWk9D6E7JCuOFbL={MM<+pJb}n zUGY`6eX)~3#6x&;DTHj=xg5lR5X7(Gu z7fXM%=;*V@Hfn+_$a2jdcf>e6ayO~s2`p|+{!$#Ore>-@%4#-1YFVIl=+3g6Rv(lvZG%$OAk4n zHTsh>k1Z-8OB3f%{?)^#``WtIy}=GS(M#tyjj0KAO58Ix3Q3&mja842ss#p#tepEq zoa6j5uMmC&?$^nY+I5Uf=&l{Qcb8sxj2OIDk#9jC76)4eUXTe5qNv92#Mqi*@GJ(* z+itB+)ZP~)Ua^dlgWUh{B-0$tW^f9*wj)Y$|2 zjMjV@Hq9)*s@wa!DkEC#85AXT&4_M8mQ$O!A=~$z@VE+FqrU8Nz!DYHl0c*-9~DNK z_;pUy36qVg9v8vlqku^650k1hu~EWNe7E^QV`M?i`8Yeoq)(_Oq#(ry^^7yz){(A5 zM6JkbZQyQSGR+jrCtvp4>0fx5N-(_85Gv1uQSqJ|j7J{!bh8h=!a_)Ig`HK&K+!ul z3Mt|4@zu9di`O4n1?j+}yjT(r_~(b)uC>Z^P3_RNnDA~GCMdv1@W%tKV`$8NtVaxm zUBY;_;Iks*O<7--T8vCnm08s3iV_pg z{l!itw}Ne2DNw3QV!iYbq=w?WYy0?oUe<2m&Ho4nf~?=l|wz z?&6|l4-~ehRYYqfi^5Rlo=6GsSUG%@fkr$xi#i_-*Q=83yB|>zqjk$1gnxH|{i>1O zr+HXA4yol95@ZsfyrIZESl2Qk`-?rfC{aiKd?l<#IFz!qJrEe zxq<8a|AB0lux~j&5P0dkALE*7-%)rWmng0!l9- zDz&mLm0D6e1rF+^l4W|r$VW#lKu?GFLbj8&u1^*-8h}JJcxqz$*8_Vw_U38mA^Vc| zR;^#`Hh{v*ihJS-ah}1x#BW$MUg(}X`dPJK;$l@fx#u1AzQ+~CyQ5z%hc$N@8a8mZ z%zjDDz$R7H;46#(E`*TAtb^_3Qz&J~%5yk`E=}B2-pk$I1c4DOJ>`{!)E=(1*yvh$ zpB(W+qS8Zt6hTX|2v8mj`YiX5h1)bd?Bw#eC)pWyRwqg?@AOg%)V{WwH+M*n2I@^o zKJf#-R3ZYANCg>E3ual}lgcXNJX&#_+*;P5{-~gjTXc{e^6WQGa1;K$lI8jOJLfv2 z(5&ORxX=#w+sg>%XxI4SvQ$nl#BVOZl{rlizgGrLd_aU|jzCL1+URRrWX!K!b$<7x zPlwr0*nKw?lR6ltt}StkZb9MuQqq{Ay9?(yh~vs$Q8#hh{q`J!GCnJcM^CX%l&b_x zL^`(%&*ca}^sHGP;Oej&@%PwMw_(C~vFei_)LF~%j>v#d-hideDWE2-$nqYlwk$Gx zkDbW7bKaiX@jpXj#e|$(5_s%7Cr#-2JFcG-v~*)3q-Mu5K)jIi%Ot%m*(6x>%BijV z+$Jp@_;HMePf~B$8J?((O03%NafLTIha^rUA`J8_*zg<8g#hvRVs&8{DH&@Q(m2#{ z@iB)LQkDyv(A$Y4%Vh7KJVQ^fM2NrF%;L>Ef$e)?D5`HclAGz`A4pGoYclhz@)7+4 zGlDciIOU9lS(Mc!?8>$Ns=Mov%nZu!QM9$Oj&XeF%6W^)^eCKGiqUVu6Dg@FFd4%% zeN7%|rJM}xSVHkY6O81rX{S0$m0`T`#>|!lR2d=wlQPl5_=~F+EjMIu%F~J?gjqvv z^uFBEX=Y3wX(vthRg24z6!2<@%{37XKPOm=rtsE|6mFu!(6nE2EC4P|2vyD5|1t3l z+i#Vj5+kCOzkOYdfM$AF>_9GWJ64V_-uPWeU>lZvqG~^ zS2e@yFX1m#Y{PzB05ovgRkUE(yEWx`w5oN_ZU#3ZYOXoBb$p znM2nIEqhy!i1jM8iwN`*iMw1_r=@fL zHqIpJN>YrgR|!f?IJf2lhLiZJ>IZ-m76EN|ql^8}AIH+OuK@A!yiWlZVXwlYH5~7U zqWiX7mv3crmRdk5EuXVGpV=6KWsY8xout|!b(SXBM`LYRMAYU$MXNukla_cC>;2yE zwK1Bgt@UmP4>~k%?OoT%&Oh@hp-d+Q z!k)LRW`+MuCu;F=ezeWD@+G6~8Gp5`)WwrTsq3>H%~!f%00O(>fJ67*D%@l3hWZ59 z#r9YHgTqEX4(4%h(TGUv=}otY8;BGGUkJA~f#1u5g(Sb=PVKjsJ~@qCqjo+85m;oL z@m0&CO$FG=K8;dtnT)EzZ%r)-pFw~Ov8rKKVh#aB=IHHsM3;*1d%k?MEvuH0*m+xs zo)a?^v?WN1$u23OuH~@Fdl54!y5{j$W< z;rzWK#o3dVRhGUH0$W=;>+@1E#@uI)xpVRg3t$2o7|!I|E#X@9gVkDpX3`?Osjp9A z{KUl2?5BZU+`a~#28m{+KIq#SSvAMCm|kG5_N8|}&Rf$Srigu2)FM}A558@L3%|{+ z79Xm4rDCpXNQKk&unT2nV94vS2e=R0)SqDzh;6(Fog3q2t=6a&i+_ke+S`|k^PW62 zdu^RmvwN<5=?5+eSfVFpjLdj^*(^_7(z7q2mF+%uZg~}XAvm{8B9-NXWCbh~2O_H4 zRrTP386haY`wDE@Ergk~tG;sh?e#j3b5W)U#~ldcIoqK3R|ZFt_zHWGb%O-B40s zs)Sy3IL)*9GZ!7zhOM9;*@d7auYm_EWX4!M|l& zDM3gyqA;hPnMTfi4==Zq53j~SL^@CD`DnS7jlX>8x*(!Itlh1BFu%9&TL4wLvr*!;#xf6NROJHabfVpgT;k`aqcgNDfa@PB z)WhB>G#ZS~%Ada>c89b$QiV%RHdV~IfsGnCMq|F+UbTtl1(+1^ERnUwnm3pIjBTU= zaWcb=l!SI#_|+X4G8S?^XNe0qW?`O4h7;^Cs@Ch=)%Xe(hwAs!8{Vp7rMgMkRu^Ry zJfumH6o61jJl1$q?;qYDN)phK4R)}65uA*Hbg1ZhIr8hYlOew0D0!s@i|*FM5pk_W}7D~_!F}U8kdzl5@DT=sd?qbE5;yyl+DN( z_NrP0KUs+V+nGGJOo4B^VteA7I0)1__$(sWv~cwe@d*HOwjNb4v8GSAa~f4amxB&)29V6 zS1nNFGrr5*C;|51BVgPkLpw67cFQ~(eVna>Uy%LQ@qyBjP*Dw`gTlx=m&XdO(VLx} z4JTFp3jv_cdY$*z+XdX7&M(t}~W1RRb>zLBk64_+!zk+4C6fmy#+lg#*zY zyn%mRygZ%rn~1nTPtzOOGLaB+S8blX=6}+vO2qvrSCMPds%(*#fT&f9G{J}=CJA=q z6V$?wiI@!o@cPJPBaea@nxHy!o8tzKy2%*zP`lL<_P_E6o`URfRRpczsEtoSG**i! z$>P1F!?*I6)t$+uxNb}=dPMBJ5p}{#coqIR?dWduM!s9F%%t(<%W>ut^sMX1{QHdX zlN0l*_L@QxpPTsMrlvLm@X>Gu*hLmMuBV+?``uk$Wk)}^{Zm_uEUuHmOzrj=z8(-} z-KANMs`_nZAQ)GNIik&=v3$))Go0V>MF}&%Du|mT!G|`o4$z5F!t|}Ec`C}C&ZO2_ z4dTw+%ZNB=4o_ozP*#4>vI|V72eeCMD;sPD(sP|>GB&o>^>a?QAaN&M&B{~Z6f=Xc z*+z9Peld?{%>iHdSkJJb5_)gb*9tdori4XoYgdfIvMo0Y0gk-RKjy+OAlt#eGw65Q zuvTEXpz6(gtBLtn`U;WM9ob#vPzd#0eerwRXnb4^e^tpG9v3QsA{qy=XdZLTJFa3!e zm>?XI@~G(3kkt(>jm}0hzJ3%Dslf+vPCUA7r=j;3`vd^if4q|q_WfD2_X$NFKdFZ( zZOo3oGoVR!lrbp+aFP4V5OYt6tAOp9A}&;c)tU#1yuH1bj`E{v3ADVDmUBVH#zAvg z8kE~}()DM=3p@)H*f)?jKQGy<|Cki+yhCWo>@gW>m0hc6C=vce5YK zE<08^DRCo}Y1TV_k5A6`v9lzxP~Vz@VJX^@|E5rpwZR8+%Bh9Z1GbNCmi+eEuYbv_ zc0UHsQRG92?1gJt)wXj#8^n$v|=6r?kTo`+V;;6qQLb=b5jR5)3mEUZKmn(a}OL zcd%K}eS=Fw!^UWp9eoC2*{*n*Hy%5Sd1fPu)TVvJ=iXuGbdFD@Y%A=}j!i!%4Cp9* z;dYD*^sFz1JBPFSX_HU2&lQ}dr_=L2&?~8tfpZz9gN1&P881|IuOti1O6uCPNcTiO zh$&9B6c7ee9Y2YEQ+~Q!RzT0P@qDKJIvQKDb1Y=@TWL*A8=4iZpJ7zH8W;Oknfx{1 zE%H2ya_Nx1ud=G1DDtqGYx2zDu--QDu&L7=7=;CHwO|q>J#Uo-X_ZTs7e&qorn0#Y z1CoG;J1CRgIm?81`BAs`H1s}3UC*WZJ|E`egQ!gWuE8JUHHQZApt1yz7QAxSh|_Y# z0+m1EoLelA#`TvlCzjQM_!R9IcCH66ax zWVP-*0|7WE>uWj{Z2!ClBttfBJ2)a;&5t_mcgQAnk{NFl-Z*gnp%QuEN<6I6vc@7& z#$nGO>C0wdfZ~d0W~vf)LuzO1L2p!`jD1`E{ccoaAEUzz13d~v;3>u^ZMJgJm}Dl_ zoZb}Sj7un!AxWykwDHAKB+7~M+S=@seqZ4z)Zc2Mq4_CXD+40}5;3lNMqom_#J@;M zl5Tt;$#i~iQaOtnnygn*5-T5~$DQ|=9v&K#?3^@)q@NVXHoitq%-lp{|OWU5__dK_mG94i~xflxN3Dz)vHeMsTAoH|$ym&mZcXk$_Sf zv*4;5J&u*g9!hIhhB-=Ut6c|w<~ttxt^nGIRD6@EVek$u>?^$lc)n)E#=@jD0l^6y zPQ^!VP`RWY=#UtM{fL;sONFO|W;uL231x)0Ns2}~O(m>YJ@ppV^v%u&!C4!B9E(O; zblnKSHH0 zLAP%53=-VlT1?U3EIV#c5x=qkrD3W%FG_vXl1hevi57#P{Mc}5paprc@^jzRaC9p| z1e4PkIC#C~=SJ3Wql@PLvdFZGKR=NdPExlFodB0wdz`;3^Gh=_m1&n{NhI}VIdpzl z8zUeGRP8FN2s0X|zor{E`;DhW-a`%>O2Xkv`hr-1oh0D0&$0xEi=9Y<3=~jz!n9ah zdOXmP#*UAo@Y>61{%w-)(YqU@tI?~wh^$Tg!q-XAQV-&(sGa$HM0h088f~ zrcq^*r#RR9Y{+U88aWQK62+xE)qGMUJTiS>Xu8^A3DO_54xC0K0Zx}&@4K}H?)+&q zAGn-lOoxSN+VQ#%b&!jUa9-)>$V076s+fvXzgo8L z%*Vcm$skLq>2a>a7{%+KV+}+!x=|@0L3brG?BokRW>jZdB^mSg-)jf8joz3@*U940 zNPG4p3E1+;A!|SPu;I}J)R0e=OR@Cd3$cP!e~Il4M(*BaP?IeNN#6Jyekr5svh+jK zsY$+}i5Wkp($;^6t}G|MR$_bBi(IcG0=4IY+!tjUaUy}1TAgmz`=8b>lFwy+!!$I~ z(UJ(Xhz~l=ek^#vTnK4vH+E;rcmE#-oG~LA zM-&8--O@ya9^HDM^QlY9PMUtr1LAprkB2;-U2OAQY`Eaw2WwkNXN`2Q=x2x7WzJi7 z-5v?WK3MWtkO==NWuL7{Ezx5869OpRFWf;w24V96;bHVaH@sx{jN7&bc)pw~r-pIc zYv7E}Rzmn@S#*HQVH&G7W>Rjvdfvh_WbZbsQ;PL6?Rfg&w}8UresZ{vE0-mf36j3E z=zI}o(Ob|f?1u)LK6( z96R)az!!EOR$*na{=LFDMh}D2j+)h`j^^Wx<59UJ^T(S+7lVxBUB9bzCe6p*PD#nt z$L5e$R&$xRo*YusOe@LJwZ2XBy4i2&croJBPc+_j3i<*M*p(blz#!fd#ELVs89C_j z;bS7mAC8znzAin)LYz)iXa$Ua(-{_S?}|Sl^kbP?$qYcgLv7hQjq7Wz!8KbvUcU9L z8?Z8C7z{Ma;Q$Nzdy%|25Cj;~xz#bJZi(_z2=yxT*X3_EWD}wUT3GT|A@@l?H z&s6=50uWvO6;=Y%75|^LIZG)e$+NG)_0V&#oU(#YuaJA+G>efZk-{YVl0pF4>30_U zO`a(t0<&Dwm16%;Bk~wlNMlys}*NbofpfmTVEN+a0oh z?4{T+bc*q^h`d{PlAw310I>@ac0g^Mbic*Le?OBOXJt!N0+^Y5fd!&U9(9-gHr*Zm zmgNgvNHWv38Pl56gZ$ElgnXfyxCh~a!mF9QOgGHIe{`JZwq zdBl9BQq?jY(4Ad~gC)V0i;3$s#nYyh``L%(A=xnI z;sNQb{iM%dWxGGFZb@&xh*v_w38hIHN@1|F%R(cQ)|hyY`3tSp6!$>AVJx%sc3y|TZQT|a6EIq-XgM%S5Yy_z9vhtA5o?wJQsN=qfg=6j9{ z{2;_?#V>zCX%fSR$iQjG>jK0w`vF|4SyBluN@3r1P6`D;sv;Cm22!c4=6tj{DDOmw zA~H~(u)AAfpYm0Izj}Ur!E5b)FQOS@l^$G5+DO=_{M7#gbDJ>wVlnZ))0MW>LV(LD zjbf&q(cyk;=c&Vj!&g`o>>=79f9Y+eT}?86G*%NBaMrOik#%Y!J8s_Zee4c&fEUE* zQ62y_yCz32M63tuKE*2|?OIF*AM??6H=<8FB)npKT3e2qzagHKu`<8_Y(@W8ubk;t zE(OTgf=zP^RWCYt97d{UTGN9jQ^k90wV~s;!LsSPAswmK99roh^=KQg5Rkc`3DEwE z#^bdNM=@YUFR^#oilpaS5-4(6V4^bT=O$VwY#HB`ymDHRlsV0N%AIjV8uakKL6=); zpnTLu++r+C9P+0zfvW5WRAl;3jh85c;sI(53?kkVzGT2hpY2vIACb}jn|2_!C6foC z_1uvOXkYEUU(-?nRMkE!I#?OZ&hzzy-tQk{>jb9R1H>NYBD4Ed|s|SmJ z<%as{=JvUyBufR>*eH0ph9>Pov23>)`o`la(mIjVw8I7I5>YB*Q~CacIyT=_<`;$_ zzxU3k8?IMDM-4WA5fmyoXZWZekCAS4JEw8Pv-1?xg?IZWfZvvPU+%Vn%I^hf#p(&C z9U?1K$*EozjBaZBxU^vh7br}e1iB4kToyz~y8g6|6bfCzOI!4yWlY*RY{oM9#b5Ol z3v1FVAIWnlskiDo!fHaP1zwkR+Kb7S3h% zRP2@F@F>+H#t+tySTELuUN7zqsg4cHND_1)8zd}j2~Pmz=n{bFOGz6kQIyw}aY^Eq@bmx2UFiSYyQP)&ZwJ|r6*IIypWZt^!usdx*Uv;l=gYQ~+(g<%WGBAr z&@a{1iz&B*(yypfr~dObEY-@!p>@aENTR{PtiZY;=RmFhG938F4kV0zZfT_fI|ecU zK$IO7{D3Lm9n(R=bR_`tnmBf;M4^+#J zcP^4J=)X6^V{E1v=wGSnfs)PAltMJa_j?I8BP!THWt~v%6I}sbJD2=?c%y7r9nMUF zeYwOa#3BD|P|F5qBwS$rYa7hrC(ab>=YW&&b2@r#?u`Az}6>?;ubacW@*=!9E=yYO+fjPmOU2`S#j** z$J4<9|Mc7vIdl)VYjxl3EOCkR{SjPOWac>3T%n{6{1yLRom4@375>}euatFErm5g% zKL&2zVX1!VKdrUcy}y4&EOWeE@@VTvzr>ZjMh3xPffDe z8R%Uyjj#v&%esvU_-f*si{IBt#!{kZ()zPc_f^eMcwNa$Rl+m+PJ@=wp73}*6w7J8!g76TW-AokHiNe{cvTHxOwqZEI57D|?#*w_8%p;~jyQ&V%( zzbi;gyiN7~_tDDQ+87UTJNlY_aYQHVpGVmJ@!NI`$@5daKvwzSc!8pf2Q;-QxKkLG zC*~oWuE$n^Z)hW{ePI?ItLK>jP{4+1Uw>YveqTJ#jTfSV2<NPlJV__lkV(W~YCzpScWtN6mP#nqPzzMF= z{K?kotlDtK6Lrj@g@=7pNZDE8ImJaZ1V$hin7=QAu*g66CcZHWY@O<&HZ(gK6AO+n z4X|-0YJ>FWbho-RVxGQroyvJ;W&M7-pG*&N_0I!^=??xjnfguo{d4JNbMi0K{-@=S zDr94w{h#=%lK$`RuVDNy694KH|BJ-`B7x*)|2H%I-3|Wlk!ag(KkkAL?zEguDL}dY zy`o<1WIA+-OGrFX%Hj`n=)T8C?rM705Dy-Ay<&Gkf?bQPE*7q^CA{$P@RqyNVQ4#j zT!K9kum71B!{&}w+GpE?0aC4zR|6ytNi`cJ|A8czuBdKfKHMJ% z)Qqu^+JN=@5El-J;xW}_V#W&5fmOCH^;{za+dQQZT=U#ZPwiQ#9v#X*3r!f+%*Q9a zFU{J)7kWXQ>>W0-uhtO9h;j^QYh7jM`hP4rjU-@oY!)8&O0}k%!;+#s4>Xc=78|Dj z`aj~=C#~9J9HbFQpf%tmDyVlxH0zcegzzN=6(A<%{uLv^@!7dKutilt(Pha92kD@# zj-C~PnCzvW9nT!%5>zU3)2Z+LqWW%L&*>lzt7lW+xLSlkx|hw1^p zp(UfGpaLO2z<6%sj=_V#6CwtK1_C?j!g&#@PDPXXyzAWj-L?KiG5?6svCX9)tn*Zx zO}Gu`s?A|)jisyZ&r4gms%oKzxYi3b{pBQ{e`WXx8DF~V<2-26l zdZ+<8mCO0~%gx*GI)`5fV~=_{L|%In9TC+&z0tM+&p20-dsO+(UNqq^N9i~}WizYe zZ+cP7-*oJ>KVH(;9icD*1sU{p$47i}yz)S45ik3h&lP_AEi&l$?)Ud4P2qn<`Da(u5=C6aBEl-F+g=hFxW?<7 zACLR$L|eHg*3ayW+N<>d#(6*CPGD_l3BjUDw+r(}Bjp zoa|Z1@nG2LEp@N5nwymLws}{1v8E2;Il~*&8=xPl!!^GVC%O({KnbE{`@Vn4s9Gkx zs{NTE=%cU4$F`JDOKN&hEu{U}G>T5F!*`2ZzYy5L&YOc!XAY@#&a)B1ui_q-v0bE} zgk#U%8KpY}9Sy!4f91T2@mD_u4svsI4_fqe-Rv`|YiVsJDvO5SwAg=8I=BD|_9nj@+v`nipuiy$UO5Xr|u{nCM5-xNsm3PDVG8F6lzH!?3?|k3- z7&(Pe=Azu*t|6*d7k%`Jn8Hr;JB$`%l2vXUSk1 zX9*10Z6{^YTrzKd^r=?19b0IhwO)Yv3G5cUK1I94-;B0eXYIIP;@|nB5mV#@U(d?S z(%dwmvvi`i(kv+!gX^?>s`_hQ&H**axL>A0&aO(dFJ=<8+hC=LKeSVE(K0o@-U(Ho z=PL95T399gx@2K)yxOL_b}Qs64rYt^wO@&Lj1f*0%b>k`tqJSW%Es^>tJgk$*N&vBq(>95uzES*>!?E(Pl>&7G8A)Fa~Bd^URv`67ma)BP7 z7N(jrRru8?wqB~Vqiu$)#L@&l35rl_)E46-==MFC##A$DsXZ@qqGv}(V;akT56eL1 zIFfR(Zp={YX8N8@{qhSc3f^hfkyo+c7B@vS1^%a{$D7~3ZTOI`G(Epuws1h-Q|tD@ zZUx`X(1PIi@yfML>lQ5*WwVwQV$fyj4?5Vw?3Mg}xU)2u)XJnDeUcArTnkhP=!NtL z95c|s^?)HY@91?h0{N2-%(=8y1dOAdJ3M@S>TLP@QAKJCg2>YRE76B`ECQ6Dytf9)_)O%cEycivQ_X)2qK>2fHF1N}kez+WFt+c6Qda+`NOESde;ewuLsI#EI|kE&%9=D;e*Z~hn1U^P@oyK)Yn4b zH1u}6sG5c0dxFSmaFI2$*MNsT1HeD%HR7H~^!DD}_G+|KHr^wd+@PNRi`@%O#ChPF zLf`c^6X?QFAVo|NZ5|9GTjN-B?3y<@GocZIzxJ3kr!*QxJxQB=oJ%}g-CwuHLuq!^ zdlfx6JlpL>*o)R|k6M(?Uqdr~J$1K~i)Vc9Lt%UypaooxQv&f302el7Ub7r1K9`vv z`BC}$<_~wiGcv8OP@rfs+wdjXajPz~m*R{7OyhHvwubwRN^0?&1LA8sN@RoY(|BsG z8HL(#RH`J+Vl)AK%mnV97dba#BUWOoaOR=_^ z5GrtZGDlbYNDUc0A_a8JGGN*3^mpbM&+8^x=zrBqVKNv;IXE;_>q{Si=)v%Rvxb$E zeQzYI>*v_A=g{@2p9$x6L7p9r+e^(FqZnZ5QGZ@XCWd+RK- z(WOH@D-J6#Q>fL9;dZ~iq)NKqMmB!IXl9l(h_uqsw|Z`}<|h!$pQ%kEy2Y3Dquq*6aMNl53EGV#%{#5x+WTixhm} z;%mGzS<|?tMT`f9Z*2CNv~AN++q`E<@Pl06gZ-|m_+x#zK2EUkJh>dxJ-S?#Fmo`j z=>MFlx_;78Z~F4tiYrT-feW?tm|?UQvde^ia|fge`5$zBr+8q@1z^$&Ck2v&|L_l0 zn4sP?X7;=>M7v#NU%nlDdRLe@l->U*>N?iusJ~*vSB4REv1#K3I3i^Z@Q!m}Utu2% zkmI8f!9lxrdx1UUiy2E1GSXjKW@dZQIf&_%p5Vl`-EpF)D3=_dK6PXuvBcxvqddT9 z#qr!PG!pLVi}^8$lL|c1NR|CSt&E7<#(nrUzRzn27X<9-^T-<^)Vu!RH17`5Dn|bi z4HPx-nU;0xsM#>|dv|`&xL_JT%di>cwkOK0t!a7{*t>Fdk8X4)uzF2L$Yo9#@_Ikg zxIPsyMh2{mIO{HiG!A<1iaFMh=RDk?-u+~{7FG$xRrCTpNg)u4@;PoHz)&8YI=xF^ zwf3iV<=t}LdCC&oznPG?$MSc|xB(Hnli2D_Lfm#EYy@i@*Clk=KDu8xfX)%l+5gNs zj<-`N)W_Z9K6HgeqBy?>yGbnaHArRL8b!I6o=C{NKFuuAbeqOB-Ghf5-Oca~?v=2G z+%NN4mf!sR!_;hW=STYUXR3e#VhW#Q$D=RCy`d=CYT%X^goP#Z^AwwEkrZAdSN*$r zuIE0-t=7J})VX>u1BCfvSbjVffDHzqp}7cc$F>n28Q$Y&f^AMZDeZjjZhO<F!x5S>6h3gAccxMyDPB(v}P zN_Wm+{_sTS(X^<|$o|wDG^Nz>;DOEPQ=$o2v3Sd6zCfDV*~{&xN5{9cy)(F>j%Q)M z#CgNNP#ulFv;J#F7ZvIbzJN8anSf%*uC@}DnJK_)uo2_skKO&nBP^989KJ({OGH`h z1?So~)-lx38p-z_*W5{8pB|Iti5jiPUE2RB@VuTuOrN z&z$T1|FQR;VNI>=x~NkpHUy>xks{2gqS8^MNQ;Vq(j|ll2q+*Ry@+(8BBCImLg-a$ z5+L**B3*h7y-KfvKnMv5IRgd1xz_$xIr}<$?X&i^^Mh+JGV1$2<-YId$rvuL6g2L4 zB6qyb_*c00j=tmUngS;?_kEcKHP2?$RVfe<31_HNN};c+m_b#V6+^OqN@MD=Gt}U8 z5emoQ7K~5i>&$!U=jX2Hl2=J7M%kaD|rOz}!do+9< zZ2kL9*E5TZK5tuoBaK&Cgg;(>OUxKe#u*UBUZ0iH+#{aX`wFe0rSi8;DGsLMbPmu}QP$42{+^^GZ&_`>Zqi3zPBZeRJ2GYl8Wtp{Xc7zR*Ld$1w_HB3P-DwCxK^>!L$TxlSk-B zaUq`L`ZXc0%Z^RyO6fZF(A*%y0kp}Nk9!r^E;*b|8*t{*0uAJ*xJW%O6 z87MLZo*13OI8R>lttPS-bT6a` zi#B~-c^YAO*;rBd=1q3sGdG6CQef@za?{2a(wCqEFjYh*<(x=G*(2|(?L(o!I|o)i zzFIrI-Ng1a368BUiIA^b`&yManPAdcaL@*aEgQ4F^mb%|Q@tXu+&;TKnRE23dCeJ? zEo<=rD5RN9C^hD)gJjdJ^4dyFj4%F$EHp^*BJ8ar3+Vlo*(@S$9C{*7nw2IOUWIS{ znpM2`%<12J~P}`nn^a%64t-AGhz^BF{a)c-VqtULRmVU}D8kSk# za7|u4pCxzCV86{SpwQv%7hG4zZ+orPu}L|MzogKUu2vGbTYWC3o;ZvjoUA4RS#?3d zeKh{?I|G=*!#PJ+`7}3t7nQp_Vk~6ow*jX=Amj%bHp8F2LAs?={Bv)gglMd7e?nSs z4===s5YYw?K032-pTT=Ojrx{cnZ2D!w`LoQdnc6Au-bXt{Y5bIp%lU>i z5Klu=d*AoQPb?;okq1koMcj*;h9)<$D8u^lG?c3Ollx@zOqyukr%VTY>p2jEH}U!C z<|QSyPqQ0DI~$*QA2kCcdWb>qwDR`hGl#q}$0wEAs`Cg|z)ykdk?AW{A{aa?S<)+G zJ|vidAj92vit4lx`Ve9mIGJtb5`)!8K)0-~U2P^<>Wq{fg!NPTm}zTQnc=N9G*y)2 z9D3|fx}pz6q=s5pIk_0Kd79j!A5wAb9D=?O?NO;|vOMd5cc<@5+0y+FG37X!lKAU( z2j7xe?@bn*!9Dzp{oR^wEmWiw9#n)Artz-0Td_(&1F2hRh?~=fNN!6x`pgIJ>Fq-7 z8y>RHBm4CL#f+U~3H?l}!_XkL5s(BZ*NYCy-#`j=1{dpxVFs3)oeSGwUA^Z(tkv`t(~UxG#}jk*2Z2la_ja#S4O0ymrn=tT^uJ6#<-0 zhS)gif$c#;sq^e^)cR6Xq)Rh)xAo7%TCPY0_W)XESi4tCcp)5kNvG~%!piot)fA~) zx%UmYq42g2Q8{Ufy!KM)!%_fZhH(sZr)_Wt5T zd2xx~^Tz7fI`GE}M?^w&MQSoTfp_114jSH`F~!J7;%xso+roV|ziQz_m4f%7)&@{r zp2cxdx*zERN6Yc;Q2}L>s_vQ&h4}8Z^MqKX4+>QTO-wh_qZorXrM{VMR~ar|VYyR` zE;eZtWBFcngfYj`FiS)eoStauH23O}2+^&!XsQ`+-DleAOZwAu!`Ej>E$Y!5KFM!v zx^`NdsIdzkTnXW_?}mRX9-pCKBrI0(Zt27i^Gd2$)zmOOZC3F=F%?L~J_yk>MmJEm zofLP*e2*AE3{kj#)@3mwq``M)zV+*P0$E;ItIK_7n0$3~_#i1F{lgiTR7R^lp*vN+ z7eF(@)f9buyLSbiTqO3D1K2e-635{w=tLFQCnd?T4+e*aeaToE-`l=khZ=KxCRZ39 zj%Rg`p&GUmuX>VXEu}`8`63Ag_nem@V#Dt~xxcNNgR^|MC>|DUTR%%3>s-$*eD;Tl zWAw;jCW7}-rS6h5_1Znak*2MEut7^-*BXz;JWH;6lB954NqFELflT^q zk|XqXy~c>cWTO9CQ<~G%n7PE!0R}z4<_9-q84Ne7*y`Zyk%R@AZ}_1H!j@0?NKc4q zP|@ik?vlI0goO?UzM4R-%G{%Rqvdx^$J6}R7OFqpyLP#m$9kVdPsmHR=O#!`+IjUo1k2lH61m?C(~aH);onHb ze_?tk_g7v(W=oQRk<=+~^zkO4+~hMSJmy$!yjttm-cyY$M|Xvd(MN(^LuQ_m8s4mo zE1M!%WkX}PBjcu5Zuh|JzO}E8oXkAckWQ5{)*3Xtc?wHjuK9LUEm@<9@}-TzN9(lM z7Y(-eky=tMSTAH4Pd(@RFRr?imFMb~xLxUoQ9MmYuO^#l^3`Y+WF9>Pj53Jpt>5iu zrJRLA*BVazWU-wLfAaAm6w}>BwKtQO(7c8~4WQ9N-n@CRN%6;1zvUZ#J}>wcUUOpW zn7iwEonc2-OyhVQ+<9!$ZIUlB*=>x)wnC(LV^YiTwJ>PqlTG9P7Mh6g$PL*8Chj@A%hz)=+ELWR9+>&)Fj#sintGt*yNw(TwZJl8tOHnq%2b zcZLSycPihFIUj9aX{X z6c++d*ew9eO1fR|1T&aXl=;$&+f7)OTlVfG>!$YE$7Ut-;u&%ML51t1eiFod&h27b z#VkrqbS7xeK4J9ju{A(EtyDbx4*qHawp|PZYCsA@>c|dmKq6m@J9u{%1J0nuNkEGU zTMC!Jfm$-1??B(Y46wI(&h1x({H{Boh6gwo`7Vbo^9==&UOhPvel;iCb1mtJ$0K&C zLqUHJ;~CHM6QYeZ+|bL3rUDvcyN|5|K0WaxZj(XxR8;Vs-Nf3wP~AjsIFPmZmOz44>C5491^b8OTq6bVvH{-B+`4;JM&Rae-U4 z?@w=S4%y>wYdj4$d5S#x)GOb4wry^(5G7r_8+nDt6kq+l1a-!L%lG-utJ?kR81SpU zu>0S;|NGz1vH4dcG5523D&c4M)E>?;SyZE)EFrBZb|-}V#?2yp|K8n*9-Ze4QG$Jm z;TsL6u&NcB@pnzwv#+IC`uX<}u8R0Yk1x=6)HH_~baJdx(Xhsmi@s?bmf8o;hDC4&oA|f$y3QtYJXdL#`)E)P<8A zHtF;2{T1l5p20i!h1b$g{9%#4SuG@o{-l~A?&Z04AlM#Vix6>b=G_sdIi4ybZo5)f zuh6DXec4Jo!R)+mwpQ1U7(aT0VNoySI;R^uSk7jAhI)kgjQn2_kpm&K`NGwTdhLN0 zS%|DnPEHXa*y&ILqY%KYwz0DBUXugYc-qfQE)C>6A>QX}RLG`*JT3=pl+0b&fX#po zbt$Fc!st52h8a7~ecXZ>)Nf9YA3APr9jn+GlUZFTT3#?5>>=!ELtdew!UemhCp*gp z+ieL2hhbl1>3EXUv+Y7y)qw|nX?M^MUZEW~&lL%Ot64fu9z48m%kp*IbNXNa=YHYy z%h|PQG0h3f0ZszM4K`ZxTee=vH)zkJcDP_em*hpBj1lS+@w8TV-OB5^D^JzDO+jTL z9><=dnnh)<+~4`jCvyjLnv+yAg<5^VMd7K~s)98`d$f0`~KY)`LJh*nhbS_|pB6At?gLnbRB_E}ZAE}Qs2<&20YD~$-By%an3i{}qz8j<3? zSWA}^Xt&SnNaWKO6~2!pnAD~macIx*6rG~LYCdFfyA`$FvbTjZ4i<^9e0SYu`3C(o zwB2CpwodAGwF9qHU0j(silI%=PurV|`qXFLR^))IK90XmzAy}g#XjCnmQ`-DEuRMJ z&?ob@@s1(zwei91lDRM0bMC6#@$}V5YD{}Bi*fy%zYrzgFFZZ|M&P5g*+HY7Ei?fw z|0#PmeGPO?Tzv`a%B>4a6&VViZ8&jjfpsv95xT+svVy_DF_UR!PR4bG%ZRefL2iF(*8YU0E8 zNTX#wb^1z`^ei{IsggwE(MpdNb)H)uIM+!!PUI>#k~sh#lYc{xJr$V^tJ|zQ?Vzl$ z`5e-WjOQMzGxn+gGkEbfSr$Da1tc^P+rE}cvCxQRp;?(%#;(SZO~ljQX0d#Kcy{W^ zE&Jt2k+KV{hw5cRvZ`=75bAWY>$KQ*B{@@tHc|F?qCL0t8Lck_-oFmU-w>k67fCj; zR_jT!vWd+v=-CkPB_Eu^Fk4C&HX>Ev z0rGsOqVv1Jch9pI?3=F4$@~1(q+)S#@jFRWOn?zA;C1LB%ute5PY=A-hS-VJ(|?=C zOPUx2VSEwvbWmD$J~lofUqcqw?(If?2ovmChDn^CbW!WI`A5B_ zI9+8+c=|L>x)-G!0MUl5TDV+!l&CgG!{acA7_fQ)em6&Qt=EoDxp$+yQ|C8*jVGsE zEv8U&R1&o6kc|p^g{j#|`FW=!X9KQp^<=27HHOKE4nd=vDOUs7jW{6IQ92 z@_w0b3?I@K|0+RWaws>rCNuln5>`o%#Cs+s?&RY1MCB*f$M^Ug8ipfsH%d>=t$49t zRARfW*^1RwQ>4>F{axF>QM9B_)7q&}E$@EpOriLf?B+FZ7QdU2`2u3|U}+p7K?xT}9G zSj@&3-E(8Lkdqr}osFg7CgjDgx5)Qn^YpW1E^a>_uRL2w`^vTuHE=moT}bBel%a8Y z8c&!%bp%2|Xm z_YU4zmnif@TQ2L4c)KiMJj%;j6L_fa7Op?Q7Llq{=Z%$34oB#zl=aHyJROt_LSF?Qg z36hBU*`&ew7gv}N#LZI>*_bTk`EpH$nj&|-rr3+(wnAW^qNAg*c`1ReK>lc0O*}bB>`uZg5QtACu!| z;-^Tj$&$0V`;wk(O5M_VW$c#}AOErVlH~Oq&K(n!{+(@4yE#cq&%6ggAqfxl#itsB ze~;N-3d#=?7b)oM#_@ZmfHBI;E=gnG(=Ia+gMrrrU%9m9Ujtmnc^OJtFoqV6u))vb zw|?_D|GgZo>hEC%IY(nb#;(3lIPUX~kq%ly%M~Q6@wyi9Z^uh4kKPhpI{c<)cf?|F0`n?q#HjAMqAi{wt5_p6KO*2&d1$!nz-Hj6ya@8xYGq9Lu5BiEvMNZ&g7D4V}k z(AwUyd*9>Zc5iWzZQs%wm8cBPkFQ)`DL3Dk_`RXtucoFZ$y-!2FkEf;i1SpT!r1#@ z262Z(a8^hk%6w9vbvjEME=Q}K@KH4Gi5za-@JMJ1|C|&fmp6o!C_2#Id3j<_7JVG(i|w(hw)jD zT`~Lt&eO!cjP29RVipPOJ`@Rz-ZStK{e&>Lg=d55+Q3Y#rNpW*`Hv~*4A8XRJLPwU zO}F+TWvqHSMn&2Q)fobLpyRL1Rl~(`*HZ?qTa;7}SG6jlV>93vIjTfX1z07o zfX@0cO#w$;t7vv_DGP6Y+=mY#+xRV$I2EVsVc~`M$bI3cnfDUJ_BQCm7V0A?g9UgV zg1~IijK-SczHD)?~mTXUN)-e^ZpvoBWa+w zeupJrF6lwBhjBD@V1BgbMaQRf!R_kD=|gcjDR*Dtj9Be6!!%ow73GfA%47xEsHXCy zM}@8Bg>>9Wm*L6o)of{TwUW~Q2HPrXdraq%2=c&9%Epqj8moe1SGW6oC|VSTZ39_^ zn|m*S(>`~JEu+R|3SszKIfOE1a+b>{RRdo9cC#2&Y)wC@s!R8AksJH+R!A{4`wRVR zURMp+<@xiWJ{FmY2Q%oZ1%N58io7_*$AC!6$E)jMVvW0 zUDWg>^Pyeikk@8!CIB(A`5RqKEP8z292bIhvKQ3>4e}XIhK@1&GkWnq`cqt9o6Xzh zSq_*Ol+|@7fv|)UinEjK{O$x9o9JFOg(KarpITr@5C+?AUVtnejX2rJ?Y``;YWgR= z8D^!#GYp5;zR2!$Tb%!18U=&`?`KBg?Cj<|Hr|=?9z0Zc-{^Y(u@SlB%by5_V19f_ zAi=l2(CfM6O9S1MFHe)k7S=q(mHl4TSXEA+dTNFadhlfzfxcJIL z#!kO`q!_gXoeqClu?#1$WHk>iow2C`!2iPFm3Y zIJJqikufvF%3oS6>~#@c=BWzgmdp+KZ}99J##_hqh&WK6`>an1LT+cln!)@G=UQ)f zg~+2!XKm21y!SNQt*s08#z}ep zOEI-L)J!<5enFWLhDSbM!s$%^IS)CmOlaq+^=(=0BXyJt+`0Ujfu1Eonvtfim!i6rLI&pS^U z#tG9z6IqLuHAj`5VTn~%obrF;XnVR(sm>G7nOMS4Q3N^~3izMiM zpNRV4aBkQ3RzIo8<7ExKtiS5u$NYG$pSQ84MMZx}RAF+pu%Z_ohY#zg$1?^Lcq<1s zH5g9ERF>)5+7|Ll7c1Z-Bi-Mp%BEhoM=pdt-^Q=sy;VvRLLOcAWo2Qx3N!HKuczy-A40;)^y}6= zaSqm&AdGiD2eW74Gv(riJ~LI%@*dhrGuO>U!0xhCoGCany1XP5LBt8dZ@kEOTJv6@ zv3nYps4hgBQf==;wp2bF$tqlsFTTsC|a6 zo0_&>qi2e<%6~x8$%o`{dCfX)US!q4jT#}kf<+wMtoLz+vW#&Dh(7Zad~?07-7qo8 zSU^krb9ej;>vh5-h)0YWEwLlBW`2V{MaOZrW3i<#En3U(uJ?rr@R5^C2mbu{?se6l z&^^cFj-Zh|!-za+NnDg+4uPL`zm=r!$ATgZ6d*94DYVdOcSzos$pZTo>+x z1Xfxi#hS@fKgwnRC_(z1{G;?QnTq@#ISrYjMmCTk=g;^qO$ueM7EUDETWRd{sk@lZ z8kOBmpwHO;UUTc{{+V@smu)FDx{r?iG7YYGx;6gJ_v+8|ly=&5p*fSh3Y}n&?Ffl? zQ^NL_k7d4>pnqYk`OE1O9c9kcHWlH&U0^!)8*K)7A#${(-mJGiRH#hNxO9opyj8~o z0*yrF$qf+D0+7bfCxW=_z>|lFR;nx+&oph_vY$w~ZcH0n=S(JSYziD{iMC9Trsq>y zU|YyGELEh1@1VHx6(r4N|xY;AcWAGofK0rsNM+3=)2AbK-eda1$Q4eE zw3x><7se^r6z;sy#BKy@>lB!sgFADfVw0i3vW1lHO=a{j@3|9B)1qk>=Q#suPSpOM zMbHGp?ob>!5czBmbR9VG)$hOC;%6l#B|)+9hRJIeOK#u3{c3P%NS(FS120D_n(#~u zh|A5rmYR|h$^Sxr8*VMWxE>MBKUi*0y$#zM5CgvMu-1F_>>04o?p=6~Z`M4Lf3PzG zmNjAQ63zeOdn$BY7cHLL_||7l3_~lAP-EqMkzkX%f*U|QYa&EM^2-y6L_eO{wm43o z+6`dLU!dng#s2+CIK^DfK9S>Waom4fpIZ!=Z*vn+g9>co%f{$IKntMwM=wRnMdWY7ixKoDoh=g*(h9;OX* z|2*}}n3K#`0!$BCjm$yk739q8?v5;s@IFNgLdJ`3ZF~;3E!w->mq)87e*a^*FC!1- zRIsq4!4%^XTG5}J-2t?$zQEaK1sU~D-`(H%fUkqpia5&T{`-YZbA+2gDDrsA!h53y zNV*rnL!D{wuG4Qzagk&RnI|%yX!--fh61jqjAbQa=1n}FuRCDr1TXK?xz81+a0M)p zLVLT6pQ)ZGnS~PD^jSq>h0hi-q0-aA9GPI8!fi4>8(dTLvZ6{CvgO6^=`q-Nb#JE< zo&7YW!FKDyriad?K}vw1dR`H0v`dj4ZYxm7TQIS=*J=7v46aH8a(2pk{c)+j2XY#e zJNm7?y$`G@_Y`?7ll0uIAvx`qzTKcd0@5fYdDLe`4?GczKC_VNEN_dnG{wU7 zs*G2z!OMB$yo=0Xwn2!?oN}wLN979Ibyi-ypm4P|(N)1e#&p#dII!CC zF`3Y-urPL0_*{`YK}UNol(`5o$&k;ycN2F?oTQS}T&Ht{G9GuFrbynHKBk!s=^_%3 z-!MQL+V-;li*Pmc79Yj`qQ1U9?DJ<6WIuTcnvKhBH?~4r;w#sV5DR6^k^SuF&qJ)N zkO-66YWv~LFlR9}*5$coZ13X+O*K}TwGLEDeyEG%TCuwLK!=D=nk1=VGhOGb69-H18J>*R__ zNTh{@odL3x1=cC+N0w6bBn5#o(9_p|m2-0$+F-Ccs|=gZqGkGPu}Y3>tpkYm2tJ( zI@$f7nEi;yqTk>(2mT1Dmv>Iu3{I_mP9}QBuU^MFCrlA2nd|D%AH(`p`Tb8=5B&G& z-G8&itIy2LYOkBR%W{jo<~(!eOa=xsqSG171InJ=aZg8>Tsgbr|l3PoAOD9`| z5is)q+8>uZU4XQs+f>S)7VzRHwz~rC;5G;88fYvl*&0fV&ZLd8ERdl_;t-pD@4UJ) zXw+;RiZjB{4*5SZDfgt7%+neD$MOXsc&Y_p9sT{0+S=Mc1Q>f*_AtVG>pP8GDQ2Ix**0v4>?M12j=S+%BjqKo-4dP%#aqaxxxw4GHx~nzU}OM zkeZeT02*OxeXGh%$r`{)Dyh~?FQ~OTxu;n$D$+7~Y;3S0olrS)hzwB^v?#hi*Xtr> zTJU1D*k0@fT7f00@8$u3xn$IN#bORFR6lXUGYJ$5r8)#?^I!s*c>E{u z>t!dYVN^6q_yHV=>($SWHA9elPq50(Lu*u-_%$N*@g;XrgMqkC!&KRIh?Jj0e`&X0 z4I1Ne7qs97Kv>fw?zzlsHjCjR;QGuPV8x+6$;4ia9B`jN%pvGm%m>4bui?zz)TGDq zarrE#Yd%Y%7pDaTxy|F27y`ww;H}dFG-GX~8)D=D(ED$iU*LJ>E2{;kcF`qSH{y-& z6NLKt^0%odXk!BR=q>V1_pZR2g^;klIX`gmRn3!-8_FEa!FQVyiV@3+I+3%Xjc;+D zC6X2DChFn)AesmJJG1{f99Gz~X@ePL-pE*+P;zM&8N)?=N zr7uV;eJk~cmq&-t*;zhfskIl#c3HaJ@yw8{6X^ZR{t)_g!T~MKW3Mxt2(9D{m^P60 zF`rN)(~BPY#p~KuVvI)2_p$7s7hcs&*omKs$e6g%Xphe)BE519Flj#uL%{LwUU~@3 zDJiO>OCs&^Z1x*?x_BG}u*0sbySsM|m7#j5HF8~A9Rie8#@mNQ1*#Q+}7 zJ(R+ge|&F?KR&s2s|XIIgwK}u5WNajgxeo99@=yZNX@!GRBWd`ad6#bZ_AgVr`+0} zV37%UZ6Yr1x!)7;a*R!Ms!@8Wh2eK8iNxL@AGmyvsjk|pN?ZUTpr<1ttIL*Yu(C6~piL!< z|0;MfXJG%PKfGb~_XiZ z$t*JzLh2i5b}MA=Io-n6;jCtL$s3ybMi-n|&*+{)TE`Q)Jz~C(SybABepR{~8Wlcf5+-24eBOhfB0WPvPs^L2tNa8$X@e zyPUR5`!M7E4LOBfV}o>G6h{ukWLH}g;NsIfAmvm8RRwy&v41d~pqTsa#zDG*2(8W2 z;YG$4z3g%%bjOzms(_nm==^x-L4wF&^=Swib7i z=0;adt9DVX%+O2+64#(AjH?T~QEA2Rsw%%INShr#Ceq}nKS+lFQkP+xQ*mIPe0m<; z3j@#}cb|x0%#J6x)SyW*qA7o>UG2xvh;Q4&3;Hsw&F_w>FZQVh3o&`M=1 zrYlZVUCJv*NkBO3W6@II3R5Ro_4#NVit6c%yHRB5cRE{8cpvr-OgIqRU=jdt4+`Sr z<*n1nT@OkPbQzcx7KIe_jY@yvajAU#lkF_rNLsq`Y=rQ%DH3juwA`i~?kSVpELQ&D zZ!|EmdR_o)0zh7BLmVYN!6lMkVo83$WCTTKGt6ij>Wi|<>+_+6DN$h7$o_W`My*CU z51k2>=6jfH%50_OKgz&+ArN>;x}cuLBXbo|FAhehu>4yK3vuVlm@=%5i=RI&%8PP3 z_;aGaN&%KLc_zWD&&+zO@iI_wffTVV;;02-u5j2}HPoKLj3<8vET(wDUIaYA9zp2{ z7X!q}mtIynjRXkNE8_u?gvJG+1aL*7i2=mBKZ>Bh@xSmo0MTXT$fAyGeX2}BDx;t< zv^oATL!KuDX8pd`?pgOeBe?#cHAJexX3xhD)PIO|c1wX_U)b}7xjwOsS&6zan**J; zO~OuY#dHQu>OIUH?4>OfZ?97Ra=Bsu8PqMij{+xKzTNbfi!vfh+(1wk>>%EnAg@SpFy$0AF8L0S=&57|v^5 zHceC*r1@$CyuWonY+Pwgyy@@DAupTw>Q&;tPaf#LPj%ROoX^kb42OrMeF)48gTvEO zQUs^Z>LSUBzoOS4yty?K-Y)uu758FDC#*Z8Up5un^lb`FAJ5cFnUITtgh5lvpe;rF zcNhv>DYx!qxJqH0aPMXta50uyNXandbA>`Ho{=ntxFJaFXl9d8tGVaiE?Gygz^!{vpsM z-|a}|7`p&zwbsHX*QrQaYqIN31`Y7ve1xFcP7|UFrBV|UZ!Iq`rv*s7Sc)tvrlSCG z^!&LF04T$gcs4W8_h2N51~FMMVr!;O!0QN<*eUNo9gd z_{u{vD_DIKTMRb{apg<#J*%(m#BGjc5Iz}^ zi(C-Tyo<=kKe(1TY;CPgQetHAyE^ZFD9PWcUnEZR2CA_JIY@C#e! z0y<967(JG~qe}e+fEi|&rE|KYt#E$hnQMz5%t9(8dyqiyjYqs4>)O6*a#t0AQ&*W( z^yc-_;#)isQ0a3$Ilmn3Bw*g2aKk?fU5eCC?=YiWpeUV>=Lh#wpQsU#iBlz6RYMr2 z1V%IKXFYB>xc!+|(Vy8`C(png8eq@QyI)3lc?@uZ@UFfdgiE0DAO!JwIxx)Tfv#C2 zpZ2tHBQ_P{V%^o+yYGspPe}tC!;6z{8)E!{5}z*zM=L?ipPBdq@kGJMl5v0V?jGZ2 z=FHEByQ=2~*o!ucyEnz#?t`EMYS+bn(W&4ZRh&EXN^{dLywHkIPsq z{f(iOWA9wI3Tm1Cj{qg=&{V1n2LPb%8(Lw|cX*rg!@O;S%0i-W2Tbf%gZ^rj-d>6n zd1k?@Ub++dNFE+$R`!}@F)sHSMp8yDtvOe3)-M7PzkMm9Sb0p`@Q1C8xBNW_h-TJv z=0m#X!9-Igeq)K1b|1lv_$vZB9-eV;?FX}H23|AAK0vj!5;r$rfE8tYs3kiyZJvOB zWNK=va{vA{$WkVD&BNQh@d8-Ub2;lG<-sf?5FUP!++HE$v=4gE(gJ$dsslZ?czkSr zM1<5!R~D1-y3tm7J89`Rwz}ie0+`A*iyo5rm%o$s9cB&FqL<#Y`5>S>TW=927mYlK zsf_s>#5zWG*8kTOi2$!TztDdzvm!1w~bzPeVA3QpZa>KBYfY4)&LU{#vmSg z2>xljW-cz@m;9>c(5LA-b6ep}zST$_FEHOP!BFkvR{;D~rfFmuP`k2K;DW{}nSps1 zR5d>FyWZas+U+K@E84%T*pD5+#@Q82ObZKgDZv&TJsppnqr&X&k6m&2cD! zjO1_x1N{o8Avq2AvS`Qm|}jBuifbzPFlI*KV5z^ zv0806H`XC52GS?apHC9nkCBr=P>U6AKPVQfRKK**Vb1NYwqK9fg%U5NUZoTX!T+&m}|>xwhtkvk~kJ;8jG* zM5ixR9fpq>N!THv#bj2Xx*0lI_MwM zfTi$D3hd+C^B|u`Fy~ne;8DLsrQR_&Ol5`HC&U-bX75Q_#yZ2_W!+y?e$j10QI5(2 z0>E*t0$TfXD6zv;KwVr9)(z&M&TD|{-i}-`$n=E2So0DpSr-OUb1fsbM*!vpNERnW zFqAGoJqqQ!AK-_$^c|k_Jnln3)=Sd~2fYVltbah?bl^9D(Z|yj(6PDOX30fyxtw>fL|VRB}~S zPw$zEN|UzTlhkOIXxqJ+IPd_-W24Y?NONF;dwb5=tYaBo%`a@nw6niPD{_qH>nXY` zB0cMD_CvQ6ACRG*h}$7_7MDzH@vkV@gq5(X;BYiB)I*Z_Kv)sQ8>nQq4qHOh9VGLBhzR^tMAan}xN1-DcvM z(-~>q&1c8a0+;@l&jbNnJ3AR<<&`b@C>4zW*SI?2==Y)s7~`NSqh@uQ9t;Gx5~#ioLw+46pLQO!MCQ11Evw%!b8QkcXop zw5KCQ_EGCy2L%AYtTx_P2@t$y9;Ljyy+eM=r%#_k@gcI@A?$T1b2u+6!p=K1)7H=Y zynM#%*9QxWi(~i)*Crc?lCGlwZDZ%;1goe702r1Q)VJ8IdNzuG(AxfdXNa`1=-=wT z`M&^cFq=_N4Sm)0XZe@+rXGuTahFagQBp3oDq-cuz9##Ot-bHH4E{RKOtWHD6+>u{ z1nSajT__R5$W*k5ktMRR37^#)V}Bk{>}yrgmF~-ZL|n%je>_mEeg+f))2iozx*0$> z=WtQ~R;$3}L3jS~iS%YP#AY#8`VXH?7y$ zu#b_JFfWU{pi%l~gu}>Zk%jJEO0*g1ePp8+v~nF@4xk$p(ge^yJQuHINmGWo!KFj# zGp*gR_6&gZt7)`=!;i_D@Vjn*k6m|}rn;v^+c+=Rcr4Bh0qTi$C1tjZKmdvF#+a9P zue+{1607zvFf$gRV|4M^r$VSR9R`gRgDF~dk zu8MO7WRojKTd79mNzR{|afEP7S09_m4V>9DNq4ceICz&wr9#IlHWw*Yb8f8dfcjl> zq57|X)=IP6TG7A{sLbUK)2nK^Xe9xFG{KD1^&C}ZN3%QV-c3fQ_U-1Yl9cRe!Og~E zwFRHN+pWIlake>n#1L22zB5RNSN|9-z~t@(ALKkl;LZTgH=VNeNqG>&0Bq}UeW}8UwM}6==!sdT*d(+=e{7*Zb3QY0A^J6A2Z0391E~Te}9Ul%oG~;K_f(dmb?Jf5X_@_GRWwr zDXCEj-S*)}hr#5J4g;XupeDBouoB^_4o|)6Cu}l?Qa0y7+1^hV|ISvtcEauFD`Fpk z6}Lz5+b-=Sdc>}9@p_|`zAWKw*JiQH_P5SdKbdVi!wkdwhs^h3-3NX^pE3fy2?r}( z(Fdz5NqHTgSZ%ojv^V^q{J?3sei-L2{r}PTtfXUs>hW&mP*(@E6q_CU;(2Fhc~hiiJBUV~ z&oZWU0Yy&f6+R)MR-N4Z@7OV0rN5`t?J%L(QM-*RK+63eYo(XCUI1i%_NadxU_`PT>l){GIxhkk94Lxu zTVjnW3fpu-PckPsr8$(iE|OddEU-T~D*O{HbtbE{bN|aN+?680U%pS5#Fr9)=M=HO z{!u&MZ4dib?SOzX6s5aQ$o>y$eE@#aREW00{Jo;uK1L9ViwLzwT4LQN*gT%i3Io(d z=HkU@csS6LMAm+iB&_cih4{ims{s4MHs1YBa12W6@WHrQ$005++Iy(@f<~Sp`*XI< z0$tEu!trPZ*U_iQMvr12V`b0Hm>)@noeZ@ajphUx&);li9w&*Wl~tB`0VlzDPYJnD z696UzTmt@0@M1n-xs1XUS_6!1G5q=tlINcIFcz0c8_URu%&c zXaL=&5tFqpLT3aBSBnVDRw>sM4_(XAG`v15rtkG64e=dpY@9ID7H7>L%ZzcVUkME| zietw(0W4~_TjNblTbwW#w>!~Q+RYdaL@w@wnnO=v#;HB+KD|1fNBuSb;(8J6(0>y! zUkx_qkP4Z!BSQ&5V`FWzBMmKLj0^;Y0*xmxq-1jz?*quTVq@XUVsC;3m(L^_(Oxdk zw??4I$SiXiZt!4%5nXcFg8FX*EkFREB`4f8?lay2DnOYqWnZNuM}Fd5O;4=Xpu^TH zLr`}vX;cgVxy`vv*nU+hSziFx9+izthW_tpecbO0`2V2MGVI3n>n2gTyF{ak=~u%* z@7m-bv}pA24Og@Fd=Fqg4iPE=m3%5Z4Llo(geEKsie< zl6|a{yWTcr@6Tfq=d7`HP4_d1_RM?Iz*?Pk`CCWM&hixyAkbB;Z^|Uew_b-VJ#rgh zo2EGh1IE8*Pycdp+XwI>_w6{>=WUt&B>qM8j($S47?JdqjYQQ^1{6bxO~vVjP+MKD zjfEyOrPVSI42bqL=Mo+Dx)m5 z#04nzfSUmSxB~GR=%kP~*Vr`SHS&PFj2K%7+xsEDoR{&?k>gwecpu;va@#|$mYdan zyDe8^EE%NjTzZm1#YR(ks#4>u#`z2VPnuT_i9`WGWt!-!v5P?+|5rQ|8l?>SUK^k48Ml78adCQy5~vGKY%SiNW`8`gjt< z!$fgrXnJ$L$96IH+7Fv(E8V(oxH{Vxd7OvszrO!!B5LY!KG50{1`kU~VHAGgGhtrH z967s(eI9dFPegr(OS4Y1B9cG`sY4tE-pQKJ;^6uat+d`Jzo_Fb|GT@`%OQ?>=u)n) zQ&{;B`1P(eDVU$k+=E!CvdiD4L%W|{j(PN-R_$XvTKIo%b6^*)|9+$#=dIP$x*5%S z#f;z85qLILa=hs;>E;b^oZtVQTKq1D_}!P|n4H_^i@bY>jlKVm)~`2j@&FPNu5)$! znCcK(Z1F??Mr0EuHC1G9->q^)~zN|TzV0sb~RWWV?gy8<{q5Q+JTpBV^(4*|wn6~SV4 zqo7v5V#Dgi4qV!E(*|hwky$;$&|o6d4wXHR$}X|YW>+toOppOwE0`ycY7iI4wT%+V z-U;*)i~eAwsQSjJP9b5&EM+kOWN3!8v}aHz;?eX@0MLmv5XrOYi?5x{qxkjloHZO? z+vk5~m*(}n=Rns8&`9vz0Xv$np`>~3)77y<%FGo&>~bF7SXh#pgA7(T1F_|1_Y|`m zY}b`nKREo`_5VkDd$IjbphOa-YjXMF$K+TBZK!>So@4dPvP~CNsJTGQzRdVl3b3o! znw8dh;#9Lxjs}bCiluNy=U-8B2@oOLa!4Qbw6(##lxY zGH7f=c9o^&pki{+kV4I3#?lzOLSe*UOk_=rVT>h%!C3B>bMNnQ|Gtm=xWD`Vclmt3 z-}h(vzTdCc^CP;Fl7Y(s>d!i}sf1r!!q_Q^^TZ{}VUCB#@$m;&Qk+YX`L{zBj{~K@ zdtud;@|-(tVR?(yRsRncTZD-B{Dq>nBINvuncufsTrXY)Y^s*X3ebqUT4ts(-QFdO z>RkB8Q6b%rHlOl<7gA|^Atd#CLY()d)CcPY3i>v`o39-fdw_Q~7up_EgCJBkxUL`0s$xR=5oVM=+Y zXG3dfQ8rK61^EmKvet){2?a8EIBd+_brs$m91eFM>rRPu`-mPZbdCqZS)rIQJDlf| z>JK}){X8hk$2fa9q#PFjrqRMygdfc_v<%+NN=KnM<3U^q@kUJ3i!6-a)N(v87 zID6v2PUS8^{RHOpK(Emkzy2~VN!xie#^QVPiY;jfTP$^W3^&moa&qY8&ql({dq10? zmZ>moF8Ni>#7X@xiXjm-Y@nhF!#V{m{=kPwVQwlNL>D{(uY&pvbYnktW*(QCbjXD# z_Xe#9odf&B4aCXmCFHY5x+p<*GKojs0}SC7r>Zx@?eNt*9cResWW@&WIA zm)Dm)_%LC{^RR8s-DJ7%NCpF$J*y+dJJ|Y6xExJXsOVf@eiWyob7STXJ1kgfKG=Ffue0}iZsv?ha8b?nmlpfR&vC&Q z7%f)NZ*pGjdnYSFx9!f0SP|K)UbXQnYDpdP_c}%157V8SQr7RoX)8X7A=2$*Y|$Pi z{&nuKKC!gQ@~9AdDJ>iElOnN%@d=uoC=eYI4M=4Vvo0X5D&ANr2bi$g=8?BzQ1hzN z=Dy_9M-p9|%F% z@{qmP$8aKF&dHy(1L$T$?i|9^(gGk7;RijT-@dX-XOQmejs1Mz1Dy8F{H})EN&X@a8xoEd#uGBrn9 zRRkWCQ7luyY>Y{dfH8?mx8oq z>10UHH%vWOe(gb}6q)QWx7k*&Wr*i*|1@Li1ZNkuMHZ{wq$!;uK}>G5QL>?lNlJ=f zcwKs1lkh=DlL&&z=g3s8h0FX6sj43AVXny~7=CVTC$S{sYwsruwDXukWUhk(Iq^Ng zw@>@@wg>xPI#j%E)sH9VVV@_hW*Ip*mSunAaNh#&S`r+wSkWjWIGi0?&Z(d_n-m(( z(_yj9qsN4@2EZUx@7Hf!3*o+6c+xfc*LkDAj0$@}&T3j=b!QOZdBa%h%MPV1n7Io? z&v*6=GM?t?IU@BWBG=}KQld6W5I0?)k;>1FBn3{~B@J>SB$-mBfzbB>vazTz$M(}S zzu)|z>YrwAFI4NTD*YOYfMiFe_4FSGCYC8!PLe$!fE*dI{?+}67Uhu-b6dYQlWFf2 zyy*T&H!u&SJWh{uT!G)rdG|>I*fJPQrGI^3OA7K>Z`v)RVVQUl+L|P~`q3)OHA;q0 zUv_>MFl1vH*P8Vu3Y72VP>6HQGVJE&Nvg|h%nZ1rJ;E`pnqHz4S0<}h)O8~*qp$qg z!|D60Obng)t-EU0;j_@2Ufvg)X?2qSst%Pf=S{atb+->uwC`IbbR2x(d%*9_XNj+A zqqhaQ;v^%bU0ft5Un%I=;RBgpCRWZ3t#(%(3gh|SBR7GhCY}5I!WE9GNw2FtxOwjZ zYilMryUSzDn4)BHXjUv=vu1nx_%R5|_%EnZB|tT){suxR>|Ck6|1~^}Pm`cqSFQeq z%|l6D$kQ&&5(2~)bZgNqFA=J^WmnKxyRDW+pb9$6OI$%HD`7KnreS_G8b@g}PL*7c zzlbWT8`8|HEym2u**=BcjVd}8sC_smo&R;(hi{|${S&MN7eE`Fjei)FI04l&+}b*4 zzs8P*XRez2x@5y9N`!xIt!p(NXWP}#02Tr^Ju~f~$-+C?-OMd9b&nK>Jdg4#7884= zL|Km=6E2=K(|<6er=}J(wFJ^SF?THQgWt+ZfjYb^VxjUrP&vWNLNCWWeCG$fs`h4h zdbSpN^vqv_`H7$2>IrtRYr&wFZWr z1+~dG(9B4@rI{yb%7+0IZGn9yU6&>ja zd>3fY6aF<2k~Co;La)h+emw5t-4Hl4Z>SzWpi&rz>c?QsSU1@NP#;<;CzqFlI1$@w zEy-7Hylr3It3X~=e>ZSq?`{o)T9y(pBFD9-;ZR17jD82V)#% zO((PUg`q2`P)e-o&Yv&m^!|+N>J;5f zoLGQm3~Bwcsitd|ptHCULQB=DD(exH_*ALqtjL^V(^l5RD5TB?e-=%&{UZLDbKzc! zs$tWLKlN1S_DOWJFxuu=^$yvm!jk<0vC%aC*D4<7%-O&!ZZRY4;Cg0!^u1$hN`HnQ z{EpG@gL*Gb%DyK(%_qiJIG&Z~&;6kx?$8%mEEB)uk@5tFM6;qU*r#R7X3xl=t63vG zrbStoyY^?{j3YritK%UpYh&NPbu`MX)T;ibLnCGlJsHxh8gOA#1jz40HeYW$gpdr& zf>l220ZT5@yQLj|BVTN?UAtqn79fvf>R2uD=EJY@5bZnShT6Ihk;Y9&x7!T~wyCoG zu4;rQ*MS1mNBl|U#+@3iq`Y541HCcRZr6UiP)s$opu}G_JL{uEFT%O{@XpL%?Q&8K z?YCY_++TM5nEx)xtgN1Z)4kO8cn5M~rY_0tp=6CJghfi`3p=-IM79A7&T7_aUDB!F ze!Ws6p_7oYF}Jv%E)T_Y&)frCh+Fg;f&c%P@`O(gB+6)XQ49J9*m%GF3w7`oKea%z za|R-3c_cc0p_AyFh&(%xDB<*zia@zi74Gh+ng=%)m`v-wSRXKO%g5L@l>E_taLZ2D zg6l^I_UfbhUuR!@>J+-70H09znWbpnSa=-3iqN;eevLZUOS(}u@Qz<+Ezws1PiSDU zJD@r>4osIMEa}TM^s_GY_ZBIllldC{(4frQm{34EedC@}B682E8ShvL45fX>x`Gz< zlu4FC|M0z*CNO$<$@0_9YXB&!&&Btg*mxS_$XBuGg9On)IA;K#N1W>K`OryLVy?U{ zfN*-M==K)XsxdQv9yk{+QQbi(QT9Pkj>~jqKJ`yAJ)vV};WFa8`Ty8kXa+Oy&9-j- zDtniOB3!6$v8th7Q64mw8<8?Y9vhs;@=no4M+htJaG3MttorKX=u%Sz%+&tFxWDQ4 zVbPFfl?26zm6P43 zSbiCT(oD(ysHaS}-V zds%s?;$!@qZ@-N$-8d*6=fIw&w+lwgSU|`fJs`fj!OXa4?rH|nKNJ@H)W*#w!|Rdx z_|P-K$Z6A}p2;GFJcD{n-`rxzenLKj-J=p3X>f5#^Qebb6q2%}G6rpGiL6#lOm@EZ zhR?O{oC_$fJrGH;#mQi;n&C}n*=JCfE^QkAqw9sY65wR=wRO4Qa40UUpb9x}$}cdo z;m8=0mea2mA9`@Y8$SLP#rD~372hV(aRTZ_Pc8Fjz80;?&HC^WYr(&RkT3RRCY42A zsWRa}v7(J6lVa_G^_}TxITdopXx9~57~pkVY5Q~lF34X3g`RfGRRkPwsd?E|Qp9x^ zQu*X68gZxQuu|rpzXLWzSb7bg+yS8)Ay3&{p>d88Wqpn#+&ZEzFCJZQd5&*4o$O{` zQFz{mYDrNm;kr`7-=pr&NOkSz+{D8zG>d2LR8hIsmihF1 zrxE^joQzC!a+>F8>6fejl|%XIP~hN$N6yOmmL1*_p7P(27(jJGTkpSeE~PvEC9wSW znX~_GuJHe}8{fhJR-z+EH9b3CWMA=zdrq$A^UU2#%!kH{W(iP0gXDm zkw3cXrOH3Gp-tKyw#ndoq}nVYSE}QSMsok*w;?pUoC&Sxi=ApcVNQPd(1&?jfunzJ z+5DJ4FG3yzs?SXO$Tk3DR>do4YE1T!JHqVsy$#qrd*sX99`>eZZl-!O%G6pzQUv%( zV)>uEkOGucd<&0|hcoIXGiv4RQ{3`$OMmR;EH`(Cx0#*A-%L`N2H8di{kb@Cx<~*E zLuqg?VrN^a6Wj2fT;KI~Z@hrqCT4omR^!xkq%h&;k@#RbL& zN3Xu?d#{`bwlMdsasths@s0JDK{VG;P*v{9nk@oSrC;(&woBqFHi0wCd}_vVOeJFS zQ}0sXb>_Js$25;`LSm#-wnAJ4fQ5VAGd;o(gpW;ExEGhV><3!=F>teMJ=@)(SDd08 z%8zj4Wt7ib^uL+9odr_$y3Ss{B{z7DIGeA7F4eFxY0IAybFbSOs!F`^nX(IK(VqQM z^!szF2r$H*b=00D+Ri6Gf2@7D*G+TgVM$|>N?ANljgti_DTod3Mg73*B*#3ySwQWjrHNtQ?XTuFDTQ#&{ z9@@KSGeq`+;YXA*Aq(Z=lhcFwv!C5#pBEb$&aEGkQcmb>7w_yD0O{z!$Fc2?eMZyw z;&czdho!?Zhh=-^h_~lUCtn2IsHQaTQ>CtGK^%3ITIfaBhSx_1whgqc_jZbGb2dho zJn)8?Kf1oHm!zv_hX3&+x;$7PU{17vD*SN!`_asW-u$7pMnQYrz7HpMp^7dAleN*D#CoZHrGFt)JYfLM?qgx!o3_0La4 zxb^f^U&;tt@Tynn$ez-jygNWSH!yx|vE^AqWaxCHb$ZjH9d+4R%3QY*$XGIpxF7CS zUrC;d7rrRgN`JS1+5DJeyIKD$25^gy7ZWyTQ9s@HQ_~a}r}%|1&sNSRZGPcB_cLnT zD(eZ{o#Fb8*BzZ6L`%N~N}H8m%#~M!VeXm**M4-BA_7kNTCG_y`|)HtduDENGLF3% z2p(Hk{pg)k#3p5m4d3+$COafBOVTzZ4~zFUL4s|G{cQF>FU1mn+I_80iP;m^Z}DC3;v2?31mjZzXoAJf)KgxJ(0`1Iygu*ntm5y>KA;z+tVMwluG7) z3$yyLuoeoS3g6NYOYCQSC}iX*(8A~>xqpVE24)6Kc(b3tiC0!=UC=DR(nIZ=aRKQW z)TJq}>nxuoi4p|b$L}$N9>fUn!J91Hh{GJ{qEStYhAf+mK~Z^Nsli|9v0qlWeN-5m zvS(?^^Lp3fpq{Z!MkWB)Wvk4u6li~N!kLW1-ea#k{{AB{98~t!&Y0Rs(4O-k^~&1g z_|W-cYYE3whVvV0f8?Wyy@=O;Gar3L)5y1M$ygU!RnOTTSG*&t?R@XKA( z2v~5ufsX#f#?u(dZ)gcORsgdhv_STj>A4HWEGi#d)Dt&@iHf2Q!fF!>c^{}fD2txTENw9#&a}SY*HUoLr3`l z)|PAKMX5_S!ozSN%*+!#PvF2Kd;evU`Ts%v`XB0}{x?tSdcGD_K4mr$bpG5-tiMKnNB>aQ7s*J0!t_2NEDy@Zc^30~6dKxHAbPNN@=5I{4r)xDPtG z4g-&z^UJyCpZnIk>)!jC#ms_TReM)=RqyKW>kijYQ^0>r`4|li4PQx7_8l79!&x*m zbkavy_x~wRyJo!q!f{g6b45cV==$@Ep2SW-g@#6trX>4X+skNg!Pj8IBIoXo42yq; z{!z)R7kehJ@qc!UPjq<%4@cCPWR%|j%xG5q=BS}MDXUG9njWF!zpNapf9HISh-bDEGh^6_ZH$S!!@`e0`+;ry23@)}GA>`JfOX8N6 zC6tW+#`p{);-8xvV9-9AZQ!w}4F>u7CdM=JLt2Df*K>u__=_Wv5o0-ADzIkoWM`>G zhlTlNKPu6VGWt%gTiQY|J1x5P5dL{ezp2Iz8(C7y4!mpdz+;g-CwPfVX1L}vhD9!J?aF{JIuVP58EfiB0D=eC9r?+YX zOpY$NZju#mXF0>P?k*$R0m%9_CyLN!jIa}DaAGF!+y_x=G6<2|6X5wRmv3cbYVY#skK+BU(vVW^uh% zmJnAJ$|Q&EQ$)Vt?ev2r$5x8I`wiX;mZ9pzF`LlXEC$A6$SH`PSEs2@t26hA77T)J zKD-rDbANSp*9VSJ0ery67-+<)XP-$tA#H2X37X60K&QMTvU!>C{I zX~kdA4)_s;k6vn#ZrEAeJA}}y2FG{mr#-b~-tnLAld{YE(L3nB5UI2cILloqhKcu9 zpIcsj!$n3=__3iQ`L7Ckj?!W`Bov}t^_)6f?XEscv&dP-08blEsH3{L=Vkh?iH75x zZ|7SV2P+ncv!*8%mwwyD6jSf`zo=o&Mw(#vzm2>sBX*}ool7K5jW-=81xwG-*pmC+ z=sjHs%(?ZwY=G|nSh8`M;(b*2ligS$^mqj1wvk}udFb9cr#Cv9(&&gHqU%|Ft=UR@ zbCisGaR%3{SeFYvhHTAUF`pAec)MFEDL6vja2xwATqyv@^2tarkQ#0ZBCQUOkWuZx zF}6$vaTGTAv_4S1W6rEA(vRV;oz2(ussY3SSPQ zA+O)WWpHyn%TSZH7|xT7Y48%s;H>g{%kycEKQ3By*eAPovSdM&f~g*~@+kG$`C z`#StoaCK}k)}{C}Aq6|z)1{Fg(HMG(DMOWg&KTEgOQ~GF8qUD`kfMg6 zsKbZPP!PwB8HLES+FQv=>Hf{$6}y^2%B^D8tS#}|3%foTw4yB5W$)03gL0F4!HT*! zrwNZV8Wh7R>LXHV|5DSSlq>SzIqVez4-_&ZdrC*Enz*6mp^tW>WKfqZYLX^FODAJ~ z<0vZeSt`=cnL#CzLMSMgTe>&PIWV;;A6F}zcIA;$4r`?)O7_9x9j8n~w-cOr_i}41 zyl1~7H1?Zqj{u^{?2-CGY*RVStHW0a9KX<`Kx}7tVl0lI7pH9qo%xg`&S{esjRa4^ z3(2fqN(_-|IEmjRcSx^a>xL6ld$Udj!cUOii`q<^2SDg)q2+?fGR#^ZhTt)KOMC#c zaAi?)Y}JjQD}o$Ru?)vC$kgVmN6D0JGZ|JosO*+*?ypV?c#^Ej z(w-jS!?jyCXDbURvpXS;W>P}n#Xc)?F)Z(WgDUpDKzFT(?L(WJH8o1sw z(;f@wtpexTo-=#9MXn6v*uwV55Y+d+V?rKc-m`6SMB9x}hLP_9d}kNR1P?R8D7 z;Il*{ku<4nILoTZOd#EEYxZ=D_--i`Ic&Z*&;M zEa05h-*E!9j8=X=gplCz(3+i`BExP>j6+I7kmK*d9h>Unq5yToy9ac#&^Y$zEp~>a z|9%-9;Splmx19O_*%b&5@_%e;)kw{Uql%VR3P=v=I)YX{EM`>&%u{~b=nQ2Dlg|W%h`BNL4 zw_X>hfS!Fc5&gDCWtwq1+jC&gXcb%U!dImVl5*;H16cTBX$*fkEg7QjfPpgHroz zb>CAft(*~9=}B`Y`H=jLoL0&q9fs9;k*m3Vl24lS^I4!R;V*DKal2lk8s#0!*C zdr{HRC(n?=EgJ;`Yy@BRfyudZ(?>0s<+RKfVM)uSh6b}s`F6t|4}GUrJ!gKm5+8N? zd|H2~XZzt0;ZGTWJk4Vl%*2mj?Em><-x!6x=xG@=G->fqfuim-9NPHN3Rb(PgQx%D z0XYtWKLDUyTRG`P*IC*4gnA^nWw)xnaYb)oixBB+=;`D?88P|!VQySG52)CpTX%li z`t6zr0vD}Vm%AUQm@L%NL?*4)iPaOE+HC2T=?h8jZcMRYrpo}u1FRu)y;p2NsQgpA zAmtEy8ol;QoDZ84sK;O_GZxPi+(GYcM{O)@;^n0bIl43J`7ZKL8(T=#%(^pv%jg?U zElX81GlXkq|Ht+{(cNBmIs-RMn@W#zkjcwVAIcZI8M4!;gRky=e$hd}?j1A2NrRb% z(H6HYY$7{^x>76yH{uA2iQwl;Qsp34x=ChUmI~q9DgUnfOC|4x%P`NDTxtw`-Z(r+ ze>@i@^>AkRo!jjj&EUy?Jvxk)SFm8yP*=pAG(>OKIgJu$!gXg}HOR*YUFzmqno$w| zOU`({NI!sUxCm-yPwfSl5e9qAkJgI=YK0Q3nU;a?`5`vqyK$Z~LoPjdFBv3u&@vXK zU$TAWJ#|D>b`E_jFW`NP)uxay()bXf?a!bw= z+aBdp*N8}^m2r#2JF@57P!87zH*oyBK3qkoeLQQRS13^)_#UPO;I1I-;baqW-yuil zG4mk5ARAJAQnAWSMKuE}9G|rVM;glaBQ9M*v+VQsX|iK8(1P~f!=zS*QC~q}^mf4} zAOaccRef*%OE6t*mRfA_n` z@jWfBeFc&t@`zhA2`UiVkv!;}oBjLc9(pl1;fjN;dhsS%CR1Z+%-NkyZy}+{1Yr{( zHz#~M_k(yoo_qtKUCL^P)Kp;AR@&XV*Mr5OA*~ck+@j_r$TQ-TU#JaYsBE3*iBn{_ zf+~Vapj^v5wDayJ{?2ZvNwWK6Ti%eMooYse`yH;i-pXxHFz0=?pF7?-(#~8mYPRYQ zPE8xNSKdi|(0lCVIn2D6H67gbyV}kmseiPcyRy}!s-HNs(j&(_#|BwCVYtBKtVk<_eX zFcV!B6!b_7%e^Dh_izW}HJV!0`tG z=>vyCtn*`@r+uiZJU)s3M^nVqg3|`xboV_E#=MX|5l6({m+*9bhex^LYzb!v`t@)M z1s`D#%HC5L)8Wzy>4A~;M_M48S%{pefCr=BF|bFLq#U4(-t$F`yyAg;)U71>$>pO4 zqg%`0x+!x1UQd@MhXx24UrT1aR*FlDFB<|j>y2=|CVwA? zSbs$)1;^WMnN*@>`rQStJcjX8$c*F65nhJ{laz;h?3GbW9HqLd>k?O%#Jp| zViC8vR##M+E_>lOI6enuE@5YZ$|NC^uR_P)_nsQf9=t~u;(Z;D?M&Ht#QNd1`<*!p zmTz5*SF-y_BqTPnSmjk}#tJDPyqj|Q_L-1MYkA?txbAzrDHOYI>SQq7b?_Nb0DOrO z@3lwJb58v8wvH>>*q|d{J+@>gx-YM}H>c@X5TG3iQk(vyBf8e4fJ6+uMkHbC0@*(R zh=G-aK#r>HI_1&clMnxX;m6s^|2H=Cd8goi05zXw|1Y67|Lf4u^1ji?huV;k2C{Ik zi94hw*+mZ3;=VDBEBDiX{5XIKZ)_ms>~o0z3$|Lm?;e-MW{v+KQM2+)|9`+z|LYF^ ze*@SKJ-F*W8cFRR31N;6&yjJ{F&POjthfBdx59co5jV9g?)p)Z6xFRD>X&8&lg&TS>GaO$y zN;ZW<)qgsv4@*B|(7)r0M9+I=n#X17-VuwKx)mtQ# zGZ$eiA#RJK!&NA^1_lc4ZlUm5N)Gi7ADbDv>1H3QSh> z3!9*@<;7+>S`PdCQdpw9(=7k62Yw#uakStpVcsg~`PGVcZ{wFcwL}oth6Ob)UB?&F zxp3^?4XP214aYzNzif5QtEAscJo2S2A^x0bLVH3~9{QZR$08bb^sHP{B_*N!-*lcN zg`R7?CHaYYMg9DFZpngC(Tv@UoseBkUTMlT_a$#OLdu6n_|%@kxhrVObeI!ukJ{i!oSEmc}y9vlO0uIja@z7FJsmngel=z({hkLxmcZJh~7n8%ZK|O!S z7fBg2u(6vi3E*|i?|JZ~VnwD$OHF=9rr7*t(Rjd2=7-)d)@EBY+Pz~H{4Xdg;-?do zQ!|b$PrjF@AwNa10D5wx_6~}RLMvf)>-ca<&q)KrQwGzWm!vm*)EFxqgDRUd#h#M+UX9KYkaA1O2DM{PI7KtnC$vYijk!t(HWTgbc@zJ zw^Ae}8rO&gGUhdHSXzYc17HB#c_q20#eAx$;IateVP)}mc#XBw&!;Dv|9x1d>Vgc7 zD(^P-_-38iv;#jzXuJ*;3{7_+@4oE%EJkVbVz%O|oH&X+Ni4gI_PfS=#h!RLfFF8= zBV(%cmI7LSJL*R8z(-GNTY0mBbE%@KuZ6dI9w3F^p?K42%6e^Y=CNb>cAw!i`{qdAb0;R4$g4*zi}BIZzOP@sP~BD$?as~VoKU*MmB z3EOLC{{4AKj395Iy6*wRC4(XJ2keA`U*vH@3H3={N@{E2_mbM*YkCTom$JD0(;!pY&$PxiTh8bwl42%rb>fP(LavcLk#@P zS*0a^GLvaPf$x``uV9$UZXQMnJq>c1Ql%ZLo5;#!j$g;*j^DfBRnCt#>sSvqr;tC^ z-qENXC3L5rNgL=Z_>Sk1=KU=0iGtG+WL>xI*&WA;WtUkmAPJU0XLZYpOOyaVxtZz3 zrTQICxR5stze-emIZnoBcC5uQt4Dx^MoffrPrlXz~y>QE!TEHk~lqMUuPd-MIC)u7sY^Xswutgu!x_a2Q7ABJb?Kpct8lNfti3sC!XBa>>wm~P%*9JrugHvieJEbWF839dHVO!L#w-((0Is^Jgr-X7&sq$ zIzCP)80Urhk^JjNYjBn3y~Z-U=AIKpI|g>Py8!1x@j`@P_)-ZVWRb=3tJtd4JK@Qv z{8yS!WiqJ*w5E4Fq##?OY1&#U*Xu~~tkWm#Ct2#seiafToTMl5q2$6l02eO68=Dm= z6~7SdPGwzDfWX>2BU7t1{J#vSJ{XkM_99s7NqNOyD)6Udt=_`TPC;{#%3< zzxzTqv_H|gnEgvbCLl_ga(IhEHQ4Ucqi8E_0}^pEiQ(TA>>{5OKY7nGGiE|~yQTY@ zChp(xL+cfqguFhgq6_)Wz2qsLycFKi@VLvTQ>sYJ*0*|LFlhC#uqP;M?!F}G)s;Ty z0{2CUZc`IB{~o#@-+sg7=pQi+v5+a$qW#P9(4e|+L=t!|Oet+*W=h`|IyVL~$hmU;T-s{w zrnEGcUW26pS=0LX;gfPT$nMqJUAR$q1&l9btVXg zJhkPo1Kd;DcgpAXFS}w*%sq?ropv zoG;ctUE4OL8KO^^81W`_+j=_lv<9tRHO^$d4=GeIFnf+BWEVQc2hx&a+t*0BL-!fL zcZ(tL6b;jIg*;aIG#IAwR=BCFf6zCPbTi>>N7;^xfW_J_en2KRI!E=yi@)qaV{-sT z+SLR_f1mClmJg>#!7$UV21#DQ^As|TxdJ4RN!gS19rg?-T{%}X`S>#P^(9)eA%`Er z!o%_)cj8?~yWkuTu^QN@R2cGV0dA|;P!%NBNaOSAfmz7wseoYfO??qP&3h>-m~9wS zh0eHe$A_e$e$2+_B^W*{*n6B9kA*4)n!k$eQA00N-*tqCAAjFyu!J~Z*lAd~PVno< zQIS^iw_eA)e7i!TJ-ohpT@q}zF*)&mJ)zo^#)q3?VKkyaS4Y*IbEaHV=e=r{{?0nF zbV!`!uU-S5*sS`i#LWW}c)UFjrV?XXR+K|PHDgm)RJv*IF34tU|EWq-NB^~z5O>vY-s8%}gB(99 z8v@4mNPdt# zC^;zxO_v%5=8OC66a4P?FC2xKv?qr$ZZkOgWQDwrJ_vh!C>Fq)L-?T-~Tl{XFkMQRR*~g8S*C|2Zu8sA5y$g zN%S8R1aM`{yclBtah)>S71Y@tBE4SwL7Rgp#HF&5yViuB2!~1OZP-sA?I$#-03HpO zQSOEF$ZRp&!Ycpvk*?I(&6vsZy|23?Sh&~(N&L>b0z^`cJi^Z!si6*4CRL)PJ{TE8 zSXc=Iot-~-`q|5o!B40kYJXAJm42F#Kt94A&*kUmCP4oD>}0KDs6tau*JVXSvqJVV zn7C?PGM=&@t=#$0rL3oZT@1#>RRt?IX>;EGSZYfai{)a%4j-sgj<3K?ZzP<7HJWhx zjOSIFkJF!9`o6OCX5D;T3lRnP7L`V}kD5IEu;Kd6Bq%KO_spW5)6a{lN%v+^vVDx_ zTr1>C4?`bd#_Y~Y+K}jLaT)EKCn*=X&M6p{3HcKpgHo>jBl@kxm~Q6#ZS(>b$G}(ayG1dT!^q_qr)L z4d*D;1Chfuc2vb#Rk&jJ%63P~cE;A0+kn-FWU{)ZM`$kZq%|mu+x4VSIVx9uS*WsO zZ405(u?gj_(p2`1k_0zn9)7kHkP_$YI_1%5*u;378^66U&^4U-**jF{Xydptvc`c} ziy1?Heqg!oGvgc7BRsxOV(TAF=6Ce0^+-Z)O&%g&S?_W;{)u29v^3+}kY&-bm&uA8 z$WU0W{?5`mm&=xxcyr(SSO$f2$=B7rsItt6pgJaT`@G^ z{EVs>D|OtRcKn$3b=aKAiRy~fMMi~sQ@#4V5JF@ z^7Oj1gxk|H?r=}z3LGp``6#&Vu-agAd|K)ax~r#{V?guQEU07`TLlhtEM;F8OCR%{ z1#8u`(XFI8THY;=n=m<#>MgN8n>a51r*f7NHYYN@;if)Bwyw~3!Ciyq-IZ+P*P!ut z`i)^Uu9md!)<<}c2G<9IL;@l`kCYPj_ic8xsD5wXa9cQYXm}fgit#NouZ1|Q zZpD*hsLZsDZqcj(>Ft1rg)#H3k6W1J4_dQ3<<9T^+oC#=RL5i|>6HrArl$6$etBq* ziw?h*H`lu?)gJhW_=|9Kl*|>M_%v^Nn^8xKg%G2u88@Zol&Dbp@<&`b3pAk}J1iAH zE~bW?03Jh!R2gRmi2e7j)7GtEbAmV-C4>c&ZM%erC7H`u%$muhZ}XH5Lbp3OarVvj z;=mcE3`5uHm1h~P|HOG>ybufPBhd+~ zu0;i!`%!b+?vwB`Ibf7@Xdx8q+~#eSaMfwWi(-yPEY{jL-B;R0JEkWuIZ0*$7`Hct zNcLRbS69!@FSfZ}j9a$l|7=+6nUKEkEDB@NxvXiD1_;Dhz_3j9qbo>qC?8v?Pm_A? z^eOxJg;Uck?2|s=#V^8=Pl%>z-TJ~H#0xF!Ov6WCvJ$T74mVF?dCX))i8>KKeX44w zWDkNqt5|FgW=jM^GVk75?X9OWq_+oRv>UZoxNK4HirEi;KT6cEifLrGPROo<>y(h7 zREcM2r}pmg34N-eFSnX_TXb(VJE20JI@(~oVNl8R)JdzXAuagXD;0wW7~a9}(mm6l z7$rMqYP9`uFAZkiz_qaF0}ul^Ig8x^5#-AZ4<6=K3gAwkc>bDkeAyg}>e$O{Sj^>^ zn}1^>OI@Vd=b@%f=FCkXWiuw;v^G7r?ITSqSn(+okANPlE zujI!fWt7tSGuG=A#jrv~IZYS|Sq%|n4&vD3RfW6K;hNur*VhGZ!sp*?<{8)p<{wY| zU~r3!VrIRf$iB6B{!?72YMMYpP1Bhq?>1L4CX$uWfq8tq=ZSN@CdDMoZunP@Pd`T< z+XWLNM||o!o0rWyX_e~9i4_G|AV<4NToEq!l7O%b{rRGJT!i*NA;|XRs1b7T0=SH-d0$nnM10@Bv8!Xy$9pOq&^WfzvDSBZ~ zx<^db2-CdS9fk5fY%N_5-tSJ8^QiV>LH7#4d1ltSwj8fb4>4X$G&7^abHcpn{0wA- z{lxisNGQUJ6EaZ5BiqeS&lfdpqT2du{s|={a2&zH$`|i|L!2fmN-zh{===R@&3#`w zDNQT%2@$Cxq}PvGm1g`J?FS6$6FozN4sx=iUg+ou3#02honUULE1PDfg1A-{K78p} z%#!;uIeZ+;q$4z};skKp_uUPbcZHZ-NyY7nwq8L^;0r%eP`_8?_K^d){~5$k5--sb z(P3Aiv3=ty;Yg;}jb*yJ#-pkD!4f_1Ho?nVTbhy4jDlxJk5<)9)%QM7GuUksX#W$a z^HY0Q>+2Iw6C}bL-{4*`!{f{NJU-j{x`gBq9pT6Z1&@mUa3?Drf`h`v2sV>H?MP>@ z7x0}MAx>WHUZ+<20`*ALOkJ4Sa5E1~*?V&*xRcj!SEvUZ_iI5$vt%$kp*=s7`vg#O z(&Y$b8?pd$Uwj&SRjaAa$H$O9Jc?3G=Z#z+G36VhIml|X%lN~e#O)5_Kl_cIYL^5YFgtU}M6_ zn!{SSd>E?6T}%!W2KB2V;988LHSN4f{p~S;&c}THo#a)Ycu(G~iPWsH)Q}j@K)QE$ zxYPP>XeMQU3|jPsSV#!IOze+;Y)6t-te+5T-DO~8%nuGfBKg4$%{%5xGaN`4C3R0V z&bn7|?^4Nz9t)nN%@oB%{Z1>k+eqvlxG(w*6b1XCz*f z190nmnLJ1#2cMsw0T%ou+?H5s)qWDk2cEoVwfdrba9Rw$0a!l%vL#7tx=MNT092nk zJ>ArsdRyXqX^oIdG#lpXNj&9H9$SL%3u=WwHyX$hyh4au%Ng3eUZ7n}J$dPaf23ku z838D~Fzq)|wq%#@6x@9~o1uWnr#Z>12AW2iU8lbv%!r$~jLs~z3+01ZN5bP+26RQ3 zaKJKUe4g!)Xu=V97;aizvXbFlA;-)iK~aiCpW$mEyCFATGF!y05qq$meoOe+;nAP& zy&r%pm#dHGQ#D6n=Wm3#p)6gG(mgUHc7^IY4pPYyGgM_Oq$LTEwHU;w_tteM?vZ)DscY#+)mJy%?^6<# z<_~KRNnGbFCa&WLGg255QkJKPOt*NagkpwRYv&j|`}qs^r4P z8r19A9RSmhe(j?Yp9k?iXJeBDbD0^N_Z`$l$8xC0*iT@`BDV@sp^7nB&J(gFmHs2Tn+3^>`FpFd8*#1w-_N1^Pe<*)spkLrVV9-_+|uNf6f!?Q)~06P z!=t0kJP+aevcE$xJyQ#B>2|2qGB$>8k5?li<<=<=KaXtg?nbtPux)JA%xXacFn%L1 z0ARFqA)42Ti=S%#`$*@_kQqL?4T3FT4cgUtCvGT9_nGJ9Z3-;jv-pw!g!8)C z>i&LbVfy&xRoXmRco_B{gKKLTA}yz{{t+oP#)l$etN=tu0)!9k7rnlJ{pbABy8Lo* zN`O$D?fRb`1pBkr0{?6w=*90C7}(8mWFaAf9w`pI!}uo>>v^{*jMis0cmLUFLPYfc zdT6OS*z+M%wqJ~MbMr!qfjC3B#JTBXPj@HdLmDSqpKpD>{$Yw#g?G=0j_{T~(|VnY z($*IxAfMJ}5(K86t}@;1eYn89vvi|Lzwk8#d(<9RZC9na<%5w=iRxd!_?)mC_?_^D zYtJZjx#eH3Qo{O06B|RJ5k=^SEhs5Vsbk^?XZp=v8kgk|#b&msgF~p<*khXmMqw<$ z(Hb$h(INLvV=2YHul1cFotA9N{YqL+wp2}g*+9^E^EOLnX+pez7P;y=`u2`dVm3vr zY_hd^$_U$Wb_p0LYd77L?L`dq5m=e_b_3di6s~pb4;b%E9lp|@UXR^QfqA%E2p7b! zTsAX0Z$JmPNxmd8G4(RFvhoD`orD-o6=1Qq=ZyzPup@7XKu)3>b)TfN`2o)Z3}7L5 z|LXoJhITeallZ9Zj3o1ET~gb*hT)Cp*b+=8?Ig8jA%yS6cj*<}LYf_1Q2oPD8N@w`n8x?iU|9tAfz&eYoC zia)lY8E?pAd+k8vkKs3H?~bio+qgoE;pM7t`uGL!hMgfw=k0IrCIejQB2SVRton>AM1YuP(cy;i=+%BkBnqByFMYbfb`zFi3~ ztFAZ4@^aBfrYzkC@L!JE&L>3e9eO4g&&vod1}&XDT2rArI&QS8hctr#;~j0=gd;1t za(m~#Um&3#-P4Wiu~6!+w9ah~nDa9+RH_dGg(K;B(h2c?aH1eS<9sNaz}w-TTi9}{ z4uY#_k4sZEiOVH?6$vxatQ~9DPl}&-W6aUvK;4M@B&{wY~P0-$967_ETX)G z9~{u}J8WtU+X0g7<<7ovW6*i0i^rCk^qBIGp`TlFnXu2f%I+b86711&4b_gt>{I#Ay&G-k&ylpUYHcI-H~ z7G=VcePSLoZUL?`n_GHO=n7l$ToEs0YjKNh&1l=pP0Vum{MrvM^OD)~BlQJ3y~q&} zZRAZr%Jklfn<8VZer0BxP z^>OmP!14o?r+=%%R;<5cODySKr9-1(+@kn8JjcG6E9UehA@4TG|LzD=yyZ9#*}O(h zVbotET>GgM@#@0CPg`8vbT)W&_dM55{{s6Z2Cu~1tG;2r948G8P-w-_VTG;T(h&F z?fboIMPDkn=q#cZ#SCH=Q%9R!%I?BI?er~vg{{h%9)4-8A3qdjC)@j8=}RstGwee7 zZG58)+ArL!lrq+mRB`N3Ji$u{rziv5lB-Hm9Ag$x0MM6j+rKQo!&t<`b9s6T+x#-ZPLo zd_%pp9jOrL^(k?{t6?C^RcpUF4PFHLJQC1*(W7P9*BV!qxHqsmB5YMCjl@T~;EFD= z1oWOe=^seVf2e_6k#%~%B=l1YcYL^jk(H5+47pK{5fkgS!MzjNS6Jr!;wXH*urd@! zc(*fufD;4M++fc7zT&^>>{FqK1@qT18dPb*kI+ z`eU-%#1FBD0XNk#g;*9=TO%w{%Z^Y}!b|ilgIhPPnhPcfA%{-w>52|h!*Q(PHgJ;~ zFqX-muP*cIp(N;8*o8H&LWDY6Nu3nqF}E5jKkU&f)b!7rwL7bW+s>SqCs?L5OE_Gh*+gYNxP68|t_uFRpmuQWvN+S1GuZ z)da&<;Fo2;hhS7hvwN+Rf;5TSL1+uKRn+AN3;%&&%jLHnkg$xOb6BjWw(}Hv49K_7 z-_h|W2ow!3)?vBueShuX1Voa6Z*n6NZksPBxf@+?@3glZnlVWv!y+E9-S}aM6M$E5 z2;l{yPKhAnG9~O?O#*E&Mw{jZ33klca?GJVcOk7>lJ77gaA|cU-oqrua5gcOU zdJC@S{OL>f=Ekk*Ovjmm`V205u#|$JBx(LFsj+a2Rt2WneEI&nW|qZ4v=;!e*dC09 zMl%1bSM`@G5Ottj|HxH;cmTx|3Skb#sCD~=h4PK%IbYOwo}k&NBcU#+`(95XB61f9 zcZxKc7nX|2aL{mWQul1Tk}F-`Bg@c*JeR-q5ZlJNvs@b9-+M0p(?I%77?>s;eE(T; zol7k$6(a6<5UfV>pnC4=`VF}ZGIV5t=uP?Ab2@$JZhFTfIsY2$1&lZ37ut%hKeQIM z+TH;;Gw)yRw&F|p%~*UM^Uo1`ei4p?OAiRNZ(klBbgK%tzZkDIVnm${`>$bR|3aiI z{|e1`L-%PuRna@^j`XC}&Pg-4e-5`zTXM@iAz~RB58#@u76Oq_Dom=Mwv?ATvc+`L z9fL!qAA0iuueH5><2$FAR9%g3%K~TZ2IJZinj?YAdLii2FHp3@G{Q$*@l81!En~apv;op6IZ+_sA|OiNRR6DK^T5 zoOspyFg8lKYc_`u&b8;3sbB#+pA=sp1_l2+U=dko+a?fmUaOOSp ztkC^!X{j>{4IeJz7?|<984ZrCDm5hghF+T?_PiG7&S-v2p&Ql-cM_OM+GwhHefXW@OOzSzNVQk&{BB#w)FSGeXzuvDn3~(ctp@jg;IUlu*CPZf{>ug zd5gW}7Cq*GyE6y$#hJHO4D_0R`2%7PgtO*hj}7xA&sn8qeW@7u))hAp(U>7F1_)~X zg;XtYLVKx=UdzXPKD{+-i;k}VLrI54N-XVUstuhEB7!1vBXvwr5w2g(BGTYU$X~x|a5)alE+^LjmL4PCE^6XPwqusAqwJ^X ztGN#6sc_QkrG;1{;a^)Mv=EurQ4QB`QB`e6oeH8pbCOZ@1AzI{(TgXeMcb|~d^c-Q z3l}Z841RBQ6x^DU1u}bpJ0E&(wgIQ;1RP0Ni%UiuO@SI0qPxNc6~wR3zIJ}0T#Kd2M1NCQCUieTdJa;Z7npWiO#rZHe=!s!pnN`_0d1!b_ zuHzE@a284$+Bf~<8$FG?J1Mm9%_D|chWiX+_^7C2r@Zr{guNsIalu+epO>7uyG6!Y z_FJv=@oQ%Zl=dU!Z8~JJNMdesEzj6#HHe*`J!ngSFGtltYJWjOYJ;{+rpP{2+H_$! zH|3@-@X5X9peH$jO_{NgMV;y=GDL5}iu{>pyEdx)x;KSek27Be{afbEqoXR;aG`tY zKPq)SnRkq_a>ib2B+~U_7>*q0na_hRMdR9g{$=prA8rqne&hV3aIZCr!#v9RA8QP< zY+q$F{@T8m%6j$G{{NhEYj$%0vffqwkm`c0}(!mORlHt1!nN zb}uTy_Wv;Vmcela&6=iV*eoe&wJ>792t17E9-zTdONqK|#dH)|1{U83Q|E)O>b$dt;q4}v0NUJ!0y$Mfw z%VTE#jPA^yaLN0&O-se1^qa7QXFLLC zzToldQVEfcN0=q3;%hoP9L$B9i_)IxM@np@y5*!x<+eoJ!cG3RiQ!DTMU5e3(=hR6 zsB(EJz7&=a7DvO{w~jlLrV!7SqkYihfOkmcJxXy?^6gYEtBQ>LuMQ`u7arM|j{7*A z?Rm8aQIw@j2Kzjw)?AY4a_|6BVtNciajJYDC`pE%bcxeFSuXm#<0-PVg0e@eh}D!U zmPK8_uO?<38>w=*LLl>XxTa~$<8SCQH_WHi`%7JArOPTm2Y2C`Fjl|q`zp#!uht}) z`A)5-gD~Yt%cIUJi)@C>jVsD2KHwKS4Bhy7_8NRO7Oyn`7#B{;mFAD=&>L^%5ng8w z_^v?E7)@Rt#5fW$2^Dfio(_|#{H4?JI+9!Z7?4*~siTU&-EUQ*y)hmZmVTf2&Q5#K zz!L9$HQNoazHU~uvLNU%NqvY5N+X+}ORy(3(Up`*RnR|{!y4?@K%l1KP*&3aO-hwI zyss3_E6zmQt$AcS_QcfRxC+$Joe1XrO+(jYNYACDqA$FK-Xtn4F{X&YLz7rBPC>|q z!z_{e9Bl4jrS>q076t(w^Os`0>lEvniTX?Q6CKx!st+ zI~%MMxUtV>6GwBJE>GrgfhoNHZs2)AUO@40WLYBqh$UC(Ms-Bj&uX|gf)$QwGD4C7H;{WXO|ZY@_ZqTtK$Hk3FnKNUr{eIZCAv^A_yqL`KEe zrm~5WPS7*}YsmNI!eVz|(0Do1XY8e~9!D)NtQ2JN_MuBW^e?h|J7d)6T`v(PgpN2V+Ma;=;&lK_m=x4Pa223 zR_snhC?eH3_jPtYaEKzoD$mmMgpJS~5eJmW&5B`VD_De&UrfKX9VgA0@e~o(DK{Hb zVx{}qKJ(N9GH`Y}S8VF-Wbb@NLm9(kB&_ZSKK^Q|m7m&k`!_6hgR1-3b9Ry0pY%18 zZ8}A3F!bZ)Ul>%C)S`Fht>2$8k4{(rL4Y|S0rr$<9r$+>mGjkwnJ%|W7~(!FW9Orx z%il>i+VdvmWwi>n_U}NM0d9-4tPN= zlYdXTz13vLZi-e-#I9T!zRo3GCER^&GjUfckEWGVMUWY^DsAhx(XpG8{LwXO;w($u zgeU>i=4VEm54}QjBRs1U-Du5m)n&U}JaVC} zV_w3gqHSjNBvfCA%#n{{#;T|Hb9?hwjIQp$<%a{_tR7Bhr)POnPC=+?zdGRFkv%wU z!c<3+7EdJ;C-fH}`S0B!9wf^iF*Q^RRG6SN$*6OqW;md6wx^Woi}G?8{o=9ufz$@u z)ql)0!8te0`iW4zlSffZZw#~g*m;m^@n!rMDblkF=?0MmHp=4m?Xw-wYW3d>9 zVPWlP%((p!%#u5n5e(n_6)%yP`+4s zxBIH-lauz)JX+~4NWIQVo83cn5TK4FF=!)o2z6G1xi5hy<-?r@hM~GH;`m#k@eeMq z}~h2m<)rTEq5^ox*FuvEPxC=e9j4C@xyNJqRM3ny$+)Koe|B{2sbtK zV1FXHS6V)mb}0_hv3;C-q$=AQ?2w9c9s@`s`${Rw)f9!k} zXtRhno!aEi;y@-dQTlg7NNG!{C6ia`%Mv%$_D^erDzw6N@u5>WBLrpObs|0zAKzfS z@K+snqJB8-9dm58#k6DFfp2%bEC}*8o7zz|*+K`6hR4_SH9k29=*2fnftGM&lRFxgHAkDfjTP(Jn1Z36R|N_IAkZ zqfpLHShL2J%sUgKJe;dRAJ*YB?=LLL{CyJFm%G?i$NZBE)KEDaH~iYbXpGNSHrC9G zBAKE?vyW>VhuG@?0{=IOSO12cij`KjOD+$`LCa0V=wQSoWkCkM$?jpkmL8V{ zd1E%5I{!9!w=QP?!q0L`o~-ZSpJHYl952zs0i;!X=f#Y1w-3@K+?IJot3Um{2|Xr< z^M8;L+o>XCC!{i)_vc#SyVW#>M2#l3l@G>fvL9=*-edn|;YfT{kSTe*!0c74;#+Og z^=S4mV-t`@wuD2SRcfk^u%kp=0H~enH~m>2L!Lm44H^OY5H1Mu0kGQ2YP4-25q9FT z);v-++pLB12%XxOzWlQU>^3UETtCP_vUmD3XWAO2jSqT6B5!=V3Y!}4Y%;mgBvTH^ zua)yRO|&!1DVGySS8kw6wy3!Zs)8?x7&*kqxEQ_F!{RsvFg!-*0~b`BTM~C1C1HF3%=@L@75X4IVV}d zuVD2(C3T0PcCz$X2@@&YeCCQVi4Ln^H^qj@RO%8gU|ln|UJWs_wzv>)Oe^woMRl!7 zIj!NmIvuJ2FM8~@bJiSE974Xc1XP>CXLT|MbG)fo0)>LIe6vsPqX;fqe;wM}5qAQ) zXJ*NkTG#puvrHi1shi)lF-<&NX$9o&6ObhCfbOs z63)MSXS77BGtF`&+f{4p&gNTuDpj-shY9oF@kO>&}p*NQ~mO5PppDv zxyQ)JW5IeffAFS+xS|ak{exurRM0;BnRWpOTSW8AR@VICa+j)hy*45?)7do6S&AyQ z=!MC6T+(E*6sU-r0e}1tjyCZ;@+GcO19hjFP~vDiyu9%dArW|;VQ_&~-X=2juhcZL zhQSMU+ubk=lO3(OGwbtY(%;4&QHV2hxx(heeu*NMJ|nz16UXZ9FP%=XD6HK_L~Qg% zG}CFSnMFd1_@3cs3)T)r=G(7Kt>7UZ>t|ViDV^jjQlR|kDncjzCL!Junb#7$5;?TV zm(_AhJotIhawTnMA^)|)0JDa+_>VNxlVssz#q`lsCJXT84^fS>HM6rej_@CZ-k~_N z%PsyShbF_iG|ihvsI!!-iRmZ=r`kT2t~!%E%B-;Po{Q>$zKaaxE>weoE^l(=__Z9+G62u zUYVbQg1W7^w_3z;=0D-Tvm#$FG|IN29EYIJ9^S8Nzsf^X-ESNC{vHHB^WYHPk;kU_ zwlYxnU+@tSGWG@lTnzlGRjj%aN2`o8)fP89h@b>t^f0Rbr`s!b^`lr(<^Ap5C)LFE z-rB0N>R5-OhjUiyZpg177nO4!_;=KPn%>g}uP@#LfXf!qR*Yqsogf!?66g3hr&CKn=w;B&fG;D5a`eoV*ruhM{cK_CNw*D^?KL5WKK5H63JAS9= zs7xHtT5k%g+R*a{?qJSPUFj(oAY*X{xX*pzNL4j|J!eBBT2^5@wt)g*9SNXF-KzYD z_>J8dcWbDr&dK1UZ7MMoOml`YCL+kB+5rbg)~>*iD6v{31~NV(r*mLrvi4&I>qKi~ z^<<#Rlq?zi-s%V?Z|*#Sx>caxEhYX+?+qqn*_+BM<*IqS(zHj6wivkLo;hgp+f^k= z2i>yNxRjT7_L~2@QD?))1>-e+ zGOR)v1h#)G`Z#t8l!iYk&wnTIsYNp;M-KZleEtkc76sAfa5Pi_H)kvh7qXQrJTSvt&w z>D{O(dnk=4Y7E8Inf7O&Ms2ufiEsY5Zs-^I{WTUcaA|;%8KsHL*)n=tZ-4&Ww|u-8 zMp@m2-piu5^CAjX>G8%Erw|n4$tZx6Y5TuZ-x!(Pj}X+zurf9zgO;y5{$zuCEg+j# zYNQ)9DrVs86(*+^eML4)1mC;j=5e(;Z8?1iDv}%H##hXfPaMJ7lD`+xBjZv>p8XM= zrWZSDVjhY3DU(L`cJQzu(||tcW8M@Ppg40Nno(m zB((-wWN^*hCo86~tmEO>*gS~~goKNS=KPBF@AniBw}eN%5k#M{AYeOSd5S+Nso?s< z$^HAW;`n|CD9jHH7Zuh0d`^FkLNGXojGy&*A|q>ifrWC`ZvpQ7ys$X%Hw!ynzmkHI z@$=0BgDP*@vx?izQ|Or@$G#wGh>cPVAbC&*ba9&E3I2rdLpX2|phwi>^x0azFA%Eo zKtyCG(EriTuf$Awz^M7j9UnSzw7dHGOKd*nEH2zCp_oXoAA1;zr4)=V!uU`8m#psU z6__+A_IHF=6cT&Jdp=*xbKK2)$z!ZXwBwL;=wEI)$k`g(+{%$V7kKQ=L^Fd&c zr3+#NvrHu_y+VwW=YK1IarBc_tW6fJ^$@Svro@hlv!kNUX<>0z8IcHubT@mExm?d9 zIQ4$;glAk>z8rU8_C7F}tVF{!3q?luh^sTK2^Y@C-TfqvUQoke8}X7@vIhQiq=$b9 z&jI2t-={ttOwK`*O)Vx}IwcaFHk{IPvT@TQwSoN;tHw;hP6u6NR1|1dAPT$S8x)Vd zF#h}77&BM6IjkaP_iO9XTdCbsR^{snVaiscWXKvf;%;1_xK( z&nFBFI7wy9`}A^QZeyBid(XYr&aQ}b*bJt}CVjZKo3aZAvg8L1sT1VFm!3%z@J2g% zr;YK%^L!**D|Sj4JnWbi>h(rwAzXfcZ{>~GdJsBSUO#UQ1Qdfh7v1fssJ9Wx1zJ!JiIuK{C~WD%QtUw_LS@Ur&mN0$t=^$#; zj@5SJQE+$fN*blL;kS9frCHAy-P9)A*jx>dOLY4~8xt9cmhk2$w^;u> z{_Mwl9v}TPI5d-I*>=?fMo*P}3x%$6Q}N*Ik5B6EUFjp@0Ic-+{^yJz$9cwh>lmT$ z`QpX1=$HiI{zGj2>sUkel>(`CtchFJd)!+xYf^N_>l&AqZF%>{pH8!@_th39Nei2o za{XS~1LY|BxUHXRS7R!D5$U2B0uyJT)k^LrltwEvbI)ZJVB({wlr4&#HP8yxr&hE3 z6aE;hH?O3el?27|@!Mm5`sG)zsnE)Sp6y2;5-H`BvY|hW55OYCZtSq>_P=0;DR-02 zz#KY4PHk_^$F}JRT_cDpRrOw78fX*%)C+UCytjo!33!2~)l|%(8Z5#Qi4~sbz6t6t z&cuJJenV`F^!TWasTUf+Ai|ieYjXv8`Qc%7?5{w=2R%smAd78xc}h=QPv-SweQ>aF zc>+zHDq5?qB`F21Z;Cq6s|t21PJ8&@p&z|FLF_SRZ$H&`&0ZI%99&+rQkj5dpF3AJ zRb;=IJ8vC{htZQ9jgH4o9;tRO%Bp{T_YAjjwrbHfeGG>XVdz>BiWQGa_WU=QB_84_ zNrX2&p`vjJrkGZKJAF`9WPRDAEKd$T+^&oDY7Ox`Wy|83$Gi4)@xfAW3tcN$zhUXa z_3MhC+?%oYZCtGNk-$1`#zc6))#MuOFY~n^T=-G~1luxj1sqo{P30i}B$ekJUqxYJ zA>rkryr25Sxq6}hv}`+-uQ3)vDZp;%l76*n^%GhkVbu1qgB4)EAj+7O>U63pyd(4x zv|;AwjU0P}Gv#Q@@SeT=3E9%tal$Uig>y=Gf)~pbvR<2idMutO)Y0WGYYPbPGGWEp z@SR9aXtrZTzIoY7ezpb=y`|~pyM1=NVP_<6+I;kckIiNn444(l-1CFBBD~VUZ=%RQ zCXs5A3)1zqiDV-^amkc^sZ@2xI;m*wEO6fqo!m<}RwqDbDzS2wG3i6J$R)<_~a-;v4`}VD;pT$U(*wX72(N^;$oe^j5Fxai+LN3=bKIoqS zjI=w0Nj;3Cz@Ykr7;*H+H-+2aI!y??4KYcM#V97y;!qSM`>YPS?7wJp(!s?- zTHSL7;m$*EY|FT>=%EfVRB#;6h79*BWeXQ^HezF!IJK$8bmV7DRZ5NsX3uzD6GH*0 zX(daizOIYzbKTFvWa_X>WsNn)B3RE$nwT&=%~oy5$7f4Q`A$BVO6BS%ax*P-j3|ksFXL>kOf5tR(Wt-@>7Aiah%NyY%DHzOGh-5CwX6= z?CBHe%$ZkHV(Ot`;(p=R3K~$F*JokjM&Lkj#6mOY*5SS8{ZZ>kM(jRd#aI#7#lTZR%toN z(p#t0B_OTGH8|6~CW=?V!DmbA=@kDTV>Bh6hCTJ0)q z@%P&6KRq)qBCj9S$g)w$X0pvgFpjg& z7>kdb!8gyE8+j1wV))%Kc=jy8?}6qWaQ>@sF~9YNrIl!b8{@Nnd?`-6nUmAASL^tT z!Yg55A57yyc8gr^mh>yGoAWvIyA48SykeGM;K!)&YZ(8bFQ)SqI=+x}KG*``#ieoq zzT3m*2zwPk@FO7p!wyeZmv5P8%{*9-?x^u7yW8qj9cL5AlO#6xQUBlp;bm>!ZAOi^ zu!;#t)R0?~q3lPS2v6#-ob2szu`*?td(Hrru%3wL`A@FasGKjyXJlY zjriwH$q&5<;=6}|6sFIbGcMo#o8eU&Mns?Cgfn6tXtupLkq!=snnsUvCdbR@gw z*E*9^GxsQrz6KK24g7wK*4<7gd2-%yH?n|a&aAI^(eEi)_>t5JD?_EKBpz3p*k2^R zt@rg##ZsA^Y~Tp)`S(_a6>gsgllICvr(=s)7kPVLo#*2h2&RBVTK4^JyIB~Wd#_cl{6 zoZR-?>CfapV9R=pVH2}1nHlzx)t2tDFod}4%&=C-ul?r1*#{=E4RtRH;XvHJBdZN zW>98kY+e5HArIb^sOYzMKL)x^k95lh|2Pze(j>MuT`=Kfj2`Q`Cn?gbdWGS5Ew0`>bBo>~V}O?J zcm(ZGO{`LouF-uvB>qI)&VfO_yeZcG_gDpVVRK2dgWXD0d}fDeW4>5Lie5j09{rI+ zB_&lynh}^m( zW;PucK{jY_Y%)8`bj)1T{&!5JjGwX?tKkU^z4~noARY_Dr|tvR#H${Bl+yt5vmwy2bsdzfFa-3>_JPWgyVirL+|DkyOPpEF|E&^V{P26tF)bXt+ zu;EB_BNY|5%pFB2$t57ZNOFOX+j)mWG^^G!G%!E8fN>+#5(I0qwCU{M=4E=G5>N7v zeX7q5d4QDE;d@;GjD6MFd_l|=VWATeDQDsf1$(UC0j%&w%k4U9GE)(X^;J7Lc(_sP z%4^5w7IpjFUNr3kzQyvfkwYk(9`^XL!R(H`FlFGaiJzJQOD5t3{^9X6+}7VOOI>Di zpd7cE{SRz6>p)K%*!cJXJ|wYN0eu@MziybV;o}xB`Yu{n9xq%NHo0RAklB%NKM{Un zXBS5bN&9Rub0qzC==QmUeZn-9^KTfupVh7(qpVZn-IOD+Uw8-L-P+;M7IxC_Czx?z z_+mqfOfWb*MMm<`Cqc>+C9akWwh%<+40X#AMC!Z;FAV(0ZRA(AQ8)uT+;`=2lwYE6 z^|JpvN^uxL#j2#MRv6%MkZLqFa z8llg`mwpOkNZ^?hm6tP{DEY>|#6nUw;PxDISAcb!D|+urDarmodGm3IR3JdCu-dni z`nsLOc`@Ro(P)I2I89^9j~1l<^)}AX)fUcjXL!ZRaP9S~|8_PHIqtiW{Esblj6yZT zHMM?wH$nye^Y@tev@L~x4F7_Nc)z{-_R{L2nJOxNT*tZEW1yn_ET6>N8n)m+td~>Y z3`h-RS|mKrS5vuIN=amVKf)XR2#K3zclQ9D?%nq)v*&PU@Mfs5u7mMFADS#fJ;stw z^okKImL=>Un}c#a9ZxAl*eBLvGlo}&UV)>OjUy`=ee%z(9oL~INs%3_(ER;*?#o(w z|E<%+H0s~Fo8fF^hxa4Ag(h!d(Na(_XI9KO1TWa~wUD3cVAEpe37I*wV^Y;oSqke& ziRJrlbWU$vZ+&ZG!Aen(5)1Cg*wn!~KI=kNc4rR>8F89G3q1ZN9*_5XPzDKnX(OIV)K6(8rb(bkF_Ih#Ut3x{0K2WTfcwI9ZQRt| zY`%a=?!*}juZ|O1+nE#poiL$yLt4&~X_n_t53Qpl$BwvJs*g2m?WZ_&$VO?>&jrlv z)g5g3A{@E6rP>9mv6 zf*RdMu!%01b}w#IY0A3ouYM;vo1XiHRA{AN<<*sr@ZrrrY!L|B4MspDk`fr}WvdclA)3S^C2jVOz7%e* zzmlP?Hbt>!^4_&|dSWpaR^EgQ$X=%vuonLq;tP91L0L&>goS54Iv)tx0GTbioyb$< zFCl;bWc41hg>hcIf1%dHU%c*^3i$RPJ@Vnf0{0d&4Q1hcS@^Nwu*iH>s49LkABgW~ zTTyqOILg1|Ucg%7m7W_i!B}u^NgNpr&~#bVn*0UO|KX8ppAOsM zSZCix6|a({O9_CU&=-i{FwOnrq@0=$WxoqKfnRwC%4rS$U-78#vY<~GBxl>NE>B&L-sY_1hGTJjP8pA%kJC_|4 z6^?pyRY#M|vMa?n5%6b_IEY=aF(g`r{qbP8%@2-5oW2L>&g#$f7H6L>-;9;v-nmHU z1%-@;ACWRRFx1_ZGi;Yd2NC#ZlEXX%x3?>DbD-?w54N{Omm0o)1XPO6w-w)Li1|G1 z!o2CeP7vjQnKRjVoaGj!4Dj_o0;64sUC%uXF_BevtoVJGmgPAs`?@aJ@&CaF(*7BI zQkc2PgblXIy2O@&qIX$^z+>q`X{^Hk}QMS22ni&0zAYgp8~Wv z51<~6$#mp0pEpY!+{vontw`H~RjBDJH_IEOO1KJ`-5S_}jqA!+I-iAx5XS&17)y0ZewugA(WyOiDgMF*`uJS^J%G;aqRL!g#FmLmsg{*^3{-9$?n#tZ*&@7(k{j%-B zKsrsjmI6-i?mRB4nxUs1{}vQJyAsWAJEn}{1u6Yw&7KAl-Fk!uqs<$z+uHCA2JwMu zS$NLC}jP z#BP$w)XxWkE0max-<0|i*8Vvw6sNtnBkfQib;+LWLz=VG9A53s0=?w?K1Ma~X)C2) zvA6SR;Z*&0>&ZzG9)rn%C;T*%T43i93w>m%B}yAcHctpnlrG>+qIfCeY4k|l&KLUS z=ly$r=2?l#1}!>UAClLyl`f-YE(lj@?VDq*&0RY?ggb>_xTvgTtg;Ks?!E&ig?&Z&~Sm_4l_4=_ZCLm8eAlgZ{B}{ovhoHGXS7>Q@rR*>Z_Xh0q1RFV$ zBjwuYx+Lit8^aAJLFsy38vGrMJJ%2l2gU{~L^keem2i8drAfASfv|9{IWTwKrU>_H zidP#EmV^Q1An-ud=y19f#7J9UUM>wOuyvNd&K03#NEnfW^ax5}XkqKE8 zUV;(FIG~TT0KBAu>y%Hdtb&eY0_~_xj_kW+EJO|Y#1B!wh5!Sebxst z=q(w+T<-v4jIK%ZdxMyzm1qD_%u^-_hTS7Wid56{2sa3uuzEdi1K@Hc1oKVOq+gFY zhbi{c{D)N2L6jwkey8_uCA;qj?OM{QTa|dJ?AO=#E=NMHongYLjo%y7XV8mF(yHG$ugF6F}ucl5CRI6$HJTyZG$uA=>qY0Ogp`(LfjvttQi+9Izq|z7qByiHI6-( zgcYgFwG(s;^KQyv-9aOyI=pbHiUx*2)(3!OYS$lKwnsAJd6b^iHP7u}u( z^2oq{Than$r}c-R@gBQlUG7K8E_jk7F@~Dka)wD!kjv9qa#>M^G`Cuv>kZ$tBi02R zoc!o)sEW%Lve!NR0m+Bkjf%fGw=YT%hknzj9*d3q|KL$9G{c^VMwe1-N63Qcd4I?oc?T zXx?=oKNsQ!Z}OF_O|DDD{pd2u`tkF<*O`mp5x z7-{{#g_8f5Cogg^Jp1!bMnW1+?kC(66{QMJT*C^<}>*Q+}Y)GO_G^<2wr$SRLF zAC|qADd#cgthN8QP}eNuIu1N1hgM-pK}@+}1O2iLEBbS@XnLFVbuqQP_3bGK4;b@L z8d~PO0ZL0H z|H)~FJXvHY1h0?UKqGJ&s-!pNQ5uQ@GRcq1Fz=FM;BB^m%x1*dsEQ+^My=!2@M*MD zMLlPwTs6^eDEkJTg5ikLAjchoeMjSx<0C; z*Yq&f8$!Ki=TM!_vCu zq540E?|ms9^I`t0!Uzv(-0lTwkj<+L;uV)1yRJ-aITf9zMCFdKYqKIOmy49OeCCW~ zN2t3Gd9lN|{zV@B+(F4skec=f+<10!08)w?i(D(JMZ@p4&e|sOm1&+d7&hh`-faXM zdz=coEV`RFBnSMVPxc2J`vXxDmIcSmbbg}GhO>`TS7A4bh*fB1jy2M@St!AJ_V1A* zg6r${adTB+zQjrztuc}ffhI0;DNIDt#y&A!Nyo?@Fdf$2@e)9TWI;5bqFLA za$yRJgdgF){id5BVKG{5{}UoJ;tw(SgAvEZnVz`p?4qzEp^N^=fTF%!sE;wQ9}DhH*_dgwc}qC@`{6b4>{}M%yrafzVc+{ z4fiQ0Qu4=1AG&p%s!K(Cgj?O(#2Ds8z;E%we;=iP(}E{lLU=?N?NE6c%s;k&Vaw9? zUBBYdEBJ{obb|#BEIAD?tp$BndQ%U^6DS0SrU@e(p{%SwGXoN0ByvMTlfTHYW zp6Wtt-p{Bq?eW@07Pn$uo@UE4$Dz0vs^^4f`k*2SmNMnc= z+yLdlmj@w9gYTEg3boIuiJDnLkpGW8QZxPqr&qVNHp{n4YbGDls}Sy0UT2*bT&#nxVdasOV<#hbEr?1dZRV=Sc@-=IPt@^eG?u2sArIDpf(< zXlPd_at4Vs0(Rp|NG*`RH(0S zeF~PA*pedPPu55X+j2~7B;~V*SBXVCsGanu#2BHP?W)mUu9Sv0PTs6ml-7+lR3ViB zB5yYtqm8%Cw0b4wdS#`Y|Kf^0p3%r|1z|h~RqA0-FfLD5pz}#;QROBFap^4*$uwY% zX%MZ9MD&#w5gw0;jUvT;#RtRS>Vb7TY{sIQ(0&8BqC^9VXZ;5upPP{7cjat;XjPM= z&9O#nJeM-D2`ojGi)X4D^4aITa#!v&8^2NCo^U1@Cn{_4o#m2k0B{7}4IGNSqGmaRlNk5u4m+@(QrSJ2obE5b;=~V%U})O){}dB zP=0Z(nkL3ilg*T%%pK>m;D{DXW4+7iC)Li9}n7- zn%5pQJ!!UBG!hrg7yzs{ZXEEa$G67!kx1nEm=M|o00UQHNnGvQg3W@O1~J^;9b$ay zs03WzC6zWmJCisv95}zMY4Ll_TFJM`+2pA%I6=l2e%N|l$i_m~DD<+xbY<$8kso$> zIFe)4tk9pI^Fo@hO$04YEjJ1ezeqVH(CXGLQ{8tA&W*0R-ldGL0WGWywcTRHr7a7HcC&75W z*(e`nOm%Z+``3N|q;_Nwjw87dWlHdy%ww+KI92hAA(85ti$48A`jVDzG^6H)yD*k; zFP)r65%TV&M;lwE`x^541tE)Ktve+Pl)LoDKhf>&A0YRdRAk##Gg4niYJ5M|rw@+A z%Rp|{Q8~*|7L;Hi-Kk>?!@>g6TeQsXx8<)z&n5y z*n`3Lc~!#3|0T*ksqB9xZ{I$^Z6A*%$9x+*)zYpL_A9a>Zoez=A}MKFC|j2Plzpi} z|K{;cPdSHD4X0VLTRGU61retCdoS6Ha;|dFD0FQorT&~~8mmUguYvD$1-0ZX?C>xc z$rQ6?cnfoE=(q1I@OYE}slZ5OUm=qC*S|LcF8;m~55AK;**5|Qe*`Vas-Ry=tIkfZ zl$AEY6D;`$D)q%37Nc1WvLq{ddGim{1vjNM^lzDfw+nTr)5=)cE{b5D$)wtkpI?Vi zFjxm+4H>FD%DL5b#0E&zSp-`A_}hX*yWEtovZ_54Ms`y5{s{z~v8vOB z4avFGkc&pt-e%A&ZD`7`-_xe)bg(BSUmJT_fHCR?tjkSi64uhU(}9r4 zKdIesW_-uYS2N8fSn2Yn%vQE9%L=F`j?;GTA;G5vxx3vigzu}no@>%kf_MWVAwfYV zth;R(%}rM66_63eyzYT)evy*n zNdx3K^5`eAgH7TwM)B;S{@w0$52wX*^th&=BPV6oQ*tR5sZMVjQ4Bdms<+9bVBG7D z&qb+SZP9_a)Mw_NK83MZA~EnyLJV0aI>05k3)CXks9@M914| zN(K@hnlhf4$dRC?BIc7RDDBR`qz~FHxA>m!3(?sFmLocYUlk&Qb>LP!+N|7B(cKf* zCyJG4&9gY;`{kmVcdnaMcF;lt+KGjktUBujz0qR_CWr#Kcmfzf@7&*2OwWQ~SdV{<_`BAqAKUvAC!MZR?qU zT;^h=lcwyz=N_bOhY90>IBWd2j1W!Wkl0nvi(E=<=w&u+HC!S&Tf6eUk6)e8yG0py86~!t3z%_H#CUN)Er^`=q8-gxTnTD zvH}fMwlRdszhu8?Vi3l3&5O(G@-HZw5p`Xd>kx1i|2-@X9wBfds>pf%NpoW1`T=JS z+Eugl;t%prH+4}F#^*WFo6E}SIG@kfGpH-d8iWFpXSql)8|rua@C3u_I zd_03%KaDdgU0IyPLjwagfF%etu$KbQru9Jwn|0Tj1&NX>Uw3h!Iy9gQV#aga2flfCF0=p-L2&DB#Mug?4y>qA3u!t7ENzM4VO~Mb&DG2Kn60nSxOhI_!b6IY+1HnV zgNJ6*lKT>ok1vBlS#rj)fZEZ(TE@FIDsxNLtjfAa{a#1N=G&f|2hk~W**ErF6UVhk zYeY5`F<#bWGJq3J9+ue0>8E!0L2-|^NP!6ys^i~O&!1{o{hb(Ts`e_XpoHiC=Ct+~ zhrg{D{Fe_RJr;3@14ywgU&>;OOEFqW;h73-h`Oq7O7?`5*d%$PpG|2l@^r1VQqpsg z|G}M(wp-8>IJ1E4@EU~{ouS&U^J}1-AeF0Cpl81P4QZoxd6k{>k#hCyNkIjJL^I6k z;7}8Ze#s%bJ4KT&5+3-IX<^G4e0qUobg70+XlIYwjYGxr?1bp_!Ax%W!6J$OZD=Ik zdg7j#ZB4@J@ui0x4@Y}J@YAQ@o<*U4k*iJq)}{`>C`y~T&-VU8@rePHo7SYN%VNhj zDXy=bBJ55Y5-zU*m<{g_J@x>PfpLD`!lc3Mh3g5wucmrLmw<9Y{xo-n3Fvelly58{ zq|;NE)6;eNgl{s?;vb|)@DjG2Gbyf>h$8P-oR2by`RD$@E7_dNd~aW|bxEdlXpO%& z6)}E4;B!#%KK0xfDya7T3OrZi4{|v+FY(mJ$~#q#YZ&GVbnm%Q(-^LAvjC1~4z>q? zFZkdIPd3Pg`p(^+Z25Kv`M0(kM2L+~uW;-#4$t1$jbSved{2{EELRn@C<-Rme?H|JQ?@qMH1u8wZ~9S{ zXEPN8=Vf-P8f^JYO+?LE!`v`YS50zHk9_qjt_{79sp)7goQ-WDaW4-ImMxv&!*<2u zvqjxrhxPm8^$vNG(0CM)-bDrM{IO4kO*UBgxbkZA%1}=7yuFX`Z+Av=`QznJ(pfSY z%~!-^CMZnEB{LPnF=t2~)q`V&0DID&##*;-U#NJ5ZaSRKQ8df%!ahAE~N=IxrHcx9|@o6_D*@q!I;a} z2(uaJ)D$s=T4xI);_7fRibBHMKs2i!o3zZ4I(1Y^n1wiE%-qJiR9byn>itc4CUZTS z@}@^|8tERT2IEjJ=&u7+O z|Ku=NdtGvL>Px%6WM+n(^?>+wngG*w`Vg-v_Q~F8@ZAEv@dN`!ZeDqoxb%0x1XE8DCfgaQr&Z;FiLAj3NoYq>U;w- zqHVH3wLQ7Rm2a(h!QcD*2KJ5442Uip${1Z^)SxW|DcInPu4}f^S^nwL+29#@|bm|k%%wb z%CzfiV__qTT6<8@U%ho<89T>2M>j8+Cy&&gM({9pM$7qN>)EPUnZd7d<;6P8ED@d8 zygYDz{ zAKa$|mr`hS9+P|FU2^^Juc*tfVkn_I#CJXyxRA|Nb}U_LTS`riVW!_?L6dw#EDGr< zXyQMe_dolovA}ENAXUZ2m~Y;F^lv`X6bPn|qT1wn-JTboT@*p@v=NkKE)J)gIOLlL z5Kq40J@Zrg6;7J0x$yI4=x~V)u&Jg-_+}e%_V|0GNHx$7ZP z6Hlck2p0c(gfLTTAN6M0&Or1k?|hwMJ9pW{SX8^moNDm0aL&d=|8y zLS1&#>O-w0C zxu&8xJw&TuV{vT5*yzMlB8Cli^_CrJvK=LMBViWYLx5#7gM8<&dqYe^CmNZX^&gs4 zh!x`*^S0HjK5JhK$*5hG(HO7n{>xT9gb<@~4>=Ooxmk)Z5vLQ$OQc=yuX~0&PNo<9 zP)RZ*H$e$kLkYtaexs(al#EbppJ&T#np_$PEMVf89MFA}FX>8qj#?fH=R0dp)_g$Hdg4^{J>9Il09*Zm{@HuS?Y8noOp)EqjTI<*OLl zqieir7M>oyuJbAwZdGf~))9$lEW+ZepbBDFieBnRr6J>b))$@=>s zD;5c_=abCNcTD7@R}?#eyI^11(v7y7+;792eX&2?L?w#2p9~lrQQxY7gWY4ud@D;YjP;1SaorD}xJhR<+wh(F&T^D<`Pi=%g z47%jp2I`5euc8p45_d+R&^RgQEpw^ktE#mc=9T_m{R77xt|w;C%+8SDzPNyb{(iJP zuYZDE7gO!-Q*a!2ea;?hAcWjOmsq2^ydxl4t9f8InboDQ$lAR%{789}Wan?NN@eMt zeS+$B1OP%MwObnV!vh*uOAWAt`b=kxj=FMmBDbd)C23|VvQZnEH(hy&A8vkr0VOX; zZGOII_C_hzkGyEKjY|}$V>ISuu~yX^Xbj}x<%7sIE2R_e{{Bh0FQ#Pq&4^u!6?u?* z`Jq)1{f7Y&RVJ;@$=3(@6<#&-$#_XU^MRZuY*#9sRyKE@#)2sa0_H=#zZS2p+b+8> z!q;8+syz(2sZH<>H$^3 zZTV%-7OTLSu!5iF_wm0M3lqid7s?f!TCQ`Z;Ph>g>3vZ0tQnU-ecFrrDb18u{lhlf z%))dF?jOJ5zOOb4Wq-;Y2Pj*`Q!BL6q{$I`H>)?gIWk^A9{0VK&wK*(eS?0VBNPr! ztVB2|I!(=Yc{e#ryIJPL!eOF0k$h$NoTL*nvS*wpFf*|IF<}n3n)9nAfKNzBH{eIh z_f^4-M7ix_I=myex4MACZn8F3$f^?brq$r}e!};Gg^=PoY|bY^8|3 z;Uig$qFN!XP*Fr|N~YZcsu9(*yFIs7d#B40~7kCWF)SZZ1NHpA3)iq>$`0`{iL4?ciQ^l9`kNC zc=Wh2zj*cY{Jn-;xjGV>n2#K=LPkx~CLKVGdJD(0OUkxNkF+y?aT~YIktD8@Q*Pac+`>Hh8gQyZeM zK;}x3xhmNom1jrdvA*2&W4-HWgV#gZ?3a(gg)zsKwTS>#ES+en<2{HQ1~%)iP#J2Y z((c!|wVTv=m7%T4{2*sog5JiAs)F15vLj~vcS*>!9sH4u))7eSCGEI!hknkbW|i29 zzeXoZ$Jtq5;QHI%8@pyT=dXNVH{04+SEPv;A;ZeHgjt?H4myWTqDT~*>J%+t6VCC_&O%;SGe**m4fQ3Pw#vV>?Ui+j zJr2V$10InVIr9zI+mcLYA3#Qwp1s>~YNGM6FlF({bv(R(6{v1orTV7B9EL!JEY@m-ZsiVD$2sS@sva{j3j0&8-) zcoBJCvw;pG^HE*!bphSO1+n=0CMC~?VuDoG{t3x*O*T!Iz-i6O>7qs_gcz4R9B;m4 zqZGv8gf{9Umgp_%^>?g#dRCTm4d21&x|^Y)V>W;U zpWyEvr%o8y+}L@hxP)EEfnHMST+y^?cz16dRBEeAQ%|QFZpID(3uPypz}`egOqUCO zg@cqZeUVm7yV$P62(?jc&$X^|W{AuTgti{E#Ba?zmgwF&wDjsirHE37qSE>re__Wb z7qP%w*-v;c*$ADq0f#=#_x!LeJ0kdhL3VphGH+R?--#WGYHqHRN~n2;aBbtaOv5YX z@;(z>J-C|{b|$5m0M$7CN|0q`{Dfo_%VKUh-D-Db+|J?;i&5IiRFt50u>%SbK)v2U zO4+f&;ETp|-Yw-xY1>1y6isfa^;viZ)>5RCA6`GLJ9_WnHypd53FPCCv#ENUC6CbV z<>c{OTbOwR0X8dgwr6!2d~}!#sC^kZHRZZ`UTeV)mQ({1$i;jsyGe5M8~UX_xe=PH ze)5G&y5)M_s*tkWk@XA3Q6m?-&DO6B=tc+Lu6-M$;O8|AJ8BrJHD9>0zMOA4Upi}x z??B~v(wKw zZ5ZB6ucnO?L+N^~o$5m%z29AD7US3H)o{`Hpo|suax_<+L4PZ78gm96(hu^+-Fk}f z!dC}?<`HEtXpfe~^myh9>bfMU`ODDtaokzG`*x-77PqrC1Lq%FDbJ`>__hNm2dVMi zsNn#ShO>*XBs1jD#*^OLoKrK9P51Y`QuoF_QYS;j?e_h~W^fGx%~rr~fhJ4(jXVVBRhYInXl$2hsV2h zH4NR`9fOKWn=yW-c&hksEt9A4x1=AAhF721HK;SZSDI* zTVY=ZuJ(k}g*egbcBT{;1g$vQJLK-E2@6eSo^DDFXM>sX1NW^V0Oq2#^#@u|w(gk+ zh_u1uql>i^wIeGS3&H_|#T$fbQ`X=@P7 zy7w$3dIA){PjK`zltR6sRb=U+il>I?=>op>f?ITTttooNZa|rO$FO?z|3p#zjq&$d z#~Bf+m;*3-3nmrk@b>7ZXBzlU$_t!~ ze3f6Pn)0mn23R|7eHlipPw!6G)s`mVG;yig1}CvA+9qoV#YdB;w5=`2j$%8<-B8E zSA0!Os?NCSiBJiUlVs`S!8vyb5`P@1B7knmpK~1}^&IC3xUc&{Xznw8C_t52r>N?k z*#P&|30xed`Rj)^^wvpyyndj?!bS(l)$Y7GoUA9__kFQU{abp&c zS1u6X(Wwu*qTc9If(1d=2azp3xK@PznA0!&wu*;N&ee{{E^#@XSadq6CK6JUhBq*U z4aK=lT57tTWnK{|aX6D@F|WhUB@0e#J|_EscklWgHCc81T6XVznzz08ae322EC77_ zHTSE(^|`$~q2WLF(&b+40ukm>Z^O;ko>XB)AvQM626@0)va8q=vD&$^Ph~ zq9-lZ{ik~n|FCS#8X;RPoq8!R*rCEh*27Dwn}t*62QnNlt_CJLo1|9Oii8K8nG8fF zjI4!;AeNX>3#r~B9TB5s-`XgZc(Lb?LP|0MaA^qg_gmIbl_X!GT^Vn`GH3X3%Yfr* zCa{k0^HP$gY!!O;Jt^Kji{xB-vq6#5r4Oj{bRtQ;fA7j-j(en=&5--&{mQDW+vKqZ zP>|4G!d?n?Ss6{2V8D8`hf=GhTwj4DtSZtNQ|Ta0j+nUIpSU|>fFB($QFrTuu<`Ke z^bd?O(r-QS2cat6p|aGG-+jshfQuZa9(U2ZK3~(JdJS(mbTk2YJacyS<7zs=cU($tf87vbK4rN9^Gu5#Cmxi@jyhJ6lo9 zrDxqOoRxErFYcbvqTL;W|ReMSxr{WyiBA@+Y1zn7Cd`lKRv-{P#yqd9V$OXC$AKl1r ze=w~%FI4N=dX(@8EZJJ z?+iYxXIUaP&Xm?w7+crp$9To!-x@~GCzB-i&Dk5yGT~_fJ1A$;bWg5DEk-asCU0V` zNA$}~3+SYxwQbr77kXsgDf|LHlnUP-i7{s%CJ@{Or=O%llN6kBCf#-A`tdo^1*<_Q zjfEi@?~AOve$~Ak#}WF#G4?exCaJrDF%VZ_mI$F#D7eR?_fZqjGr%zWHiZ~-{k-y+ zU^-&yttez@e6Q*eWxarMj^nwQZ7UUtll}#Ja+auA&{NR8X{(nw7qtnoMAt!kQX@P%6TwRtYAT*sHhpeU-ujx?Lg;#4T_434i3TIQ94>I{ z4Kwj+YJ3wGeBS!%a1A-Qzm1WMslq#L`8&C|%wscU!$15tSIbc}a)rm-;I~WYDO%Q0 znxQbmyC`Effs!EwWTfg{!;wTtdFv_|vSwjq+8xY&XA>TBG?8o>u$cOH+ig-4(4nOI zw;g=WRq}d0>{hH4(x|^-$9@p|viyE_ivie;neTsiC;9dA|J>qwvR(EM@rqUs8^ShA`9rclon1|3`Lg=8Q(6TUqI+T~ja>#k4gaYJ5?H GMf?Z-ff#lG literal 0 HcmV?d00001 diff --git a/_images/benchmark_mass_compare.png b/_images/benchmark_mass_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..71911c5546eb110da746d19cb746afab8a16a137 GIT binary patch literal 84227 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 z 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