From 318b2cdd80c9544df2f0bbb7c6ebb7d56d1a1d58 Mon Sep 17 00:00:00 2001 From: Guangzhen Jin Date: Mon, 1 Jun 2026 12:26:22 -0400 Subject: [PATCH 1/6] Init Geddes UG. --- docs/userguides/geddes/index.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/userguides/geddes/index.md diff --git a/docs/userguides/geddes/index.md b/docs/userguides/geddes/index.md new file mode 100644 index 00000000..e69de29b From 77f57b2ce039f457abb988b30ed9f995fb993b47 Mon Sep 17 00:00:00 2001 From: Guangzhen Jin Date: Mon, 1 Jun 2026 22:10:13 -0400 Subject: [PATCH 2/6] Migrate Geddes User Guide to current platform Add the Geddes Composable Platform user guide (overview, concepts, accounts, access, registry, storage, workloads, services, examples, troubleshooting, biography) migrated from the knowledge base, cleaned of CMS templating and wired into the nav. --- .../images/userguides/geddes/bio_geddes.jpeg | Bin 0 -> 21693 bytes docs/userguides/geddes/access/index.md | 17 ++ docs/userguides/geddes/access/kubectl.md | 42 ++++ docs/userguides/geddes/access/rancher.md | 17 ++ docs/userguides/geddes/access/tokens.md | 20 ++ docs/userguides/geddes/accounts.md | 17 ++ docs/userguides/geddes/biography.md | 28 +++ docs/userguides/geddes/concepts.md | 56 ++++++ docs/userguides/geddes/examples/database.md | 75 +++++++ docs/userguides/geddes/examples/index.md | 18 ++ docs/userguides/geddes/examples/jupyterhub.md | 27 +++ docs/userguides/geddes/examples/r-shiny.md | 79 ++++++++ docs/userguides/geddes/examples/webserver.md | 52 +++++ docs/userguides/geddes/index.md | 25 +++ docs/userguides/geddes/overview.md | 44 +++++ docs/userguides/geddes/registry.md | 88 +++++++++ docs/userguides/geddes/services.md | 50 +++++ docs/userguides/geddes/storage.md | 187 ++++++++++++++++++ docs/userguides/geddes/troubleshooting.md | 81 ++++++++ docs/userguides/geddes/workloads.md | 24 +++ mkdocs.yml | 23 ++- 21 files changed, 969 insertions(+), 1 deletion(-) create mode 100644 docs/assets/images/userguides/geddes/bio_geddes.jpeg create mode 100644 docs/userguides/geddes/access/index.md create mode 100644 docs/userguides/geddes/access/kubectl.md create mode 100644 docs/userguides/geddes/access/rancher.md create mode 100644 docs/userguides/geddes/access/tokens.md create mode 100644 docs/userguides/geddes/accounts.md create mode 100644 docs/userguides/geddes/biography.md create mode 100644 docs/userguides/geddes/concepts.md create mode 100644 docs/userguides/geddes/examples/database.md create mode 100644 docs/userguides/geddes/examples/index.md create mode 100644 docs/userguides/geddes/examples/jupyterhub.md create mode 100644 docs/userguides/geddes/examples/r-shiny.md create mode 100644 docs/userguides/geddes/examples/webserver.md create mode 100644 docs/userguides/geddes/overview.md create mode 100644 docs/userguides/geddes/registry.md create mode 100644 docs/userguides/geddes/services.md create mode 100644 docs/userguides/geddes/storage.md create mode 100644 docs/userguides/geddes/troubleshooting.md create mode 100644 docs/userguides/geddes/workloads.md diff --git a/docs/assets/images/userguides/geddes/bio_geddes.jpeg b/docs/assets/images/userguides/geddes/bio_geddes.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6ee653c756e99156fa452c7b2336114df638cc43 GIT binary patch literal 21693 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 L9}YD*R$u?wX^dm( literal 0 HcmV?d00001 diff --git a/docs/userguides/geddes/access/index.md b/docs/userguides/geddes/access/index.md new file mode 100644 index 00000000..2033b1c2 --- /dev/null +++ b/docs/userguides/geddes/access/index.md @@ -0,0 +1,17 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Access + +Access to the Geddes Composable Platform is handled via the RCAC web portal. When access is purchased, a Rancher project with your research group's name will be created and managers will be able to click to give users access, similar to how access is managed for community clusters. Geddes can be reached via the Rancher UI in a web browser or from the command line with `kubectl`. + +- [**Rancher UI**](rancher.md) +- [**Kubectl**](kubectl.md) +- [**Refreshing Your Kubectl Token**](tokens.md) diff --git a/docs/userguides/geddes/access/kubectl.md b/docs/userguides/geddes/access/kubectl.md new file mode 100644 index 00000000..e6b1ead2 --- /dev/null +++ b/docs/userguides/geddes/access/kubectl.md @@ -0,0 +1,42 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Kubectl + +## Configuring local kubectl access with a Kubeconfig file + +**kubectl** can be installed and run on your local machine +to perform various actions against the Kubernetes cluster using the API server. + +These tools authenticate to Kubernetes using information stored in a +[**kubeconfig**](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file. + +!!! note + A file that is used to configure access to a cluster is sometimes + called a *kubeconfig* file. This is a generic way of referring to configuration + files. It does not mean that there is a file named **kubeconfig**. + +To begin accessing Geddes via **kubectl** you must first gather your rancher generated **Kubeconfig** file and set up your local `.kube` directory. + +1. From anywhere in the Rancher UI navigate to the top right and click on either **Download KubeConfig** or **Copy KubeConfig to Clipboard** + * Create a directory in your home directory (`$HOME`) called `.kube` + * Change into the newly created directory and copy the file or contents of **KubeConfig** from earlier into a file called **config** +2. Test connections to the Geddes cluster + * To look at the current config settings we just set use `kubectl config view` + * Now let’s list the available resource types present in the API with `kubectl api-resources` + +To see more options of kubectl, review the [Kubernetes' kubectl cheatsheet](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). + +## Accessing kubectl in the Rancher web UI + +You can launch a kubectl command window from within the Rancher UI by selecting +the **Kubectl Shell** button at the top right or using the hotkey (`` CTRL + ` ``). +This will deploy a container in the cluster with kubectl installed and give you +an interactive window to use the command from. diff --git a/docs/userguides/geddes/access/rancher.md b/docs/userguides/geddes/access/rancher.md new file mode 100644 index 00000000..5319c02f --- /dev/null +++ b/docs/userguides/geddes/access/rancher.md @@ -0,0 +1,17 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Rancher UI + +## Logging in to Rancher + +To access the Geddes user interface, you must be on a Purdue campus network or connected through [VPN](https://www.itap.purdue.edu/connections/vpn/). + +Once connected to a Purdue network, the Geddes Rancher interface can be accessed via a web browser at [geddes.rcac.purdue.edu](https://geddes.rcac.purdue.edu). Log in by choosing "log in with shibboleth" and using Purdue Login at the login screen. diff --git a/docs/userguides/geddes/access/tokens.md b/docs/userguides/geddes/access/tokens.md new file mode 100644 index 00000000..99132072 --- /dev/null +++ b/docs/userguides/geddes/access/tokens.md @@ -0,0 +1,20 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Refreshing Your Kubectl Token + +Before starting, it's a good idea to make a mental note of your current token so that you can verify if the token regenerated correctly. Once logged into Rancher, you can navigate to the Geddes cluster using the top left drop down and view your current token using the top right **Kubeconfig File** button. + +1. Log in to the Rancher UI at [geddes.rcac.purdue.edu](https://geddes.rcac.purdue.edu) +2. Use the top right user dropdown and navigate to **API & Keys** +3. Locate and check the box labeled **kubeconfig-u\*** +4. Click delete +5. From here log out and back into Rancher and your token will be regenerated +6. Using the method outlined at the top of this section, verify that your token has regenerated diff --git a/docs/userguides/geddes/accounts.md b/docs/userguides/geddes/accounts.md new file mode 100644 index 00000000..50427c0d --- /dev/null +++ b/docs/userguides/geddes/accounts.md @@ -0,0 +1,17 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Accounts + +## Obtaining access to Geddes + +Access to the Geddes Composable Platform is handled via the RCAC web portal. When access is purchased, a Rancher project with your research group's name will be created and managers will be able to click to give users access, similar to how access is managed for community clusters. + +To obtain access, please [contact support](https://www.rcac.purdue.edu/help) with your request. diff --git a/docs/userguides/geddes/biography.md b/docs/userguides/geddes/biography.md new file mode 100644 index 00000000..6c1d5e13 --- /dev/null +++ b/docs/userguides/geddes/biography.md @@ -0,0 +1,28 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Biography of Lanelle Geddes +![Portrait of Lanelle Geddes](/assets/images/userguides/geddes/bio_geddes.jpeg){ align=right width="260" } + +LaNelle E. (Nerger) Geddes was born on September 15, 1935 in Houston, Texas to Carl O. and Evelyn Nerger. She received a B.S. in Nursing from the University of Houston in 1957, and earned a PhD in Biophysics there in 1970. After receiving her PhD, Geddes taught at the Texas Women's University and in the Department of Physiology at Baylor College of Medicine in Houston. + +Geddes joined the faculty at Purdue in 1975 where her husband, Leslie A. Geddes, was the head of the Department of Biomedical Engineering. Lanelle started in the School of Nursing as the Assistant Head of the Department. In 1980, she was promoted to the Head of the Department and served as Head until 1991. While at Purdue, Geddes challenged traditional perceptions of nurses as merely doctors' assistants who were wrongly believed to have no expertise or skill for diagnosis and treatment. In addition, Geddes was also instrumental in instituting a four-year nursing baccalaureate program and starting the Freshman Scholars, a program that provided scholarships to outstanding incoming freshman. + +Geddes' research was focused on cardiovascular physiology. Her teaching emphasized the impact of human pathophysiologic alterations and their influence on nursing and medical care. Her inclusion of pathophysiology encouraged her students to make better clinical judgments and to be stronger patient advocates. From 1996-2003, Geddes also taught pathophysiology to IU School of Medicine students at Purdue University. Geddes retired as a professor emeritus in 2003. + +Geddes' research and teaching had far-reaching impacts, and she received many awards over the course of her career. She was an AMOCO Foundation (Murphy) Award winner, a fellow of the University Teaching Academy, and a Helen B Schleman Gold Medallion Awardee. She also received the Lafayette YWCA Salute to Women Award and the Westminster Village Lifetime Service Award for her work within the community. Geddes passed away on January 25, 2016. + +## Citations + +Archives and Special Collections. (2021, May 19). Geddes, Lanelle E., September 15, 1935 - January 25, 2016. Purdue University. Retrieved from: + + + +[**Back to Geddes User Guide**](index.md) diff --git a/docs/userguides/geddes/concepts.md b/docs/userguides/geddes/concepts.md new file mode 100644 index 00000000..027094a3 --- /dev/null +++ b/docs/userguides/geddes/concepts.md @@ -0,0 +1,56 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Concepts + +## Containers & Images + +**Image** - An image is a simple text file that defines the source code of an application you want to run as well as the libraries, dependencies, and tools required for the successful execution of the application. Images are immutable meaning they do not hold state or application data. Images represent a software environment at a specific point of time and provide an easy way to share applications across various environments. Images can be built from scratch or downloaded from various repositories on the internet, additionally many software vendors are now providing containers alongside traditional installation packages like Windows .exe and Linux rpm/deb. + +**Container** - A container is the run-time environment constructed from an image when it is executed or run in a container runtime. Containers allow the user to attach various resources such as network and volumes in order to move and store data. Containers are similar to virtual machines in that they can be attached to when a process is running and have arbitrary commands executed that affect the running instance. However, unlike virtual machines, containers are more lightweight and portable allowing for easy sharing and collaboration as they run identically in all environments. + +**Tags** - Tags are a way of organizing similar image files together for ease of use. You might see several versions of an image represented using various tags. For example, we might be building a new container to serve web pages using our favorite web server: nginx. If we search for the nginx container on Docker Hub image repository we see many options or tags are available for the official nginx container. + +The most common you will see are typically `:latest` and `:number` where *number* refers to the most recent few versions of the software releases. In this example we can see several tags refer to the same image: `1.21.1, mainline, 1, 1.21,` and `latest` all reference the same image while the `1.20.1, stable, 1.20` tags all reference a common but different image. In this case we likely want the nginx image with either the `latest` or `1.21.1` tag represented as `nginx:latest` and `nginx:1.21.1` respectively. + +**Container Security** - Containers enable fast developer velocity and ease compatibility through great portability, but the speed and ease of use come at some costs. In particular it is important that folks utilizing container driver development practices have a well established plan on how to approach container and environment security. + +**Container Registries** - Container registries act as large repositories of images, containers, tools and surrounding software to enable easy use of pre-made containers software bundles. Container registries can be public or private and several can be used together for projects. Docker Hub is one of the largest public repositories available, and you will find many official software images present on it. You need a user account to avoid being rate limited by Docker Hub. A private container registry based on Harbor is available to use; see the [Container Registry](registry.md) page. + +**Docker Hub** - Docker Hub is one of the largest container image registries that exists and is well known and widely used in the container community, it serves as an official location of many popular software container images. Container image repositories serve as a way to facilitate sharing of pre-made container images that are “ready for use.” Be careful to always pay attention to who is publishing particular images and verify that you are utilizing containers built only from reliable sources. + +**Harbor** - Harbor is an open source registry for Kubernetes artifacts, it provides private image storage and enforces container security by vulnerability scanning as well as providing RBAC or role based access control to assist with user permissions. Harbor is a registry similar to Docker Hub, however it gives users the ability to create private repositories. You can use this to store your private images as well as keeping copies of common resources like base OS images from Docker Hub and ensure your containers are reasonably secure from common known vulnerabilities. + +## Container Runtime Concepts + +**Docker Desktop** - Docker Desktop is an application for your Mac / Windows machine that will allow you to build and run containers on your local computer. Docker desktop serves as a container environment and enables much of the functionality of containers on whatever machine you are currently using. This allows for great flexibility, you can develop and test containers directly on your laptop and deploy them directly with little to no modifications. + +**Volumes** - Volumes provide us with a method to create persistent data that is generated and consumed by one or more containers. For docker this might be a folder on your laptop while on a large Kubernetes cluster this might be many SSD drives and spinning disk trays. Any data that is collected and manipulated by a container that we want to keep between container restarts needs to be written to a volume in order to remain around and be available for later use. + +## Container Orchestration Concepts + +**Container Orchestration** - Container orchestration broadly means the automation of much of the lifecycle management procedures surrounding the usage of containers. Specifically it refers to the software being used to manage those procedures. As containers have seen mass adoption and development in the last decade, they are now being used to power massive environments and several options have emerged to manage the lifecycle of containers. One of the industry leading options is Kubernetes, a software project that has descended from a container orchestrator at Google that was open sourced in 2015. + +**Kubernetes (K8s)** - Kubernetes (often abbreviated as "K8s") is a platform providing container orchestration functionality. It was open sourced by Google around a decade ago and has seen widespread adoption and development in the ensuing years. K8s is the software that provides the core functionality of the Geddes Composable Platform by managing the complete lifecycle of containers. Additionally it provides the following functions: service discovery and load balancing, storage orchestration, secret and configuration management. The Kubernetes cluster can be accessed via the Rancher UI or the kubectl command line tool. + +**Rancher** - Rancher is a “complete software stack for teams adopting containers” as described by its website. It can be thought of as a wrapper around Kubernetes, providing an additional set of tools to help operate the K8s cluster efficiently and additional functionality that does not exist in Kubernetes itself. Two examples of the added functionality is the Rancher UI that provides an easy to use GUI interface in a browser and Rancher projects, a concept that allows for multi-tenancy within the cluster. Users can interact directly with Rancher using either the Rancher UI or Rancher CLI to deploy and manage workloads on the Geddes Composable Platform. + +**Rancher UI** - The Rancher UI is a web based graphical interface to use the Geddes Composable Platform from anywhere. + +**Rancher CLI** - The Rancher CLI provides a convenient text based toolkit to interact with the cluster. The binary can be downloaded from the link on the right hand side of the footer in the Rancher UI. After you download the Rancher CLI, you need to make a few configurations Rancher CLI requires: + +- Your Rancher Server URL, which is used to connect to Rancher Server. +- An API Bearer Token, which is used to authenticate with Rancher. See Creating an API Key. + +After setting up the Rancher CLI you can issue `rancher --help` to view the full range of options available. + +**Kubectl** - Kubectl is a text based tool for working with the underlying Geddes Kubernetes cluster. In order to take advantage of kubectl you will either need to set up a Kubeconfig File or use the built in kubectl shell in the Rancher UI. You can learn more about kubectl and how to download the kubectl file on the [Kubectl](access/kubectl.md) page. + +**Storage** - Storage is utilized to provide persistent data storage between container deployments. The **Ceph** filesystem provides access to Block, Object and shared file systems. File storage provides an interface to access data in a file and folder hierarchy similar to NTFS or NFS. Block storage is a flexible type of storage that allows for snapshotting and is good for database workloads and generic container storage. Object storage is also provided by Ceph, this features a REST based bucket file system providing S3 and Swift compatibility. diff --git a/docs/userguides/geddes/examples/database.md b/docs/userguides/geddes/examples/database.md new file mode 100644 index 00000000..413e8769 --- /dev/null +++ b/docs/userguides/geddes/examples/database.md @@ -0,0 +1,75 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Deploy a Database + +## Deploy a postgis Database + +1. Select your **Project** from the top right dropdown +2. Using the far left menu, select **Workload** +3. Click **Create** at the top right +4. Select the appropriate **Deployment Type** for your use case, here we will select and use **Deployment** +5. Fill out the form + * Select **Namespace** + * Give an arbitrary **Name** + * Set **Container Image** to the postgis Docker image: `geddes-registry.rcac.purdue.edu/docker-hub-cache/postgis/postgis:latest` + * Set the postgres user password + + Select the **Add Variable** button under the **Environment Variables** section + + Fill in the fields **Variable Name** and **Value** so that we have a variable `POSTGRES_PASSWORD = ` + * Create a persistent volume for your database + + Select the **Storage** tab from within the current form on the left hand side + + Select **Add Volume** and choose **Create Persistent Volume Claim** + + Give an arbitrary **Name** + + Select **Single-Node Read/Write** + + Select an appropriate **Storage Class** from the dropdown and give **Capacity** in GiB **e.g** 5 + + Provide the default postgres data directory as a **Mount Point** for the persistent volume `/var/lib/postgresql/data` + + Set **Sub Path** to `data` + * Set resource CPU limitations + + Select **Resources** tab on the left within the current form + + Under the **CPU Reservation** box fill in `2000`. This ensures that Kubernetes will only schedule your workload to nodes that have that resource amount available, guaranteeing your application has 2 CPU cores to utilize + + Under the **CPU Limit** box also fill in `2000`. This ensures that your workload cannot exceed or utilize more than 2 CPU cores. This helps resource quota management on the project level. + * Setup Pod Label + + Select **Labels & Annotations** on the left side of the current form + + Select **Add Label** under the **Pod Labels** section + + Give an arbitrary unique key and value you can remember later when creating Services and other resources **e.g** **Key:** `my-db` **Value:** `postgis` + * Select **Create** to launch the postgis database + +Wait a couple minutes while your persistent volume is created and the postgis container is deployed. The "does not have minimum availability" message is expected. But, waiting more than 5 minutes for your workload to deploy typically indicates a problem. You can check for errors by clicking your workload name (i.e. "mydb"), then the lower button on the right side of your deployed pod and selecting **View Logs**. If all goes well, you will see an Active status for your deployment. + +## Expose the Database to external clients + +Use a **LoadBalancer** service to automatically assign an IP address on a private Purdue network and open the postgres port (5432). A DNS name will automatically be configured for your service as `..geddes.rcac.purdue.edu`. + +1. Using the far left menu navigate to **Service Discovery** > **Services** +2. Select **Create** at the top right +3. Select **Load Balancer** +4. Fill out the form + * Ensure to select the **namespace** where you deployed the postgis database + * Give a **Name** to your **Service**. Remember that your final DNS name when the service creates will be in the format of `..geddes.rcac.purdue.edu` + * Fill in **Listening Port** and **Target Port** with the postgis default port **5432** + * Select the **Selectors** tab within the current form + + Fill in **Key** and **Value** with the label values you created during the **Setup Pod Label** step from earlier **e.g** **Key:** `my-db` **Value:** `postgis` + + IMPORTANT: The yellow bar will turn green if your key-value pair matches the pod label you set during the "Setup Pod Label" deployment step above. If you don't see a green bar with a matching Pod, your LoadBalancer will not work. + * Select the **Labels & Annotations** tab within the current form + + Select **Add Annotation** + + To deploy to a **Purdue Private Address Range** fill in **Key:** `metallb.universe.tf/address-pool` **Value:** `geddes-private-pool` + + To deploy to a **Public Address Range** fill in **Key:** `metallb.universe.tf/address-pool` **Value:** `geddes-public-pool` + +Kubernetes will now automatically assign you an IP address from the Geddes private IP pool. You can check the IP address by hovering over the "5432/tcp" link on the Service Discovery page or by viewing your service via kubectl on a terminal. + +``` +$ kubectl -n get services +``` + +Verify your DNS record was created: + +``` +$ host ..geddes.rcac.purdue.edu +``` diff --git a/docs/userguides/geddes/examples/index.md b/docs/userguides/geddes/examples/index.md new file mode 100644 index 00000000..3228426a --- /dev/null +++ b/docs/userguides/geddes/examples/index.md @@ -0,0 +1,18 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Examples + +These examples walk through deploying a database with persistent storage and making it available on the network, deploying a web server using a self-assigned URL, building and deploying an R Shiny application, and installing JupyterHub. + +- [**Deploy a Database**](database.md) +- [**Deploy a Web Server**](webserver.md) +- [**Deploy an R Shiny App**](r-shiny.md) +- [**Deploy JupyterHub**](jupyterhub.md) diff --git a/docs/userguides/geddes/examples/jupyterhub.md b/docs/userguides/geddes/examples/jupyterhub.md new file mode 100644 index 00000000..a5b329b8 --- /dev/null +++ b/docs/userguides/geddes/examples/jupyterhub.md @@ -0,0 +1,27 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Deploy JupyterHub + +Guidelines for installing JupyterHub via Helm. + +If you encounter errors related to privileges: + +``` +"message": "pods \"jupyter-username-xxxxx\" is forbidden: PodSecurityPolicy: unable to admit pod: [spec.initContainers[0].securityContext.privileged: Invalid value: true: Privileged containers are not allowed spec.initContainers[0].securityContext.capabilities.add: Invalid value: \"NET_ADMIN\": capability may not be added]", +``` + +add the following to your Helm values: + +``` +singleuser: + cloudMetadata: + blockWithIptables: false +``` diff --git a/docs/userguides/geddes/examples/r-shiny.md b/docs/userguides/geddes/examples/r-shiny.md new file mode 100644 index 00000000..5bb72452 --- /dev/null +++ b/docs/userguides/geddes/examples/r-shiny.md @@ -0,0 +1,79 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Deploy an R Shiny App + +This guide provides instructions on how to build a Docker image for an R Shiny application, push it to the Geddes Registry and deploy it on Geddes. + +## Create an R Shiny Docker Image + +Create a local Dockerfile by saving the following Dockerfile to your computer and editing the contents for your R Shiny App. + +``` +FROM rocker/shiny + +# install R package dependencies +RUN apt-get update && apt-get install -y \ + libssl-dev \ + git \ + ## clean up + && apt-get clean \ + && rm -rf /var/lib/apt/lists/ \ + && rm -rf /tmp/downloaded_packages/ /tmp/*.rds + +## Install any R packages you need +RUN install2.r --error \ + \ + \ + \ + ## clean up + && rm -rf /tmp/downloaded_packages/ /tmp/*.rds + +## copy shiny app to shiny server location +COPY ./ /srv/shiny-server/ +``` + +## Docker Build and Testing Process + +Build the Docker image locally based on the Dockerfile above. The Dockerfile must be in your current working directory. This command tags the image with the name "myshinyapp" and version 1.0. + +``` +docker build -t myshinyapp:1.0 . +``` + +Test your application locally. This command will run your container locally and expose the R Shiny port (3838) so it can be accessed via `http://localhost:3838` in your web browser. + +On Linux or Mac: `docker run --network=host myshinyapp:1.0` + +On Windows: `docker run -p 3838:3838 myshinyapp:1.0` + +Iterate on code changes locally until you want to deploy on Geddes. + +## Tag and Upload to the Geddes Registry + +Tag the image for upload to the Geddes Registry. + +``` +docker tag myshinyapp:1.0 geddes-registry.rcac.purdue.edu//myshinyapp:1.0 +``` + +Push the image to the Geddes Registry. Run the login command using your Purdue career account username and password if you currently are not authenticated to the registry. + +``` +docker login geddes-registry.rcac.purdue.edu +``` + +``` +docker push geddes-registry.rcac.purdue.edu//myshinyapp:1.0 +``` + +## Deploy the Application on Geddes + +To deploy the application, one can follow the [instructions for deploying a web server](webserver.md) and replace the image name with the Geddes registry image tag from above: `geddes-registry.rcac.purdue.edu//myshinyapp:1.0` diff --git a/docs/userguides/geddes/examples/webserver.md b/docs/userguides/geddes/examples/webserver.md new file mode 100644 index 00000000..4562d48d --- /dev/null +++ b/docs/userguides/geddes/examples/webserver.md @@ -0,0 +1,52 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Deploy a Web Server + +## Nginx Deployment + +1. Select your **Project** from the top right dropdown +2. Using the far left menu, select **Workload** +3. Click **Create** at the top right +4. Select the appropriate **Deployment Type** for your use case, here we will select and use **Deployment** +5. Fill out the form + * Select **Namespace** + * Give an arbitrary **Name** + * Set **Container Image** to the nginx Docker image: `geddes-registry.rcac.purdue.edu/docker-hub-cache/library/nginx` + * Create a **Cluster IP** service to point our external accessible ingress to later + + Click **Add Port** + + Click **Service Type** and with the dropdown select **Cluster IP** + + In the **Private Container Port** box type **80** + * Setup Pod Label + + Select **Labels & Annotations** on the left side of the current form + + Select **Add Label** under the **Pod Labels** section + + Give an arbitrary unique key and value you can remember later when creating Services and other resources **e.g** **Key:** `my-web` **Value:** `nginx` + * Click **Create** + + + +Wait a couple minutes while your application is deployed. The "does not have minimum availability" message is expected. But, waiting more than 5 minutes for your workload to deploy typically indicates a problem. You can check for errors by clicking your workload name (i.e. "mywebserver"), then using the vertical ellipsis on the right hand side of your deployed pod and selecting **View Logs**. + +If all goes well, you will see an Active status for your deployment. + +## Expose the web server to external clients via an Ingress + +1. Using the far left menu navigate to **Service Discovery** > **Ingresses** and select **Create** at the top right +2. Fill out the form + * Ensure to select the **namespace** where you deployed the nginx + * Give an arbitrary **Name** + * Under **Request Host** give the url you want for your web application **e.g** `my-nginx.geddes.rcac.purdue.edu` + * Fill in the value **Path** > **Prefix** as `/` + * Use the **Target Service** and **Port** dropdowns to select the service you created during the **Nginx Deployment** section + * The default Ingress is **private**, which is only accessible within the Purdue network. To make a **public** one, change the **Ingress Class** to `public`: + + + +![Changing the Ingress Class to public](https://www.rcac.purdue.edu/files/image-20231212162400-1.png) diff --git a/docs/userguides/geddes/index.md b/docs/userguides/geddes/index.md index e69de29b..aa25a68a 100644 --- a/docs/userguides/geddes/index.md +++ b/docs/userguides/geddes/index.md @@ -0,0 +1,25 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Geddes User Guide + +New usage patterns have emerged in research computing that depend on the availability of custom services such as notebooks, databases, elastic software stacks, and science gateways alongside traditional batch HPC. The Geddes Composable Platform is a [Kubernetes](https://kubernetes.io/) based private cloud managed with [Rancher](https://rancher.com) that provides a platform for creating composable infrastructure on demand. This cloud-style flexibility provides researchers the ability to self-deploy and manage persistent services to complement HPC workflows and run container-based data analysis tools and applications. Funded by the National Science Foundation under grant OAC-2018926, Geddes consists of Dell compute nodes with two 64-core AMD Epyc 'Rome' processors (128 cores per node). + +- [**Overview of Geddes**](overview.md) +- [**Biography of Lanelle Geddes**](biography.md) +- [**Concepts**](concepts.md) +- [**Accounts**](accounts.md) +- [**Access**](access/index.md) +- [**Container Registry**](registry.md) +- [**Storage**](storage.md) +- [**Workloads**](workloads.md) +- [**Services**](services.md) +- [**Examples**](examples/index.md) +- [**Troubleshooting**](troubleshooting.md) diff --git a/docs/userguides/geddes/overview.md b/docs/userguides/geddes/overview.md new file mode 100644 index 00000000..2f24b67c --- /dev/null +++ b/docs/userguides/geddes/overview.md @@ -0,0 +1,44 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Overview of Geddes + +Geddes is a Community Composable Platform optimized for composable, cloud-like workflows that are complementary to the batch applications run on Community Clusters. Funded by the National Science Foundation under grant OAC-2018926, Geddes consists of Dell Compute nodes with two 64-core AMD Epyc 'Rome' processors (128 cores per node). + +To purchase access to Geddes today, go to the [Cluster Access Purchase](https://www.rcac.purdue.edu/purchase) page. Please subscribe to our Community Cluster Program Mailing List to stay informed on the latest purchasing developments or [contact us](mailto:rcac-cluster-purchase@lists.purdue.edu) if you have any questions. + +## Geddes Namesake + +Geddes is named in honor of Lanelle Geddes, a Purdue professor and Head of the School of Nursing. More information about her life and impact on Purdue is available in a [Biography of Lanelle Geddes](biography.md). + +## Geddes Specifications + +All Geddes compute nodes have 128 processor cores and 100 Gbps Infiniband interconnects. + +### Geddes Hyperconverged Worker Nodes + +| Worker Type | Number of Nodes | Processors per Node | Cores per Node | Storage per Node | Memory per Node | +| --- | --- | --- | --- | --- | --- | +| A | 8 | Two AMD Epyc CPUs @ 2.0GHz | 128 | 24 TB SATA SSD | 1 TB | +| B | 16 | Two AMD Epyc CPUs @ 2.0GHz | 128 | 24 TB SATA SSD | 512 GB | + +### Geddes Hyperconverged GPU Nodes + +| Number of Nodes | Processors per Node | Cores per Node | GPUs per Node | Storage per Node | Memory per Node | +| --- | --- | --- | --- | --- | --- | +| 4 | Two AMD Epyc CPUs @ 2.0GHz | 128 | 2 Nvidia A100 | 24 TB SATA SSD | 512 GB | + +### Geddes Storage Nodes + +| Number of Nodes | Processors per Node | Cores per Node | Storage per Node | Memory per Node | +| --- | --- | --- | --- | --- | +| 8 | Two Intel Xeon Gold 6126 | 24 | 24 TB NVMe | 192 GB | + +Geddes nodes run Rocky 8 and use Rancher and Kubernetes as the resource manager for resource and workload orchestration. diff --git a/docs/userguides/geddes/registry.md b/docs/userguides/geddes/registry.md new file mode 100644 index 00000000..f1e73da2 --- /dev/null +++ b/docs/userguides/geddes/registry.md @@ -0,0 +1,88 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Container Registry + +## Accessing the Geddes Harbor Registry + +The Geddes Harbor registry is only accessible via campus networks and the Purdue VPN. Use a web browser to navigate to [geddes-registry.rcac.purdue.edu](https://geddes-registry.rcac.purdue.edu) and log in with your Purdue career account username and password. (Do not add "`,push`" to your password nor use the Purdue Duo client.) + +## Using the Geddes Registry Docker Hub Cache + +It's advised that you use the Docker Hub cache within Geddes to pull images for your deployments. There's a limit to how many images Docker Hub will allow to be pulled within a 24 hour period which Geddes does reach depending on user activity. This means if you're trying to deploy a workload without the cache, or have a currently deployed workload that needs migrated, restarted, or upgraded without the cache, there's a chance it will fail. + +To bypass this, use the Geddes cache url `geddes-registry.rcac.purdue.edu/docker-hub-cache/` in your image names. + +For example if you're wanting to pull a notebook from JupyterHub's Docker Hub repo e.g `jupyter/tensorflow-notebook:latest`, pulling it from the Geddes cache would look like this `geddes-registry.rcac.purdue.edu/docker-hub-cache/jupyter/tensorflow-notebook:latest`. + +If the image you are using is an "Official" docker image (like httpd or mongo) the URL will use "library" in the path instead of the Docker repository name: `geddes-registry.rcac.purdue.edu/docker-hub-cache/library/mongo:latest`. + +## Creating a registry + +1. Using a browser, login to [geddes-registry.rcac.purdue.edu](https://geddes-registry.rcac.purdue.edu) with your Purdue account username and password +2. From the main page click **create project**, this will act as your registry +3. Fill in a name and select whether you want the project to be public or private +4. Click **ok** to create and finalize + +## Tagging and Pushing Images to Your Harbor Registry + +1. Tag your image + + ``` + $ docker tag my-image:tag geddes-registry.rcac.purdue.edu/project-registry/my-image:tag + ``` +2. Login to the Geddes registry via command line + + ``` + $ docker login geddes-registry.rcac.purdue.edu + ``` +3. Push your image to your project registry + + ``` + $ docker push geddes-registry.rcac.purdue.edu/project-registry/my-image:tag + ``` + +## Creating a Robot Account for a Private Registry + +A robot account and token can be used to authenticate to your registry in place of having to supply or store your private credentials on multi-tenant cloud environments like Rancher/Geddes. + +1. Navigate to your project by logging into [geddes-registry.rcac.purdue.edu](https://geddes-registry.rcac.purdue.edu) +2. Navigate to the **Robot Accounts** tab and click **New Robot Account** +3. Fill out the form + * Name your robot account + * Select account expiration if any, select never to make permanent + * Customize what permissions you wish the account to have + * Click **Add** +4. Copy your information + * Your robot's account name will be something longer than what you specified, since this is a multi-tenant registry, Harbor does this to avoid unrelated project owners creating a similarly named robot account + * Export your token as JSON or copy it to a clipboard + + !!! note + Harbor does not store account tokens, once you exit this page your token will be unrecoverable. + +## Adding Your Private Registry to Rancher + +1. Select your **Project** from the top right dropdown +2. Using the far left dropdown menu navigate to **Storage** > **Secrets** +3. Click **Create** +4. Click **Registry** +5. Fill out the form + * Select **namespace** that will have access to the registry + * Give a **name** to the Registry secret (this is an arbitrary name) + * Under the **Data** tab ensure **custom** is selected + * Enter "geddes-registry.rcac.purdue.edu" under **Registry Domain Name** + * Enter your robot account's long name **eg. robot$my-registry+robot** as the **Username** + * Enter your robot account's token as the **password** + * Click **Create** + +## External Harbor Documentation + +* [Project Configurations](https://goharbor.io/docs/2.1.0/working-with-projects/project-configuration/) +* [Working With Images](https://goharbor.io/docs/2.1.0/working-with-projects/working-with-images/) diff --git a/docs/userguides/geddes/services.md b/docs/userguides/geddes/services.md new file mode 100644 index 00000000..49221133 --- /dev/null +++ b/docs/userguides/geddes/services.md @@ -0,0 +1,50 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Services + +A **Service** is an abstract way to expose an application running on Pods as a network service. This allows the networking and application to be logically decoupled so state changes in either the application itself or the network connecting application components do not need to be tracked individually by all portions of an application. + +## Service resources + +In Kubernetes, a Service is an abstraction which defines a logical set of Pods and a policy by which to access them (sometimes this pattern is called a micro-service). The set of Pods targeted by a Service is usually determined by a Pod selector, but can also be defined other ways. + +## Publishing Services (ServiceTypes) + +For some parts of your deployment you may need to expose an application externally from the cluster using **Services**. + +Kubernetes **ServiceTypes** allow you to specify what kind of Service you want. The default is ClusterIP. + +* **ClusterIP:** Exposes the Service on a cluster-internal IP. Choosing this value makes the Service only reachable from within the cluster. This is the default ServiceType. +* **NodePort:** Exposes the Service on each Node's IP at a static port (the NodePort). A ClusterIP Service, to which the NodePort Service routes, is automatically created. You'll be able to contact the NodePort Service, from outside the cluster, by requesting `:`. +* **LoadBalancer:** Exposes the Service externally using a cloud provider's load balancer. NodePort and ClusterIP Services, to which the external load balancer routes, are automatically created. + +You can see an example of [exposing a workload using the **LoadBalancer** type](examples/database.md#expose-the-database-to-external-clients) in the examples section. + +### Ingress + +An **Ingress** is an API object that manages external access to the services in a cluster, typically HTTP/HTTPS. An Ingress is not a ServiceType, but rather brings external traffic into the cluster and then passes it to an Ingress Controller to be routed to the correct location. Ingress may provide load balancing, SSL termination and name-based virtual hosting. Traffic routing is controlled by rules defined on the Ingress resource. + +## Ingress Controller + +Geddes provides the [nginx](https://github.com/kubernetes/ingress-nginx/blob/main/README.md#readme) ingress controller configured to facilitate SSL termination and automatic DNS name generation under the `geddes.rcac.purdue.edu` subdomain. + +In the Examples section, there are detailed instructions about **[how to expose a service with an Ingress](examples/webserver.md)**. Here are the outline of major steps: + +1. Create a new **Deployment** under Workload +2. Set **Container Image** to the Docker image you want to use +3. Create a **Cluster IP** service to point our external accessible ingress for later +4. Setup Pod Label +5. Create a new **Ingress** page +6. Give the URL you would like to use for your web application under **Request Host** +7. Put the **Cluster IP** you created in *Step 1* to **Target Service** and **Port** +8. The default Ingress is **private**, which is only accessible within the Purdue network. To make a **public** one, add an **Annotation**: `kubernetes.io/ingress.class: "public"` + +Kubernetes provides additional information about [Ingress Controllers](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) in the official documentation. diff --git a/docs/userguides/geddes/storage.md b/docs/userguides/geddes/storage.md new file mode 100644 index 00000000..d887052f --- /dev/null +++ b/docs/userguides/geddes/storage.md @@ -0,0 +1,187 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Storage + +Geddes has a software defined storage system that provides user-provisioned persistent data storage for container deployments. + +Ceph is used to provide block, filesystem and object storage on the Geddes Composable Platform. **File storage** provides an interface to access data in a file and folder hierarchy similar to Data Depot. **Block storage** is a flexible type of storage that is good for database workloads and generic container storage. **Object storage** is ideal for large unstructured data and features a REST based API providing an S3 compatible endpoint that can be utilized by the preexisting ecosystem of S3 client tools. + +!!! note + The integrity of the Ceph storage components is accomplished via a redundant disk system (3x replication). RCAC currently provides no backup of Geddes storage, either via snapshots or transfer of data to other storage. No disaster recovery other than the redundant disk systems is currently provided. + +## Storage Classes + +Geddes provides four different storage classes based on access characteristics and the performance needs of a workload. Performance classes should be used for workloads with high I/O requirements (databases, AI/ML). + +* `geddes-standard-singlenode` - Block storage based on SSDs that can be accessed by a single node (Single-Node Read/Write). +* `geddes-standard-multinode` - File storage based on SSDs that can be accessed by multiple nodes (Many-Node Read/Write or Many-Node Read-Only) +* `geddes-performance-singlenode` - Block storage based on NVMe drives that can be accessed by a single node (Single-Node Read/Write). +* `geddes-performance-multinode` - File storage based on NVMe drives that can be accessed by multiple nodes (Many-Node Read/Write or Many-Node Read-Only) + +### Block and Filesystem Storage Provisioning in Deployments + +Block and Filesystem storage can both be provisioned in a similar way. + +1. While deploying a Workload, click the Storage tab and click **Add Volume**… +2. Select "**Create Persistent Volume Claim**" +3. Set a unique Persistent Volume Claim Name, i.e. "**-volume**" +4. Select a Storage Class. The default storage class is "geddes-standard-singlenode". +5. Select an Access Mode. The "geddes-standard-singlenode" class only supports Single-Node Read/Write. +6. Request an amount of storage in Gigabytes +7. Provide a Mount Point for the persistent volume: i.e */data* + +## Backup Strategies + +Developers using the Geddes platform should have a backup strategy in place to ensure that your data is safe and can be recovered in case of a disaster. Below is a list of methods that can be used to backup data on Persistent Volume Claims. + +### Copying Files to and from a Container + +The `kubectl cp` command can be used to copy files into or out of a running container. + +``` +# get pod id you want to copy to/from +kubectl -n get pods + +# copy a file from local filesystem to remote pod +kubectl cp /tmp/myfile /:/tmp/myfile + +# copy a file from remote pod to local filesystem +kubectl cp /:/tmp/myfile /tmp/myfile +``` + +This method requires the `tar` executable to be present in your container, which is usually the case with Linux images. More info can be found in the kubectl [docs](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#cp). + +### Copying Directories from a Container + +The `kubectl cp` command can also be used to recursively copy entire directories to local storage or places like Data Depot. + +``` +# get pod id you want to copy to/from +kubectl -n get pods + +# copy a directory from remote pod to local filesystem +kubectl cp /:/pvcdirectory /localstorage +``` + +### Backing up a Database from a Container + +The `kubectl exec` command can be used to create a backup or dump of a database and save it to a local directory. For instance, to backup a MySQL database with kubectl, run the following commands from a local workstation or cluster frontend. + +``` +# get pod id of your database pod +kubectl -n get pods + +# run mysqldump in the remote pod and redirect the output to local storage +kubectl -n exec -- mysqldump --user= --password= my_database > my_database_dump.sql +``` + +### Backups using common Linux tools + +If your container has the OpenSSH client or rsync packages installed, one can use the `kubectl exec` command to copy or synchronize to another storage location. + +``` +# get pod id of your pod +kubectl -n get pods + +# run scp to transfer data from the pod to a remote storage location +kubectl -n exec -- scp -r /data username@negishi.rcac.purdue.edu:~/backup +``` + +### Automating Backups + +Kubernetes CronJob resources can be used with the commands above to create an automated backup solution. For more information, refer to the Kubernetes [documentation](https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/). + +## Object Storage + +Geddes provides S3 compatible object storage from the endpoint [s3-prod.geddes.rcac.purdue.edu](https://s3-prod.geddes.rcac.purdue.edu). + +S3 access can be requested by [contacting support](https://www.rcac.purdue.edu/help). Access keys will be provided via Filelocker. + +### Accessing Object Storage + +The S3 endpoint provided by Geddes can be accessed in multiple ways. Two popular options for interacting with S3 storage via the command line and GUI are listed below. + +**S3cmd** is a free command line tool for managing data in S3 compatible storage resources that works on Linux and Mac. + +* Download: [s3tools.org/download](https://s3tools.org/download) +* How-To Documentation: [s3tools.org/s3cmd-howto](https://s3tools.org/s3cmd-howto) + +**Cyberduck** is a free server and cloud storage browser that can be used on Windows and Mac. + +1. [Download and install Cyberduck](https://cyberduck.io/download/) +2. Launch Cyberduck +3. Click **+ Open Connection** at the top of the UI. +4. Select **S3** from the dropdown menu +5. Fill in **Server**, **Access Key ID** and **Secret Access Key** fields +6. Click **Connect** +7. You can now right click to bring up a menu of actions that can be performed against the storage endpoint + +Further information about using Cyberduck can be found on the [Cyberduck documentation site](https://docs.cyberduck.io/). + +## Accessing and Mounting Depot + +[Contact support](https://www.rcac.purdue.edu/help) to request access. Make sure to provide the Geddes namespace that will be accessing depot and the `$PATH` to your user/lab depot space. Once access has been approved and an admin has created the needed Persistent Volumes for depot you can move on to the steps below. + +The overall process is: + +1. Submit request. + 1. An admin will create the needed Persistent Volume needed to access your depot space and will provide you with the name **pv-depot-** +2. Create Kubernetes secrets for Depot username/password authentication. +3. Create a Persistent Volume Claim via Rancher UI or kubectl. +4. Use that claim for your workloads/pods to mount depot. + +**Create k8s username/password secret for depot auth** + +1. From the Rancher UI, use the left navigation bar to select **Storage > Secrets** +2. Click **Create** at the top right +3. Select **Opaque** and fill out the form. + 1. Make sure to select the namespace that will be accessing depot + 2. Name should be **depot-credentials-** + 3. Under the data tab click **add** to create a second secret key field + 4. Provide key/values + 1. Key: **username** value: **** + 2. Key: **password** value: **** + 5. Click **Create** at the bottom right + +**Create a PersistentVolumeClaim for Depot (Rancher UI)** + +1. From the Rancher UI, use the left navigation bar to select **Storage > PersistentVolumeClaims** +2. Click **Create** at the top right and fill out the form + 1. Make sure to select the namespace that will be accessing depot + 2. Name should be **pvc-depot-** + 3. Select **Use an existing Persistent Volume** + 4. Use the dropdown to the immediate right to select **pv-depot-** + 5. Click **Customize** in the form tab on the left + 6. Select **Many Nodes Read-Write** + 7. Click **Create** at the bottom right. + +**Create a PersistentVolumeClaim for Depot (kubectl)** + +1. Create a yaml file i.e **depot-pvc.yaml** with the code below + + ``` + apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + name: pvc-depot- + namespace: + spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Mi + volumeName: pv-depot- + storageClassName: "" + ``` +2. Replace all the **** and **** with the appropriate values. + 1. Do not include the example angle brackets **< >** in your code +3. Apply the yaml with the command `kubectl apply -f depot-pvc.yaml` diff --git a/docs/userguides/geddes/troubleshooting.md b/docs/userguides/geddes/troubleshooting.md new file mode 100644 index 00000000..cd6e90d4 --- /dev/null +++ b/docs/userguides/geddes/troubleshooting.md @@ -0,0 +1,81 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Troubleshooting + +## Useful Links + +There are many valuable Kubernetes troubleshooting guides readily accessible on the Internet. Instead of duplicating them here, we provide links to external documentation that has been useful for users of the Geddes platform. + +* [Debugging Pods](https://kubernetes.io/docs/tasks/debug/debug-application/debug-pods/) +* [Debugging Services](https://kubernetes.io/docs/tasks/debug/debug-application/debug-service/) +* [Pod Failures](https://kubernetes.io/docs/tasks/debug/debug-application/determine-reason-pod-failure/) +* [Get a Shell on a Running Container](https://kubernetes.io/docs/tasks/debug/debug-application/get-shell-running-container/) + + Through the Geddes UI, the equivalent method is clicking the vertical ellipsis and selecting "Execute Shell". + +## Create a Pod for Debugging + +Many times, users want to start a simple persistent Pod from a container image like Alpine or Ubuntu to do troubleshooting. The following YAML will deploy an Alpine Linux pod in a namespace that sleeps for 24 hours. + +``` +apiVersion: v1 +kind: Pod +metadata: + name: debug + namespace: + labels: + app: debug +spec: + containers: + - image: geddes-registry.rcac.purdue.edu/docker-hub-cache/library/alpine + command: + - "sleep" + - "86400" + name: debug +``` + +One can also launch a persistent Pod by specifying the sleep command via the Geddes UI. + +![Launching a persistent Pod via the Geddes UI](https://www.rcac.purdue.edu/files/image-20231004151457-1.png) + +## Permission Denied on PVC for non-root User + +If your container or process runs as a non-root user and you see a "Permission denied" error, you may need to set the fsGroup SecurityContext on your Pod so permissions are configured correctly on the PVC. This can be done in the Pod's spec. + +``` +securityContext: + fsGroup: +``` + +Where gid is the group id your container is running as, or the group id of the process that is trying to write to the PVC. + +This setting can also be applied under the Pod menu when deploying a workload via the Geddes UI. + +![Setting the fsGroup SecurityContext via the Geddes UI](https://www.rcac.purdue.edu/files/image-20231004152714-1.png) + +## Pull Rate Limit Error + +**Symptom:** + +ImagePullBackoff Error with message `Failed to pull image ":": rpc error: code = Unknown desc = toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit` + +**Solution:** + +Use the Geddes Registry [Docker Hub Cache](registry.md#using-the-geddes-registry-docker-hub-cache) to pull your image from Docker Hub. + +## Ingress 413 Content Too Large Errors + +By default, the Ingress controller on Geddes can handle requests up to 1 MB in size. If you need to send requests larger than 1 MB you can increase the size with the following Ingress annotation. Using "0" will allow unlimited size. + +``` +metadata: + annotations: + nginx.ingress.kubernetes.io/proxy-body-size: "0" +``` diff --git a/docs/userguides/geddes/workloads.md b/docs/userguides/geddes/workloads.md new file mode 100644 index 00000000..b61e8585 --- /dev/null +++ b/docs/userguides/geddes/workloads.md @@ -0,0 +1,24 @@ +--- +tags: + - Geddes +authors: + - jin456 + - goughes +search: + boost: 2 +--- + +# Workloads + +## Deploy a Workload + +1. Using the top right dropdown select the **Project** or **Namespace** you wish to deploy to. +2. Using the far left menu navigate to **Workload** +3. Click **Create** at the top right +4. Select the appropriate **Deployment Type** for your use case + * Select **Namespace** if not already done from step 1 + * Set a unique **Name** for your deployment, **i.e.** "myapp" + * Set **Container Image**. Ensure you're using the Geddes registry for personal images or the Geddes registry docker-hub cache when pulling public docker-hub specific images. **e.g**: `geddes-registry.rcac.purdue.edu/my-registry/myimage:tag` or `geddes-registry.rcac.purdue.edu/docker-hub-cache/library/image:tag` + * Click **Create** + +See the [Examples](examples/index.md) section for complete walkthroughs of deploying a database, a web server, an R Shiny app, and JupyterHub. diff --git a/mkdocs.yml b/mkdocs.yml index 1b856d70..73355174 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -163,7 +163,28 @@ nav: - Compiling Source Code: userguides/scholar/compile.md - Frequently Asked Questions: userguides/scholar/faqs.md - Negishi: https://www.rcac.purdue.edu/knowledge/negishi - - Geddes: https://www.rcac.purdue.edu/knowledge/geddes + - Geddes: + - userguides/geddes/index.md + - Biography of Lanelle Geddes: userguides/geddes/biography.md + - Overview of Geddes: userguides/geddes/overview.md + - Concepts: userguides/geddes/concepts.md + - Accounts: userguides/geddes/accounts.md + - Access: + - userguides/geddes/access/index.md + - Rancher UI: userguides/geddes/access/rancher.md + - Kubectl: userguides/geddes/access/kubectl.md + - Refreshing Your Kubectl Token: userguides/geddes/access/tokens.md + - Container Registry: userguides/geddes/registry.md + - Storage: userguides/geddes/storage.md + - Workloads: userguides/geddes/workloads.md + - Services: userguides/geddes/services.md + - Examples: + - userguides/geddes/examples/index.md + - Deploy a Database: userguides/geddes/examples/database.md + - Deploy a Web Server: userguides/geddes/examples/webserver.md + - Deploy an R Shiny App: userguides/geddes/examples/r-shiny.md + - Deploy JupyterHub: userguides/geddes/examples/jupyterhub.md + - Troubleshooting: userguides/geddes/troubleshooting.md - Hammer: https://www.rcac.purdue.edu/knowledge/hammer - Rossmann: https://www.rcac.purdue.edu/knowledge/rossmann - Weber: https://www.rcac.purdue.edu/knowledge/weber From e632ac591448a7aff056251961330aec6f46339e Mon Sep 17 00:00:00 2001 From: Guangzhen Jin Date: Tue, 2 Jun 2026 15:30:56 -0400 Subject: [PATCH 3/6] Fixing minor issues and pictures for Geddes UG. --- .../userguides/geddes/Geddes-web-server-1.png | Bin 0 -> 23911 bytes .../userguides/geddes/Geddes-web-server-2.png | Bin 0 -> 20297 bytes .../userguides/geddes/Geddes-web-server-3.png | Bin 0 -> 51248 bytes .../userguides/geddes/Geddes-web-server-4.png | Bin 0 -> 37999 bytes .../userguides/geddes/Geddes-web-server-5.png | Bin 0 -> 21972 bytes .../userguides/geddes/Geddes-web-server-6.png | Bin 0 -> 11597 bytes .../geddes/Geddes-web-server-6b.png | Bin 0 -> 2836 bytes .../userguides/geddes/Geddes-web-server-7.png | Bin 0 -> 37860 bytes .../userguides/geddes/Geddes-web-server-8.png | Bin 0 -> 31881 bytes .../userguides/geddes/Geddes-web-server-9.png | Bin 0 -> 22637 bytes docs/userguides/geddes/access/index.md | 7 +- docs/userguides/geddes/access/kubectl.md | 15 ++-- docs/userguides/geddes/access/rancher.md | 2 +- docs/userguides/geddes/examples/database.md | 68 +++++++++--------- docs/userguides/geddes/examples/index.md | 9 ++- docs/userguides/geddes/examples/jupyterhub.md | 27 ------- docs/userguides/geddes/examples/r-shiny.md | 10 +-- docs/userguides/geddes/examples/webserver.md | 54 +++++++------- docs/userguides/geddes/index.md | 5 +- docs/userguides/geddes/registry.md | 4 +- docs/userguides/geddes/storage.md | 63 ++++++++-------- mkdocs.yml | 15 ++-- 22 files changed, 122 insertions(+), 157 deletions(-) create mode 100644 docs/assets/images/userguides/geddes/Geddes-web-server-1.png create mode 100644 docs/assets/images/userguides/geddes/Geddes-web-server-2.png create mode 100644 docs/assets/images/userguides/geddes/Geddes-web-server-3.png create mode 100644 docs/assets/images/userguides/geddes/Geddes-web-server-4.png create mode 100644 docs/assets/images/userguides/geddes/Geddes-web-server-5.png create mode 100644 docs/assets/images/userguides/geddes/Geddes-web-server-6.png create mode 100644 docs/assets/images/userguides/geddes/Geddes-web-server-6b.png create mode 100644 docs/assets/images/userguides/geddes/Geddes-web-server-7.png create mode 100644 docs/assets/images/userguides/geddes/Geddes-web-server-8.png create mode 100644 docs/assets/images/userguides/geddes/Geddes-web-server-9.png delete mode 100644 docs/userguides/geddes/examples/jupyterhub.md diff --git a/docs/assets/images/userguides/geddes/Geddes-web-server-1.png b/docs/assets/images/userguides/geddes/Geddes-web-server-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f41e8aa16347ed2fec1fbb44d7f9b5c5f967de86 GIT binary patch literal 23911 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 z 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 Tazw)s;G=a?|3r?)WxxLcM-sfr literal 0 HcmV?d00001 diff --git a/docs/assets/images/userguides/geddes/Geddes-web-server-2.png b/docs/assets/images/userguides/geddes/Geddes-web-server-2.png new file mode 100644 index 0000000000000000000000000000000000000000..1541cd11a8b71fd4d5285c6528c505d9b1c31a39 GIT binary patch literal 20297 zcmc$`cUV(Tw>BI^1Vu&V2Z%Jqf`Sx5K%@#NDpir*Rk{#*NeH21!-!I(ND*mLLN7vy zi1e!TmWWgXB(x+DQr-=g=RD{8&bglVuXnBsP1$>9tu<@btovSj^29(->(GG{2S6au zp<6dK?}9+gMBw!n+dkl5hgdEl;6EnsyISg?;vW8=z?;2}*L1IeK&1$FsvQgPe!s^} zGj9;+aMR8oQ!6;{Aqb?0xutpSUV!y7YTH}DF)dvlu0GVr5oy|`Dy z<*wP%)-Jc}bS^??zt)sE@Gmdv9MrNt-Q4l*j^CH_36{yccGrM(Ha&sc%V6?Pl?88CCH+Ce`P7DV z^2RL92R%8jy$29=rzy85p2G%P967q%O35>~m4AJqhEUIA{q=I;4%?0mcAD~mOu=8T zGPF(&F#meFaXtd_>s5$gqyY!0M9<6$b!xuHCSgm)arR3-;^@(oZ%Z0o4PTZFL7)uU z5gZd}=v2-cY_3Tk^>p)Wt)H9h(gBbGe>umc?PKNor$(4T6+-IDpifu7SQ^R1dw@d9 zY|(o_eY`tzEFS5%Oc2`u8Ju%SzfTeef%>d}ee5lC5u`R+0%i&kEvv6j#TEFcznny0 zHT-ZIPOiC%yveiMW5iQ=P{khLK7;EOwgR^R9YbEIHS>YYnYOt>dBWx;FU|mZscB{W zI0PyRfw6<`9Thj#I)Wq`G#Pcgjp4oxhtkOftEBv?Rd+nN7uEXC)174q&h zO>31P*`<_j3xbW!`Yk3ksPDi?HAs!?YjKWN@{wXIU7KgmT6^->pZc5{u%H*DTOZt>nf?|p zd944uFi0);x8j|Y2iNzX2^E_<(idn9A;_DpCR9J;Henx%ji4OPVp)b$XzRiK5I%1f z1}mI*a~}LMeN&{q8%sH82y`%ee?oPB~&H(c0Wi!CP#iw>3DYTI&Zy%_WSR3*tA|$)Y@CiL$f< ziOg!U&i;8Edtep%!Xwph&AMnyNH%F;Unx@Y9Bp`anq7-vagnw~>&Iy?6nEk2{lpi`H`vGKI_jX=7}N6P{9DIH03jM{!>{lmZ9gl++6b_iw(_o?1NWahPKUN&zjJN1_{hgVZ6a+VBKM^E5 z#*52RLwin7(n-Aaq?;x3Cc@k9@!Qc*>KRSrJhJ~&E5Rj`goiFmHPvx3rm@ZWtN4bG zZZbmrvIja4r@^{)kzVui5CC_e;e4+IS^xLtv zssHlA>8K?oeYE@(=5lTIrRnS>-(FZN5R?in4j9$*;aShww-tQ3er@vdSAtO5!OwoC zjq3!XjZ$@#4X;lw-v*LH=m$rN$Ut;@*3)c(DjMMq!9=yxHUVq#;t7QDKMF z=Z3?C72Su5Z9mbQ?vN!NEph+aA(CH)WP!5}RGlVM<{LeDaTqJO*MK=hvKyVRTwIKxlSeNqIuefbYqW0q?oCo)L_r9iY(YW#q=3+QQ})eJ(V1bD@9)# z=j!I~Lv zQIO?V&ZeZm<&Rh=PxPb74ISETUtELlts7OC)B0M>IfsW?{xPd^rwLZVjaI6jNSHZR z*uK?Lhw=4=kr->J^->TRpM+4~Vi0wxX;AOx;QOSHA7HZZ?o8`~ms@;x_nzF&XR~P9 zM+ZypqKF5hhyGU%}$?WB(FJuI9>kPS$SZ3I9feU)I!@o4~!o@{%FxqCNb|jv1Ic`fMaf)TT zh}@2{uvowBr4GAfT)*N4M(%@X?96ck)~T7@#JF)AtA)iD1)M6Bd)VUf*72GjW--3{ zqiVHjQk-$R zpQZ!Ot}-a0DE?3q(#c<6O0cNzy!=M%e)5#h#B07r0#AZ-KQg^DylOJ-GL3@fXslTu-T(Zw=no{s-@9l{fnNbMg0kNi3tv9(5aT zn+Zz}@VD&Zrt`4|*nLYOw57KA64#Kx&opLL(-$lo3mx^76`1FaVX*hL?~ryam*CNk zy)vpjFV0-+!xniA-uj8$OIot4hrO`~b=OQJY=DNux{ZO2ImGIgA&Ipe

cNgU>~E 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 z zm4%_)uB2;wDG)A<5+DuuyGqZweQM;aVww&myi_RZJhH4gZJ2P5K7`&vq{0G>FmUe| zrB6V9s!Pi65@410dv-NqQ}fbs5fyu{-C^Dy`}b_Wv>@Q#PHv&OPouSd;L92PfI8+ zg_$!X-9IM8AZ=oI&aR7DlX@@#E zs3LL&(Ij8rA3N81@S4nFQAS9-QirM|YVXlCx^FAYWKhj?G}4g7I-ST~~V;p!SPob}n6ukSAU zRfdI-&I4d;O48hyo~XT#Yjc3;BNm=4X+ZMD`;NJ$9U2t@1|A4yNjBy87lX79bp-{c3u@9F3uXPwA)cU zi?e?qvGCZmFUJ7KE`s)?Z#iGADntbu9~3Dfj(HyYs$a_MtfiLbcy;eC$_#xLQv%ku zqkxNP2>%7oa==HG9KpDz(brYGl2O#v%hmy`+$&jt;-EL+egeijdKpl4_x`d8H+mJH zlI4!@Z~7h}R;GH>&m}X(mOgDlurz&~HT*N@H^4c_vp=$FlIwbzy>%B$#4((N(|d(v zKDJi3w=8F%#h+;VV>rUp1A#CaPcID%YWOL4$8lkNhMXxv&z1X7dD<_-Az3Uye2x7z zF2`$lL;i0>F)9w`nfDk5CmIDdOWYuQk=qUx1iB z5$YIA9V)4}B)5um)2if5n$p(fr+nKYZh3Mb&Q|9G&o^~lc>A3z0`q@y_g-O5bzj@B z9T5Z(rAQO03W$J$v>+lP(gajG0YXtJ5ke;kHbA5b(o3X+^cH%eROv`bfKa5D&>;x~ z0(8%MDAWh;dFER5LH&*6q8UGKsD2JMk;tHYWt$EhS1aF= zR#UVi<#CA^w&KT@R8V_wH}Qst0r7`%@w5!g!s_sAvur?jY(%%;y<8VRp0g*!fu!2# zoS!RmQUVtIt-^XIDP;ma_;_x~u2fB8(!7Nqle6B`SBft6plC*jM$7hpM=8uwwqy`0 z*4y2(+fnW=l~*~?B)Sj7t;-J2=sF!%EY1A2@LvuuSbJ?$T63*S#wGRy_oH~7^|lZX zBCwH#&NrE#D4@ktAbw4f1yHT^(lUbc)nAy2iAKJYMfqu7stRY$rBq0cc%*ZfWs59X z?8f0=IDaVEp*$PUji_bMT}1tnx?JQpS%oM+&bNed^>dWn`p=8^GSRI*JGFwNSvPF` zUb&c17k%qhmV+u2TC%?z@z-e(Q}9>vqCt=nQbU>N*&W}$ueh(V-8==w{HC=)xIHD< zB=!;U3N82OvE^dOSupfDBZf2hVvKvA=H*HEQ7)`tdwQ>d-QMe_$(OP*Trxxr=iNkm zGu@4dib569yKwai_dBy+{B&p%7GhMfit(vLiVO_PA~P}kKgOMTT+ip-(kchXX)Onw z7bo3}T@~Th2Sk_U@xWKG91bCTDlC2L7v(9%@~Mo6@LU%?`EbrO|HfMOwjM(IirGCN z9ElNy3F9um|&3Dn^C$V^+g8fCQAeW1&t)Fst-+&W>nca{odpLFbNr6;r5pzoKF)){rSUHqyr;EmhP(K=K4g8K#um8OHq=b~QQf%Pm z)#mI)so}jylW9lI4f~8IVN8(6k@8YbOYKlw`e(?OA)D^}Lf6y{rFPzUf91P5w#u;E zXKhd|zOo@YEy+7HXp~Y^Hz|^sG^kmu@yIl~x%S0n+>;kM!_f+F9A9Ng&TaR*+~Ym* zF6+32@yu*P`SnakP+Jf!yQZDFo_dGxFV~BMdKY{ueu%3<#O3*83oQ-IrXyp+mx}~e zDr*vEO~ewGvMBSr`7Pm7Dg8N%_*MNX3@R)vI$$-Hi8?YbYY~SmC(K_|jy>oe_8EJq zXbsM+AVkk(mcNE$?+RynJ!s=1YU~$q_)jei`>U{(_L@p-54Jt%+{(qMn-ymu=^i@5 zgGN2i?7P>CslbkmePR9U@4cJ@oIsD;bAH)-LOa1Q<-KhSABI`B+hYt6vZaqR+I8{((rBHBWBbGNQtb=5$?R_m8L{wZW;04}EZ%ghFck*Oso2iRx*@N4 zD3_1SvN#6EEv%;dZ(JbN?jyr?@H5fY8K?_oeBd9>qmHlmMG9i}_>eK-?emG^Cw{v9 zuL5a~=9BN)Wac~kdxZy(%Q*(nYqI*&iAQNxr$R|LPgv#sV;Mc6eF<=<+D5gPwE4Ce zT?PwPE^}jbmaguw6kp)GI;&TIf$`_^$Nxt)SZ}*mNARDj^ePsxE0fvPeys;JpRY}I zf@&p4rODAkn;u~^vuHAG4A(;V{ZE$I{Ld_ID#jYfK`x?pxx3}G z4crKaY})iuQ!_wrctYd!zd0UYI=19w1AG@eO)B*K0Fwz09R2szzh-T5HXz2RJq@f9 zwfml9wN>Xe)>K=c5wo3wtfZ%bO9|wVYtcWz-WIjbLFKE{n2lLm!}j3AU^EOI z3@StZhTg3vWXUn3=j6*KR}W9Ui#hff1NxzV+9XxV(k`yW(bcS} zvY@Hes9Wvcn0LA4MDYMl!rYVI^x{a+pcYB5Owr7HQa@*HsJRaWlHAA1qW{wJZH=2) zF&kA|Tv(&wwBuI6OVV}yMnA@EC8lC0Z z{#Kcvf&Ma-kJ{rw=bizapZG}UH&=$y%0QW>Ta!o_0&DKFo3!)<#E1ePh03e0Rp?6JJe(>PsYs$hu#| zzwL9+`kd9?e`$%Dwv#EngD$4FDsx#dOhlMIwX4PUQOpgK_5cw<0e1$xxjm|{#n0iu zL()(C&^54LPKKQ*oN&hdZCuf43x&!zM)ywzTelL zc8yi}+|Hc2`DEymTGljYsa6A(O}MtSc4lb^=62h|{Stp1FQm}yU7U!%CcS>elNYbj_g#fa4Nn;m*U_pWV|^&GxP5k9xH+- zXtMvL39%`adV!M-ev>Ik0R5O_X4G`?bb&> z-V_iTXvWZ@VoPMB+oLn{^!4 zhor|iW3JykcS2ksKbEn$2bm;Awy5;qQWgjB2wM$~OB0nqALX}<3O7}JMeen5(Tzqr z2FNZKdnZ&y*hRaDG#!95m!Ot<^b z%&f)6wim%;sv~urO>Tr60g!YINFMHhyZhc0=VZYU_W3}AsGQ4~Z^iPNT z;ULB;-T(Gc_^Z9I@OO*MEU`|tc#*E-*wxunCeoB&H)%i1`)U=n$>%epG8PCFU(sto zT)VG;yTyrtJ5DO^#Ibi@^kA7&fp4e#kqQ;_DC&m7+1x4KTW4ghq<-JppWYL1e=AU` z!*w)ldw-xRj3llMGXo~VJ3EJj=&3jt%mQe0@W)yeXANDfU!q98DfbZ&rhzO#JEBrE z@Q6H}v5>^H5HF~EbY{woZvicEu)J+SdRj3&%4?p==$}ozkRxa z`&ADKW%7btz?WDhn6%o)TcVUnM+c3xR`yk8*ROMnWJ2gzc^3`#H)hI>53rlR{Z;@6 z01z*zz5bLRHLkpNdy+@{FRJ{ZU!gOA%x~$%piB8sux&KI6`RZm zdt>fX@o*BS)p(po?l8&M{#Zf~n_{OGxU^k&gva%EDQ}2&PE!bHwA@c;fMmvg08Z(@ zxh6}t@e^#cb!oNaRq5{lgVXs7kXY}q*-_;M z9oH4Z%c^Ozw9_!rWxjCw27ka3zu8+(-qipKe)nBo%5r9}_j~W`8FlGw-S6Z>?8kgR z_G$OonEc0m9vc&*6Nr6Fz6XOPKja?={`ZcpGwMGw?}7qbY54q6y`9S!!&}G7>(|Fz zo^Rr6{{cHlm%FuZaIH_ku%w|qTFFuRg{57sGRM&T%S>(A8j^PiqOGdYiJ?zE) z!9N%SJ{hD=z$RH#{i+ z*H3#XDOEd=GVV28ZtAm9LtNXDAbr_7tXmsdSf!>ZEyy{Ozidpb=}?AmW=!PeuO;Ev zGBbC>_d(H`wZ|<_2F$3wK+8>lMCad@_W&)Y(j75JF)nN^lAWvKOwW-gUG+Ffx$w2+ z@#pR3lx)Aj+@{Wtle7Roa=~DX`!QkTK47&Y0Xw!)R)`W) zG^61kC;~}a&VSsHzqYda{1=R7a5QIJex;wbMgt4qr27c}e4JEB)1+ffmc!>tqzh@D zhjy;VkcBH(u6!ejLK3oyS_Gq}2I4ySXexk(I88*d8agqH5+F;b4tNyR!Neh;u0RBN zSw-k3(4?Ptqpcl}e;Q!G`RAv->jK&Y_St+~I>H0uB+qrF`YCH(x5WCs82Z{?LR;Rf z{$H#I-0^Q2{twXP_&AiJp>P^ZGjNFTeSB4!67P*1L4e`ayNIfCL`ko~*Z;wJD5*Ri zB-#H0Gid6yxGh_^C)m{F##`3~kP1t^h|XTiT|)ZM-2aJs_&*+oJqn5Y((Pi|z7ceL zqxg?6z~59=RuP)KB~k5#x2Pe{=QhVX0YCGEv>{L)Kklp2{{p1&C+07Nbi25;Z!oNX zMw!%BI}iFCUi2!Bz2ra!upJC4UZ{R&L;m9{`GXgL=zFlHX>E><`sSR^I%FBAJpJ1pfYbn|_M6Sw%S8a3o&PaOhy7WKp&LN+ zbDcY0-{74)CCAR__iBp!H64#a$wuF>0H-CLS(}Ye6C?^3&qyi#WV`z+-bUJKwF)LF z<8RdF1UQqO?JI!@o1xXEio9+CYr(J1F$A}J<@qaE`MVoR( zxHSA1Vtbx8n7Sc7Oh{yY=~5e_dF|*xY6-c2d!2awuIwBqQ$zGrB%O))gVeujf=xs# zqA}2Zz+A+4@!yHLrd}V?u^uxiv&>!6<$&!j@RSZkxChJsq{=JIY-}X;sIB*AgnaU zf;hyqJU=bF^8JvSU#+VSo|XTF7^JYSF2F28mwxV69o$Y`+BAasL$)*dW@-^*l7@D` zU)cVWhrc)Tk^pv?6X#VfP8ubo5(mBR)d9q5{uY7 zlPY*^=85bV*xz}t%t>P!?tZM>Z$8Z`&YlV7F<$UBqlQLj)s%@#6JjmR0d75wW|O8BO85_7@b8nU6us(P zlj?dm(#VdRlHS+2;Ti&=5Vk}kTygOZAzjvd{%cCsfnWh z-XrmD%j_;eh>_XDHAl~e)3JLiRS6s#7Up5*X4Lz$u6edTo>g97d|yP}HxN#W!aZ7p z^?%L4r6FWQ6vkn{i%dp@ZbyhzEIEmsYyGOfU72UJrq+_={g}LobRRRtEEm;8g!#M} z*38_5ATN-fqbgk)Y3wtmJrRpJ?_I@b1;;-j4r(i;)V8RHT8JC^6RHc2*3sASc2;&# zQ%P0p!57!B0|1v^3$Gkf@AXwIG4%zOo;$>si`1aFHbx%0{p;%7;0sE(1zB=@N2gzV zo@famKTwRH;s-Ba?rdOX+$B50SRd;Z*qjO=lQW5^PON|_Qc(9UxGJdtSbvDH3r{hW zzJ76@6;mLSxuEU&*>|jJsfI5@qOeYQk&``jto3fl5b;^aw++LMuRrvR8Mr7hQ&pD5 zQ>7io=pBp@YFSp_vv0DmbUx`VIP7#)gHs!I${3mEr;2{l)RsO{R782-_Ox@&X#phR zEKY^Eb;d7H(hKg-AFMNubIBZ<=e*ynO5LvJ-spUu@J70TLa2!`RPmaeoPkx&4Y!(s;lviEh3 z-a_eR1HV7R1?38VI$Zp;kGw3zS*oqLyycq4QMDONqrg94O(>v9ZRU3g!g()rEsMi& zO9Jfi32CUPMdzwV5~G&3wb%FBGKFPSio|Y1UvWFSRk$dv-SDit{KKeuqVGP};aVG^ zEO<={>oX2n!pG*7O1Izng`G1HZt@!M$&wp?U0%Q1Gd>1b=sSBatxitBz}~fE+7KUg zq3U2ifMq5(={m_=Mj7iVRNQ)D?=@*r(}!(Y$;AvA=w0FbPAh*FG0EQRkPu1!FrfF{ zAO}ztFA-XOV^eDi<)@lH>3XPR=^>4*YQEu>0)w5j?f%NJ!@KN^MSh~Cx+8J|75Zg6 z=^A+L*sCh=F5mdD?f^IM0_m43;|=diU!!&KoC6Np$dR5@v$RxeBbUy(4UofY5e~(d zYGsOq*G|=Xu!DBllUL-LRGf+f9@vrlH#u^#3NHL9rGWW5cxa#Q+%oa zK>{>v745!?nh;yip9j{?v!hnsA>>hm2?pth@YqeuB)XH^BcJ!!M>id4sj9Ub9`-9r zWh>lRhqrvW1{N@m(}!$VeDCm_mMKtGC;T=x)7~3bHuH1v^JSCxf(!ejWEpKx<@esjniyDH9P3Dj4V4O~lK_?_c?|CBE$ z>mOfAplL|Yk;?$t&+nkSrgQyb_|V-1Hvrm57zsJB3jn}+)HxJky+Xk%VI7&2R=qM~ z)>C|@#S+qRd%@sCCGjhbzCixY-6MBC)yMuiwZZqSfk9bzr7>F6K($q_aW_wXc*wju z$%*^kF&tXi!j0`=^W&}?E*&+coHBRNOe6N)mv#c1fgqxL>Hf0e@B5&&F4Qlg`(e}+ z_oSgct580o!z=DppMo}LEAF95Wz#A*Ml%}Gw`G_)tbA%6S?`<_8y534Fu1thTfhlk zF4ROBNBXK$c4~|?gnpHozm2Hh2vn@|Yg-*3D84i4nlDL&86 zAp~{Pkx`33!|>xU$FC!#_Q$&rG(D%VR%twGwX?l*mOa{#Jfzp0YEkTv9lrtMA6dKQ z$R{XHP*w+9|KWK}morD$2$h^g_%)noz}`ZgBgjS(WS8=KP#}KFUR%{bBmHBW|VBg%K7wg)}Na$N)(UxY#FuvE`8In zW)r+z=BkBkKl;J-6sOjr0~3$JmNChMVRJ=jplm&m-b31&Pp4$%rZO@+nUU28n^JSo z&9ycSTCLN3X5)WUROhxD>o;A);8~~k4FER;U;0S8r`2Znc@uZ7YP_vD6~^hv`-!Z| zmed=JJBTK#*4k48NLpPXQ}-k<6F1Qhp=w5HId)nTV)Bp!=iQQwMGb;n=QZ2CRvA6B zAEg4s%QiGF*x}})HwU-I<8FK!CUS{5PXf2xUk4L!tnh8T7&O~c8Zn3nI%!7N`loDQ ztFq+dGxV^VyOVlNK#{#-5$rX@)|0U3y^WQ@@v7Lpyv>=7LU{irs@#)nx*6jS+u|Ef zq4+0Mq|&{X+BjLLRk|2(R!N0&5;Ir4C-^kFJb#9HdozgQfQodTrj%9Ro||2r8%VpZ zS!Op9DG^F%tv#iJ`{|aV1ZPAnf zzIuOcGge=2_pUFVcF7b`tar*{(se}x6+7`kLJSSYbmyh1r-N9Wx_^26g-7zLUUOR4 zf_5)>OzJ@)JM2|H2fJ0Y32uKoN;X)n;NuA>A1!Ll%&}2Q24MFpQ_OfZTFtqEE5NVmAdRW?^18*lXk~=OC7EtS9rhBZ>4sws`{hE{in&MQ=Vtmj zj7H*6l*3W7DkRy^2|b^WZXcb=>FN+_YF0UL>ZLJ2)RLd_k0Td7&RAXeeQ|NOFGNh# zWZ0N9$pZ8?7s1WVZ>SeY4;1FRPC8yZw+(r#GC(h4Eb>yCQ+QEAAJ=+6pe(Y=@#Nb} zjo1S{$mz$@N&x2?Bh7r!ab{~@GU+RW|q9(y$x#wKKL@m z?&-gr&3{M=!V{ZZJN{H~TzB`DC<85De(4y89%`KsW&PpuwBAu~TsKfYWcY_W2{GBT zjsGtB^`LPC-=(uH+TjoQt(lHMKqbP8Efy#XPSjDfC>oQ(F^adDSRC1>&wLW+?E%j`-Q!;Y+{Glo3< zw(o%ZDrRJ3#sb<(shpob8ZLwQcJzvN?0m3S1d(}~&`w71opQg{!<(@}Hk{D_iD9o{ z-AnHI&h37Kn#Op;Z-}zr~Ttq2xt`R?^?rJ;ZdPRJ#GbM1kn#^!+ z3S%0G{I9(cLh$b!<)OaF9mpAJGp5Ey$WNQ(){#4RveS zLt15tt0~vA(uMYHP;PO?joaG3{2kG`j5jd9Bv$Rcn$PeFaHaZ~CiFQAft*+uoCb@gqFA6zbW0r3} zS95V{WB^*5`xD-j)P3mDM&dpmoC-G3E_))}4st69P#FtR(Z0>j%=uTVZiGk5TKc%9 zZwObC=*I6C26#-lD&^SjzD+U=F_m5^#RcWTeqW57KH2`Z-F2m^7~>%#Sa9^_1({G1 zbesJ4CB%~0HcWDxBHrTo#UB+V+~lgHFu_!l6JdAUtoV_MJi(?fYD=!a%YSnGH;4+L zY1Mc-Gj=%jk{;ga&zGd}gy9J~&{Z)Xbm|=FL#TP%h28pRff$%Y<=gDjen?&stGOZm zdr}1#{X$))6H=WXqF7yE1D!L-yCj|Siee#}mAa$f(SCd5YvucwNKvm zPWIz4-j5$1ORoeUw$rjmjf;}c!pfy()%@YwF$K8zC|xcy#TY3qAVtY6h3JpWYsKEA z729}yD0nKJY!Xa+*&T*N=)eTd`b$C8>f49E5eXYq!5Ms@UE!yN5PgPOv&>*mf3J85-6?@_assuQH` zzW%18)%Eb_2koHDv5S0107^8T&;0)c=x#9lF0XIWJt9><1?zu|b3f;LYF_j5$D8Nk z89VN{8uzto{yrt4jfNMBT#8HDw|$>{sy<#xext5E@`Ey%eKo%4joX5H23~VCjMf)kpFot_7~$L@tX>NB+-0=fx4mB zMM$dt+rESTUe4heJCNdhOsvAAaUx`tw|p#hIoCJ!A)15Fj`a^mbY24q0^S92q*#^-r<k?My)FD9Vd zqI>Aoxz=(Li!O2nu7-Iipf(Sc8c~l`=5}G}DRWAnBb|zp1}j-K)DJpqfAKo28TK{- zo}!q)3>l{J)azj(AxwXfoBYFPp0SEOpzPZ4r^aoaHm^DZ6%&5?VePDZy2R4_s*OUt zg70W;dpo;z@5O`+lFp$RyzdjS>7e%&WdzV52z>+|K<2X(F&MI@-VkKV@Ekr`MqF(p zwH(~P)W+kkx7cz?+FM-6JNcZv0_H~6+Dq|%Wm$VuFIF{?$68GI_AQC=nbPqH!x0BX z%U#%>S0>B;At+`zPAF-OgcKZUWDk={xRsyEC@EPfPnZ;&PqH-I@dXfmTgKal18vA; zJsV!Z+L|1a!8h3R3D)g`Tb-%+EGLs<+F0aGYR*E~<|W6tSi52ip|S{GH96Udc@EE7 zGX&Sxd0sVo>xDj;p}$Y@HE5Kow!gYFC<5~~U z`Vu6(EvWGodueO7?2hvEPCoxkh(mjBh1Bj&oTCQPqR!?g(VCF0~jeqRGezIl2 znWbBXJrP4QqKln`4fNx#M9Mti^|~r>jtYqF;L`6PR%|Fg(&ykSR;&+n#C23krRS#Z zTb+@Cc8YvaN9xwv*G*5lHM)-0nygY6>66=+y zD)wIfkyF`*&9N4a(7p5mMNqh6Xjrz|?>p1=wN{Hl%n}{*XEtb=DmrzInJWA$e4QNq62sl7Aa$TT zP9?5}BRO)`FIF{-6QH{AN~>UuBST+g#N}G-+Z38Gb<-9*Pd(kMg`)ad2K|h5()AXG zJYUqzB;y`B?d{xg9b+YK?ye#g^}`ZsSZw#V9imRTedNxmD~>xbrNYOAN26`3q9sY~ z`0?$(6w~C_DzOMRv%uC0dHasZ+Two6L(6b==5{vBtI+o6fGhfisO}KAKIO|UBQYbD zp$3y`^r;dgRMV0?Rr|<9icIwT8t>=3YX8YMfaeGBfR#dJ&Q45X#N#67SnVmuQk+}E zGe@Ikvnzk9f|eQgZv1S!e&fJ+#o6s54#Zp=LgifjD5$X`K#E32g1&Gd2awk*Bp-ss zF=tKn(j%Z{a{Eu0jfw{9U97rlF{{K(l>kJ5e|qZ3#G;qH!wi(W&DRYMQO@(vB*YyD z9nn>1VnJKWHS8<)?PwMe7RNE^QT%4@ddS|0z)lI3*u!C}yQAuiNCZGEMojml?#Bcu zo=MCt7I_dga@7~=UjWuU;P`E`b@}lIyR#Y(E<(?JpU+5A# z<`R}_B)Pa~5oG4d)hRLsi7#7KA8w*W0{&`O@jg(tPPpyjrW}pid4%MV#fXbYQ{;zy zJy@nKtka>4feOP5sg|cx8Y~3M1qpwPfv->59Y%9v~E1+0~7^0|I-S3>~gd7gO#(sR6;xc*)<>8^T zXUyBMP3KmF^j)0_V+M<-dUcs`4uaHA#M)BQLnlZ(J!N`w zjzfggvRI0!kfP?z!#jf;o06{ff3l#X!lsJ1Ip~*v&r6?hh0YcHV`;REzY9B$$#H)< zV-pVUODR-u&#{AZ!a}1*TcT`=iH_I9D~_5?Uba3Z@_gS0>`lNbkPFHB!{wQk9Uy0n zJ-Pj}LHm=MvKG_%nCD%s4=$hlDPXT1 zySw84mQMG8r44TvR8JmRJ87rF*3lrj#uGHCnamT4+Lsr8IL5sR;sB)9pb!rwB)tjV zX!{_$O&M*0mb}9-lSeT*WPKE5DvA=2h62)Tm^DZ0ro z<)?w2<{guQnI*ZhI={kgGpV&r_??!_e02^zkpH|JQ;+s9kpUjSV|V>6cgP!Nok(@= zYP<|5Xw3MUf{rw2>cahkb3vOLmChXdua6i{x15Wb+O)!^@QRhk@@)IMRyP!%jG78p z7i#)Q^qx6*Nwu!k#A|mgbzMvNpqH(98@P_?6Yqoi+?G!DJh9)M=VFt?6@j1I{Pm=? zWNK>;cpk)w`SP+!7k$j-lZ%`-p~e-jA#)s}CK;ajlDS+;vR>&8MondgSoVEfYkhp% zU1>^|guN@qMGa1M{)?QY#>hT3D=XNf;@S*UqG{*eK)%j6gtW!27%g|By03}Is(RU} zL`;R2=qu;9(ev>Q-5y?BwWjvRpEv1f1C~XI0y>k*O$uWR)3#aNs<`VC=NqjJsS8eY9)V-)Rs0ch0*^bH4$@FMy{(6i zadghEO+7mT?_Nf=%c94YEm!G%=@n<{>0$MymcNm6iIIpAg7#`AlRC{EMG!{JYxT=? zu9x6Y@62T$ag`Nrs|^-bnG~~c%7bB_8+&vu5rrMjpSraros)8NNIymk;ccyo*IP-M z5igGX*OJ~@!xklp4`iv>Zkl#WlB7P5*(c#UuYby01=oDfb$8J1cMe)=^mCSlNHmJ^6|<@7V+m zb4>#^Pgpch{rX4ueWLVTHiph=AH*eI zqA8EaO^KYT6d~*)O08ts1{y_vxCD{a5@#QVr>>Z|Y|(SEFL}L&c)tv_j#4(A6x5Ko z9B|Zls%_3LQ}=zQhNR5ibqjXi5UD4iTuTiTC0X$ghhy1|>seuA%mLwp#o*`VAO%@P z`B8Esdnp1ZP+@mCfLCP}s^e7b;(d+6`H`y&&~s{kv^i719qeJ-24-d!+=_N&z|uDYvgyIytxIU zP1u(!j@O}0-+ker&AqEDm))|)alZOH`MB(r&e6&ZjZPQ6SB@ho>v@=93)G!ILL<1z zILE-1HeQiR6Y^ECm? z{jfiJl1AW8@>Oi!LZvG`O?rO;aAU*-=z#9M|9t6PjOLZT=*T;4RY;qd5PsC1Ya@IE zl^-Vu5cke2%m)uyYHMP3!H`BeM&Mb)SCQL&4WjtIx((|?f@Nq8v&ItfrbpR$y zPCK8q0kOoQYM2=t&XyL*PozsO;lHE$GBmmv8m}4F#!-`fLTls8_rZd|^%Q&$Os&2a zFQB$9*^F{gIe}7aNmOq>Bof_IzMI*tUD<9hmMlPKCF2el;>m)~{mt==Sfibx2L)m_ zUEg#b(#iH*D2EELH8uod0@lAZ@Mss;j=wDESH|hKOG4h=Sz(*8UtxHY9DqID(HmQQ zIV<%v?c#2OKt-udZ)ERE<-uc0?OyK++pC5hkEwytVUz8iKKVP1Mo%X{_JXzOJoN}# zeGP+gJbv3J+c%!FeEji*j~=M*gLI2uojo{=s=v;}h8$-T5P*%9kd|GP-d#V_L<}dP+ekag&vV zhW8PEuU-phWzZMd{nf8e=3^KtM`#((h`HZ(f)X;EZ_egRiIYe|6>{$O&JqoK4Y4a} z=nq!@sd}lujDPGW4iMYyq`=F_U@L#8oS7gnotc5Mel_%Q_#anbIhS~Mq31{f!R^1GWopTEEjDK+R}9l|FPmrdF`^qW%3X&>Mxl$FC+T@l z2PoGbKI1O&Q=74An}7rN*IS?835fpO&7A7(IKhNh`n@A4n5b%TJ5cGZ$ED80_#&Qz z)U^<6-FmokMZ9o|oL-r1luf$dZbKvVl-hb@&>l3)@gddO7@R)Xz6F)HWXW)mK{_?~ zRWNrT+r;12>Q=MO*o?&IjVyD1*={7GmF<&Zd*YT3;XLCnm%7(0ZJ8^te%^azjGPDE z*>On&9_EnUo0TwgH4+iot8U?_%~>A$Z~q!^XGP?bxf5O=4&iR|WWZCe5j|pM>@5?w z1uTdTEpSO3Lml|G!`nkwKU2>Ep@Dl%>)q21{iT4i;fu9le}1J)0)nAN=w(u)*T_U5 zblKCabks1s3eg*C$P(0w`Mz`YkV#ZU4lZyge5Ygqv4`g95+d(F~_2c+lbIL0(5e@B~<|37i zPb#guB~URB$`yoP;11~lQdr`)n+|^U?`gE|rc> zpS)Z2LvMkwgCEp@axDoge9Zb-l`_Pq{J0HRB)_&P6oKpBTloEVY*mFBweT@jFU_B) z$;SB^Y|^l~CI_4&Q>#+bGYShBlEa1YgGZ!2Xs`5g&B_(Q^}_`9U@bXW*@R6qP|_ov$6Oytndv#=K~z zqt}K}aFjfCIEq})?NPtV$1Am9(&d@kV1d^0ea%Ixj3Qi9Op6c+4?-t!Y`n16DnRXD zbgS%9@9MapOYQCt2n(@WuRk`T&bHjYitP*TJsohOyO)Nb+W)nQ%38Q}r_Qq;$x=~z zbmKSduPLqkJCn!2HnMbz_1VaR2p2*i1?LLs6p}+Kf%8H_u~q z`5S>H7OY?<{4wMTw)!Sn$;~P#8^`4aWY~CfJ>B6;opAobpe^IqxfpN5q zH0X!fQiE3Ojf87NXa5L7M{K2E1LSq6wm; zmGpLQ$UbWn@Yq3a;>Q)5T15!CZFP$p`okmo;C!1T-{f`>9o(=~QR#B&Q`bN1NsW^3 z*f%*tSZ=u~8RZ^x>~-*-N$C4@4hjqH-a%?!Z_6+miQayj(g;HzEjxT;jJ5&dk;MGN zOpvEr(LB@|=c;J$^oTLD<|{(KxsqJomq6V@euwrtY-K(rx&HB^C;clyM6Tyjf++2`^+>7#O<`<9W6A4x(747eN26EMp=>_w6% z+BB(gP6rS@I$$<`5Inmh?lS%`S?4O?Za60I{okQz00#kPnkf%KL}A^o&*ktlyp|~^ZIU_q z0Ejdi2GZs!&w$6O4BP;oS06+e%rF;hYE$!@F`G5+!UVsZUjG?%?ppMV__z=owAvqO zfWTz()vx(Vf^(rbaDoKW%Voxhmr#i}uGNS_TXbncH{LL$X#}`b03hGTs27@nA9;dw z;1aW{fJIrqe_~e{*v#7Ws#g0Ls`%Zc;k0Pfl#rdZU++Qu>%!!Z%7$7G+46gr3)KPC z0pC@CS8^7}l&nJLWgeRPMcEf3NKo<2x;>o`n#R%d2!z)+TKO5@YBR?zU|%I zuk$NHaLoSp0WVI3ikU5h_H`DUNy|!SF{v`~31m@LfW=KRUpa99uYC^5l%|{wBdIl4 z#EX@;xTYpO)I;ND7nEaaa3vbl2O~E}^GMOwJvo2*YIHvVu$8Hrbv@D_(&PqIc-Lp3 zxTTV0Fd{JzBbr>Ny1|n6-D5o@m*P-WIP+V9;6m?qL@1wJVO;3fF(_{m6(g&KA{m#q zV|3$qN8;dYZ4I7l`bfO5{f|w%{U8n%m(*pBT$qVi&rrE3I8#sR=;2X6c}31f*ev!8 zF!@iNl{C8pi|o)$WQQDj{m5r0q%A!DOZ0VpxCt79soJS((E!gqwFCXWgo7i*MMQ*r zQ|F?;sb0{}#R*Q@!A;d+p6RoxTK`6;U zw?ZzQtK5RbLK;9k!oKD45&v??kYY#6=F{T;ilqEY49lRi&TUpis z^`!rOJAdMgY@^GX5mNZ|(%{O#jyi9rR5Nu5^X=gN+EoiR#uBupr&5H}1w>vi@{mlK z<4$xQdjt7tCp%pq*}V|doa`UKXV8!UdFykWetoif&LDr*o$1i#*Nn%|BT?JD1>drB z1-|gI{%x`?J!`?hS3N44sfWr9k>Gr`pbtMpVk@RrQu4CXDRO`;=Xvl;nu8A(8PA&lvKncqUHSbFru; z%aWSB@~bM3!6y;eof=*S|}guuotvOnkkrh zw>E?ulV-XR%e3k$W?ft2VK#uv8_$^wF)bK=t5}H1RMPVFk{mYPR?n=cWNPo8kw%W) zRpPBiY(hKrV)Yzn9H^tYokX6o*rj7mnboghXB*n74w0;Q^VaMeYXMlApy<<#iy5c~ z@LxZE+HJJo|E}iYdSP{NR-`6xtuLJ|b^EaP>_*?=xR%8MyPdBBx1#n}%#+$6q91XL1lM3&n7lg6whw~mjWAg@;BFi?F z{Inmi<`P0ZbT@qmI#VO^`=UY&NT>r@>0cRUuDgS%hlZ736`(a(%Ds4kvP#+%Cl#+& zOkX#^r+rg)@*08andNw*aJxxT`T>O3BjO~km5BYxKI4?`GdUA*hSj0M@sx(VpGFS3 z+0u5sc#Hd66-t?@j8Dld?OXmqy|?X>G7lK>d4my)zy?p||JL4lMm4oXi&{lR1VKdw zq={6OBA|4_0aQSmh)Pd{L=fp9odlJxH0el*bVYivK`FriO0OXxy@Z4s0tw}9^yoSF z-aq$^@!lBsjq&m;JK1Hewdb0v%sId5(@eVIYKiDy^MrqLFyYp<%M0D2hd+=$v*+$l zSt`V?zwav~$A;1;jSdRK<9^EXte8uvgm%iQ>RCmV@ycBel8m9L6hY=FuyFqB7@FX% zn+~$dt42dz<76tRS5mFuK?6aJTv%E*n{Y$&iFK5W-z|Sd)lS)1QuR{&c4eePn07PK zAR;yha}Fi;fqXk=H`eL2_;Xg)%52589h{6 zJ5?dy;@LpkmtPb?)oZhjh+oVxe6KjRzf;2d^=%1;n;l_VjZBXi+REJe1~-PL+MRZN zpk&6*uS+!zIcEri?VEUHET0DygD$rc5Vw*B-Ei(<8WpADE zWND?r`ilQOrtgqW#7k(b8+FQlo_?&hTA@OOq}bxD}>JgyR0X#{b)ZXJSKTWF?KC>`i8k- z%8F6fMkp^n7JiOi^ULQ<0*owYNN>l7nXH))5D=@Y?wZt5X*$w8V!w^o5nMoaHB={j zZSp$?$Coc5F|xt-ZKx{o=^8;eZe!pH)3zkS#RCBrO|_^i1A&}IZm=}S3|yYQZ=$$& zUuk>PG&4-*wbPl_4AwV|K}$w1p|SSoY*LoCax0%=kDbd2ZMdZ0{46gT-hWZ-Rp((s zdk{s=-Pss(&p}oFPE9Q&~qc^{x z10kh(Ru;Q459XrFL38B-TLuNS-C!?}JzSJJvlnZlxihf9*D9!$w38_Nov*!fU%MbE zSGoxNRp!$8z)y`X2liT=8YoKYlFO0Au%;}+bFE;4WpDZAS=j846;kUgA zHoae7Z=ttB=m7c|&{;Wym71CcS8(}zR#rzAtnQ#8@9%PbRxMx{Z46m!fCCVl> z`-}!4-y8$0k7qDGiQ%Qhk#5E1WhnihP+)!6O$WhuPKsgD!w`IKRFr(v!{E_IXZp+J+f zZm}S^_z`z-5-m5Xr}kq;IM(mo-cn2z!>KjR#$lL8MSs@We6$bXlqHtt~T-$N3D zJcESwojO!xdH^VM!Vv}^!9^HDEcS!_DL6SDyp(T2A)RMoy&A@~VMt%SauM{M98raY z$$Bkc={!3#*4sa~cVY|np+VhHNlg~exiMv2v(m|eF?%cb>WiY23K++DfQWW z#|D5D1w&T77v%W`u~x|sB}TLVnpo!3PnLYXa|1nsuZo>!fmM;>ixU?umBL?3ZYD=4cj+&lUwkt+8WC7HcLH$NP| zf1%ppA0Ly!_3j!vTa25h8`E-l>}d-Vsxu~ zzl*#q|O7>P|IEV7h)2fo4i`(kK6hzRF=V1-vsu+K8NEW?Nj~qzZfAp16b6Rm;M3|?@4bsIJaNY>t}sl)5{NN(30^@Y z$pwS3G0sDmpV{5$K$YafBND2)?`T`9xg2I)$?ASI%HH+6$F%V10rfWn>hC{Bldq^Z zW<%7o;4UVgd($YOJ06jxKc3S+P{T4&;~Z$4ITt80fclD7ZKw0fve9o<;TqJWMk|&2 zG=Cs;4(z_%>W&O+M9Og~jxuH8e6+42bk4!AARYJJuER&*lJBNIe=HjWomk7%J#p=L zRiW`JbODBGe`+KGQB&%*f|vS~^zL(_S_QE@aHRDD_X714g;sy8^;q%9LZ?Dn@5l*cGsvpU#S(^oC*Ul9PS}~l3*WuSG-to zI_d*nL(VwbPD{!86}9QFT-)Kxtfhw@z}Z+>M3pwA?^d<}$c+S`HFM}7r8Hg+=kRsl z_+GiO@|-yz-L66Zy1}uGX`ZsKekh?ZV{_FQnQLEB{iy+%I@Si3tCpBUr$)QbF>K3!A7h-*R=vwQ`=eQL*r(V&1-(f)> zst8(Me<*5FXz*00Rfwc-p^0}H0aN*Km}|U(vJ?sIiSgh6u}0UI>T_kwIcY`2UH0?y z_g;!sE3Ohu$iZnnc$-HqRU2cL~#W31(pj-7JR#1FsgJ@@=GE&Rs1ehS#pKKKm$C;Zg;gCDixtNEJ_zRZ6a zJ8^K#{*%4+`N-%0w+^Ex)rhN1JFlsK8Gsg2hqWUVYCCqO_Md~`S z<#{3F!Y9`bg1+aD+5+af7zl_`16-#Vi=+?YWqJX>23XZZs^`4HsH%b|e05zoF>_90 zmE+Y}eIADsNCl-ESLwcgfF*34Cs=hS!gzowcOK&qJFxtCVSNCo0kRX$?d=2=Rx8QF z`xVy=;&H9}ll@YL>J)3rq>Nco9e19p zjg-^#Ev-8%oFIFK7P#fFK9&G%2QxHylTioZHbmXZf!aoJ*A# z^Mi46#~40}!bA#{RC1LbeSi{?9girKAd@}sCsXvuZz`qr@7watr-9?Ix5H%GB1y;E z!dqQt*};02a9)5!mG^f~wk|EhT<0%Y&;Bq@Yu>sBo+Uu0)->F77|`qy)Es;Mz6tY0(o5y00@pX(?X)Nkmu5&vs`0rD?27A7EBy zOsK@PhPtN$MQ?=mCz4ojpB!)+_1uaXXFE4u+mN5x^0LipR0vf^00N$vaIW{$mx=Y} z8pu^yH0QcOl~)YzB1~9TBy2CSaWph`qBIR zF&SXC*$zcE;&>qEh!HaA`@uph?{{e=fmkXK`wnuS_)t<$v26{qNB(5LKXznX%8V~p z{H<-hwy|KsYV7zOi4O2bLiL1OX@?4}nG#$)K9S*5CpWW#k@Q)cN<3A^_wvDQ0U-QO zVUqj@>y(&$fOXPt_=$DeUYmTQbam{mF!ON2=&Y6aLMY}LWZz`(9e)fDn|5byrcp(j z*rL~b;zpi&prYw<{?g7BIbpUj5~V?%P9#1*3LCjnGRFk(Q5+jiI7?X3;{OJ4)cg;s zbm&m_H(0beg_x^`^lj0)8&SH`T?wJ90m^d-u>Bk?l6x&nFe@zIQI-N3`a-~z6QDc& zbW%KY-A*8p0lBT@kf<>q)3y*les|=cKk@&rO*L%mAm{5iWzkdeaLRoi&i#e&yO}qE zQ!f2YaZSSTH|f?n;l!5o048ILL9sxK-8(;)yLl`A%dx`;xs&XpriQ(H6?0SZYd_q5CsGx$I(-`CS|ASApNnCQ z=OplH+h{km{CL3ddXZrTuwfQ70okxLs2JD2sdxbL$dk)xd*~il-%p`rrDb~g$a<5I zQ4fIAe_>m%y9&Hz@CEYOTfQ2OrC(yM3%VOvSnHw%!~#7^@jL&E;Pd-!0c@wv6wiLG z>$Q#1=HvqJ0ZQodhs)6ugN2M6@~XdBMGU_z!XsJ$%ggn42riE* zQ@8PPO_d|dwJC(nxtFaM{>u}5_gTae=`0}t$c7^QavA3&&r(pUW~ud>`(JFP&|N|w zlz#Z28nEBu3sfG6#ji_zymo(2%CU27%+7st=WBBUqOeL}e$32$W+aLBZYbuU177;A z@T1iO_Z#w&4;R~xk(>K#`~78{0clJOapI2Dp#yfGuy=%c9PmP~+Y8^jbSVd4AZ0IGSHeYTg<{QNOQ0 z!lHfwseW;Q0d4S>L5Z@%)6l(beK&O6wGb~h>`caeH_AYiA4I+X6|zeGs0dxwCI=4- z{MV)y1XtM$BuKJ&;nxeaU}Se+^FdA_K(MjI8ufzZs%0gs!7LRij#SRd?G>xhCNtTI z3b$U~PU3)ulj7IENlc+ocl@nIY9>~PycmfxZXE^1ep^Lmjg4{i&dE*gD)@1S48w<8 z$I!tEbW;i$Izdx`*paPJY{#ALp)uBvHc35|*d*wbub02mu*{UDk-!CIQ`+f~ODCoV zJx~BY|Chc5ByYK4ts?O;S6*Q4K4u~f9l zCoA(6#}8*a&vd-|;otl?+pnzeN?p2J*HP=)TR!jv+12FX_^aI^Q6@hMlPf*a857pq;{^CSyKpR+`>&W*Xxfr}P*_~sEFLdAJ} zz%C{0c;iJ)-{8=~&+}Aqr}^deOc_!JQBxMx^>Rd}sI93&D=;Gzeb`{Qn_p_;{F4E9 zo#{UKwKK2j_H`T_y27we=N%N==`!b|1!LNBE>A>)zGba@ezSimqJ(-9AIrggbG*-I z;cdknHH*miX(uSmP>jqBOVofh=?=Fxa@QlaxgDy$!ABQihG;Gx_`}j#2mN(B^Q4PP zd%}a~OFXb=#7A?P;f<5n_%T7QG%Q`Ek>^8s{1u-s8^RP!=d%jh6q0EK^xQ_qoC*^g z3y>qb-gFF%PAhT>`Q0@zKRIxLiBG?SMXRhF1kzFm3&A%RLxrt2NAVirF3U9z#;!iw z+;fPxiyYx2X^Qu`_L`Jqxn=qf-{5lGPLtr0`9v28`W)z2v?Mt{)ZZ%8Y@ zQk@{j**XkH+ylg-84$Xm_B2?U7Y?3OB}F<*~ddSITy!+5W>v z?zmyeonaC8nN%05w?i#+&JeuR)G^0xxKj$})3lSAJ-#)m+lZ~3(*RY)1sS*+_OsG1 zESld`C9i#fC^4I@&oNRbf)M;41RG3-cR*4=gP#$?>bDa~6WDMC0p|6%egm z?8at{#$ht`Juc*4VR{a~YC1Y?B`emnt9~>aNLTi*m3NSB;L7DiHqh*p{w4dZpF0u#Gt1sgXXlMRI75Qf$m4$=9?A|48Y}-U1^K?kf$7#?;TAw=j&O%=|_h^&3 z30ae$+v8!>*^rRid7qHCH+WDo8=q*r`yqZ6**0Sp_;~yRy^Z8kX~Fr6NS3KbeGw?a z6A2tWWU&SwLYJv?L$hJ6n9nxl@rf8w=*I-dqT)8i)$Xt z7)RfHYHVL?$xX&5(=Y2K?qv4TT?$N;@qB#L8KD zA{G37LDSoQZh*73A@m*UHl^(t_54BvVy3Qk#udzZS@ucLerV!6Y4CZ%`NF$&p2sQG zPQkH3&r}7Kk)QqDD38DC)!5`UDWowi-Bu)K#5EkZy-C#=+^AfU^c!Sn(v(mL2vsq- z$rvEk4l}q95@Sv~oN`t~$p|zHy}yZJ*39RvG+GpR8YXLY@s|KtdWcR&;f1f@y^f=S z28dHAWr}b`wu@3V>@HR?SL^7-FV5`cIn9whaOeNk0L-&iK?|`XHts{69Oc8c+kxJB zYf|&N@MUfHCwcFIH$Pk&uO<6nmSi;Xm(!)bpl6=y0vm^Kn3noo<#e1$8@+qcz6vK? z+NC@gAxCnp(vdS-UGXdRytE0=QF4t^S*xh@#(ndvR^y&jRkWw+O^19Vld~GoZM3D>7dFh16Rb+x1 zm20-gfl5a1o8?W%U5{;dI~qb7W7T*ehwNXU1Xxu8@8Fwx!!uXU!v zD+|GqxEuoy_i?wJ?|spOsDC4G^b3V*sS^+9Tn^?@7m?TYqy_i8ai06}AHPkci4BC% zHlyYZ;w#>@?olEd)pf>jK1b@r=reAhUiF3=+@ zrY5Qj#h6Qcs)(r$$&N`WVGEx*Qauyp!EWx_w=s9;RejzjAKi7q1~&AhfdqN{BcE*Z zY-mc9+ZQ8=j^kzWB?RiEYxB_hrZPA28bk_!<`&ehJ*nYlPDkO;Xv~K2z#v9_SPjyu zwG^C-R1kJroY|CUH1v}9Qi_ox$(0Pz3&D32Yy-tUJqwl9+Zrg+j^Orw)NInj8;V3S zH;LPBS66Dbx}Py=90!BU=m930E*sRRt{rjq6jst{^Z_z}%bDY;?erFA?#3qWKQyxW zBsZc$dT^XG)%_Q$FgB~0L~IH1Mc!d z{C8odfx@85w&|@PlF@w`Li@Wxg|c;AK(c_x7k+Nuq%TST*!|l6(YIj;P`TJOxeXTmEaYIf66q%Yg|!(I&BtWD)05R} zEsiattXolKQxd#3qUasNW}XDZm`QfrF~uVwZ;Vu z-|&0o^%p*U!g6c^+xboKZJ!yyk@7L8t-^(QtESvy+m2IwO+cm~piw@T8I8bX)`>VO zaT$!bwlm$WhH@U$ayFUag@Bg#p5vc+$lt)o=`_9+spEXha#wEQJS)jf8$SO4SQ!ci zEqt!gCT*7rmD)5hzE);J8u}mQRq716GbQbswRhEsk+Mm+wPxI((p?r&FttDB0%x5A z5adCVmkbt1_#fS!Q?Z}%1bH|Z?P=bCw{(erfvbAi+Y$gSS9rHZ&IBEPet>Gwbi z>~Yy39G`UVZZkn#eBCIy-qVGmwGsO*nmiL(D!#pnUUyvg_G0V%o*nUTVwaBz!HWk` zjIqxT&Cwb$aY|Gx$Z^c#eGU<#qMsMV46Yqw!xnkRF@TZ9&`$gck7Ab7ZEup{*hRB!Pzfb%;A(i*g|RiM=P z!3Gv%y@JKrONyZ#b=DghOH!@*y--ug?z*88_WC)=`-KmbhD2w zD{i<=OVELg#oykpBQ#VLdgXcDm;Pwgymqrt+EVyAas*uhnOT0uQTYST>UF(ZRch0* zL9n^bn#}83g7&NAo^OAxTGQH^by3nZf&s^?2(5odn1P4$8w{H-;LOWd_QEzQZV&ea zJ=euQ-u8=FeK8jJT?NcKRnmF;Mg18-rW2$9gVQaU%xxOT)!j5b&U+z~T^fK2&qu`G z;`)ns;>A~Ns9b{g>!WI99Lu6KheepxuCiiV1lcB}S9p^|&QmRa%IqUbjR`s5Z^xP3 zK4-Vzg7TK9+%J9E^u&bjM_2u(;Sl^8dpqbs?K2LWGO>%$Hnepfu4z3R7g2`&aE(|_ zy*g_wYAu{3&OFU(M@snMeT#s2Z>V~?F@8G2Vh>j3dp59RtYTiwT2)x?&RyRkZyGOY zY_`n=V6&d3-Mj--;_(PzbZ2;eFOUBfO%P?$@hj8EozG(#(Ls)eT7xs@_etE8sT%ZL zO$0-{qQ7fo$}k8#F4uvdQ+vly3GasvPSq@k^92&iTN}gA+d+qE9n^dWClkc+38J17 zqdHfEECTW3FV1uxUPl29+uetK3IWz^-@>iwZ8+y!tMV%kER*7ByYR;j080K)_Nk}| zx-*R4dyaPX7U@jX3CDOQf6C{JjHvCRuS`p9aG|h4BZQ~p16s7>k62op^+Pr7c)V(< zQdyvqeHDSQcj@Bve5NIU;JnW6)8EhS0iM5r2Rxc+9dx#RzWQoI#8niDbMI{w1&%aI zr}kxk8svEM)H^XxoxL6Lq;@5l0?Ue&wdn|)!?37INt6|I=kQXCmn`MfjM|7slr^W~ zB>z}(9%%MPwL`SU9UpWm;L?N4u)FGGV$Je)kB)V<#qJtmiSXmr_^D=uw!=edD(Y`D zqnAjs*x$S6fP>QIu89aiTYm+aY#Otx>?T%2$~X8+w>`Jwusa=c{@#rf;+3ne3s^|6 zd96ZGF3fOaklSbKu+%u2B(1X{h;9}PKeSI32IOZ}6xJy@QQT6s zZgWcRDKv<~Th<|v^485JB|~@&)z89%>>W*Wm=U%I87 zBVc&wPgAl2SNyjRJ+y~$CBAJ|H_*BtVqzfKWh0Oe&rdV1^J@_*c6Emgl?-kw<~gJj zS+_!vO+{bDY)(o!?NdFOebHAXzllv;-6)tOA=h=8?Hoka>cS8IDQ+QuOeQ0L2~9^N z!<%X8U9<@5rF7|gn9P=Eb=2#A%|Hi_q)gjI%{^$>x#)@e%U5rRx@ZStfOH@S+nbIz z0Bf)2{AW)sOi>Q7iOorWH;^SkLG<-QpC^W@QaVa(T)Hbbg}Jq}d%QaIOJTqzpUVIT z@hg*Gs=PIw`%Zx%}g*Th2wrWL%>VXeUg_Jb7KggV~NpVb?eAv}ihdEli?U79h z5Q8Fz2UH5gx{+7d#-ilt;LJvGMPXzh=tIZ;6P$~%fSop6B!!=-#vnX9eku* zCHJp_OGSCp%}o_ONVA~L;nZY~8P#f(j@OCd^9}KKPf8xlr<{EuUJ^8Na-J<(pJK%C z6fky@UyM?ER-XobTmEjnUq@WN+5QvL6AgO%qnno4OcO6I%8Z>md~(3-bTJ~wdy~Dl zoKr6-8|5qc?lR{%bSPsg73Dylg%oH{fnwZZ6wMmJVsby!9~76OXT^Zaeb z2A%!>87@?uek{?^ew}pGqBV+paC{!DddK~#2-Y~rxQ2yk><(n2E0;Q$d8>)rje416 zvuQ#KxvPG5;&du(wIQU7iOdskHk2OiKLqJ#8C?#9P*5WEo)D2?RlD<-4{ON@DOJMX zpYDv-=>xUHc2AKWhTcwRmn<*{#IX2U8B>C+G*Y|c@XUJy@M|8ndb?YU{-c!~f&}_! zHvCN%3?fv;xN$Et<6>y#H#mSUR#|=@K`^l!U-DY1o|%A_ANfZ`hdkzf#5-H+_;iDI zB7K9lyDMA?&zL{+@+L>Fr`Z_#?hRv%T9Cs09r(0zWxoSXaP@Ry^j~14pztl8H-a1i zBF3On=-0o?KU|-^^s?e&?1r`P(W-*Lv9q%@QJgTn{q7(>rHJ)=kaDM);x2wQHp>Vc zcsqUNi3pn{F<|J!yz=v6RnUUn;#5Y&>ZPRZSJW#Oq2_{+p1%4b>G+Dy^(u6YYkh#y z@UEqz-ZQVSH&v((!~fWP_0yaW2`u>ubEe}lZ*j4IG)K)yvU`L5YK<`vj=%p zGWI6t>ZWs~9Cc38rdBgmFEw6BdG9Dcf~ef-A=~kRCc&DU_e_orw=Uh>9oOBW!t?1%lbb@=Bc{IgEN4>tsRaxAWQP)WZ2LFD2c~^;MTr^pm2I+> z#As_Z2aPrk%>`D&<9O$u8#z2u?7R2{{p|cdR_SOSuGibjvioC}giBa%e{VPUkM%ki zrd%O|GDT~!%TrHUG;ttO3f{zyX7N4yJvS*T=ZePLl?^GI@pGVQI<+*_B?GD$UXLul zt2fd_WwcA=>JG0NyA`L{_vk(Iof)KsR=!ggA6w&c8j^WUvWDiM4yP-ER?R6Vyz{E& z;mp&L+;@~#i)U+Y8>QGHhuk9?C9#5ON@+C1>WIjxG}kmY(`AVP1qCU#Mn;w4%RBL3 zi=ot=K9Nui}^|kuE-Bmltqkl$(nE9x%2STgsIV#jk?3kc6 z)5cHw6NfoJtiyfZkFO0by=cR_(mLT9ltvxgXvr}*GB1NqX~9Ei;D2#Gmo%y*7UAYA zC!<$_cN$Yy_ed}6R(Nz}RJauuy6Ns(tMxAj2;@)l zSf}#NRy%eUU5Rmow7wJUd+QuLFZ~h8MKxYZ0OeGUm3mCVo$KA}L4+y|a^lXa*L-yg z)JKRbhv|=UJAUW||7WeIUo!s@Nx&$16c`CWe;Var$EoPh|B=I$`$bby+Ya6Z{Jii; z1i6etEqWE$p)8ADZsK}{%a2Ao4780K;j+gKb$tC?%~4KL*S3!1n_m7=T=6dt@;kWd z2DVZz@fT-A1;qhZuWQ}6ugX7_xCLYh5^U(>j+!9RU{)mlQFrk#950!z!#vJ_WRg2P z1+MUE3N#(#kyVqZLjX0k{8P0R|Dmy+Q12mbA81HOMBN;{=Ge4ks#ezYGkH{vM(33I zJMc@GT{Dj~SB1%2W?Q>tKO-|*NQ8DKBE{8!7 z=o4n?%1p3SlHeP@+X_|{=iP!fKPnLlM+NJjr99~xPY)++Rtb{Yr%ZfpDmnJU@+CX& zWY~3uk<%>vBOp2h@@5}#MI9Clep+J@72S8ja|VVXEG}t+W#^~3shyU&EA6#H+gPu`rdDrt~W6D|YGJ!-F>I@EXF6Mi96a;S*nM8*>=&jA zkmp?%*~CeI8cC(h*V97$%!`rQ&RaYn?lsc5f0YjHkI5hH0nE4SpU>;o%r$wEB7IJC zpYu}3Ss+cb2Qh+&{rO9+{?fTiDG~8fs9G9|8&*Uk`5M$!V3W+0X$oHIq<(9`cv|yK zbWHeL9dL;T#l=*jqxBwymXlrT%t(Q_%S+}F`g$n4c!f`0)hRF2=5n0$@Pi~9C#^*% zOOUkfwZ*K}w^Bg9+IexEb?J5k35(rT1X%5#*Y@Bvt%rup(1jpZvv@(S)yE^;#&%xS zPkQciblu)xu@FF`l%9U?sTNb3nH;p)hV(aJDtvmo;{qj(8e_I5KZ|E-DI)tL|Jopi6knjIu9up zlnULf%_yYuy(P!8Ml-m`&bl0D4`OuE#ZQ}e5{i34_tt1(XT2ESAOfSzOCh3z7v(kB z)Jnq6TTOzyx*<6|<28NXWCrMMIzR`Y7%dMl--DZhK99NQvm8QUq1_d4+KYEE z%d0i~Kq6tWjNK2gq3E631-M?Rw0)8`D|7^A6!QPV#)(KS#D`5HY#zra0zc9X;XA)G&y*HpkWw|Cs`OEIRO>)c>H+ zVI0)um>?1rn0(HVRv-RX_+ZLtWagF)xWwmL_i#NA<34?Dh8;Xgh3;f+hj=Uz1v^~3BQBD{$B^|M%Gcze~rR66zb z-Xfl*#>+X`$wGei+D+;5ahjH$FpB%G5p*=4rs+Qj$E_g}t?k>;HNR(anSs=$OTtVO zJCVk+3E8R$1K)N?5aI($MeG58Yk28A?IWwH%mrq%i1seT^647S2E0sO0S$Dg4)N!8nMX2KUB#Rrw;4=) z?t9O7OE4IewnmromRlp2Zs`G=^&pVjDx3??hU=x1Fx36i!LJ7g8~A^?bS4$F@bFe_ zD8YWX@Z1GqBMF6(0$IR7`^F#^u6&t6;*ZS!Z!O0D)5#uT*1HeB@eLDvd4Yej8UGBG zV5o&eox=DzK&Tx{{ zQf^+)9?EXF($r582j7vBIP_TVU(bm=s~(qp{QjCDUs&3G+ujD_cTs3nzNYf&eqw`d zMq!glu?sh^?UfC^!O7T(Migh|x3FV}UO@k~#0^YfSTisSiPV~%zS#|Td&FPruMPrI ziLt{UQpxjD>AtTPy5gP;6>d~Uo5$7xF+R8cH5>e*6R29EQJAne8QpeybtBl@MLp1D z*S*sy>5;@}oa+l%!VibqM}V`-XQx+x264frErUQwwYLnF6hTXkKx_$P0)u;VW$+*p zIIsI(=lP{Dv>Jf=OfV*S5NDCxU z5Rfh)y+pv!Ap{5|jk^G6_V?|x&)w&__niMuo`2=hZ@}R+jC&7o_zME;76iJ-4c$JRN1fe1oPZwRK7?WR z1Mko7!1e)$8<>B)ZN3!ZugnaWQsHq{xvorH-E;{J5GHb)`%bXzQ?&dq1zvaRt6GvW z&;6s=xG&`>T4gofb)#43C3?iwvhoZ$eQcs)ly_0d`)bl)Kz710-~nrJjf?-8A&bwpjq3B;JbmjLh}@6TP(&eaoRtfdBz zj!+UaP<})Qxf#5qD>M1y5^9ZH##fsxCV`R+3FX}KH8?gRyr}Ax$v^73(Awm>UI;!S zi=aC^!SY|1wux-GrMZoqPtL}cFnvEp=F&i(I6YIlBly1%hqzplKue(77`4zavDo^wOb)bO*Hp1aeDjE(%B53OQx zbrcr6YDqJj`uzqW6BZ*f}B zT&g*i$=Pg|o=;+GPZZlu&bXE*NY=PtL43SCidLKAcD0FQMJ(H6>fnbwq%O|7&l04! zba;o3VW;Jhfs`iK z@#%#L%01kSNNx6F;CnA}x84~0QDcka)VHuTwHeex;06I;%hdg{nRerGUL@g273L~i zcrU;uMx}d2QMEZ%Rh!{bR^-Oeu}qgB8+~tP*Iv?rRMu?wSc+8Y5!L9Be=xRJbi)V3qol6JWyFdKcyrT_z43Lnz3rtIKnv zPg0Qzf%yoYZvt^GlPLPUo95jSp#_Y(xzJ*{G>l*4Lz#qO4JI8ujw4-_VD zuEHYcB9AO2i>O3vU=mdj?j^6PT(1Tym>=<+wwll^nSei0o*U^ASOYJNKaAmREPfP|&w?EDgpBx<&c?6@)B zy?{o=j&3|PmL&h)kh8kM(i{PA`Qw!)TF0hs0Ud7+Fsw>0JCJZvG zJw3uPP&0;!ToNkQfE!v7%%vw)Uv*NLuAelywzL$};T;Qp&am>ejcW0eOgbDou7F(j zNZTya@IYbcjCWZHk`423_{}NLhhqykx8B4d+Dr5#3>oeUS z{(P;8wnI7+^WV*gq8jG5>iF_+a+x1M8ksq*DC!u#C}E7&{5BOZ7CsYz7zAt1nfN%> z6m$e-^T*^KN}^iUq%=AXZp89H^J_3UUNR5rM*C{ByZsZu2UBfO?3G6?s?Z((dPImX?V z;_h~IB%{4e=T_RwT*q2vYtu!9A%~LB5l;kN)goab3LYQn zx8|#=#5|q0oeRh2Jv>k$ByD~~b1cP3TUzDpbrKUZO`dH|freu!FOfaW^6C3NFlmB+ z4tsyUKo6fo>LKKY1>@WkF>zGy>bpWBWxN}dwI z%3?i3QAMZoh%M7CQXkp3j6c?5Y_-q>AF0uE@Y?u};77Vu%VDkso58B##u*UYns4Q` zLd)e2vJTIbI&zWSSeKSAQpYuged*Ab*YRRuCEcb^7@t4fdrs%!ZD7}r6$^-vW_Dh$ zlr=aM1@AT8YGUTXFOEDhpV_u`_XEWXste**_*yYVQl&-sfGW`p0+$LSb~)(dmc5Z( zEVR>KxODF&)LrC(`3BcIiS=N;6++_FV7==Z;;L;F24Z@M6CC+_yBZ(kDCQOmajRmK zWdB<_f)|=DMIki#90RmaUE&4ak+-!y!OrzxGZ~$?Z<3Z)Cozi`0^*Y!L_?E^?=AA5=|&s|1wpZ zhUV!e2Y20q!irJX)?*DNM^?qg(!z*oTiPaT$&D$3tSSbct0I%k{@IzGccu)`x9P+O zh^fwxnCa*-c4suZ-8P;&bxlnbHri37O5V~gp11S~w)7af3Lsq0=$Bum%_J9gumQKA zrDuI#J#*GjDh~d5RkHyuYc}YJ2zCmyuLK#LTJ|c*{yI&}Xyn z)1nHq$yHPQ)p%v1%BjVm4GS5)C!a9@D=#hdtRF#02Qqty>PG5I(8GR1wga*w{%|=1 zAN}1|(Yb~Xo%I6Lg`ki>3q)uhV3HapA- zW>ei05`%!V8`oyA$s>N#T6pWIL2->vjeF(yt0wGR4Y)JAB3w} z*4^NPH-$%9usH}^K~re>K||G?tlXcO4b^<`{i$sSF-EJ*(W;_ai-*Q~zGU}}y1Sjr z`Ws{^q%8BvREazGB}vopvR9zAlNAjLE9qz~Xj!F#L*lfNvctxO6WPf1p|Mg@pdVBD zKGw9L=p@72*AvUSFj{I>z2xgVy*N}?SfOvNVU{C^6BAUVTJ<}?9lO&ZsPSb=M{^pk zz;C)UoQvG5IHeO(txDrE@S{zPy{%gh4$aR`Zk8Hb+;}yhs1qDIEA>h8Eh|?MykF{NB+@>aI?clhdI;N*vqZ72Ay?`jLx9#c9N-a%tH3vXYXHi+Ae zEocw^e?=kxAA^_w>b5td(9UZe2%S5>UVkK5S7KhZ`TcY_!|Xx7T#8Z!*TU(=XQ{-q z?mxnaFSeSH+_hUv=zO>~2=v206Jl}ALVY!A>pdgG;Li0J@S!m<+ownB5(wm~tjk?| z3Q3moPRc-iZQwd&3fzF(zG0cG8@W1nrY10xe~(}#a)mZYIS*VvvVHwbKv-VjmWj-< z{&$`0FL}0rP_yU}>g@G&$uNs&Z7Yg^|G>=+bqtBtJ;_Uq2I8}uurE*LE(JfK{&zpE z8E_+(K8KF=^o<_olf(yU#V?Pqn>!`Ncx#&YUEhNb$5eJ{)~kQb$KsEV22ftuL&PNsuNX-& zzlAfF>cAngqs*JW?Aq9+hp8pDpGoQr(6ccVrG?6pC+J|)#Y;FrCyNXg_xkfei_=hI zp)6hQ&vg7|ucDnu@rU1$A`5##AueW=p0z!ox(d|#>?jmglhi~!{oye5cmatMxskp! zyb{n;_`CRqq8%7?IgpA_Ai%K+2+*gcLJRP>YKVr&=7)XIb-1o?j^+QE)KoaYF|RBfDM%0# zR5cqh{~k28_vAYOl`j6^59?o*$G)C3?CQuylX#AT{geu(zB*#%CQHwO%KJ(veWWH^~~7q)P~BN_vs&gjO#icp`0)6XP6 z&a2#jeR-~lP5WI(qlK$&{QZx6)!YjG7|1-LOf(D?*h{=zEaZ=eOKm6)xPTw9*(zNM zU$wUm1~MJJ9O}k-?x4;-<|v$ahbLWa0sOp1f;DN269YjR{zcRSuZ*yJmTt;$KTZ^{ z<}~tv>9ZY{v#@_WG3s)#{T$szb;#UsnXoF_oftaxG>q&~7T_7c&dLxZKJuuT<1hEiX^(UGy`IKy_JT8IQbEd8_`cA6Q@$EsO z;Tc>ZdGmf5{$PmC*^>2F_RJYaKRcp6qP3v7pf^BsijL{7XEakSlGBkA6kIAOv2U}_pc*kmgtI1dJR3mP2GCxs4W!X}J9n5&t>mBj;GD5Jy}6-eafsMw@7 zSb0b+avpi%%E>uK>eRs3OH_+HdR`rcsX`wZOAsuU3+ z@z-!4>a(+2eR8&!qa)F>^bI@0om z8crC#kPb0yk!X3oNRHtE$mhtI6?&*#G@9$>BD<2&_w7%S%!NLUK<$=BqP&u!N+UJ9 z_vXF1Pw!R69BZ^^rOmM)l7F!a68smRgyjlytC>V<2%vr>G3L)(h$nhm1bW}Pnh&v0 zz0Wy_?am&d( zrI|Z$NAzisSE)E@K~9|xHO7r})^M3Q*JfDWRHWJWUBP8Do)uvrM*;t1YKtA){g$#4 zP2p(zq7IGGQk=-Jv;cRdV6R9HjTRwv988{RnXH{p(U_OEAD9}o zrBnvdXyFHgCmR>r09-q72=K zJK1b{9UBCOAhQK1W3Z{KCF_xE8_cx=3`9}>k~QTLAf!LuDyvU-xx^Pvd{|{G5R~2S zn%#CBOEjR1N+A%9}QZ&rA2lOMY`*#b&Zgn zuLHiUGKm_AR@s%{T*alpDU$zaB)5n+!u&QlV%+O53Crahzm@A?*XIDM#GvdgA?1s5 zQ3lM2$igQR>qEU)Cn%ompv!OYJ|9QVCBT)EC8SuR6(o;@IfojXpNx<-r)NhV?IN~3 z9CM2nWJ-v8J0UWfXj5aOBZk8Gn)W4SmoYccudl63fvPP5*?Z0hwd;QlKXP?6@~-@Y zcetcVu2ad5d&kr~G?w-^V2RAS`%+};5W-;O_w1_8Y*06`tx zJbId?oZD)s)IBtC>!>C*3O*j>5haDVf` zUR&YW+&6_$ETLB)~l4uE}M_%P2X!@SxX zXMX!oO3ZJJUGt$XasV{+M2OM{nDU_~1M71U+)xUE;p{t=>{FZQLO4}~XVW2uSo0%> za6fA%=`5DWX2s+i!Vh6!1hOvI^9rDKx2KD5WQrgA7Tv{g*^N47lfu?U2g)WX2V|Yo@j5K# zF*!s^Nu(&P-1nUf=Bv$&Ge1bFVQBkqvDWhgD(jxcLN#OV!2aPwp)Y{G*FFI%uLD>H zaNEl30QPebL#Y5a+`SpY2Ss$5?e`*A&kz^RP7ha2E_mZmX$m@sDMhY2!dAn&S{T?k zydG9#Z!h8nEdBPsUHTF#Xrm6SZL0op6q6$!W|08>wkj4j`!W2zUsE_n$z|)u0^sO^ z_0gY>+QmSpYO#{WC!qhJ$om-J4E|?IV>2QCj0jl;P0YKZs{rQxCaWi;o6|%K$0knL z2B~vL$KA*-P0h~CKi|C4JLHmyam@Z{-TCGMEaq=kci<@gLCJ{T2MED`2m`Gd2qVGr z`P~M8v}u_CCh^9I-O8vmPQigpGR~uBL_={U9wf`v2J+H?5if#0vs5U%2LEqit%1-# zC%Sm^-XUSxL%_<-1^Hnq3n#tT=4ZkH;Bn3Gjb}uIv&i^$Qob;c`@ipeF(BK6T($HC zoO%GQx@jTvSjhaaPLbngzG?3#o{qL?8*{9)=ev_|rR((`n?JAhw2eMhDxdLkzn+BG z9a$_47?4u(Q>l5tsyT{HmKP94j#n+2cri|Actr~5Tc<`t@2iwcDap_I;D)nk?DlId zB_apR*6^+P=&^4{WJA)k^M*hLJ%GLI;e`U6zroJOYRBBU!jMEMG{1Mdcqn5V{knU; zQ!{(IyA1ZX9gN=5%({=a{1;C1GLwfX+Sy7`Dgr4R6EZ0uR6T;cL^8KQub-L>I|c3h zxp6@=%ox2;0)4S-rmm;9Xe5Ta>)um17|S zdO#VBV_WfRgkv_QmWFE(!D31K; zmDY6G3!^0;cerA*?}b~46UkeqxjHwx)ot8L65nX6v{=}U-;tI~_Zla?^N~jCr`+hP zo2yMvQi0zsE3z0OD0>-qo*nvbYBRys9$M>Nz8D_r9v@MA5&n?wSJUqHWmW`MBkY=4i+JV&<)kdjFYh}PW*Lx(Hk5DkJw-z-n0n8-HO2J| zH#iD;6-y^n_>tZ;Tu(ZpqcXq>>}g329Br6bcF*<$&pIUp9_?0glTY`0*wJ)t(|>3P zPjo_MDZ7vz)~g!ktZIgrY1hmj&e6X6)@X21elKLmRz=>Lqy2?;P-%=Fx>}V)zmmB8 zPVHK6pKp@FBI)Li@g`X>F7!yINV4py2GGOI`dh*F zw`~IbV%sj5pI+?E=!%xTXnkRsAjux`x9O>xk9G)imA5x1_P(3kqh%}^(ei$6;p4o2 z;zgBEa7C5D`OkZPp0J45ir_hZT-|)FCe+ce>S?o^VX=i%JRa=d~N+XukRwu15HyKZV}zy+(I*VtCSZu zadF*F?#v|X2Aa)8LU6-b^g@y~-$Y{va>Whc)d?yjb7uL;=Jnp8%T5CM3{sF;L`79V zAe;UbPLxv8E6Qfoe6j0@Od+jR-kNYL%xYTHTTxkbNpv?uI}J{T_1Ph+HyLjyJ1BLr ze07J?Nol%OZEa5R_yuyu=G;n|#n6Pp#gvH#2OD>Sdmw&6Pk1G)4{qAwVJEaOg`J}+ z*lr8Qz}8hBKrrn9!L$cT4C^D?(y-0>9Z6f>HfN+I{ws_#QSZB~PQ_>>(q~hBGhzAq zc~ed?@=ZTW+{p%a$dwHW2f11_4CP`CuaU|65=Rrug^l9O6<-0qT>!TlHNaQdj`kb#PKG}@=pQsJt#sim@6w^iL*nUN2Dgk@KX7ewt!p3D^6i&tor)wEk@Z>}`fu#6(27xntCTj5eB0*&ZZmID)hdG6UjIaL1Xgr`c5@S*Qrw0>=Z_sYUF#Gz|0!&Ilw!Fks5QCs)D>mwUpS0=pR zC#8@`z)-LXGyLY9zFuQ_c^=yiB}%reMNy!mU4Utd<%M=~fCDdI>mzL4#nv#FW6k|0 z7Qm}thsJ1q;dQ~nn?LF}1A^6e46EH1CP&h3@sQdhj`OAAm__npHbi40=GNgG*d51+ z<*hIx@@V0#?efnLh!ch*LCb-2FNuKu^v2w`%P*HQgMC*@OEl_zd1>f-SvzyzN3$I6 zr>TLw-3@-T)SeEvl+KB3u&ZAfG7~Q=%8o=>d%Y7>wTWL~7?IGkldX;3;{@&!a$A78 zLSscQ$@uY4T=|*k-cJ8Wfx7Xv_P~*dh^fT2>JwV0`iyiMr8imqeb;5Yl*^;BBY}!f zmD@+wb3I0s%MnbI8S{1DfP4~(={4dz8sG>&k)6s;7>L=9V&{?ZsI$*r0J)XNWN2q- z@#z`Jt64zP0qA);H|1vTN7m3Vy!2hBrutX{fVzvjoW!_?~ErVm5gokaWMIWZeId&hydCHal-QwaHAs&tjId(g=(+AGrVP&-_ML($2H;vzF9 zYR(n{`BSbRYa$zMR&fE!HA}4<#jO<;RE029<44oGeai*0Iyxc6pMYY^+ zcyr0B27N8NsWJ74PA@jL-Fgb$v9W2d!ddUF0#o91Gc{>Q>N8=#`@-OLku5K!@!!K% zj~7?#9_~oZXS&&`qN#58F5GLJ5R&OVm7U9`n@p9YvmEuZCW;sIxbY8^MmJY_4Yaih zeBZMi1Fk3$dRNAPGeMDw=qDcW9+g#x7WvbqmfYX z@%fzou57m~daj8jFKLM-U$=TSwC};AMg}blh;mm;=NU8;6b8(iR!hDByI(4pkh<;H zT5PU7-F7DX;79~!JIDjhz1xi-*7}%VPnvf8a&o__-=gy|sy73eUo&^Rt zK;MS8Bdbd&Af~uk?Oj-XOrxo>J~iC5$~`lx=$CB-g6G*gzr2xOtg;>4AGH8d@c%gw zFXMs242|`9Z*KaWDC=etFv|h224{du!!N_|Z+rjSbJiR!2>)M1cR-#dkz4hT z^-&IR2GDYJ)`h^*w%G=}o$h}kg`M1Pm-=s?yp0+eWk7|(+h~nN$BCk{!VKl{ zTWrQyvJU`m5CZ@=k;ZeMA%+@nod3_Mng6_D6z0@8^k(tu<`^fETZMT!sIhDQi`d(D zQvaUO`5$i+wm8nMneNSfhqbGz0m}ZD5SsjxN&g1}JFx%99{&3)a6T~4v96Xe{JKhx z^G)Oow0b*Hp-QzZ?ocKgj+lG`atGTb9zIg`1cR0bF!^DU=-PI5$q*h;`cS^dlb&Wc7?x^H1V1pyfs#5nwM;6xkv z<&>1^0T(>WS;lkEZV~8kUjPMp%shbAHjbdjt_I=l-QwfI5jRZLO!+`{$I)#QSNxS8 z!o9akNT_iQ%iBCsHYgF+S;TVJzn97~Uu;w`fJDfeqC6V$?A6!H9%Ef%Gw08+(?8?B zST}lo@$zzd@#>Z1MQXp2a5{Dzd=MzXeeUuHDr6j=wkv)Q9smVDZH*^JOl_bw^LOa+ z#IX$SkotdqqFSw<1Ae~z&(Fto?#`Lw9vsuW|fXUF#|YFy9fI+DaiKp{&P0(Y*bs;h7fb$QQqIR%>NAy zqW@Km^?#wS^#Am2C0NY#3r>~8Si;)VO4k|kQmY4v>v+`j^S=t4M?j!&h7=4WCD7EL zYVURys9sa>oOx-W!#4xrk(3T9!o(Qp_+0G)cw$ReNaq&lq$H&WKxojaBp|E&rt14H zJML5C*aSndC1QHP3f48E~0 zs?H~PB0GNw)OUQlrT1IkXKrXV@z_x?L99i2EDCQwOh`J?h*lDQYqIZCq~3Nd9#M#g zC?J?cuD+P>@&b`y)kmxvPO8Qk0HFKZ4X5w1G$1vf4u|hARo(QuF4$3YU19lath=kh zAIc}fv+Paj`;BRCC2Om>f8~XuHF7HF{aJ>!=hPMtpq1X3jl{$njI2~l!nF51+UYA^ zE$hYDQlbJTW5kNTHmQd2hQ~iWBTWxV+n|>D8*g^Nt}IY-kDKGJz_`g5zWI*WDVBCY zMkNpBtSNzpZf`f=u9gj8a&Yz#u&St?E-c0@B8KG52bG}CzPE#R=J+-{%NAYCi*8Q) z*Bj6&g&!aqnfeb`S0zxmmebJVAMo29&^O>5E7rXWXy*lGVPSQ$rntpZ#HwR41`>N` zK!I)!lV%;f@E_MYNC81nk4h*f@(fT8TJd<=ETm+H}6Wo290{O2d9F5o1}8!2752 zZ?5?M%}9=4x`9?!=fkqY53J006U^J>d5i$oPIO-o82egNk^?)zy6Zb`A``gh9|lU4 z&KEbqoJak`an}oh6D9w0BIG@ccZBz-1duEJ=dRmPaoY*ms2%3SN=R*YNTOAYSxThQ zupv}5cBnQCZ~y7}rSei0YWPfX+b6F{6Kc@$7R;l?L)mX3VP|(Y?#&0yUYs+)#Xw~VYu8r z#YiPHrUmHAPu%IWr<(-8Vw$7p^OB1rFt+!c*7LJ=lMbKMgt zfC16eHs>mOLp!bZaK#m;Vr)$g7(Dt2u`eneZz*`bccKKRv#J6Rzi_KIKFcbX6s zkHW~QNIf>0TZD0Yy_F9zyc^t63+;?qwlDVEv$jhGFQAT^Ci<)aOu|VeHMgWVnwk#- z-Ld>Fg$LhHE-xMuK@BlP0U7WH<0J$N-}YeVFZIcoM84TC2inEK3qYgEx&FgN|BK4& z|A(Ii?15VQdh$K92Rg+a#xOZm z<3&djhZE#%ua2yse%*Gj)he~CR~g>A>c@Mf6w=H$TDEM$bW3WQq5lk3E~zcG<_b`MN0;=pM4t(tA7{aWzr(Tx1{X$?cPZngvcs^xyGQ{}7nko=XY@yb_H5}!Elu`~uwPG_x5xQMJ#9$VXjIap$GbI4X3u-!LVeVs zFlCs^#K*DC=0x%X!!!Da8Lr+c$A0akDzdvL?x$Vcor&cf{@%`k*LvQH)*ao-O6yaz z$2Y&g0*nYH^rnV{d0+BGrWcHb9W8`QlzzI^ca zEd*MTxuBaLig?K62ZS`gKNarx zM0__>A5DE7QbB)fH z#XGZ+R?L-ZDa~LTWC%cfRtQ|L=C0ZhL3-1$Yw+ zsdo*1@-%`%TR48;mtKgbbDU?HW(kY@TC^m*Dc~=hfL)|mh_zXB&gDF|qG-fmFsx_j zyEQENJ4M`xH-eC!lVWS49>acASTOu*Hr?7lU0O6`R^P|n(+0U@?pu8i(Kt6`J<9Vp zI~~=dUASUk126?67Uuy_2q(_Zcef3bv*=;5Tmqpyx44MH1Y+o=4zxeJV((ljKCN*9 zX6ontJFNV9x-KLOcRT&;^up|(S6dRx4`bJyeytldccxq6&0VxE-#r>K{0sX6#d22c z^=$i7Pit7u%_m@*fgca7_zF}v-5_)HhxZx%t#zOT ze87db3Ca66xT9PFZ~EhYs!riGnmI?EVxV5LkrydWlW(C0V0~VwwQ&pzyy<(5Rl$@eM{JOKFaHg8vUX2! zhPjne!Ms*p>dJD?tjX*m0Q)jJy=O$roVTnx1-Cbk@g66R(uL_~dC9=aK6J+3F;>?{ za=@5>W_GHzl>C`P;7V6CC(Vo#NjiSjbeAB;g6jg~Zz-%!#T|;DS8HZxEW(;^&2U7N zK(ZDsETp25d)7Xd+|grr0 z8L(}~K+pCFAmA{jrtN^*H(g_Wn(725XT!yuyB?j~^E-@T4?LqC#S?? zs4XEL=nM+;E)N21{#~W(&LG~WB>?vOBMaXRd3p@FdJMUNCismBn;Aub9NZ$WFTg}m zC6tTJMHf-XZ1^q&ro}`%Qv-d3Vdr!JDlZ1eV+ep%86Iwr0qn-yDa;Ss_8CB+y0?In zBCcTwpd9KY^4*M^M?KY`MaBCeAC#*3*SN;7s~-BurAw7X0xns2GdeXB{l4b{EDCpC zbZgew;6wx#LjSN?TxyZ#VkqXjQs}dL(_UUiqCPiI7+!m2!p3?lS|z9#f(kO?g?g#$ z^FcS^iuqD74WQ%w4bUF?e3u-bERb9QN&4IdBiaanSaUXBFz#p+Ml@Xvl^3;;A7-(P zPR3KS#C9nyz9#Dx#}$x_n`pv{=2gF6Mqy?HP_r0F7PH@&2JNLxl63UV^SGrRnXL0b zcbgKOCpTv7e}0-*cGr>HZuC0@;NbDeoyYc1y=K#mfdP|y#@w+0qLUwJ;PN0+sPUdV zw8nPSYZNB$IndrOV+Q-U?kjg9JS}XT>?o)5tpxDvfmIH}=3V$ndcf8UrhvV!1(ibb zh~IFV*1hQ^w#?$vRU2x4eps&uP}JUQ&p~AsC36mZy%d6&9zgHZftRCd^55^m6MyNfLGM zlBQMG!S|;hitW12U7>?a<2Q8bnD&lmHecLfqRV#xrZm$QN6m_%P_I?}dzq1#c1#ZN z?gr!Ldjk->B(sbgn)|v*Bk`2(f$y-R5kc)ONwX7wjN&n%F7NM?Z~%3>Ll!)~$Rf_6?@+T=n+Rr9ZlqWF>2c@7Q}ZnEJYvDP}`&Vz=+ z5iLpj!&Vn`SyAQZ(59zY!_1;|py)Mv%TPw954$52Avxlxpv$wK7DPRuBX~WR*s5S= z@bMmuoA@J#noaHIfjWqyp1zef{;UV5U5j!b9e~0%Gy9`gfEnAtkhQ>F$olU>J0JD% znHZ8_`p7gI;Mq=x7nEXbS365BE&!R+yj$7To=w<&vp9@x!4?lRz6fJ$@otB;o{ecj zVNvvS8^9jWZ_Swlj=y}6DvbGbzKjnVOt%LppIL*+mh|mv>@?|~U#LHuBkG*R3pJZ) zT=C|GZu*>r&YW}q1;)j2jE`Oi7b9f`3X4~b`=cF5C0)?Sg=oN^vex`j7>x<3w+6Z4 zDJB64=hTGZKNL|Kb_oqNz#Lv`J31wH1)ZhJ_H}!-%VUq`U1p_9B~|^e1HJw;04a&S z<)3#O>B+4UsIGNx2@~%6j(i?PTb_#%fl4~=09WpX~CodZMw_ znI7vpeoJOvA?xp-6z6Mi6aPX*rJ7FqI8g+~*ow#}tN6R%YVw-v>R5K2V$XC}^qB3H z#jJEUWy4x7V05t}1C8V9M$Q&3eTy#=i!BOX;Uw`LB`r_b;RKxNVN2Vy57{QsZ^`Z0 zm!az@d2NKV604B&RfwBI0`v*F- z#$IO}ZO!#(8a7x&Sou_>0m;s@rBkG|1Yl!lIZwk%MlYBXytQgmdz({LSX;1Kc{t%< z7JNUaOpz__q;?=ZJ@=cu=lb5UFX>dq8x<}U7S+ONZZ^AQc++-cbqsz$7BOG$>N6ZE zLO7lx=aFf$r8m}JNG?(FnwmmcThHOi1lNlWA9u7#=_S--8v}CNk<q};1Spq7@7r|y-de}Lxv9DZhExr~5tI_q9iIFPCM{=>A^gD9?dH5$f z!Il-=-J_enIdQsiin7d~E-!mAVw9KHL9-|FpW=_pLJ5K?BL$u;B3 z?hN5j@iTj=im$nrsgPbp$%e?*^vr zlVQ$>MDntxzIO(0#Jtvc2j~IIVRM5Yt*yR_vrbA1Wec;%4t-dGKip1ht!6;}OfLK6 z!);c5QoEkQxa7Vy_VlJ6FEsVAny_S}54kmmXHX61x$(T+Ix7h$N9`;H1_{et*_|A< z$)PGy1XVjzIUXQ72Z6)^E3a740aq3aPjiELPTDg6oYpBPy!1~{fp!9ui4zOe#7=sP z-N+;_l)~MDCA8At)}E886XiliVr` zJ33jQF8eO&wzMW1P^*!c#30Kwseu$j?qvBjSrip{PS6f{#T!B1MgJ4j*{J7MX0xhp z$hz%m-Q?7@;BS4k={~&OR!|sDSA<8QP1O*N0@M7jG8}9Xz})SVZYCEa7Vq*>t(0h| ziiPm=m=-$KEG?PMU<-E~Dc)?ziBtD_XLjYh{ua4msaR)(Cvq5hRf+yZwziHFAt_kR zSaa2sS7&<9p#haeZ*tvO01b( z=hsATYY8#7RA?<9L$I9wW;VuFYlK?~wTYo_757Z(1ZIh1oe%%5NW#;oqPb|G2>=B0 zf507f_&o68gWdL{w=Mm3E!g?1e*qspWnDtu`Qrresb3lz_4Nk8qM*dAZM*>=9(Qv? z&+gqG@^wtW+_O3j@Xa$Vy?+*aWX^4NLX_^||#9C`E{qe+R2?oM*Yr@XCs3i>t@fU~R1&VJD0W11LY$F1p$URTEPcpW7 zQ*Fq7*_~en#%-|f$6ot-a|b;OxJ#&uML)wXH04N#bw8cZJ)lQ2Uj>-%j9$kzf?0Nz zR<|CHvT?4*td)1Q34Hx}?8B`4w#i6m;>OKrsvA&_w>#C1N`V$Z^4_WvKfHO-nulMbC(ghh?|IDk1z{ro z8h`?)jl$HNKc(YA)s=yZ15LQOj>bALeJK}AtDU%|H;@z}RG=8TMGhtV6uhpAy_`lza)WKO$7$(j46a zOkm%c(}w(``H<#@zB$dX75EW8zDp>JJdBMrvKYVKi@qITDvm-~YdPvEC!^DjoXzJY z_U!?Aham(&1tcIyI9nZU;BooLr=nt)z0YVne4Ib|nE#oXCFu{)+>Ww%*!Ec(RNX*0 z0s?ZlfP@qzys!g#M{KWmW~~9)g50k>E-tFVWXY2VM9Y^J!O{n45!T6}12>WDj{{vii1bAG2$M z0q9|_qq145yJZfgk(mh}o)xljVDgGY`H`|F2Ix}}Y+GdW%dszJy5UCD=eBN3em|)n zW-OaLpN+U36ATs029-AgIZ)qu|IJLp@QFUoyfe|`ZVO~SY`awW_Nd*N*WSu*M8*7! zT=p4ji-eEF_P3?4{f53>bpwO?<#%^Z7rvi;)f)4CW*z&QYkbe*4HO2bn8ZVZ0kb}2 z%>zuly|I0$t{>i5PHo1-`}0Dbay{d5srVDZ@?9)Wp?v880Z^szE=K0OE+-%LoMO%W z7;sgp9-IbdvYI~|oLapno{;C38<@Mr^HByNnlU?;zPEe3I79tZDK{N-z8ZH)@!3KO zQAQ^}Deq8PcVi;QN(7Lj#!t+2Nuysk3aOe2Rb~$jSYEdd0zI@Dz(9gTV9d$^%=kyQ zl-#a>tqo$NT3jRgHw=+KI|rm>>95@{5CID#+ci?xo(Cep z3flXdX%*nqNq>-0gf-CGYu!T)c*VUe)f1 z>s4sE3K>$%B$t<0l^xk+7grG_r5A4xldKs{wLgQd!5Exb^wRARklAGF?XLP;-kee2;&S3f0|k=+?&MTWxG z*-{Hqr3f<*A?urfTJ;bRjX(gsJl~Cw`NCIL@VeOrb83FR4`aPzIXNJPxdM562yewJJnKv z#q*dW5e=&j5~zc;pi&tvLW(=Ff0VOg%_U;9g=Jt#RJfwD)tKf^2Nc;tqsTz@RfIX{ zkDEJMaj*nXgO{cA`zz{I{lMr)Q+^cudbk}t*IBFB3MMW3rv?8Cx!L;l))`EKw|=Gm zTwB8wxdq5eI0z)PFmCx~RN}E1NOK&RYby#O0aP_E>+k9iKvm2q7|aii7tfL7irU4) zEz~`?RnlHkJ+Wgy$UAsf2?K#l^-}{zxi6C+EAG!?xbQH3_^5H z#s15sJ&f{=WGJ;IZvuWjJWQ47z0hVa4l+&M#WCP4{`V@pzhciP`Yt2>&uvHr&{5dq zy8Jo2RtRmja8gz=TYLL|OZioK3=b#CgPntx23(6Bh6_ynuMfKw7`ZfWy5>0~gvG48 zQD+Pj^+Xtj>wr^K*Q7b{VOE7QC662ZHv@x-bn_?$YX9z)>-|-*Fn4OPN4Uf}9*L=1 zp?X%$`u)a@vWw0hsTha~c!Kdxmj}v0To{V`H=F16Ix!I-XzpdZSV;iEW_R()hxjz} z@AqBrxLFvGan$GriQFQivjixs0T21j4Ny}=@ILD9it2xQ; zyF;>GJscH2ZR;6_9c3lR^(`u!fomEQIeoYrUepi1TeIZRz}hRsQQAjpi_$7FxQOVl zT;kZM7zZ+S)vX6>^uPciSN3Zo56u;d5XTj+HhYgfv@Ti_Q7z|r^xJFb;YVxaSv)l6 zD8(u>sk|P^eIkt(j=LS5(dAp!>30qk_Y7CxO}Z<{nc2zM2$RHa*=FYc?r8C?k?Ty8 z?Bc4ete(-TVMY65Yk3{*Y+r>?ScW%Rrd~CzBj>4Hx#Shq;C$Mq^eRo2f8M1d=lJx! zt-hc-&DdfnXdULb3OpB`XnK9F@ihk`humx{V8nIkSU3pj2i%ASP{%8ha{3o~pvdC; z`M+Mdd?Giin>Yizr51FN@@poNt1K*bT_qgN(X3+%3CAYK)oR}%U8@k!S9b}>-O1_o zwNS$1y?a-0;V7(A5=al$Rg)YFviMXqHkLPh_e7=vP3H5v%Q2=Qx=&kR+5tk1ufr{d z{_$2ecdSD7vz=r}1HC)-hl(ANhcMHNM!$jCa+l*`Bj_okAQ_VvER76oUI22DM*=-# zih9@bk`ZDu-NCH=IZv$2(4wJl(_*TA;8eS_jm46f0mQ3=d=@p5q7TtgQ48aO@sT+q z)wyND@V)_E)^(kxWqU_RBz1oyOR5aNk8I6|kfoo;r>4kRY?6Oqkd1D&h)|+iZ3mA4 z-7!iYT@8Bb21TXWS#HtSvOn-hI!%}B2zSQm$Pcu-cv`5tomKoWyxdy>M;M#FD<9L@edI0S;{@K`-9qd_CO2&8^P=FJqqsGByZ$Xc?bv3W zG>D>?G^aF&z_+>B`0C$<+h66?hQjo`Yvw^Ky1Vj&FnfH@VkrKNNw9aBo*62rrc6A| zDm%f~ik$h3q{DR`KxST>!r+FnHy3|>lbq`J=Xgl2M;qSI5C~e;2+DDZqrUg*K0~~Q zP2*Jlupbp(;<~Z8mb`aeA!&3bqsa#JeYsGK>eQ2ukVTC!cuf?PJ>=Gf7qPP0_gdM* zy%o`N7J0GJ+^|@Q5Q8)?&sfP$n^+!HG)Y3&Dl_^bjF+lM^knCTt;s)t-SsN#viIYF z!MFFKD}V=`R$cPI;$i&r;$1mwN^!bW-9g6TGR-7Sk$X9-Ld+_|809sUu)xoG@IFrn zEPTz5JY2S*kY_nCRc=IYS{2T)04)hX3B*GIA1sGnax%CkA-A1XDjwjxDPHt`2!vv_ z1-ZzyV&H*alpaZ<&6X3!u0CL%V8n{b{=Z-nz>6ve$frAfYv>Y(P*QMqoL$1I zwFweYYS`TNiDGK{^9#aTo|6Kx(naZ2LMran)$T$WYehMr@cBK_95B6~=n!jX9bZ`~ zYtV7TXvS+mYmaZn2x0NEOe+DJqw5V1QyaKPIqhQ~PRm-^>J}qctl&xr_v9`QvPW*7 zmPiXMjY;Lc!$Gc@#vi)}Ew6>18A{F@epmoa5W6=iy>0-}5q<3lj%cTsabUdM+dsuv z?wznC^4ONzphnY{^9k9anDAY`VaRoSv(QBIL9;&c&-8Of_g@4>iAM{qEjl7Qt%OA- zCpUJiANqyryV>P_ire^PY;;Kn0(0<1To{losvVGz1@IAt3~Gd%4-yWU;c?S5-FWV* z2Z71(H_WY1(O;Z&lE7F693pUhNdv$+d7@oX+u9aadvgv*RDs&_`Bd(!`CbgbTx(CN z6HWW(-IFl9Fty)`e)!?t7;)?*N`4+-lP`D4AdpR-5YENbH^N+;UZ>$PT;VUTh}vgH zLk$Yt?~o0nwGOR*Qws#d2SxWAQESxrg6W)o#BFom{U6aZ=rAh%38B zuFaZgK$};1OxmTxXOsTmf|VIxkb!GovUv?hJ&~=qvhnWeF*4IW*3OyERgp> z5o6A%&ECmwi)-EfkYr~DkDAtEWOd|V@ul_7RcYFzmXGFt+Yd>~Y))n#x@R9VT9Ln# zX2)S=Dg}Z*sKx569XB5`17>ZK3lSbH!vj2+nZ36|afB$g&1M>RpCSdAcaB}^4(?#B zPkt3H*)UvA?m93fOZHNA8}vIzxxzwiH(#PuIXcC!=)Wj3f%heq|K660e$gXg+Lmhr z&H;6uN;W{#a2)MfOuzFrUpCxuugwJ zfdn;dkjh$(ua_{LY3ev8#&1Qr--1s!wQ~<^5?%Wb>?$q$;Tu8+&+&lT%DQ`S!#80` zQC7&TbIqEH7}dS^7jfJbcHFSV#cbv~M2SLcS-JX^v6+SKL+8jQmrw(Mwqtm!S+*_9 z-w*XY4#5A-Av$UTa5_57#v<@M0AKw-=Fw)p9AYl8!ANetn*vNJd7{5U{mt~@NAn?H z#eN`6%yp|12wwlgErfu3-F%;>DR}ub+o0${{tjyU-kmuN7t~fsEGgEA*x<~?f!SN_ zTfPLwIe1}mtZ?%`UK98)0!nWHy#*L!^*64E-g<`-6M(>t#pq!+&`)EPB!-;|8h9*& z7CYy-*qkdW^#VYF2w;8QRv#pt+l3o8b)P3iXWuIA1s{GZkKHb;l&oPPe@1>_%ZuG# znUIZb9_E^yWsX3@;LkU2J|LfA+()Ch7!GU)G4B80dSKw{Y9E?a2~3S?pBU?+=1FGh z0`8<>Y|3$;^8x$y!X;X<$9_GL9FG5Fg1FFE0;J`F{T)g&#q=TKmY%KU`xQYKU@imn zQci+OAh)jN+}VnIJ*=>|Q3N|x&1!r)54%EOb~(M&KkOQtBhYJ~vyUkmTmIrnFQQKv z%BgfJ^IA?#QQe1IRwY6L!qDNkUz>A(pQ9Qg*r@Gibz)mMNg1=0jp9B>;1buP$>#^J zNiF>IUQWl>!#he*z!9RewHDYkHf znCs1}C4OzI(~d-9lNnh*_I5b+S{OcbaUP20Md)NKX1fl;3{~B>%bi(m>w6?`0H4t3 zl%__@M_%r&e4iZ>9v0h*f0L9|?LA}f4@+wG3)8l6iHcS+x&?!)EkZ$* zV$FvR^hzD3i(<=JSgS&Z8Y4*ab3$n=F*>7dN~5HO?j5b_U{d|7y~U~MC-AbAxjB66 znXKEECpty2Ig9pz>Ean0aEM#hwyLEiMe0R9XpDiS1e9J_8xEb!?(@9GOD{Hyp7Uy} zEy?6vA0;Q%8f_4(tc8L{wNz9T=)q+rid!f)l?WOKTKT2s6B4@Yz>>lz;50olr-)BiCGnRvZB62 zaXj(^o7fF_DF+YcCL!Xb{dTXGSg6{nfTzIKuxHOKVmFIU?M+}1i_k-lfSePkpw;a} zH+)1t5)%}3PZrv{c$BRW!m=T~TETaBaKWmNV+#x~vi+$wmY%L4ihwj<1yw)Ab6VDFa z>-hW6#h(t*##$eKdU~$$xJGK;cWiG@n0YpQ&(@K_D%ks*etu*E|Hs?4dp)~?Y*+VB z`m9aQH&(!W4gLmWgt5J~V7ZO-SlG#DfQo8yl4}%9(_=rWwd7L$aY+Q*TgU>zp3>zL zZ)v8%B2q*&W*R{&wf^pL{@hqarvw9r4J9#qFtRjD*;5*l_$}M6ST*V&Y|{tpBj*1T z5La=Gkq0@PsOvb_3BI<>{H*r&#OjYc;y}n&R$NpxEXUzQa;5(9$}_r6RQadj?Ad6v zq23@|<m}KW<80Ia_9*y@wX(SZ4ifzGVYd~o!hfF)2{F8>Ay2nuCsSpmd)fXejCPi zPhx*Vwd0R8iArEwFee%`&0Oh{(HX^AWl3nizO71AW7%k7;_@Pu{2iOe*K2=l{gH1= zY6YY2CR<+nJ@B#%gANw*H`O0gJgC0|e|C@WyBZXbbV%FZEj$~C(7VVReu2xU*qmfm zz?O05*#GZg-&nDoEdd{lKG?ttKYsT}3QW!<9zdoEPa{w6mo)t5Dg(MpLnPz0x}PdX zB(n=ig3>~yfl!!>l6)7d`jI4|myksdUbt9SUbm@$3|z1%>fEjwFShVU|8$JadL7JA zx&{v6n-_U3Zve@_?_2PmLf|hz1ti-!fp9Drn$S>Jy!F+o@CN#cjH%6t+4!F7?W0^%rob?4?#@5XIYYviJX zt;LH-%_N%poPM?#HpRvDM%qIx;)>3>Yfj{LbolH!nEpIk$wRHi4V~QVX}9W=&cm6- z4_h_kOg=t$jlJCCYudRjA3$z*V4xs!v7;sk>){A;uV~%hOU);O#Tvr2O|erHGm_Dr z3=NTh98tTum$s#OwQn54^%}Wq-QS4l>Hi{=ahu0YOEpi-p;z9A^D6q|b#i?myw7)J za$_!7Z$tprqd(hxNQ&+GkmTXFZ41UMG}3dEU#BQaM{$B__%wKuVQUCAL+@g~U-e6I zyW(TKcE*4$eIcr#qD>IgZ&=+pSMp(8h_=q(=E#r>stI0nE|j$Uh<}pW~w$>Vm8_G{Hbr=#(@o%*P+V=TU+ss)>0*i;WC3X;BrC6 zed&`|MDJA-zN_{X7Dee_Vb8dw*k@v=T{IR+t&9iZ^?iem04Y)bE$0Aax;TKz%}ZpW zje1sRZT|RX65}xuzEZ*bb9RN4itF~p9b!FAF3H`oAFzh7l6V3^*wK=A~$8P z*-l5d*!U7uUNdC?kjunR5XNs432cSoUzS6BiEIqozFO%)(UC9h<3CH!Jlg0gP)prg zljAq>$=71VfyIag693L1H%ZO)UDB?V_};veO5t~pkcEWZ{SNS~P1hk>{>eb)omn50 zCi5t{OyczE7cN>OSi`9Fgimuf!8>0A z{3CM?h6`HY+WoHJBCeSukC4R?L5Zx$lr?@4{`SqA-crEO+5@+;@Q}3zdC)VbUm%}@ zVp{^RYRXBL)8|i#V!=S%X`m)}1=y_(=L9?!c=|ZebZf{_BORemavbcG38U`>5>D=}LN>c*a0NcFEg~6OBGLoB1pK zGs>Cf3K*{7?LmR#-ChyOZvhYf(W3A6nEAVt!D~$ZvHFaSWpQSZZ;dtY>C^H2z;DX} z=j^S(TD>tn_-CPpAcRKzs@+5dX1lwXtjbXU(T9Z7cMv%*-@LD55&~FXOK=g!>IyWl z#0~dqzvvmZozrp@oBz!HZlaO#SYy2{@u2p7u#OA~Y_CSc(n(COoNJUidqXnPHgum!e4zbt$;C*9b z3Mw@(9X%U*rE?v48_mhT>$`4ypmy_Vh3oPVzwIUjmT4@Yx*a*$kWUj7lvX~1gfv@a zZU#4)NXaxnmCi+6i!q1V?48-z|o4 z0~2k!_-hV-%J^W5r=Val);S&8#-6m#HbZ@HbVRn_3SfCXvGfj67SE~luh(Gd2RB4M ziNpy+%Vztw5^lA*RkTMMTiub#hw{eCQpk~r)xOJm0V&3-i}o(dmCo3TlIw4HQJF^H zdqH5cQqFGVJfh*voBnnb7~FWJlt`^$7(nD=V%3a|m-Sjmaxt7*xfgLE{-@E&X@1xV z%y~CE%8g3UB9$JKVDo0>qapidrykaGbBNS+Gz{7wz8wvH}5O~ z4%xtqZ~%;bD-2S4T)P`X65Do0NQZmy1-HtOk+uQIO#Hf@l3={^&qz~@ZyzPU0@bAn zmQkqmfg7f8p3V~i+q^yj`}+bmK~_T4)*o~Y?zIl|0Mk#Hbg)VYMZ?zNkY<;2C%cz0 zNe%NCZ5D|jmo!cRf@o=&tIv2a3(lK(C~9fL+AfkrJmV0^X@G!76-ZulNo4!T_t$F$ z&)+F6Qp;N6NXPFVBex_k_|XbbR%WX$xWI^RG= z2j!}cFZy9UIW@rxTm~;N!JSh#V5C$(6Tb9ZJNR>+yyEU&7{13}_nLaoG9+!jkwDsTtJ#mMe9D1=fhb49Sj-~9k$0PpA5^gTh$N*=L#2E6AnWaN;BL#XYvdz#J&BCX3~wLw zQcH5wBegYyUnB|y%3Ca)tw>GZuK9CUYo1>xKyjpI!TO?;4$E>;<_+MN1O;ojfDIy3 zXCE@fuRT5I3Y9Jp%hANUn}MJrUQCx23rfJBX^Ugq@YFFG%Kf5eRg|LKA=yYCZMbLl z$Gu5(d_`Sx6>C$O><@Pq3}-$weC^!}KO1=3rLFLlrZUHk!w?wXte9?B66%vD`mM28cvpazgNaxv9ld9?GX z<}kpZS}+6V#kuU3si(O@>4Q5EVXRWGm|NR(_C%8;Pt?zbx+Ezz&MTuZcyeHJwn{v$ zsMPSiteSsJK|}7N(8jj4YhfwUeu|}@a9OXKg!b7nT~n|9(NO^03|wIuaD^ZJ{Y<|M zEo~a}AYOm#`SdJr!%uL-EX%G3v(jCHPqdLr)X)s=!JzgKod}c>s0>t;=a=z;*c-e$ z1vR^av7F1H)j-q>dt?ph)%X8iB-Ge*4xks;a}wFEwwGBou$YqAptduY;px!1+lY8+ zT`}e13_as#VyvE5Tr{Abb^$1H<$?qG^86jvyS-)(36dG{Xbhi7DewswUEL9QjH;b* zdm^biF6H`@-<}pGSAoaGS-By&yJuxBV&bLEsqXEh!RbDW6R53b!sdESt?`LJi|!Q6 zpmu&+2_#l-n)d8kToDa;-qLO3uf4QstEeK*Y*`6Ii7?_(4Ot2gbBQi0G#YBDp5do{ z&R^aPvY31<1n8BWSMs!0Q0f8e&-U>c46d;+L{fXoAy5Nu8ZkxB0z3u0?d+MzSZQiE zB^N#E-Zp7(c|k_8{;YSlneO~{RNEP++Byz;<}AVh(%;eD0mS&*&8z(0ei{CWuw~kVcMZ(}g0wIQw=EXeryj@!wqh!J^64sNQ z);vG?Df0eulgk8PnBFMi0QBoZ9&pS7h0&^QHA}bVACAFIb7L~2hzrRgPqXy1rCj87 zkdu9(Ft}8(>ji^LI+2|L#NTE#=G~r)#(3nU?eK)FZ!SFGDFuDvvDlVMK~+NO%iRoC z^h8^G1yy>Lz76Wpi9f3>Z;Pr}IebvX;Xl1C#uK3!3D92^Z4|~%a^6+`99;FQGXdHb z_KKhnJ?A}FKR_hq;PUu_imQ=t2)ewI1!qx0I)hSrQIg8LDk*NOB0_A0BUnMjIM1Lc zi4#t-8pXY=&E*R)7@Lw^lyADEDTgm5EA%&-3nhi48RuP+4Pyk>-Vm8qQuRUau6Yg3 zPF+p(X=%tA6beeS36C*InevuQQzS^~)UN(G9^%f7TXlSKoR&vEcPA4pybg2n=d-dSGVOJ>k1)z#k&gNi3{xSX&PiW+pq;OJu3* z8ku$5><)_)5jY#K)L!|if_cGB3P*_EUWzUgnFm;?mQqWG!(;2-12``)<-I*4vO>}G zI7bW3c^V-yhBH=XIAyNhwjhy4HysUeCTnyf>Iuhft-)O{HpRKm=5oVYR#)GM`Q2*P z5qUC6QIWv)8r|vNL7P%u3ME#+ufR6l+uemFLv)iJqczzqxFIn2dk!dS`Xw_A%Z7}w zM90q#{h&4Ptt1ui{;N?+k`3LMdM5}^QgqvXoaZqVDOAwSEtErvjJ0i}mg_~eb0pEE zL9>D^@3)E=O;IRvl-QncE>BM-ZB|hNm{y5 z1xl@)^J2QL^A7EXLca`oI@E8~OX@?)mYq~POJ{;6i|q4d!nk1`^D1T1i(La1JRws|f`~rF;eg1^zpq z2Q^i7=zh*>{777YM`8l5ze!ptrIEI3UNKYangD)Rv$`$y*f|p_!k(~C182`}YAxV( zw6uxhzEcEI0-SCu9s_K8jDlMoVP|GKTGIyJ_wfoFLF+I7AHWTpeJrosswwp2+T!#N zhVcqw5pJnTeU!QTeDqA48KGAtvB{~j(b-Rl9LaGzH;cTiK6(|$JEXt6fR^f1S2i#5ohR6Co3QlwoFEkX&Ai~{9Ny3u7!gwjB=n>8aSnO=L%@*A5~ z>ht9r9y?P(@yxCGz2ODlz$@jsmIJ<9mIZ5pd?hK3JwR{}2zh}fuU`FL;ErH}z-IOE zym+s#SoMGme@qOrpr9HTIiHw9TZRq#=X3;ib_66@O%^BOFbSB?N?{Zt$!C{;x={(E zXWkmCzDE1xo60ka^Gz-ByAu0C-EEObSc~g0(^FN$1kMqaE&u2*8$H)?3ybgJ{5g^* zR<#pvZ!y=T|K_|U*DZvSW@e5_TMXIggq&ttx>!=1Uqbsge{Q}0DsY8F0&VUi+2N7V z&KnA}^c>3Li|RkjDpWZgORQRO-}1aZz&j94;3$%Hwi<%nB1H=sL^g)W>gElT%JtqT z>HY)&wZ)M|v{tl70)gX0c6+WgTAj3m?AAd{tAs3aycgV*_jV;;?+)+?tWTnOjA?E+ z1y0Y~b?rJPJwQ;%WX|Pn`(%%pL9f)XK3sptOd(o*l~`@DH?^Bvk>-?GEmO6(v)3IU zHa)`VDMVLW68(m|(PoS&;?)f6kqx!ZfF!JJO1tx33tibVcyN8DF>|z`v?K6bjzgw8 zbBOZMzdMvZ)!jNJJ=|?RkA7cKP_z&+L!dBf>m^Ak6dfDT%n$auOW4d9$j85_51M=GF?6D|s{GB_D)&Ik=pemZLP452LZMZcNnHQBGbeKYR`4_$sBdP$G?gYisle<*URK4odU*YB_r zrM@CdZ(g@TS$9vFL_0s-4JTI9y}ZW;{kj8)8-a?H?W_Fb$(Jn?J=$L=sG-(tsa`Hx zDl4TC2cjm&D~UniDzCGMX`glS$#X+0#VydUF2cdO*`3+ zQ6NM;S0}pHK;YgL%*jNus$#IaN&U_&PD6FczA_6fFuC3lfQlc<%*Opp+0CP%T^rQq ziONAjeNlspPu*95&pBPtg$tFdzwrhXdJ4`s#;7f-7mOQSEhC)IsV}V#lIzJfppZ9x z_zyh{0%g!Ii9@O=w)c)M`p1MUwHKe1g#Gt67aj{M``re{1Zvi)5#xf?g%~D3|-yf z_^=iHd?u9C>=i?gSVqxl5~*R+t>da_9-tRUu(8A4upXv;4)@X?VXf%4Uv_3{H8`5S zW5o`3s+M7O@Oe2#2TDX(BH&JcYHBERB49ZqOH(RK2p7S1V(wj@JcuW7xGuvzA8yd|J4I+N&K1{$rPM0Jq& zpvQrN&7&!yU)BnD(k~^8JwI_fEHcu{B3NIF*K+srE83mgUS|w5cG~ZBa?~%`5UCLI zRo=0rtmIiCtIjndwaG;+u|8@(VG?*1RL0a<_*g*dEZY36L8&mxPzL>HR8H4?_Zzn@+4QTb$kNqhPo9GJI>y zh9Rb*x3=_-2 zd52oQPNG5tt{}OUXuqna6OdG$+U~g3GykR*x3)@Ap+;jUR2`M>#c>i(Ls%pZBjXSh zPJHEuvIZ7bHH1cUkW|NXOqPeY_|&@gmJ?@6{rO~<%m)iQsjtHD7ao?KVk`OE41j=q zm${3$qI)<&NJ2R-f}`90<6)tC0WGxxld%eap3PS|vKRkwl$Aw)n*~`n6 zH=i7iC&G1IoCr1eH!tnh z=ODL+ZN2*6UEP!hk)Y=0@%Iy;AfeCR|4tuc(wRnF3eA{n=KVXJru# z1FB-aWsSDLyN_TPFH-{*=+{DDNHGKZ0Oilce;%UI3+m48^)Q#+H>xCqg@QJ-0C}eT zpX8ZLvxlt4=|0f=tA-Sa$9_rYKGMW?)fW6&v}6sWV3B;W!l|_*iuvzhIb{o1v)Q|$*igLyDJe{tSV>mnck9#2tbi))uMS@plI}Xg*-X81lQV*K%Q`1 z50$KL%|Dd<`OL}32P$gdl7pIMc~-+i-@5>sqZy6PChbAZOjn~Q?Pxzm&pGX?yy8nr z0=hAy}R!-_2%^$PVPwVFc;6VzNL)Vh8^zW-zEjxgMorW z)mZQFNzl;-y)|fzbXuQ{PPA|H-I~JCM*Sa15-;YaY%9fxTfY=b8_<2 zW_*qXVmn88sP6OX_}G{V6b$s@RPYiN*eI?lXF>0{n58L$Z?~w=nDf9Q4bKknK(7(03H9Qb$gO>GE$J$tmROIiCrAP5M$2ueSQ3l?H0J4FJ zax#1q)vUAkf}qSVI$dRWOdx1MEYmMT*L3eW@mg5wwDhv?!q7qv=>NgBs|BHn%Tp!b z+TP3XYRSz?t8G2bcBRdG^?Yjn<+%q4m@QD&Mf`V|cdTvtzoGHH^m^8i`p?$VfhgSR zq3R|U(W^O#_b-Z)npm)@WP@*+LS^v9-M=A1h6|)9*k2#A1d@WEB@5XK*(cS+xo)w& z^#>LmaFzbIlr3P!0oAE_*^BKF((3;-nd-j)PW^Y;TxGv0#;F0~6hPOi(q!23Qdns2 z1L7AD9-I}OcyZC^Nn=O}0Ou|kS!bDpQzIVmnkupUnHKQw;*lajwiB$L)R(Ue1AS?V zX?qE)>9RsA>CbnV22x?*BB=-!_l#{vD%}1t9UA*`TE5Mz-0scny&H8>9{TR> zDNwSyx9j~1T77;=b=|PiFUn(LDuXb~1-3eiiBM;kLuTQwAnkRaIGaEFl+~o)4q9Dp zS_#7?vtLu+aIXBwYpHH~qe_od&h&530W6V>GeVpq?GV@#lNG~nb%Jf++t>_W8@Cj*Vl=nUPo6$Ovr*521O zP~K7gdk|R73nMbX4pmQPqWe2v!g_9>7l=i6kt-9R<}+`uI-WyL80N+fc5G;-1t!jK zUjw(WoK*rPN?95b_m~WUw2_M2J{lP`3fomVkDrP2$xPTzN8!ZGFp??me#XUdlmq{(0r6l zt86sUI+i56R_iy>Yk^8;p~vb2s%sZ=27EGWUplx4zGx{=J;{(Tg=EZPH_wryBnzr@ z9BaFzX;L{eIyQReE%V*Bc15M#w$10snZ2&@dBbyng;QDkxV1fjFqs+0c(JqnXtFrR zPY9c;x%JFc<4~Ve5K>78P=;Yh@(*w2!7YMsw_N<-vNgX$iPX!i*H>h6y9s~kTnaXH zYkdcAU;Hq~^;!%Gtt^njt$^l9Bin>Va;rEbuPx@>bZ|vU1p`7`4H5?g)Pq$LD(3x& zl(3F!486R;BQV!~xMzPx*G1gsa6Y3P5wi8{_P5}rKJqH=Dom@nX(e9NRb;wE&~PJ3 zCAnF@YLwzYq<+{)b7_{BE623#{^Q<dkh3K>x6Mx%S+m9qK~1??F$qw87_7HZ6^r9HWNZ>}w#RvHErb22^vw#0PdfOT}f z)0|S~NP{0aHQ2QSkwMv8H2aFe=?3gRjhJL>0guvrzC+Ol)K+ac1Vdm?<%##B!s}~A zw#Bel1`M*im^E!F-hMLqD|2F4+x_uC4v!-Iw$J}O(N{)n92KaM8u^^v{X}Nju+i3c zreo$^mTR?C;KCBIvCQ$K%02~@43bIB*Zw9Y=QT5K;8=`kvNgX zml?>XvK1b{(TofTWAvf{pXLvlkq=`1Qf^oYI0H9V67amx31D z-xSF69#`K4>{-x>;}Tq4^WhX;Q(4<$`KQVCUx7kMv2XUYWK2+wQAerFvXn?g(Z_Y? zgq|&HG-+%vuVWU&8KN_DF$3}ns_~oViM}lxwM3R zmaR7mE?cM_bDLV&g=;tt9ktPmHoharEAQez!|CPh5)83A^(Zav~SLW__ z6Yp9Lxkf(&K0ml0so~#gx%-~PB?#WPM_Lw^*)t4Oo()TwpUqWouRo6ZNxbH3>J)&f zf_Tpe^ofbaJAQW*cR@oI6~$fPr4={qbsvXD=kg>5-0|J&G}L`0YXW-s$${Y>`8`#;BpO9 zSWi=J^G0ORj|r7l4#oG*%qD(C@B*{6_iWaSr}e8Lzt!F3yR{}u0(tktxxIS4JI|T| zf}>UBUxxRE!DBvC`yvrrQ*_YC%j__>vp6BAb@9cn?N?N0?;5BXnG+_}zY#fu)VU=3 zh1PuV*uHSXa8$n!gp)qq3{UW}jlWdv`!9zu3?C=kS)|k{`W#@-*ZMUme%A1)e9<5k zmm>8>NomQiEdU6(uW$fi)YMk)A-Ata(Sw(EM+qo<$i2vu`0DfjA<{NbQoLNt*kdUv zesrao(7`QHxql<70~Xh=HG+#lO-BzuS_B|z5MkW{s!Jx^th}Z8fLU)Dc$v?HIIhR` z@zy?=C)TnyAwv1kqqTixN z{lQB4pjd#K#;J0;@>4Ao{IZ>@<@S>jt6cz)_L5!bYXxpnO=sM&{rq@^ppc}GUJcG7 zaA9YTKiA59xpS%J^T~Z&G2q@K8e5MfQo-)(Dk#-9RWQo-SdRBM5i49r0X@$lBY&@v z@gN}yC$EfQ(4Ee=uOWk7gHs~8@!k;^SNy)J&ObDwscu_HH02%gs{$elK?eS0}oQ@VE)Co7DB_qYrhu> ziEh?N2*#&pXE{Xk1K;UUwYCBTVmwTU{ zdzlJry`qm_p$BfFm(I9Qmzd;U~?-Pt&2%0?%}o2JiwU5f8XXA&+ZqZIHv z2|kA2W#uJsEVwOxPTH|{gci6d-Tfqhv@03x>g-Xr%XnE@;@1@)hwx6a^zuSIA0aGjVm{k^;WR^ z?2j;TpP%QXrreLLZoUY6+VqMMG`4Pw3O4w|1KPQnCl@TkKw}UMXro{$?j`Q$er0iR z&@QhO4_Efj;VnD^E`oQe(g*4=kA4H#At1D4bqj8Y1Bp$4A-F-NlV7;T3Yxn9DYBna zbMXOv8T8pR!+}8f7iPOz2NXLjpqg87l~>Ok6ARy?mC_jJytq`2cw~#}t1l^eO813n z&Z}=dUoRtZ*3E5#QO=gyC6m zXfwnqIgSE(08I9NAkHO*&E!^Dw6X{2pbJ5I2XaSu%Xfg%pS4|@=(FPVGY)MUy~C8^ zO-VIxiBUDLVqV6dB@5gaZ0Xk%G##+&!N0kS`D4v@n5NO( zg1L^-g+qXnb=Yh>t+`YqcedC20YYr;qXd}Ii7sGz7hh%ut=%PZ!i?^CvW)H~t*lxs zC-xdYs?&h;)~xrAuX&KNc!9)|;fnT`_7*3i=N-k&)7#8Gi$BPjB|0#@O8j8(U3eKy z+N#xat}l|(P-+aj1IiCqRle9Ov=pF{Wy}sEer%r167lKXsD;dFT7G9k_l|Iq%%$;Z z3R1vi-exXp1I&r(XV$f-04;{U60J=21VA)dogk{dw(*IKVtW-ry%kilfHxj-v(<|S zeCcCpvM4qILCgDu#XAR9tI}x2&K4;x<Sp{5T~1G$pA^0rs%fwZc&-v3E6W=|Dc>y12WH_s_W@c7LGxX{>6El zDfMd%7Uw>Vx>=mM|G2C}^Plj_d5xkh0vls|=?QA5*Qc?QnDX))&A?g;ge}M2WcBElrOpHA_dEBom zZZ&C5Y@`Mj_}>C^e)^^Mv9l2=8Y-W-u|b>xXW*Xs0kbS@Jep)=`Tmb9YAn}4zP`^! zOTgQo-B%PN-~2CrE|Q<=dc5LRZ+T_!7#o}DzP$ioWZCCXtjYTd-Eghc@oj+{8$@Pd zM*-99d*&dMu7H{C)|-}OJ~_2l0eC!a%G5wx_o zO?fwCw->h5o0W_++|*Jx9@`t=X+E`Af_u7x8aw}PoZ0Z?VYl1k6%Ca5px5m6GVo-D z7?x#y&<}w%KEvC$Q!~2NHy6>f9y1sji6AQnl7#Q{G%@EeRI7Fu!9-lxv18VpQd zbpoUG7-N=4FH%3++*LOGBO9BECUSkaGIYV#?e z>vLHLxv_&0aEVdF&}RnBx2AZIw8-e6kd3QNxwy&l-87VB!Cfq4BA(vQ_YJuDHhq6X zvEI)y0u&3oweyjrbTr%-h{ufM{WgDQ}rZ+_DDESZm}cr@L7`4QSskR zESk5^FhxvjF|@YKjhVSafKGKVm&Kp3_?gt>m;#gTP9X^|oZFQCMkfIM?vMy*SZ{IH z6G^pkeun18}r|O_|lNmRHm7>g<3NOl}5170&LF)yWyg+=LR;r0$ znN}3?j#%kr&~r?_*cf9=uMIdT7UCG}39Fxbj4bk`?e?fu59z}s*k4v zB$$+;gws$l)Rn1uG>d1*7Y-?SZpvV6AG=)i32Sp#tl5eOQt(*+yF+Y0Ngj+g03y3) zJ;V!Av=K`^cFkEK^7worQ8({XTRP8>JrD-HSCxBrXuU}qy6075@?A5or&-$GocZfH z;M1P(`?NBk+==lIw&Xq%mA7>{h|$~;B137(9J{}QDU6dnR z&=Oy32IW-T)abQ}kJ5?6Cg*(;&O#MJbL!7!^AA`WR}uV8spUGN#REpC`W07zh|+2L zFMCEsm(MV_%xaaOVBGFCqBJzdg5^ICY=^lM;6_Om8Ge3V-&ZZ>lOQ0|-kv@ul3EK% zp!bycVpgBWjuz$Js**Le>L02CLn?Y9E|j$H%wX!oew!@sx4F9`vjv9x@$0!_qYzB( zm}?Z#XVq=-&L)6}O;^U=ikC)Jw?R1(gFnL|VX+(Vd;)&@$1@FL$}vAT>^V^xg3Vx! z{epm91I$cTN&Dcz12Z`#>4ZsB19(&nIb~T1v?sWvkI>*Hl@TW2jqWnqaoA?*Pb2Y; z7lFw|0?-LCxh^h1;&(4~Nj)SL^M_|O-fmL)+1$HKG4~b$quk7K1YEX?Kv;$jgSs3R zwR*l`MKQP|H+RZZmN~1@CjF_4nF$__!51`dSOy%$pZ*7S(M1&oH?5xfR`23$&a3Lc z?6y}5LA>6=qx{_R{lz&u)2ZG_9tgn7V}-*ql{Vdhw8a{?bC!0Ep4JtK?Vp-OSte&m z5URH$IBW9VZV#f}518wtU+wDme@wp(!<+5Q-=}T=I>|WV#R+55FrOr!1Cz+{_o)r% zgjE&n&`<46cLQl<%uH+!OA1i)Z#(rPmNkeyt-Fu7ESS@d-%z~?KEU~xC42y|(Tk%# zH#X{+MLUsOH1{yH)?%N8S($@Lk{3kRT|Hp$31L(ZKQ>J>Sq0Hz{`SmMc QQP}RlbZ-)_-~07{0gyWXI{*Lx literal 0 HcmV?d00001 diff --git a/docs/assets/images/userguides/geddes/Geddes-web-server-5.png b/docs/assets/images/userguides/geddes/Geddes-web-server-5.png new file mode 100644 index 0000000000000000000000000000000000000000..264da4ece582402cfbdb910af0cea8f1bae6549f GIT binary patch literal 21972 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 literal 0 HcmV?d00001 diff --git a/docs/assets/images/userguides/geddes/Geddes-web-server-6.png b/docs/assets/images/userguides/geddes/Geddes-web-server-6.png new file mode 100644 index 0000000000000000000000000000000000000000..4589c2e9477b1e964171dd7510e05008f723d239 GIT binary patch literal 11597 zcmb_?c|6qL+rCmsl&!3V##)vM+1G3lsVF-mYqn(U%aBBN#=dK@WY0PVQQ3wO%Fdt| z#x7$SjOF(pKA-RQdi|c~`7M9Ui}!ZUeeQGa>)h9MpYVq|cQ0OGy+B4rc2QG9RhNwH z6cqTWpFaoO@#?)?3H&+brh8YJtgPqi0&sE0?#}%?WMmbwRQpfQ0@su;G>qKH$S$>z zey2KIK3bEJ2~KOO-g)e8zLK>T$z$L`2rG!tyFQ%Z|ShX4jRe%Vn!onG5?W*A`;$|)`>mvwvHGXw?KX=)qSG=#bjG%8+{#|HkdHs2 zQ&*D*s`}4p%Hn%^d3Zf99&E2HF&DBhs5S-eI zK6i3Mj<8@y9%lNzJ+>8lTbJppQGm2z7=zyPw#5Oz_fMRiCQ7YDsyrO1p?(2Qi{0Ku z&KHkt$>71v=XHHU>5%a}2@X{Ee$x3ED7uZN&$2d@E{(d**VUHK|GXr$q-yO_dmTzk z4p?KX)?+th+|I2ZIA@O54^PsZ6dqmH0T<;=)Og+$JMh@k|HaO6Vv&=DeF)`9PdfQ# z(+X%f@EPkWniv!Pb&3W=vBIgbz@m;-uXDYDPjh!tH}4Nr?+FW+<8O(&ntLbir&t_{ z$FufY*rVRC(wBqK$l*C`qG}esPf63HX94i9Ghj^+ z>XgPy&O8bb1?Q<(iR@ulU!DOx!wDs$|DQa(rP@OSxol7-2i~^Jw;0WQ&?-LKThnqk z-=d~_J11qv_eqJ2p!H``C%05Nq1<+)hN5*65czTGIkj}*LH znmR)=!WLmKFP~UrZ4YO2El_)IJA3b&XXvD=yqilpTxHINCAET50e}W`I+kq;%#i-BtvMDlM z5W;bd_V0)FVNbM@4(2F{TgnjZx~MSLH#}d#b|*uy33ZU>e~ULaObJWI%?#SA)O>v} zQ@{G0xGW*ypgjGZpX0(sG{13cK*QZ>%xzD#07$p(Bs1qah#YVfutsQ9FDab{=A1ly zUs?MSd)UN+TJEa$@`Nwv_FRAuWK+ajk+0uMMB2t#hslyK1UE^x3=s6h?nrIWLmUD?4>&n;^x|1i1UOsSvv~%=?AQYGj zSUwT7$mEY^U4N_>g**m`B5;AH!_J;1jiso9#@N)7@piO`RStfp&78fqC#7k!nH7!I zPND!w;xgH33@L!`C4})7yxR1|x$4eFS@F3Ot1?{WA@+nqgwSegx(LYjXV(3ZT4{5C zZC?m3y_>112MFXkFLsL$r0{x-9qbl+m7E2(G8y6)6>cvBd7-D#%*K^wYOB?H(}Q59 zK?EWGttgMnP|WbSgo8GG{nhti0F7G2pa*VM^H$EGv_9kB(kmc?DmS~5b2kV(uHr>8 zHCszxZGjN2dI~3sZl71}w#m}N>gTVsxZQ6+J>j?yS{3DzJSc$hTVw%N+^~wqFf4Tz zj>cj;mJ+Go&>>gAai#rt8&FmqexP184uQl?r*GzDp4vq;Ys|-nkJh0mc|?tDN98{S zR&;a?-ZDb1@WLCk*oqocP)48SvtMneh^~U5-@@v~ATeIO<`m5_s=~wz?bhQ@)AG)f zu#p=|R!i~EFh5y1u{m-K>l|VR*DF3&&SV~d$zZA~DqGs@I zvOImt=9c==9qjqaxxS4n4CncSMfPYwcjLt0WS6HZDX~QT2&9#MRU*CV-*)D7mqpYe znh!4<$km!scENSa;Pp-^SYy7KjCtN|y`lL=YtGbdj#M<;NxPpCk0dhXKz!klgTWng z>X*U(oq-z)fHsQDOjcY2FvzrHmced|;r24>K)| zWK%e3y$lLVS?txp27+DZcOxjd+19S2M|YIF4{})UX=Ccr503*QnSYN-+$+;QtcOA1 zde>w_(+7vg^?waE+1`h^ECnpN^?@1389_AUaIPgP1-_dkZ^wtAM8gCW3?f*Ct@lO~ zJd^XTARw|_IOn3u5ybhMVk_72w`ip+n|`^ySMD{?=9KQM!u|0nv->5oTUnV}ox+GL zEAQyLkB!DzU@yVn1fk$tXLA^?kmklHi?;%=xM`Yz3Wj}j&OnVavkh$t(fXtYsUB)z zd}f!XlVlG9{bnb|Axz+@L-^=onpd-sdBCho8*+3xbEEl6d81%#@lLJx@MXl^94o@M z&&KLXK!<$uhO_G%2(w!c8uKBK!Cyz%j^sycn*n35{o#vA`%zbuRD;D|2v~1WWN9ZB z0nQ+b>RWB7P8xD75h_wMV5Bi2ci?pgc*M=ltf^gnghJx^W*&1m&c|z0zx|#DF8G zrUI0|E)n(MGiQ;Egn}JMQ;yl9$jFj~?W6~B&b47!pu}&sCpOdSkK@#WF-1-Sn&l*9 z`hfLo%>^oW)5KWt+!0YqTjXm;sicKi9iAAbL(;P|Mfgh(u<2CaHgm1v-TwBXNp0Ts zoU=btpU6y^;VjQC;fZ4%S$VkMWVp1FoDzM*t^Mw!;of2#?9X1=u*^=TY0qClK6xm> zsU}$ZVuAmul&-Z+w$hW2-L<$a)7#O7XBW{JCaWwI@~q_`sJvC{cctFSL`C6DafKh4 zj{#S&s=9i2%fPH75oNWt>Jv%`$+9YN6#BdDWxzkTlZJmLu`ee$ZebCy~jA`n?St=8b{;^_GkUh9(`Qdh_Ry*7+*USz+E^_Np#_01w2q*Mtf78J3zf{7a_Fnad zU-+kE;vZnQ0|}wWI5rz1ImzInxG#8*=je_2;xN|7RMlwcSE#&fZ|8~t*X ze1fJP>>k*j47@p0j-VU+EOM2*-l#}O7X;^Zh)Ix z+4Z}-?ojU{cY>!RIhfDff%4>_=+4}Uiw06%+A}OZoKWBbPH}RPh|2Llq$cYl`#;aT z|A#qyc93eobzTaZ)*ft0#dDX{6iHX!?e_=N9Zo-Qdv-1;FHib%dKNIP`+o8u=xe-2OlQ_3YG9X;T2`FH2$M?rY77R9T??5AqN zHl?}VpJ@5uGUMi*WBW8hp3kpErrj_g>d(^OFc=(KSkqqal(8!ewq38~5DT7zJzja7 zr;2ZWgEx5}Rx1oJsG$ja;CtYg1+OlN20DcpUi0HlKFn2-lZ#t#BeAsJqY z_?rwhMP9ZYWg0crHb+hzLIyYbEm&IFB9j{Xn+5O|{&aBJDVYK9?poNR5!iwAtqXwZ zC3mp&T-x$_7kMC&L&<}d)M{mfiYjyZg~?2;!&#$935)@K_fXpFi%BS-@rW=~mes@0 z(tLq|Vg8ALON?Ss;STv-OVyj-^4|DPrA9qTOAi`8J*+I*AyT#Ru##SQO#+_bDy1b6 z!44{L_L%et>=8fp0m#35_f&;{pfBIGL=;6LW>oD4J#Dq(t3BrI=!=uqy2PMQ)?&+J zQASSjc1{Z{I=Y*+u;Ev7G9&3+WeMPIV)fu=$QUA&Ur5k zGk|v1@itTHB-vMmqBL-Son1Kmeq3Jal6A@AzT%lJ+lG7TlUiR#bAJ6?0WwCx*!i>o zFL*!mL0;NOBvs-?pt~T|OJNW3^@65e6g)uoO9A3Y^rb|d4v(ez_XJWY?&p6HioZxC zDZBiCerU0SVImr2GZ~aM@?Yw`|6>RTmumDJ?eVEQPG04z4D$Lk9O4g%`JXZ~Ihy#( zOf$k}{fk3jD}UglwH4rUT-#yyKCcn1qeHbIzVot!%ce|uj8MRMrMKfIQqOs$7v|q>gQuL*tfQ<)ghVZ6^s9{=S|P7 z`gS^D2>$6Grf7D>VmmFB)pemQDR-DunT28?QuFhlO>wtajxq!y+9l(dpw^{&Sn@I% zEDLHEB{_Yko}>#L_8eptXDFN)hMR4m+b$sJ{hR_1qg%B2p+w84I1aW3A-9+-*|AC9 zFsBJywqfjb5=Ca@QZNvFhk5eexwIs8N2b;>{o)%U!e1+ldmixy#Rjnq;J6R-wK6#H zx=I*19>vGo;k-9T&)r$VSED98FM_GAG?(R|YNAr;e8ycH>+==vBjvqhxtgg(-;mh2 zMwENvGu9W@rbVa^xJRL=CyncE?G+bK2rFv}-D8lhfDSevvs94Fg5;1@nNm-q;l@*m zNPBa7^4djv__;MVaurZj_$_H@>u`Bc+A>Jzn}|2`M?RB{8RPS1*XnazUiFYkWA79J zdrex1;|uN^%LL6=MPO3+wLS&57_#Le8&O<1rx`*;E^0;V0%$FY4w-1fzx+MSH2jan zb)BM0u?nvx!*0V2W}9$1dGolOW&3!cSa5O7t5rI zWTI!O-<}V0ffzv47$1<5jWFHfhyvr^kGvw`SEs8rBa#xnWaXI_L`(!hKS|@;yI))j zYO@??S;sOWBjnZZyVn|b4p^kAC{Dt4W%(#cc#HtNOPCIqXza}59+vPl!&Q5!u9+1e{cq^w)H@Pa=KQ;bhFgEWa8{B%20b61DhK_g3pWi# zZzK;>$a)i7Ee>8+mf15P zv!8Cvu+~Sxl;HifvbC3n$#1^`xHJru@(g)3e49sW2xiBeP|LjhhD&~%NViOU6-`dV&Pb+{%% zj`uNgjgrANr(&FGq6>uRNOry@03pd*j*QZD_cW+Vl4BZjoxsX=6nQ207~@=c4iRTG{I3A}$$yJ`%%Fdz+&vuk$d&qVuM{{or5ET)suxm) z24~PrXsYuesH|_d^tN{LDUyE)QefKLecP+al%@gzE9zRh{SOsZzn7g(PcG*Nn-d<*UhB-}Y+V{EKx{z+R$Gp_EpYuy1LATP&z+ zVOKX#0Ti7aNe&NI06w$k^x}l}Q2-WEV}XYE$N(%1!UUo2Z~(%9Xq+sq^gKDx-#LJ< z{}+u_F~S2s(GJhLdR}@kvvsLpI@HN;Cd)8Ob<2a>{D@Q6&If0hHM}Ls(XsSKHD*n{ ze5Pw-s|>vvcX;iOm57Z^-buGcZ%{ZF_VBD=t{cCEp~hxd?r%$YZ&?Z|k=Owm$}Gon zrt_cOufi3RXQsMG8cx1pF~{n6$F?m|nAvs;L^KvX*c78(F$hgOHGRAXE z(%+?4mgA4Q`?M%STdW>@**j~oRF2-0fV+vbbK9daRzuF!VGky(WGsikVGdJ^{uoyo zVp<-1q`agZwQ7IeAo_-r!EmRGOpi#YN%FfxJr-?j6=lQu``}owV|y-3qa_gB&?nN8%g_PjPl_j=x(xB7ialzw(~^HmMy4Rve*bRS=z+fF5McNM@t zUbyeiLLRjjqy4?v)m$)r{)PIgN05@m9qmR>>e^`fDy};c?2A*Q2Gh}emyxl4Iyc}Q zi&+~^_3ejJVvkZ$JZ>-%-Ktss`yfbVFVq(M)*Wi60T+0OI#elfLRJfv2=cBl!UZU0 zJ49|3hQu!caw+G8TUewiqOfDY4Ex)gd!JPaTju_R&GVg^W(G@R;Z)Yu4z=gWPtxtG zZ5O^-wp*(y{I>ejUOe`g=nJOu5cZg0m!0~9nQ*yShT8Jk^XRGh4Lgh0U_FdJg9Tg} z(8fM87_OQAYdWgtsSQkZlHZ%aTpZ?K$l`NLc(Hs^CtOZHmc{4ET-n)TU!Up0D8ujy z#u`X@9;=D*I^?`*-Ck-87N zn$|=uIq7Ow{WP!y^B!ABG`)}As=fArQ`=22WDyWNvRXngwlk7eIM`Vz&iOG%z=RDw zlCL4+9FU&3F3N^sEQyqPhW%=(gZHiDZd>8n(ckt=fkf8DX;Mll0QzRtWI5<8=Q)_U z?r0P$Da!wb*wa#e{JlgYJFIxdW$CSn+rqb~k0Ir+YDpS7=0C3Pio!#YjsmK_&U)Ft6Wq9l0tp`Qz;D9W6B z&+rg&>C^ECy-}t@33bYwDR*z)e8>8z2r5hdAlzFTPBFy}bjcnC&(b>hh7X~sJxdy| ziSeUx{~@*vxa6-$-zqWuxdC*9(C*99Qvl&(J^IuSi3ro&QqJVJHxC=lER|1q_C3It zcdA;Qo!tQ8!i1c9!@8szDKAGeiYsK#Fhdw@dW!_Pl4_yRpp=okhA+*JLjF8gxI;Y3M(j@kBB#^P!kSZO-N0?(Wt>DbaNA;$KPRc(ZmPTlF+ zm!G)Kc5Tp^Uw(tjzaMj4s$8pS32jcaUMydpl01u^1E?o25h+1u6q>_I5M6*m)LD<) z?N?(~$CiDJqISDL4Jz-SZHl^0iWT32$XoA0!)YrC-D2Onuj6IRR?!+HF80=|{`?0u zEba}ssQw`Bh9M8FPnIyjCii4$X0LyMpeDF5OyXeUP0MTq_*8V}U@tU$ziFg=PaG!O zJ_jOy89-eSZm3Wbi|zyjl4B=b+eF z-4|~&tA=-~&s)dUu)n1yHfA3m?9SBAn5xZ@{0LOSYuvA0{~l|QsBDTI^bAtMj^9~x zr&CA&yzoF1P%njU)rV#F=8yMuXu4xODcfmf^-bzADR5h6xIkx_3^`$4RpB%zeuXp{ zR@%S^@_!CfGT?57i2S8GBB~J$W3fM%4$rVjVx;6xd&G7&LE$^57%Kc6f_0DbRgCXh z-PEqBAVRO#cT`=COe>5<%z(Mv8j***v_o2%6&#VDuc(!cbsl7itRHqG;`dTn>(xCW zJXSX)I~)}hH68XR*V{LB%|a#@Kv6Lu7shnHp8P{m;GjY)`BTp;NQ24W-Zu+f(XAbW z@uaC?af)ud&s-m)_4uCgJ;TVTBmvivm1y>O=usIcMUhq0mf+0*(R)#K{W z)g9}DB9Ps9tvN?aGy7`o1fndZIt${k|HF4p?Ni>S4%1WjE66CbpXYOLpubJ+Ti6V0 z`-;PtSUh$p;Ln@4)|Z+rXG(}O9o4vzT^d8{Jn`wATSCVzf~vNzF0tRmKTZ0C#+E4=vB>Nm7VlQ}a1&ysel+nKTZ#=T0 zh4;=aBY3C}sWGLB@gT(n-CLqnvk4&>bAa^-9_@(y7=_}5qXXiWcdBbz03spj;CHNj6*lhE zCs5eV+HkJ5aO^iB?~Gp|y-E@^7?4NB9udiqwv9)DadzVw5I?pSj)$*SNJncvfxKF; z9fqVxSc1F)-mtwC|7$yJ4Im&--NlkQ(UOviE69fZ>BB7-1MKS5G&LblVQb2Gd0SHI z)chrq)DeN%-+G~!zlgL*!a5ou!sSK`h8}4A`WmI^e~PRxVrnimCrLlvT z+d{7o_Lg{uU=wAu#NjzqHJfU&#ai#&F9*8=z_ z19sA+cCmIAEq{M13R(LZ5ppo2)0nx|&yNp<3Dq>OQPY9Et=pHH;yiY?Hb3dCga` zB%J3buUE7}x2x)Wl)%5Y$FTTjpjraI$Eo(j9n3`Ie}C&1NI^01st}>` zT3DkKu<^FH9udQLb^~`1(+gfr4CRu4H^McuF%z;gn^G15*^dmo8L)S-c6a*acSe%m)r{(g*!b9QNDC{Fm;6w|uIvEvbbV4TYCdCdg1|NTQAVdb>yr7!7!)b=;G zj;?1Pj7CS~1g=a8NSg%gJ~({GwOIC0aeDKek15{z8pxnhRx19q0%O0%XDZbmU_YKm z)vIPkyX^B_57T6H<`A)i zJM5+A(Urc`_Pc`5`r!1Ztznx3T~L8lhQj&Do`}rY7TE9kCMyqGALg*D{2J{h;AzwS z;9}+dwm^pI1-%XCEvj%3Z=7k|Rmb&^$|oSKmauwVZFIaqLi6(}1MK6Dn0K~YTeVlb zYs!uKhsW!u_O5P5w$+A^3d2h4k%8NOuJ%b^1~rT*_h-NtTyIOp>Jk95|34|s&$s58 z-m{;HZK_Ocy`d6e+MB)QG~Ct`YK6D45wQmgLCqks?=nzqy|L9;~ccLzW< zaVV8NTnfDxpdNGY{a4nyE0w#!I=uG=o61ozmf{K@kV{GI7SXW#d(*MEOfTqyUqSYl z0@<(B`Cj+Ofxpkh^Ra0qp>n^hkgFi*N^j)vp=i2_g>%y@}TPIu&Ai_8oin}=UZxEjjN-o zj`lemg8~RzG<}Il3BzFT6C;Sc|n-@7rNHdB} z=7aNl_b}WEbLDd|=`?m+gFdvxZy9qZ5QuT`KVtk?h<`D=YaNjJ#4}6e=S0T1sP9)n zFn*MKTQ?$e?dLt&`!w#U-HN&ZlR%L%UAFxzphZrxE@O zjl1GWb^ILNu2X>RYl9iIs#fYC$EW5qA8eaSbRzuo7pu98@e8jsW6_B-kv}eEgq;_! zaDV@&{cfLYaSB{g2bY(083{8QI2aD%LMLLiP^e2nY4F|&0>_k&|WvfB#XK2 zu|g&|NX)TM+dqoF07ypiy#0TZzXhaza=1XZ;59LQT7WD6eK_&oH3t%T`llcvtGpjL ZekJX&gGDA7I08+ksivb^rfl)*e*qX@a-jeK literal 0 HcmV?d00001 diff --git a/docs/assets/images/userguides/geddes/Geddes-web-server-6b.png b/docs/assets/images/userguides/geddes/Geddes-web-server-6b.png new file mode 100644 index 0000000000000000000000000000000000000000..62fc4bb96902294c151569b04bb86d4379433044 GIT binary patch literal 2836 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 PkxWZNPrXp>)}#LcfrglF literal 0 HcmV?d00001 diff --git a/docs/assets/images/userguides/geddes/Geddes-web-server-8.png b/docs/assets/images/userguides/geddes/Geddes-web-server-8.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd6006dffa41543f383546767df87f83502e51d GIT binary patch literal 31881 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 z cE_=5|Kf?1F3Cw67_S> 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 Qx0{{m>mamCG;M?b2YwaG?*IS* literal 0 HcmV?d00001 diff --git a/docs/userguides/geddes/access/index.md b/docs/userguides/geddes/access/index.md index 2033b1c2..1b6f43c1 100644 --- a/docs/userguides/geddes/access/index.md +++ b/docs/userguides/geddes/access/index.md @@ -10,8 +10,7 @@ search: # Access -Access to the Geddes Composable Platform is handled via the RCAC web portal. When access is purchased, a Rancher project with your research group's name will be created and managers will be able to click to give users access, similar to how access is managed for community clusters. Geddes can be reached via the Rancher UI in a web browser or from the command line with `kubectl`. +Access to the Geddes Composable Platform is handled via the RCAC web portal. When access is purchased, a Rancher project with your research group's name will be created and managers will be able to click to give users access, similar to how access is managed for community clusters. Links to access Geddes via the Rancher UI and the command line (`kubectl`) are below. -- [**Rancher UI**](rancher.md) -- [**Kubectl**](kubectl.md) -- [**Refreshing Your Kubectl Token**](tokens.md) +- [**Rancher**](rancher.md) +- [**Kubectl**](kubectl.md) \ No newline at end of file diff --git a/docs/userguides/geddes/access/kubectl.md b/docs/userguides/geddes/access/kubectl.md index e6b1ead2..39a49e9b 100644 --- a/docs/userguides/geddes/access/kubectl.md +++ b/docs/userguides/geddes/access/kubectl.md @@ -12,16 +12,12 @@ search: ## Configuring local kubectl access with a Kubeconfig file -**kubectl** can be installed and run on your local machine -to perform various actions against the Kubernetes cluster using the API server. +**kubectl** can be installed and run on your local machine to perform various actions against the Kubernetes cluster using the API server. -These tools authenticate to Kubernetes using information stored in a -[**kubeconfig**](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file. +These tools authenticate to Kubernetes using information stored in a [**kubeconfig**](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file. !!! note - A file that is used to configure access to a cluster is sometimes - called a *kubeconfig* file. This is a generic way of referring to configuration - files. It does not mean that there is a file named **kubeconfig**. + A file that is used to configure access to a cluster is sometimes called a *kubeconfig* file. This is a generic way of referring to configuration files. It does not mean that there is a file named **kubeconfig**. To begin accessing Geddes via **kubectl** you must first gather your rancher generated **Kubeconfig** file and set up your local `.kube` directory. @@ -36,7 +32,4 @@ To see more options of kubectl, review the [Kubernetes' kubectl cheatsheet](http ## Accessing kubectl in the Rancher web UI -You can launch a kubectl command window from within the Rancher UI by selecting -the **Kubectl Shell** button at the top right or using the hotkey (`` CTRL + ` ``). -This will deploy a container in the cluster with kubectl installed and give you -an interactive window to use the command from. +You can launch a kubectl command window from within the Rancher UI by selecting the **Kubectl Shell** button at the top right or using the hotkey (`` CTRL + ` ``). This will deploy a container in the cluster with kubectl installed and give you an interactive window to use the command from. diff --git a/docs/userguides/geddes/access/rancher.md b/docs/userguides/geddes/access/rancher.md index 5319c02f..b8491b39 100644 --- a/docs/userguides/geddes/access/rancher.md +++ b/docs/userguides/geddes/access/rancher.md @@ -12,6 +12,6 @@ search: ## Logging in to Rancher -To access the Geddes user interface, you must be on a Purdue campus network or connected through [VPN](https://www.itap.purdue.edu/connections/vpn/). +To access the Geddes user interface, you must be on a Purdue campus network or connected through [VPN](https://it.purdue.edu/services/vpn.php). Once connected to a Purdue network, the Geddes Rancher interface can be accessed via a web browser at [geddes.rcac.purdue.edu](https://geddes.rcac.purdue.edu). Log in by choosing "log in with shibboleth" and using Purdue Login at the login screen. diff --git a/docs/userguides/geddes/examples/database.md b/docs/userguides/geddes/examples/database.md index 413e8769..1d6aeaba 100644 --- a/docs/userguides/geddes/examples/database.md +++ b/docs/userguides/geddes/examples/database.md @@ -8,7 +8,7 @@ search: boost: 2 --- -# Deploy a Database +# Database ## Deploy a postgis Database @@ -17,29 +17,29 @@ search: 3. Click **Create** at the top right 4. Select the appropriate **Deployment Type** for your use case, here we will select and use **Deployment** 5. Fill out the form - * Select **Namespace** - * Give an arbitrary **Name** - * Set **Container Image** to the postgis Docker image: `geddes-registry.rcac.purdue.edu/docker-hub-cache/postgis/postgis:latest` - * Set the postgres user password - + Select the **Add Variable** button under the **Environment Variables** section - + Fill in the fields **Variable Name** and **Value** so that we have a variable `POSTGRES_PASSWORD = ` - * Create a persistent volume for your database - + Select the **Storage** tab from within the current form on the left hand side - + Select **Add Volume** and choose **Create Persistent Volume Claim** - + Give an arbitrary **Name** - + Select **Single-Node Read/Write** - + Select an appropriate **Storage Class** from the dropdown and give **Capacity** in GiB **e.g** 5 - + Provide the default postgres data directory as a **Mount Point** for the persistent volume `/var/lib/postgresql/data` - + Set **Sub Path** to `data` - * Set resource CPU limitations - + Select **Resources** tab on the left within the current form - + Under the **CPU Reservation** box fill in `2000`. This ensures that Kubernetes will only schedule your workload to nodes that have that resource amount available, guaranteeing your application has 2 CPU cores to utilize - + Under the **CPU Limit** box also fill in `2000`. This ensures that your workload cannot exceed or utilize more than 2 CPU cores. This helps resource quota management on the project level. - * Setup Pod Label - + Select **Labels & Annotations** on the left side of the current form - + Select **Add Label** under the **Pod Labels** section - + Give an arbitrary unique key and value you can remember later when creating Services and other resources **e.g** **Key:** `my-db` **Value:** `postgis` - * Select **Create** to launch the postgis database + * Select **Namespace** + * Give an arbitrary **Name** + * Set **Container Image** to the postgis Docker image: `geddes-registry.rcac.purdue.edu/docker-hub-cache/postgis/postgis:latest` + * Set the postgres user password + + Select the **Add Variable** button under the **Environment Variables** section + + Fill in the fields **Variable Name** and **Value** so that we have a variable `POSTGRES_PASSWORD = ` + * Create a persistent volume for your database + + Select the **Storage** tab from within the current form on the left hand side + + Select **Add Volume** and choose **Create Persistent Volume Claim** + + Give an arbitrary **Name** + + Select **Single-Node Read/Write** + + Select an appropriate **Storage Class** from the dropdown and give **Capacity** in GiB **e.g** 5 + + Provide the default postgres data directory as a **Mount Point** for the persistent volume `/var/lib/postgresql/data` + + Set **Sub Path** to `data` + * Set resource CPU limitations + + Select **Resources** tab on the left within the current form + + Under the **CPU Reservation** box fill in `2000`. This ensures that Kubernetes will only schedule your workload to nodes that have that resource amount available, guaranteeing your application has 2 CPU cores to utilize + + Under the **CPU Limit** box also fill in `2000`. This ensures that your workload cannot exceed or utilize more than 2 CPU cores. This helps resource quota management on the project level. + * Setup Pod Label + + Select **Labels & Annotations** on the left side of the current form + + Select **Add Label** under the **Pod Labels** section + + Give an arbitrary unique key and value you can remember later when creating Services and other resources **e.g** **Key:** `my-db` **Value:** `postgis` + * Select **Create** to launch the postgis database Wait a couple minutes while your persistent volume is created and the postgis container is deployed. The "does not have minimum availability" message is expected. But, waiting more than 5 minutes for your workload to deploy typically indicates a problem. You can check for errors by clicking your workload name (i.e. "mydb"), then the lower button on the right side of your deployed pod and selecting **View Logs**. If all goes well, you will see an Active status for your deployment. @@ -51,16 +51,16 @@ Use a **LoadBalancer** service to automatically assign an IP address on a privat 2. Select **Create** at the top right 3. Select **Load Balancer** 4. Fill out the form - * Ensure to select the **namespace** where you deployed the postgis database - * Give a **Name** to your **Service**. Remember that your final DNS name when the service creates will be in the format of `..geddes.rcac.purdue.edu` - * Fill in **Listening Port** and **Target Port** with the postgis default port **5432** - * Select the **Selectors** tab within the current form - + Fill in **Key** and **Value** with the label values you created during the **Setup Pod Label** step from earlier **e.g** **Key:** `my-db` **Value:** `postgis` - + IMPORTANT: The yellow bar will turn green if your key-value pair matches the pod label you set during the "Setup Pod Label" deployment step above. If you don't see a green bar with a matching Pod, your LoadBalancer will not work. - * Select the **Labels & Annotations** tab within the current form - + Select **Add Annotation** - + To deploy to a **Purdue Private Address Range** fill in **Key:** `metallb.universe.tf/address-pool` **Value:** `geddes-private-pool` - + To deploy to a **Public Address Range** fill in **Key:** `metallb.universe.tf/address-pool` **Value:** `geddes-public-pool` + * Ensure to select the **namespace** where you deployed the postgis database + * Give a **Name** to your **Service**. Remember that your final DNS name when the service creates will be in the format of `..geddes.rcac.purdue.edu` + * Fill in **Listening Port** and **Target Port** with the postgis default port **5432** + * Select the **Selectors** tab within the current form + + Fill in **Key** and **Value** with the label values you created during the **Setup Pod Label** step from earlier **e.g** **Key:** `my-db` **Value:** `postgis` + + IMPORTANT: The yellow bar will turn green if your key-value pair matches the pod label you set during the "Setup Pod Label" deployment step above. If you don't see a green bar with a matching Pod, your LoadBalancer will not work. + * Select the **Labels & Annotations** tab within the current form + + Select **Add Annotation** + + To deploy to a **Purdue Private Address Range** fill in **Key:** `metallb.universe.tf/address-pool` **Value:** `geddes-private-pool` + + To deploy to a **Public Address Range** fill in **Key:** `metallb.universe.tf/address-pool` **Value:** `geddes-public-pool` Kubernetes will now automatically assign you an IP address from the Geddes private IP pool. You can check the IP address by hovering over the "5432/tcp" link on the Service Discovery page or by viewing your service via kubectl on a terminal. diff --git a/docs/userguides/geddes/examples/index.md b/docs/userguides/geddes/examples/index.md index 3228426a..8da55c8c 100644 --- a/docs/userguides/geddes/examples/index.md +++ b/docs/userguides/geddes/examples/index.md @@ -10,9 +10,8 @@ search: # Examples -These examples walk through deploying a database with persistent storage and making it available on the network, deploying a web server using a self-assigned URL, building and deploying an R Shiny application, and installing JupyterHub. +Examples of deploying a database with persistent storage and making it available on the network and deploying a webserver using a self-assigned URL. -- [**Deploy a Database**](database.md) -- [**Deploy a Web Server**](webserver.md) -- [**Deploy an R Shiny App**](r-shiny.md) -- [**Deploy JupyterHub**](jupyterhub.md) +- [**Database**](database.md) +- [**Web Server**](webserver.md) +- [**R Shiny**](r-shiny.md) \ No newline at end of file diff --git a/docs/userguides/geddes/examples/jupyterhub.md b/docs/userguides/geddes/examples/jupyterhub.md deleted file mode 100644 index a5b329b8..00000000 --- a/docs/userguides/geddes/examples/jupyterhub.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -tags: - - Geddes -authors: - - jin456 - - goughes -search: - boost: 2 ---- - -# Deploy JupyterHub - -Guidelines for installing JupyterHub via Helm. - -If you encounter errors related to privileges: - -``` -"message": "pods \"jupyter-username-xxxxx\" is forbidden: PodSecurityPolicy: unable to admit pod: [spec.initContainers[0].securityContext.privileged: Invalid value: true: Privileged containers are not allowed spec.initContainers[0].securityContext.capabilities.add: Invalid value: \"NET_ADMIN\": capability may not be added]", -``` - -add the following to your Helm values: - -``` -singleuser: - cloudMetadata: - blockWithIptables: false -``` diff --git a/docs/userguides/geddes/examples/r-shiny.md b/docs/userguides/geddes/examples/r-shiny.md index 5bb72452..a1db87e4 100644 --- a/docs/userguides/geddes/examples/r-shiny.md +++ b/docs/userguides/geddes/examples/r-shiny.md @@ -8,7 +8,7 @@ search: boost: 2 --- -# Deploy an R Shiny App +# R Shiny App This guide provides instructions on how to build a Docker image for an R Shiny application, push it to the Geddes Registry and deploy it on Geddes. @@ -44,7 +44,7 @@ COPY ./ /srv/shiny-server/ Build the Docker image locally based on the Dockerfile above. The Dockerfile must be in your current working directory. This command tags the image with the name "myshinyapp" and version 1.0. -``` +```bash docker build -t myshinyapp:1.0 . ``` @@ -60,17 +60,17 @@ Iterate on code changes locally until you want to deploy on Geddes. Tag the image for upload to the Geddes Registry. -``` +```bash docker tag myshinyapp:1.0 geddes-registry.rcac.purdue.edu//myshinyapp:1.0 ``` Push the image to the Geddes Registry. Run the login command using your Purdue career account username and password if you currently are not authenticated to the registry. -``` +```bash docker login geddes-registry.rcac.purdue.edu ``` -``` +```bash docker push geddes-registry.rcac.purdue.edu//myshinyapp:1.0 ``` diff --git a/docs/userguides/geddes/examples/webserver.md b/docs/userguides/geddes/examples/webserver.md index 4562d48d..eb72562a 100644 --- a/docs/userguides/geddes/examples/webserver.md +++ b/docs/userguides/geddes/examples/webserver.md @@ -8,29 +8,34 @@ search: boost: 2 --- -# Deploy a Web Server +# Web Server ## Nginx Deployment 1. Select your **Project** from the top right dropdown + ![Geddes Web Server 1](/assets/images/userguides/geddes/Geddes-web-server-1.png) 2. Using the far left menu, select **Workload** 3. Click **Create** at the top right + ![Geddes Web Server 2](/assets/images/userguides/geddes/Geddes-web-server-2.png) 4. Select the appropriate **Deployment Type** for your use case, here we will select and use **Deployment** + ![Geddes Web Server 3](/assets/images/userguides/geddes/Geddes-web-server-3.png) 5. Fill out the form - * Select **Namespace** - * Give an arbitrary **Name** - * Set **Container Image** to the nginx Docker image: `geddes-registry.rcac.purdue.edu/docker-hub-cache/library/nginx` - * Create a **Cluster IP** service to point our external accessible ingress to later - + Click **Add Port** - + Click **Service Type** and with the dropdown select **Cluster IP** - + In the **Private Container Port** box type **80** - * Setup Pod Label - + Select **Labels & Annotations** on the left side of the current form - + Select **Add Label** under the **Pod Labels** section - + Give an arbitrary unique key and value you can remember later when creating Services and other resources **e.g** **Key:** `my-web` **Value:** `nginx` - * Click **Create** - - + * Select **Namespace** + * Give an arbitrary **Name** + * Set **Container Image** to the nginx Docker image: `geddes-registry.rcac.purdue.edu/docker-hub-cache/library/nginx` + ![Geddes Web Server 4](/assets/images/userguides/geddes/Geddes-web-server-4.png) + * Create a **Cluster IP** service to point our external accessible ingress to later + + Click **Add Port** + + Click **Service Type** and with the dropdown select **Cluster IP** + + In the **Private Container Port** box type **80** + ![Geddes Web Server 5](/assets/images/userguides/geddes/Geddes-web-server-5.png) + * Setup Pod Label + + Select **Labels & Annotations** on the left side of the current form + + Select **Add Label** under the **Pod Labels** section + + Give an arbitrary unique key and value you can remember later when creating Services and other resources **e.g** **Key:** `my-web` **Value:** `nginx` + ![Geddes Web Server 6](/assets/images/userguides/geddes/Geddes-web-server-6.png) + ![Geddes Web Server 6b](/assets/images/userguides/geddes/Geddes-web-server-6b.png) + * Click **Create** Wait a couple minutes while your application is deployed. The "does not have minimum availability" message is expected. But, waiting more than 5 minutes for your workload to deploy typically indicates a problem. You can check for errors by clicking your workload name (i.e. "mywebserver"), then using the vertical ellipsis on the right hand side of your deployed pod and selecting **View Logs**. @@ -39,14 +44,13 @@ If all goes well, you will see an Active status for your deployment. ## Expose the web server to external clients via an Ingress 1. Using the far left menu navigate to **Service Discovery** > **Ingresses** and select **Create** at the top right + ![Geddes Web Server 7](/assets/images/userguides/geddes/Geddes-web-server-7.png) 2. Fill out the form - * Ensure to select the **namespace** where you deployed the nginx - * Give an arbitrary **Name** - * Under **Request Host** give the url you want for your web application **e.g** `my-nginx.geddes.rcac.purdue.edu` - * Fill in the value **Path** > **Prefix** as `/` - * Use the **Target Service** and **Port** dropdowns to select the service you created during the **Nginx Deployment** section - * The default Ingress is **private**, which is only accessible within the Purdue network. To make a **public** one, change the **Ingress Class** to `public`: - - - -![Changing the Ingress Class to public](https://www.rcac.purdue.edu/files/image-20231212162400-1.png) + * Ensure to select the **namespace** where you deployed the nginx + * Give an arbitrary **Name** + * Under **Request Host** give the url you want for your web application **e.g** `my-nginx.geddes.rcac.purdue.edu` + * Fill in the value **Path** > **Prefix** as `/` + * Use the **Target Service** and **Port** dropdowns to select the service you created during the **Nginx Deployment** section + ![Geddes Web Server 8](/assets/images/userguides/geddes/Geddes-web-server-8.png) + * The default Ingress is **private**, which is only accessible within the Purdue network. To make a **public** one, change the **Ingress Class** to `public`: + ![Geddes Web Server 9](/assets/images/userguides/geddes/Geddes-web-server-9.png) \ No newline at end of file diff --git a/docs/userguides/geddes/index.md b/docs/userguides/geddes/index.md index aa25a68a..80c5c834 100644 --- a/docs/userguides/geddes/index.md +++ b/docs/userguides/geddes/index.md @@ -15,11 +15,10 @@ New usage patterns have emerged in research computing that depend on the availab - [**Overview of Geddes**](overview.md) - [**Biography of Lanelle Geddes**](biography.md) - [**Concepts**](concepts.md) -- [**Accounts**](accounts.md) - [**Access**](access/index.md) -- [**Container Registry**](registry.md) -- [**Storage**](storage.md) +- [**Registry**](registry.md) - [**Workloads**](workloads.md) - [**Services**](services.md) +- [**Storage**](storage.md) - [**Examples**](examples/index.md) - [**Troubleshooting**](troubleshooting.md) diff --git a/docs/userguides/geddes/registry.md b/docs/userguides/geddes/registry.md index f1e73da2..8a84fe03 100644 --- a/docs/userguides/geddes/registry.md +++ b/docs/userguides/geddes/registry.md @@ -8,11 +8,11 @@ search: boost: 2 --- -# Container Registry +# Registry ## Accessing the Geddes Harbor Registry -The Geddes Harbor registry is only accessible via campus networks and the Purdue VPN. Use a web browser to navigate to [geddes-registry.rcac.purdue.edu](https://geddes-registry.rcac.purdue.edu) and log in with your Purdue career account username and password. (Do not add "`,push`" to your password nor use the Purdue Duo client.) +The Geddes Harbor registry is only accessible via campus networks and the Purdue VPN. Use a web browser to navigate to [geddes-registry.rcac.purdue.edu](https://geddes-registry.rcac.purdue.edu) and log in with your Purdue career account username and password. ## Using the Geddes Registry Docker Hub Cache diff --git a/docs/userguides/geddes/storage.md b/docs/userguides/geddes/storage.md index d887052f..8df09ad0 100644 --- a/docs/userguides/geddes/storage.md +++ b/docs/userguides/geddes/storage.md @@ -133,7 +133,7 @@ Further information about using Cyberduck can be found on the [Cyberduck documen The overall process is: 1. Submit request. - 1. An admin will create the needed Persistent Volume needed to access your depot space and will provide you with the name **pv-depot-** + 1. An admin will create the needed Persistent Volume needed to access your depot space and will provide you with the name **pv-depot-** 2. Create Kubernetes secrets for Depot username/password authentication. 3. Create a Persistent Volume Claim via Rancher UI or kubectl. 4. Use that claim for your workloads/pods to mount depot. @@ -143,45 +143,46 @@ The overall process is: 1. From the Rancher UI, use the left navigation bar to select **Storage > Secrets** 2. Click **Create** at the top right 3. Select **Opaque** and fill out the form. - 1. Make sure to select the namespace that will be accessing depot - 2. Name should be **depot-credentials-** - 3. Under the data tab click **add** to create a second secret key field - 4. Provide key/values - 1. Key: **username** value: **** - 2. Key: **password** value: **** - 5. Click **Create** at the bottom right + 1. Make sure to select the namespace that will be accessing depot + 2. Name should be **depot-credentials-** + 3. Under the data tab click **add** to create a second secret key field + 4. Provide key/values + 1. Key: **username** value: **** + 2. Key: **password** value: **** + 5. Click **Create** at the bottom right **Create a PersistentVolumeClaim for Depot (Rancher UI)** 1. From the Rancher UI, use the left navigation bar to select **Storage > PersistentVolumeClaims** 2. Click **Create** at the top right and fill out the form - 1. Make sure to select the namespace that will be accessing depot - 2. Name should be **pvc-depot-** - 3. Select **Use an existing Persistent Volume** - 4. Use the dropdown to the immediate right to select **pv-depot-** - 5. Click **Customize** in the form tab on the left - 6. Select **Many Nodes Read-Write** - 7. Click **Create** at the bottom right. + 1. Make sure to select the namespace that will be accessing depot + 2. Name should be **pvc-depot-** + 3. Select **Use an existing Persistent Volume** + 4. Use the dropdown to the immediate right to select **pv-depot-** + 5. Click **Customize** in the form tab on the left + 6. Select **Many Nodes Read-Write** + 7. Click **Create** at the bottom right. **Create a PersistentVolumeClaim for Depot (kubectl)** 1. Create a yaml file i.e **depot-pvc.yaml** with the code below - ``` - apiVersion: v1 - kind: PersistentVolumeClaim - metadata: - name: pvc-depot- - namespace: - spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 1Mi - volumeName: pv-depot- - storageClassName: "" - ``` + ``` + apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + name: pvc-depot- + namespace: + spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Mi + volumeName: pv-depot- + storageClassName: "" + ``` + 2. Replace all the **** and **** with the appropriate values. - 1. Do not include the example angle brackets **< >** in your code + 1. Do not include the example angle brackets **< >** in your code 3. Apply the yaml with the command `kubectl apply -f depot-pvc.yaml` diff --git a/mkdocs.yml b/mkdocs.yml index 73355174..f9215442 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -165,25 +165,22 @@ nav: - Negishi: https://www.rcac.purdue.edu/knowledge/negishi - Geddes: - userguides/geddes/index.md - - Biography of Lanelle Geddes: userguides/geddes/biography.md - Overview of Geddes: userguides/geddes/overview.md + - Biography of Lanelle Geddes: userguides/geddes/biography.md - Concepts: userguides/geddes/concepts.md - - Accounts: userguides/geddes/accounts.md - Access: - userguides/geddes/access/index.md - Rancher UI: userguides/geddes/access/rancher.md - Kubectl: userguides/geddes/access/kubectl.md - - Refreshing Your Kubectl Token: userguides/geddes/access/tokens.md - - Container Registry: userguides/geddes/registry.md - - Storage: userguides/geddes/storage.md + - Registry: userguides/geddes/registry.md - Workloads: userguides/geddes/workloads.md - Services: userguides/geddes/services.md + - Storage: userguides/geddes/storage.md - Examples: - userguides/geddes/examples/index.md - - Deploy a Database: userguides/geddes/examples/database.md - - Deploy a Web Server: userguides/geddes/examples/webserver.md - - Deploy an R Shiny App: userguides/geddes/examples/r-shiny.md - - Deploy JupyterHub: userguides/geddes/examples/jupyterhub.md + - Database: userguides/geddes/examples/database.md + - Web Server: userguides/geddes/examples/webserver.md + - R Shiny App: userguides/geddes/examples/r-shiny.md - Troubleshooting: userguides/geddes/troubleshooting.md - Hammer: https://www.rcac.purdue.edu/knowledge/hammer - Rossmann: https://www.rcac.purdue.edu/knowledge/rossmann From 7f8ef51f21334831010f37b4d019171dcdd8d1e9 Mon Sep 17 00:00:00 2001 From: Guangzhen Jin Date: Wed, 3 Jun 2026 11:53:17 -0400 Subject: [PATCH 4/6] Minor formatting fixes. --- .../userguides/geddes/pod-debugging-1.png | Bin 0 -> 9709 bytes .../userguides/geddes/pod-debugging-2.png | Bin 0 -> 19384 bytes .../geddes/{access/kubectl.md => access.md} | 18 +++++-- docs/userguides/geddes/access/index.md | 16 ------ docs/userguides/geddes/access/rancher.md | 17 ------ docs/userguides/geddes/access/tokens.md | 20 ------- docs/userguides/geddes/accounts.md | 17 ------ docs/userguides/geddes/examples/r-shiny.md | 2 +- docs/userguides/geddes/index.md | 2 +- docs/userguides/geddes/registry.md | 50 +++++++++--------- docs/userguides/geddes/storage.md | 18 +++---- docs/userguides/geddes/troubleshooting.md | 4 +- docs/userguides/geddes/workloads.md | 8 +-- mkdocs.yml | 7 +-- 14 files changed, 60 insertions(+), 119 deletions(-) create mode 100644 docs/assets/images/userguides/geddes/pod-debugging-1.png create mode 100644 docs/assets/images/userguides/geddes/pod-debugging-2.png rename docs/userguides/geddes/{access/kubectl.md => access.md} (65%) delete mode 100644 docs/userguides/geddes/access/index.md delete mode 100644 docs/userguides/geddes/access/rancher.md delete mode 100644 docs/userguides/geddes/access/tokens.md delete mode 100644 docs/userguides/geddes/accounts.md diff --git a/docs/assets/images/userguides/geddes/pod-debugging-1.png b/docs/assets/images/userguides/geddes/pod-debugging-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c21d863aad9ecade66408137a6ad3f09cf922135 GIT binary patch literal 9709 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" +3. Set a unique Persistent Volume Claim Name, i.e. "`-volume`" 4. Select a Storage Class. The default storage class is "geddes-standard-singlenode". 5. Select an Access Mode. The "geddes-standard-singlenode" class only supports Single-Node Read/Write. 6. Request an amount of storage in Gigabytes @@ -133,7 +133,7 @@ Further information about using Cyberduck can be found on the [Cyberduck documen The overall process is: 1. Submit request. - 1. An admin will create the needed Persistent Volume needed to access your depot space and will provide you with the name **pv-depot-** + 1. An admin will create the needed Persistent Volume needed to access your depot space and will provide you with the name `pv-depot-` 2. Create Kubernetes secrets for Depot username/password authentication. 3. Create a Persistent Volume Claim via Rancher UI or kubectl. 4. Use that claim for your workloads/pods to mount depot. @@ -144,11 +144,11 @@ The overall process is: 2. Click **Create** at the top right 3. Select **Opaque** and fill out the form. 1. Make sure to select the namespace that will be accessing depot - 2. Name should be **depot-credentials-** + 2. Name should be `depot-credentials-` 3. Under the data tab click **add** to create a second secret key field 4. Provide key/values - 1. Key: **username** value: **** - 2. Key: **password** value: **** + 1. Key: **username** value: `` + 2. Key: **password** value: `` 5. Click **Create** at the bottom right **Create a PersistentVolumeClaim for Depot (Rancher UI)** @@ -156,9 +156,9 @@ The overall process is: 1. From the Rancher UI, use the left navigation bar to select **Storage > PersistentVolumeClaims** 2. Click **Create** at the top right and fill out the form 1. Make sure to select the namespace that will be accessing depot - 2. Name should be **pvc-depot-** + 2. Name should be `pvc-depot-` 3. Select **Use an existing Persistent Volume** - 4. Use the dropdown to the immediate right to select **pv-depot-** + 4. Use the dropdown to the immediate right to select `pv-depot-` 5. Click **Customize** in the form tab on the left 6. Select **Many Nodes Read-Write** 7. Click **Create** at the bottom right. @@ -183,6 +183,6 @@ The overall process is: storageClassName: "" ``` -2. Replace all the **** and **** with the appropriate values. - 1. Do not include the example angle brackets **< >** in your code +2. Replace all the `` and `` with the appropriate values. + 1. Do not include the example angle brackets `< >` in your code 3. Apply the yaml with the command `kubectl apply -f depot-pvc.yaml` diff --git a/docs/userguides/geddes/troubleshooting.md b/docs/userguides/geddes/troubleshooting.md index cd6e90d4..aa7335ba 100644 --- a/docs/userguides/geddes/troubleshooting.md +++ b/docs/userguides/geddes/troubleshooting.md @@ -43,7 +43,7 @@ spec: One can also launch a persistent Pod by specifying the sleep command via the Geddes UI. -![Launching a persistent Pod via the Geddes UI](https://www.rcac.purdue.edu/files/image-20231004151457-1.png) +![Launching a persistent Pod via the Geddes UI](/assets/images/userguides/geddes/pod-debugging-1.png) ## Permission Denied on PVC for non-root User @@ -58,7 +58,7 @@ Where gid is the group id your container is running as, or the group id of the p This setting can also be applied under the Pod menu when deploying a workload via the Geddes UI. -![Setting the fsGroup SecurityContext via the Geddes UI](https://www.rcac.purdue.edu/files/image-20231004152714-1.png) +![Setting the fsGroup SecurityContext via the Geddes UI](/assets/images/userguides/geddes/pod-debugging-2.png) ## Pull Rate Limit Error diff --git a/docs/userguides/geddes/workloads.md b/docs/userguides/geddes/workloads.md index b61e8585..c6cf9d6b 100644 --- a/docs/userguides/geddes/workloads.md +++ b/docs/userguides/geddes/workloads.md @@ -16,9 +16,9 @@ search: 2. Using the far left menu navigate to **Workload** 3. Click **Create** at the top right 4. Select the appropriate **Deployment Type** for your use case - * Select **Namespace** if not already done from step 1 - * Set a unique **Name** for your deployment, **i.e.** "myapp" - * Set **Container Image**. Ensure you're using the Geddes registry for personal images or the Geddes registry docker-hub cache when pulling public docker-hub specific images. **e.g**: `geddes-registry.rcac.purdue.edu/my-registry/myimage:tag` or `geddes-registry.rcac.purdue.edu/docker-hub-cache/library/image:tag` - * Click **Create** + * Select **Namespace** if not already done from step 1 + * Set a unique **Name** for your deployment, **i.e.** "myapp" + * Set **Container Image**. Ensure you're using the Geddes registry for personal images or the Geddes registry docker-hub cache when pulling public docker-hub specific images. **e.g**: `geddes-registry.rcac.purdue.edu/my-registry/myimage:tag` or `geddes-registry.rcac.purdue.edu/docker-hub-cache/library/image:tag` + * Click **Create** See the [Examples](examples/index.md) section for complete walkthroughs of deploying a database, a web server, an R Shiny app, and JupyterHub. diff --git a/mkdocs.yml b/mkdocs.yml index f9215442..dd7b9ee7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -168,10 +168,7 @@ nav: - Overview of Geddes: userguides/geddes/overview.md - Biography of Lanelle Geddes: userguides/geddes/biography.md - Concepts: userguides/geddes/concepts.md - - Access: - - userguides/geddes/access/index.md - - Rancher UI: userguides/geddes/access/rancher.md - - Kubectl: userguides/geddes/access/kubectl.md + - Access: userguides/geddes/access.md - Registry: userguides/geddes/registry.md - Workloads: userguides/geddes/workloads.md - Services: userguides/geddes/services.md @@ -180,7 +177,7 @@ nav: - userguides/geddes/examples/index.md - Database: userguides/geddes/examples/database.md - Web Server: userguides/geddes/examples/webserver.md - - R Shiny App: userguides/geddes/examples/r-shiny.md + - R Shiny: userguides/geddes/examples/r-shiny.md - Troubleshooting: userguides/geddes/troubleshooting.md - Hammer: https://www.rcac.purdue.edu/knowledge/hammer - Rossmann: https://www.rcac.purdue.edu/knowledge/rossmann From 7927a150a73154a55ff4c1f7eb9177ccce446711 Mon Sep 17 00:00:00 2001 From: Guangzhen Jin Date: Wed, 3 Jun 2026 13:22:47 -0400 Subject: [PATCH 5/6] Re-arrange nav items. --- mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index dd7b9ee7..fcbedc98 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -162,7 +162,6 @@ nav: - Gateway (Open OnDemand): userguides/scholar/gateway.md - Compiling Source Code: userguides/scholar/compile.md - Frequently Asked Questions: userguides/scholar/faqs.md - - Negishi: https://www.rcac.purdue.edu/knowledge/negishi - Geddes: - userguides/geddes/index.md - Overview of Geddes: userguides/geddes/overview.md @@ -179,6 +178,7 @@ nav: - Web Server: userguides/geddes/examples/webserver.md - R Shiny: userguides/geddes/examples/r-shiny.md - Troubleshooting: userguides/geddes/troubleshooting.md + - Negishi: https://www.rcac.purdue.edu/knowledge/negishi - Hammer: https://www.rcac.purdue.edu/knowledge/hammer - Rossmann: https://www.rcac.purdue.edu/knowledge/rossmann - Weber: https://www.rcac.purdue.edu/knowledge/weber From 330c5936fbe3f3be78b131bdf33a32775511e65a Mon Sep 17 00:00:00 2001 From: Guangzhen Jin Date: Wed, 3 Jun 2026 13:43:38 -0400 Subject: [PATCH 6/6] Final wrap-up. --- docs/userguides/geddes/concepts.md | 2 +- docs/userguides/geddes/workloads.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/userguides/geddes/concepts.md b/docs/userguides/geddes/concepts.md index 027094a3..d2332d69 100644 --- a/docs/userguides/geddes/concepts.md +++ b/docs/userguides/geddes/concepts.md @@ -51,6 +51,6 @@ The most common you will see are typically `:latest` and `:number` where *number After setting up the Rancher CLI you can issue `rancher --help` to view the full range of options available. -**Kubectl** - Kubectl is a text based tool for working with the underlying Geddes Kubernetes cluster. In order to take advantage of kubectl you will either need to set up a Kubeconfig File or use the built in kubectl shell in the Rancher UI. You can learn more about kubectl and how to download the kubectl file on the [Kubectl](access/kubectl.md) page. +**Kubectl** - Kubectl is a text based tool for working with the underlying Geddes Kubernetes cluster. In order to take advantage of kubectl you will either need to set up a Kubeconfig File or use the built in kubectl shell in the Rancher UI. You can learn more about kubectl and how to download the kubectl file on the [Kubectl](access.md#kubectl) page. **Storage** - Storage is utilized to provide persistent data storage between container deployments. The **Ceph** filesystem provides access to Block, Object and shared file systems. File storage provides an interface to access data in a file and folder hierarchy similar to NTFS or NFS. Block storage is a flexible type of storage that allows for snapshotting and is good for database workloads and generic container storage. Object storage is also provided by Ceph, this features a REST based bucket file system providing S3 and Swift compatibility. diff --git a/docs/userguides/geddes/workloads.md b/docs/userguides/geddes/workloads.md index c6cf9d6b..36ebfc9b 100644 --- a/docs/userguides/geddes/workloads.md +++ b/docs/userguides/geddes/workloads.md @@ -21,4 +21,4 @@ search: * Set **Container Image**. Ensure you're using the Geddes registry for personal images or the Geddes registry docker-hub cache when pulling public docker-hub specific images. **e.g**: `geddes-registry.rcac.purdue.edu/my-registry/myimage:tag` or `geddes-registry.rcac.purdue.edu/docker-hub-cache/library/image:tag` * Click **Create** -See the [Examples](examples/index.md) section for complete walkthroughs of deploying a database, a web server, an R Shiny app, and JupyterHub. +See the [Examples](examples/index.md) section for complete walkthroughs of deploying a database, a web server, and an R Shiny app.