├── README.md
├── assets
├── apriori_algorithm.png
├── datacamp.svg
└── olist_marketplaces.png
├── data
├── olist_order_items_dataset.csv
├── olist_products_dataset.csv
├── olist_transactions.csv
└── product_category_name_translation.csv
└── notebooks
├── Market-Basket-Analysis-in-Python.ipynb
└── Market-Basket-Analysis-in-Python_Solution.ipynb
/README.md:
--------------------------------------------------------------------------------
1 | # **Market Basket Analysis** by **Isaiah Hull**
2 |
3 | Live training sessions are designed to mimic the flow of how a real data scientist would address a problem or a task. As such, a session needs to have some “narrative” where learners are achieving stated learning objectives in the form of a real-life data science task or project. For example, a data visualization live session could be around analyzing a dataset and creating a report with a specific business objective in mind _(ex: analyzing and visualizing churn)_, a data cleaning live session could be about preparing a dataset for analysis etc ...
4 |
5 | As part of the 'Live training Spec' process, you will need to complete the following tasks:
6 |
7 | Edit this README by filling in the information for steps 1 - 4.
8 |
9 | ## Step 1: Foundations
10 |
11 | This part of the 'Live training Spec' process is designed to help guide you through session design by having you think through several key questions. Please make sure to delete the examples provided here for you.
12 |
13 | ### A. What problem(s) will students learn how to solve? (minimum of 5 problems)
14 |
15 | - Prepare data for use in Market Basket Analysis.
16 | - Identify patterns in consumer decision-making with `mlxtend`.
17 | - Use metrics to evaluate the properties of patterns.
18 | - Construct association rules that provide concrete recommendations for businesses.
19 | - Perform pruning to identify useful rules.
20 | - Visualize patterns and rules using `seaborn` and `matplotlib`.
21 |
22 | ### B. What technologies, packages, or functions will students use? Please be exhaustive.
23 |
24 | - `numpy`
25 | - `pandas`
26 | - `matplotlib`
27 | - `seaborn`
28 | - `mlxtend`
29 |
30 | ### C. What terms or jargon will you define?
31 |
32 | - Transaction: A set of items purchased together.
33 | - Itemset: A collection of unique items.
34 | - Association rule: an "if-then" statement of association between two itemsets. For instance, "if coffee then milk" is an association rule that implies that customers who purchase coffee are also likely to purchase milk.
35 | - Metric: The numerical measure of the intensity of an association between itemsets.
36 | - Pruning: The removal of itemsets or rules that perform poorly according to a metric.
37 |
38 | ### D. What mistakes or misconceptions do you expect?
39 |
40 | - I expect students to be confused about the definitions of metrics and how to interpret them.
41 | - Students are likely to be confused about how the Apriori algorithm works and what it achieves.
42 |
43 | ### E. What datasets will you use?
44 |
45 | - Brazilian E-Commerce Public Dataset by Olist: https://www.kaggle.com/olistbr/brazilian-ecommerce
46 |
47 | ## Step 2: Who is this session for?
48 |
49 | Terms like "beginner" and "expert" mean different things to different people, so we use personas to help instructors clarify a live training's audience. When designing a specific live training, instructors should explain how it will or won't help these people, and what extra skills or prerequisite knowledge they are assuming their students have above and beyond what's included in the persona.
50 |
51 | - [x] Please select the roles and industries that align with your live training.
52 | - [x] Include an explanation describing your reasoning and any other relevant information.
53 |
54 | ### What roles would this live training be suitable for?
55 |
56 | *Check all that apply.*
57 |
58 | - [ ] Data Consumer
59 | - [ ] Leader
60 | - [x] Data Analyst
61 | - [ ] Citizen Data Scientist
62 | - [x] Data Scientist
63 | - [ ] Data Engineer
64 | - [ ] Database Administrator
65 | - [x] Statistician
66 | - [x] Machine Learning Scientist
67 | - [ ] Programmer
68 | - [ ] Other (please describe)
69 |
70 | Reasoning: Market Basket Analysis has limited overlap with popular methods in machine learning and data science (e.g. deep learning, gradient boosting, clustering, etc.). As such, learning the basics of Market Basket Analysis will open up an entirely new toolset for many data analysts, data scientists, statisticians, and machine learning scientists.
71 |
72 | ### What industries would this apply to?
73 |
74 | - Industries: Retail, e-commerce, streaming services.
75 | - Reasoning: Market basket analysis can be used to analyze associations between itemsets in any domain. While it is typically applied in retail settings, it can also be used in other applications, such as building recommender systems for e-commerce sites or streaming services.
76 |
77 | ### What level of expertise should learners have before beginning the live training?
78 |
79 | *List three or more examples of skills that you expect learners to have before beginning the live training*
80 |
81 | - Can define and manipulate an `array` in `numpy`.
82 | - Can define a `DataFrame` in `pandas`, create columns, and apply basic methods, such as `.mean()` and `.sum()`.
83 | - Can use `.apply()` and `lambda` functions to transform columns in a `DataFrame`.
84 | - Can generate basic plots in `matplotlib`.
85 |
86 | ## Step 3: Prerequisites
87 |
88 | List any prerequisite courses you think your live training could use from. This could be the live session’s companion course or a course you think students should take before the session. Prerequisites act as a guiding principle for your session and will set the topic framework, but you do not have to limit yourself in the live session to the syntax used in the prerequisite courses.
89 |
90 | [Data Manipulation with Pandas](
91 | https://www.datacamp.com/courses/data-manipulation-with-pandas)
92 |
93 | [Market Basket Analysis in Python](https://learn.datacamp.com/courses/market-basket-analysis-in-python)
94 |
95 | ## Step 4: Session Outline
96 |
97 | A live training session usually begins with an introductory presentation, followed by the live training itself, and an ending presentation. Your live session is expected to be around 2h30m-3h long (including Q&A) with a hard-limit at 3h30m. You can check out our live training content guidelines [here](_LINK_).
98 |
99 |
100 | **Introduction Slides**
101 | - Introduction to the webinar and instructor (led by DataCamp TA).
102 | - Summary of webinar topics.
103 | - Define Market Basket Analysis.
104 | - Discuss applications.
105 | - Introduce packages used in webinar.
106 | - Set expectations about Q&A.
107 |
108 | **Data Preparation**
109 | - Discuss Brazilian e-commerce dataset.
110 | - Import data using `pd.read_csv()`.
111 | - Define transaction and itemset.
112 | - Identify transactions in dataset using `pandas`
113 | and `numpy` methods.
114 | - Convert transactions to list of lists.
115 | - Q&A
116 |
117 | **Association Rules, Metrics, and Pruning**
118 | - One-hot encode transactions using
119 | `TransactionEncoder` from `mlxtend`.
120 | - Use `.mean()` to compute support for
121 | individual items.
122 | - Use `.mean()` to compute support for
123 | itemsets.
124 | - Compute confidence using `lambda` function.
125 | - Visualize results in `matplotlib` and `seaborn`.
126 | - Q&A
127 |
128 | **The Apriori Algorithm**
129 | - Introduce `apriori` and `association_rules`
130 | from `mlxtend`.
131 | - Use `min_support`, `max_len`, and `min_threshold` to
132 | perform pruning over itemsets and association rules.
133 | - Identify useful association rules in e-commerce dataset
134 | through the use of pruning.
135 | - Visualize results in `matplotlib` and `seaborn`.
136 | - Q&A
137 |
138 | **Ending Slides**
139 | - Summarize webinar topics.
140 | - Reference DataCamp course on MBA.
141 | - Explain additional topics covered.
142 | - Provide additional supporting material and appendices.
143 |
144 | ## Authoring your session
145 |
146 | To get yourself started with setting up your live session, follow the steps below:
147 |
148 | 1. Download and install the "Open in Colabs" extension from [here](https://chrome.google.com/webstore/detail/open-in-colab/iogfkhleblhcpcekbiedikdehleodpjo?hl=en). This will let you take any jupyter notebook you see in a GitHub repository and open it as a **temporary** Colabs link.
149 | 2. Upload your dataset(s) to the `data` folder.
150 | 3. Upload your images, gifs, or any other assets you want to use in the notebook in the `assets` folder.
151 | 4. Check out the notebooks templates in the `notebooks` folder, and keep the template you want for your session while deleting all remaining ones.
152 |
153 | You can author and save your progress on your notebook using **either** of these methods.
154 |
155 | _**How to author your notebook: By directly saving into GitHub**_
156 |
157 | 1. Preview your desired notebook, press on "Open in Colabs" extension - and start developing your content in colabs _(which will act as the solution code to the session)_. :warning: **Important** :warning: Your progress will **not** be saved on Google Colabs since it's a temporary link. To save your progress, make sure to press on `File`, `Save a copy in GitHub` and follow remaining prompts.
158 | 2. Once your notebooks is ready to go, give it the name `session_name_solution.ipynb` create an empty version of the Notebook to be filled out by you and learners during the session, end the file name with `session_name.ipynb`.
159 | 3. Create Colabs links for both sessions and save them in notebooks :tada:
160 |
161 | _**How to author your notebook: By uploading notebook into GitHub**_
162 |
163 | 1. Preview your desired notebook, press on "Open in Colabs" extension - and start developing your content in colabs _(which will act as the solution code to the session)_. Once you're done, press on `file` - `download .ipynb` file - and overwrite the notebook by uploading it into GitHub.
164 | 2. Once your notebooks is ready to go, give it the name `session_name_solution.ipynb` create an empty version of the Notebook to be filled out by you and learners during the session, end the file name with `session_name.ipynb`.
165 | 3. Create Colabs links for both sessions and save them in notebooks :tada:
166 |
167 |
168 | You can check out either of those methods in action using this [recording](https://www.loom.com/share/1eeb148129244edd93fbc34bf5dc7f0d).
169 |
--------------------------------------------------------------------------------
/assets/apriori_algorithm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/datacamp/Market-Basket-Analysis-in-python-live-training/84ab96d17c41f8c627ff50fe414e8ca98728308f/assets/apriori_algorithm.png
--------------------------------------------------------------------------------
/assets/datacamp.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/olist_marketplaces.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/datacamp/Market-Basket-Analysis-in-python-live-training/84ab96d17c41f8c627ff50fe414e8ca98728308f/assets/olist_marketplaces.png
--------------------------------------------------------------------------------
/data/product_category_name_translation.csv:
--------------------------------------------------------------------------------
1 | product_category_name,product_category_name_english
2 | beleza_saude,health_beauty
3 | informatica_acessorios,computers_accessories
4 | automotivo,auto
5 | cama_mesa_banho,bed_bath_table
6 | moveis_decoracao,furniture_decor
7 | esporte_lazer,sports_leisure
8 | perfumaria,perfume
9 | utilidades_domesticas,housewares
10 | telefonia,telephony
11 | relogios_presentes,watches_gifts
12 | alimentos_bebidas,food_drink
13 | bebes,baby
14 | papelaria,stationery
15 | tablets_impressao_imagem,tablets_printing_image
16 | brinquedos,toys
17 | telefonia_fixa,fixed_telephony
18 | ferramentas_jardim,garden_tools
19 | fashion_bolsas_e_acessorios,fashion_bags_accessories
20 | eletroportateis,small_appliances
21 | consoles_games,consoles_games
22 | audio,audio
23 | fashion_calcados,fashion_shoes
24 | cool_stuff,cool_stuff
25 | malas_acessorios,luggage_accessories
26 | climatizacao,air_conditioning
27 | construcao_ferramentas_construcao,construction_tools_construction
28 | moveis_cozinha_area_de_servico_jantar_e_jardim,kitchen_dining_laundry_garden_furniture
29 | construcao_ferramentas_jardim,costruction_tools_garden
30 | fashion_roupa_masculina,fashion_male_clothing
31 | pet_shop,pet_shop
32 | moveis_escritorio,office_furniture
33 | market_place,market_place
34 | eletronicos,electronics
35 | eletrodomesticos,home_appliances
36 | artigos_de_festas,party_supplies
37 | casa_conforto,home_comfort
38 | construcao_ferramentas_ferramentas,costruction_tools_tools
39 | agro_industria_e_comercio,agro_industry_and_commerce
40 | moveis_colchao_e_estofado,furniture_mattress_and_upholstery
41 | livros_tecnicos,books_technical
42 | casa_construcao,home_construction
43 | instrumentos_musicais,musical_instruments
44 | moveis_sala,furniture_living_room
45 | construcao_ferramentas_iluminacao,construction_tools_lights
46 | industria_comercio_e_negocios,industry_commerce_and_business
47 | alimentos,food
48 | artes,art
49 | moveis_quarto,furniture_bedroom
50 | livros_interesse_geral,books_general_interest
51 | construcao_ferramentas_seguranca,construction_tools_safety
52 | fashion_underwear_e_moda_praia,fashion_underwear_beach
53 | fashion_esporte,fashion_sport
54 | sinalizacao_e_seguranca,signaling_and_security
55 | pcs,computers
56 | artigos_de_natal,christmas_supplies
57 | fashion_roupa_feminina,fashion_female_clothing
58 | eletrodomesticos_2,home_appliances_2
59 | livros_importados,books_imported
60 | bebidas,drinks
61 | cine_foto,cine_photo
62 | la_cuisine,cuisine
63 | musica,music
64 | casa_conforto_2,home_comfort_2
65 | portateis_casa_forno_e_cafe,small_appliances_home_oven_and_coffee
66 | cds_dvds_musicais,cds_dvds_music
67 | dvds_blu_ray,dvds_blu_ray
68 | flores,flowers
69 | artes_e_artesanato,arts_and_crafts
70 | fraldas_higiene,diapers_and_hygiene
71 | fashion_roupa_infanto_juvenil,fashion_childrens_clothes
72 | seguros_e_servicos,security_and_services
--------------------------------------------------------------------------------
/notebooks/Market-Basket-Analysis-in-Python.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "name": "Market-Basket-Analysis-in-Python.ipynb",
7 | "provenance": []
8 | },
9 | "kernelspec": {
10 | "display_name": "Python 3",
11 | "language": "python",
12 | "name": "python3"
13 | },
14 | "language_info": {
15 | "codemirror_mode": {
16 | "name": "ipython",
17 | "version": 3
18 | },
19 | "file_extension": ".py",
20 | "mimetype": "text/x-python",
21 | "name": "python",
22 | "nbconvert_exporter": "python",
23 | "pygments_lexer": "ipython3",
24 | "version": "3.7.1"
25 | }
26 | },
27 | "cells": [
28 | {
29 | "cell_type": "markdown",
30 | "metadata": {
31 | "colab_type": "text",
32 | "id": "6Ijg5wUCTQYG"
33 | },
34 | "source": [
35 | "
\n",
36 | " \n",
37 | "
\n",
38 | " \n",
39 | "\n",
40 | "## **Market Basket Analysis in Python**\n",
41 | "\n",
42 | "Welcome to this hands-on training event on Market Basket Analysis in Python. In this session, you will learn how to:\n",
43 | "* Identify patterns in consumer decision-making with the `mlxtend` package.\n",
44 | "* Use metrics to evaluate the properties of patterns.\n",
45 | "* Construct \"rules\" that provide concrete recommendations for businesses.\n",
46 | "* Visualize patterns and rules using `seaborn` and `matplotlib`.\n",
47 | "\n",
48 | "## **The dataset**\n",
49 | "\n",
50 | "**We'll use a dataset from a Brazilian ecommerce site (olist.com) that is divided into three CSV files:**\n",
51 | "\n",
52 | "1. `olist_order_items_dataset.csv`\n",
53 | "2. `olist_products_dataset.csv`\n",
54 | "3. `product_category_name_translation.csv`\n",
55 | "\n",
56 | "**The column definitions are as follows:**\n",
57 | "\n",
58 | "`olist_order_items_dataset.csv`:\n",
59 | "\n",
60 | "- `order_id`: The unique identifier for a transaction.\n",
61 | "- `order_item_id`: The order of an item within a transaction.\n",
62 | "- `product_id`: The unique identifier for a product.\n",
63 | "- `price`: The product's price.\n",
64 | "\n",
65 | "`olist_products_dataset.csv`:\n",
66 | "\n",
67 | "- `product_id`: The unique identifier for a product.\n",
68 | "- `product_category_name`: The name of an item's product category in Portuguese.\n",
69 | "- `product_weight_g`: The product's weight in grams.\n",
70 | "- `product_length_cm`: The product's length in centimeters.\n",
71 | "- `product_width_cm`: The product's width in centimeters.\n",
72 | "- `product_height_cm`: The product's height in centimeters.\n",
73 | "\n",
74 | "`product_category_name_translation.csv`:\n",
75 | "\n",
76 | "- `product_category_name`: The name of an item's product category in Portuguese.\n",
77 | "- `product_category_name_english`: The name of an item's product category in English.\n"
78 | ]
79 | },
80 | {
81 | "cell_type": "markdown",
82 | "metadata": {
83 | "colab_type": "text",
84 | "id": "BMYfcKeDY85K"
85 | },
86 | "source": [
87 | "## **Data preparation**"
88 | ]
89 | },
90 | {
91 | "cell_type": "markdown",
92 | "metadata": {
93 | "id": "y3xDirMYnuYB",
94 | "colab_type": "text"
95 | },
96 | "source": [
97 | "The first step in any Market Basket Analysis (MBA) project is to determine what constitutes an **item**, an **itemset**, and a **transaction**. This will depend on the dataset we're using and the question we're attempting to answer.\n",
98 | "\n",
99 | "* **Grocery store**\n",
100 | "\t* Item: Grocery\n",
101 | "\t* Itemset: Collection of groceries\n",
102 | "\t* Transaction: Basket of items purchased\n",
103 | "* **Music streaming service**\n",
104 | "\t* Item: Song\n",
105 | "\t* Itemset: Collection of unique songs\n",
106 | "\t* Transaction: User song library\n",
107 | "* **Ebook store**\n",
108 | "\t* Item: Ebook\n",
109 | "\t* Itemset: One or more ebooks\n",
110 | "\t* Transaction: User ebook library\n"
111 | ]
112 | },
113 | {
114 | "cell_type": "markdown",
115 | "metadata": {
116 | "id": "4_gO3NX1JvFy",
117 | "colab_type": "text"
118 | },
119 | "source": [
120 | "**In this live training session, we'll use a dataset of transactions from olist.com, a Brazilian ecommerce site.**\n",
121 | "* 100,000+ orders over 2016-2018.\n",
122 | "* Olist connects sellers to marketplaces.\n",
123 | "* Seller can register products with Olist.\n",
124 | "* Customer makes purchase at marketplace from Olist store.\n",
125 | "* Seller fulfills orders."
126 | ]
127 | },
128 | {
129 | "cell_type": "markdown",
130 | "metadata": {
131 | "id": "_mo4P8zBp_9d",
132 | "colab_type": "text"
133 | },
134 | "source": [
135 | "\n",
136 | "\n",
137 | "---\n",
138 | "\n",
139 | "\n",
140 | "\n",
141 | "\n",
142 | "\n",
143 | "\n",
144 | "\n",
145 | "\n",
146 | "---\n",
147 | "\n"
148 | ]
149 | },
150 | {
151 | "cell_type": "markdown",
152 | "metadata": {
153 | "id": "D1HMEk73_ie6",
154 | "colab_type": "text"
155 | },
156 | "source": [
157 | "**What is an item**?\n",
158 | " * A product purchased from Olist.\n",
159 | "\n",
160 | "**What is an itemset?**\n",
161 | " * A collection of one or more product(s).\n",
162 | "\n",
163 | "**What is a transaction?**\n",
164 | " * An itemset that corresponds to a customer's order."
165 | ]
166 | },
167 | {
168 | "cell_type": "code",
169 | "metadata": {
170 | "id": "xhliXEYb02sm",
171 | "colab_type": "code",
172 | "colab": {}
173 | },
174 | "source": [
175 | "# Import modules.\n",
176 | "import numpy as np\n",
177 | "import pandas as pd\n",
178 | "import matplotlib.pyplot as plt\n",
179 | "import seaborn as sns\n",
180 | "\n",
181 | "# Set default asthetic parameters.\n",
182 | "sns.set()\n",
183 | "\n",
184 | "# Define path to data.\n",
185 | "data_path = 'https://github.com/datacamp/Market-Basket-Analysis-in-python-live-training/raw/master/data/'"
186 | ],
187 | "execution_count": null,
188 | "outputs": []
189 | },
190 | {
191 | "cell_type": "code",
192 | "metadata": {
193 | "colab_type": "code",
194 | "id": "EMQfyC7GUNhT",
195 | "colab": {}
196 | },
197 | "source": [
198 | "# Load orders dataset.\n",
199 | "\n",
200 | "\n",
201 | "# Load products items dataset.\n",
202 | "\n",
203 | "\n",
204 | "# Load translations dataset.\n"
205 | ],
206 | "execution_count": null,
207 | "outputs": []
208 | },
209 | {
210 | "cell_type": "code",
211 | "metadata": {
212 | "id": "KOKdds8Qe6wq",
213 | "colab_type": "code",
214 | "colab": {
215 | "base_uri": "https://localhost:8080/",
216 | "height": 204
217 | },
218 | "outputId": "da00d052-1eef-423e-e3d0-3d30d9089bb7"
219 | },
220 | "source": [
221 | "# Print orders header.\n"
222 | ],
223 | "execution_count": null,
224 | "outputs": [
225 | {
226 | "output_type": "execute_result",
227 | "data": {
228 | "text/html": [
229 | "\n",
230 | "\n",
243 | "
\n",
244 | " \n",
245 | " \n",
246 | " \n",
247 | " order_id \n",
248 | " order_item_id \n",
249 | " product_id \n",
250 | " price \n",
251 | " \n",
252 | " \n",
253 | " \n",
254 | " \n",
255 | " 0 \n",
256 | " b8bfa12431142333a0c84802f9529d87 \n",
257 | " 1 \n",
258 | " 765a8070ece0f1383d0f5faf913dfb9b \n",
259 | " 81.0 \n",
260 | " \n",
261 | " \n",
262 | " 1 \n",
263 | " b8bfa12431142333a0c84802f9529d87 \n",
264 | " 2 \n",
265 | " a41e356c76fab66334f36de622ecbd3a \n",
266 | " 99.3 \n",
267 | " \n",
268 | " \n",
269 | " 2 \n",
270 | " b8bfa12431142333a0c84802f9529d87 \n",
271 | " 3 \n",
272 | " 765a8070ece0f1383d0f5faf913dfb9b \n",
273 | " 81.0 \n",
274 | " \n",
275 | " \n",
276 | " 3 \n",
277 | " 00010242fe8c5a6d1ba2dd792cb16214 \n",
278 | " 1 \n",
279 | " 4244733e06e7ecb4970a6e2683c13e61 \n",
280 | " 58.9 \n",
281 | " \n",
282 | " \n",
283 | " 4 \n",
284 | " 00018f77f2f0320c557190d7a144bdd3 \n",
285 | " 1 \n",
286 | " e5f2d52b802189ee658865ca93d83a8f \n",
287 | " 239.9 \n",
288 | " \n",
289 | " \n",
290 | "
\n",
291 | "
"
292 | ],
293 | "text/plain": [
294 | " order_id ... price\n",
295 | "0 b8bfa12431142333a0c84802f9529d87 ... 81.0\n",
296 | "1 b8bfa12431142333a0c84802f9529d87 ... 99.3\n",
297 | "2 b8bfa12431142333a0c84802f9529d87 ... 81.0\n",
298 | "3 00010242fe8c5a6d1ba2dd792cb16214 ... 58.9\n",
299 | "4 00018f77f2f0320c557190d7a144bdd3 ... 239.9\n",
300 | "\n",
301 | "[5 rows x 4 columns]"
302 | ]
303 | },
304 | "metadata": {
305 | "tags": []
306 | },
307 | "execution_count": 3
308 | }
309 | ]
310 | },
311 | {
312 | "cell_type": "code",
313 | "metadata": {
314 | "id": "8jxinQxfAB6e",
315 | "colab_type": "code",
316 | "colab": {
317 | "base_uri": "https://localhost:8080/",
318 | "height": 204
319 | },
320 | "outputId": "eab66112-b228-4a67-a33b-fcdc3459ddab"
321 | },
322 | "source": [
323 | "# Print orders info.\n"
324 | ],
325 | "execution_count": null,
326 | "outputs": [
327 | {
328 | "output_type": "stream",
329 | "text": [
330 | "\n",
331 | "RangeIndex: 112650 entries, 0 to 112649\n",
332 | "Data columns (total 4 columns):\n",
333 | " # Column Non-Null Count Dtype \n",
334 | "--- ------ -------------- ----- \n",
335 | " 0 order_id 112650 non-null object \n",
336 | " 1 order_item_id 112650 non-null int64 \n",
337 | " 2 product_id 112650 non-null object \n",
338 | " 3 price 112650 non-null float64\n",
339 | "dtypes: float64(1), int64(1), object(2)\n",
340 | "memory usage: 3.4+ MB\n"
341 | ],
342 | "name": "stdout"
343 | }
344 | ]
345 | },
346 | {
347 | "cell_type": "code",
348 | "metadata": {
349 | "id": "D5QCoN3CEaGi",
350 | "colab_type": "code",
351 | "colab": {
352 | "base_uri": "https://localhost:8080/",
353 | "height": 204
354 | },
355 | "outputId": "01918f16-8ef2-4699-8ed1-4cd78cd9b2d6"
356 | },
357 | "source": [
358 | "# Print products header.\n"
359 | ],
360 | "execution_count": null,
361 | "outputs": [
362 | {
363 | "output_type": "execute_result",
364 | "data": {
365 | "text/html": [
366 | "\n",
367 | "\n",
380 | "
\n",
381 | " \n",
382 | " \n",
383 | " \n",
384 | " product_id \n",
385 | " product_category_name \n",
386 | " product_weight_g \n",
387 | " product_length_cm \n",
388 | " product_height_cm \n",
389 | " product_width_cm \n",
390 | " \n",
391 | " \n",
392 | " \n",
393 | " \n",
394 | " 0 \n",
395 | " 1e9e8ef04dbcff4541ed26657ea517e5 \n",
396 | " perfumaria \n",
397 | " 225.0 \n",
398 | " 16.0 \n",
399 | " 10.0 \n",
400 | " 14.0 \n",
401 | " \n",
402 | " \n",
403 | " 1 \n",
404 | " 3aa071139cb16b67ca9e5dea641aaa2f \n",
405 | " artes \n",
406 | " 1000.0 \n",
407 | " 30.0 \n",
408 | " 18.0 \n",
409 | " 20.0 \n",
410 | " \n",
411 | " \n",
412 | " 2 \n",
413 | " 96bd76ec8810374ed1b65e291975717f \n",
414 | " esporte_lazer \n",
415 | " 154.0 \n",
416 | " 18.0 \n",
417 | " 9.0 \n",
418 | " 15.0 \n",
419 | " \n",
420 | " \n",
421 | " 3 \n",
422 | " cef67bcfe19066a932b7673e239eb23d \n",
423 | " bebes \n",
424 | " 371.0 \n",
425 | " 26.0 \n",
426 | " 4.0 \n",
427 | " 26.0 \n",
428 | " \n",
429 | " \n",
430 | " 4 \n",
431 | " 9dc1a7de274444849c219cff195d0b71 \n",
432 | " utilidades_domesticas \n",
433 | " 625.0 \n",
434 | " 20.0 \n",
435 | " 17.0 \n",
436 | " 13.0 \n",
437 | " \n",
438 | " \n",
439 | "
\n",
440 | "
"
441 | ],
442 | "text/plain": [
443 | " product_id ... product_width_cm\n",
444 | "0 1e9e8ef04dbcff4541ed26657ea517e5 ... 14.0\n",
445 | "1 3aa071139cb16b67ca9e5dea641aaa2f ... 20.0\n",
446 | "2 96bd76ec8810374ed1b65e291975717f ... 15.0\n",
447 | "3 cef67bcfe19066a932b7673e239eb23d ... 26.0\n",
448 | "4 9dc1a7de274444849c219cff195d0b71 ... 13.0\n",
449 | "\n",
450 | "[5 rows x 6 columns]"
451 | ]
452 | },
453 | "metadata": {
454 | "tags": []
455 | },
456 | "execution_count": 99
457 | }
458 | ]
459 | },
460 | {
461 | "cell_type": "code",
462 | "metadata": {
463 | "id": "Gd93j3O_AWsU",
464 | "colab_type": "code",
465 | "colab": {
466 | "base_uri": "https://localhost:8080/",
467 | "height": 238
468 | },
469 | "outputId": "ca205535-15b4-4c24-8829-87caa5e69d3a"
470 | },
471 | "source": [
472 | "# Print products info.\n"
473 | ],
474 | "execution_count": null,
475 | "outputs": [
476 | {
477 | "output_type": "stream",
478 | "text": [
479 | "\n",
480 | "RangeIndex: 32951 entries, 0 to 32950\n",
481 | "Data columns (total 6 columns):\n",
482 | " # Column Non-Null Count Dtype \n",
483 | "--- ------ -------------- ----- \n",
484 | " 0 product_id 32951 non-null object \n",
485 | " 1 product_category_name 32341 non-null object \n",
486 | " 2 product_weight_g 32949 non-null float64\n",
487 | " 3 product_length_cm 32949 non-null float64\n",
488 | " 4 product_height_cm 32949 non-null float64\n",
489 | " 5 product_width_cm 32949 non-null float64\n",
490 | "dtypes: float64(4), object(2)\n",
491 | "memory usage: 1.5+ MB\n"
492 | ],
493 | "name": "stdout"
494 | }
495 | ]
496 | },
497 | {
498 | "cell_type": "code",
499 | "metadata": {
500 | "id": "AzBZGfXJEZ0P",
501 | "colab_type": "code",
502 | "colab": {
503 | "base_uri": "https://localhost:8080/",
504 | "height": 204
505 | },
506 | "outputId": "2def817c-b13d-464a-c0b9-a6b80c090363"
507 | },
508 | "source": [
509 | "# Print translations header.\n"
510 | ],
511 | "execution_count": null,
512 | "outputs": [
513 | {
514 | "output_type": "execute_result",
515 | "data": {
516 | "text/html": [
517 | "\n",
518 | "\n",
531 | "
\n",
532 | " \n",
533 | " \n",
534 | " \n",
535 | " product_category_name \n",
536 | " product_category_name_english \n",
537 | " \n",
538 | " \n",
539 | " \n",
540 | " \n",
541 | " 0 \n",
542 | " beleza_saude \n",
543 | " health_beauty \n",
544 | " \n",
545 | " \n",
546 | " 1 \n",
547 | " informatica_acessorios \n",
548 | " computers_accessories \n",
549 | " \n",
550 | " \n",
551 | " 2 \n",
552 | " automotivo \n",
553 | " auto \n",
554 | " \n",
555 | " \n",
556 | " 3 \n",
557 | " cama_mesa_banho \n",
558 | " bed_bath_table \n",
559 | " \n",
560 | " \n",
561 | " 4 \n",
562 | " moveis_decoracao \n",
563 | " furniture_decor \n",
564 | " \n",
565 | " \n",
566 | "
\n",
567 | "
"
568 | ],
569 | "text/plain": [
570 | " product_category_name product_category_name_english\n",
571 | "0 beleza_saude health_beauty\n",
572 | "1 informatica_acessorios computers_accessories\n",
573 | "2 automotivo auto\n",
574 | "3 cama_mesa_banho bed_bath_table\n",
575 | "4 moveis_decoracao furniture_decor"
576 | ]
577 | },
578 | "metadata": {
579 | "tags": []
580 | },
581 | "execution_count": 100
582 | }
583 | ]
584 | },
585 | {
586 | "cell_type": "code",
587 | "metadata": {
588 | "id": "l4ci_uMgy81Z",
589 | "colab_type": "code",
590 | "colab": {}
591 | },
592 | "source": [
593 | "# Print translations info.\n"
594 | ],
595 | "execution_count": null,
596 | "outputs": []
597 | },
598 | {
599 | "cell_type": "markdown",
600 | "metadata": {
601 | "id": "sC5SO_1LgNO5",
602 | "colab_type": "text"
603 | },
604 | "source": [
605 | "---\n",
606 | " Q&A 1 \n",
607 | "\n",
608 | "---"
609 | ]
610 | },
611 | {
612 | "cell_type": "markdown",
613 | "metadata": {
614 | "id": "3bGr9T2DGo20",
615 | "colab_type": "text"
616 | },
617 | "source": [
618 | "### **Translating item category names**"
619 | ]
620 | },
621 | {
622 | "cell_type": "markdown",
623 | "metadata": {
624 | "id": "e9Y2uCaKwl3j",
625 | "colab_type": "text"
626 | },
627 | "source": [
628 | "**The product names are given in Portuguese.**\n",
629 | " * We'll translate the names to English using a `pandas` `DataFrame` named `translations`.\n",
630 | " * `.merge()` performs a join operation on columns or indices.\n",
631 | " * `on` is the column on which to perform the join.\n",
632 | " * `how` specifies which keys to use to perform the join. "
633 | ]
634 | },
635 | {
636 | "cell_type": "code",
637 | "metadata": {
638 | "id": "6AXIu0a_fLuG",
639 | "colab_type": "code",
640 | "colab": {}
641 | },
642 | "source": [
643 | "# Translate product names to English.\n",
644 | "\n",
645 | "\n",
646 | "# Print English names.\n"
647 | ],
648 | "execution_count": null,
649 | "outputs": []
650 | },
651 | {
652 | "cell_type": "markdown",
653 | "metadata": {
654 | "id": "FVqfYEjwHXZM",
655 | "colab_type": "text"
656 | },
657 | "source": [
658 | "### **Convert product IDs to product category names.**"
659 | ]
660 | },
661 | {
662 | "cell_type": "markdown",
663 | "metadata": {
664 | "id": "welfsnP1xJzC",
665 | "colab_type": "text"
666 | },
667 | "source": [
668 | "**We can work with product IDs directly, but do not have product names.**\n",
669 | " * Map product IDs to product category names, which are available in `products`.\n",
670 | " * Use another `.merge()` with `orders` and subset of `products` columns.\n",
671 | " \n",
672 | "**Using category names will also simplify the analysis, since there are fewer categories than products.**"
673 | ]
674 | },
675 | {
676 | "cell_type": "code",
677 | "metadata": {
678 | "id": "H1wmY51JtTu7",
679 | "colab_type": "code",
680 | "colab": {}
681 | },
682 | "source": [
683 | "# Define product category name in orders DataFrame.\n"
684 | ],
685 | "execution_count": null,
686 | "outputs": []
687 | },
688 | {
689 | "cell_type": "code",
690 | "metadata": {
691 | "id": "kogImVcnu4q7",
692 | "colab_type": "code",
693 | "colab": {}
694 | },
695 | "source": [
696 | "# Print orders header.\n"
697 | ],
698 | "execution_count": null,
699 | "outputs": []
700 | },
701 | {
702 | "cell_type": "code",
703 | "metadata": {
704 | "id": "J906oRHjgsZE",
705 | "colab_type": "code",
706 | "colab": {}
707 | },
708 | "source": [
709 | "# Drop products without a defined category.\n"
710 | ],
711 | "execution_count": null,
712 | "outputs": []
713 | },
714 | {
715 | "cell_type": "code",
716 | "metadata": {
717 | "id": "S0DEdAgkfke2",
718 | "colab_type": "code",
719 | "colab": {}
720 | },
721 | "source": [
722 | "# Print number of unique items.\n"
723 | ],
724 | "execution_count": null,
725 | "outputs": []
726 | },
727 | {
728 | "cell_type": "code",
729 | "metadata": {
730 | "id": "sp_ZZcj7IEMD",
731 | "colab_type": "code",
732 | "colab": {}
733 | },
734 | "source": [
735 | "# Print number of unique categories.\n"
736 | ],
737 | "execution_count": null,
738 | "outputs": []
739 | },
740 | {
741 | "cell_type": "markdown",
742 | "metadata": {
743 | "id": "Yxp4Dk15IP9g",
744 | "colab_type": "text"
745 | },
746 | "source": [
747 | "**Insight**: Performing \"aggregation\" up to the product category level reduces the number of potential itemsets from $2^{32328}$ to $2^{71}$."
748 | ]
749 | },
750 | {
751 | "cell_type": "markdown",
752 | "metadata": {
753 | "id": "_z5WqVXFIn23",
754 | "colab_type": "text"
755 | },
756 | "source": [
757 | "### **Construct transactions from order and product data**"
758 | ]
759 | },
760 | {
761 | "cell_type": "markdown",
762 | "metadata": {
763 | "id": "fDofpDQ8zw7n",
764 | "colab_type": "text"
765 | },
766 | "source": [
767 | "* **We will perform Market Basket Analysis on transactions.**\n",
768 | " * A transaction consists of the unique items purchased by a customer.\n",
769 | "* **Need to extract transactions from orders `DataFrame`.**\n",
770 | " * Group all items in an order."
771 | ]
772 | },
773 | {
774 | "cell_type": "code",
775 | "metadata": {
776 | "id": "LObvSR1bfs8N",
777 | "colab_type": "code",
778 | "colab": {}
779 | },
780 | "source": [
781 | "# Identify transactions associated with example order.\n",
782 | "example1 = orders[orders['order_id'] == 'fe64170e936bc5f6a6a41def260984b9']['product_category_name_english']\n",
783 | "\n",
784 | "# Print example.\n"
785 | ],
786 | "execution_count": null,
787 | "outputs": []
788 | },
789 | {
790 | "cell_type": "code",
791 | "metadata": {
792 | "id": "B2EEHJpPWOVJ",
793 | "colab_type": "code",
794 | "colab": {}
795 | },
796 | "source": [
797 | "# Identify transactions associated with example order.\n",
798 | "example2 = orders[orders['order_id'] == 'fffb9224b6fc7c43ebb0904318b10b5f']['product_category_name_english']\n",
799 | "\n",
800 | "# Print example.\n"
801 | ],
802 | "execution_count": null,
803 | "outputs": []
804 | },
805 | {
806 | "cell_type": "markdown",
807 | "metadata": {
808 | "id": "n83EDUs0Wa_2",
809 | "colab_type": "text"
810 | },
811 | "source": [
812 | "**Insight**: Aggregation reduces the number of items and, therefore, itemsets."
813 | ]
814 | },
815 | {
816 | "cell_type": "markdown",
817 | "metadata": {
818 | "id": "0yVc5cmhCHt6",
819 | "colab_type": "text"
820 | },
821 | "source": [
822 | "**Map `orders` to `transactions`.**\n",
823 | "* `.groupby()` splits a `DataFrame` into groups according to some criterion.\n",
824 | "* `.unique()` returns list of unique values."
825 | ]
826 | },
827 | {
828 | "cell_type": "code",
829 | "metadata": {
830 | "id": "nXES2DJ3Ry8l",
831 | "colab_type": "code",
832 | "colab": {}
833 | },
834 | "source": [
835 | "# Recover transaction itemsets from orders DataFrame.\n",
836 | "\n",
837 | "\n",
838 | "# Print transactions header.\n"
839 | ],
840 | "execution_count": null,
841 | "outputs": []
842 | },
843 | {
844 | "cell_type": "code",
845 | "metadata": {
846 | "id": "l06VMDNQfzqZ",
847 | "colab_type": "code",
848 | "colab": {
849 | "base_uri": "https://localhost:8080/",
850 | "height": 564
851 | },
852 | "outputId": "bcf16881-eabe-4f22-b70a-18c097c4c0a8"
853 | },
854 | "source": [
855 | "# Plot 50 largest categories of transactions.\n"
856 | ],
857 | "execution_count": null,
858 | "outputs": [
859 | {
860 | "output_type": "execute_result",
861 | "data": {
862 | "text/plain": [
863 | ""
864 | ]
865 | },
866 | "metadata": {
867 | "tags": []
868 | },
869 | "execution_count": 59
870 | },
871 | {
872 | "output_type": "display_data",
873 | "data": {
874 | "image/png": "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6oknntCPP/6oDh06mOqK6uv+t3btWj322GMKDQ1VWFiYpTacOXNG8+fP12effaZy5crpiSee0Nq1a9WpUyf/XfbcOLFvlitXTvv379cNN9wgKfMuam6p43MSFham8+fP+48RCQkJltuRmpqqY8eOacWKFerZs6ckWfpeU1NTde7cOX3//fdq3769JFlugxPbMzw8XJGRkZbKXMjuvmWn/E033aSHH35YmzZt0sMPP+x/PSIiwvKTmhIlSgR9vPCVW7lypebOnet//bXXXlOLFi0CZorzyZMnjzp27BhUGx5//HE1bdpU06dPt/xk5kJnzpzJtv1q1qypUaNGWaojLS1NGzZs0Ndff63hw4dLkqVjp53zupPj4tatW6dZs2b5/65Tp47atGmjWbNmqVGjRgHL58uXL1u7fV2zrbBzXXD69Gn/b6Nr16666aab9Mwzz2jatGmWr5Psng/trEfWrnJPPPGEBg8erBo1aqhixYratWuXbrnlFkvrEuz57IEHHtANN9yg4cOHZ+s9EhERodtuu8305xcpUsTyE7sL2b2+sHvdeyHf/nTVVVcpX758GjBggB588EENHDjwLy9vd9+U7J0DfDwV4NWvX19DhgzRqVOnNHfuXH322Wdq0aKF6fLTpk3TrFmzVLZsWT311FN66KGHFBISohdeeEH169c3Vce1116r9evXKyQkRBkZGZo0aZLlYGvkyJH67LPP1LdvX5UoUUIHDhywdOHTtWtXS593Ka+99po++OADtWzZUmXLltW+fftUo0YN0+XLly+vjh07as+ePerTp4/Onj1r6fPPnTunxYsX6/PPP1d6erp69uypRo0aaePGjerfv3/AaRJ8ypUrpwkTJvjHJs6ZM0dly5a9LOvhG4P39ddfm0trm4tx48ZpwYIFevzxx1WkSBEdPHhQzz33nOny1atX16RJk3Tu3DmtXbtWH330UcAUyRfq0qWLdu7cqTZt2mju3Lm6+uqrJUlVq1bV4sWLTdVx7733qlGjRkpPT9ewYcOUlJRkKRiIjo7WV199pbp162rs2LGqUKGCJCkyMlINGzY0VYfdfVPKPIE1bdpU1apVk5TZxbBq1ar+Ljrjx48PWEe7du3UtWtXnThxQu+8847mzZunXr16WWrHM888o4YNG6pmzZqqVKmS4uPjLSVZatSokf9CoWrVqjp69KjlQf9ObM/atWtr5cqVeuihhyyX9bG7b9kpf/vtt+v2229X3bp1VbRo0WBXQZJ0//33a8yYMXrssceyfRdWLhxTUlJ0/PhxFStWTFJmFzIr3akffPBBW99HaGiovvzyS9sBXv78+bV27Vr/ueenn35S/vz5LdXRo0cPDRkyRDVr1tStt96qvXv3+m/MmOHEef3QoUOKiYnRb7/95h8zK8nfXdKMEydOZEvKce7cOZ08eVIhISEKDw8PWN7XpdwwDB08eFBTpkzxH7/MsnNdkJqaqvT0dP9Nk8cee0x58+bVs88+e8nx9pdi93xoZz06d+580WvLli3TsmXLFBISYuk7tXM+K1OmjK699lpVrlxZ9957r+nPvFD9+vX12WefqVGjRtmON1Z+Z3avL+xe9/osW7ZMM2bM0LFjx/Tkk09q0aJFKliwoNLS0tSgQYOAAZrd8pK9fdN388CJc4DnsmguWLBAy5cvl2EYqlu3rpo2bWq6bHR0tJ588kmVL1/+omWbN2/WXXfdFbCOo0ePasCAAfrpp58UEhKi6tWra+zYsSpevLil9ZCU7eRsxZkzZzRx4kT98MMPkqRatWrphRdesHxStOvs2bNavXq1brvtNpUtW1YJCQnavn27ateubap8rVq1VKNGDbVv315VqlTJtuyVV14xnbggMTFRI0aM0A8//KCQkBDdf//9euWVV0x/J3bWY9CgQfrqq6+Umpqa7aLbMAyFhIQElawkWOfPn9fUqVOz/T46d+580ZPv3CxdulT169e3/MQtK8Mw9Ntvv6ls2bKKiIjQ8ePHdfjwYd1xxx2myk+bNk0tW7ZUkSJFLlp25MgRlSxZMmAddvdNSYqNjc11eW5zB2W1fv16/6DuunXrWnoynZP09HSlp6dfdEc1NydPnlShQoUUGhqqU6dOKSUlRaVKlTJd3onted999+nPP/9UwYIFlTdv3qB+I3b3LbvlpcwB9i+//LLy58+vp59+Wlu3btWwYcMsnYtyujCyeuE4Y8YMTZ482f/EZOXKlerSpYvatWtnqvyaNWv00ksvKTQ0NOjvo2vXrho4cKCuv/5602UutHHjRvXo0cO/P58/f14TJkwwdT72sZvtMKfzekxMjK655hrTbXjuuefUqFEjffjhh3rjjTf0+eefq1y5cpZuyL711ltauXKlHn30UUmZF6O1atVSly5dNGDAgIBjnlJSUjRq1Cj/zdG6detq8ODBKlCggOk22BEdHa2HHnroopsGK1as0ODBg4M+HyYmJio+Pl6VK1c2XcZOhlcnOXE+e+KJJzRnzpyg23D77bf7/++bkDskJETbtm0zXYed64v09HRFRUVZHgOZky5duqh9+/Z68MEHL1q2fPnygEGn3fI+KSkp2r9/v+68805zDf//cqvf6jnAU2Pw7PKNXwn02qWkpaUZM2fONAzDME6fPm2kpKQE1Y5ff/3VePjhh43atWsbhmEYGzduNF599VXT5QcNGmT079/fWL9+vbF+/Xpj4MCBxsCBAy23Y+/evUabNm2MOnXqGIZhGJs3b/aP0TFjxIgRpl67lISEBNPvzU1ycrKp1y5l8uTJRmJiYtCfb3cMXvPmzbP1r7/w3+W2fft249NPPzU+/fRTY8eOHZbLf//990ZSUpL/75MnT2YbY5ObtLQ0W/3ys9qzZ4/x9ddfG4aRuT+cOHHCkXrNcmpdTp8+bbz11ltG7969DcPIHDvgWy8zMjIyjNmzZxtjxowxDCNz3OvPP/9suR12t6cTY5QMI3OM1qeffmoYRuZvb8+ePabLdu/e3dRrufGNv1ixYoXRs2dP4/Dhw0GNBXfCtm3bjOnTpxvTp083fvvtN0tl69WrZyxZssTWmMhnn33WqFKlitGxY8ds4xKtOnfunLF9+3Zj+/btxrlz5yyXf/bZZ420tDT/3wkJCZbHyxqGvfO6bwyOb8xbenq60bJlS8v1fPvtt8bIkSONkSNHGt9++63pcmlpaZbGYF6K3esCM1auXBnwPW3btjWSkpKMkydPGrVq1TIaNWpkjBo1yvRn5HTsDeZ4fPr0aWPPnj3Gzp07/f+CkZqaapw+fdr/z4qxY8caw4YNMzZs2GC7HVdKML+FnMybN8/Ua39VecMwjO+++86oXbu2/zeyceNGS2MineKJLpqB0i6bzWy3ePHii1Lc5vTapYSFhWnWrFlq3bq1radlI0eO1AcffKC+fftKkipVqmS637CUmXVs4cKF/r+rVq2qJk2aWG6HL8PfuHHjJGVm+Ovfv7+6detmqrzdbHIlS5bUmjVrdODAgWzdN3zTYJj11FNPXfS0JafXLuXIkSOKjIzUAw88oCeffFL33HOPpc+/5pprNHv2bBUsWNBSOR8rGRFzc/bsWcXFxV20Pa1kfpwxY4YmTZrkfyowZcoUvfDCC6afCkiZv9es2z4iIuKi1y4lLCxMBQoUsD13UGxsrCZPnqzz58+rXr16OnLkiKKjo/Xxxx+bruP48eMaPny4/67zAw88oFdeecX0U3en1mXo0KEqUaJEtuxlffr0Ub169UyVHzlypBITE7Vlyxb169fPn1nviy++MN0GJ7ZnmTJllJaW5k8/f9NNN1l6uixl7o8rV67U0aNH1b59e3+2Q7PT5djNRpfVunXrVL9+fZUqVcry+CIps6vO2rVrJWU+3cypZ0kgt9xyi/9p+0033WSpbJEiRUx3eb6UJk2aBHXukTK7H+bNm9efddPXrT4tLU1paWmWzrG+sTMxMTFBZTucN2+e6tSp43/K8ueff+q///2vpXXzjeErUKCA/vjjD11zzTXZskiaVbduXctd66XM481///tf02MwL8XudYEZb731VsCn/6dPn1ahQoU0f/58RUZGqm/fvmratGnA8+X+/fu1b98+f4ZXn+TkZMsZXmfMmKGxY8eqSJEi/q7cVp+y+MaF+qaWMYJ4erZo0SJJ0nfffed/zWo79u7dq927d6tevXo6deqUzp8/b6mr+YgRI9S1a1d/mRMnTmjixImms9Xed999io6OVrNmzbI9UbY6nvHjjz++qLdETq/9VeUlacKECfriiy/8sUOlSpUsT4Pxww8/qFKlSv6eX0lJSdqyZYulJ8yeCPDsdi/4/vvvtXr1ah05ciRbsJiSkmI5CUWNGjW0dOlSWyfG8+fPX7RTW5337fTp0/7tYvWg5ZOcnKzatWv7U9WGhoaaaseSJUu0ZMkS/f7779lOoikpKabGCfgMGDBAW7Zs0R133BFUl8C0tDSdP39eGRkZOnv2rP+7tHogf/XVV9W7d2/Nnz9fr776qq666io9+eSTaty4sekL80GDBuV4kWdmnNaFfetPnz4tyfp+37VrV4WGhurOO++01H0vq+nTp2vevHn+7q3Hjx9X27ZtLQV4vhOYT2hoqKUByDfddJOefPJJPfLII9m2gZXA/5NPPtGXX37pL3PzzTfr2LFjpstLUlRUlG655RYNHDhQhmFo9uzZGjJkiKXU0E6sy/bt2zV69Gj/nEEFCxa0lDxh7dq1mjdvnr9L6dVXX51tjJAZTmzPTZs2qXv37v7ugGlpaXrnnXcsdXGJi4vTl19+qSeeeEJSZrBrZtzZ7NmzNWvWLO3bty/bVADJycmWAyMnBtjPmzdP48aN83dlmzx5svr27WspoLC7PevVq6fPP/9cjz76aNDjcsx2U85J69atFRsbqypVqmTrNhbMBfDzzz+vESNG6PXXX9fPP/+sTp06qUGDBqbLf/jhh2rWrJn/76JFi+rDDz+09H1Ur15df/75p9q2bavmzZsrb968euSRR0yXlzJvNrz//vuKj4/PdpPO7M2Yhx9+WNOmTbvoItrKdxrsdYEVZq67gk2I9Msvv2ju3Lk6duyYpk6d6n89IiLC0o10KXO/iIuLs5UMY8yYMXr77bdVuXJly4mpfMzmI7iUuXPnasqUKf4bdAkJCZZv0K1fvz5bQHj11VdbuqFvN0jdtGmTNm7cqBMnTmjGjBn+11NSUkwla7Fb/kIXJvOzes1l50a4jycCPLtJRa666ioVLFhQISEh2Q56JUuWzHEwbW5iY2P10UcfKTw8XPnz5w9q3ELevHl16tQp/0Xwrl27LN3hj4yMVOvWrfXYY49JynwKaeXug0+wGf5KlizpSDa5X3/9VXFxcUGfPCZNmqR3331XISEh2frmR0REWBqMLWUGU61bt1bx4sX1xhtvaMqUKRo/frwGDhxoKntZnTp1/P9PTU3VsmXLLN+Rj4+PV58+fbRt2zaFhITojjvuUExMjOmEMYcOHfIfRINVsGDBbGMXixUrZvnJZMGCBbVhwwb/k9ANGzZYClbT09N16623Bv1kRfq/33xWVm8iHDhwINuk5N27d7f8O3NiXexmL3Mis54T2/P111/XG2+84T9GrFmzRsOHD9fMmTNN1xFstkOnstFJ9pM/SJkXjnPnzvVfJPjmKLQSUNjdnr6s0cOGDfO/ZjWwsvOU23ch43syHQynsx1mZTVo9z1Zatasme69916lpKT4E2qY1bt3bzVs2FDNmzcP6qan7+ZTTExM0MGyE5l/AzHzmw02IdLjjz+uxx9/XHPnzlXz5s1ttdOJTIdOZLD0SUxMzHZzzuwY0+nTp9u+QZfT78FK4hy7QWpCQoI2b96sM2fOZJuwvmDBgho5cuRfXj6rggUL6tixY/79eO3atZYSn0n2b4RLHgnwfFJSUjRx4kT9+OOPkjLTKb/44osXDa6+0L333qt7771XDRo0sHzAvdCXX35pq7wkvfDCC+rQoYOOHDmigQMHatWqVYqJiTFdvnPnzrr99tv9J9W+fftaSnbgE2yGv9dff11z587VkiVLbN3Bvfbaa4MuK2UG/l27dlV0dLTliZuzOnbsmGbOnKnY2FjdddddiomJ0b/+9S/Fx8frqaeeMhXgXbgdmjdvrg4dOlhqx5AhQ9SqVSt/ZljfhNQfffSRqfK33nqr6UHbF/JdKPku0HxPOWJjY3McjJybfv366eWXX/ZfXO3atcvSUy+rB9ucFC1aVHv37vUfQOfPn295f8vIyFBiYqI/4E1MTLQcHDmxLnazlzmRWc+J7elEOvxgsx2WKVNGZcqUUVxcnKXPy0mxYsXUsmVL7d+/X1LmVC/BJBmxM7WLZH972gmsfOw85Q7Uy8LMUyensh2WKFFCX331lf+p37JlyywnTsva5eq6665TUlKS5aQeGRkZeuGFFyx9blZOfKdOZP51QlRUlD8h0lVXXaXk5GRLSTqaN2+uAwcO6MCBA9kunK1kjXUi06ETGSzXrFmjgQMHKjExUaGhof7ulWYfLDhxg65SpUoaMWKEOnXqJMMwNHXqVFWqVMlSHWvWrNHu3bvVvn17JSYmKikpyXQPinr16qlevXpavXq1atWqZelznSifVd++fdWpUycdPHhQTz31lPbt26f333/fUh12b4RLHsui2b17d0VERPgvPufOnaukpCRNmDDBVPlLjeWzMkbJKfHx8Vq1apUMw1CtWrUspXR2UjAZ/h599FHFxMSof//+eueddy56mmD24BcVFaVdu3apXr162Z5SWB2Dd6kLBbMH0Fq1aql58+Zq167dRRetEyZMCGpMw/nz5/XYY4/pq6++Ml2madOmmj9/fsDXLmXXrl3q2LGjbr/99mwnEjPdRB3N7KTMrI2//vqrJKly5co5ZhC7lDNnzmjy5MmKj4/XuHHjtHv3bu3du9f0mDMpc7xBnz59tGfPHhUrVkzh4eGaNGmSypUrZ7oOXze6rFkK+/TpY+kpXtauIFlZ2cftZkfNKbPeoEGDLD2ZdWJ7tmnTRr169cqWDv/NN9+09ATPbrZDu13gpMz9YMiQIQoLC9Py5cu1adMmvffee5o0aZLpOrp27aoKFSpkm9pl27Zteu+990zX4cT2PHHihDZs2CAp83dqdfoHO8es22+/PdcnOVaeOtm1e/duvfTSS/4bOGFhYZo4caJuvvlm03U0a9ZMsbGx/nXKyMhQixYtLHW5GjJkiNq1a5ct66EVds+FPk5n/r1Qs2bNTM2pmjUgOHbsmKUu1W+++aZmz56t8uXLZxs/Z2YeVR8nst3m9F1afaravHlzjRs3Tr169VJsbKy++OILHTx40HTg3alTJw0ePFi9e/dWbGys5s+fr8WLF2vy5Mmm25CSkqLXX39d3333nUJCQvTwww9r0KBBpp9cZR0//dVXX+nw4cPq1auX6fHTPsFeH/z888+qVq1atnGZWVmdLiY5OVm//PKLJKlKlSoqXLiwpfL/+9//1K1bt4tuhFvJFOupJ3g7d+7UkiVL/H9XrVrVn07YjKzRcWpqqr777jtLqZilzIGiOZ2UrKb/LVu2rKVxTVm1bdtWkyZNyjYg/OWXX77kxWRO0tPT1bJlS8XGxlo+eD/11FPq37+/Dhw4cFGCGisHv3PnzqlcuXLasWOHpc+/0IVjOHzMHkCXL19+yf7TZoO77t27+z/bMAxt377dcjrm0NBQ7dmzx39RsXfvXkt32fr376+6desGNabRbveJCxUpUiTo+bXsJhWRMse+zZkzR/v27ZNhGLrpppssb5NmzZrpjjvu0E8//SRJevrppy3PjZW1K0hqaqrWrl2re+65x1KAd9VVV+nFF1/Uiy++aOmzfSIiImynp3Ziew4ePDjHdPhWlChRQh9++KHOnDmjjIwMy92H7XaBk5wZYD9s2DCNGDFCTZo08U/tEh0dbamOrNvTNwbPyvZctWqV+vXrp4oVK/rri4mJ0QMPPGC6DjtPuX2/74kTJypv3rxq3bq1DMPQnDlzghoTc+bMGR0+fDjb0xqzNxvLly+vxYsXZ0sAZHX/cKLL1caNGzV37lzddNNN2W7Smb0BYfdc6FO9enX/1CF2cyD45vLL+pTaTGBiN6HSkiVL9M033wTs4ZUbJ86LTjxVlTL3ybS0NIWEhOiJJ55Q8+bNTQd4gwcPVp8+fbR3717VrVvXf4POrPT0dH344Ye2eqQEO376QsFeH8TGxqpatWrZxmX6hISEWL5eKVSokK05XatUqaJFixYFfSNc8liAV7JkyWxzx504ccLSXE4XjuXr0qWLpUxbUvYumqmpqVq4cKHpO+n9+vVTTEyMWrRokWOQaPYgfvr06Ww7QtGiRXXq1ClTZX3sZPhr166d2rVrp169eumtt96yVDYrJ7qvSdkPoL7v5MSJE6bLp6ena9y4cf55BR944AG9+OKLlu56Zh2DFxYWpg4dOljOxtmrVy89+eSTqlixoj9IDJRBNqvz58/b6qqaVTB9/Z955hl98sknF90EsTpO1U5SkQsz8/na7Ruwb/VOdoUKFWx1675wH/dln7Qi2OyoTt6x9HU/840rDSbj1913362vvvoq20W01fG3drMd2u0C52N3gH3x4sVtHTsl+9vzrbfe0owZM/zf6e7du9WvXz9LAV6HDh3UrFmzi55yW/H1119ne8rVoUMHNW/e3NL35ES2w7CwMH8CooSEBEnmxzhJznS5Gjx4sKX3X8juuVDKHHvct29ff11Wx4JLmeey6OhoXXXVVWratKlOnDihLl26+IctmDn22A0ISpQoEXRwd+F55EJWzyN2n5T7rjFLlSql5cuXq0yZMjp58qTp8nZv0DmRoTXY8dMXCvb6YMSIEcrIyNArr7wS9BNyp65xfOzcCJc8EuD5LnKvvvpqNW3a1H8x/d1339nqOlCwYEH98ccflspcOOC2R48eatWqlV5++eWAZZ955hlJ9tPiZ2Rk6MyZM/6DzKlTpywNdvWxm+HP7gWKYRiaNWtWtgnbn3jiiaB+9D758uVTy5Yt1aJFC9PTXwwfPlzp6en+k+sXX3yh6OhoSwFoaGjoRV335s+fb6k7X+3atbVo0SL/ieCee+4xnZJfyjxxbN++3XLSiKzs9PX3jSO1O07VTlIRJzPz/fLLL4qJiVF8fLzS09Mdmby+ZMmS2rdvn6UywWZHdfKOpZ2MX06mw7eb7bBy5cr67bffgj7BS/YG2DvdTWj//v3+THZhYWGWEjulpaVle3/58uVNn0d8WZybNWumO++80z/dQzBPuc+ePav9+/f7hykcOHDAcmZou9kO7Y5xkuyPPZYuzqhsRzDnQilz6ISdseBSZu+TQoUKaenSpapRo4YGDRqkVq1aWRqXHmxA4PttVa5c2f/EPutNbDO/sZzOI1nbYOU84sST8qefflonT55Ujx491KdPHyUnJ5u6GZA1CVFWvptCVsYS2s3QGuz46QvZuT4IDQ1Vv379sk0zZoVT1zhS5s0Y3zhT3w1oydrTdk8EeL6d6ZZbbsm2Q7Zq1cpSPVmfhhiGoc2bNwc191BW8fHxSkxMNPXeu+66S+np6VqwYIGtLlONGzfWc889p7Zt20qSPv/886DmIgo2w59TTyLHjBmjbdu2+TNdzZs3T/v27bM8JjLrxUBGRoY2bdqk5ORk0+WdmFfQiblVpMyTh2+bWg10N27cqBYtWgTdvUfKPIB9/PHHF/X1N8OX3MVu1jE7SUWcyMzn88orr+ill16yld46a7dpwzC0adMmS0G7FHx2VCfuWPrY6X524cXShXXaHWtlpRuc3S5wkr0B9k4G3XanWihWrFi2TIOxsbGm98327dtr7ty5/nNBMBdqPr169VKrVq101113yTAMbdu2TcOHD7dUh91sh3aOez52ulzFxMSoX79+2br6Z2VmHLVk/1woZWZGzTqVSIsWLSyNW5P+L7viunXr9NBDDyl//vyWj6HBBgQX/rY+/fRT///N/sacPI848aS8cePGkjKf2n/99demy3Xu3NkfoB46dEgREREKCQlRUlKSrrvuOktdUO1maH3ttdc0YMAA7dy5U/fcc49//LRVaVVr5QAAIABJREFUdpOO3XDDDTp48GBQibGcusaRMrua9uzZUyNHjtTUqVM1Y8YMy0MOPBHg2Z0mwSfrXYewsDC1bdtW9evXt1RH1kezGRkZSktLMz3Ro+9zt2/fbukzL9SlSxeVLFnS/+Ns06ZNtrvaZgXbRdKpJ5GrV69WbGysv/vBo48+qubNm1sO8LLeZQsLC9MNN9xg6TuRgp9X0Mm5VXx3+u644w5/F00rd/qsrvOl2OnrL9l/8tWrVy9NnTpVBQsWVExMjD+piFlZx5faER4ersjISFt1ZB2D53vCMmjQIEt12MmOaveOpY+d7mdOXizZzXZotwtcRkaG8ubNq+nTpwc1wN53Yy/rRWew7E61EB0drb59+yoqKkohISGqWLGixo4da6qsL9X4li1btHv37qATbUlSgwYNVK1atWxd2KzeBHEi26Hd454UfJcrX1bbrF39g+HEudDuWHAp82lwx44dtWfPHvXp00dnz561VF7KOSAws3868duSnDuP2HlSbiYLa27v8V0jDh8+XNWrV/fnrFi6dKnWr19vqg0+do/fdsdP+9i9Pjh16pSaNGmiatWqZTuHmbmJcqmHGj5WbhSeO3dONWvWlGEYKlmypHr16qUWLVpYWhdPBHhZrV69Wtu2bcs2PshsAOhEoJj10WyePHl0zTXXWD743XfffYqOjr7oUbeVk5Fvrhe79uzZc9Ej4kDBoi8xjRPdSbL+WILtmmn3wGNnXkEn51axe6fPie/Dbl9/yf6TL7tJReyML82qdu3aWrlypa0+8h07dryol8Du3bstjcHo2rWrWrVqFVR2VMneHUufrN3PDMPQ7t27LXc/e/311y+62MzptdwMHjxYL730kv/Ory/boVm+30jWsdxWZA2Y7ewXbdu2vShZRE6vBWJnqoVy5cpp9uzZ/vHbVi64nEq0JWUGiwUKFMh2kZp1CIIZvoyMS5cuDaoddo57TozL8T2BsHtOd+Imit2x4JL8Y6Ruu+02FShQQAkJCZbHZtoNCHLqBh0REaEKFSqY6lLt1HnEzpPyUaNGadasWbl2QRw9enTAjKTr1q3Ta6+95v+7YcOGltP6S5nB/u7du1WvXj2dOnXK35XZDN/xLevv2soxb9SoURo4cKC++eYbW9cHTZo0CarHm2T/oUZWvrihSJEi+u2331SqVCnL42U9FeCNHTtWmzZt0q5du/Tvf/9b3377raVB/mlpafryyy8vChCtXIgXKVJEBQoUUGhoqHbs2KH169erfv36lsbG+Lpbfffdd/7XrJyM9u7dq8GDByshIUHLly/Xli1btHz5cnXr1s10G6TMyS9nzZqlo0ePqlKlSlq/fr3+9a9/mX4amNPdjEKFCqly5crq2LFjwANyrVq11KlTJ/9Jbd68ebbmJwl2ElA78wo6ObeKnTt90qXvLlm5qxRsX/+s7D75Sk1N1YIFCy5KZW/lya6d8aW+CzXDMDR58mQVLFjQn6nQ6hi8vn37XnQHOKfXcmMnO6pk746ljxMZv3K6Y+wbP2aW3WyHGzZsUM+ePZWRkaGVK1dq06ZNmj17tqUugU4EzBc+0UhPT7d8I6VcuXKaMGFCtqkWrCTCkDJ7DWQdA232ZpJTibYkXdR118dK11272Q5zOu6ZfdLu5LicxMREffrppxcd+8z+Vnv06HHRe3N6LTe1a9dWXFycNm7cKMn6WHAp8xxQvnx5bd++XWXLllXBggV19913W6pDkq157CZOnKhNmzb5x6Tv2LFDt912mxISEjRixAhTT0vt5imQcn5SbrZr4vbt21WlSpUcAzzfOcrMFDGGYWj9+vX+nBU///yz5Tld586dqylTpuj8+fOqV6+eEhISFB0drY8//thUebvHPN95d8qUKZay51/Izk2UC2+iB3NzzKdRo0Y6ceKEOnfurLZt2yojI8NyEhtPBXgrV65UbGysmjdvrujoaL388st69dVXTZcfMmSI0tPTtXbtWrVt21ZxcXGWk7Q8/fTT+s9//qNTp06pQ4cOqlChglatWmVpglm7J6Nhw4bpxRdf1Lhx4yRJFStWVP/+/S0HeLNnz9acOXPUtm1bTZs2TTt27LA0D1PNmjW1f/9+f0A4f/58lSxZUgkJCRo6dGjAg1i/fv00c+ZMf5/yevXq+S9WrLA7QN6XDCVrUGc1QUpSUpJSUlIUERGh8ePHa+PGjerVq5elaTjs3OmTst9dSk1N1aJFiyx36wu2r39Wdp989ejRQ+fPn9fdd99tOTuhT7DjSyVnLtSOHz+u48ePKzU1NVsXtuTkZJ0+fdpSXXazo9q5Y5lVkSJFVLNmTf/FltmnLEuWLNGSJUv0+++/Z8tanJKSovDwcMvtOHfunMLCwpSenm45WcDIkSP1wQcfqG/fvpIypzgYOHCgpc+3EzBPnTpVU6dOVUpKSrabk2fPnrV8U8TuVAtTp07VvHnz/D0XRo0apWbNmllKhGE3uJPsZX50KtuhneOek+NyunXrpvLly6tmzZpB3czJabqOYI6BxYsX1wMPPGD5t+4TGxuryZMn+4MBX/Zgs8GAJI0bN05z5sy5aB47s+eVcuXK6bXXXvOfg7ds2aKPPvpIMTEx6t27t6kAz855JGs7gn1S7tQUC1FRUerdu7f/O0xNTfVfP5o1ffp0ffnll/7g9uabb9axY8cClnPqmFeqVClFRkbq4MGD2caI+pi9kW13nKuU2Qunf//+2rFjh0JCQlShQgWNHj3aUk6P5557TlLm9dJPP/2k1NRUy1lfPRXg5c2bV3ny5FFISIjOnz+vUqVK6fDhw6bL+5JpREZGqkuXLmrXrp1eeuklS20wDEMFChTQokWL1KpVK3Xr1i2opxW7du3yZx677777LO0YycnJql27tt58801Jmd2GrKYblzK3Z4ECBZSRkSHDMFShQgVLGf7WrVunWbNm+f+uU6eO2rRpo1mzZqlRo0YBy4eGhvrvBNthd4C8EwlS3n//fTVq1EgbN27U6tWr9fTTT2vEiBGWJh0eNmyY+vXrp6FDh0qSpTt90sV3l2rVquVPxGNWWlqaZs2alW3fbNWqlempQCRp1qxZtp587d+/P9t8l8GwMwVHThdqiYmJio+PNz0J6f9j77rjorj271lWbIBgjOKzd40NUV/E7tOYKKKiqIgRNfaChQiRolhAEYnlxUjArokmKtKs0QQlKsYSE0UjogYETESaUoK0nd8f+5t5O7S9d+4VkffO5+MnYWFmh2Xm3m8755w4cQIHDhzA8+fPZSNsJiYmmD17NtX1sKqj8hjlPnfuHHx8fJCamgqATiCldevWGDJkCGJiYiQ5fUA7LkXrFSnK4ZuZmcnEiEinHwoLC0slg7RrJ0vCbG9vjxEjRsDb21uWtBsbGxN3RPfu3YuZM2ciISGBKcEKDw/Hd999JwUVjo6OcHBwoErwbt68iS1btkhdFlalWVrlR1a1w/LUTEXQFKl4qO5mZWVRC8wA2mLtkSNHkJCQIAt+aYzBRbA86yIOHDigKBnQxdmzZ5l87GJjY2UF1i5duiAuLg5t27YlVl3kZeXE0olkhUajQW5uLn744QfZ5ANt8dTQ0LBUckpShOCx5gHAjh078Pvvv8PV1ZVap0EXuol9fn4+vv/+e2qxRXd3dzg6OkoxYkREBNzd3XH06FHicwiCgODgYCQkJMDV1RUpKSmIi4tDz549ic9RrRI8IyMj5OXlwdLSEm5ubmjYsCFVBVico1ar1cjLy4OJiQmxAqaI/Px8FBQU4MqVK5g6dSoAUPOMWNXP1Go1CgsLpQAnJSVFEdepTp06KCwsRKdOneDv749//OMfVG37zMxM2Xy6aGiqUqmI/i6s4yi6UEKQ5ymQIiZAV65cwcSJEzF69Gjs3buX6hwtW7ZUXOkrCzk5OdSb6rp16/D06VNZVzY2NpaqM8DaAWvevLnUDVUKHhYcU6ZMQVBQEARBgK2tLerVq4dBgwYRzeFPnz4d06dPR2BgILPvGqs6akZGBry9vaVAs3///vD09KTqDvv7+2Pbtm2KeJWdOnVCp06dMHToUGr/p5JglcOvWbMmcnNzpfvg0aNH1PwaloTZxMQEJiYm8PX1hbGxsRRkFRQUEPMCT5w4gZkzZ8LHx4dZAEL3GVPyvHl6emLZsmXo2rWrYqVZFuVHVgGfstRMRdCqmvJQ3W3fvj1SUlKo/H0B7TPdsmVLeHt7y4JfY2Nj6sIQy7MuQmkyoAsWHztAG9+cPHlS6s6ePHlSikv07QO68UBZoBnRZO1EssLAwADbtm3D4MGDmSyUzMzMEB8fL3124eHhaNy4sd7jxDUvKChI8XsD2nvKwsICQUFB1EULXZRcv8ePH09V1AK0ony6VKaxY8dWuJaUBV9fX6Snp+PevXtwdXWFkZERNmzYQEWpqVYJ3pYtW6BWq7FixQrs27cP2dnZ+OKLL4iPNzU1xcuXLzFw4EDMmTMH9evXp15Ira2tpcW0Z8+eSE1NpQ4QWNXPpkyZAicnJ2RmZmL79u0ICwujVvsCtG37wsJCuLm5YcuWLUhOTqYiU48cORL29vbSPPT333+Pjz76CLm5uUQBGOs4igilBHmeAikqlQqnT5/G6dOnJdEH2iRRJBzrbow0JGRdDp5Go0FycrI0BkCK69ev4/Tp09JGNHLkSGmEixRNmzZFUVGRrFpI0wE0MTGBnZ0dBg4cKKsy0lTteFhw/P333zAxMUF4eDhGjx4NFxcXjB07lijBE0fHpk+fXub4GM24E6s66urVq9GuXTu4ublBEAQcPXoUXl5eVCIppqamVJXFsrBq1Sp4e3tLSV5mZibWrFlDVdBhlcOfP38+Zs2ahefPn8PNzQ2XLl2ilupOSEiAu7s7Ewd63rx5Mun5oqIizJ8/n6gCXKtWLcyfP7/UyKsI0s+za9eucHd3l4ykg4ODqUbKAaBevXpMfBiAXfmRRe2Ql+IiwEd1NysrC2PGjIGlpSWVoFLTpk3RtGlTnDx5kun9AT7PutJkQBcsPnaANoB2dXWVOOTt2rWDn58f/v77b737gBgPZGZm4vr169KkwdWrV9GnTx+qBI+1E8kDnTp1wp07dxTxIEV4eHhg+fLliI+Px9ChQ1G7dm0EBgYSH19ShEgEbbe/devWTGKLJaFSqZCSkkJ1TJcuXUpxGmnXzmvXriEsLExKOOvXry/7fUhQrRK8K1euSC1RcbSShiu1c+dOqNVqODs748SJE8jOzqa2F3BycoKjoyNMTExgYGCAunXrYvv27XS/CNjUz2xtbdGsWTNcuHABeXl58PPzU2T43qJFC9SuXRt169bF+vXrqY93dnZGjx49pHE+JycnSQ2MJHhUOo5SEkqFQXgKpKxatQq7du3ChAkT0Lx5cyQkJKBPnz5U51BKQhYtHnQTD7VajebNm1Nz8MzMzFBQUCBVOouKiqgJ9jExMViyZIk0nllUVITt27ejS5cuRMe3bt2aqUIH8LHgEJVlr127hlGjRsHAwIC4EMHTKJdVHTUxMVG2Ri1ZsoTan3H48OE4fPgwrK2tZcEWTaKalJQk6+DVr1+/TM5QRWCVwx88eDDatGmDS5cuQRAELFiwQDLYJsWaNWuYOdAFBQWyz05U6yNBYGAgoqOj8eDBA9nIKy1WrVqFgIAAybqhX79+1JQFGxsbfPvttxg5cqTi+4KVZ8RL7TAqKgo///wzAG0wStth4aG6a2NjI3WcaMDDR08sRPF41lmTAUC7jwDKfOwArSBTSEgIcnJyAMg71PrEhMQC79y5cxEeHi6JFyUlJVHHSqydSB64d+8eHBwc0LJlSxlvmKZb1Lp1axw7dgwJCQkQBIFa4Ep3skfk2tIUfkWwii3qPiOiSmy/fv2oriE2NhaOjo5o0aIFAO190aFDB2k8muRzrVWrluxZpRW9AapZgsfKlVKr1cjJycGTJ0+oA5ykpCQ0b94cjx49AgBpPl0ETSeQh/pZ7969FSV1uhgyZAjatWsHKysrWFlZoUePHtQP3L/+9a9yycoLFy6sUMJc6ThKSSglyIv+MRUldyQ+NIC2Cq37u7Zq1UomS7xmzRqJW1cSrCRk0XT42LFjioxDgf+MpLRv3x729vYSh/Ls2bPo1q0b1bnWr1+PDRs2yKqe3t7exHxEXr6XrBYc77//PqytrVFcXIy1a9ciKyuLeGSJp/dbdnY2du3aVapiSWo+rNFokJ6eLvnFpaenU28mItdr3bp1ikxuAW3Bori4WAoKCgsLZfYsJGCVwwe0I8AsvF9eHGjdkUyav4mZmRmsra3RoEED6iKSiOLiYmzYsEFK7pSiQYMGWLVqlTTCzWJer1QFGWBXO9y6dSsiIyOlaYUtW7bg119/xbJly4ivgZV7DCgf/+Xho1eyGMXyrLMmA4Dy7mrJWK0kaOyo/vzzT1ls1rx5c2J+v8jvZO1E8gCNGGFFKCgogIGBgSKBq5KTF0uXLsWkSZOwaNEiqmtgFVvUfUbUajVmzZol+buSgofncIcOHRAREQFBEJCcnIydO3dKzzEpqkWCx4srFRUVBS8vL6jVakRGRiImJgY7duwgqiz5+PggKCioTBNC2gBDV/0M0FaTSDhOPE0WAW1HNCYmBtHR0fj3v/+NuLg4dO/eHbt27aI6T3n4888/y3xdrKDk5OQoGkcRwWoCystjhgSiiW9ZYCUh8zAd1h1R7dy5syS206lTJ+pR07y8PNln3rdvXyqV2by8PAQEBMj4c/Pnz6eqIPOw4Fi9ejViY2PRvHlzGBoaIjs7WxYQx8bGolOnTkTnKigokBHsaavhbdu2RUJCApYuXYrjx48Td0MBYNasWbC1tZW6PVFRUdSeVDwS1QEDBsDZ2RnTpk0DoE1QBw4cSHUOVgViHqIgPDjQoqCJWGgMDw8nNrgV17SKkjt9a6NarcaDBw+orrksbNmyBQcPHkSXLl0U87VYVZABdrXDs2fPIjQ0VEoOp02bhnHjxlEleLzUd5XwZXn46PFSbASA6OhodOvWTRKvyMrKwr1794iKpawJGs9Y7d1338WOHTukMebjx48T2RIApfmdSjuRPMDDI/fgwYPYunWrYoGrkkhKSqLWwADYxRZ5iI6JnyeLXoKbmxs2btyI1NRUTJw4EcOGDaP22VMJpHJBVRg//PADfvzxR0RGRkoLGaD9UMeOHUvcYbCzs0NgYCDmzJkjBe3W1tY4ffr0a7lu3rh+/ToArX/eH3/8IbWDQ0JC0Lp1a7i6ulKfMy0tDdHR0bh69Spu3bqFVq1aMZNhRYwbN65MXoQ+rgTpAzh27Fi9CZqDg0O5CVqnTp1Kjc+J0PWYuXz5MtH1VITyPgsaTJgwocwk/vDhw/jmm2+QmJhYaiSTZQFWismTJ8PZ2VkKQK9fv44tW7YQd/A8PDxQXFyMSZMmAfhP4YKGF6nRaHDkyBEpUOrbty/s7e0VB6FlgeRvKirSPX/+XHE1fMyYMYiIiMDo0aNx4sQJFBQUYNq0aVQKrQ8fPpRGqfv06YP27dsTH8sLhYWFCAoKkvw/hwwZgrlz5yqywlDa7fnoo4/KFAWh4fWFhYXhzJkzePDgAezs7CQONO1o3bVr16Qq/5AhQ4iDMNZ1T8TmzZuRm5sLW1tbWdeLpsMxefJkqvuwLIwfPx6bN28upYKshFeuFBMnTsTRo0elwLW4uBiTJ0/GsWPHKu0aAC0vvV27dpg8ebLEl42LiyPmy/IQLsvJyZF5/T58+JDa69fW1hahoaEyTridnR3RHjhv3jwEBQXJYj0Rlb2fpaSkYP369TJVaQ8PD+apo8oG6xQIAAwbNgyHDx9W/LvrcvA0Gg2Kiorg6ekp8eRJMW3aNAQFBcHPzw/Z2dlo2LAhfvnlF+Jn1cHBAYGBgVLx/MWLF1i0aJFeYR1d8LBJ4IFq0cEj5UoFBweX6Y+hi5J8NyXBxdWrV/H48WNMnToV6enpyMrKouIMnT59GoMGDaL2TBMDAH9/f9lmJNoT0MLGxga1a9fGkCFDMGHCBHh7eyuaiaYFjwoKwG4CyrNiWRkoz/Sch+kwazdUF56enhIHD9AG9jRiSKKdiYiePXtSy9IbGBjAwcGB2iaCBiS1Mx6KdOLnaGhoiBcvXsDU1BQZGRlU52jfvj3at28v2T3QIjY2Vupo6o5V0iSqhoaGcHJyYhrBZe328BAF4cWB7tOnj6IRS17mx6dOnQIAKeEWj6cJoK2srODv71+Kr0WTJALKVJABfmqHlpaWmD17trQ3RUREoFevXlICTtJt4WGTwMqX5SFcxsPrV/zdRYhjfSQQC8xKu/XleSKKoJmeMDc3r3DvIok5AXZ+JytYp0AAoHHjxkyJrW6Hu0aNGnj33XcV3aNliS3SFDD+/vtv2WSUmZmZ1IkjBQ+bBB6WVNUiwROhb8Tq0KFDFT5sRkZGSEtLkxaea9euwcTEhOoadu7ciaioKKSmpmLq1KkoLCyEh4cHsdIhwO6Z9vLlS+Tn50tCGKI9AS169+6NW7du4fr166hRowYMDQ3RrVs3RXwlJXj+/Dl8fHxkN7inpyexMMjblqCxoqK/S3FxMbWBti54jatqNBpkZGTg3LlzMhVNWo6SKBwD6N+wy8LGjRuxaNEi1KlTB9OmTcPvv/+OtWvXUnNvKwLJc8JDka5Vq1Z48eIFRo8eDXt7e5iYmFBtzix2DyLWrFmDZcuWwdfXF7t378ahQ4eox1LKU+ilEb5h9bzkIQoiCnvpJnU0Yl9A+eP2JGP2vNY9fQE0yQhyREQEAMh8K2mTRKUqyAA/tUOxUKHr63rv3j3cu3ePeJyOh00CK1+Wh3AZD69fIyMj3L59W+I23b59W9YlJkF8fDyaNGmCWrVq4dKlS7h//z7s7e310hbKErYSoZQfWh70xZwAH34nK548eYLt27fjxx9/hI2NDT788ENpVJ4UixcvhqenJwYPHqyIS9i0aVNkZGRIdJUePXqgfv36VNcAQFa8mj17Nl6+fEklVKjRaJCXlyet+bm5ueUWz8sDD5sEHpZU1SrB0wd9FXUXFxfMmTMHycnJcHR0REJCAr766iuq9zh58iSOHz8uzWQ3btxYUmkiBatnmmhPIAphnDlzhshYvCRE0Y9nz57h4sWLWLZsGbKzs3Hjxg3qc5UFfbLIn332GXr37i0RVo8fP47PPvsM+/fv5/L+VQk8RwPLglqtxosXL6DRaBS9F6+ugK7nTocOHaivA4CUyIgb4unTp6kTs+joaLi5ueHixYswNzfH1q1bMXfuXK4JHgl4KNJ9/vnnAIBPPvkE3bp1Q3Z2NhV3jcXuQURBQQH69u0LQRDQqFEjODs7w87Ojpg3BkAW4OXn5+PixYvU0tKA8m4PwEcUhFXsC4Dss8/Pz8epU6eoFW9fN9zd3fWO1LFyIgHlKsgAP7VDfYIeP/30EwYNGlThz/CwSWDly/IQLuPh9evq6opFixahXbt2EAQBjx8/prJlAYBly5YhODgYSUlJWL16Nfr3748VK1bo1UwgLYCQ+k5WBJIpDh78TlbwmAK5cOECLly4gISEBEV+fufOncOqVavQtWtXCIIADw8PeHt744MPPqC6DmdnZ6xbtw6GhoYYO3YsMjMzMW/ePGIvOxsbG3zyySfSdM+3335LPSHEwyaBhyXVf1WCp6+i3r17dxw8eBC3bt0CoK301KtXj+o9ateuXaobQdvxYvVMK2lPsGzZMkVy2Xfv3sXVq1cRHR2N33//HZ07d6aSm71x4wY6d+4MIyMjHDt2DDExMZgzZ460yepLnlNTU2XjWgsXLpTGht4WkI6D8CDg69tMLCws4OTkBBsbG1l3hWQB5tkNZfXcmTt3Ljp27CiNtLi4uOgNrsrDjRs3MHz4cJibm3PvTJNs7jzUJ3XvMbFzRzPGwWL3IEL8eVNTU8TGxsLc3ByZmZlU5yg5mjlv3rwyfdwqAku3B2ATBeEl9gWUFj0YMGDAax0nVgJS+v6jR49kUxi0PBSlKsi6YFE7JMHWrVv1rkE8bBJsbW3RuXNniW8/bdo0Kr6sUh89XfDw+rW0tMSpU6fw22+/AdB2a0gEw3QhqtNGRUXBwcEBc+bM4VqgmzVrFjMvnmRPqVevnqygV6tWLeq4kxWsUyAAcP78eURGRkqTY7TYunUrvvvuO4nOlJCQgAULFlAnePHx8TAxMcHZs2fRp08fuLu7Y9KkScQJ3rx589CoUSOpODV58mRquzQeNgk8LKn+qxI8EhQWFkojD7RtWUDblbp58yZUKhU0Gg0CAwOpBQtWrlyJ3bt3M3mmsdgTiPDx8YGVlRXmz58PS0tLaj7iunXrEBERgYcPH2Lfvn0YM2YMPD09iYm7LVq0wJMnTyQfqsTERLRq1YrqGt40KnMcRJ+Ur/heuuPCla3WBfDx3Bk8eDDTdTdo0ACrV6/GpUuXMHfuXBQVFRFzQESUxTnUfU3f+JdGo0FYWBix0mZ5EO8xXdSoUQPdu3eHt7c32rRpU+HxLHYPIqytrZGZmYm5c+fCwcEBGo0GS5Ysof5ddGFkZFSu0m55KKvb4+7uTnx8o0aNqG0/RKSkpODu3buSaq0IIyMjKgGgspCTk4O0tDSmc/AGSfAaFhaGzZs3S89qUFAQXFxciCriPHm/LGqHJKgo2RXFIwRBYLZJALTy6UqnH5T66OlCn9cvSTcT0BaD+vbtK627umNxJMjPz0daWhouXLggdbt4agZWlv4gD34nK1inQABt0YRFo6FWrVoyrYpWrVopShbFuP3GjRsYPHgw6tSpQ72fjRs3jkkLgsUmgaclVbVQ0SSFra1thRyhki3i+/fvU7eIU1NTsWLFCly/fh0qlQq9e/fG559/Ls3MVwXo+xx4QVQR3LNnD2rWrAlHR0eq9545cyZu3boleX/cunULPXv2lExBaaqO1QVXr15FYmKirPhAyiOpKhCrzyWhTyWQh1mviIyMDERERKBHjx7o0aOL4lS9AAAgAElEQVQHkpOTcf36dSrFrrJUMmnVUEXlSxYEBQWhVq1amDBhAgRBQGhoKDIzM9G8eXOEhobqHS8TBEGyezA2NkZmZib++usvdO7cWdH1FBYWIj8/n9q818/PT2Ywe/fuXZiamlKPbrFg27ZtKCwsZBIF0Sf2RQJdDp5Go0FycjI++eQTLFiwgOm8PEFyr48ZMwZ79uyRODCpqamYNWuWxM2rCLzUQIHXr3ZY0Wfx9OnTCo8lUWh1dXWFv78/EzezuLgYCxcu5KaCXR5o1INFv2AlkwtHjhyBv78/+vbti+3btyMpKQlubm5UaocVgYeyNUm84+joWO73VCoVlZKlUpQ1aUSTbAOAl5cXHj9+jA8++EDWDCCNT7Zv344aNWpI+1hISAiKioowe/ZsCIJAfD1Lly5Fbm4u/vjjD5w8eRIGBgawt7dHeHg40fHx8fHw8PBASkoKIiMjce/ePURGRmLx4sVEx7NCX0GSplj4X9XB06fyxKNF3LBhQ+zduxd5eXnQaDSK/C9etwAE6ShaQkIC3N3dFd/oRUVFuH37Ns6fPy8Ru2m6JKNHj5ZxFlgrj28amZmZMgKxmZkZ1fFubm64e/cuOnfurEhdShAEBAcH48mTJ3BxcUFycjKeP3/OLPJBi7/++qvUvUyy+PIw6xXxzjvvYMaMGQC0QgVpaWnEyd2TJ0+QkJCAnJwcqcoKaKWmaQVfWrZsieTkZDRr1ozqOF18//33CAkJkb6eNm0axo8fj5CQEOzbt0/v8QkJCWjTpk0psQIS8DQN1l0r1Wo1HBwcMHz4cKJjf/nlF1nVuyRIq+A8REEGDBjAXIjR5eCp1Wo0b968ynHwSGvDugIHNGIHvHi/gH61w9cJMYHLyMiAsbGxFPwWFBQQ8/OnT58OANQ+WLoQedglFSx5o7LUg+3t7WXrVNOmTYnWu8oEibKoUsN2nmCdAgG0hb0WLVogLi5O0TXs2LEDQOlC7ZdffkmV/Pv5+eHy5cvo2LEj6tati5SUFBlPVR+3cu3atViwYAE2b94MAHjvvffw2WefUSV4LIUY0gSORKG1WiV4+mSI9Y1CsbSIywtwRNAEOlVFAGLNmjVMN/rSpUvh5eUFKysrtG/fHvHx8dK4JQl42SVUBVy6dAmurq547733AGhlif39/dG/f3/ic/z66684efIkteKkCF9fX6Snp+PevXtwcXGBkZERNmzYQDUayQNKRShE36PGjRuXORpJAxblyFu3biEkJARpaWkyZSxjY2O4ublRXUdubi7GjBmDXr16ycZVabqReXl5UqIFaJMuUTGVpBCgVKwA4GcaXFxczDTWGRoail69epWpVEYzhsxDFIS1EFNcXIw9e/a89k4LK0gS1hYtWuCLL76QAvFjx47JuHAVgQfvl+eYZ0UgSWrmzZsn68YUFRVh/vz5RNLpokCD0uKYCAsLCyxatEgRD5sUlaUeXF6njtdEC8nYbXkgjTnF93nThVdnZ+dyp0BWr15NlISyjqHz4vnXrl1b1pQxNzeXder1cSuzs7MxaNAgbNmyBcB/uJ40qAyRLBKF1mqV4CmVIRar7sOGDcNXX30laxEPGzaM6BwVqcUpNd98nQIQJGC90UV/QhGtW7emGrdi7SBWJWzduhWHDh2SBAYeP34MV1dXqgRPn+qoPly7dg1hYWFS4ly/fn2ZqenrBi8Rik2bNpVaoMt6rSKwKEeK8/khISHUJqwlMWbMGGqFrpJYtmwZJkyYIAWB9+7dw9q1a5Gbm4sRI0boPZ5FrIDVk0qEWq3GTz/9pDjB8/HxAcBeDefRiWQtxFRWp0UfyhqFNjExQY8ePTB+/HiJz1YR1q5dCx8fH4wZMwYqlQr9+vWjkvlmBS97l7JsLnRfI1FpLSgokI2Z1a1bl3r9ZVVorSo8bB7qwbo81/z8fFy7dg0WFhbcEryKpgdEUbTg4GC8ePEC9vb2UqJGKxZTFQqvrFMgInhQSAoKCmSTXrSjovqgrxijVqtRWFgorX0pKSnUXebKEMkiKSpVqwRPqQxxSSEM3eq5SqUiMt4lDXBIvIN4CEBUBNJEgfVGT09Ph6+vL/766y8cOnQIsbGx+PXXX4lvdNYOYlVCUVGRTD2ubdu21CI+rVq1wowZMxTPuNeqVUsWsNH4J/EAqwgFz9FIHsqRtra2OHbsGFPllUeX+qOPPkLv3r2l8V8LCwuJ8zt//ny9IyksYgU8TYOHDBmCPXv2wNbWVtbNJDkHrwkK3UJdQUEB0tLS0KRJE6oElrUQA1ROp0UfGjZsiLt378rsSExMTHDmzBnExsZi5cqVes/RoEEDSSn2TYDXmKe+xIr076L7LNJ42PEqjlXGOGBlqQeX3DOeP39OVTzYt28fJkyYABMTE7i6uiImJgYrV66U+LOLFi0q91hx7DYqKkqWGK1atQp2dnZUhao3XXgF2KdAAK2adVxcHDp16qRocuHs2bPw9fVFSkqK4nuCBPqKZlOmTIGTkxMyMzOxfft2hIWFEdvslIfXIZJFUvyrVgmeUhniyvRFIfEO2rx5MyIiIjBu3DiYmppKBHtSiJWkhIQEuLq6lgo8Sb39WG/0lStXYtCgQTh8+DAAoE2bNnB1dSVO8Hi0yqsK3nnnHVnHJzQ0lPpeKigoYJpx79ChAyIiIiAIApKTk7Fz506J11YZEDu6SkUoeI5G8lCO3LhxI3PllYdgDKANpMUR1pLQN5Iyffp0jBgxAn379kW3bt2QlJQEExMTovflqRIrdvf9/f2pN3heExQlE7mrV6/ip59+IjpWBGshBqganZbY2Fh8/fXX0u9gb2+PGTNm4MCBA8Sy4Tt37sSkSZMkvnFmZiaOHz+O2bNnv7br1gXr2BdP6wtHR0c4ODhISWF4eDixTyQvhVZWjioJSGIEnrY7Iho1aoSEhATinw8JCcEnn3yCn3/+GRkZGdiwYQN8fHyo9qacnBxZXJiRkUHte/ymC68A+xQIoO2onjp1SlFyB2jX/e3bt6Nr166v3Re4Itja2qJZs2a4cOEC8vLy4OfnJ/nZkaI8kazKRrVI8HjLEJcHHr4oJNWtd955BxMmTMCTJ08AAM2aNaMSYdBt+bu6uipu+bPe6CkpKXBwcMCRI0cAaM00aR5cHq3yqoJ169bBxcUFq1evhkqlwnvvvSdJE5OCdcbdzc0NGzduRGpqKiZOnIhhw4YxkfaV4vfff0fXrl2pgz6eo5GrV6+WlCMNDQ2RnZ0tjfmRgkflVVcwJj8/H99//z21T5g+6FtzSooVNGnShHgsh2egxnIuHty5stC3b19s2rSJ6hjWQgxQNYQX0tLSZAW1GjVqIDMzEzVr1iS2zDl16pQsialfvz5OnjxZaQkeK3haX4i2R2KS5e3trVc5WARrcUyEbmGsoKAA9+/fR+fOnakSvD/++ANfffUVkpKSZFMoYnxRWUUI3YRbEATExMRQFU3FROTatWsYPXo0evbsSW2NMH369FLG8/PmzaM6x5suvALsUyCAlm+bl5dHrZ4somHDhoq9cWlA8jfu3bs3evfujYKCAiofVRGVIZL1XzOiycMkmgQ8HCVI2qpRUVHw8vKCWq1GZGQkYmJisGPHDiLRA4Bvy5/lRi/piZKVlUX1Gb6OVvmbQosWLXD06FHk5uYCgCJ11by8PAQFBSEpKQmbN2/G48ePER8fT6zyamxsTJ3EvA6wBn3jx49HdnY24uPjZff1P//5T+JrUKlUePHiBX755RdMnToVGo2GetafR+W15Ijm+PHjiQ1ZSaFvzSl5XyUkJFDdVyIyMjJkKrH169enOn79+vWl/IPKek0f4uLiJCsOKysrKv6c7qinRqNBTEyMNM5LCtZCDKCV/9ft3pX32uvE+++/LxP3OnHiBHr37o3c3FziBK+s9Z4n3eB1g1diJaJPnz5o37499fSGqBJbXFxcZheONKkqWTh49OgR9uzZQ3Utn376KUaMGIHx48cr7tbExsZKRTbd54um46+bcKvVarRt25bK87J27drYuXMnTp06hUOHDkEQBOqu7Mcff4xevXrhxo0b0tcdO3akOodu4XXSpEkYOnToGym8skyBANqkxtHREb169ZKtD5999hnR+zs6OmLbtm0YPny4YosaEuhTZnZ2dsa6detgaGiIsWPHIjMzE/PmzaPal3ULN+np6UhKSqJK8EgsTUgUWqtFgifOQ+/atQtz5syRfa+s15SisgjvX3zxBYKDg6Xr7tatGxITE4mP59XyZ73Rhw8fDi8vL+Tm5iIkJASHDx+GnZ0d8fvzaJVXJVy6dAnR0dEAtKRbGoEVQMtJbNiwodTpaNy4MZYvX04ciBcVFeHIkSMyL6hJkyYxmZMqAWvQd/r0afj5+SErKwuNGjVCYmIiOnXqRNVd37lzJ6KiopCamoqpU6eiqKgIHh4eVAH066i8qlQqpKSkMJ2DFqz3FfAfD9EuXboA0KrE0nqI3rx5s9RrYuBEikOHDiEwMFCqqO/cuRPz58/HlClTiI7XLTzUqFEDLVu2JNpIAX5WDQDw6tUr2dfFxcWKKsks8PLywnfffYfvv/8egHbNmjx5MgwNDYmUHwHtuOq+ffswY8YMCIKA/fv3o0WLFq/zsl8LevXqhW3btikurgHA7du3sWzZMmg0GkRFRSEmJgZHjx6VLIQqAi+V2JJo164d7t27R3WMRqPB/PnzFb2fiDVr1mDZsmXw9fXF7t27cejQIeqiJ2shxdfXF4cPH4aLiwsaNmyIxMRERRoO7dq1kxJdXRV2UlSVwmtFICnM+/j4wNzcHCYmJooS/5SUFOzfvx9hYWHSpJYSgUIWbiWg9cEzMTHB2bNn0adPH7i7u2PSpElUCR6LSjfwH6EtjUZT7tQaiUJrtUjwRJw+fbpUMlfWa28SSryDABBXTAF+gSfrjT5nzhxEREQgKysLUVFRcHR0pLZ6EDuIbzt2796NsLAwSbBg48aNsLW1pVo0Hjx4IHm8ANouIE3yvm7dOjx9+lTiz4SHhyM2NrZSVe0A9qAvMDAQISEhmDVrFsLCwnDlyhUpCCXFyZMncfz4cUkJsHHjxtTcCR4jr7ocPEEQ8ODBA/Tr14/qHPqgb81hva8ANg/RM2fO4MyZM3j69CmWLl0qvZ6Tk0NsUyPi4MGDCAsLk8aLMjIy4ODgQJTgaTQaBAQEEG2cZYFHEL57927s3r0bOTk5Mun+V69eKQo+WWBoaAhHR8cKjZj1wdPTE66urtiyZQtUKhUsLS3h7+/P8SorBzyKIL6+vti1axdcXFwAaAu3pNxhXiqxusUHsUNNW+Dr0aMHkVhcRSgoKEDfvn0hCAIaNWoEZ2dn2NnZEXMSAe36EBAQgJ9//hmAtmC5cOFC4hHB1q1by6YDWrRoQT1eGRMTgyVLlkiUoKKiImzfvl0qdFWE8gpBIipb2bQikDQ3nj17JvMPpcXXX3+Nc+fOMY8ysnIrxbHjGzduYPDgwahTpw41NYhFpVuEhYUFnJycmIS2qkWCd+XKFVy+fBnPnz+X8SVycnK4jFWK4HEuEqK9kZER0tLSpIfq2rVrxKIHQNktf1oRCoDPja5EBr484QkRtAIUVQHh4eH47rvvpM1HJNzTJHglk/z8/Hyqe/L69es4ffq09DccOXKklHBWJsoK+mh4TjVq1ECDBg2krl///v2p+Yy1a9cuJdhD26HnUXnV5eCp1WrMmjULFhYWTOcsCX0jKaz3FcDmIdq6dWsMGTIEMTExUucN0H6+tP5kRkZGUnIHaPnMpJ0BAwMDuLq64sSJE1TvKYI0CP/pp58waNCgMr9nb2+PESNGwNvbG15eXtLrxsbG1PLrrEhPT8fXX39dimtFs/6am5vj4MGDkiKfrjoqUPFnUZXAowhSWFhYatyMVDSMVzKgW3yoUaMGWrRoQb2f3rlzByEhIWjdurVslI6G4y92eExNTREbGwtzc3NkZmZSXYeHhweMjY0lNdeQkBB4eHjoNbTnGV+sX78eGzZskNapq1evwtvbG999953eY8sqBIl4E9YVrOjYsSOeP3+uOEFr0qQJF54aK7eybdu2mD17Nv744w8sX7681DQFCXiodPMQ2qoWCZ6hoSGMjIygUqlkG0ijRo2oKkL6oC9QArSdmUWLFqFOnTqYNm0afv/9d6xdu1bqXJF4B7m4uGDOnDlITk6Go6MjEhISiJUvi4uLsXfvXi4tf9YbXWmAoBv0VifoVhaVEJF79+6NwMBAFBQU4Nq1a9i3b1+5M/NlwczMDAUFBVLgXVRUxKwKqwT6gj59EKulLVu2xNdff42mTZtK5yJF48aNcfPmTahUKmg0GgQGBqJ9+/ZU52AZeZ06dSq++eYbPHr0CK6urlTvWxKsIyms9xVQvofoq1evIAhChfzGTp06oVOnThg6dKgkvKMU/fv3h6enp2QAGxoaioEDB0rcOn18jpYtWyI5OZlK1IoWW7duLTepMTExgYmJiYx7kZ6ejvj4ePTo0eO1XVNZWLx4Mdq2bYu+ffsq5lqJKO8Zr+izqErgUQSpWbMmcnNzpeTi0aNHsgSpIojJQEFBAWJiYtChQwcAWr5p9+7d9QZ9e/fuxcyZM7F06VLmiRgPDw+m4wHA2toamZmZmDt3LhwcHKDRaKg9MB8+fCjrGPXs2RMjR47UexzP+CIvL09WhOrbty/xSHdVEFIiBcm9np2djdGjR8PS0lJ2X5MmzN27d5f4nbrH0ya6rNxKsZDTsWNH1K1bFykpKVi+fLn0fRLBGR4q3TzuD5XAs8X1hhEXFyctfEqQn5+PiIiIUgkJKUkU0HasIiIicPHiRYSHh8PNzQ1z585FeHg41bVkZ2fj1q1bALRS5PXq1SM+dsKECVxMMl+9eiXd6M2bN0dKSgoePHhAvCFPmTIFbdu2hYWFhSxA4OH99bZBJH+LCX5wcDAEQaDiERQWFmL37t2IjIyEIAgYOnQo5s6dSzxis2rVKty5cwfW1tYAtL4z3bp1k0jhvAxi9UG08VDqH3f16lV07doV6enpWLNmDbKzs7F8+XKq0cbU1FSsWLEC169fh0qlQu/eveHv70/kiSXCy8ur1MhrkyZNiEZeR44cicOHD2PGjBllGjHTCL6MHj0aJ06cwM8//4xdu3Zh0aJF8PHxkfkzVQTW+wqomA9AanWgrzhGgooSUxI+xyeffILbt2+jV69esqSE59SAra2tXmNtXQ7HqFGjqDkcPGBjY4OTJ0++1vcg+SyqAjZt2oR69eohIiICq1evxr59+9CxY0cq0a+oqChJfXLgwIG4dOkS/P39qdatTz/9FNOnT5e6/Hfu3MGBAwckr9jyMG7cOISGhkr/5QGlBbqSKCwsRH5+PnXRc/r06di6dasUbGdmZsLZ2Rn79+9nuh4aTJ48Gc7OzujTpw8A7ZTMli1biDp4Ilj3w8rAjh079BYKy7uvSOO9skbBVSoVDh48SHS8iPj4eBw+fBj//Oc/8eGHHyIxMRFnzpyhHr8tDyTPkCAIkkq3sbExMjIy8OzZM3Tu3BkAmR82AHYxueqU4AHA5cuXcf/+fdkHQmJUDmjlYAsLC9G9e3dZQkJ6PPCfBM/f3x9dunSBtbU19SYWFxeHZs2aSQvn33//jadPnxJ3GL788kvUqVNHkWGwLsozMSY9D2uAkJCQAHd3d6SkpCAyMhL37t1DZGTkW2l0/vfffyMgIEASWenXrx8WLlzIvDnSQJ/CGA/1PxJs2LBBsvE4e/YsMjMzMWfOHOKixOPHj0tZCZT1Ggny8vKg0WgUqZqOGDFCNvJaVFSEUaNGEfEBt27div3796OgoEBK7pSau4rry7///W+0bNkStra2XAO5ygKv4hgLWIMUEpD8bcS/aXh4OB48eCBxOJSOjyqBs7Mz3NzcYG5u/tre4225T8sqgsybN4+6s5mUlIRLly5BEAQMGDAALVu2pDpeLOboe60kJk+eDDMzM9y6davMsWeaAkZSUhKWL1+O+/fvQ6VSoXPnzvD395dMsvUd27x5c5larS5IFBPFcf4///wTv/zyi9SRu3jxInr37i355upDRkYGvL29JRstsftPM9Vy584dLF26VMbB++KLLyQ/ORKw7oc8oG8K5H/4D3gUpUjWPR5ictViRFPE559/jpiYGDx69AjDhg3Djz/+SMXhePLkCRNJFNBKza5evRqXLl3C3LlzUVRURC0L7ebmJnnHAdpZ+RUrVhBX5FkMg3Wha2KsO7NOep727dsjJSVFcYCwZs0aLFiwQKpOvvfee/jss8/eygSvbt26ErmeFvr4aaQd5spK4PSB1cbDxcWl1CJX1msVISwsDP/6178kXtOLFy/w008/UfFFWUZenZ2d4ezsjI8//ljm56QErCMpPj4+cHJykvkSBgQEUNsTsNokiLhx4waGDx8Oc3NzRcrFLDYJjRs3LrVn8PJRpQEPDgcrsrKyMGbMGMUjV9UJt2/fxoIFC7BgwQLptbCwMGLDd+A/it66gj+0Kt916tRBeHi41NWOiIggKrgGBgYiOjoaDx48kPFclcDLywuTJk2SFLFDQkLg5eVF5J3p4+ODoKCgMqkzpIqJYlG0Xbt2smd70qRJpL8CAK0Xart27eDm5gZBEHD06FF4eXlJ8RMJunfvjnPnziE+Ph6Alk9MyqsUwdPWSil4mL7zSJhZlMYrS7uBh5o+SV+Nh5hctUrwoqKiEBoaivHjx2PdunVYtGiRRMAlQfPmzZGTk6PYqBEANm/ejIiICIwbNw6mpqaKHOyLi4tli0TNmjWpkkRe5sO658nPz8eJEyeIiNDig5aTk8MUIGRnZ2PQoEFSRc7AwIB68awqYAmixQ0tMTFRCn4B4IcffiBq11+9elVvoYPkZ3hBqY1HRkYGMjIykJ+fj8ePH0uLZHZ2NjUHb+/evbLgzMzMDHv37qVK8Nq3bw97e/tSI69iwkYy8qovuVu4cCECAgIq/BlWue+bN2/KuG/169entifgYZPAozjGapOwadOmUoWCsl5jAcnmzoPDwQobGxvY2Ni81vd4WwaI1q1bh23btqFNmzYAtMqv+/fvp0rweKh8+/r6wtXVFStXroRKpUKHDh3g5+en9zgzMzNYW1ujQYMG0jhhWQgODpb4q+UhIyND9jN2dnbEY3QitzQyMpLo58sC6URVQEAAFi5cWO73ExMTsX37dunrJUuWUKt8A9rGgLhein58NOBla8UCHqbvrAkzq9L426TdQJIk8hCTq1YJXs2aNVGjRg2oVCoUFhbC3Nwcz54903uc2CExMTGBnZ0dBg4cqMioEdCarusu2M2aNaPuCtaoUUMaZQC0CxFN9ZZ1tLIs1KpVCxMmTICdnZ3eDUn3QWMJENRqNQoLC6WHISUlpdKDHF5gCaLFDW3atGkICQmROiMLFiyQycqXh40bN5bJ89KFn59fpXFhlNp4nDhxAgcOHMDz589l96CJiQmxSXpFoE0mioqK0LlzZyQkJADQ8tAKCwtlBrys+PPPP/X+jCj3nZGRAYBe7rus31uXg0wCFpsEETyKY0ptEp48eYKEhATk5OTIFAuzs7PLXU+VgoS3JZpAN2/eHIaGhsjOzq50ryyeY6nlCRPQcNjeJPz9/bFs2TLs2bMHMTEx2LFjBzHXi6fKd9u2bRESEiJZutAWoytK7gBtgURfgmdgYIA//vhDSnbj4+OJ4xN9zxJLjFIS58+frzDB02g0SE9Pl9aK9PR06uQqLCwMmzdvloRAgoKC4OLiQlUofB1+qrTgYfrOmjCzKo1XlrZDZRWleIjJVasEz8jICHl5ebC0tISbmxsaNmxIJNUtdkhat26tyKhSFzyqdE5OTnBwcJAWjaioKKrNnXW0UoTuYix65mRnZ+s9jteDNmXKFDg5OSEzMxPbt29HWFjYWxMQlASPIDotLU029la/fn2kpaXpPe7BgwewtLQsc2ES7xMacRFWlGXjQSIeMX36dEyfPh2BgYHMRrsNGzbEuXPn8OGHHwIAvv/+e5m8PgkqY+SVpNLHYqAMaP24fHx8MGfOHAiCgN27d6Nbt25U18likyDinXfewYwZM6SvmzVrRq1mqdQm4datWwgJCUFaWppMvtzY2JjYYoZ0RIhEFU6lUqFVq1Z49uyZVKSk8UJlwYEDBzB9+vRyR8NpCp767s23RQq+Y8eOcHd3x8yZM6HRaLB3717iNZO3yndiYiISExNlewqvz5EkeBVHy9977z0A2kkfUpsb3dikJJTQSCqCvt9l1qxZsLW1lbr9UVFRMrVEEuzduxchISGSb3FqaipmzZpFleAp3Q95gofpO4+EmVVpHOAzKloRSNT09YHkOVu6dClycnLg4uIiicmtXr2a6n2qlchKWloa6tWrh+LiYuzbtw/Z2dlwdHREkyZNiI5nEW8Qq3QRERGyqkVOTg7u3LlD3R1JSEjAlStXAEARGVuE7mglreF7p06dpMVYrVajZcuWWLFiBfFmsnjxYnh7e8vGEtesWUM1C33z5k1cuHBBIra/rabnHh4eqFu3riyIzs3NpUoSlixZAhMTE6nCGhISgpcvX+r1/aluiI+PR5MmTVCrVi1cunQJ9+/fh729PZVP2OPHj7Fw4UJpA1Kr1QgICJCq0hWhMkdeScjYkydPho+PD1xcXKR1ZtSoUTh16hTRe+Tk5GD9+vW4ePEiVCoVhgwZAnd3dyrvze3bt6NGjRoym4SioiLMnj1br02CiFu3bsHf3x9JSUkoLi6WClQ0HLjNmzfLRshCQ0NRv359KVjRx8cLCQnB+PHjid9PF/r+TjSFr0OHDuHzzz+HmZmZlDSScpRY8d1332Hy5MnljlbRiI6x3ptvGiUTl8uXL6NVq1ZS4YEm2dWn8q1vpBDQ3t/Hjh1D27ZtpWkWJUqD5YFU9CY9PR137twBoDVkfhN2O/pA8rvo8nX79OlDbZUjCkPpe60ilEULYqUKvQmI3cySCTb18HYAACAASURBVDNpF4+H0jigjTvbtWuHyZMnS6OicXFxekdFeWkdkODYsWNElmmsqFYJnojc3FwAoFbGK2tBIF3wrl+/juvXr0ubowhjY2N88MEHVJXojIwMGBsbSxXbgoIC5OTkMC2idnZ2OH78uOLjlaAstSEa1TRdMnlFr70N4BFE5+TkYMeOHZLvWp8+fbBo0aK3ZiPgZdY7duxYBAcH49mzZ5g+fTr69++P1NRUBAYGUl1PcXGxjBxPOmY0duxYvSOvDg4OXEZeSZ4X8dnWfd4qW36eh03CyJEjsXDhQvTo0UM2it20aVPi62C1Sbhx4wY6d+4MIyMjHDt2DDExMZgzZw6RQiBPDBs2DAcPHqT63Xnj1atX1F3YkqgK9yYL9AWFNMmuPpA868OHD0doaOhrW/MrU9WUlyhTeSD5XYqKimR7AI01DKD9+3fo0AH29vYAtIH7/fv3sWPHDqbrrKy/A29hkocPH8riE5qEmZfS+NixY0spL5f1WkmIz3p5WgckXFcRPCx/0tPT4evri7/++guHDh1CbGwsfv31Vzg4OBCfo1qNaD5+/BifffYZ4uLiZARkfR04HuIN77//Pnr16gUzMzNMnTqV6feYN2+erCJXVFSE+fPn4+jRo0THKx2tLAuPHj2SGTnTEIiLi4tRXFwsBc6FhYWSOhwJ9u/fX+qBKOu1twHGxsZMI33FxcXYuHFjpfNweEJ39K0kVCoVcYIniu1ERUXBwcEBc+bMob4noqOj0a1bN6mjk5WVhXv37hF13Spz5LVx48Z6f4bFQBnQCpFMmjRJ1mk/fvw4Fa+Rh7BT7dq1qceCSoJFvAHQimlERETg4cOH2LdvH8aMGQNPT0+qDklRURGOHz9eyq6H5vlv2LDhG03uAGDIkCEYNmwYxo8fr5gTxHpvvmk4OTmhuLgYwcHBUhD/ukBSa2/YsOFrLehVdA3Tp0/HgQMHYGVlJUsKlHTaeYgy6YO+zzMmJgZLliyRWRxs375duiYSrF27Fj4+PhgzZgxUKhX69etH5IMKaNeJwsJCaDQavHr1ShZ38ub9lgeewiQZGRlo2bKllNQVFBQQmYKLYFEa14XSUVFWrQNdREdHw83NDRcvXoS5uTm2bt2KuXPnUsUpK1euxKBBg3D48GEAQJs2beDq6vrfm+C5u7vD0dFRJiHs7u6uNzHiJd6gVqsREhLCnOAVFBTIRprq1q1LJZurO+cujlbSSp4D7ATiAQMGwNnZGdOmTQOgFUAYOHCg3uNiYmJw584dZGZmylQGc3JyqIm/bxq8xvnUajUePHjA89IqHV9//TWX8+Tn5yMtLQ0XLlzAsmXLANATn0sqIxobGxOrJfJSqQX+Y3KbkJAAV1fXUia3X331ld5zzJ8/H7NmzcLz58/h5uYmGSiT4tSpUzIuUP369XHy5EkuwjU0GDRoEKKiorjwidLT02VrJumYvijS9dNPP8HBwQGOjo44e/Ys1Xt7eXmhuLgY165dg4ODA06ePEk9Wt6vXz9s2rQJo0aNkiVENJYPrDh79ixOnjyJ9evXIzc3F+PGjYOtrS1R0UEE671ZFaBWq3HkyJHXnuCR8G179OiBTz/9FCNGjJDdF7w4eBs3biz3e+LfjcckEIsoE6lQy969eyv8ufXr12PDhg3S3nv16lV4e3sTmZTv3bsXM2fOREJCArZu3ar358tCYGAgvvzyS6hUKvTo0UN63djYmFpcSil4CpOwNiZ42fWwciuVah2UBRbLn5SUFDg4OEiWaTVr1qQWGaxWCd7ff/8tky0eO3ZshV0DETzFG/r06YOzZ89ixIgRTOfRrXzQklV5BaCsBOJPP/0UQUFB0qYxZMgQIlJ5SkoK7t69i7y8PJkioZGRUZXxciMFTwVLKysrrFu3rpSBfWUGfTwgJjVPnjyBi4tLqaRGH6ZPn44RI0agb9++6NatG5KSkqhGXcVr0F1wDQwMqFU0ecDX11cyuXV1dYWRkRE2bNhAZXI7ePBgtGnTRjJQXrBgARVnt6x7k/aziI2NlZQfdbv0NKIJR44cQVBQEIyMjKSqOm1n4OrVq3Bzc0N6ejoMDAxQWFgIMzMz4nMUFRXh9u3bOH/+vCQEQvtZxMTE4MSJExg9ejTmzZuHKVOm6OVWlYS4Hugml5XFwRMhTqNMnToVcXFx2LdvH4YNG4Z79+4Rn4P13qwq4LWvsyImJgaAvFhGM/2gj+da0ah1o0aNANCNTJcHFlEmsYBdHsQ1R1/nKC8vT1ZY7du3b4UJri5OnDiBmTNnwsfHR/EopZOTE5ycnLBu3Tp4eXmV+3M0XTCl4CFMwtqY4GHXA2hHwDt37ixxK6dNm0Y1KtquXTt4enrKtA5oYywelj8lx4WzsrKoC9nVKsHr0qULbt68KVVLf/nlF3Tt2lXvcWJFaPr06WVWh2ike0NDQ7Fv3z7Url0bderUURSkiPKwYicyPDycSm1r6dKlpWany3qNBGJyV/L/SZCYmCgtYiJIRGs++OADfPDBB7h8+TKV0WZVBM9xPlGY4OLFi7JzVGbQxwO6SY2Liwt1UmNvby+rpjdp0oTIZFcXRkZGuH37NiwsLABo1f5oZ/15gJfJbfPmzYm93kqiVatW2LdvH2bMmAFBELB//360aNGC6hxr1qzBsmXL4Ovri927d+PQoUPUHGgenQF/f3/s378fzs7OCA0NRXBwMJKTk4mPX7p0Kby8vGBlZYX27dsjPj6eOiEROytqtRp5eXkwMTFBeno61TlYR015QVS/DA0NxY0bNxRV/FnuzaoCHvu6PpAEb6xTEJ6enmXyXGnAQwxp2LBh+Oqrr2SiTMOGDZNGFSuKucQCdkBAAGrWrAl7e3sIgoBjx45RTfjUqVMH165dk6wjrl+/Thzr1apVC/Pnz8fTp0/LHN+jibUqSu4AbUfqdfPxeJi+A2yNCR5K4yLatGkjFQFolfE3bNiAHTt2SAW+Pn36UKua8rD8GT58OLy8vJCbm4uQkBAcPnwYdnZ2VOeoFgmenZ2d5H03depUaUNOTExEx44d9R6vWxEqucjSSvfyCFImTJiA5s2bS6IU3t7eeP/994mPT0xMLPXaH3/8QX0dLVq0wBdffCEjENOIDbi4uJRamMp6rSTEkcWKkrvKNOZmAc9xvqoS9LFCaVJT3t9crVZLPE/S+8LV1RWLFi2SKnOPHj2i3sx4gMXkVlz3ygNpwuzp6QlXV1ds2bIFKpUKlpaWxLLnIgoKCtC3b18IgoBGjRrB2dkZdnZ2VIWppk2bMoseiMcVFRVBpVJh4sSJGD9+PLG9ilhc0j0X7X1hamqKly9fYuDAgZgzZw7q168Pc3NzqnMAbPxnHvD19cXp06fRvn172NraYtOmTdSiKzdv3sSWLVskWf/XkRhVBnjs6zk5Oahbty4MDAwQFxeHhw8fYvjw4ZKYmr6RQhGXLl2ShCgGDBiA/v37E18DD54rjyRRFCEpmQiJI4skMdf58+dlscSsWbMwfvx44iksDw8PLF26VPr8CwsLiROzwMBAREdH48GDB9Io4OtCZegg8jB9Z21M8LDrAdi5lcbGxsw2FTwsf+bMmYOIiAhkZWUhKipKRj8jRbVI8Fj/GDyDcF5BSp8+ffSakpbE0aNHceTIESQkJMjMSrOzsxX5++kSiAFt256EQMwqWlPVjLmrGpTyi6oKlCY1PO8LS0tLnDp1Cr/99hsALbeFxmaBF1hMbnl5JZmbm+PgwYPSs6mkkykm2KampoiNjYW5uTkyMzOpzsFD9EBca83NzREZGYmmTZvi5cuXxMfn5+cjIiICSUlJsuoxjUT2zp07oVar4ezsjBMnTiA7O1tGHSABDwNlVpiZmeHo0aP4xz/+ofgcnp6eWLZsGbp27ao4GagK4DGWOG3aNHzzzTfIzc3FrFmz0KFDB1y6dEkaCyQZh9u9ezfCwsIwatQoANo10dbWltgMmgfPlUeSyCPmevXqFZ48eSIr6NOIk3Tv3h3nzp2TxWqGhoZEx5qZmcHa2hoNGjSgjtNoQcvdUgIeHnasjQkPDw+sX78etra2ktK4h4cH1TUAbNxKgM8e8Ndff8Hf3x+xsbGyWI1m2urVq1cYM2YM05pfLRI80pto4cKFCAgIeK3XwiNIyc7Oxq5du0qpsOlTcuvfvz9atmwJb29v2c1obGxM1MksiQYNGigiELOK1lQ1Y+6qAlZ+UVWB0qSG931hamr6xo2WWUxuS657LAladnY24uPjZevNP//5T+Ljra2tkZmZiblz58LBwQEajQZLliyhugbWjRnQBtEvX77E0qVLsXz5cmRnZ1MFCUuXLkVhYSG6d++uyFi8uLgYCxcuRFBQEAwMDBQr/vIwUGbFggULmM9Rr149jBw5ksPVvFnwCNgEQUDdunVx6tQpTJo0CYsXL6ZOlMLDw/Hdd99JSppi14Q0wePBc+UlhsRqk+Ds7IxJkyaha9euEAQB9+/fl8bqSCDSVnS9CUmpLOKkSEXJ3dsyZQTwMX0HKm5M6Iu/WZXGRbBwKwH2PQDQJqvW1ta4f/8+Pv/8c3z77bfUtIchQ4agXbt2sLKygpWVFXr06EHdLKoWCR4p/vzzzwq/z0MogEeQ4uHhgbZt2yIhIQFLly7F8ePHiRLEpk2bomnTpjh58iTxe+nD1atXkZiYKKtkfPzxxxUewypaw7OjWp3Ayi+qKigrqXFzc9N7HM/7gsezzgPGxsbM1hdJSUlYvnw57t+/D5VKhc6dO8Pf3594nPr06dPw8/NDVlYWGjVqhMTERHTq1ImK9yHyCwYNGoTr168jPz9fJuf+008/YdCgQRWeg3VjBgAbGxsA2ur8+fPnS30/ODhYNt1QEk+ePMGZM2eo3lMXarUaL168gEajYe5YsfCfWcBTDt/GxgbffvstRo4cKVN9pOG1VwXwCNjy8/NRUFCAK1euSErbSu4R3eeK1jKBZdRUvB8EQWBOEnnYJHz44Yfo2bOnZLjeo0cPKlEQFipLZU4ZVcaIJqswCQnKi795KY2LYOFWAux7AKBVAJ04cSIOHjwIS0tLWFhYwN7enso388qVK4iJiUF0dDT+/e9/Iy4uDt27d8euXbuIz/FfleDpa3XzEArgEaQ8efIE27dvx48//ggbGxt8+OGHktVARfD394erq2u55pW0Iitubm64e/cuOnfuTGwCrQsxuXvbRwqrElj4RVUFPJIaVvB41nmAhwedl5cXJk2aJBGwQ0JC4OXlRSw8ExgYiJCQEMyaNQthYWG4cuUKvv/+e/pf5v9haGhYatRp69atehM81o2ZBIcOHaowwWvevDlycnKYvMYsLCzg5OQEGxsb2T1F0/Fg5T+zgKccfoMGDbBq1SpptF9MBiq7kMIKHgGbtbW1NGXTs2dPpKamUnsCdu3aFe7u7pg4cSIAbcGCREhORNOmTZGTk4MnT55QTRUBfO4HESw2Cbp49913MWDAAEmgIy8vT++awYPKUplTRqLh9usGizAJCcqLv3knyyzcSoDPHiDuf3Xr1sWff/6Jd999FxkZGVTnUKvVEnevWbNmeP78+X+3TQIreAgF8AhSxBvT0NAQL168gKmpKdHNIY658TKv/PXXX3Hy5EniufSS+Pnnn7FixYq3fqSwqoCVX/SmwbtSxwIezzoP8PCgy8jIkAUqdnZ2VMbcNWrUQIMGDaQgqX///vj888+JjycBSRW6rI35iy++qNTrMDExgZ2dHQYOHCgbz6HhX4jJy7fffiu9RiNlD7AZKLOCpxz+li1bcPDgQXTp0uWt5uDxCNicnJzg6OgIExMTGBgYoG7dujJhCxKsWrUKAQEBUoGsX79+VBYcUVFR8PLyglqtRmRkJGJiYrBjxw4EBgbqPbas+yE9PR1JSUkyHzcSsNgkiDh37hx8fHyQmpoKgLx4wIPKwmOaRJ+QlXhtixYtYn4vfeBBLVIK3skyC7cS4LMH9O7dGy9evICDgwPGjx+PmjVr4qOPPiI+HtBOP9SuXRtDhgzBhAkT4O3t/b8RTRbwEArQDVLEB4U2SGnVqhVevHiB0aNHw97eHiYmJkQP2tChQwHwM6+kMbQtC5s2baoWI4VVBWXxi9zd3d/0ZRGjKonn8HjWeYCHB52BgQH++OMPtGnTBgAQHx9P1XEX16qWLVvi66+/RtOmTYnEkGhAIhTAujHzuI7WrVszV69ZpewB5fxnHuClzgpok0UlSnhVDTwCNj8/Pxm/tlatWli+fDlRciWibt26cHFxoXpfXXzxxRcIDg6WuPHdunUrc1SxIkyZMgVBQUEQBAG2traoV68eBg0aRCX6xGKTIMLf3x/btm2jVvMkpbK8bs0GkSudmJgoGWIDwA8//EDFf+YBHtQipeBNyWHhVgJ89gDxWbC1tcX777+PnJwc2fWQoHfv3rh16xauX7+OGjVqwNDQEN26daMS3fmvSvD0JSw8hAJ4BCli9fyTTz5Bt27dkJ2djYEDB0rf12d8mZ6ejq+//rqUChDpDX7o0CEA2kRzxowZ+OCDD2SVDH0cPF1Uh5HCqgJ9/KKqjqoknsPjWecBHh50zs7O+Pjjj/Hee+9BEAQ8ePCAyuZg6dKlyMnJgYuLC9asWYPs7GysXr2a9ldhRnR0NLp16yZthFlZWbh582alChXQjNyVB0EQEBwcjCdPnsDFxQXJycl4/vw5evbsSXwOHqO7SsFLnRXQ8rb8/f1hbW0tG0ekNQ5+0+ARsD179gyHDh3Cxx9/DI1Gg+XLl1MHkj4+PnBycpLdFwEBAfD09CQ+R0k+J62QxN9//w0TExOEh4dj9OjRcHFxwdixY6nuGx42CaamplTPFC30aTawQlxrpk2bhpCQEElkZsGCBWV6671O8KAW6QNrw4AUrDZhPPYAQPuZPnv2DMXFxTAwMMCjR4+o1r01a9YA0K4bFy9exLJly5CdnU1l/l4tEjxRlrU8iKMxX331VYU/p08ogBTx8fESWdXAwIBpMxNN23Whz/hy8eLFaNu2Lfr27auIO3f37l3p/1u0aIG4uDjqcwBv/0hhVYOYeOvCxMQE3bt3R6tWrSr/gihRlcRzeIiC8AAPD7pBgwbh1KlTkiKdhYUFldiAuLGbmJhg//79pb4fEBBANQZWFkhGNDdt2iRb14yNjUu9xoryruPMmTMYOXJkmc8YQFfU8vX1RXp6Ou7duwcXFxcYGRlhw4YNVJ0vHqO7SsFTlToiIgIAZKIFKpWKSn2yqoA1YPPz88OsWbPw7rvvIjIyEg0aNKBOpm/evCkld4D2vqAJ+IyMjJCWliZ1Aa5duwYTExOqaxBFqa5du4ZRo0bBwMCAOs7gsRcMHz4chw8fLlU84MXbrQx7AgBIS0uTKYjWr18faWlplfLeIlioRbzib1bwtAm7fPlyKRV7msTv4MGD2Lp1K8zMzKT7iHbdu3v3Lq5evYro6Gj8/vvv6Ny5M3Wxs1okeLt37wagXXhiYmKkypqoOkPKfRArrwkJCXB1dUVKSgri4uKoqkSHDh1CYGCgJDe7c+dOzJ8/H1OmTKH7pfRcZ0XIysqikgsuCR5StQC7ZPn/IMelS5dw48YN6SH/+eefYWFhgS1btsDJyalC8Yj/oXwoFQXhAR4edDk5OTAzM8O//vUvxMXF4erVqzIDZVacP3+eOMErb7qApGsvcmhEGBgYUI+r6kN5VemHDx9i5MiRsuKWUly7dg1hYWHSqHz9+vVlgQIJeIzuvm6QdDgiIyMr4UpeP3gEbDVr1sSXX36Jjz/+GBYWFvDy8qK+jrLuAd0pHX1wcXHBnDlzkJycDEdHRyQkJFAH3u+//z6sra1RXFyMtWvXIisr643wK8UR5nXr1kkTIG+jgE+7du3g6ekp7d8hISGV3uFmESbhFX+zgpdN2Oeff46YmBg8evQIw4YNw48//kidWB04cABnz56Fubk51XG68PHxgZWVFebPnw9LS0tl+7lQjeDs7Cz89ttv0te3b98WPv30U+Lj169fL3z66afCRx99JAiCIGRkZAh2dnZU1/Dhhx8KaWlp0tfp6enChx9+SHUOfbC1ta3w+8uWLROePXum+PzR0dFcfuZ/4Iv58+cLT58+lb7+888/hXnz5gnPnz8XRo0a9QavrPph7Nixr/X8iYmJgiAIwsOHD8v8R4Nx48YJubm5wvPnz4UBAwYIM2fOFFasWMHtWkk+i99++00YMmSIMGjQIEEQBOHOnTvCypUrqd7HwcFBtn7/9ttvgr29PdGx48ePF+zs7Mr9xwvHjh3T+zMTJ04UBOE/n1txcbFgY2ND9T6LFy8W9u7dK2g0GqG4uFjYs2ePsHDhQvoLfo3Qtw+JePjwofDNN98I33zzjfDo0aPXfFWvB0OHDlW8p/bp00ewsrKS/vXo0UN4//33pa9p4O7uLnh7ewvPnj0T/vrrL8Hb21twc3OjOkdWVpZw8eJF4eLFi8LLly+pjhUEQdBoNMLvv/8uZGdnC4KgjXHu3btHdY779+8LkyZNErp37y506tRJ+leVQHp/syI7O1vw9fUVxo0bJ4wbN07YuHGj9NlWJgoKCoQHDx4IDx48EAoKCqiPZ42/KwsLFiyo8Ps2NjZCYWGhMHr0aEEQBOHZs2fC7Nmzqd5jypQpiq9PEAShqKhI2LZtG9M5BEEQqkUHT8TDhw9hYWEhfd29e3eq8UIelVcjIyM0aNBA+vqdd96pdPn1rKwsjBkzBpaWlrLRBdKKDC8xjMmTJ6Nfv36wsrKCpaUld8GE/zYkJyfLLCb+8Y9/4OnTp2jYsKGiUdz/oXy87vEcHx8fBAUFlanaSdsZEDgYKFcEks/C19cXu3btkgQgunXrRuRtqAtXV1csWrRIql4/evQIX375JdGxPHljFUGfzQIAdOjQARERERAEAcnJydi5c6ekcEyKskZ3RfuCtwlhYWHYvHmzVMUPCgqCi4tLpRq280Djxo0VV+N52gt4eHhg/fr1sLW1hUqlwpAhQ4imYvLy8qT/r1GjhmwMl8RaQBcqlQrvvfce0tPTkZWVBQCysVESVBWbmopQWZwxY2Nj6rWSN1iFSQD2+LuyoG/yoGbNmqhRowZUKhUKCwthbm6OZ8+eUb3H4sWL4enpicGDB8ticNJuplqtxuXLl5m5mNUqwatTpw7Cw8MxduxYANr5f5qFq1atWrJgRqPRUF9D//79Ze320NBQDBw4EI8ePQLAh1xeUeIFaMU4REEOJeAlhuHh4YGff/4ZAQEBuH//Prp27QorKytJwet/oEODBg0QGBiI8ePHA9DeW++88w6Ki4srjS/wP/DBzJkzAWi5SbReWCXBy0CZBYWFhaXWNtqCjqWlJU6dOoXffvsNgNa42NTUVPp+ReJSpLwxVuhbewGtf+jGjRuRmpqKSZMmYejQodQJqL7R3criiLJi7969CAkJkYQ9UlNTMWvWrLcuwWMJ2HTtBYqKimQCbLSy58bGxhVSKIKDg8ssQFhaWla4R9CMNV69ehVubm5M9kc8bGpiY2OxevVqxMbGSrxA2t8lMTERiYmJstHXyuKMiUhPT4evry/++usvHDp0CLGxsfj111/h4OBQKe8PsAuTAOzxd2VBX6xkZGSEvLw8WFpaws3NDQ0bNqS28Lhw4QIuXLiAhIQEaS+mtcoZPHgw9uzZA1tbW9n6T/OZVqsEz9fXF66urli5ciVUKhU6dOgAPz8/4uN5VF5PnToFAKUWuxMnTnAjl1dkfFlcXIyzZ88iKChI8fl5iWF0794d3bt3x9ixY3HhwgXs3LkTd+7c+V+CpxB+fn5Yv369ZGDdp08f+Pn5oaioiOo+/x/0gySQZ4Gfnx9CQkIwefJkZhERHgbKFYHks6hZsyZyc3OlzfPRo0eKrsHU1LTcTbAicaklS5ZUuHHTVKIrAkkhxdjYWPIpY0V5nMzK4ohWBNIOh65qY0kFx7cFPAK2yvAaK6/DLO7pAQEBqFmzJuzt7SEIAo4dO4bCwkKq9/D392e2P+JhU8PaBdy8eTOOHTuGtm3bKv6b8sDKlSsxaNAgHD58GIDWcNzV1bVSEjyewiSs8XdVwZYtW6BWq7FixQrs27cP2dnZ1PvH+fPnERkZSZ0Y6kKcXvH391fMMa1WCV7btm0REhKCnJwcAKBWwORReeVBKt+3bx8mTJgAExMTuLq6Iibm/9i7+7ga7/8P4K/TjUhNljC+ZS2sUcQMLffTECmVaEkzcx9JGtVyk8zN+bIZa7HwHXMTicjNNkOyJWx7bPl9JTdR2twl6UZ355zfH33PtY5S13Wu65zrdHo/H489HrraOb2lzrk+n8/7JhOffvopBg0aBKDhwZeGhoZ4+vRpnYYFYli1ahV+/fVXvPLKK3B2dsbGjRv1YiaSWDp06PDSmYpcioiJqsrKShQVFancfGp6lEdVVRV27NiBJ0+e1Nu5kUvXRiEGKOfk5ODWrVsYOXIkSktLmV15oOYUpjGzZ8/G9OnT8fDhQyxduhRpaWmCpxQ2tNAcPny4oF+Lr/T0dOTm5qo0wODyb9oYTW9AKL9G7aZjL457YHPCYWNjgy+//BKTJk0CABw8eBDW1tYajVsThLhh08asscZ+Ln788UeVTZLp06fDy8sLs2fP5vR1+I4/EmJMDd9TwFOnTuH06dNqdUoX0oMHD+Dn54eEhAQANZtl2srAEKoxCcD//ltX1M5Oq6+5GJvuwdbW1pxP518kxEGLXi3wFDznDwmx85qTk4NOnTrBxMQEaWlpuHbtGiZNmqSSatSYpKQkTJs2DRcvXsSTJ0/w2WefISYmhlngNaZ3796YN28exo0bp7Kjpe2dqYsXL6Jly5bo378/BgwYAEdHR6oVU0N6enqjXZzY/D/kHyEhIYiOjoaxsTE8PDxQWFiIWbNmYfr06QA0/7sSHR2N5ORklJeXC9K5saioCJmZmSqpRmxrhg4fPoytW7eiqqoKI0eOxIMHDxAdHc2MTGAzKWgzYQAAIABJREFUcmHo0KF44403kJaWBoVCgTlz5qBLly5q/V1epqENK2XdtKaxTdG8evUqevToobHXO21s3tUe9xAWFqbWuIeVK1ciJiaGScl0cXFBdHS0pkLWGCFu2LQxa6yxn4vy8nLcvXuX+d3Mzc1Vqc9jQ4jxR0KMqeF7CmhlZaUTi5AXf66ePXumlQ0cQPih7w2lvOoKvrWVbLoHd+nSBYGBgbxmSAMNb7yyoVcLPCHmD/HdeV24cCESExORl5eH5cuXw8XFBUuWLEFcXBzr51C+cGVkZMDd3R19+/bl9AuvPMLdt28fc02M1IPjx4/j0aNH+OWXX3Dw4EFERETg9ddf5/S9IMI1vSH/yMnJgbm5OU6dOoUBAwYgPDwcvr6+zAJP06qqqrBixQq0b9+e94w5vqlG3377LQ4dOsS8zr3xxhtqzWGytrYWdByMOqqrq3Ho0KE6M4yEGv3C5ob8999/R0pKSpNvKiVE0zFLS0umnX1TJsQNG59ZY0IJCQmBr68vHBwcAAD//e9/OY9UEnr8kbpjavieAjo5OWHRokUYPXq0Wo0whOLq6oply5ahtLQUSUlJ2Lt3L7y9vbUaQ2PYLGp0JeUV0GxtJZvNtaqqKl4zpIGag55t27a9dOOVDb1a4PF9QxJi59XAwADGxsZITU2Fn58fZsyYwRSdstWyZUts27YNx48fx549e6BQKDjlye/evZtr2BqhUCjw999/46+//kJ+fj4KCwvxr3/9S+ywmhyhmt6Qfyg3cC5fvoyhQ4eiVatWWm1MsnbtWiQlJXGaMfcyfFONjI2N69SucH39u3LlCjZu3Mi8qSpTxLk0XmgMm02uZcuWQSaTISMjA35+fkhJSUG/fv0afZy3t3eDb9zKTUJ7e/tGn0sb3fe0scMvRNMxQPPpqtogxA1b7Vljyhq8l6Xcq6uhnwu5XA4bGxucOHECf/zxB4CaRQ6bE3qgJlX7o48+wmuvvYY2bdqgV69e+PHHHwWJ+0Vsfr75ngJmZmYCUL1fEmNBMmPGDBw9ehTPnj1DamoqAgICON8zahqbRY2upLzqwkIzMjKyzvdBmbrK1q5du3hvvOrVAo/vG5IQO68VFRV4/Pgxzp49i4ULFwLg/ma8Zs0a7N27F4sXL4aVlRVyc3M5tT1PTU2t97q2X7icnZ1hZ2eHgQMHYv78+XBycmryu9piEKrpDfmHnZ0dPv74Y9y+fRuhoaEoLy/X6tdX1uAVFhbyrsHjm2pkYWGBnJwc5rUzOTmZ8yIlMjISCxcuhIODg8YWyg01l1LKzMzEsWPH4O7ujlmzZuGDDz5gtYAWcszC66+/jg8//JB3eg7Ab3A8X0I0HdNGuqo2CHEC3KtXL/zwww8qXTS5vB/KZDLMnTu3wQZqDZ0wGxgYICwsDMeOHcOIESPYB/4/x44dw0cffYSYmBjejaEawzUFWZ1TQF3ZCM/KysL48eNVOsumpaVh8ODBIkbFna6kvOrCQjMgIKDO70h91xoixMarXi3w+L4hCbHzGhgYiNGjR8PZ2RmOjo7Iy8uDubk568fLZDJs375dpRbQxsYGs2bNYv0c8fHxzJ8rKytx7do19OjRQ+sLvDNnzry0CxwhYlq3bh0uXLiAN998E6ampnjw4AFCQ0O19vWVNXjPnz/nXYPHN9UoIiICoaGhyMnJwYgRI9CyZUvOadSvvPIKxowZw+kxL+LTXEpJ+fc3NDTE8+fPYW5ujoKCgkYfJ+SYhcrKSt6nPX/88QcWLlwIuVyO1NRUZGZm4sCBA0w6nTZey+trOsZ1XldTT1cVuv757t27uHz5MoCan1E7OzvWsSgbqMnl8pduojR2wtylSxfcu3dPrUwaExMTzJ49G/n5+fXO5xKqU61Q2Gysp6Wl4ZdffgEADBo0CC4uLpoOq4558+ZhxowZmDx5MuRyOT7//HOcPXu2yS3wdCXlVdMLzYbWCdXV1aiqqoJcLkd5eTnzM1hcXMy51lWIjVe9WuDVfkOaOHEi3nvvPVY7s8oddCF2XidNmsR0DAOATp06MW3t2TA0NMT169dZ///1eXFn6ubNm9i+fTuv5+RC+YbX0OKOmoIQMSkUCubN/Pnz53jllVe02na+T58+6NOnD6ytrXnX/fFNNbK1tcXBgwdx584dKBQK2Nract4pHDduHPbt24cxY8aovLlzqTHi21wKqGm4UFRUhMGDB2PGjBlo27YtpwHVxcXF+Oabb+rU8O3atYv1cwhx2iPE4Hg+ZDIZduzYwbvpmLaGRWuKkPXPQgx97927N4KCgtRuoFZaWorx48fj7bffVnl/ZrM4i4uLwy+//ILr169j2LBhrGNWhxApyI2dAsbHx+PIkSMYO3YsgJp/a09PT63VYSslJCQgLCwM6enpePz4MWxsbHDw4EGtxtAYNr/HupLyynehWV8GnJmZGbp37w5zc/MGa/ji4uKwZcsWSCQSODk5qTxemVLMlhAbrxKFttr16LDw8PAGP8/mDVvInb4NGzagtLS0zoBDPkPSx48fj6NHj6r9eC48PDwafVP08/OjpiBENPb29nVuAIyMjNCrVy+sWrUKb7zxhtZiuXnzJjIyMgAAAwcO5LSrL9TXf5G5uTmnhVFKSgqioqKYVFd1ZvZ4enriyJEj2LRpE7p06QJPT09MmDCBU1qLTCaDoaEh5HI5jh49ipKSEnh6erLe0Z0/fz7s7Oxw/PhxBAcH49ChQ+jZsyez0GLj+fPn2Lp1K/Ly8rBhwwbcunULOTk5GDlyJOvn8Pb2xqFDh5jvCQCVP2uDj48PpwZltSk3TbOzs3Hz5k1B0lXFoHydaKz++cKFC40+1/jx47F9+/Y6Q9+5vC8HBATUGwfbDYiX/S5x6UJbu1EMXy9LQU5NTeW9MGjstcPd3R379u1jXhtKSkrg5+eHY8eO8fq66jh9+jTCwsJgbm6O7777DjY2NlqPoSl0wGSD7+/IpEmTcPXqVXTv3h1AzWvYm2++iQcPHiAmJobVSJ7o6GgsW7aMW+D1kMlkvDZe9eoEr7q6GgkJCSo3S76+vo22NxZix1XInT7lsPRz584x17gMSa+9AyGXy5GZmcm7xTMX1BSE6LqQkBCYmJjAx8cHCoUChw8fRmFhIaytrbF8+XKt1WcIsasP8Es1mjlzJv7++28mlby4uBiWlpZo0aIFNm7cqLIT+TIbN27Erl270LNnT7Vr8Pg2lwL+qVEwMDCAp6cn5xju3r2LzZs346effsK4cePw/vvvY+rUqZyeY8WKFbCysmJqZzt27IjQ0FBOCzyhBsfzMWzYMGzfvr3ORiObU9naacd801XFJHT9M9+h73xfl/iME1FuUDe0uGO7ia2NFGQ2Zxe1N37Eqtlas2YNLl68iEOHDuHmzZv48MMPsXjxYri5uWktBqEakxQXFyMnJ0cl++Gdd94RNNbG8P0dsbGxQVRUFNNp9v/+7/+wc+dOSKVSLFq0iNUCb9GiRUwqdXZ2Nm7cuAFXV1eVTa6XqW/DFQBTu8vloEevFnjR0dHIz89n3tiTk5ORlZXV6NwdIU7fhFzU8B2WXrsGz8jICDY2NlrNj6emIETXff/990hKSmI+njp1Kry8vJCUlMQppZqvHTt2ICkpqc6uPpcFHt9Uo/feew8DBgxgFiCnT5/GxYsX4erqitWrV7NKF2rfvj0cHR1Zx1wfvs2lgLrdPJXYdvNUvgEbGxvj6dOnaNOmDZ48ecIphuvXrzM1ngDQunVrzg2/tDE4vjFbtmwBAEilUuY9jO2prFBjKfQJn6HveXl5sLa2funNH9ubPj5jRITcxBYyBVndRkQODg4IDw/HxIkTAdR0ylXe1GtTaWkpDhw4ABMTE7zxxht46623sGjRIq0u8IRoTHLixAmsW7cOz549Q/v27ZGbmwt7e3uNN+SpD58Nz6ysLJWfg549eyI7Oxt2dnasU4enTp2K7777DqWlpZg+fTq6d++OtLQ0VmN2Zs6cybze/v333zAzM4NEIsGzZ8/QqVMnTusDvVrgXbp0CSdOnGB2IMaMGcPc9DREiBcuoRc16enpuHXrFqZMmYKCggI8e/YMtra2DT5G2cY4ODiYVWtwQpqr58+fMzdNQM0NVFlZGQDunar44rurn5ycjP379zNvzgEBAfDz82O9wLt06RIiIyOZj0eOHInNmzfj008/Zd1ddODAgZBKpXBzc1M5aeKy22hra6sSB9fmUgD/bp6vv/46nj59Cnd3d0yaNAnm5ubo2bMnp+d4cZe2oqKCc02RNgbHN4bPe5rQzUn0AZ+h7zExMdi6dStmzpxZ53NcsnvUHSMCCLuJXVVVVee1gWsjHr6ngFFRUfjqq6+YOtN3332X98gadbxY52ptbY29e/dqNQYhGpPExcUhKSkJ06dPx5EjR/Dzzz/j+++/FyhC9vhueLZq1QopKSkYN24cgJryg5YtWwJg391VoVDA1NQUx48fh6+vL+bPn896s1K5gFu1ahX69evHNC87deoUrly5wuo5lPRqgWdhYYHKykrmH6O6uprVjBddSynctm0bUlNT8ejRI0yZMgVVVVWIiIhQGVxeH2Ub49WrV4uya0JIU7Fw4UL4+PiopGGsXLkSpaWlGD16tNbi4LOrXxufVCO5XI7ffvsNffv2BVDT+VB54sR2kaSsIzp58iRzje2N54IFCxp84+SSfcC3m+e///1vADUzthwdHVFcXMy5m12/fv0QFxeHyspKZGRkYOfOnWq1pRd7cPzLur6xSdEU8rRHX/AZ+q4cjcA3u0fdMSKAsJvYQqQg8z0FNDU1RVhYGKevKaSTJ09izJgx9Y7JAbRbpypEB0wjIyNYWloymRMuLi7M66k28d3wXLNmDcLCwhAeHg6JRIKuXbti3bp1KCsrwyeffMLqOSoqKlBZWYmff/4ZU6ZMAcD+vVTp8uXLiIqKYj4ePXo05yHterHAU/6CdOvWDZMmTWKOtk+dOsUqbUjXUgpTUlJw6NAhJnWgY8eOrIYkNrU2xoSIZdSoUXj77bfx559/AqjpTmdpaQmgJj1OW2rv6kskErz77rusd/WV+KYaLV++HCEhIczGWHl5OdPo6cMPP2T1HHxuPNnUNLDFt5tndnY2/vWvf8HU1BT9+vVDaWkpcnJy0K1bN9YxhISEID4+Hq1bt4ZUKsWIESPqPXlpiDYGxzemT58+KqmZSmxSNHVt01QXqNsjoD4FBQUqKZadOnVi9Th1x4gITYgUZHVPAXVlYaVMt+U7JkcIQnTAbNGiBRQKBbp06YLdu3ejc+fOTFaMtvHZ8LSzs0NSUhJzz1378WxTPd3c3ODi4oIuXbqgb9++ePToEecNDIVCgStXrjAn7L/++ivnVH+9WODV/gXp0aMH7ty5A6CmAxbXIn1d0LJlyzovVGyOhrXZxpiQpq5du3ZqnawIic+uvlJUVBRiY2PVTjXq168ffvzxR5UBzMo0Qy5NGdTtBsqn8cOLLC0tERUVxSySuXbzXLp0KRISEpiPjY2NsWTJEpV6zcYYGxtjzpw5mDNnDrfga9HG4PjG1N74rKiowLFjx1BYWMj5saSGuj0CaktPT8fSpUtRUFAAAwMDVFVVwcLCgvXCn+8YEaEIkYKs7ingjRs3MGbMGNEXVsoxFz4+PpzmNWuCEE3FgoODUVJSgsWLF2PFihUoLi7G8uXLBYiOGyFqK/l2FA0KCkJAQADMzc1hYGAAU1NTbN68mVMMy5cvx6JFi5jNyYqKCmzYsIHTc9CYBB20YMECTJ06FatXr8ahQ4cQFxeHW7dusf7HFbKNMSH6KCsrC8uXL0dWVhYqKyuZ61za+vOhizVK6p4KAHW7gZ4/f55zN9AnT55g1apVzM2qi4sLIiMjWaXZK40YMQKbNm1Su5unh4cHkpOTG73WkPXr19e5Zm5uDicnJ9b/nhMnTtS5WVjAP+MbCHejR49W6RFQXV2NsWPHcqpT8vLywoYNGxASEoLDhw8jMTER9+7da7ShiBLfMSK6JDU1FV9//TXy8vIwePBg5hTw3XffZfX4kpKSOn/v+q5pinKMA9dRMJqi6aHvsbGxWqlxLCsrw1dffcW8jyg3PBuay1zbyzqKshmzIFQzJKXKysp6N17Z0osTPF28WeIjKioKS5YswY0bN9C7d2/069ePVfqCkG2MCdFnK1aswMKFC7FmzRrEx8djz549KoODNU3IGqWYmBgEBQXBwsICAFBYWIjY2FiVhiUN4XsqAAjTDXT58uXo2rUrli5dCoVCgQMHDmDZsmVMN0c2+HbzNDIyUmm+k5uby7npTkFBAa5cucJ0Jf3pp5/g6OjIpIaxOdkTYnA8X7Vr8JTjdoqLi7X29fWNuj0CXmRra4vq6mpIJBJMnDgRXl5erBd4fMeICEWIFGS+p4ABAQF1Flb1XdMUXSqp0cbQ9x9//FErCzy+tZV8OooK1QxJSSaToUWLFpDJZMjNzQXQDMck6FtBt5WVFXbs2IHnz59DLpezvvHUt+8DIZpSWVkJZ2dnKBQKtG/fHiEhIfD29uZcK6UuIWuUrly5wizuAKBt27a4fPky61ikUin+85//1DkV4IpvN9Dc3FyVNJYFCxbAw8OD03Pw7eYZFBQEPz8/5iQyNTW1Tpe7xjx8+BBJSUlo06YNAGDevHmYP38+9u7dC19fX1YLPL6ppkKoXYNnaGiILl26sN40IP/g2yOgNmW9XocOHXDmzBl07twZRUVFrB8/cODAOuUeytPlsLAwtX5v1SFECvKTJ0/QoUMHphFRZWXlS0cm1FZdXY2qqirI5XKUl5czr8HFxcUvbSykCbpUUsO3MQkbmk4WFKq2kk9HUWUzpCNHjuCVV15R6zmU9uzZg3//+9+wsLBgfme5LhL1YoGnbwXdfn5+2Ldvn8purfJaQ/Tt+0CIpih3stu0aYOsrCx06NCBdX2REISsUapdJ6BUXV3N6Tn4nAoAwnQDlcvlKCgoYJrdFBQUcC4q59PNE6hp+LJ7924mVWnmzJmca4MePHjALO6Ams6ejx49gpmZGesUGyEGx/NFdXTCELJHwNSpU1FUVITg4GCEhoaiuLgYERERrB/v7++PZ8+ewdvbG0DNjaihoSFatWqFqKgoxMXFcYpHXXy73QLArFmzVNLmqqurMXv2bBw4cKDBx8XFxTFZAU5OTsx1MzMzTJs2jVdMXFhYWMDNzQ2WlpY6UVKj6aHvbEcMqEuo2kq+HUUVCgUmT56MEydO8Ipjx44dSElJQefOndV+Dr1Y4OnbG9GLs6dkMhmrXTp9+z4Qoilubm4oLCzEzJkz4efnB7lcjgULFogdllocHR0RExODGTNmQKFQID4+ntPJAN9TAYDfjC+l6dOnw9PTk9nNTk1NRWhoKKfn4NtGHqhZ7DY2c7QhXbt2RVRUFLy8vAAAhw8fhp2dHSorK1kv1oQYHM9XcHBwnTSx+q6Rhgk59F05m6tXr1748ccfOT/+/PnzKrWdS5cuZeoq2cwMFooQKciVlZUq/7+pqalKDfHLBAUFISgoCNHR0Vi2bBm3wAWkSyU1ujL0nQ/l+3dkZGS9tZVs8e0oKpFI8Nprr6GoqEhlo48rKysrXos7gJqs6JT4+HjEx8ejpKQE5ubmzPXy8nK4u7tzvmEihDSuqqoKFRUVTbLRAFDz5rV69WqcO3cOEokEw4YNQ3h4uMprSENSUlIwePBg3L17lzkVCA8P55weKYTs7GxcunQJADBgwABO4wkAICcnB506dYKJiQnS0tJw7do1TJo0qdE32rCwMEilUnh7e9e705yYmMg6hpKSEnz11VdMR9H+/ftj3rx5aNWqFZ49e8aq7uqLL75AVVUVr8HxfNXX/MHd3R3Hjh3TWgz6QIgeAUL1GRg1ahQSEhJU6nUnT56M77//Hp6enlor30hJSUFUVBSzma1OCrKHhwd27tzJ/D4VFBTgww8/ZP3zWXskClDTnCM/P5/za466PDw8Gi2p8fPz08q/Cd/GJGxo6+ervtctbTeyCQ4ORmZmJoYMGaLyPWQ7Rw8AvvzyS5SXl2Ps2LFqvwfQAk+HFBcXo6ioCKtWrVLZWTIzM+O1E0AIqSs1NRUXL14EUFObwqUNMqkrPT0dubm5KumhXGdKVVdXq3QN4zojzMPDA4mJibh//z4CAwPh4uKCR48eNZp6dvXqVTg4ODCLyxf179+fUxwNYdNNrr7xHeoU6avjwIEDSEhIwO3bt1VGXRQXF8PW1lZraXz6QogbeaEWA9999x2++eYblW63H3/8MSZMmIANGzZo7USLb7dboGbT5ZtvvmE2opKTkzFz5kwm/bQxXl5eSEhIYEZSVVZWYvLkyZxGovBhb2/PlM68qHZJzYULF7QSD1/btm3DxIkT0bZt23o/z6Y+kg9lbeXkyZNVfleKi4sxdepUnDp1qsHHC9kB82WNwYKCglg/hxDvAbTAI4Q0O59//jnOnDnDpCWdPHkSw4cPx8KFC0WOjD2hdvXrK0o3NzdHr1698Prrr7OKZenSpbh69Sp69Oih0nWSS3paZmYmFixYwAzMra6uxubNm9GzZ0/Wz6Hcqf3uu+/w/PlzzJgxg/OYA6XKykoUFRUJ3nhCV9qiv0x+fj7u3btX70bjm2++ybmraHMnxI28kIuB69evMxsZ77zzDuzt7Tn8bYQxefJk7N+/n/fzZGRkIDU1FQAwbNgwThsxQoxEaeqEHPoeExODEydOYNCgQfD390fv3r2FCpOVLVu21LuwUtZWzps3r8HHz5o1C1u3bhV1c01otMDTQfV1ugLAqYUwIeTlRo0ahcOHD6uk50yYMIHTTCqxCbWrP3v2bFy+fJlZCF68eBG9e/fGrVu3EBQUBB8fn0ZjGTVqFFJSUpjdcHVMnjwZwcHBTBzp6enYtGkTpxtBNzc37Nq1C0uWLMHChQvh6OiI8ePHM81XGhMSEoLo6GgYGxvDw8MDhYWFmDVrlqDd5NimKqk7OJ4Qdfn4+HBKR1YX3xRkmUwGHx8fXhsl3t7e+OKLL1RGoixcuFBrJ3i64Msvv8SCBQsQHh5e7+e51o+WlZUhOTkZe/fuhbGxMfz9/TFu3DhWA+iFInZtJVAzlPzo0aPIy8tTyWjhkqIpxEmiXjRZ0Te1B8lWVFTg2LFjnFOVCCEv98orr6gU6JuYmPBua6xtQnXNlUgkOHbsGDPY/O+//8bKlStx8OBBTJs2jdUCr2PHjtz/Ai94/vy5ymmjs7Mz1q5dy+k5AgMDMXr0aDg7O8PR0RF5eXmsaxGBmho+c3NznDp1CgMGDEB4eDh8fX0FXeCx6Sb34uD4rVu3ch4cry6pVIqwsDAsWLCg3lipyYr+4tp9V118u90aGhoyTVXUXTwIMRKlqROqMYmSqakpJk2aBEtLS3z22WfYtm0bNm3ahKVLlzLjQTRt8uTJKCsr41xb2diIDC4NgIKDg1FVVYVevXpxHk6uVHtkU2VlJR4/foxOnTpxaiRGqwYd9GLnnODgYPj6+jZ6xEwIaZgynadPnz5M7QlQc8Px9ttvixkaZ0J1zb137x6zuAOA1157Dfn5+bCysmo0HU+Z2vP666/jww8/xMiRI1Xe0Lik+LRq1QoZGRlMV7lLly5xHuw9adIkZlQDAHTq1Ak7d+5k/XjlDe7ly5cxdOhQtGrVSpQxBUIMjleX8vdg+PDhGv9aRLdoupW9klDdbv39/TFq1CiVRhZsX3OEGImiL4QY+v748WPs378fhw8fhoODA6RSKd555x3k5eUhICBAawu8pUuXIiEhgfnYyMgIS5YsafRktvbczxdxbQB09+5dlc0Ldbz4O5Keno7z589zeg5a4DUBeXl5KCgoEDsMQpq8+Ph4lY9rvxH897//1XY4OsHS0hJxcXEqbf1fffVVyGSyRm/4as8csrGxQXZ2ttpxREREIDg4mFkgVlVVsT4telmtoaGhIbNIZVOPaGdnh48//hi3b99GaGhonZE1QmBbFcF3cLy6lDUoys0PQjSBbwqyTCZDt27dcPv2bbVj4DsSpakTcui7p6cnvLy8sGfPHpWMDmtra+a9RRtkMplKqUCLFi3qnRX7IiHHjFlbW6OkpETQztzOzs5Yv349p8dQDZ4Oql2DJ5fLUV1djcjISK3+khDSnJ0/fx5DhgwROwytePDgAVavXs3cbA0YMAARERFo27Yt7ty5gzfffFNrsVRVVal00WRb0ydUPWJ5eTkuXLiAN998E9bW1njw4AGuX7/O6WehpKQEpqamMDAwQHZ2Nm7cuAFXV1dm4cqmm1xQUBC6d++uMjj+2rVr+Oqrr1jHwVdBQQF2795dp46EUjT1l7Za2b+Ygnz+/HmtpSArUa8D/o1JlGQyGQ4ePIjJkycLHSJnYtZWKhdgDx48wNWrVzF48GCVjBZ1a/DkcjkyMzOxY8cOHD9+nPVz0AJPB+Xn5zN/NjIyQrt27ahzGSFapOudDnWFUJ08AX6DtYXqMviyXWsuqaJeXl747rvvUFpaCi8vL3Tv3h1WVlac6gkLCgoQExPDpI+5uLggMjISlpaWrJ+Drw8++AB2dnbo3bu3yvsPnezpr+XLl2PlypUa/zrjx4/H9u3b66Qgs22GBNT8rm7duhV5eXnYsGEDbt26hZycHIwcOZLV42vfZ9XuddAcS2GEaEzi5eWlEw1qzp49i6ioqDq1lcOGDWP1+KysLCxfvhxZWVmorKxkrrNJ0XzZeAQldcckGBkZoUuXLliwYAEcHR1ZPwelaOqgzp0748mTJ/jjjz8AAE5OTi+dLUIIEV5z2vfiMyZh7dq1jZ6crVu3jtWpQG5ubp1rbNOvhEqvqV2HUXt3n0v9hUKhgKmpKY4fPw5fX1/Mnz8f7u7unOKwtLTE559/zukxQnv27BlWrVolagxEWKNHj8aUKVPg6elZb/qYNhZ3SnxTkFesWAErKyvmd79jx44IDQ1lvcCjXgf/ULcxSW0DBgzR3PH+AAAgAElEQVTAqVOnMHr0aE2FyQrf2soVK1Zg4cKFWLNmDeLj47Fnzx60bt2a1WO5LOAa01idKpssI1rg6aAffvgBUVFRcHBwgEKhQEREBFatWsX6hYsQwo+2mg3ogrS0tHrHJGzcuLHRMQlCdPJUDta+c+eOytdSDtbWptoLReWufmFhIafnqKioQGVlJX7++WdMmTIFANRq1CLE4Hg+unXrhgcPHqBDhw5a+5pEszZu3Ig9e/YgNjYWrq6u8Pf3R/fu3bUeh42NDb788kuVFGRlSh1b169fx7p165hT+datW0Mul6sdU3PudaBuY5LaDh8+jJ07d6Jly5Zo1aoVs0kmRsorn9rKyspKODs7Q6FQoH379ggJCYG3t7dKV8vGxMTEICgoCBYWFgCAwsJCxMbGIjIyUq2Y6vP555/TAq8p+vzzz7F//37mB/TOnTuYM2cOLfAIIYLjMyZBiJMzFxcXdOnSBatWrVKpUVAO1haLiYkJfHx84O3tjRkzZrB+nJubG/N36tu3Lx49esS5lfvLBsdr07NnzzB+/Hj06dNHJX6qwWu6evTogdWrV+PZs2c4dOgQZsyYgX/9618IDAzE+++/r7U4Vq5ciZiYGKbmzsXFBdHR0Zye48X28xUVFZwyL17W66A5UrcxSW21x3uJiW9tpfL1tk2bNsjKykKHDh04b/JduXKFWdwBQNu2bXH58mVOz9EYNj/rtMDTQSYmJiq7D6+//jpatmwpYkSENC/NKUWTz5gEIXTu3BmdO3dGSkpKg//f3LlzERsbq9FYatfgKQvbi4uLOT1HUFAQAgICYG5uDgMDA5iammLz5s2cnuP333/nPTier3HjxmHcuHGifX2iOX/88QcyMjLQsmVLDB48GPv378eJEyfwxRdfaOXrC5GC3K9fP8TFxaGyshIZGRnYuXOnSt1SY2ovSJp7rwMjIyPk5eWpNCbh+r04ceJEnY2wb775htPmmBD4zpF2c3NDYWEhZs6cCT8/P8jlcmZeIFv1LY6FnjHJJsuIFng66L333sPXX38NHx8fKBQKJCUl4b333mPa2HKdDUUI4SYkJETsELSGz5gEbfrrr780/jVq1+AZGhqiS5cunHf1161bhyVLljAfm5iYIDQ0FHFxcayfQ4jB8XzIZDKcOnUKW7duFTUOIqzt27cjISEB1tbWCAgIwNChQyGRSDB79my4urpqNRa+KcghISGIj49H69atIZVKMWLECNZpdDKZDEFBQdRI63+EGPpe3wKvvmuaxre2ctq0aQCAIUOG4NKlS6ioqOA87sDR0RExMTGYMWMGFAoF4uPjOTVHEQot8HSQshX2i6kwW7Zs4TxwkRBS1+3bt/H111/XaQGfmJgIAMwbXXOwbt06rF69mhkIPmDAAKxbtw7V1dVYt26dyNH9QxuLTSFSTu/fv489e/bA398fcrkcoaGhrOtBhBwcz4ehoSGePn1ap9kMadry8/Px9ddf1ztzTptNfYRIQTY2NsacOXMwZ84czo81NDSEqakpKioqOKdP6yM+jUl+/vlnXLhwAQ8fPlSZ01ZSUqITmTDq1Fbm5uYiNzdX5SSOyz1BREQEVq9eDU9PT0gkEgwbNgwRERGcYmgMpWg2UUIOXCSE1LVo0SKMHj0aXl5ezTYtR6lDhw748ssv6/2cmDVwYnn+/Dnu37+v8ubetWtX1o9ft24dpk+fjnbt2uHMmTOwtLRUOdFriJCD4/nq3bs35s2bh3Hjxql0kWtOmx/6RCaTIT8//6UDxR0cHLQWixApyOXl5UhJSalzCsh21pitrS38/f0xatQopnskoN1GRrpE3cYkxsbGaN26NSQSicr3sX379pwakwiFb23lhg0bcPDgQdjZ2THNsSQSCafXPTMzM6xZs4Zb4ByxyTKiBZ4Oq6ysVLnJoNRMQoQhl8sxe/ZsscPQCfWNSQCa543Orl278Pnnn6NNmzYqb+4//fQT6+do0aIFtmzZAn9/f/Tu3ZvTfClN3xRwocwU2bdvH3ON640O0R3KU1m5XK5WV1chCZGCHBQUBAMDA/Ts2bNOwxU2ZDIZunXrxnoUiz7j05ikf//+6N+/P95//31ROrK+iG9t5alTp3D69GnOaZmAsHNhhcgyogWeDjp16hTWrFmDBw8eqMxkotRMQoTh5OSErKws2Nvbix2K6GqfGlVUVCAjIwO9e/fWuQWeNurSvv32W5w6dUqt0QAv3iSVl5fj0aNHzDwjNjdLQt4g8LV7926Nfw2iXb1790ZQUJBop7JCpiD//fffOH78uNqxREZG1rmJLykpUfv5mjK+jUmAmlTN1157Debm5ggLC0NmZiY+/fRTDBo0SOhwX0qI2korKyu1FneAsHNhhcgyogWeDpJKpdi8eTMcHBxE32kjRB/9+eefSEpKgq2trUoNhnJ3rDl58dTo4cOHnFuWC6Wh2oevv/5a41+/Y8eOas99E6JNuJA3CHylpqbWe51O8JousU9lhUxB7tatGx4+fIj27dur9fiAgIA6C4H6rjUHQgx9T0pKwrRp03Dx4kU8efIEn332GWJiYrS6wBOittLJyYlZXNV+Dja/I0LMhVUSIsuIFng6yMrKCr169RI7DEL0ltAFz/qkffv2uHPnjta/rhC1D3zNnz8fkZGRGDp0KOc399o3SdXV1cjJyQFQU9vCdjdcyBsEvuLj45k/V1ZW4tq1a+jRowct8JowsU9lhUxBDgoKgq+vL+zt7TnNaayurkZVVRXkcjnTmRwAiouLVcakNGfqNCZRnjJlZGTA3d0dffv2FaXJCt/ayszMTACqvyts34eE7J8hRJYRLfB0UEBAAL744gu4urqqvHBxKfQnhLxc//79AQBlZWUAoPJG0NzUrsFTKBTIzMzEq6++qvU4+NQ+COXs2bM4e/Ys7ty5o/YiMzMzEwsWLECLFi2gUChQXV2NzZs3o2fPno0+VpcabL24GLh58ya2b98uUjSEj5edxippa9EuZAryJ598ghEjRnDuxBkXF8d0JHdycmKum5mZMS3ymxshhr63bNkS27Ztw/Hjx7Fnzx4oFApUVVVpItwG8a2tFHsTREmILCOJQhf6mBIVO3bswJdffgkLCwu1C/0JIS+Xl5eH0NBQXLt2DRKJBD169IBUKmUGvTYn4eHhzJ8NDQ1hY2MDX19fWFhYaDWODz74AHv37tXq13zRiBEjcOLECbRs2VLt55g8eTKCg4OZm9T09HRs2rQJ+/fvFypM0YwfPx5Hjx4VOwzCUUBAAICak9jMzEymGUZ2djZ69eqltZ9NDw+PRlOQ/fz8WKUgu7u749ixY2rHEh0dzakBkj7Lz89n/qzu0PecnBzs3bsX77zzDt5//33k5ubi5MmTmDVrltDhNqikpKTe2kq2G4f1bYaYmZmhe/fuMDc3FyRGNi5dulTvdeXmNBu0wNNBw4cPR0JCgtq55YSQhk2bNg1jx46Ft7c3gJr6gZSUFGYWHNG+9evX4/79+2rVPgglMDAQ27dv59xgoDYPDw8kJyc3ek3X1b7RkcvlyMzMxLlz55CUlCRiVISPRYsWITAwEL179wZQc0rw7bffYsOGDVr5+vb29kyq8YtqpyBfuHCh0eeKiorClClT1B7lUlJSAlNTUxgYGCA7Oxs3btyAq6urWh05mzKZTAYfHx+9qT2cMGFCnb9LfddeZtKkScjMzGR+rrKzs/Hmm2/iwYMHiImJwfDhwwWPuSF8sowoRVMHderUiRZ3hGjQkydP4OPjw3zs7e2NXbt2iRiR9r1sPIKStrto8ql9EEqXLl0QGBjIq7tfq1atkJGRgQEDBgCo2YltiiNuatfgGRkZwcbGptH6JqLbbty4wSzuAKBXr15anbUoZAryn3/+CW9vb7VT2KZOnYrvvvsOpaWlmD59Orp37460tDSsXbtWsBibAqGGvnt7e9c7akFbjcuEqq20sbFBVFQUMxfy//7v/7Bz505IpVIsWrRIaws8IbKMaIGng3r16qV2Fx9CSOMMDAxw+/ZtvPHGGwBq0kua28Dz2h3tdIEu1D5UVVXx7u4XERGB4OBglRq8lw2S10U7duzARx99hODgYPTr10/scIiAWrVqheTkZHh4eAAAjh492iQ3HwBwrhF7kUKhgKmpKY4fPw5fX1/Mnz8f7u7uAkXXtAgx9H3JkiXMnysqKnD8+HGtHlQIVVuZlZXFLO4AoGfPnsjOzoadnZ1Wm8YsW7YMvr6+KllGy5Yt45RlRAs8HaS88RJzJ5sQfRYSEgJ/f3+89dZbAGpe1NevXy9yVNqlS0O1ldLS0vDLL78AAAYNGgQXFxetfn0hvie9evXCDz/8oNJF09jYmPfzasuxY8fw0UcfYfXq1XqTtkVqrFmzBmFhYfj0008hkUjQvXt3rFu3Tuyw1MKlFqk+FRUVqKysxM8//4wpU6YAQLMdSyXE0PcX/z0GDRoEPz8/vqGxFhQUhKCgIN61la1atUJKSgrGjRsHAEhJSWFqsus7odQUIbKMaIGng3RhJ5sQfTZkyBCkpKTgzz//BFAzAFiMzpFi0qWh2kBNSuCRI0cwduxYADUz4Tw9PTF9+nSNf22hvxd3797F5cuXAdSkQNnZ2fGOUVtMTEwwe/Zs5OfnIzg4uM7nKU2z6bKzs0NSUhIz0FvMjrV83b59G3FxccjNzUV1dTVznW1KoJubG1xcXNClSxf07dsXjx494pWi2JRpYuh7SUkJHj9+zOs51LFo0SLI5XK1ayuVmyDKUUpdu3bFunXrUFZWhk8++USToasQIsuImqzoKLF3sgkh+k3IjnZCcHd3x759+5gbjZKSEvj5+fHqlMeWkN+LI0eOYMOGDUzGxfnz57F48WKMHz9esHg16enTp/jll18glUqxYMGCOp+fMGGCCFERoeTm5iI3NxcymYy51hSzg9zd3eHh4YGePXuq3PhyOdkrKiqCubk5DAwMUFpaipKSEnTo0EET4eo0vo1JANUaPLlcjnv37mHatGmYM2eOoLE2xsvLi6mt9PLyQvfu3WFlZcW5tlLsTZDz589jyZIldbKMuAyOpxM8HSTmTjYh+iwwMBDffvutytwfoKYeQyKRID09XcTotEuXhmor1X4z1eYbq5Dfix07diApKQlWVlYAgEePHmH69OlNZoFnYWEBNzc3WFpaMo1iiH7YsGEDDh48CDs7O7XnPOoKIyMjfPzxx7yeo6ioCJmZmSqL3ea0wBNy6HvtGjxDQ0NYW1uL0ixQ3drKvLw8WFtb4+bNm/V+XttzqIXIMqIFng5KTk7G/v37mRucgIAA+Pn50QKPEJ6kUikA4NChQyJHIj5dGqoNAA4ODggPD8fEiRMB1KRa1S521yShvxfKxd2Lf24KlKmoDS3utJm6S4Rz6tQpnD59ukmnZioNHjwYqampai9O9Wmxqy4hh77zrYkUirq1lTExMdi6dStmzpxZ53NizaG2tLTk1bWTFng6SqydbEL0mXJHsXPnziJHQl4UFRWFr776CjExMQCAd999F3PnzhU5Ku5sbGzw5ZdfYtKkSQCAgwcPcmptLba1a9c2mq66bt06raXuEuFYWVnpzf2Es7Mz5s6dCwMDA6ZjLZcsDH1a7KpLiMYkL2bDvEjbWTHq1lZu3boVAHDmzBlNh9ggIbOMqAZPB4WHhwOAyk62QqHQya53hDRFv/32G6RSKfLy8iCTyZpliibRjIKCAsTExDA11C4uLoiMjISlpaXIkbEj5DBqolvWr1+P+/fv68UIJldXV4SGhqJnz54qJzRsN+8++OAD7N27V1PhNSl8hr7n5+cDqLlPffr0KSZNmgSFQoHExES0adOm3jpeTeNTW5mTk4NOnTrBxMQEaWlpuHbtGiZNmoQ2bdpoOOoaDx8+RPv27Znv64u4bE7TAk8HlZWVITY2lrlBUO5kqzPJnhBS15gxYzB37lw4OTmpdXNAhHPy5EmMGTPmpYPXtT1wnRB9FRAQUOeaRCLh3H5dF/j4+PAaoq1Pi12+hGhM4uXlhaSkJJVr3t7eopRD8Gkk5OHhgcTERNy/fx+BgYFwcXHBo0ePEBcXp6lwNYZSNHWQqakpFi9eLHYYhOitli1bNtuhtrrmxo0bGDNmjM4NXldXdXU1EhISkJGRAaAmhcnX1xdGRvR2S8SlTyOYRo4ciX379mHMmDEqCzS2g9szMzMB0LxhQJih7yUlJXjy5AnTCOTJkye8Ry2og29tpYGBAYyNjZGamgo/Pz/MmDEDHh4emgy5XkJkGdE7jg6KiYlBUFAQLCwsAACFhYWIjY1FZGSkyJERoh+GDBnCq0CfCEeZwqOJWUxiiI6ORn5+Pjw9PQHUNM3KyspCdHS0yJGR5i41NbXe603xdfCLL74AAKxcuZK5JpFIcO3aNVaP16fFLl9CDH0PDAyEp6cnhg0bBqDmZ23WrFlCh9oovrWVFRUVePz4Mc6ePYuFCxcCQIP1yJoSGRlZb5YRF7TA00FXrlxhFncA0LZtW2ZoLiFEfcrCZYVCga1bt6J169ZqFegT4QUEBNSZu1TfNV136dIlnDhxgnlTHjNmDDPyhhAxxcfHM3+urKzEtWvX0KNHjya5wBOi8y3NG64hxNB3f39/vP3228y9qr+/P958801NhNsgvo2EAgMDMXr0aDg7O8PR0RF5eXkwNzcXMEJ2hMgyogWeDqqdN6xUXV0tQiSE6Bcaj6B7hJzFpAssLCxQWVmJli1bAqj5+3GdX0SIJrx4anXz5k1s375dpGj4KywsxB9//AEAcHJyUtkYbwzNG/5HUFAQAgICmMYkpqam2Lx5M+fnsbe3h729vQYiZM/JyQmLFi1Su7Zy0qRJTAdkAOjUqRN27twpeJyNESLLiJqs6KCIiAiYmppixowZUCgUiI+PR2lpKXXRJEQDCgoKkJeXpzIHiGjPli1bsGXLljrXlbOY5s2bJ0JU3CmbxGRlZeHPP/+Em5sbgJqUIUdHR0rRJDpp/PjxOHr0qNhhcJaWloawsDC89dZbAIDr169DKpWyPoVzd3fHvn37mNOekpIS+Pn54dixYxqLWZfVPs10cXHBoEGDOD1eVzpTq9tIiM1sT23M/6ydZfT06VNeWUa0wNNBJSUlWL16Nc6dOweJRIJhw4YhPDxclGNiQvTRBx98gK1bt0KhUGDs2LF45ZVXMGTIECxZskTs0JotPrOYdIFyvM3L0AYdEVvtGjy5XI7MzEycO3euTvfDpsDLywtSqRR2dnYAgFu3biEsLIz138Xd3b3OYq6+a83Bi6eZJ06c4Hya2dQ7U3t4eDQ6/9PPz0/j8z9fNh5Bicv3k1I0dZCZmRndDBCiQWVlZTA3N0dycjLc3d2xePFieHh40AJPRJMnT0ZZWRkzDqasrAz5+fno1q2byJGxQ6/ZRNfVrsEzMjKCjY0NNm3aJGJE6quurmYWdwBgZ2fHqZTFwcEB4eHhKvOGHRwcBI+zKUhOTsb+/fuZ08yAgAD4+flxWuDpUmdqdWorr1+/jj59+jQ6/1PT6lvAqZtlRAs8HaIrR8SE6LvKykoAQEZGBsaOHQsDAwMYGhqKHFXztnTpUiQkJDAfGxkZYcmSJU3mdIFev4mu06fOka+++iqSkpLg5eUFADh8+DCnWteoqCjExsYiJiYGwD/zhpur2o1J1GlSoiudqdWtrRSiaY+QamcZeXp6qpVlRCmaOkRXjogJ0XcrVqzApUuXIJPJkJKSgufPn+PDDz9sMosJfeTh4YHk5ORGr+kqev0mTcHt27eRlZXFbHIBYEZ6NCW5ublYvHgxc2P+1ltvQSqVwsbGRuTImh5lennt00yFQsEpK2HgwIG8a8aEoC+1lZ6enjhy5AiSk5Nx/fp1JsuIy9+DTvB0iK4cEROi75YvX46srCxYW1vD2NgYxcXFzE4uEYeRkRHy8vJgbW0NoOYGrimdqtLrN9F1u3btQkJCAh49egRHR0dcuXIF77zzTpNc4NnY2ODAgQMoLS0FALRu3ZrT42ne8D+EOM3UpQ7VfE8jdYEQWUa0wNMhunZETIi+kkgkeOutt1BQUIBnz54BAKcW20R4QUFB8PPzY1J8UlNTm9Sim16/ia47cOAADh48CD8/P2zfvh3Z2dn46quvxA5LLUeOHMHw4cPRpk0bAMDTp09x/vx5jB8/ntXjad7wP0xNTbF48WJez6ErzVT0pbayf//+cHNzg0wmw8qVK/Hs2TPOA89pgUcIaXbS09OxdOlSFBQUwMDAAFVVVbCwsKBB5yIaPnw4du/ezRTHz5w5E126dBE5KkL0R4sWLWBqagq5XA6FQoHu3bvjzp07Yoellh07dqicPFpYWGDHjh2sF3g0b/gffE4zw8LCIJVK4e3tDYlEUufziYmJgsfbEH2prRQiy4gWeISQZkcqleI///kPQkJCcPjwYSQmJuLevXtih9Xs2drawtbWVuwwCNFLrVq1QlVVFezt7SGVSvHaa69BLpeLHZZg6lu0vYyjoyNiYmJU5g07OjpqMDrdxec0MzAwEAB0pgO1EKeRukCILCNu532EEKInbG1tUV1dDYlEgokTJyItLU3skJq1gQMHwtnZuc5/hBBhLF++HFVVVVi6dCmKiopw+fJlrF+/Xuyw1GJlZYUffviB+fj777+HpaUl68dHRESgtLQUnp6e8PLyQllZGSIiIjQRqs7jc5qpTH/s379/vf8paesULSYmBk+fPmU+LiwsxOrVq7XytYWUnp6OoUOHYujQoRg9ejTee+89eHt7c3oOOsEjhDQ7RkY1L30dOnTAmTNn0LlzZxQVFYkcVfNWu0i/oqICx44dY/6dCCH8de/eHUDNKUdTvOmtLSIiAnPnzoVUKgUAGBoaIjY2lvXjad7wP7RxmvnXX38J+nwvoy+1lUJkGdG7JyGk2Zk6dSqKiooQHByM0NBQFBcXN9vdW13xYpF+cHAwfH19MW/ePJEiIkQ/NHZK98knn2gpEuHY2dnhxIkTyMnJAVCTkVG7y2BWVhbs7e3rPI7mVdYVERGB1atXw9PTExKJBMOGDRP8/bC++jxN0KfayhezjLy8vBASEsL68bTAI4Q0Gzt27MBHH32E1157DW3atEGvXr3w448/ih0WqUdeXh4KCgrEDoOQJs/U1FTsEDTC0NAQXbt2rfdz4eHhOHz4cJ3ra9eubXRe5bp165rVvEp9Os3Ul9pKIbKMaIFHCGk2jh07ho8++ggxMTH1vvkT8QwcOJDZ5ZXL5aiurm6WM6kIEVpQUBCr/y82NrZJdhysz8sWcDSv8h/6eJqpjdNIbRAiy0iiaGgbgxBC9MjkyZNhYWGB3377rd43rU2bNokQFQGA/Px85s9GRkZo165dkxp0TkhTN2HCBL3Z+NKnv4umeHh4NHqa6efnJ8hp5pw5c/D111/zfh59p8wy+vXXX/H222/zei46wSOENBtxcXH45ZdfcP36dQwbNkzscMj/yGQyBAUF0Q0ZISKi/f7mRejTzLS0NGaOqYuLCwYNGsR8TtOLO305jRQyy4gWeISQZsPCwgJubm6wtLTEgAEDxA6H/I+hoSFMTU1RUVEBExMTscMhpFnSViMMbaDFauOysrIEe674+HgcOXIEY8eOBVBTx3j9+nVMnz5dsK/REH2prTQxMcHs2bORn5+P4ODgOp/nkmVECzxCSLOh3MFraHHXFHb59JGtrS38/f0xatQolaYQ/v7+IkZFCNFF9+/fR8eOHV/6eXrd0K7k5GTs378fZmZmAICAgAD4+flpbYGnL7WVQmYZ0QKPENJs6Msunz6SyWTo1q0bbt++LXYohDRLTenUy8fHB3369MEHH3xQ74bcxIkTRYiqeVMu7l78szYIeRopJiGzjKjJCiGk2bC3t2d2815Ue5fvwoULIkTXvJWUlNS5KajvGiFEPc+fP69zrVWrVsyfnzx5gldffVWbIamtsrISJ06cwL59+1BcXAx/f394eHjQ64VIwsPDAfyzsE5MTIRCodCb8QvaImQtIS3wCCGEiK6+rnfUCY8Q4Sg3uGozMjJCr169sGrVKrzxxhsiRcbPb7/9hkWLFuHZs2eYMGEC5s6dC0tLS7HDalbKysoQGxvLNFl59913MXfuXL2dwagpQnY2pRRNQgghoqmurkZVVRXkcjnKy8uZN7bi4uJ6TxwIIeoJCQmBiYkJfHx8oFAocPjwYRQWFsLa2hrLly/H7t27xQ6Rk/z8fOzfvx8pKSlwdnbGxIkTcfHiRUyfPp3S7LVIJpPhs88+Q0xMjNihNHlC1hLSAo8QQoho4uLisGXLFkgkEjg5OTHXzczMMG3aNBEjI0S/fP/990hKSmI+njp1Kry8vJCUlISdO3eKGBl3s2bNwo0bNzB58mQkJSWhbdu2AIC+ffvixIkTIkfXvBgaGuL69etih6EXhKwlpAUeIYQQ0QQFBSEoKAjR0dFYtmyZ2OEQoreeP3+OvLw8WFtbAwDy8vJQVlYGoOYmvSmZMGECXF1d6407JSVFhIiat4EDByI6Ohqenp4qaZldu3YVMarmjWrwCCGEiK6kpASmpqYwMDBAdnY2bty4AVdXV7Ro0ULs0AjRC99//z2WLVsGBwcHKBQK/Pe//8XKlSsxaNAg7N69G7NnzxY7RFYUCgXGjh1LJ3U6ZMSIEXWuSSQS/PTTTyJEQwBa4BFCCNEBXl5e+O6771BaWgovLy90794dVlZWWLt2rdihEaI3Hj9+jD///BMA0Lt37ybbjGT69OnYuHEj2rRpI3YohOgkStEkhBAiOoVCAVNTUxw/fhy+vr6YP38+3N3dxQ6LEL3Srl07DBo0CDKZDEBN2mbtUQlNhZmZGSZMmIAhQ4aopAR+8sknIkbVfN28ebPONXNzc3To0EGEaAhACzxCCCE6oKKiApWVlfj5558xZcoUAICBgYHIURGiP3744QfExMTg0aNHAGo2VSQSCa5duyZyZNx169YN3bp1EzsM8rv5LnYAAA1ISURBVD8zZ87E33//DXNzcwA1XZAtLS3RokULbNy4UaWBFtEOWuARQggRnZubG1xcXNClSxf07dsXjx49gomJidhhEaI3pFIpvvjiCzg5OTX5zZMxY8bAzs5O5dqtW7dEioa89957GDBgAEaOHAkAOH36NC5evAhXV1esXr0aBw8eFDnC5qdp/4YTQgjRC0FBQTh9+jQOHDgAAwMDmJqaYvPmzWKHRYjeaNOmDfr27dvkF3cAsHjxYlbXiHZcunSJWdwBwMiRI3H58mUMGDAA5eXlIkbWfNEJHiGEEJ1QVFSEzMxMpj4IANVwECIQV1dX7N27F25ubiqn402pBu/Jkyd48uQJKioqcOvWLWYgdHFxMTPygWifXC7Hb7/9hr59+wIAfv/9d8jlcgCUai8W6qJJCCFEdBs2bMDBgwdhZ2fH3BBIJBLs2rVL5MgI0Q/29vbMnyUSSZOswfv222/x7bff4uHDh2jfvj1z3dzcHFOmTMHEiRNFjK75unLlCkJDQ9GyZUsAQHl5OTZs2IC33noLP/zwAyZMmCByhM0PLfAIIYSIztXVFYcPH4aZmZnYoRBCdFxcXFyTmdvXXFRWViInJwcAYGtrSzNMRUbnpoQQQkRnZWVFiztCCCujRo1CRUUFACAtLQ3btm1DUVGRyFE1by1atEC7du1gbm6Ox48f46+//hI7pGaNTvAIIYSIbv369bh//z5Gjx6tUh80dOhQEaMipOkLDAzEt99+i4EDB0IikTDXlSma6enpIkanHg8PDyQmJuL+/fsIDAyEi4sLHj16hLi4OLFDa5bS09OxdOlSFBQUwMDAAFVVVbCwsGiSP1v6gpqsEEIIEV1mZiYAYPfu3cw1iURCCzxCeJJKpQCAQ4cOiRyJcAwMDGBsbIzU1FT4+flhxowZ8PDwEDusZksqleI///kPQkJCcPjwYSQmJuLevXtih9Ws0QKPEEKI6Gov7AghwlE2I+ncubPIkQinoqICjx8/xtmzZ7Fw4UIAACWkicvW1hbV1dWQSCSYOHEivLy8EBISInZYzRYt8AghhOiEtLQ0/PLLLwCAQYMGwcXFReSICNEfv/32G6RSKfLy8iCTyZp0imZgYCBGjx4NZ2dnODo6Ii8vD+bm5mKH1WwZGdUsJzp06IAzZ86gc+fOVBMpMqrBI4QQIrr4+HgcOXIEY8eOBQCcOHECnp6emD59usiREaIfxowZg7lz58LJyUllNpk+nOzJ5XJUV1dT50aRpKSkYPDgwbh79y5CQ0NRXFyMiIgIjB8/XuzQmi1a4BFCCBGdu7s79u3bx3TSLCkpgZ+fH44dOyZyZITohwkTJuDw4cNihyGIPXv21Hvd399fy5EQoptoTAIhhBCdUHtMAo1MIERYQ4YMQWpqqthhCOLq1avMf7/++itiY2Px888/ix1Ws8MmvbcppgDrAzrBI4QQIrrw8HAAwMSJEwEAiYmJUCgUWLNmjZhhEaI3Bg4ciKdPn6J169Zo0aJFk67Be9HDhw8RHR2NLVu2iB1Ks+Lh4YGEhIQGG9z4+fnhyJEjWoyKALTAI4QQogPKysoQGxvLNFl59913MXfuXJiamoocGSH6IT8/v97r+lCDBwDjxo1DSkqK2GE0K/b29pBIJPUu8JTX27VrhwsXLogQXfNGCzxCCCGEENJk1K7BUygUyMzMxN9//41du3aJGBUhuoPGJBBCCBFdTEwMgoKCYGFhAQAoLCxEbGwsIiMjRY6MkKYtLCwMUqkU3t7ekEgkdT6fmJgoQlT8XL16lfmzoaEh7OzsmDRvQggt8AghhOiAK1euMIs7AGjbti0uX74sYkSE6IfAwEAAwJIlS0SORDhUm0tIw2iBRwghRHQymazOterqahEiIUS/ODg4AAD69+8vciT8rV+/vsHPf/LJJ1qKhBDdRgs8QgghonN0dERMTAxmzJgBhUKB+Ph4ODo6ih0WIU3ey1IzlZpSiqay6VJubi4uX74MV1dXAMDp06fxzjvviBkaITqFmqwQQggRXUlJCVavXo1z585BIpFg2LBhCA8Ph7m5udihEdKkXbp0CQBw7tw53L59Gz4+PgCApKQk2NraIiwsTMzw1DJ16lRs2rQJbdu2BVBTsxscHExNVgj5HzrBI4QQIjozMzOqqyFEA5SpmVKpFAcOHGBO84YPH47JkyeLGZraHj9+zCzugJqa3cePH4sYESG6xUDsAAghhDRfbIYs68MgZkLEVlRUhIqKCubjyspKFBUViRiR+rp27YrIyEj8/vvv+P333xEVFYWuXbuKHRYhOoNSNAkhhIjGw8MDCQkJ9Q7KVfLz88ORI0e0GBUh+ufzzz/HuXPn4ObmBgA4efIkhg0bhoULF4ocGXclJSX46quvkJGRAQAYMGAA5s2bBzMzM5EjI0Q30AKPEEKIaOzt7SGRSOpd4Cmvt2vXDhcuXBAhOkL0y9mzZ5lF0cCBAzFs2DBxAyKEaAQt8AghhBBCmrm5c+ciNjZW7DBYqaiowNGjR5GXl6cyToXGJBBSg5qsEEIIIYQ0c3/99ZfYIbAWHByMqqoq9OrVCy1atBA7HEJ0Di3wCCGEEEKauYZm5emau3fv4uTJk2KHQYjOoi6ahBBCCCGkybC2tkZJSYnYYRCis+gEjxBCCCGENBnm5ubw9vbG4MGDVVI0qQaPkBq0wCOEEEIIaeY6duwodgis2drawtbWVuwwCNFZ1EWTEEIIIaQZyM3NRW5uLmQyGXNt6NChIkZECNEEOsEjhBBCCNFzGzZswMGDB2FnZwcDg5oWDBKJpEkt8E6ePIkxY8Zgz5499X7e399fyxERoptogUcIIYQQoudOnTqF06dPw8zMTOxQ1Hbjxg2MGTMGV69eFTsUQnQapWgSQgghhOi5Dz74AHv37hU7DEKIFtACjxBCCCFEz61fvx7379/H6NGjYWJiwlxvSima6enpcHZ25v3/EKLvaIFHCCGEEKLnAgIC6lyTSCTYtWuXCNGox8PDAwkJCWjo1tXPzw9HjhzRYlSE6B5a4BFCCCGEEJ1nb28PiURS7wJPeb1du3a4cOGCCNERojtogUcIIYQQoucUCgUSExNx9+5dLF68GPfu3cPDhw/Rt29fsUMjhAjMQOwACCGEEEKIZq1ZswYXL17E6dOnAQCtW7fGZ599JnJUhBBNoAUeIYQQQoiey8jIwL///W+0bNkSANC2bVtUVFSIHBUhRBNogUcIIYQQoudMTEwgkUiYj+VyuYjREEI0iQadE0IIIYToue7du+Po0aNQKBS4d+8etm3bhrffflvssAghGkBNVgghhBBC9FxJSQnWrl2LM2fOAABGjBiB8PBwtG7dWuTICCFCowUeIYQQQgghhOgJStEkhBBCCGkG0tPTkZubi+rqauaav7+/iBERQjSBFniEEEIIIXpu6dKluHr1Knr06AFDQ0OxwyGEaBAt8AghhBBC9Nzvv/+OlJQUGBsbix0KIUTDaEwCIYQQQoie69ixo9ghEEK0hJqsEEIIIYToqT179gAAsrOzcfPmTYwcORItWrRgPk81eIToH0rRJIQQQgjRU1evXmX+bGNjg+zsbBGjIYRoA53gEUIIIYQQQoieoBo8QgghhBA9t23bNjx9+pT5uLCwEPHx8SJGRAjRFFrgEUIIIYTouePHj8PCwoL5uG3btkhJSRExIkKIptACjxBCCCFEz9VXkSOTyUSIhBCiabTAI4QQQgjRc6+//jp27twJhUIBuVyOHTt2wMbGRuywCCEaQE1WCCGEEEL03IMHDxAWFobff/8dEokEffr0wfr169GhQwexQyOECIwWeIQQQgghzURZWRkAwNTUVORICCGaQimahBBCCCF6zs/PD0DNwk65uFNeI4ToF1rgEUIIIYToufLycpWPZTIZioqKRIqGEKJJRmIHQAghhBBCNCM+Ph7x8fEoKSmBs7Mzc728vBzu7u4iRkYI0RSqwSOEEEII0VPFxcUoKirCqlWrsGzZMua6mZkZ2rRpI2JkhBBNoQUeIYQQQgghhOgJStEkhBBCCNFTYWFhkEql8Pb2hkQiqfP5xMREEaIihGgSneARQgghhOipq1evwsHBAZcuXar38/3799dyRIQQTaMTPEIIIYQQPeXg4AAA+P/27hBHYSiKAuhjC4QlENAk7IYdYFEEhwKNYAUkeNZAEN8RDGsATVGAm4TMjKNp5s05ScVrK669yX9tu92Obrf79my/3zcRCaiZ3yQAACQ3mUzicrl8zaWUmM/nDSYC6qLgAQAkN51OYzwex+12i+PxGLPZLNbrddOxgBrYwQMA+Ad2u11st9u4Xq+xWq2i1+s1HQmogR08AICkNpvN21xVVQyHwyilRCklRqNRQ8mAuih4AABJnU6nt7nf78fj8fh2H8jDEU0AAIAkfGQFACCpw+HwkXeAv0PBAwBIarFYxP1+j6qqfr2Wy2XTMYEPsoMHAJDU+XyOwWAQP23ktFqteD6f0el0GkgG1MUOHgAAQBKOaAIAACSh4AEAACSh4AEAACSh4AEAACSh4AEAACTxAvsU5/J7u2CVAAAAAElFTkSuQmCC\n",
875 | "text/plain": [
876 | ""
877 | ]
878 | },
879 | "metadata": {
880 | "tags": []
881 | }
882 | }
883 | ]
884 | },
885 | {
886 | "cell_type": "markdown",
887 | "metadata": {
888 | "id": "aDSZJBjJT3Iw",
889 | "colab_type": "text"
890 | },
891 | "source": [
892 | "**Insight 1:** The most common itemsets consist of a single item.\n",
893 | "\n",
894 | "**Insight 2:** There's a long tail of categories that consist of infrequently purchased items."
895 | ]
896 | },
897 | {
898 | "cell_type": "markdown",
899 | "metadata": {
900 | "id": "ApMsvYgwHqIl",
901 | "colab_type": "text"
902 | },
903 | "source": [
904 | "**Use `.tolist()` to transform a `DataFrame` or `Series` object into a list.**"
905 | ]
906 | },
907 | {
908 | "cell_type": "code",
909 | "metadata": {
910 | "id": "nrBBAg9kf5R1",
911 | "colab_type": "code",
912 | "colab": {}
913 | },
914 | "source": [
915 | "# Convert the pandas series to list of lists.\n"
916 | ],
917 | "execution_count": null,
918 | "outputs": []
919 | },
920 | {
921 | "cell_type": "markdown",
922 | "metadata": {
923 | "id": "J_JdOGzOVUed",
924 | "colab_type": "text"
925 | },
926 | "source": [
927 | "### **Summarize final transaction data**"
928 | ]
929 | },
930 | {
931 | "cell_type": "code",
932 | "metadata": {
933 | "id": "NXo1XlNh2nvV",
934 | "colab_type": "code",
935 | "colab": {}
936 | },
937 | "source": [
938 | "# Print length of transactions.\n"
939 | ],
940 | "execution_count": null,
941 | "outputs": []
942 | },
943 | {
944 | "cell_type": "code",
945 | "metadata": {
946 | "id": "KHWb2YGe2n__",
947 | "colab_type": "code",
948 | "colab": {}
949 | },
950 | "source": [
951 | "# Count number of unique item categories for each transaction.\n"
952 | ],
953 | "execution_count": null,
954 | "outputs": []
955 | },
956 | {
957 | "cell_type": "code",
958 | "metadata": {
959 | "id": "5dcX5qwN2njx",
960 | "colab_type": "code",
961 | "colab": {}
962 | },
963 | "source": [
964 | "# Print median number of items in a transaction.\n"
965 | ],
966 | "execution_count": null,
967 | "outputs": []
968 | },
969 | {
970 | "cell_type": "code",
971 | "metadata": {
972 | "id": "bZm2vOczf7mB",
973 | "colab_type": "code",
974 | "colab": {}
975 | },
976 | "source": [
977 | "# Print maximum number of items in a transaction.\n"
978 | ],
979 | "execution_count": null,
980 | "outputs": []
981 | },
982 | {
983 | "cell_type": "markdown",
984 | "metadata": {
985 | "id": "xLOYfyVps4Uu",
986 | "colab_type": "text"
987 | },
988 | "source": [
989 | "---\n",
990 | " Q&A 2 \n",
991 | "\n",
992 | "---"
993 | ]
994 | },
995 | {
996 | "cell_type": "markdown",
997 | "metadata": {
998 | "id": "tXqmKHdXiCt6",
999 | "colab_type": "text"
1000 | },
1001 | "source": [
1002 | "## **Association Rules and Metrics**"
1003 | ]
1004 | },
1005 | {
1006 | "cell_type": "markdown",
1007 | "metadata": {
1008 | "id": "RQnsrXg7aKgS",
1009 | "colab_type": "text"
1010 | },
1011 | "source": [
1012 | "**Association rule:** an \"if-then\" relationship between two itemsets.\n",
1013 | " * **rule:** if *{coffee)* then *{milk}*.\n",
1014 | " * **antecedent:** coffee\n",
1015 | " * **consequent:** milk\n",
1016 | "\n",
1017 | "**Metric:** a measure of the strength of association between two itemsets.\n",
1018 | " * **rule:** if *{coffee)* then *{milk}*\n",
1019 | " * **support:** 0.10\n",
1020 | " * **leverage:** 0.03\n",
1021 | "\n"
1022 | ]
1023 | },
1024 | {
1025 | "cell_type": "markdown",
1026 | "metadata": {
1027 | "id": "QbFpAuLocyqt",
1028 | "colab_type": "text"
1029 | },
1030 | "source": [
1031 | "### **One-hot encode the transaction data**"
1032 | ]
1033 | },
1034 | {
1035 | "cell_type": "markdown",
1036 | "metadata": {
1037 | "id": "jT0FHyUfIDNC",
1038 | "colab_type": "text"
1039 | },
1040 | "source": [
1041 | "* **One-hot encoding data.**\n",
1042 | " * `TransactionEncoder()` instantiates an encoder object.\n",
1043 | " * `.fit()` creates mapping between list and one-hot encoding.\n",
1044 | " * `.transform()` transforms list into one-hot encoded array."
1045 | ]
1046 | },
1047 | {
1048 | "cell_type": "markdown",
1049 | "metadata": {
1050 | "id": "3Y65e_9jzBUw",
1051 | "colab_type": "text"
1052 | },
1053 | "source": [
1054 | "* **Applying one-hot encoding will transform the list of lists (of transactions) into a `DataFrame`.**\n",
1055 | " * The columns correspond to item categories and the rows correspond to transactions. A true indicates that a transaction contains an item from the corresponding category.\n",
1056 | "* **One-hot encoding simplifies the computation of metrics.**\n",
1057 | " * We will also use a one-hot encoded `DataFrame` as an input to different `mlxtend` functions."
1058 | ]
1059 | },
1060 | {
1061 | "cell_type": "code",
1062 | "metadata": {
1063 | "id": "PADu6cwylDWC",
1064 | "colab_type": "code",
1065 | "colab": {}
1066 | },
1067 | "source": [
1068 | "from mlxtend.preprocessing import TransactionEncoder\n",
1069 | "\n",
1070 | "# Instantiate an encoder.\n",
1071 | "\n",
1072 | "\n",
1073 | "# Fit encoder to list of lists.\n",
1074 | "\n",
1075 | "\n",
1076 | "# Transform lists into one-hot encoded array.\n",
1077 | "\n",
1078 | "\n",
1079 | "# Convert array to pandas DataFrame.\n"
1080 | ],
1081 | "execution_count": null,
1082 | "outputs": []
1083 | },
1084 | {
1085 | "cell_type": "code",
1086 | "metadata": {
1087 | "id": "uXvgq0wclEZ_",
1088 | "colab_type": "code",
1089 | "colab": {}
1090 | },
1091 | "source": [
1092 | "# Print header.\n"
1093 | ],
1094 | "execution_count": null,
1095 | "outputs": []
1096 | },
1097 | {
1098 | "cell_type": "markdown",
1099 | "metadata": {
1100 | "id": "QcQf1RW7ffzc",
1101 | "colab_type": "text"
1102 | },
1103 | "source": [
1104 | "\n",
1105 | "### **Compute the support metric**\n",
1106 | "\n",
1107 | "* Support measures the frequency with which an itemset appears in a database of transactions."
1108 | ]
1109 | },
1110 | {
1111 | "cell_type": "markdown",
1112 | "metadata": {
1113 | "id": "mwjsbXSKByym",
1114 | "colab_type": "text"
1115 | },
1116 | "source": [
1117 | "\n",
1118 | "$$support(X) = \\frac{\\text{number of transactions containing X}}{\\text{total number of transactions}}$$"
1119 | ]
1120 | },
1121 | {
1122 | "cell_type": "markdown",
1123 | "metadata": {
1124 | "id": "rdoVfdc_H8KU",
1125 | "colab_type": "text"
1126 | },
1127 | "source": [
1128 | "* `.mean(axis=0)` computes support values for one-hot encoded `DataFrame`. \n",
1129 | "* A high support value indicates that items in an itemset are purchased together frequently and, thus, are associated with each other."
1130 | ]
1131 | },
1132 | {
1133 | "cell_type": "code",
1134 | "metadata": {
1135 | "id": "n3E8jFSelMRj",
1136 | "colab_type": "code",
1137 | "colab": {}
1138 | },
1139 | "source": [
1140 | "# Print support metric over all rows for each column.\n"
1141 | ],
1142 | "execution_count": null,
1143 | "outputs": []
1144 | },
1145 | {
1146 | "cell_type": "markdown",
1147 | "metadata": {
1148 | "id": "k4xq0z7IdwmS",
1149 | "colab_type": "text"
1150 | },
1151 | "source": [
1152 | "**Observation:** In retail and ecommerce settings, any particular item is likely to account for a small share of transactions. Here, we've aggregated up to the product category level and very popular categories are still only present in 5% of transactions. Consequently, itemsets with 2 or more item categories will account for a vanishingly small share of total transactions (e.g. 0.01%)."
1153 | ]
1154 | },
1155 | {
1156 | "cell_type": "markdown",
1157 | "metadata": {
1158 | "id": "7NNdtDOXiC8z",
1159 | "colab_type": "text"
1160 | },
1161 | "source": [
1162 | "### **Compute the item count distribution over transactions**"
1163 | ]
1164 | },
1165 | {
1166 | "cell_type": "markdown",
1167 | "metadata": {
1168 | "id": "Aey6WvpMM_26",
1169 | "colab_type": "text"
1170 | },
1171 | "source": [
1172 | "* `onehot.sum(axis=1)` sums across the columns in a `DataFrame`. "
1173 | ]
1174 | },
1175 | {
1176 | "cell_type": "code",
1177 | "metadata": {
1178 | "id": "q87IRIx0lR9U",
1179 | "colab_type": "code",
1180 | "colab": {}
1181 | },
1182 | "source": [
1183 | "# Print distribution of item counts.\n"
1184 | ],
1185 | "execution_count": null,
1186 | "outputs": []
1187 | },
1188 | {
1189 | "cell_type": "markdown",
1190 | "metadata": {
1191 | "id": "fWmrboxOhnr4",
1192 | "colab_type": "text"
1193 | },
1194 | "source": [
1195 | "**Insight:** Only 726 transactions contain more than one item category. We may want to consider whether aggregation discards too many multi-item itemsets."
1196 | ]
1197 | },
1198 | {
1199 | "cell_type": "markdown",
1200 | "metadata": {
1201 | "id": "fj7yQ2DqiQkh",
1202 | "colab_type": "text"
1203 | },
1204 | "source": [
1205 | "### **Create a column for an itemset with multiple items**"
1206 | ]
1207 | },
1208 | {
1209 | "cell_type": "markdown",
1210 | "metadata": {
1211 | "id": "3ue1byfs4ejs",
1212 | "colab_type": "text"
1213 | },
1214 | "source": [
1215 | "* **We can create multi-item columns using the logical AND operation.**\n",
1216 | " * `True & True = True`\n",
1217 | " * `True & False = False`\n",
1218 | " * `False & True = False`\n",
1219 | " * `False & False = False`"
1220 | ]
1221 | },
1222 | {
1223 | "cell_type": "code",
1224 | "metadata": {
1225 | "id": "immnq5stlWaf",
1226 | "colab_type": "code",
1227 | "colab": {}
1228 | },
1229 | "source": [
1230 | "# Add sports_leisure and health_beauty to DataFrame.\n",
1231 | "\n",
1232 | "\n",
1233 | "# Print support value.\n"
1234 | ],
1235 | "execution_count": null,
1236 | "outputs": []
1237 | },
1238 | {
1239 | "cell_type": "markdown",
1240 | "metadata": {
1241 | "id": "VHlEhjUuikdj",
1242 | "colab_type": "text"
1243 | },
1244 | "source": [
1245 | "**Insight:** Only 0.014% of transactions contain a product from both the sports and leisure, and health and beauty categories. These are typically the type of numbers we will work with when we set pruning thresholds in the following section."
1246 | ]
1247 | },
1248 | {
1249 | "cell_type": "markdown",
1250 | "metadata": {
1251 | "id": "BvoKwShnjC4z",
1252 | "colab_type": "text"
1253 | },
1254 | "source": [
1255 | "### **Aggregate the dataset further by combining product sub-categories**"
1256 | ]
1257 | },
1258 | {
1259 | "cell_type": "markdown",
1260 | "metadata": {
1261 | "id": "vHIEvm0zjLk7",
1262 | "colab_type": "text"
1263 | },
1264 | "source": [
1265 | "* **We can use the inclusive OR operation to combine multiple categories.**\n",
1266 | " * `True | True = True`\n",
1267 | " * `True | False = True`\n",
1268 | " * `False | True = True`\n",
1269 | " * `False | False = False`"
1270 | ]
1271 | },
1272 | {
1273 | "cell_type": "code",
1274 | "metadata": {
1275 | "id": "qLGroyNZlX1U",
1276 | "colab_type": "code",
1277 | "colab": {}
1278 | },
1279 | "source": [
1280 | "# Merge books_imported and books_technical.\n",
1281 | "\n",
1282 | "\n",
1283 | "# Print support values for books, books_imported, and books_technical.\n"
1284 | ],
1285 | "execution_count": null,
1286 | "outputs": []
1287 | },
1288 | {
1289 | "cell_type": "markdown",
1290 | "metadata": {
1291 | "id": "9E2CHkMfqHx8",
1292 | "colab_type": "text"
1293 | },
1294 | "source": [
1295 | "### **Compute the confidence metric**"
1296 | ]
1297 | },
1298 | {
1299 | "cell_type": "markdown",
1300 | "metadata": {
1301 | "id": "vcPL0Iy3rY2m",
1302 | "colab_type": "text"
1303 | },
1304 | "source": [
1305 | "* **The support metric doesn't provide information about direction.**\n",
1306 | " * $support(antecedent, consequent) = support(consequent, antecedent)$\n",
1307 | "\n",
1308 | "* **The confidence metric has a direction.**\n",
1309 | " * Conditional probability of the consequent, given the antecedent."
1310 | ]
1311 | },
1312 | {
1313 | "cell_type": "markdown",
1314 | "metadata": {
1315 | "id": "C2JLWdbnr8Nl",
1316 | "colab_type": "text"
1317 | },
1318 | "source": [
1319 | "$$confidence(antecedent \\rightarrow consequent)= \\frac{support(antecedent, consequent)}{support(antecedent)}$$"
1320 | ]
1321 | },
1322 | {
1323 | "cell_type": "markdown",
1324 | "metadata": {
1325 | "id": "RC3Zc1uWHsm3",
1326 | "colab_type": "text"
1327 | },
1328 | "source": [
1329 | "* A high value of confidence indicates that the antecedent and consequent are associated and that the direction of the association runs from the antecedent to the consequent."
1330 | ]
1331 | },
1332 | {
1333 | "cell_type": "code",
1334 | "metadata": {
1335 | "id": "US-Z5hs7qGFl",
1336 | "colab_type": "code",
1337 | "colab": {}
1338 | },
1339 | "source": [
1340 | "# Compute joint support for sports_leisure and health_beauty.\n",
1341 | "\n",
1342 | "\n",
1343 | "# Print confidence metric for sports_leisure -> health_beauty.\n"
1344 | ],
1345 | "execution_count": null,
1346 | "outputs": []
1347 | },
1348 | {
1349 | "cell_type": "code",
1350 | "metadata": {
1351 | "id": "oRacycCMtKeh",
1352 | "colab_type": "code",
1353 | "colab": {}
1354 | },
1355 | "source": [
1356 | "# Print confidence for health_beauty -> sports_leisure.\n"
1357 | ],
1358 | "execution_count": null,
1359 | "outputs": []
1360 | },
1361 | {
1362 | "cell_type": "markdown",
1363 | "metadata": {
1364 | "id": "QC_SuQBMtRsa",
1365 | "colab_type": "text"
1366 | },
1367 | "source": [
1368 | "**Insight:** $confidence(sports\\_leisure \\rightarrow health\\_beauty)$ was higher than $confidence(health\\_beauty \\rightarrow sports\\_leisure)$. Since the two have the same joint support, the confidence measures will differ only by the antecedent support. The higher confidence metric means that the antecedent has *lower* support."
1369 | ]
1370 | },
1371 | {
1372 | "cell_type": "markdown",
1373 | "metadata": {
1374 | "id": "iKm1vKDFldpt",
1375 | "colab_type": "text"
1376 | },
1377 | "source": [
1378 | "---\n",
1379 | " Q&A 3 \n",
1380 | "\n",
1381 | "---"
1382 | ]
1383 | },
1384 | {
1385 | "cell_type": "markdown",
1386 | "metadata": {
1387 | "id": "kXwJcMyViCcW",
1388 | "colab_type": "text"
1389 | },
1390 | "source": [
1391 | "## **The Apriori Algorithm and Pruning**"
1392 | ]
1393 | },
1394 | {
1395 | "cell_type": "markdown",
1396 | "metadata": {
1397 | "id": "h7JGKJX3wsYK",
1398 | "colab_type": "text"
1399 | },
1400 | "source": [
1401 | "**The Apriori algorithm** identifies frequent (high support) itemsets using something called the Apriori principle, which states that a superset that contains an infrequent item is also infrequent."
1402 | ]
1403 | },
1404 | {
1405 | "cell_type": "markdown",
1406 | "metadata": {
1407 | "id": "Xru6-VBAwZz9",
1408 | "colab_type": "text"
1409 | },
1410 | "source": [
1411 | ""
1412 | ]
1413 | },
1414 | {
1415 | "cell_type": "markdown",
1416 | "metadata": {
1417 | "id": "-tgWgdJozS3g",
1418 | "colab_type": "text"
1419 | },
1420 | "source": [
1421 | "**Pruning** is the process of removing itemsets or association rules, typically based on the application of a metric threshold. "
1422 | ]
1423 | },
1424 | {
1425 | "cell_type": "markdown",
1426 | "metadata": {
1427 | "id": "O-nGUl2Cx951",
1428 | "colab_type": "text"
1429 | },
1430 | "source": [
1431 | "**The `mlxtend` module will enable us to apply the Apriori algorithm, perform pruning, and compute association rules.**"
1432 | ]
1433 | },
1434 | {
1435 | "cell_type": "markdown",
1436 | "metadata": {
1437 | "id": "RPqHxNBczJFD",
1438 | "colab_type": "text"
1439 | },
1440 | "source": [
1441 | "### **Applying the Apriori algorithm**"
1442 | ]
1443 | },
1444 | {
1445 | "cell_type": "markdown",
1446 | "metadata": {
1447 | "id": "_9_EnUE5NSYC",
1448 | "colab_type": "text"
1449 | },
1450 | "source": [
1451 | "* Use `apriori()` to identify frequent itemsets.\n",
1452 | "* `min_support` set the item frequency threshold used for pruning."
1453 | ]
1454 | },
1455 | {
1456 | "cell_type": "code",
1457 | "metadata": {
1458 | "id": "oTdaZ39VljgV",
1459 | "colab_type": "code",
1460 | "colab": {}
1461 | },
1462 | "source": [
1463 | "from mlxtend.frequent_patterns import apriori\n",
1464 | "\n",
1465 | "# Apply apriori algorithm to data with min support threshold of 0.01.\n",
1466 | "\n",
1467 | "\n",
1468 | "# Print frequent itemsets.\n"
1469 | ],
1470 | "execution_count": null,
1471 | "outputs": []
1472 | },
1473 | {
1474 | "cell_type": "markdown",
1475 | "metadata": {
1476 | "id": "iQ3gYEK2yPCi",
1477 | "colab_type": "text"
1478 | },
1479 | "source": [
1480 | "**Observation 1:** `apriori` returns a `DataFrame` with a `support` column and an `itemsets` column.\n",
1481 | "\n",
1482 | "**Observation 2:** By default `apriori` returns itemset numbers, rather than labels. We can change this by using the `use_colnames` parameter.\n",
1483 | "\n",
1484 | "**Insight:** All itemsets with a support of greater than 0.01 contain a single item."
1485 | ]
1486 | },
1487 | {
1488 | "cell_type": "markdown",
1489 | "metadata": {
1490 | "id": "aOawxLPlN0O3",
1491 | "colab_type": "text"
1492 | },
1493 | "source": [
1494 | "* Use `use_colnames` to use item names, rather than integer IDs."
1495 | ]
1496 | },
1497 | {
1498 | "cell_type": "code",
1499 | "metadata": {
1500 | "id": "L_MrF6Ckllde",
1501 | "colab_type": "code",
1502 | "colab": {}
1503 | },
1504 | "source": [
1505 | "# Apply apriori algorithm to data with min support threshold of 0.001.\n",
1506 | "\n",
1507 | "\n",
1508 | "# Print frequent itemsets.\n"
1509 | ],
1510 | "execution_count": null,
1511 | "outputs": []
1512 | },
1513 | {
1514 | "cell_type": "markdown",
1515 | "metadata": {
1516 | "id": "jHkW8KmCyp0h",
1517 | "colab_type": "text"
1518 | },
1519 | "source": [
1520 | "**Insight:** Lowering the support threshold increased the number of itemsets returned and even yielded itemsets with more than one item."
1521 | ]
1522 | },
1523 | {
1524 | "cell_type": "code",
1525 | "metadata": {
1526 | "id": "lT7h9l_Glnf6",
1527 | "colab_type": "code",
1528 | "colab": {}
1529 | },
1530 | "source": [
1531 | "# Apply apriori algorithm to data with min support threshold of 0.00005.\n",
1532 | "\n",
1533 | "\n",
1534 | "# Print frequent itemsets.\n"
1535 | ],
1536 | "execution_count": null,
1537 | "outputs": []
1538 | },
1539 | {
1540 | "cell_type": "markdown",
1541 | "metadata": {
1542 | "id": "pHmgv5bqzYmN",
1543 | "colab_type": "text"
1544 | },
1545 | "source": [
1546 | "**Observation:** Notice how low we must set the support threshold (0.005%) to return a high number of itemsets with more than one item."
1547 | ]
1548 | },
1549 | {
1550 | "cell_type": "code",
1551 | "metadata": {
1552 | "id": "j273yq0Alo0H",
1553 | "colab_type": "code",
1554 | "colab": {}
1555 | },
1556 | "source": [
1557 | "# Apply apriori algorithm to data with a two-item limit.\n"
1558 | ],
1559 | "execution_count": null,
1560 | "outputs": []
1561 | },
1562 | {
1563 | "cell_type": "markdown",
1564 | "metadata": {
1565 | "id": "CTo4IKmy0BXr",
1566 | "colab_type": "text"
1567 | },
1568 | "source": [
1569 | "**Insight:** What do we gain from the apriori algorithm? We start off with $2^{71}$ potential itemsets and immediately reduce it to 113 without enumerating all $2^{71}$ itemsets."
1570 | ]
1571 | },
1572 | {
1573 | "cell_type": "markdown",
1574 | "metadata": {
1575 | "id": "kBAjlmz-zuWk",
1576 | "colab_type": "text"
1577 | },
1578 | "source": [
1579 | "### **Computing association rules from Apriori output**"
1580 | ]
1581 | },
1582 | {
1583 | "cell_type": "markdown",
1584 | "metadata": {
1585 | "id": "E74Qv6fTOARv",
1586 | "colab_type": "text"
1587 | },
1588 | "source": [
1589 | "* Use `association_rules()` to compute and prune association rules from output of `apriori()`."
1590 | ]
1591 | },
1592 | {
1593 | "cell_type": "code",
1594 | "metadata": {
1595 | "id": "AF6jhDkmlpM8",
1596 | "colab_type": "code",
1597 | "colab": {}
1598 | },
1599 | "source": [
1600 | "from mlxtend.frequent_patterns import association_rules\n",
1601 | "\n",
1602 | "# Recover association rules using support and a minimum threshold of 0.0001.\n",
1603 | "\n",
1604 | "\n",
1605 | "# Print rules header.\n"
1606 | ],
1607 | "execution_count": null,
1608 | "outputs": []
1609 | },
1610 | {
1611 | "cell_type": "markdown",
1612 | "metadata": {
1613 | "id": "sz3aVycbz6pt",
1614 | "colab_type": "text"
1615 | },
1616 | "source": [
1617 | "**Notice that `association_rules` automatically computes seven metrics.**"
1618 | ]
1619 | },
1620 | {
1621 | "cell_type": "markdown",
1622 | "metadata": {
1623 | "id": "3_rM_sYn0nPa",
1624 | "colab_type": "text"
1625 | },
1626 | "source": [
1627 | "### **Pruning association rules**"
1628 | ]
1629 | },
1630 | {
1631 | "cell_type": "code",
1632 | "metadata": {
1633 | "id": "jejN-n9Blql6",
1634 | "colab_type": "code",
1635 | "colab": {}
1636 | },
1637 | "source": [
1638 | "# Recover association rules using confidence threshold of 0.01.\n",
1639 | "\n",
1640 | "\n",
1641 | "# Print rules.\n"
1642 | ],
1643 | "execution_count": null,
1644 | "outputs": []
1645 | },
1646 | {
1647 | "cell_type": "code",
1648 | "metadata": {
1649 | "id": "_JhzujmIlv7C",
1650 | "colab_type": "code",
1651 | "colab": {}
1652 | },
1653 | "source": [
1654 | "# Select rules with a consequent support above 0.095.\n",
1655 | "\n",
1656 | "\n",
1657 | "# Print rules.\n"
1658 | ],
1659 | "execution_count": null,
1660 | "outputs": []
1661 | },
1662 | {
1663 | "cell_type": "markdown",
1664 | "metadata": {
1665 | "id": "nsSaO4EU2mwX",
1666 | "colab_type": "text"
1667 | },
1668 | "source": [
1669 | "### **The leverage metric**\n",
1670 | "\n",
1671 | "* **Leverage provides a sanity check.**\n",
1672 | " * $support(antecedent, consequent)$ = joint support in data.\n",
1673 | " * $support(antecedent) * support(consequent)$ = expected joint support for unrelated antecedent and consequent."
1674 | ]
1675 | },
1676 | {
1677 | "cell_type": "markdown",
1678 | "metadata": {
1679 | "id": "mfYjXEBTIqj7",
1680 | "colab_type": "text"
1681 | },
1682 | "source": [
1683 | "* **Leverage formula**\n",
1684 | " * $$leverage(antecendent, consequent) = \n",
1685 | "support(antecedent, consequent) - support(antecedent) * support(consequent)$$"
1686 | ]
1687 | },
1688 | {
1689 | "cell_type": "markdown",
1690 | "metadata": {
1691 | "id": "b9AxLt1rIqQU",
1692 | "colab_type": "text"
1693 | },
1694 | "source": [
1695 | "* **For most problems, we will discard itemsets with negative leverage.**\n",
1696 | " * Negative leverage means that the items appear together less frequently than we would expect if they were randomly and independently distributed across transactions."
1697 | ]
1698 | },
1699 | {
1700 | "cell_type": "code",
1701 | "metadata": {
1702 | "id": "6Cjpf3B8lwVG",
1703 | "colab_type": "code",
1704 | "colab": {}
1705 | },
1706 | "source": [
1707 | "# Select rules with leverage higher than 0.0.\n",
1708 | "\n",
1709 | "\n",
1710 | "# Print rules.\n"
1711 | ],
1712 | "execution_count": null,
1713 | "outputs": []
1714 | },
1715 | {
1716 | "cell_type": "markdown",
1717 | "metadata": {
1718 | "id": "JFSSJq5u5qmQ",
1719 | "colab_type": "text"
1720 | },
1721 | "source": [
1722 | "**Insight:** The Apriori algorithm reduced the number of itemsets from $2^{71}$ to 113. Pruning allowed us to identify to a single association rule that could be useful for cross-promotional purposes: $\\{home\\_comfort\\} \\rightarrow \\{bed\\_bath\\_table\\}$."
1723 | ]
1724 | },
1725 | {
1726 | "cell_type": "markdown",
1727 | "metadata": {
1728 | "id": "mbqWXtzR0sif",
1729 | "colab_type": "text"
1730 | },
1731 | "source": [
1732 | "### **Visualizing patterns in metrics**"
1733 | ]
1734 | },
1735 | {
1736 | "cell_type": "markdown",
1737 | "metadata": {
1738 | "id": "jdIvXojWOphd",
1739 | "colab_type": "text"
1740 | },
1741 | "source": [
1742 | "* `sns.scatterplot()` creates a scatterplot from two columns in a `DataFrame`."
1743 | ]
1744 | },
1745 | {
1746 | "cell_type": "code",
1747 | "metadata": {
1748 | "id": "JiA_CqVLlyss",
1749 | "colab_type": "code",
1750 | "colab": {
1751 | "base_uri": "https://localhost:8080/",
1752 | "height": 356
1753 | },
1754 | "outputId": "51ef2101-bf5c-4f6d-81fb-a6c0745f12f3"
1755 | },
1756 | "source": [
1757 | "# Recover association rules with a minimum support greater than 0.000001.\n",
1758 | "\n",
1759 | "\n",
1760 | "# Plot leverage against confidence.\n",
1761 | "\n"
1762 | ],
1763 | "execution_count": null,
1764 | "outputs": [
1765 | {
1766 | "output_type": "execute_result",
1767 | "data": {
1768 | "text/plain": [
1769 | ""
1770 | ]
1771 | },
1772 | "metadata": {
1773 | "tags": []
1774 | },
1775 | "execution_count": 130
1776 | },
1777 | {
1778 | "output_type": "display_data",
1779 | "data": {
1780 | "image/png": "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\n",
1781 | "text/plain": [
1782 | ""
1783 | ]
1784 | },
1785 | "metadata": {
1786 | "tags": []
1787 | }
1788 | }
1789 | ]
1790 | },
1791 | {
1792 | "cell_type": "markdown",
1793 | "metadata": {
1794 | "id": "v95xAd8803y3",
1795 | "colab_type": "text"
1796 | },
1797 | "source": [
1798 | "**Insight 1**: Leverage and confidence contain some of the same information about the strength of an association."
1799 | ]
1800 | },
1801 | {
1802 | "cell_type": "markdown",
1803 | "metadata": {
1804 | "id": "S-BoO_JMmkdV",
1805 | "colab_type": "text"
1806 | },
1807 | "source": [
1808 | "---\n",
1809 | " Q&A 4 \n",
1810 | "\n",
1811 | "---"
1812 | ]
1813 | },
1814 | {
1815 | "cell_type": "code",
1816 | "metadata": {
1817 | "id": "j7v4_LSImSy2",
1818 | "colab_type": "code",
1819 | "colab": {}
1820 | },
1821 | "source": [
1822 | "# Experiment on your own here."
1823 | ],
1824 | "execution_count": null,
1825 | "outputs": []
1826 | }
1827 | ]
1828 | }
--------------------------------------------------------------------------------