From fe1e937f18f32e22e5972d85912347abd0484da5 Mon Sep 17 00:00:00 2001 From: Petr Andriushchenko Date: Mon, 30 Oct 2023 16:18:07 +0100 Subject: [PATCH] Documentation update (#160) * Changed README.md * Changed docs notebooks --------- Co-authored-by: Inga Ulusoy --- README.md | 10 +- ammico/notebooks/DemoNotebook_ammico.ipynb | 225 ++++++++- ammico/notebooks/colors_analysis.ipynb | 3 +- ammico/notebooks/facial_expressions.ipynb | 11 +- ammico/notebooks/get-text-from-image.ipynb | 11 +- ammico/notebooks/image_summary.ipynb | 20 +- ammico/summary.py | 2 +- docs/source/_static/emotion_detector.png | Bin 0 -> 85352 bytes docs/source/_static/summary_detector.png | Bin 0 -> 86184 bytes docs/source/_static/text_detector.png | Bin 0 -> 72024 bytes docs/source/ammico.rst | 18 +- docs/source/conf.py | 8 + docs/source/index.rst | 5 +- .../notebooks/DemoNotebook_ammico.ipynb | 447 ++++++++++++++++++ docs/source/notebooks/Example colors.ipynb | 35 +- docs/source/notebooks/Example cropposts.ipynb | 12 +- docs/source/notebooks/Example faces.ipynb | 237 ---------- .../source/notebooks/Example multimodal.ipynb | 29 +- docs/source/notebooks/Example summary.ipynb | 352 -------------- docs/source/notebooks/Example text.ipynb | 413 ---------------- 20 files changed, 692 insertions(+), 1146 deletions(-) create mode 100644 docs/source/_static/emotion_detector.png create mode 100644 docs/source/_static/summary_detector.png create mode 100644 docs/source/_static/text_detector.png create mode 100644 docs/source/notebooks/DemoNotebook_ammico.ipynb delete mode 100644 docs/source/notebooks/Example faces.ipynb delete mode 100644 docs/source/notebooks/Example summary.ipynb delete mode 100644 docs/source/notebooks/Example text.ipynb diff --git a/README.md b/README.md index 988f0b8..6653f8c 100644 --- a/README.md +++ b/README.md @@ -38,9 +38,11 @@ The `AMMICO` package can be installed using pip: ``` pip install ammico ``` -This will install the package and its dependencies locally. +This will install the package and its dependencies locally. If after installation you get some errors when running some modules, please follow the instructions below. -Some ammico components require tensorflow (e.g. Emotion detector), some pytorch (e.g. Summary detector). Sometimes there are compatibility problems between these two frameworks. To avoid compatibility problems on your machines, we suggest you to follow these steps before installing the package (you need conda on your machine): +## Compatibility problems solving + +Some ammico components require `tensorflow` (e.g. Emotion detector), some `pytorch` (e.g. Summary detector). Sometimes there are compatibility problems between these two frameworks. To avoid these problems on your machines, you can prepare proper environment before installing the package (you need conda on your machine): ### 1. First, install tensorflow (https://www.tensorflow.org/install/pip) - create a new environment with python and activate it @@ -68,7 +70,7 @@ Some ammico components require tensorflow (e.g. Emotion detector), some pytorch ```conda activate ammico_env ``` -- and now we can install tensorflow +- install tensorflow ```python -m pip install tensorflow==2.12.1``` @@ -85,7 +87,7 @@ Some ammico components require tensorflow (e.g. Emotion detector), some pytorch It is done. ### Micromamba -If you have micromamba on your machine you can prepare environment with just one command: +If you are using micromamba you can prepare environment with just one command: ```micromamba create --no-channel-priority -c nvidia -c pytorch -c conda-forge -n ammico_env "python=3.10" pytorch torchvision torchaudio pytorch-cuda "tensorflow-gpu<=2.12.3" "numpy<=1.23.4"``` diff --git a/ammico/notebooks/DemoNotebook_ammico.ipynb b/ammico/notebooks/DemoNotebook_ammico.ipynb index 243984a..4de519a 100644 --- a/ammico/notebooks/DemoNotebook_ammico.ipynb +++ b/ammico/notebooks/DemoNotebook_ammico.ipynb @@ -4,9 +4,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# AMMICO: AI Media and Misinformation Content Analysis Tool\n", + "# AMMICO Demonstration Notebook\n", "With ammico, you can analyze text on images and image content at the same time. This is a demonstration notebook to showcase the capabilities of ammico.\n", - "You can run this notebook on google colab or locally / on your own HPC resource. The first cell only runs on google colab; on all other machines, you need to create a conda environment first and install ammico from the Python Package Index using `pip install ammico`." + "You can run this notebook on google colab or locally / on your own HPC resource. The first cell only runs on google colab; on all other machines, you need to create a conda environment first and install ammico from the Python Package Index using \n", + "```pip install ammico``` \n", + "Alternatively you can install the development version from the GitHub repository \n", + "```pip install git+https://github.com/ssciwr/AMMICO.git```" ] }, { @@ -53,11 +56,15 @@ "source": [ "# Step 1: Read your data into AMMICO\n", "The ammico package reads in one or several input files given in a folder for processing. The user can select to read in all image files in a folder, to include subfolders via the `recursive` option, and can select the file extension that should be considered (for example, only \"jpg\" files, or both \"jpg\" and \"png\" files). For reading in the files, the ammico function `find_files` is used, with optional keywords:\n", - "- `path` - the directory containing the image files (defaults to the location set by environment variable `AMMICO_DATA_HOME`); \n", - "- `pattern` - the file extensions that should be considered when reading in the data (defaults to all allowed file extensions, that is \"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"avif\", \"tiff\")\n", - "- `recursive` - include subdirectories recursively (defaults to `True`)\n", - "- `limit` - the maximum number of files that should be read. This is useful for testing, if you want to run the analysis on only a few input files (defaults to 20, to return all images that are found set to `None` or `-1`)\n", - "- `random_seed` - the random seed used for shuffling the images. This is useful if you select only a few images to be read and want to preserve the order and selection (defaults to `None`)\n", + "\n", + "| input key | input type | possible input values |\n", + "| --------- | ---------- | --------------------- |\n", + "`path` | `str` | the directory containing the image files (defaults to the location set by environment variable `AMMICO_DATA_HOME`) |\n", + "| `pattern` | `str\\|list` | the file extensions to consider (defaults to \"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"avif\", \"tiff\") |\n", + "| `recursive` | `bool` | include subdirectories recursively (defaults to `True`) |\n", + "| `limit` | `int` | maximum number of files to read (defaults to `20`, for all images set to `None` or `-1`) |\n", + "| `random_seed` | `str` | the random seed for shuffling the images; applies when only a few images are read and the selection should be preserved (defaults to `None`) |\n", + "\n", "The `find_files` function returns a nested dict that contains the file ids and the paths to the files and is empty otherwise. This dict is filled step by step with more data as each detector class is run on the data (see below)." ] }, @@ -69,7 +76,7 @@ "source": [ "image_dict = ammico.find_files(\n", " path=\"/content/drive/MyDrive/misinformation-data/\",\n", - " limit=10,\n", + " limit=2,\n", ")" ] }, @@ -136,8 +143,19 @@ "# initialize the models\n", "summary_model, summary_vis_processors = ammico.SummaryDetector(image_dict).load_model(model_type=\"base\")\n", "# run the analysis without having to re-iniatialize the model\n", - "for key in image_dict:\n", - " image_dict[key] = ammico.SummaryDetector(image_dict[key], analysis_type=\"summary\", summary_model=summary_model, summary_vis_processors=summary_vis_processors).analyse_image()" + "for key in image_dict.keys():\n", + " image_dict[key] = ammico.SummaryDetector(image_dict[key], analysis_type=\"summary\", \n", + " summary_model=summary_model, \n", + " summary_vis_processors=summary_vis_processors).analyse_image()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This can be done in a separate loop or in the same loop as for text and emotion detection.\n", + "\n", + "The nested dictionary will be updated from containing only the file id's and paths to the image files, to containing also all the image data." ] }, { @@ -196,23 +214,159 @@ "# The detector modules\n", "The different detector modules with their options are explained in more detail in this section.\n", "## Text detector\n", - "Text on the images can be extracted using the `TextDetector` class (`text` module). The text is initally extracted using the Google Cloud Vision API and then translated into English with googletrans. The translated text is cleaned of whitespace, linebreaks, and numbers using Python syntax and spaCy. The user can set if the text should be further summarized, and analyzed for sentiment and named entity recognition, by setting the keyword `analyse_text` to `True` (the default is `False`). If set, the transformers pipeline is used for each of these tasks, with the default models as of 03/2023. Other models can be selected by setting the optional keyword `model_names` to a list of selected models, on for each task: `model_names=[\"sshleifer/distilbart-cnn-12-6\", \"distilbert-base-uncased-finetuned-sst-2-english\", \"dbmdz/bert-large-cased-finetuned-conll03-english\"]` for summary, sentiment, and ner. To be even more specific, revision numbers can also be selected by specifying the optional keyword `revision_numbers` to a list of revision numbers for each model, for example `revision_numbers=[\"a4f8f3e\", \"af0f99b\", \"f2482bf\"]`.\n", + "Text on the images can be extracted using the `TextDetector` class (`text` module). The text is initally extracted using the Google Cloud Vision API and then translated into English with googletrans. The translated text is cleaned of whitespace, linebreaks, and numbers using Python syntax and spaCy. \n", "\n", - "Summarizing, the text detection is carried out using the following method call and keywords, where `analyse_text`, `model_names`, and `revision_numbers` are optional:\n", - "```\n", - "image_dict[\"image_id\"] = ammico.TextDetector(image_dict[\"image_id\"], \n", + "\n", + "\n", + "The user can set if the text should be further summarized, and analyzed for sentiment and named entity recognition, by setting the keyword `analyse_text` to `True` (the default is `False`). If set, the transformers pipeline is used for each of these tasks, with the default models as of 03/2023. Other models can be selected by setting the optional keyword `model_names` to a list of selected models, on for each task: `model_names=[\"sshleifer/distilbart-cnn-12-6\", \"distilbert-base-uncased-finetuned-sst-2-english\", \"dbmdz/bert-large-cased-finetuned-conll03-english\"]` for summary, sentiment, and ner. To be even more specific, revision numbers can also be selected by specifying the optional keyword `revision_numbers` to a list of revision numbers for each model, for example `revision_numbers=[\"a4f8f3e\", \"af0f99b\", \"f2482bf\"]`. \n", + "\n", + "Please note that for the Google Cloud Vision API (the TextDetector class) you need to set a key in order to process the images. This key is ideally set as an environment variable using for example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "os.environ[\"GOOGLE_APPLICATION_CREDENTIALS\"] = \"/content/drive/MyDrive/misinformation-data/misinformation-campaign-981aa55a3b13.json\"\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where you place the key on your Google Drive if running on colab, or place it in a local folder on your machine.\n", + "\n", + "Summarizing, the text detection is carried out using the following method call and keywords, where `analyse_text`, `model_names`, and `revision_numbers` are optional:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for key in image_dict.keys():\n", + " image_dict[key] = ammico.TextDetector(image_dict[key], \n", " analyse_text=True, model_names=[\"sshleifer/distilbart-cnn-12-6\", \n", " \"distilbert-base-uncased-finetuned-sst-2-english\", \n", " \"dbmdz/bert-large-cased-finetuned-conll03-english\"], \n", - " revision_numbers=[\"a4f8f3e\", \"af0f99b\", \"f2482bf\"]).analyse_image()\n", - "```\n", + " revision_numbers=[\"a4f8f3e\", \"af0f99b\", \"f2482bf\"]).analyse_image()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "The models can be adapted interactively in the notebook interface and the best models can then be used in a subsequent analysis of the whole data set.\n", "\n", + "A detailed description of the output keys and data types is given in the following table.\n", + "\n", + "| output key | output type | output value |\n", + "| ---------- | ----------- | ------------ |\n", + "| `text` | `str` | the extracted text in the original language |\n", + "| `text_language` | `str` | the detected dominant language of the extracted text |\n", + "| `text_english` | `str` | the text translated into English |\n", + "| `text_clean` | `str` | the text after cleaning from numbers and unrecognizable words |\n", + "| `text_summary` | `str` | the summary of the text, generated with a transformers model |\n", + "| `sentiment` | `str` | the detected sentiment, generated with a transformers model |\n", + "| `sentiment_score` | `float` | the confidence associated with the predicted sentiment |\n", + "| `entity` | `list[str]` | the detected named entities, generated with a transformers model |\n", + "| `entity_type` | `list[str]` | the detected entity type |\n", + "\n", "## Image summary and query\n", "\n", + "The `SummaryDetector` can be used to generate image captions (`summary`) as well as visual question answering (`VQA`). \n", + "\n", + "\n", + "\n", + "This module is based on the [LAVIS](https://github.com/salesforce/LAVIS) library. Since the models can be quite large, an initial object is created which will load the necessary models into RAM/VRAM and then use them in the analysis. The user can specify the type of analysis to be performed using the `analysis_type` keyword. Setting it to `summary` will generate a caption (summary), `questions` will prepare answers (VQA) to a list of questions as set by the user, `summary_and_questions` will do both. Note that the desired analysis type needs to be set here in the initialization of the \n", + "detector object, and not when running the analysis for each image; the same holds true for the selected model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image_summary_detector = ammico.SummaryDetector(image_dict, analysis_type=\"summary\", model_type=\"base\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The implemented models are listed below.\n", + "\n", + "| input model name | model |\n", + "| ---------------- | ----- |\n", + "| base | BLIP image captioning base, ViT-B/16, pretrained on COCO dataset |\n", + "| large | BLIP image captioning large, ViT-L/16, pretrained on COCO dataset |\n", + "| vqa | BLIP base model fine-tuned on VQA v2.0 dataset |\n", + "| blip2_t5_pretrain_flant5xxl | BLIP2 pretrained on FlanT5XXL | \n", + "| blip2_t5_pretrain_flant5xl | BLIP2 pretrained on FlanT5XL | \n", + "| blip2_t5_caption_coco_flant5xl | BLIP2 pretrained on FlanT5XL, fine-tuned on COCO | \n", + "| blip2_opt_pretrain_opt2.7b | BLIP2 pretrained on OPT-2.7b |\n", + "| blip2_opt_pretrain_opt6.7b | BLIP2 pretrained on OPT-6.7b | \n", + "| blip2_opt_caption_coco_opt2.7b | BLIP2 pretrained on OPT-2.7b, fine-tuned on COCO | \n", + "| blip2_opt_caption_coco_opt6.7b | BLIP2 pretrained on OPT-6.7b, fine-tuned on COCO |\n", + "\n", + "For VQA, a list of questions needs to be passed when carrying out the analysis; these should be given as a list of strings." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "list_of_questions = [\n", + " \"How many persons on the picture?\",\n", + " \"Are there any politicians in the picture?\",\n", + " \"Does the picture show something from medicine?\",\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Summarizing, the detector is run as" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image_summary_vqa_detector = ammico.SummaryDetector(image_dict, analysis_type=\"summary_and_questions\", \n", + " model_type=\"base\")\n", + "for key in image_dict.keys():\n", + " image_dict[key] = image_summary_vqa_detector.analyse_image(image_dict[key], \n", + " analysis_type=\"summary_and_questions\", \n", + " list_of_questions = list_of_questions)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The output is given as a dictionary with the following keys and data types:\n", + "\n", + "| output key | output type | output value |\n", + "| ---------- | ----------- | ------------ |\n", + "| `const_image_summary` | `str` | when `analysis_type=\"summary\"` or `\"summary_and_questions\"`, constant image caption (does not change upon re-running the analysis for the same model) |\n", + "| `3_non-deterministic_summary` | `list[str]` | when `analysis_type=\"summary\"` or s`ummary_and_questions`, three different captions generated with different random seeds |\n", + "| *a user-defined input question* | `str` | when `analysis_type=\"questions\"` or `summary_and_questions`, the answer to the user-defined input question | \n", + "\n", "## Detection of faces and facial expression analysis\n", "Faces and facial expressions are detected and analyzed using the `EmotionDetector` class from the `faces` module. Initially, it is detected if faces are present on the image using RetinaFace, followed by analysis if face masks are worn (Face-Mask-Detection). The detection of age, gender, race, and emotions is carried out with deepface.\n", "\n", + "\n", + "\n", "Depending on the features found on the image, the face detection module returns a different analysis content: If no faces are found on the image, all further steps are skipped and the result `\"face\": \"No\", \"multiple_faces\": \"No\", \"no_faces\": 0, \"wears_mask\": [\"No\"], \"age\": [None], \"gender\": [None], \"race\": [None], \"emotion\": [None], \"emotion (category)\": [None]` is returned. If one or several faces are found, up to three faces are analyzed if they are partially concealed by a face mask. If yes, only age and gender are detected; if no, also race, emotion, and dominant emotion are detected. In case of the latter, the output could look like this: `\"face\": \"Yes\", \"multiple_faces\": \"Yes\", \"no_faces\": 2, \"wears_mask\": [\"No\", \"No\"], \"age\": [27, 28], \"gender\": [\"Man\", \"Man\"], \"race\": [\"asian\", None], \"emotion\": [\"angry\", \"neutral\"], \"emotion (category)\": [\"Negative\", \"Neutral\"]`, where for the two faces that are detected (given by `no_faces`), some of the values are returned as a list with the first item for the first (largest) face and the second item for the second (smaller) face (for example, `\"emotion\"` returns a list `[\"angry\", \"neutral\"]` signifying the first face expressing anger, and the second face having a neutral expression).\n", "\n", "The emotion detection reports the seven facial expressions angry, fear, neutral, sad, disgust, happy and surprise. These emotions are assigned based on the returned confidence of the model (between 0 and 1), with a high confidence signifying a high likelihood of the detected emotion being correct. Emotion recognition is not an easy task, even for a human; therefore, we have added a keyword `emotion_threshold` signifying the % value above which an emotion is counted as being detected. The default is set to 50%, so that a confidence above 0.5 results in an emotion being assigned. If the confidence is lower, no emotion is assigned. \n", @@ -222,11 +376,38 @@ "A similar threshold as for the emotion recognition is set for the race detection, `race_threshold`, with the default set to 50% so that a confidence for the race above 0.5 only will return a value in the analysis. \n", "\n", "Summarizing, the face detection is carried out using the following method call and keywords, where `emotion_threshold` and \n", - "`race_threshold` are optional:\n", - "```\n", - "image_dict[\"image_id\"] = ammico.EmotionDetector(image_dict[\"image_id\"], emotion_threshold=50, race_threshold=50).analyse_image()\n", - "```\n", - "The thresholds can be adapted interactively in the notebook interface and the optimal value can then be used in a subsequent analysis of the whole data set." + "`race_threshold` are optional:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for key in image_dict.keys():\n", + " image_dict[key] = ammico.EmotionDetector(image_dict[key], emotion_threshold=50, race_threshold=50).analyse_image()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The thresholds can be adapted interactively in the notebook interface and the optimal value can then be used in a subsequent analysis of the whole data set.\n", + "\n", + "The output keys that are generated are\n", + "\n", + "| output key | output type | output value |\n", + "| ---------- | ----------- | ------------ |\n", + "| `face` | `str` | if a face is detected |\n", + "| `multiple_faces` | `str` | if multiple faces are detected |\n", + "| `no_faces` | `int` | the number of detected faces |\n", + "| `wears_mask` | `list[str]` | if each of the detected faces wears a face covering, up to three faces |\n", + "| `age` | `list[int]` | the detected age, up to three faces |\n", + "| `gender` | `list[str]` | the detected gender, up to three faces |\n", + "| `race` | `list[str]` | the detected race, up to three faces, if above the confidence threshold |\n", + "| `emotion` | `list[str]` | the detected emotion, up to three faces, if above the confidence threshold |\n", + "| `emotion (category)` | `list[str]` | the detected emotion category (positive, negative, or neutral), up to three faces, if above the confidence threshold |" ] }, { @@ -259,7 +440,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/ammico/notebooks/colors_analysis.ipynb b/ammico/notebooks/colors_analysis.ipynb index f922b43..7eedf3f 100644 --- a/ammico/notebooks/colors_analysis.ipynb +++ b/ammico/notebooks/colors_analysis.ipynb @@ -138,8 +138,7 @@ "metadata": {}, "outputs": [], "source": [ - "outdict = ammico.append_data_to_dict(mydict)\n", - "df = ammico.dump_df(outdict)" + "df = ammico.get_dataframe(mydict)" ] }, { diff --git a/ammico/notebooks/facial_expressions.ipynb b/ammico/notebooks/facial_expressions.ipynb index 4e11400..b2a7f8f 100644 --- a/ammico/notebooks/facial_expressions.ipynb +++ b/ammico/notebooks/facial_expressions.ipynb @@ -136,8 +136,7 @@ "metadata": {}, "outputs": [], "source": [ - "outdict = ammico.append_data_to_dict(mydict)\n", - "df = ammico.dump_df(outdict)" + "df = ammico.get_dataframe(mydict)" ] }, { @@ -177,14 +176,6 @@ "source": [ "df.to_csv(\"/content/drive/MyDrive/misinformation-data/data_out.csv\")" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1a80023", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/ammico/notebooks/get-text-from-image.ipynb b/ammico/notebooks/get-text-from-image.ipynb index 598f9bd..629ec9d 100644 --- a/ammico/notebooks/get-text-from-image.ipynb +++ b/ammico/notebooks/get-text-from-image.ipynb @@ -164,8 +164,7 @@ "metadata": {}, "outputs": [], "source": [ - "outdict = ammico.append_data_to_dict(mydict)\n", - "df = ammico.dump_df(outdict)" + "df = ammico.get_dataframe(mydict)" ] }, { @@ -339,14 +338,6 @@ "source": [ "topic_model.save(\"misinfo_posts\")" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7c94edb9", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/ammico/notebooks/image_summary.ipynb b/ammico/notebooks/image_summary.ipynb index 3323082..6adf782 100644 --- a/ammico/notebooks/image_summary.ipynb +++ b/ammico/notebooks/image_summary.ipynb @@ -116,7 +116,7 @@ "outputs": [], "source": [ "for key in mydict:\n", - " mydict[key] = obj.analyse_image(analysis_type=\"summary\", subdict = mydict[key])" + " mydict[key] = obj.analyse_image(subdict = mydict[key], analysis_type=\"summary\")" ] }, { @@ -148,8 +148,7 @@ }, "outputs": [], "source": [ - "outdict = ammico.append_data_to_dict(mydict)\n", - "df = ammico.dump_df(outdict)" + "df = ammico.get_dataframe(mydict)" ] }, { @@ -287,8 +286,7 @@ "metadata": {}, "outputs": [], "source": [ - "outdict2 = ammico.append_data_to_dict(mydict)\n", - "df2 = ammico.dump_df(outdict2)" + "df2 = ammico.get_dataframe(mydict)" ] }, { @@ -510,17 +508,7 @@ "metadata": {}, "outputs": [], "source": [ - "outdict = ammico.append_data_to_dict(mydict)\n", - "df = ammico.dump_df(outdict)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mydict" + "df = ammico.get_dataframe(mydict)" ] }, { diff --git a/ammico/summary.py b/ammico/summary.py index 3496e58..c5734f9 100644 --- a/ammico/summary.py +++ b/ammico/summary.py @@ -239,8 +239,8 @@ class SummaryDetector(AnalysisMethod): def analyse_image( self, - analysis_type: Optional[str] = None, subdict: dict = None, + analysis_type: Optional[str] = None, list_of_questions: Optional[list[str]] = None, consequential_questions: bool = False, ): diff --git a/docs/source/_static/emotion_detector.png b/docs/source/_static/emotion_detector.png new file mode 100644 index 0000000000000000000000000000000000000000..372898c6899cdf2bf24b63bbe952848ce9d8106e GIT binary patch literal 85352 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/summary_detector.png b/docs/source/_static/summary_detector.png new file mode 100644 index 0000000000000000000000000000000000000000..dd716e7048af65d10503ead4de14b5de6fd2059f GIT binary patch literal 86184 zcmagG1yq#n*Ds7-!KJZVpS&x+5e z|L6%l>Dx(Hm`gFF3obTi2rMoxu2)5J6b;8#5;R3+`#St5vqmDRpM3PT|1d1!hY0qY zvtNgs$F7Nqb@rPJm$JgmT${;lb`A57fh7RXFsj9`f4(7wzkT%2Hv;T`{#s$vOClLX zN)*A?NCjk}uhw5>QBdTfYDTvb5MbxEFD?o&y?@WljQs@BZ>v=`RxyX;Ll@bH&_ei1 z@Lr*X5=wE}Z47NPzrL888+Sl(ivptI8xi44XI?7f@fQr#xZm0LMf@lpA!~p6GO4o> zOf5vUUt$SKS4heeH#a*SE1a%)xH(hYibJec(Esa!WS$cL!(PP#NtiRGe+YVnQ8!#v z6LSYeC9lU!Ky$G%t8v-HZ(`Kt;b+Ig<(ML*?DaWfPN1umNCvF&WTbDl+RCt5`e)z+ z`@80p{;)oyG)|j=IFi98w)jig=z=1rY{To`C@HYUcUTe76RA6V7z6hm8s4INiDcGE zX4lyp?_W=fIRg5cq^7qderAY;-K+^b2nCQM8Z(nSn7Uu?xtjE#^slM}P|AEq7hWWr z6E_MtZDWaAd^L$3p-KOsdrCR?78Pjz1szpuEWn&!wZe@J^aRc2At90U%~BerjiSLg zJ6#`t7w^5-Di(o=e<~$nbYLl>C~L!?dv+r7V%eTq6+?<_x9>fSG->qyot>`B-VSe2 zM-Zx*?yFr#fx4=aMq^Sw^H9kmXIa&^e$ubw9noWuiGzjEI|+~6rC=`?>CnE=}gIU9#r0+NhJ z_kk^SSO4Il`7=5kGEtB#z~WR%CQ4&0lH084yZ%EUv^om55pfncWGK?9iSYI zAp3y1x9Gh#tou#aXVqPf*BU^$P#tKHq*qy!|B zUdN(N%Ix&V<5Sg+yNI(8r;k}|GJ$o=ld<@t3#kF!5TeEHc}`oIF5EvxrRc=!Y@djP zu~^^(?Mt!8*dV!$u9cXDLJ>J@J1@#6)Gii(S# z51tNEfDC;jf{f&FdlnlPcYPzEW2ij$HvM;xUsjtU6lPZ)9(JSIDIj08dMYY!2SJPD z7)fJc11pK2>kn_viYB67?$; zi0sv^7A$OFO)r0Kw_kv-dFWY~z-VUX91Tlvs!v zp_vMKz|y}9A!J>5I1-YUl27_l8U+^PBj$tcYt@2PqhpECqxSA+cno4c04Xf!{}^e@ zj+Jm=#r=>1SO9T@9X;}zOjv}xl<`Z%V!Obeet@&8(z99=?8lW}jsyB43nVXZcbOBol<@W~s`Y?*Izh<4Ks! zO#p*W=9V5SWjyQd?>FFn8&`|0g{DIv5h`xUpXma~mBCmhzqSqmr@th#(f>q5=gpV< zZY(}fyjvFw?F0+|#be^?8M6`=wIMU~`#aKewfx}(78<2-vA%-Icdr}f4-}Gu0%Hk< zoi`mgwI4PMpyVVGy)jZB!|C7MEd&h&;8I7KwcTJ`E_j2{{yB9H*}8>BgCWzRfmXw^ z0~t(jPCA9|Wf$wz8m@j>6*=y8Ey?puG{eG_E%p8I4!tIRT2~#*(YdM59_emh8XI|y zsFRM|snQ9x&QdtMZGkg5Pr&qg*snnxIYP#)#*z%an%=Br{}3L2c^q2_4U)UHyt~pA zP}))O|0W*rOU(ulZ+OG7lXE71Pp}unNBw9`tbhoT}-eT#Nz4G#qb+<=Xj5P)1iA2=`@469&+~ zS(eWXu@Rs<8T+1Vb6F)UlT6FuJd3YwfHVb783Uk|J$j+ymLm(MAi zp%Q({G&G}COzoF7V*;B^dJDP#A}Bz58`hI0jhQpO%*vGrU2~`#$J6Lz$nYq>G>YN% z$CO&OsryD8iWN3`&l&WtrRSq5qttby&nA9;>9ndYpC9N81@LgF!`efMLAkt=aC z9z6uly|ScK?h6BmU|%+P^!*sf0m>1ARFZ=vSBIvY_aw#QEs1PZQW8Ab5?JP zxjr3>m?q7Sm!EG9f5B&7@e}oBZy2yeSl@tya(yipe!a+-Df#n;KathHGIM^d5yV^N&e_L{_1 zHW_->d51}yo8Ue9PmJ04VamNLFQixZ-=cWI7PsV)*e2Szr9ovcr9epk1SLI-RH zqG%7P(#%#1_XBZVtBg?7n4`KO^zR9T6qocT6hqx@I}T0W`FGwFjz#!if0D0E`crzV zXx{3p!O2YJ!!kv+Cf0YW&~Tsh3o36PjqP62uNQcik8|M2cl*NL+WR|Srf&}^{c5U< z=rGJ_gd+)Tb6GZ1P#5K52${PHKu%JOUqH$#&&^)QLYmbn%Gi@KYvqDkWDb73| z!8`n8IrbgzVx^{EiWYX9htlZ!?5p-uPy+|f6an>0jXcsfry(b=UhPUh8R#sm&)y8h zg&S+?um`VC?}ti`_i=T|#<+`B^73_;EEwDtse5W>xtlD;J^a|GG1pqwYB$7*m|k{+ z>}tj>(5{vGiF!a*%GG$NKQ;3Xo^7Ry>*!XDM|_%e5Ytz!7kF6Izg@tleVhJT02W*N zMY5^x&u5U`lr$OWN##bHEUAd`b509LKC@~xY4@b+-e`tjp{$CNR>h2&PO_&Jya**W zlbepZdp%p^d_X;6_3%S54!k27b9pck)V5}`@Nm10ofOokhw&mJQ`~b$rg~oTyzO?7 zT(TWXzEa9?d2+7)A&fX}mp6P|N!hx zyPL6OSuzPhLnmCh5xnWjdrNPukea8QS}GqIl36tw1FuzuR)mvgD&HcQY&Ata%-UY|JfO z-cu~#31djGA{ptt_r;ISqffd6y^qSI$-)L8>6WiB2n*m@Z-ZF$*OK4dz_u!%gC7-~ z_dQb}Qz7PcE-iMo^!X{F$)dLgd{R;ry*#R!m1tF2^207&9q(Ur`wbc4z~t63K>WS~ ziqDvsKEVuB%Qt^?Y}aqrD0;Bp2J~z%^9w`rnbf2AxH8J8lvDDrOr+zDsbYA^I;o6l zq#P){NiXLk-V+p^2J+8v?6fu++bMC&!RU7Za@KW);Y5@=I-H%S@)f>GPnFmX;gM6# zC!`xUTQc;N(WPCcJ#?3p z0dhw-uUzF7Tq;Y#11~1cctcW>6yu4Dr^{NCkHnyQ^v0%(CXk!F!i5=b4%&bYNV;3a zKCChq_B zXbr@oLqht^=Hn$^%gPbadSFq3yw)QI?;LSEjDDx{*1l^g?ZzmfkB_rkAblSC#?S9g zF7G^N{3d#CWQLz&r;(lnFPM$9yJh5a9+Ns>h`Sjpl$B3?!6?Pg_by1>+F5yPphp2L zN34f4Pl|7s7Fph)DWlxbsaL{Q)hOyWjc1z|C&lfJo`g@kf`!U&ZK9(ScbHx71|h_8 zTaf zRd%QJd^q2ZS$|F}6U^h&eCgJeTfG=dA0uK-2}y1b2-IW`$g7+vW;*h_>p<0|m3`(7 zao|ausHaSj++|gBWfrhi;Ji&gC9flq4S)$li6g$uA7Dw)2M?H5;eaM}_O6M(W{K$+ z$www!wPNd5&W#?}aVCjLC4?~C|1>X16^!^9@0+sukGA&gQRnIEJ=^f{*~BnT!Ur?c zW>Q=?#%s)cu69kPo=gbJ6*t!`WhoiJOel1MoO~t5s>|KC{3;~OkI;!5QWb4IjU5Gb z6mu`6xz)|f-8O4pmZieOrD|q9foo_k+O|L#Vtk(*tuv>wxGP+|^qM=v6I}9ZhysEc z%*#?+J(gJ|`Lsl2zn>s#OB#y1N@FIVLlZWDXE%jc5;{Or>(PY4l7=bJ{lLASLeRa# z@g}sx=oU*h_jd7-c~Pe(?9F$sLpda;5bd%R7Rb)Sd8Ewk(3qF^?>r6`IaCNT88~q- zlK8l5vwhoa%1*V3XDE%um5|FTJ+{kO+rTETZ{uU(UB9LMV;K_S=G=YB*iR{kW2DN@ zA;^jgn!?Zt^^lX`q|S-=d4YipG2~5d;19HKAo^a0(;5QU@-r>q(?UYK;}}hv5l|jr z!vW?d!m>gkua+fH$Y!bP2|vEq8}h}|v-)3 zD4TbWto!+cx>p>^hU6rn?R&$QckSa|S!gx0@S(Y%1BMt-R_H+r=^B_4Pc^Z)=Cqev zF@%QGfAF*8@QAGdddd8o-?GUd`!yf@*u#Kvn5j0PK9gJ?HBai-Sj9A4ivyP|Am?QS zBeVER0)tQN>|lD6$hT@mFPc~__|#jNg29k;qL;>#TQc9qC(InL-32IG>S8Ck;n=}# zR=tD9!B2!TZjSu2WSi8S%lkDIG;TUOuUhDiWP%TlK6C2%I6%!tn^|P0H~$<4{1!i6+AW6OA;cc@iwn2Ugk{x4ZcPPftk!n2F)%(~>0$l~n`ng*`6&qq--5 z;hNn7ozxVDF#S>&Tug>pYq-J(L`|`w1lYfg>KWzkNVerD$ z3uPr1Z@cuDn_>2TA>@k?lC8 z*!!M8Mx$)J*m2=QKdx!Vw6Co=q9;JGvD`Oua}daf22#;O566M9<(Zu|f{xqZz+6ph zs}psxpYrZ(AuokiPz+ypTzpCCC}M- zf1=k3fQo1exBDOG?@uQd8zuM!Dh#&hFxALU{(Rj;2)`zVjMOxUoKPb+bw?0_it*BJ ziao}?D7}6_b^?E5F1GJk(y~)sW!LvWapt|SX`RQq%(|6{>Qv_EXc2S|G3eH_`g@~P z-vblHf=74746$O`OeePn*3X?B`#yA})lKnAln0>%iF>EF!`xc3M)gKFqvUr5l_7ea z)A4;fMAcwN=Yxh-G;P4~0`BiH27rznhKPeor`;OtU8`3*GDN=(h#fx8s^OZUHHn}- zuj8YS4ZM%jC@;yj+*8u9P;nxsx#>EYrWLKQ9WPs9hnrFcjC$m~wei5@QEI13FRZ7O z)31V^DDRfa9l9C{Ly;jPs{2$!DSl`F+4Q%-CxGV0fz_wSW67#8ez0=l6yR697BMB+ zyaV-4Zl4Glzdk8QL1rx<@8mw2h!KHTRPjoJG@XdCj0?Mu7`my zIdG?Ww#4Pcew?98E9NFwvsDTpM=H&4c({!zir-yJ{M5sC+mooLQbt+S6$%}?@|7js z0bMY45;n@Lujz5vEdyO*k$2;6RLX@+&BRpGrW#RuZYDmOOCeB zt~g|W-7Ad8ewt-{Gt3}O%gCLGVKhq+a-XGvog>!6&>SGzvwWCHyQngHwsl_tsPkRv z37rDM+h;dP7GoM(^nUZp({?7M(B4hN7CT@Y4>_~g;U6alF};Q zEOiDvq<0_x!lq$}2o`|CYXA|v|HZD=Mu;LK4JpgS7;MNnpJ178-*NEPib!L1Wx;0z*Qi7J>LRU;T5%*mq2Ir;y zv_2qeY7*>4rG5_tV-dXEy6p@qS2TmS-WbWb|Ag+12F>OkNTaiGC#I~^gt40dA6E;6 zgptGip;1dyB5i%4%_!2oe&;E^BGvWX(WwitogmCpB*>T#JO5n3W3IhVBG>@|;+IMV za^~nzR(js070VUhSN|XZV{=oQ_lqcQvzu-P}m}s6X~|&TLWH)VWhY zU|+P)511OW*4D>oJJ zwHN3dDGSEeA?e|#Fwe}^-t}{)l`rLoE783^&vsBzh(xlsq>PZhf3CwC;dreg z1fP|F{0tR8e=H8!xzh^dmstMO{U*3v-n~%#CAA|@BA`cgp`UN*xP+TM%={fp?3OEZ zxMe1?3-7{R$rzeX|BK0-|LB&jL7Fw&57#b$Sc|`=on@F$ml2hu2X=``i7;kPN`FbD z#zoUnw2D3Yr1IuaZWD1-bYLy5vgDT`j0TV4w?@6h^1`aOKzM3oIWK-uj;oR~BYg)V zW$Vyw=*)>>WR}#~*_Qj!$%_gQu4c{mS}_{5&oSPlf3bx#T#!(o;!u1gkd5JSNJ?6| z{71BMJlPm~wDn5Us%ByLLR>6z{JwP?4HAz_@NVrak?j?0{6P(NYTw52Iv!30u(bf9 zt4uKfM>W$@T0QX^KCNvO6o8CuM!6AMVhoJyJRG=QN*$1YRw4}UVvCtD4a2Vxz58++ zgH<(_%U4m29ntogU4``}h$X`!pm>P_V4~qysbK6>6;4>L2H-gxN!tj-S^o+fUU5h= zXZOm>otP$3;J+;Mg7Iw|OnO&XwbeUHfxSKMeXk*9wHm|~_Xcr&7G#hfItdc1-+C3~ zB8p=TvL<18VsqXaw`%tE^d>XmGmh>Kbre}84?|QGBgHTdutFeC+mCN-Rt;^2<=S>w z#Nads7s*kd3abJwCk<{5mj&^!z-_5-R9LJu(S;&*PfFvkBkgNLP@!P>pLHW3U=HyR z*p372L2~Ebd7=DtjN|tuxQ5*S_PP5=5C7Sb2+>55yX$y9fV9W6xnHE;9t^x@&I|^# zj5fUcj?vuhzzkTZJ6cqUPlJ~&zAb*K?duDVeAYl)eKQb%ZcKw=Orxe5YO(U=$ej|G z|1zpdeVrvj(t>?#|@IOyF`^%=Vy>L27OtnSj{NKkLPQe z_h3wFftdvl@nr$dw--ILvjV$LoR%Tn4eDLTpc4^f&ZJty8#HaZC$VkG03~*?CYBJc z&hK#%0dhg><*wDi?-&OZR6JgPzRG8OFf=w~(aBfJKNzQTO)97msj z;B|%u5S7*v3z;CXtjbbp{ndv{8xLYW*hqq5XFEjJmDY1W`~!gV#pamL5=xqtsiR~A zP`>S;+ehWE_!U9P6F5H-gTMO%^CPhFGuDWRh(49#y`%Tp8i*j=`yh!+2KBS$c&yOP zHHWTgO>3k8m_p0C&GF(S4+fsD!N;j2eR&)p2%wFrul6W4SkH>5aiP4TyrQCfvQS$F zYFFoR6$rwyO5)@sBco;g)z%>=K0?A!{O~q75Q?f>Mzdkljy#5NOArCxz(6JHaUfb# zV>#dJ!DV)qyQ%HMM8THDG1>0@Iq?mI5jf`G8l!3!c>Lr*7X;fK1pq{vXE(J|U#tY4 zgYxRNbNC10mB^C~>@kF31_CLm1vK;w4ZVCGr{j|hCF+jHmI{iB0U@vXjrOM6Gc&up z#eb0iEfGs_BLhM%X-L2sA8J>cocwwZgUN4MAl8QnGNh_#yVZHF=E5?fi&P_$lS8lV z5d9Fb8g=5Ko@40{ks^|?%ee+|%E&ZM#7_t;+uMelIPAgj{po9xuz%m-SLni@Le!h> zD7Z;W{Oc6f%cp7;z(S?CdO1HAw$(XpH0p0>m4+RQ}FjG@3=u#!<-c;hHS&G zQD?=bu8N%pByq)SwOel2-zgnDu+3cr0QCUBiMNOo`x0zXo zG-1C+lQjR5j-GJYj{y))*oSIQtEY+S%CWdTZU-EFSG2VAtSy81|xa9+O~DCQ|R_ax!Z;f7i~QU*GiBVEcu5d z)R^@~?xX;7g3TR#RGFKKA3*+`%lmPQ^J#C5GAl2P!A(+W_`8K@*&zA4Jplg$?!>ib z+FH44%OLRxrC9Xtz^NCX5Y!q|E*Y2LE7p*VPxA-hpug+}gkb;ffPYlDyx&I42}VRw ztZeSmGfNrE-U!n+mN%gS&?>j);@zYO8kp4B%HjwSlYS4Fu$a`}D?5SkNTO9d5fLx7 zQm=5Y{F+0fAG88`)53XHAiciYOB1VsYVnKiDp401HqTCX#QJz=m z1(k zuH0!eZvg04NV*1&7B6SFDI#yR%@AtfSRZYi!ZVW!UvlX9@wzT2%vSiTMIf&T{f++K z?vK~kDDFeVil%b;=O`%fSTWKBQRpl+A*=GOlnAzQXZJKM9tendfA}hnHNjzB@Ns^A z20Z)oZBz(=(}@ilXni3SyS^@2v%57WPyc79UIX8P%NjJt#b`j^T;~=Ni%?gGLC8Z#C#FsX&Mjckr_Wt0gnV&J0FlHBzAhx_)xVJhG3o;xBFx7t3 zi3H2AY|(*G3?uiX^Tw-}5NZ>4JkyZmPQ9WsC1c8TAf$hFgb+7?hkVA(%g)oPBMk*7 z7Z(mElz0V5KPMufK5q^IB6m#JbTFMcBfSJ6pL?j1d3p6T3P>g_+TA*i(!9>tPFnSg zv-={F4t?;r5!J#O`-g7}9_jL3h9J;*oW;VkPLIerQv8vPPk>_}BuomjqO_ML+mmS=(^Xh+_wU|wZEaWUan@Z=hyO43Ah-5IP>2wGqCbc43QPDg|O{ju@M z1iD_a&=PTO+ANBD(~zi?I}1*&gXv`aEpUZi=+&Ko4X|Nl@9PAuEcoiIrHLI7xa(hC ziD94GNm#G&_opM?g;NKYmu+2_1iiZs>G%`6;cM5Rxk-9kv)Q*()sR1V0D;)rL01+J z^$0)3b?tC~9n{n*dm)%SdxN$orUbR+01p7LLW4m!g*nxk`=!#gZIo4wLX$>bGKkKb zpKQVXex$Es2P)NP-DBZod}+4~tJ-%~n6mINcu*@Ec#D5x)X}Yo;^A4F2t+=*KGk0^ zSXUSYb?w`})p?gcu6&zTzX8*I1ca(2{l0Y>$pm*g6xvWs0TiyIy(q8YP%9XxeH1o% zb4h3~Dgxkf#4=BTSi2X>YS7$Gq@jOBR91;6_;QSdzXy~&K&@*NUxQHWujXW7S>O`Z;W` z(#J9Xgz()m#*h|=I?s7BU=J$tO*LYXYI)dpQ$xn&m3J$B5J-775%T6ieojW&R4ft~ z1@l(NTh!#h*vZ^oMiK4jEER)kHygl~Gun`2WxG+A%P*P=k&+}$HQ7OIB%Hg$agYaI zw$Bba%DaE^$IYF&;?Ymk+Wz2$>Z-4eTIb!{)wnrp4{)?lHQ6zYPSvtZ?%PQEQ+^O& zAFa?(X(&FY;bLc}Ie6Fr!SZewC}MbACO&Q-DIH=c#dQU~+dHroihRmMr|TSY_(uSd zzp>Q2>?OWc=*8S}DVDvELM#i_=q1`KjvjtZi~Ta9ljTd%r;O@FCVYK{{n#$JHd4}qRRWi`_7bgOTIlM9UO<{BUHZw}lC4g@&}&=y2{bV)?Z{K$}Ac>qEhIw~u1^i_1m-wifloDF>UvHJz~Jri5O z{5p3LljZ>|^hFGiie{8!u5YRpw?It2g7uX(hS^kG2(PRwc zWJiN@WLO$1B%ExlH;!KS5PkBrYWzOM{*%L?`m?Q=Q#aa9158!%Vhk^p-M2<@%FMd5~CKElcA(=MgOae<_}`1{jF zZk2a^zB_;>JhkuD`V>-jpRQ0;*K6WhE4S7;azj}#&$3e$9E(eE)-#cUoF5UcA^7RLq72LWzA zht{o5oluSgUS0YE26toolY+}Kz!KBDA)jaOI_H#?w-Enx`a*`H3PU4oD-@r@7}(%k z_cO{>L~aZKp)ve~oL}pCJQx);&6u$9Brfy&egwi!HUl5amPTzoiTbN0o45pj2VdYY z_nBHG&s?Z1lu%-B9fjO8@Etsitj^TPg+&7&_nII7U_|g}FJ7yFeQ2ej`fOX^CBC=& z>~HnRs@~6-*e9#-4(M3Q9p!+4wOXhlTtE6etj;A!(lHyYDK0QN6S{0%46x1e&nT2lzG3O+7etqI%RrI*F+CwoTF!#FDH}1Cb^zK<_g$psn zZcAO5Oo#q0WVKH6^7<0KV<$yVfJs0MehcD~nUHEc4=0B}a&~`eAW(2-gs*JZpfg0r zmpy_uwU@)Q1AS6UiEK^sF7Ua7+TJVkYSsL~-4KTcP0Xh0)2zJA33oPeeV-9aXY7dF zDwf3>IdTwJW%kX$GYysu4Y)?~#-(BrPb1WS?b!_|;=-lu_O8;D_M@A(DW`@IR5K6j zlKNf@U{NG3oX&D&%^;kRdbS)I*}QY;S$}HnbMRX;;eHjjBy74s#J@h|p#CxFFU}+zC9Ec? zQZ69!;x6Pc8J1tod4oOfT-BQoy0yeMv6xjCH zz<2kX(0n;>rVSN!^8`TdYkJ$ZugoG_OHGn0b2?JSjC&oEq1MyQE2$Rs(UrX;l9=vp zY?$2!cFc&Uq){;5Z`3H*GJKtZ(s{Pe&6a4h3-v&xd;xB>RlG!mk0a$S;CsL}8P=aQ z1pu~RC@-&1VyR_8SZzL=JtKqHdQ!l!=Z4y=>SXV*3G z&33u={h!_nwk9%AT#!#(BmhwqWAx{tAlbMYlnX-2$Jx?wwNi|q&V&ztR6?*D07@)T z2Fi)2I}yrK5vjt6#cu$~-Iok%(oo>X&qhhbc|gFof|-2O6rq0+_z1`71K&9=a2YAb zLy46#3T)LZl4ZsF5d-|)#A#6b$~uh-wmdxB4>Jk%$+m(Lk6o;+IOPt4K0vPK?}5wV zHmsg?J4pVW2@mDuHusNj<3KVYHtZydMpTdKKlzFzfpWhK{f76mGBce@Q1F5}N?Oh- zK?H-!6NQVxG*hoQ9kRc(X#@h9!VI1k@Bi%-92D|4ow9%=>x)&_o((gWhlgkVd}~+= zqYnWLNa&iaWx-cD-2nFf&HHvFjjiWzK6|S};or^Kpnf2#e2477licDN*sxjJMitFK z#O8(z8ux%V(3jxipHV*T1|qr4HA45hi{L&3=Ko+}^d>f9ProD0YhA*#9$Iv~;^N~a zq3eehdI#-(MEz+jNg5YH%N9Vsdd&v>$6Jw)2zvksLExerf3w=mR9~Ez^8t{ICSAT! zBDI$7&)d5XZMZxfKg&wv3I6mx?w+>a_?x~DJm-shsnOz%g-vN5;oJs}-#zCnbu^{e%rZ;WPYzXxk`hUt8pbicT&*>As z`3ly2%w(gVbNm??xA4> zcaLo?fL3~}_hyCBb&z zc&RpzTWCM!DJ4h$&$MnS?>b^`#Z%pHMnmtVK4s+CPV7yWG#%IHx({x>01$nd<&tW? z0C8GUHa8_86Zw+D5pcBl6ny&NA`&DZy2jn&WM?O!n!NG_qt_9FF3J(ck{=5Rr3UMB zzYW@QxSvj*kIICZlw%TK9S48`K-PA?BvzBY#T}L&ks+3ylcT>z{rB={60zjSD!#*& zz&^f=9FfP^>g~te%uNY>iMTr{s?CKpiB&zB6DB{N>I?b!2Fh-%n~o8Byrws>5%Y&q zA75U|NlQW?XWW0yogqY;3HAqp*vd8?hjO=`1-(Li_vsfh7H-N_329T1m8_@Y@Ux?BXbZ z#FP1*1BU1QYXx5q5V#~_0~7s}qnjz7%|_>Dhn?g>oC`X>&Yb@5 zRbmL;^!GtT6%dcxbK3c*d~u`OcN+yIYP1u8WYe)*^}o3xiQ@^}s_uydcqvXS19sJR z`9PK~dO6>>Z<5!xSGbq{=g&RL4RG*3>pUCsh1fhh&z8bp4n3vJc+X<*ZYy7=KL45! zJN{Rq$8P4Vho`5l@`<9ykgyOy$|dyTr$~m(Mi-Lx3P}@&TF>eGRwP>_b~K27g36XunrvbDJUq= zzUl2<*^+$-$uBM*ib6G0a2?jJTV zN*vxCu8iYH$_Ms%F7L1NF4v-nwd%B3(8q1s)&cfKRq{}(F3((<0)ow%pxcFU( zVA5Z{0#27|s@ahUG!V-bd~G+8I1OFntB~ys|FN|68Mu!00x71p4f6tr-3Dc<6&w9^ z!&YQ~tb*@V{QmuW(P=-K)pkYa{;qplF-P7Ku{$8Rw6)-5V1)MAca~C4uQ`$1kuad| z+O-SQ=shMxuS``jTZSTCi^rLX&Xr1bY<$8Hz2~Tqd^!z8_Tj$Ve6svi9||(E)Bc?6 z?cOv4|7GL6)rWz9m#V?-x#M6cDr%y-wE_0lygZ-WZNBHWzpWk){|H38wwB%w8I5Mk zQKfsjUoz|5SDSNy2I}A!QU?Npc%>E{-{H?HbZ)x(^uWh8MC^!i#dkc2H9IJ3{z7u& zGD4g9e)2u$zBzwD5n#O#QkHmEUVy5;zP_?4+~b+1XyH%x7Mc>eR+(DMSso*|0-@jC z$(DzdgV=}pnnikzI>@_s&pVz0BYv@Z1`i)DsGC0^nXSQrVI_Foc`j-Xc`sV1%0XN1 zPlAo--X{zs^BR8dTc2t1*7;;;Xe$r9LdD5c*fwm^x=9s!pO*)4W^L|&#yfb97%!=N zps1*bgwf`AYO7zaV1xV!maG%t2x3js)k;bN> z-CcL*Q8B$Yf6^D40$gWdVUg99Re28t#kN9+u~7L^`nGRQ{jjP{i8;LPv@YjPfrddQ zJC&HsYd_*xR9bEiinVy?@Pa?SBZpuHu(w&e z{BIKZ|NR2tJ^cUsroOP{CVq!d9Ee#2bBH-@1T$c%h+;#e;XYe=lJMvaV|~PVL~aZXR#8 zg>&qFBtX0a1k9JycTv6UC~5>iCI(=+3SD zbN0STJ7p$EPFUF2m?cTpdE?A9L@e^xuf(76Bg+zb<2&C^?6MTzV+R4ZSyW7{dRnk# zQlm(D<4TKOWw1Q}V4O1bUSus(KaJl~yYf_El7 z_46@pu^h>qT=W>_IZWbpJ@FeqJY1|9a@U#$WPI~Y=dN(t@aV~ofcErN8H0~IydWwxl7dcAdT zuflln?m8`C!RvBfK;SC11)&!;r#>!*J1z<83N7nhQrrr~L+uZdWRX7Q9Xe z0EZtt5*x4&-+jcjn7)ftq9$Sdyp)fxy(f_Bz32rWTuYy+q>m7Uz}@M-(bea$bO6={(E;c}{>)pMyo%&MKSCYzSl>wYIhOARFhPna}vL}_M zEs+~(QdCXtePnzikt^@QDI~SQr%~r|lSUYx&;Wp2afh zcZHAvcGU$UWR3x5((CcVVh-aX9%S)$kM7XpA`Y#+s?AAuovDE9%kd7*<kl9vbZm9n@P^quH!{D3%!}cG6MHorgIT>Nr5*PyIr^#hz0#+ zldc%L;2%F&U!zMMG5MLr)i2E}qf$=!;JzrF5fxt1nJn9n@f$Xr_^um9-M?Zd*Hd?R|p-vV?C_ z<&5^QGINNe;{Y;y>0z4Zv^KYwJ~U-oSJmHA^|8T+IYA-YHe8I3Cgwf`oSxpw$78f? zWXzLu_I>?)RpoA3(gV0ExKHMgrY}7|_ja!UGp6IlPGHVrkkSs#;xpxXhSFQu=MBmUc} zgm~BR9Jv%(%;ZYPK4$=c-AJ(ZIzOLGsPW>kxH@{eXk{>G6BJrw)FK0k;3UQ@6TW4o zprE1(kj;@xU?Q<5dMxx3_>6@=AF*euVSKQf1?+Wee|k;vEQJ(auM;7YT**9g?X2+k zNN*w~cU$CZ?8GM1%FFE*8tkul7sgCS?;G44PbUr+Uc?EU4sawTCaF6RKYJGN1(uP< zo_Kz@xcTUf$)B$`j?AF{o@%wUqCx|{9uLNZKS$a&-9|-4ZFeHl&_Ehib{m6$f~#H; zHsIn9rfiM&+?IU7!Ob z5S)7BkZ`(_LM?YuB!x ziVB0u`Grsf|BZEDxUr7vNmX6X*kR*fv5l`3-XjA;N7IF~eTtc9^2!PFSYO&@k%zwAqA5bWVN6T7P zESx56ZjF#3N4>s1J>F8%(6|@{dvfhM!KSXR4(*YXle^{l=IE=ytH5!EUL6!e+q@v#kih^kU^>!lr()(4`QXiK|;C^pXEEwzX zq{i(yUJ3WQt9%m!14H$-u|tn>hvA+2eK*#sxF-yN9#|)>{c-ZQ>(*Vl(fWI;{(g{( zfd*7nXTP>4Q_)k0HG68#2_x^X?d_ecM@FXdGjaZ*R0#ZcEPpy6N@!0)p$j$Oo{Z1~ z5eZ3?Pqh+V8$W+`1R;cl78hq`lBUSne6KAiC>RPsqK@6!IWaagoVrfRsH@{-;Fw)l zSQuVzo`&lm7)r*+FMvk?;C@}>{&?RS?0LqBnNEw!h4 zb-?~_B*g!Qzx_#+LPtc}s^w0>KGW8=R#@8F^M8kR^!Pu6hrc{M-_a$plaYg4JZy0& zqJ)Lbk^f_iKZ){)L4(INc6D)4RDAE-t_GUBx=s2gn*YyOBYF~e9i?m)ZM!bEMXM$M z>-4O}AF15$CTPdL!u|IkLI9uRf6x5CiTYmy|1Z_*lsO z*?OnGqv8-&)Zc(c1vtrw121YzL)8)LZHA~4|gJeEh#PAh=mpZC*n-i!QpaMOmq`$9E;Jd%HRJjJ1N+E6ZTWzw&E=uHC?D)wRj>&o<@m=Y|r|WyljUkbWa2j}H85 z%y%|k{t&FZ;PXipYjRtk9|lgX<`qsdMzcns4*jbiXq*4MPDvhtwzf>JtSy1S%*s&6 z_(7+!5u)`9{k^V3n2L;C62IsD!04DM%07g{dlK>V-2?(S>l1j5q*}e6$KbZJDIS*U zjr7+)6%#m8QDJ;~q7p0oybJn;W@BV}36g)@^uE#rWHK%wz@pQp2X4Xp&P#wtGt=qm zH-%*Eq7&Z)Y~w#S>C6e`tP<9t_4oJx;`NZv)Y=sorZOigaT&;fr8MyIx;7jEyPB1E z$)*p@G9&&1r^0j{Zehj#n7Z}vd05KLzWV%6N4yWe!$8MwvsB?~sYm2R_3zx^#t&3$ zx^6tJ`nDIQ5FSb;NfQ6o z0!Vi>RYl=v3YMVLSj4JDrkyh~k!+=t#YUUiuutHvw=3GMM%^u`z@c2yt#7>HC4Wg~ z_k36=C1r}i{dYv+?C8jirw2v@*Z9B@s4je3(o#=3tB)`JShT1XZOIPKh6mXs#wv{c zCgK(~kG)=zg~&9x;QM_b_XV?O2ML!QW#Yt*`NvmB{xtjizrs9Sy?QV4K2=jy5w4fN zS0+1>%jqXtGksN)evQV9S^b`!fu3)%pm00>cWRk=*J)XIO=Q>FER(+=J$AYGu4}j=ml;K%Z0n0n_rT5LKr@~1rjrIR z?UXf+AWmJ6z^9zD-D;1H9PuTs$!YEH6r;Yog<@bRg$eNLnn(E8`y9ipr(_Pl++G@e zDIu7^oK3Dd`(*?3sIiGUcV6J5k$)EsK7H&^GEk3 zAO-)vW3{BJk-Q~&SmG+aOfC%G?{VzproYaNMXx=1qW!;jgL9~Sr5nOYE5+tD_;Vc0 zN0u$sd@C4LvxWhl@u};!(dol^VI0yzxh;%44vt{B9q6 zZYaZbrowms8MpWkn9(Rw#e&q{tlRF8$MSXOm{&^L^C~u3 zc80RW=9mTCzA4nc&F})#1R|Y%1lDgz@%#(tt&B1JK;OxPd+Nizl9J))^WET!5wmkE zl~D`0U6c23K*wDbg0-D8If25kqY+s$I}*0sIIe|a#(BE0_D@nW+5*q@G(MSc3n@Z{YMP+h7gC%i~AgrHUijeLTMwt zI_qDW+f>=__fqXEFp_)KzW*#}TlZ79BkJ{*3aW!IHb{K-T(kwhs!-_Td5jDg13JqM z$LM8nenO+~o6|N#%4~_h*xhin5{r}xHN10c=g}VH$?cA+E18v36Ybg{3%2#b{C84( zx@xkIqs1MIt$f839knod`5A$c=J~50Un2OAfb+?*W-T2~l`aKR$3?h=s>fJ9n|%rI z0NU?)%bQ}Ja?Tv@^*xLhjm80n??s**+FnKBsk0-g&yU}Cp#N$89pEFCzf|j-R^#R7 z-2Y;e(WzO>By?EqyJIJDIWAs)LNLwIHiD1$W17`iz()md&1{S-_2 zu3%H4V2VOMn~*M2l%=U*2>1omTeIF?1_YpoT*{M%-Gjq&yU#KH7glnI#}Sa~T~ z*=s!}Z+Kk4;vWu1Re_Q6kSJT$S78ZhSxo|hm23oEN6H4BJ)i$t+b`cUdUf_ZO^)l> z9n4_wvKZb5ZOJUrf{6(c%MZGZL5QD#medk0OIn~Uwm|VU7{;gU_iy>mI0Ih?yVH8m zlQ|&jI_iSg+uck3D8YIFT?p8~KX1?X&T1ce&l)rWG0@zGwV;d-eXux?W*~xU8;iiL>3ZyI7gWXi3UGqppzU`g z2=ve51gpBV>JflABwPfEtVThyXye93sJ2KDsm<)|t+0Sz!CO~ASn%P#B6CzO@jlTa z93ui?{O+?o&+limx|6i7NzJ;=8Cg5%MO^=_D^MLq&2V;+I7kunr@F& zK$elQ-tM9hXn$_|pbZ3-%%UU>>s)W+UM=kB+;XvZ1VcEEONl2TlPBHX|3JjHWgh3> zJ)mc==2#kHF@LLU&6y1@RU&@aQpJE~P`p<6Kr^%=ykB+Mys-FTN*MZZnDxVp+F zvzm2u1!B{z-ixO3)SfS1FC4vw9{y@B0&QsfBKBu9TohMW+?Bsp>d8X@8Rw#Kn}#gEKbvA?zZdK}!1 zi}G%g2%O5dEYzjEQ|z~3ZZp3032D}Y`%GMwTK?ICy1+@!&ExO$fRQiLQw~!_#oIxF z@ae?C>T@9ioz+I^Y;3TtTexQ`lASs^1xNTCe5$!yB=H4RlVnF zN)_pvC~M8gG-+Hc#^3r0y0b6H@IXR6*Bq{u&?t{de+CqG(z zETEt+)5!J1xbxw!gQYW*y31Y^BbP3Z&r*Y@ru4L|1?%Vd!4zhuKiDUDoEq~C@0c&D zyz3Vm4)mSY!?6O{`W2xvQSfF}7+&t|f2xq(}B zHP6rCO5A3seNJ&Be$Qs8sX!GAihw3druEL`+!a?XOnOh2_bTVO(9YSqUaeNJ&G^1? z7W9URIH!aR8>h88l#AWE2D2Fodps@LjF7yX*0}`T_qFh4rL$2x-q$x8d3V*6q({Pz z559akO;)i7eQQmpNNEbn_yHN&uV256jg7T;W0q310f6oEL^0b|bJv?A8OqIa20$t(U#^C(CaO|Qh zFV0M&qXP=aqs{p`7ZUGvU(TbaoKDl++-Pst2jHT+!n1BwYjW6j6dHv;G_>=850d_ORxURbzWRMw+y@W$ zVVvN>@RUHxW=fk`E|R5+`-7afs|vy%yu?Jv_{F>&zpezK;DH=pEk5><+=@TI*-cVq zofiFyE1g)jQYxp@(&}tDTEr&IG3ap-a8G}0>)|o6W{H>JG&t{?BHF_OM+@bodR={0 zQ>>N=JNCCDAfFq=Tjt%max)Yn6Dvg)-EUXHbb=xjfhB%bZx8c$P4Olxjo~pqT8Ks0 zzI&x|6Ps!1=IZ<}2t=R-LCsXm+M1)HB6T*pW{zio|9k0pbm)p%_syeKya4EmXr_y* z+a>G_We$*m8Fp2*pCzvDF8b$1T0Bbwyc-9oZ669UrGESwHePM`5G>6%OhLzHOzc2u^7m^dO>!JgN@CzoFYeo5|YLr+UOoXx;Z~Lr$G5JUuj_XG8>Ygo=#jI zEu zsZtgd6-j(X2hQ$2(iQHU9UMS`O=E6AX!ofgRc8+Ws^YuY24WOq#GS^_XrD@YJY08;!4NVj+`P?+5 zn|2bFN<~TaJ~ub}`L0vQ1YE0~Z|V7)B^)Xc{D1DHx@hTuFV`<01+-06H{s6TmDaG7_!2Ubc8O8Y3nIH753^Q6Mvn;KacQ=~p3KCCd zW@h!)oex1lL8UVuAW7$Pyn}4;SpWKLyRlKFiSK^>s>c{e%|iD2tN6Wve?@n7lL`!ss3oqT94dkEdcvKz+p1(G&wmXm5(wg zs3!!0DD0+pzH-%SB_pNz=IlzV)z%jr*^>Zv+th|eeOj6c&vvz$U4e!}w_U%H+r-Bb ziknpJH+-cj^e6r=y{E0ES}g{BW5g8lX)8_oo1+x+1KV~R*=@F)Ez4yqJt_i}MMMIx zgVTl8z8ruaE)!`S9U?rk)fX}@HW!GwIkj=WBU_bRv8+H^nm|~{lN}v^&8d;@QzT!? z_3f=~zSIwwYpg=2qZNPTj9{sJUhfy)_0BhdSIbe~w8+p9_8fBx(t0(^y7HHd&fuVs zrCO8G@edT-t6J9E7Z~18FFb(D%{e}^VV-b)lh^S=ZgBjYFg!TmdKM!|UdeDP@LTWj z(6ERw*46&x?*3%1x7ZhuuTLHxhm4J86*0tH~`r_bF48J~b1l;L*B#npRBq ziHiPKqJyl9dvlpE*>G8`O8<)0;*c*&Vtadr&F5B?P=DWC*XVq@q}_V5_@|KROV}r? z_(7T9;S?Q}$5?ODeU2b%vS-^pym6RHv>JEqt5^(G5Rn6~_PLyEV#PiuduYU)lvf&V zH;~2p&a514eIwwu>kx@@3OZVM)X&c^ChY%43`_kwJgTKyWN)@WH58Wj1$?<8EqZ|G z!@hSsL#>#|N}bm;$b8p0)#Q#O?;k5wK5&?GC-fsRR(c{e#==5gi=I-_aH+^AIXQ5Y4!5vBo2ySZIm; zFe9UC{*^`7na`8=-CILdA1UGhy7QUKg?h{nlkkMap7mgf!~e7ZDut~&jhH|WTyp^! z(zUS~oXj-`qiL|>7Gr#wF=f?cw}$o^<$u+p0mH}P;o}tN)we#;z4B<9c6Jp|Z9!Jq zc=(GAsBe9mmYSa3Z=u_E3sueDeg?2{aE@QsiBjYk7-$~#U!e>#Z$7{w6EtmH#)`%x z0V2-0>{Bl?3K>0F&FzH3iM zPOjG_(P1z+-F?;9-d0Ao^6Qt{V-}*miG{;n+Z@OzR()Cl;S0}#7CjeLeO(4%S7ySX_z6Z=<^(G-WxTLMFb00F;?;M07qt^nY2ao67tBao+5 zz^*gi8cz?(gG9*fdqQTfbeL-yDdfmcPL>mMMUS&(6S%8aBvD`h{xk;kK<*9R_iy$w z!4>aq2sRD|4m^Ol6Eb`l@TCMNsM(|z9OF@s;cF1xd9_#?uyU5^zS3{|zZ9V+vMbv> zj_JPuU^thT(pTrQ4h=M2-z;9ksH~>2zyYEpigpk?Jo){#7Z?BxT7pN6*XgF%Y;|t9 zfvlVyb``Var7I$M013bN4AB}l`o~C@_l5&6qZ_UkJ%@qWT*uq=t|pN=ij@GA5J&rN zp4?z37op8hAZo=WG(`nK9`xq+n#cCYrB^v$Qohs`xIVuqcm;R&`z{-ul7b9?>rb`W zB)NQY-s5Q@!z{FqAQ92leAk*DNuJ|ij_hV{2%p=XgeEzd7l%N#O;5*~O$jo7e}#I6 zA|mC}wrRBDTZLwC>_PdWb~rHEvOAwCu^UXFqJ)8vJ@-+9Lzo2f3oUXII=;+Rs@h!v zo+4e0fMkJ36u5DJ{;_4KlO;~IQ*4?)7Yq>R?=O#>nl){#{YEqC*CSDSSq=;}Jw3V1 zDJ&AU+Uv30h@9w>g0Z+b-j@*3JY4sOviPI82-SC@`(jZ`74d5tdzP5xA0_wNlz>BdLBo6xN|X=~5nG>klG;>zmI6bqmUj^f{bloXrKM@|=tLm5ki-3Z zw-3$7?y1M!ok0b4%wF8OQ(gS{fxIOlgsMI9Eq}KsuLIT7XQRAED7^x`YqAXz1jG8v z8Bjr$Rt zhkJin={Gw9(!$Ou)En14nh4o)gjYjs%LS1u!vhEa0wThK9WIzpC3%^&y@sB)6LW;< zI6_i6bE{Z1>n;W|i)`d}3G2pAzRcuJPe992tTGm*rvl&iJN&^;1_K`hsUe3lJbvBO z;J{iIV5!BiF}E1|BPJ%;d!dZF)r=-Z+S|3?1}VV~7Dvu*b&-kYUXD zFJ>ML|0Gqd@NzgmG^)~l@s_z6&db`G4KOrPt={Z?ufvmm*$nt}t~WjJ6w&WheG2Vc0BpHHSuStmNA zfW57336U@C>v(RUPyo}kugmWZz<4r?m&P;v!%~prWEBqpA--G3H5iV;fjgO4^r8S| zj3)S8*uTMU{luX-S+@g1Sc)Ftl8VDochv*8f6kn%~Z|teD;JkM~j61oB zii%1!OVo(n-8c}=vVZ!%CKxQ&4<>;Zd*J|T8k%Z6S#??d>u} zlI~(|KK`0Ahxo`%duw}B+XE`Rr8LYJLh>iUR6?1Z9YsWvX7jEfWa-(ix?zNtI8Zc5 zi^UKmk_J0H7j8e~f3)l4Wzc50D%q)?BqD`@2G*`da}Rok$N{0s) zZ2k2E95JaQmF_qLL^IW3-C%%MYjfvTcgfF?Q~4YXxwGRZNU$GzNWES4TimF&H!$i+ zuVsuz(1JSFD}$a1qBpM~wKUN?I~YxCKisWTcgQo{l8pASEVTk=%8ax}==ko)`}}ZVZFf+o-V%-6rpW_bz`)hik)p)mat2N-)lyyUuKgMO zIL^a(dwV)vK+5%vW<0%46BvG`F0a1c9NPGL!VMZ#%q^CK5m0+Hh4xdfTn~Gos78%} z*c?R~CKi@_DyQw)TDy5QITP`ZZUfJ&^Ij0jD^jM;2g#%{ZH^qzfx1b@%bw8QaDq>J z$5uv0-P^XHs4hA>%DQ*Cx~2x!CuOl#w-J}cqwAeBs&l@Q+kQv)z%6uP^!4@#5@K$5W%#B5q?wcbZ2OTH1GzR13%ST07i5JZ7O3U;yK`<$?lg z3%sP1)zgyG_(}Xk`&0%$)#Kt4tji0(iDc^XV6zk`KjGpqstxG2tQD1pMSldN96>FT zICY${Wpx?*o=WO?-UQ*|acl^c47J!TomBO&vk?7pGbLupTT%qS36jVvjr0npEO*Vs zDyBn7osvkEk&3;U9tMHPsyA*p)2EXc6Uo^8y6stHBh^K zf)Xr&2$U4j#}CMweq>%( z38Z1T$KNU2kpXIqrq?NXThxv!v7EY;j*QITO_*@5p-Ho;Vy1icYzjXV%Ziph)aNm}ya{urUHp)%UO*8HugogTa!aO(y7CM)Q z60Ov{;rMlPW=v&d_mrsBGsm+`-XR40(SCK)Ww0mB{3SgYBpL+5iV5cO?Cc+f!TC6a zKm5lw3=~zu1j)ZHE-*e`vr$CjrPhy`vikdH3|an2C$6?3w8soCftbBfW(M>Um?=M^ z19{W9BtNIR{>Wuc*Rz11MpDc84AsAstoYiupYXFom^fC->A-5^$Z(g=5)~+9=1ZlFD1~GM$ssn!@&CY7fovMrWTc{scBHNGybh>EMH(=gU3C^W}L7d zyn$0S2(n&n026KwhDuY7_AA*6jaopwzkm0GES@T@CV~C+!Cmdoa<$vjW$(l& zXn@eO$<$-4(29$H-Fzh-?MD$gOiC#4aX&0;wUXjBBMg`7{j5x8LtWj9epioHGp_wL zHSyQn(Ld+&SZRkNxerLVRjj<0r?>6{QqqG`(#uPU2wi%N*c5Wl9!GuSU`V>s>ii0l zD}bJ%VbxuFVC`QazcR%FHi2x+mpJ8t zSiU4q#>}rA$hTLu)}f`oO4$pSpI;q}1KIx$`*tsJ4qbv`fL8z5$&{j20*&aF#%INo zSGz$t4QxWZ+*A3Ng={!s|AR{*dK+;21?yLyQjbAjeEs7IZk#n)j>TACEeBPU%L1}P z^a^yERDYR8JSMr;gKsjK;!AR#YU-7+UZ84)zm@!Y`(^0;NA!KK`n70Hd8oC6s&r%S zpITW8o@p_+?oRmyH&K+I{~Q=Lcl37uzLD9`q0b8m8O1j=yXgG$(nzrT9H(87hkSro z#`ZcfI=z5KO1(%(ACFh=Ky{7==EmilOl0hHAbs848K+MCG7?46%O5#&RHrn&kJI2$ zITxMyX=&Yd0xZ8--OX3Dzlan$u3oQ49cCMCe9{!h#a7_3@{EYrwMR@yoWS%P^FH`& z()^YC*`jCsgBf~Y#f_rm!(Hc#&9KAlwA>*F#ZoZC?DLXM=CAAXvDa=sFG&4)V^_vT zB1_g}-)Yk^6aUyt^KB_~n~i{cS-C#6Aekz+{S6s#XTAAbU&P8G{A^ahb@kM}gE{;4 z`b!FKtJ(fj-u10xsb@s^bVKQrI<1>D!_#?m(C^sMqGBu$wGUhuEBK@Sh!0S018mNa z)Qgor>*z0LvYZxD)Te#rxwf~1hX;ZIv4gNI*fBH9@L-UG$D%bWzPx#1s2CXuu2NiX z8={1z{MyGkDcJZ&+tasTXuH(xe!G8U=1xhiUJH20$-d&X}E+r0@*VzWN!w60%GXh`|HcrU*csJaed?wLD`q5N^90sV`eBHH>u-d~# z&WzIN(;Xk@aXNKNC;?L}peQR`!t;&K`Hvf#c;ud`-c+A-Vm8ab+bK!8Lw0h*U8Vn# zV*g3Q^bS$LEjHtS1$b9Dn5h_(r;R#0*^aAxv5c5MZMl3H;s7h&{e&Zf3la6(&24N1 z92cq{c;ICJpt0)z6s47umyaLZW@l%gVP}Vhgw&$Wjymk-bE;7BaR>VQmiPz6A0}G5%6{CJwej<8|FM?pEJcKo-zy&9a zU}@9l-LVzMP<*w--;wN-h!m~{BTDGVsl^V?Iu6YYC9+GuY=e5HPy~QKj-1@#AbP;O zMa#@W;+C=S{ve4nS2+F3_fXOZy`IdMePU*4IwqkDV}))rZIG^2mHy6F=2b_WZCEZh z0!lDTsklD=TvtE4*1tTnT;DjBGnAo0c|h}1yzO@x?~o{~)s@Sq`%5s@8Ce*BmLHBq zziqSnEJ6Mi2S@SohRN9$q+T)1a6I51O?*py1+tTQQ&0f@mADq)IrKng{>bPAGPQHD zqo;b$71aI0OFv?mHs3E8x!%KuxDc4$tEj>0@KhxgWvUuWcT)}OD~m z2a9~S{D}|QP4jCg^5^^QCQYiRxm<*nKC5fZ(3FsEP8(adNY*scei{yk0+wqLL$k!Y zIy6Y(MQZ?AZfUfsQenRcHv3Km#9G+^v$-Fo1jEMcE$mI`jINm)d`wK-#$;(%xrrAylG1Rr#Gz;b2XN5{|Wk(1nH`|I;s z(j2h9<6!L==AI7uq{-M{@ib?pg6PT*k!JH#PkHtAuVrx<{59p()#X;TO*zJ?CcBpf zzT3qR9Rztb^0@garyjf52R9}xfc)@H1%W&Rw9h-j+}b7cxc!di6t?2$rDmw-qfl%O zTY`gaG=fLgni%iT#bw#JcHVYEa@Bs4WHtmVCQ4Rk66F#P?blnMOV9x9;_IF!?SV(K z!l{Lbm(4#=VbvOLaY1kItjI=ovNO=gI@q zmVwuQJMb3DX{XRL?VIG^anlybKHBKMWtjwlrisxE_EyS9si*PlE%b8B!OrBAO!F>S zUl~{*q#vBQQWaLBX>ALU?SWSrpTaNEX$oFOHf5Y^dIEGB|Kc@$(;vC>=+?73_@?7^ zJ(GfpfpGnMoxM=ta#C9@deB0pjF5K=4Vro5>*=gXow@T|^X>V(KxO!AGP}87u_~dx zcD~cou7iN?4Y=5ahMEBiip21mwvB%k>Wm&cb>(2qy!msz2LT^4LgX<5r}F?9hvvN6 z6Av{-s+7mD-hk8F(u9$u?ecH8nF5*iPN$w1n=R#CJwXWlw~uM2tY{zxKBg8hFb07< zK2L(vomxRjj|CNPs^wzI7wTBI&4%>_ad+n$lP;6mw44jM*TnL>OengB@6H@EJ2qc< zB@49By*>alB^Q;9-Xk6}G*Hd3s0Nzq{EJow5t~tGNr9*|QBn0U51Li`@bbg~Lzjuz zTXp7ET26A);CciGr|Q?+iTfGEJI)$LASMWX z9sH;qn6Lx&d>A6W_YqiImdH@YcDF_%X3f>eA6UI~R`w8gbx6M7dkI;v{>j$0Tz4AK zAZ-C&P}#yoC)JN-^pS%cO6|onC|p-L(5NY?zX2CQj1~w%1lkN_WH0STR^fm~=U%n9 z$mBJ1%`7(w-g+Wc8+6BrxRRvEA}+f!@F?VO3_%52CAgET&rt$MNrFr&Ns|+(G_YnU z{gma-lmmXWRSN6tlO-CO<^UG8vJyH~U%OP{?;ugIq-HYViY!{9xa59a&+>0$gY-W# zy?Lm%W#%6$o@@b2=Kc9027uaB=`Cf-k*|(8tS)Lk{Fa4wVzzkZ{PSm2AP&T>VE*Jg zlhKGnHI$ETg}JfuWnnhxiv%+de^0CII;D>8cG(vIdY9kj5kL7NsD9ni5a0mn6gz@x zHfKGgj?oXnmG1}l*Fk$ew`+EGzz2^^tEqo6Oe$Xs3nQD(gYD9BcCy#kq1nF1()+JM z9;k8W5JjHFh|o~XQn3L4_YT`u{wl_v*L=u7|_aZdH6+h?icX4_+N#euJ>nZDnq3STR*W=(aYfI33R+0MuJQ7FEp6<9_01j5}Lc|IVqs zYLTn?cWu^`rBVY~GG|i8a~bgQ{vv=It(26sS;qJWEdmhCfw&DLzCnj)#a+%IGUS$J zV4v)pTp63j1PTb*5B!94z79h_zyJ(4`Qq0_wdh^hKVT`zf93dULkVUo^>abzB?(KA zL`#G^BNw|MnoDG{{N{JIUiwoGrk`PaKy5Yyg|G0AtNwlgK^VvYh0$e#Q-}0`oBIR=MZ+aVDomxJx z*jBS+Ce8LeNIJjwDD6Ig-$&g+ z0;uHc7sR9ues+(}YRE^TT;$(pNDrE$_vI^91XscX_)k>XfB*i_DCMw;2ioog-J9)M zm~tBH6QKpA5U>CxYT2V@$cEv;E?gMSvh-=3#rrO7KYmT6Vq9wC5j|fD7LBm9b0+8 zip7L}#`BU(kxb1*^!Mo(2tu8gq9pl6el$`vpCcs!qEgF&zGb^)4vgozJNRVkNMR$<%skdaO)}oR-M)uzy?A+R{^26@(WWcCWZ!KM z`NtQ`;?a^>Q`YkAr@f{Ni*7Bk(L@2>b`2oSK~{*L>yiwHbZvaJiPRim4n>P@n|2 zM8LWzS*4xf(J;%$2BZeN0fmwGA9^jz2*f=DrgumqDY-Bpz+A)S``CrDcXV_gYBxGG zrNsQVI$Gaiy$sXPew=pQ`MsdNmhf-JE#<6$blsl-1LuBle{#|3n1ftq)q82jEAz?9g??1pC6@NbMxJ!w_OMGgKek)$l6qDPiy}YHA^TQWo zGBcht^N%yjJeZdPDC?#(sz`t`7b71hj>r2=`HxAd?CTR>2)8mMXn<3y&9!Ti6C|_99d$ z)JRe!|2B93>Y~jSx6ci^E%2Sr4EhKBOAv>b7hYc9m#cq)hO=}}PHM}4C@s5a?HHhH zp0{|?LZ+m{lm@e|i(N$m_5;^%HopCz763}`-J(N8Z2qTcV&(i+_dk;pBFclY$kde3 z5WFKp1W~r`y6yp3!#^ouny7)I3;Yv@-_6%Yak|M2=4Zat2Yd}?N4hjk>7`A7a0t$s zQtoC2DAD(^5K6sMJ~C_USLNSMU5=P#oGE+#Km+oWARmOKKdXS*O>yfo=74(jVZ31J z1Bv{HTN~fQWM7Y>n`1Yl(H~g>;nXF|lr2t~E+7~PIuq)$BPoBOQq3bnf96T(HYigQ z>`GTsoxKx0cye6bY{$fe-h|&u zDgmts`SnKYTU0`2hcRtdu$l!_vfmO&kTi|uzJVJB>p#G{eVsZ|XAWTtB>Xu)AzfzyF+$sg4nl6q)TMPUk1qqQLZum9AZYaWiYFx2r)^0C9WS1Py znOR58Buy2g5Q=H4l^FGwh>*7*& zI^S?2;2D3{?dCyOZeBiLOe=xpNabKY(Dx`*gBRbKmEC0kOIZT1g@j}*ep-DqFf}mM zc_c~ z;dP3h*m|C^V|u$gCVunW(9Z{-W5#RyqJ3zg|0?UVb+4HO@E6jjFWt17xG(NuhPpM!jO`F$q=4eW1+&@K??dZV9z+2#ZaZhCRI4&Iw ztxQe$RpRM9A~3QYXF>P}hDHLc%OG?C450%DA928?x zPbV^$znIP?jwN5qK{Ax!4++|*r_g{mc1HDC^;G^cAiWW;ldF3TCK3$IuUB1@-M$?f z%WRkZ0U`!$h{|R2XAIwoE_g;beaTkxYPG1H;V}V4_4}Jbqr)#m6YrsjxU$DTl4Hdu zdQPz5O7uz%uE79-Z{(U~7wld@*(HYu%TY=#FR=F1&6^ED21ev^fQVQ!ml3TfuFft$ zSReuUSRGQ3=5K1~NZn4^FPA?^-zOe>Q+Yp10JzAnI&KzW9t_%KG0^aC z!^l~Cb@66O!_1DPlV%{22L!(hXt!epg6lV{)U#VGo3?LK3aAr5q7s4fap#lF^zaH2 zqFDiJbIfQ!#RHh??1*!5<~dECU_Ot|8n{B@_ey7YQ#^}uzFSdtmfs#dX0b~~KDP4n zjRJk7F3kq!yX-im#8%`(SDW%TK(;t((Qw_NQ5WFj5+*2*tW$aoJLUrmY*Dl6mb~%d zH+D1*`#@7*?rZ_&OD78mWEe)faZ5WfG?1Vb zBao#tSNx`d#|*3XXOBwxD>nvEkQABBHMD>P5GX0-o?RJj`Fo(0^XKpW^{qk#r2xKJyDW>rDTc(6pYOT8uo|68|1}x@l}#&6LW%zqTX? zkUkk$^%zt=3+up_k)qIiqz3dNYRLetdKD!IwfRG+-~B;-tKC%`rZV+#_u&1*H(BPu zx`R7EZhJEG>YbBj$nj|kcm)RVD#a$XpoU-APXM#u@?`r{~dW<#1vgP=<5`3+S5@pQa^)i3W9V zV|{Svw%zV%N+VbfS^iY#6uS!M-|+@l_coFrX-q&F%XQL+h37u%*qrH+HNH?#%o6{S zDD`I$lnj8H@6b;x(t)v1o@F2)2G>^+iI@j59s;GQ`}MBaOOP@4$r)a{{Fa1%ainKO z6d|5@Pgi&qepHdDn+6N`$Pq8%PC%{2g#`#jN;G7%M<^GVw^L3IF8x7MS{3M@td8?k zQmoES@0$}+As5w|uIc4kC|eA`P{u>A>}R7;XL0x&*+1x!47DbsvR__B(i}t@%k60( z7yGC5gA7ds4dk8#IAe9M(U8!(@RXajH`>}-QSmL70raMqub|f}n|j}btu=n(0vKmI zM|vmT*eu)}VZ{vm&epeS8>*PP@cQ-chonb~6PLGK5zXt>r%T2p?%e%Wrvl1cM zJC{a)AW39g0C?bNc_Nb{72|WnpzI6hiz<( z1pHwd?#{0b6wT0jyyj~@kmU6x^vIr!GI}%93GD5S3UH|LF#D736k&xoNv8xib=Dm6m|-rczPVM8UBs)S16w$ zLu@c3w}w)*?gF%zv!J#}E68WM$gfg~KEU62B$0L)YP$V7aa;_w8r&<}t z?KD3q%pMGg7=k>fpOv{(t`1$nH*}tSjz^vPH7)D=5(-xnX6c6nJWbp&7iJ@nZi``P zU^RLd8Coxpy`}Fy5cl9ul7l~;SGp|Weyc1uex{0a@P>)UrI-cyIeB94zjFzY&Z+O+Uyt5B)ee09PHR0{rft2Fwx))T?5M-901xP8H;us5 z^lJAk6{;65k8_^1Ozo;Xxw~R>dfcJ^x%>VJ%GS2gT1B-1&a*r#KN8|=M*aOXSyHGPtcxVoD*#dJ)K)`XSL40y)xQXr5lGQsFHa-CAC-= zoj(YNYUp*uquDJf9k)L3g~k+uyEKYKsXQ_RK_~*;$`~S(fCnw>&ywhG%co;~U3jiC z{ZI<##l0RZe3uZCv`2s1X3z#~6-iKeJ$Zgytl$x_JpCs^CDYEy5Y`a#P@&*jG=Iw; z8maj%F%T_otg zlOlnC(8gzZ5M6b4semA5=nzdI#~^X8-lR2eKtAZ+ePnA|1<@O~UwhQBEkpHKhxz!k z8{cai5AAG~dMrals_<;hu5$Brbk+M8;<`PB&&w1RR{TaOXR`zS0tg@A? z`*N%BPk1LL?>4_9WXqA2A)92L+S90%`^(XFYBIHIGUdigv+LWYJhpcFJsK%Ai7oXz zV>ZhTA8Pt_%m0d?+u2u>buOnuV)JV5(0>pvS$-EN?|Ek<0pmqnsVkBgRM%*?XT}Pb z&)kimvYG{dK>%Hy-HdZ- z#u_~2`l|WgQm9Gp+<0yp<0z6{WcH@0L*(`18^X71z681RPrcIQxD*7#QSs;Z37u{F zlw)*!GH(bY2AMlnlbWkq4@bMGa7gzpkNyEF?lGk7vciAgSaC7eEtkYeZa^o2^NnX7 znigJ~7JPu#bhfqbE>iHHgU#Hy8|)8}Q-R(qClxb$gGrUBrl#%wxb8lT?8)<+Yc`>` zxrg(6p*E+AzfLN9yM-BUvJA3Nd>ywV-6_%eFLX;WLc!2U&DPa3zbKE#`Y-cw6r_?7U-*yH!s zKPlEy5fJNUd%s>@-=(g{8JIwi(SfNoyUEq7acd*z?sl)bg5n?>-}1`uu*ax8>edB< zci`l&tvop$ZEj`!Y#s;>htV<0x^F4&p@mko5iPZ~j<&s)z{ScXMArJ+2V^I6r~So} z+>&b1@z3A?gpojyvU8W%War70AtA$)Sqp*6YYI(Nug@tY0X#`B*Xc+&7KtXI!!76W zyBOmRo1e0H$I2d^WF~2h_fCVwrer%uA1TWcwBn%uPsT2^*xkz40rdVS>WtQ1=@foo z6OWgoRxbC(W3^33a;7jY)+3*;Nl9b3?2<>a{3|iXP)M&{EL^E(vnH2LedCV%c})FC ztvd{Q%h=jdt^l%^AeH#9hOEfb5_46HyXGfNbItHF(}V{2xv;yJD@ybtdR5Ytiur{Q zq-HYtn*4B)DkiiEnISe+{P~%s+B&E!vxrK1R(L6U#({m$igL~j-@HZ@dJk6CMwVQU z%Z`@+Nlt<4_4dQ9t>3o+_8{fN#iU3jEi8mA*ox9Oeai_{ zDjgk1OT(QbB8swVbeH;q{^2iG5qY?nm4$`rBo`&O$}(uyn3NJ887U4fOPiDP(($_L z=)&urLCIQ}o!P&CUy%S!V}yc*5vbmPce#SO)I0=5mRy`$o1se9)X3uK#AWpaJw878V~AW95z3;33GE|OJguhW zFcqaU@Kvq1bU-rJT@nwkj^m`}pJfA@L078WslVuJ1icqtthKrASBK@cuASVL-J^3G#e*)ntEO^r3NDPifw`vU_e#p&T%89i*N zdgE-!$zsxdVoI1|+Js;3jEHc}LzWjeNw}j1YDc@X?<0lMP7S8~&YpixyJcN}7Gvjq z-U@w4(P4G#k{iRY-jk`1{v2)s3MY(2Yux$_W1 zPPn`0d)Ljn5fo@$aF2)cm7S>HSLOH3hA%bL4%Ny5MEHlSNjWymcm_r z8kY9#L=4*R&+TdiptOiS(t8q4O(re4&pInz+1-!0K5ZLhKu@^+oG9IUyA&ig!{AbJLMr1_@l5O{w_BVRD2Ees`U~-(V-0@HR;(YnS|m z=Tw0Sx01Pc@5RtXhOG!j*ZxwZP*K3Et7^;0QdB)>4Nv`Nzegp~Z1x2~zUwF07VenE zo*!SFCef+h1vEKa_KP!O+pJ5HxM`kWul^HFdp~++SYk-6^ZB=Re1y5?>||DyBtzxt zmBH=cGiaQwQk170u0^1y!9+)k3AyDPqPuw3pjIwgI zeKlEL-nu6O_{9bzFB#NX@2y6rKGgdCHao?pQ+v1-kJgfKs&CHbbpQQRGuCGGYOdwz z%yhL&V2Iq(bA~(hFBNk0l$cBV#M2{^A&z=h>)#7?_>w-ou-;tW>NI;ao|hlqe=I9Z z&gS2;^02!cHEGgj^@K8}agF$Qq_lMnpWdsboedsjGNZ4Z4cPhK0}e2;+=%(G*+cjU z?AvxyS2?+7^JZ`$6sbNl=1l!OS`1AM7N+!fxgc%+YGNuT)^a15~~+TRN-EIUZGXXT6<}$*I9LL2vX+*hQ1nJ&^V=MFN^vmYn=2gFe{c?Q5b>rEjlE<&VK*4EFW2oJGTWb0|i{_EH@8RtOtl@a@ao(xW zL-4AZ;hC((vlij&-Td5v^K{nq90_`s!dj!zO(ov2i`yUk(|aLP!%nqatI7)weAbhK zco)O-FN?_J5F~YeYvY_P4{j0S4xQ;q3H*h{j&g`7C>eyV+=pk$6RDu~bgk>Za{&Qx z@cOMD@NxaH1C6oM^!2nnJ-Lgi7OM@Q06E$5zM7!8K(WTYVdR39YfjYrYLsAur?c9T z^d_srPI)7O4sHuvbo{4*dr6SVQHDXIn8h<@-XQdHualH=!U4XcaT&Ug$97nTQ6=&E zZvr@ylt>v3$Cp!tF=EhwSyQg#IZTt3H5!Lrh1#MJoeE;nk4?R+ji$!G9TnsB--Zge zd8-tDY8RqS$i^5H@M^1O5tu)0eRyc^`0U9$#B0g3JS?Khj3L03w5N%A(zR7*hc<9O zB<85CtlpQ}V^xUo9e&<5i6GsKiJ=@@z}J8>Tv-+q_?q_kM+)nQ;XBzRLkSPdB+Ww{ zBQ7}5ez{UTLv_+=t9RIi7PQU5s?f;hbwc-9zTG%TH9Ua?P(2!ma$s(Lv!*78&kh7=BdZx{9~dJqB9gecI22<;oX~jm;83z-{@MpaR&Yk_kM)@X1Q@W zWFR3aZe%r9?GZ3XEI7#ZJgJ!&_w94O-Tt)GaZxuP#QSY_?+@AP>toCjfBuCo3Y}Qu zXXQ@Hy}2IBr?3FKc$ORfx9)PMhs&s+5U-x23p;_g3aUw+)g-gEK~udvc~uh z642<_X+L#sxk0bCD1D_zp5nyzuqLWO+E0ndqo7b6kIN>6-5s~*B^wSnexE*%{tXM$ zbSB!7X}h6aBC? zG1@s6acQdaqo^H9_lC+K?&)%h&Jr)-tTBN^2Q2NIQxg3kgiDk@SO2VT@uzC|Rb@zm z2qgSOAE4r+{62RBsz>LJjQ!*4=t=HY@xlPW@eUBxZnk{(i zvN90LR@N9TpY?D^QwdLaXff{sCztmTX^0qzx@j+F;MAzw&{d#l!- zZRpW0O`=!dbeUu>uIkc~iknc92jjfBsHmvCg^14QjSfZ)#Dy}gua<@9VW8mgJR+)- z5F=VC-8-==jNc?0stwwknLPmAlHk7QP%QklXBUZ?H3y0ieIHeYSqnJ zrBkr8I1y2<)`Tp3SN4c(Lnxh{0tuKDX8M1u%*N@kJh6ymM|7i)4sU^49$rG73_gVh zW)JrK{O!O{ish5$eWnfhb^<)KI?wI==I7jd)ia1*AK6Zy)6wIh@mZD2#9umc2Wr=* z%;iuhK%kKbzEHKa$mT*wO!SAU(gb(c%*k|2ON*gGKzJ=${5cXHVdFP0~dTjJ<^JR~D)3{Z>ffskspC)H2kHB>Jk& z55+-UPVb&Kv<$%LRN3*Nj*)`}I!g)+U}k0}S_Kc%qc;5l3Zt1XJUdls6zmaJdF-x| z?m|O9eh~BF?e_lfJkr_jb}l#gb#|`K!TV>YhQ7`fplLzpyZp8sJnV}B;vBCvxE<0J zHXF_>xVi)7)AYKI{3<6AHa~`}RFX+CN7GVpu(LYg(nXA*Wwf^^;+yp12T}34@#?=O z_O}Pri(5^*$uGJtj3zA!UDfLVxxCF=0qc6N4D?5UutC4i-LiB+EC)FqP-@-YUdi9= zs$28z_RB4E5H%ba6*J)x?9kilq=h?QeehalV{N)f5RW98*Q zj=HE)kKFEQ@6Mq?`jmX@V9H&Ehm2x%fQB%lb&uc_628~UQ zr()q;=)m&w4bL;(w8XlF>c^x}gKop8&mM_q#=FxHfkVcVSwaqtJwnc$!btYsk7T{u zjMH2hOk!lG-0Vg%ef@(# zNFF_0O+(|)=LWqHugtlBgRKNbc(FDsUYGEb`_}H3nG(Npj=i7294dwQr&@Z)@A?}q z5UC7g@fYldJ~KiWBzAt3-bWsi4Q#}Vly9op4~maqdE$1saTvI1`rjdbz}Z`vtv^Xg z!32IE3NtFRjs@2{!vmHayyAzJ}$<9Y-wrbd;)2qofZd=uz= z8c?)@0R=C@0x&G++93)@vDPM|p>Kig;nJG49f=Rg^s3lle8+m5#{xbs~iJlh;j0q^0M z*{PsKIPHucZT(MB00sv6Ttazj((cIeNd)d@=zV>u0Sq8ltgg7m{Q7f(l{KwPGSpaD zblmp?>)_#&XyC*i{_;^{h<|AesPb*N)kv@!5?h3s$pLGzfGf8jf!_yRjA~Ib+&|`I z$jd#YU5~f`BjmC-=yt_hweZgdQ_{xED*CTBqG}Z;mT!SaX^aMtYgkzy;QaR@o(tNP zk1ykiM@iYqPck*vQV9M%DO`-65Jk{{JHh_za{kP}C&x_0{k9^(%5IMynX*4?ZMqPE zi$zQ4$9(41tBH5{hqurZL;s1$Xoii4%hJ^LF}EF>PqP^%HqWTt88kL$JUOY%V1VT! z>>@e0COhDn&3v*-pOvi7$I)R1mO^BRWeKDY--H`;h;sZEBouK747s^Tb6<}oV(#wY z0{ip5)tbZJ;IY&7!Kt$=bI-ZW?t@h2BnWeqoqj}uv>FwZs8F#PWCK`qRK@#Qv!NYW zjnXcNB{j6DyptTb_J1hGDil;j2bkWNVUW-ON*eINsLqpycnheColOL-7>EW&vOk3; zu%H!ckMjzu%Hkn_xdh`OUshv{qFHlp&-Q;$rkP(7PtsB_{jQswb^J zsnV>zU+HE`6ktTEpX$L?VhGKcjFUnHYULm8^u1$g^8e}x=S&jL?S1hajt$a4>~F$ic#BPnB%?=xY7eu%9`yAlBb?+T_; zghWITxw%SU!k~}686$N593_<|5ExowaUN{a-#@VFc|3V1Y4kBD^X*M;FfojhK@}*S zrv2ShR*9YTy2cWxUSWHo!5UzOTZ|Oh)1{J{RHa@D2!oR^AyLrsDK6M687UCJ18X_< zVY4{|e&y&gPcMVuur~Ly5FH)af$#B&lA}?y;MYhO8!-@*vs22sLd>gUD?XyrP0p>D z8*u$hQZFMj1mr4Ng3n3}(*MjB2eiB7hXcTVo%0GWAYr-Cm|yMyA`mNaHU$4-24sdQUK<*}Ti~LHIE|9?^c26{3A>kiCC>&<@$Vs2qD% ztcGj%&5-8&2Ypt$x~>u}WMCZxgy<1j=G{f!hOICOJg@tXr#a|y8}@;c6fLZ}K)IsD zZrS<)C2|M>5mixMkk4lFKN1jYx)$C0mzaath=cr%-&rAdWF*T7dWDpmkLrf;Rv zV)|MTWi=4m)Q3a{y^XR(E2E&K=QIvq!8V$(rQ1kCGhR%8TKb9QC^qhifL>xn)MN>j`D``PSe- zIrB{jT!^UQU}wvzMHV{SBgX{ZKRyKs^6&k35v0?*AKP!VgQyB!7O`2k_oOvrQF@#f zmrJ{gBH=}&CQ)q84%mDU2zBv!G$a0ylkyq#dDG)@M`CzIQ)E=WpXWLNr@?F4Y`JQ( zEvM@P4m?C1HO42}mzd0ovU5k-Vk*w_wyn1yYY;i>cCgVs9#mY}YSJVM=!j$fNShkq zI5#o3w)V5r#73A8bt4Y1=JTmgniFer;HinSD#i5pwrr6#!jB89R-r5fwlJBf(MgQ` zefZ|n&hu^i{X-*(ypKmmm_NkHAt3_p{zhe2&u@we!3O4zeGx5(nJt|sdG*OMqWl2k z1c!~D98#n7nZ2}>_K7`2Rj56|ljFNY3G)Z|Hs{By?E>w-IYMQ6^n!97nF4g(pEYiHWe> z9xOplJy+IfS{Ej7bZdaaR<(eY*YuAb{ZTl;f@U}mDzT#6>@e0dK_kTGuAhtOM1DP_zkO-xw?+-2piheI|GuDJ4<462ww#=4!HTlv z#XsZvKk-h5JVm)GNe+*Uy`R?D87JU?f|tr>f41SaL)gh*qmn(DPZN)wh&YG{2;xu7 zAhen*%oi;Y`iXp2ba0b#=B;k^<R;fIO;oKh(%(QAGu*+Xj zN_)Pct4W>QeRsq`96QojsP}Mtn~hkkp)TFFht5E)e!f53vdTzbZP>J*B2mG2_sUTq z9fT{ASD&v!o>+EzDsQXRxG)^)eo15JP*p1xJP_1Tk*=)OavIe0o_jQBM+Z3W#kPTv zcA1>M5-He}WoPe)V2gbs{|LIa9gmrICS%QyN36{C-Ttavxg|IUgn$3dRkfHxDx*0$ zR23qq;#rLTdVF|F44MqUjAas&Dbi{azT*NL7JUAH43FuNs4-94D0tXBE^gF*W zjSTYe^193J)QR_V2OAB{ppyJ#o1L}})5`^ij@uqtdio;1mS}e0_gLA-nNW6!t;`zg zF7&TK*3LPkA89qJ+lFdXYqcs1lm6OQK5j~o932i)xQl8-*Xu7#lMF7FzDXNh^B3lS zH%v_e(GLBENdj7$*^qWT76@4Wbg}!!^EHQ|&qaW+OM{g>A^PM$q=q+ig=?c{*Jn&R z{H(Y2dr53&y}=q)-}X;?#{%C3C<$zRz83Wb>9= z-;ThmWh3L=@_34t6VU}69j?m2m zmT6<3dUe=SO$O`Si!XQfUrTUs$lbrYdyVdY#QSY1^+J60bBR7I33)sS58Z?YW)IB6zw^>L@u$$ zLQ=nM;nWj!C{%aG#3=G;_d$v27$h)J<}cc|0~?bkT0AHG<2UlFiO{s< zsYk?~g7k@3^9ltk3h&M(bD`Q>g7%WoL|=?UgF_Ht z`bWdUzKbZ2_S+bqW-qx^_}zR`WV4BVOUp_gfD62cmE>E>yy;iK=|05cpS&zGWalop z83;Oe2eDu9s$H^02ET}_8>_~MKU=~@^C=N~X6RmBGA6PVvGr_JoLRipGl$R!Sb&!D z7?Athvf<%&o~;Nfi|xCWjIG%Tw_@=x9BCMtWPz+BlP@Lc9{^Hy8&hj!lt5|Dsh7p^ z*I<&8CCRec70!GMki6VdQ$1jcHnz9M%D(0l8QIu z>B6P#qZAe@{>Vh9C{X?mg9d1^CUOv|czTgrK$?Avw?{=&`+%r#wCvn8~l8QKT6^lzt__ZIQBleMS$;TupdXc?!H91+RArwWvjBK2625$`ZL+09H5I-60-&l=11|6W?38%Z7NbM zfcZb;h>>FC@v{pdXQyTgc^?5`dewoT?f+_n@P*6hYf6Qw+pWptS}AOnkFU_#lu zvzm1DwbLnklq}69?(R51!%#t%XbBojx|@;$CF^YGBTxSHEFwRi)%qqh6{@1!A*x$m zBA%s8PwzC&&GV0B>=o`7rt~S_kPuN(ak){}Gre7Ps@e@gphz<^fx!A^gQw1)`_`g$ z4Zg}k>ef~UZRHAbxvC)cMJX#0nVFD!jkVX53k5D7=YJH{IOr7Nvm2466L|dMKyTBi z>cfDqnrxmMP1gA#!=Py#T5bq@|0*&>(5O*$if=WVeZKaAvV7&~NS03GTo)SILyvXf zf*e^JR0yB(_1_l+)a+h*>UykY5}&l1&EewP)tZI6pL%Jjf1*gd0I|Et%sJVHw07CJ z`>{R`W~}4{JHB%hYThr2LHQ^|B9P7>a~F>McN_zzYyL7A@aSmAh5OK;5I9^Lx4I>( zeVcUgxzN~3&OZ`OANoFwmB#HrxKu}oGv^Dr7#uQ*iCv1C z^8NCw9-*+vs3-eXH1BEV%O<@1Bt(H+doIYeBrS9siPxpHVOaqR|P7> z*G;h;JO$*kl2^PRnh{_W|vFzTE9Oi7%) zo$PdlRVHhkyz6(*UJ#58B!;)5O%?CE19#H$in?!SK7=SVPaQPUV_0abBW`9q)5$#% zC?u2ph4_G$Rvb8UA1u=)VckV1I+VNA4MH+cnTAhm}LFQt` z(}~AvlJMErJG)dR1i<+p1hJsurA**^aa_3G0x8fWvOm;xJNF#*>t{(E*BZAQh%Qi> zrDnC4C3F7a?%l2|j&;`(B(iWcq@{lV=NMe3FN)^rKIaAsAT}ucK-zNi+ynHU4@&Tt zNl&-kgz_k_xLjWj=y3-(64G=f=n%QokPWI*dA7g#oCMrYW2Zm0b-OM~iQe%joKH8V zzeoIY$}5*B#Fmy$L8_1b5njVSGz__}?+rN|9oa>U(`_`cUf98nF-~mur_%6vQPjr& z2CGKirLsK5uhzM>0mG!0xU(em@gN5VbQxZV{Z0{bC<%N(L^W*jC&KUN+kv7v!g&sCyPUog8II({2_^gjyIw8dXrq>WAw#`sxJu}n3EWF40UvbQf=i@Sv> z5f%4e1Sd9G0$Le931#cr$Wrv2T1ir&UqL4fI(KK%Ap_LQ+8>>GniTGHb$Hef#iy^% zhp7TE#veoQugDZje_M}vu9-fEC=6)EB1|1 zSZxy!6BCEpSBPRB2@HCAxWLwq zEk4go%0zOK^NXFVyH0;>Zg#R52EOIIGvKIX@di(`Os&aGQbxPYG`MCj zYVqfu^R23aKBpqrA81qmZx@MGV_Hw~ljiTfXN(9FTyTnH5P=FsWwQP{UT-MC$4__< z!&@fHWtmNvu^*7iZ;wsNrWWeavq{rcpFKj_4fgB(1*s`G+03@zBFE_=)+aWMXC13V zs3vRFE{{9Jhm=p!i{FUH%X!7ciDE>IksSWHnYi-_wA&Ptts*WD_j~W-x-xe)l7Ufp zrna^xU~lunI|R-s0s73#^<$eGQ>KnTw|azb2yWmU?8LJ;3j*lglb(|ePXh`a4!S>k z)~>GSee|2y9_x;wW`?cpns#4Fd*NtPaooYvtRcHK5sWoWt-Nv4J3kQV-3CarXr5^4 zBy-gyEwJCuu^dkLl2yd{Td)BX#mieu4zAVWdE+vE*l?Z{vlN|Aa(3lp4$d}Jw3K-& zejPu1><1D1LW-bimbHzcw9hpbvZiYq^Wp=1=M{T;cgYny?lBs6+M2HQkBgVsA%t_d z_>;8xW6bV)G&@hhbl5RZen5|@x*7ZznR~Hg`pFs{r~YSEY;R5|9^C{JKW4W2Jvx5I z!jFD>JCp6ix83H7ab8dQ^_Z!P2vG8)%vV4_f0J6nLt|ap3;?%RV4x-Vm@EP&R~u|Z zLUpG9CdtSNR~vBpKKdY|N|(tIJq`sG{*?h(#<`nwp3Bs6Oc1me{)oaA^YC&I&JvKF z9do}WI(EF=rmLr=RFtPsuQ9;|zWP9|>k$mY1Uul$lW#+OT|hd}X8#!=_fKcDaTS-B*hNav^+tHCdv~)}^brv4}RiB=KoTu|%@8&B)qR6?kut@6Y0%@7k}X zh7GLQ0I3WZC=V|sry5HXd21zMw~L#?Wc+z~(YfAXKIguii84OD_$+gi^&_b1DlRVh^Z_0su+ep6r|2@^MLT!FQhA${H$pf!Z0+^yag0w|U{qKXcsszr zkM@OP1X=S41ci-!x@?3C^idZ{*078Ix_yNxJv;XdvtOGO7zGB=;P#?TL|s!GHAf}-WduR%uJpmsse;d=7`1_VFQsV z^l!l>;o9Us2d^c_-p7~mkWi!DjXyf;+}~_FQiuF*$v>0#PE^g*Wd)Bo5TC}t{pOO< zKEdst0+o{K3L5{Rt{mjsk(V2${3t+NFku)tvuw0yg*9b^JBT6K-2zl0D~n?=VHm~t z85j5td3pnW+&_+;fachN;*^i!S%;a2uI=XmzhDF3bp=HJOOcr$;xNtT1N0)SaLM}j zBI*KcZ4ErLO(5$r947`#rUjq^0|I#d`GRyG#o-ZCDPM_V^$8Re@h$ z$8^Yn-x8hY4N*3CNblc;47f*@9D#nrN<@{F1_a1J(P zX;5U}T~LN12hgHTRN#BKHdJB*kanM_SHLBz@#mhr4!V@oh&?ev`|=z9~KQAeG zWYUqN`8S~rXoj5LbQ@hosu0jy{P%7_7dHH(<)UdyFj3Zyr3g$Qf^<-2RUG|z5dxsK zVr%u0fxgWNlLEV4(Ow0%kzqE@50%DTxbH0a8_mArv zQ(ztt7%|X1?QwG>Vi(peUNT3eiNJ)TNt1G|zCx|f+r{|DM3lYRv@xIKmvKVrJT)aG zP;2@3)}Lu6eduy+<*!U1!5J4g%j33Z@@6Or{IUc+)vTKwzhxo=YkwDZfZ^3NzBDBi z3sK|G0f#JbmU1F7Eu7p`XnCvyWpjN#+&Q>JA$kQ6f!@gy`Lk(p2GHJqjJzy_b&ty+ zw4AI)A0J5&nJ-K^C%d=fdYYJ&;Cpt`HX8QfSN&~~f*XuD`3Z?4>h*q( zj(cBWNns;#hxB5lEJyV<0x}RbL|>*RUXoZ@RcfXV&|dgvy8DWlx3uen zy?k*8uc@3}-c}!K>u9ch8RZ)fWW_2NGBUn*f^X(R?jOo4qPJzmVMuJcuH3U(?Poys z*Ka8-{PYB2ip;JZyQ6dE9A%})W1*%13$1CC+6*pqMXLLL*8A=14#;s)asdCplahMf zs9_nn7%BShkup-URwG6gWLcFJDfnV~IqO+@UrS2)ci~iwk`%5h@P%C9eYZn#x2>t5 zN=_5iV+C*P5mX=__pm4wH@4P}AdrmIP@}kT<;ncXVE4j8tS-u#WZ-`3ueg%~q^htX z0mWk9ejHSA_|A><{e)LcDIyUqRjLLdERzfXH`*h!!=|}vRjf~QN4?n!btS5!!PFz7 z=cB!3da{qAB6ApnG2di*3Fzl>bcMm2eb$>vw~n9nP~rDqQlK?m>F()!#U;0_?sIo5 zxEZ5F2Ll_|x|;Gk^}Y|uo3cgE1KZtPsNdts5&^tfF{XAB^;`q-AGG{j z5Z_ZzGZR0!MwCmaIZ=OWI85W|XvK+XL-kn4QX<5>gruP$^j6L6h|jL&P}hSE^^%F^B9&=*Jq!+Fl< z<@Nm7Z9$ zG-io<73b8^XE&QCWx$e=XRjgBS8bAj0r!?W4i*+o2WdfuZoY02147b!B~$zp%pd*k z{Zgue<8!ZUY{Z*H3s{Q~5^ZW{c<@~L{bX|r&H99kfv z6MEG%6uSG_TlN}cjo5G2LCM1(5@(qxzyXla{4ZOf%!|&@o#0chJc!w) zG1oBcuECZ@yf?ghw5D1fh6HXZ0{QpjPLeF zZQ$}84#+)(w0bUMHuz}hsPN!Nxt6f-z)Kq30K@gQ>Cu)#2QE)7U?AJV|5-UpFAN^p zHs{gKN*5g890zl0XiH}UI1zzy;XlB36 zqqi^+1q+B2wd)lBt3aPaH5!7hMWZtQ-2Md?Z?el>A$uRU3H0+uu9)F>81n|%1}kzd zTv3me73|e&KhWv_j|(s+Q9n63j|p1EW7SA3Y&@gHW^&D6j!?`=Jh4KM?pw#t;H=EC zx_fZL0QTu(^fudH?in=!z`ol2f$2eV#%fU9!TZgXBdw2=E_vnnvM8u*rEsmr*TRdR znw0hYXBHZol(0LFnj{18J8Tc6$@%#7tFhU*_tr9}p#8(llF?61nj@9`BwrVxCbIji zMiuA!H`kSD{lBvQ-?YZ>wvTkR@&y+iY#MH1G;cRPgDpdx$CNDI>3NU${Ij6J28cL= z88cA#VoCT_!et@miLi47^U5t!(&)rOLmTM8gL86T=TGbD!K9^E>%5wx@C^&Mge(}C z*d9$PUo}-!U@pr5>B*V1$f#^I@n?NEJqHf#{OV5>V1!4HqRuZ-x1xnY1c{oZChHo< ze?(^*WD-jl@G(slgAhH?>d3nJuVoJ_Au0;LfcrN6SLmVqu%m{$?DbV9$M}>2QZW?_ za6?^s8Z0#kr%=nDP*#kD4m6H9jRX{O#)qlWa%g5q{{~Tytd2b((5u=VEroM3)eatT z`~JoG`~!5v#V3#3lzq5-RL~&vd#6h~PQ3tzthk1u{Hd1DAV-nc3RIxZpIqFr%8<{$ zBnsq`o5;PKIDvl#*sf%0N`Nqhvg?1?0*W(-^ByT*fmL5$i#<)XRueh^{yulBsT8mn zASm`9EWDBk3xJoA@J%21qUO3+3xLg}G2QFG(o(C$l3zIj7JA z$}MgubQD2qQUW11F$$2jsPOj;jx8M@kfMCaQ11pV6jg>4X>yJNR8%RRUwXUiWDQl{<^X4S;9He!4! zQlo%r;w0Ur^su9W6`s^K4Fhb=ClJl_f;=96k>8%oM6JZyYVJ!=n`bv6_48c-l*uIlq%3OX#bbbXo%3v0n) zel*>c0Mn?zIvqS%50d=8vdRwTN>YS6=$`y9S^04e-nU`tHK> z6J+1R1=e0%aBq0Kd=;=tMR8erZ~f=)wZ0NiKcbVVE`zlwYa^kPE?8ZrY1w3~ZV`Nm zY(Kdn`NO1AJ~TZu4*ua;{kvXXl1y(vuRF(!PHq(peC)*ENQkc?s))5Dc3GX zlwePwE#IYb&|0ff@q<--9_-$F1ZysuOtqAy-4HmN`~Tj0?P@g=dvy5>4f|H~JaflJ zf)}Ca?(C;gu^$o)bC!l4%^FrsE#nWAg_Lk~(Bzl9wa5;gxBDyeHlQA4GPqt6kMlny z_~#kFL(DN)NkDd+VwM-SPnBmdvufEaxQ++g;2H&|R=*PI1N6{=Dg#b_=lg*p>*ewJ z7GJ+~-YO=BOb2TjZ-=p3kjAcFj(&>=BY=KQd(JA3W80CYZ0kJS-u(0 zJ=T>yP2hrEBoAbI=#eV5x3jcURV;`8#rfcIDm|wQnoHczH*Rg^x!6P@e`s}nbaptK zah`Q_a(7xktsFOeFYCGt+c%QsV4n#y8@JA@EVX`Uu>p}sptRjlGfBDk!Yz+i$12%+ zJ4i2DO2+A{jskvl58f%ZJk#S@d3m$oeM6!vvriUEp_dsnM!Edx!%^BZ@2xBc<-p>P z-dwA}`u?t-xzNwnW(cvTk(Z`BvK|6)9Dfn@)if#;*U47~277z^JXAok`hTs<-QNG8 zeB5S#%&Qf=HC(R)-}~42K&M@$I#*1vzX1>Azf#%(?t+5+{DS-?+q?ZL-C}SrPij0Z z+j&A|JsJCX?T@vQbyHmMNY|cyhgIYA&O=nccY5pc3h`;*PdR6;MoUfM z+t`unmB>#SE#)~h%-^QM5;5k;VpUJstL8%u0f$c{=g^Eo35Z2qXIMLU(KfVdG1eq- z7OGwVyLP|K@a4~wR*ji`gs69ojnvJnS{3rH%-BTMZTCA?d|hea09;DQc1hU#(*Vx1 zmAy3FUu9s5S7T3gs_pXMp7V*`#FEcFuknVe3?pK@gO|;j1Fwo8Dan^&E+~r<{dT(` zovjU4Ru@L05&7NI)g6Td_aoG>=b;w zY5Zg5ezQEI?%*i?^iFWN{YH)|U4YhNPuy^DeDmb3el!3&gG;GZSxF(JJ30pZ{vitk zj`ed6DH0S+J|0W69wBbtoG2DF5-Su2x@|AtK#YDr>L#5=$+i*fwU(dp6Z`WlMHacYq1WLA{AeiSJt!WPYH4y3v7r$iQ?YG z@Y7{CL!%@%JM?X9yNk1zWfva8nCo`0S3T%^5*ZXjtU^cZ;9xPL2;$0v(Sz#&Zrj#O zR~(-<7hT~C4oPx|=rCg2QPU$3oHbGfwU>v++?#(zDa;|(ADWjt+ zOCA67|GSAMf!ND_@_3aZGwnHWa0Hcb|GIbQM;RE3Jo%?)`UdNhlRsl3$bZR`qE`iv z!_soI?9qj_sb2NcLW;eEH7p0rr=hvtJ`c32i7+wLKKzEBz)x8P&*k zDm0`;9j_?`Izx__<`S6F26~+`>UW>~Z+|$mDe&3vZkgLq{>t|Lk03(&*6BP%Y5;!p zKfa&K!+sV6`OCGI%*%8?Sbo|q=dpuNUTdN8jGmhu?fmbkqch=BOE`!k3ciSuq(p~B z`QCSVgxYE?OssaG-p7Ip?pfXa%H8S93^vx+_o z0DD3Z*UUHmHXLPm-n)AV(yc3}HKFBE@bAYTq`xHk`uWYs{rMKARL16je*~6DpIO94 z;LcSB$oRyT)Z6I}3aFm{geQV{Jh*HqhU2qe<}lwvnG$P^)+vyeVjLhmtUd7hlP7vg zV#_v)C`n0`ktb2rQ&74E^&cM)(YUo~Gr0Sb8TeS}=sFtO;O7CkU$(nDK#Xt@`9sZQ zcZUTvPlySNQO|k(cN{Y7)=Hbu8>3byhru~oYIIcuN0FtEO`52<8^k>_xMo^p@06llQb);$kfL#q9Bx^@LVAV=h(_i zY<#x6?kufk5E_x=T)CF_+o=5$B+P5Moo%8umt^E`z9CRs#c zBIrKPP*+zMV!(&CIuqm(2cpiXB$N0%8=tGbkp4fW-U2G>=X)PtM8u$$mXswWr8|_B zZbZ7f8>CTckuGTvke2R7=?0}!y1S(RgYWO>e|{X#QQ6(unR(rK?sM;*!B+jQ;kMP@ zQ$Lf~?U0=grqOzv_)7l`DhE|e4`4@0FvL?-LOE8Xq1l36WH_P+>ZMj4N1)7m_wP;x z&;eVT*f|-xnK~xDH7C<|441-SiVW|IW}6LBj|Mky9lrdl7ORrKx_Br7S3Th3uH&-R zQZk-%%&3$qXkBdW@!!%HOV_iM`wvuWpZgkf*ehb(|VxyDOWB9*EHU2wf9y}@Ut2Ek0w(H76)%$$72c2 z)VPlQMx5tRMGyA2vjNFGk{J<@-^XZiTpu7#qW-h8;E{=Fgp& zyq&7XmsJNxc?0D{GxkE|h6~svAv+RD@xnAd^%#kfe#Y=x)=f~JyI4r~s7>CT#rKsm z5pk)Fa+SL}I6v>Yg*w)Po|!z6OQtIBUr2hL{pw8K)9*=~=09CPzT!(!*BOI}_?}OQ zW;Ga?VPg}yZ@Vmgio}8dbpR1_-iYV4_tap3ZC!(bdx zfP{9n0dEqqpU4X|k1-&4K3eo2KsfGDK#X;-8^v|m=YzahUI#!o=on|Xh`DSYLO{_r zT^1xxOc?Ys=zU*C(&sBf5-H_V(TC^h z`2k8z*gK(tP7V$~i|sq69y*03gKDxes+Er$esqO;z&l*?SovjmU2H!qhFu*szoAhU zC-*MjYJ2!SRkO^(SV`)r@{is-Ho<}AP_)<&@E2I57J~6bYH3Mnf#_##;Go{W6%bjp zOv}SzDVYIrl!QX3mG03c6rY8Ba$BaYIlCanU>(!Sk;~3$i=}lQQ!KFx7Ioj6o zpq-^@GC^0phAxjGd;N?)e?qlb>6PP>Y-ACGU!*5+i!k7U`z=u+0tC=E}YuHBr@FfZ3dSEM^;3dKP z_WSw7!N**pyB4Apn_+R zcRsD&$RTujfHUfT#smmbU0pjooJcD!VlagOmh-(IJM0cMsiVDdK-Z9gz_L2yK%Y;! z=rn0>D>H$TIvfc2Wt2FB*g%-m>!+v?P&+>IF!u}&%fxt_-g3ZyR*C>Uo;my8b=y685;)Hbu>H!{4M2ElW5&jp> zlfj<;9$;SQRB9qpc`zVLJJDMS9ui__MfE**3&00*@S5FywAH!10iOIp)ZgQ}3N`Ft zoZDrE>ZPLkgit)zoIY zlor%?yusHAX;J?iSbfHEf$|e{pl-L7ud`f-0}?16@HlEN8CwPpi_Oo#B%Wl3K9HFM z(wZk4G|g^>zHnQ_p4dORjlO-0x7)(=a9wPRV>-G`wG0O{iR1*#&CEz|y>+J#*f(&Y zZmI!@OMpHy&{O9b)xYVz=>=bQXP*ywX4l@?u^WmI*(JFb4Wa~@wS0C{3^;i^pJBt< zw<4WngvJory`t@TmjXrWR|Zx~0C1kNx?4}ii*$o}BGtg-@q{7xrG#k`=RYPlehrj10g?Bt6{82uBtrksjcS`f>~y$?Jio8MP>u#uKHEq0x+qus9+NAdbs{IPhnw(W z8$AMZ;XHdpp>>~nceXn9yevNg93KJt=N0(5A9Aj24~~1#pozvmVJ)qF|8piPDTu?U zrZR1PFfAk$(W)bd=`vexj%FdqKehea%&-{uKBUqEo@ek*>}#nNOWXRf>kT)yCO7td zThRB&Cmg1@^t*D-l(k(y`d>Hv`nb~=*q){(jzJzA{`psnsB^W+qlof^Zn9zNfL^j&Ra8#?T>f zxL7l2Oifkh*8UZV{#lw{@NAh?lsfna;o=*PEF76lCzh*Q-SX3jBP5Z*B34HA9p3W2 ztO!2sW`x{B8UsT^?f~m{okyX@Z>`8p^baLPrRHqOqjj6zvsBRPZeot=O<`Ip`HuR?H4 zATs*x>-^|(R1mCzO>jB|OQd3C0{oEEy|osHxTqu8`lkh?|q zj9y^~{LJ|)I*}=kc>R?Ew9RWZ+Cd?+HxmzuqI`>S4IpJaLX`4!_rcI6+c+Ye6Gv(D zY^Zv(3+eyPmB~A`^80^7&JjalK3?7ogH2nnpOXx#ci}A=`}nZ>OdA>$*`xFGefRyc z8IErhTFmEeI%yJA^vv|k-9zMb)cl}nZx(bV_gjr_jF|oP@PWAP-scKNhxzXt{qs_Z zmxz?I-d}xiLvGFZx)`&|G!pj)4R;H-U{jS0B4VXQ@^tjDLm+tzXnPn^@NmVJA7&|8okmFJ zM+6c`U6VuB2GfH+XRf#6&q~YG`&Fd@&oQq~M($IA8zqEe3!*OzSA=f6p2uU~GXA`y#iGl^6n_2RBp>_ROE}wo*ac|#jI{gJ2}0Bhw06#j z{tYYzJtmrp5)*4-qWKbVACq0-sr<1wvHm-v92TeX4X)d%TaRic!vBTG?3El5d`^#L zz2Gk*1L0`SY4&MFTGcY-N^|vYGJhU6AWaWGcWd{mbHz;h_L0MgfARQYx$6<6RYP|j z(<^m^TJ%IdntqFG*6XPmjgc^Dye!skdZbyOYA&hXGH$ze^5bmdRXN9fV>EE~8^0*; z_W=vSB^-djk?0sCS@@sUwH(QHbW(Y|os{RhU(B_3wRfCt(5-+@#&OyB6S=)eI~W*e#Ow(|m`gJ8PO zCuBtuVzA2$UjdgTo}|ceTh^m#xBpxnsR)kflI<5F_w}9m27&-%DClm0BEt1oswx-^ zt|f#Ey+=|l)>12uTcBoY1ivEZB*3W&Aq31njaDW;3YpnZWn$(l=gl`qDHbXq0q_5} zOP^RF@x&3p!$}Bh!Y%_hS?(FF979)4UjwdW&3m%HdS7J*2~L5q8#JHw!Y1lhQ`!;UX{4 zgGHP$11VHC_)AC=Wp3IINkk)fR#N>qj3R!nAIG;`k-a}|8rakgJwM~(ejSfJ!aw@* z-4)x@lK64RQ4(3{!Nv6fI`N5|^Ubj3f4+wPXz=yDz`k(*3{XQLVBEPb&T}ThGsH>2 zD@5fJubeDUd?!+igwGsbdlw0tpeBC_oc;Moe7o*$y9B+-WxV8cyUqVwhAYO?zJC?~t7$ZSddj+LCoGAVRfrDZYMuwgM=)wzFEaxViUpwIjC;0WWkG#);=t)wHARamuL3dvl zjj8nELKI#^j}?xBTvNhs0U0g}v8TYYz?IQ*XY=X393ye`;Qv#R4Oy_rSJb?2(O#}o zyC9(gDjJ9755?zsL9KRr5^$S`s#f2H(tSmoSU^9)d#{5Z{!efs^LzBH1;G*kp%z#~ zKE|)ZKfpBbFSxq*8>rpiei;gr{brDaJSOZ*66o>1*NSb? zg2)t4rjF0Mkj>E$P=Y_}H%F@sDFSZM>jII-p6QN*=dog|c zX0sZ!oBR|1R||ktPr^+@MKhQr$j`}%H*unhT%yJAx)9}X{K;QB{&;rJZf{ck=Fs$F zZq~eAyR+ZS>>E8`zN)g&x}!r^YjATwDz%B+*9=k(V<&z{iiVyx#Y56rl#G^n=0 zGV6}lZkBs!Bl%GwtW+Z0)=h zf)vy5(grHb%wm}^MzC0ZOprNC(rDXMnrlXO-qUhIkRf4-J~#nacukveutjWdZ+%k| z4z8@?MZgg}Nb?9xs$K0}_Ty9u}(5kgbnaanQ{QNC;XB-WWwW|$+B%H^>~ zGMj=Tg7yRgmIwKIjv6BrzIymgfle%(i1V)AGHRLt%oqYOkbw9WDypcc*egcKJHb0 z@4gr1qrZPRl*m7!olr$vSeuu3=Zn%+Ug zw2U7@ZD>~iL+{Vwhbi8mo12@&BVC`1)lJ$o8Dh4Ti3K0aJ5X6ZUZhrUW#)c4ba&$n zZW48!^X>vWGwykw>X9B%qIM|0Mgv>2;{kLLqE^esWl%p+Ca?l5tqGG@1@g!6#gBGu z$gtz?blq>gS5(xrQ&!bQn$@*^xiYD}iw;K)j>KErGcELv%VMx3pSdd1z2mqzmYb+L za7!s`qR*{cdFcyUmh+%0VZoc7ipMXIhNB<62z&^EY)r9nTTx}wrh6wLxQZA4Fk?P` zOep9c+P8Xy#`v6xiOIudcg>-$!gR={MYM42a+{?^BKw#8?fzY~ax^bVxC~7nA?wm$ z!~Pp$#xf{|`c`fmw*0+uo6NS|_QwCKU zUGgbdScH?_>8r-ZT**voP{t?;g*Gq*kPsjulg-x2Jw{19<}j#in!uF4>-EJt`JQR6 zTyp24U3mqj83)mjD(hU_@w%%(Bqu#zQrqIYSk)DB;c%iy5Xik;LYh$7Bc0Duc;OtT z^ICk4JeGP2e-KfWq%K`&)-$sKNo#9O9u-vBJ>Oo&@XzK-P}Mt+Sj*)ehrbQ+xwtTG zm2M)cz!rP;jYU#njGsK@Ud!XUa!iIkIq${ppL;9d$a~=9|5Sh3oa1vgOXPiLs{3 zBL-y}*+D^fTxSf(Kiz=1)0=okN z9zl{{TpS)6YUG{5YiV-!5t-k0r`F{9?;O7?5KFh?^|Gnvd0SaYN%foEB-Fho*Q@GX zUC-N&-gw5O0qcm!L{Y93h%U<$iE}$Yk$~gxg1WMu`2mE}goKvh@!|b>mNF5>Y z6ITvg_8k|mGhOb+9@3G-?c=>}TW`5OC{Csk&1KXL#Eg=XQiXmjr$5ZO${F0T+~~IW zCIuG)xwoQ_VOi3iocUV|hs*qu4b<3>-%Nmpr_b<3Oc-Cvbso8W12|N;YHRkwdRS-M5CtjD> ziuUR+3m)W>wT86WloSo`Q0$`AV zRTd!tW%Zdq-@v4#rI+nkev>Eltr`R#cXV~3K76#q2;>RU`Zj2a2oew1vDq7VX4B~Q zBMcat_+43RF5=@HaI<>r%lmizr@`QFJ8FGK29Y6U4UNl|1@FRw@9yhODtW*r|F;vV z7nJPB%b3Cj<4pIzg4CwG`hxfGUl7j#ZwcSNA68uJWP$}s`Af^oF)=axJ)_{@<&dY( z`g(f}3=CqTV*u;9ULoc;V#Y><_6SzazXP^OrcQBsIc7xEng9yFfqY#v59&O%4Sz{<RbY&h|)iI>5zub;8ZemEZ3o$08# zy;+M8_S`S!Pr$~Acf3J=c6;&j7(3Yiys{6g@kV7CUnWuSV_Pw6OelL!ZAMMUq&$_AG)+%h3=L@bcTeEN0pPg zOlWARZ_13>l{1y{-!p1g`z#2Zb3vidbnjcA8&tFd&&9Kr>YMEV0t*X^S!#BZ!Rw9R z@(PRh#-=`X!RKoCR8@C7J}D_GYGioW?iIggwvyoS=x=aRmb}1etVc!f=g*q9I%=Al zg$i`V&xM63SXo(ExGm4qbjOS5;^R(lrqeSsGZA#m%-+9NB#pC;!T#X~cVvl$8R?J_ z;;vlec$^#EG`d(j$(&S8=&EWedr;Ble*3nPakYPExQ!q1=3@+yzPT@OSR%je-jHyS zc8kp%`;g!|FQU_kZFjOd6=Bo3DVDRc5{z>`@9Zin+E!~>ocPKox{n+RnN^#&q%^+ z^#T0mYOk)#ah=@fuRi#Xc?^w5Q+|hmeamKpZHslyOyZH>6e{YslaPqriiS>%dx_&F-wmF#r(*__erU zCBG{j0R}k`#dNbVsnW1lg493ab%rn(ZQIr^p7HM=G&Wt1(fo z$HeIJawXX3(9omV?_Oj`kOQcJgs-&aVo}Y9I0>p~6z(}V+)Z3_rn*0jIGE0`9r4%y zVM!RROiC+Sb&rr;>p3^DYJsYfod_uW+lX0$r@;M0T25!nyc%-q5?`_sqBXeeQDvfV zS7R8>)jL0f4y5sSc@4!<#7O~*5KLE7l)4+ABn20~IcN*tt&RVO!Dm8tf9HDXOG!P2 zj*X8e$twzZ%c%Yy`-{~_NeFEJ!0D!TpLJd`GTUYI?SCjExw-ipesVlrRgoiqeyOUaCIa7UcZgutCc-1Nenq&~ zaFqr;z)Y>aU)!PxH8Q|x8#z3r*#wx;sL&|T>TUr{PLqy2JS|I2uxIrL{GGbG8`*yE z5p(NL;1P%Yz-|Etj5A_;cN6zgzjH^+({UEG+S(bgmF87>+YAk;sq}!s~p!=QdQfYLedDn&w7JA@BfLKU-~saeF-og}TxCA0C?c0IMb1%AcOd~Ebx z4U2%=(nILmuJ%{YglVX$p(DZ9*Jql1J1!>QER`IT8a74)woo9x^A_NV^fN{b_}tcc zOfV-8a2ahV47DRYdGchBW=uRoUmqBuQ373`xA3g7$%0>TUcMVTIe%7ZtCe~4amMR-^@+RW7l20jACHl}-8t{E~klrT`}3qYZ-&dwK2 zTk1^kaObK|Szz^tImrU)q^u59Q0v})fd$2U!>%x##}DD7qm%wpkATM>)}GwO01%(o z(&yUzbV8RuRW7G7qxrVEVV^5eW^r**n#?=lWs2+WHPEMEv(2oC_pyL=b9lvn1)w~1 zMEiV}9W2b%?ZbzMP+&^P1RWl#04LZqHtTi_AS}?N8k;%#IH~o)4-HK#ryZWUQdd zN=xhZ@EQy|wR;u{rA+&z3H+OL`S{?mLVmny((d$vO%8gvpC;>t&Yj*i|HL7vX* zxYk$FBn1aR{iDYo@U3m^Yz78~+gldg*8NnOz^rB1E;Q#E`7(_VYlD)w?Q%?#SIGm*Mn;Iy8u)ePD$YIUTtM!>y#e>c0x?`{_s{(9a5%bD;P2U71FP)P#W zHS8vDzS>Ll5$ZC+Go?D&l!kX0XM^UisoeCbQtulOq)L)=?WA0B5QV;d8}Po6smg~w zMtt2WMb1=RU0vDGP|Ndr>iv}-0JT3qz43cZjzdiR{CO~rYw(9ucL;EAeR>y9c z)OGISFOGaIKW0<29I1b()5F6G z>WUOGJ-8GUGD{G7{E+ON9I?4kTq1mMc+=pbon6vBT-4$~>HRdtZi1yKCDm)H>kY-j zTOB(BBki54>Zs(u19tN+!!M8ZKAihwJbHkZli{=wb9&9kq=0{IIK`H&BnjuQIC~{) z?SXo>uj|xT1Z1wBe3(~_c0@Xk9y-OO#Ag7bjQZVR-i=E z9vzc=A5fU6f_q=c4~29baaJ!m;O~zh~k- zIP-OjZ{0yutTSU)HND?_Gek@7WmKl7baj4rxL%bikBsEohjtSQAx+?OE?AEseG~~Q zhD0Iva6jYg*RQOGU6m~77D`=V#1r1h!1idL4)WuN7*8JP7q)2oL9p*hAIulnA^Wx4 zgM&5dPFDu+K)ld8B~WdpzD^A4ic;Ek^-}Ae;LrlZ*Hr7UifK9FlBR-=IQUuPO$o$~W)X1YffKoMZy`I6B2P%d zz^&`z1OEn11yn?nl*vG1m<0%84xmAO)(cM6wmL}nyRpyeIxjFp-lgq`z6JP>R#(5@ zzxd46{=H_)&LKE=+~wa69|b!s60i9yIEFSu?%z^OfGPNJi|7FR02vHX{hgSS@`(@W z-i{}Cw8I<74gUh$D?;$0_#i40E8^*YuLQR*#m0{F=jdeFgO9ZmDCfu-l70L3O-}{$ z-sLncAQUMRQFWFzz&u+C@^6$AQGc5b!ma-;<7T!_O|Yv9;8@>?%gzo~%zF`@z7O_> zuUPBU@SX-pFp61&aZ^gZeti+}<~7{!5hnP>{l4BL_&e;zO8~M0LLNrK`S}TrA|6DL zbd3Y~uMuE?bfl>OF!9|lWu&^_)xy5m{NItWAV~V!7nqZ4$*D1lEW!eAn1BfN5VHQX z3^oGe9B6+~BdmuZxubsRTYUpUs}$Kc>CNzWTJJv>fR`aJfWQRym{}DNq*k3sJtl3cE6KPW9F$AMRt0>dQ2)XUhw;F~)y9+m%f;=8)J8ARm z!C-mA6hU*hZRf(@Zw|XK_SIs5k z@hQg#Vb8m^UIJYs@7QM_&QC&;$VfwLq0D>@zvD`54$)|om6YB$A30o>>Vv53Yi=K} z=ijKHFSS`+sLENiVvneMsq&uJZdjnL%~cKPrWP1{l3c5{Vj=v4jG)Lc1s14g!9Cfd zbRfpui=aKgeu{AvO>3)jzwP?-KwMaV1el2K(LprX#1RFc1q0h`e0IlFC%)eXUf8=k z9e@wnGvG6G#>^e2|4bT^d(S2u{+xfUVn|p#=zgE13q{oJ)|Wc^Nq>Xc5YWCw)RMe= zrZp(xa3Ms^Zt4I;P}k>JcIYYPJ&g@b4DCeSZ%OY-ih;sBCN3*QPzN#_C zd-`^5O*pCn155O0cDZ9$xW|5dvfK5kKa%;6+dQ1w>m9j?hOXX(j3U9}RZ&2M0IHZ< z$F=FoX6Gh<1iS%OZjnqrk_lLdkFtDJ?&1Ch}uTCd+~v_;R+CO(gTOo_xwrDgO#MxWlVFJZ538g0HGdg=4PFIx_dO$|}o${30V+;@R1q`%ef=i9Rl(sx>RP*Ynr?MGdsef|`AP@xa0c38RmfYtj)yRdOjPUn)q&cS0>y@N;_udY3-lwI_ zMm!Z*huUGT2=&h8?I*~uP_gSX0-h}X&hiW1xKSwt$_BWfVRSsYXY;yMpAlp-VVxur z8-duy(U_ell$lNH9_;MwiWGpptsgYvsGkuq(hsoNUR@0Cf05!k@A<3>2{Jb<{Dp}! z6Q1~YFP3ifk(0b(8#2%loRRI4#?R2A`;YDcf%Cg4(43*(1Cca z({gjiyS<`#AU*IV;>UHp%`^fq;Pog$bA#X4%jlryC||qu%2Ny9(SIZK?ehzv-{4G0 zOMxd6vIEuT^srs~!Zx7eAjJlxrI_&?eaZ>N*=2OS^)L717jyMyqX;PA~eRwEXW!0DiZ z=sjYGoVd$^&Vnf(U#1~9pEU3zuo z^hoYs@~UwaWG$TE4Mk9lS)BIWY4pH_Y>={)+Jm7a`3Oq<$CRr)o2iZoMQgocFgE-N zi;6gxBE@W_rWT8_tHSp$aX&{0-B5W=zG{zDZJ-2!;=|S|BEY%mRA*v;4cg+&DgjVF zUf1*Dwm@YM`=T-fi87|+aFG$C{A1d>?c2&vhzH{5A&p+q+NPr<3I(nt?5bP^?+TI$ zW)q^L%a7vX8}KDzfjcS*#@G<|y)jJ%tn#PGt$2o3nwg}2?qApWqGNFI@Ww=iuLnu_ z_nNl%#_8VDV6<2pv?7fB!wFC(bV&rP%?>Iv-p5t%tqUgINM$Rz9e*MQ5#RY)!+y&C z@cWc#oy^AXB-Ugn3VREh=VQc>Ry_S-;sjKQJY+$|2)WOTr8B_MAiF}I+h2Y2CKn*& zsV9HX9THv=*&!f6dmEtXKl0xAK?7IL)5zi-r8B6Zb;_V=jlkGUvRP)8~HTlcq#{ZJjYWW+oAv7JqJ2MlsCG`Bb+ zLaMjm_;d(Ft17`efDB&rK7y1pNwSDGovU&`=Go*Mp~2-)AgoCjGtp2>X!D}b1UGm>seHs27;@#=F zzgX6-rM7bte%Fond$MMP|uYN>gN71_&t9Pe&T0*#y$JKL!P_em`N&8(XTu; zu%DE%rDEs)rC$SF`Tcu*ZN7=9mmYNx1WQZ{)0|w6gAKO7 z!e+(qd_L&^hA9^KKLbUl_wH%VYZuWdS6OOUw$hYj`1^l3EkKAT8kv}|g}C|8abQ%9 zpi4%>vTqC#8y!AE5&s*cbV&Fn6!AbT`v8w^RO}qrdEe>Yr=avc_-~9qh4_VnHHz^w zc@_NH_wZ}ff|DIbiPaX)!p~uuHLjp$O<%Z=()CldJ3&24lgm~N?FqqV#Ddj8fwhkA z_<^DQ?s!3GqgZOEfoN4qOxr5`IFZ6V~e8V!zuL$^En?Tg?K(P2K>hjng4+FA?$~&=?tHYa4P#M5O3-*EQ^`s;IfKyE za_0Wjs#6k!O8kXPParLH1arY_VzEN&n%-|;x7_Dlo;O{AibZ3Kg*qH~DP7_ye~qnn zRuL3S!;9U8Ih4Cg(R z_iZr7j{nsH_?+TFdvej6oHo^}f+=s( ze`)-cren?=-={SOhsW13DB%|U>1~I{R+-9QnT}vSS${unP;c2~UoIY}17)Ru3hNJUnczA$0@CKH?$SP~&Ituo_josM-a1|k@!Y&hDbl)6``PGQYd zb|VIJ50@$@bY!E{7lMR2=1d{w)ae=#2aWo@`exe`g)@Jw=uk3r3A-tvO>dl>!T6Bp z^)f2gO-Kj-o0Mbduzl^GE48TuLB5N^_yB)8oHLWjX-NVMn7+27vuYzk$ zo%E7OG5iL87*-@^ln&s}5_DX6*iKoM@oFMqn$YG00R)WMY zhUngOV9k=8;pUTB?t?wu+Hh!*vSt27#E4;93+H(y(QCtRA@82tq-Ob@Q{z*>^}|FS zg;v8PiPW*;vg);mN;P4|c=o&o%(-pjQ_6ll8sAtawTojRl6h*w-pFgwe!L{{ea=#b zdBe#ME*fuN|H8QXQsRJu(kp#~-!JmM<)assWRw-fka_i{gFI@e%;9vuekG5!OSo^B zfBYBsusWr;j9>EP>2&AqhY;G9rK6VL!}z$;89t-)uK%RsD*A|+6kyJsvkmXtD<$rS zw?m&zTDQ<*WOZnbnOTn>KA`%!p;x@HF!9Busb|%${6ZicvG0s)>e2J|N7QFTUS25{ zD^-fC$AOnVI#d?%I0@IyJBAg+IaghM-t@)JmFUD!$0_-oj)7xB=JKlY&5pJXbBC5Y z;)S~#!_}6Q;)*I`OmbrUze6XrSW)M?b3G{9`8?iCGG+KYGN-9|(9LLoJzg{&Im zG9;4*6?eyaQJog)BroMvyTR9}_7><$ZH1u*>$$XYS&R}RRc2mxOegv^am?2iPw7y|t)av7&Ql`WIbJ68@#RFRe}fAN z%S3Vu;ezno^2~7jZ&V0`z)b4h0XNDR(Bt<(F+L`rqXyzY8N^Gay){Oe-1a#- zEX8l|gXP#CGT+OK>NnF-Ll7IS&Xi3qr%Q`VshnFqQAagmRdR3oRBJq4${lo5I~^+$ zM}7=phMXrAFJ)zg)%%dr7jslrhk9~thp%*Rj{JC5y@IW{_Wi`J%ojm4F#bG|7k)A_ z>7CU!hzRpxDe~bjVe}oE6Jlv&81}kVIJ~`V5w@sRJ2=Z*@&2eZG|m_c0!djkouX9-nmAa-}-$!6tHw}Lxq zFC2%EXjq+fmCLPiR-K&U$OcCA2d+pqt|XNGTa-nesaN zZFz}_83k4Ro^Gb~LGNuyzLqV%!=wxa6s5W&NXYwO1HZo)FD$TJ{jPNnhlwjlID(&^ z@r4ph!2*rnVzmB7Ds|vBJdFTdC`|~|Du{sSXaV;f@$R4>`gGZ%PuIJ#N5?%Tg3tjA z;%D;1aV9SorI0O5ij*-WO zg_+FUh3)$^dtB+7-}LcPGs6NR(~A!*39Ld{MzI*5ggHZMoh9ZWOXJjIp@*UhhlZM^bKK_Uz*ubS(wAC#AuYX zZ@>6aqcHV3VG0yxNVG61r%dJn%3=o`GnxvD}`}oPz*vn*K(!@<<)0O&Qx z3=_Y4C5|r?zhqDZKSCN_ZQ|768fQ zg}PYuD;j?Wyd-*}qzXBUvsBQvb2v2bREsAGu4u?#GniAwzbpM z`5KEzy6r8xu_p-WLQmtA!6GutSKbbfJrL#FUf=mCT`%(C41=mYa`?Hi<96vO((85Z zMf<99zLI=uN_e$}(^H%gfH)gyUQ5CRxtWsMAFVVu42^kR#&n& z^7^L*hO6R4&cuBxd*LiqQrt;390&GEXF$S813kX)v?IR&(2dpAuG-oii({13 z^cAPYE8XI#)pCzCQ*bXjM}7;(k2b}rUe2xjkXft=7=u@O+U>|57P<1qqi?mLWl27b zY!uGXwaMB8Uj{$15X-#Qa`nLEHcNyYZBls6@l$2iI7s_27T+Ab8{=GjedG7dT9!8i z(fsbcv48hGQCzeV(yk$<#PKq1^kcz-P7^yJepJLIbodS9ytuAhc3R%n5WH?DefNH)LWuq~MG&^@eQz>i3+@F5lXZbzNq7 zV%)P{?e*9D5+we90`47Wq!76|#&i|+c>n#v$DZIuEj|X1m1=4;MG|ubc`o9kF(#Q8+Sa95inZd%T_$Bb z+Mj1rm?wZSg>wkfPqO=hYS~|xXU`&Q5%Xti%%6BkVHj6oP|3X%6bjfa;Gp5}EGu!h zOD(#M4SrX4njl%TQY8-^lM~6qcX8TEYl~_SIDE7(-f7(E7JpQ1VVVHzYKM+A$j@dpxTHtVm1P?1FpoKa@P@$&H9B6 z+U9)E)T279P};s%S1exri!QjSrR3lP_{mo@Rh@b!Ul>mMyOVHVP-Mmo1lm3=AT17= zni)2zimyos=h~`egk|z&jh#>MX%)|L4!|p4FjwBddwZf@>kQnuO{xEG*P{6F*3aA1 zCR1j|CgOvYOJhp{LP$VoB;fsIU%rVTd*N|lEk+I-GXm3ae!`1A{=$gzP1A&~r0U>M`5?hEFVX$hoKdx(!*_vn5pF=IIM_sP@ZC`0x zj0Jw8$4`C>AD3hKyb|*W8YOCak|LcC9!+LzS$==4G=4lK;wepLeU%4e^W2ZkpVG{H zp~eA&539T=zEmePidAco6Y#+*Igi{*A{W=3tOvX5U>>97*qw8m|+e)^H-6=N9fq4#FMc?itq8Iqp zi52x@@4$=pR4inE??q;NI9mx&QT32S#I5RhY0>l*eO;&CnN>s@*{|~`!Q9Wz zoy1(^skqcFlrMjIai4kC9nWMxbg_fKM8bwSV8>M@2qa%cy2P{YK`Yi(((Nb`K7L`P5O z6M3BVsUsNLnVGaENP8XBjuRz2XF!)nllj&1Q7v~!qoKoQ@*SrtC%!ME5_DWN ztE6j@^(_5IZn7k4tdnQgmkDOtj}hYUvbk{-?ZmC!uA+prdAvZf-xyShIK*D(E=|u> zZFN2B#2zV5GJ%2HUJs^s=0;xXG88tm6y$Si%nveLX{g^!Bihf@YrPcnSOrS2{KqX+ zAG9o4@2{V|u*b%!j2mX02abX4%-8Cya6bj83HW*?}4gl{ST@ zpnWTUSFgjn`j&#E+X9Ou(yR~6g2m5xO%fv`hD@9jzIS`sHg(!{GA&~;8@@t4Ix6Sd z41LQ9H!8N`P~~#L(%)09j-bfT`rU59?KSak-tO`=oz$J3TLhb@xCI2yn(empjz8@R zj#9{Fgv?9J^2A)fwHI^SXTxM&D4_peS6>+yb+mPjsFXBH=YX_;(v2{LQqtYs-6bM0 zfOJbKNOw0#H%K=~=g^(+@!tD1PmGkZ4$|j7j7_sNJp*Mfp{MJr*ytmgguU;M0L7j6@mfd3ViK@B7!9c;9&#Yo%8q#dh@&o@9Clg$?vjqrEzH(ew%q zaIt~Y+Uth?n-*zFxD1c^br)5`%0_Ir$90m#)liPg#n5PNuDyqeZSfB{k4(jnA2o_= zW)e&p{L<39Wd!Y)O{=Q3Xggg@b1-1t79$G=QCw)nVN-x-%u zxtOF?(_@*SD_>2K&O~tH%ykPEif34(dS$yCuSxT}C0C|F1ceA?!qZ;u(p=3GIqrw(EMX0cY2vyqzkAbZ z;v@t`u6M6@mn>3i_zAk(E%gkgW?{c}AFbVp-^@LIe!^feXZ;%Ic{s)2>f}6m^E)SQ z5@}14DYHGtP)-fHS#R5k#c{q_CjcmL41{Q$gE|Zs|8U2_BJ$7oyoZ0apULA}vTV|v zP*PnoXuW4mJ#{#IqhQKjZiY|l zSH2FCz>h*&F3(hM`ba+OwE%z%nso!fA>Sotb zQ?BsnZEG)~lqc_f4QJA1@vCOI zYEltzg+Yk#Q^V#522%_={OEyfUiF!HK?-K)?V-+0m^dCU`3E1JmTU#%QxAV5r4T8v zygxZ_3B#;31mted8MPi8);eyPTUFnB@!;gUZ8UllqAUg`f|}yM%Eh`At;u$Qk%^ag zO3i?=Zazm+tqP}3r+mAN{9{R3j#d6(F=lSJWv=Tf&0-j*R}Iqx0Fc#HDO4W*87r$N z_pqd|7<4HZjaI`v0j{}LHV%s$ydYHAPZhq!w^IC-3acQgYD`+UDGwdi!-e3o4cO+- zs}e@WRdq)laO`~J%gX-2iEd?spJc$`NX0s{_GM<%nOtozUnh5i7enC+XA}U2A~Rh@ ze(e$v=HZbXGJ|xP`#0>k2|PL_MSS6ES^~;c)R}Ko!a0#nJ$z_r#~T+x6EZ;dBsEnS zErKZ^U$PT=_cL#5k0E&A+(!WeCmam}rIT1~F(muF5o0kOWcKLS#mEU_cFZq&$QU{O zcKfi6r67)j32u7NM#A_38~!vd&b9rPxR3)j&Q83_kOo~6R$nv<|Ll^VIs_-WW9NwX zsW^e|7eZW?Vv#3@iwb>+T#a3u>J4hwcWs%X;ce_+EX(JbC4SL7mnzvK5rvkLGR&&1 zk-2gu7wg>83?N;sRBC(-U+EI-8ZujI<(MPOaawd+ahfrJ2;rD`$OM&eB`sT%Tv%N2 zgno+t44c5$T1wujVL4*g)^4E~U8m>8BN9r}sVi^tzfL`u7{I%Y&z;{OZH4~Z2l2Hn z?DKyroz==+DKocJE}KRIiPG+@#ZgV0kKz8X7{pE+h1VIVzEdxi8v{xJ8b7}OXeyK6 z3^(NNmY0Hto2FD;AC}ZyM#Qu8P7Yf|GeSI_MVM3aMy<8V^>)&w>>PO1$XPD>r#ht6 zdST{j;huV0YbF)^y2A_%lSCoCD{tdW-)o!e2}h3}czgT3FQ5ARYS?3{d$gM!Y0jA2 z97eC+>m=!U@V1uUa@c_zm<0&(b40*gr@8!mPY$C)RfA9K_uCl*#QWEr4PeaLigQmt zLJY&6k3GC4v!x_SmVpMfGp5`$ISssMM}+m3yiMxgeQe=8U1Oo8Di}8v-Xi}xism57 z!<&lHdPtY~<3m6*7u!o^kB2;A1v%&f0%~oRHB861uPd-^!QM6?;C@<$_-ft%3tBU8 zrD(jy&($(|3C5Ts9?h`kZgbbF#^7~-+y{NaYo>k3ccT_K0 zHbaNE_rPM%GGxNM*0y(qnMf)vQ$Vu3y$dm5aa6xzvry}SQ@}vtjQ3!U}f!wJUYfjDZ3_@8W(2V?FMI!da7J=Ppt@G4t*Y(REJBuW&jEX_ssqyx9{iA9W6&A z_72y+&{9(xA%`E7dc}S#pN{)Gy51v#eR8}buRK+@VoSnzig zP7FKw?)>0=pu-TY$56Of-tpIcf7*>SH>UVH-B8RKt{4Z&AyiAjG#F0=XXo>Q`XrPg@CxR{DPYl^U`E z_*9@`7I{j5fqoME!sBDOfnHh=jQm1fMX`S^0`tX;TJAMZt08!EC=*%9D2VZnUmz3b z=My(tNnfQ;_p^QdppYaMa6g3E^ApJ?t*_s#QWaBL#J2t*$A!|$6LF6@IrQnf7|WJL zIhI7)#!qkALAM7BNwoIkvJaQbz|OQUCaLh}p{-qc<)nU+U-w35bd01e#esMn07=wM zS(KwfHpb%UM{);M!e6sK(!k=v@Y+4zh2$6cYoO48)R5V{)_(#=$+uq!eWl|;cN+Qq z%xWMZnM5``hL49+4qF%1Ey|#$hH`bS<>Y@G(PFpw^Zm;%MVM8Xi^L^jqan-f_an;S zfyrublj)v7%oyoq9!<}pe3OhG^)zU*`l^`kDd5T=HLiulsvwh8fgb^`Jy7yvLb`1B zu(GuX>#Ll6>A=g1E`2rq(=ctQrBzo9>Y1YRdqwZctgg;mIP+8a-$K-!((w(It(NvYnLfi83lSx%_cb;d(sDC zn7-EfMO!E2pc;D4b=&A+LK}RlACLg+4n!7;pSnzH2!su~n$0KjZh;KX2pKcuAHo)< z0u$GVuB#_5w9*8IQjmsHJ?Ag2SIhO;7_>~|?`W^WmPz9m^eX_m>*)G2QnK?1f-P~@ zYrSGK;y>Jy7w|P!PrA~ueZ1|Ld&2w2`S94+#3pyjz5~o_3eqqAZ{Ca& zNjpnGR?EyaiLx8fU;J0wKV&MAAEiN1LU3cFM3atd2A=YQ!Xi zI@P>p2Fwp{E-k86nVrebQ#MbJY-B+S(m9ugY5 zYwM@|e|>o^W(c0m|7|M%28&=OT*MGgAKC%MvE6U@e&pPmj4`PuoD5+d8dHYvW=P9@ zMeC!M`!KD-6FxRGsP{%TO06yLegnVoDtAU6jxqitQ zgWv_^^%o~vU$=VgY6A&p9D!SnYZ!*UXw6}SYyDLT z*PXtfuf3Wt(f*rmkPU!Iy*1;xWxl+r_l1-!U%$SEgVX?Ied0+SBcXM~g_ZAmUKL3{ z3CvtK16vsf&`GePJ8U!9jWz*uQAUFK%%v^fqAITCJVne77y2Aoeov6-^}kLTm8+6G zQyq)@1tF@CcMf&xf6Qx4xXl5-)CC74;dUrQ=PbEG7;+VDsU zfDS^PwdqLu{dH~zAjNSOwrW(~kOYdBuSZMbFVu<9;Ac5{8!Oc+`^J2LE{Is{Q#(P+ zn=J=HWcgg!UMaSAC>1eSU{eA($M{+>7{zNGOr_q;U%jkg|CQMJn{tPVCVZ$Xy$QMt4*(?|ob5650_chWq@2+=J6Ts|cDu#FK~Jo~ zRe>xc{FpBN6FpyV(r;&JOc}VarF-`PlN#vQEh#8Kn{-imFHG~FKXk_n=>mjbUfO!O zU}eU5Gs%triX0@&33CGN2%Wfp0tMjpgU(?F-iI2JcuIC@3SUgAPV^}HL=TASf;?|* zb|>;-bpPnE;3eYLv!YwR=j|43yj;igEb9M0Z${6;)cjkp33M!|X{KS;dyxg_B$d{u;DGdsxp_R8>_m@r+kUvL#F;v|Q^! zKHi@hlw_d%Q)vLFJniF}xq7Ok;&Tsem6J9qSI>(&=riW{$9o<$auz`Rrv(7UieadW z1f+l~3BxrwF8IZ$?Jm4_2@p=V-J4*{)w`QTv8wT0rhV4`V>Yz_%xj$|1rUxH!mJJN z{>A6dzX4(P&#^m>Ma2t}DKhM@mobc8daMY}N+1?y0_K%xvbyjnp2d~t;S?C-S<)0@ zg8x{opZJ^N}O3Ge0)hOIhjT0Mp?S z`c4fu$R9wIz{Dz;(=QoIAsON#%HWqe*c!Qfa568S1slAi0UQTjxx_v5EIFHU*>JQe z4LDbB?2w_yRDf3O>_@05reyotU+!GDx})=Iu&MaTr3J_!#989K26V_$5Sn(mIqDoZ z(-g6K=Pm&~s-QH9nG>JgrctOp;VA7dB*3^NwONhqJ1C7nf>&ZS~sPE}Rh8v%u~}fv~WOMHRo6 zpM`o+c7UOs^f!IqCa2ruj{(=i>%9Ouc(&|T4c8r&3P5g5EH#^oTqb|~x2nD@Luy{e zn=Y*Ut7azYBo3jkV3gsfVH-~TfnIP}0Xlw;z>?nG$pr_0%v&5}9?rka>#e>D2-#zyJo9cYe`og?h>s`Y9SU;MPpr z34Mei(DocQ;ZmZDGASEPcFX2Wd;Y$d3nGqv{#OPhMyK zD=jL0B0FULS1_z}XdZpH6-fU6+5s;ei0ms zm0xub6N2;pkvPGAI$~|Z^ORuiHkZlx3f|y3GvT>WF`^+b{CjeMgv)sPv0-|{USa_N z3o$OUv^?F)A&ZKdmd{-=^5morx5f!QWN6aG4ZDSJkWAtmzm`V5Zt>)oWTu3`f429_ zbK{JDo*bAl!|W)zyOYR z{ztpR;kEA#V~_sAvtsIaC||`zpzrr0CK>B$ZS%}?Bhn&@T_v#*Gpe)Z=2)iyN2NpT}sazx4yY>fB>Edn=sug)CdeN zR2dKWm5%tZbCZCSwGr^bvd^0*{VJLxX7O6I$ zm@qbjk&(Z8G&sNk|ah-n5pQ7A!xL^DVtuiiq zY&|V3La!{%Tq*wvpPQQijOr8Iqg-S|G_dqJXH`rlsg(M%b-E?hHr7V@Rf{Joj+T{H zl#iNUZ=K!pRi%T;$}Pz9 zqL$t36UX$03YC%TP(ymnt&^JqLq>Ak_*DOf9N%>Nt zRZ_E^KGZa(&mn(y8KEK-lC?~GqxLBX~RkYL1=)^5&@+*%2;!Q3spMmxA z-UoR-0X+kdZbK^}hwOuSBWP!$r~Q0)qKco3RD8nFDfaCU87uj^S)RE$Z*(bNlF=lw zs9$T8EVT`i(~j42@}3q=w7-y2(7Y_Zk3(Aa2QSGA9)%x+PS#)RTV|E#2XRmZg7j_+ z`dDrq)a1iSac>5v)e1xC9b{%$gP&DsO+{jw*`Aw=vIN6~h6+>3m~Z!f8SJ}^FLt@u znI^uh+EyiR;Ti0?&lo>2N{NkidDA*FSU8pJia#YpMCJ&8j2d{I*|a%T_@=>cgphM? zIu@oWlQ1dC8gGtXYWj-U<^n4RI)V~|6WwR3=XUooLGgaH>*R{9K1)G^A95D>HehkC z8>{HYkC9SkAIEw_NrRzKgZB||L~uSa{qeH21ABN7f}p$@Wpz^9f?wzfAr<>?r*o$Hw0nsU_Y z)E(s2fD_$iyKH~6yRw_ZdQylVG$1Be@yB>CvqPYE>?NU1yh!3n%PP(U`xx3-M;^;2Fle#FU%ou5HjEI_N;g(B#+K_JTVG zan&lvC%lRBfLePizx>-_d*)+reN4hXnfs#3fx4+1g95{ZFf?AG{WjE}3r z&$PL%$+h!G*UG~%e7OVX2~_z{CX+SEgd9}dQYWNa1d6)y;12pVL~1()(wlsc7uAJJ zaTKv2{Y5srsU|j|A?S8m723ZyTG&k45_^|gelkxJ^KmTf5ATOtfO)k1GxhVaFke5tyriBXt0^7JG1vLe zuE&c%;Pv4N9s=BqgU4h>O$%1Oc@#J%6CC`max8YeR<;}1_ty_nTlGI2{Kxb#6{>s` z+W7a#2dL&-NZ)a3UEMsBMC@aeftO@Kf2j)%MT_7@^Yl);O%XyAvp34LWU7atotFtb zkxCmUURh#|SpR100sfOj{!VF8s9&RcTg`{sTX{Js6hz_SaTH!s%z0f2&kuYraS6Bf z#G%!4?0lr~_Aj66Pt&Q5r*jNsFyi>^TIF}!w(R*xJKKiYWF?%UHQn+*Fl{=7nZAtUE`^J$X~A6r3DBf!YWGCmZR>9dgKy>Ptw1c-5selOn86m!iA8li#| zjHmGL|E2mXt9r#_ryvDwJ1~S4OcIfi%yMlv#@yh!45f{{8|=|pp{2=Wx6z6A7%Hyz z9A8JsK)!1RA@*jAG$t+YT7O<->Wugm&Jfx9^on9dZj|tZmMD~9zNBO6$CKtIx2KTr z?0H6HPih{OjLLVJryER$IrBoy9Y4z(=Z?`vup*F(;(C<6j-J+a$Ux3adoiCBZ)s#g z9XxWH&QsJuy^tjalhRY}c-Y0?l!pe5d73!lk55@F^WPjz)IK%R_({SVNpd$>&LmEJ z&x&b0f_ALK%X}r2++#ytDQ3eBQr49ot_9zAw`eIL#a(mPltOT~gc`C+F%K2Y;59n@ z38KMbIF{m{%-eFA`qIqzHnz2kqaS&JNrX_^Zs|#V>R0leM*LUlN z&Z0o$LRN`*uy3P3qd)Fdaknd6A-Bz1M~>m_)eA?2C9%oiz=`67ev}2d!_Rah>MGvXE{*S$k)7@~yRL=_yI#HU zTH(E1$+ttkq54Vk*71|E~ zM!Up&U;m&aQ?p+Es<8LBTDN4AgWs=xK6vUnUkB=pRUu>ShOy3zlsMHY;^*3!{70Z0 z`G=O8mh-^4wAfZ2*CVhf7_IA0TU<7n@4BZU+4gs~lT}Lg1owN8HvE~m zY47_&hpCt6u$yOG*kV$BE=FFWdd$PowwyAuA#-&3ZWf-qHwo=j)lI{vapA~PDF(e< z^ZTBK#T}86QrPr3eRF=t@n`M=x;?Ggr|snXPWr)!F5YaO6o;TC^iagf=LODNsB2bz z2UZ6gqA;s}27%;nY6xa9UV0tP-xUUdklwMp{6zTXyNN*z>-)?G#+g+?J8t=_q57+HxI2E**j3+~a=pCGALVv!G z;1m`bD0D31bY!3D=cC&LD`32XzhVuZqiIx;6Dt#lhi0-8r{hG4lcswM*sasF=nlr( zyy4%SFuu?8Rw&b4op$~N%g&9g!B9zNLzC%Z!`d}J1!+f)G2UG>jkj%cn|2}hEKyF= zBz>?Wd=#8n|DuU>HA?NB)CO{?re9 zJUO)Ancbjft28srp;!KU!~!9`%eEElfsnOEW<(eo%Mwo2Q+D3JgY+v{$WPWD@uq6n zq=hR+>lbCHnG_zo+c<^I5);t7=vp~6Eu_E{3yIStyDut`#k@o4OEnS|#%<+tCWpPX zl!Lin@!%o#&y+}+II2dH(?@wUV4wmj!KP+6y|va-P6xeGRg+wsJedSPo&2T*j(39xs||-AcW3o%ShxyYqJl|o z-FW-Al58$8a!V`jqjJ)}eO+kI4?V#G$MiE#I|EIMi*R%B9@R z?(bSVt6QDKDAswsb^n%{;YKrZY9*(3Rh254ICx@_SShRKK1V4kMiQ%!fpyvxBA^(P zw0VAtolhO^R2gUHe+$c+l7H*s7>Ak(KI^Ntdiogb%nZi zk=(J7*wafD4tk8u9xOd~w$5qu>hkjqNHdK%u}@*P*~S<02$ZXeA9MPZr#x|Ngike| zApA8Ie7SnLv(fJvaJ})`96B(gS$|o*xG%Qs6gkr zr<0}%HBMJ>f5#kt0u3ZzifwM1T`l`{CU3yp>rnOppXGr!16EV0^{JQxCa84_Lzj}Y zXfb_`mD{p&ri9ZN=Dcg9XmPm+ zhseE`2G$@;JZdsfL}u)rg6^J9n)@>)yL1IU6ZgH1lg+HeU00Jl#mYqp;+5_}jcR~K zK3Ci%*5kaU|3m<6_mXsaJoCt1N0mtWmL^7(eTHQXs+hdmyT?oG+rk;FEaSvNt%~AMtY_|z*AG7*`wJPzwzV2HCD)O@ zEOz1O+P)_4DAHeMDJ%iKXwDznw|oR#I=hS7zu+%Mv;)DcQ*1vjALFz(=Kb|I@p>*5*G3Mt zvCGV{YIW3N*vk4!0NZ9f#qu%MmRm!URSi3OYX)bXBdW zMky*B9lN@mG5wN1#J?c#^K!2wtQ_l*NIK%IFc`C5Pl%CH)}Nb}LbLSJ6O4?uQ)aWW zvdP_Nh`j!$WEe3vA+Fre{Z2D&$tFA#M)z_T&DkO!N2b+&W_2aU)~+Wk}tEku>e` zVP8ov2yWzg*4kC>$H5dfE<qh(zt zK(lkBg~OE%5vE4&{Wt4fwCs#X05KRt;CrM9|1uhVO~M~)X3sK)Bf@2QjADQ-l#cmvGO5Hi3zOx z%98~>mKw^!^y#O*ojGfKqx%q{zO}3C+*aObRuuS7B9NDu+LaY$*}8taBK;}ipN36s z-nUJ@fa^*o6|x#ul=IuQI+W?sUVGNH<7=i2?eodR`R|dsP|Tgxv##p>@DH)HRKd^c z*vZk3i^o%Z-So`!l=7Ybl`7_SiG+vwTiA0H8yr)_D4Z^Xsdcn(SXplqyp^j9|d{-TFU`WAI24fgvpZ8z3a2 zk^wifc74`4S(VCCR&WkI3r^H+S`zC0Up?xwtS>~R*p64{vw7Xi#!>C-4`?{W(lY3% zsP8fV+Y;}?N<;G%9$Iuq(^W7^O<9t)-$5}$0vuCX+HC*tTh#8)i@7%(d2w_W%Z6+@ zz+e4%Xv72e1!g|JIi$m~<4^kEj`*9P6ljIbtt+IW;M|1b;d4l|k6f&h;^QJJMDu#R zphr!}VJ$8Ce0oL-%iCy}a{iX|@@xP{g*-<_o#I`$93*C7gTnU=Cvrscf0x9vJL@u1ZehH)5y~{; z6N<~<98x~J*UI09Zx}zY!GL_BXZK!eJ?g23gbn)_a5wF(nwpxhpKTw473{2s<0POM zK%s)Et^0#mFh`I0E)bmp8qU%L_ep!fc@4(W*}n6KVup;o_}nsWT|tS0@D~ltHF4}8 zkBp<+A-(fGjlx3LU8tzb2eU(}mc@588@oX^4TY2LvWK|f89XkA+;xu3Fc$6M;OGb3TRXAfe+#$|IeBrV)N=PwZcmb6#D*^We;^xPd;+qvpnkWC74YMPG>!ffnA|&{Qm8$Tb4nF za35CkCb;SNBNPF_P3wnf+Y$(miqQy9{2%i4+;RtuE3ky;8ZO*gZvpq=`uZ9?UNmlR zacGNE_pJc-Ya-mI84C;q;_B+N+J{G^qgl}{dgfWy+_*{&5h4D{DW!P1X{ zBTIYiyx(C^|93w{L#OYNs%E>O#zmIS!z3EuHmQ|r`0!63M2lf!$JB7Y&sPg??7>+74KC^&_6?(#!efp~BqL(1#9hncrJ3u#Va=l(e~A^ z&jNJy6cjW*Mae_!d3j|EXq&bdi7D{b;A`-WjaR(R=0I7HOyFIx0b!?`{>;PVbPBi4 z$t%<`{KZIf5kG~zsWFnzJMjUsfi=q0T=la4I2fT{f+n9j>A+N2_5lB!s#+ z;ifYPPQFY+72{y&vqaUrsq(ZayOz@ngu-65UaFs$ojpBSOt{*5m3=1`y08C5!lty> zwoecaf}*0L;^j*qnOKek-(~TiJ=2bz9B%rqA_W~C9i{I9A6}U{zPjUH_DF$M#O?ZR zs6Z(Hez#d-RdRw!u_Tu2RuVsXfOQB8Aq`U`|l-_7zV~Aj) z)|zw=Cht#<%bzkTU?FI;`Fqo{N0N2jT>5!`k&{BOm$k+1tMzilQvhlAxnxmr5@7#7 zrz2hstzvommXQzbiT_fk*Zui4PM|*>3k%Eb-F1IxzfXL4h7v|`Uk-iFW7)h zz)1hy_IYK_h`G5rWhSfXH`2YWz$B67in(Nvc_$sG%+R?cHAF-xVLh&Q`5=4`g<46X zds=o5laD1*k6V$?}rLhde|fJMxlO(tv%s?op@1RoW+CNT%l&P;poxtfB!BS z{jL8}@O9KvAWSOFTPDoM_Z_y>$KXSk`%>k}4|$Fh=2NBN3e@$6PAE+j!k@^at2=N2 zBeidXiUoc?^aSymKjqcogLB^otPzPw2*RG>-T)dAve4FxycS4X4r(;W(R_XG8Qf+$ z?_0e&UW3~Pf?EX-)f0m!pC8O`)%5I^szREZLB4w#8vH{H*Yk~+Orhl+W$m|OsoIl1 zl~U^kSYbIB!Jg7w-@<;Qf7lL0vNM{hHVksC_nyCi)02YBo&zQe ziNY1%n&C{i0>ZR+Ke2_4W9-#7I4qY2Sq!F+C^KbKxP@CzP`^G0;fFQ9puqDn&26?F z!J4+-+5UHxhy@6&ZT|d8e7crnIjZ?%j3g>H9nD-eOLsG+6dkXW5C{>_J@2pcwk3}=J*FT(VRchCMr2+=2&kxGhzgT!Y2 z4UC9^iXutsr;>dF0?+SISh*o5Zg^CMUsIH`*m0u);Gaxk)CzA5+f$Ysw>4Tbd_0-b zqN1Wgc?sf>&@hb>7U`8~4`z)e)970T3!nzm9dL&)!70VoVd%eTXUp=NxaH(mluGKU2&ANiBN zy3(|)>zfZ(_gH~yrI3uT^MfQ5Ndg|;GUz28Af|0|TdP{x=#Z@<2!0vmL_i=@R#Bls z`9tlG_8fS6{tuub5SrJa{D1O%_h26#62wi?ZkS6L{|TLrzUh~Z*RTR`;^uIDqfVy`Mx zU(n&ilk{CxQQMj;0)pVaW1x5PmqgXX=YA=!8G80NHJDUo%9(HR!0vJW zXSIu~z^VJnWMP&>WN0!Q)ob4R_p@b`zW#n9pN){4qPmI(uhA}t zzlc5Ut@qYNeoG09?a52vdvUX%@$(apq58|n5hi*@$Ni(oNa2V1smMW7_QU}b!l3)w zoBc4qkyOqXr9cT3eLv`&g2M0aq45xBRLLsCcV{D!Y(BTATSZOH@A_O#DOYyyE-%=0 znDNb<#Tp;4g^4=J1fkT}w0n5^B0xc9mpK%?6)V}o6@?MU?gA-8641g7&C?U6(!Y~W zww(wE&@K~la<nCu%Ybx-! zi3th)8z+5Av~Df6MOD^7e;!!ow6>g2)i0zreYq3c*(q%;zh2Q3_+tJP43%vgU_4Pd zYb{@TFHDioasK-WF#MR97^2IZc#7Q6j~g3e-WQXtLw+he?}j}(f7pV@%_+x>AJ(e0>{t1Pze#h7VE5FJtGE2?`pX)k*}ns zr4^Zz`?xSMq$dL1ksOnyjXf0uj59|kNAF)_7VJ509)p>gq7XDJEJ=5epVEzuiGxBN z9KbWnkb{D|8PN!IJquBkIk>peh22_|Fq1{0(g`d(CrN>UfzX#igcwXHV~F{=k`-*bxb^NFn5n21 zPQm~fT%bNVJq-&B15Px%a5$U-n{DOcHvatFY$Wx%-XN{@GfZ)wyJ*@Jrrm1bb2c6M zVc|9MIFMng%mLDD4oD!Z{xOS*jo~33zPoaVIL1nW!`uAXizL0Nhk>`A14_*ws+tE9 z;2)K+p#$oV=6|k|lJ>}4m+r1f^t|FbR_;zIGP-5cPqv0q_AK|XfhsKF6~>v3B$!Lahm}M$Itg7xwQ1~XH@{! z(D!pcc|o7!c5x^P09GP)h57k?eZ%D3zTTfcVK^5T>X`QxTx*ByRI&7|-=M(p<%79+)abnzd@6_pZM zbnoVvNZ#PTFvJ8)>JNhX`t_GV1_FYDZr=Btw@SLIz!4}SC%3kyhR@YVa*@XpPAbDM z1r1AN-nqDn77K2tuuJakMb`SA=2Q!VkquW5BYR_|M<|uRm9Nu zAr#?xBM^+Ly?!yrSrj~miL1~)mc2->#~3SA>+91UvIZux#wyF~^$;*@@nLVr{EJq0 zfv~_d^U$5Ovol<+9s-;c$Yf--PL9TEa%>+YwQ7D*@SdzvJkHF_B&Ec%Tb|`ni3KgJ zYuw%4>CRVu_=)0uJH-81b58Ag0QB*Gi`b|S4D{gzqM{x*Jaqr;WTWxja1;J9=`14`|WppA>X` zcUHUJ|NI#onZy6sbTk$=;mfo4$Dkt!ok%fC?~|IA+xn3~kO6K2Gkj-<+-F}6s;sF9 z+?jB^!KiX444O?zm4P<4-ex#;G~A~=VvqXY-;%A#)oUN5);qyny(GFvfxky)dpp>4 z++1CqZ94<$d$5_WnTG>`NED%e^LyzxCQ}->pRT!j(&EViTf z5c}($g@lB}?!(jc^mKN!k%r^8()A7A(k5}}?d1W}n>QGr=#eC$lvfBom}xX@_UjuP zg6H$gt}}I;JJs)!t0-GVaPkNRO=Y$uyI8f|SFeua)_>^68*dKj9qrI%)YaDua+nQ=%l8AAB5-_#wd~Vsc4_Mxrq1kZJX=BVaE04F z4+iyTYxNOh6F?Z>-rg=dDjSYOqaYRX?u3EJv?Ce86Ek@I0>7+K*QHS#zk>}-+u8FW zIY|#E@<{F-e`Kzfi`^p}>Z44AIz+kPx9%WCLrhEz_7h+R0d{kPj4A+Ne>W{SzW0Zs zm8+BDlSkYj{u>4V0b@V(L}h^>|GyWAy#M{j|NS3`b^m>%uHg|&_1CLvtMosQ|K9l^ ME(a|U)&KJU0L_5J3IG5A literal 0 HcmV?d00001 diff --git a/docs/source/_static/text_detector.png b/docs/source/_static/text_detector.png new file mode 100644 index 0000000000000000000000000000000000000000..b12c2e0596fd15233e3dd8fc70048d81dfe858d8 GIT binary patch literal 72024 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 FzX2x3G@bwe literal 0 HcmV?d00001 diff --git a/docs/source/ammico.rst b/docs/source/ammico.rst index 7ccf1c5..f066985 100644 --- a/docs/source/ammico.rst +++ b/docs/source/ammico.rst @@ -33,23 +33,7 @@ faces module color_analysis module --------------------- -.. automodule:: color_analysis - :members: - :undoc-members: - :show-inheritance: - -objects module --------------- - -.. automodule:: objects - :members: - :undoc-members: - :show-inheritance: - -objects_cvlib module --------------------- - -.. automodule:: objects_cvlib +.. automodule:: colors :members: :undoc-members: :show-inheritance: diff --git a/docs/source/conf.py b/docs/source/conf.py index f37c8fa..da0a291 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -24,6 +24,14 @@ extensions = ["sphinx.ext.autodoc", "sphinx.ext.napoleon", "myst_parser", "nbsph nbsphinx_allow_errors = True napoleon_custom_sections = [("Returns", "params_style")] +html_context = { + "display_github": True, # Integrate GitHub + "github_user": "ssciwr", # Username + "github_repo": "AMMICO", # Repo name + "github_version": "main", # Version + "conf_py_path": "/source/", # Path in the checkout to the docs root +} + templates_path = ["_templates"] exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] diff --git a/docs/source/index.rst b/docs/source/index.rst index 4dcfc4f..7f8401c 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -11,12 +11,9 @@ Welcome to AMMICO's documentation! :caption: Contents: readme_link - notebooks/Example faces - notebooks/Example text - notebooks/Example summary + notebooks/DemoNotebook_ammico notebooks/Example multimodal notebooks/Example colors - notebooks/Example objects notebooks/Example cropposts modules license_link diff --git a/docs/source/notebooks/DemoNotebook_ammico.ipynb b/docs/source/notebooks/DemoNotebook_ammico.ipynb new file mode 100644 index 0000000..144e9f5 --- /dev/null +++ b/docs/source/notebooks/DemoNotebook_ammico.ipynb @@ -0,0 +1,447 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# AMMICO Demonstration Notebook\n", + "With ammico, you can analyze text on images and image content at the same time. This is a demonstration notebook to showcase the capabilities of ammico.\n", + "You can run this notebook on google colab or locally / on your own HPC resource. The first cell only runs on google colab; on all other machines, you need to create a conda environment first and install ammico from the Python Package Index using \n", + "```pip install ammico``` \n", + "Alternatively you can install the development version from the GitHub repository \n", + "```pip install git+https://github.com/ssciwr/AMMICO.git```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# if running on google colab\n", + "# flake8-noqa-cell\n", + "import os\n", + "\n", + "if \"google.colab\" in str(get_ipython()):\n", + " # update python version\n", + " # install setuptools\n", + " # %pip install setuptools==61 -qqq\n", + " # install ammico\n", + " %pip install git+https://github.com/ssciwr/ammico.git -qqq\n", + " # mount google drive for data and API key\n", + " from google.colab import drive\n", + "\n", + " drive.mount(\"/content/drive\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import the ammico package." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ammico" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Step 1: Read your data into AMMICO\n", + "The ammico package reads in one or several input files given in a folder for processing. The user can select to read in all image files in a folder, to include subfolders via the `recursive` option, and can select the file extension that should be considered (for example, only \"jpg\" files, or both \"jpg\" and \"png\" files). For reading in the files, the ammico function `find_files` is used, with optional keywords:\n", + "\n", + "| input key | input type | possible input values |\n", + "| --------- | ---------- | --------------------- |\n", + "`path` | `str` | the directory containing the image files (defaults to the location set by environment variable `AMMICO_DATA_HOME`) |\n", + "| `pattern` | `str\\|list` | the file extensions to consider (defaults to \"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"avif\", \"tiff\") |\n", + "| `recursive` | `bool` | include subdirectories recursively (defaults to `True`) |\n", + "| `limit` | `int` | maximum number of files to read (defaults to `20`, for all images set to `None` or `-1`) |\n", + "| `random_seed` | `str` | the random seed for shuffling the images; applies when only a few images are read and the selection should be preserved (defaults to `None`) |\n", + "\n", + "The `find_files` function returns a nested dict that contains the file ids and the paths to the files and is empty otherwise. This dict is filled step by step with more data as each detector class is run on the data (see below)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image_dict = ammico.find_files(\n", + " path=\"data/\",\n", + " limit=10,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 2: Inspect the input files using the graphical user interface\n", + "A Dash user interface is to select the most suitable options for the analysis, before running a complete analysis on the whole data set. The options for each detector module are explained below in the corresponding sections; for example, different models can be selected that will provide slightly different results. This way, the user can interactively explore which settings provide the most accurate results. In the interface, the nested `image_dict` is passed through the `AnalysisExplorer` class. The interface is run on a specific port which is passed using the `port` keyword; if a port is already in use, it will return an error message, in which case the user should select a different port number. \n", + "The interface opens a dash app inside the Jupyter Notebook and allows selection of the input file in the top left dropdown menu, as well as selection of the detector type in the top right, with options for each detector type as explained below. The output of the detector is shown directly on the right next to the image. This way, the user can directly inspect how updating the options for each detector changes the computed results, and find the best settings for a production run.\n", + "\n", + "Please note that for the Google Cloud Vision API (the TextDetector class) you need to set a key in order to process the images. This key is ideally set as an environment variable using for example\n", + "```\n", + "os.environ[\n", + " \"GOOGLE_APPLICATION_CREDENTIALS\"\n", + "] = \"/content/drive/MyDrive/misinformation-data/misinformation-campaign-981aa55a3b13.json\"\n", + "```\n", + "where you place the key on your Google Drive if running on colab, or place it in a local folder on your machine." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "analysis_explorer = ammico.AnalysisExplorer(image_dict)\n", + "analysis_explorer.run_server(port=8055)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 3: Analyze all images\n", + "After having selected the best options for each detector module from the interactive GUI, the analysis can now be run in production on all images in the data set. Depending on the size of the data set and the computing resources available, this can take some time. Please note that you need to have set your Google Cloud Vision API key for the TextDetector to run.\n", + "The desired detector modules are called sequentially in any order, for example:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for key in image_dict.keys():\n", + " image_dict[key] = ammico.TextDetector(image_dict[key], analyse_text=True).analyse_image()\n", + " image_dict[key] = ammico.EmotionDetector(image_dict[key]).analyse_image()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the computationally demanding `SummaryDetector`, it is best to initialize the model first and then analyze each image while passing the model explicitly. This can be done in a separate loop or in the same loop as for text and emotion detection." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# initialize the models\n", + "summary_model, summary_vis_processors = ammico.SummaryDetector(image_dict).load_model(model_type=\"base\")\n", + "# run the analysis without having to re-iniatialize the model\n", + "for key in image_dict.keys():\n", + " image_dict[key] = ammico.SummaryDetector(image_dict[key], analysis_type=\"summary\", \n", + " summary_model=summary_model, \n", + " summary_vis_processors=summary_vis_processors).analyse_image()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This can be done in a separate loop or in the same loop as for text and emotion detection.\n", + "\n", + "The nested dictionary will be updated from containing only the file id's and paths to the image files, to containing also all the image data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 4: Convert analysis output to pandas dataframe and write csv\n", + "The content of the nested dictionary can then conveniently be converted into a pandas dataframe for further analysis in Python, or be written as a csv file:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image_df = ammico.get_dataframe(image_dict)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inspect the dataframe:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image_df.head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Or write to a csv file:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image_df.to_csv(\"data_out.csv\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The detector modules\n", + "The different detector modules with their options are explained in more detail in this section.\n", + "## Text detector\n", + "Text on the images can be extracted using the `TextDetector` class (`text` module). The text is initally extracted using the Google Cloud Vision API and then translated into English with googletrans. The translated text is cleaned of whitespace, linebreaks, and numbers using Python syntax and spaCy. \n", + "\n", + "\n", + "\n", + "The user can set if the text should be further summarized, and analyzed for sentiment and named entity recognition, by setting the keyword `analyse_text` to `True` (the default is `False`). If set, the transformers pipeline is used for each of these tasks, with the default models as of 03/2023. Other models can be selected by setting the optional keyword `model_names` to a list of selected models, on for each task: `model_names=[\"sshleifer/distilbart-cnn-12-6\", \"distilbert-base-uncased-finetuned-sst-2-english\", \"dbmdz/bert-large-cased-finetuned-conll03-english\"]` for summary, sentiment, and ner. To be even more specific, revision numbers can also be selected by specifying the optional keyword `revision_numbers` to a list of revision numbers for each model, for example `revision_numbers=[\"a4f8f3e\", \"af0f99b\", \"f2482bf\"]`. \n", + "\n", + "Please note that for the Google Cloud Vision API (the TextDetector class) you need to set a key in order to process the images. This key is ideally set as an environment variable using for example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "os.environ[\"GOOGLE_APPLICATION_CREDENTIALS\"] = \"misinformation-campaign-981aa55a3b13.json\"\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where you place the key on your Google Drive if running on colab, or place it in a local folder on your machine.\n", + "\n", + "Summarizing, the text detection is carried out using the following method call and keywords, where `analyse_text`, `model_names`, and `revision_numbers` are optional:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for key in image_dict.keys():\n", + " image_dict[key] = ammico.TextDetector(image_dict[key], \n", + " analyse_text=True, model_names=[\"sshleifer/distilbart-cnn-12-6\", \n", + " \"distilbert-base-uncased-finetuned-sst-2-english\", \n", + " \"dbmdz/bert-large-cased-finetuned-conll03-english\"], \n", + " revision_numbers=[\"a4f8f3e\", \"af0f99b\", \"f2482bf\"]).analyse_image()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The models can be adapted interactively in the notebook interface and the best models can then be used in a subsequent analysis of the whole data set.\n", + "\n", + "A detailed description of the output keys and data types is given in the following table.\n", + "\n", + "| output key | output type | output value |\n", + "| ---------- | ----------- | ------------ |\n", + "| `text` | `str` | the extracted text in the original language |\n", + "| `text_language` | `str` | the detected dominant language of the extracted text |\n", + "| `text_english` | `str` | the text translated into English |\n", + "| `text_clean` | `str` | the text after cleaning from numbers and unrecognizable words |\n", + "| `text_summary` | `str` | the summary of the text, generated with a transformers model |\n", + "| `sentiment` | `str` | the detected sentiment, generated with a transformers model |\n", + "| `sentiment_score` | `float` | the confidence associated with the predicted sentiment |\n", + "| `entity` | `list[str]` | the detected named entities, generated with a transformers model |\n", + "| `entity_type` | `list[str]` | the detected entity type |\n", + "\n", + "## Image summary and query\n", + "\n", + "The `SummaryDetector` can be used to generate image captions (`summary`) as well as visual question answering (`VQA`). \n", + "\n", + "\n", + "\n", + "This module is based on the [LAVIS](https://github.com/salesforce/LAVIS) library. Since the models can be quite large, an initial object is created which will load the necessary models into RAM/VRAM and then use them in the analysis. The user can specify the type of analysis to be performed using the `analysis_type` keyword. Setting it to `summary` will generate a caption (summary), `questions` will prepare answers (VQA) to a list of questions as set by the user, `summary_and_questions` will do both. Note that the desired analysis type needs to be set here in the initialization of the \n", + "detector object, and not when running the analysis for each image; the same holds true for the selected model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image_summary_detector = ammico.SummaryDetector(image_dict, analysis_type=\"summary\", model_type=\"base\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The implemented models are listed below.\n", + "\n", + "| input model name | model |\n", + "| ---------------- | ----- |\n", + "| base | BLIP image captioning base, ViT-B/16, pretrained on COCO dataset |\n", + "| large | BLIP image captioning large, ViT-L/16, pretrained on COCO dataset |\n", + "| vqa | BLIP base model fine-tuned on VQA v2.0 dataset |\n", + "| blip2_t5_pretrain_flant5xxl | BLIP2 pretrained on FlanT5XXL | \n", + "| blip2_t5_pretrain_flant5xl | BLIP2 pretrained on FlanT5XL | \n", + "| blip2_t5_caption_coco_flant5xl | BLIP2 pretrained on FlanT5XL, fine-tuned on COCO | \n", + "| blip2_opt_pretrain_opt2.7b | BLIP2 pretrained on OPT-2.7b |\n", + "| blip2_opt_pretrain_opt6.7b | BLIP2 pretrained on OPT-6.7b | \n", + "| blip2_opt_caption_coco_opt2.7b | BLIP2 pretrained on OPT-2.7b, fine-tuned on COCO | \n", + "| blip2_opt_caption_coco_opt6.7b | BLIP2 pretrained on OPT-6.7b, fine-tuned on COCO |\n", + "\n", + "For VQA, a list of questions needs to be passed when carrying out the analysis; these should be given as a list of strings." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "list_of_questions = [\n", + " \"How many persons on the picture?\",\n", + " \"Are there any politicians in the picture?\",\n", + " \"Does the picture show something from medicine?\",\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Summarizing, the detector is run as" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image_summary_vqa_detector = ammico.SummaryDetector(image_dict, analysis_type=\"summary_and_questions\", \n", + " model_type=\"base\")\n", + "for key in image_dict.keys():\n", + " image_dict[key] = image_summary_vqa_detector.analyse_image(image_dict[key], \n", + " list_of_questions = list_of_questions)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The output is given as a dictionary with the following keys and data types:\n", + "\n", + "| output key | output type | output value |\n", + "| ---------- | ----------- | ------------ |\n", + "| `const_image_summary` | `str` | when `analysis_type=\"summary\"` or `\"summary_and_questions\"`, constant image caption (does not change upon re-running the analysis for the same model) |\n", + "| `3_non-deterministic_summary` | `list[str]` | when `analysis_type=\"summary\"` or s`ummary_and_questions`, three different captions generated with different random seeds |\n", + "| *a user-defined input question* | `str` | when `analysis_type=\"questions\"` or `summary_and_questions`, the answer to the user-defined input question | \n", + "\n", + "## Detection of faces and facial expression analysis\n", + "Faces and facial expressions are detected and analyzed using the `EmotionDetector` class from the `faces` module. Initially, it is detected if faces are present on the image using RetinaFace, followed by analysis if face masks are worn (Face-Mask-Detection). The detection of age, gender, race, and emotions is carried out with deepface.\n", + "\n", + "\n", + "\n", + "Depending on the features found on the image, the face detection module returns a different analysis content: If no faces are found on the image, all further steps are skipped and the result `\"face\": \"No\", \"multiple_faces\": \"No\", \"no_faces\": 0, \"wears_mask\": [\"No\"], \"age\": [None], \"gender\": [None], \"race\": [None], \"emotion\": [None], \"emotion (category)\": [None]` is returned. If one or several faces are found, up to three faces are analyzed if they are partially concealed by a face mask. If yes, only age and gender are detected; if no, also race, emotion, and dominant emotion are detected. In case of the latter, the output could look like this: `\"face\": \"Yes\", \"multiple_faces\": \"Yes\", \"no_faces\": 2, \"wears_mask\": [\"No\", \"No\"], \"age\": [27, 28], \"gender\": [\"Man\", \"Man\"], \"race\": [\"asian\", None], \"emotion\": [\"angry\", \"neutral\"], \"emotion (category)\": [\"Negative\", \"Neutral\"]`, where for the two faces that are detected (given by `no_faces`), some of the values are returned as a list with the first item for the first (largest) face and the second item for the second (smaller) face (for example, `\"emotion\"` returns a list `[\"angry\", \"neutral\"]` signifying the first face expressing anger, and the second face having a neutral expression).\n", + "\n", + "The emotion detection reports the seven facial expressions angry, fear, neutral, sad, disgust, happy and surprise. These emotions are assigned based on the returned confidence of the model (between 0 and 1), with a high confidence signifying a high likelihood of the detected emotion being correct. Emotion recognition is not an easy task, even for a human; therefore, we have added a keyword `emotion_threshold` signifying the % value above which an emotion is counted as being detected. The default is set to 50%, so that a confidence above 0.5 results in an emotion being assigned. If the confidence is lower, no emotion is assigned. \n", + "\n", + "From the seven facial expressions, an overall dominating emotion category is identified: negative, positive, or neutral emotion. These are defined with the facial expressions angry, disgust, fear and sad for the negative category, happy for the positive category, and surprise and neutral for the neutral category.\n", + "\n", + "A similar threshold as for the emotion recognition is set for the race detection, `race_threshold`, with the default set to 50% so that a confidence for the race above 0.5 only will return a value in the analysis. \n", + "\n", + "Summarizing, the face detection is carried out using the following method call and keywords, where `emotion_threshold` and \n", + "`race_threshold` are optional:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for key in image_dict.keys():\n", + " image_dict[key] = ammico.EmotionDetector(image_dict[key], emotion_threshold=50, race_threshold=50).analyse_image()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The thresholds can be adapted interactively in the notebook interface and the optimal value can then be used in a subsequent analysis of the whole data set.\n", + "\n", + "The output keys that are generated are\n", + "\n", + "| output key | output type | output value |\n", + "| ---------- | ----------- | ------------ |\n", + "| `face` | `str` | if a face is detected |\n", + "| `multiple_faces` | `str` | if multiple faces are detected |\n", + "| `no_faces` | `int` | the number of detected faces |\n", + "| `wears_mask` | `list[str]` | if each of the detected faces wears a face covering, up to three faces |\n", + "| `age` | `list[int]` | the detected age, up to three faces |\n", + "| `gender` | `list[str]` | the detected gender, up to three faces |\n", + "| `race` | `list[str]` | the detected race, up to three faces, if above the confidence threshold |\n", + "| `emotion` | `list[str]` | the detected emotion, up to three faces, if above the confidence threshold |\n", + "| `emotion (category)` | `list[str]` | the detected emotion category (positive, negative, or neutral), up to three faces, if above the confidence threshold |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Further detector modules\n", + "Further detector modules exist, such as `ColorDetector` and `MultimodalSearch`, also it is possible to carry out a topic analysis on the text data, as well as crop social media posts automatically. These are more experimental features and have their own demonstration notebooks." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ammico", + "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.18" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/source/notebooks/Example colors.ipynb b/docs/source/notebooks/Example colors.ipynb index d7f0bde..f622575 100644 --- a/docs/source/notebooks/Example colors.ipynb +++ b/docs/source/notebooks/Example colors.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Color analysis of pictures\n", + "# Color Detector\n", "\n", "\n", "\n", @@ -64,28 +64,12 @@ "source": [ "# Here you need to provide the path to your google drive folder\n", "# or local folder containing the images\n", - "images = mutils.find_files(\n", - " path=\"/content/drive/MyDrive/misinformation-data/\",\n", + "image_dict = mutils.find_files(\n", + " path=\"data/\",\n", " limit=10,\n", ")\n" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We need to initialize the main dictionary that contains all information for the images and is updated through each subsequent analysis:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mydict = mutils.initialize_dict(images)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -100,7 +84,7 @@ "metadata": {}, "outputs": [], "source": [ - "analysis_explorer = mdisplay.AnalysisExplorer(mydict, identify=\"colors\")\n", + "analysis_explorer = mdisplay.AnalysisExplorer(image_dict)\n", "analysis_explorer.run_server(port = 8057)" ] }, @@ -117,8 +101,8 @@ "metadata": {}, "outputs": [], "source": [ - "for key in mydict.keys():\n", - " mydict[key] = ammico.colors.ColorDetector(mydict[key]).analyse_image()" + "for key in image_dict.keys():\n", + " image_dict[key] = ammico.colors.ColorDetector(image_dict[key]).analyse_image()" ] }, { @@ -134,8 +118,7 @@ "metadata": {}, "outputs": [], "source": [ - "outdict = mutils.append_data_to_dict(mydict)\n", - "df = mutils.dump_df(outdict)" + "image_df = ammico.get_dataframe(image_dict)" ] }, { @@ -151,7 +134,7 @@ "metadata": {}, "outputs": [], "source": [ - "df.head(10)" + "image_df.head(10)" ] }, { @@ -167,7 +150,7 @@ "metadata": {}, "outputs": [], "source": [ - "df.to_csv(\"/content/drive/MyDrive/misinformation-data/data_out.csv\")" + "image_df.to_csv(\"data_out.csv\")" ] } ], diff --git a/docs/source/notebooks/Example cropposts.ipynb b/docs/source/notebooks/Example cropposts.ipynb index c45e2d2..9dbf102 100644 --- a/docs/source/notebooks/Example cropposts.ipynb +++ b/docs/source/notebooks/Example cropposts.ipynb @@ -6,7 +6,7 @@ "id": "b25986d7", "metadata": {}, "source": [ - "# Crop posts from social media posts images" + "# Crop posts module" ] }, { @@ -82,14 +82,14 @@ "# load ref view for cropping the same type social media posts images.\n", "# substitute the below paths for your samples\n", "path_ref = pkg / \"data\" / \"ref\" / \"ref-00.png\"\n", - "ref_view = cv2.imread(path_ref)\n", + "ref_view = cv2.imread(path_ref.as_posix())\n", "RGB_ref_view = cv2.cvtColor(ref_view, cv2.COLOR_BGR2RGB)\n", "plt.figure(figsize=(10, 15))\n", "plt.imshow(RGB_ref_view)\n", "plt.show()\n", "\n", "path_post = pkg / \"data\" / \"test-crop-image.png\"\n", - "view = cv2.imread(path_post)\n", + "view = cv2.imread(path_post.as_posix())\n", "RGB_view = cv2.cvtColor(view, cv2.COLOR_BGR2RGB)\n", "plt.figure(figsize=(10, 15))\n", "plt.imshow(RGB_view)\n", @@ -139,12 +139,12 @@ "outputs": [], "source": [ "\n", - "crop_dir = \"../ammico/data/\"\n", - "ref_dir = \"../ammico/data/ref\"\n", + "crop_dir = \"data/\"\n", + "ref_dir = pkg / \"data\" / \"ref\" \n", "save_crop_dir = \"data/crop/\"\n", "\n", "files = utils.find_files(path=crop_dir,limit=10,)\n", - "ref_files = utils.find_files(path=ref_dir, limit=100)\n", + "ref_files = utils.find_files(path=ref_dir.as_posix(), limit=100)\n", "\n", "crpo.crop_media_posts(files, ref_files, save_crop_dir, plt_match=True, plt_crop=False, plt_image=False)\n", "print(\"Batch cropping images done\")" diff --git a/docs/source/notebooks/Example faces.ipynb b/docs/source/notebooks/Example faces.ipynb deleted file mode 100644 index 48b21dd..0000000 --- a/docs/source/notebooks/Example faces.ipynb +++ /dev/null @@ -1,237 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "d2c4d40d-8aca-4024-8d19-a65c4efe825d", - "metadata": {}, - "source": [ - "# Facial Expression recognition with DeepFace" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "51f8888b-d1a3-4b85-a596-95c0993fa192", - "metadata": {}, - "source": [ - "Facial expressions can be detected using [DeepFace](https://github.com/serengil/deepface) and [RetinaFace](https://github.com/serengil/retinaface).\n", - "\n", - "The first cell is only run on google colab and installs the [ammico](https://github.com/ssciwr/AMMICO) package.\n", - "\n", - "After that, we can import `ammico` and read in the files given a folder path." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "50c1c1c7", - "metadata": {}, - "outputs": [], - "source": [ - "# if running on google colab\n", - "# flake8-noqa-cell\n", - "import os\n", - "\n", - "if \"google.colab\" in str(get_ipython()):\n", - " # update python version\n", - " # install setuptools\n", - " # %pip install setuptools==61 -qqq\n", - " # install ammico\n", - " %pip install git+https://github.com/ssciwr/ammico.git -qqq\n", - " # mount google drive for data and API key\n", - " from google.colab import drive\n", - "\n", - " drive.mount(\"/content/drive\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b21e52a5-d379-42db-aae6-f2ab9ed9a369", - "metadata": {}, - "outputs": [], - "source": [ - "import ammico\n", - "from ammico import utils as mutils\n", - "from ammico import display as mdisplay" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "a2bd2153", - "metadata": {}, - "source": [ - "We select a subset of image files to try facial expression detection on, see the `limit` keyword. The `find_files` function finds image files within a given directory:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "afe7e638-f09d-47e7-9295-1c374bd64c53", - "metadata": {}, - "outputs": [], - "source": [ - "# Here you need to provide the path to your google drive folder\n", - "# or local folder containing the images\n", - "images = mutils.find_files(\n", - " path=\"data/\",\n", - " limit=10,\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "705e7328", - "metadata": {}, - "source": [ - "We need to initialize the main dictionary that contains all information for the images and is updated through each subsequent analysis:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37c0c91", - "metadata": {}, - "outputs": [], - "source": [ - "mydict = mutils.initialize_dict(images)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "a9372561", - "metadata": {}, - "source": [ - "To check the analysis, you can inspect the analyzed elements here. Loading the results takes a moment, so please be patient. If you are sure of what you are doing, you can skip this and directly export a csv file in the step below.\n", - "Here, we display the face recognition results provided by the DeepFace and RetinaFace libraries. Click on the tabs to see the results in the right sidebar. You may need to increment the `port` number if you are already running several notebook instances on the same server." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "992499ed-33f1-4425-ad5d-738cf565d175", - "metadata": {}, - "outputs": [], - "source": [ - "analysis_explorer = mdisplay.AnalysisExplorer(mydict, identify=\"faces\")\n", - "analysis_explorer.run_server(port = 8050)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "6f974341", - "metadata": {}, - "source": [ - "Instead of inspecting each of the images, you can also directly carry out the analysis and export the result into a csv. This may take a while depending on how many images you have loaded." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6f97c7d0", - "metadata": {}, - "outputs": [], - "source": [ - "for key in mydict.keys():\n", - " mydict[key] = ammico.faces.EmotionDetector(mydict[key]).analyse_image()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "174357b1", - "metadata": {}, - "source": [ - "These steps are required to convert the dictionary of dictionarys into a dictionary with lists, that can be converted into a pandas dataframe and exported to a csv file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "604bd257", - "metadata": {}, - "outputs": [], - "source": [ - "outdict = mutils.append_data_to_dict(mydict)\n", - "df = mutils.dump_df(outdict)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "8373d9f8", - "metadata": {}, - "source": [ - "Check the dataframe:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "aa4b518a", - "metadata": {}, - "outputs": [], - "source": [ - "df.head(10)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "579cd59f", - "metadata": {}, - "source": [ - "Write the csv file - here you should provide a file path and file name for the csv file to be written." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4618decb", - "metadata": {}, - "outputs": [], - "source": [ - "df.to_csv(\"data_out.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1a80023", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.16" - }, - "vscode": { - "interpreter": { - "hash": "da98320027a74839c7141b42ef24e2d47d628ba1f51115c13da5d8b45a372ec2" - } - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/source/notebooks/Example multimodal.ipynb b/docs/source/notebooks/Example multimodal.ipynb index 159d5a2..de3054c 100644 --- a/docs/source/notebooks/Example multimodal.ipynb +++ b/docs/source/notebooks/Example multimodal.ipynb @@ -6,7 +6,7 @@ "id": "22df2297-0629-45aa-b88c-6c61f1544db6", "metadata": {}, "source": [ - "# Image Multimodal Search" + "# Multimodal search module" ] }, { @@ -67,7 +67,7 @@ }, "outputs": [], "source": [ - "images = mutils.find_files(\n", + "mydict = mutils.find_files(\n", " path=\"data/\",\n", " limit=10,\n", ")" @@ -79,28 +79,6 @@ "id": "a08bd3a9-e954-4a0e-ad64-6817abd3a25a", "metadata": {}, "outputs": [], - "source": [ - "images" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "adf3db21-1f8b-4d44-bbef-ef0acf4623a0", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "mydict = mutils.initialize_dict(images)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4c091f95-07cf-42c3-82c8-5f3a3c5929f8", - "metadata": {}, - "outputs": [], "source": [ "mydict" ] @@ -481,8 +459,7 @@ }, "outputs": [], "source": [ - "outdict = mutils.append_data_to_dict(mydict)\n", - "df = mutils.dump_df(outdict)" + "df = mutils.get_dataframe(mydict)" ] }, { diff --git a/docs/source/notebooks/Example summary.ipynb b/docs/source/notebooks/Example summary.ipynb deleted file mode 100644 index 6d6967f..0000000 --- a/docs/source/notebooks/Example summary.ipynb +++ /dev/null @@ -1,352 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Image summary and visual question answering" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebooks shows how to generate image captions and use the visual question answering with [LAVIS](https://github.com/salesforce/LAVIS). \n", - "\n", - "The first cell is only run on google colab and installs the [ammico](https://github.com/ssciwr/AMMICO) package.\n", - "\n", - "After that, we can import `ammico` and read in the files given a folder path." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# if running on google colab\n", - "# flake8-noqa-cell\n", - "import os\n", - "\n", - "if \"google.colab\" in str(get_ipython()):\n", - " # update python version\n", - " # install setuptools\n", - " # %pip install setuptools==61 -qqq\n", - " # install ammico\n", - " %pip install git+https://github.com/ssciwr/ammico.git -qqq\n", - " # mount google drive for data and API key\n", - " from google.colab import drive\n", - "\n", - " drive.mount(\"/content/drive\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "import ammico\n", - "from ammico import utils as mutils\n", - "from ammico import display as mdisplay\n", - "import ammico.summary as sm" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# Here you need to provide the path to your google drive folder\n", - "# or local folder containing the images\n", - "images = mutils.find_files(\n", - " path=\"data/\",\n", - " limit=10,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "mydict = mutils.initialize_dict(images)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create captions for images and directly write to csv" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here you can choose between two models: \"base\" or \"large\". This will generate the caption for each image and directly put the results in a dataframe. This dataframe can be exported as a csv file.\n", - "\n", - "The results are written into the columns `const_image_summary` - this will always be the same result (as always the same seed will be used). The column `3_non-deterministic_summary` displays three different answers generated with different seeds, these are most likely different when you run the analysis again." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "obj = sm.SummaryDetector(mydict)\n", - "summary_model, summary_vis_processors = obj.load_model(model_type=\"base\")\n", - "# summary_model, summary_vis_processors = mutils.load_model(\"large\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "for key in mydict:\n", - " mydict[key] = sm.SummaryDetector(mydict[key]).analyse_image(\n", - " summary_model=summary_model, summary_vis_processors=summary_vis_processors\n", - " )" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "Convert the dictionary of dictionarys into a dictionary with lists:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "outdict = mutils.append_data_to_dict(mydict)\n", - "df = mutils.dump_df(outdict)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Check the dataframe:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df.head(10)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Write the csv file:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df.to_csv(\"data_out.csv\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Manually inspect the summaries\n", - "\n", - "To check the analysis, you can inspect the analyzed elements here. Loading the results takes a moment, so please be patient. If you are sure of what you are doing.\n", - "\n", - "`const_image_summary` - the permanent summarys, which does not change from run to run (analyse_image).\n", - "\n", - "`3_non-deterministic_summary` - 3 different summarys examples that change from run to run (analyse_image). " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "analysis_explorer = mdisplay.AnalysisExplorer(mydict, identify=\"summary\")\n", - "analysis_explorer.run_server(port=8055)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Generate answers to free-form questions about images written in natural language. " - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Set the list of questions as a list of strings:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "list_of_questions = [\n", - " \"How many persons on the picture?\",\n", - " \"Are there any politicians in the picture?\",\n", - " \"Does the picture show something from medicine?\",\n", - "]" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Explore the analysis using the interface:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "analysis_explorer = mdisplay.AnalysisExplorer(mydict, identify=\"summary\")\n", - "analysis_explorer.run_server(port=8055)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Or directly analyze for further processing\n", - "Instead of inspecting each of the images, you can also directly carry out the analysis and export the result into a csv. This may take a while depending on how many images you have loaded." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for key in mydict:\n", - " mydict[key] = sm.SummaryDetector(mydict[key]).analyse_questions(list_of_questions)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Convert to dataframe and write csv\n", - "These steps are required to convert the dictionary of dictionarys into a dictionary with lists, that can be converted into a pandas dataframe and exported to a csv file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "outdict2 = mutils.append_data_to_dict(mydict)\n", - "df2 = mutils.dump_df(outdict2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df2.head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df2.to_csv(\"data_out2.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.16" - }, - "vscode": { - "interpreter": { - "hash": "f1142466f556ab37fe2d38e2897a16796906208adb09fea90ba58bdf8a56f0ba" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/source/notebooks/Example text.ipynb b/docs/source/notebooks/Example text.ipynb deleted file mode 100644 index 8f5524a..0000000 --- a/docs/source/notebooks/Example text.ipynb +++ /dev/null @@ -1,413 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "dcaa3da1", - "metadata": {}, - "source": [ - "# Notebook for text extraction on image\n", - "\n", - "The text extraction and analysis is carried out using a variety of tools: \n", - "\n", - "1. Text extraction from the image using [google-cloud-vision](https://cloud.google.com/vision) \n", - "1. Language detection of the extracted text using [Googletrans](https://py-googletrans.readthedocs.io/en/latest/) \n", - "1. Translation into English or other languages using [Googletrans](https://py-googletrans.readthedocs.io/en/latest/) \n", - "1. Cleaning of the text using [spacy](https://spacy.io/) \n", - "1. Spell-check using [TextBlob](https://textblob.readthedocs.io/en/dev/index.html) \n", - "1. Subjectivity analysis using [TextBlob](https://textblob.readthedocs.io/en/dev/index.html) \n", - "1. Text summarization using [transformers](https://huggingface.co/docs/transformers/index) pipelines\n", - "1. Sentiment analysis using [transformers](https://huggingface.co/docs/transformers/index) pipelines \n", - "1. Named entity recognition using [transformers](https://huggingface.co/docs/transformers/index) pipelines \n", - "1. Topic analysis using [BERTopic](https://github.com/MaartenGr/BERTopic) \n", - "\n", - "The first cell is only run on google colab and installs the [ammico](https://github.com/ssciwr/AMMICO) package.\n", - "\n", - "After that, we can import `ammico` and read in the files given a folder path." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f43f327c", - "metadata": {}, - "outputs": [], - "source": [ - "# if running on google colab\n", - "# flake8-noqa-cell\n", - "import os\n", - "\n", - "if \"google.colab\" in str(get_ipython()):\n", - " # update python version\n", - " # install setuptools\n", - " # %pip install setuptools==61 -qqq\n", - " # install ammico\n", - " %pip install git+https://github.com/ssciwr/ammico.git -qqq\n", - " # mount google drive for data and API key\n", - " from google.colab import drive\n", - "\n", - " drive.mount(\"/content/drive\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cf362e60", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import ammico\n", - "from ammico import utils as mutils\n", - "from ammico import display as mdisplay" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "fddba721", - "metadata": {}, - "source": [ - "We select a subset of image files to try the text extraction on, see the `limit` keyword. The `find_files` function finds image files within a given directory: " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "27675810", - "metadata": {}, - "outputs": [], - "source": [ - "# Here you need to provide the path to your google drive folder\n", - "# or local folder containing the images\n", - "images = mutils.find_files(\n", - " path=\"data/\",\n", - " limit=10,\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "3a7dfe11", - "metadata": {}, - "source": [ - "We need to initialize the main dictionary that contains all information for the images and is updated through each subsequent analysis:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b32409f", - "metadata": {}, - "outputs": [], - "source": [ - "mydict = mutils.initialize_dict(images)" - ] - }, - { - "cell_type": "markdown", - "id": "7b8b929f", - "metadata": {}, - "source": [ - "## Google cloud vision API\n", - "\n", - "For this you need an API key and have the app activated in your google console. The first 1000 images per month are free (July 2022)." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "cbf74c0b-52fe-4fb8-b617-f18611e8f986", - "metadata": {}, - "source": [ - "```\n", - "os.environ[\n", - " \"GOOGLE_APPLICATION_CREDENTIALS\"\n", - "] = \"your-credentials.json\"\n", - "```" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "0891b795-c7fe-454c-a45d-45fadf788142", - "metadata": {}, - "source": [ - "## Inspect the elements per image\n", - "To check the analysis, you can inspect the analyzed elements here. Loading the results takes a moment, so please be patient. If you are sure of what you are doing, you can skip this and directly export a csv file in the step below.\n", - "Here, we display the text extraction and translation results provided by the above libraries. Click on the tabs to see the results in the right sidebar. You may need to increment the `port` number if you are already running several notebook instances on the same server." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7c6ecc88", - "metadata": {}, - "outputs": [], - "source": [ - "analysis_explorer = mdisplay.AnalysisExplorer(mydict, identify=\"text-on-image\")\n", - "analysis_explorer.run_server(port=8054)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "9c3e72b5-0e57-4019-b45e-3e36a74e7f52", - "metadata": {}, - "source": [ - "## Or directly analyze for further processing\n", - "Instead of inspecting each of the images, you can also directly carry out the analysis and export the result into a csv. This may take a while depending on how many images you have loaded. Set the keyword `analyse_text` to `True` if you want the text to be analyzed (spell check, subjectivity, text summary, sentiment, NER)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "365c78b1-7ff4-4213-86fa-6a0a2d05198f", - "metadata": {}, - "outputs": [], - "source": [ - "for key in mydict:\n", - " mydict[key] = ammico.text.TextDetector(\n", - " mydict[key], analyse_text=True\n", - " ).analyse_image()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "3c063eda", - "metadata": {}, - "source": [ - "## Convert to dataframe and write csv\n", - "These steps are required to convert the dictionary of dictionarys into a dictionary with lists, that can be converted into a pandas dataframe and exported to a csv file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5709c2cd", - "metadata": {}, - "outputs": [], - "source": [ - "outdict = mutils.append_data_to_dict(mydict)\n", - "df = mutils.dump_df(outdict)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "ae182eb7", - "metadata": {}, - "source": [ - "Check the dataframe:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c4f05637", - "metadata": {}, - "outputs": [], - "source": [ - "df.head(10)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "eedf1e47", - "metadata": {}, - "source": [ - "Write the csv file - here you should provide a file path and file name for the csv file to be written." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bf6c9ddb", - "metadata": {}, - "outputs": [], - "source": [ - "# Write the csv\n", - "df.to_csv(\"./data_out.csv\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "4bc8ac0a", - "metadata": {}, - "source": [ - "## Topic analysis\n", - "The topic analysis is carried out using [BERTopic](https://maartengr.github.io/BERTopic/index.html) using an embedded model through a [spaCy](https://spacy.io/) pipeline." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "4931941b", - "metadata": {}, - "source": [ - "BERTopic takes a list of strings as input. The more items in the list, the better for the topic modeling. If the below returns an error for `analyse_topic()`, the reason can be that your dataset is too small.\n", - "\n", - "You can pass which dataframe entry you would like to have analyzed. The default is `text_english`, but you could for example also select `text_summary` or `text_english_correct` setting the keyword `analyze_text` as so:\n", - "\n", - "`ammico.text.PostprocessText(mydict=mydict, analyze_text=\"text_summary\").analyse_topic()`\n", - "\n", - "### Option 1: Use the dictionary as obtained from the above analysis." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a3450a61", - "metadata": {}, - "outputs": [], - "source": [ - "# make a list of all the text_english entries per analysed image from the mydict variable as above\n", - "topic_model, topic_df, most_frequent_topics = ammico.text.PostprocessText(\n", - " mydict=mydict\n", - ").analyse_topic()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "95667342", - "metadata": {}, - "source": [ - "### Option 2: Read in a csv\n", - "Not to analyse too many images on google Cloud Vision, use the csv output to obtain the text (when rerunning already analysed images)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5530e436", - "metadata": {}, - "outputs": [], - "source": [ - "input_file_path = \"data_out.csv\"\n", - "topic_model, topic_df, most_frequent_topics = ammico.text.PostprocessText(\n", - " use_csv=True, csv_path=input_file_path\n", - ").analyse_topic(return_topics=10)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "0b6ef6d7", - "metadata": {}, - "source": [ - "### Access frequent topics\n", - "A topic of `-1` stands for an outlier and should be ignored. Topic count is the number of occurence of that topic. The output is structured from most frequent to least frequent topic." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "43288cda-61bb-4ff1-a209-dcfcc4916b1f", - "metadata": {}, - "outputs": [], - "source": [ - "print(topic_df)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "b3316770", - "metadata": {}, - "source": [ - "### Get information for specific topic\n", - "The most frequent topics can be accessed through `most_frequent_topics` with the most occuring topics first in the list." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "db14fe03", - "metadata": {}, - "outputs": [], - "source": [ - "for topic in most_frequent_topics:\n", - " print(\"Topic:\", topic)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "d10f701e", - "metadata": {}, - "source": [ - "### Topic visualization\n", - "The topics can also be visualized. Careful: This only works if there is sufficient data (quantity and quality)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2331afe6", - "metadata": {}, - "outputs": [], - "source": [ - "topic_model.visualize_topics()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "f4eaf353", - "metadata": {}, - "source": [ - "### Save the model\n", - "The model can be saved for future use." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e5e8377c", - "metadata": {}, - "outputs": [], - "source": [ - "topic_model.save(\"misinfo_posts\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7c94edb9", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.16" - }, - "vscode": { - "interpreter": { - "hash": "da98320027a74839c7141b42ef24e2d47d628ba1f51115c13da5d8b45a372ec2" - } - } - }, - "nbformat": 4, - "nbformat_minor": 5 -}