From 4c93031f40bf38977f641647c919e6239510eecb Mon Sep 17 00:00:00 2001 From: Jeroen Overschie Date: Tue, 4 Oct 2022 13:06:52 +0200 Subject: [PATCH] Add some docs explaining how to "analyze FS algorithm stability" (#83) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [WIP] Analyzing algorithm stability recipe * Finish stability example * Reformat & imports * Add note for relative vs absolute paths * Algorithm stability recipe 📈 First version * Finish algorithm stability example 🙌🏻 --- .../analyze-results.ipynb | 1476 +++++++++++++++++ .../algorithm-stability-yaml/benchmark.py | 111 ++ .../conf/dataset/synclf_hard.yaml | 18 + .../conf/metrics/stability_nogueira.yaml | 3 + .../conf/my_config.yaml | 11 + .../conf/ranker/boruta.yaml | 11 + .../conf/ranker/relieff.yaml | 7 + .../conf/validator/knn.yaml | 6 + fseval/callbacks/to_sql.py | 6 +- fseval/pipelines/_experiment.py | 4 +- .../rank_and_validate/_support_validator.py | 5 +- tests/integration/test_main.py | 3 +- website/docs/_recipes/algorithm-stability.md | 1 - website/docs/_recipes/running-on-aws.md | 3 - website/docs/_recipes/running-on-slurm.md | 1 - website/docs/quick-start.mdx | 8 + .../{_recipes => recipes}/_category_.json | 0 website/docs/recipes/algorithm-stability.md | 320 ++++ .../feature-selectors-stability-barplot.png | Bin 0 -> 20039 bytes .../algorithm-stability-yaml.zip | Bin 0 -> 1114441 bytes 20 files changed, 1981 insertions(+), 13 deletions(-) create mode 100644 examples/algorithm-stability-yaml/analyze-results.ipynb create mode 100644 examples/algorithm-stability-yaml/benchmark.py create mode 100644 examples/algorithm-stability-yaml/conf/dataset/synclf_hard.yaml create mode 100644 examples/algorithm-stability-yaml/conf/metrics/stability_nogueira.yaml create mode 100644 examples/algorithm-stability-yaml/conf/my_config.yaml create mode 100644 examples/algorithm-stability-yaml/conf/ranker/boruta.yaml create mode 100644 examples/algorithm-stability-yaml/conf/ranker/relieff.yaml create mode 100644 examples/algorithm-stability-yaml/conf/validator/knn.yaml delete mode 100644 website/docs/_recipes/algorithm-stability.md delete mode 100644 website/docs/_recipes/running-on-aws.md delete mode 100644 website/docs/_recipes/running-on-slurm.md rename website/docs/{_recipes => recipes}/_category_.json (100%) create mode 100644 website/docs/recipes/algorithm-stability.md create mode 100644 website/static/img/recipes/feature-selectors-stability-barplot.png create mode 100644 website/static/zipped-examples/algorithm-stability-yaml.zip diff --git a/examples/algorithm-stability-yaml/analyze-results.ipynb b/examples/algorithm-stability-yaml/analyze-results.ipynb new file mode 100644 index 0000000..e7b9c4e --- /dev/null +++ b/examples/algorithm-stability-yaml/analyze-results.ipynb @@ -0,0 +1,1476 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hi! Let's analyze the results of the experiment you just ran. To recap:\n", + "\n", + "1. You just ran something similar to:\n", + "\n", + " `python benchmark.py --multirun ranker=\"glob(*)\" +callbacks.to_sql.url=\"sqlite:///$HOME/results.sqlite\"`\n", + "2. There now should exist a `.sqlite` file at this path: `$HOME/results.sqlite`:\n", + "\n", + " ```\n", + " $ ls -al $HOME/results.sqlite\n", + " -rw-r--r-- 1 vscode vscode 20480 Sep 21 08:16 /home/vscode/results.sqlite\n", + " ```\n", + "\n", + "Let's now analyze the results! 📈" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we will install `plotly-express`, so we can make nice plots later." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install plotly-express nbconvert --quiet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Figure out the SQL connection URI." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'sqlite:////home/vscode/results.sqlite'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "\n", + "con: str = \"sqlite:///\" + os.environ[\"HOME\"] + \"/results.sqlite\"\n", + "con" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Read in the `experiments` table. This table contains metadata for all 'experiments' that have been run." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
datasetdataset/ndataset/pdataset/taskdataset/groupdataset/domainrankervalidatorlocal_dirdate_created
id
38vqcwusSynclf hard1000050classificationSynclfsyntheticBorutak-NN/workspaces/fseval/examples/algorithm-stabilit...2022-09-21 08:22:28.965510
y6bb1hccSynclf hard100050classificationSynclfsyntheticBorutak-NN/workspaces/fseval/examples/algorithm-stabilit...2022-09-21 08:22:53.609396
3vtr13pgSynclf hard100050classificationSynclfsyntheticReliefFk-NN/workspaces/fseval/examples/algorithm-stabilit...2022-09-21 08:25:09.974370
\n", + "
" + ], + "text/plain": [ + " dataset dataset/n dataset/p dataset/task dataset/group \\\n", + "id \n", + "38vqcwus Synclf hard 10000 50 classification Synclf \n", + "y6bb1hcc Synclf hard 1000 50 classification Synclf \n", + "3vtr13pg Synclf hard 1000 50 classification Synclf \n", + "\n", + " dataset/domain ranker validator \\\n", + "id \n", + "38vqcwus synthetic Boruta k-NN \n", + "y6bb1hcc synthetic Boruta k-NN \n", + "3vtr13pg synthetic ReliefF k-NN \n", + "\n", + " local_dir \\\n", + "id \n", + "38vqcwus /workspaces/fseval/examples/algorithm-stabilit... \n", + "y6bb1hcc /workspaces/fseval/examples/algorithm-stabilit... \n", + "3vtr13pg /workspaces/fseval/examples/algorithm-stabilit... \n", + "\n", + " date_created \n", + "id \n", + "38vqcwus 2022-09-21 08:22:28.965510 \n", + "y6bb1hcc 2022-09-21 08:22:53.609396 \n", + "3vtr13pg 2022-09-21 08:25:09.974370 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "experiments: pd.DataFrame = pd.read_sql_table(\"experiments\", con=con, index_col=\"id\")\n", + "experiments" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That's looking good 🙌🏻.\n", + "\n", + "Now, let's read in the `stability` table. We put data in this table by using our custom-made metric, defined in the `StabilityNogueira` class in `benchmark.py`. There, we push data to this table using `callbacks.on_table`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
indexstability
id
y6bb1hcc00.933546
3vtr13pg01.000000
\n", + "
" + ], + "text/plain": [ + " index stability\n", + "id \n", + "y6bb1hcc 0 0.933546\n", + "3vtr13pg 0 1.000000" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stability: pd.DataFrame = pd.read_sql_table(\"stability\", con=con, index_col=\"id\")\n", + "stability" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Cool. Now let's join the experiments with their actual metrics." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
indexstabilitydatasetdataset/ndataset/pdataset/taskdataset/groupdataset/domainrankervalidatorlocal_dirdate_created
id
y6bb1hcc00.933546Synclf hard100050classificationSynclfsyntheticBorutak-NN/workspaces/fseval/examples/algorithm-stabilit...2022-09-21 08:22:53.609396
3vtr13pg01.000000Synclf hard100050classificationSynclfsyntheticReliefFk-NN/workspaces/fseval/examples/algorithm-stabilit...2022-09-21 08:25:09.974370
\n", + "
" + ], + "text/plain": [ + " index stability dataset dataset/n dataset/p dataset/task \\\n", + "id \n", + "y6bb1hcc 0 0.933546 Synclf hard 1000 50 classification \n", + "3vtr13pg 0 1.000000 Synclf hard 1000 50 classification \n", + "\n", + " dataset/group dataset/domain ranker validator \\\n", + "id \n", + "y6bb1hcc Synclf synthetic Boruta k-NN \n", + "3vtr13pg Synclf synthetic ReliefF k-NN \n", + "\n", + " local_dir \\\n", + "id \n", + "y6bb1hcc /workspaces/fseval/examples/algorithm-stabilit... \n", + "3vtr13pg /workspaces/fseval/examples/algorithm-stabilit... \n", + "\n", + " date_created \n", + "id \n", + "y6bb1hcc 2022-09-21 08:22:53.609396 \n", + "3vtr13pg 2022-09-21 08:25:09.974370 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stability_experiments = stability.join(experiments)\n", + "stability_experiments" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can plot the results so we can get a better grasp of what's going on:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "alignmentgroup": "True", + "hovertemplate": "ranker=%{x}
stability=%{y}", + "legendgroup": "", + "marker": { + "color": "#636efa", + "pattern": { + "shape": "" + } + }, + "name": "", + "offsetgroup": "", + "orientation": "v", + "showlegend": false, + "textposition": "auto", + "type": "bar", + "x": [ + "Boruta", + "ReliefF" + ], + "xaxis": "x", + "y": [ + 0.9335459861775651, + 1 + ], + "yaxis": "y" + } + ], + "layout": { + "barmode": "relative", + "legend": { + "tracegroupgap": 0 + }, + "margin": { + "t": 60 + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 1 + ], + "title": { + "text": "ranker" + } + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0, + 1 + ], + "title": { + "text": "stability" + } + } + } + }, + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import plotly.express as px\n", + "\n", + "px.bar(stability_experiments,\n", + " x=\"ranker\",\n", + " y=\"stability\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now observe that for Boruta and ReliefF, ReliefF is the most 'stable' given this dataset, getting 100% the same features for all 10 bootstraps that were run." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.12 64-bit", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "949777d72b0d2535278d3dc13498b2535136f6dfe0678499012e853ee9abcab1" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/algorithm-stability-yaml/benchmark.py b/examples/algorithm-stability-yaml/benchmark.py new file mode 100644 index 0000000..099c905 --- /dev/null +++ b/examples/algorithm-stability-yaml/benchmark.py @@ -0,0 +1,111 @@ +from typing import Dict, Optional, Union + +import hydra +import numpy as np +import pandas as pd +from skrebate import ReliefF + +from fseval.config import PipelineConfig +from fseval.main import run_pipeline +from fseval.types import AbstractEstimator, AbstractMetric, Callback + +""" +The checkInputType and getStability functions come from the following paper: + +[1] On the Stability of Feature Selection. Sarah Nogueira, Konstantinos Sechidis, Gavin Brown. + Journal of Machine Learning Reasearch (JMLR). 2017. +You can find a full demo using this package at: +http://htmlpreview.github.io/?https://github.com/nogueirs/JMLR2017/blob/master/python/stabilityDemo.html +NB: This package requires the installation of the packages: numpy, scipy and math +""" + + +def checkInputType(Z): + """This function checks that Z is of the rigt type and dimension. + It raises an exception if not. + OUTPUT: The input Z as a numpy.ndarray + """ + ### We check that Z is a list or a numpy.array + if isinstance(Z, list): + Z = np.asarray(Z) + elif not isinstance(Z, np.ndarray): + raise ValueError("The input matrix Z should be of type list or numpy.ndarray") + ### We check if Z is a matrix (2 dimensions) + if Z.ndim != 2: + raise ValueError("The input matrix Z should be of dimension 2") + return Z + + +def getStability(Z): + """ + Let us assume we have M>1 feature sets and d>0 features in total. + This function computes the stability estimate as given in Definition 4 in [1]. + + INPUT: A BINARY matrix Z (given as a list or as a numpy.ndarray of size M*d). + Each row of the binary matrix represents a feature set, where a 1 at the f^th position + means the f^th feature has been selected and a 0 means it has not been selected. + + OUTPUT: The stability of the feature selection procedure + """ + Z = checkInputType(Z) + M, d = Z.shape + hatPF = np.mean(Z, axis=0) + kbar = np.sum(hatPF) + denom = (kbar / d) * (1 - kbar / d) + return 1 - (M / (M - 1)) * np.mean(np.multiply(hatPF, 1 - hatPF)) / denom + + +class StabilityNogueira(AbstractMetric): + def score_bootstrap( + self, + ranker: AbstractEstimator, + validator: AbstractEstimator, + callbacks: Callback, + scores: Dict, + **kwargs, + ) -> Dict: + # compute stability and send to table + Z = np.array(self.support_matrix) + Z = Z.astype(int) + stability = getStability(Z) + stability_df = pd.DataFrame([{"stability": stability}]) + callbacks.on_table(stability_df, "stability") + + # set in scores dict + scores["stability"] = stability + + return scores + + def score_ranking( + self, + scores: Union[Dict, pd.DataFrame], + ranker: AbstractEstimator, + bootstrap_state: int, + callbacks: Callback, + feature_importances: Optional[np.ndarray] = None, + ): + support_matrix = getattr(self, "support_matrix", []) + self.support_matrix = support_matrix + self.support_matrix.append(ranker.feature_support_) + + +class ReliefF_FeatureSelection(ReliefF): + def fit(self, X, y): + super(ReliefF_FeatureSelection, self).fit(X, y) + + # extract feature subset from ReliefF + feature_subset = self.top_features_[: self.n_features_to_select] + + # set `support_` vector + _, p = np.shape(X) + self.support_ = np.zeros(p, dtype=bool) + self.support_[feature_subset] = True + + +@hydra.main(config_path="conf", config_name="my_config") +def main(cfg: PipelineConfig) -> None: + run_pipeline(cfg) + + +if __name__ == "__main__": + main() diff --git a/examples/algorithm-stability-yaml/conf/dataset/synclf_hard.yaml b/examples/algorithm-stability-yaml/conf/dataset/synclf_hard.yaml new file mode 100644 index 0000000..325d064 --- /dev/null +++ b/examples/algorithm-stability-yaml/conf/dataset/synclf_hard.yaml @@ -0,0 +1,18 @@ +name: Synclf hard +task: classification +domain: synthetic +group: Synclf +adapter: + _target_: sklearn.datasets.make_classification + class_sep: 0.8 + n_classes: 3 + n_clusters_per_class: 3 + n_features: 50 + n_informative: 4 + n_redundant: 0 + n_repeated: 0 + n_samples: 1000 + random_state: 0 + shuffle: false +feature_importances: + X[:, 0:4]: 1.0 diff --git a/examples/algorithm-stability-yaml/conf/metrics/stability_nogueira.yaml b/examples/algorithm-stability-yaml/conf/metrics/stability_nogueira.yaml new file mode 100644 index 0000000..5915374 --- /dev/null +++ b/examples/algorithm-stability-yaml/conf/metrics/stability_nogueira.yaml @@ -0,0 +1,3 @@ +# @package metrics +ranking_scores: + _target_: benchmark.StabilityNogueira diff --git a/examples/algorithm-stability-yaml/conf/my_config.yaml b/examples/algorithm-stability-yaml/conf/my_config.yaml new file mode 100644 index 0000000..39d9662 --- /dev/null +++ b/examples/algorithm-stability-yaml/conf/my_config.yaml @@ -0,0 +1,11 @@ +defaults: + - base_pipeline_config + - _self_ + - override dataset: synclf_hard + - override validator: knn + - override /callbacks: + - to_sql + - override /metrics: + - stability_nogueira + +n_bootstraps: 10 diff --git a/examples/algorithm-stability-yaml/conf/ranker/boruta.yaml b/examples/algorithm-stability-yaml/conf/ranker/boruta.yaml new file mode 100644 index 0000000..ef7e0e4 --- /dev/null +++ b/examples/algorithm-stability-yaml/conf/ranker/boruta.yaml @@ -0,0 +1,11 @@ +name: Boruta +estimator: + _target_: boruta.boruta_py.BorutaPy + estimator: + _target_: sklearn.ensemble.RandomForestClassifier + n_estimators: auto +_estimator_type: classifier +multioutput: false +estimates_feature_importances: false +estimates_feature_support: true +estimates_feature_ranking: true \ No newline at end of file diff --git a/examples/algorithm-stability-yaml/conf/ranker/relieff.yaml b/examples/algorithm-stability-yaml/conf/ranker/relieff.yaml new file mode 100644 index 0000000..3b36a4c --- /dev/null +++ b/examples/algorithm-stability-yaml/conf/ranker/relieff.yaml @@ -0,0 +1,7 @@ +name: ReliefF +estimator: + _target_: benchmark.ReliefF_FeatureSelection + n_features_to_select: 10 # select best 10 features in feature subset. +_estimator_type: classifier +estimates_feature_importances: true +estimates_feature_support: true diff --git a/examples/algorithm-stability-yaml/conf/validator/knn.yaml b/examples/algorithm-stability-yaml/conf/validator/knn.yaml new file mode 100644 index 0000000..7a3b4c5 --- /dev/null +++ b/examples/algorithm-stability-yaml/conf/validator/knn.yaml @@ -0,0 +1,6 @@ +name: k-NN +estimator: + _target_: sklearn.neighbors.KNeighborsClassifier +_estimator_type: classifier +multioutput: false +estimates_target: true diff --git a/fseval/callbacks/to_sql.py b/fseval/callbacks/to_sql.py index 4c4f410..3d88cbe 100644 --- a/fseval/callbacks/to_sql.py +++ b/fseval/callbacks/to_sql.py @@ -3,11 +3,11 @@ from typing import Dict import pandas as pd -from fseval.config.callbacks.to_sql import ToSQLCallback -from fseval.types import TerminalColor from omegaconf import MISSING, DictConfig from sqlalchemy import create_engine -from sqlalchemy.pool import NullPool + +from fseval.config.callbacks.to_sql import ToSQLCallback +from fseval.types import TerminalColor from ._base_export_callback import BaseExportCallback diff --git a/fseval/pipelines/_experiment.py b/fseval/pipelines/_experiment.py index 14c7e70..06170a8 100644 --- a/fseval/pipelines/_experiment.py +++ b/fseval/pipelines/_experiment.py @@ -7,10 +7,10 @@ import numpy as np import pandas as pd +from humanfriendly import format_timespan + from fseval.pipeline.estimator import Estimator from fseval.types import AbstractEstimator, Callback, TerminalColor -from humanfriendly import format_timespan -from sqlalchemy.engine import Engine @dataclass diff --git a/fseval/pipelines/rank_and_validate/_support_validator.py b/fseval/pipelines/rank_and_validate/_support_validator.py index 9acda9f..f4db467 100644 --- a/fseval/pipelines/rank_and_validate/_support_validator.py +++ b/fseval/pipelines/rank_and_validate/_support_validator.py @@ -63,10 +63,11 @@ def score(self, X, y, **kwargs) -> Union[Dict, pd.DataFrame, np.generic, None]: scores = pd.DataFrame([scores_dict]) # add custom metrics + X_, y_ = self._prepare_data(X, y) + for metric_name, metric_class in self.metrics.items(): - X, y = self._prepare_data(X, y) scores_metric = metric_class.score_support( # type: ignore - scores, self.validator, X, y, self.callbacks + scores, self.validator, X_, y_, self.callbacks ) # type: ignore if scores_metric is not None: diff --git a/tests/integration/test_main.py b/tests/integration/test_main.py index 81d64c8..bbaf72d 100644 --- a/tests/integration/test_main.py +++ b/tests/integration/test_main.py @@ -2,9 +2,10 @@ import tempfile import pytest +from hydra.conf import ConfigStore + from fseval.config import EstimatorConfig, PipelineConfig from fseval.main import run_pipeline -from fseval.types import IncompatibilityError from fseval.utils.hydra_utils import get_config from hydra.conf import ConfigStore from hydra.errors import InstantiationException diff --git a/website/docs/_recipes/algorithm-stability.md b/website/docs/_recipes/algorithm-stability.md deleted file mode 100644 index 9ac8290..0000000 --- a/website/docs/_recipes/algorithm-stability.md +++ /dev/null @@ -1 +0,0 @@ -# Analyze algorithm stability \ No newline at end of file diff --git a/website/docs/_recipes/running-on-aws.md b/website/docs/_recipes/running-on-aws.md deleted file mode 100644 index ab76c2f..0000000 --- a/website/docs/_recipes/running-on-aws.md +++ /dev/null @@ -1,3 +0,0 @@ -# Running on AWS - -evaluate! \ No newline at end of file diff --git a/website/docs/_recipes/running-on-slurm.md b/website/docs/_recipes/running-on-slurm.md deleted file mode 100644 index 7474275..0000000 --- a/website/docs/_recipes/running-on-slurm.md +++ /dev/null @@ -1 +0,0 @@ -# Running on a SLURM cluster \ No newline at end of file diff --git a/website/docs/quick-start.mdx b/website/docs/quick-start.mdx index bdb48da..ca1b704 100644 --- a/website/docs/quick-start.mdx +++ b/website/docs/quick-start.mdx @@ -144,6 +144,14 @@ We can now decide how to export the results. We can upload our results to a live sql_con=sqlite:////Users/dunnkers/Downloads/results.sqlite # any well-defined database URL ``` +:::note Relative vs absolute paths + +If you define a _relative_ database URL, like `sql_con=sqlite:///./results.sqlite`, the results will be saved right where Hydra stores its individual run files. In other words, multiple `.sqlite` files are stored in the `./multirun` subfolders. + +To prevent this, and store all results in 1 `.sqlite` file, use an **absolute** path, like above. But preferably, you are using a proper running database - see the recipes for more instructions on this. + +::: + We are now ready to run an experiment. In a terminal, `cd` into the unzipped example directory and run the following: ```shell python benchmark.py --multirun ranker='glob(*)' +callbacks.to_sql.url=$sql_con diff --git a/website/docs/_recipes/_category_.json b/website/docs/recipes/_category_.json similarity index 100% rename from website/docs/_recipes/_category_.json rename to website/docs/recipes/_category_.json diff --git a/website/docs/recipes/algorithm-stability.md b/website/docs/recipes/algorithm-stability.md new file mode 100644 index 0000000..3f9d42c --- /dev/null +++ b/website/docs/recipes/algorithm-stability.md @@ -0,0 +1,320 @@ +# Analyze algorithm stability + +For many applications, it is very important the algorithms that are used are **stable** enough. This means, that when a different sample of data is taken from some distribution, the results will turn out similar. This, combined with possible inherent stochastic properties of an algorithm, make up for the _stability_ of the algorithm. The same applies to Feature Selection or Feature Ranking algorithms. + +Therefore, let's do such an experiment! We are going to compare the stability of [ReliefF](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.56.4740&rep=rep1&type=pdf) to [Boruta](https://www.jstatsoft.org/article/view/v036i11), two popular feature selection algorithms. We are going to do this using a metric introduced in [Nogueira et al, 2018](https://www.jmlr.org/papers/volume18/17-514/17-514.pdf). + + +## The experiment + +We are going to run an experiment with the following [configuration](https://github.com/dunnkers/fseval/tree/master/examples/algorithm-stability-yaml/). + +Download the experiment config: [algorithm-stability-yaml.zip](pathname:///fseval/zipped-examples/algorithm-stability-yaml.zip) + +Most notably are the following configuration settings: + +```yaml title="my_config.yaml" +defaults: + - base_pipeline_config + - _self_ + - override dataset: synclf_hard + - override validator: knn + - override /callbacks: + - to_sql + // highlight-start + - override /metrics: + - stability_nogueira + // highlight-end + +// highlight-start +n_bootstraps: 10 +// highlight-end +``` + +That means, we are going to generate a synthetic dataset and sample 10 subsets from it. This is because `n_bootstraps=10`. Then, after the feature selection algorithm was executed and fitted on the dataset, a custom installed metric will be executed, called `stability_nogueira`. This can be found in the `/conf/metrics` folder, which in turn refers to a class in the `benchmark.py` file. + +To now run the experiment, run the following command inside the `algorithm-stability-yaml` folder: + +```shell +python benchmark.py --multirun ranker="glob(*)" +callbacks.to_sql.url="sqlite:///$HOME/results.sqlite" +``` + +## Analyzing the results + +### Recap + +Hi! Let's analyze the results of the experiment you just ran. To **recap**: + +1. You just ran something similar to: + + `python benchmark.py --multirun ranker="glob(*)" +callbacks.to_sql.url="sqlite:///$HOME/results.sqlite"` +2. There now should exist a `.sqlite` file at this path: `$HOME/results.sqlite`: + + ``` + $ ls -al $HOME/results.sqlite + -rw-r--r-- 1 vscode vscode 20480 Sep 21 08:16 /home/vscode/results.sqlite + ``` + +Let's now analyze the results! 📈 + +### Analysis + +> The rest of the text assumes all code was ran inside a Jupyter Notebook, in chronological order. The source Notebook can be found [here](https://github.com/dunnkers/fseval/tree/master/examples/algorithm-stability-yaml/analyze-results.ipynb) + +First, we will install `plotly-express`, so we can make nice plots later. + + +```python +%pip install plotly-express --quiet +``` + + +Figure out the SQL connection URI. + + +```python +import os + +con: str = "sqlite:///" + os.environ["HOME"] + "/results.sqlite" +con +``` + + + + + 'sqlite:////home/vscode/results.sqlite' + + + +Read in the `experiments` table. This table contains metadata for all 'experiments' that have been run. + + +```python +import pandas as pd + +experiments: pd.DataFrame = pd.read_sql_table("experiments", con=con, index_col="id") +experiments +``` + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
datasetdataset/ndataset/pdataset/taskdataset/groupdataset/domainrankervalidatorlocal_dirdate_created
id
38vqcwusSynclf hard1000050classificationSynclfsyntheticBorutak-NN/workspaces/fseval/examples/algorithm-stabilit...2022-09-21 08:22:28.965510
y6bb1hccSynclf hard100050classificationSynclfsyntheticBorutak-NN/workspaces/fseval/examples/algorithm-stabilit...2022-09-21 08:22:53.609396
3vtr13pgSynclf hard100050classificationSynclfsyntheticReliefFk-NN/workspaces/fseval/examples/algorithm-stabilit...2022-09-21 08:25:09.974370
+
+ + + +That's looking good 🙌🏻. + +Now, let's read in the `stability` table. We put data in this table by using our custom-made metric, defined in the `StabilityNogueira` class in `benchmark.py`. There, we push data to this table using `callbacks.on_table`. + + +```python +stability: pd.DataFrame = pd.read_sql_table("stability", con=con, index_col="id") +stability +``` + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
indexstability
id
y6bb1hcc00.933546
3vtr13pg01.000000
+
+ + + +Cool. Now let's join the experiments with their actual metrics. + + +```python +stability_experiments = stability.join(experiments) +stability_experiments +``` + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
indexstabilitydatasetdataset/ndataset/pdataset/taskdataset/groupdataset/domainrankervalidatorlocal_dirdate_created
id
y6bb1hcc00.933546Synclf hard100050classificationSynclfsyntheticBorutak-NN/workspaces/fseval/examples/algorithm-stabilit...2022-09-21 08:22:53.609396
3vtr13pg01.000000Synclf hard100050classificationSynclfsyntheticReliefFk-NN/workspaces/fseval/examples/algorithm-stabilit...2022-09-21 08:25:09.974370
+
+ + + +Finally, we can plot the results so we can get a better grasp of what's going on: + + +```python +import plotly.express as px + +px.bar(stability_experiments, + x="ranker", + y="stability" +) +``` + + +![feature selectors algorithm stability](/img/recipes/feature-selectors-stability-barplot.png) + + +We can now observe that for Boruta and ReliefF, ReliefF is the most 'stable' given this dataset, getting 100% the same features for all 10 bootstraps that were run. diff --git a/website/static/img/recipes/feature-selectors-stability-barplot.png b/website/static/img/recipes/feature-selectors-stability-barplot.png new file mode 100644 index 0000000000000000000000000000000000000000..41c70bfac62f5475be55ebcc103df472d8f63444 GIT binary patch literal 20039 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 IU;6d`0MqlBfB*mh literal 0 HcmV?d00001 diff --git a/website/static/zipped-examples/algorithm-stability-yaml.zip b/website/static/zipped-examples/algorithm-stability-yaml.zip new file mode 100644 index 0000000000000000000000000000000000000000..9c83ba27356d184876bbb2d71c9d82126544e20e GIT binary patch literal 1114441 zcmV)AK*YaLO9KQH00;mG05)YrRR91000000092kj02Kfr0AX%nYEV zE@^OiZemqb4FCt|4LoC}5JPiM*YCx7o^x@o&ei^q^QZPF zoT>sqf)u5e)1K_UyYWm~BnT9MLZPZqC=@>auiBo+gCNk7_S?`Z%e%p&Q(O;I(wdYcWrj zL7LQ}3BB^01&{qX57XLhw5@Z_i5ZnxWi`uf$&XKmTJmPo(Y`z5cr3tgJ=nAgJS zx|YnMWiW=$`_KWm_KPg=OKsu@yym8W8b7Hm+;nEweyIZe%jVww@=Gz{PqiSaHQk_A z*~CKDW_;a@oB02lRl7>OXw215x6?oB)L!#Nt!vdfN49lPYtI1dZSj38*g})?CqWyC zjtcsCRQr#A|9}4X9_GA+KSW}mg(|=D<0NIZYhJtdgP`VzNeW{NL=i-3aN7iWgcc;f zFrX>S+tm-HRGj8gdT@qV~i0&mTC1-A^7ul}(KXj!t_KxPGXOQEl&W z&Q`X}vBz>CwO+_o2B!hKy4>u|LQcuFr_5v zE%X$KZo$XJPxz;Wa3?XaqgpzO#YeN*Pnqq%COYf`eq)o^!4S*oEQ526!5wT#t zc!8TF@SHW}Vy`?jC)Bw00XqTwP%TirqJe90M48#?NgMub_=e3$c)CNDcDPHX#V(oP z@4H>{P2*^}6Topahq=5hr%(pB<+uWD0=#HzrXT_md^`5HW)&uzs61O@Zq{fxw zy9uPf0nq&e{6F(s6@oEm#k@Kp-t$SL(L1_&?_DpG&FvbWzP=5;U;>gO#-Xd2%_5uC zfq&aF47PqHZsJdXF`|swmQ%E6TaM&51Ox$--InQ#C|;)SwjA%8-+Z&}d;2Rt*9QmL%v|6ogz`C7ox7j&vip5N~Yj=-Y#|MLf zwE=6NJn?Q1Mk8zHd7o*h{}}1dHqwJ$>!5SoJ3jbKBi*}7W2?8A{?8lf?|IPWW;e1SOY2K$##dx*aPSodXN-FeZ%GIl7kd7SJ%$!32mWI< zKOFNL=o#)z_~VN`v$BeRg8l5x%tcdv5Jm5B4`v!gk0% z*Q^$h{Xf=iZ;F_2Gt1lGcnwB?IIYN)8RAB_wPk|UL1Sv(GD)L(bMB5g8s=i(W3@4# z_#w}MzgED%iKa{L$L=pe1Ym|=^v$4O#s5-gUf6v9}*7jJfPG_@e z=|5@3L_`P*s3Nr;)s!t-Fs=j?>bI!8m`!11cb%gD&(tY0BmBOnxX~%JJmLh^Hy=m1*oI3p`SDEp}q25p9fw z_QPx@2md6Si6Xy~#Ebm}^bi^&7uW4y-78llSFfyVwQCS|(RJ%vI#KX63Mc*)#_{7z zH=X^(y%7m^?J=>A$E$S<0{-(SHABLY*c6AwIwPsYacg$Gd{ll@y~#W zNff4b?PBlso990@|Helbd#jZ>Ty1O=q5{S-=I@t&%xjMvr}lUm%B`%&<_5co%-*7$ z#>JjEZE>+@R`*_jGaidYHWn9qkJM+0 zBJtCbnVr-yhdfAljbN%uG^hg5{=WEax%06p2j={erK0dhqq<5#cW2_quFiwU*WBPt z{A|dR@L+O=e{9^^H07kiwy#!(kzvOC81r-)hZ&*NQiHRYh33aB#Wy0B5C$K`=h3Bj z;`DUo#x=AxS0F(W-2T3N7-A{FbYRLF0|5J|V`93i(p;H_a6KpF*R^MH9L0dEr*0Sm z%Y<%@<*?KqU+gua#>L)aoDS(Mj;?E73)vnt=;f;~e|Yii?KiL9y#4Cc58r%wvB$g> zLR~u82j`<4O#9<%HN?K0cP?AF0gd3t$wmzpb+Em>Y9WdeCC znH}p=A6FCT2sXjp4Ph*DI>YEBYy~`=rn6zxXqdhcBHo9pH7nzzWuNEm#OlqDKoLNl z2^!ad*a?{-jQqu3tJO|ouO0ZntxV=Skn<<@Qw^3T7kl<&P{za&DmzHyA@aB8#GU)W zEs)r&1rKYl-4Oi}u6R6lLzlU+?*=S^#3oE#e=-EIIQ2ujGhDdiF~})+dd#2-Sj2!# zfr>`UG{rvKkADMn4U|2Jyk(LB6t4jG0>xJVGrJ3GYmouZ4UscO@u<_n%8{v&QF`#M^Qy{ z9(|}vO)3(j^|ZAF*^1<9Di8zxn*_j8X8w50L+!J~&%_S``(OI~Lw7tXeARFx^7Ooe zu{X%Ni3_2os%8--KB3JWB~bus+%Sz6KnDSzq(~T`zJOZOXjQG9= zF$#cQ68}RXXP#Ql5B#hmf1X;-4-;iQdzM(v&8vX(O|X-y+{wn=Rhc*CV#R0**)10!vC`V73ARIzFMnBOD{yMscmxOKMoA)=31X+C6i!d){d0th?qb;i=gq zW_AjkCpB8vc-$M;a;9LBu%^fD_s*~aBl6=`L{#TV?#&Y2m*bw#qLYG8m%Ez3lL4#H zQELr7c^;4zZfYaj9*#k>0Xw$+5JhWq1naMN!%=k81PVscC$?jokfH>Cli2+c&|5~6 zF%LkV0#_{UJIk%^>zSYOCRtTrY_4N>vDUUx8Wzbs14+sRPAA(sSY(Z`dyAV|AKqtN zkU!FYiRn{^Tp)~apN!|G3y+UIDVXr_J|@JoBdLDS}}l%)HBZ-3rv)qXckVMd8GWkr+8 zBx6i4BWf1T6pe9V3w3Tp2^Czi*i!2#?^x`P{bf?%JJ~d=o*x^&=lvwzU6D&y=PlbH zQ_*{dO12q!M)go&)!4aWe|sI#yPtp43NoX#iGRb#G#v(=Ts^`^jf6TKeSA8Llo;)` zKTc=1b<~kG@^ekF$87CO82Y)^0u95T_|Qjq5Ga{LKlI``xGptAqRh%rMnt1p)WZg4 zwUm_}`(KW{<3o3{{(f0NVP@~aa|pgLmPL-+iaD@Mj~nfO zur}0Mga6Dt@u&6_5?a3|O&M8-whCIA;Wy9uv&bp4sg|QLENlU$UZZE*_sf7A5%bU8 zOLMhiAB#31dteP#m#llQ2}w78W*{;tm9*XIH0Dzm3Ek9dsm=mIsCx+Y_I`7{xc5fO zo^oy32m9avyVieb6^kg?Qjh#<9~>S*WrK%R7Ts*92S3;cM_9$dZ>z$K<_n-w&;;7R zv_WZfRD_Td2Mg!M2!BEfB?m|_Ig(WAYO}Al-435K!My0?^PsjIlt`kO$R$RNw5wBkJ74_=$k# zg6^}eHu2p)JVw4^{dUHp&_#>l(d}k@W*HEnNR!=%@s=5PQ=p3KK4u^7qYl;eFis-D zO*f36_Srt_BH!#jjHk@}B#oxAJKs=W{@Fh2b+NvO@s$i!lWM z>_xErOo~ZvnygipiRHC+mA{nbxPpTYr`q8A;TZi{BaKeT|5&R+X*R`{l#|PPkW7wd zfv3aLRrw-7wN$D|)sdwws){+2xv!6ozNS=Urqm1hp36rC33!Fx*nFvTX|kM|go0-j z)}&pQO>w)&iVd~Zn(-|mX0>RiR{iqDvR* z4auJDfoOgvTGnDYtx_g50z0CGU-w}qgM!ej zs!%82qeJXr?_p|vCPFJ}%O=Lr5h~fehbi?^T2#~{C*08y_2*%#d@fuoD$3{b(QzN^ zdYBro%k~YmDMoSJp}sv#g%_$=RZYZyj>%@#dzg}5P;08H(z)AlmwNRuWj)hcDr(F4 z=5Y_z_1?p50=n8+Rhh<=k7+jd9>zV&+SKMcGp>JpNMragE>ci(H&-fT%JC7-g#N?0 zh^{VgsSw%n@i8v&`VZqJWsP}roto;@p^6{IUP}7x=6aRLwK_B_`w!zZYYOu{6%(ed zPM3!EVN9o_fp4x@sSQ?#=4$_8d}wV!ySd_AGl8mc+V&rAt(2>U4YoC@`dF6e=>xfv zTvt|gP%2ecr%(NQAUo36!&SBEI-AuQpl!7OKu(m~3#uy26+){+n@NKQvY~CdQ?58! zokN@$gNN}TwUn-?N~y6{=Lqd)gNN~)+{98REUQanR>4E^Q$r#1vHrC~L-GFpRpgIrokxzt z&wL{$bHljTbmQ2~j1lneMM1#jF^?>f4i2by9&kKy2#l@i`LVb3(?og!@-aI7E|43W zwr_;3anHd&cXuCG3?KAA%OEgU1|Ia$53Pu^D54VuBxWajTM4n7JlVxn)wDNL^27CRuQMy|Bj=#U}w`Okg>N@;3juyb=ZxKhz zo8LV1Tk^&Bhg*&sy}q4~q5uzZCG@oRspZ4a;}Y(y;z*ConXc@rj|g>3m1)b1LO|@& z1L%(9Wa*F8b88VtX@tej^7h$TrTJiZ1w>B_g=)s-gL!wCw#XT%$;EGu?d4iwF`7_V zJZvjGDGf2KY0_7dr?+0fp-WtUhq1ox0EF9)a1TS2IDiBsUQkJpEZ#uZ?(Wb73?1z# z17FK<*0gMmSY`!6ymEsj&p$5mj|NuXfIpVm?&dkhTJc4OI5W>MFJ+K8$ump~4JhH~ zs_-$4#yrVC-WEOvI4|;#Hv+RryD^{%>NGf=czYC^;>4PM#%=B=7<&{?l{R>G$Scml zjS2(B4ZR0%6$2A{86B(z83Ujn67#cX=a=$enQW|nyo|~MYZYJ4qe~VziNvNr3iBXA zG73rE{YbAO)_Faj&Q$#Z$W;hMu`3)L>8 zz{Pa*Qd@!k#KX!IM+GO&N8xTIdbV8a)67}oNxTG4jT+6aIh>r&&O4XbQ27K9OeUY< zuLUWOIxB@Efc?z%W=7#iAOhx2T0jTGVb&2g#3>Zt-A&Hp%l&=)d(JPW1Cw7QpeAL z?(ZAE!pb_U@D&Evn1sKU!lIg7_pnldR3onHbBs-FlI;7*J&+zL?|= z)gvQj?;~fFAp>6b_w{7Ow1Hb2>&>mG8%GHLWB1U6HWKM3JUKZnmp@Ulwfq|)ne07v z>Qjpq>FrHE$?zC{%N-@i|E(qp0TX7LmMYtQ(`jbVZ>)@kij1in8gW|}3-1aPJuE6W zm6(hj9hZ+pH-P{wJ66mH=S4}U+5#}F1Q-Iq5QjBxgn4tH=v+tkQfo28KJfe7U2blM zJ*~0K&wCM8gYtMw)a0=OoG|1ijzgxy6Ljs93-h4fhD%eXVRzCfUpeA101>nw)udvihVB zu4ww_$bJpTj+xI~<#Ehgb00M)Vi1+5+B0gp?I2lv3NI-)6y+#3=%tZCq0L64qTYjY!KYo`<_l&08R<}4XeW{^5Lp!5UQM zA(!_1GKpdN8&>7;oUt|Y=gRuU$Dgz!oyK82WC3T;MPi zIFEtbZ@}E^IV{qjWT>{V?UL3vA^Qc^v3n81{U=sKWwzC$Q(=XAQbkW{Qhx<{`m-B6 zQj`zbt<~rbsz$BI396c^a=ZY{JP$)2XRvo@L31Y*Z>#ou#MEc0w*u#;{mF>zG`oW; z=>KFyR*l{7fyk@l zgr}x0pI!)+WeGyutCCI_wq|W9Q-b{bOORWi&UqTk-@tnsVLfgvO}1L?9`QId01 ziS8XSTPU;@v-dG0iO=U5X1|3-!kX^0WA#2xTaDKHcx^RaKMw<@wZh!JF?^=+;>?bQ zrl&s`^FtVO^anexLf>jb`|hbws(PDxmn)bX=h;0KNG)(96>P5o+fWe7pW1;UmLAZ} z?X9@4m&Io6fQ(gfL4ihe(Baq3hjav~p{)yB%-f;=Z7!irDgn7-{izz-+^JUc9@MPWSdni7SNe>YTF-kQ zrgj?A3SPAt8)a7UsbDvtqGEDwhP)y3He{5h{{5{kGx_^avJ*|pC2$o@Rwzj3XT{g2 zO|#vHS@vlQek4!57li#kiosc*iNWnw>;K6NZX2fl$1%7~$oMbC;C5s}zXyZcim%_9 z!KsZDzQW!A%x@UH-lK_fX65YO{rdXNhYFpsSnK!bx;q)|u0{i>Z6Zo~x49~&e<`g%QJV&2U zQH9mcZhC;dZ;Xg}w4Zvvzd=Zj1rhuTUp0Xug{=MkFW_4W-@bvo0wy{X*v6G?=M}Z{ z?vC1v@0f1k#=hrVH8Bla{(0MkQ=F=$N9$BP7F$Rhs=%ebSYsxqoSIDFIQ4?u2l8Y~ zCaWAW6*K6&*Wct*M1$Vor%o&iH28@V(r)N&#}VI%tvcc(+rbS$%Pzb*?)5~_Dno?m zJHWr{b9&QYz?=?o8s9byq}nDDvU$qMRp%CF=xx&|eQa{+GT`oFt{&wMj4=p|k>QJ> zV;BNU`DdNNz`B(#U&wC?o)M+p*)?l;$);|WWdeEK{Ybzozm))w5ze+#u%HMQ2-W&NO3&c1iVgxk3Cyh(7Db%ySi`JFV< zOpqjn&5p`aa^h@9K<*40I~>F@`7517!x*G&*l^tQSURN)sR=ayaWph{lLF)YK{@wq z<~3Y-rS8Z#q#K;z8zo~w^I3&QU!`{d|Boj z9lpGzG0EO4@NrP$Txm0C~RNT zvhr&~chCH~u*?#RKkKw}Ce}3=eK@*?MNVGeeF3DVfpFp^`Jo7{l0TEXoSdiV(@0E= zWjYS@^AWC39+8%?fmv@GK`7s`x1$!6E~ubGY_0>U@ZBB!P1N-|!hg@-;JHUGd$4ve z!e(r?fgOpx>kXOFiM$z@Lw}n~yXIwE_kG!Q z>mDieFko~T{Ha7xzF{WXmg0FPrvszYVIx>FzJdRqINd&b=}g%(Ct@$0EB4g6W#2lz zE_?2D*((PRLFA`wJ}5}eM;d7RMax|*f?GN(!GJuL;)*y%gKs~r{<<1|i7RhBbMcbB zGTHa|_67byC;68q!!^UV_yAOHW|3gI(0ygd@k~&1$)CbSxhrTo>p*paixKWLkf!(NKjmdJ28+J9-a{s+a@i0GS_sDS!!R~;;q9?v~xs@HD_b*JA9EfuRay2C9k4gys8U&vp#o_e z9Ttc%#=4j{N)0HV_#mlR;gB!ZqT5%mpRcO&dS3D)WY08(c*dP$q|}hy-K9#{XoL(% zl)ji7oZ#g-MJL>4eH~}#m9pbvC!K=Aw7(xqg2>L3Q6D~2TSa(kYV5t{1HG~G@Z09b zs?%|zvG>reRCb6?CqV=~dnWElBaVp1oZ_&dAt+&i@`I0CAx~1nYynf>;MFFLtENf% z{9pNP0+Yc_JRV}OZ?gpqH}-jAM53W4aiMBZG^Y~mRep+Bs5YTG+h(;l_zo)J_og1U z4RzA2VVT3k;U~!%w-cHSPO{RavZo2!?0kdqrs+0~Se;h0%zA3J#Y~Q2_G0^jy3^{h zXuG4ml91G`dZ0M*a?OoI9>>Z=Bl-LTQ&A*%58`)V6>^aNVZ4rOx4=sptHaUs!_i7peN z{(Z-XR9~k0tCbO+ggtYo3L;~VRO&^p+AOJLHw~eR~i!G-{O#7CosU>YAfmi4X z{1uJQZ}fBgdLZ+Hh67lW<NnSb%;#eCg0c(DN&8UWVc4Hgf1Q2qDY3*)6THjoSIk05}48PF;n@pW6$|K zPytoeusNF$aE1|WW9M0wFk!m6g zXA_eS`S~XaC?viKN_7N6%i-t#rAd1Mpg@2S!#0F0rZ$Ag;pj2Naibz>^9^EOoW92F zO_?2keJ5#lhyJO9q(*h*H2{!il-HsaleKhcNvPWk?$xq&I-*W4%la#&dQ!370!wi& z7=36l3u$u(ZIHX164i`qVzO%XQx-NenI@+)*Q_->mw3A<-|LlGj;~ebmnyTISgR~9 zREGbTV(0^*=K0vEkayWCScU&EURH=RY?TXC(7qfelXrBkQDv2?0RC%e`9;{MLOK#(MOcLVwKevnTQB;JFw z8${m`hLuJN%$vQzU+WU#oTFL;0_PIpap6V1BSeCQ;6?%*KDsj1$|_OyocqkZWalIH z=920Xfm@)K9dYul9NcfQur9p+>@IeL@LWQ8ULue0u^GF82qlP+un!F9o89T;l|w~e zVbSGc?534NC#_7#5Gq(rYh>e=2!viu-L}v0aeCiWNy;J#U5Fj1*~Ay zVjos4vkB6Te^uB>D>Q{HC{bm^B6TEM7uBxWwCqk^AG$kM*Crw)Wf{q%PG3A|4o6M2 zql%S$Uf?gwB=sk^PQ+f3&8j8rQ&|k8lwIt-ean-Vbk8{q!$(r->_;6sTTQX8@^Dia z>5Q$#o5HYUOb<9^TNJl>mxxogMfcPUDnj1?*o1 z*j1J@Db(P7T9l_?t?(yAdGd^VyzQ3Tf-p_)4Z@_yaMJ8h^=h$`wF~Q?kiMAlcC)&>i&;IaHmir5E$I($p0uR9yR4?dYD;=pZ9EqN zRt#8iHE+ze;WjPwqu$~MgPg%J&{Nw<8`*evn0N%81VAv&*nX`U+c9zm{HsT1W79Tlb649Txpbb8i*hqFrA4cqVr&)7qEyH**;q5ZxemHbJQ+r0 zdW+1!aLM#WxmaSjGP|ZMU>LRa`f#hEIvK=RTxB?uW<1F{;?jm5 z*8o78ZeEL4Ox9AeqJ8^YtY|@{6)pKxE81?RvyBF^o$X;8tz1PT*UK#nY^mL_m!D(^ zd%M{pgDV7B)7ozp%ug_cUEdG(T7mrpL)Z}%!^cpj zT3IEkp7WH2m+ahUx0h7cry9bZ$l-Ycg?~RAivPRYP~5z(!cjVXA(h23+;rORHajhM zW3GO0qYPSFDq{W{S_kA(4uvWt*cW@f)={f-v9}@@5+Qb3B{PYI{s;;+?#1w6(i%q| zk;;ZB;AAF@u0tMwDKnx;VVpmk*~>FwN~*SkQ~<)mGKB;c-TOzMU+c9%MtaS^n&>L+ zn`wOe5%5 zbAAb8mS5(Jer(2|er4e?)cFK`8G(Ev@HrQW1r5lU&I29n6oAO{Hz(PCDv*(sB_S1bpDT9z!-y;f{e zQ5~KUD43#jQ`ZT(QKzTq#-5%!{H$Yt<9<_Zkdh&@(=*6nH&R_s%rZUl6ZmSR)d9vo zlH*A(6jTs?((Ouo`lLrzhmOhCzVyk;pf+yJVR+&X)i!(B@J~-qtzl~LbN3SZe$qJ$ z9T#J;I<8W0!j<%P`F)#$jx~;JQ*-jBplffo&U9uBXLt5m&Gt`H95sHLp5b2@5ix2| z6y#2+Ot#9PaQn%=Y+!%OxkxV zJ$pHCe2S(c$Sb0AZv@RH*)j?_OKzw;RZ~$;t1@Fvh!^+fzYt!+)A;wsi&mwMm$ePc z0%`y+O-o|()_Nu6xH@wDa=WQOIk%AyBJ)o|nqr|@#MN3&TAyLEx#sS*R+QY- z0%@d%b>}7NTg!Ph>PSP*Bq(BWBkHmy0pl1$jSYo_5SPQk0cR~wRg*>joWrH$TC;2W z&@E}_HiA^ZMq)5-C$^i-sJfX8W38Q95%eljXSl+4gbjYbbi>pS%0g6F&I;x%aXL@4 z2F7S?0NjO53k{)hGgPQ>&-{j4hZcvIP2aSAftj(d<0iiy0-%s3Rk3uy%l(5F;p`g& zDM63Vqe~nPUsy%M;s|OPrTWPkmSB-tEJV&+vXX3JpwL5(RB>v|Ox7BhEAp6+p+8jWWDtuG3&r#*la!$Bc@Xw0$DD!~E2JJ*G z&Q1vj$!s~9lqLx+i`?~5B-JI>hX16C<}lD@a?`6|^l_69QT&KW6}#a$nj2=_Z8q<4 zpA9B(gI_Z7gK|u~;g6F|HClv%W;$P2gtddUsx6_mut3g*3k%?_w6K7m%K|T3xPF{$ zSgLeb-ovIvjU`)x1|GD)j*aZ}B!)iX>g7D7j1A~ORul0Cy60{YB}ID(?tvOPTTlmH z&o760&qUp{_UG)%EVKaTbfXcUghMm4coS=ZiRfdW^PH}!7zJK4;~;y04233s@D~+} zc&+KV3QH98j^7q>C-9~>zUBh}jKzoyD3>FArOxAg5&*nbr3gcApL`0CkI-y8X2O<$ z5LZQzbG*W{nk3j7*K3MXnNm6d>p_X68?E(aZe*f08I8)OIIyBrH&vk7tVUdiNo1aK znC()iwq0F3X_-z+ne>@9FZjmg$_O_5Ej0oLB}q~0M3dTEbK~||jO%uKT$#B)Hj!J) zPXyVeX0C+nwkXlHe^G-^I)70RYo9YgEC?Fb223tOYKqJvF$qQf2*5>`nr}x=&DXgc zL-QYz-`lrnWH!XL#*X;ffmF z>(9hy6FHZzg;B0K4ra=8?eC9yz=7Jt>v^hqq~uN_8h7HgtSpQ((aRgWt09+un#V`x zqf%MC(MT&wJu~vjo@%+JX~mL79%+tAFSgI&;y(C#jo+4TpD8I-pq)uwidQI7bk6@Q zwL{Ik^gIhS!6g|VU7a)SI+ zd-<<`u{Ahp$%ShC)oNtCWglm5V!vZko>pF5D8?J90akHIA(L(!)3P}raAH1>uDJb# zp)|E$3b~ZnC6wJqF%l}j)X0WO;rOYrNI)V9DjBI@uXNzJwPU|#e7;C;?PpB#C%aN^ z7V5}NiBw14^3{s=HhGe+Y2he%osTQUva$V|37om0`y+8Ar%ri!6Q9WyQ3&fqo1e+p zN1&m*84d#Gu_c?Z8M4Pk7A%R4L5E5jjY~F{jJeU6oh*i?F>&VP#1=SX!*ks8*(EMP zC+d1VdrnL)VCSAT9vFHoHSi2dQ6KjN2W1h3MM!YN)P}6k+qImiV5)3@ta&CCmUx^j z+jLo%E^5VtAyHVzMBmOe&55r~*IH^Q(HyU1mP>Chy57(|j{#AcvQg!VgJ#fBqcE;W zJ(Yo~=s4e5b?1Eh5_j(@QLa0vqwq07K=I;QMg!LKi$qJHKi7Oq&BdE`{?@16UZ z>JLkYyugp^TC3`{$`(gKu&i``k7X8GZ}GH3ZAC(RK^lNrpIFTHem!E5n%b7jmGxy4e73)Xre#}RHINr3JgAU`_pR#6x2f0zv zhF<62&cn+~M~ED*V~m-od&8CT73N(b1qxRPpfa^049*vCw=tyo9M?@1`t@xfT9Gq_S($a+ z`7GMsj{tye;DKL!a)h^=qXcG$ELF-aFEUNMbJufG&l4HkhJ|;0wFJpvj0omqgd(xb zBZd~Tk5C2OP>1$~LI6y38R1uABaME)6dR95AsRtp;pNB@Lv&9So5;`T-9$H+bsynx zjDmH5HV37FauZR-=S7nGUR$unt!Pq0cv-h`p;z&(yaCSD+nBXo#iu2ATuOpf22|U^ z_0^?v2?pRRSh2tqx>a~`qSXo}C@h}FezL%gNnJ!{%AM>cM@oyU`bl<*RO=_Fex|x$ z|1w|l6{xJ>!mViIVy}f~2|{tJf)ErP<=0E35@R^fG<)r^m?&a1bt3J9*4#ooo3{SO zgwuGpa;qS_e3ujB%oJUdm{RG^YYf0yfJ}PrP~(uRRW?K-?gG&I`(;$^yM!MXfeYRH z6*rIJ-=FqzTb20FuTJ~?g8uyj(l0LR7Z;6-i?fT1yNe6>aCvcITwItJ7p;qnj~5rK z%l4H004%bVt$oglLy+cQK!3D1Fi^3mN9o`oQ`8n%KWYufGeAG1+ZC4idc(G0>;00) zx376X_D1q-c)wHDC(;k%&l`wnj)csUySw!KIeB}?1XUholN=MH45Q?2K?`8I(mFxz$tM#hCM!Psp0Bs%h({FvA0b3hIHm5^-=XJ~Y3YRS3Ijxar4ng%BxNK+rAX>e)c-BUssIZ_+( znGX|Z?56J9w=BS&5f)8{M%|5Btalgp$cp&QW!sO2FNyK* zz{Y23y0F{r>+9>*b*~l0)3$YdeB8d7rSkw(q`x>HldGv+m9N|BblUI{a#3#k@9YNs zzbZ2ep!gZHL*}YXKfQc`8IRhbJLe$xJT5Ya$>s*o=k~>(#_|4I*!ZA0K?&}91^xtm zkC>1f@fmLg5g_kOn*lUFLd((oYETct)-YMZT-o=O!6+eR!H+r+MsA}dbVTZ z!~(wP8C1@MI@-FO;I}jYm)2_)QYg-qy$Qkhv@Nc{ZwY$A8R@&Cmu2kF$wOX9==Q}$ z(f}DtR|shO=AX0$Fsf1C^Xapj1t>Vinf;GD6yHh1q)P{+A^`at^i_Pj`;$p4h-m?8 zn(C%P;ccZ_lq>>2HQERqTBH?{7Ts)v+94=(G9*sTY`0(wALlxXvkf_9Bj{CBJ*cP! zlXe(hif?`q?K+tC%v>LUIL#MFf6}ze3>qC9MKc?am>0N7^1@FtoiIG}#nRTaeYL_! zh0)#@%bR@UFZQUoG79evL*)FBls=~;X?QmQ~i%coRH*D0P{5Jl%St#kvA;AP$rZX88XVR*K!7F+wMdqHBX$I7`@k+U@A z{IsA=Rdidkila?@$BxGLbTmFI!d2@9Ctm9YrgE*xxSZXp4DmB=8*9?ST<2lBVWsG9 zTW~X|XmS*bC^rq|jR7w2)57MrE% zVdPsZDC;Tu0vkd>%!(!&FofT ze|(1ai%ciV)g#k>#G8*|t)69C_AXenz+o^^^%=EZTxm%Um^|1%sJId2!zdr9$L{ZQ zP(vdYSMBXg($czYM(1IW`kar8m{0s0`!7t=VZj8a{8aKaxs7Xbpqk7sNQ?4|J<^Rt zyv|r#k#q8!$=B$dtUG@xFPdZX>?4ts{TJ*kQ80`s4l1a?F7V5ey}D{kw=3fwW3+&9 zs?WA8VmZ+|(3qjnw0RPS1!+*F`xJ9fuw&enm&;?Uild$SuSoi6JS-Xk^qDR5Vb4hC zC!xU07R*oTa~4cc>oX9VlK4u}lj)EmpBKbs?%x@b&mx8-$72?Lm>9HMo9*!BJF$GT z0M#M=NdOR{lbcmrg$PV+lI7T;eGK&9zYmR4!x3vIlrC%T0D>0QOju~;Iq8+~`AEZO zHoBp75+Id}>8%9j7c-i#ywpyD-pvA2uMuJ`0zCrp_cWR>0DEKd=Z85>i$eUMCJXHn zpg@nQ0qYpZGzG%JqRR9BlZi>MM6?@Z-mr3{{9Q-N*G4MkH@gKP%8PHXGL-lCV18Fi zd4h!XJ_X8F#yHe05UVy{*=i|L)>-s2Gy-c{jh-W2Nu@}jP5*`+$JOkAM#p`;HSOy+ zFJJ83?Yu;Fr}OXSE@xkenJ*SRtUQ95I&MlQHN_%~Y+J?#T}VKY>Opls#X+v0q4osm zzuGjXs^re!vJK;VY8K$W;6VF)Q`KyPW+`lcs$oLKsj}>4Lmj1*6P1a34g+Y$9^|ss z{_d&nv`2y(mDf(@C1z$jN1+o7$A9A1PMB*n75YV_#g;@no#ubfmX3<=pf2u0XG4rm z%4S+?mUv%R;dNZ}ZbK0zs+hB>*b!q_#VpvvYy}yS!44OZ*oi4B9L8KZ&KC@Jp=q9t zA)n*hQ`%mdqmR)Qrp!w~mjrZ5+h7^67+p~zHv%%x9$}~?wDrvhq*jsRn)U({LGHOG zQ*}M+thYQwo_e*vPryWVSF$J6QtDQIxF9P!L2p?6sG8)T8F~YlXq4U#s(XlC0|2H< z$HLjCh(2W%uNLa4^^7fav)@dA8S5{p_QGV~l!eIx@ifDTv-C7JSHe6A8Y^0D1LsHj z^~CRxq*E31E4Y50KbRaw)Em6CO1=$6*-FE!zPOH3PX%eU9RBaai&_ zOJI$>WCu^tcT(Rym+N=!Mk2A74x^vB)XI%?oPX~AzWd0b&@4CUYkw4gri9m?Y1CDa z5WpQUc0*j$g-|z*;-bcrI^HIUoqOQY?rX6}V&fHi!7qh_OIoN*AjlwGp-`!!LR^&= zBd}#x&Z#pW+VU11Fy%tUt=gAxLZiaLK>6i?ym6#mk11r38_4?fd8BC(m<^w*N4irQ zXdLELTSv#)IE#(?j0ACeK17-pB#(@bu7=5Wku$#t+O_++6n7wZn%sy<^CM85xMYG1 zjkC0{1Gh-ES-NJ;BzY=6N4U?0F5rUu((z!;8yu)ooR@PM9+qH0xtvxhKE}O&WJC@U z2#_#ROfbyX9hz}sOkP=;%ZG#f1sO$yQxy8r&V1rbQ;dE?wdDRCkqo62IP)wXTW)44 zSbd;3L*hNTv7fvea1F{qXC$ApwDl*@1~gL~@D?>F0o5HqQ?63<@QT-WIuf)9YxHOi zwUf$H<#Wg5wR%NO4%H7L6Mo*J<q;XUnPP(1i#E&4gt1DdY$X|=u?^P?uPK@q$ zHcPiIOEw%zSP0$%6{=ND@$kGjYqen$J=@b+U)`S}@^DYzHw$9hS@SGFqct$mLMDtj z!9YJlH`}cK%Khqlnh+ZAsSW1+Z3xMPrR5?=8r6uO%g#lg)#`%*ZgqRd_&%GDv@{mX zkLMX{P3g38>+LWG$m>Ruac;~Zt~yW2yJcZ~oJY%q)9kg;~w3VkNgT0w1DJT4ALduX~sID^0#!6?Pw|;%!alX?EwB z2QbCQZ$zL+A|R7 zHkuY0h1QLQw-IhOvfC^mi3=^0xj@S}zfCWP^cQ*(Mj_9QjyeMA0I=AAMTW^qo;f+5>Vm8npn}i#Yca=tajl}hZ zp{C8-RBd!!`BOKIKvio0jgS87r)^=0E`DtxYMxBdmkQ%nXhVLjW)2<=38z4tICMNA z)vKI{rj?=ERHco#*FXMQva!26It>!ajWYP~ZRCep?8kDtL8JUOJ?SXDAd-P@-B#kE zTli0Rck1zHHITwtQji-)0v}_{W+~H=l+dF_j3dv|ZddxNx8HpYY-g`TVnK%P%mk0F&yQc>CF8=b$B!9u@mHZ}5OA zO!zs_eX$K7LSn1we8<1)Jq3UYoCEh(VMQ-b&M)`F>rq%+ALyHh6(Pd-tf*)Jg%G=Z%~~j%&@1dz)97c0I!G0k``-Xrvwh~9&O1MhB{BC zhN>^Vz6otel@-qiRi8x*m?svxOC?V8JF{Yt5sQcjEaL~oOl;zKy3#pA7BVqB-ORjz z!5f1zWU{%EKOhpMEEo%m{>2`OqOr-QIV*6DrI0*PW6o~qDS@Yv$*!Cc-LrD*_{M~d zP5mgay0sHs=H*wqh`>SBpm~cY*tvs?5qO3b$>PpQ?>In;+06Ke3YDEv!Htb&8UY35 zv#|_3Lz(f7owD(*%?nXIM<^?(LNevbc8iTM*>oXtuF$Gjtc(U9p#@HSc5Vcj}Be7 z>rYbl8j{lHyOcdkohNC#%U;m0b<|-`q0~{Q{X~mR_pR=Ske*s+&r&-*X^RD=?-yq1$yx!LhbSIQM4iE4Ju>e z1{1m(C4!$Wu0JVGB!~e_^xy{)mrm03VM+!~7iQwJzHChD6O_KQ6TpqtHDzd*AetIp zJ2Km^(6?rtD$e~zT3<33{!Um_&${y}t*7cR544#i!w+;$#)5435(G8@zj-K)mH{}pR4Vm!u8v$W3 zAPgpLs9#hD*vleCwZ=;k1`kNL2hEHNa_U2YBy=0Oi}zh-XEs0HfP!-i|Gl%V6>!`0 z&i5%GzB}juk~@G&U63GnU~;#PCc0GOjgv_*l{9h+!bYaP1-W?*ya8Wx zaVbBFhq7S177=ryOIPe$VvS#-U#NokN-Zl!0j)<=`UgrMvFF;n(@wab8#qatv(}B- zp0(aF11Af--qNe4(a`C3NXkRok8vVpn|@=QPpQt>pNQ#LrNEzKrFDSTfQlJbDPKTK z!>w9KZP4s((rktF2F>Co&RYFgJZI8|iWY1<&Yiw}ivx>bZ{hDP3@$)kv3Ft;ETU_p zi%#wA37Y+JFOcVw6KbAk7EcOZA{LxxMsUWQ+~H~6c`YQm)?++o@9pn`e{VCD%?K+ zS)og;m=kC!f&O#EDDnq(tXPy|oRfuqSa9AduwIiI1zden zF401|6fFStX6$&_@CdCYprg>ch3^)=1KQpFeNBzQz&DX|ZeacfmIOtC8JN3)<=_pK zI8gcV`%-<4-Sa|!rP znB~bh)riftzP>V)`H6T?c^le2^8)V1$_NKb8ADNs*i7Rvk%3?1QdTfbxn1!LFF^$? zXcj!(%;yU9KgA7w6Z9*h_@X>+bvoVphtx1lR0BvhInp_=Bqfk?v*8#1S;op~po$8W^mQyK#X9tv z+KrG(-Q8VLU4Ld!MB%{i*Q2*R#_BM5#W7J>`05RA{zK4JU7F%o*QE^QZH0%vV$ zX#fY(l;b4Rv6xT#F~jd6eh5Wk1?9sXW!-2aH3fWnD5emjOG=&;yZhgK(16Wa;v zn_D|+Vk_bC9bQ$5H$&m=C<=?z=y6V77yGGOf{WUNlHErj6Ul)}?76>F;6z>FRj<-%g(K!~q z*{zJ{q%=vqXaRzAZ3zv~JcL#mLT4Qss3T-N-3)D_+0w4r+su|m3eks@eVMZFQ|G+H ztae9py7?+C1YG%|e6|irTo04?MS3R4eug*^Zo+tXFiK_dA#gybn|4*ui4q`m6u}Bx z7&tw_d#GTD@w5c0^vvh%ixd;C^H!}813?r!U#09TEo>qvBd=-4dXo=vJRKP(oeV`Z z&62?RA|=dxlfskc^nulVrCI8JO$*!R%&)#+LIhsLjS{0f7}TqLx=(utowKy*z>l5c zbeE9A5^G^o6U=T*g5UyyQkU4Lw(EVo};7b2W zU{9d722}>yi1?1TaB>Q#%1$TgUA>5o47SLBiva(G#aNIE(9s)!?QbH+VCy z&Qsp0Y{Gsmm74}2}uH1!+5jQ6#g6GQ6ThJr)OIM6;6KNq^%JJ z1>SJYjFV|-t;4lQnrA6!F-#FMbz06G@e{PsxgDw)yYaivT|r$`Au51ASIm%Kt6N2O z_?Z_tKZvRFV+v1Orpni4-l2$+wnoqqPZFVwVoVKwk3J(py^InJ3;H58>s+J=6F4qQ zvO3=1$DiISx(YJ>-1O=n>tJOI=I_lvkitz#Pnyur5wdG*LfqZW0ahX zYr#BY_@8cY{d;lG2^w^8blmIo`e(S~l7if5_S@ZKvwhe)JUZ<34)daaDHZJiItB-4 z8B0n*spy%uDp*e&2q`cB*L1U}G*XZ>oldXQhvi=DxC<>o1P$s1=-pNyh6IvzjD2?> zGx$z1gV_1Ef0Nu`3Xes0@NfUN3qSZy@B^%~IIoqy@?FY)l_QWfOpAPxmL?zOIXwmP zg}+DpfC&cw?dt=Ua;*rJ7YfYJ_cM?8l4N#f7m`zopAmWv-p4$$Dt2QRRTWe-kH1Og z5v&yvCB74EgL8P=!Z2bTd!SDpoL%f;_+q`$W~Mh9z)b86WjGq8k6QQ%UeXB3T^G-! zchsc}q0=_b-R1}MdA=}=RvmuKc8lL|k4}K6(TnI>MbI_P3xY~}#D0gVxW z=)qDCP)I47zzPF$2}0?1#tj!{f(tXj#hDf|==Xf$V z3mnV-Q-bkz@3Z`kj5(JU#8R=+24oH*va{#*#ZH!S}$i2Jjl(Il;+EA9#=k z0|PHQFnEU`C5{9jm~V+=91Obh{RjZyyu)2CZbZ1}sdE^AeXR4NdubbsGA@2%`oRe2 z8HI_WP+`=B7CJ`MaLsmC$)@BCMm#tHEjww`CmVjdO~{L;j?{6YGXu14vz;^yeiEM@ z*d5d6lpNzKAZc`wXLEe&v#{=f&JTm&Am0bTxHlJ^SfJL2nQDj~&^M6WV)q>2^G2(0 zb^9Q-fH6A}C+~t*Z*Vv`Jg{&#JEAS3Mhn&_{odgK7Y~pG3>4^_q$=*w5S*^nJvi(h zgD_|vS_5m)?Sh206oYPAnY{;C35*a3Nf;dv;~<8czR9}y`H3%1!B9-LnBHQ13-|X!dJE}I$fg1>Y+~6 zXYPk(EI{;OqOcM7r&t!qzI)JNBR_eMH5?oscDnsO8wIZS4t-ApP*Y}n><05F9MgAD zIH5SU2ZskAuKXzAseKFt-tBbRD2}c}yt}j8@Ad%HG7fI9qXH^4^p``yDXzJ`+kC7ysafEj#b zQF7u3@2Ir{fX2MopC=Kt3Ci_QdU>~QC{cxEB(U2%rWg7KoT=NR*J%`tc^G5!yPf0i zvCK7%-CNs&f5#o`P^NGm0!|J9zI-p`csFz3`2eQh>w(5jNptj{OI`ce>KubcPiax$ zUvU9#FgQLuJ{DOcaz3Em9|E3bnm6;IWgXx?9ji-eF&`5+V4C!v(AdGq_c}*?OO#8v zD=GkDI0meVL_{{BqJP+f)x}|+O1(wQ^^XU7Dleu2k-uL?J`CcZd)yakiZ~9Aj|Yf5 z&KC=eD~RIr;20}`l;qv5sQ4H-Ive|Qs_@_#Xy{-d-nsT3ji++VftmN92W;ZU92g(a ztc3`&`Ueas1E@vK5uk))KpLJHO;R~j-2+erx@>}uLB2~Z0(mfCQ;fngisA?f251fD z$8;7Yse;wB4j?N-%D_VK0+2O2>G!(F7A9dQpau(vLe$yo9v&Qt=UW~C?LvF|AZ}nL zQ5RM2SrqcyF~61*7FsZiQiZqP(P6*C{1ERe!_l^S{lU?o+oz;yL|E+gAjee{-%{V9 zfgL8vZvcy_0{|GfS3E?=azJ^ni;V+bbmVa&pRfAkhMifT<<2Xg`jEB`K&{z z*B^&DVF3bQYC&R{;^~b!O0ceVGynj8lHSHqqJ$V0jXV$iU1du5n1$|@`)ic(goC34 zpj$`;q5&ZU1c=cA;R~?h!2lD06VsgR0oBvnICe+&VW)p|2+S;J$-vrR!i#rmKB}la z5TpvX{T@sJ82W`9aE(GGgq2%HBQ1gk%QOickQ(IAV#< z!w}{PWH>kkas|EM3Rxbo{w{Kj!u$r!BqwC(O{a4pQ^aKN!I;93YV%yBgmNMej$ted zL_g?vpw^59^bbIZ0KBBg{(3lB@Pz|^gf1N)kRq7^GJyvHje+WtMsqifi0dDMOlR86 z=?;MK5116NKuRErj}F-NjJqjmc0KG-E&ySLG!U=JJbI^;KbQa-Cptj?Tk)>Q5h$W_ z*w@cCdfE!;6CzRT@dKB-6{Q>!K_*v)ipM~B6&1#`%7~RKBb!iISw_cav?zTdH9zl< zPJfA$$K}TpTohCyAoi?_&q0q) zQt7Uh<7|>2?r^+TlDg?Kp*TXYf~r23iKkZ*x|ls%bz$!@x)oVL_*tII)(XJ)mEqxz z+^GX%9~WrAVDIjLq2lFC;-Z7pk#0p1^R(O2byujQMcq`{Qga1^02t5`$X%|K&&zfX z6CO-jKYdBQvl1=)`*?2h+D~UsflZ)CmK!AGY~z{x`|W=i7#G?|%ro0OySQk>|Jy2z z9gMIky#%Mx+i4AjTIZ% zkh~O{g^~>c1ueKZMu^92Wz<_VWV)Wm7vjutaCc_}Es@~FfMQl}*O9r<-BOawzb0DA z?+HcE#lT$8VYn>7@EzGk6JU61`SeT5I^SWoevL}!-~z3pSe{rn&mI%{_4xA_d+jNEjEwNH*}%_s zcCnLeOx2hUi&?&pt`qpGQ;&$Lo*n*;F{x=~L#1^+kGKTNM;_T24;l}Bx?jvU<8zEE zcuD7rv%`q1VXTMsPW2GWhL0XM7(m=7??SDil}Gz<#{#OCD%ANU`J~B)cuoiOpH5Nv zLC5t|C&=#ari&W0I~tuw7IUQq+QU!1erETUln(PrzcCtvIAh3~%Dk~j754g%${+Ap zobZruG-5Sy9`M~RvwC>PXi`xCcT^sAnAKUUr_rT&Po8Ph$Akm`@_H>CGhkICpgl!E zk3}@&p+|vt$R8cBChnE*RJ6ovG(cD(^z5owYH?z2XdJ3k2DFVe8q558*#uA$niy-? z50{y0nKhSr&1LTYrBY>6VOGOXngAgh=7TZAXj?HPy8HXF_%>5_Ml&jbaYZCwm^s{- zu_g8eBNNE*gqg~Sgom*N+@kCA+O@cNB+bmIM;4)3#l@5nT=WGCsc~xZSE>)iTky=7 zB3YtKTd1x?!wU^0J3kLg9ON>;UTy76uoA+X&Wi!l;TY@(U4s=vGSxG&d^)wP_pj24 zi{K~g)v4chpQcZ~=@D(-hYVs{5B`oGmyT zb2jH}D)x-<7ASNZ^=j03fRqW33=H|=0JH7GRQH7LQho*Mt%T;Ora4n`# zm|a=VLK%u7KQWZuHqqe7q&yqsf$g(UxFsuMSn#t26mVR7#vK>B1AoRGbg?;bApH== zoMX^0$AXR;w|I=r)sC+4EDG8UYUkV;!A~w2o!P{u;ejYA?_W+dcTDMSVF|5R>1;q)zt3wdt30GfGM1Rx-Ndw zPnf>p6|v0pd)(3a7|#^oQG)I;Iq@mvrHHT|om%3$@pJb)YIZO2wny=dZrga{b#lp! zSRHdU>qe-~xSCB0{3f0;UFA7}5gMA!W;6sijmD*uG#-f;EulIy$2XmjN{7-80MD-u;i-b4iXe8=gWYX(pT(>=!vCeii3 zNe@6qg5h`$5Nd)~1j8@dpd36B2SVAS18(DuJ@7`UG)kxIh$SPNns{u6Hq@kE&;JTK$|$P zga9!%CzkPn+=vaJ+f6EhS5R!oC55tR26)^RA3PXujM5M^J+nDMcN17Qwv9Bama|o*zn`c|=MO9Z$Nuqw29K=IRNs4N!0^qqws5__iuQ zZ;VukO9&P3mh2cZ>Mird+5bBAo&pD8KV?f=gF2`hP%oaui6ei!&K2kmaJs=tuUZ_q z?#Sx}&wcD1MOv-89j0lujRWDFf&D`VH+A_d$Wa9&M06oy>ItF*4{O&c%!u1?2w@G1 z8CH*3Lw9O_cvDR>9^+E?p@>vi_5U_27z7M z7ZGKfHCHj4$>J#ao(~k{R|)VgJe=3p#Cv3~0E*B>g8P<8gK)9v_JL@Dtiy#G#$dLXs)PwdH*H zJGH11l|_f4?f%X^@H^^J4%Z)bgdq>hnuldW!$Ko}-p#rSZtWL3p@}r3-T3q(w=-(W znS=wvO^gLsPu{OG3P-T7<5TZ~p;I#&lazSvPFRHCz4;FGFFkZwr~q^Oy{!2Wh$}h> zrF>MlcRZIt8GXEWf#tICFss0QVacJt@hQ3O1ysU}@ix)n`^HRGaf=mevF^j1WfP)~YOcLLwth_nzB{xG9o ze7J5)&E}1{vurHgwE)u5tTA&(ST)wHv7sny`{2@9(F&p@Yj4rm;C*`A zrO6_j;f~!2fYPF(QDa=>VIqtG1gt}Iil#$lJGqJSQYyNmM+~vxFG1Czv7B$z$Tg#v zZ)hTgULbva6ohM6-W$@w=MRbc;DJ+8fRL$3WLcC^#2Jl6q%s=oj54{JMCQfR-R%RP zasbh=Iv5w$%6-e5I|f2kW9}U`h?rP4RtFY65@``RfeA4vWp!LGgQK_x|7(jfMZX()FU;g7kpG-XkfS-nzNDxw+)Ar^o$$DxybE zYu=#t*3C2fdPDCY)c&@n=d;^l7hPlbqwmJokGJoOZENFR(jGws-Op4NAk3EI_gl^B zD-nsCA7p}nwp*ex^jS_z{)a%r(cmm+hzWy;Fs-1rR>8lKO(-rsIw`HWM|HLq-qN;dvc^5HO_T7nZ9lkj#QcQzL2Ojf8tagUR@6+P@-T8O z;d*+DN`=;CXBwF$Aln*=6RNB-e$VKAr!wnavYWn)FVmO#mGW|5usx?p-92N!{I{BX z%79dDmw=B|hNQ}3th%55eTOB*CZO`td-R!F08;z@pYUg=%tK=J8n7A+(da;g8p=&t z!RAwTe^V)JjuG4y11_L#^AhhLTO!(`YVv}yI6;Vgabxa~v%$9Jjm5Ix{$S4i!fH7aO*menPx zEl)~5-OiW?eH9qq%QSBd5}Jealui=$)aA1;6vV;$RL{K-K;N5Qh=b7QgD}KFh<$;^ z*0$*ZjYkMR#&kN-;_;jC<3<@0dF0#fAN)53u|R!CF>S7{tYvXrhUzwwSkDk=JJGLH zgKtP21o7NVY3AybischaaB_8CNz7G*?Mh=3ULm+(906C9YDf$p&H5E1wzcUjBLd8e z=rkh=%o{8Br4%r~x!JRV)0Vtn4GzTIodYl(FTIsMz=GZsjSzudY|-;m73*|b#5#qN z$qKPJ|FFovSDSxr%ANdcYr**w^Xo3R>%VlD532w2+x7R0{ClkYK+uMRSacvSmH@ma4=$)sEm@Kkxoz8K4AE~&&Pr4~HIwJX{9P7v zdQ!~fg?JT!IM!{Lp$%Z|eX$tK;OE0{E>m1u!T=T}Mz}}!<(XEvi*!@jp%X8pM12~pDGd~Lul&$YJCoZEGM&hHb1zo$Ak*Q%e$c_-a=h4^%Xp!; zRPp92zq!h9Df3&(cvJx+zop6#by!N*q_j_!!WTOA9Vg<^v=#GvJr1HM>(EGWuXfIY z;!>6NR@zi)`+cPx#w3O&PrAhmZio-04VF$>dRX7S2@KpFHHdc!u}gN7#d8|@k7snw zvQYkNH%Aa(`Y1$=OX`;Pp@BR*{si-&^0;;XW>iC5^T^lfGV2O3bx;r%{W9F|l+UAE zm*&@B%4TF_yjS~69JL-ES-h;3V5tp%VZsFCkjSV{kQr+7!9%rd=WlIo*& zVM>qYK@5TP8kDN4X3swdQ$CAhl&QkzD@bKX(dgp;s7m(^FMo7{vdVY2jriY`LnFz7X?7a zk#1ed9pb za{f)3s7pI)h*D5SNuPWC6*na3-!lQfXc!|_{lP%ckTCg&B6IY&i~MpXI}g%i&ar zZIq@w<(w-KNkIc}RnO|G8ds}&c3)M?aH}XhsJ1vTvN5Zw8W!JK)nXlDMaN_exMJ3V^ZTdEkpIm0On95v-^QBxTAvvYuvhK@9r^ zG3+a1B9TwUl_hwIj4{USCLd=ts$o7HkEn|rb=ZuBJQ}-JFvx}?(zo5wu7;PEV=3A} z-!9@VDPV+dyEBHMf_1akJt$R=AxVk(w?|89Fi72G=ng{lH>SU|nBh7D{^8)Wh}Bo1 zmS)IOvmMQ_EhT07jn02V!9#vJAR?x5krOFkdtqcbz4xbR2YY>cFT8x5125&F^Uwei&`GZ^+Y-nfk0|z74hq z|L&n@aYW%iQj@Cs0%WW%T(XjWSmEk-TBvRi89U~CEqSA{6mve{qds+Nhn{g=24B)p z+9eJFYLVl?N)s)WsBTO=X9y^TC4Q_#Knr2%g656jR)shEV`<%5Ad&C+qe45Uk%e7Kbw2rSNB>Q@Bw0||!kW2I|(UqRGI=ay# z_uQ7pD8nQ@Y4ev6cSrThp-OX3Uze3HM=H%ZcOjj!(oTtc-p$HknWxf*rNpCT3KNfM z=`Rny5`j_4JUlw4nR@UylQw5w$lKk>^XtHqx8O|7bHqs+fcB||hE7%!3I{U)8!fB7 ztP1#`YY4{--NHjCkp}n)`Z2M1Vnfl{D=7W3J0XJbUPcdObfAaxSB_ZMpwb1Y%@L7( z3B&UwG(9+1+1MO#kO7b&%fqAm*s$7OYCAzAHF8+gh%skrGxD?iXZU{>m*xvJr08s^ z>N)0)U{kz6{z5UIa*#M+w#~*qm+BpSyUpwiJD0XkeYR21-lTm{d60ng@y8Kihov4v zP~HG=h0>4Yw4nNB_l>Brjv99?{REax=}BIP#8a$0)L+V-IW^O4S#cQmH1l1p*qzm? zm_D|K(8a(n6c=_k{h)xivupV8;1x$-A@8dU9y=QoCqn?->G0_`lv#2N1Apj{582tm$qVeM%yoBT(-N$Z&vt6 z-4lVmr0gb??Lx$~TZe_=$wJJ8XD!79M*}pB21Dr>Wp3zlv&?P^+o2v5S*NxIMawC5 z_qw;F`Yvg(*3b>v^d|H=q1O#w*QX15T@+tWXK-XEzmDa6B%3~j}C z6CoQkuaTR6*Pc6angW;zI;p#xn-&tS!PQd^xUQ3VDEU!MlA;TCzp3`&91fiXQwEQ| z!|IfDBD1>fses4J8VNgK zwGl!bmdh3INEHeBvym1g_I4AlPCxf&V&YtN7Gmjq=JWOKBXV^8$)qCZxv<{4xl419 z{?MFs9bo>^uUdVyHC%?oiB!@snfBI*G7aNuuKL_dkvm93)?h9Y++zAnan>liS9K*v zHK4U&bDgjt#`v?sADy)8c~d>~nwNSDqp4zR91EIWB9c?-t!5shhw>WwEI7f|YpMaVVA8R6&)ic~$eA!u;)WkskSfo=)3d1X1wsRsj^FT^I$ zj2RAZSrhG{o(Ar!4P4&DvLd?ZnsQ?=a6>OenK(=gw;CU3BQZ~_VedzOz^(mqEBM`N zF$z*K*$P$|cZ-x~`z#d)1J9wexZnBmW#WAK((Kc3<3>F=HhmZbuZJ9o1NsMaid1Z! ziGq<_zWe3rtm1ZWqsUp)sjgX@BrSAOJuf^JE#OSV+ffGLkh39rsL)R^OslqN&jEUN zz}KkdwUMS&=nyU8I(3--D5cmmMBTKPu`42FNLZm)Wvs$mQI&e7;G_&j{5z>uqnJBL z*UGpN(d=&Zix|`yp({uOtqjP1VldxAc|EOLKen*Yoc$>d|gKZ?#Xp z+bzbpK5PUHfUCCcM&R)%jEJcm*LBU$DQ>>6iZQ2df8{2tymOJlm3r*a^OvVI0|6Yd z%Ds>{+q#+XGPN#Jc8_6#A$?BopDaO7NXHlgPB3z-qJw<#jl^v)Cl0cbc3{0I<>vTX{1Iaev)i!A4 zdK3Zui<+gKqXq*EJE_-veqwsNGz)KghWm!srkTboGnz5iXsW?uh-onUp(aO`4pGlG zDsGS~?d|~?{`pD&dGqAi;R(ao=e@&97?nix^n}A~1|vQ}92H{5I&2;q(Ow);#LCxa zmCxS+%eAc6`>k7ZkLa2jNrP#t32}ot*k99%85WK;<#qz6+d#UQnBb1&V`{Nj@dx^4 z0U$zfE#=#=oPrd<%j^cj`?51~m`{ng!8ULKc7K`;u(*P}w1-=mM#xe}1^{oc0T`^v z@R0D|41blzcbWixNmxlm*N*RTAbK#h>^z?}oIv)l(*jOky2GM2;X<28RC%S&uB--$ z8|i?H;7UYhF~H}hj5>zW<_}wf9%)HN-N1%$RVTO~%Puw~keowqm-+^{Afp@(aNSPn z4{-Y)(D@wrTR2Gi@`yz?@23{Kn1?kgZ6mFIURW8^0?#4DGehC|xr2S}%hQ6)5$7o* z;KVdUbk@FJQ@v;xZ%DbV2)J7{f7vc;j-a@HT%f6?(ad{@-_g#j2g_g zunE-AJa`=inAh(q zQ(FD%G)&8!nj>27zxok?L$V|aCsZM;xKRZ|L_2oS2c8IJy6*f)ySdE*!LR9qT$8CP zpkFMw5UFgA)P1(xX^U_26(6uM{;LSb8;4^5EJN{zU>XH(+>fca_B(BN)M>e6`ZuBH zfPSa6o0fFa_tkqZjlnMUVI77Y>F~&w)|iUxle0t zUtlK|=nMP;Ul8_7lAfA(*QlmK#e6pFgFvbc|J+fR zhtHIvB(+BVH|7eX)CGL6E1%j_r8~;6wiJPAD*wh(eMqX>-KClfqRgj#Qi)SwV(xeC zcmUlbh%IpK5mc@{V)NR=FwWf~T!jVNRXETxZXeWLmr3^{foY=o=scbnZg@&hMXt)a z!UO%9R+`S11T1~xorKj(+_-Y*VrzY~K=V4e!kT)6yeRe?wn5{`fo%W%s_xh1mbX9bdcm+80JaNA2LXWD=0&e5>0Hw;0Qi3=UG!Q@65=BYoKU-pG(xCi^a zn&=p}32VOYpaZC~Z7X(urAEjb^;W7B*n?R+hewTj{Gf#F?Qo0P$k2Fu}KGVIP|D^`@58qXqo;tL(IV(keZ z)}gEfRjXt6#J6UHeCW<-2J;PYvcJE%3p+F4&8S?~i4{{G$cukd&JH<7!g`x~<3?y7 zL~OpY)5y74RT_CMRX#4Mq3%d*25Yp}J*Sq_6S2fs6#uiJt~hT*-Nj(-F!SY%hETUA zcC52@v(-pGj$Bsndx<;S&J~or<>P0U@zOfyx3?)}Yosir&&%j56@5l=Z(S;S%)M(i z1@9BF+-k;!SPYh`g4BqY^g2Cq3nk9CsjFhTNC$-+L_@;Y$YS$UxCvi)`Qg*z4hg7x*kQ>^_X>}Y?7_Cd2vJ7e?NF>Q^s z|7|LGH0xR!s@ADsg9*N@1$?N|v4H4;4ORFWXw1ed00{6>0JAiF;!_#ZG;3rBGw7qy zbJUy2)BxB3GUqHfh`Kn%JW4X=W6TptW31-(UhB3jdw)NIr!~p}sX6G?eOc%{bV&xO z1OA*=DIcDUK+a0Ye1ytZY6$>zX>OE^DDjNc>*km-hDw9F`~}nrS|@fvmnpp;7*Sn= zIqj&Ca{XvI_dBs@-P*3QvWI#hR7oc8j5XP=Xt%x8i}ONkOmvxyj=!u2tk%q)3u{W- zbw)I(BGjyzu+D`AV|%$@Kpl1t)z@>!x?*&ad2?eot{_u6Z-|+Q8$M;wuqb6IrkmNe z7b4$-nR`XCT)>;q?r)96ym=MC`G_-74}BeSVC{UfJIxc@MXBPdF>(s~UI?|tst)bdMiIb~^`dsDP=LVywg6wL;tYDgNRNyvpbhac8?vvcCw93wn4Io>q3lW zsfB-07*r;e4maccSyG7NJV~L}SbNY!51N{;d+{C~=yG9OGemu7pgw zLQ=JaACz$Ut;#IR93R)Q6Taxn)b)(Sp5b{kOa03*f1tX~LN#oGl=(c!{fDKS?Up{{ z(s@chEDu)Ujr;5tTjZSrEteL0&R$O+cD~u2oXxW%W%8pVYAQxY&7nXhE(1#*uyBgN zglHzyZ4*gKCRHAhQE@~9t_w1x2_GF&F_`xEoH5{YoA#wkpi9gBj}7qTK?R<&h#PU- zFHd9E^C{;BrQUFAdDt?1gM6f1_2UrkSGH3EKA(?cP9q;VjeH!!qF863YQ!Om=9eKm zt&xp!l}03Obe#KIEQnBCQ}?cbPoh3<+raV)!;q~R=# ztyjt+3qpBYksKH;g+Ei{QxQ5c0^yoPhyRq)%GtY1pFEWo%baqNtg-<9WQw%E>yqTB zRauAM=nK!T)HYnV01QI8Zjl#D|4PMS%l&sM+V0;a7pe0RNq1jLfD&}F3`ssMS**S+r8UuMEhEh{(qL&+17=v)gmO9*dWW{;*DnX!7Ger81Dq+jBic6^AUg9nQ40#UZ@}jX1 zA`4B-bJ-yeN@n1m)24K1LbRFpnaX@FCow!Y+|F#pEMQB}f?iWeQp#uPiF?5VK zUG}pUxQe{&XMhDs%yzXTD0&`Nd6ZH^X?xi~^e2UL6@dRz1`(LR`-ZcrZJ9-3++@re zDJfVpAjpQoxnYfv-X?1i<7Xp6hVV*^?eAKh{IFiZ?k7?6Rnzhi%!e9 zq#LVCIz58gO`p0=1GtSJo36UbJ#IA!hTe)OgWFE+_teTjHe~Y7&AqI5dIY{fTu=Pm z?{IXv1R}BGwB;?;w7jL7(&TTiRmhTECvHkGh)3*`f%FB*=mFL3{9DskLkE<# zd?;!Gr;U+TH|n96NSrc6O5ON}-}EGW!K1(f{Fn`zi?vfFmkgYMtop^c>W*R!c1gi4 zhHfI3wIpGvU#fC@xsYGM7Z=v>94f$340!*TXqL<%W-^P`urkeG7Iv`(3lu5g>JHqA z=}Atm?95o%t2_N)-Gfgu@XL$>_~$gaylrFwVShA~JN(8F7~bDNQQb-b1qp{O=JmsZwz)-bLp$@rmK2?ekBEcCkQVqQex~x3t*|Dd-JSH7xTdv@ z_!Al55!1oMYpd9laH13HtspA-N$GRz;maxGjWngtKFrMo-xRhjubE(Bl?ywmk%TYV&XpnNfrNfK_t>VfqSWg=SknOwZ%Slf_5 zzd8#ifwCRh(KKZ>`@&ibGz^k0;nP$-Phy(^IJH*Ay=oM+DSJL`=u+dMr93PSXaZ?w zL)w9b(%ejBFf)sK+*6@x-7+&o!(v0vTz1nz4R0212*~b~~R4c63(eB@q7{9F{B7y$WZu=+0W3 zkd|c&B(^1Nlyykq>uCuGQN-d=l~dX_Qno=i+7WU)R&dE3c^Sd=TR~%`{;m!&fXn56*I5Pcw2JDs(IQ#T6zMD?F0CG;GRo+BIw#a#w={4 zP9ecCeLEV1HOQG+V6aRuW*|XIWs&AME~j7G!C(nKYAX%pSBp~<|4 zs(-{z9>LUO-cp2^zQ^i&jPHk%+kVT?ZkW)6L!#BzP?j9Ud|^@T))2uVI|US}(VsMb zj=Fv?qHWNzuZ`?{G0;QlKp}H6Yov>bRA`&yt3FSr2r2$Fcck6mdX$yBk zZMcb$+5u(_yYSdf)9QP+u(3Fw}&RF^0ECjkE2wi~> zFyd}F?iB2U5qHCJ=N0Q*C6hCjQ+~%{ddX3hU^K4`ZZ!-E4LjU|mD7F;QYTfoTyj17 zdOh-~1p(5{O$h}TsQ4M}Vxi+V;Fqv@;;@=lYr7TlQ)eKI5TO7-J}4`&|6VI9Rx(sRMWrO8jAFQ_Meb?o)#4Gv>wYB zGl!9Fh=9i1SBE8$3&(V3@S(`3Xt7_kxok9rc8pX%8)xbDx`UD5bg&Cg@G@Du6TD6~ z#_W8*b)2l}Xgy+A05m#*Jou25y%tq?0|(4Ko5!wsUt#K&mrFoa0ro2 zK85%Q(SGkxqY%~cO%r2t)b4g!`Gg3TKBJ*@2Gn!L8T!K(Edk0%0yFk2Z0`Rpq> z<_$DtLkZYHCa{9E+2btDg=v&vRS*j%yG%d@&YC;CZ{c19?$AJblC;e*b1>u#guKWq8>f4^*ZO9H%DO> zjB{&F&1$<7o81;}9I?>e6Zs;w#5^jULO=5Q$Y)uLFDLm!MJ;2#iS}8N;!{=Q2MUft zQKP|=_iLujWh??-ikh;&_jvq3NeoS*J#Jz^i7U5EH9|{eRJ?t~BxNOQrp~Y$ zx9*#K3k9enGOgS<0aZ{W(w!II;*3Qo9eHW!q~eV1)C#YHejUU}z~EV!XFS7jS(k0! z?4`n4S;jq^jPx0ekaeY1(XcS1i^G`?;AVOdx$<{xLl{w;wIimL9BU(a9O-sz>wD0B z8=VXdgYKe>AEZmpXbe$^j* z!xhRE6v`De30Du6penSjo16P|CDqJ*oYe?eQMESzK^wlCn%8bsY{&bqR^_~BPYH4! z$!A(6pK#Dfn}|?Z8rH0a@z(9DZ)+98=`Q>P<$C>6;?wE*(7~+}3eqrDO0gj@^hL}| zP2&nwx_K_9M#7L)iAKia86rY)ecs`@B8j9>AGcQDx;JmG=_r{4{F+`*m;AbvuY8exI+4E&E16@9V2*M@gbdJr z4-R45;LaF`^}wR^PHHV(@L&%7JhJEU150IcbJMo#DdbCB2#ru5yp^geTYin$D8|G?jP#xzTT^wVy%LpDl#(6Sb36pp3jOdY=R7?(xAI> zBM-71q$f#eAhMB+iVu(Q_8oS5CLq3wtG$|6RLQC5QzOPy*^Dadqq3}*ObpJ4 z*pf;Y^oMwRVq-#B8^Q$M;X)|{^_V*-9G?=@VSj&*i-BH6GZ&egpzo(1G1f%o?r~jM z@fk`-5x$K*_A6h4S^%gzbjv=wxnVeAXy_S!onzD9XB&l3hAA2Sv+EO9}pjBB*PO!^`&?K1mJY1G~kE6H;G-B|8W zx?9_A*$0{_yS3O9sTOj%?I;PZTYn$D!8Rzb$xxrHPm2J$rkPErNWjEhCW2yfF3-(+ z)t};+0W^iiJh2#6o5%>Lfz0c2aO0XhV#!e!QVbe7zL?QDEn)xTrF_v%)D>7I91(MO zYFuLRpoIOpGXePecB5EJ)>sOjY`K~`wMpn$vL^J`NY?g{lGygm0sVH`w#vYEqyMK% z^1rbb_bOT4xd=hg5x@ITcE(jIUyR?T*%{YY9@NCofK1wJ(`x(jH2ZVqr{NSf4H6Bx zZAej1Y}*72sNRUMoLY)2O8Puxa1ZH8G90Q+004pvSqPap?Ye$}G)23%L^Cvm|I=D| zo%Fh0p8Y1)JxB_PXFo2`-mwlK{9mAr2w}|6sP7XWPmI{460+&2NS+bi-dCHyjKK*D zp)cN`!@7}r&MR622x=hcK=Wj<8bWJZUHB={RX-)lL-F@1(aNB0bWBIc{&CH5*`vzb z+|V>x(pkH(?Vf<`ngaQlvzsuP+M^SfLuDS&e_zlZy2mPHH8n4A?}e_X>@&NoKY(!5 zxwLBH+lD-SYD&1~j~PQbexWgRzP^WD;mQR48dv(&*Zm3rE{Sns`>IRz*P<_#DqQm` zw+8a&uYKg%L7p^&_6p5~;t)T7y0$ps3G5K&O&)&Pv}VYuQ3v5v)#A%o+AF%1=ded~Oad$%vMq{hC+8 zhB%i9wBKZ1PQ4Vz2L#BGyXs>ma*-=4((V$831J`-VC0I3DFk9G7e#tvCH-nw>a;HE zwEjk&)|3y^qmzwUr;WpzkMF2co123=6%kQAS*JDXWZX^bX-}u^%?(5N_)JR{x4~2+ zpU-?H!|U^Ul#(N^7=%YQZ#J@`Etf&4l;Sri_LW6Ei?Q4IdR16Kf8LqeimC?>4aeB3 z+b ztQr0rc1%CrsX>XoSK>q-fI@DrPi!9~@6Yj;5DurWlE&D57+01hix|rOgWTo+hHgsK zg1bPU@Ui+}714fq6nB)Qn>sh%Q(|vq2$1EAN8r#a`_TpCYfyba_dML@dBHZ%i{^sp zm4~H@M9v_INGj=*g_1Z)t2J>QC+WhE>VTqme1{YitU`>Y<0+M%hH;>5Q8?1=C>%3_ zrZ{X=t@GPN8I@ct}E>Sl6L+`i|!FJbJmkd=q05SGIKXjLE4f_6}QQ`0bCWvH1%thk3mxd zR*9CfA3oebjc--u!9-MqW%J!c^q7l7FxH$fEfRjb>%3IoDa3@|E}|m`SGF$>>mf0I zmBpY&+zrWcQ!_owS$WGbtw9S+zWlpM!S>yDi%Fi;p!(L%aPyX@Fo%u%#e&b7lh5sr zR|cIT$jfcD6Cli_(GsI=DktnHsaxbCU%h-=e5+3&%V!OW!j9p-X&zbT`=vL`0w!}6Tg|r3sCCCO8`5Aoqp-Tg<{dCTunG>5rR40VqSbi*{y0ZH^Kb2OF zMRv?W%c`>LMmO7@$U4KXurPK5c_8QV>Y5>9$L2=sTbW&GzwxH*TM=8|r2o_IA9mQY za+v)X#vzPjys`ANsodOlfqpP1szOs6bJ6b3d(-Y5l!iQp6KiZY=3udlR|QWiowk>u z$O&i)5`A$>r||r=)t!6Zc2*ko0Voi}2%-W~j!>wL(x(+2{ijiPMajD*bwT`JF~ivC z}PARn8P5P1M-%qO@H)Ly5(OFb+2reCqyG5K_A{$Sb=ZOJhs> zW-FQ;GlQNrNVOT?eS3e*dw+7r-XA<*?~mEo40+tO_v?mPzsmAB zGVu&a{9uP;viDi2toy&*bYio`(qHmJrn#KtN$n&j!dTAlf=gh|sxHrRF45Z1t+JXY zM$#mmgs~spH`fBIoN4YBHD+|ofcEafCd?{mZ!q@FydMH&A4j%Eys$g({C75Z$N$k{ zz@bTk@kQ*GrA0yE-D!^)IB_GtHP5b^iF=9iF*?_uXsOVy%KbyXUnRz&+CvTx~-+m3odvi8L*NH%h5gl@_rWi8XY_xS49f2F)Y(y%-U%?UX#TFCvP$Y6KK@ zW$)BkR%@r`MYWlH{jb-3Y+TV;sv-7WExBn`+hQc;W;saYRns(9oMTOcjRxJ_>hJw{ zQf)8D!#i8-?tD3tARMwUWGD1;d6kH5ZQwbq;+6yF%!0Hh9vwyrabWU626-Ld~h z@8EOI2AmWTUT^uoETVkH3FAu-1b0$Ua{n%Ab1(}Q?QvVX$Y3xW-Wn&vnAo{ll5X0q zdyW=$d_XG1JM?dHO%8{T$>Cr1IgB2W#lP#b7(XJ5zsHJT{4ExP!`8FI!)J8nK6`$A zOfT-?i^JoS@4j=}$E~B|=ZD|9FP<=h*7M`T zq7v=H7bhp*J!_Y>Ii%n=vengUKRY}+ZofD#>vz<8arj;9xlvK7$9E^+z0ftLl8@Uh zDx$3Vzp3g+DE#?z_vGjWMSI~sZymRu({Hv>=5;8(KmD(B|d4LP?jkC`Lkm@9G)DWyuicJF%5)!ba-;qdj8CP{_N!N_&IWU z)_UG*QJSN6i!wN-FE6Mb;6aXFP_Bovhf(A9@e%dVi#EFGhRX#v=qdZ8hiPDI|-LjI2 zC6Cj>&t*bpPIMdVP|_JnM6yWRyR!jnMjfd=z!Aku+}{9jr1Wpt895Fj$Bd{bd;CA><)Gy|2WIts4F=pQk}KPog?1VS8N{@1a_ML9cXoW30Q>TzBDP*Bw!ASX|*_ zyEWua4Zqc?PpUoY4pLqyF8yFBgx^{UAuWXF$#AD5!wHpF!8ER24Mr~-PS2cNcUP)K zCop1GJ(oVFE41VvIw&miPahx!PyY*2@bsQph|fx_ExYV;CLQe1L(@+yVrd9}N#X9jO(u*@#L4SHxe7~H6)m_c+DhDk66U?mi5Iv7^9vsp ze*oMtR)b!O)#a-zc9rrR;;U5DI&CSGwNdHsuDKAiztg*Ya9V_bt8mR3pZFYPI zFJAxt@|4L&1yJN}+_m5p*WCKWQBUA!- z@m)EeY!2=~cZrO&;?#wWWcUgo;jKke^_p`|*^ruHuXb0#Ov zD?tUZ4s4}5ueK`l3RO90RgGII*WQS=v=+?l>no9&wR~&4pG9WYl0q)bIK&d#?n^Tc zLbxR#%9gCWDRGl;D=m4;Em1>`me3UW&j;C-pNqCsD)jSKb$&)=UYc#W5}##T=BF1q zPtRQlys?)-JmaKyEExN=N$i7ty%1S%{GTP)7nOQ1Chk`;;oN&Kl}^a zdk`T;{Q(Wpu=6Rf_`w}e8|g2N8T~~>+x;ju-VZpEe-vwapndy$F_Izg#JLRlLnyJj5utv5oo&sWk$OM3-8;%v zSzl~rz1y=Nc6#kXg}f}-$s&t?1NQs1>8R4w)+jH7sG;a52l{g_)vtb6law87a&J1` z!=mNpO?VunAGeHB?}smjM{mA!&J}juZU*<0iqcwJV*`$pw5AI8lj}teeC@sTCyz-^ zWINLy|BO3DKBc#dM}cq_>G>l6aS)z0 zn55-0$-_zwE$icjCkFdn0qVtQY^ixyAiX-%(-k_5-FN`F%h7v#?qTN zrbGiTMn`P3cD&S@n*_z_@wc5`;l=nNu#pj#CRYistN!4K+W`2 zCgDAO5=@EZf4Gu-v57xgchA2I6E=kFrBFnr62LgLc_Qd7I}hS4e5k>o0r+|=MGz2b z)JQI9GQLumHIdfHx|RZv4$a0dPvx^Wj*={xe0kbgg>IGy%U#GyR?seNcBFC|todR| zld(r|+7=XafSCx{c5rFP0N!W~9Pp{CVaA1{2 z_4Gyol@|b{Hq=4>G>6edXCAsEKMS+Y0-yNNOO|k#QfVE$Uh7NLV=cuPhuYLWkRFC( zEXE3Ar`%j&Por8K_m1Ggn(>m9&NoB)X-#j1%_LuDp|u9Oh@!3JD=k>p^WrkY(8w^G zhtnMPXw|HBuvv&Z3aykamJ9oat-h1JQH=V|XtPtU?G}g5u~wZQ7_C0;+OQ&v|0f*k zTCfSQ1`bNO-GLbBMylx|Uo(4HZL?p=ZmW4ZV;yW3fmR1VUNrO(%~nev*tKRMrDU8v z8JJ#e6gI0qN+q;tCSgSBjP+SxQG&@Pr5{PS630XzV~vatQl7~oXvigioA8F^J0XDU zF!%XOyZDmOm#ApPB4qXHu`jP->v8dmDSXuDx!d96dkNBD!t{a7vF$=|R-13ll&Y`gs!~hJTB<(r_~xAXz__tE91b;PbM6jMABx6hFOoRPlQ^g| zG`Xi!YG*u;Hrt2Xzx^@%Dl0x~>W0)r$BX}uwrkVtKnQ`i8Ib|%bfz_^9sXA3D&-ByHQX`il z=aMp8Rg)QUw_{E@X4N?9A!pzAvG*$FVFnYk9p)VFo}*>`%XlvMHPEYD>xdbbj8;M<+S;{D>`>f)(otza zrN=vL0O#!BNFSgS+LobhBNS1K$F^LsZK#+ZLJd{V8~ZwAmWC@3(PzhTxwu!z80N4J z3M-0&S*(MCjKZl(nHh(xlNoWgs!}LVj>Tbj+$%J~$5b|zZ>y@HVswUZZ9e_Al5Y7# zyOzE!kZHHtmCj)!+wDpYHM??E=DITQXH3NGaMuosX(!sX%PN+WF_x2YK%5)>$E&E#tB468 zAAZB+ssqm!s$~ecgtLOU*`;-)=TCjuF~A8gT1_wnHAGKbPxQo^=!q&sPp;4yB2xqj znCRMdJ`1Y{G%g63&qre$%;@KXLp&Yg=?G6p!&_oxY8>yl?1-JX8iw_jq<}b3G{N5v zh{wsm{AhTYOWMI&?%~0a+opfi=Nk^d%b^TdtAJ-J)-wYKaTJ!0VpL0C$)3K1+DzH; z^qLy4o9fq1_3OI&bse&OUQy_IrMsBg_HyZFAdshC1^4Nyx{bT{;FP3-6{SPDPfM_G zT*e|>kv0tZ7lXX&ASnbZ#=b22^R^h`JWya{SJ2l^a0xwzmw|-Y&`5xKm6K&vkxfjs z11z|;U%C^l=>`7G@aGb(*_4j4)=Ee*!f%Y*&OpGTewQ_!Gt_1Z@eVF^`NGTg_ZJ>k3%w zB}6XHXe*4C-b_nQ&bQ+`S39xo&Y~2ZP&3LtED8N00=`c)w?DZ{elmTy`~>2VDT_lW zQS0GSmnlnKC{6p}Vi#S`10^-F2xX#>6FsnUu}l+lng>?SEay=&Azvo+k?_$nq3kZ1 zPy(4yQYRCl#i*z8%?;LNqBhe$Px_8rrc*{-m_AN&w31C(QNnVsxY!bHvm?>+^ULaI z>0Y$_{I>cz-IAMsGCmIg{hc>Ah7|R+nR@HO0h&Pd`Ww<)Lb*-qYl7-VS=l3phGG0! zDY|{~?6?enRfZE!8>ZtZFxi3+#-3VoOZmaeT(4n$#TKZ$vp|tdfxbIytIM@-MFCHZc#~dHFUC3;m|R zuMsYOX5pd{=gumAeqa^N8$=3e8DCp&UGNk8R zH*Gvm(w)n&TwD;TAYMYj>urdc$VliFt>KDk*ci}K5}6j^fWwsU@~)?xKs5T}=Cb8v z))-zNn#(r*@!KB#Y1u@bi_NkzO&#RXb{`c!`!+U?obR#Hc`~b~6c_7@O}PY*qy(x(-rZaGe4Oveg;8 ze!H`Bm#xkqDwp+`GB20)*dDseb|u295@A(Y_gU3@LGArEJw0)(^pqAgKC}^FY=+VH z?HsXEv}8G5TtWao2Aer8;msukAn(7AyF&N*3SE1Of86c427P|K%gHJ%`(xcsR*=^9 zVxtXYmc(_NNV(oVg{J#m^V-uOyV#{|Qo-=#piEePbK@k<4S3QBoZR)gQp=bU_)L`7htRfy?ch?Q88qADMla>jOCJGrrpHd{Jj+YFpNmU7NsV+qgzh*^ zvaIHU&ZJ0AN~yA(yWUYllNwBWywMN8mLK0Jy5m<0~w|iLj%GEozGMCz97m(S%k>Az`I?GLXw+pvoE#hGtPaJyYqIGlM4c zbP*LI%}i1>^2^ga4VnJ%Cdt+I72|Gm--oiP??baT+^%%H7U_1W9I{>PYWaUssJC6} zPNBNYTY!U?Yw$Czj7wlyI|+h zpd2-3XL3Mt_9^0JAcLCdP$JtTo}Yfr1+20>4+spaIPWV8nUW7Xnp&3mx;i^YG*2i! zaS?G22yA{RTW&gOK!eZE;i&uk+*MXBRrf?;m1KMJ3%&ml0?$777eTi4>0E`A=x_q( zRgAazedxXmDH7(&FQMto{Z~V`N?FBILYBrAx#_cNg{#I|);%>{mqYY=4S<6|IBe!u zK@cmH1HgGI`Zh1yi0ITn+{-a6i8%}Ea$zsiWp}(W$5~AhMk{3LkO^4GU7H8%{8bXO zAyIDh>Yp{)^uIhkKQCA1`8f+3DnW`!#-}o`pLW&HOh>UaPi}4?>K=+~IX&RG0#m8e zx@G^_gV>Pj&h=eIC{}7ZxpRsWmNzDoCn3dyw~6YEoo~(9m7KAfr$ZhTN6pIl9kbFL ztGS+!?g}0Zok>qkn}vYO>+Ygj{^DEZPlmS%MP9m>CfvILw=&+}C*l&$E!Y`>$~TcY z+HM;_@a)z^^^Az!scw*ZkVJeo4!iL~Rw zL2pxUwZ{FS6_%U1FTw-j@k9jJsCl`Q0yxPY4?J%^)MX~D{O+HMw!W{~X(6#0_3bOV zykB&ATy9cu8r{B~(qx1V9)^l)R2hll(1du9&JffDogX;98}vkB;xuPN&MpRMu7^a< zV{y%$+hKeZmk%hPf6`8(&ZSW1U7k*1(R=a)3uU+R)B`0bvDsZZb!6l0+dm}ZEPm%7 z+UT0WVwrE~oqrJk_;-584_=uH{hfc@y!Pldw^+u-E+h575Bui31q!u8GmSb{O=0t^ z#ELHiK=S7aQ_z2eTp3Qct74&@B4gu{n=+n?eVJ8{y1Dob*LQ^zw!2UD3%j5U0bZu`UQk35WqjLJ)B%$Ka)UQ$1nNn(sNkBypcoP)pq?!H z>tz(()nyR56y26>cUvU8?O$fMjoI(qR=15cs+n~Cz#YYCAryC6`1huWbNG{kiHevG z=0l>NL`*%(Ua)GrY!26@QQdG%1UtG*%e*JOMHdcMQ`#*hX%)H?2#B!AR9}T=M@1|> z;*OGb?)ANdPB0Jiy+RJp$7jS?UPZkmZo1h$xT6c<6*sPHN21VVEjbSCZ9pZ&WX#|+ zRx0Ay(3jvYVpqqyi{RN7t8SNcjNPsAR0A!W%-hWt5RlTgQ1c<)nh)JO7|`BfUq+-Y z!?LA^bahn7>xm8sB9@{kUveft98?md!6LZ?Gi&(OpyME{M3RtKa5lm%@$)?0+KzA# z?9@`8Dk*4yz~&kwB`mh#&%SF=(h_@HfJdUeh*B*;!v+0!X=jtNW@DTI0w4;f(4DHn zJ#fyl9WN>WaJ0&C6KM)S>m$AUWYLo4kqVnpLPLEAkfbKN{En47QV(XAaF>He17KF7 zQ0m;1)L#Hn5=wIwViF0nNB)932is5m07j=af!@#M73>|>Sr?kWqn{4c7-xz#zbYLm*R#8wK4 zrujyHY^8OT_tqLE)(6xDj(;9nHl(Ub?@k^<`KBV+HJu6XfU4tc=pFF_hE8@G#xrxr zHI{I!5UnKplFJ3nWnsR6WUCI(ZOTy%YZ<)^Igwh7AJSwQr1{1&L0o-9Zl|}fuww=F zGaZzOyq~erhp&>wl6qzGiK|v@gZxdG_A5I@$jdI?ld#sY*rbf);+i|AQR%GAgE}^r z;=}q$FB5&DL9UjpoL21_P*FvG7w3kt4YmS zNY8HX=v3tcURL52ywJ#A2Yb&Xdnq!>#3aggYld<$2~ zzRb2uEI-Q`Zf^7w9505{ikvqC7O=2PJTUzwK!!y7mTfmxhuqrLlZ$t)8qT{ElPEEo z(T6Piu4RN3!(p;0n$ysnZ(ikm;kA$$UaMe%3l;^8?+PqRU`VtB#j{E=y9I?CAN^xX z(Ft!UsT5Vnm6^(w0>4CBo>9!@GVB(TTLu4G!|p0wl6ANP6)xS&ZK3^!;&=4VGwPCO z)FVe=cH0bdTJ;jV;@K>>^X0h;<&fUoF%r(BG-GSk(CP3x}Y*FRKO#7-65R<$r1pzb*IV#P!CMG^R%5`UA z(F`yZEqE}5ONnDje~dTVkIcS;pUVMw06K@-(427UuB5cag*Kt|`m0sDyQx zTlO8%HRor$o9%Q-Izi3q61IU=Q|v;%3)K{NBz}kiRd>GK@Ukh~bk>c&64rUqcIr7= znG}^)?7X(gMHUr7l?BJQvobkm8R8g0lBSTiTne+u{Um03_LON}i_LD}84XYosIp>0 z#+umf2QwS>(f!%XMhCtJOPeeiJvxLt?eOd@Xe zRgn#Uz?JK$v?X}oNN{)Ddc(o2N%5-;hLh4*{9D#^qiVWVHQnf%u6JunwL3bzuXeI2 zynAX z;?GOmTe(4f6?69o@wE)LaD_b;^E&$XD?K|usMBs*rs-4s&ZVXU;5C(|x_X04Rd-W< zo7)CR_)0ljda(Y;id8jMwBW->z{Ka^27e3t(zjQKw)GY31+8`+N8Fi9Bx1|Z5nZu= zFqr}KEDu!28p}qEb=npTqAL!6TI7Ji&6-A~#GGz_P z&viN9qrL3pMS51Dd|diOrB8IDKGeA3yGQ+5rp}5kS&b&)WjLubSKm&)zrUhn^4|OR zP?Wox`&%fkX-n(0-87udbNZE^=mFbdr)_wi_?KZRqL#QJ5_ESifMQ{=@hUF+0%GGY z?PVmk`$X7)4`%%n`^(eHP3^z`TZOjVyNgwYN~&p;5?NJ4HW5YnjtB|rJVYqTSAH#@ zct5oDb(8YXo5B8uowCT^G5lh#@MkLi5wh`nd2`FwKeaSguti}N8}l+@;@M+5TOQ7| z3z=KDcNL5-!raUKr8lRcjxgNbIEmCjlg>sy^%4JPBVhu8!6I2@0W@)%x|K8aB~Mmk z*$KucsKr#NjFCUSn5EJsnn7uF(_JznrBtVZivHmD)X`Ze{A4VnM@cGAG{dnKZyPVo~nYePwrJMHZIyU%XqF zSxrT1+*F{_DB%f%OW8FQtn+R0cfbN8_FYY1*C#v}1Xsh-G_CI)NfR5pNVvHp;eQ5k zHoPz4RX73t={_q$<^d+J4Eok|pdQpwzRyHS()l0GkPkMAO&^H(QU@3n0Rh8JKdUq zx=S-@uUoMbTzs=!ba8ZFxq&M8YP;NGETE|DMb(05mbUGifz^X(WMk~rO5;MRAcISb zo5|F=G%ayPW%NsMYa46}tAz!oZ13PdR(zA$dMwWE{e95$2oG+qD&aoS^_wQ|3jvmI z(E~*Hk2vqQP=&?5j+akmu?Y}a<>r17Y$}`nt1^7GEJ8o9j)`s@@$*C@Pd?*Z2(tbs z|;=MZ)1Db^1Yn2(z3-3(kgq*pc*F_m; zL&;0%?((DjAHjxpfvI?_y`CC(r>|&29UTgxqf^hnN+yspU)0+U}2*xgI~EtDBL)_R!eOKPgG1Mf7#K~yQ9{*+4rkn(V#O8R>9EZ(1+wLOM|KFUmHqwq zR^Wz2!!WYeh^yDK-Ouua@3KzVqWl0%ge6|r)-{B}osyt~FXhffU!UV0eWGq{cJFc7 zWa{kAv9HGvXwA_V6Z&bx*7q$m=Vl_r^(yTW=p7Heg;j)6SbAdNPCRkxETExlh5c1$ zYYiBh4Q@UC&Ka_v9O)Xjx|LCMSZHn#*`9xK9H9eJs(U7Z~_*@mCzp- zwb>K?%?;|dClalx74}o^;Er-qjd+w0u|(pUsBK?qhR`gbRrvtYwEnDm_;KwTTm2}3 z(4vOQkumSwS>&}`?dD>9+TF&sKbkw4@ojr2t$x}r%zbI?Oho1I1Uej-zKMq>Oj<&i_Ha@>+NPPy>BtruQHQvwOYv&7MDW=Pdr3Kh%m|<`8mf*sI%| zgO3~@=jAdNC6z@Vx*ynJMNi zlTiEniC~(6&hkv=qZpg9C_JVCEQmwK(qG<+NrF^xYia5i#g2s!o75HktZ-f48*{O6 zkFcW9Db%i+RNLQQ38qh|*huDMb1!m>gFf42v?Tlyx}4rK`OfrBwWZntscf)*t8cez zT#A8BW&2WD!k8;Y?@TsT8>RDJ*oqGOb_nf9+ez%0NRJk#WWa&a7IUT&zGmTP**lJe-FiV zOiMVTpD48TQsctPF83Y$2aA-9ro*$`!&ul(r8)SqF|@068Gy`EK2>%X)b z8%79u^N%dq)_>J@0|DFb;2t#`^WF0SB2#btGjyer`aEAm_a;Vd4iJk{{Y|G@Q=)Iy z@LzAwP(hkyqd%A*7ly`7!2V{_JnI)vBJVIYFgb#fh4zFRL{lpA`gZ7^yyy(JwY$DN zCA#kk^y^SS*T@T0)WM%Cf5O0**X3L1S&K4z*7{~;5kj_2M8;>=76 zigPK*TP*SF^D9pwPe~xKe^Z#BrvAoADC@Tj#~0pcZ#Y8dIQ(q1G)_RD13^>_)wD7XWVA;II)51)weY2@u}C+rnixe_~KY z^^u-|?49suy_T}uazLwdG@v~)5Z6$p5Mybi7A1cE?3ks*A|rnBT6VYgVfjS9K0)t& zpRDsgOW<3=R)mDl3EH;A##0Gw#3PkgCBtu3zWF^)zWUWJ{A~Lji9VaFcI)}k^W*k+hsWi@nNthqJzaixPLp04dH663ah16kZemLt7q|MSnC(-*6c))_ zmE^jJUTG9|PmV-e>KZOZ^P~~FG&s(ZCPGYqFLkfFSNQW8e=bDZeOchFcQ1M`yBE-- zLKbg@Ke!mWpTvR|>f53FT0YQAoM3gq)%PaNuQ zk%LNA<3V-tI-^&%6?NJOnDF;24mgwni1C>Nj_8<~-trY#+nvZQM0day?N0EF^trdu zt^2H7c0u#wGs|!$(9^Z~uXW*G*;1aU^LR;lycHKZ{mb6l?n}yJGI;4+4aLRa<&dY_ zCvoK z{uAT@ZDvm-?#q+qn*NU~_9x45P3ibAzhkF+!uMN?F#aSdz$igx^p|$X+z+Gd3HMU= zB$-ZWP%`FJc~DR_qfu1hPHLa+%Gj8%dgzXw%HuPmf zU*t`J{^YOkO2l8b5F@hHd?hbyF}cs79)VYoBMVDtr*Y`(Vdeaw&)Ue?=2^$ z0;=A@&>#sP6oirG%}bwQZzX0iP8$#B4>+B>Vzy<>BgAA}XDWytWf{f20D(Y$zbqRB z{Mlrp_p{el;RerE%V}WH>SvZ=>c{)O>u#FQhfDzh@DnG z(v0{ZUJ=jcV>A32TYBui7opSc%5M1?PQ={N&CT1Jo7XotA8ePyouB#3$Tfp0P$qcm zR>D-|*X{=seBjkKr6^As+EC@b0nk>U>rxjSH>l@_uH(d~dEJSu4Wjf$c&0Y&mLv&3 z-MW)OlIcKI5n%Wo>|Bw13e5gJ}YwB zog+Qx^bA1HsMtL1E@OTV=FZq%I^)vqumPJ_*p+B}d;u2$%@ZP<=}&?`vW6+wFy><} zc0}F_`$6yjXYcJF+D4W{(cj-+0l7Pjg=J&O#(<6RlF!MRkYodyvonq-E9?eqkR?Wv zAtdJf?XNz%TP;}zl9{`E-+h^Lg4N&E-PP6A)m7C#zFX77U$@t`<4w#SaAG6w#W2Ah zCgOMQ()X6mFU2!NZwDWtsy>+Xc7Y+sLrHJ9Ys=F_&v84FOLg2Gd&Qxm=j>s%>P*pd z+uL^G4AFBtsElKtaUg2XUOLS5-0e0Vvz&X6S#RicD7{f?Q<=m@^J0-6#gjQIQQ9!o z;av3ATep^RGW&NJqO&d7dHllp#yFtN_w(hRcuqgr*S={J zm_*Si=1)esa-iWC&0jW3PD`gFdOq|(T5vL+j0sOtSW4rDOCH4W5ypy|e4I zcQ(UK`L*S${)GjHclj}&>v{Wf%h_$+qT>6RKMyNa1aaBLvv*=LNAFH{ty0>M)hle4 zaeS@=v^mJg|CIG*?4zXTZ5-a5;{mFtF1gU5RUFd;44Fu+KIc0Eh=M#bjyWQP*e~Q( zQzKv+lDb!_3*E+R($!b(2Y4^vE3{%py#iD|mggulS0P?j+Pc*rXb@o8EsGbtiQBy{ zttR*0)nu5vDFa2dza?Z^_C>EBCA5Dod}s+}ZnB>>%H0emiv|8=&p7B@1_O4|JcV;J z#o>p?VT)a@;o=QM>cOu21--A~%!@2RZ`g)s46PRkt6>>DdmW7+llXcKr47%LBqnvK zd`i{=;10!~^B^H939hO2;+ZqE?x|rmha>r^So0$mXUJ-_t919F<+HU=`0(wnF&~z$ zg)z=9Lp5RIvRKd;F180$JB}mZfFo5Q)}>aGzG#u?W*ddk*%}$$nDl5R3Y5(J(YRle zD7CS&K@htD(XRt7cL05;ti2+8ly`vHz_G9SYjV|bkEZ^WSnI6C$=WPV1f=nGUfLw0 zt^HUaHH?RGewNW@Jpd6xVWz=GjVvF&Mw5;zpn4u8(6S#*)g)#jQH07P-NhWG

ad?~aq|~ZV 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