{ "cells": [ { "cell_type": "markdown", "id": "9c203afd", "metadata": {}, "source": [ ".. note::\n", " To download the tutorial data, use the following commands:\n", "\n", " **All tutorial data:**\n", " ```python\n", " from recon.data import fetch_all_tutorial_data\n", " fetch_all_tutorial_data(data_dir='./data')\n", " ```\n", "\n", " **Specific file (e.g., RNA data):**\n", " ```python\n", " from recon.data import fetch_tutorial_data\n", " fetch_tutorial_data('perturbation_tuto/rna.h5ad', data_dir='./data')\n", " ```" ] }, { "cell_type": "markdown", "id": "6814f4a0", "metadata": {}, "source": [ "# Understanding Multicellular Programs with ReCoN\n", "\n", "This tutorial demonstrates how to use ReCoN to explore **multicellular coordination** around a pathway of interest. You will learn how to:\n", "\n", "1. Build a multilayer network integrating GRNs and cell-cell communication\n", "2. Define seed genes (e.g., from a pathway or differential expression)\n", "3. Run Random Walk with Restart (RWR) to identify upstream regulators\n", "4. Interpret the results as cell-type-specific gene profiles\n", "\n", "**Use case**: Given a pathway activated in one cell type (e.g., TNF-α signaling in macrophages), identify which signals from neighboring cells may have triggered this activation." ] }, { "cell_type": "markdown", "id": "1e923b97", "metadata": {}, "source": [ "---\n", "\n", "## Setup\n", "\n", "ReCoN uses single-cell RNA-seq data to infer cell-cell communication and gene regulatory networks.\n", "\n", "```{tip}\n", "The example data for this tutorial can be downloaded from the [ReCoN repository](https://github.com/cantinilab/ReCoN/tree/main/data/perturbation_tuto).\n", "```\n", "\n", "```{note}\n", "**Required packages**\n", "\n", "This tutorial requires `gseapy` for gene set enrichment and `liana` for cell-cell communication:\n", "- Install with: `pip install gseapy liana`\n", "- **Important**: `gseapy` requires `lxml` to download gene sets from MSigDB. Install it with: `pip install lxml`\n", "```" ] }, { "cell_type": "code", "execution_count": 5, "id": "a4c8d838", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import scanpy as sc\n", "import pandas as pd\n", "import liana as li\n", "import gseapy as gp\n", "from gseapy import Msigdb\n", "\n", "import recon\n", "import recon.data\n", "import recon.explore" ] }, { "cell_type": "code", "execution_count": 6, "id": "4a010708", "metadata": {}, "outputs": [], "source": [ "# Load example scRNA-seq data\n", "rna = sc.read_h5ad(\"./data/perturbation_tuto/rna.h5ad\")" ] }, { "cell_type": "code", "execution_count": 7, "id": "1b06d52b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['B_cell',\n", " 'ILC',\n", " 'Macrophage',\n", " 'MigDC',\n", " 'Monocyte',\n", " 'NK_cell',\n", " 'Neutrophil',\n", " 'T_cell_CD4',\n", " 'T_cell_CD8',\n", " 'T_cell_gd',\n", " 'Treg',\n", " 'cDC1',\n", " 'cDC2',\n", " 'eTAC',\n", " 'pDC']" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check available cell types\n", "rna.obs[\"celltype\"].unique().tolist()" ] }, { "cell_type": "markdown", "id": "4bb18a92", "metadata": {}, "source": [ "---\n", "\n", "## Build the Multilayer Network\n", "\n", "ReCoN integrates three main components:\n", "1. **Gene Regulatory Networks (GRNs)** - TF → target gene relationships\n", "2. **Cell-Cell Communication (CCC)** - Ligand-receptor interactions between cell types\n", "3. **Receptor-Gene Links** - How receptors connect to intracellular signaling\n", "\n", "### 1. Import Gene Regulatory Network" ] }, { "cell_type": "markdown", "id": "7dfa4b0c", "metadata": {}, "source": [ "You can either generate GRNs directly with ReCoN or import a previously generated one.\n", "\n", "```{tip}\n", "If you wish to generate GRNs directly with ReCoN, please follow [Tutorial 4: GRN Inference with HuMMuS](4.recon_hummus.ipynb).\n", "```\n", "\n", "```{warning}\n", "GRN inference requires a **Python 3.10** conda environment due to CellOracle dependencies. See the [Installation guide](../recon_explained/get_ready.rst) for details.\n", "```" ] }, { "cell_type": "code", "execution_count": 8, "id": "535370ad", "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", "
Unnamed: 0targetsourceweight
00Pax5Mbd1_TF0.000095
22Pax5Smad5_TF0.000092
11Pax5Smad1_TF0.000092
\n", "
" ], "text/plain": [ " Unnamed: 0 target source weight\n", "0 0 Pax5 Mbd1_TF 0.000095\n", "2 2 Pax5 Smad5_TF 0.000092\n", "1 1 Pax5 Smad1_TF 0.000092" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Load pre-computed GRN (or generate with ReCoN - see Tutorial 4)\n", "grn_path = \"./data/perturbation_tuto/grn.csv\"\n", "grn = pd.read_csv(grn_path)\n", "grn = grn.sort_values(by=\"weight\", ascending=False)[:500_000]\n", "grn[\"source\"] = grn[\"source\"].str.capitalize()\n", "grn[\"source\"] = grn[\"source\"] + '_TF'\n", "grn[\"target\"] = grn[\"target\"].str.capitalize()\n", "grn.head(3)" ] }, { "cell_type": "markdown", "id": "48defe91", "metadata": {}, "source": [ "### 2. Compute Cell-Cell Communication\n", "\n", "The cell-cell communication is inferred through LIANA+, an external package dedicated to this task.\n", "\n", "```{tip}\n", "For more information, check the [LIANA+ documentation](https://liana-py.readthedocs.io/en/latest/).\n", "```" ] }, { "cell_type": "code", "execution_count": 9, "id": "7a1a521d", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using resource `mouseconsensus`.\n", "Using `.X`!\n", "/pasteur/appa/homes/rtrimbou/miniconda3/envs/snakemake/envs/recon-grn/lib/python3.10/site-packages/anndata/_core/anndata.py:430: FutureWarning: The dtype argument is deprecated and will be removed in late 2024.\n", "15364 features of mat are empty, they will be removed.\n", "Make sure that normalized counts are passed!\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/pasteur/appa/homes/rtrimbou/miniconda3/envs/snakemake/envs/recon-grn/lib/python3.10/site-packages/liana/method/_pipe_utils/_pre.py:146: ImplicitModificationWarning: Trying to modify attribute `.obs` of view, initializing view as actual.\n", "/pasteur/appa/homes/rtrimbou/miniconda3/envs/snakemake/envs/recon-grn/lib/python3.10/site-packages/liana/method/_pipe_utils/_pre.py:149: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.\n", "0.36 of entities in the resource are missing from the data.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Generating ligand-receptor stats for 1296 samples and 937 features\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:04<00:00, 228.37it/s]\n" ] } ], "source": [ "li.method.cellphonedb(rna, \n", " # NOTE by default the resource uses HUMAN gene symbols\n", " resource_name=\"mouseconsensus\",\n", " expr_prop=0.00,\n", " use_raw=False,\n", " groupby=\"celltype\",\n", " verbose=True, key_added='cpdb_res')\n" ] }, { "cell_type": "markdown", "id": "93b07016", "metadata": {}, "source": [ "Format the LIANA output for ReCoN (rename columns to standard format):" ] }, { "cell_type": "code", "execution_count": 10, "id": "7368cd92", "metadata": {}, "outputs": [], "source": [ "ccc_network = rna.uns[\"cpdb_res\"].copy()\n", "ccc_network = ccc_network[[\"ligand\", \"receptor\", \"lr_means\", \"source\", \"target\"]]\n", "ccc_network = ccc_network.rename(columns={\n", " \"lr_means\": \"weight\",\n", " \"source\": \"celltype_source\",\n", " \"target\": \"celltype_target\",\n", " \"ligand\": \"source\",\n", " \"receptor\": \"target\"\n", "})\n", "ccc_network = ccc_network[ccc_network['weight'] != 0]" ] }, { "cell_type": "markdown", "id": "36d22d33", "metadata": {}, "source": [ "### 3. Load Receptor-Gene Links\n", "\n", "These links connect membrane receptors to downstream target genes in the GRN." ] }, { "cell_type": "code", "execution_count": null, "id": "19ceb31a", "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", "
sourcetargetweight
2A1bgAbca10.005156
3A1bgAbcb1a0.005877
4A1bgAbcb1b0.005877
7A1bgAcsl10.005915
8A1bgAdk0.005092
\n", "
" ], "text/plain": [ " source target weight\n", "2 A1bg Abca1 0.005156\n", "3 A1bg Abcb1a 0.005877\n", "4 A1bg Abcb1b 0.005877\n", "7 A1bg Acsl1 0.005915\n", "8 A1bg Adk 0.005092" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Load receptor-gene links from NicheNet prior knowledge\n", "receptor_genes = recon.data.load_data.load_receptor_genes(\"mouse_receptor_gene_from_NichenetPKN\")\n", "# for human, use \"human_receptor_gene_from_NichenetPKN\"\n", "\n", "# Filter to genes present in our GRN\n", "genes = np.unique(grn['source'].tolist() + grn['target'].tolist())\n", "receptor_genes = receptor_genes[receptor_genes['target'].isin(genes)]\n", "receptor_genes.head()" ] }, { "cell_type": "markdown", "id": "6d58e256", "metadata": {}, "source": [ "---\n", "\n", "## Define Seed Genes\n", "\n", "Seeds are the genes of interest that define your biological question. ReCoN will explore the network to find regulators (upstream) or targets (downstream) of these seeds.\n", "\n", "**Example**: We use the TNF-α signaling via NF-κB hallmark gene set, hypothetically activated in macrophages." ] }, { "cell_type": "code", "execution_count": 15, "id": "85e9a2c7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Available hallmarks: ['HALLMARK_ADIPOGENESIS', 'HALLMARK_ALLOGRAFT_REJECTION', 'HALLMARK_ANDROGEN_RESPONSE', 'HALLMARK_ANGIOGENESIS', 'HALLMARK_APICAL_JUNCTION']...\n", "\n", "Filtered seeds: 157 genes from hallmark\n" ] } ], "source": [ "import gseapy as gp\n", "from gseapy import Msigdb \n", "\n", "# we can use gseapy to download the hallmarks from MSigDB\n", "msig = Msigdb()\n", "hallmarks = msig.get_gmt(category='mh.all', dbver=\"2024.1.Mm\")\n", "print(f\"Available hallmarks: {list(hallmarks.keys())[:5]}...\")\n", "\n", "# Select TNF-α signaling pathway and filter to genes in our network\n", "gene_seeds = [gene for gene in hallmarks['HALLMARK_TNFA_SIGNALING_VIA_NFKB'] if gene in genes]\n", "print(f\"\\nFiltered seeds: {len(gene_seeds)} genes from hallmark\")\n", "\n", "# Create seed dictionary with equal weights (all genes equally important)\n", "gene_seeds = {seed: 1 for seed in gene_seeds}" ] }, { "cell_type": "markdown", "id": "28f8e003", "metadata": {}, "source": [ "Now we need to assign seeds to a specific **cell type**. Since we're investigating TNF-α signaling activated in macrophages, we add the `::Macrophage` suffix to each gene:" ] }, { "cell_type": "code", "execution_count": 16, "id": "50d9f62e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Example seeds: {'Abca1::Macrophage': 1, 'Atf3::Macrophage': 1, 'Atp2b1::Macrophage': 1}\n" ] } ], "source": [ "# Format seeds for ReCoN: gene::celltype\n", "# This tells ReCoN that these genes are activated specifically in Macrophages\n", "seeds = {f\"{gene}::Macrophage\": score for gene, score in gene_seeds.items() if score > 0}\n", "\n", "print(f\"Example seeds: {dict(list(seeds.items())[:3])}\")" ] }, { "cell_type": "markdown", "id": "c3aab47c", "metadata": {}, "source": [ "```{warning}\n", "**Node naming conventions in ReCoN**\n", "\n", "Molecules are named differently depending on the layer:\n", "- **Intracellular layers** (GRN): `gene::celltype` with double colons (e.g., `Nfkb1::Macrophage`)\n", "- **Extracellular layer** (CCC): `ligand-celltype` with hyphen (e.g., `Tnf-Macrophage`)\n", "\n", "These suffixes are added automatically when building the network - do NOT add them manually to your input DataFrames.\n", "```" ] }, { "cell_type": "markdown", "id": "77006963", "metadata": {}, "source": [ "```{note}\n", "**Using custom gene sets**\n", "\n", "You can use your own gene sets as seeds, for example from differential expression analysis:\n", "- Filter genes to keep only those present in your network\n", "- Assign different weights to genes (e.g., based on logFC or confidence)\n", "- ⚠️ **All gene weights must be positive!**\n", "```" ] }, { "cell_type": "markdown", "id": "2791a5d6", "metadata": {}, "source": [ "---\n", "\n", "## Assemble the Multicellular Network\n", "\n", "Now we build the `Multicell` object that integrates GRNs, receptor-gene links, and cell-cell communication across all cell types." ] }, { "cell_type": "markdown", "id": "d5e46c4a", "metadata": {}, "source": [ "```{tip}\n", "**Key parameters to customize**\n", "\n", "- `restart_proba`: Controls exploration depth (higher = stay closer to seeds)\n", "- `ccc_proba`: Balance between intracellular (GRN) and intercellular (CCC) exploration\n", "- `grn_graph_directed/weighted`: How GRN edges are interpreted\n", "- `cell_communication_graph_directed/weighted`: How CCC edges are interpreted\n", "```" ] }, { "cell_type": "code", "execution_count": 17, "id": "ae814397", "metadata": {}, "outputs": [], "source": [ "# Network parameters\n", "cell_communication_graph_directed = False\n", "cell_communication_graph_weighted = True\n", "grn_graph_directed = False\n", "grn_graph_weighted = True\n", "\n", "# RWR parameters\n", "restart_proba = 0.6 # Higher = stay closer to seeds\n", "ccc_proba = 0.5 # Balance GRN vs CCC exploration" ] }, { "cell_type": "code", "execution_count": 18, "id": "bb80d94b", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/pasteur/helix/projects/ml4ig_hot/Users/rtrimbou/ReCoN/src/recon/explore/recon.py:122: UserWarning: \n", " No receptor_graph provided,\n", " an empty receptor graph will be created.\n", " \n", "/pasteur/helix/projects/ml4ig_hot/Users/rtrimbou/ReCoN/src/recon/explore/recon.py:387: UserWarning: The celltypes dictionary was converted toa list of Celltype objects.\n", "The keys of the dictionary will be the celltype names.\n" ] } ], "source": [ "# Define cell types to include\n", "celltypes = [\"B_cell\", \"pDC\", \"Macrophage\", \"NK_cell\", \"T_cell_CD4\", \"T_cell_CD8\"]\n", "\n", "# Build the Multicell network\n", "generic_multicell = recon.explore.Multicell(\n", " celltypes={\n", " celltype: recon.explore.Celltype(\n", " grn_graph=grn,\n", " receptor_grn_bipartite=receptor_genes,\n", " celltype_name=celltype,\n", " receptor_graph_directed=False,\n", " receptor_graph_weighted=False,\n", " grn_graph_directed=grn_graph_directed,\n", " grn_graph_weighted=grn_graph_weighted,\n", " receptor_grn_bipartite_graph_directed=False,\n", " receptor_grn_bipartite_graph_weighted=True,\n", " seeds=seeds\n", " )\n", " for celltype in celltypes\n", " },\n", " cell_communication_graph=ccc_network[\n", " ccc_network[\"celltype_source\"].isin(celltypes) & \n", " ccc_network[\"celltype_target\"].isin(celltypes)\n", " ],\n", " cell_communication_graph_directed=cell_communication_graph_directed,\n", " cell_communication_graph_weighted=cell_communication_graph_weighted,\n", " bipartite_grn_cell_communication_directed=False,\n", " bipartite_grn_cell_communication_weighted=False,\n", " bipartite_cell_communication_receptor_directed=False,\n", " bipartite_cell_communication_receptor_weighted=False,\n", " seeds=seeds,\n", ")" ] }, { "cell_type": "markdown", "id": "ccfa888e", "metadata": {}, "source": [ "---\n", "\n", "## Configure Exploration Direction\n", "\n", "ReCoN allows you to explore the network in different directions:\n", "- **upstream**: Find regulators that may have activated your seed genes\n", "- **downstream**: Find targets that may be affected by your seed genes\n", "\n", "And with different strategies:\n", "- **intracell**: Explore only within the GRN (no cell-cell communication)\n", "- **intercell**: Explore both GRN and cell-cell communication" ] }, { "cell_type": "code", "execution_count": 19, "id": "d84654ca", "metadata": {}, "outputs": [], "source": [ "# Set lambda transition matrix for upstream intercellular exploration\n", "generic_multicell.lamb = recon.explore.set_lambda(\n", " generic_multicell,\n", " direction=\"upstream\", # Look for upstream regulators\n", " strategy=\"intercell\", # Include cell-cell communication\n", ")" ] }, { "cell_type": "markdown", "id": "51f8cac8", "metadata": {}, "source": [ "```{tip}\n", "Alternatively, you can modify lambda transition probabilities freely, to modulate GRN and CCC exploration\n", "```" ] }, { "cell_type": "code", "execution_count": 20, "id": "6d1864d7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
cell_communicationB_cell_receptorB_cell_grnpDC_receptorpDC_grnMacrophage_receptorMacrophage_grnNK_cell_receptorNK_cell_grnT_cell_CD4_receptorT_cell_CD4_grnT_cell_CD8_receptorT_cell_CD8_grn
cell_communication0.1428570.00.1428570.00.1428570.00.1428570.00.1428570.00.1428570.00.142857
B_cell_receptor0.5000000.50.0000000.00.0000000.00.0000000.00.0000000.00.0000000.00.000000
B_cell_grn0.0000000.50.5000000.00.0000000.00.0000000.00.0000000.00.0000000.00.000000
pDC_receptor0.5000000.00.0000000.50.0000000.00.0000000.00.0000000.00.0000000.00.000000
pDC_grn0.0000000.00.0000000.50.5000000.00.0000000.00.0000000.00.0000000.00.000000
Macrophage_receptor0.5000000.00.0000000.00.0000000.50.0000000.00.0000000.00.0000000.00.000000
Macrophage_grn0.0000000.00.0000000.00.0000000.50.5000000.00.0000000.00.0000000.00.000000
NK_cell_receptor0.5000000.00.0000000.00.0000000.00.0000000.50.0000000.00.0000000.00.000000
NK_cell_grn0.0000000.00.0000000.00.0000000.00.0000000.50.5000000.00.0000000.00.000000
T_cell_CD4_receptor0.5000000.00.0000000.00.0000000.00.0000000.00.0000000.50.0000000.00.000000
T_cell_CD4_grn0.0000000.00.0000000.00.0000000.00.0000000.00.0000000.50.5000000.00.000000
T_cell_CD8_receptor0.5000000.00.0000000.00.0000000.00.0000000.00.0000000.00.0000000.50.000000
T_cell_CD8_grn0.0000000.00.0000000.00.0000000.00.0000000.00.0000000.00.0000000.50.500000
\n", "
" ], "text/plain": [ " cell_communication B_cell_receptor B_cell_grn \\\n", "cell_communication 0.142857 0.0 0.142857 \n", "B_cell_receptor 0.500000 0.5 0.000000 \n", "B_cell_grn 0.000000 0.5 0.500000 \n", "pDC_receptor 0.500000 0.0 0.000000 \n", "pDC_grn 0.000000 0.0 0.000000 \n", "Macrophage_receptor 0.500000 0.0 0.000000 \n", "Macrophage_grn 0.000000 0.0 0.000000 \n", "NK_cell_receptor 0.500000 0.0 0.000000 \n", "NK_cell_grn 0.000000 0.0 0.000000 \n", "T_cell_CD4_receptor 0.500000 0.0 0.000000 \n", "T_cell_CD4_grn 0.000000 0.0 0.000000 \n", "T_cell_CD8_receptor 0.500000 0.0 0.000000 \n", "T_cell_CD8_grn 0.000000 0.0 0.000000 \n", "\n", " pDC_receptor pDC_grn Macrophage_receptor \\\n", "cell_communication 0.0 0.142857 0.0 \n", "B_cell_receptor 0.0 0.000000 0.0 \n", "B_cell_grn 0.0 0.000000 0.0 \n", "pDC_receptor 0.5 0.000000 0.0 \n", "pDC_grn 0.5 0.500000 0.0 \n", "Macrophage_receptor 0.0 0.000000 0.5 \n", "Macrophage_grn 0.0 0.000000 0.5 \n", "NK_cell_receptor 0.0 0.000000 0.0 \n", "NK_cell_grn 0.0 0.000000 0.0 \n", "T_cell_CD4_receptor 0.0 0.000000 0.0 \n", "T_cell_CD4_grn 0.0 0.000000 0.0 \n", "T_cell_CD8_receptor 0.0 0.000000 0.0 \n", "T_cell_CD8_grn 0.0 0.000000 0.0 \n", "\n", " Macrophage_grn NK_cell_receptor NK_cell_grn \\\n", "cell_communication 0.142857 0.0 0.142857 \n", "B_cell_receptor 0.000000 0.0 0.000000 \n", "B_cell_grn 0.000000 0.0 0.000000 \n", "pDC_receptor 0.000000 0.0 0.000000 \n", "pDC_grn 0.000000 0.0 0.000000 \n", "Macrophage_receptor 0.000000 0.0 0.000000 \n", "Macrophage_grn 0.500000 0.0 0.000000 \n", "NK_cell_receptor 0.000000 0.5 0.000000 \n", "NK_cell_grn 0.000000 0.5 0.500000 \n", "T_cell_CD4_receptor 0.000000 0.0 0.000000 \n", "T_cell_CD4_grn 0.000000 0.0 0.000000 \n", "T_cell_CD8_receptor 0.000000 0.0 0.000000 \n", "T_cell_CD8_grn 0.000000 0.0 0.000000 \n", "\n", " T_cell_CD4_receptor T_cell_CD4_grn T_cell_CD8_receptor \\\n", "cell_communication 0.0 0.142857 0.0 \n", "B_cell_receptor 0.0 0.000000 0.0 \n", "B_cell_grn 0.0 0.000000 0.0 \n", "pDC_receptor 0.0 0.000000 0.0 \n", "pDC_grn 0.0 0.000000 0.0 \n", "Macrophage_receptor 0.0 0.000000 0.0 \n", "Macrophage_grn 0.0 0.000000 0.0 \n", "NK_cell_receptor 0.0 0.000000 0.0 \n", "NK_cell_grn 0.0 0.000000 0.0 \n", "T_cell_CD4_receptor 0.5 0.000000 0.0 \n", "T_cell_CD4_grn 0.5 0.500000 0.0 \n", "T_cell_CD8_receptor 0.0 0.000000 0.5 \n", "T_cell_CD8_grn 0.0 0.000000 0.5 \n", "\n", " T_cell_CD8_grn \n", "cell_communication 0.142857 \n", "B_cell_receptor 0.000000 \n", "B_cell_grn 0.000000 \n", "pDC_receptor 0.000000 \n", "pDC_grn 0.000000 \n", "Macrophage_receptor 0.000000 \n", "Macrophage_grn 0.000000 \n", "NK_cell_receptor 0.000000 \n", "NK_cell_grn 0.000000 \n", "T_cell_CD4_receptor 0.000000 \n", "T_cell_CD4_grn 0.000000 \n", "T_cell_CD8_receptor 0.000000 \n", "T_cell_CD8_grn 0.500000 " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# layers = generic_multicell.lamb.index\n", "# is_grn = layers.str.endswith(\"_grn\")\n", "# generic_multicell.lamb.loc[is_grn, is_grn] = generic_multicell.lamb.loc[is_grn, is_grn]\n", "# generic_multicell.lamb.loc[is_grn, \"cell_communication\"] = generic_multicell.lamb.loc[is_grn, \"cell_communication\"]*1\n", "generic_multicell.lamb" ] }, { "cell_type": "markdown", "id": "b299e3e4", "metadata": {}, "source": [ "---\n", "\n", "## Run Random Walk with Restart\n", "\n", "```{note}\n", "The RWR algorithm explores the multilayer network starting from seed genes, propagating scores to identify the most relevant upstream regulators or downstream targets.\n", "```" ] }, { "cell_type": "code", "execution_count": 21, "id": "8c9f0bb3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Seeds are provided as a dictionary with weights per seed.\n", "Creating a multixrank object with seeds as a dictionary.\n", "cell_communication\n", "receptor\n", "gene\n", "receptor\n", "gene\n", "receptor\n", "gene\n", "receptor\n", "gene\n", "receptor\n", "gene\n", "receptor\n", "gene\n", "Identifying produced ligands in response to the perturbation.\n" ] } ], "source": [ "# Run multicellular exploration\n", "results = generic_multicell.explore(\n", " restart_proba=restart_proba\n", ")\n" ] }, { "cell_type": "code", "execution_count": 22, "id": "575705cc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
multiplexnodelayerscore
0cell_communicationAbca1-B_cellcell_communication9.980243e-07
1cell_communicationAbca1-Macrophagecell_communication1.452575e-05
2cell_communicationAbca1-NK_cellcell_communication8.732993e-07
3cell_communicationAbca1-T_cell_CD4cell_communication6.532287e-07
4cell_communicationAbca1-T_cell_CD8cell_communication8.411035e-07
...............
10523T_cell_CD8_grnZxdc::T_cell_CD8gene5.749365e-11
10524T_cell_CD8_grnZyg11b::T_cell_CD8gene5.351816e-11
10525T_cell_CD8_grnZyx::T_cell_CD8gene1.311222e-10
10526T_cell_CD8_grnZzef1::T_cell_CD8gene4.733255e-10
10527T_cell_CD8_grnZzz3::T_cell_CD8gene2.425203e-10
\n", "

69791 rows × 4 columns

\n", "
" ], "text/plain": [ " multiplex node layer \\\n", "0 cell_communication Abca1-B_cell cell_communication \n", "1 cell_communication Abca1-Macrophage cell_communication \n", "2 cell_communication Abca1-NK_cell cell_communication \n", "3 cell_communication Abca1-T_cell_CD4 cell_communication \n", "4 cell_communication Abca1-T_cell_CD8 cell_communication \n", "... ... ... ... \n", "10523 T_cell_CD8_grn Zxdc::T_cell_CD8 gene \n", "10524 T_cell_CD8_grn Zyg11b::T_cell_CD8 gene \n", "10525 T_cell_CD8_grn Zyx::T_cell_CD8 gene \n", "10526 T_cell_CD8_grn Zzef1::T_cell_CD8 gene \n", "10527 T_cell_CD8_grn Zzz3::T_cell_CD8 gene \n", "\n", " score \n", "0 9.980243e-07 \n", "1 1.452575e-05 \n", "2 8.732993e-07 \n", "3 6.532287e-07 \n", "4 8.411035e-07 \n", "... ... \n", "10523 5.749365e-11 \n", "10524 5.351816e-11 \n", "10525 1.311222e-10 \n", "10526 4.733255e-10 \n", "10527 2.425203e-10 \n", "\n", "[69791 rows x 4 columns]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results" ] }, { "cell_type": "code", "execution_count": 23, "id": "60e2a2d6", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/pasteur/helix/projects/ml4ig_hot/Users/rtrimbou/ReCoN/src/recon/explore/recon.py:588: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", "/pasteur/helix/projects/ml4ig_hot/Users/rtrimbou/ReCoN/src/recon/explore/recon.py:588: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
celltypeB_cellMacrophageNK_cellT_cell_CD4T_cell_CD8pDC
gene
A3galt23.732416e-126.487802e-082.199377e-111.066063e-111.136353e-121.582009e-12
A4galt2.506706e-114.022829e-072.572855e-111.230480e-111.225733e-111.894137e-11
Aa4671971.810938e-117.258679e-077.255790e-115.224209e-114.171843e-113.586100e-11
Aaas4.564902e-112.528730e-068.919788e-117.891676e-115.634262e-111.073224e-10
Aacs1.611731e-106.068169e-063.717980e-102.366377e-101.864389e-102.695307e-10
\n", "
" ], "text/plain": [ "celltype B_cell Macrophage NK_cell T_cell_CD4 \\\n", "gene \n", "A3galt2 3.732416e-12 6.487802e-08 2.199377e-11 1.066063e-11 \n", "A4galt 2.506706e-11 4.022829e-07 2.572855e-11 1.230480e-11 \n", "Aa467197 1.810938e-11 7.258679e-07 7.255790e-11 5.224209e-11 \n", "Aaas 4.564902e-11 2.528730e-06 8.919788e-11 7.891676e-11 \n", "Aacs 1.611731e-10 6.068169e-06 3.717980e-10 2.366377e-10 \n", "\n", "celltype T_cell_CD8 pDC \n", "gene \n", "A3galt2 1.136353e-12 1.582009e-12 \n", "A4galt 1.225733e-11 1.894137e-11 \n", "Aa467197 4.171843e-11 3.586100e-11 \n", "Aaas 5.634262e-11 1.073224e-10 \n", "Aacs 1.864389e-10 2.695307e-10 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Format results as gene profiles per cell type\n", "cell_type_profiles = recon.explore.format_multicell_results(\n", " multicell_multixrank_results=results,\n", " celltypes=celltypes,\n", " keep_layers=\"gene\"\n", ")\n", "\n", "cell_type_profiles.head()" ] }, { "cell_type": "markdown", "id": "1e6c7f34", "metadata": {}, "source": [ "---\n", "\n", "## Interpret Results\n", "\n", "The results show RWR scores for each gene in each cell type. Higher scores indicate genes more strongly connected to your seeds through the multilayer network.\n", "\n", "```{tip}\n", "You can use these cell-type-specific gene profiles for:\n", "- **Gene set enrichment analysis** to identify activated pathways per cell type\n", "- **Visualization** with Sankey diagrams (see [Tutorial 3](3.recon_molecular_cascades.ipynb))\n", "- **Comparison** between conditions or treatments\n", "```" ] }, { "cell_type": "markdown", "id": "6989d1df", "metadata": {}, "source": [ "### Visualize Top Genes per Cell Type" ] }, { "cell_type": "code", "execution_count": 24, "id": "7774e692", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
celltypeB_cellMacrophageNK_cellT_cell_CD4T_cell_CD8pDC
gene
A3galt23.732416e-126.487802e-082.199377e-111.066063e-111.136353e-121.582009e-12
A4galt2.506706e-114.022829e-072.572855e-111.230480e-111.225733e-111.894137e-11
Aa4671971.810938e-117.258679e-077.255790e-115.224209e-114.171843e-113.586100e-11
Aaas4.564902e-112.528730e-068.919788e-117.891676e-115.634262e-111.073224e-10
Aacs1.611731e-106.068169e-063.717980e-102.366377e-101.864389e-102.695307e-10
.....................
Zxdc5.093798e-113.639593e-069.350631e-115.937546e-115.749365e-111.114977e-10
Zyg11b4.335809e-111.976685e-061.224202e-107.326363e-115.351816e-117.207313e-11
Zyx1.159371e-104.382442e-062.812427e-101.871071e-101.311222e-102.306348e-10
Zzef13.343164e-101.485907e-059.156514e-105.807166e-104.733255e-106.578268e-10
Zzz31.972892e-108.545055e-065.046398e-104.617593e-102.425203e-104.576878e-10
\n", "

10528 rows × 6 columns

\n", "
" ], "text/plain": [ "celltype B_cell Macrophage NK_cell T_cell_CD4 \\\n", "gene \n", "A3galt2 3.732416e-12 6.487802e-08 2.199377e-11 1.066063e-11 \n", "A4galt 2.506706e-11 4.022829e-07 2.572855e-11 1.230480e-11 \n", "Aa467197 1.810938e-11 7.258679e-07 7.255790e-11 5.224209e-11 \n", "Aaas 4.564902e-11 2.528730e-06 8.919788e-11 7.891676e-11 \n", "Aacs 1.611731e-10 6.068169e-06 3.717980e-10 2.366377e-10 \n", "... ... ... ... ... \n", "Zxdc 5.093798e-11 3.639593e-06 9.350631e-11 5.937546e-11 \n", "Zyg11b 4.335809e-11 1.976685e-06 1.224202e-10 7.326363e-11 \n", "Zyx 1.159371e-10 4.382442e-06 2.812427e-10 1.871071e-10 \n", "Zzef1 3.343164e-10 1.485907e-05 9.156514e-10 5.807166e-10 \n", "Zzz3 1.972892e-10 8.545055e-06 5.046398e-10 4.617593e-10 \n", "\n", "celltype T_cell_CD8 pDC \n", "gene \n", "A3galt2 1.136353e-12 1.582009e-12 \n", "A4galt 1.225733e-11 1.894137e-11 \n", "Aa467197 4.171843e-11 3.586100e-11 \n", "Aaas 5.634262e-11 1.073224e-10 \n", "Aacs 1.864389e-10 2.695307e-10 \n", "... ... ... \n", "Zxdc 5.749365e-11 1.114977e-10 \n", "Zyg11b 5.351816e-11 7.207313e-11 \n", "Zyx 1.311222e-10 2.306348e-10 \n", "Zzef1 4.733255e-10 6.578268e-10 \n", "Zzz3 2.425203e-10 4.576878e-10 \n", "\n", "[10528 rows x 6 columns]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cell_type_profiles" ] }, { "cell_type": "code", "execution_count": 25, "id": "91886988", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7AAAARMCAYAAACgSn8uAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAA6DRJREFUeJzs3Xl4TVf7//HPSSInkVFMiVkS89yoIorWTJWiamgJijahFK3m6YC2ROmgNaSPVlGlOhiqalY6GYuoPoaa1ZBWq0LQSHL274/+nK/TBBE52TnJ+3Vd+7qctdde+177hPbOWmsvi2EYhgAAAAAAyOPczA4AAAAAAICsIIEFAAAAALgEElgAAAAAgEsggQUAAAAAuAQSWAAAAACASyCBBQAAAAC4BBJYAAAAAIBLIIEFAAAAALgEElgAAAAAgEsggQUAF3Hs2DFZLBa9/vrrTr1P8+bN1bx5c6feA/nTnDlzZLFYdOzYMXsZP08AgJxEAgvA5VgsliwdGzduNDtUAFk0YcIELV261OwwAAB5nIfZAQDA7Zo3b57D5w8//FBr167NUF6tWrXcDAvAHZgwYYK6deumzp07mx0KACAPI4EF4HIeffRRh89btmzR2rVrM5Sb5dKlS/Lx8TE7DORhf//9tzw9PeXmxkQoAABuB//lBJAvXbp0SSNHjlTZsmVltVpVpUoVvf766zIMw6GexWLRkCFDNH/+fFWpUkVeXl6KiIjQt99+m6X7REVFydfXV4cPH1b79u3l5+en3r17S5K+++47PfzwwypXrpysVqvKli2rp59+WleuXMm0jVOnTqlz587y9fVV8eLFNWrUKKWnp9/0/oZhaNCgQfL09NTixYvt5R999JEiIiLk7e2toKAg9ejRQ7/++muG62fOnKmwsDB5e3urQYMG+u6777LUb0m6cuWKnnrqKRUrVkx+fn568MEHderUKVksFo0dO9ah7qlTp9S/f3+VLFlSVqtVNWrU0AcffOBQZ+PGjbJYLPr00081fvx4lSlTRl5eXmrRooUOHTqU4f5bt25V27ZtFRAQoMKFC6tZs2b64YcfHOpcvHhRw4cPV4UKFWS1WlWiRAm1atVKO3fuvGnfjh8/rujoaFWpUkXe3t4qWrSoHn74YYe1ndecP39eTz/9tP0eZcqUUZ8+ffTHH3849GvhwoV64YUXVLp0aRUuXFgXLlyQJH322Wf276pYsWJ69NFHderUKYd7JCYmql+/fipTpoysVqtCQkLUqVMnh3h+/PFHtWnTRsWKFZO3t7cqVqyo/v3737Sf16xcuVLNmjWTn5+f/P39dffdd2vBggW3/byzy2Kx6NKlS5o7d659CUBUVJQ2bNggi8WiJUuWZLhmwYIFslgs2rx5s6T/+3t05MgRtWnTRj4+PipVqpRefvnlDH/vbTabpkyZoho1asjLy0slS5bU4MGD9ddffznUu5NnCgBwDkZgAeQ7hmHowQcf1IYNGzRgwADVrVtXq1ev1jPPPKNTp07prbfecqj/zTff6JNPPtFTTz0lq9WqGTNmqG3bttq2bZtq1qx5y/ulpaWpTZs2atKkiV5//XUVLlxY0j+JyeXLl/Xkk0+qaNGi2rZtm6ZOnaqTJ0/qs88+c2gjPT1dbdq00T333KPXX39d69at0xtvvKGwsDA9+eSTmd43PT1d/fv31yeffKIlS5aoQ4cOkqTx48frxRdfVPfu3fX444/r7Nmzmjp1qpo2bapdu3YpMDBQkjRr1iwNHjxYjRs31vDhw3XkyBE9+OCDCgoKUtmyZW/Z76ioKH366ad67LHH1LBhQ33zzTf2GK7322+/qWHDhvZfFhQvXlwrV67UgAEDdOHCBQ0fPtyh/sSJE+Xm5qZRo0YpKSlJkyZNUu/evbV161Z7na+//lrt2rVTRESExowZIzc3N82ePVv333+/vvvuOzVo0ECS9MQTT+jzzz/XkCFDVL16df3555/6/vvvtW/fPt1111037Nv27du1adMm9ejRQ2XKlNGxY8cUHx+v5s2ba+/evfbvODk5Wffee6/27dun/v3766677tIff/yhZcuW6eTJkypWrJi9zVdeeUWenp4aNWqUUlJS5OnpqTlz5qhfv366++67FRcXp99++01vv/22fvjhB4fvqmvXrvrf//6noUOHqkKFCvr999+1du1anThxwv65devWKl68uJ577jkFBgbq2LFjDr/UuJE5c+aof//+qlGjhmJjYxUYGKhdu3Zp1apV6tWr12097+yaN2+eHn/8cTVo0ECDBg2SJIWFhalhw4YqW7as5s+fr4ceesjhmvnz5yssLEyNGjWyl6Wnp6tt27Zq2LChJk2apFWrVmnMmDFKS0vTyy+/bK83ePBg+7N/6qmndPToUU2bNk27du3S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J/TAAw/o4Ycf1pIlS+Th8c8/52FhYTIMQxUrVrSPPGXm2jM4ePCg7r//fnt5amqqjh49qjp16tw0hvLly8tms+no0aMOo7j/fltw8eLF5efnp/T0dLVs2fK2+5qZsLAwSZK/v3+W2gwJCVF0dLSio6P1+++/66677tL48eNvmsB+/vnn6tu3r9544w172d9//63z589niOXnn3/OVj+ufQcHDhxw+A6ulf375zQsLEwjR47UyJEjdfDgQdWtW1dvvPGGPvroI3udhg0bqmHDhho/frwWLFig3r17a+HChXr88cczjeHas/z5558zjGb+u05Wn3d2/XvK9fV69OihESNG6OOPP9aVK1dUqFAhPfLIIxnq2Ww2HTlyxOFn/5dffpEk+y+cwsLCtG7dOkVGRmbplwq3+0wBAM7FGlgA+U779u2Vnp6eYYTmrbfeksViyZC4bN682WFd46+//qovvvhCrVu3lru7u4oUKaKWLVs6HP9eL/hv10YRr596ahiG3n777TvtniSpZcuWWrhwoVatWqXHHnvMPkrWpUsXubu7a9y4cRm2DjEMQ3/++ackqX79+ipevLjeffddXb161V5nzpw5GZK0zLRp00aSNGPGDIfyqVOnOnx2d3dX165dtWjRokwTvbNnz966s/8SERGhsLAwvf7660pOTr5hm+np6RmmapcoUUKlSpVSSkrKTe/h7u6e4flNnTo1w5rorl27avfu3Zlu8/Lv6/+tfv36KlGihN59912HeFauXKl9+/bZ3+h8+fJl/f333w7XhoWFyc/Pz37dX3/9leF+10ZLb9bX1q1by8/PT3FxcRnuca29rD7vO+Xj43PDn71ixYqpXbt2+uijjzR//ny1bdvW4Q3P17v+771hGJo2bZoKFSqkFi1aSPpnVD49PV2vvPJKhmvT0tLsMWT3mQIAnIsRWAD5TseOHXXffffp+eef17Fjx1SnTh2tWbNGX3zxhYYPH24fUbqmZs2aatOmjcM2OpI0bty4bMdQtWpVhYWFadSoUTp16pT8/f21aNGiG76EJzs6d+6s2bNnq0+fPvL399d///tfhYWF6dVXX1VsbKyOHTumzp07y8/PT0ePHtWSJUs0aNAgjRo1SoUKFdKrr76qwYMH6/7779cjjzyio0ePavbs2VlaAxsREaGuXbtqypQp+vPPP+3b6Fwb7bp+NG3ixInasGGD7rnnHg0cOFDVq1fXuXPntHPnTq1bty7D+uJbcXNz0/vvv6927dqpRo0a6tevn0qXLq1Tp05pw4YN8vf315dffqmLFy+qTJky6tatm+rUqSNfX1+tW7dO27dvdxhZzcwDDzygefPmKSAgQNWrV9fmzZu1bt06FS1a1KHeM888o88//1wPP/yw+vfvr4iICJ07d07Lli3Tu+++e9OR7EKFCum1115Tv3791KxZM/Xs2dO+jU6FChX09NNPS/pnBLFFixbq3r27qlevLg8PDy1ZskS//fabevToIUmaO3euZsyYoYceekhhYWG6ePGi3nvvPfn7+6t9+/Y3jMHf319vvfWWHn/8cd19993q1auXihQpot27d+vy5cuaO3dulp/3nYqIiNC6dev05ptvqlSpUqpYsaLuuece+/k+ffqoW7dukpRp8in9s5Z81apV6tu3r+655x6tXLlSX331lf7zn//YpwY3a9ZMgwcPVlxcnBISEtS6dWsVKlRIBw8e1Geffaa3335b3bp1y/YzBQA4WW6/9hgActq/t9ExDMO4ePGi8fTTTxulSpUyChUqZFSqVMmYPHmywzYghvHPNjoxMTHGRx99ZFSqVMmwWq1GvXr1jA0bNmTp3n379jV8fHwyPbd3716jZcuWhq+vr1GsWDFj4MCBxu7duw1JxuzZs2/ZxpgxYxz6df02OtebMWOGIckYNWqUvWzRokVGkyZNDB8fH8PHx8eoWrWqERMTYxw4cCDDtRUrVjSsVqtRv35949tvv83ytieXLl0yYmJijKCgIMPX19fo3LmzceDAAUOSMXHiRIe6v/32mxETE2OULVvWKFSokBEcHGy0aNHCmDlzpr3Ote1mPvvsM4drr/X7+mdmGIaxa9cuo0uXLkbRokUNq9VqlC9f3ujevbuxfv16wzAMIyUlxXjmmWeMOnXqGH5+foaPj49Rp04dY8aMGbfs219//WX069fPKFasmOHr62u0adPG2L9/v1G+fPkMW738+eefxpAhQ4zSpUsbnp6eRpkyZYy+ffvatw26Ub+u+eSTT4x69eoZVqvVCAoKMnr37m2cPHnSfv6PP/4wYmJijKpVqxo+Pj5GQECAcc899xiffvqpvc7OnTuNnj17GuXKlTOsVqtRokQJ44EHHnDYHupmli1bZjRu3Njw9vY2/P39jQYNGhgff/zx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nlqwYIEeeOAB+y87bse1/sybN0/BwcEZznt4ZPxfkb/++kvFihW7/cABAPkeCSwA5KCqVatK+udtxNlJMsqXLy9JOnDgQIZz+/fvV7FixRxGX53hr7/+0vr16zVu3Di99NJL9vJrI2nZMXHiRC1dulSLFy+2P6NrihcvLj8/P6Wnp2d4e/O/lS9fXj///HOGEbrMntfNHDx40GHk+tChQ7LZbPaXCYWFhckwDFWsWFGVK1e+rbZvJjQ0VNI/U3Jv5Haex5242QhnzZo1Va9ePc2fP19lypTRiRMnNHXq1EzrHjx4UPfdd5/9c3Jyss6cOaP27dtL+udZSlKJEiWy3J+jR4+qTp06We0KAKAAYQ0sAOSga2tOf/zxx2xdHxISorp162ru3Lk6f/68vfznn3/WmjVr7EmBM10bcfz3qPCUKVOy1d66dev0wgsv6Pnnn1fnzp0zvV/Xrl21aNGiTBO7s2fP2v/cvn17nT59Wp9//rm97PLlyzecansj06dPd/h8LTlr166dJKlLly5yd3fXuHHjMjwHwzCytJ1QZooXL66mTZvqgw8+0IkTJzK0K93e87gTPj4+N50O/thjj2nNmjWaMmWKihYtan82/zZz5kylpqbaP8fHxystLc1ev02bNvL399eECRMc6l3z7/4kJSXp8OHDaty4cXa6BQDI5xiBBYAcFBoaqpo1a2rdunXq379/ttqYPHmy2rVrp0aNGmnAgAH2bXQCAgI0duzYnA04E/7+/mratKkmTZqk1NRUlS5dWmvWrNHRo0ez1V7Pnj1VvHhxVapUSR999JHDuVatWqlkyZKaOHGiNmzYoHvuuUcDBw5U9erVde7cOe3cuVPr1q3TuXPnJEkDBw7UtGnT1KdPH+3YsUMhISGaN2+eChcufFsxHT16VA8++KDatm2rzZs366OPPlKvXr3so35hYWF69dVXFRsbq2PHjqlz587y8/PT0aNHtWTJEg0aNEijRo3K1vN455131KRJE911110aNGiQKlasqGPHjumrr75SQkKCJGX5edyJiIgIffLJJxoxYoTuvvtu+fr6qmPHjvbzvXr10rPPPqslS5boySefzLDu95qrV6+qRYsW9q2YZsyYoSZNmujBBx+U9M/PU3x8vB577DHddddd6tGjh4oXL64TJ07oq6++UmRkpKZNm2Zvb926dTIMQ506dbrjPgIA8iET3nwMAPnam2++afj6+jpsRXNtu5PJkydnqC/JGDNmjEPZunXrjMjISMPb29vw9/c3OnbsaOzdu9ehzrXtUs6ePZuhzfLlyxsdOnTI9F4xMTEOZZnFdvLkSeOhhx4yAgMDjYCAAOPhhx82Tp8+nSHWrGyjI+mGx/Xb3vz2229GTEyMUbZsWaNQoUJGcHCw0aJFC2PmzJkO8R4/ftx48MEHjcKFCxvFihUzhg0bZqxateq2ttHZu3ev0a1bN8PPz88oUqSIMWTIEOPKlSsZ6i9atMho0qSJ4ePjY/j4+BhVq1Y1YmJijAMHDjj0t0aNGje977/9/PPP9ufr5eVlVKlSxXjxxRcd6mTledzJNjrJyclGr169jMDAQENSplvqtG/fPsN2TNdc++6/+eYbY9CgQUaRIkUMX19fo3fv3g5bQF2zYcMGo02bNkZAQIDh5eVlhIWFGVFRUcaPP/7oUO+RRx4xmjRpcsv4AQAFk8Uw7uDNIQCADJKSkhQaGqpJkyZpwIABZoeD64wdO1bjxo3T2bNneUlQFjz00EPas2ePDh06lOHcnDlz1K9fP23fvl3169fPkfslJiaqYsWKWrhwISOwAIBMsQYWAHJYQECAnn32WU2ePDnbb+wFzHbmzBl99dVXeuyxx3LtnlOmTFGtWrVIXgEAN0QCCwBOMHr0aO3fv19ubvwzC9dy9OhRffTRR+rZs6cKFSqkwYMH59q9J06cqG3btuXa/QAArof/swIAAHbffPONHnvsMR09elRz587NdO9WAADMwhpYAAAAAIBLYAQWAAAAAOASSGABAAAAAC6BBBYAAAAA4BI8zA6gIGnU8w2zQ4CTeJ1LMzsEOIHH2h/NDgFO4l6jstkhwAkMayGzQ4CTnKvtb3YIcILtH4wwO4TbZkt0/f9+uAX/YnYId4QRWAAAAACASyCBBQAAAAC4BBJYAAAAAIBLYA0sAAAAAGSBTTazQ7hjrj6C6erxAwAAAAAKCBJYAAAAAIBLIIEFAAAAALiEApPAbt68We7u7urQoYPZoQAAAABwQemGzeUPV1dgEthZs2Zp6NCh+vbbb3X69GmzwwEAAAAA3KYCkcAmJyfrk08+0ZNPPqkOHTpozpw59nMbN26UxWLRV199pdq1a8vLy0sNGzbUzz//bK8zZ84cBQYGaunSpapUqZK8vLzUpk0b/frrryb0BgAAAAAKpgKRwH766aeqWrWqqlSpokcffVQffPCBDMNwqPPMM8/ojTfe0Pbt21W8eHF17NhRqamp9vOXL1/W+PHj9eGHH+qHH37Q+fPn1aNHj9zuCgAAAAAUWAUigZ01a5YeffRRSVLbtm2VlJSkb775xqHOmDFj1KpVK9WqVUtz587Vb7/9piVLltjPp6amatq0aWrUqJEiIiI0d+5cbdq0Sdu2bcvVvgAAAAAwh02Gyx+uLt8nsAcOHNC2bdvUs2dPSZKHh4ceeeQRzZo1y6Feo0aN7H8OCgpSlSpVtG/fPnuZh4eH7r77bvvnqlWrKjAw0KHO9VJSUnThwgWHw5aelpNdAwAAAIACJd8nsLNmzVJaWppKlSolDw8PeXh4KD4+XosWLVJSUpLT7hsXF6eAgACH49Te9U67HwAAAADkd/k6gU1LS9OHH36oN954QwkJCfZj9+7dKlWqlD7++GN73S1bttj//Ndff+mXX35RtWrVHNr68ccf7Z8PHDig8+fPO9S5XmxsrJKSkhyO0tVbOKGXAAAAAFAweJgdgDMtX75cf/31lwYMGKCAgACHc127dtWsWbM0efJkSdLLL7+sokWLqmTJknr++edVrFgxde7c2V6/UKFCGjp0qN555x15eHhoyJAhatiwoRo0aJDpva1Wq6xWq0OZm3u+ftwAAABAvmaT6++j6ury9QjsrFmz1LJlywzJq/RPAvvjjz/qp59+kiRNnDhRw4YNU0REhBITE/Xll1/K09PTXr9w4cIaPXq0evXqpcjISPn6+uqTTz7Jtb4AAAAAQEGXr4cEv/zyyxuea9CggQzD0MaNGyVJTZo0cdj7NTNdunRRly5dcjJEAAAAAEAW5esRWAAAAABA/pGvR2ABAAAAIKekG66/j6qrK/AjsM2bN5dhGAoMDLxhnaioKJ0/fz7XYgIAAAAAZFTgE1gAAAAAgGtgCjEAAAAAZIFNTCE2GyOwAAAAAACXQAILAAAAAHAJJLAAAAAAAJfAGthcFLB6v9khwFnS082OAE5wanhjs0OAk5T55IjZIcAJLGlpZocAJwn632GzQ4AzfGB2ALcvnTWwpmMEFgAAAADgEkhgAQAAAAAugQQWAAAAAOASWAMLAAAAAFnAPrDmYwQWAAAAAOASSGAzMXbsWNWtW9fsMAAAAAAA18mXCWxUVJQsFov9KFq0qNq2bauffvop222eP39eMTExCgkJkdVqVeXKlbVixYocjBoAAAAAcDP5dg1s27ZtNXv2bElSYmKiXnjhBT3wwAM6ceLEbbd19epVtWrVSiVKlNDnn3+u0qVL6/jx4woMDMzhqAEAAADkVekGa2DNlm8TWKvVquDgYElScHCwnnvuOd177706e/asihcvrpMnT+qZZ57R6tWrlZKSomrVqmn69Om65557MrT1wQcf6Ny5c9q0aZMKFSokSapQoUJudgcAAAAACrx8OYX435KTk/XRRx8pPDxcRYsWVXJyspo1a6ZTp05p2bJl2r17t5599lnZbLZMr1+2bJkaNWqkmJgYlSxZUjVr1tSECROUnp6eyz0BAAAAgIIr347ALl++XL6+vpKkS5cuKSQkRMuXL5ebm5sWLFigs2fPavv27QoKCpIkhYeH37CtI0eO6Ouvv1bv3r21YsUKHTp0SNHR0UpNTdWYMWNypT8AAAAAUNDl2wT2vvvuU3x8vCTpr7/+0owZM9SuXTtt27ZNCQkJqlevnj15vRWbzaYSJUpo5syZcnd3V0REhE6dOqXJkyffMIFNSUlRSkqKYztGutws7nfWMQAAAACmyHy+JnJTvk1gfXx8HEZV33//fQUEBOi9996Tt7f3bbUVEhKiQoUKyd39/5LPatWqKTExUVevXpWnp2eGa+Li4jRu3DiHsjCvegr3jrjNngAAAAAApAKyBlaSLBaL3NzcdOXKFdWuXVsJCQk6d+5clq6NjIzUoUOHHNbI/vLLLwoJCck0eZWk2NhYJSUlORyhXnVzoisAAAAAUCDl2wQ2JSVFiYmJSkxM1L59+zR06FAlJyerY8eO6tmzp4KDg9W5c2f98MMPOnLkiBYtWqTNmzdn2taTTz6pc+fOadiwYfrll1/01VdfacKECYqJibnh/a1Wq/z9/R0Opg8DAAAAQPbl2ynEq1atUkhIiCTJz89PVatW1WeffabmzZtLktasWaORI0eqffv2SktLU/Xq1TV9+vRM2ypbtqxWr16tp59+WrVr11bp0qU1bNgwjR49Ore6AwAAAMBk6WIfWLNZDIPdeHNL26CBZocAZ2FLpXzp1IBaZocAJynzyRGzQ4AzpKWZHQGcxHYh2ewQ4ASrr8wzO4Tb9uupELNDuGNlS58xO4Q7km+nEAMAAAAA8hcSWAAAAACAS8i3a2ABAAAAICels/jSdIzAAgAAAABcAgksAAAAAMAlkMACAAAAAFwCa2ABAAAAIAtsZgcARmABAAAAAK6BBBYAAAAA4BKYQpyLLIV43PmVYfBO9fzIYnYAcJq0CiXNDgFO4HH4tNkhwEncSgebHQIgSUrn/w5MxwgsAAAAAMAlkMACAAAAAFwCCSwAAAAAwCWwKBMAAAAAssDGa09MxwgsAAAAAMAlkMBmYs6cOQoMDDQ7DAAAAADAdfJtApuYmKihQ4cqNDRUVqtVZcuWVceOHbV+/frbbmvjxo2yWCwZjsTERCdEDgAAAADITL5cA3vs2DFFRkYqMDBQkydPVq1atZSamqrVq1crJiZG+/fvz1a7Bw4ckL+/v/1ziRIlcipkAAAAAHkc+8CaL18msNHR0bJYLNq2bZt8fHzs5TVq1FD//v0lSefPn9fo0aO1dOlSJSUlKTw8XBMnTtQDDzxww3ZLlCjB1GIAAAAAMEm+S2DPnTunVatWafz48Q7J6zWBgYGy2Wxq166dLl68qI8++khhYWHau3ev3N3db9p23bp1lZKSopo1a2rs2LGKjIx0VjcAAAAAAP+S7xLYQ4cOyTAMVa1a9YZ11q1bp23btmnfvn2qXLmyJCk0NPSG9UNCQvTuu++qfv36SklJ0fvvv6/mzZtr69atuuuuu3K8DwAAAACAjPJdAmsYt96cKSEhQWXKlLEnr7dSpUoVValSxf65cePGOnz4sN566y3Nmzcv02tSUlKUkpLiUGYz0uVmufkoLwAAAIC8iTWw5st3byGuVKmSLBbLTV/U5O3tfcf3adCggQ4dOnTD83FxcQoICHA4Dl/aecf3BQAAAICCKt8lsEFBQWrTpo2mT5+uS5cuZTh//vx51a5dWydPntQvv/yS7fskJCQoJCTkhudjY2OVlJTkcIT5MN0YAAAAALIr300hlqTp06crMjJSDRo00Msvv6zatWsrLS1Na9euVXx8vPbt26emTZuqa9euevPNNxUeHq79+/fLYrGobdu2GdqbMmWKKlasqBo1aujvv//W+++/r6+//lpr1qy5YQxWq1VWq9WhjOnDAAAAAJB9+TKBDQ0N1c6dOzV+/HiNHDlSZ86cUfHixRUREaH4+HhJ0qJFizRq1Cj17NlTly5dsm+jk5mrV69q5MiROnXqlAoXLqzatWtr3bp1uu+++3KzWwAAAABMZDNYA2s2i5GVtx4hR7Qr+aTZIcBJjKupZocAJzjdr4bZIcBJSm7NuMQErs/j8GmzQ4Cz+GbcGhGub+WhyWaHcNt2nyhrdgh3rE65X80O4Y7kuzWwAAAAAID8iQQWAAAAAOAS8uUaWAAAAADIaewDaz5GYAEAAAAALoEEFgAAAADgEkhgAQAAAAAugTWwAAAAAJAF6Yz/mY5vAAAAAADgEkhgAQAAAAAugSnEuSko0OwI4CS2wMJmhwAnKDllk9khwEnca1U1OwQ4QVpYKbNDgJOcaexjdggA8ggSWAAAAADIApvBPrBmYwoxAAAAAMAlkMACAAAAAFwCCSwAAAAAwCWwBhYAAAAAsiBdrIE1W4EcgbVYLFq6dKnZYQAAAAAAboPLJ7CJiYkaOnSoQkNDZbVaVbZsWXXs2FHr16/P0vXHjh3TgAEDVLFiRXl7eyssLExjxozR1atXHeqtXr1aDRs2lJ+fn4oXL66uXbvq2LFjTugRAAAAACAzLj2F+NixY4qMjFRgYKAmT56sWrVqKTU1VatXr1ZMTIz2799/yzb2798vm82m//73vwoPD9fPP/+sgQMH6tKlS3r99dclSUePHlWnTp00YsQIzZ8/X0lJSXr66afVpUsX7dy509ndBAAAAJAHpBsuP/7n8lw6gY2OjpbFYtG2bdvk4/N/G1zXqFFD/fv3lyQdPHhQAwYM0LZt2xQaGqq3337boY22bduqbdu29s+hoaE6cOCA4uPj7Qnsjh07lJ6erldffVVubv/80I4aNUqdOnVSamqqChUq5OyuAgAAAECB57K/Qjh37pxWrVqlmJgYh+T1msDAQNlsNnXp0kWenp7aunWr3n33XY0ePfqWbSclJSkoKMj+OSIiQm5ubpo9e7bS09OVlJSkefPmqWXLliSvAAAAAJBLXDaBPXTokAzDUNWqVW9YZ926ddq/f78+/PBD1alTR02bNtWECRNu2e7UqVM1ePBge1nFihW1Zs0a/ec//5HValVgYKBOnjypTz/9NMf6AwAAAAC4OZdNYA3DuGWdffv2qWzZsipVqpS9rFGjRjesf+rUKbVt21YPP/ywBg4caC9PTEzUwIED1bdvX23fvl3ffPONPD091a1btxvGkZKSogsXLjgcNlvabfQQAAAAQF5ik5vLH67OZXtQqVIlWSyWLL2oKStOnz6t++67T40bN9bMmTMdzk2fPl0BAQGaNGmS6tWrp6ZNm+qjjz7S+vXrtXXr1kzbi4uLU0BAgMNx+M/NORIrAAAAABRELpvABgUFqU2bNpo+fbouXbqU4fz58+dVrVo1/frrrzpz5oy9fMuWLRnqnjp1Ss2bN1dERIRmz55tf1HTNZcvX85Q5u7uLkmy2WyZxhcbG6ukpCSHI6zojUd/AQAAAAA357IJrPTPyGh6eroaNGigRYsW6eDBg9q3b5/eeecdNWrUSC1btlTlypXVt29f7d69W999952ef/55hzauJa/lypXT66+/rrNnzyoxMVGJiYn2Oh06dND27dv18ssv6+DBg9q5c6f69eun8uXLq169epnGZrVa5e/v73C4ubn0S58BAAAAwFQunVGFhoZq586dGj9+vEaOHKkzZ86oePHiioiIUHx8vNzc3LRkyRINGDBADRo0UIUKFfTOO+84bJuzdu1aHTp0SIcOHVKZMmUc2r+2vvX+++/XggULNGnSJE2aNEmFCxdWo0aNtGrVKnl7e+dqnwEAAACYI10Ws0Mo8CxGVt6GhBzRrlqs2SHASdIDC5sdApzA2PqT2SHASdxr3fgN9nBd6b5Ws0OAk5xpnHHLRLi+nyc/bXYIt+3rY1XMDuGO3V/hgNkh3BGXnkIMAAAAACg4SGABAAAAAC7BpdfAAgAAAEBuSTcY/zMb3wAAAAAAwCWQwAIAAAAAXAIJLAAAAADAJbAGFgAAAACywMY+sKZjBBYAAAAA4BJIYAEAAAAALoEpxLnI+O0Ps0OAk7idTjc7BDgB32r+ZfnjvNkhwAks1uJmhwAnKT1tp9khwBkmmx0AXBEJLAAAAABkQToTWE3HNwAAAAAAcAkksAAAAAAAl0ACCwAAAABwCayBBQAAAIAsSDcY/zNbvvgGLBaLli5dmqNtRkVFqXPnzjnaJgAAAAAg+/JcApuYmKihQ4cqNDRUVqtVZcuWVceOHbV+/frbbislJUV169aVxWJRQkKCw7mffvpJ9957r7y8vFS2bFlNmjQph3oAAAAAAHCGPDWF+NixY4qMjFRgYKAmT56sWrVqKTU1VatXr1ZMTIz2799/W+09++yzKlWqlHbv3u1QfuHCBbVu3VotW7bUu+++qz179qh///4KDAzUoEGDcrJLAAAAAIAckqdGYKOjo2WxWLRt2zZ17dpVlStXVo0aNTRixAht2bJFknTw4EE1bdpUXl5eql69utauXZtpWytXrtSaNWv0+uuvZzg3f/58Xb16VR988IFq1KihHj166KmnntKbb755w9guXryo3r17y8fHRyEhIXrrrbfUvHlzDR8+PEf6DgAAACBvs8nN5Q9Xl2d6cO7cOa1atUoxMTHy8fHJcD4wMFA2m01dunSRp6entm7dqnfffVejR4/OUPe3337TwIEDNW/ePBUuXDjD+c2bN6tp06by9PS0l7Vp00YHDhzQX3/9lWl8I0aM0A8//KBly5Zp7dq1+u6777Rz58476DEAAAAAuI6JEyfKYrGYOoiXZ6YQHzp0SIZhqGrVqjess27dOu3fv1+rV69WqVKlJEkTJkxQu3bt7HUMw1BUVJSeeOIJ1a9fX8eOHcvQTmJioipWrOhQVrJkSfu5IkWKOJy7ePGi5s6dqwULFqhFixaSpNmzZ9tjAAAAAID8bPv27frvf/+r2rVrmxpHnklgDcO4ZZ19+/apbNmyDoljo0aNHOpMnTpVFy9eVGxsbI7FduTIEaWmpqpBgwb2soCAAFWpUuWG16SkpCglJcWhzGaky83inmNxAQAAAMg96YbF7BBMkZycrN69e+u9997Tq6++amoseWYKcaVKlWSxWG77RU3/9vXXX2vz5s2yWq3y8PBQeHi4JKl+/frq27evJCk4OFi//fabw3XXPgcHB9/R/a+Ji4tTQECAw3Hk74QcaRsAAAAAsiMlJUUXLlxwOP498PZvMTEx6tChg1q2bJlLUd5Ynklgg4KC1KZNG02fPl2XLl3KcP78+fOqVq2afv31V505c8Zefu3lTte888472r17txISEpSQkKAVK1ZIkj755BONHz9e0j+jtt9++61SU1Pt161du1ZVqlTJMH1YkkJDQ1WoUCFt377dXpaUlKRffvnlhv2JjY1VUlKSwxHqVTdrDwMAAAAAnCCzgba4uLgb1l+4cKF27tx50zq5Kc9MIZak6dOnKzIyUg0aNNDLL7+s2rVrKy0tTWvXrlV8fLz+97//qXLlyurbt68mT56sCxcu6Pnnn3doo1y5cg6ffX19JUlhYWEqU6aMJKlXr14aN26cBgwYoNGjR+vnn3/W22+/rbfeeivTuPz8/NS3b18988wzCgoKUokSJTRmzBi5ubnJYsl8GoHVapXVanUoY/owAAAAADPFxsZqxIgRDmX/zluu+fXXXzVs2DCtXbtWXl5euRHeLeWpBDY0NFQ7d+7U+PHjNXLkSJ05c0bFixdXRESE4uPj5ebmpiVLlmjAgAFq0KCBKlSooHfeeUdt27a9rfsEBARozZo1iomJUUREhIoVK6aXXnrppnvAvvnmm3riiSf0wAMPyN/fX88++6x+/fXXPPNFAgAAAHCu9LwzgTXbMhtou5EdO3bo999/11133WUvS09P17fffqtp06YpJSVF7u65O0hnMbLy9iRkcOnSJZUuXVpvvPGGBgwYkKVr2gYNdHJUME16utkRwAnSL140OwQ4iUdIzrzvAHlLeuniZocAJ7HsOWh2CHCC1VfmmR3CbfvscITZIdyxh8N2ZLnuxYsXdfz4cYeyfv36qWrVqho9erRq1qyZ0+HdUp4agc3Ldu3apf3796tBgwZKSkrSyy+/LEnq1KmTyZEBAAAAQM7z8/PLkKT6+PioaNGipiSvEgnsbXn99dd14MABeXp6KiIiQt99952KFStmdlgAAAAAUCCQwGZRvXr1tGNH1ofbAQAAAOQvNsP118DeqY0bN5p6f74BAAAAAIBLIIEFAAAAALgEElgAAAAAgEtgDSwAAAAAZEF+2AfW1fENAAAAAABcAiOwAHADiU83NjsEOEmZhUfMDgFO4H78jNkhwElsZgcAIM9gBBYAAAAA4BIYgQUAAACALEg3LGaHUOAxAgsAAAAAcAkksAAAAAAAl0ACCwAAAABwCayBBQAAAIAssDH+Z7p8/w2MHTtWdevWveN2mjdvruHDh99xOwAAAACA7MnzCWxiYqKGDh2q0NBQWa1WlS1bVh07dtT69evNDg0AAAAAkIvy9BTiY8eOKTIyUoGBgZo8ebJq1aql1NRUrV69WjExMdq/f7/ZIQIAAAAAckmeHoGNjo6WxWLRtm3b1LVrV1WuXFk1atTQiBEjtGXLFknS+fPn9fjjj6t48eLy9/fX/fffr927d2do67///a/Kli2rwoULq3v37kpKSrKfi4qKUufOnTVu3Dh7O0888YSuXr3q0EZaWpqGDBmigIAAFStWTC+++KIMw3DuQwAAAACQJ6Qbbi5/uLo824Nz585p1apViomJkY+PT4bzgYGBkqSHH35Yv//+u1auXKkdO3borrvuUosWLXTu3Dl73UOHDunTTz/Vl19+qVWrVmnXrl2Kjo52aG/9+vXat2+fNm7cqI8//liLFy/WuHHjHOrMnTtXHh4e2rZtm95++229+eabev/993O+8wAAAACADPJsAnvo0CEZhqGqVavesM7333+vbdu26bPPPlP9+vVVqVIlvf766woMDNTnn39ur/f333/rww8/VN26ddW0aVNNnTpVCxcuVGJior2Op6enPvjgA9WoUUMdOnTQyy+/rHfeeUc2m81ep2zZsnrrrbdUpUoV9e7dW0OHDtVbb73lnAcAAAAAAHCQZxPYrEzN3b17t5KTk1W0aFH5+vraj6NHj+rw4cP2euXKlVPp0qXtnxs1aiSbzaYDBw7Yy+rUqaPChQs71ElOTtavv/5qL2vYsKEsFotDnYMHDyo9PT1DbCkpKbpw4YLDYTMy1gMAAAAAZE2efYlTpUqVZLFYbvqipuTkZIWEhGjjxo0Zzl2bYmyWuLi4DFOQw7zqKdw7wqSIAAAAANwJmyy3rgSnyrMjsEFBQWrTpo2mT5+uS5cuZTh//vx53XXXXUpMTJSHh4fCw8MdjmLFitnrnjhxQqdPn7Z/3rJli9zc3FSlShV72e7du3XlyhWHOr6+vipbtqy9bOvWrQ4xbNmyRZUqVZK7u3uG+GJjY5WUlORwhHrVzdazAAAAAADk4QRWkqZPn6709HQ1aNBAixYt0sGDB7Vv3z698847atSokVq2bKlGjRqpc+fOWrNmjY4dO6ZNmzbp+eef148//mhvx8vLS3379tXu3bv13Xff6amnnlL37t0VHBxsr3P16lUNGDBAe/fu1YoVKzRmzBgNGTJEbm7/94hOnDihESNG6MCBA/r44481depUDRs2LNPYrVar/P39HQ43S8ZEFwAAAACQNXl2CrEkhYaGaufOnRo/frxGjhypM2fOqHjx4oqIiFB8fLwsFotWrFih559/Xv369dPZs2cVHByspk2bqmTJkvZ2wsPD1aVLF7Vv317nzp3TAw88oBkzZjjcq0WLFqpUqZKaNm2qlJQU9ezZU2PHjnWo06dPH125ckUNGjSQu7u7hg0bpkGDBuXGowAAAABgsvywDY2rsxhsZKqoqCidP39eS5cudep92gYNdGr7MFEmL/KC6zv1eC2zQ4CTlFl4xOwQ4AxpaWZHACexXUg2OwQ4weor88wO4bb990Azs0O4Y4OrfGN2CHeEXyEAAAAAAFwCCSwAAAAAwCXk6TWwuWXOnDlmhwAAAAAgj0tn/M90fAMAAAAAAJdAAgsAAAAAcAkksAAAAAAAl8AaWAAAAADIApthMTuEAo8RWAAAAACAS2AENhel1axgdghwklTfQmaHACcIfmuT2SHAWSqFmR0BnCE93ewI4CRX61QwOwQAeQQjsAAAAAAAl8AILAAAAABkAfvAmo9vAAAAAADgEkhgAQAAAAAugQQWAAAAAOASWAMLAAAAAFlgMxj/M1uB/wY2btwoi8Wi8+fP28uWLl2q8PBwubu7a/jw4abFBgAAAAD4P/kqgU1MTNTQoUMVGhoqq9WqsmXLqmPHjlq/fv1ttTN48GB169ZNv/76q1555RVt3LhRnTp1UkhIiHx8fFS3bl3Nnz/fSb0AAAAAAGQm30whPnbsmCIjIxUYGKjJkyerVq1aSk1N1erVqxUTE6P9+/dnuCY1NTVDWXJysn7//Xe1adNGpUqVkiRt2rRJtWvX1ujRo1WyZEktX75cffr0UUBAgB544AGn9w0AAAAAkI8S2OjoaFksFm3btk0+Pj728ho1aqh///6SJIvFohkzZmjlypVav369nnnmGTVv3txed+PGjbrvvvskSffff78kacOGDfrPf/7jcK9hw4ZpzZo1Wrx4MQksAAAAUECky2J2CAVevphCfO7cOa1atUoxMTEOyes1gYGB9j+PHTtWDz30kPbs2WNPbK9p3LixDhw4IElatGiRzpw5o8aNG2d6z6SkJAUFBeVcJwAAAAAAN5UvRmAPHTokwzBUtWrVW9bt1auX+vXrZ/985MgR+589PT1VokQJSVJQUJCCg4MzbePTTz/V9u3b9d///vcOIwcAAAAAZFW+SGANw8hy3fr169/RvTZs2KB+/frpvffeU40aNW5YLyUlRSkpKQ5lNlua3NzyxSMHAAAAgFyXL6YQV6pUSRaLJdMXNf1bZlOMs+qbb75Rx44d9dZbb6lPnz43rRsXF6eAgACH49iv32T73gAAAADMZTPcXP5wda7fA/0z3bdNmzaaPn26Ll26lOH89Xu8ZtfGjRvVoUMHvfbaaxo0aNAt68fGxiopKcnhqFC22R3HAQAAAAAFVb5IYCVp+vTpSk9PV4MGDbRo0SIdPHhQ+/bt0zvvvKNGjRrdUdsbNmxQhw4d9NRTT6lr165KTExUYmKizp07d8NrrFar/P39HQ6mDwMAAABA9uWbBDY0NFQ7d+7Ufffdp5EjR6pmzZpq1aqV1q9fr/j4+Dtqe+7cubp8+bLi4uIUEhJiP7p06ZJD0QMAAAAAbsVi3M4bkHBHWjYdb3YIcJJU30JmhwAn8Fy13ewQ4CQelcLMDgHOkJ5udgRwkr9Di5kdApxgw5rRZodw2+L2tjc7hDsWW32F2SHckXwzAgsAAAAAyN9IYAEAAAAALoEEFgAAAADgEngtLgAAAABkQX7YR9XV8Q0AAAAAAFwCCSwAAAAAwCUwhRgAAAAAsiCdKcSm4xsAAAAAALgERmBz0ZUXL5gdApzEr9tZs0OAE5we3tjsEOAkpT85YnYIcIa0NLMjgJN4fpdodggA8ghGYAEAAAAALoERWAAAAADIApssZodQ4DECCwAAAABwCSSwAAAAAACXQAILAAAAAHAJrIEFAAAAgCxgH1jz8Q1k4vLly+ratav8/f1lsVh0/vx5s0MCAAAAgAIv3yawiYmJGjp0qEJDQ2W1WlW2bFl17NhR69evv+W1c+fO1XfffadNmzbpzJkzCggI0OLFi9W6dWsVLVpUFotFCQkJzu8EAAAAAMAuX04hPnbsmCIjIxUYGKjJkyerVq1aSk1N1erVqxUTE6P9+/ff9PrDhw+rWrVqqlmzpr3s0qVLatKkibp3766BAwc6uwsAAAAAgH/JlwlsdHS0LBaLtm3bJh8fH3t5jRo11L9/fxmGoXHjxumDDz7Qb7/9pqJFi6pbt25655131Lx5c33zzTeSJIvFombNmmnjxo167LHHJP2THAMAAAAoeGwG+8CaLd8lsOfOndOqVas0fvx4h+T1msDAQH3++ed66623tHDhQtWoUUOJiYnavXu3JGnx4sV67rnn9PPPP2vx4sXy9PTM7S4AAAAAADKR7xLYQ4cOyTAMVa1a9YZ1Tpw4oeDgYLVs2VKFChVSuXLl1KBBA0lSUFCQChcuLE9PTwUHB+dW2AAAAACAW8h3L3EyDOOWdR5++GFduXJFoaGhGjhwoJYsWaK0tLQcjSMlJUUXLlxwOGxXc/YeAAAAAFCQ5LsEtlKlSrJYLDd9UVPZsmV14MABzZgxQ97e3oqOjlbTpk2VmpqaY3HExcUpICDA4Ti5cEuOtQ8AAAAgd6XLzeUPV+f6PfiXoKAgtWnTRtOnT9elS5cynL+2p6u3t7c6duyod955Rxs3btTmzZu1Z8+eHIsjNjZWSUlJDkeZHg1zrH0AAAAAKGjy3RpYSZo+fboiIyPVoEEDvfzyy6pdu7bS0tK0du1axcfHa/To0UpPT9c999yjwoUL66OPPpK3t7fKly9/wzbPnTunEydO6PTp05KkAwcOSJKCg4MzXStrtVpltVodytw88+XjBgAAAIBcke9GYCUpNDRUO3fu1H333aeRI0eqZs2aatWqldavX6/4+HgFBgbqvffeU2RkpGrXrq1169bpyy+/VNGiRW/Y5rJly1SvXj116NBBktSjRw/Vq1dP7777bm51CwAAAAAKNIuRlbceIUdErh1tdghwEr9uZ80OAU5wekAts0OAk5T+5IjZIcAZcviFjMg7bBeSzQ4BTrD6yjyzQ7htz+5+2OwQ7tikOp+ZHcIdyZcjsAAAAACA/IcEFgAAAADgEkhgAQAAAAAugdfiAgAAAEAW2Bj/Mx3fAAAAAADAJZDAAgAAAABcAgksAAAAAMAlsAYWAAAAALIg3bCYHUKBRwKbi7qV2WV2CHCS1SpjdghwgpJTNpkdApwlJNjsCAAAQDYwhRgAAAAA4BIYgQUAAACALLAxhdh0jMACAAAAAFwCCSwAAAAAwCWQwAIAAAAAXEKBTGAtFouWLl16w/PHjh2TxWJRQkJCrsUEAAAAIG+zGW4uf7g61+9BJqKiomSxWDIcbdu2zdL1ZcuW1ZkzZ1SzZk1J0p9//qm2bduqVKlSslqtKlu2rIYMGaILFy44sxsAAAAAgOvk27cQt23bVrNnz3Yos1qtWbrW3d1dwcH/t0egm5ubOnXqpFdffVXFixfXoUOHFBMTo3PnzmnBggU5GjcAAAAAIHP5cgRW+idZDQ4OdjiKFCliP3/mzBm1a9dO3t7eCg0N1eeff24/9+8pxEWKFNGTTz6p+vXrq3z58mrRooWio6P13Xff5Xa3AAAAAKDAyrcJ7K28+OKL6tq1q3bv3q3evXurR48e2rdvX5auPX36tBYvXqxmzZo5OUoAAAAAeUW6LC5/uLp8m8AuX75cvr6+DseECRPs5x9++GE9/vjjqly5sl555RXVr19fU6dOvWmbPXv2VOHChVW6dGn5+/vr/fffd3Y3AAAAAAD/X75NYO+77z4lJCQ4HE888YT9fKNGjRzqN2rU6JYjsG+99ZZ27typL774QocPH9aIESNuWDclJUUXLlxwONKu2u6sUwAAAABQgOXblzj5+PgoPDw8R9u8tpa2atWqCgoK0r333qsXX3xRISEhGerGxcVp3LhxDmWto0PVdkhYjsYEAAAAAAVFvh2BvZUtW7Zk+FytWrUsX2+z/TOampKSkun52NhYJSUlORwtB1XMfsAAAAAATGUzLC5/uLp8OwKbkpKixMREhzIPDw8VK1ZMkvTZZ5+pfv36atKkiebPn69t27Zp1qxZmba1YsUK/fbbb7r77rvl6+ur//3vf3rmmWcUGRmpChUqZHqN1WrNsG2Ph2eB/X0BAAAAANyxfJvArlq1KsPU3ipVqmj//v2SpHHjxmnhwoWKjo5WSEiIPv74Y1WvXj3Ttry9vfXee+/p6aefVkpKisqWLasuXbroueeec3o/AAAAAAD/sBiGYZgdREHx1r7WZocAJ1ndsIzZIcAJ0i9eNDsEOIlHSLDZIcAZ0tLMjgBOYruQbHYIcILVV+aZHcJte2LHY2aHcMfejXC95369fDsCCwAAAAA5yWawJNBsfAMAAAAAAJdAAgsAAAAAcAkksAAAAAAAl8AaWAAAAADIAptcfx9VV8cILAAAAADAJZDAAgAAAABcAgksAAAAAMAlsAYWAAAAALIg3WANrNlIYHPRqkcbmR0CnCS9jqfZIcAJLN8nmB0CnMXd3ewI4AyF+N+a/MpSIsjsEADkEUwhBgAAAAC4BBJYAAAAAIBLYK4NAAAAAGSBzWD8z2x8AwAAAAAAl0ACCwAAAABwCUwhBgAAAIAssLGNjuny7AhsVFSULBZLhuPQoUNOud/YsWNVtWpV+fj4qEiRImrZsqW2bt3qlHsBAAAAAG5fnk1gJalt27Y6c+aMw1GxYkWn3Kty5cqaNm2a9uzZo++//14VKlRQ69atdfbsWafcDwAAAABwe/J0Amu1WhUcHOxwvP3226pVq5Z8fHxUtmxZRUdHKzk52X7NnDlzFBgYqOXLl6tKlSoqXLiwunXrpsuXL2vu3LmqUKGCihQpoqeeekrp6en263r16qWWLVsqNDRUNWrU0JtvvqkLFy7op59+stc5efKkevbsqaCgIPn4+Kh+/fqM0gIAAABALnG5NbBubm565513VLFiRR05ckTR0dF69tlnNWPGDHudy5cv65133tHChQt18eJFdenSRQ899JACAwO1YsUKHTlyRF27dlVkZKQeeeSRDPe4evWqZs6cqYCAANWpU0eSlJycrGbNmql06dJatmyZgoODtXPnTtlstlzrOwAAAADz2MQaWLPl6QR2+fLl8vX1tX9u166dPvvsM/vnChUq6NVXX9UTTzzhkMCmpqYqPj5eYWFhkqRu3bpp3rx5+u233+Tr66vq1avrvvvu04YNGxwS2OXLl6tHjx66fPmyQkJCtHbtWhUrVkyStGDBAp09e1bbt29XUFCQJCk8PNyp/QcAAAAA/J88ncDed999io+Pt3/28fHRunXrFBcXp/379+vChQtKS0vT33//rcuXL6tw4cKSpMKFC9uTV0kqWbKkKlSo4JAMlyxZUr///nuG+yUkJOiPP/7Qe++9p+7du2vr1q0qUaKEEhISVK9ePXvyeispKSlKSUlxKLPZ0uTmlqcfOQAAAADkWXl6DayPj4/Cw8PtR0pKih544AHVrl1bixYt0o4dOzR9+nRJ/0z7vaZQoUIO7VgslkzL/j3999r9GjZsqFmzZsnDw0OzZs2SJHl7e99W7HFxcQoICHA4jiR+f1ttAAAAAAD+T55OYP9tx44dstlseuONN9SwYUNVrlxZp0+fdtr9bDabfRS1du3aSkhI0Llz57J0bWxsrJKSkhyO0OAmTosVAAAAgHPZDIvLH67OpRLY8PBwpaamaurUqTpy5IjmzZund999947bvXTpkv7zn/9oy5YtOn78uHbs2KH+/fvr1KlTevjhhyVJPXv2VHBwsDp37qwffvhBR44c0aJFi7R58+ZM27RarfL393c4mD4MAAAAANnnUglsnTp19Oabb+q1115TzZo1NX/+fMXFxd1xu+7u7tq/f7+6du2qypUrq2PHjvrzzz/13XffqUaNGpIkT09PrVmzRiVKlFD79u1Vq1YtTZw4Ue7u7nd8fwAAAADArVkMwzDMDqKgaBMxxuwQ4CTpPp5mhwAnsHyfYHYIcBKPMqXNDgHO4Ob6U+OQOcOvsNkhwAlW7Rlvdgi3reeWQWaHcMc+bjjT7BDuCHNaAQAAACALbIZLTWDNl/gGAAAAAAAugQQWAAAAAOASSGABAAAAAC6BNbAAAAAAkAX5YR9VV8cILAAAAADAJZDAAgAAAABcAgksAAAAAMAlsAYWAAAAALLAJtbAmo0ENhdZjp42OwQ4iUd6utkhwAlOjWhsdghwkjIfHzE7BDhDSprZEcBJjN/+MDsEAHkEU4gBAAAAAC6BBBYAAAAA4BKYQgwAAAAAWcA+sOZjBBYAAAAA4BJIYAEAAAAALoEENhNRUVHq3Lmz2WEAAAAAAK7j0glsVFSULBZLhuPQoUM5ep+4uDjdfffd8vPzU4kSJdS5c2cdOHAgR+8BAAAAIG+zGRaXP1ydSyewktS2bVudOXPG4ahYsWKO3uObb75RTEyMtmzZorVr1yo1NVWtW7fWpUuXcvQ+AAAAAIAbc/kE1mq1Kjg42OFwd3fXN998owYNGshqtSokJETPPfec0tL+b4Pzzz//XLVq1ZK3t7eKFi2qli1b3jAhXbVqlaKiolSjRg3VqVNHc+bM0YkTJ7Rjx47c6iYAAAAAFHgun8Bm5tSpU2rfvr3uvvtu7d69W/Hx8Zo1a5ZeffVVSdKZM2fUs2dP9e/fX/v27dPGjRvVpUsXGYaRpfaTkpIkSUFBQU7rAwAAAADAkcvvA7t8+XL5+vraP7dr106VK1dW2bJlNW3aNFksFlWtWlWnT5/W6NGj9dJLL+nMmTNKS0tTly5dVL58eUlSrVq1snQ/m82m4cOHKzIyUjVr1nRKnwAAAADkPflhDamrc/kE9r777lN8fLz9s4+Pj2JiYtSoUSNZLP/3AxYZGank5GSdPHlSderUUYsWLVSrVi21adNGrVu3Vrdu3VSkSJFb3i8mJkY///yzvv/++5vWS0lJUUpKikOZzUiXm8X9NnsIAAAAAJDywRRiHx8fhYeH24+QkJBbXuPu7q61a9dq5cqVql69uqZOnaoqVaro6NGjN71uyJAhWr58uTZs2KAyZcrctG5cXJwCAgIcjiN/J9xO1wAAAAAA13H5BDYz1apV0+bNmx3WtP7www/y8/OzJ54Wi0WRkZEaN26cdu3aJU9PTy1ZsiTT9gzD0JAhQ7RkyRJ9/fXXWXrLcWxsrJKSkhyOUK+6OdI/AAAAALnP7C1w2EYnH0whzkx0dLSmTJmioUOHasiQITpw4IDGjBmjESNGyM3NTVu3btX69evVunVrlShRQlu3btXZs2dVrVq1TNuLiYnRggUL9MUXX8jPz0+JiYmSpICAAHl7e2d6jdVqldVqdShj+jAAAAAAZF++TGBLly6tFStW6JlnnlGdOnUUFBSkAQMG6IUXXpAk+fv769tvv9WUKVN04cIFlS9fXm+88YbatWuXaXvX1tg2b97coXz27NmKiopyZlcAAAAAAP+fxcjq3jG4Y22DBpodApwlPd3sCOAEpwZm7e3kcD1lPj5idghwhuv2e0f+YruQbHYIcILVV+aZHcJt6/DtU2aHcMe+avqO2SHckXw5AgsAAAAAOc0m119D6ury5UucAAAAAAD5DwksAAAAAMAlkMACAAAAAFwCa2ABAAAAIAvywz6qro4RWAAAAACASyCBBQAAAAC4BBJYAAAAAIBLYA1sbiobbHYEcJKrJXzMDgFOEPzmJrNDgLOEVjA7AgC3Ib1KGbNDACSxBjYvYAQWAAAAAOASSGABAAAAAC6BBBYAAAAA4BJYAwsAAAAAWcAaWPMxAgsAAAAAyCA+Pl61a9eWv7+//P391ahRI61cudLUmEhgAQAAAAAZlClTRhMnTtSOHTv0448/6v7771enTp30v//9z7SYSGBvICoqSp07dzY7DAAAAAAwRceOHdW+fXtVqlRJlStX1vjx4+Xr66stW7aYFpPLJbCJiYkaNmyYwsPD5eXlpZIlSyoyMlLx8fG6fPlyjt3n7bff1pw5c+yf4+LidPfdd8vPz08lSpRQ586ddeDAgRy7HwAAAIC8zWZYXP7IrvT0dC1cuFCXLl1So0aNcvCp3h6XeonTkSNHFBkZqcDAQE2YMEG1atWS1WrVnj17NHPmTJUuXVoPPvhgjtwrICDA4fM333yjmJgY3X333UpLS9N//vMftW7dWnv37pWPj0+O3BMAAAAAnCklJUUpKSkOZVarVVarNdP6e/bsUaNGjfT333/L19dXS5YsUfXq1XMj1Ey51AhsdHS0PDw89OOPP6p79+6qVq2aQkND1alTJ3311Vfq2LGjJMlisej999/XQw89pMKFC6tSpUpatmyZvZ309HQNGDBAFStWlLe3t6pUqaK3337b4V7/nkK8atUqRUVFqUaNGqpTp47mzJmjEydOaMeOHbnSdwAAAAC4U3FxcQoICHA44uLibli/SpUqSkhI0NatW/Xkk0+qb9++2rt3by5G7MhlEtg///xTa9asUUxMzA1HPC2W/xsSHzdunLp3766ffvpJ7du3V+/evXXu3DlJks1mU5kyZfTZZ59p7969eumll/Sf//xHn376aZbjSUpKkiQFBQXdQa8AAAAAIPfExsYqKSnJ4YiNjb1hfU9PT4WHhysiIkJxcXGqU6dOhsG/3OQyCeyhQ4dkGIaqVKniUF6sWDH5+vrK19dXo0ePtpdHRUWpZ8+eCg8P14QJE5ScnKxt27ZJkgoVKqRx48apfv36qlixonr37q1+/fplOYG12WwaPny4IiMjVbNmzZzrJAAAAIA8yzAsLn9YrVb7tjjXjhtNH86MzWbLMAU5N7nUGtjMbNu2TTabTb1793Z4kLVr17b/2cfHR/7+/vr999/tZdOnT9cHH3ygEydO6MqVK7p69arq1q2bpXvGxMTo559/1vfff3/DOpnNLbfZ0uTm5vKPHAAAAEABEBsbq3bt2qlcuXK6ePGiFixYoI0bN2r16tWmxeQyI7Dh4eGyWCwZ3vwbGhqq8PBweXt7O5QXKlTI4bPFYpHNZpMkLVy4UKNGjdKAAQO0Zs0aJSQkqF+/frp69eot4xgyZIiWL1+uDRs2qEyZMjesl9nc8iO//5DV7gIAAACAqX7//Xf16dNHVapUUYsWLbR9+3atXr1arVq1Mi0mlxkOLFq0qFq1aqVp06Zp6NChd/Tm3x9++EGNGzdWdHS0vezw4cM3vcYwDA0dOlRLlizRxo0bVbFixZvWj42N1YgRIxzKukXeeHE0AAAAAOQls2bNMjuEDFwmgZWkGTNmKDIyUvXr19fYsWNVu3Ztubm5afv27dq/f78iIiKy1E6lSpX04YcfavXq1apYsaLmzZun7du33zQpjYmJ0YIFC/TFF1/Iz89PiYmJkv7Zbuffo79S5q+iZvowAAAA4Lpsyv4+qsgZLpVRhYWFadeuXZowYYJiY2N18uRJWa1WVa9eXaNGjXIYUb2ZwYMHa9euXXrkkUdksVjUs2dPRUdHa+XKlTe8Jj4+XpLUvHlzh/LZs2crKioqu10CAAAAAGSRxTAMw+wgCoq2dV40OwQ4ydUS2Z/SjrzLfT37POdXHqEVzA4BwG1ILRVodghwgnXfPm92CLet6fpnzA7hjn3bYrLZIdwRlxqBBQAAAACz2AymEJvNZd5CDAAAAAAo2EhgAQAAAAAugQQWAAAAAOASWAMLAAAAAFlgsAbWdIzAAgAAAABcAgksAAAAAMAlkMACAAAAAFwCa2BzkeXKVbNDgJMcjSpsdghwgvD1ZkcAp7maanYEcAabzewI4CSFjp01OwRAEvvA5gWMwAIAAAAAXAIJLAAAAADAJZDAAgAAAABcAmtgAQAAACAL2AfWfIzAAgAAAABcAgksAAAAAMAlkMACAAAAAFxCgUpgExMTNWzYMIWHh8vLy0slS5ZUZGSk4uPjdfnyZbPDAwAAAJCH2QyLyx+ursC8xOnIkSOKjIxUYGCgJkyYoFq1aslqtWrPnj2aOXOmSpcurQcffDDDdampqSpUqJAJEQMAAAAArldgEtjo6Gh5eHjoxx9/lI+Pj708NDRUnTp1kmEYkiSLxaIZM2Zo5cqVWr9+vZ555hlJ0tKlSzVy5Ei9+OKL+uuvv9SuXTu999578vPzM6U/AAAAAFDQFIgpxH/++afWrFmjmJgYh+T1ehbL/w2njx07Vg899JD27Nmj/v37S5IOHz6spUuXavny5Vq+fLm++eYbTZw4MVfiBwAAAAAUkAT20KFDMgxDVapUcSgvVqyYfH195evrq9GjR9vLe/XqpX79+ik0NFTlypWTJNlsNs2ZM0c1a9bUvffeq8cee0zr16/P1X4AAAAAMI9huP7h6grMFOLMbNu2TTabTb1791ZKSoq9vH79+hnqVqhQwWG6cEhIiH7//fcbtp2SkuLQpiTZbGlycyvQjxwAAAAAsq1AjMCGh4fLYrHowIEDDuWhoaEKDw+Xt7e3Q3lm04z//SIni8Uim812w3vGxcUpICDA4Tj815Y76AUAAAAAFGwFIoEtWrSoWrVqpWnTpunSpUu5cs/Y2FglJSU5HGFFGubKvQEAAAAgPyow81lnzJihyMhI1a9fX2PHjlXt2rXl5uam7du3a//+/YqIiMjR+1mtVlmtVocypg8DAAAArssm199H1dUVmIwqLCxMu3bt0oQJExQbG6uTJ0/KarWqevXqGjVqlKKjo80OEQAAAABwExbDyA/vonIN7SqPvnUluKT9YwLNDgFOEP7YTrNDgJN4lCltdghwhpu8mwIuzq1ArHorcFaemGJ2CLctYuXzZodwx3a0G292CHeEfw0AAAAAAC6hwEwhBgAAAIA7YRisgTUbI7AAAAAAAJdAAgsAAAAAcAkksAAAAAAAl8AaWAAAAADIAhtrYE3HCCwAAAAAwCWQwAIAAAAAXAJTiHORzc/L7BDgJFVHnzE7BDjBqeGNzQ4BTlL6s2NmhwDgNtjO/ml2CIAkyTDMjgCMwAIAAAAAXAIJLAAAAADAJZDAAgAAAABcAmtgAQAAACALDLbRMR0jsAAAAAAAl0ACCwAAAABwCSSw2TR27FjVrVvX7DAAAAAAoMDId2tgo6KidP78eS1dutTsUAAAAADkI6yBNR8jsAAAAAAAl5CvE1ibzaZJkyYpPDxcVqtV5cqV0/jx4+3n9+zZo/vvv1/e3t4qWrSoBg0apOTkZPv5jRs3qkGDBvLx8VFgYKAiIyN1/PhxM7oCAAAAAAVevk5gY2NjNXHiRL344ovau3evFixYoJIlS0qSLl26pDZt2qhIkSLavn27PvvsM61bt05DhgyRJKWlpalz585q1qyZfvrpJ23evFmDBg2SxcK0AQAAAAAwQ75bA3vNxYsX9fbbb2vatGnq27evJCksLExNmjSRJC1YsEB///23PvzwQ/n4+EiSpk2bpo4dO+q1115ToUKFlJSUpAceeEBhYWGSpGrVqpnTGQAAAACms7EG1nT5dgR23759SklJUYsWLW54vk6dOvbkVZIiIyNls9l04MABBQUFKSoqSm3atFHHjh319ttv68yZM1m+f0pKii5cuOBw2Gxpd9wvAAAAACio8m0C6+3tfcdtzJ49W5s3b1bjxo31ySefqHLlytqyZUuWro2Li1NAQIDDcSTx+zuOCQAAAAAKqnybwFaqVEne3t5av359puerVaum3bt369KlS/ayH374QW5ubqpSpYq9rF69eoqNjdWmTZtUs2ZNLViwIEv3j42NVVJSksMRGtzkzjoFAAAAAAVYvk1gvby8NHr0aD377LP68MMPdfjwYW3ZskWzZs2SJPXu3VteXl7q27evfv75Z23YsEFDhw7VY489ppIlS+ro0aOKjY3V5s2bdfz4ca1Zs0YHDx7M8jpYq9Uqf39/h8PNLd8uOQYAAADyPcNw/cPV5euM6sUXX5SHh4deeuklnT59WiEhIXriiSckSYULF9bq1as1bNgw3X333SpcuLC6du2qN998035+//79mjt3rv7880+FhIQoJiZGgwcPNrNLAAAAAFBgWQwjP+ThrqFNxBizQ4CTuP32l9khwAlOda9odghwktKfHTM7BDgD/0uTb9n+5L+z+dHqK/PMDuG2VV861uwQ7tjezmPNDuGO5NspxAAAAACA/CVfTyEGAAAAgJxisA+s6RiBBQAAAAC4BBJYAAAAAIBLIIEFAAAAALgE1sACAAAAQBawBtZ8jMACAAAAAFwCCSwAAAAAwCUwhTgXWY6eNjsEOImRnm52CHCCklM2mR0CnOSr07vNDgFOMOR0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b5O3EAMAAAAAXAIJLAAAAADAJZDAAgAAAABcAmtgAQAAACArDF4WZzYS2Ew0b95cdevW1ZQpU8wOBQAAAABcxrJly7Jc98EHH7zt9klg/7+oqCidP39eS5cudShPTU3VCy+8oBUrVujIkSMKCAhQy5YtNXHiRJUqVcqcYAEAAAAgD+rcuXOW6lksFqWnp992+6yBvYXLly9r586devHFF7Vz504tXrxYBw4cyNZvCwAAAAAgP7PZbFk6spO8SozA3lJAQIDWrl3rUDZt2jQ1aNBAJ06cULly5UyKDAAAAECuYh9Y05HAZkNSUpIsFosCAwPNDgUAAAAA8ox33nkny3Wfeuqp226fBPY2/f333xo9erR69uwpf39/s8MBAAAAgDzjrbfeylI9i8VCAutsqamp6t69uwzDUHx8/E3rpqSkKCUlxaHMZqTLzeLuzBABAAAAwDRHjx51avu8xCmLriWvx48f19q1a285+hoXF6eAgACH48jfCbkTLAAAAICcZ+SDwwRXr17VgQMHlJaWdsdtkcBmwbXk9eDBg1q3bp2KFi16y2tiY2OVlJTkcIR61XV+sAAAAACQB1y+fFkDBgxQ4cKFVaNGDZ04cUKSNHToUE2cODFbbZLA3kJqaqq6deumH3/8UfPnz1d6eroSExOVmJioq1ev3vA6q9Uqf39/h4PpwwAAAAAKitjYWO3evVsbN26Ul5eXvbxly5b65JNPstUma2Bv4dSpU1q2bJkkqW7dug7nNmzYoObNm+d+UAAAAACQxy1dulSffPKJGjZsKIvFYi+vUaOGDh8+nK02SWD/vzlz5tj/vHHjRvufK1SoIMNgwycAAACgwCMtuC1nz55ViRIlMpRfunTJIaG9HUwhBgAAAADkuPr16+urr76yf76WtL7//vtq1KhRttpkBBYAAAAAkOMmTJigdu3aae/evUpLS9Pbb7+tvXv3atOmTfrmm2+y1SYjsAAAAACQFYbF9Y9c1KRJEyUkJCgtLU21atXSmjVrVKJECW3evFkRERHZapMRWAAAAACAU4SFhem9997LsfYYgQUAAAAA5LgVK1Zo9erVGcpXr16tlStXZqtNElgAAAAAQI577rnnlJ6enqHcMAw999xz2Woz2wnsd999p0cffVSNGjXSqVOnJEnz5s3T999/n90mAQAAACDPshiuf+SmgwcPqnr16hnKq1atqkOHDmWrzWwlsIsWLVKbNm3k7e2tXbt2KSUlRZKUlJSkCRMmZCsQAAAAAED+ERAQoCNHjmQoP3TokHx8fLLVZrZe4vTqq6/q3XffVZ8+fbRw4UJ7eWRkpF599dVsBQIAQG7x23rc7BDgBG9sWWx2CHCSp5ffb3YIQIEUFxenxYsXa//+/fL29lbjxo312muvqUqVKlm6vlOnTho+fLiWLFmisLAwSf8kryNHjtSDDz6YrZiyNQJ74MABNW3aNEN5QECAzp8/n61AAAAAAAB5xzfffKOYmBht2bJFa9euVWpqqlq3bq1Lly5l6fpJkybJx8dHVatWVcWKFVWxYkVVq1ZNRYsW1euvv56tmLI1AhscHKxDhw6pQoUKDuXff/+9QkNDsxUIAAAAAORpubyG1GyrVq1y+DxnzhyVKFFCO3bsyHRA898CAgK0adMmrV27Vrt375a3t7dq166dpWtvJFsJ7MCBAzVs2DB98MEHslgsOn36tDZv3qxRo0bpxRdfzHYwAAAAAADnSUlJsb/D6Bqr1Sqr1XrLa5OSkiRJQUFBWb6fxWJR69at1bp169sL9AayNYX4ueeeU69evdSiRQslJyeradOmevzxxzV48GANHTo0RwIDAAAAAOSsuLg4BQQEOBxxcXG3vM5ms2n48OGKjIxUzZo1cyHSzGVrBNZisej555/XM888o0OHDik5OVnVq1eXr69vTscHAAAAAMghsbGxGjFihENZVkZfY2Ji9PPPP5u+bWq2EthrPD09M93XBwAAAACQ92R1uvD1hgwZouXLl+vbb79VmTJlnBRZ1mRrCvGlS5f04osvqnHjxgoPD1doaKjDkdc1b95cw4cPNzsMAAAAAMizDMPQkCFDtGTJEn399deqWLFilq9NS0vThx9+qN9++y1HY8rWCOzjjz+ub775Ro899phCQkJksVhyNChniIqK0vnz57V06VKH8tTUVL3wwgtasWKFjhw5ooCAALVs2VITJ05UqVKl7PXGjx+vr776SgkJCfL09GS7IAAAAAD5WkxMjBYsWKAvvvhCfn5+SkxMlPTP24W9vb1veq2Hh4eeeOIJ7du3L0djylYCu3LlSn311VeKjIzM0WDMcPnyZe3cuVMvvvii6tSpo7/++kvDhg3Tgw8+qB9//NFe7+rVq3r44YfVqFEjzZo1y8SIAQAAAMD54uPjJf0zg/V6s2fPVlRU1C2vb9CggRISElS+fPkciylbCWyRIkVu69XJeVlAQIDWrl3rUDZt2jQ1aNBAJ06cULly5SRJ48aNk/TP3kcAAAAACh5LAdsH1jDurMPR0dEaMWKEfv31V0VERMjHx8fhfO3atW+7zWwlsK+88opeeuklzZ07V4ULF85OE3laUlKSLBaLAgMDzQ4FAAAAAFxSjx49JElPPfWUvcxiscgwDFksFqWnp992m9lKYN944w0dPnxYJUuWVIUKFVSoUCGH8zt37sxOs3nC33//rdGjR6tnz57y9/c3OxwAAAAAcElHjx7N8TazlcB27tw5h8PIG1JTU9W9e3cZhmGf751dKSkpSklJcSizGelys7jfUbsAAAAA4Apycu3rNdlKYMeMGZPTcZjuWvJ6/Phxff3113c8+hoXF2dfN3tNmFc9hXtH3FG7AAAAAExi5P3dV/KaefPm6d1339XRo0e1efNmlS9fXlOmTFHFihXVqVOn224vW/vAStL58+f1/vvvKzY2VufOnZP0z9ThU6dOZbdJ01xLXg8ePKh169apaNGid9xmbGyskpKSHI5Qr7p3HiwAAAAAuID4+HiNGDFC7du31/nz5+1rXgMDAzVlypRstZmtEdiffvpJLVu2VEBAgI4dO6aBAwcqKChIixcv1okTJ/Thhx9mKxgzpKamqlu3btq5c6eWL1+u9PR0+/5GQUFB8vT0lCSdOHFC586d04kTJ5Senq6EhARJUnh4uHx9fTO0a7VaZbVaHcqYPgwAAACgoJg6daree+89de7cWRMnTrSX169fX6NGjcpWm9kagR0xYoSioqJ08OBBeXl52cvbt2+vb7/9NluBmOXUqVNatmyZTp48qbp16yokJMR+bNq0yV7vpZdeUr169TRmzBglJyerXr16qlevnsNesQAAAACAfxw9elT16tXLUG61WnXp0v9r787jqqr2/4+/N6AHEAXBATWcwgETxTkpx+zikKmpTZaS5VCZmWmGaer1KlqZmpXZBNa10hy4Zje7auI1zRwKTTOcQw2HMjAcEGH//ujX+XouqIgcthtez8djPR7nrL322p/NEfDDGvaZAvVZoBHYLVu2aN68ebnqq1Wr5hy9vNFc+vzWxMRE5+uaNWvm6/lG8fHxPAMWAAAAKMlK2HNgr1etWrWUlJSUazOnlStXKiwsrEB9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9913VatWLXl7e0uSUlJS1KNHD/n5+alcuXK69957dfz4cWeff503b948hYSEyNfXV/fee2+eI3uvvPKKqlSpoqCgID355JPKyspyHvvwww/VvHlzlS1bVsHBwXrwwQd14sQJl/OXL1+uOnXqyNvbWx06dND8+fNzjS5+/fXXatOmjXx8fBQSEqLhw4frzJkzBfjK28Nff/yJjY29atsdO3bo9ttvV+vWrZWQkCAfH598XWPDhg1q3769fH19Vb58eUVFRTkT5pycHMXGxqpWrVry8fFR48aNtXjx4uu6p+Lkr9+JwcHB8vf3l2EYLnV+fn5X7WPXrl266667VK5cOZUtW1Zt2rRx+d5+9913FRYWJm9vb9WvX19vvvlmocS+aNEiLViwQB9//LHGjh2rFi1aqGbNmurRo4e++uordejQwdnWy8tLwcHBqlq1qsLDw/XUU09p3bp12rlzp6ZPn+7S79GjR/XUU09pwYIFKlWqVKHEWtT4XF0/140bN2rAgAHO3+GDBw9W48aNtXnz5kKJGSgsJLC4ooyMDP3zn/9UaGiogoKCrtq2Xbt2Onr0qJYvX67t27frueeeU05OjiRp/fr16t+/v55++mn9+OOPmjdvnuLj4zVlypSiuBVcxvz58+Xl5aXNmzdr9uzZevXVV/Xuu+9e8ZwBAwaofPnyzmTs008/1YULF/Tcc8/l2Z61cn8aOHCg4uLinO/ff/99PfLIIy5tzpw5o5EjR2rr1q1as2aNPDw81KtXL+f30dW+zyRp3759WrJkiZYuXaqkpCTl5OSoR48eOnXqlNatW6dVq1bpwIEDuu+++1yuvW/fPi1atEifffaZVq5cqe+//15PPPGES5u1a9dq//79Wrt2rebPn6/4+HjFx8c7j2dlZWny5Mnavn27EhISdOjQIZfp0QcPHlSfPn3Us2dPbd++XUOGDNELL7zgco39+/erc+fO6t27t3bs2KGFCxfq66+/1rBhwwr0dbcDT09PTZ06VXPmzNGRI0cu227jxo1q166devfurX/+85/y8vLKV/9JSUm644471KBBA33zzTf6+uuv1b17d2VnZ0uSYmNj9cEHH+itt97Srl279Mwzz+ihhx7SunXrCuX+SrqjR4+qbdu2cjgc+uqrr7Rt2zYNHDjQ+QfcBQsW6MUXX9SUKVO0e/duTZ06VePHj9f8+fOv+9oLFixQvXr11KNHj1zHDMO46uh9/fr11aVLF5c/vuXk5Ojhhx/W6NGjdcstt1x3jHZV3D7XyMhILV++XEePHpVpmlq7dq327Nmjv/3tb9cdL1CoTOASAwYMMD09Pc0yZcqYZcqUMSWZVapUMbdt23bVc+fNm2eWLVvW/O233/I8fscdd5hTp051qfvwww/NKlWqON9LMpctW2aapmkePHjQlGR+//33Bb4fXFm7du3MsLAwMycnx1k3ZswYMywszHn86aefzvPcVq1amV26dDFN0zQff/xxs1y5cm6P164GDBhg9ujRwzxx4oTpcDjMQ4cOmYcOHTK9vb3NkydPmj169DAHDBiQ57knT540JZk//PCDaZpX/z6bMGGCWapUKfPEiRPOuv/85z+mp6enmZKS4qzbtWuXKcncvHmz8zxPT0/zyJEjzjZffPGF6eHhYaampjrvo0aNGubFixedbfr27Wved999l733LVu2mJLMP/74wzTNP/99NWzY0KXNCy+8YEoyf//9d9M0TfPRRx81Bw8e7NJm/fr1poeHh3nu3LnLXsuu/vr3YZqmeeutt5oDBw40TdM0ly1bZv71a3rt2rWmJLN06dLmww8/fM3XeOCBB8zbbrstz2Pnz583fX19zY0bN7rUP/roo+YDDzzgcv2/PqO4uDjT39//muMoDgpy7zExMWatWrXMCxcu5Hn85ptvNj/66COXusmTJ5utW7c2TTP378P//TyuJCwszLz77ruv2m7ChAlm48aN8zw2ZswY08fHx/l+6tSp5p133un83VGjRg1z5syZV73GjYzP9c+fBf379zclmV5eXmbp0qXN+fPnX/UaQFHL359uUaJ06NBBc+fOlST9/vvvevPNN9WlSxdt3rxZNWrUuOx5SUlJatKkiQIDA/M8vn37dm3YsMFlxDU7O1vnz5/X2bNn5evrW7g3gny59dZbnRvFSFLr1q01Y8YM58jM5Zim6Tzv0te4vIoVK6pbt26Kj4+XaZrq1q2bKlSo4NJm7969evHFF/Xtt9/q119/dY6spqSkqGHDhlf9PpOkGjVqqGLFis73u3fvVkhIiEJCQpx1DRo0UEBAgHbv3q0WLVpIkqpXr65q1ao527Ru3Vo5OTlKTk5WcHCwpD/XUnl6ejrbVKlSRT/88IPz/bZt2zRx4kRt375dv//+u0v8DRo0UHJysvN6f2nZsqXL++3bt2vHjh1asGCBs840TeXk5OjgwYMKCwu77L3b3fTp09WxY8fLrr3r0aOHli1bpvXr16tNmzb57jcpKUl9+/bN89i+fft09uxZ3XnnnS71Fy5ccJnejoJLSkpSmzZt8pxqe+bMGe3fv1+PPvqoBg0a5Ky/ePFioaxtNi9ZEnI9ffz1M37btm2aPXu2vvvuuxL/c784fa6SNGfOHG3atEnLly9XjRo19N///ldPPvmkqlatqk6dOl339YDCQgKLXMqUKaPQ0FDn+3fffVf+/v5655139I9//OOy511tHVZGRoYmTZqke+65J9exv9bpwR6ys7O1d+9eZyJSt25dpaenKzU1VVWqVLE4uhvbwIEDnVNh33jjjVzHu3fvrho1auidd95R1apVlZOTo4YNGzo3Y8rPescyZcoUbtCX+N//qBmG4UxSz5w5o6ioKEVFRWnBggWqWLGiUlJSFBUVdU2bSWVkZGjIkCEaPnx4rmPu3PDqRtC2bVtFRUUpJiYmz52p582bp+eee05dunTRv//9b7Vt2zZf/V7p301GRoYk6fPPP3f5A4b0554IuH75+fq/8847atWqlcuxS/9YVFB169bVTz/9dF197N69W7Vq1ZL053KgEydOuHwvZmdn69lnn9WsWbN06NCh67qWnRSnz/XcuXMaO3asli1bpm7dukmSGjVqpKSkJL3yyisksLihsAYWV2UYhjw8PFx2T83LXz/oTp06lefxpk2bKjk5WaGhobmKhwf/FK1y6SZbkrRp0ybVqVPnir9g58+fr99//129e/eWJPXp00elS5fWSy+9lGd7nmn3fzp37qwLFy4oKytLUVFRLsd+++03JScna9y4cbrjjjsUFhaWa1faq32f5SUsLEyHDx/W4cOHnXU//vij0tLS1KBBA2ddSkqKfvnlF+f7TZs2ycPDQ/Xq1cvXdX766Sf99ttvmjZtmtq0aaP69evn2sCpXr162rp1q0vdli1bXN43bdpUP/74Y54/K0qXLp3v+7aradOm6bPPPtM333yT65hhGHr77bfVr18/de3aNd9rVBs1aqQ1a9bkeaxBgwZyOBxKSUnJ9fW+dNQeBdeoUSOtX7/eZcOzv1SuXFlVq1bVgQMHcn39/0ourseDDz6oPXv26F//+leuY6ZpXvURTD/99JNWrlzp/Hn/8MMPa8eOHUpKSnKWqlWravTo0fryyy+vO147KU6fa1ZWlrKysnL9f8zT09NljwXgRkDWgFwyMzN17NgxHTt2TLt379ZTTz2ljIwMde/e/YrnPfDAAwoODlbPnj21YcMGHThwQEuWLHH+J+zFF1/UBx98oEmTJmnXrl3avXu3PvnkE40bN64obguXkZKSopEjRyo5OVkff/yx5syZo6efftp5/OzZszp27JiOHDmiTZs2acyYMRo6dKgef/xx5y6HISEhmjlzpmbPnq1HH31U69at088//6wNGzZoyJAhmjx5slW3d8Px9PTU7t279eOPP+b6I0H58uUVFBSkt99+W/v27dNXX32lkSNHurS52vdZXjp16qTw8HD169dP3333nTZv3qz+/furXbt2at68ubOdt7e3BgwYoO3bt2v9+vUaPny47r33Xuf04aupXr26SpcurTlz5ujAgQNavnx5rs9+yJAh+umnnzRmzBjt2bNHixYtcm4C9ddUtjFjxmjjxo0aNmyYkpKStHfvXv3rX/8q1ps4Xeqvz+q1117L87hhGHrrrbfUv39/de3aVYmJiVftMyYmRlu2bNETTzyhHTt26KefftLcuXP166+/qmzZsho1apSeeeYZzZ8/X/v379d3332nOXPmFMpmM5CGDRum06dP6/7779fWrVu1d+9effjhh0pOTpYkTZo0SbGxsXrttde0Z88e/fDDD4qLi9Orr7563de+9957dd999+mBBx7Q1KlTtXXrVv38889asWKFOnXqpLVr1zrbXrx4UceOHdMvv/yiH374QXPmzFG7du0UERGh0aNHS5KCgoLUsGFDl1KqVCkFBwfn+49dxUVx+lzLlSundu3aafTo0UpMTNTBgwcVHx+vDz74QL169brueIFCZdXiW9yYBgwYYEpylrJly5otWrQwFy9enK/zDx06ZPbu3dssV66c6evrazZv3tz89ttvncdXrlxpRkZGmj4+Pma5cuXMli1bmm+//bbzuNjEqUi1a9fOfOKJJ8yhQ4ea5cqVM8uXL2+OHTvWuTFHu3btnP8WSpcubVapUsW86667zKVLl+bZ36pVq8yoqCizfPnypre3t1m/fn1z1KhR5i+//FKUt3XDuXSTnrxcuonTqlWrzLCwMNPhcJiNGjUyExMTXb4vTPPK32eX27Dj559/Nu+++26zTJkyZtmyZc2+ffuax44dcx7/67w333zTrFq1qunt7W326dPHPHXq1BXv4+mnnzbbtWvnfP/RRx+ZNWvWNB0Oh9m6dWtz+fLlub6P//Wvf5mhoaGmw+Ew27dvb86dO9eU5LJB0+bNm80777zT9PPzM8uUKWM2atTInDJlyuW/yDaW19f14MGDZunSpXNt4nTp5i45OTnmk08+afr6+ppfffXVVa+TmJhoRkZGmg6HwwwICDCjoqKc/eXk5JizZs0y69WrZ5YqVcqsWLGiGRUVZa5bty7P67OJk/81n7d9+3bzb3/7m+nr62uWLVvWbNOmjbl//37n8QULFpgRERFm6dKlzfLly5tt27Z1/qy9ns1+TNM0s7Ozzblz55otWrQwfX19zXLlypnNmjUzZ8+ebZ49e9Y0zT9/Bvz1897T09MMDAw0b7/9dnPmzJnm+fPnr9h/Sd3EyTSL1+eamppqRkdHO38H1KtXz5wxY4bLRo/AjcAwzUJYBQ7Altq3b6+IiAjNmjXL6lBgsYkTJyohIUFJSUlFfu0pU6borbfecpniDAAAkBc2cQIAFKk333xTLVq0UFBQkDZs2KCXX365xEwPBgAA14c1sMi3qVOnys/PL8/SpUsXq8MDYBN79+5Vjx491KBBA02ePFnPPvusJk6caHVYttalS5fL/nyeOnWq1eEVe0OHDr3s13/o0KFuvTafvfvwuQI3JqYQI99OnTp12Z1PfXx8cj1+AQBQNI4ePXrZneIDAwOv+NxgXL8TJ07o9OnTeR4rV66cKlWq5LZr89m7D58rcGMigQUAAAAA2AJTiAEAAAAAtkACCwAAAACwBRJYAAAAAIAtkMACAAAAAGyBBBYAYHsTJ05URESE8310dLR69uxpWTwAAMA9SGABAJY6duyYnnrqKdWuXVsOh0MhISHq3r271qxZ45brRUdHyzCMy5aaNWu65boAAOD6eVkdAACg5Dp06JBuu+02BQQE6OWXX1Z4eLiysrL05Zdf6sknn9RPP/1U6NecPXu2pk2b5nxfpUoVxcXFqXPnzpIkT0/PQr8mAAAoHIzAAgAs88QTT8gwDG3evFm9e/dW3bp1dcstt2jkyJHatGmTs11aWpoee+wxVaxYUeXKlVPHjh21ffv2Al3T399fwcHBziJJAQEBCg4O1tixY/XII4+4tM/KylKlSpX03nvvSZLat2+vYcOGadiwYfL391eFChU0fvx4XfpY9czMTI0aNUrVqlVTmTJl1KpVKyUmJhYoXgAA8H9IYAEAljh16pRWrlypJ598UmXKlMl1PCAgwPm6b9++OnHihL744gtt27ZNTZs21R133KFTp04VakyPPfaYVq5cqdTUVGfdihUrdPbsWd13333Ouvnz58vLy0ubN2/W7Nmz9eqrr+rdd991Hh82bJi++eYbffLJJ9qxY4f69u2rzp07a+/evYUaLwAAJQ0JLADAEvv27ZNpmqpfv/4V23399dfavHmzPv30UzVv3lx16tTRK6+8ooCAAC1evLhQY4qMjFS9evX04YcfOuvi4uLUt29f+fn5OetCQkI0c+ZM1atXT/369dNTTz2lmTNnSpJSUlIUFxenTz/9VG3atNHNN9+sUaNG6fbbb1dcXFyhxgsAQElDAgsAsMSlU26vZPv27crIyFBQUJD8/Pyc5eDBg9q/f3+hx/XYY485E83jx4/riy++0MCBA13a3HrrrTIMw/m+devW2rt3r7Kzs/XDDz8oOztbdevWdYl33bp1bokXAICShE2cAACWqFOnjgzDuOpGTRkZGapSpUqea0gvnWZcWPr376/nn39e33zzjTZu3KhatWqpTZs2+T4/IyNDnp6e2rZtW64NoS4dxQUAANeOBBYAYInAwEBFRUXpjTfe0PDhw3Otg01LS1NAQICaNm2qY8eOycvLq0gecRMUFKSePXsqLi5O33zzTa5NnSTp22+/dXm/adMm1alTR56enmrSpImys7N14sSJa0p8AQDA1TGFGABgmTfeeEPZ2dlq2bKllixZor1792r37t167bXX1Lp1a0lSp06d1Lp1a/Xs2VP/+c9/dOjQIW3cuFEvvPCCtm7d6pa4HnvsMc2fP1+7d+/WgAEDch1PSUnRyJEjlZycrI8//lhz5szR008/LUmqW7eu+vXrp/79+2vp0qU6ePCgNm/erNjYWH3++eduiRcAgJKCEVgAgGVq166t7777TlOmTNGzzz6r1NRUVaxYUc2aNdPcuXMlSYZh6N///rdeeOEFPfLIIzp58qSCg4PVtm1bVa5c2S1xderUSVWqVNEtt9yiqlWr5jrev39/nTt3Ti1btpSnp6eefvppDR482Hk8Li5O//jHP/Tss8/q6NGjqlChgm699VbdddddbokXAICSwjDzu4sGAAAlREZGhqpVq6a4uDjdc889Lsfat2+viIgIzZo1y5rgAAAowRiBBQDg/8vJydGvv/6qGTNmKCAgQHfffbfVIQEAgEuQwAIA8P+lpKSoVq1auummmxQfHy8vL35NAgBwI2EKMQAAAADAFtiFGAAAAABgCySwAAAAAABbIIEFAAAAANgCCSwAAAAAwBZIYAEAAAAAtkACCwAAAACwBRJYAAAAAIAtkMACAAAAAGyBBBYAAAAAYAv/D7QFiS1KpOF7AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "# Check if 'gene' is a column or the index\n", "if 'gene' not in cell_type_profiles.columns:\n", " cell_type_profiles = cell_type_profiles.reset_index().rename(columns={'index': 'gene'})\n", "\n", "# Get top 10 genes per cell type\n", "n_top = 10\n", "top_genes_per_celltype = {}\n", "for ct in celltypes:\n", " if ct in cell_type_profiles.columns:\n", " top_genes_per_celltype[ct] = cell_type_profiles.nlargest(n_top, ct)[['gene', ct]]\n", "\n", "# Create a combined view: heatmap of top genes across all cell types\n", "all_top_genes = list(set([g for ct in top_genes_per_celltype for g in top_genes_per_celltype[ct]['gene'].tolist()]))\n", "available_celltypes = [ct for ct in celltypes if ct in cell_type_profiles.columns]\n", "heatmap_data = cell_type_profiles[cell_type_profiles['gene'].isin(all_top_genes)].set_index('gene')[available_celltypes]\n", "\n", "# Normalize per column (z-score) so each cell type has its own scale\n", "heatmap_data_normalized = (heatmap_data - heatmap_data.mean()) / heatmap_data.std()\n", "\n", "# Plot heatmap with normalized values\n", "fig, ax = plt.subplots(figsize=(10, max(6, len(all_top_genes) * 0.3)))\n", "sns.heatmap(heatmap_data_normalized, cmap='viridis', ax=ax, cbar_kws={'label': 'Z-score (per cell type)'})\n", "ax.set_title('Top-ranked genes across cell types\\n(normalized per cell type)')\n", "ax.set_xlabel('Cell Type')\n", "ax.set_ylabel('Gene')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 26, "id": "0c3656e9", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxMAAAHqCAYAAAB/WBOoAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWLlJREFUeJzt3Xl8TGf///H3JJHJJokQgqaW2EktUQS1lUap2kqreld0oS1FlbpprW3F0laVUl0sbVVr11qLirqDbrfoTdW+70USa4Jcvz/6y3xNkxBHYkJez8fjPGrOueY6n3PNyXTec5axGWOMAAAAAOAmubm6AAAAAAB3JsIEAAAAAEsIEwAAAAAsIUwAAAAAsIQwAQAAAMASwgQAAAAASwgTAAAAACwhTAAAAACwhDABAAAAwBLCBAAgV5k+fbpsNpv27dvn6lKyxb59+2Sz2TR9+nRXl3LHShvDd955x9WlAPgHwgRwh7LZbFmaYmNjc7yWyZMnq0OHDrr33ntls9kUHR2daduEhAR169ZNwcHB8vX1VePGjfXf//43x2u06sKFCxo2bNhtGUfcuq+++krvv/++q8vIcY0aNZLNZlPZsmUzXL5y5UrHe8DcuXNvc3UA8hIPVxcAwJovvvjC6fHnn3+ulStXpptfsWLFHK9l9OjROnv2rGrVqqWjR49m2i41NVUtW7bU5s2b1b9/fxUqVEiTJk1So0aN9Ntvv2X6wciVLly4oOHDh0v6+wMccrevvvpKW7ZsUZ8+fVxdikOJEiV08eJF5cuXL1v79fLy0q5du/Tzzz+rVq1aTstmzpwpLy8vXbp0KVvXCQD/RJgA7lBPPfWU0+ONGzdq5cqV6ebfDmvXrnUclfDz88u03dy5c7V+/XrNmTNHjz32mCSpY8eOKleunIYOHaqvvvrqdpWcY86fPy9fX19Xl2HZpUuX5OnpKTc3DlynuXLlilJTU+Xp6Wnp+TabTV5eXtlclRQWFqYrV65o1qxZTmHi0qVLWrBggVq2bKl58+Zl+3qvh/0HyHv4awfuYufPn9err76q0NBQ2e12lS9fXu+8846MMU7tbDabevbsqZkzZ6p8+fLy8vJSRESEfvzxxyytp0SJErLZbDdsN3fuXBUpUkTt2rVzzAsODlbHjh21aNEiJScnX/f5NptNw4YNSze/ZMmSTqdWpZ1z/+OPP6p79+4qWLCg/P399fTTT+vMmTNOz/31118VFRWlQoUKydvbW6VKldIzzzwj6e/ztIODgyVJw4cPd5w2klZDdHS0/Pz8tHv3brVo0UL58+dX586dJf19FOb9999X5cqV5eXlpSJFiqh79+7p1r9o0SK1bNlSxYoVk91uV1hYmN58801dvXrVqV2jRo1UpUoV/f7772rYsKF8fHxUpkwZxyksa9euVe3ateXt7a3y5ctr1apV1x1LSYqNjZXNZtPXX3+tN954Q8WLF5ePj4+SkpIkST/99JOaN2+ugIAA+fj4qGHDhoqLi8uwn5o1a8rLy0thYWGaMmWKhg0b5rRPXO+6gcxe15sdp0aNGmnJkiXav3+/47UqWbKkY/mJEyf07LPPqkiRIvLy8lLVqlU1Y8YMp/Vce27++++/r7CwMNntdv3xxx+SpAkTJqhy5cry8fFRgQIFVLNmzRuG4Iy2PW3fOXz4sNq0aSM/Pz8FBwerX79+6V776+nUqZO++eYbpaamOuZ99913unDhgjp27Jiu/f79+/XSSy+pfPny8vb2VsGCBdWhQ4cMr09JSEjQK6+8opIlS8put+uee+7R008/rb/++kvSjfefOXPmKCIiQt7e3ipUqJCeeuopHT582GkdaeOwZ88eRUVFydfXV8WKFdOIESPSvU+l+fjjjx2vy/33369ffvnFafnvv/+u6OholS5dWl5eXgoJCdEzzzyjU6dOpesrK/tumi+//NKxPUFBQXriiSd08OBBpzY7d+5U+/btFRISIi8vL91zzz164oknlJiYmOG2AHcDjkwAdyljjB599FGtWbNGzz77rKpVq6YVK1aof//+Onz4sMaNG+fUfu3atfrmm2/Uq1cv2e12TZo0Sc2bN9fPP/+sKlWqZEtNmzZtUo0aNdJ9a1mrVi19/PHH2rFjh8LDw7NlXZLUs2dPBQYGatiwYdq+fbsmT56s/fv3Oz4EnThxQg899JCCg4P173//W4GBgdq3b5/mz58v6e+gM3nyZL344otq27atIwTdd999jnVcuXJFUVFRql+/vt555x35+PhIkrp3767p06era9eu6tWrl/bu3auJEydq06ZNiouLc5zyMn36dPn5+alv377y8/PTDz/8oCFDhigpKUljx4512p4zZ87okUce0RNPPKEOHTpo8uTJeuKJJzRz5kz16dNHL7zwgp588kmNHTtWjz32mA4ePKj8+fPfcJzefPNNeXp6ql+/fkpOTpanp6d++OEHPfzww4qIiNDQoUPl5uamadOmqUmTJlq3bp3jm/BNmzapefPmKlq0qIYPH66rV69qxIgRjhCWXbIyTq+//roSExN16NAhx/6ddqTs4sWLatSokXbt2qWePXuqVKlSmjNnjqKjo5WQkKDevXs7rW/atGm6dOmSunXrJrvdrqCgIH3yySfq1auXHnvsMfXu3VuXLl3S77//rp9++klPPvnkTW/T1atXFRUVpdq1a+udd97RqlWr9O677yosLEwvvvhilvp48sknHdf0NGnSRNLfp3o9+OCDKly4cLr2v/zyi9avX68nnnhC99xzj/bt26fJkyerUaNG+uOPPxz777lz5/TAAw9o27ZteuaZZ1SjRg399ddf+vbbb3Xo0CEVKlTI0WdG+0/avn///fcrJiZGx48f1/jx4xUXF6dNmzYpMDDQaRyaN2+uOnXqaMyYMVq+fLmGDh2qK1euaMSIEU71f/XVVzp79qy6d+8um82mMWPGqF27dtqzZ4/jb2rlypXas2ePunbtqpCQEG3dulUff/yxtm7dqo0bNzqCws3su2+//bYGDx6sjh076rnnntPJkyc1YcIENWjQwLE9KSkpioqKUnJysl5++WWFhITo8OHDWrx4sRISEhQQEJCl1xS44xgAd4UePXqYa/+kFy5caCSZt956y6ndY489Zmw2m9m1a5djniQjyfz666+Oefv37zdeXl6mbdu2N1WHr6+v6dKlS6bLnnnmmXTzlyxZYiSZ5cuXX7dvSWbo0KHp5pcoUcJpndOmTTOSTEREhElJSXHMHzNmjJFkFi1aZIwxZsGCBUaS+eWXXzJd58mTJzNdb5cuXYwk8+9//9tp/rp164wkM3PmTKf5y5cvTzf/woUL6frt3r278fHxMZcuXXLMa9iwoZFkvvrqK8e8P//800gybm5uZuPGjY75K1asMJLMtGnTMt0uY4xZs2aNkWRKly7tVEdqaqopW7asiYqKMqmpqU61lipVyjRr1swxr1WrVsbHx8ccPnzYMW/nzp3Gw8PDaX/cu3dvpjX9c3zTXr+9e/c6rfufMhqnli1bmhIlSqRr+/777xtJ5ssvv3TMS0lJMZGRkcbPz88kJSU51env729OnDjh1Efr1q1N5cqV0/V9Ixlte9q+M2LECKe21atXNxERETfss2HDho5aatasaZ599lljjDFnzpwxnp6eZsaMGY7Xd86cOY7nZTSOGzZsMJLM559/7pg3ZMgQI8nMnz8/Xfu0fSKz/SclJcUULlzYVKlSxVy8eNExf/HixUaSGTJkSLpxePnll536b9mypfH09DQnT540xvzfGBYsWNCcPn3a0XbRokVGkvnuu++uu42zZs0yksyPP/7omJfVfXffvn3G3d3dvP322059/u9//zMeHh6O+Zs2bUo33kBewGlOwF1q6dKlcnd3V69evZzmv/rqqzLGaNmyZU7zIyMjFRER4Xh87733qnXr1lqxYsVNnXZxPRcvXpTdbk83P+188osXL2bLetJ069bN6aLXF198UR4eHlq6dKkkOb4dXbx4sS5fvmx5Pf/8FnnOnDkKCAhQs2bN9NdffzmmiIgI+fn5ac2aNY623t7ejn+fPXtWf/31lx544AFduHBBf/75p1O/fn5+euKJJxyPy5cvr8DAQFWsWFG1a9d2zE/79549e7JUf5cuXZzqiI+P186dO/Xkk0/q1KlTjvrPnz+vBx98UD/++KNSU1N19epVrVq1Sm3atFGxYsUczy9TpowefvjhLK07q25mnDKydOlShYSEqFOnTo55+fLlU69evXTu3DmtXbvWqX379u3TfUMdGBioQ4cOpTut5la88MILTo8feOCBLL9uaZ588knNnz9fKSkpmjt3rtzd3dW2bdsM2147jpcvX9apU6dUpkwZBQYGOt1Vbd68eapatWqG/fzzFKB/7j+//vqrTpw4oZdeesnpWpGWLVuqQoUKWrJkSbo+e/bs6dR/z549lZKSku50vccff1wFChRwPH7ggQckOe/r19Zy6dIl/fXXX6pTp44kObbxZvbd+fPnKzU1VR07dnT6ew4JCVHZsmUdf89pRx5WrFihCxcupNtG4G5FmADuUvv371exYsXSneaSdnen/fv3O83P6E5K5cqV04ULF3Ty5Mlsqcnb2zvD6yLS7jhz7YeA7PDPbfLz81PRokUd54c3bNhQ7du31/Dhw1WoUCG1bt1a06ZNu+G1G9fy8PDQPffc4zRv586dSkxMVOHChRUcHOw0nTt3TidOnHC03bp1q9q2bauAgAD5+/srODjYcRH9P8+zvueee9J9kAsICFBoaGi6eZLSXZ+RmVKlSqWrX/r7Q+I/6//000+VnJysxMREnThxQhcvXlSZMmXS9ZnRvFtxM+OUkf3796ts2bLpTrHL7O/hn2MiSQMGDJCfn59q1aqlsmXLqkePHhleQ5JVXl5e6QJLgQIFsvy6pUk7J3/ZsmWaOXOmHnnkkUxPb7t48aKGDBniuI6qUKFCCg4OVkJCgtM47t69O8unN/5zrNLGsnz58unaVqhQId1Yu7m5qXTp0k7zypUrJ0npruW49957nR6nBYtrx+z06dPq3bu3ihQpIm9vbwUHBztqTNvGm9l3d+7cKWOMypYtm+7vYdu2bY6/51KlSqlv37769NNPVahQIUVFRenDDz/kegnc9bhmAsBtU7Ro0QxvHZs279pvCG+G1SMnaffg37hxo7777jutWLFCzzzzjN59911t3LjxunemSmO329N9QE1NTVXhwoU1c+bMDJ+T9gEyISFBDRs2lL+/v0aMGKGwsDB5eXnpv//9rwYMGOB0Ua0kubu7Z9hfZvNNJhew/tM/Q1zaeseOHatq1apl+Bw/P7+buu1oZhfoZ+W1u9lxyg4ZBduKFStq+/btWrx4sZYvX6558+Zp0qRJGjJkiOP2wTcjs9ftZhUtWlSNGjXSu+++q7i4uOvewenll1/WtGnT1KdPH0VGRiogIEA2m01PPPGE5XHM7i8Bricr+3rHjh21fv169e/fX9WqVZOfn59SU1PVvHlzS9uYmpoqm82mZcuWZbj+a98n3n33XUVHR2vRokX6/vvv1atXL8XExGjjxo3pvnQA7haECeAuVaJECa1atUpnz551+pYy7ZSQEiVKOLVP+zb6Wjt27JCPj0+2XUxbrVo1rVu3TqmpqU4fwH/66Sf5+Pg4vo3MTIECBZSQkOA0LyUlJdPftti5c6caN27seHzu3DkdPXpULVq0cGpXp04d1alTR2+//ba++uorde7cWV9//bWee+65LN2l6p/CwsK0atUq1atX77oftGJjY3Xq1CnNnz9fDRo0cMzfu3fvTa8zO4WFhUmS/P391bRp00zbFS5c2PFbB//0z3lp3yD/8/X757fUGbmZccrs9SpRooR+//33dPteZn8PmfH19dXjjz+uxx9/XCkpKWrXrp3efvttDRw4MEdu/5pVTz75pJ577jkFBgam27+vNXfuXHXp0kXvvvuuY96lS5fSvS5hYWHasmWLpVrSxnL79u2Oi8LTbN++Pd1Yp6amas+ePU5//zt27JAkp7txZcWZM2e0evVqDR8+XEOGDHHM/+f7283su2FhYTLGqFSpUjd8j5Kk8PBwhYeH64033tD69etVr149ffTRR3rrrbdualuAOwWnOQF3qRYtWujq1auaOHGi0/xx48bJZrOlOy94w4YNTudMHzx4UIsWLdJDDz2Ubd+gPvbYYzp+/LjjbkmS9Ndff2nOnDlq1apVhtdTXCssLCzd7Wo//vjjTL/d/vjjj52uhZg8ebKuXLni2PYzZ86k+/Y+7Zv4tFOd0u5u888PW9fTsWNHXb16VW+++Wa6ZVeuXHH0lTau19aQkpKiSZMmZXldOSEiIkJhYWF65513dO7cuXTL0057c3d3V9OmTbVw4UIdOXLEsXzXrl3prsnx9/dXoUKF0r1+WdnWmxknX1/fDE8radGihY4dO6ZvvvnGMe/KlSuaMGGC/Pz81LBhwxvW8c9bi3p6eqpSpUoyxtzSNTfZ4bHHHtPQoUM1adKk6/4ehru7e7p9fsKECen+htq3b6/NmzdrwYIF6fq40RGvmjVrqnDhwvroo4+cThlctmyZtm3bppYtW6Z7zrXvU8YYTZw4Ufny5dODDz543XX9U0b7iqR0v4p+M/tuu3bt5O7uruHDh6fr1xjj2C+SkpJ05coVp+Xh4eFyc3O7qVMngTsNRyaAu1SrVq3UuHFjvf7669q3b5+qVq2q77//XosWLVKfPn0c3z6nqVKliqKiopxuDSspS6dvfPfdd9q8ebOkvy/q/P333x3fwj366KOOW6k+9thjqlOnjrp27ao//vjD8QvYV69ezdJ6nnvuOb3wwgtq3769mjVrps2bN2vFihVOt6m8VkpKih588EF17NhR27dv16RJk1S/fn09+uijkqQZM2Zo0qRJatu2rcLCwnT27Fl98skn8vf3d3y76+3trUqVKumbb75RuXLlFBQUpCpVqlz3fPKGDRuqe/fuiomJUXx8vB566CHly5dPO3fu1Jw5czR+/Hg99thjqlu3rgoUKKAuXbqoV69estls+uKLL7J8elJOcXNz06effqqHH35YlStXVteuXVW8eHEdPnxYa9askb+/v7777jtJ0rBhw/T999+rXr16evHFFx0BtkqVKoqPj3fq97nnntOoUaP03HPPqWbNmvrxxx8d30Bfz82MU0REhL755hv17dtX999/v/z8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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Bar plot: Top 10 genes for the seed cell type (Macrophage)\n", "fig, ax = plt.subplots(figsize=(8, 5))\n", "if 'Macrophage' in cell_type_profiles.columns:\n", " top_macro = cell_type_profiles.nlargest(10, 'Macrophage')[['gene', 'Macrophage']]\n", " ax.barh(top_macro['gene'], top_macro['Macrophage'], color='steelblue')\n", " ax.set_xlabel('RWR Score')\n", " ax.set_title('Top 10 upstream regulators in Macrophages')\n", " ax.invert_yaxis() # Highest at top\n", " plt.tight_layout()\n", " plt.show()\n", "else:\n", " print(\"Macrophage not in results - check celltypes list\")" ] }, { "cell_type": "markdown", "id": "1e32e576", "metadata": {}, "source": [ "### Compare Cell Type Contributions (excluding seed cell type)\n", "\n", "Which **other** cell types contribute to upstream regulation? This reveals which neighboring cells may be sending signals to macrophages:" ] }, { "cell_type": "code", "execution_count": 27, "id": "4b086dc2", "metadata": {}, "outputs": [ { "data": { "image/png": "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o0dYsmQJvLy8Ppmk4s6dO9iyZQu6dOmi61CIZOEYCyIiog/Y5MmTcfz4cdSrVw/6+vrYunUrtm7dil69ehX6rEwfgtq1a8PPzw9ffPEF7t27hz///BNJSUkYM2aMrkOTLS4uDgcOHMD8+fNhYGCA3r176zokIlmYWBAREX3A6tSpg507d+Knn35CcnIySpUqhZCQEPz444+6Du29aNKkCdauXYu5c+dCoVCgatWq+PPPPz+JpzV79uxB165dUapUKSxatIh/nI4+ehxjQUREREREsnGMBRERERERycbEgoiIiIiIZGNiQUT5NnnyZLi7u2v9dfD3KSoqCgqFAlFRUYXaZnBwMJycnApsG5Sz+Ph4KBQK/PLLL7oOhf6/rHOycOHC97pdJycnBAcHS+8L4/P+vmzbtg1mZmYF9le8iT5kTCyIKF+SkpIwadIkfP/999DT44+QwuTn5weFQoEyZcpku3znzp1QKBRQKBRYu3bte46O6MNz8OBBhISEICEhQdehSBo1agRXV1eEh4frOhSiQse7AiLKl7/++gvp6eno2LGjrkN5L+bNm4eLFy/qbPtGRka4fPkyjhw5orVs2bJlMDIy0kFURB+mgwcPIjQ09INKLACgd+/emDNnDp4+farrUIgKFRMLIsqXBQsWoEWLFp/NDa2BgQFUKpXOtu/i4gI3NzesWLFCo/z58+fYsGEDmjZt+t5jev78uU67wRF9bNq2bYu0tDSsWbNG16EQFSomFkSUZ3FxcTh9+jQaNGigtSwzMxMREREoX748jIyMUKxYMfTu3RtPnjyR6owbNw56enr4999/Ndbt1asXDA0NcerUKans1q1b6N69OxwcHKBSqeDs7Iy+ffvixYsXOcb3Zr/sLH5+fvDz89Mou3nzJlq1agVTU1PY2triu+++Q1pamta6b46xeH0cwNy5c+Hi4gKVSoXq1avj6NGjWuuvWbMG5cqVg5GRESpUqIANGzbke9xGx44dsWrVKo2b+b///hspKSkICAjQqn/t2jX069cPbm5uMDY2hrW1Ndq3b4/4+HitugkJCfjuu+/g5OQElUqFEiVKIDAwEA8fPgTwf33bV65cidGjR6N48eIwMTFBUlKStH+enp4wNjZG0aJF8c033+DWrVtax9DMzAxXr16Fv78/TE1N4eDggPHjxyOnGc/fdmxPnz6N4OBglC5d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XDmoVCpcv379nbo9ZUelUkGlUhVIW0REREREH5qPIrHw8PBA586d8dtvv2W7XKFQYPbs2VAqlVJy4efnl2ubI0eOhIeHB/r164c+ffrA0NAQkZGRaN++PYoWLYphw4bhu+++Q2ZmJry8vJCYmIgDBw7AwsICQUFBhbCXREREREQfrw++K1SW8ePHIzMzM8flCoUCv//+O7p27YqmTZsiMjIy1/bKli2LHTt24NSpU6hRowZq166NTZs2SbNK/fTTTxgzZgzCw8PxxRdfoFGjRtiyZQucnZ0LdL+IiIiIiD4FCiGE0HUQn6OkpCSo1Wp8OWo19I1MdB0OEREREX2Ato9pqtPtZ92zJiYmwsLCIte6H80TCyIiIiIi+nB9solF48aNNaaKff0VFham6/CIiIiIiD4pH8Xg7Xcxf/58pKamZrvMysrqPUdDRERERPRp+2QTi+LFi+s6BCIiIiKiz8Yn2xWKiIiIiIjeHyYWREREREQkGxMLIiIiIiKSjYkFERERERHJxsSCiIiIiIhkY2JBRERERESyMbEgIiIiIiLZmFgQEREREZFsTCyIiIiIiEg2JhZERERERCQbEwsiIiIiIpJNX9cBfO42fO8PCwsLXYdBRERERCQLn1gQEREREZFsTCyIiIiIiEg2JhZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGRjYkFERERERLIxsSAiIiIiItmYWBARERERkWxMLIiIiIiISDZ9XQfwuWs9aTv0jUx0HQYREREVsO1jmuo6BKL3ik8siIiIiIhINiYWREREREQkGxMLIiIiIiKSjYkFERERERHJxsSCiIiIiIhkY2JBRERERESyMbEgIiIiIiLZmFgQEREREZFsTCyIiIiIiEg2JhZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGRjYkFERERERLIxsSAiIiIiItk+msQiPj4eCoUC0dHRAICoqCgoFAokJCToNC4iIiIiIspHYqFQKHJ9hYSEFGKY8gkhMHfuXNSsWRNmZmawtLREtWrVEBERgZSUFABASEiItD/6+vooWrQofHx8EBERgbS0tBzb7tOnDxQKBSIiIt7T3hARERERfVj081rxzp070v9XrVqFsWPH4uLFi1KZmZlZwUZWwLp06YL169dj9OjRmDlzJmxsbHDq1ClERETAyckJrVq1AgCUL18eu3btQmZmJh49eoSoqChMmDABS5YsQVRUFMzNzTXa3bBhAw4fPgwHBwcd7BURERER0Ychz08s7OzspJdarYZCodAoy0ticfbsWTRr1gwWFhYwNzeHt7c3rly5Ii2fP38+vvjiCxgZGcHd3R1//PHHu+3VG1avXo1ly5ZhxYoVGDVqFKpXrw4nJye0bNkSu3fvRr169aS6+vr6sLOzg4ODAzw8PDBw4EDs2bMHZ86cwaRJkzTavXXrFgYOHIhly5bBwMCgQGIlIiIiIvoY5fmJhVy3bt2Cj48P/Pz8sHv3blhYWODAgQNIT08HACxbtgxjx47FzJkzUaVKFZw8eRI9e/aEqakpgoKCZG172bJlcHNzQ8uWLbWWKRQKqNXqXNd3d3dH48aNsX79ekyYMAEAkJmZiS5dumD48OEoX778W2NIS0vT6E6VlJSUz70gIiIiIvpwvbfE4vfff4darcbKlSulb/fLli0rLR83bhx+/fVXtGnTBgDg7OyMc+fOYc6cObITi9jYWLi5uclqw93dHTt27JDeT5o0Cfr6+hg0aFCe1g8PD0doaKisGIiIiIiIPlTvLbGIjo6Gt7d3tl2Gnj17hitXrqB79+7o2bOnVJ6env7Wpwl5IYQokDYUCgUA4Pjx45g+fTpOnDghlb3NyJEjMWTIEOl9UlISSpYsKTsuIiIiIqIPwXtLLIyNjXNclpycDACYN28eatasqbFMqVTK3nbZsmVx4cIFWW2cP38ezs7OAIB9+/bh/v37KFWqlLQ8IyMDQ4cORUREBOLj47XWV6lUUKlUsmIgIiIiIvpQvbe/Y1GxYkXs27cPL1++1FpWrFgxODg44OrVq3B1ddV4Zd3My9GpUydcunQJmzZt0lomhEBiYmKu61+4cAHbtm1D27ZtAbyaYer06dOIjo6WXg4ODhg+fDi2b98uO14iIiIioo/Ne3tiMWDAAMyYMQMdOnTAyJEjoVarcfjwYdSoUQNubm4IDQ3FoEGDoFar0ahRI6SlpeHYsWN48uSJRheidxEQEIANGzagY8eOGD16NL766ivY2NggJiYG06ZNw8CBA6XpZtPT03H37l2t6WYrV66M4cOHAwCsra1hbW2tsQ0DAwPY2dnJHstBRERERPQxem+JhbW1NXbv3o3hw4fD19cXSqUSlStXRt26dQEAPXr0gImJCaZMmYLhw4fD1NQUHh4eGDx4sOxtKxQKLF++HHPnzsVff/2FiRMnQl9fH2XKlEFgYCD8/f2lumfPnoW9vT2USiXUajXKlSuHkSNHom/fvuzKRERERESUA4UoiJHNlG9JSUlQq9X4ctRq6BuZ6DocIiIiKmDbxzTVdQhEsmXdsyYmJsLCwiLXuu9tjAUREREREX26Ciyx6NOnD8zMzLJ99enTp6A2k63GjRvnuO2wsLBC3TYRERERERXgGIvx48dj2LBh2S5722MTuebPn4/U1NRsl1lZWRXqtomIiIiIqAATC1tbW9ja2hZUc/lSvHhxnWyXiIiIiIhe4RgLIiIiIiKSjYkFERERERHJxsSCiIiIiIhkY2JBRERERESyMbEgIiIiIiLZmFgQEREREZFsTCyIiIiIiEg2JhZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGTT13UAn7sN3/vDwsJC12EQEREREcnCJxZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGRjYkFERERERLIxsSAiIiIiItmYWBARERERkWxMLIiIiIiISDYmFkREREREJBv/8raOtZ60HfpGJroOg4iI6IO1fUxTXYdARHnAJxZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGRjYkFERERERLIxsSAiIiIiItmYWBARERERkWxMLIiIiIiISDYmFkREREREJBsTCyIiIiIiko2JBRERERERycbEgoiIiIiIZGNiQUREREREsjGxICIiIiIi2ZhYEBERERGRbEwsiIiIiIhINiYW/5+fnx8UCgUUCgVUKhWKFy+O5s2bY/369dnWj4yMRJMmTWBtbQ0TExOUK1cOQ4cOxa1bt95z5EREREREusfE4jU9e/bEnTt3cOXKFaxbtw7lypVDhw4d0KtXL416c+bMQYMGDWBnZ4d169bh3LlzmD17NhITE/Hrr7/qKHoiIiIiIt3R13UA74ufnx8qVKgAAFiyZAkMDAzQt29fjB8/HgqFAgBgYmICOzs7AECJEiVQq1YtuLu7o1u3bggICECDBg1w8+ZNDBo0CIMGDcK0adOk9p2cnODj44OEhIT3vm9ERERERLr2WT2xWLRoEfT19XHkyBFMnz4dU6dOxfz583NdJygoCEWKFJG6RK1ZswYvXrzAiBEjsq1vaWlZ0GETEREREX3wPpsnFgBQsmRJTJs2DQqFAm5uboiJicG0adPQs2fPHNfR09ND2bJlER8fDwCIjY2FhYUF7O3t87XttLQ0pKWlSe+TkpLeaR+IiIiIiD5En9UTi1q1akndngCgdu3aiI2NRUZGRq7rCSGk9V7/f36Eh4dDrVZLr5IlS+a7DSIiIiKiD9VnlVi8i4yMDMTGxsLZ2RkAULZsWSQmJuLOnTv5amfkyJFITEyUXjdu3CiMcImIiIiIdOKzSiz+++8/jfeHDx9GmTJloFQqc1xn0aJFePLkCdq2bQsAaNeuHQwNDTF58uRs6+c0eFulUsHCwkLjRURERET0qfisxlhcv34dQ4YMQe/evXHixAnMmDFDY3rYlJQU3L17F+np6bh58yY2bNiAadOmoW/fvqhXrx6A/xunMWDAACQlJSEwMBBOTk64efMmFi9eDDMzM045S0RERESfnc8qsQgMDERqaipq1KgBpVKJb7/9VuNvVMybNw/z5s2DoaEhrK2t4enpiVWrVqF169Ya7fTr1w9ly5bFL7/8gtatWyM1NRVOTk5o1qwZhgwZ8r53i4iIiIhI5z6rxMLAwAARERGYNWuW1rKoqKh8tdWgQQM0aNCggCIjIiIiIvq4fVZjLIiIiIiIqHAwsSAiIiIiItk+m65Q+e3qREREREREeccnFkREREREJBsTCyIiIiIiko2JBRERERERycbEgoiIiIiIZGNiQUREREREsjGxICIiIiIi2ZhYEBERERGRbEwsiIiIiIhINiYWREREREQkGxMLIiIiIiKSjYkFERERERHJxsSCiIiIiIhk09d1AJ+7Dd/7w8LCQtdhEBERERHJwicWREREREQkGxMLIiIiIiKSjYkFERERERHJxsSCiIiIiIhkY2JBRERERESyMbEgIiIiIiLZmFgQEREREZFsTCyIiIiIiEg2JhZERERERCQbEwsiIiIiIpJNX9cBfO5aT9oOfSMTXYdBRJ+B7WOa6joEIiL6hPGJBRERERERycbEgoiIiIiIZGNiQUREREREsjGxICIiIiIi2ZhYEBERERGRbEwsiIiIiIhINiYWREREREQkGxMLIiIiIiKSjYkFERERERHJxsSCiIiIiIhkY2JBRERERESyMbEgIiIiIiLZmFgQEREREZFsTCyIiIiIiEg2JhZERERERCTbR5NYxMfHQ6FQIDo6GgAQFRUFhUKBhIQEncZFRERERET5SCwUCkWur5CQkEIMUz4hBObOnYuaNWvCzMwMlpaWqFatGiIiIpCSkgIACAkJkfZHX18fRYsWhY+PDyIiIpCWlqbRXnJyMgYMGIASJUrA2NgY5cqVw+zZs3Wxa0REREREOqef14p37tyR/r9q1SqMHTsWFy9elMrMzMwKNrIC1qVLF6xfvx6jR4/GzJkzYWNjg1OnTiEiIgJOTk5o1aoVAKB8+fLYtWsXMjMz8ejRI0RFRWHChAlYsmQJoqKiYG5uDgAYMmQIdu/ejaVLl8LJyQk7duxAv3794ODggBYtWuhwT4mIiIiI3r88P7Gws7OTXmq1GgqFQqMsL4nF2bNn0axZM1hYWMDc3Bze3t64cuWKtHz+/Pn44osvYGRkBHd3d/zxxx/vtldvWL16NZYtW4YVK1Zg1KhRqF69OpycnNCyZUvs3r0b9erVk+rq6+vDzs4ODg4O8PDwwMCBA7Fnzx6cOXMGkyZNkuodPHgQQUFB8PPzg5OTE3r16oVKlSrhyJEjBRIzEREREdHH5L2Nsbh16xZ8fHygUqmwe/duHD9+HN26dUN6ejoAYNmyZRg7diwmTpyI8+fPIywsDGPGjMGiRYtkb3vZsmVwc3NDy5YttZYpFAqo1epc13d3d0fjxo2xfv16qaxOnTrYvHkzbt26BSEEIiMjcenSJXz11Vey4yUiIiIi+tjkuSuUXL///jvUajVWrlwJAwMDAEDZsmWl5ePGjcOvv/6KNm3aAACcnZ1x7tw5zJkzB0FBQbK2HRsbCzc3N1ltuLu7Y8eOHdL7GTNmoFevXihRogT09fWhp6eHefPmwcfHJ9v109LSNMZpJCUlyYqHiIiIiOhD8t4Si+joaHh7e0tJxeuePXuGK1euoHv37ujZs6dUnp6e/tanCXkhhCiQNhQKhfR+xowZOHz4MDZv3gxHR0fs3bsX/fv3h4ODAxo0aKC1fnh4OEJDQ2XHQURERET0IXpviYWxsXGOy5KTkwEA8+bNQ82aNTWWKZVK2dsuW7YsLly4IKuN8+fPw9nZGQCQmpqKUaNGYcOGDWjatCkAoGLFioiOjsYvv/ySbWIxcuRIDBkyRHqflJSEkiVLyoqJiIiIiOhD8d7GWFSsWBH79u3Dy5cvtZYVK1YMDg4OuHr1KlxdXTVeWTfzcnTq1AmXLl3Cpk2btJYJIZCYmJjr+hcuXMC2bdvQtm1bAMDLly/x8uVL6OlpHj6lUonMzMxs21CpVLCwsNB4ERERERF9Kt5bYjFgwAAkJSWhQ4cOOHbsGGJjY7FkyRJpytrQ0FCEh4fjt99+w6VLlxATE4MFCxZg6tSpsrcdEBCAr7/+Gh07dkRYWBiOHTuGa9eu4Z9//kGDBg0QGRkp1U1PT8fdu3dx+/ZtxMTEYMaMGfD19UXlypUxfPhwAICFhQV8fX0xfPhwREVFIS4uDgsXLsTixYvRunVr2fESEREREX1s3ltXKGtra+zevRvDhw+Hr68vlEolKleujLp16wIAevToARMTE0yZMgXDhw+HqakpPDw8MHjwYNnbVigUWL58OebOnYu//voLEydOhL6+PsqUKYPAwED4+/tLdc+ePQt7e3solUqo1WqUK1cOI0eORN++faFSqaR6K1euxMiRI9G5c2c8fvwYjo6OmDhxIvr06SM7XiIiIiKij41CFMTIZsq3pKQkqNVqfDlqNfSNTHQdDhF9BraPaarrEIiI6COTdc+amJj41q78760rFBERERERfboKLLHo06cPzMzMsn0Vdvegxo0b57jtsLCwQt02EREREREV4BiL8ePHY9iwYdkuK+wZkObPn4/U1NRsl1lZWRXqtomIiIiIqAATC1tbW9ja2hZUc/lSvHhxnWyXiIiIiIhe4RgLIiIiIiKSjYkFERERERHJxsSCiIiIiIhkY2JBRERERESyMbEgIiIiIiLZmFgQEREREZFsTCyIiIiIiEg2JhZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGTT13UAn7sN3/vDwsJC12EQEREREcnCJxZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGRjYkFERERERLIxsSAiIiIiItmYWBARERERkWxMLIiIiIiISDYmFkREREREJBsTCyIiIiIikk1f1wF87lpP2g59IxNdh0FEOdg+pqmuQyAiIvoo8IkFERERERHJxsSCiIiIiIhkY2JBRERERESyMbEgIiIiIiLZmFgQEREREZFsTCyIiIiIiEg2JhZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGRjYkFERERERLIxsSAiIiIiItmYWBARERERkWxMLIiIiIiISDYm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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Sum of RWR scores per cell type (excluding seed cell type Macrophage)\n", "seed_celltype = 'Macrophage'\n", "other_celltypes = [ct for ct in celltypes if ct in cell_type_profiles.columns and ct != seed_celltype]\n", "celltype_totals = cell_type_profiles[other_celltypes].sum().sort_values(ascending=True)\n", "\n", "fig, ax = plt.subplots(figsize=(8, 4))\n", "ax.barh(celltype_totals.index, celltype_totals.values, color='steelblue')\n", "ax.set_xlabel('Total RWR Score')\n", "ax.set_title(f'Upstream contribution from neighboring cell types\\n(excluding {seed_celltype} = seed cell type)')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "4e9bdce3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "78a21409", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "recon-grn", "language": "python", "name": "recon-grn" }, "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.10.19" } }, "nbformat": 4, "nbformat_minor": 5 }