From 913b7cb3203ce8a2cb7e7f632f9c1bee3da99351 Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Mon, 18 Oct 2021 21:34:29 +0100 Subject: [PATCH 001/124] Initial change --- AWS/1-Configure-Credentials-To-Access-AWS.md | 13 ---------- Azure-VNET-CLI/az-vnet.sh | 0 .../readme.md | 0 .../1-Configure-Credentials-To-Access-AWS.md | 11 +++++++++ Azure/create-terraform-storage.sh | 13 ++++++++++ README.md | 24 +++++++++---------- prerequisites.md | 16 ++++++------- 7 files changed, 44 insertions(+), 33 deletions(-) delete mode 100644 AWS/1-Configure-Credentials-To-Access-AWS.md create mode 100644 Azure-VNET-CLI/az-vnet.sh rename {EKS-VPC-CloudFormation => Azure-VNET-CLI}/readme.md (100%) create mode 100644 Azure/1-Configure-Credentials-To-Access-AWS.md create mode 100755 Azure/create-terraform-storage.sh diff --git a/AWS/1-Configure-Credentials-To-Access-AWS.md b/AWS/1-Configure-Credentials-To-Access-AWS.md deleted file mode 100644 index f4d95fb..0000000 --- a/AWS/1-Configure-Credentials-To-Access-AWS.md +++ /dev/null @@ -1,13 +0,0 @@ -# Configure Credentials To Access AWS At The Programmatic Level - -The purpse of this lab is to configure IAM credentials on your local computer so that you can access AWS at a programmatic level (SDKs, CLI, Terraform, etc.) - -## IAM -1. Open up the AWS management console and go to IAM -2. Create a new user or use your exististing AWS user -3. Give the user programmatic access -4. Copy the access key and secret key - -## Install The AWS CLI - -## Configure The AWS CLI \ No newline at end of file diff --git a/Azure-VNET-CLI/az-vnet.sh b/Azure-VNET-CLI/az-vnet.sh new file mode 100644 index 0000000..e69de29 diff --git a/EKS-VPC-CloudFormation/readme.md b/Azure-VNET-CLI/readme.md similarity index 100% rename from EKS-VPC-CloudFormation/readme.md rename to Azure-VNET-CLI/readme.md diff --git a/Azure/1-Configure-Credentials-To-Access-AWS.md b/Azure/1-Configure-Credentials-To-Access-AWS.md new file mode 100644 index 0000000..4018f6d --- /dev/null +++ b/Azure/1-Configure-Credentials-To-Access-AWS.md @@ -0,0 +1,11 @@ +# Configure Storage Account for Terraform State File + +The purpose of this lab is to create the location that will store the remote Terraform State file + +## Create Blob Storage location for Terraform State file +1. Edit the variables [] +2. Run the script ./create-terraform-storage.sh +3. The script will create +- Azure Resource Group +- Azure Storage Account +- Azure Blob storage location within Azure Storage Account \ No newline at end of file diff --git a/Azure/create-terraform-storage.sh b/Azure/create-terraform-storage.sh new file mode 100755 index 0000000..bb15b16 --- /dev/null +++ b/Azure/create-terraform-storage.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +RESOURCE_GROUP_NAME="devopstamops-rg" +STORAGE_ACCOUNT_NAME="devopstamopssa" + +# Create Resource Group +az group create -l uksouth -n $RESOURCE_GROUP_NAME + +# Create Storage Account +az storage account create -n $STORAGE_ACCOUNT_NAME -g $RESOURCE_GROUP_NAME -l uksouth --sku Standard_LRS + +# Create Storage Account blob +az storage container create --name tfstate --account-name $STORAGE_ACCOUNT_NAME \ No newline at end of file diff --git a/README.md b/README.md index a1c31f2..dccd5f5 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ -# DevOps-The-Hard-Way-AWS +# DevOps-The-Hard-Way-Azure -This tutorial contains a full, real-world solution for setting up an environment that is using DevOps technologies and practices for deploying apps and cloud services/cloud infrastructure to AWS. +This tutorial contains a full, real-world solution for setting up an environment that is using DevOps technologies and practices for deploying apps and cloud services/cloud infrastructure to Azure. - -The repository contains free labs, documentation, diagrams, and docs for setting up an entire workflow and DevOps environment from a real-world perspective in AWS. +The repository contains free labs, documentation, diagrams, and docs for setting up an entire workflow and DevOps environment from a real-world perspective in Azure. ## DevOps Scenario The scenario that you're currently facing is you work in an organization that is very monolithic. There is a ton of bare metal, virtualization, manual deployments of applications, and **old school** practices based on the current teams knowledge of IT. @@ -24,28 +23,29 @@ https://github.com/AdminTurnedDevOps/Python-Sample-Application ## Technology Details You will be using the following technologies and platforms to set up a DevOps environment. -1. AWS - - AWS will be used to host the application, cloud infrastructure, and any other services we may need to ensure the Uber app is deployed properly. +1. Azure + - Azure will be used to host the application, cloud infrastructure, and any other services we may need to ensure the Uber app is deployed properly. 2. GitHub - To store the application and infrastructure/automation code 3. Python - Python will be used for the Uber app (it is written in Python) and some automation efforts that aren't in Terraform. 4. Terraform - - Create an S3 bucket to store Terraform State files - - Create an AWS ECR repository with Terraform - - Create an EKS cluster + - Create an Azure ACR repository with Terraform + - Create an AKS cluster 5. Docker - Create a Docker image - - Store the Docker image in AWS ECR + - Store the Docker image in Azure ACR 6. Kubernetes - - To run the Docker image that's created for the containerized Uber app. Kubernetes, in this case, EKS, will be used to orchestrate the container. + - To run the Docker image that's created for the containerized Uber app. Kubernetes, in this case, AKS, will be used to orchestrate the container. 7. CI/CD - - Use GitHub Actions to create an EKS cluster + - Use GitHub Action to create an AKS cluster 8. Automated testing - Testing Terraform code with Checkov ## Labs 1. [Prerequisites](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/prerequisites.md) +2. Create Storage Account for Terraform State file - When running EKS, it requires specific networking. Because all environments will most likely be different, there's a CloudFormation template for this exact purpose. + - [Create EKS VPC](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/EKS-VPC-CloudFormation) 2. VPC - When running EKS, it requires specific networking. Because all environments will most likely be different, there's a CloudFormation template for this exact purpose. - [Create EKS VPC](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/EKS-VPC-CloudFormation) 3. AWS: diff --git a/prerequisites.md b/prerequisites.md index ec63da2..8972cee 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -8,21 +8,21 @@ DevOps isn't an entry level role by any means if it's being done correctly. Ther - Network, storage, and compute knowledge. - Held a prior systems administration, infrastructure engineer, or cloud engineer role. -## AWS Account +## Azure -### Create An AWS Account +### Create An Azure Account -To follow along with this tutorial, you should have an AWS account. If you don't already have one, you can sign up for a free 12 month trial [here](https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all). +To follow along with this tutorial, you should have an Azure account. If you don't already have one, you can sign up for a free 12 month trial [here](https://azure.microsoft.com/en-gb/free/search/?&ef_id=Cj0KCQjwtrSLBhCLARIsACh6RmiaUvnIcRuC0BE8HVqtnC09Za6Y_ByYHH8Z4qHmK5-inXXdgZB3d1EaAh8EEALw_wcB:G:s&OCID=AID2200274_SEM_Cj0KCQjwtrSLBhCLARIsACh6RmiaUvnIcRuC0BE8HVqtnC09Za6Y_ByYHH8Z4qHmK5-inXXdgZB3d1EaAh8EEALw_wcB:G:s&gclid=Cj0KCQjwtrSLBhCLARIsACh6RmiaUvnIcRuC0BE8HVqtnC09Za6Y_ByYHH8Z4qHmK5-inXXdgZB3d1EaAh8EEALw_wcB). -You should know that the tutorial for *DevOps The Hard Way* will cost money because some of the services that you use in AWS will not be part of the free tier. +You should know that the tutorial for *DevOps The Hard Way* will cost money because some of the services that you use in Azure will not be part of the free tier. -To learn more about the AWS Pricing Model so you understand what the cost will be, you can go [here](https://aws.amazon.com/pricing/) +To learn more about the AWS Pricing Model so you understand what the cost will be, you can go [here](https://azure.microsoft.com/en-gb/pricing/calculator/) -### Use the AWS CLI +### Use the Azure CLI -The AWS CLI is a way for you to interact with all AWS services at a programmatic level using the terminal. +The Azure CLI is a way for you to interact with all Azure services at a programmatic level using the terminal. -To set this up, follow the directions [here](https://docs.aws.amazon.com/polly/latest/dg/setup-aws-cli.html) +To set this up, follow the directions [here](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) ## Installations You will need to download some software and services for this tutorial. From 913f3e8c161135371dfb7b55774fa87acdb75f5d Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Mon, 18 Oct 2021 22:15:39 +0100 Subject: [PATCH 002/124] more changes --- ...> 1-Configure-Terraform-Remote-Storage.md} | 2 +- README.md | 7 +++- ...Create-S3-Bucket-To-Store-TFSTATE-Files.md | 17 --------- .../2-Create-ECR.md | 17 --------- Terraform-AWS-Services-Creation/ECR/main.tf | 25 ------------ .../ECR/terraform.tfvars | 1 - .../ECR/variables.tf | 5 --- .../1-Create-ACR.md | 18 +++++++++ .../2-Create-VNET.md | 18 +++++++++ ...-Create-EKS-Cluster-IAM-Role-And-Policy.md | 2 +- .../4-Run-CICD-For-EKS-Cluster.md | 0 Terraform-AZURE-Services-Creation/ACR/main.tf | 26 +++++++++++++ .../ACR/terraform.tfvars | 2 + .../ACR/variables.tf | 11 ++++++ .../EKS-Fargate/main.tf | 0 .../EKS-Fargate/variables.tf | 0 .../EKS-With-Worker-Nodes/main.tf | 0 .../EKS-With-Worker-Nodes/variables.tf | 0 .../Log-Analytics/main.tf | 38 +++++++++++++++++++ .../Log-Analytics/terraform.tfvars | 2 + .../Log-Analytics/variables.tf | 11 ++++++ .../VNET/main.tf | 38 +++++++++++++++++++ .../VNET/terraform.tfvars | 7 ++++ .../VNET/variables.tf | 36 ++++++++++++++++++ .../terraform-state-s3-bucket/main.tf | 0 25 files changed, 214 insertions(+), 69 deletions(-) rename Azure/{1-Configure-Credentials-To-Access-AWS.md => 1-Configure-Terraform-Remote-Storage.md} (74%) delete mode 100644 Terraform-AWS-Services-Creation/1-Create-S3-Bucket-To-Store-TFSTATE-Files.md delete mode 100644 Terraform-AWS-Services-Creation/2-Create-ECR.md delete mode 100644 Terraform-AWS-Services-Creation/ECR/main.tf delete mode 100644 Terraform-AWS-Services-Creation/ECR/terraform.tfvars delete mode 100644 Terraform-AWS-Services-Creation/ECR/variables.tf create mode 100644 Terraform-AZURE-Services-Creation/1-Create-ACR.md create mode 100644 Terraform-AZURE-Services-Creation/2-Create-VNET.md rename {Terraform-AWS-Services-Creation => Terraform-AZURE-Services-Creation}/3-Create-EKS-Cluster-IAM-Role-And-Policy.md (95%) rename {Terraform-AWS-Services-Creation => Terraform-AZURE-Services-Creation}/4-Run-CICD-For-EKS-Cluster.md (100%) create mode 100644 Terraform-AZURE-Services-Creation/ACR/main.tf create mode 100644 Terraform-AZURE-Services-Creation/ACR/terraform.tfvars create mode 100644 Terraform-AZURE-Services-Creation/ACR/variables.tf rename {Terraform-AWS-Services-Creation => Terraform-AZURE-Services-Creation}/EKS-Fargate/main.tf (100%) rename {Terraform-AWS-Services-Creation => Terraform-AZURE-Services-Creation}/EKS-Fargate/variables.tf (100%) rename {Terraform-AWS-Services-Creation => Terraform-AZURE-Services-Creation}/EKS-With-Worker-Nodes/main.tf (100%) rename {Terraform-AWS-Services-Creation => Terraform-AZURE-Services-Creation}/EKS-With-Worker-Nodes/variables.tf (100%) create mode 100644 Terraform-AZURE-Services-Creation/Log-Analytics/main.tf create mode 100644 Terraform-AZURE-Services-Creation/Log-Analytics/terraform.tfvars create mode 100644 Terraform-AZURE-Services-Creation/Log-Analytics/variables.tf create mode 100644 Terraform-AZURE-Services-Creation/VNET/main.tf create mode 100644 Terraform-AZURE-Services-Creation/VNET/terraform.tfvars create mode 100644 Terraform-AZURE-Services-Creation/VNET/variables.tf rename {Terraform-AWS-Services-Creation => Terraform-AZURE-Services-Creation}/terraform-state-s3-bucket/main.tf (100%) diff --git a/Azure/1-Configure-Credentials-To-Access-AWS.md b/Azure/1-Configure-Terraform-Remote-Storage.md similarity index 74% rename from Azure/1-Configure-Credentials-To-Access-AWS.md rename to Azure/1-Configure-Terraform-Remote-Storage.md index 4018f6d..a804f78 100644 --- a/Azure/1-Configure-Credentials-To-Access-AWS.md +++ b/Azure/1-Configure-Terraform-Remote-Storage.md @@ -3,7 +3,7 @@ The purpose of this lab is to create the location that will store the remote Terraform State file ## Create Blob Storage location for Terraform State file -1. Edit the variables [] +1. Edit the [variables](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/create-terraform-storage.sh#L3-L4) 2. Run the script ./create-terraform-storage.sh 3. The script will create - Azure Resource Group diff --git a/README.md b/README.md index dccd5f5..0ba54a2 100644 --- a/README.md +++ b/README.md @@ -44,8 +44,11 @@ You will be using the following technologies and platforms to set up a DevOps en ## Labs 1. [Prerequisites](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/prerequisites.md) -2. Create Storage Account for Terraform State file - When running EKS, it requires specific networking. Because all environments will most likely be different, there's a CloudFormation template for this exact purpose. - - [Create EKS VPC](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/EKS-VPC-CloudFormation) +2. [Create Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/1-Configure-Terraform-Remote-Storage.md) - When deploying Terraform there is a requirement that it must store a state file; this file is used by Terraform to map Azure Resources to your configuration that you want to deploy, keeps track of meta data and can also assist with improving performance for larger Azure Resource deployments. + +In this scenario, the Terraform State file will be stored in remote state location of an Azure Storage Account. + + 2. VPC - When running EKS, it requires specific networking. Because all environments will most likely be different, there's a CloudFormation template for this exact purpose. - [Create EKS VPC](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/EKS-VPC-CloudFormation) 3. AWS: diff --git a/Terraform-AWS-Services-Creation/1-Create-S3-Bucket-To-Store-TFSTATE-Files.md b/Terraform-AWS-Services-Creation/1-Create-S3-Bucket-To-Store-TFSTATE-Files.md deleted file mode 100644 index e964f03..0000000 --- a/Terraform-AWS-Services-Creation/1-Create-S3-Bucket-To-Store-TFSTATE-Files.md +++ /dev/null @@ -1,17 +0,0 @@ -# Create an S3 bucket to store Terraform state files - -In this lab you will create an S3 bucket that will be used to store Terraform state files - -## Create The Terraform Configurations - -1. You can find the Terraform configuration for the S3 bucket [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/Terraform-AWS-Services-Creation/terraform-state-s3-bucket). The Terraform configuration files are used to create an S3 bucket that will store your TFSTATE. - -The Terraform `main.tf` will do a few things: -- Create the S3 bucket in the `us-east-1` region -- Ensure that version enabling is set to `True` -- Utilize AES256 encryption - -2. Create the bucket by running the following: -- `terraform init` - To initialize the working directory and pull down the provider -- `terraform plan` - To go through a "check" and confirm the configurations are valid -- `terraform apply - To create the resource \ No newline at end of file diff --git a/Terraform-AWS-Services-Creation/2-Create-ECR.md b/Terraform-AWS-Services-Creation/2-Create-ECR.md deleted file mode 100644 index 59825ad..0000000 --- a/Terraform-AWS-Services-Creation/2-Create-ECR.md +++ /dev/null @@ -1,17 +0,0 @@ -# Create an Elastic Container Registry Repository - -In this lab you will create a repository to store the Docker image that you created for the Uber app. - -## Create the ECR Terraform Configuration - -1. You can find the Terraform configuration for ECR [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/Terraform-AWS-Services-Creation/ECR). The Terraform configuration files are used to create a repository in Elastic Container Repository (ECR). - -The Terraform `main.tf` will do a few things: -- Use a Terraform backend to store the `.tfstate` in an S3 bucket -- Use the `us-east-1` region, but feel free to change that if you'd like -- Use the `aws_ecr_repository` Terraform resource to create a new respository. - -2. Create the bucket by running the following: -- `terraform init` - To initialize the working directory and pull down the provider -- `terraform plan` - To go through a "check" and confirm the configurations are valid -- `terraform apply - To create the resource \ No newline at end of file diff --git a/Terraform-AWS-Services-Creation/ECR/main.tf b/Terraform-AWS-Services-Creation/ECR/main.tf deleted file mode 100644 index 274e37f..0000000 --- a/Terraform-AWS-Services-Creation/ECR/main.tf +++ /dev/null @@ -1,25 +0,0 @@ -terraform { - backend "s3" { - bucket = "terraform-state-devopsthehardway" - key = "ecr-terraform.tfstate" - region = "us-east-1" - } - required_providers { - aws = { - source = "hashicorp/aws" - } - } -} - -provider "aws" { - region = "us-east-1" -} - -resource "aws_ecr_repository" "devopsthehardway-ecr-repo" { - name = var.repo_name - image_tag_mutability = "MUTABLE" - - image_scanning_configuration { - scan_on_push = true - } -} \ No newline at end of file diff --git a/Terraform-AWS-Services-Creation/ECR/terraform.tfvars b/Terraform-AWS-Services-Creation/ECR/terraform.tfvars deleted file mode 100644 index ce54947..0000000 --- a/Terraform-AWS-Services-Creation/ECR/terraform.tfvars +++ /dev/null @@ -1 +0,0 @@ -repo_name = "devopsthehardway-ecr" \ No newline at end of file diff --git a/Terraform-AWS-Services-Creation/ECR/variables.tf b/Terraform-AWS-Services-Creation/ECR/variables.tf deleted file mode 100644 index ae61bb5..0000000 --- a/Terraform-AWS-Services-Creation/ECR/variables.tf +++ /dev/null @@ -1,5 +0,0 @@ -variable repo_name { - type = string - default = "devopsthehardway" - description = "ECR repo to store a Docker image" -} diff --git a/Terraform-AZURE-Services-Creation/1-Create-ACR.md b/Terraform-AZURE-Services-Creation/1-Create-ACR.md new file mode 100644 index 0000000..7061cd8 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -0,0 +1,18 @@ +# Create an Azure Container Registry Repository + +In this lab you will create a repository to store the Docker image that you created for the Uber app. + +## Create the ACR Terraform Configuration + +1. You can find the Terraform configuration for Azure Container Registry (ACR) [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/ACR). The Terraform configuration files are used to create a repository in Azure Container Registry (ACR). + +The Terraform `main.tf` will do a few things: +- Use a Terraform backend to store the `.tfstate` in an Azure Storage Account +- Use the `uksouth` region, but feel free to change that if you'd like +- Use the `azurerm_resource_group` Terraform resource to create a new Resource Group. +- Use the `azurerm_container_registry` Terraform resource to create a new ACR. + +2. Create the ACR by running the following: +- `terraform init` - To initialize the working directory and pull down the provider +- `terraform plan` - To go through a "check" and confirm the configurations are valid +- `terraform apply` - To create the resource \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/2-Create-VNET.md b/Terraform-AZURE-Services-Creation/2-Create-VNET.md new file mode 100644 index 0000000..9fec0e4 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -0,0 +1,18 @@ +# Create an Azure Container Registry Repository + +In this lab you will create a Virtual Network (VNET) that will be used to deploy your AKS instance into + +## Create the ACR Terraform Configuration + +1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/VNET). The Terraform configuration files are used to create an Azure Vitual Network. + +The Terraform `main.tf` will do a few things: +- Use a Terraform backend to store the `.tfstate` in an Azure Storage Account +- Use the `uksouth` region, but feel free to change that if you'd like +- Use the `azurerm_virtual_network` Terraform resource to create a VNET. +- Use the `azurerm_subnet` Terraform resource to create relevant subnets. + +2. Create the ACR by running the following: +- `terraform init` - To initialize the working directory and pull down the provider +- `terraform plan` - To go through a "check" and confirm the configurations are valid +- `terraform apply` - To create the resource \ No newline at end of file diff --git a/Terraform-AWS-Services-Creation/3-Create-EKS-Cluster-IAM-Role-And-Policy.md b/Terraform-AZURE-Services-Creation/3-Create-EKS-Cluster-IAM-Role-And-Policy.md similarity index 95% rename from Terraform-AWS-Services-Creation/3-Create-EKS-Cluster-IAM-Role-And-Policy.md rename to Terraform-AZURE-Services-Creation/3-Create-EKS-Cluster-IAM-Role-And-Policy.md index c9496b2..41ecaa3 100644 --- a/Terraform-AWS-Services-Creation/3-Create-EKS-Cluster-IAM-Role-And-Policy.md +++ b/Terraform-AZURE-Services-Creation/3-Create-EKS-Cluster-IAM-Role-And-Policy.md @@ -16,4 +16,4 @@ The Terraform `main.tf` will do a few things: 2. Create the bucket by running the following: - `terraform init` - To initialize the working directory and pull down the provider - `terraform plan` - To go through a "check" and confirm the configurations are valid -- `terraform apply - To create the resource +- `terraform apply` - To create the resource diff --git a/Terraform-AWS-Services-Creation/4-Run-CICD-For-EKS-Cluster.md b/Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md similarity index 100% rename from Terraform-AWS-Services-Creation/4-Run-CICD-For-EKS-Cluster.md rename to Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md diff --git a/Terraform-AZURE-Services-Creation/ACR/main.tf b/Terraform-AZURE-Services-Creation/ACR/main.tf new file mode 100644 index 0000000..bcb70e0 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/ACR/main.tf @@ -0,0 +1,26 @@ +terraform { + backend "azurerm" { + resource_group_name = "devopstamops-rg" + storage_account_name = "devopstamopssa" + container_name = "tfstate" + key = "acr-terraform.tfstate" + } +} + +provider "azurerm" { + version = "~> 2.0" + features {} +} + +resource "azurerm_resource_group" "acr_resource_group" { + name = "${var.name}-rg" + location = var.location +} + +resource "azurerm_container_registry" "acr" { + name = "${var.name}acr" + resource_group_name = azurerm_resource_group.acr_resource_group.name + location = azurerm_resource_group.acr_resource_group.location + sku = "Standard" + admin_enabled = false +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/ACR/terraform.tfvars b/Terraform-AZURE-Services-Creation/ACR/terraform.tfvars new file mode 100644 index 0000000..92b9da1 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/ACR/terraform.tfvars @@ -0,0 +1,2 @@ +name = "devopsthehardway" +location = "uksouth" \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/ACR/variables.tf b/Terraform-AZURE-Services-Creation/ACR/variables.tf new file mode 100644 index 0000000..6f13071 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/ACR/variables.tf @@ -0,0 +1,11 @@ +variable "name" { + type = string + default = "devopsthehardway" + description = "Name for resources" +} + +variable "location" { + type = string + default = "uksouth" + description = "Azure Location of resources" +} diff --git a/Terraform-AWS-Services-Creation/EKS-Fargate/main.tf b/Terraform-AZURE-Services-Creation/EKS-Fargate/main.tf similarity index 100% rename from Terraform-AWS-Services-Creation/EKS-Fargate/main.tf rename to Terraform-AZURE-Services-Creation/EKS-Fargate/main.tf diff --git a/Terraform-AWS-Services-Creation/EKS-Fargate/variables.tf b/Terraform-AZURE-Services-Creation/EKS-Fargate/variables.tf similarity index 100% rename from Terraform-AWS-Services-Creation/EKS-Fargate/variables.tf rename to Terraform-AZURE-Services-Creation/EKS-Fargate/variables.tf diff --git a/Terraform-AWS-Services-Creation/EKS-With-Worker-Nodes/main.tf b/Terraform-AZURE-Services-Creation/EKS-With-Worker-Nodes/main.tf similarity index 100% rename from Terraform-AWS-Services-Creation/EKS-With-Worker-Nodes/main.tf rename to Terraform-AZURE-Services-Creation/EKS-With-Worker-Nodes/main.tf diff --git a/Terraform-AWS-Services-Creation/EKS-With-Worker-Nodes/variables.tf b/Terraform-AZURE-Services-Creation/EKS-With-Worker-Nodes/variables.tf similarity index 100% rename from Terraform-AWS-Services-Creation/EKS-With-Worker-Nodes/variables.tf rename to Terraform-AZURE-Services-Creation/EKS-With-Worker-Nodes/variables.tf diff --git a/Terraform-AZURE-Services-Creation/Log-Analytics/main.tf b/Terraform-AZURE-Services-Creation/Log-Analytics/main.tf new file mode 100644 index 0000000..9e162f0 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/Log-Analytics/main.tf @@ -0,0 +1,38 @@ +terraform { + backend "azurerm" { + resource_group_name = "devopstamops-rg" + storage_account_name = "devopstamopssa" + container_name = "tfstate" + key = "la-terraform.tfstate" + } +} + +provider "azurerm" { + version = "~> 2.0" + features {} +} + +data "azurerm_resource_group" "resource_group" { + name = "${var.name}-rg" +} + +resource "azurerm_log_analytics_workspace" "Log_Analytics_WorkSpace" { + # The WorkSpace name has to be unique across the whole of azure, not just the current subscription/tenant. + name = "${var.name}-la" + location = var.location + resource_group_name = data.azurerm_resource_group.resource_group.name + sku = "PerGB2018" +} + +resource "azurerm_log_analytics_solution" "Log_Analytics_Solution_ContainerInsights" { + solution_name = "ContainerInsights" + location = azurerm_log_analytics_workspace.Log_Analytics_WorkSpace.location + resource_group_name = data.azurerm_resource_group.resource_group.name + workspace_resource_id = azurerm_log_analytics_workspace.Log_Analytics_WorkSpace.id + workspace_name = azurerm_log_analytics_workspace.Log_Analytics_WorkSpace.name + + plan { + publisher = "Microsoft" + product = "OMSGallery/ContainerInsights" + } +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/Log-Analytics/terraform.tfvars b/Terraform-AZURE-Services-Creation/Log-Analytics/terraform.tfvars new file mode 100644 index 0000000..92b9da1 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/Log-Analytics/terraform.tfvars @@ -0,0 +1,2 @@ +name = "devopsthehardway" +location = "uksouth" \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/Log-Analytics/variables.tf b/Terraform-AZURE-Services-Creation/Log-Analytics/variables.tf new file mode 100644 index 0000000..03c8598 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/Log-Analytics/variables.tf @@ -0,0 +1,11 @@ +variable "name" { + type = string + default = "devopsthehardway" + description = "Name for resources" +} + +variable "location" { + type = string + default = "uksouth" + description = "Azure Location of resources" +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/VNET/main.tf b/Terraform-AZURE-Services-Creation/VNET/main.tf new file mode 100644 index 0000000..abcc75d --- /dev/null +++ b/Terraform-AZURE-Services-Creation/VNET/main.tf @@ -0,0 +1,38 @@ +terraform { + backend "azurerm" { + resource_group_name = "devopstamops-rg" + storage_account_name = "devopstamopssa" + container_name = "tfstate" + key = "vnet-terraform.tfstate" + } +} + +provider "azurerm" { + version = "~> 2.0" + features {} +} + +data "azurerm_resource_group" "resource_group" { + name = "${var.name}-rg" +} + +resource "azurerm_virtual_network" "virtual_network" { + name = var.name + location = var.location + resource_group_name = data.azurerm_resource_group.resource_group.name + address_space = [var.network_address_space] +} + +resource "azurerm_subnet" "aks_subnet" { + name = var.aks_subnet_address_name + resource_group_name = data.azurerm_resource_group.resource_group.name + virtual_network_name = azurerm_virtual_network.virtual_network.name + address_prefixes = [var.aks_subnet_address_prefix] +} + +resource "azurerm_subnet" "subnet" { + name = var.subnet_address_name + resource_group_name = data.azurerm_resource_group.resource_group.name + virtual_network_name = azurerm_virtual_network.virtual_network.name + address_prefixes = [var.subnet_address_prefix] +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars b/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars new file mode 100644 index 0000000..982dbc2 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars @@ -0,0 +1,7 @@ +name = "devopsthehardway" +location = "uksouth" +network_address_space = "192.168.0.0/16" +aks_subnet_address_name = "aks" +aks_subnet_address_prefix = "192.168.0.0/24" +subnet_address_name = "subnet2" +subnet_address_prefix = "192.168.1.0/24" diff --git a/Terraform-AZURE-Services-Creation/VNET/variables.tf b/Terraform-AZURE-Services-Creation/VNET/variables.tf new file mode 100644 index 0000000..02763b5 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/VNET/variables.tf @@ -0,0 +1,36 @@ +variable "name" { + type = string + default = "devopsthehardway" + description = "Name for resources" +} + +variable "location" { + type = string + default = "uksouth" + description = "Azure Location of resources" +} + +variable "network_address_space" { + type = string + description = "Azure VNET Address Space" +} + +variable "aks_subnet_address_name" { + type = string + description = "AKS Subnet Address Name" +} + +variable "aks_subnet_address_prefix" { + type = string + description = "AKS Subnet Address Space" +} + +variable "subnet_address_name" { + type = string + description = "Subnet Address Name" +} + +variable "subnet_address_prefix" { + type = string + description = "Subnet Address Space" +} \ No newline at end of file diff --git a/Terraform-AWS-Services-Creation/terraform-state-s3-bucket/main.tf b/Terraform-AZURE-Services-Creation/terraform-state-s3-bucket/main.tf similarity index 100% rename from Terraform-AWS-Services-Creation/terraform-state-s3-bucket/main.tf rename to Terraform-AZURE-Services-Creation/terraform-state-s3-bucket/main.tf From 6351505925f56e7d75a95f39e82950fe28b06dbf Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Tue, 19 Oct 2021 15:58:06 +0100 Subject: [PATCH 003/124] Add AKS --- Azure/2-Create-Azure-AD-Group-AKS-Admins.md | 10 ++ Azure/create-azure-ad-group.sh | 14 ++ README.md | 1 + .../2-Create-VNET.md | 4 +- .../3-Create-Log-Analytics.md | 17 +++ ...Create-AKS-Cluster-IAM-Role-And-Policy.md} | 0 Terraform-AZURE-Services-Creation/AKS/main.tf | 123 ++++++++++++++++++ .../AKS/terraform.tfvars | 13 ++ .../AKS/variables.tf | 38 ++++++ .../VNET/main.tf | 4 +- .../VNET/terraform.tfvars | 2 +- 11 files changed, 221 insertions(+), 5 deletions(-) create mode 100644 Azure/2-Create-Azure-AD-Group-AKS-Admins.md create mode 100644 Azure/create-azure-ad-group.sh create mode 100644 Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md rename Terraform-AZURE-Services-Creation/{3-Create-EKS-Cluster-IAM-Role-And-Policy.md => 4-Create-AKS-Cluster-IAM-Role-And-Policy.md} (100%) create mode 100644 Terraform-AZURE-Services-Creation/AKS/main.tf create mode 100644 Terraform-AZURE-Services-Creation/AKS/terraform.tfvars create mode 100644 Terraform-AZURE-Services-Creation/AKS/variables.tf diff --git a/Azure/2-Create-Azure-AD-Group-AKS-Admins.md b/Azure/2-Create-Azure-AD-Group-AKS-Admins.md new file mode 100644 index 0000000..7f1afc0 --- /dev/null +++ b/Azure/2-Create-Azure-AD-Group-AKS-Admins.md @@ -0,0 +1,10 @@ +# Configure Storage Account for Terraform State File + +The purpose of this lab to create an Azure AD Group for AKS Admins. These "admins" will be the group of users that will be able to access the AKS cluster using kubectl + +## Create Azure AD AKS Admin Group +1. Run the script ./create-azure-ad-group.sh +2. The script will create +- Azure AD Group named "devopsthehardway-aks-group" +- Add current user logged into Az CLI to AD Group "devopsthehardway-aks-group" +- Will output Azure AD Group ID, note this down as it will be required for AKS Terraform \ No newline at end of file diff --git a/Azure/create-azure-ad-group.sh b/Azure/create-azure-ad-group.sh new file mode 100644 index 0000000..c4192f4 --- /dev/null +++ b/Azure/create-azure-ad-group.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +AZURE_AD_GROUP_NAME="devopsthehardway-aks-group" +CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query objectId -o tsv) + +# Create Azure AD Group +az ad group create --display-name $AZURE_AD_GROUP_NAME --mail-nickname $AZURE_AD_GROUP_NAME + +# Add Current az login user to Azure AD Group +az ad group member add --group $AZURE_AD_GROUP_NAME --member-id $CURRENT_USER_OBJECTID + +AZURE_GROUP_ID=$(az ad group show --group "devopsthehardway-aks-group" --query objectId -o tsv) + +echo "AZURE AD GROUP ID IS: $AZURE_GROUP_ID" \ No newline at end of file diff --git a/README.md b/README.md index 0ba54a2..be1d3d5 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ You will be using the following technologies and platforms to set up a DevOps en ## Labs 1. [Prerequisites](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/prerequisites.md) 2. [Create Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/1-Configure-Terraform-Remote-Storage.md) - When deploying Terraform there is a requirement that it must store a state file; this file is used by Terraform to map Azure Resources to your configuration that you want to deploy, keeps track of meta data and can also assist with improving performance for larger Azure Resource deployments. +3. [Create Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/2-Create-Azure-AD-Group-AKS-Admins.md) In this scenario, the Terraform State file will be stored in remote state location of an Azure Storage Account. diff --git a/Terraform-AZURE-Services-Creation/2-Create-VNET.md b/Terraform-AZURE-Services-Creation/2-Create-VNET.md index 9fec0e4..cd419b1 100644 --- a/Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -7,10 +7,10 @@ In this lab you will create a Virtual Network (VNET) that will be used to deploy 1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/VNET). The Terraform configuration files are used to create an Azure Vitual Network. The Terraform `main.tf` will do a few things: -- Use a Terraform backend to store the `.tfstate` in an Azure Storage Account -- Use the `uksouth` region, but feel free to change that if you'd like - Use the `azurerm_virtual_network` Terraform resource to create a VNET. - Use the `azurerm_subnet` Terraform resource to create relevant subnets. +- Use the `uksouth` region, but feel free to change that if you'd like + 2. Create the ACR by running the following: - `terraform init` - To initialize the working directory and pull down the provider diff --git a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md new file mode 100644 index 0000000..addb221 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -0,0 +1,17 @@ +# Create an Azure Container Registry Repository + +In this lab you will create a Log Analytics workspace that will be used to view container insights of your AKS Cluster + +## Create the ACR Terraform Configuration + +1. You can find the Terraform configuration for Log Analytics [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/Log-Analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. + +The Terraform `main.tf` will do a few things: +- Use the `azurerm_log_analytics_workspace` Terraform resource to create a Log Analytics workspace. +- Use the `azurerm_log_analytics_solution` Terraform resource to enable the Log Analytics solution ContainerInsights. +- Use the `uksouth` region, but feel free to change that if you'd like + +2. Create the ACR by running the following: +- `terraform init` - To initialize the working directory and pull down the provider +- `terraform plan` - To go through a "check" and confirm the configurations are valid +- `terraform apply` - To create the resource diff --git a/Terraform-AZURE-Services-Creation/3-Create-EKS-Cluster-IAM-Role-And-Policy.md b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Role-And-Policy.md similarity index 100% rename from Terraform-AZURE-Services-Creation/3-Create-EKS-Cluster-IAM-Role-And-Policy.md rename to Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Role-And-Policy.md diff --git a/Terraform-AZURE-Services-Creation/AKS/main.tf b/Terraform-AZURE-Services-Creation/AKS/main.tf new file mode 100644 index 0000000..102943f --- /dev/null +++ b/Terraform-AZURE-Services-Creation/AKS/main.tf @@ -0,0 +1,123 @@ +terraform { + backend "azurerm" { + resource_group_name = "devopstamops-rg" + storage_account_name = "devopstamopssa" + container_name = "tfstate" + key = "aks-terraform.tfstate" + } +} + +provider "azurerm" { + version = "~> 2.0" + features {} +} + +data "azurerm_resource_group" "resource_group" { + name = "${var.name}-rg" +} + +data "azurerm_subnet" "akssubnet" { + name = "aks" + virtual_network_name = "${var.name}-vnet" + resource_group_name = data.azurerm_resource_group.resource_group.name +} + +data "azurerm_subnet" "appgwsubnet" { + name = "appgw" + virtual_network_name = "${var.name}-vnet" + resource_group_name = data.azurerm_resource_group.resource_group.name +} + +data "azurerm_log_analytics_workspace" "workspace" { + name = "${var.name}-la" + resource_group_name = data.azurerm_resource_group.resource_group.name +} + +resource "azurerm_kubernetes_cluster" "k8s" { + name = "${var.name}aks" + location = var.location + resource_group_name = data.azurerm_resource_group.resource_group.name + dns_prefix = "${var.name}dns" + kubernetes_version = var.kubernetes_version + + node_resource_group = "${var.name}-node-rg" + + linux_profile { + admin_username = "ubuntu" + + ssh_key { + key_data = var.ssh_public_key + } + } + + default_node_pool { + name = "agentpool" + node_count = var.agent_count + vm_size = var.vm_size + vnet_subnet_id = data.azurerm_subnet.akssubnet.id + type = "VirtualMachineScaleSets" + orchestrator_version = var.kubernetes_version + } + + identity { + type = "SystemAssigned" + } + + addon_profile { + oms_agent { + enabled = var.addons.oms_agent + log_analytics_workspace_id = data.azurerm_log_analytics_workspace.workspace.id + } + + ingress_application_gateway { + enabled = var.addons.ingress_application_gateway + subnet_id = data.azurerm_subnet.appgwsubnet.id + } + + } + + network_profile { + load_balancer_sku = "standard" + network_plugin = "azure" + } + + role_based_access_control { + enabled = var.kubernetes_cluster_rbac_enabled + + azure_active_directory { + managed = true + admin_group_object_ids = [var.aks_admins_group_object_id] + } + } + +} + +data "azurerm_resource_group" "node_resource_group" { + name = azurerm_kubernetes_cluster.k8s.node_resource_group + depends_on = [ + azurerm_kubernetes_cluster.k8s + ] +} + +resource "azurerm_role_assignment" "node_infrastructure_update_scale_set" { + principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id + scope = data.azurerm_resource_group.node_resource_group.id + role_definition_name = "Virtual Machine Contributor" + depends_on = [ + azurerm_kubernetes_cluster.k8s + ] +} + +data "azurerm_container_registry" "example" { + name = "${var.name}acr" + resource_group_name = data.azurerm_resource_group.resource_group.name +} + +resource "azurerm_role_assignment" "acr_pull" { + principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id + scope = data.azurerm_resource_group.resource_group.id + role_definition_name = "ACR Pull" + depends_on = [ + azurerm_kubernetes_cluster.k8s + ] +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars new file mode 100644 index 0000000..906ef8f --- /dev/null +++ b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars @@ -0,0 +1,13 @@ +name = "devopsthehardway" +location = "uksouth" + +kubernetes_version = "1.19.11" +agent_count = 3 +vm_size = "Standard_DS2_v2" +ssh_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrt/GYkYpuQYRxM3lgjOr3Wqx8g5nQIbrg6Mr53wZGb35+ft+PibDMqxXZ7xq7fC3YuLnnO022IPgEjkF9fP03ZmfUeLjJJvw8YcutN9DD/2cx93BpKFPNUsqEB+za1iJ16kMsCojy35c1R64O+rw20D6iP96rmDAyIc5FR03y00eyAzQ8vo7/u9+VPwpdGEI7QCokZROcj6iNVz1V/1t6G4AEufPLokdj8J0gla/dN+tvnSLRQVBTDiD4jmVGImpWFqqKaH6R9SSXmRzj0uhvJUmSiZAZCb1caPEYgPEvNITuGQFdykPoY/4Z/3B+x/ipEQbWy8yL7bDFSXZTYhVKlPVyPbUtN5QFt7QtCtg84xDAZ6GA6AnONTtMxX2jvdzB9yh1ZsteNrOZ/Jo3ecuie573syQfG23Tu6qTqak8O7ZTOLY9iPx2ego3KvTWH/Q3lIvjnlpfCQtFtSgkNxjalMBk+NwwEgZHWRREOHwJmQIKVN0gSitN1KXobrqwxNk= tamops@Synth" +aks_admins_group_object_id = "e97b6454-3fa1-499e-8e5c-5d631e9ca4d1" + +addons = { + oms_agent = true + ingress_application_gateway = true +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/variables.tf b/Terraform-AZURE-Services-Creation/AKS/variables.tf new file mode 100644 index 0000000..7c55ccd --- /dev/null +++ b/Terraform-AZURE-Services-Creation/AKS/variables.tf @@ -0,0 +1,38 @@ +variable "name" { + type = string + default = "devopsthehardway" + description = "Name for resources" +} + +variable "location" { + type = string + default = "uksouth" + description = "Azure Location of resources" +} + +variable "addons" { + description = "Defines which addons will be activated." + type = object({ + oms_agent = bool + ingress_application_gateway = bool + }) +} + +variable "kubernetes_cluster_rbac_enabled" { + default = "true" +} + +variable "kubernetes_version" { +} + +variable "agent_count" { +} + +variable "vm_size" { +} + +variable "ssh_public_key" { +} + +variable "aks_admins_group_object_id" { +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/VNET/main.tf b/Terraform-AZURE-Services-Creation/VNET/main.tf index abcc75d..acea780 100644 --- a/Terraform-AZURE-Services-Creation/VNET/main.tf +++ b/Terraform-AZURE-Services-Creation/VNET/main.tf @@ -17,7 +17,7 @@ data "azurerm_resource_group" "resource_group" { } resource "azurerm_virtual_network" "virtual_network" { - name = var.name + name = "${var.name}-vnet" location = var.location resource_group_name = data.azurerm_resource_group.resource_group.name address_space = [var.network_address_space] @@ -30,7 +30,7 @@ resource "azurerm_subnet" "aks_subnet" { address_prefixes = [var.aks_subnet_address_prefix] } -resource "azurerm_subnet" "subnet" { +resource "azurerm_subnet" "app_gwsubnet" { name = var.subnet_address_name resource_group_name = data.azurerm_resource_group.resource_group.name virtual_network_name = azurerm_virtual_network.virtual_network.name diff --git a/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars b/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars index 982dbc2..542f7dd 100644 --- a/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars +++ b/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars @@ -3,5 +3,5 @@ location = "uksouth" network_address_space = "192.168.0.0/16" aks_subnet_address_name = "aks" aks_subnet_address_prefix = "192.168.0.0/24" -subnet_address_name = "subnet2" +subnet_address_name = "appgw" subnet_address_prefix = "192.168.1.0/24" From dc316c970351a062eccf206cf60a70897e41c27a Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Tue, 19 Oct 2021 16:24:29 +0100 Subject: [PATCH 004/124] test workflow --- .../4-Run-CICD-For-EKS-Cluster.md | 23 ++++++++++++++----- Terraform-AZURE-Services-Creation/AKS/main.tf | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md b/Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md index fe72471..9f202a4 100644 --- a/Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md +++ b/Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md @@ -1,19 +1,30 @@ # Create EKS Cluster With CICD -In this lab, you'll learn how to create an EKS cluster using GitHub Actions. The code can be found [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/Terraform-AWS-Services-Creation/EKS-With-Worker-Nodes) +In this lab, you'll learn how to create an EKS cluster using GitHub Actions. The code can be found [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/AKS) ## Secrets -Prior to running the pipeline, you'll need to set up authentication from GitHub to AWS. To do that, you'll set up secrets. +Prior to running the pipeline, you'll need to set up authentication from GitHub to Azure. To do that, you'll setup an Azure Service Principal. -You'll need an AWS Access Key ID and an AWS Secret Access Key as those are the two secrets you'll be adding into the GitHub repository. These two secrets will allow you to connect to AWS from GitHub Actions. +Using the below AZ Cli(Note Down Secret): + +`az ad sp create-for-rbac --name devopsthehardway` + +Alternatively - [this can be done via Azure Portal](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal) + +You'll need both the clientID of the service principal and secret that was created. + +Please Note: The Service Principal needs IAM permission to the subscription/resource group to where the Azure resources are deployed. In this example, I gave **contributor** access to the **subscription**. + +You'll be adding 4 screts into the GitHub repository. These four secrets will allow you to connect to Azure from GitHub Actions. 1. In the code repository, go to Settings --> Secrets 2. Add in two secrets: -`AWS_ACCESS_KEY_ID` -`AWS_SECRET_ACCESS_KEY` +`AZURE_AD_CLIENT_ID` – Will be the service principal ID from above +`AZURE_AD_CLIENT_SECRET` – The secret that was created as part of the Azure Service Principal +`AZURE_AD_TENANT_ID` – The Azure AD tenant ID to where the service principal was created +`AZURE_SUBSCRIPTION_ID` – Subscription ID of where you want to deploy the Terraform -The values should come from an AWS Access Key and Secret Key. The access key/secret key must be part of a user that has policies attached for the resources being created in AWS. 3. Save the secrets. diff --git a/Terraform-AZURE-Services-Creation/AKS/main.tf b/Terraform-AZURE-Services-Creation/AKS/main.tf index 102943f..e29c7b5 100644 --- a/Terraform-AZURE-Services-Creation/AKS/main.tf +++ b/Terraform-AZURE-Services-Creation/AKS/main.tf @@ -116,7 +116,7 @@ data "azurerm_container_registry" "example" { resource "azurerm_role_assignment" "acr_pull" { principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id scope = data.azurerm_resource_group.resource_group.id - role_definition_name = "ACR Pull" + role_definition_name = "acrpull" depends_on = [ azurerm_kubernetes_cluster.k8s ] From 8ea71f2e5595127bdc368f4b282a5e6aefc204c2 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Tue, 19 Oct 2021 16:24:52 +0100 Subject: [PATCH 005/124] update --- .github/workflows/main.yml | 85 ++++++++++++------- .../4-Run-CICD-For-EKS-Cluster.md | 1 - 2 files changed, 53 insertions(+), 33 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 676f1ad..ade0efa 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,37 +4,58 @@ on: workflow_dispatch: jobs: - build: + terraform: + name: 'Terraform' + env: + ARM_CLIENT_ID: ${{ secrets.AZURE_AD_CLIENT_ID }} + ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} + ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} runs-on: ubuntu-latest + environment: production + + # Use the Bash shell regardless whether the GitHub Actions runner is ubuntu-latest, macos-latest, or windows-latest + defaults: + run: + shell: bash + steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-west-1 - - - name: Setup Terraform - uses: hashicorp/setup-terraform@v1 - - - name: Terraform Init - working-directory: Terraform-AWS-Services/elasticsearch/elasticsearch_configuration/ - run: | - terraform init \ - -backend-config "bucket=terraform-states-monitoring-platform" \ - -backend-config "key=elasticsearch-terraform.tfstate" - terraform workspace new dev || terraform workspace select dev - - name: Terraform Format - working-directory: Terraform-AWS-Services/elasticsearch/elasticsearch_configuration/ - run: terraform fmt - - - name: Terraform Plan - working-directory: Terraform-AWS-Services/elasticsearch/elasticsearch_configuration/ - run: terraform plan -var="environment=development" -var="elasticsearch_password=${{ secrets.ELASTICSEARCH_PASSWORD }}" - - - name: Terraform Apply - working-directory: Terraform-AWS-Services/elasticsearch/elasticsearch_configuration/ - run: terraform apply -var="environment=development" -var="elasticsearch_password=${{ secrets.ELASTICSEARCH_PASSWORD }}" -auto-approve + # Checkout the repository to the GitHub Actions runner + - name: Checkout + uses: actions/checkout@v2 + + - name: 'Terraform Format' + uses: hashicorp/terraform-github-actions@master + with: + tf_actions_version: 1.0.1 + tf_actions_subcommand: 'fmt' + tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" + + - name: 'Terraform Init' + uses: hashicorp/terraform-github-actions@master + with: + tf_actions_version: 1.0.1 + tf_actions_subcommand: 'init' + tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" + + - name: 'Terraform Validate' + uses: hashicorp/terraform-github-actions@master + with: + tf_actions_version: 1.0.1 + tf_actions_subcommand: 'validate' + tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" + + - name: 'Terraform Plan' + uses: hashicorp/terraform-github-actions@master + with: + tf_actions_version: 1.0.1 + tf_actions_subcommand: 'plan' + tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" + + - name: Terraform Apply + if: github.ref == 'refs/heads/main' + uses: hashicorp/terraform-github-actions@master + with: + tf_actions_version: 1.0.1 + tf_actions_subcommand: 'applya' + tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md b/Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md index 9f202a4..840f1dc 100644 --- a/Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md +++ b/Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md @@ -25,7 +25,6 @@ You'll be adding 4 screts into the GitHub repository. These four secrets will al `AZURE_AD_TENANT_ID` – The Azure AD tenant ID to where the service principal was created `AZURE_SUBSCRIPTION_ID` – Subscription ID of where you want to deploy the Terraform - 3. Save the secrets. ## Pipeline From 9f127df82114e16168157407d0eb8d7f426d45a2 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Tue, 19 Oct 2021 16:28:08 +0100 Subject: [PATCH 006/124] fmt --- Terraform-AZURE-Services-Creation/AKS/terraform.tfvars | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars index 906ef8f..d273f0f 100644 --- a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars +++ b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars @@ -1,10 +1,10 @@ name = "devopsthehardway" location = "uksouth" -kubernetes_version = "1.19.11" -agent_count = 3 -vm_size = "Standard_DS2_v2" -ssh_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrt/GYkYpuQYRxM3lgjOr3Wqx8g5nQIbrg6Mr53wZGb35+ft+PibDMqxXZ7xq7fC3YuLnnO022IPgEjkF9fP03ZmfUeLjJJvw8YcutN9DD/2cx93BpKFPNUsqEB+za1iJ16kMsCojy35c1R64O+rw20D6iP96rmDAyIc5FR03y00eyAzQ8vo7/u9+VPwpdGEI7QCokZROcj6iNVz1V/1t6G4AEufPLokdj8J0gla/dN+tvnSLRQVBTDiD4jmVGImpWFqqKaH6R9SSXmRzj0uhvJUmSiZAZCb1caPEYgPEvNITuGQFdykPoY/4Z/3B+x/ipEQbWy8yL7bDFSXZTYhVKlPVyPbUtN5QFt7QtCtg84xDAZ6GA6AnONTtMxX2jvdzB9yh1ZsteNrOZ/Jo3ecuie573syQfG23Tu6qTqak8O7ZTOLY9iPx2ego3KvTWH/Q3lIvjnlpfCQtFtSgkNxjalMBk+NwwEgZHWRREOHwJmQIKVN0gSitN1KXobrqwxNk= tamops@Synth" +kubernetes_version = "1.19.11" +agent_count = 3 +vm_size = "Standard_DS2_v2" +ssh_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrt/GYkYpuQYRxM3lgjOr3Wqx8g5nQIbrg6Mr53wZGb35+ft+PibDMqxXZ7xq7fC3YuLnnO022IPgEjkF9fP03ZmfUeLjJJvw8YcutN9DD/2cx93BpKFPNUsqEB+za1iJ16kMsCojy35c1R64O+rw20D6iP96rmDAyIc5FR03y00eyAzQ8vo7/u9+VPwpdGEI7QCokZROcj6iNVz1V/1t6G4AEufPLokdj8J0gla/dN+tvnSLRQVBTDiD4jmVGImpWFqqKaH6R9SSXmRzj0uhvJUmSiZAZCb1caPEYgPEvNITuGQFdykPoY/4Z/3B+x/ipEQbWy8yL7bDFSXZTYhVKlPVyPbUtN5QFt7QtCtg84xDAZ6GA6AnONTtMxX2jvdzB9yh1ZsteNrOZ/Jo3ecuie573syQfG23Tu6qTqak8O7ZTOLY9iPx2ego3KvTWH/Q3lIvjnlpfCQtFtSgkNxjalMBk+NwwEgZHWRREOHwJmQIKVN0gSitN1KXobrqwxNk= tamops@Synth" aks_admins_group_object_id = "e97b6454-3fa1-499e-8e5c-5d631e9ca4d1" addons = { From 39f66befbdfce26782fc5527cfa369b4952a0474 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Tue, 19 Oct 2021 16:31:29 +0100 Subject: [PATCH 007/124] no message --- .github/workflows/main.yml | 2 +- ...And-Policy.md => 4-Create-AKS-Cluster-IAM-Roles.md} | 0 ...or-EKS-Cluster.md => 4-Run-CICD-For-AKS-Cluster.md} | 10 +++++----- 3 files changed, 6 insertions(+), 6 deletions(-) rename Terraform-AZURE-Services-Creation/{4-Create-AKS-Cluster-IAM-Role-And-Policy.md => 4-Create-AKS-Cluster-IAM-Roles.md} (100%) rename Terraform-AZURE-Services-Creation/{4-Run-CICD-For-EKS-Cluster.md => 4-Run-CICD-For-AKS-Cluster.md} (84%) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ade0efa..3029dc0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -57,5 +57,5 @@ jobs: uses: hashicorp/terraform-github-actions@master with: tf_actions_version: 1.0.1 - tf_actions_subcommand: 'applya' + tf_actions_subcommand: 'apply' tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Role-And-Policy.md b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md similarity index 100% rename from Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Role-And-Policy.md rename to Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md diff --git a/Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md b/Terraform-AZURE-Services-Creation/4-Run-CICD-For-AKS-Cluster.md similarity index 84% rename from Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md rename to Terraform-AZURE-Services-Creation/4-Run-CICD-For-AKS-Cluster.md index 840f1dc..49025b9 100644 --- a/Terraform-AZURE-Services-Creation/4-Run-CICD-For-EKS-Cluster.md +++ b/Terraform-AZURE-Services-Creation/4-Run-CICD-For-AKS-Cluster.md @@ -31,17 +31,17 @@ You'll be adding 4 screts into the GitHub repository. These four secrets will al Now that the secrets are created, it's time to create the pipeline. 1. Under the GitHub repository, click on the **Actions** tab -2. Under **Get started with Actions**, click the *set up a workflow yourself* button -3. Inside of the workflow, copy in the contents that you can find [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/.github/workflows/main.yml) +2. You will see a workflow already called `CI` +3. Select `CI` workflow and then select `Run workflow` `from` main branch The pipeline does a few things: - On line 4, you'll see `workflow_dispatch`, which means the pipeline won't automatically run unless you kick it off. You can of course change this to have the pipeline automatically run if you, for example, push code to the `dev` or `main` branch. - The code is checked-out -- Authentication occurs to AWS +- Authentication occurs to Azure - Terraform is set up -- Terraform init occurs - Terraform format occurs +- Terraform init occurs - Terraform plan occurs - Terraform apply occurs -4. Run the pipeline and watch as the pipeline automatically creates the EKS cluster +1. Run the pipeline and watch as the pipeline automatically creates the AKS cluster From aef4b6fa35f55f46b79242550a92d64265659bb1 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Tue, 19 Oct 2021 16:35:18 +0100 Subject: [PATCH 008/124] update docs --- README.md | 26 +++++++++---------- ...uster.md => 5-Run-CICD-For-AKS-Cluster.md} | 0 2 files changed, 13 insertions(+), 13 deletions(-) rename Terraform-AZURE-Services-Creation/{4-Run-CICD-For-AKS-Cluster.md => 5-Run-CICD-For-AKS-Cluster.md} (100%) diff --git a/README.md b/README.md index be1d3d5..2b488a8 100644 --- a/README.md +++ b/README.md @@ -50,22 +50,22 @@ You will be using the following technologies and platforms to set up a DevOps en In this scenario, the Terraform State file will be stored in remote state location of an Azure Storage Account. -2. VPC - When running EKS, it requires specific networking. Because all environments will most likely be different, there's a CloudFormation template for this exact purpose. - - [Create EKS VPC](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/EKS-VPC-CloudFormation) -3. AWS: - - [Configure credentials to access AWS at a programmatic level](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/AWS/1-Configure-Credentials-To-Access-AWS.md) -4. Terraform - The purpose of the Terraform section is to create all of the AWS cloud services you'll need from an environment/infrastructure perspective to run the Uber application. - - [Create S3 Bucket To Store TFSTATE Files](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Terraform-AWS-Services-Creation/1-Create-S3-Bucket-To-Store-TFSTATE-Files.md) - - [Create an Elastic Container Registry](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Terraform-AWS-Services-Creation/2-Create-ECR.md) - - [Create An EKS Cluster IAM Role, And Policy For EKS](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Terraform-AWS-Services-Creation/3-Create-EKS-Cluster-IAM-Role-And-Policy.md) - - [Create An EKS Cluster](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Terraform-AWS-Services-Creation/3-Create-EKS-Cluster-IAM-Role-And-Policy.md) -5. Docker - The purpose of the Docker section is to create a Docker image from the app that the organization is running on-prem (the uber app), containerize it, and store the container inside of a container repository. For the container repo, you'll use AWS ECR. +2. Terraform - The purpose of the Terraform section is to create all of the Azure cloud services you'll need from an environment/infrastructure perspective to run the Uber application. + - [Create ACR](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/1-Create-ACR.md) + - [Create VNET](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/2-Create-VNET.md) + - [Create Log Analytics](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md) + - [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) + - [Create AKS Cluster using GitHub Action](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/4-Run-CICD-For-AKS-Cluster.md) + + + +3. Docker - The purpose of the Docker section is to create a Docker image from the app that the organization is running on-prem (the uber app), containerize it, and store the container inside of a container repository. For the container repo, you'll use AWS ECR. - [Create The Docker Image](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Docker/1-Create-Docker-Image.md) - [Log Into AWS ECR Repository](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Docker/Push%20Image%20To%20ECR.md) -6. Kubernetes - The purpose of the Kubernetes section is to connect to EKS locally and to write the Kubernetes manifest to deploy the Python Uber app. +4. Kubernetes - The purpose of the Kubernetes section is to connect to EKS locally and to write the Kubernetes manifest to deploy the Python Uber app. - [Connect To EKS From The Terminal](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/1-Connect-To-EKS.md) - [Create A Kubernetes Manifest](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/2-Create-Kubernetes-Manifest.md) -7. Automated Testing - The purpose of the Automation Testing section is to ensure that all of the Terraform code is performing as it should be from a policy, security, and static code analysis perspective. +5. Automated Testing - The purpose of the Automation Testing section is to ensure that all of the Terraform code is performing as it should be from a policy, security, and static code analysis perspective. - [Install And Run Checkov](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) -8. CICD - The purpose of this section is to automatically create an EKS cluster with CICD using GitHub Actions +6. CICD - The purpose of this section is to automatically create an EKS cluster with CICD using GitHub Actions - [Create a GitHub Actions CICD pipeline](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Terraform-AWS-Services-Creation/4-Run-CICD-For-EKS-Cluster.md) diff --git a/Terraform-AZURE-Services-Creation/4-Run-CICD-For-AKS-Cluster.md b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md similarity index 100% rename from Terraform-AZURE-Services-Creation/4-Run-CICD-For-AKS-Cluster.md rename to Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md From 3496c7450fbd43052afc6e2dc9cb25ad591f9410 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Tue, 19 Oct 2021 16:53:26 +0100 Subject: [PATCH 009/124] Fixes for today --- ...h Image To ECR.md => Push Image To ACR.md} | 0 README.md | 19 ++++++++----------- 2 files changed, 8 insertions(+), 11 deletions(-) rename Docker/{Push Image To ECR.md => Push Image To ACR.md} (100%) diff --git a/Docker/Push Image To ECR.md b/Docker/Push Image To ACR.md similarity index 100% rename from Docker/Push Image To ECR.md rename to Docker/Push Image To ACR.md diff --git a/README.md b/README.md index 2b488a8..80a2864 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ As a DevOps Engineer, you're more or less (most likely) not writing the app, but *Full Disclosure* - I did have to edit this app a bit from Uber to make it compatible with Python3. You can find the repo here: -https://github.com/AdminTurnedDevOps/Python-Sample-Application +https://github.com/thomast1906/Python-Sample-Application ## Technology Details You will be using the following technologies and platforms to set up a DevOps environment. @@ -43,7 +43,7 @@ You will be using the following technologies and platforms to set up a DevOps en - Testing Terraform code with Checkov ## Labs -1. [Prerequisites](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/prerequisites.md) +1. [Prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/prerequisites.md) 2. [Create Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/1-Configure-Terraform-Remote-Storage.md) - When deploying Terraform there is a requirement that it must store a state file; this file is used by Terraform to map Azure Resources to your configuration that you want to deploy, keeps track of meta data and can also assist with improving performance for larger Azure Resource deployments. 3. [Create Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/2-Create-Azure-AD-Group-AKS-Admins.md) @@ -55,17 +55,14 @@ In this scenario, the Terraform State file will be stored in remote state locati - [Create VNET](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/2-Create-VNET.md) - [Create Log Analytics](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md) - [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) - - [Create AKS Cluster using GitHub Action](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/4-Run-CICD-For-AKS-Cluster.md) - - 3. Docker - The purpose of the Docker section is to create a Docker image from the app that the organization is running on-prem (the uber app), containerize it, and store the container inside of a container repository. For the container repo, you'll use AWS ECR. - - [Create The Docker Image](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Docker/1-Create-Docker-Image.md) - - [Log Into AWS ECR Repository](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Docker/Push%20Image%20To%20ECR.md) + - [Create The Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/Docker/1-Create-Docker-Image.md) + - [Log Into AWS ECR Repository](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/Docker/Push%20Image%20To%20ECR.md) 4. Kubernetes - The purpose of the Kubernetes section is to connect to EKS locally and to write the Kubernetes manifest to deploy the Python Uber app. - - [Connect To EKS From The Terminal](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/1-Connect-To-EKS.md) - - [Create A Kubernetes Manifest](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/2-Create-Kubernetes-Manifest.md) + - [Connect To EKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/1-Connect-To-EKS.md) + - [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/2-Create-Kubernetes-Manifest.md) 5. Automated Testing - The purpose of the Automation Testing section is to ensure that all of the Terraform code is performing as it should be from a policy, security, and static code analysis perspective. - - [Install And Run Checkov](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) + - [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) 6. CICD - The purpose of this section is to automatically create an EKS cluster with CICD using GitHub Actions - - [Create a GitHub Actions CICD pipeline](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/blob/main/Terraform-AWS-Services-Creation/4-Run-CICD-For-EKS-Cluster.md) + - [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/Terraform-AWS-Services-Creation/4-Run-CICD-For-EKS-Cluster.md) From b4cc0b794b2eb4b581ec5609d59b95e6b1b7eb4d Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Tue, 19 Oct 2021 20:43:02 +0100 Subject: [PATCH 010/124] new changes --- Docker/1-Create-Docker-Image.md | 2 +- Docker/Push Image To ACR.md | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Docker/1-Create-Docker-Image.md b/Docker/1-Create-Docker-Image.md index ff77fd0..c0866de 100644 --- a/Docker/1-Create-Docker-Image.md +++ b/Docker/1-Create-Docker-Image.md @@ -27,7 +27,7 @@ The `-t` is for the tag (the name) of the Docker image and the `.` is telling th Now that the Docker image is created, you can run the container locally just to confirm it'll work and not crash. 1. To run the Docker container, run the following command: -`docker run -tid uber` +`docker run -tid uberapp` - `t` stands for a TTY console - `i` stands for interactive diff --git a/Docker/Push Image To ACR.md b/Docker/Push Image To ACR.md index 1cf0a57..35d461a 100644 --- a/Docker/Push Image To ACR.md +++ b/Docker/Push Image To ACR.md @@ -3,15 +3,14 @@ The ECR repo will be where you store the Docker image that you created on your local computer in step 1. ## Log Into The ECR Repository -1. Terraform Code -2. Log in to ECR with AWS CLI -`aws ecr get-login-password --region *your_aws_region* | docker login --username AWS --password-stdin *your_aws_account_id*.dkr.ecr.*your_aws_region*.amazonaws.com` +1. Log in to ACR with Azure CLI +`az acr login --name devopsthehardwayacr` ## Tag The Docker image 1. Tag the Docker image -`docker tag uber *your_aws_account_id*.dkr.ecr.*your_aws_region*.amazonaws.com` +`docker tag uberapp devopsthehardwayacr.azurecr.io/uberapp:v1` -## Push The Docker Image To ECR -1. Push the Docker image to ECR -`docker push *your_aws_account_id*.dkr.ecr.us-east-1.amazonaws.com/*repo_name*` +## Push The Docker Image To ACR +1. Push the Docker image to ACR +`docker push devopsthehardwayacr.azurecr.io/uberapp:v1` From cf5cdc1d8ef3cde6f78186aff9586fc25384895e Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Tue, 19 Oct 2021 20:56:30 +0100 Subject: [PATCH 011/124] kubernetes connect --- README.md | 6 +++--- ...-Connect-To-EKS.md => 1-Connect-To-ACR.md} | 6 +++--- .../2-Create-Kubernetes-Manifest.md | 1 + kubernetes_manifest/3-Deploy-Uber-App.md | 9 +++++++- kubernetes_manifest/deployment.yml | 21 ++++++++++++++++--- 5 files changed, 33 insertions(+), 10 deletions(-) rename kubernetes_manifest/{1-Connect-To-EKS.md => 1-Connect-To-ACR.md} (72%) diff --git a/README.md b/README.md index 80a2864..f9c82d4 100644 --- a/README.md +++ b/README.md @@ -57,10 +57,10 @@ In this scenario, the Terraform State file will be stored in remote state locati - [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) 3. Docker - The purpose of the Docker section is to create a Docker image from the app that the organization is running on-prem (the uber app), containerize it, and store the container inside of a container repository. For the container repo, you'll use AWS ECR. - - [Create The Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/Docker/1-Create-Docker-Image.md) - - [Log Into AWS ECR Repository](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/Docker/Push%20Image%20To%20ECR.md) + - [Create The Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/1-Create-Docker-Image.md) + - [Log Into AWS ECR Repository](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/Push%20Image%20To%20ACR.md) 4. Kubernetes - The purpose of the Kubernetes section is to connect to EKS locally and to write the Kubernetes manifest to deploy the Python Uber app. - - [Connect To EKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/1-Connect-To-EKS.md) + - [Connect To ACR From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/1-Connect-To-EKS.md) - [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/2-Create-Kubernetes-Manifest.md) 5. Automated Testing - The purpose of the Automation Testing section is to ensure that all of the Terraform code is performing as it should be from a policy, security, and static code analysis perspective. - [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) diff --git a/kubernetes_manifest/1-Connect-To-EKS.md b/kubernetes_manifest/1-Connect-To-ACR.md similarity index 72% rename from kubernetes_manifest/1-Connect-To-EKS.md rename to kubernetes_manifest/1-Connect-To-ACR.md index 2f1d4e2..b04061a 100644 --- a/kubernetes_manifest/1-Connect-To-EKS.md +++ b/kubernetes_manifest/1-Connect-To-ACR.md @@ -1,13 +1,13 @@ # Connecting To Elastic Kubernetes Service (EKS) -When you're deploying locally, without any CI/CD to EKS, you'll need to authenticate from your local terminal. +When you're deploying locally, without any CI/CD to AKS, you'll need to authenticate from your local terminal. Once you authenticate to EKS from your local terminal, a `kubeconfig` gets stored on your computer. The `kubeconfig` has all of the connection information and authentication needs to connect to EKS. -## Connecting To EKS +## Connecting To AKS 1. Run the following command to connect to EKS: -`aws eks --region *your_aws_region* update-kubeconfig --name *your_eks_cluster_name` +`az aks get-credentials --resource-group devopsthehardway-rg --name devopsthehardwayaks` 2. Once connected, you should be able to run commands like the following to confirm you're connected: `kubectl get nodes` \ No newline at end of file diff --git a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md index 1c0a8f5..64e6cb7 100644 --- a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md +++ b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md @@ -9,6 +9,7 @@ Now it's time to set up the Kubernetes manifest, which will take the application The Kubernetes manifest will consist of two components: - The deployment - The service +- The Application Gateway Ingress The deployment is what gets the application running in Kubernetes diff --git a/kubernetes_manifest/3-Deploy-Uber-App.md b/kubernetes_manifest/3-Deploy-Uber-App.md index a15c3df..f4b0593 100644 --- a/kubernetes_manifest/3-Deploy-Uber-App.md +++ b/kubernetes_manifest/3-Deploy-Uber-App.md @@ -1,6 +1,6 @@ # Deploy The Uber App -Once the EKS cluster is built and the Kubernetes manifest is ready, you're now ready to deploy the Kubernetes manifest. +Once the AKS cluster is built and the Kubernetes manifest is ready, you're now ready to deploy the Kubernetes manifest. 1. `cd` into the `kubernetes_manifest` directory 2. Run the following command: @@ -11,3 +11,10 @@ You'll see an output that specifies the service and deployment was created. 3. Run the following command to confirm that the deployment was successful: `kubectl get deployments` +4. Access uber-ui via Application Gateway +`kubectl get ingress` + +`NAME CLASS HOSTS ADDRESS PORTS AGE +uber-ui * 20.90.236.246 80 11s` + +Access the uber-ui using the address mentioned above, `http://20.90.236.246` \ No newline at end of file diff --git a/kubernetes_manifest/deployment.yml b/kubernetes_manifest/deployment.yml index 2e0e355..a3be8a0 100644 --- a/kubernetes_manifest/deployment.yml +++ b/kubernetes_manifest/deployment.yml @@ -7,7 +7,7 @@ spec: app: uber-ui ports: - protocol: "TCP" - port: 6000 + port: 80 targetPort: 5000 type: LoadBalancer @@ -28,6 +28,21 @@ spec: spec: containers: - name: uber-ui - image: 912101370089.dkr.ecr.us-east-1.amazonaws.com/devopsthehardway-ecr-repo:latest + image: devopsthehardwayacr.azurecr.io/uberapp:v1 ports: - - containerPort: 5000 \ No newline at end of file + - containerPort: 5000 +--- +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: uber-ui + annotations: + kubernetes.io/ingress.class: azure/application-gateway +spec: + rules: + - http: + paths: + - path: / + backend: + serviceName: uber-ui + servicePort: 80 \ No newline at end of file From 871d2f8ffa740c89def432eb045b83da1574f424 Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Tue, 19 Oct 2021 21:04:15 +0100 Subject: [PATCH 012/124] updates --- Azure-VNET-CLI/az-vnet.sh | 0 Azure-VNET-CLI/readme.md | 44 ------- README.md | 9 +- .../1-Create-ACR.md | 2 +- .../3-Create-Log-Analytics.md | 2 +- .../4-Create-AKS-Cluster-IAM-Roles.md | 10 +- .../5-Run-CICD-For-AKS-Cluster.md | 4 +- .../EKS-Fargate/main.tf | 93 -------------- .../EKS-Fargate/variables.tf | 14 --- .../EKS-With-Worker-Nodes/main.tf | 116 ------------------ .../EKS-With-Worker-Nodes/variables.tf | 10 -- .../terraform-state-s3-bucket/main.tf | 18 --- .../1-Checkov-For-Terraform.md | 4 +- kubernetes_manifest/1-Connect-To-ACR.md | 6 +- .../2-Create-Kubernetes-Manifest.md | 2 +- 15 files changed, 20 insertions(+), 314 deletions(-) delete mode 100644 Azure-VNET-CLI/az-vnet.sh delete mode 100644 Azure-VNET-CLI/readme.md delete mode 100644 Terraform-AZURE-Services-Creation/EKS-Fargate/main.tf delete mode 100644 Terraform-AZURE-Services-Creation/EKS-Fargate/variables.tf delete mode 100644 Terraform-AZURE-Services-Creation/EKS-With-Worker-Nodes/main.tf delete mode 100644 Terraform-AZURE-Services-Creation/EKS-With-Worker-Nodes/variables.tf delete mode 100644 Terraform-AZURE-Services-Creation/terraform-state-s3-bucket/main.tf diff --git a/Azure-VNET-CLI/az-vnet.sh b/Azure-VNET-CLI/az-vnet.sh deleted file mode 100644 index e69de29..0000000 diff --git a/Azure-VNET-CLI/readme.md b/Azure-VNET-CLI/readme.md deleted file mode 100644 index 021c239..0000000 --- a/Azure-VNET-CLI/readme.md +++ /dev/null @@ -1,44 +0,0 @@ -When running EKS, it requires specific networking. Because all environments will most likely be different, there's a CloudFormation template for this exact purpose. - ---- - -To create your cluster VPC with public and private subnets - -1. Open the AWS CloudFormation console at https://console.aws.amazon.com/cloudformation. - -2. From the navigation bar, select a Region that supports Amazon EKS. - -3. Choose Create stack, With new resources (standard). - -4. For Choose a template, select Specify an Amazon S3 template URL. - -5. Paste the following URL into the text area and choose Next: -``` -https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml -``` - -6. On the *Specify Details* page, fill out the following: - -- Stack name: Choose a stack name for your AWS CloudFormation stack. For example, you can call it eks-vpc. - -- VpcBlock: Choose a CIDR range for your VPC. Each worker node, pod, and load balancer that you deploy is assigned an IP address from this block. The default value provides enough IP addresses for most implementations, but if it doesn't, then you can change it. For more information, see VPC and subnet sizing in the Amazon VPC User Guide. You can also add additional CIDR blocks to the VPC once it's created. - -- PublicSubnet01Block: Specify a CIDR block for public subnet 1. The default value provides enough IP addresses for most implementations, but if it doesn't, then you can change it - -- PublicSubnet02Block: Specify a CIDR block for public subnet 2. The default value provides enough IP addresses for most implementations, but if it doesn't, then you can change it - -- PrivateSubnet01Block: Specify a CIDR block for private subnet 1. The default value provides enough IP addresses for most implementations, but if it doesn't, then you can change it - -- PrivateSubnet02Block: Specify a CIDR block for private subnet 2. The default value provides enough IP addresses for most implementations, but if it doesn't, then you can change it - -7. (Optional) On the Options page, tag your stack resources. Choose Next. - -8. On the Review page, choose Create. - -9. When your stack is created, select it in the console and choose Outputs. - -10. Record the SecurityGroups value for the security group that was created. When you add nodes to your cluster, you must specify the ID of the security group. The security group is applied to the elastic network interfaces that are created by Amazon EKS in your subnets that allows the control plane to communicate with your nodes. These network interfaces have Amazon EKS in their description. - -11. Record the VpcId for the VPC that was created. You need this when you launch your node group template. - -12. Record the SubnetIds for the subnets that were created and whether you created them as public or private subnets. When you add nodes to your cluster, you must specify the IDs of the subnets that you want to launch the nodes into. \ No newline at end of file diff --git a/README.md b/README.md index f9c82d4..f309512 100644 --- a/README.md +++ b/README.md @@ -59,10 +59,11 @@ In this scenario, the Terraform State file will be stored in remote state locati 3. Docker - The purpose of the Docker section is to create a Docker image from the app that the organization is running on-prem (the uber app), containerize it, and store the container inside of a container repository. For the container repo, you'll use AWS ECR. - [Create The Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/1-Create-Docker-Image.md) - [Log Into AWS ECR Repository](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/Push%20Image%20To%20ACR.md) -4. Kubernetes - The purpose of the Kubernetes section is to connect to EKS locally and to write the Kubernetes manifest to deploy the Python Uber app. - - [Connect To ACR From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/1-Connect-To-EKS.md) +4. Kubernetes - The purpose of the Kubernetes section is to connect to AKS locally and to write the Kubernetes manifest to deploy the Python Uber app. + - [Connect To ACR From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/1-Connect-To-ACR.md) - [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/2-Create-Kubernetes-Manifest.md) + - [Deploy Uber App into Kubernetes](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/3-Deploy-Uber-App.md) 5. Automated Testing - The purpose of the Automation Testing section is to ensure that all of the Terraform code is performing as it should be from a policy, security, and static code analysis perspective. - [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) -6. CICD - The purpose of this section is to automatically create an EKS cluster with CICD using GitHub Actions - - [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/Terraform-AWS-Services-Creation/4-Run-CICD-For-EKS-Cluster.md) +6. CICD - The purpose of this section is to automatically create an AKS cluster with CICD using GitHub Actions + - [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md) diff --git a/Terraform-AZURE-Services-Creation/1-Create-ACR.md b/Terraform-AZURE-Services-Creation/1-Create-ACR.md index 7061cd8..b50e1e8 100644 --- a/Terraform-AZURE-Services-Creation/1-Create-ACR.md +++ b/Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -4,7 +4,7 @@ In this lab you will create a repository to store the Docker image that you crea ## Create the ACR Terraform Configuration -1. You can find the Terraform configuration for Azure Container Registry (ACR) [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/ACR). The Terraform configuration files are used to create a repository in Azure Container Registry (ACR). +1. You can find the Terraform configuration for Azure Container Registry (ACR) [here](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/ACR). The Terraform configuration files are used to create a repository in Azure Container Registry (ACR). The Terraform `main.tf` will do a few things: - Use a Terraform backend to store the `.tfstate` in an Azure Storage Account diff --git a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index addb221..9100bcb 100644 --- a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -4,7 +4,7 @@ In this lab you will create a Log Analytics workspace that will be used to view ## Create the ACR Terraform Configuration -1. You can find the Terraform configuration for Log Analytics [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/Log-Analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. +1. You can find the Terraform configuration for Log Analytics [here](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/Log-Analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. The Terraform `main.tf` will do a few things: - Use the `azurerm_log_analytics_workspace` Terraform resource to create a Log Analytics workspace. diff --git a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index 41ecaa3..4ac53fd 100644 --- a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -1,12 +1,12 @@ -# Create An EKS Cluster and IAM Role/Policy +# Create An AKS Cluster and IAM Role/Policy In this lab you will create: -- The appropriate IAM role and policy for EKS. -- The EKS cluster +- The appropriate IAM role and policy for AKS. +- The AKS cluster -## Create the EKS Terraform Configuration +## Create the AKS Terraform Configuration -1. You can find the Terraform configuration for EKS [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/Terraform-AWS-Services-Creation/EKS-With-Worker-Nodes). The Terraform configuration files are used to create an EKS cluster and IAM Role/Policy for EKS. +1. You can find the Terraform configuration for AKS [here](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/tree/main/Terraform-AWS-Services-Creation/AKS-With-Worker-Nodes). The Terraform configuration files are used to create an AKS cluster and IAM Role/Policy for AKS. The Terraform `main.tf` will do a few things: - Use a Terraform backend to store the `.tfstate` in an S3 bucket diff --git a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index 49025b9..a81c602 100644 --- a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -1,6 +1,6 @@ -# Create EKS Cluster With CICD +# Create AKS Cluster With CICD -In this lab, you'll learn how to create an EKS cluster using GitHub Actions. The code can be found [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/AKS) +In this lab, you'll learn how to create an AKS cluster using GitHub Actions. The code can be found [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/AKS) ## Secrets diff --git a/Terraform-AZURE-Services-Creation/EKS-Fargate/main.tf b/Terraform-AZURE-Services-Creation/EKS-Fargate/main.tf deleted file mode 100644 index d693d6a..0000000 --- a/Terraform-AZURE-Services-Creation/EKS-Fargate/main.tf +++ /dev/null @@ -1,93 +0,0 @@ -terraform { - backend "s3" { - bucket = "terraform-state-devopsthehardway" - key = "eks-terraform.tfstate" - region = "us-east-1" - } - required_providers { - aws = { - source = "hashicorp/aws" - } - } -} - - -# IAM Role for EKS to have access to the appropriate resources -resource "aws_iam_role" "eks-iam-role" { - name = "devopsthehardway-eks-iam-role" - - path = "/" - - assume_role_policy = < Date: Tue, 19 Oct 2021 21:04:37 +0100 Subject: [PATCH 013/124] update --- Terraform-AZURE-Services-Creation/2-Create-VNET.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Terraform-AZURE-Services-Creation/2-Create-VNET.md b/Terraform-AZURE-Services-Creation/2-Create-VNET.md index cd419b1..b6cbf98 100644 --- a/Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -4,7 +4,7 @@ In this lab you will create a Virtual Network (VNET) that will be used to deploy ## Create the ACR Terraform Configuration -1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/AdminTurnedDevOps/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/VNET). The Terraform configuration files are used to create an Azure Vitual Network. +1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/VNET). The Terraform configuration files are used to create an Azure Vitual Network. The Terraform `main.tf` will do a few things: - Use the `azurerm_virtual_network` Terraform resource to create a VNET. From 7d91939e541540ac985fd314135d4a73f4fea2f4 Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Tue, 19 Oct 2021 21:07:27 +0100 Subject: [PATCH 014/124] AWs to Azure --- README.md | 10 +++++----- Terraform-AZURE-Services-Creation/1-Create-ACR.md | 2 +- Terraform-AZURE-Services-Creation/2-Create-VNET.md | 2 +- .../3-Create-Log-Analytics.md | 2 +- .../4-Create-AKS-Cluster-IAM-Roles.md | 4 ++-- .../1-Checkov-For-Terraform.md | 2 +- kubernetes_manifest/2-Create-Kubernetes-Manifest.md | 2 +- prerequisites.md | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index f309512..87453d1 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ You will be using the following technologies and platforms to set up a DevOps en - Testing Terraform code with Checkov ## Labs -1. [Prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/prerequisites.md) +1. [Prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/prerequisites.md) 2. [Create Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/1-Configure-Terraform-Remote-Storage.md) - When deploying Terraform there is a requirement that it must store a state file; this file is used by Terraform to map Azure Resources to your configuration that you want to deploy, keeps track of meta data and can also assist with improving performance for larger Azure Resource deployments. 3. [Create Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/2-Create-Azure-AD-Group-AKS-Admins.md) @@ -56,14 +56,14 @@ In this scenario, the Terraform State file will be stored in remote state locati - [Create Log Analytics](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md) - [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) -3. Docker - The purpose of the Docker section is to create a Docker image from the app that the organization is running on-prem (the uber app), containerize it, and store the container inside of a container repository. For the container repo, you'll use AWS ECR. +3. Docker - The purpose of the Docker section is to create a Docker image from the app that the organization is running on-prem (the uber app), containerize it, and store the container inside of a container repository. For the container repo, you'll use Azure ECR. - [Create The Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/1-Create-Docker-Image.md) - - [Log Into AWS ECR Repository](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/Push%20Image%20To%20ACR.md) + - [Log Into Azure ECR Repository](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/Push%20Image%20To%20ACR.md) 4. Kubernetes - The purpose of the Kubernetes section is to connect to AKS locally and to write the Kubernetes manifest to deploy the Python Uber app. - [Connect To ACR From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/1-Connect-To-ACR.md) - - [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/kubernetes_manifest/2-Create-Kubernetes-Manifest.md) + - [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/2-Create-Kubernetes-Manifest.md) - [Deploy Uber App into Kubernetes](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/3-Deploy-Uber-App.md) 5. Automated Testing - The purpose of the Automation Testing section is to ensure that all of the Terraform code is performing as it should be from a policy, security, and static code analysis perspective. - - [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/blob/main/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) + - [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) 6. CICD - The purpose of this section is to automatically create an AKS cluster with CICD using GitHub Actions - [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md) diff --git a/Terraform-AZURE-Services-Creation/1-Create-ACR.md b/Terraform-AZURE-Services-Creation/1-Create-ACR.md index b50e1e8..eaee41d 100644 --- a/Terraform-AZURE-Services-Creation/1-Create-ACR.md +++ b/Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -4,7 +4,7 @@ In this lab you will create a repository to store the Docker image that you crea ## Create the ACR Terraform Configuration -1. You can find the Terraform configuration for Azure Container Registry (ACR) [here](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/ACR). The Terraform configuration files are used to create a repository in Azure Container Registry (ACR). +1. You can find the Terraform configuration for Azure Container Registry (ACR) [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-Azure-Services-Creation/ACR). The Terraform configuration files are used to create a repository in Azure Container Registry (ACR). The Terraform `main.tf` will do a few things: - Use a Terraform backend to store the `.tfstate` in an Azure Storage Account diff --git a/Terraform-AZURE-Services-Creation/2-Create-VNET.md b/Terraform-AZURE-Services-Creation/2-Create-VNET.md index b6cbf98..46c2ff8 100644 --- a/Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -4,7 +4,7 @@ In this lab you will create a Virtual Network (VNET) that will be used to deploy ## Create the ACR Terraform Configuration -1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/VNET). The Terraform configuration files are used to create an Azure Vitual Network. +1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-Azure-Services-Creation/VNET). The Terraform configuration files are used to create an Azure Vitual Network. The Terraform `main.tf` will do a few things: - Use the `azurerm_virtual_network` Terraform resource to create a VNET. diff --git a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index 9100bcb..1b27fbc 100644 --- a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -4,7 +4,7 @@ In this lab you will create a Log Analytics workspace that will be used to view ## Create the ACR Terraform Configuration -1. You can find the Terraform configuration for Log Analytics [here](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/tree/main/Terraform-Azure-Services-Creation/Log-Analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. +1. You can find the Terraform configuration for Log Analytics [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-Azure-Services-Creation/Log-Analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. The Terraform `main.tf` will do a few things: - Use the `azurerm_log_analytics_workspace` Terraform resource to create a Log Analytics workspace. diff --git a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index 4ac53fd..80f2dca 100644 --- a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -6,12 +6,12 @@ In this lab you will create: ## Create the AKS Terraform Configuration -1. You can find the Terraform configuration for AKS [here](https://github.com/thomast1906/DevOps-The-Hard-Way-AWS/tree/main/Terraform-AWS-Services-Creation/AKS-With-Worker-Nodes). The Terraform configuration files are used to create an AKS cluster and IAM Role/Policy for AKS. +1. You can find the Terraform configuration for AKS [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-Azure-Services-Creation/AKS-With-Worker-Nodes). The Terraform configuration files are used to create an AKS cluster and IAM Role/Policy for AKS. The Terraform `main.tf` will do a few things: - Use a Terraform backend to store the `.tfstate` in an S3 bucket - Use the `us-east-1` region, but feel free to change that if you'd like -- Use the `aws_iam_role` and `aws_iam_policy` Terraform resource to create a new IAM configuration. +- Use the `Azure_iam_role` and `Azure_iam_policy` Terraform resource to create a new IAM configuration. 2. Create the bucket by running the following: - `terraform init` - To initialize the working directory and pull down the provider diff --git a/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md b/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md index d65c542..8d8dae0 100644 --- a/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md +++ b/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md @@ -15,6 +15,6 @@ OR 4. Run a scan to the Terraform code. For this process, you can scan all of the Terraform code in the `Terraform-AZURE-Services-Creation` directory. An example of this would be: -`checkov --directory DevOps-The-Hard-Way-AWS/Terraform-AZURE-Services-Creation/ACR` +`checkov --directory DevOps-The-Hard-Way-Azure/Terraform-AZURE-Services-Creation/ACR` You'll then see what tests have passed, what tests have failed, and what you can do to remediate the issues. You can either view the results on the terminal or from the UI. \ No newline at end of file diff --git a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md index f892cb1..6006882 100644 --- a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md +++ b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md @@ -15,4 +15,4 @@ The deployment is what gets the application running in Kubernetes The service is what exposes the Kubernetes application so you can, for example, reach the frontend from a load balancer hostname or IP. -The manifest can be found in the `kubernetes_manifest` directory. Ensure on line `31` to change the image URL to the one you have in your AWS account. \ No newline at end of file +The manifest can be found in the `kubernetes_manifest` directory. Ensure on line `31` to change the image URL to the one you have in your Azure account. \ No newline at end of file diff --git a/prerequisites.md b/prerequisites.md index 8972cee..1feadde 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -16,7 +16,7 @@ To follow along with this tutorial, you should have an Azure account. If you don You should know that the tutorial for *DevOps The Hard Way* will cost money because some of the services that you use in Azure will not be part of the free tier. -To learn more about the AWS Pricing Model so you understand what the cost will be, you can go [here](https://azure.microsoft.com/en-gb/pricing/calculator/) +To learn more about the Azure Pricing Model so you understand what the cost will be, you can go [here](https://azure.microsoft.com/en-gb/pricing/calculator/) ### Use the Azure CLI From a18e3920aeedc866be7b1a1a3a14eab78949fca4 Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Tue, 19 Oct 2021 21:10:20 +0100 Subject: [PATCH 015/124] Update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 87453d1..ef1100b 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ As a DevOps Engineer, you're more or less (most likely) not writing the app, but *Full Disclosure* - I did have to edit this app a bit from Uber to make it compatible with Python3. You can find the repo here: -https://github.com/thomast1906/Python-Sample-Application +https://github.com/AdminTurnedDevOps/Python-Sample-Application ## Technology Details You will be using the following technologies and platforms to set up a DevOps environment. From 49ac9a08fa17ab9bdcd6a232fbe5b25498445cc1 Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Tue, 19 Oct 2021 21:11:31 +0100 Subject: [PATCH 016/124] fmt --- Azure/1-Configure-Terraform-Remote-Storage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Azure/1-Configure-Terraform-Remote-Storage.md b/Azure/1-Configure-Terraform-Remote-Storage.md index a804f78..aa0ad65 100644 --- a/Azure/1-Configure-Terraform-Remote-Storage.md +++ b/Azure/1-Configure-Terraform-Remote-Storage.md @@ -4,7 +4,7 @@ The purpose of this lab is to create the location that will store the remote Ter ## Create Blob Storage location for Terraform State file 1. Edit the [variables](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/create-terraform-storage.sh#L3-L4) -2. Run the script ./create-terraform-storage.sh +2. Run the script `./create-terraform-storage.sh` 3. The script will create - Azure Resource Group - Azure Storage Account From 8ef09fc61db57119f5e0056578be60675f572c23 Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Tue, 19 Oct 2021 21:11:39 +0100 Subject: [PATCH 017/124] fmt --- Azure/2-Create-Azure-AD-Group-AKS-Admins.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Azure/2-Create-Azure-AD-Group-AKS-Admins.md b/Azure/2-Create-Azure-AD-Group-AKS-Admins.md index 7f1afc0..607d6a2 100644 --- a/Azure/2-Create-Azure-AD-Group-AKS-Admins.md +++ b/Azure/2-Create-Azure-AD-Group-AKS-Admins.md @@ -3,8 +3,8 @@ The purpose of this lab to create an Azure AD Group for AKS Admins. These "admins" will be the group of users that will be able to access the AKS cluster using kubectl ## Create Azure AD AKS Admin Group -1. Run the script ./create-azure-ad-group.sh +1. Run the script `./create-azure-ad-group.sh` 2. The script will create -- Azure AD Group named "devopsthehardway-aks-group" -- Add current user logged into Az CLI to AD Group "devopsthehardway-aks-group" +- Azure AD Group named `"devopsthehardway-aks-group"` +- Add current user logged into Az CLI to AD Group `"devopsthehardway-aks-group"` - Will output Azure AD Group ID, note this down as it will be required for AKS Terraform \ No newline at end of file From 852a41ed2f96249b3336321d67d6726b99c67bc1 Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Tue, 19 Oct 2021 21:19:08 +0100 Subject: [PATCH 018/124] more updates --- Azure/2-Create-Azure-AD-Group-AKS-Admins.md | 2 +- README.md | 4 ++-- Terraform-AZURE-Services-Creation/2-Create-VNET.md | 4 ++-- .../3-Create-Log-Analytics.md | 4 ++-- .../4-Create-AKS-Cluster-IAM-Roles.md | 10 +++++----- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Azure/2-Create-Azure-AD-Group-AKS-Admins.md b/Azure/2-Create-Azure-AD-Group-AKS-Admins.md index 607d6a2..55a8882 100644 --- a/Azure/2-Create-Azure-AD-Group-AKS-Admins.md +++ b/Azure/2-Create-Azure-AD-Group-AKS-Admins.md @@ -1,4 +1,4 @@ -# Configure Storage Account for Terraform State File +# CCreate Azure AD Group for AKS Admins The purpose of this lab to create an Azure AD Group for AKS Admins. These "admins" will be the group of users that will be able to access the AKS cluster using kubectl diff --git a/README.md b/README.md index ef1100b..01f8e86 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ You will be using the following technologies and platforms to set up a DevOps en ## Labs 1. [Prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/prerequisites.md) 2. [Create Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/1-Configure-Terraform-Remote-Storage.md) - When deploying Terraform there is a requirement that it must store a state file; this file is used by Terraform to map Azure Resources to your configuration that you want to deploy, keeps track of meta data and can also assist with improving performance for larger Azure Resource deployments. -3. [Create Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/2-Create-Azure-AD-Group-AKS-Admins.md) +3. [Create Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/2-Create-Azure-AD-Group-AKS-Admins.md) - The Azure AD Group will be used for AKS cluster access In this scenario, the Terraform State file will be stored in remote state location of an Azure Storage Account. @@ -58,7 +58,7 @@ In this scenario, the Terraform State file will be stored in remote state locati 3. Docker - The purpose of the Docker section is to create a Docker image from the app that the organization is running on-prem (the uber app), containerize it, and store the container inside of a container repository. For the container repo, you'll use Azure ECR. - [Create The Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/1-Create-Docker-Image.md) - - [Log Into Azure ECR Repository](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/Push%20Image%20To%20ACR.md) + - [Log Into Azure ACR Repository](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/Push%20Image%20To%20ACR.md) 4. Kubernetes - The purpose of the Kubernetes section is to connect to AKS locally and to write the Kubernetes manifest to deploy the Python Uber app. - [Connect To ACR From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/1-Connect-To-ACR.md) - [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/2-Create-Kubernetes-Manifest.md) diff --git a/Terraform-AZURE-Services-Creation/2-Create-VNET.md b/Terraform-AZURE-Services-Creation/2-Create-VNET.md index 46c2ff8..4de04f8 100644 --- a/Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -1,8 +1,8 @@ -# Create an Azure Container Registry Repository +# Create an Azure VNET In this lab you will create a Virtual Network (VNET) that will be used to deploy your AKS instance into -## Create the ACR Terraform Configuration +## Create the Azure VNET Terraform Configuration 1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-Azure-Services-Creation/VNET). The Terraform configuration files are used to create an Azure Vitual Network. diff --git a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index 1b27fbc..c63cae5 100644 --- a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -1,8 +1,8 @@ -# Create an Azure Container Registry Repository +# Create an Azure Log Analytics Workspace In this lab you will create a Log Analytics workspace that will be used to view container insights of your AKS Cluster -## Create the ACR Terraform Configuration +## Create the Log Analytics Workspace Terraform Configuration 1. You can find the Terraform configuration for Log Analytics [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-Azure-Services-Creation/Log-Analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. diff --git a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index 80f2dca..62ac05c 100644 --- a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -1,17 +1,17 @@ -# Create An AKS Cluster and IAM Role/Policy +# Create An AKS Cluster and IAM Roles In this lab you will create: -- The appropriate IAM role and policy for AKS. - The AKS cluster +- The appropriate IAM roles for AKS ## Create the AKS Terraform Configuration 1. You can find the Terraform configuration for AKS [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-Azure-Services-Creation/AKS-With-Worker-Nodes). The Terraform configuration files are used to create an AKS cluster and IAM Role/Policy for AKS. The Terraform `main.tf` will do a few things: -- Use a Terraform backend to store the `.tfstate` in an S3 bucket -- Use the `us-east-1` region, but feel free to change that if you'd like -- Use the `Azure_iam_role` and `Azure_iam_policy` Terraform resource to create a new IAM configuration. +- Use the `azurerm_kubernetes_cluster` Terraform resource to AKS Cluster +- Use the `azurerm_role_assignment` Terraform resource to create the two neccessary role assignments +- Use the `uksouth` region, but feel free to change that if you'd like 2. Create the bucket by running the following: - `terraform init` - To initialize the working directory and pull down the provider From 83d9c87362a7bcbf0fe2d0c9491042e3fdd6b96c Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Wed, 20 Oct 2021 08:34:33 +0100 Subject: [PATCH 019/124] updates --- README.md | 2 +- Terraform-AZURE-Services-Creation/1-Create-ACR.md | 2 +- Terraform-AZURE-Services-Creation/2-Create-VNET.md | 2 +- Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md | 2 +- .../4-Create-AKS-Cluster-IAM-Roles.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 01f8e86..30bbd9d 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ The solution is to deploy the Uber API for the sign-up page. Currently this solu As a DevOps Engineer, you're more or less (most likely) not writing the app, but instead, deploying it. That's why you're not writing your own app in this tutorial. -*Full Disclosure* - I did have to edit this app a bit from Uber to make it compatible with Python3. You can find the repo here: +*Full Disclosure* - [AdminTurnedDevOps](https://github.com/AdminTurnedDevOps) did have to edit this app a bit from Uber to make it compatible with Python3. You can find the repo here: https://github.com/AdminTurnedDevOps/Python-Sample-Application diff --git a/Terraform-AZURE-Services-Creation/1-Create-ACR.md b/Terraform-AZURE-Services-Creation/1-Create-ACR.md index eaee41d..43cfaff 100644 --- a/Terraform-AZURE-Services-Creation/1-Create-ACR.md +++ b/Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -4,7 +4,7 @@ In this lab you will create a repository to store the Docker image that you crea ## Create the ACR Terraform Configuration -1. You can find the Terraform configuration for Azure Container Registry (ACR) [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-Azure-Services-Creation/ACR). The Terraform configuration files are used to create a repository in Azure Container Registry (ACR). +1. You can find the Terraform configuration for Azure Container Registry (ACR) [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/ACR). The Terraform configuration files are used to create a repository in Azure Container Registry (ACR). The Terraform `main.tf` will do a few things: - Use a Terraform backend to store the `.tfstate` in an Azure Storage Account diff --git a/Terraform-AZURE-Services-Creation/2-Create-VNET.md b/Terraform-AZURE-Services-Creation/2-Create-VNET.md index 4de04f8..4d6eaa6 100644 --- a/Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -4,7 +4,7 @@ In this lab you will create a Virtual Network (VNET) that will be used to deploy ## Create the Azure VNET Terraform Configuration -1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-Azure-Services-Creation/VNET). The Terraform configuration files are used to create an Azure Vitual Network. +1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/VNET). The Terraform configuration files are used to create an Azure Vitual Network. The Terraform `main.tf` will do a few things: - Use the `azurerm_virtual_network` Terraform resource to create a VNET. diff --git a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index c63cae5..3b2a72d 100644 --- a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -4,7 +4,7 @@ In this lab you will create a Log Analytics workspace that will be used to view ## Create the Log Analytics Workspace Terraform Configuration -1. You can find the Terraform configuration for Log Analytics [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-Azure-Services-Creation/Log-Analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. +1. You can find the Terraform configuration for Log Analytics [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/Log-Analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. The Terraform `main.tf` will do a few things: - Use the `azurerm_log_analytics_workspace` Terraform resource to create a Log Analytics workspace. diff --git a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index 62ac05c..440bd40 100644 --- a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -6,7 +6,7 @@ In this lab you will create: ## Create the AKS Terraform Configuration -1. You can find the Terraform configuration for AKS [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-Azure-Services-Creation/AKS-With-Worker-Nodes). The Terraform configuration files are used to create an AKS cluster and IAM Role/Policy for AKS. +1. You can find the Terraform configuration for AKS [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/AKS). The Terraform configuration files are used to create an AKS cluster and IAM Role/Policy for AKS. The Terraform `main.tf` will do a few things: - Use the `azurerm_kubernetes_cluster` Terraform resource to AKS Cluster From 1a15410a129564ff18d3ef3ecb7090abd6961fc3 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Wed, 20 Oct 2021 08:36:15 +0100 Subject: [PATCH 020/124] updates --- Docker/Push Image To ACR.md | 2 +- kubernetes_manifest/2-Create-Kubernetes-Manifest.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Docker/Push Image To ACR.md b/Docker/Push Image To ACR.md index 35d461a..6400ff5 100644 --- a/Docker/Push Image To ACR.md +++ b/Docker/Push Image To ACR.md @@ -1,4 +1,4 @@ -# Push Image To ECR +# Push Image To ACR The ECR repo will be where you store the Docker image that you created on your local computer in step 1. diff --git a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md index 6006882..51f6eae 100644 --- a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md +++ b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md @@ -1,6 +1,6 @@ # Create The Kubernetes Manifest -At this point you have successfully created a Docker image from the Uber app and stored it in ECR. +At this point you have successfully created a Docker image from the Uber app and stored it in ACR. Now it's time to set up the Kubernetes manifest, which will take the application and deploy it to AKS. From 5d8317ce53fe7ca15354120d0631e1379a18e4d7 Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Wed, 20 Oct 2021 08:55:03 +0100 Subject: [PATCH 021/124] Update 5-Run-CICD-For-AKS-Cluster.md --- .../5-Run-CICD-For-AKS-Cluster.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index a81c602..9f79c55 100644 --- a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -19,11 +19,12 @@ Please Note: The Service Principal needs IAM permission to the subscription/reso You'll be adding 4 screts into the GitHub repository. These four secrets will allow you to connect to Azure from GitHub Actions. 1. In the code repository, go to Settings --> Secrets -2. Add in two secrets: -`AZURE_AD_CLIENT_ID` – Will be the service principal ID from above -`AZURE_AD_CLIENT_SECRET` – The secret that was created as part of the Azure Service Principal -`AZURE_AD_TENANT_ID` – The Azure AD tenant ID to where the service principal was created -`AZURE_SUBSCRIPTION_ID` – Subscription ID of where you want to deploy the Terraform +2. Add in four secrets: + +- `AZURE_AD_CLIENT_ID` – Will be the service principal ID from above +- `AZURE_AD_CLIENT_SECRET` – The secret that was created as part of the Azure Service Principal +- `AZURE_AD_TENANT_ID` – The Azure AD tenant ID to where the service principal was created +- `AZURE_SUBSCRIPTION_ID` – Subscription ID of where you want to deploy the Terraform 3. Save the secrets. From 14fb3d0de76294d432b1140e982b3e3a46711f49 Mon Sep 17 00:00:00 2001 From: Jennifer Strejevitch Date: Fri, 1 Apr 2022 10:46:14 +0100 Subject: [PATCH 022/124] changes needed to run guide --- .github/workflows/main.yml | 11 ++++++----- Docker/Dockerfile | 2 +- .../5-Run-CICD-For-AKS-Cluster.md | 2 +- .../AKS/terraform.tfvars | 2 +- kubernetes_manifest/deployment.yml | 9 ++++++--- prerequisites.md | 2 +- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3029dc0..2897291 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,6 +11,7 @@ jobs: ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} + TF_VERSION: 1.1.7 runs-on: ubuntu-latest environment: production @@ -27,28 +28,28 @@ jobs: - name: 'Terraform Format' uses: hashicorp/terraform-github-actions@master with: - tf_actions_version: 1.0.1 + tf_actions_version: ${{ env.TF_VERSION }} tf_actions_subcommand: 'fmt' tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" - name: 'Terraform Init' uses: hashicorp/terraform-github-actions@master with: - tf_actions_version: 1.0.1 + tf_actions_version: ${{ env.TF_VERSION }} tf_actions_subcommand: 'init' tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" - name: 'Terraform Validate' uses: hashicorp/terraform-github-actions@master with: - tf_actions_version: 1.0.1 + tf_actions_version: ${{ env.TF_VERSION }} tf_actions_subcommand: 'validate' tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" - name: 'Terraform Plan' uses: hashicorp/terraform-github-actions@master with: - tf_actions_version: 1.0.1 + tf_actions_version: ${{ env.TF_VERSION }} tf_actions_subcommand: 'plan' tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" @@ -56,6 +57,6 @@ jobs: if: github.ref == 'refs/heads/main' uses: hashicorp/terraform-github-actions@master with: - tf_actions_version: 1.0.1 + tf_actions_version: ${{ env.TF_VERSION }} tf_actions_subcommand: 'apply' tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" \ No newline at end of file diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 4a713e1..740820d 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -7,7 +7,7 @@ COPY app /build COPY app/requirements.txt /build -RUN pip install -r requirements.txt +RUN pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org -r requirements.txt EXPOSE 5000 diff --git a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index 9f79c55..04adb0c 100644 --- a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -14,7 +14,7 @@ Alternatively - [this can be done via Azure Portal](https://docs.microsoft.com/e You'll need both the clientID of the service principal and secret that was created. -Please Note: The Service Principal needs IAM permission to the subscription/resource group to where the Azure resources are deployed. In this example, I gave **contributor** access to the **subscription**. +Please Note: The Service Principal needs IAM permission to the subscription/resource group to where the Azure resources are deployed. In this example, I gave **contributor** access to the **subscription**. See examples on how to [assign an Azure Role here](https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-steps) You'll be adding 4 screts into the GitHub repository. These four secrets will allow you to connect to Azure from GitHub Actions. diff --git a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars index d273f0f..81b24dd 100644 --- a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars +++ b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars @@ -1,7 +1,7 @@ name = "devopsthehardway" location = "uksouth" -kubernetes_version = "1.19.11" +kubernetes_version = "1.23.3" agent_count = 3 vm_size = "Standard_DS2_v2" ssh_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrt/GYkYpuQYRxM3lgjOr3Wqx8g5nQIbrg6Mr53wZGb35+ft+PibDMqxXZ7xq7fC3YuLnnO022IPgEjkF9fP03ZmfUeLjJJvw8YcutN9DD/2cx93BpKFPNUsqEB+za1iJ16kMsCojy35c1R64O+rw20D6iP96rmDAyIc5FR03y00eyAzQ8vo7/u9+VPwpdGEI7QCokZROcj6iNVz1V/1t6G4AEufPLokdj8J0gla/dN+tvnSLRQVBTDiD4jmVGImpWFqqKaH6R9SSXmRzj0uhvJUmSiZAZCb1caPEYgPEvNITuGQFdykPoY/4Z/3B+x/ipEQbWy8yL7bDFSXZTYhVKlPVyPbUtN5QFt7QtCtg84xDAZ6GA6AnONTtMxX2jvdzB9yh1ZsteNrOZ/Jo3ecuie573syQfG23Tu6qTqak8O7ZTOLY9iPx2ego3KvTWH/Q3lIvjnlpfCQtFtSgkNxjalMBk+NwwEgZHWRREOHwJmQIKVN0gSitN1KXobrqwxNk= tamops@Synth" diff --git a/kubernetes_manifest/deployment.yml b/kubernetes_manifest/deployment.yml index a3be8a0..163d6d9 100644 --- a/kubernetes_manifest/deployment.yml +++ b/kubernetes_manifest/deployment.yml @@ -32,7 +32,7 @@ spec: ports: - containerPort: 5000 --- -apiVersion: extensions/v1beta1 +apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: uber-ui @@ -43,6 +43,9 @@ spec: - http: paths: - path: / + pathType: Prefix backend: - serviceName: uber-ui - servicePort: 80 \ No newline at end of file + service: + name: uber-ui + port: + number: 80 \ No newline at end of file diff --git a/prerequisites.md b/prerequisites.md index 1feadde..57f7bb5 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -33,7 +33,7 @@ Because code will be written for *DevOps The Hard Way*, you will need a code edi ### Terraform -[Terraform Download](https://www.terraform.io/downloads.html) +[Terraform Download](https://www.terraform.io/downloads.html) - Tested on version 1.1.7 ### Docker To build the Docker image, you can use Docker Desktop for Windows or MacOS. From 554a06e9c44c54532fb1a879df4d17e6dffb3982 Mon Sep 17 00:00:00 2001 From: Victor Silva Date: Wed, 6 Apr 2022 09:36:51 -0300 Subject: [PATCH 023/124] Update 5-Run-CICD-For-AKS-Cluster.md --- .../5-Run-CICD-For-AKS-Cluster.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index 04adb0c..a79dae3 100644 --- a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -6,7 +6,7 @@ In this lab, you'll learn how to create an AKS cluster using GitHub Actions. The ## Secrets Prior to running the pipeline, you'll need to set up authentication from GitHub to Azure. To do that, you'll setup an Azure Service Principal. -Using the below AZ Cli(Note Down Secret): +Using the below Az CLI (Note Down Secret): `az ad sp create-for-rbac --name devopsthehardway` @@ -45,4 +45,4 @@ The pipeline does a few things: - Terraform plan occurs - Terraform apply occurs -1. Run the pipeline and watch as the pipeline automatically creates the AKS cluster +4. Run the pipeline and watch as the pipeline automatically creates the AKS cluster From 2a61d4a7978aaa14069125322495e6b292752f1f Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 14 Dec 2023 10:08:26 +0000 Subject: [PATCH 024/124] Initial changes, AKS updated to 1.28.3 --- Azure/create-terraform-storage.sh | 4 +- Terraform-AZURE-Services-Creation/ACR/main.tf | 14 +- .../ACR/terraform.tfvars | 8 +- .../ACR/variables.tf | 4 + Terraform-AZURE-Services-Creation/AKS/aks.tf | 71 +++++ .../AKS/application_gateway.tf | 76 ++++++ Terraform-AZURE-Services-Creation/AKS/data.tf | 20 ++ Terraform-AZURE-Services-Creation/AKS/main.tf | 246 +++++++++--------- Terraform-AZURE-Services-Creation/AKS/rbac.tf | 41 +++ .../AKS/terraform.tfvars | 9 +- .../AKS/variables.tf | 12 +- .../Log-Analytics/main.tf | 41 +-- .../Log-Analytics/variables.tf | 4 + .../VNET/main.tf | 27 +- .../VNET/terraform.tfvars | 12 +- .../VNET/variables.tf | 4 + prerequisites.md | 2 +- 17 files changed, 415 insertions(+), 180 deletions(-) create mode 100644 Terraform-AZURE-Services-Creation/AKS/aks.tf create mode 100644 Terraform-AZURE-Services-Creation/AKS/application_gateway.tf create mode 100644 Terraform-AZURE-Services-Creation/AKS/data.tf create mode 100644 Terraform-AZURE-Services-Creation/AKS/rbac.tf diff --git a/Azure/create-terraform-storage.sh b/Azure/create-terraform-storage.sh index bb15b16..5c57210 100755 --- a/Azure/create-terraform-storage.sh +++ b/Azure/create-terraform-storage.sh @@ -1,7 +1,7 @@ #!/bin/sh -RESOURCE_GROUP_NAME="devopstamops-rg" -STORAGE_ACCOUNT_NAME="devopstamopssa" +RESOURCE_GROUP_NAME="devopshardway-rg" +STORAGE_ACCOUNT_NAME="devopshardwaysa" # Create Resource Group az group create -l uksouth -n $RESOURCE_GROUP_NAME diff --git a/Terraform-AZURE-Services-Creation/ACR/main.tf b/Terraform-AZURE-Services-Creation/ACR/main.tf index bcb70e0..25b3c8c 100644 --- a/Terraform-AZURE-Services-Creation/ACR/main.tf +++ b/Terraform-AZURE-Services-Creation/ACR/main.tf @@ -1,20 +1,23 @@ terraform { + required_version = ">= 1.5.7" backend "azurerm" { - resource_group_name = "devopstamops-rg" - storage_account_name = "devopstamopssa" + resource_group_name = "devopshardway-rg" + storage_account_name = "devopshardwaysa" container_name = "tfstate" key = "acr-terraform.tfstate" } } provider "azurerm" { - version = "~> 2.0" - features {} + features {} } resource "azurerm_resource_group" "acr_resource_group" { name = "${var.name}-rg" location = var.location + + tags = var.tags + } resource "azurerm_container_registry" "acr" { @@ -23,4 +26,7 @@ resource "azurerm_container_registry" "acr" { location = azurerm_resource_group.acr_resource_group.location sku = "Standard" admin_enabled = false + + tags = var.tags + } \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/ACR/terraform.tfvars b/Terraform-AZURE-Services-Creation/ACR/terraform.tfvars index 92b9da1..d3a0905 100644 --- a/Terraform-AZURE-Services-Creation/ACR/terraform.tfvars +++ b/Terraform-AZURE-Services-Creation/ACR/terraform.tfvars @@ -1,2 +1,8 @@ name = "devopsthehardway" -location = "uksouth" \ No newline at end of file +location = "uksouth" + +tags = { + "DeployedBy" = "Terraform" + "Environment" = "production" + "Project" = "devopsthehardway" +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/ACR/variables.tf b/Terraform-AZURE-Services-Creation/ACR/variables.tf index 6f13071..713e2be 100644 --- a/Terraform-AZURE-Services-Creation/ACR/variables.tf +++ b/Terraform-AZURE-Services-Creation/ACR/variables.tf @@ -9,3 +9,7 @@ variable "location" { default = "uksouth" description = "Azure Location of resources" } + +variable "tags" { + type = map(string) +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/aks.tf b/Terraform-AZURE-Services-Creation/AKS/aks.tf new file mode 100644 index 0000000..a353c26 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/AKS/aks.tf @@ -0,0 +1,71 @@ +terraform { + required_version = ">= 1.5.7" + backend "azurerm" { + resource_group_name = "devopshardway-rg" + storage_account_name = "devopshardwaysa" + container_name = "tfstate" + key = "aks-terraform.tfstate" + } +} + +provider "azurerm" { + features {} +} + +resource "azurerm_kubernetes_cluster" "k8s" { + name = "${var.name}aks" + location = var.location + resource_group_name = data.azurerm_resource_group.resource_group.name + dns_prefix = "${var.name}dns" + kubernetes_version = var.kubernetes_version + + node_resource_group = "${var.name}-node-rg" + + linux_profile { + admin_username = "ubuntu" + + ssh_key { + key_data = var.ssh_public_key + } + } + + default_node_pool { + name = "agentpool" + node_count = var.agent_count + vm_size = var.vm_size + vnet_subnet_id = data.azurerm_subnet.akssubnet.id + type = "VirtualMachineScaleSets" + orchestrator_version = var.kubernetes_version + } + + identity { + type = "SystemAssigned" + } + + oms_agent { + log_analytics_workspace_id = data.azurerm_log_analytics_workspace.workspace.id + } + + + ingress_application_gateway { + gateway_id = azurerm_application_gateway.aks.id + } + + network_profile { + load_balancer_sku = "standard" + network_plugin = "azure" + } + + azure_active_directory_role_based_access_control { + azure_rbac_enabled = false + managed = true + admin_group_object_ids = [var.aks_admins_group_object_id] + } + + tags = var.tags + + depends_on = [ + azurerm_application_gateway.aks + ] + +} diff --git a/Terraform-AZURE-Services-Creation/AKS/application_gateway.tf b/Terraform-AZURE-Services-Creation/AKS/application_gateway.tf new file mode 100644 index 0000000..5497614 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/AKS/application_gateway.tf @@ -0,0 +1,76 @@ +resource "azurerm_public_ip" "example" { + name = "appgateway-pip" + resource_group_name = data.azurerm_resource_group.resource_group.name + location = var.location + allocation_method = "Static" + sku = "Standard" +} + +# since these variables are re-used - a locals block makes this more maintainable +locals { + backend_address_pool_name = "aks-beap" + frontend_port_name = "aks-feport" + frontend_ip_configuration_name = "aks-feip" + http_setting_name = "aks-be-htst" + listener_name = "aks-httplstn" + request_routing_rule_name = "aks-rqrt" + redirect_configuration_name = "aks-rdrcfg" +} + +resource "azurerm_application_gateway" "aks" { + name = "aks-appgateway" + resource_group_name = data.azurerm_resource_group.resource_group.name + location = var.location + + sku { + name = "Standard_v2" + tier = "Standard_v2" + capacity = 2 + } + + gateway_ip_configuration { + name = "my-gateway-ip-configuration" + subnet_id = data.azurerm_subnet.appgwsubnet.id + } + + frontend_port { + name = local.frontend_port_name + port = 80 + } + + frontend_ip_configuration { + name = local.frontend_ip_configuration_name + public_ip_address_id = azurerm_public_ip.example.id + } + + backend_address_pool { + name = local.backend_address_pool_name + } + + backend_http_settings { + name = local.http_setting_name + cookie_based_affinity = "Disabled" + port = 80 + protocol = "Http" + request_timeout = 60 + } + + http_listener { + name = local.listener_name + frontend_ip_configuration_name = local.frontend_ip_configuration_name + frontend_port_name = local.frontend_port_name + protocol = "Http" + } + + request_routing_rule { + name = local.request_routing_rule_name + priority = 9 + rule_type = "Basic" + http_listener_name = local.listener_name + backend_address_pool_name = local.backend_address_pool_name + backend_http_settings_name = local.http_setting_name + } + + tags = var.tags + +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/data.tf b/Terraform-AZURE-Services-Creation/AKS/data.tf new file mode 100644 index 0000000..750a44f --- /dev/null +++ b/Terraform-AZURE-Services-Creation/AKS/data.tf @@ -0,0 +1,20 @@ +data "azurerm_resource_group" "resource_group" { + name = "${var.name}-rg" +} + +data "azurerm_subnet" "akssubnet" { + name = "aks" + virtual_network_name = "${var.name}-vnet" + resource_group_name = data.azurerm_resource_group.resource_group.name +} + +data "azurerm_subnet" "appgwsubnet" { + name = "appgw" + virtual_network_name = "${var.name}-vnet" + resource_group_name = data.azurerm_resource_group.resource_group.name +} + +data "azurerm_log_analytics_workspace" "workspace" { + name = "${var.name}-la" + resource_group_name = data.azurerm_resource_group.resource_group.name +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/main.tf b/Terraform-AZURE-Services-Creation/AKS/main.tf index e29c7b5..570c3b9 100644 --- a/Terraform-AZURE-Services-Creation/AKS/main.tf +++ b/Terraform-AZURE-Services-Creation/AKS/main.tf @@ -1,123 +1,123 @@ -terraform { - backend "azurerm" { - resource_group_name = "devopstamops-rg" - storage_account_name = "devopstamopssa" - container_name = "tfstate" - key = "aks-terraform.tfstate" - } -} - -provider "azurerm" { - version = "~> 2.0" - features {} -} - -data "azurerm_resource_group" "resource_group" { - name = "${var.name}-rg" -} - -data "azurerm_subnet" "akssubnet" { - name = "aks" - virtual_network_name = "${var.name}-vnet" - resource_group_name = data.azurerm_resource_group.resource_group.name -} - -data "azurerm_subnet" "appgwsubnet" { - name = "appgw" - virtual_network_name = "${var.name}-vnet" - resource_group_name = data.azurerm_resource_group.resource_group.name -} - -data "azurerm_log_analytics_workspace" "workspace" { - name = "${var.name}-la" - resource_group_name = data.azurerm_resource_group.resource_group.name -} - -resource "azurerm_kubernetes_cluster" "k8s" { - name = "${var.name}aks" - location = var.location - resource_group_name = data.azurerm_resource_group.resource_group.name - dns_prefix = "${var.name}dns" - kubernetes_version = var.kubernetes_version - - node_resource_group = "${var.name}-node-rg" - - linux_profile { - admin_username = "ubuntu" - - ssh_key { - key_data = var.ssh_public_key - } - } - - default_node_pool { - name = "agentpool" - node_count = var.agent_count - vm_size = var.vm_size - vnet_subnet_id = data.azurerm_subnet.akssubnet.id - type = "VirtualMachineScaleSets" - orchestrator_version = var.kubernetes_version - } - - identity { - type = "SystemAssigned" - } - - addon_profile { - oms_agent { - enabled = var.addons.oms_agent - log_analytics_workspace_id = data.azurerm_log_analytics_workspace.workspace.id - } - - ingress_application_gateway { - enabled = var.addons.ingress_application_gateway - subnet_id = data.azurerm_subnet.appgwsubnet.id - } - - } - - network_profile { - load_balancer_sku = "standard" - network_plugin = "azure" - } - - role_based_access_control { - enabled = var.kubernetes_cluster_rbac_enabled - - azure_active_directory { - managed = true - admin_group_object_ids = [var.aks_admins_group_object_id] - } - } - -} - -data "azurerm_resource_group" "node_resource_group" { - name = azurerm_kubernetes_cluster.k8s.node_resource_group - depends_on = [ - azurerm_kubernetes_cluster.k8s - ] -} - -resource "azurerm_role_assignment" "node_infrastructure_update_scale_set" { - principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id - scope = data.azurerm_resource_group.node_resource_group.id - role_definition_name = "Virtual Machine Contributor" - depends_on = [ - azurerm_kubernetes_cluster.k8s - ] -} - -data "azurerm_container_registry" "example" { - name = "${var.name}acr" - resource_group_name = data.azurerm_resource_group.resource_group.name -} - -resource "azurerm_role_assignment" "acr_pull" { - principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id - scope = data.azurerm_resource_group.resource_group.id - role_definition_name = "acrpull" - depends_on = [ - azurerm_kubernetes_cluster.k8s - ] -} \ No newline at end of file +# terraform { +# required_version = ">= 1.5.7" +# backend "azurerm" { +# resource_group_name = "devopstamops-rg" +# storage_account_name = "devopstamopssa" +# container_name = "tfstate" +# key = "aks-terraform.tfstate" +# } +# } + +# provider "azurerm" { +# features {} +# } + +# data "azurerm_resource_group" "resource_group" { +# name = "${var.name}-rg" +# } + +# data "azurerm_subnet" "akssubnet" { +# name = "aks" +# virtual_network_name = "${var.name}-vnet" +# resource_group_name = data.azurerm_resource_group.resource_group.name +# } + +# data "azurerm_subnet" "appgwsubnet" { +# name = "appgw" +# virtual_network_name = "${var.name}-vnet" +# resource_group_name = data.azurerm_resource_group.resource_group.name +# } + +# data "azurerm_log_analytics_workspace" "workspace" { +# name = "${var.name}-la" +# resource_group_name = data.azurerm_resource_group.resource_group.name +# } + +# resource "azurerm_kubernetes_cluster" "k8s" { +# name = "${var.name}aks" +# location = var.location +# resource_group_name = data.azurerm_resource_group.resource_group.name +# dns_prefix = "${var.name}dns" +# kubernetes_version = var.kubernetes_version + +# node_resource_group = "${var.name}-node-rg" + +# linux_profile { +# admin_username = "ubuntu" + +# ssh_key { +# key_data = var.ssh_public_key +# } +# } + +# default_node_pool { +# name = "agentpool" +# node_count = var.agent_count +# vm_size = var.vm_size +# vnet_subnet_id = data.azurerm_subnet.akssubnet.id +# type = "VirtualMachineScaleSets" +# orchestrator_version = var.kubernetes_version +# } + +# identity { +# type = "SystemAssigned" +# } + +# addon_profile { +# oms_agent { +# enabled = var.addons.oms_agent +# log_analytics_workspace_id = data.azurerm_log_analytics_workspace.workspace.id +# } + +# ingress_application_gateway { +# enabled = var.addons.ingress_application_gateway +# subnet_id = data.azurerm_subnet.appgwsubnet.id +# } + +# } + +# network_profile { +# load_balancer_sku = "standard" +# network_plugin = "azure" +# } + +# role_based_access_control { +# enabled = var.kubernetes_cluster_rbac_enabled + +# azure_active_directory { +# managed = true +# admin_group_object_ids = [var.aks_admins_group_object_id] +# } +# } + +# } + +# data "azurerm_resource_group" "node_resource_group" { +# name = azurerm_kubernetes_cluster.k8s.node_resource_group +# depends_on = [ +# azurerm_kubernetes_cluster.k8s +# ] +# } + +# resource "azurerm_role_assignment" "node_infrastructure_update_scale_set" { +# principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id +# scope = data.azurerm_resource_group.node_resource_group.id +# role_definition_name = "Virtual Machine Contributor" +# depends_on = [ +# azurerm_kubernetes_cluster.k8s +# ] +# } + +# data "azurerm_container_registry" "example" { +# name = "${var.name}acr" +# resource_group_name = data.azurerm_resource_group.resource_group.name +# } + +# resource "azurerm_role_assignment" "acr_pull" { +# principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id +# scope = data.azurerm_resource_group.resource_group.id +# role_definition_name = "acrpull" +# depends_on = [ +# azurerm_kubernetes_cluster.k8s +# ] +# } \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/rbac.tf b/Terraform-AZURE-Services-Creation/AKS/rbac.tf new file mode 100644 index 0000000..c84d11f --- /dev/null +++ b/Terraform-AZURE-Services-Creation/AKS/rbac.tf @@ -0,0 +1,41 @@ +data "azurerm_resource_group" "node_resource_group" { + name = azurerm_kubernetes_cluster.k8s.node_resource_group + depends_on = [ + azurerm_kubernetes_cluster.k8s + ] +} + +resource "azurerm_role_assignment" "node_infrastructure_update_scale_set" { + principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id + scope = data.azurerm_resource_group.node_resource_group.id + role_definition_name = "Virtual Machine Contributor" + depends_on = [ + azurerm_kubernetes_cluster.k8s + ] +} + +data "azurerm_container_registry" "acr" { + name = "${var.name}tamopsacr" + resource_group_name = data.azurerm_resource_group.resource_group.name +} + +resource "azurerm_role_assignment" "acr_pull" { + principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id + scope = data.azurerm_container_registry.acr.id + role_definition_name = "acrpull" + depends_on = [ + azurerm_kubernetes_cluster.k8s + ] +} + +# resource "azurerm_role_assignment" "appgateway_noderg_contributor" { +# scope = data.azurerm_resource_group.node_resource_group.id +# role_definition_name = "Contributor" +# principal_id = azurerm_kubernetes_cluster.k8s.ingress_application_gateway[0].ingress_application_gateway_identity[0].object_id +# } + +resource "azurerm_role_assignment" "appgateway_aksrg_contributor" { + scope = data.azurerm_resource_group.resource_group.id + role_definition_name = "Contributor" + principal_id = azurerm_kubernetes_cluster.k8s.ingress_application_gateway[0].ingress_application_gateway_identity[0].object_id +} diff --git a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars index 81b24dd..98c607e 100644 --- a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars +++ b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars @@ -1,13 +1,14 @@ name = "devopsthehardway" location = "uksouth" -kubernetes_version = "1.23.3" +kubernetes_version = "1.28.3" agent_count = 3 vm_size = "Standard_DS2_v2" ssh_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrt/GYkYpuQYRxM3lgjOr3Wqx8g5nQIbrg6Mr53wZGb35+ft+PibDMqxXZ7xq7fC3YuLnnO022IPgEjkF9fP03ZmfUeLjJJvw8YcutN9DD/2cx93BpKFPNUsqEB+za1iJ16kMsCojy35c1R64O+rw20D6iP96rmDAyIc5FR03y00eyAzQ8vo7/u9+VPwpdGEI7QCokZROcj6iNVz1V/1t6G4AEufPLokdj8J0gla/dN+tvnSLRQVBTDiD4jmVGImpWFqqKaH6R9SSXmRzj0uhvJUmSiZAZCb1caPEYgPEvNITuGQFdykPoY/4Z/3B+x/ipEQbWy8yL7bDFSXZTYhVKlPVyPbUtN5QFt7QtCtg84xDAZ6GA6AnONTtMxX2jvdzB9yh1ZsteNrOZ/Jo3ecuie573syQfG23Tu6qTqak8O7ZTOLY9iPx2ego3KvTWH/Q3lIvjnlpfCQtFtSgkNxjalMBk+NwwEgZHWRREOHwJmQIKVN0gSitN1KXobrqwxNk= tamops@Synth" aks_admins_group_object_id = "e97b6454-3fa1-499e-8e5c-5d631e9ca4d1" -addons = { - oms_agent = true - ingress_application_gateway = true +tags = { + "DeployedBy" = "Terraform" + "Environment" = "production" + "Project" = "devopsthehardway" } \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/variables.tf b/Terraform-AZURE-Services-Creation/AKS/variables.tf index 7c55ccd..6c462cf 100644 --- a/Terraform-AZURE-Services-Creation/AKS/variables.tf +++ b/Terraform-AZURE-Services-Creation/AKS/variables.tf @@ -10,14 +10,6 @@ variable "location" { description = "Azure Location of resources" } -variable "addons" { - description = "Defines which addons will be activated." - type = object({ - oms_agent = bool - ingress_application_gateway = bool - }) -} - variable "kubernetes_cluster_rbac_enabled" { default = "true" } @@ -35,4 +27,8 @@ variable "ssh_public_key" { } variable "aks_admins_group_object_id" { +} + +variable "tags" { + type = map(string) } \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/Log-Analytics/main.tf b/Terraform-AZURE-Services-Creation/Log-Analytics/main.tf index 9e162f0..88978db 100644 --- a/Terraform-AZURE-Services-Creation/Log-Analytics/main.tf +++ b/Terraform-AZURE-Services-Creation/Log-Analytics/main.tf @@ -1,38 +1,41 @@ terraform { + required_version = ">= 1.5.7" backend "azurerm" { - resource_group_name = "devopstamops-rg" - storage_account_name = "devopstamopssa" + resource_group_name = "devopshardway-rg" + storage_account_name = "devopshardwaysa" container_name = "tfstate" key = "la-terraform.tfstate" } } provider "azurerm" { - version = "~> 2.0" - features {} + features {} } data "azurerm_resource_group" "resource_group" { - name = "${var.name}-rg" + name = "${var.name}-rg" } resource "azurerm_log_analytics_workspace" "Log_Analytics_WorkSpace" { - # The WorkSpace name has to be unique across the whole of azure, not just the current subscription/tenant. - name = "${var.name}-la" - location = var.location - resource_group_name = data.azurerm_resource_group.resource_group.name - sku = "PerGB2018" + # The WorkSpace name has to be unique across the whole of azure, not just the current subscription/tenant. + name = "${var.name}-la" + location = var.location + resource_group_name = data.azurerm_resource_group.resource_group.name + sku = "PerGB2018" + + tags = var.tags + } resource "azurerm_log_analytics_solution" "Log_Analytics_Solution_ContainerInsights" { - solution_name = "ContainerInsights" - location = azurerm_log_analytics_workspace.Log_Analytics_WorkSpace.location - resource_group_name = data.azurerm_resource_group.resource_group.name - workspace_resource_id = azurerm_log_analytics_workspace.Log_Analytics_WorkSpace.id - workspace_name = azurerm_log_analytics_workspace.Log_Analytics_WorkSpace.name + solution_name = "ContainerInsights" + location = azurerm_log_analytics_workspace.Log_Analytics_WorkSpace.location + resource_group_name = data.azurerm_resource_group.resource_group.name + workspace_resource_id = azurerm_log_analytics_workspace.Log_Analytics_WorkSpace.id + workspace_name = azurerm_log_analytics_workspace.Log_Analytics_WorkSpace.name - plan { - publisher = "Microsoft" - product = "OMSGallery/ContainerInsights" - } + plan { + publisher = "Microsoft" + product = "OMSGallery/ContainerInsights" + } } \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/Log-Analytics/variables.tf b/Terraform-AZURE-Services-Creation/Log-Analytics/variables.tf index 03c8598..713e2be 100644 --- a/Terraform-AZURE-Services-Creation/Log-Analytics/variables.tf +++ b/Terraform-AZURE-Services-Creation/Log-Analytics/variables.tf @@ -8,4 +8,8 @@ variable "location" { type = string default = "uksouth" description = "Azure Location of resources" +} + +variable "tags" { + type = map(string) } \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/VNET/main.tf b/Terraform-AZURE-Services-Creation/VNET/main.tf index acea780..2f5875d 100644 --- a/Terraform-AZURE-Services-Creation/VNET/main.tf +++ b/Terraform-AZURE-Services-Creation/VNET/main.tf @@ -1,38 +1,41 @@ terraform { + required_version = ">= 1.5.7" backend "azurerm" { - resource_group_name = "devopstamops-rg" - storage_account_name = "devopstamopssa" + resource_group_name = "devopshardway-rg" + storage_account_name = "devopshardwaysa" container_name = "tfstate" key = "vnet-terraform.tfstate" } } provider "azurerm" { - version = "~> 2.0" - features {} + features {} } data "azurerm_resource_group" "resource_group" { - name = "${var.name}-rg" + name = "${var.name}-rg" } resource "azurerm_virtual_network" "virtual_network" { - name = "${var.name}-vnet" - location = var.location + name = "${var.name}-vnet" + location = var.location resource_group_name = data.azurerm_resource_group.resource_group.name - address_space = [var.network_address_space] + address_space = [var.network_address_space] + + tags = var.tags + } resource "azurerm_subnet" "aks_subnet" { - name = var.aks_subnet_address_name + name = var.aks_subnet_address_name resource_group_name = data.azurerm_resource_group.resource_group.name virtual_network_name = azurerm_virtual_network.virtual_network.name - address_prefixes = [var.aks_subnet_address_prefix] + address_prefixes = [var.aks_subnet_address_prefix] } resource "azurerm_subnet" "app_gwsubnet" { - name = var.subnet_address_name + name = var.subnet_address_name resource_group_name = data.azurerm_resource_group.resource_group.name virtual_network_name = azurerm_virtual_network.virtual_network.name - address_prefixes = [var.subnet_address_prefix] + address_prefixes = [var.subnet_address_prefix] } \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars b/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars index 542f7dd..859f4ce 100644 --- a/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars +++ b/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars @@ -1,7 +1,7 @@ -name = "devopsthehardway" -location = "uksouth" -network_address_space = "192.168.0.0/16" -aks_subnet_address_name = "aks" +name = "devopsthehardway" +location = "uksouth" +network_address_space = "192.168.0.0/16" +aks_subnet_address_name = "aks" aks_subnet_address_prefix = "192.168.0.0/24" -subnet_address_name = "appgw" -subnet_address_prefix = "192.168.1.0/24" +subnet_address_name = "appgw" +subnet_address_prefix = "192.168.1.0/24" diff --git a/Terraform-AZURE-Services-Creation/VNET/variables.tf b/Terraform-AZURE-Services-Creation/VNET/variables.tf index 02763b5..cbc32ee 100644 --- a/Terraform-AZURE-Services-Creation/VNET/variables.tf +++ b/Terraform-AZURE-Services-Creation/VNET/variables.tf @@ -33,4 +33,8 @@ variable "subnet_address_name" { variable "subnet_address_prefix" { type = string description = "Subnet Address Space" +} + +variable "tags" { + type = map(string) } \ No newline at end of file diff --git a/prerequisites.md b/prerequisites.md index 57f7bb5..e368858 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -33,7 +33,7 @@ Because code will be written for *DevOps The Hard Way*, you will need a code edi ### Terraform -[Terraform Download](https://www.terraform.io/downloads.html) - Tested on version 1.1.7 +[Terraform Download](https://www.terraform.io/downloads.html) - Tested on version 1.6.6 ### Docker To build the Docker image, you can use Docker Desktop for Windows or MacOS. From 93a1eda7c906c0beacf0c260b284eae6275aff9e Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 14 Dec 2023 10:11:14 +0000 Subject: [PATCH 025/124] remove commit file --- Terraform-AZURE-Services-Creation/AKS/main.tf | 123 ------------------ 1 file changed, 123 deletions(-) delete mode 100644 Terraform-AZURE-Services-Creation/AKS/main.tf diff --git a/Terraform-AZURE-Services-Creation/AKS/main.tf b/Terraform-AZURE-Services-Creation/AKS/main.tf deleted file mode 100644 index 570c3b9..0000000 --- a/Terraform-AZURE-Services-Creation/AKS/main.tf +++ /dev/null @@ -1,123 +0,0 @@ -# terraform { -# required_version = ">= 1.5.7" -# backend "azurerm" { -# resource_group_name = "devopstamops-rg" -# storage_account_name = "devopstamopssa" -# container_name = "tfstate" -# key = "aks-terraform.tfstate" -# } -# } - -# provider "azurerm" { -# features {} -# } - -# data "azurerm_resource_group" "resource_group" { -# name = "${var.name}-rg" -# } - -# data "azurerm_subnet" "akssubnet" { -# name = "aks" -# virtual_network_name = "${var.name}-vnet" -# resource_group_name = data.azurerm_resource_group.resource_group.name -# } - -# data "azurerm_subnet" "appgwsubnet" { -# name = "appgw" -# virtual_network_name = "${var.name}-vnet" -# resource_group_name = data.azurerm_resource_group.resource_group.name -# } - -# data "azurerm_log_analytics_workspace" "workspace" { -# name = "${var.name}-la" -# resource_group_name = data.azurerm_resource_group.resource_group.name -# } - -# resource "azurerm_kubernetes_cluster" "k8s" { -# name = "${var.name}aks" -# location = var.location -# resource_group_name = data.azurerm_resource_group.resource_group.name -# dns_prefix = "${var.name}dns" -# kubernetes_version = var.kubernetes_version - -# node_resource_group = "${var.name}-node-rg" - -# linux_profile { -# admin_username = "ubuntu" - -# ssh_key { -# key_data = var.ssh_public_key -# } -# } - -# default_node_pool { -# name = "agentpool" -# node_count = var.agent_count -# vm_size = var.vm_size -# vnet_subnet_id = data.azurerm_subnet.akssubnet.id -# type = "VirtualMachineScaleSets" -# orchestrator_version = var.kubernetes_version -# } - -# identity { -# type = "SystemAssigned" -# } - -# addon_profile { -# oms_agent { -# enabled = var.addons.oms_agent -# log_analytics_workspace_id = data.azurerm_log_analytics_workspace.workspace.id -# } - -# ingress_application_gateway { -# enabled = var.addons.ingress_application_gateway -# subnet_id = data.azurerm_subnet.appgwsubnet.id -# } - -# } - -# network_profile { -# load_balancer_sku = "standard" -# network_plugin = "azure" -# } - -# role_based_access_control { -# enabled = var.kubernetes_cluster_rbac_enabled - -# azure_active_directory { -# managed = true -# admin_group_object_ids = [var.aks_admins_group_object_id] -# } -# } - -# } - -# data "azurerm_resource_group" "node_resource_group" { -# name = azurerm_kubernetes_cluster.k8s.node_resource_group -# depends_on = [ -# azurerm_kubernetes_cluster.k8s -# ] -# } - -# resource "azurerm_role_assignment" "node_infrastructure_update_scale_set" { -# principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id -# scope = data.azurerm_resource_group.node_resource_group.id -# role_definition_name = "Virtual Machine Contributor" -# depends_on = [ -# azurerm_kubernetes_cluster.k8s -# ] -# } - -# data "azurerm_container_registry" "example" { -# name = "${var.name}acr" -# resource_group_name = data.azurerm_resource_group.resource_group.name -# } - -# resource "azurerm_role_assignment" "acr_pull" { -# principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id -# scope = data.azurerm_resource_group.resource_group.id -# role_definition_name = "acrpull" -# depends_on = [ -# azurerm_kubernetes_cluster.k8s -# ] -# } \ No newline at end of file From fe5a60aab10464758ea9505c43d2838b9b5ba912 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 14 Dec 2023 10:13:36 +0000 Subject: [PATCH 026/124] terraform fmt aks --- Terraform-AZURE-Services-Creation/AKS/aks.tf | 2 +- Terraform-AZURE-Services-Creation/AKS/application_gateway.tf | 2 +- Terraform-AZURE-Services-Creation/AKS/terraform.tfvars | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Terraform-AZURE-Services-Creation/AKS/aks.tf b/Terraform-AZURE-Services-Creation/AKS/aks.tf index a353c26..2eefe5d 100644 --- a/Terraform-AZURE-Services-Creation/AKS/aks.tf +++ b/Terraform-AZURE-Services-Creation/AKS/aks.tf @@ -1,5 +1,5 @@ terraform { - required_version = ">= 1.5.7" + required_version = ">= 1.5.7" backend "azurerm" { resource_group_name = "devopshardway-rg" storage_account_name = "devopshardwaysa" diff --git a/Terraform-AZURE-Services-Creation/AKS/application_gateway.tf b/Terraform-AZURE-Services-Creation/AKS/application_gateway.tf index 5497614..7f9d9a5 100644 --- a/Terraform-AZURE-Services-Creation/AKS/application_gateway.tf +++ b/Terraform-AZURE-Services-Creation/AKS/application_gateway.tf @@ -71,6 +71,6 @@ resource "azurerm_application_gateway" "aks" { backend_http_settings_name = local.http_setting_name } - tags = var.tags + tags = var.tags } \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars index 98c607e..0ba41d1 100644 --- a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars +++ b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars @@ -8,7 +8,7 @@ ssh_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrt/GYkYpuQY aks_admins_group_object_id = "e97b6454-3fa1-499e-8e5c-5d631e9ca4d1" tags = { - "DeployedBy" = "Terraform" + "DeployedBy" = "Terraform" "Environment" = "production" - "Project" = "devopsthehardway" + "Project" = "devopsthehardway" } \ No newline at end of file From 8463e00e2d4fb9e36c80713541d0f7fc9144e1a8 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 14 Dec 2023 10:16:18 +0000 Subject: [PATCH 027/124] Upgrade TF version --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2897291..658fa4b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,7 +11,7 @@ jobs: ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} - TF_VERSION: 1.1.7 + TF_VERSION: 1.5.7 runs-on: ubuntu-latest environment: production From 47dfd3fc2418f4f6f4017c34a22ed7188f60a711 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 14 Dec 2023 10:42:21 +0000 Subject: [PATCH 028/124] Some more fixes --- Azure/create-azure-ad-group.sh | 4 ++-- Docker/1-Create-Docker-Image.md | 5 +++++ Docker/{Push Image To ACR.md => 2-Push Image To ACR.md} | 2 +- README.md | 4 ++-- Terraform-AZURE-Services-Creation/2-Create-VNET.md | 3 +-- .../3-Create-Log-Analytics.md | 2 +- .../4-Create-AKS-Cluster-IAM-Roles.md | 4 +++- Terraform-AZURE-Services-Creation/AKS/rbac.tf | 2 +- kubernetes_manifest/2-Create-Kubernetes-Manifest.md | 2 +- prerequisites.md | 9 ++++++++- 10 files changed, 25 insertions(+), 12 deletions(-) rename Docker/{Push Image To ACR.md => 2-Push Image To ACR.md} (86%) diff --git a/Azure/create-azure-ad-group.sh b/Azure/create-azure-ad-group.sh index c4192f4..c01a81e 100644 --- a/Azure/create-azure-ad-group.sh +++ b/Azure/create-azure-ad-group.sh @@ -1,7 +1,7 @@ #!/bin/sh AZURE_AD_GROUP_NAME="devopsthehardway-aks-group" -CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query objectId -o tsv) +CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id -o tsv) # Create Azure AD Group az ad group create --display-name $AZURE_AD_GROUP_NAME --mail-nickname $AZURE_AD_GROUP_NAME @@ -9,6 +9,6 @@ az ad group create --display-name $AZURE_AD_GROUP_NAME --mail-nickname $AZURE_AD # Add Current az login user to Azure AD Group az ad group member add --group $AZURE_AD_GROUP_NAME --member-id $CURRENT_USER_OBJECTID -AZURE_GROUP_ID=$(az ad group show --group "devopsthehardway-aks-group" --query objectId -o tsv) +AZURE_GROUP_ID=$(az ad group show --group "devopsthehardway-aks-group" --query id -o tsv) echo "AZURE AD GROUP ID IS: $AZURE_GROUP_ID" \ No newline at end of file diff --git a/Docker/1-Create-Docker-Image.md b/Docker/1-Create-Docker-Image.md index c0866de..07109de 100644 --- a/Docker/1-Create-Docker-Image.md +++ b/Docker/1-Create-Docker-Image.md @@ -17,6 +17,11 @@ In this lab you will create a Docker image to containerize the Uber app. 4. To create the Docker image, you'll run the following command: `docker build -t uberapp .` +Please note, you want to run the below docker command instead, if the above does not work: +`docker build --platform=linux/amd64 -t uberapp .` + +This command is similar to the first one, but it includes the `--platform` option. The` --platform` option allows you to specify the target platform for the Docker image. In this case, it specifies the platform as `linux/amd64`, which means the image will be built for the AMD64 architecture running Linux. This option is useful when building multi-platform images that can run on different architectures. + The `-t` is for the tag (the name) of the Docker image and the `.` is telling the Docker CLI that the Dockerfile is in the current directory 5. After the Docker image is created, run the following command to confirm the Docker image is on your machine. diff --git a/Docker/Push Image To ACR.md b/Docker/2-Push Image To ACR.md similarity index 86% rename from Docker/Push Image To ACR.md rename to Docker/2-Push Image To ACR.md index 6400ff5..005a752 100644 --- a/Docker/Push Image To ACR.md +++ b/Docker/2-Push Image To ACR.md @@ -1,6 +1,6 @@ # Push Image To ACR -The ECR repo will be where you store the Docker image that you created on your local computer in step 1. +The ACR repo will be where you store the Docker image that you created on your local computer in step 1. ## Log Into The ECR Repository 1. Log in to ACR with Azure CLI diff --git a/README.md b/README.md index 30bbd9d..0ecdaae 100644 --- a/README.md +++ b/README.md @@ -58,9 +58,9 @@ In this scenario, the Terraform State file will be stored in remote state locati 3. Docker - The purpose of the Docker section is to create a Docker image from the app that the organization is running on-prem (the uber app), containerize it, and store the container inside of a container repository. For the container repo, you'll use Azure ECR. - [Create The Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/1-Create-Docker-Image.md) - - [Log Into Azure ACR Repository](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/Push%20Image%20To%20ACR.md) + - [Log Into Azure ACR Repository and Push the Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/Push%20Image%20To%20ACR.md) 4. Kubernetes - The purpose of the Kubernetes section is to connect to AKS locally and to write the Kubernetes manifest to deploy the Python Uber app. - - [Connect To ACR From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/1-Connect-To-ACR.md) + - [Connect To AKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/1-Connect-To-ACR.md) - [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/2-Create-Kubernetes-Manifest.md) - [Deploy Uber App into Kubernetes](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/3-Deploy-Uber-App.md) 5. Automated Testing - The purpose of the Automation Testing section is to ensure that all of the Terraform code is performing as it should be from a policy, security, and static code analysis perspective. diff --git a/Terraform-AZURE-Services-Creation/2-Create-VNET.md b/Terraform-AZURE-Services-Creation/2-Create-VNET.md index 4d6eaa6..9811ffb 100644 --- a/Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -11,8 +11,7 @@ The Terraform `main.tf` will do a few things: - Use the `azurerm_subnet` Terraform resource to create relevant subnets. - Use the `uksouth` region, but feel free to change that if you'd like - -2. Create the ACR by running the following: +2. Create the VNET by running the following: - `terraform init` - To initialize the working directory and pull down the provider - `terraform plan` - To go through a "check" and confirm the configurations are valid - `terraform apply` - To create the resource \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index 3b2a72d..83473c4 100644 --- a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -11,7 +11,7 @@ The Terraform `main.tf` will do a few things: - Use the `azurerm_log_analytics_solution` Terraform resource to enable the Log Analytics solution ContainerInsights. - Use the `uksouth` region, but feel free to change that if you'd like -2. Create the ACR by running the following: +2. Create the Log Analytics Workspace by running the following: - `terraform init` - To initialize the working directory and pull down the provider - `terraform plan` - To go through a "check" and confirm the configurations are valid - `terraform apply` - To create the resource diff --git a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index 440bd40..f4da8aa 100644 --- a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -13,7 +13,9 @@ The Terraform `main.tf` will do a few things: - Use the `azurerm_role_assignment` Terraform resource to create the two neccessary role assignments - Use the `uksouth` region, but feel free to change that if you'd like -2. Create the bucket by running the following: +2. In line 8 of `terraform.tfvars` replace the actual Azure AD Group ID you noted down [earlier](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/2-Create-Azure-AD-Group-AKS-Admins.md) + +3. Create the bucket by running the following: - `terraform init` - To initialize the working directory and pull down the provider - `terraform plan` - To go through a "check" and confirm the configurations are valid - `terraform apply` - To create the resource diff --git a/Terraform-AZURE-Services-Creation/AKS/rbac.tf b/Terraform-AZURE-Services-Creation/AKS/rbac.tf index c84d11f..1841276 100644 --- a/Terraform-AZURE-Services-Creation/AKS/rbac.tf +++ b/Terraform-AZURE-Services-Creation/AKS/rbac.tf @@ -15,7 +15,7 @@ resource "azurerm_role_assignment" "node_infrastructure_update_scale_set" { } data "azurerm_container_registry" "acr" { - name = "${var.name}tamopsacr" + name = "${var.name}acr" resource_group_name = data.azurerm_resource_group.resource_group.name } diff --git a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md index 51f6eae..42544c0 100644 --- a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md +++ b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md @@ -15,4 +15,4 @@ The deployment is what gets the application running in Kubernetes The service is what exposes the Kubernetes application so you can, for example, reach the frontend from a load balancer hostname or IP. -The manifest can be found in the `kubernetes_manifest` directory. Ensure on line `31` to change the image URL to the one you have in your Azure account. \ No newline at end of file +The manifest `deployment.yml` can be found in the `kubernetes_manifest` directory. Ensure on line `31` to change the image URL to the one you have in your Azure account. \ No newline at end of file diff --git a/prerequisites.md b/prerequisites.md index e368858..05ccbe0 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -43,4 +43,11 @@ To build the Docker image, you can use Docker Desktop for Windows or MacOS. ### Source Control To store the code that you'll be writing, you can create your very own GitHub account to showcase your project. -[GitHub](https://www.github.com) \ No newline at end of file +[GitHub](https://www.github.com) + +### kubectl and kubelogin +To authenticate and run commands against a Kubernetes cluster. + +[Install Tools | Kubernetes](https://kubernetes.io/docs/tasks/tools/) +[Azure/kubelogin: A Kubernetes credential (exec) plugin implementing azure authentication](https://github.com/Azure/kubelogin) +[How to switch to Azure kubelogin - Aptakube Blog](https://aptakube.com/blog/how-to-use-azure-kubelogin) From 3fa9845490cbae602890e5caa719c310fe2e9e50 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Fri, 15 Dec 2023 09:13:04 +0000 Subject: [PATCH 029/124] Add renovate config --- renovate.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..e657ca3 --- /dev/null +++ b/renovate.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ], + "includeForks": true +} \ No newline at end of file From dc3dfcdaa505f440c2c196ba9f5dd627301eb438 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 09:13:17 +0000 Subject: [PATCH 030/124] Update actions/checkout action to v4 --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 658fa4b..08b3c55 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,7 +23,7 @@ jobs: steps: # Checkout the repository to the GitHub Actions runner - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: 'Terraform Format' uses: hashicorp/terraform-github-actions@master From 3eda605ee19780273bd5447ee70ed7ebb8efba9a Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Mon, 25 Mar 2024 17:28:32 +0000 Subject: [PATCH 031/124] initial updates --- .github/workflows/main.yml | 118 +++++++++++------- Terraform-AZURE-Services-Creation/ACR/main.tf | 2 +- Terraform-AZURE-Services-Creation/AKS/aks.tf | 39 +++--- .../AKS/application_gateway.tf | 76 ----------- .../AKS/managed_identity.tf | 20 +++ Terraform-AZURE-Services-Creation/AKS/rbac.tf | 32 +++-- .../AKS/terraform.tfvars | 2 +- Terraform-AZURE-Services-Creation/VNET/alb.tf | 19 +++ Terraform-AZURE-Services-Creation/VNET/nsg.tf | 16 +++ .../VNET/terraform.tfvars | 6 + .../VNET/{main.tf => vnet.tf} | 12 +- kubernetes_manifest/deployment.yml | 29 ++--- .../scripts/1-alb-controller-install-k8s.sh | 14 +++ .../scripts/2-gateway-api-resources.sh | 44 +++++++ 14 files changed, 254 insertions(+), 175 deletions(-) delete mode 100644 Terraform-AZURE-Services-Creation/AKS/application_gateway.tf create mode 100644 Terraform-AZURE-Services-Creation/AKS/managed_identity.tf create mode 100644 Terraform-AZURE-Services-Creation/VNET/alb.tf create mode 100644 Terraform-AZURE-Services-Creation/VNET/nsg.tf rename Terraform-AZURE-Services-Creation/VNET/{main.tf => vnet.tf} (83%) create mode 100755 kubernetes_manifest/scripts/1-alb-controller-install-k8s.sh create mode 100755 kubernetes_manifest/scripts/2-gateway-api-resources.sh diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 08b3c55..da829b9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,62 +1,86 @@ name: CI on: + push: + branches: + - main + pull_request: + branches: + - main workflow_dispatch: jobs: - terraform: - name: 'Terraform' + terraform-fmt-check: + if: github.event_name == 'pull_request' + defaults: + run: + working-directory: "./Terraform-AZURE-Services-Creation/AKS" + name: Terraform + environment: production + runs-on: ubuntu-latest + permissions: + contents: write env: ARM_CLIENT_ID: ${{ secrets.AZURE_AD_CLIENT_ID }} ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} - TF_VERSION: 1.5.7 - runs-on: ubuntu-latest - environment: production - - # Use the Bash shell regardless whether the GitHub Actions runner is ubuntu-latest, macos-latest, or windows-latest - defaults: - run: - shell: bash - + tf_resource_group_name: "thomasthorntoncloud" + tf_storage_account_name: "thomasthorntontfstate" + tf_state_container: "devopsthehardwaygithub" + tf_state_key: "terraform.tfstate" steps: - # Checkout the repository to the GitHub Actions runner - - name: Checkout - uses: actions/checkout@v4 - - - name: 'Terraform Format' - uses: hashicorp/terraform-github-actions@master - with: - tf_actions_version: ${{ env.TF_VERSION }} - tf_actions_subcommand: 'fmt' - tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" - - - name: 'Terraform Init' - uses: hashicorp/terraform-github-actions@master - with: - tf_actions_version: ${{ env.TF_VERSION }} - tf_actions_subcommand: 'init' - tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" - - - name: 'Terraform Validate' - uses: hashicorp/terraform-github-actions@master + - name: Checkout Code + uses: actions/checkout@v2.5.0 + + - name: Setup Terraform + uses: hashicorp/setup-terraform@v3 with: - tf_actions_version: ${{ env.TF_VERSION }} - tf_actions_subcommand: 'validate' - tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" - - - name: 'Terraform Plan' - uses: hashicorp/terraform-github-actions@master + terraform_version: 1.7.4 + terraform_wrapper: true + + - name: Terraform Init + id: init + run: terraform init + env: + ARM_CLIENT_ID: ${{ secrets.AZURE_AD_CLIENT_ID }} + ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} + ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} + working-directory: "./Terraform-AZURE-Services-Creation/AKS" + + - name: Terraform Fmt + id: fmt + run: terraform fmt + working-directory: "./Terraform-AZURE-Services-Creation/AKS" + + - name: Auto Commit Changes + uses: stefanzweifel/git-auto-commit-action@v5 with: - tf_actions_version: ${{ env.TF_VERSION }} - tf_actions_subcommand: 'plan' - tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" - - - name: Terraform Apply + commit_message: "Terraform fmt" + file_pattern: "*.tf *.tfvars" + commit_user_name: "github-actions[bot]" + + - name: Terraform Plan + id: plan + run: terraform plan -no-color -input=false + env: + ARM_CLIENT_ID: ${{ secrets.AZURE_AD_CLIENT_ID }} + ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} + ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} + DEPLOYMENT_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + working-directory: "./Terraform-AZURE-Services-Creation/AKS" + continue-on-error: false + + - name: Terraform Apply + id: apply + run: terraform apply -auto-approve -input=false if: github.ref == 'refs/heads/main' - uses: hashicorp/terraform-github-actions@master - with: - tf_actions_version: ${{ env.TF_VERSION }} - tf_actions_subcommand: 'apply' - tf_actions_working_dir: "./Terraform-AZURE-Services-Creation/AKS" \ No newline at end of file + env: + ARM_CLIENT_ID: ${{ secrets.AZURE_AD_CLIENT_ID }} + ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} + ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} + working-directory: "./Terraform-AZURE-Services-Creation/AKS" + continue-on-error: false diff --git a/Terraform-AZURE-Services-Creation/ACR/main.tf b/Terraform-AZURE-Services-Creation/ACR/main.tf index 25b3c8c..3070dbd 100644 --- a/Terraform-AZURE-Services-Creation/ACR/main.tf +++ b/Terraform-AZURE-Services-Creation/ACR/main.tf @@ -21,7 +21,7 @@ resource "azurerm_resource_group" "acr_resource_group" { } resource "azurerm_container_registry" "acr" { - name = "${var.name}acr" + name = "${var.name}tamopsacracr" resource_group_name = azurerm_resource_group.acr_resource_group.name location = azurerm_resource_group.acr_resource_group.location sku = "Standard" diff --git a/Terraform-AZURE-Services-Creation/AKS/aks.tf b/Terraform-AZURE-Services-Creation/AKS/aks.tf index 2eefe5d..0e581e0 100644 --- a/Terraform-AZURE-Services-Creation/AKS/aks.tf +++ b/Terraform-AZURE-Services-Creation/AKS/aks.tf @@ -1,25 +1,31 @@ terraform { required_version = ">= 1.5.7" backend "azurerm" { - resource_group_name = "devopshardway-rg" - storage_account_name = "devopshardwaysa" - container_name = "tfstate" - key = "aks-terraform.tfstate" + # resource_group_name = "devopshardway-rg" + # storage_account_name = "devopshardwaysa" + # container_name = "tfstate" + # key = "aks-terraform.tfstate" + resource_group_name = "thomasthorntoncloud" + storage_account_name = "thomasthorntontfstate" + container_name = "devopsthehardwaygithub" + key = "terraform.tfstate" } } + provider "azurerm" { features {} } resource "azurerm_kubernetes_cluster" "k8s" { - name = "${var.name}aks" - location = var.location - resource_group_name = data.azurerm_resource_group.resource_group.name - dns_prefix = "${var.name}dns" - kubernetes_version = var.kubernetes_version - - node_resource_group = "${var.name}-node-rg" + name = "${var.name}aks" + location = var.location + resource_group_name = data.azurerm_resource_group.resource_group.name + dns_prefix = "${var.name}dns" + kubernetes_version = var.kubernetes_version + oidc_issuer_enabled = true + workload_identity_enabled = true + node_resource_group = "${var.name}-node-rg" linux_profile { admin_username = "ubuntu" @@ -46,11 +52,6 @@ resource "azurerm_kubernetes_cluster" "k8s" { log_analytics_workspace_id = data.azurerm_log_analytics_workspace.workspace.id } - - ingress_application_gateway { - gateway_id = azurerm_application_gateway.aks.id - } - network_profile { load_balancer_sku = "standard" network_plugin = "azure" @@ -64,8 +65,4 @@ resource "azurerm_kubernetes_cluster" "k8s" { tags = var.tags - depends_on = [ - azurerm_application_gateway.aks - ] - -} +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/application_gateway.tf b/Terraform-AZURE-Services-Creation/AKS/application_gateway.tf deleted file mode 100644 index 7f9d9a5..0000000 --- a/Terraform-AZURE-Services-Creation/AKS/application_gateway.tf +++ /dev/null @@ -1,76 +0,0 @@ -resource "azurerm_public_ip" "example" { - name = "appgateway-pip" - resource_group_name = data.azurerm_resource_group.resource_group.name - location = var.location - allocation_method = "Static" - sku = "Standard" -} - -# since these variables are re-used - a locals block makes this more maintainable -locals { - backend_address_pool_name = "aks-beap" - frontend_port_name = "aks-feport" - frontend_ip_configuration_name = "aks-feip" - http_setting_name = "aks-be-htst" - listener_name = "aks-httplstn" - request_routing_rule_name = "aks-rqrt" - redirect_configuration_name = "aks-rdrcfg" -} - -resource "azurerm_application_gateway" "aks" { - name = "aks-appgateway" - resource_group_name = data.azurerm_resource_group.resource_group.name - location = var.location - - sku { - name = "Standard_v2" - tier = "Standard_v2" - capacity = 2 - } - - gateway_ip_configuration { - name = "my-gateway-ip-configuration" - subnet_id = data.azurerm_subnet.appgwsubnet.id - } - - frontend_port { - name = local.frontend_port_name - port = 80 - } - - frontend_ip_configuration { - name = local.frontend_ip_configuration_name - public_ip_address_id = azurerm_public_ip.example.id - } - - backend_address_pool { - name = local.backend_address_pool_name - } - - backend_http_settings { - name = local.http_setting_name - cookie_based_affinity = "Disabled" - port = 80 - protocol = "Http" - request_timeout = 60 - } - - http_listener { - name = local.listener_name - frontend_ip_configuration_name = local.frontend_ip_configuration_name - frontend_port_name = local.frontend_port_name - protocol = "Http" - } - - request_routing_rule { - name = local.request_routing_rule_name - priority = 9 - rule_type = "Basic" - http_listener_name = local.listener_name - backend_address_pool_name = local.backend_address_pool_name - backend_http_settings_name = local.http_setting_name - } - - tags = var.tags - -} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/managed_identity.tf b/Terraform-AZURE-Services-Creation/AKS/managed_identity.tf new file mode 100644 index 0000000..04bf1a7 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/AKS/managed_identity.tf @@ -0,0 +1,20 @@ +resource "azurerm_user_assigned_identity" "alb_identity" { + location = var.location + resource_group_name = data.azurerm_resource_group.resource_group.name + name = "azure-alb-identity" +} + +resource "azurerm_federated_identity_credential" "alb_federated_identity" { + name = "azure-alb-identity" + resource_group_name = data.azurerm_resource_group.resource_group.name + audience = ["api://AzureADTokenExchange"] + issuer = azurerm_kubernetes_cluster.k8s.oidc_issuer_url + parent_id = azurerm_user_assigned_identity.alb_identity.id + subject = "system:serviceaccount:azure-alb-system:alb-controller-sa" + + depends_on = [ + azurerm_user_assigned_identity.alb_identity, + azurerm_kubernetes_cluster.k8s + + ] +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/rbac.tf b/Terraform-AZURE-Services-Creation/AKS/rbac.tf index 1841276..bbc1489 100644 --- a/Terraform-AZURE-Services-Creation/AKS/rbac.tf +++ b/Terraform-AZURE-Services-Creation/AKS/rbac.tf @@ -15,7 +15,7 @@ resource "azurerm_role_assignment" "node_infrastructure_update_scale_set" { } data "azurerm_container_registry" "acr" { - name = "${var.name}acr" + name = "${var.name}tamopsacr" resource_group_name = data.azurerm_resource_group.resource_group.name } @@ -28,14 +28,28 @@ resource "azurerm_role_assignment" "acr_pull" { ] } -# resource "azurerm_role_assignment" "appgateway_noderg_contributor" { -# scope = data.azurerm_resource_group.node_resource_group.id -# role_definition_name = "Contributor" -# principal_id = azurerm_kubernetes_cluster.k8s.ingress_application_gateway[0].ingress_application_gateway_identity[0].object_id -# } +#fixing for "The client '62119122-6287-4620-98b4-bf86535e2ece' with object id '62119122-6287-4620-98b4-bf86535e2ece' does not have authorization to perform action 'Microsoft.ServiceNetworking/register/action' over scope '/subscriptions/XXXXX' or the scope is invalid. (As part of App Gw for containers - maanged by ALB controller setup)" -resource "azurerm_role_assignment" "appgateway_aksrg_contributor" { +# Delegate AppGw for Containers Configuration Manager role to RG containing Application Gateway for Containers resource +# az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $resourceGroupId --role "fbc52c3f-28ad-4303-a892-8a056630b8f1" +resource "azurerm_role_assignment" "appgwcontainerfix2" { + principal_id = azurerm_user_assigned_identity.alb_identity.principal_id scope = data.azurerm_resource_group.resource_group.id - role_definition_name = "Contributor" - principal_id = azurerm_kubernetes_cluster.k8s.ingress_application_gateway[0].ingress_application_gateway_identity[0].object_id + role_definition_name = "AppGw for Containers Configuration Manager" + depends_on = [ + azurerm_kubernetes_cluster.k8s, + azurerm_user_assigned_identity.alb_identity + ] } + +# Delegate Network Contributor permission for join to association subnet +# az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $ALB_SUBNET_ID --role "4d97b98b-1d4f-4787-a291-c67834d212e7" +resource "azurerm_role_assignment" "appgwcontainerfix3" { + principal_id = azurerm_user_assigned_identity.alb_identity.principal_id + scope = data.azurerm_subnet.appgwsubnet.id + role_definition_name = "Network Contributor" + depends_on = [ + azurerm_kubernetes_cluster.k8s, + azurerm_user_assigned_identity.alb_identity + ] +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars index 0ba41d1..7e425dc 100644 --- a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars +++ b/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars @@ -1,7 +1,7 @@ name = "devopsthehardway" location = "uksouth" -kubernetes_version = "1.28.3" +kubernetes_version = "1.28.5" agent_count = 3 vm_size = "Standard_DS2_v2" ssh_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrt/GYkYpuQYRxM3lgjOr3Wqx8g5nQIbrg6Mr53wZGb35+ft+PibDMqxXZ7xq7fC3YuLnnO022IPgEjkF9fP03ZmfUeLjJJvw8YcutN9DD/2cx93BpKFPNUsqEB+za1iJ16kMsCojy35c1R64O+rw20D6iP96rmDAyIc5FR03y00eyAzQ8vo7/u9+VPwpdGEI7QCokZROcj6iNVz1V/1t6G4AEufPLokdj8J0gla/dN+tvnSLRQVBTDiD4jmVGImpWFqqKaH6R9SSXmRzj0uhvJUmSiZAZCb1caPEYgPEvNITuGQFdykPoY/4Z/3B+x/ipEQbWy8yL7bDFSXZTYhVKlPVyPbUtN5QFt7QtCtg84xDAZ6GA6AnONTtMxX2jvdzB9yh1ZsteNrOZ/Jo3ecuie573syQfG23Tu6qTqak8O7ZTOLY9iPx2ego3KvTWH/Q3lIvjnlpfCQtFtSgkNxjalMBk+NwwEgZHWRREOHwJmQIKVN0gSitN1KXobrqwxNk= tamops@Synth" diff --git a/Terraform-AZURE-Services-Creation/VNET/alb.tf b/Terraform-AZURE-Services-Creation/VNET/alb.tf new file mode 100644 index 0000000..c21fb83 --- /dev/null +++ b/Terraform-AZURE-Services-Creation/VNET/alb.tf @@ -0,0 +1,19 @@ +# Azure Application Load Balancer for Containers +resource "azurerm_application_load_balancer" "alb" { + name = "devopsthehardway-alb" + location = var.location + resource_group_name = data.azurerm_resource_group.resource_group.name + + tags = var.tags +} + +resource "azurerm_application_load_balancer_subnet_association" "alb" { + name = "alb-subnet-association" + application_load_balancer_id = azurerm_application_load_balancer.alb.id + subnet_id = azurerm_subnet.app_gwsubnet.id +} + +resource "azurerm_application_load_balancer_frontend" "example" { + name = "alb-frontend" + application_load_balancer_id = azurerm_application_load_balancer.alb.id +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/VNET/nsg.tf b/Terraform-AZURE-Services-Creation/VNET/nsg.tf new file mode 100644 index 0000000..5c7985d --- /dev/null +++ b/Terraform-AZURE-Services-Creation/VNET/nsg.tf @@ -0,0 +1,16 @@ +resource "azurerm_network_security_group" "nsg" { + name = "devopsthehardway-nsg" + location = var.location + resource_group_name = data.azurerm_resource_group.resource_group.name + tags = var.tags +} + +resource "azurerm_subnet_network_security_group_association" "aks_subnet" { + subnet_id = azurerm_subnet.aks_subnet.id + network_security_group_id = azurerm_network_security_group.nsg.id +} + +resource "azurerm_subnet_network_security_group_association" "app_gwsubnet" { + subnet_id = azurerm_subnet.app_gwsubnet.id + network_security_group_id = azurerm_network_security_group.nsg.id +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars b/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars index 859f4ce..3d621a3 100644 --- a/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars +++ b/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars @@ -5,3 +5,9 @@ aks_subnet_address_name = "aks" aks_subnet_address_prefix = "192.168.0.0/24" subnet_address_name = "appgw" subnet_address_prefix = "192.168.1.0/24" + +tags = { + "DeployedBy" = "Terraform" + "Environment" = "production" + "Project" = "devopsthehardway" +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/VNET/main.tf b/Terraform-AZURE-Services-Creation/VNET/vnet.tf similarity index 83% rename from Terraform-AZURE-Services-Creation/VNET/main.tf rename to Terraform-AZURE-Services-Creation/VNET/vnet.tf index 2f5875d..257138f 100644 --- a/Terraform-AZURE-Services-Creation/VNET/main.tf +++ b/Terraform-AZURE-Services-Creation/VNET/vnet.tf @@ -22,7 +22,7 @@ resource "azurerm_virtual_network" "virtual_network" { resource_group_name = data.azurerm_resource_group.resource_group.name address_space = [var.network_address_space] - tags = var.tags + tags = var.tags } @@ -38,4 +38,14 @@ resource "azurerm_subnet" "app_gwsubnet" { resource_group_name = data.azurerm_resource_group.resource_group.name virtual_network_name = azurerm_virtual_network.virtual_network.name address_prefixes = [var.subnet_address_prefix] + + delegation { + name = "delegation" + + service_delegation { + name = "Microsoft.ServiceNetworking/trafficControllers" + actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"] + + } + } } \ No newline at end of file diff --git a/kubernetes_manifest/deployment.yml b/kubernetes_manifest/deployment.yml index 163d6d9..7fc3923 100644 --- a/kubernetes_manifest/deployment.yml +++ b/kubernetes_manifest/deployment.yml @@ -1,7 +1,14 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: uber-ui +--- + apiVersion: v1 kind: Service metadata: name: uber-ui + namespace: uber-ui spec: selector: app: uber-ui @@ -16,6 +23,7 @@ apiVersion: apps/v1 kind: Deployment metadata: name: uber-ui + namespace: uber-ui spec: selector: matchLabels: @@ -28,24 +36,7 @@ spec: spec: containers: - name: uber-ui - image: devopsthehardwayacr.azurecr.io/uberapp:v1 + image: devopsthehardwaytamopsacr.azurecr.io/uberapp:v1 ports: - containerPort: 5000 ---- -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: uber-ui - annotations: - kubernetes.io/ingress.class: azure/application-gateway -spec: - rules: - - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: uber-ui - port: - number: 80 \ No newline at end of file +--- \ No newline at end of file diff --git a/kubernetes_manifest/scripts/1-alb-controller-install-k8s.sh b/kubernetes_manifest/scripts/1-alb-controller-install-k8s.sh new file mode 100755 index 0000000..46de95b --- /dev/null +++ b/kubernetes_manifest/scripts/1-alb-controller-install-k8s.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +RESOURCE_GROUP="devopsthehardway-rg" +AKS_NAME="devopsthehardwayaks" +helm_resource_namespace="azure-alb-system" +VNET_NAME="devopsthehardway-vnet" +ALB_SUBNET_NAME="appgw" +ALB_CONTROLLER_VERSION="1.0.0" + +#create namespace +kubectl create namespace $helm_resource_namespace + +# az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME +helm install alb-controller oci://mcr.microsoft.com/application-lb/charts/alb-controller --namespace $helm_resource_namespace --version $ALB_CONTROLLER_VERSION --set albController.namespace=$helm_resource_namespace --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv) diff --git a/kubernetes_manifest/scripts/2-gateway-api-resources.sh b/kubernetes_manifest/scripts/2-gateway-api-resources.sh new file mode 100755 index 0000000..ebdda12 --- /dev/null +++ b/kubernetes_manifest/scripts/2-gateway-api-resources.sh @@ -0,0 +1,44 @@ +RESOURCE_GROUP='devopsthehardway-rg' +ALB_RESOURCE_NAME='devopsthehardway-alb' +ALB_FRONTEND_NAME='alb-frontend' + +RESOURCE_ID=$(az network alb show --resource-group $RESOURCE_GROUP --name $ALB_RESOURCE_NAME --query id -o tsv) + +# Create a Gateway +kubectl apply -f - < Date: Mon, 25 Mar 2024 17:37:55 +0000 Subject: [PATCH 032/124] update deployment readme --- .../2-Create-Kubernetes-Manifest.md | 3 +-- kubernetes_manifest/3-Deploy-Uber-App.md | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md index 42544c0..5e8569f 100644 --- a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md +++ b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md @@ -9,10 +9,9 @@ Now it's time to set up the Kubernetes manifest, which will take the application The Kubernetes manifest will consist of two components: - The deployment - The service -- The Application Gateway Ingress The deployment is what gets the application running in Kubernetes The service is what exposes the Kubernetes application so you can, for example, reach the frontend from a load balancer hostname or IP. -The manifest `deployment.yml` can be found in the `kubernetes_manifest` directory. Ensure on line `31` to change the image URL to the one you have in your Azure account. \ No newline at end of file +The manifest `deployment.yml` can be found in the `kubernetes_manifest` directory. Ensure on line `39` to change the image URL to the one you have in your Azure account. \ No newline at end of file diff --git a/kubernetes_manifest/3-Deploy-Uber-App.md b/kubernetes_manifest/3-Deploy-Uber-App.md index f4b0593..87bfe01 100644 --- a/kubernetes_manifest/3-Deploy-Uber-App.md +++ b/kubernetes_manifest/3-Deploy-Uber-App.md @@ -3,18 +3,24 @@ Once the AKS cluster is built and the Kubernetes manifest is ready, you're now ready to deploy the Kubernetes manifest. 1. `cd` into the `kubernetes_manifest` directory -2. Run the following command: +2. Run the following commands: +- Install ALB Controller (You may need to changes these values: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/kubernetes_manifest/scripts/1-install-alb-controller.sh#L3-8) ): +`./scripts/1-install-alb-controller.sh` +- Install Gateway API resources (You may need to changes these values: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/kubernetes_manifest/scripts/2-gateway-api-resources.sh#L1-3) ): +`./scripts/2-install-gateway-api.sh` +- Deploy the Uber app: `kubectl create -f deployment.yml` + You'll see an output that specifies the service and deployment was created. 3. Run the following command to confirm that the deployment was successful: `kubectl get deployments` -4. Access uber-ui via Application Gateway -`kubectl get ingress` +4. Access uber-ui via Azure Application Gateway Controller for Containers -`NAME CLASS HOSTS ADDRESS PORTS AGE -uber-ui * 20.90.236.246 80 11s` +`fqdn=$(kubectl get gateway gateway-01 -n alb-devopsthehardway -o jsonpath='{.status.addresses[0].value}') +echo "http://$fqdn" +` -Access the uber-ui using the address mentioned above, `http://20.90.236.246` \ No newline at end of file +Access the uber-ui using the address mentioned above, example: `http://bye7fxhjesf7enf7.fz32.alb.azure.com` \ No newline at end of file From b85068bf54fa53d86b7735a650baed3d20d4e3bc Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Mon, 25 Mar 2024 17:53:02 +0000 Subject: [PATCH 033/124] Documentation updates --- README.md | 1 + .../1-Create-ACR.md | 2 +- .../2-Create-VNET.md | 20 ++++++++++++++++--- .../3-Create-Log-Analytics.md | 3 ++- .../4-Create-AKS-Cluster-IAM-Roles.md | 10 +++++++++- .../5-Run-CICD-For-AKS-Cluster.md | 8 ++++---- .../ACR/{main.tf => acr.tf} | 0 .../Log-Analytics/{main.tf => la.tf} | 0 prerequisites.md | 2 +- 9 files changed, 35 insertions(+), 11 deletions(-) rename Terraform-AZURE-Services-Creation/ACR/{main.tf => acr.tf} (100%) rename Terraform-AZURE-Services-Creation/Log-Analytics/{main.tf => la.tf} (100%) diff --git a/README.md b/README.md index 0ecdaae..36d68fa 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ You will be using the following technologies and platforms to set up a DevOps en - Store the Docker image in Azure ACR 6. Kubernetes - To run the Docker image that's created for the containerized Uber app. Kubernetes, in this case, AKS, will be used to orchestrate the container. + - Azure Application Gateway for Containers will be deployed so you can view the App from your Kubernetes cluster 7. CI/CD - Use GitHub Action to create an AKS cluster 8. Automated testing diff --git a/Terraform-AZURE-Services-Creation/1-Create-ACR.md b/Terraform-AZURE-Services-Creation/1-Create-ACR.md index 43cfaff..294b7ba 100644 --- a/Terraform-AZURE-Services-Creation/1-Create-ACR.md +++ b/Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -6,7 +6,7 @@ In this lab you will create a repository to store the Docker image that you crea 1. You can find the Terraform configuration for Azure Container Registry (ACR) [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/ACR). The Terraform configuration files are used to create a repository in Azure Container Registry (ACR). -The Terraform `main.tf` will do a few things: +The Terraform `acr.tf` will: - Use a Terraform backend to store the `.tfstate` in an Azure Storage Account - Use the `uksouth` region, but feel free to change that if you'd like - Use the `azurerm_resource_group` Terraform resource to create a new Resource Group. diff --git a/Terraform-AZURE-Services-Creation/2-Create-VNET.md b/Terraform-AZURE-Services-Creation/2-Create-VNET.md index 9811ffb..386d5c8 100644 --- a/Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -1,17 +1,31 @@ # Create an Azure VNET -In this lab you will create a Virtual Network (VNET) that will be used to deploy your AKS instance into +In this lab you will: +- Create a Virtual Network (VNET) that will be used to deploy your AKS instance into +- Create a Network Security Group (NSG) and assign to the relevant subnets +- Create an Azure Application Gateway for Containers and associate it with the VNET ## Create the Azure VNET Terraform Configuration 1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/VNET). The Terraform configuration files are used to create an Azure Vitual Network. -The Terraform `main.tf` will do a few things: +The Terraform `vnet.tf` will: +- Use a Terraform backend to store the `.tfstate` in an Azure Storage Account - Use the `azurerm_virtual_network` Terraform resource to create a VNET. - Use the `azurerm_subnet` Terraform resource to create relevant subnets. - Use the `uksouth` region, but feel free to change that if you'd like -2. Create the VNET by running the following: +The Terraform `nsg.tf` will: +- Use the `azurerm_network_security_group` Terraform resource to create a NSG. +- Use the `azurerm_subnet_network_security_group_association` Terraform resource to associate the NSG to the relevant subnets. + +The Terraform `alb.tf` will: +- Use the `azurerm_application_load_balancer` Terraform resource to create an Azure Application Gateway for Containers. +- Use the `azurerm_application_load_balancer_subnet_association` Terraform resource to associate the Azure Application Gateway with the VNET. +- Use the `azurerm_application_load_balancer_frontend` Terraform resource to create a frontend for the Azure Application Gateway. + + +2. Create the VNET, NSG & Azure Application Gateway for Containers by running the following: - `terraform init` - To initialize the working directory and pull down the provider - `terraform plan` - To go through a "check" and confirm the configurations are valid - `terraform apply` - To create the resource \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index 83473c4..8d0caf5 100644 --- a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -6,7 +6,8 @@ In this lab you will create a Log Analytics workspace that will be used to view 1. You can find the Terraform configuration for Log Analytics [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/Log-Analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. -The Terraform `main.tf` will do a few things: +The Terraform `la.tf` will: +- Use a Terraform backend to store the `.tfstate` in an Azure Storage Account - Use the `azurerm_log_analytics_workspace` Terraform resource to create a Log Analytics workspace. - Use the `azurerm_log_analytics_solution` Terraform resource to enable the Log Analytics solution ContainerInsights. - Use the `uksouth` region, but feel free to change that if you'd like diff --git a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index f4da8aa..8e9fe9b 100644 --- a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -8,11 +8,19 @@ In this lab you will create: 1. You can find the Terraform configuration for AKS [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/AKS). The Terraform configuration files are used to create an AKS cluster and IAM Role/Policy for AKS. -The Terraform `main.tf` will do a few things: +The Terraform `aks.tf` will: - Use the `azurerm_kubernetes_cluster` Terraform resource to AKS Cluster - Use the `azurerm_role_assignment` Terraform resource to create the two neccessary role assignments - Use the `uksouth` region, but feel free to change that if you'd like +The Terraform `managed_identity.tf` will: +- Use the `azurerm_user_assigned_identity` Terraform resource to create a user assigned identity as part of the Azure Application Gateway for Containers setup +- Use the `azurerm_federated_identity_credential` Terraform resource to create a federated identity credential as part of the Azure Application Gateway for Containers setup + +The Terraform `rbac.tf` will: +- Use the `azurerm_role_assignment` Terraform resource to create the necessary role assignments for the AKS cluster +- Use the `azurerm_role_definition` Terraform resource to create the necessary role definitions for the AKS cluster + 2. In line 8 of `terraform.tfvars` replace the actual Azure AD Group ID you noted down [earlier](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/2-Create-Azure-AD-Group-AKS-Admins.md) 3. Create the bucket by running the following: diff --git a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index a79dae3..f539633 100644 --- a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -33,16 +33,16 @@ Now that the secrets are created, it's time to create the pipeline. 1. Under the GitHub repository, click on the **Actions** tab 2. You will see a workflow already called `CI` -3. Select `CI` workflow and then select `Run workflow` `from` main branch +3. Select `CI` workflow and then select `Run workflow` `from` main branch (Also note, the pipeline is configured to run also during a Pull Request and or a Push to the main branch) The pipeline does a few things: -- On line 4, you'll see `workflow_dispatch`, which means the pipeline won't automatically run unless you kick it off. You can of course change this to have the pipeline automatically run if you, for example, push code to the `dev` or `main` branch. +- On line 10, you'll see `workflow_dispatch`, which means the pipeline won't automatically run unless you kick it off. You can of course change this to have the pipeline automatically run if you, for example, push code to the `dev` or `main` branch. - The code is checked-out - Authentication occurs to Azure - Terraform is set up -- Terraform format occurs +- Terraform format occurs & formats incorrect terraform, then pushes back into the branch - Terraform init occurs - Terraform plan occurs - Terraform apply occurs -4. Run the pipeline and watch as the pipeline automatically creates the AKS cluster +4. Run the pipeline and watch as the pipeline automatically create the AKS cluster diff --git a/Terraform-AZURE-Services-Creation/ACR/main.tf b/Terraform-AZURE-Services-Creation/ACR/acr.tf similarity index 100% rename from Terraform-AZURE-Services-Creation/ACR/main.tf rename to Terraform-AZURE-Services-Creation/ACR/acr.tf diff --git a/Terraform-AZURE-Services-Creation/Log-Analytics/main.tf b/Terraform-AZURE-Services-Creation/Log-Analytics/la.tf similarity index 100% rename from Terraform-AZURE-Services-Creation/Log-Analytics/main.tf rename to Terraform-AZURE-Services-Creation/Log-Analytics/la.tf diff --git a/prerequisites.md b/prerequisites.md index 05ccbe0..d581419 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -33,7 +33,7 @@ Because code will be written for *DevOps The Hard Way*, you will need a code edi ### Terraform -[Terraform Download](https://www.terraform.io/downloads.html) - Tested on version 1.6.6 +[Terraform Download](https://www.terraform.io/downloads.html) - Tested on version 1.7.5 ### Docker To build the Docker image, you can use Docker Desktop for Windows or MacOS. From 0b1125b2a023f313af27cd745ea5356ef8ccdc5e Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Mon, 25 Mar 2024 18:08:47 +0000 Subject: [PATCH 034/124] document updates --- Azure/1-Configure-Terraform-Remote-Storage.md | 8 ++-- Docker/1-Create-Docker-Image.md | 10 ++--- Docker/2-Push Image To ACR.md | 4 ++ README.md | 43 +++++++++---------- .../1-Create-ACR.md | 2 + .../2-Create-VNET.md | 2 + .../3-Create-Log-Analytics.md | 2 + .../4-Create-AKS-Cluster-IAM-Roles.md | 2 + .../5-Run-CICD-For-AKS-Cluster.md | 2 + kubernetes_manifest/1-Connect-To-ACR.md | 12 +++--- .../2-Create-Kubernetes-Manifest.md | 18 +++----- kubernetes_manifest/3-Deploy-Uber-App.md | 9 ++-- 12 files changed, 62 insertions(+), 52 deletions(-) diff --git a/Azure/1-Configure-Terraform-Remote-Storage.md b/Azure/1-Configure-Terraform-Remote-Storage.md index aa0ad65..fa3657d 100644 --- a/Azure/1-Configure-Terraform-Remote-Storage.md +++ b/Azure/1-Configure-Terraform-Remote-Storage.md @@ -5,7 +5,7 @@ The purpose of this lab is to create the location that will store the remote Ter ## Create Blob Storage location for Terraform State file 1. Edit the [variables](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/create-terraform-storage.sh#L3-L4) 2. Run the script `./create-terraform-storage.sh` -3. The script will create -- Azure Resource Group -- Azure Storage Account -- Azure Blob storage location within Azure Storage Account \ No newline at end of file +3. The script will: + - Create an Azure Resource Group + - Set up an Azure Storage Account + - Establish an Azure Blob storage location within the Azure Storage Account diff --git a/Docker/1-Create-Docker-Image.md b/Docker/1-Create-Docker-Image.md index 07109de..7922b6b 100644 --- a/Docker/1-Create-Docker-Image.md +++ b/Docker/1-Create-Docker-Image.md @@ -34,11 +34,11 @@ Now that the Docker image is created, you can run the container locally just to 1. To run the Docker container, run the following command: `docker run -tid uberapp` -- `t` stands for a TTY console -- `i` stands for interactive -- `d` stands for detach so your terminal isn't directly connected to the Docker container +- `t` enables a TTY console. +- `i` enables an interactive session. +- `d` detaches the terminal from the Docker container. -2. To confirm the Docker container is running, run the following command: +2. Confirm that the Docker container is running by running the following command: `docker container ls` -You should now see the container running. +You should now see the container running successfully. \ No newline at end of file diff --git a/Docker/2-Push Image To ACR.md b/Docker/2-Push Image To ACR.md index 005a752..9164c20 100644 --- a/Docker/2-Push Image To ACR.md +++ b/Docker/2-Push Image To ACR.md @@ -2,6 +2,9 @@ The ACR repo will be where you store the Docker image that you created on your local computer in step 1. +Ensure to replace `devopsthehardwayacr` with your ACR name and `v1` with the appropriate version tag if needed. + + ## Log Into The ECR Repository 1. Log in to ACR with Azure CLI `az acr login --name devopsthehardwayacr` @@ -14,3 +17,4 @@ The ACR repo will be where you store the Docker image that you created on your l ## Push The Docker Image To ACR 1. Push the Docker image to ACR `docker push devopsthehardwayacr.azurecr.io/uberapp:v1` + diff --git a/README.md b/README.md index 36d68fa..0688d99 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # DevOps-The-Hard-Way-Azure -This tutorial contains a full, real-world solution for setting up an environment that is using DevOps technologies and practices for deploying apps and cloud services/cloud infrastructure to Azure. +Welcome to the DevOps-The-Hard-Way-Azure tutorial! This comprehensive guide provides a real-world solution for implementing DevOps practices and technologies to deploy applications and cloud services/infrastructure on Microsoft Azure. The repository contains free labs, documentation, diagrams, and docs for setting up an entire workflow and DevOps environment from a real-world perspective in Azure. @@ -9,8 +9,9 @@ The scenario that you're currently facing is you work in an organization that is You're brought in to the company and team to make things more modern so the organization can not only succeed, but stay ahead of their competition. Management now understands the needs and complexity that comes with staying ahead of their competition and they know that they need to. Otherwise, the organization will fall... + ## DevOps Solution -The solution is to deploy the Uber API for the sign-up page. Currently this solution is sitting on a bunch of baremetal, but it's time to sprinkle a little DevOps on it. +The solution is to deploy the Uber API for the sign-up page. Currently this solution is sitting on a bunch of baremetal, but it's time to sprinkle a little DevOps on it. Although we won't be coding the application itself, we'll cover the deployment process using DevOps tools and methodologies. ![](images/uber.png) @@ -21,27 +22,16 @@ As a DevOps Engineer, you're more or less (most likely) not writing the app, but https://github.com/AdminTurnedDevOps/Python-Sample-Application ## Technology Details -You will be using the following technologies and platforms to set up a DevOps environment. - -1. Azure - - Azure will be used to host the application, cloud infrastructure, and any other services we may need to ensure the Uber app is deployed properly. -2. GitHub - - To store the application and infrastructure/automation code -3. Python - - Python will be used for the Uber app (it is written in Python) and some automation efforts that aren't in Terraform. -4. Terraform - - Create an Azure ACR repository with Terraform - - Create an AKS cluster -5. Docker - - Create a Docker image - - Store the Docker image in Azure ACR -6. Kubernetes - - To run the Docker image that's created for the containerized Uber app. Kubernetes, in this case, AKS, will be used to orchestrate the container. - - Azure Application Gateway for Containers will be deployed so you can view the App from your Kubernetes cluster -7. CI/CD - - Use GitHub Action to create an AKS cluster -8. Automated testing - - Testing Terraform code with Checkov +Get ready to utilise a range of cutting-edge technologies and platforms to establish your DevOps environment: + +1. Azure: Hosts the application, cloud infrastructure, and necessary services. +2. GitHub: Stores application and infrastructure/automation code. +3. Python: Powers the Uber application and some automation tasks. +4. Terraform: Orchestrates Azure resources, including Azure Container Registry (ACR) and Azure Kubernetes Service (AKS). +5. Docker: Creates containerized images for the Uber app and stores them in Azure ACR. +6. Kubernetes: Orchestrates Docker containers, with AKS managing our Kubernetes clusters. +7. CI/CD: Automates deployment using GitHub Actions. +8. Automated Testing: Ensures Terraform code integrity using Checkov. ## Labs 1. [Prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/prerequisites.md) @@ -68,3 +58,10 @@ In this scenario, the Terraform State file will be stored in remote state locati - [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) 6. CICD - The purpose of this section is to automatically create an AKS cluster with CICD using GitHub Actions - [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md) + +## Conclusion +By following this tutorial, you'll not only deploy an example app on Azure but also gain valuable insights into modern DevOps practices and tools. + +Let's embark on this journey to transform your organization into a lean, agile, and competitive force in the digital landscape. Happy deploying! 🚀🔧 + + diff --git a/Terraform-AZURE-Services-Creation/1-Create-ACR.md b/Terraform-AZURE-Services-Creation/1-Create-ACR.md index 294b7ba..f5f89eb 100644 --- a/Terraform-AZURE-Services-Creation/1-Create-ACR.md +++ b/Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -1,5 +1,7 @@ # Create an Azure Container Registry Repository +Before proceeding, ensure that the values in the terraform.tfvars file are accurate for your environment. You may need to customize these values to match your specific configuration. + In this lab you will create a repository to store the Docker image that you created for the Uber app. ## Create the ACR Terraform Configuration diff --git a/Terraform-AZURE-Services-Creation/2-Create-VNET.md b/Terraform-AZURE-Services-Creation/2-Create-VNET.md index 386d5c8..2ee26db 100644 --- a/Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -1,5 +1,7 @@ # Create an Azure VNET +Before proceeding, ensure that the values in the terraform.tfvars file are accurate for your environment. You may need to customize these values to match your specific configuration. + In this lab you will: - Create a Virtual Network (VNET) that will be used to deploy your AKS instance into - Create a Network Security Group (NSG) and assign to the relevant subnets diff --git a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index 8d0caf5..b7c0f1f 100644 --- a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -1,5 +1,7 @@ # Create an Azure Log Analytics Workspace +Before proceeding, ensure that the values in the terraform.tfvars file are accurate for your environment. You may need to customize these values to match your specific configuration. + In this lab you will create a Log Analytics workspace that will be used to view container insights of your AKS Cluster ## Create the Log Analytics Workspace Terraform Configuration diff --git a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index 8e9fe9b..53f5ffc 100644 --- a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -1,5 +1,7 @@ # Create An AKS Cluster and IAM Roles +Before proceeding, ensure that the values in the terraform.tfvars file are accurate for your environment. You may need to customize these values to match your specific configuration. + In this lab you will create: - The AKS cluster - The appropriate IAM roles for AKS diff --git a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index f539633..27fb6b3 100644 --- a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -1,5 +1,7 @@ # Create AKS Cluster With CICD +Before proceeding, ensure that the values in the terraform.tfvars file are accurate for your environment. You may need to customize these values to match your specific configuration. + In this lab, you'll learn how to create an AKS cluster using GitHub Actions. The code can be found [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/AKS) diff --git a/kubernetes_manifest/1-Connect-To-ACR.md b/kubernetes_manifest/1-Connect-To-ACR.md index f5d7209..e204cd5 100644 --- a/kubernetes_manifest/1-Connect-To-ACR.md +++ b/kubernetes_manifest/1-Connect-To-ACR.md @@ -1,13 +1,15 @@ -# Connecting To Elastic Kubernetes Service (AKS) +# Connecting To Azure Kubernetes Service (AKS) -When you're deploying locally, without any CI/CD to AKS, you'll need to authenticate from your local terminal. +When deploying locally to Azure Kubernetes Service (AKS) without employing any CI/CD pipelines, you'll need to authenticate from your local terminal. -Once you authenticate to AKS from your local terminal, a `kubeconfig` gets stored on your computer. The `kubeconfig` has all of the connection information and authentication needs to connect to AKS. +Upon successful authentication to AKS from your local terminal, a kubeconfig file is generated and stored on your computer. This kubeconfig file contains all the necessary connection information and authentication details required to access AKS. ## Connecting To AKS 1. Run the following command to connect to AKS: -`az aks get-credentials --resource-group devopsthehardway-rg --name devopsthehardwayaks` +`az aks get-credentials --resource-group devopsthehardway-rg --name devopsthehardwayaks --overwrite-existing` 2. Once connected, you should be able to run commands like the following to confirm you're connected: -`kubectl get nodes` \ No newline at end of file +`kubectl get nodes` + +Running this command should return information about the nodes in your AKS cluster, confirming your successful connection. \ No newline at end of file diff --git a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md index 5e8569f..01a2359 100644 --- a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md +++ b/kubernetes_manifest/2-Create-Kubernetes-Manifest.md @@ -1,17 +1,13 @@ # Create The Kubernetes Manifest -At this point you have successfully created a Docker image from the Uber app and stored it in ACR. +Once you've successfully created a Docker image from the Uber app and stored it in Azure Container Registry (ACR), the next step is to configure the Kubernetes manifest for deploying the application to Azure Kubernetes Service (AKS). -Now it's time to set up the Kubernetes manifest, which will take the application and deploy it to AKS. +## Understanding the Manifest -## The Manifest +The Kubernetes manifest comprises three key components: -The Kubernetes manifest will consist of two components: -- The deployment -- The service +- The Deployment: This component manages the application's deployment within Kubernetes. +- The Service: Responsible for exposing the Kubernetes application, allowing access from external sources such as load balancer hostnames or IPs. +- Namespace: A mechanism for organizing and isolating resources within a Kubernetes cluster, enabling resource scoping. -The deployment is what gets the application running in Kubernetes - -The service is what exposes the Kubernetes application so you can, for example, reach the frontend from a load balancer hostname or IP. - -The manifest `deployment.yml` can be found in the `kubernetes_manifest` directory. Ensure on line `39` to change the image URL to the one you have in your Azure account. \ No newline at end of file +The manifest `deployment.yml` can be found in the `kubernetes_manifest` directory. Ensure to update the image URL on line 39 to match the image stored in your Azure account before applying the manifest. \ No newline at end of file diff --git a/kubernetes_manifest/3-Deploy-Uber-App.md b/kubernetes_manifest/3-Deploy-Uber-App.md index 87bfe01..b2d6ebc 100644 --- a/kubernetes_manifest/3-Deploy-Uber-App.md +++ b/kubernetes_manifest/3-Deploy-Uber-App.md @@ -1,12 +1,12 @@ # Deploy The Uber App -Once the AKS cluster is built and the Kubernetes manifest is ready, you're now ready to deploy the Kubernetes manifest. +Once the AKS cluster is provisioned and the Kubernetes manifest is prepared, it's time to deploy the Uber app. 1. `cd` into the `kubernetes_manifest` directory 2. Run the following commands: -- Install ALB Controller (You may need to changes these values: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/kubernetes_manifest/scripts/1-install-alb-controller.sh#L3-8) ): +- Install ALB Controller (YModify values if necessary: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/kubernetes_manifest/scripts/1-install-alb-controller.sh#L3-8) ): `./scripts/1-install-alb-controller.sh` -- Install Gateway API resources (You may need to changes these values: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/kubernetes_manifest/scripts/2-gateway-api-resources.sh#L1-3) ): +- Install Gateway API resources (Modify values if necessary: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/kubernetes_manifest/scripts/2-gateway-api-resources.sh#L1-3) ): `./scripts/2-install-gateway-api.sh` - Deploy the Uber app: `kubectl create -f deployment.yml` @@ -23,4 +23,5 @@ You'll see an output that specifies the service and deployment was created. echo "http://$fqdn" ` -Access the uber-ui using the address mentioned above, example: `http://bye7fxhjesf7enf7.fz32.alb.azure.com` \ No newline at end of file +Access the uber-ui using the address mentioned above, example: +`http://bye7fxhjesf7enf7.fz32.alb.azure.com` \ No newline at end of file From f1ec2a28d2521e93a1847c46dd5034d4b5692789 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Mon, 25 Mar 2024 18:18:13 +0000 Subject: [PATCH 035/124] Update checkout --- .github/workflows/main.yml | 2 +- prerequisites.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index da829b9..12c5db1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -31,7 +31,7 @@ jobs: tf_state_key: "terraform.tfstate" steps: - name: Checkout Code - uses: actions/checkout@v2.5.0 + uses: actions/checkout@v4 - name: Setup Terraform uses: hashicorp/setup-terraform@v3 diff --git a/prerequisites.md b/prerequisites.md index d581419..a1a2b8e 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -33,7 +33,7 @@ Because code will be written for *DevOps The Hard Way*, you will need a code edi ### Terraform -[Terraform Download](https://www.terraform.io/downloads.html) - Tested on version 1.7.5 +[Terraform Download](https://www.terraform.io/downloads.html) - Tested on version 1.7.4 ### Docker To build the Docker image, you can use Docker Desktop for Windows or MacOS. From 7b6cf41584422687d74c30801fd480e527cbb8be Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 07:18:58 +0100 Subject: [PATCH 036/124] Update lab1 --- .../1-Configure-Terraform-Remote-Storage.md | 0 .../2-Create-Azure-AD-Group-AKS-Admins.md | 0 1-Azure/create-azure-ad-group.sh | 44 +++++++++++++++++++ 1-Azure/create-terraform-storage.sh | 27 ++++++++++++ Azure/create-azure-ad-group.sh | 14 ------ Azure/create-terraform-storage.sh | 13 ------ README.md | 4 +- prerequisites.md | 2 +- 8 files changed, 74 insertions(+), 30 deletions(-) rename {Azure => 1-Azure}/1-Configure-Terraform-Remote-Storage.md (100%) rename {Azure => 1-Azure}/2-Create-Azure-AD-Group-AKS-Admins.md (100%) create mode 100755 1-Azure/create-azure-ad-group.sh create mode 100755 1-Azure/create-terraform-storage.sh delete mode 100644 Azure/create-azure-ad-group.sh delete mode 100755 Azure/create-terraform-storage.sh diff --git a/Azure/1-Configure-Terraform-Remote-Storage.md b/1-Azure/1-Configure-Terraform-Remote-Storage.md similarity index 100% rename from Azure/1-Configure-Terraform-Remote-Storage.md rename to 1-Azure/1-Configure-Terraform-Remote-Storage.md diff --git a/Azure/2-Create-Azure-AD-Group-AKS-Admins.md b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md similarity index 100% rename from Azure/2-Create-Azure-AD-Group-AKS-Admins.md rename to 1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md diff --git a/1-Azure/create-azure-ad-group.sh b/1-Azure/create-azure-ad-group.sh new file mode 100755 index 0000000..c89121e --- /dev/null +++ b/1-Azure/create-azure-ad-group.sh @@ -0,0 +1,44 @@ +# #!/bin/sh + +# AZURE_AD_GROUP_NAME="devopsthehardway-aks-group" +# CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id -o tsv) + +# # Create Azure AD Group +# az ad group create --display-name $AZURE_AD_GROUP_NAME --mail-nickname $AZURE_AD_GROUP_NAME + +# # Add Current az login user to Azure AD Group +# az ad group member add --group $AZURE_AD_GROUP_NAME --member-id $CURRENT_USER_OBJECTID + +# AZURE_GROUP_ID=$(az ad group show --group "devopsthehardway-aks-group" --query id -o tsv) + +# echo "AZURE AD GROUP ID IS: $AZURE_GROUP_ID" + + +#!/bin/sh + +AZURE_AD_GROUP_NAME="devopsthehardway-aks-group" +CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id -o tsv) + +# Check if Azure AD Group exists +GROUP_EXISTS=$(az ad group list --filter "displayName eq '$AZURE_AD_GROUP_NAME'" --query "[].displayName" -o tsv) + +if [ "$GROUP_EXISTS" = "$AZURE_AD_GROUP_NAME" ]; then + echo "Azure AD group $AZURE_AD_GROUP_NAME already exists." +else + # Create Azure AD Group + az ad group create --display-name $AZURE_AD_GROUP_NAME --mail-nickname $AZURE_AD_GROUP_NAME +fi + +# Check if Current User is already a member of the Azure AD Group +USER_IN_GROUP=$(az ad group member check --group $AZURE_AD_GROUP_NAME --member-id $CURRENT_USER_OBJECTID --query value -o tsv) + +if [ "$USER_IN_GROUP" = "true" ]; then + echo "Current user is already a member of the Azure AD group $AZURE_AD_GROUP_NAME." +else + # Add Current az login user to Azure AD Group + az ad group member add --group $AZURE_AD_GROUP_NAME --member-id $CURRENT_USER_OBJECTID +fi + +AZURE_GROUP_ID=$(az ad group show --group $AZURE_AD_GROUP_NAME --query id -o tsv) + +echo "AZURE AD GROUP ID IS: $AZURE_GROUP_ID" \ No newline at end of file diff --git a/1-Azure/create-terraform-storage.sh b/1-Azure/create-terraform-storage.sh new file mode 100755 index 0000000..a41eebd --- /dev/null +++ b/1-Azure/create-terraform-storage.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +RESOURCE_GROUP_NAME="devopshardway-rg" +STORAGE_ACCOUNT_NAME="devopshardwaysa" + +# Check if Resource Group exists +RESOURCE_GROUP_EXISTS=$(az group exists --name $RESOURCE_GROUP_NAME) + +if [ "$RESOURCE_GROUP_EXISTS" = "true" ]; then + echo "Resource group $RESOURCE_GROUP_NAME already exists." +else + # Create Resource Group + az group create -l uksouth -n $RESOURCE_GROUP_NAME +fi + +# Check if Storage Account exists +STORAGE_ACCOUNT_EXISTS=$(az storage account check-name --name $STORAGE_ACCOUNT_NAME --query 'nameAvailable' --output tsv) + +if [ "$STORAGE_ACCOUNT_EXISTS" = "false" ]; then + echo "Storage account $STORAGE_ACCOUNT_NAME is already created in resource group $RESOURCE_GROUP_NAME." +else + # Create Storage Account + az storage account create -n $STORAGE_ACCOUNT_NAME -g $RESOURCE_GROUP_NAME -l uksouth --sku Standard_LRS + + # Create Storage Account blob + az storage container create --name tfstate --account-name $STORAGE_ACCOUNT_NAME +fi \ No newline at end of file diff --git a/Azure/create-azure-ad-group.sh b/Azure/create-azure-ad-group.sh deleted file mode 100644 index c01a81e..0000000 --- a/Azure/create-azure-ad-group.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -AZURE_AD_GROUP_NAME="devopsthehardway-aks-group" -CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id -o tsv) - -# Create Azure AD Group -az ad group create --display-name $AZURE_AD_GROUP_NAME --mail-nickname $AZURE_AD_GROUP_NAME - -# Add Current az login user to Azure AD Group -az ad group member add --group $AZURE_AD_GROUP_NAME --member-id $CURRENT_USER_OBJECTID - -AZURE_GROUP_ID=$(az ad group show --group "devopsthehardway-aks-group" --query id -o tsv) - -echo "AZURE AD GROUP ID IS: $AZURE_GROUP_ID" \ No newline at end of file diff --git a/Azure/create-terraform-storage.sh b/Azure/create-terraform-storage.sh deleted file mode 100755 index 5c57210..0000000 --- a/Azure/create-terraform-storage.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -RESOURCE_GROUP_NAME="devopshardway-rg" -STORAGE_ACCOUNT_NAME="devopshardwaysa" - -# Create Resource Group -az group create -l uksouth -n $RESOURCE_GROUP_NAME - -# Create Storage Account -az storage account create -n $STORAGE_ACCOUNT_NAME -g $RESOURCE_GROUP_NAME -l uksouth --sku Standard_LRS - -# Create Storage Account blob -az storage container create --name tfstate --account-name $STORAGE_ACCOUNT_NAME \ No newline at end of file diff --git a/README.md b/README.md index 0688d99..3a46c39 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,8 @@ Get ready to utilise a range of cutting-edge technologies and platforms to estab ## Labs 1. [Prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/prerequisites.md) -2. [Create Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/1-Configure-Terraform-Remote-Storage.md) - When deploying Terraform there is a requirement that it must store a state file; this file is used by Terraform to map Azure Resources to your configuration that you want to deploy, keeps track of meta data and can also assist with improving performance for larger Azure Resource deployments. -3. [Create Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/2-Create-Azure-AD-Group-AKS-Admins.md) - The Azure AD Group will be used for AKS cluster access +2. [Create Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/1-Configure-Terraform-Remote-Storage.md) - When deploying Terraform there is a requirement that it must store a state file; this file is used by Terraform to map Azure Resources to your configuration that you want to deploy, keeps track of meta data and can also assist with improving performance for larger Azure Resource deployments. +3. [Create Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md) - The Azure AD Group will be used for AKS cluster access In this scenario, the Terraform State file will be stored in remote state location of an Azure Storage Account. diff --git a/prerequisites.md b/prerequisites.md index a1a2b8e..30a339a 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -33,7 +33,7 @@ Because code will be written for *DevOps The Hard Way*, you will need a code edi ### Terraform -[Terraform Download](https://www.terraform.io/downloads.html) - Tested on version 1.7.4 +[Terraform Download](https://www.terraform.io/downloads.html) - This on version 1.9.6 ### Docker To build the Docker image, you can use Docker Desktop for Windows or MacOS. From 054426b7dfb5b195e037659affc75225c42f764e Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 08:05:46 +0100 Subject: [PATCH 037/124] Updates to Terraform Azure --- .github/workflows/main.yml | 10 ++++----- .../1-Create-ACR.md | 4 ++-- .../1-acr}/acr.tf | 16 +------------- .../1-acr/providers.tf | 22 +++++++++++++++++++ .../1-acr}/terraform.tfvars | 0 .../1-acr}/variables.tf | 0 .../2-Create-VNET.md | 4 ++-- .../2-vnet}/alb.tf | 0 .../2-vnet/data.tf | 3 +++ .../2-vnet}/nsg.tf | 0 .../2-vnet/providers.tf | 22 +++++++++++++++++++ .../2-vnet}/terraform.tfvars | 0 .../2-vnet}/variables.tf | 0 .../2-vnet}/vnet.tf | 18 --------------- .../3-Create-Log-Analytics.md | 4 ++-- .../3-log-analytics/data.tf | 3 +++ .../3-log-analytics}/la.tf | 20 +---------------- .../3-log-analytics/providers.tf | 22 +++++++++++++++++++ .../3-log-analytics/terraform.tfvars | 8 +++++++ .../3-log-analytics}/variables.tf | 0 .../4-Create-AKS-Cluster-IAM-Roles.md | 2 +- .../4-aks}/aks.tf | 20 ----------------- .../4-aks}/data.tf | 14 +++++++++++- .../4-aks}/managed_identity.tf | 0 .../4-aks/providers.tf | 22 +++++++++++++++++++ .../4-aks}/rbac.tf | 12 ---------- .../4-aks}/terraform.tfvars | 0 .../4-aks}/variables.tf | 0 .../5-Run-CICD-For-AKS-Cluster.md | 5 ++--- .../Log-Analytics/terraform.tfvars | 2 -- 30 files changed, 131 insertions(+), 102 deletions(-) rename {Terraform-AZURE-Services-Creation => 2-Terraform-AZURE-Services-Creation}/1-Create-ACR.md (64%) rename {Terraform-AZURE-Services-Creation/ACR => 2-Terraform-AZURE-Services-Creation/1-acr}/acr.tf (54%) create mode 100644 2-Terraform-AZURE-Services-Creation/1-acr/providers.tf rename {Terraform-AZURE-Services-Creation/ACR => 2-Terraform-AZURE-Services-Creation/1-acr}/terraform.tfvars (100%) rename {Terraform-AZURE-Services-Creation/ACR => 2-Terraform-AZURE-Services-Creation/1-acr}/variables.tf (100%) rename {Terraform-AZURE-Services-Creation => 2-Terraform-AZURE-Services-Creation}/2-Create-VNET.md (79%) rename {Terraform-AZURE-Services-Creation/VNET => 2-Terraform-AZURE-Services-Creation/2-vnet}/alb.tf (100%) create mode 100644 2-Terraform-AZURE-Services-Creation/2-vnet/data.tf rename {Terraform-AZURE-Services-Creation/VNET => 2-Terraform-AZURE-Services-Creation/2-vnet}/nsg.tf (100%) create mode 100644 2-Terraform-AZURE-Services-Creation/2-vnet/providers.tf rename {Terraform-AZURE-Services-Creation/VNET => 2-Terraform-AZURE-Services-Creation/2-vnet}/terraform.tfvars (100%) rename {Terraform-AZURE-Services-Creation/VNET => 2-Terraform-AZURE-Services-Creation/2-vnet}/variables.tf (100%) rename {Terraform-AZURE-Services-Creation/VNET => 2-Terraform-AZURE-Services-Creation/2-vnet}/vnet.tf (74%) rename {Terraform-AZURE-Services-Creation => 2-Terraform-AZURE-Services-Creation}/3-Create-Log-Analytics.md (69%) create mode 100644 2-Terraform-AZURE-Services-Creation/3-log-analytics/data.tf rename {Terraform-AZURE-Services-Creation/Log-Analytics => 2-Terraform-AZURE-Services-Creation/3-log-analytics}/la.tf (70%) create mode 100644 2-Terraform-AZURE-Services-Creation/3-log-analytics/providers.tf create mode 100644 2-Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars rename {Terraform-AZURE-Services-Creation/Log-Analytics => 2-Terraform-AZURE-Services-Creation/3-log-analytics}/variables.tf (100%) rename {Terraform-AZURE-Services-Creation => 2-Terraform-AZURE-Services-Creation}/4-Create-AKS-Cluster-IAM-Roles.md (85%) rename {Terraform-AZURE-Services-Creation/AKS => 2-Terraform-AZURE-Services-Creation/4-aks}/aks.tf (70%) rename {Terraform-AZURE-Services-Creation/AKS => 2-Terraform-AZURE-Services-Creation/4-aks}/data.tf (64%) rename {Terraform-AZURE-Services-Creation/AKS => 2-Terraform-AZURE-Services-Creation/4-aks}/managed_identity.tf (100%) create mode 100644 2-Terraform-AZURE-Services-Creation/4-aks/providers.tf rename {Terraform-AZURE-Services-Creation/AKS => 2-Terraform-AZURE-Services-Creation/4-aks}/rbac.tf (87%) rename {Terraform-AZURE-Services-Creation/AKS => 2-Terraform-AZURE-Services-Creation/4-aks}/terraform.tfvars (100%) rename {Terraform-AZURE-Services-Creation/AKS => 2-Terraform-AZURE-Services-Creation/4-aks}/variables.tf (100%) rename {Terraform-AZURE-Services-Creation => 2-Terraform-AZURE-Services-Creation}/5-Run-CICD-For-AKS-Cluster.md (94%) delete mode 100644 Terraform-AZURE-Services-Creation/Log-Analytics/terraform.tfvars diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 12c5db1..003604f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ jobs: if: github.event_name == 'pull_request' defaults: run: - working-directory: "./Terraform-AZURE-Services-Creation/AKS" + working-directory: "./Terraform-AZURE-Services-Creation/4-aks" name: Terraform environment: production runs-on: ubuntu-latest @@ -47,12 +47,12 @@ jobs: ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} - working-directory: "./Terraform-AZURE-Services-Creation/AKS" + working-directory: "./Terraform-AZURE-Services-Creation/4-aks" - name: Terraform Fmt id: fmt run: terraform fmt - working-directory: "./Terraform-AZURE-Services-Creation/AKS" + working-directory: "./Terraform-AZURE-Services-Creation/4-aks" - name: Auto Commit Changes uses: stefanzweifel/git-auto-commit-action@v5 @@ -70,7 +70,7 @@ jobs: ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} DEPLOYMENT_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - working-directory: "./Terraform-AZURE-Services-Creation/AKS" + working-directory: "./Terraform-AZURE-Services-Creation/4-aks" continue-on-error: false - name: Terraform Apply @@ -82,5 +82,5 @@ jobs: ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} - working-directory: "./Terraform-AZURE-Services-Creation/AKS" + working-directory: "./Terraform-AZURE-Services-Creation/4-aks" continue-on-error: false diff --git a/Terraform-AZURE-Services-Creation/1-Create-ACR.md b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md similarity index 64% rename from Terraform-AZURE-Services-Creation/1-Create-ACR.md rename to 2-Terraform-AZURE-Services-Creation/1-Create-ACR.md index f5f89eb..a0ae5e3 100644 --- a/Terraform-AZURE-Services-Creation/1-Create-ACR.md +++ b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -1,12 +1,12 @@ # Create an Azure Container Registry Repository -Before proceeding, ensure that the values in the terraform.tfvars file are accurate for your environment. You may need to customize these values to match your specific configuration. +Before proceeding, ensure that the values in the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/1-acr/terraform.tfvars) file are accurate for your environment. You may need to customise these values to match your specific configuration and ensure are unique. In this lab you will create a repository to store the Docker image that you created for the Uber app. ## Create the ACR Terraform Configuration -1. You can find the Terraform configuration for Azure Container Registry (ACR) [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/ACR). The Terraform configuration files are used to create a repository in Azure Container Registry (ACR). +1. You can find the Terraform configuration for Azure Container Registry (ACR) [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/1-acr). The Terraform configuration files are used to create a repository in Azure Container Registry (ACR). The Terraform `acr.tf` will: - Use a Terraform backend to store the `.tfstate` in an Azure Storage Account diff --git a/Terraform-AZURE-Services-Creation/ACR/acr.tf b/2-Terraform-AZURE-Services-Creation/1-acr/acr.tf similarity index 54% rename from Terraform-AZURE-Services-Creation/ACR/acr.tf rename to 2-Terraform-AZURE-Services-Creation/1-acr/acr.tf index 3070dbd..f054631 100644 --- a/Terraform-AZURE-Services-Creation/ACR/acr.tf +++ b/2-Terraform-AZURE-Services-Creation/1-acr/acr.tf @@ -1,17 +1,3 @@ -terraform { - required_version = ">= 1.5.7" - backend "azurerm" { - resource_group_name = "devopshardway-rg" - storage_account_name = "devopshardwaysa" - container_name = "tfstate" - key = "acr-terraform.tfstate" - } -} - -provider "azurerm" { - features {} -} - resource "azurerm_resource_group" "acr_resource_group" { name = "${var.name}-rg" location = var.location @@ -21,7 +7,7 @@ resource "azurerm_resource_group" "acr_resource_group" { } resource "azurerm_container_registry" "acr" { - name = "${var.name}tamopsacracr" + name = "${var.name}azurecr" resource_group_name = azurerm_resource_group.acr_resource_group.name location = azurerm_resource_group.acr_resource_group.location sku = "Standard" diff --git a/2-Terraform-AZURE-Services-Creation/1-acr/providers.tf b/2-Terraform-AZURE-Services-Creation/1-acr/providers.tf new file mode 100644 index 0000000..337c1f3 --- /dev/null +++ b/2-Terraform-AZURE-Services-Creation/1-acr/providers.tf @@ -0,0 +1,22 @@ +terraform { + required_version = ">= 1.9.6" + backend "azurerm" { + resource_group_name = "devopshardway-rg" + storage_account_name = "devopshardwaysa" + container_name = "tfstate" + key = "acr-terraform.tfstate" + } + + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = ">= 4.3.0" + } + } +} + +provider "azurerm" { + features {} + subscription_id = "04109105-f3ca-44ac-a3a7-66b4936112c3" + +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/ACR/terraform.tfvars b/2-Terraform-AZURE-Services-Creation/1-acr/terraform.tfvars similarity index 100% rename from Terraform-AZURE-Services-Creation/ACR/terraform.tfvars rename to 2-Terraform-AZURE-Services-Creation/1-acr/terraform.tfvars diff --git a/Terraform-AZURE-Services-Creation/ACR/variables.tf b/2-Terraform-AZURE-Services-Creation/1-acr/variables.tf similarity index 100% rename from Terraform-AZURE-Services-Creation/ACR/variables.tf rename to 2-Terraform-AZURE-Services-Creation/1-acr/variables.tf diff --git a/Terraform-AZURE-Services-Creation/2-Create-VNET.md b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md similarity index 79% rename from Terraform-AZURE-Services-Creation/2-Create-VNET.md rename to 2-Terraform-AZURE-Services-Creation/2-Create-VNET.md index 2ee26db..4e0145f 100644 --- a/Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -1,6 +1,6 @@ # Create an Azure VNET -Before proceeding, ensure that the values in the terraform.tfvars file are accurate for your environment. You may need to customize these values to match your specific configuration. +Before proceeding, ensure that the values in the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/2-vnet/terraform.tfvars) file are accurate for your environment. You may need to customise these values to match your specific configuration. In this lab you will: - Create a Virtual Network (VNET) that will be used to deploy your AKS instance into @@ -9,7 +9,7 @@ In this lab you will: ## Create the Azure VNET Terraform Configuration -1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/VNET). The Terraform configuration files are used to create an Azure Vitual Network. +1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/2-vnet). The Terraform configuration files are used to create an Azure Vitual Network. The Terraform `vnet.tf` will: - Use a Terraform backend to store the `.tfstate` in an Azure Storage Account diff --git a/Terraform-AZURE-Services-Creation/VNET/alb.tf b/2-Terraform-AZURE-Services-Creation/2-vnet/alb.tf similarity index 100% rename from Terraform-AZURE-Services-Creation/VNET/alb.tf rename to 2-Terraform-AZURE-Services-Creation/2-vnet/alb.tf diff --git a/2-Terraform-AZURE-Services-Creation/2-vnet/data.tf b/2-Terraform-AZURE-Services-Creation/2-vnet/data.tf new file mode 100644 index 0000000..2c8d541 --- /dev/null +++ b/2-Terraform-AZURE-Services-Creation/2-vnet/data.tf @@ -0,0 +1,3 @@ +data "azurerm_resource_group" "resource_group" { + name = "${var.name}-rg" +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/VNET/nsg.tf b/2-Terraform-AZURE-Services-Creation/2-vnet/nsg.tf similarity index 100% rename from Terraform-AZURE-Services-Creation/VNET/nsg.tf rename to 2-Terraform-AZURE-Services-Creation/2-vnet/nsg.tf diff --git a/2-Terraform-AZURE-Services-Creation/2-vnet/providers.tf b/2-Terraform-AZURE-Services-Creation/2-vnet/providers.tf new file mode 100644 index 0000000..7e3cd9b --- /dev/null +++ b/2-Terraform-AZURE-Services-Creation/2-vnet/providers.tf @@ -0,0 +1,22 @@ +terraform { + required_version = ">= 1.9.6" + backend "azurerm" { + resource_group_name = "devopshardway-rg" + storage_account_name = "devopshardwaysa" + container_name = "tfstate" + key = "vnet-terraform.tfstate" + } + + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = ">= 4.3.0" + } + } +} + +provider "azurerm" { + features {} + subscription_id = "04109105-f3ca-44ac-a3a7-66b4936112c3" + +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/VNET/terraform.tfvars b/2-Terraform-AZURE-Services-Creation/2-vnet/terraform.tfvars similarity index 100% rename from Terraform-AZURE-Services-Creation/VNET/terraform.tfvars rename to 2-Terraform-AZURE-Services-Creation/2-vnet/terraform.tfvars diff --git a/Terraform-AZURE-Services-Creation/VNET/variables.tf b/2-Terraform-AZURE-Services-Creation/2-vnet/variables.tf similarity index 100% rename from Terraform-AZURE-Services-Creation/VNET/variables.tf rename to 2-Terraform-AZURE-Services-Creation/2-vnet/variables.tf diff --git a/Terraform-AZURE-Services-Creation/VNET/vnet.tf b/2-Terraform-AZURE-Services-Creation/2-vnet/vnet.tf similarity index 74% rename from Terraform-AZURE-Services-Creation/VNET/vnet.tf rename to 2-Terraform-AZURE-Services-Creation/2-vnet/vnet.tf index 257138f..c51e950 100644 --- a/Terraform-AZURE-Services-Creation/VNET/vnet.tf +++ b/2-Terraform-AZURE-Services-Creation/2-vnet/vnet.tf @@ -1,21 +1,3 @@ -terraform { - required_version = ">= 1.5.7" - backend "azurerm" { - resource_group_name = "devopshardway-rg" - storage_account_name = "devopshardwaysa" - container_name = "tfstate" - key = "vnet-terraform.tfstate" - } -} - -provider "azurerm" { - features {} -} - -data "azurerm_resource_group" "resource_group" { - name = "${var.name}-rg" -} - resource "azurerm_virtual_network" "virtual_network" { name = "${var.name}-vnet" location = var.location diff --git a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md similarity index 69% rename from Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md rename to 2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index b7c0f1f..a3368ff 100644 --- a/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -1,12 +1,12 @@ # Create an Azure Log Analytics Workspace -Before proceeding, ensure that the values in the terraform.tfvars file are accurate for your environment. You may need to customize these values to match your specific configuration. +Before proceeding, ensure that the values in the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars) file are accurate for your environment. You may need to customize these values to match your specific configuration. In this lab you will create a Log Analytics workspace that will be used to view container insights of your AKS Cluster ## Create the Log Analytics Workspace Terraform Configuration -1. You can find the Terraform configuration for Log Analytics [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/Log-Analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. +1. You can find the Terraform configuration for Log Analytics [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/3-log-analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. The Terraform `la.tf` will: - Use a Terraform backend to store the `.tfstate` in an Azure Storage Account diff --git a/2-Terraform-AZURE-Services-Creation/3-log-analytics/data.tf b/2-Terraform-AZURE-Services-Creation/3-log-analytics/data.tf new file mode 100644 index 0000000..6515a91 --- /dev/null +++ b/2-Terraform-AZURE-Services-Creation/3-log-analytics/data.tf @@ -0,0 +1,3 @@ +data "azurerm_resource_group" "resource_group" { + name = "${var.name}-rg" +} diff --git a/Terraform-AZURE-Services-Creation/Log-Analytics/la.tf b/2-Terraform-AZURE-Services-Creation/3-log-analytics/la.tf similarity index 70% rename from Terraform-AZURE-Services-Creation/Log-Analytics/la.tf rename to 2-Terraform-AZURE-Services-Creation/3-log-analytics/la.tf index 88978db..432617b 100644 --- a/Terraform-AZURE-Services-Creation/Log-Analytics/la.tf +++ b/2-Terraform-AZURE-Services-Creation/3-log-analytics/la.tf @@ -1,21 +1,3 @@ -terraform { - required_version = ">= 1.5.7" - backend "azurerm" { - resource_group_name = "devopshardway-rg" - storage_account_name = "devopshardwaysa" - container_name = "tfstate" - key = "la-terraform.tfstate" - } -} - -provider "azurerm" { - features {} -} - -data "azurerm_resource_group" "resource_group" { - name = "${var.name}-rg" -} - resource "azurerm_log_analytics_workspace" "Log_Analytics_WorkSpace" { # The WorkSpace name has to be unique across the whole of azure, not just the current subscription/tenant. name = "${var.name}-la" @@ -23,7 +5,7 @@ resource "azurerm_log_analytics_workspace" "Log_Analytics_WorkSpace" { resource_group_name = data.azurerm_resource_group.resource_group.name sku = "PerGB2018" - tags = var.tags + tags = var.tags } diff --git a/2-Terraform-AZURE-Services-Creation/3-log-analytics/providers.tf b/2-Terraform-AZURE-Services-Creation/3-log-analytics/providers.tf new file mode 100644 index 0000000..983bc99 --- /dev/null +++ b/2-Terraform-AZURE-Services-Creation/3-log-analytics/providers.tf @@ -0,0 +1,22 @@ +terraform { + required_version = ">= 1.9.6" + backend "azurerm" { + resource_group_name = "devopshardway-rg" + storage_account_name = "devopshardwaysa" + container_name = "tfstate" + key = "la-terraform.tfstate" + } + + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = ">= 4.3.0" + } + } +} + +provider "azurerm" { + features {} + subscription_id = "04109105-f3ca-44ac-a3a7-66b4936112c3" + +} \ No newline at end of file diff --git a/2-Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars b/2-Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars new file mode 100644 index 0000000..d3a0905 --- /dev/null +++ b/2-Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars @@ -0,0 +1,8 @@ +name = "devopsthehardway" +location = "uksouth" + +tags = { + "DeployedBy" = "Terraform" + "Environment" = "production" + "Project" = "devopsthehardway" +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/Log-Analytics/variables.tf b/2-Terraform-AZURE-Services-Creation/3-log-analytics/variables.tf similarity index 100% rename from Terraform-AZURE-Services-Creation/Log-Analytics/variables.tf rename to 2-Terraform-AZURE-Services-Creation/3-log-analytics/variables.tf diff --git a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md similarity index 85% rename from Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md rename to 2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index 53f5ffc..6e0dbcc 100644 --- a/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -1,6 +1,6 @@ # Create An AKS Cluster and IAM Roles -Before proceeding, ensure that the values in the terraform.tfvars file are accurate for your environment. You may need to customize these values to match your specific configuration. +Before proceeding, ensure that the values in the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars) file are accurate for your environment. You may need to customise these values to match your specific configuration. In this lab you will create: - The AKS cluster diff --git a/Terraform-AZURE-Services-Creation/AKS/aks.tf b/2-Terraform-AZURE-Services-Creation/4-aks/aks.tf similarity index 70% rename from Terraform-AZURE-Services-Creation/AKS/aks.tf rename to 2-Terraform-AZURE-Services-Creation/4-aks/aks.tf index 0e581e0..74bdad4 100644 --- a/Terraform-AZURE-Services-Creation/AKS/aks.tf +++ b/2-Terraform-AZURE-Services-Creation/4-aks/aks.tf @@ -1,22 +1,3 @@ -terraform { - required_version = ">= 1.5.7" - backend "azurerm" { - # resource_group_name = "devopshardway-rg" - # storage_account_name = "devopshardwaysa" - # container_name = "tfstate" - # key = "aks-terraform.tfstate" - resource_group_name = "thomasthorntoncloud" - storage_account_name = "thomasthorntontfstate" - container_name = "devopsthehardwaygithub" - key = "terraform.tfstate" - } -} - - -provider "azurerm" { - features {} -} - resource "azurerm_kubernetes_cluster" "k8s" { name = "${var.name}aks" location = var.location @@ -59,7 +40,6 @@ resource "azurerm_kubernetes_cluster" "k8s" { azure_active_directory_role_based_access_control { azure_rbac_enabled = false - managed = true admin_group_object_ids = [var.aks_admins_group_object_id] } diff --git a/Terraform-AZURE-Services-Creation/AKS/data.tf b/2-Terraform-AZURE-Services-Creation/4-aks/data.tf similarity index 64% rename from Terraform-AZURE-Services-Creation/AKS/data.tf rename to 2-Terraform-AZURE-Services-Creation/4-aks/data.tf index 750a44f..d30371e 100644 --- a/Terraform-AZURE-Services-Creation/AKS/data.tf +++ b/2-Terraform-AZURE-Services-Creation/4-aks/data.tf @@ -17,4 +17,16 @@ data "azurerm_subnet" "appgwsubnet" { data "azurerm_log_analytics_workspace" "workspace" { name = "${var.name}-la" resource_group_name = data.azurerm_resource_group.resource_group.name -} \ No newline at end of file +} + +data "azurerm_container_registry" "acr" { + name = "${var.name}azurecr" + resource_group_name = data.azurerm_resource_group.resource_group.name +} + +data "azurerm_resource_group" "node_resource_group" { + name = azurerm_kubernetes_cluster.k8s.node_resource_group + depends_on = [ + azurerm_kubernetes_cluster.k8s + ] +} diff --git a/Terraform-AZURE-Services-Creation/AKS/managed_identity.tf b/2-Terraform-AZURE-Services-Creation/4-aks/managed_identity.tf similarity index 100% rename from Terraform-AZURE-Services-Creation/AKS/managed_identity.tf rename to 2-Terraform-AZURE-Services-Creation/4-aks/managed_identity.tf diff --git a/2-Terraform-AZURE-Services-Creation/4-aks/providers.tf b/2-Terraform-AZURE-Services-Creation/4-aks/providers.tf new file mode 100644 index 0000000..51a1289 --- /dev/null +++ b/2-Terraform-AZURE-Services-Creation/4-aks/providers.tf @@ -0,0 +1,22 @@ +terraform { + required_version = ">= 1.9.6" + backend "azurerm" { + resource_group_name = "devopshardway-rg" + storage_account_name = "devopshardwaysa" + container_name = "tfstate" + key = "aks-terraform.tfstate" + } + + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = ">= 4.3.0" + } + } +} + +provider "azurerm" { + features {} + subscription_id = "04109105-f3ca-44ac-a3a7-66b4936112c3" + +} \ No newline at end of file diff --git a/Terraform-AZURE-Services-Creation/AKS/rbac.tf b/2-Terraform-AZURE-Services-Creation/4-aks/rbac.tf similarity index 87% rename from Terraform-AZURE-Services-Creation/AKS/rbac.tf rename to 2-Terraform-AZURE-Services-Creation/4-aks/rbac.tf index bbc1489..e9430be 100644 --- a/Terraform-AZURE-Services-Creation/AKS/rbac.tf +++ b/2-Terraform-AZURE-Services-Creation/4-aks/rbac.tf @@ -1,10 +1,3 @@ -data "azurerm_resource_group" "node_resource_group" { - name = azurerm_kubernetes_cluster.k8s.node_resource_group - depends_on = [ - azurerm_kubernetes_cluster.k8s - ] -} - resource "azurerm_role_assignment" "node_infrastructure_update_scale_set" { principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id scope = data.azurerm_resource_group.node_resource_group.id @@ -14,11 +7,6 @@ resource "azurerm_role_assignment" "node_infrastructure_update_scale_set" { ] } -data "azurerm_container_registry" "acr" { - name = "${var.name}tamopsacr" - resource_group_name = data.azurerm_resource_group.resource_group.name -} - resource "azurerm_role_assignment" "acr_pull" { principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id scope = data.azurerm_container_registry.acr.id diff --git a/Terraform-AZURE-Services-Creation/AKS/terraform.tfvars b/2-Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars similarity index 100% rename from Terraform-AZURE-Services-Creation/AKS/terraform.tfvars rename to 2-Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars diff --git a/Terraform-AZURE-Services-Creation/AKS/variables.tf b/2-Terraform-AZURE-Services-Creation/4-aks/variables.tf similarity index 100% rename from Terraform-AZURE-Services-Creation/AKS/variables.tf rename to 2-Terraform-AZURE-Services-Creation/4-aks/variables.tf diff --git a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md similarity index 94% rename from Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md rename to 2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index 27fb6b3..6df6a90 100644 --- a/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -2,8 +2,7 @@ Before proceeding, ensure that the values in the terraform.tfvars file are accurate for your environment. You may need to customize these values to match your specific configuration. -In this lab, you'll learn how to create an AKS cluster using GitHub Actions. The code can be found [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/AKS) - +In this lab, you'll learn how to create an AKS cluster using GitHub Actions. The code can be found [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/4-aks) ## Secrets Prior to running the pipeline, you'll need to set up authentication from GitHub to Azure. To do that, you'll setup an Azure Service Principal. @@ -18,7 +17,7 @@ You'll need both the clientID of the service principal and secret that was creat Please Note: The Service Principal needs IAM permission to the subscription/resource group to where the Azure resources are deployed. In this example, I gave **contributor** access to the **subscription**. See examples on how to [assign an Azure Role here](https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-steps) -You'll be adding 4 screts into the GitHub repository. These four secrets will allow you to connect to Azure from GitHub Actions. +You'll be adding 4 secrets into the GitHub repository. These four secrets will allow you to connect to Azure from GitHub Actions. 1. In the code repository, go to Settings --> Secrets 2. Add in four secrets: diff --git a/Terraform-AZURE-Services-Creation/Log-Analytics/terraform.tfvars b/Terraform-AZURE-Services-Creation/Log-Analytics/terraform.tfvars deleted file mode 100644 index 92b9da1..0000000 --- a/Terraform-AZURE-Services-Creation/Log-Analytics/terraform.tfvars +++ /dev/null @@ -1,2 +0,0 @@ -name = "devopsthehardway" -location = "uksouth" \ No newline at end of file From 17481a85206b5e9974712b01cf0afb86616e47b1 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 08:06:54 +0100 Subject: [PATCH 038/124] update action name --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 003604f..0902ccc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: CI +name: Terrform-Deploy on: push: From ddab8a111eb690974790ecb11006c633dfab5f57 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 08:08:50 +0100 Subject: [PATCH 039/124] update --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0902ccc..e5548c8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -47,12 +47,12 @@ jobs: ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} - working-directory: "./Terraform-AZURE-Services-Creation/4-aks" + working-directory: "./2-Terraform-AZURE-Services-Creation/4-aks" - name: Terraform Fmt id: fmt run: terraform fmt - working-directory: "./Terraform-AZURE-Services-Creation/4-aks" + working-directory: "./2-Terraform-AZURE-Services-Creation/4-aks" - name: Auto Commit Changes uses: stefanzweifel/git-auto-commit-action@v5 @@ -70,7 +70,7 @@ jobs: ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} DEPLOYMENT_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - working-directory: "./Terraform-AZURE-Services-Creation/4-aks" + working-directory: "./2-Terraform-AZURE-Services-Creation/4-aks" continue-on-error: false - name: Terraform Apply @@ -82,5 +82,5 @@ jobs: ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} - working-directory: "./Terraform-AZURE-Services-Creation/4-aks" + working-directory: "./2-Terraform-AZURE-Services-Creation/4-aks" continue-on-error: false From bbbe2f8a1f190f3034edf545903d45d79ba15083 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 08:14:21 +0100 Subject: [PATCH 040/124] update tfversion --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e5548c8..a2afee4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,7 +36,7 @@ jobs: - name: Setup Terraform uses: hashicorp/setup-terraform@v3 with: - terraform_version: 1.7.4 + terraform_version: 1.9.6 terraform_wrapper: true - name: Terraform Init From 47d959e3d37473b181d3480718ccfef0d40e6b08 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 08:20:38 +0100 Subject: [PATCH 041/124] simplify pipeline --- .github/workflows/main.yml | 48 +++++++++++--------------------------- 1 file changed, 13 insertions(+), 35 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a2afee4..bec0c84 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,14 +10,12 @@ on: workflow_dispatch: jobs: - terraform-fmt-check: - if: github.event_name == 'pull_request' - defaults: - run: - working-directory: "./Terraform-AZURE-Services-Creation/4-aks" + terraform: name: Terraform - environment: production runs-on: ubuntu-latest + defaults: + run: + working-directory: "./2-Terraform-AZURE-Services-Creation/4-aks" permissions: contents: write env: @@ -29,6 +27,7 @@ jobs: tf_storage_account_name: "thomasthorntontfstate" tf_state_container: "devopsthehardwaygithub" tf_state_key: "terraform.tfstate" + steps: - name: Checkout Code uses: actions/checkout@v4 @@ -39,48 +38,27 @@ jobs: terraform_version: 1.9.6 terraform_wrapper: true + - name: Terraform Init - id: init run: terraform init - env: - ARM_CLIENT_ID: ${{ secrets.AZURE_AD_CLIENT_ID }} - ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} - ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} - working-directory: "./2-Terraform-AZURE-Services-Creation/4-aks" - - name: Terraform Fmt - id: fmt + - name: Terraform Format + if: github.event_name == 'pull_request' run: terraform fmt - working-directory: "./2-Terraform-AZURE-Services-Creation/4-aks" - name: Auto Commit Changes uses: stefanzweifel/git-auto-commit-action@v5 + if: github.event_name == 'pull_request' with: commit_message: "Terraform fmt" file_pattern: "*.tf *.tfvars" commit_user_name: "github-actions[bot]" - - name: Terraform Plan - id: plan + - name: Terraform Plan run: terraform plan -no-color -input=false env: - ARM_CLIENT_ID: ${{ secrets.AZURE_AD_CLIENT_ID }} - ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} - ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} DEPLOYMENT_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - working-directory: "./2-Terraform-AZURE-Services-Creation/4-aks" - continue-on-error: false - - name: Terraform Apply - id: apply - run: terraform apply -auto-approve -input=false - if: github.ref == 'refs/heads/main' - env: - ARM_CLIENT_ID: ${{ secrets.AZURE_AD_CLIENT_ID }} - ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }} - ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }} - working-directory: "./2-Terraform-AZURE-Services-Creation/4-aks" - continue-on-error: false + - name: Terraform Apply + if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' + run: terraform apply -auto-approve -input=false \ No newline at end of file From bb350a56fb5437b64e591d805808b7ee1889aa31 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 08:21:43 +0100 Subject: [PATCH 042/124] test apply --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bec0c84..b06c02c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,7 +11,7 @@ on: jobs: terraform: - name: Terraform + name: Terrform-Deploy runs-on: ubuntu-latest defaults: run: @@ -60,5 +60,5 @@ jobs: DEPLOYMENT_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Terraform Apply - if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' + # if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' run: terraform apply -auto-approve -input=false \ No newline at end of file From bec09a9f9c44f436f11f8f8a4d85830c0445802a Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 08:28:15 +0100 Subject: [PATCH 043/124] update k8s version --- .../4-aks/terraform.tfvars | 2 +- {Docker => 3-Docker}/1-Create-Docker-Image.md | 0 {Docker => 3-Docker}/2-Push Image To ACR.md | 8 ++++---- {Docker => 3-Docker}/Dockerfile | 0 {Docker => 3-Docker}/app/.gitignore | 0 {Docker => 3-Docker}/app/.travis.yml | 0 {Docker => 3-Docker}/app/Makefile | 0 {Docker => 3-Docker}/app/Procfile | 0 {Docker => 3-Docker}/app/README.md | 0 {Docker => 3-Docker}/app/app.json | 0 {Docker => 3-Docker}/app/app.py | 0 {Docker => 3-Docker}/app/config.json | 0 {Docker => 3-Docker}/app/requirements.txt | 0 {Docker => 3-Docker}/app/setup.cfg | 0 {Docker => 3-Docker}/app/setup.py | 0 {Docker => 3-Docker}/app/static/util.js | 0 {Docker => 3-Docker}/app/templates/demo.html | 0 {Docker => 3-Docker}/app/templates/results.html | 0 {Docker => 3-Docker}/app/templates/success.html | 0 {Docker => 3-Docker}/app/test/fixtures/GitHub_emojis.json | 0 .../test/fixtures/global_preserve_exact_body_bytes.json | 0 .../app/test/fixtures/history_failure.json | 0 .../app/test/fixtures/history_success.json | 0 {Docker => 3-Docker}/app/test/fixtures/me_failure.json | 0 {Docker => 3-Docker}/app/test/fixtures/me_success.json | 0 .../app/test/fixtures/preserve_exact_bytes.json | 0 .../app/test/fixtures/price_estimates_failure.json | 0 .../app/test/fixtures/price_estimates_success.json | 0 .../app/test/fixtures/products_failure.json | 0 .../app/test/fixtures/products_success.json | 0 .../app/test/fixtures/submit_failure.json | 0 .../app/test/fixtures/time_estimates_failure.json | 0 .../app/test/fixtures/time_estimates_success.json | 0 {Docker => 3-Docker}/app/test/test_endpoints.py | 0 README.md | 4 ++-- 35 files changed, 7 insertions(+), 7 deletions(-) rename {Docker => 3-Docker}/1-Create-Docker-Image.md (100%) rename {Docker => 3-Docker}/2-Push Image To ACR.md (51%) rename {Docker => 3-Docker}/Dockerfile (100%) rename {Docker => 3-Docker}/app/.gitignore (100%) rename {Docker => 3-Docker}/app/.travis.yml (100%) rename {Docker => 3-Docker}/app/Makefile (100%) rename {Docker => 3-Docker}/app/Procfile (100%) rename {Docker => 3-Docker}/app/README.md (100%) rename {Docker => 3-Docker}/app/app.json (100%) rename {Docker => 3-Docker}/app/app.py (100%) rename {Docker => 3-Docker}/app/config.json (100%) rename {Docker => 3-Docker}/app/requirements.txt (100%) rename {Docker => 3-Docker}/app/setup.cfg (100%) rename {Docker => 3-Docker}/app/setup.py (100%) rename {Docker => 3-Docker}/app/static/util.js (100%) rename {Docker => 3-Docker}/app/templates/demo.html (100%) rename {Docker => 3-Docker}/app/templates/results.html (100%) rename {Docker => 3-Docker}/app/templates/success.html (100%) rename {Docker => 3-Docker}/app/test/fixtures/GitHub_emojis.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/global_preserve_exact_body_bytes.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/history_failure.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/history_success.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/me_failure.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/me_success.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/preserve_exact_bytes.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/price_estimates_failure.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/price_estimates_success.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/products_failure.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/products_success.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/submit_failure.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/time_estimates_failure.json (100%) rename {Docker => 3-Docker}/app/test/fixtures/time_estimates_success.json (100%) rename {Docker => 3-Docker}/app/test/test_endpoints.py (100%) diff --git a/2-Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars b/2-Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars index 7e425dc..9d74671 100644 --- a/2-Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars +++ b/2-Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars @@ -1,7 +1,7 @@ name = "devopsthehardway" location = "uksouth" -kubernetes_version = "1.28.5" +kubernetes_version = "1.29.8" agent_count = 3 vm_size = "Standard_DS2_v2" ssh_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrt/GYkYpuQYRxM3lgjOr3Wqx8g5nQIbrg6Mr53wZGb35+ft+PibDMqxXZ7xq7fC3YuLnnO022IPgEjkF9fP03ZmfUeLjJJvw8YcutN9DD/2cx93BpKFPNUsqEB+za1iJ16kMsCojy35c1R64O+rw20D6iP96rmDAyIc5FR03y00eyAzQ8vo7/u9+VPwpdGEI7QCokZROcj6iNVz1V/1t6G4AEufPLokdj8J0gla/dN+tvnSLRQVBTDiD4jmVGImpWFqqKaH6R9SSXmRzj0uhvJUmSiZAZCb1caPEYgPEvNITuGQFdykPoY/4Z/3B+x/ipEQbWy8yL7bDFSXZTYhVKlPVyPbUtN5QFt7QtCtg84xDAZ6GA6AnONTtMxX2jvdzB9yh1ZsteNrOZ/Jo3ecuie573syQfG23Tu6qTqak8O7ZTOLY9iPx2ego3KvTWH/Q3lIvjnlpfCQtFtSgkNxjalMBk+NwwEgZHWRREOHwJmQIKVN0gSitN1KXobrqwxNk= tamops@Synth" diff --git a/Docker/1-Create-Docker-Image.md b/3-Docker/1-Create-Docker-Image.md similarity index 100% rename from Docker/1-Create-Docker-Image.md rename to 3-Docker/1-Create-Docker-Image.md diff --git a/Docker/2-Push Image To ACR.md b/3-Docker/2-Push Image To ACR.md similarity index 51% rename from Docker/2-Push Image To ACR.md rename to 3-Docker/2-Push Image To ACR.md index 9164c20..795cd23 100644 --- a/Docker/2-Push Image To ACR.md +++ b/3-Docker/2-Push Image To ACR.md @@ -2,19 +2,19 @@ The ACR repo will be where you store the Docker image that you created on your local computer in step 1. -Ensure to replace `devopsthehardwayacr` with your ACR name and `v1` with the appropriate version tag if needed. +Ensure to replace `devopsthehardwayazurecr` with your ACR name and `v1` with the appropriate version tag if needed. ## Log Into The ECR Repository 1. Log in to ACR with Azure CLI -`az acr login --name devopsthehardwayacr` +`az acr login --name devopsthehardwayazurecr` ## Tag The Docker image 1. Tag the Docker image -`docker tag uberapp devopsthehardwayacr.azurecr.io/uberapp:v1` +`docker tag uberapp devopsthehardwayazurecr.azurecr.io/uberapp:v1` ## Push The Docker Image To ACR 1. Push the Docker image to ACR -`docker push devopsthehardwayacr.azurecr.io/uberapp:v1` +`docker push devopsthehardwayazurecr.azurecr.io/uberapp:v1` diff --git a/Docker/Dockerfile b/3-Docker/Dockerfile similarity index 100% rename from Docker/Dockerfile rename to 3-Docker/Dockerfile diff --git a/Docker/app/.gitignore b/3-Docker/app/.gitignore similarity index 100% rename from Docker/app/.gitignore rename to 3-Docker/app/.gitignore diff --git a/Docker/app/.travis.yml b/3-Docker/app/.travis.yml similarity index 100% rename from Docker/app/.travis.yml rename to 3-Docker/app/.travis.yml diff --git a/Docker/app/Makefile b/3-Docker/app/Makefile similarity index 100% rename from Docker/app/Makefile rename to 3-Docker/app/Makefile diff --git a/Docker/app/Procfile b/3-Docker/app/Procfile similarity index 100% rename from Docker/app/Procfile rename to 3-Docker/app/Procfile diff --git a/Docker/app/README.md b/3-Docker/app/README.md similarity index 100% rename from Docker/app/README.md rename to 3-Docker/app/README.md diff --git a/Docker/app/app.json b/3-Docker/app/app.json similarity index 100% rename from Docker/app/app.json rename to 3-Docker/app/app.json diff --git a/Docker/app/app.py b/3-Docker/app/app.py similarity index 100% rename from Docker/app/app.py rename to 3-Docker/app/app.py diff --git a/Docker/app/config.json b/3-Docker/app/config.json similarity index 100% rename from Docker/app/config.json rename to 3-Docker/app/config.json diff --git a/Docker/app/requirements.txt b/3-Docker/app/requirements.txt similarity index 100% rename from Docker/app/requirements.txt rename to 3-Docker/app/requirements.txt diff --git a/Docker/app/setup.cfg b/3-Docker/app/setup.cfg similarity index 100% rename from Docker/app/setup.cfg rename to 3-Docker/app/setup.cfg diff --git a/Docker/app/setup.py b/3-Docker/app/setup.py similarity index 100% rename from Docker/app/setup.py rename to 3-Docker/app/setup.py diff --git a/Docker/app/static/util.js b/3-Docker/app/static/util.js similarity index 100% rename from Docker/app/static/util.js rename to 3-Docker/app/static/util.js diff --git a/Docker/app/templates/demo.html b/3-Docker/app/templates/demo.html similarity index 100% rename from Docker/app/templates/demo.html rename to 3-Docker/app/templates/demo.html diff --git a/Docker/app/templates/results.html b/3-Docker/app/templates/results.html similarity index 100% rename from Docker/app/templates/results.html rename to 3-Docker/app/templates/results.html diff --git a/Docker/app/templates/success.html b/3-Docker/app/templates/success.html similarity index 100% rename from Docker/app/templates/success.html rename to 3-Docker/app/templates/success.html diff --git a/Docker/app/test/fixtures/GitHub_emojis.json b/3-Docker/app/test/fixtures/GitHub_emojis.json similarity index 100% rename from Docker/app/test/fixtures/GitHub_emojis.json rename to 3-Docker/app/test/fixtures/GitHub_emojis.json diff --git a/Docker/app/test/fixtures/global_preserve_exact_body_bytes.json b/3-Docker/app/test/fixtures/global_preserve_exact_body_bytes.json similarity index 100% rename from Docker/app/test/fixtures/global_preserve_exact_body_bytes.json rename to 3-Docker/app/test/fixtures/global_preserve_exact_body_bytes.json diff --git a/Docker/app/test/fixtures/history_failure.json b/3-Docker/app/test/fixtures/history_failure.json similarity index 100% rename from Docker/app/test/fixtures/history_failure.json rename to 3-Docker/app/test/fixtures/history_failure.json diff --git a/Docker/app/test/fixtures/history_success.json b/3-Docker/app/test/fixtures/history_success.json similarity index 100% rename from Docker/app/test/fixtures/history_success.json rename to 3-Docker/app/test/fixtures/history_success.json diff --git a/Docker/app/test/fixtures/me_failure.json b/3-Docker/app/test/fixtures/me_failure.json similarity index 100% rename from Docker/app/test/fixtures/me_failure.json rename to 3-Docker/app/test/fixtures/me_failure.json diff --git a/Docker/app/test/fixtures/me_success.json b/3-Docker/app/test/fixtures/me_success.json similarity index 100% rename from Docker/app/test/fixtures/me_success.json rename to 3-Docker/app/test/fixtures/me_success.json diff --git a/Docker/app/test/fixtures/preserve_exact_bytes.json b/3-Docker/app/test/fixtures/preserve_exact_bytes.json similarity index 100% rename from Docker/app/test/fixtures/preserve_exact_bytes.json rename to 3-Docker/app/test/fixtures/preserve_exact_bytes.json diff --git a/Docker/app/test/fixtures/price_estimates_failure.json b/3-Docker/app/test/fixtures/price_estimates_failure.json similarity index 100% rename from Docker/app/test/fixtures/price_estimates_failure.json rename to 3-Docker/app/test/fixtures/price_estimates_failure.json diff --git a/Docker/app/test/fixtures/price_estimates_success.json b/3-Docker/app/test/fixtures/price_estimates_success.json similarity index 100% rename from Docker/app/test/fixtures/price_estimates_success.json rename to 3-Docker/app/test/fixtures/price_estimates_success.json diff --git a/Docker/app/test/fixtures/products_failure.json b/3-Docker/app/test/fixtures/products_failure.json similarity index 100% rename from Docker/app/test/fixtures/products_failure.json rename to 3-Docker/app/test/fixtures/products_failure.json diff --git a/Docker/app/test/fixtures/products_success.json b/3-Docker/app/test/fixtures/products_success.json similarity index 100% rename from Docker/app/test/fixtures/products_success.json rename to 3-Docker/app/test/fixtures/products_success.json diff --git a/Docker/app/test/fixtures/submit_failure.json b/3-Docker/app/test/fixtures/submit_failure.json similarity index 100% rename from Docker/app/test/fixtures/submit_failure.json rename to 3-Docker/app/test/fixtures/submit_failure.json diff --git a/Docker/app/test/fixtures/time_estimates_failure.json b/3-Docker/app/test/fixtures/time_estimates_failure.json similarity index 100% rename from Docker/app/test/fixtures/time_estimates_failure.json rename to 3-Docker/app/test/fixtures/time_estimates_failure.json diff --git a/Docker/app/test/fixtures/time_estimates_success.json b/3-Docker/app/test/fixtures/time_estimates_success.json similarity index 100% rename from Docker/app/test/fixtures/time_estimates_success.json rename to 3-Docker/app/test/fixtures/time_estimates_success.json diff --git a/Docker/app/test/test_endpoints.py b/3-Docker/app/test/test_endpoints.py similarity index 100% rename from Docker/app/test/test_endpoints.py rename to 3-Docker/app/test/test_endpoints.py diff --git a/README.md b/README.md index 3a46c39..46c1cb5 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,8 @@ In this scenario, the Terraform State file will be stored in remote state locati - [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) 3. Docker - The purpose of the Docker section is to create a Docker image from the app that the organization is running on-prem (the uber app), containerize it, and store the container inside of a container repository. For the container repo, you'll use Azure ECR. - - [Create The Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/1-Create-Docker-Image.md) - - [Log Into Azure ACR Repository and Push the Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Docker/Push%20Image%20To%20ACR.md) + - [Create The Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/3-Docker/1-Create-Docker-Image.md) + - [Log Into Azure ACR Repository and Push the Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/3-Docker/Push%20Image%20To%20ACR.md) 4. Kubernetes - The purpose of the Kubernetes section is to connect to AKS locally and to write the Kubernetes manifest to deploy the Python Uber app. - [Connect To AKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/1-Connect-To-ACR.md) - [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/kubernetes_manifest/2-Create-Kubernetes-Manifest.md) From 6d7ab657e469a5210dc5f18f1f5732200330b9b4 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 10:00:21 +0100 Subject: [PATCH 044/124] Swap app to Flask Python App --- 3-Docker-old/1-Create-Docker-Image.md | 44 ++++ 3-Docker-old/2-Push Image To ACR.md | 20 ++ 3-Docker-old/Dockerfile | 14 ++ {3-Docker => 3-Docker-old}/app/.gitignore | 0 {3-Docker => 3-Docker-old}/app/.travis.yml | 0 {3-Docker => 3-Docker-old}/app/Makefile | 0 {3-Docker => 3-Docker-old}/app/Procfile | 0 {3-Docker => 3-Docker-old}/app/README.md | 0 {3-Docker => 3-Docker-old}/app/app.json | 0 3-Docker-old/app/app.py | 233 +++++++++++++++++ {3-Docker => 3-Docker-old}/app/config.json | 0 3-Docker-old/app/requirements.txt | 12 + {3-Docker => 3-Docker-old}/app/setup.cfg | 0 {3-Docker => 3-Docker-old}/app/setup.py | 0 {3-Docker => 3-Docker-old}/app/static/util.js | 0 .../app/templates/demo.html | 0 .../app/templates/results.html | 0 .../app/templates/success.html | 0 .../app/test/fixtures/GitHub_emojis.json | 0 .../global_preserve_exact_body_bytes.json | 0 .../app/test/fixtures/history_failure.json | 0 .../app/test/fixtures/history_success.json | 0 .../app/test/fixtures/me_failure.json | 0 .../app/test/fixtures/me_success.json | 0 .../test/fixtures/preserve_exact_bytes.json | 0 .../fixtures/price_estimates_failure.json | 0 .../fixtures/price_estimates_success.json | 0 .../app/test/fixtures/products_failure.json | 0 .../app/test/fixtures/products_success.json | 0 .../app/test/fixtures/submit_failure.json | 0 .../test/fixtures/time_estimates_failure.json | 0 .../test/fixtures/time_estimates_success.json | 0 .../app/test/test_endpoints.py | 0 3-Docker/1-Create-Docker-Image.md | 6 +- 3-Docker/2-Push Image To ACR.md | 4 +- 3-Docker/Dockerfile | 8 +- 3-Docker/app/app.py | 237 +----------------- 3-Docker/app/requirements.txt | 14 +- .../1-Connect-To-AKS.md | 0 .../2-Create-Kubernetes-Manifest.md | 0 .../3-Deploy-Uber-App.md | 12 +- 4-kubernetes_manifest/deployment.yml | 46 ++++ .../scripts/1-alb-controller-install-k8s.sh | 0 .../scripts/2-gateway-api-resources.sh | 10 +- README.md | 6 +- .../1-Checkov-For-Terraform.md | 2 +- kubernetes_manifest/deployment.yml | 42 ---- 47 files changed, 404 insertions(+), 306 deletions(-) create mode 100644 3-Docker-old/1-Create-Docker-Image.md create mode 100644 3-Docker-old/2-Push Image To ACR.md create mode 100644 3-Docker-old/Dockerfile rename {3-Docker => 3-Docker-old}/app/.gitignore (100%) rename {3-Docker => 3-Docker-old}/app/.travis.yml (100%) rename {3-Docker => 3-Docker-old}/app/Makefile (100%) rename {3-Docker => 3-Docker-old}/app/Procfile (100%) rename {3-Docker => 3-Docker-old}/app/README.md (100%) rename {3-Docker => 3-Docker-old}/app/app.json (100%) create mode 100644 3-Docker-old/app/app.py rename {3-Docker => 3-Docker-old}/app/config.json (100%) create mode 100644 3-Docker-old/app/requirements.txt rename {3-Docker => 3-Docker-old}/app/setup.cfg (100%) rename {3-Docker => 3-Docker-old}/app/setup.py (100%) rename {3-Docker => 3-Docker-old}/app/static/util.js (100%) rename {3-Docker => 3-Docker-old}/app/templates/demo.html (100%) rename {3-Docker => 3-Docker-old}/app/templates/results.html (100%) rename {3-Docker => 3-Docker-old}/app/templates/success.html (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/GitHub_emojis.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/global_preserve_exact_body_bytes.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/history_failure.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/history_success.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/me_failure.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/me_success.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/preserve_exact_bytes.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/price_estimates_failure.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/price_estimates_success.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/products_failure.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/products_success.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/submit_failure.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/time_estimates_failure.json (100%) rename {3-Docker => 3-Docker-old}/app/test/fixtures/time_estimates_success.json (100%) rename {3-Docker => 3-Docker-old}/app/test/test_endpoints.py (100%) rename kubernetes_manifest/1-Connect-To-ACR.md => 4-kubernetes_manifest/1-Connect-To-AKS.md (100%) rename {kubernetes_manifest => 4-kubernetes_manifest}/2-Create-Kubernetes-Manifest.md (100%) rename {kubernetes_manifest => 4-kubernetes_manifest}/3-Deploy-Uber-App.md (70%) create mode 100644 4-kubernetes_manifest/deployment.yml rename {kubernetes_manifest => 4-kubernetes_manifest}/scripts/1-alb-controller-install-k8s.sh (100%) rename {kubernetes_manifest => 4-kubernetes_manifest}/scripts/2-gateway-api-resources.sh (85%) delete mode 100644 kubernetes_manifest/deployment.yml diff --git a/3-Docker-old/1-Create-Docker-Image.md b/3-Docker-old/1-Create-Docker-Image.md new file mode 100644 index 0000000..7922b6b --- /dev/null +++ b/3-Docker-old/1-Create-Docker-Image.md @@ -0,0 +1,44 @@ +# Creating the Docker image for the Uber app + +In this lab you will create a Docker image to containerize the Uber app. + +## Create The Docker Image + +1. `cd` into the *Docker* directory where you will see a *Dockerfile* and *app* directory. The app directory is what stores the Python application and the Dockerfile will be used to build the app. + +2. Open the Dockerfile + +3. Within the Dockerfile, you'll see a few key components + - The Docker image that's being used is Python. It's using the latest version + - There's a new directory being created called `/build`, which is where the Python app will reside + - The *app* directory will be copied into the `/build` directory, along with the `requirements.txt` file to install all of the Python requirements for the app + - The app will run as soon as the container gets created and comes up + +4. To create the Docker image, you'll run the following command: +`docker build -t uberapp .` + +Please note, you want to run the below docker command instead, if the above does not work: +`docker build --platform=linux/amd64 -t uberapp .` + +This command is similar to the first one, but it includes the `--platform` option. The` --platform` option allows you to specify the target platform for the Docker image. In this case, it specifies the platform as `linux/amd64`, which means the image will be built for the AMD64 architecture running Linux. This option is useful when building multi-platform images that can run on different architectures. + +The `-t` is for the tag (the name) of the Docker image and the `.` is telling the Docker CLI that the Dockerfile is in the current directory + +5. After the Docker image is created, run the following command to confirm the Docker image is on your machine. +`docker image ls` + +## Run The Docker Image Locally + +Now that the Docker image is created, you can run the container locally just to confirm it'll work and not crash. + +1. To run the Docker container, run the following command: +`docker run -tid uberapp` + +- `t` enables a TTY console. +- `i` enables an interactive session. +- `d` detaches the terminal from the Docker container. + +2. Confirm that the Docker container is running by running the following command: +`docker container ls` + +You should now see the container running successfully. \ No newline at end of file diff --git a/3-Docker-old/2-Push Image To ACR.md b/3-Docker-old/2-Push Image To ACR.md new file mode 100644 index 0000000..795cd23 --- /dev/null +++ b/3-Docker-old/2-Push Image To ACR.md @@ -0,0 +1,20 @@ +# Push Image To ACR + +The ACR repo will be where you store the Docker image that you created on your local computer in step 1. + +Ensure to replace `devopsthehardwayazurecr` with your ACR name and `v1` with the appropriate version tag if needed. + + +## Log Into The ECR Repository +1. Log in to ACR with Azure CLI +`az acr login --name devopsthehardwayazurecr` + + +## Tag The Docker image +1. Tag the Docker image +`docker tag uberapp devopsthehardwayazurecr.azurecr.io/uberapp:v1` + +## Push The Docker Image To ACR +1. Push the Docker image to ACR +`docker push devopsthehardwayazurecr.azurecr.io/uberapp:v1` + diff --git a/3-Docker-old/Dockerfile b/3-Docker-old/Dockerfile new file mode 100644 index 0000000..740820d --- /dev/null +++ b/3-Docker-old/Dockerfile @@ -0,0 +1,14 @@ +FROM python:latest + +RUN mkdir /build +WORKDIR /build + +COPY app /build + +COPY app/requirements.txt /build + +RUN pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org -r requirements.txt + +EXPOSE 5000 + +CMD [ "python", "app.py" ] \ No newline at end of file diff --git a/3-Docker/app/.gitignore b/3-Docker-old/app/.gitignore similarity index 100% rename from 3-Docker/app/.gitignore rename to 3-Docker-old/app/.gitignore diff --git a/3-Docker/app/.travis.yml b/3-Docker-old/app/.travis.yml similarity index 100% rename from 3-Docker/app/.travis.yml rename to 3-Docker-old/app/.travis.yml diff --git a/3-Docker/app/Makefile b/3-Docker-old/app/Makefile similarity index 100% rename from 3-Docker/app/Makefile rename to 3-Docker-old/app/Makefile diff --git a/3-Docker/app/Procfile b/3-Docker-old/app/Procfile similarity index 100% rename from 3-Docker/app/Procfile rename to 3-Docker-old/app/Procfile diff --git a/3-Docker/app/README.md b/3-Docker-old/app/README.md similarity index 100% rename from 3-Docker/app/README.md rename to 3-Docker-old/app/README.md diff --git a/3-Docker/app/app.json b/3-Docker-old/app/app.json similarity index 100% rename from 3-Docker/app/app.json rename to 3-Docker-old/app/app.json diff --git a/3-Docker-old/app/app.py b/3-Docker-old/app/app.py new file mode 100644 index 0000000..423f06a --- /dev/null +++ b/3-Docker-old/app/app.py @@ -0,0 +1,233 @@ +from __future__ import absolute_import + +import json +import os +from urllib.parse import urlparse + +from flask import Flask, render_template, request, redirect, session +from flask_sslify import SSLify +from rauth import OAuth2Service +import requests + +app = Flask(__name__, static_folder='static', static_url_path='') +app.requests_session = requests.Session() +app.secret_key = os.urandom(24) + +sslify = SSLify(app) + +with open('config.json') as f: + config = json.load(f) + + +def generate_oauth_service(): + """Prepare the OAuth2Service that is used to make requests later.""" + return OAuth2Service( + client_id=os.environ.get('UBER_CLIENT_ID'), + client_secret=os.environ.get('UBER_CLIENT_SECRET'), + name=config.get('name'), + authorize_url=config.get('authorize_url'), + access_token_url=config.get('access_token_url'), + base_url=config.get('base_url'), + ) + + +def generate_ride_headers(token): + """Generate the header object that is used to make api requests.""" + return { + 'Authorization': 'bearer %s' % token, + 'Content-Type': 'application/json', + } + + +@app.route('/health', methods=['GET']) +def health(): + """Check the status of this application.""" + return ';-)' + + +@app.route('/', methods=['GET']) +def signup(): + """The first step in the three-legged OAuth handshake. + + You should navigate here first. It will redirect to login.uber.com. + """ + params = { + 'response_type': 'code', + 'redirect_uri': get_redirect_uri(request), + 'scopes': ','.join(config.get('scopes')), + } + url = generate_oauth_service().get_authorize_url(**params) + return redirect(url) + + +@app.route('/submit', methods=['GET']) +def submit(): + """The other two steps in the three-legged Oauth handshake. + + Your redirect uri will redirect you here, where you will exchange + a code that can be used to obtain an access token for the logged-in use. + """ + params = { + 'redirect_uri': get_redirect_uri(request), + 'code': request.args.get('code'), + 'grant_type': 'authorization_code' + } + response = app.requests_session.post( + config.get('access_token_url'), + auth=( + os.environ.get('UBER_CLIENT_ID'), + os.environ.get('UBER_CLIENT_SECRET') + ), + data=params, + ) + session['access_token'] = response.json().get('access_token') + + return render_template( + 'success.html', + token=response.json().get('access_token') + ) + + +@app.route('/demo', methods=['GET']) +def demo(): + """Demo.html is a template that calls the other routes in this example.""" + return render_template('demo.html', token=session.get('access_token')) + + +@app.route('/products', methods=['GET']) +def products(): + """Example call to the products endpoint. + + Returns all the products currently available in San Francisco. + """ + url = config.get('base_uber_url') + 'products' + params = { + 'latitude': config.get('start_latitude'), + 'longitude': config.get('start_longitude'), + } + + response = app.requests_session.get( + url, + headers=generate_ride_headers(session.get('access_token')), + params=params, + ) + + if response.status_code != 200: + return 'There was an error', response.status_code + return render_template( + 'results.html', + endpoint='products', + data=response.text, + ) + + +@app.route('/time', methods=['GET']) +def time(): + """Example call to the time estimates endpoint. + + Returns the time estimates from the given lat/lng given below. + """ + url = config.get('base_uber_url') + 'estimates/time' + params = { + 'start_latitude': config.get('start_latitude'), + 'start_longitude': config.get('start_longitude'), + } + + response = app.requests_session.get( + url, + headers=generate_ride_headers(session.get('access_token')), + params=params, + ) + + if response.status_code != 200: + return 'There was an error', response.status_code + return render_template( + 'results.html', + endpoint='time', + data=response.text, + ) + + +@app.route('/price', methods=['GET']) +def price(): + """Example call to the price estimates endpoint. + + Returns the time estimates from the given lat/lng given below. + """ + url = config.get('base_uber_url') + 'estimates/price' + params = { + 'start_latitude': config.get('start_latitude'), + 'start_longitude': config.get('start_longitude'), + 'end_latitude': config.get('end_latitude'), + 'end_longitude': config.get('end_longitude'), + } + + response = app.requests_session.get( + url, + headers=generate_ride_headers(session.get('access_token')), + params=params, + ) + + if response.status_code != 200: + return 'There was an error', response.status_code + return render_template( + 'results.html', + endpoint='price', + data=response.text, + ) + + +@app.route('/history', methods=['GET']) +def history(): + """Return the last 5 trips made by the logged in user.""" + url = config.get('base_uber_url_v1_1') + 'history' + params = { + 'offset': 0, + 'limit': 5, + } + + response = app.requests_session.get( + url, + headers=generate_ride_headers(session.get('access_token')), + params=params, + ) + + if response.status_code != 200: + return 'There was an error', response.status_code + return render_template( + 'results.html', + endpoint='history', + data=response.text, + ) + + +@app.route('/me', methods=['GET']) +def me(): + """Return user information including name, picture and email.""" + url = config.get('base_uber_url') + 'me' + response = app.requests_session.get( + url, + headers=generate_ride_headers(session.get('access_token')), + ) + + if response.status_code != 200: + return 'There was an error', response.status_code + return render_template( + 'results.html', + endpoint='me', + data=response.text, + ) + + +def get_redirect_uri(request): + """Return OAuth redirect URI.""" + parsed_url = urlparse(request.url) + if parsed_url.hostname == 'localhost': + return 'http://{hostname}:{port}/submit'.format( + hostname=parsed_url.hostname, port=parsed_url.port + ) + return 'https://{hostname}/submit'.format(hostname=parsed_url.hostname) + +if __name__ == '__main__': + app.debug = os.environ.get('FLASK_DEBUG', True) + app.run(host='0.0.0.0', port=5000) diff --git a/3-Docker/app/config.json b/3-Docker-old/app/config.json similarity index 100% rename from 3-Docker/app/config.json rename to 3-Docker-old/app/config.json diff --git a/3-Docker-old/app/requirements.txt b/3-Docker-old/app/requirements.txt new file mode 100644 index 0000000..cf39ca1 --- /dev/null +++ b/3-Docker-old/app/requirements.txt @@ -0,0 +1,12 @@ +Flask +Jinja2 +MarkupSafe +Werkzeug +gnureadline +itsdangerous +rauth +requests +urllib3 + +gunicorn +Flask-SSLify diff --git a/3-Docker/app/setup.cfg b/3-Docker-old/app/setup.cfg similarity index 100% rename from 3-Docker/app/setup.cfg rename to 3-Docker-old/app/setup.cfg diff --git a/3-Docker/app/setup.py b/3-Docker-old/app/setup.py similarity index 100% rename from 3-Docker/app/setup.py rename to 3-Docker-old/app/setup.py diff --git a/3-Docker/app/static/util.js b/3-Docker-old/app/static/util.js similarity index 100% rename from 3-Docker/app/static/util.js rename to 3-Docker-old/app/static/util.js diff --git a/3-Docker/app/templates/demo.html b/3-Docker-old/app/templates/demo.html similarity index 100% rename from 3-Docker/app/templates/demo.html rename to 3-Docker-old/app/templates/demo.html diff --git a/3-Docker/app/templates/results.html b/3-Docker-old/app/templates/results.html similarity index 100% rename from 3-Docker/app/templates/results.html rename to 3-Docker-old/app/templates/results.html diff --git a/3-Docker/app/templates/success.html b/3-Docker-old/app/templates/success.html similarity index 100% rename from 3-Docker/app/templates/success.html rename to 3-Docker-old/app/templates/success.html diff --git a/3-Docker/app/test/fixtures/GitHub_emojis.json b/3-Docker-old/app/test/fixtures/GitHub_emojis.json similarity index 100% rename from 3-Docker/app/test/fixtures/GitHub_emojis.json rename to 3-Docker-old/app/test/fixtures/GitHub_emojis.json diff --git a/3-Docker/app/test/fixtures/global_preserve_exact_body_bytes.json b/3-Docker-old/app/test/fixtures/global_preserve_exact_body_bytes.json similarity index 100% rename from 3-Docker/app/test/fixtures/global_preserve_exact_body_bytes.json rename to 3-Docker-old/app/test/fixtures/global_preserve_exact_body_bytes.json diff --git a/3-Docker/app/test/fixtures/history_failure.json b/3-Docker-old/app/test/fixtures/history_failure.json similarity index 100% rename from 3-Docker/app/test/fixtures/history_failure.json rename to 3-Docker-old/app/test/fixtures/history_failure.json diff --git a/3-Docker/app/test/fixtures/history_success.json b/3-Docker-old/app/test/fixtures/history_success.json similarity index 100% rename from 3-Docker/app/test/fixtures/history_success.json rename to 3-Docker-old/app/test/fixtures/history_success.json diff --git a/3-Docker/app/test/fixtures/me_failure.json b/3-Docker-old/app/test/fixtures/me_failure.json similarity index 100% rename from 3-Docker/app/test/fixtures/me_failure.json rename to 3-Docker-old/app/test/fixtures/me_failure.json diff --git a/3-Docker/app/test/fixtures/me_success.json b/3-Docker-old/app/test/fixtures/me_success.json similarity index 100% rename from 3-Docker/app/test/fixtures/me_success.json rename to 3-Docker-old/app/test/fixtures/me_success.json diff --git a/3-Docker/app/test/fixtures/preserve_exact_bytes.json b/3-Docker-old/app/test/fixtures/preserve_exact_bytes.json similarity index 100% rename from 3-Docker/app/test/fixtures/preserve_exact_bytes.json rename to 3-Docker-old/app/test/fixtures/preserve_exact_bytes.json diff --git a/3-Docker/app/test/fixtures/price_estimates_failure.json b/3-Docker-old/app/test/fixtures/price_estimates_failure.json similarity index 100% rename from 3-Docker/app/test/fixtures/price_estimates_failure.json rename to 3-Docker-old/app/test/fixtures/price_estimates_failure.json diff --git a/3-Docker/app/test/fixtures/price_estimates_success.json b/3-Docker-old/app/test/fixtures/price_estimates_success.json similarity index 100% rename from 3-Docker/app/test/fixtures/price_estimates_success.json rename to 3-Docker-old/app/test/fixtures/price_estimates_success.json diff --git a/3-Docker/app/test/fixtures/products_failure.json b/3-Docker-old/app/test/fixtures/products_failure.json similarity index 100% rename from 3-Docker/app/test/fixtures/products_failure.json rename to 3-Docker-old/app/test/fixtures/products_failure.json diff --git a/3-Docker/app/test/fixtures/products_success.json b/3-Docker-old/app/test/fixtures/products_success.json similarity index 100% rename from 3-Docker/app/test/fixtures/products_success.json rename to 3-Docker-old/app/test/fixtures/products_success.json diff --git a/3-Docker/app/test/fixtures/submit_failure.json b/3-Docker-old/app/test/fixtures/submit_failure.json similarity index 100% rename from 3-Docker/app/test/fixtures/submit_failure.json rename to 3-Docker-old/app/test/fixtures/submit_failure.json diff --git a/3-Docker/app/test/fixtures/time_estimates_failure.json b/3-Docker-old/app/test/fixtures/time_estimates_failure.json similarity index 100% rename from 3-Docker/app/test/fixtures/time_estimates_failure.json rename to 3-Docker-old/app/test/fixtures/time_estimates_failure.json diff --git a/3-Docker/app/test/fixtures/time_estimates_success.json b/3-Docker-old/app/test/fixtures/time_estimates_success.json similarity index 100% rename from 3-Docker/app/test/fixtures/time_estimates_success.json rename to 3-Docker-old/app/test/fixtures/time_estimates_success.json diff --git a/3-Docker/app/test/test_endpoints.py b/3-Docker-old/app/test/test_endpoints.py similarity index 100% rename from 3-Docker/app/test/test_endpoints.py rename to 3-Docker-old/app/test/test_endpoints.py diff --git a/3-Docker/1-Create-Docker-Image.md b/3-Docker/1-Create-Docker-Image.md index 7922b6b..32a8118 100644 --- a/3-Docker/1-Create-Docker-Image.md +++ b/3-Docker/1-Create-Docker-Image.md @@ -15,10 +15,10 @@ In this lab you will create a Docker image to containerize the Uber app. - The app will run as soon as the container gets created and comes up 4. To create the Docker image, you'll run the following command: -`docker build -t uberapp .` +`docker build -t thomasthorntoncloud .` Please note, you want to run the below docker command instead, if the above does not work: -`docker build --platform=linux/amd64 -t uberapp .` +`docker build --platform=linux/amd64 -t thomasthorntoncloud .` This command is similar to the first one, but it includes the `--platform` option. The` --platform` option allows you to specify the target platform for the Docker image. In this case, it specifies the platform as `linux/amd64`, which means the image will be built for the AMD64 architecture running Linux. This option is useful when building multi-platform images that can run on different architectures. @@ -32,7 +32,7 @@ The `-t` is for the tag (the name) of the Docker image and the `.` is telling th Now that the Docker image is created, you can run the container locally just to confirm it'll work and not crash. 1. To run the Docker container, run the following command: -`docker run -tid uberapp` +`docker run -tid thomasthorntoncloud` - `t` enables a TTY console. - `i` enables an interactive session. diff --git a/3-Docker/2-Push Image To ACR.md b/3-Docker/2-Push Image To ACR.md index 795cd23..7030316 100644 --- a/3-Docker/2-Push Image To ACR.md +++ b/3-Docker/2-Push Image To ACR.md @@ -12,9 +12,9 @@ Ensure to replace `devopsthehardwayazurecr` with your ACR name and `v1` with the ## Tag The Docker image 1. Tag the Docker image -`docker tag uberapp devopsthehardwayazurecr.azurecr.io/uberapp:v1` +`docker tag thomasthorntoncloud devopsthehardwayazurecr.azurecr.io/thomasthorntoncloud:v1` ## Push The Docker Image To ACR 1. Push the Docker image to ACR -`docker push devopsthehardwayazurecr.azurecr.io/uberapp:v1` +`docker push devopsthehardwayazurecr.azurecr.io/thomasthorntoncloud:v1` diff --git a/3-Docker/Dockerfile b/3-Docker/Dockerfile index 740820d..15428d1 100644 --- a/3-Docker/Dockerfile +++ b/3-Docker/Dockerfile @@ -1,14 +1,12 @@ -FROM python:latest +FROM python:3.9-slim RUN mkdir /build WORKDIR /build COPY app /build -COPY app/requirements.txt /build - -RUN pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org -r requirements.txt +RUN pip install --no-cache-dir -r requirements.txt EXPOSE 5000 -CMD [ "python", "app.py" ] \ No newline at end of file +CMD ["python", "app.py"] \ No newline at end of file diff --git a/3-Docker/app/app.py b/3-Docker/app/app.py index 423f06a..f6b2a29 100644 --- a/3-Docker/app/app.py +++ b/3-Docker/app/app.py @@ -1,233 +1,12 @@ -from __future__ import absolute_import - -import json +from flask import Flask import os -from urllib.parse import urlparse - -from flask import Flask, render_template, request, redirect, session -from flask_sslify import SSLify -from rauth import OAuth2Service -import requests - -app = Flask(__name__, static_folder='static', static_url_path='') -app.requests_session = requests.Session() -app.secret_key = os.urandom(24) - -sslify = SSLify(app) - -with open('config.json') as f: - config = json.load(f) - - -def generate_oauth_service(): - """Prepare the OAuth2Service that is used to make requests later.""" - return OAuth2Service( - client_id=os.environ.get('UBER_CLIENT_ID'), - client_secret=os.environ.get('UBER_CLIENT_SECRET'), - name=config.get('name'), - authorize_url=config.get('authorize_url'), - access_token_url=config.get('access_token_url'), - base_url=config.get('base_url'), - ) - - -def generate_ride_headers(token): - """Generate the header object that is used to make api requests.""" - return { - 'Authorization': 'bearer %s' % token, - 'Content-Type': 'application/json', - } - - -@app.route('/health', methods=['GET']) -def health(): - """Check the status of this application.""" - return ';-)' - - -@app.route('/', methods=['GET']) -def signup(): - """The first step in the three-legged OAuth handshake. - - You should navigate here first. It will redirect to login.uber.com. - """ - params = { - 'response_type': 'code', - 'redirect_uri': get_redirect_uri(request), - 'scopes': ','.join(config.get('scopes')), - } - url = generate_oauth_service().get_authorize_url(**params) - return redirect(url) - - -@app.route('/submit', methods=['GET']) -def submit(): - """The other two steps in the three-legged Oauth handshake. - - Your redirect uri will redirect you here, where you will exchange - a code that can be used to obtain an access token for the logged-in use. - """ - params = { - 'redirect_uri': get_redirect_uri(request), - 'code': request.args.get('code'), - 'grant_type': 'authorization_code' - } - response = app.requests_session.post( - config.get('access_token_url'), - auth=( - os.environ.get('UBER_CLIENT_ID'), - os.environ.get('UBER_CLIENT_SECRET') - ), - data=params, - ) - session['access_token'] = response.json().get('access_token') - - return render_template( - 'success.html', - token=response.json().get('access_token') - ) - - -@app.route('/demo', methods=['GET']) -def demo(): - """Demo.html is a template that calls the other routes in this example.""" - return render_template('demo.html', token=session.get('access_token')) - - -@app.route('/products', methods=['GET']) -def products(): - """Example call to the products endpoint. - - Returns all the products currently available in San Francisco. - """ - url = config.get('base_uber_url') + 'products' - params = { - 'latitude': config.get('start_latitude'), - 'longitude': config.get('start_longitude'), - } - - response = app.requests_session.get( - url, - headers=generate_ride_headers(session.get('access_token')), - params=params, - ) - - if response.status_code != 200: - return 'There was an error', response.status_code - return render_template( - 'results.html', - endpoint='products', - data=response.text, - ) - - -@app.route('/time', methods=['GET']) -def time(): - """Example call to the time estimates endpoint. - - Returns the time estimates from the given lat/lng given below. - """ - url = config.get('base_uber_url') + 'estimates/time' - params = { - 'start_latitude': config.get('start_latitude'), - 'start_longitude': config.get('start_longitude'), - } - - response = app.requests_session.get( - url, - headers=generate_ride_headers(session.get('access_token')), - params=params, - ) - - if response.status_code != 200: - return 'There was an error', response.status_code - return render_template( - 'results.html', - endpoint='time', - data=response.text, - ) - - -@app.route('/price', methods=['GET']) -def price(): - """Example call to the price estimates endpoint. - - Returns the time estimates from the given lat/lng given below. - """ - url = config.get('base_uber_url') + 'estimates/price' - params = { - 'start_latitude': config.get('start_latitude'), - 'start_longitude': config.get('start_longitude'), - 'end_latitude': config.get('end_latitude'), - 'end_longitude': config.get('end_longitude'), - } - - response = app.requests_session.get( - url, - headers=generate_ride_headers(session.get('access_token')), - params=params, - ) - - if response.status_code != 200: - return 'There was an error', response.status_code - return render_template( - 'results.html', - endpoint='price', - data=response.text, - ) - - -@app.route('/history', methods=['GET']) -def history(): - """Return the last 5 trips made by the logged in user.""" - url = config.get('base_uber_url_v1_1') + 'history' - params = { - 'offset': 0, - 'limit': 5, - } - - response = app.requests_session.get( - url, - headers=generate_ride_headers(session.get('access_token')), - params=params, - ) - - if response.status_code != 200: - return 'There was an error', response.status_code - return render_template( - 'results.html', - endpoint='history', - data=response.text, - ) - - -@app.route('/me', methods=['GET']) -def me(): - """Return user information including name, picture and email.""" - url = config.get('base_uber_url') + 'me' - response = app.requests_session.get( - url, - headers=generate_ride_headers(session.get('access_token')), - ) - - if response.status_code != 200: - return 'There was an error', response.status_code - return render_template( - 'results.html', - endpoint='me', - data=response.text, - ) +app = Flask(__name__) -def get_redirect_uri(request): - """Return OAuth redirect URI.""" - parsed_url = urlparse(request.url) - if parsed_url.hostname == 'localhost': - return 'http://{hostname}:{port}/submit'.format( - hostname=parsed_url.hostname, port=parsed_url.port - ) - return 'https://{hostname}/submit'.format(hostname=parsed_url.hostname) +@app.route('/') +def hello(): + return "Hello, World from thomasthornton.cloud - DevOps the Hard Way!" -if __name__ == '__main__': - app.debug = os.environ.get('FLASK_DEBUG', True) - app.run(host='0.0.0.0', port=5000) +if __name__ == "__main__": + port = int(os.environ.get("PORT", 5000)) + app.run(host='0.0.0.0', port=port) \ No newline at end of file diff --git a/3-Docker/app/requirements.txt b/3-Docker/app/requirements.txt index cf39ca1..e0f2ec9 100644 --- a/3-Docker/app/requirements.txt +++ b/3-Docker/app/requirements.txt @@ -1,12 +1,2 @@ -Flask -Jinja2 -MarkupSafe -Werkzeug -gnureadline -itsdangerous -rauth -requests -urllib3 - -gunicorn -Flask-SSLify +Flask==2.0.1 +Werkzeug==2.0.1 \ No newline at end of file diff --git a/kubernetes_manifest/1-Connect-To-ACR.md b/4-kubernetes_manifest/1-Connect-To-AKS.md similarity index 100% rename from kubernetes_manifest/1-Connect-To-ACR.md rename to 4-kubernetes_manifest/1-Connect-To-AKS.md diff --git a/kubernetes_manifest/2-Create-Kubernetes-Manifest.md b/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md similarity index 100% rename from kubernetes_manifest/2-Create-Kubernetes-Manifest.md rename to 4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md diff --git a/kubernetes_manifest/3-Deploy-Uber-App.md b/4-kubernetes_manifest/3-Deploy-Uber-App.md similarity index 70% rename from kubernetes_manifest/3-Deploy-Uber-App.md rename to 4-kubernetes_manifest/3-Deploy-Uber-App.md index b2d6ebc..f35f8ee 100644 --- a/kubernetes_manifest/3-Deploy-Uber-App.md +++ b/4-kubernetes_manifest/3-Deploy-Uber-App.md @@ -4,9 +4,9 @@ Once the AKS cluster is provisioned and the Kubernetes manifest is prepared, it' 1. `cd` into the `kubernetes_manifest` directory 2. Run the following commands: -- Install ALB Controller (YModify values if necessary: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/kubernetes_manifest/scripts/1-install-alb-controller.sh#L3-8) ): +- Install ALB Controller (YModify values if necessary: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/4-kubernetes_manifest/scripts/1-install-alb-controller.sh#L3-8) ): `./scripts/1-install-alb-controller.sh` -- Install Gateway API resources (Modify values if necessary: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/kubernetes_manifest/scripts/2-gateway-api-resources.sh#L1-3) ): +- Install Gateway API resources (Modify values if necessary: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/4-kubernetes_manifest/scripts/2-gateway-api-resources.sh#L1-3) ): `./scripts/2-install-gateway-api.sh` - Deploy the Uber app: `kubectl create -f deployment.yml` @@ -19,9 +19,13 @@ You'll see an output that specifies the service and deployment was created. 4. Access uber-ui via Azure Application Gateway Controller for Containers -`fqdn=$(kubectl get gateway gateway-01 -n alb-devopsthehardway -o jsonpath='{.status.addresses[0].value}') +`fqdn=$(kubectl get gateway gateway-01 -n uber-ui -o jsonpath='{.status.addresses[0].value}') echo "http://$fqdn" ` Access the uber-ui using the address mentioned above, example: -`http://bye7fxhjesf7enf7.fz32.alb.azure.com` \ No newline at end of file +`http://bye7fxhjesf7enf7.fz32.alb.azure.com` + + + + kubectl exec -it uber-ui-6d7d66c5b4-v4zvc -n uber-ui -- curl -o /dev/null -s -w "%{http_code}\n" http://localhost:5000 \ No newline at end of file diff --git a/4-kubernetes_manifest/deployment.yml b/4-kubernetes_manifest/deployment.yml new file mode 100644 index 0000000..abe90cd --- /dev/null +++ b/4-kubernetes_manifest/deployment.yml @@ -0,0 +1,46 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: thomasthorntoncloud +--- + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: thomasthornton + namespace: thomasthorntoncloud +spec: + replicas: 1 + selector: + matchLabels: + app: thomasthorntoncloud + template: + metadata: + labels: + app: thomasthorntoncloud + spec: + containers: + - name: thomasthorntoncloud + image: devopsthehardwayazurecr.azurecr.io/thomasthorntoncloud:v1 # Update this line + ports: + - containerPort: 5000 + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 250m + memory: 256Mi +--- +apiVersion: v1 +kind: Service +metadata: + name: thomasthorntoncloud + namespace: thomasthorntoncloud +spec: + type: LoadBalancer + ports: + - port: 80 + targetPort: 5000 + selector: + app: thomasthorntoncloud \ No newline at end of file diff --git a/kubernetes_manifest/scripts/1-alb-controller-install-k8s.sh b/4-kubernetes_manifest/scripts/1-alb-controller-install-k8s.sh similarity index 100% rename from kubernetes_manifest/scripts/1-alb-controller-install-k8s.sh rename to 4-kubernetes_manifest/scripts/1-alb-controller-install-k8s.sh diff --git a/kubernetes_manifest/scripts/2-gateway-api-resources.sh b/4-kubernetes_manifest/scripts/2-gateway-api-resources.sh similarity index 85% rename from kubernetes_manifest/scripts/2-gateway-api-resources.sh rename to 4-kubernetes_manifest/scripts/2-gateway-api-resources.sh index ebdda12..7d4ee70 100755 --- a/kubernetes_manifest/scripts/2-gateway-api-resources.sh +++ b/4-kubernetes_manifest/scripts/2-gateway-api-resources.sh @@ -10,7 +10,7 @@ apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: gateway-01 - namespace: alb-devopsthehardway + namespace: thomasthorntoncloud annotations: alb.networking.azure.io/alb-id: $RESOURCE_ID spec: @@ -32,13 +32,13 @@ kubectl apply -f - < Date: Thu, 26 Sep 2024 10:10:21 +0100 Subject: [PATCH 045/124] add terraform apply back to main only --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b06c02c..26aec79 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -60,5 +60,5 @@ jobs: DEPLOYMENT_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Terraform Apply - # if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' + if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' run: terraform apply -auto-approve -input=false \ No newline at end of file From 6003d1b07d995dbf31a02713461f25dd7f5e3612 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 14:17:55 +0100 Subject: [PATCH 046/124] Update app --- 3-Docker/app/app.py | 4 +- 3-Docker/app/templates/index.html | 88 +++++++++++++++++++++++++++ 4-kubernetes_manifest/deployment.yml | 2 +- README.md | 2 +- images/uber.png | Bin 122387 -> 0 bytes images/website.png | Bin 0 -> 104140 bytes 6 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 3-Docker/app/templates/index.html delete mode 100644 images/uber.png create mode 100644 images/website.png diff --git a/3-Docker/app/app.py b/3-Docker/app/app.py index f6b2a29..9fc1481 100644 --- a/3-Docker/app/app.py +++ b/3-Docker/app/app.py @@ -1,11 +1,11 @@ -from flask import Flask +from flask import Flask, render_template import os app = Flask(__name__) @app.route('/') def hello(): - return "Hello, World from thomasthornton.cloud - DevOps the Hard Way!" + return render_template('index.html') if __name__ == "__main__": port = int(os.environ.get("PORT", 5000)) diff --git a/3-Docker/app/templates/index.html b/3-Docker/app/templates/index.html new file mode 100644 index 0000000..23336f3 --- /dev/null +++ b/3-Docker/app/templates/index.html @@ -0,0 +1,88 @@ + + + + + + DevOps the Hard Way + + + + +
+

Hello, World from thomasthornton.cloud

+

Explore DevOps the Hard Way Azure: Hands-on learning for real-world skills.

+ Start Learning +
+ + \ No newline at end of file diff --git a/4-kubernetes_manifest/deployment.yml b/4-kubernetes_manifest/deployment.yml index abe90cd..05e20b2 100644 --- a/4-kubernetes_manifest/deployment.yml +++ b/4-kubernetes_manifest/deployment.yml @@ -21,7 +21,7 @@ spec: spec: containers: - name: thomasthorntoncloud - image: devopsthehardwayazurecr.azurecr.io/thomasthorntoncloud:v1 # Update this line + image: devopsthehardwayazurecr.azurecr.io/thomasthorntoncloud:v2 # Update this line ports: - containerPort: 5000 resources: diff --git a/README.md b/README.md index 97ca9a2..36415ef 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ You're brought in to the company and team to make things more modern so the orga ## DevOps Solution The solution is to deploy the Uber API for the sign-up page. Currently this solution is sitting on a bunch of baremetal, but it's time to sprinkle a little DevOps on it. Although we won't be coding the application itself, we'll cover the deployment process using DevOps tools and methodologies. -![](images/uber.png) +![](images/website.png) As a DevOps Engineer, you're more or less (most likely) not writing the app, but instead, deploying it. That's why you're not writing your own app in this tutorial. diff --git a/images/uber.png b/images/uber.png deleted file mode 100644 index 5cc8d603b58b873473d8ebc12062ca2fb73258d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122387 zcmeFacT`i^8aM1XI(D&wihxS90ZLU$VhM(2q6jS?+(t~fqUo9eZT*{^{(M8R?bOI_I~z$+V3d`?w>V&`K75#W5mz{SL5$$oIY za>=rvb}U&gx&{0~evgF8O)>{iREmgk4**?Du<2!K>)!A@~)2=f~^MPk#FS zZt&idrGMPL0`=tQKhBqrh`#nL>cRkcS#?9-#(T*Uae2}2PX^|4(@T~dTVinPxMjdk zlYQBVHZt(6^_N@`Dt-i}G>){Ko5DN3DGGJ2{1=0(S}@gJU)8klC$_uV;Q;^3&2~D>v*q z_SYwoTN6D!8n&kX{awpcLz0B_2DGhN7;h>uZHx3G2mdt7l^o9j% z*Lkaz46IwRKFpSBFVU*xu(rt&_gV2peV0;mOIVtk_rMxOY0|7cb_xec4bNcldae%y zTiK9j?bpy^;>E>lkhxKIjtTp#N+V2);Q7%^O2j&fJ1+>5T%unSU|J1@Gb$1pceVkSDZUrC0RWjn{kB+!UBW<$2$j zru1|BpR%zf=dOa4np`vk%XJ{Za!V*g1uwB3ggOk(oyY89S>{rfb1~Wm4qOaaoA7Ai zWli!pSXaX&`6c?K;CT{TbqEU~!E6S#+#k*nUdJ3XLDeXrgO?9`D0&!kifXsG8SW8_ zSxeDcweHsE8y8dIxp-&sma)BKrHOaEP9jSn<~QX0QI>NLm{Q-H*7}YUdsvN6Jb3HN z4qwO>9E8C8^Be_Iye4b#$zaKx2ePA={b5c673na9wZ8S#bYk6v>x3(b&=P4qPcm4G z4g3qF7!#gfo;BYz(f`%-RzGvH_)+1C`Iz-l^%-Nhr7dpze$#*k#(kyfdnGrn=gAH0Wmo~5CkV+bV^B?IHN zQUd}t;vJ%HAG%HIb@5nFO*ozIINE$^uKIp`wV(2M8k*V3Erwlx@xJ}CN^5gy_TAbW zv{XzhdeoA7ed2KbMkh9xjvU{h1c4lBt4Q**}*$i+G&cyFm-qu|A1p3mW)naoRi*mr{+g7OxqLJ-a#{Z&AQ3GD_IC|o&YKM4Ph(9)Ut4$<{<^S) zPfXib$yTIeXa}H2B>QiCy|Ha}=IY)1WcBw!o;zFKD-wcP{&%=eZ7i8zj&cpOMx4j($Vt;_mCP_qDnuNj_4W~-9X!gy{bq$5FF-orFube+B*s|K zSpbzJ+?GS8bY+xcm?mlg)D)oiuXaJiux?X*HQGd`z1c+v8wVh%Nq|<*c}45Z0m>In z{ErLov>|Wedw9>?xQfBJTqH_U*O%sT1Vuy4Vb#pS)D95EeB^9gyS`*+R8S(2gS?V~ zq&V+^FYNa2jkRMM7@0jKI7SJF-(QH&J7`wVf%py>zY+G*Zrt>h=e^xv@Qzn9VNcF{ zh41m72I@$WLr0PuY7Y!qBTT)GyKVbMW$74()><{Lr$Jxl6*iUM*URpETS!RJx~B zt7@##!GThMj3lcbeukno&TY+TA@J+Hf=)|yN&arR`j(Av z!+6Ma3p_1=z$K$epG9(3Zo;=gh-WOg@G?cDQ_5nVlALT*)fJrE`K{e|=Y&ZwrO`>@ z!nV?-y~#>XkSTpAz99z5U8TVdq>v_=6V^c#lG*caqC43I>p*C8C!M_fk-H|7PO;J6&u=KG9$ zWWLEh#XNyv`D9TE=?}VQks|{Si>@KOtNL$9PNb{_Lal*ng2ib6E+<96?1``XywBdo z!3K)`zY%I6CM?0F{j|!%`{w2m$Kbv+^kre>02Dvx?5L@rFLM;Ve`jRZpox@VByp{@ zIy;3L+q>OtjCVJ2nm^c(>FDR8S>+{s8t`B=rG`$M{S=L#-X4DVFyh9Y1~THKa%~nB zd3Y?CMGLDj?9CI%FmYLNj6UtL>tsKMD}Wsjh_{j3^GxZFez({Uem;!_%K?rJ1}x*X z=59eL-yIkg6?)e-h$^ZugQPA4R_9Q<&{AqWg|bX|UVY#7WMc4`$W`54lhAFOi`@q} zX)3FAuBd8yZd+G!^RuU{qp|{$4D3z7aQ{Sc7WG|Pa2xLiTkT97kD}>jF(T;TdU-e_ zD@`hTuzGwOE+jP#`4-4)6Y38VFFLGaI-eL~xmEEVFuWh6u{9f>mr1-A*+lUSi=BHb zI<7&A(L*7Zg`s@O+dEUQ@Jzk*lCI?QiA-pdN-Q+7$P{QmDe%$H(@8MB&4kl2Q=VXd zcBc=rs~c}!h;AVJEc5Cqe@t~Vklf}hZjJlxvl93m#lG_9W!a`qSJz^e5j6#UrbEX& z$a72SD?IMETapt6NF7OB50(warX0-g`64oRrT86_O?P}n_-0 znVPi+fFs2IhlYt~q>e$UAUTwh|zvM{D_T*{tgjmix?x8!uG7&Bl6jihW!j@r+!C zF2J_|l#ntaJ8@v5K$9V2qn8C*Jfn8>uP?mZ5%@hc9sM?~bu&Jaa_kg)!XYggzt-lv zDyabn5wxq+w3lOyv3S2p>olI!>vJk`S>=qDoh$S?nmBw9mi5e#%QTCZ&#ZV~U@1;x zw`ssDkOuPXEL)4w%ome`-uhkNI`KBvt%9!40uO+xyn0tQ2m4rXOXhlmb3>V)ok8Y6 z&T2FHet5smp6_BCb|%!5BclbEYR6@`_ZYHGtF z!g~CR>5rIp>oI-k=c5VDzl;$(tz#%eCj1NGm2Ykdjl^xz@3ii;9_o?aB61Y$wuq}- zf5D8r?XbizIxEXca<-#_p+-Cxow1RT>M3^ZG{ZGxwLgS@me?*Fk*Q+f9b8e}Q$IV_ zPhNU6`aUx|dKNdM7G%xLu{(TRqeR-@d<*q!?*%ei>Pqez`y3R*q@nn3;&*99K)XLwZ63u&W^lOrNS`ES-S%RR;xv|wWV@_Medq2L1uLojt4j+t?Ym< z0O0QLJ)5r$th1E_#zSZd0jQ&3f;d8MU;$@W0bqw29)RQyAcui7!1WasfvXrQ(KC|h zP34pd5m#BgSNyhoNHEothWPUyP4jvT$Kcgo{cEYdJ&~?82;<)%HwTQ3c@XiDK_cIj z@REU}lPf(Zp?*`AM}h{rH;8RosddTM_sdc22F$9RF$DK9Oq;{|%oS|}cK6Fy_>5?S z?{TFa)5!ryl6`JMGc*}t23Av!ys+bcQ^C_~Dc_%yZjvoFNMB%vET}7u`e%Bmf z0d~5zZ3kE&YF2Sri!+5L5=J|@k&>{m_D7{O{Xr0ht|w~;tERpQP;Ra#`?o6Jk)qSP zz3H^rrjio1fx+?X@ezF&$X(IT@n&EzEQlE`rU~bBIoHXbPd1Ssa7sk(nE7n~{3@8^ z{-X-$bmlp9l2k@Hl9YjbPqAM6MLIq>s zN)N;ZmrT&jl|G7yvlu8V~+a~oJUv44M*Rjmm=F_4WMsK*H5)#Y>BN6*I(`J%&w5wnH&YLm)uSQ#rrZ!iP= zR*%&?-8yP#F;gK`S>u0D+4(+s_FWV0L%-`4^9#sQ>LKJs5F^wUygL&$hfq(99w|0; z5|rYL(+|o(3$epP z!SASCyx?7s)2)ffB&@Jqv6H1VxmK&*eF)VxGxmMyg`Lmb5xEvWfIFwJFTw_2l-IoW~j`ORyMvn7DIzB4`9)CSr{Eo-v zs%a?Y03^5Qp|by>*7-nFtL|wrv`Ygpu(T5D?m)5CJmZP5vm1(IWBb6@u9G8gKA$A| zMp}=M{aCI5?KagtkHi$X12kJU|AorK>*M(4MYQXW>C|R4a@J@f*lEzei+9D(lRP?f z?p2KpIyi6NOcu2@ah89gDjjafQ+}U8<_#vesJx-)g;n3uO+F%Jr`zo78@@wVV>)Wi zlPpDZBbOYIsL4y5)7!fFox6%0%5^A;i97sCuZV-6di(Un^9-oqyX9wV?hhhtw*)uo zDnrct0FnZ5eCYLe4UrS!dvKrcg>2EYf34@neclI5ZwLPL;it_*AYi)y#r{~Zg7Q{e zju#MU(v;u@vJ`&q;C^~Q-(VcuAHfeCX(tQnIJb-=Mqst^V~23|?VhqwsqWd(pTlYj zgE2(G>>s%=ZgYMNA+Wp6Rrx)-WUL3TqMI1SwX?MiH~2#P%!&_KH{?@E{roBqg#2~| zyr#7_D;@|7PKshuf1O;@Chn~Y%t@ddq&^X-n2#2IERB={Y=o!3=tiu`pH!v*0)OYw zx!Qtq;cNl*=;OzwR=q*;NDD>CX0zRCQF|e;-Oc>g^=FQnh0UrUIW0!PLu1*l#aC}^ zjWcn!xxcF4CoLmfg=YlKt*^5pd%wbusfn2yfIX<>mVm7qTXSNN{m{HdBS9VrG9AU3 z%cu(NwO1+@YE5Q%un<{b_>@k`P9kNB*yE3&=&+b90!!cZnmW&nFK%^h)5XBu!^u$< zQZQAYxt>{JlPbe5iqR6SnjQ+w(Wj}Zaq@vM^y#E|Ud1`IZpUMp;3i;Oy#8*JM6mGp zWr-3KzY8;LD`vj|FTSrKy+|rmP*{gHF%{%fKTTQ|j?MNZ5RPt(>Fx2Kg%z{R0@n#v z^KHu4f;Pc9Ep5f;c5{>7`LtZ@DbmVf?&Avk2JyG^d6wwcQLlli?`Vm(lsxnE@XY^z| z572asA2!~;z8MTog6?%EkH|&Oy7B`j_S67AP9*cTif9`*zf*=P5?*@(&PC)V-%3*a z7u|QX)7gf9(ybEt+kg=2Gw81qbJo6Bfl_5oo&j0NLiCJ2x-%nO{1I5aE%qB`p31`(|7RakdlBFp?f4 za=g1whk|I$RGWQZp0CpPE6KLdXqTbqm3~xMt!R_R_0EVUG;dfwKX&bCt9LjCNZ|CZaDirZk$bmIPCXe$RK%f+H=Eh2OQW;tJFaLMUPD#I>< zA;nn!f?G;I0>Bq5^rlMDYbsM>JA2zEATUE(GV3zSWn4wJHW<Y zvF7^iX>vpDn7?7(nCT?%?Fj6;S@$nlPy3*noKd$OB;-gF#O%$4Opni1lAZg?58Vg! z7&UxU8+eq+GZ7y$7MMQ6$Ly?%0p_XC{$=CPsia_vtzDZION7dA%A-XX?;|{PoT9BGjKb0dFRae!ir+>{OScBp!~bDRMP zvI~&(n-0VLEKUi#i<94oN+ooGbD$EV$d`>=a0lQ~QL)S@RU>ac^A#xbVg_XnECqld zllAOilY9V82EF@N6jWtc0^3_Vx}SSfU>`G1w5l5|_viPhNF}AEtvf9oxiWL}rq}Mt z#H4i&M`#!31{*%fpS$&?uz?&qhLTJFh5bFWeHXDc>+#(~I@Xt%&$Jmqh{p^&8@n}H z2koSa(g~_;QXQwL(5@mhhuJ6j8m=+)1w`N2;H=9Kv0)Y)AqVkSKKZdOAbZ|8#&lYz zshE`=23cmxy!qD9}ez6^TcgQ4-;t$bTs2Qf7onUET^hevOy2hjNq zUhsC{MpOSpb@_1k)A6)PTmQ1$uZW>mJx3Pr$`K~dyZhS1uAy-IsyADdK>=sDw4=IM zq9d;M95_&O`&adz3JTI)HS~feM}_%Z#@V@k3EUCgN*>}uWOVcuMQ&Yn zR&`6=4l3!URlwKsp#e2By)EZEt!u34YiK1UeKbi2`**~cLU{gL;}_I)kmr6{qF9qw zFSAq!QA$1oN7OCX=Cwrh<4KIsu zL$Rq|_q^1^`3_G;Dv*Faaxp!BnZ7H}pVM_vYIN)OR37oS9y(V)+I9X6{ilB4XG?qh zpYddcHz+!{2JfSOWv1;Fet=%$Mx_QklX-$vY=q8;b>U?d)4#7++m1)0CeYRfNl^QS zO7&5b&)B1$rLVGRYo;X8g&oA22=Ya%V~#k!W+SCVo}$`D0w>w`;tZ9xTn| zOUcq6tfJXa#%KI(t$}96jJb;(^HT$!nyB08!}erW6H&U!l%XquM)ifHoI&M}T0XIS z>2rzNR(<6Sz$G_WpavJDi=(rs!3F^x9bL}3LH14dRu_078Hrbs7LM(ou3Fb;BB@Zi z@mzDeSZMg+ZvHq@tE?E`W6j+`_&Myk3HngOkC1?xGjL>DrH(q+8IyMt)XFkeNN4E@ zp5zU&3bm@9!3uRxKe1bS6AJ5Et>Me_D>S~pLeYk7sVmCcoYGR_KQ>^3@=qDsQy4Fu zZ|C5~>k&wG*f`C5(5W4MH3)6zTNqMvPf%h?+8QhcnuwbWSB$P(Hd)h6%&cmq#@%KP z1bn7mj9&&&j%k;4R2R!GqfpbsI3K^thkoYM&jScu923+Z8z)KUe`IhEMtDu2V;=k{ zIC;5$cR_pbqFnWoUKRrCNyWHBd2D~~MxxG!ZG>Z=Q0oDu{(;L94yITl(k;=ZvOSze za9j`ePNC_fv-J^W!bU*>r8eKAH9=;l5k$SD-{sPB^2Lu+TD!%OG`UyJk{Jw27|sandsGIDgW|96R4V*N~(`+7{RwM2ZS zby|>~RtP7@kabZVTL|0&{YeL2Z_o_$s)urPNGrT$(A$^(Xs(KFWbGMl4cJq5P461g z8QFn>q6cMVOdN@kZ!K58=kM%eZ8g3ed>q(AZtdt(mb=LlXzr3LLMz2Fckc6UuJ?TU zugGn!*<}%~2Kf%wTv{-fOAgK=$CHhX$8s_~>mTuy)Z7xRt*_kAH&k=5;oj`jLIx2| zd#8Yc1!ip{DE%FNlLm_*A1eMPO6!z~lD8OR0Ocsn5NiSD$fzu^(#mQmc@$=6uJkp` zv0mc23rA^zKBP6P`UH_J2Jcj9Oc2U(b1lEsZ+lGe zb^DC4(<`c_XK6jCvjO2u%aaz8$3yPTS&_Sd;XZue@{Vx4IR|NhRXT;Qsoz^)?3qVU z(vJB!nRNgn@bc7$i3HN8HL)AQRn_v{$60;6ca2zaPKe+r;L}^VMH0oz^mI^_EOT3x@6Ojp2lkGq9PRYTbc+Sa#2B&09&FE5!@kGA0eMkwZ4J8(5)GxLr7w5r zoazqW4X`HtjYLakg!LG%cC-O??IicSmQ3Uxh!Jl@?=xS0Wvl^DA?%z7HTnwge1}Ws zbNC3Tm<2HKk~N-OvCx~+-BqOyZlJ`uA`+CO%c9H9#DC&J9{g@D-0CJe{WVZnLce}a zW#%U<35@nnMU`o_TAq6)R>igWZ^V!;m1V3UvveN|8}*m98kls33~ZgzAw z9Z;RK?Py*K@cs$>nNU!|?*K?!4yCxY4>={btWg1F(G5@wC`i)win7!nnCED7&pAo^ zM>8!o=cAhf>FipnD{nm^{WaQ2ovRgU$a9H-EpH$zs9%Sq7VN0<&G0FB0hlHdDK{OK z)x1cBb&pl0p=@WdR)C8BL2sPqgBd0e50&(JbJZ&QA%I$N&pLA_VH079A_nm+UV2*& zWnnM@K^1hqc!p21HHn_>8@D=*gl*5j#`{+itbv&5u-kPc7(Y{h8a5|biR$vQwGRx) z`S(Ccm8&&L-sUAImNsW1gH3x!$~vCX?v;yAvOcN#ARoZDLO1}lHEE%*_Jz9undhc4 zMSy3b*sW-feKu=D#zeWrN$z@xOr*AmdAK&fytT=5CJLnPei_D`)aevYFjxX#vh)bf z`yBZremLg#4`Dj}=&EisT+x2}e58|p^WyA2kRoK9QQbKzDDad=l~mWYWF9x;_P&3T z>ObYELq8&^q2j)kRRhBGPIOxfHoT%b6=zHt&G!p1;5PAr`E$}{Z^>-8^$cCE;dDXc6l{cqD zCGa-Pj&}0;3_U^N%QAfbJ$T!2WHMQzgY}A@TVv%-AE?XLb9DAp`o_Qso7Dg&(o)&? z1%rncIFHP!{vlu0*0NpBYfn+Xta0>H?0cU(`|npb@-HD|$^Gob~M-9@;60^z#r)MpMXc)k)iC-lUQN zh^EWYZ+lY(8ECftz54T*Y@sLp{O2V4SA<(v|4Vhk1_8gheW2A9zxDj!CrwPZ{|z}< ze{)!O;=|N6;fGgM%J$Wx=`;sU*~s1ruAA|l9F9HihSi&!qaBVg9*^sUgwkhkJI0b< zCtD&d>_CE~kn^D&0DMqHmacvD1R(Z#_&E>lK~+_8Ylb`uTmEW-C@KH4?>#*K1z&P^ zB3hJ^poHNKJpX8hS-<~KUVug(CDWk88t6#<#*9(aw}gJ=)zRJ)Uo;4bwZFv$ESvJf z6VF%Oob?F!R2>EC!zbp@S2oR7j~nXtT`4sn$5xmc^kGUop>ws=JNnX zjj2lj8w=VgE_Ebmj&JzUNHJf%*L@)1NyrEsES~$w9@@GTDhy#cGk~RfInrMNRpgg~ zRul)Tn}M;~9x4|=88Pw-GA?SQSQt3VB>~UfH7Dg^l0fL;>EPIRf8-^_4l3VGiD!mV zdwh54m@`0d;OOZRyy`0>-~#1@ZVw|rseHON23BKjDiaPPwT32jZ%{5O47Fum%19ez zpIF}Y#YieZGyO!6f0fsC$>CSLmXi9C$e5wSW64p)CJiw@Dd95dkM|BerzV)`Z69&! zYgdx$=H=rkMHrACeMAuP&ac`X=I^PU8dJ2Wmhy-bCF;ysD|2$Z z6zw#{pz@Ps&FV6*$mj;|(cK;$VRHY|L{ZSW3(+t^QQhWaxp2gKZzFU9o}sR#BZ>F! z65NzV@xKw0<=QGeJ_QZD@PyNWH*7f`zt5bgW2 z2s>h$U9D9@f7bE4TVuo>WcaZ{B?qr1SXBFK;8E^KjLdN)AuZ~VDI+petK)^J8A2LY z3J}DQ|FpfO35aS}Bxs>p2);J+l>=x94w;D5j3C1W@Qm@U<$7jMG?uP`696h& z%^Lk8C?q1T3Ol|!0_Z7dsPGU8HGKYiKw~Lgt`&L?r|~b=kqGVSGO27r`W%+wB$2Vk z0nN;tJ`1Aj`csq%rp#*4O}E=))U9_`Dd}z^uWx&FHNR&J9)^bSPhE(Dk#k5VjFr*C zbjj)i%uAB3^_k%bPO5&1pQ&~5r>L>dn+NEM(k+i$R3h(>P;s2vfr{Eb$9f(DK{cYL z+Y1rK>hKrv3MO1Tm+3ZMIdcLz>Tcmcsk~JVy&7pTgYE-)Mh%pa-;=rG{ez<3ruea& zeIWPj-v$c4pd*ZYV0lG7s9=H=CmB7A4tACexO2>CIf{J%?If(zY%NlNkkD3PeBVxD zC($|Q`4p%DQ=fOnIJ2-Ii-w^EXCGq)ICH^p`GxFvHYx>rcxC_}m#UIEIxIR)p zRC-MY60ACrq*X8L+%@>=&6s6F;LL2Ja`3QhprSo+x+)pk;-DxsFqw?U*4~*}XKg2i zXZO;kzq2i9K~+D{x{~zvsvTsPhu`4or@FUCGjXi z%Ia|s-RptQN(bv%W-u8HrZB8~zCJZ}u}Z9#lS3@3z+>y$bsQ?4{Fwq@P>?Dt5{U?_ z@p~8lQU3f6`B5FyU@e4%PD$W5d$(`Jp*H~!)8wJ@+F8KI$Ovxt|6Eq4(x{ zLF5D0sK^||t=lN_ukEk##lmu~fLZoJlx8+ztFkl4ne~lgQE%<{$p?(}?Z_!y~^Mh!P0S30$6$wxWhsCAPcdJ^7SC}V2L?c7{+_(?gm zmhv9Lh8XfDw#|{t=nkZ~86)nlI06#t2wsw#sR{ zk3-8YDo#hSgknti`}0z>O_aeBzV)@>K0(3Eirg;*N6@Z7tmTqCg*^hLi9Ra{_uCGN%>1%AExnT60TZ8LmvZN^B`69bSUNb{S3 z?ni4bQ%CJ&jL7Z&NR|DbybnyJaPLPWUI+Z#ptkIy!gL0TAweN;n{MLqnSg7h^EtmR zP9Xi1o3QTFWOK4_FB#Ix@NP`n(pMK}wo#N*4y5nhlF?K;+b(nKOb*xJEr<)|I^&{vAyt%0Oj092A<@4 zrQdl!s^0ELh;*7Squ3{OxLvF&#$OlZ)id2eATmXN2_x;>K=|qWHqEcG!Z7?kM6lWUX}n!Mz)CYI$2+wwA2n1r4$ zw@`JkEP$8GR+dsn+V!&G7qgESKog*k`{tw|tM=Q2z7#o8Rytz^w>SyF`}*+A_ZlYb z6o$8V7jY9|m|JeG>99*4RPaXX3RLyZf|}K9hr<*HW3J0g3gtNIcG(I~F{XCObBco~ zsX*Ue!o@MHf;+8K0L&_1;n{m!+$zw2hdNv5!IR#7O_yQX1#sG)Vkhkjw;Z@$=r+oi z2_k!6NBf07PKzIKq%B%Yb)3#rHP#zrBSo>Rv`^-9wX$Xy`-`ef%hd#3n|rp~jn;$@ z;4SK_`|4X@F^SP~DEi7_)Q)B5gIax)CoT`Qib(IPc=U0*+MpH0MN?T6p9Fq6 z?d|H36g~6G8B&a!2I-to5>sZaByndCYaj&8Ef}LFNUu-;Idj~&tAJlp^YkNt`zDIJzWwbgf zF_wR;0X_vEp28+p-Rw%AJTbGc909K-UwTt~5a(~24`-jY@+v@TWn|i;i%@NpS&boo zr(4HCVd8-%*zz3zVq0)tR{7}Tm^-k29>GtI+puabXCwgF^LA#n?|ONdmNM=xtQ-0E zh_altrc6Q;c0$zSoE*+gr=TG_y}E<#j$jdozexA)lx-Bah$^-YW#Z$-d|SWX5sW)& zPRW>;vznDZXZjRy1L+$Tk#yBOxZ)9a z^1I(GbH%n&U$keq)<~|mB;1?)BB3Y&sx3!bH27X4nXPqrP!wUv9Oj>~91R5hI0r~; zaM81rh_77LqzQWcyScPggI3)eEd;)UbcAMEGl6fGaPe~iNdFvV z{6s5vyR%mKX0A74?jTJEA;U^&+5A0z&ZKk$CV3+!lyVc;w;pKuV+vGBCls_gf=2Dv zkhjw0V%er3S-UgFkkb(P+Js^)`Z)&u9Qi%`dMbjJTD1FS0Ei6S9S`fGloebOh<6zQ z>-xKP9*MOp8UN9^DdqO)krt}|O#y9>n+gfJEB#E6=1x8T{izr58^i}s=aU0k2B!1% zy6&pcd^R7T4R#Dyng~`6Q#(K=!2RVI@peR#5lmZ>Fc>#?3Dp}Lm<>uzS0Ve=%(XGE z(qE&>a38me*`h_;KM1ye3rO~)fn*;zev#yhd}XKg?Z~8Jj3y|lHN%`?P1#+dlab6B zCzmpw5$^H-cuZn^@7eKtE+Sc!oYS7k+u|E!$`qO&L7#kR7o9*I-lK9aE8AjK1wq>PIWwPC zen;a;K^RhHm5^4evZmxPpYwrjG2m7u4iBP$67vdE!AM$wt8O-3;z~6OBxXaqle(uX z_+f+l(&6ig_3bbyr`k2k`@PIg#~Ev6DMq0CB|$3!*b#(uOTr_t#iD}R^X4;87$uau z#UdMoI}#R0sPxS~2f=$lE9M~Y4L#vC2aIOjKd zMy1z_m`APY{?yZBjaCl+hNlIq-?JX1@5M)mN~|{Xt&*bBCG&((rQVR|M_M|2!FG9t zJnDx4y}$(3>P{Gdqd_pyVDI$&`_cK{e0PD;1F^B2bgJ73xf*cdNvg6gYC(hK>vkQ0 zKHht9NUAUa^ZIAoD{U;^OzjOvPx%+b)~nQnel1}H=rR~5CEaY2$ znZAE=t;9&?b^Iz(cily^^~_-d5&OPSWbcEgU33VgwwK)pyMk)w4_T=X<~}ysqTWEq zF6-N^IrCdCQjhUdrgZA}5pvOeGAiaHJ8{;|-tK;`Q&gBoy`N!Muar8QggN(TpX3oE z*sh$bmiuixbVwckbkLm67*$sY0_8$-%W)gvvkN$?k41Wi)cBHs5wVuEW*7_np^nZr z-e*)u_E#?3!IW+xIXaCrmvomuC#%b8S2~= zRV|;X$QtmNWXI91l#RfviQY9)^Q{AQ0o#)FheY`|NHy9DhtkJy1RB_kJ(w!nXByU1|$%Mgd4@3Z+?a zm!q^5P!d;kFI>E^mX)S0J_YgO_j=}f_it{TB)&pt_D!q^qr%e>k|?x^f$@m zXs6(h^C2GMy#{>#6sCa!X(-KAEiHHZ=-~qnVPEz(hMgxw-c6uDHuyES-UY_+B1fOh z!_m1Y9d9qt`v0Q!MZLvIe^cKCp(hGj#K~ztr2PIA>yW`z)eDn+@UVfFC`_;5rL-R!*68v_l!JoD1l);W8qvUAx9KlC?8*0zTTOp$AZ#Ur;weAKya*NCe**~F5mh#vf*HYn$QcfsdLVg6?Bpt zg+aQSWrbge)9FJc3Sl;E;%Up7wMCI%M^@Do9 zKf@PtevLk_tRm1V>hD}p$h8d*=h8yYpNIY3vwzDjD(#|?#z(A<{_R~k$BzyA@3?3q zwQ3=`|4yY_>96nM1u53U|NU7*u!O{4e!5S-=H~1x_g|hzoL}aXj-{IjgwD_9hsb4%-~QK{em^<0Zx>C+(2i>IFTVfPNyy=q z`n;&0x?z83-gX_k91Dz6=4VF#-#kqXKKg%wv_sHFE!MxS^NGn)cu;#v@%T3umW&F1 zGf`BjY)$*{NHzg2JuEgxr>lDKQ*Xxa7ETgT%o29=)FN+j`2^U!&A+i;E!w<~J40fx z@;`<_K5KMW9R4ZAKIZY0ecLbjE-ka(u4%a5Hq^3z7HbQKqv$Cm+S&EtjW_D0{4MRt zg~QW2i#R_kej|UhACfM=&|ie?6W71rsza?(<0hb#y_;e(CnhH1W>AqkZG+F}+Znl~w30gjDX?<*1WEfiGI< zlQZ{KKL7Ez08)WVJgSIUJm9`ffGV$CJ?YS0@=@)d2)7j;796bc+w^e^zCww6$W##e zhrON`)-uJfI|w8?y=(E#od~hN-|DlD>|@kLYk`Y6LjLAv_|2=z-b;Y(n`+wWSXsK0 z-}rDmHsLABRa~#L>DhO%L>dQnT>($&Rf_2y^$XrTR9sUn-8V%U>&)jf!cG9aOx^{M0o zuP#}Z6|R4bKW#3pxPUWnuLAF{I5cIkc>8}^8d&W8QO?zH(50hN#jU{Fl!`f@idG)Tur0e1;Lh05S0L{^)T?jr*eYTn+|$^H~yYtmI%?r&EeRQ4K2m@-qW&AWOjdfCmg#}*)Rnidv}@Orx2I=aKX*$@ zk4%AMQD+F`N}O3YtFY~v!%;o6MWRy!Q0RL2sLCQ@pJXpRegBJNeu|=h7@HKEs+96X zipj@X;2k0D59p@{;)X_)AjGCs;EpxFL(UkR#&F_2i4E7tVOd zCd8|O*bx6Ack{xXUJ}9t3@FQ0>bSFLjO+Wqe(z7#jJUFK!QD?zFD;^xp4C}yT_~gK z=bnsbeWzf_{VPLNVaIa2MEsI1FiTR6n5@AaUL-b_`+?oqm#ei{1{{}}&tUWAu5P{m zZGV&Zw-1l-a(PoSoR47@_@ZXAKmVlIBI$T*x#~y<-BJVFxbW@Ex0dcJw~6glG7MUO zu_ym=mQ`G?HCs!%!Sq%!w`q!&3{#>|C9dc`;b3Tiats zli#zy9-|QrIXxZ2(VAC{@mc` zg|hJLF>gR`O8a?3!-e#oUzsIq8@?$u@3(!96?nXT;?9Fnm)BC=*6e|FBS~HRn4goWDw5I%3N}x$Zhzt_oXW_ zJ(AElGFqG~ZQAg$a;oCM0TvL#^ggkeH^x-@h!!Exg5MPHI3zP{Ffof7i&wO6ip}f# zgzrwlO%qgyd%izLnPxcD<))nEe2IjufFCsKR)zCY3)UkBm(+dhV$@Uf_zDHfsm$jf}M(|z1-|qMG@RMAz$Hz=CCRlrhDRG#Xpk#Ee z4eKFQwKy0ZKXAyF{A}N1%=X%5m;7#E>x0snfgd@!cdn(YOU=Ty@DQo(muk7+s7d`Q zQs-=$@rrH*2TuypotwV;E~4w>K@d5*lqR$-)Q=~=OZV-r=v(HR{&}Zdd5>6e{;lk9 ze*4LXu=^VyLbT-5vFRg0i8FJHH~KjS_+=#NOvA!Z^^nHWeeaGoenAjOOEw+Sm-0@b$fY;M65SVm>DUwLrE0lm8TJ_1x!B(p8Jjb^Mch1BMbRgF z4>8=~1U}Ow0~is1XM=uwgO9u(Y>MEJpqK$~#4DpSV(+xTYhn)wNtAwxI9aR#l~7vb z4Dmi2tx7#Q)djjXhXnc=3w1r@A~12C&$e$_G;8K&w=0AGK0Er$DZp=d!W|h4WbcXo z+r0GftN#W97Hu+6vyf0Qux8fNEisFhvuM>KD5nx zDR-~SPW<~h_ilPPr}UV1WHBZGKH82wAj9)8)ZF;*=iIVNpC{fB@IU?v)H;!O(LcFQ z;qT{s0C@h7nEfMWixA(uHvc1Le;T5Htl2{Q_K!9D)A#)2G#7%6f1Ku@Knr}m;S+Kf1>yQ2e8>?@P}sqh)qg2zYz+!HMtN*-gE~BrBO8#hgnNSu_|jcx-MB% z-rB!mq4W4N28pn~JTg1hJ~71C&-n3o|8tDK_Lh4Oe9p6QB;%2eqpfMAe4e{KJ$afc z6i^e$L%C>9ZjFqPCgULJ6I&==e;VXNX-lK#(pvqj-9?6J+oQKJW{@PQN8GnRi``iv zgE)ksxI3&dgYsvG%}BUl|2MQc$(nb!SJaqj^=;{&iO1g2!i|{>4-}QPrjP|cv9>x2F;&f8qtmP4jP#4bIWHOXBm___kRZM_Vnm)_U5FGV;-6(}QSVlvid2zjG5O4!~u zIwSqR#l?%tLC9qSnvC!;VsLZDm)U%RV1lq7I(riOdhFFRhc-qKdTJD<%w^5Cn}yj` z`fbI1{%_@#C%GWzHIp`*kDo)XgrMib&|hZ1!FhG?SW}J{r)I7RXhaEP_u{JapW7VL z212{+ys95N?;$=nZcPYchs3@?lDYl%%^8;mR{OrFKIvXIN|F3 z?`-x|)1CHQGw}Rz3Sre)EcgcjzE+M_*4EZFy}i9#i5T#Y8(=a>b)D0G+HFU1Fl{BK zNb0MrtG8m{jX$@aC+EBlzx5Z9f1-HERIpEOHgo((Bw4n5IvenI#)0fd@_f4YToC*8 zR^AO(pMMyc*Fs)fA0@TM$jE5GJA-@45BkAY*hJtN%~8k#$_=6(>&|F;aM83GdU^%= zkdX_4-2z{)rlvOVs$O~x&}{S$l#qpna#Ld8BD*U4eQU|Wag5-)-|ETPenr#NH>o@m zdo;ruy|r!ZrA0NCq$K|v=U92S^31v5!#dE&KTAB*+tYCtc z&K?$A$b@V0?ScqiSj7y)OtFdf<0JC#qjw&?Rm*r-$*0taL3awiiV1e{*crmWxk56h za9RyYS93CW?tj3jyFRB7?`-#P1?V64BZLMr4pCjC+yfvQ80`#^W}esL3f~L6w#{a z=hK4r41v$w2N>jWnqkHCX}ffN*c#!CityH4Cl#Uk@tSK+{2 zV$^_oooX@Rv{;zP_~|5TNgYMZe*ZMhLJL^~W`b{Kns{AaKb3DkmzTlGo6fh!U2h-q z6SO2W(mLh%^Yyp7r8j_I4dkmOKQK9W40fMzEQ^aoR0 zqP`((57=*HQpqw!c+U94on(<45kt?_3>4m7y9tG=3~6rC9bs`=_^TrL^lD zJa?)IUC8IZ?!YqFJ^S@9%x?}T?fM(;xTqn@;XMfok>P)mS%>Wpn#j=-G`kAW%&DI* z6&1J2%&l3q>e@2%UzeG$RBAiEQlDy)|NYsQ&f@VRyU&DYMQ_|~t$plXDc_SiZ9R56 zXvOW2T_^NUh&{dY_>NrcvY8CB4e`d*)sa?QL$8iE712Lh-kL`ZB#!FUl%!CrsO74Z zmo@9Vb#4sdDhkg|;aL6aTaF0khIC%|mu<4RD1(@OH+*uWImyC)s_{ewBJyRx?RA>p z8wa`%A6`AT0y=j*Y=}w_3f4~)R?`yACx>VE(HJ${d0{~gZfd_M2b`~8~F*K)_0y(`u? zHPSIFl5$;~vOP3wi4riZ4(=?@dcQmp8Ajte^I=zOZ3uVWub1$45%aqm>uH}c2Zw4j&@MfEODCUs#(B2cB-+`H6XWw$orS^hE9_ss^*KbC9DU^ z%%6^}Mb#?TEibOmb%XcUTd8;d)x%GMhjTAH&Le&&1EYJ=G+n2+Zo4u_0}VGwM%_26 z_CGvs$hLYr;*9=<6SP#(?`QIQ88Mx^fM5P+Pc#jR2WADA(yS6VY@}>d2cta0nsNsIjtQ=5<$4vWm>=><7pxQ zqcUW%AA*WdUvCcb2zErd%*_Bs|N3ZuH2wIw%2A9Jof?Nx}ypXT0QG9ha zp~QS^HsJR|)|3NOCgvV@lJuxX^1SYQkvO8w+z;I#bh|#F5ubXW3~?Irxd}b5WRwkjc+?6GD4HONYq~fd&qgqLI+J@_YSvfjjW-oTBCwVV3kvn?P-`P1 zt-yTK^FUyU<|1xVZ$k_|Dv7-+K3!nAXgRcF=ihHQVw{dwiMtPX)$tXlRxB9e<`l&- zZTgX0aufe0Hj{mT#>{Y!)JQZINqId&kdpuij6}#!-{;>p*fWw}x{zi%93aAHY58$3 zG14-EuW0Ob4$5OSWKt{Z?$wnBNU4f0)?9z0?cI2=isJax{?+fhyX8ZyFIl3C1yVfC^L!L-d#kZXxU}oP`ZJ<=+!B!0hx`_ z3-K!#B!79LW1KrSUi7MDO>8EQ>+F95*$8A67v{bF{-`)ns85z_^oyTBjz;>F+Kl)g zKG!14Y!R$#JK(v?G2^VPD$TeZ)U5K zOzn2dVvHKKdmS_HzbE>mxgY~$0DQE}XTOs~+?^C^skfC&z1_Z8IbYmK|MxzoTj@qC zxbg9o$qfDstsj5+uf^fHe(X;2DB$vGQru4tgY$A(-Ef>B7%Vs2opv+4d)C#X1*8i*{KI5RA`>?p9`BVJb5um-^ zrKntOj20KELK%hWs9BcxqShC|C>IYwi$ZiL+Jb%yS${XrVui>{hVzA1{^2GaSybQ^_%XKHemj*3k9pILf#k@~7il48B=P6%2I zu~fyMH6DimcBDPpy5=`$%fE+lw%4zV?=tcE1i3rN66bMO)T-`cKDKm~C^SUDL3!x7 zh)mC+>r}kn>MfNsh&>>hQVPB1*$O@u0k<_uoNQcxe|h@|M%-g<$@~Pi()VCpJHJkm zpd|2eyHRV)^Q}>$b}f?lzL!M96gTjQCN#*;JHrjl%_)0|&0}ehHBW0xZtZt9;yJRL z(j(FsTT7xnABt(9BW))$KuRhdbk+ko93(Ae0fa5*h4$SCPrU&;`>y^>tCDo|ah||4 zLWz*{y(;YfgqE<g?zB+D+ktcHln>S`dq{L_&OCnNd9^q zKcd8~mIx~F1oK&qm6ro93vCdaOr82Du@<2G!H=Hz8oONJ)P;T2zj^Z*`k6pf4858( zaWio8o?y@2$D`~Tt_sx8M+8?;i}ScD&FBJ=cB;Ki0`lP@g=t5s2AZ(zh|?YCLUAgh zp(7maFdJ29H%hP0`x{z52xwWM5@JevnPRe?fA76Q+oNm!fnvOx+3GscY%g*+r)8db zd4+(5!n|v=EDMeD8!!zYmgyRoMPHs$sAVW79Bx%(koWqqP&?KfKgoL24vJp5f21px z_2T2b<2PFWW;SoqhjVkgk9!o`N(cVxZDX;Nsj3l)HbyAZ^w3Q&yMx|o;$2b;urHzr zk~3vHyNlh_)3sm0@ghiqI1uRO$!O(x*@fDGN^x&|mtoLc?ofZ_?DSweC#^Nnm`1Cx zx#OCTM8*`k(UJ^+?b4#@6@*qP+*#?Wxq+oitn@FfK56UKX?`1iE22(g1gMO(bxzJ|c zuBsl=SzKfdywgP3+7}LVh3iCgC7SB?ZzQJWZXmg}w5f^i*$y&yr2!ycm59>O=P?Wz z664@JphQ{KtM6)qULJ)hjl!TF^h-$FI$pF6Q77g1J8ChBSZX^*{+f{Yo1{M&$S+(^ z->k-QxjayeB3Q1hjY=bGbB|X>3!2{Sv2Rt#=1kV}SVrUe>>3kRr;GXPBZSOCh7Bv6 zN29|QQP7R#Rr6nN$zPr$lz?@Ir;|xL601(32F?%I5ji*_=$GQ&pJ`Z=XyrbsH6Csl zsDTlS`l%@7n|PFDKe~iDte(3`7ol|F(ohevVgGY2ht##7-)o4{$PW-Wz7+e2nq)97 z76K+~ldRdXc@F=opiPm|v`Y36g%p8YCh>OD0WvBEzU%WN_3}i1%q+1VZ^;27CNb`! zPomo%6YQ*oZ+Z(Q>Dr&^r|r=GwT_dvKR@87%QUs_U^*;gI)34R|9I{)lE8wJJhuAZ zNfk{)VDa?WqxC;zQ-9YR|9<#$vmcb*pFR6SXTRiM;6nXjryr!%AF1(2YJ5|q*ajJY$;^eKkqEP!Zbxh?X-#JaKCoK45S0N8}UWD?P<1E7m#z=ZAD?@r+u-JJuvfjw!ivT8`2qKt}@veKU_SJ`t-!!^U+jXN6Acp;h z#(nG}YlQ6w3WhgCU#~lllCuUtjrxd?c7`R46*N*280@JJK^!Qn_d`ahmiy{-3~(vr z?j=P5Kl~wTdPp>8o81>%16(Od#i>ohl8xdxd9;9`Y?vkH%S$E2jg^dzo&>{4ho)!8 zF4l(WTEQ1;>z2zk&C){nSIh-=xOW<`z83w7?TC+vI03+n10{7t<5y;tvSew=D4{E&8Y5h$0vKA+^+4)kil%6#$@tr60E@C0% z)q$*$MEurLXR2hrK_1i>>bUgwB17{)RDllb6b&j(BY@rB1CWrGNnL!A{l{ZIcO9e_ zy9~$6sravppxo?SaLsbr!-gn82|5cAAd+wY^ymt3dKxGE=Hn|Js3m5~rXpzR)Ix!W zdz1hosMkQ?QQHMXP{V{#Zu7MlJDenY=6s~rj@1LurT*19jud`b2Bl~*AvlOfHpnuo z>wY1+|9dhNgu72vee3`ZlN13U-U=c}Cqp7;H-ZBJ_&0Mo$&(PIv$5FfRCX)ySAy3E z+18KQ!2$l%0>J9%++!;O$U!mtv8E|8n|>`TxDWxL_w~qT35%Yb)P0Y3(WGla%}W4W z-5R2<`>G%8N`IJa08>anED|_PtpYVHFFSzW9x+-S7=BZHMLZ^`z%m#RIUfduGseNa z-1Bsor31!_o%9xn=@y@d02X$QUDp3&kNa4hPa*(3Q|4YcblOc8VBZr_>ulq*iE>bM zh^2n=(4Jr}su`=E*K)h*dFsDlGg4?7P z>KctC?#2qpM2Mp2(+-!knN3x+Zvk8yiCjpBBrIVsq#dZywQs)sYGJB7Tcu>DMEYu?2>e}z z`#`lY?qZh$9&kMTJRM97ri_nDZ#dJtT|R%_tRq!babt)95w3WC(93>l z(8qX(C3*+#lgoc;9zG!}!*onH?ZAgNK#rjlu2qJ_z#pB1tSPlU6cd^q3ju&4x(>9g zup!}d&hTvSl5`@vNYz8cHdU#mr`}hzyfTh?MNvXKpcZ-_|3aScDhP<``{)Qn<2w=S z3v_XYX$KlV;}IJKL4c)E`?#(4q7;*2T<+&#p0EdgoWNR_q12JHfsi-EZY1x{I_b8S z`pwJ(q2=lVVpJ(Q!f+xsrw8~$z0k7#(MG92e&7x1bt1Br>{H_~|CfmLQIDhhM=$xh z+gvyDm65tIewsng&Bn)C>_XcT?d6hZptMMlY@9`TEqP!8#E}xk)@V)Mo?A=Y2;)Xw8>m;8z&_Vtuy8ISbjkV< zIauLiEWL*_#_-j4$tg*p#yZy;Lp>cq`VLnl9 ztyDxT1mq#CB+VHqijBYFandPua~6Ir{BXpiml-+p*qrX}k@OIy)4US%pU;iY!#3P% zFQO=mhjh7jb`6QhGiE=-z;pYVHgYQ}mfBj;BGMtLsOQ(m5L?lz9Hk$qZLthrw^1?lFxcID`Xe#LAJ z8;me;bXq|B^%@}Xj~;#2ZOU@!B*Ce3J*+2J&RytYG-Y<*pK#tqtQ49l{cyeSSSgzT zljusUrtkAQeE-_C2};eSmB1jw_w3^WHQSB@9> zIbMooh`%*|M>MfJ@Lfa&e_~~za*^{}29=o+m4h`O(UgvcEBz&I6DqK4q;L(}#!`)W z(ePMB?eqHOOjvA1PvQjI(Z>x z-7fzX6}EQRcVS83lEAG%tg-+7p!uO))VUrk``r(m>|s^8DKa7Yk!wMEyXD}n8#~WX zzp&hEM+)1>#2Ql^f9rcAqeHKRKUd9n|GDy5gDcFQhW`Ga<*!dh_>^Yyl2u4d1#r4> z*8%)qye$l?2kCdnjy>IBc*)u-;DCR#KP`)_@3YjixB!d*(|MlPmu5ON3WuI@XF-l; zTpeRxkh2a2w>g5%36T0MPwwPA#@uVL2P3iHe}OSBD$GgF{78()*hRL9{VUZ1wELmc zcCb1cB>{{>+5vri0bIcF5G!KYq<5?sSaIV-*+zO3xY@s+1X!ezxSpia}i22=GKdJgG( z2;k})H_91GpS2&_uv=dq4GW7$&AqDt8F!72lnvDD|@kj)-x)`SYc%|U3MslE>2ye`z2jtTvVhB?Y4Pwq2~A_x&l;)C}I-YfkJD(CH8LajzQoi?{cyTNbD?lLoJ{ zJc9ek9uyoFBr*4K&erCbEJU`6F~P}gHvD#aM|zho3oSFY%;J*oj5N)A!`jLFCu4FY zP6t5h(-q%2C>6>fAGg0N&bGU+14&8Ct5vK+$b~pmia(6E?@-FU(78{z>u98ycmux& z-p`@xBl3R2`8{icK5XfZSA-A1mnxnm@9N$T#5Uy-gRZ^l5K@X<(`ipejoT@eS4yWt zUE(#^PuI&EU0DG}LK13Y9pAkQ1#FBox3}_740vYN6#LJzDQDnhz|Fm!e(WaP8SrLV z<`5BH?SeCxAE;@}alYry7r74~(`E6F?$oP;Gg>mp<&BJ@VYDSRx0(SoTPNbMoNdC; zswncBu3|F0!v%N}swwqy=K%OjP{n6VSGy%owM#-38dExIlt&}-xHlT)^hOi9Mg?^6 z8phEfST1PkOgR-AP3b{Qa+z}}-H-K1Z=YUcgl*>=4EM|gf+au0Q~ax$!Mi_hg6Ji* zOCg?fR8uyHfXuA%iIj}#8y45)SfTZ&tE>gsL^ab`<7ET5tUMOGjZ^+cRMF<6A8Fl* zV_b8jX9_$bDQ1QNv9xZCn)-@;@k1_-OJy-(Ypk`)F1d|PK4~}gV$Z8Wu6MJjAb?-QvQj!9jlB+As^rMR*O$)K zg1{Ow#<9oL0TtJ4@>IX#aY)LPd9clFbYj)>Pw1EOR2O}ydDHVg+m^7M=NBL=K5u&- zbp*Ejq(QTloFOPpTQ|>K!&zlEx)B|al6iy0h!rccUbaiB$&|NBCcAZKubZ*J(ZS9HZ4H)jNKy*o5^Jov{jBMgm3}T+8EGzWP9oA*HWgJGe#^#+_T*iQbJdKql6E7Xr;-aTQt4KwfWL!9s}-_*Ti^H7mnjC( zl-`7-eh%VSI9Jbl;a;BN8rSJUj>~_k@(A?LS25^m_qB1?3ACJt=3A9ei6Sp*Ya9VV zFnbUtHj2b|8^db*c@d=`av0pZlno=KmS}5JuAY<+y&DNAC21&~x(*7`lEhL+xj|+O z&0JLuct&tor~RPULB)^B;o=ZWqEFPBQ}j5BjXe=G=Vs8cS8kVCX_4pW)id+s%{$GH z?S(wYqD902J{N z1c)Q0fZcG&V?B~m!7#c{j6FphCPr47-rFUX$H1FgB#;M2fy@7E8$+x|$?ewd+j#+&C%fHHiUW=FD+(1kXT z2y?49B)~SHbhVO0O4$K=oq^?p6?+}Xh7TX|*}Xh}I6iAQL(><}kO72ryQ7es)|&Mo zzy?0cUafhHT1rt<1iAh9BVFCJ{I3KWi>@b!I30P~8dW3U!(w~I1^BTMLp3{;6-Cj( zQ`vLS`|i?QLD^gT43dO>?9H+#sB5&7n}1M|J^Fj!M7eT1&Gjl=(?R4@b|d*BhzYDb=g0;o1|5>D1u!f_+H zLpnXPJkmhma3VANqp_OTX;@oh_yKNk4mb)QpB)p*Fxs_EO#bER0%D{t7Z!h=@9^z? zW2-2xFZ2zuzH#1e0sQ!%w;V^8(m3vtQZRlYt-glVG_`?h`*X9eI`sejJ-c(qFJEb% zgm}xy@8;2%)0WSbGyDkw_blZ<{|LO zST@OtP@t#|LcLMI_F4Q)uK@?br8k;oRTGYo@Z4wqOAGsdPk|&9HVA;>t4_P_Oa1i7 zZ{GS>Y9&X+{PzWvI2(|Sz=oBn|FJLQH`e)j%HU=X20G9EbnlZ--Li?}cvUEcSS4_1xCa-InB31Uywt#7k20F(^LR?*zQ#R$#fer{#f=Mv>~y z981*}uSX1_<#3Sme@`7mCz4tL#M~;}YuOujQeVKhAufdiC%H$LNI$LX(V10W=t8M%h8bFF7X&{3( zWeo&lXxA3^W@~Qa4F@1w9DG?ecXlPPY$qNCJMJ~Ecv#Tn25hg#F6yZzX!YK+S=r+K zNRA-hz%k+E93{s%+3gYp7b{Z(6~KI;dbbH>?>ABKWQ^-%r~?_tt<$bk&lQeIW{qp1L`}c>dMHD%!nR1QhUQ^j^m5wMrHhSYn=|N&sPe)M7kav;4m^4SjM9b4D z!vcN)TZ2h40w@9Jdhp_YMqrbj}DA%n^|Nr!#`ux%u^F zPULeI_dfDs6)N9tH-+{LBf4cYW3-9*XdI6 zevtOBAq3+7Hev&1JLkEI7Y^$W@QR?Kh6)4F2D^hgOGboDYoZ;wET`w@gia3Ej5Ibr zY#&C=JjR8!K#0W{DSc)V=LA%j0f4RkP8`|FDyuBqXI)|6^kG+q?R9fX1S-niF^|88 zFp^)A;MO;v5IYajTI)N8#b((-F+{;JSL*pkLs8G!y*-#3rlc@UTdN$5~nXL5b!AJ_B~O}P8%mVb9@e;89r+E+WH zk&5o(3qSs%)0dqNurvCdyih4OS`R|(t`_t${nmtq6t7YnH~*~SDG&*6epEGYC@TB6 z^xRB^>Z7)`E=p*6!P*>d$uI~VDdwj3*pbyy*yJSHgdK=}@RX#`uT&eAb37cZ+rT9y z1$bf;hwfTlRS!#w=z6t*s{)Zo@A`(0(=W7iO zBp+5whxFV^6C7IiTOcMMcQ0`D($?JdG&kJp+;_s*C5>7 z#060OgP5XXx-&keY3tKdw%i-YYDQk>#(GdFpe7JBKm5w~=pr#%Z`_`?Sh}|SWY6(S zrE^cY#k@*0C8vdCD|B5xo$Q`Jh{BIyYfE?gP}X932sh$&MKiw84_f3NkoG9Z!Lc9# zPSfsaydWo@;$3QU0oQ+$K`-i+n%a%26bAXu!jS|UkLcUX7Q|==y7C~6y;^8*FvvSq zw&giD(c$41oTy2v1oaf zL2QYYDbpNftsi=@y)=zcaOWW*^!#Sk@o>Ilh!<)t{@=11!nO}PA5yM}LUF5^mdChgRe z25rH0Zf~s+_QS)H?Ega%chdr&mt~$S? z$5ob6&dyU{_zHW-Mn@ zG(NP35)_V{yooc`|W1yACr4Xm%mOd1n9>BvookUmL!KFpF z;^Gj~TY}U?!MddL_SfQZK}_X2j58w`zebR}5vFcN*dM<{Nbl?zqH94v-6*}m(jFCb zHb|%HjA-e6mGGg-Cv0JrbS=t52rJspom{i*4>eJKnxkFYK-jTK5KNq&lzdCrl&civ z27rd__*p@<;tOsb4S`Z6PjOES!ZkN1oY%7n%;8I{hKay-eOi`F9-LdoS1@*pEtJkXqUjbiKVHnvH|4@vU#`8x%!V?RqQj$$tb9!2!b(>5w!H%s5Z#Or+OH#Kh~W@3hi7S*(;eOEIeFxn?0J1};%pM}Q=skHYQVA1!fIDP*m9pydR^VV-GcEAe`9MjL- zSEU@(9-+K9@--p%S{i4V87nFkBk8cQFr9RsEcbbQiJ!Yh#=a^7Tu7|gsoqheVHJ|Q znt0}Hu}Md_eQVV)&o(b=B@!Ssh=sSSo26pzGDj2r;Kb^0URFJ(_QKU8u5X5L`2sC- zpqbBveNU$?h2;AidymGiIBi&Dx`%|hnJ&-GCDz*2iC?3lHOG73bfyU?+Hk?^?yaBn z#w<*5P1E3)>XNvm<`y!PsvuVwf_V9;Jp7mfbQ)IkmlQ$ee@)^eYO%NS49N>R$+>X( z5V0pevG36)ABvS~gv6r$9fhwTncATzkd=}6HG`*L2%s)1QUU9lga!N8*a|(*Y$eYuAQ5fhK-1>6&?8OSW|eOOB~4_>GL7leUC>md*5bH< zc(WgYrBxcz!B*uStyizRO%$(!+Q{CF#{SJYFeXK1AQw%`vZAYn5~0Ss{G`$ZRqjnC zZgG#?*Lj@(gOwEuy2f}^mVVS|=?U$!!9^)Q_B_z)wh3SNc1mMi7m;CcLI zIZth!$HV6-d##`J%oDa7bf~JnT70|(iHv_hpgh$MIxXmhXr>wUd<_`jv^*K>Bf}cX zQw(kdv!Nnk6_087^(-5vy3y!bZ^lmrcRoCv8v!OzMoC{7gUir*7-VjJ7*r^R%02Ya zirMuW3!lVRdU zUg}0}O(QWQ;|wpb2HsF`MImFFsB?Dx)8f@BTcy4YJqB2rkm0|zRz~Pe*DADrDD)GD=97kzr@F-u(1Z(N+r2L zS+db;T1I&KI(Im(k{}1wb3liff>A=I!#2Y=C8!1&FAbE6iPV;g~`Y03Cur9W7$c$u9i&a?p^OdJi5mI9LD2a8Wdd0;q2>5 zEYdHHaG%a;RqTdv#{?}ETdd&hJM}gqgrAgh29!X7JeVqlIj@XQfpPcO2nG83y;?2U}3^M2U9sR4!HzMxmYHAb<&b?Rja4+82jFk-=+n*`8$3X$v+1HKFEXe4AdsWSz zOi{SzX(<>7avgFaKsAyW7&iIKj{ua!61rsFU?#;3&C`gdv3}N>V@Zf(O2Y0X%=vf0v8uf{^foMvX;S9BKq!uQ* zMDcc&ojMbB=8}`I7Os^NJ)1s|bWKH54p9kZ zey!(n|AbST@DH|EY!bytBUG@sa%Pa-W##4sQEPb$6Jf=FIEqQtuqIJJ?b?Li-!dj} z2N?#0a4hf~WdtCCVl&Ay8k)PhT-rDL`falzzH10Ls9V6CGzt4vwfDaoL`Df{FxP8p z@bAC-<%cn14;%h}iueAEl>B=qqJDO{2H5v|1C3wa2}DU`_=(Tl-DC9o#S?$pqyl0x zF)vj4|Hm`0f@jJ%@qN{Q+X!d#A)YY@0Fn@#>aq=b-m=OjdGJi#hmMDT*7RGg4;(Q^ zCh2aw{MOh1>3uwPiO)QcQ}>%SeSNRkByv!;ax!I`b@9_PUw~(Z#p?W`&(4n*N}dGA z&Z)6Ls@4AO&c%j-XTr%bXScllx4_2ts2k{r^1({!Q}Slppx?g6A5!~q=l(w;wKMON zxYRcJbF7hUepI>#X4MGa7K9@4g$&z4(Ag)*A$;V2kmi>3po5-+6>|1joxf^8M-mb& zJJ|niaqwGqGzkaHqaV!mlVtsg`oYjY&{xI=qWa(5FL)hDoHN%B{rWw>F=MPK5G5l8 z#azE-LegrPK!DDIG2!V?vg4;8HL(CjwCmIPX-ekL9J%k{{xxC$o0orjuWw8Gx;-X= zU^7Ig(|;Uo_|x-3$-S*9vwMBqN z6BdERDgT2)^uf+PR!-jL68^}AJILy3!DiI-tNss(e+KMq#c9=T2HJNaNc^z1lg1x1 z`$J~mS?mv){U9LzNV6X{Qga0l~XCZU*^J%^@RA4BE8@I%s|8kzakt2?AQkeWfS* zKZSjh637f85lX|WF?ov?X4M4r5jDF7l zd?bMgRs7kqP229zmi=qL{Vyt`-kJLLTQ7i38vH|XKk(vzZ=dJ-(KEIK57w=jr#A~K za0O*$M-UIGzB0K2!_vn*t)u{-eRVyVYv{06hK;k?mXS|Kd9*Sm+?}iS#G_RDQ2KHl z-27=yqS0c*8|j1~E%VSkrrdvg;`vLkAM9IO8|}N)w4GZk6zv=1osJs1{e!#*VwJ+vl-d8fwDjUf+&Fjo)zL=RREG4i1EklB z#qI&w!ImgfQIcF4%PQksoeue%#%Y0}B{GoZ71FNVAv$JbxkYqxjSv;4=WG-*ke}6{ z$i2GS5R%X+vD6P4^0HqO)`FbJ>`Pd9CoNfAk>_UAR^~arD#sf0cRFFh>!h+CIbx$= z*m1mxH}Q*)ZL{)0~*EX>$2J7VAb%>q}83xt-gtmK$4&y|M;4{f{(dS2OH zJHBhW_ZTj~aNP+HHys%|X?o*WTe_nq+~Uz5eOtI8W=lG=Cz94_5PfLeyXCX8^5gVu z#T8h5(3RC7)_!pY$Yw4`(=KAt@%vW6&6;(=3j=Zq&DoDSxnwf~-sVm^loZ$+t#qbj zXraB7unR>wj+cvd&$*e1xuw*LvlQbJ(Bpd725o|c_Ib=duV>}Ev$gIbg3Ed%i=pLe zf^un)bp8pmnkOF~wP@6^ywVl9Pe{zGt0K7$GAYCkuBxuG#hbE@hALIW$$Dj3e^MpjQS_G3`;^(U`ho;?b9@I2$D3x}<(;3}LA1@n{Ps5y}C}z=UIzB9d)I>V2 z=T&*~`ZU<2Tn$&OcwZ@U$hkJsajBhSFIt8Hw|$tJ~V9 zG}eK9n$Nowdmj557kM!7YW(B9oP-UJ$f2 zsF)+r@dW#($A&F@!_^LN@yMG_%yBllL+}sF#g9OESCsJPpqN)}5RYc?;tHm)>f+X5 zqKqHab-jY~Z~$oI8EV*~4cf5b`WIXIgIwKRhS~V8)9&ToWc{)Y&}^~$<)#PMqdkBK zJb!{X@8YA*!Ez@#Y+(XqfxfP+MI53eZGtdw6`_%gE#R(VMB(*tNz}bt0|_!4^aYFW zj9XUuN=`^3);8|FU=lI7B(~bc-l}%dXA#Q`fow7)Gcac??}!F(61<#e+~gYQyiTt8 zbV!%Q=^dr*9xlo!woe|Oe&|%`M3HgA$xP7a6jQyv?g4kv&-$N@UKslq!mh^5ZWy?o zieOZDJuB7ZM0VuCrP(h}k8>S=9aTGv)r{&M@9yr`H-;ET5IRP)6(J4|4h#7%a*iG< zs*yg@Y|F@GWDoR&*#aMQ6?2Q3y4&W;d9$`BXWl?uFo_7M*}G3Z82D~6-o!%7(x`NI z8~59~-iF_^=nud)xz<^?+Z-%^#+x^Gd;fGO>2ks2M`wB|{mn`8>3!y&RQZl7LT4S7 zN6PWj#epk?y6juMx}=cZ_f1bRrp0}uFrewkS^kG>oA%(b5q~VCgKN~8rmhZ ztXs`tRxrknQ&73;oMAOBZ|)#>C}Wq=eBh%2#Z6veC+k?UAeR*;(O#Dc1?ck<y~tOX32#`jqHk~=~6`VaG2CNZnygx zneT+0{ivYx>8=;{9+3Y*L+n3#L!2!CgbE+FC&Q|pNif+8W!>J4rQy(pnmOf~2)|1f zs`cJn&LMJgkCX?~FE-D+hs;hreXkzO39|Ibm8M=KK|ZSi3k!1AV}xS%Etl-;?vfCd zUKb2??6R$^rbf?8hottqcGgI-44I&YaD8SO-gU4@l_-m?6%ffhO>n!Urfm7q>U6JlYIV$7Bu+)DpyJD8zk$RN|DP<*)2;C@haNv(w zwwKC~6cLt}Wfuu`fn?rOF%+Kr5xTgc;As})B-ST__jWY9&{;3;tx^+69ciH{?bnW< zF4Swv?{_KlCRy`p6yzRexyCtuBudD6RQ5>(MSIUVw0Y<$7B$-(D+!y(>HhNkYRr*RX$RTth0|Ms6%0pHjNXyy(9ePn z7-g(Hg*(5?9owa(rXUBi7I=}?6 zhLqa2A3Xvde zwZ))o{|w?A8+MzeoVh02`FF;aO>S}|^I7aY73JErzDy-?2D@y1e-1y$1>H5GV7{p= zFL>f+BFfoG!DxU1QghBcpS0XsPuGLtI}cLJQ`ij)L50wR ze}Cw!LEdJXzE;|<6J7*CN@%+c6jNoJZ^lK&z`&j^6zrQcVv?wH5bRieIn%+g`rC0xml) z#qmEh*$R+X?bw~Xzuz$8E67|1mmQiF-QFT_%PX}LWxNL)z!v`V6}S$7%l?qsH~smC z)P5wsKcu$B^!X#zwuq8HQf&*b{86A=^v|K)_Q_-B-&7u_r^952H)vn*`0C43-o#1N zJYZs5324Em58OxxG$^b;0Q!y{1T_Zv??DGNFHnK*tqXTan0WuYq*38pcV2#ZH0HqU z@?vgN{mNYQWSk;QLlDfM`EcLNor9u!%eCs|pxyCu6PP4>>YC{9GKiRfvb5-{rX|t$ zjl8lT4_rJL@5B(SQ(ABb4CAh_$nU3j1U;RHE-wDYSdqyFYPtRZ=cdk&pg(;G2l`;U zSAcwNI?#ZeehAk9x@hgODqX%84*EcapEFh@HhQSg1Et>Y!9*Q5w7`-$=r4W-G>~wM z*$M^xOJ_F%fiWj~t#;FvktGM6DQJm3zt@_NNV<4&XOx@;6PTo6on6(SA4Ekyf`GBE zI;8%^?>gukO>CIf@C^#vZm^&!Dc3^d-)yE2n_N2j_kH4U(V}>PG1nSa2=PFKZWie; z7CB6ohk+h&)}UV=nno8imo=gYoaguk5dCC}0?!{HtAlJiNREHgO;6CLP;3fR;4HWD zgVBb>IZq?_y8hdshXSLdi~a2aYyEys(1Y6zlw;RLN=U{WROw9DQ9&CVbq2i&20>fs zcagF#We;{Zv?}1oTRBu4sDEwWm}`?oT59JHTap$ev%0&_WioBquWG@WIILE>ZOeI8BfU%|Xt5wWkBoqx{6;BhUZF_aSsVCR00<Y^)S@fXARbmmr>i$Ldp zxi?^7rqQ+g2x|_J9!Pt#szW#Ei$GPwVt0LsIAxSgNc*-2=!?hKm#eUayS^VEbKHY6 ztZdgiOA;X1BR2p_g&Xz8KuJoYRsLOe#ZM)mG+;z2Kt)I-%-}Dlg^Bh-Fv^<-Osv*R zUIH!9S%{sU&j2z4Q)b2A1a|*A72PvHDYms5B0s&E&zA!)OUWqJ%ztbNI@&xVza=pwoe;FkrcOn z^GeSjD0z##Zm=iCotiwz>_!_Dbj(4E)OUo?DdI#rXius}_FQj(#pf7FaWLzY*TDx5 zMq3g|-K(JE{cpIORS8((!wZGtL{G?5ZNC%fCODT{`8+RL9MXWzw~x2JHgegIUPw!U zZ%q8|$7k044xOqw)z;YzD!*PR`F+hYCWKJGBok?raW2<;x8*svR+oi|5LEizc)6e> z%dJ#9>y|&u3O7h^xc!5YHNX2y7a%qs@SbCEj3cSlYEv?qw?~#CeE%rugap`Q8xoRLxv2s7s-W91Kvh zeyaijD?wxY6{-GLwvZ$j>#Z`5D%PCgeo}bo)~WYkMk|{8cJ@65kKz{r<$uj(8P(M$ z-v<(bCnf5_cQV}a0YKxFYnFY4$!Q|<#RiaT9(ZGs&dIHo`jLS%RT`#YU^vzkchc7A z*O^Q*atHS>VN4{aJ&2+vFyNm zb9{qzB%#So_sRN;9O^n3KnG5AK6m$R(D`Q_2m0=fgrR+bz4|&HuI}u=PfyvcF4ZmSNYGQQiA8{n9{h5pr8K75cFg5U# z`dQG}X3bGv7|aGaI1TzKt`V!q>#V*;JGPt&>2T}8wg_{4*+d6TF5TH6;2YTrK`q;S zFK;)o>BbWk+0hp8!8YnR4fi{%F8=Jr&22?(3WVPDAtGyN6DAnR}Lgh zpz=3I@BX9~fVhkRhiswvaTE4zdQt`oqEzHSt9mPMU@0Wb)pk3t&DK;9M-TA3l<(&F zl5auMdD{f-U!JxAlBiR@xmk1(ynn1CO=}6XN`EeG3ycZx`37;TM-LG|hU_Db3N8&S zm>pMwisf4QY(FN_e*`(eZbv;M^>CJn-R+s(AjXZu^or;Wf!PBN#M#>w>_HL-I?{C_ z8~Ks9L085CFkRxJHpdd^E&G{mooIi687lfqM!ccruA2wmu#tO6%rB4WOkz(clqe z#{D1m-aD$P^;;X=Dk=(!SU{zzsHij*Dbj+n1(l|vbcl+8NS6{IB!~qp6cyhFnR7lfB1V8+ z_PF=LUmpC*YW2PYBq6IWLkg3Y?NA79doO^DYDb%*>wudVUmjCktRSX8({LFzSN%+( z@?Bn+VhZ{A zZvhOx>ib1%CWj?YcbxQf>WT$QS;roZgpm07*9dy9nODEBrM8 z%%Rf1>+*&CtLWfKAjgsPzmN+2R~^LXUH}ys{_pCA|1QlKzPy?KT~KlDzp6$4+DZUG z`B$;XUt0;V6aOYW`fDrw-?){0&i-(-eEhEzJx84ij-lVLR5bm;NB9084|v-OKnuSv?I&#gKfP)xcTkU3pQp<95G_47(KfXknB#t3A0tL16HyUU zN?<`#Ck1{q4_9X->hs?`(_{ZT&c%^S}eF(XRm#@Fvwo)hdpFQ#OkJ5Yq zIpCP9MaW&7d|pkZ82Cc;QS>X4^FLSYPumO7$ytkbd!1waKf|rkbl{6MZdUF5JIMdz zEB$AIy(xdS`@aFYtG^uLw-X33^j-fOnE3Mxb*zEVyX;Yp`u}_gzeTQ1>7TPwSnW!= z_4{>Zi>N`F&&<1!LsW-=kn zd;ZT+NWU>~k0jUbm1O40{hoavqCyEg(vV^4HR*r8)U;Ay^_)d3R(?&FKbiADOy%}N zk1!pt=s!J;pH|~b+Q-a2t|f<8?raxKkCI zJTCsvSAAOsxN5(j>H^P|0Y+JCrVhh6_otTHWNG4j949|PkU{*&5PG5&E%lU2=p%x#gqnlsurulKrT zxz#=1k9&A#U0I%Nk$=?VwQWR=U>7s>wX&;PO02L8)q^-5NJ_dIKg^ZhY~B zosA;fp4H?{^$FB1WPvve@raD~LG{*)GP~T|DyI$)**DJY8Fn$Gf-SeZqj?E$u1pPD z(7HzGf=PMS!EFPgU;&6p>NWGp^u}<3BuKv;>}&!w7hA9;xZIti{*6;MEgUJ1HsH3z zO2aUkil@SkopGaa)W|i&tYJZ+uD1pLf9KS&J1cL8m?-s~|*i?IrFBMzIUFK)~FF zciRH#ZflE=f3dEv{Qe?xLf%50oVZ{!STq>zbQfd0aSSu~En+}xCkRoLdXq3*`HXd( zyH%4rV^CkecTf>tuvgx~CoS74<5lB~sGR^^vy@BEe3x?=lHR0H$2>%lSXcYy2CVM; zC>;fzx0~-5lda8t78kb1M4q2l4t2CBnkNNm<#n1OrZ!~qpFo>$i z_PrE`dhG28^=FiTsp4xxi8#ld;A3b|nn&R*cO8)sJsc8C^G00}`|}~+rwbgGJ=1bV zD_fRy=$mlQB4_jh>!E3snCQ!1w+E#hjWyrvgmz2f;ZP&B(NZ2Zt>rxlxfQKRdH1c# z9QIMs{PrcD-HnCE+@a5#(uwzd;@Hj?%cmQBzMV2x*`T7$_*8SZ%D2!%!FJc-Lu=X_ zI%phdm`P9?H+e!-u4yA2!=BZSNHH^mE6i3=dL{N6(rv|;w1%~$>zo^-nz7L7X{}l> zM9rI~d!53RzC)Y3B3lt9-LbZ&A%qfb8u@sd2ZlW-TvxUU%xjWoaE2quwi>FpC(=!- zw>fIo>;o@6lLGDY!3WjdA39NH<^G-CB1GCzd5H8SW8JvmR)iX*f53fuk?4eyxuznS ztm$j#?}*RMzUwvd4HlL~c7r8lhIYI3Y=oO=`9;0Q#FMBKHQe#9LEq`?C}I*@`ydwF z-ca|Mg)cq6XV_OT6N4At`?zmEf)S5yG^enRgtUR)Fx`h#ANaN&`T9}E~UK) zcZ+sWp&beVhFm@G^4^teQ4{E!(l|3HrL->VSX+(al7o^ewda+O)S9&u70P-5i~2$ zfWWX$d-=_?qWGxQn$0xk+BpK%;}B2e`KrmwTpr+28kN4XH9qPceos=-szbp2?%IAV zzWNQhDtkp@CLEu?X0KW4YO0 zw-`cb&HXn1ZLEtMV9#WqU@&j6al4#6zHvh}A7mVh#Ppv=s2xf6Za9;%6+8B!9%^ab z)i=3ir})z6C#+MG6LF&Q0_e)SSI!(wTDf-}k@bGNdu425*jteLpIlWftA*TFDxygH z0lrW2Yr!f}*%kir5J5xXvv9>&rfO_PmO(`4M8o9*vAwUJn4UrK7Qx}52#Ui9$fuB^h*8MDyzO{ z`y|pgYPQ5XYBSD#P>Vg8OqXe1SioE&Dz8XXl%jQLp)X6(FJxEUuGkYD@j;}~NoJv1 z{pA~-PN?0EAoP*y7kT?ndnVc4nA~c8$i?4X%r0=O_3E6OgNxVG^y4x{P!yT%&`j7| zS4KEC^8uIkzSV5-%DIu!YHM2Wo2KmN-ZJ3^de8_JohIE^=_u35IXO}rFt<0YTekPC8iZhz6=3tRj!cB2Q~2@C+V zE<0e^Sw3*;grzys|0$pWhSSzmb92vm%Ap^TP!oTtshH7G))Z#*Xeva1LWHbRp`{#< zik$gy?!igj=*33@4_HNL153k1mBLRI-7QBJZA6h1FB-u|+H!E9Tj-%|cDdeNvcYz* zV{^OTMw#*hjUM!wy$$Hx8{f1GpjwO~(c0t*uz+F>({Y}K*P3~5Sf}k6x8}7zvQ;d% zKmo0s`l-?v>5&Jfs1#@oC_2~S(~%ytc<-6l>GPe&6MK7B9$i6=Q4M#7s6WO!WloO5 z8VO(&{k4$9Rqc>3?{wIZeru2X0vA~FnTbYl(zZ74r--4xiY+{H)1>^JmEN7(%hkSS zV^{aAfZ0pUYn^0VqC~PlHXtpVz{SzwnU^e$EmOFC_m~YGF+<@VY~|`?KKRp4)izBv zLx0TUAV0yDRM<3kh=opw$GF@X8Bl5r+Zg=;ZhyQYxzvwTIom|#_NProYPi~}D*FzF zP;7#n(uuD{VqKbOj!mWI=<}ID+GEKe-Fcg73&B zth5awgv%Ok*2R@-XVr|G#jv+pGxE!3daifP+M0d^N2wH;*xZR2=CRs05>fHbtJ>Ic z_#=##(MW8q3;TUxm$$7kZrG}%2HLan<4Bw)-Vp8-CWNmfFYNwJ`>3T*MUis3{p&(l zV9)}9RUC~El%790Kr*(DQhjS?v zG?m4`elMtUeEoiS(O8E|<|*Gq`&EOX$0vd=IuNu!p?)M7RG(@Uwj>{82x& z1jUOwPJe_wc~>-XB@F2|Nh?16y}vM};Ai&n-T8gSXZowmu~#K9ZMIkazNw}zJ=sCO zm?8y%-|d4PdVreiU5~EO$P1jnO?iPb=`)?4qu-g*TXdl&2qh3^MX!fVpwDc_SnidOAsa2bBoQ@IxmWhu z=*%_)y>!flF$vh0cU|zgHtvYud53zPg+5UE>-sZ0p>G_&7IRzxbqi|(`)-I+>lH@YTTn%P z5+q^Sr?!mAQ-n0d?l|OkmI2KX4eV`L)wT?Y4Vj>adry~w?{wW3cZPq8!zal~;)CcH?VN!x^ABWsn?clLce18L>d1W=N zd&g{F!DSW;9g|A)))lig*2+S>r-zzZch5hF7Jm2W=mvL5*zlv;JVzwd!xH4+Dp#F$ zn?ty=%h2dP2}l~N4SE-nZKr#-D_qkyK8MSNPHe*#e$C)%y74?Ib>6iu2C);xcjkQ? zOa*Euh1b2*X4~p@c9ye}!g{@GIZloy5 z1w7V1c&Tql^WB#h*aLn%rEJI2A5J{sj!%1A zlYYdOdI}MvXt7;^N0dHyi1gD#J^ScQwc7$_w9EUZ!$#0lri>|wcXAUK&V^#b&J|*5 zgo|PZQsqL+kKo;MF=szTTK?clIB0d|dX*bA<4%BVLV>TYX%ytXPX!fkQ+5p5H%Y9; z#wx3+-1=sAqoGq^?`UKA?&sVdMT#JZae4>;!cQ%L{)gYKZ!|Jd>pOKCIZOM^ZX~Kr zRn!jVxP#}?qo?}`7Sh9eG5HDVzWt|yxUV3pR%0D89&v&+*utdNm5I-n`zjVbc2x}Z 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 Kq{ztS-v0-=>AZaa diff --git a/images/website.png b/images/website.png new file mode 100644 index 0000000000000000000000000000000000000000..e72323314331e48486a8c2535a2e69bb39b9c34c GIT binary patch literal 104140 zcmZ^K1yqz>*ES%Cf|QgCi3BFbw?T`+ncI z{^jGd);+WCKKq<=oqhJcu5*W~D$8PFyu?64Lc)@ld#jFwgvO7Agp&W{G2#sEzN!)u z5=Nedl$5Hxl+-I#M>{hMYf~g7xzNNUbXAQ#BL4@kDN&IZ2|?uiuj7)**u0X@ zDWu-;USw!=tvNh`FO84v3Xlv}8A92!3#1sVjXe&2w5nwzsj znB22Ivl5C@qebr&75OGJ!0iMy5(O3xo#|9YIjMC00^TO{jKai#eGf^8EDM@gPCZm- zJ>MrVDt0kj;+tP<4*Zx7>1QOeXSied#*P`4W*qf3MYzYH(XW`3mzml+Yzj4i#gu}P z*)_}~&i@-D5qp^S>^poe5{+RZmAORIUdAJD3WXH0EXuSuJVd{$TAn~jTArREvLdF^|80~}Uh}GV3yQ7?>t=*YtBaYk zs%a-oW+fBm*DE-hB-E()pbLiEF7p;^Y!uFS1KL4+ z%t@&FODTs|ckZMZ6TbNEPba(2I&Ta!?g&jPb>LheW0pcP_iqnRm$-hTl zM-uISY+U_<1+7dR?=>>%cOq3Z%kRqLNLOE^va!g}i@pokKQ%z(`|k4!{mZ(*3*?i| z7pM|1LQrF=$op|QzgWML4Z-%1LRNi2fJG<4s47VN_2anuCoD~rLe|<>Urz1>$hfGegde_EOON9zzNMumi4DS~NumkEBMk9;%a!|R;!9Ih42{t%QR)df z&bXj@X;11eu?}+BoaoJD%@lfp*5ZxSt+8{l@P52a9fGF?!LN}p&2 zEJg~335K_XzI@v*l{cYTkG64_u~_Wix{8{QY}inKwI zvBqIMmM_Nk9`Tj&(|Wv!u|aHq+a1hJU#v@fQtNqE+@|3-#&9( z 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 auP~^GrY|XYO}kK#pF9vGT`p Date: Thu, 26 Sep 2024 14:44:11 +0100 Subject: [PATCH 047/124] update readme --- README.md | 135 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 88 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 36415ef..65d9511 100644 --- a/README.md +++ b/README.md @@ -1,67 +1,108 @@ -# DevOps-The-Hard-Way-Azure +# DevOps the Hard Way on Azure -Welcome to the DevOps-The-Hard-Way-Azure tutorial! This comprehensive guide provides a real-world solution for implementing DevOps practices and technologies to deploy applications and cloud services/infrastructure on Microsoft Azure. +Welcome to the DevOps the Hard Way on Azure tutorial! 🚀 -The repository contains free labs, documentation, diagrams, and docs for setting up an entire workflow and DevOps environment from a real-world perspective in Azure. +This comprehensive guide provides a real-world solution for implementing DevOps practices and technologies to deploy applications and cloud services/infrastructure on Microsoft Azure. -## DevOps Scenario -The scenario that you're currently facing is you work in an organization that is very monolithic. There is a ton of bare metal, virtualization, manual deployments of applications, and **old school** practices based on the current teams knowledge of IT. +## 🌟 What's Inside? -You're brought in to the company and team to make things more modern so the organization can not only succeed, but stay ahead of their competition. Management now understands the needs and complexity that comes with staying ahead of their competition and they know that they need to. Otherwise, the organization will fall... +- Free labs +- Detailed documentation +- Step-by-step guides +All designed to help you set up a complete DevOps environment from a real-world perspective in Azure. -## DevOps Solution -The solution is to deploy the Uber API for the sign-up page. Currently this solution is sitting on a bunch of baremetal, but it's time to sprinkle a little DevOps on it. Although we won't be coding the application itself, we'll cover the deployment process using DevOps tools and methodologies. +## 🎭 The DevOps Scenario -![](images/website.png) +Imagine this: You've just joined a company stuck in the past. They're drowning in: +- [ ] Bare metal servers +- [ ] Manual deployments +- [ ] Outdated IT practices + +> **Your mission, should you choose to accept it:** +> Modernize everything. Make the organisation not just succeed, but lead the pack. + +## 💡 The DevOps Solution -As a DevOps Engineer, you're more or less (most likely) not writing the app, but instead, deploying it. That's why you're not writing your own app in this tutorial. +We're going to deploy the thomasthornton.cloud application, transforming it from a bare-metal application to a DevOps masterpiece. -*Full Disclosure* - [AdminTurnedDevOps](https://github.com/AdminTurnedDevOps) did have to edit this app a bit from Uber to make it compatible with Python3. You can find the repo here: +![](images/website.png) + +> 🔍 **Note**: As a DevOps/Platform Engineer, your focus is on deployment, not application development. That's why we're using an existing app for this tutorial. -https://github.com/AdminTurnedDevOps/Python-Sample-Application +## 🛠️ Technology Stack -## Technology Details Get ready to utilise a range of cutting-edge technologies and platforms to establish your DevOps environment: -1. Azure: Hosts the application, cloud infrastructure, and necessary services. -2. GitHub: Stores application and infrastructure/automation code. -3. Python: Powers the Uber application and some automation tasks. -4. Terraform: Orchestrates Azure resources, including Azure Container Registry (ACR) and Azure Kubernetes Service (AKS). -5. Docker: Creates containerized images for the Uber app and stores them in Azure ACR. -6. Kubernetes: Orchestrates Docker containers, with AKS managing our Kubernetes clusters. -7. CI/CD: Automates deployment using GitHub Actions. -8. Automated Testing: Ensures Terraform code integrity using Checkov. - -## Labs -1. [Prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/prerequisites.md) -2. [Create Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/1-Configure-Terraform-Remote-Storage.md) - When deploying Terraform there is a requirement that it must store a state file; this file is used by Terraform to map Azure Resources to your configuration that you want to deploy, keeps track of meta data and can also assist with improving performance for larger Azure Resource deployments. -3. [Create Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md) - The Azure AD Group will be used for AKS cluster access - -In this scenario, the Terraform State file will be stored in remote state location of an Azure Storage Account. - - -2. Terraform - The purpose of the Terraform section is to create all of the Azure cloud services you'll need from an environment/infrastructure perspective to run the Uber application. - - [Create ACR](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/1-Create-ACR.md) - - [Create VNET](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/2-Create-VNET.md) - - [Create Log Analytics](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md) - - [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) - -3. Docker - The purpose of the Docker section is to create a Docker image from the app that the organization is running on-prem (the uber app), containerize it, and store the container inside of a container repository. For the container repo, you'll use Azure ECR. - - [Create The Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/3-Docker/1-Create-Docker-Image.md) - - [Log Into Azure ACR Repository and Push the Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/3-Docker/Push%20Image%20To%20ACR.md) -4. Kubernetes - The purpose of the Kubernetes section is to connect to AKS locally and to write the Kubernetes manifest to deploy the Python Uber app. - - [Connect To AKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/1-Connect-To-ACR.md) - - [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md) - - [Deploy Uber App into Kubernetes](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/3-Deploy-Uber-App.md) -5. Automated Testing - The purpose of the Automation Testing section is to ensure that all of the Terraform code is performing as it should be from a policy, security, and static code analysis perspective. - - [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) -6. CICD - The purpose of this section is to automatically create an AKS cluster with CICD using GitHub Actions - - [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md) +| Technology | Purpose | +|------------|---------| +| Azure | Cloud hosting and services | +| GitHub | Code repository | +| Python | Application and automation | +| Terraform | Infrastructure as Code | +| Docker | Containerization | +| Kubernetes (AKS) | Container orchestration | +| GitHub Actions | CI/CD | +| Checkov | Automated testing | + +## 🧪 Labs + +[ ] Check boxes have been added to each lab to help you keep track of your progress. + +### Prerequisites + +Before you start, ensure you have the following [prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/prerequisites.md) in place +1. [ ] [Create a Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/1-Configure-Terraform-Remote-Storage.md) +2. [ ] [Set up an Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md) + +### Main Sections + +1. **Terraform** - Create all the Azure cloud services needed to run the thomasthorntoncloud application. + - [ ] [Create Azure Container Registry (ACR)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/1-Create-ACR.md) + - [ ] [Create Azure Virtual Network (VNET)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/2-Create-VNET.md) + - [ ] [Create Log Analytics](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md) + - [ ] [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) + +2. **Docker** - Containerise the thomasthorntoncloud application and store it in Azure Container Registry (ACR). + - [ ] [Create the Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/3-Docker/1-Create-Docker-Image.md) + - [ ] [Create a Docker Image for the thomasthorntoncloud App](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/3-Docker/Push%20Image%20To%20ACR.md) + + +3. **Kubernetes** - Deploy application to AKS and expose the thomasthorntoncloud application to the internet. + - [ ] [Connect To AKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/1-Connect-To-ACR.md) + - [ ] [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md) + - [ ] [Deploy thomasthorntoncloud App into Kubernetes](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/3-Deploy-Uber-App.md) + + +4. **Automated Testing** Ensure code quality + - [ ] [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) + + +5. **CICD** - Automatically update AKS cluster with CICD using GitHub Actions + - [ ] [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md) + +## 🎓 Learning Checkpoints + +After each section, test your understanding: + +```markdown +- [ ] Can you explain why we're using a remote state for Terraform? +- [ ] What's the significance of containerizing the app? +- [ ] How does AKS simplify Kubernetes management? +- [ ] Why is automated testing crucial in a DevOps pipeline? +- [ ] How does CI/CD improve the deployment process? +``` ## Conclusion By following this tutorial, you'll not only deploy an example app on Azure but also gain valuable insights into modern DevOps practices and tools. Let's embark on this journey to transform your organization into a lean, agile, and competitive force in the digital landscape. Happy deploying! 🚀🔧 +- By completing this tutorial, you'll: +- Deploy a real-world app on Azure +- Master essential DevOps tools and practices +- Transform your organisation's IT landscape + +Are you ready to embark on this DevOps journey? Let's turn that monolithic infrastructure into a lean, mean, deploying machine! 💪🚀 📣 +I value your feedback! If you find any issues or have suggestions for improvement, please open an issue or submit a pull request. From 9fa3f3ca41c67ff41f13e8e473ba8d32761b4966 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 14:45:07 +0100 Subject: [PATCH 048/124] typo --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 65d9511..99ce52d 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Imagine this: You've just joined a company stuck in the past. They're drowning i - [ ] Outdated IT practices > **Your mission, should you choose to accept it:** -> Modernize everything. Make the organisation not just succeed, but lead the pack. +> Modernise everything. Make the organisation not just succeed, but lead the pack. ## 💡 The DevOps Solution @@ -40,7 +40,7 @@ Get ready to utilise a range of cutting-edge technologies and platforms to estab | GitHub | Code repository | | Python | Application and automation | | Terraform | Infrastructure as Code | -| Docker | Containerization | +| Docker | Containerisation | | Kubernetes (AKS) | Container orchestration | | GitHub Actions | CI/CD | | Checkov | Automated testing | @@ -87,7 +87,7 @@ After each section, test your understanding: ```markdown - [ ] Can you explain why we're using a remote state for Terraform? -- [ ] What's the significance of containerizing the app? +- [ ] What's the significance of containerising the app? - [ ] How does AKS simplify Kubernetes management? - [ ] Why is automated testing crucial in a DevOps pipeline? - [ ] How does CI/CD improve the deployment process? @@ -96,7 +96,7 @@ After each section, test your understanding: ## Conclusion By following this tutorial, you'll not only deploy an example app on Azure but also gain valuable insights into modern DevOps practices and tools. -Let's embark on this journey to transform your organization into a lean, agile, and competitive force in the digital landscape. Happy deploying! 🚀🔧 +Let's embark on this journey to transform your organisation into a lean, agile, and competitive force in the digital landscape. Happy deploying! 🚀🔧 - By completing this tutorial, you'll: - Deploy a real-world app on Azure From c7ed2f8a9c49a9d04cb2dfc70827981e18563f13 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 14:45:36 +0100 Subject: [PATCH 049/124] fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 99ce52d..8ff5f22 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ By following this tutorial, you'll not only deploy an example app on Azure but a Let's embark on this journey to transform your organisation into a lean, agile, and competitive force in the digital landscape. Happy deploying! 🚀🔧 -- By completing this tutorial, you'll: +By completing this tutorial, you'll: - Deploy a real-world app on Azure - Master essential DevOps tools and practices - Transform your organisation's IT landscape From 513d251087c990cb5d8878be1c80c58f6f77134c Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Thu, 26 Sep 2024 15:02:45 +0100 Subject: [PATCH 050/124] section 1 of readme updates --- .../1-Configure-Terraform-Remote-Storage.md | 57 ++++++++++++++++--- 1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md | 49 +++++++++++++--- .../{ => scripts}/create-azure-ad-group.sh | 16 ------ .../{ => scripts}/create-terraform-storage.sh | 0 4 files changed, 89 insertions(+), 33 deletions(-) rename 1-Azure/{ => scripts}/create-azure-ad-group.sh (67%) rename 1-Azure/{ => scripts}/create-terraform-storage.sh (100%) diff --git a/1-Azure/1-Configure-Terraform-Remote-Storage.md b/1-Azure/1-Configure-Terraform-Remote-Storage.md index fa3657d..dcaf927 100644 --- a/1-Azure/1-Configure-Terraform-Remote-Storage.md +++ b/1-Azure/1-Configure-Terraform-Remote-Storage.md @@ -1,11 +1,50 @@ # Configure Storage Account for Terraform State File -The purpose of this lab is to create the location that will store the remote Terraform State file - -## Create Blob Storage location for Terraform State file -1. Edit the [variables](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/create-terraform-storage.sh#L3-L4) -2. Run the script `./create-terraform-storage.sh` -3. The script will: - - Create an Azure Resource Group - - Set up an Azure Storage Account - - Establish an Azure Blob storage location within the Azure Storage Account +In this lab, you'll create a secure location to store the remote Terraform State file. This is crucial for maintaining consistency and collaboration in your infrastructure-as-code projects. + +## 🛠️ Create Blob Storage for Terraform State File + +### Prerequisites +- [ ] Azure CLI installed and configured +- [ ] Basic understanding of Azure Storage concepts + +## Steps + +1. **Customize Variables** + - Open the [create-terraform-storage.sh](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/scripts/create-terraform-storage.sh) script. + - Locate the following lines: + ```bash + RESOURCE_GROUP_NAME="devopshardway-rg" + STORAGE_ACCOUNT_NAME="devopshardwaysa" + ``` + - Replace the placeholders with your desired names. + +2. **Run the Script** + + - Run the following command in your terminal: + ```bash + ./scripts/create-terraform-storage.sh + ``` + +3. **What's Happening Behind the Scenes?** + The script performs these actions: + - [ ] Creates an Azure Resource Group + - [ ] Sets up an Azure Storage Account + - [ ] Establishes an Azure Blob storage container + +### 🧠 Knowledge Check +After running the script, try to answer these questions: +1. Why is it important to use remote state storage for Terraform? +2. What are the benefits of using Azure Blob Storage for this purpose? +3. How would you access this state file in your Terraform configurations? + +### 🔍 Verification +To ensure everything was set up correctly: + +1. Log into the [Azure Portal](https://portal.azure.com). +2. Navigate to your newly created Resource Group. +3. Verify the presence of the Storage Account. +4. Within the Storage Account, check for the Blob container. + +### 💡 Pro Tip +Consider setting up access policies and encryption for your storage account to enhance security. Azure provides several options for this, including Azure AD authentication and Azure Key Vault integration. \ No newline at end of file diff --git a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md index 55a8882..9d797d7 100644 --- a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md +++ b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md @@ -1,10 +1,43 @@ -# CCreate Azure AD Group for AKS Admins +# Create Azure AD Group for AKS Admins -The purpose of this lab to create an Azure AD Group for AKS Admins. These "admins" will be the group of users that will be able to access the AKS cluster using kubectl +## 🎯 Purpose +In this lab, you'll create an Azure AD Group for AKS Admins. These "admins" will be the designated users who can access the AKS cluster using kubectl. -## Create Azure AD AKS Admin Group -1. Run the script `./create-azure-ad-group.sh` -2. The script will create -- Azure AD Group named `"devopsthehardway-aks-group"` -- Add current user logged into Az CLI to AD Group `"devopsthehardway-aks-group"` -- Will output Azure AD Group ID, note this down as it will be required for AKS Terraform \ No newline at end of file +## 🛠️ Create Azure AD AKS Admin Group + +### Prerequisites +- [ ] Sufficient permissions to create Azure AD groups + + +### Steps + +1. **Run the Script** + Execute the following command in your terminal: + ```bash + ./scripts/create-azure-ad-group.sh + ``` +2. What the Script Does + + The script performs these actions: + - [ ] Creates an Azure AD Group named `devopsthehardway-aks-group` + - [ ] Adds the current user (logged into Az CLI) to the `devopsthehardway-aks-group` + - [ ] Outputs the Azure AD Group ID + +**Important Note** +Make sure to note down the Azure AD Group ID displayed at the end of the script execution. You'll need this for AKS Terraform configurations later. + +### 🧠 Knowledge Check +After running the script, consider these questions: +1. Why is it beneficial to use Azure AD groups for AKS admin access? +2. How does this group-based access improve security compared to individual user access? +3. In what ways might you further customize the AD group for different levels of access? + +### 🔍 Verification +To ensure the group was created successfully: +1. Log into the [Azure Portal](https://portal.azure.com) +2. Navigate to **Azure Active Directory > Groups** +3. Search for `devopsthehardway-aks-group` +4. Verify that your user account is listed as a member + +### 💡 Pro Tip +Consider setting up multiple AD groups with different levels of access (e.g., read-only, developer, admin) to implement a more granular access control strategy for your AKS clusters. diff --git a/1-Azure/create-azure-ad-group.sh b/1-Azure/scripts/create-azure-ad-group.sh similarity index 67% rename from 1-Azure/create-azure-ad-group.sh rename to 1-Azure/scripts/create-azure-ad-group.sh index c89121e..eeeee7b 100755 --- a/1-Azure/create-azure-ad-group.sh +++ b/1-Azure/scripts/create-azure-ad-group.sh @@ -1,19 +1,3 @@ -# #!/bin/sh - -# AZURE_AD_GROUP_NAME="devopsthehardway-aks-group" -# CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id -o tsv) - -# # Create Azure AD Group -# az ad group create --display-name $AZURE_AD_GROUP_NAME --mail-nickname $AZURE_AD_GROUP_NAME - -# # Add Current az login user to Azure AD Group -# az ad group member add --group $AZURE_AD_GROUP_NAME --member-id $CURRENT_USER_OBJECTID - -# AZURE_GROUP_ID=$(az ad group show --group "devopsthehardway-aks-group" --query id -o tsv) - -# echo "AZURE AD GROUP ID IS: $AZURE_GROUP_ID" - - #!/bin/sh AZURE_AD_GROUP_NAME="devopsthehardway-aks-group" diff --git a/1-Azure/create-terraform-storage.sh b/1-Azure/scripts/create-terraform-storage.sh similarity index 100% rename from 1-Azure/create-terraform-storage.sh rename to 1-Azure/scripts/create-terraform-storage.sh From 64bcb24617a8f6cd4daed9f46e28db624cd26c96 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Fri, 27 Sep 2024 08:10:27 +0100 Subject: [PATCH 051/124] doc chnges --- 1-Azure/1-Configure-Terraform-Remote-Storage.md | 2 ++ 1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md | 4 +++- images/azure-ad-group.png | Bin 0 -> 66375 bytes images/storage-account.png | Bin 0 -> 45058 bytes 4 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 images/azure-ad-group.png create mode 100644 images/storage-account.png diff --git a/1-Azure/1-Configure-Terraform-Remote-Storage.md b/1-Azure/1-Configure-Terraform-Remote-Storage.md index dcaf927..db165a6 100644 --- a/1-Azure/1-Configure-Terraform-Remote-Storage.md +++ b/1-Azure/1-Configure-Terraform-Remote-Storage.md @@ -45,6 +45,8 @@ To ensure everything was set up correctly: 2. Navigate to your newly created Resource Group. 3. Verify the presence of the Storage Account. 4. Within the Storage Account, check for the Blob container. +5. It should look similar to this: +![](images/storage-account.png) ### 💡 Pro Tip Consider setting up access policies and encryption for your storage account to enhance security. Azure provides several options for this, including Azure AD authentication and Azure Key Vault integration. \ No newline at end of file diff --git a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md index 9d797d7..5310c78 100644 --- a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md +++ b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md @@ -37,7 +37,9 @@ To ensure the group was created successfully: 1. Log into the [Azure Portal](https://portal.azure.com) 2. Navigate to **Azure Active Directory > Groups** 3. Search for `devopsthehardway-aks-group` -4. Verify that your user account is listed as a member +4. Verify that your user account is listed as a member: + +![](images/azure-ad-group.png) ### 💡 Pro Tip Consider setting up multiple AD groups with different levels of access (e.g., read-only, developer, admin) to implement a more granular access control strategy for your AKS clusters. diff --git a/images/azure-ad-group.png b/images/azure-ad-group.png new file mode 100644 index 0000000000000000000000000000000000000000..2638d25b37dd6918c33f34d42863730cbb773f8e GIT binary patch literal 66375 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/Rm=LzSRkvkSKu0u<83ei(hstBbC)ctd7%oqR>~Lw~068~(xo z8>ROPIRsLg3EOsB8vF|!xe!rqBj<>nUga+!mfUd$!NBUaIh8K?gDrpW?GB@fhGr4) zMv6|?wCz+`+&f~#>-GBX1S@+>bkB%mU2*ZOTWiH0H%r%r4!q z#q9D_vPq3Ran45-A~ky!JLk;W+s!~ovW%SKopq_`>BApMv(U6(W8%OJg`gbgj@5h* zRgK1~>M`}_3D_2v(Yw?S*o-({SNa9&Q86Iwt6Yc9nmJDRLZm;)=K6Wk{2Fx^^yodM z&)FC2j~|WW7>$Od7b$K=Bh(Ub2bNAdaXhhW;$luF{g(=_|FBpOMX%5p@vT-hKJ*v1 zcapmfMH@sE#)QFa_`7vTs4|a}o6N9CQ%F43oV}Zw&Wgb*+B|)d%-A$2S%JxTTc7(KIP52*TN&ooh1pW7lz>0kaKoTH(gahiE&r8lc>IL zER8rNG4ZnY&7kU$P&$~qqu&6iTuieSBd8(U3@J4=`IpPPA zYcGe0U>j=FHNc}O=h426yuy9(RbnF){vgNtr=CWTO5|tL{o=AzYbZ{I4z&V_9zkf; zPMqk6E{3wkq6fj|U^^W3TD}*X_wd5yy7r>LKV!KnatzkXA z$%$+PkAFBv=VDSey!+W-=@C}xtYBaY=?&Mi=gLuX4(ktf-i1j-0`o0GZZt9 zE^hPr%QgiU>H(rNm-xs+OC}MoU#T#-+;e8EyJSi3cLzme#ksLjj4$PlzxF_4$=Raq zQC2Gwa&pc~9>@u5)2A5H%*xj%Ka9X?giSbbz9+jERWe`t>-9-nrc;f^vA;bUV~ z+-5)l{{AwYH1IA22ehXLHA=ToBWdM<6Dk(qQU(&kgaDJt@qOjmEQU*Py6Qq2nlwTi zwbLEH>Bl`71MUclvRx=hy`lI@F`jGj&W(6w=jjc6bzQeRX7KtwBWYu3#Bq$Z&ASLD zu+nklbT$6uP_QG_Ygl7iWOK`mA7$MSjjJvXRXl#feK4m>?P=tIx`MKjDgLSTGsGm2 zqx=@74~(Ic1g?P?C|Gb6cfoj#-eEkY{(5X%^BOo5x5zRC;9ZrE|FOPQx4_CW1Y@QV^21%f@YgLf7OZmRt{$1Lp8`5|mJcDXjgSc-= z^!LSCG!yRzki;YXL-|Y#ooy^SkRa|w4E4PIw@}~=sN|3QVE3gA`I7S7WaIeBziXPxk^H$mX zFD8~-4j3J!IxlAskZAKR^o)f^wclT}@Zsm-fRW>1`|16PafP_uHOaY5L|(eLpYxks z_7!#urep7=4P@$T2N6Si@%DsMVza@{N>7cX`&H*$fE5VmE`1UFf)7A?(w z@DDBTP|%42F+xJ<2jh}cN;38{f_ceq|F0In&B^wPfHZM1m4xV*W2k^TC_}%-u9mZi z+)v;Ydhw7-sHnS5JUbMF#cjXq-5 zlXt11Cde+FT8hC*XL0#ECy|in$%7BbEpLCn)mqMJmkhOIOjg&Qk{0MIlHqAf;jUuq zJ>n!ES~}&Tq6$A}fs5i!b#W|Q>xgxft{BBM@+LIFT9{rX<+WU3^qh_hN2lP-56BBl z;Ecu(qGY^d#P{d=_+%I0)!To>Ea(Pls(Y_Os&9;&;MTc?03MAsCCH}B64S+xJ_4R9 zW0vVx5rrQls>i5>n#%2%gmO~eyeW#ym{zm_20@TOOljLmv=AWXM-CggVjW(*tr6=c zUNcatIvr9YiEvP1&!@ee1&&^%W;40Bks#Dv?gnZ^m$THNY}aXQUaM~x(_*wU`H*_n zbf7##-&xFPhU0WFH843Z|6UuJg)UW4Ne_|*Hx+xoY2KNA+RYQGG7*8krH6_;h}Vv_ z6nj~;STo7TA0L$!W}n5SOX?UN+^fe+Zs7z5+&{aNE#v~% z@X2{zyLb@xnggIm7gjL(_F_lnBoSfMSu|>F|7iSo77h!M6zwNh1WzgL_EPjaCr7q+ z)2CxLU%#&Bouza>=MEVbRRM_D=!VYBXv}ArTw+Li#jOA9J2xS_0DX zwP?0C)?m9x=&nk^GYw3GkhRP@Pq$wEr&H7GZ(?>ki zhY;{VH=#Hf!zOzhHg~71PJ3CdOX&?gQN2sA`?1}!FDg65Ir?E_9SjIcT9 z^b6MJVNaMsxF6c<^q*&uOil)wv#^lZD-VdH`dW+-#nbX`Ae7Lr_+~GhvQ1V;++6PJ z>+6-BvOx4iMl)wznYLT_950$11VL&jRvJSr*G%_uwIL+BW}$gHCZ0#H0naDHAn*e7 zsQ@oQ#;^YMqDQV(_f^mT)|UVP3Jb&=^SM6xQ#j|>5^ocXhj#Ok%H4a5)D~u7lc{1t z4g6#YQAA(63ln{T}z2fh@gYWCT1az6u!3*NsiNh^i^eX zdw9x9OsMmpdUa2JW{zDd(fnmEZh)n|x}fpq(s!%n;XJOe=O%AIIE+bdmHPZ3ED?#R zU`DIA6$@9+1$RTn;A)?j50J@HIW5F}TrPn6rDT<_%dIhx874@jZV(}=*bO~w}pt96md+!80hB? z0mZ3zuE&Dhn?%l8&dMh2)Y2@j7w8J|hAQG;i~3Mvxi^-j@}wRdH@7ETFuXFTxct1` zI#E*#Ulg~NaiQ2vf$~l8#}|B9XOS!-H<5>9>`Oxh*#=~3QlgH_WQ`$C5Jd}0odF*8 zI8SKDgurycB8nw-i+5=L!A&S2wl8F*0 zVk(3mois0oW8e)imrf$%soa%d*sSryVv()C1?XnfrX*L;>73AvjOHe;+fa00Yjb}n zF5p1dFNR`!?n~Op4N;Sd(ESPPx9RT^(X<`9#A#J2#|p8%6R{W&4&{Yl79bX9lJBhU z%-x2D*Fsakv0Yf@=nVW?p0I-cAJ~%;52%hy`-#`vJ<2+L$Hs&Jjo+WBI<_nqyci^Z zQezei4Pg&UkL6V^*He3wMA@g0wl`o_Hg{=EO9Rn<=6>jls!;Ec{_qs!0pzH$FA5&5i#1W8%4|?Zb-Ytw>6sL25(5Kpvn>$gErHdXqxz?@yvZ;3Jft4Cgr5%A z=2a0jiFF*;{mOKypSb%?`5!=tKWLs?*p^vNSSbq;;tS_ezfQUK`~lDD615ZgFD)Fa z)*TBW{>NuTk<3$4mh?nt6CT=BvHVUqsp#Z*o|A^LZW91hMK;w#>XWxP*mA%3+soas z@@CH~ys|J0wM)0Fn!7WqH1!w8Byfb`t;4oB$E3QgnOQKqeG`WobSV|zPB~TK zp=*omxaqbU9(P79V9bdZ5U8G!vCZ^Ok|YKHmt8acV1Kx|L$J3gYy362G4%7(j1K%E zR;dx$qa)HoyDTnsC-0-ZlA2Sr*saF=X*chrcM6-YYzDTle+nX zWg89y{wa8q;E%s=uL%@;n8_b)=To2{zmD< z0f7$rG(Z2^%l}KrGJsk^Kq{k>6!I66G^;TjLh|rk0W}p`%{5S+7=sHdDxyou$P@zo zCwV)&nx$pFs5?g8S_kOD!ou=~g`*eXDEG=Lssi9t5&%+*I%}+0wGzr=ss)Ztvug!) z{I(bE@9zFD`{Rkj&PenMy@Y&D?2TsB-y%(sVe+`993K5uFcF9HrO|_pPP;BqEDBrp z_4QR*Sy?m?lq0h4{RT<*r6Ei#x-9}=1&Zr>-!u-}&Zv->U+vPdK3t8%Js6qp$-B9w zN^;n3EFQLIaM-#$ShW)Wvk%}g{A&)P%B+RIf6EgfzzCXV+H*IWuZm?cm`3~gnvARN zp`bjkC&(!v4S55FW=a;81Rd`aXKFoP*ydFage>;lZZy1-A2zSO;*gg@K6k6G)shqe zkQ{zL>3~S^Z!`bTEA-!n0e?$ZPY^bFhJ=8?`@}#^Yf#h`cQ{)vMW@;16jZI-tpkUM z0(KQdCY4fl^!)4v^h$^a1_roxwk6ECG``~^pz#0R-JQC%UM>*|gh|GBp!z?SmIEv; zI*_|GgVN`O@Y?JMMN&?R?8{U6Biqqr?4gN?ytDyUqYhJaUz1Hfj2Dtc>oZ4$#JcQ> zWYvdVtK7j~2nTcAI5RFgP8O*?3#iT8Z5lH~J7BYPKPf!cku0?0tG4}(F%sJ%PAOaY z`P+kMB!Sghe1y<8e6}#CEgbouJ@&s_4G+8<<_0~o%n_$IS9g`Oh5Nn2@W0rjf{mZ_ z{*`UWsW;N)VEpIFko!m?Pa=a^CQzX${7>ct;{3fJfJqz@=aHoQ=jh-s`3JO^1W|58 z{eKvW5LVf9FAQPI?GCDGvXYv+Ra|$e%bf(Dv!=K#f@mD`&%v2H0$ak=Fj7jE_t!ig zSe&5pNfwDD3EaPV<^S;k!C7Jebg2^B$@|x^_m}-#a{C9vw#4xjL;mmH@~@+j8%oqp z-g)6y!vC>@dC zae|uqc!a@idfs}=;SK9NPtKh&6YV>7Tiv<}f8`tpEpg=mkD%K>JSeR3vwc8YhgupAm zG)|Q}2%AlmyAm#SdZwsd$n{J7^zAMzJCSs=`)Htuf7tPq(=5>(-N=hVJ9EUAjH`Xk zZT)uYa!E5%FZT6MK7|66iE^%ry-^<5dqC_!46BR+VNfP7Bq+)LujrB)23zr^H6DxM ziztQji6k)MEv(S@km$q-Js{)1p3m|1i1Pg?4i=c+-|7H6xfwoh!G84o;4wnM!9`>$gt|4N{|r2<>XmcOaAxZ>1n7SJcrVAfupA+fpJu zIt&5ktlW(C^%6*C1k+Gjj_dTV&q-q4q?cPhqc62uav*XK0aD+cck9ImEIxOse?n{$$ zHw+@KqM)E3+tc>xk^rwiE|Qo0ERFN_dV}fhQw~S8+m>ZUAbU1HgB@+Rd8u0m$o)OQwkL$YVlP`>V$?XBSiq0bjbyam8j44efmC zc$C&2NLAh{5*%Z?f`jb3W!MsX$)K|L5LxX`dF^Mdq31FlSEJ4QZAZM_cXM4DofgUih2}Gn2BAKpj6z}f+~Fnq z)$la(fD7#dSb%Tyy1s#H9#8mf7eyH*mh%ZTv~Op=_g}GSwL}3li%#%PtJwvb$Kk=2 zeR=*K-)R>E03}r#A6PjnD;HBy_l}v565ZZ#v(_k8D zjrOTE4P>@==L$ds$Q2a2D!=#71m`GfW%y&ve)}+c$`#_`;~J{w_U;3F6t~l{#M9lG zS`=;#-`n$*`SAi1!E`JxTRNJXg9lw~=-Vhmci^;NkKm3G3o~=wpap|ouv+ycgkZ&W zpH;8s)QSDM9y|c7P9gBv*KhL=W(N8O3Cpw)I6U%tf)|rHLyW#}Q%h7fET#Dw_^oez zulML9K|1BC^s#tc!cTW6<@r-H9Yg6aqbdiT;oH=eNWO7TTR>e+{NdrD!TZT2fatyt z0IIKlaitlX>ngqC*^IrB&2Le%$rZWMAzP|X4XZZvToDU(%e-4Y%P7#NNmj>jKPXJ0 zO5YP%ZniB*O;vB(2tY7ftTT2x)q8?QXNd(M`9Wj&%t2KIe8cZtGLiAQ69F8$*f{SM z>kGeO2uVi=#VhaGR3ro@-VoVn9_ONk1@$C0nB~`(N3}si3(;(# zlQaRwYIR?OtFT)}OPX3goIjeuF}cF!SYo^G1LX_jd^nRgEh`YHTBW5xp65?bG39%E zKyiJPsH=>^`XRK^{=P)houoeg}xGB<1_!(TBzWIhpPBbUj>Ybu4Y+&NVESO-x7-IqP^~uLKfg(EJY)ERHH% zu6URnmax4E?*rfx;sl&HmPXn!DtVvm>?-1t_h#In#A@NEJ#-Xaj?TJgZ1<|PS<}^4 z%K~KiAB)Dhftw(wct?J{yZo8ciBWpa|~ zdX!_m?2@EgO=m|X0u7hbj%f7F)}Q(s(*V3eY`oV4uX+NrY+j(SW-a!gD{^x6A>21TbwnH4!H`| z5llh+APWh~63NRODDRN3Jee+LK*YAg)gJCEtOp_G=jIaK*2{ZE8@jo*kmP)6w78P| z$crjRl^p;)k?F!4`;IZ z%m;>5oB%FE%Aw`y<6A*2pBSK+tLTmOf@;y2zNUw1c735z!3D(Uu za&+2$aF@n{Z`acdRdd$s^J!(0@7Y?gW7(#?Q<=5lta;r>T(ikWWqa}1_ig7c30h7X zWsqL8D`3rSTjurDTG@Lel+f3qA*ua#;Qn@YUboyH^(3+u*6{q0%~EAqHj_0xj=%(t zp<9tRS?0wW*ZcBk@nI`=C|j2OVA^x%i+FS%b~n@RM}Y|hhAvUJIfia&g}b-37Y6^I z(8RvKL%Sj`-fuTiM1+T5U;v7QDJ?OgNp@R@PvLelYyFe%I4kE+cHR0Rfma zswMk9kB#%Xu3l;r>o#o<`&Xm9DYV)}OX{I{zMCJQg+22tCyVa8#?p9VVRAgH+Sclv zGq{B-@q%7k9cC@&o}cA!sCci|o=%nS&c|1=x5Jc!DTv`J)zLcUTA@las7Skl;R7Ea zd_Lt}VDK4ba=XS@0mvll=2F|G%H|d6U&-{&qQaV^kK4%3Csmz#OMVZ^t8LD+EdV{i zmHV;>P8x173P!#P{R`BCxDn2o**=ie`+?7uNd^e#w14;w*C1ckb+0SLq5k)GUvHy1)|Jc7 zs=FTH>9ktnW*@cW2rTET3XY+Q>&N}ix}RkE?ru2NQ*Lo_@%p%a ze1hCX5>^ZxW0>&PO*Sz6Zl<)muI+04`kG~Yg5N~Kru|0sar5a+<5TCQazO939~^W6 z(sXtN(eISR#BZ$D8^9N$eE1-4n*Fo<%Brg-?S-O$U_jyR6>^4eRgyvi7JmXKO_io>$4iR^@^`$de|QSGz+5L_L?lu>iS(p2t=8$BwfGI%7RVLFI@X82`o++d3-m3* zhPLYurlc5Dx@2=}A^KSOjiW#EzCXiC{Sallt!~UoO|7{4cG_;M!cR#;nSHe0WX;o; zT!a0A7;0vFoozl!K{)Qcj$3y2j=gOfag=P?;7d0Jppkd*aJ4t7`OFs#w+M;MTaqe9Bc_KmYD@dbI7o!DR1dI&p0&Aq40|-8 z&^cf`uC5UF=?Ksd=WTmlm2KqhC*^YO!&ki+b@X=blQnHryoaW-3z$o`d|OL-N+_$+ z9I4Qj096xwYH8a^Y>snG?z$6(zD6WR+23BlclroCggO8Yx6S_!R#@!$oZo+?@ja_g zGJ~#|hK7cP)!U1!sZvmm?_)UD^IZ1DC2fNjK*mf= z_@u(Qom1|PoUivTO~96b?{1}jrtXszS&ty+2y3?ct;TDSQK=V`3EmboyUYb|k@v-p z+TpVAy7z!1*@{SxkZ#}{{%(M96)Girn4`Du>7P3b97L7XRxFudr{`Thd*$*}C_4YQ zjSan5P65HQj;EL})&j{p=eHV*%X{cPP0Dp2w=AG%*`sAPlGL859OW@w@*m9=?3gkSml1a#Kj?Pd(=ZdxNr zblf2n_<+lU;77#TW3gGGF`(!p%`Rt}^iu2=4}Hl_h?({lO~5B96VoH1SGZ#}#|rj6 z#OM4Mg8&WH1FeqvS)aw2y0d1zNwg$9_|QoQJa|AHBn@<`ddn4L-p7<}T{M=vPWM9J z?;$sd$;n07c19pVkZ~b!e@FGnwdP$+{ngIw*H(LI1>B!sfJ-_VSU`#?<5l_wvOfHF zpdkc;B9Y%iu=QY`1r84Cf!?4jl}7D-h??Y$4KfOI56n|aj&EMm$&$hc7uc3~XbyaJ z*u=E7&!O(Z%wcSJdI_(1g`xC^tV?M}&D1-WF$o1%q+2yU{dAf)Om59=%m$`<_YG+~c)%56FiE6jQ91n)0T{IYngV_@ZqWY@CDi*9!r=GqGAyCT=o@ucsX-gi$c^MV!d+#3Qmpo7Q zUe|~&Kuhz_cTGT}v|>PM5lbPz_6$>6 z)iAlMH|&=%>K)V-9D0U#1b|NoLuOWMw$GhV7ni<*C=}vSE&C+d$eZFWw_ESMIXCx* z-j9@#+g?uE*M6zOM>G(I4tbYQ5*L?69if8Q>K=)O)Z44Ib|5$nuuMx;19F!_!{-p^ zb=5YT`bX2*)Drk$5v7aW)jL5+DsEu@6WM(2NmP=ROX6xXwOjBomiJ-5oY`hksY8i4 zHKzl>Qf~#H1e?G2ihxQ9%IN}72ydgg>HBINRAW`xnR4*na?r_*XE@Kr+?C7;9|7TGnd@9(T9)} z4yjrPFl@2Jb*2{%$jmf;dLG(*TK&4u$?dN(Zrp*39B?ol_KU$(+;pJnr;m@1&OAnW zV{ZFt*Dv;H8{Jitu%IUJ-V1FplMwDuL0R-Qpw!c9sf+)_dMCPdeFMsF7Ha3Gj;cEc2{zUh?zCTi zjgKphoDJo8^}Uk|6Vc1x*7X^{9CoL~HsTA}_Z&JxUC6H*O%;n*n4vm;-ubGZr>+12W9J0X690TvUyxv*NCax^ceO>@1GZ9m4r=)b&JOUM{uBQCz_HO4SH?4^_L@ z7jaX&C&b3QyOEV{6DnaiM$RiLeu2^QnhcIH-Egn&c&?L`G!LD|+e7DnmgnjXTw+e` ze>(H+v9JCp>&HTlqMFzHWzI*v#m;|Ie1LA5ZI_i=k(K3bF|Xp&?*#>9IQ)H587qJ9iV^zZt#YpRSZ9 z$Tr^%dChMOkxE0&Fb#EH`<23Q@STF1U;pzU3%CKy-2%tkc#W>m%dXHS_WaAIHO=NT0aqPW z8j+0w0wGRREo7FQCJ5-vO0Cvri--%$p$CV%if|M<0yO;_-lo^?Xj6dz+N~##$7`w` zxflO2!g)eU>^e>G9P~$_e^_#Pdt;$N?!^YAG^W&Y2No= zW7a8K=!GUNY2^EaarC}fE!LT+*&43M-E=g)dN+1;Gr=!%o&PqKR#x4ynZJ~R<8D>0 zdY+nE z`6A2dDd4YIGQl?wryP5heBwAf=_$u?^M)=NxYx!@gE^cseVS1e=|)JYUK7U^)fim( z=~r^)Hz50F8jDtmkfBAF3C|Ebrf^;{P7Q=or1Q7m9)i;e*bt9>2_?>$eaGzMwOsz* zrk~62a)Yk1>C&l?ZXj0F0_`2=xx;hs)7emqizsx+I*(77Ud&vZj3vGqq8H3NY%`%C z<1rM!llpNn8pK=IDS7B$fdhTe9HQ4DnBN^OuyCcKHwVf;Pm|X<4$1C_bIeY4mGdw* z4|x2fnXx){)Xq1ZV?qym|11}ZIBnT9p3bJ^P)@dj%Wgqw{iV4{lMN!VQmL0O7LUII zG;xvE+n|}J^3jA#PsL7pK%=IKl~E&?x91n^7Puf1DPt-{fSyi^olu4(AgrOT$w;IM zzJkrz!k}DI^F^N|;kg__eNbGF4x&&&#rX2R8drkk-i*AElG8!16{-;WxoH#KN5`In zq1IH{uBdOAEicytj@$D#GrP9i`KZVR6fXDF;$QUvA#;Y}jBqo6Rl^+{Myh40~*$cDust15(Zz+0;X(Kn&B( zNtTn;g_(h$V4=pvui@Z(AuQO>0D9)+LCk4&=iUbsf(u{5a*75;hLhAhb_ib=SOYX# z)t83k9h&5$n>_)QQ<{3yam6_S_iI0bx907~N|B9EEvgl-dxS5UL1)e728o~=-X5^~ zI%fTlGgb_EdBr03hu_<=H?FX?jCQ^ZnccbCvKv_Q+A;>If-Qza(P~)4%gT10W}o)X zq|P+Uu}$s~MMsFehV)O7J}uxFE9}Yk63r;(Fe#X`NHsl*>^!FDZ8?){yc&l>fBwBm z=5Vq_@N>;BRZEjyutV5pMc{0U0H(*T*!}GV*@>1`eSd?mB<4%ufP~iF(eNzIW7oCf zsoDLTAuYeO`w?A*6yA$0?U#m$&8MG|H_x_!Y`=$XRvz6-o6C`jcIBGu_1d&bD~X^U zA6QB;wMrQ*1`G;sirqVoW&jm_WZEOfwrTQBbAInP#ZCwm0?)H9dzC|2qyM@K?|Z5- zIC=YxOyu!+L0Sk{r@I>HqPtD~O>RyU>5`!m!pOE^;9KHm-*}I!_$F>Qw_!d-oJf)S zFrusy_;fMK4It3ykm`klC5YYcY#QT8`2Z=C6hkH44)|fObXJ;iQzv#J$d%-WX%+`B zuP|bO@Qt~bTy9TK1tv_Ic+%TByfHIuxEx=Nw4l#Bi%lQ!PjEVGBYrM*bp&popn354 zJfgCh#EiTo&O6_0QKm)p=n@Ld#U&hq2*Hb2h-*Ij34=)nj^4p=-5v&~36Rzf2R2%& z9$~(#q3(mnyhpu56nMNBEdytl{?e$ffw8f$D^DhB`dyb2pYgl@A|ne44D`UQ^_@)B zcqUh+%r{qRM+Xwm#Lq7UvAb#vCO1xKCXP)SNlXuDb$sn!B}PBgRHsbnD4{ixlG>Aa zenl6QlkKk%G>RI=-S1J6aFshJG^AY}9Ll{uHU()T*tJrTO`^t3q~ zQhgIpc#~6#-0%^+2=-^rK9aYR&0&|(r?x-1<-E(Cvs?Y%=D*CHV%?)7*-ETT8fjqa`@=u~2%eOIaSi$yT8R#2`em?snn+B2;FDfmh%iH3xn z^4!|+?o;1sEeBkT4~3l^US|%GI?E%>4kdpLRL|Yuv#-nT8YGzk3FZ;R zI`O;LifdAX9&8tWe}k``uNvm>j9(#(DuI@4YbPUW zCl}!eq4RLH)9B&skez1w*$+yhM;mIyK_T3`)V@)GF(-(M-Dl(&PRC9f58QJPJ>5h) z(mLq_T+(5;v-`c(U>cS340JVy((wv`1!MblP<9)%ee@xxUHoF_0N{nO&)PKA_HT zT%QsCJc0amoF(g&UVo;omBjP-S}y+{b7?$T!%lR8X>q}m<=K}^@7M{D>3on&jYm{H@9mP)O{-Zo?Ua}I z%S`>ie3fT#0drMR`;q5?h3Dz;-ah{pfkE;@(mJ=eb4z(_$gFmxxhJYXjq1)RDWeq)z@0Ng~yX05|kd(%SK>Z;dZvkg8STi3q1ucv{qREJS+ zkfaGpEB5pFKEUJlKC-vYcP!i!DdKFdu5OR?CT; zGp@MPclSfy;RhGLL%n0HdNQ-HR}SSmi#Z82Bk6j%R+`h-5gPN=?KsuJ%5l=z)@)pT z9>eZ;?$+u|DbhE!=6dwqAAYkGzv1?z&y$N8PJ4C8V1!V{BaQkX^%V?`G~VyKF)q3W zL!^K@1gu9Y3X^{Vnj-sbl7h)r^Bvt}j)V3Gg7 z8uWg!m{5n`C%)c@?&qbMx%TntjibZUv3{%bshwAuzRo`wkI3IhxW{-v=yd3VR4@{u zWScaXq4v@$O|j8iwc$=*wo2_7lm9;$M}p`9?R+?g!B$yom0{MU2BUJFq{_;{-~`#h z?qZ+wYSF~)_gC?6hC?xm`9`0;4}WZazkIn{m(tVAwVos8B49Cz!k|%=&UW8TBQ4EI zivI^kcOXM49uV?xTm2@Ob&7_CYTh~+W!_mR1n0Zx%q=>$2HX5iK=p|W4jD1I;1{{( z)Yej|T6MN`I_u{;qn{u5#&c4B{E%?pJt!^|k0rPSS{Oe8*@CUIkCS_6Fl$LPYE`6d z1gd}Ee1Z^E(SAyifvjncl9kOqn6~Q;OjYgXY44^gCCL}PnAN+q97zVb@T{KdLRa`Z zIaJ#^g8*cLRGZU*(MFGdozII$Rv{q$#;o55#pQ8b(qOZ?q{CDMM4JEJ%3yH3U=Xru zDnFDOvqaq<%q=0+@lwYRNnDLi$Cm3h)|Zo69g&uKXP4V&ZpN~Bq)t~_8{>N@5#{Xw zRWxSTQ!OgBs!U!0kWvRoQDMUe0i8FwChO&*WwWVo;Z_SZLVy6Dz+$^=_4UEDc(LpL zgiw?1Iz6D3H~}Bl{r0Mv{M;s*^F8Ms4)YHHHN0~(ubZMkB0h{P@T|ub+OXR0dc>{Z zn#Jw>&33)34uC*wBjEtZVwKfuUiZs=2SC3*rBEv6%i#vnKdkH<6of1$NF!o4`TRUg zJ?EWy2PvQl`23P@kR|du0$twLUt~6!&%OTqaAmlo+epnlu>}lBX1&xf1<2}25%hoL zbU9ANpp+Nne|vU>LqbZPED-+%pz)2*H+s2scSq8oYtaEcK`KCSr$F_iGNrB%4N2VQ zqG?VNppIfe6I!uYchDgb+NVE}D^zDXPJqMXQsL(5dBlxOz)QJUZu{ z&Td^63m~;gi{*0Wo}NYiAp%kb`za0h%MIe8Rnfv)3B;OQCDA9bNDVw60L#%iyIvd^ z5^&6nVmud0*@IN~vQU%yk!8v-xAv9b4L zxfz-XN6%RPQio^=faFMS_63vKuJK-u3%sRTw2=L0X#ErP{4s=j%`s>0 zH0q4Pqj1?I_k_HlEd9y8S86spO#%4qo7`^ne3;MltjLLsa(vE!%Uj&%eLKRfruH zbra4S0ogba(0Qd#>`Jy}bDSIARMTX&n4hrbbw#(VbO~7PCy-h@Re(du_xBJ=v9nt( z$O8(16;~uh;820CBaa!eH@SqW5Mo%g>bZ1~K#ENa{4j0drt$)yu6aptrIf{wIuKi= zzlW2gZcaX(Y@H7g`od~`^td~%d@>(*=$rXP_YW>kD*ngCIpj_gVRt0;p8P$*q2QsG z9XY#PoC2k2b5ZUAy`^senZyGnRxk|E8=CD!1;8hHs|X`{c*79taQ9D7nlR52-=*Jx z;VKNVh}e7kf)VhWUH}CwvqG>67y#L1KL5#JAOdrV%m8S|Of^|+YTvmv_CW&ly-5NH z?$^>4id<Bt01^7!=Xt%{%qM#Q5|0$dt0;MD!aeZtD3q8ec(v-a z2F!|;QGRVzy4_Xd!NI`?&tez3=(B|HUWs8-&7f|CiNSQ*EZX zvHbQ5v+o|;Vt%qoL-Ns6%CDVnF-?lrj#x4@;-)}vHEKU8e+9~xc!4V3eFRlwzeuQH zAn)0P(%alV`hYJB4c`WEdIlf6Bi?Kc2cuB?S$i$WOJ!<=M;gqh$%r-t+yTi&rIDR& zoQQiy^`u?E!IO{rUc|tbfPisS=!#klGrUx+Li<4uZP~{|aed+azfV-RIH*h*aZzy_ zn-|&Vy4@67vh0TIqu&F1IJ|q`b{39TxLQ@{-_Wh+Y^S#BWy1P;X3k^_!4E}s(WVKf z8EifiHKO}9##Iva900q<_(vS^qcVV-{Bw{jT~bhCfUr|Z!l+g(=YwQMKk$j|CTOM23K`PnK$po)DF0Q^ih4@$tg# zw9?~%&%dqS6G)CyyhS8gnQ6B({uRw>GwyfUs(44oi@^;OHM4Zp>9dB7^^?vgsVMe` z*raecAUi8f2ZK2YQwS)OM!=*d4Kr6PlE%Tm#-JDeb07d^UkbQ_&k5w_t|fquApURG z&$#-9wXgv2TDq9ca*1`0i~QfC1IafbggrHq9hE%6%3`NH1aftv6SRdyo0oAvhamx6 zr;nmAJz+wek|r57r^mzh-;M{zK((6{u+HFn>{wCAEvO7J$2|vJ3 z0dl8OdYa1}V=?xlEye1=pk%6=v7V`B*sA3MapX!b2$E$^mN54~V{ZoSHc|jwT0d~| zu8PR>_V}yA&hWuKr)IOwtPT1-!Ca}5I1(X0EwCdaCdmj13Gw~j*Pi?!pZQ-c05?54 z7TdKBY&`pM6lBny{!k2l8^5yNW0%b;w|QA2MObg3Ck&RE04Jxq9TLs0{J%5qo&>ml zob8?jp7Aaq)p6qoXOSNe{7H#4VOimK*^e&w!?nIU0UF``k9abv#8_WH9fwBWx7W)# zO{Ns{PY-}z@&S1Ijf$ZP=DTZdr~TYYtf_CUwx_W|xXJbdJ!=wr8`^AUk>*&o)qKAN z{$vJJilQBz1=~MhprH@^smJs+=798P+yTj4J*f~7twmdZtTA|3MHm1GTaZJ==z5;8 zc_R(Sr?Hqy0vN5Y70?$SQAGOMI=DhN>h=qqwbdhB99}?J2$MF0up`gld z1Q(6ew>;H4J)HfIz?awz{vYz*!Yj&keIFl&p&MxhMx>;>899hCAsKAl z1-F?65P=9B8nt&~j{92tJd|l7DD?Vk@tOV?-vO(&Y@+B^5P+1CY`k#8Knr zg?69QJ74wckVVx@jf4dNwszo@bA1QFVPU78xiXi|rJT8{un2}M!5ziPR0MY8?hJW1 zACDH~=LR(sXuJSs;wy(P(?zgA6(ohB4O*@_2d4|CH7QxjJ*VIb_b-$#*3lULE+*>@ zU`|^XIIuheeELT=kkw|7WECT|?Usbxy2T=HZ z^nW!bPpOs;>*mHW0{UXGfuYz`)H z+qHfMF{$E32)s^l++R|}pQ1w0y9l8(Dne0@DPjuDYT2v2IG+j(%7Ze&FV&S-Cmc?4 zM90S-)0M!z=7@yih`xF&>ahBdc=ejE_27@7kyOp(QyI5^^oV(GD82NCk5CM+F7goi&5LmXb+P!iC5 zEta08;Pd-&|6|zVcLl1h#99BdJ4rsk$g)fbihYWAJ(LX#If<)39B2c9U8rTD;+pX{ zB@;JAph+Y*Kz941*031t47yf~yY_ALorlPv$d}b8GjK87)~c@vW*X@27&1bpDZ4${ zz-D~Mxu=^`lG7i{Bk=RsB2jKwI}B-vARj_gN6x?T3-k)ilrU;}g|_K824-T0CWkS~ zdY3T~x6EFB!BNVSy72%I7TV*2vFKsg4`FYGp=`k^Hn+)d8Nv|Hr#~9DOBH!A$*o4g zesA3-PbRmr{rDZh?AL^%Ed5Pxur`=7%v{BU>YF`fXu|(}{)p(sJy=4p62xkvMN~P@ zE1fwRryWIAXZbeTlk70DeJEslACHE-+HG;b@78EAxJJaZX1mGE)#? zAt~>mwKdr{|BmT_uPD;yQ7umRwaU<&2`G@vxW_07Yep#YX)OybKhKaTvPJHOvIQa! z!2a7uGyGZrrB}Zo8R9M3(*qnLn&m3kHZoN{;A146psoo^8sG7o8|+HpBJy*ij^ujA z1-oA(@)BsW? zj)Gzp3z~Z^CeS6a?$|eieLHc0LwK#|6~YF`PzdFXwFzjrNNJ*Zb%lHAW$6mv6SpP} zQWrB67t4r7$nk!d7Y6A5^MzKVOv`P4k@3Ak4Ngso(gHAay3*q>Vjq|UnzR{TNS6+! z(aT_x>ADINR;!qoDMp;v5dKm0&v=|GpDx`s!|mR>PG-AkiGMIo!Qv$3xa;Yus$v7Mj-Mg^yl?oSiVd7dvAr*p6aJ&U-5GB(_uh0 z&uujt*gIgw2P}Q4JfIAwdtx;{N#_L&pz|-|8-kw>(A4cf8W!7o^^Y8Saa2cORH6jSIjGy0Z`E}p4yt5=+wUHiC1 z@X!DK*T0bq$|&xDhPrzN&qo^(>e-^U1yd3=s?UAm#r%VOs469$^JP2zz%cNMC}2zlmwi! z4ZD)~o#);pM*v%vC7b2`blnWK*jBwa);5(-##y)%3uCS;ziNH_*=4S|fUqT6sBS^-Ya&&3?u$TtZO@lki7)l3!$It`Cq ztE*O}lM-+_rwT3Pt9_0NrW*WAn7kG!@^7K!a65=-c*r@g@R>ERrl+STR_LxpMMp<_ zdU;iE?4|<>6TOhNO9V@^BV(;WY=gP;*{DPOoet&e{{{1?NkLs}xTsdf3;8=qm~g*{Vuo8UALi4_!3Rz8}#Q%o|S^lo@7Dg$3t1y+ahR_kl1({ zIyx~Jlt&=UM0_SX*7r9?_l zC*YQftDXE#)v)#q{%w8JO#SJ$Pg(pz-sSuE7DD$}oGsKvu2$Ws+v}B{ z*i8d>PB%>fYaFojhjInnu^I{At;nB&<1U6i!4GPFI zpChN0A2%u@hJzYdY`3E1d?YWS=OgQp&EoaoD;xkJ~#me(|UYn zH5q&SMkTklJ`?u>|IqH`AD<5to?=kl#*I{tkDf{x^d6H+uTPX~lAAzAsD4cdRDq13 z;rwJNHK@sF@7H&CY5+thM9D)I+t0oB*z9`WS3EF@Vm$aU?w-;N3Z4N!dr*0+4|Guy zr~Q2T0TFpjG(JQVnNF_o0muf!T=N6YiX++wz85yJ^XqvpS!#PZ_Aq*73unp-Gn8n!&rQhh^jWq0TH>Pg5YYZ1 zelBzcH8 zq;9@DJYiMOM>Zf7gAi;7lcpzvxCb^}@v&>8&T7S0ZTs+RCY;#l)xb2bnAcau+c=ph zD6SV72F_!-A8pNA>@IZP01I3u_j|jAjF*oBR7pvg?5>Ikuv<@kff^a`Y1BpuLR8+0 z*jodsr}s-K05t3ZxAryUB@o)ud^RKYrYKAYP;d|y4~!7=A*&au!^E;d@=5}aKuuBc zUdBr|?HGlA4rVx=nnt~se3rV8{Lbv-cTMC`%-~u{!8}=JnWu)4E@A|za954h1$~cQ zWVbyIr0)13d{>8V%KAjp`V{ z6Jps0!BGZCMOj;zJy{ols-K7#`ZNe09vTMW)9LB~yc<4?1|FRnw6slwb5&B6-9J)= zzd~^=IFkaYGI6IoNH>P+Ha|-9(uWVnU1JMh`>DiRt1c?{thYKp^>5LR0LG zqZj;dy_b4YZV2SJ_qZAwCg1%QSm-oe<2}ns;^MN3Zq@klH6q*vlP#SHIPsu$aeknjkl;8 zD7I55_h^_e*zZ3yu-6~j5N}tQmt&3Kki(jTKjFQ9tuP+={OMwsO`P>!;`c;9Q~3-q z$4ih3uXhuNhY-FtS~zO5_aP{P0JeF9+>l)%HgJoAim1xM4<|*UYu0u$5s+Q z>+aE+Rk<`-CwfpSf!uwv1>sdBvF^es?P%n;uD zuly)O3ChP!I*=HkA(Y^&%hJMfu+(36-OX}smXe9#i+so=S^T>DCf?OZGEL$`pM%xR z7r4!{4FE{w@|-5tbdkHCWaLfuVi2gK6hR-y_U_8KD>2k^Bswq*%xfw?bgZ;?DZ$3U zp`tc~QXa5KJRJP;{h5FqG5Z`}e}kWoBUU=zTXS=7#Oo%GE*UUy!#i=}o`7t;;(0Kb zk<|sJE}=6xjluHk`%T9(S$gRLJbP995nSX7c;w% zeYyJ~=N-WILmcm)j&a^6*G>cFQDQPBzP~+emZT~Mbul+=U@_=QPR`M6+`o0a|Dz`F zK#mGGG$3#dzzpwAk{ZgKUj26%dXHbVkQ4Jo>FVM~9SfG`&vq@!g{iTj-5jilL$#gV z!-PCG?llL#p^8E{d-K8fBRqfCCR899wv{j1nbZSHT=2SE5lpivfI1Plu%UV+a8t;W z+ggSpUILmI7ap^km7CLLyAW)Do;5lqrj6b}Bfm16)}e?pS)W6E=z*f80GLqq0f*w; zvV;`i;O}Kl7T$O>m+o5Jl=n%Vdl)DK1UDO9fruzWuO|H%GAvq(cb34*)H@Svq3Ix5 zjxLGljniq^xlS-@7;7{r#eI$5d#z&qfI<-Ky&3HU4(&e0?x42(${JD{S6?u&%KL-V zUcG$iLEu@~S|AkvBCs2;_0$-MEAKFtLiDd5qZ!g~2^=vkTBZjg;#@YW0G_6@WA(k) zh}p65N0F#LQ)niZqTex}B0;cEh_9h#)5NKw-2(GpdGcR*pPCJ@s$1&znYEqmZ97YJ zVxx}`EqYH-?{$0AN!NeYQc>!AH~(v6Gs{qG9z!9i=(lF_zc19PefAr+YBG!7Jx4P~ z4-@wUj#d~G>!wR6Amm_^K09r+j-?VZ&-KIy1U<{eV}c`s=pRYv8GcY;TsH7!lRJ=J z{rq_?T-#!P6)#Vwi1IcV3|00CqCsN-s;nYCmv6X7LkXwztDm_qTvZth%35Up>pZ!J z-)iql?r+v6gs=Pr!cWln)I3OxJ5$lKYyd(_M@_?pH5(lhG%ZhlX^L|oYL`32sZNb| zh?`7D*J8>{L!iS|_GDbc*U#^uB%tO#-|u1r@o*`Pc1eSHT-RabUQ{dNf%IDA=jV=t zW*c~2)j}QO2g+CrY6RB1RmK*+r;k=ErfWWvPD*)c{bx4cnV|4K9J{*6z-hyb$DTQ# zJzd(aRfi!tB8re8{{GY3>c2@}u$e`vF8=xv@I4!^CgeoY3W~Vd2B!OU0(~iOH-}t* zRK~zJ#36GImHK~2B4oTW{H{UBv1v|HWu>QG4X$T4bOzo9nvq z#wmds*dCNNX8*a8pd8tDA*g!by6wUrlKXb2q?5;9^>m}o2pM#IC9I$$z}g~>y-{JrZWPfZ*2^^!cS(4h0PiJ z;v`EKz+mY=bI0U+1IL+7UBmGitmJIo2VX!k-2u?_g{c%_x4n`4j3=?~e_rv_4TUzW zMndp@>bC*074(g|6LJmS{T^KgNtIm@MY)-Sz9@q`#@^~OSSzy}0 z!=e2#UZ9*+kZpzFI8*%w{ZPpy0P+%y%h#5DT#ow{xya*~WKBROptgu9xfd-U=5hqA zY*>a2I`%Q~!A9Z)F$z`$X!^yR2YRtADwzP?ar?DSKVJP*)#{z?35+~2=ohY>xD#i{ zoxp|eREyPNXEseyO2o^7ai+gu-)FaoI! zd#_ASj3=~;wu+-lyh`=Y9fHijkhun2Z1Vqoe{Tjucu2sL&Hsv&Ij+`Y>q|_ohGY`b zC&=f8Pq2^5zdltS(7dMl;zj?>o5>)DhT21pf`7J03q~RFX75)Cpqb{(=RV&1^X^Y+ zf-3)L*V^+@1qud{qnd|W1i0hg`26M4s{?o8d7;+_)zb5jKR5C}+o^6@GW1APV< zrJ6xnjWzeEhVP(FZ0I&T48MlYK&&q@bduIIr`WW*M7KuoCOFO$OYM5Q0M2H{m6WU{ znq!c}@lNI@2+Pr>Z;uyVmkQZ}JK_n42|Rs0e8rR?_!0jXq@yutbzYg?0wB6tx>Cpj z7!c@YY|!9)vH*GtaUfaL0Rftpdkgf*d7^U`S$&Q+8P~2+VwfQ}EgI@Dg+ht#cP{DY z>oGU)f5GosG{7PN6@*IdBGYpgD<-`hJtGrFm+Wt^{KUuPz+Km10jsW2^RAADQtb!-c3t95(ZX9MMbHrU1>ZSx56le zT+j*t0|+&3^f&wJ)yzC4JXQM+kJMAiV+;=y6x1kS>z8jcLN$M?fajN$2s$GdSGY5| zI~&cfrnh{N_Rw+^y0D&lgVp(s$6`?~Q?>N4A@xo>&&SDYN%$SnYe)3B>6`!dgV9_pg z#I^`I|Av|s%y#=NPF3&eW;~)$^aF$w$~rjUIGGD^bH9j*AvbE6C)2zNhCjyUJjhW4 zjvaYswRgoFXP!vf)eb78aE;~}-5q{Ktdac;u4 z=lEOPOUC_;NVhi5yhNt%MA3+IFiE$>Wsar#bAf!oZ{LB1PWG;IiAMjG**dR?yn4G& zk#0-;rZJy#u9@#fGfA@tsqT{u;Ic zM;~mFPpK%?cwyTCiwm7^!Wv9Xl5p&(rAl=JOVFTUQ(`~Jj)5)UxJ`>b;jcks%b_y( z@oG&XB>CXr7j-v@1sQdoLqyZ`5 zOARNyqcy$0`|Eq|q{dgCN=$nRWLNQ5#XsfuJ~^XK{i#5`mKIav@vpddM1gR*byRG9 z2W%<=IC>+={8MwwwIn?nSg&pPiE9w{>eiPQp?o&A`)p@`mX1u zNp=S-=UtbyziUT_i1v*ZubhGI@p6;&-T9D8&~%^A-39slUFOEA%4qBFaVi+FrqXFT zG4jav0x_pktIwMcLq#0l*De?O-af(N{P{M?gAaDY5oaVf@7I(mthlU?x#pu4WN&ln zWg!Gf#O%jDIg38lGw`|Rtzc1Nt?rd`a9>I@|7|&dL!dSMV6^f8*eMY=g}M~0UC(+M zMf~Uo6~KQPSoP;2m%of$1yyq%s%#gNf^fjlXM#bo*ky zYq*|(X@ITxk3&mB-61N=;6B;RHuyo0Zu$hBro&Le)_??8;y5XG;oJ43RJRE*1lu@o z0ge+K139IA0By&|i>rXxvH&PriFAZI&G3FJ&~LTgnQxOCv;KPbLz$8l002vXfz$<0 z<>=SrFP0%VQ_}xB`_J(E=TUw|PsvwyiA| zx8sG*`_Gz9oJkX#LkQO{y!MvXc+I!d@dJkyz+~w7=w0>?{%41dp!}_wx!ivfeSks$ z9OcxrL-q20cXC4Pa2J2A@oVtQ8wL)YY%^eNF4euuzXP=KvY;B z;CkwB_+IDzwsX&GCSefMNxaubv@010;+BI=6EOAQ!@|Py)|mmYW78A)3@{aY;w>Q| z6yJ6`T`LffWAseu(#VSR1A7{e>iY5Y1JXnSgQzwMiD>!Cq^>-rr6JMLP1^(xIQUVP zf`N9MfS6RCiOW-~!Hsj%ik(g|P=!;DD`$xnHiD}Ix$);|&Wf%EY0vhQPs_(xg&a6J zy_?DA`w2eDRg!pa2l>W;?|>-WIP6kgWjS#ng6Bi07O=CJB&FmTy;RFRI6C63UQp+? zyGqG_xJmuln$5 zPXLVE{UDWZw~vr}q8;P${cU;T{YRg5(t}Ptk2Yl|;vo7&q7Fm-Us|KIo`b%gUG~p` z%|cTqOY&RQfXG9!9ro^`06 z(gg^dsa;17-G+;3;h5feJm`v%uDH0Pg!*+ z6%g}ef|r$+hXJ>$87v_U0hj)MqygwS8<@uZ(0dGs%hs^Vc%k9nrG!gYSbmKk0o1ac z(;R@)O~SZPHmn7U%nTKmc8&yS#Y^vB7XW1z^7WkJ9$Id8J#Uh2ssH?E23-}6NxUC+ zz6Gflr2>lI$FftesAh_Ej3=b_5?-mD19_!kA0y{1SzWhiLLf(d5x1f-T*L(c)RH>D zik!Gc^ZSxbGco2~>g$SD1qE3;SmWU;oY4*Qq4G22I<$w2wV^`6_`C4>EbC=c9_5~=Z-2<34u!rz+p*{Oe3{A#)-7C*> zOLQKm1(3J8R6SdX)2a+BOw-;aBgkNZ(yiO-6k|Ja4j#1<#zTP{SxzL=MM}ZbnRBm! zVrA8AgT{ip;<+?q4qrpV?*u8HJQjTuJxm4H*>(qVTs-ww#I^9-hWF{SK}I+}OhYKa znaNWUsg$mjGLUE&%k~iJ(X&ciq^GcslXnj3#&K8~EB-7evh&CVqJm|`2|vW*q4hW0 z&0U|a9IY`7I&|%e{KTS2T}1vzcM2%>$Yj4^L09PROHIzq;hce6KMH=c-6d)z5T*m+- zX?rHSb1|5|_EhQ@bfPu#y6@}j%iYxgw=Bn^y82E`lC)?!>yF`_WO~h3AGItP=X1kZ zMm{1P1-O$kiD<4mX4^u3{RZWV`=pJsq=4u4J0YDmS|lRkp`8Zy!rsB&Fkv4UBeIGV z!<__7hWwA^s;1a7Nflg2Jjs_Bw6`Y9ZXOKke)Y-t_dPycPnrfWkQ|!y3M2wXJTzJ# zgP(lYO#rUu{f>oTmmFOgxuPw55Wm0tL%HE}mAm$Vav0L)8pYQ(SX!OuO2dQrX(c}P z`Hyome^m>rD7FafydMz=sb3*O_x6%weH2gVuL?`4p5zUl9jtvN^H?8C{}ekbKBvOc zd$2ief(KQCGlI~e&~-hA-GJcc(A?9Ltt5X+|BLvBqK& zOy1L?uOhuZ*{_(-u0C2P;t1z=mrMGi{2;!0?96Yo0fjZGNFUZ14gB}_^|i_$kKV(c zgjAXpZ|n$T!%hUC;d|S+f^fUG#4-iuO4B%L8hTm& z_@v^^g4=~HWf`59Q$<^YwR6JsX(rbC)U5W7(_%22mdM)#>=4!~Dvb zfkg9fyO2H#nZh|^TtyyOm66EfAvNY3->`T-OkGd*l=59plg_bX{Ig~|!uMS4OBy}( z`@xqCl0WV@qvDxI5%uM%h4os=l4stldM98qw)OOc`(er0ofkI+tv`5&RUU***85b# zJ7`(Xm5>S`XsMaQZWA-JZv~JuW_8yr+3zL3)@R@(deN_`ny1b7h?)KH+pW==ZUHTC z!52|R`N`P!Ke~A)_)LCfT`AH~7}|zVC-VqG*@B)SHlsaWB-lA^fN{nVeF@n}QI!UI3sQBSl>>m<7wxK+$6`ksXil@)1jUFV?swdqr++zYHFdMdv&fN5bF60fiAn(4*3v{S{h~WbzVSGl?Rlk>`}B9- zbjRXrm=hs`9m-eDg`ShPT{lb-bx0H|F2{*y)3iOgebW5Rz#g&MG_hJfEQB!Bp2k0) zP7@JeaLTw*MfwR(IUT}W511cnFMTvWDPFk*MP1kF!P)~<>XqHSK6wX=hN`Y6JyM%F zVf+ml=mA0-Vi=;^=R&VXDmBVUN4}4WU@4d8#+{*#D@%2~(hTKdBiemvmZ1+|UmsbOj(NII; zuoX=!$zmA-PbgN8sr=i^dmE%^f{UMmh-lJ5OpOnBg_-JJOC#VUyZ!o9>s?yPa-CZH+d4q+kGpB16_%8V)x~hKxMWdw zVr-GCC<*N7Mrst$BVy`XMbPnrJP8OpC)rDq`xGvXm*(%*nj_s0*NucM=YwI~BsyCsL`yhW?h{#y zp#lh1f!6b`A!1}ep3P*1qc<<&$sIj6p1FrGeQf*=VYdY}#{``_I07#uxL#GDui|Tl zTwZJi2w5+a*V7bd14__yDa3?O`E6<6W8ev#qIkUf$7u*;s^s#Bv26+=CE403(Y;>< z4aFE@2alPjY41mA?o5qDw}?foDXN}VzE`v%iMSYer^?{3Qs|1yO^HwLr8-Q+CyzpV z^h>Q2AG7X~8-Bh<12t^; z>b3W4zL1KxAoR1Fp*$nSSaC3GJgG~4AaxK050)g*-Y8y!<)uW9kpc<;d6fW$);!N% zWZg-*C?}%k>+3t;+j9-GA-Bo#73>4;5^|xJUWOL7_psjYWe*#>WzlJd47m;2pAUq3 zRvQ!Tv4sX2@1X4rh z8R?oR)oj@jfWPhymv^1N#rP90pksf$m7pR!LW8F!zVto;IBLHKq&TG+pDkGeLc)Oq zB_yO97eD9*sg7bdxj0t$SEE|dWH~qR6e3blhm6uV%zxB!86r@+qM5Q{UoHF5jQ6lsUl=`Saaw{^A;(OlSy9_XbjmUMchOuh1dSl{#BW zHA?8D(@Dpvg3ZX?zpez_KWinp5dbth4-YpcLAfoAfsv!~iyr-80nHlisd3mE3)1=y zK#0w8Bs$bb#A81k@j$;SCCsBrYg%Xi%(^jO1BId4=B@&d`r&rIo>BivQ330(D~h$H z=XX%&iGj}k>-7~BOfKQCIQ|E}3hsVI?Vx}#`|NOURUK{#`(01ZF73=-i(^FjyqHG? z8V1+78Ih#dGY|AmhW}8>GRXm?mg%=Ff=mrQP7yeOX!g3a9(8`63}X^OjP@vlXMXX78Ao^~Y{KU@SDUQ(lefmV*~ z`w?l+ZG`$evHWS7H|%%f0D-J_DH&+8V@@%O=hIEe!eopIk1CVbEg%p0T-a#U#*qPl zG8!5{ornd}tWH3nKmKH$-pu&Nc0y*r(Q9iQSB6n_w|3@rYo6Kf+;0b>7|rl6??+C+ zb3sH!cW4bHdv3rr(C2INZSYZq1fIcwNTz>(G1e|gZRiHuK5uB3v0;gaG3WTi1?N5c z(%Z9%Q`8SWTHtuy{39$HLP6g=c5}Lxqkl-KSnn~L z0L-j4frq};@Xwz=ZvbUcM8al4Fkppf05+7(>d^Ah8c>VeXTI?obeZni%Cg1?;d=(p z!|(j^onL%&J3wTl!)51ikCypzeV&?{=8ka+jnBz(nDgnin=fPvgJ5dtbjr~1@VLqu zZ%sr9Li?L`G8}_40;;!m{nW*E;4d55`*J)5u#36?*Le}J$`U}r&=pB9ya1r^Bu44y z9e{U+0sP~D40ZXuZTQImhR+3BYEoN0DZ;!<>*d`de=cqO9YoKVV9BF7sL|=9^Qlrx zb4zCGsUz^?4-t9PFYv8R***qzn&|8|Wl+vzKff9%HNc_K;A?X>q2u1c3tiCho5bjdIqD2^E` zTIU)oTLo}THo=e)F1&zf^G!+it>Ni%2ZQk{*UtdA<+yiHBmi>4DcIrGEI;7&#Q?5U zr(Npns0Wa)V7sBcc>o6mjVDpEg?9s1S@xbyXPgS4O0a{=N&;snJ{37Yp%XDgMKFn+ zRY*v;{#amBa(pXvI|IHhczv+y$;9i9+r2){#=?NMMQ@xb7zT-;521( zOUnX~^1cBQ6))mokkzcrN*gjOOmOGo1HB1cyfNgszQuVFkZdq|r^MMVKr6$~qbJwI zCkz4FoUApU>4ycc8NulsDvzWplvo}uOhxF-WZ&mVNwXy#R0Mj-E|FPO%k&uXJkpC7AAyv^cr%XcY zgQ5G{1ilK_Ju5)gqxuIK&J3QtkV*~-_{GF?EZnfO9i2_C1;7=>_yYv_-t$SUwW4}d|*7m)SI$}Q!_2Y^_Y z2r4ag0JOSWU=$ujp;dqzs=Reo8tCAV5Ed0OdZAkuT=DpzLsMq@d^qQU%}Ab+v8w>! z6o6*tYdJecFYmL%4Ji`a6yUy@gAHo4A~Z!4i6SHuqz4QxmYJC!%8{`*R99!^ueJCg zHwjL|fE*v2JVD#g9AH(o7#_nEzeuXtrHN&qB0i(hn<-XSJN!c(Z#Zruu=c^MqM z%$s*567>no?PS+R_Qne%dS97w$FBVkn76{b6l9n?>{9){BrGQ{m(ZNwR!XDd)XR!7 zPr#?~x{cUz@INcEL8&OeG@(@UhcVU6Lw=o%3faUv&N_rjmsY8?Pq8y zxXc1-tvZmqmDghVU&+S_cd24gFbcF`q$nh!@e5^xA=|LxcRaplYE<~YSi^E$sen{MPoQj?kIX!*`-DfgONSYS5uH)Or{`^k8F;8qA{-QCV5p{Z)}l9*pzkCCOFxP%j7( zw+u64RsCNHCsH(bv?J4J#Qx1)~H|q_PF=-=tmj$ zS{na7qEkB=%ClFlt=(0pZnw+~fr{&9-3B5>Ajr(`oy8fcVn3uC;k&%uD#a5#%R?O&}fn?KG`cyvsr$nPvQW zVzui6t`<{aOA&y+=(o)fW&@31pW4D#&@~PI{<>NlEpLa3w>M}sZn3bJY!`C?ZTM(s zBVa7&4dTm0&1!2U&wUufpZQ7w|H0$+#IJW@4)9&!UKHE-ZHmFW1W}Ru14yDb&{+`h z^9}Th48+YBUZbdpav2RZJLA~g7u?_A?g>_1K|q3#ka;%L1;hqK?mPqMBK_NG?~B=s zoVthbNb>U)jKF4CXzO8{;v%1g2xo#vqcT6J9bCB+9FZ%crj;;4*xfqRQiAzgKwXjw zNjweNg%sy+&xBQ(815b^66&)#Odi^28<&T#&(xbF@)%iFdevR|`A|Dcphz{uo;5~> zKxUr~4@JX7Qy?E3t8VRvp07s+VKLn2gp&8*ASncYK4M(JS+exTd6N%%q^oZYvOIB$ ztOMzVN8H*OHeTS8l<*AN7J9Yb3*28Hzt0WL+mpy8I%qj33J(W!_KZJ`7$+?O)&U4# zf4&rU*&&Nq`kRV@j;-BZ{kpl&d9(Fa2pC1KZIzEeJ!GnW(;vyKJ)HuHomvXaO4~y| zcr8)~+lk-CHBF0jYDNloFN*20#H;97uspPy1}Wm`uFGrt%5s0Rfd`Y z+Y4+n8ckV-0AWrLa<4+0Q2Y~lLlBEcLpJ%ZLnMX$iPHj615X6@N_u~0fnLwvYBI6m z5iK7%0J~rR5NG=Pf-!;Dihy`o9%V`Gau4+iJd(f>=npXR;`4#$u7jNOD+IjG>)fTf z!4;{OHGXTg{0DdzH|kk78c`fwG&@Ymh>_iX}Xiugd)R*6vjXmVe4H_mvC|C@C^ zP5#aBF3w5WM{STQnc$Zy{N;%{XdXb5`tt(*@wGE7P}T5S@T=g6%GAnWyxWB?AF!+ws4Kzgop;Ik`{;mIUWvpm@3_XLIgZn>>m@r`#8LtBD zoZ{W(y+r@VTZ7+ZqWFo*H)!nw>o4dtrVJ9ai-!7^}7jJxh!)YJKuC{9T zIzCdaVtRjoK&@|?Uw2GigFz#CDh&UPsCb=?O;#gJ^BL1*9H!TVS*kx@z^){a2Cwsi zwB!;jSQxubx3uBJB7Ws(0T**oDuR5bu=rC7WXX1T;gd+Mr8-F8zd2ifWVAx8s0Y+> zb9Wvl0n}kiHSKAQf|s1fc>?Z;Y#kiiAb_Dv_^;HA3A2RSh|z|e$XA5UML42R;2|Q!5S{9(zZu1-2PA|BOvmB>|)di zV02SV!l4j|_=);0MZKSJwkZ{JYywtgC@}6z07}k?B!lK4!rOqs4)ET^_3FKy2Jco8 zm#>*fM?9UQm58QDF9gv`%<=s1S7#gmB|3L2iU+~NNuXd~$rI%Dy8 zIFH`B4NG5J0p6NHQ&zmEOJ!i9_P9SU^&fW*-bv8^;Cd%TDQ3ZaU*k$Uvz#C3$DR1}f6pv8u;CQl8ego-g9EG%f2favzVJM(^Bg{@p(Sthe+3%v zF{)L1#*g5MP`d|XIwJIfkKp1mmyX&s#0eff^>8tMy8P^H!l6(dKnV{QC4no% z^KLq+XIa3@fOW)6Tm28mED)fd*Omeksg?65b~g>v(qurT^n6bs_KyWYH&Fs>kQboM z4NnnwZou@r20TLusWU+8`ZwO8D~=Vdd+m6kgL_5e!H5UzF-i;wO9b6#8O>!u&R{}7 zrLp9D(zcDBblWMUuKC{F*T|`u#Mc!<-KcJTtLj!rNSL-%K<9K-iZ!RH-rb&K-6f)W zuTFbr_jgTqOAYUeIgDrt*>q*drzFJ9gIOn(R8*`OW+bR^9xY;-?*dX6uZ@g7p5M0! zc2?D>YZwZbq|afVT!a5b&9UcMXmqqtizj5aN4Rgf0pmYImL@9phj&fq8wgbcfBldu z;PNvmyXs&nLi~?HHsS5Rf3a%MuZt3}T0ogTOKb;xDv%lZX|{8CFeq|EDQID+hk~-i zS@YAf)nWJKqzS+gIRL~Fac}gBw#;=;0V|_Q5GRkt!>48qd#{WhzYfb+*OKW)<3 zq0vW>yoe#++gp7#`WlQg8}sn#?NwGze5duvhmv9^z5{mTvymxQneX;0CaWgOdS^eW z5c!P(H=Yy;*H0MkeIji&D0YqP{IbrX;%Nc>Bo$NC9ytPi+CYZ={cb_Z>5KR7xapvn z)NSzfvNQTW;3P`rk3+Rv{_{eBQ&DJA^xN@>7&RN3JQ4gjGW!*wthT{AHi5G%ZX9;* zVY*(X34l(zO1lNXF7-zL3oGh1(2YWyf~k%eAyjcM2Rl|5VaJQNW|~?SV3+F>A@}8a zc}e4fUerzoE6o8)-7X-cbb+ebdBqJtQHx8d0g1qxq60LX7eK8Z3x*di?_rw9Ctwz# zbbhG9IDneEBk5-`SdBH1Uk%iHIBS{#=}s(0BIHfOX9{3ny&p>g5x|03KR+}?r~&{~ zi9!XN)_ot%Fokn_H1nw66TpYfeDtq66N&>n74>h1bxU%xfC?!`Ucw?*pBEzn#8{=A zPGERlZ#cARI7NYN0zUwX;sJov4Z5y2AhW4qvOD0nXfX8$DnO(r&N0#k)Jr@YPhVjk z5?yXA83V8q*?E*vD|X`kv~aacU=p?OO!;xevtp_9jcRI(usf)GPmgdKuYx`eazPt) zg9@(!M?>wFb$l?+bb?NKD}$Wn>J|DGwub107!w=w*esx%*QkS6cGcgEo%x|pu+x+( z?rh#f93Knts=ds96h`p{A14oF8#J)+V*_-buDX4;Zp{gRb?p;Nn=dz9Zu%f6QDCvJ z3n;hwgG_XxxSi=r@`srRI}8{_SwiD`tyDQPAU0wPEkpq4sBaUZP{LpUN~rgl%N}I^ zOFhTxT(|R*2P2?+Csg1B)IOP|&0O7p8gnwzkQ1Fg<++w$xd1BroY_=|Oq8&;{2yK( za;c&wVi+5s49%pwK8cGZ8O8G5IAwnIK#&=eDS`*u`sDq;Q!C zVA0#&(`WT4;c|ex7#m$|RL*`8VXb4LR7-%#G(Wh$+sjKpL_ENUy&7F2pi>%@Os992 z?xEEBwd2BwIkhK*wMRZWgG7dL>*~uSjUHP?1mP2HKzrgyPH5J80A_BV15j*tG08#$ zSQ=O#Z_l|MP8oG3ioWwVYR{t;DROzG;NJsf_@0}6Ri7k*%OGz5_X@_vWVZ>AxdZH4 zjM#Cvw{}adlaehVh*h_d^(R&&t#=*lp%37L-88Ey^H<**$$zJpXL!#gYFdBTg%>!6cK?)~CCtjPT z7}4{LGjRVKDljvV7p8Ey4j?`#H&KW5R^1i5i)2CJaAJWh{rtCl-G6AkV%`$K%}HS4 zlLY#S2ptAEO&?g|gA?HE!il4-OfSeXu}CK9gqXe!k_|O_aNp+P^Xr1u*+JJ|W;c~o zi0Nnq7olq1E@lr{Xrpt|tUWddqwr~F``3=5&Bj^+8Tmhj+96mH#UG6+G*$s|{(vsF zd7NNv!kzC=9DzR}*~|`Qgrc17HvtEO8a?}qU9YndN2I-g`J=&XJT7Q}Vl^T+CJO)^ z7=}&)d4Fp&FEohObEq7MWF_5Kzbn=#_eimFxp)t&_1ac)&Y&p<%JoCd_!J zX#XR|Pt=v7>KcOq=~1eO$Gc>sSLku9&Sb&Q{^kf~EUMR__Jlfc-w!`SKyNqr%(L!IUMc=Y=lf9O%yCv~H7OYDj zAF5;(6CFBp+dlA_AqgE3&b6OxRDHJ`#?wr>B4Jr}yjpe}VcZ8M?*@Yi#&p3Ur3Poa zf=}}Lw`FVTtnqf9DzSjfn{>oCXHu$Om-{UlbRWwBE+f4L=$rd^jp7*8RPQ1C8V|t~ z=1z>jWRzSXLD!`(sZ!IfYFLtIQRAB{jH4Zi|y&-Ny_TKN=ePcX}&b{B&D3C z3Fq9CvssV2)I^(m(13VTI16IOZBRhf<4=$LMI}fe(0>Wc>h?9cd+FsZ*Oe6^8!PdB zU(q^A0S&5T5t8|i0(?EsN$3PnZVfqan}Q^H%&U~+Ra!tu<%KCdbQ`yr%We9%kl67 zVHqwip>Ot|w-r8tbv+_UMEuclS6hLlMYffajTnyvc|54wQ%YNJJ9`Rfxj5a}n8~`v zb3VYi1!+U~ar)Oo#;f0EgePlAHh~(2l^^rm(ZziQwvzM<>qhePy)6~-*t*iExdt|Kp=U?&!+=p8N%csyt*uYIyG zoWpZ)3@7x!R@Mn?vb zK2u_iy-RMSfCJM5Q$$YjZmCejKj6tN2)FX7PV{@0&ndQEU%y_O5gN5&8|CYRX0<;K5F*L+S&HLKl18%bMhfYvUp^)q=hSf>*9K* z_9M5mdIRB?@1FH`-DOZuE5{pJ8D$PME=4Qxr)A4el&M)Qt7XMa{N!KGp)e%0Cu8_t>_-H@n%hwglQ4sp4pNU@Fks5hN_$4C{39UXg%RwNSuk|ZS)?e5G zH8NkvRAWE@FuZH1+}`Ydup?xD1&Y6(sjzsdVxob4^>V{|atnQfXVT|w!?ViqH1?Y` zKQDNtHa(oDU#$B&45h!`=pDDcPm^ghUG-=y`oUHRQ2_mu+5rP&E8`}CQQf<9qz(yB z+-F416x4HF&$L&jNVk~tWz#aEs->3wH8eGedcIEAPda2IoqshoGQyd?s7seWh%ivZ zxm-z|*nU-c8yWX8&^}gB{-mXCUv~PeWmcP^Avd8N(DL-0f23GC8NZ-`4e~#s1YB$W zBDj3h^99>i<-JWk-Dk8$J0$_pB7V*4(sfvOr0k6DAEqM1&>ZNAud~v>b^I@eJmd>U z2>Y8KyfshD_^QUBpF{fWkx}E!Me^_#s*Mx7k_({&rx5x4uTjx@rP zQ*TVK{VELDTQVec<@1>P3h}iqb7^(QN>28K7wBhbR*!#;XHp5n>~4e9tA(skQThDQ z;5pIU!1%S6xu<#JRW3NXJ+&i8sT|Xu@M}7pePflKFN)a?$lq|?*?1_Oa_1;TlzP{a zR$+F={z%$LAx}tFgEr@#UUTl9Fst_shA=_i#HWx#_V77;zTGGJEjkN73v3aPpd1sP zrZhii9wS#aN|>Zh@sSa~DE#Yg>+m8qM|v$Y;uHJFAqiE}X5C+LeU5d}`iwpfRta~H z;U1Vl(dJr64j6y2)#L|Zn4d(3Cf7`2rou9hXj-Zt)0@4m-rB-2e!uVW`ep$*m~9|* zHP#X_X1@4U9nD5KYNM_6m;gZo92h2V9$e%N4d!Ee?Aywqu z31XPLt8$)cq~GjgzvgTQc4+QhnAFS<0eVy!oxMJ`ENkA-yT2r1B_yJ*My!S3I?>eL z+N|Mi`@RopD^|A!TA;VL+ASrb(nupaB-hw343EZWnIRa_)nyG^9y_~7uKWJVo;BKT zyd*s^iLaStQOPNo6M=2Zi+AuM^m+|! zeieJnSdbKQV^0m}OX~7QFdmy>X&jG^pH|X{&;72d5?Pk>eLK=omBb1;f|?Ua8%fll zrrCjsF1`-TUiI%W85gFIF%e7`VxD6`wm*p39Jwwxkev6DyHlVKy(vd}IPerQT>D!6 z_5idb&*z>UwM&J4$LG7nR+gt_94CTJF3IFOG=C-?-?${ijxac*jA!u*|Fx?sUX6vfRUt7V4LlGP=ftOy34oRfP4 z^cpgvo+%;et6LW9d$tiin-;)>@I6If^pd1$3n$I`0h(O8x5nyo|QknB0)5q zkF;dK*Z*~oBNVT=!|g`}35_NadHO9S9IJA>ww#rL-lo}S!M53b59RhoDB!Rwp$iiV1* z*^}}6^MBuvPEe1D>I{#34vmU58`vSLo+xZLz`s{C$Tri@%S36o*`NO6y?;+TINhl) z?7!FSQq!F>+V}s?Dfr~06@z_i@RID*ApHt)#-mi5xla`KV$0?R&Mp<^+)yWAHtDbS=IPYSM9by#8kR6$({zb* zZeAVMd3Dm}wpY_Y(9Y9<0ZpCIzx(k7a+Zqjl=`(4k26mo@mzY4dumzS9N!B%TQlAM zdrP_n_M;TEq^ECU1@#oE2QV;e#fxwAHAi((aWlrlcl}Pkh}-3b4o)l&gD|C_HF!IZ zf@OLHMMuvnAI_?jt&t{6cfq_SQ`X`2MllS8vHb~kwy{GoGvUz8d4Vb)y<~;$% znFh|kUraqb`5TCeH%V;aPaxBA^7C(xqu4!e{j&>w(-e1%`=%$}vi`GETD*aA~eNcv95Kkz5>sSGZN5(M*Kar|LQV?i6iGSDp<3Q))dFfUpiCe)ATm>&HXk0 z+F?u}>5o;poKs(WC^Mg<^B~#-Az@zAP0pActoE3;!f8_<9;)s~s2s3mOx@U~co-8? z_zTu0asG4%ECTm-=kXG9O~T))u|PvNGD54Qb|lN(C{U+QTV=88_ree1 z)QY$`4xsRwGC4VE22%2!Ky*+R1WCunBCdA~5)ilB3ZoL+WQ6oYDMnmg zl%7;%44Q~{rx4Tl&jg8?rrn}qHmIGYw}ksn{d$7(4zX(g$in{T)i45|0LFx?9|4b{HI}LV}zjuzm z{zB`g-MSF{I_2F|lw_Zc*|4y`U8s%C%x`D^RJ@`Wbr4OB8iL2aiz$ZX*t}H=D6-mH z;b6#pb~%_vOdc_3#0!GIK*i^W_Wdm&{(I*W)d%2vdsCkZN(n5IfP&YMx3;%lHBf)T z9{F;yVdnuzuPq1uKoeV7&!z6tmocD@%%63eY@$H{VI# zd=IM7bpn!n1^-+^YDiv7bnL}5qhJeM+zPEy3d3Ieu#&LOq5#2k?vBHIpB6A z_5YsXU!3l^A;9-~JdKY>+m(RE)jR~OBQ)?CVx6N*`^s!01Awx`A_;h3>T0$Ja`cJV zB{1%#jFMF!oyAYEv9rTKo;xN?Ah3_{Ti~ComArN2r9-|@(znfD*8Dto8wqc5J%&g+b;H~58_&@f+Qfyd8P`)xQzMn`)Y zQc8yi%A=hJdjopnD5F&5LH;r!&QPb6l0~Uq+qr6Qdmir@a$Y;BPdN4QagjX1;M4>^ zxE;B;rbE)T2M^LowOiwnd-u6dEH^v`;&Xdh%B$anHrKm!2Z6Y~joirNa=d4kc1RFA z>bcXw_nl6V^*$|IVfn_MQ+ znkAv*F@L^yX~(-fE9LfwWFVr|;?c+?xA=}U`G?#QdB!dE=wBsVh4vc}F_B7|B>`k#=g#o~&+6(fKKQ>wKLwq~Cx;7fmQM382 z&y3BPw2#%37S~u-*bncBV&_;p*l0ylUX)JA-Z0%Px)T;d*i}Rt)}HefV#L6Sy_dJH z$T;%BJ#68XuX99@i9H0@P#dQ$mF2n|CJD`)4vJk8u@VeSm&*2xP)lno8YEVXfN%kf zMP(~(em(zpF&jNV-#JkNs>8-I{+kyn7e4{tsj*Ry|3X(zh)3JiCLq>7X0?*z(Uz(@ zViovjQh9Y4fwRoYJidl}#PgJOr$6b=ZHc=s zkA(@;Sb{8TZxki6m4eW1A3VxN3o6%Vy@=tuy#PFfm4f4!I{;4?;pOOG%z&8 z`_bxK2|fbEFIkXvU?X(;@L4xWmCkJcE=eHwE?*$gK2q1EqG`6S3N;y0A?7@J*?hD2 zHmX*CMawq7f&MXz-SsYtxCrP4skf_R6CE(#_;s$(n3#d|+FJehXU|0+`f_zB8QHG7 z%an~G4UgaY9R4g4ofE})yV+o_wE5VHE#Zq2_eQ4;%{Mjtch>&*q_5JcO9SU>D{Y}m zM>PZ1)BKGYS^e`~Uc?B9AC!8nK|5wWifIm2Y-;_AKb$8zc z4Kk}3cm2aHM$eC+f+O5Axeh<7V{ob4?c~I0ceP-Ewtb` z+`=gY8BKd|Dwq23V&f474VuGuB^eI4M6e0E>Pba+2OWkXQ5>K_2rkYYa=7Iy9jkoK zi5re&Tl}9xlcvc48eUb#M_xPJ@__1rcvezG{<#nL3lKBX z-*!Hm)pmqn7M10OyU$WVu(1O0w+6I?Qz}dd)uTa-3yIc&rJ0$TmwU*0Or)t~xD)W3 ze@O7(8VhpX71MXJ@}V91#BluIscg+ZKK3VEvX!3R%th+jnziL0w zADn)8%%(O#c2}UF^bS6dL;$D%i+&IaEp+J0YMV%c6_sB3rPMXmmI7ngobdyFxyJpt z-B%ht4$iDfkZ6ko(J^Ph(e^~NSQGWMNIf(ujlV8(e@LHWo*u6Lyc2xjHSab+iLuL@ z%6ex@ye&n%(5F>x(<#@m&RXgr=-ZV6=vP!;#9W|IeQWL}unnR>4T$spK%>-xHt_pw z_8_14P-)Yj#d?y9B1nHBq<9az@%>@uQvjt|xXlwKEf;`5Dq2_N&li{KNiLI0O_`_X zCvR(MxqS))!h(Y%`+MHFAKEu>mVg(hYE%35rBCGZSMKtIk57&kMfle;lS#O6ppO%x zOdRsipgFhW!RgJ+N7lqG1jOm0Sk?PGRIs6{QtO}o!5V73(Mqc~yV{Y|jM8=2yOhZ8 zF5D{{UGOVlSkWHf2{Y?L>ab4v{O~^%7orchwPLoh4eX&rJ-s=?9gWDuq3H1wBsb8Fla`(_w&lQ zJj#CS9%0?Rd+LhcbLH)s3>Rn^1r5W4A@It%s0ZEQ5Nxk+&(uE#^)b-G;p+T}?H43R zSpi~(3aLe&-_~-rAFi#g1K8Ci(faQ6h6MWMZva?a7?JSfE=5pV+8XA7_BN!B_%FlGx7n#AVj_11Pu|@3llh-T%+s0yt{kL*h@kwamD<1!~;DZF-rKbI&y} z9_Ja-F6}*RQF*&dGEUkCqLo2eR$g8RqUnqNGpb4N#)P#!mTw4ck=EB<-QX|fQ|#34 zx>OIUuPRQxei+2ER9eW!703h1((Qr@6=*ggP18Y4SQVb<4{OrSJh=$L=*z_y2FnU` zf%vguEX3vz#z*T3j-!HUa@}N?BaB*pw5};+`^xU)ehfpyeHZUO-XA<0sXcSgIob~& ztw@BzdZ$=PO}E(>g8WlUcX<}7qakiYT_Ngj2VDNidH=@gCF0buxI;sh6je4zROknR z@vs_K;S{x{aj~plG~q*ku$}-lmYR=S$5mS-pBSroh9mx#LKENF%%IRz!?KxSjL_$0EdwL@-Wn)9pdgpfnlQ++I(J7O*2G zw997!%sw-` z_lBOU+R+4J?JEH&X%vnmB{TW~@(bRwoPru^q;F^#6swu~)MF{ArQ{$y>Xt=?(=f+u zz9^j{umc#e+_m7_B5d~HTEt*#Z2Q37ujdB`K%^t1_D*u;5aZ>ul_hUymXnII$IQ&k zP$UIlY*hBW8$OYSV1VvUUi1pByqP|=H2;i5=KAa@9NAt})i$}LraK$P#A`d31{gF$ ztwf+U?wzs>Y}lTZ>o6{RFC^Oo-)H-k-jkjVoRJS^JIrF!ZN8Xtqqg)XokMtK;OBYE_l>qVuHi;>6G!i(Z@CC z1LA^qrHvuD;#60&a0ycU~un3;Ll^4jWoq1fbTwS5sQ3kYl)uQWSO8!&iL5u^vz>0vZb*~mH zR3*AfDE5@9a7*JexRh<8BehC?7949KNcA7D?Vy#YlmE2JHz*;YjO(m)LR)7?m0LHd zU~lxVF18!O5t6rWH)nGsnFw)K{90P(GSRJ?rk5x-QJwqY>#&h;p*7tu%~&UU`M8!L zN4IR@8`dPxf=rm<)w;s;Dy8?68JY6 zFXxl`?rm7|ErlDIK{Sq7g_W;}iO9hvYY#2l1dcE*G3UQr+D>p?vb4Wif6R{Oa0 z;>HA2uDH#e@r_g z*>{u>Ad_TM#lqV0#y`L-c@Wc}!0DXRTlwPK;cN7&$#xMeG{mQPS#h<)lcr_UQo}jMhVQMR6;VQ`N1F)W=50m!o`57 zuL$|BRd!y}K%?hh`P?HW&Fa6R`5yVsPv6L!ean4#prEJ!TAe%LmJa2Twv&XNCGGxj z%S*zVhiBT4UfnbAnnih$zx`L?MLTVCMA^*iD&=VEC6PR*<&|~<8M3?7Z6vhg{U5`D z6av|AtD`WRsT>`Tc{otPLWove6p=^<0NPg;l!O3IN3&dCak1-F&iOfOoF=+wi|VQ{ zB?1RKnC3~|gUb?hCA&XM3Lh(P;V1RB)l4e$ZjK&<4P*S@|Ndlst%XKF+|itGd#v$d z`RVJS90>W6i|5aOb8hG8< z$C-!y<_kBG`$QzFaSS7&mlh*?tysAtCEgR7_qRj-U%Q$}Hl*LbX;MjF|LcR=SsLG# z?3(LZBsuhA_HK*&YWh!i4~eX{z22o&6T&pwoRIj7zcMO6G0EA=R^PW@66x9xY?R^b z4jLeM=7A;0C4g4qF%^sZK)2IX%@i@a^8x)H*qOa`{@%BBbTEJd7-kH2%~A>2?gMt& zsXk7ZK?-Uy2ch+W>w{)m*&m<>7YoXrLEZC<+RwmN%2t&$OL$A0OiOcHIsU3|!eqdB zdR_MZa9oI&F#b{0_K?Ff{4t%vTzBgVK4w3$d>jI5CemlIzR^| zTaLJnz_Ac+3bg$I*$-|}4ahZEB~aq681LH1gaOI`<|X$~%IoddQ9Fj&I!sEF$k9EL z_Q(jx1~&&9)&bxw2Jr{ML=)6=5P7L_PT5D}tjd9w5B4$H97%2-#VI;;(k@n6PXQL8 z7lE8tSI5TDh`$O9PHvO^Y9LQIw*%a}gqPQuOOI00^nsE#b|Cl7^^Y{g7_gMRaU4o9 zV}RC(ksJ1DjPC)G?O8B#%}lSKQcYF6pZ4ujEhc^oTaEzHY(jmgKS2Wx=)*4MASJLP z1qtYE=!1F!)LVw@L0+>zU_3J* zjM$GKFHj4nDXLWz2%k4K6B%iC8Imh3cJn`8Rx__~ePzCX4=4^wE+O~U;Jg4! zgFx_Qz!R+?2VGhVl@M#n}$% zjU2Fz$$kJETifmIQQ?EzIE0EEiw>WEtTh^QrBk*q=H$Z*SHxQwPfhd};mt6QcD>|Q zM_;t^I(uu@5G<4xU#eC)-Lqrk^X zpslYv9#Zi6^O0sUUM#%xUo0haZfpo3snnj0sEkW?f3JU(ti)9ZN}u%R8RuWi;EVgQ z^f}?w*x>UND!9MV%j->6CnXPj1Hv1_hDSrSw$>1$&Nf_rv(6D5z01 zPpjG5&|#P^mg6Gd(;?9m5@Q7?*=%FK|0B{(KD_jpQQ<{yFR>2`VeS^!EayG;L=>y$ ze|SC4_POZu5{|9?aBLj;939dCFW=cxFAnB|Uqu*PQ2lcxa-ja(PT2>`HDFaQmOTf4 z{oVB&R5PLtnyfjod1E_)otJijm1gy+f`aM2$!hk=0w}uq-)7o-jUjKu(C!BPPT3xm zF%X5^CyjW4`kXbwyJWut<7JU2dKLy@1G+rV(%9&ru6hK$RZ6zNcjXduBDL!>iO6_4)Ng z)bT&ra)_X(2M=x5tEkU)bpb=sLmO-OlUSzuPkZiPj=-aWADdT;;s&z5_3OesE{LkM z)l|CJm#)zF7HII^?kmnE;2L=smk{(yLE0z%8B1qRxc0W}Iv1@LkRTiLJ$E$u0Q+XfmRqx%kPo zIGV=ETYXa0{72#=NzSM^Cd zSCHgL@JpFTOff3-w)8$4RMURo467M2dr?L?heMCZ*_qzj4aL}a#7)XA+OM=?%^l`X z+4DCj{PBKXCA2(Y-F<@(5yv;O|EDzEl3HRkhmA$73urUsPZu_^Zg*S5Sb$7)3oxW@S5{WMzMZto z^Qks)RYZ~qa^8H<-w?)IVj3F0@P5HV;Rp3Q;uX{8MkFE3Y{gFzO=B%8{!teGnHkNm*Xm?La*^O9f+*W*>WRw~`|D!HT@+}C2 zxkx`9$k#a0Q;I9u1$omyDl~&NPg5o82SAAs-!>JJ6EDd7WaOYqy@AVdI0<#thsV&l zB(FNOhK!~Tkn?9iVWk}z%dxZY-7qFA^N3r1Bz53Hy~B6~RLlNovr;TK1T%R*>Lu3x zUi7R2(b&XtlIvOb0LR%wXZ?42b-s2b^o-OxDP6m@#uR&9!7R}bF1Fz$uuC*+>8~Hg zTzqHx5+@Er>L5hWt|v}PH&}Na*}1=UpCh;ZLK07!iD2mYx=(4Dva{NZP@|G6r4R8e z%Bl7F&*yr0m_MAW7Hu!B6s=0}V-F2d{%YAZ{4R3!&-<_Q!N zhX5A<^Owo@U>!*hBeeafsOm0CD7TH)=(&x4JwYkq-~TAmxogC{MR349LASKZE8EOv zTcKqT(>cz(VAIdb1+6tXkEH-Ml3Db@V+ZUp-4uVt&8X`w&Kz#*0g*enaZazhH2*wyNsxUAy~-jFbo}G66Ca6cnoHm(OxgP%xKJP|&1^uOJe}TDg8GDCBe# zK|vW&LBV%2U@Jota|0--FF&GV5M<={aKF8{P7pF&61YSz!+b$X_hTeB_kHgxqlf5Q zqN1YFUY$k`)9+p44N!qrMR^zKCscleS^>yA&})CykMaS|ai!^IJ2{?rXP`cJx&CDk z`rGHP$Z#fQL{NK=^tyGac$BP+Dc<}k*++6eMKsK&#nsiNWoqa54iMvq49s+*)NJw*~Ok3^O6%U%W5Hu&SX9Nv+OuG^Of9w#>^+Z|#>(;& zec~|jkaIP3@MUHdKj$Cr@fTguMgH{8JcJ)34c2w__2c^<=+A~W;L4nUv{H;sB&9j~up zXuj_du)SH*;G(=3bP)1js&#oML=$|KNnw-G=Z1njhm8 zIsex$sN-I*$!vRZGX##q(6QnC1Z`wse)-*oA=3Iz^Bc%;D8Ntg{~VRw#h!%M^naE1 zF#3)ex!JF!4KWUpu0yR1(;Qx2mw*USq(fYnF$sF7v+I++{&r_r~DkMNHakDM@GX(HBC^yH_Ag-Fr96u#oV{2fLaFk``A zs2RxuzbAf2_@4ah;g{oktiJD?qJh)~;jG~VqC29}UsAvJGQ}{x#;=hGm#CH~97K(u zsbE(XR82T!nsb{&p4+IH`KsNwwi&#+3zn!?1W$o;H;?;&4n%HQYzl5oY_au|MzzxO zW_*+VAa^ROLx)XwsK{RW;j?hqRi7PGP*X@#sGAp8(RU?grLTY-Knx9u(xEbuyqrvh za-dSbVu2DU^SzQVfRN@>)I<~;9jSav=A)31xL;0(>|EM-5m<05v%tR~msX@&p<3vw zW*?6wFd$uFM^^}fDlqu1KQyP+4f{DKwuJQ5I z;RMml`1JV%mhsUzsPsxqU3Ed8Q^>XPTJ=blxFVzxP1>k&m?Ievn-ckFgm8Y=rA)US zi~Wvn#brl7o$_{Cm;+g{#J^p4WD-y-|@-6JC?NU4NbL-{;SX z>Wa!sfKS-d1s={HEzc${*dE@@uGqfggySr7 z+;zC!-`xb*nL7~KGg*sS7uYn2D`xr2vdIBCGLxE$s^3`F1wTm6Qq`X5U)$4JM#jX~UY+;JpVB+}eh+;b@p+^G{1CNx!oRWn-C zS^}k!TBLi7m(iC}R=%~Vj`@zQq2AI_($OPtw7IoQtRhe1Qhl_&v~zj;c}G19Uo`!3 zeY%Xl2E((%7rov^djCooP6?g|l?eswl|5W%J9PVkH>uxS|5L$v0e%35o%-&^hmEq} zGHtwcJU@m4txNhvs-_Q3Y~DoWT8h=D1@2`%M7bW#co<^TD*qZmD4q9qnl=jOByUrD^0N0U{h-&63HDw z7omN&+eEvZi2V{Z9~GLPo{u1xJFYjbHeSAmw3mB}{HWkDf_#KiPxlIL+Z)S^y^~U3 zq&x0|Odao=evO2=lx%=%;QeQ+4ARd&bH{U2bE)7A+mN09opalV^TBi0P41DKp_gnZ z)i&B)#z_VZdG@-9nhHytDq0&w$8Zl>o3T^V)+to8Q!}}l$C_yui@W)o1HEZ`Y%`ov zMw0vXlYktocr4w%rK^$yGtbY@y$|J{K1=?Zge}n(;-yilv5HZWmR~KJ&LfAUqj@DQ z#O5bk=WH%g7wJWq1A1os@00;`xesAn%1oi}H^0jGC2#b~#=% zo9juX``CkvXZrJaowmE@+;b_yEy6FuK2}KYCXXw7@di-1M+^H+xa*f_rtTjo4(p zmvPc{(Ok7`8@tGu+;RxMo5b0Vt|<&rR(~M6mwMhlUFh@Zd7d_tnwc-<)INEu!ft)- z-}AF1ahVOcthd18~sz(b^h9? zE8COUIN%61nCfF>w6X^@fQ z9=@01%?m!v%MYWQBYYdURby(XiG$=)YADp?%EF>SQ>c#jFBII+=0?=qwyr0GAv_HH zxKN1XMS|YmT}FrPyao=QFC{0QrXP~+sgAAgwKwr$WA=IZFCdsz$v{QaP*M_#7V?Y; z1sz}l1qXS8hI|PiUnnTp2!AL9$S)S;`#BBfzi(kK(_sJm3{Co5kzZaA(s3v#d3~^f zfu*gnmE9;x_70?~X%ht%I~7R@kiL}#qwZHLJp)E33+vxSptzhskVgvxJKc9q7Uq_= zASZ6}e`$aq&%eb$@^}AIu`}Z)SCN!?CujvWc*n~4f$;-55AwTr@3_EU4MB3Bh5u6= z@{gO`*v`%x1Oz%dIx;$bVzdGq0Y7qZZ~#9r0hyQ>AQ}v|&X#t%P7Ic|6#uT|zx8}J zu+;~fSlgLcS-$&Sudbezy&X3>`R|7Q`uw|}22Lh_w`6JipJ71;2>ks9_>u7g@UOZd zMY(=UK{6&z2Ii`tO)MbhfwaNH#LmX`Fa7`P&EGBlqom5;CD~Y5|5@@MZ~nKWqOAc~ z(8>bRq#e)Sp7~GVf4=-rK`!9$k^jRI|2Ff#q!2svAaeo#@)-{@)G+on6citn=x2Tf zC+Ndu1UKw1ydG_rlPces(eUMLIsox!ILs(L{`O@QR%}iOXn2!*W$dn302K@&zJzx| zE+`mkh`yI8FAqZoAwyeg5hxhvT0F5!$;mYFC`F_K| zfDzzBMDzlSwl!-^tI;z2E&I0u`8(w1Ma17a|Nj5GKpN4TQwec#x}K@n0+heSzv~H< zUnvQ^0D+>g?O|RseXkl!uurpY37At|)rb zRwa&huSCnaAp=N+H4-apDA z?oJoeO_eIoP%0u>S~K`DA8tf6^^-@22|oeq_)9B#)wcGI2?e~WIm3)pj+p2=r|?~^ zseeuI4jR^2EN#Q`eiLR_sE6 zeZv>H#U@x9!$)NB&1sHrv9|pFvUcC6IuN`~E&#|mL|NUDCp9&EGtuIhz%dBqrTBs7 z&f^W1It+s{cMe3t!Q&=YuqT+lb@K=AuBFUuOYCm zKGN|>D#xsBEzqk0p@u|q`Qy@{;(5VX%%V?0d}ulBt2#@D<0AG~%&p;%iD+au-^4&F z7R?2SF;X&tXiEdJ%hTa z{)VZ7gC%7pVRQkyO9)pEzw~3O^pvq5Z7dpm7;hi(pP1VM%1*D@N7X#3gYJ%;`ayN$ zNwe{;a|E_^C$|a(Ba4fZEI8{1nZ%2?4U0`M3UhTM+=VPVmnng*re?Oq$PVUiz~Cb< zR~6e1_kff4v+aKU;Zge!8vt95zo!km&~KyXifw+8L8Nfy845(Cb9BBFOBdy-6QdF9 z&Fl_CS7p1@=VtDWqNL+OO61Kgqw-O8JX1cajFgr;lu#m95|0c0A$H_JS7$Dd%V*g%~QA3UFuK1Cbc%t5Aaqp8@$=X`IU^I(K#huHpQ9@o_I5q ztw?f;+qinUeNn%!_GzShJe=bxfBR|zz`2D@9M3sQ#O5-o9OYv7CRxP^L2>_qz)!0^ z&;pv!T)M;~G-75%?#yh3J(LOSI>O4}7z+DWpA<;AoHTLKggjn|?l2|Qoo$`+26Mg)Z_6+{ zzJ+d)vF-)U!w!c{IArO>&#{;;f7|{<-mrt`d~Nuv@FR)X`~#ulo?Y!-3;*nxbiizr zgL}sN71Cs-n!i?TzC9#t)`J)xUgW&F7}N69^0N)~t)|cqMaMGRmGV;K?an?XFPBn9 zU+8nw;utp_yWZKNa?OHWzmB=#AWF#Jh z4exiydRQ3cZ1?%Pc_DB;M(RB&i9KKP$kAQAn?PoCHqqD<0Xj3ya^W&XmJd^E(~I={ zi>$J}q-vkdVaypHnRv6+XZLKP6W3aJxBn~aZ9AFO$Jq#UGluuk(c7?}O1Etp_6B3%u`#Cl-OzT%oPVr*2wEsY*~(2Z zGig8$K3CQ2F7zUPNhgz_y>jrAiZ^;{pAC6Iq^`DsBP9OC1T8GT#c}0}*SV zfo#q5OE`FWLp$b!v!f(aX}Xw`mgK5@tD8iZ(4F^;EVPUq)-jJUf@Nn&AGY3hG;hx2 zl@5307biUS6Aw=cnwfVy-fJ0d_b4|hwLLnPIC8Rd*sLdV?oF;N%C1YzwbUjgaDEM$ zPnYqV1*PKF#$UUSDlO^9y;)WMAl(sv;%CHXFvSu0aPLqs>F_!`buqmz{ipQfy+C@# zAu;yNgFX<*LH*Z`j2-%I0O!8x@O3|rW6>xzFI$fWoo7lM(!gUM?@E?N4cfL5mHgv4 zb(Gv27{?%(K2hqM%_lt+E!E!$@r^%jM47{VKQOX!rthzR>*M0o3E z{zJyF&i)i>73N0EB*&A{yZMER7=MemIV9{>?4+=f- z1aEORyzQTTK$)S4^-e^U?Jsncv1cJz)ozXseA5xR8CK+mDK7W%Ql2?+_a-Y>-YGF{lC<>m!lEXQj}Dcu>Q%+0K1-I>65IGgw? zsx+2<2T@{{Noe-o50Y=y^Vftol6_J5sXW83w2sY@SRl=QGcq&W1wr#y1c7oAyKkGEc$WWl<~!I-PvG5i=^9@!(7w% z{gFEVnK;SE6tIgn9mT(Jt@A*}!L$jvUsq_JIxFVfNI0NN zZrJkKyP!PP*?1=4R)K`lB2F{x82ipT7a@?iC<~*^`)dklW$ZN6TxdrDaO+1?i&dw^ zm*z{niB3g4v-<*4+_0bC*bW7Jw{U+mspl)Vy_Sd;RO}gfFh`v0oZfp^Bw;4H^uQ@} z3ima&VTr~z)dY^RZcoQu&0^$8tw6(1fP=_>AY>uyv9j>WRWn(7>2kCbXTuW|W=!+fO!g&4UzVYDp#t#52p&XEz<2CEcB>+vXn#d^t$slGM#^H42t* z6z5NT1+*hhLhEJbFk$|?ZHh^@Z85Tim_{{BY~p^qsw($JQKHEoegi{hG&5u!)zs@; z=gGH*QsP*xHU&?Y>3iiQR{sdz^Nj=hhdN%KJbtbN)}kfT z2)Ji>l;3&>?X{8x(w1o1=>=Oqz82GXs7 zJ++H5o337X=IL+ZdTeEakM(1m2}8y2pFVDrJ^a`FzI=O#Ni%%nv7tVbrzI>%^vNQ) z+C&aU8f zSHcSAE93lurBo#!V!ny@QB(8`zJwaF2mC#5RLzgtyMr4ZhV-ygdqwsO^sq#5c7f)d zOL`G_IaejV2TmUSdI~*%#fN(HTF#_>eG@p6|CFI2*?yZ^Wy9!KOTf?aswE#rSN5iK zIFMx?MlMV8yAFKMSIwePZ&1<(n#h;-P336c1JoIs(r<{@`PwBF9JOZg3EzW$w5ydN zOGne4C;%-x`ngn&;0rH|MYqRL>NeZ-N=`7@v^cuw?K`Rge#N)xi>z@P!RKo+9e8P# zwl0apH=$~}xvzlQKgO^bj1N9JJNKJvKf0>!=*{buKr7|se>}BNoKZ>9F|Q>KlkjA_ ztg(*SrpRr<^XEF1E0aly&G6+^r*;|+q@dZm>5**#|DCj3r+ibt%IjS>0}bz3u~E@S zoQ|9G{Iv^bUcw69yT zlr;0Dv>jr~#)6BRn2~}H7Vij?*ZbN<;omshE7g>|83=4RlM82E$bRROQ2Uez!l1?t znNU?*IbTGOwhSdA(JgaG&Tfu9TlQPDbwkJbK<~h*Qd*77Fnj}Z!qw)xN~BdGH`66G z4Ho-rDXxP<)Od%|d_`xUWv(i1z{wo?G!Lv|r;o&`O7i{@)>WLyvQ;BPVm{;_TF>G| z>L!{sYathSK&QZa95&mq-0NjU6Px*-1g9KZedfnh1mzzv-it^v!<|T)$Nq z2_S3}kidmT9O8_gPq?UgXB99YRSbv!spNa*BL_ys#fFOY@Od)f3s!(@4DZ1 zkrC~Ngy*&utt>ZFqM2_vln|AWAlCYHO~|0#@`zPZt|0kOQ>0~JVfZa)Y^}JSa1$^a z%cRSYYHQ2xqF{!@{a|ryti<)!2+HW zl5DaY-9HrzU0l>!4|jKsZ3|0P&N!PNjvKc()(tqt zB&p8+a2um749@UYx0b7mlT)0u)neUP6Oi+N94<$xv!vjjKV1WN<*n`J^9nUjDjBpr z+3a$aQC9ZBp37>PivVN?fPeL>AT$Inh-c9jY-?*Wo+WBpooG5$FlJG^BwVakO@3%( zU@+G1gJ5#9+Qquk5I{W%);lMmktJ&r9dcmr2gT-umw8IZ&if7Sq_0?pP zvu$8-a7I{|PGD%L@}2wbT7V&2YFymghLe^DjCXjn`qd-plu zT24DqE(br2gpGl$@bQVE=yf^V@9oad&dRxpLjq6>c=z8yC zxLr*te;pu32)u8;Sr+Ggd92)jm!_c(zP~gvoheBM{gmpS%$LuXOk`Ecv|4V87ye0* z4Wd?}_>%U|$--Apu_}PlOjyrG^!a$%%K(`SNEd(Z00cL@R+&8#)zTu_+F3Z6;A{8i zZI+Ga1#f=uXJuj`_Vyk$u}%sLYs0vAMW?#4fXhhG_OSn#h*UkO8ho}egD{IioNXc2%nDWX$M=M zP2yNkwAL9QA5E)>Si+)0^Qyw>OwVN}*>RFb!_edLOavJXEl1nquB%9)^Jwd!v{i|b z?F%}k#=yl0uXL)%eLl!n(QUIgyvlY*%6sLBI@L`el;<9Bbuc5H%xkwB2A*hd&zH|t zc#G`{*zbisW_NPNiOKLi2$sUbSCyQ)nbG#lK3-~+heS^_Qwh_m=UWy&5>Zi6+AsAd zZ=;+iwHwzZ;+cf%amdJpv1F(~nB;%N@mA`$1FEiudPcecl{w&|s#nG9Y+`kWd1c}? z3_$JdNN+FX*2?YK2JPYLTBjkUc50D&ZppGD&!HNP$h&hd!r++A&969yMV$qTg@{&} z$z0ChbeDF@ZovErseM}y;B-MGMeQT$2c5LLs%-7%F@v6g0r4T!4X!9gZsrUjcUgyjti`jGt4t`(OLF~peHIHfvMw&5ySux5I(%+JX4JRr ze5%*!^nzZDC44`+d^IJ~y1?;o$;z++E5l;RppV;mZ&_3-zW%tI1^3i(8u)z`^h(GGVxnGWnTu!T7afC3!=4AruJig@#ffANxk zwOs}Oc zl+TqioFP_N?I|XW*Ky1CbzNC%nL6G@G5kKSWNR&#F4LWZ z?9Uf!EX;Ufi2vB4&ZXN7a9z{^O&4Y0V8X3?C5qDhpNdsYQIQIC93d$nwooadESU<& zx~a|9Z2wU$$H=KUQ(rx}{VAQWEY%6a%cq-_!rHu+n`PH3w>xknM|(j?HmPp3cDWur zB^6ZxTU(9E#C+0m>&x?}lTK<4ltrDeSBxCig>&Wl0X*3?PVLwlmL+xT$caE-fzSF+ zHo<7{G5x--L$l@jCi7J$rq1F;oS{rR!^s0%&+S&_OPSMk0p!}P9`4l&R53Hy{{TSW zFzUDv>lD&!uk|QBf!gQ6=3*&PVskcBLgU3AU)xdrH@``D&VcYz@IGX}8{Rh`{Bv9bxD!42=|U z6~~9NrJ;UV&YZ24!oO{q z(MSsSqzHU3?;qA5i1;?3VVO3#vr$}#o7$jQAiulnEX32^yiCQ$+252gL`SH$4cW+> z=BCud*M#H-Vqdg&vG>h2TuB1!W2&l{o5dmXfTGzhnFXy}R2ItkM83?qV2P7`Y>yZQ#= zdZvrje+DSs*d)^_msGh(!TgD6NMRTib|o3vgvO$zG6RAnWoaZ+glr=*{^>dhde%a! zlS&T=v5>rD^lELyry5rqnjjK%_y3`^K`F=aV zcDXJp&vA<#-{>|?Q9uT!fX5l-B>!w{6&ren<`OU*=sMV8D~sLe5-lHH9$dvk5!hS& zdeMm?B{2{-_=lx^`JBmCmAGju1e~&zi`Amtv0# zf_zNpt7z`-?#FA6763Ffs^ul!N>4=BGmeh7nIQZ9(T1yosh|>_qf*66s`|!8dB}`2 zS!r>P8aN{-C(q;exv$dg6z*S>h3bXCa|M#w(l>7)7&9d+FAs2jb(Ma!@FG~IDkJ>) zbDdZztUa-tTNBOu_r4B?v-#3}O8-nZ_z*`8PQVkPOXeW^!!N)l_V|j*${^-DoS%df z-!a)}wulav8_Un1j~rJfAjnZLl!$^R*1O&7WQUEL|J=EljagRESI|Zxts8?BvNXG_lDly;3iqMa%a^2W;qkv5paQ_ za-wS^Ehd&>l#=pgslh=Jxfx_~8_)n*ODGF88(Eh)j?n^xi-hs<;}tT6QKL`1U=eoP z5sq_9mKtdMNJP^Ir4xCQLx?#odqo}oC+y&5c5T5DxVGv)QP~os30VQzq&BOJ6N#F3 zItBqrJnr*{-mnJ5fwe4sgM%53)WOuAo}TBMQhbmUr`ovcsr4nQ`eig-Fe)}yL^6R{ zwgmK@3%rRK-JQsAE9_;U73EBUIrqmU3rG&`it>~`E7)I3{Ct3bMlv~LvE1?V72^lB zra5I|7&C4-TziIjVqww)i|GF7J%6&9i4x65ldA+4yQMU*{%qk?Hp`C$Y4FI+gfF_9 z?vwgk{jHZY{e!(9PC8jc{wJPQC{`^QPQl0z8=<^&*_1xr!T6FxPV018kQ9m8dKIcV zbc;^C+Ei$&P=to`*1=+-97QStWOPCrlW}>2E+hLP9_RcCofklQ3&EZChli~z%8%)8 zx6QK^t>7)OE%ng8x<8?@KpUplz_I{3lzgsaE~jOyq@;(RJWA18nF~;>$rl%RC!5^3 zbKHnSr?R;-oS1uk^rYTu$&E_L8l~l7QgPlYEiRo)P2xG2gwSuTgoT9#U}cSQxjy9Q zcF`ynM$p;A`(vBOfC)j=xGr3L3*81JiMgc^38Bqic0v=E5HNeeX*!0Bmp&!eB3e)FbWZi#aWueN5orTo+C#-wzxYz{N@P4NtPvmprG*%|JRh zFELEa%Qo1XAOUSMHFZY0|2UZMj#5T1mQZC|C?42~3S@DVfV!y-=Hu9Y|M9PV-782u z?HBHSkh%qpCgdj9Ks;Zz<&B)ejO&rsdU4QHG9XV$9Vd*a z(JO@BIRT7?jzUf*qX#pTx~vE|nvNw*=5?^mG<8qO_O*Y>Jp6<(5-^}e1|#lyAAWy* zpbZ$rL0~bP$~aysrHz_O^(;z*ggZ8JBp@derVwpxr z(lsYsoE)FmfG~lp|Nc_Ow?@K%8OF#PzxdeCWgEBd;WTM^`562j#QvgG@X-lb zaf_MS(|yR&O*zGUvF_v1V*Nz4s#b-wi8vRn@nWr#F5qSOS7l5MxqmcX_OmzOvZWd% zqcZWlxko5a&#@Pk=n*4T`s53alxDZLVz!v~C15lCYPV7eqZ^B2P{mFds=G*uU z)3ej-+{a*Bp^71KaUHfFtK@6Luf8o*&uEE5n3mk4LHhX?cg~@>Gt4EIgW}8e&DcD{ zpZmjxlxN6@5Q-{5>A5=axNgHit!A=1nL&B`2wyEyVBbEo`O~X}g_5wBCXOndfa0qj z54RYCr3b>~yBp5_kQEF3%-*v+*-RP`m73qi^L)8J0)tjl-WM)2=uZEoFOgbKUIGFF zyTA8E2=Q4YWDAlwHd(LvP9`lK+5i2T-Q)4Cfsqks*J!eRtu7l{?uy4lG?rAV1MQIC zci#v7)wF{^MTG!5&hu*0+)0HUPag*=IkdTUrc5-v1Uc;kT=PDIqIWOFGtzm-%kz%0!{k_#qb2u(UFnK zd9_#cSgJnb!o*8RU@Bc+!%%?0KRoCMsHkfEQ0k_z-qmitU3|Vp z+I&v_Ce_0qvH~*p_w}WB2B6C;C}3;yenoV@7!o*NC3R;@!T5m|MUk?# z5UAYeHaw4(f-t($)ZAR0%!obRAV~=77>T;Qy%kt9u(3W~T>*!!y?Jp&= zS}v|a4qX+`OB(h~12=c{wX{<1nT=<|Qsc|3T&8GqNOFEU$TnY`22Oj(bKnva9S2m37!(%d3gzZeiA)49J4c^b+ub!4Ob`#d%d0wj-az5%gu{Nuc zd(qS&B3;m(JXUS?l5>~pDXi`BF||eYmc?SNuit>I#0;LU`eJ(uM=r!X>#?Yc+^90d zidvfYfwz|o9{C5!eD98Gw|cF`ryU#;5-IfaAWtgp7b5PvUmKI(m%#6MczEnK%F-`? zZG?_ZKnUNmbhfyO-)VtnPqUlKGpXAtG>%rKp``ueqwPq6o7!8dn9F^8hMlvh{=$uD z<%ElHVlti3w%L#RCg?!htDSz{sU3iNkR`EeVe@-N&KZ9OqO1Lx%wNAgvwXh4-3XoV zoHhL-NwHcU zs#ADJEzTFMa9yKH>{0f0VrvBG7Z~^Jl;Tm8_-9six_M%)W;Y}q2uD9}UmjMBuw8Gz z2ZowCzPFCNJL^eRNPtB^&ws!&u^ve;QFE!>!f3J{su|y{E1A7lDiBmf>e3Fx8pv`% z5W#Ikt{X{P>>NK({{Rj#6Xwh;b~v7wd_%P;8STVOx}x0+Ig%)BX{;+fB~IkDA|Vds zmZ)8JNR$)~neUzE);vU^-9b8i?AjdNIu!5;Pc`IJ zRVtlS;{pP$8Z1w*3Vy2Bm>X#Izp+@(7FXU%Ve)NN{^_LkS@lb{Sad!lOA)H@uN59K zE767RHU&A*m-ITTL#xQBK=1y=tTTElMQ}p=E9_{$2cjgHN#em{g zb0+G=@o;#;?59EY2L-mfTwe0-9;|zIlC!s{H1dASOF`~zwuiSWHiC0+ZkyYuwsR8w zCwjvvCQp4s&kGGD?tDvCkPFZr#VYRH70peE zkCk_%9^k^MtU~w^ph)UwV1#DmJX$~yHYn~IGmIolImuv7haJD;JVwCH#NS6 z&~_W?vp<o0~^Q`Phbth}fk+nub7Mgc2ct_W(nDXFOo@1UkT(q;6IyJi;iZ+A08 z^F$+a>>h}z9K&L@o&BUL3VR`Ll3ww=A#VJcl(k^h>Qiz&=CkayVeb+>Vx>zt5k8oF zgVgTmJYSVx73IEfqfH*_gMdD+^DH|9^YRs-1mXR@c1^hu5YHGaM5r0e!H=o_KnzVg zR@M}Xy8Kmz016rhDjOt)AyCwp;T;}Z~EpzK~Nvjk}BHZfU9NLc1iMuzu*ymd=fhJ=Dj#ytF zN@*D>K1Jp<-NnoYbdj8&)0Gws`+!zGXTYJa&o`ub%MEm3rwSA!ab6k~diZuS$suI8 zj^DS~+}P;R3e^3@`Zp}5vvGza@x^X9sV@683D0YGh3NSe#iDz*BOHWgY>`|kDxuP< zeHlVQyX7L1$n1|iR`mu7;prZ?!5jE2oA>R8TMiq%iMs?I4qPLd{uHwqUOzG=Z|Ce| zNN3}?kPVzpSKIgJuHfk2$pn)TvOdcz#jcOLopqvW&-zXvp=c#h7R?6%XUUYu3_0&H{)CsV*g)#r_JRPTG8RKN?BEVY zl~c;>3vr#aC`SV`7W$GHVs!N_bVAl(2*oxseMRQCuTMwR&jm84Q+g~}&(utBYhre; zxPR8odK<|0maoB{t-iUv<8eAMXZQz5cY{=zv2EAN!D7CnRg=@{5(e2lb=ke{O*!9_ zf4f+7f(UKN_AmwL?0S4Kg?m6)v%XHr-7GjAWk zNx*CR5eUVlqddhe7Em~-^b9$R9KZI)8b$YJ*@3L*+v<6Yp;&49v1*ZxxB>gZJK(F`NFmnHsnaAO6?v6<8ucFynS_! zu^<~*WLR;%X!Bs<2R0tkHkIIc+ts(T!5&JMm^YIz!*#q7l^StTTbCuo~^9D_wnn@cZQvX8cRAXWf;cSUWeW%PRXF0 zba747D}t#h$A!Gxr>+t?wbM>tQd)X1BWww{r2$LDZoAW;lO-hD?oTZC`;)581~R3u zyaH_BzkK7X(hGcAYIKNam}PHKfX5w`VEw+krtNy=i~i~B0B$51yhq;dXxkASuY?g~ z<%c3c?fSF~Xnndb1T9weUHTCJq7!Tb!JlhozpCUDg7jKMhWTSGJO$E5_mb#I^8=%M zFR`V%T%nSMeE~%%)KStFhPBs^S}HWXp@X#gPOZ{8QUB1sH% z)yS1_?zALSZOpZZR>thm{pfFLzb#Qj(D#d_Gj|zKooSXBZR4vChpoq;wchIYlNr;T z?;Eq(w1)d6^h@V^d1b)m+dZ$Ym)KO#nu5WDbFm5`>Q`>3<+-z&6Qz{g+&@J~VJ3B% zc_~VpDkz*Qpy4y$VH{cdKXvSlN1tU#;JB2YzC|ur@`^w&&W@8!l?Bs3w3RcRkj_P| z&kUspLoVV1bK#V3A%~sX?)7I~-CfM)v){B_pMDB_3Q2G4EL~n$5WlNTSxrH6JNy|D zo}$Y$s2lr^t4hfC8y%8FBI{2Q=UdDg+?(E_Vx3j!Rl0Y`U}QmIxa@vK`7 z)rv%_`!z>%N9TRN*a)#+W@+U|Nul{3Ien)O4tw*}qXwPl&|BkxGAxsJYbp(3+S?BM z&nV-@E3(A?&RmckV-@q4SrilcO&D9Qglzv3_u&MJ*A^1Y0XKaqMqT_anIVof(u+?i zmoQoIm19jqZ7@N0lyjX(2j%($DJ~6NRpzDBvtY0RLA-9CM4dG2`U;$@UZI;^zqOTy zjZmaO-;tj_PW0@oAeXk8N;)%p+$Yx>H4>Z>a%)0wvuW7JMz~tZMXN}yxX+LjHKFC@ znX?*BEBrOP4s2--v=_<`mLQ&(>R<0=A5X0ecr~jA>b<9gi?YWqpcQhmA7kt8%nI1< zZ9$E9bp7IVk4xpz)s3ETLJrM|*Ml_u14;>#lh{|pUTeoA(Vpe5LuP}ekuI?N-!Uly ztKU<$bYh5T6jz5A-z#38UUStVBGVPk#`PlWBMFBFzmfw~TK|{^duuA2cTL!+pei+< z<*rZRzOnx3vMuK2m2Ng;S@0Z}x>4lTmHB@t`^u=SwsvjlQd+tM=?1BX7Non8E=iFN z=@KPHQt6WJ?vn2A?(VK{viCXf-tYPMjq&_oFyL8p%{A9t_kGp!?$|AhMjd2u5Csf$ zo?1uAOXkU|G!8%EM=7V07Cvq~IDUTqDCP#%aK2ToSQIhn9+}k6-408=M^56K8V4}e)B^MS=!sZS3&YjJ6Xp0*$aV>5N$Khja2kG?8y>G5==Lm7;2{dl!bbnHw?#m z?$?xBv{PJ3f!3QIC*OA3o5|su0A_QWlgg8rweB=oIKLO~ka;rNX#vsDq;6U1oM#Iq zLV+?x6!IYz^sFa%MQ3TEJBd)XT~<~$^>GQF0~Rgwp`?=}JzVfXBkJ=PSUrhqH+O+Y zly&J~9t4|!7KM66>y1=-2VZ^Jo!KJN`|D29j!}z8ppsE+yNrvwp08S@gCiNF&u2~a05sl))ze<`5CpZLVp?A ztZ;j#?9#*rD$e~Zr`AZqf>y`8@~`|jt5!oXE$wH2B$CX1Y#!eiQ)>Boj!~ZxL2oUX zBl&RCRZXl!T|isC*3R^>plVUgngLJ8b+@0^V(~q<7>Za}{ZA^{&%(5$lNYryfn8j* zRQBK@7;>_=?5cUS?>pk>I8Ml6E$Wr8k-G88fCJ6VH`V1Tq-`DrYgbRehs(2KFB#sed;~h~xZ%=v;enLz4p zxiZnFLM_)bEuaq1jksCwVRV_TKXW2@TuYb%hYso_0q^?@$?%SI^_rl(ywqN%`SEaE ztSsL`%YTJIxX4>%V+fu0rS2y83i0MJTE)}0Q9_281+X!9K+RcB93PrUb55nSdArID ze65V(4GKQLSal79(hixc5h+XD-CN(6b*veM@p4TMn18Rk1-lJr06ERjH_ed2{(MOH z;!1T;d3#A6t4~k29`QFfj;jhuA-n7^ZDE%ZY}gkKrh~etQe2Ovj(LWV`*VgE2R9}OFGB)~u<)HOw)b5$~YzkWXo|3<9)`X5@a88B8 zg15g~_BWv)ZcA>(St+~|(m3u6LeYtqF0Ah)aZ{1~?WZNk3KcVetLL7opmW^k zz4Gkc-cYKa1vv%z+S*1j<>cAU%{Cu07BO*KQnELciFWGmO1^} zk;tYsr-SmG-nHTYYr#!7^=Y>FV3HID42s4sA9q8#!$h2L_juouG^m|KT%dKBInU12 z1hN+yw1Exqp-f!>NAoI9eF}eo-eJkFR(7*HyR!9o-g>dI;bgeu5PGgC=9qrv6<&?7 z4p~Wlocwxs%jA)Cwb;o$%ZEM@?^oqTob_Pk|z%lIGo*f zCNQCXv{WhmP@)KJIlAaNnJAUo=|*v|D%ts|p7mX5ior`FMupm==l&WC;fQ7JG&I~@ z7KEA`2K8AHil&sYFa)R2Vf7pi~$IDgHGEqa>~EFH?*`l2)RCe*eg&%%oOQsTlQ{WW)$pM5uc|cP`eEu-F_>{nu#>x} zs7yRtblQ_xjDF&V9s42Y;lhgG#WYY{Rkk*fpvm^4bl64Rd~jO{A^+bj0A>8C>%ecH z6crWky!ni&V-j-BV6EmiUxv1|H|qAa`C$JFRt}PC=|`2$CDyl$P&^vC_h=`z0GR5X z5nS>+)46CCO@LDPuZq8=H|QuWMkAHec;5TAm?(3;%9#L}QBGTgtwQUEWpfah!iY3E z&Ea!-v3AVZxbL5Lr%E=gh6-JL;wXM!^h|o5#+;YE4CDNwQQ4FvWc3qGjGf_-_Y`hw ziWX`0M@ETaeZRhQ6H6}Z)(hnP=^rax16lTUUh9{AL>uR)E(`Bzn()gMNpt6%U^D+% zr%(hZ)13(r#Q(%O6_s?^A-7_slTCtrGOYqE(Qv(JdYL)sEQ15<0_&!u2i5qh3sWNt zsDI4_ssFHH$iu@VNQ?PUKGq#_Jsljl3B;R8HAcY>amL7&4VkEBePtQ9TN!UmoSKg6 zNqc$tDf>s+h{X(!wVsK5DTBVpVX(UQ)Yw?HL-9BpLfb+|YkBE>QD@SA#%hh|CdElG zIpJy=?HUCaoKWEIpz|c*YhD+Ah9)77CTY52MiA4JkZ$9#5V4Z88ts7ct|343^`w5z z8YGt@YL&-+^CXDbE044t3I;y=TaPpjGi}t^G-sK5V*#I40B+TOa9-akv~+9rYjfll zhm~javc$S9VRyR@zmIUZ6y}%NyXeW@X7)*iX07?{ZY{Om(%vr-P}|XKM*TP%qntKW z`NikBfNSLTT|KbHSefSH0`>+~Eu9vn+jQ}OJjRtCZaUbsU&&g#ZeGeM6WKR&A#omR zcRX+KRIxIOj#=xQ^vVhRJyw#8 zZGg~KF%0lpCNc+?_L9qM>>VkQtdEN^hEL{Qh)EDpIoA_vqciRZp)C3 zSizbqGj%@3(lMmfE*#P`oTMKAi{<8)eTGvvb2oq#AszfIe`yk}@n9r3YD^5V+WVP% z+fyZp825pqhMc-vk>OqX{Q%qO||}NX_qFE#VUrdnh8uyaflV zE=MAQIBbm+ri{t`XR;Jv{{-q!KL>H%C6>m+|M{{Lu{*5kmGtXCgr?ELpB3Sob)LHO^n3-JJHtp|@aUrz0R zPdIvj?!n*l_@CeZe-1aPFxO3~-*ZjZQvX|NZ?KMNi+C&~n)A(@sGIX$@!{d&wT%ri zAi7H-^}O;K85v2CIt-EkdZu*6s*tpt(cdG?O?N9n43ud9XVS=_nUuFq=cSTV8|z|~ zqYuY&u=uanBC)ZtRcHjT_coKeAHbqtdD7iuwrq_!sF`7($X#;2n!>0=J?EG&Ho7JZa))b2Hr8d{9n>8PJOQ*%66FC= zXNa8U`mO_<6vpuQ$DvGV-0|OLlW`!l@V&@_+~9E_JT^s<-2xvG9L zqHFC>ydyx%D9%gHXr4&#qNpz%eOKptt9%}D+MRAkku^$Y2!aI^D^f{u>18D;ZaMd) z1srQR~*dGG;Fg*LqR5l-8sO*3Fi5h&KJDqeF|AO(%_7v42 zPL5og8+xGv^22nTo=MvWhcbFD-#S9kc+~=Xx+)&oaZob#C@OIS@7n`w)au9CUmot; ziV){!qWK-U$A|kT37OKU()O@8$ggz0m^R%8=x8Q@4TpfBcKc?xC`$)`3oq{wNL;*u zxkK1~qc2s@>pq&qZI5*az#6V@ZleGl+RBX8RYIE#K*6P}N(8cXizjM(zAhF>*To{K zWYa*+i>2)W3N3Mlu7%|1&_h1l<^EO2_Pc7i!dTL7J=Fa{h z!chr`mqebNB7zTBegY3yMki-)_&b(-H!Xw_mKWR(GY1lRM}a}0C<(4Wt4eJ!9MEU6 z)zzgvRexU6eP}JUhME7J9b>yVZDIHahoXkp`5+A-AOq9JxUWeH5iaQte8$F9Vq=jg znLl4qJFE=SM!8*}k2gB9y1F1JTC1_SUcoEN?U+N(hE?UFcQ@AM7Yv3$b!E zS)kvsNaXr@8iEqUUz2Djx6ekZHG5pQ0EXCIWL%wp{rO%y&Ve^ zb>+$ItGVjd`8`A!j4C-Vk9O$gQ&0a+S@(oh>NHO*>(`v*wH58qiK+!QW%aDui6dV_ zfofjN%zU*$I;zqvpyM*XPZns!0%=Y6;9&SnUtg(HyBM9GnT4>hNHh_>6(_7 z^v{LFD0SWTIWq4=j>WUm!Tsuw+68!)9MAikv2t_elarG)u-bAVA{Y|#@>xKL_STd9 zZ3;Pt_xTtNun^J3y!9I7zf@T7i8cqzr^6~?hPe<^HB;&(0qBN%2q}ENXC-|O`h0mH z3kIp$+2J*?p{I6Du)C7$VL7Sti_=E6!D`*_R=UolmH5<<=4>KvI=3jVjsDX0XX)sm zLeIt^ZT%z)2#Oi?`N^+2&EFoB&+MvZyWoomcfC|Dw?X%%l1NzCv5rS&s~;(0>Nw0w z?p5fG(w#hCPg3%xC^Eg`+&s-nE_ILtGMyuyI*r}UK)b_t!B}5d4q}<>8qKJB&zM}f zOo1YZalEGmLc51G8#=`81#k<@mq>|QChinY8eo9eMh_UPoStREhmedB$Z$lBC$yz&^A^3V`~QhdpaiVGZx>#VGcyd0?qEC*JEal{pJXe)Q%w% zYTqb4th7t3@ZH5j9O-0}1rn)3l7;ZDM=1gn7IeMt9itIWIz{in7O2DT#}ZWhX;DCx zI^=D0^O9Ag{z(f0X?Bfp7w#bI7~#4wz^dF-okN&_>{2Z{SW&27_8r}oY5f2Yrqjo! zCh|JxVn{?mQEjF0-Jgwa7{?WroAlzS3RGS$dNo1RM>t&ot7Zo5bUhlroUL7SGg`f% zoomB6Pb~L(^t8X-vS+S8^4)2cP2$r;n4SY%Rj9+snj|y|p8Apdgs(?AdygLVgo9{6&-c5y;7QvdYEY8*tdug7!ZZp$zS7qIIq54sf=(Lo>b`0fe~ z-e{tDD%&g?`h0!cTKKxf(QW8hk19uBUhlyFWYE&HvYQ|=IZ=4pHa-eP?p#Zz$@c5k zYzo>qQ5yw5oLE&er&0Ef{zF(bC=zBpUx$DFj6Jh&fNX8^!WkV}6>mL70)my``#$W3jUX?#c6PQ66(7$k+OG-pJ$HWu>QV9z>I|MoTz2=ju`S z{^EnlS`XTQk^oZ7p*u0hkX=~%{SH6-S2_pku7Bnlf>PovOQPY|{i~`Y#4YNvd+8=+ zD|*y6jXvcSAswhx9BRvPbb87QI2I{MHV@GkBg2)hYgAB#%fUJ~s*ji0J#x{0ZcX0# z45NWmAaG*eUZ>Q=)iu9(##hOJyVtBLZB`|&l7-PpvdkJ(u+nz6#V9{N_`U?oLvL-QqNI)i@4K_kyFjZuCuk+Ld>XlU7;BT;CO_2+TG~7Xz4Vd(*xWwB>JYdq zVKylhl_` z29rei+n5*vpL+3Pwj#y(oDU(X7>aDWS-% zo@A_=GYo^qWxU#Ky9d^Rg%o05*>t|jR@44pnKS68zmI0wY?g!^ll6^pFHsKY9X2XI z&j0Qa3S0%MDSsaFEkymr7;iX;>v*2Jy1gX&pqlH}o0Po_l{baD(~VOn<3$eB*N;osot|yf z^F;**AAPe_>622;h$^;yLdUlUhIF zht`N-tlqFl5ZIkl>{&VSo0*r3m=qAd=D~O85AKe16BKh7)bOXLyEI1Sh7^I*kg$(oP`F;Y=T1m1m31#&em3>~ZRp%| zL+(b3^LWiz+b&?a6r;_L7p)jpFc%UJg`r@;q zMpfYR%%nv)-cJYEX2;}6nSqjB=tXo;2C9k%rd%ycDA zkJTG|p{;p20MToxP-WJ-Of0Z*`{+};rxUv}ZcGMelSN}YDZfTK?wbbRke+K6`Uz46 zb@1wPY3GKGX==g*ncpk&x}#f_)akXeI}}kT(IQfSF4`v%#fgcJ*uH^8p2mPl>Zt@u z`t$VpG!v8^PgUpjbi};c$`y(io?8aOFmgm z7|?#Kn}P1EGH9{S?(kLu^O&3o^lN-FQHT*~&bYl^#m<)J*Ab!kpvdY2OL(qCA92g2 z-Q@xQ4qng?c4!k>uh`T(K$+z$usP%=yKdmWgkMMRA;i{p_j*-q*9t)?DNiD2%pXCg zNl=J$JGvueEUqH^O z#7To*C*j^)`&o`i2_OpqQ!X9ugrP*8)Bf1Rgy4~IL%I7+cUFKHI}1V1EK-cMM&~m5 zS5z46?jPk)ViIK8^kVdm*ZS`L9FuXgZ<8NEzv6hVg0Ka;8AbCm8lUTo_Au*RI24?0 z3dYT?>(oZg}vdbuHw`#rV<#EfU5hXV>{rFxj^y7}- zBjN9;c8Mf!B>Hl3Gua-V8o!g$QQGS37x@my8Ph#4xOI@>+Df~m;+z$*K|IWFg>m)^ zhV(NdE!Enx-suAB1Jc|cH8+h;w80&bO|=Gb+vItP>upon?UNH)r-NsZx)ly7{Yz3( zwWD)H?*Tl|>u-+(>Vc+SUI8N-+bCA9kxKArUi@L0G5jK(O^u;HYWy&bi=XeFeMa%R zifZ#x7TwiSL1)Moz;N6i>q$#QOcaxiF@Zbl`Vly-x~T|hup&>qzgPA6_2Z%_0}G{- zRy|s3|5H|9S&741~-C=c~l&(J^P8#b6yS zRCy;-BG~#duIqqCys0KK{C@mvxZJ0;{I;_RwFaws=gQXoiU6kG1DwkfqQ=s=$?x9hjTyY5@pzNeb0>MP4r0r2y}_U>}K5`bSV_|kf81l^1L z#flZGLNbzyj@I+pl02HvIJ9StOLZ#*&1WU#4PMxn3dDzlqlj=|Km&cMW_!t9AObgo zn$4__S0jg>i~~8_)I7WzzeaHw5l`Bj%Tg%}E|JFB@&k;I+p`{j69nk0XBe*(6cL4x zK*m;Gt#*i&0UQ=%@dqvYmo2U|KL(JaI6lIO5kw(nN(QUFww)_BXnV`#Ab|oW8?0zP zVGyIWmTGdm((Yfwb0sw7T7A6{e{Oz?la2rh;~6qU_=3Wyu*T|&X^nrQiD{&94R^rV z^$8ez{T*T^J|>1Qw5lRtJyzV^^$zw7rG!V2s2L$LJRUY$mR>AZAHUoLYSCXBmN5K3 zzHPqRpjoa7fkP(4;~72;K6B-3TYfBjS694cq&2%+$nHqw5GWM>Yw2h3CO2$Pnc^8@ zfk}1arzL?L9p(ts^oHU-qw;6OFb-!+K``wPm#M~>e^rmgUGwDiY-7Q4?aM)nzN4Xn5-1xSXO*<=n=8bU+r)PT}cAGVCV=+rr zwWRDrKcswyeBxT9X{SJi=jW}bAgS4u^n%-hcc5gu>7!9>2DHxz{JUxDa?Zr-dyaO- zUpi{~!-5Z^%26IxWxu{!(T5IXRcplyoaKvb?+Ur4`}u^yM_E{=&3#9nfj_0oeUT&w zRiOdZE-I(id1AL;6;Z(_UvML&d9%xZgqAp8^A*$cr>KA`VNUjNIu4E$=1?{oWx=gR z06q^P#dKb5!R^3@>ck877;{TO-gWLpdd(dNg7D7@bz1uiy?8HAkc&Rj*Ri2EJF5=Z z#CLDTx14p`#}#xhHj*`B;e0kml;(*tuFh?SgP*|BXl8x$!ZH!3;Lj@FafOg=;5uwu z>7~g=>uYN2Ks$#((SYweWJ{^fr|ZqjYTCR{UQMN8`MgrUf-zcqMgfmFDN=A% z5|EN~q|9;C_jo?3x07&(1^v?JS$^Y8X-?y(tAS&2l>8=ITH2c-E1rr>4RP*k62$bA zkoAwl$6v-ZwNCosAX7fKiJ4~VLjJq1oLdS@e!D)+i6Znxbj>Tt74FLd+3&RG3|htw z_nx;*J!35$J5HE3bQra(c=?g2rHjI4`Lu_=XecBc`AaVfn^WbBvr`2^{g6U-7T+yJ zrFmhtF#Qyoqp?9Ntx5kk5fS52KSCB^+*8c_28#&;F$&=fd2)^DwFPe@5FiRSesTl{ zv>_0E((}$PR58^j(ojr-Wf7X9Ov7S2Mqf^JQNSa57HegS9&M9##SfLW=g(oxMO`Nk zqvr8#m!EoQ36;W?+{1Ou`|S?kFQ>G=jk(XGpe=_hs_p3UVACR5X2Y0q$1_Rd(XTww z>g^@!_`;yO8ANW($BoIZ!=2c-zRkYl?Sjh7ml9YuD_0}N4}dr>aBjMM>!f{ih#UT$23 z9UeKHbxA^dnXECZzdWQH1Hu_Y$?+10F{dn|R$ktYe=I*tjEQQcKbXQS&r#Q4JT+%_ z;u-l-Z_Bj*SWKU|943!fXBeP!&YelDTO@awybyiSFyDG7`JP{unu5aAp6qa{;AvTk zRi{@LJL_a)ooSUd7xcYlxHe3Z#Hn-BF|$n#AQ3qJjlv(XDe|rJvCNH;y3}===03oA zr`NjYfH;XeAiVOeroATEZO6?S;CfeEE)}&b&cbn4%zI-^2rPGJjk2*x8RM?Lpn1j} zx0&US9yUG7U77jRc~{hKpO(Iaj-`j9F-CV6AHtt3{m{QCh2e+toFQTBu9eFjWX3?G zQW>?Sk97P79nl_=jL7TwTbz~U{{&>RGcqPd7v=8o<6Mj^6Jc+TjlHQnyUnvpc|*{& z$coj^G`{CT1lDP5V^R||;@353KT)n~u z6ZciHI7~AxMfld0J`@zo_K;?om~z z`?J1CA>w>Vu{kl_v?2K#?dBN*r*o{Re$Snp*(QVJ1p@4j0|qP4Oc3=zg~Hb$2QsdQ zhTownS+8KM7h-jRnnkMs31rQxjooZs^F%qF2(IsjbqAa0cfq|Ol>2w*(ZCe)q(T1pLgzm7F)9Q@HJGyprSP2tvb0#}IdoAa$0g z6TY5xxdf0;&3BmkVi7XIc=i+NmNr8eRP3Ip*JC?Ex-AjEotBAM%ppI;T?ZbHApsmU zVfDV`u3pHBhuta_kH92zCh2sUEBmV7TH!!8=De7%QvInX=(pkB5479Yi8X0p2xq*m zz5bFNW=J*ITRpVGhToeEh2IeL}gy zT4;~E?Z`|pib+F;V`*$r0v7ao;~>eNM48cA6E^F>G6mO?bRkF`R@?5S z_kDy9AjT4`Fbft4YdKw$99>hAv8bfPd*wrzZYv6JyZqoA_R@XvcmOR5K^-rI`;EDU z-E{d&R9wdD>gHlU%jR2YmLPx04i{Xc1NtZw7_^ycApEvCLs0W@z!O*-Hj;+YD;DEV zO=)XIyJT?Svx*MnYbH$;XDL5dY9rEs(=?dGqMFydF6@xiJS#ds&b^YSP4;Tag2AtJleNp|rV|!77K#jIbsTdtQt5zb{7OP*|f3 zx+jP_i&xvM->|0R{t^`4;+sPMs48%J2+e^BqmDOd!IFXfA)@+2t>1u#6 z(7$yeFyW>u9==mj*d?9_Fq_}HZq|35H+NlB zF3C%6r;mAVzYJbf?e%kg%n^6IlfWXJ#j#Vb;H6lYpE`h=rGUcx8Vh@*A;<(?74&Jd zZ#p@9fVX#Muo`}VA)$8by~@79h%eF?=VV*H(u=zsT+|GECG`2mMJZPaN%sn3)y4Ul z&^;0j*J#3`c=O%@52Dj?1ij8zqYgbORt<69p9K|#h&7tlgMT(~mOAV08`v@#ClEuf zoUGZ$x6?5`&d+slmkp6qbClwBsiFs<`BQSBXcyr%R9Adg!KeK8&1O;RUb64Eyt*t7 zu?$PTf$i?Ny%*tp{imEzMz_(!54IE|c7|9?d65^Y>JmL?R4?<% zL>KBY61^{(!ci*Bmf<)MYYMkwc!NpiGxf?li`AuPwesN==Vx>R!qDOum}F3YeSG36 z^e8+1E5k1g)FsGLF}+tUoO#;i(ya;4|C~+bsTVN;!aS9T z*GYy12m&Rz+=IFsvFX)h0C&uIeX@?VM|T4#%64P>{P@2{Nalm3?=Rr9sE-;ByMp4w z=X%lw($fmOq+%HGSLa({)0__%*h~kAXw?f7D%EpUXeE;c8rBAr^@ftCSju^fI-bub zj#W<9I$9#3phN=Zvv;jKa(@}|(0cM6&C(TSVrf|KRmA@s3SFP%2G)*(=Q*YX1ME_E zGLJn~&+>=f7}+F%`Y^`QDpPrgtK0#HPQ+-Id@tZ}$j6pHHDEBEtoDL>g9)TneftCG zmI8HbW?gOI(4;}ZWjfRJn{{kN7SGBrg1997eIOSkmbaw!mtp+WKCthWt~ZloK~|e2 zV1X%Tt3Jg7<$w~p>z9^kk~e1G?*O3V`|;5EV2<`FXlSfJOC21Siq~mx$nv*bB3*^W zIHuVs2z%OG_9NyLyxF2KA4>5N+edhgm$F%E+)WP5?_&_fLsGB1)E`9U2)E$-Ozv;a z*(@g*G#frwRPutLy#mtBVR7wA057{Yv^;4B@cCSdNyNRV<2eg5q+{jK3j!&^KQFI|NPi-}0*JCS zI5pM9u;5q0!q>RYPM;^iEYu#$I2$ElKwy}P4 ze*7haCn$_c!j}ap30W1yL8OX00E4kb|!G#LwQN}dVi+M zo-v;5lWxoFjl1hpNNTevREYWC_YYDexOx0t^?2wo5$T}A`A)uGIA0#jLvP|mnBfsw zB=}LF0Dd)5EE6cFvJ_8UPdCh`!L=3T{Irm75`@E;HgL~>IhVe8>}w|Auq)^1hf4e0 z3g8VZ`+JH>Gope>a?Z}h}*36buF=gbIe7Zw-{b@Kb4J6Fca=XIXkTkS+(&GheO6bat};@q4NNU zOqC8ltf5RTzd87G;acA=Zt`mu8CdIa7W^6zs+s9_c>p;Unjqx9Sord=^bIaaf=n8X zipYg-`2&yL+EAOz&T_dg915iAg#E9bP6+x{GolA{O#~4<5-b)}m&wxi8Ja6V4prQ8 z-o7BxwgkXW8EGcSg1o{1fqz#rbN;0D-h*vco;rR7Al|S~lY$4cRfG1=F`V(zjwaA` zs+`t)Uf#Q0pP0BwET)bJiguFvg>?0^C^jo2nk^4!ft4wlFA{cgQH#U)KAU|pSCu~c znQ-0V$4Uk&5|*wg7K~yqvg4=i8EnR{`JVRR1^)G~5@ZWl-ZF5gv=3wiA2XS{9-zf% znBE7J@!D_5OxK>*DtiIuXXm=Ya#AXu^Wz`L6ytlo)DhgxX2rpu?2{BzhxMmnpvvuV zeGiOMhY{N#2SH`G;s-VZRVZB~Diy`|JF=pC?}tg;X)&{YyevrDMxU z+!F6Sw?|AG9{zm8`uvc*`nXj$i?Rk8x-@#ln0Cmb{VDxHBO4{lZLZq(1{S)MAf)}a zmR1?)R!HS;l;!y|O{|*gdwub7+TW7+cVlsr>rjXOz4sbmeyvC}EO}M{f?Q9UVb0+o za%(;$yiOtRh7ZT3j}lZee~4a!=bHnfkd)sZgEfYoXnTpvm=_VwaYaI^AhNZ3g5yb}Le;&(EKag!8{s~(94WvG$(|bKr zMS6NID^)F2l*HsVAlxaUN~X37M@(cVyy0pk_ynLlTcm3$o=ZLme8D?5{B}x3?<=IZ z!jH2W{k7pyHjA%O$(?*yGVVk?j>o^p&&GyLi_si{(1fcQkBi{H2KrY?VExP6Z6+YT zaNxf6Nm2H_2p=Es%L_O4AHOb5-7cbDi3CatltD@5C^>g=M`n`K?T+O{{x)x;Vsr5i zyE(%DHNxC@^)@As-+irEz+wD_VkdTM zslok4215cjkf?V`9}b_v3cGT-?FBzR`&|J$RSz5;8wr+2nIpUi=|{c9!P4CnIUu*n1RI=qP_a$)XA}j4oN4dWsc++e!pAVmNG(=)2>bx~1 z9PZXMma8iLp)by094TQ9+4ySv!bBo~tsEiM>Qif&1_l%Uo2TL`E{S(<7tVYgvf zr%x-pZsG(yKAVI~QhDNPWQX1@InOCd726JXM^f`Qy;{TWTtkTr0YMkt9WN%iPL8d^ z7yl{S$$lgKiTl!+Htl*m4-)JGiU>LHHt;(^=<{#FTK&9BP^w4+5#asEpc|dd^|OAy z1es4F4lf6szF|_zpl+=Gio_pawPQEJ!j*7pyglFrvaTLg3?}g~Gtn#7S3>hZx-&6P zSdvcBc)2~=NwMF;c{Ig{S^HotrsRKG=X^L(Ka-7(^$k?gz2M>JlF-^`5a-0%{np9BY>Aft%;-n>m@hJ)YMTKeUBu4SYk ze9B3n)Yd%nv5|o@@*6^bB!Xy8o=Q$yWMI|8XK7+PuTJw_nAHZiON(+s4BHT(j1(Ln zb$M$@Eg;hO)`HKq7{iXQ9i&u~!eSBB(Sp3|KnH05U<`x6)$oAgf%f{iH&;99`&d-o z!MM!eO~);8k(o~gSFtM^mB^K>&&%hRn3o}cmo|S@thVpS#E3p~pMLG52!4@)2C4v0 zuQh~Pmvc0%h{Ly}8cHMy7`E+qO?O3CP}WFowlMDBt&v6;NwAPTwq&$euZ9iEi3oUp z@^goiDIV@`@ye92X)d_GDl!T`1XHeM^aci|XnoZU`7@q$c zzbFqQ)dS@wK}%}*o-P?QnpTNnK;!Hp_G?j=t`z;RYi%u^hlr?x2e@nUQ^!&NnjUbQ zFa3z`iO$2TX+?l8;3F@bIN(&=FrYGAENL56N_FSKlKe>Nq3h8u%8xcn&UKF34U@t8 zH5>9G5`jDZyId55rqa@!mLCJm7m2(I&|J)f-&i}_{=uyaek~xf1LgPT55Z1gOSgZz zdbf-jS&5H3`~d%((_$*wUt23We3Z?}prG5ez4iUdl|f`fGfbMXbyoTHzBV_j1cfqR zB7*!T4EGEapy#Z)wmiG7g;98xMrDc`p!`vF@;`kD8=ZKGgYz2;6V#xg{hh@R&A%Lr zm$yXNOn7Eb;<|Xarf9d~o-Zx5#W3p?9$rw^di-&8;*#4ueCE+QN{~N4WlHsX3TjLa z$4bkc`tL^ksXLw`LstkS8MwRc@Hv>tEECJxf40D9lb|EqoBu#zAu_1F zYZx-0%yUi__~spnFpVsQg4H7`=ZiCTxD{STuK|p!xJcf*8sT~nnC@T z*y^jq9sO~pe7L@OSEIrHcg;QmF2jFACLV*2xp1e zF!|x{v%17Jp`rz#DINR;$DmvJzW*Wn@q7~v-WB0BJB?rVK~%SLhDlz`&R83U_)TwbEVH?$Xv=U6hZb|# z$EjjrT(j1Q!^xs#9G`qdIY_>7x02mc#cV2CB92eYwf5RZJ0h6W4wqrYQ7o;Z*j1Q^ zp*-N?5p0*^eazf}$5R3t+u!-EZ@-bjn+upj4QcP&Z?Q@2BZiQGyAGzE=b~D}IWRYtW@iNyJ06S);@oH75ey>M zm8mGgn>O;S>$oTSTl~g4Ak7gKevqM}t@jQ)fvdX{;(Dt=a(Zby2uVR?>=;hB?flJa zpod{Vin#BZy3*29@i@y8^vP~ZcGCFrPle=;fvDl%Sl#`4HEL7{*-yv7Ev}0%gVol= zI*gP^txFEQC9n)+O2hP3IK7@l1w+g&4O+ z1#~|r7Ri%Oox5*7{e5WT+)pn74EBwof1adIWp)Q5Y+q`42}!Bpzre1i`#Kr+#}!{2 z)_=;IzkfJR0`0wvSMZeZfBpH9ESY|=p$AtB`_rG1DV4l+HJ>U@H67(*d-cDY1mbf5 zw)re~Jq?VcxBHiA*}t;>XG~;@SSf2%ii@78Nw9|DLZGhM?&~D6t`z;d z@&5XRq=<6Gi%|aWcLFF-!Uc9~h`Qdb2jlN9^KaDeHThGoIo!XY@bA;bBzeO74wLLe z|9x8DzJhZSbtvOe!9>J?28lvZ9ib$#RI&uUI^((RQdN0sIpiKU^*icXiqRfv?@+c! zYRdE+`5))XPJl7$T6Lm80borTUQLZk)iwrIqqa`@?}9f@ZoD5xYLuw~BGp)KJx({{ z(VfI!H>U|AiHcAvQIbBFHjLG5l1y4>NkvN~?N5s!&w1AEUT32M>4^>~D6myolfVXx zXa`Qj?+(87_VxE6M7~=qdGq1=nx}_IPZU$ZfWB1-t4^)M4>}X6re8t1R-o{q1aAQG zoQ!4_5o_wHeTj^O6ah*VX%N>pFW1>!0x(1gTKmU|d>wk=y>2jm(MzY-p(jtJ(0IpkHz%AFTtrMNDBuT= zyNpgJ_epteBc7wwag7qmW53a}!(jUb8~iLu9|U2%+ZfbKAzlQ#d^v)57aNrv zX($2lzNO#3udrXBORaXc!Yf*p?39O#BAq%apw5qcfYH572tNn}uV;{~vewB2;_p(= zd*O8tk1j7vd%a_v5W`&lQ;6e8tvB}}VO?48oM+$N4l-W3{> zLET`B$E;mVhJwp@QLYFsNRCQLns%eRCSb_cOD)bV26+zADl8_Vcn|AGMY|%qlX;zc zvXbS_nbH(*H(x}WxA4mu8?@z}3@uf3dzC^sMNS@a@}1aHfbiq2Kd(4H=3bC{}2O8d^{b6Rb? z%HMgkJSZ;rjn*C*eob2^OK9yOJ?M>vSJ zTkj#xFqW$+0t{NOKyJj?>Q|L2wo4KQ8&a>^bFQDfpOWxT8{f2(QdA2;U^!0peK{oLk#QY;QR+%lx z$ZrlrOM{3?)K!gpil;tC?gNjbu`MPlS;Dr0G6^bXqu^+XpYa=1s)U_LYI(_-H|FIe zd>GyzNC$WlrVvQ2Qaa~#6)uw8EaD+(cnBxeQ8c>REci#9Tb;XOHR9BWS~70mJM@)) zFj}g~4}+dU>erhblikXX8~mY3os!&j08HeR+m!#E=(of7nd#(4q2WdcAeOF<`SxpF zOdn?|RjDx|$u=SWBVrv-`s$**cXs$+fEnutxma*h{~3(jX~PHKXZIWl_7cJ%Wa;>}QdgDPPtzwz zNF0|_vp>OjdIluri*S=->pzg=SRWidc-&IT&g@=3U*!z#{=i;BuaM%+cQk|I<^v&OozI zwCwzx1A0j#L&Cs*(Qf-5q!q<)I`8DkU&;CoE`Go@x$^nOM7G7_`7}LVZ%g(K!XnXM~lc8Dc;qPw|+YH8mvFL zJ~djDEMvE|kaBtY?kzUyfpYu`$bOzs6cHfRIPTYm+P^5UaIh$ zve=$oLk2ha!wOScFpCr2ex9t%U(Z@Mm^H`%v_Fb?z)sA&^9NY|;E0%q0-3cg{776u z@Oa02OCb{Bh^i9>hQc9}r6oF(URvhd;*99?c`6B$D8T@p4E?!CKVh^7Vm{=85F1-s)>)6I>gX4L_;mdxVqIcbVf z>)|sLaSYeMni6T?qY-#1L|i>sEKt;Fm~cZtH6yr~KTDI^d4%anrv2mRS4iBRV6mQw z{>7Rfnn1R^j99&(5;c=cuJ5hYi%9%A`MV@SE{oSDy)na|=WdLPT6jG>^Ct77#j571 zl4X+%9Vv1@z1TcbfyMG}l38mI@|krs#GI}^DmR_I*zZAqd`yx5>vD?&imtUTiwFY= zmII0#xKqy}<~}6+;-uR7_MF8g+is&PXZ5WZdR8>ounTuX!TTgCWYlNR$eSfag;grw z*hRkCF>Aq>N#YC0!b>2v#ApAYgg_`)Ue$u(2f9gr?8Pz&`S!pGHv-Q$j`IIk-dBG` zy>@*g9nwm-I7oM=f-tm%NJ=<#NOwvqHGqP23ZkHdv~nmJy1To(o9CKy&U@eIto8l_ z&w5z=z*?;N<~94;dw*ibNe4(>4j&S**bJ_8XY3ZJ9#QepvvW7$s5~orYz8E0q>Jc@ zf|~C!sHUH~UH}lHbBR^USL{U1Pap&R9)AL(+-Sh1eXzFR0JVgZOe;m31_Qnme@Qq$ zVe=UPek^I0erDvPMys?^ZOFo?Dcy@6limBkm~vN?7$ylHG8ve+ckJk||1i1Ko$z9} zw2Ge)XArc0AJ(`m4;_9+oHRyHZ=WC9YJKQ}5e5{Q@&(QsG>6kyhIeTN&pxjVz0oN& z)MIgH_rKDpzjiO|@Zq`f_cK0xj|ex+r{{6}5pxKf@ViKJ%h;-%HWR-4WZ(DtRis1 zxx&-`(e}mC)nn2-7pgY(6PQ*#_qJ5DnWKrBUlBR)mTW)d#G98Re*A+uxHBuk8uw--J&drKgx3EWskh`UBead^ zd4-RXcKS4u{HtuhtlzOKKI+j%{oQM4eUL7}7I$xpO+~ym-meNk9)=UrC&vEzah8E9 zB_+cas)!0P?fbY`=hn3Su+C#!2lFFO;O;rzs-Rgc4sI(9KgOOb_dzD8pV%gYwpx^u zODdaEr?Ke$^OBwf*ZZF18bqI9oZ>A1!dI7^+mb#Rd*vM4Kd?I+(9mWULuDzZJ>zR@ z60+b<^Wyu# zyR8;?9@_QpNTRl5r*X+Gls1s`NJ=$lRmscUqw=;IN$11hobwznGyf_t#Aq8NPu2fI zF7kD&zEuAc!D}m0NAH$t>vSszM0|nm?e#(QCQfb0iKMPh9B;n8<1`_(YCk zsS)={Vpt}tvvje(hT1-dNTQXjG;})} zQwjNwl}LY!b9~=!=AQ(wH|eV0rRX%umkKx`aokMsr~`OTzpQ!3`w^j^z1%{i0zaY) z?zEv}MA{gFeRcpRV-mfw&fg!Iu&bfoiS8?C(=+ZVwr5e~qSK;Es`PtQ$maWq-2LUK zAttWIgIvXyoZKLJG-_jf0!5$!`~>aKi66LHuA8=^kmlFO1M1e_)=8ynj{QwfAtb}S z74!h<9>56QrKH^kW3(R4Qb+IAx{W@>u0~nhuyXw^Qn@s%f+rHgL56Iy{B|w3=x)l! z#qoxR@acqgOg=QI2HXi_ z6+S>1w#9l(?s776~^VC#Kr2NDDW6y_VIZQMXMyBlr20 zRX{B2uH?8Sn5mMIryl^TZKO90w-XGwDs3l=bCD0mufbwEG%2y#7xw;U)o-R*E{}g5 zwK#L(tB$dPM&lv3XG$T>*RE?&>slz*bLR7iPga}$fCyF=^thQ|JTjfZh~KZI5`=}I z7VJp*eXMP6qlGySM61^xJ;e!K5gDeiG8`oy4Sk8203z0dJZrM{H@H+ z8yw?NE~EF1OJV@Z?{AO1mSn)ghj{Q9Z`BLhH!CVsQcmHOoSJ{kGi`dKNPqW$Vrc}c zU_yR07AH!zA17H07FOwdynf*}8ej?cPM7j)h5hg{+$q*l2um%{=INwc?M->w%^FoX zBRc-h&hTT2{`tUh<(U#HvRDhD*q)ER)t_E^q@|t7xjHJz%1HiA`b~WzQ)*t(UYwz> zmt==~!tjjaI2ax%Ky?CI`t3mb?AClo>E>&MSbMG?9MLhH1Q;?7iM{U*H2B_6Yf zFb$^+gyoi9^>X&afEw|3YclaBOu?unl}E`8`O3FlaGnYne?%mS!q{F+hC zig@>Kisf1f#QY4=)}LvIDPm{9MV6(iG1WcynA=adzj!-Jl}U+yM-1NKIi^b}kD9dH zbz(dV9ZDpH_~+P?Pko!`1qtFD3(>Ro?%%oW%+~We&VtYBYEtq8L&&zd$O*V{9zB#> zB^C@~M5UX(8@ItI8@6VA(`U#Oz?(DZ=t-Pje?Pc~jMz0#I1$ER27l0&Od?~(5*QJ@Pp3w6L$8YNA$ z=xa;5`)8Y7xg0rTpI3G8ont?zdHrzO7_uH!jIgKg;fJu!gl)pFnb|DqMj3H8U01%V z>pQ2gpjD`f^*a8M?%=qONLEPgtHzp0R`^97?YqvM+yB}j&D-{*YJOTcs(ZVNgi>6t z_S$KsU&zx_{7{6TP}w!j%aBwr({YB1Os_7wJ>&FvNAjC|tnk25l5T_wpwB_8(NQ=0 zjK}%4o($fP8~T7y-guY$P_g66*?x9ZY1c+q5T{r~Nps{QcQ(W(K+t7KUs-qyOt|6I z`0z(pK4h>vcY=-W*fEis$0Sfbkl5&@EnW1223Oa%2+a~O;CM#PHqR|CcR3Gle(87o zynMeM60Mm_2UUd&n#Fku#MZ_YP!e0b295vJ4eI?P6m^oKc`E9P9Xlpdc+niigiMNv z?e5R(O0gT`)FZn!Qf6+#?v}@@P~*Tsn{_mK$YUgnkP_8n z*2w4~8>k=>-)8!fJbmCfLA?J~;U0O**}8^B(%2eTZS=kxh8|ijBC5uew3LAwwN4q8 zc@8TmQ1s|Uf@R`+^O?j$pZxY3dio@nuLfs?U#+ZYYs?Sb|Rn z%zV%73g|0dgp;Uk0o=OCD*-U63aFg(o&-aPHEi>6gL5wcME-Hjli)*7mIPh8j{$Kx z1wMk&-icqrH1G(Mx*X8aunvGN#%9kO9n^$=m=ox{dyf-8kjHjcXjwuTXKwxY$4Apy zzti;bZRcu#c_qm$ZJg`%5FFC3ous(Y@8mT4VANMibWE`)qs}bD|HDU(uCPW4h{vez~iaon2 z42m}wC*Cee(HX9@Dm6qY`kMEJ^j`b#ax1F6>_s6yI8_p@TF%L<{`JA|X1NMlOTK@P zsmXD{vg>0u0f#%SFK~M?2iz#qdO&&@auYwaA?*SbPc9*ex2?b(bE-JD{@q~hc7>iR<8|M)@Be&PP0Ta7O zGTcu6r2}bn0MirWm6TA=G1pJPkcH3Z#BO*YS9*~pDrp2F8#?IteXURY?H)f4dWMX4 zjPINQEc&kwCqS!Ah%c5XJC)kvmW7XQ_0NRknUlxME{-a(SK~7#n6s^MpNfzTCxzjE z->d>`6qgUfGKlD>un3gq`IZGOcI8sHr|vWa;xPIMkwwBE>z=rQZBp*cAql^xV7(>r z6e=`onNpwP6X;c2F*pPcD}jlQ{8+^AONom}t6H}eC;!}WC}!PD{oq_%!9w^_!&dDb zgVuA0WnqyO_3IwnZOb|@f{R@X_+lV=nm0#Eg_w^@Vpsrf4$r*(sPym{yKA$n&{KPMc~8)JbR zn~5Cf^)9X?_9?=~ny@MJ#wH9i4|X}72rfvd-XbJgFg^zA2-sy0v{4Y_qx--$#3*E> zX^HWqa<%JCcbq)?3?M*!XekoX*at9u3cmiAFGUy^ULqA>W^j}vD>M6}U=Cg#rbUiG z7SvBFCzu8I1q(UT#r4GKV{19DWD^Ms9_zrmGcWA*R_jzLvHal_Ueq)m9Js+n2r8x{ zs5FjV^dS80YOI`Hgu%|5|o3!r~PZiYQLbcwc_=KCPh5`}V<~+Luv} zglN*fby7ifq~o8%Wc5@BLnCn#@KtnaNGX*^tx**m}kX z6+F~M1hSBg^z{Pkbj{e@C~itZXWia(am35kQ*^btg3M98o4)_vx-x?f%>`VUWvOF) zI{qR?xVx2Au?v&(#ZpuMGKuqy(agM13zdb-{UvCX<~;*UeFvCvp=G7K0#yr`i2YTH zmK4QqA!N5crunV>##6h95a=1Q+->EYU4yW}_hs-1f}^l%{o0(fo`<`{9y#jTZCXIL zu@Q9MUL2aCxly(IF*i%X$!2uIi2m1di>n{IHQ-frVY`nkyYruyBj#FO*;SKeI!$FX z3u+AS8qHJ&dmIsO;=6Oy-LBAd zM-8p4blSBuJL&XAwpX|cW~##c`ePNU5lA2-+3>)Bo;mo#Awwog>}XVT^@BF#^lH3Y zmbpF7T=?j~W+WxPOa`mw%ms^-Af~!}4L{V2K?hsrHbdOQ!Eb?B3xDA)HnSqq`J}g9 zO{JpS`@f(JLpE`QM!1w>`{>fd2N!4i&f_2P4tr0cDsMKDr%B3QhfP}3MWUhJ$lWex z8Q8`D7o&qVgf>Kf6*Iz}-pYn0v$cN+zFqlrs?mP`K{F11-5^4bE(Q-(L(yv?N8K*r zpC3z?iIQKNPF>RY7lOqQBtsn0kL{Nw*6#h!dj@|`;q+yDtTyHT6Ek8ax(8qVX+rX)f-uYC=DCdS_TAwLS1#knq?s&=UKOZGC(JoF%t2SY8rZl&@^z{$lt9`^oOBsFQw6hi% z0UrlUoRr?(V+Dd0Wb1JTjGQv~<^hZiGy%rs1@`yXHC#IXcr)P8rHbH`-glYcYLaQ^ z50w*pWPVGubr*r za_6J9e(2_$;=k5ZL@c`5P&OhEZFxx8s!zswrHd8NcoM-*!q%zzN$Kf&*DI!HUv)Uo zZ!UKwul8vZP;CJ-xt#u74Rp}dv0>26m(J7fsj!|jy@7mH_V$E_qbx4_c|MKP(Y8$F z+(z$_MEufM2xi|~e^I9cm}BhQUr0_ykemvV;a7qmqD81G#R2H^7cohInm>J5<1k%2 z@JB#E^wc7KVcY`+8@U_6g&pAoQTK~0f67h53Vksu1}+pZpOHNIff^S}uRK%P8cuaO zYv9u)U^4`L=H8tmC`K&eb5f*|E;dZs{o1Od{_3FfB5w|m0u#Y-Yei4bYKi?8Qq3Y= zUP>w7kb9i^a)6`F46u=$~N7TV;WFNX zRy9bEH<8I^^P$fgRB@ncOZ8XClX{h}vLTUW;=QN>>-wnCk;wVg9EofJymdb<;BvdF zLP~{#hp{bF`VUd^d<4UCdon+AM2GSy!Pa!$i`YZZiEEGskMrJpDhtNzPn}6!x5m=c z3jS3z(*9{ZKLgHkp5u}-mtedq!E`A>NM`*7V55@<>AvklQ|x%pYM$p*>+@?bheq0o zY2rN?f&Ks)L*?h`y_Sg27b3Y~O(8f`cLKIb5zIAjg*bIfWWYGsZ2J$aTJk#pTTT|R zju#sPV`v7T;#51pA$e=6M(e>^y%;LO4?JsRzTf$tRSQWGH~^R=^ow?3-q+-hCT~y- zYMeh5;O1?pqzGsqpX*vFgDPk*Q)Zv!A+yJ~sg?Fg`No9O&s)G)5uPGwEB`!d^_rQ; ze=d+lH~?{%mJyA95|263bjBme)!Kn6_^{eu)?2)JkgHN8v z&Lb0b`2=sJnSfhAr10VsI97(s75Hw?rK03CIj&UMO)n(z@76&wYVMQW@5d?ODn(g`h2b8w{Fg9Q2+Ju8`8uPiUFV>{~y zgl-B3b#ml(RCj!B^;Zw0^^fUl%_}%ENLpcpji!G`yO5JV4jT~iiZ;Ieo7@w`@LMo$Xtj`-C*}vb< zEjm+JG1}OyjM(AYNMkV8FpdH`P1w`QJ_NwQpZ)PlgM;k*lgk(mVSsTBFM0+w&sICV zD%2@X@eeDX{cbEx3FJB}nPA@QJ2mWQWaHL*w4`?^X7*_jal8H9tUKcCpKI})(c?SbpJ3h0h zLzvZ1w;`vQ%eqOy`j~7$RSdX3ei5W)db|HL-SL_4aqkO12{qKWaVTU>`O2wk{Kaw} zSG*OE$RaoQZ+V$rfZ!v#*I}8r&_Vk8NGrWs{IsTo{O5iv^&37wbgKxL*wuy2f^nDK zO%=e=$L~vZJI51RVTUxXBLpnl@A9OUU1$W85haKvveX_(!jiNsjEKnFT7|qS6_9t( z|A6QfvG-OBm6au(Y-ESV$#U1CegXgP2`z$&Ut~jfs?Ph^#_!29Ku!u03IN>UjLyC= z5AloyNd&bi#4&ECr3} zvUAZ~kg~)me~iQE|0^e25DubnSzA0Ud0p=Tp9OoNyk;uC9vp-k`}&KGuc_bRFXCmG zASep=Q{|_>cqzYT`pV6xN04@ws}PGjFlFXpV>K0fB|hJ9dk7!Z{${8*iZF@AEg1f0 zWS}(>78+W37~L+laZm~D`Z}5krR_AQARhqwZF6C$!VIUh1(t*v3u7$=d`~D)aeyab zUxjR2M(DLjnPu;{Mzp-)&?782*R3%Pq?icrwExzif?r-ab9U1LHC&6f8y$wAE}JWT54Jgl@?|JWt;0q=e;IFNr}W?Zf;9G@D}t_4XlpXIKbe+TB-DQ@Z%V=Vhp(s;u1 z0euIkt=M*(rN~FJziZ@%F?=PX@c@kUlJQe--!EtfE2rkzZ~C43PVB;h7rU zSxl3GA~O?SOU|j!d^YpVNL(?IBbmdXQYF*Qq*xQw$8L+_23TYxW|sDU%V8E6!IRvd zvWqukv7c_K*>8y$ z|FUS=@6v^WM& zooWv&azD-s&&S1eW2ilLBF7m06!SFVFX}SUA2^QegJ*sLW8x&xKJ=#3-4_J{@Zcl& znO}d@RaDq-3Qgzrtas&3E&PsrSQD4dP~HWi?QjjC&lb9_^);5yVz?K|Luf?CfSZ?wTI#$ApM_qtr2$#yw&<1%SY`x9S(jb>y=xA&Al(~b!2pC@k|T^d&E}Hx zY2b2)R=darxm&FO;Cf`DdZxN0o#s!Ep9C6SDs2ATat zNyqeO+JTL7M}7?rCGI)c@uwt$iVcK1?Q33Z>2-FGlK8w}qT1ay6gMFJ!5>>YJrSvB zNk@u3MLI?O_Zq)q0c-qb_Q44pokSprltmr43~>)6H~cf`HYNSzc5Kh=AtB!Ialj@% zML+#p9Y}PG^URs_c9+-(iu(4=|I3&lom~W@5w1CbM2KKH7~n|+_~?gggj%|(fTK=(uI_3OlxZOG!ZV#F4Q4|XfPp7I3PZ`O-iy~@3Xj}{v zH~1%slOZUO2!uMKsG^X6loyIn$e^vDi4uDG Date: Fri, 27 Sep 2024 08:13:34 +0100 Subject: [PATCH 052/124] formatting --- 1-Azure/1-Configure-Terraform-Remote-Storage.md | 12 +++++++----- 1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md | 8 ++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/1-Azure/1-Configure-Terraform-Remote-Storage.md b/1-Azure/1-Configure-Terraform-Remote-Storage.md index db165a6..500b38a 100644 --- a/1-Azure/1-Configure-Terraform-Remote-Storage.md +++ b/1-Azure/1-Configure-Terraform-Remote-Storage.md @@ -8,20 +8,22 @@ In this lab, you'll create a secure location to store the remote Terraform State - [ ] Azure CLI installed and configured - [ ] Basic understanding of Azure Storage concepts -## Steps +### Steps -1. **Customize Variables** +1. **Customise Variables** - Open the [create-terraform-storage.sh](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/scripts/create-terraform-storage.sh) script. - Locate the following lines: ```bash RESOURCE_GROUP_NAME="devopshardway-rg" STORAGE_ACCOUNT_NAME="devopshardwaysa" ``` + - Replace the placeholders with your desired names. 2. **Run the Script** - Run the following command in your terminal: + ```bash ./scripts/create-terraform-storage.sh ``` @@ -32,13 +34,13 @@ In this lab, you'll create a secure location to store the remote Terraform State - [ ] Sets up an Azure Storage Account - [ ] Establishes an Azure Blob storage container -### 🧠 Knowledge Check +## 🧠 Knowledge Check After running the script, try to answer these questions: 1. Why is it important to use remote state storage for Terraform? 2. What are the benefits of using Azure Blob Storage for this purpose? 3. How would you access this state file in your Terraform configurations? -### 🔍 Verification +## 🔍 Verification To ensure everything was set up correctly: 1. Log into the [Azure Portal](https://portal.azure.com). @@ -48,5 +50,5 @@ To ensure everything was set up correctly: 5. It should look similar to this: ![](images/storage-account.png) -### 💡 Pro Tip +## 💡 Pro Tip Consider setting up access policies and encryption for your storage account to enhance security. Azure provides several options for this, including Azure AD authentication and Azure Key Vault integration. \ No newline at end of file diff --git a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md index 5310c78..360b5bf 100644 --- a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md +++ b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md @@ -26,13 +26,13 @@ In this lab, you'll create an Azure AD Group for AKS Admins. These "admins" will **Important Note** Make sure to note down the Azure AD Group ID displayed at the end of the script execution. You'll need this for AKS Terraform configurations later. -### 🧠 Knowledge Check +## 🧠 Knowledge Check After running the script, consider these questions: 1. Why is it beneficial to use Azure AD groups for AKS admin access? 2. How does this group-based access improve security compared to individual user access? -3. In what ways might you further customize the AD group for different levels of access? +3. In what ways might you further modify the AD group for different levels of access? -### 🔍 Verification +## 🔍 Verification To ensure the group was created successfully: 1. Log into the [Azure Portal](https://portal.azure.com) 2. Navigate to **Azure Active Directory > Groups** @@ -41,5 +41,5 @@ To ensure the group was created successfully: ![](images/azure-ad-group.png) -### 💡 Pro Tip +## 💡 Pro Tip Consider setting up multiple AD groups with different levels of access (e.g., read-only, developer, admin) to implement a more granular access control strategy for your AKS clusters. From 713acd5e6339b6db26584a44c59cf1c50fd889b7 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Fri, 27 Sep 2024 08:15:19 +0100 Subject: [PATCH 053/124] fmt --- 1-Azure/1-Configure-Terraform-Remote-Storage.md | 3 ++- 1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/1-Azure/1-Configure-Terraform-Remote-Storage.md b/1-Azure/1-Configure-Terraform-Remote-Storage.md index 500b38a..70a8cf0 100644 --- a/1-Azure/1-Configure-Terraform-Remote-Storage.md +++ b/1-Azure/1-Configure-Terraform-Remote-Storage.md @@ -48,7 +48,8 @@ To ensure everything was set up correctly: 3. Verify the presence of the Storage Account. 4. Within the Storage Account, check for the Blob container. 5. It should look similar to this: -![](images/storage-account.png) + +![Storage Account](images/storage-account.png) ## 💡 Pro Tip Consider setting up access policies and encryption for your storage account to enhance security. Azure provides several options for this, including Azure AD authentication and Azure Key Vault integration. \ No newline at end of file diff --git a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md index 360b5bf..69179ce 100644 --- a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md +++ b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md @@ -39,7 +39,7 @@ To ensure the group was created successfully: 3. Search for `devopsthehardway-aks-group` 4. Verify that your user account is listed as a member: -![](images/azure-ad-group.png) +![Azure-AD-Group](images/azure-ad-group.png) ## 💡 Pro Tip Consider setting up multiple AD groups with different levels of access (e.g., read-only, developer, admin) to implement a more granular access control strategy for your AKS clusters. From e9a6e997a20b87d5b6cdf18ecdde601ef0673999 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Fri, 27 Sep 2024 08:17:09 +0100 Subject: [PATCH 054/124] move imaegs --- 1-Azure/1-Configure-Terraform-Remote-Storage.md | 7 ++++--- 1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md | 2 +- 1-Azure/images/azure-ad-group.png | Bin 0 -> 66375 bytes 1-Azure/images/storage-account.png | Bin 0 -> 45058 bytes 4 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 1-Azure/images/azure-ad-group.png create mode 100644 1-Azure/images/storage-account.png diff --git a/1-Azure/1-Configure-Terraform-Remote-Storage.md b/1-Azure/1-Configure-Terraform-Remote-Storage.md index 70a8cf0..0185424 100644 --- a/1-Azure/1-Configure-Terraform-Remote-Storage.md +++ b/1-Azure/1-Configure-Terraform-Remote-Storage.md @@ -13,9 +13,10 @@ In this lab, you'll create a secure location to store the remote Terraform State 1. **Customise Variables** - Open the [create-terraform-storage.sh](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/scripts/create-terraform-storage.sh) script. - Locate the following lines: + ```bash - RESOURCE_GROUP_NAME="devopshardway-rg" - STORAGE_ACCOUNT_NAME="devopshardwaysa" + RESOURCE_GROUP_NAME="devopshardway-rg" + STORAGE_ACCOUNT_NAME="devopshardwaysa" ``` - Replace the placeholders with your desired names. @@ -49,7 +50,7 @@ To ensure everything was set up correctly: 4. Within the Storage Account, check for the Blob container. 5. It should look similar to this: -![Storage Account](images/storage-account.png) +![](images/storage-account.png) ## 💡 Pro Tip Consider setting up access policies and encryption for your storage account to enhance security. Azure provides several options for this, including Azure AD authentication and Azure Key Vault integration. \ No newline at end of file diff --git a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md index 69179ce..360b5bf 100644 --- a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md +++ b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md @@ -39,7 +39,7 @@ To ensure the group was created successfully: 3. Search for `devopsthehardway-aks-group` 4. Verify that your user account is listed as a member: -![Azure-AD-Group](images/azure-ad-group.png) +![](images/azure-ad-group.png) ## 💡 Pro Tip Consider setting up multiple AD groups with different levels of access (e.g., read-only, developer, admin) to implement a more granular access control strategy for your AKS clusters. diff --git a/1-Azure/images/azure-ad-group.png b/1-Azure/images/azure-ad-group.png new file mode 100644 index 0000000000000000000000000000000000000000..2638d25b37dd6918c33f34d42863730cbb773f8e GIT binary patch literal 66375 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/Rm=LzSRkvkSKu0u<83ei(hstBbC)ctd7%oqR>~Lw~068~(xo z8>ROPIRsLg3EOsB8vF|!xe!rqBj<>nUga+!mfUd$!NBUaIh8K?gDrpW?GB@fhGr4) zMv6|?wCz+`+&f~#>-GBX1S@+>bkB%mU2*ZOTWiH0H%r%r4!q z#q9D_vPq3Ran45-A~ky!JLk;W+s!~ovW%SKopq_`>BApMv(U6(W8%OJg`gbgj@5h* zRgK1~>M`}_3D_2v(Yw?S*o-({SNa9&Q86Iwt6Yc9nmJDRLZm;)=K6Wk{2Fx^^yodM z&)FC2j~|WW7>$Od7b$K=Bh(Ub2bNAdaXhhW;$luF{g(=_|FBpOMX%5p@vT-hKJ*v1 zcapmfMH@sE#)QFa_`7vTs4|a}o6N9CQ%F43oV}Zw&Wgb*+B|)d%-A$2S%JxTTc7(KIP52*TN&ooh1pW7lz>0kaKoTH(gahiE&r8lc>IL zER8rNG4ZnY&7kU$P&$~qqu&6iTuieSBd8(U3@J4=`IpPPA zYcGe0U>j=FHNc}O=h426yuy9(RbnF){vgNtr=CWTO5|tL{o=AzYbZ{I4z&V_9zkf; zPMqk6E{3wkq6fj|U^^W3TD}*X_wd5yy7r>LKV!KnatzkXA z$%$+PkAFBv=VDSey!+W-=@C}xtYBaY=?&Mi=gLuX4(ktf-i1j-0`o0GZZt9 zE^hPr%QgiU>H(rNm-xs+OC}MoU#T#-+;e8EyJSi3cLzme#ksLjj4$PlzxF_4$=Raq zQC2Gwa&pc~9>@u5)2A5H%*xj%Ka9X?giSbbz9+jERWe`t>-9-nrc;f^vA;bUV~ z+-5)l{{AwYH1IA22ehXLHA=ToBWdM<6Dk(qQU(&kgaDJt@qOjmEQU*Py6Qq2nlwTi zwbLEH>Bl`71MUclvRx=hy`lI@F`jGj&W(6w=jjc6bzQeRX7KtwBWYu3#Bq$Z&ASLD zu+nklbT$6uP_QG_Ygl7iWOK`mA7$MSjjJvXRXl#feK4m>?P=tIx`MKjDgLSTGsGm2 zqx=@74~(Ic1g?P?C|Gb6cfoj#-eEkY{(5X%^BOo5x5zRC;9ZrE|FOPQx4_CW1Y@QV^21%f@YgLf7OZmRt{$1Lp8`5|mJcDXjgSc-= z^!LSCG!yRzki;YXL-|Y#ooy^SkRa|w4E4PIw@}~=sN|3QVE3gA`I7S7WaIeBziXPxk^H$mX zFD8~-4j3J!IxlAskZAKR^o)f^wclT}@Zsm-fRW>1`|16PafP_uHOaY5L|(eLpYxks z_7!#urep7=4P@$T2N6Si@%DsMVza@{N>7cX`&H*$fE5VmE`1UFf)7A?(w z@DDBTP|%42F+xJ<2jh}cN;38{f_ceq|F0In&B^wPfHZM1m4xV*W2k^TC_}%-u9mZi z+)v;Ydhw7-sHnS5JUbMF#cjXq-5 zlXt11Cde+FT8hC*XL0#ECy|in$%7BbEpLCn)mqMJmkhOIOjg&Qk{0MIlHqAf;jUuq zJ>n!ES~}&Tq6$A}fs5i!b#W|Q>xgxft{BBM@+LIFT9{rX<+WU3^qh_hN2lP-56BBl z;Ecu(qGY^d#P{d=_+%I0)!To>Ea(Pls(Y_Os&9;&;MTc?03MAsCCH}B64S+xJ_4R9 zW0vVx5rrQls>i5>n#%2%gmO~eyeW#ym{zm_20@TOOljLmv=AWXM-CggVjW(*tr6=c zUNcatIvr9YiEvP1&!@ee1&&^%W;40Bks#Dv?gnZ^m$THNY}aXQUaM~x(_*wU`H*_n zbf7##-&xFPhU0WFH843Z|6UuJg)UW4Ne_|*Hx+xoY2KNA+RYQGG7*8krH6_;h}Vv_ z6nj~;STo7TA0L$!W}n5SOX?UN+^fe+Zs7z5+&{aNE#v~% z@X2{zyLb@xnggIm7gjL(_F_lnBoSfMSu|>F|7iSo77h!M6zwNh1WzgL_EPjaCr7q+ z)2CxLU%#&Bouza>=MEVbRRM_D=!VYBXv}ArTw+Li#jOA9J2xS_0DX zwP?0C)?m9x=&nk^GYw3GkhRP@Pq$wEr&H7GZ(?>ki zhY;{VH=#Hf!zOzhHg~71PJ3CdOX&?gQN2sA`?1}!FDg65Ir?E_9SjIcT9 z^b6MJVNaMsxF6c<^q*&uOil)wv#^lZD-VdH`dW+-#nbX`Ae7Lr_+~GhvQ1V;++6PJ z>+6-BvOx4iMl)wznYLT_950$11VL&jRvJSr*G%_uwIL+BW}$gHCZ0#H0naDHAn*e7 zsQ@oQ#;^YMqDQV(_f^mT)|UVP3Jb&=^SM6xQ#j|>5^ocXhj#Ok%H4a5)D~u7lc{1t z4g6#YQAA(63ln{T}z2fh@gYWCT1az6u!3*NsiNh^i^eX zdw9x9OsMmpdUa2JW{zDd(fnmEZh)n|x}fpq(s!%n;XJOe=O%AIIE+bdmHPZ3ED?#R zU`DIA6$@9+1$RTn;A)?j50J@HIW5F}TrPn6rDT<_%dIhx874@jZV(}=*bO~w}pt96md+!80hB? z0mZ3zuE&Dhn?%l8&dMh2)Y2@j7w8J|hAQG;i~3Mvxi^-j@}wRdH@7ETFuXFTxct1` zI#E*#Ulg~NaiQ2vf$~l8#}|B9XOS!-H<5>9>`Oxh*#=~3QlgH_WQ`$C5Jd}0odF*8 zI8SKDgurycB8nw-i+5=L!A&S2wl8F*0 zVk(3mois0oW8e)imrf$%soa%d*sSryVv()C1?XnfrX*L;>73AvjOHe;+fa00Yjb}n zF5p1dFNR`!?n~Op4N;Sd(ESPPx9RT^(X<`9#A#J2#|p8%6R{W&4&{Yl79bX9lJBhU z%-x2D*Fsakv0Yf@=nVW?p0I-cAJ~%;52%hy`-#`vJ<2+L$Hs&Jjo+WBI<_nqyci^Z zQezei4Pg&UkL6V^*He3wMA@g0wl`o_Hg{=EO9Rn<=6>jls!;Ec{_qs!0pzH$FA5&5i#1W8%4|?Zb-Ytw>6sL25(5Kpvn>$gErHdXqxz?@yvZ;3Jft4Cgr5%A z=2a0jiFF*;{mOKypSb%?`5!=tKWLs?*p^vNSSbq;;tS_ezfQUK`~lDD615ZgFD)Fa z)*TBW{>NuTk<3$4mh?nt6CT=BvHVUqsp#Z*o|A^LZW91hMK;w#>XWxP*mA%3+soas z@@CH~ys|J0wM)0Fn!7WqH1!w8Byfb`t;4oB$E3QgnOQKqeG`WobSV|zPB~TK zp=*omxaqbU9(P79V9bdZ5U8G!vCZ^Ok|YKHmt8acV1Kx|L$J3gYy362G4%7(j1K%E zR;dx$qa)HoyDTnsC-0-ZlA2Sr*saF=X*chrcM6-YYzDTle+nX zWg89y{wa8q;E%s=uL%@;n8_b)=To2{zmD< z0f7$rG(Z2^%l}KrGJsk^Kq{k>6!I66G^;TjLh|rk0W}p`%{5S+7=sHdDxyou$P@zo zCwV)&nx$pFs5?g8S_kOD!ou=~g`*eXDEG=Lssi9t5&%+*I%}+0wGzr=ss)Ztvug!) z{I(bE@9zFD`{Rkj&PenMy@Y&D?2TsB-y%(sVe+`993K5uFcF9HrO|_pPP;BqEDBrp z_4QR*Sy?m?lq0h4{RT<*r6Ei#x-9}=1&Zr>-!u-}&Zv->U+vPdK3t8%Js6qp$-B9w zN^;n3EFQLIaM-#$ShW)Wvk%}g{A&)P%B+RIf6EgfzzCXV+H*IWuZm?cm`3~gnvARN zp`bjkC&(!v4S55FW=a;81Rd`aXKFoP*ydFage>;lZZy1-A2zSO;*gg@K6k6G)shqe zkQ{zL>3~S^Z!`bTEA-!n0e?$ZPY^bFhJ=8?`@}#^Yf#h`cQ{)vMW@;16jZI-tpkUM z0(KQdCY4fl^!)4v^h$^a1_roxwk6ECG``~^pz#0R-JQC%UM>*|gh|GBp!z?SmIEv; zI*_|GgVN`O@Y?JMMN&?R?8{U6Biqqr?4gN?ytDyUqYhJaUz1Hfj2Dtc>oZ4$#JcQ> zWYvdVtK7j~2nTcAI5RFgP8O*?3#iT8Z5lH~J7BYPKPf!cku0?0tG4}(F%sJ%PAOaY z`P+kMB!Sghe1y<8e6}#CEgbouJ@&s_4G+8<<_0~o%n_$IS9g`Oh5Nn2@W0rjf{mZ_ z{*`UWsW;N)VEpIFko!m?Pa=a^CQzX${7>ct;{3fJfJqz@=aHoQ=jh-s`3JO^1W|58 z{eKvW5LVf9FAQPI?GCDGvXYv+Ra|$e%bf(Dv!=K#f@mD`&%v2H0$ak=Fj7jE_t!ig zSe&5pNfwDD3EaPV<^S;k!C7Jebg2^B$@|x^_m}-#a{C9vw#4xjL;mmH@~@+j8%oqp z-g)6y!vC>@dC zae|uqc!a@idfs}=;SK9NPtKh&6YV>7Tiv<}f8`tpEpg=mkD%K>JSeR3vwc8YhgupAm zG)|Q}2%AlmyAm#SdZwsd$n{J7^zAMzJCSs=`)Htuf7tPq(=5>(-N=hVJ9EUAjH`Xk zZT)uYa!E5%FZT6MK7|66iE^%ry-^<5dqC_!46BR+VNfP7Bq+)LujrB)23zr^H6DxM ziztQji6k)MEv(S@km$q-Js{)1p3m|1i1Pg?4i=c+-|7H6xfwoh!G84o;4wnM!9`>$gt|4N{|r2<>XmcOaAxZ>1n7SJcrVAfupA+fpJu zIt&5ktlW(C^%6*C1k+Gjj_dTV&q-q4q?cPhqc62uav*XK0aD+cck9ImEIxOse?n{$$ zHw+@KqM)E3+tc>xk^rwiE|Qo0ERFN_dV}fhQw~S8+m>ZUAbU1HgB@+Rd8u0m$o)OQwkL$YVlP`>V$?XBSiq0bjbyam8j44efmC zc$C&2NLAh{5*%Z?f`jb3W!MsX$)K|L5LxX`dF^Mdq31FlSEJ4QZAZM_cXM4DofgUih2}Gn2BAKpj6z}f+~Fnq z)$la(fD7#dSb%Tyy1s#H9#8mf7eyH*mh%ZTv~Op=_g}GSwL}3li%#%PtJwvb$Kk=2 zeR=*K-)R>E03}r#A6PjnD;HBy_l}v565ZZ#v(_k8D zjrOTE4P>@==L$ds$Q2a2D!=#71m`GfW%y&ve)}+c$`#_`;~J{w_U;3F6t~l{#M9lG zS`=;#-`n$*`SAi1!E`JxTRNJXg9lw~=-Vhmci^;NkKm3G3o~=wpap|ouv+ycgkZ&W zpH;8s)QSDM9y|c7P9gBv*KhL=W(N8O3Cpw)I6U%tf)|rHLyW#}Q%h7fET#Dw_^oez zulML9K|1BC^s#tc!cTW6<@r-H9Yg6aqbdiT;oH=eNWO7TTR>e+{NdrD!TZT2fatyt z0IIKlaitlX>ngqC*^IrB&2Le%$rZWMAzP|X4XZZvToDU(%e-4Y%P7#NNmj>jKPXJ0 zO5YP%ZniB*O;vB(2tY7ftTT2x)q8?QXNd(M`9Wj&%t2KIe8cZtGLiAQ69F8$*f{SM z>kGeO2uVi=#VhaGR3ro@-VoVn9_ONk1@$C0nB~`(N3}si3(;(# zlQaRwYIR?OtFT)}OPX3goIjeuF}cF!SYo^G1LX_jd^nRgEh`YHTBW5xp65?bG39%E zKyiJPsH=>^`XRK^{=P)houoeg}xGB<1_!(TBzWIhpPBbUj>Ybu4Y+&NVESO-x7-IqP^~uLKfg(EJY)ERHH% zu6URnmax4E?*rfx;sl&HmPXn!DtVvm>?-1t_h#In#A@NEJ#-Xaj?TJgZ1<|PS<}^4 z%K~KiAB)Dhftw(wct?J{yZo8ciBWpa|~ zdX!_m?2@EgO=m|X0u7hbj%f7F)}Q(s(*V3eY`oV4uX+NrY+j(SW-a!gD{^x6A>21TbwnH4!H`| z5llh+APWh~63NRODDRN3Jee+LK*YAg)gJCEtOp_G=jIaK*2{ZE8@jo*kmP)6w78P| z$crjRl^p;)k?F!4`;IZ z%m;>5oB%FE%Aw`y<6A*2pBSK+tLTmOf@;y2zNUw1c735z!3D(Uu za&+2$aF@n{Z`acdRdd$s^J!(0@7Y?gW7(#?Q<=5lta;r>T(ikWWqa}1_ig7c30h7X zWsqL8D`3rSTjurDTG@Lel+f3qA*ua#;Qn@YUboyH^(3+u*6{q0%~EAqHj_0xj=%(t zp<9tRS?0wW*ZcBk@nI`=C|j2OVA^x%i+FS%b~n@RM}Y|hhAvUJIfia&g}b-37Y6^I z(8RvKL%Sj`-fuTiM1+T5U;v7QDJ?OgNp@R@PvLelYyFe%I4kE+cHR0Rfma zswMk9kB#%Xu3l;r>o#o<`&Xm9DYV)}OX{I{zMCJQg+22tCyVa8#?p9VVRAgH+Sclv zGq{B-@q%7k9cC@&o}cA!sCci|o=%nS&c|1=x5Jc!DTv`J)zLcUTA@las7Skl;R7Ea zd_Lt}VDK4ba=XS@0mvll=2F|G%H|d6U&-{&qQaV^kK4%3Csmz#OMVZ^t8LD+EdV{i zmHV;>P8x173P!#P{R`BCxDn2o**=ie`+?7uNd^e#w14;w*C1ckb+0SLq5k)GUvHy1)|Jc7 zs=FTH>9ktnW*@cW2rTET3XY+Q>&N}ix}RkE?ru2NQ*Lo_@%p%a ze1hCX5>^ZxW0>&PO*Sz6Zl<)muI+04`kG~Yg5N~Kru|0sar5a+<5TCQazO939~^W6 z(sXtN(eISR#BZ$D8^9N$eE1-4n*Fo<%Brg-?S-O$U_jyR6>^4eRgyvi7JmXKO_io>$4iR^@^`$de|QSGz+5L_L?lu>iS(p2t=8$BwfGI%7RVLFI@X82`o++d3-m3* zhPLYurlc5Dx@2=}A^KSOjiW#EzCXiC{Sallt!~UoO|7{4cG_;M!cR#;nSHe0WX;o; zT!a0A7;0vFoozl!K{)Qcj$3y2j=gOfag=P?;7d0Jppkd*aJ4t7`OFs#w+M;MTaqe9Bc_KmYD@dbI7o!DR1dI&p0&Aq40|-8 z&^cf`uC5UF=?Ksd=WTmlm2KqhC*^YO!&ki+b@X=blQnHryoaW-3z$o`d|OL-N+_$+ z9I4Qj096xwYH8a^Y>snG?z$6(zD6WR+23BlclroCggO8Yx6S_!R#@!$oZo+?@ja_g zGJ~#|hK7cP)!U1!sZvmm?_)UD^IZ1DC2fNjK*mf= z_@u(Qom1|PoUivTO~96b?{1}jrtXszS&ty+2y3?ct;TDSQK=V`3EmboyUYb|k@v-p z+TpVAy7z!1*@{SxkZ#}{{%(M96)Girn4`Du>7P3b97L7XRxFudr{`Thd*$*}C_4YQ zjSan5P65HQj;EL})&j{p=eHV*%X{cPP0Dp2w=AG%*`sAPlGL859OW@w@*m9=?3gkSml1a#Kj?Pd(=ZdxNr zblf2n_<+lU;77#TW3gGGF`(!p%`Rt}^iu2=4}Hl_h?({lO~5B96VoH1SGZ#}#|rj6 z#OM4Mg8&WH1FeqvS)aw2y0d1zNwg$9_|QoQJa|AHBn@<`ddn4L-p7<}T{M=vPWM9J z?;$sd$;n07c19pVkZ~b!e@FGnwdP$+{ngIw*H(LI1>B!sfJ-_VSU`#?<5l_wvOfHF zpdkc;B9Y%iu=QY`1r84Cf!?4jl}7D-h??Y$4KfOI56n|aj&EMm$&$hc7uc3~XbyaJ z*u=E7&!O(Z%wcSJdI_(1g`xC^tV?M}&D1-WF$o1%q+2yU{dAf)Om59=%m$`<_YG+~c)%56FiE6jQ91n)0T{IYngV_@ZqWY@CDi*9!r=GqGAyCT=o@ucsX-gi$c^MV!d+#3Qmpo7Q zUe|~&Kuhz_cTGT}v|>PM5lbPz_6$>6 z)iAlMH|&=%>K)V-9D0U#1b|NoLuOWMw$GhV7ni<*C=}vSE&C+d$eZFWw_ESMIXCx* z-j9@#+g?uE*M6zOM>G(I4tbYQ5*L?69if8Q>K=)O)Z44Ib|5$nuuMx;19F!_!{-p^ zb=5YT`bX2*)Drk$5v7aW)jL5+DsEu@6WM(2NmP=ROX6xXwOjBomiJ-5oY`hksY8i4 zHKzl>Qf~#H1e?G2ihxQ9%IN}72ydgg>HBINRAW`xnR4*na?r_*XE@Kr+?C7;9|7TGnd@9(T9)} z4yjrPFl@2Jb*2{%$jmf;dLG(*TK&4u$?dN(Zrp*39B?ol_KU$(+;pJnr;m@1&OAnW zV{ZFt*Dv;H8{Jitu%IUJ-V1FplMwDuL0R-Qpw!c9sf+)_dMCPdeFMsF7Ha3Gj;cEc2{zUh?zCTi zjgKphoDJo8^}Uk|6Vc1x*7X^{9CoL~HsTA}_Z&JxUC6H*O%;n*n4vm;-ubGZr>+12W9J0X690TvUyxv*NCax^ceO>@1GZ9m4r=)b&JOUM{uBQCz_HO4SH?4^_L@ z7jaX&C&b3QyOEV{6DnaiM$RiLeu2^QnhcIH-Egn&c&?L`G!LD|+e7DnmgnjXTw+e` ze>(H+v9JCp>&HTlqMFzHWzI*v#m;|Ie1LA5ZI_i=k(K3bF|Xp&?*#>9IQ)H587qJ9iV^zZt#YpRSZ9 z$Tr^%dChMOkxE0&Fb#EH`<23Q@STF1U;pzU3%CKy-2%tkc#W>m%dXHS_WaAIHO=NT0aqPW z8j+0w0wGRREo7FQCJ5-vO0Cvri--%$p$CV%if|M<0yO;_-lo^?Xj6dz+N~##$7`w` zxflO2!g)eU>^e>G9P~$_e^_#Pdt;$N?!^YAG^W&Y2No= zW7a8K=!GUNY2^EaarC}fE!LT+*&43M-E=g)dN+1;Gr=!%o&PqKR#x4ynZJ~R<8D>0 zdY+nE z`6A2dDd4YIGQl?wryP5heBwAf=_$u?^M)=NxYx!@gE^cseVS1e=|)JYUK7U^)fim( z=~r^)Hz50F8jDtmkfBAF3C|Ebrf^;{P7Q=or1Q7m9)i;e*bt9>2_?>$eaGzMwOsz* zrk~62a)Yk1>C&l?ZXj0F0_`2=xx;hs)7emqizsx+I*(77Ud&vZj3vGqq8H3NY%`%C z<1rM!llpNn8pK=IDS7B$fdhTe9HQ4DnBN^OuyCcKHwVf;Pm|X<4$1C_bIeY4mGdw* z4|x2fnXx){)Xq1ZV?qym|11}ZIBnT9p3bJ^P)@dj%Wgqw{iV4{lMN!VQmL0O7LUII zG;xvE+n|}J^3jA#PsL7pK%=IKl~E&?x91n^7Puf1DPt-{fSyi^olu4(AgrOT$w;IM zzJkrz!k}DI^F^N|;kg__eNbGF4x&&&#rX2R8drkk-i*AElG8!16{-;WxoH#KN5`In zq1IH{uBdOAEicytj@$D#GrP9i`KZVR6fXDF;$QUvA#;Y}jBqo6Rl^+{Myh40~*$cDust15(Zz+0;X(Kn&B( zNtTn;g_(h$V4=pvui@Z(AuQO>0D9)+LCk4&=iUbsf(u{5a*75;hLhAhb_ib=SOYX# z)t83k9h&5$n>_)QQ<{3yam6_S_iI0bx907~N|B9EEvgl-dxS5UL1)e728o~=-X5^~ zI%fTlGgb_EdBr03hu_<=H?FX?jCQ^ZnccbCvKv_Q+A;>If-Qza(P~)4%gT10W}o)X zq|P+Uu}$s~MMsFehV)O7J}uxFE9}Yk63r;(Fe#X`NHsl*>^!FDZ8?){yc&l>fBwBm z=5Vq_@N>;BRZEjyutV5pMc{0U0H(*T*!}GV*@>1`eSd?mB<4%ufP~iF(eNzIW7oCf zsoDLTAuYeO`w?A*6yA$0?U#m$&8MG|H_x_!Y`=$XRvz6-o6C`jcIBGu_1d&bD~X^U zA6QB;wMrQ*1`G;sirqVoW&jm_WZEOfwrTQBbAInP#ZCwm0?)H9dzC|2qyM@K?|Z5- zIC=YxOyu!+L0Sk{r@I>HqPtD~O>RyU>5`!m!pOE^;9KHm-*}I!_$F>Qw_!d-oJf)S zFrusy_;fMK4It3ykm`klC5YYcY#QT8`2Z=C6hkH44)|fObXJ;iQzv#J$d%-WX%+`B zuP|bO@Qt~bTy9TK1tv_Ic+%TByfHIuxEx=Nw4l#Bi%lQ!PjEVGBYrM*bp&popn354 zJfgCh#EiTo&O6_0QKm)p=n@Ld#U&hq2*Hb2h-*Ij34=)nj^4p=-5v&~36Rzf2R2%& z9$~(#q3(mnyhpu56nMNBEdytl{?e$ffw8f$D^DhB`dyb2pYgl@A|ne44D`UQ^_@)B zcqUh+%r{qRM+Xwm#Lq7UvAb#vCO1xKCXP)SNlXuDb$sn!B}PBgRHsbnD4{ixlG>Aa zenl6QlkKk%G>RI=-S1J6aFshJG^AY}9Ll{uHU()T*tJrTO`^t3q~ zQhgIpc#~6#-0%^+2=-^rK9aYR&0&|(r?x-1<-E(Cvs?Y%=D*CHV%?)7*-ETT8fjqa`@=u~2%eOIaSi$yT8R#2`em?snn+B2;FDfmh%iH3xn z^4!|+?o;1sEeBkT4~3l^US|%GI?E%>4kdpLRL|Yuv#-nT8YGzk3FZ;R zI`O;LifdAX9&8tWe}k``uNvm>j9(#(DuI@4YbPUW zCl}!eq4RLH)9B&skez1w*$+yhM;mIyK_T3`)V@)GF(-(M-Dl(&PRC9f58QJPJ>5h) z(mLq_T+(5;v-`c(U>cS340JVy((wv`1!MblP<9)%ee@xxUHoF_0N{nO&)PKA_HT zT%QsCJc0amoF(g&UVo;omBjP-S}y+{b7?$T!%lR8X>q}m<=K}^@7M{D>3on&jYm{H@9mP)O{-Zo?Ua}I z%S`>ie3fT#0drMR`;q5?h3Dz;-ah{pfkE;@(mJ=eb4z(_$gFmxxhJYXjq1)RDWeq)z@0Ng~yX05|kd(%SK>Z;dZvkg8STi3q1ucv{qREJS+ zkfaGpEB5pFKEUJlKC-vYcP!i!DdKFdu5OR?CT; zGp@MPclSfy;RhGLL%n0HdNQ-HR}SSmi#Z82Bk6j%R+`h-5gPN=?KsuJ%5l=z)@)pT z9>eZ;?$+u|DbhE!=6dwqAAYkGzv1?z&y$N8PJ4C8V1!V{BaQkX^%V?`G~VyKF)q3W zL!^K@1gu9Y3X^{Vnj-sbl7h)r^Bvt}j)V3Gg7 z8uWg!m{5n`C%)c@?&qbMx%TntjibZUv3{%bshwAuzRo`wkI3IhxW{-v=yd3VR4@{u zWScaXq4v@$O|j8iwc$=*wo2_7lm9;$M}p`9?R+?g!B$yom0{MU2BUJFq{_;{-~`#h z?qZ+wYSF~)_gC?6hC?xm`9`0;4}WZazkIn{m(tVAwVos8B49Cz!k|%=&UW8TBQ4EI zivI^kcOXM49uV?xTm2@Ob&7_CYTh~+W!_mR1n0Zx%q=>$2HX5iK=p|W4jD1I;1{{( z)Yej|T6MN`I_u{;qn{u5#&c4B{E%?pJt!^|k0rPSS{Oe8*@CUIkCS_6Fl$LPYE`6d z1gd}Ee1Z^E(SAyifvjncl9kOqn6~Q;OjYgXY44^gCCL}PnAN+q97zVb@T{KdLRa`Z zIaJ#^g8*cLRGZU*(MFGdozII$Rv{q$#;o55#pQ8b(qOZ?q{CDMM4JEJ%3yH3U=Xru zDnFDOvqaq<%q=0+@lwYRNnDLi$Cm3h)|Zo69g&uKXP4V&ZpN~Bq)t~_8{>N@5#{Xw zRWxSTQ!OgBs!U!0kWvRoQDMUe0i8FwChO&*WwWVo;Z_SZLVy6Dz+$^=_4UEDc(LpL zgiw?1Iz6D3H~}Bl{r0Mv{M;s*^F8Ms4)YHHHN0~(ubZMkB0h{P@T|ub+OXR0dc>{Z zn#Jw>&33)34uC*wBjEtZVwKfuUiZs=2SC3*rBEv6%i#vnKdkH<6of1$NF!o4`TRUg zJ?EWy2PvQl`23P@kR|du0$twLUt~6!&%OTqaAmlo+epnlu>}lBX1&xf1<2}25%hoL zbU9ANpp+Nne|vU>LqbZPED-+%pz)2*H+s2scSq8oYtaEcK`KCSr$F_iGNrB%4N2VQ zqG?VNppIfe6I!uYchDgb+NVE}D^zDXPJqMXQsL(5dBlxOz)QJUZu{ z&Td^63m~;gi{*0Wo}NYiAp%kb`za0h%MIe8Rnfv)3B;OQCDA9bNDVw60L#%iyIvd^ z5^&6nVmud0*@IN~vQU%yk!8v-xAv9b4L zxfz-XN6%RPQio^=faFMS_63vKuJK-u3%sRTw2=L0X#ErP{4s=j%`s>0 zH0q4Pqj1?I_k_HlEd9y8S86spO#%4qo7`^ne3;MltjLLsa(vE!%Uj&%eLKRfruH zbra4S0ogba(0Qd#>`Jy}bDSIARMTX&n4hrbbw#(VbO~7PCy-h@Re(du_xBJ=v9nt( z$O8(16;~uh;820CBaa!eH@SqW5Mo%g>bZ1~K#ENa{4j0drt$)yu6aptrIf{wIuKi= zzlW2gZcaX(Y@H7g`od~`^td~%d@>(*=$rXP_YW>kD*ngCIpj_gVRt0;p8P$*q2QsG z9XY#PoC2k2b5ZUAy`^senZyGnRxk|E8=CD!1;8hHs|X`{c*79taQ9D7nlR52-=*Jx z;VKNVh}e7kf)VhWUH}CwvqG>67y#L1KL5#JAOdrV%m8S|Of^|+YTvmv_CW&ly-5NH z?$^>4id<Bt01^7!=Xt%{%qM#Q5|0$dt0;MD!aeZtD3q8ec(v-a z2F!|;QGRVzy4_Xd!NI`?&tez3=(B|HUWs8-&7f|CiNSQ*EZX zvHbQ5v+o|;Vt%qoL-Ns6%CDVnF-?lrj#x4@;-)}vHEKU8e+9~xc!4V3eFRlwzeuQH zAn)0P(%alV`hYJB4c`WEdIlf6Bi?Kc2cuB?S$i$WOJ!<=M;gqh$%r-t+yTi&rIDR& zoQQiy^`u?E!IO{rUc|tbfPisS=!#klGrUx+Li<4uZP~{|aed+azfV-RIH*h*aZzy_ zn-|&Vy4@67vh0TIqu&F1IJ|q`b{39TxLQ@{-_Wh+Y^S#BWy1P;X3k^_!4E}s(WVKf z8EifiHKO}9##Iva900q<_(vS^qcVV-{Bw{jT~bhCfUr|Z!l+g(=YwQMKk$j|CTOM23K`PnK$po)DF0Q^ih4@$tg# zw9?~%&%dqS6G)CyyhS8gnQ6B({uRw>GwyfUs(44oi@^;OHM4Zp>9dB7^^?vgsVMe` z*raecAUi8f2ZK2YQwS)OM!=*d4Kr6PlE%Tm#-JDeb07d^UkbQ_&k5w_t|fquApURG z&$#-9wXgv2TDq9ca*1`0i~QfC1IafbggrHq9hE%6%3`NH1aftv6SRdyo0oAvhamx6 zr;nmAJz+wek|r57r^mzh-;M{zK((6{u+HFn>{wCAEvO7J$2|vJ3 z0dl8OdYa1}V=?xlEye1=pk%6=v7V`B*sA3MapX!b2$E$^mN54~V{ZoSHc|jwT0d~| zu8PR>_V}yA&hWuKr)IOwtPT1-!Ca}5I1(X0EwCdaCdmj13Gw~j*Pi?!pZQ-c05?54 z7TdKBY&`pM6lBny{!k2l8^5yNW0%b;w|QA2MObg3Ck&RE04Jxq9TLs0{J%5qo&>ml zob8?jp7Aaq)p6qoXOSNe{7H#4VOimK*^e&w!?nIU0UF``k9abv#8_WH9fwBWx7W)# zO{Ns{PY-}z@&S1Ijf$ZP=DTZdr~TYYtf_CUwx_W|xXJbdJ!=wr8`^AUk>*&o)qKAN z{$vJJilQBz1=~MhprH@^smJs+=798P+yTj4J*f~7twmdZtTA|3MHm1GTaZJ==z5;8 zc_R(Sr?Hqy0vN5Y70?$SQAGOMI=DhN>h=qqwbdhB99}?J2$MF0up`gld z1Q(6ew>;H4J)HfIz?awz{vYz*!Yj&keIFl&p&MxhMx>;>899hCAsKAl z1-F?65P=9B8nt&~j{92tJd|l7DD?Vk@tOV?-vO(&Y@+B^5P+1CY`k#8Knr zg?69QJ74wckVVx@jf4dNwszo@bA1QFVPU78xiXi|rJT8{un2}M!5ziPR0MY8?hJW1 zACDH~=LR(sXuJSs;wy(P(?zgA6(ohB4O*@_2d4|CH7QxjJ*VIb_b-$#*3lULE+*>@ zU`|^XIIuheeELT=kkw|7WECT|?Usbxy2T=HZ z^nW!bPpOs;>*mHW0{UXGfuYz`)H z+qHfMF{$E32)s^l++R|}pQ1w0y9l8(Dne0@DPjuDYT2v2IG+j(%7Ze&FV&S-Cmc?4 zM90S-)0M!z=7@yih`xF&>ahBdc=ejE_27@7kyOp(QyI5^^oV(GD82NCk5CM+F7goi&5LmXb+P!iC5 zEta08;Pd-&|6|zVcLl1h#99BdJ4rsk$g)fbihYWAJ(LX#If<)39B2c9U8rTD;+pX{ zB@;JAph+Y*Kz941*031t47yf~yY_ALorlPv$d}b8GjK87)~c@vW*X@27&1bpDZ4${ zz-D~Mxu=^`lG7i{Bk=RsB2jKwI}B-vARj_gN6x?T3-k)ilrU;}g|_K824-T0CWkS~ zdY3T~x6EFB!BNVSy72%I7TV*2vFKsg4`FYGp=`k^Hn+)d8Nv|Hr#~9DOBH!A$*o4g zesA3-PbRmr{rDZh?AL^%Ed5Pxur`=7%v{BU>YF`fXu|(}{)p(sJy=4p62xkvMN~P@ zE1fwRryWIAXZbeTlk70DeJEslACHE-+HG;b@78EAxJJaZX1mGE)#? zAt~>mwKdr{|BmT_uPD;yQ7umRwaU<&2`G@vxW_07Yep#YX)OybKhKaTvPJHOvIQa! z!2a7uGyGZrrB}Zo8R9M3(*qnLn&m3kHZoN{;A146psoo^8sG7o8|+HpBJy*ij^ujA z1-oA(@)BsW? zj)Gzp3z~Z^CeS6a?$|eieLHc0LwK#|6~YF`PzdFXwFzjrNNJ*Zb%lHAW$6mv6SpP} zQWrB67t4r7$nk!d7Y6A5^MzKVOv`P4k@3Ak4Ngso(gHAay3*q>Vjq|UnzR{TNS6+! z(aT_x>ADINR;!qoDMp;v5dKm0&v=|GpDx`s!|mR>PG-AkiGMIo!Qv$3xa;Yus$v7Mj-Mg^yl?oSiVd7dvAr*p6aJ&U-5GB(_uh0 z&uujt*gIgw2P}Q4JfIAwdtx;{N#_L&pz|-|8-kw>(A4cf8W!7o^^Y8Saa2cORH6jSIjGy0Z`E}p4yt5=+wUHiC1 z@X!DK*T0bq$|&xDhPrzN&qo^(>e-^U1yd3=s?UAm#r%VOs469$^JP2zz%cNMC}2zlmwi! z4ZD)~o#);pM*v%vC7b2`blnWK*jBwa);5(-##y)%3uCS;ziNH_*=4S|fUqT6sBS^-Ya&&3?u$TtZO@lki7)l3!$It`Cq ztE*O}lM-+_rwT3Pt9_0NrW*WAn7kG!@^7K!a65=-c*r@g@R>ERrl+STR_LxpMMp<_ zdU;iE?4|<>6TOhNO9V@^BV(;WY=gP;*{DPOoet&e{{{1?NkLs}xTsdf3;8=qm~g*{Vuo8UALi4_!3Rz8}#Q%o|S^lo@7Dg$3t1y+ahR_kl1({ zIyx~Jlt&=UM0_SX*7r9?_l zC*YQftDXE#)v)#q{%w8JO#SJ$Pg(pz-sSuE7DD$}oGsKvu2$Ws+v}B{ z*i8d>PB%>fYaFojhjInnu^I{At;nB&<1U6i!4GPFI zpChN0A2%u@hJzYdY`3E1d?YWS=OgQp&EoaoD;xkJ~#me(|UYn zH5q&SMkTklJ`?u>|IqH`AD<5to?=kl#*I{tkDf{x^d6H+uTPX~lAAzAsD4cdRDq13 z;rwJNHK@sF@7H&CY5+thM9D)I+t0oB*z9`WS3EF@Vm$aU?w-;N3Z4N!dr*0+4|Guy zr~Q2T0TFpjG(JQVnNF_o0muf!T=N6YiX++wz85yJ^XqvpS!#PZ_Aq*73unp-Gn8n!&rQhh^jWq0TH>Pg5YYZ1 zelBzcH8 zq;9@DJYiMOM>Zf7gAi;7lcpzvxCb^}@v&>8&T7S0ZTs+RCY;#l)xb2bnAcau+c=ph zD6SV72F_!-A8pNA>@IZP01I3u_j|jAjF*oBR7pvg?5>Ikuv<@kff^a`Y1BpuLR8+0 z*jodsr}s-K05t3ZxAryUB@o)ud^RKYrYKAYP;d|y4~!7=A*&au!^E;d@=5}aKuuBc zUdBr|?HGlA4rVx=nnt~se3rV8{Lbv-cTMC`%-~u{!8}=JnWu)4E@A|za954h1$~cQ zWVbyIr0)13d{>8V%KAjp`V{ z6Jps0!BGZCMOj;zJy{ols-K7#`ZNe09vTMW)9LB~yc<4?1|FRnw6slwb5&B6-9J)= zzd~^=IFkaYGI6IoNH>P+Ha|-9(uWVnU1JMh`>DiRt1c?{thYKp^>5LR0LG zqZj;dy_b4YZV2SJ_qZAwCg1%QSm-oe<2}ns;^MN3Zq@klH6q*vlP#SHIPsu$aeknjkl;8 zD7I55_h^_e*zZ3yu-6~j5N}tQmt&3Kki(jTKjFQ9tuP+={OMwsO`P>!;`c;9Q~3-q z$4ih3uXhuNhY-FtS~zO5_aP{P0JeF9+>l)%HgJoAim1xM4<|*UYu0u$5s+Q z>+aE+Rk<`-CwfpSf!uwv1>sdBvF^es?P%n;uD zuly)O3ChP!I*=HkA(Y^&%hJMfu+(36-OX}smXe9#i+so=S^T>DCf?OZGEL$`pM%xR z7r4!{4FE{w@|-5tbdkHCWaLfuVi2gK6hR-y_U_8KD>2k^Bswq*%xfw?bgZ;?DZ$3U zp`tc~QXa5KJRJP;{h5FqG5Z`}e}kWoBUU=zTXS=7#Oo%GE*UUy!#i=}o`7t;;(0Kb zk<|sJE}=6xjluHk`%T9(S$gRLJbP995nSX7c;w% zeYyJ~=N-WILmcm)j&a^6*G>cFQDQPBzP~+emZT~Mbul+=U@_=QPR`M6+`o0a|Dz`F zK#mGGG$3#dzzpwAk{ZgKUj26%dXHbVkQ4Jo>FVM~9SfG`&vq@!g{iTj-5jilL$#gV z!-PCG?llL#p^8E{d-K8fBRqfCCR899wv{j1nbZSHT=2SE5lpivfI1Plu%UV+a8t;W z+ggSpUILmI7ap^km7CLLyAW)Do;5lqrj6b}Bfm16)}e?pS)W6E=z*f80GLqq0f*w; zvV;`i;O}Kl7T$O>m+o5Jl=n%Vdl)DK1UDO9fruzWuO|H%GAvq(cb34*)H@Svq3Ix5 zjxLGljniq^xlS-@7;7{r#eI$5d#z&qfI<-Ky&3HU4(&e0?x42(${JD{S6?u&%KL-V zUcG$iLEu@~S|AkvBCs2;_0$-MEAKFtLiDd5qZ!g~2^=vkTBZjg;#@YW0G_6@WA(k) zh}p65N0F#LQ)niZqTex}B0;cEh_9h#)5NKw-2(GpdGcR*pPCJ@s$1&znYEqmZ97YJ zVxx}`EqYH-?{$0AN!NeYQc>!AH~(v6Gs{qG9z!9i=(lF_zc19PefAr+YBG!7Jx4P~ z4-@wUj#d~G>!wR6Amm_^K09r+j-?VZ&-KIy1U<{eV}c`s=pRYv8GcY;TsH7!lRJ=J z{rq_?T-#!P6)#Vwi1IcV3|00CqCsN-s;nYCmv6X7LkXwztDm_qTvZth%35Up>pZ!J z-)iql?r+v6gs=Pr!cWln)I3OxJ5$lKYyd(_M@_?pH5(lhG%ZhlX^L|oYL`32sZNb| zh?`7D*J8>{L!iS|_GDbc*U#^uB%tO#-|u1r@o*`Pc1eSHT-RabUQ{dNf%IDA=jV=t zW*c~2)j}QO2g+CrY6RB1RmK*+r;k=ErfWWvPD*)c{bx4cnV|4K9J{*6z-hyb$DTQ# zJzd(aRfi!tB8re8{{GY3>c2@}u$e`vF8=xv@I4!^CgeoY3W~Vd2B!OU0(~iOH-}t* zRK~zJ#36GImHK~2B4oTW{H{UBv1v|HWu>QG4X$T4bOzo9nvq z#wmds*dCNNX8*a8pd8tDA*g!by6wUrlKXb2q?5;9^>m}o2pM#IC9I$$z}g~>y-{JrZWPfZ*2^^!cS(4h0PiJ z;v`EKz+mY=bI0U+1IL+7UBmGitmJIo2VX!k-2u?_g{c%_x4n`4j3=?~e_rv_4TUzW zMndp@>bC*074(g|6LJmS{T^KgNtIm@MY)-Sz9@q`#@^~OSSzy}0 z!=e2#UZ9*+kZpzFI8*%w{ZPpy0P+%y%h#5DT#ow{xya*~WKBROptgu9xfd-U=5hqA zY*>a2I`%Q~!A9Z)F$z`$X!^yR2YRtADwzP?ar?DSKVJP*)#{z?35+~2=ohY>xD#i{ zoxp|eREyPNXEseyO2o^7ai+gu-)FaoI! zd#_ASj3=~;wu+-lyh`=Y9fHijkhun2Z1Vqoe{Tjucu2sL&Hsv&Ij+`Y>q|_ohGY`b zC&=f8Pq2^5zdltS(7dMl;zj?>o5>)DhT21pf`7J03q~RFX75)Cpqb{(=RV&1^X^Y+ zf-3)L*V^+@1qud{qnd|W1i0hg`26M4s{?o8d7;+_)zb5jKR5C}+o^6@GW1APV< zrJ6xnjWzeEhVP(FZ0I&T48MlYK&&q@bduIIr`WW*M7KuoCOFO$OYM5Q0M2H{m6WU{ znq!c}@lNI@2+Pr>Z;uyVmkQZ}JK_n42|Rs0e8rR?_!0jXq@yutbzYg?0wB6tx>Cpj z7!c@YY|!9)vH*GtaUfaL0Rftpdkgf*d7^U`S$&Q+8P~2+VwfQ}EgI@Dg+ht#cP{DY z>oGU)f5GosG{7PN6@*IdBGYpgD<-`hJtGrFm+Wt^{KUuPz+Km10jsW2^RAADQtb!-c3t95(ZX9MMbHrU1>ZSx56le zT+j*t0|+&3^f&wJ)yzC4JXQM+kJMAiV+;=y6x1kS>z8jcLN$M?fajN$2s$GdSGY5| zI~&cfrnh{N_Rw+^y0D&lgVp(s$6`?~Q?>N4A@xo>&&SDYN%$SnYe)3B>6`!dgV9_pg z#I^`I|Av|s%y#=NPF3&eW;~)$^aF$w$~rjUIGGD^bH9j*AvbE6C)2zNhCjyUJjhW4 zjvaYswRgoFXP!vf)eb78aE;~}-5q{Ktdac;u4 z=lEOPOUC_;NVhi5yhNt%MA3+IFiE$>Wsar#bAf!oZ{LB1PWG;IiAMjG**dR?yn4G& zk#0-;rZJy#u9@#fGfA@tsqT{u;Ic zM;~mFPpK%?cwyTCiwm7^!Wv9Xl5p&(rAl=JOVFTUQ(`~Jj)5)UxJ`>b;jcks%b_y( z@oG&XB>CXr7j-v@1sQdoLqyZ`5 zOARNyqcy$0`|Eq|q{dgCN=$nRWLNQ5#XsfuJ~^XK{i#5`mKIav@vpddM1gR*byRG9 z2W%<=IC>+={8MwwwIn?nSg&pPiE9w{>eiPQp?o&A`)p@`mX1u zNp=S-=UtbyziUT_i1v*ZubhGI@p6;&-T9D8&~%^A-39slUFOEA%4qBFaVi+FrqXFT zG4jav0x_pktIwMcLq#0l*De?O-af(N{P{M?gAaDY5oaVf@7I(mthlU?x#pu4WN&ln zWg!Gf#O%jDIg38lGw`|Rtzc1Nt?rd`a9>I@|7|&dL!dSMV6^f8*eMY=g}M~0UC(+M zMf~Uo6~KQPSoP;2m%of$1yyq%s%#gNf^fjlXM#bo*ky zYq*|(X@ITxk3&mB-61N=;6B;RHuyo0Zu$hBro&Le)_??8;y5XG;oJ43RJRE*1lu@o z0ge+K139IA0By&|i>rXxvH&PriFAZI&G3FJ&~LTgnQxOCv;KPbLz$8l002vXfz$<0 z<>=SrFP0%VQ_}xB`_J(E=TUw|PsvwyiA| zx8sG*`_Gz9oJkX#LkQO{y!MvXc+I!d@dJkyz+~w7=w0>?{%41dp!}_wx!ivfeSks$ z9OcxrL-q20cXC4Pa2J2A@oVtQ8wL)YY%^eNF4euuzXP=KvY;B z;CkwB_+IDzwsX&GCSefMNxaubv@010;+BI=6EOAQ!@|Py)|mmYW78A)3@{aY;w>Q| z6yJ6`T`LffWAseu(#VSR1A7{e>iY5Y1JXnSgQzwMiD>!Cq^>-rr6JMLP1^(xIQUVP zf`N9MfS6RCiOW-~!Hsj%ik(g|P=!;DD`$xnHiD}Ix$);|&Wf%EY0vhQPs_(xg&a6J zy_?DA`w2eDRg!pa2l>W;?|>-WIP6kgWjS#ng6Bi07O=CJB&FmTy;RFRI6C63UQp+? zyGqG_xJmuln$5 zPXLVE{UDWZw~vr}q8;P${cU;T{YRg5(t}Ptk2Yl|;vo7&q7Fm-Us|KIo`b%gUG~p` z%|cTqOY&RQfXG9!9ro^`06 z(gg^dsa;17-G+;3;h5feJm`v%uDH0Pg!*+ z6%g}ef|r$+hXJ>$87v_U0hj)MqygwS8<@uZ(0dGs%hs^Vc%k9nrG!gYSbmKk0o1ac z(;R@)O~SZPHmn7U%nTKmc8&yS#Y^vB7XW1z^7WkJ9$Id8J#Uh2ssH?E23-}6NxUC+ zz6Gflr2>lI$FftesAh_Ej3=b_5?-mD19_!kA0y{1SzWhiLLf(d5x1f-T*L(c)RH>D zik!Gc^ZSxbGco2~>g$SD1qE3;SmWU;oY4*Qq4G22I<$w2wV^`6_`C4>EbC=c9_5~=Z-2<34u!rz+p*{Oe3{A#)-7C*> zOLQKm1(3J8R6SdX)2a+BOw-;aBgkNZ(yiO-6k|Ja4j#1<#zTP{SxzL=MM}ZbnRBm! zVrA8AgT{ip;<+?q4qrpV?*u8HJQjTuJxm4H*>(qVTs-ww#I^9-hWF{SK}I+}OhYKa znaNWUsg$mjGLUE&%k~iJ(X&ciq^GcslXnj3#&K8~EB-7evh&CVqJm|`2|vW*q4hW0 z&0U|a9IY`7I&|%e{KTS2T}1vzcM2%>$Yj4^L09PROHIzq;hce6KMH=c-6d)z5T*m+- zX?rHSb1|5|_EhQ@bfPu#y6@}j%iYxgw=Bn^y82E`lC)?!>yF`_WO~h3AGItP=X1kZ zMm{1P1-O$kiD<4mX4^u3{RZWV`=pJsq=4u4J0YDmS|lRkp`8Zy!rsB&Fkv4UBeIGV z!<__7hWwA^s;1a7Nflg2Jjs_Bw6`Y9ZXOKke)Y-t_dPycPnrfWkQ|!y3M2wXJTzJ# zgP(lYO#rUu{f>oTmmFOgxuPw55Wm0tL%HE}mAm$Vav0L)8pYQ(SX!OuO2dQrX(c}P z`Hyome^m>rD7FafydMz=sb3*O_x6%weH2gVuL?`4p5zUl9jtvN^H?8C{}ekbKBvOc zd$2ief(KQCGlI~e&~-hA-GJcc(A?9Ltt5X+|BLvBqK& zOy1L?uOhuZ*{_(-u0C2P;t1z=mrMGi{2;!0?96Yo0fjZGNFUZ14gB}_^|i_$kKV(c zgjAXpZ|n$T!%hUC;d|S+f^fUG#4-iuO4B%L8hTm& z_@v^^g4=~HWf`59Q$<^YwR6JsX(rbC)U5W7(_%22mdM)#>=4!~Dvb zfkg9fyO2H#nZh|^TtyyOm66EfAvNY3->`T-OkGd*l=59plg_bX{Ig~|!uMS4OBy}( z`@xqCl0WV@qvDxI5%uM%h4os=l4stldM98qw)OOc`(er0ofkI+tv`5&RUU***85b# zJ7`(Xm5>S`XsMaQZWA-JZv~JuW_8yr+3zL3)@R@(deN_`ny1b7h?)KH+pW==ZUHTC z!52|R`N`P!Ke~A)_)LCfT`AH~7}|zVC-VqG*@B)SHlsaWB-lA^fN{nVeF@n}QI!UI3sQBSl>>m<7wxK+$6`ksXil@)1jUFV?swdqr++zYHFdMdv&fN5bF60fiAn(4*3v{S{h~WbzVSGl?Rlk>`}B9- zbjRXrm=hs`9m-eDg`ShPT{lb-bx0H|F2{*y)3iOgebW5Rz#g&MG_hJfEQB!Bp2k0) zP7@JeaLTw*MfwR(IUT}W511cnFMTvWDPFk*MP1kF!P)~<>XqHSK6wX=hN`Y6JyM%F zVf+ml=mA0-Vi=;^=R&VXDmBVUN4}4WU@4d8#+{*#D@%2~(hTKdBiemvmZ1+|UmsbOj(NII; zuoX=!$zmA-PbgN8sr=i^dmE%^f{UMmh-lJ5OpOnBg_-JJOC#VUyZ!o9>s?yPa-CZH+d4q+kGpB16_%8V)x~hKxMWdw zVr-GCC<*N7Mrst$BVy`XMbPnrJP8OpC)rDq`xGvXm*(%*nj_s0*NucM=YwI~BsyCsL`yhW?h{#y zp#lh1f!6b`A!1}ep3P*1qc<<&$sIj6p1FrGeQf*=VYdY}#{``_I07#uxL#GDui|Tl zTwZJi2w5+a*V7bd14__yDa3?O`E6<6W8ev#qIkUf$7u*;s^s#Bv26+=CE403(Y;>< z4aFE@2alPjY41mA?o5qDw}?foDXN}VzE`v%iMSYer^?{3Qs|1yO^HwLr8-Q+CyzpV z^h>Q2AG7X~8-Bh<12t^; z>b3W4zL1KxAoR1Fp*$nSSaC3GJgG~4AaxK050)g*-Y8y!<)uW9kpc<;d6fW$);!N% zWZg-*C?}%k>+3t;+j9-GA-Bo#73>4;5^|xJUWOL7_psjYWe*#>WzlJd47m;2pAUq3 zRvQ!Tv4sX2@1X4rh z8R?oR)oj@jfWPhymv^1N#rP90pksf$m7pR!LW8F!zVto;IBLHKq&TG+pDkGeLc)Oq zB_yO97eD9*sg7bdxj0t$SEE|dWH~qR6e3blhm6uV%zxB!86r@+qM5Q{UoHF5jQ6lsUl=`Saaw{^A;(OlSy9_XbjmUMchOuh1dSl{#BW zHA?8D(@Dpvg3ZX?zpez_KWinp5dbth4-YpcLAfoAfsv!~iyr-80nHlisd3mE3)1=y zK#0w8Bs$bb#A81k@j$;SCCsBrYg%Xi%(^jO1BId4=B@&d`r&rIo>BivQ330(D~h$H z=XX%&iGj}k>-7~BOfKQCIQ|E}3hsVI?Vx}#`|NOURUK{#`(01ZF73=-i(^FjyqHG? z8V1+78Ih#dGY|AmhW}8>GRXm?mg%=Ff=mrQP7yeOX!g3a9(8`63}X^OjP@vlXMXX78Ao^~Y{KU@SDUQ(lefmV*~ z`w?l+ZG`$evHWS7H|%%f0D-J_DH&+8V@@%O=hIEe!eopIk1CVbEg%p0T-a#U#*qPl zG8!5{ornd}tWH3nKmKH$-pu&Nc0y*r(Q9iQSB6n_w|3@rYo6Kf+;0b>7|rl6??+C+ zb3sH!cW4bHdv3rr(C2INZSYZq1fIcwNTz>(G1e|gZRiHuK5uB3v0;gaG3WTi1?N5c z(%Z9%Q`8SWTHtuy{39$HLP6g=c5}Lxqkl-KSnn~L z0L-j4frq};@Xwz=ZvbUcM8al4Fkppf05+7(>d^Ah8c>VeXTI?obeZni%Cg1?;d=(p z!|(j^onL%&J3wTl!)51ikCypzeV&?{=8ka+jnBz(nDgnin=fPvgJ5dtbjr~1@VLqu zZ%sr9Li?L`G8}_40;;!m{nW*E;4d55`*J)5u#36?*Le}J$`U}r&=pB9ya1r^Bu44y z9e{U+0sP~D40ZXuZTQImhR+3BYEoN0DZ;!<>*d`de=cqO9YoKVV9BF7sL|=9^Qlrx zb4zCGsUz^?4-t9PFYv8R***qzn&|8|Wl+vzKff9%HNc_K;A?X>q2u1c3tiCho5bjdIqD2^E` zTIU)oTLo}THo=e)F1&zf^G!+it>Ni%2ZQk{*UtdA<+yiHBmi>4DcIrGEI;7&#Q?5U zr(Npns0Wa)V7sBcc>o6mjVDpEg?9s1S@xbyXPgS4O0a{=N&;snJ{37Yp%XDgMKFn+ zRY*v;{#amBa(pXvI|IHhczv+y$;9i9+r2){#=?NMMQ@xb7zT-;521( zOUnX~^1cBQ6))mokkzcrN*gjOOmOGo1HB1cyfNgszQuVFkZdq|r^MMVKr6$~qbJwI zCkz4FoUApU>4ycc8NulsDvzWplvo}uOhxF-WZ&mVNwXy#R0Mj-E|FPO%k&uXJkpC7AAyv^cr%XcY zgQ5G{1ilK_Ju5)gqxuIK&J3QtkV*~-_{GF?EZnfO9i2_C1;7=>_yYv_-t$SUwW4}d|*7m)SI$}Q!_2Y^_Y z2r4ag0JOSWU=$ujp;dqzs=Reo8tCAV5Ed0OdZAkuT=DpzLsMq@d^qQU%}Ab+v8w>! z6o6*tYdJecFYmL%4Ji`a6yUy@gAHo4A~Z!4i6SHuqz4QxmYJC!%8{`*R99!^ueJCg zHwjL|fE*v2JVD#g9AH(o7#_nEzeuXtrHN&qB0i(hn<-XSJN!c(Z#Zruu=c^MqM z%$s*567>no?PS+R_Qne%dS97w$FBVkn76{b6l9n?>{9){BrGQ{m(ZNwR!XDd)XR!7 zPr#?~x{cUz@INcEL8&OeG@(@UhcVU6Lw=o%3faUv&N_rjmsY8?Pq8y zxXc1-tvZmqmDghVU&+S_cd24gFbcF`q$nh!@e5^xA=|LxcRaplYE<~YSi^E$sen{MPoQj?kIX!*`-DfgONSYS5uH)Or{`^k8F;8qA{-QCV5p{Z)}l9*pzkCCOFxP%j7( zw+u64RsCNHCsH(bv?J4J#Qx1)~H|q_PF=-=tmj$ zS{na7qEkB=%ClFlt=(0pZnw+~fr{&9-3B5>Ajr(`oy8fcVn3uC;k&%uD#a5#%R?O&}fn?KG`cyvsr$nPvQW zVzui6t`<{aOA&y+=(o)fW&@31pW4D#&@~PI{<>NlEpLa3w>M}sZn3bJY!`C?ZTM(s zBVa7&4dTm0&1!2U&wUufpZQ7w|H0$+#IJW@4)9&!UKHE-ZHmFW1W}Ru14yDb&{+`h z^9}Th48+YBUZbdpav2RZJLA~g7u?_A?g>_1K|q3#ka;%L1;hqK?mPqMBK_NG?~B=s zoVthbNb>U)jKF4CXzO8{;v%1g2xo#vqcT6J9bCB+9FZ%crj;;4*xfqRQiAzgKwXjw zNjweNg%sy+&xBQ(815b^66&)#Odi^28<&T#&(xbF@)%iFdevR|`A|Dcphz{uo;5~> zKxUr~4@JX7Qy?E3t8VRvp07s+VKLn2gp&8*ASncYK4M(JS+exTd6N%%q^oZYvOIB$ ztOMzVN8H*OHeTS8l<*AN7J9Yb3*28Hzt0WL+mpy8I%qj33J(W!_KZJ`7$+?O)&U4# zf4&rU*&&Nq`kRV@j;-BZ{kpl&d9(Fa2pC1KZIzEeJ!GnW(;vyKJ)HuHomvXaO4~y| zcr8)~+lk-CHBF0jYDNloFN*20#H;97uspPy1}Wm`uFGrt%5s0Rfd`Y z+Y4+n8ckV-0AWrLa<4+0Q2Y~lLlBEcLpJ%ZLnMX$iPHj615X6@N_u~0fnLwvYBI6m z5iK7%0J~rR5NG=Pf-!;Dihy`o9%V`Gau4+iJd(f>=npXR;`4#$u7jNOD+IjG>)fTf z!4;{OHGXTg{0DdzH|kk78c`fwG&@Ymh>_iX}Xiugd)R*6vjXmVe4H_mvC|C@C^ zP5#aBF3w5WM{STQnc$Zy{N;%{XdXb5`tt(*@wGE7P}T5S@T=g6%GAnWyxWB?AF!+ws4Kzgop;Ik`{;mIUWvpm@3_XLIgZn>>m@r`#8LtBD zoZ{W(y+r@VTZ7+ZqWFo*H)!nw>o4dtrVJ9ai-!7^}7jJxh!)YJKuC{9T zIzCdaVtRjoK&@|?Uw2GigFz#CDh&UPsCb=?O;#gJ^BL1*9H!TVS*kx@z^){a2Cwsi zwB!;jSQxubx3uBJB7Ws(0T**oDuR5bu=rC7WXX1T;gd+Mr8-F8zd2ifWVAx8s0Y+> zb9Wvl0n}kiHSKAQf|s1fc>?Z;Y#kiiAb_Dv_^;HA3A2RSh|z|e$XA5UML42R;2|Q!5S{9(zZu1-2PA|BOvmB>|)di zV02SV!l4j|_=);0MZKSJwkZ{JYywtgC@}6z07}k?B!lK4!rOqs4)ET^_3FKy2Jco8 zm#>*fM?9UQm58QDF9gv`%<=s1S7#gmB|3L2iU+~NNuXd~$rI%Dy8 zIFH`B4NG5J0p6NHQ&zmEOJ!i9_P9SU^&fW*-bv8^;Cd%TDQ3ZaU*k$Uvz#C3$DR1}f6pv8u;CQl8ego-g9EG%f2favzVJM(^Bg{@p(Sthe+3%v zF{)L1#*g5MP`d|XIwJIfkKp1mmyX&s#0eff^>8tMy8P^H!l6(dKnV{QC4no% z^KLq+XIa3@fOW)6Tm28mED)fd*Omeksg?65b~g>v(qurT^n6bs_KyWYH&Fs>kQboM z4NnnwZou@r20TLusWU+8`ZwO8D~=Vdd+m6kgL_5e!H5UzF-i;wO9b6#8O>!u&R{}7 zrLp9D(zcDBblWMUuKC{F*T|`u#Mc!<-KcJTtLj!rNSL-%K<9K-iZ!RH-rb&K-6f)W zuTFbr_jgTqOAYUeIgDrt*>q*drzFJ9gIOn(R8*`OW+bR^9xY;-?*dX6uZ@g7p5M0! zc2?D>YZwZbq|afVT!a5b&9UcMXmqqtizj5aN4Rgf0pmYImL@9phj&fq8wgbcfBldu z;PNvmyXs&nLi~?HHsS5Rf3a%MuZt3}T0ogTOKb;xDv%lZX|{8CFeq|EDQID+hk~-i zS@YAf)nWJKqzS+gIRL~Fac}gBw#;=;0V|_Q5GRkt!>48qd#{WhzYfb+*OKW)<3 zq0vW>yoe#++gp7#`WlQg8}sn#?NwGze5duvhmv9^z5{mTvymxQneX;0CaWgOdS^eW z5c!P(H=Yy;*H0MkeIji&D0YqP{IbrX;%Nc>Bo$NC9ytPi+CYZ={cb_Z>5KR7xapvn z)NSzfvNQTW;3P`rk3+Rv{_{eBQ&DJA^xN@>7&RN3JQ4gjGW!*wthT{AHi5G%ZX9;* zVY*(X34l(zO1lNXF7-zL3oGh1(2YWyf~k%eAyjcM2Rl|5VaJQNW|~?SV3+F>A@}8a zc}e4fUerzoE6o8)-7X-cbb+ebdBqJtQHx8d0g1qxq60LX7eK8Z3x*di?_rw9Ctwz# zbbhG9IDneEBk5-`SdBH1Uk%iHIBS{#=}s(0BIHfOX9{3ny&p>g5x|03KR+}?r~&{~ zi9!XN)_ot%Fokn_H1nw66TpYfeDtq66N&>n74>h1bxU%xfC?!`Ucw?*pBEzn#8{=A zPGERlZ#cARI7NYN0zUwX;sJov4Z5y2AhW4qvOD0nXfX8$DnO(r&N0#k)Jr@YPhVjk z5?yXA83V8q*?E*vD|X`kv~aacU=p?OO!;xevtp_9jcRI(usf)GPmgdKuYx`eazPt) zg9@(!M?>wFb$l?+bb?NKD}$Wn>J|DGwub107!w=w*esx%*QkS6cGcgEo%x|pu+x+( z?rh#f93Knts=ds96h`p{A14oF8#J)+V*_-buDX4;Zp{gRb?p;Nn=dz9Zu%f6QDCvJ z3n;hwgG_XxxSi=r@`srRI}8{_SwiD`tyDQPAU0wPEkpq4sBaUZP{LpUN~rgl%N}I^ zOFhTxT(|R*2P2?+Csg1B)IOP|&0O7p8gnwzkQ1Fg<++w$xd1BroY_=|Oq8&;{2yK( za;c&wVi+5s49%pwK8cGZ8O8G5IAwnIK#&=eDS`*u`sDq;Q!C zVA0#&(`WT4;c|ex7#m$|RL*`8VXb4LR7-%#G(Wh$+sjKpL_ENUy&7F2pi>%@Os992 z?xEEBwd2BwIkhK*wMRZWgG7dL>*~uSjUHP?1mP2HKzrgyPH5J80A_BV15j*tG08#$ zSQ=O#Z_l|MP8oG3ioWwVYR{t;DROzG;NJsf_@0}6Ri7k*%OGz5_X@_vWVZ>AxdZH4 zjM#Cvw{}adlaehVh*h_d^(R&&t#=*lp%37L-88Ey^H<**$$zJpXL!#gYFdBTg%>!6cK?)~CCtjPT z7}4{LGjRVKDljvV7p8Ey4j?`#H&KW5R^1i5i)2CJaAJWh{rtCl-G6AkV%`$K%}HS4 zlLY#S2ptAEO&?g|gA?HE!il4-OfSeXu}CK9gqXe!k_|O_aNp+P^Xr1u*+JJ|W;c~o zi0Nnq7olq1E@lr{Xrpt|tUWddqwr~F``3=5&Bj^+8Tmhj+96mH#UG6+G*$s|{(vsF zd7NNv!kzC=9DzR}*~|`Qgrc17HvtEO8a?}qU9YndN2I-g`J=&XJT7Q}Vl^T+CJO)^ z7=}&)d4Fp&FEohObEq7MWF_5Kzbn=#_eimFxp)t&_1ac)&Y&p<%JoCd_!J zX#XR|Pt=v7>KcOq=~1eO$Gc>sSLku9&Sb&Q{^kf~EUMR__Jlfc-w!`SKyNqr%(L!IUMc=Y=lf9O%yCv~H7OYDj zAF5;(6CFBp+dlA_AqgE3&b6OxRDHJ`#?wr>B4Jr}yjpe}VcZ8M?*@Yi#&p3Ur3Poa zf=}}Lw`FVTtnqf9DzSjfn{>oCXHu$Om-{UlbRWwBE+f4L=$rd^jp7*8RPQ1C8V|t~ z=1z>jWRzSXLD!`(sZ!IfYFLtIQRAB{jH4Zi|y&-Ny_TKN=ePcX}&b{B&D3C z3Fq9CvssV2)I^(m(13VTI16IOZBRhf<4=$LMI}fe(0>Wc>h?9cd+FsZ*Oe6^8!PdB zU(q^A0S&5T5t8|i0(?EsN$3PnZVfqan}Q^H%&U~+Ra!tu<%KCdbQ`yr%We9%kl67 zVHqwip>Ot|w-r8tbv+_UMEuclS6hLlMYffajTnyvc|54wQ%YNJJ9`Rfxj5a}n8~`v zb3VYi1!+U~ar)Oo#;f0EgePlAHh~(2l^^rm(ZziQwvzM<>qhePy)6~-*t*iExdt|Kp=U?&!+=p8N%csyt*uYIyG zoWpZ)3@7x!R@Mn?vb zK2u_iy-RMSfCJM5Q$$YjZmCejKj6tN2)FX7PV{@0&ndQEU%y_O5gN5&8|CYRX0<;K5F*L+S&HLKl18%bMhfYvUp^)q=hSf>*9K* z_9M5mdIRB?@1FH`-DOZuE5{pJ8D$PME=4Qxr)A4el&M)Qt7XMa{N!KGp)e%0Cu8_t>_-H@n%hwglQ4sp4pNU@Fks5hN_$4C{39UXg%RwNSuk|ZS)?e5G zH8NkvRAWE@FuZH1+}`Ydup?xD1&Y6(sjzsdVxob4^>V{|atnQfXVT|w!?ViqH1?Y` zKQDNtHa(oDU#$B&45h!`=pDDcPm^ghUG-=y`oUHRQ2_mu+5rP&E8`}CQQf<9qz(yB z+-F416x4HF&$L&jNVk~tWz#aEs->3wH8eGedcIEAPda2IoqshoGQyd?s7seWh%ivZ zxm-z|*nU-c8yWX8&^}gB{-mXCUv~PeWmcP^Avd8N(DL-0f23GC8NZ-`4e~#s1YB$W zBDj3h^99>i<-JWk-Dk8$J0$_pB7V*4(sfvOr0k6DAEqM1&>ZNAud~v>b^I@eJmd>U z2>Y8KyfshD_^QUBpF{fWkx}E!Me^_#s*Mx7k_({&rx5x4uTjx@rP zQ*TVK{VELDTQVec<@1>P3h}iqb7^(QN>28K7wBhbR*!#;XHp5n>~4e9tA(skQThDQ z;5pIU!1%S6xu<#JRW3NXJ+&i8sT|Xu@M}7pePflKFN)a?$lq|?*?1_Oa_1;TlzP{a zR$+F={z%$LAx}tFgEr@#UUTl9Fst_shA=_i#HWx#_V77;zTGGJEjkN73v3aPpd1sP zrZhii9wS#aN|>Zh@sSa~DE#Yg>+m8qM|v$Y;uHJFAqiE}X5C+LeU5d}`iwpfRta~H z;U1Vl(dJr64j6y2)#L|Zn4d(3Cf7`2rou9hXj-Zt)0@4m-rB-2e!uVW`ep$*m~9|* zHP#X_X1@4U9nD5KYNM_6m;gZo92h2V9$e%N4d!Ee?Aywqu z31XPLt8$)cq~GjgzvgTQc4+QhnAFS<0eVy!oxMJ`ENkA-yT2r1B_yJ*My!S3I?>eL z+N|Mi`@RopD^|A!TA;VL+ASrb(nupaB-hw343EZWnIRa_)nyG^9y_~7uKWJVo;BKT zyd*s^iLaStQOPNo6M=2Zi+AuM^m+|! zeieJnSdbKQV^0m}OX~7QFdmy>X&jG^pH|X{&;72d5?Pk>eLK=omBb1;f|?Ua8%fll zrrCjsF1`-TUiI%W85gFIF%e7`VxD6`wm*p39Jwwxkev6DyHlVKy(vd}IPerQT>D!6 z_5idb&*z>UwM&J4$LG7nR+gt_94CTJF3IFOG=C-?-?${ijxac*jA!u*|Fx?sUX6vfRUt7V4LlGP=ftOy34oRfP4 z^cpgvo+%;et6LW9d$tiin-;)>@I6If^pd1$3n$I`0h(O8x5nyo|QknB0)5q zkF;dK*Z*~oBNVT=!|g`}35_NadHO9S9IJA>ww#rL-lo}S!M53b59RhoDB!Rwp$iiV1* z*^}}6^MBuvPEe1D>I{#34vmU58`vSLo+xZLz`s{C$Tri@%S36o*`NO6y?;+TINhl) z?7!FSQq!F>+V}s?Dfr~06@z_i@RID*ApHt)#-mi5xla`KV$0?R&Mp<^+)yWAHtDbS=IPYSM9by#8kR6$({zb* zZeAVMd3Dm}wpY_Y(9Y9<0ZpCIzx(k7a+Zqjl=`(4k26mo@mzY4dumzS9N!B%TQlAM zdrP_n_M;TEq^ECU1@#oE2QV;e#fxwAHAi((aWlrlcl}Pkh}-3b4o)l&gD|C_HF!IZ zf@OLHMMuvnAI_?jt&t{6cfq_SQ`X`2MllS8vHb~kwy{GoGvUz8d4Vb)y<~;$% znFh|kUraqb`5TCeH%V;aPaxBA^7C(xqu4!e{j&>w(-e1%`=%$}vi`GETD*aA~eNcv95Kkz5>sSGZN5(M*Kar|LQV?i6iGSDp<3Q))dFfUpiCe)ATm>&HXk0 z+F?u}>5o;poKs(WC^Mg<^B~#-Az@zAP0pActoE3;!f8_<9;)s~s2s3mOx@U~co-8? z_zTu0asG4%ECTm-=kXG9O~T))u|PvNGD54Qb|lN(C{U+QTV=88_ree1 z)QY$`4xsRwGC4VE22%2!Ky*+R1WCunBCdA~5)ilB3ZoL+WQ6oYDMnmg zl%7;%44Q~{rx4Tl&jg8?rrn}qHmIGYw}ksn{d$7(4zX(g$in{T)i45|0LFx?9|4b{HI}LV}zjuzm z{zB`g-MSF{I_2F|lw_Zc*|4y`U8s%C%x`D^RJ@`Wbr4OB8iL2aiz$ZX*t}H=D6-mH z;b6#pb~%_vOdc_3#0!GIK*i^W_Wdm&{(I*W)d%2vdsCkZN(n5IfP&YMx3;%lHBf)T z9{F;yVdnuzuPq1uKoeV7&!z6tmocD@%%63eY@$H{VI# zd=IM7bpn!n1^-+^YDiv7bnL}5qhJeM+zPEy3d3Ieu#&LOq5#2k?vBHIpB6A z_5YsXU!3l^A;9-~JdKY>+m(RE)jR~OBQ)?CVx6N*`^s!01Awx`A_;h3>T0$Ja`cJV zB{1%#jFMF!oyAYEv9rTKo;xN?Ah3_{Ti~ComArN2r9-|@(znfD*8Dto8wqc5J%&g+b;H~58_&@f+Qfyd8P`)xQzMn`)Y zQc8yi%A=hJdjopnD5F&5LH;r!&QPb6l0~Uq+qr6Qdmir@a$Y;BPdN4QagjX1;M4>^ zxE;B;rbE)T2M^LowOiwnd-u6dEH^v`;&Xdh%B$anHrKm!2Z6Y~joirNa=d4kc1RFA z>bcXw_nl6V^*$|IVfn_MQ+ znkAv*F@L^yX~(-fE9LfwWFVr|;?c+?xA=}U`G?#QdB!dE=wBsVh4vc}F_B7|B>`k#=g#o~&+6(fKKQ>wKLwq~Cx;7fmQM382 z&y3BPw2#%37S~u-*bncBV&_;p*l0ylUX)JA-Z0%Px)T;d*i}Rt)}HefV#L6Sy_dJH z$T;%BJ#68XuX99@i9H0@P#dQ$mF2n|CJD`)4vJk8u@VeSm&*2xP)lno8YEVXfN%kf zMP(~(em(zpF&jNV-#JkNs>8-I{+kyn7e4{tsj*Ry|3X(zh)3JiCLq>7X0?*z(Uz(@ zViovjQh9Y4fwRoYJidl}#PgJOr$6b=ZHc=s zkA(@;Sb{8TZxki6m4eW1A3VxN3o6%Vy@=tuy#PFfm4f4!I{;4?;pOOG%z&8 z`_bxK2|fbEFIkXvU?X(;@L4xWmCkJcE=eHwE?*$gK2q1EqG`6S3N;y0A?7@J*?hD2 zHmX*CMawq7f&MXz-SsYtxCrP4skf_R6CE(#_;s$(n3#d|+FJehXU|0+`f_zB8QHG7 z%an~G4UgaY9R4g4ofE})yV+o_wE5VHE#Zq2_eQ4;%{Mjtch>&*q_5JcO9SU>D{Y}m zM>PZ1)BKGYS^e`~Uc?B9AC!8nK|5wWifIm2Y-;_AKb$8zc z4Kk}3cm2aHM$eC+f+O5Axeh<7V{ob4?c~I0ceP-Ewtb` z+`=gY8BKd|Dwq23V&f474VuGuB^eI4M6e0E>Pba+2OWkXQ5>K_2rkYYa=7Iy9jkoK zi5re&Tl}9xlcvc48eUb#M_xPJ@__1rcvezG{<#nL3lKBX z-*!Hm)pmqn7M10OyU$WVu(1O0w+6I?Qz}dd)uTa-3yIc&rJ0$TmwU*0Or)t~xD)W3 ze@O7(8VhpX71MXJ@}V91#BluIscg+ZKK3VEvX!3R%th+jnziL0w zADn)8%%(O#c2}UF^bS6dL;$D%i+&IaEp+J0YMV%c6_sB3rPMXmmI7ngobdyFxyJpt z-B%ht4$iDfkZ6ko(J^Ph(e^~NSQGWMNIf(ujlV8(e@LHWo*u6Lyc2xjHSab+iLuL@ z%6ex@ye&n%(5F>x(<#@m&RXgr=-ZV6=vP!;#9W|IeQWL}unnR>4T$spK%>-xHt_pw z_8_14P-)Yj#d?y9B1nHBq<9az@%>@uQvjt|xXlwKEf;`5Dq2_N&li{KNiLI0O_`_X zCvR(MxqS))!h(Y%`+MHFAKEu>mVg(hYE%35rBCGZSMKtIk57&kMfle;lS#O6ppO%x zOdRsipgFhW!RgJ+N7lqG1jOm0Sk?PGRIs6{QtO}o!5V73(Mqc~yV{Y|jM8=2yOhZ8 zF5D{{UGOVlSkWHf2{Y?L>ab4v{O~^%7orchwPLoh4eX&rJ-s=?9gWDuq3H1wBsb8Fla`(_w&lQ zJj#CS9%0?Rd+LhcbLH)s3>Rn^1r5W4A@It%s0ZEQ5Nxk+&(uE#^)b-G;p+T}?H43R zSpi~(3aLe&-_~-rAFi#g1K8Ci(faQ6h6MWMZva?a7?JSfE=5pV+8XA7_BN!B_%FlGx7n#AVj_11Pu|@3llh-T%+s0yt{kL*h@kwamD<1!~;DZF-rKbI&y} z9_Ja-F6}*RQF*&dGEUkCqLo2eR$g8RqUnqNGpb4N#)P#!mTw4ck=EB<-QX|fQ|#34 zx>OIUuPRQxei+2ER9eW!703h1((Qr@6=*ggP18Y4SQVb<4{OrSJh=$L=*z_y2FnU` zf%vguEX3vz#z*T3j-!HUa@}N?BaB*pw5};+`^xU)ehfpyeHZUO-XA<0sXcSgIob~& ztw@BzdZ$=PO}E(>g8WlUcX<}7qakiYT_Ngj2VDNidH=@gCF0buxI;sh6je4zROknR z@vs_K;S{x{aj~plG~q*ku$}-lmYR=S$5mS-pBSroh9mx#LKENF%%IRz!?KxSjL_$0EdwL@-Wn)9pdgpfnlQ++I(J7O*2G zw997!%sw-` z_lBOU+R+4J?JEH&X%vnmB{TW~@(bRwoPru^q;F^#6swu~)MF{ArQ{$y>Xt=?(=f+u zz9^j{umc#e+_m7_B5d~HTEt*#Z2Q37ujdB`K%^t1_D*u;5aZ>ul_hUymXnII$IQ&k zP$UIlY*hBW8$OYSV1VvUUi1pByqP|=H2;i5=KAa@9NAt})i$}LraK$P#A`d31{gF$ ztwf+U?wzs>Y}lTZ>o6{RFC^Oo-)H-k-jkjVoRJS^JIrF!ZN8Xtqqg)XokMtK;OBYE_l>qVuHi;>6G!i(Z@CC z1LA^qrHvuD;#60&a0ycU~un3;Ll^4jWoq1fbTwS5sQ3kYl)uQWSO8!&iL5u^vz>0vZb*~mH zR3*AfDE5@9a7*JexRh<8BehC?7949KNcA7D?Vy#YlmE2JHz*;YjO(m)LR)7?m0LHd zU~lxVF18!O5t6rWH)nGsnFw)K{90P(GSRJ?rk5x-QJwqY>#&h;p*7tu%~&UU`M8!L zN4IR@8`dPxf=rm<)w;s;Dy8?68JY6 zFXxl`?rm7|ErlDIK{Sq7g_W;}iO9hvYY#2l1dcE*G3UQr+D>p?vb4Wif6R{Oa0 z;>HA2uDH#e@r_g z*>{u>Ad_TM#lqV0#y`L-c@Wc}!0DXRTlwPK;cN7&$#xMeG{mQPS#h<)lcr_UQo}jMhVQMR6;VQ`N1F)W=50m!o`57 zuL$|BRd!y}K%?hh`P?HW&Fa6R`5yVsPv6L!ean4#prEJ!TAe%LmJa2Twv&XNCGGxj z%S*zVhiBT4UfnbAnnih$zx`L?MLTVCMA^*iD&=VEC6PR*<&|~<8M3?7Z6vhg{U5`D z6av|AtD`WRsT>`Tc{otPLWove6p=^<0NPg;l!O3IN3&dCak1-F&iOfOoF=+wi|VQ{ zB?1RKnC3~|gUb?hCA&XM3Lh(P;V1RB)l4e$ZjK&<4P*S@|Ndlst%XKF+|itGd#v$d z`RVJS90>W6i|5aOb8hG8< z$C-!y<_kBG`$QzFaSS7&mlh*?tysAtCEgR7_qRj-U%Q$}Hl*LbX;MjF|LcR=SsLG# z?3(LZBsuhA_HK*&YWh!i4~eX{z22o&6T&pwoRIj7zcMO6G0EA=R^PW@66x9xY?R^b z4jLeM=7A;0C4g4qF%^sZK)2IX%@i@a^8x)H*qOa`{@%BBbTEJd7-kH2%~A>2?gMt& zsXk7ZK?-Uy2ch+W>w{)m*&m<>7YoXrLEZC<+RwmN%2t&$OL$A0OiOcHIsU3|!eqdB zdR_MZa9oI&F#b{0_K?Ff{4t%vTzBgVK4w3$d>jI5CemlIzR^| zTaLJnz_Ac+3bg$I*$-|}4ahZEB~aq681LH1gaOI`<|X$~%IoddQ9Fj&I!sEF$k9EL z_Q(jx1~&&9)&bxw2Jr{ML=)6=5P7L_PT5D}tjd9w5B4$H97%2-#VI;;(k@n6PXQL8 z7lE8tSI5TDh`$O9PHvO^Y9LQIw*%a}gqPQuOOI00^nsE#b|Cl7^^Y{g7_gMRaU4o9 zV}RC(ksJ1DjPC)G?O8B#%}lSKQcYF6pZ4ujEhc^oTaEzHY(jmgKS2Wx=)*4MASJLP z1qtYE=!1F!)LVw@L0+>zU_3J* zjM$GKFHj4nDXLWz2%k4K6B%iC8Imh3cJn`8Rx__~ePzCX4=4^wE+O~U;Jg4! zgFx_Qz!R+?2VGhVl@M#n}$% zjU2Fz$$kJETifmIQQ?EzIE0EEiw>WEtTh^QrBk*q=H$Z*SHxQwPfhd};mt6QcD>|Q zM_;t^I(uu@5G<4xU#eC)-Lqrk^X zpslYv9#Zi6^O0sUUM#%xUo0haZfpo3snnj0sEkW?f3JU(ti)9ZN}u%R8RuWi;EVgQ z^f}?w*x>UND!9MV%j->6CnXPj1Hv1_hDSrSw$>1$&Nf_rv(6D5z01 zPpjG5&|#P^mg6Gd(;?9m5@Q7?*=%FK|0B{(KD_jpQQ<{yFR>2`VeS^!EayG;L=>y$ ze|SC4_POZu5{|9?aBLj;939dCFW=cxFAnB|Uqu*PQ2lcxa-ja(PT2>`HDFaQmOTf4 z{oVB&R5PLtnyfjod1E_)otJijm1gy+f`aM2$!hk=0w}uq-)7o-jUjKu(C!BPPT3xm zF%X5^CyjW4`kXbwyJWut<7JU2dKLy@1G+rV(%9&ru6hK$RZ6zNcjXduBDL!>iO6_4)Ng z)bT&ra)_X(2M=x5tEkU)bpb=sLmO-OlUSzuPkZiPj=-aWADdT;;s&z5_3OesE{LkM z)l|CJm#)zF7HII^?kmnE;2L=smk{(yLE0z%8B1qRxc0W}Iv1@LkRTiLJ$E$u0Q+XfmRqx%kPo zIGV=ETYXa0{72#=NzSM^Cd zSCHgL@JpFTOff3-w)8$4RMURo467M2dr?L?heMCZ*_qzj4aL}a#7)XA+OM=?%^l`X z+4DCj{PBKXCA2(Y-F<@(5yv;O|EDzEl3HRkhmA$73urUsPZu_^Zg*S5Sb$7)3oxW@S5{WMzMZto z^Qks)RYZ~qa^8H<-w?)IVj3F0@P5HV;Rp3Q;uX{8MkFE3Y{gFzO=B%8{!teGnHkNm*Xm?La*^O9f+*W*>WRw~`|D!HT@+}C2 zxkx`9$k#a0Q;I9u1$omyDl~&NPg5o82SAAs-!>JJ6EDd7WaOYqy@AVdI0<#thsV&l zB(FNOhK!~Tkn?9iVWk}z%dxZY-7qFA^N3r1Bz53Hy~B6~RLlNovr;TK1T%R*>Lu3x zUi7R2(b&XtlIvOb0LR%wXZ?42b-s2b^o-OxDP6m@#uR&9!7R}bF1Fz$uuC*+>8~Hg zTzqHx5+@Er>L5hWt|v}PH&}Na*}1=UpCh;ZLK07!iD2mYx=(4Dva{NZP@|G6r4R8e z%Bl7F&*yr0m_MAW7Hu!B6s=0}V-F2d{%YAZ{4R3!&-<_Q!N zhX5A<^Owo@U>!*hBeeafsOm0CD7TH)=(&x4JwYkq-~TAmxogC{MR349LASKZE8EOv zTcKqT(>cz(VAIdb1+6tXkEH-Ml3Db@V+ZUp-4uVt&8X`w&Kz#*0g*enaZazhH2*wyNsxUAy~-jFbo}G66Ca6cnoHm(OxgP%xKJP|&1^uOJe}TDg8GDCBe# zK|vW&LBV%2U@Jota|0--FF&GV5M<={aKF8{P7pF&61YSz!+b$X_hTeB_kHgxqlf5Q zqN1YFUY$k`)9+p44N!qrMR^zKCscleS^>yA&})CykMaS|ai!^IJ2{?rXP`cJx&CDk z`rGHP$Z#fQL{NK=^tyGac$BP+Dc<}k*++6eMKsK&#nsiNWoqa54iMvq49s+*)NJw*~Ok3^O6%U%W5Hu&SX9Nv+OuG^Of9w#>^+Z|#>(;& zec~|jkaIP3@MUHdKj$Cr@fTguMgH{8JcJ)34c2w__2c^<=+A~W;L4nUv{H;sB&9j~up zXuj_du)SH*;G(=3bP)1js&#oML=$|KNnw-G=Z1njhm8 zIsex$sN-I*$!vRZGX##q(6QnC1Z`wse)-*oA=3Iz^Bc%;D8Ntg{~VRw#h!%M^naE1 zF#3)ex!JF!4KWUpu0yR1(;Qx2mw*USq(fYnF$sF7v+I++{&r_r~DkMNHakDM@GX(HBC^yH_Ag-Fr96u#oV{2fLaFk``A zs2RxuzbAf2_@4ah;g{oktiJD?qJh)~;jG~VqC29}UsAvJGQ}{x#;=hGm#CH~97K(u zsbE(XR82T!nsb{&p4+IH`KsNwwi&#+3zn!?1W$o;H;?;&4n%HQYzl5oY_au|MzzxO zW_*+VAa^ROLx)XwsK{RW;j?hqRi7PGP*X@#sGAp8(RU?grLTY-Knx9u(xEbuyqrvh za-dSbVu2DU^SzQVfRN@>)I<~;9jSav=A)31xL;0(>|EM-5m<05v%tR~msX@&p<3vw zW*?6wFd$uFM^^}fDlqu1KQyP+4f{DKwuJQ5I z;RMml`1JV%mhsUzsPsxqU3Ed8Q^>XPTJ=blxFVzxP1>k&m?Ievn-ckFgm8Y=rA)US zi~Wvn#brl7o$_{Cm;+g{#J^p4WD-y-|@-6JC?NU4NbL-{;SX z>Wa!sfKS-d1s={HEzc${*dE@@uGqfggySr7 z+;zC!-`xb*nL7~KGg*sS7uYn2D`xr2vdIBCGLxE$s^3`F1wTm6Qq`X5U)$4JM#jX~UY+;JpVB+}eh+;b@p+^G{1CNx!oRWn-C zS^}k!TBLi7m(iC}R=%~Vj`@zQq2AI_($OPtw7IoQtRhe1Qhl_&v~zj;c}G19Uo`!3 zeY%Xl2E((%7rov^djCooP6?g|l?eswl|5W%J9PVkH>uxS|5L$v0e%35o%-&^hmEq} zGHtwcJU@m4txNhvs-_Q3Y~DoWT8h=D1@2`%M7bW#co<^TD*qZmD4q9qnl=jOByUrD^0N0U{h-&63HDw z7omN&+eEvZi2V{Z9~GLPo{u1xJFYjbHeSAmw3mB}{HWkDf_#KiPxlIL+Z)S^y^~U3 zq&x0|Odao=evO2=lx%=%;QeQ+4ARd&bH{U2bE)7A+mN09opalV^TBi0P41DKp_gnZ z)i&B)#z_VZdG@-9nhHytDq0&w$8Zl>o3T^V)+to8Q!}}l$C_yui@W)o1HEZ`Y%`ov zMw0vXlYktocr4w%rK^$yGtbY@y$|J{K1=?Zge}n(;-yilv5HZWmR~KJ&LfAUqj@DQ z#O5bk=WH%g7wJWq1A1os@00;`xesAn%1oi}H^0jGC2#b~#=% zo9juX``CkvXZrJaowmE@+;b_yEy6FuK2}KYCXXw7@di-1M+^H+xa*f_rtTjo4(p zmvPc{(Ok7`8@tGu+;RxMo5b0Vt|<&rR(~M6mwMhlUFh@Zd7d_tnwc-<)INEu!ft)- z-}AF1ahVOcthd18~sz(b^h9? zE8COUIN%61nCfF>w6X^@fQ z9=@01%?m!v%MYWQBYYdURby(XiG$=)YADp?%EF>SQ>c#jFBII+=0?=qwyr0GAv_HH zxKN1XMS|YmT}FrPyao=QFC{0QrXP~+sgAAgwKwr$WA=IZFCdsz$v{QaP*M_#7V?Y; z1sz}l1qXS8hI|PiUnnTp2!AL9$S)S;`#BBfzi(kK(_sJm3{Co5kzZaA(s3v#d3~^f zfu*gnmE9;x_70?~X%ht%I~7R@kiL}#qwZHLJp)E33+vxSptzhskVgvxJKc9q7Uq_= zASZ6}e`$aq&%eb$@^}AIu`}Z)SCN!?CujvWc*n~4f$;-55AwTr@3_EU4MB3Bh5u6= z@{gO`*v`%x1Oz%dIx;$bVzdGq0Y7qZZ~#9r0hyQ>AQ}v|&X#t%P7Ic|6#uT|zx8}J zu+;~fSlgLcS-$&Sudbezy&X3>`R|7Q`uw|}22Lh_w`6JipJ71;2>ks9_>u7g@UOZd zMY(=UK{6&z2Ii`tO)MbhfwaNH#LmX`Fa7`P&EGBlqom5;CD~Y5|5@@MZ~nKWqOAc~ z(8>bRq#e)Sp7~GVf4=-rK`!9$k^jRI|2Ff#q!2svAaeo#@)-{@)G+on6citn=x2Tf zC+Ndu1UKw1ydG_rlPces(eUMLIsox!ILs(L{`O@QR%}iOXn2!*W$dn302K@&zJzx| zE+`mkh`yI8FAqZoAwyeg5hxhvT0F5!$;mYFC`F_K| zfDzzBMDzlSwl!-^tI;z2E&I0u`8(w1Ma17a|Nj5GKpN4TQwec#x}K@n0+heSzv~H< zUnvQ^0D+>g?O|RseXkl!uurpY37At|)rb zRwa&huSCnaAp=N+H4-apDA z?oJoeO_eIoP%0u>S~K`DA8tf6^^-@22|oeq_)9B#)wcGI2?e~WIm3)pj+p2=r|?~^ zseeuI4jR^2EN#Q`eiLR_sE6 zeZv>H#U@x9!$)NB&1sHrv9|pFvUcC6IuN`~E&#|mL|NUDCp9&EGtuIhz%dBqrTBs7 z&f^W1It+s{cMe3t!Q&=YuqT+lb@K=AuBFUuOYCm zKGN|>D#xsBEzqk0p@u|q`Qy@{;(5VX%%V?0d}ulBt2#@D<0AG~%&p;%iD+au-^4&F z7R?2SF;X&tXiEdJ%hTa z{)VZ7gC%7pVRQkyO9)pEzw~3O^pvq5Z7dpm7;hi(pP1VM%1*D@N7X#3gYJ%;`ayN$ zNwe{;a|E_^C$|a(Ba4fZEI8{1nZ%2?4U0`M3UhTM+=VPVmnng*re?Oq$PVUiz~Cb< zR~6e1_kff4v+aKU;Zge!8vt95zo!km&~KyXifw+8L8Nfy845(Cb9BBFOBdy-6QdF9 z&Fl_CS7p1@=VtDWqNL+OO61Kgqw-O8JX1cajFgr;lu#m95|0c0A$H_JS7$Dd%V*g%~QA3UFuK1Cbc%t5Aaqp8@$=X`IU^I(K#huHpQ9@o_I5q ztw?f;+qinUeNn%!_GzShJe=bxfBR|zz`2D@9M3sQ#O5-o9OYv7CRxP^L2>_qz)!0^ z&;pv!T)M;~G-75%?#yh3J(LOSI>O4}7z+DWpA<;AoHTLKggjn|?l2|Qoo$`+26Mg)Z_6+{ zzJ+d)vF-)U!w!c{IArO>&#{;;f7|{<-mrt`d~Nuv@FR)X`~#ulo?Y!-3;*nxbiizr zgL}sN71Cs-n!i?TzC9#t)`J)xUgW&F7}N69^0N)~t)|cqMaMGRmGV;K?an?XFPBn9 zU+8nw;utp_yWZKNa?OHWzmB=#AWF#Jh z4exiydRQ3cZ1?%Pc_DB;M(RB&i9KKP$kAQAn?PoCHqqD<0Xj3ya^W&XmJd^E(~I={ zi>$J}q-vkdVaypHnRv6+XZLKP6W3aJxBn~aZ9AFO$Jq#UGluuk(c7?}O1Etp_6B3%u`#Cl-OzT%oPVr*2wEsY*~(2Z zGig8$K3CQ2F7zUPNhgz_y>jrAiZ^;{pAC6Iq^`DsBP9OC1T8GT#c}0}*SV zfo#q5OE`FWLp$b!v!f(aX}Xw`mgK5@tD8iZ(4F^;EVPUq)-jJUf@Nn&AGY3hG;hx2 zl@5307biUS6Aw=cnwfVy-fJ0d_b4|hwLLnPIC8Rd*sLdV?oF;N%C1YzwbUjgaDEM$ zPnYqV1*PKF#$UUSDlO^9y;)WMAl(sv;%CHXFvSu0aPLqs>F_!`buqmz{ipQfy+C@# zAu;yNgFX<*LH*Z`j2-%I0O!8x@O3|rW6>xzFI$fWoo7lM(!gUM?@E?N4cfL5mHgv4 zb(Gv27{?%(K2hqM%_lt+E!E!$@r^%jM47{VKQOX!rthzR>*M0o3E z{zJyF&i)i>73N0EB*&A{yZMER7=MemIV9{>?4+=f- z1aEORyzQTTK$)S4^-e^U?Jsncv1cJz)ozXseA5xR8CK+mDK7W%Ql2?+_a-Y>-YGF{lC<>m!lEXQj}Dcu>Q%+0K1-I>65IGgw? zsx+2<2T@{{Noe-o50Y=y^Vftol6_J5sXW83w2sY@SRl=QGcq&W1wr#y1c7oAyKkGEc$WWl<~!I-PvG5i=^9@!(7w% z{gFEVnK;SE6tIgn9mT(Jt@A*}!L$jvUsq_JIxFVfNI0NN zZrJkKyP!PP*?1=4R)K`lB2F{x82ipT7a@?iC<~*^`)dklW$ZN6TxdrDaO+1?i&dw^ zm*z{niB3g4v-<*4+_0bC*bW7Jw{U+mspl)Vy_Sd;RO}gfFh`v0oZfp^Bw;4H^uQ@} z3ima&VTr~z)dY^RZcoQu&0^$8tw6(1fP=_>AY>uyv9j>WRWn(7>2kCbXTuW|W=!+fO!g&4UzVYDp#t#52p&XEz<2CEcB>+vXn#d^t$slGM#^H42t* z6z5NT1+*hhLhEJbFk$|?ZHh^@Z85Tim_{{BY~p^qsw($JQKHEoegi{hG&5u!)zs@; z=gGH*QsP*xHU&?Y>3iiQR{sdz^Nj=hhdN%KJbtbN)}kfT z2)Ji>l;3&>?X{8x(w1o1=>=Oqz82GXs7 zJ++H5o337X=IL+ZdTeEakM(1m2}8y2pFVDrJ^a`FzI=O#Ni%%nv7tVbrzI>%^vNQ) z+C&aU8f zSHcSAE93lurBo#!V!ny@QB(8`zJwaF2mC#5RLzgtyMr4ZhV-ygdqwsO^sq#5c7f)d zOL`G_IaejV2TmUSdI~*%#fN(HTF#_>eG@p6|CFI2*?yZ^Wy9!KOTf?aswE#rSN5iK zIFMx?MlMV8yAFKMSIwePZ&1<(n#h;-P336c1JoIs(r<{@`PwBF9JOZg3EzW$w5ydN zOGne4C;%-x`ngn&;0rH|MYqRL>NeZ-N=`7@v^cuw?K`Rge#N)xi>z@P!RKo+9e8P# zwl0apH=$~}xvzlQKgO^bj1N9JJNKJvKf0>!=*{buKr7|se>}BNoKZ>9F|Q>KlkjA_ ztg(*SrpRr<^XEF1E0aly&G6+^r*;|+q@dZm>5**#|DCj3r+ibt%IjS>0}bz3u~E@S zoQ|9G{Iv^bUcw69yT zlr;0Dv>jr~#)6BRn2~}H7Vij?*ZbN<;omshE7g>|83=4RlM82E$bRROQ2Uez!l1?t znNU?*IbTGOwhSdA(JgaG&Tfu9TlQPDbwkJbK<~h*Qd*77Fnj}Z!qw)xN~BdGH`66G z4Ho-rDXxP<)Od%|d_`xUWv(i1z{wo?G!Lv|r;o&`O7i{@)>WLyvQ;BPVm{;_TF>G| z>L!{sYathSK&QZa95&mq-0NjU6Px*-1g9KZedfnh1mzzv-it^v!<|T)$Nq z2_S3}kidmT9O8_gPq?UgXB99YRSbv!spNa*BL_ys#fFOY@Od)f3s!(@4DZ1 zkrC~Ngy*&utt>ZFqM2_vln|AWAlCYHO~|0#@`zPZt|0kOQ>0~JVfZa)Y^}JSa1$^a z%cRSYYHQ2xqF{!@{a|ryti<)!2+HW zl5DaY-9HrzU0l>!4|jKsZ3|0P&N!PNjvKc()(tqt zB&p8+a2um749@UYx0b7mlT)0u)neUP6Oi+N94<$xv!vjjKV1WN<*n`J^9nUjDjBpr z+3a$aQC9ZBp37>PivVN?fPeL>AT$Inh-c9jY-?*Wo+WBpooG5$FlJG^BwVakO@3%( zU@+G1gJ5#9+Qquk5I{W%);lMmktJ&r9dcmr2gT-umw8IZ&if7Sq_0?pP zvu$8-a7I{|PGD%L@}2wbT7V&2YFymghLe^DjCXjn`qd-plu zT24DqE(br2gpGl$@bQVE=yf^V@9oad&dRxpLjq6>c=z8yC zxLr*te;pu32)u8;Sr+Ggd92)jm!_c(zP~gvoheBM{gmpS%$LuXOk`Ecv|4V87ye0* z4Wd?}_>%U|$--Apu_}PlOjyrG^!a$%%K(`SNEd(Z00cL@R+&8#)zTu_+F3Z6;A{8i zZI+Ga1#f=uXJuj`_Vyk$u}%sLYs0vAMW?#4fXhhG_OSn#h*UkO8ho}egD{IioNXc2%nDWX$M=M zP2yNkwAL9QA5E)>Si+)0^Qyw>OwVN}*>RFb!_edLOavJXEl1nquB%9)^Jwd!v{i|b z?F%}k#=yl0uXL)%eLl!n(QUIgyvlY*%6sLBI@L`el;<9Bbuc5H%xkwB2A*hd&zH|t zc#G`{*zbisW_NPNiOKLi2$sUbSCyQ)nbG#lK3-~+heS^_Qwh_m=UWy&5>Zi6+AsAd zZ=;+iwHwzZ;+cf%amdJpv1F(~nB;%N@mA`$1FEiudPcecl{w&|s#nG9Y+`kWd1c}? z3_$JdNN+FX*2?YK2JPYLTBjkUc50D&ZppGD&!HNP$h&hd!r++A&969yMV$qTg@{&} z$z0ChbeDF@ZovErseM}y;B-MGMeQT$2c5LLs%-7%F@v6g0r4T!4X!9gZsrUjcUgyjti`jGt4t`(OLF~peHIHfvMw&5ySux5I(%+JX4JRr ze5%*!^nzZDC44`+d^IJ~y1?;o$;z++E5l;RppV;mZ&_3-zW%tI1^3i(8u)z`^h(GGVxnGWnTu!T7afC3!=4AruJig@#ffANxk zwOs}Oc zl+TqioFP_N?I|XW*Ky1CbzNC%nL6G@G5kKSWNR&#F4LWZ z?9Uf!EX;Ufi2vB4&ZXN7a9z{^O&4Y0V8X3?C5qDhpNdsYQIQIC93d$nwooadESU<& zx~a|9Z2wU$$H=KUQ(rx}{VAQWEY%6a%cq-_!rHu+n`PH3w>xknM|(j?HmPp3cDWur zB^6ZxTU(9E#C+0m>&x?}lTK<4ltrDeSBxCig>&Wl0X*3?PVLwlmL+xT$caE-fzSF+ zHo<7{G5x--L$l@jCi7J$rq1F;oS{rR!^s0%&+S&_OPSMk0p!}P9`4l&R53Hy{{TSW zFzUDv>lD&!uk|QBf!gQ6=3*&PVskcBLgU3AU)xdrH@``D&VcYz@IGX}8{Rh`{Bv9bxD!42=|U z6~~9NrJ;UV&YZ24!oO{q z(MSsSqzHU3?;qA5i1;?3VVO3#vr$}#o7$jQAiulnEX32^yiCQ$+252gL`SH$4cW+> z=BCud*M#H-Vqdg&vG>h2TuB1!W2&l{o5dmXfTGzhnFXy}R2ItkM83?qV2P7`Y>yZQ#= zdZvrje+DSs*d)^_msGh(!TgD6NMRTib|o3vgvO$zG6RAnWoaZ+glr=*{^>dhde%a! zlS&T=v5>rD^lELyry5rqnjjK%_y3`^K`F=aV zcDXJp&vA<#-{>|?Q9uT!fX5l-B>!w{6&ren<`OU*=sMV8D~sLe5-lHH9$dvk5!hS& zdeMm?B{2{-_=lx^`JBmCmAGju1e~&zi`Amtv0# zf_zNpt7z`-?#FA6763Ffs^ul!N>4=BGmeh7nIQZ9(T1yosh|>_qf*66s`|!8dB}`2 zS!r>P8aN{-C(q;exv$dg6z*S>h3bXCa|M#w(l>7)7&9d+FAs2jb(Ma!@FG~IDkJ>) zbDdZztUa-tTNBOu_r4B?v-#3}O8-nZ_z*`8PQVkPOXeW^!!N)l_V|j*${^-DoS%df z-!a)}wulav8_Un1j~rJfAjnZLl!$^R*1O&7WQUEL|J=EljagRESI|Zxts8?BvNXG_lDly;3iqMa%a^2W;qkv5paQ_ za-wS^Ehd&>l#=pgslh=Jxfx_~8_)n*ODGF88(Eh)j?n^xi-hs<;}tT6QKL`1U=eoP z5sq_9mKtdMNJP^Ir4xCQLx?#odqo}oC+y&5c5T5DxVGv)QP~os30VQzq&BOJ6N#F3 zItBqrJnr*{-mnJ5fwe4sgM%53)WOuAo}TBMQhbmUr`ovcsr4nQ`eig-Fe)}yL^6R{ zwgmK@3%rRK-JQsAE9_;U73EBUIrqmU3rG&`it>~`E7)I3{Ct3bMlv~LvE1?V72^lB zra5I|7&C4-TziIjVqww)i|GF7J%6&9i4x65ldA+4yQMU*{%qk?Hp`C$Y4FI+gfF_9 z?vwgk{jHZY{e!(9PC8jc{wJPQC{`^QPQl0z8=<^&*_1xr!T6FxPV018kQ9m8dKIcV zbc;^C+Ei$&P=to`*1=+-97QStWOPCrlW}>2E+hLP9_RcCofklQ3&EZChli~z%8%)8 zx6QK^t>7)OE%ng8x<8?@KpUplz_I{3lzgsaE~jOyq@;(RJWA18nF~;>$rl%RC!5^3 zbKHnSr?R;-oS1uk^rYTu$&E_L8l~l7QgPlYEiRo)P2xG2gwSuTgoT9#U}cSQxjy9Q zcF`ynM$p;A`(vBOfC)j=xGr3L3*81JiMgc^38Bqic0v=E5HNeeX*!0Bmp&!eB3e)FbWZi#aWueN5orTo+C#-wzxYz{N@P4NtPvmprG*%|JRh zFELEa%Qo1XAOUSMHFZY0|2UZMj#5T1mQZC|C?42~3S@DVfV!y-=Hu9Y|M9PV-782u z?HBHSkh%qpCgdj9Ks;Zz<&B)ejO&rsdU4QHG9XV$9Vd*a z(JO@BIRT7?jzUf*qX#pTx~vE|nvNw*=5?^mG<8qO_O*Y>Jp6<(5-^}e1|#lyAAWy* zpbZ$rL0~bP$~aysrHz_O^(;z*ggZ8JBp@derVwpxr z(lsYsoE)FmfG~lp|Nc_Ow?@K%8OF#PzxdeCWgEBd;WTM^`562j#QvgG@X-lb zaf_MS(|yR&O*zGUvF_v1V*Nz4s#b-wi8vRn@nWr#F5qSOS7l5MxqmcX_OmzOvZWd% zqcZWlxko5a&#@Pk=n*4T`s53alxDZLVz!v~C15lCYPV7eqZ^B2P{mFds=G*uU z)3ej-+{a*Bp^71KaUHfFtK@6Luf8o*&uEE5n3mk4LHhX?cg~@>Gt4EIgW}8e&DcD{ zpZmjxlxN6@5Q-{5>A5=axNgHit!A=1nL&B`2wyEyVBbEo`O~X}g_5wBCXOndfa0qj z54RYCr3b>~yBp5_kQEF3%-*v+*-RP`m73qi^L)8J0)tjl-WM)2=uZEoFOgbKUIGFF zyTA8E2=Q4YWDAlwHd(LvP9`lK+5i2T-Q)4Cfsqks*J!eRtu7l{?uy4lG?rAV1MQIC zci#v7)wF{^MTG!5&hu*0+)0HUPag*=IkdTUrc5-v1Uc;kT=PDIqIWOFGtzm-%kz%0!{k_#qb2u(UFnK zd9_#cSgJnb!o*8RU@Bc+!%%?0KRoCMsHkfEQ0k_z-qmitU3|Vp z+I&v_Ce_0qvH~*p_w}WB2B6C;C}3;yenoV@7!o*NC3R;@!T5m|MUk?# z5UAYeHaw4(f-t($)ZAR0%!obRAV~=77>T;Qy%kt9u(3W~T>*!!y?Jp&= zS}v|a4qX+`OB(h~12=c{wX{<1nT=<|Qsc|3T&8GqNOFEU$TnY`22Oj(bKnva9S2m37!(%d3gzZeiA)49J4c^b+ub!4Ob`#d%d0wj-az5%gu{Nuc zd(qS&B3;m(JXUS?l5>~pDXi`BF||eYmc?SNuit>I#0;LU`eJ(uM=r!X>#?Yc+^90d zidvfYfwz|o9{C5!eD98Gw|cF`ryU#;5-IfaAWtgp7b5PvUmKI(m%#6MczEnK%F-`? zZG?_ZKnUNmbhfyO-)VtnPqUlKGpXAtG>%rKp``ueqwPq6o7!8dn9F^8hMlvh{=$uD z<%ElHVlti3w%L#RCg?!htDSz{sU3iNkR`EeVe@-N&KZ9OqO1Lx%wNAgvwXh4-3XoV zoHhL-NwHcU zs#ADJEzTFMa9yKH>{0f0VrvBG7Z~^Jl;Tm8_-9six_M%)W;Y}q2uD9}UmjMBuw8Gz z2ZowCzPFCNJL^eRNPtB^&ws!&u^ve;QFE!>!f3J{su|y{E1A7lDiBmf>e3Fx8pv`% z5W#Ikt{X{P>>NK({{Rj#6Xwh;b~v7wd_%P;8STVOx}x0+Ig%)BX{;+fB~IkDA|Vds zmZ)8JNR$)~neUzE);vU^-9b8i?AjdNIu!5;Pc`IJ zRVtlS;{pP$8Z1w*3Vy2Bm>X#Izp+@(7FXU%Ve)NN{^_LkS@lb{Sad!lOA)H@uN59K zE767RHU&A*m-ITTL#xQBK=1y=tTTElMQ}p=E9_{$2cjgHN#em{g zb0+G=@o;#;?59EY2L-mfTwe0-9;|zIlC!s{H1dASOF`~zwuiSWHiC0+ZkyYuwsR8w zCwjvvCQp4s&kGGD?tDvCkPFZr#VYRH70peE zkCk_%9^k^MtU~w^ph)UwV1#DmJX$~yHYn~IGmIolImuv7haJD;JVwCH#NS6 z&~_W?vp<o0~^Q`Phbth}fk+nub7Mgc2ct_W(nDXFOo@1UkT(q;6IyJi;iZ+A08 z^F$+a>>h}z9K&L@o&BUL3VR`Ll3ww=A#VJcl(k^h>Qiz&=CkayVeb+>Vx>zt5k8oF zgVgTmJYSVx73IEfqfH*_gMdD+^DH|9^YRs-1mXR@c1^hu5YHGaM5r0e!H=o_KnzVg zR@M}Xy8Kmz016rhDjOt)AyCwp;T;}Z~EpzK~Nvjk}BHZfU9NLc1iMuzu*ymd=fhJ=Dj#ytF zN@*D>K1Jp<-NnoYbdj8&)0Gws`+!zGXTYJa&o`ub%MEm3rwSA!ab6k~diZuS$suI8 zj^DS~+}P;R3e^3@`Zp}5vvGza@x^X9sV@683D0YGh3NSe#iDz*BOHWgY>`|kDxuP< zeHlVQyX7L1$n1|iR`mu7;prZ?!5jE2oA>R8TMiq%iMs?I4qPLd{uHwqUOzG=Z|Ce| zNN3}?kPVzpSKIgJuHfk2$pn)TvOdcz#jcOLopqvW&-zXvp=c#h7R?6%XUUYu3_0&H{)CsV*g)#r_JRPTG8RKN?BEVY zl~c;>3vr#aC`SV`7W$GHVs!N_bVAl(2*oxseMRQCuTMwR&jm84Q+g~}&(utBYhre; zxPR8odK<|0maoB{t-iUv<8eAMXZQz5cY{=zv2EAN!D7CnRg=@{5(e2lb=ke{O*!9_ zf4f+7f(UKN_AmwL?0S4Kg?m6)v%XHr-7GjAWk zNx*CR5eUVlqddhe7Em~-^b9$R9KZI)8b$YJ*@3L*+v<6Yp;&49v1*ZxxB>gZJK(F`NFmnHsnaAO6?v6<8ucFynS_! zu^<~*WLR;%X!Bs<2R0tkHkIIc+ts(T!5&JMm^YIz!*#q7l^StTTbCuo~^9D_wnn@cZQvX8cRAXWf;cSUWeW%PRXF0 zba747D}t#h$A!Gxr>+t?wbM>tQd)X1BWww{r2$LDZoAW;lO-hD?oTZC`;)581~R3u zyaH_BzkK7X(hGcAYIKNam}PHKfX5w`VEw+krtNy=i~i~B0B$51yhq;dXxkASuY?g~ z<%c3c?fSF~Xnndb1T9weUHTCJq7!Tb!JlhozpCUDg7jKMhWTSGJO$E5_mb#I^8=%M zFR`V%T%nSMeE~%%)KStFhPBs^S}HWXp@X#gPOZ{8QUB1sH% z)yS1_?zALSZOpZZR>thm{pfFLzb#Qj(D#d_Gj|zKooSXBZR4vChpoq;wchIYlNr;T z?;Eq(w1)d6^h@V^d1b)m+dZ$Ym)KO#nu5WDbFm5`>Q`>3<+-z&6Qz{g+&@J~VJ3B% zc_~VpDkz*Qpy4y$VH{cdKXvSlN1tU#;JB2YzC|ur@`^w&&W@8!l?Bs3w3RcRkj_P| z&kUspLoVV1bK#V3A%~sX?)7I~-CfM)v){B_pMDB_3Q2G4EL~n$5WlNTSxrH6JNy|D zo}$Y$s2lr^t4hfC8y%8FBI{2Q=UdDg+?(E_Vx3j!Rl0Y`U}QmIxa@vK`7 z)rv%_`!z>%N9TRN*a)#+W@+U|Nul{3Ien)O4tw*}qXwPl&|BkxGAxsJYbp(3+S?BM z&nV-@E3(A?&RmckV-@q4SrilcO&D9Qglzv3_u&MJ*A^1Y0XKaqMqT_anIVof(u+?i zmoQoIm19jqZ7@N0lyjX(2j%($DJ~6NRpzDBvtY0RLA-9CM4dG2`U;$@UZI;^zqOTy zjZmaO-;tj_PW0@oAeXk8N;)%p+$Yx>H4>Z>a%)0wvuW7JMz~tZMXN}yxX+LjHKFC@ znX?*BEBrOP4s2--v=_<`mLQ&(>R<0=A5X0ecr~jA>b<9gi?YWqpcQhmA7kt8%nI1< zZ9$E9bp7IVk4xpz)s3ETLJrM|*Ml_u14;>#lh{|pUTeoA(Vpe5LuP}ekuI?N-!Uly ztKU<$bYh5T6jz5A-z#38UUStVBGVPk#`PlWBMFBFzmfw~TK|{^duuA2cTL!+pei+< z<*rZRzOnx3vMuK2m2Ng;S@0Z}x>4lTmHB@t`^u=SwsvjlQd+tM=?1BX7Non8E=iFN z=@KPHQt6WJ?vn2A?(VK{viCXf-tYPMjq&_oFyL8p%{A9t_kGp!?$|AhMjd2u5Csf$ zo?1uAOXkU|G!8%EM=7V07Cvq~IDUTqDCP#%aK2ToSQIhn9+}k6-408=M^56K8V4}e)B^MS=!sZS3&YjJ6Xp0*$aV>5N$Khja2kG?8y>G5==Lm7;2{dl!bbnHw?#m z?$?xBv{PJ3f!3QIC*OA3o5|su0A_QWlgg8rweB=oIKLO~ka;rNX#vsDq;6U1oM#Iq zLV+?x6!IYz^sFa%MQ3TEJBd)XT~<~$^>GQF0~Rgwp`?=}JzVfXBkJ=PSUrhqH+O+Y zly&J~9t4|!7KM66>y1=-2VZ^Jo!KJN`|D29j!}z8ppsE+yNrvwp08S@gCiNF&u2~a05sl))ze<`5CpZLVp?A ztZ;j#?9#*rD$e~Zr`AZqf>y`8@~`|jt5!oXE$wH2B$CX1Y#!eiQ)>Boj!~ZxL2oUX zBl&RCRZXl!T|isC*3R^>plVUgngLJ8b+@0^V(~q<7>Za}{ZA^{&%(5$lNYryfn8j* zRQBK@7;>_=?5cUS?>pk>I8Ml6E$Wr8k-G88fCJ6VH`V1Tq-`DrYgbRehs(2KFB#sed;~h~xZ%=v;enLz4p zxiZnFLM_)bEuaq1jksCwVRV_TKXW2@TuYb%hYso_0q^?@$?%SI^_rl(ywqN%`SEaE ztSsL`%YTJIxX4>%V+fu0rS2y83i0MJTE)}0Q9_281+X!9K+RcB93PrUb55nSdArID ze65V(4GKQLSal79(hixc5h+XD-CN(6b*veM@p4TMn18Rk1-lJr06ERjH_ed2{(MOH z;!1T;d3#A6t4~k29`QFfj;jhuA-n7^ZDE%ZY}gkKrh~etQe2Ovj(LWV`*VgE2R9}OFGB)~u<)HOw)b5$~YzkWXo|3<9)`X5@a88B8 zg15g~_BWv)ZcA>(St+~|(m3u6LeYtqF0Ah)aZ{1~?WZNk3KcVetLL7opmW^k zz4Gkc-cYKa1vv%z+S*1j<>cAU%{Cu07BO*KQnELciFWGmO1^} zk;tYsr-SmG-nHTYYr#!7^=Y>FV3HID42s4sA9q8#!$h2L_juouG^m|KT%dKBInU12 z1hN+yw1Exqp-f!>NAoI9eF}eo-eJkFR(7*HyR!9o-g>dI;bgeu5PGgC=9qrv6<&?7 z4p~Wlocwxs%jA)Cwb;o$%ZEM@?^oqTob_Pk|z%lIGo*f zCNQCXv{WhmP@)KJIlAaNnJAUo=|*v|D%ts|p7mX5ior`FMupm==l&WC;fQ7JG&I~@ z7KEA`2K8AHil&sYFa)R2Vf7pi~$IDgHGEqa>~EFH?*`l2)RCe*eg&%%oOQsTlQ{WW)$pM5uc|cP`eEu-F_>{nu#>x} zs7yRtblQ_xjDF&V9s42Y;lhgG#WYY{Rkk*fpvm^4bl64Rd~jO{A^+bj0A>8C>%ecH z6crWky!ni&V-j-BV6EmiUxv1|H|qAa`C$JFRt}PC=|`2$CDyl$P&^vC_h=`z0GR5X z5nS>+)46CCO@LDPuZq8=H|QuWMkAHec;5TAm?(3;%9#L}QBGTgtwQUEWpfah!iY3E z&Ea!-v3AVZxbL5Lr%E=gh6-JL;wXM!^h|o5#+;YE4CDNwQQ4FvWc3qGjGf_-_Y`hw ziWX`0M@ETaeZRhQ6H6}Z)(hnP=^rax16lTUUh9{AL>uR)E(`Bzn()gMNpt6%U^D+% zr%(hZ)13(r#Q(%O6_s?^A-7_slTCtrGOYqE(Qv(JdYL)sEQ15<0_&!u2i5qh3sWNt zsDI4_ssFHH$iu@VNQ?PUKGq#_Jsljl3B;R8HAcY>amL7&4VkEBePtQ9TN!UmoSKg6 zNqc$tDf>s+h{X(!wVsK5DTBVpVX(UQ)Yw?HL-9BpLfb+|YkBE>QD@SA#%hh|CdElG zIpJy=?HUCaoKWEIpz|c*YhD+Ah9)77CTY52MiA4JkZ$9#5V4Z88ts7ct|343^`w5z z8YGt@YL&-+^CXDbE044t3I;y=TaPpjGi}t^G-sK5V*#I40B+TOa9-akv~+9rYjfll zhm~javc$S9VRyR@zmIUZ6y}%NyXeW@X7)*iX07?{ZY{Om(%vr-P}|XKM*TP%qntKW z`NikBfNSLTT|KbHSefSH0`>+~Eu9vn+jQ}OJjRtCZaUbsU&&g#ZeGeM6WKR&A#omR zcRX+KRIxIOj#=xQ^vVhRJyw#8 zZGg~KF%0lpCNc+?_L9qM>>VkQtdEN^hEL{Qh)EDpIoA_vqciRZp)C3 zSizbqGj%@3(lMmfE*#P`oTMKAi{<8)eTGvvb2oq#AszfIe`yk}@n9r3YD^5V+WVP% z+fyZp825pqhMc-vk>OqX{Q%qO||}NX_qFE#VUrdnh8uyaflV zE=MAQIBbm+ri{t`XR;Jv{{-q!KL>H%C6>m+|M{{Lu{*5kmGtXCgr?ELpB3Sob)LHO^n3-JJHtp|@aUrz0R zPdIvj?!n*l_@CeZe-1aPFxO3~-*ZjZQvX|NZ?KMNi+C&~n)A(@sGIX$@!{d&wT%ri zAi7H-^}O;K85v2CIt-EkdZu*6s*tpt(cdG?O?N9n43ud9XVS=_nUuFq=cSTV8|z|~ zqYuY&u=uanBC)ZtRcHjT_coKeAHbqtdD7iuwrq_!sF`7($X#;2n!>0=J?EG&Ho7JZa))b2Hr8d{9n>8PJOQ*%66FC= zXNa8U`mO_<6vpuQ$DvGV-0|OLlW`!l@V&@_+~9E_JT^s<-2xvG9L zqHFC>ydyx%D9%gHXr4&#qNpz%eOKptt9%}D+MRAkku^$Y2!aI^D^f{u>18D;ZaMd) z1srQR~*dGG;Fg*LqR5l-8sO*3Fi5h&KJDqeF|AO(%_7v42 zPL5og8+xGv^22nTo=MvWhcbFD-#S9kc+~=Xx+)&oaZob#C@OIS@7n`w)au9CUmot; ziV){!qWK-U$A|kT37OKU()O@8$ggz0m^R%8=x8Q@4TpfBcKc?xC`$)`3oq{wNL;*u zxkK1~qc2s@>pq&qZI5*az#6V@ZleGl+RBX8RYIE#K*6P}N(8cXizjM(zAhF>*To{K zWYa*+i>2)W3N3Mlu7%|1&_h1l<^EO2_Pc7i!dTL7J=Fa{h z!chr`mqebNB7zTBegY3yMki-)_&b(-H!Xw_mKWR(GY1lRM}a}0C<(4Wt4eJ!9MEU6 z)zzgvRexU6eP}JUhME7J9b>yVZDIHahoXkp`5+A-AOq9JxUWeH5iaQte8$F9Vq=jg znLl4qJFE=SM!8*}k2gB9y1F1JTC1_SUcoEN?U+N(hE?UFcQ@AM7Yv3$b!E zS)kvsNaXr@8iEqUUz2Djx6ekZHG5pQ0EXCIWL%wp{rO%y&Ve^ zb>+$ItGVjd`8`A!j4C-Vk9O$gQ&0a+S@(oh>NHO*>(`v*wH58qiK+!QW%aDui6dV_ zfofjN%zU*$I;zqvpyM*XPZns!0%=Y6;9&SnUtg(HyBM9GnT4>hNHh_>6(_7 z^v{LFD0SWTIWq4=j>WUm!Tsuw+68!)9MAikv2t_elarG)u-bAVA{Y|#@>xKL_STd9 zZ3;Pt_xTtNun^J3y!9I7zf@T7i8cqzr^6~?hPe<^HB;&(0qBN%2q}ENXC-|O`h0mH z3kIp$+2J*?p{I6Du)C7$VL7Sti_=E6!D`*_R=UolmH5<<=4>KvI=3jVjsDX0XX)sm zLeIt^ZT%z)2#Oi?`N^+2&EFoB&+MvZyWoomcfC|Dw?X%%l1NzCv5rS&s~;(0>Nw0w z?p5fG(w#hCPg3%xC^Eg`+&s-nE_ILtGMyuyI*r}UK)b_t!B}5d4q}<>8qKJB&zM}f zOo1YZalEGmLc51G8#=`81#k<@mq>|QChinY8eo9eMh_UPoStREhmedB$Z$lBC$yz&^A^3V`~QhdpaiVGZx>#VGcyd0?qEC*JEal{pJXe)Q%w% zYTqb4th7t3@ZH5j9O-0}1rn)3l7;ZDM=1gn7IeMt9itIWIz{in7O2DT#}ZWhX;DCx zI^=D0^O9Ag{z(f0X?Bfp7w#bI7~#4wz^dF-okN&_>{2Z{SW&27_8r}oY5f2Yrqjo! zCh|JxVn{?mQEjF0-Jgwa7{?WroAlzS3RGS$dNo1RM>t&ot7Zo5bUhlroUL7SGg`f% zoomB6Pb~L(^t8X-vS+S8^4)2cP2$r;n4SY%Rj9+snj|y|p8Apdgs(?AdygLVgo9{6&-c5y;7QvdYEY8*tdug7!ZZp$zS7qIIq54sf=(Lo>b`0fe~ z-e{tDD%&g?`h0!cTKKxf(QW8hk19uBUhlyFWYE&HvYQ|=IZ=4pHa-eP?p#Zz$@c5k zYzo>qQ5yw5oLE&er&0Ef{zF(bC=zBpUx$DFj6Jh&fNX8^!WkV}6>mL70)my``#$W3jUX?#c6PQ66(7$k+OG-pJ$HWu>QV9z>I|MoTz2=ju`S z{^EnlS`XTQk^oZ7p*u0hkX=~%{SH6-S2_pku7Bnlf>PovOQPY|{i~`Y#4YNvd+8=+ zD|*y6jXvcSAswhx9BRvPbb87QI2I{MHV@GkBg2)hYgAB#%fUJ~s*ji0J#x{0ZcX0# z45NWmAaG*eUZ>Q=)iu9(##hOJyVtBLZB`|&l7-PpvdkJ(u+nz6#V9{N_`U?oLvL-QqNI)i@4K_kyFjZuCuk+Ld>XlU7;BT;CO_2+TG~7Xz4Vd(*xWwB>JYdq zVKylhl_` z29rei+n5*vpL+3Pwj#y(oDU(X7>aDWS-% zo@A_=GYo^qWxU#Ky9d^Rg%o05*>t|jR@44pnKS68zmI0wY?g!^ll6^pFHsKY9X2XI z&j0Qa3S0%MDSsaFEkymr7;iX;>v*2Jy1gX&pqlH}o0Po_l{baD(~VOn<3$eB*N;osot|yf z^F;**AAPe_>622;h$^;yLdUlUhIF zht`N-tlqFl5ZIkl>{&VSo0*r3m=qAd=D~O85AKe16BKh7)bOXLyEI1Sh7^I*kg$(oP`F;Y=T1m1m31#&em3>~ZRp%| zL+(b3^LWiz+b&?a6r;_L7p)jpFc%UJg`r@;q zMpfYR%%nv)-cJYEX2;}6nSqjB=tXo;2C9k%rd%ycDA zkJTG|p{;p20MToxP-WJ-Of0Z*`{+};rxUv}ZcGMelSN}YDZfTK?wbbRke+K6`Uz46 zb@1wPY3GKGX==g*ncpk&x}#f_)akXeI}}kT(IQfSF4`v%#fgcJ*uH^8p2mPl>Zt@u z`t$VpG!v8^PgUpjbi};c$`y(io?8aOFmgm z7|?#Kn}P1EGH9{S?(kLu^O&3o^lN-FQHT*~&bYl^#m<)J*Ab!kpvdY2OL(qCA92g2 z-Q@xQ4qng?c4!k>uh`T(K$+z$usP%=yKdmWgkMMRA;i{p_j*-q*9t)?DNiD2%pXCg zNl=J$JGvueEUqH^O z#7To*C*j^)`&o`i2_OpqQ!X9ugrP*8)Bf1Rgy4~IL%I7+cUFKHI}1V1EK-cMM&~m5 zS5z46?jPk)ViIK8^kVdm*ZS`L9FuXgZ<8NEzv6hVg0Ka;8AbCm8lUTo_Au*RI24?0 z3dYT?>(oZg}vdbuHw`#rV<#EfU5hXV>{rFxj^y7}- zBjN9;c8Mf!B>Hl3Gua-V8o!g$QQGS37x@my8Ph#4xOI@>+Df~m;+z$*K|IWFg>m)^ zhV(NdE!Enx-suAB1Jc|cH8+h;w80&bO|=Gb+vItP>upon?UNH)r-NsZx)ly7{Yz3( zwWD)H?*Tl|>u-+(>Vc+SUI8N-+bCA9kxKArUi@L0G5jK(O^u;HYWy&bi=XeFeMa%R zifZ#x7TwiSL1)Moz;N6i>q$#QOcaxiF@Zbl`Vly-x~T|hup&>qzgPA6_2Z%_0}G{- zRy|s3|5H|9S&741~-C=c~l&(J^P8#b6yS zRCy;-BG~#duIqqCys0KK{C@mvxZJ0;{I;_RwFaws=gQXoiU6kG1DwkfqQ=s=$?x9hjTyY5@pzNeb0>MP4r0r2y}_U>}K5`bSV_|kf81l^1L z#flZGLNbzyj@I+pl02HvIJ9StOLZ#*&1WU#4PMxn3dDzlqlj=|Km&cMW_!t9AObgo zn$4__S0jg>i~~8_)I7WzzeaHw5l`Bj%Tg%}E|JFB@&k;I+p`{j69nk0XBe*(6cL4x zK*m;Gt#*i&0UQ=%@dqvYmo2U|KL(JaI6lIO5kw(nN(QUFww)_BXnV`#Ab|oW8?0zP zVGyIWmTGdm((Yfwb0sw7T7A6{e{Oz?la2rh;~6qU_=3Wyu*T|&X^nrQiD{&94R^rV z^$8ez{T*T^J|>1Qw5lRtJyzV^^$zw7rG!V2s2L$LJRUY$mR>AZAHUoLYSCXBmN5K3 zzHPqRpjoa7fkP(4;~72;K6B-3TYfBjS694cq&2%+$nHqw5GWM>Yw2h3CO2$Pnc^8@ zfk}1arzL?L9p(ts^oHU-qw;6OFb-!+K``wPm#M~>e^rmgUGwDiY-7Q4?aM)nzN4Xn5-1xSXO*<=n=8bU+r)PT}cAGVCV=+rr zwWRDrKcswyeBxT9X{SJi=jW}bAgS4u^n%-hcc5gu>7!9>2DHxz{JUxDa?Zr-dyaO- zUpi{~!-5Z^%26IxWxu{!(T5IXRcplyoaKvb?+Ur4`}u^yM_E{=&3#9nfj_0oeUT&w zRiOdZE-I(id1AL;6;Z(_UvML&d9%xZgqAp8^A*$cr>KA`VNUjNIu4E$=1?{oWx=gR z06q^P#dKb5!R^3@>ck877;{TO-gWLpdd(dNg7D7@bz1uiy?8HAkc&Rj*Ri2EJF5=Z z#CLDTx14p`#}#xhHj*`B;e0kml;(*tuFh?SgP*|BXl8x$!ZH!3;Lj@FafOg=;5uwu z>7~g=>uYN2Ks$#((SYweWJ{^fr|ZqjYTCR{UQMN8`MgrUf-zcqMgfmFDN=A% z5|EN~q|9;C_jo?3x07&(1^v?JS$^Y8X-?y(tAS&2l>8=ITH2c-E1rr>4RP*k62$bA zkoAwl$6v-ZwNCosAX7fKiJ4~VLjJq1oLdS@e!D)+i6Znxbj>Tt74FLd+3&RG3|htw z_nx;*J!35$J5HE3bQra(c=?g2rHjI4`Lu_=XecBc`AaVfn^WbBvr`2^{g6U-7T+yJ zrFmhtF#Qyoqp?9Ntx5kk5fS52KSCB^+*8c_28#&;F$&=fd2)^DwFPe@5FiRSesTl{ zv>_0E((}$PR58^j(ojr-Wf7X9Ov7S2Mqf^JQNSa57HegS9&M9##SfLW=g(oxMO`Nk zqvr8#m!EoQ36;W?+{1Ou`|S?kFQ>G=jk(XGpe=_hs_p3UVACR5X2Y0q$1_Rd(XTww z>g^@!_`;yO8ANW($BoIZ!=2c-zRkYl?Sjh7ml9YuD_0}N4}dr>aBjMM>!f{ih#UT$23 z9UeKHbxA^dnXECZzdWQH1Hu_Y$?+10F{dn|R$ktYe=I*tjEQQcKbXQS&r#Q4JT+%_ z;u-l-Z_Bj*SWKU|943!fXBeP!&YelDTO@awybyiSFyDG7`JP{unu5aAp6qa{;AvTk zRi{@LJL_a)ooSUd7xcYlxHe3Z#Hn-BF|$n#AQ3qJjlv(XDe|rJvCNH;y3}===03oA zr`NjYfH;XeAiVOeroATEZO6?S;CfeEE)}&b&cbn4%zI-^2rPGJjk2*x8RM?Lpn1j} zx0&US9yUG7U77jRc~{hKpO(Iaj-`j9F-CV6AHtt3{m{QCh2e+toFQTBu9eFjWX3?G zQW>?Sk97P79nl_=jL7TwTbz~U{{&>RGcqPd7v=8o<6Mj^6Jc+TjlHQnyUnvpc|*{& z$coj^G`{CT1lDP5V^R||;@353KT)n~u z6ZciHI7~AxMfld0J`@zo_K;?om~z z`?J1CA>w>Vu{kl_v?2K#?dBN*r*o{Re$Snp*(QVJ1p@4j0|qP4Oc3=zg~Hb$2QsdQ zhTownS+8KM7h-jRnnkMs31rQxjooZs^F%qF2(IsjbqAa0cfq|Ol>2w*(ZCe)q(T1pLgzm7F)9Q@HJGyprSP2tvb0#}IdoAa$0g z6TY5xxdf0;&3BmkVi7XIc=i+NmNr8eRP3Ip*JC?Ex-AjEotBAM%ppI;T?ZbHApsmU zVfDV`u3pHBhuta_kH92zCh2sUEBmV7TH!!8=De7%QvInX=(pkB5479Yi8X0p2xq*m zz5bFNW=J*ITRpVGhToeEh2IeL}gy zT4;~E?Z`|pib+F;V`*$r0v7ao;~>eNM48cA6E^F>G6mO?bRkF`R@?5S z_kDy9AjT4`Fbft4YdKw$99>hAv8bfPd*wrzZYv6JyZqoA_R@XvcmOR5K^-rI`;EDU z-E{d&R9wdD>gHlU%jR2YmLPx04i{Xc1NtZw7_^ycApEvCLs0W@z!O*-Hj;+YD;DEV zO=)XIyJT?Svx*MnYbH$;XDL5dY9rEs(=?dGqMFydF6@xiJS#ds&b^YSP4;Tag2AtJleNp|rV|!77K#jIbsTdtQt5zb{7OP*|f3 zx+jP_i&xvM->|0R{t^`4;+sPMs48%J2+e^BqmDOd!IFXfA)@+2t>1u#6 z(7$yeFyW>u9==mj*d?9_Fq_}HZq|35H+NlB zF3C%6r;mAVzYJbf?e%kg%n^6IlfWXJ#j#Vb;H6lYpE`h=rGUcx8Vh@*A;<(?74&Jd zZ#p@9fVX#Muo`}VA)$8by~@79h%eF?=VV*H(u=zsT+|GECG`2mMJZPaN%sn3)y4Ul z&^;0j*J#3`c=O%@52Dj?1ij8zqYgbORt<69p9K|#h&7tlgMT(~mOAV08`v@#ClEuf zoUGZ$x6?5`&d+slmkp6qbClwBsiFs<`BQSBXcyr%R9Adg!KeK8&1O;RUb64Eyt*t7 zu?$PTf$i?Ny%*tp{imEzMz_(!54IE|c7|9?d65^Y>JmL?R4?<% zL>KBY61^{(!ci*Bmf<)MYYMkwc!NpiGxf?li`AuPwesN==Vx>R!qDOum}F3YeSG36 z^e8+1E5k1g)FsGLF}+tUoO#;i(ya;4|C~+bsTVN;!aS9T z*GYy12m&Rz+=IFsvFX)h0C&uIeX@?VM|T4#%64P>{P@2{Nalm3?=Rr9sE-;ByMp4w z=X%lw($fmOq+%HGSLa({)0__%*h~kAXw?f7D%EpUXeE;c8rBAr^@ftCSju^fI-bub zj#W<9I$9#3phN=Zvv;jKa(@}|(0cM6&C(TSVrf|KRmA@s3SFP%2G)*(=Q*YX1ME_E zGLJn~&+>=f7}+F%`Y^`QDpPrgtK0#HPQ+-Id@tZ}$j6pHHDEBEtoDL>g9)TneftCG zmI8HbW?gOI(4;}ZWjfRJn{{kN7SGBrg1997eIOSkmbaw!mtp+WKCthWt~ZloK~|e2 zV1X%Tt3Jg7<$w~p>z9^kk~e1G?*O3V`|;5EV2<`FXlSfJOC21Siq~mx$nv*bB3*^W zIHuVs2z%OG_9NyLyxF2KA4>5N+edhgm$F%E+)WP5?_&_fLsGB1)E`9U2)E$-Ozv;a z*(@g*G#frwRPutLy#mtBVR7wA057{Yv^;4B@cCSdNyNRV<2eg5q+{jK3j!&^KQFI|NPi-}0*JCS zI5pM9u;5q0!q>RYPM;^iEYu#$I2$ElKwy}P4 ze*7haCn$_c!j}ap30W1yL8OX00E4kb|!G#LwQN}dVi+M zo-v;5lWxoFjl1hpNNTevREYWC_YYDexOx0t^?2wo5$T}A`A)uGIA0#jLvP|mnBfsw zB=}LF0Dd)5EE6cFvJ_8UPdCh`!L=3T{Irm75`@E;HgL~>IhVe8>}w|Auq)^1hf4e0 z3g8VZ`+JH>Gope>a?Z}h}*36buF=gbIe7Zw-{b@Kb4J6Fca=XIXkTkS+(&GheO6bat};@q4NNU zOqC8ltf5RTzd87G;acA=Zt`mu8CdIa7W^6zs+s9_c>p;Unjqx9Sord=^bIaaf=n8X zipYg-`2&yL+EAOz&T_dg915iAg#E9bP6+x{GolA{O#~4<5-b)}m&wxi8Ja6V4prQ8 z-o7BxwgkXW8EGcSg1o{1fqz#rbN;0D-h*vco;rR7Al|S~lY$4cRfG1=F`V(zjwaA` zs+`t)Uf#Q0pP0BwET)bJiguFvg>?0^C^jo2nk^4!ft4wlFA{cgQH#U)KAU|pSCu~c znQ-0V$4Uk&5|*wg7K~yqvg4=i8EnR{`JVRR1^)G~5@ZWl-ZF5gv=3wiA2XS{9-zf% znBE7J@!D_5OxK>*DtiIuXXm=Ya#AXu^Wz`L6ytlo)DhgxX2rpu?2{BzhxMmnpvvuV zeGiOMhY{N#2SH`G;s-VZRVZB~Diy`|JF=pC?}tg;X)&{YyevrDMxU z+!F6Sw?|AG9{zm8`uvc*`nXj$i?Rk8x-@#ln0Cmb{VDxHBO4{lZLZq(1{S)MAf)}a zmR1?)R!HS;l;!y|O{|*gdwub7+TW7+cVlsr>rjXOz4sbmeyvC}EO}M{f?Q9UVb0+o za%(;$yiOtRh7ZT3j}lZee~4a!=bHnfkd)sZgEfYoXnTpvm=_VwaYaI^AhNZ3g5yb}Le;&(EKag!8{s~(94WvG$(|bKr zMS6NID^)F2l*HsVAlxaUN~X37M@(cVyy0pk_ynLlTcm3$o=ZLme8D?5{B}x3?<=IZ z!jH2W{k7pyHjA%O$(?*yGVVk?j>o^p&&GyLi_si{(1fcQkBi{H2KrY?VExP6Z6+YT zaNxf6Nm2H_2p=Es%L_O4AHOb5-7cbDi3CatltD@5C^>g=M`n`K?T+O{{x)x;Vsr5i zyE(%DHNxC@^)@As-+irEz+wD_VkdTM zslok4215cjkf?V`9}b_v3cGT-?FBzR`&|J$RSz5;8wr+2nIpUi=|{c9!P4CnIUu*n1RI=qP_a$)XA}j4oN4dWsc++e!pAVmNG(=)2>bx~1 z9PZXMma8iLp)by094TQ9+4ySv!bBo~tsEiM>Qif&1_l%Uo2TL`E{S(<7tVYgvf zr%x-pZsG(yKAVI~QhDNPWQX1@InOCd726JXM^f`Qy;{TWTtkTr0YMkt9WN%iPL8d^ z7yl{S$$lgKiTl!+Htl*m4-)JGiU>LHHt;(^=<{#FTK&9BP^w4+5#asEpc|dd^|OAy z1es4F4lf6szF|_zpl+=Gio_pawPQEJ!j*7pyglFrvaTLg3?}g~Gtn#7S3>hZx-&6P zSdvcBc)2~=NwMF;c{Ig{S^HotrsRKG=X^L(Ka-7(^$k?gz2M>JlF-^`5a-0%{np9BY>Aft%;-n>m@hJ)YMTKeUBu4SYk ze9B3n)Yd%nv5|o@@*6^bB!Xy8o=Q$yWMI|8XK7+PuTJw_nAHZiON(+s4BHT(j1(Ln zb$M$@Eg;hO)`HKq7{iXQ9i&u~!eSBB(Sp3|KnH05U<`x6)$oAgf%f{iH&;99`&d-o z!MM!eO~);8k(o~gSFtM^mB^K>&&%hRn3o}cmo|S@thVpS#E3p~pMLG52!4@)2C4v0 zuQh~Pmvc0%h{Ly}8cHMy7`E+qO?O3CP}WFowlMDBt&v6;NwAPTwq&$euZ9iEi3oUp z@^goiDIV@`@ye92X)d_GDl!T`1XHeM^aci|XnoZU`7@q$c zzbFqQ)dS@wK}%}*o-P?QnpTNnK;!Hp_G?j=t`z;RYi%u^hlr?x2e@nUQ^!&NnjUbQ zFa3z`iO$2TX+?l8;3F@bIN(&=FrYGAENL56N_FSKlKe>Nq3h8u%8xcn&UKF34U@t8 zH5>9G5`jDZyId55rqa@!mLCJm7m2(I&|J)f-&i}_{=uyaek~xf1LgPT55Z1gOSgZz zdbf-jS&5H3`~d%((_$*wUt23We3Z?}prG5ez4iUdl|f`fGfbMXbyoTHzBV_j1cfqR zB7*!T4EGEapy#Z)wmiG7g;98xMrDc`p!`vF@;`kD8=ZKGgYz2;6V#xg{hh@R&A%Lr zm$yXNOn7Eb;<|Xarf9d~o-Zx5#W3p?9$rw^di-&8;*#4ueCE+QN{~N4WlHsX3TjLa z$4bkc`tL^ksXLw`LstkS8MwRc@Hv>tEECJxf40D9lb|EqoBu#zAu_1F zYZx-0%yUi__~spnFpVsQg4H7`=ZiCTxD{STuK|p!xJcf*8sT~nnC@T z*y^jq9sO~pe7L@OSEIrHcg;QmF2jFACLV*2xp1e zF!|x{v%17Jp`rz#DINR;$DmvJzW*Wn@q7~v-WB0BJB?rVK~%SLhDlz`&R83U_)TwbEVH?$Xv=U6hZb|# z$EjjrT(j1Q!^xs#9G`qdIY_>7x02mc#cV2CB92eYwf5RZJ0h6W4wqrYQ7o;Z*j1Q^ zp*-N?5p0*^eazf}$5R3t+u!-EZ@-bjn+upj4QcP&Z?Q@2BZiQGyAGzE=b~D}IWRYtW@iNyJ06S);@oH75ey>M zm8mGgn>O;S>$oTSTl~g4Ak7gKevqM}t@jQ)fvdX{;(Dt=a(Zby2uVR?>=;hB?flJa zpod{Vin#BZy3*29@i@y8^vP~ZcGCFrPle=;fvDl%Sl#`4HEL7{*-yv7Ev}0%gVol= zI*gP^txFEQC9n)+O2hP3IK7@l1w+g&4O+ z1#~|r7Ri%Oox5*7{e5WT+)pn74EBwof1adIWp)Q5Y+q`42}!Bpzre1i`#Kr+#}!{2 z)_=;IzkfJR0`0wvSMZeZfBpH9ESY|=p$AtB`_rG1DV4l+HJ>U@H67(*d-cDY1mbf5 zw)re~Jq?VcxBHiA*}t;>XG~;@SSf2%ii@78Nw9|DLZGhM?&~D6t`z;d z@&5XRq=<6Gi%|aWcLFF-!Uc9~h`Qdb2jlN9^KaDeHThGoIo!XY@bA;bBzeO74wLLe z|9x8DzJhZSbtvOe!9>J?28lvZ9ib$#RI&uUI^((RQdN0sIpiKU^*icXiqRfv?@+c! zYRdE+`5))XPJl7$T6Lm80borTUQLZk)iwrIqqa`@?}9f@ZoD5xYLuw~BGp)KJx({{ z(VfI!H>U|AiHcAvQIbBFHjLG5l1y4>NkvN~?N5s!&w1AEUT32M>4^>~D6myolfVXx zXa`Qj?+(87_VxE6M7~=qdGq1=nx}_IPZU$ZfWB1-t4^)M4>}X6re8t1R-o{q1aAQG zoQ!4_5o_wHeTj^O6ah*VX%N>pFW1>!0x(1gTKmU|d>wk=y>2jm(MzY-p(jtJ(0IpkHz%AFTtrMNDBuT= zyNpgJ_epteBc7wwag7qmW53a}!(jUb8~iLu9|U2%+ZfbKAzlQ#d^v)57aNrv zX($2lzNO#3udrXBORaXc!Yf*p?39O#BAq%apw5qcfYH572tNn}uV;{~vewB2;_p(= zd*O8tk1j7vd%a_v5W`&lQ;6e8tvB}}VO?48oM+$N4l-W3{> zLET`B$E;mVhJwp@QLYFsNRCQLns%eRCSb_cOD)bV26+zADl8_Vcn|AGMY|%qlX;zc zvXbS_nbH(*H(x}WxA4mu8?@z}3@uf3dzC^sMNS@a@}1aHfbiq2Kd(4H=3bC{}2O8d^{b6Rb? z%HMgkJSZ;rjn*C*eob2^OK9yOJ?M>vSJ zTkj#xFqW$+0t{NOKyJj?>Q|L2wo4KQ8&a>^bFQDfpOWxT8{f2(QdA2;U^!0peK{oLk#QY;QR+%lx z$ZrlrOM{3?)K!gpil;tC?gNjbu`MPlS;Dr0G6^bXqu^+XpYa=1s)U_LYI(_-H|FIe zd>GyzNC$WlrVvQ2Qaa~#6)uw8EaD+(cnBxeQ8c>REci#9Tb;XOHR9BWS~70mJM@)) zFj}g~4}+dU>erhblikXX8~mY3os!&j08HeR+m!#E=(of7nd#(4q2WdcAeOF<`SxpF zOdn?|RjDx|$u=SWBVrv-`s$**cXs$+fEnutxma*h{~3(jX~PHKXZIWl_7cJ%Wa;>}QdgDPPtzwz zNF0|_vp>OjdIluri*S=->pzg=SRWidc-&IT&g@=3U*!z#{=i;BuaM%+cQk|I<^v&OozI zwCwzx1A0j#L&Cs*(Qf-5q!q<)I`8DkU&;CoE`Go@x$^nOM7G7_`7}LVZ%g(K!XnXM~lc8Dc;qPw|+YH8mvFL zJ~djDEMvE|kaBtY?kzUyfpYu`$bOzs6cHfRIPTYm+P^5UaIh$ zve=$oLk2ha!wOScFpCr2ex9t%U(Z@Mm^H`%v_Fb?z)sA&^9NY|;E0%q0-3cg{776u z@Oa02OCb{Bh^i9>hQc9}r6oF(URvhd;*99?c`6B$D8T@p4E?!CKVh^7Vm{=85F1-s)>)6I>gX4L_;mdxVqIcbVf z>)|sLaSYeMni6T?qY-#1L|i>sEKt;Fm~cZtH6yr~KTDI^d4%anrv2mRS4iBRV6mQw z{>7Rfnn1R^j99&(5;c=cuJ5hYi%9%A`MV@SE{oSDy)na|=WdLPT6jG>^Ct77#j571 zl4X+%9Vv1@z1TcbfyMG}l38mI@|krs#GI}^DmR_I*zZAqd`yx5>vD?&imtUTiwFY= zmII0#xKqy}<~}6+;-uR7_MF8g+is&PXZ5WZdR8>ounTuX!TTgCWYlNR$eSfag;grw z*hRkCF>Aq>N#YC0!b>2v#ApAYgg_`)Ue$u(2f9gr?8Pz&`S!pGHv-Q$j`IIk-dBG` zy>@*g9nwm-I7oM=f-tm%NJ=<#NOwvqHGqP23ZkHdv~nmJy1To(o9CKy&U@eIto8l_ z&w5z=z*?;N<~94;dw*ibNe4(>4j&S**bJ_8XY3ZJ9#QepvvW7$s5~orYz8E0q>Jc@ zf|~C!sHUH~UH}lHbBR^USL{U1Pap&R9)AL(+-Sh1eXzFR0JVgZOe;m31_Qnme@Qq$ zVe=UPek^I0erDvPMys?^ZOFo?Dcy@6limBkm~vN?7$ylHG8ve+ckJk||1i1Ko$z9} zw2Ge)XArc0AJ(`m4;_9+oHRyHZ=WC9YJKQ}5e5{Q@&(QsG>6kyhIeTN&pxjVz0oN& z)MIgH_rKDpzjiO|@Zq`f_cK0xj|ex+r{{6}5pxKf@ViKJ%h;-%HWR-4WZ(DtRis1 zxx&-`(e}mC)nn2-7pgY(6PQ*#_qJ5DnWKrBUlBR)mTW)d#G98Re*A+uxHBuk8uw--J&drKgx3EWskh`UBead^ zd4-RXcKS4u{HtuhtlzOKKI+j%{oQM4eUL7}7I$xpO+~ym-meNk9)=UrC&vEzah8E9 zB_+cas)!0P?fbY`=hn3Su+C#!2lFFO;O;rzs-Rgc4sI(9KgOOb_dzD8pV%gYwpx^u zODdaEr?Ke$^OBwf*ZZF18bqI9oZ>A1!dI7^+mb#Rd*vM4Kd?I+(9mWULuDzZJ>zR@ z60+b<^Wyu# zyR8;?9@_QpNTRl5r*X+Gls1s`NJ=$lRmscUqw=;IN$11hobwznGyf_t#Aq8NPu2fI zF7kD&zEuAc!D}m0NAH$t>vSszM0|nm?e#(QCQfb0iKMPh9B;n8<1`_(YCk zsS)={Vpt}tvvje(hT1-dNTQXjG;})} zQwjNwl}LY!b9~=!=AQ(wH|eV0rRX%umkKx`aokMsr~`OTzpQ!3`w^j^z1%{i0zaY) z?zEv}MA{gFeRcpRV-mfw&fg!Iu&bfoiS8?C(=+ZVwr5e~qSK;Es`PtQ$maWq-2LUK zAttWIgIvXyoZKLJG-_jf0!5$!`~>aKi66LHuA8=^kmlFO1M1e_)=8ynj{QwfAtb}S z74!h<9>56QrKH^kW3(R4Qb+IAx{W@>u0~nhuyXw^Qn@s%f+rHgL56Iy{B|w3=x)l! z#qoxR@acqgOg=QI2HXi_ z6+S>1w#9l(?s776~^VC#Kr2NDDW6y_VIZQMXMyBlr20 zRX{B2uH?8Sn5mMIryl^TZKO90w-XGwDs3l=bCD0mufbwEG%2y#7xw;U)o-R*E{}g5 zwK#L(tB$dPM&lv3XG$T>*RE?&>slz*bLR7iPga}$fCyF=^thQ|JTjfZh~KZI5`=}I z7VJp*eXMP6qlGySM61^xJ;e!K5gDeiG8`oy4Sk8203z0dJZrM{H@H+ z8yw?NE~EF1OJV@Z?{AO1mSn)ghj{Q9Z`BLhH!CVsQcmHOoSJ{kGi`dKNPqW$Vrc}c zU_yR07AH!zA17H07FOwdynf*}8ej?cPM7j)h5hg{+$q*l2um%{=INwc?M->w%^FoX zBRc-h&hTT2{`tUh<(U#HvRDhD*q)ER)t_E^q@|t7xjHJz%1HiA`b~WzQ)*t(UYwz> zmt==~!tjjaI2ax%Ky?CI`t3mb?AClo>E>&MSbMG?9MLhH1Q;?7iM{U*H2B_6Yf zFb$^+gyoi9^>X&afEw|3YclaBOu?unl}E`8`O3FlaGnYne?%mS!q{F+hC zig@>Kisf1f#QY4=)}LvIDPm{9MV6(iG1WcynA=adzj!-Jl}U+yM-1NKIi^b}kD9dH zbz(dV9ZDpH_~+P?Pko!`1qtFD3(>Ro?%%oW%+~We&VtYBYEtq8L&&zd$O*V{9zB#> zB^C@~M5UX(8@ItI8@6VA(`U#Oz?(DZ=t-Pje?Pc~jMz0#I1$ER27l0&Od?~(5*QJ@Pp3w6L$8YNA$ z=xa;5`)8Y7xg0rTpI3G8ont?zdHrzO7_uH!jIgKg;fJu!gl)pFnb|DqMj3H8U01%V z>pQ2gpjD`f^*a8M?%=qONLEPgtHzp0R`^97?YqvM+yB}j&D-{*YJOTcs(ZVNgi>6t z_S$KsU&zx_{7{6TP}w!j%aBwr({YB1Os_7wJ>&FvNAjC|tnk25l5T_wpwB_8(NQ=0 zjK}%4o($fP8~T7y-guY$P_g66*?x9ZY1c+q5T{r~Nps{QcQ(W(K+t7KUs-qyOt|6I z`0z(pK4h>vcY=-W*fEis$0Sfbkl5&@EnW1223Oa%2+a~O;CM#PHqR|CcR3Gle(87o zynMeM60Mm_2UUd&n#Fku#MZ_YP!e0b295vJ4eI?P6m^oKc`E9P9Xlpdc+niigiMNv z?e5R(O0gT`)FZn!Qf6+#?v}@@P~*Tsn{_mK$YUgnkP_8n z*2w4~8>k=>-)8!fJbmCfLA?J~;U0O**}8^B(%2eTZS=kxh8|ijBC5uew3LAwwN4q8 zc@8TmQ1s|Uf@R`+^O?j$pZxY3dio@nuLfs?U#+ZYYs?Sb|Rn z%zV%73g|0dgp;Uk0o=OCD*-U63aFg(o&-aPHEi>6gL5wcME-Hjli)*7mIPh8j{$Kx z1wMk&-icqrH1G(Mx*X8aunvGN#%9kO9n^$=m=ox{dyf-8kjHjcXjwuTXKwxY$4Apy zzti;bZRcu#c_qm$ZJg`%5FFC3ous(Y@8mT4VANMibWE`)qs}bD|HDU(uCPW4h{vez~iaon2 z42m}wC*Cee(HX9@Dm6qY`kMEJ^j`b#ax1F6>_s6yI8_p@TF%L<{`JA|X1NMlOTK@P zsmXD{vg>0u0f#%SFK~M?2iz#qdO&&@auYwaA?*SbPc9*ex2?b(bE-JD{@q~hc7>iR<8|M)@Be&PP0Ta7O zGTcu6r2}bn0MirWm6TA=G1pJPkcH3Z#BO*YS9*~pDrp2F8#?IteXURY?H)f4dWMX4 zjPINQEc&kwCqS!Ah%c5XJC)kvmW7XQ_0NRknUlxME{-a(SK~7#n6s^MpNfzTCxzjE z->d>`6qgUfGKlD>un3gq`IZGOcI8sHr|vWa;xPIMkwwBE>z=rQZBp*cAql^xV7(>r z6e=`onNpwP6X;c2F*pPcD}jlQ{8+^AONom}t6H}eC;!}WC}!PD{oq_%!9w^_!&dDb zgVuA0WnqyO_3IwnZOb|@f{R@X_+lV=nm0#Eg_w^@Vpsrf4$r*(sPym{yKA$n&{KPMc~8)JbR zn~5Cf^)9X?_9?=~ny@MJ#wH9i4|X}72rfvd-XbJgFg^zA2-sy0v{4Y_qx--$#3*E> zX^HWqa<%JCcbq)?3?M*!XekoX*at9u3cmiAFGUy^ULqA>W^j}vD>M6}U=Cg#rbUiG z7SvBFCzu8I1q(UT#r4GKV{19DWD^Ms9_zrmGcWA*R_jzLvHal_Ueq)m9Js+n2r8x{ zs5FjV^dS80YOI`Hgu%|5|o3!r~PZiYQLbcwc_=KCPh5`}V<~+Luv} zglN*fby7ifq~o8%Wc5@BLnCn#@KtnaNGX*^tx**m}kX z6+F~M1hSBg^z{Pkbj{e@C~itZXWia(am35kQ*^btg3M98o4)_vx-x?f%>`VUWvOF) zI{qR?xVx2Au?v&(#ZpuMGKuqy(agM13zdb-{UvCX<~;*UeFvCvp=G7K0#yr`i2YTH zmK4QqA!N5crunV>##6h95a=1Q+->EYU4yW}_hs-1f}^l%{o0(fo`<`{9y#jTZCXIL zu@Q9MUL2aCxly(IF*i%X$!2uIi2m1di>n{IHQ-frVY`nkyYruyBj#FO*;SKeI!$FX z3u+AS8qHJ&dmIsO;=6Oy-LBAd zM-8p4blSBuJL&XAwpX|cW~##c`ePNU5lA2-+3>)Bo;mo#Awwog>}XVT^@BF#^lH3Y zmbpF7T=?j~W+WxPOa`mw%ms^-Af~!}4L{V2K?hsrHbdOQ!Eb?B3xDA)HnSqq`J}g9 zO{JpS`@f(JLpE`QM!1w>`{>fd2N!4i&f_2P4tr0cDsMKDr%B3QhfP}3MWUhJ$lWex z8Q8`D7o&qVgf>Kf6*Iz}-pYn0v$cN+zFqlrs?mP`K{F11-5^4bE(Q-(L(yv?N8K*r zpC3z?iIQKNPF>RY7lOqQBtsn0kL{Nw*6#h!dj@|`;q+yDtTyHT6Ek8ax(8qVX+rX)f-uYC=DCdS_TAwLS1#knq?s&=UKOZGC(JoF%t2SY8rZl&@^z{$lt9`^oOBsFQw6hi% z0UrlUoRr?(V+Dd0Wb1JTjGQv~<^hZiGy%rs1@`yXHC#IXcr)P8rHbH`-glYcYLaQ^ z50w*pWPVGubr*r za_6J9e(2_$;=k5ZL@c`5P&OhEZFxx8s!zswrHd8NcoM-*!q%zzN$Kf&*DI!HUv)Uo zZ!UKwul8vZP;CJ-xt#u74Rp}dv0>26m(J7fsj!|jy@7mH_V$E_qbx4_c|MKP(Y8$F z+(z$_MEufM2xi|~e^I9cm}BhQUr0_ykemvV;a7qmqD81G#R2H^7cohInm>J5<1k%2 z@JB#E^wc7KVcY`+8@U_6g&pAoQTK~0f67h53Vksu1}+pZpOHNIff^S}uRK%P8cuaO zYv9u)U^4`L=H8tmC`K&eb5f*|E;dZs{o1Od{_3FfB5w|m0u#Y-Yei4bYKi?8Qq3Y= zUP>w7kb9i^a)6`F46u=$~N7TV;WFNX zRy9bEH<8I^^P$fgRB@ncOZ8XClX{h}vLTUW;=QN>>-wnCk;wVg9EofJymdb<;BvdF zLP~{#hp{bF`VUd^d<4UCdon+AM2GSy!Pa!$i`YZZiEEGskMrJpDhtNzPn}6!x5m=c z3jS3z(*9{ZKLgHkp5u}-mtedq!E`A>NM`*7V55@<>AvklQ|x%pYM$p*>+@?bheq0o zY2rN?f&Ks)L*?h`y_Sg27b3Y~O(8f`cLKIb5zIAjg*bIfWWYGsZ2J$aTJk#pTTT|R zju#sPV`v7T;#51pA$e=6M(e>^y%;LO4?JsRzTf$tRSQWGH~^R=^ow?3-q+-hCT~y- zYMeh5;O1?pqzGsqpX*vFgDPk*Q)Zv!A+yJ~sg?Fg`No9O&s)G)5uPGwEB`!d^_rQ; ze=d+lH~?{%mJyA95|263bjBme)!Kn6_^{eu)?2)JkgHN8v z&Lb0b`2=sJnSfhAr10VsI97(s75Hw?rK03CIj&UMO)n(z@76&wYVMQW@5d?ODn(g`h2b8w{Fg9Q2+Ju8`8uPiUFV>{~y zgl-B3b#ml(RCj!B^;Zw0^^fUl%_}%ENLpcpji!G`yO5JV4jT~iiZ;Ieo7@w`@LMo$Xtj`-C*}vb< zEjm+JG1}OyjM(AYNMkV8FpdH`P1w`QJ_NwQpZ)PlgM;k*lgk(mVSsTBFM0+w&sICV zD%2@X@eeDX{cbEx3FJB}nPA@QJ2mWQWaHL*w4`?^X7*_jal8H9tUKcCpKI})(c?SbpJ3h0h zLzvZ1w;`vQ%eqOy`j~7$RSdX3ei5W)db|HL-SL_4aqkO12{qKWaVTU>`O2wk{Kaw} zSG*OE$RaoQZ+V$rfZ!v#*I}8r&_Vk8NGrWs{IsTo{O5iv^&37wbgKxL*wuy2f^nDK zO%=e=$L~vZJI51RVTUxXBLpnl@A9OUU1$W85haKvveX_(!jiNsjEKnFT7|qS6_9t( z|A6QfvG-OBm6au(Y-ESV$#U1CegXgP2`z$&Ut~jfs?Ph^#_!29Ku!u03IN>UjLyC= z5AloyNd&bi#4&ECr3} zvUAZ~kg~)me~iQE|0^e25DubnSzA0Ud0p=Tp9OoNyk;uC9vp-k`}&KGuc_bRFXCmG zASep=Q{|_>cqzYT`pV6xN04@ws}PGjFlFXpV>K0fB|hJ9dk7!Z{${8*iZF@AEg1f0 zWS}(>78+W37~L+laZm~D`Z}5krR_AQARhqwZF6C$!VIUh1(t*v3u7$=d`~D)aeyab zUxjR2M(DLjnPu;{Mzp-)&?782*R3%Pq?icrwExzif?r-ab9U1LHC&6f8y$wAE}JWT54Jgl@?|JWt;0q=e;IFNr}W?Zf;9G@D}t_4XlpXIKbe+TB-DQ@Z%V=Vhp(s;u1 z0euIkt=M*(rN~FJziZ@%F?=PX@c@kUlJQe--!EtfE2rkzZ~C43PVB;h7rU zSxl3GA~O?SOU|j!d^YpVNL(?IBbmdXQYF*Qq*xQw$8L+_23TYxW|sDU%V8E6!IRvd zvWqukv7c_K*>8y$ z|FUS=@6v^WM& zooWv&azD-s&&S1eW2ilLBF7m06!SFVFX}SUA2^QegJ*sLW8x&xKJ=#3-4_J{@Zcl& znO}d@RaDq-3Qgzrtas&3E&PsrSQD4dP~HWi?QjjC&lb9_^);5yVz?K|Luf?CfSZ?wTI#$ApM_qtr2$#yw&<1%SY`x9S(jb>y=xA&Al(~b!2pC@k|T^d&E}Hx zY2b2)R=darxm&FO;Cf`DdZxN0o#s!Ep9C6SDs2ATat zNyqeO+JTL7M}7?rCGI)c@uwt$iVcK1?Q33Z>2-FGlK8w}qT1ay6gMFJ!5>>YJrSvB zNk@u3MLI?O_Zq)q0c-qb_Q44pokSprltmr43~>)6H~cf`HYNSzc5Kh=AtB!Ialj@% zML+#p9Y}PG^URs_c9+-(iu(4=|I3&lom~W@5w1CbM2KKH7~n|+_~?gggj%|(fTK=(uI_3OlxZOG!ZV#F4Q4|XfPp7I3PZ`O-iy~@3Xj}{v zH~1%slOZUO2!uMKsG^X6loyIn$e^vDi4uDG Date: Fri, 27 Sep 2024 08:45:15 +0100 Subject: [PATCH 055/124] update docs --- .../1-Configure-Terraform-Remote-Storage.md | 1 + .../1-Create-ACR.md | 57 ++++++--- .../2-Create-VNET.md | 77 +++++++++---- .../3-Create-Log-Analytics.md | 56 ++++++--- .../4-Create-AKS-Cluster-IAM-Roles.md | 81 +++++++++---- .../5-Run-CICD-For-AKS-Cluster.md | 108 ++++++++++-------- .../images/4-aks.png | Bin 0 -> 145714 bytes .../images/acr.png | Bin 0 -> 101994 bytes .../images/la.png | Bin 0 -> 135643 bytes .../images/vnet.png | Bin 0 -> 121179 bytes 10 files changed, 261 insertions(+), 119 deletions(-) create mode 100644 2-Terraform-AZURE-Services-Creation/images/4-aks.png create mode 100644 2-Terraform-AZURE-Services-Creation/images/acr.png create mode 100644 2-Terraform-AZURE-Services-Creation/images/la.png create mode 100644 2-Terraform-AZURE-Services-Creation/images/vnet.png diff --git a/1-Azure/1-Configure-Terraform-Remote-Storage.md b/1-Azure/1-Configure-Terraform-Remote-Storage.md index 0185424..1384529 100644 --- a/1-Azure/1-Configure-Terraform-Remote-Storage.md +++ b/1-Azure/1-Configure-Terraform-Remote-Storage.md @@ -1,5 +1,6 @@ # Configure Storage Account for Terraform State File +## 🎯 Purpose In this lab, you'll create a secure location to store the remote Terraform State file. This is crucial for maintaining consistency and collaboration in your infrastructure-as-code projects. ## 🛠️ Create Blob Storage for Terraform State File diff --git a/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md index a0ae5e3..f3c05ae 100644 --- a/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md +++ b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -1,20 +1,51 @@ # Create an Azure Container Registry Repository -Before proceeding, ensure that the values in the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/1-acr/terraform.tfvars) file are accurate for your environment. You may need to customise these values to match your specific configuration and ensure are unique. +## 🎯 Purpose +In this lab, you'll create a repository in Azure Container Registry (ACR) to store the Docker image for the thomasthorntoncloud app. -In this lab you will create a repository to store the Docker image that you created for the Uber app. +## 🛠️ Create the ACR Terraform Configuration -## Create the ACR Terraform Configuration +### Prerequisites +- [ ] Terraform installed +- [ ] Basic understanding of Terraform and ACR concepts -1. You can find the Terraform configuration for Azure Container Registry (ACR) [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/1-acr). The Terraform configuration files are used to create a repository in Azure Container Registry (ACR). +## Steps -The Terraform `acr.tf` will: -- Use a Terraform backend to store the `.tfstate` in an Azure Storage Account -- Use the `uksouth` region, but feel free to change that if you'd like -- Use the `azurerm_resource_group` Terraform resource to create a new Resource Group. -- Use the `azurerm_container_registry` Terraform resource to create a new ACR. +1. **Review and Change Terraform .tfvars** + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/1-acr/terraform.tfvars) file. + - Ensure all values are accurate for your environment and unique. -2. Create the ACR by running the following: -- `terraform init` - To initialize the working directory and pull down the provider -- `terraform plan` - To go through a "check" and confirm the configurations are valid -- `terraform apply` - To create the resource \ No newline at end of file +2. **Understand the Terraform Configuration** + Review the [ACR Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/1-acr). The `acr.tf` file will: + - [ ] Use a Terraform backend to store the `.tfstate` in an Azure Storage Account + - [ ] Use the `uksouth` region (can change if desired) + - [ ] Create a new Resource Group using `azurerm_resource_group` + - [ ] Create a new ACR using `azurerm_container_registry` + +3. **Create the ACR** + Run the following commands in your terminal: + ```bash + terraform init + terraform plan + terraform apply + +## 🧠 Knowledge Check +After creating the ACR, consider these questions: + +1. Why is it beneficial to use Terraform for creating cloud resources like ACR? +2. How does storing the Terraform state in Azure Storage Account help in team environments? +3. What are the advantages of using ACR over other container registry options? + +## 🔍 Verification +To ensure the ACR was created successfully: +1. Log into the [Azure Portal](https://portal.azure.com) +2. Navigate to ACR in the [Azure Portal](https://portal.azure.com/#browse/Microsoft.ContainerRegistry%2Fregistries) +3. Look for your newly created ACR +4. Verify its properties match your Terraform configuration + +Example screenshot of the Terraform apply command: + +![](images/acr.png) + +## 💡 Pro Tip +Consider setting up replication for your ACR to improve pull performance in different regions. You can add this to your Terraform configuration for automated setup. diff --git a/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md index 4e0145f..68478a4 100644 --- a/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -1,33 +1,64 @@ # Create an Azure VNET -Before proceeding, ensure that the values in the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/2-vnet/terraform.tfvars) file are accurate for your environment. You may need to customise these values to match your specific configuration. +## 🎯 Purpose +In this lab, you'll set up the networking infrastructure for your AKS deployment, including a Virtual Network (VNET), Network Security Group (NSG), and Azure Application Gateway for Containers. -In this lab you will: -- Create a Virtual Network (VNET) that will be used to deploy your AKS instance into -- Create a Network Security Group (NSG) and assign to the relevant subnets -- Create an Azure Application Gateway for Containers and associate it with the VNET +## 🛠️ Create the Azure VNET Terraform Configuration -## Create the Azure VNET Terraform Configuration +### Prerequisites +- [ ] Basic understanding of Azure networking concepts -1. You can find the Terraform configuration for Azure Virtual Network [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/2-vnet). The Terraform configuration files are used to create an Azure Vitual Network. +### Steps -The Terraform `vnet.tf` will: -- Use a Terraform backend to store the `.tfstate` in an Azure Storage Account -- Use the `azurerm_virtual_network` Terraform resource to create a VNET. -- Use the `azurerm_subnet` Terraform resource to create relevant subnets. -- Use the `uksouth` region, but feel free to change that if you'd like +1. **Review and Change Terraform .tfvars** + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/2-vnet/terraform.tfvars) file. + - Ensure all values are accurate for your environment. -The Terraform `nsg.tf` will: -- Use the `azurerm_network_security_group` Terraform resource to create a NSG. -- Use the `azurerm_subnet_network_security_group_association` Terraform resource to associate the NSG to the relevant subnets. +2. **Understand the Terraform Configuration** + Review the [VNET Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/2-vnet). The configuration includes: -The Terraform `alb.tf` will: -- Use the `azurerm_application_load_balancer` Terraform resource to create an Azure Application Gateway for Containers. -- Use the `azurerm_application_load_balancer_subnet_association` Terraform resource to associate the Azure Application Gateway with the VNET. -- Use the `azurerm_application_load_balancer_frontend` Terraform resource to create a frontend for the Azure Application Gateway. + **vnet.tf:** + - [ ] Uses a Terraform backend to store the `.tfstate` in Azure Storage + - [ ] Creates a VNET using `azurerm_virtual_network` + - [ ] Creates subnets using `azurerm_subnet` + - [ ] Uses the `uksouth` region (can change if desired) + **nsg.tf:** + - [ ] Creates a NSG using `azurerm_network_security_group` + - [ ] Associates NSG to subnets using `azurerm_subnet_network_security_group_association` -2. Create the VNET, NSG & Azure Application Gateway for Containers by running the following: -- `terraform init` - To initialize the working directory and pull down the provider -- `terraform plan` - To go through a "check" and confirm the configurations are valid -- `terraform apply` - To create the resource \ No newline at end of file + **alb.tf:** + - [ ] Creates an Azure Application Gateway for Containers using `azurerm_application_load_balancer` + - [ ] Associates the Gateway with VNET using `azurerm_application_load_balancer_subnet_association` + - [ ] Creates a frontend for the Gateway using `azurerm_application_load_balancer_frontend` + +3. **Create the Resources** + Run the following commands in your terminal: + ```bash + terraform init + terraform plan + terraform apply + + +## 🧠 Knowledge Check + +After creating the resources, consider these questions: +1. Why is it important to plan your VNET and subnet structure before deployment? +2. How does the NSG enhance the security of your AKS deployment? +3. What benefits does the Azure Application Gateway for Containers provide? + +## 🔍 Verification + +To ensure the resources were created successfully: +1. Log into the [Azure Portal](https://portal.azure.com) +2. Navigate to the Resource Group +3. Verify the presence of the VNET, NSG, and Application Gateway for Containers: + +Example screenshot of created resources: + +![](images/vnet.png) + + +## 💡 Pro Tip + +Consider using [Azure Network Watcher](https://learn.microsoft.com/en-us/azure/network-watcher/network-watcher-overview) to visualise and diagnose your network topology and connectivity issues. diff --git a/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index a3368ff..dace85f 100644 --- a/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -1,20 +1,50 @@ # Create an Azure Log Analytics Workspace -Before proceeding, ensure that the values in the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars) file are accurate for your environment. You may need to customize these values to match your specific configuration. +## 🎯 Purpose +In this lab, you'll create a Log Analytics workspace to view container insights of your AKS Cluster. -In this lab you will create a Log Analytics workspace that will be used to view container insights of your AKS Cluster +## 🛠️ Create the Log Analytics Workspace Terraform Configuration -## Create the Log Analytics Workspace Terraform Configuration +### Prerequisites +- [ ] Basic understanding of Azure Log Analytics -1. You can find the Terraform configuration for Log Analytics [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/3-log-analytics). The Terraform configuration files are used to create the Log Analytiocs workspace. +### Steps -The Terraform `la.tf` will: -- Use a Terraform backend to store the `.tfstate` in an Azure Storage Account -- Use the `azurerm_log_analytics_workspace` Terraform resource to create a Log Analytics workspace. -- Use the `azurerm_log_analytics_solution` Terraform resource to enable the Log Analytics solution ContainerInsights. -- Use the `uksouth` region, but feel free to change that if you'd like +1. **Review and Change Terraform .tfvars** + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars) file. + - Ensure all values are accurate for your environment. -2. Create the Log Analytics Workspace by running the following: -- `terraform init` - To initialize the working directory and pull down the provider -- `terraform plan` - To go through a "check" and confirm the configurations are valid -- `terraform apply` - To create the resource +2. **Understand the Terraform Configuration** + Review the [Log Analytics Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/3-log-analytics). The `la.tf` file will: + - [ ] Use a Terraform backend to store the `.tfstate` in an Azure Storage Account + - [ ] Create a Log Analytics workspace using `azurerm_log_analytics_workspace` + - [ ] Enable the ContainerInsights solution using `azurerm_log_analytics_solution` + - [ ] Use the `uksouth` region (can change if desired) + +3. **Create the Log Analytics Workspace** + Run the following commands in your terminal: + ```bash + terraform init + terraform plan + terraform apply + +## 🧠 Knowledge Check + +After creating the Log Analytics workspace, consider these questions: +1. Why is Log Analytics important for managing AKS clusters? +2. How does the ContainerInsights solution enhance your ability to monitor AKS? +3. What types of insights can you gain from Log Analytics in an AKS context? + +## 🔍 Verification +To ensure the resources were created successfully: +1. Log into the [Azure Portal](https://portal.azure.com) +2. Navigate to the Resource Group +3. Verify the presence of the Log Analytics workspace and ContainerInsights solution: + +Example screenshot of created resources: + +![](images/la.png) + +## 💡 Pro Tip + +Consider setting up [custom dashboards](https://azure.microsoft.com/en-gb/free/search/?ef_id=_k_Cj0KCQjwr9m3BhDHARIsANut04aW1Bkx-AcJ5QGbPg_zxVIQw_txn1OWbyl-KpP1uzi0WxsLeZHjZDEaAmGcEALw_wcB_k_&OCID=AIDcmm3bvqzxp1_SEM__k_Cj0KCQjwr9m3BhDHARIsANut04aW1Bkx-AcJ5QGbPg_zxVIQw_txn1OWbyl-KpP1uzi0WxsLeZHjZDEaAmGcEALw_wcB_k_&gad_source=1&gclid=Cj0KCQjwr9m3BhDHARIsANut04aW1Bkx-AcJ5QGbPg_zxVIQw_txn1OWbyl-KpP1uzi0WxsLeZHjZDEaAmGcEALw_wcB) in Azure Portal using the data collected by Log Analytics to get quick insights into your AKS cluster's performance and health. diff --git a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index 6e0dbcc..132fa4e 100644 --- a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -1,31 +1,70 @@ # Create An AKS Cluster and IAM Roles -Before proceeding, ensure that the values in the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars) file are accurate for your environment. You may need to customise these values to match your specific configuration. +## 🎯 Purpose +In this lab, you'll create an Azure Kubernetes Service (AKS) cluster and set up the necessary Identity and Access Management (IAM) roles. -In this lab you will create: -- The AKS cluster -- The appropriate IAM roles for AKS +## 🛠️ Create the AKS Terraform Configuration -## Create the AKS Terraform Configuration +### Prerequisites +- [ ] Basic understanding of AKS and Azure IAM concepts +- [ ] Completed previous labs (VNET, Log Analytics) -1. You can find the Terraform configuration for AKS [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/AKS). The Terraform configuration files are used to create an AKS cluster and IAM Role/Policy for AKS. +### Steps -The Terraform `aks.tf` will: -- Use the `azurerm_kubernetes_cluster` Terraform resource to AKS Cluster -- Use the `azurerm_role_assignment` Terraform resource to create the two neccessary role assignments -- Use the `uksouth` region, but feel free to change that if you'd like +1. **Review and Change Terraform .tfvars** + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars) file. + - Ensure all values are accurate for your environment. -The Terraform `managed_identity.tf` will: -- Use the `azurerm_user_assigned_identity` Terraform resource to create a user assigned identity as part of the Azure Application Gateway for Containers setup -- Use the `azurerm_federated_identity_credential` Terraform resource to create a federated identity credential as part of the Azure Application Gateway for Containers setup +2. **Understand the Terraform Configuration** + Review the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/4-aks). The configuration includes: -The Terraform `rbac.tf` will: -- Use the `azurerm_role_assignment` Terraform resource to create the necessary role assignments for the AKS cluster -- Use the `azurerm_role_definition` Terraform resource to create the necessary role definitions for the AKS cluster + **aks.tf:** + - [ ] Creates AKS Cluster using `azurerm_kubernetes_cluster` + - [ ] Sets up role assignments using `azurerm_role_assignment` + - [ ] Uses the `uksouth` region (can change if desired) -2. In line 8 of `terraform.tfvars` replace the actual Azure AD Group ID you noted down [earlier](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/2-Create-Azure-AD-Group-AKS-Admins.md) + **managed_identity.tf:** + - [ ] Creates user assigned identity using `azurerm_user_assigned_identity` + - [ ] Sets up federated identity credential using `azurerm_federated_identity_credential` -3. Create the bucket by running the following: -- `terraform init` - To initialize the working directory and pull down the provider -- `terraform plan` - To go through a "check" and confirm the configurations are valid -- `terraform apply` - To create the resource + **rbac.tf:** + - [ ] Creates role assignments using `azurerm_role_assignment` + - [ ] Defines role definitions using `azurerm_role_definition` + +3. **Update Azure AD Group ID** + - In `terraform.tfvars`, replace line 8 with the Azure AD Group ID you noted down [earlier](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/2-Create-Azure-AD-Group-AKS-Admins.md). + +4. **Create the AKS Cluster and IAM Roles** + Run the following commands in your terminal: + ```bash + terraform init + terraform plan + terraform apply + + + + + +## 🧠 Knowledge Check + +After creating the AKS cluster and IAM roles, consider these questions: +1. Why is it important to use managed identities with AKS? +2. How does RBAC enhance the security of your AKS cluster? +3. What are the benefits of using federated identity credentials? + +## 🔍 Verification + +To ensure the resources were created successfully: +1. Log into the [Azure Portal](https://portal.azure.com) +2. Navigate to the Resource Group +3. Verify the presence of the AKS cluster +4. Verify the cluster properties and node pool configuration +5. Check the IAM settings to confirm the role assignments + +Example screenshot of created resources: + +![](images/aks.png) + +## 💡 Pro Tip + +Consider enabling Azure Policy for Kubernetes to enforce organisational standards and assess compliance at scale for your AKS clusters. \ No newline at end of file diff --git a/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index 6df6a90..41ea548 100644 --- a/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -1,49 +1,59 @@ -# Create AKS Cluster With CICD - -Before proceeding, ensure that the values in the terraform.tfvars file are accurate for your environment. You may need to customize these values to match your specific configuration. - -In this lab, you'll learn how to create an AKS cluster using GitHub Actions. The code can be found [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/4-aks) - -## Secrets -Prior to running the pipeline, you'll need to set up authentication from GitHub to Azure. To do that, you'll setup an Azure Service Principal. - -Using the below Az CLI (Note Down Secret): - -`az ad sp create-for-rbac --name devopsthehardway` - -Alternatively - [this can be done via Azure Portal](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal) - -You'll need both the clientID of the service principal and secret that was created. - -Please Note: The Service Principal needs IAM permission to the subscription/resource group to where the Azure resources are deployed. In this example, I gave **contributor** access to the **subscription**. See examples on how to [assign an Azure Role here](https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-steps) - -You'll be adding 4 secrets into the GitHub repository. These four secrets will allow you to connect to Azure from GitHub Actions. - -1. In the code repository, go to Settings --> Secrets -2. Add in four secrets: - -- `AZURE_AD_CLIENT_ID` – Will be the service principal ID from above -- `AZURE_AD_CLIENT_SECRET` – The secret that was created as part of the Azure Service Principal -- `AZURE_AD_TENANT_ID` – The Azure AD tenant ID to where the service principal was created -- `AZURE_SUBSCRIPTION_ID` – Subscription ID of where you want to deploy the Terraform - -3. Save the secrets. - -## Pipeline -Now that the secrets are created, it's time to create the pipeline. - -1. Under the GitHub repository, click on the **Actions** tab -2. You will see a workflow already called `CI` -3. Select `CI` workflow and then select `Run workflow` `from` main branch (Also note, the pipeline is configured to run also during a Pull Request and or a Push to the main branch) - -The pipeline does a few things: -- On line 10, you'll see `workflow_dispatch`, which means the pipeline won't automatically run unless you kick it off. You can of course change this to have the pipeline automatically run if you, for example, push code to the `dev` or `main` branch. -- The code is checked-out -- Authentication occurs to Azure -- Terraform is set up -- Terraform format occurs & formats incorrect terraform, then pushes back into the branch -- Terraform init occurs -- Terraform plan occurs -- Terraform apply occurs - -4. Run the pipeline and watch as the pipeline automatically create the AKS cluster +# Create AKS Cluster With CI/CD + +## 🎯 Purpose +In this lab, you'll learn how to create an Azure Kubernetes Service (AKS) cluster using GitHub Actions for continuous integration and continuous deployment (CI/CD). + +## 🛠️ Setup and Configuration + +### Prerequisites +- [ ] Basic understanding of Terraform and GitHub Actions + + +### Steps + +1. **Review and Customise Variables** + - Open the `terraform.tfvars` file in the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/4-aks). + - Ensure all values are accurate for your environment. + +2. **Set Up Azure Service Principal** + Create an Azure Service Principal using one of these methods: + - Azure CLI: + ```bash + az ad sp create-for-rbac --name devopsthehardway + ``` + - [Azure Portal](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal) + + **Note**: Assign appropriate IAM permissions (e.g., Contributor access to the subscription) to the Service Principal. + +3. **Configure GitHub Secrets** + Add the following secrets to your GitHub repository (Settings > Secrets): + - `AZURE_AD_CLIENT_ID`: Service principal ID + - `AZURE_AD_CLIENT_SECRET`: Service principal secret + - `AZURE_AD_TENANT_ID`: Azure AD tenant ID + - `AZURE_SUBSCRIPTION_ID`: Target Azure subscription ID + +4. **Set Up GitHub Actions Workflow** + - Navigate to the Actions tab in your GitHub repository. + - Select the existing `CI` workflow. + - Choose to run the workflow from the main branch. + +### 🧠 Understanding the Workflow +The GitHub Actions workflow: +- [ ] Triggers manually (`workflow_dispatch`) or on pull requests/pushes to main +- [ ] Checks out the code +- [ ] Authenticates with Azure +- [ ] Sets up Terraform +- [ ] Formats and validates Terraform code +- [ ] Initialises Terraform +- [ ] Plans the Terraform changes +- [ ] Applies the Terraform configuration to create the AKS cluster + +## 🔍 Verification +After running the workflow: +1. Check the GitHub Actions logs for successful completion. +2. Log into the [Azure Portal](https://portal.azure.com) +3. Navigate to Kubernetes services +4. Verify that your new AKS cluster has been updated or created. + +## 💡 Pro Tip +Consider using separate state files for different environments (dev, staging, production) to manage multiple AKS clusters and environments efficiently diff --git a/2-Terraform-AZURE-Services-Creation/images/4-aks.png b/2-Terraform-AZURE-Services-Creation/images/4-aks.png new file mode 100644 index 0000000000000000000000000000000000000000..f881f40dbff3ea9d8ed25e66fedf31f1a4ab3b73 GIT binary patch literal 145714 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 #hc|cG-!vC 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 literal 0 HcmV?d00001 diff --git a/2-Terraform-AZURE-Services-Creation/images/la.png b/2-Terraform-AZURE-Services-Creation/images/la.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c8ebdcb645cc22416f531b446aa60a3cc8f287 GIT binary patch literal 135643 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 z%0D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 U!Udl@eP;jyPgg&ebxsLQ09C>1+yDRo literal 0 HcmV?d00001 diff --git a/2-Terraform-AZURE-Services-Creation/images/vnet.png b/2-Terraform-AZURE-Services-Creation/images/vnet.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd0e24d5d5e2d2e48c2819934571d784eaa2572 GIT binary patch literal 121179 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 Date: Fri, 27 Sep 2024 09:01:42 +0100 Subject: [PATCH 056/124] doc updates --- 3-Docker/1-Create-Docker-Image.md | 91 ++++++++++++++++++++++-------- 3-Docker/2-Push Image To ACR.md | 57 +++++++++++++++---- 3-Docker/images/acr.png | Bin 0 -> 44552 bytes 3 files changed, 111 insertions(+), 37 deletions(-) create mode 100644 3-Docker/images/acr.png diff --git a/3-Docker/1-Create-Docker-Image.md b/3-Docker/1-Create-Docker-Image.md index 32a8118..d981651 100644 --- a/3-Docker/1-Create-Docker-Image.md +++ b/3-Docker/1-Create-Docker-Image.md @@ -1,44 +1,85 @@ -# Creating the Docker image for the Uber app +# Creating the Docker Image for the Thomasthorntoncloud App -In this lab you will create a Docker image to containerize the Uber app. +## 🎯 Purpose +In this lab, you'll create a Docker image to containerise the Thomasthorntoncloud app and run it locally. -## Create The Docker Image +## 🛠️ Create The Docker Image -1. `cd` into the *Docker* directory where you will see a *Dockerfile* and *app* directory. The app directory is what stores the Python application and the Dockerfile will be used to build the app. +### Prerequisites +- [ ] Docker installed and running +- [ ] Basic understanding of Docker concepts -2. Open the Dockerfile +### Steps -3. Within the Dockerfile, you'll see a few key components - - The Docker image that's being used is Python. It's using the latest version - - There's a new directory being created called `/build`, which is where the Python app will reside - - The *app* directory will be copied into the `/build` directory, along with the `requirements.txt` file to install all of the Python requirements for the app - - The app will run as soon as the container gets created and comes up +1. **Navigate to the Docker Directory** -4. To create the Docker image, you'll run the following command: -`docker build -t thomasthorntoncloud .` + ```bash + cd Docker + ``` -Please note, you want to run the below docker command instead, if the above does not work: -`docker build --platform=linux/amd64 -t thomasthorntoncloud .` +You should see a `Dockerfile` and an `app` directory -This command is similar to the first one, but it includes the `--platform` option. The` --platform` option allows you to specify the target platform for the Docker image. In this case, it specifies the platform as `linux/amd64`, which means the image will be built for the AMD64 architecture running Linux. This option is useful when building multi-platform images that can run on different architectures. +2. Review the Dockerfile -The `-t` is for the tag (the name) of the Docker image and the `.` is telling the Docker CLI that the Dockerfile is in the current directory +Open the Dockerfile and note its key components: +- [ ] Uses the latest Python image as base +- [ ] Creates a `/build` directory for the app +- [ ] Copies the `app` directory and `requirements.txt` into `/build` +- [ ] Configures the container to run the app on startup -5. After the Docker image is created, run the following command to confirm the Docker image is on your machine. -`docker image ls` +3. Build the Docker Image +Run one of the following commands: -## Run The Docker Image Locally + ```bash + docker build -t thomasthorntoncloud . + ``` +Or, if the above doesn't work: -Now that the Docker image is created, you can run the container locally just to confirm it'll work and not crash. + ```bash + docker build --platform=linux/amd64 -t thomasthorntoncloud . + ``` -1. To run the Docker container, run the following command: -`docker run -tid thomasthorntoncloud` +> 🔍 **Note**: The --platform option specifies the target platform as linux/amd64, useful for multi-platform images. +4. Verify the Docker Image + + ```bash + docker image ls + ``` + +## 🏃‍♂️ Run The Docker Image Locally + +1. **Run the Docker Container** + + ```bash + docker run -tid thomasthorntoncloud + ``` - `t` enables a TTY console. - `i` enables an interactive session. - `d` detaches the terminal from the Docker container. -2. Confirm that the Docker container is running by running the following command: -`docker container ls` +2. **Confirm the Container is Running** + + ```bash + docker container ls + ``` + +You should see the container running successfully. + +## 🧠 Knowledge Check + +After creating and running the Docker image, consider these questions: +1. Why do we use the `-t` flag when building the Docker image? +2. What's the purpose of the `--platform` option in the build command? +3. How does running the container with `-tid` flags differ from running it without these flags? + +## 🔍 Verification + +To ensure the Docker image was created and is running successfully: +1. Check that the image appears in the output of `docker image ls` +2. Verify that the container is listed and in the "Up" state when you run `docker container ls` + + +## 💡 Pro Tip -You should now see the container running successfully. \ No newline at end of file +Consider using Docker Compose for more complex applications with multiple services. It simplifies the process of running multi-container Docker applications. \ No newline at end of file diff --git a/3-Docker/2-Push Image To ACR.md b/3-Docker/2-Push Image To ACR.md index 7030316..2a7c61e 100644 --- a/3-Docker/2-Push Image To ACR.md +++ b/3-Docker/2-Push Image To ACR.md @@ -1,20 +1,53 @@ -# Push Image To ACR +# Push Image To Azure Container Registry (ACR) -The ACR repo will be where you store the Docker image that you created on your local computer in step 1. +## 🎯 Purpose +In this lab, you'll push the Docker image you created locally to Azure Container Registry (ACR). -Ensure to replace `devopsthehardwayazurecr` with your ACR name and `v1` with the appropriate version tag if needed. +## 🛠️ Push Docker Image to ACR +### Prerequisites +- [ ] Docker image created locally +- [ ] Access to an Azure Container Registry -## Log Into The ECR Repository -1. Log in to ACR with Azure CLI -`az acr login --name devopsthehardwayazurecr` +### Steps +1. **Log Into the ACR Repository** -## Tag The Docker image -1. Tag the Docker image -`docker tag thomasthorntoncloud devopsthehardwayazurecr.azurecr.io/thomasthorntoncloud:v1` +> 🔍 **Note**: Replace `devopsthehardwayazurecr` with your actual ACR name. -## Push The Docker Image To ACR -1. Push the Docker image to ACR -`docker push devopsthehardwayazurecr.azurecr.io/thomasthorntoncloud:v1` + ```bash + az acr login --name devopsthehardwayazurecr + ``` +2. **Tag the Docker Image** + +> 🔍 **Note**: Ensure to replace` devopsthehardwayazurecr` with your ACR name and `v1` with the appropriate version tag if needed. + + ```bash + docker tag thomasthorntoncloud devopsthehardwayazurecr.azurecr.io/thomasthorntoncloud:v1 + ``` +3. **Push the Docker Image to ACR** + + ```bash + docker push devopsthehardwayazurecr.azurecr.io/thomasthorntoncloud:v1 + ``` + +## 🧠 Knowledge Check + +After pushing the image to ACR, consider these questions: +1. Why do we need to tag the Docker image before pushing it to ACR? +2. What's the significance of the version tag (e.g., `v1`) in the image name? +3. How does ACR authentication work when pushing images? + +## 🔍 Verification + +To ensure the Docker image was successfully pushed to ACR: +1. Log into the [Azure Portal](https://portal.azure.com). +2. Navigate to your Azure Container Registry +3. Check the "Repositories" section to see if your image is listed: + +![](images/acr.png) + +## 💡 Pro Tip + +Consider setting up CI/CD pipelines to automatically build and push your Docker images to ACR whenever you make changes to your application code. \ No newline at end of file diff --git a/3-Docker/images/acr.png b/3-Docker/images/acr.png new file mode 100644 index 0000000000000000000000000000000000000000..797e16cd6b24d4497f95038a71c4f9d2eccb22f4 GIT binary patch literal 44552 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 Date: Fri, 27 Sep 2024 09:04:16 +0100 Subject: [PATCH 057/124] remove old references --- .../4-Create-AKS-Cluster-IAM-Roles.md | 5 +- 3-Docker-old/1-Create-Docker-Image.md | 44 ---- 3-Docker-old/2-Push Image To ACR.md | 20 -- 3-Docker-old/Dockerfile | 14 -- 3-Docker-old/app/.gitignore | 4 - 3-Docker-old/app/.travis.yml | 7 - 3-Docker-old/app/Makefile | 16 -- 3-Docker-old/app/Procfile | 1 - 3-Docker-old/app/README.md | 56 ----- 3-Docker-old/app/app.json | 14 -- 3-Docker-old/app/app.py | 233 ------------------ 3-Docker-old/app/config.json | 13 - 3-Docker-old/app/requirements.txt | 12 - 3-Docker-old/app/setup.cfg | 3 - 3-Docker-old/app/setup.py | 10 - 3-Docker-old/app/static/util.js | 7 - 3-Docker-old/app/templates/demo.html | 20 -- 3-Docker-old/app/templates/results.html | 14 -- 3-Docker-old/app/templates/success.html | 8 - .../app/test/fixtures/GitHub_emojis.json | 1 - .../global_preserve_exact_body_bytes.json | 1 - .../app/test/fixtures/history_failure.json | 1 - .../app/test/fixtures/history_success.json | 1 - .../app/test/fixtures/me_failure.json | 1 - .../app/test/fixtures/me_success.json | 1 - .../test/fixtures/preserve_exact_bytes.json | 1 - .../fixtures/price_estimates_failure.json | 1 - .../fixtures/price_estimates_success.json | 1 - .../app/test/fixtures/products_failure.json | 1 - .../app/test/fixtures/products_success.json | 1 - .../app/test/fixtures/submit_failure.json | 1 - .../test/fixtures/time_estimates_failure.json | 1 - .../test/fixtures/time_estimates_success.json | 1 - 3-Docker-old/app/test/test_endpoints.py | 161 ------------ 34 files changed, 1 insertion(+), 675 deletions(-) delete mode 100644 3-Docker-old/1-Create-Docker-Image.md delete mode 100644 3-Docker-old/2-Push Image To ACR.md delete mode 100644 3-Docker-old/Dockerfile delete mode 100644 3-Docker-old/app/.gitignore delete mode 100644 3-Docker-old/app/.travis.yml delete mode 100644 3-Docker-old/app/Makefile delete mode 100644 3-Docker-old/app/Procfile delete mode 100644 3-Docker-old/app/README.md delete mode 100644 3-Docker-old/app/app.json delete mode 100644 3-Docker-old/app/app.py delete mode 100644 3-Docker-old/app/config.json delete mode 100644 3-Docker-old/app/requirements.txt delete mode 100644 3-Docker-old/app/setup.cfg delete mode 100644 3-Docker-old/app/setup.py delete mode 100644 3-Docker-old/app/static/util.js delete mode 100644 3-Docker-old/app/templates/demo.html delete mode 100644 3-Docker-old/app/templates/results.html delete mode 100644 3-Docker-old/app/templates/success.html delete mode 100644 3-Docker-old/app/test/fixtures/GitHub_emojis.json delete mode 100644 3-Docker-old/app/test/fixtures/global_preserve_exact_body_bytes.json delete mode 100644 3-Docker-old/app/test/fixtures/history_failure.json delete mode 100644 3-Docker-old/app/test/fixtures/history_success.json delete mode 100644 3-Docker-old/app/test/fixtures/me_failure.json delete mode 100644 3-Docker-old/app/test/fixtures/me_success.json delete mode 100644 3-Docker-old/app/test/fixtures/preserve_exact_bytes.json delete mode 100644 3-Docker-old/app/test/fixtures/price_estimates_failure.json delete mode 100644 3-Docker-old/app/test/fixtures/price_estimates_success.json delete mode 100644 3-Docker-old/app/test/fixtures/products_failure.json delete mode 100644 3-Docker-old/app/test/fixtures/products_success.json delete mode 100644 3-Docker-old/app/test/fixtures/submit_failure.json delete mode 100644 3-Docker-old/app/test/fixtures/time_estimates_failure.json delete mode 100644 3-Docker-old/app/test/fixtures/time_estimates_success.json delete mode 100644 3-Docker-old/app/test/test_endpoints.py diff --git a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index 132fa4e..071a727 100644 --- a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -40,10 +40,7 @@ In this lab, you'll create an Azure Kubernetes Service (AKS) cluster and set up terraform init terraform plan terraform apply - - - - + ``` ## 🧠 Knowledge Check diff --git a/3-Docker-old/1-Create-Docker-Image.md b/3-Docker-old/1-Create-Docker-Image.md deleted file mode 100644 index 7922b6b..0000000 --- a/3-Docker-old/1-Create-Docker-Image.md +++ /dev/null @@ -1,44 +0,0 @@ -# Creating the Docker image for the Uber app - -In this lab you will create a Docker image to containerize the Uber app. - -## Create The Docker Image - -1. `cd` into the *Docker* directory where you will see a *Dockerfile* and *app* directory. The app directory is what stores the Python application and the Dockerfile will be used to build the app. - -2. Open the Dockerfile - -3. Within the Dockerfile, you'll see a few key components - - The Docker image that's being used is Python. It's using the latest version - - There's a new directory being created called `/build`, which is where the Python app will reside - - The *app* directory will be copied into the `/build` directory, along with the `requirements.txt` file to install all of the Python requirements for the app - - The app will run as soon as the container gets created and comes up - -4. To create the Docker image, you'll run the following command: -`docker build -t uberapp .` - -Please note, you want to run the below docker command instead, if the above does not work: -`docker build --platform=linux/amd64 -t uberapp .` - -This command is similar to the first one, but it includes the `--platform` option. The` --platform` option allows you to specify the target platform for the Docker image. In this case, it specifies the platform as `linux/amd64`, which means the image will be built for the AMD64 architecture running Linux. This option is useful when building multi-platform images that can run on different architectures. - -The `-t` is for the tag (the name) of the Docker image and the `.` is telling the Docker CLI that the Dockerfile is in the current directory - -5. After the Docker image is created, run the following command to confirm the Docker image is on your machine. -`docker image ls` - -## Run The Docker Image Locally - -Now that the Docker image is created, you can run the container locally just to confirm it'll work and not crash. - -1. To run the Docker container, run the following command: -`docker run -tid uberapp` - -- `t` enables a TTY console. -- `i` enables an interactive session. -- `d` detaches the terminal from the Docker container. - -2. Confirm that the Docker container is running by running the following command: -`docker container ls` - -You should now see the container running successfully. \ No newline at end of file diff --git a/3-Docker-old/2-Push Image To ACR.md b/3-Docker-old/2-Push Image To ACR.md deleted file mode 100644 index 795cd23..0000000 --- a/3-Docker-old/2-Push Image To ACR.md +++ /dev/null @@ -1,20 +0,0 @@ -# Push Image To ACR - -The ACR repo will be where you store the Docker image that you created on your local computer in step 1. - -Ensure to replace `devopsthehardwayazurecr` with your ACR name and `v1` with the appropriate version tag if needed. - - -## Log Into The ECR Repository -1. Log in to ACR with Azure CLI -`az acr login --name devopsthehardwayazurecr` - - -## Tag The Docker image -1. Tag the Docker image -`docker tag uberapp devopsthehardwayazurecr.azurecr.io/uberapp:v1` - -## Push The Docker Image To ACR -1. Push the Docker image to ACR -`docker push devopsthehardwayazurecr.azurecr.io/uberapp:v1` - diff --git a/3-Docker-old/Dockerfile b/3-Docker-old/Dockerfile deleted file mode 100644 index 740820d..0000000 --- a/3-Docker-old/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM python:latest - -RUN mkdir /build -WORKDIR /build - -COPY app /build - -COPY app/requirements.txt /build - -RUN pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org -r requirements.txt - -EXPOSE 5000 - -CMD [ "python", "app.py" ] \ No newline at end of file diff --git a/3-Docker-old/app/.gitignore b/3-Docker-old/app/.gitignore deleted file mode 100644 index 7c6c6ce..0000000 --- a/3-Docker-old/app/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*.pyc -*.egg-info -.coverage -env/ diff --git a/3-Docker-old/app/.travis.yml b/3-Docker-old/app/.travis.yml deleted file mode 100644 index b5c4ab9..0000000 --- a/3-Docker-old/app/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: python -install: make bootstrap -script: make -branches: - except: - - /^v[0-9]/ -after_success: coveralls diff --git a/3-Docker-old/app/Makefile b/3-Docker-old/app/Makefile deleted file mode 100644 index bd698c9..0000000 --- a/3-Docker-old/app/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -.PHONY: bootstrap clean lint test -.DEFAULT_GOAL := test - -test: clean lint - @py.test test/ --cov app.py -s - -lint: - @flake8 . - -clean: - @find . -type f -name '*.pyc' -delete - -bootstrap: - @pip install -r requirements.txt - @pip install -r requirements-test.txt - @python setup.py develop diff --git a/3-Docker-old/app/Procfile b/3-Docker-old/app/Procfile deleted file mode 100644 index 244c130..0000000 --- a/3-Docker-old/app/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: gunicorn app:app --log-file=- diff --git a/3-Docker-old/app/README.md b/3-Docker-old/app/README.md deleted file mode 100644 index dc09eb6..0000000 --- a/3-Docker-old/app/README.md +++ /dev/null @@ -1,56 +0,0 @@ -Example Uber app for developers -============================== - -[![TravisCI](https://travis-ci.org/uber/Python-Sample-Application.svg?branch=master)](https://travis-ci.org/uber/Python-Sample-Application) -[![Coverage Status](https://coveralls.io/repos/uber/Python-Sample-Application/badge.png)](https://coveralls.io/r/uber/Python-Sample-Application) - -https://developer.uber.com/ - -What Is This? -------------- - -This is a simple Python/Flask application intended to provide a working example of Uber's external API. The goal of these endpoints is to be simple, well-documented and to provide a base for developers to develop other applications off of. - - -How To Use This ---------------- - -1. Navigate over to https://developer.uber.com/, and sign up for an Uber developer account. -2. Register a new Uber application and make your Redirect URI `http://localhost:7000/submit` - ensure that both the `profile` and `history` OAuth scopes are checked. -3. Fill in the relevant information in the `config.json` file in the root folder and add your client id and secret as the environment variables `UBER_CLIENT_ID` and `UBER_CLIENT_SECRET`. -4. Run `export UBER_CLIENT_ID="`*{your client id}*`"&&export UBER_CLIENT_SECRET="`*{your client secret}*`"` -5. Run `pip install -r requirements.txt` to install dependencies -6. Run `python app.py` -7. Navigate to http://localhost:7000 in your browser - - -Testing -------- - -1. Install the dependencies with `make bootstrap` -2. Run the command `make test` -3. If you delete the fixtures, or decide to add some of your own, you’ll have to re-generate them, and the way this is done is by running the app, getting an auth_token from the main page of the app. Paste that token in place of the `test_auth_token` at the top of the `test_endpoints.py` file, then run the tests. - - -Development ------------ - -If you want to work on this application we’d love your pull requests and tickets on GitHub! - -1. If you open up a ticket, please make sure it describes the problem or feature request fully. -2. If you send us a pull request, make sure you add a test for what you added, and make sure the full test suite runs with `make test`. - -Deploy to Heroku ----------------- - -Click the button below to set up this sample app on Heroku: - -[![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy) - -After creating your app on Heroku, you have to configure the redirect URL for your Uber OAuth app. Use a `https://`*{your-app-name}*`.herokuapp.com/submit` URL. -You will also want to configure the heroku environment variable FLASK_DEBUG=False in order to properly serve SSL traffic. - -Making Requests ---------------- - -The base for all requests is https://api.uber.com/v1/, to find a list of all available endpoints, please visit: https://developer.uber.com/v1/endpoints/ diff --git a/3-Docker-old/app/app.json b/3-Docker-old/app/app.json deleted file mode 100644 index a0bee26..0000000 --- a/3-Docker-old/app/app.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "Uber API Python/Flask sample", - "logo": "http://blogcdn.uber.com/wp-content/uploads/2011/12/New-Logo-Vertical-Dark.jpg", - "repository": "https://github.com/uber/Python-Sample-Application", - "keywords": ["uber", "python", "flask"], - "env": { - "UBER_CLIENT_ID": { - "description": "Your Uber API client id" - }, - "UBER_CLIENT_SECRET": { - "description": "Your Uber API client secret" - } - } -} diff --git a/3-Docker-old/app/app.py b/3-Docker-old/app/app.py deleted file mode 100644 index 423f06a..0000000 --- a/3-Docker-old/app/app.py +++ /dev/null @@ -1,233 +0,0 @@ -from __future__ import absolute_import - -import json -import os -from urllib.parse import urlparse - -from flask import Flask, render_template, request, redirect, session -from flask_sslify import SSLify -from rauth import OAuth2Service -import requests - -app = Flask(__name__, static_folder='static', static_url_path='') -app.requests_session = requests.Session() -app.secret_key = os.urandom(24) - -sslify = SSLify(app) - -with open('config.json') as f: - config = json.load(f) - - -def generate_oauth_service(): - """Prepare the OAuth2Service that is used to make requests later.""" - return OAuth2Service( - client_id=os.environ.get('UBER_CLIENT_ID'), - client_secret=os.environ.get('UBER_CLIENT_SECRET'), - name=config.get('name'), - authorize_url=config.get('authorize_url'), - access_token_url=config.get('access_token_url'), - base_url=config.get('base_url'), - ) - - -def generate_ride_headers(token): - """Generate the header object that is used to make api requests.""" - return { - 'Authorization': 'bearer %s' % token, - 'Content-Type': 'application/json', - } - - -@app.route('/health', methods=['GET']) -def health(): - """Check the status of this application.""" - return ';-)' - - -@app.route('/', methods=['GET']) -def signup(): - """The first step in the three-legged OAuth handshake. - - You should navigate here first. It will redirect to login.uber.com. - """ - params = { - 'response_type': 'code', - 'redirect_uri': get_redirect_uri(request), - 'scopes': ','.join(config.get('scopes')), - } - url = generate_oauth_service().get_authorize_url(**params) - return redirect(url) - - -@app.route('/submit', methods=['GET']) -def submit(): - """The other two steps in the three-legged Oauth handshake. - - Your redirect uri will redirect you here, where you will exchange - a code that can be used to obtain an access token for the logged-in use. - """ - params = { - 'redirect_uri': get_redirect_uri(request), - 'code': request.args.get('code'), - 'grant_type': 'authorization_code' - } - response = app.requests_session.post( - config.get('access_token_url'), - auth=( - os.environ.get('UBER_CLIENT_ID'), - os.environ.get('UBER_CLIENT_SECRET') - ), - data=params, - ) - session['access_token'] = response.json().get('access_token') - - return render_template( - 'success.html', - token=response.json().get('access_token') - ) - - -@app.route('/demo', methods=['GET']) -def demo(): - """Demo.html is a template that calls the other routes in this example.""" - return render_template('demo.html', token=session.get('access_token')) - - -@app.route('/products', methods=['GET']) -def products(): - """Example call to the products endpoint. - - Returns all the products currently available in San Francisco. - """ - url = config.get('base_uber_url') + 'products' - params = { - 'latitude': config.get('start_latitude'), - 'longitude': config.get('start_longitude'), - } - - response = app.requests_session.get( - url, - headers=generate_ride_headers(session.get('access_token')), - params=params, - ) - - if response.status_code != 200: - return 'There was an error', response.status_code - return render_template( - 'results.html', - endpoint='products', - data=response.text, - ) - - -@app.route('/time', methods=['GET']) -def time(): - """Example call to the time estimates endpoint. - - Returns the time estimates from the given lat/lng given below. - """ - url = config.get('base_uber_url') + 'estimates/time' - params = { - 'start_latitude': config.get('start_latitude'), - 'start_longitude': config.get('start_longitude'), - } - - response = app.requests_session.get( - url, - headers=generate_ride_headers(session.get('access_token')), - params=params, - ) - - if response.status_code != 200: - return 'There was an error', response.status_code - return render_template( - 'results.html', - endpoint='time', - data=response.text, - ) - - -@app.route('/price', methods=['GET']) -def price(): - """Example call to the price estimates endpoint. - - Returns the time estimates from the given lat/lng given below. - """ - url = config.get('base_uber_url') + 'estimates/price' - params = { - 'start_latitude': config.get('start_latitude'), - 'start_longitude': config.get('start_longitude'), - 'end_latitude': config.get('end_latitude'), - 'end_longitude': config.get('end_longitude'), - } - - response = app.requests_session.get( - url, - headers=generate_ride_headers(session.get('access_token')), - params=params, - ) - - if response.status_code != 200: - return 'There was an error', response.status_code - return render_template( - 'results.html', - endpoint='price', - data=response.text, - ) - - -@app.route('/history', methods=['GET']) -def history(): - """Return the last 5 trips made by the logged in user.""" - url = config.get('base_uber_url_v1_1') + 'history' - params = { - 'offset': 0, - 'limit': 5, - } - - response = app.requests_session.get( - url, - headers=generate_ride_headers(session.get('access_token')), - params=params, - ) - - if response.status_code != 200: - return 'There was an error', response.status_code - return render_template( - 'results.html', - endpoint='history', - data=response.text, - ) - - -@app.route('/me', methods=['GET']) -def me(): - """Return user information including name, picture and email.""" - url = config.get('base_uber_url') + 'me' - response = app.requests_session.get( - url, - headers=generate_ride_headers(session.get('access_token')), - ) - - if response.status_code != 200: - return 'There was an error', response.status_code - return render_template( - 'results.html', - endpoint='me', - data=response.text, - ) - - -def get_redirect_uri(request): - """Return OAuth redirect URI.""" - parsed_url = urlparse(request.url) - if parsed_url.hostname == 'localhost': - return 'http://{hostname}:{port}/submit'.format( - hostname=parsed_url.hostname, port=parsed_url.port - ) - return 'https://{hostname}/submit'.format(hostname=parsed_url.hostname) - -if __name__ == '__main__': - app.debug = os.environ.get('FLASK_DEBUG', True) - app.run(host='0.0.0.0', port=5000) diff --git a/3-Docker-old/app/config.json b/3-Docker-old/app/config.json deleted file mode 100644 index 46e7fe6..0000000 --- a/3-Docker-old/app/config.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "access_token_url": "https://login.uber.com/oauth/token", - "authorize_url": "https://login.uber.com/oauth/authorize", - "base_url": "https://login.uber.com/", - "scopes": ["profile", "history_lite"], - "name": "Sample app", - "base_uber_url": "https://api.uber.com/v1/", - "base_uber_url_v1_1" : "https://api.uber.com/v1.1/", - "start_latitude": "37.781955", - "start_longitude": "-122.402367", - "end_latitude": "37.744352", - "end_longitude": "-122.416743" -} diff --git a/3-Docker-old/app/requirements.txt b/3-Docker-old/app/requirements.txt deleted file mode 100644 index cf39ca1..0000000 --- a/3-Docker-old/app/requirements.txt +++ /dev/null @@ -1,12 +0,0 @@ -Flask -Jinja2 -MarkupSafe -Werkzeug -gnureadline -itsdangerous -rauth -requests -urllib3 - -gunicorn -Flask-SSLify diff --git a/3-Docker-old/app/setup.cfg b/3-Docker-old/app/setup.cfg deleted file mode 100644 index 7598993..0000000 --- a/3-Docker-old/app/setup.cfg +++ /dev/null @@ -1,3 +0,0 @@ -[flake8] -max-line-length = 100 -exclude = env diff --git a/3-Docker-old/app/setup.py b/3-Docker-old/app/setup.py deleted file mode 100644 index 47b3962..0000000 --- a/3-Docker-old/app/setup.py +++ /dev/null @@ -1,10 +0,0 @@ -from setuptools import setup, find_packages - -setup( - name='Python-Sample-Application', - version='0.0.1', - author='Uber Engineering', - author_email='developer@uber.com', - packages=find_packages(), - description='Python sample application', -) diff --git a/3-Docker-old/app/static/util.js b/3-Docker-old/app/static/util.js deleted file mode 100644 index ebbe197..0000000 --- a/3-Docker-old/app/static/util.js +++ /dev/null @@ -1,7 +0,0 @@ -function action(endpoint_name) { - window.location.replace('/' + endpoint_name); -} - -function redirect_to_demo(code) { - window.location.replace('/demo'); -} diff --git a/3-Docker-old/app/templates/demo.html b/3-Docker-old/app/templates/demo.html deleted file mode 100644 index 936257e..0000000 --- a/3-Docker-old/app/templates/demo.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - {% if token %} -

Congratulations! you have successfully authenticated and your token is: {{ token }}

- {% else %} -

Something went wrong :(

- {% endif %} - -

Test the following functions of the api!

- - - - - - - diff --git a/3-Docker-old/app/templates/results.html b/3-Docker-old/app/templates/results.html deleted file mode 100644 index 9d4de3b..0000000 --- a/3-Docker-old/app/templates/results.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - -

Welcome to the {{ endpoint }} endpoint!

- -

Here is the result of a call to the {{ endpoint }}:

-

{{ data }}

- - diff --git a/3-Docker-old/app/templates/success.html b/3-Docker-old/app/templates/success.html deleted file mode 100644 index 621d24c..0000000 --- a/3-Docker-old/app/templates/success.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/3-Docker-old/app/test/fixtures/GitHub_emojis.json b/3-Docker-old/app/test/fixtures/GitHub_emojis.json deleted file mode 100644 index 429fd7a..0000000 --- a/3-Docker-old/app/test/fixtures/GitHub_emojis.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/global_preserve_exact_body_bytes.json b/3-Docker-old/app/test/fixtures/global_preserve_exact_body_bytes.json deleted file mode 100644 index f58e137..0000000 --- a/3-Docker-old/app/test/fixtures/global_preserve_exact_body_bytes.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"base64_string": "", "encoding": "utf-8"}, "headers": {"Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.2.0"]}, "method": "GET", "uri": "https://httpbin.org/get"}, "response": {"body": {"base64_string": "ewogICJhcmdzIjoge30sIAogICJoZWFkZXJzIjogewogICAgIkFjY2VwdCI6ICIqLyoiLCAKICAgICJBY2NlcHQtRW5jb2RpbmciOiAiZ3ppcCwgZGVmbGF0ZSIsIAogICAgIkNvbm5lY3Rpb24iOiAiY2xvc2UiLCAKICAgICJIb3N0IjogImh0dHBiaW4ub3JnIiwgCiAgICAiVXNlci1BZ2VudCI6ICJweXRob24tcmVxdWVzdHMvMi4zLjAgQ1B5dGhvbi8yLjcuNSBEYXJ3aW4vMTMuMi4wIiwgCiAgICAiWC1SZXF1ZXN0LUlkIjogIjE1ODlmMjgzLWRkYjMtNGU0YS1hYTMzLWVjM2I0NGVlY2JjMiIKICB9LCAKICAib3JpZ2luIjogIjguMjYuMTU3LjEyOCIsIAogICJ1cmwiOiAiaHR0cHM6Ly9odHRwYmluLm9yZy9nZXQiCn0=", "encoding": null}, "headers": {"content-length": ["353"], "server": ["gunicorn/18.0"], "connection": ["keep-alive"], "access-control-allow-credentials": ["true"], "date": ["Fri, 22 Aug 2014 18:11:35 GMT"], "access-control-allow-origin": ["*"], "content-type": ["application/json"]}, "status": {"message": "OK", "code": 200}, "url": "https://httpbin.org/get"}, "recorded_at": "2014-08-22T18:11:35"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/history_failure.json b/3-Docker-old/app/test/fixtures/history_failure.json deleted file mode 100644 index df181de..0000000 --- a/3-Docker-old/app/test/fixtures/history_failure.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept": ["*/*"], "Content-Type": ["application/json"], "Accept-Encoding": ["gzip, deflate"], "Authorization": ["bearer NOT_A_CODE"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.4.0"]}, "method": "GET", "uri": "https://api.uber.com/v1.1/history?limit=5&offset=0"}, "response": {"body": {"string": "{\"message\":\"Invalid OAuth 2.0 credentials provided.\",\"code\":\"unauthorized\"}", "encoding": null}, "headers": {"content-length": ["75"], "server": ["nginx"], "connection": ["keep-alive"], "date": ["Mon, 06 Oct 2014 16:58:57 GMT"], "x-uber-app": ["uberex-nonsandbox"], "content-type": ["application/json"]}, "status": {"message": "Unauthorized", "code": 401}, "url": "https://api.uber.com/v1.1/history?limit=5&offset=0"}, "recorded_at": "2014-10-06T16:58:57"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/history_success.json b/3-Docker-old/app/test/fixtures/history_success.json deleted file mode 100644 index f0dd74b..0000000 --- a/3-Docker-old/app/test/fixtures/history_success.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept": ["*/*"], "Content-Type": ["application/json"], "Accept-Encoding": ["gzip, deflate"], "Authorization": ["bearer MLth87eHvSAaCQ1vn7jTd0xA9Kapo5"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.4.0"]}, "method": "GET", "uri": "https://api.uber.com/v1.1/history?limit=5&offset=0"}, "response": {"body": {"base64_string": "H4sIAAAAAAAAA62TTW7bMBBG78K1aHB+yOH4KkURUBSJGojtxJYWReC7d5SFi9gGaqDRjuLokW++0Yerx+Uwu20UHNyx93OzRRjc626/W18P7tfuPB9Pv932x4c7z2Vezm5rX+3fXtvcJje4yQrKoTa3BdhIzFGFMw9uWXaTlbYWShtz9TFS8Jwq+kKZfW9x7KI1tKpGMcZpfpl3+5XDgFbNRIN7Ox2npc4vn6wC9lRjVcFPFvlsdR57nSahEDisN2qH6QuJE5ndqb0v7XxzBgFdhn+L4QZDRFXQv2LcU9fCwVcu3TPW4jV08hFUEiXRVPIjMYKwUr5BjDCG9FCMAos+IYYb0IyUrd3XwEJhqG0KPvVaPRcZvSaiNbreKcaecW3ybWDMwGiU//cyUmbr0H1gtkPIT3jxBpk0RYGrFkdoHdEGr49sMoheI3dfa5NWiGxm4YEWqVnJd2gZScFI91q2AyRPaOEmZEg5iOjVq/SeRonox1p0DSn4cQT10ssIQkUCyAMv1Bjo1mviMpbSxHeekmcwqoINgRifmh0dCxvr6/9lJEl2n3svtN5lvvy8/AHuOYdTZwQAAA==", "encoding": null}, "headers": {"x-rate-limit-remaining": ["999"], "content-language": ["en"], "content-encoding": ["gzip"], "transfer-encoding": ["chunked"], "strict-transport-security": ["max-age=2592000"], "server": ["nginx"], "connection": ["keep-alive"], "x-rate-limit-reset": ["1412618400"], "x-uber-app": ["uberex-nonsandbox"], "date": ["Mon, 06 Oct 2014 17:12:33 GMT"], "x-rate-limit-limit": ["1000"], "content-type": ["application/json"]}, "status": {"message": "OK", "code": 200}, "url": "https://api.uber.com/v1.1/history?limit=5&offset=0"}, "recorded_at": "2014-10-06T17:12:33"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/me_failure.json b/3-Docker-old/app/test/fixtures/me_failure.json deleted file mode 100644 index 7abfbff..0000000 --- a/3-Docker-old/app/test/fixtures/me_failure.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept": ["*/*"], "Content-Type": ["application/json"], "Accept-Encoding": ["gzip, deflate"], "Authorization": ["bearer NOT_A_CODE"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.2.0"]}, "method": "GET", "uri": "https://api.uber.com/v1/me"}, "response": {"body": {"string": "{\"message\":\"Invalid OAuth 2.0 credentials provided.\",\"code\":\"unauthorized\"}", "encoding": null}, "headers": {"content-length": ["75"], "server": ["nginx"], "connection": ["keep-alive"], "date": ["Fri, 22 Aug 2014 19:22:26 GMT"], "x-uber-app": ["uberex-nonsandbox"], "content-type": ["application/json"]}, "status": {"message": "Unauthorized", "code": 401}, "url": "https://api.uber.com/v1/me"}, "recorded_at": "2014-08-22T19:22:25"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/me_success.json b/3-Docker-old/app/test/fixtures/me_success.json deleted file mode 100644 index d8cb028..0000000 --- a/3-Docker-old/app/test/fixtures/me_success.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept": ["*/*"], "Content-Type": ["application/json"], "Accept-Encoding": ["gzip, deflate"], "Authorization": ["bearer vX0ye7xeg42vNcBtWv59k9K0WjB5qH"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.2.0"]}, "method": "GET", "uri": "https://api.uber.com/v1/me"}, "response": {"body": {"base64_string": "H4sIAAAAAAAAA0WMyw7CIBRE/4W1tLWlULpy78YPaNJcHhXsA0Ihxhj/XRoXLuecmXkjb2VMQaMemRj93g/lUKrzs/bOhiga2HkhF5fUFNwWi03HoawYkTXUDZ86RqhQZ8K64uH1HZ3QZMMexw3W4/EKaTewZLzAn94g2Nlk6INb3SidOrrKvAjPUK9gl5zn3/aShA6FdGtWKVmVTcsqAYwTTFnbYQICMFSa4pZIKRinilOOPl8CtsPG2gAAAA==", "encoding": null}, "headers": {"x-rate-limit-remaining": ["999"], "content-language": ["en"], "content-encoding": ["gzip"], "transfer-encoding": ["chunked"], "strict-transport-security": ["max-age=2592000"], "server": ["nginx"], "connection": ["keep-alive"], "x-rate-limit-reset": ["1408737600"], "x-uber-app": ["uberex-nonsandbox"], "date": ["Fri, 22 Aug 2014 19:22:26 GMT"], "x-rate-limit-limit": ["1000"], "content-type": ["application/json"]}, "status": {"message": "OK", "code": 200}, "url": "https://api.uber.com/v1/me"}, "recorded_at": "2014-08-22T19:22:25"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/preserve_exact_bytes.json b/3-Docker-old/app/test/fixtures/preserve_exact_bytes.json deleted file mode 100644 index 80b274e..0000000 --- a/3-Docker-old/app/test/fixtures/preserve_exact_bytes.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"base64_string": "", "encoding": "utf-8"}, "headers": {"Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.2.0"]}, "method": "GET", "uri": "https://httpbin.org/get"}, "response": {"body": {"base64_string": "ewogICJhcmdzIjoge30sIAogICJoZWFkZXJzIjogewogICAgIkFjY2VwdCI6ICIqLyoiLCAKICAgICJBY2NlcHQtRW5jb2RpbmciOiAiZ3ppcCwgZGVmbGF0ZSIsIAogICAgIkNvbm5lY3Rpb24iOiAiY2xvc2UiLCAKICAgICJIb3N0IjogImh0dHBiaW4ub3JnIiwgCiAgICAiVXNlci1BZ2VudCI6ICJweXRob24tcmVxdWVzdHMvMi4zLjAgQ1B5dGhvbi8yLjcuNSBEYXJ3aW4vMTMuMi4wIiwgCiAgICAiWC1SZXF1ZXN0LUlkIjogImFkYmJkMTUzLTk1MjYtNDk4Ni04NTI1LTZjNWUxMGNkNDA5ZSIKICB9LCAKICAib3JpZ2luIjogIjguMjYuMTU3LjEyOCIsIAogICJ1cmwiOiAiaHR0cHM6Ly9odHRwYmluLm9yZy9nZXQiCn0=", "encoding": null}, "headers": {"content-length": ["353"], "server": ["gunicorn/18.0"], "connection": ["keep-alive"], "access-control-allow-credentials": ["true"], "date": ["Fri, 22 Aug 2014 18:11:35 GMT"], "access-control-allow-origin": ["*"], "content-type": ["application/json"]}, "status": {"message": "OK", "code": 200}, "url": "https://httpbin.org/get"}, "recorded_at": "2014-08-22T18:11:34"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/price_estimates_failure.json b/3-Docker-old/app/test/fixtures/price_estimates_failure.json deleted file mode 100644 index 6092eff..0000000 --- a/3-Docker-old/app/test/fixtures/price_estimates_failure.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept": ["*/*"], "Content-Type": ["application/json"], "Accept-Encoding": ["gzip, deflate"], "Authorization": ["bearer NOT_A_CODE"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.2.0"]}, "method": "GET", "uri": "https://api.uber.com/v1/estimates/price?start_longitude=-122.402367&end_longitude=-122.416743&start_latitude=37.781955&end_latitude=37.744352"}, "response": {"body": {"string": "{\"message\":\"No authentication provided.\",\"code\":\"unauthorized\"}", "encoding": null}, "headers": {"content-length": ["63"], "server": ["nginx"], "connection": ["keep-alive"], "date": ["Fri, 01 Aug 2014 20:19:37 GMT"], "x-uber-app": ["uberex-nonsandbox"], "content-type": ["application/json"]}, "status": {"message": "Unauthorized", "code": 401}, "url": "https://api.uber.com/v1/estimates/price?start_longitude=-122.402367&end_longitude=-122.416743&start_latitude=37.781955&end_latitude=37.744352"}, "recorded_at": "2014-08-01T20:19:37"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/price_estimates_success.json b/3-Docker-old/app/test/fixtures/price_estimates_success.json deleted file mode 100644 index 680fe82..0000000 --- a/3-Docker-old/app/test/fixtures/price_estimates_success.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept": ["*/*"], "Content-Type": ["application/json"], "Accept-Encoding": ["gzip, deflate"], "Authorization": ["bearer 42Kq726Vv6lzJ0TMhXWsgUulVjRsxh"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.2.0"]}, "method": "GET", "uri": "https://api.uber.com/v1/estimates/price?start_longitude=-122.402367&end_longitude=-122.416743&start_latitude=37.781955&end_latitude=37.744352"}, "response": {"body": {"base64_string": "H4sIAAAAAAAAA5WTXU+DMBSG/8uJl0AokOG4m3pjnFcTs8SYhrXN1lg+UlrdXPbfbYcmhOLQ29P3nL7P+ThCIzlhLWQvRxA1KQT/ZBRT3jaiOOCqKBlkkG+YvFkubh/AM6IPzFrFy0LZpygJwtCEL2Q0sqaaKMyp0WtTaiMK8mZyWi23DJdaKN4IziRkKAg96FW/ihI/tuV3fLvrfxuH3bdES8kqcsCkpmenqzs4eRMoq/zZBYlnv4J0egej1e9/g4hnfpKMQCTfvfs3hG3i02J971BUWghnFj21w6CKPR+F6Cr1RvHIFJOMuhidcsBggxfnYE2tHf8wD8LURAfb9CN27O9HvTtbNPdR5BoHhAKETHzgHfKpJTr7WZrMwTGgNLi2BcfsW7nrX5hoO30GKPWjMYIIBant1yjB6+kLI8sf5N4DAAA=", "encoding": null}, "headers": {"x-rate-limit-remaining": ["4993"], "content-language": ["en"], "content-encoding": ["gzip"], "transfer-encoding": ["chunked"], "strict-transport-security": ["max-age=2592000"], "server": ["nginx"], "connection": ["keep-alive"], "x-rate-limit-reset": ["1406926800"], "x-uber-app": ["uberex-nonsandbox"], "date": ["Fri, 01 Aug 2014 20:19:37 GMT"], "x-rate-limit-limit": ["5000"], "content-type": ["application/json"]}, "status": {"message": "OK", "code": 200}, "url": "https://api.uber.com/v1/estimates/price?start_longitude=-122.402367&end_longitude=-122.416743&start_latitude=37.781955&end_latitude=37.744352"}, "recorded_at": "2014-08-01T20:19:38"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/products_failure.json b/3-Docker-old/app/test/fixtures/products_failure.json deleted file mode 100644 index 3d6b9bf..0000000 --- a/3-Docker-old/app/test/fixtures/products_failure.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept": ["*/*"], "Content-Type": ["application/json"], "Accept-Encoding": ["gzip, deflate"], "Authorization": ["bearer NOT_A_CODE"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.2.0"]}, "method": "GET", "uri": "https://api.uber.com/v1/products?latitude=37.781955&longitude=-122.402367"}, "response": {"body": {"string": "{\"message\":\"No authentication provided.\",\"code\":\"unauthorized\"}", "encoding": null}, "headers": {"content-length": ["63"], "server": ["nginx"], "connection": ["keep-alive"], "date": ["Fri, 01 Aug 2014 20:19:37 GMT"], "x-uber-app": ["uberex-nonsandbox"], "content-type": ["application/json"]}, "status": {"message": "Unauthorized", "code": 401}, "url": "https://api.uber.com/v1/products?latitude=37.781955&longitude=-122.402367"}, "recorded_at": "2014-08-01T20:19:38"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/products_success.json b/3-Docker-old/app/test/fixtures/products_success.json deleted file mode 100644 index cf80a63..0000000 --- a/3-Docker-old/app/test/fixtures/products_success.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept": ["*/*"], "Content-Type": ["application/json"], "Accept-Encoding": ["gzip, deflate"], "Authorization": ["bearer 42Kq726Vv6lzJ0TMhXWsgUulVjRsxh"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.2.0"]}, "method": "GET", "uri": "https://api.uber.com/v1/products?latitude=37.781955&longitude=-122.402367"}, "response": {"body": {"base64_string": "H4sIAAAAAAAAA7XSQU/CMBQH8K/S9AxbVOJhN/Rk5KTDkDhDHl23NXZ9TfsGDMJ3t0NjjBuc4NJD//m//PLy9tw6zBtBnifvey7AglDU8mQy4qqGUvKEV0Q2yeIszm/grph4C7uds5NIaGzywqGhyEjKYgFuTK2VPotrNPj9jlcaxGdkTclHPFfeamiXBupu8Hwl3cNs+vgcoh/GUuUhaEJw7HUd6YVTlhSakKSVZOhUqQxo1vX5YfSXfX8ptm/Wp9Gv87chcuj0wC+INSvQMbmWrkUj/4EvtmeCrRoWd9tMp4unIXLX6pnT8Mk2iipsiFHYeAXe66vJO9/2NH0x5N720cGpcTMW6Omql3Hk6tsz4NmgWPfIv1ynwpUfr0SDKyUrHTbW88PH4Qugn78toAMAAA==", "encoding": null}, "headers": {"x-rate-limit-remaining": ["4992"], "content-language": ["en"], "content-encoding": ["gzip"], "transfer-encoding": ["chunked"], "strict-transport-security": ["max-age=2592000"], "server": ["nginx"], "connection": ["keep-alive"], "x-rate-limit-reset": ["1406926800"], "x-uber-app": ["uberex-nonsandbox"], "date": ["Fri, 01 Aug 2014 20:19:37 GMT"], "x-rate-limit-limit": ["5000"], "content-type": ["application/json"]}, "status": {"message": "OK", "code": 200}, "url": "https://api.uber.com/v1/products?latitude=37.781955&longitude=-122.402367"}, "recorded_at": "2014-08-01T20:19:38"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/submit_failure.json b/3-Docker-old/app/test/fixtures/submit_failure.json deleted file mode 100644 index 61484cf..0000000 --- a/3-Docker-old/app/test/fixtures/submit_failure.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"string": "code=not_a_code&redirect_uri=http%3A%2F%2Flocalhost%3ANone%2Fsubmit&grant_type=authorization_code", "encoding": "utf-8"}, "headers": {"Content-Length": ["97"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.4.0"], "Content-Type": ["application/x-www-form-urlencoded"], "Authorization": ["Basic MW14R3hFR1JxcXU3Z1g5OTE2Rnc0azkwVmlHcTdLVzA6SV8wNW9tRFNIbjM5MHFISDJreE5zd04wb004bUZlc3pBQnREckQ0RQ=="]}, "method": "POST", "uri": "https://login.uber.com/oauth/token"}, "response": {"body": {"string": "{\"error\": \"invalid_grant\"}", "encoding": null}, "headers": {"content-length": ["26"], "server": ["nginx"], "connection": ["keep-alive"], "pragma": ["no-cache"], "cache-control": ["no-store"], "date": ["Mon, 06 Oct 2014 17:11:05 GMT"], "x-uber-app": ["login"], "content-type": ["application/json"]}, "status": {"message": "BAD REQUEST", "code": 400}, "url": "https://login.uber.com/oauth/token"}, "recorded_at": "2014-10-06T17:11:05"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/time_estimates_failure.json b/3-Docker-old/app/test/fixtures/time_estimates_failure.json deleted file mode 100644 index 2fb1c2c..0000000 --- a/3-Docker-old/app/test/fixtures/time_estimates_failure.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept": ["*/*"], "Content-Type": ["application/json"], "Accept-Encoding": ["gzip, deflate"], "Authorization": ["bearer NOT_A_CODE"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.2.0"]}, "method": "GET", "uri": "https://api.uber.com/v1/estimates/time?start_longitude=-122.402367&start_latitude=37.781955"}, "response": {"body": {"string": "{\"message\":\"No authentication provided.\",\"code\":\"unauthorized\"}", "encoding": null}, "headers": {"content-length": ["63"], "server": ["nginx"], "connection": ["keep-alive"], "date": ["Fri, 01 Aug 2014 20:19:38 GMT"], "x-uber-app": ["uberex-nonsandbox"], "content-type": ["application/json"]}, "status": {"message": "Unauthorized", "code": 401}, "url": "https://api.uber.com/v1/estimates/time?start_longitude=-122.402367&start_latitude=37.781955"}, "recorded_at": "2014-08-01T20:19:38"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/fixtures/time_estimates_success.json b/3-Docker-old/app/test/fixtures/time_estimates_success.json deleted file mode 100644 index f7f1478..0000000 --- a/3-Docker-old/app/test/fixtures/time_estimates_success.json +++ /dev/null @@ -1 +0,0 @@ -{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept": ["*/*"], "Content-Type": ["application/json"], "Accept-Encoding": ["gzip, deflate"], "Authorization": ["bearer 42Kq726Vv6lzJ0TMhXWsgUulVjRsxh"], "User-Agent": ["python-requests/2.3.0 CPython/2.7.5 Darwin/13.2.0"]}, "method": "GET", "uri": "https://api.uber.com/v1/estimates/time?start_longitude=-122.402367&start_latitude=37.781955"}, "response": {"body": {"base64_string": "H4sIAAAAAAAAA6tWKsnMTS1WsoquVsrJT07MyaxKTYlPySwuyEmsjM9LzE1VslIKTUotcvJxdPZW0lFKLQZqSCwBChsZmOgo4VFZUJSfUppcEp+ZAjSiFGhEUk5icrZSrQ4Bm4JDw4iyB6IOw5bi0jL8doCcEuIY4YliibG5IYZnkBRi2FKSWJFJ2JoIFDuMTM2x2gFShWFBhVJtbC0AZXhg5Z4BAAA=", "encoding": null}, "headers": {"x-rate-limit-remaining": ["4991"], "content-language": ["en"], "content-encoding": ["gzip"], "transfer-encoding": ["chunked"], "strict-transport-security": ["max-age=2592000"], "server": ["nginx"], "connection": ["keep-alive"], "x-rate-limit-reset": ["1406926800"], "x-uber-app": ["uberex-nonsandbox"], "date": ["Fri, 01 Aug 2014 20:19:38 GMT"], "x-rate-limit-limit": ["5000"], "content-type": ["application/json"]}, "status": {"message": "OK", "code": 200}, "url": "https://api.uber.com/v1/estimates/time?start_longitude=-122.402367&start_latitude=37.781955"}, "recorded_at": "2014-08-01T20:19:38"}], "recorded_with": "betamax/0.4.0"} \ No newline at end of file diff --git a/3-Docker-old/app/test/test_endpoints.py b/3-Docker-old/app/test/test_endpoints.py deleted file mode 100644 index 746b849..0000000 --- a/3-Docker-old/app/test/test_endpoints.py +++ /dev/null @@ -1,161 +0,0 @@ -import unittest - -from betamax import Betamax -from app import app - -with Betamax.configure() as config: - config.cassette_library_dir = 'test/fixtures' - -test_auth_token = 'MLth87eHvSAaCQ1vn7jTd0xA9Kapo5' - - -class TestCases(unittest.TestCase): - def setUp(self): - # Necessary to disable SSLify - app.debug = True - self.test_app = app.test_client() - self.session = app.requests_session - - def test_health_endpoint(self): - """Assert that the health endpoint works.""" - response = app.test_client().get('/health') - self.assertEquals(response.data, ';-)') - - def test_root_endpoint(self): - """Assert that the / endpoint correctly redirects to login.uber.com.""" - response = app.test_client().get('/') - self.assertIn('login.uber.com', response.data) - - def test_submit_endpoint_failure(self): - """Assert that the submit endpoint returns no code in the response.""" - with app.test_client() as client: - with client.session_transaction() as session: - session['access_token'] = test_auth_token - with Betamax(app.requests_session).use_cassette('submit_failure'): - response = client.get('/submit?code=not_a_code') - self.assertIn('None', response.data) - - def test_products_endpoint_returns_success(self): - """Assert that the products endpoint returns success. - - When a valid key is passed in. - """ - with app.test_client() as client: - with client.session_transaction() as session: - session['access_token'] = test_auth_token - with Betamax(app.requests_session).use_cassette('products_success'): - response = client.get('/products') - self.assertIn('products', response.data) - self.assertEquals(response.status_code, 200) - - def test_products_endpoint_returns_failure(self): - """Assert that the products endpoint returns failure. - - When an invalid key is passed in. - """ - with app.test_client() as client: - with client.session_transaction() as session: - session['access_token'] = 'NOT_A_CODE' - with Betamax(self.session).use_cassette('products_failure'): - response = client.get('/products') - self.assertEquals(response.status_code, 401) - - def test_time_estimates_endpoint_returns_success(self): - """Assert that the time estimates endpoint returns success. - - When a valid key is passed in. - """ - with app.test_client() as client: - with client.session_transaction() as session: - session['access_token'] = test_auth_token - with Betamax(app.requests_session).use_cassette('time_estimates_success'): - response = client.get('/time') - self.assertIn('times', response.data) - self.assertEquals(response.status_code, 200) - - def test_time_estimates_endpoint_returns_failure(self): - """Assert that the time estimates endpoint returns failure. - - When an invalid key is passed in. - """ - with app.test_client() as client: - with client.session_transaction() as session: - session['access_token'] = 'NOT_A_CODE' - with Betamax(app.requests_session).use_cassette('time_estimates_failure'): - response = client.get('/time') - self.assertEquals(response.status_code, 401) - - def test_price_estimates_endpoint_returns_success(self): - """Assert that the price estimates endpoint returns success. - - When a valid key is passed in. - """ - with app.test_client() as client: - with client.session_transaction() as session: - session['access_token'] = test_auth_token - with Betamax(app.requests_session).use_cassette('price_estimates_success'): - response = client.get('/price') - self.assertIn('prices', response.data) - self.assertEquals(response.status_code, 200) - - def test_price_estimates_endpoint_returns_failure(self): - """Assert that the price estimates endpoint returns failure. - - When an invalid key is passed in. - """ - with app.test_client() as client: - with client.session_transaction() as session: - session['access_token'] = 'NOT_A_CODE' - with Betamax(app.requests_session).use_cassette('price_estimates_failure'): - response = client.get('/price') - self.assertEquals(response.status_code, 401) - - def test_history_endpoint_returns_success(self): - """Assert that the history endpoint returns success. - - When a valid key is passed in. - """ - with app.test_client() as client: - with client.session_transaction() as session: - session['access_token'] = test_auth_token - with Betamax(app.requests_session).use_cassette('history_success'): - response = client.get('/history') - self.assertIn('history', response.data) - self.assertEquals(response.status_code, 200) - - def test_history_endpoint_returns_failure(self): - """Assert that the price estimates endpoint returns failure. - - When an invalid key is passed in. - """ - with app.test_client() as client: - with client.session_transaction() as session: - session['access_token'] = 'NOT_A_CODE' - with Betamax(app.requests_session).use_cassette('history_failure'): - response = client.get('/history') - self.assertEquals(response.status_code, 401) - - def test_me_endpoint_returns_success(self): - """Assert that the me endpoint returns success. - - When a valid key is passed in. - """ - with app.test_client() as client: - with client.session_transaction() as session: - session['access_token'] = test_auth_token - with Betamax(app.requests_session).use_cassette('me_success'): - response = client.get('/me') - self.assertIn('picture', response.data) - self.assertEquals(response.status_code, 200) - - def test_me_endpoint_returns_failure(self): - """Assert that the me endpoint returns failure. - - When an invalid key is passed in. - """ - with app.test_client() as client: - with client.session_transaction() as session: - session['access_token'] = 'NOT_A_CODE' - with Betamax(app.requests_session).use_cassette('me_failure'): - response = client.get('/me') - self.assertEquals(response.status_code, 401) From c9550462898a38fc3195922ef09553a73256774c Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Fri, 27 Sep 2024 09:19:37 +0100 Subject: [PATCH 058/124] document updates --- .../1-Configure-Terraform-Remote-Storage.md | 12 +-- 1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md | 12 +-- .../1-Create-ACR.md | 14 ++-- .../2-Create-VNET.md | 15 ++-- .../3-Create-Log-Analytics.md | 15 ++-- .../4-Create-AKS-Cluster-IAM-Roles.md | 14 ++-- .../5-Run-CICD-For-AKS-Cluster.md | 16 ++-- 4-kubernetes_manifest/1-Connect-To-AKS.md | 43 +++++++++-- .../2-Create-Kubernetes-Manifest.md | 46 ++++++++++-- .../3-Deploy-Thomasthorntoncloud-App.md | 69 ++++++++++++++++++ 4-kubernetes_manifest/3-Deploy-Uber-App.md | 31 -------- 4-kubernetes_manifest/images/website.png | Bin 0 -> 104140 bytes .../1-Checkov-For-Terraform.md | 69 ++++++++++++++---- images/azure-ad-group.png | Bin 66375 -> 0 bytes images/storage-account.png | Bin 45058 -> 0 bytes 15 files changed, 248 insertions(+), 108 deletions(-) create mode 100644 4-kubernetes_manifest/3-Deploy-Thomasthorntoncloud-App.md delete mode 100644 4-kubernetes_manifest/3-Deploy-Uber-App.md create mode 100644 4-kubernetes_manifest/images/website.png delete mode 100644 images/azure-ad-group.png delete mode 100644 images/storage-account.png diff --git a/1-Azure/1-Configure-Terraform-Remote-Storage.md b/1-Azure/1-Configure-Terraform-Remote-Storage.md index 1384529..456e57a 100644 --- a/1-Azure/1-Configure-Terraform-Remote-Storage.md +++ b/1-Azure/1-Configure-Terraform-Remote-Storage.md @@ -36,12 +36,6 @@ In this lab, you'll create a secure location to store the remote Terraform State - [ ] Sets up an Azure Storage Account - [ ] Establishes an Azure Blob storage container -## 🧠 Knowledge Check -After running the script, try to answer these questions: -1. Why is it important to use remote state storage for Terraform? -2. What are the benefits of using Azure Blob Storage for this purpose? -3. How would you access this state file in your Terraform configurations? - ## 🔍 Verification To ensure everything was set up correctly: @@ -53,5 +47,11 @@ To ensure everything was set up correctly: ![](images/storage-account.png) +## 🧠 Knowledge Check +After running the script, try to answer these questions: +1. Why is it important to use remote state storage for Terraform? +2. What are the benefits of using Azure Blob Storage for this purpose? +3. How would you access this state file in your Terraform configurations? + ## 💡 Pro Tip Consider setting up access policies and encryption for your storage account to enhance security. Azure provides several options for this, including Azure AD authentication and Azure Key Vault integration. \ No newline at end of file diff --git a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md index 360b5bf..a757756 100644 --- a/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md +++ b/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md @@ -26,12 +26,6 @@ In this lab, you'll create an Azure AD Group for AKS Admins. These "admins" will **Important Note** Make sure to note down the Azure AD Group ID displayed at the end of the script execution. You'll need this for AKS Terraform configurations later. -## 🧠 Knowledge Check -After running the script, consider these questions: -1. Why is it beneficial to use Azure AD groups for AKS admin access? -2. How does this group-based access improve security compared to individual user access? -3. In what ways might you further modify the AD group for different levels of access? - ## 🔍 Verification To ensure the group was created successfully: 1. Log into the [Azure Portal](https://portal.azure.com) @@ -41,5 +35,11 @@ To ensure the group was created successfully: ![](images/azure-ad-group.png) +## 🧠 Knowledge Check +After running the script, consider these questions: +1. Why is it beneficial to use Azure AD groups for AKS admin access? +2. How does this group-based access improve security compared to individual user access? +3. In what ways might you further modify the AD group for different levels of access? + ## 💡 Pro Tip Consider setting up multiple AD groups with different levels of access (e.g., read-only, developer, admin) to implement a more granular access control strategy for your AKS clusters. diff --git a/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md index f3c05ae..81dbb11 100644 --- a/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md +++ b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -29,13 +29,6 @@ In this lab, you'll create a repository in Azure Container Registry (ACR) to sto terraform plan terraform apply -## 🧠 Knowledge Check -After creating the ACR, consider these questions: - -1. Why is it beneficial to use Terraform for creating cloud resources like ACR? -2. How does storing the Terraform state in Azure Storage Account help in team environments? -3. What are the advantages of using ACR over other container registry options? - ## 🔍 Verification To ensure the ACR was created successfully: 1. Log into the [Azure Portal](https://portal.azure.com) @@ -47,5 +40,12 @@ Example screenshot of the Terraform apply command: ![](images/acr.png) +## 🧠 Knowledge Check +After creating the ACR, consider these questions: + +1. Why is it beneficial to use Terraform for creating cloud resources like ACR? +2. How does storing the Terraform state in Azure Storage Account help in team environments? +3. What are the advantages of using ACR over other container registry options? + ## 💡 Pro Tip Consider setting up replication for your ACR to improve pull performance in different regions. You can add this to your Terraform configuration for automated setup. diff --git a/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md index 68478a4..33b5357 100644 --- a/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -39,14 +39,6 @@ In this lab, you'll set up the networking infrastructure for your AKS deployment terraform plan terraform apply - -## 🧠 Knowledge Check - -After creating the resources, consider these questions: -1. Why is it important to plan your VNET and subnet structure before deployment? -2. How does the NSG enhance the security of your AKS deployment? -3. What benefits does the Azure Application Gateway for Containers provide? - ## 🔍 Verification To ensure the resources were created successfully: @@ -59,6 +51,13 @@ Example screenshot of created resources: ![](images/vnet.png) +## 🧠 Knowledge Check + +After creating the resources, consider these questions: +1. Why is it important to plan your VNET and subnet structure before deployment? +2. How does the NSG enhance the security of your AKS deployment? +3. What benefits does the Azure Application Gateway for Containers provide? + ## 💡 Pro Tip Consider using [Azure Network Watcher](https://learn.microsoft.com/en-us/azure/network-watcher/network-watcher-overview) to visualise and diagnose your network topology and connectivity issues. diff --git a/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index dace85f..b9ce21d 100644 --- a/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -27,13 +27,7 @@ In this lab, you'll create a Log Analytics workspace to view container insights terraform init terraform plan terraform apply - -## 🧠 Knowledge Check - -After creating the Log Analytics workspace, consider these questions: -1. Why is Log Analytics important for managing AKS clusters? -2. How does the ContainerInsights solution enhance your ability to monitor AKS? -3. What types of insights can you gain from Log Analytics in an AKS context? + ``` ## 🔍 Verification To ensure the resources were created successfully: @@ -45,6 +39,13 @@ Example screenshot of created resources: ![](images/la.png) +## 🧠 Knowledge Check + +After creating the Log Analytics workspace, consider these questions: +1. Why is Log Analytics important for managing AKS clusters? +2. How does the ContainerInsights solution enhance your ability to monitor AKS? +3. What types of insights can you gain from Log Analytics in an AKS context? + ## 💡 Pro Tip Consider setting up [custom dashboards](https://azure.microsoft.com/en-gb/free/search/?ef_id=_k_Cj0KCQjwr9m3BhDHARIsANut04aW1Bkx-AcJ5QGbPg_zxVIQw_txn1OWbyl-KpP1uzi0WxsLeZHjZDEaAmGcEALw_wcB_k_&OCID=AIDcmm3bvqzxp1_SEM__k_Cj0KCQjwr9m3BhDHARIsANut04aW1Bkx-AcJ5QGbPg_zxVIQw_txn1OWbyl-KpP1uzi0WxsLeZHjZDEaAmGcEALw_wcB_k_&gad_source=1&gclid=Cj0KCQjwr9m3BhDHARIsANut04aW1Bkx-AcJ5QGbPg_zxVIQw_txn1OWbyl-KpP1uzi0WxsLeZHjZDEaAmGcEALw_wcB) in Azure Portal using the data collected by Log Analytics to get quick insights into your AKS cluster's performance and health. diff --git a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index 071a727..c33d8a2 100644 --- a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -42,13 +42,6 @@ In this lab, you'll create an Azure Kubernetes Service (AKS) cluster and set up terraform apply ``` -## 🧠 Knowledge Check - -After creating the AKS cluster and IAM roles, consider these questions: -1. Why is it important to use managed identities with AKS? -2. How does RBAC enhance the security of your AKS cluster? -3. What are the benefits of using federated identity credentials? - ## 🔍 Verification To ensure the resources were created successfully: @@ -62,6 +55,13 @@ Example screenshot of created resources: ![](images/aks.png) +## 🧠 Knowledge Check + +After creating the AKS cluster and IAM roles, consider these questions: +1. Why is it important to use managed identities with AKS? +2. How does RBAC enhance the security of your AKS cluster? +3. What are the benefits of using federated identity credentials? + ## 💡 Pro Tip Consider enabling Azure Policy for Kubernetes to enforce organisational standards and assess compliance at scale for your AKS clusters. \ No newline at end of file diff --git a/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index 41ea548..3acaac4 100644 --- a/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -37,7 +37,14 @@ In this lab, you'll learn how to create an Azure Kubernetes Service (AKS) cluste - Select the existing `CI` workflow. - Choose to run the workflow from the main branch. -### 🧠 Understanding the Workflow +## 🔍 Verification +After running the workflow: +1. Check the GitHub Actions logs for successful completion. +2. Log into the [Azure Portal](https://portal.azure.com) +3. Navigate to Kubernetes services +4. Verify that your new AKS cluster has been updated or created. + +### 🧠 Knowledge Check The GitHub Actions workflow: - [ ] Triggers manually (`workflow_dispatch`) or on pull requests/pushes to main - [ ] Checks out the code @@ -48,12 +55,5 @@ The GitHub Actions workflow: - [ ] Plans the Terraform changes - [ ] Applies the Terraform configuration to create the AKS cluster -## 🔍 Verification -After running the workflow: -1. Check the GitHub Actions logs for successful completion. -2. Log into the [Azure Portal](https://portal.azure.com) -3. Navigate to Kubernetes services -4. Verify that your new AKS cluster has been updated or created. - ## 💡 Pro Tip Consider using separate state files for different environments (dev, staging, production) to manage multiple AKS clusters and environments efficiently diff --git a/4-kubernetes_manifest/1-Connect-To-AKS.md b/4-kubernetes_manifest/1-Connect-To-AKS.md index e204cd5..263dc45 100644 --- a/4-kubernetes_manifest/1-Connect-To-AKS.md +++ b/4-kubernetes_manifest/1-Connect-To-AKS.md @@ -1,15 +1,42 @@ # Connecting To Azure Kubernetes Service (AKS) -When deploying locally to Azure Kubernetes Service (AKS) without employing any CI/CD pipelines, you'll need to authenticate from your local terminal. +## 🎯 Purpose +In this lab, you'll learn how to authenticate and connect to your Azure Kubernetes Service (AKS) cluster from your local terminal. -Upon successful authentication to AKS from your local terminal, a kubeconfig file is generated and stored on your computer. This kubeconfig file contains all the necessary connection information and authentication details required to access AKS. +## 🛠️ Connect to AKS Cluster -## Connecting To AKS +### Prerequisites +- [ ] kubectl installed on your local machine +- [ ] Access to an AKS cluster -1. Run the following command to connect to AKS: -`az aks get-credentials --resource-group devopsthehardway-rg --name devopsthehardwayaks --overwrite-existing` +### Steps -2. Once connected, you should be able to run commands like the following to confirm you're connected: -`kubectl get nodes` +1. **Authenticate and Connect to AKS** + Run the following command to connect to AKS: + ```bash + az aks get-credentials --resource-group devopsthehardway-rg --name devopsthehardwayaks --overwrite-existing + ``` -Running this command should return information about the nodes in your AKS cluster, confirming your successful connection. \ No newline at end of file +> 🔍 **Note**: Note: This command generates a kubeconfig file on your local machine with the necessary connection and authentication details. + +2. Verify Connection + Run the following command to confirm you're connected: + ```bash + kubectl get nodes + ``` +## 🔍 Verification + +To ensure you've successfully connected to your AKS cluster: +1. The `kubectl get nodes` command should return a list of nodes without any errors. +2. You should be able to run other kubectl commands, such as `kubectl get pods --all-namespaces`. + +## 🧠 Knowledge Check + +After connecting to AKS, consider these questions: +1. What is a `kubeconfig` file and why is it important? +2. How does the `az aks get-credentials` command facilitate cluster access? +3. What other kubectl commands can you use to verify your connection to the cluster? + +## 💡 Pro Tip + +Consider setting up different contexts in your kubeconfig file if you're working with multiple Kubernetes clusters. This allows you to switch between clusters easily using the `kubectl config use-context` command. diff --git a/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md b/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md index 01a2359..1c38cda 100644 --- a/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md +++ b/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md @@ -1,13 +1,45 @@ # Create The Kubernetes Manifest -Once you've successfully created a Docker image from the Uber app and stored it in Azure Container Registry (ACR), the next step is to configure the Kubernetes manifest for deploying the application to Azure Kubernetes Service (AKS). +## 🎯 Purpose +In this lab, you'll create and understand the Kubernetes manifest for deploying the Thomasthorntoncloud app to Azure Kubernetes Service (AKS). -## Understanding the Manifest +## 🛠️ Create and Configure the Kubernetes Manifest -The Kubernetes manifest comprises three key components: +### Prerequisites +- [ ] Docker image created and stored in Azure Container Registry (ACR) +- [ ] Access to your AKS cluster +- [ ] Basic understanding of Kubernetes concepts + +### Steps + +1. **Understand the Manifest Components** + The Kubernetes manifest consists of three key components: + - [ ] Deployment: Manages the application's deployment within Kubernetes + - [ ] Service: Exposes the Kubernetes application for external access + - [ ] Namespace: Organises and isolates resources within the cluster + +2. **Locate the Manifest File** + Find the `deployment.yml` file in the `4-kubernetes_manifest` directory. + +3. **Update the Image URL** + Open `deployment.yml` and locate line 24. Update the image URL to match the image stored in your Azure Container Registry. + +## 🔍 Verification +To ensure your manifest is correctly configured: +1. Review the entire `deployment.yml` file for any syntax errors +2. Verify that the image URL matches your ACR repository +3. Check that the resource requests and limits are appropriate for your application + +### 🧠 Knowledge Check +After reviewing the manifest, consider these questions: +1. What is the purpose of each component (Deployment, Service, Namespace) in the manifest? +2. Why is it important to update the image URL in the manifest? +3. How does the manifest help in managing your application in Kubernetes? + +## 🚀 Next Steps +With your Kubernetes manifest prepared, you're ready to deploy your application to AKS. In the next lab, we'll cover how to apply this manifest to your cluster. + +## 💡 Pro Tip +Consider using Helm charts for more complex applications. Helm allows you to template your Kubernetes manifests, making it easier to manage multiple environments or similar applications. -- The Deployment: This component manages the application's deployment within Kubernetes. -- The Service: Responsible for exposing the Kubernetes application, allowing access from external sources such as load balancer hostnames or IPs. -- Namespace: A mechanism for organizing and isolating resources within a Kubernetes cluster, enabling resource scoping. -The manifest `deployment.yml` can be found in the `kubernetes_manifest` directory. Ensure to update the image URL on line 39 to match the image stored in your Azure account before applying the manifest. \ No newline at end of file diff --git a/4-kubernetes_manifest/3-Deploy-Thomasthorntoncloud-App.md b/4-kubernetes_manifest/3-Deploy-Thomasthorntoncloud-App.md new file mode 100644 index 0000000..b9d7eab --- /dev/null +++ b/4-kubernetes_manifest/3-Deploy-Thomasthorntoncloud-App.md @@ -0,0 +1,69 @@ +# Deploy The Thomasthorntoncloud App + +## 🎯 Purpose +In this lab, you'll deploy the Thomasthorntoncloud app to your Azure Kubernetes Service (AKS) cluster using the prepared Kubernetes manifest. + +## 🛠️ Deploy the Application + +### Prerequisites +- [ ] AKS cluster provisioned +- [ ] Kubernetes manifest prepared +- [ ] kubectl configured to communicate with your AKS cluster + +### Steps + +1. **Navigate to the Kubernetes Manifest Directory** + ```bash + cd kubernetes_manifest + ``` +2. Deploy the Application Components + +- Install ALB Controller: + ```bash + ./scripts/1-install-alb-controller.sh + ``` +- Install Gateway API resources: + ```bash + ./scripts/2-install-gateway-api.sh + ``` +- Deploy the Thomasthorntoncloud app: + ```bash + kubectl create -f deployment.yml + ``` + +3. **Verify Deployment** + Run the following command to confirm the deployment was successful: + ```bash + kubectl get deployments + ``` +4. **Access the Thomasthorntoncloud App** + +To access the Thomasthorntoncloud app via Azure Application Gateway Controller for Containers, run the following command: + ```bash + fqdn=$(kubectl get gateway gateway-01 -n thomasthorntoncloud -o jsonpath='{.status.addresses[0].value}') + echo "http://$fqdn" + ``` + + Access the Thomasthorntoncloud app using the address provided. + +You've successfully deployed the Thomasthorntoncloud app to your AKS cluster using the Kubernetes manifest: + +![](images/website.png) + +## 🔍 Verification + +To ensure your application is deployed and running correctly: +1. Check that all pods are in the 'Running' state: kubectl get pods +2. Verify that the service is exposed: kubectl get services +3. Test the application by accessing it through the provided URL + +## 🧠 Knowledge Check + +After deploying the application, consider these questions: +1. What is the purpose of the ALB Controller in this deployment? +2. How does the Gateway API enhance the application's accessibility? +3. Why is it important to verify the deployment using `kubectl get deployments`? + +## 💡 Pro Tip + +Use Kubernetes namespaces to organise and isolate your resources, especially when deploying multiple applications or environments in the same cluster. \ No newline at end of file diff --git a/4-kubernetes_manifest/3-Deploy-Uber-App.md b/4-kubernetes_manifest/3-Deploy-Uber-App.md deleted file mode 100644 index f35f8ee..0000000 --- a/4-kubernetes_manifest/3-Deploy-Uber-App.md +++ /dev/null @@ -1,31 +0,0 @@ -# Deploy The Uber App - -Once the AKS cluster is provisioned and the Kubernetes manifest is prepared, it's time to deploy the Uber app. - -1. `cd` into the `kubernetes_manifest` directory -2. Run the following commands: -- Install ALB Controller (YModify values if necessary: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/4-kubernetes_manifest/scripts/1-install-alb-controller.sh#L3-8) ): -`./scripts/1-install-alb-controller.sh` -- Install Gateway API resources (Modify values if necessary: [here](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/4-kubernetes_manifest/scripts/2-gateway-api-resources.sh#L1-3) ): -`./scripts/2-install-gateway-api.sh` -- Deploy the Uber app: -`kubectl create -f deployment.yml` - - -You'll see an output that specifies the service and deployment was created. - -3. Run the following command to confirm that the deployment was successful: -`kubectl get deployments` - -4. Access uber-ui via Azure Application Gateway Controller for Containers - -`fqdn=$(kubectl get gateway gateway-01 -n uber-ui -o jsonpath='{.status.addresses[0].value}') -echo "http://$fqdn" -` - -Access the uber-ui using the address mentioned above, example: -`http://bye7fxhjesf7enf7.fz32.alb.azure.com` - - - - kubectl exec -it uber-ui-6d7d66c5b4-v4zvc -n uber-ui -- curl -o /dev/null -s -w "%{http_code}\n" http://localhost:5000 \ No newline at end of file diff --git a/4-kubernetes_manifest/images/website.png b/4-kubernetes_manifest/images/website.png new file mode 100644 index 0000000000000000000000000000000000000000..e72323314331e48486a8c2535a2e69bb39b9c34c GIT binary patch literal 104140 zcmZ^K1yqz>*ES%Cf|QgCi3BFbw?T`+ncI z{^jGd);+WCKKq<=oqhJcu5*W~D$8PFyu?64Lc)@ld#jFwgvO7Agp&W{G2#sEzN!)u z5=Nedl$5Hxl+-I#M>{hMYf~g7xzNNUbXAQ#BL4@kDN&IZ2|?uiuj7)**u0X@ zDWu-;USw!=tvNh`FO84v3Xlv}8A92!3#1sVjXe&2w5nwzsj znB22Ivl5C@qebr&75OGJ!0iMy5(O3xo#|9YIjMC00^TO{jKai#eGf^8EDM@gPCZm- zJ>MrVDt0kj;+tP<4*Zx7>1QOeXSied#*P`4W*qf3MYzYH(XW`3mzml+Yzj4i#gu}P z*)_}~&i@-D5qp^S>^poe5{+RZmAORIUdAJD3WXH0EXuSuJVd{$TAn~jTArREvLdF^|80~}Uh}GV3yQ7?>t=*YtBaYk zs%a-oW+fBm*DE-hB-E()pbLiEF7p;^Y!uFS1KL4+ z%t@&FODTs|ckZMZ6TbNEPba(2I&Ta!?g&jPb>LheW0pcP_iqnRm$-hTl zM-uISY+U_<1+7dR?=>>%cOq3Z%kRqLNLOE^va!g}i@pokKQ%z(`|k4!{mZ(*3*?i| z7pM|1LQrF=$op|QzgWML4Z-%1LRNi2fJG<4s47VN_2anuCoD~rLe|<>Urz1>$hfGegde_EOON9zzNMumi4DS~NumkEBMk9;%a!|R;!9Ih42{t%QR)df z&bXj@X;11eu?}+BoaoJD%@lfp*5ZxSt+8{l@P52a9fGF?!LN}p&2 zEJg~335K_XzI@v*l{cYTkG64_u~_Wix{8{QY}inKwI zvBqIMmM_Nk9`Tj&(|Wv!u|aHq+a1hJU#v@fQtNqE+@|3-#&9( z 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
9IoRA?vc-! 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 auP~^GrY|XYO}kK#pF9vGT`p + ``` + + For example: + ```bash + checkov --directory DevOps-The-Hard-Way-Azure/Terraform-AZURE-Services-Creation/1-acr + ``` + +## 🔍 Verification -Checkov is an open-source static/security analysis tool that you can use to set up policies (Policy-as-Code) for Terraform code and many other configuration languages. +To ensure Checkov is working correctly: +1. Check that the scan completes without errors +2. Review the list of passed and failed tests in the terminal output +3. Verify that you can access the results in the Bridgecrew UI -## Install Checkov +## 🧠 Knowledge Check -1. Ensure you have Python installed -2. Run the following command: -`pip install checkov` -OR -`pip3 install checkov` -3. Run `checkov` on a terminal and you'll see a prompt that will set you up with the free Bridgecrew UI, which is where you can view the results of the Terraform scan. Press `Y` to start the process. -4. Run a scan to the Terraform code. For this process, you can scan all of the Terraform code in the `Terraform-AZURE-Services-Creation` directory. +After running Checkov, consider these questions: +1. What types of issues does Checkov identify in Terraform code? +2. How does Checkov differ from other Terraform validation tools? +3. What are the benefits of using the Bridgecrew UI alongside Checkov? -An example of this would be: -`checkov --directory DevOps-The-Hard-Way-Azure/Terraform-AZURE-Services-Creation/1-acr` +## 💡 Pro Tip -You'll then see what tests have passed, what tests have failed, and what you can do to remediate the issues. You can either view the results on the terminal or from the UI. \ No newline at end of file +Use Checkov's `--compact flag` to get a more concise output, or `--quiet` to only see failed checks. This can be helpful when integrating with CI/CD pipelines. \ No newline at end of file diff --git a/images/azure-ad-group.png b/images/azure-ad-group.png deleted file mode 100644 index 2638d25b37dd6918c33f34d42863730cbb773f8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66375 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/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 Date: Fri, 27 Sep 2024 09:20:53 +0100 Subject: [PATCH 059/124] test branch images --- .../1-Configure-Terraform-Remote-Storage.md | 2 +- .../1-Create-ACR.md | 4 +-- .../2-Create-VNET.md | 4 +-- .../3-Create-Log-Analytics.md | 4 +-- .../4-Create-AKS-Cluster-IAM-Roles.md | 6 ++-- .../5-Run-CICD-For-AKS-Cluster.md | 2 +- .../2-Create-Kubernetes-Manifest.md | 2 +- README.md | 28 +++++++++---------- 8 files changed, 26 insertions(+), 26 deletions(-) diff --git a/1-Azure/1-Configure-Terraform-Remote-Storage.md b/1-Azure/1-Configure-Terraform-Remote-Storage.md index 456e57a..e7996c3 100644 --- a/1-Azure/1-Configure-Terraform-Remote-Storage.md +++ b/1-Azure/1-Configure-Terraform-Remote-Storage.md @@ -12,7 +12,7 @@ In this lab, you'll create a secure location to store the remote Terraform State ### Steps 1. **Customise Variables** - - Open the [create-terraform-storage.sh](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/scripts/create-terraform-storage.sh) script. + - Open the [create-terraform-storage.sh](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/1-Azure/scripts/create-terraform-storage.sh) script. - Locate the following lines: ```bash diff --git a/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md index 81dbb11..1310905 100644 --- a/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md +++ b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -12,11 +12,11 @@ In this lab, you'll create a repository in Azure Container Registry (ACR) to sto ## Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/1-acr/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/1-acr/terraform.tfvars) file. - Ensure all values are accurate for your environment and unique. 2. **Understand the Terraform Configuration** - Review the [ACR Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/1-acr). The `acr.tf` file will: + Review the [ACR Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/1-acr). The `acr.tf` file will: - [ ] Use a Terraform backend to store the `.tfstate` in an Azure Storage Account - [ ] Use the `uksouth` region (can change if desired) - [ ] Create a new Resource Group using `azurerm_resource_group` diff --git a/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md index 33b5357..a06f623 100644 --- a/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -11,11 +11,11 @@ In this lab, you'll set up the networking infrastructure for your AKS deployment ### Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/2-vnet/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/2-vnet/terraform.tfvars) file. - Ensure all values are accurate for your environment. 2. **Understand the Terraform Configuration** - Review the [VNET Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/2-vnet). The configuration includes: + Review the [VNET Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/2-vnet). The configuration includes: **vnet.tf:** - [ ] Uses a Terraform backend to store the `.tfstate` in Azure Storage diff --git a/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index b9ce21d..cd84d12 100644 --- a/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -11,11 +11,11 @@ In this lab, you'll create a Log Analytics workspace to view container insights ### Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars) file. - Ensure all values are accurate for your environment. 2. **Understand the Terraform Configuration** - Review the [Log Analytics Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/3-log-analytics). The `la.tf` file will: + Review the [Log Analytics Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/3-log-analytics). The `la.tf` file will: - [ ] Use a Terraform backend to store the `.tfstate` in an Azure Storage Account - [ ] Create a Log Analytics workspace using `azurerm_log_analytics_workspace` - [ ] Enable the ContainerInsights solution using `azurerm_log_analytics_solution` diff --git a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index c33d8a2..a2fa335 100644 --- a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -12,11 +12,11 @@ In this lab, you'll create an Azure Kubernetes Service (AKS) cluster and set up ### Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars) file. - Ensure all values are accurate for your environment. 2. **Understand the Terraform Configuration** - Review the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/4-aks). The configuration includes: + Review the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/4-aks). The configuration includes: **aks.tf:** - [ ] Creates AKS Cluster using `azurerm_kubernetes_cluster` @@ -32,7 +32,7 @@ In this lab, you'll create an Azure Kubernetes Service (AKS) cluster and set up - [ ] Defines role definitions using `azurerm_role_definition` 3. **Update Azure AD Group ID** - - In `terraform.tfvars`, replace line 8 with the Azure AD Group ID you noted down [earlier](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Azure/2-Create-Azure-AD-Group-AKS-Admins.md). + - In `terraform.tfvars`, replace line 8 with the Azure AD Group ID you noted down [earlier](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Azure/2-Create-Azure-AD-Group-AKS-Admins.md). 4. **Create the AKS Cluster and IAM Roles** Run the following commands in your terminal: diff --git a/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index 3acaac4..23d9a65 100644 --- a/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -12,7 +12,7 @@ In this lab, you'll learn how to create an Azure Kubernetes Service (AKS) cluste ### Steps 1. **Review and Customise Variables** - - Open the `terraform.tfvars` file in the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/Terraform-AZURE-Services-Creation/4-aks). + - Open the `terraform.tfvars` file in the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/4-aks). - Ensure all values are accurate for your environment. 2. **Set Up Azure Service Principal** diff --git a/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md b/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md index 1c38cda..77bdf28 100644 --- a/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md +++ b/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md @@ -30,7 +30,7 @@ To ensure your manifest is correctly configured: 2. Verify that the image URL matches your ACR repository 3. Check that the resource requests and limits are appropriate for your application -### 🧠 Knowledge Check +## 🧠 Knowledge Check After reviewing the manifest, consider these questions: 1. What is the purpose of each component (Deployment, Service, Namespace) in the manifest? 2. Why is it important to update the image URL in the manifest? diff --git a/README.md b/README.md index 8ff5f22..1dac395 100644 --- a/README.md +++ b/README.md @@ -51,35 +51,35 @@ Get ready to utilise a range of cutting-edge technologies and platforms to estab ### Prerequisites -Before you start, ensure you have the following [prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/prerequisites.md) in place -1. [ ] [Create a Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/1-Configure-Terraform-Remote-Storage.md) -2. [ ] [Set up an Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md) +Before you start, ensure you have the following [prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/prerequisites.md) in place +1. [ ] [Create a Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/1-Azure/1-Configure-Terraform-Remote-Storage.md) +2. [ ] [Set up an Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md) ### Main Sections 1. **Terraform** - Create all the Azure cloud services needed to run the thomasthorntoncloud application. - - [ ] [Create Azure Container Registry (ACR)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/1-Create-ACR.md) - - [ ] [Create Azure Virtual Network (VNET)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/2-Create-VNET.md) - - [ ] [Create Log Analytics](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md) - - [ ] [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) + - [ ] [Create Azure Container Registry (ACR)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-AZURE-Services-Creation/1-Create-ACR.md) + - [ ] [Create Azure Virtual Network (VNET)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-AZURE-Services-Creation/2-Create-VNET.md) + - [ ] [Create Log Analytics](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md) + - [ ] [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) 2. **Docker** - Containerise the thomasthorntoncloud application and store it in Azure Container Registry (ACR). - - [ ] [Create the Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/3-Docker/1-Create-Docker-Image.md) - - [ ] [Create a Docker Image for the thomasthorntoncloud App](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/3-Docker/Push%20Image%20To%20ACR.md) + - [ ] [Create the Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/3-Docker/1-Create-Docker-Image.md) + - [ ] [Create a Docker Image for the thomasthorntoncloud App](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/3-Docker/Push%20Image%20To%20ACR.md) 3. **Kubernetes** - Deploy application to AKS and expose the thomasthorntoncloud application to the internet. - - [ ] [Connect To AKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/1-Connect-To-ACR.md) - - [ ] [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md) - - [ ] [Deploy thomasthorntoncloud App into Kubernetes](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/3-Deploy-Uber-App.md) + - [ ] [Connect To AKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/4-kubernetes_manifest/1-Connect-To-ACR.md) + - [ ] [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md) + - [ ] [Deploy thomasthorntoncloud App into Kubernetes](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/4-kubernetes_manifest/3-Deploy-Uber-App.md) 4. **Automated Testing** Ensure code quality - - [ ] [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) + - [ ] [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) 5. **CICD** - Automatically update AKS cluster with CICD using GitHub Actions - - [ ] [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md) + - [ ] [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md) ## 🎓 Learning Checkpoints From 1b44f4059325609b3f79f60e25b52955ee65d68f Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Fri, 27 Sep 2024 09:25:49 +0100 Subject: [PATCH 060/124] link updates --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1dac395..009f4e5 100644 --- a/README.md +++ b/README.md @@ -58,10 +58,10 @@ Before you start, ensure you have the following [prerequisites](https://github.c ### Main Sections 1. **Terraform** - Create all the Azure cloud services needed to run the thomasthorntoncloud application. - - [ ] [Create Azure Container Registry (ACR)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-AZURE-Services-Creation/1-Create-ACR.md) - - [ ] [Create Azure Virtual Network (VNET)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-AZURE-Services-Creation/2-Create-VNET.md) - - [ ] [Create Log Analytics](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md) - - [ ] [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) + - [ ] [Create Azure Container Registry (ACR)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md) + - [ ] [Create Azure Virtual Network (VNET)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md) + - [ ] [Create Log Analytics](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md) + - [ ] [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) 2. **Docker** - Containerise the thomasthorntoncloud application and store it in Azure Container Registry (ACR). - [ ] [Create the Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/3-Docker/1-Create-Docker-Image.md) From ca9bc0b5f5ca26f6164506854b07d9cb5e0438ab Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Fri, 27 Sep 2024 09:29:00 +0100 Subject: [PATCH 061/124] link fix --- .../1-Checkov-For-Terraform.md | 0 README.md | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) rename {Terraform-Static-Code-Analysis => 5-Terraform-Static-Code-Analysis}/1-Checkov-For-Terraform.md (100%) diff --git a/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md b/5-Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md similarity index 100% rename from Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md rename to 5-Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md diff --git a/README.md b/README.md index 009f4e5..b7200c8 100644 --- a/README.md +++ b/README.md @@ -65,21 +65,21 @@ Before you start, ensure you have the following [prerequisites](https://github.c 2. **Docker** - Containerise the thomasthorntoncloud application and store it in Azure Container Registry (ACR). - [ ] [Create the Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/3-Docker/1-Create-Docker-Image.md) - - [ ] [Create a Docker Image for the thomasthorntoncloud App](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/3-Docker/Push%20Image%20To%20ACR.md) + - [ ] [Create a Docker Image for the thomasthorntoncloud App](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/3-Docker/2-Push%20Image%20To%20ACR.md) 3. **Kubernetes** - Deploy application to AKS and expose the thomasthorntoncloud application to the internet. - - [ ] [Connect To AKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/4-kubernetes_manifest/1-Connect-To-ACR.md) + - [ ] [Connect To AKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/4-kubernetes_manifest/1-Connect-To-AKS.md) - [ ] [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md) - - [ ] [Deploy thomasthorntoncloud App into Kubernetes](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/4-kubernetes_manifest/3-Deploy-Uber-App.md) + - [ ] [Deploy thomasthorntoncloud App into Kubernetes](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/4-kubernetes_manifest/3-Deploy-Thomasthorntoncloud-App.md) 4. **Automated Testing** Ensure code quality - - [ ] [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) + - [ ] [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/5-Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) 5. **CICD** - Automatically update AKS cluster with CICD using GitHub Actions - - [ ] [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md) + - [ ] [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md) ## 🎓 Learning Checkpoints From f71aa90ea1c07635cbac46c02da0e96d5f051b2c Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Fri, 27 Sep 2024 09:32:32 +0100 Subject: [PATCH 062/124] fix links --- 2-Terraform-AZURE-Services-Creation/1-Create-ACR.md | 4 ++-- 2-Terraform-AZURE-Services-Creation/2-Create-VNET.md | 2 +- 2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md | 4 ++-- .../5-Run-CICD-For-AKS-Cluster.md | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md index 1310905..4d5c54b 100644 --- a/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md +++ b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -12,11 +12,11 @@ In this lab, you'll create a repository in Azure Container Registry (ACR) to sto ## Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/1-acr/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/1-acr/terraform.tfvars) file. - Ensure all values are accurate for your environment and unique. 2. **Understand the Terraform Configuration** - Review the [ACR Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/1-acr). The `acr.tf` file will: + Review the [ACR Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/1-acr). The `acr.tf` file will: - [ ] Use a Terraform backend to store the `.tfstate` in an Azure Storage Account - [ ] Use the `uksouth` region (can change if desired) - [ ] Create a new Resource Group using `azurerm_resource_group` diff --git a/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md index a06f623..3d24536 100644 --- a/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -11,7 +11,7 @@ In this lab, you'll set up the networking infrastructure for your AKS deployment ### Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/2-vnet/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/2-vnet/terraform.tfvars) file. - Ensure all values are accurate for your environment. 2. **Understand the Terraform Configuration** diff --git a/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index cd84d12..1e824f4 100644 --- a/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -11,11 +11,11 @@ In this lab, you'll create a Log Analytics workspace to view container insights ### Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars) file. - Ensure all values are accurate for your environment. 2. **Understand the Terraform Configuration** - Review the [Log Analytics Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/3-log-analytics). The `la.tf` file will: + Review the [Log Analytics Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/3-log-analytics). The `la.tf` file will: - [ ] Use a Terraform backend to store the `.tfstate` in an Azure Storage Account - [ ] Create a Log Analytics workspace using `azurerm_log_analytics_workspace` - [ ] Enable the ContainerInsights solution using `azurerm_log_analytics_solution` diff --git a/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index 23d9a65..757a560 100644 --- a/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -12,7 +12,7 @@ In this lab, you'll learn how to create an Azure Kubernetes Service (AKS) cluste ### Steps 1. **Review and Customise Variables** - - Open the `terraform.tfvars` file in the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/4-aks). + - Open the `terraform.tfvars` file in the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/4-aks). - Ensure all values are accurate for your environment. 2. **Set Up Azure Service Principal** From b907ec4288363ec058315f5476d082dc91d34c68 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Fri, 27 Sep 2024 09:35:16 +0100 Subject: [PATCH 063/124] fix link --- .../4-Create-AKS-Cluster-IAM-Roles.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index a2fa335..a4da5f2 100644 --- a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -12,11 +12,11 @@ In this lab, you'll create an Azure Kubernetes Service (AKS) cluster and set up ### Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars) file. - Ensure all values are accurate for your environment. 2. **Understand the Terraform Configuration** - Review the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/Terraform-AZURE-Services-Creation/4-aks). The configuration includes: + Review the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/4-aks). The configuration includes: **aks.tf:** - [ ] Creates AKS Cluster using `azurerm_kubernetes_cluster` From 1606cebd3e875b459b0d574a4c0d79b043c55f4e Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Fri, 27 Sep 2024 09:36:26 +0100 Subject: [PATCH 064/124] update link --- .../4-Create-AKS-Cluster-IAM-Roles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index a4da5f2..4fa2076 100644 --- a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -32,7 +32,7 @@ In this lab, you'll create an Azure Kubernetes Service (AKS) cluster and set up - [ ] Defines role definitions using `azurerm_role_definition` 3. **Update Azure AD Group ID** - - In `terraform.tfvars`, replace line 8 with the Azure AD Group ID you noted down [earlier](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/Azure/2-Create-Azure-AD-Group-AKS-Admins.md). + - In `terraform.tfvars`, replace line 8 with the Azure AD Group ID you noted down [earlier](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md). 4. **Create the AKS Cluster and IAM Roles** Run the following commands in your terminal: From 3e8ba974f7f52cf5177490b11db65049281ffb69 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Fri, 27 Sep 2024 10:41:46 +0100 Subject: [PATCH 065/124] app namings --- .../1-Configure-Terraform-Remote-Storage.md | 2 +- .../1-Create-ACR.md | 6 ++-- .../2-Create-VNET.md | 4 +-- .../3-Create-Log-Analytics.md | 4 +-- .../4-Create-AKS-Cluster-IAM-Roles.md | 6 ++-- .../5-Run-CICD-For-AKS-Cluster.md | 2 +- 3-Docker/1-Create-Docker-Image.md | 4 +-- .../2-Create-Kubernetes-Manifest.md | 2 +- .../3-Deploy-Thomasthorntoncloud-App.md | 6 ++-- README.md | 34 +++++++++---------- 10 files changed, 35 insertions(+), 35 deletions(-) diff --git a/1-Azure/1-Configure-Terraform-Remote-Storage.md b/1-Azure/1-Configure-Terraform-Remote-Storage.md index e7996c3..456e57a 100644 --- a/1-Azure/1-Configure-Terraform-Remote-Storage.md +++ b/1-Azure/1-Configure-Terraform-Remote-Storage.md @@ -12,7 +12,7 @@ In this lab, you'll create a secure location to store the remote Terraform State ### Steps 1. **Customise Variables** - - Open the [create-terraform-storage.sh](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/1-Azure/scripts/create-terraform-storage.sh) script. + - Open the [create-terraform-storage.sh](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/scripts/create-terraform-storage.sh) script. - Locate the following lines: ```bash diff --git a/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md index 4d5c54b..a07d655 100644 --- a/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md +++ b/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md @@ -1,7 +1,7 @@ # Create an Azure Container Registry Repository ## 🎯 Purpose -In this lab, you'll create a repository in Azure Container Registry (ACR) to store the Docker image for the thomasthorntoncloud app. +In this lab, you'll create a repository in Azure Container Registry (ACR) to store the Docker image for the thomasthornton.cloud app. ## 🛠️ Create the ACR Terraform Configuration @@ -12,11 +12,11 @@ In this lab, you'll create a repository in Azure Container Registry (ACR) to sto ## Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/1-acr/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/1-acr/terraform.tfvars) file. - Ensure all values are accurate for your environment and unique. 2. **Understand the Terraform Configuration** - Review the [ACR Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/1-acr). The `acr.tf` file will: + Review the [ACR Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/1-acr). The `acr.tf` file will: - [ ] Use a Terraform backend to store the `.tfstate` in an Azure Storage Account - [ ] Use the `uksouth` region (can change if desired) - [ ] Create a new Resource Group using `azurerm_resource_group` diff --git a/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md index 3d24536..e4bdd7d 100644 --- a/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md +++ b/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md @@ -11,11 +11,11 @@ In this lab, you'll set up the networking infrastructure for your AKS deployment ### Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/2-vnet/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/2-vnet/terraform.tfvars) file. - Ensure all values are accurate for your environment. 2. **Understand the Terraform Configuration** - Review the [VNET Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/2-vnet). The configuration includes: + Review the [VNET Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/2-vnet). The configuration includes: **vnet.tf:** - [ ] Uses a Terraform backend to store the `.tfstate` in Azure Storage diff --git a/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md index 1e824f4..47ed9a1 100644 --- a/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md +++ b/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md @@ -11,11 +11,11 @@ In this lab, you'll create a Log Analytics workspace to view container insights ### Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/3-log-analytics/terraform.tfvars) file. - Ensure all values are accurate for your environment. 2. **Understand the Terraform Configuration** - Review the [Log Analytics Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/3-log-analytics). The `la.tf` file will: + Review the [Log Analytics Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/3-log-analytics). The `la.tf` file will: - [ ] Use a Terraform backend to store the `.tfstate` in an Azure Storage Account - [ ] Create a Log Analytics workspace using `azurerm_log_analytics_workspace` - [ ] Enable the ContainerInsights solution using `azurerm_log_analytics_solution` diff --git a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md index 4fa2076..86727b0 100644 --- a/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md +++ b/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md @@ -12,11 +12,11 @@ In this lab, you'll create an Azure Kubernetes Service (AKS) cluster and set up ### Steps 1. **Review and Change Terraform .tfvars** - - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars) file. + - Open the [terraform.tfvars](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/4-aks/terraform.tfvars) file. - Ensure all values are accurate for your environment. 2. **Understand the Terraform Configuration** - Review the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/4-aks). The configuration includes: + Review the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/4-aks). The configuration includes: **aks.tf:** - [ ] Creates AKS Cluster using `azurerm_kubernetes_cluster` @@ -32,7 +32,7 @@ In this lab, you'll create an Azure Kubernetes Service (AKS) cluster and set up - [ ] Defines role definitions using `azurerm_role_definition` 3. **Update Azure AD Group ID** - - In `terraform.tfvars`, replace line 8 with the Azure AD Group ID you noted down [earlier](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md). + - In `terraform.tfvars`, replace line 8 with the Azure AD Group ID you noted down [earlier](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md). 4. **Create the AKS Cluster and IAM Roles** Run the following commands in your terminal: diff --git a/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md index 757a560..71cbcd1 100644 --- a/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md +++ b/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md @@ -12,7 +12,7 @@ In this lab, you'll learn how to create an Azure Kubernetes Service (AKS) cluste ### Steps 1. **Review and Customise Variables** - - Open the `terraform.tfvars` file in the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/updates-sept-2024/2-Terraform-AZURE-Services-Creation/4-aks). + - Open the `terraform.tfvars` file in the [AKS Terraform configuration](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/tree/main/2-Terraform-AZURE-Services-Creation/4-aks). - Ensure all values are accurate for your environment. 2. **Set Up Azure Service Principal** diff --git a/3-Docker/1-Create-Docker-Image.md b/3-Docker/1-Create-Docker-Image.md index d981651..a1ca47f 100644 --- a/3-Docker/1-Create-Docker-Image.md +++ b/3-Docker/1-Create-Docker-Image.md @@ -1,7 +1,7 @@ -# Creating the Docker Image for the Thomasthorntoncloud App +# Creating the Docker Image for the Thomasthornton.cloud App ## 🎯 Purpose -In this lab, you'll create a Docker image to containerise the Thomasthorntoncloud app and run it locally. +In this lab, you'll create a Docker image to containerise the Thomasthornton.cloud app and run it locally. ## 🛠️ Create The Docker Image diff --git a/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md b/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md index 77bdf28..fea8fcf 100644 --- a/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md +++ b/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md @@ -1,7 +1,7 @@ # Create The Kubernetes Manifest ## 🎯 Purpose -In this lab, you'll create and understand the Kubernetes manifest for deploying the Thomasthorntoncloud app to Azure Kubernetes Service (AKS). +In this lab, you'll create and understand the Kubernetes manifest for deploying the Thomasthornton.cloud app to Azure Kubernetes Service (AKS). ## 🛠️ Create and Configure the Kubernetes Manifest diff --git a/4-kubernetes_manifest/3-Deploy-Thomasthorntoncloud-App.md b/4-kubernetes_manifest/3-Deploy-Thomasthorntoncloud-App.md index b9d7eab..35f7cdd 100644 --- a/4-kubernetes_manifest/3-Deploy-Thomasthorntoncloud-App.md +++ b/4-kubernetes_manifest/3-Deploy-Thomasthorntoncloud-App.md @@ -36,7 +36,7 @@ In this lab, you'll deploy the Thomasthorntoncloud app to your Azure Kubernetes ```bash kubectl get deployments ``` -4. **Access the Thomasthorntoncloud App** +4. **Access the Thomasthornton.cloud App** To access the Thomasthorntoncloud app via Azure Application Gateway Controller for Containers, run the following command: ```bash @@ -44,9 +44,9 @@ To access the Thomasthorntoncloud app via Azure Application Gateway Controller f echo "http://$fqdn" ``` - Access the Thomasthorntoncloud app using the address provided. + Access the Thomasthornton.cloud app using the address provided. -You've successfully deployed the Thomasthorntoncloud app to your AKS cluster using the Kubernetes manifest: +You've successfully deployed the Thomasthornton.cloud app to your AKS cluster using the Kubernetes manifest: ![](images/website.png) diff --git a/README.md b/README.md index b7200c8..5bede6b 100644 --- a/README.md +++ b/README.md @@ -51,35 +51,35 @@ Get ready to utilise a range of cutting-edge technologies and platforms to estab ### Prerequisites -Before you start, ensure you have the following [prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/prerequisites.md) in place -1. [ ] [Create a Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/1-Azure/1-Configure-Terraform-Remote-Storage.md) -2. [ ] [Set up an Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md) +Before you start, ensure you have the following [prerequisites](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/prerequisites.md) in place +1. [ ] [Create a Storage Account for Terraform State file](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/1-Configure-Terraform-Remote-Storage.md) +2. [ ] [Set up an Azure AD Group for AKS Admins](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/1-Azure/2-Create-Azure-AD-Group-AKS-Admins.md) ### Main Sections -1. **Terraform** - Create all the Azure cloud services needed to run the thomasthorntoncloud application. - - [ ] [Create Azure Container Registry (ACR)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md) - - [ ] [Create Azure Virtual Network (VNET)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md) - - [ ] [Create Log Analytics](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md) - - [ ] [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) +1. **Terraform** - Create all the Azure cloud services needed to run the thomasthornton.cloud application. + - [ ] [Create Azure Container Registry (ACR)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/2-Terraform-AZURE-Services-Creation/1-Create-ACR.md) + - [ ] [Create Azure Virtual Network (VNET)](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/2-Terraform-AZURE-Services-Creation/2-Create-VNET.md) + - [ ] [Create Log Analytics](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/2-Terraform-AZURE-Services-Creation/3-Create-Log-Analytics.md) + - [ ] [Create AKS Cluster with relevant IAM roles](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/2-Terraform-AZURE-Services-Creation/4-Create-AKS-Cluster-IAM-Roles.md) -2. **Docker** - Containerise the thomasthorntoncloud application and store it in Azure Container Registry (ACR). - - [ ] [Create the Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/3-Docker/1-Create-Docker-Image.md) - - [ ] [Create a Docker Image for the thomasthorntoncloud App](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/3-Docker/2-Push%20Image%20To%20ACR.md) +2. **Docker** - Containerise the thomasthornton.cloud application and store it in Azure Container Registry (ACR). + - [ ] [Create the Docker Image](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/3-Docker/1-Create-Docker-Image.md) + - [ ] [Create a Docker Image for the thomasthornton.cloud App](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/3-Docker/2-Push%20Image%20To%20ACR.md) -3. **Kubernetes** - Deploy application to AKS and expose the thomasthorntoncloud application to the internet. - - [ ] [Connect To AKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/4-kubernetes_manifest/1-Connect-To-AKS.md) - - [ ] [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md) - - [ ] [Deploy thomasthorntoncloud App into Kubernetes](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/4-kubernetes_manifest/3-Deploy-Thomasthorntoncloud-App.md) +3. **Kubernetes** - Deploy application to AKS and expose the thomasthornton.cloud application to the internet. + - [ ] [Connect To AKS From The Terminal](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/1-Connect-To-AKS.md) + - [ ] [Create A Kubernetes Manifest](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/2-Create-Kubernetes-Manifest.md) + - [ ] [Deploy thomasthornton.cloud App into Kubernetes](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/4-kubernetes_manifest/3-Deploy-Thomasthorntoncloud-App.md) 4. **Automated Testing** Ensure code quality - - [ ] [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/5-Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) + - [ ] [Install And Run Checkov](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/5-Terraform-Static-Code-Analysis/1-Checkov-For-Terraform.md) 5. **CICD** - Automatically update AKS cluster with CICD using GitHub Actions - - [ ] [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/updates-sept-2024/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md) + - [ ] [Create a GitHub Actions CICD pipeline](https://github.com/thomast1906/DevOps-The-Hard-Way-Azure/blob/main/2-Terraform-AZURE-Services-Creation/5-Run-CICD-For-AKS-Cluster.md) ## 🎓 Learning Checkpoints From 8d4955516a59589d3d8cae271ab13d738030cc3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:53:21 +0000 Subject: [PATCH 066/124] Update dependency Werkzeug to v2.3.8 --- 3-Docker/app/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3-Docker/app/requirements.txt b/3-Docker/app/requirements.txt index e0f2ec9..dca3a24 100644 --- a/3-Docker/app/requirements.txt +++ b/3-Docker/app/requirements.txt @@ -1,2 +1,2 @@ Flask==2.0.1 -Werkzeug==2.0.1 \ No newline at end of file +Werkzeug==2.3.8 \ No newline at end of file From fff374f411763fdcdddd47f9c0d032fe8258300b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 10:42:07 +0000 Subject: [PATCH 067/124] Update python Docker tag to v3.12 --- 3-Docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3-Docker/Dockerfile b/3-Docker/Dockerfile index 15428d1..3759f24 100644 --- a/3-Docker/Dockerfile +++ b/3-Docker/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9-slim +FROM python:3.12-slim RUN mkdir /build WORKDIR /build From 2a0bac24c12fa4b3e3fd9ab1fc47cfc1745d8e28 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 12:39:39 +0000 Subject: [PATCH 068/124] Update dependency Werkzeug to v3 --- 3-Docker/app/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3-Docker/app/requirements.txt b/3-Docker/app/requirements.txt index dca3a24..6a41dfb 100644 --- a/3-Docker/app/requirements.txt +++ b/3-Docker/app/requirements.txt @@ -1,2 +1,2 @@ Flask==2.0.1 -Werkzeug==2.3.8 \ No newline at end of file +Werkzeug==3.0.4 \ No newline at end of file From 306548d7832abb4b63002f30064488e5e4047c95 Mon Sep 17 00:00:00 2001 From: Thomas Thornton Date: Fri, 27 Sep 2024 15:19:16 +0100 Subject: [PATCH 069/124] Revert "Update dependency Werkzeug to v3" --- 3-Docker/app/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3-Docker/app/requirements.txt b/3-Docker/app/requirements.txt index 6a41dfb..dca3a24 100644 --- a/3-Docker/app/requirements.txt +++ b/3-Docker/app/requirements.txt @@ -1,2 +1,2 @@ Flask==2.0.1 -Werkzeug==3.0.4 \ No newline at end of file +Werkzeug==2.3.8 \ No newline at end of file From ccc29a357c741119a835281247e15e45715aa992 Mon Sep 17 00:00:00 2001 From: Thomas Thornton <> Date: Mon, 21 Oct 2024 09:50:38 +0100 Subject: [PATCH 070/124] original app --- 3-Docker/app/Dockerfile | 16 + 3-Docker/app/Pages/About.cshtml | 9 + 3-Docker/app/Pages/About.cshtml.cs | 16 + 3-Docker/app/Pages/Contact.cshtml | 21 + 3-Docker/app/Pages/Contact.cshtml.cs | 16 + 3-Docker/app/Pages/Error.cshtml | 26 + 3-Docker/app/Pages/Error.cshtml.cs | 23 + 3-Docker/app/Pages/Index.cshtml | 43 + 3-Docker/app/Pages/Index.cshtml.cs | 21 + 3-Docker/app/Pages/Privacy.cshtml | 8 + 3-Docker/app/Pages/Privacy.cshtml.cs | 16 + .../Pages/Shared/_CookieConsentPartial.cshtml | 25 + 3-Docker/app/Pages/Shared/_Layout.cshtml | 80 + .../Shared/_ValidationScriptsPartial.cshtml | 18 + 3-Docker/app/Pages/_ViewImports.cshtml | 3 + 3-Docker/app/Pages/_ViewStart.cshtml | 3 + 3-Docker/app/Program.cs | 24 + 3-Docker/app/Startup.cs | 64 + 3-Docker/app/app.py | 12 - 3-Docker/app/appsettings.Development.json | 9 + 3-Docker/app/appsettings.json | 11 + 3-Docker/app/aspnet-core-dotnet-core.csproj | 19 + 3-Docker/app/bundleconfig.json | 22 + 3-Docker/app/charts/sampleapp/.helmignore | 21 + 3-Docker/app/charts/sampleapp/Chart.yaml | 4 + .../app/charts/sampleapp/templates/NOTES.txt | 9 + .../charts/sampleapp/templates/_helpers.tpl | 32 + .../sampleapp/templates/deployment.yaml | 72 + .../charts/sampleapp/templates/ingress.yaml | 36 + .../charts/sampleapp/templates/secrets.yaml | 12 + .../charts/sampleapp/templates/service.yaml | 23 + 3-Docker/app/charts/sampleapp/values.yaml | 57 + 3-Docker/app/requirements.txt | 2 - 3-Docker/app/templates/index.html | 88 - 3-Docker/app/wwwroot/css/site.css | 128 + 3-Docker/app/wwwroot/css/site.min.css | 1 + 3-Docker/app/wwwroot/favicon.ico | Bin 0 -> 32038 bytes .../app/wwwroot/images/successCloudNew.svg | 1 + 3-Docker/app/wwwroot/images/tweetThis.svg | 1 + 3-Docker/app/wwwroot/js/site.js | 4 + 3-Docker/app/wwwroot/js/site.min.js | 0 3-Docker/app/wwwroot/lib/bootstrap/LICENSE | 22 + .../lib/bootstrap/dist/css/bootstrap-grid.css | 3719 ++++++ .../bootstrap/dist/css/bootstrap-grid.css.map | 1 + .../bootstrap/dist/css/bootstrap-grid.min.css | 7 + .../dist/css/bootstrap-grid.min.css.map | 1 + .../bootstrap/dist/css/bootstrap-reboot.css | 331 + .../dist/css/bootstrap-reboot.css.map | 1 + .../dist/css/bootstrap-reboot.min.css | 8 + .../dist/css/bootstrap-reboot.min.css.map | 1 + .../lib/bootstrap/dist/css/bootstrap.css | 10039 +++++++++++++++ .../lib/bootstrap/dist/css/bootstrap.css.map | 1 + .../lib/bootstrap/dist/css/bootstrap.min.css | 7 + .../bootstrap/dist/css/bootstrap.min.css.map | 1 + .../lib/bootstrap/dist/js/bootstrap.bundle.js | 7013 +++++++++++ .../bootstrap/dist/js/bootstrap.bundle.js.map | 1 + .../bootstrap/dist/js/bootstrap.bundle.min.js | 7 + .../dist/js/bootstrap.bundle.min.js.map | 1 + .../lib/bootstrap/dist/js/bootstrap.js | 4435 +++++++ .../lib/bootstrap/dist/js/bootstrap.js.map | 1 + .../lib/bootstrap/dist/js/bootstrap.min.js | 7 + .../bootstrap/dist/js/bootstrap.min.js.map | 1 + .../jquery-validation-unobtrusive/LICENSE.txt | 12 + .../jquery.validate.unobtrusive.js | 432 + .../jquery.validate.unobtrusive.min.js | 5 + .../wwwroot/lib/jquery-validation/LICENSE.md | 22 + .../dist/additional-methods.js | 1158 ++ .../dist/additional-methods.min.js | 4 + .../jquery-validation/dist/jquery.validate.js | 1601 +++ .../dist/jquery.validate.min.js | 4 + 3-Docker/app/wwwroot/lib/jquery/LICENSE.txt | 36 + .../app/wwwroot/lib/jquery/dist/jquery.js | 10364 ++++++++++++++++ .../app/wwwroot/lib/jquery/dist/jquery.min.js | 2 + .../wwwroot/lib/jquery/dist/jquery.min.map | 1 + 74 files changed, 40140 insertions(+), 102 deletions(-) create mode 100644 3-Docker/app/Dockerfile create mode 100644 3-Docker/app/Pages/About.cshtml create mode 100644 3-Docker/app/Pages/About.cshtml.cs create mode 100644 3-Docker/app/Pages/Contact.cshtml create mode 100644 3-Docker/app/Pages/Contact.cshtml.cs create mode 100644 3-Docker/app/Pages/Error.cshtml create mode 100644 3-Docker/app/Pages/Error.cshtml.cs create mode 100644 3-Docker/app/Pages/Index.cshtml create mode 100644 3-Docker/app/Pages/Index.cshtml.cs create mode 100644 3-Docker/app/Pages/Privacy.cshtml create mode 100644 3-Docker/app/Pages/Privacy.cshtml.cs create mode 100644 3-Docker/app/Pages/Shared/_CookieConsentPartial.cshtml create mode 100644 3-Docker/app/Pages/Shared/_Layout.cshtml create mode 100644 3-Docker/app/Pages/Shared/_ValidationScriptsPartial.cshtml create mode 100644 3-Docker/app/Pages/_ViewImports.cshtml create mode 100644 3-Docker/app/Pages/_ViewStart.cshtml create mode 100644 3-Docker/app/Program.cs create mode 100644 3-Docker/app/Startup.cs delete mode 100644 3-Docker/app/app.py create mode 100644 3-Docker/app/appsettings.Development.json create mode 100644 3-Docker/app/appsettings.json create mode 100644 3-Docker/app/aspnet-core-dotnet-core.csproj create mode 100644 3-Docker/app/bundleconfig.json create mode 100644 3-Docker/app/charts/sampleapp/.helmignore create mode 100644 3-Docker/app/charts/sampleapp/Chart.yaml create mode 100644 3-Docker/app/charts/sampleapp/templates/NOTES.txt create mode 100644 3-Docker/app/charts/sampleapp/templates/_helpers.tpl create mode 100644 3-Docker/app/charts/sampleapp/templates/deployment.yaml create mode 100644 3-Docker/app/charts/sampleapp/templates/ingress.yaml create mode 100644 3-Docker/app/charts/sampleapp/templates/secrets.yaml create mode 100644 3-Docker/app/charts/sampleapp/templates/service.yaml create mode 100644 3-Docker/app/charts/sampleapp/values.yaml delete mode 100644 3-Docker/app/requirements.txt delete mode 100644 3-Docker/app/templates/index.html create mode 100644 3-Docker/app/wwwroot/css/site.css create mode 100644 3-Docker/app/wwwroot/css/site.min.css create mode 100644 3-Docker/app/wwwroot/favicon.ico create mode 100644 3-Docker/app/wwwroot/images/successCloudNew.svg create mode 100644 3-Docker/app/wwwroot/images/tweetThis.svg create mode 100644 3-Docker/app/wwwroot/js/site.js create mode 100644 3-Docker/app/wwwroot/js/site.min.js create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/LICENSE create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap.css create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/js/bootstrap.js create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js create mode 100644 3-Docker/app/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map create mode 100644 3-Docker/app/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt create mode 100644 3-Docker/app/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js create mode 100644 3-Docker/app/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js create mode 100644 3-Docker/app/wwwroot/lib/jquery-validation/LICENSE.md create mode 100644 3-Docker/app/wwwroot/lib/jquery-validation/dist/additional-methods.js create mode 100644 3-Docker/app/wwwroot/lib/jquery-validation/dist/additional-methods.min.js create mode 100644 3-Docker/app/wwwroot/lib/jquery-validation/dist/jquery.validate.js create mode 100644 3-Docker/app/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js create mode 100644 3-Docker/app/wwwroot/lib/jquery/LICENSE.txt create mode 100644 3-Docker/app/wwwroot/lib/jquery/dist/jquery.js create mode 100644 3-Docker/app/wwwroot/lib/jquery/dist/jquery.min.js create mode 100644 3-Docker/app/wwwroot/lib/jquery/dist/jquery.min.map diff --git a/3-Docker/app/Dockerfile b/3-Docker/app/Dockerfile new file mode 100644 index 0000000..3a81348 --- /dev/null +++ b/3-Docker/app/Dockerfile @@ -0,0 +1,16 @@ +FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build-env +WORKDIR /app + +# Copy csproj and restore as distinct layers +COPY *.csproj ./ +RUN dotnet restore + +# Copy everything else and build +COPY . ./ +RUN dotnet publish -c Release -o out + +# Build runtime image +FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim +WORKDIR /app +COPY --from=build-env /app/out . +ENTRYPOINT ["dotnet", "aspnet-core-dotnet-core.dll"] \ No newline at end of file diff --git a/3-Docker/app/Pages/About.cshtml b/3-Docker/app/Pages/About.cshtml new file mode 100644 index 0000000..99cc56e --- /dev/null +++ b/3-Docker/app/Pages/About.cshtml @@ -0,0 +1,9 @@ +@page +@model AboutModel +@{ + ViewData["Title"] = "About"; +} +
+

Your application description page.

+ +

Use this area to provide additional information.

diff --git a/3-Docker/app/Pages/About.cshtml.cs b/3-Docker/app/Pages/About.cshtml.cs new file mode 100644 index 0000000..b3a40a0 --- /dev/null +++ b/3-Docker/app/Pages/About.cshtml.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace aspnet_core_dotnet_core.Pages +{ + public class AboutModel : PageModel + { + public void OnGet() + { + } + } +} \ No newline at end of file diff --git a/3-Docker/app/Pages/Contact.cshtml b/3-Docker/app/Pages/Contact.cshtml new file mode 100644 index 0000000..13935f2 --- /dev/null +++ b/3-Docker/app/Pages/Contact.cshtml @@ -0,0 +1,21 @@ +@page +@model ContactModel +@{ + ViewData["Title"] = "Contact"; +} +
+

Your contact page.

+ +
+ One Microsoft Way
+ Redmond, WA 98052-6399
+ P: + 425.555.0100 +
+ +
+ + diff --git a/3-Docker/app/Pages/Contact.cshtml.cs b/3-Docker/app/Pages/Contact.cshtml.cs new file mode 100644 index 0000000..7a4e31b --- /dev/null +++ b/3-Docker/app/Pages/Contact.cshtml.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace aspnet_core_dotnet_core.Pages +{ + public class ContactModel : PageModel + { + public void OnGet() + { + } + } +} \ No newline at end of file diff --git a/3-Docker/app/Pages/Error.cshtml b/3-Docker/app/Pages/Error.cshtml new file mode 100644 index 0000000..6f92b95 --- /dev/null +++ b/3-Docker/app/Pages/Error.cshtml @@ -0,0 +1,26 @@ +@page +@model ErrorModel +@{ + ViewData["Title"] = "Error"; +} + +

Error.

+

An error occurred while processing your request.

+ +@if (Model.ShowRequestId) +{ +

+ Request ID: @Model.RequestId +

+} + +

Development Mode

+

+ Swapping to the Development environment displays detailed information about the error that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

diff --git a/3-Docker/app/Pages/Error.cshtml.cs b/3-Docker/app/Pages/Error.cshtml.cs new file mode 100644 index 0000000..d98546f --- /dev/null +++ b/3-Docker/app/Pages/Error.cshtml.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace aspnet_core_dotnet_core.Pages +{ + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + public class ErrorModel : PageModel + { + public string RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + + public void OnGet() + { + RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; + } + } +} diff --git a/3-Docker/app/Pages/Index.cshtml b/3-Docker/app/Pages/Index.cshtml new file mode 100644 index 0000000..095e804 --- /dev/null +++ b/3-Docker/app/Pages/Index.cshtml @@ -0,0 +1,43 @@ +@page +@model IndexModel +@{ + ViewData["Title"] = "Home Page - ASP.NET Core 3.1"; +} + +
+
+ +
+
+
+ + + +
+
+
Success!
+
Azure DevOps Project has been successfully setup
+
Your ASP.NET Core app is up and running on Azure
+
+
+
+
+
+

Get started right away

+

+ Clone your code repository and start developing your application on IDE of your choice +

+

Learn more »

+
+
+

Continuous Delivery

+

View your CI/CD pipeline on Azure Devops and customize it as per your needs

+

Learn more »

+
+
+

Azure DevOps Project

+

Learn more about all you can do with Azure DevOps project by visiting the documentation

+

Learn more »

+
+
+ diff --git a/3-Docker/app/Pages/Index.cshtml.cs b/3-Docker/app/Pages/Index.cshtml.cs new file mode 100644 index 0000000..1d3761a --- /dev/null +++ b/3-Docker/app/Pages/Index.cshtml.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace aspnet_core_dotnet_core.Pages +{ + public class IndexModel : PageModel + { + public void OnGet() + { + + } + public string DoTest() + { + return "Index"; + } + } +} \ No newline at end of file diff --git a/3-Docker/app/Pages/Privacy.cshtml b/3-Docker/app/Pages/Privacy.cshtml new file mode 100644 index 0000000..46ba966 --- /dev/null +++ b/3-Docker/app/Pages/Privacy.cshtml @@ -0,0 +1,8 @@ +@page +@model PrivacyModel +@{ + ViewData["Title"] = "Privacy Policy"; +} +

@ViewData["Title"]

+ +

Use this page to detail your site's privacy policy.

diff --git a/3-Docker/app/Pages/Privacy.cshtml.cs b/3-Docker/app/Pages/Privacy.cshtml.cs new file mode 100644 index 0000000..43626e3 --- /dev/null +++ b/3-Docker/app/Pages/Privacy.cshtml.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace aspnet_core_dotnet_core.Pages +{ + public class PrivacyModel : PageModel + { + public void OnGet() + { + } + } +} \ No newline at end of file diff --git a/3-Docker/app/Pages/Shared/_CookieConsentPartial.cshtml b/3-Docker/app/Pages/Shared/_CookieConsentPartial.cshtml new file mode 100644 index 0000000..7df65c4 --- /dev/null +++ b/3-Docker/app/Pages/Shared/_CookieConsentPartial.cshtml @@ -0,0 +1,25 @@ +@using Microsoft.AspNetCore.Http.Features + +@{ + var consentFeature = Context.Features.Get(); + var showBanner = !consentFeature?.CanTrack ?? false; + var cookieString = consentFeature?.CreateConsentCookie(); +} + +@if (showBanner) +{ + + +} diff --git a/3-Docker/app/Pages/Shared/_Layout.cshtml b/3-Docker/app/Pages/Shared/_Layout.cshtml new file mode 100644 index 0000000..8655f7e --- /dev/null +++ b/3-Docker/app/Pages/Shared/_Layout.cshtml @@ -0,0 +1,80 @@ + + + + + + @ViewData["Title"] + + + + + + + + + + +
+ +
+
+ +
+ @RenderBody() +
+
+ +
+
+ © ASP.NET Core +
+
+ + + + + + + + + + + + @RenderSection("Scripts", required: false) + + diff --git a/3-Docker/app/Pages/Shared/_ValidationScriptsPartial.cshtml b/3-Docker/app/Pages/Shared/_ValidationScriptsPartial.cshtml new file mode 100644 index 0000000..c442042 --- /dev/null +++ b/3-Docker/app/Pages/Shared/_ValidationScriptsPartial.cshtml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/3-Docker/app/Pages/_ViewImports.cshtml b/3-Docker/app/Pages/_ViewImports.cshtml new file mode 100644 index 0000000..8c6c722 --- /dev/null +++ b/3-Docker/app/Pages/_ViewImports.cshtml @@ -0,0 +1,3 @@ +@using aspnet_core_dotnet_core +@namespace aspnet_core_dotnet_core.Pages +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/3-Docker/app/Pages/_ViewStart.cshtml b/3-Docker/app/Pages/_ViewStart.cshtml new file mode 100644 index 0000000..a5f1004 --- /dev/null +++ b/3-Docker/app/Pages/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_Layout"; +} diff --git a/3-Docker/app/Program.cs b/3-Docker/app/Program.cs new file mode 100644 index 0000000..b18c6ee --- /dev/null +++ b/3-Docker/app/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace aspnet_core_dotnet_core +{ + public class Program + { + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup(); + } +} diff --git a/3-Docker/app/Startup.cs b/3-Docker/app/Startup.cs new file mode 100644 index 0000000..341210b --- /dev/null +++ b/3-Docker/app/Startup.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace aspnet_core_dotnet_core +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.Configure(options => + { + // This lambda determines whether user consent for non-essential cookies is needed for a given request. + options.CheckConsentNeeded = context => true; + options.MinimumSameSitePolicy = SameSiteMode.None; + }); + + // Enable Application Insights for telemetries. Update the instrumentation key in 'appsettings.json' to transfer the events. + services.AddApplicationInsightsTelemetry(); + services.AddApplicationInsightsKubernetesEnricher(); + + services.AddRazorPages(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Error"); + } + + app.UseStaticFiles(); + app.UseCookiePolicy(); + app.UseRouting(); + app.UseAuthorization(); + + app.UseEndpoints(endpoints => + { + endpoints.MapRazorPages(); + }); + } + } +} diff --git a/3-Docker/app/app.py b/3-Docker/app/app.py deleted file mode 100644 index 9fc1481..0000000 --- a/3-Docker/app/app.py +++ /dev/null @@ -1,12 +0,0 @@ -from flask import Flask, render_template -import os - -app = Flask(__name__) - -@app.route('/') -def hello(): - return render_template('index.html') - -if __name__ == "__main__": - port = int(os.environ.get("PORT", 5000)) - app.run(host='0.0.0.0', port=port) \ No newline at end of file diff --git a/3-Docker/app/appsettings.Development.json b/3-Docker/app/appsettings.Development.json new file mode 100644 index 0000000..e203e94 --- /dev/null +++ b/3-Docker/app/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/3-Docker/app/appsettings.json b/3-Docker/app/appsettings.json new file mode 100644 index 0000000..7652f91 --- /dev/null +++ b/3-Docker/app/appsettings.json @@ -0,0 +1,11 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Warning" + } + }, + "AllowedHosts": "*", + "ApplicationInsights": { + "InstrumentationKey": "--- Your Application Insights Instrumentation Key ---" + } +} \ No newline at end of file diff --git a/3-Docker/app/aspnet-core-dotnet-core.csproj b/3-Docker/app/aspnet-core-dotnet-core.csproj new file mode 100644 index 0000000..3056aab --- /dev/null +++ b/3-Docker/app/aspnet-core-dotnet-core.csproj @@ -0,0 +1,19 @@ + + + + netcoreapp3.1 + InProcess + aspnet_core_dotnet_core + Linux + + + + + + + + + + + + diff --git a/3-Docker/app/bundleconfig.json b/3-Docker/app/bundleconfig.json new file mode 100644 index 0000000..f6def8a --- /dev/null +++ b/3-Docker/app/bundleconfig.json @@ -0,0 +1,22 @@ +[ + { + "outputFileName": "wwwroot/css/site.min.css", + // An array of relative input file paths. Globbing patterns supported + "inputFiles": [ + "wwwroot/css/site.css" + ] + }, + { + "outputFileName": "wwwroot/js/site.min.js", + "inputFiles": [ + "wwwroot/js/site.js" + ], + // Optionally specify minification options + "minify": { + "enabled": true, + "renameLocals": true + }, + // Optionally generate .map file + "sourceMap": false + } +] \ No newline at end of file diff --git a/3-Docker/app/charts/sampleapp/.helmignore b/3-Docker/app/charts/sampleapp/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/3-Docker/app/charts/sampleapp/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/3-Docker/app/charts/sampleapp/Chart.yaml b/3-Docker/app/charts/sampleapp/Chart.yaml new file mode 100644 index 0000000..6231c2e --- /dev/null +++ b/3-Docker/app/charts/sampleapp/Chart.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +description: A Helm chart for Kubernetes +name: sampleapp +version: v0.2.0 diff --git a/3-Docker/app/charts/sampleapp/templates/NOTES.txt b/3-Docker/app/charts/sampleapp/templates/NOTES.txt new file mode 100644 index 0000000..a07af82 --- /dev/null +++ b/3-Docker/app/charts/sampleapp/templates/NOTES.txt @@ -0,0 +1,9 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $.Values.ingress.hostname }}{{ $.Values.ingress.path }} +{{- else }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "sampleapp.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "sampleapp.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- end }} \ No newline at end of file diff --git a/3-Docker/app/charts/sampleapp/templates/_helpers.tpl b/3-Docker/app/charts/sampleapp/templates/_helpers.tpl new file mode 100644 index 0000000..fa06b8b --- /dev/null +++ b/3-Docker/app/charts/sampleapp/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "sampleapp.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "sampleapp.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "sampleapp.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/3-Docker/app/charts/sampleapp/templates/deployment.yaml b/3-Docker/app/charts/sampleapp/templates/deployment.yaml new file mode 100644 index 0000000..54fbcbc --- /dev/null +++ b/3-Docker/app/charts/sampleapp/templates/deployment.yaml @@ -0,0 +1,72 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "sampleapp.fullname" . }} + labels: + app: {{ template "sampleapp.name" . }} + chart: {{ template "sampleapp.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "sampleapp.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "sampleapp.name" . }} + release: {{ .Release.Name }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: {{ .Values.service.port }} + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 30 + readinessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 30 + env: + - name: APPINSIGHTS_INSTRUMENTATIONKEY + value: {{ .Values.applicationInsights.InstrumentationKey }} + {{- $root := . }} + {{- range $ref, $values := .Values.secrets }} + {{- range $key, $value := $values }} + - name: {{ $ref | upper }}_{{ $key | upper }} + valueFrom: + secretKeyRef: + name: {{ template "sampleapp.fullname" $root }}-{{ $ref }} + key: {{ $key }} + {{- end }} + {{- end }} + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- if .Values.imagePullSecrets }} + imagePullSecrets: + {{- range .Values.imagePullSecrets }} + - name: {{ . }} + {{- end}} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/3-Docker/app/charts/sampleapp/templates/ingress.yaml b/3-Docker/app/charts/sampleapp/templates/ingress.yaml new file mode 100644 index 0000000..b5b50cb --- /dev/null +++ b/3-Docker/app/charts/sampleapp/templates/ingress.yaml @@ -0,0 +1,36 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "sampleapp.fullname" . -}} +{{- $serviceName := include "sampleapp.name" . -}} +{{- $servicePort := .Values.service.port -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ $serviceName }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + - host: {{ .Values.ingress.hostname | quote }} + http: + paths: + - path: / + backend: + serviceName: {{ $serviceName }} + servicePort: {{ $servicePort }} +{{- end }} diff --git a/3-Docker/app/charts/sampleapp/templates/secrets.yaml b/3-Docker/app/charts/sampleapp/templates/secrets.yaml new file mode 100644 index 0000000..9f12935 --- /dev/null +++ b/3-Docker/app/charts/sampleapp/templates/secrets.yaml @@ -0,0 +1,12 @@ +{{- $root := . }} +{{- range $name, $values := .Values.secrets }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "sampleapp.fullname" $root }}-{{ $name }} +data: + {{- range $key, $value := $values }} + {{ $key }}: {{ $value | b64enc }} + {{- end }} +--- +{{- end }} diff --git a/3-Docker/app/charts/sampleapp/templates/service.yaml b/3-Docker/app/charts/sampleapp/templates/service.yaml new file mode 100644 index 0000000..5127fc9 --- /dev/null +++ b/3-Docker/app/charts/sampleapp/templates/service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "sampleapp.fullname" . }} + labels: + app: {{ template "sampleapp.name" . }} + chart: {{ template "sampleapp.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + {{- if .Values.ingress.enabled }} + type: ClusterIP + {{- else }} + type: LoadBalancer + {{- end }} + ports: + - port: {{ .Values.service.port }} + targetPort: {{ .Values.service.port }} + protocol: TCP + name: http + selector: + app: {{ template "sampleapp.name" . }} + release: {{ .Release.Name }} diff --git a/3-Docker/app/charts/sampleapp/values.yaml b/3-Docker/app/charts/sampleapp/values.yaml new file mode 100644 index 0000000..775d0d9 --- /dev/null +++ b/3-Docker/app/charts/sampleapp/values.yaml @@ -0,0 +1,57 @@ +# Default values for sampleapp. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. +fullnameOverride: sampleapp +replicaCount: 2 +image: + repository: VALUE_TO_BE_OVERRIDDEN + tag: latest + +imagePullSecrets: [] + # Optionally specify an array of imagePullSecrets. + # Secrets must be manually created in the namespace. + # ref: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod + # + # This uses credentials from secret "myRegistryKeySecretName". + # - name: myRegistryKeySecretName +service: + port: 80 + +ingress: + enabled: false + annotations: + kubernetes.io/ingress.class: addon-http-application-routing + path: / + hostname: VALUE_TO_BE_OVERRIDDEN + +secrets: {} + # Optionally specify a set of secret objects whose values + # will be injected as environment variables by default. + # You should add this section to a file like secrets.yaml + # that is explicitly NOT committed to source code control + # and then include it as part of your helm install step. + # ref: https://kubernetes.io/docs/concepts/configuration/secret/ + # + # This creates a secret "mysecret" and injects "mypassword" + # as the environment variable MYSECRET_MYPASSWORD=123. + # mysecret: + # mypassword: 123 +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi +nodeSelector: {} + +tolerations: [] + +affinity: {} + +applicationInsights: + InstrumentationKey: VALUE_TO_BE_OVERRIDDEN \ No newline at end of file diff --git a/3-Docker/app/requirements.txt b/3-Docker/app/requirements.txt deleted file mode 100644 index dca3a24..0000000 --- a/3-Docker/app/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -Flask==2.0.1 -Werkzeug==2.3.8 \ No newline at end of file diff --git a/3-Docker/app/templates/index.html b/3-Docker/app/templates/index.html deleted file mode 100644 index 23336f3..0000000 --- a/3-Docker/app/templates/index.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - DevOps the Hard Way - - - - -
-

Hello, World from thomasthornton.cloud

-

Explore DevOps the Hard Way Azure: Hands-on learning for real-world skills.

- Start Learning -
- - \ No newline at end of file diff --git a/3-Docker/app/wwwroot/css/site.css b/3-Docker/app/wwwroot/css/site.css new file mode 100644 index 0000000..237dd49 --- /dev/null +++ b/3-Docker/app/wwwroot/css/site.css @@ -0,0 +1,128 @@ +/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification +for details on configuring this project to bundle and minify static web assets. */ + +a.navbar-brand { + white-space: normal; + text-align: center; + word-break: break-all; +} + +/* Sticky footer styles +-------------------------------------------------- */ +html { + font-size: 14px; +} + +@media (min-width: 768px) { + html { + font-size: 16px; + } +} + +.border-top { + border-top: 1px solid #e5e5e5; +} + +.border-bottom { + border-bottom: 1px solid #e5e5e5; +} + +.box-shadow { + box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); +} + +button.accept-policy { + font-size: 1rem; + line-height: inherit; +} + +/* Sticky footer styles +-------------------------------------------------- */ +html { + position: relative; + min-height: 100%; +} + +body { + /* Margin bottom by footer height */ + margin-bottom: 60px; +} + +.footer { + position: absolute; + bottom: 0; + width: 100%; + white-space: nowrap; + /* Set the fixed height of the footer here */ + height: 60px; + line-height: 60px; /* Vertically center the text there */ +} + +.main-container { + height: 400px; + width: 100%; + background-color: #1d539d; + color: white; + padding-top: 30px; + box-sizing: border-box; + overflow-y: hidden; + overflow-x: hidden; + padding: 80px; + margin-bottom: 30px; +} + +.cloud-image { + width: 350px; + height: 150px; + padding-bottom: 20px; + margin: auto; +} + + .cloud-image img { + width: 100%; + height: 100%; + } + +.success-text { + padding-bottom: 20px; + font-size: 45px; + line-height: 54px; + text-align: center; +} + +.description { + font-size: 18px; + line-height: 24px; + text-align: center; +} + +.content { + box-sizing: border-box; + max-width: 450px; + position: relative; + margin: auto; +} + +.tweet-container { + height: 30px; + width: 30px; + min-width: 30px; + min-height: 50px; + margin: 0 20px; + position: absolute; + left: -55px; + top: 80px; +} + + .tweet-container img { + width: 100%; + height: 100%; + } + +.content-body { + min-width: 400px; +} + +.col-md-4 { + color: black; +} diff --git a/3-Docker/app/wwwroot/css/site.min.css b/3-Docker/app/wwwroot/css/site.min.css new file mode 100644 index 0000000..49e1459 --- /dev/null +++ b/3-Docker/app/wwwroot/css/site.min.css @@ -0,0 +1 @@ +a.navbar-brand{white-space:normal;text-align:center;word-break:break-all}html{font-size:14px}@media(min-width:768px){html{font-size:16px}}.border-top{border-top:1px solid #e5e5e5}.border-bottom{border-bottom:1px solid #e5e5e5}.box-shadow{box-shadow:0 .25rem .75rem rgba(0,0,0,.05)}button.accept-policy{font-size:1rem;line-height:inherit}html{position:relative;min-height:100%}body{margin-bottom:60px}.footer{position:absolute;bottom:0;width:100%;white-space:nowrap;height:60px;line-height:60px}.main-container{height:400px;width:100%;background-color:#1d539d;color:#fff;padding-top:30px;box-sizing:border-box;overflow-y:hidden;overflow-x:hidden;padding:80px;margin-bottom:30px}.cloud-image{width:350px;height:150px;padding-bottom:20px;margin:auto}.cloud-image img{width:100%;height:100%}.success-text{padding-bottom:20px;font-size:45px;line-height:54px;text-align:center}.description{font-size:18px;line-height:24px;text-align:center}.content{box-sizing:border-box;max-width:450px;position:relative;margin:auto}.tweet-container{height:30px;width:30px;min-width:30px;min-height:50px;margin:0 20px;position:absolute;left:-55px;top:80px}.tweet-container img{width:100%;height:100%}.content-body{min-width:400px}.col-md-4{color:#000} \ No newline at end of file diff --git a/3-Docker/app/wwwroot/favicon.ico b/3-Docker/app/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a3a799985c43bc7309d701b2cad129023377dc71 GIT binary patch literal 32038 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 \ No newline at end of file diff --git a/3-Docker/app/wwwroot/images/tweetThis.svg b/3-Docker/app/wwwroot/images/tweetThis.svg new file mode 100644 index 0000000..0645220 --- /dev/null +++ b/3-Docker/app/wwwroot/images/tweetThis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/3-Docker/app/wwwroot/js/site.js b/3-Docker/app/wwwroot/js/site.js new file mode 100644 index 0000000..3c76e6d --- /dev/null +++ b/3-Docker/app/wwwroot/js/site.js @@ -0,0 +1,4 @@ +// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification +// for details on configuring this project to bundle and minify static web assets. + +// Write your Javascript code. diff --git a/3-Docker/app/wwwroot/js/site.min.js b/3-Docker/app/wwwroot/js/site.min.js new file mode 100644 index 0000000..e69de29 diff --git a/3-Docker/app/wwwroot/lib/bootstrap/LICENSE b/3-Docker/app/wwwroot/lib/bootstrap/LICENSE new file mode 100644 index 0000000..86f4b8c --- /dev/null +++ b/3-Docker/app/wwwroot/lib/bootstrap/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2011-2018 Twitter, Inc. +Copyright (c) 2011-2018 The Bootstrap Authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css new file mode 100644 index 0000000..68b84f8 --- /dev/null +++ b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css @@ -0,0 +1,3719 @@ +/*! + * Bootstrap Grid v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +html { + box-sizing: border-box; + -ms-overflow-style: scrollbar; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + padding-right: 15px; + padding-left: 15px; +} + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; +} + +.col-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.order-first { + -ms-flex-order: -1; + order: -1; +} + +.order-last { + -ms-flex-order: 13; + order: 13; +} + +.order-0 { + -ms-flex-order: 0; + order: 0; +} + +.order-1 { + -ms-flex-order: 1; + order: 1; +} + +.order-2 { + -ms-flex-order: 2; + order: 2; +} + +.order-3 { + -ms-flex-order: 3; + order: 3; +} + +.order-4 { + -ms-flex-order: 4; + order: 4; +} + +.order-5 { + -ms-flex-order: 5; + order: 5; +} + +.order-6 { + -ms-flex-order: 6; + order: 6; +} + +.order-7 { + -ms-flex-order: 7; + order: 7; +} + +.order-8 { + -ms-flex-order: 8; + order: 8; +} + +.order-9 { + -ms-flex-order: 9; + order: 9; +} + +.order-10 { + -ms-flex-order: 10; + order: 10; +} + +.order-11 { + -ms-flex-order: 11; + order: 11; +} + +.order-12 { + -ms-flex-order: 12; + order: 12; +} + +.offset-1 { + margin-left: 8.333333%; +} + +.offset-2 { + margin-left: 16.666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.333333%; +} + +.offset-5 { + margin-left: 41.666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.333333%; +} + +.offset-8 { + margin-left: 66.666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.333333%; +} + +.offset-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-sm-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + -ms-flex-order: -1; + order: -1; + } + .order-sm-last { + -ms-flex-order: 13; + order: 13; + } + .order-sm-0 { + -ms-flex-order: 0; + order: 0; + } + .order-sm-1 { + -ms-flex-order: 1; + order: 1; + } + .order-sm-2 { + -ms-flex-order: 2; + order: 2; + } + .order-sm-3 { + -ms-flex-order: 3; + order: 3; + } + .order-sm-4 { + -ms-flex-order: 4; + order: 4; + } + .order-sm-5 { + -ms-flex-order: 5; + order: 5; + } + .order-sm-6 { + -ms-flex-order: 6; + order: 6; + } + .order-sm-7 { + -ms-flex-order: 7; + order: 7; + } + .order-sm-8 { + -ms-flex-order: 8; + order: 8; + } + .order-sm-9 { + -ms-flex-order: 9; + order: 9; + } + .order-sm-10 { + -ms-flex-order: 10; + order: 10; + } + .order-sm-11 { + -ms-flex-order: 11; + order: 11; + } + .order-sm-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-md-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + -ms-flex-order: -1; + order: -1; + } + .order-md-last { + -ms-flex-order: 13; + order: 13; + } + .order-md-0 { + -ms-flex-order: 0; + order: 0; + } + .order-md-1 { + -ms-flex-order: 1; + order: 1; + } + .order-md-2 { + -ms-flex-order: 2; + order: 2; + } + .order-md-3 { + -ms-flex-order: 3; + order: 3; + } + .order-md-4 { + -ms-flex-order: 4; + order: 4; + } + .order-md-5 { + -ms-flex-order: 5; + order: 5; + } + .order-md-6 { + -ms-flex-order: 6; + order: 6; + } + .order-md-7 { + -ms-flex-order: 7; + order: 7; + } + .order-md-8 { + -ms-flex-order: 8; + order: 8; + } + .order-md-9 { + -ms-flex-order: 9; + order: 9; + } + .order-md-10 { + -ms-flex-order: 10; + order: 10; + } + .order-md-11 { + -ms-flex-order: 11; + order: 11; + } + .order-md-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-lg-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + -ms-flex-order: -1; + order: -1; + } + .order-lg-last { + -ms-flex-order: 13; + order: 13; + } + .order-lg-0 { + -ms-flex-order: 0; + order: 0; + } + .order-lg-1 { + -ms-flex-order: 1; + order: 1; + } + .order-lg-2 { + -ms-flex-order: 2; + order: 2; + } + .order-lg-3 { + -ms-flex-order: 3; + order: 3; + } + .order-lg-4 { + -ms-flex-order: 4; + order: 4; + } + .order-lg-5 { + -ms-flex-order: 5; + order: 5; + } + .order-lg-6 { + -ms-flex-order: 6; + order: 6; + } + .order-lg-7 { + -ms-flex-order: 7; + order: 7; + } + .order-lg-8 { + -ms-flex-order: 8; + order: 8; + } + .order-lg-9 { + -ms-flex-order: 9; + order: 9; + } + .order-lg-10 { + -ms-flex-order: 10; + order: 10; + } + .order-lg-11 { + -ms-flex-order: 11; + order: 11; + } + .order-lg-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-xl-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + -ms-flex-order: -1; + order: -1; + } + .order-xl-last { + -ms-flex-order: 13; + order: 13; + } + .order-xl-0 { + -ms-flex-order: 0; + order: 0; + } + .order-xl-1 { + -ms-flex-order: 1; + order: 1; + } + .order-xl-2 { + -ms-flex-order: 2; + order: 2; + } + .order-xl-3 { + -ms-flex-order: 3; + order: 3; + } + .order-xl-4 { + -ms-flex-order: 4; + order: 4; + } + .order-xl-5 { + -ms-flex-order: 5; + order: 5; + } + .order-xl-6 { + -ms-flex-order: 6; + order: 6; + } + .order-xl-7 { + -ms-flex-order: 7; + order: 7; + } + .order-xl-8 { + -ms-flex-order: 8; + order: 8; + } + .order-xl-9 { + -ms-flex-order: 9; + order: 9; + } + .order-xl-10 { + -ms-flex-order: 10; + order: 10; + } + .order-xl-11 { + -ms-flex-order: 11; + order: 11; + } + .order-xl-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: -ms-flexbox !important; + display: flex !important; +} + +.d-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media print { + .d-print-none { + display: none !important; + } + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-print-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +.flex-row { + -ms-flex-direction: row !important; + flex-direction: row !important; +} + +.flex-column { + -ms-flex-direction: column !important; + flex-direction: column !important; +} + +.flex-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; +} + +.flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; +} + +.flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; +} + +.flex-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; +} + +.flex-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; +} + +.flex-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; +} + +.flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; +} + +.justify-content-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; +} + +.justify-content-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; +} + +.justify-content-center { + -ms-flex-pack: center !important; + justify-content: center !important; +} + +.justify-content-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; +} + +.justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; +} + +.align-items-start { + -ms-flex-align: start !important; + align-items: flex-start !important; +} + +.align-items-end { + -ms-flex-align: end !important; + align-items: flex-end !important; +} + +.align-items-center { + -ms-flex-align: center !important; + align-items: center !important; +} + +.align-items-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; +} + +.align-items-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; +} + +.align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; +} + +.align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; +} + +.align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; +} + +.align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; +} + +.align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; +} + +.align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; +} + +.align-self-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; +} + +.align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; +} + +.align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; +} + +.align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; +} + +.align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; +} + +.align-self-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-sm-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-sm-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-md-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-md-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-md-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-lg-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-lg-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-xl-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-xl-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +.m-0 { + margin: 0 !important; +} + +.mt-0, +.my-0 { + margin-top: 0 !important; +} + +.mr-0, +.mx-0 { + margin-right: 0 !important; +} + +.mb-0, +.my-0 { + margin-bottom: 0 !important; +} + +.ml-0, +.mx-0 { + margin-left: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.mt-1, +.my-1 { + margin-top: 0.25rem !important; +} + +.mr-1, +.mx-1 { + margin-right: 0.25rem !important; +} + +.mb-1, +.my-1 { + margin-bottom: 0.25rem !important; +} + +.ml-1, +.mx-1 { + margin-left: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.mt-2, +.my-2 { + margin-top: 0.5rem !important; +} + +.mr-2, +.mx-2 { + margin-right: 0.5rem !important; +} + +.mb-2, +.my-2 { + margin-bottom: 0.5rem !important; +} + +.ml-2, +.mx-2 { + margin-left: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.mt-3, +.my-3 { + margin-top: 1rem !important; +} + +.mr-3, +.mx-3 { + margin-right: 1rem !important; +} + +.mb-3, +.my-3 { + margin-bottom: 1rem !important; +} + +.ml-3, +.mx-3 { + margin-left: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.mt-4, +.my-4 { + margin-top: 1.5rem !important; +} + +.mr-4, +.mx-4 { + margin-right: 1.5rem !important; +} + +.mb-4, +.my-4 { + margin-bottom: 1.5rem !important; +} + +.ml-4, +.mx-4 { + margin-left: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.mt-5, +.my-5 { + margin-top: 3rem !important; +} + +.mr-5, +.mx-5 { + margin-right: 3rem !important; +} + +.mb-5, +.my-5 { + margin-bottom: 3rem !important; +} + +.ml-5, +.mx-5 { + margin-left: 3rem !important; +} + +.p-0 { + padding: 0 !important; +} + +.pt-0, +.py-0 { + padding-top: 0 !important; +} + +.pr-0, +.px-0 { + padding-right: 0 !important; +} + +.pb-0, +.py-0 { + padding-bottom: 0 !important; +} + +.pl-0, +.px-0 { + padding-left: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.pt-1, +.py-1 { + padding-top: 0.25rem !important; +} + +.pr-1, +.px-1 { + padding-right: 0.25rem !important; +} + +.pb-1, +.py-1 { + padding-bottom: 0.25rem !important; +} + +.pl-1, +.px-1 { + padding-left: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.pt-2, +.py-2 { + padding-top: 0.5rem !important; +} + +.pr-2, +.px-2 { + padding-right: 0.5rem !important; +} + +.pb-2, +.py-2 { + padding-bottom: 0.5rem !important; +} + +.pl-2, +.px-2 { + padding-left: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.pt-3, +.py-3 { + padding-top: 1rem !important; +} + +.pr-3, +.px-3 { + padding-right: 1rem !important; +} + +.pb-3, +.py-3 { + padding-bottom: 1rem !important; +} + +.pl-3, +.px-3 { + padding-left: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.pt-4, +.py-4 { + padding-top: 1.5rem !important; +} + +.pr-4, +.px-4 { + padding-right: 1.5rem !important; +} + +.pb-4, +.py-4 { + padding-bottom: 1.5rem !important; +} + +.pl-4, +.px-4 { + padding-left: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.pt-5, +.py-5 { + padding-top: 3rem !important; +} + +.pr-5, +.px-5 { + padding-right: 3rem !important; +} + +.pb-5, +.py-5 { + padding-bottom: 3rem !important; +} + +.pl-5, +.px-5 { + padding-left: 3rem !important; +} + +.m-n1 { + margin: -0.25rem !important; +} + +.mt-n1, +.my-n1 { + margin-top: -0.25rem !important; +} + +.mr-n1, +.mx-n1 { + margin-right: -0.25rem !important; +} + +.mb-n1, +.my-n1 { + margin-bottom: -0.25rem !important; +} + +.ml-n1, +.mx-n1 { + margin-left: -0.25rem !important; +} + +.m-n2 { + margin: -0.5rem !important; +} + +.mt-n2, +.my-n2 { + margin-top: -0.5rem !important; +} + +.mr-n2, +.mx-n2 { + margin-right: -0.5rem !important; +} + +.mb-n2, +.my-n2 { + margin-bottom: -0.5rem !important; +} + +.ml-n2, +.mx-n2 { + margin-left: -0.5rem !important; +} + +.m-n3 { + margin: -1rem !important; +} + +.mt-n3, +.my-n3 { + margin-top: -1rem !important; +} + +.mr-n3, +.mx-n3 { + margin-right: -1rem !important; +} + +.mb-n3, +.my-n3 { + margin-bottom: -1rem !important; +} + +.ml-n3, +.mx-n3 { + margin-left: -1rem !important; +} + +.m-n4 { + margin: -1.5rem !important; +} + +.mt-n4, +.my-n4 { + margin-top: -1.5rem !important; +} + +.mr-n4, +.mx-n4 { + margin-right: -1.5rem !important; +} + +.mb-n4, +.my-n4 { + margin-bottom: -1.5rem !important; +} + +.ml-n4, +.mx-n4 { + margin-left: -1.5rem !important; +} + +.m-n5 { + margin: -3rem !important; +} + +.mt-n5, +.my-n5 { + margin-top: -3rem !important; +} + +.mr-n5, +.mx-n5 { + margin-right: -3rem !important; +} + +.mb-n5, +.my-n5 { + margin-bottom: -3rem !important; +} + +.ml-n5, +.mx-n5 { + margin-left: -3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mt-auto, +.my-auto { + margin-top: auto !important; +} + +.mr-auto, +.mx-auto { + margin-right: auto !important; +} + +.mb-auto, +.my-auto { + margin-bottom: auto !important; +} + +.ml-auto, +.mx-auto { + margin-left: auto !important; +} + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; + } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .mt-sm-3, + .my-sm-3 { + margin-top: 1rem !important; + } + .mr-sm-3, + .mx-sm-3 { + margin-right: 1rem !important; + } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 1rem !important; + } + .ml-sm-3, + .mx-sm-3 { + margin-left: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .mt-sm-4, + .my-sm-4 { + margin-top: 1.5rem !important; + } + .mr-sm-4, + .mx-sm-4 { + margin-right: 1.5rem !important; + } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 1.5rem !important; + } + .ml-sm-4, + .mx-sm-4 { + margin-left: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .mt-sm-5, + .my-sm-5 { + margin-top: 3rem !important; + } + .mr-sm-5, + .mx-sm-5 { + margin-right: 3rem !important; + } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 3rem !important; + } + .ml-sm-5, + .mx-sm-5 { + margin-left: 3rem !important; + } + .p-sm-0 { + padding: 0 !important; + } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .pt-sm-3, + .py-sm-3 { + padding-top: 1rem !important; + } + .pr-sm-3, + .px-sm-3 { + padding-right: 1rem !important; + } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 1rem !important; + } + .pl-sm-3, + .px-sm-3 { + padding-left: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .pt-sm-4, + .py-sm-4 { + padding-top: 1.5rem !important; + } + .pr-sm-4, + .px-sm-4 { + padding-right: 1.5rem !important; + } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 1.5rem !important; + } + .pl-sm-4, + .px-sm-4 { + padding-left: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .pt-sm-5, + .py-sm-5 { + padding-top: 3rem !important; + } + .pr-sm-5, + .px-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 3rem !important; + } + .pl-sm-5, + .px-sm-5 { + padding-left: 3rem !important; + } + .m-sm-n1 { + margin: -0.25rem !important; + } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; + } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; + } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; + } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; + } + .m-sm-n2 { + margin: -0.5rem !important; + } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; + } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; + } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; + } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.5rem !important; + } + .m-sm-n3 { + margin: -1rem !important; + } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -1rem !important; + } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -1rem !important; + } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -1rem !important; + } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -1rem !important; + } + .m-sm-n4 { + margin: -1.5rem !important; + } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -1.5rem !important; + } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -1.5rem !important; + } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -1.5rem !important; + } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -1.5rem !important; + } + .m-sm-n5 { + margin: -3rem !important; + } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -3rem !important; + } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -3rem !important; + } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -3rem !important; + } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; + } +} + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; + } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; + } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; + } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2, + .mx-md-2 { + margin-left: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .mt-md-3, + .my-md-3 { + margin-top: 1rem !important; + } + .mr-md-3, + .mx-md-3 { + margin-right: 1rem !important; + } + .mb-md-3, + .my-md-3 { + margin-bottom: 1rem !important; + } + .ml-md-3, + .mx-md-3 { + margin-left: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .mt-md-4, + .my-md-4 { + margin-top: 1.5rem !important; + } + .mr-md-4, + .mx-md-4 { + margin-right: 1.5rem !important; + } + .mb-md-4, + .my-md-4 { + margin-bottom: 1.5rem !important; + } + .ml-md-4, + .mx-md-4 { + margin-left: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .mt-md-5, + .my-md-5 { + margin-top: 3rem !important; + } + .mr-md-5, + .mx-md-5 { + margin-right: 3rem !important; + } + .mb-md-5, + .my-md-5 { + margin-bottom: 3rem !important; + } + .ml-md-5, + .mx-md-5 { + margin-left: 3rem !important; + } + .p-md-0 { + padding: 0 !important; + } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; + } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; + } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2, + .px-md-2 { + padding-left: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .pt-md-3, + .py-md-3 { + padding-top: 1rem !important; + } + .pr-md-3, + .px-md-3 { + padding-right: 1rem !important; + } + .pb-md-3, + .py-md-3 { + padding-bottom: 1rem !important; + } + .pl-md-3, + .px-md-3 { + padding-left: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .pt-md-4, + .py-md-4 { + padding-top: 1.5rem !important; + } + .pr-md-4, + .px-md-4 { + padding-right: 1.5rem !important; + } + .pb-md-4, + .py-md-4 { + padding-bottom: 1.5rem !important; + } + .pl-md-4, + .px-md-4 { + padding-left: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .pt-md-5, + .py-md-5 { + padding-top: 3rem !important; + } + .pr-md-5, + .px-md-5 { + padding-right: 3rem !important; + } + .pb-md-5, + .py-md-5 { + padding-bottom: 3rem !important; + } + .pl-md-5, + .px-md-5 { + padding-left: 3rem !important; + } + .m-md-n1 { + margin: -0.25rem !important; + } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; + } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; + } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; + } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; + } + .m-md-n2 { + margin: -0.5rem !important; + } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; + } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; + } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; + } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.5rem !important; + } + .m-md-n3 { + margin: -1rem !important; + } + .mt-md-n3, + .my-md-n3 { + margin-top: -1rem !important; + } + .mr-md-n3, + .mx-md-n3 { + margin-right: -1rem !important; + } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -1rem !important; + } + .ml-md-n3, + .mx-md-n3 { + margin-left: -1rem !important; + } + .m-md-n4 { + margin: -1.5rem !important; + } + .mt-md-n4, + .my-md-n4 { + margin-top: -1.5rem !important; + } + .mr-md-n4, + .mx-md-n4 { + margin-right: -1.5rem !important; + } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -1.5rem !important; + } + .ml-md-n4, + .mx-md-n4 { + margin-left: -1.5rem !important; + } + .m-md-n5 { + margin: -3rem !important; + } + .mt-md-n5, + .my-md-n5 { + margin-top: -3rem !important; + } + .mr-md-n5, + .mx-md-n5 { + margin-right: -3rem !important; + } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -3rem !important; + } + .ml-md-n5, + .mx-md-n5 { + margin-left: -3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; + } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; + } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; + } +} + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; + } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .mt-lg-3, + .my-lg-3 { + margin-top: 1rem !important; + } + .mr-lg-3, + .mx-lg-3 { + margin-right: 1rem !important; + } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 1rem !important; + } + .ml-lg-3, + .mx-lg-3 { + margin-left: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .mt-lg-4, + .my-lg-4 { + margin-top: 1.5rem !important; + } + .mr-lg-4, + .mx-lg-4 { + margin-right: 1.5rem !important; + } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 1.5rem !important; + } + .ml-lg-4, + .mx-lg-4 { + margin-left: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .mt-lg-5, + .my-lg-5 { + margin-top: 3rem !important; + } + .mr-lg-5, + .mx-lg-5 { + margin-right: 3rem !important; + } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 3rem !important; + } + .ml-lg-5, + .mx-lg-5 { + margin-left: 3rem !important; + } + .p-lg-0 { + padding: 0 !important; + } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .pt-lg-3, + .py-lg-3 { + padding-top: 1rem !important; + } + .pr-lg-3, + .px-lg-3 { + padding-right: 1rem !important; + } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 1rem !important; + } + .pl-lg-3, + .px-lg-3 { + padding-left: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .pt-lg-4, + .py-lg-4 { + padding-top: 1.5rem !important; + } + .pr-lg-4, + .px-lg-4 { + padding-right: 1.5rem !important; + } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 1.5rem !important; + } + .pl-lg-4, + .px-lg-4 { + padding-left: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .pt-lg-5, + .py-lg-5 { + padding-top: 3rem !important; + } + .pr-lg-5, + .px-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 3rem !important; + } + .pl-lg-5, + .px-lg-5 { + padding-left: 3rem !important; + } + .m-lg-n1 { + margin: -0.25rem !important; + } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; + } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; + } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; + } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; + } + .m-lg-n2 { + margin: -0.5rem !important; + } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; + } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; + } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; + } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.5rem !important; + } + .m-lg-n3 { + margin: -1rem !important; + } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -1rem !important; + } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -1rem !important; + } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -1rem !important; + } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -1rem !important; + } + .m-lg-n4 { + margin: -1.5rem !important; + } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -1.5rem !important; + } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -1.5rem !important; + } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -1.5rem !important; + } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -1.5rem !important; + } + .m-lg-n5 { + margin: -3rem !important; + } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -3rem !important; + } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -3rem !important; + } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -3rem !important; + } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; + } +} + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; + } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .mt-xl-3, + .my-xl-3 { + margin-top: 1rem !important; + } + .mr-xl-3, + .mx-xl-3 { + margin-right: 1rem !important; + } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 1rem !important; + } + .ml-xl-3, + .mx-xl-3 { + margin-left: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .mt-xl-4, + .my-xl-4 { + margin-top: 1.5rem !important; + } + .mr-xl-4, + .mx-xl-4 { + margin-right: 1.5rem !important; + } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 1.5rem !important; + } + .ml-xl-4, + .mx-xl-4 { + margin-left: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .mt-xl-5, + .my-xl-5 { + margin-top: 3rem !important; + } + .mr-xl-5, + .mx-xl-5 { + margin-right: 3rem !important; + } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 3rem !important; + } + .ml-xl-5, + .mx-xl-5 { + margin-left: 3rem !important; + } + .p-xl-0 { + padding: 0 !important; + } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .pt-xl-3, + .py-xl-3 { + padding-top: 1rem !important; + } + .pr-xl-3, + .px-xl-3 { + padding-right: 1rem !important; + } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 1rem !important; + } + .pl-xl-3, + .px-xl-3 { + padding-left: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .pt-xl-4, + .py-xl-4 { + padding-top: 1.5rem !important; + } + .pr-xl-4, + .px-xl-4 { + padding-right: 1.5rem !important; + } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 1.5rem !important; + } + .pl-xl-4, + .px-xl-4 { + padding-left: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .pt-xl-5, + .py-xl-5 { + padding-top: 3rem !important; + } + .pr-xl-5, + .px-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 3rem !important; + } + .pl-xl-5, + .px-xl-5 { + padding-left: 3rem !important; + } + .m-xl-n1 { + margin: -0.25rem !important; + } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; + } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; + } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; + } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; + } + .m-xl-n2 { + margin: -0.5rem !important; + } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; + } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; + } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; + } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.5rem !important; + } + .m-xl-n3 { + margin: -1rem !important; + } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -1rem !important; + } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -1rem !important; + } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -1rem !important; + } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -1rem !important; + } + .m-xl-n4 { + margin: -1.5rem !important; + } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -1.5rem !important; + } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -1.5rem !important; + } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -1.5rem !important; + } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -1.5rem !important; + } + .m-xl-n5 { + margin: -3rem !important; + } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -3rem !important; + } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -3rem !important; + } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -3rem !important; + } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; + } +} +/*# sourceMappingURL=bootstrap-grid.css.map */ \ No newline at end of file diff --git a/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map new file mode 100644 index 0000000..db62f2f --- /dev/null +++ b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_spacing.scss"],"names":[],"mappings":"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vBQ;IHTR,gBAA8C;EF4vB9C;EKnvBQ;IHTR,uBAA8C;EF+vB9C;EKtvBQ;IHTR,uBAA8C;EFkwB9C;EKzvBQ;IHTR,gBAA8C;EFqwB9C;EK5vBQ;IHTR,uBAA8C;EFwwB9C;EK/vBQ;IHTR,uBAA8C;EF2wB9C;AACF;;AMlzBM;EAAwB,wBAA0B;ANszBxD;;AMtzBM;EAAwB,0BAA0B;AN0zBxD;;AM1zBM;EAAwB,gCAA0B;AN8zBxD;;AM9zBM;EAAwB,yBAA0B;ANk0BxD;;AMl0BM;EAAwB,yBAA0B;ANs0BxD;;AMt0BM;EAAwB,6BAA0B;AN00BxD;;AM10BM;EAAwB,8BAA0B;AN80BxD;;AM90BM;EAAwB,+BAA0B;EAA1B,wBAA0B;ANk1BxD;;AMl1BM;EAAwB,sCAA0B;EAA1B,+BAA0B;ANs1BxD;;AGryBI;EGjDE;IAAwB,wBAA0B;EN21BtD;EM31BI;IAAwB,0BAA0B;EN81BtD;EM91BI;IAAwB,gCAA0B;ENi2BtD;EMj2BI;IAAwB,yBAA0B;ENo2BtD;EMp2BI;IAAwB,yBAA0B;ENu2BtD;EMv2BI;IAAwB,6BAA0B;EN02BtD;EM12BI;IAAwB,8BAA0B;EN62BtD;EM72BI;IAAwB,+BAA0B;IAA1B,wBAA0B;ENg3BtD;EMh3BI;IAAwB,sCAA0B;IAA1B,+BAA0B;ENm3BtD;AACF;;AGn0BI;EGjDE;IAAwB,wBAA0B;ENy3BtD;EMz3BI;IAAwB,0BAA0B;EN43BtD;EM53BI;IAAwB,gCAA0B;EN+3BtD;EM/3BI;IAAwB,yBAA0B;ENk4BtD;EMl4BI;IAAwB,yBAA0B;ENq4BtD;EMr4BI;IAAwB,6BAA0B;ENw4BtD;EMx4BI;IAAwB,8BAA0B;EN24BtD;EM34BI;IAAwB,+BAA0B;IAA1B,wBAA0B;EN84BtD;EM94BI;IAAwB,sCAA0B;IAA1B,+BAA0B;ENi5BtD;AACF;;AGj2BI;EGjDE;IAAwB,wBAA0B;ENu5BtD;EMv5BI;IAAwB,0BAA0B;EN05BtD;EM15BI;IAAwB,gCAA0B;EN65BtD;EM75BI;IAAwB,yBAA0B;ENg6BtD;EMh6BI;IAAwB,yBAA0B;ENm6BtD;EMn6BI;IAAwB,6BAA0B;ENs6BtD;EMt6BI;IAAwB,8BAA0B;ENy6BtD;EMz6BI;IAAwB,+BAA0B;IAA1B,wBAA0B;EN46BtD;EM56BI;IAAwB,sCAA0B;IAA1B,+BAA0B;EN+6BtD;AACF;;AG/3BI;EGjDE;IAAwB,wBAA0B;ENq7BtD;EMr7BI;IAAwB,0BAA0B;ENw7BtD;EMx7BI;IAAwB,gCAA0B;EN27BtD;EM37BI;IAAwB,yBAA0B;EN87BtD;EM97BI;IAAwB,yBAA0B;ENi8BtD;EMj8BI;IAAwB,6BAA0B;ENo8BtD;EMp8BI;IAAwB,8BAA0B;ENu8BtD;EMv8BI;IAAwB,+BAA0B;IAA1B,wBAA0B;EN08BtD;EM18BI;IAAwB,sCAA0B;IAA1B,+BAA0B;EN68BtD;AACF;;AMp8BA;EAEI;IAAqB,wBAA0B;ENu8BjD;EMv8BE;IAAqB,0BAA0B;EN08BjD;EM18BE;IAAqB,gCAA0B;EN68BjD;EM78BE;IAAqB,yBAA0B;ENg9BjD;EMh9BE;IAAqB,yBAA0B;ENm9BjD;EMn9BE;IAAqB,6BAA0B;ENs9BjD;EMt9BE;IAAqB,8BAA0B;ENy9BjD;EMz9BE;IAAqB,+BAA0B;IAA1B,wBAA0B;EN49BjD;EM59BE;IAAqB,sCAA0B;IAA1B,+BAA0B;EN+9BjD;AACF;;AO7+BI;EAAgC,kCAA8B;EAA9B,8BAA8B;APi/BlE;;AOh/BI;EAAgC,qCAAiC;EAAjC,iCAAiC;APo/BrE;;AOn/BI;EAAgC,0CAAsC;EAAtC,sCAAsC;APu/B1E;;AOt/BI;EAAgC,6CAAyC;EAAzC,yCAAyC;AP0/B7E;;AOx/BI;EAA8B,8BAA0B;EAA1B,0BAA0B;AP4/B5D;;AO3/BI;EAA8B,gCAA4B;EAA5B,4BAA4B;AP+/B9D;;AO9/BI;EAA8B,sCAAkC;EAAlC,kCAAkC;APkgCpE;;AOjgCI;EAA8B,6BAAyB;EAAzB,yBAAyB;APqgC3D;;AOpgCI;EAA8B,+BAAuB;EAAvB,uBAAuB;APwgCzD;;AOvgCI;EAA8B,+BAAuB;EAAvB,uBAAuB;AP2gCzD;;AO1gCI;EAA8B,+BAAyB;EAAzB,yBAAyB;AP8gC3D;;AO7gCI;EAA8B,+BAAyB;EAAzB,yBAAyB;APihC3D;;AO/gCI;EAAoC,+BAAsC;EAAtC,sCAAsC;APmhC9E;;AOlhCI;EAAoC,6BAAoC;EAApC,oCAAoC;APshC5E;;AOrhCI;EAAoC,gCAAkC;EAAlC,kCAAkC;APyhC1E;;AOxhCI;EAAoC,iCAAyC;EAAzC,yCAAyC;AP4hCjF;;AO3hCI;EAAoC,oCAAwC;EAAxC,wCAAwC;AP+hChF;;AO7hCI;EAAiC,gCAAkC;EAAlC,kCAAkC;APiiCvE;;AOhiCI;EAAiC,8BAAgC;EAAhC,gCAAgC;APoiCrE;;AOniCI;EAAiC,iCAA8B;EAA9B,8BAA8B;APuiCnE;;AOtiCI;EAAiC,mCAAgC;EAAhC,gCAAgC;AP0iCrE;;AOziCI;EAAiC,kCAA+B;EAA/B,+BAA+B;AP6iCpE;;AO3iCI;EAAkC,oCAAoC;EAApC,oCAAoC;AP+iC1E;;AO9iCI;EAAkC,kCAAkC;EAAlC,kCAAkC;APkjCxE;;AOjjCI;EAAkC,qCAAgC;EAAhC,gCAAgC;APqjCtE;;AOpjCI;EAAkC,sCAAuC;EAAvC,uCAAuC;APwjC7E;;AOvjCI;EAAkC,yCAAsC;EAAtC,sCAAsC;AP2jC5E;;AO1jCI;EAAkC,sCAAiC;EAAjC,iCAAiC;AP8jCvE;;AO5jCI;EAAgC,oCAA2B;EAA3B,2BAA2B;APgkC/D;;AO/jCI;EAAgC,qCAAiC;EAAjC,iCAAiC;APmkCrE;;AOlkCI;EAAgC,mCAA+B;EAA/B,+BAA+B;APskCnE;;AOrkCI;EAAgC,sCAA6B;EAA7B,6BAA6B;APykCjE;;AOxkCI;EAAgC,wCAA+B;EAA/B,+BAA+B;AP4kCnE;;AO3kCI;EAAgC,uCAA8B;EAA9B,8BAA8B;AP+kClE;;AGnkCI;EIlDA;IAAgC,kCAA8B;IAA9B,8BAA8B;EP0nChE;EOznCE;IAAgC,qCAAiC;IAAjC,iCAAiC;EP4nCnE;EO3nCE;IAAgC,0CAAsC;IAAtC,sCAAsC;EP8nCxE;EO7nCE;IAAgC,6CAAyC;IAAzC,yCAAyC;EPgoC3E;EO9nCE;IAA8B,8BAA0B;IAA1B,0BAA0B;EPioC1D;EOhoCE;IAA8B,gCAA4B;IAA5B,4BAA4B;EPmoC5D;EOloCE;IAA8B,sCAAkC;IAAlC,kCAAkC;EPqoClE;EOpoCE;IAA8B,6BAAyB;IAAzB,yBAAyB;EPuoCzD;EOtoCE;IAA8B,+BAAuB;IAAvB,uBAAuB;EPyoCvD;EOxoCE;IAA8B,+BAAuB;IAAvB,uBAAuB;EP2oCvD;EO1oCE;IAA8B,+BAAyB;IAAzB,yBAAyB;EP6oCzD;EO5oCE;IAA8B,+BAAyB;IAAzB,yBAAyB;EP+oCzD;EO7oCE;IAAoC,+BAAsC;IAAtC,sCAAsC;EPgpC5E;EO/oCE;IAAoC,6BAAoC;IAApC,oCAAoC;EPkpC1E;EOjpCE;IAAoC,gCAAkC;IAAlC,kCAAkC;EPopCxE;EOnpCE;IAAoC,iCAAyC;IAAzC,yCAAyC;EPspC/E;EOrpCE;IAAoC,oCAAwC;IAAxC,wCAAwC;EPwpC9E;EOtpCE;IAAiC,gCAAkC;IAAlC,kCAAkC;EPypCrE;EOxpCE;IAAiC,8BAAgC;IAAhC,gCAAgC;EP2pCnE;EO1pCE;IAAiC,iCAA8B;IAA9B,8BAA8B;EP6pCjE;EO5pCE;IAAiC,mCAAgC;IAAhC,gCAAgC;EP+pCnE;EO9pCE;IAAiC,kCAA+B;IAA/B,+BAA+B;EPiqClE;EO/pCE;IAAkC,oCAAoC;IAApC,oCAAoC;EPkqCxE;EOjqCE;IAAkC,kCAAkC;IAAlC,kCAAkC;EPoqCtE;EOnqCE;IAAkC,qCAAgC;IAAhC,gCAAgC;EPsqCpE;EOrqCE;IAAkC,sCAAuC;IAAvC,uCAAuC;EPwqC3E;EOvqCE;IAAkC,yCAAsC;IAAtC,sCAAsC;EP0qC1E;EOzqCE;IAAkC,sCAAiC;IAAjC,iCAAiC;EP4qCrE;EO1qCE;IAAgC,oCAA2B;IAA3B,2BAA2B;EP6qC7D;EO5qCE;IAAgC,qCAAiC;IAAjC,iCAAiC;EP+qCnE;EO9qCE;IAAgC,mCAA+B;IAA/B,+BAA+B;EPirCjE;EOhrCE;IAAgC,sCAA6B;IAA7B,6BAA6B;EPmrC/D;EOlrCE;IAAgC,wCAA+B;IAA/B,+BAA+B;EPqrCjE;EOprCE;IAAgC,uCAA8B;IAA9B,8BAA8B;EPurChE;AACF;;AG5qCI;EIlDA;IAAgC,kCAA8B;IAA9B,8BAA8B;EPmuChE;EOluCE;IAAgC,qCAAiC;IAAjC,iCAAiC;EPquCnE;EOpuCE;IAAgC,0CAAsC;IAAtC,sCAAsC;EPuuCxE;EOtuCE;IAAgC,6CAAyC;IAAzC,yCAAyC;EPyuC3E;EOvuCE;IAA8B,8BAA0B;IAA1B,0BAA0B;EP0uC1D;EOzuCE;IAA8B,gCAA4B;IAA5B,4BAA4B;EP4uC5D;EO3uCE;IAA8B,sCAAkC;IAAlC,kCAAkC;EP8uClE;EO7uCE;IAA8B,6BAAyB;IAAzB,yBAAyB;EPgvCzD;EO/uCE;IAA8B,+BAAuB;IAAvB,uBAAuB;EPkvCvD;EOjvCE;IAA8B,+BAAuB;IAAvB,uBAAuB;EPovCvD;EOnvCE;IAA8B,+BAAyB;IAAzB,yBAAyB;EPsvCzD;EOrvCE;IAA8B,+BAAyB;IAAzB,yBAAyB;EPwvCzD;EOtvCE;IAAoC,+BAAsC;IAAtC,sCAAsC;EPyvC5E;EOxvCE;IAAoC,6BAAoC;IAApC,oCAAoC;EP2vC1E;EO1vCE;IAAoC,gCAAkC;IAAlC,kCAAkC;EP6vCxE;EO5vCE;IAAoC,iCAAyC;IAAzC,yCAAyC;EP+vC/E;EO9vCE;IAAoC,oCAAwC;IAAxC,wCAAwC;EPiwC9E;EO/vCE;IAAiC,gCAAkC;IAAlC,kCAAkC;EPkwCrE;EOjwCE;IAAiC,8BAAgC;IAAhC,gCAAgC;EPowCnE;EOnwCE;IAAiC,iCAA8B;IAA9B,8BAA8B;EPswCjE;EOrwCE;IAAiC,mCAAgC;IAAhC,gCAAgC;EPwwCnE;EOvwCE;IAAiC,kCAA+B;IAA/B,+BAA+B;EP0wClE;EOxwCE;IAAkC,oCAAoC;IAApC,oCAAoC;EP2wCxE;EO1wCE;IAAkC,kCAAkC;IAAlC,kCAAkC;EP6wCtE;EO5wCE;IAAkC,qCAAgC;IAAhC,gCAAgC;EP+wCpE;EO9wCE;IAAkC,sCAAuC;IAAvC,uCAAuC;EPixC3E;EOhxCE;IAAkC,yCAAsC;IAAtC,sCAAsC;EPmxC1E;EOlxCE;IAAkC,sCAAiC;IAAjC,iCAAiC;EPqxCrE;EOnxCE;IAAgC,oCAA2B;IAA3B,2BAA2B;EPsxC7D;EOrxCE;IAAgC,qCAAiC;IAAjC,iCAAiC;EPwxCnE;EOvxCE;IAAgC,mCAA+B;IAA/B,+BAA+B;EP0xCjE;EOzxCE;IAAgC,sCAA6B;IAA7B,6BAA6B;EP4xC/D;EO3xCE;IAAgC,wCAA+B;IAA/B,+BAA+B;EP8xCjE;EO7xCE;IAAgC,uCAA8B;IAA9B,8BAA8B;EPgyChE;AACF;;AGrxCI;EIlDA;IAAgC,kCAA8B;IAA9B,8BAA8B;EP40ChE;EO30CE;IAAgC,qCAAiC;IAAjC,iCAAiC;EP80CnE;EO70CE;IAAgC,0CAAsC;IAAtC,sCAAsC;EPg1CxE;EO/0CE;IAAgC,6CAAyC;IAAzC,yCAAyC;EPk1C3E;EOh1CE;IAA8B,8BAA0B;IAA1B,0BAA0B;EPm1C1D;EOl1CE;IAA8B,gCAA4B;IAA5B,4BAA4B;EPq1C5D;EOp1CE;IAA8B,sCAAkC;IAAlC,kCAAkC;EPu1ClE;EOt1CE;IAA8B,6BAAyB;IAAzB,yBAAyB;EPy1CzD;EOx1CE;IAA8B,+BAAuB;IAAvB,uBAAuB;EP21CvD;EO11CE;IAA8B,+BAAuB;IAAvB,uBAAuB;EP61CvD;EO51CE;IAA8B,+BAAyB;IAAzB,yBAAyB;EP+1CzD;EO91CE;IAA8B,+BAAyB;IAAzB,yBAAyB;EPi2CzD;EO/1CE;IAAoC,+BAAsC;IAAtC,sCAAsC;EPk2C5E;EOj2CE;IAAoC,6BAAoC;IAApC,oCAAoC;EPo2C1E;EOn2CE;IAAoC,gCAAkC;IAAlC,kCAAkC;EPs2CxE;EOr2CE;IAAoC,iCAAyC;IAAzC,yCAAyC;EPw2C/E;EOv2CE;IAAoC,oCAAwC;IAAxC,wCAAwC;EP02C9E;EOx2CE;IAAiC,gCAAkC;IAAlC,kCAAkC;EP22CrE;EO12CE;IAAiC,8BAAgC;IAAhC,gCAAgC;EP62CnE;EO52CE;IAAiC,iCAA8B;IAA9B,8BAA8B;EP+2CjE;EO92CE;IAAiC,mCAAgC;IAAhC,gCAAgC;EPi3CnE;EOh3CE;IAAiC,kCAA+B;IAA/B,+BAA+B;EPm3ClE;EOj3CE;IAAkC,oCAAoC;IAApC,oCAAoC;EPo3CxE;EOn3CE;IAAkC,kCAAkC;IAAlC,kCAAkC;EPs3CtE;EOr3CE;IAAkC,qCAAgC;IAAhC,gCAAgC;EPw3CpE;EOv3CE;IAAkC,sCAAuC;IAAvC,uCAAuC;EP03C3E;EOz3CE;IAAkC,yCAAsC;IAAtC,sCAAsC;EP43C1E;EO33CE;IAAkC,sCAAiC;IAAjC,iCAAiC;EP83CrE;EO53CE;IAAgC,oCAA2B;IAA3B,2BAA2B;EP+3C7D;EO93CE;IAAgC,qCAAiC;IAAjC,iCAAiC;EPi4CnE;EOh4CE;IAAgC,mCAA+B;IAA/B,+BAA+B;EPm4CjE;EOl4CE;IAAgC,sCAA6B;IAA7B,6BAA6B;EPq4C/D;EOp4CE;IAAgC,wCAA+B;IAA/B,+BAA+B;EPu4CjE;EOt4CE;IAAgC,uCAA8B;IAA9B,8BAA8B;EPy4ChE;AACF;;AG93CI;EIlDA;IAAgC,kCAA8B;IAA9B,8BAA8B;EPq7ChE;EOp7CE;IAAgC,qCAAiC;IAAjC,iCAAiC;EPu7CnE;EOt7CE;IAAgC,0CAAsC;IAAtC,sCAAsC;EPy7CxE;EOx7CE;IAAgC,6CAAyC;IAAzC,yCAAyC;EP27C3E;EOz7CE;IAA8B,8BAA0B;IAA1B,0BAA0B;EP47C1D;EO37CE;IAA8B,gCAA4B;IAA5B,4BAA4B;EP87C5D;EO77CE;IAA8B,sCAAkC;IAAlC,kCAAkC;EPg8ClE;EO/7CE;IAA8B,6BAAyB;IAAzB,yBAAyB;EPk8CzD;EOj8CE;IAA8B,+BAAuB;IAAvB,uBAAuB;EPo8CvD;EOn8CE;IAA8B,+BAAuB;IAAvB,uBAAuB;EPs8CvD;EOr8CE;IAA8B,+BAAyB;IAAzB,yBAAyB;EPw8CzD;EOv8CE;IAA8B,+BAAyB;IAAzB,yBAAyB;EP08CzD;EOx8CE;IAAoC,+BAAsC;IAAtC,sCAAsC;EP28C5E;EO18CE;IAAoC,6BAAoC;IAApC,oCAAoC;EP68C1E;EO58CE;IAAoC,gCAAkC;IAAlC,kCAAkC;EP+8CxE;EO98CE;IAAoC,iCAAyC;IAAzC,yCAAyC;EPi9C/E;EOh9CE;IAAoC,oCAAwC;IAAxC,wCAAwC;EPm9C9E;EOj9CE;IAAiC,gCAAkC;IAAlC,kCAAkC;EPo9CrE;EOn9CE;IAAiC,8BAAgC;IAAhC,gCAAgC;EPs9CnE;EOr9CE;IAAiC,iCAA8B;IAA9B,8BAA8B;EPw9CjE;EOv9CE;IAAiC,mCAAgC;IAAhC,gCAAgC;EP09CnE;EOz9CE;IAAiC,kCAA+B;IAA/B,+BAA+B;EP49ClE;EO19CE;IAAkC,oCAAoC;IAApC,oCAAoC;EP69CxE;EO59CE;IAAkC,kCAAkC;IAAlC,kCAAkC;EP+9CtE;EO99CE;IAAkC,qCAAgC;IAAhC,gCAAgC;EPi+CpE;EOh+CE;IAAkC,sCAAuC;IAAvC,uCAAuC;EPm+C3E;EOl+CE;IAAkC,yCAAsC;IAAtC,sCAAsC;EPq+C1E;EOp+CE;IAAkC,sCAAiC;IAAjC,iCAAiC;EPu+CrE;EOr+CE;IAAgC,oCAA2B;IAA3B,2BAA2B;EPw+C7D;EOv+CE;IAAgC,qCAAiC;IAAjC,iCAAiC;EP0+CnE;EOz+CE;IAAgC,mCAA+B;IAA/B,+BAA+B;EP4+CjE;EO3+CE;IAAgC,sCAA6B;IAA7B,6BAA6B;EP8+C/D;EO7+CE;IAAgC,wCAA+B;IAA/B,+BAA+B;EPg/CjE;EO/+CE;IAAgC,uCAA8B;IAA9B,8BAA8B;EPk/ChE;AACF;;AQzhDQ;EAAgC,oBAA4B;AR6hDpE;;AQ5hDQ;;EAEE,wBAAoC;AR+hD9C;;AQ7hDQ;;EAEE,0BAAwC;ARgiDlD;;AQ9hDQ;;EAEE,2BAA0C;ARiiDpD;;AQ/hDQ;;EAEE,yBAAsC;ARkiDhD;;AQjjDQ;EAAgC,0BAA4B;ARqjDpE;;AQpjDQ;;EAEE,8BAAoC;ARujD9C;;AQrjDQ;;EAEE,gCAAwC;ARwjDlD;;AQtjDQ;;EAEE,iCAA0C;ARyjDpD;;AQvjDQ;;EAEE,+BAAsC;AR0jDhD;;AQzkDQ;EAAgC,yBAA4B;AR6kDpE;;AQ5kDQ;;EAEE,6BAAoC;AR+kD9C;;AQ7kDQ;;EAEE,+BAAwC;ARglDlD;;AQ9kDQ;;EAEE,gCAA0C;ARilDpD;;AQ/kDQ;;EAEE,8BAAsC;ARklDhD;;AQjmDQ;EAAgC,uBAA4B;ARqmDpE;;AQpmDQ;;EAEE,2BAAoC;ARumD9C;;AQrmDQ;;EAEE,6BAAwC;ARwmDlD;;AQtmDQ;;EAEE,8BAA0C;ARymDpD;;AQvmDQ;;EAEE,4BAAsC;AR0mDhD;;AQznDQ;EAAgC,yBAA4B;AR6nDpE;;AQ5nDQ;;EAEE,6BAAoC;AR+nD9C;;AQ7nDQ;;EAEE,+BAAwC;ARgoDlD;;AQ9nDQ;;EAEE,gCAA0C;ARioDpD;;AQ/nDQ;;EAEE,8BAAsC;ARkoDhD;;AQjpDQ;EAAgC,uBAA4B;ARqpDpE;;AQppDQ;;EAEE,2BAAoC;ARupD9C;;AQrpDQ;;EAEE,6BAAwC;ARwpDlD;;AQtpDQ;;EAEE,8BAA0C;ARypDpD;;AQvpDQ;;EAEE,4BAAsC;AR0pDhD;;AQzqDQ;EAAgC,qBAA4B;AR6qDpE;;AQ5qDQ;;EAEE,yBAAoC;AR+qD9C;;AQ7qDQ;;EAEE,2BAAwC;ARgrDlD;;AQ9qDQ;;EAEE,4BAA0C;ARirDpD;;AQ/qDQ;;EAEE,0BAAsC;ARkrDhD;;AQjsDQ;EAAgC,2BAA4B;ARqsDpE;;AQpsDQ;;EAEE,+BAAoC;ARusD9C;;AQrsDQ;;EAEE,iCAAwC;ARwsDlD;;AQtsDQ;;EAEE,kCAA0C;ARysDpD;;AQvsDQ;;EAEE,gCAAsC;AR0sDhD;;AQztDQ;EAAgC,0BAA4B;AR6tDpE;;AQ5tDQ;;EAEE,8BAAoC;AR+tD9C;;AQ7tDQ;;EAEE,gCAAwC;ARguDlD;;AQ9tDQ;;EAEE,iCAA0C;ARiuDpD;;AQ/tDQ;;EAEE,+BAAsC;ARkuDhD;;AQjvDQ;EAAgC,wBAA4B;ARqvDpE;;AQpvDQ;;EAEE,4BAAoC;ARuvD9C;;AQrvDQ;;EAEE,8BAAwC;ARwvDlD;;AQtvDQ;;EAEE,+BAA0C;ARyvDpD;;AQvvDQ;;EAEE,6BAAsC;AR0vDhD;;AQzwDQ;EAAgC,0BAA4B;AR6wDpE;;AQ5wDQ;;EAEE,8BAAoC;AR+wD9C;;AQ7wDQ;;EAEE,gCAAwC;ARgxDlD;;AQ9wDQ;;EAEE,iCAA0C;ARixDpD;;AQ/wDQ;;EAEE,+BAAsC;ARkxDhD;;AQjyDQ;EAAgC,wBAA4B;ARqyDpE;;AQpyDQ;;EAEE,4BAAoC;ARuyD9C;;AQryDQ;;EAEE,8BAAwC;ARwyDlD;;AQtyDQ;;EAEE,+BAA0C;ARyyDpD;;AQvyDQ;;EAEE,6BAAsC;AR0yDhD;;AQlyDQ;EAAwB,2BAA2B;ARsyD3D;;AQryDQ;;EAEE,+BAA+B;ARwyDzC;;AQtyDQ;;EAEE,iCAAiC;ARyyD3C;;AQvyDQ;;EAEE,kCAAkC;AR0yD5C;;AQxyDQ;;EAEE,gCAAgC;AR2yD1C;;AQ1zDQ;EAAwB,0BAA2B;AR8zD3D;;AQ7zDQ;;EAEE,8BAA+B;ARg0DzC;;AQ9zDQ;;EAEE,gCAAiC;ARi0D3C;;AQ/zDQ;;EAEE,iCAAkC;ARk0D5C;;AQh0DQ;;EAEE,+BAAgC;ARm0D1C;;AQl1DQ;EAAwB,wBAA2B;ARs1D3D;;AQr1DQ;;EAEE,4BAA+B;ARw1DzC;;AQt1DQ;;EAEE,8BAAiC;ARy1D3C;;AQv1DQ;;EAEE,+BAAkC;AR01D5C;;AQx1DQ;;EAEE,6BAAgC;AR21D1C;;AQ12DQ;EAAwB,0BAA2B;AR82D3D;;AQ72DQ;;EAEE,8BAA+B;ARg3DzC;;AQ92DQ;;EAEE,gCAAiC;ARi3D3C;;AQ/2DQ;;EAEE,iCAAkC;ARk3D5C;;AQh3DQ;;EAEE,+BAAgC;ARm3D1C;;AQl4DQ;EAAwB,wBAA2B;ARs4D3D;;AQr4DQ;;EAEE,4BAA+B;ARw4DzC;;AQt4DQ;;EAEE,8BAAiC;ARy4D3C;;AQv4DQ;;EAEE,+BAAkC;AR04D5C;;AQx4DQ;;EAEE,6BAAgC;AR24D1C;;AQr4DI;EAAmB,uBAAuB;ARy4D9C;;AQx4DI;;EAEE,2BAA2B;AR24DjC;;AQz4DI;;EAEE,6BAA6B;AR44DnC;;AQ14DI;;EAEE,8BAA8B;AR64DpC;;AQ34DI;;EAEE,4BAA4B;AR84DlC;;AGv5DI;EKlDI;IAAgC,oBAA4B;ER88DlE;EQ78DM;;IAEE,wBAAoC;ER+8D5C;EQ78DM;;IAEE,0BAAwC;ER+8DhD;EQ78DM;;IAEE,2BAA0C;ER+8DlD;EQ78DM;;IAEE,yBAAsC;ER+8D9C;EQ99DM;IAAgC,0BAA4B;ERi+DlE;EQh+DM;;IAEE,8BAAoC;ERk+D5C;EQh+DM;;IAEE,gCAAwC;ERk+DhD;EQh+DM;;IAEE,iCAA0C;ERk+DlD;EQh+DM;;IAEE,+BAAsC;ERk+D9C;EQj/DM;IAAgC,yBAA4B;ERo/DlE;EQn/DM;;IAEE,6BAAoC;ERq/D5C;EQn/DM;;IAEE,+BAAwC;ERq/DhD;EQn/DM;;IAEE,gCAA0C;ERq/DlD;EQn/DM;;IAEE,8BAAsC;ERq/D9C;EQpgEM;IAAgC,uBAA4B;ERugElE;EQtgEM;;IAEE,2BAAoC;ERwgE5C;EQtgEM;;IAEE,6BAAwC;ERwgEhD;EQtgEM;;IAEE,8BAA0C;ERwgElD;EQtgEM;;IAEE,4BAAsC;ERwgE9C;EQvhEM;IAAgC,yBAA4B;ER0hElE;EQzhEM;;IAEE,6BAAoC;ER2hE5C;EQzhEM;;IAEE,+BAAwC;ER2hEhD;EQzhEM;;IAEE,gCAA0C;ER2hElD;EQzhEM;;IAEE,8BAAsC;ER2hE9C;EQ1iEM;IAAgC,uBAA4B;ER6iElE;EQ5iEM;;IAEE,2BAAoC;ER8iE5C;EQ5iEM;;IAEE,6BAAwC;ER8iEhD;EQ5iEM;;IAEE,8BAA0C;ER8iElD;EQ5iEM;;IAEE,4BAAsC;ER8iE9C;EQ7jEM;IAAgC,qBAA4B;ERgkElE;EQ/jEM;;IAEE,yBAAoC;ERikE5C;EQ/jEM;;IAEE,2BAAwC;ERikEhD;EQ/jEM;;IAEE,4BAA0C;ERikElD;EQ/jEM;;IAEE,0BAAsC;ERikE9C;EQhlEM;IAAgC,2BAA4B;ERmlElE;EQllEM;;IAEE,+BAAoC;ERolE5C;EQllEM;;IAEE,iCAAwC;ERolEhD;EQllEM;;IAEE,kCAA0C;ERolElD;EQllEM;;IAEE,gCAAsC;ERolE9C;EQnmEM;IAAgC,0BAA4B;ERsmElE;EQrmEM;;IAEE,8BAAoC;ERumE5C;EQrmEM;;IAEE,gCAAwC;ERumEhD;EQrmEM;;IAEE,iCAA0C;ERumElD;EQrmEM;;IAEE,+BAAsC;ERumE9C;EQtnEM;IAAgC,wBAA4B;ERynElE;EQxnEM;;IAEE,4BAAoC;ER0nE5C;EQxnEM;;IAEE,8BAAwC;ER0nEhD;EQxnEM;;IAEE,+BAA0C;ER0nElD;EQxnEM;;IAEE,6BAAsC;ER0nE9C;EQzoEM;IAAgC,0BAA4B;ER4oElE;EQ3oEM;;IAEE,8BAAoC;ER6oE5C;EQ3oEM;;IAEE,gCAAwC;ER6oEhD;EQ3oEM;;IAEE,iCAA0C;ER6oElD;EQ3oEM;;IAEE,+BAAsC;ER6oE9C;EQ5pEM;IAAgC,wBAA4B;ER+pElE;EQ9pEM;;IAEE,4BAAoC;ERgqE5C;EQ9pEM;;IAEE,8BAAwC;ERgqEhD;EQ9pEM;;IAEE,+BAA0C;ERgqElD;EQ9pEM;;IAEE,6BAAsC;ERgqE9C;EQxpEM;IAAwB,2BAA2B;ER2pEzD;EQ1pEM;;IAEE,+BAA+B;ER4pEvC;EQ1pEM;;IAEE,iCAAiC;ER4pEzC;EQ1pEM;;IAEE,kCAAkC;ER4pE1C;EQ1pEM;;IAEE,gCAAgC;ER4pExC;EQ3qEM;IAAwB,0BAA2B;ER8qEzD;EQ7qEM;;IAEE,8BAA+B;ER+qEvC;EQ7qEM;;IAEE,gCAAiC;ER+qEzC;EQ7qEM;;IAEE,iCAAkC;ER+qE1C;EQ7qEM;;IAEE,+BAAgC;ER+qExC;EQ9rEM;IAAwB,wBAA2B;ERisEzD;EQhsEM;;IAEE,4BAA+B;ERksEvC;EQhsEM;;IAEE,8BAAiC;ERksEzC;EQhsEM;;IAEE,+BAAkC;ERksE1C;EQhsEM;;IAEE,6BAAgC;ERksExC;EQjtEM;IAAwB,0BAA2B;ERotEzD;EQntEM;;IAEE,8BAA+B;ERqtEvC;EQntEM;;IAEE,gCAAiC;ERqtEzC;EQntEM;;IAEE,iCAAkC;ERqtE1C;EQntEM;;IAEE,+BAAgC;ERqtExC;EQpuEM;IAAwB,wBAA2B;ERuuEzD;EQtuEM;;IAEE,4BAA+B;ERwuEvC;EQtuEM;;IAEE,8BAAiC;ERwuEzC;EQtuEM;;IAEE,+BAAkC;ERwuE1C;EQtuEM;;IAEE,6BAAgC;ERwuExC;EQluEE;IAAmB,uBAAuB;ERquE5C;EQpuEE;;IAEE,2BAA2B;ERsuE/B;EQpuEE;;IAEE,6BAA6B;ERsuEjC;EQpuEE;;IAEE,8BAA8B;ERsuElC;EQpuEE;;IAEE,4BAA4B;ERsuEhC;AACF;;AGhvEI;EKlDI;IAAgC,oBAA4B;ERuyElE;EQtyEM;;IAEE,wBAAoC;ERwyE5C;EQtyEM;;IAEE,0BAAwC;ERwyEhD;EQtyEM;;IAEE,2BAA0C;ERwyElD;EQtyEM;;IAEE,yBAAsC;ERwyE9C;EQvzEM;IAAgC,0BAA4B;ER0zElE;EQzzEM;;IAEE,8BAAoC;ER2zE5C;EQzzEM;;IAEE,gCAAwC;ER2zEhD;EQzzEM;;IAEE,iCAA0C;ER2zElD;EQzzEM;;IAEE,+BAAsC;ER2zE9C;EQ10EM;IAAgC,yBAA4B;ER60ElE;EQ50EM;;IAEE,6BAAoC;ER80E5C;EQ50EM;;IAEE,+BAAwC;ER80EhD;EQ50EM;;IAEE,gCAA0C;ER80ElD;EQ50EM;;IAEE,8BAAsC;ER80E9C;EQ71EM;IAAgC,uBAA4B;ERg2ElE;EQ/1EM;;IAEE,2BAAoC;ERi2E5C;EQ/1EM;;IAEE,6BAAwC;ERi2EhD;EQ/1EM;;IAEE,8BAA0C;ERi2ElD;EQ/1EM;;IAEE,4BAAsC;ERi2E9C;EQh3EM;IAAgC,yBAA4B;ERm3ElE;EQl3EM;;IAEE,6BAAoC;ERo3E5C;EQl3EM;;IAEE,+BAAwC;ERo3EhD;EQl3EM;;IAEE,gCAA0C;ERo3ElD;EQl3EM;;IAEE,8BAAsC;ERo3E9C;EQn4EM;IAAgC,uBAA4B;ERs4ElE;EQr4EM;;IAEE,2BAAoC;ERu4E5C;EQr4EM;;IAEE,6BAAwC;ERu4EhD;EQr4EM;;IAEE,8BAA0C;ERu4ElD;EQr4EM;;IAEE,4BAAsC;ERu4E9C;EQt5EM;IAAgC,qBAA4B;ERy5ElE;EQx5EM;;IAEE,yBAAoC;ER05E5C;EQx5EM;;IAEE,2BAAwC;ER05EhD;EQx5EM;;IAEE,4BAA0C;ER05ElD;EQx5EM;;IAEE,0BAAsC;ER05E9C;EQz6EM;IAAgC,2BAA4B;ER46ElE;EQ36EM;;IAEE,+BAAoC;ER66E5C;EQ36EM;;IAEE,iCAAwC;ER66EhD;EQ36EM;;IAEE,kCAA0C;ER66ElD;EQ36EM;;IAEE,gCAAsC;ER66E9C;EQ57EM;IAAgC,0BAA4B;ER+7ElE;EQ97EM;;IAEE,8BAAoC;ERg8E5C;EQ97EM;;IAEE,gCAAwC;ERg8EhD;EQ97EM;;IAEE,iCAA0C;ERg8ElD;EQ97EM;;IAEE,+BAAsC;ERg8E9C;EQ/8EM;IAAgC,wBAA4B;ERk9ElE;EQj9EM;;IAEE,4BAAoC;ERm9E5C;EQj9EM;;IAEE,8BAAwC;ERm9EhD;EQj9EM;;IAEE,+BAA0C;ERm9ElD;EQj9EM;;IAEE,6BAAsC;ERm9E9C;EQl+EM;IAAgC,0BAA4B;ERq+ElE;EQp+EM;;IAEE,8BAAoC;ERs+E5C;EQp+EM;;IAEE,gCAAwC;ERs+EhD;EQp+EM;;IAEE,iCAA0C;ERs+ElD;EQp+EM;;IAEE,+BAAsC;ERs+E9C;EQr/EM;IAAgC,wBAA4B;ERw/ElE;EQv/EM;;IAEE,4BAAoC;ERy/E5C;EQv/EM;;IAEE,8BAAwC;ERy/EhD;EQv/EM;;IAEE,+BAA0C;ERy/ElD;EQv/EM;;IAEE,6BAAsC;ERy/E9C;EQj/EM;IAAwB,2BAA2B;ERo/EzD;EQn/EM;;IAEE,+BAA+B;ERq/EvC;EQn/EM;;IAEE,iCAAiC;ERq/EzC;EQn/EM;;IAEE,kCAAkC;ERq/E1C;EQn/EM;;IAEE,gCAAgC;ERq/ExC;EQpgFM;IAAwB,0BAA2B;ERugFzD;EQtgFM;;IAEE,8BAA+B;ERwgFvC;EQtgFM;;IAEE,gCAAiC;ERwgFzC;EQtgFM;;IAEE,iCAAkC;ERwgF1C;EQtgFM;;IAEE,+BAAgC;ERwgFxC;EQvhFM;IAAwB,wBAA2B;ER0hFzD;EQzhFM;;IAEE,4BAA+B;ER2hFvC;EQzhFM;;IAEE,8BAAiC;ER2hFzC;EQzhFM;;IAEE,+BAAkC;ER2hF1C;EQzhFM;;IAEE,6BAAgC;ER2hFxC;EQ1iFM;IAAwB,0BAA2B;ER6iFzD;EQ5iFM;;IAEE,8BAA+B;ER8iFvC;EQ5iFM;;IAEE,gCAAiC;ER8iFzC;EQ5iFM;;IAEE,iCAAkC;ER8iF1C;EQ5iFM;;IAEE,+BAAgC;ER8iFxC;EQ7jFM;IAAwB,wBAA2B;ERgkFzD;EQ/jFM;;IAEE,4BAA+B;ERikFvC;EQ/jFM;;IAEE,8BAAiC;ERikFzC;EQ/jFM;;IAEE,+BAAkC;ERikF1C;EQ/jFM;;IAEE,6BAAgC;ERikFxC;EQ3jFE;IAAmB,uBAAuB;ER8jF5C;EQ7jFE;;IAEE,2BAA2B;ER+jF/B;EQ7jFE;;IAEE,6BAA6B;ER+jFjC;EQ7jFE;;IAEE,8BAA8B;ER+jFlC;EQ7jFE;;IAEE,4BAA4B;ER+jFhC;AACF;;AGzkFI;EKlDI;IAAgC,oBAA4B;ERgoFlE;EQ/nFM;;IAEE,wBAAoC;ERioF5C;EQ/nFM;;IAEE,0BAAwC;ERioFhD;EQ/nFM;;IAEE,2BAA0C;ERioFlD;EQ/nFM;;IAEE,yBAAsC;ERioF9C;EQhpFM;IAAgC,0BAA4B;ERmpFlE;EQlpFM;;IAEE,8BAAoC;ERopF5C;EQlpFM;;IAEE,gCAAwC;ERopFhD;EQlpFM;;IAEE,iCAA0C;ERopFlD;EQlpFM;;IAEE,+BAAsC;ERopF9C;EQnqFM;IAAgC,yBAA4B;ERsqFlE;EQrqFM;;IAEE,6BAAoC;ERuqF5C;EQrqFM;;IAEE,+BAAwC;ERuqFhD;EQrqFM;;IAEE,gCAA0C;ERuqFlD;EQrqFM;;IAEE,8BAAsC;ERuqF9C;EQtrFM;IAAgC,uBAA4B;ERyrFlE;EQxrFM;;IAEE,2BAAoC;ER0rF5C;EQxrFM;;IAEE,6BAAwC;ER0rFhD;EQxrFM;;IAEE,8BAA0C;ER0rFlD;EQxrFM;;IAEE,4BAAsC;ER0rF9C;EQzsFM;IAAgC,yBAA4B;ER4sFlE;EQ3sFM;;IAEE,6BAAoC;ER6sF5C;EQ3sFM;;IAEE,+BAAwC;ER6sFhD;EQ3sFM;;IAEE,gCAA0C;ER6sFlD;EQ3sFM;;IAEE,8BAAsC;ER6sF9C;EQ5tFM;IAAgC,uBAA4B;ER+tFlE;EQ9tFM;;IAEE,2BAAoC;ERguF5C;EQ9tFM;;IAEE,6BAAwC;ERguFhD;EQ9tFM;;IAEE,8BAA0C;ERguFlD;EQ9tFM;;IAEE,4BAAsC;ERguF9C;EQ/uFM;IAAgC,qBAA4B;ERkvFlE;EQjvFM;;IAEE,yBAAoC;ERmvF5C;EQjvFM;;IAEE,2BAAwC;ERmvFhD;EQjvFM;;IAEE,4BAA0C;ERmvFlD;EQjvFM;;IAEE,0BAAsC;ERmvF9C;EQlwFM;IAAgC,2BAA4B;ERqwFlE;EQpwFM;;IAEE,+BAAoC;ERswF5C;EQpwFM;;IAEE,iCAAwC;ERswFhD;EQpwFM;;IAEE,kCAA0C;ERswFlD;EQpwFM;;IAEE,gCAAsC;ERswF9C;EQrxFM;IAAgC,0BAA4B;ERwxFlE;EQvxFM;;IAEE,8BAAoC;ERyxF5C;EQvxFM;;IAEE,gCAAwC;ERyxFhD;EQvxFM;;IAEE,iCAA0C;ERyxFlD;EQvxFM;;IAEE,+BAAsC;ERyxF9C;EQxyFM;IAAgC,wBAA4B;ER2yFlE;EQ1yFM;;IAEE,4BAAoC;ER4yF5C;EQ1yFM;;IAEE,8BAAwC;ER4yFhD;EQ1yFM;;IAEE,+BAA0C;ER4yFlD;EQ1yFM;;IAEE,6BAAsC;ER4yF9C;EQ3zFM;IAAgC,0BAA4B;ER8zFlE;EQ7zFM;;IAEE,8BAAoC;ER+zF5C;EQ7zFM;;IAEE,gCAAwC;ER+zFhD;EQ7zFM;;IAEE,iCAA0C;ER+zFlD;EQ7zFM;;IAEE,+BAAsC;ER+zF9C;EQ90FM;IAAgC,wBAA4B;ERi1FlE;EQh1FM;;IAEE,4BAAoC;ERk1F5C;EQh1FM;;IAEE,8BAAwC;ERk1FhD;EQh1FM;;IAEE,+BAA0C;ERk1FlD;EQh1FM;;IAEE,6BAAsC;ERk1F9C;EQ10FM;IAAwB,2BAA2B;ER60FzD;EQ50FM;;IAEE,+BAA+B;ER80FvC;EQ50FM;;IAEE,iCAAiC;ER80FzC;EQ50FM;;IAEE,kCAAkC;ER80F1C;EQ50FM;;IAEE,gCAAgC;ER80FxC;EQ71FM;IAAwB,0BAA2B;ERg2FzD;EQ/1FM;;IAEE,8BAA+B;ERi2FvC;EQ/1FM;;IAEE,gCAAiC;ERi2FzC;EQ/1FM;;IAEE,iCAAkC;ERi2F1C;EQ/1FM;;IAEE,+BAAgC;ERi2FxC;EQh3FM;IAAwB,wBAA2B;ERm3FzD;EQl3FM;;IAEE,4BAA+B;ERo3FvC;EQl3FM;;IAEE,8BAAiC;ERo3FzC;EQl3FM;;IAEE,+BAAkC;ERo3F1C;EQl3FM;;IAEE,6BAAgC;ERo3FxC;EQn4FM;IAAwB,0BAA2B;ERs4FzD;EQr4FM;;IAEE,8BAA+B;ERu4FvC;EQr4FM;;IAEE,gCAAiC;ERu4FzC;EQr4FM;;IAEE,iCAAkC;ERu4F1C;EQr4FM;;IAEE,+BAAgC;ERu4FxC;EQt5FM;IAAwB,wBAA2B;ERy5FzD;EQx5FM;;IAEE,4BAA+B;ER05FvC;EQx5FM;;IAEE,8BAAiC;ER05FzC;EQx5FM;;IAEE,+BAAkC;ER05F1C;EQx5FM;;IAEE,6BAAgC;ER05FxC;EQp5FE;IAAmB,uBAAuB;ERu5F5C;EQt5FE;;IAEE,2BAA2B;ERw5F/B;EQt5FE;;IAEE,6BAA6B;ERw5FjC;EQt5FE;;IAEE,8BAA8B;ERw5FlC;EQt5FE;;IAEE,4BAA4B;ERw5FhC;AACF;;AGl6FI;EKlDI;IAAgC,oBAA4B;ERy9FlE;EQx9FM;;IAEE,wBAAoC;ER09F5C;EQx9FM;;IAEE,0BAAwC;ER09FhD;EQx9FM;;IAEE,2BAA0C;ER09FlD;EQx9FM;;IAEE,yBAAsC;ER09F9C;EQz+FM;IAAgC,0BAA4B;ER4+FlE;EQ3+FM;;IAEE,8BAAoC;ER6+F5C;EQ3+FM;;IAEE,gCAAwC;ER6+FhD;EQ3+FM;;IAEE,iCAA0C;ER6+FlD;EQ3+FM;;IAEE,+BAAsC;ER6+F9C;EQ5/FM;IAAgC,yBAA4B;ER+/FlE;EQ9/FM;;IAEE,6BAAoC;ERggG5C;EQ9/FM;;IAEE,+BAAwC;ERggGhD;EQ9/FM;;IAEE,gCAA0C;ERggGlD;EQ9/FM;;IAEE,8BAAsC;ERggG9C;EQ/gGM;IAAgC,uBAA4B;ERkhGlE;EQjhGM;;IAEE,2BAAoC;ERmhG5C;EQjhGM;;IAEE,6BAAwC;ERmhGhD;EQjhGM;;IAEE,8BAA0C;ERmhGlD;EQjhGM;;IAEE,4BAAsC;ERmhG9C;EQliGM;IAAgC,yBAA4B;ERqiGlE;EQpiGM;;IAEE,6BAAoC;ERsiG5C;EQpiGM;;IAEE,+BAAwC;ERsiGhD;EQpiGM;;IAEE,gCAA0C;ERsiGlD;EQpiGM;;IAEE,8BAAsC;ERsiG9C;EQrjGM;IAAgC,uBAA4B;ERwjGlE;EQvjGM;;IAEE,2BAAoC;ERyjG5C;EQvjGM;;IAEE,6BAAwC;ERyjGhD;EQvjGM;;IAEE,8BAA0C;ERyjGlD;EQvjGM;;IAEE,4BAAsC;ERyjG9C;EQxkGM;IAAgC,qBAA4B;ER2kGlE;EQ1kGM;;IAEE,yBAAoC;ER4kG5C;EQ1kGM;;IAEE,2BAAwC;ER4kGhD;EQ1kGM;;IAEE,4BAA0C;ER4kGlD;EQ1kGM;;IAEE,0BAAsC;ER4kG9C;EQ3lGM;IAAgC,2BAA4B;ER8lGlE;EQ7lGM;;IAEE,+BAAoC;ER+lG5C;EQ7lGM;;IAEE,iCAAwC;ER+lGhD;EQ7lGM;;IAEE,kCAA0C;ER+lGlD;EQ7lGM;;IAEE,gCAAsC;ER+lG9C;EQ9mGM;IAAgC,0BAA4B;ERinGlE;EQhnGM;;IAEE,8BAAoC;ERknG5C;EQhnGM;;IAEE,gCAAwC;ERknGhD;EQhnGM;;IAEE,iCAA0C;ERknGlD;EQhnGM;;IAEE,+BAAsC;ERknG9C;EQjoGM;IAAgC,wBAA4B;ERooGlE;EQnoGM;;IAEE,4BAAoC;ERqoG5C;EQnoGM;;IAEE,8BAAwC;ERqoGhD;EQnoGM;;IAEE,+BAA0C;ERqoGlD;EQnoGM;;IAEE,6BAAsC;ERqoG9C;EQppGM;IAAgC,0BAA4B;ERupGlE;EQtpGM;;IAEE,8BAAoC;ERwpG5C;EQtpGM;;IAEE,gCAAwC;ERwpGhD;EQtpGM;;IAEE,iCAA0C;ERwpGlD;EQtpGM;;IAEE,+BAAsC;ERwpG9C;EQvqGM;IAAgC,wBAA4B;ER0qGlE;EQzqGM;;IAEE,4BAAoC;ER2qG5C;EQzqGM;;IAEE,8BAAwC;ER2qGhD;EQzqGM;;IAEE,+BAA0C;ER2qGlD;EQzqGM;;IAEE,6BAAsC;ER2qG9C;EQnqGM;IAAwB,2BAA2B;ERsqGzD;EQrqGM;;IAEE,+BAA+B;ERuqGvC;EQrqGM;;IAEE,iCAAiC;ERuqGzC;EQrqGM;;IAEE,kCAAkC;ERuqG1C;EQrqGM;;IAEE,gCAAgC;ERuqGxC;EQtrGM;IAAwB,0BAA2B;ERyrGzD;EQxrGM;;IAEE,8BAA+B;ER0rGvC;EQxrGM;;IAEE,gCAAiC;ER0rGzC;EQxrGM;;IAEE,iCAAkC;ER0rG1C;EQxrGM;;IAEE,+BAAgC;ER0rGxC;EQzsGM;IAAwB,wBAA2B;ER4sGzD;EQ3sGM;;IAEE,4BAA+B;ER6sGvC;EQ3sGM;;IAEE,8BAAiC;ER6sGzC;EQ3sGM;;IAEE,+BAAkC;ER6sG1C;EQ3sGM;;IAEE,6BAAgC;ER6sGxC;EQ5tGM;IAAwB,0BAA2B;ER+tGzD;EQ9tGM;;IAEE,8BAA+B;ERguGvC;EQ9tGM;;IAEE,gCAAiC;ERguGzC;EQ9tGM;;IAEE,iCAAkC;ERguG1C;EQ9tGM;;IAEE,+BAAgC;ERguGxC;EQ/uGM;IAAwB,wBAA2B;ERkvGzD;EQjvGM;;IAEE,4BAA+B;ERmvGvC;EQjvGM;;IAEE,8BAAiC;ERmvGzC;EQjvGM;;IAEE,+BAAkC;ERmvG1C;EQjvGM;;IAEE,6BAAgC;ERmvGxC;EQ7uGE;IAAmB,uBAAuB;ERgvG5C;EQ/uGE;;IAEE,2BAA2B;ERivG/B;EQ/uGE;;IAEE,6BAA6B;ERivGjC;EQ/uGE;;IAEE,8BAA8B;ERivGlC;EQ/uGE;;IAEE,4BAA4B;ERivGhC;AACF","file":"bootstrap-grid.css","sourcesContent":["/*!\n * Bootstrap Grid v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n@import \"utilities/spacing\";\n","/*!\n * Bootstrap Grid v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n$table-dark-color: $white !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2}) !default;\n$input-height-inner-half: calc(#{$input-line-height * .5em} + #{$input-padding-y}) !default;\n$input-height-inner-quarter: calc(#{$input-line-height * .25em} + #{$input-padding-y / 2}) !default;\n\n$input-height: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2} + #{$input-height-border}) !default;\n$input-height-sm: calc(#{$input-line-height-sm * 1em} + #{$input-btn-padding-y-sm * 2} + #{$input-height-border}) !default;\n$input-height-lg: calc(#{$input-line-height-lg * 1em} + #{$input-btn-padding-y-lg * 2} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: calc(#{$custom-control-indicator-size} - #{$custom-control-indicator-border-width * 4}) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$custom-select-background: $custom-select-indicator no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: calc((1em + #{2 * $custom-select-padding-y}) * 3 / 4 + #{$custom-select-padding-x + $custom-select-indicator-padding}) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$form-feedback-icon-invalid-color}' viewBox='-2 -2 7 7'%3e%3cpath stroke='#{$form-feedback-icon-invalid-color}' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\"), \"#\", \"%23\") !default;\n\n$form-validation-states: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n"]} \ No newline at end of file diff --git a/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css new file mode 100644 index 0000000..e5e74f7 --- /dev/null +++ b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap Grid v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */html{box-sizing:border-box;-ms-overflow-style:scrollbar}*,::after,::before{box-sizing:inherit}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}} +/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git a/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map new file mode 100644 index 0000000..13e33db --- /dev/null +++ b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","dist/css/bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_spacing.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Grid v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n@import \"utilities/spacing\";\n","/*!\n * Bootstrap Grid v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n"]} \ No newline at end of file diff --git a/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css new file mode 100644 index 0000000..09cf986 --- /dev/null +++ b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css @@ -0,0 +1,331 @@ +/*! + * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */ +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: 0 !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; +} + +a:hover { + color: #0056b3; + text-decoration: underline; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: 0; +} + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg { + overflow: hidden; + vertical-align: middle; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +select { + word-wrap: normal; +} + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button:not(:disabled), +[type="button"]:not(:disabled), +[type="reset"]:not(:disabled), +[type="submit"]:not(:disabled) { + cursor: pointer; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; + cursor: pointer; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} +/*# sourceMappingURL=bootstrap-reboot.css.map */ \ No newline at end of file diff --git a/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map new file mode 100644 index 0000000..d0b0f02 --- /dev/null +++ b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-reboot.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_hover.scss"],"names":[],"mappings":"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","file":"bootstrap-reboot.css","sourcesContent":["/*!\n * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","/*!\n * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n$table-dark-color: $white !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2}) !default;\n$input-height-inner-half: calc(#{$input-line-height * .5em} + #{$input-padding-y}) !default;\n$input-height-inner-quarter: calc(#{$input-line-height * .25em} + #{$input-padding-y / 2}) !default;\n\n$input-height: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2} + #{$input-height-border}) !default;\n$input-height-sm: calc(#{$input-line-height-sm * 1em} + #{$input-btn-padding-y-sm * 2} + #{$input-height-border}) !default;\n$input-height-lg: calc(#{$input-line-height-lg * 1em} + #{$input-btn-padding-y-lg * 2} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: calc(#{$custom-control-indicator-size} - #{$custom-control-indicator-border-width * 4}) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$custom-select-background: $custom-select-indicator no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: calc((1em + #{2 * $custom-select-padding-y}) * 3 / 4 + #{$custom-select-padding-x + $custom-select-indicator-padding}) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$form-feedback-icon-invalid-color}' viewBox='-2 -2 7 7'%3e%3cpath stroke='#{$form-feedback-icon-invalid-color}' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\"), \"#\", \"%23\") !default;\n\n$form-validation-states: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file diff --git a/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css new file mode 100644 index 0000000..c804b3b --- /dev/null +++ b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css @@ -0,0 +1,8 @@ +/*! + * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} +/*# sourceMappingURL=bootstrap-reboot.min.css.map */ \ No newline at end of file diff --git a/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map new file mode 100644 index 0000000..73f4a19 --- /dev/null +++ b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","dist/css/bootstrap-reboot.css","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/mixins/_hover.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","/*!\n * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file diff --git a/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap.css b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap.css new file mode 100644 index 0000000..3f1a420 --- /dev/null +++ b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap.css @@ -0,0 +1,10039 @@ +/*! + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +:root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #fd7e14; + --yellow: #ffc107; + --green: #28a745; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #007bff; + --secondary: #6c757d; + --success: #28a745; + --info: #17a2b8; + --warning: #ffc107; + --danger: #dc3545; + --light: #f8f9fa; + --dark: #343a40; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: 0 !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -.5em; +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; +} + +a:hover { + color: #0056b3; + text-decoration: underline; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: 0; +} + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg { + overflow: hidden; + vertical-align: middle; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +select { + word-wrap: normal; +} + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button:not(:disabled), +[type="button"]:not(:disabled), +[type="reset"]:not(:disabled), +[type="submit"]:not(:disabled) { + cursor: pointer; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; + padding: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; + cursor: pointer; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +h1, .h1 { + font-size: 2.5rem; +} + +h2, .h2 { + font-size: 2rem; +} + +h3, .h3 { + font-size: 1.75rem; +} + +h4, .h4 { + font-size: 1.5rem; +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.2; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.small { + font-size: 80%; + font-weight: 400; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #6c757d; +} + +.blockquote-footer::before { + content: "\2014\00A0"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #6c757d; +} + +code { + font-size: 87.5%; + color: #e83e8c; + word-break: break-word; +} + +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; + border-radius: 0.2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; +} + +pre { + display: block; + font-size: 87.5%; + color: #212529; +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + padding-right: 15px; + padding-left: 15px; +} + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; +} + +.col-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.order-first { + -ms-flex-order: -1; + order: -1; +} + +.order-last { + -ms-flex-order: 13; + order: 13; +} + +.order-0 { + -ms-flex-order: 0; + order: 0; +} + +.order-1 { + -ms-flex-order: 1; + order: 1; +} + +.order-2 { + -ms-flex-order: 2; + order: 2; +} + +.order-3 { + -ms-flex-order: 3; + order: 3; +} + +.order-4 { + -ms-flex-order: 4; + order: 4; +} + +.order-5 { + -ms-flex-order: 5; + order: 5; +} + +.order-6 { + -ms-flex-order: 6; + order: 6; +} + +.order-7 { + -ms-flex-order: 7; + order: 7; +} + +.order-8 { + -ms-flex-order: 8; + order: 8; +} + +.order-9 { + -ms-flex-order: 9; + order: 9; +} + +.order-10 { + -ms-flex-order: 10; + order: 10; +} + +.order-11 { + -ms-flex-order: 11; + order: 11; +} + +.order-12 { + -ms-flex-order: 12; + order: 12; +} + +.offset-1 { + margin-left: 8.333333%; +} + +.offset-2 { + margin-left: 16.666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.333333%; +} + +.offset-5 { + margin-left: 41.666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.333333%; +} + +.offset-8 { + margin-left: 66.666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.333333%; +} + +.offset-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-sm-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + -ms-flex-order: -1; + order: -1; + } + .order-sm-last { + -ms-flex-order: 13; + order: 13; + } + .order-sm-0 { + -ms-flex-order: 0; + order: 0; + } + .order-sm-1 { + -ms-flex-order: 1; + order: 1; + } + .order-sm-2 { + -ms-flex-order: 2; + order: 2; + } + .order-sm-3 { + -ms-flex-order: 3; + order: 3; + } + .order-sm-4 { + -ms-flex-order: 4; + order: 4; + } + .order-sm-5 { + -ms-flex-order: 5; + order: 5; + } + .order-sm-6 { + -ms-flex-order: 6; + order: 6; + } + .order-sm-7 { + -ms-flex-order: 7; + order: 7; + } + .order-sm-8 { + -ms-flex-order: 8; + order: 8; + } + .order-sm-9 { + -ms-flex-order: 9; + order: 9; + } + .order-sm-10 { + -ms-flex-order: 10; + order: 10; + } + .order-sm-11 { + -ms-flex-order: 11; + order: 11; + } + .order-sm-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-md-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + -ms-flex-order: -1; + order: -1; + } + .order-md-last { + -ms-flex-order: 13; + order: 13; + } + .order-md-0 { + -ms-flex-order: 0; + order: 0; + } + .order-md-1 { + -ms-flex-order: 1; + order: 1; + } + .order-md-2 { + -ms-flex-order: 2; + order: 2; + } + .order-md-3 { + -ms-flex-order: 3; + order: 3; + } + .order-md-4 { + -ms-flex-order: 4; + order: 4; + } + .order-md-5 { + -ms-flex-order: 5; + order: 5; + } + .order-md-6 { + -ms-flex-order: 6; + order: 6; + } + .order-md-7 { + -ms-flex-order: 7; + order: 7; + } + .order-md-8 { + -ms-flex-order: 8; + order: 8; + } + .order-md-9 { + -ms-flex-order: 9; + order: 9; + } + .order-md-10 { + -ms-flex-order: 10; + order: 10; + } + .order-md-11 { + -ms-flex-order: 11; + order: 11; + } + .order-md-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-lg-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + -ms-flex-order: -1; + order: -1; + } + .order-lg-last { + -ms-flex-order: 13; + order: 13; + } + .order-lg-0 { + -ms-flex-order: 0; + order: 0; + } + .order-lg-1 { + -ms-flex-order: 1; + order: 1; + } + .order-lg-2 { + -ms-flex-order: 2; + order: 2; + } + .order-lg-3 { + -ms-flex-order: 3; + order: 3; + } + .order-lg-4 { + -ms-flex-order: 4; + order: 4; + } + .order-lg-5 { + -ms-flex-order: 5; + order: 5; + } + .order-lg-6 { + -ms-flex-order: 6; + order: 6; + } + .order-lg-7 { + -ms-flex-order: 7; + order: 7; + } + .order-lg-8 { + -ms-flex-order: 8; + order: 8; + } + .order-lg-9 { + -ms-flex-order: 9; + order: 9; + } + .order-lg-10 { + -ms-flex-order: 10; + order: 10; + } + .order-lg-11 { + -ms-flex-order: 11; + order: 11; + } + .order-lg-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-xl-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + -ms-flex-order: -1; + order: -1; + } + .order-xl-last { + -ms-flex-order: 13; + order: 13; + } + .order-xl-0 { + -ms-flex-order: 0; + order: 0; + } + .order-xl-1 { + -ms-flex-order: 1; + order: 1; + } + .order-xl-2 { + -ms-flex-order: 2; + order: 2; + } + .order-xl-3 { + -ms-flex-order: 3; + order: 3; + } + .order-xl-4 { + -ms-flex-order: 4; + order: 4; + } + .order-xl-5 { + -ms-flex-order: 5; + order: 5; + } + .order-xl-6 { + -ms-flex-order: 6; + order: 6; + } + .order-xl-7 { + -ms-flex-order: 7; + order: 7; + } + .order-xl-8 { + -ms-flex-order: 8; + order: 8; + } + .order-xl-9 { + -ms-flex-order: 9; + order: 9; + } + .order-xl-10 { + -ms-flex-order: 10; + order: 10; + } + .order-xl-11 { + -ms-flex-order: 11; + order: 11; + } + .order-xl-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.table { + width: 100%; + margin-bottom: 1rem; + color: #212529; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #dee2e6; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #dee2e6; +} + +.table tbody + tbody { + border-top: 2px solid #dee2e6; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #dee2e6; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #dee2e6; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-borderless th, +.table-borderless td, +.table-borderless thead th, +.table-borderless tbody + tbody { + border: 0; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.table-hover tbody tr:hover { + color: #212529; + background-color: rgba(0, 0, 0, 0.075); +} + +.table-primary, +.table-primary > th, +.table-primary > td { + background-color: #b8daff; +} + +.table-primary th, +.table-primary td, +.table-primary thead th, +.table-primary tbody + tbody { + border-color: #7abaff; +} + +.table-hover .table-primary:hover { + background-color: #9fcdff; +} + +.table-hover .table-primary:hover > td, +.table-hover .table-primary:hover > th { + background-color: #9fcdff; +} + +.table-secondary, +.table-secondary > th, +.table-secondary > td { + background-color: #d6d8db; +} + +.table-secondary th, +.table-secondary td, +.table-secondary thead th, +.table-secondary tbody + tbody { + border-color: #b3b7bb; +} + +.table-hover .table-secondary:hover { + background-color: #c8cbcf; +} + +.table-hover .table-secondary:hover > td, +.table-hover .table-secondary:hover > th { + background-color: #c8cbcf; +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #c3e6cb; +} + +.table-success th, +.table-success td, +.table-success thead th, +.table-success tbody + tbody { + border-color: #8fd19e; +} + +.table-hover .table-success:hover { + background-color: #b1dfbb; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #b1dfbb; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #bee5eb; +} + +.table-info th, +.table-info td, +.table-info thead th, +.table-info tbody + tbody { + border-color: #86cfda; +} + +.table-hover .table-info:hover { + background-color: #abdde5; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #abdde5; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #ffeeba; +} + +.table-warning th, +.table-warning td, +.table-warning thead th, +.table-warning tbody + tbody { + border-color: #ffdf7e; +} + +.table-hover .table-warning:hover { + background-color: #ffe8a1; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #ffe8a1; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f5c6cb; +} + +.table-danger th, +.table-danger td, +.table-danger thead th, +.table-danger tbody + tbody { + border-color: #ed969e; +} + +.table-hover .table-danger:hover { + background-color: #f1b0b7; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #f1b0b7; +} + +.table-light, +.table-light > th, +.table-light > td { + background-color: #fdfdfe; +} + +.table-light th, +.table-light td, +.table-light thead th, +.table-light tbody + tbody { + border-color: #fbfcfc; +} + +.table-hover .table-light:hover { + background-color: #ececf6; +} + +.table-hover .table-light:hover > td, +.table-hover .table-light:hover > th { + background-color: #ececf6; +} + +.table-dark, +.table-dark > th, +.table-dark > td { + background-color: #c6c8ca; +} + +.table-dark th, +.table-dark td, +.table-dark thead th, +.table-dark tbody + tbody { + border-color: #95999c; +} + +.table-hover .table-dark:hover { + background-color: #b9bbbe; +} + +.table-hover .table-dark:hover > td, +.table-hover .table-dark:hover > th { + background-color: #b9bbbe; +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.table .thead-dark th { + color: #fff; + background-color: #343a40; + border-color: #454d55; +} + +.table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.table-dark { + color: #fff; + background-color: #343a40; +} + +.table-dark th, +.table-dark td, +.table-dark thead th { + border-color: #454d55; +} + +.table-dark.table-bordered { + border: 0; +} + +.table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); +} + +.table-dark.table-hover tbody tr:hover { + color: #fff; + background-color: rgba(255, 255, 255, 0.075); +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-sm > .table-bordered { + border: 0; + } +} + +@media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-md > .table-bordered { + border: 0; + } +} + +@media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-lg > .table-bordered { + border: 0; + } +} + +@media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-xl > .table-bordered { + border: 0; + } +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +.table-responsive > .table-bordered { + border: 0; +} + +.form-control { + display: block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.form-control::-webkit-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; +} + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.form-control-file, +.form-control-range { + display: block; + width: 100%; +} + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; + line-height: 1.5; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; + line-height: 1.5; +} + +.form-control-plaintext { + display: block; + width: 100%; + padding-top: 0.375rem; + padding-bottom: 0.375rem; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.form-control-lg { + height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +select.form-control[size], select.form-control[multiple] { + height: auto; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 1rem; +} + +.form-text { + display: block; + margin-top: 0.25rem; +} + +.form-row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; +} + +.form-row > .col, +.form-row > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; +} + +.form-check { + position: relative; + display: block; + padding-left: 1.25rem; +} + +.form-check-input { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; +} + +.form-check-input:disabled ~ .form-check-label { + color: #6c757d; +} + +.form-check-label { + margin-bottom: 0; +} + +.form-check-inline { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; +} + +.form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #28a745; +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(40, 167, 69, 0.9); + border-radius: 0.25rem; +} + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #28a745; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .form-control:valid ~ .valid-feedback, +.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, +.form-control.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .custom-select:valid, .custom-select.is-valid { + border-color: #28a745; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .custom-select:valid ~ .valid-feedback, +.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback, +.custom-select.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control-file:valid ~ .valid-feedback, +.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback, +.form-control-file.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #28a745; +} + +.was-validated .form-check-input:valid ~ .valid-feedback, +.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, +.form-check-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { + color: #28a745; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + border-color: #28a745; +} + +.was-validated .custom-control-input:valid ~ .valid-feedback, +.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, +.custom-control-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + border-color: #34ce57; + background-color: #34ce57; +} + +.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #28a745; +} + +.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { + border-color: #28a745; +} + +.was-validated .custom-file-input:valid ~ .valid-feedback, +.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, +.custom-file-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #dc3545; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.25rem; +} + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .form-control:invalid ~ .invalid-feedback, +.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, +.form-control.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .custom-select:invalid, .custom-select.is-invalid { + border-color: #dc3545; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .custom-select:invalid ~ .invalid-feedback, +.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, +.custom-select.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control-file:invalid ~ .invalid-feedback, +.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback, +.form-control-file.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.was-validated .form-check-input:invalid ~ .invalid-feedback, +.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, +.form-check-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { + color: #dc3545; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + border-color: #dc3545; +} + +.was-validated .custom-control-input:invalid ~ .invalid-feedback, +.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, +.custom-control-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + border-color: #e4606d; + background-color: #e4606d; +} + +.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #dc3545; +} + +.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #dc3545; +} + +.was-validated .custom-file-input:invalid ~ .invalid-feedback, +.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, +.custom-file-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.form-inline { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; +} + +.form-inline .form-check { + width: 100%; +} + +@media (min-width: 576px) { + .form-inline label { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-plaintext { + display: inline-block; + } + .form-inline .input-group, + .form-inline .custom-select { + width: auto; + } + .form-inline .form-check { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + -ms-flex-negative: 0; + flex-shrink: 0; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + } + .form-inline .custom-control-label { + margin-bottom: 0; + } +} + +.btn { + display: inline-block; + font-weight: 400; + color: #212529; + text-align: center; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} + +.btn:hover { + color: #212529; + text-decoration: none; +} + +.btn:focus, .btn.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.btn.disabled, .btn:disabled { + opacity: 0.65; +} + +a.btn.disabled, +fieldset:disabled a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-primary:hover { + color: #fff; + background-color: #0069d9; + border-color: #0062cc; +} + +.btn-primary:focus, .btn-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #0062cc; + border-color: #005cbf; +} + +.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-secondary:hover { + color: #fff; + background-color: #5a6268; + border-color: #545b62; +} + +.btn-secondary:focus, .btn-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, +.show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #545b62; + border-color: #4e555b; +} + +.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); +} + +.btn-success { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-success:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34; +} + +.btn-success:focus, .btn-success.focus { + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); +} + +.btn-success.disabled, .btn-success:disabled { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #1e7e34; + border-color: #1c7430; +} + +.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); +} + +.btn-info { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-info:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b; +} + +.btn-info:focus, .btn-info.focus { + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); +} + +.btn-info.disabled, .btn-info:disabled { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, +.show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #117a8b; + border-color: #10707f; +} + +.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); +} + +.btn-warning { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-warning:hover { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; +} + +.btn-warning:focus, .btn-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); +} + +.btn-warning.disabled, .btn-warning:disabled { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, +.show > .btn-warning.dropdown-toggle { + color: #212529; + background-color: #d39e00; + border-color: #c69500; +} + +.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); +} + +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-danger:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130; +} + +.btn-danger:focus, .btn-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); +} + +.btn-danger.disabled, .btn-danger:disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #bd2130; + border-color: #b21f2d; +} + +.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); +} + +.btn-light { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-light:hover { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; +} + +.btn-light:focus, .btn-light.focus { + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); +} + +.btn-light.disabled, .btn-light:disabled { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, +.show > .btn-light.dropdown-toggle { + color: #212529; + background-color: #dae0e5; + border-color: #d3d9df; +} + +.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); +} + +.btn-dark { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-dark:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124; +} + +.btn-dark:focus, .btn-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); +} + +.btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, +.show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #1d2124; + border-color: #171a1d; +} + +.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); +} + +.btn-outline-primary { + color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #007bff; + background-color: transparent; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, +.show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-outline-secondary { + color: #6c757d; + border-color: #6c757d; +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #6c757d; + background-color: transparent; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, +.show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-outline-success { + color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:hover { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:focus, .btn-outline-success.focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-outline-success.disabled, .btn-outline-success:disabled { + color: #28a745; + background-color: transparent; +} + +.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, +.show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-outline-info { + color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:hover { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:focus, .btn-outline-info.focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-outline-info.disabled, .btn-outline-info:disabled { + color: #17a2b8; + background-color: transparent; +} + +.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, +.show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-outline-warning { + color: #ffc107; + border-color: #ffc107; +} + +.btn-outline-warning:hover { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-outline-warning:focus, .btn-outline-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #ffc107; + background-color: transparent; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, +.show > .btn-outline-warning.dropdown-toggle { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-outline-danger { + color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:focus, .btn-outline-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #dc3545; + background-color: transparent; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, +.show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-outline-light { + color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:hover { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:focus, .btn-outline-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-outline-light.disabled, .btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent; +} + +.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, +.show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-outline-dark { + color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:focus, .btn-outline-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #343a40; + background-color: transparent; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, +.show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-link { + font-weight: 400; + color: #007bff; + text-decoration: none; +} + +.btn-link:hover { + color: #0056b3; + text-decoration: underline; +} + +.btn-link:focus, .btn-link.focus { + text-decoration: underline; + box-shadow: none; +} + +.btn-link:disabled, .btn-link.disabled { + color: #6c757d; + pointer-events: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 0.5rem; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + transition: opacity 0.15s linear; +} + +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} + +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} + +.dropup, +.dropright, +.dropdown, +.dropleft { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; +} + +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-left { + right: auto; + left: 0; + } + .dropdown-menu-sm-right { + right: 0; + left: auto; + } +} + +@media (min-width: 768px) { + .dropdown-menu-md-left { + right: auto; + left: 0; + } + .dropdown-menu-md-right { + right: 0; + left: auto; + } +} + +@media (min-width: 992px) { + .dropdown-menu-lg-left { + right: auto; + left: 0; + } + .dropdown-menu-lg-right { + right: 0; + left: auto; + } +} + +@media (min-width: 1200px) { + .dropdown-menu-xl-left { + right: auto; + left: 0; + } + .dropdown-menu-xl-right { + right: 0; + left: auto; + } +} + +.dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} + +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-menu { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} + +.dropright .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.dropright .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-toggle::after { + vertical-align: 0; +} + +.dropleft .dropdown-menu { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} + +.dropleft .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.dropleft .dropdown-toggle::after { + display: none; +} + +.dropleft .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.dropleft .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { + right: auto; + bottom: auto; +} + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.dropdown-item:hover, .dropdown-item:focus { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; +} + +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #007bff; +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1.5rem; + color: #212529; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 1; +} + +.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} + +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} + +.dropdown-toggle-split::after, +.dropup .dropdown-toggle-split::after, +.dropright .dropdown-toggle-split::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: center; + justify-content: center; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} + +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} + +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.btn-group-toggle > .btn, +.btn-group-toggle > .btn-group > .btn { + margin-bottom: 0; +} + +.btn-group-toggle > .btn input[type="radio"], +.btn-group-toggle > .btn input[type="checkbox"], +.btn-group-toggle > .btn-group > .btn input[type="radio"], +.btn-group-toggle > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: stretch; + align-items: stretch; + width: 100%; +} + +.input-group > .form-control, +.input-group > .form-control-plaintext, +.input-group > .custom-select, +.input-group > .custom-file { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; +} + +.input-group > .form-control + .form-control, +.input-group > .form-control + .custom-select, +.input-group > .form-control + .custom-file, +.input-group > .form-control-plaintext + .form-control, +.input-group > .form-control-plaintext + .custom-select, +.input-group > .form-control-plaintext + .custom-file, +.input-group > .custom-select + .form-control, +.input-group > .custom-select + .custom-select, +.input-group > .custom-select + .custom-file, +.input-group > .custom-file + .form-control, +.input-group > .custom-file + .custom-select, +.input-group > .custom-file + .custom-file { + margin-left: -1px; +} + +.input-group > .form-control:focus, +.input-group > .custom-select:focus, +.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { + z-index: 3; +} + +.input-group > .custom-file .custom-file-input:focus { + z-index: 4; +} + +.input-group > .form-control:not(:last-child), +.input-group > .custom-select:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .form-control:not(:first-child), +.input-group > .custom-select:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group > .custom-file { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; +} + +.input-group > .custom-file:not(:last-child) .custom-file-label, +.input-group > .custom-file:not(:last-child) .custom-file-label::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .custom-file:not(:first-child) .custom-file-label { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group-prepend, +.input-group-append { + display: -ms-flexbox; + display: flex; +} + +.input-group-prepend .btn, +.input-group-append .btn { + position: relative; + z-index: 2; +} + +.input-group-prepend .btn:focus, +.input-group-append .btn:focus { + z-index: 3; +} + +.input-group-prepend .btn + .btn, +.input-group-prepend .btn + .input-group-text, +.input-group-prepend .input-group-text + .input-group-text, +.input-group-prepend .input-group-text + .btn, +.input-group-append .btn + .btn, +.input-group-append .btn + .input-group-text, +.input-group-append .input-group-text + .input-group-text, +.input-group-append .input-group-text + .btn { + margin-left: -1px; +} + +.input-group-prepend { + margin-right: -1px; +} + +.input-group-append { + margin-left: -1px; +} + +.input-group-text { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.input-group-text input[type="radio"], +.input-group-text input[type="checkbox"] { + margin-top: 0; +} + +.input-group-lg > .form-control:not(textarea), +.input-group-lg > .custom-select { + height: calc(1.5em + 1rem + 2px); +} + +.input-group-lg > .form-control, +.input-group-lg > .custom-select, +.input-group-lg > .input-group-prepend > .input-group-text, +.input-group-lg > .input-group-append > .input-group-text, +.input-group-lg > .input-group-prepend > .btn, +.input-group-lg > .input-group-append > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.input-group-sm > .form-control:not(textarea), +.input-group-sm > .custom-select { + height: calc(1.5em + 0.5rem + 2px); +} + +.input-group-sm > .form-control, +.input-group-sm > .custom-select, +.input-group-sm > .input-group-prepend > .input-group-text, +.input-group-sm > .input-group-append > .input-group-text, +.input-group-sm > .input-group-prepend > .btn, +.input-group-sm > .input-group-append > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.input-group-lg > .custom-select, +.input-group-sm > .custom-select { + padding-right: 1.75rem; +} + +.input-group > .input-group-prepend > .btn, +.input-group > .input-group-prepend > .input-group-text, +.input-group > .input-group-append:not(:last-child) > .btn, +.input-group > .input-group-append:not(:last-child) > .input-group-text, +.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .input-group-append > .btn, +.input-group > .input-group-append > .input-group-text, +.input-group > .input-group-prepend:not(:first-child) > .btn, +.input-group > .input-group-prepend:not(:first-child) > .input-group-text, +.input-group > .input-group-prepend:first-child > .btn:not(:first-child), +.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.custom-control { + position: relative; + display: block; + min-height: 1.5rem; + padding-left: 1.5rem; +} + +.custom-control-inline { + display: -ms-inline-flexbox; + display: inline-flex; + margin-right: 1rem; +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + border-color: #007bff; + background-color: #007bff; +} + +.custom-control-input:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #80bdff; +} + +.custom-control-input:not(:disabled):active ~ .custom-control-label::before { + color: #fff; + background-color: #b3d7ff; + border-color: #b3d7ff; +} + +.custom-control-input:disabled ~ .custom-control-label { + color: #6c757d; +} + +.custom-control-input:disabled ~ .custom-control-label::before { + background-color: #e9ecef; +} + +.custom-control-label { + position: relative; + margin-bottom: 0; + vertical-align: top; +} + +.custom-control-label::before { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + background-color: #fff; + border: #adb5bd solid 1px; +} + +.custom-control-label::after { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ""; + background: no-repeat 50% / 50% 50%; +} + +.custom-checkbox .custom-control-label::before { + border-radius: 0.25rem; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + border-color: #007bff; + background-color: #007bff; +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); +} + +.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-radio .custom-control-label::before { + border-radius: 50%; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-switch { + padding-left: 2.25rem; +} + +.custom-switch .custom-control-label::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; +} + +.custom-switch .custom-control-label::after { + top: calc(0.25rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #adb5bd; + border-radius: 0.5rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + transition: none; + } +} + +.custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + -webkit-transform: translateX(0.75rem); + transform: translateX(0.75rem); +} + +.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-select { + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-select:focus { + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.custom-select[multiple], .custom-select[size]:not([size="1"]) { + height: auto; + padding-right: 0.75rem; + background-image: none; +} + +.custom-select:disabled { + color: #6c757d; + background-color: #e9ecef; +} + +.custom-select::-ms-expand { + display: none; +} + +.custom-select-sm { + height: calc(1.5em + 0.5rem + 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; +} + +.custom-select-lg { + height: calc(1.5em + 1rem + 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; +} + +.custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin-bottom: 0; +} + +.custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin: 0; + opacity: 0; +} + +.custom-file-input:focus ~ .custom-file-label { + border-color: #80bdff; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-file-input:disabled ~ .custom-file-label { + background-color: #e9ecef; +} + +.custom-file-input:lang(en) ~ .custom-file-label::after { + content: "Browse"; +} + +.custom-file-input ~ .custom-file-label[data-browse]::after { + content: attr(data-browse); +} + +.custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: calc(1.5em + 0.75rem); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + content: "Browse"; + background-color: #e9ecef; + border-left: inherit; + border-radius: 0 0.25rem 0.25rem 0; +} + +.custom-range { + width: 100%; + height: calc(1rem + 0.4rem); + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-range:focus { + outline: none; +} + +.custom-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range::-moz-focus-outer { + border: 0; +} + +.custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-webkit-slider-thumb { + transition: none; + } +} + +.custom-range::-webkit-slider-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-moz-range-thumb { + transition: none; + } +} + +.custom-range::-moz-range-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.custom-range::-ms-thumb { + width: 1rem; + height: 1rem; + margin-top: 0; + margin-right: 0.2rem; + margin-left: 0.2rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-ms-thumb { + transition: none; + } +} + +.custom-range::-ms-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-ms-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: 0.5rem; +} + +.custom-range::-ms-fill-lower { + background-color: #dee2e6; + border-radius: 1rem; +} + +.custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; + border-radius: 1rem; +} + +.custom-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} + +.custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; +} + +.custom-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.custom-range:disabled::-moz-range-track { + cursor: default; +} + +.custom-range:disabled::-ms-thumb { + background-color: #adb5bd; +} + +.custom-control-label::before, +.custom-file-label, +.custom-select { + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + transition: none; + } +} + +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5rem 1rem; +} + +.nav-link:hover, .nav-link:focus { + text-decoration: none; +} + +.nav-link.disabled { + color: #6c757d; + pointer-events: none; + cursor: default; +} + +.nav-tabs { + border-bottom: 1px solid #dee2e6; +} + +.nav-tabs .nav-item { + margin-bottom: -1px; +} + +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; +} + +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills .nav-link { + border-radius: 0.25rem; +} + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #007bff; +} + +.nav-fill .nav-item { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; +} + +.nav-justified .nav-item { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 0.5rem 1rem; +} + +.navbar > .container, +.navbar > .container-fluid { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.navbar-brand { + display: inline-block; + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; +} + +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; +} + +.navbar-nav { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} + +.navbar-nav .dropdown-menu { + position: static; + float: none; +} + +.navbar-text { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-align: center; + align-items: center; +} + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.navbar-toggler:hover, .navbar-toggler:focus { + text-decoration: none; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; +} + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-expand-sm { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } +} + +@media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .navbar-expand-md { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-md .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } +} + +@media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 992px) { + .navbar-expand-lg { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-lg .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } +} + +@media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1200px) { + .navbar-expand-xl { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-xl .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } +} + +.navbar-expand { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid { + padding-right: 0; + padding-left: 0; +} + +.navbar-expand .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; +} + +.navbar-expand .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; +} + +.navbar-expand .navbar-toggler { + display: none; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} + +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-text a { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-dark .navbar-brand { + color: #fff; +} + +.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fff; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.75); +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-text a { + color: #fff; +} + +.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { + color: #fff; +} + +.card { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} + +.card > hr { + margin-right: 0; + margin-left: 0; +} + +.card > .list-group:first-child .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem; +} + +.card-title { + margin-bottom: 0.75rem; +} + +.card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} + +.card-header + .list-group .list-group-item:first-child { + border-top: 0; +} + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img { + width: 100%; + border-radius: calc(0.25rem - 1px); +} + +.card-img-top { + width: 100%; + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} + +.card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +.card-deck { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.card-deck .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-deck { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; + } + .card-deck .card { + display: -ms-flexbox; + display: flex; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -ms-flex-direction: column; + flex-direction: column; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; + } +} + +.card-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.card-group > .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-group { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-group > .card { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.card-columns .card { + margin-bottom: 0.75rem; +} + +@media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + } + .card-columns .card { + display: inline-block; + width: 100%; + } +} + +.accordion > .card { + overflow: hidden; +} + +.accordion > .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; +} + +.accordion > .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0; +} + +.accordion > .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.accordion > .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.accordion > .card .card-header { + margin-bottom: -1px; +} + +.breadcrumb { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} + +.breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + color: #6c757d; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #6c757d; +} + +.pagination { + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; +} + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #007bff; + background-color: #fff; + border: 1px solid #dee2e6; +} + +.page-link:hover { + z-index: 2; + color: #0056b3; + text-decoration: none; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.page-link:focus { + z-index: 2; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} + +.page-item.active .page-link { + z-index: 1; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; +} + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; +} + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; +} + +.badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .badge { + transition: none; + } +} + +a.badge:hover, a.badge:focus { + text-decoration: none; +} + +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; +} + +.badge-primary { + color: #fff; + background-color: #007bff; +} + +a.badge-primary:hover, a.badge-primary:focus { + color: #fff; + background-color: #0062cc; +} + +a.badge-primary:focus, a.badge-primary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.badge-secondary { + color: #fff; + background-color: #6c757d; +} + +a.badge-secondary:hover, a.badge-secondary:focus { + color: #fff; + background-color: #545b62; +} + +a.badge-secondary:focus, a.badge-secondary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.badge-success { + color: #fff; + background-color: #28a745; +} + +a.badge-success:hover, a.badge-success:focus { + color: #fff; + background-color: #1e7e34; +} + +a.badge-success:focus, a.badge-success.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.badge-info { + color: #fff; + background-color: #17a2b8; +} + +a.badge-info:hover, a.badge-info:focus { + color: #fff; + background-color: #117a8b; +} + +a.badge-info:focus, a.badge-info.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.badge-warning { + color: #212529; + background-color: #ffc107; +} + +a.badge-warning:hover, a.badge-warning:focus { + color: #212529; + background-color: #d39e00; +} + +a.badge-warning:focus, a.badge-warning.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.badge-danger { + color: #fff; + background-color: #dc3545; +} + +a.badge-danger:hover, a.badge-danger:focus { + color: #fff; + background-color: #bd2130; +} + +a.badge-danger:focus, a.badge-danger.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.badge-light { + color: #212529; + background-color: #f8f9fa; +} + +a.badge-light:hover, a.badge-light:focus { + color: #212529; + background-color: #dae0e5; +} + +a.badge-light:focus, a.badge-light.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.badge-dark { + color: #fff; + background-color: #343a40; +} + +a.badge-dark:hover, a.badge-dark:focus { + color: #fff; + background-color: #1d2124; +} + +a.badge-dark:focus, a.badge-dark.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: 0.3rem; +} + +@media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} + +.alert { + position: relative; + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; +} + +.alert-dismissible { + padding-right: 4rem; +} + +.alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; +} + +.alert-primary { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff; +} + +.alert-primary hr { + border-top-color: #9fcdff; +} + +.alert-primary .alert-link { + color: #002752; +} + +.alert-secondary { + color: #383d41; + background-color: #e2e3e5; + border-color: #d6d8db; +} + +.alert-secondary hr { + border-top-color: #c8cbcf; +} + +.alert-secondary .alert-link { + color: #202326; +} + +.alert-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb; +} + +.alert-success hr { + border-top-color: #b1dfbb; +} + +.alert-success .alert-link { + color: #0b2e13; +} + +.alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb; +} + +.alert-info hr { + border-top-color: #abdde5; +} + +.alert-info .alert-link { + color: #062c33; +} + +.alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba; +} + +.alert-warning hr { + border-top-color: #ffe8a1; +} + +.alert-warning .alert-link { + color: #533f03; +} + +.alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; +} + +.alert-danger hr { + border-top-color: #f1b0b7; +} + +.alert-danger .alert-link { + color: #491217; +} + +.alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe; +} + +.alert-light hr { + border-top-color: #ececf6; +} + +.alert-light .alert-link { + color: #686868; +} + +.alert-dark { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca; +} + +.alert-dark hr { + border-top-color: #b9bbbe; +} + +.alert-dark .alert-link { + color: #040505; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: -ms-flexbox; + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.progress-bar { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #007bff; + transition: width 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; +} + +@media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + -webkit-animation: none; + animation: none; + } +} + +.media { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; +} + +.media-body { + -ms-flex: 1; + flex: 1; +} + +.list-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; +} + +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} + +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef; +} + +.list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: #fff; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.list-group-horizontal { + -ms-flex-direction: row; + flex-direction: row; +} + +.list-group-horizontal .list-group-item { + margin-right: -1px; + margin-bottom: 0; +} + +.list-group-horizontal .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; +} + +.list-group-horizontal .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-sm .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-sm .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-sm .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } +} + +@media (min-width: 768px) { + .list-group-horizontal-md { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-md .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-md .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-md .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } +} + +@media (min-width: 992px) { + .list-group-horizontal-lg { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-lg .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-lg .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-lg .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } +} + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-xl .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-xl .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xl .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.list-group-flush .list-group-item:last-child { + margin-bottom: -1px; +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0; +} + +.list-group-flush:last-child .list-group-item:last-child { + margin-bottom: 0; + border-bottom: 0; +} + +.list-group-item-primary { + color: #004085; + background-color: #b8daff; +} + +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #004085; + background-color: #9fcdff; +} + +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #004085; + border-color: #004085; +} + +.list-group-item-secondary { + color: #383d41; + background-color: #d6d8db; +} + +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #383d41; + background-color: #c8cbcf; +} + +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #383d41; + border-color: #383d41; +} + +.list-group-item-success { + color: #155724; + background-color: #c3e6cb; +} + +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #155724; + background-color: #b1dfbb; +} + +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #155724; + border-color: #155724; +} + +.list-group-item-info { + color: #0c5460; + background-color: #bee5eb; +} + +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #0c5460; + background-color: #abdde5; +} + +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460; +} + +.list-group-item-warning { + color: #856404; + background-color: #ffeeba; +} + +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #856404; + background-color: #ffe8a1; +} + +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #856404; + border-color: #856404; +} + +.list-group-item-danger { + color: #721c24; + background-color: #f5c6cb; +} + +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #721c24; + background-color: #f1b0b7; +} + +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #721c24; + border-color: #721c24; +} + +.list-group-item-light { + color: #818182; + background-color: #fdfdfe; +} + +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #818182; + background-color: #ececf6; +} + +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #818182; + border-color: #818182; +} + +.list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca; +} + +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #1b1e21; + background-color: #b9bbbe; +} + +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21; +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; +} + +.close:hover { + color: #000; + text-decoration: none; +} + +.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + opacity: .75; +} + +button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +a.close.disabled { + pointer-events: none; +} + +.toast { + max-width: 350px; + overflow: hidden; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + opacity: 0; + border-radius: 0.25rem; +} + +.toast:not(:last-child) { + margin-bottom: 0.75rem; +} + +.toast.showing { + opacity: 1; +} + +.toast.show { + display: block; + opacity: 1; +} + +.toast.hide { + display: none; +} + +.toast-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 0.25rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.toast-body { + padding: 0.75rem; +} + +.modal-open { + overflow: hidden; +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + display: none; + width: 100%; + height: 100%; + overflow: hidden; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} + +.modal.fade .modal-dialog { + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; + -webkit-transform: translate(0, -50px); + transform: translate(0, -50px); +} + +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} + +.modal.show .modal-dialog { + -webkit-transform: none; + transform: none; +} + +.modal-dialog-scrollable { + display: -ms-flexbox; + display: flex; + max-height: calc(100% - 1rem); +} + +.modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 1rem); + overflow: hidden; +} + +.modal-dialog-scrollable .modal-header, +.modal-dialog-scrollable .modal-footer { + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + min-height: calc(100% - 1rem); +} + +.modal-dialog-centered::before { + display: block; + height: calc(100vh - 1rem); + content: ""; +} + +.modal-dialog-centered.modal-dialog-scrollable { + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + height: 100%; +} + +.modal-dialog-centered.modal-dialog-scrollable .modal-content { + max-height: none; +} + +.modal-dialog-centered.modal-dialog-scrollable::before { + content: none; +} + +.modal-content { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid #dee2e6; + border-top-left-radius: 0.3rem; + border-top-right-radius: 0.3rem; +} + +.modal-header .close { + padding: 1rem 1rem; + margin: -1rem -1rem -1rem auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1rem; +} + +.modal-footer { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 1rem; + border-top: 1px solid #dee2e6; + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} + +.modal-footer > :not(:first-child) { + margin-left: .25rem; +} + +.modal-footer > :not(:last-child) { + margin-right: .25rem; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-scrollable { + max-height: calc(100% - 3.5rem); + } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 3.5rem); + } + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + .modal-dialog-centered::before { + height: calc(100vh - 3.5rem); + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + max-width: 800px; + } +} + +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} + +.tooltip .arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { + padding: 0.4rem 0; +} + +.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; +} + +.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { + padding: 0 0.4rem; +} + +.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { + padding: 0.4rem 0; +} + +.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; +} + +.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { + padding: 0 0.4rem; +} + +.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} + +.popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0.3rem; +} + +.popover .arrow::before, .popover .arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-popover-top, .bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.5rem; +} + +.bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { + bottom: calc((0.5rem + 1px) * -1); +} + +.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; +} + +.bs-popover-right, .bs-popover-auto[x-placement^="right"] { + margin-left: 0.5rem; +} + +.bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { + left: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; +} + +.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.5rem; +} + +.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { + top: calc((0.5rem + 1px) * -1); +} + +.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; +} + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f7f7f7; +} + +.bs-popover-left, .bs-popover-auto[x-placement^="left"] { + margin-right: 0.5rem; +} + +.bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { + right: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; +} + +.popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} + +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 0.5rem 0.75rem; + color: #212529; +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + -ms-touch-action: pan-y; + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: -webkit-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-left), +.active.carousel-item-right { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-right), +.active.carousel-item-left { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + -webkit-transform: none; + transform: none; +} + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-left, +.carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; + opacity: 1; +} + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-right { + z-index: 0; + opacity: 0; + transition: 0s 0.6s opacity; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; + transition: opacity 0.15s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; + } +} + +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: no-repeat 50% / 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 15; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators li { + box-sizing: content-box; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: .5; + transition: opacity 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-indicators li { + transition: none; + } +} + +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} + +@-webkit-keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: spinner-border .75s linear infinite; + animation: spinner-border .75s linear infinite; +} + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + } +} + +@keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + } +} + +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: spinner-grow .75s linear infinite; + animation: spinner-grow .75s linear infinite; +} + +.spinner-grow-sm { + width: 1rem; + height: 1rem; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.bg-primary { + background-color: #007bff !important; +} + +a.bg-primary:hover, a.bg-primary:focus, +button.bg-primary:hover, +button.bg-primary:focus { + background-color: #0062cc !important; +} + +.bg-secondary { + background-color: #6c757d !important; +} + +a.bg-secondary:hover, a.bg-secondary:focus, +button.bg-secondary:hover, +button.bg-secondary:focus { + background-color: #545b62 !important; +} + +.bg-success { + background-color: #28a745 !important; +} + +a.bg-success:hover, a.bg-success:focus, +button.bg-success:hover, +button.bg-success:focus { + background-color: #1e7e34 !important; +} + +.bg-info { + background-color: #17a2b8 !important; +} + +a.bg-info:hover, a.bg-info:focus, +button.bg-info:hover, +button.bg-info:focus { + background-color: #117a8b !important; +} + +.bg-warning { + background-color: #ffc107 !important; +} + +a.bg-warning:hover, a.bg-warning:focus, +button.bg-warning:hover, +button.bg-warning:focus { + background-color: #d39e00 !important; +} + +.bg-danger { + background-color: #dc3545 !important; +} + +a.bg-danger:hover, a.bg-danger:focus, +button.bg-danger:hover, +button.bg-danger:focus { + background-color: #bd2130 !important; +} + +.bg-light { + background-color: #f8f9fa !important; +} + +a.bg-light:hover, a.bg-light:focus, +button.bg-light:hover, +button.bg-light:focus { + background-color: #dae0e5 !important; +} + +.bg-dark { + background-color: #343a40 !important; +} + +a.bg-dark:hover, a.bg-dark:focus, +button.bg-dark:hover, +button.bg-dark:focus { + background-color: #1d2124 !important; +} + +.bg-white { + background-color: #fff !important; +} + +.bg-transparent { + background-color: transparent !important; +} + +.border { + border: 1px solid #dee2e6 !important; +} + +.border-top { + border-top: 1px solid #dee2e6 !important; +} + +.border-right { + border-right: 1px solid #dee2e6 !important; +} + +.border-bottom { + border-bottom: 1px solid #dee2e6 !important; +} + +.border-left { + border-left: 1px solid #dee2e6 !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-right-0 { + border-right: 0 !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-left-0 { + border-left: 0 !important; +} + +.border-primary { + border-color: #007bff !important; +} + +.border-secondary { + border-color: #6c757d !important; +} + +.border-success { + border-color: #28a745 !important; +} + +.border-info { + border-color: #17a2b8 !important; +} + +.border-warning { + border-color: #ffc107 !important; +} + +.border-danger { + border-color: #dc3545 !important; +} + +.border-light { + border-color: #f8f9fa !important; +} + +.border-dark { + border-color: #343a40 !important; +} + +.border-white { + border-color: #fff !important; +} + +.rounded-sm { + border-radius: 0.2rem !important; +} + +.rounded { + border-radius: 0.25rem !important; +} + +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; +} + +.rounded-right { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-left { + border-top-left-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-lg { + border-radius: 0.3rem !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-pill { + border-radius: 50rem !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: -ms-flexbox !important; + display: flex !important; +} + +.d-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media print { + .d-print-none { + display: none !important; + } + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-print-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; +} + +.embed-responsive::before { + display: block; + content: ""; +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9::before { + padding-top: 42.857143%; +} + +.embed-responsive-16by9::before { + padding-top: 56.25%; +} + +.embed-responsive-4by3::before { + padding-top: 75%; +} + +.embed-responsive-1by1::before { + padding-top: 100%; +} + +.flex-row { + -ms-flex-direction: row !important; + flex-direction: row !important; +} + +.flex-column { + -ms-flex-direction: column !important; + flex-direction: column !important; +} + +.flex-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; +} + +.flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; +} + +.flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; +} + +.flex-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; +} + +.flex-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; +} + +.flex-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; +} + +.flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; +} + +.justify-content-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; +} + +.justify-content-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; +} + +.justify-content-center { + -ms-flex-pack: center !important; + justify-content: center !important; +} + +.justify-content-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; +} + +.justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; +} + +.align-items-start { + -ms-flex-align: start !important; + align-items: flex-start !important; +} + +.align-items-end { + -ms-flex-align: end !important; + align-items: flex-end !important; +} + +.align-items-center { + -ms-flex-align: center !important; + align-items: center !important; +} + +.align-items-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; +} + +.align-items-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; +} + +.align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; +} + +.align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; +} + +.align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; +} + +.align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; +} + +.align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; +} + +.align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; +} + +.align-self-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; +} + +.align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; +} + +.align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; +} + +.align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; +} + +.align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; +} + +.align-self-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-sm-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-sm-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-md-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-md-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-md-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-lg-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-lg-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-xl-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-xl-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} + +.float-none { + float: none !important; +} + +@media (min-width: 576px) { + .float-sm-left { + float: left !important; + } + .float-sm-right { + float: right !important; + } + .float-sm-none { + float: none !important; + } +} + +@media (min-width: 768px) { + .float-md-left { + float: left !important; + } + .float-md-right { + float: right !important; + } + .float-md-none { + float: none !important; + } +} + +@media (min-width: 992px) { + .float-lg-left { + float: left !important; + } + .float-lg-right { + float: right !important; + } + .float-lg-none { + float: none !important; + } +} + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important; + } + .float-xl-right { + float: right !important; + } + .float-xl-none { + float: none !important; + } +} + +.overflow-auto { + overflow: auto !important; +} + +.overflow-hidden { + overflow: hidden !important; +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +@supports ((position: -webkit-sticky) or (position: sticky)) { + .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; +} + +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.min-vw-100 { + min-width: 100vw !important; +} + +.min-vh-100 { + min-height: 100vh !important; +} + +.vw-100 { + width: 100vw !important; +} + +.vh-100 { + height: 100vh !important; +} + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + pointer-events: auto; + content: ""; + background-color: rgba(0, 0, 0, 0); +} + +.m-0 { + margin: 0 !important; +} + +.mt-0, +.my-0 { + margin-top: 0 !important; +} + +.mr-0, +.mx-0 { + margin-right: 0 !important; +} + +.mb-0, +.my-0 { + margin-bottom: 0 !important; +} + +.ml-0, +.mx-0 { + margin-left: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.mt-1, +.my-1 { + margin-top: 0.25rem !important; +} + +.mr-1, +.mx-1 { + margin-right: 0.25rem !important; +} + +.mb-1, +.my-1 { + margin-bottom: 0.25rem !important; +} + +.ml-1, +.mx-1 { + margin-left: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.mt-2, +.my-2 { + margin-top: 0.5rem !important; +} + +.mr-2, +.mx-2 { + margin-right: 0.5rem !important; +} + +.mb-2, +.my-2 { + margin-bottom: 0.5rem !important; +} + +.ml-2, +.mx-2 { + margin-left: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.mt-3, +.my-3 { + margin-top: 1rem !important; +} + +.mr-3, +.mx-3 { + margin-right: 1rem !important; +} + +.mb-3, +.my-3 { + margin-bottom: 1rem !important; +} + +.ml-3, +.mx-3 { + margin-left: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.mt-4, +.my-4 { + margin-top: 1.5rem !important; +} + +.mr-4, +.mx-4 { + margin-right: 1.5rem !important; +} + +.mb-4, +.my-4 { + margin-bottom: 1.5rem !important; +} + +.ml-4, +.mx-4 { + margin-left: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.mt-5, +.my-5 { + margin-top: 3rem !important; +} + +.mr-5, +.mx-5 { + margin-right: 3rem !important; +} + +.mb-5, +.my-5 { + margin-bottom: 3rem !important; +} + +.ml-5, +.mx-5 { + margin-left: 3rem !important; +} + +.p-0 { + padding: 0 !important; +} + +.pt-0, +.py-0 { + padding-top: 0 !important; +} + +.pr-0, +.px-0 { + padding-right: 0 !important; +} + +.pb-0, +.py-0 { + padding-bottom: 0 !important; +} + +.pl-0, +.px-0 { + padding-left: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.pt-1, +.py-1 { + padding-top: 0.25rem !important; +} + +.pr-1, +.px-1 { + padding-right: 0.25rem !important; +} + +.pb-1, +.py-1 { + padding-bottom: 0.25rem !important; +} + +.pl-1, +.px-1 { + padding-left: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.pt-2, +.py-2 { + padding-top: 0.5rem !important; +} + +.pr-2, +.px-2 { + padding-right: 0.5rem !important; +} + +.pb-2, +.py-2 { + padding-bottom: 0.5rem !important; +} + +.pl-2, +.px-2 { + padding-left: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.pt-3, +.py-3 { + padding-top: 1rem !important; +} + +.pr-3, +.px-3 { + padding-right: 1rem !important; +} + +.pb-3, +.py-3 { + padding-bottom: 1rem !important; +} + +.pl-3, +.px-3 { + padding-left: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.pt-4, +.py-4 { + padding-top: 1.5rem !important; +} + +.pr-4, +.px-4 { + padding-right: 1.5rem !important; +} + +.pb-4, +.py-4 { + padding-bottom: 1.5rem !important; +} + +.pl-4, +.px-4 { + padding-left: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.pt-5, +.py-5 { + padding-top: 3rem !important; +} + +.pr-5, +.px-5 { + padding-right: 3rem !important; +} + +.pb-5, +.py-5 { + padding-bottom: 3rem !important; +} + +.pl-5, +.px-5 { + padding-left: 3rem !important; +} + +.m-n1 { + margin: -0.25rem !important; +} + +.mt-n1, +.my-n1 { + margin-top: -0.25rem !important; +} + +.mr-n1, +.mx-n1 { + margin-right: -0.25rem !important; +} + +.mb-n1, +.my-n1 { + margin-bottom: -0.25rem !important; +} + +.ml-n1, +.mx-n1 { + margin-left: -0.25rem !important; +} + +.m-n2 { + margin: -0.5rem !important; +} + +.mt-n2, +.my-n2 { + margin-top: -0.5rem !important; +} + +.mr-n2, +.mx-n2 { + margin-right: -0.5rem !important; +} + +.mb-n2, +.my-n2 { + margin-bottom: -0.5rem !important; +} + +.ml-n2, +.mx-n2 { + margin-left: -0.5rem !important; +} + +.m-n3 { + margin: -1rem !important; +} + +.mt-n3, +.my-n3 { + margin-top: -1rem !important; +} + +.mr-n3, +.mx-n3 { + margin-right: -1rem !important; +} + +.mb-n3, +.my-n3 { + margin-bottom: -1rem !important; +} + +.ml-n3, +.mx-n3 { + margin-left: -1rem !important; +} + +.m-n4 { + margin: -1.5rem !important; +} + +.mt-n4, +.my-n4 { + margin-top: -1.5rem !important; +} + +.mr-n4, +.mx-n4 { + margin-right: -1.5rem !important; +} + +.mb-n4, +.my-n4 { + margin-bottom: -1.5rem !important; +} + +.ml-n4, +.mx-n4 { + margin-left: -1.5rem !important; +} + +.m-n5 { + margin: -3rem !important; +} + +.mt-n5, +.my-n5 { + margin-top: -3rem !important; +} + +.mr-n5, +.mx-n5 { + margin-right: -3rem !important; +} + +.mb-n5, +.my-n5 { + margin-bottom: -3rem !important; +} + +.ml-n5, +.mx-n5 { + margin-left: -3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mt-auto, +.my-auto { + margin-top: auto !important; +} + +.mr-auto, +.mx-auto { + margin-right: auto !important; +} + +.mb-auto, +.my-auto { + margin-bottom: auto !important; +} + +.ml-auto, +.mx-auto { + margin-left: auto !important; +} + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; + } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .mt-sm-3, + .my-sm-3 { + margin-top: 1rem !important; + } + .mr-sm-3, + .mx-sm-3 { + margin-right: 1rem !important; + } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 1rem !important; + } + .ml-sm-3, + .mx-sm-3 { + margin-left: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .mt-sm-4, + .my-sm-4 { + margin-top: 1.5rem !important; + } + .mr-sm-4, + .mx-sm-4 { + margin-right: 1.5rem !important; + } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 1.5rem !important; + } + .ml-sm-4, + .mx-sm-4 { + margin-left: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .mt-sm-5, + .my-sm-5 { + margin-top: 3rem !important; + } + .mr-sm-5, + .mx-sm-5 { + margin-right: 3rem !important; + } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 3rem !important; + } + .ml-sm-5, + .mx-sm-5 { + margin-left: 3rem !important; + } + .p-sm-0 { + padding: 0 !important; + } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .pt-sm-3, + .py-sm-3 { + padding-top: 1rem !important; + } + .pr-sm-3, + .px-sm-3 { + padding-right: 1rem !important; + } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 1rem !important; + } + .pl-sm-3, + .px-sm-3 { + padding-left: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .pt-sm-4, + .py-sm-4 { + padding-top: 1.5rem !important; + } + .pr-sm-4, + .px-sm-4 { + padding-right: 1.5rem !important; + } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 1.5rem !important; + } + .pl-sm-4, + .px-sm-4 { + padding-left: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .pt-sm-5, + .py-sm-5 { + padding-top: 3rem !important; + } + .pr-sm-5, + .px-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 3rem !important; + } + .pl-sm-5, + .px-sm-5 { + padding-left: 3rem !important; + } + .m-sm-n1 { + margin: -0.25rem !important; + } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; + } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; + } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; + } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; + } + .m-sm-n2 { + margin: -0.5rem !important; + } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; + } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; + } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; + } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.5rem !important; + } + .m-sm-n3 { + margin: -1rem !important; + } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -1rem !important; + } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -1rem !important; + } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -1rem !important; + } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -1rem !important; + } + .m-sm-n4 { + margin: -1.5rem !important; + } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -1.5rem !important; + } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -1.5rem !important; + } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -1.5rem !important; + } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -1.5rem !important; + } + .m-sm-n5 { + margin: -3rem !important; + } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -3rem !important; + } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -3rem !important; + } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -3rem !important; + } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; + } +} + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; + } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; + } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; + } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2, + .mx-md-2 { + margin-left: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .mt-md-3, + .my-md-3 { + margin-top: 1rem !important; + } + .mr-md-3, + .mx-md-3 { + margin-right: 1rem !important; + } + .mb-md-3, + .my-md-3 { + margin-bottom: 1rem !important; + } + .ml-md-3, + .mx-md-3 { + margin-left: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .mt-md-4, + .my-md-4 { + margin-top: 1.5rem !important; + } + .mr-md-4, + .mx-md-4 { + margin-right: 1.5rem !important; + } + .mb-md-4, + .my-md-4 { + margin-bottom: 1.5rem !important; + } + .ml-md-4, + .mx-md-4 { + margin-left: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .mt-md-5, + .my-md-5 { + margin-top: 3rem !important; + } + .mr-md-5, + .mx-md-5 { + margin-right: 3rem !important; + } + .mb-md-5, + .my-md-5 { + margin-bottom: 3rem !important; + } + .ml-md-5, + .mx-md-5 { + margin-left: 3rem !important; + } + .p-md-0 { + padding: 0 !important; + } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; + } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; + } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2, + .px-md-2 { + padding-left: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .pt-md-3, + .py-md-3 { + padding-top: 1rem !important; + } + .pr-md-3, + .px-md-3 { + padding-right: 1rem !important; + } + .pb-md-3, + .py-md-3 { + padding-bottom: 1rem !important; + } + .pl-md-3, + .px-md-3 { + padding-left: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .pt-md-4, + .py-md-4 { + padding-top: 1.5rem !important; + } + .pr-md-4, + .px-md-4 { + padding-right: 1.5rem !important; + } + .pb-md-4, + .py-md-4 { + padding-bottom: 1.5rem !important; + } + .pl-md-4, + .px-md-4 { + padding-left: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .pt-md-5, + .py-md-5 { + padding-top: 3rem !important; + } + .pr-md-5, + .px-md-5 { + padding-right: 3rem !important; + } + .pb-md-5, + .py-md-5 { + padding-bottom: 3rem !important; + } + .pl-md-5, + .px-md-5 { + padding-left: 3rem !important; + } + .m-md-n1 { + margin: -0.25rem !important; + } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; + } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; + } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; + } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; + } + .m-md-n2 { + margin: -0.5rem !important; + } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; + } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; + } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; + } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.5rem !important; + } + .m-md-n3 { + margin: -1rem !important; + } + .mt-md-n3, + .my-md-n3 { + margin-top: -1rem !important; + } + .mr-md-n3, + .mx-md-n3 { + margin-right: -1rem !important; + } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -1rem !important; + } + .ml-md-n3, + .mx-md-n3 { + margin-left: -1rem !important; + } + .m-md-n4 { + margin: -1.5rem !important; + } + .mt-md-n4, + .my-md-n4 { + margin-top: -1.5rem !important; + } + .mr-md-n4, + .mx-md-n4 { + margin-right: -1.5rem !important; + } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -1.5rem !important; + } + .ml-md-n4, + .mx-md-n4 { + margin-left: -1.5rem !important; + } + .m-md-n5 { + margin: -3rem !important; + } + .mt-md-n5, + .my-md-n5 { + margin-top: -3rem !important; + } + .mr-md-n5, + .mx-md-n5 { + margin-right: -3rem !important; + } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -3rem !important; + } + .ml-md-n5, + .mx-md-n5 { + margin-left: -3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; + } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; + } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; + } +} + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; + } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .mt-lg-3, + .my-lg-3 { + margin-top: 1rem !important; + } + .mr-lg-3, + .mx-lg-3 { + margin-right: 1rem !important; + } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 1rem !important; + } + .ml-lg-3, + .mx-lg-3 { + margin-left: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .mt-lg-4, + .my-lg-4 { + margin-top: 1.5rem !important; + } + .mr-lg-4, + .mx-lg-4 { + margin-right: 1.5rem !important; + } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 1.5rem !important; + } + .ml-lg-4, + .mx-lg-4 { + margin-left: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .mt-lg-5, + .my-lg-5 { + margin-top: 3rem !important; + } + .mr-lg-5, + .mx-lg-5 { + margin-right: 3rem !important; + } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 3rem !important; + } + .ml-lg-5, + .mx-lg-5 { + margin-left: 3rem !important; + } + .p-lg-0 { + padding: 0 !important; + } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .pt-lg-3, + .py-lg-3 { + padding-top: 1rem !important; + } + .pr-lg-3, + .px-lg-3 { + padding-right: 1rem !important; + } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 1rem !important; + } + .pl-lg-3, + .px-lg-3 { + padding-left: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .pt-lg-4, + .py-lg-4 { + padding-top: 1.5rem !important; + } + .pr-lg-4, + .px-lg-4 { + padding-right: 1.5rem !important; + } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 1.5rem !important; + } + .pl-lg-4, + .px-lg-4 { + padding-left: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .pt-lg-5, + .py-lg-5 { + padding-top: 3rem !important; + } + .pr-lg-5, + .px-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 3rem !important; + } + .pl-lg-5, + .px-lg-5 { + padding-left: 3rem !important; + } + .m-lg-n1 { + margin: -0.25rem !important; + } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; + } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; + } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; + } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; + } + .m-lg-n2 { + margin: -0.5rem !important; + } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; + } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; + } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; + } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.5rem !important; + } + .m-lg-n3 { + margin: -1rem !important; + } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -1rem !important; + } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -1rem !important; + } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -1rem !important; + } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -1rem !important; + } + .m-lg-n4 { + margin: -1.5rem !important; + } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -1.5rem !important; + } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -1.5rem !important; + } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -1.5rem !important; + } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -1.5rem !important; + } + .m-lg-n5 { + margin: -3rem !important; + } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -3rem !important; + } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -3rem !important; + } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -3rem !important; + } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; + } +} + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; + } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .mt-xl-3, + .my-xl-3 { + margin-top: 1rem !important; + } + .mr-xl-3, + .mx-xl-3 { + margin-right: 1rem !important; + } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 1rem !important; + } + .ml-xl-3, + .mx-xl-3 { + margin-left: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .mt-xl-4, + .my-xl-4 { + margin-top: 1.5rem !important; + } + .mr-xl-4, + .mx-xl-4 { + margin-right: 1.5rem !important; + } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 1.5rem !important; + } + .ml-xl-4, + .mx-xl-4 { + margin-left: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .mt-xl-5, + .my-xl-5 { + margin-top: 3rem !important; + } + .mr-xl-5, + .mx-xl-5 { + margin-right: 3rem !important; + } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 3rem !important; + } + .ml-xl-5, + .mx-xl-5 { + margin-left: 3rem !important; + } + .p-xl-0 { + padding: 0 !important; + } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .pt-xl-3, + .py-xl-3 { + padding-top: 1rem !important; + } + .pr-xl-3, + .px-xl-3 { + padding-right: 1rem !important; + } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 1rem !important; + } + .pl-xl-3, + .px-xl-3 { + padding-left: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .pt-xl-4, + .py-xl-4 { + padding-top: 1.5rem !important; + } + .pr-xl-4, + .px-xl-4 { + padding-right: 1.5rem !important; + } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 1.5rem !important; + } + .pl-xl-4, + .px-xl-4 { + padding-left: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .pt-xl-5, + .py-xl-5 { + padding-top: 3rem !important; + } + .pr-xl-5, + .px-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 3rem !important; + } + .pl-xl-5, + .px-xl-5 { + padding-left: 3rem !important; + } + .m-xl-n1 { + margin: -0.25rem !important; + } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; + } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; + } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; + } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; + } + .m-xl-n2 { + margin: -0.5rem !important; + } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; + } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; + } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; + } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.5rem !important; + } + .m-xl-n3 { + margin: -1rem !important; + } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -1rem !important; + } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -1rem !important; + } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -1rem !important; + } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -1rem !important; + } + .m-xl-n4 { + margin: -1.5rem !important; + } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -1.5rem !important; + } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -1.5rem !important; + } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -1.5rem !important; + } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -1.5rem !important; + } + .m-xl-n5 { + margin: -3rem !important; + } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -3rem !important; + } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -3rem !important; + } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -3rem !important; + } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; + } +} + +.text-monospace { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; +} + +.text-justify { + text-align: justify !important; +} + +.text-wrap { + white-space: normal !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.font-weight-light { + font-weight: 300 !important; +} + +.font-weight-lighter { + font-weight: lighter !important; +} + +.font-weight-normal { + font-weight: 400 !important; +} + +.font-weight-bold { + font-weight: 700 !important; +} + +.font-weight-bolder { + font-weight: bolder !important; +} + +.font-italic { + font-style: italic !important; +} + +.text-white { + color: #fff !important; +} + +.text-primary { + color: #007bff !important; +} + +a.text-primary:hover, a.text-primary:focus { + color: #0056b3 !important; +} + +.text-secondary { + color: #6c757d !important; +} + +a.text-secondary:hover, a.text-secondary:focus { + color: #494f54 !important; +} + +.text-success { + color: #28a745 !important; +} + +a.text-success:hover, a.text-success:focus { + color: #19692c !important; +} + +.text-info { + color: #17a2b8 !important; +} + +a.text-info:hover, a.text-info:focus { + color: #0f6674 !important; +} + +.text-warning { + color: #ffc107 !important; +} + +a.text-warning:hover, a.text-warning:focus { + color: #ba8b00 !important; +} + +.text-danger { + color: #dc3545 !important; +} + +a.text-danger:hover, a.text-danger:focus { + color: #a71d2a !important; +} + +.text-light { + color: #f8f9fa !important; +} + +a.text-light:hover, a.text-light:focus { + color: #cbd3da !important; +} + +.text-dark { + color: #343a40 !important; +} + +a.text-dark:hover, a.text-dark:focus { + color: #121416 !important; +} + +.text-body { + color: #212529 !important; +} + +.text-muted { + color: #6c757d !important; +} + +.text-black-50 { + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.text-decoration-none { + text-decoration: none !important; +} + +.text-break { + word-break: break-word !important; + overflow-wrap: break-word !important; +} + +.text-reset { + color: inherit !important; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + box-shadow: none !important; + } + a:not(.btn) { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #adb5bd; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + @page { + size: a3; + } + body { + min-width: 992px !important; + } + .container { + min-width: 992px !important; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6 !important; + } + .table-dark { + color: inherit; + } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #dee2e6; + } + .table .thead-dark th { + color: inherit; + border-color: #dee2e6; + } +} +/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map new file mode 100644 index 0000000..1c14b97 --- /dev/null +++ b/3-Docker/app/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap.scss","bootstrap.css","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_functions.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"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AF7G1B;;AAEA;EEmHE,wBAAwB;AFjH1B;;AEyHA;EACE,aAAa;EACb,0BAA0B;AFtH5B;;AE6HA;EACE,qBAAqB;AF1HvB;;AE6HA;EACE,kBAAkB;EAClB,eAAe;AF1HjB;;AE6HA;EACE,aAAa;AF1Hf;;AAEA;EE8HE,wBAAwB;AF5H1B;;AM/VA;;EAEE,qBHiSuC;EG/RvC,gBHiS+B;EGhS/B,gBHiS+B;AHgEjC;;AM7VA;EFgHM,iBAtCY;AJuRlB;;AMhWA;EF+GM,eAtCY;AJ2RlB;;AMnWA;EF8GM,kBAtCY;AJ+RlB;;AMtWA;EF6GM,iBAtCY;AJmSlB;;AMzWA;EF4GM,kBAtCY;AJuSlB;;AM5WA;EF2GM,eAtCY;AJ2SlB;;AM9WA;EFyGM,kBAtCY;EEjEhB,gBHmS+B;AH8EjC;;AM7WA;EFmGM,eAtCY;EE3DhB,gBHsR+B;EGrR/B,gBH6Q+B;AHmGjC;;AM9WA;EF8FM,iBAtCY;EEtDhB,gBHkR+B;EGjR/B,gBHwQ+B;AHyGjC;;AM/WA;EFyFM,iBAtCY;EEjDhB,gBH8Q+B;EG7Q/B,gBHmQ+B;AH+GjC;;AMhXA;EFoFM,iBAtCY;EE5ChB,gBH0Q+B;EGzQ/B,gBH8P+B;AHqHjC;;AE1VA;EIhBE,gBH0EW;EGzEX,mBHyEW;EGxEX,SAAS;EACT,wCHzCa;AHuZf;;AMtWA;;EFMI,cAAW;EEHb,gBHsN+B;AHmJjC;;AMtWA;;EAEE,cH8PgC;EG7PhC,yBHsQmC;AHmGrC;;AMjWA;EC/EE,eAAe;EACf,gBAAgB;APoblB;;AMjWA;ECpFE,eAAe;EACf,gBAAgB;APyblB;;AMnWA;EACE,qBAAqB;ANsWvB;;AMvWA;EAII,oBHgP+B;AHuHnC;;AM7VA;EFjCI,cAAW;EEmCb,yBAAyB;ANgW3B;;AM5VA;EACE,mBHiBW;ECFP,kBAtCY;AJuXlB;;AM5VA;EACE,cAAc;EF7CZ,cAAW;EE+Cb,cH1GgB;AHyclB;;AMlWA;EAMI,qBAAqB;ANgWzB;;AQndA;ECIE,eAAe;EAGf,YAAY;ATidd;;AQldA;EACE,gBL++BwC;EK9+BxC,sBLRa;EKSb,yBLNgB;EOLd,sBPqOgC;EM/NlC,eAAe;EAGf,YAA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AAwB,iBADZ;IACY,QADZ;EfitClB;EehtCM;IAAwB,iBADZ;IACY,QADZ;EfotClB;EentCM;IAAwB,iBADZ;IACY,QADZ;EfutClB;EettCM;IAAwB,iBADZ;IACY,QADZ;Ef0tClB;EeztCM;IAAwB,iBADZ;IACY,QADZ;Ef6tClB;Ee5tCM;IAAwB,iBADZ;IACY,QADZ;EfguClB;Ee/tCM;IAAwB,iBADZ;IACY,QADZ;EfmuClB;EeluCM;IAAwB,iBADZ;IACY,QADZ;EfsuClB;EeruCM;IAAwB,iBADZ;IACY,QADZ;EfyuClB;EexuCM;IAAwB,iBADZ;IACY,QADZ;Ef4uClB;Ee3uCM;IAAwB,kBADZ;IACY,SADZ;Ef+uClB;Ee9uCM;IAAwB,kBADZ;IACY,SADZ;EfkvClB;EejvCM;IAAwB,kBADZ;IACY,SADZ;EfqvClB;Ee9uCQ;IFTR,cAA4B;Eb0vC5B;EejvCQ;IFTR,sBAA8C;Eb6vC9C;EepvCQ;IFTR,uBAA8C;EbgwC9C;EevvCQ;IFTR,gBAA8C;EbmwC9C;Ee1vCQ;IFTR,uBAA8C;EbswC9C;Ee7vCQ;IFTR,uBAA8C;EbywC9C;EehwCQ;IFTR,gBAA8C;Eb4wC9C;EenwCQ;IFTR,uBAA8C;Eb+wC9C;EetwCQ;IFTR,uBAA8C;EbkxC9C;EezwCQ;IFTR,gBAA8C;EbqxC9C;Ee5wCQ;IFTR,uBAA8C;EbwxC9C;Ee/wCQ;IFTR,uBAA8C;Eb2xC9C;AACF;;AgBz0CA;EACE,WAAW;EACX,mBb2HW;Ea1HX,cbSgB;AHm0ClB;;AgB/0CA;;EAQI,gBb8UgC;Ea7UhC,mBAAmB;EACnB,6BbJc;AHg1ClB;;AgBt1CA;EAcI,sBAAsB;EACtB,gCbTc;AHq1ClB;;AgB31CA;EAmBI,6Bbbc;AHy1ClB;;AgBn0CA;;EAGI,ebwT+B;AH6gCnC;;AgB5zCA;EACE,yBbnCgB;AHk2ClB;;AgBh0CA;;EAKI,yBbvCc;AHu2ClB;;AgBr0CA;;EAWM,wBAA4C;AhB+zClD;;AgB1zCA;;;;EAKI,SAAS;AhB4zCb;;AgBpzCA;EAEI,qCb1DW;AHg3Cf;;AKr3CE;EW2EI,cbvEY;EawEZ,sCbvES;AHq3Cf;;AiBj4CE;;;EAII,yBC2E4D;AlBwzClE;;AiBv4CE;;;;EAYM,qBCmE0D;AlB+zClE;;AKv4CE;EYiBM,yBAJsC;AjB83C9C;;AiB/3CE;;EASQ,yBARoC;AjBm4C9C;;AiBv5CE;;;EAII,yBC2E4D;AlB80ClE;;AiB75CE;;;;EAYM,qBCmE0D;AlBq1ClE;;AK75CE;EYiBM,yBAJsC;AjBo5C9C;;AiBr5CE;;EASQ,yBARoC;AjBy5C9C;;AiB76CE;;;EAII,yBC2E4D;AlBo2ClE;;AiBn7CE;;;;EAYM,qBCmE0D;AlB22ClE;;AKn7CE;EYiBM,yBAJsC;AjB06C9C;;AiB36CE;;EASQ,yBARoC;AjB+6C9C;;AiBn8CE;;;EAII,yBC2E4D;AlB03ClE;;AiBz8CE;;;;EAYM,qBCmE0D;AlBi4ClE;;AKz8CE;EYiBM,yBAJsC;AjBg8C9C;;AiBj8CE;;EASQ,yBARoC;AjBq8C9C;;AiBz9CE;;;EAII,yBC2E4D;AlBg5ClE;;AiB/9CE;;;;EAYM,qBCmE0D;AlBu5ClE;;AK/9CE;EYiBM,yBAJsC;AjBs9C9C;;AiBv9CE;;EASQ,yBARoC;AjB29C9C;;AiB/+CE;;;EAII,yBC2E4D;AlBs6ClE;;AiBr/CE;;;;EAYM,qBCmE0D;AlB66ClE;;AKr/CE;EYiBM,yBAJsC;AjB4+C9C;;AiB7+CE;;EASQ,yBARoC;AjBi/C9C;;AiBrgDE;;;EAII,yBC2E4D;AlB47ClE;;AiB3gDE;;;;EAYM,qBCmE0D;AlBm8ClE;;AK3gDE;EYiBM,yBAJsC;AjBkgD9C;;AiBngDE;;EASQ,yBARoC;AjBugD9C;;AiB3hDE;;;EAII,yBC2E4D;AlBk9ClE;;AiBjiDE;;;;EAYM,qBCmE0D;AlBy9ClE;;AKjiDE;EYiBM,yBAJsC;AjBwhD9C;;AiBzhDE;;EASQ,yBARoC;AjB6hD9C;;AiBjjDE;;;EAII,sCdQS;AH2iDf;;AKhjDE;EYiBM,sCAJsC;AjBuiD9C;;AiBxiDE;;EASQ,sCARoC;AjB4iD9C;;AgBt9CA;EAGM,Wb3GS;Ea4GT,yBbpGY;EaqGZ,qBb2PqD;AH4tC3D;;AgB59CA;EAWM,cb5GY;Ea6GZ,yBblHY;EamHZ,qBblHY;AHukDlB;;AgBh9CA;EACE,Wb3Ha;Ea4Hb,yBbpHgB;AHukDlB;;AgBr9CA;;;EAOI,qBbuOuD;AH6uC3D;;AgB39CA;EAWI,SAAS;AhBo9Cb;;AgB/9CA;EAgBM,2Cb1IS;AH6lDf;;AKxlDE;EW4IM,WbjJO;EakJP,4CblJO;AHkmDf;;AchiDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBk8CvC;EgBv8CG;IASK,SAAS;EhBi8CjB;AACF;;Ac5iDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhB88CvC;EgBn9CG;IASK,SAAS;EhB68CjB;AACF;;AcxjDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhB09CvC;EgB/9CG;IASK,SAAS;EhBy9CjB;AACF;;AcpkDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBs+CvC;EgB3+CG;IASK,SAAS;EhBq+CjB;AACF;;AgBp/CA;EAOQ,cAAc;EACd,WAAW;EACX,gBAAgB;EAChB,iCAAiC;AhBi/CzC;;AgB3/CA;EAcU,SAAS;AhBi/CnB;;AmB9pDA;EACE,cAAc;EACd,WAAW;EACX,mChBqe2H;EgBpe3H,yBhBqXkC;EChQ9B,eAtCY;Ee5EhB,gBhB8Q+B;EgB7Q/B,gBhBkR+B;EgBjR/B,chBDgB;EgBEhB,sBhBTa;EgBUb,4BAA4B;EAC5B,yBhBPgB;EONd,sBPqOgC;EiBpO9B,wEjB4e4F;AHksClG;;AoBzqDI;EDLJ;ICMM,gBAAgB;EpB6qDpB;AACF;;AmBprDA;EAsBI,6BAA6B;EAC7B,SAAS;AnBkqDb;;AqBlrDE;EACE,clBAc;EkBCd,sBlBRW;EkBSX,qBlBgdsE;EkB/ctE,UAAU;EAKR,gDlBcW;AHmqDjB;;AmBjsDA;EA+BI,chBxBc;EgB0Bd,UAAU;AnBqqDd;;AmBtsDA;EA+BI,chBxBc;EgB0Bd,UAAU;AnBqqDd;;AmBtsDA;EA+BI,chBxBc;EgB0Bd,UAAU;AnBqqDd;;AmBtsDA;EA+BI,chBxBc;EgB0Bd,UAAU;AnBqqDd;;AmBtsDA;EA+BI,chBxBc;EgB0Bd,UAAU;AnBqqDd;;AmBtsDA;EA2CI,yBhBxCc;EgB0Cd,UAAU;AnB8pDd;;AmB1pDA;EAOI,chBhDc;EgBiDd,sBhBxDW;AH+sDf;;AmBlpDA;;EAEE,cAAc;EACd,WAAW;AnBqpDb;;AmB3oDA;EACE,iCAA+D;EAC/D,oCAAkE;EAClE,gBAAgB;EfZd,kBAAW;Eecb,gBhB0M+B;AHo8CjC;;AmB3oDA;EACE,+BAAkE;EAClE,kCAAqE;EfoCjE,kBAtCY;EeIhB,gBhBuI+B;AHugDjC;;AmB3oDA;EACE,gCAAkE;EAClE,mCAAqE;Ef6BjE,mBAtCY;EeWhB,gBhBiI+B;AH6gDjC;;AmBroDA;EACE,cAAc;EACd,WAAW;EACX,qBhB8QmC;EgB7QnC,wBhB6QmC;EgB5QnC,gBAAgB;EAChB,gBhB6K+B;EgB5K/B,chBpGgB;EgBqGhB,6BAA6B;EAC7B,yBAAyB;EACzB,mBAAmC;AnBwoDrC;;AmBlpDA;EAcI,gBAAgB;EAChB,eAAe;AnBwoDnB;;AmB5nDA;EACE,kChBsWqI;EgBrWrI,uBhB+PiC;EC1Q7B,mBAtCY;EemDhB,gBhByF+B;EOhO7B,qBPuO+B;AHgiDnC;;AmB5nDA;EACE,gChB+VqI;EgB9VrI,oBhB4PgC;EC/Q5B,kBAtCY;Ee2DhB,gBhBgF+B;EO/N7B,qBPsO+B;AHyiDnC;;AmB3nDA;EAGI,YAAY;AnB4nDhB;;AmBxnDA;EACE,YAAY;AnB2nDd;;AmBnnDA;EACE,mBhBoV0C;AHkyC5C;;AmBnnDA;EACE,cAAc;EACd,mBhBqU4C;AHizC9C;;AmB9mDA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,kBAA0C;EAC1C,iBAAyC;AnBinD3C;;AmBrnDA;;EAQI,kBAA0C;EAC1C,iBAAyC;AnBknD7C;;AmBzmDA;EACE,kBAAkB;EAClB,cAAc;EACd,qBhB0S6C;AHk0C/C;;AmBzmDA;EACE,kBAAkB;EAClB,kBhBsS2C;EgBrS3C,qBhBoS6C;AHw0C/C;;AmB/mDA;EAMI,chBxMc;AHqzDlB;;AmBzmDA;EACE,gBAAgB;AnB4mDlB;;AmBzmDA;EACE,2BAAoB;EAApB,oBAAoB;EACpB,sBAAmB;EAAnB,mBAAmB;EACnB,eAAe;EACf,qBhByR4C;AHm1C9C;;AmBhnDA;EAQI,gBAAgB;EAChB,aAAa;EACb,uBhBoR4C;EgBnR5C,cAAc;AnB4mDlB;;AqBvzDE;EACE,aAAa;EACb,WAAW;EACX,mBlBod0C;EC5a1C,cAAW;EiBtCX,clBSa;AHizDjB;;AqBvzDE;EACE,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,aAAa;EACb,eAAe;EACf,uBlBsyBqC;EkBryBrC,iBAAiB;EjBmFf,mBAtCY;EiB3Cd,gBlBkP6B;EkBjP7B,WlBxCW;EkByCX,wClBLa;EOtCb,sBPqOgC;AHioDpC;;AqBtzDI;EAEE,qBlBZW;EkBeT,oClBgb2F;EkB/a3F,4PHfmI;EGgBnI,4BAA4B;EAC5B,2DlB+a6F;EkB9a7F,gElB6awF;AHy4ChG;;AqB/zDI;EAaI,qBlBvBS;EkBwBT,gDlBxBS;AH80DjB;;AqBp0DI;;;EAmBI,cAAc;ArBuzDtB;;AqBhzDI;EAGI,oClBwZ2F;EkBvZ3F,kFlByZ6F;AHw5CrG;;AqB3yDI;EAEE,qBlBhDW;EkBmDT,sDlBqe0J;EkBpe1J,6gBAAkJ;ArB2yD1J;;AqBjzDI;EAUI,qBlBxDS;EkByDT,gDlBzDS;AHo2DjB;;AqBtzDI;;;EAgBI,cAAc;ArB4yDtB;;AqBryDI;;;EAII,cAAc;ArBuyDtB;;AqBjyDI;EAGI,clBlFS;AHo3DjB;;AqBryDI;;;EAQI,cAAc;ArBmyDtB;;AqB7xDI;EAGI,clBhGS;AH83DjB;;AqBjyDI;EAMM,qBlBnGO;AHk4DjB;;AqBryDI;;;EAYI,cAAc;ArB+xDtB;;AqB3yDI;EAiBM,qBAAkC;ECnJxC,yBDoJ+C;ArB8xDnD;;AqBhzDI;EAwBM,gDlBrHO;AHi5DjB;;AqBpzDI;EA4BM,qBlBzHO;AHq5DjB;;AqBpxDI;EAGI,qBlBpIS;AHy5DjB;;AqBxxDI;;;EAQI,cAAc;ArBsxDtB;;AqB9xDI;EAaM,qBlB9IO;EkB+IP,gDlB/IO;AHo6DjB;;AqBl7DE;EACE,aAAa;EACb,WAAW;EACX,mBlBod0C;EC5a1C,cAAW;EiBtCX,clBMa;AH+6DjB;;AqBl7DE;EACE,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,aAAa;EACb,eAAe;EACf,uBlBsyBqC;EkBryBrC,iBAAiB;EjBmFf,mBAtCY;EiB3Cd,gBlBkP6B;EkBjP7B,WlBxCW;EkByCX,wClBRa;EOnCb,sBPqOgC;AH4vDpC;;AqBj7DI;EAEE,qBlBfW;EkBkBT,oClBgb2F;EkB/a3F,sSHfmI;EGgBnI,4BAA4B;EAC5B,2DlB+a6F;EkB9a7F,gElB6awF;AHogDhG;;AqB17DI;EAaI,qBlB1BS;EkB2BT,gDlB3BS;AH48DjB;;AqB/7DI;;;EAmBI,cAAc;ArBk7DtB;;AqB36DI;EAGI,oClBwZ2F;EkBvZ3F,kFlByZ6F;AHmhDrG;;AqBt6DI;EAEE,qBlBnDW;EkBsDT,sDlBqe0J;EkBpe1J,ujBAAkJ;ArBs6D1J;;AqB56DI;EAUI,qBlB3DS;EkB4DT,gDlB5DS;AHk+DjB;;AqBj7DI;;;EAgBI,cAAc;ArBu6DtB;;AqBh6DI;;;EAII,cAAc;ArBk6DtB;;AqB55DI;EAGI,clBrFS;AHk/DjB;;AqBh6DI;;;EAQI,cAAc;ArB85DtB;;AqBx5DI;EAGI,clBnGS;AH4/DjB;;AqB55DI;EAMM,qBlBtGO;AHggEjB;;AqBh6DI;;;EAYI,cAAc;ArB05DtB;;AqBt6DI;EAiBM,qBAAkC;ECnJxC,yBDoJ+C;ArBy5DnD;;AqB36DI;EAwBM,gDlBxHO;AH+gEjB;;AqB/6DI;EA4BM,qBlB5HO;AHmhEjB;;AqB/4DI;EAGI,qBlBvIS;AHuhEjB;;AqBn5DI;;;EAQI,cAAc;ArBi5DtB;;AqBz5DI;EAaM,qBlBjJO;EkBkJP,gDlBlJO;AHkiEjB;;AmBz0DA;EACE,oBAAa;EAAb,aAAa;EACb,uBAAmB;EAAnB,mBAAmB;EACnB,sBAAmB;EAAnB,mBAAmB;AnB40DrB;;AmB/0DA;EASI,WAAW;AnB00Df;;AcxhEI;EKqMJ;IAeM,oBAAa;IAAb,aAAa;IACb,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;IACvB,gBAAgB;EnBy0DpB;EmB31DF;IAuBM,oBAAa;IAAb,aAAa;IACb,kBAAc;IAAd,cAAc;IACd,uBAAmB;IAAnB,mBAAmB;IACnB,sBAAmB;IAAnB,mBAAmB;IACnB,gBAAgB;EnBu0DpB;EmBl2DF;IAgCM,qBAAqB;IACrB,WAAW;IACX,sBAAsB;EnBq0D1B;EmBv2DF;IAuCM,qBAAqB;EnBm0DzB;EmB12DF;;IA4CM,WAAW;EnBk0Df;EmB92DF;IAkDM,oBAAa;IAAb,aAAa;IACb,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;IACvB,WAAW;IACX,eAAe;EnB+zDnB;EmBr3DF;IAyDM,kBAAkB;IAClB,oBAAc;IAAd,cAAc;IACd,aAAa;IACb,qBhB2LwC;IgB1LxC,cAAc;EnB+zDlB;EmB53DF;IAiEM,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;EnB8zD3B;EmBh4DF;IAqEM,gBAAgB;EnB8zDpB;AACF;;AuB/nEA;EACE,qBAAqB;EAErB,gBpBkR+B;EoBjR/B,cpBMgB;EoBLhB,kBAAkB;EAClB,sBAAsB;EACtB,yBAAiB;EAAjB,sBAAiB;EAAjB,qBAAiB;EAAjB,iBAAiB;EACjB,6BAA6B;EAC7B,6BAA2C;ECsF3C,yBrB0RkC;EChQ9B,eAtCY;EoBchB,gBrByL+B;EO3R7B,sBPqOgC;EiBpO9B,qIjBqb6I;AH0tDnJ;;AoB1oEI;EGLJ;IHMM,gBAAgB;EpB8oEpB;AACF;;AK/oEE;EkBQE,cpBJc;EoBKd,qBAAqB;AvB2oEzB;;AuB1pEA;EAoBI,UAAU;EACV,gDpBSa;AHioEjB;;AuB/pEA;EA2BI,apB8Y6B;AH0vDjC;;AuBznEA;;EAEE,oBAAoB;AvB4nEtB;;AuBnnEE;ECrDA,WrBCa;EmBDX,yBnB8Ba;EqB5Bf,qBrB4Be;AHgpEjB;;AKxqEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBqrE7H;;AwBzqEE;EAMI,gDAAiF;AxBuqEvF;;AwBlqEE;EAEE,WrBvBW;EqBwBX,yBrBKa;EqBJb,qBrBIa;AHgqEjB;;AwB7pEE;;EAGE,WrBnCW;EqBoCX,yBAtCuK;EA0CvK,qBA1C+M;AxBssEnN;;AwB1pEI;;EAKI,gDAAiF;AxB0pEzF;;AuBrpEE;ECrDA,WrBCa;EmBDX,yBnBOc;EqBLhB,qBrBKgB;AHysElB;;AK1sEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxButE7H;;AwB3sEE;EAMI,iDAAiF;AxBysEvF;;AwBpsEE;EAEE,WrBvBW;EqBwBX,yBrBlBc;EqBmBd,qBrBnBc;AHytElB;;AwB/rEE;;EAGE,WrBnCW;EqBoCX,yBAtCuK;EA0CvK,qBA1C+M;AxBwuEnN;;AwB5rEI;;EAKI,iDAAiF;AxB4rEzF;;AuBvrEE;ECrDA,WrBCa;EmBDX,yBnBqCa;EqBnCf,qBrBmCe;AH6sEjB;;AK5uEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxByvE7H;;AwB7uEE;EAMI,+CAAiF;AxB2uEvF;;AwBtuEE;EAEE,WrBvBW;EqBwBX,yBrBYa;EqBXb,qBrBWa;AH6tEjB;;AwBjuEE;;EAGE,WrBnCW;EqBoCX,yBAtCuK;EA0CvK,qBA1C+M;AxB0wEnN;;AwB9tEI;;EAKI,+CAAiF;AxB8tEzF;;AuBztEE;ECrDA,WrBCa;EmBDX,yBnBuCa;EqBrCf,qBrBqCe;AH6uEjB;;AK9wEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxB2xE7H;;AwB/wEE;EAMI,gDAAiF;AxB6wEvF;;AwBxwEE;EAEE,WrBvBW;EqBwBX,yBrBca;EqBbb,qBrBaa;AH6vEjB;;AwBnwEE;;EAGE,WrBnCW;EqBoCX,yBAtCuK;EA0CvK,qBA1C+M;AxB4yEnN;;AwBhwEI;;EAKI,gDAAiF;AxBgwEzF;;AuB3vEE;ECrDA,crBUgB;EmBVd,yBnBoCa;EqBlCf,qBrBkCe;AHkxEjB;;AKhzEE;EmBAE,crBIc;EmBVd,yBEDoF;EASpF,qBATyH;AxB6zE7H;;AwBjzEE;EAMI,gDAAiF;AxB+yEvF;;AwB1yEE;EAEE,crBdc;EqBed,yBrBWa;EqBVb,qBrBUa;AHkyEjB;;AwBryEE;;EAGE,crB1Bc;EqB2Bd,yBAtCuK;EA0CvK,qBA1C+M;AxB80EnN;;AwBlyEI;;EAKI,gDAAiF;AxBkyEzF;;AuB7xEE;ECrDA,WrBCa;EmBDX,yBnBkCa;EqBhCf,qBrBgCe;AHszEjB;;AKl1EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxB+1E7H;;AwBn1EE;EAMI,+CAAiF;AxBi1EvF;;AwB50EE;EAEE,WrBvBW;EqBwBX,yBrBSa;EqBRb,qBrBQa;AHs0EjB;;AwBv0EE;;EAGE,WrBnCW;EqBoCX,yBAtCuK;EA0CvK,qBA1C+M;AxBg3EnN;;AwBp0EI;;EAKI,+CAAiF;AxBo0EzF;;AuB/zEE;ECrDA,crBUgB;EmBVd,yBnBEc;EqBAhB,qBrBAgB;AHw3ElB;;AKp3EE;EmBAE,crBIc;EmBVd,yBEDoF;EASpF,qBATyH;AxBi4E7H;;AwBr3EE;EAMI,iDAAiF;AxBm3EvF;;AwB92EE;EAEE,crBdc;EqBed,yBrBvBc;EqBwBd,qBrBxBc;AHw4ElB;;AwBz2EE;;EAGE,crB1Bc;EqB2Bd,yBAtCuK;EA0CvK,qBA1C+M;AxBk5EnN;;AwBt2EI;;EAKI,iDAAiF;AxBs2EzF;;AuBj2EE;ECrDA,WrBCa;EmBDX,yBnBSc;EqBPhB,qBrBOgB;AHm5ElB;;AKt5EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBm6E7H;;AwBv5EE;EAMI,8CAAiF;AxBq5EvF;;AwBh5EE;EAEE,WrBvBW;EqBwBX,yBrBhBc;EqBiBd,qBrBjBc;AHm6ElB;;AwB34EE;;EAGE,WrBnCW;EqBoCX,yBAtCuK;EA0CvK,qBA1C+M;AxBo7EnN;;AwBx4EI;;EAKI,8CAAiF;AxBw4EzF;;AuB73EE;ECJA,crBzBe;EqB0Bf,qBrB1Be;AH+5EjB;;AKv7EE;EmBqDE,WrB1DW;EqB2DX,yBrB9Ba;EqB+Bb,qBrB/Ba;AHq6EjB;;AwBn4EE;EAEE,+CrBpCa;AHy6EjB;;AwBl4EE;EAEE,crBzCa;EqB0Cb,6BAA6B;AxBo4EjC;;AwBj4EE;;EAGE,WrB7EW;EqB8EX,yBrBjDa;EqBkDb,qBrBlDa;AHq7EjB;;AwBj4EI;;EAKI,+CrBzDS;AH07EjB;;AuB75EE;ECJA,crBhDgB;EqBiDhB,qBrBjDgB;AHs9ElB;;AKv9EE;EmBqDE,WrB1DW;EqB2DX,yBrBrDc;EqBsDd,qBrBtDc;AH49ElB;;AwBn6EE;EAEE,iDrB3Dc;AHg+ElB;;AwBl6EE;EAEE,crBhEc;EqBiEd,6BAA6B;AxBo6EjC;;AwBj6EE;;EAGE,WrB7EW;EqB8EX,yBrBxEc;EqByEd,qBrBzEc;AH4+ElB;;AwBj6EI;;EAKI,iDrBhFU;AHi/ElB;;AuB77EE;ECJA,crBlBe;EqBmBf,qBrBnBe;AHw9EjB;;AKv/EE;EmBqDE,WrB1DW;EqB2DX,yBrBvBa;EqBwBb,qBrBxBa;AH89EjB;;AwBn8EE;EAEE,+CrB7Ba;AHk+EjB;;AwBl8EE;EAEE,crBlCa;EqBmCb,6BAA6B;AxBo8EjC;;AwBj8EE;;EAGE,WrB7EW;EqB8EX,yBrB1Ca;EqB2Cb,qBrB3Ca;AH8+EjB;;AwBj8EI;;EAKI,+CrBlDS;AHm/EjB;;AuB79EE;ECJA,crBhBe;EqBiBf,qBrBjBe;AHs/EjB;;AKvhFE;EmBqDE,WrB1DW;EqB2DX,yBrBrBa;EqBsBb,qBrBtBa;AH4/EjB;;AwBn+EE;EAEE,gDrB3Ba;AHggFjB;;AwBl+EE;EAEE,crBhCa;EqBiCb,6BAA6B;AxBo+EjC;;AwBj+EE;;EAGE,WrB7EW;EqB8EX,yBrBxCa;EqByCb,qBrBzCa;AH4gFjB;;AwBj+EI;;EAKI,gDrBhDS;AHihFjB;;AuB7/EE;ECJA,crBnBe;EqBoBf,qBrBpBe;AHyhFjB;;AKvjFE;EmBqDE,crBjDc;EqBkDd,yBrBxBa;EqByBb,qBrBzBa;AH+hFjB;;AwBngFE;EAEE,+CrB9Ba;AHmiFjB;;AwBlgFE;EAEE,crBnCa;EqBoCb,6BAA6B;AxBogFjC;;AwBjgFE;;EAGE,crBpEc;EqBqEd,yBrB3Ca;EqB4Cb,qBrB5Ca;AH+iFjB;;AwBjgFI;;EAKI,+CrBnDS;AHojFjB;;AuB7hFE;ECJA,crBrBe;EqBsBf,qBrBtBe;AH2jFjB;;AKvlFE;EmBqDE,WrB1DW;EqB2DX,yBrB1Ba;EqB2Bb,qBrB3Ba;AHikFjB;;AwBniFE;EAEE,+CrBhCa;AHqkFjB;;AwBliFE;EAEE,crBrCa;EqBsCb,6BAA6B;AxBoiFjC;;AwBjiFE;;EAGE,WrB7EW;EqB8EX,yBrB7Ca;EqB8Cb,qBrB9Ca;AHilFjB;;AwBjiFI;;EAKI,+CrBrDS;AHslFjB;;AuB7jFE;ECJA,crBrDgB;EqBsDhB,qBrBtDgB;AH2nFlB;;AKvnFE;EmBqDE,crBjDc;EqBkDd,yBrB1Dc;EqB2Dd,qBrB3Dc;AHioFlB;;AwBnkFE;EAEE,iDrBhEc;AHqoFlB;;AwBlkFE;EAEE,crBrEc;EqBsEd,6BAA6B;AxBokFjC;;AwBjkFE;;EAGE,crBpEc;EqBqEd,yBrB7Ec;EqB8Ed,qBrB9Ec;AHipFlB;;AwBjkFI;;EAKI,iDrBrFU;AHspFlB;;AuB7lFE;ECJA,crB9CgB;EqB+ChB,qBrB/CgB;AHopFlB;;AKvpFE;EmBqDE,WrB1DW;EqB2DX,yBrBnDc;EqBoDd,qBrBpDc;AH0pFlB;;AwBnmFE;EAEE,8CrBzDc;AH8pFlB;;AwBlmFE;EAEE,crB9Dc;EqB+Dd,6BAA6B;AxBomFjC;;AwBjmFE;;EAGE,WrB7EW;EqB8EX,yBrBtEc;EqBuEd,qBrBvEc;AH0qFlB;;AwBjmFI;;EAKI,8CrB9EU;AH+qFlB;;AuBlnFA;EACE,gBpB8M+B;EoB7M/B,cpB1Ce;EoB2Cf,qBpB6F4C;AHwhF9C;;AKxrFE;EkBsEE,cpB2F8D;EoB1F9D,0BpB2F+C;AH2hFnD;;AuB7nFA;EAYI,0BpBsF+C;EoBrF/C,gBAAgB;AvBqnFpB;;AuBloFA;EAkBI,cpBjFc;EoBkFd,oBAAoB;AvBonFxB;;AuBzmFA;ECLE,oBrBySgC;EC/Q5B,kBAtCY;EoBchB,gBrB6H+B;EO/N7B,qBPsO+B;AH++EnC;;AuB5mFA;ECTE,uBrBoSiC;EC1Q7B,mBAtCY;EoBchB,gBrB8H+B;EOhO7B,qBPuO+B;AHq/EnC;;AuB1mFA;EACE,cAAc;EACd,WAAW;AvB6mFb;;AuB/mFA;EAMI,kBpBuT+B;AHszEnC;;AuBxmFA;;;EAII,WAAW;AvB0mFf;;AyBhvFA;ELMM,gCjBsP2C;AHw/EjD;;AoBzuFI;EKXJ;ILYM,gBAAgB;EpB6uFpB;AACF;;Ay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CT,gBAAgB;A9B0nGpB;;A8B1oGA;;;;;;;;;;;;EAqBM,iB3B4M2B;AHw7FjC;;A8BzpGA;;;EA6BI,UAAU;A9BkoGd;;A8B/pGA;EAkCI,UAAU;A9BioGd;;A8BnqGA;;EpBeI,0BoBwBmD;EpBvBnD,6BoBuBmD;A9BkoGvD;;A8BzqGA;;EpB6BI,yBoBWmD;EpBVnD,4BoBUmD;A9BuoGvD;;A8B/qGA;EA8CI,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;A9BqoGvB;;A8BprGA;;EpBeI,0BoBmC6E;EpBlC7E,6BoBkC6E;A9BwoGjF;;A8B1rGA;EpB6BI,yBoBsBsE;EpBrBtE,4BoBqBsE;A9B4oG1E;;A8BjoGA;;EAEE,oBAAa;EAAb,aAAa;A9BooGf;;A8BtoGA;;EAQI,kBAAkB;EAClB,UAAU;A9BmoGd;;A8B5oGA;;EAYM,UAAU;A9BqoGhB;;A8BjpGA;;;;;;;;EAoBI,iB3B+I6B;AHy/FjC;;A8BpoGA;EAAuB,kB3B2IU;AH6/FjC;;A8BvoGA;EAAsB,iB3B0IW;AHigGjC;;A8BnoGA;EACE,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;EACnB,yB3BuRkC;E2BtRlC,gBAAgB;E1BsBZ,eAtCY;E0BkBhB,gB3BgL+B;E2B/K/B,gB3BoL+B;E2BnL/B,c3B/FgB;E2BgGhB,kBAAkB;EAClB,mBAAmB;EACnB,yB3BvGgB;E2BwGhB,yB3BtGgB;EONd,sBPqOgC;AH8gGpC;;A8BnpGA;;EAkBI,aAAa;A9BsoGjB;;A8B5nGA;;EAEE,gC3B6WqI;AHkxFvI;;A8B5nGA;;;;;;EAME,oB3BkQgC;EC/Q5B,kBAtCY;E0BqDhB,gB3BsF+B;EO/N7B,qBPsO+B;AHmiGnC;;A8B5nGA;;EAEE,kC3B2VqI;AHoyFvI;;A8B5nGA;;;;;;EAME,uB3B4OiC;EC1Q7B,mBAtCY;E0BsEhB,gB3BsE+B;EOhO7B,qBPuO+B;AHmjGnC;;A8B5nGA;;EAEE,sBAA0E;A9B+nG5E;;A8BpnGA;;;;;;EpB3JI,0BoBiK4B;EpBhK5B,6BoBgK4B;A9BwnGhC;;A8BrnGA;;;;;;EpBtJI,yBoB4J2B;EpB3J3B,4BoB2J2B;A9BynG/B;;A+B/yGA;EACE,kBAAkB;EAClB,cAAc;EACd,kBAA+C;EAC/C,oBAAqE;A/BkzGvE;;A+B/yGA;EACE,2BAAoB;EAApB,oBAAoB;EACpB,kB5Bqf0C;AH6zF5C;;A+B/yGA;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;A/BkzGZ;;A+BrzGA;EAMI,W5BpBW;E4BqBX,qB5BQa;EmB9Bb,yBnB8Ba;AH4yGjB;;A+B3zGA;EAiBM,gD5BFW;AHgzGjB;;A+B/zGA;EAsBI,qB5BqbsE;AHw3F1E;;A+Bn0GA;EA0BI,W5BxCW;E4ByCX,yB5B8e8E;E4B7e9E,qB5B6e8E;AHg0FlF;;A+Bz0GA;EAkCM,c5B1CY;AHq1GlB;;A+B70GA;EAqCQ,yB5BjDU;AH61GlB;;A+BlyGA;EACE,kBAAkB;EAClB,gBAAgB;EAChB,mBAAmB;A/BqyGrB;;A+BxyGA;EAOI,kBAAkB;EAClB,YAA+E;EAC/E,aAA+D;EAC/D,cAAc;EACd,W5B0bwC;E4BzbxC,Y5BybwC;E4BxbxC,oBAAoB;EACpB,WAAW;EACX,sB5B5EW;E4B6EX,yB5BmJ6B;AHkpGjC;;A+BrzGA;EAsBI,kBAAkB;EAClB,YAA+E;EAC/E,aAA+D;EAC/D,cAAc;EACd,W5B2awC;E4B1axC,Y5B0awC;E4BzaxC,WAAW;EACX,mCAAgE;A/BmyGpE;;A+B1xGA;ErBrGI,sBPqOgC;AH8pGpC;;A+B9xGA;EAOM,6MbrEqI;AlBg2G3I;;A+BlyGA;EAaM,qB5BnFW;EmB9Bb,yBnB8Ba;AH62GjB;;A+BvyGA;EAkBM,0JbhFqI;AlBy2G3I;;A+B3yGA;EAwBM,wC5B9FW;AHq3GjB;;A+B/yGA;EA2BM,wC5BjGW;AHy3GjB;;A+B/wGA;EAGI,kB5B0Z+C;AHs3FnD;;A+BnxGA;EAQM,uJb1GqI;AlBy3G3I;;A+BvxGA;EAcM,wC5BxHW;AHq4GjB;;A+BnwGA;EACE,qBAA2D;A/BswG7D;;A+BvwGA;EAKM,cAAqD;EACrD,c5BkY+E;E4BjY/E,mBAAmB;EAEnB,qB5BgY4E;AHq4FlF;;A+B9wGA;EAaM,wBAA0I;EAC1I,0BAA+G;EAC/G,uB5B2XiI;E4B1XjI,wB5B0XiI;E4BzXjI,yB5B3KY;E4B6KZ,qB5BsX4E;EiBziB5E,iJjB8f+H;EiB9f/H,yIjB8f+H;EiB9f/H,8KjB8f+H;AH07FrI;;AoBn7GI;EW2JJ;IX1JM,gBAAgB;EpBu7GpB;AACF;;A+B9xGA;EA0BM,sB5BzLS;E4B0LT,sCAA4E;EAA5E,8BAA4E;A/BwwGlF;;A+BnyGA;EAiCM,wC5BnKW;AHy6GjB;;A+B1vGA;EACE,qBAAqB;EACrB,WAAW;EACX,mC5BwR2H;E4BvR3H,0C5BwKkC;EChQ9B,eAtCY;E2BiIhB,gB5BiE+B;E4BhE/B,gB5BqE+B;E4BpE/B,c5B9MgB;E4B+MhB,sBAAsB;EACtB,6M5BmWmI;E4BlWnI,sB5BxNa;E4ByNb,yB5BrNgB;EONd,sBPqOgC;E4BPlC,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/B2vGlB;;A+B3wGA;EAmBI,qB5B0PsE;E4BzPtE,UAAU;EAIR,gD5BvMW;AHg8GjB;;A+BjxGA;EAiCM,c5BtOY;E4BuOZ,sB5B9OS;AHk+Gf;;A+BtxGA;EAwCI,YAAY;EACZ,sB5BmIgC;E4BlIhC,sBAAsB;A/BkvG1B;;A+B5xGA;EA8CI,c5BpPc;E4BqPd,yB5BzPc;AH2+GlB;;A+BjyGA;EAoDI,aAAa;A/BivGjB;;A+B7uGA;EACE,kC5BmOqI;E4BlOrI,oB5B2HkC;E4B1HlC,uB5B0HkC;E4BzHlC,oB5B0HiC;EC1Q7B,mBAtCY;AJu6GlB;;A+B7uGA;EACE,gC5B4NqI;E4B3NrI,mB5BwHiC;E4BvHjC,sB5BuHiC;E4BtHjC,kB5BuHgC;EC/Q5B,kBAtCY;AJ+6GlB;;A+BxuGA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,WAAW;EACX,mC5B0M2H;E4BzM3H,gBAAgB;A/B2uGlB;;A+BxuGA;EACE,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,mC5BkM2H;E4BjM3H,SAAS;EACT,UAAU;A/B2uGZ;;A+BjvGA;EASI,qB5B+KsE;E4B9KtE,gD5B9Qa;AH0/GjB;;A+BtvGA;EAcI,yB5B7Sc;AHyhHlB;;A+B1vGA;EAmBM,iB5BqUQ;AHs6Fd;;A+B9vGA;EAwBI,0BAA0B;A/B0uG9B;;A+BtuGA;EACE,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,OAAO;EACP,UAAU;EACV,mC5BoK2H;E4BnK3H,yB5BoDkC;E4BlDlC,gB5BlD+B;E4BmD/B,gB5B9C+B;E4B+C/B,c5BjUgB;E4BkUhB,sB5BzUa;E4B0Ub,yB5BtUgB;EONd,sBPqOgC;AHg1GpC;;A+BtvGA;EAkBI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,UAAU;EACV,cAAc;EACd,6B5B8I+F;E4B7I/F,yB5BkCgC;E4BjChC,gB5B9D6B;E4B+D7B,c5BjVc;E4BkVd,iBAAiB;ET1VjB,yBnBGc;E4ByVd,oBAAoB;ErB7VpB,kCqB8VgF;A/BwuGpF;;A+B9tGA;EACE,WAAW;EACX,2BAA+F;EAC/F,UAAU;EACV,6BAA6B;EAC7B,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/BiuGlB;;A+BtuGA;EAQI,aAAa;A/BkuGjB;;A+B1uGA;EAY8B,gE5BrVb;AHujHjB;;A+B9uGA;EAa8B,gE5BtVb;AH2jHjB;;A+BlvGA;EAc8B,gE5BvVb;AH+jHjB;;A+BtvGA;EAkBI,SAAS;A/BwuGb;;A+B1vGA;EAsBI,W5B8N6C;E4B7N7C,Y5B6N6C;E4B5N7C,oBAAyE;ET/XzE,yBnB8Ba;E4BmWb,S5B6N0C;EO/lB1C,mBPgmB6C;EiB/lB3C,4GjB8f+H;E4BzHjI,wBAAgB;EAAhB,gBAAgB;A/BuuGpB;;AoBvmHI;EWkWJ;IXjWM,gBAAgB;EpB2mHpB;AACF;;A+B3wGA;ETvWI,yBnBmmB2E;AHmhG/E;;A+B/wGA;EAsCI,W5BuMoC;E4BtMpC,c5BuMqC;E4BtMrC,kBAAkB;EAClB,e5BsMuC;E4BrMvC,yB5B7Yc;E4B8Yd,yBAAyB;ErBnZzB,mBPylBoC;AHwiGxC;;A+BzxGA;EAiDI,W5BmM6C;E4BlM7C,Y5BkM6C;EmB3lB7C,yBnB8Ba;E4B6Xb,S5BmM0C;EO/lB1C,mBPgmB6C;EiB/lB3C,4GjB8f+H;E4B/FjI,qBAAgB;EAAhB,gBAAgB;A/B2uGpB;;AoBroHI;EWkWJ;IXjWM,gBAAgB;EpByoHpB;AACF;;A+BzyGA;ETvWI,yBnBmmB2E;AHijG/E;;A+B7yGA;EAgEI,W5B6KoC;E4B5KpC,c5B6KqC;E4B5KrC,kBAAkB;EAClB,e5B4KuC;E4B3KvC,yB5Bvac;E4Bwad,yBAAyB;ErB7azB,mBPylBoC;AHskGxC;;A+BvzGA;EA2EI,W5ByK6C;E4BxK7C,Y5BwK6C;E4BvK7C,aAAa;EACb,oB5BvD+B;E4BwD/B,mB5BxD+B;EmB9X/B,yBnB8Ba;E4B0Zb,S5BsK0C;EO/lB1C,mBPgmB6C;EiB/lB3C,4GjB8f+H;E4BlEjI,gBAAgB;A/B+uGpB;;AoBtqHI;EWkWJ;IXjWM,gBAAgB;EpB0qHpB;AACF;;A+B10GA;ETvWI,yBnBmmB2E;AHklG/E;;A+B90GA;EA6FI,W5BgJoC;E4B/IpC,c5BgJqC;E4B/IrC,kBAAkB;EAClB,e5B+IuC;E4B9IvC,6BAA6B;EAC7B,yBAAyB;EACzB,oBAA4C;A/BqvGhD;;A+Bx1GA;EAwGI,yB5B3cc;EOLd,mBPylBoC;AH4mGxC;;A+B71GA;EA6GI,kBAAkB;EAClB,yB5Bjdc;EOLd,mBPylBoC;AHknGxC;;A+Bn2GA;EAoHM,yB5BrdY;AHwsHlB;;A+Bv2GA;EAwHM,eAAe;A/BmvGrB;;A+B32GA;EA4HM,yB5B7dY;AHgtHlB;;A+B/2GA;EAgIM,eAAe;A/BmvGrB;;A+Bn3GA;EAoIM,yB5BreY;AHwtHlB;;A+B9uGA;;;EXhfM,4GjB8f+H;AHsuGrI;;AoB/tHI;EW2eJ;;;IX1eM,gBAAgB;EpBquHpB;AACF;;AgC7uHA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,gBAAgB;AhCgvHlB;;AgC7uHA;EACE,cAAc;EACd,oB7BkqBsC;AH8kGxC;;AK/uHE;E2BEE,qBAAqB;AhCivHzB;;AgCtvHA;EAUI,c7BVc;E6BWd,oBAAoB;EACpB,eAAe;AhCgvHnB;;AgCxuHA;EACE,gC7BxBgB;AHmwHlB;;AgC5uHA;EAII,mB7BkM6B;AH0iHjC;;AgChvHA;EAQI,6BAAgD;EtB3BhD,+BP4NgC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9BzMS;AH+lIf;;AiCh7HA;EA+BI,yB9B9MW;E8B+MX,gC9B/MW;AHomIf;;AiCr7HA;EAoCI,wP9B6fsR;AHw5G1R;;AiCz7HA;EAwCI,yB9BvNW;AH4mIf;;AiC77HA;EA0CM,yB9BzNS;AHgnIf;;AKjnIE;E4B6NM,yB9B5NO;AHonIf;;AiCj5HA;EAEI,W9B/OW;AHkoIf;;AKznIE;E4ByOI,W9BlPS;AHsoIf;;AiCz5HA;EAWM,+B9BxPS;AH0oIf;;AKjoIE;E4BkPM,gC9B3PO;AH8oIf;;AiCj6HA;EAkBQ,gC9B/PO;AHkpIf;;AiCr6HA;;;;EA0BM,W9BvQS;AHypIf;;AiC56HA;EA+BI,+B9B5QW;E8B6QX,sC9B7QW;AH8pIf;;AiCj7HA;EAoCI,8P9BkcqR;AH+8GzR;;AiCr7HA;EAwCI,+B9BrRW;AHsqIf;;AiCz7HA;EA0CM,W9BvRS;AH0qIf;;AKjqIE;E4BiRM,W9B1RO;AH8qIf;;AkCjrIA;EACE,kBAAkB;EAClB,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EACtB,YAAY;EACZ,qBAAqB;EACrB,sB/BHa;E+BIb,2BAA2B;EAC3B,sC/BKa;EOZX,sBPqOgC;AHu9HpC;;AkC7rIA;EAYI,eAAe;EACf,cAAc;AlCqrIlB;;AkClsIA;ExBUI,+BP4NgC;EO3NhC,gCP2NgC;AHi+HpC;;AkCvsIA;ExBwBI,mCP8MgC;EO7MhC,kCP6MgC;AHs+HpC;;AkC/qIA;EAGE,kBAAc;EAAd,cAAc;EACd,gB/B+wByC;AHi6G3C;;AkC5qIA;EACE,sB/BywBwC;AHs6G1C;;AkC5qIA;EACE,qBAA+B;EAC/B,gBAAgB;AlC+qIlB;;AkC5qIA;EACE,gBAAgB;AlC+qIlB;;AKttIE;E6B4CE,qBAAqB;AlC8qIzB;;AkChrIA;EAMI,oB/BwvBuC;AHs7G3C;;AkCtqIA;EACE,wB/B+uByC;E+B9uBzC,gBAAgB;EAEhB,qC/BvDa;E+BwDb,6C/BxDa;AHguIf;;AkC7qIA;ExB/DI,0DwBuE8E;AlCyqIlF;;AkCjrIA;EAaM,aAAa;AlCwqInB;;AkCnqIA;EACE,wB/B6tByC;E+B5tBzC,qC/BvEa;E+BwEb,0C/BxEa;AH8uIf;;AkCzqIA;ExBjFI,0DPmzBoF;AH28GxF;;AkC9pIA;EACE,uBAAiC;EACjC,uB/B4sBwC;E+B3sBxC,sBAAgC;EAChC,gBAAgB;AlCiqIlB;;AkC9pIA;EACE,uBAAiC;EACjC,sBAAgC;AlCiqIlC;;AkC7pIA;EACE,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,OAAO;EACP,gB/BssByC;AH09G3C;;AkC7pIA;EACE,WAAW;ExBvHT,kCPmzBoF;AHq+GxF;;AkC5pIA;EACE,WAAW;ExBpHT,2CP0yBoF;EOzyBpF,4CPyyBoF;AH2+GxF;;AkC7pIA;EACE,WAAW;ExB3GT,+CP4xBoF;EO3xBpF,8CP2xBoF;AHi/GxF;;AkC3pIA;EACE,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;AlC8pIxB;;AkChqIA;EAKI,mB/B6qBsD;AHk/G1D;;ActvII;EoBkFJ;IASI,uBAAmB;IAAnB,mBAAmB;IACnB,mB/BwqBsD;I+BvqBtD,kB/BuqBsD;EHy/GxD;EkC3qIF;IAcM,oBAAa;IAAb,aAAa;IAEb,gBAAY;IAAZ,YAAY;IACZ,0BAAsB;IAAtB,sBAAsB;IACtB,kB/BgqBoD;I+B/pBpD,gBAAgB;IAChB,iB/B8pBoD;EHigHxD;AACF;;AkCtpIA;EACE,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;AlCypIxB;;AkC3pIA;EAOI,mB/B6oBsD;AH2gH1D;;Ac/wII;EoBgHJ;IAWI,uBAAmB;IAAnB,mBAAmB;ElCypIrB;EkCpqIF;IAgBM,gBAAY;IAAZ,YAAY;IACZ,gBAAgB;ElCupIpB;EkCxqIF;IAoBQ,cAAc;IACd,cAAc;ElCupIpB;EkC5qIF;IxBvJI,0BwBkLoC;IxBjLpC,6BwBiLoC;ElCqpItC;EkChrIF;;IAgCY,0BAA0B;ElCopIpC;EkCprIF;;IAqCY,6BAA6B;ElCmpIvC;EkCxrIF;IxBzII,yBwBmLmC;IxBlLnC,4BwBkLmC;ElCkpIrC;EkC5rIF;;IA+CY,yBAAyB;ElCipInC;EkChsIF;;IAoDY,4BAA4B;ElCgpItC;AACF;;AkCpoIA;EAEI,sB/BokBsC;AHkkH1C;;AczzII;EoBiLJ;IAMI,uB/BglBiC;I+BhlBjC,oB/BglBiC;I+BhlBjC,e/BglBiC;I+B/kBjC,2B/BglBuC;I+BhlBvC,wB/BglBuC;I+BhlBvC,mB/BglBuC;I+B/kBvC,UAAU;IACV,SAAS;ElCuoIX;EkChpIF;IAYM,qBAAqB;IACrB,WAAW;ElCuoIf;AACF;;AkC9nIA;EAEI,gBAAgB;AlCgoIpB;;AkCloIA;ExB/PI,gBwBqQ4B;AlCgoIhC;;AkCtoIA;EAUQ,gBAAgB;ExBzQpB,gBwB0Q4B;AlCgoIhC;;AkC3oIA;EAgBM,gBAAgB;ExBxPlB,6BwByPiC;ExBxPjC,4BwBwPiC;AlCgoIrC;;AkCjpIA;ExBtPI,yBwB2Q8B;ExB1Q9B,0BwB0Q8B;AlCioIlC;;AkCtpIA;EAyBM,mB/BtD2B;AHurIjC;;AmC95IA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,qBhC2gCsC;EgC1gCtC,mBhC6gCsC;EgC5gCtC,gBAAgB;EAChB,yBhCGgB;EOJd,sBPqOgC;AH8rIpC;;AmC95IA;EAGI,oBhCkgCqC;AH65GzC;;AmCl6IA;EAMM,qBAAqB;EACrB,qBhC8/BmC;EgC7/BnC,chCLY;EgCMZ,YhCmgCuC;AH65G7C;;AmCz6IA;EAoBI,0BAA0B;AnCy5I9B;;AmC76IA;EAwBI,qBAAqB;AnCy5IzB;;AmCj7IA;EA4BI,chCzBc;AHk7IlB;;AoC/7IA;EACE,oBAAa;EAAb,aAAa;E7BGb,eAAe;EACf,gBAAgB;EGAd,sBPqOgC;AH4tIpC;;AoCh8IA;EACE,kBAAkB;EAClB,cAAc;EACd,uBjCqwBwC;EiCpwBxC,iBjC6N+B;EiC5N/B,iBjCwwBsC;EiCvwBtC,cjCwBe;EiCvBf,sBjCNa;EiCOb,yBjCJgB;AHu8IlB;;AoC38IA;EAWI,UAAU;EACV,cjC2J8D;EiC1J9D,qBAAqB;EACrB,yBjCXc;EiCYd,qBjCXc;AH+8IlB;;AoCn9IA;EAmBI,UAAU;EACV,UjCiwBiC;EiChwBjC,gDjCSa;AH27IjB;;AoCh8IA;EAGM,cAAc;E1BChB,+BPuMgC;EOtMhC,kCPsMgC;AH2vIpC;;AoCt8IA;E1BVI,gCPqNgC;EOpNhC,mCPoNgC;AHgwIpC;;AoC38IA;EAcI,UAAU;EACV,WjCvCW;EiCwCX,yBjCXa;EiCYb,qBjCZa;AH68IjB;;AoCl9IA;EAqBI,cjCvCc;EiCwCd,oBAAoB;EAEpB,YAAY;EACZ,sBjCjDW;EiCkDX,qBjC/Cc;AH++IlB;;AqCt/IE;EACE,uBlC8wBsC;ECnpBpC,kBAtCY;EiCnFd,gBlC8N6B;AH2xIjC;;AqCp/IM;E3BwBF,8BPwM+B;EOvM/B,iCPuM+B;AHyxInC;;AqCp/IM;E3BKF,+BPsN+B;EOrN/B,kCPqN+B;AH8xInC;;AqCtgJE;EACE,uBlC4wBqC;ECjpBnC,mBAtCY;EiCnFd,gBlC+N6B;AH0yIjC;;AqCpgJM;E3BwBF,8BPyM+B;EOxM/B,iCPwM+B;AHwyInC;;AqCpgJM;E3BKF,+BPuN+B;EOtN/B,kCPsN+B;AH6yInC;;AsCphJA;EACE,qBAAqB;EACrB,qBnC24BsC;EC10BpC,cAAW;EkC/Db,gBnCmR+B;EmClR/B,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,wBAAwB;E5BRtB,sBPqOgC;EiBpO9B,qIjBqb6I;AH2mInJ;;AoB3hJI;EkBNJ;IlBOM,gBAAgB;EpB+hJpB;AACF;;AK5hJE;EiCGI,qBAAqB;AtC6hJ3B;;AsC3iJA;EAoBI,aAAa;AtC2hJjB;;AsCthJA;EACE,kBAAkB;EAClB,SAAS;AtCyhJX;;AsClhJA;EACE,oBnCg3BsC;EmC/2BtC,mBnC+2BsC;EOn5BpC,oBPs5BqC;AHoqHzC;;AsC7gJE;ECjDA,WpCMa;EoCLb,yBpCkCe;AHgiJjB;;AKpjJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCkkJxC;;AuCrkJU;EAQJ,UAAU;EACV,+CpCuBW;AH0iJjB;;AsC5hJE;ECjDA,WpCMa;EoCLb,yBpCWgB;AHskJlB;;AKnkJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCilJxC;;AuCplJU;EAQJ,UAAU;EACV,iDpCAY;AHglJlB;;AsC3iJE;ECjDA,WpCMa;EoCLb,yBpCyCe;AHujJjB;;AKllJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCgmJxC;;AuCnmJU;EAQJ,UAAU;EACV,+CpC8BW;AHikJjB;;AsC1jJE;ECjDA,WpCMa;EoCLb,yBpC2Ce;AHokJjB;;AKjmJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC+mJxC;;AuClnJU;EAQJ,UAAU;EACV,gDpCgCW;AH8kJjB;;AsCzkJE;ECjDA,cpCegB;EoCdhB,yBpCwCe;AHslJjB;;AKhnJE;EkCVI,cpCUY;EoCTZ,yBAAkC;AvC8nJxC;;AuCjoJU;EAQJ,UAAU;EACV,+CpC6BW;AHgmJjB;;AsCxlJE;ECjDA,WpCMa;EoCLb,yBpCsCe;AHumJjB;;AK/nJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC6oJxC;;AuChpJU;EAQJ,UAAU;EACV,+CpC2BW;AHinJjB;;AsCvmJE;ECjDA,cpCegB;EoCdhB,yBpCMgB;AHspJlB;;AK9oJE;EkCVI,cpCUY;EoCTZ,yBAAkC;AvC4pJxC;;AuC/pJU;EAQJ,UAAU;EACV,iDpCLY;AHgqJlB;;AsCtnJE;ECjDA,WpCMa;EoCLb,yBpCagB;AH8pJlB;;AK7pJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC2qJxC;;AuC9qJU;EAQJ,UAAU;EACV,8CpCEY;AHwqJlB;;AwCvrJA;EACE,kBAAoD;EACpD,mBrC0yBsC;EqCxyBtC,yBrCKgB;EOJd,qBPsO+B;AHm9InC;;AcloJI;E0B5DJ;IAQI,kBrCoyBoC;EHu5HtC;AACF;;AwCxrJA;EACE,gBAAgB;EAChB,eAAe;E9BTb,gB8BUsB;AxC2rJ1B;;AyCtsJA;EACE,kBAAkB;EAClB,wBtCm8ByC;EsCl8BzC,mBtCm8BsC;EsCl8BtC,6BAA6C;E/BH3C,sBPqOgC;AHw+IpC;;AyCrsJA;EAEE,cAAc;AzCusJhB;;AyCnsJA;EACE,gBtCwQ+B;AH87IjC;;AyC9rJA;EACE,mBAAsD;AzCisJxD;;AyClsJA;EAKI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,wBtCq6BuC;EsCp6BvC,cAAc;AzCisJlB;;AyCvrJE;EC9CA,cxBmFgE;EI9E9D,yBJ8E8D;EwBjFhE,qBxBiFgE;AlBwpJlE;;A0CvuJE;EACE,yBAAqC;A1C0uJzC;;A0CvuJE;EACE,cAA0B;A1C0uJ9B;;AyCrsJE;EC9CA,cxBmFgE;EI9E9D,yBJ8E8D;EwBjFhE,qBxBiFgE;AlBsqJlE;;A0CrvJE;EACE,yBAAqC;A1CwvJzC;;A0CrvJE;EACE,cAA0B;A1CwvJ9B;;AyCntJE;EC9CA,cxBmFgE;EI9E9D,yBJ8E8D;EwBjFhE,qBxBiFgE;AlBorJlE;;A0CnwJE;EACE,yBAAqC;A1CswJzC;;A0CnwJE;EACE,cAA0B;A1CswJ9B;;AyCjuJE;EC9CA,cxBmFgE;EI9E9D,yBJ8E8D;EwBjFhE,qBxBiFgE;AlBksJlE;;A0CjxJE;EACE,yBAAqC;A1CoxJzC;;A0CjxJE;EACE,cAA0B;A1CoxJ9B;;AyC/uJE;EC9CA,cxBmFgE;EI9E9D,yBJ8E8D;EwBjFhE,qBxBiFgE;AlBgtJlE;;A0C/xJE;EACE,yBAAqC;A1CkyJzC;;A0C/xJE;EACE,cAA0B;A1CkyJ9B;;AyC7vJE;EC9CA,cxBmFgE;EI9E9D,yBJ8E8D;EwBjFhE,qBxBiFgE;AlB8tJlE;;A0C7yJE;EACE,yBAAqC;A1CgzJzC;;A0C7yJE;EACE,cAA0B;A1CgzJ9B;;AyC3wJE;EC9CA,cxBmFgE;EI9E9D,yBJ8E8D;EwBjFhE,qBxBiFgE;AlB4uJlE;;A0C3zJE;EACE,yBAAqC;A1C8zJzC;;A0C3zJE;EACE,cAA0B;A1C8zJ9B;;AyCzxJE;EC9CA,cxBmFgE;EI9E9D,yBJ8E8D;EwBjFhE,qBxBiFgE;AlB0vJlE;;A0Cz0JE;EACE,yBAAqC;A1C40JzC;;A0Cz0JE;EACE,cAA0B;A1C40J9B;;A2Cp1JE;EACE;IAAO,2BAAuC;E3Cw1JhD;E2Cv1JE;IAAK,wBAAwB;E3C01J/B;AACF;;A2C71JE;EACE;IAAO,2BAAuC;E3Cw1JhD;E2Cv1JE;IAAK,wBAAwB;E3C01J/B;AACF;;A2Cv1JA;EACE,oBAAa;EAAb,aAAa;EACb,YxC48BsC;EwC38BtC,gBAAgB;EvCoHZ,kBAtCY;EuC5EhB,yBxCJgB;EOJd,sBPqOgC;AH8nJpC;;A2Ct1JA;EACE,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EACtB,qBAAuB;EAAvB,uBAAuB;EACvB,WxCfa;EwCgBb,kBAAkB;EAClB,mBAAmB;EACnB,yBxCWe;EiB9BX,2BjBw9B4C;AHq5HlD;;AoBx2JI;EuBOJ;IvBNM,gBAAgB;EpB42JpB;AACF;;A2C51JA;ErBcE,qMAA6I;EqBZ7I,0BxCu7BsC;AHw6HxC;;A2C31JE;EACE,0DxCy7BkD;EwCz7BlD,kDxCy7BkD;AHq6HtD;;A2C51JI;EAHF;IAII,uBAAe;IAAf,eAAe;E3Cg2JnB;AACF;;A4Cx4JA;EACE,oBAAa;EAAb,aAAa;EACb,qBAAuB;EAAvB,uBAAuB;A5C24JzB;;A4Cx4JA;EACE,WAAO;EAAP,OAAO;A5C24JT;;A6C74JA;EACE,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EAGtB,eAAe;EACf,gBAAgB;A7C84JlB;;A6Cr4JA;EACE,WAAW;EACX,c1CPgB;E0CQhB,mBAAmB;A7Cw4JrB;;AK94JE;EwCUE,UAAU;EACV,c1Cbc;E0Ccd,qBAAqB;EACrB,yB1CrBc;AH65JlB;;A6Cl5JA;EAcI,c1CjBc;E0CkBd,yB1CzBc;AHi6JlB;;A6C/3JA;EACE,kBAAkB;EAClB,cAAc;EACd,wB1C47ByC;E0C17BzC,mB1CuL+B;E0CrL/B,sB1C3Ca;E0C4Cb,sC1ClCa;AHk6Jf;;A6Cx4JA;EnC7BI,+BP4NgC;EO3NhC,gCP2NgC;AH8sJpC;;A6C74JA;EAeI,gBAAgB;EnC9BhB,mCP8MgC;EO7MhC,kCP6MgC;AHotJpC;;A6Cn5JA;EAqBI,c1CnDc;E0CoDd,oBAAoB;EACpB,sB1C3DW;AH67Jf;;A6Cz5JA;EA4BI,UAAU;EACV,W1CjEW;E0CkEX,yB1CrCa;E0CsCb,qB1CtCa;AHu6JjB;;A6Cp3JI;EACE,uBAAmB;EAAnB,mBAAmB;A7Cu3JzB;;A6Cx3JI;EAII,kB1C4IyB;E0C3IzB,gBAAgB;A7Cw3JxB;;A6C73JI;EnCpDA,+BPuMgC;EOtMhC,kCPsMgC;EO1LhC,0BmCgDwC;A7C03J5C;;A6Cn4JI;EAaM,eAAe;EnC/ErB,gCPqNgC;EOpNhC,mCPoNgC;EO9KhC,4BmC0C0C;A7C23J9C;;Acr6JI;E+B2BA;IACE,uBAAmB;IAAnB,mBAAmB;E7C84JvB;E6C/4JE;IAII,kB1C4IyB;I0C3IzB,gBAAgB;E7C84JtB;E6Cn5JE;InCpDA,+BPuMgC;IOtMhC,kCPsMgC;IO1LhC,0BmCgDwC;E7C+4J1C;E6Cx5JE;IAaM,eAAe;InC/ErB,gCPqNgC;IOpNhC,mCPoNgC;IO9KhC,4BmC0C0C;E7C+4J5C;AACF;;Ac17JI;E+B2BA;IACE,uBAAmB;IAAnB,mBAAmB;E7Cm6JvB;E6Cp6JE;IAII,kB1C4IyB;I0C3IzB,gBAAgB;E7Cm6JtB;E6Cx6JE;InCpDA,+BPuMgC;IOtMhC,kCPsMgC;IO1LhC,0BmCgDwC;E7Co6J1C;E6C76JE;IAaM,eAAe;InC/ErB,gCPqNgC;IOpNhC,mCPoNgC;IO9KhC,4BmC0C0C;E7Co6J5C;AACF;;Ac/8JI;E+B2BA;IACE,uBAAmB;IAAnB,mBAAmB;E7Cw7JvB;E6Cz7JE;IAII,kB1C4IyB;I0C3IzB,gBAAgB;E7Cw7JtB;E6C77JE;InCpDA,+BPuMgC;IOtMhC,kCPsMgC;IO1LhC,0BmCgDwC;E7Cy7J1C;E6Cl8JE;IAaM,eAAe;InC/ErB,gCPqNgC;IOpNhC,mCPoNgC;IO9KhC,4BmC0C0C;E7Cy7J5C;AACF;;Acp+JI;E+B2BA;IACE,uBAAmB;IAAnB,mBAAmB;E7C68JvB;E6C98JE;IAII,kB1C4IyB;I0C3IzB,gBAAgB;E7C68JtB;E6Cl9JE;InCpDA,+BPuMgC;IOtMhC,kCPsMgC;IO1LhC,0BmCgDwC;E7C88J1C;E6Cv9JE;IAaM,eAAe;InC/ErB,gCPqNgC;IOpNhC,mCPoNgC;IO9KhC,4BmC0C0C;E7C88J5C;AACF;;A6Cl8JA;EAEI,eAAe;EACf,cAAc;EnCjHd,gBmCkHwB;A7Co8J5B;;A6Cx8JA;EAOM,mB1C6G2B;AHw1JjC;;A6C58JA;EAaM,aAAa;A7Cm8JnB;;A6Ch9JA;EAmBM,gBAAgB;EAChB,gBAAgB;A7Ci8JtB;;A8CrkKE;EACE,c5BgF8D;E4B/E9D,yB5B+E8D;AlBy/JlE;;AK7jKE;EyCPM,c5B2E0D;E4B1E1D,yBAAyC;A9CwkKjD;;A8C/kKE;EAWM,W3CPO;E2CQP,yB5BqE0D;E4BpE1D,qB5BoE0D;AlBogKlE;;A8CrlKE;EACE,c5BgF8D;E4B/E9D,yB5B+E8D;AlBygKlE;;AK7kKE;EyCPM,c5B2E0D;E4B1E1D,yBAAyC;A9CwlKjD;;A8C/lKE;EAWM,W3CPO;E2CQP,yB5BqE0D;E4BpE1D,qB5BoE0D;AlBohKlE;;A8CrmKE;EACE,c5BgF8D;E4B/E9D,yB5B+E8D;AlByhKlE;;AK7lKE;EyCPM,c5B2E0D;E4B1E1D,yBAAyC;A9CwmKjD;;A8C/mKE;EAWM,W3CPO;E2CQP,yB5BqE0D;E4BpE1D,qB5BoE0D;AlBoiKlE;;A8CrnKE;EACE,c5BgF8D;E4B/E9D,yB5B+E8D;AlByiKlE;;AK7mKE;EyCPM,c5B2E0D;E4B1E1D,yBAAyC;A9CwnKjD;;A8C/nKE;EAWM,W3CPO;E2CQP,yB5BqE0D;E4BpE1D,qB5BoE0D;AlBojKlE;;A8CroKE;EACE,c5BgF8D;E4B/E9D,yB5B+E8D;AlByjKlE;;AK7nKE;EyCPM,c5B2E0D;E4B1E1D,yBAAyC;A9CwoKjD;;A8C/oKE;EAWM,W3CPO;E2CQP,yB5BqE0D;E4BpE1D,qB5BoE0D;AlBokKlE;;A8CrpKE;EACE,c5BgF8D;E4B/E9D,yB5B+E8D;AlBykKlE;;AK7oKE;EyCPM,c5B2E0D;E4B1E1D,yBAAyC;A9CwpKjD;;A8C/pKE;EAWM,W3CPO;E2CQP,yB5BqE0D;E4BpE1D,qB5BoE0D;AlBolKlE;;A8CrqKE;EACE,c5BgF8D;E4B/E9D,yB5B+E8D;AlBylKlE;;AK7pKE;EyCPM,c5B2E0D;E4B1E1D,yBAAyC;A9CwqKjD;;A8C/qKE;EAWM,W3CPO;E2CQP,yB5BqE0D;E4BpE1D,qB5BoE0D;AlBomKlE;;A8CrrKE;EACE,c5BgF8D;E4B/E9D,yB5B+E8D;AlBymKlE;;AK7qKE;EyCPM,c5B2E0D;E4B1E1D,yBAAyC;A9CwrKjD;;A8C/rKE;EAWM,W3CPO;E2CQP,yB5BqE0D;E4BpE1D,qB5BoE0D;AlBonKlE;;A+CxsKA;EACE,YAAY;E3C8HR,iBAtCY;E2CtFhB,gB5CyR+B;E4CxR/B,cAAc;EACd,W5CYa;E4CXb,yB5CCa;E4CAb,WAAW;A/C2sKb;;AKtsKE;E0CDE,W5CMW;E4CLX,qBAAqB;A/C2sKzB;;AKvsKE;E0CCI,YAAY;A/C0sKlB;;A+C/rKA;EACE,UAAU;EACV,6BAA6B;EAC7B,SAAS;EACT,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/CksKlB;;A+C5rKA;EACE,oBAAoB;A/C+rKtB;;AgDtuKA;EACE,gB7C43BuC;E6C33BvC,gBAAgB;E5C6HZ,mBAtCY;E4CpFhB,2C7CEa;E6CDb,4BAA4B;EAC5B,oC7C63BmD;E6C53BnD,gD7CSa;E6CRb,mCAA2B;EAA3B,2BAA2B;EAC3B,UAAU;EtCLR,sBPg4BsC;AH82I1C;;AgDnvKA;EAcI,sB7Cg3BsC;AHy3I1C;;AgDvvKA;EAkBI,UAAU;AhDyuKd;;AgD3vKA;EAsBI,cAAc;EACd,UAAU;AhDyuKd;;AgDhwKA;EA2BI,aAAa;AhDyuKjB;;AgDruKA;EACE,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;EACnB,wB7C41BwC;E6C31BxC,c7CtBgB;E6CuBhB,2C7C7Ba;E6C8Bb,4BAA4B;EAC5B,4C7Co2BoD;AHo4ItD;;AgDruKA;EACE,gB7Co1BwC;AHo5I1C;;AiD5wKA;EAEE,gBAAgB;AjD8wKlB;;AiDhxKA;EAKI,kBAAkB;EAClB,gBAAgB;AjD+wKpB;;AiD1wKA;EACE,eAAe;EACf,MAAM;EACN,OAAO;EACP,a9CopBsC;E8CnpBtC,aAAa;EACb,WAAW;EACX,YAAY;EACZ,gBAAgB;EAGhB,UAAU;AjD2wKZ;;AiDpwKA;EACE,kBAAkB;EAClB,WAAW;EACX,c9C63BuC;E8C33BvC,oBAAoB;AjDswKtB;;AiDnwKE;E7BrCI,2CjB27BoD;EiB37BpD,mCjB27BoD;EiB37BpD,oEjB27BoD;E8Cp5BtD,sC9Ck5BmD;E8Cl5BnD,8B9Ck5BmD;AHo3IvD;;AoBxyKI;E6BgCF;I7B/BI,gBAAgB;EpB4yKpB;AACF;;AiD1wKE;EACE,uB9Cg5BoC;E8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hLf;;AkD3+KA;EACE,iBAAgC;AlD8+KlC;;AkD/+KA;EAII,MAAM;AlD++KV;;AkDn/KA;EAOM,SAAS;EACT,6B/CgxBmC;E+C/wBnC,yB/CrDS;AHqiLf;;AkD3+KA;EACE,iB/CywBuC;AHquJzC;;AkD/+KA;EAII,QAAQ;EACR,a/CqwBqC;E+CpwBrC,c/CmwBqC;AH4uJzC;;AkDr/KA;EASM,OAAO;EACP,oC/CgwBmC;E+C/vBnC,uB/CrES;AHqjLf;;AkD39KA;EACE,gB/C+tBuC;E+C9tBvC,uB/CouBuC;E+CnuBvC,W/CvGa;E+CwGb,kBAAkB;EAClB,sB/C/Fa;EOZX,sBPqOgC;AHq2KpC;;AoD/kLA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,ajDsqBsC;EiDrqBtC,cAAc;EACd,gBjD+1BuC;EgDp2BvC,kMhD+QiN;EgD7QjN,kBAAkB;EAClB,gBhDuR+B;EgDtR/B,gBhD2R+B;EgD1R/B,gBAAgB;EAChB,iBAAiB;EACjB,qBAAqB;EACrB,iBAAiB;EACjB,oBAAoB;EACpB,sBAAsB;EACtB,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,gBAAgB;E/CgHZ,mBAtCY;EgD7EhB,qBAAqB;EACrB,sBjDNa;EiDOb,4BAA4B;EAC5B,oCjDEa;EOZX,qBPsO+B;AHi4KnC;;AoD5mLA;EAoBI,kBAAkB;EAClB,cAAc;EACd,WjD81BoC;EiD71BpC,cjD81BqC;EiD71BrC,gBjDmN+B;AHy4KnC;;AoDpnLA;EA4BM,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,yBAAyB;EACzB,mBAAmB;ApD4lLzB;;AoDvlLA;EACE,qBjD+0BuC;AH2wJzC;;AoD3lLA;EAII,iCAAwE;ApD2lL5E;;AoD/lLA;EAOM,SAAS;EACT,6BAAgE;EAChE,qCjD00BiE;AHkxJvE;;AoDrmLA;EAaM,WjDqL2B;EiDpL3B,6BAAgE;EAChE,sBjD7CS;AHyoLf;;AoDvlLA;EACE,mBjD2zBuC;AH+xJzC;;AoD3lLA;EAII,+BAAsE;EACtE,ajDuzBqC;EiDtzBrC,YjDqzBoC;EiDpzBpC,gBAA2B;ApD2lL/B;;AoDlmLA;EAUM,OAAO;EACP,oCAA2F;EAC3F,uCjDmzBiE;AHyyJvE;;AoDxmLA;EAgBM,SjD8J2B;EiD7J3B,oCAA2F;EAC3F,wBjDpES;AHgqLf;;AoDvlLA;EACE,kBjDoyBuC;AHszJzC;;AoD3lLA;EAII,8BAAqE;ApD2lLzE;;AoD/lLA;EAOM,MAAM;EACN,oCAA2F;EAC3F,wCjD+xBiE;AH6zJvE;;AoDrmLA;EAaM,QjD0I2B;EiDzI3B,oCAA2F;EAC3F,yBjDxFS;AHorLf;;AoD3mLA;EAqBI,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,cAAc;EACd,WjD2wBoC;EiD1wBpC,oBAAsC;EACtC,WAAW;EACX,gCjD+vBuD;AH21J3D;;AoDtlLA;EACE,oBjDowBuC;AHq1JzC;;AoD1lLA;EAII,gCAAuE;EACvE,ajDgwBqC;EiD/vBrC,YjD8vBoC;EiD7vBpC,gBAA2B;ApD0lL/B;;AoDjmLA;EAUM,QAAQ;EACR,oCjD0vBmC;EiDzvBnC,sCjD4vBiE;AH+1JvE;;AoDvmLA;EAgBM,UjDuG2B;EiDtG3B,oCjDovBmC;EiDnvBnC,uBjD3HS;AHstLf;;AoDrkLA;EACE,uBjDqtBwC;EiDptBxC,gBAAgB;EhD3BZ,eAtCY;EgDoEhB,yBjD8sByD;EiD7sBzD,gCAAyE;E1ChJvE,0C0CiJyE;E1ChJzE,2C0CgJyE;ApDwkL7E;;AoD/kLA;EAWI,aAAa;ApDwkLjB;;AoDpkLA;EACE,uBjDssBwC;EiDrsBxC,cjDzJgB;AHguLlB;;AqDnuLA;EACE,kBAAkB;ArDsuLpB;;AqDnuLA;EACE,uBAAmB;EAAnB,mBAAmB;ArDsuLrB;;AqDnuLA;EACE,kBAAkB;EAClB,WAAW;EACX,gBAAgB;ArDsuLlB;;AsD7vLE;EACE,cAAc;EACd,WAAW;EACX,WAAW;AtDgwLf;;AqDxuLA;EACE,kBAAkB;EAClB,aAAa;EACb,WAAW;EACX,WAAW;EACX,mBAAmB;EACnB,mCAA2B;EAA3B,2BAA2B;EjC5BvB,8CjB6iCkF;EiB7iClF,sCjB6iCkF;EiB7iClF,0EjB6iCkF;AH2tJxF;;AoBnwLI;EiCiBJ;IjChBM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E,oCAAmC;AzD4/LvC;;AKl/LE;;;EoDLI,oCAAgD;AzD6/LtD;;AyDngME;EACE,oCAAmC;AzDsgMvC;;AK5/LE;;;EoDLI,oCAAgD;AzDugMtD;;AyD7gME;EACE,oCAAmC;AzDghMvC;;AKtgME;;;EoDLI,oCAAgD;AzDihMtD;;AyDvhME;EACE,oCAAmC;AzD0hMvC;;AKhhME;;;EoDLI,oCAAgD;AzD2hMtD;;AyDjiME;EACE,oCAAmC;AzDoiMvC;;AK1hME;;;EoDLI,oCAAgD;AzDqiMtD;;AyD3iME;EACE,oCAAmC;AzD8iMvC;;AKpiME;;;EoDLI,oCAAgD;AzD+iMtD;;AyDrjME;EACE,oCAAmC;AzDwjMvC;;AK9iME;;;EoDLI,oCAAgD;AzDyjMtD;;A0DxjMA;EACE,iCAAmC;A1D2jMrC;;A0DxjMA;EACE,wCAAwC;A1D2jM1C;;A2DtkMA;EAAkB,oCAAoD;A3D0kMtE;;A2DzkMA;EAAkB,wCAAwD;A3D6kM1E;;A2D5kMA;EAAkB,0CAA0D;A3DglM5E;;A2D/kMA;EAAkB,2CAA2D;A3DmlM7E;;A2DllMA;EAAkB,yCAAyD;A3DslM3E;;A2DplMA;EAAmB,oBAAoB;A3DwlMvC;;A2DvlMA;EAAmB,wBAAwB;A3D2lM3C;;A2D1lMA;EAAmB,0BAA0B;A3D8lM7C;;A2D7lMA;EAAmB,2BAA2B;A3DimM9C;;A2DhmMA;EAAmB,yBAAyB;A3DomM5C;;A2DjmME;EACE,gCAA+B;A3DomMnC;;A2DrmME;EACE,gCAA+B;A3DwmMnC;;A2DzmME;EACE,gCAA+B;A3D4mMnC;;A2D7mME;EACE,gCAA+B;A3DgnMnC;;A2DjnME;EACE,gCAA+B;A3DonMnC;;A2DrnME;EACE,gCAA+B;A3DwnMnC;;A2DznME;EACE,gCAA+B;A3D4nMnC;;A2D7nME;EACE,gCAA+B;A3DgoMnC;;A2D5nMA;EACE,6BAA+B;A3D+nMjC;;A2DxnMA;EACE,gCAA2C;A3D2nM7C;;A2DxnMA;EACE,iCAAwC;A3D2nM1C;;A2DxnMA;EACE,0CAAiD;EACjD,2CAAkD;A3D2nMpD;;A2DxnMA;EACE,2CAAkD;EAClD,8CAAqD;A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tOhD;;AuEjuOQ;EAAgC,yBAA4B;AvEquOpE;;AuEpuOQ;;EAEE,6BAAoC;AvEuuO9C;;AuEruOQ;;EAEE,+BAAwC;AvEwuOlD;;AuEtuOQ;;EAEE,gCAA0C;AvEyuOpD;;AuEvuOQ;;EAEE,8BAAsC;AvE0uOhD;;AuEzvOQ;EAAgC,uBAA4B;AvE6vOpE;;AuE5vOQ;;EAEE,2BAAoC;AvE+vO9C;;AuE7vOQ;;EAEE,6BAAwC;AvEgwOlD;;AuE9vOQ;;EAEE,8BAA0C;AvEiwOpD;;AuE/vOQ;;EAEE,4BAAsC;AvEkwOhD;;AuEjxOQ;EAAgC,yBAA4B;AvEqxOpE;;AuEpxOQ;;EAEE,6BAAoC;AvEuxO9C;;AuErxOQ;;EAEE,+BAAwC;AvEwxOlD;;AuEtxOQ;;EAEE,gCAA0C;AvEyxOpD;;AuEvxOQ;;EAEE,8BAAsC;AvE0xOhD;;AuEzyOQ;EAAgC,uBAA4B;AvE6yOpE;;AuE5yOQ;;EAEE,2BAAoC;AvE+yO9C;;AuE7yOQ;;EAEE,6BAAwC;AvEgzOlD;;AuE9yOQ;;EAEE,8BAA0C;AvEizOpD;;AuE/yOQ;;EAEE,4BAAsC;AvEkzOhD;;AuEj0OQ;EAAgC,qBAA4B;AvEq0OpE;;AuEp0OQ;;EAEE,yBAAoC;AvEu0O9C;;AuEr0OQ;;EAEE,2BAAwC;AvEw0OlD;;AuEt0OQ;;EAEE,4BAA0C;AvEy0OpD;;AuEv0OQ;;EAEE,0BAAsC;AvE00OhD;;AuEz1OQ;EAAgC,2BAA4B;AvE61OpE;;AuE51OQ;;EAEE,+BAAoC;AvE+1O9C;;AuE71OQ;;EAEE,iCAAwC;AvEg2OlD;;AuE91OQ;;EAEE,kCAA0C;AvEi2OpD;;AuE/1OQ;;EAEE,gCAAsC;AvEk2OhD;;AuEj3OQ;EAAgC,0BAA4B;AvEq3OpE;;AuEp3OQ;;EAEE,8BAAoC;AvEu3O9C;;AuEr3OQ;;EAEE,gCAAwC;AvEw3OlD;;AuEt3OQ;;EAEE,iCAA0C;AvEy3OpD;;AuEv3OQ;;EAEE,+BAAsC;AvE03OhD;;AuEz4OQ;EAAgC,wBAA4B;AvE64OpE;;AuE54OQ;;EAEE,4BAAoC;AvE+4O9C;;AuE74OQ;;EAEE,8BAAwC;AvEg5OlD;;AuE94OQ;;EAEE,+BAA0C;AvEi5OpD;;AuE/4OQ;;EAEE,6BAAsC;AvEk5OhD;;AuEj6OQ;EAAgC,0BAA4B;AvEq6OpE;;AuEp6OQ;;EAEE,8BAAoC;AvEu6O9C;;AuEr6OQ;;EAEE,gCAAwC;AvEw6OlD;;AuEt6OQ;;EAEE,iCAA0C;AvEy6OpD;;AuEv6OQ;;EAEE,+BAAsC;AvE06OhD;;AuEz7OQ;EAAgC,wBAA4B;AvE67OpE;;AuE57OQ;;EAEE,4BAAoC;AvE+7O9C;;AuE77OQ;;EAEE,8BAAwC;AvEg8OlD;;AuE97OQ;;EAEE,+BAA0C;AvEi8OpD;;AuE/7OQ;;EAEE,6BAAsC;AvEk8OhD;;AuE17OQ;EAAwB,2BAA2B;AvE87O3D;;AuE77OQ;;EAEE,+BAA+B;AvEg8OzC;;AuE97OQ;;EAEE,iCAAiC;AvEi8O3C;;AuE/7OQ;;EAEE,kCAAkC;AvEk8O5C;;AuEh8OQ;;EAEE,gCAAgC;AvEm8O1C;;AuEl9OQ;EAAwB,0BAA2B;AvEs9O3D;;AuEr9OQ;;EAEE,8BAA+B;AvEw9OzC;;AuEt9OQ;;EAEE,gCAAiC;AvEy9O3C;;AuEv9OQ;;EAEE,iCAAkC;AvE09O5C;;AuEx9OQ;;EAEE,+BAAgC;AvE29O1C;;AuE1+OQ;EAAwB,wBAA2B;AvE8+O3D;;AuE7+OQ;;EAEE,4BAA+B;AvEg/OzC;;AuE9+OQ;;EAEE,8BAAiC;AvEi/O3C;;AuE/+OQ;;EAEE,+BAAkC;AvEk/O5C;;AuEh/OQ;;EAEE,6BAAgC;AvEm/O1C;;AuElgPQ;EAAwB,0BAA2B;AvEsgP3D;;AuErgPQ;;EAEE,8BAA+B;AvEwgPzC;;AuEtgPQ;;EAEE,gCAAiC;AvEygP3C;;AuEvgPQ;;EAEE,iCAAkC;AvE0gP5C;;AuExgPQ;;EAEE,+BAAgC;AvE2gP1C;;AuE1hPQ;EAAwB,wBAA2B;AvE8hP3D;;AuE7hPQ;;EAEE,4BAA+B;AvEgiPzC;;AuE9hPQ;;EAEE,8BAAiC;AvEiiP3C;;AuE/hPQ;;EAEE,+BAAkC;AvEkiP5C;;AuEhiPQ;;EAEE,6BAAgC;AvEmiP1C;;AuE7hPI;EAAmB,uBAAuB;AvEiiP9C;;AuEhiPI;;EAEE,2BAA2B;AvEmiPjC;;AuEjiPI;;EAEE,6BAA6B;AvEoiPnC;;AuEliPI;;EAEE,8BAA8B;AvEqiPpC;;AuEniPI;;EAEE,4BAA4B;AvEsiPlC;;Ac/iPI;EyDlDI;IAAgC,oBAA4B;EvEsmPlE;EuErmPM;;IAEE,wBAAoC;EvEumP5C;EuErmPM;;IAEE,0BAAwC;EvEumPhD;EuErmPM;;IAEE,2BAA0C;EvEumPlD;EuErmPM;;IAEE,yBAAsC;EvEumP9C;EuEtnPM;IAAgC,0BAA4B;EvEynPlE;EuExnPM;;IAEE,8BAAoC;EvE0nP5C;EuExnPM;;IAEE,gCAAwC;EvE0nPhD;EuExnPM;;IAEE,iCAA0C;EvE0nPlD;EuExnPM;;IAEE,+BAAsC;EvE0nP9C;EuEzoPM;IAAgC,yBAA4B;EvE4oPlE;EuE3oPM;;IAEE,6BAAoC;EvE6oP5C;EuE3oPM;;IAEE,+BAAwC;EvE6oPhD;EuE3oPM;;IAEE,gCAA0C;EvE6oPlD;EuE3oPM;;IAEE,8BAAsC;EvE6oP9C;EuE5pPM;IAAgC,uBAA4B;EvE+pPlE;EuE9pPM;;IAEE,2BAAoC;EvEgqP5C;EuE9pPM;;IAEE,6BAAwC;EvEgqPhD;EuE9pPM;;IAEE,8BAA0C;EvEgqPlD;EuE9pPM;;IAEE,4BAAsC;EvEgqP9C;EuE/qPM;IAAgC,yBAA4B;EvEkrPlE;EuEjrPM;;IAEE,6BAAoC;EvEmrP5C;EuEjrPM;;IAEE,+BAAwC;EvEmrPhD;EuEjrPM;;IAEE,gCAA0C;EvEmrPlD;EuEjrPM;;IAEE,8BAAsC;EvEmrP9C;EuElsPM;IAAgC,uBAA4B;EvEqsPlE;EuEpsPM;;IAEE,2BAAoC;EvEssP5C;EuEpsPM;;IAEE,6BAAwC;EvEssPhD;EuEpsPM;;IAEE,8BAA0C;EvEssPlD;EuEpsPM;;IAEE,4BAAsC;EvEssP9C;EuErtPM;IAAgC,qBAA4B;EvEwtPlE;EuEvtPM;;IAEE,yBAAoC;EvEytP5C;EuEvtPM;;IAEE,2BAAwC;EvEytPhD;EuEvtPM;;IAEE,4BAA0C;EvEytPlD;EuEvtPM;;IAEE,0BAAsC;EvEytP9C;EuExuPM;IAAgC,2BAA4B;EvE2uPlE;EuE1uPM;;IAEE,+BAAoC;EvE4uP5C;EuE1uPM;;IAEE,iCAAwC;EvE4uPhD;EuE1uPM;;IAEE,kCAA0C;EvE4uPlD;EuE1uPM;;IAEE,gCAAsC;EvE4uP9C;EuE3vPM;IAAgC,0BAA4B;EvE8vPlE;EuE7vPM;;IAEE,8BAAoC;EvE+vP5C;EuE7vPM;;IAEE,gCAAwC;EvE+vPhD;EuE7vPM;;IAEE,iCAA0C;EvE+vPlD;EuE7vPM;;IAEE,+BAAsC;EvE+vP9C;EuE9wPM;IAAgC,wBAA4B;EvEixPlE;EuEhxPM;;IAEE,4BAAoC;EvEkxP5C;EuEhxPM;;IAEE,8BAAwC;EvEkxPhD;EuEhxPM;;IAEE,+BAA0C;EvEkxPlD;EuEhxPM;;IAEE,6BAAsC;EvEkxP9C;EuEjyPM;IAAgC,0BAA4B;EvEoyPlE;EuEnyPM;;IAEE,8BAAoC;EvEqyP5C;EuEnyPM;;IAEE,gCAAwC;EvEqyPhD;EuEnyPM;;IAEE,iCAA0C;EvEqyPlD;EuEnyPM;;IAEE,+BAAsC;EvEqyP9C;EuEpzPM;IAAgC,wBAA4B;EvEuzPlE;EuEtzPM;;IAEE,4BAAoC;EvEwzP5C;EuEtzPM;;IAEE,8BAAwC;EvEwzPhD;EuEtzPM;;IAEE,+BAA0C;EvEwzPlD;EuEtzPM;;IAEE,6BAAsC;EvEwzP9C;EuEhzPM;IAAwB,2BAA2B;EvEmzPzD;EuElzPM;;IAEE,+BAA+B;EvEozPvC;EuElzPM;;IAEE,iCAAiC;EvEozPzC;EuElzPM;;IAEE,kCAAkC;EvEozP1C;EuElzPM;;IAEE,gCAAgC;EvEozPxC;EuEn0PM;IAAwB,0BAA2B;EvEs0PzD;EuEr0PM;;IAEE,8BAA+B;EvEu0PvC;EuEr0PM;;IAEE,gCAAiC;EvEu0PzC;EuEr0PM;;IAEE,iCAAkC;EvEu0P1C;EuEr0PM;;IAEE,+BAAgC;EvEu0PxC;EuEt1PM;IAAwB,wBAA2B;EvEy1PzD;EuEx1PM;;IAEE,4BAA+B;EvE01PvC;EuEx1PM;;IAEE,8BAAiC;EvE01PzC;EuEx1PM;;IAEE,+BAAkC;EvE01P1C;EuEx1PM;;IAEE,6BAAgC;EvE01PxC;EuEz2PM;IAAwB,0BAA2B;EvE42PzD;EuE32PM;;IAEE,8BAA+B;EvE62PvC;EuE32PM;;IAEE,gCAAiC;EvE62PzC;EuE32PM;;IAEE,iCAAkC;EvE62P1C;EuE32PM;;IAEE,+BAAgC;EvE62PxC;EuE53PM;IAAwB,wBAA2B;EvE+3PzD;EuE93PM;;IAEE,4BAA+B;EvEg4PvC;EuE93PM;;IAEE,8BAAiC;EvEg4PzC;EuE93PM;;IAEE,+BAAkC;EvEg4P1C;EuE93PM;;IAEE,6BAAgC;EvEg4PxC;EuE13PE;IAAmB,uBAAuB;EvE63P5C;EuE53PE;;IAEE,2BAA2B;EvE83P/B;EuE53PE;;IAEE,6BAA6B;EvE83PjC;EuE53PE;;IAEE,8BAA8B;EvE83PlC;EuE53PE;;IAEE,4BAA4B;EvE83PhC;AACF;;Acx4PI;EyDlDI;IAAgC,oBAA4B;EvE+7PlE;EuE97PM;;IAEE,wBAAoC;EvEg8P5C;EuE97PM;;IAEE,0BAAwC;EvEg8PhD;EuE97PM;;IAEE,2BAA0C;EvEg8PlD;EuE97PM;;IAEE,yBAAsC;EvEg8P9C;EuE/8PM;IAAgC,0BAA4B;EvEk9PlE;EuEj9PM;;IAEE,8BAAoC;EvEm9P5C;EuEj9PM;;IAEE,gCAAwC;EvEm9PhD;EuEj9PM;;IAEE,iCAA0C;EvEm9PlD;EuEj9PM;;IAEE,+BAAsC;EvEm9P9C;EuEl+PM;IAAgC,yBAA4B;EvEq+PlE;EuEp+PM;;IAEE,6BAAoC;EvEs+P5C;EuEp+PM;;IAEE,+BAAwC;EvEs+PhD;EuEp+PM;;IAEE,gCAA0C;EvEs+PlD;EuEp+PM;;IAEE,8BAAsC;EvEs+P9C;EuEr/PM;IAAgC,uBAA4B;EvEw/PlE;EuEv/PM;;IAEE,2BAAoC;EvEy/P5C;EuEv/PM;;IAEE,6BAAwC;EvEy/PhD;EuEv/PM;;IAEE,8BAA0C;EvEy/PlD;EuEv/PM;;IAEE,4BAAsC;EvEy/P9C;EuExgQM;IAAgC,yBAA4B;EvE2gQlE;EuE1gQM;;IAEE,6BAAoC;EvE4gQ5C;EuE1gQM;;IAEE,+BAAwC;EvE4gQhD;EuE1gQM;;IAEE,gCAA0C;EvE4gQlD;EuE1gQM;;IAEE,8BAAsC;EvE4gQ9C;EuE3hQM;IAAgC,uBAA4B;EvE8hQlE;EuE7hQM;;IAEE,2BAAoC;EvE+hQ5C;EuE7hQM;;IAEE,6BAAwC;EvE+hQhD;EuE7hQM;;IAEE,8BAA0C;EvE+hQlD;EuE7hQM;;IAEE,4BAAsC;EvE+hQ9C;EuE9iQM;IAAgC,qBAA4B;EvEijQlE;EuEhjQM;;IAEE,yBAAoC;EvEkjQ5C;EuEhjQM;;IAEE,2BAAwC;EvEkjQhD;EuEhjQM;;IAEE,4BAA0C;EvEkjQlD;EuEhjQM;;IAEE,0BAAsC;EvEkjQ9C;EuEjkQM;IAAgC,2BAA4B;EvEokQlE;EuEnkQM;;IAEE,+BAAoC;EvEqkQ5C;EuEnkQM;;IAEE,iCAAwC;EvEqkQhD;EuEnkQM;;IAEE,kCAA0C;EvEqkQlD;EuEnkQM;;IAEE,gCAAsC;EvEqkQ9C;EuEplQM;IAAgC,0BAA4B;EvEulQlE;EuEtlQM;;IAEE,8BAAoC;EvEwlQ5C;EuEtlQM;;IAEE,gCAAwC;EvEwlQhD;EuEtlQM;;IAEE,iCAA0C;EvEwlQlD;EuEtlQM;;IAEE,+BAAsC;EvEwlQ9C;EuEvmQM;IAAgC,wBAA4B;EvE0mQlE;EuEzmQM;;IAEE,4BAAoC;EvE2mQ5C;EuEzmQM;;IAEE,8BAAwC;EvE2mQhD;EuEzmQM;;IAEE,+BAA0C;EvE2mQlD;EuEzmQM;;IAEE,6BAAsC;EvE2mQ9C;EuE1nQM;IAAgC,0BAA4B;EvE6nQlE;EuE5nQM;;IAEE,8BAAoC;EvE8nQ5C;EuE5nQM;;IAEE,gCAAwC;EvE8nQhD;EuE5nQM;;IAEE,iCAA0C;EvE8nQlD;EuE5nQM;;IAEE,+BAAsC;EvE8nQ9C;EuE7oQM;IAAgC,wBAA4B;EvEgpQlE;EuE/oQM;;IAEE,4BAAoC;EvEipQ5C;EuE/oQM;;IAEE,8BAAwC;EvEipQhD;EuE/oQM;;IAEE,+BAA0C;EvEipQlD;EuE/oQM;;IAEE,6BAAsC;EvEipQ9C;EuEzoQM;IAAwB,2BAA2B;EvE4oQzD;EuE3oQM;;IAEE,+BAA+B;EvE6oQvC;EuE3oQM;;IAEE,iCAAiC;EvE6oQzC;EuE3oQM;;IAEE,kCAAkC;EvE6oQ1C;EuE3oQM;;IAEE,gCAAgC;EvE6oQxC;EuE5pQM;IAAwB,0BAA2B;EvE+pQzD;EuE9pQM;;IAEE,8BAA+B;EvEgqQvC;EuE9pQM;;IAEE,gCAAiC;EvEgqQzC;EuE9pQM;;IAEE,iCAAkC;EvEgqQ1C;EuE9pQM;;IAEE,+BAAgC;EvEgqQxC;EuE/qQM;IAAwB,wBAA2B;EvEkrQzD;EuEjrQM;;IAEE,4BAA+B;EvEmrQvC;EuEjrQM;;IAEE,8BAAiC;EvEmrQzC;EuEjrQM;;IAEE,+BAAkC;EvEmrQ1C;EuEjrQM;;IAEE,6BAAgC;EvEmrQxC;EuElsQM;IAAwB,0BAA2B;EvEqsQzD;EuEpsQM;;IAEE,8BAA+B;EvEssQvC;EuEpsQM;;IAEE,gCAAiC;EvEssQzC;EuEpsQM;;IAEE,iCAAkC;EvEssQ1C;EuEpsQM;;IAEE,+BAAgC;EvEssQxC;EuErtQM;IAAwB,wBAA2B;EvEwtQzD;EuEvtQM;;IAEE,4BAA+B;EvEytQvC;EuEvtQM;;IAEE,8BAAiC;EvEytQzC;EuEvtQM;;IAEE,+BAAkC;EvEytQ1C;EuEvtQM;;IAEE,6BAAgC;EvEytQxC;EuEntQE;IAAmB,uBAAuB;EvEstQ5C;EuErtQE;;IAEE,2BAA2B;EvEutQ/B;EuErtQE;;IAEE,6BAA6B;EvEutQjC;EuErtQE;;IAEE,8BAA8B;EvEutQlC;EuErtQE;;IAEE,4BAA4B;EvEutQhC;AACF;;AcjuQI;EyDlDI;IAAgC,oBAA4B;EvEwxQlE;EuEvxQM;;IAEE,wBAAoC;EvEyxQ5C;EuEvxQM;;IAEE,0BAAwC;EvEyxQhD;EuEvxQM;;IAEE,2BAA0C;EvEyxQlD;EuEvxQM;;IAEE,yBAAsC;EvEyxQ9C;EuExyQM;IAAgC,0BAA4B;EvE2yQlE;EuE1yQM;;IAEE,8BAAoC;EvE4yQ5C;EuE1yQM;;IAEE,gCAAwC;EvE4yQhD;EuE1yQM;;IAEE,iCAA0C;EvE4yQlD;EuE1yQM;;IAEE,+BAAsC;EvE4yQ9C;EuE3zQM;IAAgC,yBAA4B;EvE8zQlE;EuE7zQM;;IAEE,6BAAoC;EvE+zQ5C;EuE7zQM;;IAEE,+BAAwC;EvE+zQhD;EuE7zQM;;IAEE,gCAA0C;EvE+zQlD;EuE7zQM;;IAEE,8BAAsC;EvE+zQ9C;EuE90QM;IAAgC,uBAA4B;EvEi1QlE;EuEh1QM;;IAEE,2BAAoC;EvEk1Q5C;EuEh1QM;;IAEE,6BAAwC;EvEk1QhD;EuEh1QM;;IAEE,8BAA0C;EvEk1QlD;EuEh1QM;;IAEE,4BAAsC;EvEk1Q9C;EuEj2QM;IAAgC,yBAA4B;EvEo2QlE;EuEn2QM;;IAEE,6BAAoC;EvEq2Q5C;EuEn2QM;;IAEE,+BAAwC;EvEq2QhD;EuEn2QM;;IAEE,gCAA0C;EvEq2QlD;EuEn2QM;;IAEE,8BAAsC;EvEq2Q9C;EuEp3QM;IAAgC,uBAA4B;EvEu3QlE;EuEt3QM;;IAEE,2BAAoC;EvEw3Q5C;EuEt3QM;;IAEE,6BAAwC;EvEw3QhD;EuEt3QM;;IAEE,8BAA0C;EvEw3QlD;EuEt3QM;;IAEE,4BAAsC;EvEw3Q9C;EuEv4QM;IAAgC,qBAA4B;EvE04QlE;EuEz4QM;;IAEE,yBAAoC;EvE24Q5C;EuEz4QM;;IAEE,2BAAwC;EvE24QhD;EuEz4QM;;IAEE,4BAA0C;EvE24QlD;EuEz4QM;;IAEE,0BAAsC;EvE24Q9C;EuE15QM;IAAgC,2BAA4B;EvE65QlE;EuE55QM;;IAEE,+BAAoC;EvE85Q5C;EuE55QM;;IAEE,iCAAwC;EvE85QhD;EuE55QM;;IAEE,kCAA0C;EvE85QlD;EuE55QM;;IAEE,gCAAsC;EvE85Q9C;EuE76QM;IAAgC,0BAA4B;EvEg7QlE;EuE/6QM;;IAEE,8BAAoC;EvEi7Q5C;EuE/6QM;;IAEE,gCAAwC;EvEi7QhD;EuE/6QM;;IAEE,iCAA0C;EvEi7QlD;EuE/6QM;;IAEE,+BAAsC;EvEi7Q9C;EuEh8QM;IAAgC,wBAA4B;EvEm8QlE;EuEl8QM;;IAEE,4BAAoC;EvEo8Q5C;EuEl8QM;;IAEE,8BAAwC;EvEo8QhD;EuEl8QM;;IAEE,+BAA0C;EvEo8QlD;EuEl8QM;;IAEE,6BAAsC;EvEo8Q9C;EuEn9QM;IAAgC,0BAA4B;EvEs9QlE;EuEr9QM;;IAEE,8BAAoC;EvEu9Q5C;EuEr9QM;;IAEE,gCAAwC;EvEu9QhD;EuEr9QM;;IAEE,iCAA0C;EvEu9QlD;EuEr9QM;;IAEE,+BAAsC;EvEu9Q9C;EuEt+QM;IAAgC,wBAA4B;EvEy+QlE;EuEx+QM;;IAEE,4BAAoC;EvE0+Q5C;EuEx+QM;;IAEE,8BAAwC;EvE0+QhD;EuEx+QM;;IAEE,+BAA0C;EvE0+QlD;EuEx+QM;;IAEE,6BAAsC;EvE0+Q9C;EuEl+QM;IAAwB,2BAA2B;EvEq+QzD;EuEp+QM;;IAEE,+BAA+B;EvEs+QvC;EuEp+QM;;IAEE,iCAAiC;EvEs+QzC;EuEp+QM;;IAEE,kCAAkC;EvEs+Q1C;EuEp+QM;;IAEE,gCAAgC;EvEs+QxC;EuEr/QM;IAAwB,0BAA2B;EvEw/QzD;EuEv/QM;;IAEE,8BAA+B;EvEy/QvC;EuEv/QM;;IAEE,gCAAiC;EvEy/QzC;EuEv/QM;;IAEE,iCAAkC;EvEy/Q1C;EuEv/QM;;IAEE,+BAAgC;EvEy/QxC;EuExgRM;IAAwB,wBAA2B;EvE2gRzD;EuE1gRM;;IAEE,4BAA+B;EvE4gRvC;EuE1gRM;;IAEE,8BAAiC;EvE4gRzC;EuE1gRM;;IAEE,+BAAkC;EvE4gR1C;EuE1gRM;;IAEE,6BAAgC;EvE4gRxC;EuE3hRM;IAAwB,0BAA2B;EvE8hRzD;EuE7hRM;;IAEE,8BAA+B;EvE+hRvC;EuE7hRM;;IAEE,gCAAiC;EvE+hRzC;EuE7hRM;;IAEE,iCAAkC;EvE+hR1C;EuE7hRM;;IAEE,+BAAgC;EvE+hRxC;EuE9iRM;IAAwB,wBAA2B;EvEijRzD;EuEhjRM;;IAEE,4BAA+B;EvEkjRvC;EuEhjRM;;IAEE,8BAAiC;EvEkjRzC;EuEhjRM;;IAEE,+BAAkC;EvEkjR1C;EuEhjRM;;IAEE,6BAAgC;EvEkjRxC;EuE5iRE;IAAmB,uBAAuB;EvE+iR5C;EuE9iRE;;IAEE,2BAA2B;EvEgjR/B;EuE9iRE;;IAEE,6BAA6B;EvEgjRjC;EuE9iRE;;IAEE,8BAA8B;EvEgjRlC;EuE9iRE;;IAEE,4BAA4B;EvEgjRhC;AACF;;Ac1jRI;EyDlDI;IAAgC,oBAA4B;EvEinRlE;EuEhnRM;;IAEE,wBAAoC;EvEknR5C;EuEhnRM;;IAEE,0BAAwC;EvEknRhD;EuEhnRM;;IAEE,2BAA0C;EvEknRlD;EuEhnRM;;IAEE,yBAAsC;EvEknR9C;EuEjoRM;IAAgC,0BAA4B;EvEooRlE;EuEnoRM;;IAEE,8BAAoC;EvEqoR5C;EuEnoRM;;IAEE,gCAAwC;EvEqoRhD;EuEnoRM;;IAEE,iCAA0C;EvEqoRlD;EuEnoRM;;IAEE,+BAAsC;EvEqoR9C;EuEppRM;IAAgC,yBAA4B;EvEupRlE;EuEtpRM;;IAEE,6BAAoC;EvEwpR5C;EuEtpRM;;IAEE,+BAAwC;EvEwpRhD;EuEtpRM;;IAEE,gCAA0C;EvEwpRlD;EuEtpRM;;IAEE,8BAAsC;EvEwpR9C;EuEvqRM;IAAgC,uBAA4B;EvE0qRlE;EuEzqRM;;IAEE,2BAAoC;EvE2qR5C;EuEzqRM;;IAEE,6BAAwC;EvE2qRhD;EuEzqRM;;IAEE,8BAA0C;EvE2qRlD;EuEzqRM;;IAEE,4BAAsC;EvE2qR9C;EuE1rRM;IAAgC,yBAA4B;EvE6rRlE;EuE5rRM;;IAEE,6BAAoC;EvE8rR5C;EuE5rRM;;IAEE,+BAAwC;EvE8rRhD;EuE5rRM;;IAEE,gCAA0C;EvE8rRlD;EuE5rRM;;IAEE,8BAAsC;EvE8rR9C;EuE7sRM;IAAgC,uBAA4B;EvEgtRlE;EuE/sRM;;IAEE,2BAAoC;EvEitR5C;EuE/sRM;;IAEE,6BAAwC;EvEitRhD;EuE/sRM;;IAEE,8BAA0C;EvEitRlD;EuE/sRM;;IAEE,4BAAsC;EvEitR9C;EuEhuRM;IAAgC,qBAA4B;EvEmuRlE;EuEluRM;;IAEE,yBAAoC;EvEouR5C;EuEluRM;;IAEE,2BAAwC;EvEouRhD;EuEluRM;;IAEE,4BAA0C;EvEouRlD;EuEluRM;;IAEE,0BAAsC;EvEouR9C;EuEnvRM;IAAgC,2BAA4B;EvEsvRlE;EuErvRM;;IAEE,+BAAoC;EvEuvR5C;EuErvRM;;IAEE,iCAAwC;EvEuvRhD;EuErvRM;;IAEE,kCAA0C;EvEuvRlD;EuErvRM;;IAEE,gCAAsC;EvEuvR9C;EuEtwRM;IAAgC,0BAA4B;EvEywRlE;EuExwRM;;IAEE,8BAAoC;EvE0wR5C;EuExwRM;;IAEE,gCAAwC;EvE0wRhD;EuExwRM;;IAEE,iCAA0C;EvE0wRlD;EuExwRM;;IAEE,+BAAsC;EvE0wR9C;EuEzxRM;IAAgC,wBAA4B;EvE4xRlE;EuE3xRM;;IAEE,4BAAoC;EvE6xR5C;EuE3xRM;;IAEE,8BAAwC;EvE6xRhD;EuE3xRM;;IAEE,+BAA0C;EvE6xRlD;EuE3xRM;;IAEE,6BAAsC;EvE6xR9C;EuE5yRM;IAAgC,0BAA4B;EvE+yRlE;EuE9yRM;;IAEE,8BAAoC;EvEgzR5C;EuE9yRM;;IAEE,gCAAwC;EvEgzRhD;EuE9yRM;;IAEE,iCAA0C;EvEgzRlD;EuE9yRM;;IAEE,+BAAsC;EvEgzR9C;EuE/zRM;IAAgC,wBAA4B;EvEk0RlE;EuEj0RM;;IAEE,4BAAoC;EvEm0R5C;EuEj0RM;;IAEE,8BAAwC;EvEm0RhD;EuEj0RM;;IAEE,+BAA0C;EvEm0RlD;EuEj0RM;;IAEE,6BAAsC;EvEm0R9C;EuE3zRM;IAAwB,2BAA2B;EvE8zRzD;EuE7zRM;;IAEE,+BAA+B;EvE+zRvC;EuE7zRM;;IAEE,iCAAiC;EvE+zRzC;EuE7zRM;;IAEE,kCAAkC;EvE+zR1C;EuE7zRM;;IAEE,gCAAgC;EvE+zRxC;EuE90RM;IAAwB,0BAA2B;EvEi1RzD;EuEh1RM;;IAEE,8BAA+B;EvEk1RvC;EuEh1RM;;IAEE,gCAAiC;EvEk1RzC;EuEh1RM;;IAEE,iCAAkC;EvEk1R1C;EuEh1RM;;IAEE,+BAAgC;EvEk1RxC;EuEj2RM;IAAwB,wBAA2B;EvEo2RzD;EuEn2RM;;IAEE,4BAA+B;EvEq2RvC;EuEn2RM;;IAEE,8BAAiC;EvEq2RzC;EuEn2RM;;IAEE,+BAAkC;EvEq2R1C;EuEn2RM;;IAEE,6BAAgC;EvEq2RxC;EuEp3RM;IAAwB,0BAA2B;EvEu3RzD;EuEt3RM;;IAEE,8BAA+B;EvEw3RvC;EuEt3RM;;IAEE,gCAAiC;EvEw3RzC;EuEt3RM;;IAEE,iCAAkC;EvEw3R1C;EuEt3RM;;IAEE,+BAAgC;EvEw3RxC;EuEv4RM;IAAwB,wBAA2B;EvE04RzD;EuEz4RM;;IAEE,4BAA+B;EvE24RvC;EuEz4RM;;IAEE,8BAAiC;EvE24RzC;EuEz4RM;;IAEE,+BAAkC;EvE24R1C;EuEz4RM;;IAEE,6BAAgC;EvE24RxC;EuEr4RE;IAAmB,uBAAuB;EvEw4R5C;EuEv4RE;;IAEE,2BAA2B;EvEy4R/B;EuEv4RE;;IAEE,6BAA6B;EvEy4RjC;EuEv4RE;;IAEE,8BAA8B;EvEy4RlC;EuEv4RE;;IAEE,4BAA4B;EvEy4RhC;AACF;;AwEz8RA;EAAkB,4GAA8C;AxE68RhE;;AwEz8RA;EAAiB,8BAA8B;AxE68R/C;;AwE58RA;EAAiB,8BAA8B;AxEg9R/C;;AwE/8RA;EAAiB,8BAA8B;AxEm9R/C;;AwEl9RA;ECTE,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;AzE+9RrB;;AwEh9RI;EAAwB,2BAA2B;AxEo9RvD;;AwEn9RI;EAAwB,4BAA4B;AxEu9RxD;;AwEt9RI;EAAwB,6BAA6B;AxE09RzD;;Acr7RI;E0DvCA;IAAwB,2BAA2B;ExEi+RrD;EwEh+RE;IAAwB,4BAA4B;ExEm+RtD;EwEl+RE;IAAwB,6BAA6B;ExEq+RvD;AACF;;Acj8RI;E0DvCA;IAAwB,2BAA2B;ExE6+RrD;EwE5+RE;IAAwB,4BAA4B;ExE++RtD;EwE9+RE;IAAwB,6BAA6B;ExEi/RvD;AACF;;Ac78RI;E0DvCA;IAAwB,2BAA2B;ExEy/RrD;EwEx/RE;IAAwB,4BAA4B;ExE2/RtD;EwE1/RE;IAAwB,6BAA6B;ExE6/RvD;AACF;;Acz9RI;E0DvCA;IAAwB,2BAA2B;ExEqgSrD;EwEpgSE;IAAwB,4BAA4B;ExEugStD;EwEtgSE;IAAwB,6BAA6B;ExEygSvD;AACF;;AwEpgSA;EAAmB,oCAAoC;AxEwgSvD;;AwEvgSA;EAAmB,oCAAoC;AxE2gSvD;;AwE1gSA;EAAmB,qCAAqC;AxE8gSxD;;AwE1gSA;EAAuB,2BAA0C;AxE8gSjE;;AwE7gSA;EAAuB,+BAA4C;AxEihSnE;;AwEhhSA;EAAuB,2BAA2C;AxEohSlE;;AwEnhSA;EAAuB,2BAAyC;AxEuhShE;;AwEthSA;EAAuB,8BAA2C;AxE0hSlE;;AwEzhSA;EAAuB,6BAA6B;AxE6hSpD;;AwEzhSA;EAAc,sBAAwB;AxE6hStC;;A0EpkSE;EACE,yBAAwB;A1EukS5B;;AK7jSE;EqELM,yBAA0E;A1EskSlF;;A0E5kSE;EACE,yBAAwB;A1E+kS5B;;AKrkSE;EqELM,yBAA0E;A1E8kSlF;;A0EplSE;EACE,yBAAwB;A1EulS5B;;AK7kSE;EqELM,yBAA0E;A1EslSlF;;A0E5lSE;EACE,yBAAwB;A1E+lS5B;;AKrlSE;EqELM,yBAA0E;A1E8lSlF;;A0EpmSE;EACE,yBAAwB;A1EumS5B;;AK7lSE;EqELM,yBAA0E;A1EsmSlF;;A0E5mSE;EACE,yBAAwB;A1E+mS5B;;AKrmSE;EqELM,yBAA0E;A1E8mSlF;;A0EpnSE;EACE,yBAAwB;A1EunS5B;;AK7mSE;EqELM,yBAA0E;A1EsnSlF;;A0E5nSE;EACE,yBAAwB;A1E+nS5B;;AKrnSE;EqELM,yBAA0E;A1E8nSlF;;AwEvlSA;EAAa,yBAA6B;AxE2lS1C;;AwE1lSA;EAAc,yBAA6B;AxE8lS3C;;AwE5lSA;EAAiB,oCAAkC;AxEgmSnD;;AwE/lSA;EAAiB,0CAAkC;AxEmmSnD;;AwE/lSA;EGvDE,WAAW;EACX,kBAAkB;EAClB,iBAAiB;EACjB,6BAA6B;EAC7B,SAAS;A3E0pSX;;AwEnmSA;EAAwB,gCAAgC;AxEumSxD;;AwErmSA;EACE,iCAAiC;EACjC,oCAAoC;AxEwmStC;;AwEnmSA;EAAc,yBAAyB;AxEumSvC;;A4ExqSA;EACE,8BAA8B;A5E2qShC;;A4ExqSA;EACE,6BAA6B;A5E2qS/B;;A6E3qSE;E3EOF;;;I2EDM,4BAA4B;IAE5B,2BAA2B;E7E2qS/B;E6ExqSE;IAEI,0BAA0B;E7EyqShC;E6EhqSE;IACE,6BAA6B;E7EkqSjC;EEn+RF;I2EhLM,gCAAgC;E7EspSpC;E6EppSE;;IAEE,yB1EzCY;I0E0CZ,wBAAwB;E7EspS5B;E6E9oSE;IACE,2BAA2B;E7EgpS/B;E6E7oSE;;IAEE,wBAAwB;E7E+oS5B;E6E5oSE;;;IAGE,UAAU;IACV,SAAS;E7E8oSb;E6E3oSE;;IAEE,uBAAuB;E7E6oS3B;E6EroSE;IACE,Q1EwgCgC;EH+nQpC;EEnrSF;I2E+CM,2BAA2C;E7EuoS/C;EY9tSA;IiE0FI,2BAA2C;E7EuoS/C;EiCrtSF;I4CmFM,aAAa;E7EqoSjB;EsCpuSF;IuCkGM,sB1EtFS;EH2tSb;EgBxuSF;I6DuGM,oCAAoC;E7EooSxC;E6EroSE;;IAKI,iCAAmC;E7EooSzC;EgBvsSF;;I6D0EQ,oCAAsC;E7EioS5C;EgBtnSF;I6DNM,cAAc;E7E+nSlB;EiBrvSA;;;;I4D4HM,qB1EvHU;EHsvShB;EgBjpSF;I6DuBM,cAAc;IACd,qB1E7HY;EH0vShB;AACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n","/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-break: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-select:valid ~ .valid-feedback,\n.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-select:invalid ~ .invalid-feedback,\n.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: calc(1rem + 0.4rem);\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img {\n width: 100%;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n width: 100%;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n width: 100%;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n display: flex;\n flex-direction: column;\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n display: flex;\n flex: 1 0 0%;\n flex-direction: column;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group {\n display: flex;\n flex-direction: column;\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:first-of-type) .card-header:first-child {\n border-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type):not(:last-of-type) {\n border-bottom: 0;\n border-radius: 0;\n}\n\n.accordion > .card:first-of-type {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:last-of-type {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card .card-header {\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 2;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 1;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-sm .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-md .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-lg .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-xl .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n.list-group-flush .list-group-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n\n.list-group-flush .list-group-item:last-child {\n margin-bottom: -1px;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n margin-bottom: 0;\n border-bottom: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n appearance: none;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n max-width: 350px;\n overflow: hidden;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n backdrop-filter: blur(10px);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 1rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.modal-footer > :not(:first-child) {\n margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: 0s 0.6s opacity;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n$table-dark-color: $white !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2}) !default;\n$input-height-inner-half: calc(#{$input-line-height * .5em} + #{$input-padding-y}) !default;\n$input-height-inner-quarter: calc(#{$input-line-height * .25em} + #{$input-padding-y / 2}) !default;\n\n$input-height: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2} + #{$input-height-border}) !default;\n$input-height-sm: calc(#{$input-line-height-sm * 1em} + #{$input-btn-padding-y-sm * 2} + #{$input-height-border}) !default;\n$input-height-lg: calc(#{$input-line-height-lg * 1em} + #{$input-btn-padding-y-lg * 2} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: calc(#{$custom-control-indicator-size} - #{$custom-control-indicator-border-width * 4}) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$custom-select-background: $custom-select-indicator no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: calc((1em + #{2 * $custom-select-padding-y}) * 3 / 4 + #{$custom-select-padding-x + $custom-select-indicator-padding}) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$form-feedback-icon-invalid-color}' viewBox='-2 -2 7 7'%3e%3cpath stroke='#{$form-feedback-icon-invalid-color}' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\"), \"#\", \"%23\") !default;\n\n$form-validation-states: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled;\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid;\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid;\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-blacklist\n// Single side border-radius\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: $radius;\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-break: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(odd) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null or unit($num) == \"%\" {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: \"$grid-breakpoints\") {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n }\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// Color contrast\n@function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {\n $r: red($color);\n $g: green($color);\n $b: blue($color);\n\n $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;\n\n @if ($yiq >= $yiq-contrasted-threshold) {\n @return $dark;\n } @else {\n @return $light;\n }\n}\n\n// Retrieve color Sass maps\n@function color($key: \"blue\") {\n @return map-get($colors, $key);\n}\n\n@function theme-color($key: \"primary\") {\n @return map-get($theme-colors, $key);\n}\n\n@function gray($key: \"100\") {\n @return map-get($grays, $key);\n}\n\n// Request a theme color level\n@function theme-color-level($color-name: \"primary\", $level: 0) {\n $color: theme-color($color-name);\n $color-base: if($level > 0, $black, $white);\n $level: abs($level);\n\n @return mix($color-base, $color, $level * $theme-color-interval);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: calc(#{$input-padding-y} + #{$input-border-width});\n padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});\n margin-bottom: 0; // Override the `
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Ee},je="show",He="out",Re={HIDE:"hide"+De,HIDDEN:"hidden"+De,SHOW:"show"+De,SHOWN:"shown"+De,INSERTED:"inserted"+De,CLICK:"click"+De,FOCUSIN:"focusin"+De,FOCUSOUT:"focusout"+De,MOUSEENTER:"mouseenter"+De,MOUSELEAVE:"mouseleave"+De},xe="fade",Fe="show",Ue=".tooltip-inner",We=".arrow",qe="hover",Me="focus",Ke="click",Qe="manual",Be=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(xe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:We},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===He&&e._leave(null,e)};if(g(this.tip).hasClass(xe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==je&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ke]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[qe]=!1,g(this.tip).hasClass(xe)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Ae+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ue)),this.getTitle()),g(t).removeClass(xe+" "+Fe)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Se(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Pe[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Qe){var e=t===qe?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===qe?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Me:qe]=!0),g(e.getTipElement()).hasClass(Fe)||e._hoverState===je?e._hoverState=je:(clearTimeout(e._timeout),e._hoverState=je,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===je&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Me:qe]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===He&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==Oe.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(be,t,this.constructor.DefaultType),t.sanitize&&(t.template=Se(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ne);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(xe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ie),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ie,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Le}},{key:"NAME",get:function(){return be}},{key:"DATA_KEY",get:function(){return Ie}},{key:"Event",get:function(){return Re}},{key:"EVENT_KEY",get:function(){return De}},{key:"DefaultType",get:function(){return ke}}]),i}();g.fn[be]=Be._jQueryInterface,g.fn[be].Constructor=Be,g.fn[be].noConflict=function(){return g.fn[be]=we,Be._jQueryInterface};var Ve="popover",Ye="bs.popover",ze="."+Ye,Xe=g.fn[Ve],$e="bs-popover",Ge=new RegExp("(^|\\s)"+$e+"\\S+","g"),Je=l({},Be.Default,{placement:"right",trigger:"click",content:"",template:''}),Ze=l({},Be.DefaultType,{content:"(string|element|function)"}),tn="fade",en="show",nn=".popover-header",on=".popover-body",rn={HIDE:"hide"+ze,HIDDEN:"hidden"+ze,SHOW:"show"+ze,SHOWN:"shown"+ze,INSERTED:"inserted"+ze,CLICK:"click"+ze,FOCUSIN:"focusin"+ze,FOCUSOUT:"focusout"+ze,MOUSEENTER:"mouseenter"+ze,MOUSELEAVE:"mouseleave"+ze},sn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass($e+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(nn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(on),e),t.removeClass(tn+" "+en)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ge);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n }\n}\n\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n}\n\nconst Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n}\n\nconst Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLE : '[data-toggle=\"buttons\"]',\n INPUT : 'input:not([type=\"hidden\"])',\n ACTIVE : '.active',\n BUTTON : '.btn'\n}\n\nconst Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLE\n )[0]\n\n if (rootElement) {\n const input = this._element.querySelector(Selector.INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(Selector.ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') ||\n rootElement.hasAttribute('disabled') ||\n input.classList.contains('disabled') ||\n rootElement.classList.contains('disabled')) {\n return\n }\n input.checked = !this._element.classList.contains(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !this._element.classList.contains(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n event.preventDefault()\n\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\n })\n .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(Selector.BUTTON)[0]\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true,\n touch : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean',\n touch : 'boolean'\n}\n\nconst Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n}\n\nconst Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHSTART : `touchstart${EVENT_KEY}`,\n TOUCHMOVE : `touchmove${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n POINTERDOWN : `pointerdown${EVENT_KEY}`,\n POINTERUP : `pointerup${EVENT_KEY}`,\n DRAG_START : `dragstart${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item',\n POINTER_EVENT : 'pointer-event'\n}\n\nconst Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n ITEM_IMG : '.carousel-item img',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n}\n\nconst PointerType = {\n TOUCH : 'touch',\n PEN : 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, (e) => e.preventDefault())\n if (this._pointerEvent) {\n $(this._element).on(Event.POINTERDOWN, (event) => start(event))\n $(this._element).on(Event.POINTERUP, (event) => end(event))\n\n this._element.classList.add(ClassName.POINTER_EVENT)\n } else {\n $(this._element).on(Event.TOUCHSTART, (event) => start(event))\n $(this._element).on(Event.TOUCHMOVE, (event) => move(event))\n $(this._element).on(Event.TOUCHEND, (event) => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))\n $(indicators)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(Event.LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle : true,\n parent : ''\n}\n\nconst DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n}\n\nconst Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n}\n\nconst Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n}\n\nconst Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))\n .filter((elem) => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(ClassName.COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n const children = [].slice.call(parent.querySelectorAll(selector))\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n DROPRIGHT : 'dropright',\n DROPLEFT : 'dropleft',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left',\n POSITION_STATIC : 'position-static'\n}\n\nconst Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n}\n\nconst AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end',\n RIGHT : 'right-start',\n RIGHTEND : 'right-end',\n LEFT : 'left-start',\n LEFTEND : 'left-end'\n}\n\nconst Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic'\n}\n\nconst DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this._element)\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n show() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU)\n }\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return popperConfig\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = parent.querySelector(Selector.DATA_TOGGLE)\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n}\n\nconst DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SCROLLABLE : 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n DIALOG : '.modal-dialog',\n MODAL_BODY : '.modal-body',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n $(document).off(Event.FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n\n if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) {\n this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(ClassName.OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach((attr) => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string|function)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)',\n boundary : '(string|element)',\n sanitize : 'boolean',\n sanitizeFn : '(null|function)',\n whiteList : 'object'\n}\n\nconst AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n}\n\nconst Default = {\n animation : true,\n template : '
' +\n '
' +\n '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip',\n boundary : 'scrollParent',\n sanitize : true,\n sanitizeFn : null,\n whiteList : DefaultWhitelist\n}\n\nconst HoverState = {\n SHOW : 'show',\n OUT : 'out'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n}\n\nconst Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => this._handlePopperPlacementChange(data)\n })\n\n $(tip).addClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this.config.offset(data.offsets, this.element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n })\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => {\n if (this.element) {\n this.hide()\n }\n }\n )\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach((dataAttr) => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n const popperInstance = popperData.instance\n this.tip = popperInstance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
' +\n '
' +\n '

' +\n '
'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n}\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(Selector.CONTENT), content)\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset : 10,\n method : 'auto',\n target : ''\n}\n\nconst DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n}\n\nconst Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n}\n\nconst Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n}\n\nconst OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n const offsetLength = this._offsets.length\n for (let i = offsetLength; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map((selector) => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both
+ Support: Support@example.com
+ Marketing: Marketing@example.com +