{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Pathak: Example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

🐍Load Python libraries

\n", "
" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "import os\n", "from pathlib import Path\n", "import pickle\n", "import os.path\n", "\n", "import requests\n", "import pickle\n", "import re\n", "import json\n", "import typing\n", "\n", "\n", "import networkx as nx\n", "import numpy as np\n", "import pandas as pd\n", "from sklearn.metrics.pairwise import cosine_similarity\n", "\n", "import nlu\n", "import nltk\n", "# nltk.download('punkt')\n", "from nltk.tokenize import word_tokenize \n", "from nltk import FreqDist, sent_tokenize, word_tokenize # $ pip install nltk\n", "\n", "from bs4 import BeautifulSoup\n", "\n", "from IPython.display import display\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "import plotly.graph_objects as go\n", "import plotly.io as pio\n", "# pio.renderers\n", "pio.renderers.default = \"svg\"\n", "\n", "from itertools import chain\n", "from tqdm.notebook import tqdm, trange\n", "import warnings\n", "import session_info\n", "import time\n", "start = time.time()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Environment setup: Make sure java is loaded

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Load Java 8 and Set Java home directory" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "java version \"1.8.0_202\"\n", "Java(TM) SE Runtime Environment (build 1.8.0_202-b08)\n", "Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)\n" ] } ], "source": [ "# Load Java 8 required by nlu and Pyspark\n", "# !module load Java/1.8.0_202\n", "!java -version" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "# Set Java home directory cheaha\n", "os.environ[\"JAVA_HOME\"] = os.environ[\"JAVA_HOME\"]\n", "os.environ[\"PATH\"] = os.environ[\"JAVA_HOME\"] + \"/bin:\" + os.environ[\"PATH\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "print(os.environ[\"JAVA_HOME\"])\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Set spark environment varibales

\n", "
" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "os.environ['PYSPARK_PYTHON'] = '/home/nileshkr/.conda/envs/sparknlp/bin/python3.8'\n", "os.environ['PYSPARK_DRIVER_PYTHON'] = '/home/nileshkr/.conda/envs/sparknlp/bin/python3.8'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Load pretrained model and supporting file

\n", "
" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
documentsentence_embedding_biobert
0The maintenance of the structure and integrity...[-0.1828726977109909, 0.25272125005722046, -0....
1The production of new individuals that contain...[-0.031625792384147644, 0.027806805446743965, ...
2The repair of single strand breaks in DNA.[-0.05223826691508293, -0.028281446546316147, ...
3Repair of such breaks is mediated by the same ...[0.02170223370194435, -0.04093412682414055, -0...
4Catalysis of the hydrolysis of ester linkages ...[-0.00821786466985941, -0.23827922344207764, -...
.........
5614Any process that activates or increases the fr...[0.053574178367853165, -0.080331951379776, -0....
5615Any process that activates or increases the fr...[0.015425608493387699, -0.013072511181235313, ...
5616The chemical reactions and pathways involving ...[0.0855507105588913, -0.05061568692326546, -0....
5617The chemical reactions and pathways resulting ...[0.11358797550201416, -0.13088946044445038, -0...
5618The chemical reactions and pathways resulting ...[0.11483287811279297, -0.15022939443588257, -0...
\n", "

5619 rows × 2 columns

\n", "
" ], "text/plain": [ " document \\\n", "0 The maintenance of the structure and integrity... \n", "1 The production of new individuals that contain... \n", "2 The repair of single strand breaks in DNA. \n", "3 Repair of such breaks is mediated by the same ... \n", "4 Catalysis of the hydrolysis of ester linkages ... \n", "... ... \n", "5614 Any process that activates or increases the fr... \n", "5615 Any process that activates or increases the fr... \n", "5616 The chemical reactions and pathways involving ... \n", "5617 The chemical reactions and pathways resulting ... \n", "5618 The chemical reactions and pathways resulting ... \n", "\n", " sentence_embedding_biobert \n", "0 [-0.1828726977109909, 0.25272125005722046, -0.... \n", "1 [-0.031625792384147644, 0.027806805446743965, ... \n", "2 [-0.05223826691508293, -0.028281446546316147, ... \n", "3 [0.02170223370194435, -0.04093412682414055, -0... \n", "4 [-0.00821786466985941, -0.23827922344207764, -... \n", "... ... \n", "5614 [0.053574178367853165, -0.080331951379776, -0.... \n", "5615 [0.015425608493387699, -0.013072511181235313, ... \n", "5616 [0.0855507105588913, -0.05061568692326546, -0.... \n", "5617 [0.11358797550201416, -0.13088946044445038, -0... \n", "5618 [0.11483287811279297, -0.15022939443588257, -0... \n", "\n", "[5619 rows x 2 columns]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 62 ms, sys: 39.1 ms, total: 101 ms\n", "Wall time: 155 ms\n" ] } ], "source": [ "%%time\n", "\n", "df = pd.read_csv('GO_BP_Ontology_corups_Filtered.tsv', sep=\"\\t\")\n", "\n", "with open('predictions_full_BP.pickle', 'rb') as handle:\n", " predictions = pickle.load(handle)\n", "display(predictions)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 15.9 ms, sys: 5.59 ms, total: 21.5 ms\n", "Wall time: 2.9 s\n" ] } ], "source": [ "%%time\n", "## Calculate dinstance between all pairs of sentences in DF \n", "e_col = 'sentence_embedding_biobert'\n", "stored_model_path = \"pipe_full_BP\"\n", "pipe = nlu.load(path=stored_model_path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Function: Calculation of cosine similarity score.\n", "

" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
GONameDefinitionDepthsim_score
0GO:0000002mitochondrial genome maintenance.The maintenance of the structure and integrity...60.658170
1GO:0000003reproduction.The production of new individuals that contain...10.679071
2GO:0000012single strand break repair.The repair of single strand breaks in DNA.60.665612
3GO:0000012single strand break repair.Repair of such breaks is mediated by the same ...60.643082
4GO:0000014single-stranded DNA endodeoxyribonuclease acti...Catalysis of the hydrolysis of ester linkages ...80.631392
..................
5614GO:2001235positive regulation of apoptotic signaling pat...Any process that activates or increases the fr...40.700227
5615GO:2001280positive regulation of unsaturated fatty acid ...Any process that activates or increases the fr...60.688193
5616GO:2001289lipid X metabolic process.The chemical reactions and pathways involving ...40.683334
5617GO:2001294malonyl-CoA catabolic process.The chemical reactions and pathways resulting ...50.644774
5618GO:2001295malonyl-CoA biosynthetic process.The chemical reactions and pathways resulting ...60.640183
\n", "

5619 rows × 5 columns

\n", "
" ], "text/plain": [ " GO Name \\\n", "0 GO:0000002 mitochondrial genome maintenance. \n", "1 GO:0000003 reproduction. \n", "2 GO:0000012 single strand break repair. \n", "3 GO:0000012 single strand break repair. \n", "4 GO:0000014 single-stranded DNA endodeoxyribonuclease acti... \n", "... ... ... \n", "5614 GO:2001235 positive regulation of apoptotic signaling pat... \n", "5615 GO:2001280 positive regulation of unsaturated fatty acid ... \n", "5616 GO:2001289 lipid X metabolic process. \n", "5617 GO:2001294 malonyl-CoA catabolic process. \n", "5618 GO:2001295 malonyl-CoA biosynthetic process. \n", "\n", " Definition Depth sim_score \n", "0 The maintenance of the structure and integrity... 6 0.658170 \n", "1 The production of new individuals that contain... 1 0.679071 \n", "2 The repair of single strand breaks in DNA. 6 0.665612 \n", "3 Repair of such breaks is mediated by the same ... 6 0.643082 \n", "4 Catalysis of the hydrolysis of ester linkages ... 8 0.631392 \n", "... ... ... ... \n", "5614 Any process that activates or increases the fr... 4 0.700227 \n", "5615 Any process that activates or increases the fr... 6 0.688193 \n", "5616 The chemical reactions and pathways involving ... 4 0.683334 \n", "5617 The chemical reactions and pathways resulting ... 5 0.644774 \n", "5618 The chemical reactions and pathways resulting ... 6 0.640183 \n", "\n", "[5619 rows x 5 columns]" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def get_sim_df_for_string(predictions, e_col, string_to_embed, pipe=pipe):\n", "\n", " \"\"\"\n", " Creates a Dataframe which has a `sim_score` column which describes the similarity with the `string_to_embed` variable.\n", "\n", " Args:\n", " predictions: A DataFrame of predictions.\n", " e_col: The name of the column in `predictions` that contains the embeddings.\n", " string_to_embed: The string to embed.\n", " pipe: A spaCy pipeline object.\n", "\n", " Returns:\n", " A DataFrame with an additional `sim_score` column.\n", " \"\"\"\n", "\n", " # Put predictions vectors in matrix.\n", " embed_mat = np.array([x for x in predictions[e_col]])\n", "\n", " # Embed string input string.\n", " embedding = pipe.predict(string_to_embed).iloc[0]['sentence_embedding_from_disk']\n", "\n", " # Replicate embedding for input string.\n", " m = np.array([embedding,] * len(df))\n", "\n", " # Compute cosine similarity.\n", " sim_mat = cosine_similarity(m, embed_mat)\n", "\n", " # Write sim score.\n", " df['sim_score'] = sim_mat[0]\n", "\n", " # Return df.\n", " return df\n", "\n", "get_sim_df_for_string(predictions, e_col, \"Test test\" )" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "
\n", "

Function: Loading document, xml or PubMed API.

\n", "
" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 232 µs, sys: 155 µs, total: 387 µs\n", "Wall time: 48.4 µs\n" ] } ], "source": [ "%%time\n", "\n", "def query_go(query: str, Top: int = 3, sim_cutoff: float = 0.92, Send: str = \"ALL\") -> typing.Union[list, bool]:\n", "\n", " \"\"\"\n", " Queries the Gene Ontology (GO) database for terms that are similar to the given query.\n", "\n", " Args:\n", " query: The query string.\n", " Top: The number of top results to return.\n", " sim_cutoff: The similarity cutoff.\n", " Send: The type of results to send.\n", "\n", " Returns:\n", " A list of GO terms that are similar to the query, or False if no results were found.\n", " \"\"\"\n", "\n", " # Get the similarity matrix between the query and the GO terms.\n", " sim_df = get_sim_df_for_string(predictions, e_col, query)\n", "\n", " # Sort the similarity matrix by similarity score.\n", " df_res = sim_df.sort_values('sim_score', ascending=False).iloc[:Top]\n", "\n", " # Filter the results by similarity score.\n", " df_res = df_res.loc[df_res['sim_score'] > sim_cutoff]\n", "\n", " # If no results were found, return False.\n", " if not len(df_res):\n", " return False\n", "\n", " # Return the results.\n", " if Send == \"ALL\":\n", " return [tuple(i) for i in (df_res[[\"GO\", \"Name\", \"Definition\", \"Depth\", \"sim_score\"]].values.tolist())]\n", " elif Send == \"GO\":\n", " return [tuple(i) for i in (df_res[[\"GO\", \"sim_score\"]].values.tolist())]\n", " elif Send == \"Name\":\n", " return [tuple(i) for i in (df_res[[\"Name\", \"sim_score\"]].values.tolist())]\n", " elif Send == \"Def\":\n", " return [tuple(i) for i in (df_res[[\"Definition\", \"sim_score\"]].values.tolist())]\n", " elif Send == \"Depth\":\n", " return [tuple(i) for i in (df_res[[\"Depth\", \"sim_score\"]].values.tolist())]\n", " else:\n", " raise ValueError(\"Invalid value for `Send`.\")\n", " \n", "# query_go('Gonadoblastoma is defined as an abnormal growth of germ cells and sex cord elements on the gonad.')\n", "# query_go(' regulate signal transduction events generated by G-protein coupled receptors', sim_cutoff=0.80)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Function: Lower case and uppercase lambda function

\n", " The given Python code defines two lambda functions: Lowerset and Upperset. Both functions take a set as input, convert all elements to lowercase or uppercase respectively, and return a new set containing the transformed elements.\n", "
\n" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "# Define a lambda function LowerSet that transforms all elements in a set to lowercase\n", "Lowerset = lambda Set: set([i.lower() for i in Set])\n", "\n", "# Define a lambda function UpperSet that transforms all elements in a set to uppercase\n", "Upperset = lambda Set: set([i.upper() for i in Set])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Function: Loading Gene list from disk

\n", " The code reads a list of gene names from a file (\"1.2_ATH_Gene_all.lst\"), removes certain terms from the list, converts the list to a set, and then converts the set to a list of uppercase gene IDs.\n", "
" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total Genes in Human : 33651 \n", " ['ATPEX12', 'ATPMEI1', 'COR413-TM1', 'AT3G61440', 'GA3OX2']\n", "Total IDs in ATH : 33589 \n", " ['TAF6B1', 'HAP2C', 'AT3G10700', 'AG', 'ATARI11']\n" ] } ], "source": [ "# Read gene names from file and create a list of unique gene names\n", "Gene_list = list(set([i for i in open(\"Auxiliary_Files/1.2_ATH_Gene_all.lst\").read().splitlines() if len(i)]))\n", "\n", "# Print the number of genes and the first five genes in the list\n", "print(f\"Total Genes in Human : {len(Gene_list)} \\n {Gene_list[:5]}\")\n", "\n", "# Remove certain terms from the list of genes\n", "Gene_list = set(Gene_list) - set([\"AND\", \"AN\", \"CAN\", \"NOT\", \"HAS\", \"FACT\", \n", " \"MIN\", \"LATE\", \"MAIN\", \"RING\", \"BP\", \n", " \"POLAR\", \"CO\", \"NIH\", \"LAB\", \"GI\", \"NSF\", \n", " \"WAS\", \"MICE\"])\n", "\n", "# Convert the set of genes to a list, and then convert it to uppercase using the `Upperset` function\n", "Gene_list = Upperset(set(list(Gene_list)))\n", "\n", "# Print the number of gene IDs and the last five gene IDs in the list\n", "print(f\"Total IDs in ATH : {len(Gene_list)} \\n {list(Gene_list)[-5:]}\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Function: To check if paragraph contains any of the Arabidopsis thaliana genes

\n", " The code reads a list of gene names from a file (\"1.2_ATH_Gene_all.lst\"), removes certain terms from the list, converts the list to a set, and then converts the set to a list of uppercase gene IDs.\n", "
" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 95 µs, sys: 63 µs, total: 158 µs\n", "Wall time: 24.8 µs\n" ] } ], "source": [ "%%time\n", "\n", "def para_pass(text: str, Print_list: bool = False):\n", " \"\"\"\n", " Takes a text paragraph and returns a boolean value indicating whether or not any genes were found in the text.\n", "\n", " Args:\n", " text: The text paragraph to analyze.\n", " Print_list: If True, the list of genes found in the text will be printed.\n", "\n", " Returns:\n", " A boolean value indicating whether or not any genes were found in the text.\n", " \"\"\"\n", "\n", " # Tokenize the text into words.\n", " words = chain.from_iterable(map(word_tokenize, sent_tokenize(text)))\n", "\n", " # Create a frequency distribution of the words.\n", " freq = FreqDist(map(str.casefold, words))\n", "\n", " # Convert the frequency distribution to a set of words.\n", " word_bag = Upperset(freq)\n", "\n", " # Intersect the set of words with the set of genes.\n", " intersection = word_bag.intersection(Gene_list)\n", "\n", " # If the intersection is not empty, return True.\n", " if intersection:\n", " if Print_list:\n", " print(intersection)\n", " return intersection\n", "\n", " # Otherwise, return False.\n", " return False" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Function: To plot summary table

\n", " This is a Python function named Plot_data that plots the data in the given Data dictionary. It takes in one argument, a dictionary called Data, and returns a networkx graph of the data. \n", "
" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "def Plot_data(Data) -> nx.Graph:\n", " \"\"\"\n", " Plots the data in the given `Data` dictionary.\n", "\n", " Args:\n", " Data: A dictionary containing the following keys:\n", " * `Meta_info`: A dictionary containing the metadata for the paper.\n", " * `Search_info`: A list of dictionaries, each of which contains the results of a search for a gene.\n", "\n", " Returns:\n", " A networkx graph of the data.\n", " \"\"\"\n", "\n", " # Get the metadata for the paper.\n", " Meta = Data[0][\"Meta_info\"]\n", " #print(Meta)\n", " values = [['Paper Title', 'Species', 'pmid', 'PMC', 'DOI'],\n", " ['' + Meta['Title'] + \"\", Meta['Species'], Meta['pmid'], Meta['pmc'], Meta['DOI']]]\n", "\n", " fig = go.Figure(data=[go.Table(\n", " columnorder = [1,2],\n", " columnwidth = [100,400],\n", " header = dict(\n", " values = [['Article information'],\n", " ['Description']],\n", " line_color='darkslategray',\n", " fill_color='#144B39',\n", " align=['left','center'],\n", " font=dict(color='white', size=12),\n", " height=20\n", " ),\n", " cells=dict(\n", " values=values,\n", " line_color='darkslategray',\n", " fill=dict(color=['#FFD400', 'white']),\n", " align=['left', 'left'],\n", " font_size=12,\n", " height=20)\n", " )\n", " ])\n", "\n", " fig.update_layout(width=800, height=175)\n", " fig.update_layout(margin = dict(t=0, l=5, r=0, b=0))\n", " fig.show()\n", " ########################\n", "\n", " ########################\n", " Dic_list = []\n", "\n", " for i in range(1, len(Data)-1):\n", " #print(i)\n", " Res = Data[i][\"Search_info\"]\n", "\n", " if len(Res):\n", " for s in Res:\n", " for g in Data[i][\"Genes\"].split(\";\"):\n", " Dic = {\"Genes\":g, \"GO\":s[\"GO\"], \"Name\":s[\"GO_Name\"], \"Score\":s[\"Score\"], \"Depth\":s[\"Depth\"]}\n", " Dic_list.append(Dic)\n", "\n", " df = pd.DataFrame(Dic_list)\n", " df_uniq = df.drop_duplicates(keep=\"first\")\n", " if df_uniq.empty:\n", " print('No Human genes found or GO mapped!!\\n')\n", " return\n", "\n", "\n", " ######################\n", " # Plot Bipartite Graph\n", " ######################\n", " G = nx.from_pandas_edgelist(df_uniq, \"Genes\", \"GO\", ['Name', 'Score'])\n", " G.name = \"PhenoMiner\"\n", " color_map = []\n", " for node in G:\n", " if node.startswith(\"GO:\"):\n", " color_map.append('#80BC00')\n", " else: \n", " color_map.append('#FFD400')\n", "\n", "\n", " try:\n", " top = nx.bipartite.sets(G)[0]\n", " except:\n", " print(\"Warning: AmbiguousSolution\")\n", " return G\n", " \n", " pos = nx.bipartite_layout(G, top)\n", "\n", " nx.draw(G, pos=pos, node_color=color_map, with_labels=True, \n", " verticalalignment='bottom', node_size=100, font_size = 12)\n", "\n", " ######################\n", "\n", "\n", " fig = go.Figure(data=[go.Table(\n", " header=dict(values=list(df_uniq.columns),\n", " fill_color='#144B39', \n", " font=dict(color='white', size=12),\n", " line_color='#FFD400',\n", " align='left'),\n", " cells=dict(values=[df_uniq.Genes, df_uniq.GO, df_uniq.Name, df_uniq.Score, df_uniq.Depth],\n", " fill_color='white', \n", " font=dict(color='#144B39', size=12), \n", " line_color='#80BC00',\n", " align='left'))\n", " ])\n", "\n", " fig.update_layout(margin = dict(t=0, l=5, r=5, b=0))\n", " fig.show()\n", " \n", " return G" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Function: To split document into Paragraphs and lines.

\n", " The given function is a python function named read_pubmed. This function accepts five arguments named File, Method, sim_cutoff, Organism, and Print.\n", "\n", "File is a mandatory argument that specifies the name of the file to be read. Method is an optional argument that specifies the method to be used to read the file. If this argument is not specified, a warning message is displayed that mentions the options to read the file. sim_cutoff is another optional argument that sets the threshold score for the semantic similarity score, with a default value of 0.92. Organism is a list of organisms to search in the document, with a default value of ['Arabidopsis', 'thaliana', 'A. thaliana', 'thaliana', 'A. thaliana']. Finally, Print is an optional boolean argument that specifies whether to print the output or not, with a default value of True.\n", "\n", "The function first checks whether the Method argument is set or not. If not, it will display a warning message about the options for this argument and return False. Then it checks whether the whole body is accessible or not.\n", "\n", "The function then uses the Beautifulsoup module to split the document into paragraphs. If the Method is set to Offline, it reads the file using the open function and stores the data in the data variable. It then uses Beautifulsoup to parse the data and stores the result in the Bs_data variable.\n", "\n", "If the Method is set to PMC, it replaces the \"PMC\" string from the File argument with an empty string and constructs a URL to fetch the file from the PubMed Central database. It then uses the requests.get function to fetch the file from the URL and stores the result in the data variable. It then uses Beautifulsoup to parse the data and stores the result in the Bs_data variable. If the full text is not accessible, a warning message is displayed, and searching is limited to the abstract only.\n", "\n", "The function then extracts metadata such as the organism, title, PMCID, PMID, and DOI from the document using Beautifulsoup. It then processes each paragraph in the document and searches for gene-related information in it. It uses the query_go function to search for gene-related information and if found, it adds the gene-related information to a list of search information. It then creates a dictionary containing information about the paragraph, including its number, genes, and search information, and appends this dictionary to a list of dictionaries.\n", "\n", "Finally, the function checks if the list of dictionaries is not empty. If it is not empty and the Print argument is set to True, it prints the list of dictionaries in JSON format. Otherwise, it returns None.\n", "
" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 32 µs, sys: 0 ns, total: 32 µs\n", "Wall time: 35.5 µs\n" ] } ], "source": [ "%%time\n", "title_meta = ''\n", "\n", "\n", "def read_pubmed(File, Method = None, sim_cutoff = 0.92, Organism = ['Arabidopsis', 'thaliana', 'A. thaliana', 'thaliana', 'A. thaliana',], \n", " Print = True):\n", " \"\"\"\n", " Reads a PubMed file and returns a list of dictionaries, each of which contains the following keys:\n", " * `Meta_info`: A dictionary containing the metadata for the paper.\n", " * `Para_info`: A list of dictionaries, each of which contains the information for a paragraph.\n", "\n", " Args:\n", " File: The path to the PubMed file.\n", " Method: The method to use to read the file. Can be `\"Offline\"` to read an offline XML file, or `\"PMC\"` to read an online file using the given PMC ID.\n", " sim_cutoff: The similarity cutoff to use when searching for genes in the text.\n", " Organism: A list of strings containing the names of the organisms to search for.\n", " Print: A boolean value indicating whether or not to print status messages.\n", "\n", " Returns:\n", " A list of dictionaries, each of which contains the metadata and information for a paragraph in the PubMed file.\n", " \"\"\"\n", "\n", "\n", " \n", " #####################################################\n", " # Check if Whole body is accessible\n", " #####################################################\n", " fh = open(\"temp.del\", \"w\")\n", " if not Method:\n", " warnings.warn(\"\"\"Warning Message: \n", " Method not set\n", " Options:\n", " \\tOffline : Reads offline xml file.\n", " \\t\\t Example : read_pubmed('./manuscript/PMC004xxxxxx/PMC4000261.xml'\n", " \\tOnline : Reads online file using given PMC ID\n", " \\t\\t read_pubmed('4304705')\n", " \"\"\")\n", " return False\n", " \n", " \n", " #####################################################\n", " # Use Beautifulsoup for split doucment in para\n", " ##################################################### \n", " if Method == \"Offline\":\n", " with open(File, 'r') as f:\n", " data = f.read()\n", " Bs_data = BeautifulSoup(data, \"html.parser\")\n", " \n", " if Method == \"PMC\":\n", " if File.startswith(\"PMC\"):\n", " File = File.replace(\"PMC\", \"\")\n", " URL = \"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pmc&id=\"+ str(File) +\"&tool=my_tool&email=my_email@example.com\"\n", " data = requests.get(URL)\n", " Bs_data = BeautifulSoup(data.text, \"html.parser\")\n", " if not Bs_data.body and Bs_data.abstract:\n", " warnings.warn(\"Full text is not accessible, searching is limited to 'Abstract' only!!!\\n Try other method type like URL or Offline XML.\")\n", " \n", " #####################################################\n", " # Mate info from the document\n", " ##################################################### \n", " # Organism\n", " Species = []\n", " for Sp in Organism:\n", " Sp_text = Bs_data(text=re.compile(Sp))\n", " if Sp_text:\n", " #print(Sp)\n", " Species.append(Sp)\n", " Species = \"; \".join(Species)\n", " \n", " if not len(Species):\n", " Species = \"**\"\n", " #return False\n", " if Print:\n", " print(f\"Species = {Species}\")\n", " \n", " \n", " \n", " # Metadata\n", " Title = ''\n", " pmid = \"\"\n", " pmc = \"\"\n", " doi = ''\n", " b_meta = Bs_data.find_all(\"article-id\")\n", " for m in b_meta:\n", " #print(m)\n", " if \"pmid\" in m.attrs.values():\n", " pmid = m.text\n", " #print(m.text)\n", "\n", " if \"pmc\" in m.attrs.values():\n", " pmc = m.text\n", " #print(m.text)\n", "\n", " if \"doi\" in m.attrs.values():\n", " doi = m.text\n", " #print(m.text)\n", "\n", "\n", " Title = str(Bs_data.find('title-group').contents[1]).replace(\"\", \"\").replace(\"\", \"\")\n", " #print(Title)\n", "\n", "\n", " b_unique = Bs_data.find_all('p')\n", "\n", " Unkown_para_num = 1\n", "\n", " List_dic = [{\"Meta_info\":{\"Title\":Title, \"Species\":Species, \"pmid\":pmid, \"pmc\":pmc, \"DOI\":doi}}]\n", "\n", " #####################################################\n", " # Process para \n", " ##################################################### \n", " for i in b_unique:\n", " #print(i.name, i.attrs,i.text, \"##########\")\n", " para_ID = \"\"\n", " #Text = i.text\n", " if 'id' in i.attrs:\n", " #print(i.attrs['id'], \"||||||||||||||||\")\n", " para_ID = i.attrs['id']\n", " else:\n", " #print(\"U\" + str(Unkown_para_num), \"##########\")\n", " para_ID = \"U\" + str(Unkown_para_num)\n", " Unkown_para_num += 1\n", " #####################################################\n", " # Split para into lines\n", " #####################################################\n", " if para_pass(i.text):\n", " dic = {\"Para_number\":para_ID, \"Genes\":\";\".join(para_pass(i.text)), \"Para\":i.text}\n", " #dic = {\"Species\":Species, \"pmid\":pmid, \"pmc\":pmc, \"Para_number\":para_ID, \"Genes\":\";\".join(para_pass(i.text)), \"Para\":i.text, \"DOI\":doi}\n", " \n", " #print(pmid, pmc, para_ID, \";\".join(para_pass(i.text)), i.text, doi, sep=\"\\t\")\n", " #print(\"|_________________|\", json.dumps(dic, indent=4, default=str), i.text, file=fh)\n", " Search_info = []\n", " for sent in sent_tokenize(i.text):\n", " query_res = query_go(sent, sim_cutoff = sim_cutoff)\n", " \n", " if query_res:\n", " #print(query_res)\n", " for q in query_res:\n", " query_dic = {\"Sentance\":sent,\n", " \"GO\":query_res[0][0], \n", " \"GO_Name\":query_res[0][1], \n", " \"Definition\":query_res[0][2], \n", " \"Depth\":query_res[0][3],\n", " \"Score\":query_res[0][4]\n", " }\n", " Search_info.append(query_dic)\n", " print(sent, dic[\"Genes\"], file=fh)\n", " print(query_dic, file=fh)\n", " print(\">\" * 10, file=fh)\n", " print(\"#\" * 10, file = fh)\n", " dic[\"Search_info\"] = Search_info\n", " List_dic.append(dic)\n", " \n", " \n", " if len(List_dic):\n", " if Print:\n", " print(json.dumps(List_dic, indent=4, default=str))\n", " #print(json.dumps(List_dic, indent=4, default=str), file=fh)\n", " return List_dic\n", " \n", " fh.close()\n", " return False\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Call function to predict GOs\n", "
\n", "

Example 1 (Bad): PMC1459476

\n", " Two Isoforms of a Divalent Metal Transporter (DMT1) in Schistosoma mansoni Suggest a Surface-associated Pathway for Iron Absorption in Schistosomes*. \n", "
" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "Paper TitleSpeciespmidPMCDOIArticle informationTwo Isoforms of a Divalent Metal Transporter (DMT1) in <italic>Schistosoma mansoni</italic> Suggest aSurface-associated Pathway for Iron Absorption in Schistosomes<xref ref-type=\"fn\" rid=\"FN1\">*</xref>Arabidopsis; thaliana; thaliana16267047145947610.1074/jbc.M511148200Description" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Warning: AmbiguousSolution\n", "CPU times: user 3min 7s, sys: 2min 6s, total: 5min 14s\n", "Wall time: 1min 2s\n" ] } ], "source": [ "%%time\n", "df_temp = read_pubmed('Example_data/PMC1459476.xml', \n", " sim_cutoff=0.90 ,Print=False, Method = \"Offline\")\n", "G = Plot_data(df_temp)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Example 2 (Good): PMC1802096

\n", " MOR1/GEM1 plays an essential role in the plant-specific cytokinetic phragmoplast. \n", "
" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "Paper TitleSpeciespmidPMCDOIArticle informationMOR1/GEM1 plays an essential role in the plant-specific cytokinetic phragmoplastArabidopsis; thaliana; A. thaliana; thaliana; A. thaliana12198497180209610.1038/ncb844Description" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "MOR1MOR1MOR1MOR1MOR1MOR1GEM1GEM1GEM1GEM1GEM1GEM1MOR1GEM1AGGEMGEM1GEM1GEM1GEM1GenesGO:0034314GO:0080175GO:0061640GO:0031110GO:0000913GO:0051598GO:0009555GO:0009561GO:0022619GO:0051598GO:0009561GO:0009554GO:0071586GO:0071586GO:0071586GO:0071586GO:0071586GO:0007129GO:0051026GO:0034314GOArp2/3complex-mediatedactin nucleation.phragmoplastmicrotubuleorganization.cytoskeleton-dependentcytokinesis.regulation ofmicrotubulepolymerization ordepolymerization.preprophase bandassembly.meioticrecombinationcheckpoint signaling.pollen development.megagametogenesis.generative celldifferentiation.meioticrecombinationcheckpoint signaling.megagametogenesis.megasporogenesis.CAAX-box proteinprocessing.CAAX-box proteinprocessing.CAAX-box proteinprocessing.CAAX-box proteinprocessing.CAAX-box proteinprocessing.homologouschromosome pairingat meiosis.chiasma assembly.Arp2/3complex-mediatedactin nucleation.Name0.94111992720436520.93730641987727310.95089070679097330.9403089019116130.93997032483267050.94120095526790740.96254905142802570.94512064888309790.95801694096267050.94871342684539960.93628613029146960.93722373590826360.93699294472360220.93699294472360220.93699294472360220.93660156972899490.93660156972899490.94492805140785330.93740373541239620.9392108852434374Score64453442342466666436Depth" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 1min 52s, sys: 1min 16s, total: 3min 8s\n", "Wall time: 37.1 s\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAHzCAYAAACe1o1DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAADsWElEQVR4nOzdd1hT1/8H8HdCWEHAgWJQQS0oo4Jat4LgqFqqolURV1ErrtbRYWvd1g5Xq3WPfh1V6qqr1q1VHFXqwiLgBFSWCiIbCfn8/vCXW0LCCDOBz+t58jxyc3LuvQHJm/u55xwREREYY4wxxhgrIXFlHwBjjDHGGNNvHCgZY4wxxlipcKBkjDHGGGOlwoGSMcYYY4yVCgdKxhhjjDFWKhwoGWOMMcZYqXCgZIwxxhhjpcKBkjHGGGOMlQoHSsYYY4wxViocKBljjDHGWKlwoGSMMcYYY6XCgZIxxhhjjJUKB0rGGGOMMVYqHCgZY4wxxlipcKBkjDHGGGOlwoGSMcYYY4yVCgdKxhhjjDFWKhwoGWOMMcZYqXCgZIwxxhhjpcKBkjHGGGOMlQoHSsYYY4wxViocKBljjDHGWKlwoGSMMcYYY6XCgZIxxhhjjJUKB0rGGGOMMVYqHCgZY4wxxlipcKBkjDHGGGOlwoGSMcYYY4yVCgdKxhhjjDFWKhwoGWOMMcZYqXCgZIwxxhhjpcKBkjHGGGOMlQoHSsYYY4wxViocKBljjDHGWKlUm0C5du1aiEQitG/fvsA2z549w1dffYUWLVqgRo0aMDExgb29PUaPHo2LFy9W4NEyxhhj1UNkZCQ+/vhjNGvWDFKpFFKpFM7Ozpg8eTJu376t1v7SpUsYMGAArK2tYWxsjMaNG2P8+PF4/PixVvs9fPgwWrduDRMTE9ja2mLevHmQy+Vq7ZKTkxEQEIC6devCzMwMXl5euHHjhlq76dOno3Xr1qhduzakUimcnJwwf/58pKWlqbRLS0vDvHnz0Lt3b9SuXRsikQhbt27VeIzBwcGYNGkS3nnnHRgaGkIkEhV4PuvWrcPgwYNha2sLkUgEf3//AtsW95y0ISIiKlUPeqJz586IjY1FVFQU7t+/D3t7e5Xng4OD4e3tjdTUVAwdOhRt27aFsbExIiMjcfDgQYSFheH8+fPw8PCopDNgjDHGqpYjR47A19cXEokEw4cPh5ubG8RiMSIiIrB//35ER0cjMjISdnZ2AIBVq1Zh6tSpaNq0Kfz9/SGTyRAeHo7NmzcDAI4ePYpOnToVud9jx47B29sbnp6e8PPzw7///os1a9YgICAA69atE9opFAq4u7sjJCQEX3zxBaysrLB27Vo8efIE169fh4ODg9C2S5cueOedd2Bvbw8TExPcvHkT//vf/9CmTRsEBQVBLH5zDS8qKgpNmjSBra0tmjZtinPnzmHLli0aA+D8+fPx3XffwdXVFampqbh37x4Kim2NGzdGamoq2rVrh9OnT2P48OEag6o256QVqgYePXpEAGj//v1Ut25dmj9/vsrzSUlJJJPJqH79+hQeHq72eoVCQYGBgRQcHFxRh8wYY4xVaQ8ePCAzMzNycnKi2NhYtedzcnJo5cqV9PjxYyIiunjxIonFYnJ3d6f09HS1vqytrUkmk1FSUlKR+3Z2diY3NzfKyckRts2aNYtEIpFKDti9ezcBoL179wrbnj17RjVr1iQ/P78i97Ns2TICQH///bewLSsri+Li4oiI6J9//iEAtGXLFo2vj4+Pp4yMDCIimjx5MhUW26KiokihUBARkZmZGX344Yca25X2nApSLUreO3fuRK1ateDt7Y1BgwZh586dKs+vX78ecXFxWLFiBRwdHdVeLxKJ4Ofnh7Zt21bUITPGGGNV2pIlS5Ceno4tW7ZAJpOpPS+RSDBlyhQ0atQIAPDNN99AJBJh27ZtkEqlKm3feustLFmyBHFxcdiwYYOw/dWrV4iIiMCrV6+EbWFhYQgLC0NAQAAkEomwfdKkSSAi7Nu3T9i2b98+WFtbY+DAgcK2unXrYsiQITh06BCys7MLPcfGjRsDeFNiVjI2Nkb9+vULfZ2StbU1TE1Ni9XWzs6u0JK4UmnPqSDVJlAOHDgQRkZG8PPzw/379/HPP/8Iz//xxx8wNTVVeXMZY4wxVn6OHDkCe3v7Qsc2KGVkZODMmTNwd3dHkyZNNLbx9fWFsbExjhw5Imw7cOAAnJyccODAAWHbzZs3AQBt2rRReb2NjQ0aNmwoPK9s27p1a6FcrdSuXTtkZGTg3r17KtvlcjlevHiB2NhYnDx5ErNnz4a5uTnatWtX5DlWFG3PqbiqfKC8fv06IiIiMHToUABv7nFo2LChylXKiIgING/eHIaGhiqvTU1NxYsXL4RHenp6hR47Y4wxVhWlpKQgNjYWb7/9ttpzycnJKp+9mZmZuH//PuRyOdzc3Ars09jYGM2bN0d4eHih+46LiwMAjVdFZTIZYmNjVdoW1A6ASlsAuHbtGurWrYsGDRqgV69eICIcPnwYtWvXLvSYKpK251RcVT5Q7ty5E9bW1vDy8gLwpnzt6+uLXbt2ITc3F8CbH+waNWqovXbkyJGoW7eu8Pjyyy8r9NgZY4yxqiglJQUANH72enp6qnz2rlmzBqmpqQAAc3PzQvs1NzcX+gYAf39/EJHKgJfMzEwAbwJofiYmJsLzyrYFtcvbl5KzszNOnTqFgwcPYsaMGTAzM1Mb5V3ZtD2n4qrSgTI3Nxe7du2Cl5cXIiMj8eDBAzx48ADt27dHQkICzpw5A+DND6Cmb/jChQtx6tQpnDp1qqIPnTHGGKuylMFQ02fvhg0bcOrUKezYsUOtvTJYFiQ1NbXI0Km8J1HTvYJZWVkq9yyampoW2C5vX0oWFhbo0aMH+vfvj8WLF+Ozzz5D//79ERISUugxVSRtz6m4JEU30V9nz55FXFwcdu3ahV27dqk9v3PjR3i3UQoc7VIQEnELOfd7wbD+FKBGb0BkAFdX10o4asYYY6xqs7S0hEwmQ2hoqNpzynsqo6KihG329vaQSCQa56VUys7Oxt27d9XujcxPWdqNi4sTBvwoxcXFqdzvKJPJhBK5koJycfPecQDA0ZiBCD6bA0MDKZrU8kLbhpPRpFZ3YXDMwIEDMXLkSOzatavQcn1F0nROwH+3AtjY2JSo3yp9hXLnzp2oV68e9u7d+98jcAX2/mwDv/eAA8efIDPjFd73IGRmAQcOnwIevw/cfwvIvFn0DhhjjDFWIt7e3njw4AGCg4OLbKucfDsoKAjR0dEa2+zZswfZ2dl4//33C+2rZcuWAN7c75hXbGwsnj59KjyvbHvjxg0oFAoAQFzqTfx8+S3sP7UKhiaAhSwDCspBtvwV7r04gl9v9sTaK854kX4XwJuQq1AoVEaZV7b856R09epVSKVSNGvWrET9VtlAmZmZif379+P999/HoEGD3jz6umBQy/kY1C0BH/sBqenA4b+AiUMB6zrA9CWEe1EAcp4CkZ2BzDc/bFQ95n5njDHGKsyMGTMglUoxZswYJCQkqD2f/7N39uzZwv2Q+e/zi4yMxIwZMyCTyTB+/Hhhu6Zpg1xcXODo6IiNGzcKYymANyvNiEQiDBo0SNg2aNAgJCQkYP/+/YhNuYb/XeuMuIQnCAsCmnUAJEZv2mWmATk5b1bZScx4gF+udcCL9AhhwvWirppWpLznpPTixQvs3bsXffv21Xh/ZXFU2ZL34cOHkZqain79+r3ZQDlAdB9AkQogFx3cgLq1gZ1/Ar59gAMrgb4fA24fAEP75KLt21kwNPTCk9eTsPf3wwAAW1vbyjshxhhjrApxcHBAYGAg/Pz80Lx5c2GlHCJCZGQkAgMDIRaL0bBhQwCAh4cHli1bhk8//RSurq7CSjkRERHYtGkTFAoFjh49ilq1agn7OHDgAEaPHq22Es3SpUvRr18/vPvuuxg6dChCQ0OxevVqfPTRR3BychLaDRo0CB06dMDo0aPRcbACRjWyEPwHQaEAvD7871yiQoBjqwFnD6BOAzly5a8QOP8d/Hs+E23atMGIESNUzn316tVITk4WRlT/8ccfePr0KQDgk08+gaWlJQAgOjoav/76K4D/rqguWrQIwJt5J0eOHCn0+ccffwj3aubk5OD27dtC2379+gm38eU9p7CwMGGlnNzcXCxYsKAk38o3Sjwluo7r27cvmZiY/DebfvIeolCoPPx9QIYS0IuLb76OOwf6YjTI+S2QqQnI2AjUtLEVjRo1ioKCgir3hBhjjLEq6MGDBzRx4kSyt7cnExMTMjU1JUdHR5owYQLdunVLrX1QUBD179+frKysyNDQkGxtbWncuHEUFRWl1nbLli0FrkRz4MABatmyJRkbG1PDhg1p9uzZ9Pr1a7V2SUlJ1H9oJzK1ABmagOxcQePWgOaf/u8xZTvIrSeolgwkMQZJjEB1G4MmfTaY0tLS1Pq0s7MjABofkZGRQru//vqrwHZdu3ZV6fPDDz8ssG3+809KSqKxY8dSnTp1SCqVUteuXemff/7R/A0qpmqzljciPYCMywByi2z6HxFg7AS8FQoUY/Z5xhhjjFUtRIS1V1zwIiMCb/JZ8YhgANuaneH/zvnyOzgdUmXvoVShyAYyLkC7MAkABGSHAfL48jgqxhhjjOm4tNfxeJERDm3CJAAQchGdHAS5omRLGeqbahIokyv39YwxxhjTS1k5L0v1+my57ozwLk/VI1CKpEW3Kc/XM8YYY0wvGRqULgMYiqtHhqgegVJcAzAs2Qjt5FQRJk//FidOnMDr16/L+MAYY4wxpsvMjW1gIqlZotdaGtvC0MCsbA9IR1WPQCkSAbU/hranSyTG9UdtcPToKfTu3Rt169aFn58fdu/erbJWKGOMMcaqJgOxEd5pMB4iGGj1OhHEaNfoE2HVnKquegRKAKg5GhBpN+2mSAR0H7Qbjx49QkhICD777DPcvXsXQ4cOhZWVFfr06YMNGzZoXMKIMcYYY1WDrdFAKEi7gb1ikQQtbUaX0xHpnuozbRAAJO8EYkYU3U6p/iqgzsdqm6OionD48GEcPHgQQUFByM3NRYcOHeDj4wMfHx80b968DA+aMcYYY5Xl7NmzGDZsGFq8m4EuH6YW+3UDXXaiRf1h5XhkuqV6BUoAeLkFiB33/19o+mtD8ma79XLAanqR3SUmJuLPP//EwYMHcfz4cWRmZsLR0VEIl23btoVYXH0uBDPGGGNVQW5uLhYtWoQFCxage/fu2LFjBx5lB+Lk/c8gFhlAQXK114hEEoAIfZ02oVU1ujoJVMdACQDZd4GktcDLXwBK/2+7yASoOQqoPRkwcdW624yMDJw+fRoHDx7E4cOHkZiYCJlMhv79+8PHxwdeXl4wMjIqwxNhjDHGWFmLj4/H8OHDce7cOcyfPx9ff/01DAze3EMZnxqCf56uRUj8duQqsoTXGIrN0MpmLNo2nAQrs+pXqayegVJJkQ5k3QYUKW9Gghu/DRhYlknXcrkcly9fxsGDB3HgwAFERUXBwsIC7733Hnx8fNCnTx9YWFiUyb4YY4wxVjaUJW6RSITAwEB4eXlpbJclf4VnaaF4nZsGY4kFrGu4wqiajOjWpHoHygpCRPj3339x8OBBHDx4EDdv3oShoSG6d+8OHx8f9OvXDzKZrLIPkzHGGKu2NJW4ra2tK/uw9AYHykrAg3oYY4wx3VFYiZsVDwfKSsaDehhjjLHKU9wSNyscB0odwoN6GGOMsYrBJe6yxYFSR/GgHsYYY6x8cIm77HGg1AM8qIcxxhgrG1ziLh8cKPUQD+phjDHGtMMl7vLFgVLP8aAexhhjrHBc4i5/HCirEB7UwxhjjKniEnfF4EtXVYhUKkW/fv3wv//9D/Hx8Th//jyGDh2K48ePo3fv3qhbty78/Pywe/dupKSkVPbhMsYYY4iMjMTHH3+MZs2aQSqVQiqVwtnZGZMnT8bt27fV2l+6dAkDBgyAtbU1jI2N0bhxY4wfPx6PHz9WaZebm4sFCxagR48eaNGiBW7duqUSJg8fPozWrVvDxMQEtra2mDdvHuRy9fW5k5OTERAQgLp168LMzAxeXl64ceOGxnMpbp+nTp1Cly5dIJVKUatWLQwaNAhRUVFq7Ro3bgyRSKT2mDBhgsb9nz59Gt26dYOlpSXMzc3xzjvvYPfu3Sptdu/ejREjRsDBwQEikQienp4a+9IWX6GsBnhQD2OMMV105MgR+Pr6QiKRYPjw4XBzc4NYLEZERAT279+P6OhoREZGws7ODgCwatUqTJ06FU2bNoW/vz9kMhnCw8OxefNmAMDRo0fRqVOnIkvcx44dg7e3Nzw9PeHn54d///0Xa9asQUBAANatWye0UygUcHd3R0hICL744gtYWVlh7dq1ePLkCa5fvw4HBwet+zxy5Aj69++P1q1bY+TIkUhJScHKlSthbGyMmzdvom7dukLbxo0bo1atWvjss89U3rdmzZqhXbt2Ktu2bNmCsWPHomfPnujXrx8MDAxw9+5dNGjQAJ9//rnQztPTE9evX0fbtm1x69YtuLq64ty5c6X4Lv4/YtVOZGQkrVy5kry8vMjAwIAAUIcOHeiHH36giIiIyj48xhhj1cCDBw/IzMyMnJycKDY2Vu35nJwcWrlyJT1+/JiIiC5evEhisZjc3d0pPT1drS9ra2uSyWR08OBBsra2pvr169PZs2c17tvZ2Znc3NwoJydH2DZr1iwSiUQUHh4ubNu9ezcBoL179wrbnj17RjVr1iQ/P78S9ens7Ez29vaUnZ0tbLt16xaJxWL69NNPVfq0s7Mjb29vjeeQV2RkJJmamtKUKVOKbPv48WPKzc0lIiIXFxfq2rVrka8pDg6U1dyLFy9o27ZtNGDAADI1NSUA5OjoSF999RVduXJF+KFjjDHGylJAQAABoCtXrhSrfa9evcjAwIAePXqk8fktW7YQAAJAPXr0oPj4eEpOTqbw8HBKTk4W2t25c4cA0Jo1a1ReHxMTQwDom2++EbYNHjyYrK2t1T4LAwICSCqVUlZWllZ9JiYmEgD64osv1I7fxcWFbGxsVLYpA2V2djalpaUV+N58+eWXZGRkJJxnamoqKRSKAtvn3WdZBUq+h7Kaq1OnDkaNGoX9+/fjxYsXOHToEDp27IhNmzahQ4cOaNiwISZOnIgTJ07g9evXlX24jDHGqogjR47A3t4e7du3L7JtRkYGzpw5A3d3dzRp0kTt+fj4eGzbtg0AYGtri+PHj8Pa2hoHDhyAk5MTDhw4ILS9efMmAKBNmzYqfdjY2KBhw4bC88q2rVu3VpstpV27dsjIyMC9e/e06jM7OxsAYGpqqnYOUqkUsbGxiI+PV9l+9uxZSKVS1KhRA40bN8bKlSvVXnv69Gk4Ojri6NGjaNiwIczNzVGnTh3MmTMHCoVCrX15kFTIXpheUA7q6devn9pKPevXr+eVehhjjJWJlJQUxMbGwsfHR+255ORklYEsZmZmuH//PuRyOdzc3NTa5x3F3bRpUyQnJxc6JVBcXBwAaBw7IJPJEBsbq9LWw8NDYzsAiI2NRYsWLYrdp7W1NWrWrIlLly6ptElMTERYWBgAICYmBvXr1wcAuLq6okuXLmjevDkSExOxdetWTJs2DbGxsVi8eLHw+vv378PAwACjR4/GjBkz4Obmhv3792PRokWQy+X4/vvvC3w/ygpfoWQaSSQSeHh44Mcff8SjR48QEhKCzz77DHfv3sXQoUNhZWWFPn36YMOGDcJ/JMYYY6w4lDON1KhRQ+05T09P1K1bV3isWbMGqampAABzc3OhnaZR3DKZTGUWE39/fxAR/P39hW2ZmZkAAGNjY7V9m5iYCM8r2xbULm9fxe1TLBZj/PjxOHPmDGbOnIn79+/j+vXrGDJkiFAFzLv/w4cPY8aMGejfvz/GjBmD8+fPo1evXvjxxx/x9OlToV1aWhpevnyJBQsWYOHChfjggw+wc+dO9O7dGytXrhTev/LEgZIVSSQSwdXVFXPnzsWNGzcQGRmJZcuWITs7G5MnT4aNjQ06duyIxYsX4+7du5V9uIwxxnScMhimpaWpPbdhwwacOnUKO3bsUGuvDEbx8fF49913sXDhQixYsEAocaempqqETk2U5WZl+TmvrKwslXK0qalpge3y9qVNnwsXLsTYsWOxZMkSNGvWDG3atIFEIsHYsWMBaA7ZSiKRCNOnT4dcLlcZma3s38/PT6W9n58fMjMzVcr45YUDJdNa48aNMWXKFJw9exYJCQnYtm0bZDIZFixYAEdHRzg5OWHmzJm4evVqhd27wRhjTH9YWlpCJpMhNDRU7bn27dujR48e6Ny5s7DN3t4eEokEt2/fxtmzZ9GyZUuEhYXh9OnTmDNnDgwMDJCdnY27d+/C2dm50H0ry9KaqmtxcXGwsbFRaZu/HREh9MF5AMDp+FFYfL42bqW8KSmHPDhTZJ9GRkbYvHkzYmNjERQUhLt37+LEiRN49eoVxGIx7O3tCz3+Ro0aAQCSkpKEbcr+8y8lWa9ePQDAy5cvC+2zLHCgZKXCg3oYY4yVhLe3Nx48eIDg4OAi25qZmcHT0xPnzp1D9+7dNU5UvmfPHmRnZ+P9998vtK+WLVsCAK5du6ayPTY2Fk+fPhWeV7a9ceOGcHHkRXoE1l91xe4TS2BoApjUe4Ys+UtY2r0Jd+sOjMamf9rhVdbjAvtUsra2hru7O5o1a4bc3FycO3cO7du3L/QKJQA8evQIAFTmq3znnXcAvLn/Mv855W9bXjhQsjLDK/UwxhgrrhkzZkAqlWLMmDFISEhQe57yrLsSHx+PxMREEBEaN26MAwcOqFyNi4yMxIwZMyCTyTB+/Hhh+6tXrxAREYFXr14J21xcXODo6IiNGzciNzdX2L5u3TqIRCIMGjRI2DZo0CAkJCRg//79eJYWis3/dEB0XDjCgoBmHQDJ/69mXK8xYGULXD8KxCbfwKbgtniZGamxT02WLVuGuLg4lQnMk5KSVI4PAHJycvDDDz/AyMhIJUz7+voCAH755Rdhm0KhwJYtW1C7dm0hcJYnXimHlTvilXoYY4xpcOjQIfj5+cHIyEhYKYeIEBkZicDAQMTExGDmzJnYvHkzRCIRBgwYgHXr1sHe3l5YKSciIgKbNm2CQqHA0aNHVUrlW7duxejRo7FlyxaVgTlHjhxBv3794OXlhaFDhyI0NBSrV6/G2LFjsXHjRqFdbm4uunTpgtDQUHQeIoLELA3BfxBePQMC1gBWjf47l7tXgN/mAE1aAm97ipHy1AIXfk9R63PHjh34/fff4eHhgRo1auD06dPYs2cPPvroI2zatEnl2BctWoRBgwahSZMmSEpKQmBgIEJDQ/Hdd99h5syZQlsiQs+ePXH27FmMGzcObm5uOHjwIE6dOoUNGzYgICBAaBsUFISgoCAAb1Yekkqlwv2bHh4eGke1F0uZzGbJmBZ4pR7GGGNKDx48oIkTJ5K9vT2ZmJiQqakpOTo60vjx42nChAkkEomEicqJiIKCgqh///5kZWVFhoaGZGtrS+PGjaOoqCi1vpWTnW/ZskXtuQMHDlDLli3J2NiYGjZsSLNnz6bXr1+rtUtKSiIfP3cytQAZmoDsXEHj1oDmn1Z/+C4A1X8LZGAIsqgLmvjpELU+r169Sh4eHlSrVi0yMTEhNzc3Wr9+vdpE5NeuXaO+fftSgwYNyMjIiGrUqEFdunShPXv2aHwfU1NTaerUqVS/fn0yMjKiFi1a0I4dO9TazZs3T5gAPv9j3rx5BX2bisRXKFmlSkxMxJ9//omDBw/i+PHjyMzMhKOjI3x8fODj44O2bduqTSjLGGOsaitqLe6KRETYENwSz9JCQSj+QFMRDNCklhdGtj5VjkenOzhQMp2RkZGB06dP4+DBgzh8+DASExMhk8nQv39/+Pj4wMvLC0ZGRpV9mIwxxspR3onKAwMDVe4VrAxp2QlYfrF+CV8twmyvLBiIq/5nF1/6YTqDB/Uwxlj1pWmi8soOkwCQKU8qulGBCFny5LI6FJ3GVyiZziMe1MMYY1WaLpW4gTefO1FRUbh16xZuRfwFcbtVJe7rq64pMJYUPtl6VcCBkumdqKgoHD58GAcPHkRQUBByc3PRoUMH4b7L5s2bV/YhMsYYK6bKLnFnZ2cjLCzsTXjM81BWwqxlVhi3+SUkxrlF9KTO3MgG07s8hUgkKuvD1jkcKJle40E9jDGmn3Jzc7Fo0SIsWLAA3bt3x44dO9RWeilrSUlJCAkJUQmOYWFhkMvlEIlEcHBwQMuWLVUe9evXx4n7nyL46SoQFT9UiiCGZ9OF8GgyqxzPSHdwoGRVBg/qYYwx/VDeJW6VknWex+PHb1awMTExgaurq0pwbNGiRYGr1CRm3MPqv7WrfolFEkzv/AQ1jEs6oEe/cKBkVZJcLsfly5dx8OBBHDhwAFFRUbCwsMB7770HHx8f9OnTBxYWFpV9mIwxVu2UdYm7qJJ13bp10apVK5Xw6ODgAIlEotV+LkR9h7MPi3+10bv5erRpOL7ohlUEB0pW5fGgHsYYq3xlUeIuacm6LO5hJCKcj1yA85ELIBZJoCC5Wps323PRy+EndLCdWup96hMOlKza4UE9jDFWsbQtcZd1ybosPU6+iKtPViH82e8g/HdPpVhkiBbWw9Cu0cewsWhT7sehazhQsmqNB/Uwxlj5KqrEXVEl67KWlh2PuNQbeJ2bBmOJBWws2kJqWKdSj6kycaBk7P/xoB7GGCs7mkrchoaGlVayZuWLAyVjGvCgHsYYK7m4uDh88MEHuHLlCrp27Qpzc3OEhIToRMmalQ8OlIwVgQf1MMZYwfKXrM+dO4d///0XynihqyVrVrY4UDKmJR7UwxirrooaZV27dm0kJibirbfewsKFC+Hl5cUl62qCAyVjpcCDehhjVZG2o6wbNWqEpUuX4uLFizqxFjereBwoGSsjPKiHMaaPSjvKurLX4ma6gQMlY+WAB/UwxnRRWU4MXhlrcTPdxYGSsXLGg3oYYxWtvCcGL++1uJn+4UDJWAXjQT2MsbJU0RODc4mbaUSMsUrz4sUL2rZtGw0YMIBMTU0JADk6OtJXX31FV65codzc3Mo+RMaYDklMTKSzZ8/Sjz/+SKNGjSJXV1eSSCQEgEQiETVr1oyGDBlC3333HR09epRiY2NJoVCUyb7lcjnNnz+fRCIR9ejRg+Lj48uk30ePHtHkyZPJwcGBTE1NydTUlJycnGjSpEkUEhKi1v7ixYvk4+ND9erVIyMjI7Kzs6OAgACKjo7War+HDh2iVq1akbGxMTVq1Ijmzp1LOTk5au1evnxJ48aNIysrK5JKpeTp6UnXr18vcZ9du3YlABofEolEpe2uXbto+PDhZG9vTwCoa9euGvcbHBxMkydPJmdnZ5JKpdSoUSMaPHgw3b17V2P7VatWkaOjIxkZGZGNjQ1Nnz6d0tLSivGuFYyvUDKmI3hQD2NMiXRsLevyKnEfOXIEvr6+kEgkGD58ONzc3CAWixEREYH9+/cjOjoakZGRsLOzAwCsWrUKU6dORdOmTeHv7w+ZTIbw8HBs3rwZAHD06FF06tSpyP0eO3YM3t7e8PT0hJ+fH/7991+sWbMGAQEBWLdundBOoVDA3d0dISEh+OKLL2BlZYW1a9fiyZMnuH79OhwcHLTu89SpU0hISFA5nvT0dEyYMAHvvfce/vzzT2G7p6cnrl+/jrZt2+LWrVtwdXXFuXPn1M5n0KBBuHTpEgYPHgxXV1fEx8dj9erVSEtLw5UrV/D2228Lbb/88kssWbIEgwYNQvfu3REWFoZ169ahW7duOHHiRJHvXYFKFUcZY+UiJyeHzp8/T9OnT6fGjRsTALKwsKChQ4fSrl276NWrV5V9iIyxMpKVlUU3btyg//3vfzRlyhTy8PAgCwsL4apV3bp16d1336UZM2ZQYGAghYWFabySVl7OnDlD1tbWVL9+fTp79myZ9fvgwQMyMzMjJycnio2NVXs+JyeHVq5cSY8fPyaiN1cmxWIxubu7U3p6ulpf1tbWJJPJKCkpqch9Ozs7k5ubm8r7OGvWLBKJRBQeHi5s2717NwGgvXv3CtuePXtGNWvWJD8/vxL1qcmvv/5KAGjnzp0q2x8/fixUqlxcXAq8Qnnp0iXKzs5W2Xbv3j0yNjam4cOHC9tiY2NJIpHQyJEjVdquWrWKANDhw4cLPc7CcKBkTMcpFAoKCQmhBQsWUKtWrQgAGRoaUu/evWn9+vUafxEzxnRTZZastVVeJW6lgIAAAkBXrlwpVvtevXqRgYEBPXr0SOPz27ZtIwD0/fffC9uSk5MpPDyckpOThW137twhALRmzRqV18fExBAA+uabb4RtgwcPJmtra7XbjwICAkgqlVJWVpbWfWrSp08fMjMzK7TsXFigLEjr1q2pdevWwte///47AaA///xTpd3z588JAA0bNkyr/vPiQMmYnomMjKSVK1eSl5cXGRgYEADq0KED/fDDDxQREVHZh8cYozd/CD569Ij2799Pc+fOpX79+pGtra1w1dHExITatWtHAQEBtHbtWrp8+TKlpqZW9mEL4uLiqFu3biQWi2nhwoUkl8vLfB82NjZkb29frLbp6ekkkUjI09OzwDZZWVlkbGxMnTt3FrZt2bKFANCWLVuEbTt27CAAdPXqVbU+GjZsSAMHDhS+tre3pz59+qi127x5MwGg27dva91nfs+ePSOJRKJyJVETbQOlQqGgBg0a0LvvvitsCwwMJABqV5rT09MJADVv3rzY/efHC2kypmcaN26MKVOmYMqUKSor9SxYsABfffUVr9TDWAUr7ijroUOH6sVa1nlHcZ8+fbpcRnGnpKQgNjYWPj4+as8lJydDLpcLX5uZmeH+/fuQy+Vwc3MrsE9jY2M0b94c4eHhhe47Li4OADRO1yaTyRAbG6vS1sPDQ2M7AIiNjUWLFi206jO/3bt3Qy6XY/jw4YUet7Z27tyJmJgYLFy4UNimnEXk0qVLKt/XCxcuAABiYmJKvD/d/GlmjBVLnTp1MGrUKIwaNUplUM+mTZvwww8/8KAexspYcScG/+qrr4qcGFzXVORE5cqwrWkQkaenJ0JCQoSvly5dig4dOgAAzM3NC+3X3Nxc6BsA/P394e/vr9ImMzMTwJsAmp+JiYnK6zMzMwtsl7cvbfrMLzAwEHXr1kXPnj0LbKOtiIgITJ48GR07dsSHH34obG/dujXat2+PxYsXo0GDBvDy8kJ4eDgmTpwIQ0ND4TxKggMlY1WEVCpFv3790K9fP7WVetavX88r9TCmBSrmKOsOHTpgwoQJ5T7KurzlHcW9YMGCcp+oXBkM09LS1J7bsGEDUlNTkZCQgBEjRqi0T01NLbTf1NTUIkOnqakpgDdXlvPLysoSnle2Lahd3r606TOvR48e4e+//8bHH39cZles4+Pj4e3tDUtLS+zbt0/t+/j777/D19cXY8aMAQAYGBjg008/xfnz53H37t0S75cDJWNVkEQigYeHBzw8PLB8+XKVlXqGDh3KK/UwlkdVK1lrqyJK3PlZWlpCJpMhNDRU7bn27dsDeLMIhJK9vT0kEglu375dYJ/Z2dm4e/cu2rRpU+i+lb/v4uLi0KhRI5Xn4uLi0K5dO5W2ynJ2XhGRwQCAoOeTEH5JjjvpCgBA+KMrRfaZV2BgIACUWbn71atX6NOnD5KTk3HhwgXY2NiotWnQoAEuXryI+/fvIz4+Hg4ODqhfvz5sbGzQrFmzEu+7avxvYIwVSCQSwdXVFa6urpg7d67KSj2TJ0/GhAkTeKUeVm1U5ZK1tip7LW5vb29s3rwZwcHBBQYuJTMzM3h5eeHs2bOIjo4W5qXMa8+ePcjOzsb7779faF8tW7YEAFy7dk1lv7GxsXj69CkCAgJU2l64cAEKhQJisRjJmdHYf2c4dh69BEMTQFznEV5lAdKGb9qv/H0IEix6YoDzr6hhbK2xz7wCAwPx1ltvCSX90sjKykLfvn1x7949nD59Gs7OzoW2d3BwEObRDAsLQ1xcnNrtAVop8XAexpje45V6WFWl76Osy1tFjOIuyr1790gqlZKLi4vGKYkePXpEAGjp0qVERHT+/HkSi8Xk6elJGRkZam3r16+vNg+lpmmDiIgcHR3Jzc1N5bxnz55NIpGIwsLChG27du0S5qFMTL9PS85b0Yz9BmRSA+TiCZp/+r+HlS3I+i3QvBNi+umCLaVkxWjsU+nGjRsEgObMmVOs96uwUd5yuZz69etHEolEbUqgouTm5pK3tzdJpVKtVxvKi1fKYYwB4JV6mP6q6LWs9Z0urcV96NAh+Pn5wcjISFgph4gQGRmJwMBAxMTEYOfOnRg6dCgA4KeffsKnn34Ke3t7YaWciIgIbNq0CQqFAkePHkXnzp2F/rdu3YrRo0djy5YtKlffjhw5gn79+sHLywtDhw5FaGgoVq9ejbFjx2Ljxo1Cu9zcXHTp0gWhoaHo4iuBxCwFVw8r8OoZELAGsMpT3b57BfhtDtCkJdDCS4zUp7Vxfl+SWp9Kn3/+OZYvX46IiIgCK0NBQUEICgoC8GaVIKlUirFjxwKAcFsTAEybNg0rV65E3759MWTIELV+lPeiAsDUqVORlZWFli1bIicnB4GBgQgODsa2bdswcuTIIr5jhShxFGWMVVm8Ug/TVfo0MbiuKe+JykvqwYMHNHHiRLK3tycTExMyNTUlR0dHmjBhAt26dUutfVBQEPXv35+srKzI0NCQbG1tady4cRQVFaXWVtM8lEoHDhygli1bkrGxMTVs2JBmz55Nr1+/VmuXlJREA/y6kqkFyNAEZOcKGrdG9eqk8uG7AFT/LZCBIciiLmjSZ34a+8zNzaUGDRqoTDquybx58wpc93vevHlCu8LWB88f9bZs2UJubm5kZmZG5ubm1L179zJZAYmvUDLGCkVEKoN6bt68yYN6WLkjHVvLWt+V11rc1cWmf9ojLuUaCIpiv0YEA9jX6Y1hLY+U45HpDg6UjDGt5B3UExQUhNzcXB7Uw0qFS9blS5dK3Poo/fVzLLtQr0SvFUGMWV5ZMBAblvFR6R4OlIyxEsu7Us/x48eRmZnJK/WwQhV3lHXeR1UdZV3eKnsUd1XxPD0ca68UPmK6MJ+7P4OZUd0yPCLdxIGSMVYmeFAPy4tL1pWLS9zaSU5ORlRUlMbHy8xHGLO28AnVC/NV11cwllT9hSQ4UDLGylz+lXqioqJ4pZ4qjEvWuoVL3OoKC4xRUVF49eqV0NbU1BSNGzcWHnZNGiC71UKQ6LXW+5Ua1sXn7gnV4go7B0rGWLniQT1VC5esdVd1LnGXJjDmf9StW1ft5/XPiMm4EbsRCpIX+5hEEMO9yWx4NV1QZuepyzhQMsYqFA/q0Q9cstYvVb3EXd6BsSjP0kKx7moLrV4jghjTOkfDwqShVq/TVxwoGWOVhgf16AYuWeu3qlDiruzAWBynH8zEpegfit2+p/1SdLL7vMyPQ1dxoGSM6QQe1FMxuGRddehTiVsfAmNRiBQ4cf8zXH2yAiIYgJCr1kYkkoBIDs+mC+HReHa1+n/DgZIxpnN4UE/pccm6atO1EndVCIzFdf/FUVx5shKPkk7me0aE5lZ90b7RNDSprX9XiUuLAyVjTKfxoJ6iccm6eqmMEnd1CozFlZTxEDEpwXidmwZjiQUaWXaCpUmjol9YRXGgZIzpleo+qIdL1tVXeZa4OTCy0uJAyRjTW1V5UA+XrFlepS1xc2Bk5Y0DJWOsStDnQT1Flazr1auHVq1awc3NjUvW1VBxStwcGFll40DJGKtyChrU4+3tDR8fH/Tu3bvSBvUUVbJu1qyZxpI1q37ylrg9PDwwZ84cpKamcmBkOokDJWOsStM0qMfIyAjdunUr10E9XLJm2sh/hfHOnTs4ePAgXrx4ARMTE2RlZQltOTAyXcSBkjFWrZTHoB4uWbOiaFOSNjY2hlwuh4GBAXr37o3OnTtzYGQ6jwMlY6zaKsmgHi5ZM03K4h7GRo0aYf/+/Vi2bBl69Oih0xOVM5YfB0rGGIPmQT3KK4t16tRBSkoKbt++zSXraqq8B73o2kTljGmLAyVjrNrLX7K+efMmrl+/joyMDKGNRCKBg4MDevbsiREjRqBVq1Zcsq5CKnOUdFVYi5sxEGOMVSOJiYl09uxZ+vHHH2nUqFHk6upKEomEAJBIJKLmzZuTr68vff/993Ts2DGKjY2lkJAQWrBgAbVq1YoAkJGREfXu3ZvWr19PsbGxlX1KrBhevnxJN2/epAMHDtBPP/1EU6dOpf79+5ObmxtZWloSAOFhampKTk5O1KdPH5o4cSItXryYdu/eTVevXqWEhARSKBRlckxyuZzmz59PIpGIevToQfHx8WXSr7559OgRTZ48mRwcHMjU1FR4/ydNmkQhISFq7S9evEg+Pj5Ur149MjIyIjs7OwoICKDo6Git9nvo0CFq1aoVGRsbU6NGjWju3LmUk5Oj1u7ly5c0btw4srKyIqlUSp6ennT9+nWVNi9evKAlS5aQu7s7WVlZkaWlJbVv35527dql1l9wcDBNnjyZnJ2dSSqVUqNGjWjw4MF09+5djceZm5tLa9euJTc3NzIxMaHatWuTl5cX3bp1S6XdokWLqG/fvlSvXj0CQPPmzSvw3H/77Tfh3K2srGjMmDH0/PnzYrxrBeMrlIyxKonKaZR1dV+pR1fp2zyMXOJ+48iRI/D19YVEIsHw4cPh5uYGsViMiIgI7N+/H9HR0YiMjISdnR0AYNWqVZg6dSqaNm0Kf39/yGQyhIeHY/PmzQCAo0ePolOnTkXu99ixY/D29oanpyf8/Pzw77//Ys2aNQgICMC6deuEdgqFAu7u7ggJCcEXX3wBKysrrF27Fk+ePMH169fh4OAgnMfAgQPx3nvvwcvLCxKJBL///jv++usvzJ07FwsWLBD6HDRoEC5duoTBgwfD1dUV8fHxWL16NdLS0nDlyhW8/fbbKsfq7++PnTt3YtSoUejYsSPS09Nx8+ZNDB8+HD179hTaiUQi1K9fH25ubjhx4gTmzZuH+fPnq537unXrMGnSJHTv3h0DBw7E06dPsXLlStjb2+Pq1aswMTEp/jcwr1LFUcYY0wFZWVl048YN+t///kdTpkwhDw8PsrCwEK441atXj3r16kUzZsygwMBACgsL03glQlsvXrygbdu20YABA8jU1JQAkKOjI3311Vd05coVys3NLYOzY0S6eYWxpM6cOUPW1tZUv359Onv2bKUeS2V68OABmZmZkZOTk8Yr/Tk5ObRy5Up6/PgxEb25MikWi8nd3Z3S09PV+rK2tiaZTEZJSUlF7tvZ2Znc3NxUfg/MmjWLRCIRhYeHC9t2795NAGjv3r3CtmfPnlHNmjXJz89P2Pbo0SOKiopS2YdCoaBu3bqRsbExpaWlCdsvXbpE2dnZKm3v3btHxsbGNHz4cJXtyv3v37+/yHOKjIwkIqLnz58XeIUyOzubatasSR4eHir/D/744w8CQD///HOR+ykIB0rGmF7RtmQdFxdXIceVnp5Ohw4dotGjR1OdOnUIAMlkMpowYQIdP35c7QOEqapKgbEgXOJWFRAQQADoypUrxWrfq1cvMjAwoEePHml8ftu2bQSAvv/+e2FbcnIyhYeHU3JysrDtzp07BIDWrFmj8vqYmBgCQN98842wbfDgwWRtba32x2FAQABJpVLKysoq9Jh//vlnAkC3b98u8vxat25NrVu3VtnWvn17ateuHRG9KX3nDaYFKSxQXr9+XeO5ExHVqFGDOnXqVGT/BeE7yhljOomKWbLu0KEDJkyYUOmjrKVSKfr164d+/fqprdSzfv16nVmpp7KUtCTdqVMnDBs2TO/nYcxb4l6wYEG1LXHndeTIEdjb26N9+/ZFts3IyMCZM2fg7u6OJk2aaGzj6+uLgIAAHDlyBF999RUA4MCBAxg9ejS2bNkCf39/AMDNmzcBAG3atFF5vY2NDRo2bCg8r2zbunVrtenD2rVrh40bN+LevXto0aJFgccdHx8PALCysir0/IgICQkJcHFxEbalpKQgODgYkyZNwtdff41Vq1YhLS0NTZo0wQ8//IAhQ4YU2qcm2dnZAN78H8vP1NQUN2/ehEKhUDvf4uBAyRirdMWdGHzo0KF6MTG4RCKBh4cHPDw8sHz5cpWVenx9fWFkZITu3bsLK/VUhXkqq3tgLEzeUdynT5/mUdx4E5ZiY2Ph4+Oj9lxycjLkcrnwtZmZGe7fvw+5XA43N7cC+zQ2Nkbz5s0RHh5e6L7j4uIAQOMKWTKZDLGxsSptPTw8NLYDgNjY2AIDZVJSEjZv3gx3d/ciV+PauXMnYmJisHDhQmHbw4cPQUTYtWsXJBIJlixZAktLS6xcuRJDhw6FhYUFevfuXWi/+Tk4OEAkEuHSpUsYPXq0sP3u3bt4/vw5AODly5eoU6eOVv0CHCgZYxWsuBOD9+nTp0pMDC4SieDq6gpXV1fMnTtXZVDPpEmTMGHCBHTo0AH9+/fX6UE9HBi1l3ct7u7du/NE5Xko/1jUVFHw9PRESEiI8PXSpUvRoUMHAIC5uXmh/Zqbmwt9A28GtCivTCplZmYCeBNA8zMxMVF5fWZmZoHt8vaVn0KhwPDhw5GcnIxVq1YVeswRERGYPHkyOnbsiA8//FDYnpaWBuDNAgxXrlwRruT269cPTZo0waJFi7QOlFZWVhgyZAi2bdsGJycnDBgwADExMfjkk09gaGiInJycAs+pKBwoGWPloqiStampKVxdXdGxY0dMnDhRKFmbmZlV8pGXr8aNG2PKlCmYMmWKyko9CxYswFdffVXkSj3lhQNj2eISd+GUwVAZmvLasGEDUlNTkZCQgBEjRqi0T01NLbTf1NTUIkOnstyrLP/mlZWVpVIONjU1LbBd3r7y++STT3D8+HFs37690Kuq8fHx8Pb2hqWlJfbt26fyM6Lsu0mTJiq3BdSoUQN9+/bFjh07IJfLta7UbNiwAZmZmfj888/x+eefAwBGjBiBt956C/v37y/xbUMcKBljpVbckrWfn59Kybq6f8DWqVMHo0aNwqhRo1RW6tm0aRN++OEHyGQy4cqll5cXjIyMSrwvDowVh0vcRbO0tIRMJkNoaKjac8rwFBUVJWyzt7eHRCLB7du3C+wzOzsbd+/eVbs3Mj9l+TkuLg6NGjVSeS4uLg7t2rVTaasskef1IPrNcVx9+RUeXfkCJoY10biWF96xGYefFv+CtWvX4ocffsDIkSMLPI5Xr16hT58+SE5OxoULF2BjY6PyvPJrTVe169Wrh5ycHKSnp8PS0rLQ883P0tIShw4dwuPHjxEVFQU7OzvY2dmhU6dOqFu3LmrWrKlVf0ocKBljWqluJeuKUtpBPRwYKx+XuLXj7e2NzZs3Izg4WCXEaWJmZgYvLy+cPXsW0dHRwryUee3ZswfZ2dl4//33C+2rZcuWAIBr166p7Dc2NhZPnz5FQECAStsLFy4IA1XSsuNxKHwsth05CkMTIMfyFp6lv2n7JPkylq34BkdXET6eMgFffvllgceQlZWFvn374t69ezh9+jScnZ3V2tjY2KB+/fqIiYlRey42NhYmJiZFXo0tjK2tLWxtbQG8+f1x/fp1fPDBByXuj6cNYoxppFAo6NGjR7R//36aO3cu9evXj2xtbVWmbmnfvj2NHz+e1q1bR3///XexprRg2lEoFBQSEkIzZ84kR0dHAkAGBgZkZ2dHbm5u5OzsXGWm1dFncXFx1K1bNxKLxbRw4UKSy+WVfUg67969eySVSsnFxUXjFEqPHj0iALR06VIiIjp//jyJxWLy9PSkjIwMtbb169dXm4dS07RBRESOjo7k5uam8n2aPXs2iUQiCgsLE7bt2rVLmIcyOfMx/XihIc3YLyaTGiAXT9D80/89Bs0CicQg1+4i+vmSA6Vna155Ri6XU79+/UgikdCff/5Z6Hs0depUAkAnT54Utj1//pwsLCzovffe0/iawqYNKsiECRNILBZTcHBwsV+TH6+Uwxgrdsk676oyXLIuW9pcYTQ0NIShoSEyMzNBRLC1tUWXLl3g4+ODrl278hXGCsZrcZfcoUOH4OfnByMjI2GlHCJCZGQkAgMDERMTg507d2Lo0KEAgJ9++gmffvop7O3thZVyIiIisGnTJigUChw9ehSdO3cW+t+6davatEHAmymL+vXrBy8vLwwdOhShoaFYvXo1xo4di40bNwrtcnNz0aVLF4SGhqLrUBOIpEm4eliBV8+AgDWA1f9XzJ9GAFumA8ZmQM+PAAOJCLVM30LXJnMhEonQqVMnNG3aFAAwbdo0rFy5En379tU49Y/yvlEASEhIQKtWrZCWloZPP/0UlpaWWL9+PZ48eYK///5b5f7MX3/9FdHR0cjIyMD3338PLy8vdOvWDQAwcuRI4aruDz/8gNDQULRv3x4SiQQHDx7EyZMnsWjRIsyaNavk38wSR1HGmF7S1YnBq7rymLibV+qpXDxRedl48OABTZw4kezt7cnExIRMTU3J0dGRJkyYoLZeNRFRUFAQ9e/fn6ysrMjQ0JBsbW1p3LhxaivVEBFt2bKFANCWLVvUnjtw4AC1bNmSjI2NqWHDhjR79mx6/fq1WrukpCQaOMyLTC1AhiYgO1fQuDWqVyf7fwGV/8P5H3n337Vr10Lb5vfw4UMaMGAAWVhYkKmpKXXr1k3jlcTC+v3rr7+EdkeOHKF27dqRubk5SaVS6tChA+3Zs6eA707x8RVKxqooKuYo6/xrWVf1UdblpbLXks47qOfw4cNITEws00E9TBWvxV29bLnmjiev/gYht9ivEYskaGbVD76uv5fjkekODpSMVQFcsi5/lR0YtZF/UE9UVFS1X6mnLHGJu3rJeP0CSy/ULdFrRRBjllcWDMSGZXxUuocDJWN6prijrPM+eJR10fQpMGqDiFRW6rl582aVXKmnIvAo7qpNoVAgJSUFycnJKo/naeGIlX1d4n4/d38GM6OSBVJ9woGSMR3FJeuyVVUDo7ai8qzUExQUBIVCgQ4dOgiTqTdr1qyyD1EncYlb9xUUCIv7SElJgaZIVEsGTP215Mf1ZddkmEi0mytSH3GgZEwHcMm69Dgwai/vSj3Hjx9HZmYmnJyc4OPjg/79+1foSj26jEvcFaO8AiHwZp7XmjVrlughrWGIFVdkkCuytD4nE0ktzPB4AZGo6v8/4kDJWAXjknXJcGAsXzyoRx2XuLWjq4HQ0tKy1D+7h8M+Qkj8NihIXuzXiGCATnZfoIf996Xat77gQMlYOeGStXY4MOoOHtRTPUvcVTkQllZc6k1sDG6t5atEmNrpEWqaNi6PQ9I5HCgZKwNcsi4aB0b9VB0H9ehriZsDYfk6GjEZ/8Ssw5upHYvWtck8eDadX56HpFM4UDKmJS5Za8aBsXqoyoN6KrvEzYFQtykoF3+Ej8OtuC0QQQyCQq2NCAYg5KKj7Wfoab+0Wv0e40DJWAG4ZK2KAyPLryoN6imLEjcHwqqPiBCasAtXnqxAbEowgP9CJADY1fRAB9tP4Vi3f2UeZqXgQMkYuGQNcGBkpaPPg3qUJW4A2LRpE1q0aMGBkBUpPvUWnr66ite5qTCWWMC2pjvqmjlV9mFVGg6UrNqpriVrDoysolTWoB5trxC+fPkSd+/eRUJCAiQSCXJzczkQMlZCHChZlVXdStYcGJku0mZQT0WWjE1NTREaGoqEhAR4eHjgvffeQ+3atTkQMlZCHChZlVAdStYcGJmuK04gfPz4Me7cuYNHjx7hxYsXAABjY2OIRCJkZRU8cXRZXiHU11HcjOkyDpRM71TVkjUHRlbZKnpQiampKV6+fImnT58iMjISOTk5aNCgAdzd3dGrVy907NgRtWvXLrMrhJU9ipuxqowDJdNZVa1kzYGRlTd9HmWsaVCPjY2NMKjH09OzVKGyOk5UzlhF4kDJdIKmknVISIgQsvShZM2BkZWWPgfCslTWg3q4xM1Y+eNAySqcvpasOTCyonAgLHulWamHS9yMVRwOlKzc6FvJmgMj40Co+6KKuVIPl7gZq1gcKFmZ0IeSNQfGqo8DYfVS0Eo9LVu2xIkTJ2BoaIjffvuNS9yMVQC9DJSRkZFYvnw5Tp48iadPnwIAGjduDC8vL4wfPx6urq4AgPnz52PBggUF9hMXF4f69esjKioKTZo0AQB88803mD17tlrb4cOHIzAwEGZmZkhLSxO2BwcHY+vWrbh69Spu374NuVxe4AdSVaGrJWsOjPqPAyErqYyMDJw8eRILFizArVu3AAD169fHgAEDymRQDys/xf1MV7p06RKWLVuGy5cvIzk5GTKZDL169cKsWbNga2tb7P0ePnwY8+fPR1hYGOrVq4fRo0djzpw5kEgkKu2Sk5MxY8YMHDhwABkZGWjXrh2WL1+O1q1bl7jPU6dOYcGCBbhx4waMjY3RvXt3LFu2DI0bN1Zp17hxY0RHR6vtZ/z48Vi/fr3w9datWzF69GiN56nMOtr2qS1J0U10y5EjR+Dr6wuJRILhw4fDzc0NYrEYERER2L9/P9atW4fIyEjY2dkJr1m3bh1q1Kih1lfNmjVVvjYxMcFvv/2mFijT09Nx6NAhmJiYqPVx9OhRbN68Ga6urmjatCnu3btXNieqA4pbsu7YsSMmTpxY7iXrkgbGTp06YdiwYRwYK0BFB8IGDRrAxcWFAyFDSkoKVq1ahdu3b2PevHno2rUr/vjjDxw4cADr1q2rkJV6mPa0/UxftWoVpk6diqZNm+KTTz6BTCZDeHg4Nm/ejN27d+Po0aPo1KlTkfs9duyY8IfGqlWr8O+//2LRokV49uwZ1q1bJ7RTKBTw9vZGSEgIvvjiC1hZWWHt2rXw9PTE9evX4eDgoHWfR44cQf/+/dG6dWv88MMPSElJwcqVK9GlSxfcvHkTdevWVTnWli1b4rPPPlPZpry1I7+FCxcKF8iU8mcdbfssLr26Qvnw4UO4ubnB1tYWZ86cgUwmU3leLpdj7dq1GDBgABo1aiRcoXz+/DmsrKwK7Fd5hXLgwIHYv38/bt26BTc3N+H5wMBA+Pv7o3fv3jh79qzKFcqEhARYWFjA1NQUH3/8MdasWaOXVyh1oWTNVxgrH18hZPqosFHcpRnUw8qXtp/ply5dgoeHBzp37ozjx49DKpWq9NW5c2eIxWLcuXMHtWrVKnTfLi4uMDQ0xLVr14Srh7Nnz8Z3332HsLAwODo6AgD27NkDX19f7N27F4MGDQIAPH/+HM2aNUOfPn0QGBiodZ8uLi54/fo17ty5I/xeCwkJQevWrTFt2jQsX75c6LNx48Z4++23ceTIkULPR3mF8p9//kGbNm0KbVvcPrWlV1colyxZgvT0dGzZskXtBw8AJBIJpkyZUuL+O3bsiJs3byIwMFAlUO7cuRO9e/dG7dq11V6jjyMGi1uy7tOnT5mWrPkKY/njK4SsOinOKG6RSARXV1e4urpi7ty5KoN6Jk2ahAkTJmgc1MPKn7af6d988w1EIhG2bdumEiYB4K233sKSJUvw4YcfYsOGDfjqq68AAK9evUJcXBxkMhksLS0BAGFhYQgLC8OaNWtUStGTJk3Ct99+i3379gmVyn379sHa2hoDBw4U2tWtWxdDhgzBjh07kJ2dDWNj42L3mZSUhLCwMHzxxRcqvxPd3Nzg5OSEXbt2qQRKpdevXyMnJ6dYFcDU1FRIpdIiL/ho02dx6FWgPHLkCOzt7dG+fXutXpeUlKS2TSKRaLwM7Ofnhx07duCHH36ASCTCixcvcPLkSfz66684fvx4SQ+9UlR0yZoDY+lxIGSsePKO4l6wYEGxR3E3btwYU6ZMwZQpU1QG9cyfPx9ffvklnJychHDZpk0biMXiCjib6kmbz/SMjAycOXMG7u7uaiVdJV9fXwQEBODIkSNCoDxw4ABGjx6NLVu2wN/fHwBw8+ZNAFC7kmdjY4OGDRsKzyvbtm7dWu3noF27dti4cSPu3buHFi1aFLvP7OxsAG8+A/OTSqW4c+cO4uPjVS7inD17FlKpFLm5ubCzs8P06dMxdepUje+Bl5cX0tLSYGRkhF69emH58uUqZfmS9FlcehMoU1JSEBsbCx8fH7XnkpOTIZfLha/NzMxUvlnNmzdXe03z5s0RERGhtn3YsGH47rvvcOnSJXTp0gV79uyBiYkJ+vXrp9OBsrglaz8/vxKXrDkwFo0DIWPlL2+J+/Tp0yUexV2nTh2MGjUKo0aNUlmpZ+PGjfj+++/LdKUepkrbz/T79+9DLperVA/zMzY2RvPmzREeHl7ovuPi4gBA41VRmUyG2NhYlbYeHh4a2wFAbGwsWrRoUew+ra2tUbNmTVy6dEmlTWJiIsLCwgAAMTExQqB0dXVFly5d0Lx5cyQmJmLr1q2YNm0aYmNjsXjxYuH1UqkU/v7+8PLygoWFBa5fv44ff/wRnTp1wo0bN9CoUSOhbXH71JZeBUoAGgfXeHp6IiQkRPh66dKl+Pzzz4Wvf//9d7UbsAu6Cufi4gJXV1f89ttv6NKlCwIDA9G/f3+1y+uVqbxK1hwYORAypsvKc6JyqVSKfv36oV+/fmor9fCgnrKn7Wd6hw4dAADm5uaF9mtubi70DQD+/v7ClUmlzMxMAG8CaH4mJiYqr8/MzCywXd6+itunWCzG+PHjsXjxYsycORNjxoxBSkoKZsyYgdevX6v0BbwZNZ7X6NGj0adPH/z444/45JNP0LBhQwDAkCFDMGTIEKGdj48PevXqBQ8PD3z77bcqo7eL26e29CZQKn+I8g6IUdqwYQNSU1ORkJCAESNGqD3v4eFR6KCc/IYNG4bly5dj+vTpuHz5Mr7++uuSH3gplHXJujoERg6EjFVNJS1xl4REIoGHhwc8PDywfPlylUE9vr6+PKinDGj7ma5sn5qaWmi/qampRYZOZQVTWX7OKysrS6XCaWpqWmC7vH1p0+fChQvx4sULLFmyBD/88AMA4N1338XYsWOxfv16jSFbSSQSYfr06Thx4gTOnTunMfModenSBe3bt8fp06cLbKNtn4XRm0BpaWkJmUyG0NBQteeU919ERUUVv0N5EpC8Bci4ADx5c6kaaWcA+Uj4+flh5syZGDduHOrUqYN33323DM6gcGVRsk5OTsb9+/f1OjByIGSM5VdWJe6S4EE95UPbz3R7e3tIJBLcvn27wD6zs7Nx9+7dIkc5K8vScXFxKqVg5bZ27dqptFWWs/OKfHwXAHAr9XvEXf8OUa/fBOPIJxFF9mlkZITNmzfj22+/xb1792BtbY1mzZph2LBhEIvFsLe3L/T4lf1rGh+iqe3du3eL1a64fRZEbwIlAHh7e2Pz5s0IDg5W+eZoJTcNiP8UeLUNIDkAAjL/P4CknQDuNoStpS86d2qPc+fOYeLEiWoTkpZWSUvWea8wHj9+HOvXr9e5wMiBkDFWVnRxLW4e1FN2tPlMNzMzg5eXF86ePYvo6GiVuaaV9uzZg+zsbLz//vuF9tWyZUsAwLVr11T2Gxsbi6dPnyIgIECl7YULF6BQKCAWi5GZk4Sjdz/BliO/wdAESDM7j6xkgP7/x3Lp7j54VWsMejn8CCNJDY19KllbWws/z7m5uTh37hzat29f6BVKAHj06BEAqM1XWVDb4rYrbp8F0atAOWPGDAQGBmLMmDE4c+aM2i+WIud/zE0GoryArH8B5GpoQADkwKtdWDSxPv7q9hl8/caW+Hi1LVm/9dZbqFGjBhISEoSQmDc0VkRg5EDIGNMFFVniLike1FM62n6mz549G2fOnIG/vz+OHj2qUkaOjIzEjBkzIJPJMH78eGG7pmmDXFxc4OjoiI0bN2L8+PHCz9W6desgEomE+SYBYNCgQdi3bx/279+P3n3dseV6FzxNeIQ75wnNOgCS//+W1msMWNkC//yZi3e8f0Fsyj/48J1zGvvUZNmyZYiLi8OqVauEbUlJSbC0tFT5uc/JycEPP/wAIyMjlSv1z58/VwuDR48exfXr11WmXtKmT23pVaB0cHBAYGAg/Pz80Lx5c2FWfSJCZGQkAgMDIRaL1W4o3bdvH2qYmQEvfgCyw/EmOAI9OwLWGm+tzEXXlgno2uEvoOkPhR5TdHQ0fv31V8jlcpw/fx7Am/ks4+Li8OzZM+Hm2nr16uHtt99Gt27dULt2bRgZGSEjIwPR0dG4cuUKdu3aVSaBURkIo6OjORAyxvRSZZa4S4oH9WhP2890Dw8PLFu2DJ9++ilcXV3h7+8PmUyGiIgIbNq0CQqFAkePHlWZ1FzTtEHAm4E+/fr1w7vvvouhQ4ciNDQUq1evxkcffQQnJyeh3aBBg9ChQweMHj0aXn7mINMEXD2sgEIBeH2oej49A4Df5gDbv1Lgbc8Q/L7ibZzZE6vW544dO/D777/Dw8MDNWrUwOnTp7Fnzx589NFH+OCDD4R2hw8fxqJFizBo0CA0adIESUlJCAwMRGhoKL777juVe3c7deqEVq1aoU2bNrC0tMSNGzfwv//9D40aNVIZB6JNn9rSq5VylB4+fIjly5fj1KlTePr0KUQiEezs7ODp6YkJEyYI0woUtZb3X/8DPNsBUTFAk17A0s+Az/MvhdnoIGDRH8Cb0WL79u3D48ePhZL18ePHcfLkSY39W1hYwMXFBSkpKXj69GmxVnqxtbVFnTp1IJFI8OrVq3IPhMV9cCBkjJU3XSxxlxav1FO04n6mK124cAHLly/HpUuX8OrVK5W1vPOXwpUryOQPlABw8OBBLFiwAOHh4ahbty78/f0xd+5cGBoaqrR7+fIlxn0yBEf/OA35a8CmGfDueKCB+oyECL8EnN8OPH8MmNUEPvzwQyz/bpNKn8HBwfjiiy/w77//IjMzE82bN8fEiRMREBCgcqHo+vXrwnrfz58/h5GREVq2bIkpU6Zg8ODBKvudPXs2/vzzT0RGRiIjIwMymQze3t6YN2+eyv8hbfrUll4GyhJ5MhRI+R2AvMimSgQDZIk74HjEZ7h16xb++ecf3Lx5E/Hx8QAAAwMDWFhYQCwWIyMjQ2Wov4mJCWQyGerVq4datWrB3NwcpqamMDIygkgkQnZ2tsbAyIGQMVYd5S1xz58/XydL3GUh76CeoKAgKBQKHtSjB7bf6I6ol+dBGm+X00wsksCp3iAMevu3cjwy3VE9AiXJgTBTaBMm86rdCXiZorrNwMBAJSDm5uYiOztbJVTmx4GQMcbUFbYWd1WWd1DP8ePHkZmZyYN6dFBmThKWBNUp0WvFIkPM8syAWKxXdxiWSPUIlPLnwN16JX558/eBe1FvQqSZmRksLCxQq1YtWFhYwNzcXOVRo0YNtW3K7fkvozPGWHWWm5uLzZs3Y+PGjWjXrh0WLVqEOnVK9sGt7zIzMxEcHIxz587h/PnzePXqFerWrYuuXbvC09MTbdq04c+QSpKaG4lzKYUPqinMF+7PITUq/lzY+qp6BMrcl0BE7RK//K0+wKMnZXg8jDHGGNMLtW2AKdtL/vovPV7CxLBmmR2Prqr612ABQGwJiC0ARUrRbfN5nQPEv/jva5FIpHKPo4GBAWrUqAEjIyNIJBKh/P369WtkZmYKs+lrYmZmVqwrnJq2mZmZVcn7ixhjVV9wcDBmzZoFkUiEb7/9Fm3btq3sQ9JZRIQHDx7gr7/+wrlz53D37l0YGhqiXbt28PT01HolOKY9OWXieLInqAS3zRkbWMBYUj1G9FePK5TAm8nME3+G5vknNZPLgR1/Ah9/9ya8KdfiNDIyEtbcFIlEqFWrFkxMTJCbm4vk5GSVpZdq1KiBRo0aQSaTwcrKShigY2JiAkNDwwIH5ygf6enpBR6fhYVFie/JtLCw4EDKGKtQVXEUd0XjQT2V48CdUQhN+A0KKn6oFMEA7W2nopfD8nI8Mt1RfQJl9j3ggYYx/kW4+Wo9Vv8SjD179iAtLQ3Ozs6wtrbGkydP8ODBAwBAzZo1YWxsrBIm69Wrh4YNG6JWrVqQSCTIzs7Gs2fPEBUVhYyMDKF/c3NzjdMHKR81atQo1UTjHEgZY7qguozirkg8qKfiPH11Fb9c66D16z7ueA91pA7lcES6p/oESgCI/wxI/AnKic0LJwYsRwANtgIiEdLT07F//35s3boVZ8+ehZmZGby9veHo6IiEhAScP38eERERAAAbGxtYW1uDiBAfHy9MM1SjRg24ubmhefPmkMlkMDc3h0KhQExMjLAajnIOKaWiAmetWrUKXREnJyenRPNZciBljJWV6jqKuyLlXann8OHDSExM5JV6yhAR4WCYP/6N3wGCohivEKGD7fRqc3USqG6BkhRAbACQ/AsAMaDxh0IEgADzD4CGgYBY/T9gdHQ0tm/fjq1bt+LRo0do0qQJPvzwQ/Tp0weRkZE4d+4czp07JwTMt956C46OjrC0tERmZibu3r2LiIgIKBQKGBgYwNHRUViz283NDY0aNUJaWprKOt3lFTiLwoGUMVZSXOKuHPlX6omKiuKVespAruI1fg/1Q/jz/RCygpo32aKVbCz6Om2ESFR9rhBXr0AJAETAqx3Ai2VA9m0ABvgvXOYCRs2BOtOBWuOAIn4QiAgXL17E1q1bhZK4p6cn/P398cEHHyAtLQ3nz59XC5jNmzdHly5d0KRJExgbGyMyMhK3bt1CSEiIEMAaNGgghEzlo2nTphCJREhMTNQYNisjcBaFAylj1ROXuHUDr9RTtogUuB6zCVee/ITEjLsQwQAikRhEChByYV3DFR1tP4dr/RHl+tmqi6pfoFQiAjKDgYwgIDcFMDAHTDsAUnegBD8EmkrigwcPhr+/P9zd3SEWixEfH19gwFSO1rOzs0NsbCxu3bolPGJjYwH8VzLPGzJdXFxgamqa57RIrwJnUTiQMqZ/uMStu3hQT9kgIjxOvoCnKVeQLU+FscQCdjU90MCiXbULkkrVN1CWo4JK4qNGjUKTJk2EdkUFTE9PT3Tt2hUGBgbC2uHKR0Elc2XZvG7duhqPraoFzqJwIGWs4nCJW7/woB5WljhQlqOiSuI1atRQaV/cgCmTyZCZmYnQ0FCVkFmcknlRvxyqW+AsCgdSxoqHS9z6jQf1sNLiQFlBilMSz0+bgAkACoUCDx8+VAmZ2pbMi8KBUzscSFl1wCXuqoUH9bCS4EBZCYpbEs9P24Cp9OzZszIrmReFA2fZ4kDKdBmXuKs+HtTDiosDZSXStiSeX0kDJoByK5kX55w5cFYcDqSsvHCJu3riQT2sIBwodURJSuL5lSZgAhVTMi9KUYEzKipKJeRw4CxfHEiZJlziZgAP6mGqOFDqoJKWxPMrbcBUqsiSeVE4cOoXDqRVC5e4WUF4UA/jQKnDSlsSz6+sAiZQeSXzonDgrFo4kOoOLnGz4uJBPdUTB0o9URYl8fzKMmACulEyLwoHzuqFA2nZ4BI3Kyke1FN9cKDUQ2VVEs+vrAOmki6VzIvCgZPlVd0DKZe4WVnTNKinZcuWMDExQVxcHBISEgAAjRs3hpeXF8aPHw9XV1eVPi5duoRly5bh8uXLSE5OhkwmQ69evTBr1izY2toW+1gOHz6M+fPnIywsDPXq1cPo0aMxZ84cSCQSlXbJycmYMWMGDhw4gIyMDLRr1w7Lly9H69athTbnzp0r9A+tRYsWYdasWQCAuLg4rFy5ElevXsW1a9eQlpaGv/76C56enmqv8/T0xPnz59W29+rVC8ePH1fZdv/+fcyZMwcXL15EUlISbG1tMWzYMHz++eeQSqUqbV+/fo1ly5Zh+/btiIqKgqWlJdq0aYMNGzagYcOGRb53mnCg1GNlXRLPr7wCJqC7JfOicOBk2tDnQMolblbeEhMT8e233+Lnn39Gbm4uAKB+/fpo1aoVatWqhcuXLyM6OhqRkZGws7MDAKxatQpTp05F06ZN4e/vD5lMhvDwcGzevBkAcPToUXTq1KnIfR87dgze3t7w9PSEn58f/v33X6xZswYBAQFYt26d0E6hUMDd3R0hISH44osvYGVlhbVr1+LJkye4fv06HBwcAAAJCQk4deqU2n5+/fVXnDx5EsHBwWjbti2A/8Kng4MDrKys8PfffxcaKB8+fIjvv/9eZbuNjQ26desmfP3kyRO4urrC0tISEyZMQO3atfH3339j69at6NevHw4dOiS0zcnJwXvvvYfLly9j3LhxcHV1xcuXL3H16lXMmzcPLi4uRb5/mnCgrCLKoySeX3kGTEA/SuZF4cDJylJlBdKXL1/iwIEDEIvF+Oyzz+Du7q7XJXummx4+fAg3NzfY2trijz/+wJ07d1QG9chkMjRt2hQTJkzAkCFD8M8//8DDwwOdO3fG8ePHVa66PXz4EJ07d4ZYLMadO3dQq1atQvft4uICQ0NDXLt2TbgiOXv2bHz33XcICwuDo6MjAGDPnj3w9fXF3r17MWjQIADA8+fP0axZM/Tp0weBgYGF7sfBwQEikQj37t0TtqWmpiInJwe1a9fGvn37MHjw4EID5YsXLxAaGlrofr777jvMmjULoaGhKoHwww8/xPbt25GUlCS8J0uWLMHs2bNx8eJFtGvXrtB+tcGBsgoqr5J4fuUdMJX0qWReFA6crCJpG0hfvnyJ+/fv4/nz5zAwMBCuGmmiDyV7ptvGjx+PjRs34sqVK2jfvr2wvaBBPVKpFM+ePcPNmzfVyuAAsH37dnz44Yf4/vvv8dVXXwEAXr16hbi4OMhkMlhaWgIAwsLC4OLigjVr1mDSpEnC62NjY9GgQQN88803mD17NgBgyJAhCAoKQmxsrMqFmfHjx2PHjh1ISkqCsbGxxvMLDg5G+/btMX/+fMybN09jm+IGylu3biErK6vAyuNXX32FxYsX4/nz57CyslLZvnTpUqSkpMDMzAwKhQKNGjVCly5dsHv3bsjlcrx+/VqtJF4SHCirsPIuiedXUQET0N+SeVE4cLLKoqnErVAo9LZkz3RfgwYNIJVKcf/+/QLbKAf17NmzB99++y0AFDioJzs7W7gX8OLFiwCArVu3YvTo0diyZQv8/f0BADt37sSIESNw9epVtSt0jRo1Qrt27fD7778DeHOF0cHBAUePHlVp98svv+Cjjz7C7du30aJFC43HPnXqVPz888+4f/8+7O3tNbYpTqC8fPkyRCIRXr9+DWtra4wbNw5z586FoaGh0O748ePo06cP+vXrhwULFqBOnTq4fPkyAgICMGbMGPz0008AgNDQULRo0QKLFi1CdHQ0tm3bhtevX6NFixZYuXJlqQbcSYpuwvSVSCSCu7s73N3d8fPPPwslcX9/f0yePLnMS+L169eHr68vfH19AagHzA0bNgAom4BpamqKtm3bCvekAJpL5lu2bNGrkrlIJIKVlRWsrKzQpk0btecLC5xnz57lwMlKJO8o7tOnTwsfKgYGBsLPY0loe4X04cOHHEiriZSUFMTGxsLHx0ftueTkZMjlcuFrBwcHDB48GN9++y1Gjx6Nli1b4uDBg5g0aRImTJigslJP8+bNER4eXui+4+LiAEDjZ49MJhM+M5RtPTw8NLYD3lzV1BQoc3NzsXv3brRr167AMFkcb731Fry8vNCiRQukp6dj3759WLRoEe7du4fdu3cL7Xr37o1vvvkG3333HQ4fPixsnzVrFhYtWiR8rQzvP/30E2rXri18Ln/33Xfo3bs3/vnnH41Xf4uDA2U1YWZmhpEjR2LkyJEqJfGtW7eWW0m8IgMmAIjFYuGvycGDBwvb85fM//rrL6xbt04vS+YcOFlZKu9R3IaGhhxImUYpKSkAoLFS5unpiZCQEOHrpUuXokOHDgDeXNWcMmUKpkyZorJSz/z58/Hll1/C1NQU2dnZCA4ORps2beDv7y9cmVTKzMwEAI2lahMTE+HYlG0Lape3r/zOnDmDhIQEfP3114W9DUX65ZdfVL4eOXIkAgICsGnTJkyfPl14X4A3I+M9PDzwwQcfoE6dOvjzzz/x3XffoX79+vj4448BAGlpaQDe3Md58+ZNNGrUCADQrVs32NvbY8mSJdixY0eJjpUDZTVkZ2eHOXPmCDflbt26FcuWLcP8+fPLtSRe0QFTqV69eujZsyd69uwpbNNUMj948KDel8w5cLLiylviXrBggU6O4uZAWnWZm5sD+C/g5LVhwwakpqYiISEBI0aMUGmfmpoqtKtTpw5GjRqFUaNGCSv1+Pv7IysrC+3bty9wpR5lVSo7O1tt31lZWSpVK2VA1dQub1/57dy5EwYGBsLnXVn67LPPsGnTJpw+fVoIlLt27UJAQADu3bsnTPszcOBAKBQKfPnll/Dz80OdOnWE4+3cubMQJgHA1tYWXbp0weXLl0t8XBwoq7GKLonnV1kBE6i6JfOicOBkQMEl7qqGA6nusrS0hEwm0zh6WTlAJyoqSthmb28PiUSC27dva+xPKpWiV69eyMjIQMeOHfH9998Lg3rWrVunslJPzZo1AbwpZ+cNVcptee+rlMlkQok8r8dPHwIAwjJ+RvLt9TAyMIddra5oYe0H+WsRDhw4gB49epTLvK3KY05KShK2rV27Fq1atVKbQ7Jfv37YunUrbt68iR49esDGxgYANB5XvXr1cPPmzRIfFwdKBqBySuL5VWbABKpHybwoHDirNp6oXDscSMuXt7c3Nm/ejODg4CKnrzEzM4OXlxfOnj2L6OhoYV7KvPbs2YPs7Gz07dsXHh4e8PDwwPLly1VW6vH19RWmCVqxYgV+/PFHYVBPbGwsnj59ioCAAKHPli1b4sKFC1AoFBCLxXgtT8OpB1/il8MbYGgCvDQ5jpTnCohggNvxv+LEvWlIu+WF1NRUDB8+vAzfrf88evQIAFQ+ZxISEjROlZSTkwMAwj2pLVq0gKGhIWJiYtTaxsbGluqzi0d5swJV9CjxolTkKPKiVNVR5qXFo9R1F09Urn/0eWL84rh//z5atmyJJk2a4MyZM2p/3ERGRqJp06ZYunQpPv/8cwQFBcHLywseHh44evSoSnUoMjISnTp1gkgkUpmHMv+0QVH/v1LPzJkzkZGRAQDo2LEjfHx8EBUVhfXr1+POnTtwcnICAOzevRtDhw7F3r174d2/G7bd8EJkTCh+/lCBt9oAg2ern9dvc4DIm2LExceitmXhf7AVNso7JSUFxsbGKvdwEhH8/Pywe/duXL9+XVitp2/fvjh58iT+/fdfNGvWTGg/YMAAHD58GE+ePBGuTvr4+ODIkSMIDQ0V5tsMDw9HixYtMH78eKxZs6bQYy4IB0pWLBUxcbq2dClgAlVjYvbyxoGzcvBa3NWTPgTSQ4cOwc/PD0ZGRhg+fDjc3NxARIiMjERgYCBiYmKwc+dODB06FMCb0cmffvop7O3thZVyIiIisGnTJigUChw9ehSdO3cWjlPTtEEAcOTIEfTr1w9OTk4wMjLCv//+i9zcXNSsWRMTJ06Ej48P2rRpAyJCly5dEBoaih7DaiPH+AmC/yC8egYErAGsVCvmyEgBlg0BnN1F+PqnvhjqelDj7yjlyOs7d+5g165dGDNmjFABVM6Bee7cOfj5+cHPzw/29vbIzMzEgQMHcOnSJQQEBAhVOwAICgpCt27dUKdOHXz88ceoU6cOjhw5gmPHjuGjjz7Cpk2bhLZhYWFo3749zM3NMWXKFADAzz//DLlcjps3b6JBgwZF/mxpwoGSaa2iJk7Xlq4FTKWqNDF7eePAWba4xM1Ko6ICqbGxMZ4/f47ExERkZGRAJBKhdu3acHZ2Rt++fdGqVSuVQBoSEoIVK1bg0qVLePXqlcpa3vlL4QUFSgA4ePAgFixYgPDwcFhZWaFz584wNTXFkSNHkJiYKAzq6d69O37bvx5Hj5yG/DVg0wx4dzzQoLn6eV07AhxZAfh9AzTvCHzU5ioaWKqX8wv7vaSMZZGRkfjyyy/xzz//ID4+HmKxGE5OThg3bhwCAgLU+ggODsb8+fNx8+ZNJCYmCp/NM2bMUFuf/MaNG/jyyy/x999/QywWo1u3bli6dKmwlGRJcKBkJaZrJfH8dDVgAlwyLykOnMXHJW5W2fThCqkmmlbqGbXYAE1aKSASFz8yiUUStLAeAR+XLVq9b/qKAyUrE7pYEs9PlwMmwCXzssCB8w0ucbOqQBcCqaWlJV4kP0Ws7VSU5FeBgcgIX3tlQCyq+n/McaBkZU5XS+L56XrAVOKSedmp6oGTS9yM/aesAmmdhsAnW0t+HF94vIDUsE7ZnJQO40DJyo2ul8Tz05eACXDJvLzoc+DkEjdjZSsnJwf379/HxeuHEWczs8T9zPBIgqmh+pQ+VQ0HSlYh9KEknp8+BUyAS+YVQVcDJ5e4GSud3Nxcjb8/4+LiYGQKfHUQEJfg7zNDAzPM7JoCkUj3PuPKGgdKVuH0pSSen74FTCUumVecig6cXOJmTHsZGRlqFZ7bt29rrPC0aNECCQkJCMtdiHrOiTDQYjkYsUiCdxpMwHvNV5XTmegWDpSs0uhbSTw/fQ2YAJfMK0tZBk5TU1NMnjwZ58+f5xI3YwVISEhQ+4P67t27Rf5BnZSUhM2bN2P16tV48uQJfEa1QstR2i9LOKn9HdSt4VwOZ6Z7OFAynaCPJfH89DlgAlwy1wXaBk6RSIQmTZrAxcWl0u/hZKwyFVayBor/+ysiIgI///wztm3bBrlcjuHDh2Pq1KlwdXXF3n8HIeL5QRAUxTgiEd6xGYf3nTYU3bSK4EDJdI6+lsTz0/eAqcQlc90hl8vx9ddfY+nSpWjRogUGDBigFkB1ddAQY2VFm5J1cSosRIRTp05hxYoVOHbsGKytrTFp0iSMHz9e5RaSnNxM7Lrtg0dJpwAUFJ1EAAjO9YbgA5edEIu1qJHrOQ6UTGfpe0k8v6oSMAEumVeG4ozi1tVBQ4yVVElL1sWRkZGBHTt2YOXKlQgLC0PLli0xffp0+Pr6qqyfnVeuIgdXnvyEq49XIvV1LMQiw/9/hqAgOWqaNEFH20/RtuGkajEQJy8OlEwvVIWSeH5VKWACXDIvT2U1ipsDJ9NVZVWyLo6YmBisWbMGGzZswMuXL9G/f39MmzYNHh4exf55VlAu7r84iqcpV/BangZjiQXsarqjae0e1S5IKnGgZHqnqpTE86tqAVOpuCXzvB8WXDJ/o6JHcXPgZBWhrEvWxRUcHIwVK1Zg7969MDU1xdixY/HJJ5+gadOmZXFa1R4HSqa3qlpJPL+qGjCBokvmNjY2ah8ob731ll5eiS4pXZyonAMn01Z5lqyLQy6XY//+/VixYgX+/vtvNG3aFFOmTMHo0aNhYWFRZvthHChZFVEVS+L5VeWACXDJPC99naicA2f1VZEl6+LIP+2Pl5cXpk2bBm9v70r/w6yq4kDJqpyqWhLPr6oHTKXqVDKv6hOVc+CsGiqrZF0cBU374+bmVu77ru44ULIqq6qXxPOrLgETqJolc10scVc0Dpy6p7JL1sVR3Gl/WPniQMmqhepQEs+vOgVMQL9L5vpa4q5oHDjLj66VrIujJNP+sPLDgZJVO9WlJJ5fdQuYSrpcMq/qJe6KxoGzeHS5ZF0cZTHtDyt7HChZtVXdSuL5VdeACehGyZxL3BWvOgZOfShZFxdP+6PbOFAyhupZEs+vOgdMoGJL5lzi1k36HDj1sWRdHDztjx4hxpiKqKgoWrhwITVt2pQAUJMmTWj+/Pn06NGjyj60ChUXF0e7du2iCRMmkKOjI+HN4rXUvHlzGj9+PP32228UGxtb2YdZ7hISEujkyZO0ZMkSGjZsGDk7O5NYLCYAZGBgQC4uLjR8+HBasmQJnTx5kp49e1ZgX3K5nObPn08ikYh69OhB8fHxFXgmrLQUCgU9f/6c/vnnH9q7dy8tXbqUJk+eTN7e3uTi4kJmZmbC/xMAZG5uTi1atKC+ffvSJ598QsuXL6fff/+drl+/TomJiaRQKEp0HOnp6XT16lXasGEDTZw4kTp27Kiy7wYNGpC3tzfNmjWL9u7dS/fv36fc3NwyfjfKzqNHj2jy5Mnk4OBApqamZGpqSs2aNaOOHTuStbU1ASAvLy86dOgQyeVyunjxIvn4+FC9evXIyMiI7OzsKCAggKKjo7Xa76FDh6hVq1ZkbGxMjRo1orlz51JOTo5au5cvX9K4cePIysqKpFIpeXp60vXr19XaTZs2jVq1akW1atUiU1NTcnR0pHnz5lFqamqhx7Fo0SICQC4uLmrPffvtt9S+fXuysrIiY2Njsre3p6lTp2r8PbNo0SLq27cv1atXjwDQvHnzivU+9OjRgwDQ5MmTi9W+IHyFkrECUDUviedX3a9g5lWSkrmZmRlGjhzJJe4qjMrhCqeme4D1tWStyZEjR+Dr6wuJRILhw4fD2toaf/31Fy5dugS5XA4AOHr0KPr06QMAWLVqFaZOnYqmTZvC398fMpkM4eHh2Lx5s9C2U6dORe732LFj8Pb2hqenJ/z8/PDvv/9izZo1CAgIwLp164R2CoUC7u7uCAkJwRdffAErKyusXbsWT548wfXr1+Hg4CC07dKlC9555x3Y29vDxMQEN2/exP/+9z+0adMGQUFBGitdT58+RfPmzSESidC4cWOEhoaqPP/BBx+gbt26cHR0hLm5OcLDw7Fp0ybUq1cPt27dgpmZmdBWJBKhfv36cHNzw4kTJzBv3jzMnz+/0Pdh//79GDVqFNLT0zF58mSsXr26yPeuQKWKo4xVE2lpabR9+3bq1q0bASAzMzPy9/enc+fO6fRf/uWJr2Cqys3NpXv37tGePXvo66+/pvfee49sbGyE90UkEpGhoSH179+fNm3aRP/88w9lZGRU9mGzClTYFU5nZ2cyNTVVucIpEomEfxsaGlLjxo2pd+/eNHv2bDp9+jSlp6dX9imVyoMHD8jMzIycnJwoMDCQ+vTpQwDI2tqaFixYQE+fPqWVK1fS48ePiYjo4sWLJBaLyd3dXe3cHzx4QNbW1iSTySgpKanIfTs7O5Obm5vKFclZs2aRSCSi8PBwYdvu3bsJAO3du1fY9uzZM6pZsyb5+fkVuZ9ly5YRAPr77781Pu/r60vdunWjrl27arxCqcm+ffsIAP32228q2yMjI4mI6Pnz58W6QpmZmUmNGzemhQsXlskVSg6UjGmJS+KaccBUJ5fL6fPPPycAZG9vTwMHDixVyZxVDUWVrOvVq0etW7em7t27U69evcjT05OcnZ0rrKReUcaMGUMAqHHjxgSAWrZsSdu2baOsrCyN7Xv16kUGBgYF/q7dtm0bAaDvv/9e2JacnEzh4eGUnJwsbLtz5w4BoDVr1qi8PiYmhgDQN998I2wbPHgwWVtbq104CAgIIKlUWuCxKinD37Fjx9SeO3/+PBkYGNDt27e1CpTXrl0jALRu3TqNzxc3UC5YsIBsbW0pIyODAyVjlUmhUFBQUBCNGTOGatSoQQDI09OTtm7dWuQ9M9VBdQ+YcXFx1K1bNxKLxbRw4UKSy+XCcxkZGRQcHEwbN26kSZMmUadOnVTCgo2NDb333nv09ddf0549e+jevXvV9kq4vktISKATJ07Q4sWLyc/Pj5ycnDT+QbF06VI6depUoX9Q6Mo9nKX19OlTmjlzpnAF1sfHh86dO1fo8aSnp5NEIiFPT88C22RlZZGxsTF17txZ2LZlyxYCQFu2bBG27dixgwDQ1atX1fpo2LAhDRw4UPja3t6e+vTpo9Zu8+bNBIBu376tsj0nJ4eeP39OMTExdOLECXJ0dCRzc3NKTExUaSeXy8nV1ZXGjx9PRFRooFR+3+Pi4igoKIg6depEBgYGKldS8ypOoIyOjiZTU1PhKmdZBEpJyYvljFVvIpEI7u7ucHd3x88//yyMEvf398fkyZOr3Sjx/OrXrw9fX1/4+voCUL8Hc8OGDQCq5j2YeUdxnz59Wm0Ut6mpKdq2bYu2bdsK2zSNMt+6davKKHNXV1eV++XefvttnR+lW10Ud5R1t27d8Omnn5ZolLVIJIKVlRWsrKzQpk0bteepkHs4z549W+mj1PNO+2NiYgIiQs+ePXHgwAGVdsnJycL9kwBgZmaG+/fvQy6XF7qEorGxMZo3b47w8PBCj0P5PdH0u0Ymkwn/55RtPTw8NLYDgNjYWLRo0ULYfu3aNXTs2FH4unnz5jh8+DBq166t8vr169cjOjoap0+fLvRYgTdTP+U91oYNGyIwMBCOjo5FvrYgn332GVq1aoWhQ4eWuI/8OFAyVgaUAy5GjhypMnH61q1bq83E6UWpDgGzNBOVi8ViODg4wMHBAYMHDxa25x+Uce7cOaxfvx4KhQJisVhtUIY+r2WuL4o7MfiYMWMqdGJwXQycmqb9WbZsGd599104Oztr/P/h6emJkJAQ4eulS5eiQ4cOwjEVxtzcHCkpKcLX/v7+8Pf3V2mTmZkJABpX0zExMVF5fWZmZoHt8val5OzsjFOnTiE9PR2XL1/G6dOnkZaWptImMTERc+fOxZw5c4r1f7V27do4deoUsrKycPPmTezfv1+tT2389ddf+P3333H16tUS96EJB0rGypidnR3mzJmD2bNnC6PEly1bhvnz51frUeL5VbWAmXei8gULFpTZKO569eqhZ8+e6Nmzp7AtIyMDd+7cUQk0hw4d0uu1zHXVs2fP1K46ahplPXDgQJ0fZV2RgdPS0hL79u3DmjVr8OTJE3h5eeHQoUPw9vaGgYEBXr16BQAag9GGDRuQmpqKhIQEjBgxQtgXAKSmphZ6jqmpqUWGTuVV4ezsbLXnsrKyVK4am5qaFtgub19KFhYW6NGjBwCgf//+CAwMRP/+/XHjxg3h6urs2bNRu3ZtfPLJJ4Uep5KRkZHQ5/vvv4/u3bujc+fOqFevHt5///1i9aEkl8sxZcoUjBw5UqVCUhY4UDJWTrgkrh19DphFlbjLmlQq5ZJ5GauIkrWuK+vACQC1atVC165d8fbbb+PBgwc4dOiQEDplMpnaNDkA0L59ewBAVFSUsM3e3h4SiQS3b98u8Pizs7Nx9+5djceel/J3RlxcHBo1aqTyXFxcHNq1a6fSVvkzkNfTmMcAgAfZW5AZ9huMDMxhV9MDjnV9YCA2FNoNHDgQI0eOxK5du+Dm5ob79+9j48aNWLFihUppPSsrCzk5OYiKioKFhYVaiTyvTp06QSaTYefOnVoHyu3bt+Pu3bvYsGGDyvsLvAnjUVFRqFevHqRSqVb9AhwoGasQXBLXnj4ETF1ai5tL5sWnqyVrXVdQ4CQinDp1Cj/99BOOHz+O2rVro0ePHnB0dBQCqKbAaWhoiLi4OLi7u6NVq1ZqVzkpzzTZZmZm8PLywtmzZxEdHQ07Ozu149uzZw+ys7OLDFktW7YE8OZ+x7zhMTY2Fk+fPkVAQIBK2wsXLgj/X+S5WTgfuRCbDy+DoQnwzOh3JMUBEInwz9PVkBrWRftGU9DF7iuIxRJkZ2dDoVAIV2RjYmKgUCgwZcoUTJkyRe3YmjRpgqlTp2LFihWFnkNWVpbQpzYeP36MnJwcdO7cWe257du3Y/v27Thw4AB8fHy07psnNmeskhBPnF4qlT3Ruj6vxa2pZF7Ra5lXlOKWrPV1YvDKlJGRgR07dmDlypUICwtDy5YtMX36dPj6+mq87zD/Fc5//vkHP/74I0xMTNCgQQM8ffpUJXCamZkhPT0dzs7O6N69O3Jzc7F+/Xq0atUKhw4dgo2NjXAPZ2RkJDp16gSRSIQ7d+6gVq1aAIBXr14hLi4OMpkMlpaWQt9OTk4wNjbG9evXhf+3c+bMwbfffos7d+7AyckJALB7924MHToUe/fuRV+fXthxsxfuPbmCnz8kvNUGGDz7TX+ZaYCRCWAgAQAR3qrdC0PdDmLlT6vx+eef45dffsGYMWPw4sULXLx4Ue29mT17NlJTU7Fy5Uq89dZbaNGiBdLT0yESidSuFv7+++8YNGgQ5syZg4ULF6r19eLFC9StW1fjxOYRERHC78q8BgwYgPfeew/jxo1D+/btS/R7kwMlYzqA1xIvvYoMmFVxLe7irGWuyyXzqrqWtS6KiYnBmjVrsGHDBrx8+RL9+/fHtGnT4OHhofWo8EOHDsHPzw9GRkYYNmwY7O3t8eLFC4SFheH8+fN49eoVWrZsidevX6td4TQyMkLdunVhYmKCp0+fQiQSYc6cOejdu7cwaGjbtm0YPXo0tmzZojI458iRI+jXrx+8vLwwdOhQhIaGYvXq1Rg7diw2btwotMvNzUWXLl0QGhqKd0dYI9vwEYL/ILx6BgSsAaz+v2Iefgk4thpw9gDqNABy5SIk32+Iq6ef4p133sGlS5dgZGRU4Pvg6emJFy9eqNwCcOvWLfTo0QO+vr5wdHSEWCzGtWvXsGPHDjRs2BDXrl1DnTp1hPa//voroqOjkZGRge+//x5eXl7o1q0bAGDkyJEar+oqiUQiXimHsaqGJ04vG+UxD2Z1XIu7sLXMxWIxOTs707Bhwyp0Yvaqtpa1vrh69Sr5+fmRRCIhc3NzmjZtGj18+LDU/T548IAmTpxI9vb2ZGJiIqyDPWHCBLp165bQTjkf48aNG6lt27ZkZmZGYrGYTE1NhfWzkW8ezoYNGxIA6tGjh9o8nPv376eWLVuSsbExNWzYkGbPnk2vX79WO76kpCQaMqIPmVqADE1Adq6gcWtA80//95iyHeTWE1RLBpIYgyRGoLqNQZ99NZ7S0tKKfA80zUP5/PlzCggIIEdHRzIzMyMjIyNycHCgadOm0fPnzzX2kff88z7++uuvQvcPXsubsaqLuCRepkp7BVOfS9xlrSJL5lyyrlyapv2ZMmUKRo8eDQsLi8o+PBVUDmupK6+47r49APdeHIGC5AXtXo1YJEFL2Rj0ddpQ5ueqizhQMqYHuCRe9rQJmFWxxF3WSlsy55K1bklKSsLmzZuxevVqYdqfadOmCdP+6KOSBs6mzRqg5YQTeLOwj3YkYlPM9EyFWKSf75k2OFAypmfyjhJ/9OgRjxIvIwUFzDp16iAxMRFvv/02du7cCVdX10o+Uv2Sf5T5rVu3EB4eDiKCSCRCzZo1YWBggJSUFLx+/RrAf6Os8z54lHXFiIiIwM8//4xt27ZBLpdj+PDhmDp1aqEr1FQVBQXOuORQuI4+X+J+Z3gkwtSw4GmAqgoOlIzpKS6Jl6/bt29j2LBhuHPnDqysrPDixQsAujkPpi4rrGQtFotRs2ZNiMVilUBZlUaZ6wP6/2l/VqxYgWPHjsHa2hqTJk3C+PHjK20aLF2SmHEPq/9uXuLXc6BkjOkNLomXLU0l7sqepkjXKRQKPHjwoMQla30fZa6PtJ32p7rKlqfgh/O1ACi0fi2XvBljeotL4iWnzUTl1TlgFndi8LIoWWsqmUdERFTridlLqyyn/anKUlNTsXfvXmzduhU23S+gWUdAm9tHeVAOY6xK4JK4dko7iruqBkxdHGVdnSZmL0vBwcFYsWIF9u7dC1NTU4wdOxaffPIJmjZtWtmHpjMUCgXOnTuHrVu34vfff0dmZiZ69uyJIePa4Gmt77Tub3y7m6hv3rLsD1QHcaBkrBrgknjhymMUt74FzNKWrCsbl8w106dpfyrTw4cPsW3bNmzbtg2PHz9Gs2bN4O/vjxEjRqBRo0YgIuy81QePkk6DkFtkfyKI4WLtiw/eDqyAo9cNHCgZq2a4JP6filyLW5cCZkWWrCtbdS2ZV8Vpf8pa3pL2hQsXYGFhgaFDh8Lf3x8dOnRQK/9ny1Ox42YvxKRcBRV6P+V/Sy9KxNXnXlQOlIxVU9W9JF7ZE5VXVMDUxZJ1ZavKJfPqPO1PcRRU0vb394ePj0+RV6zluVk4H/UN/nm6FtnyZIhFhgARIBJBQTmQGtZF+0ZT0cXuS4jFkgo6K93AgZIxVu1K4ro4UXlpA6a+l6wrmz6XzHnan6IVVdLWljw3C2HP9uFpyhW8zk2DsYEFbGu6w7GuDwzEhuVwBrqPAyVjTEVVLolXZIm7tAoLmJ07d0aTJk1gbGyMyMjIKl2yrmy6XDLnaX8Kp21Jm5UOB0rGmEZVrSRe2SXuklKWrC9cuICzZ88iPDwcL1++FJ43MjKCra0t2rdvj759+6Jbt25VvmRd2Sq7ZM7T/hSstCVtVnIcKBljRdL3krgulrjz07Zk3bBhQzx//hyXL1+u9EE+rGJK5jztT8HKuqTNtMeBkjGmFX0qietqibs8Rlnr0ihy9p/Slsx52p+CcUlbt3CgZIyViK6XxHWlxF3UKGsnJydhdHVZjrLmgKm7ilMyd3FxgVwux+3bt5GYmAhPT09Mnz692k/7wyVt3cWBkjFWarpWEq+MEndxStb5r0S5uLjAxMSk3I8N4ICp65Ql8z///BO//vorbt26BYXiv7kOdXmUeUXgkrbu40DJGCtTlVkSr6gSd1WYGJwDpu4obNofkUiks6PMyxuXtPULB0rGWLmo6JJ4eZW4K6tkXdE4YFa8kk77U9mjzMsTl7T1FwdKxli5K++SeFmUuHW9ZF3ROGCWn/KY9kefJ2YHuKRdJRBjjFWgqKgoWrhwITVt2pQAUJMmTWj+/Pn06NEjrfuSy+U0f/58EolE1KNHD4qPjy/W69LT0+nq1au0YcMGmjhxInXs2JHMzMwIAAGgBg0akLe3N82aNYv27t1L9+/fp9zcXK2PryqJi4ujXbt20YQJE8jR0VF4r5o3b07jx4+n3377jWJjYyv7MHXa1atXyc/PjyQSCZmbm9O0adPo4cOH5brPhIQEOnnyJC1ZsoSGDRtGzs7OJBaLCQCJxWJydnamYcOG0ZIlS+jkyZP07Nmzcj2evFJSUuiXX36htm3bCsdjYGBAxsbG5OTkRJMmTaKQkBC11128eJF8fHyoXr16ZGRkRHZ2dhQQEEDR0dFa7f/QoUPUqlUrMjY2pkaNGtHcuXMpJydHrd3Lly9p3LhxZGVlRVKplDw9Pen69etq7ezs7IT/F3kf48ePV2kXGxtLX375JXl6elKNGjUIAP31118FHuelS5eoc+fOZGpqStbW1vTJJ59QamqqSpvg4GCaPHkyOTs7k1QqpUaNGtHgwYPp7t27GvvMzc2ltWvXkpubG5mYmFDt2rXJy8uLbt26VYx3TjO+QskYqxRUypJ4cUvc1aVkXdH4Cmbx6OK0P5VZMs9f0s7IyIBYLIaxsTFGjBiBd955B2KxGBEREdi/fz+io6MRGRkJOzs7AMCqVaswdepUNG3aFP7+/pDJZAgPD8fmzZsBAEePHkWnTp2KPI5jx47B29sbnp6e8PPzw7///os1a9YgICAA69atUzled3d3hISE4IsvvoCVlRXWrl2LJ0+e4Pr163BwcBDaNm7cGLVq1cJnn32msq9mzZqhXbt2wtfnzp2Dl5cXHBwcYGVlhb///ht//fUXPD091Y7z1q1b6NixI5ycnBAQEICnT59i2bJl8PLywrFjx4R2gwYNwqVLlzB48GC4uroiPj4eq1evRlpaGq5cuYK3335bpV9/f3/s3LkTo0aNQseOHZGeno6bN29i+PDh6NmzZ5Hvn0YljqKMMVZG0tLSaPv27dStWzcCQGZmZuTv70/nzp3TeGXwzJkzZG1tTfXr16ezZ88S0Zu/uO/evUu7d++mmTNnUp8+fUgmkwlXCWrUqEFdunShjz/+mDZv3kzXrl2jzMzMij7VKouvYKpKTEykxYsXU6NGjQgAeXl50cGDB0kul1f2oWmUm5tL9+7doz179tDXX39N7733HtnY2Kj8/+nUqRNNmjSJNm7cSMHBwZSRkVHs/h88eEBz5swhW1tbAkDNmjWjzz77jKRSKTk5OWn82cjJyaGVK1fS48ePiejNlUmxWEzu7u6Unp6u1r+1tTXJZDJKSkoq8nicnZ3Jzc1N5YrkrFmzSCQSUXh4uLBt9+7dBID27t0rbHv27BnVrFmT/Pz8VPq0s7Mjb2/vIvedkpJCiYmJRES0d+/eQq9QKn+PvXr1Sti2adMmAkAnTpwQtl26dImys7NVXnvv3j0yNjam4cOHq2xXntP+/fuLPFZtcKBkjOmUwkriyhI3AGrbti0tXbqUS9Y6qroGzPDwcJo4cSJJpVIyMjKi0aNHl6qMWNlKUzJXlrTd3d0JAFlYWFBAQABdvnyZFAoFBQQEEAC6cuVKsY6lV69eZGBgUODtMdu2bSMA9P333wvbkpOTKTw8nJKTk4Vtd+7cIQC0Zs0aldfHxMQQAPrmm2+EbYMHDyZra2u13x8BAQEklUopKytL2KYMlNnZ2ZSWllascyosUL569YokEgl98cUXKtuzs7OpRo0aNHbs2CL7b926NbVu3VplW/v27aldu3ZE9OYPieIea1E4UDLGdJJCoaCgoCDy8/MjExMTAkCGhoYEgEQiEQEgAwMDevvtt2nEiBG0dOlSOnXqVIXeA8aKryoHTIVCQSdOnKA+ffoQALK2tqYFCxYU+55efZOenk7BwcG0ceNGmjRpEnXq1EnlD7o6depQgwYNSCKREADq3Lkz7dixQ+2Kpo2NDdnb2xd7nxKJhDw9PQtsk5WVRcbGxtS5c2dh25YtWwgAbdmyRdi2Y8cOAkBXr15V66Nhw4Y0cOBA4Wt7e3vq06ePWrvNmzcTALp9+7awzc7OjkxNTcnAwIAAkJ2dHa1YsaLQ8yosUF68eJEA0O7du9We69Kli1pQzE+hUFCDBg3o3XffFba9evWKRCIRTZ48mWbOnCncw9mkSRON+9GGpGSFcsYYK1tFjbIG3tyPBgCGhoZ499138cknn6BHjx56MR1KdVe/fn34+vrC19cXgPo9mBs2bACgX/dgapr2Z9u2bUVO+6PvpFIp2rZti7Zt2wrb7t+/jxUrVmDPnj148eIFzMzMIJVKkZKSgkuXLiEkJARr164V7sm0t7dHbGwsfHx81PpPTk4W/q8DgJmZGe7fvw+5XA43N7cCj8vY2BjNmzdHeHh4ocev/J2i6WdLJpMJI+OVbT08PDS2A4DY2Fi0aNECAODq6oouXbqgefPmSExMxNatWzFt2jTExsZi8eLFhR5TSY7zwoULhb5+586diImJwcKFC4VtDx8+BBFh165dkEgkWLJkCSwtLbFy5UoMHToUFhYW6N27t9bHCoDvoWSMVbzijrKeOXMmDR48mABQ9+7dKT4+vkxHiTPdoU9XMJ8+fUozZ86k2rVrk0gkIh8fHzp37hwpFIrKPrQKVVRJm6jwkjkAsrS0VCuZu7m5qYySXrp0KV24cIEA0OzZsws9ps6dO5NEIim0zcKFCwkAJSQkqD3n7u5Obm5uwtdisZgmTpyo1u7MmTMEgA4cOFDgfhQKBfXq1YskEgk9efJEY5vCrlBu3769wCupI0eOJEtLywL3HR4eThYWFtSxY0eV+3aDgoKE9zXvrQapqalkZWWlcnVXW3yFkjFWroo7ynrgwIEqo6zzjuJeuHChyijuOXPmYPbs2cIo8WXLlmH+/Pk6tZY4044+XMEMDg7GihUrsHfvXpiammLs2LH45JNP0LRp0wo7hspW0MTjgYGBGicer1evHnr27KkycjgjIwNXr15Ft27dULt2bURFReHQoUPCKHMrKyu0a9cO9evXx+HDh4UrnsCb1XMKk5qaCnNz80LbKI8xOztb7bmsrCyVczA1NS2wXd6+NBGJRJg+fTpOnDiBc+fOYcSIEYUeV2mOM6/4+Hh4e3vD0tIS+/btU5n9QvmaJk2aoH379sL2GjVqoG/fvtixYwfkcjkkEu3jIQdKxliZKO7E4N27d8dnn31W6MTgeScqP336tMaJykUiEdzd3eHu7o6ff/5ZmDjd398fkydPrtS1xFnp6UrA1DTtz7Jlyyp12p/KoGni8dmzZ5do4nGpVAovLy/IZDIYGBjg0qVLGidmv3LlCgBg8eLFWL16NUQiEfbt2wcXFxeNE7NnZ2fj7t27aNOmTaH7V/6MxMXFqR17XFycyhQ/MplM5bYbpZjYGADAY/leHLt7FMYSc9jV9EDT2j0gEv33+0bZf1JSkjZvkdpx5hcXFwcbGxu17a9evUKfPn2QnJyMCxcuqLVRfq1pSdp69eohJycH6enpsLS01Pp4ueTNGNNaUSXrhg0b0vvvv0+zZ8+mffv20YMHD4o1yrqkE5XnxSXx6qG8S+T6Nu1PeShOSbs0PvroowJLukREkZGRBIDGjRtHS5Ysofr166sMyss/ynzGjBlqo7w1CQ0NLXSU98KFC4VtgwYNUhnlLc99TRcif6AOfaVkaAKae0xCC88Y0sIzEpp/GrTiYmO68vhnUijetP/jjz8IAAUGBmo8lsJK3snJyYWO8h4zZozK9szMTHJ3dyepVEqXL18u8Pzr169PjRo1Uts+cuRIMjExKfGMGBwoGWOFSkhIoBMnTtDixYvJz8+PnJychHug8o6yXrZsGZ0+fZqeP39eov3ExcVRt27dSCwW08KFC0v9wa0cJT5mzBhhJKOnpydt3bpVbZUJpv/KKmBWtWl/tJWbm0tnzpyhkSNHklQqJZFIRO+++y4FBgZqNe9kcdy7d4+kUim5uLho/OPx0aNHwj2URETnz58nsVhMHh4eFBQUpDLK3NTUVPie169fn9577z36+uuvaevWrXTs2DG1uSkdHR3Jzc1N5ffM7NmzSSQSUVhYmLBt165dwjyUr+UZtP3Gu/TF7yCTGiAXT9D8028eM/aD5p4AzT8tovmnQXtuD6bMrHTq3LkzGRkZUVxcnMb3oKh5KHv37k0ymYxSUlKEbcoR5seOHRO2yeVy6tevH0kkEvrzzz8Lfd+nTp1KAOjkyZPCtufPn5OFhQW99957hb62MLxSDmMMQOWuZV0Wa3EXprzXEme6R5uVfIgIp06dwooVK3Ds2DFYW1tj0qRJGD9+vMbSYFVUWWtpHzp0CH5+fjAyMsLw4cPh5uYGIkJkZCQCAwMRExODnTt3YujQoQCAn376CZ9++ins7e2FlXIiIiKwadMmyOVyzJgxA1lZWWprmRsbG+Odd94Rfnelpqbi888/h5eXF4YOHYrQ0FCsXr0aY8eOxcaNG4Xjy83NRZcuXRAaGoo+IxshQxKB4D8Ir54BAWsAq/9/a26eAIJ2As7uQC0ZkJkCPLhQC9H3X+K7777DzJkzVc570aJFAIA7d+5g165dGDNmDJo0aQIAmD17ttDuxo0b6NSpE5ydnYWVcpYvXw4PDw+cOHFCaDdt2jSsXLkSffv2xZAhQ9Te57z3byYkJKBVq1ZIS0vDp59+CktLS6xfvx5PnjzB33//XehI+kKVOIoyxvRWeZWstVUWJW5tcUm8eiroCqa1tTXVqlWLAJCLiwtt27ZNZbLqqqy8S9rF9eDBA5o4cSLZ29uTiYkJmZqakqOjI02YMEHj1eGgoCDq378/WVlZkaGhIdna2tK4ceMoKipKre3KlSsJAA0ZMkRtlLlIJCITExMSi8XCaPOYmBi1PpKSksh3hDeZWoAMTUB2rqBxa/67Ojn/NChgLahZR5C5FcjAEGRkCrJ9G7R5+48az1n586fpkd+FCxeoU6dOZGJiQnXr1qXJkyerXLEkIuratatWfT58+JAGDBhAFhYWZGpqSt26daPg4OACv0fFwVcoGaviijvKWvlwc3ODlZVVuR9XcdfiLi9UyrXEmf6KiYnB4sWL8b///Q/p6emoUaMG0tLSAOjXPJglUdAobX9/f42jtKuikqxlfitrNiKe74eC5EX0/h+xSIJ3GkzAe81Xldep6BQOlIxVEZVZstZWeZe4tcUl8eqhsGl/tCmR66PKKmnrC02jzJUlcyNT4KuDgLgEf+8aGphhZtcUlZHfVRUHSsb0UEZGBkJDQ1V+8d2+fVv4C7thw4Zq4bFJkyaVHoxyc3OxaNEiLFiwAN27d8eOHTt07h616OhobN++HVu3bsWjR4/QpEkTfPjhhxg1apRwjxPTH5qm/ZkyZUqR0/5UhYCZmpqKvXv3YuvWrbhw4QIsLCwwdOhQ+Pv7o0OHDhCJRJV9iDrv2bNnuBJyFDfFo0vcxwyPJJga1irDo9JNHCgZ03G6WrLWVmWXuLXFJXH9lpSUhM2bN2P16tV48uQJvLy8MHXqVLz//vsl+rnTl4DJJe2y9yL9LtZccSzx67/weAGpYZ0yPCLdxIGSMR2hTyVrbelaiVtbXBLXHxEREfj555+xbds2yOVyDB8+HFOnTi35yNUC6FrA5JJ2+cnKScbioNp4M77l/9q787CoyvYP4N8Zhm1YVRQxBEEQlxQsyxUcjFxSk0pDTAsXcEvFSs1Cw/01rTBFwyXAlFLLpfxpppgb7uYOLojgAq7sO8Pcvz+IE+MM+zID3J/rmut9OfOcZ85MyHzn3PPcp3J0RHr4wj0bYpH2fniuKRwoGdOA+lqyrqz6UOKuLC6Jax/SgrY/mgiYXNKuO1svDcad5wdAKKzwPmKRBJ0tR8OzU2gtHpn24EDJWC1rKCXryqpvJe7K4pK45mVnZ2PLli1YtWoVoqOj4eLigpkzZ8LLywv6+voaPbbaCphc0taM28/2IeLy4ErvN6HbGbxk9nr5AxsADpSM1ZCGXLKurPpe4q4sLonXrYcPHyI4OBghISFISUnBsGHD4O/vDzc3N609K1fdgMklbc0iUiDsQl/cTz8FovLPUooghqPFEIzssltrfydrGgdKxqqgsZSsK6shlrgri0vitaestj/1TUUC5quvvorjx49zSVtL5BQkI/wfdzzJvF5m6VsEMazNemJ01wPQ0zGqwyPULA6UjJWjsZasK6uhl7gri0viNaOqbX/qm+KA+ffff2P//v24d++ecJ+1tTU8PT0xc+bMehmeG5J8eSYO3fkcFxM3Qa7IgwhiEAohgg4IhdDTMUa3lybDve0iSMSa/dpFXeNAydi/uGRddY2txF1ZXBKvvJpu+6PtXixp29vb4/XXX4dEIsH58+c1voqcKcuTp+Ny0k94mH4a+YWZ0NcxhU0TN3S29IaujlTTh6cRHChZo8Ql65rBJe7K45J42eqq7Y82qMwqbW1rU8TYizhQsgaPS9a1g0vc1cMl8f9oQ9ufulJTq7Q5YDJtw4GSNRhcsq47XOKuWY21JK7NbX9qWm2v0uaAyTSNAyWrl7hkrRlc4q59jaEkXh/b/lSFJhuPc8BkdY0DJdN6XLLWDlzirlsNsSTekNr+lEZbG49zwGS1jQMl0xpcstZeXOLWrPpcEm8sbX/qW+NxDpispnGgZBrBJev6gUvc2qe+lMQbQ9ufhnQtbQ6YrLo4ULJaxyXr+olL3NpNW0viDb3tj7aWtGsaB0xWWRwoWY3hknXDwSXu+kXTJfHG0PanvpW0axoHTFYuakDi4uJo6tSp5OjoSIaGhmRoaEgdOnSgKVOm0OXLl4VxX331FQEo9ZaUlERERHfv3hW2LVq0SO1jjho1igCQkZFRnTxHbZGVlUVnzpyhkJAQmjx5MvXs2ZOMjIyE18va2pqGDBlCAQEB9Ouvv1JsbCwVFhZq+rBZOeRyOQUGBpJIJCIPDw969OiRpg+JVVJ8fDwtXLiQ7O3tCQDZ2dlRYGAgxcXF1fhjZWVlUUhICHXs2JEAkIuLC4WHh1Nubm6NP5YmpKen06ZNm8jV1ZUAkKmpKfn5+dHJkydJoVBo+vA0KikpiX755ReaNGkStW/fXvjb7+TkRBMnTqSff/6ZEhMTKzRXRd+7i504cYI8PT2pRYsWpKenR7a2tuTn50cJCQmVeg579uyhrl27kr6+PrVu3Zrmz59PBQUFKuNSUlLI19eXLCwsSCqVkkwmowsXLlRrzr/++ot69+5NhoaGZG5uTu+99x7dvXtXZZytra3anDJx4kSlcaGhoeVmGnViY2NJX1+fANC5c+fKecXK1mDOUO7duxdeXl6QSCT44IMP4OzsDLFYjBs3bmDnzp1ISEjA3bt3YWtri8DAQCxYsADr1q1TWxYaPnw4DAwMEB8fDzs7OxgYGMDe3h7Xr19XGpeVlQVLS0sUFhZCR0cHmZmZdfV06xSXrBsHLnE3LFSLJfGG3PansZS0a1pVz2BW5r0bAFavXo0ZM2bA3t4ePj4+sLKyQkxMDDZu3AgA2LdvH3r16lXu8e7fvx+DBw+GTCaDt7c3rl69iuDgYPj5+WHdunXCOIVCAVdXV1y+fBmzZs2ChYUF1q5di/v37+PChQtwdHSs9Jx79+7FsGHD8Morr2DMmDFIT0/HqlWroK+vj4sXL6J58+bC2DZt2qBJkyb49NNPlY6/Xbt2eP3114Wfw8LCMHbsWCxcuFDlu9TFmUadt99+G4cPH0ZWVhbOnTuHbt26lfvalapacVRLxMbGkpGREXXo0EHtJ6KCggJatWoV3bt3j4j+O0P59OnTMuctPkP57rvvEgC6dOmS0v1bt24lXV1dGjp0aIM4Q1lYWEg3b96kbdu20dy5c2nQoEFkZWUlfMoxNjamPn360Mcff0wbN26k8+fPU05OjqYPm9WAyMhIsrS0pJYtW9Lhw4c1fTishmVmZtLmzZupX79+QkXFx8eHjhw5UqnKwZkzZ8jb25skEgmZmJiQv78/3blzpxaPvO7ExsbSvHnzyMbGhgBQu3btaOnSpcL7BqucipzBPHnyZKXeu0+cOEFisZhcXV0pKytLaWxsbCxZWlqSlZUVJScnl3t8HTt2JGdnZ6Wzh19++SWJRCKKiYkRtm3bto0A0I4dO4RtT548IXNzc/L29q7SnB07diQHBwfKy8sTtl26dInEYjF98sknSnPa2trS4MGDy30+xWcoK3OW8c8//yQ9PT0KCAiokTOUDSJQ+vn5EQA6ffp0hcZXNlCuWLGC7OzsaPbs2Ur3v/XWWzR06FD66KOP6l2g5JI1I+ISd2NU2ZJ4QUEBbdu2jXr27EkAyN7enoKCgigtLa2Oj7zmcUm77pQWMAGQp6dnhUrkAwYMIB0dnVJ/V8PDwwkALVu2TNiWmppKMTExlJqaKmy7fv06AaDg4GCl/R8+fKjyFbcRI0aQpaWlyvufn58fSaVS4esdFZ3z+fPnBIBmzZqlcvydOnWiVq1aKW0rDpR5eXmUmZlZ6mtTMlCmp6eTXC4vdSwRUX5+Pjk5OdGsWbOqFEbVaRCBslWrVuTg4FDh8cWB8ubNm/T06VOlW0pKijCuZKD84osvyMbGRvgj8/TpU5JIJPTzzz9rfaB8/PgxHThwgJYvX07e3t7UoUMHEovFBIB0dHTo5ZdfptGjR9PKlSvp0KFD5QZt1jAkJSVRv379SCwW08KFC8v9A8QaFoVCQceOHaNx48aRsbExASCZTEZhYWGUkZFBz58/p+XLl1Pr1q0JALm7u9Pu3bvr/e9JYWEhRUZG0pgxY0gqlZJIJKL+/ftTREQEZWdna/rwGo2kpCRq0qQJmZqaVug7mFlZWSSRSEgmk5U6Z25uLunr61Pv3r2FbcVhKTQ0VNi2ZcsWAkBnzpxRmcPa2preffdd4WcHBwcaNGiQyriNGzcSALpy5Uql5kxMTCQANH/+fJVxr732msp3Hm1tbcnQ0JB0dHQIANna2lJQUJDKvsXPs/jfsp6eHg0dOpRu3bql7qWir7/+mlq0aEFpaWk1FiglVS+Wa4f09HQkJibC09NT5b7U1FTI5XLhZyMjI6Xvvzg5Oans4+TkJHz3o6RRo0Zh6dKliIqKQp8+fbB9+3YYGBjg7bffxp9//lkzT6aaKrrK+o033sCnn37Kq6wbsZKruA8dOsSruBshkUgEV1dXuLq64vvvvxdWifv4+GDChAkgIohEIowePRr+/v71vu2PulXaAQEBjWaVtraRSqVISUmBp6cndu3apfQdzMjISISEhAAA2rZtC5lMBkdHR8jl8jJ/D/X19eHk5ISYmJgyH7v4PVHdinQrKyskJiYqjXVzc1M7DgASExPRuXPnCs9paWkJc3NzREVFKY15/vw5oqOjARR9R7lly5YAgC5duqBPnz5wcnLC8+fPERYWBn9/fyQmJmL58uXC/lKpFD4+PnB3d4epqSkuXLiAb7/9Fr169cI///yj9Dv+6NEjLFq0CCtXrqzRiws0iEAJQO0XzGUyGS5fviz8vGLFCnz22WfCz7/99pvKi2lkZKT2cTp16oQuXbrg559/Rp8+fRAREYFhw4ZBKpXWxNOotIo2Bh8/fjw3BmcCblTO1JFKpbC0tIS+vj6AojdmPT09pKSk4OjRo2jTpg1MTU21qnF6RTSkxuMNzYvv3S1btoSXlxe8vLzg4uIijLtz5w7S09Px9OlTAMCWLVuQm5tb6iIfExMTYW4A8PHxgY+Pj9KYnJwcABB+30syMDBQ2j8nJ6fUcSXnquicYrEYEydOxPLlyzF37lyMGzcO6enpmD17NvLz85XmAoDff/9daa6xY8di0KBB+PbbbzFt2jRYW1sDAN5//328//77wjhPT08MGDAAbm5uWLJkCX744Qfhvjlz5sDe3h4TJkxQOdbqqPeB0sTEBADUrrAOCQlBRkYGHj9+jNGjR6vc7+bmVqnVyKNGjcI333yDmTNn4uTJk/jiiy+qfuCVUNFV1u+99x6vsmalKrmKe8GCBbyKmyE7OxtbtmzBqlWrEB0dDRcXF4SHh8PLywt6enrCKvGVK1ciMDBQKxqnl6e0VdoRERG8SluLVOa9e/bs2ejatSs8PDzQqlUrHD16VDiD+eIq8oyMDGHu0hT/DuTl5ancl5ubq/Q7YmhoWOq4knNVZs6FCxfi2bNn+Prrr/G///0PANC/f3+MHz8eP/zwQ5n/tkQiEWbOnIkDBw7gyJEjarNNsT59+qB79+44dOiQsO306dP46aefEBkZWeMnmOp9oDQzM4OVlRWuXbumcl/37t0BAPHx8ep3zr4APLsCFKYDYmNA2gOQugGlfGr19vbG3Llz4evri2bNmqF///419TQAcMma1R4ucbOS1LX9Wbt2rUrbn9JK4lOnTtW6a4lzSbt+qex7d48ePSCRSGBhYYHDhw+rtCkqDpgikQiWlpb45ZdfSm20XrwtKSlJ5XcjKSlJqR2PlZWV8B5cUnEJ+xH9icN3TiBDN1bYXt6cenp62LhxI5YsWYJbt27B0tIS7dq1w6hRoyAWi+Hg4FD6CwcI8ycnJ5c5rnjszZs3hZ9nz54NV1dX2NnZCa/vs2fPhOO8d+8ebGxsyp1XrWp9A1NLTJgwodQvwxIpL64hhYK+muNZtMr7OIiu6RBd0/33f0F0qx3R83VEikLl/f7Vp08fAkCTJ08WtlVlUQ6vsmZ1gVdxs5Jqou1PXTZOLw+v0q7fKvXeTURvvvkm6ejoUHx8vMrYpKQkmjJlCgGg5s2bl7nI59q1a2WuyF64cKGwbfjw4UqrvBWKQjp3fx31etuMdA1A8/aJaWGkLk3dWLTQdeRnrehSYrjw+6duTnXkcjlZWVlRz549y33d/vjjDwJAERER5Y599dVXqV27dsLPpTVKL76ZmZmVO2dpGkSgvHXrFkmlUurUqZPaN8y4uLiiX8qvlxM9GE9fTUaJQPniTVT0vwnv0t07N1UC5ZEjR+irr76i6OhoYVt5gZJXWTNN4FXcjKj22v6Ut0q8tvAq7Yajwu/d/74HHz16lMRiMclkMpX/1nFxcdSyZUuhD2Vxm6KxY8eSnZ2dSsBs1aoVdezYUenvYkBAAIlEIqX3919++UXoQykvzKNtl9+lWb+BDIxBnWSgwEP/3SxsQJZtQfMPgPZcH08KRaHaOdX53//+RwDo119/FbY9f/5c5e92fn4+9e7dm/T09JRWgz958kRlzv/7v/8jADR9+nRh24EDB2jXrl1Kt2nTphEAWrlyJe3du7fM4yxLvS95A4CjoyMiIiLg7e0NJycnods+EeHu3buIiIiAWCyGtclRIHW/sN+vfwHGKmtqCG/2BCyxG0h/8T6gb9++6Nu3r9rj4JI10xZc4mbJycnYuHEj1qxZg/v370Mmk2H37t0YMmRIjXx3tqxV4rVREueSdsNT4ffufxeeuLm5YeXKlfjkk0/QpUsX4Uo5N27cwIYNG6BQKLBv3z40adIEAODl5YWcnByEhoYiKCgILVu2FErkiYmJSExMhKmpKbp16wapVIq//voLEyZMQIcOHYRjHD58OHr06IGxY8fityNtkSG+grN/AAoF4P6R8vN50w/4eR7w0+fARdkm/Pj8H/yx5bLKnFu2bMFvv/0GNzc3GBsb49ChQ9i+fTsmTJiA9957Txj3+++/Y/HixRg+fDjs7OyQnJyMiIgIXLt2DUuXLhVWggNAr1690LVrV3Tr1g1mZmb4559/8OOPP6J169ZK6z3UfVUvNTUVQFG+afRXyikWGxtLkydPJgcHBzIwMCBDQ0Nq3749TZo0iS6d3SOchSw+Q1na7e8fi8bdPQCVM5TFSpasnZycSCwWc8maaRyXuFlMTAxNnjyZpFIp6enpkY+PD128eLHOHr8mS+Jc0m4cynzvfuEKdUREx44do2HDhpGFhQXp6uqSjY0N+fr6qi2Fq+tDSVRUwfn000+pWbNmJBKJhPfudu3aqZTIk5OTaeSYoWRoCtI1ANl2AfkGK5+dLL55LQC1bAvS0QWZNgd9OmcK5efnKz32mTNnyM3NjZo0aUIGBgbk7OxMP/zwg8rv9Pnz52no0KH00ksvkZ6ennC1uu3bt6s8zy+//JJcXFzIzMxMeE0mT55cofeAmupD2WCu5V2uR58Az78HUFiJnSSA2Sg80VvB17JmWo+vxd14EREOHjyIoKAg7N+/H5aWlpgyZQomTpyosbZQVMVrifO1tJkmlHctcqeh0cgwOAmqRIYQQQfdbWZggOM3tXXYWqVxBEpSADeaAAo1Nexy5BcATXoB2Tn/laxL3rhkzbRByRJ3REQEl7gbCXVtf2bOnAkvLy+1/fA0JSsrSyiJHz58GEZGRiolcXUlbR8fHy5pM40oGTCPnzyMd5ffgo5u5efR1zHFnL4pEIk03wmhtjWOQFmYAtxoWuXd/7yzBo6dBnJjcKZ1uFF546Su7Y+/v79K2x9tlJCQgM2bNyMsLAxxcXGwsLCAVCrFvXv3uPE400rJ2bFYfcqxyvvPcUuBga55zR2QlmoQi3LKRfLyx5Rh4AAPQL9tDR0MYzWDG5U3PmfPnkVQUBB27NgBQ0NDjB8/HtOmTYO9vb2mD63CWrdujd69e+PWrVt4+PAhnj17Jvzeuri4oFevXujcuTOHSaY1FNXMENXdv75oHKfbdJqgWtlZp3mNHQpjNeHw4cNwcXFBdHQ0Dh06hHnz5nGYbKDkcjm2b9+OXr16oXv37jhz5gxWrlyJBw8e4Lvvvqs3YfLOnTuYP38+7Ozs8MYbb+Ds2bP46quvcO/ePaSlpWHz5s2QSCTw8fFBy5YtMXbsWBw9ehQKhULTh84aOSO9FlXeVyzShYHEvOYORos1jkApkgCm76HyoVIHMPIAJFUvlzNWkwoLC7FgwQJ4eHigc+fOuHTpEn9fsoFKTk7G119/DXt7e+E7kbt378atW7cwY8YMmJqaavoQy5WRkYEff/wRbm5ucHBwwKpVqzBw4ECcPHkSN27cwNy5c9G6dWsYGRlhzJgxiIyMRHx8PObMmYNjx45BJpPBwcEBCxYswN27dzX9dFgjZajbFHZN3oAIlfvQLhZJ0KHFexCLG0cxuHF8hxIAso4D8W6V36/1bsB0WI0fDmOVxau4G4cbN27g+++/R3h4OORyOUaNGoUZM2bAxcVF04dWITW1Sruqq8QZqw03nu7GtivvVHq/sa8eh415n1o4Iu3TeAIlEZDgAWQdRcVaB0kAgy6A/ZmiM5yMaRCv4m7YtLHtT2XV5irtiqwSZ6w2KRRybDjfHU8yr1ToO5Ei6KBNk74Y0/VQo/k+cOMJlABQmAbEy4Dcqyg7VOoAevaA3XFAUj/+mLOGiVdxN2z1pe1PaTIyMrBjxw6EhYXh+PHjdbJK+8VV4nZ2dvjoo4/w4Ycfws7OrsYfj7FimXmPEXqhD1Jy74Ko9Awhgg4sjTvjo1ePwEBiVncHqGGNK1ACQGFmUZPztHCACv7dWPwSiItuZl6A1ep/F/Mwphlc4m646nPbH21pPM4lcaYJOQUp2H9zGq4/2QYiBQjFi8aK/t3qiHThbPURBrT7Dno6Rpo7UA1ofIGymDwZSA0Dso8V9akUmwPSHkCTcXxWkmkcl7gbpvrc9kebG49zSZzVtcy8x7iY9CMepJ1GnjwVBpImsG3iBhcrHxjqNs6FvI03UDKmhbjE3fDI5XLs3LkTQUFBOHXqFOzt7TF9+nSMHTtW61dqa6KkXV1cEmdMMzhQMqYluMTdsCQnJ2Pjxo1Ys2YN7t+/D5lMBn9/fwwZMkSr/7tqS0m7urgkzljd4kDJmBbgEnfDUV/b/mhzSbu6uCTOWO3jQMmYBnGJu2Gor21/6mNJu7q4JM5Y7eBAyZiGcIm7/quPbX8aSkm7urgkzljN4kDJmAZwibt+q49tfxpySbu6uCTOWPVxoGSsDnGJu36rb21/GmNJu7q4JM5Y1XCgZKyOcIm7fqpvbX+4pF0zuCTOWOVwoGSsDnCJu/6pb21/uKRde7gkzlgFEGOs1sjlcgoMDCSRSEQeHh706NEjTR8SK0dMTAxNnjyZpFIp6enpkY+PD128eFHTh6VWeno6bdq0iVxdXQkAmZqakp+fH508eZIUCoWmD69Bio+Pp4ULF5K9vT0BIDs7OwoMDKS4uDhNH1q9FRcXR1OnTiVHR0cyNDQkQ0ND6tChA02ZMoUuX76sMv7EiRPk6elJLVq0ID09PbK1tSU/Pz9KSEio1OPu2bOHunbtSvr6+tS6dWuaP38+FRQUqIxLSUkhX19fsrCwIKlUSjKZjC5cuKB2zvT0dJo1axa1adOG9PT0qFWrVvTee+9RVlaWMCYxMZHmzJlDMpmMjI2NCQD9/fffpR5nXl4eLVmyhJycnEhfX59atGhBb731Ft2/f7/UfRYvXkwAqFOnTmrvj4qKot69e5OhoSFZWlrStGnTKCMjo9T5KoIDJWO1JCkpifr160disZgWLlxIcrlc04fESqFQKOjAgQM0aNAgAkCWlpa0YMECrfwAUFhYSJGRkTRmzBiSSqUkEomof//+FBERQdnZ2Zo+vEZDoVDQsWPHaNy4cUIokMlkFBYWVu035sbkjz/+IKlUSqampjR58mT64YcfaP369fTJJ59QmzZtSCQSUXx8vDD++++/J5FIRG3btqVFixbRxo0b6dNPPyUzMzMyMzOjqKioCj3uvn37SCQSkbu7O61fv56mTZtGYrGYJk2apDSusLCQevXqRUZGRhQYGEhr1qyhjh07komJCd26dUtpbGpqKjk7O1OzZs1o7ty5tGnTJvrf//5HgwcPpuTkZGHc33//TQDI0dGRevbsWWagzM/PJw8PD5JKpTRjxgzatGkTrVy5kkaMGEHXrl1Tu8/9+/dJKpWSkZGR2kB58eJFMjAwoK5du9K6devoyy+/JH19fRo4cGCFXrvScKBkrBZERkaSpaUltWzZkg4fPqzpw2GlyMrKopCQEOrYsSMBIBcXFwoPD6fc3FxNH5qK2NhYmjdvHtnY2BAAateuHS1dupTu3bun6UNr9DIzM2nz5s3Ur18/AkBGRkbk4+NDR44cocLCQk0fntaKjY0lIyMj6tChAyUmJqrcX1BQQKtWrRJ+x0+cOEFisZhcXV2VzvgVz2VpaUlWVlZK4a00HTt2JGdnZ6Uzkl9++SWJRCKKiYkRtm3bto0A0I4dO4RtT548IXNzc/L29laac/LkyWRubl7u2er09HR6/vw5ERHt2LGjzEC5fPly0tXVpTNnzpT7nIp5eXlRv379qG/fvmoD5aBBg8jKyorS0tKEbRs2bCAAdODAgQo/zos4UDJWg7jEXT88ePCA5s6dS02bNiWRSESenp505MgRrSsTc0m7/uGSeMX5+fkRADp9+nSFxg8YMIB0dHRKfS3Dw8MJAC1btkzYlpqaSjExMZSamipsu379OgGg4OBgpf0fPnxIAGjRokXCthEjRpClpaXKBwM/Pz+SSqXCh8+UlBQyMDCg2bNnE1FRmboiH0zLCpSFhYXUqlUrev/994moKGC/GKRfdPToUdLR0aErV66oDZRpaWkkkUho1qxZStvz8vLI2NiYxo8fX+4xl4YDJWM1hEvc2u/MmTPk7e1NEomETExMyN/fn+7cuaPpw1LCJe2GgUvi5WvVqhU5ODhUaGxWVhZJJBKSyWSljsnNzSV9fX3q3bu3sC00NJQAUGhoqLBty5YtBEDtWT9ra2t69913hZ8dHBxo0KBBKuM2btxIAOjKlStEVFS6B0Dr16+n9957j3R0dEgkElGvXr3K/A52WYHy6tWrBIAWL15Mvr6+pKenRwCoc+fOaitfcrmcunTpQhMnTiQiUhsoT5w4QQBo27ZtKvv36dOHXnnllVKPtTy8NI2xGnD48GG4uLggOjoahw4dwrx587RyJXBjJJfLsX37dvTq1Qvdu3fHmTNnsHLlSjx48ADfffed1vSQvHPnDubPnw87Ozu88cYbOHPmDAICApCQkIADBw7A29ubW/7UIyKRCK6urti0aRMePXqEzZs3QywWw8fHBy1btsTYsWNx9OhRKBQKTR+qRqSnpyMxMREvv/yyyn2pqal49uyZcMvJycHt27chl8vh7Oxc6pz6+vpwcnJCTExMmY+dlJQEALCyslK5z8rKComJiUpjSxsHQBh7+/ZtAMDcuXNx//59bN68GcHBwbhz5w769esnPGZlFM/53Xff4ciRIwgJCUFoaChyc3MxcOBAXLlyRWn8Dz/8gISEBCxatKjUOSvz3CtLUuU9GWPcqFyLqWv7s3v3bq1q+8ONxxsHIyMjjBkzBmPGjFFqnB4WFtZoG6enp6cDgNp+njKZDJcvXxZ+XrFiBXr06AEAMDExKXNeExMTYW4A8PHxgY+Pj9KYnJwcAFB7eVQDAwOl/XNyckodV3KuzMxMAEUfJCIjI4Xn1bVrV/Ts2RPBwcFYvHhxmcf+ouI5MzIycPHiRaH9V79+/eDg4ICvv/4aW7ZsAQA8f/4c8+fPx7x589C8efNS5yzvuRffXxV8hpKxKnr06BH69++PhQsXYsGCBfjzzz85TGqBGzduYMqUKWjdujXmzZuHN954AxcvXsTff/+NYcOGaTxMKhQKHD58GB9++CFatmyJCRMmwNDQEBEREXj06BFCQkLQs2dPDpMNlK2tLebNm4fY2FgcO3YM7u7uWLlyJezt7eHu7o7w8HAhSDRkxcFQ3XMNCQnBwYMHhbBUcnxGRkaZ82ZkZJQbOovP9Ofl5ancl5ubq1QJMDQ0LHVcybmK/3fo0KFKIblHjx6ws7PDyZMnyzymso6zd+/eSr1kbWxs0KdPH6U5AwIC0LRpU0ybNq1Cc1bkuVcWB0rGqoBL3NqFiPDXX3/hrbfeQocOHbBz507MmTMH9+7dQ2hoKFxcXDR9iFzSZkoae0nczMwMVlZWuHbtmsp93bt3h4eHB3r37i1sc3BwgEQiUSnzlpSXl4ebN2+iY8eOZT52cblXXRk6KSkJrVq1Uhpb2jgASBGfwMmElcgzuAEAak8qtGjRAikpKWUekzrFx1HenLdv38b69esxffp0JCYmIj4+HvHx8cjNzUVBQQHi4+ORnJwsPJ+Sx//icyr53CuLAyVjlVBYWIgFCxbAw8MDnTt3xqVLl/iqNxqUnZ2N9evX4+WXX8aAAQOQlJSE8PBwJCQkYP78+Ro/Y5yRkYEff/wRbm5ucHBwwKpVqzBw4ECcPHkSN27cwNy5c/kqNkwoiUdGRiI+Ph5z5szBsWPHIJPJ4ODggAULFuDu3buaPswaN3jwYMTGxuLs2bPljjUyMoK7uzuOHTuGhIQEtWO2b9+OvLw8DBkypMy5ij9gnj9/Xml7YmIiHjx4oPQB1MXFBf/8848Q7IkIVx9FIPyPudA1AK7LF+NQ7Od4ZLwJAHD0yo+48XSPyrxllaFL07lzZ+jq6uLhw4cq95Wc8+HDh1AoFJg+fTrs7OyE25kzZ3Dr1i3Y2dlh4cKFAICXX34ZEolE5bnn5+fj0qVL1fvwXeXlPIw1MryKW3toc9sfXqXNakJjWCV+69Ytkkql1KlTJ7Ut1uLi4ggArVixgoiKWuKIxWKSyWQq/5bi4uKoZcuWKn0o1bUNIiJq3749OTs7K/0dDwgIIJFIRNHR0cK2X375RehDWaiQ0+7rY2nWbyADY1AnGSjw0H83y7YgfSlo1m+gA7c+FS6YAIC+/vprta9BeX0ohw0bRjo6Okq9MaOjo0lHR4emTJlCRERPnz6lXbt2qdw6depENjY2tGvXLmE1OhHRwIEDycrKitLT04VtxavW9+/fr/Y4KoIDJWMVwI3KtYM2t/3hxuOstjTkxum7d+8mQ0NDMjMzoylTplBISAj98MMPNGfOHGrdujWJxWL6+eefhfHffvstASAHBwdavHgxbdq0iWbNmkXm5uZkampKJ06cUJpfXdsgoqI2PyKRiPr160fr16+n6dOnk1gsJl9fX6VxcrmcevToQcbGxvTBx6/RW9NAzduA9KSgj0OVA+VHK0EiMahZa9CASaCPpvclExMTateuncqHgEWLFtGiRYto5MiRBIDGjRsnbCvp+vXrZGxsTFZWVrRs2TJatmwZWVlZUfPmzenBgwdlvralNTa/cOEC6evrK10px8DAgPr371/mfOXhQMlYGbhRueYVFBTQtm3bhEuU2dvbU1BQkNJVHjSFG4+zutYQG6fHxsbS5MmTycHBgQwMDMjQ0JDat29PkyZNokuXLqmMP3bsGA0bNowsLCxIV1eXbGxsyNfXV+kSjcVKC5RERLt27SIXFxfS19cna2trCggIoPz8fJVxycnJ5D1mGBmagnQNQLZdQL7BymGy+DZmOci6A0iiBzI0AXmNeoeSkpJU5gRQ6u1FFy5cIA8PDzIyMiITExMaNmyYymUf1SktUBIRHT9+nHr16kUGBgbUvHlzmjp1qtIZy6oQ/fvEGGMvePToET744AMcOXIEgYGB+OKLL3jhTR1S1/bH399f421/FAoFjhw5grCwMPz222/IycnBm2++CR8fH3h6evLCGlYniAgnTpxAWFgYtm/fjszMTMhkMvj4+OC9995T246HVd3v0RNw+VE4FCSv8D4i6KCX7Sx4OCyrxSPTHhwoGVPj8OHDGDVqFEQiESIiInjhTR26ceMGvv/+e4SHh0Mul2PUqFGYMWOGxldq37lzB+Hh4QgPD8e9e/fQrl07+Pj4YPTo0bywhmlUVlYWdu7cibCwMBw+fBhGRkYYMWIEfHx84OrqCrGY199WR0FhNpYfbYpCUm21Ux4DSRPMdnsGkajh/zfgQMlYCdyoXDOICAcPHkRQUBD2798PS0tLTJkyBRMnTtTo68+Nx1l9U7JxelxcXKNtnF6TkrPvYPUphyrvP6dvKgwkZjV4RNqJAyVj/+ISd93Lzs7Gli1bsGrVKkRHR8PFxQUzZ86El5eX2is51AUuabOGgEviNSfhyQWEXe1W5f0/c30CI73Ktw2qbzhQMgYucde1hw8fIjg4GCEhIUhJScGwYcPg7+8PNzc3jZ3145I2a6i4JF4xRITExERcunQJly5dwuXLl3Hp0iU8fHIbs3+r2pwiiPGley50xLo1e7BaiAMla9S4xF23zp49i6CgIOzYsQOGhoYYP348pk2bBnt7e40cD5e0WWPDJfEicrkcN2/eFMJj8e3Zs2cAAHNzc7i4uAi39DarkCK/AkJhhR9DLJKgncXb8OpSxTRaz3CgZI0Wl7jrhlwux86dOxEUFIRTp07B3t4e06dPx9ixY2Fqalrnx8MlbcYaV0k8IyMDV69eVQqOV69eFa7H3aZNG6Xw6OLiAhsbG6UPlNcfb8ev17wq/dgfdo2EXdN+NfZctBkHStYocYm79mlb2x8uaTOmXkMpiZdWso6NjQURQVdXF506dVIKjs7OzjA3Ny937kJFPn4444zknNgKtQ4SQQcvmb6Ocd2iGk2lgwMla1S4xF37tKntD5e0Gauc+lISr2zJ2sXFBR06dICenl6VHzMt9z5+PN8LmfmPygyVIuigqbQtxr0aBameRZUfr77hQMkaDS5x1x5tavvDJW3Gqk+bSuI1UbKuKZl5j/B7zATcfr4PIoiVvlMpQtGZ3A4thmNI+x9gqNukxh9fm3GgZI0Cl7hrhza1/eGSNmO1o65K4rVZsq5pKTl3ceFhCO6lRiFPngYDXXO0aeKOV1v5wdTgpTo/Hm3AgZI1aFzirh3a0vaHS9qM1a2aKolromTNahcHStZgcYm75mlD2x8uaTOmeZUpiWtTyZrVHg6UrEHiEnfN0Za2P1zSZkw7vVgSNzAwQIcOHWBmZoYHDx7gzp07WleyZjWPAyVrULjEXXNSUlKwYcMGjbb94ZI2Y9qpvJK1WCyGQqGAqakp+vXrB19fX3h4eHDJugHjQMkaDC5x1wxNt/3hkjZj2qUqJevWrVsjKipKK1aJs7rBgZI1CFzirp4X2/60aNECU6ZMwaRJk+rsDC+XtBnTrNpaZd1QGqezsnGgZPUal7irR9Ntf7ikzZhmaGqVdX1pnM4qjwMlq7e4xF11mmz7wyVtxupWRkYGrly5ohQcr127ptFV1trUOJ3VDA6UrF7iEnfVaLLtD5e0GatdL5asi2+xsbEAoLWrrLkk3kAQY/WIXC6nwMBAEolE5OHhQY8ePdL0IWm9goIC2rZtG/Xs2ZMAkL29PQUFBVFaWlqtP3Z6ejpt2rSJXF1dCQCZmpqSn58fnTx5khQKRa0/PmMNVUFBAV27do22bNlCn332GXl4eJCFhQUBIABkbm5OMpmM/P39KSwsjC5dukR5eXmaPmy14uLiaOrUqeTo6EgGBgakq6tLurq6BIBeeuklCgwMpLi4OGH8iRMnyNPTk1q0aEF6enpka2tLfn5+lJCQUKnH3bNnD3Xt2pX09fWpdevWNH/+fCooKFAZl5KSQr6+vmRhYUFSqZRkMhlduHBBZZytra3w+pe8TZw4UWlcYmIizZkzh2QyGRkbGxMA+vvvv9UeY9++fdXOOWDAAJWx58+fpwEDBpCJiQkZGxvTm2++SRcvXlQZV1hYSOvWrSNnZ2cyMjKiFi1a0MCBAykqKqpiL1wp+Awlqze4xF05mmr7wyVtxmqWNpasa8revXvh5eUFiUSCDz74AM7OzhCLxYiJicHPP/+MR48eQSqVIjs7GzKZDC+99BIiIiJgb28PHx8fWFlZISYmBhs3bgQA7Nu3D7169Sr3cffv34/BgwdDJpPB29sbV69eRXBwMPz8/LBu3TphnEKhgKurKy5fvoxZs2bBwsICa9euxf3793HhwgU4OjoKY9u0aYMmTZrg008/VXqsdu3a4fXXXxd+PnLkCNzd3eHo6AgLCwucOnUKf//9N2QymcpxymQy3LlzB8uWLVPa3qpVK/Tr10/4+Z9//kHv3r3RunVrTJw4EQqFAmvXrkVycjLOnj0LJycnYeynn36Kb7/9FqNHj4arqytSU1MREhKCe/fuISoqSulYK6VacZSxOhIZGUmWlpbUsmVLOnz4sKYPR6vFxMTQ5MmTSSqVkp6eHvn4+Kj9lFrTYmNjad68eWRjY0MAqF27drR06VK6d+9erT82Yw2BQqGgBw8e0N69e2nx4sU0fPhwcnBwEM5K6erqkouLC/n4+FBQUBAdOXKEUlJSNH3YVRYbG0tGRkbUoUMHSkxMVLm/oKCAVq1aRTdu3KDNmzfTK6+8QgBILBbT6NGj6ciRI1RYWCjMZWlpSVZWVpScnFzuY3fs2JGcnZ2Vzkh++eWXJBKJKCYmRti2bds2AkA7duwQtj158oTMzc3J29tbaU5bW1saPHhwuY+dnp5Oz58/JyKiHTt2lHuGslOnTuXO+dZbb1GTJk3o2bNnwrbExEQyNjamd999V9hWUFBAhoaGNHz4cKX94+LiCABNnz693McqDQdKptW4xF0xCoWCDhw4QIMGDSIA1KJFCwoMDKz114tL2oxVTUMqWVeVn58fAaDTp09XaPyAAQNIR0eHZs6cSfb29gSA7OzshJJ4eHg4AaBly5YJ+6SmplJMTAylpqYK265fv04AKDg4WGn+hw8fEgBatGiRsG3EiBFkaWkpBNeSxy6VSik3N1fYVhwo8/LyKDMzs0LPqaKBsqCggDIyMkqdx8TEhEaMGKGyffDgwaSnpyfsm52dTQBo6tSpSuMyMzNJLBbTnDlzKnTc6nCgZForKSmJ+vXrR2KxmBYuXEhyuVzTh6R1srKyKCQkhDp27EgAyMXFhcLDw5X+yNW0wsJCioyMpDFjxpBUKiWRSET9+/eniIgIys7OrrXHZay+Sk9PpxMnTtCaNWtowoQJ1K1bNzIwMBDCY5s2bcjT05MCAwNp9+7dFB8f3yg+kLVq1YocHBwqNDYrK4skEgnJZDIiKvoQfezYMRo3bpzwPUQ3NzeSSCTUo0cPYb/Q0FACQKGhocK2LVu2EAA6c+aMyuNYW1srndFzcHCgQYMGqYzbuHEjAaArV64I22xtbcnQ0JB0dHQIANna2lJQUFCZz6sigVJXV5f09PQIAFlaWlJAQADl5+crjdPT06MPP/xQZf8RI0YQADp16pSwrXv37mRkZERbtmyhhIQEunz5Mg0fPpyaNWtGd+7cKfN4yyKpWqGcsdpVchX3oUOHeBX3C9S1/Vm7dm2ttv1Rt0o7ICCAV2kz9i+qxCrr0aNHa80qa01IT09HYmIiPD09Ve5LTU2FXC4XfjYyMsLt27chl8vh7OwMABCJRHB1dYWrqyu+//57YZW4XC7H6dOnMXbsWPj4+EChUKjMn5SUBACwsrJSuc/KygqJiYlKY93c3NSOA4DExER07twZANClSxf06dMHTk5OeP78OcLCwuDv74/ExEQsX768Eq/Of9q2bQt3d3d07twZWVlZ+PXXX7F48WLcunUL27ZtE8Y5OTnh9OnTKCwsFL4jn5+fjzNnzgAoes8otmXLFnh5eWH06NHCNnt7e0RFRVWv40eVoyhjtYBL3GU7c+YMeXt7k0QiIRMTE/L396/WJ8rycEmbMfW4ZF099+/fJwA0evRolfucnZ2VVjSvWLGCjh8/TgAoICCgzHm7detGYrFYbUm82MKFCwkAPX78WGV/V1dXcnZ2Fn4Wi8U0efJklXGRkZEEgHbt2lXqsSgUChowYABJJBK6f/++2jHlnaFUx9fXV+Ws47p16wgAffTRR3T9+nW6evUqeXl5Cavlf/rpJ2Hso0ePaMyYMTR16lTauXMnrV27lmxsbKh9+/b09OnTCh/Hi/gMJdMaJVdxL1iwgFdx/0sul2Pnzp0ICgrCqVOnYG9vj5UrV2Ls2LEwNTWt8ccrbZV2REQEr9JmjVJFV1l//PHH9W6VtaaYmJgAADIzM1XuCwkJQUZGBh4/fiycRSsen5GRUea8+fn5MDMzQ2xsrNA4feXKlQgMDBQapxf3tczLy1PZPzc3V+lvnKGhYanjiu8vjUgkwsyZM3HgwAEcOXJE6YxgdXz66afYsGEDDh06hB49egAAJk2ahPv372PFihUIDw8HAHTr1g2zZ8/GkiVLhEbxcrkcHh4ekMlkWL16tTCnh4cHOnXqhBUrVlT5bCoHSqYVuMStSl3bn927d9da2x8uabPGjrhkXWfMzMxgZWWFa9euqdzXvXt3AEB8fLywzcHBARKJBFeuXCl1zry8PNy8eRPdunUrtSTu4+MjXFb2//7v/+Dn56fUOD0pKUmpbY6VlZVQIi+peFum3kVceHgP+jomaG3eG2YGyn8ri/92Jicnl/eSVFhpcy5ZsgSfffYZrl+/DjMzM3Tu3BlffPEFgKLWRQBw7NgxXLt2Dd9++63Svo6OjujQoQOioqKqfFwcKJlG8bW4Vd24cQPff/89wsPDIZfLMWrUKMyYMQMuLi41/lh8LW3WWFX0WtZDhgyp0WtZs/8MHjwYGzduxNmzZ8vtfWhkZAR3d3ccPnwYCQkJsLW1VRmzfft25OXlYciQISr7jhkzBmPGjEFCQgJWrlyJNWvWYPLkyfj666+Fa4nr6+vjwYMH8PPzE/Z1cXHB8ePHoVAohOB5+9k+bPm/r6BrAFzKnYtrN4pHi9DOYgh6tJ4Ju6ZFJ0Xi4uIAAM2bN6/iq6SqrDmbNGmCPn36CD8fOnQI1tbWaN++PQDg8ePHAIree19UUFCg9N3VSqtysZyxauJV3P+py7Y/vEqbNTa8ylo73bp1i6RSKXXq1Ent37ri3ogrVqwgIqKjR4+SWCwmmUym8rcqLi6OWrZsqdKHUl3bICKi9u3bk4ODA/n4+AirxG1tbUkkEtG5c+eEcb/88ovQh1KhKKT9N/1p1m8gA2NQJxko8FDRbfZO0PwDoAWREgo8BDpyZwHl5eVR7969SU9Pj5KSktS+BmV9hzItLU2lY4dCoSAvLy8CoPZqPSUVH/vKlSuFbefPnxe+a1nShQsXSCwW06RJk8qcsyx8pRymEXwt7iLZ2dnYsmULVq1ahejoaLi4uGDmzJnw8vISyjI1ha+lzRo6qqfXsm7M9uzZA29vb+jp6QlXyiEi3L17FxEREXj48CG2bt2KkSNHAgC+++47fPLJJ3BwcBCulHPjxg1s2LABCoUC+/btQ+/evYX5w8LCMHbsWISGhsLHx0fYvnfvXrz99ttwd3fHO++8gz/++AN//fUXAChdS7xXr15wc3PDtWvX8O44FzyjEzj3B5D2BPALBiz+/dN58QBwbCvQ0RVoYgXkpAN3o1oi7uYjLF26FHPnzlV63osXLwYAXL9+Hb/88gvGjRsHOzs7AEBAQACAoivqeHt7w9vbGw4ODsjJycGuXbsQFRUFPz8/hISECPMdO3YMCxcuRP/+/dGsWTOcPn0aoaGhePPNN/HHH39AIvmvIN2/f38cPHgQ77zzDvr374+kpCSsXr0a+fn5uHDhgtJVdSqlylGUsSrgVdxFHjx4QHPnzqWmTZuSSCQiT09POnLkSI2fFeFV2qyh4lXWDUdsbCxNnjyZHBwcyMDAgAwNDal9+/Y0adIkunTpksr4Y8eO0bBhw8jCwoJ0dXXJxsaGfH19KT4+XmWsuj6UxXbt2kUuLi6kr69P1tbWFBAQQLdv36aFCxcqrRKfM2cODRs+gAxNQboGINsuIN/g/85OBh4C+a0FtesJMrEA6eiC9AxBNi+DwrasU/ucAdXrcxffisXFxdGIESOoTZs2ZGBgQFKplF599VX64YcfVP5+x8bGUv/+/cnCwoL09fWpffv2tGzZMrW/89nZ2bRw4ULq2LEjGRoakpmZGQ0ZMqTaV1TjM5SszvC1uIGzZ88iKCgIO3bsgKGhIcaPH49p06ZVr/fXC/ha2qyhacjXsmbaiYiEVeLbt2+H29hMdBsiglin4pFJBDFc7QLgbr+gFo9Ue3CgZHWiMZe41bX9mT59eo23/eGSNqvviEvWTAulZTzHqtOtQOL8Su8r1W2Oz1wfN4oPN7zKm9WqxryKuy7a/vAqbVZf8SprVl8oJGlVCpMAkF3wFPmFGdCX1HzPYG3DgZLVmsbaqLy22/5w43FW33BjcFafKBQKPHr0CPHx8YiPj8fdR2cB56rPJ1fkoWaXWGonDpSsVjS2RuVEhIMHDyIoKAj79+9HixYtMHv2bEyaNKnGzshy43Gm7SpTsubG4ExTXgyML94SEhKQn//fGcmXbM3hu6lqjyWCGAYS85o5cC3HgZLVqMZW4lbX9ic8PLzG2v5wSZtpKy5ZM21V2cDYtGlTtGnTBm3atMHQoUOF/9+mTRvY2trC1NQUG851R1L6eRAUFT4OEXTg0GwgdMS6tfE0tQ4vymE1pjGt4n748CGCg4MREhKClJQUDBs2DP7+/nBzc6t2yONV2kzb8Cprpk2qExhfvBUHxvJcSdqCXdFjKn2sH7jsh0OzgZXerz7iQMlqRGNZxV2bbX94lTbTNF5lzbSBJgJjeeSFuQg+3RHpefehoPIvTygWSdDcqBMmvv4PRCJxueMbAg6UrFoaQ4m7Ntv+cEmbaUpFS9Ylb1yyZjVBGwNjRSRnx2LT+Z7IkaeCygiVIujAVP8ljH/tFEz0W9XJsWkDDpSsyhp6iVtd2x9/f/9qt/3hkjara1yyZnWpvgbGikjNScDO66NxP+0ExCKJ0tlKEXRAKETbpv3h2XEzjPUb1smV8nCgZFXSkEvctdX2h0varLZxyZrVhYYcGCvqccYVnHu4DvdSjxf1mdQxg13Tfuj20mRYGFXxWtj1HAdKVikNtcStru3PlClTqt32h0varLZwyZrVFg6MrCo4ULIKa4glbnVtf2bOnFmttj9c0mY1jUvWrCZxYGS1gQMlq5CGVuKujbY/XNJm1cUla1YTODAyTeBAycrU0ErcNd32h0varKq4ZM2qigMj00YcKFmpGkqJu6bb/nBJm1UWl6xZZXBgZPURB0qmVkMocdd02x8uabPyVKVk3aVLFzRp0kTDR87qEgdG1hBxoGRKGkKJuybb/nBJm5WGS9asNBwYWWPEgZIJ6nOJuybb/nBJm72IS9asJA6MjKniQMkA1N8Sd022/eGSNuOSNQM4MDJWJcQaNblcToGBgSQSicjDw4MePXqk6UOqkAcPHtDcuXOpadOmJBKJyNPTk44cOUIKhaJS86Snp9OmTZvI1dWVAJCpqSn5+fnRyZMnKz0Xq18KCgro2rVrtGXLFvrss8/Iw8ODLCwsCAABIHNzc5LJZOTv709hYWF06dIlysvL0/RhsxpQWFhIDx8+pKioKNq6dSstWbKEfH196c033yRHR0fS09MTfg8AUNOmTemVV16hd999lz755BP6/vvv6ffff6crV65QWlqapp9OvRcXF0dTp04lR0dHMjQ0JENDQ+rQoQNNmTKFLl++rDL+xIkT5OnpSS1atCA9PT2ytbUlPz8/SkhIqNTj7tmzh7p27Ur6+vrUunVrmj9/PhUUFKiMS0lJIV9fX7KwsCCpVEoymYwuXLhQJ3NmZGTQjBkz6KWXXiI9PT1q3749rV27VmVcYmIizZkzh2QyGRkbGxMA+vvvv9Ue45IlS6h79+5kYWFB+vr65ODgQDNmzKAnT56U84qVjc9QNmL1scRdE21/uKTd+HDJunHhM4z1x969e+Hl5QWJRIIPPvgAzs7OEIvFuHHjBnbu3ImEhATcvXsXtra2AIDVq1djxowZsLe3h4+PD6ysrBATE4ONGzcCAPbt24devXqV+7j79+/H4MGDIZPJ4O3tjatXryI4OBh+fn5Yt26dME6hUMDV1RWXL1/GrFmzYGFhgbVr1+L+/fu4cOECHB0da23OwsJCuLm54fz585g6dSocHR1x4MAB7NmzB0uWLMEXX3whzHnkyBG4u7vD0dERFhYWOHXqFP7++2/IZDKV5/7ee++hefPmaN++PUxMTBATE4MNGzagRYsWuHTpEoyMjCr3H7FYteIoq7ciIyPJ0tKSWrZsSYcPH9b04ZSpoKCAtm3bRj179iQAZG9vT0FBQZU+MxAbG0vz5s0jGxsbAkDt2rWjpUuX0r1792rpyFldUygU9ODBA9q7dy8tXryYhg8fTg4ODsKZJl1dXXJxcSEfHx8KCgqiI0eOUHJysqYPm1USn2FsGGJjY8nIyIg6dOhAiYmJKvcXFBTQqlWrhL/RJ06cILFYTK6urpSVlaUyl6WlJVlZWVXo33THjh3J2dlZ6ezhl19+SSKRiGJiYoRt27ZtIwC0Y8cOYduTJ0/I3NycvL29a3XO7du3EwDatGmT0uO89957ZGBgQI8fPxa2paen0/Pnz4mIaMeOHWWeoVTn119/JQD0888/V3ifF3GgbGTqU4k7OTmZli9fTq1btyYAJJPJaPfu3SSXyys8B5e0Gy4uWTdcHBgbBz8/PwJAp0+frtD4AQMGkI6ODsXFxam9Pzw8nADQsmXLhG2pqakUExNDqampwrbr168TAAoODlba/+HDhwSAFi1aJGwbMWIEWVpaUmFhocqxS6VSys3NrbU5p02bRgBUwnNxYFy/fr3a16EqgfL8+fMEgNatW1fhfV4kqdp5TVYflSxxL1iwQGtL3NVt+1NaSTsiIoJL2vVURUvWH3/8MZes64HqlKSHDh3KJekGYu/evXBwcED37t3LHZudnY3IyEi4urrCzs5O7RgvLy/4+flh7969+PzzzwEAu3btwtixYxEaGgofHx8AwMWLFwEA3bp1U9q/VatWsLa2Fu4vHvvKK69ALBYrjX399dexfv163Lp1C507d66VOfPy8qCjo6PSakwqlQIALly4AF9f39JftDIQEZ4/fw65XI7bt2/j888/h46OjtoSeUVxoGwkSq7iPnTokNat4iY1bX9mz55dqbY/6lZpBwQE8CrteoQqscp69OjRvMpaS3FgZOVJT09HYmIiPD09Ve5LTU2FXC4XfjYyMsLt27chl8vh7Oxc6pz6+vpwcnJCTExMmY+dlJQEALCyslK5z8rKComJiUpj3dzc1I4DgMTERHTu3LlW5nRyckJhYSFOnz6NPn36COOOHz8OAHj48GGZz7Msjx8/VjpWa2trREREoH379lWekwNlA6ftjcrVtf0JCwvDyJEjK9T2hxuP118VbQw+ZMgQbgyuZTgwsupKT08HABgbG6vcJ5PJcPnyZeHnFStWoEePHgAAExOTMuc1MTER5gYAHx8f4cxksZycHABQ+x5jYGCgtH9OTk6p40rOVRtzjho1CgsXLsS4ceMQHBwMR0dH/PXXX1i7dq3SuKpo2rQpDh48iNzcXFy8eBE7d+5EZmZmlecDOFA2aNpc4n748CGCg4MREhKClJQUDBs2DGvXroWbm1u5IZBL2vUPl6zrFw6MrLYVB0N1ISYkJAQZGRl4/PgxRo8erTQ+IyOjzHkzMjLKDZ3F7xF5eXkq9+Xm5iq9hxgaGpY6ruRctTFny5Yt8fvvv2PMmDHo378/AMDU1BSrV6/GRx99pDaMV5Senh48PDwAAEOGDMEbb7yB3r17o0WLFhgyZEiV5uRA2UBpa4m7Om1/uKSt/bhkXT9wYGSaZmZmBisrK1y7dk3lvuLvVMbHxwvbHBwcIJFIcOXKlVLnzMvLw82bN1W+x/ii4lJvUlKSyntHUlISXn/9daWxxeXsF8cBQL5hLK4/ToPI+EmNzdmqVSthm5ubG+Li4nD16lVkZWXB2dlZKJ+3a9euzOdZGb169YKVlRW2bt3KgZIV0cYSt1wux86dOxEUFIRTp07B3t4eK1euxNixY8t9I+KStvbikrX24sDI6oPBgwdj48aNOHv2rFLgUsfIyAju7u44fPgwEhIShL6UJW3fvh15eXnlBqLiBZ7nz59XetzExEQ8ePAAfn5+SmOPHz8OhUIhLKK5l3oCP+9fAl0D4GzWx/jnGvBEt2j8xj+mwbp9MFqZdqvUnABw5swZSKVSlaCoo6OjtCj10KFDACCcYawpubm5SEtLq/oEVV4fzrROUlIS9evXj8RiMS1cuLBS7XVqQ1Xb/hQWFlJkZCSNGTOGpFIpiUQi6t+/P0VERFB2dnYdHT0rKT09nU6cOEFr1qyhCRMmULdu3cjAwEBo29KmTRvy9PSkwMBA2r17N8XHx3NbplrEbXVYQ3Dr1i2SSqXUqVMntS3s4uLiCACtWLGCiIiOHj1KYrGYZDKZyntBXFwctWzZUqUPpbq2QURE7du3J2dnZ6X3o4CAABKJRBQdHS1s++WXX4SekQqFgg7fmU+zfgMZGIM6yUCBh/67WdiAWrYFzT8AOpUQVKE5iz19+pTMzc3Jy8urzNfsyZMnZGNjQ126dFFpO1SsrLZBmZmZKm2IiP7rQzlv3rwyH78sfKWcBkKbrsVd1bY/fC1tzSO+lrVW4Cu9sMZiz5498Pb2hp6ennClHCLC3bt3ERERgYcPH2Lr1q0YOXIkAOC7777DJ598AgcHB+FKOTdu3MCGDRugUCiwb98+9O7dW5g/LCxMpW0QUNSy6O2334a7uztGjhyJa9euYc2aNRg/fjzWr18vjCssLESfPn1w7do1vO/bHY/kkTj3B5D2BPALBixKvDXdPA38PA+wcwFelgHSNHfsCDta5pwlr5Rz7949nDt3Dk5OTsLYvn37omfPnnBwcMCjR4+wfv16ZGZm4ujRo+jcubPSa7l48WIAwPXr1/HLL79g3LhxQoulgIAAAMClS5fg4eEBLy8vtG/fHmKxGOfPn8eWLVtgbW2N8+fPo1mzZlX7j1nlKMq0grY0KlcoFHTgwAEaNGgQAaAWLVpQYGBgucfDjcc1hxuDaw6fYWTsP7GxsTR58mRycHAgAwMDMjQ0pPbt29OkSZPo0qVLKuOPHTtGw4YNIwsLC9LV1SUbGxvy9fWl+Ph4lbGhoaEEgEJDQ1Xu27VrF7m4uJC+vj5ZW1tTQEAA5efnq4xLTk6mDz4aToamIF0DkG0XkG+w8tnJ4pvXgqKzlDq6INPmoNmf+5c65/jx46lZs2YklUqpb9++dO7cOZVxM2fOJHt7e9LX16fmzZvTqFGj6M6dO2pfx5J/M168FXv69Cn5+flR+/btycjIiPT09MjR0ZH8/f3p6dOnauetKD5DWY9pw7W41bX98ff3L7PtD19Lu+7xtazrFp9hZKxh+fPWTJx9sBpEhRXeRwQxZPYL4Wb3ZS0emfbgQFlPabrEra7tj7+/f5ltf7ikXfuIS9Z1ggMjY42HXJGHFceaI7+w7JZF6pjotcLMPg8axYdzXuVdz2h6FXdl2/7wKu3aw6usaw+vkmaMFcvIS6xSmASAjPxE5BdmQl9Sdm/MhoDPUNYjmipxq2v7M3369FLb/nBJu+Zxybpm8RlGxhoXIkJubi5SU1MrfRNJn8F7ZXKVH/sz18cw0mtRg89GO/EZynpCE43KU1JSsGHDBqxZswb379+HTCbD7t27MWTIELVBlhuPV19lStbcGLx0fIaRsYalOoGw+Fby33xJEokE5ubmKjcbGxuYm5vDrLkEhfhfFY9cBAOJeZWfd33CZyi1nCZK3JVp+8Ml7aqraMm65I1L1kX4DCNj9YsmAmFFb1KptMz3KiJCyNmueJJ5FQRFhZ+zCDqwa+KOMa8crPTrVR9xoNRidVniJiIcPHgQQUFB2L9/P1q0aIEpU6Zg0qRJKgGWS9qVxyXryuHAyJh2qc+BsCZcTPwRv8eMr/R+I7vsgVPzt2vhiLQPB0otVVeruCvT9ic2Nhbh4eHYvHkzr9IuBa+yrhgOjIzVrcYeCKuroDAbq086IjP/MQjltw4SiyRoYtgWU3pch1hUt+38NIUDpZapqxJ3Rdv+ZGRkYPv27QgLC8OJEye4pF0Cl6xLx4GRsZrFgVDznmRew4/n+6BAkQUFyUsdJxZJYChpivGvnUYTQ7s6PELN4kCpReqixF2Rtj9c0lalrmR99epV5OXlAWh8JWsOjIxVDgfChuFZ1k3suDocT7KuQSySKAXL4p9fMn0dIzrvgJmBjQaPtO5xoNQStVnirmjbHy5pc8m6GAdGxpRxIGTFiAj306Jw9kEw7qeeQH5hFvR0TGDXpB9eaz0FL5m+pulD1AgOlBpWmyVudW1//P39ldr+NOaSdmMuWXNgZI0NB0LGahcHSg2qrRJ3eW1/GmNJu7GVrDkwsoaGAyFj2o0DpYbUdIm7Im1/GkNJu7GUrDkwsvqGAyFjDRsHyjpW0yXu8tr+NOSSdkMuWXNgZNqGAyFjrCwcKOtQTZa4y2r7Q0QNrqTd0ErWHBhZXeNAyBirTRwo60hNlbjLavvTEEraDaVkzYGR1TQOhIwxbcaBspbVRIm7rLY/IpGo3pa063PJmgMjqywOhIyxhowDZS2qbom7tLY/b731Fo4fP16vStr1rWTNgZG9iAMhY4yVjgNlLalOibu0tj/GxsZaX9KuLyVrDoyNDwdCxhirPfUmUIaFhWHs2LEAgOPHj6NPnz5K9xMRbGxs8ODBAwwePBh79+4V7svKysK3336LHTt2IDY2Frq6uujSpQt8fX0xZswYlT/kL/5sYmKCrl27Yvbs2Rg8eLDSfZmZmVixYgXOnDmDs2fPCgtkfv/990qVuEtr+zN69GhhgY22lbS1uWTNgbHh4UDIWMN09+5dfPPNN/jrr7/w4MEDAEVVK3d3d0ycOBFdunRRGh8VFYWVK1fi5MmTSE1NhZWVFQYMGIAvv/wSNjYVv9zh77//jsDAQERHR6NFixYYO3Ys5s2bB4lEojQuNTUVs2fPxq5du5CdnY3XX38d33zzDV555RWlcbm5ufjuu+/w008/IT4+Hk2aNEGvXr0QGBiITp06VWnObdu24Y8//sCZM2cQGxuLvn374siRIyrPxcfHB+Hh4aU+1wcPHuCll14CAMhkMhw9elRlzIABA/Dnn3+W+ZqVpd4FSgMDA4wdOxZr165Vuv/IkSNwd3eHvr4+PDw8hED5+PFjvPHGG4iJicHIkSPRt29f5Obm4rfffsOxY8fg5eWFrVu3KpWiRSIR3nzzTXz44YcgIiQkJGDdunVISkrC/v37MWDAAGFsfHw87OzsYGNjA2tra5w8eRIikQgLFiyoUIlbXduf6dOnw8rKChEREVpT0ta2kjUHxvqHAyFj7EV79+6Fl5cXJBIJPvjgAzg7O0MsFuPGjRvYuXMnEhIScPfuXdja2gIAVq9ejRkzZsDe3h4+Pj6wsrJCTEwMNm7cCADYt28fevXqVe7j7t+/H4MHD4ZMJoO3tzeuXr2K4OBg+Pn5Yd26dcI4hUIBV1dXXL58GbNmzYKFhQXWrl2L+/fv48KFC3B0dBTGvvfee/j999/h6+uLV155BYmJiQgODkZOTg6uXr0qPIfKzCmTyXDhwgW89tpruHTpErp06aI2UJ46dQp37txR2kZEmDRpEtq0aYPr168rzXnnzh0sW7ZMaXyrVq3Qr1+/cl+70tS7QPnuu+/i2LFjSEpKUvoU4efnh3/++QfPnj3Dyy+/LATKgQMH4uDBg9i1axfefvttpTlnzZqFlStX4n//+x/mzJkjbBeJRJg6dSrWrFkjbIuJiUHHjh0xaNAg7Nu3T9iel5eHlJQUREdHY8SIEUhOTsbs2bOxfPnyMp+PurY/w4cPR0xMDH766SeNlbS1pWTNgVH7cCBkjNWkO3fuwNnZGTY2NoiMjISVlZXS/XK5HGvXrsU777yD1q1bIyoqCm5ubujduzf+/PNPSKVSpbl69+4NsViM69evl/ue1KlTJ+jq6uL8+fNClggICMDSpUsRHR2N9u3bAwC2b98OLy8v7NixA8OHDwcAPH36FO3atcOgQYMQEREBoOg93draGp999hlWrFghPM7ff/+Nfv364dtvv8XMmTMrNScA3L9/Hy+99BLEYjFefvllWFhYqA2U6pw4cQKurq5YsmQJvvjiC2G7TCbDs2fPcO3atQrNU1GS8odoF29vb+zatQsHDx7EoEGDAAD5+fn49ddfERAQgO+//14Ye/r0aRw4cADjxo1TCZMAsGzZMuzZswfLly/H9OnTyzzz16FDB1hYWKh8ApBIJAgJCcGCBQvw2muv4ezZs+jQoUOp87zY9mfMmDFo3bo1/u///g+jR4+u05J2RUvWQ4YMqfGSdXUC49ChQzkwVoEmAqGNjQ0HQsaYWl9//TWysrIQGhqqEiaBor8r06dPF35etGgRRCIRwsPDlcIkALRt2xZff/01PvroI4SEhODzzz8HAKSlpSEpKQlWVlYwMzMDAERHRyM6OhrBwcFKJ6amTJmCJUuWCHkCAH799VdYWlri3XffFcY1b94c77//PrZs2YK8vDzhIiIAVL7iVvy8SuaLis4JoFonkyIiIiASiTBq1Ci198vlcuTm5sLY2LjKj1FSvQuUbdq0Qc+ePfHzzz8LgXL//v1IS0vDyJEjlQLlH3/8AQD48MMP1c4lkUgwatQoLFiwAFFRUfDw8Cj1cdPS0pCSkoK2bdsK20qu4l6wYAH69++PHj16qOyrru2Pn58fnj9/jrCwMKGkHRERUWsl7YqWrD/++OMaKVlzYKx5HAgZYw3J3r174eDggO7du5c7Njs7G5GRkXB1dYWdnZ3aMV5eXvDz88PevXuFQLlr1y6MHTsWoaGh8PHxAQBcvHgRANCtWzel/Vu1agVra2vh/uKxr7zyCsRisdLY119/HevXr8etW7fQuXNntG3bFtbW1vjmm2/g5OSErl27IjExEbNnz4adnR1GjhxZ6Tmro6CgANu3b0evXr3Qpk0blftv3boFIyMj5Ofnw9LSEr6+vpg/fz50dXWr/Jj1LlACwKhRozB37lzk5OTA0NAQW7duRd++fdGqVSulcdHR0QAAZ2fnUucqvi8mJkYpUObm5uLZs2cgIty7dw8BAQEoLCwUTk+XXMV96NAhuLu74/z580pzv9j2p3v37hgxYgROnz6NtWvXol27dggICKjRknZlStajR4+ucsmaA2PlcSBkjLEi6enpSExMhKenp8p9qampkMvlws9GRka4ffs25HJ5me/n+vr6cHJyQkxMTJmPnZSUBABqz4paWVkhMTFRaaybm5vacQCQmJiIzp07Q1dXF7/99htGjRqlVBF99dVXcfLkSZibm1d6zuo4cOAAnj9/jg8++EDlvrZt28Ld3R2dO3dGVlYWfv31VyxevBi3bt3Ctm3bqvyY9TJQvv/++/D398fevXsxcOBA7N27V+nMZLHiU9AmJialzlV8X3p6utL2TZs2YdOmTcLPurq6mD17NmbMmIEFCxaU2ag8KSkJU6ZMEdr+dOvWDc2aNcOZM2eExUE1UdKuzZI1B0ZVHAgZY6xmFL/nqiu3ymQyXL58Wfh5xYoVQvWvrPfz4vtLvp/7+PgIZyaL5eTkAIBQVi7JwMBAaf+cnJxSx5WcCwCaNGkCFxcXjBgxAj169EBsbCyWLVuGESNG4ODBg0r7VHTOqoqIiICuri7ef/99lftKZhsAGDNmDPz8/LBhwwbMnDlTbaW1IuploGzevDk8PDwQERGB7OxspTOHJRX/4mVkZCh9OiiptNA5bNgwfPzxx8jPz8e5c+ewdOlSPHv2DAMHDhRK3CVXcRMRTp8+DQD44osvYG5uDgcHB9y+fRunTp2qdkm7pkvWjTEwciBkjDHtUPyem5mZqXJfSEgIMjIy8PjxY4wePVppfPF7dmkyMjLKDZ3F78HF758l5ebmKr1HGxoaljqu5FxpaWlwdXXFrFmz8OmnnwrjunXrBplMhtDQUEyePLlSc1ZVZmYm9uzZgwEDBqBZs2YV2ufTTz/Fhg0bcOjQocYVKIGisrevry8ePXqEQYMGqQ2MHTp0wO7du3HlyhW1p5dRmIkrF/4PANDRXgEUpgE6RV/atba2Fkrgb731Fp4/f47Vq1fD3NxcKHEDqm1/gKLT86mpqWjRogXmzZtXqZJ2TZWsFQoFkpKSGlRg5EDIGGMNg5mZGaysrNSuNC7+TmV8fLywzcHBARKJBFeuXCl1zry8PNy8eVPlu5EvKi4tJyUlqbw3JyUl4fXXX1caW1wif3EcAIiMHyH2+QHs/vkoHj9+rLIAuG/fvjA1NUVUVJQQKMub88Wv71XW7t27kZ2drbbcXZri1yE5ObnKj1tvA+U777yDiRMn4vTp06XW/IcMGYJly5Zh8+bNyoEy7waQvBaFzzYhYms2mpgCva1mAjfnAuZjlOYovhb36tWrYWhoiObNm0Mmkwltf3744QekpqYqBbpu3bph2bJl5Za0q1OyLnmGcf/+/fUiMHIgZIwxVmzw4MHYuHEjzp49qxTi1DEyMoK7uzsOHz6MhIQEoadjSdu3b0deXh6GDBlS5lwuLi4AgPPnzys9bmJiIh48eAA/Pz+lscePH4dCoRAW0TzKuIztB1ZA1wA4nu6DU5eA4/+u4/k7dgGatAqAhVFR2yEiQmFhodJ3QtXNCQBnzpyBVCpFu3btyjz+8mzduhXGxsZqu9uUJi4uDkBRBbiq6m2gNDY2xrp16xAfH4+hQ4eqHdOrVy94eHggNDQUnp6eRb9kKaFA4gQAYny5So5b8cAyf8DQAADlFt0PADmXlFZxL1y4EE2bNsXHH38MNzc3nDp1CmKxGEQEIkK3bt3g5uaGgIAA+Pj4oGfPnkrHUtmSdZcuXaCnp4eEhAQhJEZFRWk0MBIRcnJyqhUICwoK1M7NgZAxxhqX2bNnIyIiAuPGjUNkZKTKeoQX22QHBAQgMjISPj4+2Ldvn1Jp+O7du5g9ezasrKwwceJEYbu6tkGdOnVC+/btsX79ekycOFH46tq6desgEomUvkI3fPhw/Prrr9i5cyeGDx+OU/e+xa7zn+LYfqBdD0Dy75KEZtZF//vzLxF4pPczhnbYiK6txuL3339HVlYWunbtWuqcAPDs2TPs2LEDQ4cOVfv9yop6+vQpDh06BG9vb5XWSkDRd1f19fWVHoOIsHjxYgBQunBLZdXbQAkAH330UbljNm/ejDfeeAPDhg3DqOE94dohCnn5wM5DChw5B3gNBGaNLbnHv58icqKwOrAdoqONcODAASQnJ2Pp0qUAipqFAkUhcPz48ZDL5RCJRHj48CGAok9JkZGRSEpKgrGxMa5fv65SsnZ2dsbQoUPRrFkz6Onp4enTp0Jo3Lp1a60ERk0EQltbWw6EjDHGVDg6OiIiIgLe3t5wcnISrpRDRLh79y4iIiIgFothbV2U1tzc3LBy5Up88skn6NKli3ClnBs3bmDDhg1QKBTYt2+fUsVQXdsgoGihz9tvv43+/ftj5MiRuHbtGtasWYMJEyYo9ZIePnw4evTogbFjx+KvUz/iYcF+nPsDUCgA9xIRpF1PoHkb4MhPhNTHhHMdxqFZ3q/YFnoYVlZWGD9+vNo5o6OjhSvlFBYWYsGCBUqv0bFjx3Ds2DEARWExKytLCH9ubm4qX+fbtm0b5HJ5qeXuf/75B97e3vD29oaDgwNycnKwa9cuREVFwc/PT+XSj5VR766Uc+7cuTK/H9GmTRulK+UARV9Q/WbFIuyIWIG4BwSJDtClHeA7HPjwbeDFHCN6GZjqDXw/F/h6tx9WBP0qfK9AIpFALpdjzZo18PPzw61bt4Su8+p07NgRNjY2MDIyAhEhLS0N9+7dq9KVXjQRCCt640DIGGOsKu7cuYNvvvkGBw8exIMHDyASiWBrawuZTIZJkyaptAo6fvw4vvnmG0RFRSEtLU3pWt4vlsKLs8OLgRIo+q7hggULEBMTg+bNm8PHx0dtL8aUlBRMnzkJO3dtR0E+0Kod0H8i8JKT8vPIyQCObgFunwFSHwP6UuCtAe/g6/99o9I7MyUlBbNmzcLu3buRk5OD1157DStXrlTJN4GBgSohs9hXX32FwMBApW09e/ZEXFwcEhMT1V76+e7du5gzZw7OnTuHR48eQSwWo0OHDvD19YWfn1+13sfrTaCstmcrgMefA1BUeBd5IbAiFPgiCHjttdfw1ltvwczMDNHR0bh48SKuXr0qhEJzc3OYmZlBR0dH6GGpLjC2bt0alpaWsLCwgJmZGYyNjaGnp4f8/HwOhIwxxpgWOhT7OU4mrAShsML7iCCGh8Ny9LL9rBaPTHs0jkBJBNxuAxTcq/SuaRkitPdsikePnwMous63rq4u5HI5FIr/wqmRkRHMzMxgZGQEAwMD4ZNBQUEBcnJykJGRwYGQMcYYq2cKFflYedwSufLUSu9rpm+DGb3jG8X7c73+DmWFKTKrFCYBwMyEoCd+LvxMRGpXGufm5kJXVxc6OjrQ1dWFVCqFsbExTExMlG7qtpmYmMDAwKDSv3B5eXl4/PgxHj9+XKXnxhhjjLGyZRcmVilMAkBa3j0UFGZBT1Iz18vWZo0jUFJ2tXaXVqDHaGFhoVCWZowxxljD0NwGmPpj1fcvUGRDDxwoGwaxebV237bjT8hR9d5MjDHGGKufchVPcTBtYJX315eY1eDRaK9GEij1AakrkH0SqMQXagERoN8BXTr2V10KzhhjjLEGj4hw8XQHPMu+AaDiy05E0IGNeW9IxFXvK1mfiMsf0kA0nYbKhcni/aZzmGSMMcYaKZFIhO6tp1d6P0IhXreeVgtHpJ0aT6A09QR0bQGo9mVSTwfQaQaYVfxamIwxxhhreDq3/ACGus0gqmCGEIl0YGZgC6fmw2r5yLRH4wmUIl3A9k9AbILyK/06gEgPsN0P6DT8L9IyxhhjrHT6EhOMdtkPHbFeuaFSBAn0dUww2uVP6Ih1yxzbkDSeQAkA+u0B+9OAnsO/G14Mlv/+kuhaA3ZRgGHpV+RhjDHGWOPRyrQbxnWLgqlB0aUgRSLlYCkWFWWKZlIHTHjtDCyM2tf5MWpS42hs/iIiIOswkLwGyDoCKLIAsSEg7Q00/RgwHgCIKloaZ4wxxlhjoaBCxD7/E+fuB+N+WhQKFDnQ0zFCmyYyvGb9Meya9GsUjcxf1DgDJWOMMcYYqzGNq+TNGGOMMcZqHAdKxhhjjDFWLRwoGWOMMcZYtXCgZIwxxhhj1cKBkjHGGGOMVQsHSsYYY4wxVi0cKBljjDHGWLVwoGSMMcYYY9XCgZIxxhhjjFULB0rGGGOMMVYtHCgZY4wxxli1cKBkjDHGGGPVwoGSMcYYY4xVCwdKxhhjjDFWLRwoGWOMMcZYtXCgZIwxxhhj1cKBkjHGGGOMVQsHSsYYY4wxVi0cKBljjDHGWLVwoGSMMcYYY9XCgZIxxhhjjFULB0rGGGOMMVYtHCgZY4wxxli1cKBkjDHGGGPVwoGSMcYYY4xVCwdKxhhjjDFWLRwoGWOMMcZYtXCgZIwxxhhj1cKBkjHGGGOMVQsHSsYYY4wxVi0cKBljjDHGWLVwoGSMMcYYY9XCgZIxxhhjjFULB0rGGGOMMVYtHCgZY4wxxli1cKBkjDHGGGPVwoGSMcYYY4xVCwdKxhhjjDFWLRwoGWOMMcZYtXCgZIwxxhhj1cKBkjHGGGOMVQsHSsYYY4wxVi0cKBljjDHGWLX8P1+pEvpgUQzOAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%time\n", "#####################################################\n", "# Input method: Negative example\n", "#####################################################\n", "Out_def = read_pubmed('Example_data/PMC1802096.xml', \n", " Print=False, Method = \"Offline\", sim_cutoff=0.935)\n", "Plot_data(Out_def)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-----\n", "bs4 4.11.1\n", "matplotlib 3.6.2\n", "networkx 2.8.8\n", "nltk 3.8\n", "nlu 4.0.0\n", "numpy 1.23.5\n", "pandas 1.5.2\n", "plotly 5.3.1\n", "requests 2.28.1\n", "seaborn 0.12.2\n", "session_info 1.0.0\n", "sklearn 1.2.0\n", "tqdm 4.49.0\n", "-----\n", "IPython 8.7.0\n", "jupyter_client 7.4.8\n", "jupyter_core 5.1.1\n", "-----\n", "Python 3.8.15 | packaged by conda-forge | (default, Nov 22 2022, 08:49:35) [GCC 10.4.0]\n", "Linux-3.10.0-1160.24.1.el7.x86_64-x86_64-with-glibc2.10\n", "-----\n", "Session information updated at 2023-04-13 17:36\n" ] } ], "source": [ "session_info.show(html=False)" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "sparknlp", "language": "python", "name": "sparknlp" }, "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.8.15" } }, "nbformat": 4, "nbformat_minor": 4 }