From 2575b61b3e408743d6492842d1dd6dd003ae56da Mon Sep 17 00:00:00 2001 From: Jason DeTiberus Date: Mon, 14 Oct 2019 16:45:11 -0400 Subject: [PATCH] Add ControlPlane CAEP --- docs/proposals/20191017-control-plane.md | 493 ++++++++++++++++++ .../controlplane/controlplane-init-1.plantuml | 53 ++ .../controlplane/controlplane-init-1.png | Bin 0 -> 56649 bytes .../controlplane/controlplane-init-2.plantuml | 54 ++ .../controlplane/controlplane-init-2.png | Bin 0 -> 47999 bytes .../controlplane/controlplane-init-3.plantuml | 53 ++ .../controlplane/controlplane-init-3.png | Bin 0 -> 48151 bytes .../controlplane/controlplane-init-4.plantuml | 41 ++ .../controlplane/controlplane-init-4.png | Bin 0 -> 24279 bytes .../controlplane/controlplane-init-6.plantuml | 54 ++ .../controlplane/controlplane-init-6.png | Bin 0 -> 52569 bytes .../controlplane/controlplane-init-7.plantuml | 57 ++ .../controlplane/controlplane-init-7.png | Bin 0 -> 51129 bytes .../images/machine-states-preboot/README.md | 27 - 14 files changed, 805 insertions(+), 27 deletions(-) create mode 100644 docs/proposals/20191017-control-plane.md create mode 100644 docs/proposals/images/controlplane/controlplane-init-1.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-1.png create mode 100644 docs/proposals/images/controlplane/controlplane-init-2.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-2.png create mode 100644 docs/proposals/images/controlplane/controlplane-init-3.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-3.png create mode 100644 docs/proposals/images/controlplane/controlplane-init-4.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-4.png create mode 100644 docs/proposals/images/controlplane/controlplane-init-6.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-6.png create mode 100644 docs/proposals/images/controlplane/controlplane-init-7.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-7.png delete mode 100644 docs/proposals/images/machine-states-preboot/README.md diff --git a/docs/proposals/20191017-control-plane.md b/docs/proposals/20191017-control-plane.md new file mode 100644 index 000000000000..d8dd70d08333 --- /dev/null +++ b/docs/proposals/20191017-control-plane.md @@ -0,0 +1,493 @@ +--- +title: Control Plane Management +authors: + - "@detiber” + - "@chuckha” + - "@randomvariable" + - "@dlipovetsky" +reviewers: + - "@ncdc" + - "@timothysc" + - "@vincepri" +creation-date: 2019-09-18 +last-updated: 2019-09-18 +status: provisional +--- + +# Control Plane Management + +## Table of Contents + +- [Control Plane Management](#control-plane-management) + - [Table of Contents](#table-of-contents) + - [Glossary](#glossary) + - [References](#references) + - [Summary](#summary) + - [Motivation](#motivation) + - [Goals](#goals) + - [Additional goals of the default kubeadm machine-based Implementation](#additional-goals-of-the-default-kubeadm-machine-based-implementation) + - [Non-Goals / Future Work](#non-goals--future-work) + - [Proposal](#proposal) + - [User Stories](#user-stories) + - [Identified features from user stories](#identified-features-from-user-stories) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [New API Types](#new-api-types) + - [Modifications required to existing API Types](#modifications-required-to-existing-api-types) + - [Behavioral Changes from v1alpha2](#behavioral-changes-from-v1alpha2) + - [Behaviors](#behaviors) + - [Create](#create) + - [Scale Up](#scale-up) + - [Scale Down](#scale-down) + - [Delete of the entire ControlPlane (kubectl delete controlplane my-controlplane)](#delete-of-the-entire-controlplane-kubectl-delete-controlplane-my-controlplane) + - [Cluster upgrade (using create-swap-and-delete)](#cluster-upgrade-using-create-swap-and-delete) + - [Control plane healthcheck](#control-plane-healthcheck) + - [Adoption of pre-v1alpha3 Control Plane Machines](#adoption-of-pre-v1alpha3-control-plane-machines) + - [Code organization](#code-organization) + - [Risks and Mitigations](#risks-and-mitigations) + - [etcd membership](#etcd-membership) + - [Design Details](#design-details) + - [Test Plan](#test-plan) + - [Graduation Criteria](#graduation-criteria) + - [Alpha -> Beta Graduation](#alpha---beta-graduation) + - [Upgrade Strategy](#upgrade-strategy) + - [Alternatives](#alternatives) + - [Implementation History](#implementation-history) + +## Glossary + +The lexicon used in this document is described in more detail [here](https://github.com/kubernetes-sigs/cluster-api/blob/master/docs/book/src/reference/glossary.md). Any discrepancies should be rectified in the main Cluster API glossary. + +### References + +[Kubernetes Control Plane Management Overview](https://docs.google.com/document/d/1nlWKEr9OP3IeZO5W2cMd3A55ZXLOXcnc6dFu0K9_bms/edit#) + +## Summary + +Management of the control plane is currently handled in Cluster API at the infrastructure provider level (although many providers have converged on using the same implementation), based on the special annotation of standard Cluster API machines which then changes the machine bootstrapping logic within a particular infrastructure provider. +The purpose of this document is to instead treat machine-based control plane management as a first-class component that is part of the API and Cluster, where multiple Cluster API machines will belong to a single control plane object, with its own infrastructure independent provider. The control plane covered by this document is defined as consisting of the Kubernetes API server, scheduler, controller manager, DNS and proxy services, and the underlying etcd datastore. + +## Motivation + +### Goals + +- To establish new resource types for control plane management +- To support single node and multiple control plane instances +- To enable declarative orchestrated control plane upgrades +- To provide a default machine-based implementation using kubeadm + +#### Additional goals of the default kubeadm machine-based Implementation + +- To provide a kubeadm-based implementation that is infrastructure provider agnostic +- To manage kubeadm-based "stacked etcd" control plane deployments +- To enable scaling of the number of nodes in a control plane deployment +- To support pre-existing, user-managed external etcd clusters +- To support only user-initiated remediation: + E.g. user deletes a Machine. Control Plane Provider reconciles by removing the corresponding etcd member and updating related metadata + +### Non-Goals / Future Work + +Non-Goals listed in this document are intended to scope bound the current v1alpha3 implementation and are subject to change based on user feedback over time. + +- To manage non-machine based topologies, e.g. + - Pod based control planes; these can be managed via standard kubernetes objects. + - Non-node control planes (i.e. EKS, GKE, AKS); these can be managed via the respective APIs. +- To manage CA certificates outside of what is provided by Kubeadm bootstrapping +- To manage etcd clusters in any topology other than stacked etcd. +- To address disaster recovery constraints, e.g. restoring a control plane from 0 replicas using a filesystem or volume snapshot copy of data persisted in etcd. +- To support rollbacks, as there is no datastore rollback guarantee for Kubernetes. Consumers should perform backups of the cluster prior to performing potentially destructive operations. +- To mutate the configuration of live running clusters (e.g. changing api-server flags), as this is the responsibility of the [component configuration working group](https://github.com/kubernetes/community/tree/master/wg-component-standard). +- To support auto remediation. We will treat control plane health as either informational or blocking for upgrades in the first instance based on real world feedback regarding a new control plane health indicator. Using such a mechanism to automatically replace machines may lead to unintended behaviours. +- To provide configuration of external cloud providers (i.e. the [cloud-controller-manager](https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/)).This is deferred to kubeadm. +- To provide CNI configuration. This is deferred to external, higher level tooling. +- To provide the upgrade logic to handle changes to infrastructure (networks, firewalls etc…) that may need to be done to support a control plane on a newer version of Kubernetes (e.g. a cloud controller manager requires updated permissions against infrastructure APIs). We expect the work on add-on components to help to resolve some of these issues. +- To provide horizontal or vertical auto scaling of control plane components, especially as etcd places hard performance limits beyond 3 nodes (due to latency). + +## Proposal + +### User Stories + +1. As a cluster operator, I want my Kubernetes clusters to have high availability control planes to meet my SLOs with application developers. +1. As a developer, I want to be able to deploy as small as possible a cluster, e.g. to meet my organization’s cost requirements. +1. As a cluster operator, I want to be able to scale up my control plane to meet the increased demand that workloads are placing on my cluster. +1. As a cluster operator, I want to be able to remove a control plane replica that I have determined is faulty and should be replaced. +1. As a cluster operator, I want my cluster architecture to be always consistent with best practices, in order to have reliable cluster provisioning without having to understand the details of underlying datastores, replication etc… +1. As a cluster operator, I want to know if my cluster’s control plane is healthy in order to understand if I am meeting my SLOs with my end users. +1. As a cluster operator, I want to be able to quickly respond to a Kubernetes CVE by upgrading my clusters in an automated fashion. +1. As a cluster operator, I want to be able to quickly respond to a non-Kubernetes CVE that affects my base image or Kubernetes dependencies by upgrading my clusters in an automated fashion. +1. As a cluster operator, I would like to upgrade to a new minor version of Kubernetes so that my cluster remains supported. +1. As a cluster operator, I want to know why my cluster isn’t working properly after creation. I have ended up with an API server I can access, but CNI isn’t working, and new machines are not registering themselves with the control plane. + +#### Identified features from user stories + +1. Based on the function of kubeadm, the control plane provider must be able to scale the number of replicas of a control plane from 1 to X, meeting user stories 1 through 4. +1. To address user story 5, the control plane provider must provide validation of the number of replicas in a control plane. Where the stacked etcd topology is used (i.e., in the default implementation), the number of replicas must be an odd number, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members). When external etcd is used, any number is valid. +1. In service of user story 5, the control plane provider must also manage etcd membership via kubeadm as part of scaling down (`kubeadm` takes care of adding the new etcd member when joining). +1. The control plane provider should provide indicators of health to meet user story 6 and 10. This should include at least the state of etcd and information about which replicas are currently healthy or not. For the default implementation, health attributes based on artifacts kubeadm installs on the cluster may also be of interest to cluster operators. +1. The control plane provider must be able to upgrade a control plane’s version of Kubernetes as well as updating the underlying machine image on where applicable (e.g. virtual machine based infrastructure). + +### Implementation Details/Notes/Constraints + +#### New API Types + +ControlPlane: + +```go +package v1alpha3 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + cabpkv1 "sigs.k8s.io/cluster-api-bootstrap-provider-kubeadm/api/v1alpha2" +) + +// ControlPlaneSpec defines the desired state of ControlPlane +type ControlPlaneSpec struct { + // Number of desired machines. Defaults to 1. + // This is a pointer to distinguish between explicit zero and not specified. + Replicas *int32 `json:"replicas"` + + // Version defines the desired Kubernetes version. + Version string `json:"version"` + + // InfrastructureTemplate is a required reference to a custom resource + // offered by an infrastructure provider. + InfrastructureTemplate corev1.ObjectReference `json:"infrastructureTemplate"` + + // KubeadmConfigSpec is a KubeadmConfigSpec + // to use for initializing and joining machines to the control plane + KubeadmConfigSpec cabpkv1.KubeadmConfigSpec `json:"kubeadmConfigSpec"` +} + +// ControlPlaneStatus defines the observed state of ControlPlane +type ControlPlaneStatus struct { + // Selector is the label selector in string format to avoid introspection + // by clients, and is used to provide the CRD-based integration for the + // scale subresource and additional integrations for things like kubectl + // describe.. The string will be in the same format as the query-param syntax. + // More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors + // +optional + Selector string `json:"selector,omitempty"` + + // Total number of non-terminated machines targeted by this control plane + // (their labels match the selector). + // +optional + Replicas int32 `json:"replicas,omitempty"` + + // Total number of non-terminated machines targeted by this control plane + // that have the desired template spec. + // +optional + UpdatedReplicas int32 `json:"updatedReplicas,omitempty"` + + // Total number of fully running machines, including the number of active + // etcd cluster members when running as stacked + // +optional + ReadyReplicas int32 `json:"readyReplicas,omitempty"` + + // Total number of available machines targeted by this control plane. + // This is the same as ReadyReplicas, but exposed to be similar to the + // status exposed by MachineDeployments and Deployments + // +optional + AvailableReplicas int32 `json:"readyReplicas,omitempty"` + + // Total number of unavailable machines targeted by this control plane. + // This is the total number of machines that are still required for + // the deployment to have 100% available capacity. They may either + // be machines that are running but not yet ready or machines + // that still have not been created. + // +optional + UnavailableReplicas int32 `json:"unavailableReplicas,omitempty"` + + // Initialized denotes whether or not the control plane has the + // uploaded kubeadm-config configmap + Initialized bool `json:"initialized,omitempty”` + + // Ready denotes that the ControlPlane API Server is ready to + // receive requests. + Ready bool `json:"ready,omitempty"` + +} + +// +kubebuilder:object:root=true +// +kubebuilder:resource:path=controlplanes,shortName=cp,scope=Namespaced,categories=cluster-api +// +kubebuilder:storageversion +// +kubebuilder:subresource:status +// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas,selectorpath=.status.selector + +// ControlPlane is the Schema for the ControlPlane API +type ControlPlane struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec ControlPlaneSpec `json:"spec,omitempty"` + Status ControlPlaneStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// ControlPlaneList contains a list of ControlPlane +type ControlPlaneList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []ControlPlane `json:"items"` +} + +func init() { + SchemeBuilder.Register(&ControlPlane{}, &ControlPlaneList{}) +} + +``` + +With the following validations: + +- If the referenced InitTemplate does not define external etcd (webhook): + - ControlPlane.Spec.Replicas in [1, 3, 5, 7] +- ControlPlane.Spec.Version != "" (openapi) + +And the following defaulting: + +- ControlPlaneSpec.Replicas: 1 (openapi or webhook) + +#### Modifications required to existing API Types + +- Add Cluster.Spec.ControlPlaneRef defined as: + +```go + // ControlPlaneRef is an optional reference to a provider-specific resource that holds + // the details for provisioning the Control Plane for a Cluster + // +optional + ControlPlaneRef *corev1.ObjectReference `json:"controlPlaneRef,omitempty"` +``` + +- Add Cluster.Status.ControlPlaneReady defined as: + +```go + // ControlPlaneReady defines if the control plane is ready + // +optional + ControlPlaneReady bool `json:"controlPlaneReady"` +``` + +#### Behavioral Changes from v1alpha2 + +- If Cluster.Spec.ControlPlaneRef is set: + - [Status.ControlPlaneInitialized](https://github.com/kubernetes-sigs/cluster-api/issues/1243) is set based on the value of Status.Initialized for the referenced resource + - Status.ControlPlaneReady is set based on the value of Status.Ready for the referenced resource, this field is intended to eventually replace Status.ControlPlaneInitialized as a field that will be kept up to date instead of set only once. +- Current behavior will be preserved if Cluster.Spec.ControlPlaneRef is not set + +#### Behaviors + +##### Create + +- A created ControlPlane must bootstrap a control plane with a given number of replicas +- If an error occurs, errorStatus and errorReason will be defined on the ControlPlane object +- Cannot create an even number of stacked control planes or anything other than 1, 3, 5, or 7 +- Can create an arbitrary number of control planes if etcd is external to the control plane +- Creating a ControlPlane with > 1 replicas is equivalent to creating a ControlPlane with 1 replica followed by scaling the ControlPlane to 3 replicas +- The kubeadm bootstrapping configuration provided via ControlPlane.Spec.KubeadmConfigSpec should specify the initConfiguration, clusterConfiguration, and joinConfiguration stanzas, and the ControlPlane controller will be responsible for splitting the config and passing it to the underlying Machines created as appropriate +- The underlying query used to find existing Control Plane Machines is based on the following hardcoded label selector: + +```yaml + selector: + matchLabels: + cluster.x-k8s.io/cluster-name: my-cluster + cluster.x-k8s.io/controlplane: "true" +``` + +- Generate CA certificates if they do not exist +- Generate the kubeconfig secret if it does not exist + +Given the following `cluster.yaml` file: + +```yaml +kind: Cluster +apiVersion: cluster.x-k8s.io/v1alpha3 +metadata: + name: my-cluster + namespace: default +Spec: + clusterNetwork: + pods: + cidrBlocks: ["192.168.0.0/16"] + controlPlaneRef: + kind: ControlPlane + apiVersion: cluster.x-k8s.io/v1alpha3 + name: my-controlplane + namespace: default + infrastructureRef: + kind: AWSCluster + apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 + name: my-awscluster + namespace: default +--- +kind: ControlPlane +apiVersion: cluster.x-k8s.io/v1alpha3 +metadata: + name: my-control-plane + namespace: default +spec: + replicas: 1 + version: v1.16.0 + infrastructureTemplate: + kind: AWSMachineTemplate + apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 + namespace: default + name: my-awsmachinetemplate + kubeadmConfigSpec: + initConfiguration: + nodeRegistration: + name: '{{ ds.meta_data.hostname }}' + kubeletExtraArgs: + cloud-provider: aws + clusterConfiguration: + apiServer: + extraArgs: + cloud-provider: aws + controllerManager: + extraArgs: + cloud-provider: aws + joinConfiguration: + controlPlane: {} + nodeRegistration: + name: '{{ ds.meta_data.hostname }}' + kubeletExtraArgs: + cloud-provider: aws +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 +kind: AWSMachineTemplate +metadata: + name: my-awsmachinetemplate + namespace: default +spec: + ami: + id: ami-123456abcdef + instanceType: t3.large + iamInstanceProfile: "control-plane.cluster-api-provider-aws.sigs.k8s.io" + sshKeyName: my-ssh-key +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 +kind: AWSCluster +metadata: + name: my-awscluster + namespace: default +spec: + region: us-east-1 +``` + +![controlplane-init-1](images/controlplane/controlplane-init-1.png) +![controlplane-init-2](images/controlplane/controlplane-init-2.png) +![controlplane-init-3](images/controlplane/controlplane-init-3.png) +![controlplane-init-4](images/controlplane/controlplane-init-4.png) + +##### Scale Up + +- Allow scale up a control plane with stacked etcd to only 1, 3, 5, or 7, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members). +- However, allow a control plane using an external etcd cluster to scale up to other numbers such as 2 or 4. +- The kubeadm bootstrapping configuration provided via ControlPlane.Spec.KubeadmConfigSpec should specify the initConfiguration, clusterConfiguration, and joinConfiguration stanzas, and the ControlPlane controller will be responsible for splitting the config and passing it to the underlying Machines created as appropriate +- Scale up operations should not be done in conjunction with an upgrade operation. +- Scale up operations *could* be blocked based on the Health status + - for stacked etcd quorum must be considered + - for external etcd only availability of etcd should be considered. + +![controlplane-init-6](images/controlplane/controlplane-init-6.png) + +##### Scale Down + +- Scale down a stacked control plane + - For each replica being deleted: + - Remove the replica’s etcd member from the etcd cluster + - Update the kubeadm generated config map +- Scale down a control plane with an external etcd + - Same as above minus Etcd management +- Scale down operations should not be done in conjunction with an upgrade operation, this should not impact manual operations for recovery. +- Scale down operations *could* be blocked based on the Health status + - for stacked etcd quorum must be considered + - for external etcd only availability of etcd should be considered. +- Scale to 0 must be rejected for the initial support + +![controlplane-init-7](images/controlplane/controlplane-init-7.png) + +##### Delete of the entire ControlPlane (kubectl delete controlplane my-controlplane) + +- Completely removing the control plane and issuing a delete on the underlying machines. + - Deletion is equivalent to a scale to 1 followed by a deletion of a single replica Control Plane. + +##### Cluster upgrade (using create-swap-and-delete) + +- Triggered on any changes to Version, InfrastructureTemplate, or the KubeadmConfiguration used. + - Must be able to trigger an upgrade for the underlying machine image (e.g. nothing in the above list has changed but an upgrade is required) + - Possible implementations include (not necessary to hammer out exact implementation right now): + - Manually bumping a Generation field on the ControlPlane object + - Adding a field that is not the Generation field for users to manually bump to trigger an upgrade + - Adding a timestamp field, something like `nextUpgrade` which can be set to a specific time in the future (far future if no upgrades are desired) and an upgrade will run when that timestamp is passed. Good for scheduling upgrades/SLOs & quickly modifying to NOW or yesterday if an upgrade is required immediately. Would potentially update the field value to some interval (2 months from now?) +- An upgrade will look like this: + - Serially go through each control plane replica not at the current config hash + - Check health of any replicas for the current config hash + - Uniquely mark the existing replica machine through setting an annotation and persisting the change (controlplane.cluster.x-k8s.io/selected-for-upgrade) + - Check cluster health + - Provision a new machine at the correct version + - Poll on health of replicas with the current config hash + - Poll on cluster health with the correct replica number + - Delete the marked controlplane machine +- Upgrade of worker nodes is deferred to the MachineDeployment controller +- Determining if a Machine is "up to date" will be done through the use of an annotation (controlplane.cluster.x-k8s.io/configuration-hash) that is placed on the Machine at creation time. The value of this annotation is generated by computing the Hash of the ControlPlaneSpec (minus the replicas field). This would allow triggering an Upgrade based on any changes to Version, InfrastructureTemplate, or the KubeadmConfiguration used. + - For example, a CVE is patched in containerd and updated images are available. Note that the Kubernetes version is not changed. To trigger an upgrade, the user updates the image in the InfrastructureTemplate (for an AWS cluster, the image is stored in InfrastructureTemplate.Spec.AMI.ID). +- Where necessary, we will import behaviours from the MachineSet and MachineDeployment controllers. +- The controller should tolerate the manual removal of a replica during the upgrade process. A replica that fails during the upgrade may block the completion of the upgrade. Removal or other remedial action may be necessary to allow the upgrade to complete. + +##### Control plane healthcheck + +- Will be used during scaling and upgrade operations. +- There will also be a signal to indicate a healthcheck that could not be made, e.g. due to a network partition. +- For stacked control planes, we will present etcd quorum status within the Status.Ready field, and also report the number of active cluster members through "ReadyReplicas" +- The addition of status fields will be done conservatively to prevent them being relied upon even as we choose to deprecate them in the future. +- Unlike previous lifecycle managers (see Alternatives), ComponentStatus will be not be used as it is deprecated. +- Examples of specific checks we may perform include: + - Checking the managed cluster has a kubeadm-config configmap, which will mark the cluster as Initialized + - Checking the managed cluster has a kubelet-$version-configmap matching the desired + version to check the state of upgrades + - Checking the status of all pods marked with the system-cluster-critical priorityClass within the managed cluster, and providing a count of ready vs total. + - Running PodExec etcdctl, or port-forwarding to etcd to get etcd cluster health information + - Checking the status of pods marked with the app=kube-dns label as a proxy for information about the health of CNI. + +##### Adoption of pre-v1alpha3 Control Plane Machines + +- Existing Control Plane Machines will need to be updated with labels matching the expected label selector. +- The KubeadmConfigSpec can be re-created from the referenced KubeadmConfigs for the Machines matching the label selector. + - If there is not an existing initConfiguration/clusterConfiguration only the joinConfiguration will be populated. +- In v1alpha2, the Cluster API Bootstrap Provider is responsible for generating certificates based upon the first machine to join a cluster. The OwnerRef for these certificates are set to that of the initial machine, which causes an issue if that machine is later deleted. For v1alpha3, control plane certificate generation will be replicated in the ControlPlane provider. Given that for v1alpha2 these certificates are generated with deterministic names, i.e. prefixed with the cluster name, the migration mechanism should replace the owner reference of these certificates during migration. The bootstrap provider will need to be updated to only fallback to the v1alpha2 secret generation behavior if Cluster.Spec.ControlPlaneRef is nil. +- To ease the adoption of v1alpha3, the migration mechanism should be built into Cluster API controllers. + +#### Code organization + +This proposal puts the types required in the `cluster.x-k8s.io` group. The controller(s) will also live inside `sigs.k8s.io/cluster-api`. + +### Risks and Mitigations + +#### etcd membership + +- If the leader is selected for deletion during a replacement for upgrade or scale down, the etcd cluster will be unavailable during that period as leader election takes place. Small time periods of unavailability should not significantly impact the running of the managed cluster’s API server. +- Replication of the etcd log, if done for a sufficiently large datastore and saturates the network, machines may fail leader election, bringing down the cluster. To mitigate this, the control plane provider will only create machines serially, ensuring cluster health before moving onto operations for the next machine. +- When performing a scaling operation, or an upgrade using create-swap-delete, there are periods when there are an even number of nodes. Any network partitions or host failures that occur at this point will cause the etcd cluster to split brain. Etcd 3.4 is under consideration for Kubernetes 1.17, which brings non-voting cluster members, which can be used to safely add new machines without affecting quorum. [Changes to kubeadm](https://github.com/kubernetes/kubeadm/issues/1793) will be required to support this and is out of scope for the timeframe of v1alpha3. + +## Design Details + +### Test Plan + +Standard unit/integration & e2e behavioral test plans will apply. + +### Graduation Criteria + +#### Alpha -> Beta Graduation + +This work is too early to detail requirements for graduation to beta. At a minimum, etcd membership and quorum risks will need to be addressed prior to beta. + +### Upgrade Strategy + +- v1alpha2 managed clusters that match certain known criteria should be able to be adopted as part of the upgrade to v1alpha3, other clusters should continue to function as they did previously. + +## Alternatives + +For the purposes of designing upgrades, two existing lifecycle managers were examined in detail: kops and Cloud Foundry Container Runtime. Their approaches are detailed in the accompanying "[Cluster API Upgrade Experience Reports](https://docs.google.com/document/d/1RnUG9mHrS_qmhmm052bO6Wu0dldCamwPmTA1D0jCWW8/edit#)" document. + +## Implementation History + +- [x] 10/17/2019: Initial Creation diff --git a/docs/proposals/images/controlplane/controlplane-init-1.plantuml b/docs/proposals/images/controlplane/controlplane-init-1.plantuml new file mode 100644 index 000000000000..9038a7557801 --- /dev/null +++ b/docs/proposals/images/controlplane/controlplane-init-1.plantuml @@ -0,0 +1,53 @@ +@startuml +title User creates a Cluster with ControlPlane +actor User + +' -- GROUPS START --- + +box #lightgreen +participant "API Server" +end box + +box #lightslategray +participant "Cluster API Cluster Controller" +end box + +' -- GROUPS END --- + +User->"API Server":kubectl apply -f cluster.yaml +"API Server"-->>"Cluster API Cluster Controller": New Cluster + +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Cluster Controller Reconcile +activate "Cluster API Cluster Controller" + +note over "Cluster API Cluster Controller": - ✅ Cluster.Status.InfraStructureReady is false\n- ✅ Cluster.Spec.ControlPlaneRef is populated\n- ✅ Cluster.Spec.ControlPlaneRef -> Status.Ready is false + +opt Required only if the object hasn't been seen before +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Add watcher for \nCluster.Spec.InfrastructureRef.Kind objects +end + +opt Required only if the object hasn't been seen before +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Add watcher for \nCluster.Spec.ControlPlaneRef.Kind objects +end + +opt Required only if the object doesn't have a Cluster owner reference +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Set Cluster.Spec.InfrastructureRef -> OwnerReferences[0] to Cluster +"Cluster API Cluster Controller"->"API Server": Patch AWSInfrastructureConfig +"Cluster API Cluster Controller"<<--"API Server": Response +end + +opt Required only if the object doesn't have a Machine owner reference +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Set Cluster.Spec.ControlPlaneRef -> OwnerReferences[0] to Cluster +"Cluster API Cluster Controller"->"API Server": Patch ControlPlane +"Cluster API Cluster Controller"<<--"API Server": Response +end + +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Set Cluster.Status.Phase = "Pending" + +"Cluster API Cluster Controller"->"API Server": Patch Cluster Status +"Cluster API Cluster Controller"<<--"API Server": Response + +deactivate "Cluster API Cluster Controller" + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-1.png b/docs/proposals/images/controlplane/controlplane-init-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bbfb5fe17b5f5bb3db31217ebc8d2b3511e800a2 GIT binary patch literal 56649 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 OoV?5p=^V-1kN*!3IBZG) literal 0 HcmV?d00001 diff --git a/docs/proposals/images/controlplane/controlplane-init-2.plantuml b/docs/proposals/images/controlplane/controlplane-init-2.plantuml new file mode 100644 index 000000000000..bc1dd4ff2630 --- /dev/null +++ b/docs/proposals/images/controlplane/controlplane-init-2.plantuml @@ -0,0 +1,54 @@ +@startuml +title User creates a Cluster with ControlPlane + +' -- GROUPS START --- + +box #lightgreen +participant "API Server" +end box + +box #violet +participant "ControlPlane Controller" +end box + +' -- GROUPS END --- + +note right of "ControlPlane Controller":Watches ControlPlane,\nCluster, and Machine events with mapFunc + +"API Server"-->>"ControlPlane Controller": Cluster Updated + +"ControlPlane Controller"-> "ControlPlane Controller":Enqueues ControlPlane Reconcile + +"ControlPlane Controller"-> "ControlPlane Controller":ControlPlane Controller Reconcile +activate "ControlPlane Controller" + +note over "ControlPlane Controller": - ✅ ControlPlane.OwnerReferences \ncontains a Cluster + +"ControlPlane Controller"->"API Server": Get Cluster +"ControlPlane Controller"<<--"API Server": Response + +note over "ControlPlane Controller": - ✅ Cluster.Status.InfraStructureReady is true\n- ✅ ControlPlane instance is valid + +"ControlPlane Controller"->"API Server": Get Machines maching label selector +"ControlPlane Controller"<<--"API Server": Response + +opt ControlPlane.Spec.Replicas >= 1, no existing Machines found + +"ControlPlane Controller"->"API Server": Create KubeadmConfig from ControlPlane.Spec.KubeadmConfigSpec +"ControlPlane Controller"<<--"API Server": Response + +"ControlPlane Controller"->"API Server": Create InfrastructureMachine from ControlPlane.Spec.InfrastructureTemplate +"ControlPlane Controller"<<--"API Server": Response + +"ControlPlane Controller"->"API Server": Create Machine using refs from created KubeadmConfig and InfrastructureMachine resources +"ControlPlane Controller"<<--"API Server": Response + +"ControlPlane Controller"-> "ControlPlane Controller":Set ControlPlane.Status.Phase = "Pending" + +end + +"ControlPlane Controller"->"API Server": Patch ControlPlane +"ControlPlane Controller"<<--"API Server": Response + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-2.png b/docs/proposals/images/controlplane/controlplane-init-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c480bae99e25c5e788e7b3a725cc1c7cf568c735 GIT binary patch literal 47999 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 literal 0 HcmV?d00001 diff --git a/docs/proposals/images/controlplane/controlplane-init-3.plantuml b/docs/proposals/images/controlplane/controlplane-init-3.plantuml new file mode 100644 index 000000000000..b6e1a5b21039 --- /dev/null +++ b/docs/proposals/images/controlplane/controlplane-init-3.plantuml @@ -0,0 +1,53 @@ +@startuml +title User creates a Cluster with ControlPlane + +' -- GROUPS START --- + +box #lightgreen +participant "API Server" +end box + +box #violet +participant "ControlPlane Controller" +end box + +' -- GROUPS END --- + +note right of "ControlPlane Controller":Watches ControlPlane,\nCluster, and Machine events with mapFunc + +"API Server"-->>"ControlPlane Controller": Machine Updated + +"ControlPlane Controller"-> "ControlPlane Controller":Enqueues ControlPlane Reconcile + +"ControlPlane Controller"-> "ControlPlane Controller":ControlPlane Controller Reconcile +activate "ControlPlane Controller" + +note over "ControlPlane Controller": - ✅ ControlPlane.OwnerReferences \ncontains a Cluster + +"ControlPlane Controller"->"API Server": Get Cluster +"ControlPlane Controller"<<--"API Server": Response + +note over "ControlPlane Controller": - ✅ Cluster.Status.Phase is "Pending" \n- ✅ Cluster.Status.InfraStructureReady is true\n- ✅ ControlPlane instance is valid + +"ControlPlane Controller"->"API Server": Get Machines maching label selector +"ControlPlane Controller"<<--"API Server": Response + +opt ControlPlane.Spec.Replicas >= 1, 1 or more existing Machines found that is "Ready" + +"ControlPlane Controller"-> "ControlPlane Controller":Set ControlPlane.Status.Initialized = true +"ControlPlane Controller"-> "ControlPlane Controller":Set ControlPlane.Status.Phase = "Initialized" + +opt num Machines matches Replicas, and all Machines "Ready" + +"ControlPlane Controller"-> "ControlPlane Controller":Set ControlPlane.Status.Ready = true +"ControlPlane Controller"-> "ControlPlane Controller":Set ControlPlane.Status.Phase = "Ready" + +end + +end + +"ControlPlane Controller"->"API Server": Patch ControlPlane +"ControlPlane Controller"<<--"API Server": Response + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-3.png b/docs/proposals/images/controlplane/controlplane-init-3.png new file mode 100644 index 0000000000000000000000000000000000000000..f503d0a882948023fcc3a51d16d216db2c3c4484 GIT binary patch literal 48151 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

L+JcObz_Lv(BFWn&5zl_617y22L* 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"Cluster API Cluster Controller": ControlPlane updated + +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Cluster Controller Reconcile +activate "Cluster API Cluster Controller" + +opt Cluster.Spec.ControlPlaneRef -> Status.Initialized is true + +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Set Cluster.Status.ControlPlaneInitialized = true +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Set Cluster.Status.Phase = "Initialized" + +opt Cluster.Spec.ControlPlaneRef -> Status.Ready is true + +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Set Cluster.Status.ControlPlaneReady = true +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Set Cluster.Status.Phase = "Ready" + +end + +end + +"Cluster API Cluster Controller"->"API Server": Patch Cluster Status +"Cluster API Cluster Controller"<<--"API Server": Response + +deactivate "Cluster API Cluster Controller" + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-4.png b/docs/proposals/images/controlplane/controlplane-init-4.png new file mode 100644 index 0000000000000000000000000000000000000000..4323214401cf62594a60421ce4ff9a806753076e GIT binary patch literal 24279 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"API Server":kubectl scale cp/my-control-plane -replicas=3 +"API Server"-->>"ControlPlane Controller": ControlPlane Updated + +"ControlPlane Controller"-> "ControlPlane Controller":Enqueues ControlPlane Reconcile + +"ControlPlane Controller"-> "ControlPlane Controller":ControlPlane Controller Reconcile +activate "ControlPlane Controller" + +note over "ControlPlane Controller": - ✅ ControlPlane.OwnerReferences \ncontains a Cluster + +"ControlPlane Controller"->"API Server": Get Cluster +"ControlPlane Controller"<<--"API Server": Response + +note over "ControlPlane Controller": - ✅ Cluster.Status.InfraStructureReady is true\n- ✅ ControlPlane instance is valid + +"ControlPlane Controller"->"API Server": Get Machines maching label selector +"ControlPlane Controller"<<--"API Server": Response + +opt ControlPlane.Spec.Replicas >= 1, all existing Machines "Ready", num Machines < Replicas + +"ControlPlane Controller"->"API Server": Create KubeadmConfig from ControlPlane.Spec.KubeadmConfigSpec +"ControlPlane Controller"<<--"API Server": Response + +"ControlPlane Controller"->"API Server": Create InfrastructureMachine from ControlPlane.Spec.InfrastructureTemplate +"ControlPlane Controller"<<--"API Server": Response + +"ControlPlane Controller"->"API Server": Create Machine using refs from created KubeadmConfig and InfrastructureMachine resources +"ControlPlane Controller"<<--"API Server": Response + +"ControlPlane Controller"-> "ControlPlane Controller":Set ControlPlane.Status.Phase = "ScalingUp" + +end + +"ControlPlane Controller"->"API Server": Update ControlPlane +"ControlPlane Controller"<<--"API Server": Response + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-6.png b/docs/proposals/images/controlplane/controlplane-init-6.png new file mode 100644 index 0000000000000000000000000000000000000000..0efcef2201c6bee06d2840e552b5ed72c6fa8459 GIT binary patch literal 52569 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

>o6g@vtz%N%rK4%CXw0In(~i*DX%tE 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"API Server":kubectl scale cp/my-control-plane -replicas=1 +"API Server"-->>"ControlPlane Controller": ControlPlane Updated + +"ControlPlane Controller"-> "ControlPlane Controller":Enqueues ControlPlane Reconcile + +"ControlPlane Controller"-> "ControlPlane Controller":ControlPlane Controller Reconcile +activate "ControlPlane Controller" + +note over "ControlPlane Controller": - ✅ ControlPlane.OwnerReferences \ncontains a Cluster + +"ControlPlane Controller"->"API Server": Get Cluster +"ControlPlane Controller"<<--"API Server": Response + +note over "ControlPlane Controller": - ✅ Cluster.Status.InfraStructureReady is true\n- ✅ ControlPlane instance is valid + +"ControlPlane Controller"->"API Server": Get Machines maching label selector +"ControlPlane Controller"<<--"API Server": Response + +note over "ControlPlane Controller": - Process for selecting a Machine to delete is TBD + +opt ControlPlane.Spec.Replicas >= 1, all existing Machines "Ready", num Machines > Replicas + +"ControlPlane Controller"->"API Server": Delete a Machine + +"ControlPlane Controller"->"Workload Cluster API Server": Remove etcd Member + +"ControlPlane Controller"->"Workload Cluster API Server": Modify kubeadm ConfigMap + +"ControlPlane Controller"-> "ControlPlane Controller":Set ControlPlane.Status.Phase = "ScalingDown" + +end + +"ControlPlane Controller"->"API Server": Update ControlPlane +"ControlPlane Controller"<<--"API Server": Response + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-7.png b/docs/proposals/images/controlplane/controlplane-init-7.png new file mode 100644 index 0000000000000000000000000000000000000000..807571b0ef58b4461a348227e45a313598a22a9e GIT binary patch literal 51129 zcmbrmbySq=_dblGa8$wqq*0VE5g9rpC8Zmrn~_FZ5fBk+kXDhF?wS!17`i)#?(Q0R z?*To>bAI2oK7YKdrNb~Y&vVDV_r9)c?>zy}!8^ctP-bS8xZRsgbiHP@C@0%Hu*x7TfReL5*yBzr=0~}#^g+HX; z2*1V(^OlyO>IuHe#Zg=!-kdXimAoD^OO|3bZyD0_XrHRi#h?L8ftxAy&Asan)d;2Z zD%Cn99*HU0-O0R8cTD`4K=X^oEA{LWI_A?WNcHVXPJG3!>#^*zObdfQf9S{HmF7!z zdrA7=QP=p0A$oe1F})>3HtRgFy~L{?WV8?Bo{#P65Mjc?6tB9kubp)w3=k8B*zHc9=`eCv`GH zCp;{>zNccjA!@nbUYf`7O7Gu%<)A6|qwo`bv_b#-s=lF#8c{ksmZsD9!kc%yM3a9m z@18*ME5wzCZ{F$rLT6z@w*Q(?9rrHzu=d1?2BUPgVWq$&)E&&+J%`RuwihEY#}zNO ziH6O&5o$CsGn0EuCC`{+5{^R#`x)NyhmT$!E3stXx>s8_8Uw8nYVAWoBs1_eM_>w=(|c&B5FV)Zz^so461U zq^Vo|}L67u6tZrV<(R7;I! zM>UVp?JMt^>Y zQ)kGz+cV~2V0dFZ6%|%?8Cp)j)+XFJ{XWRY6>|5r-}sZxF1rUgLibG>a>xeRvPVc( z`5!7hEbMBMGN+pT9va2F$J8qP?&8gxt3Sxn7fw$*mz??erxLM6jjNEk?ScKH{LaXu zF0tYwPM#G>a{g+&3FXE1frRF)-XQG1hV2siWCnj0|jl%j*A$5U7{n=WjFD8D_XuTWqrR28zs+1-tARzGJ!v~d2 z<$!o(MYB|~u%ehH5FO?JY}N1eCg7BzxzU0NQBt+8E0Cr4{=*&LnZb&sRnr^7`K3tglTn<}RjO?P+q{v4g& z%d|2dse(GeAKgz5<`kbGVID!2IXe77Dx`V(wOBDqnvL{(p%+lalHD4yRb55=9*0Hl z44CYhC22=HOSJY<&FX$$hYPgE!VhtYgWkOho4A09HQ#@{kd_oR`apKBF`TwJUAb#S zunkQ7lUxGN=E4VZUJfIX4c_HEmXrh-7{DCA zC-36UXf0X~mt+KYW=ST?3h=n^=dru4j&KuatLK05yo-%T)}dZ0KG9Uj!KnJJBL~i5 zVazEgC^!{ssU~mOi}mKs8$^7i(~6?F^Xf$ER296(+4D#2ypA zL`E))JsC}}*Q&NYyl)aEJ^`z?V+k{Dr!d~mg`b2en3|dfo(lW$KlkS7n^7`XkJHkw zM2~-t6zkN%QdPg;d$L5Z#R#%P0IQ`}DjcN^R|u~`2A|2v$*m6LCkF=yCnO{kl;Paz*RFIW$>RK8TPtD`Zj#0BI@3ge zDlRK4yW_=hE3$K`KX=K2M@>!5{1!GgHW8z0OKWSkLb5nJLoIt;%O}09I0%#>*+7_N zlz?MbNYz8+Ut{Hq4-5O!=~X-V@Oe(#ki=yS3~=B>YUx^whfASZN=EANo!wz5+;MHJ z8d!_Plnly5)4U=<&}+;!{NZL3p{j9jk(ItOg6jXgHx`+J?^N%R)i?&%YP83uK}ABArmh zmd3^j*?PV;M;V!_*@qhqlyUBYk&z8Ts=)x60GC1KPp_2vo&zoy&-GdEV5eWtSZc7q z7flx0p3w2j6d!cXqZu3)TSBiAu3Mq-Nzn@>zd{ZQ2kf|z#ui`2W8IJ=(TTAI| zU4<4F^k=q|o6-&!+1+-nQjYwOb@HCq{P4YIEM(5o9`lIS4fZ)78z*l-?`)e3ii?X= z+xl{!9DRJ~+0s7wFk~eez#}9E27)-E??rd2Y%ryu=TtrJ0VyFNjgnCXyU0|1(A4B) zTaus`IO)Zf{Y?_=KAWAu^5f&503UxaxV&h0E<`fNM+iJT#xd^4&Okp|eU&a5Ujhi9@J1_D-wN zMAlgOW&Kkci(%h-yq*Ef*@z6_5B|BWdQe$6JUmRIpJzwVcjULz zAQbiC+<4GoZ5@Oj^bfEl^v|!SXy^LBpMs4>|NMG075+he3TlHse<_^EGrGcID@j5w z-~NKkP0KB&&o{{Kl7(DKqkZw?=D~tR2qw(-D0fMMwncAdxa$)IQpL>Kz-f7O*vsA# zgAGAg$l6XLgM}O0U?-%T=nzB2gq221{D!I^`Ws~rX3khN6+)^7gTQtd->s z%Sfn_@#LPoV|nZ`FVSBZ1(#v3px5`YLWKWvr?%7{qJ$SA>b73U}}s<+m_yICHNRI2qXZ6f$yh zuon{-o4_qDBELiaa>qnaU4rSy7OgoUVmUeI4HP&d-ZCCkwZM;2@(}BxuXGaP;#g|9 zR9ax-e-G#uS<*rAw}p<7PSwNuVC%7n12{38K5!B5?7pU?*al)E2rvCJpxR4dOQIi> z6ALyS8HL1i&?nUb|Ne{r=OY{4UyNnp@9&tdpn{yLjZSipJ^-&F zEF;r0RBQ=gfXl>>%PeF)%49iob2qaX1v!puK7Ob)b_@B; z#&#J%CT8ZKYuF*oV8%%B87iOa`+j#zPb*-eYF_yw9g%Mw35}tZr%D}&pmnS6F@<%+GT7!Jcq!m zj~1CLJ$Z7G2=713r!CE2S|pk0#EKUhM6Pp44}lO$cm+W*LYV)UO<&ka?P?vKV`L>+ zJ-({W$;+8TES;HdbsbdQnkQ93&6YBT(Y1eOBiMbBF(&x>vtN#}HH7BR4jL+W0#eWS=gNmA(`tIF{21-sQQcmkmrIi${z)YvN#3aN=y^u`vw}x~D zHEXB~|M}3PM~|49SH^36;yA4}yXYs!)((C5bY3L+?rE$GigHFVYta-owiLW&Li~5N zH<>?7PaEaG?alpA;p~-+!cYj57dV)nIzoI;OY$VSb?X)pQ5wRprKR;hmTC#L)h>G> z%w%Ag+o2|Uj54;L%soK09@dOeXLhd-~!RJ@wNgk3jG{|_zl|E{W+Sj9g$sJ zTo*xtKPTQug2bTG8YlHe`%&O~&pr~(_O~PYU$+DwesKl!?*k7&>mRH7|L@}Wf{*G~ z;5oUt?g|!p`8A}@(9{2(NN%6M>UY;a7q~v~T!dhr&*bmf+xaD7w}v@35J1DK)+--W zV6j(OPao}Ld5f2P4CnJ$%~ZI|IUAq&3Odbz6V`(MJ-$^~u2 zNXh*d0pDEmMMkd;<2TM{cdM_A@71VdLHV_wP}Lb7POL zM`JAsz8fpIPuusC5#`2sUs$)XXOcL4Q|r^@{(gk@u0x7uqPe}y9!m;@ z5xZnw1%B7hYM)o+2jkfw*?t2&vBJY0@*NU^p8b@b<%< zDvNcnPa7aABly$i<{k+o3A%eaAm>%8)yUs+dH;QrD37V_ek7w{ap>+S9_HXP8=LuN z@mY@u;$8Sw`DQYizX42y+uQ0D*nq#!7!G&o4DC!Br<_OC2+82HC`HrZPUoR&$TXpa zivx-?0>o$#)d1LHwX(9ZGfF(Zy|^nd?l(nhbbYBkHJ-n@KtWTOxAoc^sL^q3RZDjM zxABgUz3gaQ%$b1!yH62$#{q;5d&h6U^8GL04W- z%9`Nhtgr1bkM!J=4-%^*wEN=1ZB#SOM-~1zQ^Ez7CEf28AoQ{;s z=I5_rVfX)pP)Wn?V#`;%$^(H#lY}uQ#*I~P43Kv0*0}!m2iBI1?Y{9r+A#U`pw}_N zhr1rO_3ul2J5Nx&M+XPnOZ`t1*iGABpgOfzNry}|ST=&r2X5td_sP4lfpOfOl~Sw% z{no&=+cRAD+drE&t=A%VyXbbJ{wn42w$djPJgrLiM43id4%YbO&*p@|QM=WprD^pl zEp>GoIi0h81qO9)c99NFP7G?R0Z+pZM=FZ-m>C!>@^W)av$M0)Odsw95?>+SU8kcV z5@jT6fNZ{kii+=E!-swijhSsF)qz#zCMWwGqo%_j9{Ml!>q)5QQqW;P4Y)}$T2Txr zZQx0?*HxNe;vn{HL81?o!Inr^K3P79_~yeUod;WS#f+&Qy3^Snn^eFxhDtm_EcUJm zp1Oy4D!HtVD9H1x2q)Y#t#L-S=DTn$P~JVn?#os5AO9lOEt6qoOym4^s*h_tcuULa^!m`!ddaAUCgG<~2ld_;bYKT2nK)IaCwam?6(&av zswK;}c%7Ko%HORF!_!rng-&#{ zXLTw#9=$9hA$v4rtm(yqxLaY~O&jKVx^Jij_e^lzwX)1NAi;K`7^1~@ah)W6$>D>5 zYiaIos`;g$7?|5yTB_N_%;!&0d#@Bzsv_iz@o7=iqWtMmtnkve@z1cjAHQRFzUX<1 zk}z(H7%DJ^#b1ttcrDJ&8M1qsCmHwc`*GE`#N3ExLAgxTC-S?&tom7crtke)!IrhO zL-;BGQ)4R9K4dattonxc>se9=bk%LMaWjn8NS!4jMcS?TwvTkAyX*RMD>Jhd-D(~) z?YjFSw^>*F@~5^6P4OeI?X3)B_XPj=vA8_ESA23=!6QfQ9gl-q{^6y(6C#s>h)s^X z$iOMmgYOUr9$Id^R%4XwPGVH83_K&-eIkwQiXiIt)|%JpvbcP^!R%1qVZ(c;m_c5m zlVkhJqBl&cGE?8%M2@B}$jiG^ubEsw=+D*IdW9pI3|GmTGx{VJh}9%^^!?Qxa~n;2 zv~@KJ@6=#Zf8FugoMxD!DHd0lmHR%InDv<_AS_KLv2e&V<}pkGaCPo|W&!!g>a7Qq zriXW78`!QOF%iynX+H@-#|P z447khLpFNmLioW3hr#%b_wXAb(*;y>KeV95(f2<_m5jwhjn>>78)A4$_r(`a5q=Ew z@L`5wUyNxe(rlDxVEls84zX&Gu1%kV_t9)zhP;4=Zgs?xp4a1di@jMQMn;0fAK6o& zYh&bv6KMoqE63q9*eHzT&vG#ZGe~mIa?CGJj86EOM9a315(EVxa z5FaxBiXsCsFXD8aqo*@+Lu1u?^g3LzkX*0jfr4)oU)U>NZlyhta!Dr_WIFWIj3~eL zj4;0*Qn1GtxnFe>A>vOMXzMtCorY1xvH5xEasulCm(m;|@>yddZFkO%wSZ zlupY+-RiVn=uQMS=KG|rhXR~rWXn5A#B3kCW7)I0iLMek0fpS3{dg)kNn?ui&uJZ! zGJ2hc`Qv*n&CKMCJPr40YR#TsgF`#kxNJ~&GvBWc?>RPx)fpO$Jv`uxJoA340`kD& zWdypo67sq^CG((wJ%^_}pvj4nvDnmZu0IHaKXS}j$Mq;+zVgm)T2cYyfJsYK40p9J z+qdRtj!qn7?q1uX3KLhEiPduD!UCzy*ogDw&vz_3vDJqbj5Eo&qyoVGmprfed5x&# zc&A^E*t+w}tMV@ls@u`;==I`^4S{LOAJy+HxxId!xjTQub9-KqJA?(qIj0r>MJ@Vh z=D^LZt--1TrQ)SDTS1elBm=T1l-( z^hUJNNA|I$Kwc`mY*!Mb}Q!aUskQuIwKExO#^M<<_?c9!Po&(_Fls$Ty7Mp-c(@_M@%O!L4)?emib z=P}~vY@_H^5ehiiY6!41gX60mF)0y+Mr}8@qVuKLv;Y0WAoW_)qfJ7S5)%1T+RxGfdym&~Qfd zjFJArm{h>X&tw&}a0f&pQQh^Ra9Vjke}A`^FS)t7d(#!rl1PH-OjBe#-`4xWLVF;m z(#R*eAMIK@4r&yd92_1F4Gq~fo^#=G(o3)lM%OPQ*?1Mms2La*H)omwi*wssweHVJ zVE1VFK;E0F5)KE+pvm34FIdMjqF#k~XY9Qk8?-=V63jQJKGwk&Ga9feUd8~de7_RAnhbV@MOQXvGFN6Y9?AQRX%C#vk11c^B$Nd z{VhkH1emA#?K@zm(QJPUQI|U*7QLCpo+wuoz2Nb>2$){boQ#wdgX*`B?AmZo)XS~e z2~rGIlfbD$lO}qdPfs|Bk%(fL0tUY1kLiT~G(pJ03jP5hWYs0RemxIlD+O1nF=v{i z_41y-+B7dTY5gglqg#F0ujd6!Qf*o^24*`Yj*lPgdyPo9%0)pSvXhWm6YTbEf!HgM z`*c3U0xE^k_1B0&BWqy{pfVBOzCG=kRN=T(Ussnw39^?oTwLmD-2|+@36dX+92Q@$_a-s7LfSeh+HF!Q84?IYom97k@^S*oP%8fD2 z7UDC}F)o6pyL5RQ<7n{%K`?0Wv*d=48m=ertnQCHkGy0q1i1C*ek?VvHQoZ$`3J-< z7;3cyw^mtGd01_@O5d=4AbJ7kpuhP7mH#U;oQ>K^G*4G}K2;O`7{}jbU*d9YN)`MG3-Wy|r~ZHPh?A zr{ArZIzd|A0Gaf!lV-HnI<;Op%83>?6%Le7B2~mF9ip1nW5xC+!?I)h`d+REf}lE} zp@2>{2ZD7Nn$?fLqK$`95X(G$=>s1zz3Jw@$ka@Pr_lz?Fi4`D$0sBxQZ@=Vx-}_A z;1&|W54*e43`Qy?vIUm2Ym&+A?wr_#5euIXuWB+3yE}-Q5CIl);0vbXT&ebMtvaj^r^2G_mf9|MgyQX^<8;ne>Ks=#ilv**4LfM;S)QwZhA5wU^z2qKn>{F@NbZ zujq~mbY~!Ffq!Q*-mk}BfByTvXvG){$b*N0m?6ybta$rasJac@?~r)_C)5jRNaOrD zwhWoJCJ5qK8y8_sB1fFkDi6*k0CYX{IM2y>T4rBQ%o(upPPr znxk2h@LOITk>b;94IJa6hj6BwqW>#saa*hI&r)LrbzPg9t!gEZ=I7-8iw_eh&DUzQ)FdM%ttin8(rU%hxVmy!driSXdZ- za+uZ94O0DLfrJ^&sb9ZFFllUp5{9BwJP;KyvGKMyHa2#5qb?AuEP>oD-ynC>yANdC z1~$mH*vHNN{r!D?s+An}4StRMpW1Tsw}P@vXHI{V;T^_3&$$$+qJquw;mbWvJRUWj zVxmm3#P`Z=!veM*?pdHxh}Sh@cmCLOPGW&{n+V(8=VTJSonE&0lB)34%>A=dr)6>(zYS2D-paU|R0FKZHnVqvIKrm7br_90lprj&!w-y^x&TSZo3@k>!l_iPU^PQ#|)}R zfS(nKNi%MaD)_|V4w4Figv>+0G5`E2YRmzg^6UY~OEReCFyR^-+YZK?cc*G-V4D*+ zXDY3Arz<4ePSs~PUc<+imy?Skkd5cc_e34e?pgzH-PP5_6lJnHz*dgkbMV*+*0`v# z1!v3gIidN;SYx2ldm$)!UOG;*TTb3`U%d8Hv`@rVU+-|So5Nnr!lMRC3d$a4#JC1M zrd=Pzg_32Qv!5?9V}g5)_2clP5oJ$@AT%)X?y^n`z2$43Y2U z`KT4T0Yle`JWh$><&;^y5WYpa>>l1*IP0aajg69JQ+r*PnTbgv5o(tb7scM19T8_Y zR>42fXQNqpMS_O!a4usV_mg$dnY)4sPg5d8Oy&`x)Y%FbiOX!K{MeZ=c@pG^qp(s= zh^n2OoSGbBgcAg%VH@4@g1!J2xw>Lqy7Wz_QZ=~tnrF=R_8}8VVl&*&ze zYFEecYULWJ*Wr)~=K;k?z^I>UZbh@|aoXs`X2sRH#tsjdCV4o4e5%GK?qCQ2JGkUL zMKUq$7P(g}7oX3NUvX4+Lz+yToE=iA?VRb9*JtarS*bjA6-S{dy2F;#`ft|?Q)y%$ zufN%2sopbLj>~zV{W9_DA5OUC%cve7GqbFw9jKvFq3O%j^P2n_pq8sEDVGN zv@L;GI!i(77Lrb*;H$W~0ky5IZP(lA1>o5rXA=~lk>)JVXZOjy)z$4t%e=jsgw)8y3yzfwk!f<(tZbN~QBB#0@wq_(TOn^7%?&%EpY zO!L~OPgFBI&p_G6BTvD|%1Sp-AJdz=xHeM$2ppsD--S#~=YWIB(JohvVOiM($y5>8Xf4WzgCyOBwzk zZe$=u8f0+?yP8aEwx`_sR|9l;S02bq`ZHEPU7AE8;*uhr0OCRw<8 z_^FMfXCSX2>FG6Vd&8}q-04u2q^D^R&(ezRI&sM_h%YGU*$lmZ281_lP3H57;j6%V7qC+^g# zKkfCl-FAGcZ=pl(SsEMt-#!tF<+`ffTw4Mf)ZRn_ zw_5+vkOWUSf;#_7@1cXLxAxFblwDHd`vD1E|ASB<7O~*)@hZMN> z2P=3a9B0%B9liHACelniEb9KC2!DVdNYIgb2^G%1u}AP29W` z+Du(fYZU5{@bP91@Sf|qWB!3)s#W;W2wFJ&0!A>SR*RN^L8xH}18LyZ{=f|@E-#06 z?gnHH#Jl7%5b;BV&xj9|*0i@3ligL#Y303U@$5Nf@-~oJ2Ct(rJvtKzP!Km2Y5uOG z!AhbE)NK6-fF3l|Aijj80w6`G1o7%)rPKD8Cp$Pc=dYeaq7J?IaR7;o0sPV36KW@@CqB`LgsDkIn35^ z4}l7J4!rW*X^VcK#NSyupi-&?u zJ_C?vN&CyC@UoyF-)j+d#1y>v8GhVaOxBj@`x#w747>%_+1pCtI;%c9wErp|!9cVR z8cdIc_G+pyPU|AZ8etAQU86)!?Yi7u0-o2Ac?XnZV`I5hn@yl}f$|mfBNJbirMqO) zn}1TYh^;|`?UPQi>USkEBPPca8;`n8Vbv2WX2Sa%X;2FyfMN!Q2ZwAuK*lG`XT{&G7rEbFC3hhl(JgZ6KW#^7#6K2LMLoe zMy#x@aiuJ6rov-l%-bMu3QgNxU0q3J1Z^ipk9Jr1`S?Ht=>v7B*N9lsAGO3m+L1`T zwC>B7FOzfIiN<(>lK`q9qv@6EM@K-}ktz5i1+|$F@RasdX6t#tig@Gc| z5#Wd4zI|)8FRrdW5Ccjc-dwpAu>gRET54KqDyKycB9>$^8k%D;`>yT`i-X}G25t#x zV<375pCq$8;W<6(GW~drD11Nnc9c3|VuIJ7h*e9QAmC{OEq!fwcPj59S?fW4nO=Pi zleM30FVHCBwt|X^irV%%pS^zn9!F14&(Uvt+rfArR7|k2ur$4R{(O96s-c&Z1{Bc^ zt_K-5d_ZkIXzon5NH7*k@SH~6u(U`&4K07Cp~Upt?9Z$p10fAGA+OrbK?Ri?#32gy zy81SUZqZ|pG=|hTi$U?O?Ue3k(SVz*)!SVMTXVQ318^@dGqd!{%1ZXQ>gwvozA7Gu z$@dXj@GrN0vn!Qi9zx8!!*R>F!9S)ixpOG3w7EGZ~ zq?M>17Sek}O5-82kfxt=RJOARX&JQ+5&M#y%&Jp?#wB_%_ra0Zi)JZOkzwKC#iz27 zjA~fHVNZ5@%)rwS2?^PRk!pP`HkVfVD99J==YM!qB2}W1%1Op6gquyGR$7PmLioLokJ}E}@}r;;~z}s57g1 zWFn*LQQOc!3sxJH%{+XV4=RcYJq$t3p}xL;*K0UhMXB}YbzC&k-j|^CP%gIUrSv*} zI3=J}V)b${BMoRZIfT8S{wU>CJe)?hM}QXWkxE)K15;l|bF(zTm7sSqjD)|~=qof! z#ISQL=~(5Y4STlYYr#^dy_~R&$~?+|!yi(6)Z0S^)Oxbg-{7Rni^OaNtU`;%_I{)GEx7gudEyq7Z+D|Hd2JHHktDW zG;1M#b251euvm00NOSe{NfKuRgu}@2WoW8a5=G2_A?ej$1uAFNBDIk9AhHkk)Jk}q zr|!jSZdZWSX`g9(zdXDjFcNOEr~D;Q57%i$9lBCpG(iXM^Os!6_imVcK}7yDpx&Tj zY<hqj_>_V z)-nEP*~}R#Iae+*{$15$xC7!F=JaQ)e+T__;BE@ew1ufq&ToTP(2E6NzchV=MoX9ZCXjmeh)Tg@0Ugb;_Fb~Hb_j``Iw9Y z0^0z=pz=DzLTee+()xy?W1~^kn7bvJT}`8Pqm5%3hqro(oHRf3BN2&r=1U6+s;aB? zUd}{<;yi(i$Y*Mc3k#rHvH8uLORG?Hr1yrR%ZjMg_QeIt{U5!6tKG(zaJhHM~hOatyi!v-RawUSg}*Fbf~Pci5R_lY3K4N)otP@!rU`|3tr2 z@mDaxmcNw(ao{;X$^QJ*)YQrfGbX#m{|u*h`X$OhO*5!xZjPXzT3sCj5fsQE7Le6k z?efXV$uHH*fGCJbA0Ho&jEtDH#b?O$3~+=KJkof(;n|TRh<3H0R2%r)po@#7%#5Xc zw{0agkEx$X^lW4$%TSJ)xx6?SHx&6mPHtDEKj;TMnp7cu&CF|jm~CX zX}NVxr-!$~z9{|2M2&xC@4Sh&zHLAf@?>zj1P7Ox!7=J8qay_&yNr(cdE_ke{uMdH z^;(+E&iQ|Yg1NrGuW!m&8ej(?n0BuRfvEwJcjUP%@RmScaR>2N@btLwT%1rgWz$Id zKeP@Km@O#52K1HhXt{8xSuTeC!TtNwJsC>u9vz>A2_daUbuxqoRg^_b@}O8Z$PKts zP_ztK%>^Vv(aY8z1u+`m&zov`F*LxDkSs^cvZUbTd^*~+-sZ{6d?+ro;q8IBOJ7Ut zmq53o%Hy^rsIVMh&YVh4?EZ7ak86NC9m0b1<-Hp*il><-ol#a^UJWk}C;}OKm)?UC znuYE~GmwD*weG1n=$0GzgU#8Y!7p?PYla2tzQ1BOR`|{p92`E+<1*LUpGYL~D>NMl zPl_W#Zi80|7}87WzYYGeiD*^GeJbhEt7F^{HMCTC5f+-VHvt+h*ti#$$G>qd8Gru* zeVaZH@m;Z6DS(_tjcIAB+AJs_lB-M)pn4~q(t8k`MW*CMsbbQm#d+ZKdleGooI%OH zu{xGfkBhA@C{wT6?ve(=8swuspjUuRuCA^&S%F@S*}g0s$)gj&qn~YUBPiSqbWaN@ zhgqKcf!&JnPU(+B*++LC19P+K$q_t<7C;C+i(~Fn$j$-^RoVfJHQ1TQMiBoh3G=zhA**$ zLCu==CzY_DqxWAZ{`3PLE-{Jb-R*%8!<#iTKD`T$$BXa(BDXbZiSdC_T2TyWCkPZD zD96a&o>|^6A+{I;O&E4O3v4=f$-8L%@7cn!N|M<|bV3G75CgAu$UIa=2IJ~9v zqySP!J(h~J8LN7^zdixFgv^ipIzEf|2MeC48xDdZ^pKG28Qz}#*8<~A*enXJPqlXD z2wEEhC;i)5Bj#ZGIj4S4ks+z>dqbn6+9Oq0-DE9zo+iKwk!_kOmh@}E?<@#XPGK3q zlrP`L4++k6Q9DRof(*u;7Jf)lq0<$nQDxMyHr|V*DHUUy@oi$g-A(WaFyxG_IAN$O z!A4lf1=OBWjFq^=8J&;m_6A*3+iOVVkpTNAfoJ~{aR7)>VK*Zc2+IcM!Srp?X0-$KTec+cpHuz9mB@v`;ii#XHI>ywvRPsUjhKOkKC z=F43`sYf%?m-Jd7ntq4a>DyBRP5w-){~z=aU7U}ms|DwX_ZNj!_e0NyP78RXb5i=p zJRabz7&)Qha#{wUX{y91>ka48b4em5_i`9tGt05rh#^WkN7B8CC>2!>!z zBo9Z(D}M$6(9Z)pQxZCDvnf>q*1#M3(Q-8l!VyJuRZHPpicEydr2;g*IpYw&&U=vi zDrp06uIi;J+q0_VKTh5B+!1NR5VM9(RW%ILDp$bC*D|o@0{r&C=#PUZ=nTd`cq#Z% z3O;xF&O)d(87V_ke!cTV9(m3q+yYfeVRtYsiCqjnyzZDkH%6GOD;9(<= z)Bj)Y=r$8_fcH5xiy?bNXCz@cAyZJnLqE+Izmcpcy5N9PSFDOhu=}9rtx|A3#1pmC z@3b=X(#3@f1&SH_-Mb)DbEc4>i537qKOnpKBdjY& z|1WylpL4$APiDDg6o=Q#!w1T3Q_D+B_gZ2eDJd$lKYFycJlG8c^{RQ&rtd(A0CK_^ zumZRctjC#{vL2+}siz&glS~@SiE8$q>T>H{QTZZy<;G2b=v6SjXo^KTF|I6+YiBuR zC!m}bkqI4p{s@!M6m99jp&^TClVt)BW7p}X_1ScKB+K!qGVMJ+Z(gI7i0?@c{#h45 zB=MMHW^Q(Fc5+v7C%WxDx1qZ$n7<=X$Y_EYJA+?gVju4BzYRfnzt3b|0Q~FV=xE8I z;?t*3)Dj=&k^10n=js2ZS<7e>wio}05b;>!Q+YiKgbmPtRTNm^aa3X!kd%}JI8K== zXGy>I-99TkYh$#WgAvkj9(gyY?q;8!As-155kIVGd;y;6bkW)ZTz_92rQyBb5NrJ$ zVi|6VzjkHjxhss8h69}EA3AbvAUDCJ?((2g$JWh+v(lVo|jWIv8s>jv{{lBWk zU*VTyw}YgkS%Qck%>oIzmqqF};~(&8a9B6oSG|xMT_S;Q7XuOI>N7OxDJ4OJo|sXT zGh;39(F)U&f~qx=lG5ooiISc&F4evVuu#2wp82U9J{J@soK%LNn(@g;vh$=wSkkW? zUb>Ax0C}F|TKly~%X|vmE{B!~Xo9mq+JqcP|HJ~Ix(Kuz_eMFmx>m5euM9ojF?pR2 zjTi73itWO|0;Cl*8Rp<5@w@c_ykztWYe|tF2; znDLYP>K9HgR8>R)$cb0`80Tp|`Cv)J2xa&n@%#*yRW?z%bM zh=ohSqzBWkq(e3RAETfX>in$fpRaFN=;~E#bfo)_%Hc>CEjC*c7stiE@#D?4r_|vb zd=kXz&#HcWek(GBssr*J$Uyac8$+@U{@|Qf)n|(X+6c(id>#ALLDw-NK~GN)y17Bq zb|)PJ6%`c#c``Z8MrfNw$F)^}8ol|Z&ytH%!iRxtlx1+y(3_#H_k!`bV+B||rs7C@ z_mpt)D8B8Mx#W!4i@f$XD_sjDVu7WdQrLsoz!3<$yK|h`tftrq3|@o5yc3ejnZ#fj z!H_`i zUd7Fyryk4026|3ol-_|7yI+Dy!~^7Y9*6mL(DrJ1n*g-M+`Jj~@nbr2=U&#ZWx;hz zPVBS9#D@IhJul2@0(40BhVqTCK_vr^|A8sygK*;QRJ9wdSBTj>lOt;8BTSUOUbiQC zj-Ez-+3@7mI!3M`-b2Ezgg%2lhp?2Wcme zENRJve$y(=5f36E5d$srmObeTFc=I#=}FDsCu<*&d>_KE_;#-HqhSxgS!V=*{jYx{l7H$MWQ6_!T;dXnK^t8}d{HOc*i+K<5aE-B9Y+Y9;8Ugb9 zW2(2mk&U%s~!2fngSgV-2wVbbh$c$i~FE2dgb6RqhBxF`2!L94Sj5D zMI)Uv4kl=NF&fjmDvbFo2i?b!I@4YBR&S5JE-oCHS zrN1}(tWm2T^T3aNIOPh_2WQ>t&+fSoOeked)9=k+sad;14~p=Ba;kUHx(J+~S3AUmd3SK!>uXoc$x+)=AhvRw*Iqqc6v zlQa5z^AXk9Ei1#dSMCM-k$soG)-S@1{y=E>-w1h%^wLHiAoY{|3V7~5KmDQ8>oMPF zFsO2kuA#GM*M9=+b>ODQy||i46doV%KJmjBd?A3G_1Sv?8#y}}*G1d*{W8h4#*XgY zy?bHiI|Ljluo~ybMR*!;|E7HU#YYhUT5X`u-MJnYd=IqDP`vPaeSNspIqO*sfAH#6 zAIv-F9~Z~_`wV>mi&QSS*uSS!@YPzN4F1Y)obnkyAjxSJu;E+pN9B zn$gu|K0bcgvTr*e2-iz;_EU94>*@L~3;5m)`2>F6@y`AF&my@HOVu378?;x5xm?zF zBn&mKCML2lYet;z^h1j0oE;ruu8xwh4cv$`Cv~>yn~~6#*k1M6l9Q9V_kv+jIYnz} z^3aHn16rCzyw0$Z9G#Sg8Pd}tQTe@vj=Oo%(G0=gAs;Bcx|_2)-V=Y$$UxmUX~T(B zh}lQ1F1}R_qR?Tbn-6ez4{sQ`@ZRn`rh{55@v*I-IEcUX$iU2Go$z8rhLTT8@#4Ih z^R%S=)Io}dpm~=)P2f$`JQ5xiEUyoc=rg!pbeF(kdH@`rB{%mhO)f*kU$_7Chc1%x z>%r=hR!?7_cqPXa%}&fC6d%71PHIB~{4UG%#Aooe65M=M2Cjz~L5Fme29rPi3^Z0( zE7bI|59g9@)DI67TSn#^E-lFuKT183X62{HoM|d27Z?$V**}Wb@dyV*9WGh>;U<# z1Cpt_GnDtaIg-(*F7G(-bA{TXm-1$)nc zp9pHTP__7R2yf*wGX>iGi^M16J~RL#A?l@Ycl|09=Gt({9%t&V3_W0G$?5B8QZZ{W zDVY6|P*dYsaKL`*eWAGM8h~(!$-0SqK>-2PmCm`l-p+!m*_xo(hUMJ0G`xQkX1=5Y zzv}9h*0|cQF)mAe>oq=014Bbxyu;A3k=~JGJUk~a)Z>9^3FGFIqsynjhNBthQaRO? zl#b|YiHUD4I&am(Y!{WGmQs)Igb>=N$wfZkpm+d!h(mIr3M+@onbR+q2S^ujZ+UsC zg;zE|->Ne;N$YS&?DSy{!m z$gGZ!twycQ(avgXj_OQb9nAX&3v0u|T;~wos^Hrq9ygt(bdZS6fBZ+Bgh%c8#Dm9t zd=8t=V^yi1o;ki(xuq;OE7y1|igr0xq4N%S7FycBz$;6ep@;b*VI-YGx@A8D{B#WY z+>hT)*SZIR9Mwr{p~?KDLpkV#GO12T$ll;=s%RNS?oS1m8dElXSCW63tv&eJX4FlG z$>^O-``He$!)3TVk7ZHL^5#rAEWj?m(Mx$LpHdp-hj<+6T6WWX@9s`{a(S;ei&x+i z6f|j5(a@NH?>YiGUuikHHUwh)TLZcP>lX$PXQ_rOB>M%k=NUFMPu^ryb?8WhgLAHw zdI>GzHDYCTS%23iGF<}F-Vy_Ip!Fi3uLBm**$HIXX-NM%VN`+!nF9Hkw1| z+ZDQ6U?~qDT1WUNOs{pNtUP&gTu`cLza@R2W|y#5A+f)}#FkMlv^VxG_Z=j%W6b{x z#K2&7%*~`4%JgT$e>X@6f^Pu$t`Q78&%dWIal`>&uxF?4whuaI!|!_~bI;OAxo%1G}mVtVGOat)+!^?(ai-a(3nU6dZP! z*@!*Ys@e3AU)HK_g;hsd?E8U)dgN@IwZ+V&YR!zg4EYGk7eBALIFpeHvXCj@8y@=5ZKQwi#7=i*6^lCH3@{PCtVJ|j_RpOK4; z7zAQUOM9eQER_j|Z}jW=9PMT=taz*iDFOk{$}p#f$51@|wt*ZbsMPC(sAexd%m3n^ zoScw^tZu_3^q87$)o0gAkxFc9+bxifVueBr%1^i2b0OB6IWP1j0%&BLn(&kbZ`#|x z$WuyOmXcm#tzAsh(8(x)e$zQJ*jXI=|A>3*u&COoeH055F$i@KR8XXqP7wnn1Zio5 zu0c{-MLLAv{_J*cnW?|kPv*ZJ$bfB0T7!_3~#ex6nLz3!#J zY&=Szq3k==>FRk-S~0AqUyXJkR;{X2BR62zS#o@?j%@(NX>NTR`_99I6uSmuPJv7+ zITlkLAU4oogLm|de?4DBBfvZhed%V5>P3%ty^{bug7@Hgl)r@=00jCcn!yPD)8oE} zr~Sr-_jtSW3FWGarh7;vfCZOwb)ZHzjLI*`M|RF0f8+-L**pq@5r0D{G9AxAkK|Zx zHAf5d=A=#xMwyvrq${|f1GEu0Ue{%Wi?t`jjI z;I`0A8_CX=mYNR%8yrpFYXb2`C&wI;8}jy7s8}tIeQ`UB+SnvFv+9KIop!<9508!q z^RTsb<|d>vIlTFg00if#V*6v9waFK(+gUVt2a|8FlxyzY{8-^pOGCTredOpoiY*S) z6Jy+Z?Ppt}dP^0hAV#Rz26HWRRzBIrsH+LOHA=}@PU2eQE2h!~jr#hylq9Qt?vt^c zBrg_~_yt4}j^UmV1|`Ao-e=AX)I^|zQeKtTv1x-q+D0UQxA;mIxLh9HM@AMo9jOOo zWHwrsD*r=RAvv1&aQtj%ZMD4e=7Lsj0pgd>2T0ZWo5_Z@L9pRB_~FA5a`MCOQWVf9 zSp_%v!VIg)6DwZW5OFcUudO#^CDx&OWANvbRX8S@)5PFgedJDxH?(||x)$ubBYb@FNpKL@3q;u+z%+93AQr^wT z&CSlpFF|7sjCu~fv?-8F_zBUJ2y(ML@iTk3`AlSkSgE^vyU-%nxOoP-uY>s1Fz@Xk z%H}fB6k|VB1SGg7zFt~%{2x~I1p`)Lt>4AL~6c2Hn~4K`iQ$q82o zZZpfsZt5w1dol$bSlkv# zaOQf6ENVS7xc193hJ}{?DXSim;q>m~s)d~QLN>38lifr%7}0>#)y(>^^Ys3KJXX^- zKi0P8mT~KzRM?-5g4B``zo343X!_VW!~PT{53TVkl3%7cU^Ni#LGcN%EYXU2 zvAxlBni{vUK?Vvcq9`?cmn1YcWME(wzTf~ZQ+|y9X~l;}VA(9p+mlX$58>wRSzqs; zI{CC1ZMSVlfa^ABrAvxW3k-k6U#uGrkjo0 zn25gCLwcjD0AkGQBnJ5fbITk@99{ZoZ7*V9|F8|94$Z%VC8xzR&Hl-9ej6C5Pe2fl z_ce&c!3Yfj<>7a_4>$Ht^T8a^8-y1C1TEkNRQV(M&F|iVzqRbEC$N{GI{r72fg}O{ zwSUwvzy&13?!(xc8@?3p-6OA{*DjK5l<14vZ6#jO5W8J1i^sgk0dn$hUxUm6Hpw zaFUjIGwU+S_PTc8ZS`uhB4RG$7jr*LABJ-N`0+!umXUWnsAXYvy?p#^236K-%SX&z z;T1}r>|HraX-{g`EQ&7Em$gC>0Ra`&o@l6{BWWdqQCA|2YN$HLJj{W53fj!`g?xn9 z4C-N(L(_nGaly)kwV`jK{nx&_n^N$^jP6|z(9TSNT8uZL$f{R7zl88~pM$tkA4HOI zVb3!vGm~x7uV@PD&c;Se+nm(p_!;gw`{myc0bCYt3P~jQp47_|5BPq8Oiarqh;<~Z zcm}LeUR)X?xV$N3%d$Mxg?<@2xL8p4oP3nq^g-=wCf8hw5dieUe&Mg;@!zPGLNihW zl&zX>t&Frbr+YZ$E*8EJ81A}%n=lHfw(~*uzgtESZ}dOl9pp;>JNA3*%75`J#MQ%g zR1#E05_qI(1)eAV`l~K2k<&t029+ZODBjDV|1L3Q+10uV7g|A(gMcOf=Z5h`r+@Ns z9@Fk{b2}L)N+SL({$CfTkLQyn_2n&ux?|ha@6`znw|d)(+%g!Rfdcf%h#X*hphw34 z4*dk=KK4#9vO|E&S=3`>JoMF#GFITivJty!W7YYR#&`Ur>lL55_TN1KT6Mt2V#dj5 zg?ea+iHSi0F+#w$Cl~!ER@-eb_*Os#8Y2ZY)*svt1_Xc)ng^LdOAi># zz;H@eFHRz3HRxajLY<0=%J22~jTX79o=zJ`gX`m5)m!tMdtXXgNlC%Sp{JipZs5Fh z^y^E<=mf=P;8WK}paH!%1#}wr02E~fY?f~DnEfxccZ(cOQ1F6q&2ew1{rRH4GYBQn zAu?+Bli!ZV@mYdd=}lp}a$hNlmFv?_o4IC4gKkmVVx$YqCqV*q3-k%E3CbVYBM`9K zt^87Qbab@HX^od6pF41-8+nv}K3Ub$G5W3BCMrpi8%MDmshg3VX`isl<*+dsKR0J0 zCDr)q)hjq8Az|G=e%vn+gLVR(A*fCK*yA$;=@w6N%}?m<%T$XXLXl`UZ~=w-=1dd! za4hgb>q#H)G59`BgV&n@GGdJh)bC$QzvHx9?YDyJbWMVg;|DQ+`m40G1|&$W0x^il z?nh9%Dzg01>{r7M=N0SXgEkzJ5=CV}hu8&&GK$YhJ*O&t>pd@u!>)1;XOzs)>Q2IP zV$a zp|6$}WTa_S!`*YzHGl9+eAgVo`VEyW+q-uq%E!8Gb2<7@w`}lR4n7R9aVX|pD$#QH ziayL@x*@`L?Epx60b;(>=3SU=}P?T zXsccuo6SZ#&iYCb+Fx9=ODQkzy@>TQUYhU+ea7FW4Qh4RzpU;uO|6~c{-=tx6;t^l zi4>~0@sIW|WPkhCD$#cDMU6w*AL!;MW=u`?mEs@%pEBgJx9AD%%$m7A+5tWlS(*m& zKQ(OkBKz*q{crHk2EYDK_w7|Yy?YDln?a-t`H($S|4$jxN$ntXx&FsYhj$>xBq`Crp|XU7jo`K!$zimnDk*l@B;qckf`DhC9%Og^la-R z!YfkuIWP8PNldfi%{bze{vK7Hvq|U&MVq~ap1dMjYsK!f+2`8J${V9UszmX!vK-Mi)IOTgE`BNMUR8t1TumTRnxeh4x(SK>*v1q`fE4 z_v1&Rk00+`c>C7p)O$HP?@L#Ou3S0wo_$~J1zwqZ1#**wMeiRo56Kq@e>N3N-|r|$ za{8VP>ElzEZ@*#?yY%Yk?vMF~ezcX2Wvdle8h* z6a0xeaG8yj)z7o0reqK|vMx1X6Y?OXt?gYi=Z(f%Xh)=>r9FJ;(2wum4WT^HK9EUrYN$Tjcs=QG*TAv5)c`cXtp?LNcjPw)?N6+EwHg$MyI* zSHA8xV09^5wN+8}Sm?*91S&Whi($f?rld?`lz8~isJ~#@n_5J39Y_lWR*romosd(Q*tEpLZL*-#-|?O< z=OkityyfqhxVAHoGfN=TW;DE&myiCE{+6U|RzYvQ0z|!^J%3I_co*CvBB#h$1cwIL zwMmNUGt<)$?N39T{=$3^r7&ERB@Sy*dSnl5jCMY*Zdo7Wyj$`bP2y%~CwFZ!x!|l6 z(V7N4fhPwqPuvBbPBS=3JL<^cmhYLiy_iK&6Y`^URpR(JfWsPdKX5}iuPloPeqoZp zE%0Ph(Sp{Po#yet3}W(xPmQ^s<%h1A<~N8NTX!s^e!eBT_vr`;sQEL2;H398y2w=$ zYb6Itn@Oh8aVp0FmRQv$t@ZrEcGl7O5x*ZvMJ4@7#P(-mxB8>q5oNQ}c;!N2P?Pw! z?Xgu{(rkh5Ezv15d5@4`sPWwK4`iy~7OM=xF3gqSwme!7nm_39&a{xQQBPWh)F*Eb{x;9j>dDHcEMl# z&v06mH@E_S!+4)~?k}!;8ld?gmXqIfOYMMt^xOZQLt4w9WFaf$gEXikm-T0Pr{#e9t9es0sfqS>R6He;l4{J(h0`4JQ z*l+O4>_GVKQ}<50gt<%!48L~+$OxVZd@{nDaJuxaY{lbj?P0RBqn8wsdw?JVUOV#U zx*_&sWaUnWqncYDIxwB{f(Jxk-QC^r`Ct(s_foZ-Cwg;fp^}Tn6VoH*_q>Eh_<0}}~DCa;ttT$ocRkZafnPil>D^3&aW zc6Q%gh{7ja-`x5}G59FU=0ZV|DI9n3yf;9Ig2xkT+AhxiIUC7$T?s95a!fax9%X2{ zxl)}}Ddgl~5mg_M1yL>GlDRvo=H{=wymW5A0ybt)qu{J}bj>1zK(>-sWaO#`YWSG- z)GnW%pGV*T9=oSNN=y(l#F%+%?sto}8TIv;1X31OVwv%0Hlli}up=CXm9H71Hcv zta&W-i>{!s4!xbY4WIRJ?s?T2ySocz7E?axzH_uZ&q^FDQqqb{p5D20r_D<+P8GwC zn~XQ`pzMF3mI{v_@&+Z$?68+2wDaIJ?3Y0s-?M#p351G%vS23Yl0|Jme9UQQdkV+Z z6|rKle7n-~CaqN5gKNC@Hkok`sTmD8d#|MCbeC9Ylj<8ePdsxc^RDy~q!r*d)hwr2 ze$}lq@ryCmWU?he)Hj4vpCqjW(~(o#92E3;5)cXD;idp4YJYvf%@mbooRH5v!&H^$ zskh+2ru5^e?YgpwK$h>UC<)im)7;MJvLcUL@J^$ zOEUbFQ)#BD*6z*c7m_0_r|eXOcj&K_afx*2w8K4r%Qq|cUs#@c-bTDuZ+BP6z3tEa z-fvIZSF=rK%h_#OD1p7Bqm%fcf@L5UxktssA;+KJ2x1wH6hfQ7JYBP$%~r(pD@MIZ zU;5H9)>Tq#+UB}q`0gS0F%avacNluAivS{wZhpDFVIjQNa|%|f+|9oHmo2saLBb0o z;|rsr-rf$eV%DPCFpNQJazxZRzvQbyXXZt|ii3yN?};3SnH;hTiUEW{+R2oZGdTTc z_c%*XIgY!pF!oe7LvBe54A}g|V1?Ar`}dy^8y!;SsmV#r5fl-4GKPv%iD~ED%xy@y zlgjxn_wj}3ZOqdRGG0D$hnkQ|Pa;lxn!t_?rEm1W({8xm3abXq572j*YuIf%(G&&z0pymRV7P%@Yxjb@sHFLmP>{^p z#?-B$GgOX!@{ZdP0tO8c{dcfjG!NwjO>bEl=P9*ZTknf|sMhYP5nNySkzZz;o8M~D zhK)^Rb0Z*2+1j6e$8p!TP&`mrG|6Ut;d-`YX1i(IPSKi+fKjI7RNc-!0|uJKoT8Ga zI>;du;G1eoyxgMLnI@2)iEKhsi!)Y^lZuVAYvB60U}3N7F4#(+TwoPE zVL$0FhpzO*1T@C$_pm?PSkf-pVjZiblI_X$QV6t~RUiKLdY_WgFwMGet}Geh;Xu~# zAdIFcv}0dYx{^HI-&>-RdqEi!#jH0_G=yuv=(uCORv$V%dhsw(((2l?saup2I39oU4q zEhQT`hUn(1Blv_5Q+l=Tkp1(<2nS*T5(;uf=&{&mx#Je2R9)S^wOuS8zz7>ZZ*&*i zm7DJ9du`O;b${`SGRk6obJhx!A|C~GCX;XcAQxy)%$4z<^mUYxRjI5Xw6+cW=wiPl zO&*GwPj_7YxN`8|xtK9A|C*EMTYk30N-Ho(NzKv|!PtU#AMEC`9a<+#;*fh^A4MtS zpF4e9&$0Ocat%A0D`ko}lHWEsoX=o!%y@aq6_=8pJ^k#G)8WoQOP9BPA%Z3TdfBFJ z_eBo(6>z9yxw0&SCl`;JHoGdLe5kRHbB)6%6_a2_1vqTP*Y4f4)1|PR5q7K_RJ*#f zMbnjBNF;;r(!NA-(-`aUbbTR4Ir~k!$j}f9oH%TG2y?~&cRT2f-aXAvpY*FCypelZ z0csC>K@6t!`937fKth#qz}Jv3g2;dk8mFJAZbpWQe>sl4^!mR}Hj_`9o%yVj`}I>h zTEmdnkPr%~Hxt=Hn(3*qD;V-U>h1wPizKphx*)^wy`0!Jv9X*f%&?2STmA?UQ-6Hp zU2+yr^DfQK9}DQ2z52{+^yAlm;+fyBT}vUYeRq|1ef!O!RLSrQro$C^Xv}2vPDx4G zDp9P-SY1<^TJq{IrL*`T4vB?_QTNAC_|QgIKn+CIY}NBwmDO0SjE`577Z>qM?9OIf z@abp_>+aK+|4cKhd|LdR=TPb51wCi5VF*02G2Ec2!?~7UpnHdMju?=Lh5Z@E&A^wsBd*rB~XKHli{F{azl8f=n=UGrk6M&GHLIqnv0Oe^Kx0I>}mm=T(GD0eDHi*U895+(b;bq!R?Wmft%0Tyn1qx~y#e?dpo zfBRx06i>!eW@UqHdHoZVsv0!1_B=Y0$4Ax7d-N1OmJ3^U1hY9#GeQ)OfHDLS)q9jc z5Bq9wuExia<%aO1U>l)CvADwg)xv-!by+|_z+uxUrCmcl?HAs~6`?hD>E*ZDQ%FY1pZWGkp>@m{87ZJF&zov$hO13M5hb0m41 zouO*rX1@|rGTe)RN%*igHpRRyynao%o^NOEqZx+yNzctaKgkQdVuVui_hT-xWEb5r z$mjOj&Q4SzIU@tk{r=dI8`qQFlqPdUa{8AFrND`<2!@E-=l|cG zY=d68MByC|itG;kWQpPV%4EAap~G}VyAFpfu6?MtR5pqtL5}4m$cqS03P65PbYm9H zu6rtu1hZ4%mG`}p%Bo#M!>74BQ)Ogn$EBU-ad3Q;#o2E=ndvG0S43qh)UX zPII)=)u(D%*GqLNY~ZY4mrA|15vTp# zp8OZjb@WEu&Nhlt8^tY)2hh~;iTP$^RQ&d1`EwpK{RZ!@i4ysAiw7$Aw}f#TcBC9$ zV zk9oQ$e{tL;;M=`t+BY(yzq2y{g)H5!8>-v8sFH0?%dRi3ckfd1ON$-DksD^UOgJAu z8*?Vruot;tYJp;dZ2i~j>XhEz#M&%f5>sfbgOGx|2hqX`^JV*mW)U^hL5MrCLIZ72 z=28?{mfTrv@R$8-tbU#av-aTLTlDQ$LJ}1Y$fl7yqZPs0c7L5?P@D>MCt zpu7cRva0nIct|sQm#q!TRNgK*Ik0%3IE{xsx|xa8#kz-`=D9h#Jffp=^$iW$_<9Ec7UW%=t!}G_T6;7Ju8idRMuzj3RBmOx z)-yj15B3Do{kB(c0gn&AfRz86E`Gxx^#>%|9zm)(+|5XF1v$h>nPz?HU}O2AC&)40 zqul;m?D$iFfwuyDfmC4jpp)NO#ow~c9x{64x5LlF*}dT6Qhd3l{@U1CIX?hh1-w0B zvjPX9HsmW{)9r;SHl^>|l`CaP^+{;^@#1z+(l(C>l{0`J1UkWJJNkWa6b*}ElV#|R%k{QkVF&OwC} zh8!vF-^0(6t3T!*9|;pOAe5I%h#&{Km;-?*ApUywj7yo_ zxL*JTA@2ql>F)Cj~zKO(V32gy1CydGHVN}lv-L4+Yi{(>Tm39Or-+`makdu18GqY zZ~lZ1*Eoax-N5fZhJB6An@xFBdAw z9px6+0(*)`RCymeaD1u$=HALeUz=W+$4d7?CdM(Q#A~;8IdaFkrjgg$u_sf{qHOA= zt&QSRdS2GB44*-h^5BAaU}Y`^l{Dw)l&D`RF-kR&3D>7IC2Aj7(_D>_cwiFz1Ztky z3p`$pbhC;B{rwkVb^jKqJ#QH`u(Y8UW~!A-9!7+#rrys^w2f~N5XgO+>%!!klQq8M z@>nb=bTAZ+@mBB2F$$%b^4U(-djV)9OgFLtxDZ(vXaxoVLb-s(2m!<_&`L$X;KCk6 z?MsuFho@VY{r!!)pqtdUZVj-?<`$F<{cwk|J1{wtDSLUQ-xgk~SpWnBmRXF_5oAhW zFyZ5e*xqad+WL>j#_NKIr>1(Lss(apbSx?`Ixrf`f(A}EQf z1=$SN#jrVroWL!bP;m&MrL%twzHq%7b0ez#pw{}YN}b$FhB44kXod_(1pb99y{m2QoAUsk{>zP+bxtJ`aUV>k8cx8c{!7lh4j3c^l)zqY7#BHMmMTdsdGr- zL{=r&$oQpPF`qbbmaA8<7O#(mI_lcRPe4))(uiU_yu8ZWs#x}5;H*BXQBqO@SUMoM zpq&%~8i!w9H)HMQhkhg^T#r@#`s@cR^fnA<2qBl{%0&c?NcGz_xK*TM#YmSuYoMyX zY+nw^F3ihhnpISP*i>?HK2>Jmrk%*>w;C~?IMuo|??S(Yd2&zKObNp%(i(-J)$c`4 z&xu2rvy_}Vj>+#&wqx5uZO_WeA4`bgR8dd}WlEl=%8Zt@{mQjmcRt^Zn-0}pSA=G$ z4Ul-XULOsF@OZpFR40H;F;&?D0l(ALx3^cZ>1u^>%;fvN*yvoc3brvcOlj6_>#>Uaml>OMi*H|2JH{vSORfg%xu#GoeM*hl z1{-A06Ozm1w$n3UaJS}d7xEOYFa?0f(Ae{dJ}lH({((PQRW0MEBNaGPQa0?8^5e%( zDziOU_K-B=lQ)ol=#afOG;~x$Dgm2_$taS@XU%v7DR9fP>V?*pmW<3ysc_!*SaEWT zb(qttoMT9Lyk7g(2(v6qc>0b07=zN)&u_26%QMv4E=^o^D`X_W9w8=f%tn(mC`d%` zD}|SM`}xJpqIQhccPG}pKIokn+!6 z4|SGfW|kh&hQGy_O*i;#*MRrkMJqERIIe?g?iy*K@qn{96S zW6*Xh-8wLzOm#EECS}kz`y|1hz7Fs zd^7CoLpT;@2%VxpBoum!>+!1qb3qM&NG2oy;6WAiB9Bg+U*IoIRW{GpO+TZ4T8ny2 z;AUeRm*2ST`sUgyx=&-CJ(N0gk%{4oy=B!r$&p#}5S5Xw~x$TEKiD zO&ua-2GtM;J&DDequVv&zGM8iM8Z|oJ05i`t;;zLLrv*uz{fX}i=e!Tgbc7L@F9cA z_s2HI&F@L01J9FlH}8@k_6Ls)-brcq6=Tj(_J4v9Y4ea5>;7EhC#|^>TX7%B($NvW zf&yZ z_})E`b3FkgcNrLt|1K9G!Rt9DiXoSZ!=x&yFANwx>}CgZoUNgu?Rwd7;*apDH%RF) z`u;x2P`2WzsPBc;Qs3EVLz#Z6B8kGB508Q12T6-z>4-q{TLBc8HBz1QmZ zfo$ERTg?WRLczm6UA~e-Yv?|I$4ho*yV0Njk|!Ws%Zo#At**=M=J$W?$gIY_(surb zuz|#7hTotTM0Ex~!|AeuO;0 zMd#mmp!<-;@Ak0&7Xa-aATSS?#dGEY9%uW#TALC-O$mN7Mmt9nsr|<&`LFbZgmy@$ zA8ZH6R1gU2Pq2qiWugxSBHGf(%Hl)Pa^}AY$G+bW_75id`AFHcpx;SGwakb0)rGXf zNX&>2Y!RU;SlTg^*wcn;9?@Z6dXA*G@NMw=zP%LZhVn=z`a#{U9wx9Gm`Meyl#A{+jfFE#q{QLd#C4vC3(0L&_cVJ^mJQM=J zQ0M>#eKycl2Cs`K%lwDhL%jJU%Y+phWUFr+`oic6>K;9duMVxEfwU2BAkj>!5$a1% zYonO_M;*WvC@h~f3vzg3qdLo-eMZT;V(|PKnU{8D!!-*r^P&q2v3FTSzw=-4UAp5_ z-~bYR&AKGkpsFGa?Zqv6Kt=>jlDdY5Ted5|VDhV(TO*&1>d z^$+jg4^80dX8+n4&+$R}RW9}XjT*n%csaM^mfhl=8dDahz{K}?ws{P-l}0GVLbd6Z z*Rf8?go3#{JlQ_Z=a2hmkQ5c|ZpZ|XqyTqgw~-Vl$O4iL(1b_r zGK01==-ehs#zdKbA`nnP*g?_O`aB9{z^WZmIp31DS45d61CaoIF4rb z(ql{Wz@Wii4g)U_CYqBWu2GRJE-nsY;tk*hWo&(WeE_tJ#{aG%a-JX&`u~MH0Y?vy zOG7c@N!E4YU5!2o<+WYZny~kGf4#u}!;h3AS1R(+!>fkIUfyabao;YY3-jmXBF!Zu zW~w1CEz!MJw~o$SxqQePDV_d#9WR9zIlT00TBAKYuleH>>q5ky?AbI(Y(W!Mcn3RE zbjy8$n$|p%AHW*7yWVn> z*_mnnfxn?LyBBZ92loSoW9Rw4{8uK9(I&HK^ZwqI+4C%6Lp#Vlmo1tc{liV5PJf~Q zZ8vF=OOm*&VGHq{d*uv-s4(YY2cmd-LsFKwuO(Whxq~G}8>>Od_+^%soO`qt1VBS58C&y2@;o`k3#(^oCAq`@ zAu}8l;?6=kh=D{Q8UG&*!ezK(k0SxHaK{FVkBzHQuu<6c8gVwtuZDM@pN`pMRS-iw z@an7wSsgix0_HRo)z_zYX=!Wn!`bKC^>dsICB4^Ns0|B8&rg4V21bOpu{I@fDe9m} z0J3Id(dfKwS70&NZ}6MX4?Pg6b=ux40xW&J3L`D2lvsrJxG*}?w?2D@PBEQwQL@$J5+;C~7`xhjizXbG$mybSr71%X@e*5l-hSlm} zhQ7R;#^2w$JbfB__pZ3OQ1PJ2RL5GiZzz;G);Dcg9yf{ArvZM#PM>6W`_*8uj=s2X zEF*yCl*>5h3nwC=T+g7upO)E#qpjqvzhRK7_c&D}**Wg$=XO%Y+|Cr|IR6KO*_}OA zn>B@8dNK}J3|M`=m7k@{vD)4512v5GIEZhVYCalo`1<;_ONLgluWz!J=7+3;*^ZRS zt}MN`1@{KDrh7EA@1%;Q%y6W3^z>1rVp@9KcsHBbp`MKJCMs%qfj5zrZ?L5J#n7o< zJG3Lw(XVHT=xUnk`RU=|#H)fCA`uP+0rJ?U<6hS^Qbo<|{s-lU^85NCb&daKI@)~V zlo>QEa-0{FNYMnqR=1lKl&W89t=9$Dt7N?cCA<9EKoJj$?ng>6x9>NBqUw%ll(3g^ z3?nfyOQx|}22EhRB++DNx@W_kR5E>z@|5hjr`ZmvWJ$BJ002(6*RaMm{YHFhB_jtU zNS%NPack!#sb1>$=U(zTI8?U5Vd!{j)Ns7WAc|{>BHCC@H^|nZ(ev~?xrW`HW`d#X z8S#EvZpu*#SCv(sW@mG9i6p0+v!YYCbuY-q!+Pj6Y-M}at3BU6mam&rAKf;#4I+dt zUQ|?_Mb`J3updM2e>1&VNG%|MOaeNY2CO8oi}M73s*3Y(=7_58p;h^E6tkeU>AM2u z(VCsZCr>=8*<4vpm-(SVrkGe})e63NwM@Nkxln=RueU`M7#C}H>$?KgGl zKtguigNw3rW9Xyazc*R%z(6p>g^^vYaxCquqq8b|@0fIw1x?VIQ%^v%_f-J8uZU-$ zww9V4GY=yT_%Nm)8Q2ik8aPn$RiaF^&*N=Kx)Rlk^^<%RwA?1|X*!iI=3*=8wV>2h zJF5TSntq73^-G9Ipr0$}d1cV2OOX>3ucU5Si|IruoQ!Wjk=YUA(!PH%*L|jmX?C}a-F+P;jkIsPqV-4Xr(fJ zg>M#3!M~=+GL04dHrCs%TAD(%!rp7>YvCzlJBC&*Tq)Yw@)#&K7%k%(uwU($hc+3I zwuIQw_2k8xx;o9@RqttTU zR##@Gv8lZp*k;6TY6fRK^5I;LR!u&ht^B$D#6|2EWn@FyWGQ?pC@w9HZL8~wIH;C$ zC%mLN&SQBU<C*A{c9PR2%2V94R-%=5n8HCU_|Z|N?!R}W zlG-{Zt>4PUtWH6v(iS6XovEQ#a!Y%4Mn~j>Zo;x1y)8y68>Ib4RpfzN3T0XT|DJ>$ zX1*8w+?B|dn|-PDfOE_zhvw0LfuX0(pATAC8tUs$b#+}r&z=E##8$J2qrjJCAbJ6g zr+edN#~$^;f=oaAUh;Wfz(B!fghc_NSqqyO5VHB^6D zWpi>;Ew+0hxvJ_g+hNmjl(PTh{`abzE(#jK4;whAuOKD?CtDN~IM#^PTAVgad(uH@ z8To7C*f2+miyhhxq|p08o8E*$Gc1*lur};{_HeL^$}aIS6qOG#dNl=bt{qOT^Uh z2}mpkspc!Z-@XL23;3yF(PZBq!xE2wLHNAKI)&20UN{NilgIvk*@HqPk?;+8sz%;h zQX(Jg2RoOQ-i=(DQuTsN>UF)t5ALDxujg`~w}050VigO<5UQ;>yY)G*^;U zJ-eqjiZ}+D?raE^1Xd8CxL#C!&!--1xzGF|Y}hoecAZ&g8$`*^3qe|ghxyiopPIl} z4rFN9F`tMC%)n@n!s1u?a)r|^#2dwaEeu+6xzcR5jWO=3=XfedB?1@K8a942uAn*s zQG4_aZpWP>8Y<*MKv|e9@VUa1;ib!ycodH47r%+-rZnCWYtLp0fw#s$cBTRS#Y&g~&>Q?vu-cf(;t>@W*RaHsy{2Qj8wZY8eg<;Eh z3hf#pLVdA=VD}^O;gRg%&Li8;r5yOyyQ>#%>!eUY!sPp?k1Rr8^Oco94-I+#Q12;) zNn`&aS9@imytjK@gWnKtH=begw_M<4QMv(O-@Y*2EC~O87c2fo{($4{#n5v^5%>ua zd*CbbHvC&*p-E1{cmlEG$Mp-=g)2q)9++Ds|K#@Y{@9?m&)I#++Aj9xod)O0o+`9~ zT;ge!TRE2NJwI~XxdkqcytPPh&tY?kCbDZdr;ttvI&?p{2;LL$Z1)ksf2!fgFt`Y0 z!+xvd0vbDKsq>>WIs#^4#oS{odekLGpr=*tLNq)yG{Ha+KjtQ8G4Xcm2NqlM1v)9~ z?CzQ_88E*!JZ(#+N*ub#1x*_zP|t^mxk-_LAfWr?p6CwT55a9AEk2?P>|Nl=RcW9- z5T=A$*d6%BVSjghf9!z`m&sMWi%(0sTF+GKr8+(7xy;k;uq$7h?~U@Uoh^2UyIOG11)dIbm&%=wZK#6$1@n(*m0mr0*;S7IxeuS7%h zy|$KtogDysPUqk&k53A|0UiCU7^r*0@T%)?2Q2~X@wmXT0J6Kw%P?iYSja2;4vfd5 zv>x%E#cVcY+f#Rn-uB*f={~mJUM(iz1WenH4zIg-E{@ z$&;OZq*!1%h>Gi$gjy?9sYiJ80onzOmplbo^RP=+vmFeD=U>PX2 zFus+JfqJe?$%jt}2*|4WK*+0GrmM(0la-Qt;fpf3KoDgd-R2WNIf1(0UXJ5<3RUri zh0WQL##+~m`#x%V>%s$G`s2$)@dHto5o3p}rfVuCNU=BSEdj5=KsjY;X$h>%Igg4r z%dkU_e-yz6!8C_0dC&k3O9QwuAmh4gqFk0<>lhRbAd2&SQ?%8K-BHk8Ahmvex7Lehl>d4LVY8swBkik7HRj$YjLky|}y1 zI8E$99BOZG58~bJUfn4*xrBNF7o&%V6Mz zsP8oxKGmKMk(2|9$5a!_x+&?qJh4aoN$x#cW@yuYr4X;j@lD?g=81}Yu7N7LveOa_ zC>wbgn*_Ro?<^vD%;HY@5NK&p<(>)PQ^azmtPDaOL~GOvYp+-{TeRrucbMpcrb3jK zpzg)G4UrJlD}FOA)!hE0u*s&eB_&0EXG<4A3zn}I7tyZoCXm|BJ7P#l3Vw84IyKuv zf$s)0v*a-R2nt0L%&l=2&e!;;h25)(tS?jIi? zAH&Kz^d1+~k(iSY_~wR%7&8M4G>8U;hZ{BOyoJF$F%HhkL``D;OQ1itVOgeIYkc+Og{@0#}}p}P*|-x=mK zzy#CoFHi5rb_bky(n=ojkT83OMx$$)is5*J9{mqee~Wv9bvU^mM!jSQP<1L@SitV? zPFHsx2R_$M zL;EUG>Mh`DM~*1^91$B&xM-{#)$Z_R5)~j4vQW2~BG|l2bkjui(C5#eN8$JvY`5FmSKC!A^1gjPuUNMEUq|4A2pv+grD_aep>_9XS@B7nQ@>WgZ@- zb;&!xYhY3-d{X)*FOU0$;QDlt^`b<{KGoZ+Ty1eX<*89S4cQd;vNz@c(f3Jz&{^FG zvbB#DbhD`pH(a#3^$SwkNzo#!l@@!i(Y>9 zb3JkXiXfM9Ur-=JgpyLV#^^<}9^166yB3m*W%-tqYr>N0YEYD1M;!jb1ZaUsNROcb zp%e}-xoI_{nh9w^69p)+u1hu~r(=?~6hzZUGbSEoJhi^R19{@rV$TmB0F;{o9s%%^ zdSTe(s3Ok>q2JH(aayfps>|b_Ia4`Z-@bjI)U)1WklxL9f+2SjtZwpv-dELlkS7B5 ztLzi8&@bW7C?`0;wkh`NgUN;keJ$`A4A(Cn&CK{vS~LEpMsfcVO0Sz>+k?a4m4X-D zukK8d06!Lufs9^*_9PBSN!|ppq-969$E{c;`^jRz^tiS(W{^U~KVB*_AX27dBc&&W z%KW5uYQ}=aCkRnP94=N-E@zC-o%_{pd<`dU`s| zcMkowJfN9NW-BBgE-NdGVN}@|3q_ChbA?&C_E?9I_hpM$%Po%fIHO5|(FC_C?T0~u z-t-XIzNFG8?>s#t*mOL*7ZXQ#*P8AUi`Fogs6jK)hAWItltHuec^W=0zCr~eJunOG z*vXSCOG_jVWhjp>S2}9HJiP5Dz*YnUSUx=t7$xb&?>8b8=Yt{L^{)jDBsj1&@+ps- z%ggT?gab1}A>mPJZ*QStcZQe1N>F$F&zjZ33tYx24h!+}@vNiLNf}`W^pyghi`Kw+ z&D`z>wS*ImK*Mx?W<`R+|^jQ@b zn;)>9olF@n+SO1!gM|s6bQ;X#Cu+!P&LU~Dx%mgtGFL zac>byC^JRv@JixPH9IgL++d(+9kd;IoEAK}UCj0F-TMyiHnh^|SRO<_5bj}K8xnBm z0uh-+1VKP=m#!09aYDFHa7mVF1_M2D`|28Q$4A4=z$$!@d;2DT_dc)-HEdrXfK;{I zha^gnUUj)6!6V%fB#bJY_;Ybk~-n76pP6ne;x3{*CHkYSmZ(;iC zct6*%>so>O5R+K%?$}$n`QbTXx#bMV-(45OJ|R2#>g>93n$%;CahSYZ0SX$zo)k(L zJL~A?i7yyvEGUOjQ5K?*R56wU1Wa(<_+w(h8}yvtO#<2l57o#o0X(ZPJ_AyoRKMB& zLN53wP;5AK@Zi!^r&QSYU+F1nPc{S_mZxrxuFVfa1PHS$7-6gtga;rLo|>bO_6nw? z;(YS*@?i5Opkw5#;mK(gUZJMm-rgo>QjY1!fiW0Bv2iNBv`oSOvdM4?Y7{zV$jVew ztik`jalP;2YKRa(L6@!{KxJV;K`%F!CZU_e?d^y2Y!$!K4bwiAgwTN=ayJ+w*xrr+ zLINL$n1Z`W-{5Memzx{Ve$XSMa7ZpjG|lVF|_P;Na60MNY*gje2C96)g?T!Gi~{Px)P!hVOyQ zu%!&zuWO~~LNVbASNHfm8@Ux}P zR@q(x<;DK~{-xLs{W!T)WqD?k|5!HK%K^>>a}e=^Q3~TiM8fz_-p9Xs ze$wveZMb~c+WEruQJEPT4r_z1V3>k$MbdL{WJBa4;z^MYhJLTL*?2`!nc?8!!?kyo z)v^@Wt}-$*GBGjn@omBmgRKLOJatsrAE+H7mXVC?p(WmY*xx$=&d8^i>lOW2;|S~B zNUNRgWTlg-TS)PxrY%)v)tOv94+5NxUf8D~3MauV@E?~%X)HAxA;7_QGfLC0fpMT@ zDAW`vew;r~$1vW&l|>IjfE!{&eW5=eAZif&^AY*?YxCAB+WSQ;Z}ANef5{2%UH!_1 zK=TBMg|MTh%G>O%KbxMm8)KR=@)#v1@ZJzvbOHkIkLVl64}WvBEC2PjxL~u2tN&W+ zs&URh@?-@oQ%g;@5GO(=B~U%eDz6C1G%MlHdzh%OFE}EP<$?K(dsmp|Zh}1n=<8En z_%C>rNI!I0L~q{mYwbKP1qr81?~U-N6Y`Jn>##3eAIL4uBa2F#B%p-dUKp#WYqg!= z9eyO{5@O;&5d!8-5!3$KE-Z<3ux-_8FGyoJOe>a6r@gMead!tS8_A+emZvRia3cC!7?f60t-ii{? z@^Q!hUSg-SWbhT&6>iMs!<~S=Ln!V%chdBJj6B@;=gW~twpS7(AYUfR-91G@(w3&i z7oX{^Ix?@YdyfnVsEa$>o47M{oe9#^CH!FH_x|R3943kcXs5{O5uvn>>Dmy6Izww~ zYx`9QhFJHcZ$|@b`iz=oEFeoA#I=J3yADH-}^m$o5?y*{B z{Xwm4n8Ev=pFkdRR9IT?fxqo@`^#0H<~4ns^Z!}!;`n%R)o*RF`M zxe%eQJ zbJ?~Gv{9>t5z*=o{|9k&^nFyyHBmmz)FDZK}1iA>rqTy7FPp8*_t5H$b2o!T1W1KV*r~%?XTwFIItgFSZUA0GKMc z4JfAIiJl9r)YNzF69*_E_dv*-{tKl}hv6#eoufs(AWK1}X?Y2v@5!a90+7YVJFE3x z(pEyz-P1E5mu*wU+N!lecim+Rc%jZ+Z+;v5hpiinU6(UdjmlyD{Z2NgD@;-l5F&!h z*q<54fA(SKDaDyGZ z+O4QPBhPI*@=oTK`NT(0^w#`%ZV|tLK>MtHVlCXC%%k2*0@0T5!rS-5i3|Df5MC;= zyF1a7J%vISU3P8*OekC@>*D8Ikzye?HLFgI)+()V}v}z-jp~X_j+G1ad$dX;wkbMbb-v_0rBwHjxDtXD4T`^?KPSy}Z zS+eg-!;If~X4JdC0Bk zXQsNMIV`(L!F^0*I}OJdHGF2hhC7nhP2-;1W_l+J_YZ!1cPNOXxD$%4a}XcV8SBzf z?xRVL^)oDMxq3PD*}x3!1{Hpg!*mO3x)GpFrWqYqk)Wf^JOj?_X~DEH09Ay_-d=tX z8?cT>HCI&oVGD6)C7kFJgo0~(?47Mv@EG$OzyBZDOn;xSkmbOu-QI%he)25mNMrhx zBMsIOd|>U49{70s_^Y(-XokH$JU`Hl726z`@q>4%5dRj?IK3|L#NOCbIsmaNzfrHl zwwz`Ik@-RzEsPcH2pOzwLs9-g`Xo@uPLPd0%D;g?o$G+WWg%k#+x{k0+Y`^OQL7x= z{`+f$5JXNs^kl>xgvmaFz;d|pkZVQWBL68$+0Ee>CZ;~a<QMR{9ExEChzS_u_U+qX^KHLm4}sZr(pFJk=QeUX zfueBFKs)~oWc>tE1rrg_<)a(nj%OFT=Wq!hW=KOrV~}SB9d4G@^lmd>d!Wlg%1YLE zS^|~BgxD68|D6RI-Q%EO#`7RJxG&o{AU0cJMU3n~`07%UU-&Nh{`Lv=3sigPW3Y+! zO?P1wsS9wwHpGbVprD{lP}J3moI+#*0FZ-(TJ*ERas9?bNl8}LD+Aas*~V>$%zuJa z1lx5Tj3%hV0o&6L{HLz(#+qXt$$aE@<461G=@RJHfZ;hjx;bVbAXxy4H{kMOVvYjL zk9S`Bq1G@n-TAf~Livo960IHeA7Dy~7$>JfDpWZHSP(7V*DYv+TwacW`UBe!)*8$1 ziCqP^mQRuU-XRl0OMfyEE8XTI|E3HoA3clh`UHSfyl4zv5;p&IIB&QT!I^L&^LwL4 zq89}_DmFJ-HX&0WJ)vp1?dO zTo~7uT=L}YOY_x-)U~^{yba%OA2EPAwIQ;vG(}Bo_I4h-R;b6V^6XqPM7U#{ufedr zQR>8F_4+b9g9hoyfQAx^A;?0EK=C)PJJjVA6uiJEDxL3#nJP zoAZ-q@%<_J(|XvQpt!kxEBqCDjxn>egtG-XKRsVgqct^Jt$>d&EZWq=o@zavT(9|b z!jBP+UI$_h>Jyz|%4c*_WE5L6Oe}hN{bP1|k4+@2xgb#@0zM+g2f!5AVBlBl7hoje zm*QP3C7P|pWl5d4Mf5F;RY?j&=4f*bS2xN@p=7k6^{(QN;WErla`i__3PI_N_Y8&+ zhEH<n19nnvKAnDs%NJuTFOP1r6=lyJlu)FoUDQFaeDgb=;+f4&J!J}kdlc} zR{D(pa~&(~b$!4brh>I8F394stMLRM&WwGH;TSo#i47X-TrCamP1Rd{`Gf;tF(J_i z=JyQOr6fWPkms_GjvgeOQCBUy`$~eJgO$|`Mp+18O#uY+^YcT_sMGJmqeqWmY+vJZ z;l)tNS?a3l>SKEYAw4kC@KhgMEJx` zU`K&P;(-o~LMYM=I_@QhW#t*Z0}An$W@bQ&p62JD2Q%_X@J3XC#(>V`!85;{cSAxS z6FEdfsitG4GfzPuTW=|NOLpFW7VFn8+^$#)JUeetrhBVDZX;JYiFB$XF_NKE#hvu82!Vk|JU!Y0`GsXVRLqe z->olC>Hz4-4Odd26bw*4Ea5WO14LG7k|-qhhlc zR2>6-xPzJ+n1LMQ%0RS$Eqi0*mkZUJJ85X(aLt03+kI-eWBi&ZUa%}yn>8-+D!*!9 zbg*fTzlg@Tw7a{zq+}W7CY56NhJYNt*Sei@SO!IK(9v_js`Vrivf0%ogIzsiiOp;m zO1*mMt4uI`Jb-smQEyPD1#*Og6UrQ60PdoOia4-7SyFOEt|GZ}*jICcl4Uv5Hy9(S z#?T7LteeeForPT8z}AIU{Q~`7oG0m6~ALf$b&XsM4Sg5 zoms&K(172h0O|la3L@wl(C(}3o#$1#H={Z4E92W)d)K!aZ_2iMJCpCVHA8QwqGYE) zpU+$Uluoo341vz9RV>JGzJ_$LfenMsAy9yPnJ?g;Z2oa#v|&CH>G5Oe@2?l=srOMRNYyfNy;5UK%UHX|%^xN=q6p`p zPY-N)#2}EdZsq>lK)Ipdr&gizTXFKmJG7S{$G48lzSBJxiV&0-B#9&{+MajQbus1I zGiHnzNu?Kz|95oTe&(YhJBDByEaXvKIclYhjPUU6dVN;uN-r?Gw#TQTDtdv&VhBZ{ zSB9$vGmXl4tTkZ#7)Stuor2?%;+w}MJqz_LPZnU7gdM@FB1am6 z?gY=#XAtsnD6$?q2lA8_j6kzsVVOXF4@iJO<3gTDleU5J z-`K*2P2ou^CR7XarRSMN=jc*@li|#NS|qig#BXtWismim$*auTJ<K*W&Oh zkv5%K!}3IM{uPy#uKOzRzU$oQ&Z+N)oD&K96Co1iG}mQru$wXZ9YWpc5u_s#XZ_X* z1Wqz9t6>^-j7|$;{%(*q%^=l}LLTg?#jHs|EOAwki`Fsuq#yHxYA^wQkQfINyyu#H zzE@>)^MyXf40l0&CG{`q>0HUr!^4fc1P=1mS#@Tueu=ELvHQLEuONkq4|ypLeU7#> z3UQ*{Ae8~Z_H=tnDCsgg%P4T@41&H667?;4d3lga@A)2ySX;8SE_#81(x&3ia8hPr zc|gODC3t57c&*P;*U*5X6f6iELlz&&NdJt!e}IvZYflC)Sd&M09LxpS(Wmk8M9{TL z1uYB!K?L(v=w##2c=N;ZCixPZdTmdCZBv&2GdUbkS%hpa`Qlud;(uKpw}gZ*+^CS$ z4C{rw*^A7sS6BDfxg@i_+&1xPTDaFo)Vp#5J?4lq5_65B_PC;eUlTXszFip|`XVJv)(^=QB%$ErFDP$w_dQF!@T;4Mqf#Ki} zgTfMdYTmNL8TroIy5s{V#Z4V&yQuPaG_VAW~s2p3|jv=@X zXt|A=&8{P;55Nxyjw7a$!Usd>Q3AhzOb%48gfs5Iu#)3%#HJu*M%Y!^(Btvp;f_Gt zR8>_0t(342Q9PzZ-~K)<7cX7}ZV_N3i0w@k;vI7#FKOHk065sZ_nRGd zBgh^cKqzuV|B@#d)jUB-p8@epMi0R90cI0QnxjF|GvMGH5+L0M95M2Ai%A}Q@-N^2 zLI(iLZU7IEulNThfgXvk#OcvztDBx<_%bNWBJ&S$!NYNw8~s=__xh61%3ce5yf&-d zb_8#b`IAnc?=u)d72N#iF&aXBmcW{ro&z%W7*a+1ezO%$kb|TN3BhGZ1kaQV%>9rp z)1pF#D5JKYz;z3m&Y;z4KjDL~|CLclDnoG%197ED+RKN_Y5U!lubP1o(Zx=X=ZL zrMb(M8+$#-~XNs zIV||%gSn=k9z!`87|ND$v77Uv!Az`BV)(p9j*Cfh+JODW>lVE3+CF1vQcX;_X-()+ z$y*iaCVeu`6ZSb(h;+#G9jp9IEn&Gg`> zNCwBgL-5~~O<64pCv$i2J~F;oc)CR9%TkCjF(~ARxXFZn>i;fpWJX5}%cZgGY5@d+ zeC}Y?16p7!BNiRJs;_=ZXZU_{eo#X{$of%LUTkPaP=yS^r!)KdT_wESc+|PP#nx2u zH}rix-rk;T z(F^KCQ93fs;-9g?yEe66e(ab{IizKpsvSV9S|pd~Cpqd}@doo~M%c?_p=w0@>5;9) zMu*>VX#Ch~bwPo$NJwMCucgNPKye~pv%+TXUL&*c$*iUlS=ht67UcxIsc&!jh4(w5 z1eto0k*N@F9*}uKdamGJ-x8C9Hd;P%T`KfWeuNTNN)v5$A1x&88N+Ikyb<3WxMZYidr?p&#sj?aK1huN9R_i;pzRmcOQSC~ zwe2@gLCGhOV~_&+B@>S*zd=#%&{v!zRD{>fLXsQ?g7s|T2a0#dxb{0f4?4Stv*M3E zuSYZLr)J*9Y{Eyd8{jZCxB4`6tUD73^>-O5vj0l#XZC2XD#JuUN2GFkJJ%!wNx^T(I#F zdfUNmy$l)bpJSqg6(^3+q)M)uWNy0nd9DlkuGBoNKTNgBvDP@z1iS{+M+8f60|j~! zk@rxdSX?a3#%2z*slooNqIIYdD)bnJMiWL_T4&-xh*hBWA>4=!gja6z-52%9(1NN3 zi}}v#N=PyT*SJ{R(zV}7B?<&U`m2~xLJ3~Kr-uf zb@p6Hdb_T==%i-!q>y$hH-nSksNggDG8I=yr~pb1cHdwKd6Su`e4Kx7d3oB)^@8MUU+4J@F^Z==RSPTJ4&ZW_wMg}Q0ddZ4!?Fuo| z`PHlKas8Ao`9G7`;T(t2OB>^gGAasMb*y?dZgOQ8yo<(4i#=IC?6w$Bg8xoy1 zu1-!109+acgrLj};!2or(c;Z5In^{n?rXn%N44>YrT7h0n+bb*(B$z!(mY;5U|N^h z-N|_(Y6{(BnR6l(^W4|M=ezZ0Dp!x-6~Bdn;SIuu)7w;-va!Haa6v=rG|XPU$+zU= z0r4V~0U5dYRDL6t_PmX=>sp_uS!|ez^qoIzZf@>A^VM^0E@|A*ebv`1cO6bP3`{yn zH;IgAdtI$M7xI&8QT&Xjg-`gq?-Tpfj``KiZKPU07f@cIQFC!9zYaxU6J8#? zM!2b=AvH}+7bprWC@6pmkorlDk>TOm^E^<~2y#0ei#N1!?9Iib$e|mCq zQfc-5hkyQPh%NHZJGvXE=93~c-Yq|HYCz#?GW%z_fjC={@bB{kP33*YiWS2c!w0fD zHZecwHtAO1rc7#Z6Tho3U&+s?=<2k2ZJ70RHrrJsJ~A?LoS^y52t@JY;|)|*Rn5(l zt68{aYT*v9;(ZJpDg@^Xc)XRJok6iv@;b{EX_A1Z`|7GimVH5wbK-O{&JjFDdHJP# zQbSPg^1i#jG|_P8*YQR~?qPp#zMq=G85UviHl@bhip{5ILw}7hxuc4xj%^!URtio? zX_`J;FEkfi<>Xp5@Lia<%{S?uvL`$GUQuVu=v#q}*tuc&CJM8AFW)ceZDkK^A4 z8r<~m*$@(P^=br<;s-5|Zeux+_S8s+iEw&LA9MUaU=I7K7px3^a6T(rs*#zXX1usk zes;%^1LU=X%7i$10M^l1+`Nm(r^unl(gp4H@fADNg@5}l`<$Ak{j7tWRu}FY#;JAycD`}>5l5%<+IC(JKX#7cPq(d zMElo-d}9}J?Wv{ubL+cwek;sV{+c4j2IIm(k)856~Qlse=>!B>1NoMs>=D= zZGM0CEXK!Zb!%IFzn0j#CsL$VU%uTr*s_QKF=C|FuL8iMGl$yLm7talE$8 zm|DMEL;ABke%cf6F7DU36%UVQ=iA(}Quu3w)x^{;MC*xFWBqfsUw#nAKdS~*_%2oqC3cvP5c9}$rQ zaixU8FB1svJ&Zn}M$qi8qU}$&;EvguS=_u4I@xU?SuCnh!A6u=Wj*lNv$(U^LM6gg zMA61FzTSyxj5FV0MVSW2)UB3KG5B*IMTl_wj@i4lCSCeW=r?qez@2z2o^2@Ioz3&7StF1fl)v zLL}YMJ+BL_*r$&BaVTEkS_z&`ES3`Y^dN2gTwC)va^#4g-{$vEp^EVpve)nrLPBT~ zDN{q>NSlBjjx~SnXmD_^UVf+AbkSn3@@Fj-%?48@1I4wvHfhD`nuSQS#5!Lwoa1}# z?`V3g^vm4bMF4cij~{QV1nU;?vHZ+#@;N?q7d~!s=#TPSvGn3uLAMBeLOdSEpQS#_ z)vD~gzw-cn(yb12()shOr>^wgtS{k^I(20%6gNcb5WJwqU`+}+qS5KjODHz49P%qd#rN2iQPnK0eh{&A_{NpNn~_PfY#z(K@-z5K`0J3=?_& z%E^gPp-g;1z#!S6^AXm+S+rH)VMh$*iP_1!;ECJ;WP^Sg2ZD?MNlav=VQ`9&mj!oc zz@JG%fnb47atC&hXM=b!rE#oJ-0Mm79g1dGxKIU?MZnyEjO06*Q(=wFnh%l449v?a z+uJOW{%AtvD`KOz024V9Aovzl7LmOFVWkL;X1XP8);>R@3aeX!i`SDAH?d2^YrVvN zddU`BONbgE%A$XNx?pGCSn&(cW@@S&fy8T`3i?9bJ{l5Gc1n3#HF1 z-c3?qk3R)A*3{ffDw1vH@q^S?%N4 zRY`S{d&~U(%NqakI%Mcew%)t9j5o3XvTsCw9}jtmn&!Udz3^g}IOTJaLs@0;ZgOB- zr~k6Uwm@$e#{(!KUX;+sq)qrCp|}V&Muj>9{eh@*^CSL?f51EQG^DeCIP_2rmY`6| z4nKI2V(RjfcWCM1ZGT!uYABB=cD3AQudUxyP)}JD!A;@Fz ah0X2gyvl9pJZTo>wY-e-l}xFdcm5BzZu~I- literal 0 HcmV?d00001 diff --git a/docs/proposals/images/machine-states-preboot/README.md b/docs/proposals/images/machine-states-preboot/README.md deleted file mode 100644 index 357549e3be3c..000000000000 --- a/docs/proposals/images/machine-states-preboot/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Figures with PlantUML - - - - -- [Generating figures](#generating-figures) - - - -Most of the figures for this proposal are generated with [PlantUML](http://plantuml.com/), an [open-source](https://sourceforge.net/projects/plantuml/) tool that can generate sequence, use case, class, activity, state, object, and other kinds of UML digrams. - -PlantUML requires the Java runtime, so we have published a Docker container image that includes all dependencies (to publish your own, use `Dockerfile` in this directory). - -## Generating figures - -To generate diagrams in this directory, `make figures`. - -In general, to generate the figure described in `foo.plantuml`: -``` -SRC="foo.plantuml" -docker run \ - --rm \ - --volume ${PWD}:/figures \ - --user $(shell id --user):$(shell id --group) \ - dpf9/plantuml:1.2019.6 \ - -v /figures/${SRC} -``` \ No newline at end of file