From a4eca55df7bb573e364454da7526f10e82de5c97 Mon Sep 17 00:00:00 2001 From: John Hicks Date: Mon, 7 Mar 2022 00:18:12 -0500 Subject: [PATCH 1/2] overhaul based on feedback --- content/Azure/01_intro_to_cloud_console.ipynb | 13 +- content/Azure/02_intro_to_compute.ipynb | 59 +++--- content/Azure/03_intro_to_cloud_storage.ipynb | 50 ++--- content/Azure/04_intro_to_cli.ipynb | 180 ++++++++++++------ .../Azure/05_intro_to_cloud_storage_cli.ipynb | 156 ++------------- content/Azure/06_running_analysis.ipynb | 133 +------------ content/Azure/07_monitoring_costs.ipynb | 8 - content/Azure/08_cleaning_up_resources.ipynb | 4 +- .../Azure/images/azure-essentials-outline.png | Bin 0 -> 68449 bytes 9 files changed, 203 insertions(+), 400 deletions(-) create mode 100644 content/Azure/images/azure-essentials-outline.png diff --git a/content/Azure/01_intro_to_cloud_console.ipynb b/content/Azure/01_intro_to_cloud_console.ipynb index 8cfb88d..4fb7891 100644 --- a/content/Azure/01_intro_to_cloud_console.ipynb +++ b/content/Azure/01_intro_to_cloud_console.ipynb @@ -162,12 +162,17 @@ }, { "cell_type": "markdown", - "id": "ebc30bae", + "id": "53c387b4", "metadata": {}, "source": [ - "## Open a Cloud Shell\n", + "## Open the Cloud Shell\n", "\n", "The Cloud Shell is an easy way to access Comand Line Interface (CLI) commands in a web browser. Under the hood Cloud Shell is Common Base Linux Delridge (CBL is a free and open-source, Linux distribution that Microsoft has developed) OS running in a container with 5GB of persistent storage and a lot of other useful tools (git, jq, Docker, etc.) installed by default.\n", + "To use the Azure Cloud Shell:\n", + " \n", + " * Open up a Cloud Shell by clicking on the cloud shell icon (greater than sign followed by underscore) on the blue bar just to the right of search window. On first launch, Cloud Shell prompts to create a resource group, storage account, and Azure Files share on your behalf. This will open a cloud shell at the bottum of your browser window. You can choose a bash shell or Power shell.\n", + " * If you want a new cloud shell in a different window, click the new cloud shell button (file icon with + in upper right corner) on the cloud shell menu bar. This will create a new cloud shell window tab. **Note:** you may need to allow popups or enable popups for this website depending on the browser you use. You can also pull up the tab to increase the shell screen size.\n", + " * To quit cloud shell type exit at the prompt.\n", "\n", "To use the Cloud Shell:\n", " * Open up a Cloud Shell by clicking on the **Cloud Shell** icon in the right side of the top blue bar (number 3 above).\n", @@ -251,7 +256,7 @@ }, { "cell_type": "markdown", - "id": "8bb7ae75", + "id": "4e58abb6", "metadata": {}, "source": [ "## Overview of what we will create\n", @@ -260,7 +265,7 @@ "going to do. First we will create a Virtual Machine (VM) and in doing so create a Resource Group. Then we will \n", "create a Storage Account and in that a blob storage container. After that we will create a blob and upload it to\n", "the blob contaioner.\n", - "![Azure-essentails-outline](images/azure-essentails-outline.png)" + "![Azure-essentails-outline](images/azure-essentials-outline.png)" ] }, { diff --git a/content/Azure/02_intro_to_compute.ipynb b/content/Azure/02_intro_to_compute.ipynb index b95664b..76ae621 100644 --- a/content/Azure/02_intro_to_compute.ipynb +++ b/content/Azure/02_intro_to_compute.ipynb @@ -47,11 +47,14 @@ }, { "cell_type": "markdown", - "id": "a4dd13ae", + "id": "4e830d60", "metadata": {}, "source": [ - "Before we begin this lesson, we need to create a *ssh key pair* so that we can securely login to the Virtual Machone \n", - "(VM) we are about to create. We will need a ssh public key when we create the VM.\n", + "Before we begin this lesson, we need to create a *ssh key pair* so \n", + "that we can securely login to the Virtual Machone (VM) we are about \n", + "to create. We will need a ssh public key when we create the VM. If \n", + "you have already created a key pair in the previous lession: [Intro to Cloud Console](01_intro_to_cloud_console.ipynb)\n", + "then continue to step 2.\n", "\n", "**Step 1.**\n", "\n", @@ -202,7 +205,7 @@ }, { "cell_type": "markdown", - "id": "65d977eb", + "id": "5f12143a", "metadata": {}, "source": [ "Now let's continue to the disk configuration by clicking Next:Disk> on the bottum or on the top heading menu choose the Disk option.\n", @@ -213,14 +216,12 @@ "* Encryption type\n", " * Leave as default\n", "* Data disk (create or attach)\n", - " * Leave as default\n", - "\n", - "![vm-disks](images/02_CLASS_Azure_VM_disks.png)\n" + " * Leave as default" ] }, { "cell_type": "markdown", - "id": "4feb08e9", + "id": "1dde7b24", "metadata": {}, "source": [ "Now let's continue to the networking configuration by clicking Next:Networking> on the bottum or on the top heading menu choose the Networking option.\n", @@ -236,9 +237,7 @@ "* Select inbound port(s)\n", " * Use 22 for ssh access\n", "* Delete public IP and NIC when VM is deleted\n", - " * Check this box\n", - "\n", - "![vm-networking](images/03_CLASS_Azure_VM_networking.png)" + " * Check this box" ] }, { @@ -280,15 +279,6 @@ "RG, status, subscriptioin as well as other properties and information. Find and record the Public IP address. " ] }, - { - "cell_type": "markdown", - "id": "62c6abd4", - "metadata": {}, - "source": [ - "## Security\n", - "## Enumerate the VM Instances" - ] - }, { "cell_type": "markdown", "id": "dd25a15a", @@ -311,6 +301,31 @@ "ssh @" ] }, + { + "cell_type": "markdown", + "id": "b05f3fd8", + "metadata": {}, + "source": [ + "If this is your first time logging in, you will be prompted with The \n", + "authenticity of host 'IP' can't be established. Type 'yes' and this \n", + "will add the host to the ~/.ssh/*know_hosts file. After doing this \n", + "once you will not be prompted again (unless the host key changes or \n", + "the host is removed from the ~/.ssh/know_hosts file." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ca04cfba", + "metadata": {}, + "outputs": [], + "source": [ + "ssh azureuser@52.168.77.0\n", + "The authenticity of host '52.168.77.0 (52.168.77.0)' can't be established.\n", + "ECDSA key fingerprint is SHA256:F/3poSNTVVNbfSp3Kc7zBGwiGzt3qwrmjiyfI1ZHnX4.\n", + "Are you sure you want to continue connecting (yes/no)?" + ] + }, { "cell_type": "markdown", "id": "41119145", @@ -340,10 +355,10 @@ }, { "cell_type": "markdown", - "id": "937e31d4", + "id": "f0b6bea0", "metadata": {}, "source": [ - "## Refernce" + "## Reference" ] } ], diff --git a/content/Azure/03_intro_to_cloud_storage.ipynb b/content/Azure/03_intro_to_cloud_storage.ipynb index 8bfd866..e8cf76e 100644 --- a/content/Azure/03_intro_to_cloud_storage.ipynb +++ b/content/Azure/03_intro_to_cloud_storage.ipynb @@ -31,10 +31,13 @@ }, { "cell_type": "markdown", - "id": "b8a6b10f", + "id": "a07c2033", "metadata": {}, "source": [ - "One of the most common and economic ways to store data in the cloud is to use object storage. In Azure object storage is called *blob storage*, which is similar to the Simple Storage Service, also known as S3, on Amazon Web Services (AWS). For object storage, information is stored as a collection of key-value pairs." + "One of the most common and economic ways to store data in the cloud \n", + "is to use object storage. In Azure object storage is called *blob \n", + "storage*, which is similar to the Simple Storage Service, also known \n", + "as S3, on Amazon Web Services (AWS)." ] }, { @@ -55,58 +58,29 @@ }, { "cell_type": "markdown", - "id": "63d54ced", - "metadata": { - "tags": [] - }, - "source": [ - "## Security (Still need to update for Azure)" - ] - }, - { - "cell_type": "markdown", - "id": "06c38751", - "metadata": {}, - "source": [ - "## Create Resource Group (Note sure if this is needed)\n", - "\n", - "Alocating any resource in Azure requires a Resource Goup. Resources Groups scope your resources under a common entity for \n", - "resource interaction, IAM, billing (technically subsription but a resource group is under a subscription), ..., etc. \n", - "\n", - "* Navigate to Resource Groups\n", - "* Click \"+ create\" in the upper left \n", - "* Select a name for your Resource Group\n", - " * Use the Resource Group we create earlier during the VM creation process\n", - "* Leave the rest as default\n", - "* Click Review & Create\n", - "* After passing validation, click create\n" - ] - }, - { - "cell_type": "markdown", - "id": "00376ac9", + "id": "b4557f55", "metadata": {}, "source": [ "## Create storage account\n", "\n", - "Like all things in Azure you will need an account to manage your service. In this case we need a storage account. To create a storage account, follow these steps.\n", + "Like all things in Azure you will need an account to manage your \n", + "service. In this case we need a storage account. To create a \n", + "storage account, follow these steps.\n", "\n", "* Navigate to storage accounts\n", "* Click \"+ create\" in the upper left \n", "\n", - "![vm-create-storage](images/04_azure_create_storage_account.png)\n", - "\n", "* Select (or create) a Resource Group\n", "* Select a name for your Storage account\n", + " * The name must be all lower case and unique\n", "* Leave the rest as default\n", "* Click Review & Create\n", "\n", "![vm-create-storage-account](images/04_azure_storage_account_create_name.png)\n", "\n", "* After passing validation, click create\n", - "* The page will indicate when the account has been deployed. Click on \"go to resource\"\n", - "\n", - "![vm-create-finished](images/04_azure_storage_account_finished_page.png)\n" + "* The page will indicate when the account has been deployed. Click \n", + "on \"go to resource\"" ] }, { diff --git a/content/Azure/04_intro_to_cli.ipynb b/content/Azure/04_intro_to_cli.ipynb index f6efbaa..6bbc2b3 100644 --- a/content/Azure/04_intro_to_cli.ipynb +++ b/content/Azure/04_intro_to_cli.ipynb @@ -24,21 +24,22 @@ }, { "cell_type": "markdown", - "id": "7ec8b5bf", + "id": "972274c3", "metadata": {}, "source": [ "## Cloud Automation\n", "\n", - "Now that Drew can create a bucket in the web console they wish to learn how to use tools to automate the process. Drew noticed that the web console could be used to upload and share objects but wishes to learn the command line so that they can automate the and document the process (it is much easier to document commands then describing and showing mouse clicks).\n", - "\n", - "The cloud can be controlled using a Command Line Interface (CLI) or a programming language such as Python. Collectively these tools interact with the cloud over a Application Programming Interface (API) and this capability forms the basis of the cloud, the ability to control infrastructure programmatically.\n", - "\n", - "Just as with navigating the web console it is important to know the **who**, **what**, and **where** of CLI access to reduce the possibility of access mistakes. We will first verify the tools are installed and configured correctly. Next we get the Account being used (who) and the Subscription ID (where). We will then use the CLI to list some public Buckets (what)." + "Now that Drew can create a bucket in the web console they want to \n", + "learn how to use tools to automate the process. Drew noticed that the\n", + "web console could be used to upload and share objects but wishes to \n", + "learn the command line so that they can automate and document the \n", + "process (it is much easier to document commands then describing and \n", + "showing mouse clicks)." ] }, { "cell_type": "markdown", - "id": "68bd896e", + "id": "1084b066", "metadata": {}, "source": [ "## Open the Cloud Shell\n", @@ -89,10 +90,75 @@ }, { "cell_type": "markdown", - "id": "c61af998", + "id": "68cd5ea6", + "metadata": {}, + "source": [ + "## Update packages of the VM\n", + "\n", + "First make sure that the VM is up to date with the latest versions of \n", + "pachages and security patches by running the following commands." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c8cf5a71", + "metadata": {}, + "outputs": [], + "source": [ + "sudo apt-get update -y && sudo apt-get upgrade -y" + ] + }, + { + "cell_type": "markdown", + "id": "11e22dae", + "metadata": {}, + "source": [ + "Install the azure CLI by executing the the curl command below. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "203fbdc6", + "metadata": {}, + "outputs": [], + "source": [ + "curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash" + ] + }, + { + "cell_type": "markdown", + "id": "68a1825e", + "metadata": {}, + "source": [ + "login into azure" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4a493451", + "metadata": {}, + "outputs": [], + "source": [ + "az login" + ] + }, + { + "cell_type": "markdown", + "id": "a35741c0", "metadata": {}, "source": [ - "# az account list" + "You will be prompted got to https://microsoft.com/devicelogin and enter the \n", + "code (string of letters & numbers) listed. Open another tab in your \n", + "browser, go to the URL above and paste in the code. Follow the steps \n", + "to verify login.\n", + "\n", + " * Verify your account\n", + " * Press Continue - Are you trying to sign in to CLI?.\n", + " * Close the tab\n", + "\n" ] }, { @@ -108,17 +174,21 @@ ] }, { - "cell_type": "markdown", - "id": "a67e26c4", + "cell_type": "code", + "execution_count": null, + "id": "f7d14f9c", "metadata": {}, + "outputs": [], "source": [ "TEST=1" ] }, { - "cell_type": "markdown", - "id": "2af53bf6", + "cell_type": "code", + "execution_count": null, + "id": "02e59531", "metadata": {}, + "outputs": [], "source": [ "echo $TEST" ] @@ -149,14 +219,6 @@ "echo \"${HOSTNAME}\"" ] }, - { - "cell_type": "markdown", - "id": "0722637d", - "metadata": {}, - "source": [ - "If you are using the cloudshell then your hostname will look similar to cc-2510c465-7677c9dc4c-fcl8k" - ] - }, { "cell_type": "markdown", "id": "e07f6919", @@ -172,7 +234,7 @@ "metadata": {}, "outputs": [], "source": [ - "# date" + "date" ] }, { @@ -182,66 +244,54 @@ "metadata": {}, "outputs": [], "source": [ - "# echo \"Date: $(date)\"" + "echo \"Date: $(date)\"" ] }, { "cell_type": "markdown", - "id": "108b3e76", - "metadata": { - "tags": [] - }, + "id": "cbf75abc", + "metadata": {}, "source": [ - "First, as with all Azure work we need to create a Resource Group (RG). A resource group is a logical container into which Azure resources are deployed and managed. Now let us combine all of the above to create a RG but first let us set a RG name and region env variable so we do not need to use the actual value in future commands.\n", - "\n", - "Example:" + "Define some environment variables from the resources created in \n", + "previous lessons." ] }, { "cell_type": "markdown", - "id": "1c87694c", - "metadata": {}, + "id": "2671dc02", + "metadata": { + "tags": [] + }, "source": [ - "Define some enviroment variables." + "First, as with all Azure work we need to create a Resource Group (RG).\n", + "A resource group is a logical container into which Azure resources \n", + "are deployed and managed." ] }, { "cell_type": "code", - "execution_count": 1, - "id": "d00a37e4", + "execution_count": null, + "id": "6ac8b3d2", "metadata": {}, "outputs": [], "source": [ - "RG=\"rg-essentials\"\n", - "REGION=\"eastus\"" + "SUB\"\"\"\n", + "RG=\"\"\n", + "LOCATION=\"eastus\"\n", + "STGE_ACCT=\"\"\n", + "BLOB_CONT=\"\"" ] }, { "cell_type": "code", - "execution_count": 2, - "id": "2cf44876-a1c7-41cc-9653-cebdcdb3978e", + "execution_count": null, + "id": "83eaa779", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "rg-essentials\n" - ] - } - ], + "outputs": [], "source": [ "echo $RG" ] }, - { - "cell_type": "markdown", - "id": "b11e6783", - "metadata": {}, - "source": [ - "# az group create --name $RG --location $REGION" - ] - }, { "cell_type": "markdown", "id": "a22ac088", @@ -251,16 +301,18 @@ ] }, { - "cell_type": "markdown", - "id": "1a7686fc", + "cell_type": "code", + "execution_count": null, + "id": "93b3c859", "metadata": {}, + "outputs": [], "source": [ - "# az group show --resource-group $RG" + "az group show --resource-group $RG" ] }, { "cell_type": "markdown", - "id": "0eb11c11", + "id": "1caf5c68", "metadata": {}, "source": [ "## Exercise\n", @@ -282,13 +334,15 @@ ] }, { - "cell_type": "markdown", - "id": "8e241cd0", + "cell_type": "code", + "execution_count": null, + "id": "2ade8b4c", "metadata": { "tags": [] }, + "outputs": [], "source": [ - "# az group list --output json | jq" + "az group list --output json" ] } ], diff --git a/content/Azure/05_intro_to_cloud_storage_cli.ipynb b/content/Azure/05_intro_to_cloud_storage_cli.ipynb index 3c4638f..47db61c 100644 --- a/content/Azure/05_intro_to_cloud_storage_cli.ipynb +++ b/content/Azure/05_intro_to_cloud_storage_cli.ipynb @@ -31,71 +31,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Open the cloud shell (See: intro_to_cli)\n", - "\n", - "Delpoy blob storage in Azure" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define some environment variables" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "RG=\"demo_rg\"\n", - "LOCATION=\"eastus\"\n", - "STGE_ACCT=\"demostorac\"\n", - "BLOB_CONT=\"demo-blob-cont\"" + "Now that Drew understands how to create buckets using the web \n", + "console and to use the Azure command line tools. Now Drew is going \n", + "learn to manage blobs using the command line." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Create resource group" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "az group create --name $RG --location $LOCATION" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Create storage account\n", - "\n", - "All storage resources need to belong to a storage account." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "az storage account create --name $STGE_ACCT --resource-group $RG --location $LOCATION --sku Standard_ZRS --encryption-services blob" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Create storage container\n", - "\n", - "The following example uses your Azure AD account to authorize the operation to create the container. Before you create the container, assign the Storage Blob Data Contributor role to yourself. Even if you are the account owner, you need explicit permissions to perform data operations against the storage account." + "The first thing Drew needs to do before manipulating blobs is give \n", + "himself the *role* *\"Storage Blob Data Contributor\"* in oder to\n", + "interact with blobs." ] }, { @@ -107,14 +54,7 @@ "az ad signed-in-user show --query objectId -o tsv | az role assignment create \\\n", " --role \"Storage Blob Data Contributor\" \\\n", " --assignee @- \\\n", - " --scope \"/subscriptions//resourceGroups/$RG/providers/Microsoft.Storage/storageAccounts/$STGE_ACCT\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now create the storage Container " + " --scope \"/subscriptions//resourceGroups//providers/Microsoft.Storage/storageAccounts/\"" ] }, { @@ -123,20 +63,17 @@ "metadata": {}, "outputs": [], "source": [ - "az storage container create --account-name $STGE_ACCT --name $BLOB_CONT --auth-mode login" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we will upload a file from your local machine" + "az ad signed-in-user show --query objectId -o tsv | az role assignment create --role \"Storage Blob Data Contributor\" --assignee @- --scope \"/subscriptions/$SUB/resourceGroups/$RG/providers/Microsoft.Storage/storageAccounts/$STGE_ACCT\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "## Create a blob and upload to blob storage\n", + "\n", + "Now we will upload a file from your local machine.\n", + "\n", "Create a file to upload" ] }, @@ -153,7 +90,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Copy demo_file to your blob." + "Copy demo_file.txt to your blob." ] }, { @@ -169,7 +106,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Verify that the blob is there by Listing the blobs in the container. " + "Verify that the blob is there by listing the blobs in the container. " ] }, { @@ -194,7 +131,7 @@ "metadata": {}, "outputs": [], "source": [ - "az storage blob download --account-name $STGE_ACCT --container-name $BLOB_CONT --name demo_file_download.txt --file demo_file_upload.txt --auth-mode login" + "az storage blob download --account-name $STGE_ACCT --container-name $BLOB_CONT --name demo_file_upload.txt --file demo_file_download.txt --auth-mode login" ] }, { @@ -217,32 +154,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Verify that the downloaded file is the same file we uploaded." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "diff demo_file.txt demo_file_download.txt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Clean up" + "## Clean up" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We will clean up the resources in this lesson in the reverse order that we created them. \n", + "Clean up the resources in this lesson in the reverse order \n", + "that we created them. \n", "\n", - "## Blob\n", "Delete a blob" ] }, @@ -252,30 +173,14 @@ "metadata": {}, "outputs": [], "source": [ - "az storage blob delete --account-name $STGE_ACCT --container-name $BLOB_CONT --name demo_file --auth-mode login" + "az storage blob delete --account-name $STGE_ACCT --container-name $BLOB_CONT --name demo_file_upload.txt --auth-mode login" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Verify the blob was deleted" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "az storage blob list --account-name $STGE_ACCT --container-name $BLOB_CONT --output table --auth-mode login" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Storage Account\n", + "### Clean up Storage Account\n", "Delete the Storage Account." ] }, @@ -285,7 +190,7 @@ "metadata": {}, "outputs": [], "source": [ - "az storage account delete -n $STGE_ACCT -g RG" + "az storage account delete -n $STGE_ACCT -g $RG" ] }, { @@ -303,25 +208,6 @@ "source": [ "az storage account list | grep $STGE_ACCT" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Source Group\n", - "By deleting the Resource Group, you will delete all resouce in that group.\n", - "\n", - "The --no-wait parameter keeps the CLI from blocking while the deletion takes place." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "az group delete --name $RG --no-wait" - ] } ], "metadata": { diff --git a/content/Azure/06_running_analysis.ipynb b/content/Azure/06_running_analysis.ipynb index 402ddc3..b92732b 100644 --- a/content/Azure/06_running_analysis.ipynb +++ b/content/Azure/06_running_analysis.ipynb @@ -75,49 +75,6 @@ "````" ] }, - { - "cell_type": "markdown", - "id": "95e80449", - "metadata": {}, - "source": [ - "If this is your first time logging in, you will be prompted with *The authenticity of host 'IP' can't be established.\n", - "type 'y' and this will add the host to the ~/.ssh/*know_hosts* file. After doing this once you will not be prompted\n", - "again (unless the host key changes or the host is removed from the ~/.ssh/*know_hosts* file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "31813a2d", - "metadata": {}, - "outputs": [], - "source": [ - "ssh azureuser@52.168.77.0\n", - "The authenticity of host '52.168.77.0 (52.168.77.0)' can't be established.\n", - "ECDSA key fingerprint is SHA256:F/3poSNTVVNbfSp3Kc7zBGwiGzt3qwrmjiyfI1ZHnX4.\n", - "Are you sure you want to continue connecting (yes/no)?" - ] - }, - { - "cell_type": "markdown", - "id": "9e42ad8c", - "metadata": {}, - "source": [ - "## Secure the VM\n", - "\n", - "First make sure that the VM is up to date with the latest versions of pachages and security patches by running the following commands." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6ca308e5", - "metadata": {}, - "outputs": [], - "source": [ - "sudo apt-get update -y && sudo apt-get upgrade -y" - ] - }, { "cell_type": "markdown", "id": "43c7d723", @@ -187,18 +144,18 @@ }, { "cell_type": "markdown", - "id": "6bb70256", + "id": "fd30a9c7", "metadata": {}, "source": [ - "Verify that *landsat-hls-azure.py* & *landsat-env* are listed." + "Verify that *landsat-hls-azure.py* & *setup.sh* are listed." ] }, { "cell_type": "markdown", - "id": "0aa4805f", + "id": "8107e780", "metadata": {}, "source": [ - "Run the *landsat-env* file to setup the environment by installing the \n", + "Run the *setup.sh* file to setup the environment by installing the \n", "packages needed for the data analysis workflow." ] }, @@ -209,7 +166,7 @@ "metadata": {}, "outputs": [], "source": [ - "./landsat-env" + "./setup.sh" ] }, { @@ -270,86 +227,6 @@ "test.png" ] }, - { - "cell_type": "markdown", - "id": "89e85f82", - "metadata": {}, - "source": [ - "Define some environment variables from the resources created in previous lessons." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6fc41936", - "metadata": {}, - "outputs": [], - "source": [ - "SUB\"\"\"\n", - "RG=\"\"\n", - "LOCATION=\"eastus\"\n", - "STGE_ACCT=\"\"\n", - "BLOB_CONT=\"\"" - ] - }, - { - "cell_type": "markdown", - "id": "11e22dae", - "metadata": {}, - "source": [ - "Install the azure CLI by executing the the curl command below. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dca9b76f", - "metadata": {}, - "outputs": [], - "source": [ - "curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "30ffa151", - "metadata": {}, - "outputs": [], - "source": [ - "login into azure" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cdcbd1e2", - "metadata": {}, - "outputs": [], - "source": [ - "az login\n", - "az ad signed-in-user show --query objectId -o tsv | az role assignment create --role \"Storage Blob Data Contributor\" --assignee @- --scope \"/subscriptions/$SUB/resourceGroups/$RG/providers/Microsoft.Storage/storageAccounts/$STGE_ACCT\"" - ] - }, - { - "cell_type": "markdown", - "id": "58a0e9ba", - "metadata": {}, - "source": [ - "Now we need to asign ourselves the role of Storage Blob Data Contributor so we can interact with the \n", - "blob container." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8a639fcc", - "metadata": {}, - "outputs": [], - "source": [ - "az ad signed-in-user show --query objectId -o tsv | az role assignment create --role \"Storage Blob Data Contributor\" --assignee @- --scope \"/subscriptions/$SUB/resourceGroups/$RG/providers/Microsoft.Storage/storageAccounts/$STGE_ACCT\"" - ] - }, { "cell_type": "markdown", "id": "f3640eaa", diff --git a/content/Azure/07_monitoring_costs.ipynb b/content/Azure/07_monitoring_costs.ipynb index b5c7c53..aa655db 100644 --- a/content/Azure/07_monitoring_costs.ipynb +++ b/content/Azure/07_monitoring_costs.ipynb @@ -57,14 +57,6 @@ "* Note: These values may all be zero if there are no resources allocated yet in this account. Also, in this example there\n", "is only one resource listed.\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ae56bbd1", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/content/Azure/08_cleaning_up_resources.ipynb b/content/Azure/08_cleaning_up_resources.ipynb index 0494252..caf6ee0 100644 --- a/content/Azure/08_cleaning_up_resources.ipynb +++ b/content/Azure/08_cleaning_up_resources.ipynb @@ -80,7 +80,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -94,7 +94,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.8" + "version": "3.9.7" } }, "nbformat": 4, diff --git a/content/Azure/images/azure-essentials-outline.png b/content/Azure/images/azure-essentials-outline.png new file mode 100644 index 0000000000000000000000000000000000000000..6078837357739e958dcacb41cdc00ee8603576f6 GIT binary patch literal 68449 zcmZ^L1yCH_vM|o#EFL@rcXxMpcM0z9?oP1a8e9{c-~_ioaF^ij7RW!`@80`fy{ez8 zt)1!Zb7s0vdv_A8tSE(oh>r*X0f8bTEv^ay0p$#QdO=VCq?N)LANYcFRh1HjsGTG{ z1a6YdwPh?66d-7UYY+q+Bpd|v8wvz~4~g;bYe?W49|HDYa0m!ZNP_=f8$we54}PRI z1kAs2EP(H~KWX3ttp4{mbOGf5>{tNxA8aV+0_gu<_r5KQ94LGQz7U+GbzC7JkTBmq zkPulpcmOF#*6P}B+6wZ#W{&oZCLbM5%^AJyo!(YK@O$wBm-gmvCZt~Wb`Gw*UIJwQ z!r%q2-@r^{r2j&3vlSrIR!}Atb96B$D#_0rjG7z0%T-w5Bl%lKkw;gZSg-(a&Y}OSpb1dZ@)0HFfud!cW+=R{~MH7 z)!fz5&i!qB4F_vCL00~MA^%_S|2*xVRZ1?_=D_>DEfZw<_mck&`@i^Nj`mJ2=B}=9 z_#FSn|KG6xi?3|u=;jFU+Qr&T#=*_p1z7y=r~T&z|Nj{O-ix2(Vc(6ei*aJL-%DrtpWiD%zi(8?ZsxKc^d-r2adka=*PZe^ zaLRZ6nphD_LJ}TK3MC!{LWd;#`4P%5#kBxA3gSN?KFAsMCqm#SVHg0I6aisf$xcXv z`_C;Y)R&5zccf6kA_b$j!5t(}#SP`@@8yJvzcG|WU_y3NkRrlO`iYk>_QZY9IIOoC zF`ZXcVRy}mOOXIw;mFSgFWhYQJx7l!cJR+Q5{P1dfGU&>`p~_heC%RVw}F8U`+@Dm zY&SOS+XnZs4CUexak@(!CiV!u9f-siyX(yezMwu2s??VDW%(=FjjCcVKR8dbg zkLVVc>EY*&rg9ORqb!2dv`bkuYU=9PwesV*Flw>gd zol6%|uo!DWh#xCX|9%3ksW?d%;fiqYY~pW?;=>SkfC0Y12iRU$SP~Z<#0Lce(PBk~ zZy>_{^0vVGf~hVQtie_tXASSdU=$izZ(w=|oL&zVjFo?-60_QS@g5n7keFcW-p{75 zdi-|Xsz|h>!I3Efdi~v|Tku7Pq?jelbbQB3Q~(EBsf4qR@=!X(V7^cq8?{@|)nogQ zVF&a$H%t1Gd#f__4z|YRYfn>=SLJOMv5O010Oy@-{6#)0ND79#P_$Zm5<75|Erm<6 ze2(_LcBb-;0G&=xHEf(mL8WA*AqFH9I;p}fl=^5gXjWF3Jtj>rJlUI{?sAm|AwnP3 z*TBi;)5yEB9;0WuDb(TeI7`z*uI89s`Ra=kN?8e*DB&H1q-)WgrRiMp0tYBEOz_cx z8-8$RgT%`@>#;}n?oHFv>;8#UYq{cnDiOEgm^1QvUyd~{o23^XB+52J%I7F-Iq~1< z^O4T9QkktpItyBYol3yA{h*{$&N$o>N~k>aAfvizeGBY(a3xOJjNWZXfB@ao$eGCR zEl3ef@+g&^hgO;#);Z@C`Eqo`ZVQThmvq9g*o)uj^khuc*mM3FwDIrLP3BarX;PgL z!|C-0eqCc-mb(!OAghJnIZfvuI# z{B6E}gdvqqOApD_F?w-62xk2?!rWzEHGHkO@32)(CB7y(-}4jcf)qnsgjI;Fiu#C? z-v-$suTFvagyg z10NT*%8=(-6GqI~PgPABxzmK15%!8%JytF37loCv7;>}+!$vEIr6*_Ve_}mXF5_1= zdB7W|Wnw18%&SU8IAA zF95?-!f*si-Dv@MwwNf)1)~|Xk}HCO)v*Fx)0B%>nUBU|uFZ1U<@?A4;W6&xwIO&G zy5g-DeIw;AY;;B=^x-J!LIjv7kr@;V;2LJh6~*GHP&%w5Kb#)W2#GCiXdsFlfF>BxDy@sgb1ke(Qpxf`}Fl>+%oi3NDW5XpJGJiNOHghsbCO$1Oz3K>u8JpaE_*( zAaXV>Y8wAHwZ1gmlJ2;|N;WANb<>W_g($(OjC13$(?pyZPZ|dw|5I115As5WmxAv%vF%_s{7VP<73sLeK<3>J?;(-0(8gub0 zY&1Gu$o{yWvf%tVtVc+iXh?Jz!JLx8$1SuP(SYS|)LBZe=7GP)C7`FUr26vaI%g#S z&0^#QC@7bK&@@8cod4KCf8`;u%cE1x+i4j~u#$6mE8v=9mAInULPeSr-f?*@Pc+Hf zFX^0<{8=N>Gm0HrmE-_DuuT>x+Eu=~NLA0(!u+#+U*n|?&rc-4Yp!CJKd+p<3i?EX z!e}A2{XKUl$GGf<)M*I)n_|KkqqS~r+|_FMy-s|6e0-bm5egh>2g5o16y)P`DvgAP z{pe3B8Y3mDoud}nP;ISj30(}?>Q6&=_o~eX#uzxEDK+I3r0#zQ5|qfqqaDXdMdEw@ zgasa3iAkzZqZnq08O#d;6*URBIEoGWCJcA7W>#v<1_jXEw|By-l9y+EGO3$6s_piY zOB=L)YV$#EnYp9ukOfh^44#8Fgwn(TxAx@SeseI0sxnDNgI%$_h-|X$%qkAN<$91(09*;)8uD6(&OEy#7aj?vx zQddys(qNvlM6Z#Id=lXMVSrI+70fA`0*0_LTK^;Z5`bUXZYg<=9;^lgX@|waF#Kf3 z*b}hro$!dbD?1cXi-GJ#_BTmiE{Jc}=*_-~E3Pzg+S1vLNcvLy5s3cI7bvJ^`o+86 z0>9LP#R9n!rxjl0q%eA&QyEGvx83SPNYmbuk%~8cJ*zx7_>GqH_fboR)v=3KhMOXc z%?IHuT>|WON#H1hL@EnM*Kqq4dIw_~+CoBER7!g}TQ6t*dzhloa38Uz2`Q@{?L!|I zG{cC-N`9#)EX8C}#Lj6$dhx*m|uA5TXocnzSMoz+B zHQ~;CRVXs_Q5c(mF|kazrd-ghA_QB$kL%>?AERb^(_d5#nOxDo&iL2MR-zJ!_+Fom z>zX!pI!0-_{@xZ;uS^p~+TfYJSIKy8w1{r*C>^fk^dJ1d^b!vR*2~aAuOoprLROt3 zejaTzpju{nIK>;v)y=7#wjvIAFtOyQ%5{_NATwN%pi~o<_)5O-by?Xr3Oy;@JBRU0 z4v=HQH^!$3!yHi=e@iE!*Z#J1K3a1AwH(Id7u|@_>jNcBMPsAepNC66kCSpbB*os3 z&eEjwT_F-Zd$!|V%0E_Z%o0=6KYeAf0h_6TDiN|`s8K8tD*Y)EGym=_#C%O5c2O)X z{qp6HFoAsJv>NtLG>5n0Hf#3A66 zLYuq-dzpM+o8{(G7gF~dPdVD|%}#XTbbL00;R7DFBJ%`%=V4sH`H`26U!=!lM#8rEFA; z5p6T^8GidVlkA8|ubmj{+F3%1T;)88bJEUM=ou|64dy=P!%<}@8^nM_Ls+y+SM8tH zUqkhe7H|ty#hGI{oV_b=S@T%&zh8qlm(WDQp+ERlrlhEtz_tSZAj$vt&$Sng<|B-~ zUjaN?onDAnzq|{yQw27WEFnI*I+9I)-huy}jdtN#)K0&xaFT5N+wKSu@8 zK{hBmHy$X(O)TfxZj3+o`^qjb(DOP&eUOWw8M)sG{9F6|tk2uTWUJYJ<>rZPCE;wj z>GKk^#`Y4&{H*i4BoJ5D<1m_?Usij8>mh8m=&pM zj!S8Q+aGZ>_ps7pR_^s2z1sC1(a-Y=oUz;pKC_KYSDw)V3@Vpm)wTr7L4(oFFuyiZMQJB@VjlWJ$%l}@;NN|Y?`y& zWV^t|)ha~bw$-zHeXg0-)vI&u=-=fx3AGb*yLaOE{rsZpJ~F-&@6P0_E&kt`>d_C8 zEu*P5f|)JX+r2b$dxi`tBg!ao3j41eo=-?(L==Qm^lP1ej_ztkGp%D^Vgwq`D|lv+ zd}-3B5;SQ~n9hCLOz)H;gj$-jt_QLc1zuMJpYH>&C%91KJ%5LGllb3E7m7u$`yAIu zk@#aV<@;U9WPD>u?*z<{p459cGBxWZA`%u27;?_LPQAt|tvZi&xqoG%7zNIibSOZI z&4CaFr>3Gfz{x#h$}{?dY8$sU(BbZ6DTPXjGkXGW-2Ht0rK+y0(pztW4o%))8JjP4 zz;Fm_dB|a!tal@O;-#I=$z`evn`vsMZo|402ovr`7jMG)|5oc+H$>knT2C|}KESya zIWK8_w%2FZED`1wgLd%VoBVO-tf#Y!YEjiiwBnz_fhw}=eRnZ&*BTvIH)W>b+Rk0) zU9H=MNV!p=R>r#?laMfIh24K9;CuHY+`VtWA#|5E>cVQejL`X7- zw-N~pDU>_72bJORX^qTMk_>uwqUdz(l2u+{GMkHujScfULAM46QT?x|#^B5^KBpLR z93EZd?jo^gr;iz*?2nTv|L(;PAAnv55^qCGQ^`?j{Pz4iNkQ*)JhtSO7N$NwnPaJA7{|e}sD>Gxkbi>Q%jVx$smsm|%xo5Nb zi>xJ!T1*@+X-ccrGp^I0k|Suj?YkFzzUzvM-`ub9JZbq%?2=N89Mz3bibI_A2@+OO z#X~OXf6_Em3@!3!!zU${FlT+RQlq>QQ>t`U6$VZ)zC_2y)^U{VkZI0hVPm&Z4o|f_ z%TSQ_3@ii;e-$7!W!7NusbR-0u;wOooPMK0A0er_*-B5{9>|mk<{mF4UjfS7EYKyMSljh^;ox080E%X=NU9Q1{R*P zmX=qG9xQ4GEO?#%u~upAIxfK8(aNEJxE>GKZ0S}GIIqIC*`=YWaq$&R)=fB1f5(%V zZXMZ>5q*tYD;7g6a1>LxSf#}jb#S#img{YTl_2SUJU`(q@%|Ut9n)mto_3K93E_8a zH%nqSQ5exr5RcU1rgduB0^~u{84~Q+1gJ|4)no+T#U8!i)1cu|{SFEv3%GW7cU|`< z4cc6GzsRKY_4P4-jj`KW4n4++-K{9gtJEC*Y!ra7*7-YGZWI0HcM4l_$~L89M*US? zKAQOf6~C_FtxvqUFTt7kfkwWkP4C4b^u4yiC%^y9NfdhZ+Wrw; z*Y#v`JYO?i&S5*h>U-W99UZN07W&a8j13F?&?~4c@qqLk?=@O3Hg`&MKnnFzTP&mpm8ltB3+cw)~psP zZBI%I`a}Zv;BT}-&%O%@s%bSXMuGd_=OAuhbN)%9zXc9x`enV39bBfD^ZqT!aR~`O zMk+$?&OO!9T?+mp=SDI|8J};QUeABIwN+ce*`dLo>J$@ko1SfJ|$8q0~ z@{YjH!vC1Ol-GXEy~B|`n##qlCgr29g2A1py3+5ajh9TXmr#Nh2g8M8%fCmkJm0FW znIspT?j?4KwvXhW@27EF%mZ~zhI>zH^+#$Cd4&Y-0ugo0L$W~b()G8O z4g96SnE)y~_Bho!U%9F1=V(#YYAk0KJR+QFhpGmK$J(sK-Ik+9W_1xOPX}!l$f^=- zZ~>e7i5hdx!>sNlI43Rp3T8IxQ|Y|8gqCRTn~FS91uYxFLuzxQ>_J&V@zjCTD0q!z zJ^PmKwc~S#%K~Tyh5BrHomssN%v7=TIl65(d`pjnO~K1?;k+7KAyx6LN)$GIf%p<} zqP1Ufb=~n8BpQXhF`Z^=dgTl9_BV_jc$?xuvr-V>vo&?)2z5g)-%X9B`HA~;aXk4a z&|q-8!;9ebFNKn|@sQd<9Z|5x8mLHcOtqbi@jhL}Zh5VC`TKHlab0~2LEF!SQbhq# zZx}O5s{6-jQ{bLU&L=v2fC>-`VxMzt524)-ggJ>7vxghH7_TMq&}oWPyBIXt$ZB+f zAMf_t?bg826Jid96m`zT;cG-|9_P3D;Z+l` z16;T0JBv?BbBHVDp)zx$S@^fbNaCckfEkVW7pHL{zt{X4K&JCKd=4?MZxcOC?0990 zfc@%#-Bg?9b1U%9L(LQ6+StsazfMc;%XqYK5XQxfqj=CvfemJ`4Gg#4{%Hryp=+L; zCmE}4p>~%x{Zrf$at7^fe?MG_Cs-qIsIRw(- z8eQ-q;U|;tcwv8Q^2)92RG`#6%~Z5>+q}AHOC5e)U5~C&+J-Bz=ex*lXT(U6Qav4B zAli(w|3vtS`{Ac=($TpD)J28Hm|4yiuK2V~y>yp5b^1?oXO@)TBTAqv@$*M)F4&Z5 zT^r1kOWaQgdCaq;84Vrr*~uJhaxfvW02NNRR85kqP^^ZvDmhCOD8FKO)oQ;`8#ci(PCE_cdCf1T~)K=>JG3STQ-iuFtrPFl@z%#fvp^Xcw%A=TD^+|b2Ecq zb#1iko%Ngvw*2m%yyM(ww3GpZDbq7BhXGixPp^cX)~J(W%5H9DE%n6tQ75djB<{Kn zpR-cO4HKM{2XsGfu;bX*_x?0klbVYfNM$5PB$XVjH8RkD(R>=)m~KoR9G2SQ(Om(@M4xziu# zlUaQr&LNstfUlYAm5Kf$1Wv#^wWdAuGWg;65$SKf#t$4w*dYRhMMNQ46lSqkmEIa7 zF$Hl^!asp(B1%^6mk6)$pd76M8@^?ZG?v&VR-=}M*sUEFoaXfC_CTE_Qwx4gDSnDN z_Bn;pfrwBzxlaPjAHq^CFSl~BH9kG9k-wETzPw4R+r8S(F$L-VECX4+PK&_%qN_uO z@PViP+x59&7*U!squw;Xab!K1t=XA0NehZKdv9!C+Eaq*MX@_EHOvp~bXbd`YfOVb zXPS~-$e?C`*Gr4|u!~U*^Sh(e{G(7=#V=C^A;b1Tq<9JT64Sy5K23J9S;xqNr;%V0 zZ^Z#rJFm#4kLn1b%akrb$!OOpM=BgqLET`WX4*nr`1F7anTg!I;Z{RW>;pBVm7?%j zr&;8Pw(qwd_0j9^(fydT$Ujob)8mM09&KB#I^~UA?;L)bipNnJFcz;3m%M_M1A0Y+ z*g3R)l9#uLpqO1M%|F=}!STlB;^>(hJ}N?UYNQ?YJWT2KjDBt?(iwMJt%Jc<;8$s{ zoy|cg=9)BluqWaWjwQuI#Zd(p_(ch$18;^>H2I~}D>6tGoQLB%eb^dYw4N2n{g>-7 z<{RrZ%U3@z+ZpB``c0;7Ffo&171u6z$jcR>EdiT)MO4v<`k_z03nC{Vs=f2Yv&16^ z)DQLZpZ2TTq$3{}j2U_KulO|WWz~~%XjI$k3!(BuF8VNbX%sjmp2P;y;Kw<01^Dm+ zycJ|`U}?R-u(zo(ij(3YJS=!};~}VJL*+pf5r$PHs};fX$>)KJ^9`Dt#+^j7B1ELH zNAyp;(%CiC8-M?yVcweF?v{;zmrw>zOx(TfT0Coy4lkA!@y~8arEq3-s@Y#C3sfXM z6M|5*(B6IH^>~VcR z$r6i2Yz$(QJd1_^YAx-?#_=s0#`x79n}b>Plg-9M@s~McS)bf+lmA1~f2K^bM$V#>r>8nu#(c;XRbT5hdAg1Y@=5N+_ z$2rWD@2fGTR!TYb@|AmoMSvZdpQ3G+PGHop$`hQ6`*#_L@?`NUiRraZTOaf{C3LndVxOR7_XL3nRv>ZJqJ`IhV!-j9*f|D}_ySh57C}pjS`kH~P~iC*7e}^5 z4TVz!lXgBTyrFG$;sW_wBG^Ab+dd+9$<>v%8FAc>iI8BLdV6MvF;=-OX=`D>Qv?={ z7-%i^9J5tAyMmLPuMX<(1oYNRtC!gbKg{y4= zb}b#QV#Ys;y3Cjou%6?ca`q`X5TZm9)+;&ryc$(eeaxtA35z9uws$8`Yh8n%VYNv6 zi3^=j%Qm70>hiMuwitdd&Ng1c=DU}TXf|`$-dz@@S$yq#g{$rwt(LKk zM~vW2Qh*l17wMV{B1ll2r;|uy1A(bj`Urq2{?Lb&+X0vEsHkeN^6p zqD@GZnuFH6@*Y0bqcjqV6ZlO5SP{q7-zHYR?PF=4;lj{mL2T?4A2&>N+=WAC)x5SSQ@&bQpH+X6*F^BE}ZIk{;8?HLeb1dXfea*&?nkxxm~k2 zV^Y7EAepWxWB{6M1@91s4S|Hlf<7;X5(-i_$kHXAY|@Sci{MThrh&T8sG@P)jZAcj zO!t@OARWO^M#bLuab2`&nWz`0(b^oU)h`|y-V%c&UMGh(B!!wp9isj0ojT)KID#1| z;R^x9*;UN%aS2dsc%F`?x3MQ*EN2nzTf$`aDUC=99Z+_@W$PWX0!7Ux;3R8c5e>+o zZZU+#-@|mHXpw)$SJKR2vn#@e77Q&ZpLOCFokRTl+fPh%%hg3OZ}>r4JlWV3T;=k; zrW5ri_q!>@NbT)i8x?=X*sg@c4v+|qP4~crh8?$BIbSQ|PP|z7nEX7eFKq(N$I;nx zlNZ%9B@iEczcW|Mj5&};+W=Dox_r3pvM@&!5G2Mmti;7LrY|PB6i67bI&*qgNOWjc z*a#|F^De}gIm9GM8s-G0QT;cxOjt3Z8pGkbXM#J-KgKkQjtCho5J}uwQY7Y*=U*s9 z>VF^K*G_nyI`v`{H_hguSE=xLj}5T>fJ-YyZd^&-JUoqeGrUD2SixtkcK`l;W){qjWn)d zp&`l$90J)CL4JMZ#d2lC=z%eqPTbsY z%9fhRdbjt|akh9YCHKnT5Rz_YGP>A2-Op(C{Luz^qR=NQB^eyt{???Gh+O{wg+d1L zxx`5$_REDKC|lWNvQgXpLf5n?Dvh>nSI?EMxnDN!YXS0@6TgmiXisR2m*SFU(BneZ zNSJJC6u4jN$~lGG-B*bgj-!UzGMD~keA#YIO12bOu6c$ciADBj~ z1+(bvPpR1XR~TvzAFru&HPvD!<(t+kX7lM0|?{Ib&w^mQGY*dOi- zA8+%_4iiR7tC-DkG>92z&ZREaS7UN128%6XQOS;cept;c51^hC21-;NKZcF`gdCFE(H7vLdwY|$% zQ%&kqMa^@Uv~r!IWT$y;AYhsd#wDh+u$FE1>;!LOK+=*y>>8}8sbFwkt#VV^Sn&^iY{XR!%XgNYGmgN9>> zyxtgXjf6&4mTlv))$M8$Peg~xQ8SPieEESKVd+?1nmdlUQEoF=^cko-dC3D+2Q&55 zBoKQhP#ZM^+9$vBtG~rBwVw{OzogASwdgkySSw8w#%OE#G>f#{@tQEu(|6hzG1(E# zF;P5)P%Bi%*$!*+H0{f3MFR!9NFXK_2s*GQBjtgNQ#NUqNTrbX!#TJ!!N5{0OlXZz zpo>)-`|ttmLssn?(k$olF%ifQA}f;dc|}$ld4I0`uf#3;GsGRlg5DLn6~dWZ$)MRl zTI48lW?DLbXUVW819@R~j47jLRTPREg;cq&WR+SGyZsLPp|eRYb8zLR0P4zbO4oLI zptB+d1Pq+1cqLR&GnheIU?_$(yae@(Z}r_MeX9i318}Yt5P%u4zK|S1Y z+P#vtnM~DTnQb>(1GztKryHj#dECL`ny+l>te_pVl4Y=pT z^``v{Vo!#MS0g}307_WvZ&QW-gX&P=q*OqmzHrm9k&#jWWf&T3RYUO}_%|XTGGj=g z;(@ZkGPi>p?i;bd>-~?V>6t?K$vrp47gdQn3ZRR%-B+AK0@GX^q~GIdiSXY*#rYL! zB5$cu6mLovh8+M3t&yq__=n7&`oMj5EPtBZ+Ys1bMLdjD3mEbo81A?gG@}g$Ndq&P z8mc*|@4!g_xs|ExG)!ch&_GTj7$h%&9y|yn!1jb(?Xmx`EK1lN_-QWsr!Cp$K8#h) z(LRy*9FjQzD_nh^y$d1-ykgRtWEv{U8)$lJc9itZQHtlvC?Nbd2?kjIb{vcV%7jGT zCSF(!w>)<<6{*Yw11e-jtkuHktywB1WN+FIGYc>)Ar&$&j1@cr!r(op^|~U(y*w^ zC1Jh*Os9RHob$hws&I`~2HS^ugB8qMu&^<5Tz$SfHdS-UzB$BLn{@}}QO z2A?P6WFisY{5SJ48_`(Hgsl4+Y%=tlHx=!QtqAsj!V5iH{A#8*7o76<^%-r4eHa2x z&)~a9=TT*q6Y3a4M9}M0)#1);X(LPF5ik*nl$*I|$2nXnX61Rh%n|tNmt*z?slHQ* z1aE^6d13N9F!u;U0ePi@IOKHVu+g>lzUTp|*u2GIjj;OyX!{J{(L4DY4FOGf zj}z@bxBCtr{!x&Di_pvm@PC1kh|Tl1{k#?Zbl1QLNp~bDKu1M>M$f|VL2|G1Vq;OY zwY5EL2@1#`#j{}QTZV?t0+R=C&8$Bt1$)MG=n?e?pKJ75w$Ho#pJ!%fayowjtv&5* z=yD!)4YJJy;iNyKt+vDlXbw;rmn9Qfaq#1Gj~G?$Wr=? ziZ&Q$;HottwX2lD40)_}xgfRc-Hq28XTRRDG+hITrkt!SKD!mVkH>J*dm0*=b*B6` zodym$4Vl9HHwDx~?^>H{nVM98e}677B9{RZ_R-XmVh%Uh%o*U8EN8pJfdl=T&UX(6 zA3`|`mebP{hecxiT!uAi7{9lU1y@c*Dja5zfYZ`9^9PNA9#}ciT%qblX|tIxGC6uqf3(W@%!Nt8ZL=*aCQQ*rh?iaVi znG%p_*mQ=N?9R>(bUF5Vt&OyGCEYkM2q0>tRjc3jaRejGwY~Z%C{26WOQV)zh6ij# z4Op=VjN+Ra%pPqR-Wao&r`xED$o$d2FXw?D4_x8#F9U)>fol|?r{kzyn7<}NmT+?M zEH3T`bfQWy{wo#10g3=MQ+(7`RgnYORhl&}f9T2nRPS(sowryF@Eh&Z%S{#xJc;`F zx9Y?nVLdo6?j={n{gN(lQ56!UWV)TUME^jU z7GYIkTq3m^_l6J)_`ukOW)*Hv5J*+L!`HX`l!4o`1B=SdWxrStNmBEC-c1r)&Dix| zs?8^vNE}b(bu=CXB!Q}La}sav$`j`5`WpNVl@9#%f+QG%WxP*`_+_!JU*rDvxUQS{ z=Az~7W8oi0;Mj9i=+z*<(c zx5I(LvMSZ7hxaaAeD;~l;lYz@a@=@5@BSOXfVwkV*Zqng!HqFndM~gPAYd7F=*{ga zqPfKuS9sLneXZMQ6>K$9pM{4EH+5Z@D&8XoC?0W0(Z^d%;l(FF!4TEHR8&+r;kCWo zt$^L`zn^#YJH9)u(-9I(R0BL_+>v}=d3ia3Lo1|hV|_N1U{SvR-Mb==_c++4*IQ(s zltj7U;Lt8hc&!K;n06ly{9+xkgRcnpbm?0$ZThSghI1#FbxKaQzM~lN2;r1u_&cg_Z zN)1>p6VnW${6QPMCqFl*Us9t$t#2V+ut?c0c(K)a$G&9^j({noU*L9DjY=`cYd1{` zm=n_4@W1Iw1x#?sm&0VOsXPIpht1HF6T51U0R&`bpi2$96LFCdEfX&w1`gpCqNqg# zV#R+dgQZxn#o?hwMoDR?4%w~)w4+#PbFc&UgQ>?v)erxA2lt6}t5nc#ky$&U`(Yai zrWmzrP&Jku2mxt%W;RFA83~+Ld&Ftde;7YodASnux*c2&kwo@?ykKXA&=cKJ-*Ceh zysPWH!!OlhnM2&?vx^FQ)EaktD0QQy5Pl02tcJW>mKW8L5M!wCm@iO?c(KON_9k;< z8B9C$Xm`)v0kP2(w@eD+AYOIVpgLX1ZCOc4uX?CGao68h->NxU1;|u6r#Ej_`)cQ6 z%bW=eJ}8ml@cend71ii{z4!gB9m)1ND~H9L^lhsVWlr)B^liOC*ou8#Kf{XoRzd3l z&-T?L4${P_oDXj=6iDK`D5~vwi5xJ=vu~V)2#q`6XJ#pjc8)Uf5wzUpajF}(*IPbd z(Ev*aBM;ewfMZgBkrCcB+`BA4wGv*k7=_wwHBAOnH+V%5hQQ}@Q@-D#HoEy%173a6 z3p^%8uD5+Z$sItmc^`!$uLm4B~?t%GU01YDU*c=T@TfMOETXvvg=S6@8^q}zP*c~VDY@_2wm$n7`=NRi> zrCZj#>i8Rt9(}d3493UtWuf`AKqR#=N4nZ*y0#u4;-`!lGc^2tk94j{w;X{|2eK@S zVwFPyl;?TAPQ*fH%r@i(L1SC)4*^6&-9rX*H^ZMkFadV{LvI zzIRqzQ93<6-MeahxD4n1!v_IGOW*#J8I4U+wmi1we&;5*wCEAf$7kK?qL%@fCPfR; zoZ&AzE`zlwv>8Q=ZMTKuMPq#nf94CzvcznbQv(JTp^6z{N^FzLxn;w?Vg(2&(5#W1 zh4XS2otE?DjC}3x14ftxNOqpYd^-)`wamlI1om`fbUG(G+ODV+>>01tX+O_4(tO+k z$1nBf@_BNa_hCGTbCjUot{;aw(|QnAw&0&(6!?%r1TsFPaKRRT{{wyBE~W#fftoi~ zo$omvYPVI)(&fq*_Q9=XZ&~-L>PH%3agIO#%9T7HDg+k4t#9$1@W5Cdge>}LdR3J%Bv>2 zCiI(I(B6+=p|f!MQ{$sfg7%i0f=0WOdndMlC?Ue^i0`~3v^OkJgVD+68h}*J*~InZ zb4iDrVD2CzEBWKht6(jOV6GHdYJR$%{pNsAdF_^|q~;47Z_pheV1a{Q7Ugx-vx8Iw zzu~nLU!TO)#3|w{Xr@rEE6mz zD6O2m82C^q71tS|XfE;|NIZVRKAc`>7VPOP)|J@hCcKk~IIV9{|CTSi=&V%C%Kiy6 zG}SckVcE7WK0e+)i3TtFeTnv--1CpQ75E@OU~sj+stU*tK%{^!_13I^rw%p(oW*U` zS$P%fqT})IXQRQ_QfFu9hj|mKcWwHH3n({vmOx(?LXVoR2xrz89t&zQ5`_THhQOpyg{f-C{DUrke+>JJfSk2m^z8_)qP8LJ&^ilKE#KypkEwv~BhqPR;^P#k9-S1if zk&)WFWy^Bx@)#}J{WA~m_NwbtF0%=geAn5GwC@__w_J^#=?`Z^#ci6;5AOD`Y^^n| zjcKO9xE)^o-SI*lYBmpZUoo~65kEz(rjt3m5CRNJgd^_!hh9A>=f}`0e~}e@{DTMI z1t3e?N#HvRQaJ#E#Iud=?rtrvo@4lD@`S9EYIHbx2NZnvVas&GAbt}I0=Mcuwvr$G z$1H5e6(;)+Hp$olm3R^+70A_;wJFtJSHkENF~#H~T993ipt10mz*5EB8270Qhyoc+ znI0b|O#CvRM0+*YK{i3cPsWzt_w#%=iA6(})eDF>&Ur@=!-F(7kE-g3dELsVV47w} z1DMR{Mg_3drN-#VR`f>#?oP>%f$&?%VU>GaihHm)BXiIxA7*Z6DoY9h7>A5e&SVl>l_m6F0nvXA5UuPV)3s9 z^Y%Bt!Bj!S^*qQw89x^f&L*Fk#MyNR+|vw?j$N%|708m{tr9XJ9n5 zb(;ZIHUz-O*##i1XpC$gi%b1P7hXm7E5FbQp+Rz%3n?||okjsX?dtfyJ97-gV|CKs-4O z4i>idH6suy%pnyp2M(kJKqPev!i3x?nVnS+tkAbw2pz1L*!Wx9CB29n4%77bU3>`Zqd=adQmH-da~&7hc65q zDq*Ytv&WC^9%MSvN)wLy`_ZBt0U*9UdQa_0;d(0}y2$B>E%wMs0*Oq+9MKc}^$^J4 znc5G??7Wh!oB7E6uNT^JncjIBJ!fz+k~I1+F(vRa`Wz2PwYPNfQJfq?=5qeIiQh4m zFzGGxl<&KZ{ND8RuxBgh>gptLe-XS7=RPIm@#B-l5J{{Nu}LDPugf{3{?NwZ4r3;d zH!|F4ch}<|wtdgGN{x^CUHhFaznO+)HMPYrisL3M>m?698!4up4adB~Awq_WUIO8% z!*ZkbKn!*i1~OHtaD{jMd{uob#J~S9fF+;iFJEA$p^5!(R36BBeK1K#HtaMC zL;NKmdJnW-I(hATHibr)x;lL~x?HsF#^zJjGv4LSn$9!qB-j~tzqA9r6W?WFsQ=RWn}v%tlV;6SZz4vTv1YimifyH^3tYnuMAwe_UO z-2zrIGIjm8iH_}(TKbFT!%^XNf}Ib!pT8%zx~h*Je7|vLdL6Se4+f^RoLs2T#ZID7f`rk7OktBe#^LU$6q!3MENfeo=cEsRNWpU zk90!Mq&4Rd9dm!PWTfZa4~FxNeEQ0(f__?%EIx1k+1*DbiuP1%zxQ#yDPZV+U95EF z>TvUHJX_wGoZ4R*->b;QWNbg}x@1xk8?6ae>{CohG*u?IcM*+*01(u00fsorO*DJt#Qc}wA&*Y{0SE&wx8K)mCt!S`b7Kx zJXdm1)sQy1bU)GjI*QVzY;(NUO{eXVJJECBPGh%v7#y27KFp?aIBz<&m+c%+lDzqL zM=`p>`(~PM(&)X5ZYAbD$Nq~e8gwPx#roB|y@Zk~Xhb%RO9VWjY#)Q=;j&g^0cPv9 zV<`XkmoDhNGhb7_Fw;@jFDu%4(k3Euh(%2dzTuJ`skSEWMP+9VzYrv4RyBh-2Zu0l z`WtZe2g0*l1i!;@p>r`!GIRg~qFvtadOL##`{u)zy*1Uq{1Z{N(Gss_~3va$Eow7Du?P<2#sUp8@ZqoAh zeOJ%(?}a!Dl>)l<@Aackbc)%PPhinlID%O{057KOA}In97dR`saUz>pD3cZXd061{ zx?scbd%8lI7lWE%Vfh!^hMzK{yy*%(dsg>WGdGI<+)#Elq$(K@+<#+X3N9viT#Nj- z-^ETE@X+A5dd9__?)g_$-Ny$mI`=0oogPEtgwU}TDX!M%WFglf(WX(C-&ZUejLx4v zq=$D7HaIy3d|j?E_?&h5yXtGAQI=lqKb%^dgdleL}#F+J{1r3p6T-SWC6%AhBX=Fatval9@=ZKG|b(nyI6JzWan z-}Rg9J;&wyEvEqAE0yu#*z%Zw2iM*5^vG9U&;1^!o_Q6suzwfxAYyOjVl%iT=H_Fi zKdf!75N@_&X!~HfDyWA~5HG0HMwiH<{WBf2xu31H^X8kS3%1M2a=0DBp^Wj`H+s zEis5V;pmO+7ente+Kedh$CeOkM(jhtw?zKrhi zZ9`9p>pf@r>SePy5%wBu`)cIRC3@$^N_s#100y_Ho!hTw?g7KoiQ^Ru#P|G48EiVt zc5LKPKkP5&?jzR{P)vk^1K|qJswa?2S6bcokTjfObwi^WU8ai|VwGlV+8q4+gr&FD zMA)KUc*EUTx7g!WyXE-5r%X^x+K0(dnC&m1SA(Q4e)SSov2yUg;2NGz=_{Jl!ov^k z?~~*;j0sO8q@6uZ)t!xbWnaV?W8-3LG;_{2>y~Jgz@&?AV8}6}-$DzI-j!L}gIHQ3 zhTmlAJR|5a>Otr`o`xAyh0Xf&`jd*U>>5Dfn!$K07fZzDck^x+a%6gWwfDQ78Nuck zZ~=BbOgq~S)`;OuQ62o{9;u18&*-qtst<=UA4UXWigr~5N5||QI}2=U<7&Q{m6g!} zF(JRb5%GsPlMR$rU8-j$T*#5X)<1IBP%7@r+Naj+K;J=9{TG_u7|4WSDqm)3d@A{e z<>b8^yfg#$s|R6JC~}?t_un`IUH@@I29?mcKYEYyVO`d?%xaLQR+{#OH_^OtCe@cS z#9|8w5T>Cq1K3{-0b9?%UEJ3qL4LpP+Xvuv#YhSjmTYvl_}>n}1n9cSqY$*rn*7t2 zb5R>=Xao?ahZk8Rv&dLnI=&?a(g)rLRu>%s@N&S>1t0$+U;EwvB{lZ}is))@8pj|Z zf}@beyRlJ;&@onx9{*l+XS?#CsNLuVy?$&m<-XvB0iTWSK_uja*-X9XF5|<8u~ttf z`)RUB<>N)6!~%s$-s5wx^J$&+rQ7?<)!w3D8)lo+{5O!GE=TU${yyfnN)&IFE3nIB z5-dkVlk8AsYdxrZYua?>LZ$Do{v;R!xL!IU5I3Jt5w*I^MpP>pQ;x@1T8WK=W3|D7 zwCAJZ2U-hkYXn%gb^S+~(|t+0M1!<3m-F zi)Ya~o5|N5*39E62*$f3EL zB!v26o@aLtu0d?vHJP!)7GE3Qo-e&VdY$n8>=doj=k&qGTuyX`8xcNPqAY@M{MH7peFy^$e}~rl*V~U2V+LeheRS9=LyA7*dTbIXt@^xJ zG%2PfZpZIKsH#Kyl?-(~-LD;`se1)$oGMjzyY#!X&4JIlez?D_RsrKC^d|Z1SBm3< z93-y@xE`^x7c~L)N@WK=Nb7wbzoCl;<;NK-8Qi;v5iZrN99FZ@`NqoayrTJrG4X&S zU~8VX2bUt&`Oj+$Ej&KJLdcAuga0HT^3tH3wM~<=TB$IjVed)|v92ta{_9vvFvh!T zD9o+&X~yLhs3YM}vm2Hx?xsrNFvg@sY4dezJ!n8$RpJk&2%-sM{^JK&0u3}r zp3|WWH+2Rl!?77w{_BjnyOoTM`W-LR4NP+9I@mQOZ}HIVAMVaZ!T5#AwFaXkQVW*K zkP9&|UOaOP;YP_JRv7!OjyHDDjp>**<1y;hgltRL7s1%hf8PxL>!5Znd5d9YfdZ z6#{h8Q3n&`i=Tv7PMr--dkf=+oA%}!lu-^Q1Y&l6+%vpV%?#c7h6$Pbh9jB^Fj-$< zMjx^(##F6v`Ut#=MfW1Y!nZwW9I*)r5ya1hgjz17-%T?hpk_6_yj|!PW%}M4_IF|K zNP8YXW+o}^=TSWQ^=f+O8dBSzg#J11Y5S@K`cm?^#m~MciyRKd7mDjqf6$Br_}q?u z&0*{KH;I-042Hu84x0pMox>tQO^eg2s5HvV&O3@_+yyWo@9jL23wxMU_yhCa+-Uci zAJ5)!(u$)1yc+Bs+LqSczkF5wrQ_E7fAM#z-#(UJK38tpXeX_dsEbH&Y$9<mc>)N-F`C$HT(^Iyqnp`x=4Km|Jy5)XGy%@)yrL zndO2nBDkr`saOR0B#O0XGczL=KW&k}ynFYEIm)`4nlxj2IMY7U^j0UVq7~|SUQ8eh`5Rgk~gLHSyG^hUAjr~6743u<@_5cESxL9=RU5S~aal{=b6{V(f z%BUdcB9YOm5a6EOPWM(3KgW{9=$9QCqv?eBcuC5v5hU;OUK&zr;7kS&~Dmdpbe=1 zmaW)92lE@ui-***AF-tW^7?nxKw!ji@GWlL7z@#EWJ%We^cxN{{U(v}`paKGHj~fM zeO?a7Pr!mE5h|K~quxD_r+7(XAZuJro~52?4KU7}S0BusX9qR@HNanv78YmZYNT`<~3Ap{{aJ`SgAjgo0E=d;Goi~P@BzI~s1o^4T98GD|R zMOXCeEo$x~qy z#08+`unbZO!-0PdHHmu1@D<}@?cbY@f`!N`f`bL={y_mg&dcX+3Q`Dd(s1xWgzRr3 z+uNQvb`JdY(fOH6i}S4({t`!`oE}AogN1r1(sB{{Ha*Q68iY-NPxF`1Q0mYA6$80$ zvQY^QgKzag9Wx(eS7;!jRB%@LfHA)Nq{!aQQH~XTR!SqOs8OvpUf#G8ZIX;fyjm$5 zrb(;=!H&)3F!%eb^d~L7Wd#k5bH6K!iOmGpqg`c7x@!=jN*wzK-e5d=OtTgx;c{Dl z*oT5&fQZ}tnHGUbE?M<`GfX8PH%K4F#8j34E5_&ArUE~XX?$y^od zy_2?j>vZ(mv}U>bbxybxaV{L>(%J8!Cb*=r8Vt(mb(SOPo5ew+iWn%${istw;zGtH zy3pXT=hmZ11yrNr=z~bZdRW973ONN8VWupRbAJ(H^^!@F_uN4=gea{uSjgt5~TKZu75ttgB&q_R>|FDim+c8|y1Of}!mQm1~i6MY~!+3JsKT?Ct;5z3RGfuR0$e&irjg^dvbeag7@t$!A_Y z$qQ1Mom2)i`9M&a_(=9EtInfx9cR6o2&3qD)?t=!V~Q)eO4lvafzB|b5O~sF(;#Ji z{qzh?_y9p`UU!fnqGR-)ZvSeIje5-|iUh`r0K-F}MoRSM;3>T{=8G95*r$aD*nQ{L*<1 zF4!ETd&oWBu0GxoicGU6LF@kN66%?o33%audihWNjgszLX&Zkvi?Eea3$;xUO1JiK zdo;UuPIL^k`h5~D$EPKGSwr@ORo?mj+LW2nCQHCrY&nt?W5;Lu*B}F zoaWS+p7tG0dEnY+ky+To^Oo2Dnq<(9AbR~5w~5shPt)l;oB~WF-TQLclhziU<^~Do zS7LjN?TjF^dl;7es>5^xz5Uxnk)H-lGENP`U)SqkM6{~OT@Y|U$O8+0D|!yr??RIc z?Op9j42;K53Il}|0*#*18qi1VH)odQpv!NVO4(6Bi?-J`FmXqi<_m;M%gR20n|FVE zDYrHUBr7z5wucoZ-Py%r_y2Ii3rYFxp*78po_?~k_i=E+G^QVwkiQPM6Pt})mSe`C z&PrQX&lR*aO9ZsV>5=Mg9tE+KjVOQ3}@?baUZg%>i%zA z4M8!T-^nO};-&A8I0agem$!u7PXoEN(+toVV7y`w9+=IFR|k4poWN{RAV+~h-)L*k z%!%Cn?tpvXVq{{HKyJJG9doru$Xbj8;vUMQmtjACO>=S)WpLnzqUbNCu)V$Kkr2Yc z8Zbf|<6HJz^#es+TGynMH&DtFsieTHos+(f>s32osUZKJNl#;vKtu*_!mIbp^%P}b zOr?w$DF&U^-3bYwhF`r7+3ek2#YhwNYtb&n*fu^FpPmA}B@-9d$q4`IzoXaCY4%WP zk(Y-JUMqdH4dmRwy`WZ~Yws3iKMLXfSVsM5UD~g^K)B7L01y{-u-Mpnv0&$~nmM3J zP34#LEuU*VvF#Zk;WVi+qA!gwHz$Bfw&7A#yY&oFc?eUt2pOcj;fVd4M z{PY4FK33xq01N*2H~EEy38ehLZ>Jt8zb| zX3fjwTvqX~cU}@r>MSbJ^oo^Y{<)GRDkvx@bC)-{G3>j5)J|bHgp?k@Tjuv1zx$rV zbhb76T0sGobxdpRyW-ITsS=qZc%I z$8|Q7Yg{3WhYxyEp7p5Dm3h;YbPV06pEz3QHF3{_oIU9-O6XdINlz#WrSEa~_tk(_ zAr*fM9*wI#9X9zYr5LNM3mcvEWI@pKeEC8a0QbtB3PL1mnxWP73xNPN;68U&_T;P2 z;m%Ys?!`*!filQWy9iLFJ?SjDc?DUk@Mg-LhS*hp#j_ zH}g}k(sxiReL=y_@?3eZ>v_b%SWJJGjKgH&a+|ws$GMMT5Iv+GhDEu z7KQ|b(*KH@ulfeubs#!gupK$dwanDCkNZl_Q?rSoID*n+VY@z{`@Y^J`nA|S&sU_X z8w!eZcz)3$*$g8jc=&wvX6N;uC&j3m(^$3y{CIBHn5M{;*u|Xr*i=8#++x2dp~Pdy+Au_zx>1)z2*FQFcJS_%|hqxT#y&& z6wC)=gGi|e(9E_z=#xr{EhMQ!x-Me8pKI{OWj-q+%NI;Wn>{pP%U!N?;Z%cnrEB@vYl_zZzob-*IU zFkFvP>9I>+%gI|V_&H*$;4g~6VPuy%JncPl(;2~Xd~#S?PslT2XEvj@D=@T5JG<#d zi8O_Lg28j(bd^bKYT}h88?j2|mfbH`olPimn9^PWRiR<-g*u+iDb^YvaRf8NJ`Yw`S&B@2Q1QIPA5D z;ecC=>10aoT1A9 z-n%R}#EQf6hLoWwp4s#hh}3Ll|J+T_x~`x-=QV*axh22k7llEf$-siZV_a{GFN;D% z0}VEAW)t3f#Xv1VB_u==L|rYrssR@T}!I1CxS>0oh)K zh1GXEla97&AsL5jW|?_qmib`vvU(XM)qV9?It(B&D%Ym!B9AQ!P12m=jjgE#+j&X`(uYVjynx80GIt&$*;W`{P5d75xGS zo)jks(V%&a-a@gu03+iK7?fXdbHk$&a%mz8g-Up~y`#^=rJ=%yPmMhOws%9F#B3#h zdLlMXbUU-TT#%UXiiTH;3jDb>7?&#`^uLb1a8{`74hPs9mE!5Tm+$i*B8V)8fJIm6BC zY#pb#(XTkx1oX@Wb|U0q#iU5|I!{P|V-FJaoNY1~%cPOvqt?4N9}>WOor?fupc&GfnumUo0So>Nz!>Q$}!bFyMaVKV^ibU8Nj&0-74I6Lal8 zjiGGc$|A+d5wi1$RCuRM@m+(DxaswtQo%q>pwMZ`aXGcAeReoonMuDT{hWQf;Mt$@ zsa+vj8hKrznuTifK@h;`{5vXLC`Q(->9u(z7B1dEJx0rH8VGR#VKK)eVTeSV#!ak( z9wkMevzv`vQ=@DuYD$yQ`2D;NfMR?WNCqk|2-=@RR;U8k>C2jw?~)@ZdP!$eR(ByR z+`0}-w!=%_dlo(b%K{K$*;(xc%heK1x(KI1GQHbAEGb z(R}#*6ir#Ch~$dS^aZ}KPg5zQAp^vSF0g8X=mYOE9=b)pZ6a_ac-J?q{31h(Alq}v z(1lTatUk!6WcRW*Yu)zfq=Dlg>-*KGZo?YucoEIpxys=mQYE_nQI3LI!r|hz6r)a8 zbu^L&mUDi$Rn0gfXUW-_*SD`c7(VUqKb6Jvq*@MWPe46Yg7uN=nfJd#BO)V7 z5hR?cYEsa_pO+<&ms^$PW^NswP;6QzcpSJN>@WZxz3G{FyBzT4aShuNJL75!$F9V& z0V+NkCG!Rp*{4-ksFI1Qv$DV_Qq4MOZ)LmIwKi|^F9wmhCo-g7c71&v$wRIm8l+DX z_yOtaJ9V%n+hVcbInvBMa0-blhNqa_Tu(n3siO^0!xd_mMTC!FiEdr}C57iQ@jMas zJe*2;Q~e&zY|p$>?hleVeSOtG0_;57T}6~J6SeRiyxONhBS(BdmIkk_U+J)T8ta)v zA((a0+0=UV4@q@ZWEkIC`$egiKkPX+;4alzpsnmy{dwt2Ru>vQ9;|SkNg{#6`)N*` z`m;(=s_1^UE>-B-RrsoamnHSvKeP!V5H=yqGV(7#=0zgt`ZsbtPE}sA%NpVM1u|AQ zk|&(wE5UOhvH1$TH&fE|^UOcCg(dJEaN+wX13Nr{3j(^V>b?|SSI5%^>5VGZPs87j z8A|8HKl+Iq@Y4eH9^qy3VLNz7bkG1be;Q{IX+WKV(6*a@I~$einA9fv2*(-@^EGrG z?sMBcb!?<7`XMg1Dk_*uwAC+}KNAp(zG0S!rXs)-k*|s3!eCXl)6Dzs_OCLgTY7>+ zf#^H1i7vd(65FCm!F20ardHdj*>|XiTK%;kGqdgAp^v(0s4;|QqPl&3HXlC6bOA+a z3Y$SVBa9a#-m-*=KlShu^mT*uNzz3HEgz@i*P-HkVJfE})NY~eeQi)^^Z<2)aym~j zAh4=ZwdV+-z3EVVx6mIIotKjQEq!fd}1RbmrSxN z6e*}VG*?iEhbEJz~(DqBM+Wo^( z_orj2Q)=Ppq0;YjJ2^iuA36S6<>>D(S~Y>M)m^}uGQ(qyXX|&fQ|L8e%9N8~8CvDR0t>qiqf#OADh1N5NBB!*e{xs^AYQ&(4BZMhU;{%xX{Cq-6D#lp3caGe#P zzPBxOsDAI|Ui>Qw9C(P%kB@~Q|xy;5Tmi_%>`tuRKq!HgTp%NL1h zx+#^vu15m_=tsGJJ$QFv|GLik9&Y|<3c$=Hb^#gvJ%YWokyu@hFB0xw^jM?`GQUWD zxxHUZ^707ivuKlOXa25D%grV%d@qonv|&UrQI~neF=oql4~I?}aKGcf{%Ney$(Tm7 z_Xs1I2NV7Z!}OY|=XtkJBy?H;eXm?QgU_L=2Gi4auF4b`OU`FF+~3kd#jzm?sI2mp zjn^}YU!v<*K6H;}3KNo$=sUUP#oNPzfI@!bpmEix$$34ANyFaxhCs-oiQrEK^~H<$ z8_h{Q#y33sB-DXjxljc7h_jn&!I{Y$&3$|16a;H8+fYP&dIWSixB{ zhsvB6pZw1S#p7>CU_p;}TVm|&?8d$)GKL8`zXb7H_N}t~2qa4!hsIjI;@3OTLjP`V znq{KnQ6C?L{Th?CbU2?34Vbs9Y;Op7^iS2XVQZaUJ-kVynwd6PM`<7^x6At4a(*kb zX0NMG$f_$IsxP)mnz4&0h8614#fJ`vA$rOB0)vFXet_L4)bGzxV|J&N+t~7?giFHR z8m!4+pq95#h%dV`6CkZ`NmR(Y`w==+-2?q8ri=RKXja0xm3r|M5_Z)M)9Xwj{EU-z zT+jJk21VR5WP~aP{3Ob%`B@ud_oCbW4*ju36F0av`{H2(r2rq4P`TL_p~_J3`Abf_>3&_Jb4t2STirn!YBn+{#NuvV=0*+BSbP>iSA1bV;j zh)lvLX<2@Cnf{jO>tkSNp?02_d@W`uv-&Oy#t94h`BQ1%B90Amxj(NVhSrEdMucC= zk5DxT{bvM44YC$k24=`c|6*DeDLAv0a17ElgB5`JwWR824iy7gHlQc__zZO4Y7>SO z@HwEuTML7rW#rfVS0x{wH7hUQoF)RxAaFqMVG( zbeNBM=A1@#1%aJ%=qMNr8U;svhM$P%;axyW5DO|JGYsPBJ+;zlD` z4tdw2$p!(8M|bO600*s~$%pE*z2Va}nJLo)7(598<$PzrV&~b=rx^n-FZ=1h`!>6I zmFr#l&l>B8i@*;C)Xl&KlYA8G3JtQw4(uRY)G((e_?jvefmz-lf?s8UaJba`Y_bcq ziXtyx4)d7&SVf@SjK6eeEtgn&V;}QY`uuxIY7N`JplM84QIsl6NXBWYES%yXj2tDS zp8Ajq+jd%aT#G7@-;43&?*6{|48Kez6ouME0Kz%^C*#@Vr*$oKCL0Bnk>TMWj$uG? z+Pxao42O+L!7Z|NW#RsK4%DdD13~-Xs@P4stGnvnJSN%6I*wB+v@>-lj zpVQF=DWB*{lc|V_iIrw?C|4cAz^xnrtYA16We0F`Cf>TuELRn8AW6gBq5u}*a;e#^ zfFxx2uO@4^>`zV_O^szDQX4B!>BcU9XM`YNm&7goYssJ&5yZwOF=9|fG-uOZc9&)| zz<_w6XfP+!FR735xH30ncMo8L3Ag7ra%p!uy?PgjCZ{{ipo^F2wze$)b^|aJ_!~2ttc7YtDPndDsbJmN=e6 zP2@fTFzyYAJnjiYlP=N@XdQVQ99bEPOy`?o@AxV!9k3e*gYy1~Ion)Lp8^U?x^AKbOt8 zZd-#B0eC6VDfS_TqszaSJZHCBkG)dj>`h7q`T5hXgSYzg8WKBTIGL?5%u5bCf5fPY zq%b!#GZ~T0?oMXWX=!aW=u5TvpdAZm29eVHeQ*#LY3LQMf1+e#D@)}JFnH-{xxXJ4 z+FYjAGz$*^D$ds4z=Tkl-T(}sgQ<1Bi!h;8b2MxnWw*sU?clE zz6;p;*Mc!^@Uc@^{n&Z@acKf|(LTV#s>ZhY;!-puHeaO0LZ_{_%j=&!ZGaoV!NsjM zCdDqPU$IckngzfzOz<8cRfbh2LHVO$15T0%^vdZ77{_3%k8_;#Qpu;|kqvR|$EQy9 z*qd?KohsI?-{0M}?dQ%f))Rt!K(69n0(OL|uxAZ$)&F+Ju9SlVLqeXd)K%FOkCzh{ z--aEbNPlQ*5{T{E?kEOsU{zh+$gx*YX$YT;uCHA>$w+@Rc3>tXh7sn1V#eYzQ}a7* zVhUZFikTTT7=CVKWo4y{xurigNkiffl^czwA)|w!A833k3|o7!$Zm{iGz}i;b(fZ~ z&1|Miv_OFMU{NtmhdvpU$HWk!3Q^#zW#oB5hK<((ksv;fys9c}ieC4Xxz}sW34Ltw zqMx%yJ{W30O!I1H1Si_cDBxkt_BH@8TLDC!?RjE8igp~F*{9JoZsc1eZNsvj(gEkE zma_#wmC>)%sk8Z#QCOx}D%*nNwom-5ms{$UM>6Tbqw4y`Ydcj05OWiL>!HdSeu?yt z>rfM|CycFX^ZPNgue^&gOSTBvm}wAau9=jUgzw+BHs550dDUl}Xa3l27_VVOShjT& z#MPp((HxCJ6)>iSAUCCrehim`YR16v1r5-rSJ_f?^7i;6A|YuTgrVxPKy-DncE+J9 z<<(!Jd2!hE>%;|cV!RT5r2N4CD8R;MSgx+O*Iv2Y#uL`xA9gCqtKsAA#b>v`^ZdCk z%}32e`U@G!zV0wI!XB8GgDJB(RF?qqv{!#-)q|v%=(AYs@&5|Vi;IsB*TVOWIKJVv zZ5TN52joWdkWrpoLWLSXhB^>2{^>ixZ5C{Xz8d)F8`hzZWtECe2#<5t&qeL zasB%$m5-`+VSe6JR3Vw3t58?wXq)bG#=w#xF`D(3Pe;(ZD4^T(3E-+pdgxEz@i&zW zvBsgKG^Xv%@XtDTjTad5Jd~bM)ZyKg2Iu>DJh1TgK-@hz+_fJ`wD`14ll2i#>Y9pl zpIz52Q70=@Maji%j+|GB%W(Nz*ozpiQ51Vdsi44@N>lOkUxG1sU|=%>i}GR9`FFr$ z)DPz8Eb2Su6!YKxbkQ24$lKoR+p%Wo^)(`@h3R!DiZ|_bh3U0^k zp>SI>ZjP;KPUtl4+WtPeRel78xAl42ln#GCEN6G+giVLL@R59ZyY_4_*UkN`oc>^a zJ;*`HbgN`M*0!ry6(?8&pe=9mFiA?BB_t%I+zl-{C6%iynM+d&s3eo83%`GIcU3Fb z-q`vPQ>qcgf~W9nNZ<9?l+46X0ARby%4qH{kZqG-MREvKl0Sh_^`Rrwdw=p%i$V&E z@d}ZJJZ;6W?)!5mW!owe=iTlQ&64$8byV}6xiI=5u zpGD02z_FBFx3kXKc3s6)Gr@HjPU#BixR7+SuooQsqcF*h2#gKRrH@r-<59Q_RhZLX zHYLre5q3%8wGiWx&tD?d9*jnJ2T=tLQc3m`V|L^;ScsTnlL7!}FPz`uD_vrm6ptI% zX!Z1Rk)~~ZFjHz?qa&eY!3Ep*Q}wqymbR0}uX@ri#U8GDKWvmN=qFJjK;b33(qVzm zqn0JAsOy3fUnFS&Y9cz$8nk*C_Otde8!v!qa>Ru>WY9;j(DS1#od$u{K(X_&BN!Xz zSL8^DsKuc$$a$bRKqu5SG^#iA0UHMNe>-RlZ^_GciDyGo5&7JL@?C$Lu_Lv#cwDmk@#W@O`rY@A0reUHX=e^Pg$S7-9?o>O7}CNmy0 zZ+SrJ%bqF7fA_>a2(B%lI*Eslu77Z_aQC7#MMM6?fHye&4PuD*tNsK&*R08xMNS{k zRMgP24t(F%wj#c^-CW&$}#0`~5xL>lBn1Pzt==-M0)lADNr9y)-QTyIH#k@Xw|@ZxX!PtAX~w z(!yfAqRqRC$Q4yhlbIk?a52I5_sYy-aWpgIjwy$KP1x%rxUD$P7wm=jjIge+@4B_b zWmBL*H!^F(@EFaDF89BZy-SJU?Y{|`51@zQB`M_Nr!Wqehif$2&qG`rB1e`>Qs3Si ze-fYHqoSZVTwxeOWbX(^hbvii=8w=3LVELRc-4#L-pIdNQrU-+G?*+IyyIl>yjB%C zy#?4^Gfs25-j5IWbCn&aR3-11LNux;{qWCsK2bnaS6UQgLVA}rFQER6QzPP%(|nLp zTSBoyEN`R)hus}Vj!m}8h0_1M*nu!>Mg(-VNA3RNu^YfY5Zs>dO(C$B8jJ5x5xAea z`&QbmC9<^{eos@u$ikdiL{B)ra=Ki5kYL9&(|0l#aMk?u^!5a`fMHOjT;Z}69KQi1 z+@p z714VVx|GS4wu7iZN33Uu#ZoU0O@+X3C;D1=6oBJ)7he6+8A|56cN~o=8E`I<&6@{E z0gyRcaCx>;BkeNccwoIF!C#L;EO4I{o0&sLb+bF7UBpjxXQUSHO#KqPhiPw{2IIsF z`usKC$pe$Ku1+h-;N9j*+Fy~<)aZ|iM4;&aI+x3CWJ*o#PW9$pfYulp8Fh4YBu{_y zy~2&N{e5C@*C|A&NnuqK+)jQlz<-%OvoP9SG0`f^|G%FtnSBV`o+&4N*Xi2aR>RKh zCqxN6z94ZSSu4+%3XXTbJ9O!6xLKy;M)x0Nhljmz`>iYc=SrN1r@g`jx&+i({~PgZskDBBVG;qZ&od*?@>j(2`okar~rdt#63;@;-vs0$mDY% z83-m<`ResM3VcC`g4o@0Z#V_{xv@C{*jwF!dhmNNo;GVCh#G_OcMKTL%Ob*T-LP(% z*xFmKgax;y+mVMY2$*%=$QwB`uj_mJJH(bLU??WD%q%P2UP<32*Mvq7DI8+{{`?hF zd8ss7(1x@z*is&<3kR8_LeJ}yom!|44-NGNOdgmKwV9LsZvI^ZNv8{nc8j3f=CK9U zxCe+EtA^Kaut#CzqFD8Pa2tIYp%FSrD&S1jATL1=C1q=BYNCQV0AK`!u??p5ZGplt z7FJu!eG2lTuDA0N07jZ}r=@d&Kv&cGF_Fh zn$#W!tw_QwCLGi%yn3BLH$|+7yi3=-8Ub@=0sIJs5l2e`RuMO>iQP!qL(v!VaeOXP zw9WmyiBa)EE^BgfGBGhx!s$*Z28cg!V~DCDr{GSA`Q7l;^>Ge@>^8!U zO2bxdUEQm*QL(&kpf6bM@FP{)+1$LC(s;e@1`w$yQ)(XRM;nPEUHP4(qeq~}=o=ga zT9`A=)!-lF&>^@5#c$Zy58y@t+ZH&@YNg6Fr1_7v%AY^eomZ@4jGr`qn5&17h5jX{ zIOHoSPU%cU!1*>aq+d2c7Cn0XSNd*dD0ZJFKYD9%mt??fH-_mNZM5&vl};-~)g^IX zrU#~DBP^EIiSE6zOOm_yv{w0^Oa>Pq4J?S);oJ9~+0=3gx55WHL@bJV-?*KRS z6s=)RIl(FNRn-;1S=-qEQ0CtOS_@EO9Rvx0c@J*G_9QqkCt_>{bjDai0~}q64BV0Y z*rv8_S@576(55(gNJ~qH;WOew%Wk*hRQ!LXjDD3RDHwqHQ%+^lQe7)eeeXcdiHgwy(xH^}KzKwqS_IzI=d_bZ_^*9&3WNUNt zH#IkiKmf2+2Z6M@C_L9CNZJFem7Lt1DJe2Xo0+{Y{0$F65KxIdGZi=Na7Jt~)=$%? zpl|>3`9A#1;>qPhrorMn<_$g~y$pepqfBA4iIR}Qfb5^b;=B9d`ntw$9F<->8-III z=JPVV!&?QEeAdI*GllI&C}5^Jf-9sc?ZQH(+4f@`LwWHuYE2pKg)bpgqC}9opSI+S zKSR)xXuujclcM6_z*<82Lzh%7z}c0-@1&B>1JZSrvw1}2gm=O8{*9E^_S*;w1_olM zq|?tW5W^r<|D!NRD%|S^Xn4Ai6<7(RCVy;6&Bq|T{_Km1pn)eYL{Er?RVlftQzC{r|E6IMwE((@_PcHC;<&bB6A2{`lmz40@m`kj-*9O&%e|Pv6Bv z(M|YEMGVR=N42>a3NQEx^GRXd9S;q*lkY$H?zn7p*TbuPnlv8ms4|l{&BuN0;D5hY znzu^M4Xf7lIGCR-@Qc7F_55{Z+aD^?ZjRfOqVO`v`^&Yyll!wqvEwM-?1tg!E+&+U z&aung2B-s@3iaN$B~4t<)tg$&IKHgcXV(i#qCr;fy1GO^i;nlhSkZ8qvalesz9>W8 zRSlVGx5T55Du-%m@#A z<_q&LzL)g!KQ1uaDLx%7e!aO#EGc_8%T!4;o8CO_eO1jR{P5uR_=^pD#K6S0~^KF%n=C@iO;?9bqDGB$dA{;Lapxt-j(Im?tP5wIN7T6w2GjbSNS|VtC1Q};m5i?peF%6Lt1+$ZSL734ZT#>9 z_YcE6a$&kM^Vijx&o55XdP_T8E>7Fm7EUj!n>2R5L_B6c{zN?(ds$~VD{FYuReP!a zxkm4(`?A7Vq{^(i)Jgo!WY9K?XydEr+IGSt)o$@|tvqHkBBLK7Q_lv+=@+j5UOFHj z^eifSxeTUI@*ItKE`J!`aZzJ<(2wVTn3R8Cw745Z*udshDYHsVE~oNy^p)_WE7FUW;+f|>c z)sjre$5&}EQn7E!zfSwLdyAKE#s2Q^BAp*i@vp#BF<>4hZf#)@Yi(|!#wSI|jH~er zVUkYz-^lfwq11I4d?no;|K>iMW}K_-{kAxjg@8+rTEu64g+-k0O^ff9v5eaKBw9+t z-e9@p83u;&^(y~wCu66XW(Jj~VjNV0&DilCF_f9~B6RdJAm_ON?@n>|d(zp|4;p89 zwya-Dy@{5zx8hMF*6|DIQx%IdwYkyd3v^RaVYT7Qj z@GkW_`6eP^)c)pRYLx}iSHb1_U ztj=^=JS=Bu_Z5!#Ty*L=F!oxve!YjBn7Fvmer!u~`%<~5I9hm?lP9In7?MLnjfwuT zVMo*JE>N}@FDdmq261(r4vXago zMgBs8mlQ`1`n|YBJ7lwuCpy~U6R;hvsYfg%v&*qF|81meR0n^WHsZwd2F#qme-1S^4~BIzjRMm zN^w}I!B5!mb9guI&)NTdYmxKD{wOsOR{mjY*!P(llB?F4+URdA7QAolj!h*FSvb6s zaEFt?tuyvV)6a)lA^T0-LU~oyHyPoCd9-};mJ=Ob8JXyz3>r!h!l&u4uKGw*?X;y$ z^oVt^FkXKI=lS{F$!w zXZYR!=QXhG&dkm=*ZH3FIZW9N-IJogq5w}xPQ=HzZ5t(Sq&Qx{%sBkC=B-fRM$EI^ zbLgsqY6IO9bT>^sGs=e@HSilcuRTQ9L^e+bHf$FO5AK*a>+b3rlF}DWb+GBAY~d%@ zS4Mq?BC#3p`}r%;k9$}^Ap@ySb4-+ZHC^qfJAyMCu94q6fvx5U{e2{3<&wDes5M3f z=dC`*ei^l`_LaZjfvDxpGkFhKpzAEg_HX_7Eqe^3}C1OXANf7W2C( zif}g=nk=Xs8(sCfNm5(3c4}y zLOCYcesssp63TqpU@*+_tI_HKD`mm-hrPCb+`2LM)Q#`TD6x^jiA;#r_}vIitI?Gi zRjOsT)EGE7rC#vs`6%V8t;QO8J5G6J?M1;+m_4Fw$>H2B_hqHlYjCxS=n=zrW^r&f z?n366g#ApvtKr{7Pc@7{e@5PDvBRrYTuO;5n2Xsnm%{PlT&~skdA;4}xsTF5Td3K0 z(KNBs_f#T5@j*TY?I00&&s@;~ws$ypE;;uHT~mTC{ziu{H+z&?%%t)s7_j%<5IE}- zqKX83eX6DP?+#0om}MI1u-myf!A+z2T#i^9JhhB~5FcxV`D>yzCes>h244GmQ!n{G zr^|f4HS{*$sK}0AkGe0*>*nU_Mpo%lnZkvh-&_}2PV2^BxDv=CCd>D#M`3o`!wUWs z|9}5FSb}WG{B{Q$yqkNcF`A^hF6~WcPB?RZi7l;guZO}3KeO*ORSEkodS4}g3=(Yb z(doj0C)`@una%I(J4dhcqIC{X=Kol03eof*h>RKGx884`I9<_0UW z__z^XdczIY)HyP&p1p3?)qYBW$J{IV=u7)tyj&_vN$!YhS3jZBY&@m z)W8ETqM7bJ&*J;L8|+T$?96=KMrJ=8jE6_=9<^*AjB05*<3`1yz6)ViajhBdh6ta~ zQv>Q^E;4K;DL^+mu}ni*W$5-=?YF1liBWlYrnE65T}NRJO~i5jg@A*Y`?bO@$IQm zy;{P&G{z#X2=tbL>PS)wii?tUjp^R*S2R*R%$<=FN<`DIkIt)MMi)OrC>PBV1onJF z?FrYhaD9WQ)QPoPGN?*U(9o1_S*m8N-#sE>ia(Qmoz}Y?+*YwLeQ{;&W`;4=I`-MHa?p70 z*^?&OF$LLWA=f1IPuq^;&Yf}M|AM(3|7+|nGYyk2s zSvHLlV;(27a@SU*Oxb3s^2dWFLjzG4o3%0_Ghm$Xpj! zzFURwp+KJ3E2A|L%_kxDE+#?3B|-a_Y_jingQWqnjyfdaIzN_%Na2q;#m7sE#dM|w z+_jY+ikXu4-5(d!7}6TZ#QBk7^6$A%Cx#d;o()Y3+5`o(pLlntL(pC$c-x(PzK7%> zxqWEJBr;3?VLC6+N@?}i3mEwzAK5e4Fqv#c`Wuox|122)#sW6j1aV-((N`!Z6exEI zdHT=_@4d#nx8RV_Tl3wWM#9k2ejfat=kI%ABALRWEfah~e;GY8QbFlK_Z^d!0hXMn zc-3M8S5R7X&#djUb6 z?AUu^0ka7OGRC#U%RF4O9j^jMUn!2sa*^u;>87XhymQa*-I93CuQrA zz^r0Zor!q~R?M7|#NYP&Wf7=OaIdGxf{~)d@%kXq?2(7Sx@pNH@`oO6NqH)v;4_T5 z{lhoZxNmsiWWBTsxP3A>*)5AS`00AF#rK@La6L#6WJr zACsnQ=!dKf?TjIXcR1et58v0r;qbd!y`$wurtE%1B@h-Z+%2UW_aw;B`O>wJI zwgLfcZwrzdf29s8kby^+h(x8HSvVIOGeT&T7omw{uwCGOz2;1QS!Vt7hkwR5%#4@o z!GjO;%?+O#cpMBTSgU`XJTKGwAE*7iVg5`>Z>h~Rylq>(1S6!ZjOEQ~8Xun&m*y^C z^FiOZ+|;h@5L=>dmO_2Rm4JYNu~1f4cB2NTL^DWj@%S8?DuJ1pX;@*ap|00qsA_Bj zrp;Z+2ZyC(WPVk~+x+s*fN0+Jc*=W8?+iXH@O(eiuc+SrEB6{zB#rSS^w_9XY%!}P<)NMt-(2q)y|ZtnhUQOp5u zgOdS>j&5quHZSDw7`gEm*t;^=LzqY9&9i9P5OXuu%-zxJ6DoL&^k2D_qX_Sy9y!b` z{a7x33-)0qK+D_Lf)Kz)3;G*#ja!h+8kP_Pp64Kb(Z9;*-bwqh-GPEfa#Hci zmeT9(h2M{k7v%jJA}y!RMi0phq2Rc4bmYaSm7qJldBT>nAT?XhA9|&V$u4fwxun4z z5H_;Ni13_+m(AM5v67&6jJ{niUZ)?=!a5skc?8Uygd7(0L}vC5uU*fHEsk;sz|uEE z4?0!cWFBulA!HCpykFci`_|F8KUb-iY8W`s-M=;OkC*7z85hQasoXWW7t#MV3f%5VUx)&=8o>;d8 zNq13(JgPRhU06-fzBB}#q%tHfJfiv0Y%PVq}c~A=7O&Uv$fEf` zNXdQQ%f_d$*IJy8&*vq~*{cG1n~hEg_OrDDw9(utyZ9B%MLT=F3`jn_9=2BZ>xhxj z-YWL^iU};)wJy#o40uQ-80T6fT~FkF*d>==CTS^@OAvW@BM1?qz-N8k_sKSRhIUWK zU&A2r1tZZ8*2Rz?Im9e(af=;?t<>;g%};B{8cr&Hhl0{d!mFb7jZHo1CtkKH!~de3 z+0DB}K_pt=hCW)96?f4neM-ECL*f-K=Dr8V{!}_-^Ha6Dj`t^g^%V17@)-4h_p;B5 z4;`--E6Qx!Q#!r&JFvH&j{l=Db>6d!!%=fk4NGGG{5;e6x2|BHG$kmZXbtO7T^Nd4 z7P@yET#Y+*2DMz{XT1G6ml>^i47`iD^$v=4$g}tI=%=?Z1&)5#Mc?2(Wu2lrGsVf0 z?%4v&n_>Y!DzJQzK|keZJq0lkm&j1MBB9ot$7dDbyo?%&;jPdr+=CL$oMC&)ett{x zN=lZKFMO=R--%llpLn@*`qll(gL^=WxAsV61ze^zk$LBw?0&?IF|KzqR|*F^=W50; zVNPK9iNW!!(DRXbYAvPaXwEH8w__5h65o;?`aZ z%%7|dN)DP6S*97Y{x|Jc4}sG6*Q(j=v~+Y7l3OSfpr!q}_WIJk6_0Y27alM$LY*uB zS}I6nigAW|%8APo+zzK&ojqt3zGrdYcz`T69{IiRGJ`V7%Sb=Dr$)tD?CJiar3cL~ zIoSvIn~xXf`u?28)60~uVx)V8DSG+Gvv!^JjouRSp1PDc$Ob`F=Lk%b7c7=5%Z>H* zmx*t)ySIskGwfGa2ysbYDsnofC->YuIk7KF!yn_JfP|{mV`C-B-&IvMs@0j1OC1+I z%T_$&-QKh;oV;Ha)IfRrv6i&ex?L8}WH#O2|2z@X$EAg}uvg;ra1#s)zm3v&rY7g8 z3^RFfK7HYHW+%qE@jutUf@ExdJLS6>)O-I!i%6Kg_Z+|U!+%bK5D_LUM09juEXd5f z8$zjgD<8F14h=_j3HQW*o50f+MM6vwV_ktL*Y_jj#+&1GSlH3Dk4$30q98j|+WzT6 zuuj^IgY4QC(k8Fu|GL5L0Ey7WmM&3z^)%YWL9Ej#+UR37Py%dSlN&F++#avTf!FGQ zsnuv`YTA9hbGD>A+jq0VJucFDSqFRz&}m%w(ra-{ZEew7pzx>KdY2AswEX>s_=+>ZF> zmh0d?iS=?T1m(<>0!A>@;9RNB52;!0Y)nn%vmspj;9-?L!o~>NeYw7#s>ioTfTWtmb2c zj$N^H)6+N#QKvlKU{%0AcsI@a`pNyFMG#z`_u5X?QQKLO1TNCG;?D%ne927Q0dXaThdKZE(&Vt^ z66=AP$jBqZ!vPbjNjp`0`P>XWIjcS#3c+YYJ8*EwlH>Wz`%U5{|J#{xMfAY%axyTC zjf}|p_-EiU^nn6*(VQQL^g=-);1rt{%oa+_nCvLg$@eRK8Xw+10bmyL=qZ~!%>95J ztqzZvW!;2aU)Cw|%|mMLYp@M3K?vN`sh`?daVg(_pF#6G6c4AMAPIK*q%KKfCb4|W zYSpG;Ip<-%sbqI1q6XOqetx7c8p0`WqT-va2P_8FZurF~?-ozDBJ=R*sG>tq*AtUG z4<8>_Y{!OQQFcePl=WxtRPXGd&gVm@D7+iVwEsR0U>NFrn77^mV*1Ji1oLwCNm50s zyZzKP(+~t#h>1eZ-5Hoc{Rjz-;d(Y``I8JEwQKDWF|es z4nHOqZmps}2BDGTavJyd&PDP1K4Z(Gc{2N7&MzNf~m#I?dq}ZseEX0jcfnaZM6I!NhOzU1H#;xbb6h4c7<=oL&r3DKZ+NJA ze}6wf*vw|WHCutEp(Vw_!eXY?Vh1m`>}Pf{I{Gzt^yp79t^ZwlS6J)38iQe_9(}1*=mKNoV?lMlf9O4Wzv_xE90Xr-rG3on#zr0(($#m>(>La9HR?I02 zm?Hz#V#zRPfr~6~iDLako3DS-1a#Zm`f|V{qfc z++2;3|3+VEAW*OKj#b2=esbIgh~y3X0G1VE5|aB0pdUxO+vgr|fMcRk)6tb`RA|2S zdVTp)YG`mm|1<;`;kLlG{{U!2o)rXssoE6>4;^Mr_EIzT-Qc23WSv>vXFsCD?6O&F5C61U_k@H- zq@NbepMa7sPr#CH+yv&i2FCmdB|!v$KG1GDh7KKE19G>w|5Q~E+Z5A&m4 zax^Z^$md4@vQ9qu{-ecylhKR1`#X=Kzumt4t6*lMZULvwf$0*Z6cz^wbb)?;*Tc`? zFfLOlG;O%ErUYFNVZx0ciCUFhwl3e`iS3@hGGQZvvOausYcy@bb&x61HtxHBjz66b zF%o4A`2_5G6cxElGRO~rC=qJ~(zOQ-adr`R6VPL$umRX3-kbsVZ6fF}c%nUmK$tJJ z%vuo+EhBiZbCvbYcYg9VAfL$OO-N1MKRYve{5#X_>)ojN=*HLrM-VwY80>S#bPGRs zGTd7jR~(`CDUw}+*f?tMo7JG){@#W509Q){t<~s;svb3>KE#jY_2K^hU^8$&1&E*B z07Sfti;MPqslu(zO+R1|448^2nwuLMT!14-;m&0}6X5{n<9h%+p*(;S*WR9avsU10 zQhY-2HZwYU3^19BMiH-tA-w z_*&?EbVti(Xs%ftNv!7&7Wqm| z-O?x!s@v1f_KHgck~Y5}Yvz+68UmAN-}%zae;&v{EZ zR>>wmjMyN7)L6Q)^l*&_Z!irG6JR(d_`^#W&VZxn;_M8Na)T8L*+>_hfH*3_%-~J1oa`4N&$Y2 zIMT!Xl*{KOvEM*QqSpveMrORj z!GUq0(nc_@ADnf7JmZHTTLjsY-QphO;p4jjQ3v2^wY=OOSuX_6eZjj{G^^};)HbR+ z`%Gbfzo)wkI@I12_asn~SP9x@$l^P8HYrY^4l&hF>KifAjijuH=obHSqm^1`7X_Ir zP2%c1RdYeVn?*}chbm`Wis00P1&=`w0ESOODg%@{U&P6K0`2dWw$IaO2qT&}VJJ|)dw4Vg{v4b$ zDISk~a-%-?6w4;??i0XEOMxIO8DMf;isop?!Q2`E5ZeQwg)JB&THPAe5vlZfQOQjC@?0YQe>$`{^X)@oCL0x$KV$JX|Um+K%}^hg{BWetU?!`do4W`B~APcukpFwqbu_`zOI)eci>|4 zh*V%opGWov$o1CvfO5zU1kQ|4H-F0J>|nhaBJW@Xpc!Z?Bkw{8@g<^R@;}eow|F!r z83`@}^^)BLt7QmAC8ecw!|9k)$;<}jBv4nS=geU}2$pnlXkQ>S8JRN5u)$>0^Go zr)J<}RF}su7h6|ua5k!l)lNr1A5I$P5yj5gVgrKPPoQbZShU1`BrYxvK(}s4!XEk# zR}RsG^MXT7-(!QfjTfXh&R}}c8H})Og3eIlcYsjb^KOPiA1!`9cnHc{z{f_^87MZZ zIQ6hjhi~yc??u?h9lvyCBZz@zXX7%Pv_W&`+Sd9kRz2GR8yjJW?mvn!w(VQ<73I7J zz5Sy4el5}dy&MimGZM~$77pP zk%iTB`-k*7lCa(+SRoR~_{^E}>w`7|jn}DR^$MKc^|_$oZTJ^9eHDWqvoZA)ry=$M zjHxi=wavb(4M@koqurlMPVbtiD?XhcNwC53K(Xxh<-_w@7R87tS>NwzVQ7o+n90MY8eZneq2{1g0f=JgR`}uc*%te{v^iA?$34%V{ zHPI#IA-I32LM>+sCXN_(ycY%8%Q#K#@WwRXgiLhQYmk|qmXMonU& z#LCAS5Z=t#jQxRl4*R=bS9LPGIocY>!(ewUbwdfZeCXY}8w%1pLop!08yfn~%OO<- z%NGPTZG_MI7e^sp%ZTXm)0jLs$fi!cnEje1)BExE?0b=fc1!ROmJUd$zXxC5_=nNS zc_|=Zm?OrWwrmoClVmPYw(*P_e(47)=N=K5r6sUh%wV>WSM*jQhU-;%Vt+uGAWy|> z`rWSVEw+c`gr=)psW5v3n?D%;sWywNqz_ipP%{<7G;9YuM#yH45t9p@l~^0iAb3L= zWpyx@?FqeZ6b^;^UaHm)9$&K)?Yso2yrYaVdCKJ`#&a96Ox|=5m00=2gVq+3kNQ$u#*`V=U5sHj1AW~NVk$jzd z)dS|=PWXWTAzF;^?AQ#Gl9gDG*xR-vKuf(d}&pG^#uvtw;Hx3I+9Xc<%$0cb|dLt;>^xPQqQ$%+V^dSM22*OdCyI~t+ z4(=RANutjz5%Cac5^0tPdJ1;mR||R|l_C)E{=)h#fjM{YTKB{eh^;;@BqS79Sa+EI z+DEPrgFn>sU5iMePJm|ec@@BD2q`ZiM(m6!1A+9OtW7-9V!LGB3N#Snd7q9Q@Bj~A zg=@%VGmSq>4Q#CCrJ>3lN`vys;J;tG1nTnxCQlFLEwo%~xYnYHmCYfgOzW@~R6f#5 zse;;grLt#O^y6gThy?J z*w7N;JwXN%U3-EF6iA|LC_m{U%3T+knm!?FBY^};{^$}iv}LtV_XMHAI_+p(9PO&5 zzxh5|2}GY!Ea^NXd-tP_6(mYEsHC)zpqW4eWx8~gOo4c}5ySl*Ub=smzX-X;Knfl@#g!VA*6?#t92I=4!kr3esd0?3HcJes;hh9v4=|NFhbB}yn7 zYTl-1@^sH;sGJIdMiuV8`3kyUlYJ+86 zou2_9YY&X5e0-R zgP!xT1jpoxC8pnwj98B?CLL7?u%WU&l_x>p&I>0!1OV7Tp8BX3!}`sjj0l|}5wNYU z*Le~xhfWu0=XA+o`JWbZhzjk?3#d0;zaR3$#^IoCIi7)K8_?CJ_2DJ9{_n-Xn8SeD zgomfLG504VBt$||QfIL93-&DeIRNG+7WR9Z%oCqYEExOWyM?F1Bq1RoCXU%8E_vG@ z@yr_UGj@fo_#q}c5L-qk-5kt)rfLqlPqp(Z@0Prx^T^tR}mRNj=0 z`|$$X{kiByyBC+fh6`_U!XjvJRm52SZ&Hk^)A zZ~3X(uduoMp~-aCo8Q?{!7~s6^eZcDSRR@k3A2+NS=}P3|1NV@Y1pqj z>YM5=o#Oa{G;w7jYQGW>4)eX!H@y|oMrWL(v$4?rJ1T)-%*mY@)fJZQ86Xd)p%Tu# z2m!(G<)?8n4vOdINJ>XSHao6=!CYEIkpRW^7;JH9?=KWx)o+Ze z%KmqP8KDECc&~wkesf6g^t&TeXbOf=6L-aiyCVgIgix-@b9fH(Pwniq?)J9UXgJ{b zlgnEx?PRG^lYHYq11g#$eao%lu>XX+FEX%SPs+@F5(%A^XWUn)l;`fXAi{`gQIu}C z$o#JuYNF~@BU2VoDE5Py%L~53MuECilcjLW!eZy(Ht;O$C$Kzl#U}@g0MMx$8qozG zzu}@xLQKrKv@{)M<$zSE_bH;lX| zp|n#QFDu@irGbY{FPmO#m%u72Q7%c&juu~j5ai7tSfa4GMS1Pg;Bd^4AUjChpZsWr zlkFNMGUyC$x1Gv=v-SWAk4njk+7?<&K!ogZYVb##$g4J-cB3c4q8l1kzs(}u0AXkx zH$@iC=da|D3@BX>`XhwHC!QA{)P$xY`PQb6i zk@caeut$Dw?Bar?YGad|W z7qCHvU$=-IkfuID1BVKwA+4lwB#LTxt^Ht&RV5MYfyWGp{QBCI=*!LieNArsmsa_O z-VDW*9CWJ@4Sfmgz4b*T|3QgaJp#wAM{8A0N&;>>CEp=BP~ivtY!5s(HyQ}6tMB^( zD2L%|EtFVJ+V!*C&yx509tf>87s7mwVB$peQTDzHEb{doZ6+kuR)L}8U|zUHkzW$0 zQoJ}sQ@k1!u#9+tpit|hHgEszc7ilihVn}xmATJ+nIA*=YGi!RrIxNkGLLRAhul#@ zdXO1xKI!JwbBe43SQ32hznj7MF7;)Y zx<(Y1N>w}10LGn!(=AZ!@lWobCfm4j98hxrl%cQz@dIrcw>_=$fDm0g;#SrL*@u}c0!|$P;-T@ z-)#(tl>D_CDce&(J*Jv8NIVv#f1x$otLK)>wd;TKRP*w}lH(20r0O$aXK-WmB#uZO zPHQOt^R^HsQ3ZsuQSsd|sHfk>1ntjsmg3&uFC3$==^WfovQVyD?r<`6_C2G+dDj$u zCZOBkohoUgm94wqt4(7MYDoyA7T_Nplb)p_QWt(zFBK9v9Ei|( zg))k=W3ma$rWf(EEXE4MWs_54*{HW}14fYDbkfMSlr3lUH927?{*Us%Uuoo5Ezu53 z3gdKrY52s8H2D{!`9eE>e5~CVey@$K3PjU{%JsB!)Bv%`ePt}MnFRLSFq-FXyq)b8 z(LTxA93cvCx2}=rn@d+vS}@Aq>d|&Dv4NaTZnemd52Gs#lb>y1tph)V$Y!w9M&0VY z&rfu~K_oW~R_%{UDxU#K*6aV!Dg4c(iEBEgFmhDUB?BdF;O;FO(2&(J^V^WI5eHcp zuHDgJl-Uks;ASWn=E9cwwS zysbw%)UNH)?2v%K(dqcvOCW0uuxkr@)WCyLR8o?@So3?V@=3#E&|Fv5)YJq7PV6@U z@}3=U7fLqq73fBGx&}B5GBy~g)h2Ve{+YkT@)p%;Httw} zx95tSSG$XlHy^tuAt3>=6i{4Ds%1DkQT#8-@%WeIVS>e1vz~=CbDNQzJ&Towzv=i=6Zj|bni_Z(>8^JY zA>`wu(aS~7z`Sepy0dsFr*i)nors)7IOgiOpOmLYg$Y%~!^;cwejLm(QI!B_&&S8d zwRYDEfN|X(%E%Dw4ytVO1>%6L$Bm7RK!c>iQX@SD#Rd>-O%hzYpN}XvqLH9f0f7F3 z0s^QK;w_vnL;|jdGeCx`-~nL708@@vfZEXB+S>Vi^B11$%cbel#No1V}A5#vD8aaGdNAaVt2j?j+xgl* z-BGysm5Y9PjBQ|SN(X%DmekHCgGnexi65WU#Hh;2!@yFQ@BChIkoTY;)%HXW=P|K`44U?x8lg$H(hRjYd*aQ7qt_<`Ls-u`N7SQ zS=F+vxbAzUXMjs<3+kx~`F#E0L8TWgcw60<*i*5pn=KkV1yBQHZh^DTpjCamd>?3n z@wXPx&AEhxvUAWHn*hi|!pLW!2`KlP|5y*~+hhC)1*OZL|GD2M-n}#Q;zp zj~|;vhkWM1q^$LG!Uguk>NXwozUn{2%6Co_Q5XLhNeGtHv+n}X zeCw*iWlwNG_`y(jEW9;eTs}V(4_{@ZIm7MIO&oZl314m%oIQ0*80c@Wl%0jnbfT%G zm7;{x_zW2e|C^^(!yReS*F|%V*=PPPlvHaGMtRix*K=vLW;RMJ<%a4+|Jj+@R(6R) z`Y#J=#Uy+15@&6N^^E)Uj(1IAfWAK;CgfOTCU#&s$TX>$6-d42it%a~-Tnm%ek52b zo0&ecKuyy>#j_3{A0Gn_V9`wZlmYh zT3g7py*scr60XQ_5_Nup;B+__iTEO)O0KocPp+FJaDXL!m}$jU#~DWHRmB)+aFMm_ zmm4;N!0eLDHh*ZX`j3C%*!YAcds!?XG~bZ%8wIqk#uT0EWO{p+Je}(NoK(~wYnPV& zf|%+W%@LIFBTZ|w;k1|`tmXP}Wu|{I5cKtkQp1T403SYq_zPCeeR=UR68hDUE|RZC zb>`@wg4b0;V3;M>JAuiuXl|t&GNw|KIgpg_1_;%8bGRWdCOJ0k^7tvUE zHe2)}cOED*NsW}xLZJ!^I!zeWB9I1DU&kG_a(9W6SE7t8G`Q5>5aewM^!k9nf>ubl z)Ydc`E93pXaEsqPD22l#)|?Ss;pp(05*A*dY)E+7P9X(~zpjU^GGV60O7vKg>4up^ z>LMhHxP^JyrIPiuSHrFj0cjZ4+T1YD`8Fvr2Yt{^C?%De#qz>eIbF2~@puhFCRE}< zb3~EPQnJZz8>RgSJy>k0g2H#Q*g(sIr7373NJW?2`ep2&6=Ey7g&j@K@Wh0)7KCZ`JfEf~6T)pBB7MLA8``_NFcXqtwnwU+ z=o7tXpx@*I^o>xuT}$hxCFGBnaX_z`6>ZAdx+(fO)v120*2_(J4&E~PHlgt+nvx;t{ffF`mi#xs9NfAt~Nla&I4~GJj#?OY9jGzb5+FH zTBC03s0|bI>zn&WUvcVN>vAJVq6c#3WXwnh%A2e*r`6V}w@9V#d$K#gkuD0oOkH zCJ2gMI3Tp|JzY=vW|5wu%X~rg5aRx@;^A=s&5+4b0ZuH*T*%15JXvk8aQULP0^gUD z>h~PphJohu<@aNQNoITN6N$%mhr7S39?jVjY2H9DTV(^~M~ba|7D{RNl3kc4Ei~Cu z4eJ3>eNWcn$ee@@s(S{FfJI=+3LsAMY?x>8%eBpZN0;M|meJE=a3n8zULrYu01^5F zRVKi*YhGU7Ff7SsiiZIjNB`8+l(q_tG?S3O+(@1typ=v21B+fWs*T~j+a0JqXA<7# zT3ETnX1d*+kZT;`;Yf26PYZ?pJKOeLz4^q(ewzCQgKB1J-Jo;fU-aVdv&C8Q<3Erh zGl!{gv@ApH)LIi-@wdYf1vSG(i}Q~i8JBY{1JE}}KgoHXX03J4DS`l}Zod+T-=V7= zdJZBX2Vn>Cn&GXWg5od|A}TV;zdE|ss^(OipFdq{PJ6+G+cG{GcLJB+;!ucn8(`!S zFxEyFTzKKaX47XIWB(+*S7Y-Q4V`!>l1~w$bwj0<|$@SXQ z?PgglJ+TAzal!+Ry-x7waJx5Y1#D%7i?V-OLIIzA&)_7+tOtbRD&W2zJ?8kA6%a4=i5YS~4?y9W_NyVa$)X zJWj7Lsx^a>=ge2QkSSL4J9edL8K%>lid#@I6cRtMa>rBoWYDj77dz0|Fr|ah1a^98 z$@11&QOMiv^t!e-CyLejRd&83$_aZ?@hM>W5MFA294avWo$SHI@u6rkcK=fb>pT=q zlO^}JhSaglJlrMYoLcs+kZ&kNC0>gyk&YxLESH$9CeFQ!dW-&h1O&^sdSJC|MMP*l zk#$8kl@Uc-S0SzAyKS1LBfNcUEz^2Y|C9dZ_t9n1-!>jP{+VJsm6J9{P{E#kfGwUK z+f!n=0U!tfxar@KEVxoCZ7vY%wPFCD1FkJox0N*T}4bC%jK{rmVp4YRjEJ!-* z7z85rhULA+a3kH{nH*9?{P*uU$D{2sQ4~>I5QNkg3b!y*R*exj*>8C17;#jJh>=#P zPHBD2P*FfeCXhBU_*tb#tgAzJ5lq;vU6g4(SfPFmRllN!CY{5Y1&-#yq2G&!oiD`Z z@qm0dZNSdQC133piAsGm4eU}5;NF!RU1VhqaL{ z#GYy(hhYS8mqT)@xwc;5)SfbuOCrX|8x-HuRX8e(waM|$MroBL2maJlI+sH8MnX(V zkpB0svYb=kPRrRo3tZ-7gGhqcA_iMqCBLGp#w*rDguBgAUzgHSpm{b%5gDu85z_Iu zSEUyH3!aVLS#i>0-Walj;iuw|Yk9=T@5;VO8s&*o|OMBs0axF#w9F1O(Er)^#9IQ z#@n5s>n`hf6~=d|FunNY;1PJgN1R{Qvxt}a@Ux&JpJAVB68r%t!xwGi&e%3;8W3J2 zW1%DdwbJ4mi}FoWCOj$%LnmnmHroU*Ypb3;+$s=%fdcPoQIy6aCT|Dj#4c{IIF@o4 zd8sWlg1mn#)@vzwE2chOZU8yra6EgW!40W-W05!arKA3sE*!sHMB>QvrO{EtIfmdC%EodFuP$8vi=I-Oeyc?Av)^Dt-w{jy+|9j&kKugwi(Yhf7SLm%-uyPm?4z)B2BfZ@J64n+X4g}I?m|UYLcXfA6!zz+3l`~O z%9PJ2lH)aM%NUh_rky&W`A3l9W97Y!r06G2HSDpX%e~bpL7_fySqjB~$eMY+$HI0N_0{bPhAIt`)vRbdS!qNc_HpjQF(!8}@FrNwuFLA|S2pJl-_Tgrki z>{z*VSAL}*e*ZoUH1!BkeuXP1sA})`f+TuNGg%iYVyAr{7%_ULy-h-7(~++Uw3O)) zgH>;9yO@@0Z#r0CtxE|l$Be2v+}VWR`WxS@zyDK}-Zar#QS<0QUAxATT!*d8%W-Hj zv#@m_0iiCz<3YG^L|#d->+5PaQrC-L@oewn1l_kYY}iAe);n>l6h5?t@4*ncGg0!2={0I z2V-iGZ1f(zy*`r9*%*5^a?-CgXM?cO&_xqbcuN4BGk8 za-YUy8%j~f5BPVtL2SyFr^&Jdoj$xwU^I#^3P^}iUwm~bCmnDa6$6J2&#)&x0815B z{(I6NsjMCmoR9@VXnhfayIo0KC%Yu|a>LBSL;EWj1o3vb7Kz^1`qf{yXn22ZXkqKW z6U*qlnDlfiW%g4tt`yN3%|l`AEnFRM3SChl#EvP(badJDFYY+xy|)+DV0|K*^G?;$ zMmvk(i!JVkoDF6RaS|FMSk^e`CwcBkRbi=7!GBAiEVRDs_Ot;MglqH@HpiI$l?c`L<%*m^r49fjJgiJX4^6dc{ZLfv_eGRvX*yn?)bQ-P0l1A zh0Ux#Tzk=O!~g5)D+8+Px^Ce}cb9Z`cS(15Nw?C{A>ApBQX*Z45|9RIP(TR*kx;s% zq`B+xy!Si5Vehq9%r#@oG5GcQ40Ds){-B^TrH?id{L38c4Bs(6Xl&Pn5GqUMW|BU; z6PYJ+=~C>rjq(9aEhQ?4Tj`CBr>~O!*=l^jWaO;id1c+-@cNDQy}GzJiG6SD$9k9J z8B={R%qb^R>j^97`nBMgjmrYDoshZ{q$i5E=R5rmOGF2{I7%)4!*x#z15`%NfvPFp za!ymz>C!KkcAtCtei^#!oi`No8b>BERG_2vKAe-@%QFlo$~E5XM+1*h(xF+U$!4ak z3=L-(?v8`+CZpLvvb)@AT3*fA}8 zqoah83^ja1C4~ydpJMgh_kAP2-K~n4P#V~E4x+Y>hA|LM=>o{_2TscVsp*gDf8)05 zX-m_6?SjzWrW+PPOO)CZ@;?V#5En3CXBXzur^yin>pmztrG*vb?@0Ba#M3hm%7&=#;0D5p2L=b_OI6+!z6<1G z_!obC9bXAg&QdUu%-z8DQIYy+7m;7o>e_2jz2{VKsW-(S06Sp2$Ooc(A=~xbME@f3 z>)5z~xR$rVt4jMtdQow+t-0d`ztvfTb~RaGki+Ftc2_caiS{X zG^)SP_)R~wQQeeXzse%ByTf)nhqF(r%C|bV1?a&|f+jeO*YR6jv^Pr~GkG;P%dj3W zcu<4&m{rosI1!%8WNh%YJ%~GWs=RQ~F#pu&u>8*UiAf|vfP{E+Y35+D4^J589`{02 z=8qS~xh$)ZJAf1zz?kjIY$2xfaFc{j`VUu}YYEWpEfYSNi)@tM@2)-PW;fHR=iW_N zt+_&ct%6E~qxB&xGH#ePS*p~K80mGF^6A!0MQNuBN%yB`bBIE2Au5f$5|f>^5x%{y zvuyHLpT^gYKR5z~B;WIT^4FJcE$8)fNWprnzMfnpUpR!#F40fos@`Vj`91hGGalr3 zy-k~8>nwAZ^Gh4NpRG2;6@B@=LK`sP`JSWpYvLIw$&k&D2|&|Be6o)T8$}K#lKXZ0 zjMzCxRXf+#sW@+GLa(|o-F9;HiqMk=g0BUuX%i{Y{VA^SLr$$;P!N2$+0=fg{3D>s zj5B5lrJ@VU%vMmSxE~X`In4S>d8_*FEM39_1;W{~yP^4Q_WMzGWh1Znr?bJd&b@3m z?+O;|I--#6EXFWnAIrO?>Q8Rg$+Vn&$Zq*Ex!MsHk=`?F^NM;$LU`}B(=y>P1z0xS zl{!{Dh0b{ib8gDaB_ovQdWjAOZjw6N&$H7L9OlRcQ3nQnecV(ez36M^zj1cM;|we& zeLkgtU~6syO$ny_XFf+$3N3_h)Cz*P-kHu`yA~(uXx`JLjhcnO=jGfVPwHU)?TuOY zhjN9TCm>TNEyh;F_iO2G>s_$dZT1f21p`rL9paRX!oKLISAWSvp*UZC8e_E$$3ibp@t>dp3@`-?+cD zIKTfo8*-@cJr+|-6BHB#W!?bQX%cwJf2U7bq>`QGhS4hsd$A8pP%SA4pCKl$t1Rb`ewW&P7j_bB;t zijxPBb!|W!O083!^|G>aVPRnb`==-P<|E~BpIv6(DWMeHfHaH9yl$hLk(VRUxc72? zc+k(Pj*-7u8ZNDnIbrE3Y>L;zqvOc;A%8d- z6r1Oo&C+rU-sbI7nyEXSwZzAaH`cX?uTIohj*pD=eqN3}s-w59PGO$Gv(0HwQ?mNC zhlj)Y4=u7L3M=o`@$iT3qyFKC-@kXbZ1w)I5jc5hbYmwS((*SJwth>WtV%v4p_F0J zr)Ee4-HAvMEq=i)qD4oqf7tYlV8*BzWdM3uvc#WzY>8WP3UHG9cgwVYnHqf>MCdKQ zBFKp6Bg-L5c)qOqCvALdLR18Ynv?e4^B#X{q>*Cn`1^q zx1yIw%`!GQ&sG6^oXJgWL2!gE>xm6n(9TS0MrDB32?1&<94ZPzRY3bi%E>>UEQ5if#kl{&Q0T#?;ygFy87ut|c^V5UB6ont-JRW7 z1&@*u9*-Ix&rhoN>ujZZtmcRMo9VW*rqLflGoCiOyr&;D5Ea;+QB6~uUv`~J#~~dO zk`RxY0r0-i{AjVDd#|xKgc%xNF}5NgBW@BI_{?0a$eBS%(@>TnT%*C~mQZCEsLfy; z6-f)K$avt)r!%UD56BLvI;g0Ir{AqC};IiJ3Qz{=e#y_Y!I8rV1Xc*!;z^TwRA+pztRaWe z1t-x~-AS@t5qHb1{uL5J9^Yu-vdQ$T^um(xB)!31JsaEl22B00p4Sf`0g6e+&s-}^ z$@Dl0Q=lP_{ohF%VxXuH_Ln9@eOy<@TypS(G1q3Jvx`tVI zJbLFlp2>_e|-(3ZrV0kaFvk^ zR2y&K4+;kCI!ms$lyR7JO12TtjC|0kc+0>TZCu}^X-9=!9`}4UBqQDpD%W4wl)h}t z=`G7rIN~SPjZ*)3qaB`zCM!zge4^>LV-Mjdku2b(4qbJPtwCm^E%D2^?bbEH zg$7rdwVwbwUscuK4SFdE{puwawY#%n3<_xowXPxF{eeXU}|eie*qJA)YXcEVr$2z&Kj9cw|hARMZFXQ z-AzDSJYpj?e?cVZk{j>Y$p~F4Of5*EjeDQYPOpbl``btVxgEG+Wf$Uo&RYI8yiTCM zJ~C6Hh`rD6{2e7C8K+t}%0VpIcV`B%9+LVC==aG4#N5f<=D_3(77lHEmfJAh)ZD8P zUNCPo@(4VR8!img(xq0Vtyu`rUJ>K|0BxLyo10m=x$TbAv?v_HJA~X)4pCnX9V2&k zcESlFIWWlk&>Wr$zC?-AUx;Z$=V9MRr|IX$WC~JO)m5BFbrsN}(>49dkx|Kzg@hak zB-4YIz#wCMpfsiBnZuOIIFN9Ifb!)_R{Dm&)n_~c~Nr_OfEh(Kx- zHxzC5ZJa6~u!Z%xs!TNIXJ4Zp2FB|7h!I4=K?>1NzJEkafikf+aYs26xC-5<)QkM0 zD3hAs)Rm-PUIqZDF%-(}u!UTv;69tMF+~wYfpP5YIocc!b;hzr*7Qe_nV3h@!O5$; zFh01$Q;oQe;s;mQj7D7Wh|?NMnVz?X$fjXpjO;{a$&tcdWrfX1Dou_Eah z(m@R&Q)LTnA{aAB2nd#OJ)6Ql2x3Juw9jq6Yl}5NvE}iRR7kQSYnh$H z#095f6`0j=ntOmM_m3E%iF>p^H#fvcbu8vB8{~ac;jOJg3by0Ze@;g9CNO)|P&v=X zwW*rGaZU}Tz{epUs55QV_@=04uJKM7H${EIOeXdoH0I{%PDK`dv_8}K`p`^~6!f#z zjp_ohq|4^)_c#B!y*kZFo=yChmG#_jD>RFGu)`Q_yGG(b4f#pX$+`fVWE-sgX?fuOPGOAE!prQL2@2ns<^kdI1p{ z=*b}aPk_pnm6ct41``(Z^RcldxljqnDXO4TOlG&}CT~!KMk291yF2>^>ysioHg)TY zsyFtSU!K8>#5=pel3M!Ya{#(^%@%U|>&^l28u~6zB2duA=EY?M>t;{OuXz4)jKw}S z&8v?gch?|yVfbf!+zhrIE$b0ne}0;6a?nglnt>s=)~jE~{5AI$v*J)M z`5{&}IJBYURBClgI>!yYmnTzl#1OSMBO`=KSqq2DH{=NlZ+-z6PQy&)aGqz_Tf)d!6a0o>xu#SprM-M_ANm9$hg!9TFtY-7>Y>!(7PxEe81|AwQ zK8XsI95v3AuEM`NM=`c5ndp$#N{%F^S8+ArBo!v#8iW^^zn5DX6>Ib4#pu&IQg&*R zEFs-=w;9PMs``Lhro@oNHEM=MnM~q*r7p6~UlOS)3*@hF9&dsi4a=WB4TVRY1)1sP zENGs5d|c1yOp8UrDXQVhH)}vc{ADMhl6;V%8_X}zz+b*3k zte{+h;U;8c7S+D&IX{{BpAm@0cO>1hXpMKUF5~4CP`pgg9G}LmVCLXsdPXB5M8lzY z*-@Bg!SuPqrb}vo&2u56%!mnfYOKDT_L*6T@9If2B-k0Ro26&2ad&LVcchwI2^&5~Y?fA{ANAb4lOBcPtxgf97?kAx54y z*A$czXF?ecum^=As4>A68}Ti?&`GJFOoCu~{Efg7#;K^+DI$xeRAEK3P{*yP7^asX zyjmN7GX0Bt-em+)u*O179%k9-wOHXxRXlfGuVb~2M6EmK?CADMVp`FV}B3Ky;`a<5*4HtDy_TG}<00j%*x9X=dH)aYS% z@j@AjuniQ7Frgt;sq;K}+^F$xw{W<)mX(Utf^~0>+tK7JGX?>j+?8zkWhp%bB@l;_ z5=(Jx3Qtwk?K6+=xt^W?PfBq43I+kj<0!0AKjTKxVdt3)e)n{ zgOi~R4?M?e9jAJQ%<_vWQo`TLh_h1tu^tJz-$5G{B!mHT;yqLD+)`43o?Si}pZx?3 zMG9oj8}UxWVb4kp{edFou7D7rc4&M$N<@QG5&RZGb5B={btD2Z>;5^XTW*B92}MuO znNorfvCr@~NLj+#sRsi4|2N0>H0~QAbAuf_0^wa%KozWw>@)j8L#E6s4pcdv5v2A) z>dm_*X6&0r_56I2V`HUq5an=qRmY7`9^Wq&hp@h}k)ZfopIKi6in?i!0k3BKrSKUQ zR!Gw52d>&5wydoFTlv1LVG#JlGyM^-|5mmPH5GQ*M zX>v3KAVB0Yo*)zsIK-j)r9K*gPy{&{OOTO9k&7s0vwxZ5|1u*I$*P6jI+M<^kaTJI z{eKIs)Qg93|F7qP2Cmk>yl_%HG&Lv32wY0(Oq#R^`3yKvwMP#dKKU*$1iM#r8paP$ z_>3z(SGSel!Fc-v5S2E$0*WU&D^^*LH#Hb75iJ}8Az$StVTEH=?zvuu-_eRhO`!xp zN4UE~ql}%<$0dxYbW)fxMTEw z9Z2P=h%jun#Hz`w>z1j7mA{Vk<7hCTq<{3(nT6m%w@8WX5a;txmaD#?r@V|n$HZK9 zRF4FXuFm<@D}G7U>bH;9A{1dvI+VACd@7P1BvW%Gg9Fsm63sZdd}#uB^Il8pS74NM z16|I~p)CcU{6QY!@f6i4z|lAYNsGTg3fe@e=sjK5n@Z*Y(9(`#&;*2btN&Wd|F^jG zT4Z5>)}qYw<e!b8v+1408xvur=?);3bW=s5M#YZp^B%PzN3l2gQBAmE2cGK|ujX zG6Ns;`+NBWPg^1G1jKW_W=o)x4DboC9@?;4E8hPW4-bkEmLhqLBCW&0sx|#`e7CZ~ z68Od?3Q7H+$Q&FTR4uLln?6S{ePn@yhz@dqlc5^WZ8Z2Nskj+S5UTHhg$Kfzk`K3D zC3%CN|2J$)P6%Lepy0DlEJb8BdEp^J=nW$EGSG|(F!m?s=K{pkS+X!AfTbE5P^Fzs z$&0c`5v_W6dz(0Bl>B)vwbF48NQq97Ue9q26Iws|I8!uIxm8c(9t=sY0V@MxLF^e5 z-?%Z`=y#xPV~udRJzZj;)iv2474>+S9Z|K)$U>Yfzwrf}ZG*9Zatld8^)d^GWFc!a zJ3YNEz@WegL)xE?{qGi`w`7MG_V2~1^hRJ^v}eeT&zouhj17m2E#pSCYMPHGOA7Lb z8v61FudnaF@`8XWa{uw{K^2=GnGNWIfqS!Ki(&MMv=!&$YVd)hLFVZVdO5w4r~d5D z*SjeNG<|3&D2U&@*qg_efYGZ=%)BC!`QL*}aYME7CTwb1w5IW@!9pAX(Gm5xf-pc- zkX$BG`2Tj>8BS3_6>{>U-eJJsL1N89$)tu~y!dZ2$F|AQ( zeZy@U>s~9|Lm+m}re9@yC)uO``!=W(g#2dK>k8p(FyLV6C)1D^Wq(y=ZObb9#6^IK z$pOf)677;CFu)!g$RL$#vY4q~sRz^7P-;fSXUxbNdOysjRtA1^)rQzstAN_)#WZE3 z`{T3uAQ_dV&!_6aP95j!NlZ@88fCS#$FHs8&W-;B^gqP_mjl8tE0VUEL+r=EI&2+* zSvP^NFD)_>p~6|r_wXek0f|Gcafe#dw@)>IY(!K{3=Capu+3Ec-%)|OL5^9@mc72} z7fB(m#DCY-z5|5-pqX<8tTZ@3i~k1gkHAqSe+O4~4b8=cH0!^#XP+ud2;W!&0R|065_Kf{XF)T+xdv_CJQ7wtc{^Qj}t&1*6y{H_q?ndkYr@NfMRAQ z(pX?)V~>1Cb8FI#YK7a~snV|oAz1Q1^fr!~;|nM}?9f@FLde2)fB&`}gOZ=&M9G8^ zIioepy>O|RINzH;`qcvy?Xhi$dvT zfw!w_U+Cv_0+;HsoMRnCoxPlPerB8h4wUsm(NWkrW<$l+kdSq&&smSJ z+(7`T(vy=Deoj{(3v+5;ZM4D7t+9ab#;uG^X5Nld+}MqVhlZvrYsk z4NOwRPey>T8zd6Zd&NuWab$UiUKpkM?C#Z-5g#$^29GW54L{I{vp-R1$(>iv%*}Q3 zDaWC0SmwF;6B-?VX%FrPp1@H?B4*l5<89Rakm3(MM=N)ry+aYs3%_G{A2v1A8W2g> z*;D-=GE2X8&I4jVaQ4)shSU_jg+yCm(x^x&UKG&t?7QJis?#4#yGC!@vXTK{VG|Gm zvbOdH#`#^$e7DImxE-NSA^FY|hRo=8Rq1LRy4aNB%p-c=3IoHtUu5&bM9PboahUjp zg^ePGBDRM@5Ea@8LDD&9?HBM>;!?@p%E9cCJyTJGMHK2A7HdKXVIP0gCWl$u)c!%u z0;GWqFrJ|!)eto5BRVkn(y*V}-KloV<8eD{L!3k!SoMp4*6XpJ z`qY-~pe(oKF+cY3s5@OWKhZ{O9nDcDbSal()$K#KTI~kmDBztV2cq5d^m5GzKe%C! zVMY#NeMJ-vrB+vJ!mKsa&4t zSazp|?H=uB7Qi)D=(mn4>@W4*V_Fao6Td}G{st7-A{e?*j86d-L0m4~k^*d+hH$m| zP(!qn!&@qW;uuZ^PE7x_gyH6R{5u(DFT1_8&y$GxMdFSwa!-U(o0xV^gvp zX2qMAtzTS&Ex=P9|ECMwqj)0ff+;XB0fQdr_YWzSNnE^fy}E@yepWM5$D!ZJKd%f- z(*#t?b_wh()8*dozkax(s;QH_TzxYAQR^ENc>^O)mKLyi?;8RANt{Vwo<(V2Qo4hY>|%8B*F@dM^25&F-k!zjeW)SB z%Kh%Zi(gqE%qzPeev8=ctYocTLKRZKvhmsXTyKi2YhU}?>L?3PHN-$}_Ud~SlE@G{ zKCtRnZ676*e2EX`shjshq11blUP-dx1Lw2%y(YG zBO*+RR7+*1!LSgn^t@{dbr09xe!2ZfAobI@J70DHq6Sk z?DjLe2(E}ehi>rcLL_@k1>`(u>RN*1?ieBLEO&J$BcD>u7(M5*gx_#}`g zrb!o%P5yh`l7pPz66HvR9&-r;p0B+9zL3{pfp|{gTYRk!kJBylbIha}PJ?_MhW3J- zN=YL}tWqy?c8j%BCR$o+kUp_?N`*gwGUV>=?!v^BBVYBd*8;(BvMDh};3T+fK}b|4 zC8+4IF_I5v`H!yc%Ara}4(7+CS8w#n{+e3!*;*goRZI(RP*SFAC@J+q`hf@2^70$~ zR}n!@38FrO*-3rn41baGm8Wkhe5-@MhUoXxUA+8p{B@X*@uu?nnV3pic8qjqg6Zpv zbL{PDUrSewFBiXF|CDgJB!23vkC`%cSgTW-*TJXGtaZ~?anW;g*a0ryTYwLE@2sDj z)BxPJFRS@>vsL=s<B9KHI2(n9uFrYvE9BAAO&+8rQ~tbmI9Plm{Q3>A zNW%<)?1AsZijrIdLDraFof&DA&1hm(1=hYzL>2Ytr!hwoAI{L-pFT*p1Pc+b>X`+o zNt^8a{JBS?Wn}?5LKc4W?v@DRe+T`27xj&?t?hCZr9YKi5(o78y6n6ClEkaN{deC+ zzT$!2`0O&LR`i5s1$gyF9P`Jm6L zY0UO_AxUIkpRaeaZ9U%;nkH}E)KF8y_^wsjI5q4RQ*ouDzZT^Dsa}sC;p?M?u&!Jy9)8G1k zs+iTyuMN!Z7JlQ&^4@9$r;leXhp1Sf3aOeGy~ADXV5I9zx52lL&Nz8bpGJ%_aq$oE zyb%!)9I0?Gw7*xB(Oj~JR6$Z!qinXPiv1e=fV3kUl(bCGB|U&uG*R0^I4;_Yp);e8 z3CetbwA@j1wDYeA>Num4^^=7fBPF{3h8 zD|!)kD_wX78H|Jc8A|t#=H*)(R`oR(0q387+j>9y_p#QLa-kL36^C29ssKAvSz}+T zzNgl#3kq%7n@`NY%jt+&e$-->0C)#dXj2ugntf5jSV=E?31y7K(XKe~{$ zP^BjS%*vu0WM^vX`dD|&y8=j;ykK()wSiDR2Md>%emsOQIQimajE3~>>q&{g{+nEn z6BT&wC*8BfW#Vlnm&K-Y^r3OA(#nGfUzK?H3lY zP&!jL(Qnej-47q1^+!iBjAwBSOb|m#HaC5jyLL{_(}e<`nO3`W3Ce_jj?5^&v)I3` zc{Y^O8sha#NXQp3;q|kmy|&J$FMGGfrMZ!>{Tq|B!C#PFce)U?Ish_Aa3mc7BZhjO z-UPXFoRL4+yhYZi!iwK9%>SD9FK4F{b;V^V{genEQmZ}N726GFI=B5GSLtC{e{Y|! zo=OBt>Y}sKA_Hl_Gt~1U??yFkt$k+q-_L*h zX0!fb+HIn6eRCHpH>vhZN!5oAV~cL0g!kfi^woy-1}~c5|Ki@cxxYE00 zg4<_SvT@4CzD zdAXq?S3{CCT~8yj!E3``4=*3Bj(u`_}L~!0u&)>gx<=`0 z*+w0F&!;-caIRNfcxUIDR8^6UmzmQ@tt=nXOGk1b1NKJ;l3i7bPD?u}#gr6_)Fd)FCQ!Oq`bs{2zmDxRQ$9)E?^|td~@+71Ee-pr+cviq4__ zD3+^+?r3TG&xL8KdX`HXEZE}9H1cg-C##dBujh)n#M+7Kl=Xk>9lu##KX?GVIiLV) z<5&R-g@a!g`_hn4*LM*sg-SHeyZU{2j464KeGsvKYU{SI>|GVUw>k(fm*b!9vXRuPv^YYlL?U!`y3$-q%dDmYzSoFFcH0A1V zH$f5kYZS=afL7nSU<;FrWN;Ciqt=KA?1hci|IKHo6!~(=J2vtc$XdiiOU(19f2t zAvc9a+54{`FD)(n3&>3k0sMb4`5-mfUWK10)jTAcb}d7-NN3-)2yh=pn(n~6De`vrCCJqO@xVDA=A40!+FQc${)s41*DtC+i z?}308{s-t^sOY6c-{IrQr$NY2`2$!XQYaUY>^z$gt}xV4Q-y$e*n(V$EJU*aAvHs8b6H?txnms?mVrCwV?FB4FaY@|qjS@;L#BC;&S6os2S_ zmu`r_J{#%_0jky}KqUDV3xnT6a9q6#Ip0lSYTC-UUQV*HsY`)5X0d3 zMlyEWnd^Tk&x%vhX>rzXLun8E$N9dFk%{U5{+tuVtSf*J>n|=oK20aH7H0d0jLK-O zH+}&Dt_#p&pem1o;rnNdFye$87dD{_yzm$o)>lttCWF8y@sdVGNzcE@nnJRYpdJQpA!|CR>+gE|bPLQ|-og#aFLU?iIRHVuu^MGBqyuff6((9Hv1 z6H|y*!NDHsaoY>Q`~3yU&qIK3O8IM^cpcx-@cspbowGmZC`izP&4*B33P^+6J36w< zQ8piQ=znozQ&JSat5)j4Z0kV%yGt_W3nGu$PI1EuaOOZSd$gvda8#S$Uu*w(OUlRB zkcI)f2Y3wokEj(kn6<`zJ(zXJht=2D*1~d;K8y5|OEOZ98KX6UFGvj)M(M?ITI~%x z7LJYMFrm-9$pbZ?^d-`+H2COR z^PcDWN)of*$A5s*5a2P$2Q?Yc65xBd%+n&g`B+k8!;6iJ3#*q-JhT3TfmpS(%A%|8 zz$_ga*tQ?8h_ajqiY0mo?^fC?nix^DZ$oF0zI1_Po@}6{ zsBbCR1!)VEYJX z1ZFC$(3%IrF5V63ffh9KbO=t#WWWe%GSt*{LCy2-<{xlkHjYc%0sd7t!6pPY;miqe zNJBUUc-@Y`{fS59BdD;0=lklvTe-RBXvyMkixNdxM*}P00dk@zUjNnAN#s`nP#6>k za_ z;5E~{r{FdANY0iXfbT5yo3rq*ht&w|ZM+F7M>UW)Eh>~!Q5nnOv4PcUXL+F~vxPYh z9Iz>8sK|P54{AMD(;=Wly!`JKu9+ZL+2hCb!s04WM;{qcVqYtf;z-CU{i3VcLSX!4 z{AaV%H&w2#?_leJqGqfD0+NgktkCHK$>y>s;I@LSOj|9(*#8f7ms@$^cPkB$>P(;a zgxq~8kVqgkXlpQU_bfeh3W1%2uo=|ffBtjpCaeOkvg<^a^Iy9rWU$=gr;!lWh@w zFthWmykP-0A+*lqZ$ZJ38VdsRRsomI^XJb2Eq_GIlXXV|Q*EVCn;zOOLa+z07dXB5 z7jO%-96RV|5%M;+jWL#>VcfH)1xQ>ITB4bouo zi5Q`vC^9Cc|Yj32OHBy%$jD5)@E3j;dbAkBN*70vGR6tDB;f zTutkbPJge#);JEByMPQIX@3LA8jgoBZp^pK(1|(EPEL3g``8Bp5QGbzCFbnwoj_g! zh&K$6vu~Pg^DgcC8B?PgrNf0kv)=taJd8XS%VGMl*?zWWJP`&=z%6S@kO}&nlS9IO zeF#X+A>u#Vy@nS#EQ7(+GU5yS9+J;}u}UPC?Y_AEa35G!qOI`4sE&ZG10{sr{e82#H#y2?pwK$# zEurRwdFwb}L)wo!fL8csmf+2VDkO`pD6I@s=eYL(X^`*T-5rM^h3ZFM;Nq}7Y4!64 zT%X(+MD#C!9-A@DXmnlv#R0v@kg{bgdx%ZxTiYm zEG$$;4*(uT{4EIj9$Ct{tY7x53k>=aXcQt?j3;H&OH)JtA~35bIoL0WFzdS9T$9dR zufNHx!^B)0;-|MngRgPHuSw-UEhFC%h$^rBU8>fS$u<=hp9=?vLZ>Vzt!L*f*23^Y zPmf?9qu!#&)wy^Al=-z1Vd;dzz(WyX;t%{BLqqr2T4jq50&|DO)W*2`{ey$0U@wAN zO?-0loJMaj*iR?8Qn$>PXa~#fUVtPUfcdx<&UA!0sMMAw<$pzf3_MVC5i#?IRf&Nl z32MlNmMJLzs2Tn&T6m4eod`D<{u(e5!4Rxm^nQDTAGR4)l(9xHN#MC^4im7hOiiLawQ`pEL7;-AMS%O&^H=DSAB%T81TfX$jQyDRRFlB zg9fg;3qT9V;#oQa*FVNcogW`V->x*!5yAE!4fMizA28KW8@~ow*klT^b(U{HMF8vd zkF89fRdYKBhx+FoL^EeV$pYMspM%ZIH7Jlb`|6%5hVsq|o2y|$j21qDs~5$P#4!;h zCIHC0d3rU;3K;<>jKudm1=#Enx|G$rp&(?Nyv07d7EfYk-CB(0x+=gB!(Jc_nwn)C z?K-~<;NiVkIjD-+Pke$Cn~(rRDJTwq19U^I4#}UW=x9-?o*(iFIN%tg7{svhb8)$W z=rG6qCkS@|x`z88k~m0HQ!^&K_sb$VypmR|PGTFiJN}^&#wozf=(A=nnkg<=YU38E z5zhXB9t?r_f8KH6x=L6obIqki>dqE1JO@B=e|zyLOSdasIdx(1_vS4cm+MMlTA7H8=CO zNrW>;{Zm&{lghB3E5yea4AGbW88oJ+Z9&=LL_Q$}m4qMY2l_;z^Rh|?+i1s%HbNA( zigNOBk|`enp$@1=!!XImbSTiVyqvGM7*>6H$VoyqU0ZfwCL8F;Vpk<$CU3g`#Ee(E zX8kYnu$wzq;xN@m;NSN}^lFE5q zza$$c5+MTibokQ>?U9SUJ*@ZbZ%yP0n#7Y$`W%b_A`%kjldL9x18R5Rfq?kNl9b;y z1qgLXC(}B!bWs??OICBI!r4`Y73EAUBH)Y?+60hL4LQ$)qfJYn42_D4GVWlhsb5Ed z$*8zZBWZT}_3Z+9%FAW$2~&?G>q!_Qb?m#&^l_vTO7F#Q;3~_1o$ZRnq(w0lH-9l( z#qdUOPlH3;y@b)cd{DoaScyG6c9jJ6r7pA>uC$!Bu>)>)FVM zgcquf!Ed;>Q;+)uNRkl$u2vY6nVV_K$C|mk^mF+U7mT9E?t{0Y%D+uAXBzXgM-&B& z0=a!^-~ICaZuETcWjI^;#+9R)#s{$M)a0Rf+=1%!j~W%yR5&8oJYLmo-sIV zNXgY6qH3Akn=p7=2$j%hDPbEr36 Date: Mon, 7 Mar 2022 00:30:06 -0500 Subject: [PATCH 2/2] updated Cleaning Up Resources --- content/Azure/06_running_analysis.ipynb | 8 ++--- content/Azure/08_cleaning_up_resources.ipynb | 31 ++++++++------------ 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/content/Azure/06_running_analysis.ipynb b/content/Azure/06_running_analysis.ipynb index b92732b..e0e6434 100644 --- a/content/Azure/06_running_analysis.ipynb +++ b/content/Azure/06_running_analysis.ipynb @@ -144,7 +144,7 @@ }, { "cell_type": "markdown", - "id": "fd30a9c7", + "id": "6f29b53d", "metadata": {}, "source": [ "Verify that *landsat-hls-azure.py* & *setup.sh* are listed." @@ -152,7 +152,7 @@ }, { "cell_type": "markdown", - "id": "8107e780", + "id": "bd671a7b", "metadata": {}, "source": [ "Run the *setup.sh* file to setup the environment by installing the \n", @@ -278,10 +278,10 @@ }, { "cell_type": "markdown", - "id": "467ad988", + "id": "f953a9ad", "metadata": {}, "source": [ - "Now delete the blob (image,png file)" + "Now delete the blob (image.png file)" ] }, { diff --git a/content/Azure/08_cleaning_up_resources.ipynb b/content/Azure/08_cleaning_up_resources.ipynb index caf6ee0..e10726d 100644 --- a/content/Azure/08_cleaning_up_resources.ipynb +++ b/content/Azure/08_cleaning_up_resources.ipynb @@ -24,23 +24,12 @@ }, { "cell_type": "markdown", - "id": "1377081d-7da5-4088-8ba9-966f297af1d6", + "id": "b5509da0", "metadata": {}, "source": [ "## Remove Resource Group\n", "\n", - "Removing a resource group removes all the resources associated with the resource group.\n", - "\n", - "**WARNING: This will remove all resources (virtual machines, storage buckets, etc.) from the `rg-essentials` resource group!**" - ] - }, - { - "cell_type": "markdown", - "id": "7171ff08", - "metadata": {}, - "source": [ - "RG=rg-essentials\n", - "echo $RG" + "Removing a resource group removes all the resources associated with the resource group." ] }, { @@ -52,27 +41,31 @@ ] }, { - "cell_type": "markdown", - "id": "b5d3261e", + "cell_type": "code", + "execution_count": null, + "id": "2b14f17c", "metadata": {}, + "outputs": [], "source": [ "az vm list --resource-group $RG --output table" ] }, { "cell_type": "markdown", - "id": "8ada5056-3963-4ca0-9250-ac0e6dc8aba8", + "id": "96e26725", "metadata": {}, "source": [ "Remove Resource Group. Note, this will take many seconds.\n", "\n", - "**WARNING: This will remove all resources (virtual machines, storage buckets, etc.) from the `rg-essentials` resource group!**" + "**WARNING: This will remove all resources (virtual machines, storage buckets, etc.) from your resource group!**" ] }, { - "cell_type": "markdown", - "id": "92c8ae09", + "cell_type": "code", + "execution_count": null, + "id": "911937bf", "metadata": {}, + "outputs": [], "source": [ "az group delete --resource-group $RG --yes" ]