{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "aa0f25ad",
      "metadata": {},
      "source": [
        "# Model Onboarding\n",
        "\n",
        "Use this notebook for the exposure initial upload and risk dataset creation of a set of factor exposures using daily CSV files.\n",
        "\n",
        "The notebook contains a section that obtains coverage statistics of the created risk dataset against the uploaded exposures."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "41896ea9",
      "metadata": {},
      "outputs": [],
      "source": [
        "import datetime as dt\n",
        "import itertools as it\n",
        "import shutil\n",
        "import tempfile\n",
        "\n",
        "from pathlib import Path\n",
        "\n",
        "import polars as pl\n",
        "from tqdm import tqdm\n",
        "\n",
        "from bayesline.apiclient import BayeslineApiClient\n",
        "from bayesline.api.equity import (\n",
        "    CategoricalExposureGroupSettings,\n",
        "    ContinuousExposureGroupSettings,\n",
        "    ExposureSettings, \n",
        "    DerivedRiskDatasetSettings,\n",
        "    RiskDatasetReferencedExposureSettings,\n",
        "    RiskDatasetUploadedExposureSettings,\n",
        "    UniverseSettings,\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "8b2bad34",
      "metadata": {
        "tags": [
          "skip-execution"
        ]
      },
      "outputs": [],
      "source": [
        "bln = BayeslineApiClient.new_client(\n",
        "    endpoint=\"https://[ENDPOINT]\",\n",
        "    api_key=\"[API-KEY]\",\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f534927f",
      "metadata": {},
      "source": [
        "## Exposure Upload"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "434d71d3",
      "metadata": {
        "tags": [
          "skip-execution"
        ]
      },
      "outputs": [],
      "source": [
        "exposure_dir = Path(\"/PATH/TO/EXPOSURES\")\n",
        "assert exposure_dir.exists()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "367cefc7",
      "metadata": {},
      "outputs": [],
      "source": [
        "exposure_dataset_name = \"My-Exposures\""
      ]
    },
    {
      "cell_type": "markdown",
      "id": "51944046",
      "metadata": {},
      "source": [
        "Below creates a new exposure uploader for the chosen dataset name `My-Exposures`. See the [Uploaders Tutorial](https://docs.bayesline.com/0.24.2/notebooks/tutorial_uploaders.html) for a deep dive into the `Uploaders API`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "892b529d",
      "metadata": {},
      "outputs": [],
      "source": [
        "exposure_uploader = bln.equity.uploaders.get_data_type(\"exposures\")\n",
        "uploader = exposure_uploader.create_or_replace_dataset(exposure_dataset_name)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "a2e500fb",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Found 31 files.\n",
            "Years: 2025\n"
          ]
        }
      ],
      "source": [
        "# list all csv files and group them by year\n",
        "# expects file pattern \"*_YYYY-MM-DD.csv\"\n",
        "\n",
        "all_files = sorted(exposure_dir.glob(\"*.csv\"))\n",
        "existing_files = uploader.get_staging_results().keys()\n",
        "\n",
        "files_by_year = {\n",
        "    k: list(v) \n",
        "    for k, v in \n",
        "    it.groupby(all_files, lambda x: int(x.name.split(\"_\")[1].split(\".\")[0].split(\"-\")[0]))\n",
        "}\n",
        "files_by_year.keys()\n",
        "\n",
        "print(f\"Found {len(all_files)} files.\")\n",
        "print(\"Years:\", \", \".join(map(str, files_by_year)))"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f043ef96",
      "metadata": {},
      "source": [
        "Below we batch the daily CSV files into annual Parquet files. Creating batched Parquet files is recommended as it will be much faster to upload and process compared to individually uploading daily files."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "id": "31b7653a",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Created temp directory: /tmp/tmpdimrlgg_\n"
          ]
        }
      ],
      "source": [
        "temp_dir = Path(tempfile.mkdtemp())\n",
        "print(f\"Created temp directory: {temp_dir}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "id": "ace71ffa",
      "metadata": {
        "tags": [
          "remove-output"
        ]
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\r",
            "  0%|          | 0/1 [00:00<?, ?it/s]"
          ]
        },
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\r",
            "100%|██████████| 1/1 [00:00<00:00,  1.38it/s]"
          ]
        },
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\r",
            "100%|██████████| 1/1 [00:00<00:00,  1.38it/s]"
          ]
        },
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\n"
          ]
        }
      ],
      "source": [
        "for year, files in tqdm(files_by_year.items()):\n",
        "    parquet_path = temp_dir / f\"exposures_{year}.parquet\"\n",
        "    df = pl.scan_csv(files, try_parse_dates=True)\n",
        "    df.sink_parquet(parquet_path)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "id": "4cf809d5",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (5, 11)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>asset_id</th><th>market^Market</th><th>style^Size</th><th>style^Value</th><th>style^Growth</th><th>style^Volatility</th><th>style^Momentum</th><th>style^Dividend</th><th>style^Leverage</th><th>asset_id_type</th></tr><tr><td>date</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td></tr></thead><tbody><tr><td>2025-05-01</td><td>&quot;IC000B1557&quot;</td><td>1.0</td><td>0.470459</td><td>1.3535156</td><td>-0.217041</td><td>-0.161893</td><td>0.6529541</td><td>0.066101</td><td>0.4144516</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC0010CEFE&quot;</td><td>1.0</td><td>-1.489746</td><td>-0.119995</td><td>-0.66748</td><td>2.1402996</td><td>-0.570312</td><td>0.029068</td><td>-0.318726</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC0021AFB7&quot;</td><td>1.0</td><td>-0.437744</td><td>-0.035828</td><td>-0.196411</td><td>-0.998698</td><td>0.69751</td><td>0.221924</td><td>-0.07859</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC002CE8B9&quot;</td><td>1.0</td><td>0.147491</td><td>0.7685547</td><td>-0.57666</td><td>1.3333334</td><td>-0.302246</td><td>0.21106</td><td>0.202637</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC002DC646&quot;</td><td>1.0</td><td>0.188354</td><td>0.014297</td><td>0.083984</td><td>-0.636719</td><td>-0.506348</td><td>0.33667</td><td>0.064331</td><td>&quot;bayesid&quot;</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (5, 11)\n",
              "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n",
              "│ date      ┆ asset_id  ┆ market^Ma ┆ style^Siz ┆ … ┆ style^Mom ┆ style^Div ┆ style^Lev ┆ asset_id │\n",
              "│ ---       ┆ ---       ┆ rket      ┆ e         ┆   ┆ entum     ┆ idend     ┆ erage     ┆ _type    │\n",
              "│ date      ┆ str       ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---      │\n",
              "│           ┆           ┆ f64       ┆ f64       ┆   ┆ f64       ┆ f64       ┆ f64       ┆ str      │\n",
              "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n",
              "│ 2025-05-0 ┆ IC000B155 ┆ 1.0       ┆ 0.470459  ┆ … ┆ 0.6529541 ┆ 0.066101  ┆ 0.4144516 ┆ bayesid  │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC0010CEF ┆ 1.0       ┆ -1.489746 ┆ … ┆ -0.570312 ┆ 0.029068  ┆ -0.318726 ┆ bayesid  │\n",
              "│ 1         ┆ E         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC0021AFB ┆ 1.0       ┆ -0.437744 ┆ … ┆ 0.69751   ┆ 0.221924  ┆ -0.07859  ┆ bayesid  │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC002CE8B ┆ 1.0       ┆ 0.147491  ┆ … ┆ -0.302246 ┆ 0.21106   ┆ 0.202637  ┆ bayesid  │\n",
              "│ 1         ┆ 9         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC002DC64 ┆ 1.0       ┆ 0.188354  ┆ … ┆ -0.506348 ┆ 0.33667   ┆ 0.064331  ┆ bayesid  │\n",
              "│ 1         ┆ 6         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘"
            ]
          },
          "execution_count": 10,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df.head().collect()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "1144bdf3",
      "metadata": {},
      "source": [
        "As a next step we iterate over the annual Parquet files and stage them in the uploader. See the [Uploaders Tutorial](https://docs.bayesline.com/0.24.2/notebooks/tutorial_uploaders.html#staging-data) for more details on the *staging* and *commit* concepts."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "id": "51abcd7d",
      "metadata": {},
      "outputs": [],
      "source": [
        "for year in files_by_year.keys():\n",
        "    parquet = temp_dir / f\"exposures_{year}.parquet\"\n",
        "    result = uploader.stage_file(parquet)\n",
        "    assert result.success"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "id": "ff313884",
      "metadata": {},
      "outputs": [],
      "source": [
        "shutil.rmtree(temp_dir)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "313e34f2",
      "metadata": {},
      "source": [
        "### Data Commit\n",
        "\n",
        "Next up we commit the data into versioned storage."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "id": "cc937c79",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "UploadCommitResult(version=1, committed_names=['exposures_2025'])"
            ]
          },
          "execution_count": 13,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "uploader.commit(mode=\"append\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f3e7fcab",
      "metadata": {},
      "source": [
        "## Risk Dataset Creation\n",
        "\n",
        "Below creates a new *Risk Dataset* using above uploaded exposures. See the [Risk Datasets Tutorial](https://docs.bayesline.com/0.24.2/notebooks/tutorial_datasets.html) for a deep dive into the `Risk Datasets API`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "id": "3ea26592",
      "metadata": {},
      "outputs": [],
      "source": [
        "risk_datasets = bln.equity.riskdatasets"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "id": "11930e95",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "{'bayesline/Bayesline-US-500-1y': 'ready',\n",
              " 'bayesline/Bayesline-US-All-1y': 'ready'}"
            ]
          },
          "execution_count": 15,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# exisint datasets which can be used as reference datasets\n",
        "risk_datasets.get_dataset_names()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "id": "187d250a",
      "metadata": {},
      "outputs": [],
      "source": [
        "risk_dataset_name = \"My-Risk-Dataset\""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "id": "646b1aae",
      "metadata": {},
      "outputs": [],
      "source": [
        "risk_datasets.delete_dataset_if_exists(risk_dataset_name)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "9f1b27b9",
      "metadata": {},
      "source": [
        "We need to specify an assignment of which exposures are *style*, *region*, etc. Below lists those *factor groups* as they were extracted from the uploaded exposures."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "id": "d50e3dc8",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (2, 1)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>factor_group</th></tr><tr><td>str</td></tr></thead><tbody><tr><td>&quot;style&quot;</td></tr><tr><td>&quot;market&quot;</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (2, 1)\n",
              "┌──────────────┐\n",
              "│ factor_group │\n",
              "│ ---          │\n",
              "│ str          │\n",
              "╞══════════════╡\n",
              "│ style        │\n",
              "│ market       │\n",
              "└──────────────┘"
            ]
          },
          "execution_count": 18,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "uploader.get_data(columns=[\"factor_group\"], unique=True).collect()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "4a38e68b",
      "metadata": {},
      "source": [
        "See API docs for [`DerivedRiskDatasetSettings`](https://docs.bayesline.com/0.24.2/_autosummary/bayesline.api.equity.DerivedRiskDatasetSettings.html) and [`RiskDatasetUploadedExposureSettings`](https://docs.bayesline.com/0.24.2/_autosummary/bayesline.api.equity.RiskDatasetUploadedExposureSettings.html) for other potential settings.\n",
        "\n",
        "In this recipe we pass through the industry hierarchy from the reference risk dataset, choose that our uploaded exposures make up the estimation universe and that we take the union of all assets across all of our exposures as the overall asset filter."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "id": "23832838",
      "metadata": {},
      "outputs": [],
      "source": [
        "settings = DerivedRiskDatasetSettings(\n",
        "    reference_dataset=\"bayesline/Bayesline-US-All-1y\",\n",
        "    exposures=[\n",
        "        RiskDatasetReferencedExposureSettings(\n",
        "            categorical_factor_groups=[\"trbc\"],\n",
        "            continuous_factor_groups=[],\n",
        "        ),\n",
        "        RiskDatasetUploadedExposureSettings(\n",
        "            exposure_source=exposure_dataset_name,\n",
        "            continuous_factor_groups=[\"market\", \"style\"],\n",
        "            categorical_factor_groups=[],\n",
        "        ),\n",
        "    ],\n",
        "    trim_start_date=dt.date(2025, 5, 1),\n",
        "    trim_assets=\"asset_union\",\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "id": "d4d47a80",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (3_312_790, 23)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>bayesid</th><th>market.Market</th><th>style.Dividend</th><th>style.Growth</th><th>style.Leverage</th><th>style.Momentum</th><th>style.Size</th><th>style.Value</th><th>style.Volatility</th><th>trbc.Academic &amp; Educational Services</th><th>trbc.Basic Materials</th><th>trbc.Consumer Cyclicals</th><th>trbc.Consumer Non-Cyclicals</th><th>trbc.Energy</th><th>trbc.Financials</th><th>trbc.Government Activity</th><th>trbc.Healthcare</th><th>trbc.Industrials</th><th>trbc.Institutions, Associations &amp; Organizations</th><th>trbc.Real Estate</th><th>trbc.Technology</th><th>trbc.Utilities</th></tr><tr><td>date</td><td>str</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td></tr></thead><tbody><tr><td>2025-03-31</td><td>&quot;IC000B1557&quot;</td><td>1.0</td><td>0.284271</td><td>0.090833</td><td>0.544068</td><td>0.800058</td><td>0.447146</td><td>1.697875</td><td>-0.038657</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC0010CEFE&quot;</td><td>1.0</td><td>-0.723057</td><td>-0.329408</td><td>0.064787</td><td>-0.309288</td><td>-1.286021</td><td>-1.221866</td><td>-1.718733</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC0021AFB7&quot;</td><td>1.0</td><td>0.04391</td><td>0.089351</td><td>-0.064524</td><td>1.169601</td><td>-0.051723</td><td>0.320095</td><td>-1.193336</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC002CE8B9&quot;</td><td>1.0</td><td>0.036457</td><td>-0.346654</td><td>0.269556</td><td>0.839927</td><td>0.181918</td><td>1.147284</td><td>1.208764</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC002DC646&quot;</td><td>1.0</td><td>0.313152</td><td>0.40443</td><td>0.091754</td><td>-0.35282</td><td>0.242172</td><td>0.433015</td><td>-0.634883</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFE60191&quot;</td><td>1.0</td><td>-0.023671</td><td>-0.453129</td><td>0.790672</td><td>0.415519</td><td>-0.272801</td><td>-0.716449</td><td>0.09471</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFE938FD&quot;</td><td>1.0</td><td>1.211147</td><td>-1.985832</td><td>0.888086</td><td>0.218208</td><td>0.938719</td><td>0.447164</td><td>-0.39469</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFE94AED&quot;</td><td>1.0</td><td>1.019668</td><td>0.231985</td><td>0.9769</td><td>1.195782</td><td>0.170358</td><td>0.880557</td><td>-1.067068</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFEBBB38&quot;</td><td>1.0</td><td>0.423856</td><td>0.612127</td><td>0.202262</td><td>0.749959</td><td>0.594511</td><td>0.438442</td><td>-0.933601</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFF2F5AD&quot;</td><td>1.0</td><td>-0.071763</td><td>-2.310918</td><td>-1.383523</td><td>-0.130318</td><td>-0.723899</td><td>-0.755927</td><td>1.001356</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (3_312_790, 23)\n",
              "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n",
              "│ date      ┆ bayesid   ┆ market.Ma ┆ style.Div ┆ … ┆ trbc.Inst ┆ trbc.Real ┆ trbc.Tech ┆ trbc.Uti │\n",
              "│ ---       ┆ ---       ┆ rket      ┆ idend     ┆   ┆ itutions, ┆ Estate    ┆ nology    ┆ lities   │\n",
              "│ date      ┆ str       ┆ ---       ┆ ---       ┆   ┆ Associati ┆ ---       ┆ ---       ┆ ---      │\n",
              "│           ┆           ┆ f32       ┆ f32       ┆   ┆ on…       ┆ f32       ┆ f32       ┆ f32      │\n",
              "│           ┆           ┆           ┆           ┆   ┆ ---       ┆           ┆           ┆          │\n",
              "│           ┆           ┆           ┆           ┆   ┆ f32       ┆           ┆           ┆          │\n",
              "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n",
              "│ 2025-03-3 ┆ IC000B155 ┆ 1.0       ┆ 0.284271  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC0010CEF ┆ 1.0       ┆ -0.723057 ┆ … ┆ 0.0       ┆ 0.0       ┆ 1.0       ┆ 0.0      │\n",
              "│ 1         ┆ E         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC0021AFB ┆ 1.0       ┆ 0.04391   ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC002CE8B ┆ 1.0       ┆ 0.036457  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 9         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC002DC64 ┆ 1.0       ┆ 0.313152  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 6         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ …         ┆ …         ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …        │\n",
              "│ 2026-03-3 ┆ ICFFE6019 ┆ 1.0       ┆ -0.023671 ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 1         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFE938F ┆ 1.0       ┆ 1.211147  ┆ … ┆ 0.0       ┆ 1.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFE94AE ┆ 1.0       ┆ 1.019668  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFEBBB3 ┆ 1.0       ┆ 0.423856  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 8         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFF2F5A ┆ 1.0       ┆ -0.071763 ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘"
            ]
          },
          "execution_count": 20,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "exposures_api = bln.equity.exposures.load(\n",
        "    ExposureSettings(\n",
        "        exposures=[\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"market\"),\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"style\", standardize_method=\"equal_weighted\"),\n",
        "            CategoricalExposureGroupSettings(hierarchy=\"trbc\"),\n",
        "        ],\n",
        "    ).with_dataset(\"bayesline/Bayesline-US-All-1y\")\n",
        ")\n",
        "exposures_api.get(\n",
        "    UniverseSettings(), \n",
        "    standardize_universe=None\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "9b15eff6",
      "metadata": {},
      "source": [
        "Lastly we create the new dataset followed by describing its properties after creation."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "id": "aec4b4fe",
      "metadata": {},
      "outputs": [],
      "source": [
        "my_risk_dataset = risk_datasets.create_dataset(risk_dataset_name, settings)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5486fc1a",
      "metadata": {},
      "source": [
        "### Data Coverage\n",
        "\n",
        "As a first step after the risk dataset creation we cross check the asset coverage compared to our raw exposure upload."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "id": "ac3d4cad",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (5, 6)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>n_assets</th><th>min_exposure</th><th>max_exposure</th><th>mean_exposure</th><th>std_exposure</th></tr><tr><td>date</td><td>i64</td><td>f32</td><td>f32</td><td>f64</td><td>f64</td></tr></thead><tbody><tr><td>2025-05-01</td><td>9108</td><td>-3.0</td><td>3.0</td><td>0.07378</td><td>0.871145</td></tr><tr><td>2025-05-02</td><td>9107</td><td>-3.0</td><td>3.0</td><td>0.075814</td><td>0.869677</td></tr><tr><td>2025-05-03</td><td>9106</td><td>-3.0</td><td>3.0</td><td>0.075695</td><td>0.869591</td></tr><tr><td>2025-05-04</td><td>9106</td><td>-3.0</td><td>3.0</td><td>0.075698</td><td>0.869592</td></tr><tr><td>2025-05-05</td><td>9107</td><td>-3.0</td><td>3.0</td><td>0.080996</td><td>0.868992</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (5, 6)\n",
              "┌────────────┬──────────┬──────────────┬──────────────┬───────────────┬──────────────┐\n",
              "│ date       ┆ n_assets ┆ min_exposure ┆ max_exposure ┆ mean_exposure ┆ std_exposure │\n",
              "│ ---        ┆ ---      ┆ ---          ┆ ---          ┆ ---           ┆ ---          │\n",
              "│ date       ┆ i64      ┆ f32          ┆ f32          ┆ f64           ┆ f64          │\n",
              "╞════════════╪══════════╪══════════════╪══════════════╪═══════════════╪══════════════╡\n",
              "│ 2025-05-01 ┆ 9108     ┆ -3.0         ┆ 3.0          ┆ 0.07378       ┆ 0.871145     │\n",
              "│ 2025-05-02 ┆ 9107     ┆ -3.0         ┆ 3.0          ┆ 0.075814      ┆ 0.869677     │\n",
              "│ 2025-05-03 ┆ 9106     ┆ -3.0         ┆ 3.0          ┆ 0.075695      ┆ 0.869591     │\n",
              "│ 2025-05-04 ┆ 9106     ┆ -3.0         ┆ 3.0          ┆ 0.075698      ┆ 0.869592     │\n",
              "│ 2025-05-05 ┆ 9107     ┆ -3.0         ┆ 3.0          ┆ 0.080996      ┆ 0.868992     │\n",
              "└────────────┴──────────┴──────────────┴──────────────┴───────────────┴──────────────┘"
            ]
          },
          "execution_count": 22,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "upload_stats_df = uploader.get_data_detail_summary()\n",
        "upload_stats_df.head()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "id": "437e25c2",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (2_258_896, 6)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>asset_id</th><th>asset_id_type</th><th>factor_group</th><th>factor</th><th>exposure</th></tr><tr><td>date</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f32</td></tr></thead><tbody><tr><td>2025-05-09</td><td>&quot;IC7415FBFA&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-0.363037</td></tr><tr><td>2025-05-09</td><td>&quot;IC74185ED1&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-1.039062</td></tr><tr><td>2025-05-09</td><td>&quot;IC7421FC1D&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-0.847656</td></tr><tr><td>2025-05-09</td><td>&quot;IC74220991&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-0.121033</td></tr><tr><td>2025-05-09</td><td>&quot;IC74362F2A&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>1.158203</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2025-05-31</td><td>&quot;ICAF831C52&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-0.620117</td></tr><tr><td>2025-05-31</td><td>&quot;ICAF88CD01&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>0.832031</td></tr><tr><td>2025-05-31</td><td>&quot;ICAF967F46&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-1.527344</td></tr><tr><td>2025-05-31</td><td>&quot;ICAF98D925&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-0.663574</td></tr><tr><td>2025-05-31</td><td>&quot;ICAF9E7C60&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-0.211914</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (2_258_896, 6)\n",
              "┌────────────┬────────────┬───────────────┬──────────────┬────────┬───────────┐\n",
              "│ date       ┆ asset_id   ┆ asset_id_type ┆ factor_group ┆ factor ┆ exposure  │\n",
              "│ ---        ┆ ---        ┆ ---           ┆ ---          ┆ ---    ┆ ---       │\n",
              "│ date       ┆ str        ┆ str           ┆ str          ┆ str    ┆ f32       │\n",
              "╞════════════╪════════════╪═══════════════╪══════════════╪════════╪═══════════╡\n",
              "│ 2025-05-09 ┆ IC7415FBFA ┆ bayesid       ┆ style        ┆ Growth ┆ -0.363037 │\n",
              "│ 2025-05-09 ┆ IC74185ED1 ┆ bayesid       ┆ style        ┆ Growth ┆ -1.039062 │\n",
              "│ 2025-05-09 ┆ IC7421FC1D ┆ bayesid       ┆ style        ┆ Growth ┆ -0.847656 │\n",
              "│ 2025-05-09 ┆ IC74220991 ┆ bayesid       ┆ style        ┆ Growth ┆ -0.121033 │\n",
              "│ 2025-05-09 ┆ IC74362F2A ┆ bayesid       ┆ style        ┆ Growth ┆ 1.158203  │\n",
              "│ …          ┆ …          ┆ …             ┆ …            ┆ …      ┆ …         │\n",
              "│ 2025-05-31 ┆ ICAF831C52 ┆ bayesid       ┆ style        ┆ Growth ┆ -0.620117 │\n",
              "│ 2025-05-31 ┆ ICAF88CD01 ┆ bayesid       ┆ style        ┆ Growth ┆ 0.832031  │\n",
              "│ 2025-05-31 ┆ ICAF967F46 ┆ bayesid       ┆ style        ┆ Growth ┆ -1.527344 │\n",
              "│ 2025-05-31 ┆ ICAF98D925 ┆ bayesid       ┆ style        ┆ Growth ┆ -0.663574 │\n",
              "│ 2025-05-31 ┆ ICAF9E7C60 ┆ bayesid       ┆ style        ┆ Growth ┆ -0.211914 │\n",
              "└────────────┴────────────┴───────────────┴──────────────┴────────┴───────────┘"
            ]
          },
          "execution_count": 23,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "uploader.get_data().collect()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "id": "988a5e0a",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Categorical Hierarchies ['trbc']\n"
          ]
        }
      ],
      "source": [
        "# note that the industry and region hierarchy names tie out with the factor groups we specified above\n",
        "print(f\"Categorical Hierarchies {list(my_risk_dataset.describe().universe_settings_menu.categorical_hierarchies.keys())}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "id": "331dc9d4",
      "metadata": {},
      "outputs": [],
      "source": [
        "universe_settings = UniverseSettings()\n",
        "\n",
        "universe_api = bln.equity.universes.load(\n",
        "    universe_settings.with_dataset(risk_dataset_name)\n",
        ")\n",
        "universe_counts = universe_api.counts()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "id": "ce18ac1c",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Axes: xlabel='date'>"
            ]
          },
          "execution_count": 26,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGtCAYAAADwAbWYAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvgI3uAAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAhGJJREFUeJzt3XdYk9cXB/Bv2CB7D1mCggsHorjqXrhw1NG6V92r2modddZtravuVfeqdeEW90RFVFBxIC6UvVdyfn+kvL/GoIImhITzeR6eNjf3vTmvSnJyp4iICIwxxhhjGkpL1QEwxhhjjCkTJzuMMcYY02ic7DDGGGNMo3GywxhjjDGNxskOY4wxxjQaJzuMMcYY02ic7DDGGGNMo3GywxhjjDGNpqPqAFRNIpHg9evXMDExgUgkUnU4jDHGGCsAIkJKSgocHR2hpfXpvpsSn+y8fv0azs7Oqg6DMcYYY18gOjoapUuX/mSdEp/smJiYAJD+YZmamqo4GsYYY4wVRHJyMpydnYXP8U8p8clO3tCVqakpJzuMMcaYminIFBSeoMwYY4wxjcbJDmOMMcY0Gic7jDHGGNNonOwwxhhjTKNxssMYY4wxjcbJDmOMMcY0Gic7jDHGGNNonOwwxhhjTKNxssMYY4wxjcbJDmOMMcY0Gic7jJV0ORnA23tA8htVR8IYY0pR4s/GYqzESI8HYh8B7x9K/5v3/4kvABAg0gIqdQbqjQHsKqg6WsYYUxhOdhjTJBIJkPwKiH0IvH8km9Skx378On0zICsJCNst/fFqDdT/ESjtW3SxM8aYknCyw5g6ys0G4p9Kk5rYR/8mNg+B2EggJ+3j15mWBmzKAdZegHVZwMZL+v+lrIE3ocDFxcCDg8DDI9KfMg2lSY9bfaAAJwszxlhxJCIiUkbDly9fxtWrVyEWi9GyZUtUrlxZrk58fDy2bduGmJgYTJ06FXp6el9U5/nz5/jnn3+QlpaGhg0bok6dOgWOMzk5GWZmZkhKSoKpqWnhbpIxZctMBmIfyyc18c8AEud/jZYOYOnxb1Lzb2JjUw6wKgvoG3/+Nd8/Ai4tAe7uAiS50rLSftKkp1xLTnoYY8VCYT6/lZLs/PDDD9i9ezd69eqF3NxcbN26FfPmzcPgwYOFOhMnTsTmzZvh7e2Ns2fPIiUlBcbGsm/EBalz5swZtGnTBgEBAbC1tcXWrVsxZswYTJ8+vUCxcrLDVI4ISI2RnU/z/qE0yUl5/fHr9Iz/TWbK/b+3xsYLsHADtHW/Pq7EF8DlZcCtLUBuprTMtiJQfyxQIRDQ5o5hxpjqqDTZuXjxIurXr48rV67A398fABAUFISOHTvi2bNnsLe3BwCcPXsWtWvXxrFjx9ChQ4d8E5nP1SEilCtXDk2bNsWff/4JANi3bx+6dOmC8PBwlCtX7rPxcrLDioxEDCQ8z2eS8CPpfJmPMbb7T1Lj9f//N3Usml6W1HfA1ZXA9XVAdoq0zMIdqDcaqNId0NFXfgyMMfaBwnx+K/yrWUREBLS1tVGrVi2hrG7dusjMzMThw4cxYMAAAECjRo0+29bn6ty9exeRkZHYtm2bUBYYGAhzc3McOHAAP/300xfeBWNfITsdiIuUT2riIgFxdv7XiLQAc9f/JzNCUlMWMLQo2vg/ZGwLNJ0G1B0lTXiurgQSngGHRgHB84A6IwDf3oBeKdXGyRhjH6HwZMfb2xtisRiXL19G3bp1AQAXLlwAIE2EFOnhw4cAAE9PT6FMW1sb7u7uwnMfysrKQlZWlvA4OTlZoTGxEirlLXBlBfDgn/8v5c6PjoF07syHk4QtPQBdgyINudAMLYAG44HaQ4GQzdIhrpTXwPGJwLm5gInjl7dtWx5ovQgwslRcvEzz5GQAxyYCL66qOpKSx9AcCPwTsHRXdSRfROHJTr169dC7d28EBASge/fuyM3NxcWLF+Ho6Ii0tE+sEvkCee192H1lZmb20deaM2dOgefzMPZZCc+BS0uB21sB8f+TaBha/H9i8H8nCZs5A1raKgtXIfRKSRMev/5A6E7g4u/Snp7MTwzFfc77cGnvV88DgLGNwkJlGiQrFdjRDXh+QdWRlFz7BwJ9j6nlfD2lRLxp0yYMHDgQt27dgp6eHubOnYsqVarAwkKx3fF583eSkpJgZWUllCcmJsLdPf/sc+LEiRg7dqzwODk5Gc7OzgqNi5UA7x8CFxYDYXv+vyqqdE2g7kjA2V+6lFvTVy3p6EuHr6p+D7y+9f9JzIWVlQIcHgPE3AM2tgJ6/QOYOSk2VqbeMhKBbd8CL68DeiZAm98BEztVR1Vy5GQA+wYCL29It6dooH5TRJSWntWtW1cYxnry5Alev34tTFhWFG9vbwDAo0ePULt2bQBAbm4unj17hu7du+d7jb6+PvT1eUIl+0Kvbkl/2cMPQxiq8mgsXZbtWlfzE5z8aOsAzjW/rg0bb2BzOyDuMbCxJdDroNp2lzMFS4sF/goE3oYBBuZAj/282aUqtF4o7dkJngt4NgGc1OvvQClnY4WGhgr/T0SYNGkSvL29ERAQoNDXqVy5MsqVK4f169cLZXv37kVycjICAwMV+lqsBCMCnl8E/uoArG0EhB8CQED5tsDAs0DPvwG3eiUz0VEUKw+gX5B0lVfiC2BjgHSVGivZkt8Am1pLE51SNkCfI5zoqErlb4GKHaU92fsHSRdiqBGl9OysWbMGkZGRqFy5Ms6fP4/379/j6NGj0NH5/8sdPnwYV69exaNH0je0mTNnQldXFz179oSXl1eB66xbtw6tWrXC27dvYWdnh127dmHGjBkyk5YZ+yJEwOOTwIVFQPS/EyJF2tJf+npjAFtv1canacxdgH7HgC3tgfcR/w5pHQDs5TckZSVA4gtpb1/CM+nk994HpRP6mWqIRNJFBC+uSleWnpwifawmlLaDcnBwMEJCQuDq6orWrVvD0NBQ5vnjx4/jxo0bctd169ZNSFQKUgcAXr16hUOHDiE9PR0NGjSAr2/BM3/eZ4fJkYilq6ouLAZiwqRl2vpAtR7SOTkWbioNT+Olxf07bHEXMDD7d9iihqqjYkUpNlKa9Ca/lG7J0Psg/94VF0/OSn8/AeD7vUDZZioLReU7KKsTTnaYIDdbekTCxd+B+CfSMj1joEY/oPYwwMRetfGVJDITUo2B73YDbnUV/zpvQqWTLksiPROgUkfF7LatSDEPpIlO2jvpSsZe/0g30GTFR9AE4Nqf0g1Ph1wBSll9/hol4GSnEDjZYchOlx6JcHmp9MRwQLp0vNYQoOZA3vtFVbJSgZ3dgWfnAR1DoNtWwLPp17dLBERdBi4sBJ6c+fr21Jn/UKDlHFVH8X+vb0vnxmUkAHaVpfPheCuC4icnA1jTUDrc7N0G6LpVJXMWOdkpBE52SrDMJODGOuDKSiA9VlpmbA/UGQ749i3YoZlMuXIygN29gcfHAW09oPNGoHybL2vrY3OwPBoBukaKi1kdSHKBh0el/9/zgPTPQNWirgDbuwBZyYBTDaDHXtXvHs4+7s1dYG1jQJIDtF8hHeYvYpzsFAInOyVQ6ntpF+z1tdI3VkA6H6DuaOlZT8V9J+OSJjcb2D9AOo9KpA10WA34fFvw63kOVv4OjwVurpdO/h1ySbU9mE/OAju/A3LSpVs4fLcL0DdRXTysYC7+DpyaJh1qHnyxyLeL4GSnEDjZKUGSXkqPOAjZDORmSMtsyktP8a7YUS13BS0xxLnAweFA6A4AIqDtH9INDT8lNxsI2y19Q46LlJbxHKz/y04HVteX/tlU7Ah03qCa7RMeBkl778RZgEcT6ZCIXgnraVNXEjGwqQ3w4rJ0M9W+R4t0h3hOdgqBk50SIDYSuPQ7ELpL2uUKAI7VgW/GAeVaAVpK2W6KKZpEAhwdJ+2NAICWcwH/IfL1stOB239Jj/FIfiktMzCX1q05iOdg/derEGB9c+mwVse1gE+Xon39e/ulG9VJcqVzPzpvkO7MzdRHQhTwZ10gOwVoMlW6wWoR4WSnEDjZ0WBvw6RDFw8OACSRlrnVlyY57g14E0B1RCTd3+PyMunjxlOkf5/AZ+Zg9eFhkY85Nx84OxvQN5MOZ5kX0fE5t7cCB0dIfzcrd5EeMsm9q+rpznbgwBBASwcYcBpwrFokL8vJTiEoNdmJeyLdEZZ7DorWi2vSSaiPj/+/rFwr6XDV1x5rwFSPCDg3Dwj+dxVRnRHSOTjX1wJZ/x5Gau4K1BsNVPmO52B9jjhXekTHyxvSLwO9Dir/Pev6WmkvHQBU7y0960rdD8gtyYiA3b2A8IPSQ49/OAfoGn7+uq/EyU4hKC3ZyckAlvgAhubS3XYrf1v89rPQJETSZcQXFgNRF6VlIi3pXIR6YwD7SqqNjyne5WXAicmyZTbe0m50noNVOHFPgFX1gZw0oPksaQKpLBeXAKd+lf6//1CgxW/cy6oJ0uOBlbWB1LdAzR+AgPlKf0lOdgpBacnOqxDpfhGZ/37TNHMG6o6SrgApgoy3xJBIgIjD0p6cN3ekZVq6QNXu0tVVVh6qjI4p2431QNDP0iMl6v8IeAVwT+qXCtkEHBolXeI/8KzivyAQAWd/A87/+yH4zXig0SROdDRJ5Clgayfp//fYLz0wVIk42SkEpQ5jZSYDNzcAV1ZIdwMFpIfZ1R4G1OgPGPAcoS8mzgHu7ZP25MQ+lJbpGAI1+gK1hwNmTqqNjxWd3Cye1KoIRNLl3w+PArYVgYFnFDcESAQcnwRcXSF93ORX6bAy0zxHxwPX10jnyw29otQFAZzsFEKRTFDOyZBOxru0FEh6IS0zMJN29dUarLKtttVSTiZwZytw6Q/pQYGAdGJlrUH//llaqzY+xtRZ6nvgz9pA2nvpl4YWs7++TYkEODJG2nMEAK0WSH9fmWbKTgfWNABiHwEV2gPfblZa7x0nO4VQpKuxxDlA2F7g4mLpPwRAunOrb1/pihE+/+XjslL+30uWGiMt414yxhTv4TFgR1cAIukBnO7ffHlb4lzgn6HSM+dEWkC7ZSrZaZcVsde3gXVNpVsKBK6STitQAk52CkElS8+FeSYLpQcRAtJx8irdpfN6eJ7J/6XHA9dWAddWA5mJ0jLT0tI/p+o9ef4TY8pwaJS0J8a0tHQ5uqF54dvIzQL29QfCD0mXJHdcA1TqpOhIWXF1fgFwZpb0wNkhlwALV4W/BCc7haDSfXaIgCen/11BdElaJtKSviHUGwPYVSzaeIqT5DfAleXAzY3SFSIAYFX2/yvbdPRUGx9jmiwrVbq7cvxT6e9bp3WFuz4nA9jVQzphVVtPOpThHaCcWFnxJM4FNgUA0dekR4D0PqTw7QU42SmEYrOpYNQV6fDW4xP/LyvbvGSe25ORID3LSJwtfWzvI11pU74t78XBWFF5eVO6uzKJgU7rgcqdC3ZdVgqwozvw/IJ0mL7b9uJx0CgrevHPgFX1gOxUoOl06d5XCsTJTiEUm2Qnz5tQ6Vk+9w8AKNF/NYBLbaD+OOnyRV6eyljROzsHODdXuqBiyGXArPSn62ckANu+lW5QqGcCfL8HcK1dNLGy4unWX9Jz7bT1gJF3FLpSlpOdQih2yU6e2MfSYw5ys1UdSdETaQFlGgCudVQdCWMlmzhH2rvz+pb0iJWeBz6+j1FaLPBXoPSYFkML6T4rTtWLMlpWHBFJ54B5BQBeLRXaNCc7hVBskx3GGCsOYiOl83dy0oEWc4DaQ+XrJL8GtrSXrjItZQv0OlCy5xyyIlGYz2/eapQxxtjHWXtKj5AAgFPTgJgHss8nRAEbW0kTHVMnoG8QJzqs2OFkhzHG2KfV6AeUbQGIs4D9g6TLygHpcPvGVkDCc+mhx32DpMkRY8UMJzuMMcY+TSSSbghoZAXEhAFnZwNv70kTneRX0pOu+wYpZS8VxhSBkx3GGGOfZ2InTXgA6dE3GwOkx0rYVwb6HgVMHVQbH2OfwMkOY4yxgvFuDVTrCYCArCSgtB/Q+zCfSceKPR1VB8AYY0yNtJwDpLyR7r3Tdimgb6zqiBj7LE52GGOMFZy+CdBjn6qjYKxQlJbsPH78GDdu3IBYLEbjxo3h5CS/a2JWVhYOHjyImJgY/PDDD9DV1ZWrk5CQgBMnTiAtLQ3169dH2bJlZZ7fvXs33r17J1NWvnx5NGnSRLE3xBhjjDG1pJQ5O1OnTkXVqlXxzz//4MCBAyhfvjx2794tU2fhwoXw8PDAnDlzMGLECGRlZcm1c/PmTXh6emLZsmU4fPgwqlSpguXLl8vUmT9/PrZv346IiAjh582bN8q4LcYYY4ypIYX37ISEhGDmzJk4fvw4mjdvDgDYtWsXBgwYgKZNm8LS0hIA4O7ujtu3b+PSpUvo0KFDvm3169cPLVq0wPbt2wEAGzZswODBg9G2bVu4uv5/iWO7du0wYcIERd8KY4wxxjSAwnt2bt++DW1tbTRt2lQoa9myJVJSUnD48GGhrFOnTrCxsfloO+Hh4QgLC8OQIUOEsh49esDQ0BB///23XN21a9fi6NGjSEhIUODdMMYYY0zdKbxnx93dHWKxGGFhYahSpQoAaQIEAPfu3StwOw8eSLckL1++vFCmp6cHDw8P4bk8YWFhEIlEuHv3Ll68eIEtW7YgICAg33azsrJkhsySk5MLHBNjjDHG1I/Ck53GjRujVatWCAgIwMCBA5Gbm4s9e/bA1ta2UIlFSkoKAMDc3Fym3MLCQqad5cuXw9/fX3g8atQo9OjRA0+ePIGFhYVcu3PmzMH06dMLeVeMMcYYU1cKH8YSiUQ4cuQIli5dipycHOjq6uLYsWMwMDCAmZlZgdsxNDQE8P+kJ09ycjKMjIyEx/9NdABg3LhxSEhIwI0bN/Jtd+LEiUhKShJ+oqOjCxwTY4wxxtSPUpaei0QidOrUCZ06dQIAvHz5Ei9evECNGjUK3EbeEvNnz54JPTQSiQRRUVHo2LHjR6/T19cHACQmJn70+bw6jDHGGNN8Sll6HhUVJfN49uzZcHZ2Rrt27QrcRtWqVeHs7IytW7cKZceOHUNsbCzatm0LAHj//r3chOStW7dCW1tbrseHMcYYYyWTUnp2pkyZApFIhMqVKyM4OBhXrlxBUFCQTI/K+fPncffuXdy9excAsGbNGujp6aFNmzZwc3ODlpYWVq5ciY4dOyI5ORl2dnZYtWoVRo0ahUqVKgGQbjgYGBiIhg0bws3NDbdv38b+/fsxf/58uLi4KOPWGGOMMaZmREREim5UIpFg9+7dCAkJgaurK7p37w4rKyuZOnv27MG5c+fkrh0yZAgqVqwoPL5//z727NmD9PR0NGjQAK1bt5apn5SUhD179uDx48dwdHREQECA3C7Ln5KcnAwzMzMkJSXB1NS0kHfKGGOMMVUozOe3UpIddcLJDmOMMaZ+CvP5rZQ5O4wxxhhjxQUnO4wxxhjTaJzsMMYYY0yjcbLDGGOMMY3GyQ5jjDHGNBonO4wxxhjTaJzsMMYYY0yjcbLDGGOMMY3GyQ5jjDHGNBonO4wxxhjTaJzsMMYYY0yjcbLDGGOMMY3GyQ5jjDHGNBonO4wxxhjTaJzsMMYYY0yjcbLDGGOMMY3GyQ5jjDHGNBonO4wxxhjTaJzsMMYYY0yjcbLDGGOMMY3GyQ5jjDHGNBonO4wxxhjTaJzsMMYYY0yjcbLDGGOMMY3GyQ5jjDHGNJqOshqOi4tDaGgoxGIxateuDWNjY7k6RISLFy8iJiYGHTp0gLa2tlyd7OxsXLlyBWlpaahVqxasrKy+qA5jjDHGSialJDvLly/HhAkT4Ovri9zcXERERGDXrl1o2rSpUGfjxo2YN28esrKy8Pz5c6SkpMglRA8fPkSLFi2gr68PKysr3L17F+vWrUO3bt0KVYcxxhhjJZfCh7Hu3buHUaNGYf369Th37hwuXbqE2bNno3v37khJSRHq5eTk4J9//sHvv//+0bb69u2LihUrIjw8HJcvX8aMGTPQv39/vH37tlB1GGOMMVZyKTzZuX79OkQiETp37iyUdevWDbGxsThy5IhQNmjQIHh5eX20nSdPnuDKlSsYM2YMtLSkYQ4ZMgQikQj79+8vcB3GGGOMlWwKT3YcHBwgFovx9OlToezx48cAgDt37hS4nbt37wIAfHx8hDJDQ0N4enoKzxWkzoeysrKQnJws88MYY4wxzaXwOTvNmjVDrVq10LZtW4wePRq5ublYuXIlLCwskJSUVOB28upaWFjIlFtZWSExMbHAdT40Z84cTJ8+vcBxMMYYY0y9KbxnR0dHB+fOncOIESNw48YN3L9/H9u2bYO5uTlKlSpV4Hb09fUBAOnp6TLlqampMDAwKHCdD02cOBFJSUnCT3R0dIFjYowxxpj6UcpqLH19fQwbNkx4/O7dOzx//hxVq1YtcBtlypQBALx48QKVK1cWyqOjo9G6desC18kvtrwkiTHGGGOaTymbCsbFxck8/v3332FlZYXAwMACt+Hr6wtbW1vs3btXKLtw4QLevHmDVq1aFbgOY4wxxko2pfTsDB06FG5ubqhcuTKCg4OxY8cO/P333zL76Ny5cweRkZG4ceMGAODAgQMwMDBAvXr1YG9vDx0dHSxcuBD9+/eHWCyGnZ0d5s2bhx49esDPz08afAHqMMYYY6xkExERKbrRrKws/PnnnwgJCYGrqyv69esnDDnlWb9+PYKCguSunThxInx9fYXHwcHB2LlzJ9LT09GgQQP06dNHbqflgtT5mOTkZJiZmSEpKQmmpqZfcLeMMcYYK2qF+fxWSrKjTjjZYYwxxtRPYT6/+SBQxhhjjGk0TnYYY4wxptE42WGMMcaYRuNkhzHGGGMajZMdxhhjjGk0TnYYY4wxptE42WGMMcaYRuNkhzHGGGMajZMdxhhjjGk0TnYYY4wxptE42WGMMcaYRuNkhzHGGGMajZMdxhhjjGk0TnYYY4wxptE42WGMMcaYRuNkhzHGGGMajZMdxhhjjGk0TnYYY4wxptE42WGMMcaYRuNkhzHGGGMajZMdxhhjjGk0TnYYY4wxptE42WGMMcaYRuNkhzHGGGMajZMdxhhjjGk0HWU1nJ2djcjISIjFYlSsWBFaWvnnVQ8fPkRaWhoqVaoEPT29QrcTGhqKlJQUmTI7OzuULVtWcTfDGGOMMbWllGRn586dGDFiBCwtLZGbmwuxWIy9e/eiRo0aQp1Xr16hbdu2iIqKgpmZGVJSUrBt2zY0b968UO30798fsbGxKF26tFAWEBCAX375RRm3xhhjjDE1o/BhrMjISPTu3Ru//vorHj58iCdPnmDAgAHo0KEDMjMzhXp9+vSBsbExXr9+jadPn+KHH35Aly5dEB8fX6h2AGDw4MG4ePGi8MOJDmOMMcbyKDzZuXDhAsRiMQYPHiyUDRs2DC9fvsTRo0cBANHR0Th16hR+/vln6OvrAwB++uknZGZmYv/+/QVuJ09SUhJu3LiB169fK/p2GGOMMabmFJ7sWFpaQiwW4+3bt0LZq1evAAAhISEAgNu3bwMAfH19hTqmpqbw8vISnitIO3mWLl2KgQMHwtvbG76+vrh3795H48vKykJycrLMD2OMMcY0l8KTnebNm6N8+fLo1KkTDhw4gL1796JXr14wMTERhqjy/mtlZSVzrZWVlfBcQdoBgJEjRyI2NhZ37tzBq1ev4ODggMDAQGRkZOQb35w5c2BmZib8ODs7K/qPgDHGGGPFiMKTHUNDQ1y6dAnNmzfH2rVrsW3bNixYsAD29vYwNDQEAOjq6gKA3NybjIwMYUVWQdoBgF69egmPTUxMsHDhQjx58gQ3b97MN76JEyciKSlJ+ImOjlb0HwFjjDHGihGlrMaysLDAzJkzhceJiYl48uQJKlWqBABwdXUFIB2W8vb2Fuq9evUKTZs2LXA7+bGzsxPayo++vr4wT4gxxhhjmk8pmwp+OIS0evVqlCpVCh06dAAA+Pn5wczMDAcPHhTq3L59G9HR0WjWrFmB28nIyAARydQ5ceIEAHwyIWKMMcZYyaGUnp3evXujdu3aqFy5MoKDg7Fw4UJs2bIFFhYWAKS9KzNmzMCECRNgZGQEOzs7TJkyBQEBAfjmm28K3E5ERASGDh2Kvn37ws3NDbdv38Zvv/2Gvn37crLDGGOMMQCAiD7sGlGAxMREzJ07FyEhIXB1dcXgwYNlNgLMs2vXLuzYsQPp6elo0KABxo4dKzMfpyDthIWFYfXq1Xj8+DEcHR3Rvn17BAYGFjjW5ORkmJmZISkpCaampl98z4wxxhgrOoX5/FZKsqNOONlhjDHNIhaLkZOTo+owmALo6el99Lipwnx+K+1sLMYYY6woERHevn2LxMREVYfCFERLSwvu7u75np1ZGJzsMMYY0wh5iY6trS2MjIwgEolUHRL7ChKJBK9fv8abN2/g4uLyVX+fnOwwxhhTe2KxWEh0PtywlqkvGxsbvH79Grm5ucIefV9CKUvPGWOMsaKUN0fHyMhIxZEwRcobvhKLxV/VDic7jDHGNAYPXWkWRf19crLDGGOMMY3GyQ5jjDHGAACTJk2SOd1AU3CywxhjjDEAwPHjx/HgwQNVh6FwvBqLMcYYU7F79+5h27ZtiImJgZ+fHwYMGCCz+ujs2bPYt28fUlNTUbNmTfTr1w8GBgbC84MHD0aPHj1Qr149oWzGjBnw9vZGly5dAADjx49Ho0aNkJqaivPnz0NXVxe9e/dG1apVAQBz587F06dPsWPHDty5cwcAsGHDBo2Y9M09O4wxxjQSESE9O1clP4U5nGD37t3w9fVFbGwsateujbCwMAwYMEB4fs2aNWjVqhXMzMxQo0YNLFu2DM2aNYNEIhHqHDhwAM+fP5dp98yZM7h7967wOCgoCH369MHevXtRrVo1pKamolatWoiMjAQA1K5dGxYWFqhYsSICAwMRGBj4Vcu9ixPu2WGMMaaRMnLEqDD1uEpe+8GMFjDS+/xHbHp6OgYPHowpU6Zg8uTJQvn79+8BAGlpaZgwYQIWLFiAESNGAAA6deqEMmXKYNeuXejevXuh4qpevTp2794NAOjfvz+uXbuGXbt2YdKkSWjQoAEsLCzg4+ODbt26Fard4o57dhhjjDEVuXHjBhISEtCnTx+ZchsbGwDA/fv3kZCQgM6dOwvPOTg4oH79+rh48WKhX69hw4Yyjz09PfH69etCt6NuuGeHMcaYRjLU1caDGS1U9toFkXeO18d2fY6NjQUAWFpaypRbWloKzxXGf+f5ANKzp752wz51wMkOY4wxjSQSiQo0lKRKLi4uAIDHjx/Dx8dH7nlXV1cAwNOnT1G+fHmh/MmTJ2jUqJHw2MDAAFlZWTLXxsfHFzoeTd2UkYexGGOMMRWpWrUqKleujClTpgjJilgsxpEjRwAA5cuXh4+PD+bPny9Mej516hRCQkKEVVYA4OXlheDgYOHx+fPncf/+/ULHY2Vl9UU9RsVd8U55GWOMMQ0mEomwd+9etGvXDmXLloWPjw/Cw8MxcuRIANJhpg0bNqBNmzbw8fGBvb09Ll26hOnTp6NGjRpCO1OmTEFAQABq164NY2NjvHv3DmXKlCl0PF27dsWIESMQGRkJAwMDjVl6zskOY4wxpkLlypXD/fv3ce3aNcTFxaFatWooXbq08Lyvry+ePn2KS5cuITU1FevXrxeGv/LUq1cPkZGRuHnzJiwtLVG9enVcvHhRmOgMAAsXLpRLgMaMGQN9fX3hcd++fVG3bl2Eh4cjIyNDY5aei6gwmwFooOTkZJiZmSEpKQmmpqaqDocxxtgXyMzMxLNnz+Du7i43CZepr0/9vRbm85vn7DDGGGNMo3GywxhjjDGNxskOY4wxxjQaJzuMMcYY02ic7DDGGGNMo3GywxhjjDGNxskOY4wxxjSaUpOd+Ph44Zj6j0lISPjsiauKaocxxhhjJY9Skp2TJ0+iXLly8PDwgIeHB2rWrIlHjx7J1ImPj0dAQADs7e3h7e0NLy8v3LhxQyntMMYYYyXBkSNHcPfu3SJ5rRMnTuD27dvFpp1PUXiyEx0djQ4dOqBbt26Ij49HQkIC6tSpg7Zt2yInJ0eoN3DgQLx58wZv375FfHw8GjdujLZt2yI1NVWh7TDGGGPF2d69e/P9sL9//z62b99eqLZmzpyJgwcPKiq0T5o/fz727dtXbNr5FIUnO8HBwcjMzMSkSZMgEomgra2NyZMn49GjRzhx4gQA4O3bt/j7778xefJkWFhYQEdHB7NmzUJcXBz279+v0HYYY4yx4mzcuHH5ftgHBQVh6NChKohI8yg82TEyMoJYLEZKSopQlpiYCAC4fv06ACAkJAREhNq1awt1rKys4O3tjZs3byq0HcYYY0wT/PPPP3jw4AFevXqFgwcPIigoCNnZ2Z+9LiUlBYcPH8bOnTsRGRkp9/yZM2ewadMmbN68GUFBQXj37l2+7bx//x579uzB2bNnPzp6kpOTg7Nnz2LXrl0fHZoqSDuKpvBTz5s1awYXFxf06NED06ZNQ25uLn755RcYGBgIk4xjY2MBSBOT/7K2thaeU1Q7H8rKykJWVpbwODk5WQF3zRhjjCnXpEmTYG5ujqioKPj5+eHWrVswNTVFcHAwLC0t873m2rVraNOmDVxcXODg4ID+/ftjzJgxmDVrllDn3r17uHXrFgDpFJIbN25g48aN6NSpk1Dn/PnzaNOmDSpUqABLS0s8fvwYRAR/f3+hzqNHj9C6dWuYmprCw8MD165dg4+PD/bv3y+cnl6QdpRB4T07pqamOH/+PJydnTFs2DCMHz8eQ4cOhZubG/T09KQvqiV92f/OvQGA7OxsaGtrK7SdD82ZMwdmZmbCj7Ozs+JunjHGWPFBBGSnqeaHSCm3FB4ejuvXr2P//v24d+8exGIxZs+enW9dsViM/v37o3379ggJCcHhw4dx+PBh/Pbbb7h69apQb+TIkdi0aRM2bdqE06dPY8WKFRg6dChyc3MBABKJBIMHD0afPn1w9epVHD16FLNnz8aTJ0/+80dN6NKlC7777juEhIRg9+7diIiIwLNnz7B06dICt6MsCu/ZAQBXV1esXbtWeJyamoqePXti1KhRACAkGG/fvoWnp6dQ7+3bt/jmm28U3s5/TZw4EWPHjhUeJycnc8LDGGOaKCcd+M1RNa/9y2tAr5TCm+3WrRscHBwAAMbGxhg0aBB+//13LFq0SK5ueHg47t+/LzMfqFGjRvDz88O+fftkelNevHiBu3fvIi4uDikpKXj37h2ioqLg4eGB+/fvIzw8HEeOHBHqd+nSBePGjRMeh4aGIjQ0FP369cPWrVtBRCAiuLi4IDg4GD/++GOB2lEWpSQ7YrFYpmdly5Yt0NHRQWBgIACgZs2aMDIywvHjx4Uk5eHDh3j69CkaNmyo8Hb+S19fH/r6+oq7WcYYY+wriEQiUD49QUQEkUgkU+bi4iLz2NXVFS9fvsy37osXLwAAbm5uMuXu7u6IiooSHk+aNAlLly5F7dq1YWtrK5THxsbCw8NDaOfD1/7v47w6ISEhMnHY2trCw8NDps6n2lEWpSQ7vXv3RuvWrVG5cmUEBwfj559/xuLFi2Fvbw9AOvn4p59+wuTJk2FnZwc7Ozv8+OOPqFOnDpo3b67wdhhjjJVAukbSHhZVvXYBOTg45DspOCYmBo6Osj1T8fHxco+trKzkEh0AsLGxAQDExcXJtBMXFwcvLy8AwMuXL/Hbb7/h+vXr8PPzAwA8e/YM27ZtExKwvHbi4+OF//8wFjMzMwDAlClTZEZa8ovnU+0oi1I2FZw7dy6OHz+O7t2749ixY9i7dy+GDBkiU2fq1KmYNm0aFi5ciGHDhqFWrVo4fPiwzF+YotphjDFWAolE0qEkVfwU4jPI398fJ0+elJl/KpFIcOzYMbmJu//8848wlwYAdu/e/dFpGxUrVoSVlRV2794tlL169QoXLlxAgwYNAEBY8OPu7i7U2blzp1w7lpaWMsNhYWFhiIiIEB7XrFkTVlZWWL58ucy1EokE0dHRBW5HWZTSs1O6dGls2rTpk3VEIhFGjRolzL9RZjuMMcZYcTV58mQcPnwYdevWRZcuXaCtrY39+/cjJSUFM2fOlKmbmJiIZs2aoUOHDjh//jwuXbqEa9eu5duukZERFi5ciB9++AEvX76Eg4MDVq9ejbp166Jz584ApAmIt7c3OnbsiG7duuHevXtye/6UKlUKM2bMwOjRoxEVFQULCwv8+eefsLCwEOoYGhpiw4YN6Nq1K6Kjo9GoUSPExMTg0KFD+PHHH9GzZ88CtaMsSkl2GGOMMVYwlpaWCAsLw7Zt23D//n1IJBL07NkTPXr0gJGR7HDYhAkTULp0aVy+fBllypTBzZs3hSEpAGjdujWqVKkiPO7Tpw/KlSuH/fv34/Hjx/j555/Rs2dPYfRDT08PFy5cwKpVq3Dnzh24ubnh+vXr+PXXX2WGmoYNGwZ3d3ccPnwYurq62LdvH06fPi3MxwGAdu3a4cGDB9i+fTvCwsLg4uKC7du3o0KFCoVqRxlElN+sqBIkOTkZZmZmSEpKgqmpqarDYYwx9gUyMzPx7NkzuLu7w8DAQNXhKEWlSpUwYMAAjB49WtWhFJlP/b0W5vNbqaeeM8YYY4ypGic7jDHGmBoIDAyUGRJiBcdzdhhjjDE18N8jHljhcM8OY4wxxjQaJzuMMcYY02ic7DDGGNMYJXyBscZR1N8nJzuMMcbUnq6uLgAgPT1dxZEwRcrOzgYAmXMyvwRPUGaMMab2tLW1YW5uLpwxZWRkxMcGqTmJRIL379/DyMgIOjpfl65wssMYY0wj5B0Snd+hmkw9aWlpwcXF5asTV052GGOMaQSRSAQHBwfY2trKHKrJ1Jeenh60tL5+xg0nO4wxxjSKtrb2V8/xYJqFJygzxhhjTKNxssMYY4wxjcbJDmOMMcY0Gic7jDHGGNNonOwwxhhjTKNxssMYY4wxjcbJDmOMMcY0Gic7jDHGGNNonOwwxhhjTKNxssMYY4wxjcbJDmOMMcY0Gic7jDHGGNNoSj0IVCwWg4igo/Pxl5FIJMjNzYWent4X1UlNTUVubq5MmZ6eHoyMjL48cMYYY4xpDKX07Fy7dg116tSBiYkJjIyMEBAQgJcvX8rUSUtLQ69evWBkZIRSpUqhTp06CA8Pl6lz69YtfPPNNzAyMoKpqSnKli2Lv/76S6ZOw4YN4eDgADc3N+Fn3LhxyrgtxhhjjKkhhSc7b9++RatWreDr64v4+HgkJCTA1tYWbdu2hVgsFuoNHToU165dQ0REBOLj4+Hm5oZWrVohMzMTAEBEaNOmDUqXLo3Y2Fikp6dj9OjR6N27N27fvi3zmr/++isSExOFn5UrVyr6thhjjDGmphSe7Jw5cwZJSUmYP38+DAwMUKpUKcybNw937tzBmTNnAACxsbHYtm0bpk2bBjc3N5iYmOD3339HdHQ0Dhw4AACIj4/Hmzdv8N1338HY2BhaWloYOHAgAMj1AAFARkaGom+FMcYYYxpA4cmOtrY2iAjZ2dlCWVZWFgDgypUrAICbN29CLBajfv36Qh07Ozt4eXnh2rVrAAArKyt06NABy5YtQ0REBF6+fIlp06bBxcUFLVq0kHnNadOmwczMDJaWlujduzfevXun6NtijDHGmJpSeLLTtGlT2NjYYODAgYiMjERERASGDBkCHR0dxMTEAICQjFhbW8tca2trK5OorFy5EgkJCahQoQLKlCmDdevW4a+//oKVlZVQp3Xr1rh16xaysrJw4cIFhIWFITAwUGbI7L+ysrKQnJws88MYY4wxzaXwZMfKygpnzpxBTk4OmjRpgrZt26JVq1YoV66c3KosiUQi8zg3NxcikQiAdFiqXr168PLyQmJiItLT0zFr1iw0b94ct27dEq6ZPn06KlSoAJFIhIoVK2LVqlW4cuUKQkJC8o1vzpw5MDMzE36cnZ0V/CfAGGOMseJEKauxKlasiL///htRUVF4/PgxBgwYgMjISHh6egIAnJycAEDo6cnz7t07ODo6ApDO/Xny5Anmzp0LU1NT6OjoYNCgQfD09MSmTZs++tre3t4AgGfPnuX7/MSJE5GUlCT8REdHf+3tMsYYY6wYK5JNBXft2gWJRILAwEAAgJ+fH/T19XH69GmhzvPnz/H48WPUq1cPAGBoaAgAwuqsPJmZmcJz+bl58yYAwMXFJd/n9fX1YWpqKvPDGGOMMc2llGRn0KBBOHnyJN6+fYudO3di1KhRmDFjhjBkZGpqimHDhmHKlCkIDg5GeHg4+vXrBx8fH7Ru3RoAUKtWLbi7u2PIkCG4d+8eXrx4gV9++QXPnz9H586dAUgnPPfp0weXL1/G69evceTIEQwYMAANGjSAv7+/Mm6NMcYYY2pGKTsojxkzBuPHj0dISAhcXV2xbNky9OzZU6bOvHnzYGRkhAEDBiA9PR0NGjTA1q1boa2tDQAoVaoUTp06hV9//RUdOnRAZmYmvL29ERQUBD8/PwCAv7+/kAQ9fvwYjo6O6NevH3788Udh7g9jjDHGSjYREZGqg1Cl5ORkmJmZISkpiYe0GGOMMTVRmM9vPgiUMcYYYxqNkx3GGGOMaTROdhhjjDGm0TjZYYwxxphG42SHMcYYYxqNkx3GGGOMaTROdhhjjDGm0TjZYYwxxphG42SHMcYYYxqNkx3GGGOMaTROdhhjjDGm0TjZYYwxxphG42SHMcYYYxqNkx3GGGOMaTROdhhjjDGm0TjZYYwxxphG42SHMcYYYxqNkx3GGGOMaTROdhhjjDGm0TjZYYwxxphG42SHMcYYYxqNkx3GGGOMaTROdhhjjDGm0TjZYYwxxphG42SHMcYYYxqNkx3GGGOMaTSlJDsPHz5Ex44d4ejoCDs7O/Tr1w/x8fEydXJycvDTTz/B2dkZlpaW6NixI6Kjo2XqREZGokuXLihdujSsra1Rv359BAUFFbodxhhjjJVcCk924uPj0ahRIxgYGODatWu4evUqYmNj0aFDB5l6P/74I7Zv3449e/bg5s2bSE9PR8uWLZGbmyvUadmyJVJTU3H+/HlERESgcePGaNeuHcLDwwvVDmOMMcZKMFKwnTt3kkgkoqSkJKHsxYsXBIDOnTtHRESJiYmkp6dHGzZskKkjEolo//79REQUGxtLAOjQoUNCnaysLBKJRLR169YCt/M5SUlJBEAmXsYYY4wVb4X5/FZ4z45YLIZIJIKOjo5QpqurCwC4cOECAOD69evIzs5Go0aNhDrOzs4oW7YsLl26BACwsrJCgwYNsGXLFiQkJCA7OxsrV66EpaWlcF1B2mGMMcZYyabz+SqF06hRI5iYmODHH3/E/PnzIRaLMW7cOADAmzdvZP5ra2src62trS3evn0rPN67dy8CAgJgaWkJkUgEa2trHDp0CI6OjoVq57+ysrKQlZUlPE5OTv6a22WMMcZYMafwnh0HBwccOXIEd+7cga2tLVxcXODm5oaKFStCJBLJvriWltxjIgIgnXjcokUL2NjY4PHjx3jz5g2GDx+OVq1a4eHDhwVu50Nz5syBmZmZ8OPs7Py1t8wYY4yxYkwpq7Hq1q2LK1euID09HcnJyfj111/x9OlTuLu7AwDs7OwAAO/fv5e57t27d8JzZ86cwa1bt7B8+XJ4enrCzs4OU6dOhZ2dHVavXl3gdj40ceJEJCUlCT+8cosxxhjTbErdZyevJ+fgwYPIzMxE27ZtAQB+fn7Q0dHBuXPnhLpv3rzBo0ePULt2bZlr/zv3J+9x3nMFaedD+vr6MDU1lflhjDHGmOZSSrLz888/IywsDBKJBMHBwRgxYgTGjBmDsmXLAgAsLS3Rq1cvTJs2DREREYiLi8OIESPg5uaGdu3aAQBq1aoFe3t7jBs3DrGxscjMzMTSpUsRHh4uJE0FaYcxxhhjJZtSkp127dqhb9++0NfXR58+fTBmzBgsXLhQps7y5cvRqFEj1KhRA/b29oiLi8OxY8egr68PADAzM0NQUBDi4+NRpkwZmJubY+3atdi2bRsaNmxY4HYYY4wxVrKJ6GMzeRWAiOQmJedHIpHITTL+krYK0s6HkpOTYWZmhqSkJB7SYowxxtREYT6/i2TOzucUJEEpSFuFTXQYY4wxpvk4O2CMMcaYRuNkhzHGGGMajZMdxhhjjGk0TnYYY4wxptE42WGMMcaYRuNkhzHGGGMajZMdxhhjjGk0TnYYY4wxptE42WGMMcaYRuNkhzHGGGMajZMdxhhjjGk0TnYYY4wxptE42WGMMcaYRuNkhzEGIlJ1CIwxpjQ6qg6AMVZ0snLFeB6bjsh3qXjyPhWR76Q/T2NTYW2sjwH13NHVzwWGetqqDpUxxhRGRCX8K11ycjLMzMyQlJQEU1NTVYfDmEIkZ+ZIE5p3qYh8/+9/36XiRXw6JJ/5jbcqpYd+9dzRs7YrTA10iyZgxhgrpMJ8fnOyw8kOU1NEhJjkLJkemrwem3cpWR+9zsRAB562xvCwMYanrTE8bYzhblMKV57EYdW5J3iZkCGtp6+DXnVc0a+uO6yM9YvqthhjrEA42SkETnZYcZcrliAqPl3opZEmNGl4+i4VKVm5H73O3tQAHral4PlvUuPxb2JjY6IPkUj00dc6dPc1Vp59gsfvUgEABrpa6F7TBQPrl4GjuaFS7pExxgqLk51C4GSHFRfp2bl4+j5Npocm8l0qnselIUec/6+ptpYIrpZG0kTm32TGw9YYHjalYPIVQ1ASCeHEgxisDI7E3ZdJAABdbRE6ViuNwQ094G5d6ovbZowxReBkpxA42WFFLS41S5rQvE/Fk3dpwpyaV4kZH73GUFdbtpfm3/+6WpWCno7yFlUSES5GxmLF2UhcfRoPANASAQGVHTC0oScqOPLvDGNMNTjZKQROdpgySCSEV4kZcquenrxPRUJ6zkevsyqlJ/TSCHNqbI3hYGoALa38h56KSkhUPFaefYLTEe+EsibethjayBO+rhYqjIwxVhJxslMInOwwRZBICMfvv0XQvbd4/C4VT9+nIitXkm9dkQgobWEoHXL6T0LjYWMMi1J6RRx54T14nYyVwZE4EvYGee8eNd0s4WZt9MVtetmbok8dN2irOKFjjKkPTnYKgZMd9jVyxBL8c+c1/gyOxJP3aTLP6elooYx1KXj8O4/G89+5NGWsjTViH5un71Ox+txT7L/98qNzigqjjY8Dfu9aFbravNcpY+zzONkpBE522JfIzBFjz81orDr3VJhrY2qgg+9quaKGqwU8bY3hbGlUInoqXidm4GjYm4/2ZH1OalYu1l14ihwxoWl5Wyz/rjoMdNU/GWSMKRcnO4XAyQ4rjJTMHGy79gLrLjxDbKp0LxtrY30MqO+O72u5fNUKqJLsbMQ7/LA1BNm5EtQva43VPX1hpMcbvDPGPq4wn99K6S9+8+YNhg4diurVq6NKlSr45ZdfkJ6eLlOHiLB48WL4+fmhQoUKGDp0KOLj44Xnnzx5Ajc3t3x/du/eLdRr166d3PPjxo1Txm2xEiwhLRuLTzxE3blnMDcoArGpWXAyN8SM9hVx8edGGNzAgxOdr9DI2xab+vrBSE8bFx7HoveG60jJ/PhEbsYYKwyF9+ykpqaiatWq8PT0xMyZM5Gbm4uff/4ZFhYW+Oeff4R6U6dOxYoVK7B+/XrY2tpi7NixEIlEuHz5MkQiEXJycvDq1SuZtjdu3IjZs2cjKioKTk5OAIAaNWqgSZMmGDJkiFDP2NgY1tbWBYqXe3bYp8QkZ2Lt+afYfv0F0rPFAIAyNqUwtKEn2ld15PklChYSlYA+G68jJTMXPqXNsLlvTbWYtM0YK3oqHcbav38/OnXqhPfv3wsJR2RkJMqWLYvr16/Dz88PaWlpsLW1xYIFCzB06FAAwOPHj1GuXDkEBQWhZcuW+bZdo0YNODk5ySRNNWrUQOfOnTFhwoQvipeTHZafF3Hp+PPcE+wLeYlssXQuSkVHUwxv5InmFe1LxFwcVbn3Kgm9NlxHfFo2vOxM8NeAmrA1MVB1WIyxYqYwn98KHxRPTU2FlpYWTExMhDJzc3MAwJkzZ+Dn54fr168jPT0dLVq0EOqULVsWZcqUQXBwcL7JTmhoKEJCQjBt2jS551avXo2NGzfCyckJbdu2xYgRI6Cjw+P9rPAevk3Bn8GROBj6Wjgws6abJYY28kCDcjYfPWaBKU4lJzPsGuSP79ddw8OYFHRbfRVbB9TioyoYgP/vNM6KlpmhLpwtv3x7CVVTeEbwzTffQF9fH7Nnz8b06dMhkUgwc+ZMAMDLly9l/mtvby9zrb29vdzQVZ5169bByckJrVq1kin39vZGQEAAfHx8EBoaivHjx+PatWvYuXNnvu1kZWUhK+v/hyQmJyd/2Y0yjXInOhErzkbi5IMYoayhlw2GNvRETXdLFUZWMpW1M8GewbXx3dpreBqbhm9XXcH2gbXgasXHVJRkYS+T0HujtNePFb1l3auhbRVHVYfxRRSe7Li5uWHXrl0YOXIklixZApFIhG+//Rbly5dH3oiZRCIdFviw90VXVxdisViuzaysLGzbtg3Dhw+HtrbsktQtW7ZAS0s6b6JSpUqwtLREQEAApkyZgooVK8q1NWfOHEyfPl0h98rUGxHhytM4rDz7BBcjYwFIN/xrVckeQxt6opKTmYojLNlcrUph9+Da6LHuGp7FpqHL6ivYNqAWPG1NPn8x0zg3n8ej78YbSMnKhamBDq/WK0I5Ygni0rIx6e8w+LpaqGUvq1L+tbRt2xZt27ZFQkICdHR0YGRkBHNzczg7OwOAMJcnLi4Ojo7/zxJjY2NRpUoVufb279+PpKQk9OvXT+65vEQnT506dQAADx48yDfZmThxIsaOHSs8Tk5OFuJiJYNEQjgT8Q4rgiNx+0UiAEBHS4TAak4Y0tADHjbGqg2QCZzMDbHrB3/0XHcdD2NS0GX1VfzVvyYqOnIiWpJciozFgM03kZEjRk13S6zvXYNXPxahHLEEnVddQWh0IsbtCcXW/rVUfnxNYSl1KYmFhQVMTExw8uRJpKamCkNQNWrUgJaWFi5fvizUjYuLw8OHD+Hn5yfXzvr169GsWTO4ubl99jWfPXsGALC0zH/oQV9fH6ampjI/rGTIFUvwz51XCFh6AQO23MTtF4nQ19FC79quCB7fEAu/rcKJTjFka2KAnYP8UdnJDPFp2ei+5ipuvUhQdVisiJwOj0HfTTeQkSNG/bLW2Ny3Jic6RUxXWwtLulaFoa42Lj+Jw4ZLz1QdUqEpJdmZP38+YmKkcx/Cw8MxfPhw9O7dGz4+PgAAOzs7dOzYEbNmzUJsbCxycnIwceJEWFtbIzAwUKat58+f48yZMxg4cKDc69y5cwdLlixBamoqAOlcoGHDhsHT0xP169dXxq0xNZSVK8aO6y/QZPE5jNp5BxFvU2Csr4MhDT1w8efGmN6+EkpbqO/Eu5LAopQetg2shRquFkjOzEXPdddw5UmcqsNiSnb47mv88Jd0s8nmFeywrncNjThqRR25W5fC5DblAQDzjz/Ew7cpKo6ocJSS7Hh7e8PPzw/29vaoVasW2rdvj7Vr18rUWbNmDZydneHo6AgLCwtcvHgRhw8fhrGx7DfrDRs2wMbGBu3atZN7nbJlyyImJgaurq6wtbVF2bJl4eDggFOnTkFPj/fmKOnSs3Ox/uIzNJgfjIn7wxAVlw4LI12Ma14OlyY0xs8tvWFjoq/qMFkBmRroYkv/mqjnaY20bDH6bLyO4IfvPn8hU0t7bkZj5I7byJUQ2ld1xIrvq0NfhxMdVfqupgsae9siO1eCUTtvIytXfo5tcaXU4yJiYmJgZWX1yWXgycnJyMzMhK2t7UfbEIlEH30ekE40jY2NhZWVldwcns/hfXY0T1J6DrZceY4Nl54hIV26C6+9qQEGflMG3Ws688RGNZeZI8bw7bdwKvwddLVFWNa9GlpWclB1WEyB/rryHFP+uQ8A6ObnjNkdKvPeVsXEu5RMtFxyAfFp2fjhmzKYGFBeZbHw2ViFoKxkJyk9B303XVdYe6zgHsWkIjUrFwDgamWEIQ080KG6E38r1CA5YgnG7LqDw3ffQFtLBJ/SZuCPwsIppa+Dme0rwc26eC3nX33uCeYERQAA+tZ1w9Q2FXh/q2LmxP23GPRXCEQiYMdAf/iXsVJJHCrdVJBJ5UokuPXvSh9W9LztTTC0kScCKtlDh4900Di62lr4o1s1GOhqY2/IS2FVHSuckTtvY9+QOsXi2BMiwu+nHmPp6ccAgOGNPPFj83Kc6BRDzSvao2sNZ+y6GY0fd4ciaHR9mBbzSePcs6Oknp2sXDHOPXyvsPZYwVmU0oOvi4XaLY1khUdEuPUiAXGpvMlcYeRKCBP3hyEpIwcjGnvix+ZeKo2HiDD7SDjWXZSu8hnfwgvDGnmqNCb2aalZuQj44wJexKejYzUnLO5atchj4GGsQuA5O4yxkujI3TcYtv0WtETAnsG14euqmp3CJRLC5H/uYfu1FwCAaW0roE9dd5XEwgonJCoB3666DAkBK76rjtY+RTt3rjCf36rvu2SMMVbkWvs4oGM1J0gIGLMrVJjnVpRyxRKM2xOK7ddeQCQC5nfy4URHjfi6Wgg9cL/8HYa3SZkqjujjONlhjLESalr7inAyN8SL+HTMPPSgSF87O1eC4dtvY//tV9DWEuGPbtXQxY93s1c3I5uURWUnMyRl5GD83lBIJMVzsIiTHcYYK6FMDXSxuEsViETArpvROH7/bZG8bmaOGIP+uolj999CT1sLf35fHe3U9IDJkk5XWwu/d60KA10tXHgci81Xnqs6pHxxssMYYyVYrTJWGPRNGQDAxP1heJ+SpdTXS8vK/XdDyPcw0NXC+j410LyivVJfkymXp60xfvl3v525QRF4HFP8dlfmZIcxxkq4sc3KobyDKeLTsvHzvrtQ1rqVpPQc9Fh/DVefxsNYXwdb+tVC/bI2SnktVrR6+ruiQTkbZOVKMHrXHWTnSlQdkgxOdhhjrITT19HGkq5VoaejhTMR77D9+guFv0Zcaha6r72K2y8SYWaoi20DaqGmu2pWgDHFE4lEWNDZBxZGurj/OhlLTj1SdUgyONlhjDEGL3sT/NRCut/OrMPhePo+VWFtxyRnouuaq3jwJhnWxnrYOcgfVZzNFdY+Kx5sTQ0wp2NlAMCqc09w43m8iiP6P052GGOMAQD61XVHXU8rZOSIMWZ3KHLEXz8UER2fjm9XXUHku1Q4mBlg9w+1Ud6B9zTTVC0rOaBT9dL/bmlwBymZOaoOCQAnO4wxxv6lpSXCwm+rwNRAB6HRiVh+JvKr2nv6PhVdVl/Bi/h0uFgaYfcPtVHGxlhB0bLialq7CihtYYiXCRmYXsRbGnwMJzuMMcYEDmaGmNVBOhSx/Gwkbr9I+KJ2It4mo8vqq3iTlAkPm1LY/UNtOFsaKTJUVkyZGOhicZeqEImAvSEvcezeG1WHxMkOY4wxWe2qOKJ9VUeIJYQxu+4grZC7K999mYhua64iNjULFRxMsfuH2rA3M1BStKw4quluicENPABItzR4l6za3ZU52WGMMSZnRvtKcDQzwPO4dMw6El7g6248j8d3a68hMT0HVZ3NsWOgP6yM9ZUYKSuuxjQthwoOpkhIz8FPStzSoCA42WGMMSbHzFAXC7tUAQDsuP4Cpx7EfPaaC4/fo+f6a0jNyoV/GUtsHVALZka6yg6VFVN6OlpY0k26pcHjmFTEJCt3w8pP4WSHMcZYvup4WGNAPenBnBP230Vs6sc/rE49iEH/TTeRmSNBQy8bbOpbE8b6OkUVKiumytmZYF2vGggaXV+lQ5mc7DDGGPuocS284G1vgtjUbEzYF5bvUMSh0NcYvDUE2WIJWla0x+qevjDQ1VZBtKw4+qacDUwNVNvDx8kOY4yxjzLQ1cbvXatCT1sLp8JjsOtGtMzzu29EY+TO28iVEDpUc8Ly76pBX4cTHVa8cLLDGGPsk8o7mGJci3IAgBmHH+B5bBoAYPPl5/9OPAW+q+WCRd9WgY42f6yw4of/VTLGGPusAfXKwL+MJdKzxRiz+w5WnI3ErwfvAwD613PH7MBK0NISqThKxvLHyQ5jjLHP0tISYVGXqjAx0MHtF4lYcPwhAGBkk7KY3Lo8RCJOdFjxxckOY4yxAnEyN8TM9pWExxNaeWNss3Kc6LBij9cFMsYYK7D2VR0hEgGmBrpo5G2r6nAYKxBOdhhjjBWYSCRC+6pOqg6DsUJRSrKTkpKC33//HVevXoVYLEbr1q0xdOhQ6OjIvtz27duxY8cOpKWloWHDhhg3bhyMjKQHxUVFRaFr1675tj9x4kS0b9++QO0wxhhjrGRTeLKTlZWF+vXrQ19fH5MnT0Zubi6mTZuGW7duYdOmTUK933//HZMnT8aiRYtga2uLyZMn4/Llyzh27BgAwM7ODkuWLJFpe9++fVi0aBEqV65c4HYYY4wxVsKRgv3zzz8EgKKjo4WysLAwAkBhYWFERJSZmUlmZma0YMECoc7t27cJAAUHB3+07Xr16lHTpk2Fx1/azn8lJSURAEpKSirwPTLGGGNMtQrz+a3w1VhxcXHQ1taGvb29UObkJB3fPXHiBADgxo0bSEpKQtu2bYU6VatWhYuLC06dOpVvu48ePcLFixcxcOBAoexL2mGMMcZYyaLwZKdOnToQiURYtWqVULZixQoAwPPnzwFI5+MAgKOjo8y1jo6OwnMfWr9+PaytrREYGCiUfUk7WVlZSE5OlvlhjDHGmOZSeLLj5eWFtWvXYvLkyfD09IS7uzuuXr2KsmXLIjc3FwCQk5MDANDX15e51tDQUHjuv3Jzc7Flyxb07t0benp6Qnlh2wGAOXPmwMzMTPhxdnb+8ptljDHGWLGnlE0F+/Tpg5iYGBw6dAinTp3CoUOH8O7dO2E4y9LSEgAQHx8vc11cXBysrKzk2jty5Ajevn2LAQMGyJQXth1AupIrKSlJ+ImOjs63HmOMMcY0g9J2UNbX10f58uXh4eGBCxcuICkpCc2aNQMAVKtWDYB0zk2e5ORkRERECM/917p161C/fn14e3vLlBe2nby4TE1NZX4YY4wxprmUkuysW7cOGRkZAICYmBiMHDkS7dq1Q82aNQEAzs7OaN68OebNm4fMzEwA0uElIyMjdOzYUaatN2/eICgoSGZicp7CtMMYY4yxkkkpmwrq6OjA3d0d9vb2ePz4MQIDA7FmzRqZOhs3bkT79u1hb28PU1NTZGVlYe/evbCwsJCpt2nTJpiYmKBz5875vlZB22GMMcZYySQiIlJGwxkZGXj06BGcnZ2FuTX5iYyMRHp6OsqXLw9dXV255x8+fAgikhvCKmw7H5OcnAwzMzMkJSXxkBZjjDGmJgrz+a20ZEddJCUlwdzcHNHR0ZzsMMYYY2oiOTkZzs7OSExMhJmZ2SfrlviDQFNSUgCAl6AzxhhjaiglJeWzyU6J79mRSCR4/fo1TExMIBKJFNp2XtZZ0nqN+L5L1n0DJffe+b75vkuC4nrfRISUlBQ4OjpCS+vT661KfM+OlpYWSpcurdTXKKlL3Pm+S56Seu983yUL33fx8bkenTxK22eHMcYYY6w44GSHMcYYYxqNkx0l0tfXx6+//ip3dpem4/suWfcNlNx75/vm+y4JNOG+S/wEZcYYY4xpNu7ZYYwxxphG42SHMcYYYxqNkx3GGGOMaTROdhhjjDGm0TjZYYV2584dVYfAmNKlpKRgwoQJiIqKUnUorIjwe5vm4mTnCwQHB+P27duqDqPIRUREICAgAN9//z1SU1NVHU6RiY+Px5IlSzBmzBjs27cPJWUBY1ZWFjZv3oy+ffti1KhRePnypapDKhJEhI0bN8Lb2xvz5s3DpUuXVB1SkTl16hTCwsJUHUaRu3fvHpo1a4bevXsjMzNT1eEUmdjYWCxatAhjxozBgQMHVB2OUnGyU0jr169H48aNMWTIkBLzoZeQkIDRo0ejQYMGaNGiBUJDQ2FsbKzqsIrEtWvXUKVKFdy+fRs6Ojr44Ycf0Lp1a41/Q3zz5g1q1qyJnTt3ws3NDUFBQQgICFB1WEp36dIl+Pn5YePGjThy5Ajs7Ozw6NEjVYdVJFasWIHmzZtj+PDhqg6lyMTFxWH48OFo2rQpAgMDcevWLRgYGKg6rCJx8eJFVKlSBffv34e2tjb69u2LwMBAZGdnqzo05SBWYCEhIeTi4kJ///03iUQi2rJli6pDKhK1atWiSpUqUWxsrKpDKVLp6enk4uJCGzZsEMquXr1KAKhXr14qjEy5xGIx1a5dmzZt2iSUXbx4kUQiEaWmpqowMuWaP38+ubq60s6dO4WyBg0aULdu3VQYVdG4cuUKubm50d69ewkA7d69W9UhFYmqVatS9erVKT4+XtWhFKmUlBRycHCg7du3C2XBwcEEgAYNGqTCyJSHk51CWLRoEZ05c4aIiPr06UOOjo4a/eaf58CBA6Sjo0MPHjygc+fOUcuWLcna2pqqVKki88uiac6ePUsA6N27dzLlTk5OBICOHz+uosiUKyYmhoYPHy5TtmHDBurYsSOlp6erKCrle/36tdz9DRo0iKpXr66iiIrOnDlz6OLFi0RE1K1bN3J1daWMjAwVR6V8O3fuJD09PYqMjKTTp09Ts2bNyMrKiqpVq0Z79+5VdXhKExQURAAoOTlZptzKyooA0Llz51QUmfJwsvMRycnJ9OLFi48+/+bNGzIxMaFffvmlCKNSvszMTHr27BmJxWKZ8mbNmpGHhwc5OTnRsmXL6OjRo9SjRw8CIPNNWF2JxWJ6/vy5zBt8REQEAaBVq1YJZXfu3KGyZcuSv78/NWrUSBWhKlROTk6+5RKJhIiIsrKyaPbs2aSnp0dGRkYkEomoT58+cv8+1FFubu5n6yxevJhMTEyKIJqi9al7f/HiBRkaGtKMGTOKMKKikd99169fnzw9PcnZ2ZlWrlxJR44coa5du5JIJKK///676INUgg9/X0NDQwmATO/ttWvXqGLFilS1alVq1apVUYeodJzsfCAtLY0GDRpEBgYGJBKJqHLlynTz5s18686ZM4cMDAzo6dOnRRylcsyaNYtMTU1JR0eHHB0daf/+/cJz9+7dI1NTU3ry5InMNYGBgeTq6lrEkSrW7t27ycnJiXR1dcnY2JjmzZsnPNevXz8yMDCg0aNH07hx48jW1pYOHDhAq1evJi0tLbXu2bt27RqVLVuWgoKCPlrn0qVL1KZNG7p16xYRER08eJB0dHRo5cqVRRWmwr169Yq++eYbmjlz5mfrHj16lADQq1eviiAy5Xr//j0NGTKETE1NSUtLiwIDAyklJSXfur/++iuVKlWKXr58WcRRKl5WVhbNmDFD6JGtWbMmRUZGCs/funWLzM3NKSoqSiiTSCTUqlUrKleunCpCVph169ZRhQoVCAB5enoKIxNERN999x0ZGRnR2LFjaezYsWRjY0NBQUH0xx9/kK6uLmVnZ6swcsXjZOcDPXv2pObNm1NSUhK9ffuWWrZsScbGxnTnzh25upmZmVSmTBnq1KmTCiJVrEWLFlG5cuUoKiqKUlNTafjw4SQSiWTG7q9fvy533aFDhwgARUdHF2W4CnP27FkyNzenixcvUm5uLq1YsYK0tbXp559/JiLpG+XixYspICCAhg0bRg8ePCAi6fwtAJ/s/SvO3rx5Q66uruTr60vly5f/aA9Pflq1akXffvutEqNTnuzsbKpTpw7VqVOHSpUq9dkk5unTpwSAzp49WzQBKkl8fDx5eXnR+PHj6dGjR3TixAmytLSkwYMH51s/LS2NnJ2d6fvvvy/iSBVLLBZT69atqVOnTnT79m0KCQmhypUrU40aNWTq5ffetmfPHgJA79+/L6pwFWrChAlUs2ZNOn/+PD18+JDatm1LZmZmlJaWRkTSz68FCxZQQEAAjRw5kh4+fEhE0i84+Q3fqztOdv4jIyODdHR0ZN7YMjMzydfXl7y9vSkzM1Pumv379wtvhvv27aOAgAC17OKvWLEi/f777zJlPXv2JFNT008mMlu2bCFDQ0O1Hd/v3bu33Bv6H3/8QQDo1KlTH73u5MmTZGxsrLbfftq3b09//vknPXz4kHR1dWnJkiUFvrZWrVo0YcIEJUanPDNnzqR+/fpRWloalS5dmnr06PHJ+mKxmAwMDGj16tVFFKFy9OjRg+bPny9T9ssvv5CLi8tHr9m+fTuJRCK6fPky7dy5k9q1aycMb6qLJUuWUNeuXWXiznvPjomJ+eS1a9asIRMTk0J9ESgugoODqVq1akJiQ0T05MkTAkAnTpz45LWHDh0iCwuLAg3zqhNOdv4jOTmZANA///wjU3737l3S0tL66AdC/fr1ycDAgKpUqaK23wA9PDxo+vTpMmUJCQlkY2NDffr0yfeax48fk7u7u1qP7Xft2pXatm0rUyaRSKhOnTrk4+OT75t7UlIS1a5dmyZOnFhUYSrc7du3hf8fM2YMmZubf/YbbG5uLv3000/k5uamtt92w8PDhcR827ZtJBKJ6MqVK5+8pnLlyjR27NiiCE9p9u7dK/dvedmyZeTu7v7J6/z8/MjAwIB8fX2FCczq5NSpU5SQkCBTduXKFQJAcXFxH70uPDycnJ2d5RJEdfHw4UO6e/euTFlGRgYBoNOnT3/0uvj4eKpRo4bcZ4Em4GTnA15eXtSvXz+58i5dupCHh4dMWd4YuL29Pa1atUote3TydO3aNd9VJ7/99hvp6ekJy86joqJo/Pjx9P3335OtrS0tWLCgqENVqAULFpCpqSklJibKlJ84cYIAyIxxr1q1ilq3bk02NjY0YsQIjfnmk5iYSDY2Nh8d0li4cCGNGDGCXFxcqE2bNvT69esijlB56tatSzVr1vxkj8W3335LvXv3LrqgisiwYcOoXbt2+T4XExNDAwcOJEdHR1q3bp1av7d9aOPGjeTo6ChX/uTJExo/fjx169aNbG1t6Y8//lBBdMpz+/btj/ZoLV26lAICAsjGxoZ+/PFHjfr7zsPJzgfmzp1Lurq6MpPViP7/4ff8+XOh7Pr16zRmzBi5D0p1dOzYMQIgN1k1JiaGANCBAweEsqNHj9KZM2c0Yhnyq1evSF9fP9/Jqi4uLjR58mThcUZGBj1+/Fgj/r4/tHr1atLW1pb7NkgkfZM8cuSI3O+EJrhx4waJRCLavHnzR+vcv39fLYcyPqdq1aq0aNGifJ+7ePEijR8/Xm5psiYYMGAAde/eXa5cIpHQ4cOH6ezZs2o7LP8py5cvp/Lly+f7XN57myb+fecpMcnO8ePHqUuXLp/NWFNTU8nJyUnuG8+LFy8IAN2/f1+ZYSpcaGgotW/fvkDDDg0aNCBvb2+5JMbS0pK2bdumrBCV4vXr19S7d+/PDlEQEf34449kbGwst6quefPmNGbMGGWFqBSpqak0adIkWr9+faGuE4vFVKVKFWE5fUpKisxQV3EnFotp9erV9NNPPxX62j59+pCDgwOlpKRQbm4uXb58WQkRKs/hw4epe/fuhZpPExsbSyKRiEJDQ4WysLAwZYSnNLdv36b27dt/cjgqP2XKlJH5/bh//75a9WRER0fT999/TyEhIYW6rmPHjjRixAjh8cuXL0vUZooan+w8fPiQ2rRpQ+XKlaNDhw4V6JqgoCDS0tKS+Va/du1acnBwUJsJqe/evaPBgwcXaojt0aNHZGZmRh07dhQmY9+4cYN0dHRkerSKs4yMDJo9ezZZW1vTL7/88tGltf+VmppK5cuXp8qVKwtdvDExMcIyc3UgkUho8+bN5OTkRL169fqioaa8HVSHDx9OTk5OajMJ+cyZM0Ki9t8P74LK2zOra9eu5OPjQy1btlSLibgPHjygFi1aUIUKFejYsWOFunbXrl1kZ2dHEomEwsPDqWXLllSxYkW16NHIG2JzcHCgNWvWFCpRyVtd9+LFC3r37h398MMPZG9vTxEREUqMWDHS09Np+vTpZG1tTVOnTpWZfPw5YrGYLCws6ODBg5SRkUEzZswga2trOnLkiBIjLl40NtnJzc0V9g5YuHDhZ5OUxMREGjNmjJDxb9q0iQwMDKh69erUrl07srOzU5tdJZcvX042NjYFGmLLzs6mhQsXCkutL1y4QNbW1lSmTBn69ttvydraWua4hOIsKCiI3N3dqVOnTvTs2bPP1t+zZw917tyZiKRzkSpWrEhWVlbUpUsXcnJyotGjRys5YsW4e/cu+fn5Ue3atfNdQvuhS5cuUYsWLeT+bVy9epUsLCyoTp06dOPGDWWFqzDv3r2jjh07UpkyZWjfvn2frf/kyRPq2LGjXI/Vs2fPqEqVKlSmTBmZvaWKq+zsbBo5cqQwr+RzQ2xxcXE0fPhw2rp1q1A2aNAgatOmDY0ePZpsbW1pyZIlajFUt3TpUmFeSVJS0ifrZmVl0dy5c2nKlClC2Zo1a8jDw4MWL15MNjY2NHbsWLUYlj548CC5uLhQt27dCrTdxfbt22WG6q5fv046Ojq0fv16cnNzoy5dumjksPSnaGyyQ0TUunVratCgARFJv/meOXNG2P33v98G1qxZQ3Z2dtS/f3+ZyVtRUVG0cuVK2rhxo9yM/uJs0qRJMkdZ3L59m1asWEG7d++WGaI6duwYeXl5UatWrSg8PFwoj4+Ppw0bNtDKlSvVah+Zv//+m3R0dIR7ef78Oa1du5Y2bNggs2dEWFgYNWjQgCpXriwzATkrK4t2795Nf/zxR777KhVXecvH9+zZQ0TSIYq//vqL/vzzT5nN016/fk3fffcdOTk50ZYtW2R6LxYvXkzOzs4yH4jFXXp6Ojk7OwuJemZmJu3fv5+WL18uk/SlpaXRhAkTyMrKimbNmiXTe3Hq1Cmytram3377Ld+tJYqrJk2aUIsWLYhI+t526tQpWrZsGR0/flz4e5VIJLR8+XKytbWlwYMHy5xt5+3tTdra2jRkyBC1OvPu559/JmdnZ+F97NatW7RixQras2ePzHvboUOHyMPDg9q0aUOPHz8WyvN2fW/durWwr4w62LFjB+np6Qmbuj558oTWrFlDmzZtkvn7u337NtWtW5eqVatG58+fF8oXLlxIAKh69ep04cKFIo+/ONDoZCfvQ2Dx4sXk6+tLLi4u5OvrSyKRiBo0aCB0A06ZMkXYIVYTpKamkqOjI40ZM4YCAwPJysqK/P39SV9fnzw8PISMfuXKlQUe2lMXTZo0oVatWtH48ePJ2NiY/P39ydLSkkxNTYVf/mPHjtGKFSs0ZjUVEdHYsWPJ3d2dVqxYQaamplSjRg0qXbo06ejo0Lp164hIulXApEmT8t31+c2bN4XqFi8utm/fTvr6+rRx40ZycnKiihUrkre3tzAcRyQd2hw1alS+GwimpaXRmzdvijrsrxYWFkba2tq0dOlSqlKlCrm5uVG1atVIJBJRs2bNhMRt4sSJ+U46X7NmTb7lxV1ycjLZ29vTuHHjqF27dmRtbU21atUifX19Klu2rLAn2NKlS/M9u+7w4cOFHvIrLurVq0ft27enUaNGkYmJCfn7+5OFhQVZWFgIcxMPHjyY79De3bt3ae3atWo1N0nRNCLZiY6OpilTplCfPn3or7/+kvkLHTt2LAGg33//XfjGc/nyZTIyMqJx48apKmSFSE5OpsWLF1Pv3r1p0aJFMh9WW7ZsIQA0cOBAysrKIiJpT5WLiws1bdpUVSErRG5uLm3cuJH69u1LU6ZMkfmwyvsQqF+/vjBxMSUlhRo2bEiOjo5qv4LsyJEjNGjQIBo7dqzMZPnExESytbUld3d34RtrTk4ODR48mPT09OjRo0eqClkhbt26RSNHjqTBgwfL9MYRST8EjI2NZTZL+/PPPwmA2h/m+Pz5c5o0aRL17duXduzYIdMbN3ToUBKJRLRy5UqhPDg4mPT19WXmG6qjxMREWrBgAfXu3ZuWLFki0xu3YcMGAkBDhgwR3tuePXtGpUuXppYtW6oqZIXIzs6mdevWUd++fWnatGkyPdIhISGkpaVFTZo0EUYakpKSqE6dOuTq6ir8WbD8qX2yc/nyZbK0tKSRI0fS6NGjycjIiFq1aiV8s0lMTKQBAwbIXTdu3DiytLQs6nAV5vXr1+Th4UFdunShKVOmkIODA3l7ewtn2UgkEvruu+/kxuG3bt2q1sccZGZmUqNGjah+/fo0a9YsYZ7NtWvXhDpjxoyR2/U571BPdZiT8TFDhgwhLy8vmjVrFjVu3Jh0dXVpx44dwvNr1qyR2x01IyODzM3NaerUqUUdrsKsWbOGbG1tacqUKfT999+TSCSS2dAxJCSE5s6dK3ddvXr1KCAgoChDVahz586RpaUljRkzhkaOHEkGBgbUvn17Yf5hXFxcvnsjDR8+PN99ZNTFixcvyNXVlb777juaPHky2draUuXKlent27dE9P/3tg97Zjdt2kQA1HYfqPT0dKpbty41atSIZs6cSd7e3mRraysz6jB8+HDhzyHPnTt3CAAdPXq0qENWK2qf7Pj6+tKsWbOEx9evX6dSpUrJJDj5dd1t2LCBdHV11bZb74cffqDAwEDh8evXr6lMmTLk5+cnJDj53dutW7cIgNotM83z559/Urly5YRvMRkZGdS4cWOys7MT5lt97O9UW1ubNm7cWFShKtSVK1dIV1dX+KYnkUho6NChpKenJ8xP+dgKourVq9OoUaOKKlSFSkpKIiMjI5mjO9avX08AhOE5ovz/zgcNGkR169YtkjiVoWLFirRw4ULh8cWLF8nAwEAYniPK/75XrlxJpUqVKpIYlaF3797UrVs34XF0dDS5uLhQ3bp1hfvN776vX79OAGTmH6qT33//nSpVqiS8f6elpVG9evXIyclJ6KXO776zs7MJgMwXHyZP7ZMdLS0tueMd1qxZQwAoODj4o9e1bduW2rdvr+TolKdmzZoyqwyIpMvEtbW1Zd4gPzR58mQqU6aM2s5XGTRokNzxDu/evSMrK6tPnnN04MABMjAwUNserZUrV5Kzs7NMWU5ODlWvXp18fHw+muA9evSIdHV1P3seTnGV9wH24a6v/fr1I1NT048eVpiWlkYuLi40Z86coghT4fI+wD6cd7J06dJPHnEhkUioWbNm1LVr16IIUyl8fHxo9uzZMmUXL14kkUhEy5cv/+h1EyZMoLJly6rtF9hevXrJHbD7+vVrMjc3z3d0Is/OnTvJyMhIrseHyVL7ZMfR0VGui14ikZCPj4+wQRqRdKVNWloa3b17lzp06EAVKlRQy4mJedq1a5dvF33fvn3J2tpaGMbLycmh1NRUev78OY0ZM4ZsbGwKvRlVcTJ16lRycnKS68X4448/SEtLS5ibIpFIKCUlhd69e0dLliwhMzMztf7m87HDC8+dO0cAZJZep6amUmJiIu3atYscHBzkkmJ1kreZ54dd9O/evSMjIyOZ4az09HRKTU2lM2fOULVq1WSGfNSRlZUV/fbbbzJlYrFYWEGZJzMzk9LS0ujOnTvUpk0bqlKlilqfWN28eXPq2LGjXHn37t3JwcFB6PnIe2979uwZjRw5kuzs7NRqI8wP/fTTT1SmTBm58nnz5pGOjo6wsCTvvS0mJoYWLlxIZmZmaj08X1TUPtkZNGgQOTg4yC0b3bp1K4lEImH89u7du+Tr60uNGzemxYsXq/1E1TVr1pC2trbMskqi/89NyVtllZiYSHXr1qV69erR5MmT1T77z/um/+G+KmlpaWRpaSlz7MO3335L/v7+NHToULXb+fpDSUlJZGhomG/i4u/vT506dRIeT5o0iWrWrEnff/+92h5M+19VqlSR+XDPM3z4cHJ1dRUeb9u2jWrUqEFt27al7du3q8XGgJ/Sq1cvcnV1lZt3t27dOtLS0hKGNm7evEm+vr7UpEkT+uOPP9RiY8BPWbp0ab5H9uTNTTl58iQRSbfIqFOnDtWrV4+mTJny2VPMi7vz588TALmN/pKTk8nExEQ4h1AikVBgYCD5+/vTiBEj1GJDxOKgWCc7BcnSIyIi8h26yTvTSR3f7ENDQz/bFZuenk4ODg4yY9t5XFxc1PKAzqioqAJt/Z63R86HHwLt2rWj77//XlnhKU1iYqLcURX5GTVqFJmZmcklrFOnTqWKFSsqKzylycnJKdDcsb/++osAyJ26ffDgQQKglh/uBXlvCw0NzXfoJq+3qyBHoRQ3d+7c+WwSmpycTNbW1tSnTx+552xtbWnZsmXKCk9pnj59WqDNC/39/cnX11fu/b958+bUv39/ZYVXImihGLp37x6aNWuG3r17IzMz85N1vby8MHr0aEydOhV3794VyokIAGBra6vUWBXp7du36N+/P1q1aoXIyMhP1jU0NMTixYuxc+dO7Ny5U+Y5iUSiVvednp6OX3/9Fb6+vrh27dpn6y9duhQRERGYPHmyTLm63bdEIsGaNWvg7e2NAwcOfLb+r7/+CkNDQ/Tr1w9isVimHXW6bwA4duwYfHx8sGDBgs/W/f7771G/fn306dMHCQkJQrlEIoGZmRn09PSUGapChYaGolGjRhgwYABycnI+WdfHxwdDhw7FxIkTER4eLpRLJBIA6vXe9vr1a/Tu3Rtt2rTB8+fPP1nXxMQECxYswKZNm/D333/LPKdu/9ZTU1Pxyy+/oGbNmrh58+Zn6y9btgx37tzBjBkzZMrV7b6LJVVnW/8VGxtLw4YNIzs7O1q+fPlnJ9G+f/+eIiMjKSsrixo0aEC2tra0a9cuCg0NpVatWlHr1q2LKPKvk5mZSfPmzSNra2v66aefPnvybEZGhrDD7/Dhw0lPT48WL15MDx48oFGjRpGHh0e+G8cVNxKJhLZu3UrOzs70/fffC8vmP1U/b4n52rVrSSQS0ahRo+jevXu0bNkyMjc3V5tdUc+ePUtVqlShhg0bFmi35qtXrxKR9DgPQ0NDateuHYWEhNDff/9NFhYWanPGTUREBAUEBJCXl1eBYg4PD6fExESKjo4mZ2dnqlKlCp09e5YuXrxI5cqVy/e0+uLo3bt3NGjQILK3t6fVq1d/tuc2JiaGnj59ShkZGVS7dm1ycHCgvXv30p07d6hJkyYyw5bFWUZGBs2aNYusra0/uqHlh/XzzjcbOHAgGRgY0NKlS+nBgwc0ePBg8vb2VouePIlEQps2bSInJyfq3bv3Z+eH/ve9bfny5SQSiWj8+PF0//59WrRoEVlaWhboCBz2ccUq2alatSpVr179syex5uTk0JIlS8jGxkbo0kxPT6dx48aRg4MDOTo60s8//6w283L69+9P5ubmMlv7f8zevXvJ3d2dfvjhB6Fs6dKl5OHhQVZWVtSzZ0+1mXi9bNkyAiCzrPhjrl27RrVq1SJ/f39h+Oqff/6hqlWrkrm5ObVs2VJtdoS9cOECAaBFixZ9tu7Tp0+pY8eO5ObmJuwdFBISQo0aNSJTU1OqVauW2uwIGxcXR0ZGRtSrV6/PThxOSEig0aNHk7W1tbCq8uXLl9StWzeysLAgb29vWrVqVVGE/dUkEgmVL1+e/P39C3xWnbW1Na1Zs4aIpBPOR40aRfb29lS6dGmaPHmy2hxt8f3335ONjU2BDhLevXs3ubq60rBhw4hI+ue2aNEiKlOmDFlbW1Pfvn3VZuL1ggULSCQSFehohkuXLlGNGjXom2++EZLgvXv3ko+PD5mbm1Pr1q3pwYMHyg5Z4xWrZGfnzp2kp6dHkZGRdPr0aWrWrBlZWVlRtWrVZHZCbdWqFTVr1ozu3bunwmgVJzw8nHR1dWn//v304MED6tatG9nZ2ZGnpyfNmzdPGOOeOHEiVapUiU6fPq3iiBUjJSWFHBwcaOrUqRQTE0PDhw8nFxcXcnJyolGjRgk7Qu/du5ccHR1pw4YNaj/pNE/9+vWpXbt2lJ6eTjNmzCAvLy+ytbWlbt26CccaPHjwgKysrGjGjBlq8W22IEaPHk1lypShjIwM2rBhA/n6+pKVlRU1btxYWCWYkZFBzs7ONGDAALX5cPucTZs2kaGhIUVFRdHx48epcePGZGVlRb6+vjJbZzRq1IhatWqlMZNO7969S9ra2nT06FEKCwujb7/9lmxtbalcuXK0ePFiod748ePJx8dHLedY5icxMZFsbGzot99+o9evX9OQIUPI2dmZSpcuTT/++KPw+7xt2zYqXbo0/fXXXxrz3lZcqTTZyW+Yqn79+uTp6UnOzs60cuVKOnLkCHXt2pVEIhH9/fffRERqv6Iovy7s0aNHk5OTE1lbW9OMGTPo2LFjNGHCBNLS0hK2fo+NjVXb/XGIpN/UPrz3vA+B0qVL07BhwygoKIgWL15Mpqam1KZNGyKSrrT63NBecffhfd+6dYu0tLSobNmyFBgYSP/88w9t3LiRXF1dycvLS0j0NO3fekJCAtnY2FDZsmXJz8+PduzYQXv37qVatWqRiYmJsLpQ3e/7w99TiURCNWvWpLJly5KbmxutXr2aDh8+TB07diQtLS1hab2633d+722DBw8mZ2dn4cP/+PHj9OOPP5JIJBI2hH3//r3av7d9mKysWrWKTExMyNHRkUaNGkVBQUG0YMECKlWqFHXu3JmIpF/41GHKgSYo8mQnMzOTpk2bRo6OjgSAatWqJbMS5datW2Rubi6z7FAikVCrVq2oXLlyRR2uQq1bt44qVKhAAMjT01PmjJ+8D4G8ZZV5Jk+eTPr6+vT+/fuiDldhjh07RvXq1SORSEQ2NjYyO9/mfQh8uHps7969BEDm5F51ExYWRh07diRdXd18z2IbMGCA3EaIERERpKOjQ0uXLi3KUBXq7du3NGjQIDIxMSFtbW3q3LmzzJDyqlWrqGrVqjJlycnJ5OLiQr169VJFyAqRkZFBU6dOJQcHBwJAtWvXlhm+uXLlCllaWsocSCqRSKhx48bk4+OjipAVQiKR0KpVq4QDWMuVKyczfPP+/XuysLCQ+10eN24cGRkZFWiVUnF16NAhql27NolEIrK3t6ctW7YIz4nFYqpatarc6rG8I3vydj5nRaNIk53c3Fxq0aIFffvtt3Tnzh26efMmVaxYkfz9/WXq5fePYM+ePQRAbT/0J0yYQDVr1qTz58/Tw4cPqW3btmRmZiZzeGd+9/3s2TMCQEFBQUUZrsJs376d3NzcaP/+/fT8+XMaPXo0aWlpCZMQiaRLbD88xE4sFpOFhYXa7oB769YtcnR0pBUrVlBUVBStWrWKtLS0aNOmTUKdmJiYfOcyNGjQQG13wH337h15enrSL7/8Qo8fP6ajR4+SmZkZjR49WqgjFovz3djyxx9/JA8Pj6IMV2FycnKoadOm1K1bNwoNDaUbN26Qt7c31atXT6Zefr/jeUvrU1JSiipchRo9ejTVqVOHLl68SOHh4dSiRQuysrKSmVeU332Hh4er7fYgREQbN24kDw8POnjwID179oyGDh1K2traMkOQt2/fltsiIycnh0qVKkW///57EUdcshVpsrNw4UL6/vvvZbr7du/eTQA+u7/KmjVryMTERO4fjjoIDg6matWqySQ2T548IQCf3cY/7ywrdZyf9OrVK3Jzc5PppcvNzSULCwuaP3/+J69NTU0lQ0ND2rp1q7LDVLjc3FyqVKmS3OncjRs3pi5dunz2eh8fH7leIHXRuXNnuV6psWPHFqhXtl+/ftSwYUNlhaZUc+fOleuV2r59O4lEos/2XCxdupQsLS3Vcs7GsWPHqFatWjJzyh48eFCgXtnLly8TgAItzChunj17Ru7u7jK9dFlZWWRsbPzZXtnExETS1dWVmYfKlE+nKJe5+/j4YODAgRCJREKZg4MDAEBH5+OhREREYObMmZgyZcon6xVXDg4O2Lx5M4yMjIQyR0dHAIC2tvZHr4uPj8eIESPQpUsXVKxYUelxKpqZmRn+/PNPuLi4CGXa2tqwtbX95H3n5ORg6NChKFu2LDp37lwUoSqUtrY2pk2bhkaNGsmUOzg4CHukfMz8+fPx6tUrjBw5UpkhKk3Xrl3l/s4cHBw++fcNAEePHsWuXbtw6NAhZYanNFWrVsWwYcNkyhwcHEBEn3zPunfvHubMmYNp06bJvC+qCycnJ2zevBkGBgZCWd57+qf+zt+/f4/Ro0ejV69e8PDwUHqcimZpaYnVq1cL7+MAoKenBysrq0/ed1ZWFgYPHowqVaqgXbt2RREq+5dSMofMzExs3LgR169fR9myZTF06FCYm5ujWbNmcnUjIiLg4uICU1NTmfKnT59i1apViI6OxpkzZzBp0qRi/wFARNi7dy+OHz8Oa2trDB48GG5ubihXrpxc3YiICABApUqVZMozMjIwffp0xMfH49ChQ+jcuTMWLVpUJPF/jfPnz2Pnzp3Q0dFBr169UKNGDZQqVQotW7aUqZednY2nT5+icuXKcm3MmzcPr169wpEjR1C5cmWcPn0a+vr6RXULX+Thw4dYt24dEhMT0a5dO7Rt2xYA0KlTJ7m6ERER+ZZv2bIFoaGhCA4Oho6ODi5cuABnZ2elx/41YmJisGbNGjx58gT169dH7969oaOjk29yGhERke/f99mzZxEUFITQ0FA8evQI+/fvl0sQi5uMjAysX78eISEh8PLywtChQ2FqaooWLVrI1Y2IiECZMmVQqlQpmfKHDx9i/fr1iIqKwrlz5zB9+nT88MMPRXULX4SIsHPnTpw+fRq2trYYMmQInJ2d5d6/AOl9a2lpoUKFCjLlqampmDlzJuLj43H48GF89913mDdvXlHdwhcLDg7Grl27oKenh969e6N69eowNTWV+zxLS0tDdHR0vv/WZ8+ejbdv3+Lw4cOoUaMGTpw4AV1d3aK6BQYoflPBxMREqlatGgUEBND06dPJ3d2dnJ2dP7qUsk+fPtSzZ0+5colEQocPH6azZ8+qxbJbsVhMnTt3pmrVqtGsWbOoZs2aVKpUKblTi/MsX76cypcvn+9z58+fp+PHj392v6HiYvr06eTs7EzTp0+ntm3bkpaW1ke3dL948SLp6urmuwLhzp07dPToUbU5mXz//v1kaWlJEyZMoIEDB5K2tjb169cv3+GIlJQU0tHRoUuXLsk99/TpUzpy5IjanN8VGhpKNjY2NHjwYBo/fjyZmppS/fr1PzrnxNvbm1asWCFXHh8fT4cOHaKrV6+qxRBOXFwcVapUidq1a0fTpk0jFxcXcnNz++gwTI8ePahv375y5bm5uXT48GEKDg6Wm6tWHOXm5lLbtm3Jz8+PZs2aRdWrVycTE5OPzrVZuHAhVatWLd/nzp49SydOnFCbSclTpkwhV1dXmjFjBrVu3Zq0tLRo5cqV+dY9deoUGRoa5rsH0q1btygoKOizG6cy5VF4svPrr79S7dq1hTevvOTH09Mz3w84FxcX2rx5s/D43r17avHG96G///6brK2thTf83Nxc+vbbb2WW0/5Xx44dacSIEcLjly9fqk1y819PnjwhLS0tmWR2+vTpJBKJ8p1UPWPGDKpfv77wODk5uUAbjhU3ubm5ZGtrKzOn6ODBg6SlpSUsp/2vo0ePysw5y83NVduNwpo0aSIzp+jevXtkYWEhLKf9r1evXhEAmZ2tC3IeVnH0888/U6NGjYT3p7zkp3z58vl+IXN0dKRt27YJj8PCwtTyvW3Hjh3k6OgozDnMzs6mdu3akbm5eb6/uwEBATR+/HjhcVRUFCUlJRVZvIry8OFDEolEMu/fU6ZMIS0trXznWv7yyy/UrFkz4XFiYqLafHErCRSe7LRr144GDhwoUxYZGUmGhoZyky4fPnxIAOjVq1cUExNDAwYMIAcHh3yTg+Ju6tSp5OfnJ1OWmppK7u7u1LRpU5nyvJVGBw8epIyMDJoxYwZZW1urzZb//7V//37S19eXexNv0aIFOTs7y30I1K9fn2bMmEESiYQ2bNhAjo6Ocoe4qoO8wxj/u6qMSPqGp6enR48ePZIpHzNmDLVr146IpN8AK1WqpJaHlhIRWVpaynxBIfr/QoMDBw7IlG/evJlcXFyISJoUNW3alKpWrfrZHZSLo+bNm8t8QSGSrijS19cX9sLKc//+fRKJRBQTE0Nv376lfv36kaOjY4EOfC1ufvrpJ5kvKERESUlJVLp0aWEvrDzZ2dlkbGxMJ06coLS0NJo6dSpZW1vLbamhDnbv3k1GRkYyZRKJhJo0aUKurq5yPTh+fn40f/58EovFtHr1arK3t1fLQ0s11VcnOx9uIjVo0CCqXr26XL2JEyeSoaEhxcbGCmUrV66kcuXK0cKFC8nGxobGjRunNt8APrzvlStXkpGRkdyH+65duwiAzPDF9evXSUdHh9avX09ubm7UpUsXmRVLxdmHG3/lraj48KiG8PBw0tLSkhm+SEtLI11dXVq0aBH5+vpSvXr18l2CXBx9eN/p6emko6NDGzZskCu3tbWVG77w8fGhMWPGUGBgIHl6esolBcVVfpvEVahQgUaOHClXXr9+fbnhi169elGHDh2EM+9WrFihFpvH5bcBZq9evahOnTpydceMGUPGxsYy711Lly6l8uXLC2fe/fzzz2qzMeaH97148WIyMzOTS1A3b95MAOjmzZtC2fnz50lfX5/Wr19f4DPviosP7/v8+fMEQK4HNiwsjEQiEa1evVooS0hIIG1tbfrjjz+oatWqBT7zjhWdL0p2Tp06RQ0bNiQtLS2ysrKSGcM8ePAgAaDLly/LXBMTE0N6enq0du1aoaxbt24EgNq2basWvTn379+nTp06kZ6eHhkaGtLYsWOFHo3nz5+TSCSSm5sgFovJw8NDOO+FSDqmDYCqV69eoLNTVO39+/c0ZMgQMjU1JS0tLQoMDBSG63JycsjOzk6uN4+IKDAwkOrWrSs8PnXqFAEgFxcX2rFjR5HF/6U+twFm8+bN803sZ82aRcbGxsKQVUJCAolEIjI1NaV58+apxTyNNWvWUPny5QkAlS1bls6dOyc899NPP5G5ubncF5PDhw8TAAoPDxfK3NzcSEdHh0aMGKEWw7Sf2gAzr/fqwwT95cuXpK2tTX/99ZdQ1rlzZwJA7du3V4ul1aGhoRQYGEi6urpUqlQp+vnnn4Xn8nrg169fL3NNTk6OcPxBnlmzZhEAqlmzJl25cqXI4v9Sn9oAMzs7m6ytrWnIkCFy17Vp04YaNGggPM77t+/u7s5LyoupQic7+/btIxcXF9q9ezdFRUXRTz/9RCKRSNg0SiwWU4UKFahRo0Zy19asWVPmF+PgwYOf3WemuAgNDSVHR0daunQpRUVF0dq1a0lbW1vmzbBr165UunRpublJgwYNoiZNmgiP7969S2vXrv3sycfFQXx8PHl5edH48ePp0aNHdOLECbK0tKTBgwcLdebMmZPv0M3KlSvJyspKeJyQkEC//fabWhzQWpANME+ePEkA5N7crl+/TgBkTimePXu22hwFMG7cOPL396cLFy4Ip5RbWFgIvZbR0dFkYGAgN3ST19uVd6wLkfTfgLrMTfrcBpg5OTnk6elJLVu2lLvWx8eHJk2aJDw+cOBAgQ64LQ5u3LhBjo6OtHLlSoqKiqIVK1aQlpaWzHy09u3bk7u7u9zvbq9evah169bC45CQENq0aZNazE0qyAaYM2fOJH19fbmEdenSpWRnZyc8jo2Npblz56rFYpqSqlDJTkxMjNzqA4lEQnZ2djRjxgyh7PTp0yQSieR2iKxRowbNmzfv6yJWAbFYTD4+PnLjzs2bN6eOHTsKj6OiosjExIR69+4tU2/AgAHUvXv3oghV4Xr06CG3AeAvv/wizMMgkm6T7+XlJbe52KdWnBV3Bd0As1OnTmRnZyfTVX/16lXS1tZWmyHZ/zp16hTVqFFD5kPt0aNHBEBmk8SZM2eSrq6uzPBsWloaaWtr57virLgr6AaYR48eJQD0559/ylxfqVIl+uOPP4osXkXJycmhChUqyPTcERF988039N133wmPIyMjycjIiH744QeZeh9bcaYOCrIBZnp6Onl6elKdOnVk5ugsWbKEKleuXGSxsq9XqGQnIyODDh8+LFdepUoVmj17tkzZ7NmzSUtLi3799Vd68OABzZgxg+zs7NTm2+2H9uzZI1fWu3dv+vbbb2XKDhw4QDo6OtSrVy8KDQ2lLVu2kKmpKV29erWoQlWovXv3yn1LW7ZsGbm7u8uUhYWFkYWFBTVo0ICuXr1KJ06cIHt7e9q4cWMRRqs4J06ckEtWLly4QABkyuPj46lChQrk4eFBQUFBdOPGDapRo4bMsKU6efDggdwS+JSUFAIg84GYm5tLbdq0IXNzc9q8eTOFhYVR586dqV69emrxrf5Dqamp+a4e9PLyokWLFsmUTZkyhbS1tWnWrFn04MEDmjx5Mjk6OsrMR1Qn+Q27dO3aVW5LkF27dpG2tjYNGDCA7t69S+vXrydTU1O6detWUYWqUPm9py9YsEDuC1poaCiZmZlR48aN6dq1a3Ts2DGytbWVGbZkxd9XT1DOzc0lIyMjOnjwoNxzW7ZsofLly5OFhQV17NiRnjx58rUvV6zUqlVLpkcrT3BwMPn7+5OpqSk1bNhQLb/pfsqwYcOElUX/FRERQa1btyYzMzOqWrUq7dq1SwXRKc/atWtlerTyxMXFUf/+/cna2prc3d1p/vz5ajEJt6Bu3LhBIpFI7sM8OzubJk+eTKVLlyZ7e3saNWqU2kzCLYisrCzS1dXNd6h9/fr15OXlRZaWlmq1wKCgqlSpku+RLidPniQ/Pz8yMzOjJk2aaNxhlv3798/3SJfw8HAKCAggMzMzqlatGs/LUUMiIqKv2ZQwJCQENWvWRGxsLCwsLL6mKbWSkZEBc3NznDx5Et98842qwylS1apVQ8+ePTF27FhVh1Kk+vbtC7FYjC1btqg6lCL1xx9/YP369bh7966qQylSly5dQqNGjZCQkCC3C7ImS05OhqWlJS5fvoyaNWuqOpwiVb58eYwYMQJDhw5VdShMwbS+toEzZ87A19dXSHTS0tLw7Nmzrw6suLt48SJ0dXXh7+8PABCLxQgPD1dxVMoXFxeH0NBQNG3aVCi7d++eCiMqOmfOnJG57/v37+MrvyuohQ/vOzo6GklJSSqMqGicOXMG/v7+QqKTkpKCqKgoFUelfOfOnYOJiQl8fX0BALm5ucLxNprs9evXiIiIKJHvbSXBVyc7J0+eRLNmzUBE2Lp1K7y9vbFjxw5FxFasnTx5Eg0aNICenh7Onj2L6tWrY/r06aoOS+nyzsapXLkyIiIi0KpVK3Tr1g2ZmZmqDk2pHj16hBcvXqBp06Z49+4dBg4ciGbNmuHJkyeqDk2pcnNzERwcjGbNmgnntlWvXh1Xr15VdWhK99/3to0bN8Lb2xt79+5VdVhKd/LkSTRu3Bja2to4efIkqlSpgrlz56o6LKU7deoUXFxcUK5cOdy/fx/NmjVDz549kZOTo+rQmAJ8VbKTnZ2NixcvwszMDLVr18aKFSuwb98+/PLLL4qKr9g6ffo0PD090alTJwwYMADTpk3Dzp07VR2W0p0+fRp+fn4YO3YsGjRogJYtW+LOnTsypx5rotOnT6NcuXLYsWMHKlWqBHNzc0RERMDT01PVoSnVjRs3kJmZiTdv3sDb2xsPHz7ErVu38j34UpOkp6fj6tWrKFWqFPz8/LBhwwYcOnQIP/74o6pDU7rTp0/D3d0d7dq1w/DhwzFv3jxs2rRJ1WEp3enTp+Hr64vhw4ejSZMm6NChA27evMkHdmqKr5nwc/HiRQJATk5OtGXLFrVchfElkpOTSUtLi0xMTGjOnDn5Hvymqby9vUlbW5uGDBmitqtPvoS6bYCpKHPnziUAVKNGDY2baP8p6rYBpqK8f/+eAJCpqSktWLBALY/1+FLqtgEmK5yvmqCcmpqKP/74A6NHjy5RE/gAYM6cOejbty/s7e1VHUqRWrt2Lfz9/VG5cmVVh1KkDh06BAMDAzRr1kzVoRSp0NBQ3Lp1C3369IFIJFJ1OEUmMTERf/75J0aPHg1DQ0NVh1NkiAi//fYbBg4cCFtbW1WHU6T+/PNPNGzYEOXLl1d1KEwJvno1FmOMMcZYcfbVE5QZY4wxxoozTnYYY4wxptE42WGMMcaYRuNkhzHGGGMajZMdxhhjjGk0TnYYY4wxptE42WGMMcaYRuNkhzGmlmJjY7Fz584ScRgrY+zrcLLDGFNLERER6N69O8RicYGvef36Nfbs2aPEqBhjxREnO4yxEuPWrVvo2bOnqsNgjBUxHVUHwBhjBXXz5k3ExMSgYsWKcs8lJibi2LFjAAB9fX14enrKnOEWFxeHCxcuQCKRYOfOnQAALy8vVKtWDQDw5s0b3Lx5EyYmJqhevTpMTU2L4I4YY0WBkx3GWLFHRPjuu+8QFBSE2rVr48GDB6hQoYJMnaSkJBw4cAAAkJmZiatXr6Jq1ao4ePAg9PT0kJCQgCtXrkAsFgv1AgICUK1aNcycOROLFi2Cv78/0tPTERERge3bt6Np06ZFfKeMMWXgg0AZY8Xe7t270a9fP9y5cweenp5IS0tD3bp1ERoaipycHOjoyH9vS0tLg5+fH4YNG4Zhw4YBAA4fPozOnTsjMzNTqHfo0CEMGDAAN27cgIuLCwBg/fr1mDx5Mp49ewYDA4OiuUnGmNLwnB3GWLG3e/dudOjQAZ6engCAUqVKCQnMf0kkEty8eRN///03Dh06BGdnZ1y/fv2TbW/cuBEVK1bE9evXsWfPHuzevRs6Ojp4+/YtwsPDlXI/jLGixcNYjLFi78WLF2jRooVMmbu7u8zjqKgoNGvWDNnZ2ahYsSJMTEwQFRUFLa1Pf6d7/vw5srKysHfvXpnyrl27fvZaxph64GSHMVbsWVlZISEhQabsw8ezZ89GmTJlEBQUBJFIBADo06cP3r59+8m2TU1N4eLigi1btig2aMZYscFfWxhjxV69evVw5MgR5OTkCGX79++XqfP27VuUK1dOSHRSU1Nx/PhxmTrGxsbIycmBRCIRylq2bIl//vkHb968kan76tUrRd8GY0xFuGeHMVbsjRgxAqtXr0bz5s3RvXt3XLt2DadOnZKpExgYiJEjR8Le3h7m5uZYs2aNzERkAKhYsSL09PTw888/w9fXF15eXhg1ahQOHz6MWrVqYejQobC0tMStW7dw/vx5PHjwoChvkzGmJLwaizGmFt6+fYulS5fi3bt3qFy5Mho0aIC5c+di+/btwtyaffv24fjx4xCJRGjatCmysrLw8uVLTJgwQWjn0qVL2LVrF96/f49WrVqhV69eyMnJwa5du3DhwgWIRCLUqFEDPXr04JVYjGkITnYYY4wxptF4zg5jjDHGNBonO4wxxhjTaJzsMMYYY0yjcbLDGGOMMY3GyQ5jjDHGNBonO4wxxhjTaJzsMMYYY0yjcbLDGGOMMY3GyQ5jjDHGNBonO4wxxhjTaJzsMMYYY0yjcbLDGGOMMY32PzPXtKAgbm9IAAAAAElFTkSuQmCC",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "(\n",
        "    universe_counts\n",
        "    .join(\n",
        "        upload_stats_df.select(\"date\", \"n_assets\").rename({\"n_assets\": \"Uploaded\"}),\n",
        "        on=\"date\",\n",
        "        how=\"left\",\n",
        "    )\n",
        "    .sort(\"date\")\n",
        "    .to_pandas()\n",
        "    .set_index(\"date\")\n",
        "    .plot()\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e0eb526e",
      "metadata": {},
      "source": [
        "We can pull some exposures from the new risk dataset to verify."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "id": "fb4ca1d9",
      "metadata": {},
      "outputs": [],
      "source": [
        "exposures_api = bln.equity.exposures.load(\n",
        "    ExposureSettings(\n",
        "        exposures=[\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"market\"),\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"style\", standardize_method=\"equal_weighted\"),\n",
        "        ],\n",
        "    ).with_dataset(risk_dataset_name)\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "id": "cc9802f4",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (5, 10)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>bayesid</th><th>market.Market</th><th>style.Dividend</th><th>style.Growth</th><th>style.Leverage</th><th>style.Momentum</th><th>style.Size</th><th>style.Value</th><th>style.Volatility</th></tr><tr><td>date</td><td>str</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td></tr></thead><tbody><tr><td>2025-05-31</td><td>&quot;ICFFE54368&quot;</td><td>1.0</td><td>-0.84412</td><td>-0.702764</td><td>0.094039</td><td>-1.146024</td><td>0.962231</td><td>-2.420729</td><td>0.370192</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFE60191&quot;</td><td>1.0</td><td>-0.107825</td><td>-0.069136</td><td>-0.16452</td><td>0.388215</td><td>-0.501518</td><td>0.246907</td><td>0.649349</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFE94AED&quot;</td><td>1.0</td><td>1.232642</td><td>0.386265</td><td>1.141329</td><td>0.701993</td><td>0.17984</td><td>1.00983</td><td>-1.267301</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFEBBB38&quot;</td><td>1.0</td><td>0.400419</td><td>0.67822</td><td>0.293851</td><td>0.703918</td><td>0.63531</td><td>0.37698</td><td>-1.352409</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFF2F5AD&quot;</td><td>1.0</td><td>-0.11643</td><td>-0.081772</td><td>-0.172136</td><td>-0.798879</td><td>-0.521232</td><td>0.244708</td><td>0.196854</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (5, 10)\n",
              "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n",
              "│ date      ┆ bayesid   ┆ market.Ma ┆ style.Div ┆ … ┆ style.Mom ┆ style.Siz ┆ style.Val ┆ style.Vo │\n",
              "│ ---       ┆ ---       ┆ rket      ┆ idend     ┆   ┆ entum     ┆ e         ┆ ue        ┆ latility │\n",
              "│ date      ┆ str       ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---      │\n",
              "│           ┆           ┆ f32       ┆ f32       ┆   ┆ f32       ┆ f32       ┆ f32       ┆ f32      │\n",
              "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n",
              "│ 2025-05-3 ┆ ICFFE5436 ┆ 1.0       ┆ -0.84412  ┆ … ┆ -1.146024 ┆ 0.962231  ┆ -2.420729 ┆ 0.370192 │\n",
              "│ 1         ┆ 8         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-3 ┆ ICFFE6019 ┆ 1.0       ┆ -0.107825 ┆ … ┆ 0.388215  ┆ -0.501518 ┆ 0.246907  ┆ 0.649349 │\n",
              "│ 1         ┆ 1         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-3 ┆ ICFFE94AE ┆ 1.0       ┆ 1.232642  ┆ … ┆ 0.701993  ┆ 0.17984   ┆ 1.00983   ┆ -1.26730 │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆ 1        │\n",
              "│ 2025-05-3 ┆ ICFFEBBB3 ┆ 1.0       ┆ 0.400419  ┆ … ┆ 0.703918  ┆ 0.63531   ┆ 0.37698   ┆ -1.35240 │\n",
              "│ 1         ┆ 8         ┆           ┆           ┆   ┆           ┆           ┆           ┆ 9        │\n",
              "│ 2025-05-3 ┆ ICFFF2F5A ┆ 1.0       ┆ -0.11643  ┆ … ┆ -0.798879 ┆ -0.521232 ┆ 0.244708  ┆ 0.196854 │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘"
            ]
          },
          "execution_count": 28,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df = exposures_api.get(universe_settings, standardize_universe=None)\n",
        "\n",
        "df.tail()"
      ]
    }
  ],
  "metadata": {
    "jupytext": {
      "text_representation": {
        "extension": ".py",
        "format_name": "percent",
        "format_version": "1.3",
        "jupytext_version": "1.19.3"
      }
    },
    "kernelspec": {
      "display_name": ".venv",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.11.15"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}