{ "cells": [ { "cell_type": "markdown", "id": "9-a3wNZ9mxWT", "metadata": { "id": "9-a3wNZ9mxWT" }, "source": [ "# Probabilistic Time Series Forecasting with 🤗 Transformers\n", "\n", "## Introduction\n", "\n", "Time series forecasting is an essential scientific and business problem and as such has also seen a lot of innovation recently with the use of [deep learning based](https://dl.acm.org/doi/abs/10.1145/3533382) models in addition to the [classical methods](https://otexts.com/fpp3/). An important difference between classical methods like ARIMA and novel deep learning methods is the following.\n", "\n", "## Probabilistic Forecasting\n", "\n", "Typically, classical methods are fitted on each time series in a dataset individually. These are often referred to as \"single\" or \"local\" methods. However, when dealing with a large amount of time series for some applications, it is beneficial to train a \"global\" model on all available time series, which enables the model to learn latent representations from many different sources.\n", "\n", "Some classical methods are point-valued (meaning, they just output a single value per time step) and models are trained by minimizing an L2 or L1 type of loss with respect to the ground truth data. However, since forecasts are often used in some real-world decision making pipeline, even with humans in the loop, it is much more beneficial to provide the uncertainties of predictions. This is also called \"probabilistic forecasting\", as opposed to \"point forecasting\". This entails modeling a probabilistic distribution, from which one can sample.\n", "\n", "So in short, rather than training local point forecasting models, we hope to train **global probabilistic** models. Deep learning is a great fit for this, as neural networks can learn representations from several related time series as well as model the uncertainty of the data.\n", "\n", "It is common in the probabilistic setting to learn the future parameters of some chosen parametric distribution, like Gaussian or Student-T; or learn the conditional quantile function; or use the framework of Conformal Prediction adapted to the time series setting. The choice of method does not affect the modeling aspect and thus can be typically thought of as yet another hyperparameter. One can always turn a probabilistic model into a point-forecasting model, by taking empirical means or medians.\n", "\n", "## The Time Series Transformer\n", "\n", "In terms of modeling time series data which are sequential in nature, as one can imagine, researchers have come up with models which use Recurrent Neural Networks (RNN) like LSTM or GRU, or Convolutional Networks (CNN), and more recently Transformer based methods which fit naturally to the time series forecasting setting.\n", "\n", "In this blog post, we're going to leverage the vanilla Transformer [(Vaswani et al., 2017)](https://arxiv.org/abs/1706.03762) for the **univariate** probabilistic forecasting task (i.e. predicting each time series' 1-d distribution individually). The Encoder-Decoder Transformer is a natural choice for forecasting as it encapsulates several inductive biases nicely.\n", "\n", "To begin with, the use of an Encoder-Decoder architecture is helpful at inference time where typically for some logged data we wish to forecast some prediction steps into the future. This can be thought of as analogous to the text generation task where given some context, we sample the next token and pass it back into the decoder (also called \"autoregressive generation\"). Similarly here we can also, given some distribution type, sample from it to provide forecasts up until our desired prediction horizon. This is known as Greedy Sampling/Search and there is a great blog post about it [here](https://huggingface.co/blog/how-to-generate) for the NLP setting.\n", "\n", "Secondly, a Transformer helps us to train on time series data which might contain thousands of time points. It might not be feasible to input *all* the history of a time series at once to the model, due to the time- and memory constraints of the attention mechanism. Thus, one can consider some appropriate context window and sample this window and the subsequent prediction length sized window from the training data when constructing batches for stochastic gradient descent (SGD). The context sized window can be passed to the encoder and the prediction window to a *causal-masked* decoder. This means that the decoder can only look at previous time steps when learning the next value. This is equivalent to how one would train a vanilla Transformer for machine translation, referred to as \"teacher forcing\".\n", "\n", "Another benefit of Transformers over the other architectures is that we can incorporate missing values (which are common in the time series setting) as an additional mask to the encoder or decoder and still train without resorting to in-filling or imputation. This is equivalent to the `attention_mask` of models like BERT and GPT-2 in the Transformers library, to not include padding tokens in the computation of the attention matrix.\n", "\n", "A drawback of the Transformer architecture is the limit to the sizes of the context and prediction windows because of the quadratic compute and memory requirements of the vanilla Transformer, see [Tay et al., 2020](https://arxiv.org/abs/2009.06732). Additionally, since the Transformer is a powerful architecture, it might overfit or learn spurious correlations much more easily compared to other [methods](https://openreview.net/pdf?id=D7YBmfX_VQy).\n", "\n", "The 🤗 Transformers library comes with a vanilla probabilistic time series Transformer model, simply called the [Time Series Transformer](https://huggingface.co/docs/transformers/model_doc/time_series_transformer). In the sections below, we'll show how to train such a model on a custom dataset.\n", "\n", "## Set-up Environment\n", "\n", "First, let's install the necessary libraries: 🤗 Transformers, 🤗 Datasets, 🤗 Evaluate, 🤗 Accelerate and [GluonTS](https://github.com/awslabs/gluonts).\n", "\n", "As we will show, GluonTS will be used for transforming the data to create features as well as for creating appropriate training, validation and test batches." ] }, { "cell_type": "code", "execution_count": 1, "id": "7AkJMJAunLP9", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "7AkJMJAunLP9", "outputId": "b57a63c6-d3da-4034-b081-e3f2da24a8f4" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K |████████████████████████████████| 5.8 MB 13.9 MB/s \n", "\u001b[K |████████████████████████████████| 182 kB 44.5 MB/s \n", "\u001b[K |████████████████████████████████| 7.6 MB 49.1 MB/s \n", "\u001b[?25h" ] } ], "source": [ "!pip install -q transformers" ] }, { "cell_type": "code", "execution_count": 2, "id": "cd9NeR_ZnSWP", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "cd9NeR_ZnSWP", "outputId": "647bfe07-8511-4517-ecff-11ef0bf299b7" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K |████████████████████████████████| 451 kB 41.1 MB/s \n", "\u001b[K |████████████████████████████████| 132 kB 74.4 MB/s \n", "\u001b[K |████████████████████████████████| 212 kB 63.3 MB/s \n", "\u001b[K |████████████████████████████████| 127 kB 73.6 MB/s \n", "\u001b[?25h" ] } ], "source": [ "!pip install -q datasets" ] }, { "cell_type": "code", "execution_count": 3, "id": "xl9uzDOCKMoK", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "xl9uzDOCKMoK", "outputId": "e88bb8e2-4e4e-4f08-ea52-a90bb8c54faf" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[?25l\r", "\u001b[K |████▌ | 10 kB 27.1 MB/s eta 0:00:01\r", "\u001b[K |█████████ | 20 kB 22.3 MB/s eta 0:00:01\r", "\u001b[K |█████████████▌ | 30 kB 28.2 MB/s eta 0:00:01\r", "\u001b[K |██████████████████ | 40 kB 32.4 MB/s eta 0:00:01\r", "\u001b[K |██████████████████████▌ | 51 kB 35.8 MB/s eta 0:00:01\r", "\u001b[K |███████████████████████████ | 61 kB 39.2 MB/s eta 0:00:01\r", "\u001b[K |███████████████████████████████▌| 71 kB 39.8 MB/s eta 0:00:01\r", "\u001b[K |████████████████████████████████| 72 kB 1.5 MB/s \n", "\u001b[?25h" ] } ], "source": [ "!pip install -q evaluate" ] }, { "cell_type": "code", "execution_count": 4, "id": "3X4oByTHPudz", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "3X4oByTHPudz", "outputId": "65c9a838-5716-48d7-b1d6-df946c4c7da9" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[?25l\r", "\u001b[K |█▊ | 10 kB 23.5 MB/s eta 0:00:01\r", "\u001b[K |███▍ | 20 kB 28.4 MB/s eta 0:00:01\r", "\u001b[K |█████▏ | 30 kB 34.0 MB/s eta 0:00:01\r", "\u001b[K |██████▉ | 40 kB 26.4 MB/s eta 0:00:01\r", "\u001b[K |████████▋ | 51 kB 29.4 MB/s eta 0:00:01\r", "\u001b[K |██████████▎ | 61 kB 32.5 MB/s eta 0:00:01\r", "\u001b[K |████████████ | 71 kB 19.9 MB/s eta 0:00:01\r", "\u001b[K |█████████████▊ | 81 kB 19.6 MB/s eta 0:00:01\r", "\u001b[K |███████████████▍ | 92 kB 21.2 MB/s eta 0:00:01\r", "\u001b[K |█████████████████▏ | 102 kB 21.7 MB/s eta 0:00:01\r", "\u001b[K |██████████████████▉ | 112 kB 21.7 MB/s eta 0:00:01\r", "\u001b[K |████████████████████▌ | 122 kB 21.7 MB/s eta 0:00:01\r", "\u001b[K |██████████████████████▎ | 133 kB 21.7 MB/s eta 0:00:01\r", "\u001b[K |████████████████████████ | 143 kB 21.7 MB/s eta 0:00:01\r", "\u001b[K |█████████████████████████▊ | 153 kB 21.7 MB/s eta 0:00:01\r", "\u001b[K |███████████████████████████▍ | 163 kB 21.7 MB/s eta 0:00:01\r", "\u001b[K |█████████████████████████████ | 174 kB 21.7 MB/s eta 0:00:01\r", "\u001b[K |██████████████████████████████▉ | 184 kB 21.7 MB/s eta 0:00:01\r", "\u001b[K |████████████████████████████████| 191 kB 21.7 MB/s \n", "\u001b[?25h" ] } ], "source": [ "!pip install -q accelerate" ] }, { "cell_type": "code", "execution_count": 5, "id": "f6kDYa76nU9J", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "f6kDYa76nU9J", "outputId": "e2d16392-7553-452c-a2a2-3101a18a190d" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[K |████████████████████████████████| 1.0 MB 29.8 MB/s \n", "\u001b[K |████████████████████████████████| 52 kB 1.5 MB/s \n", "\u001b[?25h" ] } ], "source": [ "!pip install -q gluonts ujson" ] }, { "cell_type": "markdown", "id": "eaebea67", "metadata": {}, "source": [ "We also quickly upload some telemetry - this tells us which examples and software versions are getting used so we know where to prioritize our maintenance efforts. We don't collect (or care about) any personally identifiable information, but if you'd prefer not to be counted, feel free to skip this step or delete this cell entirely." ] }, { "cell_type": "code", "execution_count": null, "id": "98c2cf63", "metadata": {}, "outputs": [], "source": [ "from transformers.utils import send_example_telemetry\n", "\n", "send_example_telemetry(\"time_series_transformers_notebook\", framework=\"pytorch\")" ] }, { "cell_type": "markdown", "id": "4m_7_MKqmzfE", "metadata": { "id": "4m_7_MKqmzfE" }, "source": [ "## Load Dataset\n", "\n", "In this blog post, we'll use the `tourism_monthly` dataset, which is available on the [Hugging Face Hub](https://huggingface.co/datasets/monash_tsf). This dataset contains monthly tourism volumes for 366 regions in Australia.\n", "\n", "This dataset is part of the [Monash Time Series Forecasting](https://forecastingdata.org/) repository, a collection of time series datasets from a number of domains. It can be viewed as the GLUE benchmark of time series forecasting." ] }, { "cell_type": "code", "execution_count": 1, "id": "d93a3f41", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 264, "referenced_widgets": [ "956dc45f3dde496d94f2d2520f62a241", "dc1ad0316a634e0e81eecdd09d271136", "5c531b5b3ce4406abde898297f4bc80b", "8b30e8b778fb456bbf8af4d6931f415c", "d1f7dc29912b40e7ac4a9081a4068836", "f8af035c2033430ca41cb3c81719ddc8", "682be41e57c341189bdc3e7a6b7246d3", "b7e131bcb6454ccbb5de0813a734586a", "3e1c8ac5bfac429993d5404f7abf748d", "630d2a4aba53498b8e6f40d713fe50d1", "313d214425c541b6845f70638f8a5937", "2dc9cef88370404184dc1f629d062a04", "ed58c5b583f344cdbfea76562259190e", "c56009b340984f2296ad2959e8d72f25", "b2eeaecdd52343a4977954915f38bc9b", "c55cb9a98afe49d59838a3e2d88cd774", "672ee2ad96ac42fa90645a4049c7dd16", "96acfb4ec404421b8523e39b6a4bc41a", "c6fa8ced2f844e28a6e5cf4b31e362b1", "b65097925371428eb2b58eec672f9b81", "726309e90e0247628487e1f4816e6fd9", "e791aeda253f40d3bf28da3aaf0ec3f3", "87d63881c376462b88a7703f62495a83", "af5add21a56b4ef4945a90fed06d7c89", "c0822d9ca57b4b23ba552b93f139d96e", "2ec6b12a621f4ce681554397392bdda8", "8de92b21ea1b4dfc966d653e0ca7043b", "bcaa24789c664ed181eb3af6c93a618e", "e4015a34ae9744ceaa57d8b50a024d9a", "23207dda3c7c45ef942fb26b6d3e8f4a", "0a4bcc907dbc48f3af39fac4c0652bd4", "6a39d27a5d5e484385f3d8163665641f", "649640a4dacf4edab3aba273d7e09bbf", "0d037e1f14794a0fb68ab472b42ee60a", "eaa70494878f4eba927868ecbbd034b4", "b9f43527572c41849f66e100e4d2df83", "f0019a4884124eebb44571ca0a7b262e", "a79295d7dc77434282636a0ef665a70b", "b0b4e07185574c5eba5144a28c611971", "01a6160718434f7bb73bb4a094ee8b0f", "a70e5dadc1d547cc90da492ef9b72172", "3ff0a924499f414ca7fd03a902b51102", "0452728577c4433d9d15eca97045d1f4", "53938941490b4afea31c63aad4bdce0a", "1076c8e3f8e1413fad4aa5cb16c71c31", "dbb568c5b348421a9e2f9f4e07cd5f01", "966ca413bd824a77b50a20784e8bd1b4", "e81a3f25949247eeb696ccd3b0df3da0", "228e4cf452a04b1f8f324be138857c30", "addaf03f64e9421ab8debbba4f096d7e", "94aa0a38801e4fa0b79150fbd7bcc6cc", "044030ba2c5948d2ac6545aea773ef4a", "a54e00389ce148829b4db5b7439ae879", "435416a295674774a15aa700ff7ce007", "d7be4847987e4d6996c56eb42feb78b9", "43daab71788e4a5c80687a9e73bf3b67", "67f8fc82c7044090a0408294bc1c2d15", "7cd0096ebb94429dab18e3226fc4cdbf", "0bf375322d12400ab773e85c08cd3e62", "e3641728ace74d8ab4742007d1725ee8", "3c850c33752443afa6658a1cb997549e", "3366b16d73d949508f24d647558db059", "741afc0fb9a7469cac4a1d6b0dc130d8", "df02d3127e634862b1029787be8908b8", "22c8c8ecb39c491798602abe0144eba1", "36a6c51643ba4375b314e9395c0aea07", "83c39de970e84954b6fa043390b85d4c", "009a21c6a2dd4c5da79a7fb3eec8ff43", "9059a60d370c4825a0eb1b31c9f9cd0a", "028908857f134943af7b47a2503ce403", "445f2ef3f71a4573ae453144dd4c5e81", "a8b516bf196946a09a55732d937dfe2a", "53a3ad2f991648439e57362c4a7a5f60", "db1af11912fa4774b718242b8861a18c", "2e0511f2f1844758a6f6d10af7233a72", "50e91b016b0a4ce69325e8196a09dce6", "9c573dc9c14248deb512162af5f9b0fa", "ed32d5154c8e45ff91608c8dca664d8e", "d2e3caaeded749fc807de397f79e98e7", "f9d799cf26574229ad1d77373cb511c5", "17a314c74019462e9ba2e923b9235bed", "2435607c37f2439aa1f0d545009b375e", "09cc068788e64c1fbc1edd0992f43f42", "46e05d2996a84b5e8f456adbb6453350", "7cc6a3332eaf4e9bb012097ca03c6ef6", "7bb9e900006840a7a892a1a48d676560", "6b97acade12a49d683ec81855e1bf58a", "45b1dbee32a440328f91bf0c398d4a88", "048591e682544b57abbcba613c81f9b4", "d8a6361f19894be1b730137b0801e4e8", "2c375a08b1cb4f71a0a0a169c999aa94", "ea1af7f963e848d19ea363331027109b", "b68b7b7b072e457980e834113ff0a670", "764abccaae30410ba68405f44875c8d6", "89dd9177f7cd4edc87e43d5e23c5f587", "a3384254326f49eb907bfa6d2032b1a8", "68e542f3c052435f9254e135e5c481e8", "d0cecf202f814209abe965e2ec13c49e", "331752b5913245e380752532ab15f128" ] }, "id": "d93a3f41", "outputId": "5708bef0-3c78-4f58-9a1f-7db01177cfe2" }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "956dc45f3dde496d94f2d2520f62a241", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Downloading builder script: 0%| | 0.00/24.9k [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "figure, axes = plt.subplots()\n", "axes.plot(train_example[\"target\"], color=\"blue\")\n", "axes.plot(validation_example[\"target\"], color=\"red\", alpha=0.5)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "4pGV6_ZduUaA", "metadata": { "id": "4pGV6_ZduUaA" }, "source": [ "Let's split up the data:" ] }, { "cell_type": "code", "execution_count": 10, "id": "7eb15a6a", "metadata": { "id": "7eb15a6a" }, "outputs": [], "source": [ "train_dataset = dataset[\"train\"]\n", "test_dataset = dataset[\"test\"]" ] }, { "cell_type": "markdown", "id": "0125722c", "metadata": { "id": "0125722c" }, "source": [ "## Update `start` to `pd.Period`\n", "\n", "The first thing we'll do is convert the `start` feature of each time series to a pandas `Period` index using the data's `freq`:" ] }, { "cell_type": "code", "execution_count": 11, "id": "249a9da4", "metadata": { "id": "249a9da4" }, "outputs": [], "source": [ "from functools import lru_cache\n", "\n", "import pandas as pd\n", "import numpy as np\n", "\n", "\n", "@lru_cache(10_000)\n", "def convert_to_pandas_period(date, freq):\n", " return pd.Period(date, freq)\n", "\n", "\n", "def transform_start_field(batch, freq):\n", " batch[\"start\"] = [convert_to_pandas_period(date, freq) for date in batch[\"start\"]]\n", " return batch" ] }, { "cell_type": "markdown", "id": "D7goNkUB1MPB", "metadata": { "id": "D7goNkUB1MPB" }, "source": [ "We now use `datasets`' [`set_transform`](https://huggingface.co/docs/datasets/v2.7.0/en/package_reference/main_classes#datasets.Dataset.set_transform) functionality to do this on-the-fly in place:" ] }, { "cell_type": "code", "execution_count": 12, "id": "b43c7551", "metadata": { "id": "b43c7551" }, "outputs": [], "source": [ "from functools import partial\n", "\n", "train_dataset.set_transform(partial(transform_start_field, freq=freq))\n", "test_dataset.set_transform(partial(transform_start_field, freq=freq))" ] }, { "cell_type": "markdown", "id": "50efb119", "metadata": { "id": "50efb119" }, "source": [ "## Define the model\n", "\n", "Next, let's instantiate a model. The model will be trained from scratch, hence we won't use the `from_pretrained` method here, but rather randomly initialize the model from a [`config`](https://huggingface.co/docs/transformers/model_doc/time_series_transformer#transformers.TimeSeriesTransformerConfig).\n", "\n", "We specify a couple of additional parameters to the model:\n", "- `prediction_length` (in our case, `24` months): this is the horizon that the decoder of the Transformer will learn to predict for;\n", "- `context_length`: the model will set the `context_length` (input of the encoder) equal to the `prediction_length`, if no `context_length` is specified;\n", "- `lags` for a given frequency: these specify how much we \"look back\", to be added as additional features. e.g. for a `Daily` frequency we might consider a look back of `[1, 2, 7, 30, ...]` or in other words look back 1, 2, ... days while for `Minute` data we might consider `[1, 30, 60, 60*24, ...]` etc.;\n", "- the number of time features: in our case, this will be `2` as we'll add `MonthOfYear` and `Age` features;\n", "- the number of static categorical features: in our case, this will be just `1` as we'll add a single \"time series ID\" feature;\n", "- the cardinality: the number of values of each static categorical feature, as a list which for our case will be `[366]` as we have 366 different time series\n", "- the embedding dimension: the embedding dimension for each static categorical feature, as a list, for example `[3]` meaning the model will learn an embedding vector of size `3` for each of the `366` time series (regions).\n" ] }, { "cell_type": "markdown", "id": "0z4YFov8CNUu", "metadata": { "id": "0z4YFov8CNUu" }, "source": [ "Let's use the default lags provided by GluonTS for the given frequency (\"monthly\"):" ] }, { "cell_type": "code", "execution_count": 13, "id": "6CF4M8Ms7W-q", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6CF4M8Ms7W-q", "outputId": "4481a9bd-343c-45bd-b569-88d233ab8d40" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 2, 3, 4, 5, 6, 7, 11, 12, 13, 23, 24, 25, 35, 36, 37]\n" ] } ], "source": [ "from gluonts.time_feature import get_lags_for_frequency\n", "\n", "lags_sequence = get_lags_for_frequency(freq)\n", "print(lags_sequence)" ] }, { "cell_type": "markdown", "id": "q6ZuFx8yCSAM", "metadata": { "id": "q6ZuFx8yCSAM" }, "source": [ "This means that we'll look back up to 37 months for each time step, as additional features.\n", "\n", "Let's also check the default time features which GluonTS provides us:" ] }, { "cell_type": "code", "execution_count": 14, "id": "VlP_0E5I76lg", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "VlP_0E5I76lg", "outputId": "03d14e28-8609-4c8e-ef7c-efb17f41076a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[]\n" ] } ], "source": [ "from gluonts.time_feature import time_features_from_frequency_str\n", "\n", "time_features = time_features_from_frequency_str(freq)\n", "print(time_features)" ] }, { "cell_type": "markdown", "id": "m0_f7lm9CbNG", "metadata": { "id": "m0_f7lm9CbNG" }, "source": [ "In this case, there's only a single feature, namely \"month of year\". This means that for each time step, we'll add the month as a scalar value (e.g. `1` in case the timestamp is \"january\", `2` in case the timestamp is \"february\", etc.).\n", "\n", "We now have everything to define the model:" ] }, { "cell_type": "code", "execution_count": null, "id": "3dda0e78", "metadata": { "id": "3dda0e78" }, "outputs": [], "source": [ "from transformers import TimeSeriesTransformerConfig, TimeSeriesTransformerForPrediction\n", "\n", "config = TimeSeriesTransformerConfig(\n", " prediction_length=prediction_length,\n", " # context length:\n", " context_length=prediction_length * 2,\n", " # lags coming from helper given the freq:\n", " lags_sequence=lags_sequence,\n", " # we'll add 2 time features (\"month of year\" and \"age\", see further):\n", " num_time_features=len(time_features) + 1,\n", " # we have a single static categorical feature, namely time series ID:\n", " num_static_categorical_features=1,\n", " # it has 366 possible values:\n", " cardinality=[len(train_dataset)],\n", " # the model will learn an embedding of size 2 for each of the 366 possible values:\n", " embedding_dimension=[2],\n", " \n", " # transformer params:\n", " encoder_layers=4,\n", " decoder_layers=4,\n", " d_model=32,\n", ")\n", "\n", "model = TimeSeriesTransformerForPrediction(config)" ] }, { "cell_type": "markdown", "id": "T6rCeV4dsUnF", "metadata": { "id": "T6rCeV4dsUnF" }, "source": [ "Note that, similar to other models in the 🤗 Transformers library, [`TimeSeriesTransformerModel`](https://huggingface.co/docs/transformers/model_doc/time_series_transformer#transformers.TimeSeriesTransformerModel) corresponds to the encoder-decoder Transformer without any head on top, and [`TimeSeriesTransformerForPrediction`](https://huggingface.co/docs/transformers/model_doc/time_series_transformer#transformers.TimeSeriesTransformerForPrediction) corresponds to `TimeSeriesTransformerModel` with a **distribution head** on top. By default, the model uses a Student-t distribution (but this is configurable):" ] }, { "cell_type": "code", "execution_count": 16, "id": "EaoKZyujsuIA", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "id": "EaoKZyujsuIA", "outputId": "e711cbea-c734-463f-f28c-4009e5317a4e" }, "outputs": [ { "data": { "text/plain": [ "'student_t'" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.config.distribution_output" ] }, { "cell_type": "markdown", "id": "feQYVhgus-yl", "metadata": { "id": "feQYVhgus-yl" }, "source": [ "This is an important difference with Transformers for NLP, where the head typically consists of a fixed categorical distribution implemented as an `nn.Linear` layer." ] }, { "cell_type": "markdown", "id": "af82c60d", "metadata": { "id": "af82c60d" }, "source": [ "## Define Transformations\n", "\n", "Next, we define the transformations for the data, in particular for the creation of the time features (based on the dataset or universal ones).\n", "\n", "Again, we'll use the GluonTS library for this. We define a `Chain` of transformations (which is a bit comparable to `torchvision.transforms.Compose` for images). It allows us to combine several transformations into a single pipeline." ] }, { "cell_type": "code", "execution_count": 17, "id": "tR87yKPSn8SZ", "metadata": { "id": "tR87yKPSn8SZ" }, "outputs": [], "source": [ "from gluonts.time_feature import (\n", " time_features_from_frequency_str,\n", " TimeFeature,\n", " get_lags_for_frequency,\n", ")\n", "from gluonts.dataset.field_names import FieldName\n", "from gluonts.transform import (\n", " AddAgeFeature,\n", " AddObservedValuesIndicator,\n", " AddTimeFeatures,\n", " AsNumpyArray,\n", " Chain,\n", " ExpectedNumInstanceSampler,\n", " InstanceSplitter,\n", " RemoveFields,\n", " SelectFields,\n", " SetField,\n", " TestSplitSampler,\n", " Transformation,\n", " ValidationSplitSampler,\n", " VstackFeatures,\n", " RenameFields,\n", ")" ] }, { "cell_type": "markdown", "id": "4Qql4CInFWO7", "metadata": { "id": "4Qql4CInFWO7" }, "source": [ "The transformations below are annotated with comments, to explain what they do. At a high level, we will iterate over the individual time series of our dataset and add/remove fields or features:" ] }, { "cell_type": "code", "execution_count": 18, "id": "20fe036e", "metadata": { "id": "20fe036e" }, "outputs": [], "source": [ "from transformers import PretrainedConfig\n", "\n", "\n", "def create_transformation(freq: str, config: PretrainedConfig) -> Transformation:\n", " remove_field_names = []\n", " if config.num_static_real_features == 0:\n", " remove_field_names.append(FieldName.FEAT_STATIC_REAL)\n", " if config.num_dynamic_real_features == 0:\n", " remove_field_names.append(FieldName.FEAT_DYNAMIC_REAL)\n", " if config.num_static_categorical_features == 0:\n", " remove_field_names.append(FieldName.FEAT_STATIC_CAT)\n", "\n", " # a bit like torchvision.transforms.Compose\n", " return Chain(\n", " # step 1: remove static/dynamic fields if not specified\n", " [RemoveFields(field_names=remove_field_names)]\n", " # step 2: convert the data to NumPy (potentially not needed)\n", " + (\n", " [\n", " AsNumpyArray(\n", " field=FieldName.FEAT_STATIC_CAT,\n", " expected_ndim=1,\n", " dtype=int,\n", " )\n", " ]\n", " if config.num_static_categorical_features > 0\n", " else []\n", " )\n", " + (\n", " [\n", " AsNumpyArray(\n", " field=FieldName.FEAT_STATIC_REAL,\n", " expected_ndim=1,\n", " )\n", " ]\n", " if config.num_static_real_features > 0\n", " else []\n", " )\n", " + [\n", " AsNumpyArray(\n", " field=FieldName.TARGET,\n", " # we expect an extra dim for the multivariate case:\n", " expected_ndim=1 if config.input_size == 1 else 2,\n", " ),\n", " # step 3: handle the NaN's by filling in the target with zero\n", " # and return the mask (which is in the observed values)\n", " # true for observed values, false for nan's\n", " # the decoder uses this mask (no loss is incurred for unobserved values)\n", " # see loss_weights inside the xxxForPrediction model\n", " AddObservedValuesIndicator(\n", " target_field=FieldName.TARGET,\n", " output_field=FieldName.OBSERVED_VALUES,\n", " ),\n", " # step 4: add temporal features based on freq of the dataset\n", " # month of year in the case when freq=\"M\"\n", " # these serve as positional encodings\n", " AddTimeFeatures(\n", " start_field=FieldName.START,\n", " target_field=FieldName.TARGET,\n", " output_field=FieldName.FEAT_TIME,\n", " time_features=time_features_from_frequency_str(freq),\n", " pred_length=config.prediction_length,\n", " ),\n", " # step 5: add another temporal feature (just a single number)\n", " # tells the model where in the life the value of the time series is\n", " # sort of running counter\n", " AddAgeFeature(\n", " target_field=FieldName.TARGET,\n", " output_field=FieldName.FEAT_AGE,\n", " pred_length=config.prediction_length,\n", " log_scale=True,\n", " ),\n", " # step 6: vertically stack all the temporal features into the key FEAT_TIME\n", " VstackFeatures(\n", " output_field=FieldName.FEAT_TIME,\n", " input_fields=[FieldName.FEAT_TIME, FieldName.FEAT_AGE]\n", " + (\n", " [FieldName.FEAT_DYNAMIC_REAL]\n", " if config.num_dynamic_real_features > 0\n", " else []\n", " ),\n", " ),\n", " # step 7: rename to match HuggingFace names\n", " RenameFields(\n", " mapping={\n", " FieldName.FEAT_STATIC_CAT: \"static_categorical_features\",\n", " FieldName.FEAT_STATIC_REAL: \"static_real_features\",\n", " FieldName.FEAT_TIME: \"time_features\",\n", " FieldName.TARGET: \"values\",\n", " FieldName.OBSERVED_VALUES: \"observed_mask\",\n", " }\n", " ),\n", " ]\n", " )" ] }, { "cell_type": "markdown", "id": "8bab46d0", "metadata": { "id": "8bab46d0" }, "source": [ "## Define `InstanceSplitter`\n", "\n", "For training/validation/testing we next create an `InstanceSplitter` which is used to sample windows from the dataset (as, remember, we can't pass the entire history of values to the Transformer due to time- and memory constraints).\n", "\n", "The instance splitter samples random `context_length` sized and subsequent `prediction_length` sized windows from the data, and appends a `past_` or `future_` key to any temporal keys for the respective windows. This makes sure that the `values` will be split into `past_values` and subsequent `future_values` keys, which will serve as the encoder and decoder inputs respectively. The same happens for any keys in the `time_series_fields` argument:" ] }, { "cell_type": "code", "execution_count": 19, "id": "cae7600d", "metadata": { "id": "cae7600d" }, "outputs": [], "source": [ "from gluonts.transform.sampler import InstanceSampler\n", "from typing import Optional\n", "\n", "\n", "def create_instance_splitter(\n", " config: PretrainedConfig,\n", " mode: str,\n", " train_sampler: Optional[InstanceSampler] = None,\n", " validation_sampler: Optional[InstanceSampler] = None,\n", ") -> Transformation:\n", " assert mode in [\"train\", \"validation\", \"test\"]\n", "\n", " instance_sampler = {\n", " \"train\": train_sampler\n", " or ExpectedNumInstanceSampler(\n", " num_instances=1.0, min_future=config.prediction_length\n", " ),\n", " \"validation\": validation_sampler\n", " or ValidationSplitSampler(min_future=config.prediction_length),\n", " \"test\": TestSplitSampler(),\n", " }[mode]\n", "\n", " return InstanceSplitter(\n", " target_field=\"values\",\n", " is_pad_field=FieldName.IS_PAD,\n", " start_field=FieldName.START,\n", " forecast_start_field=FieldName.FORECAST_START,\n", " instance_sampler=instance_sampler,\n", " past_length=config.context_length + max(config.lags_sequence),\n", " future_length=config.prediction_length,\n", " time_series_fields=[\"time_features\", \"observed_mask\"],\n", " )" ] }, { "cell_type": "markdown", "id": "958e050d", "metadata": { "id": "958e050d" }, "source": [ "## Create PyTorch DataLoaders\n", "\n", "Next, it's time to create PyTorch DataLoaders, which allow us to have batches of (input, output pairs) - or in other words (`past_values`, `future_values`)." ] }, { "cell_type": "code", "execution_count": 20, "id": "6995101c", "metadata": { "id": "6995101c" }, "outputs": [], "source": [ "from gluonts.itertools import Cyclic, IterableSlice, PseudoShuffled\n", "from gluonts.torch.util import IterableDataset\n", "from torch.utils.data import DataLoader\n", "\n", "from typing import Iterable\n", "\n", "\n", "def create_train_dataloader(\n", " config: PretrainedConfig,\n", " freq,\n", " data,\n", " batch_size: int,\n", " num_batches_per_epoch: int,\n", " shuffle_buffer_length: Optional[int] = None,\n", " **kwargs,\n", ") -> Iterable:\n", " PREDICTION_INPUT_NAMES = [\n", " \"past_time_features\",\n", " \"past_values\",\n", " \"past_observed_mask\",\n", " \"future_time_features\",\n", " ]\n", " if config.num_static_categorical_features > 0:\n", " PREDICTION_INPUT_NAMES.append(\"static_categorical_features\")\n", "\n", " if config.num_static_real_features > 0:\n", " PREDICTION_INPUT_NAMES.append(\"static_real_features\")\n", "\n", " TRAINING_INPUT_NAMES = PREDICTION_INPUT_NAMES + [\n", " \"future_values\",\n", " \"future_observed_mask\",\n", " ]\n", "\n", " transformation = create_transformation(freq, config)\n", " transformed_data = transformation.apply(data, is_train=True)\n", "\n", " # we initialize a Training instance\n", " instance_splitter = create_instance_splitter(config, \"train\") + SelectFields(\n", " TRAINING_INPUT_NAMES\n", " )\n", "\n", " # the instance splitter will sample a window of\n", " # context length + lags + prediction length (from the 366 possible transformed time series)\n", " # randomly from within the target time series and return an iterator.\n", " training_instances = instance_splitter.apply(\n", " Cyclic(transformed_data)\n", " if shuffle_buffer_length is None\n", " else PseudoShuffled(\n", " Cyclic(transformed_data),\n", " shuffle_buffer_length=shuffle_buffer_length,\n", " )\n", " )\n", "\n", " # from the training instances iterator we now return a Dataloader which will\n", " # continue to sample random windows for as long as it is called\n", " # to return batch_size of the appropriate tensors ready for training!\n", " return IterableSlice(\n", " iter(\n", " DataLoader(\n", " IterableDataset(training_instances),\n", " batch_size=batch_size,\n", " **kwargs,\n", " )\n", " ),\n", " num_batches_per_epoch,\n", " )" ] }, { "cell_type": "code", "execution_count": 21, "id": "10c55455", "metadata": { "id": "10c55455" }, "outputs": [], "source": [ "def create_test_dataloader(\n", " config: PretrainedConfig,\n", " freq,\n", " data,\n", " batch_size: int,\n", " **kwargs,\n", "):\n", " PREDICTION_INPUT_NAMES = [\n", " \"past_time_features\",\n", " \"past_values\",\n", " \"past_observed_mask\",\n", " \"future_time_features\",\n", " ]\n", " if config.num_static_categorical_features > 0:\n", " PREDICTION_INPUT_NAMES.append(\"static_categorical_features\")\n", "\n", " if config.num_static_real_features > 0:\n", " PREDICTION_INPUT_NAMES.append(\"static_real_features\")\n", "\n", " transformation = create_transformation(freq, config)\n", " transformed_data = transformation.apply(data, is_train=False)\n", "\n", " # we create a Test Instance splitter which will sample the very last\n", " # context window seen during training only for the encoder.\n", " instance_sampler = create_instance_splitter(config, \"test\") + SelectFields(\n", " PREDICTION_INPUT_NAMES\n", " )\n", "\n", " # we apply the transformations in test mode\n", " testing_instances = instance_sampler.apply(transformed_data, is_train=False)\n", "\n", " # This returns a Dataloader which will go over the dataset once.\n", " return DataLoader(\n", " IterableDataset(testing_instances), batch_size=batch_size, **kwargs\n", " )" ] }, { "cell_type": "code", "execution_count": 22, "id": "20e2338b", "metadata": { "id": "20e2338b" }, "outputs": [], "source": [ "train_dataloader = create_train_dataloader(\n", " config=config,\n", " freq=freq,\n", " data=train_dataset,\n", " batch_size=256,\n", " num_batches_per_epoch=100,\n", ")\n", "\n", "test_dataloader = create_test_dataloader(\n", " config=config,\n", " freq=freq,\n", " data=test_dataset,\n", " batch_size=64,\n", ")" ] }, { "cell_type": "markdown", "id": "ES2U8g-2G2Jd", "metadata": { "id": "ES2U8g-2G2Jd" }, "source": [ "Let's check the first batch:" ] }, { "cell_type": "code", "execution_count": 23, "id": "YU2h9OOB5IsX", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "YU2h9OOB5IsX", "outputId": "ba8073bb-f450-4cd1-faee-3fb129f35c7e" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "past_time_features torch.Size([256, 85, 2]) torch.FloatTensor\n", "past_values torch.Size([256, 85]) torch.FloatTensor\n", "past_observed_mask torch.Size([256, 85]) torch.FloatTensor\n", "future_time_features torch.Size([256, 24, 2]) torch.FloatTensor\n", "static_categorical_features torch.Size([256, 1]) torch.LongTensor\n", "future_values torch.Size([256, 24]) torch.FloatTensor\n", "future_observed_mask torch.Size([256, 24]) torch.FloatTensor\n" ] } ], "source": [ "batch = next(iter(train_dataloader))\n", "for k, v in batch.items():\n", " print(k, v.shape, v.type())" ] }, { "cell_type": "markdown", "id": "HvvPlSF8HBYd", "metadata": { "id": "HvvPlSF8HBYd" }, "source": [ "As can be seen, we don't feed `input_ids` and `attention_mask` to the encoder (as would be the case for NLP models), but rather `past_values`, along with `past_observed_mask`, `past_time_features`, and `static_categorical_features`.\n", "\n", "The decoder inputs consist of `future_values`, `future_observed_mask` and `future_time_features`. The `future_values` can be seen as the equivalent of `decoder_input_ids` in NLP.\n", "\n", "We refer to the [docs](https://huggingface.co/docs/transformers/model_doc/time_series_transformer#transformers.TimeSeriesTransformerForPrediction.forward.past_values) for a detailed explanation for each of them." ] }, { "cell_type": "markdown", "id": "_cev4ufVv1yf", "metadata": { "id": "_cev4ufVv1yf" }, "source": [ "## Forward pass\n", "\n", "Let's perform a single forward pass with the batch we just created:" ] }, { "cell_type": "code", "execution_count": 24, "id": "sD8fav6qTApR", "metadata": { "id": "sD8fav6qTApR" }, "outputs": [], "source": [ "# perform forward pass\n", "outputs = model(\n", " past_values=batch[\"past_values\"],\n", " past_time_features=batch[\"past_time_features\"],\n", " past_observed_mask=batch[\"past_observed_mask\"],\n", " static_categorical_features=batch[\"static_categorical_features\"]\n", " if config.num_static_categorical_features > 0\n", " else None,\n", " static_real_features=batch[\"static_real_features\"]\n", " if config.num_static_real_features > 0\n", " else None,\n", " future_values=batch[\"future_values\"],\n", " future_time_features=batch[\"future_time_features\"],\n", " future_observed_mask=batch[\"future_observed_mask\"],\n", " output_hidden_states=True,\n", ")" ] }, { "cell_type": "code", "execution_count": 25, "id": "j2KnnHTCX4RC", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "j2KnnHTCX4RC", "outputId": "7b11e3b4-c4e1-48fd-c93e-69a21f28e072" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Loss: 9.069628715515137\n" ] } ], "source": [ "print(\"Loss:\", outputs.loss.item())" ] }, { "cell_type": "markdown", "id": "V9K8s2j9y8x7", "metadata": { "id": "V9K8s2j9y8x7" }, "source": [ "Note that the model is returning a loss. This is possible as the decoder automatically shifts the `future_values` one position to the right in order to have the labels. This allows computing a loss between the predicted values and the labels.\n", "\n", "Also note that the decoder uses a causal mask to not look into the future as the values it needs to predict are in the `future_values` tensor." ] }, { "cell_type": "markdown", "id": "SxHDCa7vwPBF", "metadata": { "id": "SxHDCa7vwPBF" }, "source": [ "## Train the Model\n", "\n", "It's time to train the model! We'll use a standard PyTorch training loop.\n", "\n", "We will use the 🤗 [Accelerate](https://huggingface.co/docs/accelerate/index) library here, which automatically places the model, optimizer and dataloader on the appropriate `device`." ] }, { "cell_type": "code", "execution_count": 26, "id": "gMLYvQaNHuXQ", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "gMLYvQaNHuXQ", "outputId": "ee7ecc34-8c6f-4fc9-9dc6-aeb327822373", "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9.312426567077637\n", "7.79284143447876\n", "7.852108001708984\n", "7.6523308753967285\n", "7.4140448570251465\n", "7.391452789306641\n", "7.355312824249268\n", "7.018772125244141\n", "6.6947102546691895\n", "6.884510040283203\n", "6.586727142333984\n", "6.800746917724609\n", "6.795780181884766\n", "7.579933166503906\n", "7.15477180480957\n", "6.703517436981201\n", "7.250757694244385\n", "7.39132833480835\n", "7.598387241363525\n", "7.2024149894714355\n", "7.323209285736084\n", "6.823130130767822\n", "6.757688045501709\n", "7.494504451751709\n", "7.513833522796631\n", "7.290976047515869\n", "6.932094097137451\n", "7.130832672119141\n", "7.020802974700928\n", "6.652693271636963\n", "6.758007049560547\n", "7.680879592895508\n", "7.614417552947998\n", "6.844751834869385\n", "6.809683322906494\n", "6.6291022300720215\n", "7.306612491607666\n", "6.697507381439209\n", "7.026710510253906\n", "6.921131134033203\n" ] } ], "source": [ "from accelerate import Accelerator\n", "from torch.optim import AdamW\n", "\n", "accelerator = Accelerator()\n", "device = accelerator.device\n", "\n", "model.to(device)\n", "optimizer = AdamW(model.parameters(), lr=6e-4, betas=(0.9, 0.95), weight_decay=1e-1)\n", "\n", "model, optimizer, train_dataloader = accelerator.prepare(\n", " model,\n", " optimizer,\n", " train_dataloader,\n", ")\n", "\n", "model.train()\n", "for epoch in range(40):\n", " for idx, batch in enumerate(train_dataloader):\n", " optimizer.zero_grad()\n", " outputs = model(\n", " static_categorical_features=batch[\"static_categorical_features\"].to(device)\n", " if config.num_static_categorical_features > 0\n", " else None,\n", " static_real_features=batch[\"static_real_features\"].to(device)\n", " if config.num_static_real_features > 0\n", " else None,\n", " past_time_features=batch[\"past_time_features\"].to(device),\n", " past_values=batch[\"past_values\"].to(device),\n", " future_time_features=batch[\"future_time_features\"].to(device),\n", " future_values=batch[\"future_values\"].to(device),\n", " past_observed_mask=batch[\"past_observed_mask\"].to(device),\n", " future_observed_mask=batch[\"future_observed_mask\"].to(device),\n", " )\n", " loss = outputs.loss\n", "\n", " # Backpropagation\n", " accelerator.backward(loss)\n", " optimizer.step()\n", "\n", " if idx % 100 == 0:\n", " print(loss.item())" ] }, { "cell_type": "markdown", "id": "Q1U6YhaFXlSp", "metadata": { "id": "Q1U6YhaFXlSp" }, "source": [ "## Inference\n", "\n", "At inference time, it's recommended to use the `generate()` method for autoregressive generation, similar to NLP models.\n", "\n", "Forecasting involves getting data from the test instance sampler, which will sample the very last `context_length` sized window of values from each time series in the dataset, and pass it to the model. Note that we pass `future_time_features`, which are known ahead of time, to the decoder.\n", "\n", "The model will autoregressively sample a certain number of values from the predicted distribution and pass them back to the decoder to return the prediction outputs:" ] }, { "cell_type": "code", "execution_count": 27, "id": "7c7482c1", "metadata": { "id": "7c7482c1" }, "outputs": [], "source": [ "model.eval()\n", "\n", "forecasts = []\n", "\n", "for batch in test_dataloader:\n", " outputs = model.generate(\n", " static_categorical_features=batch[\"static_categorical_features\"].to(device)\n", " if config.num_static_categorical_features > 0\n", " else None,\n", " static_real_features=batch[\"static_real_features\"].to(device)\n", " if config.num_static_real_features > 0\n", " else None,\n", " past_time_features=batch[\"past_time_features\"].to(device),\n", " past_values=batch[\"past_values\"].to(device),\n", " future_time_features=batch[\"future_time_features\"].to(device),\n", " past_observed_mask=batch[\"past_observed_mask\"].to(device),\n", " )\n", " forecasts.append(outputs.sequences.cpu().numpy())" ] }, { "cell_type": "markdown", "id": "kPLiRcOeZR67", "metadata": { "id": "kPLiRcOeZR67" }, "source": [ "The model outputs a tensor of shape (`batch_size`, `number of samples`, `prediction length`). \n", "\n", "In this case, we get `100` possible values for the next `24` months (for each example in the batch which is of size `64`):" ] }, { "cell_type": "code", "execution_count": 28, "id": "DwAfSZitZNAQ", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "DwAfSZitZNAQ", "outputId": "8ca71318-2361-4c9c-ae93-88ba9a453fef" }, "outputs": [ { "data": { "text/plain": [ "(64, 100, 24)" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "forecasts[0].shape" ] }, { "cell_type": "markdown", "id": "fCTBw_t91xwH", "metadata": { "id": "fCTBw_t91xwH" }, "source": [ "We'll stack them vertically, to get forecasts for all time-series in the test dataset:" ] }, { "cell_type": "code", "execution_count": 29, "id": "du1GyJVXlpHp", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "du1GyJVXlpHp", "outputId": "cfd3e777-da77-4ca6-eedd-e0d0f22da872" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(366, 100, 24)\n" ] } ], "source": [ "forecasts = np.vstack(forecasts)\n", "print(forecasts.shape)" ] }, { "cell_type": "markdown", "id": "wlvFCdgiA9oy", "metadata": { "id": "wlvFCdgiA9oy" }, "source": [ "We can evaluate the resulting forecast with respect to the ground truth out of sample values present in the test set. For that, we'll use the 🤗 [Evaluate](https://huggingface.co/docs/evaluate/index) library, which includes the [MASE](https://huggingface.co/spaces/evaluate-metric/mase) and [sMAPE](https://huggingface.co/spaces/evaluate-metric/smape) metrics.\n", "\n", "We calculate both metrics for each time series in the dataset:" ] }, { "cell_type": "code", "execution_count": 30, "id": "0yb9RnczYE4z", "metadata": { "id": "0yb9RnczYE4z" }, "outputs": [], "source": [ "from evaluate import load\n", "from gluonts.time_feature import get_seasonality\n", "\n", "mase_metric = load(\"evaluate-metric/mase\")\n", "smape_metric = load(\"evaluate-metric/smape\")\n", "\n", "forecast_median = np.median(forecasts, 1)\n", "\n", "mase_metrics = []\n", "smape_metrics = []\n", "for item_id, ts in enumerate(test_dataset):\n", " training_data = ts[\"target\"][:-prediction_length]\n", " ground_truth = ts[\"target\"][-prediction_length:]\n", " mase = mase_metric.compute(\n", " predictions=forecast_median[item_id],\n", " references=np.array(ground_truth),\n", " training=np.array(training_data),\n", " periodicity=get_seasonality(freq),\n", " )\n", " mase_metrics.append(mase[\"mase\"])\n", "\n", " smape = smape_metric.compute(\n", " predictions=forecast_median[item_id],\n", " references=np.array(ground_truth),\n", " )\n", " smape_metrics.append(smape[\"smape\"])" ] }, { "cell_type": "code", "execution_count": 31, "id": "fuuFbNYdZlIR", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "fuuFbNYdZlIR", "outputId": "9a010645-30fc-4af8-bc53-636391ba0ec6" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MASE: 1.2564196892177717\n" ] } ], "source": [ "print(f\"MASE: {np.mean(mase_metrics)}\")" ] }, { "cell_type": "code", "execution_count": 32, "id": "w6ETpUrML2wE", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "w6ETpUrML2wE", "outputId": "77127e13-36b1-4cd2-9f90-63f3f23c6db0" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sMAPE: 0.1609541520852549\n" ] } ], "source": [ "print(f\"sMAPE: {np.mean(smape_metrics)}\")" ] }, { "cell_type": "markdown", "id": "S91QglbEL7Qm", "metadata": { "id": "S91QglbEL7Qm" }, "source": [ "We can also plot the individual metrics of each time series in the dataset and observe that a handful of time series contribute a lot to the final test metric:" ] }, { "cell_type": "code", "execution_count": 33, "id": "cb342aac", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 279 }, "id": "cb342aac", "outputId": "445d7c09-a428-4618-d13a-bca903bbc465" }, "outputs": [ { "data": { "image/png": "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Xp9v9erV7N27l1xu9nTu6SPie/fulSPiLSDf/9aR733ryPe+deR731on8v1XSlGtVlm9evVxn9vyPjfLxULOz4vFJ9//1pHvfevI97515HvfWkv9/W95h2IhhBBCiMUk4UYIIYQQbUXCzRTHcbj99tulJ06LyPe/deR73zryvW8d+d631lJ//6XmRgghhBBtRVZuhBBCCNFWJNwIIYQQoq1IuBFCCCFEW5FwI4QQQoi2IuFmyt13382GDRtIpVJs2bKFxx57rNWX1PbuuOMOLrvsMnK5HH19fVx//fXs2LGj1Ze1In384x9H07RZM9vE0tq/fz9ve9vb6O7uJp1Oc/755/ODH/yg1ZfV9qIo4iMf+QgbN24knU6zadMm/uzP/mx+84rEgnzrW9/iuuuuY/Xq1Wiaxle+8pVZ71dKcdttt7Fq1SrS6TRXX301zz///KJ8bgk3wAMPPMDWrVu5/fbbefLJJ7nwwgu55pprGBkZafWltbVvfvOb3HTTTXzve9/joYceIggC3vzmN1Ov11t9aSvK448/zn//7/+dCy64oNWXsmJMTk5y5ZVXYlkW//f//l9+8pOf8KlPfYrOzs5WX1rb+8QnPsFnPvMZ7rrrLp599lk+8YlP8Bd/8Rf8zd/8Tasvre3U63UuvPBC7r777jnf/xd/8Rd8+tOf5p577uH73/8+2WyWa665Btd1T/6TL3DOZVu6/PLL1U033TTz5yiK1OrVq9Udd9zRwqtaeUZGRhSgvvnNb7b6UlaMarWqzjrrLPXQQw+pN77xjep973tfqy9pRfjjP/5j9frXv77Vl7EiXXvtterd7373rMd+6Zd+Sb31rW9t0RWtDID68pe/PPPnOI7VwMCA+uQnPznzWKlUUo7jqL//+78/6c+34ldufN/niSee4Oqrr555TNd1rr76ah599NEWXtnKUy6XAejq6mrxlawcN910E9dee+2sn3+x9P7lX/6FSy+9lF/91V+lr6+Piy++mM997nOtvqwV4XWvex3btm1j586dAPzoRz/i29/+Nj//8z/f4itbWV5++WWGhoZm/dtTKBTYsmXLotx7Wz4VvNXGxsaIomhmCvm0/v5+nnvuuRZd1coTxzHvf//7ufLKK+c94V2cnC996Us8+eSTPP74462+lBXnpZde4jOf+Qxbt27lgx/8II8//ji/93u/h23bvOMd72j15bW1W265hUqlwubNmzEMgyiK+OhHP8pb3/rWVl/aijI0NAQw5713+n0nY8WHG7E83HTTTWzfvp1vf/vbrb6UFWHv3r28733v46GHHiKVSrX6clacOI659NJL+djHPgbAxRdfzPbt27nnnnsk3Cyxf/iHf+Dv/u7v+OIXv8i5557LU089xfvf/35Wr14t3/s2suK3pXp6ejAMg+Hh4VmPDw8PMzAw0KKrWlluvvlmvvrVr/Lwww+zdu3aVl/OivDEE08wMjLCa17zGkzTxDRNvvnNb/LpT38a0zSJoqjVl9jWVq1axatf/epZj73qVa9iz549LbqileMP//APueWWW/i1X/s1zj//fN7+9rfzgQ98gDvuuKPVl7aiTN9fl+reu+LDjW3bXHLJJWzbtm3msTiO2bZtG1dccUULr6z9KaW4+eab+fKXv8y///u/s3HjxlZf0orxMz/zMzz99NM89dRTM2+XXnopb33rW3nqqacwDKPVl9jWrrzyyqPaHuzcuZP169e36IpWjkajga7PvvUZhkEcxy26opVp48aNDAwMzLr3VioVvv/97y/KvVe2pYCtW7fyjne8g0svvZTLL7+cO++8k3q9zrve9a5WX1pbu+mmm/jiF7/I//k//4dcLjezz1ooFEin0y2+uvaWy+WOqm3KZrN0d3dLzdMp8IEPfIDXve51fOxjH+O//Jf/wmOPPcZnP/tZPvvZz7b60treddddx0c/+lHWrVvHueeeyw9/+EP+6q/+ine/+92tvrS2U6vVeOGFF2b+/PLLL/PUU0/R1dXFunXreP/738+f//mfc9ZZZ7Fx40Y+8pGPsHr1aq6//vqT/+Qnfd6qTfzN3/yNWrdunbJtW11++eXqe9/7Xqsvqe0Bc759/vOfb/WlrUhyFPzU+td//Vd13nnnKcdx1ObNm9VnP/vZVl/SilCpVNT73vc+tW7dOpVKpdQZZ5yhPvShDynP81p9aW3n4YcfnvPf+He84x1KqeQ4+Ec+8hHV39+vHMdRP/MzP6N27NixKJ9bU0raMgohhBCifaz4mhshhBBCtBcJN0IIIYRoKxJuhBBCCNFWJNwIIYQQoq1IuBFCCCFEW5FwI4QQQoi2IuFGCCGEEG1Fwo0QQggh2oqEGyGEEEK0FQk3Qohl4Z3vfCeapvGe97znqPfddNNNaJrGO9/5zlmPP/rooxiGwbXXXjvnx/zyl7/Ma1/7WgqFArlcjnPPPZf3v//9M++///770TTtqLdUKrWYX5oQ4hSTcCOEWDYGBwf50pe+RLPZnHnMdV2++MUvsm7duqOef++99/Le976Xb33rWxw4cGDW+7Zt28YNN9zAL//yL/PYY4/xxBNP8NGPfpQgCGY9L5/Pc/DgwVlvu3fvXpovUAhxSshUcCHEsvGa17yGF198kX/+53/mrW99KwD//M//zLp169i4ceOs59ZqNR544AF+8IMfMDQ0xP33388HP/jBmff/67/+K1deeSV/+Id/OPPY2WeffdTEYU3TGBgYWLovSghxysnKjRBiWXn3u9/N5z//+Zk/33fffbzrXe866nn/8A//wObNmznnnHN429vexn333cfhc4AHBgZ45pln2L59+ym5biHE8iHhRgixrLztbW/j29/+Nrt372b37t185zvf4W1ve9tRz7v33ntnHv+5n/s5yuUy3/zmN2fe/973vpfLLruM888/nw0bNvBrv/Zr3HfffXieN+vjlMtlOjo6Zr39/M///NJ+kUKIJSXbUkKIZaW3t5drr72W+++/H6UU1157LT09PbOes2PHDh577DG+/OUvA2CaJjfccAP33nsvV111FQDZbJYHH3yQF198kYcffpjvfe97/P7v/z5//dd/zaOPPkomkwEgl8vx5JNPzvr46XR66b9QIcSSkXAjhFh23v3ud3PzzTcDcPfddx/1/nvvvZcwDFm9evXMY0opHMfhrrvuolAozDy+adMmNm3axG/+5m/yoQ99iLPPPpsHHnhgZqtL13XOPPPMJf6KhBCnkmxLCSGWnZ/7uZ/D932CIOCaa66Z9b4wDPnCF77Apz71KZ566qmZtx/96EesXr2av//7vz/mx92wYQOZTIZ6vb7UX4IQooVk5UYIsewYhsGzzz478/8f7qtf/SqTk5P8xm/8xqwVGoBf/uVf5t577+U973kPf/Inf0Kj0eAtb3kL69evp1Qq8elPf5ogCPjZn/3ZmdcopRgaGjrqGvr6+tB1+f1PiNOR/M0VQixL+XyefD5/1OP33nsvV1999VHBBpJw84Mf/IAf//jHvPGNb+Sll17ixhtvZPPmzfz8z/88Q0ND/Nu//RvnnHPOzGsqlQqrVq066m1kZGRJvz4hxNLR1OFnJ4UQQgghTnOyciOEEEKItiLhRgghhBBtRcKNEEIIIdqKhBshhBBCtBUJN0IIIYRoKxJuhBBCCNFWJNwIIYQQoq1IuBFCCCFEW5FwI4QQQoi2IuFGCCGEEG1Fwo0QQggh2sr/D4IUt4/kbl4KAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(mase_metrics, smape_metrics, alpha=0.3)\n", "plt.xlabel(\"MASE\")\n", "plt.ylabel(\"sMAPE\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "moksM2QmMACr", "metadata": { "id": "moksM2QmMACr" }, "source": [ "To plot the prediction for any time series with respect the ground truth test data we define the following helper:" ] }, { "cell_type": "code", "execution_count": 34, "id": "3ae05011", "metadata": { "id": "3ae05011" }, "outputs": [], "source": [ "import matplotlib.dates as mdates\n", "\n", "\n", "def plot(ts_index):\n", " fig, ax = plt.subplots()\n", "\n", " index = pd.period_range(\n", " start=test_dataset[ts_index][FieldName.START],\n", " periods=len(test_dataset[ts_index][FieldName.TARGET]),\n", " freq=freq,\n", " ).to_timestamp()\n", "\n", " # Major ticks every half year, minor ticks every month,\n", " ax.xaxis.set_major_locator(mdates.MonthLocator(bymonth=(1, 7)))\n", " ax.xaxis.set_minor_locator(mdates.MonthLocator())\n", "\n", " ax.plot(\n", " index[-2 * prediction_length :],\n", " test_dataset[ts_index][\"target\"][-2 * prediction_length :],\n", " label=\"actual\",\n", " )\n", "\n", " plt.plot(\n", " index[-prediction_length:],\n", " np.median(forecasts[ts_index], axis=0),\n", " label=\"median\",\n", " )\n", "\n", " plt.fill_between(\n", " index[-prediction_length:],\n", " forecasts[ts_index].mean(0) - forecasts[ts_index].std(axis=0),\n", " forecasts[ts_index].mean(0) + forecasts[ts_index].std(axis=0),\n", " alpha=0.3,\n", " interpolate=True,\n", " label=\"+/- 1-std\",\n", " )\n", " plt.legend()\n", " plt.show()" ] }, { "cell_type": "markdown", "id": "mwtksAcxMHoK", "metadata": { "id": "mwtksAcxMHoK" }, "source": [ "For example:" ] }, { "cell_type": "code", "execution_count": 35, "id": "5N8fdnm_MKQP", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, "id": "5N8fdnm_MKQP", "outputId": "3b221c31-ee20-4626-9592-2492ce143b4a" }, "outputs": [ { "data": { "image/png": "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du/eDQBwuVwAgGuuuQbHjx/HmjVrIMsyvve976GjoyOn50kChiAIwkQiEy9BFJr33nsPAHDGGWfk/Ge1trbilltuwcyZMwEA06ZNM+6rrKyEIAhobGw0btuzZw9eeeUVfPDBBzj99NMBAI899hhmzZqV0/OkFBJBEIQJKqMevRTTlbz77rvhcrmMr3feeQc33HBDzG2tra3G8c8//zwuueQSiKKI1tbWmOPuvvvujM/D/Dw33HADAODmm2/G9ddfj8WLF+Pee+/F/v37h3yOTz75BBaLBQsXLjRumzlzZs7NvhSBIQiCMBGfQgqTibd0YcVr4r3hhhvw5S9/2fj+iiuuwLJly3D55Zcbt40dO9b499///nfce++9xu1btmwx7qupqcn4PMzPU1FRAQC488478a//+q946aWX8Morr+Df//3f8fTTT+MLX/hCxj8nF5CAIQiCMBEfgYn/nigdivnK1dTUxAgPh8OB+vr6hBVGe/fuxeHDh/HZz34WAGCxWNKuREpGsueZPn06pk+fjpUrV+JrX/saHn/8cXzhC1+A1WqFoigxx86cORORSASbNm0yUki7d+9GX19fVs4xGZRCIgiCMDF4lABFYEYNxRSCSYPnn38eixcvhtPpTPux+/btw5YtW9DW1ga/348tW7Zgy5YtCIVCCY/3+/246aabsHbtWhw+fBjvvvsuNm7caPhZJk+eDI/HgzfffBNdXV3w+XyYMWMGLrroInz729/G+++/j02bNuH666+Hw+EY0eseDorAEARBmIjPGIXJA1OSLJ7dALc/HHObRRLgtJbesvf888/j6quvzuix119/PdatW2d8P3/+fADAwYMHMXny5EHHS5KE7u5uXHXVVWhvb0ddXR0uv/xy/PjHPwYAnHXWWbjhhhvwla98Bd3d3fj3f/933HnnnXj88cdx/fXX49xzz0VDQwN++tOf4kc/+lFG55wqAhul063cbjcqKyvR399v5PUIgiCGY8P+bniDEeN7uyzhnGl1BTwjIhmBQAAHDx5Ec3Mz7Hb7oPvjBYwkCiizlZaA6erqQlNTE44ePYqGhtEzsmCoa5fq+p12CunYsWP4+te/jtraWjgcDsyZMwcffvihcT9jDHfccQeamprgcDiwePFi7N27N+Y5enp6cMUVV6CiogJVVVW47rrr4PF4Yo75+OOP8elPfxp2ux0TJkzAL37xi3RPlSAIIm0GmXgphVSSjJa9eU9PD+6///5RJV6yRVoCpre3F2effTZkWcYrr7yCnTt34r777kN1dbVxzC9+8Qs89NBDeOSRR/D++++jrKwMS5YsQSAQMI654oorsGPHDrz++ut48cUX8fbbb+Nb3/qWcb/b7caFF16ISZMmYdOmTfjlL3+JO++8E7/5zW+y8JIJgiCSEy9gFIWNmsXwn4lEV6wUr+P06dPx3e9+t9CnUZSkFUv7+c9/jgkTJuDxxx83bmtubjb+zRjDr371K9x+++34/Oc/DwD4n//5HzQ0NOC5557DV7/6VXzyySd49dVXsXHjRpx22mkAgP/8z//E5z73OfzHf/wHxo4di6eeegqhUAi/+93vYLVacfLJJ2PLli24//77Y4QOQRBEtklUdRRRGWQp+1OMiRySQKuUnnwhhiKtCMzf//53nHbaafjSl76E+vp6zJ8/H7/97W+N+w8ePIi2tjYsXrzYuK2yshJnnHEGNmzYAADYsGEDqqqqDPECAIsXL4Yoinj//feNYz7zmc/AarUaxyxZsgS7d+9Gb29vZq+UIAgiBeIjMAA1sytFEkdg8n4aRA5JS8AcOHAAv/71rzFt2jSsXr0aN954I773ve/hySefBAC0tbUBwKBcXUNDg3FfW1sb6uvrY+63WCyoqamJOSbRc5h/RjzBYBButzvmiyAIIh0YY0hkeaFS6uImcWoosVopxTTSaCQb1yEtAaOqKhYsWIC7774b8+fPx7e+9S1885vfxCOPPDLiExkp99xzDyorK42vCRMmFPqUCIIoMZI1raMITHEiyzIAwOfzDbov2fpIV7I44NeMX8NMSMsD09TUhNmzZ8fcNmvWLPzlL38BAGO4U3t7O5qamoxj2tvbMW/ePOOY+AmVkUgEPT09xuMbGxvR3t4ecwz/3jxAysxtt92Gm2++2fje7XaTiCEIIi2UJKseVSIVJ5IkoaqqylhTnE4nBEHzKkUUFaGwMugxAWaBKJKfqVAwxuDz+dDR0YGqqipIkpTxc6UlYM4++2xjhDZnz549mDRpEgDN0NvY2Ig333zTECxutxvvv/8+brzxRgBAS0sL+vr6sGnTJmPw01tvvQVVVY0pmy0tLfh//+//IRwOG+rs9ddfx4wZM2IqnszYbDbYbLZ0Xg5BEEQMyXQKRWCKF76pjd8YKypLOMfKahEhCiRgCk1VVVXSgESqpCVgVq5cibPOOgt33303vvzlL+ODDz7Ab37zG6O8WRAErFixAj/96U8xbdo0NDc340c/+hHGjh2Lyy67DIAWsbnooouM1FM4HMZNN92Er371q8bgqn/913/Fj3/8Y1x33XX44Q9/iO3bt+PBBx/EAw88MKIXSxAEMRTJIjAkYIoXQRDQ1NSE+vp6hMPRxnWdA0HsbR8YdPwpTRWocFgH3U7kD1mWRxR54aQlYE4//XT87W9/w2233Ya77roLzc3N+NWvfoUrrrjCOObWW2+F1+vFt771LfT19eGcc87Bq6++GtNp76mnnsJNN92ECy64AKIoYtmyZXjooYeM+ysrK/Haa69h+fLlWLhwIerq6nDHHXdQCTVBEDklUQUSQCmkUkCSpJhFUQwwqOJgf4Uo22C3U7R+NECjBAiCIHT6fCF8eGhwq4aJtU5MbygvwBkRmXKkx4fdbQkiMOMq0Vg5eOwAUTzkbJQAQRDEaIVXIT3/4QG8vv2ocXsiLwVR3CStKKNo2qihtKZaEQRB5BCFMbi9Xvxw/9fRx1w4OvtVWESRPDAlSDI/UzJhQ5QeFIEhCILQUVVA8LRjvNCFU8RDCPi8AGjXXoqoSYRKmMToqIEEDEEQhI7CGFjAY3wf9nRr/6dFr+SgCMzohwQMQRCEjqoysLA3+r23BwAteqUIeWBGPyRgCIIgdBSVAaFoW3rVr1UkkYm39EimU0iMjh5IwBAEQegojAGmCIzg79Nup0Wv5EjalJCu5aiBBAxBEISOqjII4WgERgj0AdAGA1IUprSgwZyjHxIwBEEQOgpjEE0RGEuoL3of7dxLCpUxgDHMWf9dzNr4f43byQMzeiABQxAEoaPERWDkUL/xb4rAlBaKymANdKLh6GqMO/hniJGAcTsxOiABQxAEocMYIEWiAsYWjgoYSj2UFqrKYq6lRb+WdB1HDyRgCIIgdBSVQYr4je/titv4Nw10LC0UxmCJDI6mKSrDKB0B+E8HCRiCIAgdhTHISnTRcyrRpnaUeigtNDEa9TOZ04FUiTQ6IAFDEASho6oMFiUagSlToxEYSj2UFiqLTSGZBQyJ0dEBCRiCIAgdRWWwqlEBU848RrqBTLylA2MMqhrrZ7KETOlAupajAhIwBEEQOloKKSpgKuFBMKItdpR2KB14hCU2AtM36H6itCEBQxAEoaOqgM0UgakQ/PD5te9p11468C68FvLAjGpIwBAEQegojMHKAjG3hb3aPCTywJQOvGAsNoVEHpjRBgkYgiAIHVVlsDN/zG2Krw8A7dpLCWMOUihxBIaiaaMDEjAEQRA6KmOws2DsbT4egaFFr1TgERY1GC2DF4MUgRltkIAhCIKAFn1hDLBDSyEFYAUACH5dwNCiVzKo+rUSTHOtpGCf8W+6lqMDEjAEQRCIph2cugemSxwDABCDmoChtEPpwK+leTAn9YEZfZCAIQiCgL6oKSFYhQgAoE/WBIwlGG1BT5QGPAIjmgZzWsPUB2a0QQKGIAgCmv9FCUZ37AO2RgDRIYCMkQ+mVOARmJjBnBE3wLTrR2J0dEAChiAIAtqipuoCJswkhB1aBCZmIjUtfCUBFyjmYY4CGCxhzdRL13F0QAKGIAgCWu8QXrXihw2qrRIAYI8MGMdQ6qE04H1gzIM5gWg3XurpMzogAUMQBAEt7aCGtAXPBzuYvRoA4FSi3glKPZQGPIUkq7E9fXgzu4hKQnQ0QAKGIAgCmjhhQS3aEhDsgEMTMC7VHIEhAVMKcKHJx0IEmAwAkPWBjiRERwckYAiCIKCZeKFXrQQEO0RnDQBtIjWvaqGde2mgMgYwZgiY46wWgCmFRAJmVEAChiAIAtquXNBbzwcFOySXFoGpFLzwhrTSavJOlAaKyiAqQYjQBCcXMBYegVEYGKNrWeqQgCEIgkBsBCYoOsBsmoCpggfegCZgyMRbGigqiymhbkNsBAagKMxogAQMQRAEtMoVSRcwIdGOsFWrQrIIKoI+amZXSmgCRoum+ZkV3awcAHXjHW2QgCGILPHythP4x96uQp8GkSEKYxAjXMA4oUp2hKCZPxVvDwAy8ZYKCotGYLywo5+VAQAspm68FIEpfUjAEEQW6PWGsPyPm/Gt339I3VpLFEWNCpiIZAcEAQOCtnNnxkBHuralgKoyo4mdj9nQDxeAuBQSvU9LHhIwBJEFenwhMAb4QgqO9wUKfTpEBqgsuuiFJScAwCdpAgb+Pu12isCUBGYPjBd29DEuYCgCM5ogAUMQWcAfUox/H+z2DnEkUawoKoOkaGW3EckBAPBJFQCiE6lp114aKIxBUqJNCfuhp5BMERjywJQ+JGAIIgv4TALmMAmYkkRRGWRdwCgWbcELWrQIDE2kLi1UFRDD2vvQy+zo4x6YIM21Gk2QgCGILMD7hADAwS4SMKWIypjRel61aBGYkF6JJOsDHcO06JUECmOA3tPHBzvcegRGNpt4KZpW8pCAIYgs4I+JwPiGOJIoVhSVwapHYFRZ88BErFUAAJu+8NGiVxqoKgMzBIwNqt7Tx6L4ISghABSBGQ2QgCGILOANRiMwhygCU5KojMGqxgoYxVYFALBHNAHDGImYUkBlDNAniwcFBxSrCwoTAER7wVA6sPQhAUMQWcAfjkZgjvT6aJErQRQVsDO9gkzWUg6wVwGInUhNO/fiRlUZGAOge2CCogMOqxxNI+kChroqlz4kYAgiC5hNvGGFUSl1CaIyBhsXMFZdwCSYSE0CprhR9BlH3MQblpxwWKWokVevRKIITOlDAoYgsoDPlEICgENUiVRyqCqDnWkpJOgpJKlMm0hdAQ+CEU2kUnStuOHCRAxHe/o4ZMkopeZGXhKipQ8JmAISCCt4ZuMRdLhpt17qmCMwAAmYUkRhDA4EtW9sWuMzwVEFQJ9IHdSuMTWzK25UPQIjGV2VHXBaJfSz2G68FIEpfUjAFJAXth7HrX/5GPe9tqfQp0KMEK8uYATNJ4hDXVSJVGooimIIGMmqVyHpJt4qeA2jNi18xQ2/PryrsmLRU0j6OAGL3o2XPDClDwmYAtIxoH1YHuvzF/hMiJHi1/vATK7VwtQUgSk9hHBUdIp2rYFdWC+jdgpB+P26p4IWvqLGEDCKScDIkjHQkaqQRg8kYAqIR9/R9fpCBT4TYqTwFNLsJq31PAmY0oIxBkUvu1WZEI3AyC6o0MJqipcPdKSFr5jhwkTWBYwqO+G0WtBnVCH1AaDrOBogAVNAeEi610sCptQxBMxYTcAc6aFS6lJCURnUYLTxmU2WtDsEER5BSz0wfw8AMvEWO7wKiff0YVYXHNZoBIankBSFgTESMaUMCZgCwk2BPRSBKXl8egrppLoyWC0iwgrDiX4yZ5cKCmNguoDxwwaLKBj38YnUjCZSlwSqri9tuoCBtUyvQoo18QIUhSl1SMAUEB6BCYTVmFb0ROnBIzAuuwUTa7T0A81EKh0YgykCY4cgRAWMX59ILQU070REpQhMMcMjMIaAkcvgtEroM6qQok0JyQdT2pCAKSDmAYDkgyltuIBxWiXDyEtTqUsHxTQ7JyDYY+4LWHQBQ96JkkBVGQQ1DCvCAADBFp9CoonUo4W0BMydd94JQRBivmbOnGncHwgEsHz5ctTW1sLlcmHZsmVob2+PeY7W1lYsXboUTqcT9fX1uOWWWxCJxDYBW7t2LRYsWACbzYapU6fiiSeeyPwVFjHm+Tk95IMpaaICxoLJtTwCQ6XUpYI2vZjPzokVMGF9IrVVX/gilEIqahSVQYpEKztFmwtOOVpGHZNCIj9TSZN2BObkk0/GiRMnjK9//OMfxn0rV67ECy+8gGeffRbr1q3D8ePHcfnllxv3K4qCpUuXIhQKYf369XjyySfxxBNP4I477jCOOXjwIJYuXYrzzjsPW7ZswYoVK3D99ddj9erVI3ypxQf3wAAUgSl1uAfGaZUwuY4iMKWGqjJAL6OOj8BEdAFjC3MBQ4teMaMwZjSxCzMJstUWE4GRQ26AadeQIjCljSXtB1gsaGxsHHR7f38/HnvsMfzxj3/E+eefDwB4/PHHMWvWLLz33ns488wz8dprr2Hnzp1444030NDQgHnz5uEnP/kJfvjDH+LOO++E1WrFI488gubmZtx3330AgFmzZuEf//gHHnjgASxZsmSEL7e48ATNKaRwAc+EGAmMMWOYo8OUQjpIAqZkUFRmtJ4PibECxphIrQ90DNOiV9SoKoMUiVaU2a0W2GXJGOYoQIUU9kKxlpMHpsRJOwKzd+9ejB07FieddBKuuOIKtLa2AgA2bdqEcDiMxYsXG8fOnDkTEydOxIYNGwAAGzZswJw5c9DQ0GAcs2TJErjdbuzYscM4xvwc/Bj+HMkIBoNwu90xX8WOz+yBoRRSyRIIq+DVmGVWCybXaSmkIz0++oAsERTGjEZ2QdERcx+zawMdnYo20FEhE29RY47AeGGHXZYgCgIE2QE/swIAZB5No/dnSZOWgDnjjDPwxBNP4NVXX8Wvf/1rHDx4EJ/+9KcxMDCAtrY2WK1WVFVVxTymoaEBbW1tAIC2trYY8cLv5/cNdYzb7Ybfn7xj7T333IPKykrja8KECem8tIJgTiGRB6Z0MZuxHbKEpkoHrJKoT6WmLsulgKpGZ+eE4wQMnFUAABcbgMoYVJWqV4oZRWXGGAEfs8Nu0ZY5h9U00JF34yU/U0mTloC5+OKL8aUvfQlz587FkiVL8PLLL6Ovrw/PPPNMrs4vZW677Tb09/cbX0eOHCn0KQ1JKKIiZMql95EHpmThJfAOWYIoCpBEARN1Iy915C0NFMYgRqLTi81IDi0CUwmvYdamcQLFi6rCMGTzCAygvT95KTWvRApTNK2kGVEZdVVVFaZPn459+/ahsbERoVAIfX19Mce0t7cbnpnGxsZBVUn8++GOqaiogMMRtzMyYbPZUFFREfNVzJjTRwDQQx6YksVrMvByeCXSIeoFUxKopl17RIr9nFF1AVMFj1E5SKmH4kVhpq7KLCpgnIkiMHQdS5oRCRiPx4P9+/ejqakJCxcuhCzLePPNN437d+/ejdbWVrS0tAAAWlpasG3bNnR0dBjHvP7666ioqMDs2bONY8zPwY/hzzFaMBt4AfLAlDJ8V+6IETC6kZdKqUsCRWWwKFq6LyI5IEnRRna8jLpK8BjvW6pEKl60nj5aBMYv2CHpXZVjK5GoJH40kJaA+cEPfoB169bh0KFDWL9+Pb7whS9AkiR87WtfQ2VlJa677jrcfPPNWLNmDTZt2oRrr70WLS0tOPPMMwEAF154IWbPno0rr7wSW7duxerVq3H77bdj+fLlsNlsAIAbbrgBBw4cwK233opdu3bh4YcfxjPPPIOVK1dm/9UXEF9c510qoy5deAqpzBot6ptEpdQlhcJYzPRiWRQNERPRJ1KXww9fQJsgTxGY4kVlDNAHcwZMFWXOBM3sqKtyaZNWGfXRo0fxta99Dd3d3RgzZgzOOeccvPfeexgzZgwA4IEHHoAoili2bBmCwSCWLFmChx9+2Hi8JEl48cUXceONN6KlpQVlZWW4+uqrcddddxnHNDc346WXXsLKlSvx4IMPYvz48Xj00UdHdQk1QBGYUoanFcwRmGYqpS4pVJXBqmizqxSLE5IoQBBE+BUFYVlLR4sCQ9jXD6CWdu5FTExJvOCEVb/dEdPMjqqQRgNpCZinn356yPvtdjtWrVqFVatWJT1m0qRJePnll4d8nkWLFuGjjz5K59RKDr7olVkleEMKDXQsYXgPmDJbVMBMqo0tpZZMwwGJ4kNlgMynF8tOWCQBjAnwQwGTrAgIdthZAPD1AiATbzGjqgySPhYiZKooc8TMQyIPzGiAZiEVCF5CPb5aW+hooGPpwq+lQ47uB8ZWUSl1KaGozBj+p8plkEQBsskH4xW1idRCQBMwtHMvXhTGIIZ1AWMyZDtlyyATLwnR0oYETIHgEZj6CpvxQUk+mNLEl6AKSRIFTKjRPjyplLr4URmDlWkpJCZrHhhZin48+vWBjmKgDwA1sytmFDVaEh+xREviEw10pAhMaUMCpkDw0luXzYIqp5alpWZ2pYlh4jWlkACgWTfyUil18aOoDHamR8qsLkiiAKsl+vEYtGiVSGKQ79xp4StWVFMnXkVyQtADaQ7ZVEZNnXhHBSRgCgRPO5TZLKjRBUwf9YIpSbyhwSkkAJikG3kPdVMpdbGjMAY70yqMBKvmgTFHYEJ8InWYym+LGaZ3SpZ5RZnshEUSIYpahHSQB0ZhYIyuZalCAqZA8BSSy2ZBdZkMAGTkLVH8ejQtPgIzmSIwJYOqqHBASyEJ1rJBEZiIVUsh8YnU1MG1OOEpId7TR7GUQRY1MeqwRquQLKHorDyKwpQuJGAKBC+jdlol1JRpERgqpS5NvAka2QGmbrzkgSl61EgQEjRRItrKYIkz8fKJ1I6ItvBRBKY4UfRoilWPwKiyUzdki7F9YCJeCIr2eUs+mNKFBEyB8Bm79qgHhky8pQn3wDjleAGjfVge6fHTh2Sxo3duBQDJpntgTCkkYyK1qk2kpk68xQkPjFnVqJ+JpwMdsoQBOKEyTZjKYV2M0nuzZCEBUyAMD4xVMjwwFIEpTYwqJFusB4aXUocUlUqpi52QtmMPMBmyLMMSV4UkODUB42IehBWVFr0ihUdgbIaAKYMkirDqKSQVIgagVQdaaCJ1yUMCpkB4TRGYaj2FRAMdSxOeQnLGpZColLp0CAe0yIoPNtgsopF24Ah8oKOgDXSkFvTFCY902hn3M7m0dKBFi6hJojDIyEvXsnQhAVMgYky8Ts3ESxGY0iTRLCTOZKpEKgkiAS2F5IMdVkk0PDC8BDfCBzrCC08wAlXVOr4SxYWqMoCpsOuGbNFWZqSQBEGIGSdgoXECJQ8JmALh0VNITlMEhjwwpQmPpsWbeAGqRCoVVF3A+GGDKAqQJAGCIBgjIBJNpKZKpOJDYQyiEoAITZSI9nJNjIraUpdwIjUJmJKFBEyB8BmN7MgDU+r4k6SQgGglEk2lLl5UlUENatfHz/0RunDhRt6wPpG6Eh54A9p7lyqRig9VZbDoTexUJsBidWoeGL0k3mmVBo0TIA9M6UICpkAYwxxtFlTzTrwUgSlJfIaASZBC0iMwBykCU7QojAH68L+gYAcAI/LCFz6eQrIKCoJ+LVpDAqb4UExdeP2wwma1xJTEO+TBERiKpJUuJGAKhMeYRh1tZEcDHUuTRLOQOFRKXfwoKoMQ1quQRE3A8JQDN/IqFici0AWqX59ITQtf0aFdS02M+mCHQ5ZgkQRYpGgEJt4DQ+/L0oUETAFQVIZAWPvwK7NZ4LJZaKBjiRKKqMZcnEQm3rFVDsiSQKXURYzKogImJDggioCoR2CMSiRBgE/SFj4uYCgCU3yoKsCCWoTMy+ywy1JMTx+HbBonQGMhSh4SMAWAmz4Brf28IAg00LFEMUfMEpl4tVJq7oOhSqRiRJterKeQRAdEIdqB12qJ/tsv6ROpg7qAoQhM0aEwZhiyfbBDlgS9p4+eQkrggaHrWLqQgCkA3P9iMe0MaKBjaeILm66lJfHbqVlPIx0kI29RoqqAGNaiY2HJHtP/xfzvgKz5YCxB2rkXK4rKoOoRGL9gNyrJogMdLdFxAlSFVPKQgCkA5knUgr7bo4GOpYlviAokDp9KfZiMvEWJ2fgZkRyGgReIFTBhXcDIId6CnnbuxYbKGJg+FiIoaBVlPPrCxwn0x0+kJgFTspCAKQDmJnacaiqlLkl8weQVSJzmOhrqWMwoKoOkD/8LS06jhBqIFTC8EskW0atXKAJTdCiqqaJMjK0oi06kjksh0XUsWUjAFABvcHDVCjWzK02GqkDiTKJuvEUNY9HeIUpcBMY80FGxVwEAHIoWgaGde/GhqAyCIWC0jYPFVFHmtEZNvJaQG2CMImklDAmYAsBn55SZIjDUzK408YV5R+XkAqZZ7wXT2u2jRa8IURiDrA//i1icxoIHALLJxAtdwDgVNxhjCNNE6qJDZVFDdlhyQBBMPX14CkmPwIgsAiniJQ9MCUMCpgBEm9hFF70qJ/fAkIm3lDBSSHLyFFJTpd0opT7RT6XUxYaiMsiKdl1UizOpBwb6QMdKeOEPK7TwFSGKyiCGo+lA87W0SAKcVgkBWBGE9nkrh/qpE28JQwKmAJib2HFqyngVEkVgSgkjhTREBMYiiUYp9aEuSiMVG6oKWFVt+J8qa8P/ONoQQP04uz6RGto8JIrAFB8qY5D0CExEioum6R4YQBhciUTXsiQhAVMAonOQTCbeMuoDU4qkUoUEmKdSk5G32FAYg01PITE51gMDRKMw3MRbKWgTqcn8WXwoKiBFtGupWJwxYpSnkACgjwY6jgpIwBSA6CRqk4mXPDAlCRcwjiFSSIBJwFApddGhqAxWpkVgmFwWU4UERAVM2CRgvEGFzJ9FiDkdqFjiKsosgtFs0mhmF+Yl8SRgShESMAXAZxrkyDFMvOSBKSn8ocF+pkRMNkqpKYVUbKiMwa5HYGB1DorA8G68XMDwFJKqatOPieJBZQyyXhKvymWD/EwWfTK1UYkU7ANAE6lLFRIwBYCPEnBZzSkkzVTmDys00LGE4BVlicYImKEUUvGiqAx2aBEYWF0xvgkgWobLU0guIYCAX+/cS1GYokJRGaw8HWgtS9hVWatEim1mR9G00oQETAGIppCiAoYGOpYmPIWUaJCjGS5gqJS6+FAiIVihbSpEa6yJFzClkOQK4zZGAx2LErOfCdayhD19nFbJMPEaAx3pPVmSkIApAD6jE290104DHUuTVBrZAcDYKiqlLlpC0aiYYHMN8sAYM65ECT5R27mzQB8AEjDFhqoy2Jj2/hKsrriuyvpAR1kyTLw0D6m0IQFTADwJPDAADXQsRXwpppAskogJ1TSVuigJ6X1DmATZahvsgTGlIfhEailAqYdiQ1UZGAMcuiFbsLri+sDwgY7midR6V2USoiUJCZgCwD0w8WkHGuhYevhTTCEBwGS9I+9BqkQqLsLa9fDDBptFGuSBMXfjDeppJG7+pJ178aAw7Vo4dD+TaCsbfC35PCRjoGMfABKipQoJmALgCw4eJQBQKXUpwsXocBEYAJhUyyMwJGCKCTWgTS/2wg6rRUzaBwYAQnwidZgPdKSFr1hQVAZBCUHmfia7K6GfKbGJl4RoKUICpgB4EowSAGigYymSTgSm2YjAUAqpmIjoAsbHbLBZxKR9YAAgYtMnUnPzJ6UeigatC2/0vWWxD/YzaQMdLaZOvHofGLqOJQkJmALgTTBKAKCBjqVIehEY7UOTIjDFRcSvCxjYYLUIEIfwwKi2KgCAXRnQHks796JBURlYSLuWQSbDZhvsZ5IlrZldn+GB6TMeS5QeJGDyjKoyY4JxfAqJBjqWHv4URwkAQDMXMD0+aoBWRChBbdELCHZYpMHXUTalIZg+0NGlDiCiqOSdKCJUFVACmrD0wgZ7Ij8TTyHxCEzEC0ENUz+fEoUETJ7xhxXoXrNBKSQa6Fh6pNoHBtBKqS2igFBExQl3INenRqSIEtQiYgHBMSjlAESrVwAA9ioAQJXggTekUOqhiFAYgxLQrqUPdoiikNAD47RKcOsRGACwhAYoAlOikIDJMzx9JAowBotxaKBjaaGqLOUyakBbCCcaU6kpjVQ08LSDYB+UcuAYAx31FFIVvDSRushQVAZmRNMcAJCwJN5hlaBAggfae1EO9ZEQLVFIwOQZr2nHLgixby6qQiotApHoyIfhZiFxeCUSjRQoDhhjQFgzfgbFxBEYYPBE6irBA28wAn+Yxn4UCyozCxg7AAw28VoEOPWNo1uvRLKE3ZQKLFFIwOQZHoFxJljwaKBjaeENRhcvuyU1AcN7wVAEpjhQVAZR7wMTFoePwPCBjhV6BCYQVjQRRBQcRWVg4Wg6UBC0qKcZ3gcGQIyRl8zYpQkJmDzjTdKFF6CBjqUGv0YOWRpUuZIMPhOJSqmLA5UBYkRrPR8SHYNMnxyrIWCqAGgRGD6ROhCm3XsxoKgMgj4WIiQ6Er4nuYkXAHrVaDdeMtWXJiRg8owxiTqBgHHZLEbIk3rBFD++cOJ+PkMxrkrLzbeTibcoMPcOiUiO5BEYvRtv2Kp14q2EF76A9h7l87CIwqIyBkGPwISkxOlAq94HBgB6WTQCwxgQIT9TyUECJs8Yk6gTmD4FQaBmdiUETyGlYuDl1LrIqF1MKCqDRRcwYck5qGqFY3hg9E68ksAQ8WtN0MgHUxzEpgOdCaNpsiTAJosQAPTr4wRooGPpQgImz0QnUScuu402syMfTLGTThdeTm2ZDQDQ5QmSd6IIUBiDRdFSSEqSXTsQTSGpFjtCgnYNBX0iNaV7iwOVMUjhaDQtkRi1SCIskgC7PHigIwmY0oMETJ5JNomaE21mRzv0YiedLrwcHoEJRlSjBJsoHKrKIOsCJiIn3rUDseME/BYtjSTqAoauY3GgqICkaAJGsTiHNGQ7rRL6WFw3XiqlLjlIwOQZr5FCShKBKaNS6lIhnS68HKdVgs2ive26PXSNC42iMlhUTcCoFiekpCkk00RqXcBY9IWPBExxoKgMsp4OVOSypNE0i6hVIvGBjsY8JCqlLjlIwOQZn2HiTbzokQemdPCFhhajiRAEAbX6Ne72BnNyXkTqKIzBpkdgmOxM3gfGEv2oDOs+GKvunQiQB6YoUBmDbIrAJK0oswhxERjtOlI33tKDBEyeGS6FRAMdSwcuRtOJwABArUvzUJCRt/CoKmBlWkWYKpclTTtYE02kjmg7d0VlJGKKAEVlkPVoGrOWDWnIdsimCIw+WTxMAqbkIAGTZ5JNoubQQMfSIZMIDBBNE1IKqfAojMGmphCBMQkYRR8n4Ii4DSM2GXkLj8IYrMa1TC5GeTO7/vgIDHlgSg4SMHnGGCWQLAJDAx1LBm/GERieQqJrXGhUlcGuR2BgTb7oSaIQvU+fSF0Or9HEzkcRmIKjqgw2NXothxKjTtmCPr2MWg71A4yRB6YEIQGTZ6KdeIf2wFB6ofjJxMQLIOqB8ZAHptAoigI7tOsgWsuS+iaAaBRG5ROp4TFSwn5qZldwIiqDnWkRGNHqGjRGgMMHOvIyalENQ1T8VEZdgoxIwNx7770QBAErVqwwbgsEAli+fDlqa2vhcrmwbNkytLe3xzyutbUVS5cuhdPpRH19PW655RZEIrEfAGvXrsWCBQtgs9kwdepUPPHEEyM51aJhuBQSDXQsHTJPIZEHplhgoehIB8HqShqBAaKVSNzEywc6AlSJVAyoKoMDWgRGtLuGMGQLcMgSfLAhAu29K4f6aSJ1CZKxgNm4cSP++7//G3Pnzo25feXKlXjhhRfw7LPPYt26dTh+/Dguv/xy435FUbB06VKEQiGsX78eTz75JJ544gnccccdxjEHDx7E0qVLcd5552HLli1YsWIFrr/+eqxevTrT0y0ahk0h0UDHkiFzEy+lkIqGsDa9WGUCRGvyRnZAtBIprJt4KwWvEYEhAVN4FMbg0NOBoi25GOV9YAABHiGaRqIqpNIjIwHj8XhwxRVX4Le//S2qq6uN2/v7+/HYY4/h/vvvx/nnn4+FCxfi8ccfx/r16/Hee+8BAF577TXs3LkTf/jDHzBv3jxcfPHF+MlPfoJVq1YhFNI+0B955BE0Nzfjvvvuw6xZs3DTTTfhi1/8Ih544IEsvOTCMnwKiQY6lgq+kaaQqIy64LCgFoHxwQa7deihnLwSKaJPpK6Cx/BB0TiBwhMOheEUtPeUNFQExjSR2m0SMGHywJQcGQmY5cuXY+nSpVi8eHHM7Zs2bUI4HI65febMmZg4cSI2bNgAANiwYQPmzJmDhoYG45glS5bA7XZjx44dxjHxz71kyRLjORIRDAbhdrtjvoqR4cqoaaBj6ZBpCskoo6YqpILD9OnFftjgGOY6ynETqSsFr9GYUlEYghESMYUkGPAY/7Y4yof0wPBNR5/RzK7P2FwSpUPaAubpp5/G5s2bcc899wy6r62tDVarFVVVVTG3NzQ0oK2tzTjGLF74/fy+oY5xu93w+/0Jz+uee+5BZWWl8TVhwoR0X1rOYYwZi16yWUg00LF0yDiFpF/fLm+I5iEVmpC26HmZHWXDXEfDA2OKwHhMix5FTAtL2KddS4UJEC32ISIwmgcGAPpVp3ZbyI1gWCURWmKkJWCOHDmCf/u3f8NTTz0Fu92eq3PKiNtuuw39/f3G15EjRwp9SoMIRlQjzzrUokcDHUuDjFNIugcmFFENTxRRGMJ+bdHzwzZsJM2IwOgmXrsQRtDvNe4nH0zhUFQGJTAAAPDBDkEUk3pgLJJopPB71NheMG4/RWFKibQEzKZNm9DR0YEFCxbAYrHAYrFg3bp1eOihh2CxWNDQ0IBQKIS+vr6Yx7W3t6OxsREA0NjYOKgqiX8/3DEVFRVwOBwJz81ms6GioiLmq9gwhyiHmmBMAx1LA98wc62S4bRaYJe1tx6lkQpLWE87eGEfVohadROvIrugQDtWCPQa95OAKRyKyqDq0TS/oK0RQxmyy+36Z6wegbFwAROgTWMpkZaAueCCC7Bt2zZs2bLF+DrttNNwxRVXGP+WZRlvvvmm8Zjdu3ejtbUVLS0tAICWlhZs27YNHR0dxjGvv/46KioqMHv2bOMY83PwY/hzlCrRQY5DmwWpmV1pYKSQkhiyh6JWL6XuIiNvQVF0AROADTZ5uBSS/nEpCAhYygFEJ1IDlEIqJCpjYAEtGhYQ7JBEAYKQ/DO20qF/xpqb2QEYCFAEppRIa+tYXl6OU045Jea2srIy1NbWGrdfd911uPnmm1FTU4OKigp897vfRUtLC84880wAwIUXXojZs2fjyiuvxC9+8Qu0tbXh9ttvx/Lly2GzaR/qN9xwA/7rv/4Lt956K77xjW/grbfewjPPPIOXXnopG6+5YPB8+XA7dmpmVxrwypN0U0iAlkY61uenCEyBUYOagAkKdlQNsakABk+kLov0QdYnUgNRQUvkH0VlYHoEJiA4ks5B4pTZtBQTN/FGU0gUgSkl0ot9p8ADDzwAURSxbNkyBINBLFmyBA8//LBxvyRJePHFF3HjjTeipaUFZWVluPrqq3HXXXcZxzQ3N+Oll17CypUr8eCDD2L8+PF49NFHsWTJkmyfbl4ZbhI1p1pPIVEzu+IlFFER1htfOeX030Y1VEpdFKh6FVJAdAzZxA6InYcUtlYCAcASilY7Uil14VAYA8LatQymcC2tFglOq4T+kOaB4QMdQxEVgbAC+zDROKI4GLGAWbt2bcz3drsdq1atwqpVq5I+ZtKkSXj55ZeHfN5Fixbho48+GunpFRXDlVBzqqmZXdFjThc4MonA6CkkamZXYPROvEEhedUKJ2YitV6JZI9EBUxEYQhFVMMrQ+QPVWUQdDEaEh1DjoQAohOp+0KxJl5A88GQgCkN6J2WR7gHZigDLxDdnVMZdfHCG5jJkpDRgmV046UUUkERwtFFb7hduygKkPTUBJ9I7VTcMR1cyQdTGBSVQdSvZVhKLZrmtEpw6xOpLWYBQ5VIJQMJmDzCF71kXXg5PAJDHpjiJdMmdpwa8jkVBUJYi8CEpeF37UA0CsP0idTmeUgA4AvT4lcIFMYgRfi1dKYUTXPI0iAPDECVSKUECZg8wj/onMOlkMpooGOxk+kkak50nABd40IimgSMNIzxE4j6YBSjmZ03ppkdlVIXBlUFJP1aRizOYU28skWAwypFq5DCA4CqXTuqRCodSMDkES5gXMOlkMgDU/TwaFom/hfAnEIiE2+hUFUGi75rj6SwawfM3XirAPBxAtSNt9AojMGiaNdSsThT8sA4rRa44YzeFtb8TOGIStexRCABk0eGm0TNoYGOxQ+/LsP5mZLBTbyUQioc2qKnjSZRLMP7JgBTN14+kTpunABFYAqDopgFTFlKHhiHLCECC/xCbDM7gNJIpQIJmDwy3CRqDg10LH5GGoExyqg9NA+pUCgqg8wXvRQjMNywHZa1Tt+aByYqWqgXTGFQGINVF6NMLkvNA6O/d73iYB/MAAmYkoAETB5JtYyaBjoWP5nOQeIY85AUNWYHT+QPlTHIagAAoMjOtCIwET2FFO+BiSgMYUXN/skSQ6KoDFZVE6NMHt4DY5EE4707IAwWMP1UiVQSkIDJI3x2znACBqCBjsXOSFNITqvFmIhLaaTCELPoWZwxjeqSET+RulLwDBKglEbKPypjsKlaBAZWV4oeGH0itV6JZKEITMlBAiaPGGXUKezaaaBjcTPSFBIQTSN1US+YgqCqgE2PwKjy8L4JIFpGzU28FYIfgWCsEZt8a/lHURnsTLuWsKV2LflAx342uJldRGGUDiwBSMDkEW+KKSSABjoWO9EITOYCps5FvWAKicoYbEzftcupViHxFFJ02j0zDXQEyAdTCDQBo11L0eZK6VqW27XP4V42OIUEUEO7UoAETB7hZj9XCgKGBjoWN/xaOjJMIQFmIy+VUhcCRVVhY9rvXrA5h5xezJF1Ey8TLQiKegmuvy/mGEoh5R9FVeGAFoERba5hPTAAUOnQBYyqVyGF4wQMpZGKHhIweSQ6jXr4XTsNdCxu/OHUr2Uyal00D6mQqOEAJGiGW8lWntJjzBOpQ7oPJujugmqqJAvQUMe84w8rcOoCRrKVpdRVudKhp3AVTcAMjsCQgCl2SMDkkeg06hQiMNTMrqgZaRUSYOrGSx6YgqCGPMa/ZYcrpceYBzqqdm2cgF1xo8sURaMITP7xBSJwQrsGkt2Vkgem0qFtErvVwR4YABgIRqjFQZFDAiaPeNOpQqIy6qKGX8tMZyEB0VLqHi+lkAoBC2rD/wJMht1mTekxgiAY6Qk+kboSXrR2+4xjQhEVESqlzis+vx8WQfudq3JqHhguYPoTDHQEtOZ4XhKjRQ0JmDwRiqgI6R9qqZTe0kDH4oankIZrSjgUNWWUQiooQU10+GBL6zpa43vBCF4c7vHFHOOjNFJeCfrcxr+Z7ICYgoBxWi2wWcSEAx05VE5d3JCAyRPmygRnCh+W1UYVEr2BihHDxCtTCqlUUcNaBMYHe1qRNG7kDeuVSFXwxERgACqlzjdh/wAAIAArJIuc0mNkiwCHLMFtlFG7Bx1DlUjFDQmYPMENvFaLmFLDrBqKwBQ10WnU2Ugh0TUuCEHNA+NjtrQaEhrzkPhEasGDwz2+GL8E+WDySySgCRg/HJBTiL4A0WZ2fUYKqQ+I87xQJVJxQwImT6RTQg0AVaaBjlTVUHz4eBXSiFJIegTGGySzYAFQg+YITOrXUTY8MFUAtBSSJxiJMdxn0guG/gYyRw1oYjQg2FMy8AKALGrzkPqhCRhJDUFUAjHHeAJk5C1mSMDkCaMLb4oLXjkNdCxqfMFsVCFpHpiwwjBA85DyDk87+Jgt5Y0FYO7Gq0VgGmStgdrhbq9xTLopJMYYOgbIzJ0pqh5NC4qOlHrAANEUkgcOqNDex/E+GEVlGc0qo3lY+YEETJ4wuvCmGKo2D3SkFEPx4RvhLCRAG0PABVAP+WDyTljftftgh11O/aOQp5BCthoAQJOkLXqtJiOvP82oaa8vjH7qO5IRqsqAkCYeg6IjpR4wAE8hWQAI8ElaH6D4SiQAcAfSEzDBiIITfYHhDyRGDAmYPJHOGAFOtJkdfbAVE6rKjAVqJLOQgNg0EpFfGN+1C3bIUhopJN3E6ytvBgCMixyBADWmEikYVqGoqaceOgYCxmcEkR4KYxB0Q3ZYcqSeQpJE4/3rFTUBI4cTGXnT+/w91uunCfN5ggRMnkinBwzHKKWmFFJRYd5djySFBJi68VIEJu8ovA+M6ICUYtoBiHpg/K6JUEUZVhbEBKFzUCVSOj6YzoEgVS5liKIySBHtdx+WnCmnkICoJ9Ej8lLqvkHHDKQRgWGM4Vifn+Zh5QkSMHkinUnUHBroWJzw9JEgAHbLCAWMEYGha5x3dAETEu0pV64AUQ8MEy3wlp8EAJghHEWfPzYNlKog6fOFEAyrCEQUMoxmgMoYJCMCk9pQTo5LH+g4wHvBBAenkDzBsJamSoHOgSCCYZWq0PIECZg84ckghVRFpdRFCd9dOWQppYZZQ1FLPqfCEeYCJvW0A6C1QuB4K6cBABY42gDE+mBSXcS4eVdV0/fOEFoExqJHYBSLE1KKHhgAqNAFTL8uYOIHOgLadfGkGFE50qsZukMRlYy8eYAETJ7wpVlGDQA1ZTTQsRjxZaEHDKdG7wXTRROp809YTzukYfwEENPHyVOhCZhT5OMAYiuRUhYwbpqjNBJUFbAo2rVULWVpRWAq7NpnbB9LPA+Jk4oPxhOMxHxW07XMPSRg8kQ6k6g5NNCxOMnGIEdOnV5KTRGY/CNxASPZ0/LAWEQBgn64t3IqAOAkHAWQfiWSOxCO6fNEPpj0URiDrGiRD1VOzwNToc9D6jWa2Q028QKpdeQ92kvdmPMNCZg84Quln0KigY7FCb+W2RAwNZRCKhiivmuPSOnt2rWBjtpHJ4/ANIRaIUKNFTApLGDm6AtAu/ZMUFQGq6pHYOSytNKBXMB0K04AiU28wPAdeSOKihP9saXTXjLy5hwSMHnCqELKIAJDi1txkc0ITDSFRNc433DfRCSN0luOUYlUNgGKZINFDWKC0IEuT8iItgbCyrDmzw537KJH1SvpozIGq6pFYJi1LK10YPUgAZM4heQLRYa8lif6A1CU2PspApN7SMDkiUxMvDTQsTiJRmBG7oGJppDIA5NvLHraQbGkV7kCRCuRIErw6ZVIpznbAQBHzEbeIdJInmBkUMSFFr30UVQGO9OEoGAtSyuFxEe2HI1ogznt3mMJj1PVocupj+rmXTPU1yf3kIDJE3zRS8vESxGYoiQXEZgeb4hKaPMIM/kmmOyEIKQbgRls5F2oVyIdijHyJl/E4qMvgOabob+D9FBUBrsegRGsrrTEaKVDe/9tUyYBAMo8hyCFBhIemyyN1OsNJRQrQ4lXIjuQgMkTHj47J50yahroWJT4syhgeBl1WGFptywnMkdliEk7pItZwHAj7wxR272bfTCBUPJS2kSzjxijUup0CSkKHNDEoGhzpZUOrHLIEASgFxXwOsYBACr6diQ8NpmASRR9AQBFYQhG6FrmEhIweYIrdFca04tpoGNxwv1MjiykkOyyZPiiKNKWPxSVwabqi57VmfbjrZboIskjMBOVwwAQ05GXTy2PxxeKwJNEsJKRNz08gQjKBO1aSnZXWh4YmyzCIWvvv86K2QCAip7tCY9NVIkUCCvo9CSfe8TbZxC5gQRMnsikCokGOhYnfFFKx5A9FNFxAuSDyRcqY7AxPe1gc6X9+NgIjCZgavyHIUJFu2ksQDIxEl99ZIYWvfTwBCNw6hEYwZ5eBEYb6Ki9j9vLZgIAynsTCxhfKDJovtXxPj/UIfrVURopt5CAyROeNKdRc2igY/HBF5hspJAA80BHEqn5QgmHIEN7T1rsI0sh+Z3joEg2SGoIcx09AIAjek+QZKbcROkj4/lo0UsLT1BBGbTfJ5PTu5ayFI3AHHXMAABUJBEwjAEDpjQSn3s0FD4y8uYUEjB5IKKoCIQ1mZ5OBAYwN7Ojxa1YMEy8aV7LZBjzkKiUOm8ooajRVrJXpP14s4CBKMFbPgUAcEZ5BwDgsJ5GSlRKHQgrQ3Z2pf4h6eHz+WETtN+nmEE0jb+PD1una997WmFJ2pE3em343KMhz43SgTmFBEweMIcRy9LwwADUzK4Y8Yez18gOAGqNSiRKIeULFvQAAMJMgt1uT/vxVin2o5MbeedatZEC3MjLGBCIM3IOlT4CqJQ6XYJ+U9VQBoZsXhnay8rgK5sAACjvHd7IeySu824iSIzmFhIweYAbeC2iMOiDbzhooGPxYZh45WylkDQPDDWzyx+qPonaB1tGQlS2xPosuJF3ij5S4HBP8plIHQPJTZ9Aag3wiChhny5GYYEk29J+PC+s8IcUuGtOATCEkVcXMNrco+HT+gEqi88pJGDygNfUxC7dfhM00LH44DvkdNOByahzkUjNNyykLXo+2NPqzcSRB0VgNAHTGDwIQOvMyktozRGVYERB/zCDAamUOj1CejQtINjT7qgMAC6b9hnrC0cwUD0HQHIfjC+oIKKog+YeJUNVYdgHiOxDAiYPeDOYRM2hgY7FBw8LO7Js4iUBkz9YUFuAfMyWkZdJlkSYq3W9FVoKqcJ7CDV2EYxF+4OYIzAd7iBS2ZCTdyJ1VD2FFBAcg4RlKpTbtesfE4FJImAAoMcXGjT3aCgojZQ7SMDkAW8Gk6g5ZOItPowITBb6wABRAdNFZdR5g4WiKSRXhtfR3G/EXzYeiuSAqIbxqSrNAMr7wZi78Q5VfWSGfDCpo+oRmJCY/kwrIDrQ0RdS4K46GQDg8B6FHOxNePy+Ds+guUdDQdcyd5CAyQPeEaQcaHdefGRzlAAA1Ln4PCS6xvmCm3h9sKdtrOfE7PYFEd4KrRKJjxQ43BNbSh2KqOhLcSOSrAEeMRieDgyJjrRnWgFApUOPwIQVKNZyeF2TASQ38g7Xp2fLkT7851t7jUozisDkDhIweSDqgckgAkMDHYuOXKaQyPCXHyIBXcAwW0apXSC2Gy8AePQ00kwpdqRAIKIZOTs9qaWPAEohpYMQ0n7PIcmZUQSGz0PiQnPAMPJuy+h8Xt52AluP9uOjI30A6FrmEhIweSDTJnZAtJEd7c6LA8ZYzlJIEZUlbFdOZJ+In0dgbBmbsZMZeScprQCAY31+hBUVqqrt7jtTTB8BlHZIByGspQMVyZHWGAFOpSmFBADu6uF9MMlQTc3teGdtupa5gwRMHshkEjWHR2BooGNxEFJURPQS12xFYOyyZPxtdFMvmLyghHjligM2SxZSSIhGYKq9B1BmlaCoDMf1xWwgEEmrzw+VUqeOFNEETMTigEVKPwLDfYa88osLmGQppKHo9oQQjGhVR7yzNl3L3EECJg9EJ1Gn/0FJAx2LC/NuKlseGCDazC6dcQKHurz43w9aEVGoTDNdFD2FFBTskDJY9IDkEZgyz0E012jXk/tgjvT4hpyZEw+VUqeOJaL9jhVLWUYemGq9VYWRQqqeDQYBDt9xyIHutJ7LPFqAR80Zo5lIuYIETB4w94FJFxroWFzwMLNVEjMq2UxGTQbjBH70/Hbc9tdteH1ne9bO458FpvsmgkJmxk9gcDfegHOsUYl0WnkfgGglUiYeNvJODI+iMlgUTTQocmYeGB6BCYQVqIxBkV3wlTcDSD+NZBYw5s2Ij4y8OYEETB4wUkgZeiZooGPx4MuygZdjzENKMc3AGMPHR7Vy3Z0n3Fk9l38KeOWKlFnzMwCwWuI+PgURHr0Saa71BICokTcTyDsxPIrKYFX0sQ1yGSwZbCr45oEBRpo+6oNJL410rDcqYPp8IWN6NU0Yzw0kYPJANIWUqYChXjDFgs8w8GZbwOil1ClGYNrdQaOj6952T1bP5Z8CPQITlpwZR2DkBKknnkaaKhwBoM3LUTL0P1D57fCojMGqaqKByZmlkOyyZDyOi0be0K48zUokcwRGZTDK5imalhtIwOQBnkJyZdhvgvsjDnd7hzmSyDXGHKQsC5iaND0wu9qiUZc9HQNDHEkkQuTGT8mR9ngPjhwfgQHg1Wci1QcOwi6LCCsMJ/r9g46Lx9W3C807/guCYk470KI3HIrKYGP679fqyjiaxjeXvkERmNRTSBFFRZveodem/23w9zOlkHIDCZg8MBIPDAB8etoYAMBfPzpGfUIKTHQSdXZKqDnRFFJqAmZ3W1S0HO72GXN3iNQQw9qiF5GcGT9HosGsHn0qtcu9DxNrtOc+nEIaafYH/wdTdjyExiMvGbdRCml4IqoKO9NEg2DNLAIDRCOq/HfuqZoFJoiw+9th9Xem9BztA0EojMEui5hcq03FjgoYupa5gARMHuCh4Ez7hlwytwkOWcKBTi82HU7c3prID9nuwsupNQY6puaBMQsYRWU41JW51+KfEV65osqZC5hEJm4egXEOHEJzteZd40beZNi9R1HRtxMAIHXuNG4PRqj8djh8QQVOaAJGtLsy8sAA0c0lf38rchm85ScBAMpTjMJw/8u4Kofp/awJmFBERZiqBbNOWlf717/+NebOnYuKigpUVFSgpaUFr7zyinF/IBDA8uXLUVtbC5fLhWXLlqG9PbZCorW1FUuXLoXT6UR9fT1uueUWRCKx4bW1a9diwYIFsNlsmDp1Kp544onMX2ERwNMOmUZgyu0yls5tAgD8aeORrJ0XkT7cjJd1AaN7YFKtQtqlCxie/dhLaaS0sBi+icwFjCQKg1IWAedYRCxlEFkE85zaZmM4I2/Xh3+LftO5y/gnld8OjzsQRpkuYCx2V8bPw/swmUvX000jcf/LuCpHNKJqmm9GUZjsk5aAGT9+PO69915s2rQJH374Ic4//3x8/vOfx44dmlN75cqVeOGFF/Dss89i3bp1OH78OC6//HLj8YqiYOnSpQiFQli/fj2efPJJPPHEE7jjjjuMYw4ePIilS5fivPPOw5YtW7BixQpcf/31WL16dZZecv4ZySgBzldOnwAAeGnbCaOzL5F/eC47U0N2MmrSSCFFFBX7OjXj7hnNNQDIyJsusl65ArlsRM8zqHGaIBgzkWZZoiMF1CSp37f3dqLh+JvG93X+AzH3k3diaAaCESMCA2vmAsY8kdp4bmOkQHoRmLmObnzO+zdIUGJaX1BKMPukJWAuvfRSfO5zn8O0adMwffp0/OxnP4PL5cJ7772H/v5+PPbYY7j//vtx/vnnY+HChXj88cexfv16vPfeewCA1157DTt37sQf/vAHzJs3DxdffDF+8pOfYNWqVQiFtAv9yCOPoLm5Gffddx9mzZqFm266CV/84hfxwAMPZP/V5wnvCEYJcE6bVI2TxpTBF1Lw0sfHs3VqRJrwwZxOOVcppNCwaYND3V6EIiqcVgnnz6wHoE3IJVLHquqL3ggiMMDQaaTx4cOwSiKCERUd7sGpwQ8P9+CF97bjU+Inxm11SiekcPRa0qI3NJ5ABGWC/rvNgoAxC0Z39RwAqZdS8wjMVcfvwsXHHsKl4oaYDQlVlWWfjD0wiqLg6aefhtfrRUtLCzZt2oRwOIzFixcbx8ycORMTJ07Ehg0bAAAbNmzAnDlz0NDQYByzZMkSuN1uI4qzYcOGmOfgx/DnSEYwGITb7Y75KgZUlY1oGjVHEAR8+TQtCkNppMLhz5EHhkdgFJXBHRi63w9PH01vKMf0hnIAwJ52SiGlAxcwgn1kEZhBvWAQNfKWD+zD+GoHAOBwT2wF4Y7j/fjtOwdxvvARJIGht3wG2lkVAMDWu8c4jtIOQzMQiEZgBFvm17LCrnfjNaWQBqpmggkibIEOWP1DN4sMhBV0eoKYLRxCvUcTpCeLh2IGtJIYzT5pC5ht27bB5XLBZrPhhhtuwN/+9jfMnj0bbW1tsFqtqKqqijm+oaEBbW3aePm2trYY8cLv5/cNdYzb7Ybfn7wc8Z577kFlZaXxNWHChHRfWk4wvyFGkkICgMsXjIMkCtjc2od95HkoCIaJN8spJJtFQrkxD2noNBI38M5sLMc0XcAc7PKSSTBVVBU2vXJFsmW+awcSVyLxCEyZey8m1WoRHrORd3+nBw+v3Q9FZfhy+VYAQM+Ez+IAtM+sSFs0IkMCZmi8gRCc0CMwIxEwjthxAgCgWhzw6NdyuDTScb1U/grbO8ZtM4QjCEZUwwPppdR/1klbwMyYMQNbtmzB+++/jxtvvBFXX301du7cOfwDc8xtt92G/v5+4+vIkeKIUvA/WlEAHCNMO9SX23HeDC1lQFGYwmB4YLKcQgJM85CGMfLyCMyMxnKMrbSjzCohojLqE5Qiaij6e7LYy0f0XIlSSJ5KXol0GM1V2sLIS6mP9frx4Jt7EYyomN9oxWmRjwAAneMWo92uta+Xuncbz0W79qEJ+L0QBS3CIVozv5ZVcROpOQMpGnmP9fphRRiXCP8wbpshaR4o7oMhQ3b2SVvAWK1WTJ06FQsXLsQ999yDU089FQ8++CAaGxsRCoXQ19cXc3x7ezsaGxsBAI2NjYOqkvj3wx1TUVEBh8OR9LxsNptRHcW/igEjfWS1ZNwwyww38/518zGEIrTjzje5isAA0TTScKXUu00CRhAETK3Xoghk5E0NJaj9nlQmwDrCFFKibrxBR6NRiXSKvQuAZuTtHAji/jf2wBdScFJdGf7vjDZISgB+5zh4qmbBU66ZfysG9hnPFQgrGXfy/WdgwN0HAFAhQLQmXx+Go8o5OIUEAO7qkwGkIGD6/LhA3IxKNoCgrRYA0IAeVMBrjAdRFGaMKiCyw4j7wKiqimAwiIULF0KWZbz5ZtRRv3v3brS2tqKlpQUA0NLSgm3btqGjo8M45vXXX0dFRQVmz55tHGN+Dn4Mf45Sg0dgMplEnYjzZozBmHIbur0hvLWLhvjlm1z1gQGAGr2UumuICIw3GDHKcmc2aiJ9ar2289xLRt6UUINaBMYHG8rsIxOiCQd6CgK8FZoP5iTWCkkU4AspuPfVXej3hzGuyoHvXTAN49rfAqBFXyAIUGpnAAAaggdjno6mUifGH1LgHdDmgQUFOyyWzN+TdS7+3ovdPLhrNCNvec92ra49Ccf6/PiytBYAcPykLyHg0Dbk04SjMSlhiqhll7QEzG233Ya3334bhw4dwrZt23Dbbbdh7dq1uOKKK1BZWYnrrrsON998M9asWYNNmzbh2muvRUtLC84880wAwIUXXojZs2fjyiuvxNatW7F69WrcfvvtWL58OWw27Q/ohhtuwIEDB3Drrbdi165dePjhh/HMM89g5cqV2X/1ecAzwi688VgkEcsWjAcAPPPh0aw8J5E6RgopBwKmLq75VSK4WXdMuc2I2Exr0CMwJGBSQtUjMH7YRlQZCCQ28QLRNFKFZz/GVWmRgX5/GHUuK1YunoZyGag7bhIwAKxjtd1+PeuGEIx63KiUOjFHe33GUM6g4Mh4jAAAnHFSLURBmzHWORAVMZ7KGVAFC2zBbtj8bUkfH+k9is+IHwMAjk9eZlz/6WKsgKE0UnZJS8B0dHTgqquuwowZM3DBBRdg48aNWL16NT772c8CAB544AFccsklWLZsGT7zmc+gsbERf/3rX43HS5KEF198EZIkoaWlBV//+tdx1VVX4a677jKOaW5uxksvvYTXX38dp556Ku677z48+uijWLJkSZZecn4xJlFnMeXw5dM0AbN2d4cxe4PID9EITO5SSN2e5Ckks4GXM50LGKpESgmmD3L0MvuIjfX2JLt+HoFx9e/FZN3IW+mQcfNnp6PKaUVl12ZYQ30IWavQV7cQAFBbW492Vg0ACLVFfYU0yXgwisq0smXdzxSSHJDFzBMKlQ7ZMMRvO9Zv3K5a7MaAzmRppIFAGJ8Nr4EkMHTXngZ/+STDyD1dOBozoNVHRt6sktan8GOPPTbk/Xa7HatWrcKqVauSHjNp0iS8/PLLQz7PokWL8NFHH6VzakWLJwedW08a48KnJtfgg0M9+Mvmo1h+3tSsPTcxNLmMwNTqYeyhqpAMA29DVMBM01NIBzq9iChqxu3U/1lgpgjMSDcW5XYLJFEY5FPhO/Ay914sObsRoiDg/Jn1qC+3AwDqj70BAOgaex6YqJ2DKAo4YpmIBqUXavsnwKQzAFAlUiLa3AFEFAYhrInRkOiAlMCPlA7zJ1Rhd9sAth3rN/orAZoPprzvE1T0bEfnuM8OetyxXh++LK3TzmvKFwFEr/904ajhgQHoWmYb+qTLMdFJ1NndsX9ZN/M+8+ERmpeSR3LpgaktGz6FZDbwcsZVOWCXRYQUddi29QTAdA+MF/YRp5BEUUCFY/Bz8B24w9OKxjIRXz9zEsbqqSQwhjHHNQHD00ecbqc2f8fcC4YPECWiHNH/zkVdwIQlZ8aDHDmnT9aiX7va3DHDUXlDu2QzkeRj72Gy2A6/4ED7+IsAwIjaxKeQqJlddiEBk2NGOok6GZ+b0wiXzYLD3T68f7Anq89NJMefwxTScGXUjDHsbucppGiVnSiaKpHIBzMsTPdN+JgNrhGaeAGg0mEddFvQ0YCI7ILIFDgHYk25rv5dcHiPQpHs6G44J+Y+f9V0AECVNzpSgHbtsfT5QvAEtM9VSdHEaMTiHJEHBgCmjHGhxmlFWGExw1LdxkiBbQmNvLPaXgAAbC4/H6pFSxd69YqyMUI/LIEeo2I0EFaMxnbEyCEBk2O8wdwseE6rBZeeOhaAFoUh8oM3hymk4eYhdXqC6PGGIApR4y6Hp5FopMDw8DJqH+xZETC8BDcGQTCaoLnce2PuGqOnj7obzoZqiS39FepnAgDGRw4bC10wrFIptYkjPdGGppaI9m/FMvIIjNUiYc74SgCxPhhP5QyoogxrqA92X+wYFynswek+LX20b+znjdsVuQx+5zgAwHThGHp82ntaVYFAmNpfZAsSMDnGa5h4s7/g8Z4wL287gX7/0O3niZGjqMz48MlNCknzwPT6Es9D4rvCybVlsMc10uMRGBopMDxhPxcwNlRkITJa6ZCRqMUTN/KW9e+LuZ37XxL5KRxNWiVSI7rhcUcjq1SJpKG17I8WLlgiWgpJsThH7P2yWgTMGRcVMFxAMskKT6UWGYs38tYfeRkOBLFfbQImfCrmPv6Y6eKRGCMvpZGyBwmYHJOrFBIAnDq+EtMbXAhGVPx9Kw14zDXmfhy5rEJSVJZQkCbyv3D4TCRqZjc8kUDUxJuNhoSyJCZ8f3MjpzkCY/ceRXnfJ2CCiK6xiwY9RnRWoRPahHH/8egQwUL2D+lwF0+l47E+P1RTAINPFWdy2YgjMLIkYlZjOSyigC5PCCdMFZ5uvSNvec+2mMc07P8zAODP6iI0VNpj7vPqM7HijbzUCyZ7kIDJMdmYRJ0M84DHZymNlHP4LlgQALuc/beO1SIaU3ETpZF2DSFgpukRmP2dHko3DIOim3iDgj0r3bGBxGmk6EykaARmzDGtSWdf3WkI22oSPtdx62QAgNAZHSlQSB/M0T5/jKm1UKgqw7He2Hl4VlX7nsllI/bAyJIImywZFX7mNJLbGCkQFZVO937U9W5BhIl4t2wxLHFl3DyFOF08GmPMpwhM9iABk2N4GXUuIjAAcPmC8ZAlAR8f7ccnJ4pjAncmRBQVv337AHYc7x/+4AJhGHhlKWsLXzy8I2iiXjCJesBwJtQ4YbWICEZUrcEXkRRehRQSM289H09VAiMvn0rt9ByGqGjXs/7Y6wCAjrjqIzP9Ls0AWtYfjdwUSsBEFBV9vhDc/sIvuh0DwUHjU2xcwFizE4EBkNAHM8CNvL3RjrxjD2o9ztao82CvHjfo+bw8hSQcjXk/kyk7e5CAyTF81z7ShlnJqCmz4rOztendpTzgcd2eTvzs5U9w+3NDzxwpJNyQ7chBNI1Tk6SUWlGZ4W+Z0Th4zpckCpgyhmYiDUe/P4ygT/s9hqUsCpgEEZiQvR5huQICU+EcOAA52IOqrg8BDC6fNhOp0Ra+MYFo9VKhSql7vCGoKuAOFN5jFy/MI6oKB7Q0j2h3jXhTwaOf3Aezt91jbFo8FdOgijLkUD8c3iMQ1DCaDv8NAPCsci7GVw/+W/KWnwQVIqoFD5gnOj6nkI0JR1t0lgRMjsllConD00jPbTlWFKHeTDjUrX04fXLCXbR9bfgikisxCkR7wXTFCZjD3V4EIyrssoiJNc6Ej51GpdRJCUYU7DzuxsaDPUb7+UgWIzB2WRpkrIYgGD6Isv59qDu+FgJTMVA1C4Gy8Umfy9KkzYWbrB4xNkCF2rXzuVzuAhcJuANh9PlizyEQVuHUBYzF7kr0sLSwyxLKbBY0VNjRUG6Dwhh26lFtJlkxUKVViJX3bkdt2zuwBbrQg0q8pc6P9vgxoVrscDu061zt2W/cHowoBfuMO9jlQVgZPVVQJGByjDGNOkcpJAD49LQxGFtpR58vjNd2lOaAx+N9Wig4EC7eZmxGBCZ+ocoivBdMT1wvGJ4+mlZfnjTXTyMFBsMYQ2u3Dxv2dxt/Y5Jeehu2JBaCmZIoCuPhIwXcezEmhfQRAKj6UMcmoQft+uDbYFhFpAALDx9u6A4UNoV0tMc/6LZAWEGZLmAE28gFDBB9/yVKI/GGdhU9OzD24F8AAH9TzkYEFmPeVTz8+jeFDkLlVU2sMDORGGM43hcYNLCylCEBk2OiVUi5W/QkUcAXF/IBj6WZRjrRH/2A2tVWnAuwLw9iNNoLJvZDZigDL4emUsfS6w3hvQM92NM+gIgS3fFalGjpbTapdCQ38lb0bENt+7sAhk4fAUDEWoEusRYAEGr7xLg931Op3YGw4TkJR9SCVc+EFRXtCSqhAmEFTkEXMHJZVn4Wf/8lKqceqNZK3Gvb3kbd8TUAgD9FzoXNIhrCJ55gtZYOnIIjMVGsQsxE6vKEEIqo6HCTgCFSJNvTqJPxJT2N9I99XSU54PFYX/Sci7WXCU8h5aIHDIf3gomvQhrKwMvhze32dXiKNg2XDwJhBduO9mPT4V5jA2HGovDKldxHYHgKqbb9XUhKAP6y8fBUzhz2uTrtzQAAuSdaiZRvAdE1ELvQFcoHc6zXn9C7EQirKIN+jrbsCJhqpxWiqLUlsFlE9PvDRkSYd+Qt798NkUVwvGw29rAJGFflgJjEf+PTOyvPiJ9KXQAxyNeFHm9o1HhhSMDkEMaY8Yea7VlI8UyoceLksRVgDNhypC+nPysXnOiLRmB2F2kEpqAppPbhIzCTapyQJQH+sKJN6i0QYUXFfa/txgd5HnGhqgwHu7zYsL874Y6dY+4dkk1cNsuggYK8lJbTOXYxEna9i4M3wasciHonvPkWMHF/g4XwwTDGkv4tx0RgrNlJIUmigEqHVesJ06SZ5XkayVsxFYpkM45dV7YEAJKmj4Do9Z8mHEW3SRDmu5Q6rKhGA0BFZUNOvC8lSMDkkGAk2gI8l7t2zmz9DVdq5dShiIpO0xtqV1txnr8/DymkaAQmtvHVoW6t9HcoAWORRJxUF43CFIqXt53Af761Dz95cWdef26vL4T9HcP3wZFVXdxYsytgBEEYlEYK2ccgbK00vh/O/8JhY7QoTVP4sGG6zGc33mBEGSRYChGB6fQEk0aeApGoByZbERggaqQ3p5EAgImyET1TJBteVM4CAIxLUIHE8ZU3Q4GICsGPSP9R4/Z8R9Pa3YGYBoAdAyRgiGHwmMLXuaxC4swsUQHT7g6AsejG9FC3D4ECmNyGg++aHDkUo4nKqPd2DIAx7b4xLluyhwIApnIjb0fholgfHuoFABzo9BTl4DqrnkISsyxgAC0FEYMgGEbOkLUK/XULUnoeLmCmCUcN83E+F71EA0XdgUjer+fR3uSRRHMVkpilCAwA1LhiBcyBTi8GdPHWX3sqAKBj3BLsdWvL51ARGCZZ0SFr6f1C9vWJtxV0eoKjIs1MAiaH+IxBjhLEETZZSoVZTdruvFhNsMngIeJJNU5UOmQoKsP+zuIzohoRmFx6YFxRAcM/YAwDb0P5sL0uputG3j0F7AWzuVUTMN6QknQwZcFgDDYW7R2SbaoSGHk9lVpVUdfY88DE1DYyPl69IvSgo0OrLMznopeoUkVRWF7TWN5gZFAq1Uw4GIBV0M4nW1VIAFBhlyFbRNSUWTG+2gEGYMdxbVN4aNYNODB7Obaf8kN06lGMoQQMAHQ7TwIQW0odiqh5K2f2hSKDStAVhRkDJksZEjA5hEdgcjE3JxGz9AZnrT0+Y8dQCvAKpLFVDiNFUow+GL6A5LKRHd/Bqwzo00P4Q81AimdaQ2F7wXiDkRgBfVhPfRULohKECG3hyEbvkHgqHDLiOsrj0MxvoXXaVdg35+ahz830uIi1Ar1SHQBA7dgFQFv08lFKraosqfDMpw9mqOgLALBQ9G9cymIKCUieRgrZ63DglH/D4YATDFrzu4oEotXMgO6DaQgejLk9X4L0RJKijtFQjUQCJofkchJ1IqrLrGis0AaKFWslTyKO6xVIY6scxhyS3UV4/vx65tLPZLWIqNA7gvboPphUKpA4vJndvvaBgqRvth7ti/GgHO4urp4+khI9H6sj+ykkSRTgssUuaMGysdgz/3aEHA1DPq6pMnYn31OmjRRw9JlSD3lIrfb5w1CUxH87+fLBRBQVx/uHFjB+jxYVCQsyJDlxGXOmxJdTbz/WH5Ny4VHj4aIvQLSUekLkcMzt+UoJJqtK7fQEizLFmw4kYHJILidRJ2OmnkbaeaL4BEAyeI5/bKW9qCMw+UghAdF5SLwKJJUeMJxJtdpMGG9ISbrzyiUftfbFfF90AiainU+AyXDYhvYTZUqicurhGFNuG+SfCVRrO/ca/wGjCVo+Fr2hKlTyNRNpX6cnqYgCtEqaAye0Jn8RyTlokOJI4QJmyhgXnFYJ3pCCA13RaOLRNAQMdD/TFByFL5j+UMeRiIxebyjp30w4oqLXVzqR+kSQgMkhvOw2HwZeDi/921VCRl5DwFQ5jChDMQoYbx5SSECskbfbEzT8CNMbhhcwVouIyXVaZKEQaaTNhzX/S0OFJg6KLYXEu/D6YMvZxiITATO2ymHM4uGwOm3hO4kdNapG8pF26BxCwHiC4ZybP1u7fQk775rZ1eYGgvrft3Xkk6jjscsSnDYJkijg5LGx5dQAcFxPbw1VgcRRqpsRYhaUCUGEuqNRmKHEqKoydLgD2HKkD+v3d2ecOozfxJzo98dUs3WWeDUSCZgcko8uvPFwAVBKlUj8TdZU5cA0fZE+0R9Af4Hnr8Tj54M5cxyB4Ubebk/QEHITa5wpL7jGTKQ8p+EYY4aB97J52nTew0U2FoJHYHyw56w3U6KOvEPhsEqoKbPCaZViFmJ/pRaBmS4exRH995jrUmpfKDLksEFVBTw5PIeOgUBKFXQbD/XCKWiLr2Ipgyxlv0iCtzSYO64KAPDx0T7jvnQiMEyUcUTU3g9S1y7j9kRNFvv9Yexqc+PtvZ34+Gg/uga0MvJMUuqKytA+EBUwh7q8uOPvO/DoP6JenI6B0mt6aoYETA4xPBN5TCHxXjC72wZKpkwumk+2o9IhY2xlcfp4oibe3AqYGlM33nTSRxwuAvM9lfpglxe9vjCsFhEXz2kCoO2miwlDwDBbzjYWNouUlk+qUf97FwQBLlMUhpdfNwq96OzU0iW5TiElKp+OJ1dGXncgjB3H3BguYxJWVGxu7TV6wCgWZ9YjMEA0Enry2AoIAI70+tHrC8ETiBibq5RSSACOWScDSOxnCoQVHOryYv3+Lmw82IOjPf6Y0RcAcKIvkHa0pHMgGJOG++hIHxjT1wb9lxwMq+gv4TQSCZgcwhW2K48ppOa6MlgtIrwhBUd6i2vxSMRAIIwBfVAcNzHyxbrYysG5gMl1VRmvgOj2hNIy8HKiU6nz+/vbrPtf5o6rxFT9HLq9oaKqiJMUnkLKXQQGACrTSCONNZl3zWkkxVqOfrkeACB2aSMFcp1CGip9xMmFDyYQVrD1SF9KLe53HHfDF1Iwxqr9XUUs2ffAAJqAEUWtsoynZbcf6zc2XHUu6+AJ5Drxp9Pl0Eqpqzz7jNsUhWHT4V68u68L+zo8Q0a+AC2qzmdTpcKJOBM0j8oHI2pMmXwpR2FIwOQQD/fA5DECY5FEYyrxJyVg5OXpo0qHbPyepuuL9Z6iEzC5r0ICYnvB7EphhEA85lLqfFYZbNL9LwsmVcNlsxhCrJiMvOYITLk9fa9KqlTFN7RLQnWZHBPRiz8nt0tb+FwDe8EYQyiiJkw9ZANFZehLoTdItiuRIoqKLUf6EAyntjhvPKSNqJhVqy1fuYrAaGMFtOsxV69G+tgkYJJFX2SLiPHVsXO23OVaNK0+EFtK3esNDRtx4oQiasrewEBYiWmGae7mDcSWqJeyD4YETA7hC14+PTAAMLOxdDry8g+DJj2MDqBojbzmxoS5hIeuOz1Bw8eSTgSmua4MogAMBCJ5bRn+ke5/WTCxGgAwqVb7EC9GAeOFPafXsTrFCEx86XS8kTdcqzXBmxhpNdIW7x/sxr6Ogaz3hOn2BmPazSfDG4xkbRggYwzbjvXDE0hNlAUjijHrbVoVFzBa5V0u4OlcXk6987jbMKYnEzDjqhyDjNyBGq2UelzkCKBmHkVrdweGnPNlPs4sjHa3D8B8yY6ZBIwvpBRVlDQdSMDkkHxNoo7HqEQq0plCZk7oPWDMHwYzGqLnXyx9ChhjRs4619eTl1HvONYPX0jRKotqU+9ZYrNIxvH58sEMBMKG0XDBpCoAWkk3ABzuKZ5KJCmsnYsftpx6mZxWC2TL0B+vkiSgocIec5vLaomZ9RjQpxlPE44aU5FVFTjU5cOGA92D0gQjoWtgcPRFCntx8ns/QP2Rl43bGEPWFrzd7QMp+W44Hx/tRzCios5lxRi79vmqys6cdTrnm4mJtU5U2C0IRlRs1CONiSqQRBEYX+1ARVwkTaqZjACTYUMIDu+REZ3TrrYBBCNDi6D46iO+mbVK2t9kfJPAUp2NRAImh/gKkEICgFlGJVJxRTASwUuom6qiH+RT6rWySHcggvYcdosMRhTc88onRkh6KEJKdDBn7k282ocmL9ueOsYFi5TeW3VanmcibdENguOrHagv167lxBotAlNURt6w9vfmZface5kSjRUw01BuH5T6EEUh5vPCo1ciTROPGQKGEwyr2HHMjQ8P9WQlrWMeIMppbH0BTa1/x/StP4+5PRs+mFTKpeP5QH+vfmpSFera3gEAROy1Iz6XZFTYLbBIAkRBwCl6FIb7UBJFYOrL7bDLEuyyBKtJwNa4nNjHtEokR++eEZ1TOKIO+dnuDoQHRbQ+0TezLVO039XROH9kqXblJQGTQ7x5KruNhw91bO3xxQyULEaOm8YIcGwWCc26aS6XUaS/bzmO/153AD/8y8fDHms22DmTGPeyBfeOcNJJH3Gm5Xkm0ubDfQCAhZOqjdsm12kC5lCR9IKRwh5UdX4AQI/A5Pg6DtcPZmyVPeHt5jSSt1zrxtso9KK7uzPh8X2+MDYe7MHO4+mZPM24A+GEHpTaE+sAAHbfCdh8bTHHj4RUy6XN+EIRbDuq9WK5wroWVd0fIWIpQ+f0r43oXIZCEARTOXV0qrgkCEbXczMTaqLeF/N1rLBbsJdpQx2l7t0jPq+ugaCx+YsnvvNuvz+M430BCAAumKmZwjsGgjFRHG8wktdp59mCBEwOKVQKqabMajQS213kaaRoF97Y3Uw+OvLyniUHOr3DNlzj6SOrRUw7GpIu1XECJh0DL4dHYPblKQKzOc7/AgATazQRWgwRmJq2d3Hm6kvQ0LkeAPARZubE+GmmypHcyOu0SkmNvuWmUQSKtRwDVm0EgbUn+c6dMe29tH5/F470+NJOvSZK4whKCDUd7xnfV3ZvNv49klLqVMul49lypA8RlWF2RQCf2vcQAGD/KSuglI/N+FxSgU+nnj22AvxPpqHSNuhzoNIpx/QAMs9IEgQBx+RJAABH38gFDKCl3wJxoyUYY4MEDG9qOqHGaTRMZIiOcOGUYhSGBEwO4bv2XJZrJoP7YIo9jcRztWPjwrHGTKQcChhz2/s1uzqGPNafpwokAJAlMeaDMBMBw8uY97TnvhJJVdkgAy8ATNZNvCfcgUEftPlCCnsw88MfYcHb18LhO44Bxzh8NXQ71kpn5fxnl9stSUVS0xD9Q+KNvL5KXsFyYNhdckRh2HXCjb99dCytRpCJpk9XdW2CJeI1fR8VML6QktE0ZcYYth/tz8gE/MFBLX10l+2PkMNuuKtPxpGpX4clB03szPCIqNNqMd5XidJHE2tiK4/ir2OnoxkAUGmaSj0SFIUZU7I5XZ7QoCjcJ/pn6Jx6G2Zs/jGWlWkR52Mj9MF4gpGCNxslAZNDotOo85tCAswCpngjMKrKDBOvuQoJMEVgctTMzmw6BYA1uxOH5zn5HgvBS6mBaFVZOkwZ44IgaOHjrjRMkpmwv9MDdyAChywZs7gALRLoslnA2OCcez6oadeiLuMP/AkAcGTqFfjz6c/gPXV20v4d2UQUBVQ4Bv+9CMLgv3czrriFL1DNjbzHhp3QrDKGx9cfws3PbMVdL+xIKfoViqgJIyq1bW9r91urAACVJgEDZBaF6fQEM+plMxAIY+cJN84Rt+G0gTfABBGfLLwLEKWc9IAxY5ejjQkXTa+HgNhUKT+mvjx2tla8kbe/XPMz1foPQ1Czs/D3ekNGl2ZgcPqIMYad+hrwect6TNj3FFYGVkGAiqN9sX8bbn845Y1Gny+EDw/1ZJyyzBYkYHJIdBp1/iMwM4u0GZyZbm8IIUWFIES7kXL4+e/t8GS9XBQAth7pB2NRcbnhQPeQu9t8deHl8F1fpUM20oHpYJclY0eYayMvTx/NHV8J2RRWFwTBOId8llJrUZc7sGCdFnXxl43HpkX/g90L/h1eaL9Lu5yfj77KBGmk6rLkDdAALQJn/jvz6h15zZVIiVAZw+83HMb6/d0AtIjFnvYBbG7tHXJh6vYGE6Zz6k5oAubQzG8DAMr7PoEYif58d4qlz2YyTSdubu2DzEK41/Y4AODI1K9joGYOAOQ8FQhE00ifaq7Bf1+5EKdNqom5f0KNA4IQex7xRl5UjIeX2WBBBA5P7GTqkbCvwwNfKIKwoqLTE5cWGgiixxuCJAqY43sfAFCp9GKucCChGE6lJ0znQBAftfYN6hZcCEjA5JBCVSEB0ZECu064i3akAPe/1JfbYhY+AJhQ7YRDlhCKqDiUg8WPpzwumNWA8dUOhCIq1u/rTnp8vprYcbhxcEZj+aAPxlThRt5cl1JzA++CuF0pYDby5kfAVLevx5mrL8X4A08DAI5M+Ve8d+EL6K0/E0C0giRfQjSRkTfe75UIc/rBY5qJlEzAMMbwvx+04p19XRAEGK3v+3wh9HhCeO9ANzqS9A9JVD5t852Ay70XTBBxvHkZAo5GiExBZc8245h0IzD9/jD6Mmxb/8HBHiy3PIfxrA0BRz32n7LCuC/XKSQgWhkIAGLc+1EShUEpcI7ZB1PtsmMvGw8AcPXvS3h8Jigqw87jbrT1Bwb18TFGkdRZMabjXeP2C6TNONrrH5ReHq4r7/E+Pz4+mlrH5HxAAiZHhCIqQnrkIJ/TqDmlMFLgRIIKJI4oCkZH4VzMRIqaTqtwvu7MX7M7uQ8mOkYgPwtfXbn2gZlJBRInX6XUm/Tf5cKJgwVM1Mib40qk4ADKXr8FC9ddA4fvmBZ1OfdJ7F54JxQ52kPHEDB5SCEBWgTNvN5ZJGFQqiER5o68PALTIPSht3vw3yhjDH/68AjW7O6EAOAbZzUbTQS36x6JiMLw8dF+bD/WHxPRZIwlLJ+u06uP+mvmIWKrQl/dfO31mNJI6VYiZRp96fOFoHTswg3SCwCA3fN/BEV2GffnqomdmRqnFcn2EU1V9kEbMI5ZiNa6rNijcgEzslLqePp8YexLMH2eWwg+V3E4xs+0WPwooYelzxdOmhY61OXFzuPpm69zCQmYNPGHFDz6zoFh0xrmdt/OPHfiBUpjpMAx3f+SbEeaq5lIjDF8pHfzXDCxGufN0AXMro6khld/nuYgcb56+kQsnlWPr585KePniE6lzl0Ept/0wTl/YtWg+41uvLmeSv3+I7BvfRIAj7r8Hb0NLYMOC+Y5AiNLYkwEtqHCnlLTtZiZSLILXnujdvvA/kEC5C+bj+GNTzRhc3XLZLRMqTV6lmw/1h/zvG39Abx/sMcYGdDnCydMBXD/S1fDOXh1exv2208BAFSZKpGCYTVlz0QgrGQ8c2fToW78TH4MVkFBZ9N56Bx3Ycz9ufbAANrnabIp4/HmXTPm61hTZsUePQJT5t6b7CEZEx8VURkzPjvPwSYAQGfTeWCCiNniYYxFl9EJncNY4nlYe9oHEgqkQkMCJg0YY/jqbzbgpy99gsdMI8kTwf0vVouYVJ3nmmIfKXCCl1An6Ycx3ahEyu75H+zyos8Xhs0iYlZTBVqm1MIuizjeH0hqGubXM18L3ynjKvHo1acbv4NM4CmkXH7wfHREi75MrnWi1jU4spC3cQIt30Wo+QJsOvcJPeriSnhYvgUMEJtGSiV9BAz2zfmrtDTSFByJKX/9+9bjeHWH1p/l62dMxDnT6gCYWt+fcA9a2PwhBZsO92JfhyfhYiUoIdS0bwAAvI35+PPmo7jvkyoAQGXXRwCLCqhUozCtPb6Md+7Ve/+MM8RdCAl27F5wB+JDIfnwwACxaSROrcs65KbGbOStdlqNFJJ5KnWuONrrhycYgc0iYmq/1j7gxOQvoL92HgDgfOmjhD4Yc6pRVRm2H+svilYIiSABkwaCIOCKM7Qd8f2v78GhruRhcW8BS6g5xT5SgDexi58Hw+ECLNvN2PjU5DnjKmG1iLDLEs6aon3wr9mVuBqJp5Dy3ZRwJEyp11In3d4QulOYMpwJmw8PLp82w8cJHO315TZvLtsxsOx/0dswdHk0b96VrxQSEO0H47RJKU+pjjeA8jTSdOEoWvWU8IsfH8cLH58AAHz19AlYpEcSAaC5tgxOqwRfSMHBBJ9TjGkpgUQLU1X3ZlgiXgRttXi5S3vOjyMT4IMNctiNMvcB49hUOvJGFHXQTj9V3F0n8M2AZtzdNesmBMrGDTomHx4YIOpLMzNU9AXQrqNNN4zLkojjVq2U2uU9DEHJbXUg37h+ps4D18BBqIIF3Q1no7PpfADAYnFzQgHT6wshrHce33q0b1BlUzFBAiZNvnTaeJw9tRbBiIrb/rotacoh2sSucAtesY8U4DvJZAY4nkI61O01UjjZwPC/mEyn580YAyB5P5ioibdwgjRdnFYLxuvzWnIVheFiMJGBFwAaK+ywSiLCCkvaOTQbKCrDnzYewXNbjg35tU1PqeTTl8YjMMmG/yUjpiNvhT5SQK9EenV7G57bchwA8KWF47F4VkPMY0VRwMljtQ1AfBppOGr16qPOhnOw7bj22VHhdGKronUFdrRtNI5NJQJzvC8AJcOKlQmb7ka14MEBcTI6Z1+b8Jh8RWAqHJYYsVRmsySMOsZj9jMpZY1wMwdEpsA5MHQUf6RwAXOJQ+v70jfmNCjWcnSN1QRMi7gD3T2DCxdUVZtRt+lwb1pzqgoBCZg0EQQB93xhLuyyiA0HuvGnjYkHcxmTqAu44BX7SIHjw6SQ6lxW1JRZwVh2jai8gd38CVXGbXz3uqm1F/0JKiXybeLNFjwFtScHAkZRmTEZOFkERhIFTKjRFu5cppF+v+EQfrF6N178+MSQXzyaF9/tOJfYZQkOqzSoVcBwmBc+80ykDfu78efNRwEAl80biyUnNyZ8/CljdR/M8fQETJ3uf9liOw3BiIoapxX/5+KZ2C7NBAC073zbaGI3MEwpNWNsyNLvoajueA+n96+GygS8MfU2MDFx9ErOgwcG0D77zWmkibVDR184MT4Ylw179JECrhz4YDgRRTXe86eFNMHZ1XQuAMBbMQUDjvGwCRFMGfgwYWR0T/vAiLot5wsSMBkwsdaJ739WG3P/s5c/SVie6C3QGAEzxTxSIBRRjfx7sgiMIAhZ78jrCUaM34U5ajChxolp9S4oKsPbewenkfwlKmC4kXdfDiq59rQPwBOMoMwqDdktONdTqX2hCP5rjdbddN6EKpw3Y8yQXxef0ogrzpiYk3NJxpQxLtgs6f3txEZgtOhHg9AHOawJkkvnNuGSucnb6PMIzKFuX8qLkc13Aq7+PWCCiL8PaIJl3sQq1JRZMXneeQCAacEdeGL9ITDGEI6oQ0ZHOwaCGXVhFpQQpn7wIwDAH9ULUD/r00mPlfKUQgKiPhjZIqIpwSykRJh9MFolkpYGc/XnTsAc6PIiFFFRb4+gqfdDAFEBA0FAz3gtCnOesAntScrrSwESMBly7dmTMXd8JQYCEdzx/I5B93sL2APGTLGOFGh3B8CYZnKOH15oJtszkT4+0geVAWMr7WiI+wAyyqkTpJG8RiO70kkhAdGRAntzEIHhqbh5E6uGDOPnupndE+sPocsTxLgqB2449yRcccakIb+WLRg/6NrnmnSjL8DgSiS/owmA5oO56ORG/MupQ88AqnJaMUFPIe5I0cjP00f91XOx/oS2M1+gV5fJk7VeOieJbdh78BCe11NYQ6WRMo2+TN7136j0HUYHq8JLdd8c0kuYjzJqDvfBjKtypFRNBsSVUpfZDCNvLiqRODx9tKxqH0Q1DF/ZePj0waAAjDTSedJHOJqjjUU+IAGTIRZJxM+XzYVFFPDqjja8uv1EzP2FmkQdT7FWIkWHONqHbNSW7ZECvHx6fgLPxnm6gFm7p3NQ8z9/kVzPdJnWEO1onG2MBnZJ0kecyUYlUvY/KPv9Yfz3Os1U+u3PnJRySW2hKgPTwWm1xEQXvPpMpGunBbBswbiUGhzOSVJOnQyePtpdfgY8wQhcNotRzRaxVsKjm4kXiHvx4rYT+MferqTRnT5fKGE6djgqOz9E8yePAADuCl+J2VOGjpblywMDaNVrTptkeMtSwWzkrSmzYjdPIeUwAsPLpy+QtgAAupsWxVRv9dWdBp/gxBjBDUvb5gTPUBoU/7u4iJnVVIEbztVU7Y+e3xHzZi3UJOp4ZjUV50iB4SqQONmOwAxVNbNwUjXK7Rb0eEPYerQv5j4eUctn+W024BGYzoFgxn04kpFogGMijBRSDiIwj71zAP3+MKbVu3DRKYm9IPEIQn4XvZFQbhts5J1ja0u5OzPvB7Pj+PAdubXyaa3cdnVIa9N/6vjKmN9VX90CAMBXGo4BAH7/3mG8kyDlCmQWfak/uhoL1l0DUQ3jTWU+VgstMV61ROTLA8OZ3VSR9iwt7meqdVmxV29m5/C0QowM/Z481O3Fva/sSsuIHQgrONDpBcAw26NNE+9qWhRzDJOs2FehRdQmd7+d8nObCStqzgfFDgcJmBFy0/lTcdKYMnQOBHH3y58YtxdyErWZWUU6UmC4CiQON6F2DATR6x2ZI97cwC5R0zVZEvGZaYmrkXzh/A5zzBYumwWnjtcWsb/rIf9s0OMN4YBenpvod2mG94LReoFk72+w2xM0+jF9/8LpKYuSUhEvQGIjb1kaO/eTxpTBIUvwBCM4NEyqoKr7I1giXoRsNXi+TYtGzo8Tp/26gDlN2oszmmugMIZfrN6NT07ELrD+kJLSXB0zE/b+D+as/x4kNYQtzrOxPPw9zB1fPaRYEEWknMrJFlXO9A3gFXoaqbbMik5Uooe5IIChbOBA0scwxvCH9w5jX6cHv3nnAHpS/Pzb0z4AhTG0lJ2AM9gBRXKgt/6MQcd1NGmepvn+99J+PQDwzIdH8MVHNuCVbSeGPzhHkIAZIXZZws+XzQUA/OnDI1i/rwtAYSdRmzmprgxWSRspMNwk23wyXAUSx2WLlgKPNIp0uNuHHm8IVkk0DI7xnGeMFYjdVfrzPAspm3zpNC1k/aeNR7ImIHj0ZcqYsmE/0MdXOyEKWiVXosZpmfLIuv3whhTMGVeZtBInEaUlYMwRGC1943KnPkfHIopGFHbHsaHTyNz/criqBd1+rQFa/Pukr1YTMBU92/CNM8ZieoMLgbCKax7/MKZfSFqN65iKqVt/gRkf/RQCGI5M+RquD3wPAdjwqck1Qz5UynP0JVO4EHVaLXDIlqgPZoiRAptb+4wZYr6Qgkf/cSClTegn+ufkF8o0b2ZPQwtUaXC5d6j5AihMwDS0gvWlN1ySMa0CsbXHZ6THCkFpXP0i5/TJNbhSb/n+f/66Df6QUhRVSIDm1eEzcXYWkQ/mRH9qERggOg9opDORuOn0lHEVSStCzp2uRWC2HeuPqS4r1RQSAPzLvLGwyyL2dniMCNRI2Zxi+gjQjNo8VZitjp5t/QE8uUH70P3+hdPTGniZj9bz2SJRJZIt0ImWV5Zg1sb/i6aDf4Fj4BCGUgs8jbRtmDQEHx/wDuYZj4v3CvldkxCy1UBSQ6ge2IXli6aisdKOdncA1z6xEZ6gNhWZp4iHQ1BCOPn9WzB596MAgH1zbsaTVd9Fl0+BzSIaHp5k5NPAOxIqHHEjBfhMpCRGXkVl+NsWLU131kk1sFlE7Gn34OXtw0c7dumf8y0qrz5alPA4a3kdtgpapZn9wOupvRCdwz0+9PrCcJiagBaC0nknFzm3XjQDTZV2tPb48MAbe4qqc2sxduTlEZimFKozsjUTiS+68WFxM2PKbUbKZa0pCuMPF0dVWSZU2GV87hStguWZJH2L0mWT7iVamKSBXTzZnkr9n2/tRSii4vTJ1YboTJV8dW7NBmVWC7jeUmQXjk+6DAwCygYOYtzBP+Pkjbfh7FcuxKf/fhbmvnsTJu5+HBU9H0NQo3483g/mYLcXniR9W2y+NpT37waDgD/1aqmqBYm8J4KAvlptsGNV1yaU2Sz4t/Onocop45MTblz12Pv45Lg7pcZ1UmgA89+5Hk2tL0AVLNjxqZ/jb2VfwePrNWF63oz6mG7ECZ+jRASMzRI18taajLyD0oFMRVn/PgQ/eBwrvQ/hTdsP8IcTS3H/SZoY+fvW49jfmdyQPxAI40ivH1UYwHiPFoExyqcTsMWpzQtrbFub1uvZovfS0sawFG6NIwGTJcrtMn72BW3g2aPvHDBMoMWw4M00OvIWn4BJpTtptmYi8QZ2w0UNeFM783RqHlHLZwv6bPLl07UPzBe2Ho8ZNJoJEUXF1iPabj5ZB954sjmVurXbZzSQ/MGFM9KKvgCls+gBmr/D7LvaecYvsO6yD/DRp3+DgzO/jd6606CIVtiC3ag/9hqmb70Hn3rjizj3uU+h8dBzALQd/7gqBxhLHoU1hjdWnoLdbiskUcCc8YmjH/11CwEAVV0fAdBE/w8vmolKh4zNrX34zh83G8Mik2HzteG0Nf+Kmo73ELGUYcunf4PX5fPx328fgMIYzjypBpfPHzw2IJ5SicAA0X4wNWVRI6+rfw+q29ejeccqzHv7Opz73KfQsvpz+JfWe/EVy1pMEY5DZAouOvZfuGRCCCoDfvvOAaNRajx8k/eF8k8gQMVA5QwEnU1Jz+lw7WcAAJM9H0EKp16pyCO56W4esg0JmCxy/swG/MupY6EyGH6TQpt4Ac01DxRPJZInGIFb3wk2pZRCis5EytTD4QtFjNe/YFLVkMfyfjDv7O1CKKLNBOFDAItBkGbCGc01mFzrhDek4KURmu52tQ3AH1ZQbrdg6pjEQxPj4UbebERgfvXmHkRUhs9MH4MzTqpN+/GltOgBsUZeQCtn7m5ahP1zv49N5/8Ra7+wGRvPfxp7596CzrHnI2StgiXixeyNt6Gm7V0AwCl8rECSrrx1uv9lk3waAG0MSbKxGX11WgSmsnuzkbpqqLDh6W+eiTqXFUd7/bj31V1JG6SV9e/F6W99BeX9uxG0j8Gm857CeszFqrX7EFEZFk6qxrVnNadkzrWUQDk8h6cDa11W7GGaOHP4jmPhumswZceDqGt7B3LYjZBgw3vqLDyGL+DDlofRM+YMSEoAPxIeRV2ZjC5PCH94rzXhZyHfpF5k3QogefqIY62fjoNqA2SEUdv+bkqvo2MggGN9fogCcM7UwqWPABIwWeffL52NatPANmcRLHh8pMDh7uIYKcCnUFfYLSkJvOa6MsiSAE8wkvFQuI+P9kNRGRor7MOWbs8ZV4k6lxWeYAQfHu4x0kdAaZp4Aa2rMTfzjjSNZE7FpVoBYvSCybCxGWdv+wCe+0jzBvzgwukZPUcpRWCAWB9MIphkRX/dAhye+U1sPecRvP3593Bi0r9AZArmbvguyvr3GD6Y7cf6ocYtfIIaRk2HVj79nGcWgNg0a1Oc0X6g+hSoogxboAsOr/a3pKrA2GoH/v2S2agvt6HLE8LPX92FI3HXu7JrM05762uw+07AW34SNl7wJ2yJTMR/vrUPYYVh7vhKfPOc5pSvUSmJ0QpHNALTiwrskrRUnd85Dm0TL8Hu+bfjnUV/xhnscXw19CMcmvcD9E1YjF2n3QVVlNHQ8Q/cM3M/RAH44FAPNhwYPMfokxMDkKDg1OAmAEDX2EVDntO4GifeVDVjdt2xt1J6HXx8yPSGcuM1FYq0BMw999yD008/HeXl5aivr8dll12G3bt3xxwTCASwfPly1NbWwuVyYdmyZWhvb485prW1FUuXLoXT6UR9fT1uueUWRCKxC+vatWuxYMEC2Gw2TJ06FU888URmrzDP1LpsuOPS2cb3rgIOc+QU20iBY0YFUmrNoKwWESfVaTv9TPvBRAc4Vg17rCgKOHd6tCuvTxd9ggDYhsnJFzNfXDgeogB8eLh3RMMdo710qlJ+TLZSSPe/vgcqA5ac3IC541P/+WZKycQLDC9gBiGI2Hna3egdczosYQ/mv/NNnFzug80iwh2I4GhP7CagsnsLLGEPAtZqrO4bCwHaSAbO+GpnzDmokg3uai1dXtkVbYLW2u2Dw2rBDy+aiQnVDrgDEfxi9W7DfC8oIZzy3vchh93oq1uAjec/jV2Bavzqjb0IRlTMbqrAjedOSSuqUkpi1IjA6N18r2Y/wbp/eQ/vXrIG28+8H0emXYU/t9WhNwDUl9tw9lQtuugrb8bBWTcCAD6z/z585RQtpf7U+60xUa4uTxCdniAWivtgj7gRtlbCXXPqkOfUWGHHGqalBGtOrAXU4cc+cAFzXoMfjg8eGtJAnmvSeievW7cOy5cvx3vvvYfXX38d4XAYF154Ibze6IfSypUr8cILL+DZZ5/FunXrcPz4cVx++eXG/YqiYOnSpQiFQli/fj2efPJJPPHEE7jjjjuMYw4ePIilS5fivPPOw5YtW7BixQpcf/31WL16dRZecu65bN44fO1TEzBnXCVmNw3tos8X0Y68hU8jpVOBxBlpR95Uu8ZyeBrprV0dJkO2JW2/RTHRUGE3XtezH2YehdmcopfIDB981+sLoz/DIXHbj/Xjle1tEATg+xfOyOg5gNIToS6bBen+2THJiq1nrYK3vBl23wmctuE7mNeglbtvi0sj1Z5YBwD4xHkaGERMGeNCpb6ztssSKh0yal2xpfK8oV1V90fGbXwxrXTIuGXJDEyrd8EfVvDAG3vw8dE+jN//NBy+Ywg46rH5M7/DIZ8VD7y+B/6wgukNLiw/b0raHZJLKQLDjbz8d9npVxG0Rt9DnkAEr+3QNvuXzRsXI7QPzfwWvOXNsAU68R3lKUxvcCEYUfHbdw4gomrpbZ4+usy1HQDQ3fhpMHFo8WuRRBxxnQo3c8Ie6kVlz5Yhjx8IhLG3w4NKeHDj0R/C9c5PgXW/SO8XkUXS+mt59dVXcc011+Dkk0/GqaeeiieeeAKtra3YtEkLV/X39+Oxxx7D/fffj/PPPx8LFy7E448/jvXr1+O997RmOa+99hp27tyJP/zhD5g3bx4uvvhi/OQnP8GqVasQCmnGr0ceeQTNzc247777MGvWLNx000344he/iAceeCDLLz83CIKAey6fixe+e07RlN1GZyIVPgKTTgUSZyQdebWeBTztUZXSY86ZVgdJFLC/02t4Z4rlWo6EL+tppL9sPmpMFE6HzoEgWnt8EARtBlKquGwW1Lm0nWempdT/8ZoW7b1s3jjD2D0cDquEhgo7pjW4sHBSNRbNGIPJdWUZ/fxCYZHEjMzjEVsVtnz6twjZqlHRux13hu+DCHVQV1c+PuC1kNbPyvwe4ZHb6rheP/16JZI5AmPGabVg5eLpmDu+EmGF4XdrtmP89lUAgIOzb8Ixr4D7Xt8Db0jBSXVl+N7509IedimJQkYzpgpJhV1GpV2GJAhQGdBnEvOvbD8Bf1jBhGoHTpscuzlgkhWfLPwJAGDCgafxw5PdcFolHOr2GTOp+Ob0XGiicjj/C6epphxrVS1SM+b40Gmkj4/2w8pC+B/nA6jwHoTiGgvM/3pKPycXjGgr0t+vvRFqarRmQ5s2bUI4HMbixYuNY2bOnImJEydiw4YNAIANGzZgzpw5aGhoMI5ZsmQJ3G43duzYYRxjfg5+DH+ORASDQbjd7pgvIkoxjRRItQuvmZFMpT7S40eXJwRZEnDy2NQiYpUOGafpFTYv66bXYiiJHynnzaxHnUvzKLyVYGjlcPBU3PT68pgpu6kwyfDBpJ9G+vBQD9bu7oRFFLBi8bSEx1hEEWPKbZhS78L8iVU4d8YYnD21DnPGV2JSbRmqy6wlZfo0E2/kTRW/ayK2nv0IFNGKWe538SPL77G/02NUsVj97Sjv2wUGAc/w8mlTZK2+XBMI1U5rTLqGd+R19e+BFEr8nrRaRHxn0RSceVINrhFfQVmkF13W8dhStxT3vbYHA4EIJlQ78G8XTMuoFHdWU0XGv5dCUW63QBQFVJdp593t1Ro79vpCeEuvevzC/HEQE4Tc+uo/hWPNXwQAnLHjLlx7hlbJ9Or2Nnxywo1dbW6MRRfGhQ6ACSK6G5NP8DYzvtqBNxTdB3N8zZDHbmntwX3yr3Gq+gnCcjn6l/0vUDl8tViuyPjdrKoqVqxYgbPPPhunnKLlQ9va2mC1WlFVVRVzbENDA9ra2oxjzOKF38/vG+oYt9sNvz+xifOee+5BZWWl8TVhwoRMX9qopJhGCqTahdcMj8Ds7/SkHTngi+7JYyvT+qDk6ZY3PtHCuqU2iToRsiRi2ULtAycTM286XqJ4JmU4lZrp7eoBraswn60UT6VTxqkTqtBcV4Zal60kBjamSto+GBP9dfOx44xfAgCutazGVeKrxm697sQ7AIBjzlnoZhWYUO3AmHIt6mKXJVTqBQmiKBj/BoCQvQ4+10QIYEOmHSyiiG+fVoXvWF8CAPzYcxl+8so+9PnDGFtpx82fnZ5RZd/4GkfJRV+AWCMvAPR4tKzDC1uPI6wwTKt3Ddm8b9/cWxCyVcPVvweXBf6Kz0yrAwPw8Nr9cAciWCxr1Uf9NfMQtg1O8SZKRY6vdmKteioiEOFy74PD05rwZwcjCi5t/zUukd6HIljw8dmroNTNSuflZ52M3+HLly/H9u3b8fTTT2fzfDLmtttuQ39/v/F15Eh2GnaNFopppMCJfj6JOvUIzPhqB1w2C8IKw8Gu9HbwH7Wmlz7i8LEC3ANTqhVI8fA00prdHUlLXRPR7g7gb5u1CqB0/C+c6FDH9K7fO3u78MHBHlgtIr53wdS0f+5oYCQCBgA6JlyMvXN+AAC4w/J7yPteBRDt//IPNg9AbPVRfUVs+/nasjgfjD5WoCpJGonTvPtROJkPR21T8aJ6JnwhBQ3lNnz/whkZRVAqnTKm16eWQiw24o283d4Q2t0B/EMfQXP5/KGnjIdt1dhz6m0AgJN2/heumQU0VtqNSsml9o8BJG9eN77aiXgP+/hqB9xw4UNV85Uli8I4Nv03viFpQnTnp+5Fb/2Zw77eXJORgLnpppvw4osvYs2aNRg/frxxe2NjI0KhEPr6+mKOb29vR2Njo3FMfFUS/364YyoqKuBwJF70bDYbKioqYr6IKMUyUoAxhuMZmHgFQcB0/fzTTYNlYjoFgGn1rphGe6NFwEwZ48Lpk6uhMuDPm46m9Bh/SME3/+dDdAwEMa3ehc/NSd4cKxmZ9oJZtUab/fP1MyYNWwI/WslGquTwzG9iW8NlEAWGG7vvRnnXFtTovT/+PMDLp6uM4+vLYwVMTZyA4WmkZD4YQGtYN2Hf7wEAnZ+6Fd84ewrOaK7B9y+cYRiF08GqjxfI9wDHbGEYefXfZbc3hOe3HIfKtPYN01LwdrVN+jy661sgKUHM/fgn+NbZzbCIAmwIYX5EFzBJyqebquyDZpdVOWQ4rZIpjTTYB1N/5FUsOvwgAODP1dejfdK/pPyac0laAoYxhptuugl/+9vf8NZbb6G5uTnm/oULF0KWZbz55pvGbbt370ZraytaWrSWxS0tLdi2bRs6OqL599dffx0VFRWYPXu2cYz5Ofgx/DmIzCiGkQLd3hBCERWCoFXFpANPI+1JQ8D4Q4phXE61ayxHEAQjjQSMHgEDRKMwz344/IBHVWX4wbNb8fHRflQ7ZTx29ekZhf2NqdRpCJijvT68f7AHggB88zPNwz9glGK1iCMfmicIOHbWT/COOhcOBLFg7VWQwwPwWSqxOdKMMS4bxuuC3SaLgxa6crsc09qfVyJV9nwMQU3cX6p55ypIShC9dQvR3XguWqbU4pufPmmQGErx9HHKuPTSwMVIhV1GjV6JtPOEGx8c6gGgeV9SQhCwa+GPoYhW1LW9g9N9a/CNs5vxtfrDsLIgAo5GeCpnDnqY0yqhwi5jjMsW93QCxlc7jH4w1Z0bY3xNlZ0f4uT3fwARDP8T+SzaTvl2Ji87J6T1jli+fDn+8Ic/4I9//CPKy8vR1taGtrY2w5dSWVmJ6667DjfffDPWrFmDTZs24dprr0VLSwvOPFMLN1144YWYPXs2rrzySmzduhWrV6/G7bffjuXLl8Nm036xN9xwAw4cOIBbb70Vu3btwsMPP4xnnnkGK1euzPLL/+eiGEYKcP9Lfblt2Dkn8XAjbzoRmG3H+hFRGerLbRibQc78vJnRVtllo8ADw1k6twkumwWHujWBMBS/enMvXtp2ArIk4L+vPM0oiU4XnkJqcwcQCA/fbwKAUWFxZnPtP230hZONKIxFtuGh2tvxiToBsqpFQjdbFkCFiPkTq4z0RbLNhVl4eCumIiyXwxLxwpVgqrJj4BDGHvwzAGDfnO8nNmCkwZQxroyET7FR4ZCNCEzngGbi/dTkGkysSf195S+fjEOzvwMAmP7Rz3DWOAnX1Wtzlbqazk34u67Xr2ldnIABgPFVThxkTWiTx0NkEdS2a94op3s/5r17IyQ1hNeUhfil+A1Mayie7EZaK8ivf/1r9Pf3Y9GiRWhqajK+/vSnPxnHPPDAA7jkkkuwbNkyfOYzn0FjYyP++te/GvdLkoQXX3wRkiShpaUFX//613HVVVfhrrvuMo5pbm7GSy+9hNdffx2nnnoq7rvvPjz66KNYsmRJFl7yPy/FMFKAVyBlshjN0HvZ7G5PXYCZpyZn0sOl5aQ6o2/IaCij5jitFlx6qpYG+tMQZt7ntxzDQ29qH4x3f2EOPtVck/HPrHbKKNcjN60pdORljBlddy+bPzbjnztayNZYkqnjm/CN0K3oFrRr+Vff4PLp+PQRJ0ZACCL6a+cBSJxGmrL9QYhMQVfTuegfc9qIznlMua3kyt+TUW63GB4YABAF4PPz0v/7PjTjengqpsAW7MbUj3+J2hNrASQvn+Yl8Q6rNCiCOr5a+zxeL54OQCuntvo7Mf/t6yGH+nHANgvfC9+EU8bXFFXzwLRTSIm+rrnmGuMYu92OVatWoaenB16vF3/9618Nbwtn0qRJePnll+Hz+dDZ2Yn/+I//gMUS+wtdtGgRPvroIwSDQezfvz/mZxCZUQwjBdIZ4hgPTyEd6fGnPJDQ6BqbQdUMoL3ZW6ZoHTFHUwoJiKaRXt52ImFzuY9ae3HLn7Wc+rc/c5IxiiBTBEHApLrUK5F2nnBjb4cHVouIi05J33Mz2qgYoZGXc8q4SpxALS4L3okXptyJv4VOR4Xdgin6XKtE6SPOIB8MN/J2xwoYV+9ONB7RDJ/7ThlZ5NxplXDy2OLZ9Y+UCrtslFED2jyhdNPpgNYbZtdCbeM//sAzcHqPQhGt6GkYbLVwWqWYCN6Y8tjryAXMi0GtH0ztibcx7x/fgsN3DD7XJHw7cgsCsKVdCJFrRk+dITEs5pEC1z7+AW776zb8eu1+vPTxCWw72o9+X2YdUtOBVyCl08SOU1NmNUo896TQkZcxZkxNnZ9B1Qzn+nNOwvQGFy48uXH4g0uIeROqjI6ef996POa+431+fPN/NiEUUbF4VgNuvWhwTj0TJtWkXonE00cXzKzPyPA52vj/7d17cJT1uQfw7/vufZO9ZnPZZDcQQkgCIQmXAAaqtESo2FKoWHs80tqprdxara1z2tEOo9MzHm0rnTM9Kl6gjtUzrZ5KrQWnVi4CUiQWbBK5CQRCLlxCLgu57/7OH7vvm91kN3vJ7mbfvM9nhnGSffO++7ibvM/+Ls8Tr5on2UYtMg0aNHlseOJCGRh4b18r3wilUPslGK0q8NO7uA7m2rGA46bXe4uOtuV/BTcsMxErBc+h3GmWbP2eYNRKHiadGtNsaTBqlfhqReyji52ZVWguuFv8uiNrITzK0VNRWSMSpJHTSMKGiv19hRhQGaEe6ISxowEDGit2V/wWZ25qvXW07KmVSE6eSX0SkcWFNvzpWDOONnbgaGPHqMcNWiXyrXrkW/VYPN2G+xZNiev1Yyli568kx4Crrn40tHSHTUoudfTiqqsfSp4bs7ZCOEuKbPjbj4JvS5QyjuPwjflO/OKvJ/DHo01Y53utb/YP4buv1uLajX6U5Bjwm29Wxm3YWFg/E24Exu1heMeXwHytcuIKZaUSnVoBpYLDkHv8dZzKco3Ye+oqrvnqkMzx632UbQw+fSTISFeLI6Dd1nJ4OAV0Pc3Q9LShX58D09Va2Fr3w8MpcXbWQ+N6nqV2Y9ymzlKJQevtGTXo9ox7UfKZ8keR2fIB1P3X0R5i+/TI19SkU0Gl5DE45K2ppVUpkGnQ4KqrH+fN1Si++h7cCi2OL9mGA80GAC7MtBuhSbEF1JMnrSUReXptOf7w/UX45dpy/PBL07G6MhfzpljEkQ1X3xAaWrqxu74Nj++sxycXxl7gGa2WruiL2PkTEpEn3/0ML314Du4xivIJ619m5holv3MhUb4+1wGVgkNdcxc+a/EWOXz4D8dxorUbtnQ1Xv72/LjeQCLtSn3kXDvauvtg1CoDFlLL3XjrwQj8E3qdSiEu8Neo+LCjXf7TSG5VGm6YvaNzpvZjAGMoqvsVAKClYC16DbF/AHJa9ZIsVhcJo04FBc/F5e/SkMaM40u2obH4e2gu+Maox/UaxajRO47jRtX1EXagvWe6B+1Zt+DTxc+hO6NCHMX2b/CZKiZfakvGpFLwWDgtAwunZYx6rHfAjUsdPbh4vQev/eMC9p26im37z+HFb8W+cHOklig7UY/04G2FaGjpxv7TV/Gfu07gb5+14Vd3VwStznosxvovcmJNU+P2mdnYVdeGP9Y2QadW4P3PLkOt5LFt3Xw4LLHtOAol0q7UO497F+/eWW6PukfOZGbQqtBxc/xTvcXZBih5DkMehnKHSZyiyTRowi52t+jV4HnA10MQXRlzYOxogPnaP+FWaH3/1eC8b5dMLCxpKhRlpcf886kuXuuZBN0ZFejOCN55OtSUYKZBg7au4UKWDosOx5o6cbQvD7OWvgoAuH5zABfae8ABqIix+3si0QgMEenUChRlG7CsNBuP3+ktbPX+ics4d/VGXM4/6Pbgim/bYKxbYk06FX73nSo89fXZSFMrcLSxA1/+zQG8drhxVIuEWCvwyo2wmPeNjy/i+X1nAQDP3FWOeVHWzYmEUAvmUkcvhkK0hOgbdGN3nbetCE0fBYrXCIxGpUC5wzsKs8jvw0z2GOtfBAqeCxilETtTX/tEXPvSNH0d+vWxrRmzpKlR6bRItlhdJJLZwynUlKA1TR2w2zrPt5D3Usfw6Ohx3+hLYWa62AYhlVACQ4KanmXAspIsMAa8dOB8XM7Z1tUHxryL2EYOX0aD4zj824J8vPfwrVg0zYreQTd+/ucGfGv7x2j2jfD0DbrR0OIrYEcjMGP6QlEmck1aDPjmwzd/cTpWR1pUK0o5Ri3USh5DHiauhxppz8krcPUPIdekxYKp8Rv9mwzieeO7v3oqHltZKk4nqZU8zPrIzm/12wYstBQwdtTD0HkSQ6p0XCj5XkzPKSNdjTlOc0pt1U0EtZJPyrR2sOkjgUoR+HoLo60tnX3ih8FjTan9IZASGBLSg7cVAgD+75+XxIJL49HaJdSA0cbl05XTqscbDyzClq/OhFbF4+Dn1/DlrR/izdom1PsK2NnSNeIWQRKcgufw774FvHeU5eCR22ck7Fo8z4kFuxpDTCMJtV9WVeZN6k/hsUhTK6CKsgBkKHq1EgV+tVWyjOGnjwT+62D603LRpxsebblQ/EDQRoLh2AwaVDjMsnnNjbrEr+AItz07M3348ax0DdQKHgNuD67c6EfPwBBOt3lH31Nx/QtACQwZQ9VUCyqdZgwMefDqR43jPp+4/iWOFVV5nsN3Fhdg1w+/gDn5Zrj6h/DoW//C5je82zrn+lUXJaGtv60Qf9pYjd/eOzfhNxCxK3WQhbydPQPYd+oqgChKq8sIx3FYMt2G0lxj3If0x9o+PZJRq4RSMfw+6bTNAQD0azJwsejb0V/bqEG5hHscxSIZ00jhEhibXz0YnufEzRXNHb2ou9QFN2PINWljqlOTDJTAkJA4jsODt04DALz2jwsRF48LRdiBZI9xB9JYpmWm46311fiPL5dAreDR5uuyPJ76L3Ki4DnMzbckZeheWHAdbCHvrro2DLg9KMkxiIULSSAFzyHPrMOCAiuqCqzINevG/bqplTwsEU4fAd6/Df6jMK1T78KgyojTcx6DWxVdxdwck1bSDRpjFe+FvCPpNYqwOwj1amVAgU5hGulSR8/w7qMUnT4CKIEhYSyflYOpGXp09Q7ij7WhS85HYjxVeCOh4DlsWFqId36wGGV5RqgVPJaVZoX/QZJUY3WlFnYfJWoNzmRj0qkwM9eIJUU2FOcYYmqyCUS2+2gk/wSm3X4r9q+pxeX8r0R1jhyTFrNyjbIcJR05AqNUcEjTKGFNVyPXrENBZhpKc40xJ/KRjprY/NpGCH+bG9t7UNfcBSB1p48A2kZNwlDwHB74wjQ8vrMeLx84j3WLpsRcFbN1HH2QolGSY8RfNi9Bz4A75j/oJHHyQ3Slbu7sxce+ztOrxlGdVI5UCh5Oqx5Oqx4dNwfQ1NGDK92Rr1uLZYrA288n9r5quWYdSu0GWSYvgHfUa94Ui7igd6xRtP4hDxqvha9e7S/iBCZdI/4uCusF65u7wACYdSpMDVKiIlXQCAwJa+08BzLS1Gju7MVf61pjPk9z5/iK2EWD4zhKXlKU8AfxwvWbYGx46/uffaMvC33TIiQ2ljQ1yh1mzJtiQXoE0xSqKKePBDq1Iub+YA6rDjNlOvLiz5KmRppGGXYKsDAzDZYodm6maZQRF6C06FXieiYhgRF+KyudZrHFRCqiBIaEpVUp8O3qqQCAFz88F3DTiYawC4luTvKWZ9aB54C+weG6QADw52Pe1gGrqfZLXFjS1FhYYEVxjiFgwe1IWTFMHwms6dGXQ8jP0KMkJ7V66qQ6juNQlmeERhXZLTsrTDuIkecWumMbtKqAGj/hpo+UE7xuiRIYEpF1i6ZAp1KgoaUbhz5vj/rnb/YPiR2PY2nkSCYPtZIXi2YJPZFOtHbj1GUX1Aoed8ymztPxwnEcnFY9qgttyLPoECxPyTJEfrMbaWR36nByTFrMyKbF2bHQKBWYnWcK+hqOFO2UoP9uJKGlgH+LiWCyjJqoRoUSgRIYEhFLmhr3VHkrtm778GzUPy90oTZolUmtQklSk9CVWqgFI9R++RJ1nk4ItZJHqd2IqgIrTH7TRSolH3US4s+iV0d0QwW87QFmplg3Y6kx69WYHqbFQjTTR4KMNI34Ojp9ZQ7K8owh1ztqVHxKjKJRAkMi9t0lBeA54MCZa/jMV+U2Us2+BbyJ2oFEpMV/Ia/Hw/DOp77pozm0eDeRjFoVqqZaMSvPCLWSR2Z67NNHgHfxcCT1aPQaBcplVKQukaZkpInNd4MJ1008GLVyuInnilnZWDEzG3fPc4Y8vtTuff9MtIl/BkQynFY9VvqG91+MchSm1beAl6aPCBDYlfrI+eto7fJ2nl5aTNvek8Fu0qG6MCOgEm+swo3gqJU85jgtUMW4e5GMNjPXGHIBdaxF52zpw+tg7p7vDPm6Oqw68diJRu8oEpUHb/W2F/jLv1rFXUWRGG8XajK5CF2pL7TfFKePVs62J6U/DPFSKnjoYtxF5G+svmYKnkOF0xyX65BhKgWP2Q4T+BF38DSNMubdl7YI1kLpNQoUZaXOGiZKYEhUZjtMqC7MgNvDsP1g5E0eW2gHEvEjFLM7f/UmdtV7t+ZT52lpMulUUATZ5cRxwKw8I61pShCDVoXiEetQYpk+EqRrlGMmmjwPlOWZUqrRJiUwJGrf97UX+N+PL6KrZzCin2lJYg0YkvqEBMbVPwRX3xDsJi0WFlDnaSniOA4W/ehRmKIsQ1T9lUj08sy6gNYs4+1ZNNbUUIEtHcYU24BBCQyJ2m0zMlGSY0DPgBu/P3Ihop8Z7kRNIzDE24PFfyHiqspcWuApYSOnkZxWvbhQmyRWSY4R6Vol0rWxTx8JbCHq+pj1KnHdWiqhBIZEjeM4cRTmdx81om/QPebxjLGE90Ei0iN0pQaoeJ3U+S/4zDRoMCN77K2+JH4UPIdyhykuf1stevWo6UCFgsOsXFNKVk2mBIbE5KsVubCbtLjq6sfPd9bj+s2BkMdevzmA/iEPOG78Q5xk8hC6UpfkGFBK9UEkLU2jhFalgFGnQlleat7sJjO9WinWbxkPnudgHTEdWJxtSNlF2JTAkJioFDweWlYEAHjzk0u47Zd78cL+s0FHY1p8NWAy0zUpUTuApIZlpVnguOE1VUTa8iw6VDhTa5EniZ7/1G6WUZPSGy/obkJi9s0F+fj9dxdipt0IV98Q/mv3SSz79X7sPNYMj2e4X5Kw3dqewr8IJPlWzrbj9C/uwNfnOib6qZA4KLClQaNMzU/qJHIZvnUwqVJtdyyUwJBxWVJkw7s/WIJf310Bu0mL5s5ePPyH41j1Pwfx0dlrAIbbCOTRDiQyAhU3IyS1aJQKmPSqlKm2O5bxLVkmBN5507vmOXBnuR2vHDyP5/edRX1zN+596QiWlWSJvwS0A4kQQlLfTLtx3DuakiH1nyGRDK1KgU1fnI57qpz47w/O4PUjF/HBySvi46k8l0oIIcRLCskLQFNIJAFs6Ro8+bUy/O1Ht+L2mdni91OxjgAhhBBpkkaaRSSpMDMdL31rPo42XsfJNhdum5E50U+JEELIJEEJDEm4qqlWVE2lMvGEEELih6aQCCGEECI5lMAQQgghRHIogSGEEEKI5FACQwghhBDJoQSGEEIIIZJDCQwhhBBCJIcSGEIIIYRIDiUwhBBCCJEcSmAIIYQQIjmUwBBCCCFEciiBIYQQQojkUAJDCCGEEMmhBIYQQgghkjNpu1EzxgAA3d3dE/xMCCGEEBIp4b4t3MdDmbQJjMvlAgA4nc4JfiaEEEIIiZbL5YLJZAr5OMfCpTgS5fF40NLSAoPBAI7jUFVVhaNHj4b9uUiOi+e5Ijmuu7sbTqcTTU1NMBqN475msp9/pMdEGmeqPv9Ij4tnnKn6/yKV37P0WkZ3TCq/lvG8ZjzjlEOMkR4Ty3GMMbhcLuTm5oLnQ690mbQjMDzPw+FwiF8rFIqwL1ikx8XzXNEcZzQa4/LcJuL5R3ouIHycqfz8kx1nKv+/AFLzPUuvZfTnAlLztYz3NYH4xCmHGKO5ZizHjTXyIpDNIt5NmzbF7bh4niua4+J1rol4/smOMd7H0WsZ/bkilew46bWM/lyRojiju56UY4zmmon6nZu0U0iTSXd3N0wmE7q6uiLOsKWI4pw85BAjII845RAjII84J1uMshmBkTKNRoMtW7ZAo9FM9FNJKIpz8pBDjIA84pRDjIA84pxsMdIIDCGEEEIkh0ZgCCGEECI5lMAQQgghRHIogSGEEEKI5FACQwghhBDJoQQmSZ566ilUVVXBYDAgKysLq1evxqlTpwKO6evrw6ZNm5CRkYH09HTcdddduHz5csAxFy9exJ133gm9Xo+srCw8+uijGBoaCnrNQ4cOQalUorKyMlFhBZBDjEDy4ty3bx84jhv1r62tjWKUWJwA0N/fj8ceewxTpkyBRqPB1KlTsX37dooxTpIV5/333x/0PTtr1iyKMdkYSYoVK1awHTt2sPr6enb8+HG2cuVKlp+fz27cuCEes379euZ0OtkHH3zAamtr2aJFi1h1dbX4+NDQECsrK2M1NTXs2LFjbNeuXcxms7Gf/exno67X0dHBpk2bxpYvX84qKiqSEaIsYmQseXHu3buXAWCnTp1ira2t4j+3200xSixOxhhbtWoVW7hwIXv//ffZ+fPn2UcffcQOHjxIMUoszs7OzoD3alNTE7NarWzLli0UY5JRAjNBrly5wgCw/fv3M8a8bxiVSsXefPNN8ZgTJ04wAOzw4cOMMcZ27drFeJ5nbW1t4jHPP/88MxqNrL+/P+D899xzD3v88cfZli1bknpz9yeHGBlLXJzCzb2joyN5wYQghxgZS1ycu3fvZiaTibW3tycxmuDkECNjif/7I3j77bcZx3GssbExgdEEJ4cYx0JTSBOkq6sLAGC1WgEAn3zyCQYHB1FTUyMeU1JSgvz8fBw+fBgAcPjwYcyePRvZ2dniMStWrEB3dzcaGhrE7+3YsQPnzp3Dli1bkhFKSHKIEUhsnABQWVkJu92O22+/HYcOHUp0OEHJIUYgcXG+8847mD9/Pp555hnk5eVhxowZ+MlPfoLe3t5khSaSQ4xA4t+zgldeeQU1NTWYMmVKokIJSQ4xjmXSNnNMZR6PBw8//DAWL16MsrIyAEBbWxvUajXMZnPAsdnZ2eJ6gLa2toA3nfC48BgAnDlzBj/96U9x4MABKJUT9/LKIUYgsXHa7Xa88MILmD9/Pvr7+/Hyyy9j6dKlOHLkCObOnZvgyIbJIUYgsXGeO3cOBw8ehFarxdtvv41r165h48aNaG9vx44dOxIc2TA5xAgkNk5/LS0t2L17N954440ERDE2OcQYDiUwE2DTpk2or6/HwYMH43pet9uNe++9F0888QRmzJgR13NHSw4xAomLEwCKi4tRXFwsfl1dXY2zZ89i69ateO211+J+vVDkECOQ2Dg9Hg84jsPrr78udtl99tlnsXbtWjz33HPQ6XRxv2YwcogRSGyc/l599VWYzWasXr06odcJRg4xhkNTSEm2efNmvPvuu9i7dy8cDof4/ZycHAwMDKCzszPg+MuXLyMnJ0c8ZuRqcuHrnJwcuFwu1NbWYvPmzVAqlVAqlXjyySfx6aefQqlUYs+ePYkNzkcOMQKJjTOUBQsW4PPPP49TBOHJIUYg8XHa7Xbk5eWJN3YAKC0tBWMMly5dSkRIo8ghRiB571nGGLZv345169ZBrVYnIJLQ5BBjRCZ2CY58eDwetmnTJpabm8tOnz496nFh8dVbb70lfu/kyZNBF19dvnxZPGbbtm3MaDSyvr4+5na7WV1dXcC/DRs2sOLiYlZXVxewUp1iTO04Q6mpqWFr1qyJYzTBySFGxpIX57Zt25hOp2Mul0s8ZufOnYznedbT05Oo8Bhj8oiRseS/Z4UF6HV1dQmKaDQ5xBgNSmCSZMOGDcxkMrF9+/YFbE/z/8Vev349y8/PZ3v27GG1tbXslltuYbfccov4uLD9bfny5ez48ePsvffeY5mZmUG3GAuSuUNHDjEylrw4t27dynbu3MnOnDnD6urq2EMPPcR4nmd///vfKUaJxelyuZjD4WBr165lDQ0NbP/+/ayoqIg98MADFKPE4hTcd999bOHChUmJTSCHGKNBCUySAAj6b8eOHeIxvb29bOPGjcxisTC9Xs/WrFnDWltbA87T2NjI7rjjDqbT6ZjNZmM//vGP2eDgYMjrJvPmLocYGUtenE8//TQrLCxkWq2WWa1WtnTpUrZnzx6KMY6S+Z49ceIEq6mpYTqdjjkcDvbII48kZWRCDjEyltw4Ozs7mU6nYy+++GIyQhPJIcZocIwxFq/pKEIIIYSQZKBFvIQQQgiRHEpgCCGEECI5lMAQQgghRHIogSGEEEKI5FACQwghhBDJoQSGEEIIIZJDCQwhhBBCJIcSGEIIIYRIDiUwhBBCCJEcSmAIIYQQIjmUwBBCCCFEciiBIYQQQojk/D/hpIwTZ15yTgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(334)" ] }, { "cell_type": "markdown", "id": "Nf4Y8MvLMOi8", "metadata": { "id": "Nf4Y8MvLMOi8" }, "source": [ "How do we compare against other models? The [Monash Time Series Repository](https://forecastingdata.org/#results) has a comparison table of test set MASE metrics which we can add to:\n", "\n", "|Dataset | \tSES| \tTheta | \tTBATS| \tETS\t| (DHR-)ARIMA| \tPR|\tCatBoost |\tFFNN\t| DeepAR | \tN-BEATS | \tWaveNet| \t**Transformer** (Our) |\n", "|:------------------:|:-----------------:|:--:|:--:|:--:|:--:|:--:|:--:|:---:|:---:|:--:|:--:|:--:|\n", "|Tourism Monthly | \t3.306 |\t1.649 |\t1.751 |\t1.526|\t1.589|\t1.678\t|1.699|\t1.582\t| 1.409\t| 1.574|\t1.482\t| **1.256**|\n", "\n", "Note that, with our model, we are beating all other models reported (see also table 2 in the corresponding [paper](https://openreview.net/pdf?id=wEc1mgAjU-)), and we didn't do any hyperparameter tuning. We just trained the Transformer for 40 epochs. \n", "\n", "Of course, we need to be careful with just claiming state-of-the-art results on time series with neural networks, as it seems [\"XGBoost is typically all you need\"](https://www.sciencedirect.com/science/article/pii/S0169207021001679). We are just very curious to see how far neural networks can bring us, and whether Transformers are going to be useful in this domain. This particular dataset seems to indicate that it's definitely worth exploring.\n", "\n", "## Next Steps\n", "\n", "We would encourage the readers to try out the [notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/time-series-transformers.ipynb) with other time series datasets from the [Hub](https://huggingface.co/datasets/monash_tsf) and replace the appropriate frequency and prediction length parameters. For your datasets, one would need to convert them to the convention used by GluonTS, which is explained nicely in their documentation [here](https://ts.gluon.ai/stable/tutorials/forecasting/extended_tutorial.html#What-is-in-a-dataset?). We have also prepared an example notebook showing you how to convert your dataset into the 🤗 datasets format [here](https://github.com/huggingface/notebooks/blob/main/examples/time_series_datasets.ipynb).\n", "\n", "As time series researchers will know, there has been a lot of interest in applying Transformer based models to the time series problem. The vanilla Transformer is just one of many attention-based models and so there is a need to add more models to the library.\n", "\n", "At the moment there is nothing stopping us from modeling multivariate time series, however for that one would need to instantiate the model with a multivariate distribution head. Currently, diagonal independent distributions are supported, and other multivariate distributions will be added. Stay tuned for a future blog post which will include a tutorial.\n", "\n", "Another thing on the roadmap is time series classification. This entails adding a time series model with a classification head to the library, for the anomaly detection task for example. \n", "\n", "The current model assumes the presence of a date-time together with the time series values, which might not be the case for every time series in the wild. See for instance neuroscience datasets like the one from [WOODS](https://woods-benchmarks.github.io/). Thus, one would need to generalize the current model to make some inputs optional in the whole pipeline.\n", "\n", "Finally, the NLP/Vision domain has benefitted tremendously from [large pre-trained models](https://arxiv.org/abs/1810.04805), while this is not the case as far as we are aware for the time series domain. Transformer based models seem like the obvious choice in pursuing this avenue of research and we cannot wait to see what researchers and practitioners come up with!\n" ] }, { "cell_type": "code", "execution_count": null, "id": "CYtLcclMTs99", "metadata": { "id": "CYtLcclMTs99" }, "outputs": [], "source": [] } ], "metadata": { "accelerator": "GPU", "colab": { "provenance": [] }, "gpuClass": "standard", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.8" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "009a21c6a2dd4c5da79a7fb3eec8ff43": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_a8b516bf196946a09a55732d937dfe2a", "placeholder": "​", "style": "IPY_MODEL_53a3ad2f991648439e57362c4a7a5f60", "value": "Generating test split: 89%" } }, "01a6160718434f7bb73bb4a094ee8b0f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "028908857f134943af7b47a2503ce403": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_50e91b016b0a4ce69325e8196a09dce6", "placeholder": "​", "style": "IPY_MODEL_9c573dc9c14248deb512162af5f9b0fa", "value": " 326/366 [00:00<00:00, 615.43 examples/s]" } }, "044030ba2c5948d2ac6545aea773ef4a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "0452728577c4433d9d15eca97045d1f4": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "048591e682544b57abbcba613c81f9b4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_d8a6361f19894be1b730137b0801e4e8", "IPY_MODEL_2c375a08b1cb4f71a0a0a169c999aa94", "IPY_MODEL_ea1af7f963e848d19ea363331027109b" ], "layout": "IPY_MODEL_b68b7b7b072e457980e834113ff0a670" } }, "09cc068788e64c1fbc1edd0992f43f42": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "0a4bcc907dbc48f3af39fac4c0652bd4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "0bf375322d12400ab773e85c08cd3e62": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_22c8c8ecb39c491798602abe0144eba1", "placeholder": "​", "style": "IPY_MODEL_36a6c51643ba4375b314e9395c0aea07", "value": " 311/366 [00:01<00:00, 436.98 examples/s]" } }, "0d037e1f14794a0fb68ab472b42ee60a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_eaa70494878f4eba927868ecbbd034b4", "IPY_MODEL_b9f43527572c41849f66e100e4d2df83", "IPY_MODEL_f0019a4884124eebb44571ca0a7b262e" ], "layout": "IPY_MODEL_a79295d7dc77434282636a0ef665a70b" } }, "1076c8e3f8e1413fad4aa5cb16c71c31": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_dbb568c5b348421a9e2f9f4e07cd5f01", "IPY_MODEL_966ca413bd824a77b50a20784e8bd1b4", "IPY_MODEL_e81a3f25949247eeb696ccd3b0df3da0" ], "layout": "IPY_MODEL_228e4cf452a04b1f8f324be138857c30" } }, "17a314c74019462e9ba2e923b9235bed": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_6b97acade12a49d683ec81855e1bf58a", "placeholder": "​", "style": "IPY_MODEL_45b1dbee32a440328f91bf0c398d4a88", "value": " 346/366 [00:00<00:00, 663.14 examples/s]" } }, "228e4cf452a04b1f8f324be138857c30": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "22c8c8ecb39c491798602abe0144eba1": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "23207dda3c7c45ef942fb26b6d3e8f4a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "2435607c37f2439aa1f0d545009b375e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": "hidden", "width": null } }, "2c375a08b1cb4f71a0a0a169c999aa94": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_a3384254326f49eb907bfa6d2032b1a8", "max": 3, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_68e542f3c052435f9254e135e5c481e8", "value": 3 } }, "2dc9cef88370404184dc1f629d062a04": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_ed58c5b583f344cdbfea76562259190e", "IPY_MODEL_c56009b340984f2296ad2959e8d72f25", "IPY_MODEL_b2eeaecdd52343a4977954915f38bc9b" ], "layout": "IPY_MODEL_c55cb9a98afe49d59838a3e2d88cd774" } }, "2e0511f2f1844758a6f6d10af7233a72": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "2ec6b12a621f4ce681554397392bdda8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_6a39d27a5d5e484385f3d8163665641f", "placeholder": "​", "style": "IPY_MODEL_649640a4dacf4edab3aba273d7e09bbf", "value": " 31.2k/31.2k [00:00<00:00, 18.6kB/s]" } }, "313d214425c541b6845f70638f8a5937": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "331752b5913245e380752532ab15f128": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "3366b16d73d949508f24d647558db059": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "36a6c51643ba4375b314e9395c0aea07": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "3c850c33752443afa6658a1cb997549e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "3e1c8ac5bfac429993d5404f7abf748d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "3ff0a924499f414ca7fd03a902b51102": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "435416a295674774a15aa700ff7ce007": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "43daab71788e4a5c80687a9e73bf3b67": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_67f8fc82c7044090a0408294bc1c2d15", "IPY_MODEL_7cd0096ebb94429dab18e3226fc4cdbf", "IPY_MODEL_0bf375322d12400ab773e85c08cd3e62" ], "layout": "IPY_MODEL_e3641728ace74d8ab4742007d1725ee8" } }, "445f2ef3f71a4573ae453144dd4c5e81": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": "hidden", "width": null } }, "45b1dbee32a440328f91bf0c398d4a88": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "46e05d2996a84b5e8f456adbb6453350": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "50e91b016b0a4ce69325e8196a09dce6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "53938941490b4afea31c63aad4bdce0a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "53a3ad2f991648439e57362c4a7a5f60": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "5c531b5b3ce4406abde898297f4bc80b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_b7e131bcb6454ccbb5de0813a734586a", "max": 24887, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_3e1c8ac5bfac429993d5404f7abf748d", "value": 24887 } }, "630d2a4aba53498b8e6f40d713fe50d1": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "649640a4dacf4edab3aba273d7e09bbf": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "672ee2ad96ac42fa90645a4049c7dd16": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "67f8fc82c7044090a0408294bc1c2d15": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_3c850c33752443afa6658a1cb997549e", "placeholder": "​", "style": "IPY_MODEL_3366b16d73d949508f24d647558db059", "value": "Generating train split: 85%" } }, "682be41e57c341189bdc3e7a6b7246d3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "68e542f3c052435f9254e135e5c481e8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "6a39d27a5d5e484385f3d8163665641f": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "6b97acade12a49d683ec81855e1bf58a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "726309e90e0247628487e1f4816e6fd9": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "741afc0fb9a7469cac4a1d6b0dc130d8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "764abccaae30410ba68405f44875c8d6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "7bb9e900006840a7a892a1a48d676560": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "7cc6a3332eaf4e9bb012097ca03c6ef6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "7cd0096ebb94429dab18e3226fc4cdbf": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_741afc0fb9a7469cac4a1d6b0dc130d8", "max": 366, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_df02d3127e634862b1029787be8908b8", "value": 366 } }, "83c39de970e84954b6fa043390b85d4c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_009a21c6a2dd4c5da79a7fb3eec8ff43", "IPY_MODEL_9059a60d370c4825a0eb1b31c9f9cd0a", "IPY_MODEL_028908857f134943af7b47a2503ce403" ], "layout": "IPY_MODEL_445f2ef3f71a4573ae453144dd4c5e81" } }, "87d63881c376462b88a7703f62495a83": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_af5add21a56b4ef4945a90fed06d7c89", "IPY_MODEL_c0822d9ca57b4b23ba552b93f139d96e", "IPY_MODEL_2ec6b12a621f4ce681554397392bdda8" ], "layout": "IPY_MODEL_8de92b21ea1b4dfc966d653e0ca7043b" } }, "89dd9177f7cd4edc87e43d5e23c5f587": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "8b30e8b778fb456bbf8af4d6931f415c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_630d2a4aba53498b8e6f40d713fe50d1", "placeholder": "​", "style": "IPY_MODEL_313d214425c541b6845f70638f8a5937", "value": " 24.9k/24.9k [00:00<00:00, 18.5kB/s]" } }, "8de92b21ea1b4dfc966d653e0ca7043b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "9059a60d370c4825a0eb1b31c9f9cd0a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_db1af11912fa4774b718242b8861a18c", "max": 366, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_2e0511f2f1844758a6f6d10af7233a72", "value": 366 } }, "94aa0a38801e4fa0b79150fbd7bcc6cc": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "956dc45f3dde496d94f2d2520f62a241": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_dc1ad0316a634e0e81eecdd09d271136", "IPY_MODEL_5c531b5b3ce4406abde898297f4bc80b", "IPY_MODEL_8b30e8b778fb456bbf8af4d6931f415c" ], "layout": "IPY_MODEL_d1f7dc29912b40e7ac4a9081a4068836" } }, "966ca413bd824a77b50a20784e8bd1b4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_044030ba2c5948d2ac6545aea773ef4a", "max": 199791, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_a54e00389ce148829b4db5b7439ae879", "value": 199791 } }, "96acfb4ec404421b8523e39b6a4bc41a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "9c573dc9c14248deb512162af5f9b0fa": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "a3384254326f49eb907bfa6d2032b1a8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a54e00389ce148829b4db5b7439ae879": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "a70e5dadc1d547cc90da492ef9b72172": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a79295d7dc77434282636a0ef665a70b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a8b516bf196946a09a55732d937dfe2a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "addaf03f64e9421ab8debbba4f096d7e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "af5add21a56b4ef4945a90fed06d7c89": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_bcaa24789c664ed181eb3af6c93a618e", "placeholder": "​", "style": "IPY_MODEL_e4015a34ae9744ceaa57d8b50a024d9a", "value": "Downloading readme: 100%" } }, "b0b4e07185574c5eba5144a28c611971": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "b2eeaecdd52343a4977954915f38bc9b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_726309e90e0247628487e1f4816e6fd9", "placeholder": "​", "style": "IPY_MODEL_e791aeda253f40d3bf28da3aaf0ec3f3", "value": " 68.1k/68.1k [00:00<00:00, 93.5kB/s]" } }, "b65097925371428eb2b58eec672f9b81": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "b68b7b7b072e457980e834113ff0a670": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "b7e131bcb6454ccbb5de0813a734586a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "b9f43527572c41849f66e100e4d2df83": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_a70e5dadc1d547cc90da492ef9b72172", "max": 7544, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_3ff0a924499f414ca7fd03a902b51102", "value": 7544 } }, "bcaa24789c664ed181eb3af6c93a618e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "c0822d9ca57b4b23ba552b93f139d96e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_23207dda3c7c45ef942fb26b6d3e8f4a", "max": 31241, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_0a4bcc907dbc48f3af39fac4c0652bd4", "value": 31241 } }, "c55cb9a98afe49d59838a3e2d88cd774": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "c56009b340984f2296ad2959e8d72f25": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_c6fa8ced2f844e28a6e5cf4b31e362b1", "max": 68082, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_b65097925371428eb2b58eec672f9b81", "value": 68082 } }, "c6fa8ced2f844e28a6e5cf4b31e362b1": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d0cecf202f814209abe965e2ec13c49e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d1f7dc29912b40e7ac4a9081a4068836": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d2e3caaeded749fc807de397f79e98e7": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_09cc068788e64c1fbc1edd0992f43f42", "placeholder": "​", "style": "IPY_MODEL_46e05d2996a84b5e8f456adbb6453350", "value": "Generating validation split: 95%" } }, "d7be4847987e4d6996c56eb42feb78b9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "d8a6361f19894be1b730137b0801e4e8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_764abccaae30410ba68405f44875c8d6", "placeholder": "​", "style": "IPY_MODEL_89dd9177f7cd4edc87e43d5e23c5f587", "value": "100%" } }, "db1af11912fa4774b718242b8861a18c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "dbb568c5b348421a9e2f9f4e07cd5f01": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_addaf03f64e9421ab8debbba4f096d7e", "placeholder": "​", "style": "IPY_MODEL_94aa0a38801e4fa0b79150fbd7bcc6cc", "value": "Downloading data: 100%" } }, "dc1ad0316a634e0e81eecdd09d271136": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_f8af035c2033430ca41cb3c81719ddc8", "placeholder": "​", "style": "IPY_MODEL_682be41e57c341189bdc3e7a6b7246d3", "value": "Downloading builder script: 100%" } }, "df02d3127e634862b1029787be8908b8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "e3641728ace74d8ab4742007d1725ee8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": "hidden", "width": null } }, "e4015a34ae9744ceaa57d8b50a024d9a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "e791aeda253f40d3bf28da3aaf0ec3f3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "e81a3f25949247eeb696ccd3b0df3da0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_435416a295674774a15aa700ff7ce007", "placeholder": "​", "style": "IPY_MODEL_d7be4847987e4d6996c56eb42feb78b9", "value": " 200k/200k [00:00<00:00, 269kB/s]" } }, "ea1af7f963e848d19ea363331027109b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_d0cecf202f814209abe965e2ec13c49e", "placeholder": "​", "style": "IPY_MODEL_331752b5913245e380752532ab15f128", "value": " 3/3 [00:00<00:00, 36.01it/s]" } }, "eaa70494878f4eba927868ecbbd034b4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_b0b4e07185574c5eba5144a28c611971", "placeholder": "​", "style": "IPY_MODEL_01a6160718434f7bb73bb4a094ee8b0f", "value": "Downloading extra modules: 100%" } }, "ed32d5154c8e45ff91608c8dca664d8e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_d2e3caaeded749fc807de397f79e98e7", "IPY_MODEL_f9d799cf26574229ad1d77373cb511c5", "IPY_MODEL_17a314c74019462e9ba2e923b9235bed" ], "layout": "IPY_MODEL_2435607c37f2439aa1f0d545009b375e" } }, "ed58c5b583f344cdbfea76562259190e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_672ee2ad96ac42fa90645a4049c7dd16", "placeholder": "​", "style": "IPY_MODEL_96acfb4ec404421b8523e39b6a4bc41a", "value": "Downloading metadata: 100%" } }, "f0019a4884124eebb44571ca0a7b262e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_0452728577c4433d9d15eca97045d1f4", "placeholder": "​", "style": "IPY_MODEL_53938941490b4afea31c63aad4bdce0a", "value": " 7.54k/7.54k [00:00<00:00, 8.92kB/s]" } }, "f8af035c2033430ca41cb3c81719ddc8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "f9d799cf26574229ad1d77373cb511c5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_7cc6a3332eaf4e9bb012097ca03c6ef6", "max": 366, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_7bb9e900006840a7a892a1a48d676560", "value": 366 } } } } }, "nbformat": 4, "nbformat_minor": 5 }