{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Vignette" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This vignette extends the [vignette for the R-version of tximport](https://bioconductor.org/packages/release/bioc/vignettes/tximport/inst/doc/tximport.html). If you are unfamiliar with `tximport` or curious about the motivation behind it, please check it out." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you are looking for a full-featured end-to-end workflow for Pythonic bulk RNA-sequencing analysis, check out our [Snakemake workflow](https://github.com/complextissue/snakemake-bulk-rna-seq-workflow/) based on pytximport." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating your transcript to gene map\n", "\n", "Here, we will show you how to generate a transcript-to-gene mapping based on the Ensembl reference or a gene transfer format file." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build it from Ensembl" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This example requires `pybiomart` which is installed together with `pytximport`. Providing a host is optional, for a list of available archives that correspond to Ensembl releases, please consult [https://www.ensembl.org/info/website/archives/index.html](https://www.ensembl.org/info/website/archives/index.html). By default, the transcript ids will be mapped to the `ensembl_gene_id` field. If you prefer to use gene names, choose `external_gene_name`. Be aware that not all proposed transcripts have been assigned a name yet and thus will not be included if you use gene names. The first time you run this function, it may take a few seconds to download the data." ] }, { "cell_type": "code", "execution_count": 1, "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", "
transcript_idgene_id
0ENST00000387314MT-TF
1ENST00000389680MT-RNR1
2ENST00000387342MT-TV
3ENST00000387347MT-RNR2
4ENST00000386347MT-TL1
\n", "
" ], "text/plain": [ " transcript_id gene_id\n", "0 ENST00000387314 MT-TF\n", "1 ENST00000389680 MT-RNR1\n", "2 ENST00000387342 MT-TV\n", "3 ENST00000387347 MT-RNR2\n", "4 ENST00000386347 MT-TL1" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pytximport.utils import create_transcript_gene_map\n", "\n", "transcript_gene_map_human = create_transcript_gene_map(\n", " species=\"human\",\n", " target_field=\"external_gene_name\",\n", ")\n", "transcript_gene_map_human.head(5)" ] }, { "cell_type": "code", "execution_count": 2, "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", "
transcript_idgene_id
0ENSMUST00000082387ENSMUSG00000064336
1ENSMUST00000082388ENSMUSG00000064337
2ENSMUST00000082389ENSMUSG00000064338
3ENSMUST00000082390ENSMUSG00000064339
4ENSMUST00000082391ENSMUSG00000064340
\n", "
" ], "text/plain": [ " transcript_id gene_id\n", "0 ENSMUST00000082387 ENSMUSG00000064336\n", "1 ENSMUST00000082388 ENSMUSG00000064337\n", "2 ENSMUST00000082389 ENSMUSG00000064338\n", "3 ENSMUST00000082390 ENSMUSG00000064339\n", "4 ENSMUST00000082391 ENSMUSG00000064340" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transcript_gene_map_mouse = create_transcript_gene_map(species=\"mouse\")\n", "transcript_gene_map_mouse.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also provide a list of mapping targets as the target_field argument. For example, to map transcripts to both gene names and gene biotypes, you can use the following code:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
transcript_idgene_idgene_biotype
58ENST00000673100LINC03015lncRNA
59ENST00000673009LINC03015lncRNA
60ENST00000671859LINC03015lncRNA
61ENST00000673474LINC03015lncRNA
62ENST00000671974LINC03015lncRNA
\n", "
" ], "text/plain": [ " transcript_id gene_id gene_biotype\n", "58 ENST00000673100 LINC03015 lncRNA\n", "59 ENST00000673009 LINC03015 lncRNA\n", "60 ENST00000671859 LINC03015 lncRNA\n", "61 ENST00000673474 LINC03015 lncRNA\n", "62 ENST00000671974 LINC03015 lncRNA" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transcript_gene_map_human_biotype = create_transcript_gene_map(\n", " species=\"human\",\n", " target_field=[\"external_gene_name\", \"gene_biotype\"],\n", ")\n", "transcript_gene_map_human_biotype = transcript_gene_map_human_biotype[\n", " transcript_gene_map_human_biotype[\"gene_biotype\"] == \"lncRNA\"\n", "]\n", "transcript_gene_map_human_biotype.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Use a gene transfer format file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you already have an annotation file in .gtf format (e.g. from the GENCODE or Ensembl references), you can use the `create_transcript_gene_map_from_annotation` function contained in `pytximport.utils` to generate a transcript to gene map. Using an annotation file is considered best practice, as it ensures that your annotation and alignment reference are the same if you download them from the same source, e.g., an Ensembl release.\n", "\n", "Set `target_field` to `gene_name` to map transcript ids to gene names instead of gene ids. If the transcript does not have a corresponding gene name in the annotation file, it will be mapped to the gene id." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
transcript_idgene_id
0ENST00000424215ENSG00000228037
1ENST00000511072PRDM16
2ENST00000607632PRDM16
3ENST00000378391PRDM16
4ENST00000514189PRDM16
\n", "
" ], "text/plain": [ " transcript_id gene_id\n", "0 ENST00000424215 ENSG00000228037\n", "1 ENST00000511072 PRDM16\n", "2 ENST00000607632 PRDM16\n", "3 ENST00000378391 PRDM16\n", "4 ENST00000514189 PRDM16" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pytximport.utils import create_transcript_gene_map_from_annotation\n", "\n", "transcript_gene_map_from_gtf = create_transcript_gene_map_from_annotation(\n", " \"../../test/data/annotation.gtf\",\n", " target_field=\"gene_name\",\n", ")\n", "transcript_gene_map_from_gtf.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Map transcript names to gene names" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also optionally map transcript names to either gene names or gene ids if your data requires it." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
transcript_namegene_id
0MT-TF-201MT-TF
1MT-RNR1-201MT-RNR1
2MT-TV-201MT-TV
3MT-RNR2-201MT-RNR2
4MT-TL1-201MT-TL1
\n", "
" ], "text/plain": [ " transcript_name gene_id\n", "0 MT-TF-201 MT-TF\n", "1 MT-RNR1-201 MT-RNR1\n", "2 MT-TV-201 MT-TV\n", "3 MT-RNR2-201 MT-RNR2\n", "4 MT-TL1-201 MT-TL1" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transcript_name_gene_map_human = create_transcript_gene_map(\n", " \"human\",\n", " source_field=\"external_transcript_name\",\n", " target_field=\"external_gene_name\",\n", ")\n", "transcript_name_gene_map_human.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Importing transcript quantification files\n", "\n", "You can easily import quantification files from tools like `salmon` with `pytximport`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", "from pytximport import tximport" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Reading quantification files: 2it [00:00, 180.15it/s]\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 28kB\n",
       "Dimensions:    (gene_id: 496, file: 2, file_path: 2)\n",
       "Coordinates:\n",
       "  * gene_id    (gene_id) object 4kB 'ENSMUSG00000083355' ... 'ENSMUSG00000067...\n",
       "  * file_path  (file_path) <U43 344B '../../test/data/salmon/multiple/Sample_...\n",
       "Dimensions without coordinates: file\n",
       "Data variables:\n",
       "    abundance  (gene_id, file) float64 8kB 0.08291 0.0 0.09854 ... 0.4618 0.0\n",
       "    counts     (gene_id, file) float64 8kB 1.005 0.0 1.086 ... 1.957 6.208 0.0\n",
       "    length     (gene_id, file) float64 8kB 509.1 509.1 445.8 ... 564.6 564.6
" ], "text/plain": [ " Size: 28kB\n", "Dimensions: (gene_id: 496, file: 2, file_path: 2)\n", "Coordinates:\n", " * gene_id (gene_id) object 4kB 'ENSMUSG00000083355' ... 'ENSMUSG00000067...\n", " * file_path (file_path) \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", "
transcript_idtranscript_name
0ENST00000387314MT-TF-201
1ENST00000389680MT-RNR1-201
2ENST00000387342MT-TV-201
3ENST00000387347MT-RNR2-201
4ENST00000386347MT-TL1-201
\n", "" ], "text/plain": [ " transcript_id transcript_name\n", "0 ENST00000387314 MT-TF-201\n", "1 ENST00000389680 MT-RNR1-201\n", "2 ENST00000387342 MT-TV-201\n", "3 ENST00000387347 MT-RNR2-201\n", "4 ENST00000386347 MT-TL1-201" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transcript_name_map_human = create_transcript_gene_map(\"human\", target_field=\"external_transcript_name\")\n", "transcript_name_map_human.head(5)" ] }, { "cell_type": "code", "execution_count": 11, "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", "
../../test/data/salmon/quant.sf
HOXC8-2014486.940412
UGT3A2-2011307.314695
HOXC9-201886.909534
HOXC4-202749.069369
HOXC12-201544.817685
\n", "
" ], "text/plain": [ " ../../test/data/salmon/quant.sf\n", "HOXC8-201 4486.940412\n", "UGT3A2-201 1307.314695\n", "HOXC9-201 886.909534\n", "HOXC4-202 749.069369\n", "HOXC12-201 544.817685" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "txi = replace_transcript_ids_with_names(txi, transcript_name_map_human)\n", "pd.DataFrame(txi.X.T, index=txi.var.index, columns=txi.obs.index).sort_values(\n", " by=txi.obs.index[0],\n", " ascending=False,\n", ").head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The same data summarized to genes:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Reading quantification files: 1it [00:00, 105.05it/s]\n" ] }, { "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", "
../../test/data/salmon/quant.sf
HOXC84486.940412
UGT3A21506.597257
HOXC41152.964133
HOXC9886.909534
HOXC12544.817685
\n", "
" ], "text/plain": [ " ../../test/data/salmon/quant.sf\n", "HOXC8 4486.940412\n", "UGT3A2 1506.597257\n", "HOXC4 1152.964133\n", "HOXC9 886.909534\n", "HOXC12 544.817685" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "txi = tximport(\n", " [\"../../test/data/salmon/quant.sf\"],\n", " \"salmon\",\n", " transcript_gene_map_human,\n", " counts_from_abundance=\"scaled_tpm\",\n", " output_type=\"xarray\",\n", " return_transcript_data=False,\n", ")\n", "pd.DataFrame(txi[\"counts\"], index=txi.coords[\"gene_id\"], columns=txi.coords[\"file_path\"]).sort_values(\n", " by=txi.coords[\"file_path\"].data[0],\n", " ascending=False,\n", ").head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the top transcript corresponds to the top expressed gene in this case." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exporting AnnData files" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`pytximport` integrates well with other packages from the `scverse` through its `AnnData` export option." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Reading quantification files: 1it [00:00, 366.57it/s]\n" ] }, { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 1 × 10\n", " uns: 'counts_from_abundance'\n", " obsm: 'length', 'abundance'" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "txi_ad = tximport(\n", " [\"../../test/data/salmon/quant.sf\"],\n", " \"salmon\",\n", " transcript_gene_map_human,\n", " output_type=\"anndata\",\n", " # the output can optionally be saved to a file by uncommenting the following lines\n", " # output_format=\"h5ad\",\n", " # output_path=\"txi_ad.h5ad\",\n", ")\n", "txi_ad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exporting SummarizedExperiment files" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Experiment support for SummarizedExperiment files is available through the [BiocPy](https://github.com/biocpy) ecosystem (unaffiliated). While not part of the core functionality of `pytximport`, this output type/format may be useful for interacting with other R software packages. The optional dependencies necessary to support SummarizedExperiment files can be installed via `pip install pytximport[biocpy]`." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Reading quantification files: 1it [00:00, 357.27it/s]\n", "WARNING:root:Support for the SummarizedExperiment output type is experimental.\n" ] }, { "data": { "text/plain": [ "(['counts'],\n", " Names(['UGT3A2', 'HOXC6', 'HOXC9', 'HOXC11', 'HOXC4', 'HOXC10', 'HOXC13', 'HOXC5', 'HOXC8', 'HOXC12']),\n", " Names(['../../test/data/salmon/quant.sf']))" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "txi_se = tximport(\n", " [\"../../test/data/salmon/quant.sf\"],\n", " \"salmon\",\n", " transcript_gene_map_human,\n", " output_type=\"summarizedexperiment\",\n", " # the output can optionally be saved to disk by uncommenting the following lines\n", " # output_format=\"summarizedexperiment\",\n", " # output_path=\"txi_se\",\n", ")\n", "txi_se.assay_names, txi_se.get_row_names(), txi_se.get_column_names()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Use from the command line\n", "\n", "You can run `pytximport` from the command line, too. Available options can be viewed via the `pytximport --help` command." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2024-11-26 15:53:23,385: Starting the import.\n", "Reading quantification files: 1it [00:00, 94.06it/s]\n", "2024-11-26 15:53:23,666: Converting transcript-level expression to gene-level expression.\n", "2024-11-26 15:53:23,722: Matching gene_ids.\n", "2024-11-26 15:53:23,747: Creating gene abundance.\n", "2024-11-26 15:53:23,927: Creating gene counts.\n", "2024-11-26 15:53:23,927: Creating lengths.\n", "2024-11-26 15:53:23,927: Replacing missing lengths.\n", "2024-11-26 15:53:23,932: Creating gene expression dataset.\n", "2024-11-26 15:53:23,934: Saving the gene-level expression to: ../../test/data/salmon/quant.h5ad.\n", "2024-11-26 15:53:23,939: Finished the import in 0.55 seconds.\n" ] } ], "source": [ "!pytximport -i ../../test/data/salmon/quant.sf -t \"salmon\" -m ../../test/data/gencode.v46.metadata.HGNC.tsv -of \"h5ad\" -ow -o ../../test/data/salmon/quant.h5ad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also create a transcript-to-gene mapping via the `pytximport create-map` command." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2024-11-26 15:53:25,049: Creating a transcript-to-gene mapping file.\n", "2024-11-26 15:53:25,057: Created the transcript-to-gene mapping file. Saving the file...\n", "2024-11-26 15:53:25,059: Saved the transcript-to-gene mapping file to ./transcript_gene_map.tsv.\n" ] } ], "source": [ "!pytximport create-map -i ../../test/data/annotation.gtf -o ./transcript_gene_map.tsv -ow" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inferential replicates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`pytximport` can handle bootstraping replicates provided by `salmon` and `kallisto`. When `inferential_replicate_transformer` is set, the provided function is used to recalculate the counts and abundances for each sample based on the bootstraps." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Reading quantification files: 4it [00:00, 5.80it/s]\n", "WARNING:root:Not all transcripts are present in the mapping. 31380 out of 253181 missing. Removing the missing transcripts.\n" ] }, { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 4 × 40768\n", " uns: 'counts_from_abundance', 'inferential_replicates'\n", " obsm: 'length', 'abundance', 'variance'" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = tximport(\n", " [\n", " \"../../test/data/fabry_disease/SRR16504309_wt/\",\n", " \"../../test/data/fabry_disease/SRR16504310_wt/\",\n", " \"../../test/data/fabry_disease/SRR16504311_ko/\",\n", " \"../../test/data/fabry_disease/SRR16504312_ko/\",\n", " ],\n", " \"salmon\",\n", " transcript_gene_map_human,\n", " inferential_replicates=True,\n", " inferential_replicate_variance=True, # whether to calculate the variance of the inferential replicates\n", " inferential_replicate_transformer=lambda x: np.median(x, axis=1),\n", " counts_from_abundance=\"length_scaled_tpm\",\n", ")\n", "result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Biotype filtering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For some use cases, it may be of interest to restrict the results to certain gene_biotypes, e.g., protein-coding only. First, generate a transcript-to-gene mapping from an annotation GTF file that includes the gene biotype." ] }, { "cell_type": "code", "execution_count": 18, "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", "
transcript_idgene_idgene_biotype
0ENST00000424215ENSG00000228037lncRNA
1ENST00000511072PRDM16protein_coding
2ENST00000607632PRDM16protein_coding
3ENST00000378391PRDM16protein_coding
4ENST00000514189PRDM16protein_coding
\n", "
" ], "text/plain": [ " transcript_id gene_id gene_biotype\n", "0 ENST00000424215 ENSG00000228037 lncRNA\n", "1 ENST00000511072 PRDM16 protein_coding\n", "2 ENST00000607632 PRDM16 protein_coding\n", "3 ENST00000378391 PRDM16 protein_coding\n", "4 ENST00000514189 PRDM16 protein_coding" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transcript_gene_map_from_gtf_with_biotype = create_transcript_gene_map_from_annotation(\n", " \"../../test/data/annotation.gtf\",\n", " target_field=[\"gene_name\", \"gene_biotype\"],\n", ")\n", "transcript_gene_map_from_gtf_with_biotype.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, import quantification files using the transcript-to-gene mapping and filter the counts by biotype." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Reading quantification files: 1it [00:00, 19.53it/s]\n", "WARNING:root:Not all transcripts are present in the mapping. 253161 out of 253181 missing. Removing the missing transcripts.\n" ] }, { "data": { "text/plain": [ "(12, 4)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pytximport.utils import filter_by_biotype\n", "\n", "result_small = tximport(\n", " [\"../../test/data/fabry_disease/SRR16504309_wt/\"],\n", " \"salmon\",\n", " transcript_gene_map_from_gtf_with_biotype,\n", " counts_from_abundance=\"length_scaled_tpm\",\n", ")\n", "\n", "result_small_filtered = filter_by_biotype(\n", " result_small,\n", " transcript_gene_map_from_gtf_with_biotype,\n", " biotype_filter=[\"protein_coding\"],\n", " # Since the data is already at the gene level, we have to use the gene_id from the transcript_gene_map\n", " id_column=\"gene_id\",\n", ")\n", "\n", "len(result_small.var_names), len(result_small_filtered.var_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Downstream analysis with PyDESeq2\n", "\n", "The output from `pytximport` can easily be used for downstream analysis with `PyDESeq2`. For more information on `PyDESeq2`, please consult its [documentation](https://pydeseq2.readthedocs.io/en/latest/)." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "%pip install pydeseq2 numba==0.60.0 decoupler adjustText omnipath tqdm ipywidgets seaborn -q" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import decoupler as dc\n", "from pydeseq2.dds import DeseqDataSet\n", "from pydeseq2.default_inference import DefaultInference\n", "from pydeseq2.ds import DeseqStats" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load the .csv file generated by `pytximport` via the `output_path` argument or create it directly from the output of `pytximport`. In this case, we are working with the salmon quantification files from a public bulk RNA sequencing dataset: [Podocyte injury in Fabry nephropathy](https://www.ebi.ac.uk/ena/browser/view/PRJNA773084)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Round count estimates (required by PyDESeq2) and add the corresponding metadata." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 4 × 40768\n", " obs: 'condition'\n", " uns: 'counts_from_abundance', 'inferential_replicates'\n", " obsm: 'length', 'abundance', 'variance'" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.X = result.X.round().astype(int)\n", "result.obs[\"condition\"] = [\"Control\", \"Control\", \"Disease\", \"Disease\"]\n", "result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Filter genes with low counts out." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 4 × 14714\n", " obs: 'condition'\n", " uns: 'counts_from_abundance', 'inferential_replicates'\n", " obsm: 'length', 'abundance', 'variance'" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = result[:, result.X.max(axis=0) > 10].copy()\n", "result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now perform your `PyDESeq2` analysis." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "dds = DeseqDataSet(\n", " adata=result,\n", " design_factors=\"condition\",\n", " refit_cooks=True,\n", " inference=DefaultInference(n_cpus=8),\n", " quiet=True,\n", ")" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/au734063/Documents/code/pytximport-publish/pytximport/.venv/lib/python3.12/site-packages/pydeseq2/dds.py:490: UserWarning: As the residual degrees of freedom is less than 3, the distribution of log dispersions is especially asymmetric and likely to be poorly estimated by the MAD.\n", " self.fit_dispersion_prior()\n" ] } ], "source": [ "dds.deseq2()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "stat_result = DeseqStats(dds, contrast=(\"condition\", \"Disease\", \"Control\"), quiet=True)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "%%capture\n", "stat_result.summary()\n", "stat_result.lfc_shrink()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAHACAYAAAB3WSN5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAADZFElEQVR4nOzdd1xTVxsH8N9Nwg5DEEUUUERFcdaJExUFtVYrddUBbi1u27q3VuvCqrhahb6tu87a1i2KdQ+sW9wL3AQIO7nvH9SUGJAhGIK/7+eTzxvuPffc5+a1ypNzznMEURRFEBEREREREQBAou8AiIiIiIiIChMmSURERERERBkwSSIiIiIiIsqASRIREREREVEGTJKIiIiIiIgyYJJERERERESUAZMkIiIiIiKiDJgkERERERERZSDTdwAFTa1W48mTJ7C0tIQgCPoOh4iIiIiI9EQURcTFxcHR0RESSdbjRUU+SXry5AmcnJz0HQYRERERERUSDx8+RJkyZbI8X+STJEtLSwDpH4SVlZWeoyEiovelVqvx8OFDAICTk9M7vwnUJ0OJk4joYxIbGwsnJydNjpCVIp8kvZliZ2VlxSSJiKgIUCqVqF69OgAgPj4eFhYWeo4oc4YSJxHRxyi7ZTj8WouIiIiIiCgDJklEREREREQZMEkiIspnz58/x5AhQ+Ds7AwTExM4ODjAx8cHf//9NwCgbNmyEAQBgiDAwsICn3zyCbZs2aK5ftq0aZrzMpkMZcuWxahRoxAfH69pM3z4cNSuXRsmJiaoWbPmh35EIiKiIq3Ir0kiIvrQ/Pz8kJKSgp9//hmurq54+vQpDh48iJcvX2razJgxAwMGDEBsbCwWLlyIrl27onTp0mjYsCEAwMPDAwcOHEBaWhr+/vtv9O3bFwkJCVi1apWmj759++LUqVP4559/PvgzEhERFWVMkoiI8lFMTAzCw8MRFhaGZs2aAQBcXFxQr149rXaWlpZwcHCAg4MDgoOD8euvv+L333/XJEkymQwODg4AgK5du+LgwYPYtWuXJklasmQJgPRRKyZJRERE+YvT7YiI8pFcLodcLseOHTuQnJyco2tkMhmMjIyQkpKSZRszM7N3niciIqL8w5EkIqJ8JJPJEBoaigEDBmDlypX45JNP0KxZM3Tr1k1TDjqjlJQULFy4EAqFAi1atMi0z3PnzmH9+vVZnv/YyGQyfPXVV5r3hZWhxElERLr4tzYRUT7z8/NDu3btEB4ejpMnT+Kvv/7CvHnz8NNPPyEgIAAAMHbsWEyaNAlJSUmQy+WYO3cu2rVrp+nj0qVLkMvlUKlUSElJQbt27bBs2TI9PVHhYmJiguDgYH2HkS1DiZOIiHQxSSIiKgCmpqZo1aoVWrVqhcmTJ6N///6YOnWqJkn65ptvEBAQALlcjpIlS+psalepUiXs2rULMpkMjo6OMDY21sNTEBERfZy4JomI6AOoUqUKlEql5ufixYvDzc0NDg4Ome76bWxsDDc3N5QtW5YJ0ltEUcTz58/x/PlziKKo73CyZChxEhGRLo4kERHl0b0XSuyIeIzYxDTULVsM3lVKIjbmNTp37oy+ffuievXqsLS0xNmzZzFv3jx06NAh3+5969YtxMfHIzo6GomJiYiIiACQnowV9aQqISEBJUqUAADEx8fDwsJCzxFlzlDiJCIiXUySiIjy4NeT9zF552VIIEAQgLV/34WHoxVCetdC/fr1ERQUhNu3byM1NRVOTk4YMGAAJkyYkG/379+/P44cOaL5uVatWgCAu3fvomzZsvl2HyIioo+RIBbxOQCxsbGwtraGQqGAlZWVvsMhoiLg3gslmi8Mw9t/e0oFoEcDF8zoUFU/gX0klEol5HI5gMI9QmMocRIRfUxymhtwTRIRUS7tjHgCCXTXEalE4Ldzj7j+hIiIyMAxSSIiyqXYpFRkUmsBAJCQooKaORIREZFBY5JERJRLdcvaIi2TTEgiADWdbCCVZJFBERERkUFgkkRElEvelUugWmlrSDPkQm/yoq9bV9JPUERERJRvWN2OiCiXZFIJ1g2oj0X7bmLz2YdISFGhRhkbjGldCY0rFNd3eEWeTCaDv7+/5n1hZShxEhGRLla3IyJ6D6IoQhQBCafYERERFXo5zQ341RYR0XsQBCHLIg5ERERkmJgkERGRQRFFEQkJCQAAc3NzCIU0SzWUOImISBcLNxARkUFJSEiAXC6HXC7XJCGFkaHESUREupgkERERERERZcAkiYiIiIiIKAMmSURERERERBnoNUmaNm3av5Wh/nu5u7trziclJSEwMBB2dnaQy+Xw8/PD06dP9RgxEREREREVdXofSfLw8EBUVJTmdezYMc25UaNG4ffff8eWLVtw5MgRPHnyBJ06ddJjtEREREREVNTpvQS4TCaDg4ODznGFQoE1a9Zg/fr1aNGiBQAgJCQElStXxsmTJ9GgQYMPHSoREREREX0E9J4kRUZGwtHREaampvD09MScOXPg7OyMc+fOITU1Fd7e3pq27u7ucHZ2xokTJ5gkERF9pKRSKb744gvN+8LKUOIkIiJdek2S6tevj9DQUFSqVAlRUVGYPn06mjRpgsuXLyM6OhrGxsawsbHRuqZkyZKIjo7Oss/k5GQkJydrfo6NjS2o8ImISA9MTU2xZcsWfYeRLUOJk4iIdOk1SWrTpo3mffXq1VG/fn24uLhg8+bNMDMzy1Ofc+bMwfTp0/MrRCIiIiIi+sjovXBDRjY2NqhYsSJu3boFBwcHpKSkICYmRqvN06dPM13D9Mb48eOhUCg0r4cPHxZw1EREREREVJQUqiQpPj4et2/fRqlSpVC7dm0YGRnh4MGDmvM3btzAgwcP4OnpmWUfJiYmsLKy0noREVHRoVQqNdtGKJVKfYeTJUOJk4iIdOl1ut3XX3+N9u3bw8XFBU+ePMHUqVMhlUrRvXt3WFtbo1+/fhg9ejRsbW1hZWWFYcOGwdPTk0UbiIiIiIiowOg1SXr06BG6d++Oly9fwt7eHo0bN8bJkydhb28PAAgKCoJEIoGfnx+Sk5Ph4+OD5cuX6zNkIiIiIiIq4gRRFEV9B1GQYmNjYW1tDYVCwal3RERFgFKphFwuB5A+TdvCwkLPEWXOUOIkIvqY5DQ3KFRrkoiIiIiIiPSNSRIREREREVEGTJKIiIiIiIgy0GvhBiIiotySSqVo27at5n1hZShxEhGRLhZuICIiIiKijwILNxAREREREeUBkyQiIiIiIqIMmCQREZFBUSqVsLCwgIWFBZRKpb7DyZKhxElERLpYuIGIiAxOQkKCvkPIEUOJk4iItHEkiYiIiIiIKAMmSURERERERBkwSSIiIiIiIsqASRIREREREVEGTJKIiIiIiIgyYHU7IiIyKBKJBM2aNdO8L6wMJU4iItIliKIo6juIghQbGwtra2soFApYWVnpOxwiIiIiItKTnOYG/GqLiIiIiIgoAyZJREREREREGTBJIiIig6JUKmFvbw97e3solUp9h5MlQ4mTiIh0sXADEREZnBcvXug7hBwxlDiJiEgbR5KIiIiIiIgyYJJERERERESUAZMkIiIiIiKiDJgkERERERERZcAkiYiIiIiIKANWtyMiIoMikUhQp04dzfvCylDiJCIiXYIoiqK+gyhIsbGxsLa2hkKhgJWVlb7DISIiIiIiPclpbsCvtoiIiIiIiDJgkkRERERERJQBkyQiIjIoCQkJKFu2LMqWLYuEhAR9h5MlQ4mTiIh0sXADEREZFFEUcf/+fc37wspQ4iQiIl0cSSIiIiIiIsqASRIREREREVEGTJKIiIiIiIgyYJJERERERESUAZMkIiIiIiKiDFjdjoiIDIogCKhSpYrmfWFlKHESEZEuJklERGRQzM3NceXKFX2HkS1DiZOIiHRxuh0REREREVEGTJKIiIiIiIgyYJJEREQGJSEhAR4eHvDw8EBCQoK+w8mSocRJRES6uCaJiIgMiiiKuHr1quZ9YWUocRIRkS6OJBEREREREWXAJImIiIiIiCgDJklEREREREQZMEkiIiIiIiLKgEkSERERERFRBqxuR0REBkUQBLi4uGjeF1aGEicREelikkRERAbF3Nwc9+7d03cY2TKUOImISBen2xEREREREWXAJImIiIiIiCgDJklERGRQEhMTUbduXdStWxeJiYn6DidLhhInERHp4pokIiIyKGq1GmfPntW8L6wMJU4iItLFkSQiIiIiIqIMmCQRERERERFlwCSJiIiIiIgog0KTJM2dOxeCIGDkyJGaY0lJSQgMDISdnR3kcjn8/Pzw9OlT/QVJRERERERFXqFIks6cOYNVq1ahevXqWsdHjRqF33//HVu2bMGRI0fw5MkTdOrUSU9REhERERHRx0DvSVJ8fDx69OiBH3/8EcWKFdMcVygUWLNmDRYtWoQWLVqgdu3aCAkJwfHjx3Hy5Ek9RkxERPpWvHhxFC9eXN9hZMtQ4iQiIm16T5ICAwPRrl07eHt7ax0/d+4cUlNTtY67u7vD2dkZJ06cyLK/5ORkxMbGar2IiKjosLCwwPPnz/H8+XNYWFjoO5wsGUqcRESkS6/7JG3cuBHnz5/HmTNndM5FR0fD2NgYNjY2WsdLliyJ6OjoLPucM2cOpk+fnt+hEhERERHRR0JvI0kPHz7EiBEjsG7dOpiamuZbv+PHj4dCodC8Hj58mG99ExERERFR0ae3JOncuXN49uwZPvnkE8hkMshkMhw5cgRLliyBTCZDyZIlkZKSgpiYGK3rnj59CgcHhyz7NTExgZWVldaLiIiKjsTERHh5ecHLywuJiYn6DidLhhInERHp0tt0u5YtW+LSpUtax/r06QN3d3eMHTsWTk5OMDIywsGDB+Hn5wcAuHHjBh48eABPT099hExERIWAWq3GkSNHNO8LK0OJk4iIdOktSbK0tETVqlW1jllYWMDOzk5zvF+/fhg9ejRsbW1hZWWFYcOGwdPTEw0aNNBHyERERERE9BHQa+GG7AQFBUEikcDPzw/Jycnw8fHB8uXL9R0WEREREREVYYIoiqK+gyhIsbGxsLa2hkKh4PokIqIiQKlUQi6XA0jfa6+wltc2lDiJiD4mOc0N9L5PEhERERERUWHCJImIiIiIiCiDQr0miYiIKDPm5ub6DiFHDCVOIiLSxiSJiIgMioWFBZRKpb7DyJahxElERLo43Y6IiIiIiCgDJklEREREREQZMEkiIiKDkpSUhHbt2qFdu3ZISkrSdzhZMpQ4iYhIF9ckERGRQVGpVPjzzz817wsrQ4mTiIh0cSSJiIiIiIgoAyZJREREREREGTBJIiIiIiIiyoBJEhERERERUQZMkoiIiIiIiDJgkkRERERERJQBS4ATEZFBsbCwgCiK+g4jW4YSJxER6eJIEhERERERUQZMkoiIiIiIiDJgkkRERAYlKSkJnTt3RufOnZGUlKTvcLJkKHESEZEuQSziE6ZjY2NhbW0NhUIBKysrfYdDRETvSalUQi6XAwDi4+NhYWGh54gyZyhxEhF9THKaG3AkiYiIiIiIKAMmSURERERERBkwSSIiIiIiIsqASRIREREREVEGTJKIiIiIiIgyYJJERERERESUgUzfARAREeWGubk54uPjNe8LK0OJk4iIdDFJIiIigyIIgkHsOWQocRIRkS5OtyMiIiIiIsqASRIRERmU5ORkBAQEICAgAMnJyfoOJ0uGEicREekSRFEU9R1EQYqNjYW1tTUUCgWsrKz0HQ4REb0npVIJuVwOAIiPjy+0U9oMJU4ioo9JTnMDjiQRERERERFlwCSJiIiIiN7p+fPnGDJkCJydnWFiYgIHBwf4+Pjg77//BgCULVsWgiDovObOnQsAuHfvntZxW1tbNGvWDOHh4Vr3mTZtmqaNTCZD2bJlMWrUKE2lyDf9REREaP1cokQJxMXFafVVs2ZNTJs2TedZNmzYAKlUisDAwEyfdfPmzahZsybMzc3h4uKC+fPnv89HRwaKSRIRERERvZOfnx8uXLiAn3/+GTdv3sSuXbvg5eWFly9fatrMmDEDUVFRWq9hw4Zp9XPgwAFERUXh6NGjcHR0xKeffoqnT59qtfHw8EBUVBTu3buH77//HqtXr8aYMWPeGV9cXBwWLFiQo2dZs2YNvv32W2zYsAFJSUla5/766y/06NEDgwcPxuXLl7F8+XIEBQVh2bJlOeqbig4mSURERESUpZiYGISHh+P7779H8+bN4eLignr16mH8+PH47LPPNO0sLS3h4OCg9Xp7LZ6dnR0cHBxQtWpVTJgwAbGxsTh16pRWG5lMBgcHB5QpUwZdu3ZFjx49sGvXrnfGOGzYMCxatAjPnj17Z7u7d+/i+PHjGDduHCpWrIht27Zpnf/ll1/QsWNHDB48GK6urmjXrh3Gjx+P77//HkV8GT+9hUkSERERFRkBAQGa6VpGRkYoWbIkWrVqhbVr10KtVmvaZZweZmFhgU8++QRbtmxBcnIyPDw8MHDgQJ2+v/32W5QrVw5xcXGIiorCl19+iYoVK0IikWDkyJE67VNTUzFjxgyUL18epqamqFGjBvbs2aMTb8eOHbN8ntWrV8PLywtWVlYQBAExMTF5/WjyTC6XQy6XY8eOHflWqTExMRH/+9//AADGxsbvbGtmZoaUlJR3tunevTvc3NwwY8aMd7YLCQlBu3btYG1tjZ49e2LNmjVa55OTk2Fqaqpz/0ePHuH+/fvv7JuKFiZJREREVKT4+vpqpmv99ddfaN68OUaMGIFPP/0UaWlpmnZvpodduHABdevWRdeuXXHu3Dn873//Q2hoKPbu3atpe/LkSQQFBSE0NBSWlpZITk6Gvb09Jk2ahBo1amQax6RJk7Bq1SosXboUV69exeDBg/H555/jwoULOX6WhIQE+Pr6YsKECXn/QN6TTCZDaGgofv75Z9jY2KBRo0aYMGEC/vnnH612Y8eO1SRUb15vrzlq2LAh5HI5LCwssGDBAtSuXRstW7bM8t7nzp3D+vXr0aJFi3fG+Gb90+rVq3H79u1M26jVaoSGhqJnz54AgG7duuHYsWO4e/eupo2Pjw+2bduGgwcPQq1W4+bNm1i4cCEAICoq6p0xUNHCJImIiAyKubk5nj17hmfPnsHc3Fzf4WTJUOIsit4UFihdujQ++eQTTJgwATt37sRff/2F0NBQTbs308MqVqyI4OBgmJmZ4ffff0ft2rUxceJE9OvXDzExMUhKSkKfPn0wbNgwNGvWDED6SNQPP/yA3r17w9raOtM4fvnlF0yYMAFt27aFq6srhgwZgrZt22p+6c6JkSNHYty4cWjQoMF7fSbvy8/PD0+ePMGuXbvg6+uLsLAwfPLJJ1qf5zfffIOIiAitV506dbT62bRpEy5cuICtW7fCzc0NoaGhMDIy0mpz6dIlyOVymJmZoV69evD09MzRmiAfHx80btwYkydPzvT8/v37oVQq0bZtWwBA8eLFNaOMbwwYMABDhw7Fp59+CmNjYzRo0ADdunUDAEgk/LX5YyLTdwBERES5IQgC7O3t9R1Gtgwlzo9FixYtUKNGDWzbtg39+/fXOS+TyWBkZKSZ1jVx4kT8/vvvGD58OEqUKAFBEPDdd9/l6p5ZTd06duxY3h9Ej0xNTdGqVSu0atUKkydPRv/+/TF16lQEBAQASE863Nzc3tmHk5MTKlSogAoVKiAtLQ2ff/45Ll++DBMTE02bSpUqYdeuXZDJZHB0dMx2Ol5Gc+fOhaenJ7755hudc2vWrMGrV69gZmamOaZWq/HPP/9g+vTpkEgkEAQB33//Pb777jtER0fD3t4eBw8eBAC4urrmOA4yfEyJiYiI6KPg7u6Oe/fu6RxPSUnBnDlzoFAoNNO6ZDIZ/ve//2HLli1YunQp/ve//+kkPNnx8fHBokWLEBkZCbVajf3792Pbtm1FZtpWlSpVoFQq83z9F198AZlMhuXLl2sdNzY2hpubG8qWLZurBAkA6tWrh06dOmHcuHFax1++fImdO3di48aNWiNdFy5cwOvXr7Fv3z6t9lKpFKVLl4axsTE2bNgAT09PfunxkeFIEhERGZTk5GSMHj0aALBo0SKtb6ALE0OJ82MiiiIEQdD8PHbsWEyaNAlJSUmQy+WYO3cu2rVrpzlfpUoV+Pn5ISYmRmfaWE788MMPGDBgANzd3SEIAsqXL48+ffpoTe8yBC9fvkTnzp3Rt29fVK9eHZaWljh79izmzZuHDh06aNrFxcUhOjpa61pzc3NYWVll2q8gCBg+fDimTZuGQYMG5du01NmzZ8PDwwMy2X+/5v7yyy+ws7NDly5dtP4MAEDbtm2xZs0a+Pr64sWLF/jtt9/g5eWFpKQkhISEYMuWLThy5Ei+xEaGgyNJRERkUNLS0rB8+XIsX75caxF+YWMocX5Mrl27hnLlyml+frOG5tGjR3j9+jXGjh2rc41MJtP6ZTs37O3tsWPHDiiVSty/fx/Xr1+HXC43uGlbcrkc9evXR1BQEJo2bYqqVati8uTJGDBggNZaoSlTpqBUqVJar2+//fadffv7+yM1NTVf9yGqWLEi+vbtq7UH0tq1a/H555/rJEhA+nqrXbt24cWLFwCAn3/+GXXq1EGjRo1w5coVhIWFoV69evkWHxkGjiQRERFRkXfo0CFcunQJo0aN0hzLyRqa/GBqaorSpUsjNTUVW7duRZcuXQr8nu+iTknBy5Ur8XrTZqhiYmDq4QH7oYGQN22aaXsTExPMmTMHc+bMybLPzKYxZlS2bNlM9xkyNzfHq1evND9PmzYN06ZNy3E/WfW7atUqrFq1SvPz25X4MurSpYvW/ycnTpzIsi19PJgkERERUZGSnJyM6OhoqFQqPH36FHv27MGcOXPw6aefonfv3vl2n4iICABAfHw8nj9/joiICBgbG6NKlSoAgFOnTuHx48eoWbMmHj9+jGnTpkGtVuuMrigUCk1fb9jZ2cHJyQnR0dGIjo7GrVu3AKRXfrO0tISzszNsbW1zHbMoing8fATijx4F/t03KunyZTwcNBill/wAq1atct0nUVGU5yQpNTUV0dHRSEhIgL29fZ7+QyUiIiLKb3v27EGpUqUgk8lQrFgx1KhRA0uWLIG/v3++lnGuVauW5v2b/XxcXFw0oypJSUmYNGkS7ty5A7lcjrZt2+KXX36BjY2NVj9hYWFafQFAv3798NNPP2HlypWYPn265njTf0d7QkJCNFXlciMxIgLxYWHaB9VqPEpNRfDgwbhfpQoeP36MXbt2oUyZMrnun6ioEMTMxiizEBcXh19//RUbN27E6dOnkZKSolkEWaZMGbRu3RoDBw5E3bp1CzLmXImNjYW1tTUUCkWWCweJiMhwKJVKyOVyAOnf4FtYWOg5oswZSpyUc28XfjBEL1atxvMfftCMIr2x9tVL/PzqNT7xaoYGjRtj3Lhxua7mR2QIcpob5HgkadGiRZg9ezbKly+P9u3bY8KECXB0dISZmRlevXqFy5cvIzw8HK1bt0b9+vWxdOlSVKhQIV8ehoiIiEifcvGdcqEmkVsAmTxLX1s79C1uj0o7d0LChJ4o50nSmTNncPToUXh4eGR6vl69eujbty9WrlyJkJAQhIeHM0kiIiIig/Zm9MjQR5DesPLxwdM5c4G3Ky5KpZA392KCRPSvHE/M3bBhQ5YJUkYmJiYYPHgw+vbt+16BERERZcbMzAx3797F3bt3YWZmpu9wsmQocQJAQECAJhEwMjJCuXLl8O2332qVUH5zXhAEWFtbo1GjRjh06JBWHx07dszyHqtXr4aXlxesrKwgCAJiYmKybJucnIyaNWtCEASdggYFLTExEatWrUJsbGyRGT3KSFa8OBy/mw1IJIBUCvxb3tyoVCk4TJ6s5+iICo98Wb0YGxuLHTt24Nq1a/nRHRERUZYkEgnKli2LsmXL5usi/PxmKHG+4evri6ioKNy5cwdBQUFYtWoVpk6dqtUmJCQEUVFR+Pvvv1G8eHF8+umnuHPnTo76T0hIgK+vLyZMmJBt22+//RaOjo55eo73ceXKFdSrVw8jR47E48ePAaDIjCBlZP3ZZyi/5y8UHzQINl/4odTsWXD9fReMSpbUd2hEhUae/tbu0qWLZtOvxMRE1KlTB126dEH16tWxdevWfA2QiIiICp6JiQkcHBzg5OSEjh07wtvbG/v379dqY2NjAwcHB1StWhUrVqxAYmKiTpusjBw5EuPGjUODBg3e2e6vv/7Cvn37sGDBgjw/S26JoohVq1ahTp06UKvVOHPmDCpXrlwkE6Q3jJ2dYT98GEpNmwYbPz9ICvloJ9GHlqck6ejRo2jSpAkAYPv27RBFETExMViyZAlmzZqVrwESERFllJKSgm+++QbffPMNUlJS9B1OlgwlzsxcvnwZx48fh7GxcZZt3kwhzM9ne/r0KQYMGIBffvkF5ubm+dbvu7x+/RqdO3fG4MGD4e/vjzNnzqBq1aof5N5EVHjlKUlSKBSafZH27NkDPz8/mJubo127doiMjMzXAImI8lPGdRWZvaZNm4Z79+7prIWIi4tD8+bNUaVKFTx69AgXL15E9+7d4eTkBDMzM1SuXBk//PCD/h7sI5KamooFCxZgwYIFSE1N1Xc4WTKUON/YvXs35HI5TE1NUa1aNTx79gzffPNNpm0TEhIwadIkSKVSNGvWLF/uL4oiAgICMHjwYNSpUydf+szO33//jZo1a+LgwYP47bffsHLlyg+WnBFR4ZanJMnJyQknTpyAUqnEnj170Lp1awDp38awpj4RFWZRUVGa1+LFi2FlZaV17Ouvv9a55vnz52jevDmUSiXCw8NRpkwZnDt3DiVKlMCvv/6KK1euYOLEiRg/frxmKjKRoWnevDkiIiJw6tQp+Pv7o0+fPvDz89Nq0717d8jlclhaWmLr1q1Ys2YNqlevni/3X7p0KeLi4jB+/Ph86e9dVCoVZs6ciaZNm8LJyQkRERE6z5qdrApVhIWFaRWmUKlUCAoKQrVq1WBqaopixYqhTZs2+Pvvv3WuTUxMxNSpU1GxYkWYmJigePHi6Ny5M65cuaLVbtq0aahZs6bWsfDwcNjY2GDkyJEQRRFXrlyBn58fypYtC0EQsHjx4lw9H9HHLsclwDMaOXIkevToAblcDhcXF3h5eQFIn4ZXrVq1/IyPiChfOTg4aN5bW1tDEAStYwDw4sULzfuHDx+iVatWKF26NHbu3KnZHPTtCp6urq44ceIEtm3bhqFDhxbgExAVDAsLC7i5uQEA1q5dixo1amDNmjXo16+fpk1QUBC8vb1hbW0Ne3v7fL3/oUOHcOLECZiYmGgdr1OnDnr06IGff/45X+7z6NEj9OzZE0ePHsWkSZMwZcoUyGR5+nUoW6Ioolu3bjhw4ADmz5+Pli1bIjY2FsHBwfDy8sKWLVs0iVZycjK8vb3x4MEDLFy4EPXr18fTp08xZ84c1K9fHwcOHMhyPdcff/yBzp07Y9y4cZgyZQqA9NE+V1dXdO7cGaNGjSqQ5yMqyvL0t8JXX32FevXqaX55eFO1x9XVlWuSiKjIuHHjBr755hvUqVMHGzZs0Pnl7W0ZpyITGTKJRIIJEyZg9OjR+PLLLzXrjxwcHDSJVH57e13zkydP4OPjg02bNqF+/fr5co9du3ahT58+MDMzw6FDhzRf8haUzZs347fffsOuXbvQvn17zfHVq1fj5cuX6N+/P1q1agULCwssXrwYJ06cwIULF1CjRg0AgIuLC7Zu3Yr69eujX79+uHz5sk4xifXr16NPnz5YuHCh1hc0devWRd26dQEA48aNK9DnJCqK8lyTtE6dOvj8888136oCQLt27dCoUaN8CYyISN969+4NNzc3bNmyJdsE6fjx49i0aRMGDhz4gaIjKlidO3eGVCpFcHBwjq9RKBSIiIjQej18+BAAEB0djYiICNy6dQsAcOnSJURERODVq1cAAGdnZ1StWlXzqlixIgCgfPnyKFOmzHs9S1JSEoYNG4YOHTqgSZMmuHjxYoEnSEB6AlOxYkWtBOmNMWPG4OXLl5rqgOvXr0erVq00CdIbEokEo0aNwtWrV3Hx4kWtc8HBwejTpw/Wrl3LEWyifJbjkaTRo0fnuNNFixblqN2KFSuwYsUK3Lt3DwDg4eGBKVOmoE2bNgDS/1IbM2YMNm7ciOTkZPj4+GD58uUoyTr+RPQBfPbZZ9ixYwe2bduGzp07Z9nu8uXL6NChA6ZOnapZo0lk6GQyGYYOHYp58+ZhyJAhObomLCwMtWrV0jrWr18//PTTT1i5ciWmT5+uOd60aVMA6XsvBQQE5Fvcb7t27Rq6deuGGzduYNmyZfjqq6/yrbT3m2IXGalUKs37mzdvonLlyple++b4zZs3Nf/bvHnzbNu+WYt07do1DB06FGvWrEGPHj3e6zmISFeOk6QLFy7kqF1u/uIpU6YM5s6diwoVKkAURfz888/o0KEDLly4AA8PD4waNQp//PEHtmzZAmtrawwdOhSdOnXKdLEjEVF+mzhxIqpXr44vv/wSoiiiS5cuOm2uXr2Kli1bYuDAgZg0aZIeoiR6f6GhoVo/q+KVSLp6BSPat8fYsWMhCAJEUcy2j7f7yWjatGmYNm1ajmMqW7Zstvd8QxRFpNy6hbRXr2FSsQJkxYpBFEWsXbsWw4cPh4uLC06fPv3OIhPqpCQkXb4MwdgYph4eEKTSbO/bvHlzrFixQuvYqVOn0LNnT63Ycio3bcuUKQMbGxvMnz8fbdq0QalSpXJ8LRFlL8dJ0uHDh/P95m8PP8+ePRsrVqzAyZMnUaZMGaxZswbr169HixYtAKR/21S5cmWcPHky283oiIjeuB4di31XnkIUgZaVS6BqaescXzt58mRIJBL06NEDoiiia9eumnNXrlxBixYt4O/vj9mzZxdE6JQJMzMzXL58WfO+sDKUODMSRRGv1q7F86XLICYlAQCMnJ1ReuFCmFUrnHsHpdy/j8ejRiPp6tX0AzIZpF/4Ycq1a9i0eTMGDBiAoKAgWFhYZNnH602b8WzePKiVyvQuHBzgOHcuLBq8ey1UxmIXbzx69EjzvmLFirh27Vqm1745/mZaYW7aAoClpSUOHDiAVq1aoXnz5jh8+DATJaJ8lOc1SflNpVJh48aNUCqV8PT0xLlz55Camgpvb29NG3d3dzg7O+PEiRNZ9pOcnIzY2FitFxF9nERRxMzdV+G7OBw/HIjEkkOR+HTpMUzacSlX39hOnDgRM2fORI8ePbBhwwYA6VPsmjdvjtatW2P06NGIjo5GdHQ0nj9/XlCPQ/+SSCTw8PCAh4eHpnBQYWQocWak2LETz+Yv0CRIAJD66BEe9OmDtNev9RhZ5sSUFNwP6IOkGzc0x5JTUtDqu+/w1++/Y9OmTVi9evU7E6S4sDBET52qSZAAIO3ZMzwcOBApGRKevOjWrRsiIyPx+++/65xbuHAh7Ozs0KpVK03bAwcO6Kw7UqvVCAoKQpUqVXTWKxUrVgwHDhyAlZUVvLy88OTJk/eKl4j+k+eal2fPnsXmzZvx4MEDnd22t23bluN+Ll26BE9PTyQlJUEul2P79u2oUqUKIiIiYGxsDBsbG632JUuWRHR0dJb9zZkzR2vOMxF9vPZeeYo1x+4CAFSiCPybF/168gHqls1dFbpx48ZBIpGgV69eEEURN2/exPPnz/Hrr7/i119/1bRzcXHRrLMkMjQvf/oJEARAFPE4NQUhr16hR7FiKCeKUGzfAbu+ffQdopa4Q4eQFhUF4L+pajJBQBcbG/iWckSLTp2y7ePV2hBAIgHU6v8OqtXY/vIlrnfujOfFiuHBgwfw9vbO9V5D3bp1w5YtW+Dv769TAnzXrl3YsmWLJoEbNWoUdu7cifbt22uVAP/uu+9w7do1HDhwINMlDTY2Nti/fz98fHzg5eWFsLAwODo6IiUlBVf/HV1LSUnB48ePERERAblcXmAVComKkjx9tbVx40Y0bNgQ165dw/bt25GamoorV67g0KFDsLbO+TQWAKhUqZJm87ohQ4bA399f8x91XowfPx4KhULzelNVh4g+PlvOPoQkk2WSEgHYfOYhAgICNBs+ZvRmLcTbmzV+++23SEtLw5dffolp06ZBFEWdFxOkgpeSkqJZ3/L2l3SFiaHEmVHK/fvAv8nG5OhoHIqPhxQCIJUi5e4dPUenK/nOHUAq1SRIgiBAKgjoa2sHx+RkqDL571unj9u3tBOkf+2MeY1zt27B2NgYLVq0QLt27XIdnyAI2Lx5MyZMmICgoCBUqlQJTZo0wf379xEWFqa1Ga2pqSkOHTqE3r17Y8KECXBzc4Ovry+kUmm2ywysra2xb98+FC9eHM2aNcPjx4/x5MkT1KpVC7Vq1UJUVBQWLFiAWrVqoX///rl+DqKPkSDmZs7Jv6pXr45BgwYhMDAQlpaWuHjxIsqVK4dBgwahVKlS7zWS4+3tjfLly6Nr165o2bIlXr9+rTWa5OLigpEjR+Z4Y7TY2FhYW1tDoVDAysoqz3ERkeHpGPw3Ih7GZHrO3cESe0Y2/bABUb5QKpWaimLx8fHvnEqlT4YSZ0a3fHyR+uABIIp4nZYGU4kEZhIJIJHAfuRIFB84QN8halH8/jsef/1NpiMsEgsLVDxxHIKx8Tv7uNf9SyRevKibKEmlsO3VCyXHjc3PkIlIz3KaG+RpJOn27duab1SMjY2hVCohCAJGjRqF1atX5y3if6nVaiQnJ6N27dowMjLCwYMHNedu3LiBBw8ewNPT873uQUQfh3rlbCHN5JcnqURAvXLc9JXobXZ9AjQjScVkMk2CJBgbw+bzjnqNLTNyb29Ii9ulT5fLSBBQrEePbBMkALD199dNkAQBEATYZFLRkog+DnlKkooVK4a4uDgAQOnSpTXVe2JiYpCQkJDjfsaPH4+jR4/i3r17uHTpEsaPH4+wsDD06NED1tbW6NevH0aPHo3Dhw/j3Llz6NOnDzw9PVnZjohyxL9hWZibSLUSJakgwEQmQb/G5fQYGVHhZNO1K+wGDgRk/y1Zltrawmn1Ksjs7fUYWeakZmZwWRsCozKl/zsoCLDu9Dnsh+Vsc1UrXx+U+OZrrYRKYmWFMkuWwMSVf08QfazyVLihadOm2L9/P6pVq4bOnTtjxIgROHToEPbv34+WLVvmuJ9nz56hd+/eiIqKgrW1NapXr469e/dqKr0EBQVBIpHAz89PazNZIqKcKG1jhq1DGmLW7qsIj3wBEUB9V1tMalcFLnaFf+oT0YcmCAJKjB4FW//eSIyIgMTCAuZ16kCQ5bnOU4EzrVQR5ffsQWJEBNJevoSZhweMHB1z1Yddv36w+eILJJw7B8HYBOb16kKSg1EoIiq68rQm6dWrV0hKSoKjoyPUajXmzZuH48ePo0KFCpg0aRKKFStWELHmCdckEREAJKWqAACmRtlvEEmFm6Gs9TGUOImIPiY5zQ3y9NWQre1/c/klEgnGjRuXl26IiD4YJkdERESUU3lak+Tt7Y3Q0FBu1EpEREREREVOnpIkDw8PjB8/Hg4ODujcuTN27tyJ1NTU/I6NiIhIh6mpKU6fPo3Tp0/D1NRU3+FkSR9xRkdHY9iwYXB1dYWJiQmcnJzQvn17HDx4EE+ePEGxYsWwZMkSrWtOnToFIyMj7Nu3D0D6/k7z5s1DjRo1YG5ujuLFi6NRo0YICQnR/FsfEBCgtcdPZnH06tULDg4OsLCwwCeffIKtW7cW2HMTEeW3PK1JAtJLdR84cADr16/H9u3bIZVK8cUXX6BHjx5o1qxZfseZZ1yTREREH4N79+6hUaNGsLGxwYwZM1CtWjWkpqZi7969WL16Na5fv45ff/0VgwYNQkREBCpUqIDExETUqlULzZs3x4oVK5CSkgIfHx9cvHgRM2fORKNGjWBlZYWTJ09iwYIFWLt2LWrWrKnZiHnHjh2ZxtK6dWvExMRg2bJlKF68ONavX4+pU6fi7NmzqFWr1of9YIiIMshpbpDnJCmjpKQk/P7775g9ezYuXboElUr1vl3mGyZJRET0MWjbti3++ecf3LhxQ6dIRExMjGZj9k6dOuHp06cIDw/H6NGj8fvvv+PixYuQy+WYN28exo8fn2kyk5qaipSUFFhYWGSbJMnlcqxYsQK9evXSHLOzs8P333+P/v375+tz61tqdDTiw8IgqtWQN20G44zlyImo0CnQzWQzio6OxsqVK/H999/jn3/+Qd26dd+3SyIioiylpKRg/vz5mD9/PlJSUvQdTpY+ZJyvXr3Cnj17EBgYmGkVvTcJEgCsXLkSkZGR6NGjB5YtW4aQkBBNFb5169bB29s709EeIyOjHFfoa9iwITZt2oRXr15BrVZj48aNSEpKgpeXV56er7B6sfpH3GrREtHTZ+DpzFm43aoVni9Zgnd9/6xSqdCwYUN06tRJ67hCoYCTkxMmTpyIe/fuQRAEzcvOzg6tW7fGhQsXNO29vLwgCAI2btyo1c/ixYtRtmxZzc+hoaGafiQSCcqUKYM+ffrg2bNnmjYZ75Xx9abvsLAwreMlS5aEn58f7ty5o+lj0KBBKF++PMzMzGBvb48OHTrg+vXrefpciQqDPCVJsbGxCAkJQatWreDk5IQVK1bgs88+Q2RkJE6ePJnfMRIREWmkpqbi22+/xbfffluo18N+yDhv3boFURTh7u6ebdsSJUpg5syZ2LhxIwYOHIimTZtqzkVGRuaoj+xs3rwZqampsLOzg4mJCQYNGoTt27fDzc3tvfsuLOL//hvPFy0C1GpAFDWvF8tXIO7AgSyvk0qlCA0NxZ49e7Bu3TrN8WHDhsHW1hZTp07VHDtw4ACioqKwd+9exMfHo02bNoiJidGcNzU1xaRJk7L982VlZYWoqCg8evQIP/74I/766y+tUT4ACAkJQVRUlNbr7XVnN27cwJMnT7BlyxZcuXIF7du318weql27NkJCQnDt2jXs3bsXoiiidevWhWp2EVFu5KkEeMmSJVGsWDF07doVc+bMQZ06dfI7LiIiIsqh3MycV6lUCA0Nhbm5OU6ePIm0tDTI/t0sNh9m4AMAJk+ejJiYGBw4cADFixfHjh070KVLF4SHh6NatWr5cg99i9m8GZBKgbeSgNdqNR4sX4EK5cvD0tIScrkcZmZmWm0qVqyIuXPnYtiwYWjRogVOnz6NjRs34syZMzDOsImtnZ0dHBwc4ODggAULFqBRo0Y4deoUfHx8AADdu3fHrl278OOPP+Krr77KMlZBEODg4AAAcHR0xPDhwzF58mQkJiZqYrOxsdG0yUqJEiVgY2ODUqVKYcqUKejRowdu3bqFSpUqYeDAgZp2ZcuWxaxZs1CjRg3cu3cP5cuXz8EnSlS45GkkadeuXXj06BGCgoKYIBEREelZhQoVIAhCjqY3LViwAHfu3MHZs2fx6NEjfPfdd5pzFStWfO8pUrdv38ayZcuwdu1atGzZEjVq1MDUqVNRp04dBAcHv1ffhUla9FOdBAkAhj58CN8d21G+fHmUKFEC5ubmCAkJ0Wk3bNgw1KhRA7169cLAgQMxZcoU1KhRI8v7vUlmMk7dtLKywsSJEzFjxgwolcocx25mZga1Wo20tLQcX5OTeN5QKpUICQlBuXLl4OTklOd7EOlTnpKkVq1aQSKR4NmzZwgPD0d4eLjW3FYiIiL6cGxtbeHj44Pg4OBMf1l+M0XrypUrmDp1KlasWIHKlStjxYoVmDVrFv755x8AwJdffokDBw5orX15IzU1NUe/iCckJABI32w+I6lUCrVandtHK7RMq1dPH0l6S7CLM3b7B+DAgQPYsWMH1q1bh08//VSnnSAIWLFiBQ4ePIiSJUti3LhxWd4rJiYGM2fOhFwuR7169bTOffXVVzA1NcWiRYtyFHdkZCRWrlyJOnXqwNLSUnO8e/fukMvlWq8HDx5k2kdUVBQWLFiA0qVLo1KlSprjy5cv11z7119/Yf/+/VojY0SGJE9JUlxcHHr16oXSpUujWbNmaNasGUqXLo2ePXtCoVDkd4xERESUjeDgYKhUKtSrVw9bt25FZGQkrl27hiVLlsDT0xNpaWnw9/dHp06dNEUD/Pz84Ofnh4CAAKSlpWHkyJFo1KgRWrZsieDgYFy8eBF37tzB5s2b0aBBA0RGRmrup1AoEBERofV6+PAh3N3d4ebmhkGDBuH06dO4ffs2Fi5ciP37979zbyVDY9uzBwQjIyBjMiiRoJiRMVpOGI+WLVuiQ4cO+PLLL2Fvb59pH2vXroW5uTnu3r2LR48e6Zxv2LAh5HI5ihUrhosXL2LTpk0oWbKkVhsTExPMmDEDCxYswIsXLzK9j0KhgFwuh7m5OSpVqoSSJUtqrYcCgKCgIJ3/Px0dHbXalClTBhYWFnB0dIRSqcTWrVu1kqAePXrgwoULOHLkCCpWrIguXbogKSnpnZ8jUaEl5kGXLl3EChUqiHv27BEVCoWoUCjEPXv2iJUqVRK7du2aly4LjEKhEAGICoVC36EQEVE+iI+PFwGIAMT4+Hh9h5MlfcT55MkTMTAwUHRxcRGNjY3F0qVLi5999pl4+PBhcfr06aKDg4P48uVLrWtevnwpOjg4iNOnTxdFURSTkpLEOXPmiNWqVRNNTU1FW1tbsVGjRmJoaKiYmpoqiqIo+vv7a54t46tfv36iKIrizZs3xU6dOoklSpQQzc3NxerVq4v/+9//Pshn8CElRESItz//XLxayV28WsldvP1pe1F5+nSOrv37779FmUwmHjp0SGzRooXYokULUa1Wi6Ioinfv3hUBiLt27RJv3bolvn79Wuf6Zs2aiSNGjBBFURRVKpVYrVo1ccSIEWJQUJDo4uKiaRcSEiJaWlqKkZGR4u3bt8WEhASdvgCI27dvzzLWw4cPiwDE8+fPi7du3RJjY2Ozfb7k5GTR3NxcXL9+fbZtiT6knOYGeUqSzM3NxfDwcJ3jR48eFc3NzfPSZYFhkkREVLQwSaLCJiU6WkyJitIkOdlRKpVihQoVxGHDhomimJ4UyeVycfny5ZqfAYgXLlzIso+MSZIoiuLu3btFY2NjccSIETpJkrW19TvjyWmSlFmylpWkpCTRzMxMDAkJyfE1RB9CTnODPFW3s7Ozg7W1tc5xa2trFCtWLC9dEhER5YipqSkOHz6seV9YGUqc9P6M3poCl53x48dDFEXMnTsXQHo1uAULFuDrr79GmzZt8hRDu3btUL9+faxatUpnSl5OxMTEIDo6WuuYpaVljvbGunPnDjZt2oTWrVvD3t4ejx49wty5c2FmZoa2bdvmOhaiwiBPa5ImTZqE0aNHa/3HFB0djW+++QaTJ0/Ot+CIiIjeJpVK4eXlBS8vL0gzWThfWBhKnPRhHTlyBMHBwQgJCYG5ubnm+KBBg9CwYUP069cvz6XYv//++zyvAerTpw9KlSql9Vq6dGmOrjU1NUV4eDjatm0LNzc3dO3aFZaWljh+/DhKlCiRp3iI9E0Q8/BfYq1atXDr1i0kJyfD2dkZAPDgwQOYmJigQoUKWm3Pnz+fP5HmUWxsLKytraFQKGBlZaXXWIiIiD6k5Lt38XzJEsQfDgMkElj5+qL48GEwzmY/HCKioiqnuUGeptsVpeo0RET0bgEBAYiJicGOHTs0x3777Tf07NkTs2fPxqVLl/Dzzz8DAGQyGcqUKYPOnTtjxowZ2LhxI/r06fPO/u/evQulUokpU6bg3LlzuH//PoKCgjBy5EitdnFxcZg8eTK2b9+OqKgolClTBuvWrYOnp2d+P3K+SE1NxerVqwEAAwcOhJGR0Qe9f8qjx7jXpSvUCQma/Xx+/d/PWLhwAe49fAgzfsNPRJSlPCVJU6dOze84iIjIQPz0008IDAzEypUr0adPHwQEBMDX1xchISFITU3FuXPn4O/vD0EQMG3aNPj6+mqu7dSpE6pWrYoZM2Zojtnb2+P8+fNwdXVF586dMWrUqEzv279/f1y+fBmrV6+Gr68v7t69C19fX1y9ehWlS5cu8OfOrZSUFAwdOhRAeqL5oZOkV2vXaiVIAGAFAYOK2UK5fQfMBg38oPEQERmSHCdJoihCEISCjIWIiAq5efPmYerUqdi4cSM+//xzzXETExM4/DuFy8nJCd7e3ti/fz++//57mJmZadoZGxvD3Nxc0/aNunXrom7dugCQ6aaaiYmJ2Lp1K3bu3InGjRtrjru6umo2RCVt8X//rZUgAUAzuRwAoDx5AsWZJBERZSnHhRs8PDywceNGpKSkvLNdZGQkhgwZoqnYQkRERcPYsWMxc+ZM7N69WytBetvly5dx/PhxrU0m31daWhpUKpVOlTgzMzMcO3Ys3+5TlEgtLYHMvtyUSNLPERFRlnI8krR06VKMHTsWX331FVq1aoU6derA0dERpqameP36Na5evYpjx47hypUrGDp0KIYMGVKQcRMR0Qf0119/YefOnTh48CBatGihc3737t2Qy+VIS0tDcnIyJBIJli1blm/3t7S0hKenJ2bOnImffvpJc/zUqVNwc3PLt/sUJdYdOyLpyhXdE2o1rNq3//ABEREZkBwnSS1btsTZs2dx7NgxbNq0CevWrcP9+/eRmJiI4sWLo1atWujduzd69OjBvZKIiIqY6tWr48WLF5g6dSrq1asH+b/Ttt5o3rw5VqxYAaVSiaCgIMhkMvj5+eVrDL/88gv69u2rVUW1c+fOuHjxYr7ep6go1rULlMeOIT4sDJDJAFEEVCpYd/4Clt7e+g6PiKhQy3XhhsaNG2vNBycioqKvdOnS+O2339C8eXP4+vrir7/+gmWGKVsWFhaaEZ21a9eiRo0aWLNmDfr165dvMZQvXx5HjhzBs2fPNJtlpqamwtXVNd/uUZQIRkYoszz4v0RJKoNV61Ywq1OHa4yJiLKRp81kiYjo4+Pi4oIjR44gOjoavr6+iIuLy7SdRCLBhAkTMGnSJCQmJuZ7HBYWFpr3Bw8eRIcOHfL9HkWFIJFA3rQpHKZMgcPECTCvW5cJEhFRDuQ6SXrx4gXmzZuHzz//HJ6envD09MTnn3+OefPm4fnz5wURIxERfQBpKjX2XonGpB2XMGv3VVx48FqnjZOTE8LCwvDs2TP4+PggNjY20746d+4MqVSK4ODgHN07JSUFERERiIiIQEpKCh4/foyIiAjcunVL02bv3r3Ys2cPnjx5gpkzZ6JcuXKoVKlStvsw6YuJiQl2796N3bt3w8TERN/hFIiAgIBs90589OgRjI2NUbVq1UzPC4IAQRBw8uRJrePJycmws7ODIAgICwvTaS8IAmQyGZydnTF69GgkJydr2hw7dgyNGjWCnZ0dzMzM4O7ujqCgoDw/JxF9fHI13e7MmTPw8fGBubk5vL29UbFiRQDA06dPsXTpUnz//ffYu3cv6tSpUyDBEhFRwUhMUcE/5DRO330FmSR9pOGnY3cxqJnuVLYyZcogLCwMzZs3h4+PD0qVKqXTRiaTYejQoZg3bx6GDBmiNfqTmSdPnqBWrVqanxcsWIAFCxagWbNmml+QFQoFxo8fj0ePHsHW1hZ+fn6YPXv2B99/KKdkMhnatWun7zD0LjQ0FF26dMHRo0dx6tQp1K9fX6eNk5MTQkJC0KBBA82x7du3Qy6X49WrVzrtQ0JC4Ovri9TUVFy8eBF9+vSBhYUFZs6cCSB9tHHo0KGoXr06LCwscOzYMQwaNAgWFhYYOJClz4koe4IoimJOGzdo0AA1atTAypUrdYbrRVHE4MGD8c8//+DEiRP5HmhexcbGwtraGgqFAlZWVvoOh4ioUPrhQCR+OHgT6kz+RdgwoAE8y9t9+KCo0AsICEBMTAx27NiR6XlRFOHm5obly5fj8OHDePXqFVavXq3VRhAETJo0CUuWLEF0dLRmX63WrVujQYMGmDlzJg4fPgwvLy9N++3bt2uNYPXv3x9RUVH4448/soy1U6dOsLCwwC+//PJez0xEhi2nuUGupttdvHgRo0aNynQ+syAIGDVqFCIiInIdLBER6ddv5x5mmiBJJQJ2Rjz+8AG9Q2pqKkJDQxEaGorU1FR9h5MlQ4mzIB0+fBgJCQnw9vZGz549sXHjRiiVSp12tWvXRtmyZbF161YAwIMHD3D06FH06tUr23vcvHkThw4dynSE6o0LFy7g+PHjaNasWd4fhog+KrlKkhwcHHD69Oksz58+fVpTcYiIiAyHMkWV6XFRFBGfnPaBo3m3lJQU9OnTB3369Ml2g3N9MpQ4C9KaNWvQrVs3SKVSVK1aFa6urtiyZUumbfv27Yu1a9cCSJ+i17ZtW9jb22fatnv37pDL5TA1NUWlSpXg4eGB8ePH67QrU6YMTExMUKdOHQQGBqJ///7593BEVKTlak3S119/jYEDB+LcuXNo2bKlJiF6+vQpDh48iB9//BELFiwokECJiKjgNCpvhz8vR0P11nCSWgQauHKqHeVeTEwMtm3bhmPHjmmO9ezZE2vWrEFAQIBO+549e2LcuHG4c+cOQkNDsWTJkiz7DgoKgre3N1QqFW7duoXRo0ejV69e2Lhxo1a78PBwxMfH4+TJkxg3bhzc3NzQvXv3fHtGIiq6cpUkBQYGonjx4ggKCsLy5cuhUqV/8yiVSlG7dm3N4kwiIjIsw1pWwP5rTwERUP27VFUqCHC2M0enT0rrOToyROvXr0dSUpLWNDhRFKFWq3Hz5k1N8ac37Ozs8Omnn6Jfv35ISkpCmzZtsiwz7+DgoNmXq1KlSoiLi0P37t0xa9YszXEAKFeuHACgWrVqePr0KaZNm8YkiYhyJNclwLt27YqTJ08iISEBjx8/xuPHj5GQkICTJ08yQSIiMlAVS1pi25BG8HK3h7FUAksTGbrXd8Jvgz1hbpzrfcfpA8pYEjuz17Rp03Dv3j0IgoASJUroJB41a9bEtGnTtI7dunULffr00UxXK1euHLp3746zZ8/mOK41a9ZgzJgxmtLuERERuHjxIpo0aaKZVve2vn37IiwsDL1794ZUKs3xvd60fde+XGq1WqtMOBHRu+T5Xz4jI6NMy74SEZFhquJohTX+dfUdBuVSVFSU5v2mTZswZcoU3LhxQ3NMLpfjxYsXAIC4uDgsWLAA06dPz7K/s2fPomXLlqhatSpWrVoFd3d3xMXFYefOnRgzZgyOHDmi1V6hUOgUbYqLi8P58+exbt06uLu7a53r3r07ZsyYgVmzZkEm0/41xNfXF8+fP8+2Gm1MTAyio6OhVqsRGRmJGTNmoGLFiqhcuTIAIDg4GM7Ozpp7Hz16FAsWLMDw4cPf2S8R0Rv5+vXg7du3MWDAABw6dCg/uyUiIqIsODg4aN5bW1tDEAStYwA0SdKwYcOwaNEiBAYGokSJEjp9iaKIgIAAVKhQAeHh4ZBI/ptwUrNmTYwYMULnmrCwMK09roD00uBVqlTRSZAA4PPPP8fQoUPx559/4rPPPtM6JwgCihcvnu0zv9lA+M2zNm3aFN99950m6VKr1Rg/fjzu3r0LmUyG8uXL4/vvv8egQYOy7ZuICMjnJCk+Pl7nGyYiIiIqHLp37479+/djxowZWLZsmc75iIgIXLlyBevXr9dKkN6wsbHR+vlNifPccHBw0KxpBtITs6zY2NjonM/J9o7Dhg3DsGHDchUXEVFGuUqS3lVpBgAePy5ce2kQEVHRY2Jigs2bN2veF1aFMU5BEDB37ly0b98eo0aNQvny5bXOR0ZGAkCmI0BERB+TXCVJI0eORKlSpWBsbJzp+Y91HwgiIvpwZDIZOnfurO8wslVY4/Tx8UHjxo0xefJkrF+/XutcTkZpiIg+Brmqbufi4oKgoCDcvXs309cff/xRUHESERFRPpk7dy42bdqECxcuaB1/U5b7+vXrue4zMTERwcHBqFevHv755598iZOISF9ylSTVrl0b586dy/K8IAj8FoqIiApUWloatmzZgi1btiAtLU3f4WSpMMdZr149dOrUCePGjdM6XrNmTVSpUgULFy6EWq3WuS4mJkbnWHx8PBYuXAhXV1cMHz4cFStWhKura0GFTkT0QeRqut2MGTOQkJCQ5fkqVarg7t277x0UERFRVpKTkzX78sXHx+uUkS4sCnucs2fPhoeHh1ZcgiAgJCQE3t7eaNKkCSZOnAh3d3fEx8fj999/x759+zQFmhQKBZYtW4agoCAoFAr4+/tj3LhxWpu5EhEZqlyNJFWpUgV16tTJ8ryRkRFcXFzeOygiIiIqWBUrVkTfvn2RlJSkdbxevXo4e/Ys3NzcMGDAAFSuXBmfffYZrly5gsWLF+Ply5eYMmUKXFxcMHPmTHTr1g23b9/GTz/9xASJiIoMQSzi8+NiY2NhbW0NhUKR7eZ0RERU+CmVSsjlcgDpIzQWFhZ6jihzhhJnRiqFAin370NWsiSMSpbUOhcdHY1FixZh+fLlEEURQ4YMwZgxY7ixPBEZlJzmBnka+69VqxYEQdA5LggCTE1N4ebmhoCAADRv3jwv3RMREdEHJKam4um8eXi9YSOQlgYIAuRezVDqu+8QFR+P+fPn48cff4SxsTFGjhyJkSNH5mjTVyIiQ5Wr6XZv+Pr64s6dO7CwsEDz5s3RvHlzyOVy3L59G3Xr1kVUVBS8vb2xc+fO/I6XiIiI8tnTBQvx+td16QkSAIgi7h86jF516qB8+fJYt24dJkyYgPv372PWrFkfNEEKCAhAx44ddd5nZvXq1fDy8oKVlRUEQci00IQgCJqXTCaDs7MzRo8ejeTk5IJ5ACIySHkaSXrx4gXGjBmDyZMnax2fNWsW7t+/j3379mHq1KmYOXMmOnTokC+BEhERUf5TxccjZsMG4K3Z93/GvMbBl68wbdhQDJsxA5aWlnqKMOcSEhLg6+sLX19fjB8/Pst2ISEh8PX1RWpqKi5evIg+ffrAwsICM2fO/IDRElFhlqckafPmzZmWAu/WrRtq166NH3/8Ed27d8eiRYveO0AiIiJ6fymPHuPqlctw+uQT2Nnba46nPnoEMZPN4HsVs0WvYrZwaNgwXxMkVUwM0p4/h6yUI6Ty/F2nNXLkSABAWFjYO9vZ2NjAwcEBAODk5IQOHTrg/Pnz+RoLERm2PCVJpqamOH78uE4Vm+PHj8PU1BQAoFarNe+JiIjyi7GxMUJCQjTvC6vCEmfStWt4MnEikq5cRevbtzGgrAvGLguGla8PAEBWogQgkQCZ7IsEAEaOjvkShypeiegZMxC7ezegVkMwNkaxHj1QYvQoCEZG+XKPvLh58yYOHTqEgIAAvcVARIVPnpKkYcOGYfDgwTh37hzq1q0LADhz5gx++uknTJgwAQCwd+9e1KxZM98CJSIiAtK3mzCEX2gLQ5xpz5/jfq/eUCckQBAEDCluh5YQ8HjUKEht1sKiQQPIbG1h5euD2L37AJXqv4ulUhg5OsKiQYN8ieXxqJFQ/n1ck4yJKSl4FRoKMS0VDhMn5ss9cqp79+6QSqVIS0tDcnIyPv3003dOzyOij0+ekqRJkyahXLlyWLZsGX755RcAQKVKlfDjjz/iyy+/BAAMHjwYQ4YMyb9IiYiIKFdeb94MdUKCJjHpZlMs/YREgpc//qhJgBymT0fa6xgknDihudaoTBk4rVwBQSp97ziSbt6EMvyYznG1Wo2/14bAtmZNJEkkEEURrVq1glEBjywFBQXB29sbKpUKt27dwujRo9GrVy9s3LixQO9LRIYjz9t/9+jRAz169MjyvJmZWV67JiIiylJaWhr27t0LAPDx8YFMlud/ygpUYYgz+foNnYIMAACVCklXr2l+lFpawiVkLZKuXUPyzZuQOZSCed06ECR5KoKrG8eNG5ke/yMuFmOjooBPP02PQyrFiRMnNLNUCoqDg4NmyUClSpUQFxeH7t27Y9asWdwQl4gAvEeSBADnzp3DtWvpf8l6eHigVq1a+RIUERFRVt5MjwLSN2ktrElSYYhT5uCQvt4o4zQ6ABCE9HNvMa1cGaaVK+d/HG9tTPtGO0srVDIxgdv//gcbV1dYWlrqZeN36b+jZYmJiR/83kRUOOXpb+xnz56hW7duCAsLg42NDQAgJiYGzZs3x8aNG2GfoWoOERER6YfNF1/g9a+/6p4QRdj2+PKDxWFepw6MXFyQ+uiRVsImkclQq2lTODdpkuO+FAoFIiIitI7Z2dnByckJ0dHRiI6Oxq1btwAAly5dgqWlJZydnWFra6tpHxMTg+joaKjVakRGRmLGjBmoWLEiKhdAgkhEhilP4+jDhg1DXFwcrly5glevXuHVq1e4fPkyYmNjMXz48PyOkYiIiPLAtFJFOM6dA8EkQ3U9QYBtQACs/fw+WByCRAKnlStgVKqUdnzu7nCcOydXfYWFhaFWrVpar+nTpwMAVq5ciVq1amHAgAEAgKZNm6JWrVrYtWuXVh99+vRBqVKlUKZMGXTv3h0eHh7466+/Cu2oJBF9eIIoZjZZ+d2sra1x4MABnTnDp0+fRuvWrTPd4VpfYmNjYW1tDYVCoZchfCIiyl9KpRJyuRxA+jQ2C4v83WsnvxSmOFWxsYgPC4M6ORkWng1hXKa0XuIQVSoojx9H6uPHMHFzg1nt2hAEQS+xENHHKae5QZ5GktRqdaaVZ4yMjKDOYp8FIiIi+nCio6MxbNgwuLq6wtzeHlUDA9H7f/9D+I3rePLkCYoVK4YlS5ZoXXPq1CkYGRlh3759AICUlBTMmzcPNWrUgLm5OYoXL45GjRohJCQEqampAICAgAB07NgxyzhWr14NLy8vWFlZQSKTIa1aNRTr1g3mdeowQSKiQitPSVKLFi0wYsQIPHnyRHPs8ePHGDVqFFq2bJlvwREREVHu3bt3D7Vr18ahQ4cwf/58XLp0CXv27EHz5s0RGBgIR0dHLF26FOPHj0dkZCSA9KIF/v7+6N+/P1q3bo2UlBT4+Phg7ty5GDhwII4fP47Tp08jMDAQS5cuxZUrV3IUS0JCAnx9fTX7KBIRGYI8Tb5dtmwZPvvsM5QtWxZOTk4AgIcPH6Jq1ar4NbMFolmYM2cOtm3bhuvXr8PMzAwNGzbE999/j0qVKmnaJCUlYcyYMdi4cSOSk5Ph4+OD5cuXo2QWlXKIiIg+dl999RUEQcDp06e1pvl5eHigb9++AICePXti27ZtCAgIQHh4OMaPH4/U1FTMnz8fALB48WIcPXoUZ8+e1ape6+rqis6dOyMlJSVHsYwcORJA+loiIiJDkackycnJCefPn8eBAwdw/fp1AEDlypXh7e2dq36OHDmCwMBA1K1bF2lpaZgwYQJat26Nq1evav5SHzVqFP744w9s2bIF1tbWGDp0KDp16oS///47L6ETEZGBMzY2xrJlyzTvCyt9xfnq1Svs2bMHs2fPznQd1JuqtEB6oYOqVauiR48e2LJlCw4dOqRZR7Vu3Tp4e3tnur2HkZFRgW/4SkSkT3ku4yIIAlq1aoVWrVrl+eZ79uzR+jk0NBQlSpTAuXPn0LRpUygUCqxZswbr169HixYtAAAhISGoXLkyTp48iQb/7hROREQfDyMjIwQGBuo7jGzpK85bt25BFEW4u7tn27ZEiRKYOXMmBg8ejCFDhqBp06aac5GRkfDy8irASImICq8cJ0lvL+58l7yWAVcoFACg2cvg3LlzSE1N1Rqhcnd3h7OzM06cOJFpkpScnIzk5GTNz7GxsXmKhYiIyBDlpmitSqVCaGgozM3NcfLkSaSlpWnKYOeh+C0RUZGR4yQpKCgoR+0EQchTkqRWqzFy5Eg0atQIVatWBZBemcfY2FhragAAlCxZEtHR0Zn2M2fOHM1+CUREVPSoVCqEh4cDAJo0aQKpVKrniDKnrzgrVKgAQRA00+HfZcGCBbhz5w7Onj2LZs2a4bvvvsOUKVMAABUrVsxRH0RERVGOk6S7d+9mevzYsWOoU6cOTE1N3yuQwMBAXL58GceOHXuvfsaPH4/Ro0drfo6NjdUUlyAiIsOXlJSE5s2bA9D//kPvoq84bW1t4ePjg+DgYAwfPlznvjExMbCxscGVK1cwdepUrF+/HpUrV8aKFSvQvXt3dOzYEdWrV8eXX36JCRMm4MKFCzrrklJTU5GSklJoP3sioveVpxLgGbVt21arFHheDB06FLt378bhw4dRpkwZzXEHBwekpKTobE779OlTODg4ZNqXiYkJrKystF5EREQfk+DgYKhUKtSrVw9bt25FZGQkrl27hiVLlsDT0xNpaWnw9/dHp06d0KlTJwCAn58f/Pz8EBAQgLS0NM3sjpYtWyI4OBgXL17EnTt3sHnzZjRo0EBTOhxIny4fERGh9Xr48CGA9FkhERERuHXrFgDg0qVLiIiIwKtXrz78B0NElFPie5LL5eLt27fzdK1arRYDAwNFR0dH8ebNmzrnY2JiRCMjI/G3337THLt+/boIQDxx4kSO7qFQKEQAokKhyFOMRERUuMTHx4sARABifHy8vsPJkr7jfPLkiRgYGCi6uLiIxsbGYunSpcXPPvtMPHz4sDh9+nTRwcFBfPnypdY1L1++FB0cHMTp06eLoiiKSUlJ4pw5c8Rq1aqJpqamoq2trdioUSMxNDRUTE1NFUVRFP39/TXPmfHVr18/URRFcerUqZmeDwkJ+aCfBxGRKOY8NxBE8f1WZlpaWuLixYtwdXXN9bVfffUV1q9fj507d2rtjWRtbQ0zMzMAwJAhQ/Dnn38iNDQUVlZWGDZsGADg+PHjObpHbGwsrK2toVAoOKpERFQEKJVKTZnqwjzdzlDiJCL6mOQ0N8hzCfA3Vq1aleeNXVesWAEAOiVGQ0JCEBAQACC9YIREIoGfn5/WZrJEREREREQF4b1Hkgo7jiQRERUthjJCYyhxEhF9THKaG7x34QYiIiIq3JKTk7Fs2TLs2LFD36EQERmE955uR0RE9CEZGRlh3rx5mveFVWGIUxRF/Pbbbxg3bhzu3buHH374QS9xEBEZGk63IyIiKoJOnDiBMWPG4MSJE2jbti3mz5+PKlWq6DssIiK94nQ7IiKij9Ddu3fRtWtXNGzYEAkJCdi/fz/++OMPJkhERLnAJImIiAyKSqXCmTNncObMGahUKn2Hk6WCilOdlIS0588hvtXn69ev8fXXX8Pd3R3Hjh1DSEgIzp07B29v73y794ciCMI7X9OmTdO03bp1K1q0aIFixYrBzMwMlSpVQt++fXHhwgVNm9DQUAiCgMqVK+vca8uWLRAEAWXLltUc27ZtG1q1agV7e3tYWVnB09MTe/fuLchHJqJChkkSEREZlKSkJNSrVw/16tVDUlKSvsPJUn7HqYqPx5OJk3Czbj1ENmmKyGZeeL1hA5KTk7FkyRK4ublh5cqVmDhxIm7evImAgABIpdJ8eJIPLyoqSvNavHgxrKystI59/fXXAICxY8eia9euqFmzJnbt2oUbN25g/fr1cHV1xfjx47X6tLCwwLNnz3DixAmt42vWrIGzs7PWsaNHj6JVq1b4888/ce7cOTRv3hzt27fXSryIqGhj4QYiIqJCThRFPBw4CIkREYBaDQBQvXiBrd+OxdzRo3H32TP07dsXM2bMQKlSpfQbbD5wcHDQvLe2toYgCFrHAODkyZOYN28efvjhBwwfPlxz3NnZGbVr18bbS65lMhm+/PJLrF27Fp6engCAR48eISwsDKNGjcKGDRs0bRcvXqx17XfffYedO3fi999/R61atfLrMYmoEONIEhERUSGXePYsEs+f1yRIb/z06iVKJSXh/Jkz+PHHH4tEgpRTGzZsgFwux1dffZXpeUEQdI717dsXmzdvRkJCAoD0aXi+vr4oWbLkO++lVqsRFxcHW1vb9w+ciAwCkyQiIqJCLvGfS4BE95/sECdnrC7pgCpvjbJ8DG7evAlXV1fIZP9Nilm0aBHkcrnmpVAotK6pVasWXF1d8dtvv0EURYSGhqJv377Z3mvBggWIj49Hly5d8v05iKhwYpJERERUyMmK2+mMImlIpZBkUcY2Ojoaw4YNg6urK0xMTODk5IT27dvj4MGDePLkCYoVK4YlS5ZoXXPq1CkYGRlh3759AICUlBTMmzcPNWrUgLm5OYoXL45GjRohJCQEqampAICAgAB07Njxnc9w4sQJtGjRAhYWFrCyskLTpk2RmJiYuw8iG3379kVERARWrVoFpVKpM+XuTZuQkBAcOXIESqUSbdu2fWef69evx/Tp07F582aUKFEiX+MlosKLa5KIiIgKOUtvb0gsLKBOSAAy/uIvlcLK1xdSuVznmnv37qFRo0awsbHB/PnzUa1aNaSmpmLv3r0IDAzE9evXsXTpUgwaNAht2rRBhQoVkJiYCH9/f/Tv3x+tW7dGSkoKfHx8cPHiRcycORONGjWClZUVTp48iQULFqBWrVqoWbNmtvGfOHECvr6+GD9+PJYuXQqZTIaLFy9CksnoWE5VqFABx44dQ2pqqmazXhsbG9jY2ODRo0dZXtejRw98++23mDZtGnr16qU1EvW2jRs3on///tiyZYtBVgkkorxjkkRERFTISSwsUCY4GA+/+gpiQgIglQIqFUzdK6HkpImZXvPVV19BEAScPn0aFhYWmuMeHh6aKWY9e/bEtm3bEBAQgPDwcIwfPx6pqamYP38+gPQCBkePHsXZs2e1Cha4urqic+fOSElJyVH8o0aNwvDhwzFu3DjNsUqVKuX6c8ioe/fuWLp0KZYvX44RI0bk+DpbW1t89tln2Lx5M1auXJlluw0bNqBv377YuHEj2rVr916xEpHhYZJEREQGxcjICFOnTtW8L6zyO06LBvVR4egRxO3di7TnL2Dq4QGLRg0hZDIa8+rVK+zZswezZ8/WSpDesLGx0bxfuXIlqlatih49emDLli04dOgQ5P+OTK1btw7e3t6ZVnQzMjLK0XM9e/YMp06dQo8ePdCwYUPcvn0b7u7umD17Nho3bpyLT0Cbp6cnxowZgzFjxuD+/fvo1KkTnJycEBUVhTVr1kAQhCxHqkJDQ7F8+XLY2dllen79+vXw9/fHDz/8gPr16yM6OhoAYGZmBmtr6zzHTESGg0kSEREZFGNjY63NRAurgohTKpfDxs8v23a3bt2CKIpwd3fPtm2JEiUwc+ZMDB48GEOGDEHTpk015yIjI+Hl5fU+IePOnTsAgGnTpmHBggWoWbMm/ve//6Fly5a4fPkyKlSokOe+FyxYgHr16mHFihVYu3YtEhISULJkSTRt2hQnTpyAVRZrtczMzGBmZpZlv6tXr0ZaWhoCAwMRGBioOe7v74/Q0NA8x0tEhoOFG4iIqEh5V7GCN44fP462bduiWLFiMDU1RbVq1bBo0SKoVCqtvgRBwI4dOzK9z7Rp0yAIgs4rs5GbR48ewdjYGFWrVs20r9mzZ6Nhw4YwNzfXGuXJq8wKFmRFpVIhNDQU5ubmOHnyJNLS0vLUT1bU/xacGDRoEPr06YNatWohKCgIlSpVwvLly/HHH39gwoQJ2LNnT6bXBwQEICYmJsv+u3TpgsOHDyMmJgYpKSl4+PAh1q1bh/r16+e4j5EjR+LevXuan8PCwiCKos6LCRLRx4NJEhERGRS1Wo0rV67gypUrml/A37h37x5q166NQ4cOYf78+bh06RL27NmD5s2ba0YEtm/fjmbNmqFMmTI4fPgwrl+/jhEjRmDWrFno1q1bjhODr7/+GlFRUVqvKlWqoHPnzjpxhoSEoEuXLoiNjcWpU6d0+kpJSUHnzp0xZMiQ9/x00lWoUAGCIOD69evZtl2wYAHu3LmDs2fP4tGjR/juu+805ypWrJijPt7lzd5NVapUwcOHD7FhwwZ89dVXePDgARYvXoxPP/0UISEhePz48Xvdh4goX4lFnEKhEAGICoVC36EQEVE+iI+PFwGIAMT4+Hitc23atBFLly6tc1wURfH169difHy8aGdnJ3bq1Enn/K5du0QA4saNGzXHAIjbt2/PUVwREREiAPHo0aM6cZYrV07cs2ePOHbsWHHAgAFZ9hESEiJaW1vn6H7Z8fX1fednIYqiePnyZdHExETcunWrKIqi+Ntvv4lGRkbixYsXRVEUxblz54oSiUQ8f/68Th8pKSmavv39/cUOHTponVepVOLly5fFFStWiGZmZqK1tbXm86hUqZJoZ2cnfvrpp+Lt27dFtVqdL89MRJSdnOYGHEkiIqIi4U2xgsDAwCyLFezbtw8vX77E119/rXO+ffv2qFixIjZs2JCn+//000+oWLEimjRponMuISEB3t7e6NmzJzZu3AilUpmne+RGcHAwVCoV6tWrh61btyIyMhLXrl3DkiVL4OnpibS0NPj7+6NTp07o1KkTAMDPzw9+fn4ICAhAWloaRo4ciUaNGqFly5YIDg7GxYsXcefOHWzevBkNGjRAZGSk5n4xMTH4+eefMXLkSDRr1gzFihVD1apVMXToUBQvXhyJiYn4+uuvcfLkSXTu3BlKpRKLFy+Gq6srBEEo8M+DiCg3WLiBiIiKhJwUK7h58yYAoHLlypmed3d317TJjaSkJKxbt06rxHVGX3zxBaRSKapWrQpXV1ds2bIFAQEBub5Pbri6uuL8+fOYPXs2xowZg6ioKNjb26N27dpYsWIFvvvuOzx+/FizaewbwcHB8PDwwHfffYcpU6Zg//79CAoKwqpVq/D111/D3NwclStXxoABA/DkyRP89ttv2LNnD54+fYojR45o9dWmTRts2bIFFhYWmDt3LoKDg7F8+XLUqFED+/fvR/ny5Qv0MyAiyismSUREVCSIuSgykJu2ObF9+3bExcXB398/0/PdunXTvO/ZsyfWrFlT4EkSkL4eaNmyZVi2bJnOOS8vL0yZMkXnuK2tLaKiojQ/m5iYYNy4cfD398exY8cQHh6OY8eOITAwEGq1Gvb29mjcuDGaNGmCxo0bo2bNmpmWBh83blyWSSQRUWHD6XZERLn0/PlzDBkyBM7OzjAxMYGDgwN8fHzw999/AwDKli2LxYsXZ3rtvXv3Mq2I1rNnT63zJUqUQFxcnNa1NWvW1CopvW3bNrRu3Rp2dnYQBAERERE69xs0aBDKly8PMzMz2Nvbo0OHDu+9EL+wykmxgooVKwIArl27lun5a9euadrkxk8//YRPP/0UJUuWzPS8l5cXZDIZZDIZxo4di2PHjuVpxOpDEUURN2/e1CRzbm5ucHR0RJcuXfDHH3+gevXqWL16Na5fv46nT59i27ZtGDVqFOrWrVuo964iIsopjiQREeWSn58fUlJS8PPPP8PV1RVPnz7FwYMH8fLlyxz3ceDAAXh4eGh+fnvPlri4OCxYsADTp0/Psg+lUonGjRujS5cuGDBgQKZtateujR49esDZ2RmvXr3CtGnT0Lp1a9y9exdSqTTH8RoCW1tb+Pj4IDg4GMOHD9dZlxQTE4PWrVvD1tYWCxcuRMOGDbXO79q1C5GRkZg5c2au7nv37l0cPnwYu3btyrLN8ePHYW5urvn5q6++wtq1azF37txc3augpKWlISIiQjNKdOzYMTx79gwSiQQ1atRA27Zt0aRJEzRq1AiOjo76DpeIqMAxSSIiyoWYmBiEh4cjLCwMzZo1AwC4uLigXr16uerHzs4ODg4OWZ4fNmwYFi1ahMDAQJQoUSLTNr169QIArf1d3jZw4EDN+7Jly2LWrFmoUaMG7t27VyTXgwQHB6NRo0aoV68eZsyYgerVqyMtLQ379+/HihUrcO3aNaxatQrdunXDwIEDMXToUFhZWeHgwYP45ptv8MUXX6BLly5afd69e1dnlK5ChQqaJGzt2rUoVaoU2rRpo9Xmn3/+0bz38PDQStq6d++OGTNmYNasWZDJZHjw4AFevXqFBw8eQKVSae7n5uYGuVye7XOnPHqM17/8DwnnzkFqawebL/xg2apVpgURbt26hTNnzqBkyZKapOjEiRNQKpUwMTFB/fr1MWDAADRp0gQNGjSAtbV1tvcnIipqmCQREeWCXC6HXC7Hjh070KBBA5iYmBTIfbp37479+/djxowZma4nyQulUomQkBCUK1cOTk5O+dKnPhgZGWmq0709tSu7YgVAehGFw4cPY/bs2WjSpAmSkpJQoUIFTJw4ESNHjtRJLEaPHq0TQ3h4OBo3bgy1Wo3Q0FAEBATojMz98ssvsLOzQ58+fXTi/PzzzzF06FD8+eef+OyzzzBlyhT8/PPPmvO1atUCABw+fBheXl7v/DySbtzE/S+/hDopCVCpAIkEyqNHUczfHw7j09cAvXjxAkeOHMGSJUsQHh6uWZNVrFgxNGrUCFOmTEHjxo1Ru3btAvszTURkUAq+Grl+cZ8kIspvv/32m1isWDHR1NRUbNiwoTh+/HjNvjKiKIouLi5iUFBQptfevXtXBCCamZmJFhYWmtebfWjenL9w4YK4Z88e0cjISLx165YoiqJYo0YNcerUqVn2eeHChUzvGRwcLFpYWGj2p3nTX3aioqLEoUOHiuXKlRONjY3FMmXKiJ9++ql44MCBdz7n1KlTxRo1amj9jH/3x5FKpaKdnZ3YpEkTMSgoSExKStK0S0lJEb/99luxatWqorm5uViqVCmxV69e4uPHj3MU78fqnn+AeLWKh3i1krvmdaViJXFhKUexb5cuoru7u+bzf/NnYPHixeKlS5dElUql7/CJiD4o7pNERFRA/Pz88OTJE+zatQu+vr4ICwvDJ598gtDQ0Bz3sWnTJkRERGheVapU0Wnj4+ODxo0bY/Lkye8Vb48ePXDhwgUcOXIEFStWRJcuXZCUlPTOa+7du4fatWvj0KFDmD9/Pi5duoQ9e/agefPmCAwMzHUMHh4eiIqKwoMHD3D48GF07twZc+bMQcOGDTUFKhISEnD+/HlMnjwZ58+fx7Zt23Djxg189tlneXruj4E6MREJJ0+mjyBl8DA1FROio/D30aOQy+WQSqVwc3PDiRMncP36dYwYMQJVq1aFRMJfA4iIMsPpdkREeWBqaopWrVqhVatWmDx5Mvr374+pU6fmuKyzk5MT3Nzcsm03d+5ceHp64ptvvslzrNbW1rC2tkaFChXQoEEDFCtWDNu3b0f37t2zvOarr76CIAg4ffq01loaDw8P9O3bN9cxyGQyzRosR0dHVKtWDa1atUKNGjXw/fffY9asWbC2tsb+/fu1rlu2bBnq1auHBw8ewNnZGQCgVqvx4MEDAICzs3Oh/UX/g8SZRSlzZ2Nj/OxSFjNSknHhwgWMGzcOkydP5lQ6IqIcKpz/shARGZgqVapAqVTme7/16tVDp06d8m1/GVEUIYoikpOTs2zz6tUr7NmzB4GBgToV4gDAxsYmX2Jxd3dHmzZtsG3btizbKBQKCIKgdc/ExESUK1cO5cqVQ2JiYr7EUhDyGufRo0fRqFEjTJs2DZcuXXrnnk4Sc3OY168PZEjAktRqLHr+DF/euwtjGxucPXsWs2bNYoJERJQLHEkiIsqFly9fonPnzujbty+qV68OS0tLnD17FvPmzUOHDh007R4/fqxTEc3FxSVP95w9ezY8PDwgk2n/lf2mGtqTJ08AADdu3AAAODg4wMHBAXfu3MGmTZvQunVr2Nvb49GjR5g7dy7MzMzQtm3bLO9369YtiKIId3f3bGMbO3YsJk2apHUsJSUl0+mDmXF3d8e+ffsyPZeUlISxY8eie/fusLKyylF/RUGFChXg6uqKxYsXY/r06XBzc0OnTp3g5+eHunXrahWWUKekwLSqBxLOnAEAnEtIwOSn0Xicmopvvb0x488/uW8REVEecCSJiCgX5HI56tevj6CgIDRt2hRVq1bF5MmTMWDAAK0qdAsWLECtWrW0Xn/88Uee7lmxYkX07dtXZx3Rrl27UKtWLbRr1w4A0K1bN9SqVQsrV64EkD4lMDw8HG3btoWbmxu6du0KS0tLHD9+PMuy4gDeOXLxtm+++UZrbVVERAQGDx6c4+tFUcy0THVqaiq6dOkCURQ1Vek+FqVKlcIvv/yCZ8+e4a+//oKXlxfWrl2L+vXrw9nZGSNGjMCRI0eQlpSEhwMG4tXaECjT0jDraTR6P3wAG5kMR+cvwHf79jFBIiLKq4KuIKFvrG5HRJQ7L1++FAVBEL/77rt3tstNdbuMP2fUvn170cPDQ+tYSkqK2LFjR7F69eriixcvdK6Jj4/XVGqLj4/P9nn0JT/jTE1NFcPCwsRhw4aJpUuXFgGIxa2txV7FiokrS5cRHWUy0UwQxHH2JcRLlauIUTNm5tNTFBx/f3/N52NkZCSWL19enD59upiamiqKoiiq1Wpx1apVYr169UQLCwvR2tparF27thgUFCQqlUpRFP+rnDho0CCtvi9cuCACEO/evSuKoij+8ccfopGRkXju3DmtdgsWLBDt7OzEqKgoURRFcfny5WK1atVES0tL0dLSUmzQoIH4559/FvAnQUQfEqvbEREVAFEUcfDaUwz+5Ry6rjqBhftu4FnsuyvFFSb3XigxecdltPnhKHqtOYXd/zzRGTmytbWFj48PgoODM11nFRMTky+xXL9+HXv27IGfn5/m2JsRpMjISBw4cAB2dnb5ci9DJooilHv2omzozxj54CFODxyE8F278Fk5V+yLi8Pgx4/gZGyMHWXLobetLaRqNeKymMJY2Pj6+iIqKgqRkZEYM2YMpk2bhvnz5wNI3yx55MiR6NChAw4fPoyIiAhMnjwZO3fu1JqiaWpqijVr1iAyMjLL+7Rt2xa9e/dG7969Nevxrl69ikmTJiE4OFhTVKRMmTKYO3cuzp07h7Nnz6JFixbo0KEDrly5UoCfAhEVRlyTRESUC3P+uo7VR+9AKhGgUos4c+8Vfj15H1uHNISrvVzf4b3T5ccKdFl1AslpaqjUIiRCHMIjX+Bcw9eY+pmHVtvg4GA0atQI9erVw4wZM1C9enWkpaVh//79WLFiBa5du5are6elpSE6OhpqtRovX75EWFgYZs2ahZo1a2oq96WmpuKLL77A+fPnsXv3bqhUKkRHRwNIT9yMjY3z54MwMNHTZyBm48b04gxqNZIjI3Hp55+xOzoKCWo1ppd0wBfW1trTFgtpxb+3mZiYaBKUIUOGYPv27di1axfKly+PdevWYceOHVpr/cqWLYvPPvsMsbGxmmOVKlVCiRIlMHHiRGzevDnLewUFBaFatWqYOnUqZs2aBX9/f7Rv3x5du3bVtGnfvr3WNbNnz8aKFStw8uRJeHh4vN0lERVhTJKIiHLo6pNYrD56BwCgUqePvqhFIDYpDbP/vIY1/nX1GV62Zuy+iqRUFf4NXfO/Kzb/hebORmhas6KmraurK86fP4/Zs2djzJgxiIqKgr29PWrXrp2nNUJXrlxBqVKlIJVKYW1tjSpVqmD8+PEYMmSIpura48ePsWvXLgBAzZo1ta4/fPgwvLy8cn1fQ5d45Up6ggQAajUAICUtDd/cu4t6xe0x2aEUHN5edySVwsrXt8BiUsUrEbt7N5IjI2Hk6Ajrjh0gy6cRPzMzM7x8+RLr1q1DpUqVtBKkNwRBgLW1tdaxuXPnom7dujh79izq1KmTad+WlpZYu3YtfHx8cPfuXTx8+BB79uzJMhaVSoUtW7ZAqVTC09Pz/R6MiAwOkyQiohzaeyVaM4KUkUot4tD1Z0hJU8NYVji/wY9PTsPpu690jqcpnuLpum8wR7iLpr8Ea50rVaoUli1bplWQIqN79+5lenzatGmYNm1alj9npWzZsjkqGiGTyfDVV19p3hdW+RFn/OEwQCrV2izWWBBw2LU8LKRSyJs2hfLoUUAQ0vdMkkhg5OgIu0EDdfoSRRGJ588j/vBhQJDAspU3zKpXz1U8ybdv435vf6hevUqPS63G86VL4bRyJSwa1M/TM76J7eDBg9i7dy+GDRuGP/74A5UqVcrx9Z988gm6dOmCsWPH4uDBg1m2a9GiBb744gts3LgRmzZtynQ656VLl+Dp6YmkpCTI5XJs3749x9UaiajoKLz/uhARFTLqd/wCL4qAiJxXhfvQdOvHpZNZl4TziPVo2772B43nfZiYmCA4ODj7hnpWkHHKpVJAEFA6aBHi9u5D7J9/Qp2UCHnTZijWrSukb5VMF1UqPBk7DrG7d6cnNwBe/vgjbLp3h8OUyZlWGMzMk2/HQhUTk/4HPi0tve/kZDweORJuR49Aksspkbt374ZcLkdqairUajW+/PJLTJs2Dbt3785VPwAwa9YsVK5cGfv27cuyeuPjx4+xZ88emJubIzw8HF26dNFpU6lSJUREREChUOC3336Dv78/jhw5wkSJ6CPDJImI6C33Xyqx6cxDRCmSULGkJbrUKQM7uQlauJfA0kO3dNpLBQGe5e1gIpPqIdqcsTCRwdPVDqfvvoLqrWRPMLWCb9VSeoqM3sXSuyVeZDaSJ5XCwtMTUgsL2HT6HDadPn9nP4odO9ITJEBrVCpmwwZYeDaAVevW2caScu8ekjIpYBCTloa1kTchdu4MtZ0dkpOTkZSUhJSUFCQnJyM5ORkqlQrz58/XmbbWvHlzrFixAsbGxnB0dNSMuFWsWBHXr1/PNqaMypcvjwEDBmDcuHFYs2ZNpm0GDBiA2rVrY+LEiWjVqhW++OILNGvWTKuNsbEx3NzcAAC1a9fGmTNn8MMPP2DVqlW5ioeIDFvhnBdCRKQne69Eo8XCI1h19A52RTzG/L3X0XxBGK48UaCmkw38PikNIH12EwBIJQJMjCQY3zb7jVf1bUr7KjA1lkAqSQ/+3//BoKauqFDSUo+R5Y4oinj+/DmeP3+eqz2dPrT8iNPU3R3FevVK/+FNMQapFBIzM5Qc+22O+4nZtl3zh/ZqUhJuvNlzSyKBYvuOHPWhiovL9LhCpcKphAScvXIF169fx5MnTxAfHw9BEGBjYwNnZ2dUqVIl06ltFhYWcHNzg7Ozs9aUxC+//BI3b97Ezp07da4RRREKhSLTWKZMmYKbN29i45t1XBn89NNPOHbsGNasWYPmzZtjyJAh6Nu3b6YVHDNSq9WainhE9PHgSBIR0b8SUtIwelME1GrtiXPxyWn4estF/Dm8CeZ/UQP1y9lh09mHeK1MQX1XOwxs6opyxS30FndOVS5lhT0jmiL0+D2cufcK9nITdKnrhNZVSuo7tFxJSEjQTKeKj4+HhUXh/OzzK86SE8bDvG4dxPy2FarXr2Bepy5se/WEkaNjjvtQKRTpU+QA/B6rwJYYBX51doa7qWn6uRwwqVABEgsLqN9KKlyMjbGpbDmU378fxmVK5/zB3qFLly7Yvn07unfvjkmTJqF169awt7fHpUuXEBQUhGHDhqFjx44615UsWRKjR4/WlBF/4/79+xg9ejQWLFgAFxcXAMD333+Pv/76C+PGjcPSpUsBAOPHj0ebNm3g7OyMuLg4rF+/HmFhYdi7d2++PBcRGQ4mSURE/zpy4zmUKSqd42oRuBYVh3svE1CuuAW61HVCl7pOeojw/TnZmmPyp1xbYUgEQYBV69Y5mhKXFYv69ZFy9y6gUmFocXucTUjE4MePsKVsObjXr5ejPiSmprAfPgxP58z9r1DEv2y6dMm3BAlIf+b169dj9erVWLt2LWbPng2ZTIYKFSqgd+/e8PHxyfLar7/+GitWrEDSv6NloiiiX79+8PT0xMCB/xW0MDc3R2hoKLy8vDTT7p49e4bevXsjKioK1tbWqF69Ovbu3YtWrVrl27MRkWEQxMI8VyEfxMbGwtraGgqFAlZvLWQlIspo2/lHGL35Ypbn/xzeBFUc+feIvimVSsjl6XtSFeaRpMIUZ8qjR7jb8XOoExMBlQrP09Iw6skTjHN1xeeHD0Fmb5/jvmK278DLVauQcu8eZCVKwLZ3L9j26QNBWnjX5BERvZHT3IAjSURE/6rvavf2F+QatubGcCtRuDeLJcqKcZkyKLtxA54tXIT4I0dgb2KCnQP6o8SYMblKkADA5vOOsPm8I0RRzHFVPCIiQ8PCDURE/yptY4a+DcsC+K9k9pviBuPauhfaPZCI3iUgIAAdO3aEiZsbnFYsh/vlS3C/9A/K/PADKjZtCkEQIAgCpFIpHB0d0a9fP7x+/VpzfVhYGARBQExMjFa/giCgbNmyWLx48Yd9ICKiD4D/4hMRZTDp0yqY2bEqytvLYW4sRQ0nG/zYuw661DHMNUhEbxMkEgiS//75nz59OqKiovDgwQOsW7cOR48exfDhw/UYIRGR/nG6HRFRBoIgoFcDF/Rq4KLvUIgKjFqpxPOly5AaFYXE4OVIvHQZ9sOHo3nz5vD398eGDRv0HWKhlfrkCRR//AF1bCzMan0CebOmXI9FVAQxSSIiIoMik8ng7++veV9YFWScYkoKXm/ciJgdO6FWKiFv3Bh2ffvAqHT2FeZEtRoPBg5C4oULgFoNiCKSrlzBw4EDIZkxHb///jvq16+fr/EWFTHbdyBq4sT0HyQS4MefYFqtGpzXroHU0nD2GiOi7BXef12IiHJJkZCK+JQ0lLIyhUTCBeVFlYmJCUJDQ/UdRrYKKk5RpcLDwEAoj/2tqTLy+tEjKHbvRrnNm2Ds8u5RUOXfx5F47pzm54UvnuOHF8+hBpDcpQvq16+PRYsW6VxXpkwZnWMJCQnv9zAGJPXx4/QESa1OP/Dv/yZduYLnQYvhMGWyHqMjovzGJImIDF6UIhGTtl/GoRvPIIpAKWtTfOtbCZ/X0v2ljsjQxR85AmX4Me2DKhXU8fF4viwYpefPe+f1CefOAjIZkJYGAOhbzBYdra0hAohOTcUqtRrt2rXD0aNHIc0wjSw8PByWb42WeHl55ccjGQTF7j8yP6FWI2b7dpScNFFrrRcRGTYmSURk0JJSVei66iQexyRqSndHKZIwatNFmMqkaFOtlH4DpHwniqJmBMPc3LzQlqEuqDjjw44AUimgemvjY5UK8YcOZnu91NLyv9EQAMWkUrgYGwMAyllYwH3RIjRs0gSHDx+Gt7e3pl25cuVgY2Oj1Vdhnu6Y31QKRfoUuwyf3RtiYmJ60vnv50hEho9feRCRQfvjnyg8eJUAlVp7cyNBABYfjNRTVFSQEhISIJfLIZfLC/V0r/yIM+n6dUTPmo1HI0bixarVSHv1CoJMmv4HPDOS7AsIWLVtm/kJqRRWn7aDzMQEAJCYmJinmIsq809qaUbftAgCTKpUhsAEiahI+Xi+AiKiIunyEwVkEgFpbyVJogjciI6DWi1yfRIZpNdbtiB6ylTN6EXc/v14uXYtSn7zdea/rEsksGrTJtO+FAoFIiIiND/H9e2L1FWrAEGAEsDztDQYlSmD1y1bYsI338De3h4NGzYsmAczUHIvL5hUqYLkGzf+G8X7N1ktMWKEHiMjooLAJImIDJq9pQnUopjpORtzIyZIBSQpVYUTt18iMVWFeuVsUVxuou+QipS0ly8RPX1Gerb/5hdyUYQ6Ph4x23fA+vOOUGzfoX2RWo3UJ4+hTk6G6vVrvFy9GnEHDyH25k2ERUehVq1aWs37dOsG6auXWPr8GZY+fwbcvgX7fy6ibt262LdvH+zs7D7MwxoIQSaDS2gIni1cBMWO7RCTU2BSqRLsR46AvFkzfYdHRPlMEMUsfrsoImJjY2FtbQ2FQgErKyt9h0NE+SxKkYgm3x/WGUmSCMAQr/L4xsddT5EVXYeuP8WoTRFQJKaPZkglAgK9ymNUq4ofZH2QUqmEXC4HAMTHx8PCwqLA75kX7xPn682b00eRslBu9++418kPYkqK9gmJBDadOyPuwAGoYmL+S7AkEhiXd0W5TZsgMTfP7aPQW0SVCmJaGiQm/HKAyNDkNDfgmiQiMmilrM2w7MtPYCJL/+vszcBRC/cSGN6ygh4jK5oevEzAoF/OITbxv+leKrWIJYduYev5x3qMrGgRk1OyXncEIG7fPoipqbon1GrEbN2qnSD9ezzl1m3EbN+e/8F+hASplAkSURHH6XZEZPB8qzrg9ARv7L0SjdikVNQta4saTjb6DqtI2njmAdQi8PYUBAHAmmN38EVtll3PDxaNGmr2QNIiCDByKgN1UnJ6hbvM1iZlduxf8UfDYdujRz5GSkRUNDFJIqIiwdrcCF3qOuk7jCLv4etEZDZLWwTw6DWroeUXE1dX2HTpgpjNm9NHlEQxPSkSRZQcNx5iSnLWyVCGPZC0CAJHP4iIckiv0+2OHj2K9u3bw9HREYIgYMeOHVrnRVHElClTUKpUKZiZmcHb2xuRkSzpS0RFS5pKjQNXn2L10dvYczkaqSrdfVgKCzd7eabHJQLgViLzc/lNKpXiiy++wBdffKG12Wlh875xOkybCoepU2BSwQ1SGxtYNPSEy8+hkNkWQ+yevYCRUabXyZs1Ta+I9za1GlZtfHMdBxHRx0ivI0lKpRI1atRA37590alTJ53z8+bNw5IlS/Dzzz+jXLlymDx5Mnx8fHD16lWYmprqIWIiovz18FUCevx0Cg9eJUAiAGoRcLQxxa/96sM1i4REn7rVc8Kqo7eRlKpCxloZahEY3Kz8B4nB1NQUW7Zs+SD3eh/vG6cgkaBY9+4o1r275ljsn3/i8Ziv05Mgleq/USYAEmsr2AcOhbVfJzzo0xdJ//zz37omUYTEygqpL19CTEuD8BFtAktElBeFprqdIAjYvn07OnbsCCB9FMnR0RFjxozB119/DSB9n4eSJUsiNDQU3bp1y1G/rG5HRIXZZ0uP4UpUrNZmuFKJANfiFtg3qukHqRaXW+cfvMboTRG49zJ9g1RLExnGtnFHzwYueo6saFOnpCCySVOoFQqdc4KZGSqEHYbU2lrT9tWatXi+bBmgVmutb7L09kbppUsK5Z8tIqKCltPcoNB+lXT37l1ER0fD29tbc8za2hr169fHiRMnskySkpOTkZycrPk5Nja2wGMlIsqLG9Fx+Oex7i+8KrWIyGfxuPhIgZqFsADFJ87FcPhrL1yLikNiqgoejlYwNSq8096KiqSLFzNNkABATExE4j//QN6kCQBAYmyMxEuX/j2p/V1o3IEDSDh1ChYNGhRovEREhqzQlgCPjo4GAJQsWVLreMmSJTXnMjNnzhxYW1trXk5OXMhNRIXT87jk9zqvT4IgoIqjFWq7FPvgCZJSqYQgCBAEAUql8oPeOzfyPc5sR37+Oy+KIuKPHNEuA/6GTIb4w2HvHw8RURFWaJOkvBo/fjwUCoXm9fDhQ32HRESUqUoOlpp9nd4mCEAVR04Rpv+YVa8OqY1NpuckcjnM69bROiZkVSxCFAEZR/6IiN6l0CZJDg4OAICnT59qHX/69KnmXGZMTExgZWWl9SIiKozsLU3wZT1nvJ0nCQLQqVZplLYx00tcVDgJxsZwmDYtvWjDmwRIKgUEAQ5Tp0CSoaCRIAiwbN36v3YZqVSwatXqwwRNRGSgCu2apHLlysHBwQEHDx5EzZo1AaSvLzp16hSGDBmi3+CIiPLJ1M88YGlmhJ+P30NCigqmRhL0rO+Cb3wrvfM6RUIqVoffxh//REEU0zfUHdjUFXby/NkH55UyBf88ioGVmRFqlrGBJKshr0yIooiTd17hyM3nMJYKaFOtFCqX0v7CKkqRiL9vvYSRVIBXpRKwNsu8nDWlF2FQHjsG1atXMK1eHWU3b8arX39Byq1bMC7nCtuePWBWo4bOdSVGj0LCqVNIe/kyvXiDVAqoVLD58kuY/fvvKhERZU6vSVJ8fDxu3bql+fnu3buIiIiAra0tnJ2dMXLkSMyaNQsVKlTQlAB3dHTUVMAjIjJ0RlIJxvq6Y0TLCngRn4zicpNs1/jEJqXi8xV/494LpaYM90/hd/DHpSj8PrQxilkY5zkeURQxb+8N/Hj0DtL+7dzZ1hzBX36CamWss70+VaXG0PXnsffKU8gkAkQASw7dQmDz8vjGxx2iKGLhvptYHnZLE7uJTILZn1fDF7XL5DnuokQURUClgiCTIeH8BTwKDITq9WvNebm3N0ovXJDtxrBGjo4ot2snYjZuhPLMGUgtrWDd4TPImzcv6EcgIjJ4ei0BHhYWhuaZ/GXt7++P0NBQiKKIqVOnYvXq1YiJiUHjxo2xfPlyVKxYMcf3YAlwIipqVh65jXl7rmvtUwSkb+g6tEUFjG6V878j37b22F3M2H1Vp1+5iQzhY1tkO+Kz9thdzNx9FZn9w7K+f308j0/GiI0RmV67e1hjVC2dfSKmVCohl6fvIRUfHw8LC4tsr9GH3MapTk7Gi2XL8HrjJqjj4mBUrhzSoqIgpqSkjwS9IZHAtndvlBw3tiDDJyIqknKaG+h1TZKXlxdEUdR5hYaGAkifUz1jxgxER0cjKSkJBw4cyFWCRERUFB289lQnQQLSN3Q9cPWp7olcWB1+J9N+45LSsDPicbbXbz6bebEcqUTAb+cfIfT4vSyLVQSuP48X8YW3ol9BEkURj4aPwMs1a6GOiwMApN69CzEpSTtBAgC1Gq83bYKYmqqHSImIPg6Fdk0SERFlzkgqgQBkOlpjLMv7d18qtYhoRVKm56RSAfdeJGTbR0xCaqZxqdQiFImpeBKTmGmCBwD3Xyag++qT+HNEExhJs34OqVSKtm3bat4XVrmJM+mff6A8ciTHfYuJiVArlVrV7kS1GsoTJ5Bw6jQk5uawatcWxtwG472oYmMRfzQcYloqLDwbwqhkCX2HREQfCJMkIiID076GI47ffqlzXPj3XF5JJQIcrE0zTZRUKhHliptn24dneTvsuvgEqrcyIYkA1C1rC7Uo4kX8C53zb0Q+i8f+q0/RtlqpLO9hamqKP/74I9tY9C03cSacO59ete7tUaMsSIsXhyTDNBF1UhIeDh6ChJMn0ws0iCKe//ADSk6YANtePfMU/8cuZus2RE+fnj7dEQAkEhQfPBjFhw2FkO2eVURk6AptCXAiIsqc3ydl0NitOID05OPNr2u1XYqhR33n9+p7YBNXnWMCAEtTGTrUKp3t9UO8ykMmEbSm1EklAuwtTdCtrhMGNy2fZYIEADKJgIuPYvIQuWGTWlnmOEECgOKDBkGQ/PdP+ItVq5Bw6v/t3Xd8FNXaB/DfzOxuNpuy6SGBFBKSQOg1EKQ3KReVpmDBhqKgYNd79QJ6UV8vdvGKoLGAiiAi0iGC9BIgdEJCQnrv2ZTdnTnvH5ss2WxJAqnwfD+fKDtzZubMTmYzz55znnPc8EIUDftiDNnLl6Py6tWbrpdYXAxdRgaYpUlpb2MVFy4i8803bwRIACBJyPvyS5Tu3Nl6FSOEtBgKkgghpJ1RyHhEPTYQH9/fG+PDvTEu3BsfzOiFdfMi6s2MVx9LvfUYgI6u9nCyq7/zQai3EzbOj8SQYHdwMARIE3t0wKZnh8JFpUBEkDtWzulrNjdUDYkxeDg0TRrz9sRp3DhwdnaGSbJq43kIrq43Xjo4wPOlF+H60IMAAKbXI++rr5D/1SrDJLF1CQJKtmxpdH102dlIfeZZXB08BAmjxyBh9BgUbd7c6P20V0Xr1xta9urieRSsXdfyFSKEtDjqbkcIIe2QXOBxX99OuK9v06XN1osSPo1OsLjucmYpTiQVICLIvd799OykxronB0MvSuA4DkKdTA2Te/ni5PVC/HD0utn4JEOXPzs88s1xxGWXItDdAY8N7Yy7e9yYRFyj0cDLyzA2JCcnp01nt2toPQW1Gr7vv4f0l18xtALxPCCKkHfqhIAffwTAIBYVQREQYDJpbMa//oWSLX9aDpCq6YuKGlVvqaoKyQ8/Al16unG/+uxsZL7+Bng7OzhPnNio/bVHuqxMQ4tcXZIEXUZGy1eIENLiqCWJEEIIACC7tAr5Gq3FdTyHRneDkwm8WYBU49W7wxDR2RBwCRwHDoYWsjkRAXju51gcTshHdkkVTl4vwPy1p/D1gWsm25eXl6O8vP5EEq2tofUs2rgRmUuWGh7MGQOvUsFjwQIEbf0Tcm8vyL29oQwLMwmQqhITUfLHFpsBEkQRMg9PpDz1FK706Yurdw1DzkcfQ7JRp9Ldu6FLSTEPEjgOuV+srPdcbgfKsDDD2K66BAHKbl1bvkKEkBZHLUmEEEIAAM5KGQSOg2jhoVtigHsTdoNTKWT4aV4ETiQVICa5EC4qOcZ088L4jw4AgLEONS1NK3Zdxf0D/KFW2Z6nqT0q3b8fmW++ZbJM0miQ/+23cJowHpwgQN6xo0mABADlJ2Ns75jnIfPyQv6aNYbWKUmCWFmJ/DVrUB4Tg4AffwBnIRCovHgJkMkAvd50BWPQXrsGpteDk93ejw8uD8xGwdp1hol9a8aKcRwgSXB/4onWrRwhpEVQSxIhhNxmjifmY/EvZ3D/qqNYvu0SUgsa1uLipJRjci8fCHXGxXAc4GAnwN9NhZ0XspCQU9Yk9eQ4DhFB7lgwqgsejAhAemEFSir1FstqRQnHkswz+t0O8levMR//IklgFRVImnoPEidPQdyQSGS+9W9UXLmCmjngBSdHm/t1HDsGch8fY4BUe98Vp0+jzErKcZmnh9UkEryTk+UWltuMolNH+Ed9C0XnQOMymbcXOn72KVT9+7dexQghLeb2/iqIEELuMN8cSsI7Wy9B4DmIEkPM9UKsPZaCn58ajD5+LvVuv2xqdyTmluFCRolxH0q5gA7OSsxcddRYbmiwO+aPDIa/mwoB7k0zJsjW3EgAoKhnfXtVlZBQf2a7igoUbdiAog0bIPf3g+/y5XAcMQKcSgVWUWHa5U4QYN+nDzp9+imuhHe33B1PJoPm2DE4jR5ttsp5yj+Q8/Enhu1qb8vzcH3ggTsm/bWqb18Ebd0KXXIymE4HRVCQxZY3Qsjt6fb8i0MIIXegnJJKvLvtMgAY02yLjKFKL+Jfv59v0D5cHRTYsvAufP/4ILw4LhT/N70ngtwdcD3ftDXq8LV8PPzNCYz4735M+/Jwg1urbOnuq4aPWmmW4A0wpCAfElx/0oj2SN6xo3lWOxt0qWlIeeJJ6AsK0PGjDw1d33je0EUOgMzNDb7vLjek7baUoQ0wjnuyWB9vL3T67FNwCoVhQfU+HIcPh8fCBQ0/sdsAx3FQBAbCLiSEAiRC7jDUkkQIIbeJ6Cs5VscTXcwoQWZxBXzU9jb3kZBTim8PX8e5tGL4uigRGeSOi5klNrc5m1aM2auP4a+XRkJhKYd4Awk8hw9n9sajUSchMgZRYhB4DowxfDC91y2nN2+r3Oc+gozXXm/4BoyBiSIKf/4F3q++guC9e1D8xxbos7JgFxYG9ZTJ4B0cDEkWrM1vJIpQT55s9RBOo0cj5OABlO7ZC7GkBKr+/WDfq1cjz+zWSJWVkMrKILi5mcwJRQghLYGCJEIIqaVSJ2LDqTTsvpgFjuNwd/cOmN6/I+xkbf8BXZQYOBjmNbJEL9rIggbDWKaHvzlhDFAuZ5Zg98XsBh03rbACey5lY3IvH7P1SXka/HD0Oq5klqKTqz0eHBxgtetfZBcP7HlxONYeS0ZCThn83VR4cHAAQr2djGV4nseIESOM/26rGlpP56lToU1JRd6qVebJEqwRRVRVTxIr9/aGx1PzTFYzrRYF331n/Zj/+AfsQkJsHkJwdobL9GkNq08jSFotSnfuRPnJk+AdnaD+xxQow8ON68XSUmS/9z6Kt2wB9HrIvLzgsWABXO+fVf++y8tRsmMnqhKvQd6xI9RTpkBwdm7ycyCE3P44xmzlDm3/SkpKoFarUVxcDGf6oCSE2FChFfHA10dxLq3YuIwBGBjoih+fuPWJWptbakE5hn+wzyxI4gAEeTpg74sjrI4nYYxh3McHkJhbZjZ3UUPIeA4LR3fB4rGhJsuPJebjkVqBl8BzkCSG/5veC7MG+jX+QLcxfX4+yk+eBCeTIXPZ2xDz822OVVJ27w6/NashqzXZbA1ddg4SqgM0MxwHu5AQSFVVkPv4wHX2bDiNH9ciY43E4mIkP/yIIcCr6b4mivB84QV4PP0UGGNInvMgKs6eNTv3DkuXwvWB+63uuyoxCcmPPAIxL8/Q9VAUwTs4wH/Natj36dOMZ0UIaU8aGhu03a/gCCF3DE2VHhtiUvHp3njsOJ8JnVjPIPZmsvZYMs6lF4MBxh8AOHm9EBtiUlulTo3h56bCs6OCARjmNQIMXdgEnsOyqT1sPgSnFVYgIefmAiQA0EsMHV1Mu/IxxvDab+egl6QbY6QkBgbgrT8uoKRSd3MHu03J3N3hfPfdcBo7Fv6rv4bM3fYYrMpLl3B9xkzo882z/gmuLuDsrXStZAxVCQnQJSej/MQJpC9ahLzPv2hUXRljKDt4CBn/+hfSX3kVRZs3Q9JanmOrttxPP0PVteo5r0TR2B0w9+OPURl3FeXHT6DizBmLwWHuypWGcVZWpL/8EsTCQsMLvR5gDFJ5OdKeex6soS10hBBSjYIkQkirOptahMj3/8IrG8/h87/i8cy60xjz4d9IL6po8bpsO59pMREYB2Db+awWr8/NeHl8GFbO6YeIzu4IdFdhSi8fbF4wFHeFeNjc7lb6FPAc4KKSm3S104sSvj2UhOT8couBV5VewoGruTd/0NucsmtXdPkrGp2+XAnHUaMsJ3ZgDLqsLOR/863ZKl6hgOuc2dYTQtQEIdX/z/vqK+iyGvY7zhhD5ltvIXXePBRv/gMl27Yh8/U3kPzgQ5A0GpvbFv/xh+VxUoKAkm3bUHH+nNVkE2JuLvR5ltPAVyUmourSZfN9SxL0ubnQHD/eoHMjhJAaFCQRQlqNTpQw74cYlFa3KOirn6bTiyrwwvrYFq+PaKUZhQEQ60vR3EZwHIfJvXzw81ODsf+VUfj0gb7o0VFd73Z+bvYI9nRoTJI1Iy8nJX58PAIqhWGYa6VOxEPfHMc71Zn2rLH2ftdHo9HA09MTnp6e0NTzUN6abrWenFwOp9Gj4fe/L+EwfLjlgEcUUbprl8XtvRYtgvqeqQ3LnCdJyPjnv1Dwww/Q17TGWKE5cADFG38zHr8m0Kq8eBH530bZPkxlpeUVHAdJo4HMzd16F0OZDIKj5XTzYlGxxeXG45bYTj4iVVSgeOs25H8bBc3Ro7jNRyIQQhqAEjcQQlrN4YQ85JRWmS0XJYYTSQVILSiHn5vlNMXNYVy4Ny5mFJu1fHDV69qLC+nFOJyQB3uFgLu7d4CXs7LebTiOwzv39sDcb09AYtVJIDjbLUwPRfgDAMZ390Z33xv9uqMOX8eJpAKbx+M54FxaEbR6CZN7+RgDLFFi+PtqDg5czYOdnMeUnr4I7eCI+OwyONjJ0NnD8JCcl5dX7zm1BU1VT16phNULYiUI4hQK+L7/PjwWPofKy5fARBEZi1+weozyY8dQfvQocj7+BP5fr4Jq4ECL5Qp//sXQ2lM3mJEkFG/ZAs/nFlo9hmrgQJSfOGG+rV4PVcQgOERGIus//wGrrDSb+8l50iTwDpaDJLvQUHBKpWG7ujgO9r17W61TRWwsUp6eD6m42Hheyh494Lf6a4vjvQghdwYKkgi5g+lFCRcySiBKDD07qm8pffPNKNDYHsNQWK5t0SBpbmQgfj+TjuR8jTFQ4jmgi5cj5kQEtFg9bpZelPDir2ex5WwG+Orn6WV/XsLye3vggUH+9W4fGeyBbc8PwzeHknAurQg6keFabpnVQGnt8RTwnOH/3Xyc8MPjEfB0ssNvp9PqHdskMeDbQ9fBALz+2zk8M6oLnhkRjKd+iMHha/mQ8RwYgFV/J8JOxqNKb3io7u7rjP9MsZ2Vrb3TZeeA6XSQd/Q1jiNzGjvGcosRz8P57gk296fo1BGKTh3BGEN+SIhhTJCl1prqZayqCmnPL0LI3/tvzJUEQCwrQ/riF6A5dMjqsay2FFXzWrwI1x962OR44Hkoe/SA0+jR4GQy+K38AqkLFhomyRUEQBSh7NoVHf75htX9Co4O8Hj6KeR++pnpCo6Dy8yZkPv6Wq5vVRVS5z8DqbTUpE6Vly8ja9nb6PTJxzbPhxBy+6LsdoTcof66ko3XfztvbMlxUynw9r3dMaWX5YeJ5nAttwxjPvzb4jp7uYCYN8fCwa5lv8spLtfh28NJ2HEhExwMXdceGxoIJ6W8RetxM1YfSMS72y9bzG63c/FwhHVwsrSZVRfSizHlc+sPxLUJPIe7unjg+8cHYch70cgstvywLHCGAMnSH55wHydcziy1msLcsD0HlaDHheX3AADKysrgYKV1obVpNBo4OjoCaFg9Ky9fRua/l6DyvGHiX8HLEy5Tpxof8lOefhrlR47eaFHiOPAqFZhCAVRVwWHgQHgsXAj7nj2sHqP8zBmkPPY4mE5nfQ6lap2++h+cRo40vk5/6WWU7NhhvTucIEB9773wXf4fm/vN//575Kz4ENBVJ+6Qy+H9xutwmzPHWEYsLUXJzp0Q8/Oh7NETDpFD6p0riTGGwp9+Qv7q1dBnZUNwdYXbIw/Dfd48w4S7FpTs3IX0xYst75Dj4LFwITSHDwMAnCeMh8usWeCtJcQghLQLDY0NKEgi5A50JasEkz87BKk601gNjgM2zh+C/gFuLVaXBT+dxo7zmWYtDy+MDcWise2zxUAvSkgtrICDnQAvp/q7ujWVkf/dh+v55WbLBZ7DY5GBeHNKuIWtbHv+59P482ym8ffE1jxMAHDsjTH4ZO9VbDiVdtNjjurDtJVI+XgGgNsnSNJl5yBx8mRI5eUWgxDnyZPR4e1lKPlzK4q3bEFVQoL5OBueBycICFi31ubEr9rUVBSuXQfNyZOounTJajnfD/4P6qlTAQD6wkLED73LeoDE8+AdHND5t41Q+FtvtaxKTETi1HsMAVqdxw//b7+BQ2Sk1W0bijEGptWCUyjqTWtesHYdspcvt96vtHYXR46Dsns4An78kQIlQtoxSgFOCLHq+yPXAZg/7PIch28OJbVoXT6a1RtPDguCSmGYM8XNQYF/TeqG58d0adF6NJUNMakY8t5fGLViPwYtj8ac1ceQYiFwaSrx2aV4deNZjF6xH6kFVo7DGPLKzMd+NcRHs/rg9Yld4edmD5VCQGdP2wHJptNpGB7qAXs5D4G/iSwQDdBc+21NRet/sRogAUDJ9u3I+/wLuNw/C2ASpLIy80KSBCaKyPnkU5vHUvj5wfuN1xG4bq3VMT7gONj37Wt8qc/JsT1nU6+e6Lxxg80ACQAKf/rZEHTUDUoEAflR39nc1hZ9YSFKdu5E6d69YOXl4O3sGjTvkzI83PbAu9rrGEPlxUso+vXXm64nIaT9oDFJhNyBrmaXWfyWX5QYrmZZePhqRnYyAf+c1A2vTAhDaaUeant5u30I3n4+E69sPGey7HhSAWatOoq/Xh5hTE5QV25pFdYdT8aZlCK4Oyowa4AfBgfZniMHAE6nFGL218egl5jNVhuJAT06qvH31Vz8cSYdGq0eQ4LcMWOAHxzr6c4oE3g8PSIYT48wzL90ObMEEz89aLX8B7viAABBHg5wsZfhdKrtrGM3Q1/rXPWtNKdWY+Wt+Qb5Fy5AcHGB+t574BAZafIQX3Hpss0gBIyh4LvvUHU9CRVnYq2XkySU15PumjGG8hMnUbJ9OxQBAais25rEcVBPuw8KvxuT/cp9fcEpFGBW5kLSpaUj5bHH4TRhAtyffMLqHE/apETL3fxE8cb8SY2Ut3q1YSxS9VxInL09fN55B+opk+vd1r5vH6gGDED56dO23/8ajKFk9x64zZ17U3UlhLQf1JJEyB0o0F1lMRAROCDAo+USJdQmF3i4OSjabYAEAJ9Fx5slGhMlhqySSvwRm2Fxm2u5ZRj38d/4LDreEMTEZuCBr4/hi7/i6z3eO39egk6UbAZIAs/B3VGBhJwyzP32BP44m4HdF7Ox7M9LmPLZQeQ3soWpm48zRoR6or7LlFxQjqT8cgjNcTk5DooOIVB0CMHiX89CaqZufbeK53n079UbPRwdUfC//0Fz8CBKtm9H6hNPIvcj04QAci8vQ5KCemj2Wx7DZ3JcpfUunowxZL/3PlLmzkXRxo2ojIurroBhzJ3g6grP55+Dz7JlJtsJTk5weeABq5n0xLw86DIyUPDDD7g+636racTl/v6Wz1MQYBcYWO+51VWyZw9yP/zIGCABAKuoQMarr6LyypV6t+c4Dp3+9yXU99wDVI9bsjoJ740jNLqehJD2h4IkQu5ADw8JtPhgKTLgscjOrVCj20NcdqnFnjsynsOlDMvztCzbchGlFXrjmKyagOfD3VeRnG99bp3iCh3OpBbZzCLHAbiriweW/CMcv5xMNe6fwfCYl1pQgY/3Xm3AmRmOdywxH5czS7ByTl/M6N8JMhsRkCgxFJbrIDbD8yQvt4PP3I/hM/dj7EsoxoH4tjkprb29PTaPHIFf/QNgDFuqW1HyV682BihMkuA8ZXK9iRQayi40FKKVeYEqYmJQ+MMPN+pSc0xRhNujjyLkyGF4PPOMxUQH3q+8DNc5c4zBhEWiCF1mJgrX/WRxtesDs41JJ+pu5/Zo41tnCn/40fLksxyHwvXrG7QPwckJvu+9i9Bjx9Alei/sQkNszi3lPH58o+tJCGl/KEgi5A7Ux88FH87qbRwHBAB2Mh7v3NsDd4V4tGLN2jcPBzuLyyXG4O1svk5TpcfB+DyIFiIrjgN2XcyyeixbLTkcgOdGd0HskvH4/vFBOJVcBJmFDUTGsMVKC5ckMVzOLMG51CKs2BWHQcv34oGvj2Hipwcx/X9H8OSwIJx5axy+fLCf9Yq0AJ4D9l7ObtU6WMP0epTujbYc/AgCSnbsRO7nX+DqkCFIeaTpum9VxMYi8R9TUX7uHLLefRcJo8cgYfwE5HzyCYo2b7bckiNJKN62zeY4Hk4uR4e33kTIwQMI/OVn2IV3s1xQklC2f5/FVcqwUHT89BPwTjcyLXJKJbzfehOOw4c35jQBANq0NMvd5EQRurT0Ru1LcHSAvGNHw3ZWxinxTk5wmTmz0fUkhLQ/NCaJkDvUtH6dcHePDjh6LR8SAwYHubWLNNdt2cNDAvDxnqumGQNh6PI2rV8ns/IiY1Y77jAGq2m0AcBJKceQIHecSMo3a61hAKb36wS1veF61swxZInOQlPP0Wv5eHXjWaQWVljcJiFHg9lfH8OBV0fBxb51f2ckBnBoo100GbPZOlS2bx+qrl61nTjgJo+rz8tD8kMPm7QW5X+92nqiBsBkIlbGGPRZWQAvQO7tZVJO5uoKmasrOJmNay9Yf7xwHjcOjiNGoCImBkyvh32//hAcby5DoV1IiCGpRN33WRBg1+Xmkr/YdemC8sJC8+CL4+AyfTp4Vet0SSaEtCwKkgi5jVXpRZxKLoQkAf0DXGGvMP0GWaWQYUw371aq3e3nmZHBSMgpw5azGcZU2Uq5gE8f6ANfF/NxDs5KOXp3UuN8erFZtzkGYN3xZMzo3wndfdUWj7d0anfM+OoIyqtEiIxB4DmIEsOiMSEI9Ljx0Dki1BM/n0gx217gOQzs7IpXN57Fgfg8OCgEjOrqhe8PX4fexoO7yBjyNVpsPZeBv67kNOStaVKSrhIZa54FAPg++SX6+bu0eB0aoryiAmMTrwGM4c/OQbCv3S1MFFFVMx6oOdTuSldDkm5MmlqXIMDhrqEAAM3xE8h65x1oExIAAMru4eiwZIlZWnFObj1Iknvb/lzhFYomSfft/vjj0Bysk0iE48AJAlxnP3Bz+3ziccvJLxiDonPgTe2TENL+UJBESDvEGINGK8JOxkMuWO41u+N8Jl7fdB7FFYYJGx3tZFjyj3DMHOBnsTy5dXKBx2ez+2LBqC44kZQPR6UMY7t522yhe2tKOB74+hgkC0GJKDKs2B2HqEcHWdw2rIMTdr8wHD8cTcbp5EJ4Otph1kA/DA/1NCk3Ltwbg4PccDypwNhoIfAcFDIeMdcLUaW/kfzhWm7DUsDLeA7XcjXY1wpBEhggluQY/x0R1HLzejWG5tRpZFRPmNpcQ/1l3t6GlpRGtEbxDg6QKipMW0qqu6eVREcjfdFikwCr8vIVJM99FEFb/jDJeKfLsNxVEwCkKuutoE3JYXAEfD/4ANnvvQexoAAAIO/YET7Ll9ebjtwax+HD4T5vHvJXrzZbl7Xsbdj36gVlNytdDQkhtw0KkghpZ3ZeyMR/d8XhWq4GcoHDfX074l+TwqFW3XgQv5BejAU/nTZpnSir0uOVjefQyVWFIcH1p5cmNy+sgxPCOjjVXxDAgEA3TOrpgz/PZpg9SIsMOHA1D4wxq2NFfNT2eO3urjaPIfAcvntsEL45lIRNp9NQVqXHsBAP5JdpcSA+76YmfRUlBielDFobmRnkPAe9ZL1LYV12Mh4OCgE6iaGsUt+g7Xxd7ODr0ja7P4mllpMnNKXGBkjgedj37w/BRY2SLX+arKq8dAnpi18wn8dIksC0WhSuXQfvN16/sStrXfd4HoKDY2NO45ao/zEFzndPQOWVK+DkctiFhoKzlMyhEbQpyYaEEBbGO2W99z78v/ofdbsj5DZHiRsIaUd2XczC/LWnkZhryHqmExl+O5WOOWuOmTzo/nD0usWHaoHn8O3hlp0sltTPR60EbyUTg0LgGzQpZn2UcgELRnVB9EsjcfyfY7FiZh+cvF54UwESzwGOShnCvG0HgrpGBEiAYexUQbkOpQ0MkADg/em96i/USnSZ1hNvNJnGjmeSJKinTIZYVGyewEEUAZ3O6jxGFefPmyxS3zPVcha4mmx9LYiTy2HfsyeUXbvecoAEAFUJ1ywnhJAkVJw4gfgRI6A5evSWj0MIabsoSCKkHVmxK8441qWGyBguZpSYjA1JzNVYnSw2MbdlJ4u9E+SVGSaDXXMwEZczG996MLmXj8XrJfAcpvbxbYoqWiS/yUmMvJ2V+PHxQdgQk9robZ3qmby2sQYGts1WUabToeDbbxu+QQPmSGoK8s6d4XT33ag8f75xKccFAbIOpuOM3B5+GKoBA4zra85BPX0aHEeNaqoqtwpFYKDNayKVaZD67AKIRUUtVidCSMui7naEtBOVOhHxOZYDHBnP4VRyIcaFGx5igjwdcCa1yOzBW+A5BHu2XDeYO8GvMan456bzECUGjjNkW7u3jy9WzOwNmZXxYnX16uSC+SOC8dXf1yDwnGF8EgM6utjj5fFhYIxh2/lM/HoyFfkaLSI6u+PxuwLRydXQ3afu+oGBbnjirs7wc7PdHWhqb1+sPZZiMQW5QuChFQ3fpAs80N1HjXxNFZyVcjw6NBDn04ux53LjxyPpmmAuIEvpzNuaqqQkiFYmVLVIFCF4ekLMbd45n3RJSchfswYyTw/DA37da2+lixlEEa6zZpkWVSrhH/UtSvdGo+zAAXByOZwnjIdqyJAmaf1sTW4PP4yy6GjrBRgDq6xEyY4dcJ09u8XqxRiDpNGAVyotzmVFCGk6dIcR0k7IBR5KGY9KC+mcJcbg5nBjTNLcyEBsPJVm3uokMTx+F00W21Tis0vx2m/njM+ZNf//IzYD3X3VmDc8qMH7eu3uMAwP9cDmM+kordQjorMbZgzwg6OdDG9tvoAfjyUbr+eljBKsPZaMtU9GYFBnN7z0ayw2nbmRUe9KVik2nErFxvmR6ObjbPF4jDHMGuiHfXE5SC0wpPrmq7PjzR7kh39O6obDCXlIK6zAp3vjcTGzBKLEkMFV4rXfzqOB8Z+ZSv2tpzDQ13qI37BhA7p164Y+ffrAzs7yPFWt4cjp07Cck9C65g6QauR/vRqeL76AnHffM18pSXCaMhmlW7cZXnMcwHHweulFOAwefKOupaUo27cPUnk5VIMGwfnuCc1SVyZJKD92DBXnL0Dm7ganCRMgODVsvN+tcBgcAZ//vIOs5e+CVVhOhQ9BgC6n5RKXFG36HXkrV0KXng7O3h6us2bCc/Fi8PbmmTMJIbeOgiRC2gmB5zBjQCf8dDzFLF00x3G4p09H4+vuvmqsnNMPb/x+HkXlptntBge1ze5J7dGGU2ngOc6sJYYBWHs8uVFBEsdxiAz2QGSw6WS+F9KL8eOxZON+a/6vFSU88PVRhPs440JGicl6UWKo1IpYvu0y1j4ZYXasPZey8c7WS0gpKAcABLip4OYgR16ZFuVaERfSS/Dn2UzcP9AP89eeQrlWNJ5jzamK1qdeamYMEYpUVHoaMvjFx8cjOTkZJ06cwH333Qe9Xg9PT0842JgP6FaUlpZCq9XC1dUVvJWxL7t27cKxuDgMdXVFsEIBAMaZnFitf7cWVlkJwc0N6hnTUbzxN8MgMwaA56Hs2wel27Yby3KODuj08cdwvOsu47KS3buR8eprJvMqqe+7Fz7/+Q+4Juw2KBYXI2XeU6g8d87Q9U0UkbX8Xfit/KJJ0ofXx2XGDDhNnIiEseMgWWoV1Ouh7NoyWe4K1/+KrCVLjK9ZRQUKflyLqmuJ8Fv9dbtvuSOkLeIYa+pZ7NqWkpISqNVqFBcXw9nZ8jeqhLQXpZU6PPzNCcSmFkFW3S2L5zh8dH8fTO1tPnZFq5cQk2xI+9w/wBVKecuMe7hTvLA+Fn/EppsFrQCgkvP49rFBcFHJEebtdNMPMR/vuYrP/4q3eIyG+O6xAajUSziTUgSFwKOTqz1e33QeYDeCKh6ABBjnWappkbq3jy/+PJd5U8kdmosPX4K77a7aLMPzPPr164e7774bQhM9tBcUFGDLli1ITjYErA4ODhg7diz69OljUk6SJCxfvhySJMG5uBij9kZDodWCVV9/jrFWD5IAwH7AAASu/RFV8fEoO3wYvJ0dKq9eRdHPv5iV5ZRKhBw6BMHRAdq0dFybMMF8PBPHwevll+D+xBNNVseM199A8Z9/mh6L4wz1OXgAgmPLdB0u3LABWW/923ShIEDh74+gLX/YnC+qKTC9HvEjRkLMz7e4PvDX9WZzWBFCrGtobEAtSYS0I05KOTY9E4m/43Nx6nohXFRyTO3tCy9npcXyChlv1jJBmk6PjmpsPpNucV2FXsIDXx8DAIR5O+KLOf0QYiUbnKZKj6Q8DdwcFBYnnb0Vj0bFADC0XtSMmarbDbOmUagmGKpZtzk2A0IzjP+pe/zGCBQKITFD44c1kiQhJiYGcrkc48ePv8kj3VBVVYWoqChoNBrjMo1Ggz/++AN2dnboVmvOnIKCAkjV3QFL1Gps/8cUBCYmwaWoCIJeB//UtFuuT1OoOHMGAGAXEgK7kBAwxnClV2+LZVllJQp++B6ezz6L4k2bLO+QMRSs+8kkSCqNjkbhL79Al5EJ+5494fbYY1CGhTaoflJ5OYq3bjUPxhgDq6hA6a5dcJk+vUH7ulUuM2aAabXI+/wLwzgujoPjsGHo8PayZg+QAECXlWU1QALHoeLMGQqSCGkGFCQR0s7wPIdRYV4YFebV2lVpcRVaETsuZCKtsAIhXo4YG+5tdTLdljCjfyf8b38CCjU68y53tV4m5GjwwNfHcODVUXCold1Nkhg++yseq/5ORIXO8DB4VxcPrJjZGx3UhsB3XLg3Po2Ov+W6slp1amiAIvAcOrs7ICnfcrZES7p4OiAhV1N/wZvENyK8OnnyJEaOHAlFdZe3m3Xu3DmUlZknTeE4DgcOHDAJkmR1BtPrFArEdw0DAIzau7dNdLcDAN7eHvrCQhT/vhlVcXHgXVwM6b+t0Bw5As9nn4UuJ9ty2m+YjqnK/WIl8r74wpgIQpuUhOItW+A0bhxUgwZCPWUKBLX1UVtiWRmg11tdX/b3AainTWuRbmYcx8HtwQfhOmsWdOnp4NVqyFxdm/24NQRHR8N7bqnjD2MQWrAuhNxJKEgipB0TJYa/ruTg76s5UAgCJvfqgP4Bbq1drWZxIb0Yj3x7AgUaLWTVk5T6udrjp3mD683iVpdOlFCuFeGslN3SQ5baXo6N8yPx5uYLOJSQBwAQOMMksLWJjCFfo8WfZzPwwCB/4/KvDybik72mAdDRxHzMWXMMuxcPh0zg0aOjGtP6+mLTmYybrudNYwwjwzxQcEaL4nKt2XnVxQHo4uVUb5B0K5330kVnBEoZWL16NQBg3rx5VoMgvV6P0tJSuLvf2ji87Oxs8DxvbCGqwRhDTvXAfZ1Ohz179uBMdQsNAGi1Wqz5+mvItVp82X8AXAsK20SABJ6H48iRSJw4EWJxiSGQqYfgZOiSouzaDcWihdYknoddmCEY1GVmIm/lSsPymves+v+lu3ahdPdu5H78Cfy/WQP73pZbr2Tu7pB5ekJvJZlF6e7dyFv5JTwXLqi37k2Fk8sNqcFbmODiAsfRo1C2/2/zrof29nAaM6bF60TInYDmSSKknarUiXjkm+OY90MMfjmRih+OXsf0/x3F0i0XcbsNNRQlhqd+jEFRuRYAoK9u1cgorsSiX87Y2tREuVaPpVsuoufSXei9bDci3/8L60+m1LtdhVZE9OVs7LyQaaxDjUAPB6x9MgKx/x6HA6+MshpIyAQO13LLkF1SiZ9PpODHo8n4cl+CxXNNzNVgf5zh4XDL2QwcTjDvalPzsN2cX6SLDHhgkD92LhqG+SOD0dnDdjAq8Bx81Eq4OzRfF6RkyRXZogNyc3ORW082OEEQ4NgE41acnJys3lM1+9+wYQNiYmKgr9X6oSorQ05eHtJLSuCTlgahCdKfNwW70FBUxccbAiTGDA/e9dTN9eGHULTpd5Tu2WNIolD3F0+S4PHMfABA2YGDtie5ZQxSeTnSnl8EZuW4nCDAY+FCm3XKX7WqWecpYjodCr7/Hon/mIqrdw1D2gsvoPLKlWY7ni0+S5dCERBgeCGTGQIkhQKdPvsMfDMlKSHkTkctSYS0U1GHr+NIouHhWV+rK9R3R65jVFcvjAj1bK2qNbnjifnIKKo0Wy5KDKdTinA9T4NAD8ODAmMMR6/lY9fFLEgMGN3NCyNCPMFxwNM/nMLha3nGJAiZxYZ01lqR4eHBARaPve1cJl797Sw0VYaHObnA4aXxYZg/ItiknItKAbW9HO4OCuRrtGb7EUWG5PxyDHk3GvUlhhN4DhczinEsKR9rDiZZLBPi7YjHhnbGn2czcOTajSAqzNsJcdml9RyhYcaHe+F0ShHAgLlDAvHKhK7YEJOK1347ZzGRhF5i+P1MOooqrHfbulUMHA5q609jz3Ec+vbt2yRpwfv06YMDBw5YDJQGDhyI7OxsxMebd4nsefac8d882kY3O5dZsyC4qJH/9epGbZc67ylDIGWh25fM0xNeL790o0WjIScqSdBnZ6P8ZAwcBptnYAQA1/tnoSoxEYXff29xPdPpUB4bC6eRIxtxJg3DGEP6Sy8bgkLDApTu3oOy6L8Q8MP3sK+TsKO5yTw9EfTHZpT+tQ+Vly5B5ukJ58mTWrTbHyF3GgqSCGmnfjuVZvHLWoHn8MeZ9NsqSLIUdJiur0KghwMkieHljWex6XS6ccLRH48lY2w3bzw1vDMOVneJq+uTPVcxe6AfZAIPxhh+OZmKNQcTkVJQDl2dpiGdyPD+jisIdHfA3T06mKzjOA6P39UZK3bFmXQp4znATiZg96XsBp2vKDGsO56CnNIqi+s5AL07uWDWAD/MHuSP+OxSXM8vR6C7CoEeDhj+wT7klFRZnCS2MXZfysHuS4buZALH4eUJYXhmZDD0EsMbm85b3KY5A6QaDckP161bN6tJGxhjyMjIQHFxMby8vODhYTu5iVqtxsyZM7Fp0yboao3b6dWrFyIjIxEbG2u2jbyqCr4ZrdBF0gpe7QzP556HIjAQqU8+2fgd1LT41P6d4nmop06Fz3/eMZnY1HHkSOuT0tbdbUmxzfXqyZOsBkkAwKsa19W2oSpOnULp7t2mC0URTBSR9tLL6LJjO7hbHOvWWDWT9TpPuPVkJISQ+lGQREg7VVpl+WFUkhjKqqwPeG6PenWyPsDbTsYbs8Ztv5CJTacN2eZqt65FX86GQsaBr87uVle+RouMokr4u6vw0Z6r+PyvBJsZ2HgOiDqcZBYkAcD8EcHILqnE2mPJxmN5OyvR2V2FI4kF9Z4rzxkCXVuBIYNhjqazaUVY9+RghHg7mWTOW/tkBOb9EIPEOmODbiWrnMgY/m/nFXTzccKMfh1x8GoudlzIuqXxRTdLX0+Q5O3tjZkzZ1pcV1RUhPXr1yMrK8u4LDQ0FNOnT7eZ4KFr16546aWXEBcXh6qqKgQGBsKzeq4mS136Ol+71iZajgDA5aEH4fXSSxDs7ZE4bVrT7ViSoDl61CRAAgC5lxe8XnoJOf/9r+1gieetjkmqoezRA/KOHaHLzDTdD89D5u4OVb9+jaqy5tgxFP+xBWJpCVT9B8BlxnSLk9OWHTpknJupLn16OlKfew5+X31F8xMRchujIImQdmpYiAd+P5NhMevY7TZhbIC7A+7p44stZzPMWs+eHNYZzkrDGJhNp9OtBkIXM0qszjXEcYYkDPllVfjf/msAbAcTEgOS88strhN4Dm/f0wPPjuyC2NRCqO0VGNTZDdP/d6S+0wQAuDsoUFiua1A2uWu5Gvxr83l8/fAAk+XBno6IfnEEvj6QiB+PJSOtsAL2cgFhHRxxLrW43u5+1ggc8Fl0POb9EGPWwtaS7lJch+VOiAbZ2dk4cuQIKioqEBsbi6qqKvj7+8PDwwMxMTEQ6zz4xsfHY+vWrZhWTwBhZ2eHXhZSLXfu3Blyudyklelqt27IcnYG4m3P6dQSitauQ9nuPXC6ewKqLl1u0n3rc3JwuU9fqAYMgNei52HfsycAwP2Jx6EM74bC9etRcSYW+mzzVlSX2Q9A7u1tc/8cz8N3xX+R8vgTYFVVxu5+nEIB3w9XmAVotuR8+BHyV682BD+ShLLov1Dwww8I/OVns3rU10qk+fsAKmJioBo4sMHHJ4S0LxQkEdJOPTuyC7afz0KVXjI+UAs8h44u9pg5oFMr167pfTCjFzo4K/HjsWSUa0W42Mvx1IggzB9+Y2xQWaXOYiDEAMh4Dg52Asq1okmgJfAcxnTzglolx55L2SYtUNYIPIewDpbnPKrRQa3E3Wof4+tendSITS2yWJYDMCDQFc+O6oL+/q7otax2N5+6SaNv1E+UgD2XslFUroVUWYbDhw8jISEBSqUSjn5d8f4hjXGAfYVOxLm0mw+QAEMih9Mpls/BXO16M9hDh06CoWtVuqhGOaw9hFpLkm04bzVXAT++pN6j76kZS1Lt2rVruHbtmuUjMoYLFy5gwoQJcGjkIHjGGL744guTAAkAwHHQWniAr7l61tofav/2NWUbhT4nB4U//NiobSSOQ5mTEwRRhIPGSsZCxoDKSpQfOoTrhw+j02efwmncOACAw5AhcBgyBIwxFP70E/JXr4E+KwuCuzvcHp0L98cfb1A9VH37osue3Sj6bRO0169DEeAP9X3TIPdu+DQIlZcuGQIkwKR1SJ+Tg5yPPkLH//s/k/LOEyYg77PPre9QEKA5epSCJEJuYxQktRCNRoMrV65Ap9MhODjY2E2DkJsV5OmIzQuG4sPdcdgflwu5wOMfvX3x4rhQOCmbf4LDlmYnE/DGpG54aXwYSip1cLGXQ1ZnjqShXTwRk1xoFigJPIfhoZ4Y09UbT/5wElU6CUJ1GvHOHg5Yfq/h228HhdCguogSw1PDgxpV/0cjA7HueIrFFiIGYNGYUNwV4oG9tcYtOaAKXnwZkiR31AQPAhjukifBk9cgVu+DJNEdP2/YhJzrccbtSkpKkJOTgwkKR+zUdjUul+oEh6LEwBlmUKoe52MajNlDh4l2cXDiqlDGFLio74Aroifqf3w3DXS6y7IxQJZ2I2SSA7F6X5zV+9aznxs4MAyUpSFYyAf0hnFCTYkxhpKSkkYHSevXr0dJieWgrfvly/CtDpSM2Qir/5/ZoQM6ZGWBAyDyPMocHaHQamFfWWkMZBnHgWcMRS4uuN45EFqFAh65efDIy0Oehwdkoh4d0jOgl8lwsUcPlKqd4Z2djW4XLtpMXWs7DDWsS/H3Q2zfvqisHvPjWlCAgcdPwMVKNjm9ICDLxweJn32GQV26wLPzjeQaNfMMuT34IJhWC8jlje6mJvPwgMfTTzVqm9pKduy03H1OFFG6YyfY+++b1MkuOBjuzz6L/C+/tLg/xhguxiegaPNmhIeHIyQkhLreEXKbuWOCJI1GA0EwfwASBAFKpdKknDU8z8Pe3r7RZc+cOYNNmzZBkiRwHAfGGHr37o2JEyeC53lwHAdVrcGn5eXlVtPN1i1bUVFhNndHbbX/4DembGVlpVmXlJstq1KpjH88qqqqTFLk3kpZe3t78NXze2i1WvNvcm+yrFKpNP6uNKasTqeDVmt9HImdnZ1xosnGlNXr9aiqsjyAv6Mjjy8e6A159azvNWU1Gsvvm0KhMJYVRRGVleYZ42rI5XLjGI3GlJUkCRUVFU1SViaTGbOTMcZQXm7o4mbPAVWVelTVKfvwkAD8dCIZuaVV0FcZ6ivwHFRKGR7s5w0fF3tEPz8YOy/loLgK6N5RjTFdvVBVWQGNRo/uXnZwVYgo1NxokeJ4HpzsRquHk0zEGxO7oo+PvdlngK3PCG8Vh1X3h2PBT2dQoZMAjgMvN5zbo5GB6Otr2F/0+WRAVwmJMYy0uwxnVKIHb4d8wR0ySOjEF4PTV4CJQAQXj958ElKvmo7SqXl/fYQyBEnpSNDf6H4p44G7fbRwqMyCXqfDaV1HJItqABwkXZXJwHwNAMZVQM/rYce0GGKXAk99GQ7qOoPpdWBmnyc3HrN5heFz1YcvQV8kQa8z/UzrgevI1fNIk1zAye3AcRw4MCj1GpRLgllyhmAhHyFCGmSQg1co8MILL0Cv10OSJKv3kkwmM973NWWtUSgUcHFxAdDw+14URVy8eNHqfj1y87ArKBhC9WeajjHoGIPEcSiWyZAdHAyeSbjcvTt0CgUEQYBnQSEGHzkChUaDApUK2T4dcL5PH3DVx7jasSMAQJDJIAgCOEmCnjGIOh3A88hwViPg/AXwta6jnOMgr66DnjFoq9dJ1UGYXhBwqUd35Hh6Yvy+/Sjy9sKxyEhIkgR99XubrVJh17C7MHrXbsglCXKtFnKOg4LjkO7riyMRg1BV/V4fWbMGPXv2xOTJk43vv1wuh1wuR0ZuLrKzs6FUKuHv728xsGiKz4i6yjQaaBkztl8yxlBR8x5ptdizaxdiz51DZWUlOnXqhBEjRiD4+edQEROD8pMnUV7nbxyTJBzhOZTHxCAmJgYDBgzAPffcA47jmuU5AjB/NkhLS8OxY8eQk5MDNzc3DBs2DKGhoRbL1kbPETfQc4RB7WeDxpRtyLMBz/O4fPkyUlNTIZfL0aNHDzg7O1ss21LPEbbuOxPsNldcXGz4mtTKz6RJk0zKq1Qqq2VHjBhhUtbDw8Nq2QEDBjDGGMvKymJLly5larXaatnw8HCT/YaHh1stGxAQYFJ2wIABVst6eHiYlB0xYoTVsiqVyqTspEmTbL5vtc2YMcNm2bKyMmPZuXPn2iybk5NjLPvss8/aLJuUlGQs+/LLL9sse+HCBWPZJUuW2Cx74sQJY9kPPvjAZtl9+/YZy37xxRc2y27dutVYNioqymbZX3/91Vj2119/tVk2KirKWHbr1q02y37xxRfGsvv27bNZ9oMPPjCWPXHihM2yS5YsMZa9cOGCzbIvv/yysWxSUpLNss8++6yxbE5Ojs2yc+fOZYwxllFUzp7/4ajNsjNmzDD5HbZV1j54AAv/9w62MSaVnUouaLLPCM/O4eytzefZ8cR8JkkSCwgIsF7W05MtXbrU+OPp6Wm1rFqtNpZbsmQp8/LtZLWsSqViU/+1igW89icLeG0rs/PrYbWsXC437jPgtT+ZfZD1zx4ALOC1rSzgta1s7pufsm42PtMAML8XNhrLu/cYbrPsK6+8Yjy/gQMH2iy7aNEiY9nIyEibZd99991Gf0YcPXqUjRs3zmbZ7/z82KWwruxSWFf2ppe3zbJz5sxhS5cuZcveeou91iXEZtmZM2caz23mzJk2yz44Zgz7c9JkdqFrN/a/jtZ/HwCwWcOGsc8WLmTL/v3vej+vF3bsxL6cP58tXbKEzZs3z2bZJ598kq1atYotXbq03s/25vqMuNfZ2XgtYkJCbZYNDw9nCQkJTJuZya6OHGWzbEhICFu6dCm7evUqY6zpnyNqNOQz4siRI4wxeo6oQc8RBq31HPHOO++wzz77jC1dupQ9/fTTNsu2xnNEcXExs4Umk21mZ86cMX7zQAhpfj5qe7w7rWeT7S/Y0xEHXhmF6f07oZ9/081JEuCuwtv39MCgzm7N1k2H4wAezGYZf74IjRn9wnGAD1f/mKAR8mvoyBfDgatq8N45MKj45k8hbklaWhouXLjQ4PK5ubnYtWtXveWkmxhZxAQBV7qHN3o7a8ocHXFq4AAcixxSz28DUObkhAJ3d7AG/N262jUMOd7eDZrROD4+HpmZmQ2scfOQeXdo1OzL69evh+TqiqA/t9RbluM4XLx4sVH1qe8b+5sRHR1t81t1QlrSlStXUFhYCAA2WyDbKo6xW5xIo40rKSmBWq1GRkaGxea95u5ut3HjRly6dMniB6FSqcSLL75I3e1usiw1kxs0ZzN5W+1ud6tlG3Pft0SXXMD0vv9oTxx+PXgJU5U3MpHVTk9t63enbtnkCiX260MgShJ6yTLRU5Zl8pyol6lwUtcJiZJ7dXc7wPAfDnfJE9FZVmS23wJRiS3lXSBJNWOZDPX25ksxRp4AgQdkcgV4DsiT7OEslqBuWkKJAUmiG47oAsHJ7cBzgAJ6/EN2FnbM+vnJ5XLo9XpERUWBMYaHHnrI+DtdV2O629WUXbhwIZycnGze94wxfPrpp9Dr9Tb3q6+qwqbVq6HUavGdfwAEjoMoSYgLC8PFXuaBvCAIxs8TURRtfq7ebNm7oqPhnJUNUSbDzsmToKt576p/KWqXlSTJ5mcwz/PGzylrZWu6mNsqq1Ao0KdPH0RERCAhIcGYYj0oKAiMMWRnZ+PEiRNITExEVVUVvLy8MHjwYAQEBKC4uBipqakQBAGhoaEWu9Ub3wdJgubXDSjatAn64mLw/fvjWs8eOHT9utnfXI7jIJfLMWzYMIwePdp4L3/66adm9zXHcVAoFAgPD8eMGTMafN8fPXoUW7dutVhuxowZ6Nq1q8XPiMzMTERFRZltU3N/zpw5E4GBgfQc0YCybek5QqPRoKioCA4ODlY/09rTc0RlZSU+/fRTq58nkyZNQp9akzK35HNESUkJfH19UVxcbDE2MG5rdc1txsHBoUEDchszaLchZX18fHDp0iWz+Tc4jkNgYKDFfagaMTle7Q/Qpixb+6GwKcva2dkZf1mbsqxCobA5x0lLlK3pc9/UZWUymfGDrinLCoLQ4N/3xpTleb5ZynIc1yxlgaa/72+mbO37/q17+2F8rwBs26wBX5pl1hbR0N9JAJh493gEFAs4d/IousqKoOBMt5UzPe6SX4ebWIErnBcqmBxuXDl6yzLhJysHLGShcxMqca9DAs7pOiBDcoack9BFyEN3WTZkdfbvwVdA4uSGtBC1ToQxIF/nDp5TggNDJ74Ig+RpcOJh8Zi1serJYAHTP5a2NPS+WLVqFebOnYu8vDyUlJSgvLwcFy9eREVFBRwdHTF69Gjs3LnT+Me+vv0mVCd1uB4YAJmdEikB/ijw8KjnDE2Dlfo0puzR4cPhUlSEKjslOEdHm/Xgeb7Bv2u3WjY2NtY4KS/HcTh06BB8fX3h4+ODU6dOmZRNS0vDhg0b0KVLFyQkJBiXb9++HRMmTEBERITVYyufeBzuT9zIqpd54ADk6elWy1+6dAmjR4823ss9evRAbGysWQDCGENwsCHTZkPv+7Nnz1p8zziOw7Vr19C3b1+T5TWfEY6Ojjbf67pBUH3oOcKgtZ4jNBoNtm7diitXrhjLR0ZGYvjw4TZ7GbT15whRFE0+l2rf9zXnZW3b5n6OsBWQ13bHBEmtpW/fvsb5Omp/qDLGMGzYsFasGSGkLYsIckffhY9h27ZtOH/+vNVvha2RyWSYPHky+vTpA1EU8X8Xt0KnM/8GmOMM8x/14LLRU27IrMdY/b2SXPhKDLe7Xm89GDNMkGvpuHcpkjGYpYADIHBto1ODTqfDmjVrLK4rKirCpk2bbmq/pwcMaFRw22gNuWgARLkc+R4ejep2drNqWpEaq2abzMxMYzBsaX3tAKlm+c6dO+Hr6ws/P78GHat79+7Yt2+f1fV1H6aGDRuGy5cvo6qqylgPjuPg7e2Nnj0b183X2jfwjDGb3+R7e3tDrVajpKTE7P2VyWQICmpc5k3SehhjWLduncnk1lqtFvv37wfP8+36OdHJyQlqtRrFxcVm6xhj8Pf3b4VaNQ4FSc1MpVLhsccMDzrXr18HALi5uWH8+PEIDAxs1boRQto2hUKB++67DxMmTEBpaSlUKhVOnjyJEydOoKqqCnK5HF27dgVjDLm5uVCr1fD390eHDh3g7+9v/JZREAT0798fx44ds3qs2s/MTfn8XN++ZG0kOGr3GnPRWihV9a325r+Z7Xmex+nTpxscJLm7u6Nr167Gb/Fr4zgOYWFhJstcXV3x1FNP4eDBg4iPj4dMJkPPnj0xdOjQBn/7XiM4OBixsbFm3ddqeppYw3Ecpk6dip9++gmMMUiSBJ7nIUkSpkyZ0uCWE9L6kpKSrI7VO3z4MIYMGdLo36u2guM4jB49Gr///rvZ8uDgYHTq1Pbnc2yf73w74+Hhgblz50Kj0UCv18PZ2ZnmUyCENJhKpTJ2nxk9ejRGjBiB8vJy2NvbN/gP6JgxY1BUVGTyMMhxHHier7frwc22CBDS0r87kiShtLS0UdtMmzYNX331FQoKCozLarrlDB061Ky8q6srpk6dest1HTp0KC5evAitVmvSKqVWq9G/f3+b2wYFBWH+/Pk4ceIEcnJy4OrqigEDBqBjdYp40j5kZ2dbvUeqqqpQWloKV9emSxjU0nr16gWZTIb9+/cjNzcXdnZ26N+/P0aOHNkunoMpSGpBjZ2kkBBCLBEEAU5OTo3aRiaT4f7770dOTg7S0tLg4OCALl26ICkpCT///DMYYxYHr/M8j+DgYMTHx4MxRgHTba5m/qem4ObmBpVKhbS0NACGltGePXuajTFqShzHwcfHp1HbyOVyPPXUUzh69CguXLgAURQRFhaGoUOHNvo+aww3Nzc8+eST2LdvH+Lj48HzPLp3745Ro0Y1aIyOh4cHJk2a1Gz1I83P2dnZ6ucpz/ONGlvWVoWHhyM8PNw4V2h7CI5qUJBECCF3EC8vL3h5eRlfd+nSBc8++yxiYmIQHx+PgoIC4x9tR0dHTJ8+HQEBAdBqtdBqtUhJScGGDRtaq/rEgs6dO6OwsBBFRUU3vQ9BEIytjSdPnrT44Obn54devXphx44dDUrnO3ToUPTr1w+FhYUoLy+Hl5cX5HI5/Pz88Mcff9xSsM3zvHH72q0wCoUCAwcObPT+7OzsMHLkSIwcOfKm63QzPDw8MHPmzBY9Jmk7wsLCoFKpzMatcxyHXr163VZdJ9vjdDgUJBFCyB3O3d0dEyZMwIQJE1BRUYG0tDQoFAr4+fkZ/7DVZGgKDw/H7NmzsX//fot96ZuyJcKW9vINa3PWUy6XY9q0aejatSuKiorwzTffoKysrMHb16TRliQJnTt3hr29PbRaLXJycnD9+nVjqyHHcRg0aBDGjRsHQRAQHh6O2NhY5OXlwdXVFc7Ozti5c6cxEQHHcYiMjDRmZ3N1dTXpMtS7d2+EhIRg27ZtuHr1KvR6PXieh4uLC4qKiiBJEpydnTFixAjo9Xr89ddfxkQGcrkc3bp1w8iRI1FQUICdO3ciLy8PANCxY0dMnjzZZkpfQtoSmUyGBx98ED/99JNJ6viAgADcfffdrVgzArSTeZJWrlyJ//73v8jKykLv3r3x+eefY9CgQQ3atmaepPpyoRNCCGkcxhi0Wq3xgTkgIADdu3eHVqs1zl0DAH///TfS0tIgiiLs7OyM25HGsbOzg1KphL29Pbp164ZBgwaZdMtijOH8+fM4deoUCgsLoVQqERoaiuHDhyMjIwNHjhxBYWEh3N3d0a9fP4SEhFjs+sIYQ3JyMtLS0mBvb4/w8PB6Uz/rdDokJiZCp9MhICCgwd3URFE0JiVRKBTGuV9qz3Wj0+mQk5MDhUIBDw8PkzozxlBSUgJBEODo6NigYxLS1oiiiISEBJSWlsLHx4fGljWzhsYGbT5IWr9+PR555BF89dVXiIiIwCeffIINGzYgLi7OpMuINRQkEUJI2yKKIpKSklBRUQGFQoFDhw4hNzcXHMdBp9O1SEtUW8TzPIKCghAZGQmVSoWEhAQoFAp069aNAgBCCGkit02QFBERgYEDB+KLL74AYMhc4+fnh+eeew6vv/56vdtTkEQIIe1fYWEhYmNjceLECavzy7QXLi4uGDlyJEJCQtpNt0FCCLldNDQ2aNNjkrRaLU6dOoU33njDuIzneYwdOxZHjx61uE1VVZXJJGwl1bOdE0IIab9cXV0xatQojBo1ChUVFZg4cSJ0Oh2mTp3aZoMmnU6HDRs2wMPDA3v37q23yxohhJC2o00HSXl5eRBFEd7e3ibLvb29LU78BgDvvfceli1b1hLVI4QQ0gokScLff/8NANi9e7dxegVJkvDOO++0ZtWgVquxaNEicBwHjUaD5cuX4+rVqw3KBkcIIaTtaNNB0s1444038OKLLxpfl5SUNHjmbUIIIe0Xz/NYsmSJ8XVUVBRSUlKa/bh9+/ZtkslFCSGEtB1tOkjy8PCAIAjIzs42WZ6dnY0OHTpY3MbOzu62yitPCCHk5jz22GPGfzd1D4NRo0Zh+PDhTbpPQgghbUebDpIUCgX69++P6Oho3HvvvQAM3Smio6OxcOHC1q0cIYSQdqN2C5Ner8fy5ctvaR+EEEJub206SAKAF198EXPnzsWAAQMwaNAgfPLJJ9BoNCbfEBJCCCENJZPJLAY8jDG8/fbbFAwRQghp+0HS/fffj9zcXPz73/9GVlYW+vTpg507d5olcyCEEEJuBcdxFCARQggB0A6CJABYuHAhda8jhBBi1F7mF2ov9SSEEGKqXQRJhBBCSA0HBwdoNJrWrka92ks9CSGEmONbuwKEEEIIIYQQ0pZQkEQIIYQQQgghtVCQRAghpF2prKzE5MmTMXnyZFRWVrZ2daxqL/UkhBBijsYkEUIIaVdEUcT27duN/26r2ks9CSGEmKOWJEIIIYQQQgiphYIkQgghhBBCCKmFgiRCCCGEEEIIqYWCJEIIIYQQQgiphYIkQgghhBBCCKnlts9uxxgDAJSUlLRyTQghhDQFjUZj/HdJSUmbzRzXXupJCCF3kpqYoCZGsIZj9ZVo59LS0uDn59fa1SCEEEIIIYS0EampqejUqZPV9bd9kCRJEjIyMuDk5ASO41q7Ou1WSUkJ/Pz8kJqaCmdn59auDrGArlHbR9eobaPr0/bRNWr76Bq1fXf6NWKMobS0FL6+vuB56yOPbvvudjzP24wSSeM4OzvfkTdUe0LXqO2ja9S20fVp++gatX10jdq+O/kaqdXqestQ4gZCCCGEEEIIqYWCJEIIIYQQQgiphYIk0iB2dnZYsmQJ7OzsWrsqxAq6Rm0fXaO2ja5P20fXqO2ja9T20TVqmNs+cQMhhBBCCCGENAa1JBFCCCGEEEJILRQkEUIIIYQQQkgtFCQRQgghhBBCSC0UJBFCCCGEEEJILRQkEYv2798PjuMs/pw8edLqdiNHjjQrP3/+/Bas+Z0jMDDQ7L1+//33bW5TWVmJBQsWwN3dHY6Ojpg+fTqys7NbqMZ3luvXr+OJJ55A586dYW9vj+DgYCxZsgRardbmdnQPNa+VK1ciMDAQSqUSEREROHHihM3yGzZsQNeuXaFUKtGzZ09s3769hWp653nvvfcwcOBAODk5wcvLC/feey/i4uJsbvPdd9+Z3S9KpbKFanznWbp0qdn73bVrV5vb0D3Usiw9G3AchwULFlgsT/eQdbLWrgBpmyIjI5GZmWmy7K233kJ0dDQGDBhgc9t58+bh7bffNr5WqVTNUkcCvP3225g3b57xtZOTk83yL7zwArZt24YNGzZArVZj4cKFmDZtGg4fPtzcVb3jXLlyBZIkYdWqVejSpQsuXLiAefPmQaPRYMWKFTa3pXuoeaxfvx4vvvgivvrqK0REROCTTz7BhAkTEBcXBy8vL7PyR44cwezZs/Hee+9hypQp+Omnn3Dvvffi9OnT6NGjRyucwe3t77//xoIFCzBw4EDo9Xr885//xPjx43Hp0iU4ODhY3c7Z2dkkmOI4riWqe8fq3r079u7da3wtk1l/lKR7qOWdPHkSoigaX1+4cAHjxo3DzJkzrW5D95AVjJAG0Gq1zNPTk7399ts2y40YMYItWrSoZSp1hwsICGAff/xxg8sXFRUxuVzONmzYYFx2+fJlBoAdPXq0GWpI6vrggw9Y586dbZahe6j5DBo0iC1YsMD4WhRF5uvry9577z2L5WfNmsUmT55ssiwiIoI9/fTTzVpPYpCTk8MAsL///ttqmaioKKZWq1uuUne4JUuWsN69eze4PN1DrW/RokUsODiYSZJkcT3dQ9ZRdzvSIFu2bEF+fj4ee+yxesuuW7cOHh4e6NGjB9544w2Ul5e3QA3vTO+//z7c3d3Rt29f/Pe//4Ver7da9tSpU9DpdBg7dqxxWdeuXeHv74+jR4+2RHXveMXFxXBzc6u3HN1DTU+r1eLUqVMmv/88z2Ps2LFWf/+PHj1qUh4AJkyYQPdLCykuLgaAeu+ZsrIyBAQEwM/PD/fccw8uXrzYEtW7Y8XHx8PX1xdBQUF48MEHkZKSYrUs3UOtS6vVYu3atXj88cdttg7RPWQZdbcjDfLNN99gwoQJ6NSpk81yc+bMQUBAAHx9fXHu3Dm89tpriIuLw6ZNm1qopneO559/Hv369YObmxuOHDmCN954A5mZmfjoo48sls/KyoJCoYCLi4vJcm9vb2RlZbVAje9sCQkJ+Pzzz+vtakf3UPPIy8uDKIrw9vY2We7t7Y0rV65Y3CYrK8tiebpfmp8kSVi8eDGGDh1qs1tWWFgYvv32W/Tq1QvFxcVYsWIFIiMjcfHixXr/XpHGi4iIwHfffYewsDBkZmZi2bJlGDZsGC5cuGCxuzfdQ61r8+bNKCoqwqOPPmq1DN1DNrR2UxZpWa+99hoDYPPn8uXLJtukpqYynufZxo0bG3286OhoBoAlJCQ01Snc1m7m+tT45ptvmEwmY5WVlRbXr1u3jikUCrPlAwcOZK+++mqTnsft7GauUVpaGgsODmZPPPFEo49H91DTSE9PZwDYkSNHTJa/8sorbNCgQRa3kcvl7KeffjJZtnLlSubl5dVs9SQG8+fPZwEBASw1NbVR22m1WhYcHMzefPPNZqoZqa2wsJA5OzuzNWvWWFxP91DrGj9+PJsyZUqjtqF76AZqSbrDvPTSSza/UQCAoKAgk9dRUVFwd3fH1KlTG328iIgIAIZv0YODgxu9/Z3mZq5PjYiICOj1ely/fh1hYWFm6zt06ACtVouioiKT1qTs7Gx06NDhVqp9R2nsNcrIyMCoUaMQGRmJr7/+utHHo3uoaXh4eEAQBLNsjrZ+/zt06NCo8qRpLFy4EFu3bsWBAwca/U22XC5H3759kZCQ0Ey1I7W5uLggNDTU6vtN91DrSU5Oxt69exvdC4HuoRsoSLrDeHp6wtPTs8HlGWOIiorCI488Arlc3ujjxcbGAgB8fHwave2dqLHXp7bY2FjwPG8xSxcA9O/fH3K5HNHR0Zg+fToAIC4uDikpKRgyZMhN1/lO05hrlJ6ejlGjRqF///6IiooCzzd+GCjdQ01DoVCgf//+iI6Oxr333gvA0KUrOjoaCxcutLjNkCFDEB0djcWLFxuX7dmzh+6XZsIYw3PPPYfff/8d+/fvR+fOnRu9D1EUcf78eUyaNKkZakjqKisrw7Vr1/Dwww9bXE/3UOuJioqCl5cXJk+e3Kjt6B6qpbWbskjbtnfvXqtdvNLS0lhYWBg7fvw4Y4yxhIQE9vbbb7OYmBiWlJTE/vjjDxYUFMSGDx/e0tW+7R05coR9/PHHLDY2ll27do2tXbuWeXp6skceecRYpu71YczQhcXf35/99ddfLCYmhg0ZMoQNGTKkNU7htpeWlsa6dOnCxowZw9LS0lhmZqbxp3YZuodazi+//MLs7OzYd999xy5dusSeeuop5uLiwrKyshhjjD388MPs9ddfN5Y/fPgwk8lkbMWKFezy5ctsyZIlTC6Xs/Pnz7fWKdzWnnnmGaZWq9n+/ftN7pfy8nJjmbrXaNmyZWzXrl3s2rVr7NSpU+yBBx5gSqWSXbx4sTVO4bb30ksvsf3797OkpCR2+PBhNnbsWObh4cFycnIYY3QPtRWiKDJ/f3/22muvma2je6jhKEgiNs2ePZtFRkZaXJeUlMQAsH379jHGGEtJSWHDhw9nbm5uzM7OjnXp0oW98sorrLi4uAVrfGc4deoUi4iIYGq1mimVStatWzf27rvvmoxHqnt9GGOsoqKCPfvss8zV1ZWpVCp23333mTy0k6YTFRVldcxSDbqHWt7nn3/O/P39mUKhYIMGDWLHjh0zrhsxYgSbO3euSflff/2VhYaGMoVCwbp37862bdvWwjW+c1i7X6Kiooxl6l6jxYsXG6+nt7c3mzRpEjt9+nTLV/4Ocf/99zMfHx+mUChYx44d2f33328yXpLuobZh165dDACLi4szW0f3UMNxjDHW4s1XhBBCCCGEENJG0TxJhBBCCCGEEFILBUmEEEIIIYQQUgsFSYQQQgghhBBSCwVJhBBCCCGEEFILBUmEEEIIIYQQUgsFSYQQQgghhBBSCwVJhBBCCCGEEFILBUmEEELanJEjR2Lx4sWtXQ1CCCF3KAqSCCGE3Pa+++47cBxn9rNmzRpjGa1Wiw8++AC9e/eGSqWCh4cHhg4diqioKOh0ulasPSGEkJYma+0KEEIIIS3B2dkZcXFxJsvUajUAQ4A0YcIEnD17Fu+88w6GDh0KZ2dnHDt2DCtWrEDfvn3Rp0+fVqg1IYSQ1kAtSYQQQtq0wsJCPPLII3B1dYVKpcLEiRMRHx9vUmb16tXw8/ODSqXCfffdh48++gguLi4mZTiOQ4cOHUx+7O3tAQCffPIJDhw4gOjoaCxYsAB9+vRBUFAQ5syZg+PHjyMkJAQAsHHjRvTs2RP29vZwd3fH2LFjodFoWuR9IIQQ0nIoSCKEENKmPfroo4iJicGWLVtw9OhRMMYwadIkYxe4w4cPY/78+Vi0aBFiY2Mxbtw4LF++vFHHWLduHcaOHYu+ffuarZPL5XBwcEBmZiZmz56Nxx9/HJcvX8b+/fsxbdo0MMaa5DwJIYS0HdTdjhBCSJsVHx+PLVu24PDhw4iMjARgCGj8/PywefNmzJw5E59//jkmTpyIl19+GQAQGhqKI0eOYOvWrSb7Ki4uhqOjo/G1o6MjsrKyjMcZOXKkzbpkZmZCr9dj2rRpCAgIAAD07NmzqU6VEEJIG0JBEiGEkDbr8uXLkMlkiIiIMC5zd3dHWFgYLl++DACIi4vDfffdZ7LdoEGDzIIkJycnnD592via5290pmhIa1Dv3r0xZswY9OzZExMmTMD48eMxY8YMuLq63tS5EUIIabuoux0hhJA7As/z6NKli/EnKCjIuC40NBRXrlyxub0gCNizZw927NiB8PBwfP755wgLC0NSUlJzV50QQkgLoyCJEEJIm9WtWzfo9XocP37cuCw/Px9xcXEIDw8HAISFheHkyZMm29V9XZ85c+Zg7969OHPmjNk6nU5nTM7AcRyGDh2KZcuW4cyZM1AoFPj9998be1qEEELaOAqSCCGEtFkhISG45557MG/ePBw6dAhnz57FQw89hI4dO+Kee+4BADz33HPYvn07PvroI8THx2PVqlXYsWMHOI5r8HEWL16MoUOHYsyYMVi5ciXOnj2LxMRE/Prrrxg8eDDi4+Nx/PhxvPvuu4iJiUFKSgo2bdqE3NxcdOvWrblOnxBCSCuhIIkQQkibFhUVhf79+2PKlCkYMmQIGGPYvn075HI5AGDo0KH46quv8NFHH6F3797YuXMnXnjhBSiVygYfw87ODnv27MGrr76KVatWYfDgwRg4cCA+++wzPP/88+jRowecnZ1x4MABTJo0CaGhoXjzzTfx4YcfYuLEic116oQQQloJxyh3KSGEkNvMvHnzcOXKFRw8eLC1q0IIIaQdoux2hBBC2r0VK1Zg3LhxcHBwwI4dO/D999/jyy+/bO1qEUIIaaeoJYkQQki7N2vWLOzfvx+lpaUICgrCc889h/nz57d2tQghhLRTFCQRQgghhBBCSC2UuIEQQgghhBBCaqEgiRBCCCGEEEJqoSCJEEIIIYQQQmqhIIkQQgghhBBCaqEgiRBCCCGEEEJqoSCJEEIIIYQQQmqhIIkQQgghhBBCaqEgiRBCCCGEEEJqoSCJEEIIIYQQQmr5f9feZbX3sC/LAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dc.plot_volcano_df(\n", " stat_result.results_df,\n", " x=\"log2FoldChange\",\n", " y=\"padj\",\n", " sign_thr=0.01,\n", " top=20,\n", " figsize=(10, 5),\n", ")" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running ulm on mat with 1 samples and 14714 targets for 660 sources.\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "collectri = dc.get_collectri(organism=\"human\", split_complexes=False)\n", "mat = stat_result.results_df[[\"stat\"]].T.rename(index={\"stat\": \"disease.vs.control\"})\n", "tf_acts, tf_pvals = dc.run_ulm(mat=mat, net=collectri, verbose=True)\n", "dc.plot_barplot(acts=tf_acts, contrast=\"disease.vs.control\", top=10, vertical=False, figsize=(5, 3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also evaluate known pathways." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "progeny = dc.get_progeny(top=500)\n", "pathway_acts, pathway_pvals = dc.run_mlm(mat=mat, net=progeny, min_n=5)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dc.plot_barplot(\n", " acts=pathway_acts,\n", " contrast=\"disease.vs.control\",\n", " top=40,\n", " vertical=False,\n", " figsize=(5, 3),\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Please refer to the `PyDESeq2` and the `decoupler` documentation for additional analyses." ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.6" } }, "nbformat": 4, "nbformat_minor": 2 }